Преглед изворни кода

提交校验+认证问题修复

yuanmingze пре 1 месец
родитељ
комит
5198b65708

+ 7 - 17
src/pages-auth/settlement-channel-sign/index.vue

@@ -330,10 +330,6 @@ const afterSignCert = async (): Promise<void> => {
     currentCert.commonCertStatus === 'FAIL_SIGN'
 
   if (shouldLoadAgreement) {
-    const certResult = await certFn(false)
-
-    if (certResult !== 'NO_H5_SIGN') return
-
     await getSubjectLocationAgreement()
     return
   }
@@ -362,7 +358,7 @@ const showAgreementPopupIfNeeded = async (): Promise<void> => {
     return
   }
 
-  await handleCertSuccess()
+  await certFn()
 }
 
 const handleCloseAgreementPopup = (): void => {
@@ -422,8 +418,6 @@ const handlePreviewAgreement = (agreement: AgreementPdfItem): void => {
   })
 }
 
-type ChannelCertResult = 'FAILED' | 'H5_SIGN_REDIRECTED' | 'NO_H5_SIGN'
-
 const handleCertSuccess = async (): Promise<void> => {
   settlementSignStore.clearContext()
 
@@ -436,12 +430,12 @@ const handleCertSuccess = async (): Promise<void> => {
   await userStore.getUserInfoByCode()
 }
 
-const certFn = async (completeWhenNoH5 = true): Promise<ChannelCertResult> => {
+const certFn = async (): Promise<void> => {
   const subjectLocation = selectedSubjectLocation.value
 
   if (!subjectLocation) {
     showToast('请选择认证渠道')
-    return 'FAILED'
+    return
   }
 
   const accountInfo = wx.getAccountInfoSync()
@@ -465,12 +459,12 @@ const certFn = async (completeWhenNoH5 = true): Promise<ChannelCertResult> => {
     authErrorMessage.value = res.data.errMsg
     authErrorDialogVisible.value = true
     isSubmitting.value = false
-    return 'FAILED'
+    return
   }
 
   if (res.data.commonCertStatus === 'FAIL_SIGN') {
     showToast(res.msg || res.data.errMsg || '签约失败')
-    return 'FAILED'
+    return
   }
 
   const h5SignUrl = res.data?.h5SignUrl
@@ -486,14 +480,10 @@ const certFn = async (completeWhenNoH5 = true): Promise<ChannelCertResult> => {
       )}&signTraceId=${encodeURIComponent(context.signTraceId)}`,
     })
 
-    return 'H5_SIGN_REDIRECTED'
-  }
-
-  if (completeWhenNoH5) {
-    await handleCertSuccess()
+    return
   }
 
-  return 'NO_H5_SIGN'
+  await handleCertSuccess()
 }
 
 const signRedirect = async (subjectLocation: string): Promise<boolean> => {

+ 28 - 8
src/pages-common/signature/components/SignaturePad.vue

@@ -13,11 +13,31 @@
 
     <view class="canvas">
       <!-- 导出画布留在视口内,由白色签名画布覆盖,避免原生画布在屏幕外不渲染。 -->
+      <!-- #ifdef MP-WEIXIN -->
+      <canvas
+        id="signature-export-canvas"
+        class="export-canvas"
+        type="2d"
+        :style="exportCanvasStyle"
+        @error="handleCanvasError"
+      />
+      <canvas
+        id="signature-canvas"
+        class="drawing-canvas"
+        type="2d"
+        disable-scroll
+        @touchstart="onTouchStart"
+        @touchmove="onTouchMove"
+        @touchend="onTouchEnd"
+        @touchcancel="onTouchEnd"
+        @error="handleCanvasError"
+      />
+      <!-- #endif -->
+      <!-- #ifndef MP-WEIXIN -->
       <canvas
         id="signature-export-canvas"
         canvas-id="signature-export-canvas"
         class="export-canvas"
-        :type="canvasType"
         :style="exportCanvasStyle"
         @error="handleCanvasError"
       />
@@ -25,7 +45,6 @@
         id="signature-canvas"
         canvas-id="signature-canvas"
         class="drawing-canvas"
-        :type="canvasType"
         disable-scroll
         @touchstart="onTouchStart"
         @touchmove="onTouchMove"
@@ -33,6 +52,7 @@
         @touchcancel="onTouchEnd"
         @error="handleCanvasError"
       />
+      <!-- #endif -->
     </view>
   </view>
 </template>
@@ -41,6 +61,7 @@
 import { computed, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, ref } from 'vue'
 
 import {
+  type CanvasBounds,
   createCanvas2DSurface,
   createLegacySurface,
   createSignatureTasks,
@@ -49,7 +70,6 @@ import {
   drawSignatureForExport,
   getTouchPoint,
   hasSignaturePixels,
-  type CanvasBounds,
   type SignaturePoint,
   type SignatureSurface,
 } from './signatureCanvas'
@@ -57,9 +77,9 @@ import {
 const CANVAS_ID = 'signature-canvas'
 const EXPORT_CANVAS_ID = 'signature-export-canvas'
 const OUTPUT_WIDTH = 300
-let canvasType: '2d' | undefined
+let usesCanvas2D = false
 // #ifdef MP-WEIXIN
-canvasType = '2d'
+usesCanvas2D = true
 // #endif
 
 const emit = defineEmits<{
@@ -96,7 +116,7 @@ const queryCanvas = (id: string) =>
     if (instance?.proxy) query.in(instance.proxy)
     query
       .select(`#${id}`)
-      .fields({ node: canvasType === '2d', size: true, rect: true }, (result) => {
+      .fields({ node: usesCanvas2D, size: true, rect: true }, (result) => {
         if (!result || Array.isArray(result) || !result.width || !result.height) {
           reject(new Error('签名画布未就绪,请点击重签重试'))
           return
@@ -129,9 +149,9 @@ const initializeCanvas = async () => {
 
     let drawingSurface: SignatureSurface
     let outputSurface: SignatureSurface
-    if (canvasType === '2d') {
+    if (usesCanvas2D) {
       if (!info.node || !exportInfo.node) {
-        throw new Error('当前微信无法初始化签名画布,请更新微信后重试')
+        throw new Error('签名画布初始化失败,请点击重签重试')
       }
       const pixelRatio = uni.getWindowInfo().pixelRatio || 1
       drawingSurface = createCanvas2DSurface(info.node, info.width!, info.height!, pixelRatio)

+ 5 - 1
src/pages-task/task-form/composables/useTaskFormAction.ts

@@ -24,7 +24,7 @@ const PACKAGE_FIELD_ALIASES = ['scorePackage', 'approvalResult'] as const
 const IMAGE_FIELD_TYPE = 'img'
 const IMAGE_AND_FILE_FIELD_TYPE = 'imgAndFile'
 const SUPPORTED_DOCUMENT_EXTENSIONS = new Set(['pdf', 'ppt', 'pptx'])
-const TEXT_LENGTH_FIELD_TYPES = new Set(['text', 'readonlytext', 'longtext'])
+const TEXT_LENGTH_FIELD_TYPES = new Set(['text', 'longtext'])
 const SUCCESS_TOAST_DURATION = 3000
 const API_SUCCESS_CODE = 0
 const DUPLICATE_IMAGE_CODE = 1
@@ -248,6 +248,10 @@ export const useTaskFormAction = ({
   }
 
   const validateField = (field: TaskFieldConfigViewItem): boolean => {
+    if (field.taskFiledType === 'readonlytext') {
+      return true
+    }
+
     const value = form.value.value[field.id]?.value
 
     if (field.taskFiledType === IMAGE_FIELD_TYPE) {