tangning 6 ماه پیش
والد
کامیت
773a412384

+ 1 - 1
package.json

@@ -40,7 +40,7 @@
     "@vueuse/core": "^6.7.4",
     "@vueuse/core": "^6.7.4",
     "@vueuse/shared": "^6.7.4",
     "@vueuse/shared": "^6.7.4",
     "@zxcvbn-ts/core": "^1.0.0-beta.0",
     "@zxcvbn-ts/core": "^1.0.0-beta.0",
-    "ant-design-vue": "2.2.8",
+    "ant-design-vue": "3.2.20",
     "axios": "^0.24.0",
     "axios": "^0.24.0",
     "cropperjs": "^1.5.12",
     "cropperjs": "^1.5.12",
     "crypto-js": "^4.1.1",
     "crypto-js": "^4.1.1",

+ 20 - 1
src/api/equity/index.ts

@@ -12,6 +12,8 @@ enum Api {
   dowmList = '/service/agent/down/list',
   dowmList = '/service/agent/down/list',
   cameraIncrementLog = '/service/sale/operLog/pageOperLog',
   cameraIncrementLog = '/service/sale/operLog/pageOperLog',
   listExport = '/service/sale/repairInfo/exportRepairInfo',
   listExport = '/service/sale/repairInfo/exportRepairInfo',
+  treeItem = '/service/sale/dict/tree/',
+  treeList = '/service/sale/dict/list/',
 }
 }
 
 
 export const listApi = (params: listParams) =>
 export const listApi = (params: listParams) =>
@@ -100,7 +102,24 @@ export const cameraIncrementLog = (params: checkParams) =>
       ignoreCancelToken: true,
       ignoreCancelToken: true,
     },
     },
   });
   });
