浏览代码

⚙️ 修复组件错误

快乐的梦鱼 3 周之前
父节点
当前提交
14912a59b7

+ 7 - 3
src/components/form/Field.vue

@@ -179,7 +179,7 @@
         <text :style="themeStyles.extraMessageText.value">{{extraMessage}}</text>
       </FlexRow>
       <text v-if="showWordLimit" :style="themeStyles.wordLimitText.value">{{wordLimitText}}</text>
-
+      <slot name="extra" />
     </FlexCol>
     <!-- 清除按钮 -->
     <IconButton
@@ -709,9 +709,13 @@ onMounted(() => {
 });
 
 function emitChangeText(text: string) {
-  emit('update:modelValue', text);
+  let value: number | string = text;
+  if (props.type === 'number')
+    value = Number(text);
+   
+  emit('update:modelValue', value);
   inputValue.value = text;
-  formItemContext.onFieldChange(text);
+  formItemContext.onFieldChange(value);
 }
 function doFormatter(text: string) {
   switch (props.type) {

+ 5 - 0
src/components/form/SignatureField.vue

@@ -75,6 +75,9 @@ const props = withDefaults(defineProps<SignatureFieldProps>(), {
     width: '100%',
     height: '400rpx',
   }),
+  borderStyle: 'dashed',
+  borderWidth: 1,
+  borderColor: '#ddd',
 });
 const emit = defineEmits<{
   (e: 'update:modelValue', value: string | null): void;
@@ -90,6 +93,8 @@ const {
   (v) => emit('update:modelValue', v ?? null),
   undefined,
   () => {
+    console.log('11111');
+    
     popupShow.value = true;
   },
   props.initalValue,

+ 6 - 1
src/components/form/Uploader.ts

@@ -1,5 +1,9 @@
 export interface UploaderItem {
   /**
+   * 文件显示名称。若为空则从文件名中获取
+   */
+  name?: string;
+  /**
    * 上传文件源路径
    */
   filePath: string;
@@ -72,8 +76,9 @@ export interface UploaderAction {
   }, message?: string) => void;
 }
 
-export function stringUrlToUploaderItem(url: string): UploaderItem {
+export function stringUrlToUploaderItem(url: string, displayName: string): UploaderItem {
   return {
+    name: displayName,
     filePath: url,
     uploadedPath: url,
     state: 'success',

+ 31 - 9
src/components/form/Uploader.vue

@@ -175,9 +175,11 @@ export interface UploaderProps {
    * 选择文件类型
    * * image:图片
    * * video:视频
+   * * file: 文件(仅H5)
+   * * select:根据用户选择(图片/视频)
    * @default 'image'
    */
-  chooseType?: 'image'|'video'|'file'|'';
+  chooseType?: 'image'|'video'|'file'|'select'|'';
   /**
    * 是否是从消息中选择文件
    * @default true
@@ -338,14 +340,12 @@ function onUploadPress() {
             },
           ],
           showCancel: true,
-          onSelect(index, name) {
-          },
         }).then((index) => {
           if (index === 0) {
-            chooseLocal();
+            chooseLocal(props.chooseType);
           } else if (index === 1) {
             uni.chooseMessageFile({
-              type: props.chooseType || 'all',
+              type: props.chooseType === 'select' ? 'all' : (props.chooseType || 'all'),
               count: props.maxUploadCount - currentUpladList.value.length,
               success: (res) => {
                 LogUtils.printLog(TAG, 'info', 'chooseMessageFile', res);
@@ -359,15 +359,15 @@ function onUploadPress() {
           }
         });
       } else {
-        chooseLocal();
+        chooseLocal(props.chooseType);
       }
       //#endif
       //#ifndef MP
-      chooseLocal();
+      chooseLocal(props.chooseType);
       //#endif
 
-      function chooseLocal() {
-        switch (props.chooseType) {
+      function chooseLocal(type: UploaderProps['chooseType']) {
+        switch (type) {
           case 'video':
             uni.chooseVideo().then((res) => handleFiles([
               {
@@ -379,6 +379,28 @@ function onUploadPress() {
           case 'file':
             uni.chooseFile().then((res) => handleFiles(res.tempFiles as { path: string; size: number; }[])).catch(reject);
             break;
+          case 'select':
+            actionSheet({
+              title: '您想上传哪种类型的文件?',
+              actions: [
+                {
+                  name: '照片',
+                },
+                {
+                  name: '视频',
+                },
+              ],
+              showCancel: true,
+              onSelect(index, name) {
+              },
+            }).then((index) => {
+              if (index === 0) {
+                chooseLocal('image');
+              } else if (index === 1) {
+                chooseLocal('video');
+              }
+            });
+            break;
           default:
           case 'image':
             uni.chooseImage({

+ 1 - 1
src/components/form/UploaderListItem.vue

@@ -59,7 +59,7 @@
     <FlexRow v-if="isListStyle" :flex="1" align="center">
       <Width :size="20" />
       <FlexCol :flex="1">
-        <Text :fontSize="26" wrap wordBreak="break-all" :text="StringUtils.path.getFileName(item.filePath)" />
+        <Text :fontSize="26" wrap wordBreak="break-all" :text="item.name || StringUtils.path.getFileName(item.filePath)" />
         <Text :fontSize="22" :text="item.message" />
         <Height :size="10" /> 
         <Progress :progressColor="selectStyleType(item.state, 'notstart', {

+ 0 - 9
src/pages/collect/assessment/argeement-sign.vue

@@ -130,15 +130,6 @@ const formRules = computed<Rules>(() => {
     ],
     idCard: [
       { required: true, message: '请填写身份证号' },
-      {
-        validator(_rule, value, callback) {
-          const s = value != null ? String(value).trim() : '';
-          if (!CN_ID_RE.test(s))
-            callback(new Error('请输入正确的身份证号'));
-          else
-            callback();
-        },
-      },
     ],
     ich: [{ required: true, message: '请填写非遗项目名称' }],
     health: [{ required: true, message: '请填写身体状况' }],

+ 5 - 10
src/pages/collect/assessment/components/AgreementBodyMunicipal.vue

@@ -87,7 +87,6 @@
     <Field
       label="负责人(代表人)"
       label-position="top"
-      disabled
       v-model="detail.partyASign"
       placeholder=""
       :show-bottom-border="true"
@@ -97,7 +96,6 @@
       label-position="top"
       name="partyAMobile"
       type="tel"
-      disabled
       v-model="detail.partyAMobile"
       placeholder=""
     />
@@ -118,14 +116,11 @@
       name="partyBSign"
       showRightArrow
     >
-      <Text>点击签名</Text>
-      <template #extra>
-        <SignatureField
-          v-model="detail.partyBSign"
-          placeholder=""
-          :upload="uploadAgreementSign"
-        />
-      </template>
+      <SignatureField
+        v-model="detail.partyBSign"
+        placeholder=""
+        :upload="uploadAgreementSign"
+      />
     </Field>
     <Field
       label="身份证号"

+ 4 - 10
src/pages/collect/assessment/components/AgreementBodyNational.vue

@@ -92,7 +92,6 @@
     <Field
       label="负责人(代表人)"
       label-position="top"
-      disabled
       v-model="detail.partyASign"
       placeholder=""
       :show-bottom-border="true"
@@ -102,7 +101,6 @@
       label-position="top"
       name="partyAMobile"
       type="tel"
-      disabled
       v-model="detail.partyAMobile"
       placeholder=""
     />
@@ -123,14 +121,10 @@
       name="partyBSign"
       showRightArrow
     >
-      <Text>点击签名</Text>
-      <template #extra>
-        <SignatureField
-          v-model="detail.partyBSign"
-          placeholder=""
-          :upload="uploadAgreementSign"
-        />
-      </template>
+      <SignatureField
+        v-model="detail.partyBSign"
+        :upload="uploadAgreementSign"
+      />
     </Field>
     <Field
       label="身份证号"

+ 4 - 10
src/pages/collect/assessment/components/AgreementBodyProvincial.vue

@@ -91,7 +91,6 @@
     <Field
       label="负责人(代表人)"
       label-position="top"
-      disabled
       v-model="detail.partyASign"
       placeholder=""
       :show-bottom-border="true"
@@ -101,7 +100,6 @@
       label-position="top"
       name="partyAMobile"
       type="tel"
-      disabled
       v-model="detail.partyAMobile"
       placeholder=""
     />
@@ -122,14 +120,10 @@
       name="partyBSign"
       showRightArrow
     >
-      <Text>点击签名</Text>
-      <template #extra>
-        <SignatureField
-          v-model="detail.partyBSign"
-          placeholder=""
-          :upload="uploadAgreementSign"
-        />
-      </template>
+      <SignatureField
+        v-model="detail.partyBSign"
+        :upload="uploadAgreementSign"
+      />
     </Field>
     <Field
       label="身份证号"

+ 2 - 2
src/pages/collect/assessment/components/SelfAssessmentFormBlock.vue

@@ -65,9 +65,9 @@
             :max-upload-count="100"
             :max-file-size="20 * 1024 * 1024"
             :group-type="true"
-            chooseType="file"
             list-type="list"
-            :itemExtraButtons="readonly ? [] : [{ icon: 'edit', onClick: (item2) => editAnnexDesc(item.id, item2) }]"
+            chooseType="select"
+            :itemExtraButtons="readonly ? [] : [{ icon: 'edit', onClick: (item2: any) => editAnnexDesc(item.id, item2) }]"
             :readonly="readonly"
           />
         </FlexCol>