Ver código fonte

```
feat(table): 支持多个参数在重置时保持不变

支持传入字符串数组形式的 defaultParamsNotReset 参数,
在表格重置操作时可以保留多个指定字段的值

fix(api-select): 移除调试日志

移除 ApiSelect 组件中的调试用 console.log

fix(edit-member-type): 优化门店选择逻辑

- 添加 selectedChannelForSearch 变量用于处理渠道搜索
- 在门店API完成后设置默认值
- 添加 fetchRefresh 函数确保商店选择后再刷新表格
- 修复 handleSearch 事件处理逻辑

fix(order-detail): 修正自提订单联系方式显示

将自提信息中的预留电话字段从 shopName
修正为 consigneeMobile
```

wenjie 5 dias atrás
pai
commit
cf6fb71f66

+ 1 - 0
src/components/zt/ApiSelect/api-select.vue

@@ -57,6 +57,7 @@ async function fetchApi() {
 
     nextTick(() => {
       modelVlaue.value = options.value[0][unref(bindValue).valueFeild as string];
+      console.log(modelVlaue.value, '默认值');
     });
   }
   if (props.getOptions) {

+ 3 - 1
src/components/zt/Table/types/index.ts

@@ -54,7 +54,9 @@ export interface tableProp extends DataTableProps {
    * 默认参数,重置的时候不重置这个参数
    *
    */
-  defaultParamsNotReset?: string;
+  // defaultParamsNotReset?: string;
+  // 默认参数,重置的时候不重置这个参数 新增可以传多个
+  defaultParamsNotReset?: string | string[];
 }
 
 export interface ztTableProps {

+ 43 - 5
src/components/zt/Table/z-table.vue

@@ -145,12 +145,28 @@ export default defineComponent({
     function handleDelete() {
       emit('delete', checkedRowKeys.value);
     }
+    // async function handleReset() {
+    //   getForm.value = getSeachForm();
+    //   if (getTableProps.value.defaultParamsNotReset) {
+    //     const keySearch = getTableProps.value.defaultParamsNotReset;
+    //     getForm.value[keySearch] = commonKeyData.value;
+    //     await setFieldsValue({ [`${keySearch}`]: commonKeyData.value });
+    //   }
+
+    //   getData();
+    // }
+    // 重置 修改为可传多个
     async function handleReset() {
       getForm.value = getSeachForm();
       if (getTableProps.value.defaultParamsNotReset) {
-        const keySearch = getTableProps.value.defaultParamsNotReset;
-        getForm.value[keySearch] = commonKeyData.value;
-        await setFieldsValue({ [`${keySearch}`]: commonKeyData.value });
+        const keysToPreserve = Array.isArray(getTableProps.value.defaultParamsNotReset)
+          ? getTableProps.value.defaultParamsNotReset
+          : [getTableProps.value.defaultParamsNotReset];
+
+        keysToPreserve.forEach(key => {
+          getForm.value[key] = commonKeyData.value?.[key];
+          setFieldsValue({ [key]: commonKeyData.value?.[key] });
+        });
       }
 
       getData();
@@ -159,13 +175,35 @@ export default defineComponent({
       handleSearch();
     }
 
+    // function handleSearch() {
+    //   const form = handleCommonTime(getSeachForm());
+    //   console.log(propsData.defaultParams, 'propsData.defaultParams');
+
+    //   // 查询默认值,重置的时候不重置这个参数
+    //   if (getTableProps.value.defaultParamsNotReset) {
+    //     commonKeyData.value = form[getTableProps.value.defaultParamsNotReset];
+    //   }
+    //   console.log(form, '查询请求参数');
+
+    //   getForm.value = form;
+    //   getDataByPage(1);
+    //   emit('search');
+    // }
+    //  新增可传多个
     function handleSearch() {
       const form = handleCommonTime(getSeachForm());
       console.log(propsData.defaultParams, 'propsData.defaultParams');
 
-      // 查询默认值,重置的时候不重置这个参数
+      // 查询默认值,重置的时候不重置这参数
       if (getTableProps.value.defaultParamsNotReset) {
-        commonKeyData.value = form[getTableProps.value.defaultParamsNotReset];
+        const keysToPreserve = Array.isArray(getTableProps.value.defaultParamsNotReset)
+          ? getTableProps.value.defaultParamsNotReset
+          : [getTableProps.value.defaultParamsNotReset];
+
+        commonKeyData.value = {};
+        keysToPreserve.forEach(key => {
+          commonKeyData.value[key] = form[key];
+        });
       }
       console.log(form, '查询请求参数');
 

+ 118 - 92
src/views/member-center/edit-member-type/index.vue

@@ -92,6 +92,7 @@ const isCheckedStock = computed(() => {
 });
 
 const currentChannel = ref<any>();
+const selectedChannelForSearch = ref<any>();
 
 const rules: FormRules = {
   memberName: {
@@ -236,21 +237,18 @@ const columns: DataTableColumns<ProductItem> = [
     width: 120,
     render: (row: any) => {
       return (
-        console.log(currentChannel.value, 'currentChannel'),
-        (
-          <div>
-            {row.channelVOS.map((it: Api.government.ChannelVO) => {
-              if (it.channelId == currentChannel.value?.id) {
-                return (
-                  <div>
-                    {it.channelName}:¥{it.price}
-                  </div>
-                );
-              }
-              return null;
-            })}
-          </div>
-        )
+        <div>
+          {row.channelVOS.map((it: Api.government.ChannelVO) => {
+            if (it.channelId == currentChannel.value?.id) {
+              return (
+                <div>
+                  {it.channelName}:¥{it.price}
+                </div>
+              );
+            }
+            return null;
+          })}
+        </div>
       );
     }
   },
@@ -265,78 +263,87 @@ const columns: DataTableColumns<ProductItem> = [
   }
 ];
 
-const [registerModalTable, { refresh, getTableCheckedRowKeys, getTableData, setFieldsValue, setTableCheckedRowKeys }] =
-  useTable({
-    searchFormConfig: {
-      schemas: [
-        // {
-        //   label: '销售渠道',
-        //   component: 'ApiSelect',
-        //   field: 'channelNo',
-        //   componentProps: {
-        //     api: fetchFirstChannel,
-        //     resultFeild: 'data',
-        //     labelFeild: 'channelName',
-        //     valueFeild: 'channelNo'
-        //   }
-        // },
-        {
-          label: '销售渠道',
-          component: 'NSelect',
-          field: 'channelNo',
-          render: form => {
-            return (
-              <NSelect
-                v-model:value={form.model.channelNo}
-                placeholder="请选择销售渠道"
-                options={channelOptions.value}
-                on-update:value={changeChannel}
-              ></NSelect>
-            );
-          }
-        },
-        {
-          label: '门店名称',
-          component: 'ApiSelect',
-          field: 'shopId',
-          componentProps: {
-            api: fetchGetStoreList,
-            resultFeild: 'data.list',
-            labelFeild: 'shopName',
-            valueFeild: 'shopId'
-          }
-        },
-        {
-          label: '商品名称',
-          component: 'NInput',
-          field: 'skuName',
-          componentProps: {
-            placeholder: '请输入商品名称'
+const [
+  registerModalTable,
+  { refresh, getTableCheckedRowKeys, getTableData, setFieldsValue, setTableCheckedRowKeys, getSeachForm }
+] = useTable({
+  searchFormConfig: {
+    schemas: [
+      // {
+      //   label: '销售渠道',
+      //   component: 'ApiSelect',
+      //   field: 'channelNo',
+      //   componentProps: {
+      //     api: fetchFirstChannel,
+      //     resultFeild: 'data',
+      //     labelFeild: 'channelName',
+      //     valueFeild: 'channelNo'
+      //   }
+      // },
+      {
+        label: '销售渠道',
+        component: 'NSelect',
+        field: 'channelNo',
+        render: form => {
+          return (
+            <NSelect
+              v-model:value={form.model.channelNo}
+              placeholder="请选择销售渠道"
+              options={channelOptions.value}
+              on-update:value={changeChannel}
+            ></NSelect>
+          );
+        }
+      },
+      {
+        label: '门店名称',
+        component: 'ApiSelect',
+        field: 'shopId',
+        componentProps: {
+          api: fetchGetStoreList,
+          clearable: false,
+          resultFeild: 'data.list',
+          labelFeild: 'shopName',
+          valueFeild: 'shopId',
+          getOptions: (options: any) => {
+            setFieldsValue({
+              shopId: options[0]?.shopId || ''
+            });
           }
-        },
-        {
-          label: '商品ID',
-          component: 'NInput',
-          field: 'keywords'
-        },
-        {
-          label: '商品编码',
-          component: 'NInput',
-          field: 'skuCode'
         }
-      ],
-      inline: false,
-      size: 'small',
-      labelPlacement: 'left',
-      isFull: false
-    },
-    tableConfig: {
-      keyField: 'skuId',
-      title: '商品列表',
-      showAddButton: false,
-      minHeight: 650
-    }
-  });
+      },
+      {
+        label: '商品名称',
+        component: 'NInput',
+        field: 'skuName',
+        componentProps: {
+          placeholder: '请输入商品名称'
+        }
+      },
+      {
+        label: '商品ID',
+        component: 'NInput',
+        field: 'keywords'
+      },
+      {
+        label: '商品编码',
+        component: 'NInput',
+        field: 'skuCode'
+      }
+    ],
+    inline: false,
+    size: 'small',
+    labelPlacement: 'left',
+    isFull: false
+  },
+  tableConfig: {
+    keyField: 'skuId',
+    title: '商品列表',
+    showAddButton: false,
+    minHeight: 650,
+    defaultParamsNotReset: ['channelNo', 'shopId']
+  }
+});
 
 const [registerModal, { openModal, closeModal, setModalProps }] = useModal({
   title: `商品选择(已选${model.value.giftConfigJson.length}项)`,
@@ -356,7 +363,9 @@ function changeChannel(value: string, opt: any) {
     channelNo: value
   });
   console.log(11111111111, value, opt);
-  currentChannel.value = opt;
+  // currentChannel.value = opt;
+  // 修改:不直接更新currentChannel,而是更新待搜索的渠道
+  selectedChannelForSearch.value = opt;
 }
 function getChannel() {
   fetchFirstChannel().then(res => {
@@ -369,7 +378,7 @@ function getChannel() {
     });
     currentChannel.value = channelOptions.value[0];
 
-    console.log(res);
+    console.log(222222222, res);
   });
 }
 
@@ -543,18 +552,28 @@ async function handleAdd(type: string) {
     setFieldsValue({
       channelNo: channelOptions.value[0]?.value
     });
-    console.log(11111111111, channelOptions.value[0]?.value);
 
     await nextTick();
-    setTimeout(() => {
-      refresh();
-    }, 1000);
+    // setTimeout(() => {
+    //   refresh();
+    // }, 1000);
+    fetchRefresh();
     if (model.value.giftConfigJson.length) {
       const selectedKeys = model.value.giftConfigJson.map((item: any) => item.skuId);
       setTableCheckedRowKeys(selectedKeys);
     }
   }
 }
+// 确保商店已选择再刷新
+function fetchRefresh() {
+  setTimeout(() => {
+    if (getSeachForm().shopId) {
+      refresh();
+    } else {
+      fetchRefresh();
+    }
+  }, 500);
+}
 
 /**
  * 商品项去重:根据 skuId + shopId 唯一判断
@@ -623,6 +642,13 @@ function handleCheckedChange(checked: boolean) {
   }
 }
 
+function handleSearch() {
+  console.log('handleSearch');
+  if (selectedChannelForSearch.value) {
+    currentChannel.value = selectedChannelForSearch.value;
+  }
+}
+
 onMounted(() => {
   if (route.query.id) {
     if (route.query.mode === 'detail') {
@@ -1030,8 +1056,8 @@ onMounted(() => {
           :columns="columns"
           :api="fetchGoodsList"
           :default-params="{ channelCode: 'XSB' }"
-          default-params-not-reset="channelNo"
           @register="registerModalTable"
+          @search="handleSearch"
         ></ZTable>
       </LayoutTable>
     </BasicModal>

+ 1 - 1
src/views/order-manage/order-detail/index.vue

@@ -542,7 +542,7 @@ function getRefundRecordText() {
             </template>
             <template v-else-if="orderInfo.dvyType == 2">
               <div class="py-20px font-semibold">03 自提信息</div>
-              <div>预留电话:{{ orderInfo.shopName || '---' }}</div>
+              <div>预留电话:{{ orderInfo.consigneeMobile || '---' }}</div>
               <div>自提点:{{ orderInfo.consigneeAddress || '---' }}</div>
               <template
                 v-if="