-
+export const treeItem = (dictKey) =>
+  defHttp.get<dincrementResult>({
+    url: Api.treeItem + dictKey,
+    params: {},
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const treeList = (dictKey) =>
+  defHttp.get<dincrementResult>({
+    url: Api.treeList + dictKey,
+    params: {},
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
 export const DownExport = (params) =>
 export const DownExport = (params) =>
   defHttp.downloadFile<FileStream>({
   defHttp.downloadFile<FileStream>({
     url: Api.listExport + `?lang=${params.lang}`,
     url: Api.listExport + `?lang=${params.lang}`,

+ 10 - 0
src/api/spares/index.ts

@@ -31,6 +31,7 @@ enum Api {
   partInStock = '/service/sale/part/inStock', //添加库存,入库
   partInStock = '/service/sale/part/inStock', //添加库存,入库
   repairAddPart = '/service/sale/repairPersonnel/repairAddPart', //维修中添加备件
   repairAddPart = '/service/sale/repairPersonnel/repairAddPart', //维修中添加备件
   repairOver = '/service/sale/repairPersonnel/repairOver', //维修完成
   repairOver = '/service/sale/repairPersonnel/repairOver', //维修完成
+  getRepairOverRemark = '/service/sale/repairPersonnel/getRepairOverRemark', //维修完成
   partInStockLog = '/service/sale/part/inStockLog', //添加库存,入库 日志列表
   partInStockLog = '/service/sale/part/inStockLog', //添加库存,入库 日志列表
   partInfoList = '/service/sale/supplyPersonnel/partInfo', //备件入库
   partInfoList = '/service/sale/supplyPersonnel/partInfo', //备件入库
   repairTesterList = '/service/sale/repairTest/repairTesterList', //测试列表
   repairTesterList = '/service/sale/repairTest/repairTesterList', //测试列表
@@ -405,6 +406,15 @@ export const repairOver = (params) =>
       ignoreCancelToken: true,
       ignoreCancelToken: true,
     },
     },
   });
   });
+export const getRepairOverRemark = (params) =>
+  defHttp.post<detailResult>({
+    url: Api.getRepairOverRemark,
+    params: params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
 
 
 export const invoiceRegister = (params) =>
 export const invoiceRegister = (params) =>
   defHttp.post<detailResult>({
   defHttp.post<detailResult>({

+ 14 - 10
src/components/Form/src/components/ApiCascader.vue

@@ -2,7 +2,6 @@
   <a-cascader
   <a-cascader
     v-model:value="state"
     v-model:value="state"
     :options="options"
     :options="options"
-    :load-data="loadData"
     change-on-select
     change-on-select
     @change="handleChange"
     @change="handleChange"
     :displayRender="handleRenderDisplay"
     :displayRender="handleRenderDisplay"
@@ -13,7 +12,7 @@
     <template #notFoundContent v-if="loading">
     <template #notFoundContent v-if="loading">
       <span>
       <span>
         <LoadingOutlined spin class="mr-1" />
         <LoadingOutlined spin class="mr-1" />
-        {{ t('component.form.apiSelectNotFound') }}
+        {{ t('component.form.apiSelectNotFound') }} 
       </span>
       </span>
     </template>
     </template>
   </a-cascader>
   </a-cascader>
@@ -26,7 +25,8 @@
   import { get, omit } from 'lodash-es';
   import { get, omit } from 'lodash-es';
   import { useRuleFormItem } from '/@/hooks/component/useFormItem';
   import { useRuleFormItem } from '/@/hooks/component/useFormItem';
   import { LoadingOutlined } from '@ant-design/icons-vue';
   import { LoadingOutlined } from '@ant-design/icons-vue';
-
+  import { useI18n } from '/@/hooks/web/useI18n';
+  const { t } = useI18n();
   interface Option {
   interface Option {
     value: string;
     value: string;
     label: string;
     label: string;
@@ -84,6 +84,7 @@
         apiData,
         apiData,
         (data) => {
         (data) => {
           const opts = generatorOptions(data);
           const opts = generatorOptions(data);
+          console.log('generatorOptions', opts);
           options.value = opts;
           options.value = opts;
         },
         },
         { deep: true },
         { deep: true },
@@ -134,11 +135,11 @@
       async function loadData(selectedOptions: Option[]) {
       async function loadData(selectedOptions: Option[]) {
         const targetOption = selectedOptions[selectedOptions.length - 1];
         const targetOption = selectedOptions[selectedOptions.length - 1];
         targetOption.loading = true;
         targetOption.loading = true;
-
+        console.log('loadData', targetOption);
         const api = props.api;
         const api = props.api;
-        if (!api || !isFunction(api)) return;
+        if (!api || !isFunction(api) || targetOption.children?.length ) return;
         try {
         try {
-          const res = await api({
+          const res = targetOption || await api({
             [props.asyncFetchParamKey]: Reflect.get(targetOption, 'value'),
             [props.asyncFetchParamKey]: Reflect.get(targetOption, 'value'),
           });
           });
           if (Array.isArray(res)) {
           if (Array.isArray(res)) {
@@ -170,17 +171,19 @@
       );
       );
 
 
       function handleChange(keys, args) {
       function handleChange(keys, args) {
+        console.log('defaultChange', keys, args);
         emitData.value = keys;
         emitData.value = keys;
         emit('defaultChange', keys, args);
         emit('defaultChange', keys, args);
       }
       }
 
 
       function handleRenderDisplay({ labels, selectedOptions }) {
       function handleRenderDisplay({ labels, selectedOptions }) {
-        if (unref(emitData).length === selectedOptions.length) {
+        console.log('handleRenderDisplay', labels, selectedOptions, emitData);
+        if (labels.length) {
           return labels.join(' / ');
           return labels.join(' / ');
         }
         }
-        if (props.displayRenderArray) {
-          return props.displayRenderArray.join(' / ');
-        }
+        // if (props.displayRenderArray) {
+        //   return props.displayRenderArray.join(' / ');
+        // }
         return '';
         return '';
       }
       }
 
 
@@ -191,6 +194,7 @@
         handleChange,
         handleChange,
         loadData,
         loadData,
         handleRenderDisplay,
         handleRenderDisplay,
+        t
       };
       };
     },
     },
   });
   });

+ 22 - 10
src/views/work/checkModel.vue

@@ -36,6 +36,7 @@
   import { partAllList, faultAllList, checkRegister, checkRegisterInfo } from '/@/api/spares';
   import { partAllList, faultAllList, checkRegister, checkRegisterInfo } from '/@/api/spares';
   import { useI18n } from '/@/hooks/web/useI18n';
   import { useI18n } from '/@/hooks/web/useI18n';
   import { uploadApi } from '/@/api/product/index';
   import { uploadApi } from '/@/api/product/index';
+  import { treeItem } from '/@/api/equity/index';
 
 
   const { t } = useI18n();
   const { t } = useI18n();
   export default defineComponent({
   export default defineComponent({
@@ -81,12 +82,23 @@
         },
         },
         {
         {
           field: 'faultIds',
           field: 'faultIds',
-          component: 'CheckboxGroup',
+          component: 'ApiCascader',
           label: '故障类型',
           label: '故障类型',
           required: true,
           required: true,
-          componentProps: {
-            options: fileFlow.faultList,
-            maxLength: 50,
+          componentProps: ({ formModel }) => {
+            return {
+              placeholder: '请选择故障类型',
+              api: async function () {
+                return await treeItem('fault-type');
+              },
+              labelField: 'name',
+              valueField: 'id',
+              immediate: true,
+              multiple: true,
+              isLeaf: (val) => {
+                return !val.children;
+              },
+            };
           },
           },
           colProps: {
           colProps: {
             span: 18,
             span: 18,
@@ -218,12 +230,12 @@
           backfill.checkImg = res.checkImg;
           backfill.checkImg = res.checkImg;
         }
         }
         updateSchema([
         updateSchema([
-          {
-            field: 'faultIds',
-            componentProps: {
-              options: fileFlow.faultList,
-            },
-          },
+          // {
+          //   field: 'faultIds',
+          //   componentProps: {
+          //     options: fileFlow.faultList,
+          //   },
+          // },
           {
           {
             field: 'damage',
             field: 'damage',
             ifShow: data.warrantyType == 0,
             ifShow: data.warrantyType == 0,

+ 8 - 0
src/views/work/detail.vue

@@ -337,6 +337,7 @@
     <outModal @update="reload" @register="registerOut" />
     <outModal @update="reload" @register="registerOut" />
     <reviewModal @update="reload" @register="registerReview" />
     <reviewModal @update="reload" @register="registerReview" />
     <AccountListModal @update="reload" @register="registerAccount" />
     <AccountListModal @update="reload" @register="registerAccount" />
+    <maintenanceRemarksModal @update="reload" @register="registerMaintenanceRemarks" />
   </div>
   </div>
 </template>
 </template>
 <script lang="ts">
 <script lang="ts">
@@ -357,6 +358,7 @@
   import takingOrdersModel from './takingOrdersModel.vue';
   import takingOrdersModel from './takingOrdersModel.vue';
   import remarksModal from '../spares/remarksModal.vue';
   import remarksModal from '../spares/remarksModal.vue';
   import checkModel from './checkModel.vue';
   import checkModel from './checkModel.vue';
+  import maintenanceRemarks from './remarksModal.vue';
   import partsListModal from './partsListModal.vue';
   import partsListModal from './partsListModal.vue';
   import outModal from './outModal.vue';
   import outModal from './outModal.vue';
   import reviewModal from './reviewModal.vue';
   import reviewModal from './reviewModal.vue';
@@ -380,6 +382,7 @@
       checkModel,
       checkModel,
       partsListModal,
       partsListModal,
       outModal,
       outModal,
+      maintenanceRemarks,
       addAccessoryModel,
       addAccessoryModel,
       Descriptions: Descriptions,
       Descriptions: Descriptions,
       DescriptionsItem: Descriptions.Item,
       DescriptionsItem: Descriptions.Item,
@@ -489,6 +492,7 @@
           // 80: ['测试登记'],
           // 80: ['测试登记'],
           // 90: ['付款登记'],
           // 90: ['付款登记'],
           100: ['发货登记'],
           100: ['发货登记'],
+          110: ['维修备注'],
         };
         };
         let butTypeShow = {
         let butTypeShow = {
           0: ['work_orderTakers'],
           0: ['work_orderTakers'],
@@ -505,6 +509,7 @@
           80: ['work_payments'],
           80: ['work_payments'],
           82: ['Account_registration'],
           82: ['Account_registration'],
           100: ['work_dispatched'],
           100: ['work_dispatched'],
+          110: ['maintenance_remarks'],
         };
         };
         stepList.value = stepRes;
         stepList.value = stepRes;
         let res = await detail({ repairId: repairId.value });
         let res = await detail({ repairId: repairId.value });
@@ -596,6 +601,7 @@
           100: openDeliveryModal, //发货登记
           100: openDeliveryModal, //发货登记
           61: openAddModal, //添加备件
           61: openAddModal, //添加备件
           62: openOutModal, //完成维修
           62: openOutModal, //完成维修
+          110: openMaintenanceRemarksModal, //检修备注
         };
         };
         console.log('detailData.value.repairerVo', detailData.value.repairerVo.warrantyDate);
         console.log('detailData.value.repairerVo', detailData.value.repairerVo.warrantyDate);
         if (status == 60) {
         if (status == 60) {
@@ -652,6 +658,7 @@
       const [registerDelivery, { openModal: openDeliveryModal }] = useModal();
       const [registerDelivery, { openModal: openDeliveryModal }] = useModal();
       const [registerTakingOrders, { openModal: openTakingOrders }] = useModal();
       const [registerTakingOrders, { openModal: openTakingOrders }] = useModal();
       const [registerRemarks, { openModal: openRemarksModal }] = useModal();
       const [registerRemarks, { openModal: openRemarksModal }] = useModal();
+      const [registerMaintenanceRemarks, { openModal: openMaintenanceRemarksModal }] = useModal();
       // const [registerRecovery, { openModal }] = useModal();
       // const [registerRecovery, { openModal }] = useModal();
       const [registerOut, { openModal: openOutModal }] = useModal();
       const [registerOut, { openModal: openOutModal }] = useModal();
       const [registerAdd, { openModal: openAddModal }] = useModal();
       const [registerAdd, { openModal: openAddModal }] = useModal();
@@ -695,6 +702,7 @@
         enterDialog,
         enterDialog,
         print,
         print,
         printInfo,
         printInfo,
+        registerMaintenanceRemarks,
       };
       };
     },
     },
   });
   });

+ 14 - 0
src/views/work/maintenance.vue

@@ -33,6 +33,11 @@
                 onClick: handleRecover.bind(null, record),
                 onClick: handleRecover.bind(null, record),
               },
               },
               {
               {
+                label: '检修备注',
+                ifShow: getCheckPerm('maintenance_remarks') && tableType == 2,
+                onClick: handleRemarks.bind(null, record),
+              },
+              {
                 label: '修改定损',
                 label: '修改定损',
                 ifShow:
                 ifShow:
                   getCheckPerm('maintenance_testing') && tableType == 1 && record.status == 20,
                   getCheckPerm('maintenance_testing') && tableType == 1 && record.status == 20,
@@ -45,6 +50,7 @@
       <checkModel @update="reload" @register="registerRecovery" />
       <checkModel @update="reload" @register="registerRecovery" />
       <addAccessoryModel @update="reload" @register="registerAdd" />
       <addAccessoryModel @update="reload" @register="registerAdd" />
       <outModal @update="reload" @register="registerOut" />
       <outModal @update="reload" @register="registerOut" />
+      <remarksModal @update="reload" @register="registerRemarks" />
 
 
       <!-- ifShow: getCheckPerm('device-out') && !Boolean(record.outType), -->
       <!-- ifShow: getCheckPerm('device-out') && !Boolean(record.outType), -->
     </div>
     </div>
@@ -68,6 +74,7 @@
   import { usePermissionStore } from '/@/store/modules/permission';
   import { usePermissionStore } from '/@/store/modules/permission';
   import checkModel from './checkModel.vue';
   import checkModel from './checkModel.vue';
   import outModal from './outModal.vue';
   import outModal from './outModal.vue';
+  import remarksModal from './remarksModal.vue';
   import addAccessoryModel from './addAccessoryModel.vue';
   import addAccessoryModel from './addAccessoryModel.vue';
   import { useModal } from '/@/components/Modal';
   import { useModal } from '/@/components/Modal';
   import { useRouter } from 'vue-router';
   import { useRouter } from 'vue-router';
@@ -82,6 +89,7 @@
       outModal,
       outModal,
       PageWrapper,
       PageWrapper,
       addAccessoryModel,
       addAccessoryModel,
+      remarksModal,
       [Tabs.name]: Tabs,
       [Tabs.name]: Tabs,
       [Tabs.TabPane.name]: Tabs.TabPane,
       [Tabs.TabPane.name]: Tabs.TabPane,
     },
     },
@@ -211,6 +219,7 @@
 
 
       const [registerRecovery, { openModal }] = useModal();
       const [registerRecovery, { openModal }] = useModal();
       const [registerOut, { openModal: openOutModal }] = useModal();
       const [registerOut, { openModal: openOutModal }] = useModal();
+      const [registerRemarks, { openModal: openRemarksModal }] = useModal();
       const [registerAdd, { openModal: openAddModal }] = useModal();
       const [registerAdd, { openModal: openAddModal }] = useModal();
       const [registerTable, { reload }] = useTable({
       const [registerTable, { reload }] = useTable({
         api: repairOrderList,
         api: repairOrderList,
@@ -238,6 +247,9 @@
       async function handleRecover(record: Recordable) {
       async function handleRecover(record: Recordable) {
         openModal(true, record);
         openModal(true, record);
       }
       }
+      async function handleRemarks(record: Recordable) {
+        openRemarksModal(true, record);
+      }
       function handleAdd(record: Recordable) {
       function handleAdd(record: Recordable) {
         openAddModal(true, record);
         openAddModal(true, record);
       }
       }
@@ -266,7 +278,9 @@
         handleAdd,
         handleAdd,
         handleOut,
         handleOut,
         handleRecover,
         handleRecover,
+        handleRemarks,
         registerRecovery,
         registerRecovery,
+        registerRemarks,
       };
       };
     },
     },
   });
   });

+ 105 - 32
src/views/work/recoveryModal.vue

@@ -5,6 +5,7 @@
     title="录单"
     title="录单"
     @cancel="resetFields"
     @cancel="resetFields"
     @ok="handleSubmit"
     @ok="handleSubmit"
+    width="800px"
     :min-height="0"
     :min-height="0"
   >
   >
     <BasicForm @register="registerForm" />
     <BasicForm @register="registerForm" />
@@ -17,6 +18,7 @@
   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
   import { supplyOrderList, getByRoleType, recording } from '/@/api/spares';
   import { supplyOrderList, getByRoleType, recording } from '/@/api/spares';
   import { uploadApi } from '/@/api/product/index';
   import { uploadApi } from '/@/api/product/index';
+  import { treeList, treeItem } from '/@/api/equity/index';
   import { useI18n } from '/@/hooks/web/useI18n';
   import { useI18n } from '/@/hooks/web/useI18n';
   const { t } = useI18n();
   const { t } = useI18n();
   export default defineComponent({
   export default defineComponent({
@@ -42,20 +44,7 @@
             maxLength: 50,
             maxLength: 50,
           },
           },
           colProps: {
           colProps: {
-            span: 18,
-          },
-        },
-        {
-          field: 'customerName',
-          component: 'Input',
-          required: true,
-          label: '联系人',
-          componentProps: {
-            placeholder: '请填写姓名',
-            maxLength: 50,
-          },
-          colProps: {
-            span: 18,
+            span: 12,
           },
           },
         },
         },
         {
         {
@@ -86,7 +75,7 @@
             },
             },
           ],
           ],
           colProps: {
           colProps: {
-            span: 18,
+            span: 12,
           },
           },
           componentProps: {
           componentProps: {
             placeholder: '请填写手机号',
             placeholder: '请填写手机号',
@@ -94,14 +83,87 @@
           },
           },
         },
         },
         {
         {
+          field: 'customerName',
+          component: 'Input',
+          required: true,
+          label: '联系人',
+          componentProps: {
+            placeholder: '请填写姓名',
+            maxLength: 50,
+          },
+          colProps: {
+            span: 12,
+          },
+        },
+        {
           field: 'hitch-info',
           field: 'hitch-info',
           component: 'Divider',
           component: 'Divider',
-          label: '故障信息',
+          label: '维修信息',
+        },
+        {
+          field: 'incrementTypeId',
+          component: 'ApiSelect',
+          required: true,
+          label: '维修类型',
+          componentProps: {
+            maxLength: 50,
+            width: '100%',
+            api: async function () {
+              return await treeItem('repair-type');
+            },
+            numberToString: true,
+            labelField: 'name',
+            valueField: 'value',
+            immediate: true,
+          },
+          colProps: {
+            span: 12,
+          },
+        },
+        {
+          field: 'ApiCascader',
+          component: 'ApiCascader',
+          required: true,
+          label: '维修物品',
+          componentProps: ({ formModel }) => {
+            return {
+              placeholder: '请选择维修物品',
+              api: async function () {
+                return await treeItem('repair-item');
+              },
+              labelField: 'name',
+              valueField: 'id',
+              immediate: true,
+              multiple: true,
+              isLeaf: (val) => {
+                return !val.children;
+              },
+            };
+          },
+          // componentProps: {
+          //   maxLength: 50,
+          //   width: '100%',
+          //   api: async function () {
+          //     return await treeItem('repair-item');
+          //   },
+          //   multiple: true,
+          //   // numberToString: true,
+          //   labelField: 'name',
+          //   valueField: 'id',
+          //   immediate: true,
+          //   maxTagCount: 'responsive',
+          //   isLeaf: (val) => {
+          //     return !val.children;
+          //   },
+          // },
+          colProps: {
+            span: 12,
+          },
         },
         },
         {
         {
           field: 'cameraSnCode',
           field: 'cameraSnCode',
           component: 'Input',
           component: 'Input',
-          label: '产品SN码',
+          label: 'SN码',
           required: true,
           required: true,
           colProps: {
           colProps: {
             span: 18,
             span: 18,
@@ -128,7 +190,7 @@
         {
         {
           field: 'faultImg',
           field: 'faultImg',
           component: 'Upload',
           component: 'Upload',
-          label: '相关图片',
+          label: '添加附件',
           required: true,
           required: true,
           rules: [{ required: true, message: t('common.uploadMessge') }],
           rules: [{ required: true, message: t('common.uploadMessge') }],
           itemProps: {
           itemProps: {
@@ -146,11 +208,19 @@
           },
           },
         },
         },
         {
         {
+          field: 'connection-kd',
+          component: 'Divider',
+          label: '快递信息',
+        },
+        {
           field: 'sendType',
           field: 'sendType',
           component: 'RadioGroup',
           component: 'RadioGroup',
           required: true,
           required: true,
           label: '送修方式',
           label: '送修方式',
           defaultValue: 1,
           defaultValue: 1,
+          colProps: {
+            span: 14,
+          },
           componentProps: {
           componentProps: {
             placeholder: '请填写姓名',
             placeholder: '请填写姓名',
             options: [
             options: [
@@ -182,6 +252,9 @@
           required: true,
           required: true,
           label: '取回方式',
           label: '取回方式',
           defaultValue: 1,
           defaultValue: 1,
+          colProps: {
+            span: 14,
+          },
           componentProps: {
           componentProps: {
             placeholder: '请填写姓名',
             placeholder: '请填写姓名',
             options: [
             options: [
@@ -207,24 +280,12 @@
           },
           },
         },
         },
         {
         {
-          field: 'getAddress',
-          component: 'Input',
-          required: true,
-          label: '收件地址',
-          colProps: {
-            span: 18,
-          },
-          componentProps: {
-            maxLength: 50,
-          },
-        },
-        {
           field: 'getAddrName',
           field: 'getAddrName',
           component: 'Input',
           component: 'Input',
           required: true,
           required: true,
           label: '收件人',
           label: '收件人',
           colProps: {
           colProps: {
-            span: 18,
+            span: 12,
           },
           },
           componentProps: {
           componentProps: {
             maxLength: 50,
             maxLength: 50,
@@ -235,7 +296,7 @@
           component: 'Input',
           component: 'Input',
           label: '收件人电话',
           label: '收件人电话',
           colProps: {
           colProps: {
-            span: 18,
+            span: 12,
           },
           },
           componentProps: {
           componentProps: {
             maxLength: 50,
             maxLength: 50,
@@ -264,6 +325,18 @@
             },
             },
           ],
           ],
         },
         },
+        {
+          field: 'getAddress',
+          component: 'Input',
+          required: true,
+          label: '收件地址',
+          colProps: {
+            span: 24,
+          },
+          componentProps: {
+            maxLength: 50,
+          },
+        },
         // {
         // {
         //   field: 'work-info',
         //   field: 'work-info',
         //   component: 'Divider',
         //   component: 'Divider',

+ 133 - 0
src/views/work/remarksModal.vue

@@ -0,0 +1,133 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    title="检修备注"
+    @cancel="resetFields"
+    :confirmLoading="loading"
+    @ok="handleSubmit"
+  >
+    <div class="pt-2px pr-3px">
+      <BasicForm @register="registerForm">
+        <template #text="{ model, field }">
+          {{ model[field] }}
+        </template>
+      </BasicForm>
+    </div>
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { defineComponent, nextTick, onMounted, reactive, ref } from 'vue';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { updateRemark, getRepairOverRemark } from '/@/api/spares';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { uploadApi } from '/@/api/product/index';
+
+  const { t } = useI18n();
+  export default defineComponent({
+    components: { BasicModal, BasicForm },
+    props: {
+      userData: { type: Object },
+    },
+    emits: ['update', 'register'],
+    setup(props, { emit }) {
+      const fileFlow = reactive({
+        file: null,
+        type: 2, //2-普通发票,3-专用发票
+      });
+      const loading = ref(false);
+      const { createMessage } = useMessage();
+      const schemas: FormSchema[] = [
+        {
+          field: 'id',
+          component: 'Input',
+          show: false,
+          label: '发票编号',
+        },
+        {
+          field: 'repairId',
+          component: 'Input',
+          label: '维修单号',
+          slot: 'text',
+          colProps: {
+            span: 24,
+          },
+        },
+        {
+          field: 'deviceType',
+          component: 'Input',
+          label: '设备信息',
+          slot: 'text',
+          colProps: {
+            span: 24,
+          },
+        },
+        {
+          field: 'remark',
+          component: 'InputTextArea',
+          required: true,
+          label: '检测结果',
+          componentProps: {
+            maxLength: 500,
+            rows: 4,
+            placeholder: '请填写备注',
+          },
+          colProps: {
+            span: 22,
+          },
+        },
+      ];
+
+      const [registerForm, { validate, resetFields, setFieldsValue, updateSchema }] = useForm({
+        labelWidth: 120,
+        schemas: schemas,
+        showActionButtonGroup: false,
+        actionColOptions: {
+          span: 24,
+        },
+      });
+      onMounted(() => {});
+      let addListFunc = () => {};
+      const [register, { closeModal }] = useModalInner((data) => {
+        data && onDataReceive(data);
+      });
+      async function onDataReceive(data) {
+        resetFields();
+        const { remark='' } = await getRepairOverRemark(data)
+        fileFlow.type = data.type;
+        setFieldsValue({
+          ...data,
+          remark,
+          deviceType: t(`routes.scene.tableType.${data.cameraType}`) + ' ' + data.cameraSnCode,
+        });
+      }
+      const handleSubmit = async () => {
+        loading.value = true;
+        try {
+          const params = await validate();
+          await updateRemark(params);
+          closeModal();
+          resetFields();
+          createMessage.success(t('common.optSuccess'));
+          emit('update');
+          loading.value = false;
+        } catch (error) {
+          loading.value = false;
+          console.log('not passing', error);
+        }
+      };
+      return {
+        register,
+        registerForm,
+        fileFlow,
+        handleSubmit,
+        addListFunc,
+        resetFields,
+        loading,
+        t,
+      };
+    },
+  });
+</script>

+ 63 - 45
yarn.lock

@@ -22,7 +22,7 @@
   resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz"
   resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz"
   integrity sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==
   integrity sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==
 
 
-"@ant-design/icons-vue@^6.0.0", "@ant-design/icons-vue@^6.0.1":
+"@ant-design/icons-vue@^6.0.1", "@ant-design/icons-vue@^6.1.0":
   version "6.1.0"
   version "6.1.0"
   resolved "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz"
   resolved "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz"
   integrity sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==
   integrity sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==
@@ -932,7 +932,14 @@
     "@babel/types" "^7.4.4"
     "@babel/types" "^7.4.4"
     esutils "^2.0.2"
     esutils "^2.0.2"
 
 
-"@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.8.4":
+"@babel/runtime@^7.10.5":
+  version "7.26.7"
+  resolved "https://mirrors.cloud.tencent.com/npm/@babel/runtime/-/runtime-7.26.7.tgz#f4e7fe527cd710f8dc0618610b61b4b060c3c341"
+  integrity sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==
+  dependencies:
+    regenerator-runtime "^0.14.0"
+
+"@babel/runtime@^7.11.2", "@babel/runtime@^7.8.4":
   version "7.18.9"
   version "7.18.9"
   resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.18.9.tgz"
   resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.18.9.tgz"
   integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==
   integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==
@@ -1612,7 +1619,7 @@
 
 
 "@simonwep/pickr@~1.8.0":
 "@simonwep/pickr@~1.8.0":
   version "1.8.2"
   version "1.8.2"
-  resolved "https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.8.2.tgz"
+  resolved "https://mirrors.cloud.tencent.com/npm/@simonwep/pickr/-/pickr-1.8.2.tgz#96dc86675940d7cad63d69c22083dd1cbb9797cb"
   integrity sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==
   integrity sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==
   dependencies:
   dependencies:
     core-js "^3.15.1"
     core-js "^3.15.1"
@@ -2577,22 +2584,23 @@ ansi-styles@^5.0.0:
   resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz"
   resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz"
   integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
   integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
 
 
-ant-design-vue@2.2.8:
-  version "2.2.8"
-  resolved "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-2.2.8.tgz"
-  integrity sha512-3graq9/gCfJQs6hznrHV6sa9oDmk/D1H3Oo0vLdVpPS/I61fZPk8NEyNKCHpNA6fT2cx6xx9U3QS63uuyikg/Q==
+ant-design-vue@3.2.20:
+  version "3.2.20"
+  resolved "https://mirrors.cloud.tencent.com/npm/ant-design-vue/-/ant-design-vue-3.2.20.tgz#552f5f08e2acbcc10bd4089145d4cc2b15d4cfec"
+  integrity sha512-YWpMfGaGoRastIXEYfCoJiaRiDHk4chqtYhlKQM5GqPt6NfvrM1Vg2e60yHtjxlZjed91wCMm0rAmyUr7Hwzdg==
   dependencies:
   dependencies:
-    "@ant-design/icons-vue" "^6.0.0"
+    "@ant-design/colors" "^6.0.0"
+    "@ant-design/icons-vue" "^6.1.0"
     "@babel/runtime" "^7.10.5"
     "@babel/runtime" "^7.10.5"
+    "@ctrl/tinycolor" "^3.4.0"
     "@simonwep/pickr" "~1.8.0"
     "@simonwep/pickr" "~1.8.0"
     array-tree-filter "^2.1.0"
     array-tree-filter "^2.1.0"
-    async-validator "^3.3.0"
+    async-validator "^4.0.0"
+    dayjs "^1.10.5"
     dom-align "^1.12.1"
     dom-align "^1.12.1"
     dom-scroll-into-view "^2.0.0"
     dom-scroll-into-view "^2.0.0"
     lodash "^4.17.21"
     lodash "^4.17.21"
     lodash-es "^4.17.15"
     lodash-es "^4.17.15"
-    moment "^2.27.0"
-    omit.js "^2.0.0"
     resize-observer-polyfill "^1.5.1"
     resize-observer-polyfill "^1.5.1"
     scroll-into-view-if-needed "^2.2.25"
     scroll-into-view-if-needed "^2.2.25"
     shallow-equal "^1.0.0"
     shallow-equal "^1.0.0"
@@ -2663,7 +2671,7 @@ array-ify@^1.0.0:
 
 
 array-tree-filter@^2.1.0:
 array-tree-filter@^2.1.0:
   version "2.1.0"
   version "2.1.0"
-  resolved "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz"
+  resolved "https://mirrors.cloud.tencent.com/npm/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190"
   integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==
   integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==
 
 
 array-union@^2.1.0:
 array-union@^2.1.0:
@@ -2701,10 +2709,10 @@ astral-regex@^2.0.0:
   resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz"
   resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz"
   integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
   integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
 
 
-async-validator@^3.3.0:
-  version "3.5.2"
-  resolved "https://registry.npmmirror.com/async-validator/-/async-validator-3.5.2.tgz"
-  integrity sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==
+async-validator@^4.0.0:
+  version "4.2.5"
+  resolved "https://mirrors.cloud.tencent.com/npm/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339"
+  integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==
 
 
 async@^3.2.3:
 async@^3.2.3:
   version "3.2.4"
   version "3.2.4"
@@ -3507,10 +3515,10 @@ component-emitter@^1.2.1:
   resolved "https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.0.tgz"
   resolved "https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.0.tgz"
   integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
   integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
 
 
-compute-scroll-into-view@^1.0.17:
-  version "1.0.17"
-  resolved "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz"
-  integrity sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==
+compute-scroll-into-view@^1.0.20:
+  version "1.0.20"
+  resolved "https://mirrors.cloud.tencent.com/npm/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43"
+  integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==
 
 
 concat-map@0.0.1:
 concat-map@0.0.1:
   version "0.0.1"
   version "0.0.1"
@@ -3751,7 +3759,12 @@ core-js-compat@^3.21.0, core-js-compat@^3.22.1:
     browserslist "^4.21.3"
     browserslist "^4.21.3"
     semver "7.0.0"
     semver "7.0.0"
 
 
-core-js@^3.15.1, core-js@^3.22.3:
+core-js@^3.15.1:
+  version "3.40.0"
+  resolved "https://mirrors.cloud.tencent.com/npm/core-js/-/core-js-3.40.0.tgz#2773f6b06877d8eda102fc42f828176437062476"
+  integrity sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==
+
+core-js@^3.22.3:
   version "3.24.1"
   version "3.24.1"
   resolved "https://registry.npmmirror.com/core-js/-/core-js-3.24.1.tgz"
   resolved "https://registry.npmmirror.com/core-js/-/core-js-3.24.1.tgz"
   integrity sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg==
   integrity sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg==
@@ -3972,6 +3985,11 @@ dateformat@^3.0.0:
   resolved "https://registry.npmmirror.com/dateformat/-/dateformat-3.0.3.tgz"
   resolved "https://registry.npmmirror.com/dateformat/-/dateformat-3.0.3.tgz"
   integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
   integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
 
 
+dayjs@^1.10.5:
+  version "1.11.13"
+  resolved "https://mirrors.cloud.tencent.com/npm/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c"
+  integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
+
 dayjs@^1.11.5:
 dayjs@^1.11.5:
   version "1.11.5"
   version "1.11.5"
   resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.5.tgz"
   resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.5.tgz"
@@ -4193,13 +4211,13 @@ doctypes@^1.1.0:
   integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==
   integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==
 
 
 dom-align@^1.12.1:
 dom-align@^1.12.1:
-  version "1.12.3"
-  resolved "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.3.tgz"
-  integrity sha512-Gj9hZN3a07cbR6zviMUBOMPdWxYhbMI+x+WS0NAIu2zFZmbK8ys9R79g+iG9qLnlCwpFoaB+fKy8Pdv470GsPA==
+  version "1.12.4"
+  resolved "https://mirrors.cloud.tencent.com/npm/dom-align/-/dom-align-1.12.4.tgz#3503992eb2a7cfcb2ed3b2a6d21e0b9c00d54511"
+  integrity sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==
 
 
 dom-scroll-into-view@^2.0.0:
 dom-scroll-into-view@^2.0.0:
   version "2.0.1"
   version "2.0.1"
-  resolved "https://registry.npmmirror.com/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz"
+  resolved "https://mirrors.cloud.tencent.com/npm/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz#0decc8522801fd8d3f1c6ba355a74d382c5f989b"
   integrity sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==
   integrity sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==
 
 
 dom-serializer@0:
 dom-serializer@0:
@@ -6680,7 +6698,7 @@ is-plain-obj@^1.0.0, is-plain-obj@^1.1, is-plain-obj@^1.1.0:
 
 
 is-plain-object@3.0.1:
 is-plain-object@3.0.1:
   version "3.0.1"
   version "3.0.1"
-  resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-3.0.1.tgz"
+  resolved "https://mirrors.cloud.tencent.com/npm/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b"
   integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==
   integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==
 
 
 is-plain-object@5.0.0, is-plain-object@^5.0.0:
 is-plain-object@5.0.0, is-plain-object@^5.0.0:
@@ -7347,7 +7365,7 @@ js-stringify@^1.0.2:
 
 
 "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
 "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
   version "4.0.0"
   version "4.0.0"
-  resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz"
+  resolved "https://mirrors.cloud.tencent.com/npm/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
   integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
   integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
 
 
 js-tokens@^8.0.0:
 js-tokens@^8.0.0:
@@ -7684,7 +7702,7 @@ locate-path@^6.0.0:
 
 
 lodash-es@^4.17.15, lodash-es@^4.17.21:
 lodash-es@^4.17.15, lodash-es@^4.17.21:
   version "4.17.21"
   version "4.17.21"
-  resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz"
+  resolved "https://mirrors.cloud.tencent.com/npm/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
   integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
   integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
 
 
 lodash.debounce@^4.0.8:
 lodash.debounce@^4.0.8:
@@ -7770,7 +7788,7 @@ longest@^2.0.1:
 
 
 loose-envify@^1.0.0:
 loose-envify@^1.0.0:
   version "1.4.0"
   version "1.4.0"
-  resolved "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz"
+  resolved "https://mirrors.cloud.tencent.com/npm/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
   integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
   integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
   dependencies:
   dependencies:
     js-tokens "^3.0.0 || ^4.0.0"
     js-tokens "^3.0.0 || ^4.0.0"
@@ -8102,7 +8120,7 @@ modify-values@^1.0.0:
   resolved "https://registry.npmmirror.com/modify-values/-/modify-values-1.0.1.tgz"
   resolved "https://registry.npmmirror.com/modify-values/-/modify-values-1.0.1.tgz"
   integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==
   integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==
 
 
-moment@^2.27.0, moment@^2.29.1:
+moment@^2.29.1:
   version "2.29.4"
   version "2.29.4"
   resolved "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz"
   resolved "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz"
   integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
   integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
@@ -8158,9 +8176,9 @@ nanomatch@^1.2.1:
     to-regex "^3.0.1"
     to-regex "^3.0.1"
 
 
 nanopop@^2.1.0:
 nanopop@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmmirror.com/nanopop/-/nanopop-2.1.0.tgz"
-  integrity sha512-jGTwpFRexSH+fxappnGQtN9dspgE2ipa1aOjtR24igG0pv6JCxImIAmrLRHX+zUF5+1wtsFVbKyfP51kIGAVNw==
+  version "2.4.2"
+  resolved "https://mirrors.cloud.tencent.com/npm/nanopop/-/nanopop-2.4.2.tgz#b55482135be7e64f2d0f5aa8ef51a58104ac7b13"
+  integrity sha512-NzOgmMQ+elxxHeIha+OG/Pv3Oc3p4RU2aBhwWwAqDpXrdTbtRylbRLQztLy8dMMwfl6pclznBdfUhccEn9ZIzw==
 
 
 natural-compare@^1.4.0:
 natural-compare@^1.4.0:
   version "1.4.0"
   version "1.4.0"
@@ -8352,11 +8370,6 @@ object.pick@^1.3.0:
   dependencies:
   dependencies:
     isobject "^3.0.1"
     isobject "^3.0.1"
 
 
-omit.js@^2.0.0:
-  version "2.0.2"
-  resolved "https://registry.npmmirror.com/omit.js/-/omit.js-2.0.2.tgz"
-  integrity sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==
-
 on-finished@~2.3.0:
 on-finished@~2.3.0:
   version "2.3.0"
   version "2.3.0"
   resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz"
   resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz"
@@ -9324,6 +9337,11 @@ regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.9:
   resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz"
   resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz"
   integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
   integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
 
 
+regenerator-runtime@^0.14.0:
+  version "0.14.1"
+  resolved "https://mirrors.cloud.tencent.com/npm/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
+  integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
+
 regenerator-transform@^0.15.0:
 regenerator-transform@^0.15.0:
   version "0.15.0"
   version "0.15.0"
   resolved "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz"
   resolved "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz"
@@ -9635,11 +9653,11 @@ saxes@^5.0.1:
     xmlchars "^2.2.0"
     xmlchars "^2.2.0"
 
 
 scroll-into-view-if-needed@^2.2.25:
 scroll-into-view-if-needed@^2.2.25:
-  version "2.2.29"
-  resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz"
-  integrity sha512-hxpAR6AN+Gh53AdAimHM6C8oTN1ppwVZITihix+WqalywBeFcQ6LdQP5ABNl26nX8GTEL7VT+b8lKpdqq65wXg==
+  version "2.2.31"
+  resolved "https://mirrors.cloud.tencent.com/npm/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz#d3c482959dc483e37962d1521254e3295d0d1587"
+  integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==
   dependencies:
   dependencies:
-    compute-scroll-into-view "^1.0.17"
+    compute-scroll-into-view "^1.0.20"
 
 
 seek-bzip@^1.0.5:
 seek-bzip@^1.0.5:
   version "1.0.6"
   version "1.0.6"
@@ -9727,7 +9745,7 @@ set-value@^2.0.0, set-value@^2.0.1:
 
 
 shallow-equal@^1.0.0:
 shallow-equal@^1.0.0:
   version "1.2.1"
   version "1.2.1"
-  resolved "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz"
+  resolved "https://mirrors.cloud.tencent.com/npm/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da"
   integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==
   integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==
 
 
 shebang-command@^1.2.0:
 shebang-command@^1.2.0:
@@ -11316,7 +11334,7 @@ vue-tsc@^0.28.10:
 
 
 vue-types@^3.0.0:
 vue-types@^3.0.0:
   version "3.0.2"
   version "3.0.2"
-  resolved "https://registry.npmmirror.com/vue-types/-/vue-types-3.0.2.tgz"
+  resolved "https://mirrors.cloud.tencent.com/npm/vue-types/-/vue-types-3.0.2.tgz#ec16e05d412c038262fc1efa4ceb9647e7fb601d"
   integrity sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==
   integrity sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==
   dependencies:
   dependencies:
     is-plain-object "3.0.1"
     is-plain-object "3.0.1"
@@ -11362,7 +11380,7 @@ walker@^1.0.7:
 
 
 warning@^4.0.0:
 warning@^4.0.0:
   version "4.0.3"
   version "4.0.3"
-  resolved "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz"
+  resolved "https://mirrors.cloud.tencent.com/npm/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
   integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
   integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
   dependencies:
   dependencies:
     loose-envify "^1.0.0"
     loose-envify "^1.0.0"