Procházet zdrojové kódy

fix 测试汇总优化

ylong před 4 měsíci
rodič
revize
75acb0f0d3
83 změnil soubory, kde provedl 1445 přidání a 1416 odebrání
  1. 1 1
      .env.development
  2. 157 165
      src/components/CommonPage/CommonTable.vue
  3. 6 2
      src/components/CommonPage/InputNumberRange.vue
  4. 60 73
      src/components/CommonPage/ProSearch2.vue
  5. 1 1
      src/utils/use-order-operation.js
  6. 3 0
      src/views/data/books/components/books-edit.vue
  7. 1 1
      src/views/finance/bookPayments/index.vue
  8. 8 15
      src/views/finance/bookPayments/page-search.vue
  9. 7 6
      src/views/finance/cashFlow/components/page-search.vue
  10. 10 1
      src/views/finance/cashFlow/index.vue
  11. 1 1
      src/views/finance/commission/commission-detail.vue
  12. 1 0
      src/views/finance/commission/index.vue
  13. 8 6
      src/views/finance/commission/page-search.vue
  14. 3 1
      src/views/finance/subsidyReview/index.vue
  15. 8 8
      src/views/finance/subsidyReview/page-search.vue
  16. 15 7
      src/views/finance/withdrawal/components/page-search.vue
  17. 2 2
      src/views/finance/withdrawal/index.vue
  18. 4 3
      src/views/marketing/ipMrakup/datalist/components/page-search.vue
  19. 47 53
      src/views/marketing/ipMrakup/ipActivity/components/page-search.vue
  20. 1 1
      src/views/marketing/partner/components/partner-edit.vue
  21. 1 1
      src/views/marketing/partner/components/partner-list.vue
  22. 3 1
      src/views/marketing/partner/components/partner-poster.vue
  23. 13 6
      src/views/marketing/partner/components/partner-search.vue
  24. 13 6
      src/views/marketing/partner/components/partner-settlement-search.vue
  25. 1 0
      src/views/marketing/partner/components/partner-settlement.vue
  26. 5 4
      src/views/optimization/complain/components/page-search.vue
  27. 2 1
      src/views/optimization/complain/index.vue
  28. 29 27
      src/views/optimization/fallback/components/page-search.vue
  29. 2 1
      src/views/optimization/fallback/index.vue
  30. 4 3
      src/views/recycle/bookPushErpLog/components/book-push-erp-log-search.vue
  31. 1 1
      src/views/recycle/bookTypes/components/modify-type.vue
  32. 1 5
      src/views/recycle/bookTypes/components/opeate-log.vue
  33. 27 0
      src/views/recycle/bookTypes/index.vue
  34. 1 1
      src/views/recycle/booklist/index.vue
  35. 1 1
      src/views/recycle/booklistStat/components/recycle-discount-rate.vue
  36. 2 0
      src/views/recycle/components/book-search.vue
  37. 1 1
      src/views/recycle/components/modify-discount.vue
  38. 1 1
      src/views/recycle/components/modify-product-price.vue
  39. 1 1
      src/views/recycle/components/set-params.vue
  40. 2 0
      src/views/recycle/fallbackLog/components/book-search.vue
  41. 2 0
      src/views/recycle/inventory/components/page-search.vue
  42. 17 2
      src/views/recycle/pending/components/deal-log.vue
  43. 8 0
      src/views/recycle/pending/index.vue
  44. 9 1
      src/views/recycle/processed/index.vue
  45. 4 3
      src/views/recycle/remindArea/components/page-search.vue
  46. 4 3
      src/views/recycle/remindBooks/components/page-search.vue
  47. 1 1
      src/views/recycle/specifiedBooks/index.vue
  48. 2 0
      src/views/recycle/workbench/book-search.vue
  49. 4 3
      src/views/recycleAffairs/auditor/components/page-search.vue
  50. 46 23
      src/views/recycleLogistics/arrivalSign/components/arrivalSign-search.vue
  51. 7 4
      src/views/recycleLogistics/components/order-page.vue
  52. 47 24
      src/views/recycleLogistics/expressCheck/components/page-search.vue
  53. 46 23
      src/views/recycleLogistics/transferSign/components/page-search.vue
  54. 476 620
      src/views/recycleOrder/components/order-page-all.vue
  55. 5 2
      src/views/recycleOrder/components/order-page.vue
  56. 26 25
      src/views/recycleOrder/components/refund-customer.vue
  57. 117 113
      src/views/recycleOrder/detail/order-base-info.vue
  58. 6 5
      src/views/recycleOrder/needReturned/index.vue
  59. 1 1
      src/views/recycleOrder/search/index.vue
  60. 2 2
      src/views/recycleService/locationOrder/components/location-order-search.vue
  61. 21 20
      src/views/recycleService/stockIn/components/stock-in-search.vue
  62. 1 1
      src/views/recycleService/stockIn/index.vue
  63. 2 2
      src/views/recycleService/stockOff/components/stock-off-add.vue
  64. 14 13
      src/views/recycleService/stockOff/components/stock-off-detail.vue
  65. 10 2
      src/views/recycleService/stockOff/components/stock-off-search.vue
  66. 1 1
      src/views/recycleService/stockOff/index.vue
  67. 21 20
      src/views/recycleService/stockOut/components/stock-out-search.vue
  68. 1 1
      src/views/recycleService/stockOut/index.vue
  69. 1 1
      src/views/riskControl/restrictLog/components/restrict-history.vue
  70. 6 6
      src/views/statistic/after-sales/components/page-search.vue
  71. 7 6
      src/views/statistic/arrivalSign/components/page-search.vue
  72. 6 6
      src/views/statistic/audit/components/page-search.vue
  73. 5 4
      src/views/statistic/defect/components/page-search.vue
  74. 36 46
      src/views/statistic/defect/index.vue
  75. 5 4
      src/views/statistic/entry/components/page-search.vue
  76. 7 6
      src/views/statistic/inspection/components/page-search.vue
  77. 1 1
      src/views/statistic/overview/index.vue
  78. 4 3
      src/views/statistic/recycleOrder/components/page-search.vue
  79. 5 4
      src/views/statistic/unpacking/components/page-search.vue
  80. 4 3
      src/views/statistic/weight/components/page-search.vue
  81. 0 1
      src/views/statistic/weight/index.vue
  82. 1 1
      src/views/system/user/components/user-edit.vue
  83. 1 1
      src/views/system/user/components/user-list.vue

+ 1 - 1
.env.development

@@ -1,3 +1,3 @@
 # 开发环境接口地址
-VITE_API_URL=https://bpi.shuhi.com
+VITE_API_URL=https://bk.shuhi.com
 #VITE_API_URL=http://localhost:8080

+ 157 - 165
src/components/CommonPage/CommonTable.vue

@@ -1,22 +1,9 @@
 <template>
-    <ele-card
-        :body-style="{ paddingTop: '8px', ...bodyStyle }"
-        :flex-table="flexTable"
-    >
+    <ele-card :body-style="{ paddingTop: '8px', ...bodyStyle }" :flex-table="flexTable">
         <!-- 表格 -->
-        <ele-pro-table
-            ref="tableRef"
-            :row-key="pageConfig.rowKey || 'id'"
-            :columns="columns"
-            :datasource="datasource"
-            :show-overflow-tooltip="true"
-            v-model:selections="selections"
-            highlight-current-row
-            :export-config="{ fileName: pageConfig.fileName }"
-            :cache-key="pageConfig.cacheKey"
-            border
-            v-bind="$attrs"
-        >
+        <ele-pro-table ref="tableRef" :row-key="pageConfig.rowKey || 'id'" :columns="columns" :datasource="datasource"
+            :show-overflow-tooltip="true" v-model:selections="selections" highlight-current-row
+            :export-config="{ fileName: pageConfig.fileName }" :cache-key="pageConfig.cacheKey" border v-bind="$attrs">
             <template v-for="(val, key) in slotArray" #[key]="{ row }">
                 <slot :name="key" :row="row"></slot>
             </template>
@@ -25,135 +12,91 @@
 </template>
 
 <script setup>
-    import { ref, getCurrentInstance, useSlots } from 'vue';
-    import { ElMessageBox } from 'element-plus/es';
-    import { EleMessage } from 'ele-admin-plus/es';
-    import { useDictData } from '@/utils/use-dict-data';
-    import { download, toFormData, checkDownloadRes } from '@/utils/common';
-
-    const slotArray = useSlots();
-
-    let props = defineProps({
-        pageConfig: {
-            type: Object,
-            default: () => ({
-                cacheKey: 'recycleOrderTable',
-                fileName: '回收订单查询',
-                rowKey: 'id'
-            })
-        },
-        pageUrl: { type: String, default: '/system/post/list' },
-        columns: { type: Array, default: () => [] },
-        bodyStyle: { type: Object, default: () => ({}) },
-        flexTable: { type: Boolean, default: true }
-    });
-    let { proxy } = getCurrentInstance();
-
-    /** 表格实例 */
-    const tableRef = ref(null);
-
-    /** 表格选中数据 */
-    const selections = ref([]);
-
-    async function queryPage(params) {
-        let url = props.pageConfig.pageUrl || props.pageUrl;
-        const res = await proxy.$http.get(url, { params });
-        if (res.data.code === 200) {
-            return res.data;
-        }
-        return Promise.reject(new Error(res.data.msg));
+import { ref, getCurrentInstance, useSlots } from "vue";
+import { ElMessageBox } from "element-plus/es";
+import { EleMessage } from "ele-admin-plus/es";
+import { useDictData } from "@/utils/use-dict-data";
+import { download, toFormData, checkDownloadRes } from "@/utils/common";
+
+const slotArray = useSlots();
+
+let props = defineProps({
+    pageConfig: {
+        type: Object,
+        default: () => ({
+            cacheKey: "recycleOrderTable",
+            fileName: "回收订单查询",
+            rowKey: "id",
+        }),
+    },
+    pageUrl: { type: String, default: "/system/post/list" },
+    columns: { type: Array, default: () => [] },
+    bodyStyle: { type: Object, default: () => ({}) },
+    flexTable: { type: Boolean, default: true },
+});
+let { proxy } = getCurrentInstance();
+
+/** 表格实例 */
+const tableRef = ref(null);
+
+/** 表格选中数据 */
+const selections = ref([]);
+
+async function queryPage(params) {
+    let url = props.pageConfig.pageUrl || props.pageUrl;
+    const res = await proxy.$http.get(url, { params });
+    if (res.data.code === 200) {
+        return res.data;
     }
-
-    /** 表格数据源 */
-    const datasource = (table) => {
-        let { pages, where, orders, sorter } = table;
-        let initKeys = props.pageConfig.params || {};
-
-        let tempOrders = {};
-        if (orders && orders.orderByColumn) {
-            tempOrders.orderType = sorter.column.columnKey;
-            tempOrders.orderWay = orders.isAsc === 'ascending' ? 'asc' : 'desc';
-        }
-
-        return queryPage({ ...initKeys, ...where, ...tempOrders, ...pages });
-    };
-
-    /** 搜索 */
-    const reload = (where) => {
-        tableRef.value?.reload?.({ where, pageNum: 1 });
-    };
-
-    /** 批量操作 */
-    const operatBatch = ({ method, row, url, title, data = {} }) => {
-        const rows = row == null ? selections.value : [row];
-        if (!rows.length) {
-            EleMessage.error('请至少选择一条数据');
-            return;
-        }
-        title = title || '是否确认当前操作?';
-        ElMessageBox.confirm(title, '提示', {
-            type: 'warning',
-            draggable: true
-        })
-            .then(() => {
-                const loading = EleMessage.loading({
-                    message: '请求中..',
-                    plain: true
-                });
-                proxy.$http[method](url, data)
-                    .then((res) => {
-                        if (res.data.code === 200) {
-                            EleMessage.success('操作成功');
-                            reload();
-                        } else {
-                            EleMessage.error(res.data.msg);
-                        }
-                        loading.close();
-                    })
-                    .catch((e) => {
-                        loading.close();
-                        EleMessage.error(e.message);
-                    });
-            })
-            .catch(() => {});
-    };
-
-    /// 导出数据
-    async function exportPage(params, name, method = 'POST') {
-        const res = await proxy.$http({
-            url: props.pageConfig.exportUrl,
-            method,
-            data: toFormData(params),
-            responseType: 'blob'
-        });
-        await checkDownloadRes(res);
-        download(
-            res.data,
-            name ? `${name}_${Date.now()}.xlsx` : `post_${Date.now()}.xlsx`
-        );
+    return Promise.reject(new Error(res.data.msg));
+}
+
+/** 表格数据源 */
+const whereCache = ref({});
+const datasource = (table) => {
+    let { pages, where, orders, sorter } = table;
+    let initKeys = props.pageConfig.params || {};
+    whereCache.value = where;
+
+    let tempOrders = {};
+    if (orders && orders.orderByColumn) {
+        tempOrders.orderType = sorter.column.columnKey;
+        tempOrders.orderWay = orders.isAsc === "ascending" ? "asc" : "desc";
     }
 
-    //导出数据 进导出记录
-    function exportRecord(params, method = 'POST') {
-        return proxy.$http({
-            url: props.pageConfig.exportUrl,
-            method,
-            data: params
-        }); // 导出记录
+    return queryPage({ ...initKeys, ...where, ...tempOrders, ...pages });
+};
+
+/** 搜索 */
+const reload = (where={}) => {
+    let data = where && where.search ? { page: 1, where } : { where: { ...whereCache.value, ...where } };
+    delete data.where?.search;
+    delete data.where?.isReset;
+    tableRef.value?.reload?.(data);
+};
+
+/** 批量操作 */
+const operatBatch = ({ method, row, url, title, data = {} }) => {
+    const rows = row == null ? selections.value : [row];
+    if (!rows.length) {
+        EleMessage.error("请至少选择一条数据");
+        return;
     }
-
-    /** 导出数据 */
-    const exportData = (name, method = 'POST') => {
-        const loading = EleMessage.loading({
-            message: '请求中..',
-            plain: true
-        });
-        tableRef.value?.fetch?.(({ where, orders }) => {
-            let initKeys = props.pageConfig.params || {};
-            exportRecord({ ...where, ...orders, ...initKeys }, method)
+    title = title || "是否确认当前操作?";
+    ElMessageBox.confirm(title, "提示", {
+        type: "warning",
+        draggable: true,
+    })
+        .then(() => {
+            const loading = EleMessage.loading({
+                message: "请求中..",
+                plain: true,
+            });
+            proxy.$http[method](url, data)
                 .then((res) => {
                     if (res.data.code === 200) {
-                        EleMessage.success('操作成功,请前往导出记录下载');
+                        EleMessage.success("操作成功");
+                        reload();
                     } else {
                         EleMessage.error(res.data.msg);
                     }
@@ -163,36 +106,85 @@
                     loading.close();
                     EleMessage.error(e.message);
                 });
-        });
-    };
-
-    function messageBoxConfirm({ message, fetch }) {
-        ElMessageBox.confirm(message, '提示', {
-            confirmButtonText: '确定',
-            cancelButtonText: '关闭',
-            type: 'warning'
-        }).then(() => {
-            fetch().then((res) => {
+        })
+        .catch(() => { });
+};
+
+/// 导出数据
+async function exportPage(params, name, method = "POST") {
+    const res = await proxy.$http({
+        url: props.pageConfig.exportUrl,
+        method,
+        data: toFormData(params),
+        responseType: "blob",
+    });
+    await checkDownloadRes(res);
+    download(
+        res.data,
+        name ? `${name}_${Date.now()}.xlsx` : `post_${Date.now()}.xlsx`
+    );
+}
+
+//导出数据 进导出记录
+function exportRecord(params, method = "POST") {
+    return proxy.$http({
+        url: props.pageConfig.exportUrl,
+        method,
+        data: params,
+    }); // 导出记录
+}
+
+/** 导出数据 */
+const exportData = (name, method = "POST") => {
+    const loading = EleMessage.loading({
+        message: "请求中..",
+        plain: true,
+    });
+    tableRef.value?.fetch?.(({ where, orders }) => {
+        let initKeys = props.pageConfig.params || {};
+        exportRecord({ ...where, ...orders, ...initKeys }, method)
+            .then((res) => {
                 if (res.data.code === 200) {
-                    EleMessage.success('操作成功');
-                    reload();
+                    EleMessage.success("操作成功,请前往导出记录下载");
                 } else {
                     EleMessage.error(res.data.msg);
                 }
+                loading.close();
+            })
+            .catch((e) => {
+                loading.close();
+                EleMessage.error(e.message);
             });
+    });
+};
+
+function messageBoxConfirm({ message, fetch }) {
+    ElMessageBox.confirm(message, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "关闭",
+        type: "warning",
+    }).then(() => {
+        fetch().then((res) => {
+            if (res.data.code === 200) {
+                EleMessage.success("操作成功");
+                reload();
+            } else {
+                EleMessage.error(res.data.msg);
+            }
         });
-    }
-
-    function getSelections() {
-        console.log(selections.value, 'selections.value');
-        return selections.value;
-    }
-
-    defineExpose({
-        reload,
-        exportData,
-        operatBatch,
-        getSelections,
-        messageBoxConfirm
     });
+}
+
+function getSelections() {
+    console.log(selections.value, "selections.value");
+    return selections.value;
+}
+
+defineExpose({
+    reload,
+    exportData,
+    operatBatch,
+    getSelections,
+    messageBoxConfirm,
+});
 </script>

+ 6 - 2
src/components/CommonPage/InputNumberRange.vue

@@ -3,7 +3,7 @@
         <el-input-number
             v-model="form.minValue"
             class="flex-1"
-            placeholder="最小"
+            :placeholder="label + '最小'"
             :controls="false"
             :max="form.maxValue"
             v-bind="minAttrs"
@@ -13,7 +13,7 @@
         <el-input-number
             v-model="form.maxValue"
             class="flex-1"
-            placeholder="最大"
+            :placeholder="label + '最大'"
             :controls="false"
             :min="form.minValue"
             v-bind="maxAttrs"
@@ -43,6 +43,10 @@
         maxAttrs: {
             type: Object,
             default: () => ({})
+        },
+        label: {
+            type: String,
+            default: ''
         }
     });
 

+ 60 - 73
src/components/CommonPage/ProSearch2.vue

@@ -1,93 +1,80 @@
 <!-- 显示 4 列的搜索表单, 操作按钮所在的 el-col 自动计算 offset 保证一直靠右 -->
 <template>
-    <pro-form
-        :class="isShowLabel ? 'search-form' : 'search-form no-label-search'"
-        ref="proFormRef"
-        :model="form"
-        :items="items"
-        @updateValue="setFieldValue"
-        :grid="{ span: gridSpan }"
-        :rowProps="{ gutter: 12 }"
-        :footer="true"
-        :footer-props="{ labelWidth: '0px' }"
-        :footer-col-props="{
+    <pro-form :class="isShowLabel ? 'search-form' : 'search-form no-label-search'" ref="proFormRef" :model="form"
+        :items="items" @updateValue="setFieldValue" :grid="{ span: gridSpan }" :rowProps="{ gutter: 12 }" :footer="true"
+        :footer-props="{ labelWidth: '0px' }" :footer-col-props="{
             span: 4,
             offset: 0
-        }"
-    >
+        }">
         <template #footer>
             <div class="flex-1 flex items-center">
-                <el-button style="width: 90px" type="primary" @click="search"
-                    >查询</el-button
-                >
-                <el-button style="width: 90px" type="info" @click="reset"
-                    >重置</el-button
-                >
+                <el-button style="width: 90px" type="primary" @click="search(false)">查询</el-button>
+                <el-button style="width: 90px" type="info" @click="reset">重置</el-button>
             </div>
         </template>
     </pro-form>
 </template>
 
 <script setup>
-    import { ref, computed } from 'vue';
-    import { useFormData } from '@/utils/use-form-data';
-    import ProForm from '@/components/ProForm/index.vue';
-    import { ArrowDown, ArrowUp } from '@/components/icons';
-    /** 列数 */
-    const gridNumber = 6;
-    /** 列数转为 el-col 的 span 值 */
-    const gridSpan = 24 / gridNumber;
+import { ref, computed } from 'vue';
+import { useFormData } from '@/utils/use-form-data';
+import ProForm from '@/components/ProForm/index.vue';
+import { ArrowDown, ArrowUp } from '@/components/icons';
+/** 列数 */
+const gridNumber = 6;
+/** 列数转为 el-col 的 span 值 */
+const gridSpan = 24 / gridNumber;
 
-    const emit = defineEmits(['search']);
-    /** 表单实例 */
-    const proFormRef = ref(null);
+const emit = defineEmits(['search']);
+/** 表单实例 */
+const proFormRef = ref(null);
 
-    const props = defineProps({
-        items: {
-            // 表单项
-            type: Array,
-            default: () => []
-        },
-        initKeys: {
-            // 初始化时需要显示的字段
-            type: Object,
-            default: () => ({})
-        },
-        offset: {
-            // 操作按钮的 offset 值
-            type: Number,
-            default: 0
-        },
-        isShowLabel: {
-            // 是否显示 label
-            type: Boolean,
-            default: true
-        }
-    });
+const props = defineProps({
+    items: {
+        // 表单项
+        type: Array,
+        default: () => []
+    },
+    initKeys: {
+        // 初始化时需要显示的字段
+        type: Object,
+        default: () => ({})
+    },
+    offset: {
+        // 操作按钮的 offset 值
+        type: Number,
+        default: 0
+    },
+    isShowLabel: {
+        // 是否显示 label
+        type: Boolean,
+        default: false
+    }
+});
 
-    /** 表单数据 */
-    const [form, resetFields, assignFields, setFieldValue] = useFormData({
-        ...props.initKeys
-    });
+/** 表单数据 */
+const [form, resetFields, assignFields, setFieldValue] = useFormData({
+    ...props.initKeys
+});
 
-    /** 搜索 */
-    const search = () => {
-        emit('search', { ...form });
-    };
+/** 搜索 */
+const search = (isReset = false) => {
+    emit('search', { ...form, isReset, search: true });
+};
 
-    function setData(data) {
-        Object.keys(data).forEach((key) => {
-            setFieldValue(key, data[key]);
-        });
-    }
+function setData(data) {
+    Object.keys(data).forEach((key) => {
+        setFieldValue(key, data[key]);
+    });
+}
 
-    /** 重置 */
-    const reset = () => {
-        resetFields();
-        search();
-    };
+/** 重置 */
+const reset = () => {
+    resetFields();
+    search(true);
+};
 
-    defineExpose({
-        setData
-    });
+defineExpose({
+    setData
+});
 </script>

+ 1 - 1
src/utils/use-order-operation.js

@@ -46,7 +46,7 @@ export function useOrderOperation(pageRef) {
 
         //订单日志
         openOrderLog(row) {
-            orderLogRef.value?.handleOpen(row);
+            orderLogRef.value?.handleOpen(row.orderId);
         },
 
         //取消订单

+ 3 - 0
src/views/data/books/components/books-edit.vue

@@ -224,6 +224,9 @@
             values.catalog = data.bookBlurb.catalog;
         }
         formData.value.cover = data.cover;
+        values.perCheck = data.perCheck == 1 ? '1' : '0';
+        values.suit = data.suit == 1 ? '1' : '0';
+        values.bookTag = data.bookTag == 1 ? '1' : '0';
         return values;
     }
 

+ 1 - 1
src/views/finance/bookPayments/index.vue

@@ -105,7 +105,7 @@
     /** 表格列配置 */
     const columns = ref([
         { label: '交易时间', prop: 'orderTime', align: 'center', width: 180 },
-        { label: '用户', prop: 'userId', align: 'center' },
+        { label: '用户ID', prop: 'userId', align: 'center' },
         {
             label: '支付单号/流水号',
             prop: 'changeLogId',

+ 8 - 15
src/views/finance/bookPayments/page-search.vue

@@ -25,7 +25,7 @@
     });
 
     const formItems = reactive([
-        { type: 'input', label: '用户名', prop: 'nickName' },
+        { type: 'input', label: '用户ID', prop: 'userId' },
         {
             type: 'select',
             label: '状态',
@@ -36,18 +36,19 @@
             ]
         },
         {
-            type: 'daterange',
+            type: 'datetimerange',
             label: '时间',
             prop: 'timeRange',
             props: {
-                valueFormat: 'YYYY-MM-DD',
-                format: 'YYYY-MM-DD',
+                valueFormat: 'YYYY-MM-DD HH:mm:ss',
+                format: 'YYYY-MM-DD HH:mm:ss',
                 startPlaceholder: '开始日期',
                 endPlaceholder: '结束日期',
                 onChange: (value) => {
-                    initKeys.startTime = value ? value[0] : '';
-                    initKeys.endTime = value ? value[1] : '';
-                    searchRef.value?.setData(initKeys);
+                    searchRef.value?.setData({
+                        startTime: value ? value[0] : '',
+                        endTime: value ? value[1] : ''
+                    });
                 }
             }
         }
@@ -60,14 +61,6 @@
         status: ''
     });
 
-    // watch(
-    //   () => props.status,
-    //   (newVal) => {
-    //     initKeys.status = newVal;
-    //     searchRef.value?.setData(initKeys);
-    //   }
-    // );
-
     const searchRef = ref(null);
     /** 搜索 */
     const search = (data) => {

+ 7 - 6
src/views/finance/cashFlow/components/page-search.vue

@@ -29,18 +29,19 @@
             props: { code: 'account_change_type' }
         },
         {
-            type: 'daterange',
+            type: 'datetimerange',
             label: '创建时间',
             prop: 'createTime',
             props: {
-                valueFormat: 'YYYY-MM-DD',
-                format: 'YYYY-MM-DD',
+                valueFormat: 'YYYY-MM-DD HH:mm:ss',
+                format: 'YYYY-MM-DD HH:mm:ss',
                 startPlaceholder: '开始日期',
                 endPlaceholder: '结束日期',
                 onChange: (value) => {
-                    initKeys.createTimeStart = value ? value[0] : '';
-                    initKeys.createTimeEnd = value ? value[1] : '';
-                    searchRef.value?.setData(initKeys);
+                    searchRef.value?.setData({
+                        createTimeStart: value ? value[0] : '',
+                        createTimeEnd: value ? value[1] : ''
+                    });
                 }
             }
         }

+ 10 - 1
src/views/finance/cashFlow/index.vue

@@ -34,6 +34,14 @@
                 </div>
             </template>
 
+            <template #changeType="{ row }">
+                <dict-data
+                    code="account_change_type"
+                    type="text"
+                    :model-value="row.changeType"
+                />
+            </template>
+
             <template #orderId="{ row }">
                 <el-button type="primary" link @click="handleOrderId(row)">
                     {{ row.orderId }}
@@ -96,7 +104,8 @@
         {
             label: '交易类型',
             prop: 'changeTypeName',
-            align: 'center'
+            align: 'center',
+            slot: 'changeType'
         }
     ]);
 

+ 1 - 1
src/views/finance/commission/commission-detail.vue

@@ -5,7 +5,7 @@
         v-model="visible"
         title="佣金获取详情"
         @open="handleOpen"
-        body-style="padding: 0px 10px;"
+        :body-style="{ padding: '0px 10px' }"
     >
         <common-table
             ref="pageRef"

+ 1 - 0
src/views/finance/commission/index.vue

@@ -132,6 +132,7 @@
             width: 180
         },
         { label: '合伙人姓名', prop: 'partnerName', align: 'center' },
+        { label: '合伙人用户ID', prop: 'inviteUserId', align: 'center' },
         { label: '合伙人手机号', prop: 'partnerMobile', align: 'center' },
         { label: '下单人姓名', prop: 'orderName', align: 'center' },
         { label: '下单人手机号', prop: 'orderMobile', align: 'center' },

+ 8 - 6
src/views/finance/commission/page-search.vue

@@ -25,6 +25,7 @@
 
     const formItems = reactive([
         { type: 'input', label: '合伙人姓名', prop: 'partnerName' },
+        { type: 'input', label: '合伙人用户ID', prop: 'inviteUserId' },
         {
             type: 'select',
             label: '状态',
@@ -38,18 +39,19 @@
             ]
         },
         {
-            type: 'daterange',
+            type: 'datetimerange',
             label: '时间',
             prop: 'timeRange',
             props: {
-                valueFormat: 'YYYY-MM-DD',
-                format: 'YYYY-MM-DD',
+                valueFormat: 'YYYY-MM-DD HH:mm:ss',
+                format: 'YYYY-MM-DD HH:mm:ss',
                 startPlaceholder: '开始日期',
                 endPlaceholder: '结束日期',
                 onChange: (value) => {
-                    initKeys.createTimeStart = value ? value[0] : '';
-                    initKeys.createTimeEnd = value ? value[1] : '';
-                    searchRef.value?.setData(initKeys);
+                    searchRef.value?.setData({
+                        createTimeStart: value ? value[0] : '',
+                        createTimeEnd: value ? value[1] : ''
+                    });
                 }
             }
         }

+ 3 - 1
src/views/finance/subsidyReview/index.vue

@@ -126,6 +126,7 @@
     import LogDialog from './components/log-dialog.vue';
     import BatchAudit from './components/batch-audit.vue';
     import { ElMessage } from 'element-plus';
+import { rowKey } from 'element-plus/es/components/table-v2/src/common';
     defineOptions({ name: 'SubsidyReview' });
 
     const { proxy } = getCurrentInstance();
@@ -168,7 +169,7 @@
     const columns = ref([
         { type: 'selection', width: 55, align: 'center' },
         { label: '申请时间', prop: 'submitTime', align: 'center', width: 180 },
-        { label: '用户UID', prop: 'userId', align: 'center' },
+        { label: '用户ID', prop: 'userId', align: 'center' },
         { label: '用户昵称', prop: 'nickName', align: 'center' },
         {
             label: '对方账户',
@@ -208,6 +209,7 @@
         pageUrl: '/order/orderCompensationLog/pagelist',
         fileName: '补贴审核',
         cacheKey: 'subsidyReview',
+        rowKey:'id',
         params: {
             status: useStatus.value
         }

+ 8 - 8
src/views/finance/subsidyReview/page-search.vue

@@ -31,7 +31,7 @@
     });
 
     const formItems = reactive([
-        { type: 'input', label: '输入用户UID', prop: 'userId' },
+        { type: 'input', label: '用户ID', prop: 'userId' },
         {
             type: 'dictSelect',
             label: '请选择类型',
@@ -41,19 +41,19 @@
             }
         },
         {
-            type: 'daterange',
+            type: 'datetimerange',
             label: '时间',
             prop: 'timeRange',
             props: {
-                valueFormat: 'YYYY-MM-DD',
-                format: 'YYYY-MM-DD',
+                valueFormat: 'YYYY-MM-DD HH:mm:ss',
+                format: 'YYYY-MM-DD HH:mm:ss',
                 startPlaceholder: '开始时间',
                 endPlaceholder: '结束时间',
                 onChange: (value) => {
-                    initKeys.startTime = value ? value[0] : '';
-                    initKeys.endTime = value ? value[1] : '';
-                    initKeys.timeRange = value;
-                    searchRef.value?.setData(initKeys);
+                    searchRef.value?.setData({
+                        startTime: value ? value[0] : '',
+                        endTime: value ? value[1] : ''
+                    });
                 }
             }
         }

+ 15 - 7
src/views/finance/withdrawal/components/page-search.vue

@@ -11,7 +11,7 @@
 </template>
 
 <script setup>
-    import { reactive, ref, defineEmits } from 'vue';
+    import { reactive, ref, defineEmits, watch } from 'vue';
     import ProSearch from '@/components/CommonPage/ProSearch2.vue';
 
     let { proxy } = getCurrentInstance();
@@ -26,26 +26,34 @@
             props: { code: 'withdrawal_status' }
         },
         {
-            type: 'daterange',
+            type: 'datetimerange',
             label: '时间',
             prop: 'timeRange',
             props: {
-                valueFormat: 'YYYY-MM-DD',
-                format: 'YYYY-MM-DD',
+                valueFormat: 'YYYY-MM-DD HH:mm:ss',
+                format: 'YYYY-MM-DD HH:mm:ss',
                 startPlaceholder: '开始日期',
                 endPlaceholder: '结束日期',
                 onChange: (value) => {
-                    initKeys.startTime = value ? value[0] : '';
-                    initKeys.endTime = value ? value[1] : '';
-                    searchRef.value?.setData(initKeys);
+                    searchRef.value?.setData({
+                        startTime: value ? value[0] : '',
+                        endTime: value ? value[1] : ''
+                    });
                 }
             }
         }
     ]);
+    const props = defineProps({
+        status: {
+            type: String,
+            default: ''
+        }
+    });
 
     const initKeys = reactive({
         startTime: '',
         endTime: '',
+        status: '',
         nickName: ''
     });
 

+ 2 - 2
src/views/finance/withdrawal/index.vue

@@ -1,6 +1,6 @@
 <template>
     <ele-page flex-table>
-        <page-search @search="reload" :status="useStatus" />
+        <page-search @search="reload" />
 
         <common-table ref="pageRef" :pageConfig="pageConfig" :columns="columns">
             <template #toolbar>
@@ -163,7 +163,7 @@
         } else {
             pageConfig.pageUrl = '/sys/finance/withdrawList';
             pageConfig.params.status = value;
-            pageRef.value?.reload();
+            pageRef.value?.reload({ status: value });
         }
     }
 

+ 4 - 3
src/views/marketing/ipMrakup/datalist/components/page-search.vue

@@ -42,9 +42,10 @@
                 startPlaceholder: '开始日期',
                 endPlaceholder: '结束日期',
                 onChange: (value) => {
-                    initKeys.startTime = value ? value[0] : '';
-                    initKeys.endTime = value ? value[1] : '';
-                    searchRef.value?.setData(initKeys);
+                    searchRef.value?.setData({
+                        startTime: value ? value[0] : '',
+                        endTime: value ? value[1] : ''
+                    });
                 }
             }
         },

+ 47 - 53
src/views/marketing/ipMrakup/ipActivity/components/page-search.vue

@@ -1,67 +1,61 @@
 <!-- 搜索表单 -->
 <template>
     <ele-card :body-style="{ padding: '0', paddingTop: '12px' }">
-        <ProSearch
-            :items="formItems"
-            ref="searchRef"
-            @search="search"
-            :initKeys="initKeys"
-        />
+        <ProSearch :items="formItems" ref="searchRef" @search="search" :initKeys="initKeys" />
     </ele-card>
 </template>
 
 <script setup>
-    import { reactive, ref, defineEmits } from 'vue';
-    import ProSearch from '@/components/CommonPage/ProSearch2.vue';
+import { reactive, ref, defineEmits } from 'vue';
+import ProSearch from '@/components/CommonPage/ProSearch2.vue';
 
-    const emit = defineEmits(['search']);
-    const formItems = computed(() => {
-        return [
-            { type: 'input', label: '活动名称', prop: 'activityName' },
-            { type: 'input', label: '省份', prop: 'provinceName' },
-            { type: 'input', label: '地区', prop: 'cityName' },
-            {
-                type: 'dictSelect',
-                label: '活动状态',
-                prop: 'status',
-                props: {
-                    code: 'activity_status'
-                }
+const emit = defineEmits(['search']);
+const formItems = computed(() => {
+    return [
+        { type: 'input', label: '活动名称', prop: 'activityName' },
+        { type: 'input', label: '省份', prop: 'provinceName' },
+        { type: 'input', label: '地区', prop: 'cityName' },
+        {
+            type: 'select',
+            label: '活动状态',
+            prop: 'status',
+            options: [{ value: '0', label: '已关闭' }, { value: '1', label: '进行中' }]
+        },
+        {
+            type: 'daterange',
+            label: '申请时间',
+            prop: 'timeRange',
+            style: {
+                minWidth: '300px'
             },
-            {
-                type: 'daterange',
-                label: '申请时间',
-                prop: 'timeRange',
-                style: {
-                    minWidth: '300px'
-                },
-                props: {
-                    valueFormat: 'YYYY-MM-DD',
-                    format: 'YYYY-MM-DD',
-                    startPlaceholder: '开始日期',
-                    endPlaceholder: '结束日期',
-                    onChange: (value) => {
-                        initKeys.startTime = value ? value[0] : '';
-                        initKeys.endTime = value ? value[1] : '';
-                        searchRef.value?.setData(initKeys);
-                    }
+            props: {
+                valueFormat: 'YYYY-MM-DD',
+                format: 'YYYY-MM-DD',
+                startPlaceholder: '开始日期',
+                endPlaceholder: '结束日期',
+                onChange: (value) => {
+                    searchRef.value?.setData({
+                        startTime: value ? value[0] : '',
+                        endTime: value ? value[1] : ''
+                    });
                 }
             }
-        ];
-    });
+        }
+    ];
+});
 
-    const initKeys = reactive({
-        activityName: '',
-        provinceName: '',
-        cityName: '',
-        status: '',
-        startTime: '',
-        endTime: ''
-    });
+const initKeys = reactive({
+    activityName: '',
+    provinceName: '',
+    cityName: '',
+    status: '',
+    startTime: '',
+    endTime: ''
+});
 
-    const searchRef = ref(null);
-    /** 搜索 */
-    const search = (data) => {
-        emit('search', { ...data });
-    };
+const searchRef = ref(null);
+/** 搜索 */
+const search = (data) => {
+    emit('search', { ...data });
+};
 </script>

+ 1 - 1
src/views/marketing/partner/components/partner-edit.vue

@@ -25,7 +25,7 @@
     const formItems = reactive([
         {
             type: 'input',
-            label: '微信ID',
+            label: '用户ID',
             prop: 'userId',
             props: { disabled: true }
         },

+ 1 - 1
src/views/marketing/partner/components/partner-list.vue

@@ -137,7 +137,7 @@
             align: 'center',
             fixed: 'left'
         },
-        { label: '微信ID', prop: 'userId', width: 100 },
+        { label: '用户ID', prop: 'userId', width: 100 },
         { label: '姓名', prop: 'name', minWidth: 100 },
         { label: '手机号', prop: 'mobile', width: 120 },
         { label: '地区', prop: 'address', minWidth: 180 },

+ 3 - 1
src/views/marketing/partner/components/partner-poster.vue

@@ -47,7 +47,9 @@
                     :src="row.background"
                     fit="contain"
                     style="width: 80px; height: 80px"
-                    :z-index="9999"
+                    :preview-src-list="[row.background]"
+                    :initial-index="0"
+                    preview-teleported
                 />
             </template>
 

+ 13 - 6
src/views/marketing/partner/components/partner-search.vue

@@ -24,6 +24,12 @@
             prop: 'name',
             placeholder: '请输入姓名'
         },
+        {
+            type: 'input',
+            label: '用户ID',
+            prop: 'userId',
+            placeholder: '请输入用户ID'
+        },
         {
             type: 'input',
             label: '手机号',
@@ -43,18 +49,19 @@
             props: { code: 'partner_status' }
         },
         {
-            type: 'daterange',
+            type: 'datetimerange',
             label: '申请时间',
             prop: 'timeRange',
             props: {
-                valueFormat: 'YYYY-MM-DD',
-                format: 'YYYY-MM-DD',
+                valueFormat: 'YYYY-MM-DD HH:mm:ss',
+                format: 'YYYY-MM-DD HH:mm:ss',
                 startPlaceholder: '开始日期',
                 endPlaceholder: '结束日期',
                 onChange: (value) => {
-                    initKeys.applyTimeStart = value ? value[0] : '';
-                    initKeys.applyTimeEnd = value ? value[1] : '';
-                    searchRef.value?.setData(initKeys);
+                    searchRef.value?.setData({
+                        applyTimeStart: value ? value[0] : '',
+                        applyTimeEnd: value ? value[1] : ''
+                    });
                 }
             }
         }

+ 13 - 6
src/views/marketing/partner/components/partner-settlement-search.vue

@@ -23,6 +23,12 @@
             prop: 'partnerName',
             placeholder: '请输入姓名'
         },
+        {
+            type: 'input',
+            label: '用户ID',
+            prop: 'inviteUserId',
+            placeholder: '请输入用户ID'
+        },
         {
             type: 'input',
             label: '手机号',
@@ -44,18 +50,19 @@
             }
         },
         {
-            type: 'daterange',
+            type: 'datetimerange',
             label: '创建时间',
             prop: 'timeRange',
             props: {
-                valueFormat: 'YYYY-MM-DD',
-                format: 'YYYY-MM-DD',
+                valueFormat: 'YYYY-MM-DD HH:mm:ss',
+                format: 'YYYY-MM-DD HH:mm:ss',
                 startPlaceholder: '开始日期',
                 endPlaceholder: '结束日期',
                 onChange: (value) => {
-                    initKeys.createTimeStart = value ? value[0] : '';
-                    initKeys.createTimeEnd = value ? value[1] : '';
-                    searchRef.value?.setData(initKeys);
+                    searchRef.value?.setData({
+                        createTimeStart: value ? value[0] : '',
+                        createTimeEnd: value ? value[1] : ''
+                    });
                 }
             }
         }

+ 1 - 0
src/views/marketing/partner/components/partner-settlement.vue

@@ -77,6 +77,7 @@
         },
         { label: '订单编号', prop: 'beInviteOrderId', minWidth: 120 },
         { label: '订单类型', prop: 'type', slot: 'type', width: 100 },
+        { label: '用户ID', prop: 'inviteUserId', width: 120 },
         { label: '下单人姓名', prop: 'orderName', width: 120 },
         { label: '下单人手机号', prop: 'orderMobile', width: 120 },
         { label: '合伙人姓名', prop: 'partnerName', width: 120 },

+ 5 - 4
src/views/optimization/complain/components/page-search.vue

@@ -27,9 +27,10 @@
                 format: 'YYYY-MM-DD HH:mm:ss',
                 valueFormat: 'YYYY-MM-DD HH:mm:ss',
                 onChange: (value) => {
-                    initKeys.createTimeStart = value ? value[0] : '';
-                    initKeys.createTimeEnd = value ? value[1] : '';
-                    searchRef.value?.setData(initKeys);
+                    searchRef.value?.setData({
+                        createTimeStart: value ? value[0] : '',
+                        createTimeEnd: value ? value[1] : ''
+                    });
                 }
             },
             colProps: { span: 6 }
@@ -43,7 +44,7 @@
         },
         {
             type: 'dictSelect',
-            label: '投诉原因',
+            label: '投诉状态',
             prop: 'status',
             props: { code: 'complain_status' },
             colProps: { span: 3 }

+ 2 - 1
src/views/optimization/complain/index.vue

@@ -18,6 +18,7 @@
                     <div class="demo-image__preview mt-2">
                         <el-image
                             v-for="item in row.imgList"
+                            :key="item"
                             style="
                                 width: 70px;
                                 height: 70px;
@@ -71,7 +72,7 @@
         },
         {
             label: '投诉人',
-            prop: 'userName',
+            prop: 'userId',
             align: 'center'
         },
         {

+ 29 - 27
src/views/optimization/fallback/components/page-search.vue

@@ -1,39 +1,41 @@
 <!-- 搜索表单 -->
 <template>
     <ele-card :body-style="{ paddingBottom: '8px' }">
-        <ProSearch
-            :items="formItems"
-            ref="searchRef"
-            @search="search"
-            :initKeys="initKeys"
-        />
+        <ProSearch :items="formItems" ref="searchRef" @search="search" :initKeys="initKeys" />
     </ele-card>
 </template>
 
 <script setup>
-    import { reactive, ref, defineEmits } from 'vue';
-    import ProSearch from '@/components/CommonPage/ProSearch2.vue';
+import { reactive, ref, defineEmits } from "vue";
+import ProSearch from "@/components/CommonPage/ProSearch2.vue";
 
-    let { proxy } = getCurrentInstance();
-    const emit = defineEmits(['search']);
+let { proxy } = getCurrentInstance();
+const emit = defineEmits(["search"]);
 
-    const formItems = reactive([
-        { type: 'input', label: '用户ID', prop: 'userId' },
-        { type: 'input', label: '昵称', prop: 'nickName' },
-        { type: 'input', label: '手机号', prop: 'mobile' },
-        { type: 'select', label: '状态', prop: 'status' }
-    ]);
+const formItems = reactive([
+    { type: "input", label: "用户ID", prop: "userId" },
+    { type: "input", label: "昵称", prop: "nickName" },
+    { type: "input", label: "意见类型", prop: "reason" },
+    {
+        type: "dictSelect",
+        label: "状态",
+        prop: "status",
+        props: {
+            code: "feedback_status",
+        },
+    },
+]);
 
-    const initKeys = reactive({
-        userId: '',
-        nickName: '',
-        mobile: '',
-        status: ''
-    });
+const initKeys = reactive({
+    userId: "",
+    nickName: "",
+    mobile: "",
+    status: "",
+});
 
-    const searchRef = ref(null);
-    /** 搜索 */
-    const search = (data) => {
-        emit('search', { ...data });
-    };
+const searchRef = ref(null);
+/** 搜索 */
+const search = (data) => {
+    emit("search", { ...data });
+};
 </script>

+ 2 - 1
src/views/optimization/fallback/index.vue

@@ -65,7 +65,8 @@
     const columns = ref([
         { type: 'index', label: '序号', width: 60, align: 'center' },
         { label: '状态', prop: 'status', align: 'center', slot: 'status' },
-        { label: '用户名', prop: 'nickName', align: 'center' },
+        { label: '用户昵称', prop: 'nickName', align: 'center' },
+        { label: '用户ID', prop: 'userId', align: 'center' },
         { label: '联系方式', prop: 'mobile', align: 'center' },
         { label: '意见类型', prop: 'reason', align: 'center', minWidth: 150 },
         { label: '反馈时间', prop: 'createTime', align: 'center', width: 180 },

+ 4 - 3
src/views/recycle/bookPushErpLog/components/book-push-erp-log-search.vue

@@ -24,9 +24,10 @@
                 format: 'YYYY-MM-DD HH:mm:ss',
                 valueFormat: 'YYYY-MM-DD HH:mm:ss',
                 onChange: (value) => {
-                    initKeys.startTime = value ? value[0] : '';
-                    initKeys.endTime = value ? value[1] : '';
-                    searchRef.value?.setData(initKeys);
+                    searchRef.value?.setData({
+                        startTime: value ? value[0] : '',
+                        endTime: value ? value[1] : ''
+                    });
                 }
             },
             colProps: {

+ 1 - 1
src/views/recycle/bookTypes/components/modify-type.vue

@@ -37,7 +37,7 @@
 
     function open({ isbn, bookTag }) {
         form.value.isbn = isbn;
-        form.value.operateType = Number(bookTag);
+        form.value.operateType = Number(bookTag) || '';
         visible.value = true;
     }
     function reset() {

+ 1 - 5
src/views/recycle/bookTypes/components/opeate-log.vue

@@ -38,11 +38,7 @@
         request
             .get('/book/bookInfo/getBookTagChangeLog', { params: { isbn } })
             .then((res) => {
-                if (res.data && res.data.code === 0) {
-                    dataList.value = res.data.data || [];
-                } else {
-                    dataList.value = [];
-                }
+                dataList.value = res.data?.data || [];
             });
     }
 

+ 27 - 0
src/views/recycle/bookTypes/index.vue

@@ -105,11 +105,30 @@
                 >
                     [加中小学库]
                 </el-button>
+                <el-button
+                    type="success"
+                    link
+                    v-permission="'recycle:bookTypes:removeBlacklist'"
+                    @click="handleOptBlacklist('remove', row)"
+                    v-if="row.bookStatus == 3"
+                >
+                    [移除黑名单]
+                </el-button>
+                <el-button
+                    type="danger"
+                    link
+                    v-permission="'recycle:bookTypes:addBlacklist'"
+                    @click="handleOptBlacklist('add', row)"
+                    v-if="row.bookStatus == 1 || row.bookStatus == 2"
+                >
+                    [加入黑名单]
+                </el-button>
             </template>
         </common-table>
 
         <modify-type ref="modifyTypeRef" @success="reload" />
         <opeate-log ref="logRef" />
+        <order-blacklist ref="blacklistRef" @refresh="reload" />
     </ele-page>
 </template>
 
@@ -121,6 +140,8 @@
     import bookStock from '@/views/recycle/components/book-stock.vue';
     import ModifyType from './components/modify-type.vue';
     import OpeateLog from './components/opeate-log.vue';
+    import orderBlacklist from '@/views/recycleOrder/detail/order-blacklist.vue';
+    import { useBookOperation } from '@/utils/use-book-operation';
     const { proxy } = getCurrentInstance();
     defineOptions({ name: 'RecycleBooklist' });
 
@@ -268,4 +289,10 @@
     function handleDelete(row) {
         setBookTag(row, '确认移除?', 4);
     }
+
+    // 使用图书操作混入
+    const {
+        blacklistRef,
+        handleOptBlacklist
+    } = useBookOperation(pageRef);
 </script>

+ 1 - 1
src/views/recycle/booklist/index.vue

@@ -202,7 +202,7 @@
         </common-table>
 
         <books-edit ref="editRef" />
-        <set-params ref="paramsRef" @refresh="reload" />
+        <set-params ref="paramsRef" />
         <add-discount ref="discountRef" @refresh="reload" />
         <order-blacklist ref="blacklistRef" @refresh="reload" />
     </ele-page>

+ 1 - 1
src/views/recycle/booklistStat/components/recycle-discount-rate.vue

@@ -101,7 +101,7 @@
                     },
                     { 
                         value: props.data.recycleDiscount1 || 0, 
-                        name: '0.5',
+                        name: '<0.5',
                         itemStyle: { color: '#E6A23C' }
                     }
                 ]

+ 2 - 0
src/views/recycle/components/book-search.vue

@@ -51,6 +51,7 @@
             prop: 'price',
             keys: ['minPrice', 'maxPrice'],
             props: {
+                label: '定价',
                 onChange: (val) => {
                     searchRef.value?.setData({
                         minPrice: val.min,
@@ -67,6 +68,7 @@
             props: {
                 minAttrs: { min: 0 },
                 maxAttrs: { max: 10 },
+                label: '回收折扣',
                 onChange: (val) => {
                     searchRef.value?.setData({
                         minDiscount: val.min,

+ 1 - 1
src/views/recycle/components/modify-discount.vue

@@ -85,7 +85,7 @@
                 .then(() => {
                     visible.value = false;
                     ElMessage.success('修改成功');
-                    emit('refresh', data.recycleDiscount);
+                    emit('refresh');
                 });
         });
     };

+ 1 - 1
src/views/recycle/components/modify-product-price.vue

@@ -79,7 +79,7 @@
                     if (res.data.code === 200) {
                         visible.value = false;
                         ElMessage.success('修改成功');
-                        emit('refresh', data.productPrice);
+                        emit('refresh');
                     } else {
                         ElMessage.error(res.data.msg || '修改失败');
                     }

+ 1 - 1
src/views/recycle/components/set-params.vue

@@ -135,7 +135,7 @@
                 request.post('/book/bookRecycleInfo/setSep', data).then(() => {
                     visible.value = false;
                     ElMessage.success('设置成功');
-                    emit('refresh', data.recycleDiscount);
+                    emit('refresh');
                 });
             }
         });

+ 2 - 0
src/views/recycle/fallbackLog/components/book-search.vue

@@ -29,6 +29,7 @@
             prop: 'price',
             keys: ['priceMin', 'priceMax'],
             props: {
+                label: '定价',
                 onChange: (val) => {
                     searchRef.value?.setData({
                         priceMin: val.min,
@@ -45,6 +46,7 @@
             props: {
                 minAttrs: { min: 0 },
                 maxAttrs: { max: 10 },
+                label: '回收折扣',
                 onChange: (val) => {
                     searchRef.value?.setData({
                         discountMin: val.min,

+ 2 - 0
src/views/recycle/inventory/components/page-search.vue

@@ -26,6 +26,7 @@
             prop: 'price',
             keys: ['minPrice', 'maxPrice'],
             props: {
+                label: '售价',
                 onChange: (val) => {
                     searchRef.value?.setData({
                         minPrice: val.min,
@@ -40,6 +41,7 @@
             prop: 'stock',
             keys: ['minStock', 'maxStock'],
             props: {
+                label: '库存',
                 onChange: (val) => {
                     searchRef.value?.setData({
                         minStock: val.min,

+ 17 - 2
src/views/recycle/pending/components/deal-log.vue

@@ -41,14 +41,29 @@
         if (id) {
             currentId.value = id;
             visible.value = true;
-            pageConfig.value.pageUrl = `/book/bookNoData/book/bookNoData/getDisposeLog/${id}`;
+            pageConfig.value.pageUrl = `/book/bookNoData/getDisposeLog/${id}`;
             pageRef.value?.reload();
         }
     };
+    // 1-检测 2-导出 3-爬虫 4-手动新增图书
+    const typeList = ref([
+        { label: '检测', value: 1 },
+        { label: '导出', value: 2 },
+        { label: '爬虫', value: 3 },
+        { label: '手动新增图书', value: 4 }
+    ]);
 
     /** 表格列配置 */
     const columns = ref([
-        { label: '处理方式', prop: 'disposeType', align: 'center' },
+        {
+            label: '处理方式',
+            prop: 'disposeType',
+            align: 'center',
+            formatter: (row) => {
+                return typeList.value.find((d) => d.value == row.disposeType)
+                    ?.label;
+            }
+        },
         { label: '处理人', prop: 'disposeName', align: 'center' },
         { label: '处理时间', prop: 'createTime', align: 'center', width: 180 }
     ]);

+ 8 - 0
src/views/recycle/pending/index.vue

@@ -114,6 +114,13 @@
 
     /** 表格列配置 */
     const columns = ref([
+        {
+            type: 'selection',
+            columnKey: 'selection',
+            width: 50,
+            align: 'center',
+            fixed: 'left'
+        },
         { label: 'ID', prop: 'id', width: 120, align: 'center' },
         { label: 'ISBN', prop: 'isbn', align: 'center' },
         { label: '扫描次数', prop: 'scanTimes', align: 'center' },
@@ -175,6 +182,7 @@
     }
 
     //去处理
+    const editRef = ref(null);
     function handleDeal(row) {
         editRef.value?.handleOpen(row);
     }

+ 9 - 1
src/views/recycle/processed/index.vue

@@ -83,7 +83,7 @@
 <script setup>
     import { ref, reactive } from 'vue';
     import CommonTable from '@/components/CommonPage/CommonTable.vue';
-    import pageSearch from '@/views/recycle/pending/components/page-search.vue';
+    import pageSearch from '@/views/recycle/processed/components/page-search.vue';
     import booksEdit from '@/views/data/books/components/books-edit.vue';
     import dealLog from '@/views/recycle/pending/components/deal-log.vue';
     import request from '@/utils/request';
@@ -92,6 +92,13 @@
 
     /** 表格列配置 */
     const columns = ref([
+    {
+            type: 'selection',
+            columnKey: 'selection',
+            width: 50,
+            align: 'center',
+            fixed: 'left'
+        },
         { label: 'ID', prop: 'id', width: 120, align: 'center' },
         { label: 'ISBN', prop: 'isbn', align: 'center' },
         {
@@ -169,6 +176,7 @@
     }
 
     //编辑
+    const editRef = ref(null);
     function handleEdit(row) {
         editRef.value?.handleOpen(row);
     }

+ 4 - 3
src/views/recycle/remindArea/components/page-search.vue

@@ -29,9 +29,10 @@
                     format: 'YYYY-MM-DD HH:mm:ss',
                     valueFormat: 'YYYY-MM-DD HH:mm:ss',
                     onChange: (value) => {
-                        initKeys.createTimeStart = value ? value[0] : '';
-                        initKeys.createTimeEnd = value ? value[1] : '';
-                        searchRef.value?.setData(initKeys);
+                        searchRef.value?.setData({
+                            createTimeStart: value ? value[0] : '',
+                            createTimeEnd: value ? value[1] : ''
+                        });
                     }
                 },
                 colProps: {

+ 4 - 3
src/views/recycle/remindBooks/components/page-search.vue

@@ -42,9 +42,10 @@
                     format: 'YYYY-MM-DD HH:mm:ss',
                     valueFormat: 'YYYY-MM-DD HH:mm:ss',
                     onChange: (value) => {
-                        initKeys.createTimeStart = value ? value[0] : '';
-                        initKeys.createTimeEnd = value ? value[1] : '';
-                        searchRef.value?.setData(initKeys);
+                        searchRef.value?.setData({
+                            createTimeStart: value ? value[0] : '',
+                            createTimeEnd: value ? value[1] : ''
+                        });
                     }
                 },
                 colProps: {

+ 1 - 1
src/views/recycle/specifiedBooks/index.vue

@@ -78,7 +78,7 @@
                 />
             </template>
             <template #baseInfo="{ row }">
-                <book-info :row="row" @refresh="reload" :showFormat="false" />
+                <book-info :row="row" @refresh="reload" />
             </template>
             <template #stock="{ row }">
                 <book-stock :row="row" />

+ 2 - 0
src/views/recycle/workbench/book-search.vue

@@ -44,6 +44,7 @@
             prop: 'price',
             keys: ['minPrice', 'maxPrice'],
             props: {
+                label: '定价',
                 onChange: (val) => {
                     searchRef.value?.setData({
                         minPrice: val.min,
@@ -84,6 +85,7 @@
             props: {
                 minAttrs: { min: 0 },
                 maxAttrs: { max: 10 },
+                label: '回收折扣',
                 onChange: (val) => {
                     searchRef.value?.setData({
                         minDiscount: val.min,

+ 4 - 3
src/views/recycleAffairs/auditor/components/page-search.vue

@@ -39,9 +39,10 @@
                     startPlaceholder: '开始时间',
                     endPlaceholder: '结束时间',
                     onChange: (value) => {
-                        initKeys.startTime = value ? value[0] : '';
-                        initKeys.endTime = value ? value[1] : '';
-                        searchRef.value?.setData(initKeys);
+                        searchRef.value?.setData({
+                            startTime: value ? value[0] : '',
+                            endTime: value ? value[1] : ''
+                        });
                     }
                 },
                 colProps: {

+ 46 - 23
src/views/recycleLogistics/arrivalSign/components/arrivalSign-search.vue

@@ -11,37 +11,60 @@
 </template>
 
 <script setup>
-    import { reactive, ref, defineEmits } from 'vue';
+    import { reactive, ref, defineEmits, computed } from 'vue';
     import ProSearch from '@/components/CommonPage/ProSearch2.vue';
 
     let { proxy } = getCurrentInstance();
     const emit = defineEmits(['search']);
+    const godownList = ref([]);
 
-    const formItems = reactive([
-        { type: 'input', label: '签收者', prop: 'signUserName' },
-        { type: 'input', label: '物流单号', prop: 'deliveryCode' },
-        { type: 'input', label: '物流CODE', prop: 'expressCode' },
-        {
-            type: 'datetime',
-            label: '签收时间(开始时间)',
-            prop: 'createTimeStart',
-            props: {
-                format: 'YYYY-MM-DD HH:mm:ss',
-                valueFormat: 'YYYY-MM-DD HH:mm:ss'
+    const formItems = computed(() => {
+        return [
+            {
+                type: 'select',
+                label: '仓库名称',
+                prop: 'godownId',
+                options: godownList.value.map((d) => {
+                    return { label: d.godownName, value: d.id };
+                }),
+                props: {
+                    placeholder: '请选择或输入搜索仓库',
+                    filterable: true
+                }
+            },
+            { type: 'input', label: '签收者', prop: 'signUserName' },
+            { type: 'input', label: '物流单号', prop: 'deliveryCode' },
+            { type: 'input', label: '物流CODE', prop: 'expressCode' },
+            {
+                type: 'datetime',
+                label: '签收时间(开始时间)',
+                prop: 'createTimeStart',
+                props: {
+                    format: 'YYYY-MM-DD HH:mm:ss',
+                    valueFormat: 'YYYY-MM-DD HH:mm:ss'
+                }
+            },
+            {
+                type: 'datetime',
+                label: '签收时间(结束时间)',
+                prop: 'createTimeEnd',
+                props: {
+                    format: 'YYYY-MM-DD HH:mm:ss',
+                    valueFormat: 'YYYY-MM-DD HH:mm:ss'
+                }
             }
-        },
-        {
-            type: 'datetime',
-            label: '签收时间(结束时间)',
-            prop: 'createTimeEnd',
-            props: {
-                format: 'YYYY-MM-DD HH:mm:ss',
-                valueFormat: 'YYYY-MM-DD HH:mm:ss'
-            }
-        }
-    ]);
+        ];
+    });
+
+    function getStoreList(name = '') {
+        return proxy.$http.post(`/baseinfo/godown/searchGodown?name=${name}`);
+    }
+    getStoreList().then((res) => {
+        godownList.value = res.data.data;
+    });
 
     const initKeys = reactive({
+        godownId: '',
         signUserName: '',
         deliveryCode: '',
         createTimeStart: '',

+ 7 - 4
src/views/recycleLogistics/components/order-page.vue

@@ -54,7 +54,7 @@
                 </template>
                 <template #dealer="{ row }">
                     <div class="common-text">
-                        <el-text>处理人:</el-text>
+                        <el-text>员工姓名:</el-text>
                         <el-text>{{
                             row.exceptOrderCheckInfo?.checkName || '-'
                         }}</el-text>
@@ -185,7 +185,7 @@
     ];
 
     const historyColumns = [
-        { label: '处理人', prop: 'checkName', slot: 'dealer', minWidth: 170 },
+        { label: '员工姓名', prop: 'checkName', slot: 'dealer', minWidth: 170 },
         {
             label: '处理结果',
             prop: 'checkStatus',
@@ -235,8 +235,11 @@
     };
 
     /** 搜索 */
-    const reload = (where) => {
-        tableRef.value?.reload?.({ page: 1, where });
+    const reload = (where = {}) => {
+        let data = where && where.search ? { page: 1, where } : { where };
+        delete data.where?.search;
+        delete data.where?.isReset;
+        tableRef.value?.reload?.(data);
     };
 
     /** 批量操作 */

+ 47 - 24
src/views/recycleLogistics/expressCheck/components/page-search.vue

@@ -11,38 +11,61 @@
 </template>
 
 <script setup>
-    import { reactive, ref, defineEmits } from 'vue';
+    import { reactive, ref, defineEmits, computed } from 'vue';
     import ProSearch from '@/components/CommonPage/ProSearch2.vue';
 
     let { proxy } = getCurrentInstance();
     const emit = defineEmits(['search']);
+    const godownList = ref([]);
 
-    const formItems = reactive([
-        { type: 'input', label: '签收者', prop: 'signUserName' },
-        { type: 'input', label: '物流单号', prop: 'deliveryCode' },
-        { type: 'input', label: '物流CODE', prop: 'expressCode' },
-        { type: 'input', label: '批次号', prop: 'batchNum' },
-        {
-            type: 'datetime',
-            label: '签收时间(开始时间)',
-            prop: 'createTimeStart',
-            props: {
-                format: 'YYYY-MM-DD HH:mm:ss',
-                valueFormat: 'YYYY-MM-DD HH:mm:ss'
+    const formItems = computed(() => {
+        return [
+            {
+                type: 'select',
+                label: '仓库名称',
+                prop: 'godownId',
+                options: godownList.value.map((d) => {
+                    return { label: d.godownName, value: d.id };
+                }),
+                props: {
+                    placeholder: '请选择或输入搜索仓库',
+                    filterable: true
+                }
+            },
+            { type: 'input', label: '签收者', prop: 'signUserName' },
+            { type: 'input', label: '物流单号', prop: 'deliveryCode' },
+            { type: 'input', label: '物流CODE', prop: 'expressCode' },
+            { type: 'input', label: '批次号', prop: 'batchNum' },
+            {
+                type: 'datetime',
+                label: '签收时间(开始时间)',
+                prop: 'createTimeStart',
+                props: {
+                    format: 'YYYY-MM-DD HH:mm:ss',
+                    valueFormat: 'YYYY-MM-DD HH:mm:ss'
+                }
+            },
+            {
+                type: 'datetime',
+                label: '签收时间(结束时间)',
+                prop: 'createTimeEnd',
+                props: {
+                    format: 'YYYY-MM-DD HH:mm:ss',
+                    valueFormat: 'YYYY-MM-DD HH:mm:ss'
+                }
             }
-        },
-        {
-            type: 'datetime',
-            label: '签收时间(结束时间)',
-            prop: 'createTimeEnd',
-            props: {
-                format: 'YYYY-MM-DD HH:mm:ss',
-                valueFormat: 'YYYY-MM-DD HH:mm:ss'
-            }
-        }
-    ]);
+        ];
+    });
+
+    function getStoreList(name = '') {
+        return proxy.$http.post(`/baseinfo/godown/searchGodown?name=${name}`);
+    }
+    getStoreList().then((res) => {
+        godownList.value = res.data.data;
+    });
 
     const initKeys = reactive({
+        godownId: '',
         signUserName: '',
         deliveryCode: '',
         createTimeStart: '',

+ 46 - 23
src/views/recycleLogistics/transferSign/components/page-search.vue

@@ -11,37 +11,60 @@
 </template>
 
 <script setup>
-    import { reactive, ref, defineEmits } from 'vue';
+    import { reactive, ref, defineEmits, computed } from 'vue';
     import ProSearch from '@/components/CommonPage/ProSearch2.vue';
 
     let { proxy } = getCurrentInstance();
     const emit = defineEmits(['search']);
+    const godownList = ref([]);
 
-    const formItems = reactive([
-        { type: 'input', label: '签收者', prop: 'signUserName' },
-        { type: 'input', label: '物流单号', prop: 'deliveryCode' },
-        { type: 'input', label: '物流CODE', prop: 'expressCode' },
-        {
-            type: 'datetime',
-            label: '签收时间(开始时间)',
-            prop: 'createTimeStart',
-            props: {
-                format: 'YYYY-MM-DD HH:mm:ss',
-                valueFormat: 'YYYY-MM-DD HH:mm:ss'
+    const formItems = computed(() => {
+        return [
+            {
+                type: 'select',
+                label: '仓库名称',
+                prop: 'godownId',
+                options: godownList.value.map((d) => {
+                    return { label: d.godownName, value: d.id };
+                }),
+                props: {
+                    placeholder: '请选择或输入搜索仓库',
+                    filterable: true
+                }
+            },
+            { type: 'input', label: '签收者', prop: 'signUserName' },
+            { type: 'input', label: '物流单号', prop: 'deliveryCode' },
+            { type: 'input', label: '物流CODE', prop: 'expressCode' },
+            {
+                type: 'datetime',
+                label: '签收时间(开始时间)',
+                prop: 'createTimeStart',
+                props: {
+                    format: 'YYYY-MM-DD HH:mm:ss',
+                    valueFormat: 'YYYY-MM-DD HH:mm:ss'
+                }
+            },
+            {
+                type: 'datetime',
+                label: '签收时间(结束时间)',
+                prop: 'createTimeEnd',
+                props: {
+                    format: 'YYYY-MM-DD HH:mm:ss',
+                    valueFormat: 'YYYY-MM-DD HH:mm:ss'
+                }
             }
-        },
-        {
-            type: 'datetime',
-            label: '签收时间(结束时间)',
-            prop: 'createTimeEnd',
-            props: {
-                format: 'YYYY-MM-DD HH:mm:ss',
-                valueFormat: 'YYYY-MM-DD HH:mm:ss'
-            }
-        }
-    ]);
+        ];
+    });
+
+    function getStoreList(name = '') {
+        return proxy.$http.post(`/baseinfo/godown/searchGodown?name=${name}`);
+    }
+    getStoreList().then((res) => {
+        godownList.value = res.data.data;
+    });
 
     const initKeys = reactive({
+        godownId: '',
         signUserName: '',
         deliveryCode: '',
         createTimeStart: '',

+ 476 - 620
src/views/recycleOrder/components/order-page-all.vue

@@ -4,36 +4,24 @@
         <order-search @search="reload" />
         <ele-card :body-style="{ paddingTop: '8px' }" flex-table>
             <!-- 表格 -->
-            <ele-pro-table
-                ref="tableRef"
-                row-key="orderId"
-                :columns="propColumns.length > 0 ? propColumns : columns"
-                :datasource="datasource"
-                :show-overflow-tooltip="true"
-                v-model:selections="selections"
-                highlight-current-row
-                :export-config="{ fileName: pageConfig.fileName }"
-                :cache-key="pageConfig.cacheKey"
-            >
+            <ele-pro-table ref="tableRef" row-key="orderId" :columns="propColumns.length > 0 ? propColumns : columns"
+                :datasource="datasource" :show-overflow-tooltip="true" v-model:selections="selections"
+                highlight-current-row :export-config="{ fileName: pageConfig.fileName }"
+                :cache-key="pageConfig.cacheKey">
                 <template #toolbar>
                     <slot name="toolbar"></slot>
                 </template>
 
                 <template #status="{ row }">
-                    <el-tag type="danger" v-if="row.cancelStatus == 1"
-                        >已取消</el-tag
-                    >
-                    <dict-data
-                        v-else
-                        code="order_status"
-                        type="tag"
-                        :model-value="row.status"
-                    />
+                    <el-tag type="danger" v-if="row.cancelStatus == 1">已取消</el-tag>
+                    <dict-data v-else code="order_status" type="tag" :model-value="row.status" />
                     <div v-if="row.status == 4 && row.auditRejectReason">
                         原因:
-                        <el-text type="info">{{
-                            row.auditRejectReason
-                        }}</el-text>
+                        <el-text type="info">{{ row.auditRejectReason }}</el-text>
+                    </div>
+                    <div class v-if="row.cancelReason && row.cancelStatus == 1">
+                        取消原因:
+                        <el-text type="info">{{ row.cancelReason }}</el-text>
                     </div>
                 </template>
                 <template #orderNumber="{ row }">
@@ -49,245 +37,116 @@
                     <order-time :row="row" />
                 </template>
                 <template #remarks="{ row }">
-                    <el-popover
-                        trigger="hover"
-                        width="240px"
-                        @show="handleShowPopover(row)"
-                        @hide="showOrderId = ''"
-                    >
+                    <el-popover trigger="hover" width="240px" @show="handleShowPopover(row)" @hide="showOrderId = ''">
                         <template #reference>
-                            <el-icon
-                                style="cursor: pointer"
-                                :size="24"
-                                :color="row.remarkLabel || '#777777'"
-                                @click="handleRemarks(row)"
-                            >
+                            <el-icon style="cursor: pointer" :size="24" :color="row.remarkLabel || '#777777'"
+                                @click="handleRemarks(row)">
                                 <Flag />
                             </el-icon>
                         </template>
-                        <orderTimeline
-                            title="备注历史记录"
-                            ref="remarkPopoverRef"
-                        />
+                        <orderTimeline title="备注历史记录" ref="remarkPopoverRef" />
                     </el-popover>
                 </template>
 
                 <template #action="{ row }">
                     <div class="flex justify-center flex-wrap">
-                        <el-button
-                            type="success"
-                            link
-                            v-permission="usePermission('detail')"
-                            @click="toOrderDetail(row)"
-                        >
+                        <el-button type="success" link v-permission="usePermission('detail')"
+                            @click="toOrderDetail(row)">
                             [订单详情]
                         </el-button>
-                        <el-button
-                            type="warning"
-                            link
-                            v-permission="usePermission('log')"
-                            @click="openOrderLog(row)"
-                        >
+                        <el-button type="warning" link v-permission="usePermission('log')" @click="openOrderLog(row)">
                             [订单日志]
                         </el-button>
-                        <el-button
-                            type="danger"
-                            link
-                            v-if="row.status == 2"
-                            v-permission="usePermission('audit')"
-                            @click="handleFirstCheck(row)"
-                        >
+                        <el-button type="danger" link v-if="row.status == 2" v-permission="usePermission('audit')"
+                            @click="handleFirstCheck(row)">
                             [初步审核]
                         </el-button>
                         <!-- 3 已初审-带上门取件 5已揽件-待签收 6已签收-待确认到货 -->
-                        <el-button
-                            type="danger"
-                            link
-                            v-if="['3', '5', '6'].includes(row.status)"
-                            v-permission="usePermission('cancel')"
-                            @click="handleCancelOrder(row)"
-                        >
+                        <el-button type="danger" link v-if="['3', '5', '6'].includes(row.status)"
+                            v-permission="usePermission('cancel')" @click="handleCancelOrder(row)">
                             [取消订单]
                         </el-button>
                         <!-- 3 已初审-带上门取件 5已揽件-待签收 6已签收-待确认到货 8待回收审核 9审核未提交 10待付款 -->
-                        <el-button
-                            type="primary"
-                            link
-                            v-if="
-                                ['3', '5', '6', '8', '9', '10'].includes(
-                                    row.status
-                                )
-                            "
-                            v-permission="usePermission('fallback')"
-                            @click="fallbackOrder(row)"
-                        >
+                        <el-button type="primary" link v-if="['3', '5', '6', '8', '9', '10'].includes(row.status)"
+                            v-permission="usePermission('fallback')" @click="fallbackOrder(row)">
                             [回退状态]
                         </el-button>
-                        <el-button
-                            type="success"
-                            link
-                            v-if="row.status == 3"
-                            v-permission="usePermission('materialPickup')"
-                            @click="materialPickup(row)"
-                        >
+                        <el-button type="success" link v-if="row.status == 3"
+                            v-permission="usePermission('materialPickup')" @click="materialPickup(row)">
                             [物流揽件]
                         </el-button>
-                        <el-button
-                            type="success"
-                            link
-                            v-if="row.status == 5"
-                            v-permission="usePermission('receive')"
-                            @click="handleLogisticsSigning(row)"
-                        >
+                        <el-button type="success" link v-if="row.status == 5" v-permission="usePermission('receive')"
+                            @click="handleLogisticsSigning(row)">
                             [物流签收]
                         </el-button>
-                        <el-button
-                            type="success"
-                            link
-                            v-if="row.status == 5 || row.status == 7"
-                            v-permission="usePermission('signDelivery')"
-                            @click="handleSignDelivery(row)"
-                        >
+                        <el-button type="success" link v-if="row.status == 5 || row.status == 7"
+                            v-permission="usePermission('signDelivery')" @click="handleSignDelivery(row)">
                             [快递签收]
                         </el-button>
-                        <el-button
-                            type="success"
-                            link
-                            v-if="row.status == 6"
-                            v-permission="usePermission('confirmReceipt')"
-                            @click="handleConfirmReceipt(row)"
-                        >
+                        <el-button type="success" link v-if="row.status == 6"
+                            v-permission="usePermission('confirmReceipt')" @click="handleConfirmReceipt(row)">
                             [确认收货]
                         </el-button>
-                        <el-button
-                            type="success"
-                            link
-                            v-if="['8', '9'].includes(row.status)"
-                            v-permission="usePermission('arrivalAudit')"
-                            @click="toOrderDetail(row)"
-                        >
+                        <el-button type="success" link v-if="['8', '9'].includes(row.status)"
+                            v-permission="usePermission('arrivalAudit')" @click="toOrderDetail(row)">
                             [到货审核]
                         </el-button>
-                        <el-button
-                            type="danger"
-                            link
-                            v-if="['8', '9', '10', '11'].includes(row.status)"
-                            v-permission="usePermission('auditScreenshot')"
-                            @click="handleAuditScreenshot(row)"
-                        >
+                        <el-button type="danger" link v-if="['8', '9', '10', '11'].includes(row.status)"
+                            v-permission="usePermission('auditScreenshot')" @click="handleAuditScreenshot(row)">
                             [审核截图]
                         </el-button>
-                        <el-button
-                            type="danger"
-                            link
-                            v-if="row.status == 10"
-                            v-permission="usePermission('payment')"
-                            @click="handleBatchPayment(row)"
-                        >
+                        <el-button type="danger" link v-if="row.status == 10" v-permission="usePermission('payment')"
+                            @click="handleBatchPayment(row)">
                             [支付书款]
                         </el-button>
-                        <el-button
-                            type="danger"
-                            link
-                            v-if="row.status == 11"
-                            v-permission="usePermission('afterSalesPayment')"
-                            @click="handleAfterSalesPayment(row)"
-                        >
+                        <el-button type="danger" link v-if="row.status == 11"
+                            v-permission="usePermission('afterSalesPayment')" @click="handleAfterSalesPayment(row)">
                             [售后补款]
                         </el-button>
-                        <el-button
-                            type="warning"
-                            link
-                            v-permission="usePermission('userTag')"
-                            @click="openEditUserTag(row)"
-                        >
+                        <el-button type="warning" link v-permission="usePermission('userTag')"
+                            @click="openEditUserTag(row)">
                             [用户标签]
                         </el-button>
-                        <el-button
-                            type="success"
-                            link
-                            v-if="row.status == 2"
-                            v-permission="usePermission('modifyAddress')"
-                            @click="handleModifyAddress(row)"
-                        >
+                        <el-button type="success" link v-if="row.status == 2"
+                            v-permission="usePermission('modifyAddress')" @click="handleModifyAddress(row)">
                             [修改地址]
                         </el-button>
 
                         <!-- v-if="['8', '9', '10', '11'].includes(row.status)" -->
-                        <el-button
-                            type="success"
-                            link
-                            v-if="row.status > 2"
-                            v-permission="usePermission('sendSMS')"
-                            @click="handleSendSMS(row)"
-                        >
+                        <el-button type="success" link v-if="row.status > 2" v-permission="usePermission('sendSMS')"
+                            @click="handleSendSMS(row)">
                             [推送短信]
                         </el-button>
-                        <el-button
-                            type="info"
-                            link
-                            v-if="['8', '9', '10'].includes(row.status)"
-                            v-permission="usePermission('smsLog')"
-                            @click="handleSmsLog(row)"
-                        >
+                        <el-button type="info" link v-if="['8', '9', '10'].includes(row.status)"
+                            v-permission="usePermission('smsLog')" @click="handleSmsLog(row)">
                             [短信记录]
                         </el-button>
-                        <el-button
-                            color="#7728f5"
-                            link
-                            plain
-                            v-if="row.status == 11"
-                            v-permission="usePermission('applyForOrderClaim')"
-                            @click="handleApplyForOrderClaim(row)"
-                        >
+                        <el-button color="#7728f5" link plain v-if="row.status == 11"
+                            v-permission="usePermission('applyForOrderClaim')" @click="handleApplyForOrderClaim(row)">
                             [申请订单理赔]
                         </el-button>
-                        <el-button
-                            color="#7728f5"
-                            link
-                            plain
-                            v-if="row.cancelStatus == 1"
+                        <el-button color="#7728f5" link plain v-if="row.cancelStatus == 1"
                             v-permission="usePermission('applyForOrderRestore')"
-                            @click="handleApplyForOrderRestore(row)"
-                        >
+                            @click="handleApplyForOrderRestore(row)">
                             [申请恢复订单]
                         </el-button>
 
-                        <el-button
-                            link
-                            plain
-                            type="danger"
-                            v-if="
-                                row.status == 11 &&
-                                (row.refundStatus == 1 || row.refundStatus == 5)
-                            "
-                            v-permission="usePermission('returnBad')"
-                            @click="handleReturnBad(row)"
-                        >
+                        <el-button link plain type="danger" v-if="
+                            row.status == 11 &&
+                            (row.refundStatus == 1 || row.refundStatus == 5)
+                        " v-permission="usePermission('returnBad')" @click="handleReturnBad(row)">
                             [退回不良]
                         </el-button>
 
                         <template v-if="row.interceptStatus == 0">
-                            <el-button
-                                type="danger"
-                                link
-                                v-if="['5', '6'].includes(row.status)"
-                                v-permission="usePermission('interception')"
-                                @click="applyForInterception(row)"
-                            >
+                            <el-button type="danger" link v-if="['5', '6'].includes(row.status)"
+                                v-permission="usePermission('interception')" @click="applyForInterception(row)">
                                 [申请拦截退回]
                             </el-button>
                         </template>
                         <template v-else>
-                            <el-button
-                                type="info"
-                                link
-                                v-if="['5', '6'].includes(row.status)"
-                                v-permission="
-                                    usePermission('cancelInterception')
-                                "
-                                @click="cancelInterception(row)"
-                            >
+                            <el-button type="info" link v-if="['5', '6'].includes(row.status)"
+                                v-permission="usePermission('cancelInterception')" @click="cancelInterception(row)">
                                 [取消拦截退回]
                             </el-button>
                         </template>
@@ -325,444 +184,441 @@
 </template>
 
 <script setup>
-    import { ref, getCurrentInstance, nextTick } from 'vue';
-    import { ElMessageBox } from 'element-plus/es';
-    import { EleMessage } from 'ele-admin-plus/es';
-    import { DownloadOutlined } from '@/components/icons';
-    import { Flag, ChatDotSquare } from '@element-plus/icons-vue';
-    import OrderSearch from '../components/order-search.vue';
-    import OrderNumber from '@/views/recycleOrder/components/order-number.vue';
-    import OrderCustomer from '@/views/recycleOrder/components/order-customer.vue';
-    import OrderAmount from '@/views/recycleOrder/components/order-amount.vue';
-    import OrderTime from '@/views/recycleOrder/components/order-time.vue';
-    import { useDictData } from '@/utils/use-dict-data';
-    import { download, toFormData, checkDownloadRes } from '@/utils/common';
-    import orderRemarks from '@/views/recycleOrder/components/order-remarks.vue';
-    import orderTimeline from '@/views/recycleOrder/components/order-timeline.vue';
-    import firstCheckModal from '@/views/recycleOrder/components/first-check-modal.vue';
-    import modifyAddress from '@/views/recycleOrder/components/modify-address.vue';
-    import applyForOrderClaim from '@/views/recycleOrder/components/applyfor-order-claim.vue';
-    import afterSalesPayment from '@/views/recycleOrder/components/after-sales-payment.vue';
-    //订单日志
-    import orderLog from '@/views/recycleOrder/components/order-log.vue';
-    //用户标签
-    import userBindTag from '@/views/recycleOrder/components/user-bind-tag.vue';
-    //订单详情
-    import orderDetail from '@/views/recycleOrder/components/order-detail.vue';
-    //审核截图
-    import auditScreenshot from '@/views/recycleOrder/components/audit-screenshot.vue';
-    //推送短信
-    import sendSMS from '@/views/recycleOrder/components/send-SMS.vue';
-    //短信记录
-    import orderSmsLog from '@/views/recycleOrder/components/order-sms-log.vue';
-    //申请恢复订单
-    import applyOrderRestore from '@/views/recycleOrder/components/apply-order-restore.vue';
-
-    let props = defineProps({
-        pageConfig: {
-            type: Object,
-            default: () => ({
-                cacheKey: 'recycleOrderTable',
-                pageUrl: '/order/orderInfo/pageList',
-                fileName: '回收订单查询',
-                exportUrl: '/order/orderInfo/export',
-                where: {}
-            })
-        },
-        exportUrl: { type: String, default: '/system/post/export' },
-        permissionKey: { type: String, default: 'search' },
-        propColumns: { type: Array, default: () => [] }
-    });
-    const usePermission = computed(() => (opts) => {
-        return `recycleOrder:${props.permissionKey}:${opts}`;
-    });
-
-    let { proxy } = getCurrentInstance();
-    /** 字典数据 */
-    const [statusDicts] = useDictData(['order_status']);
-
-    /** 表格实例 */
-    const tableRef = ref(null);
-
-    /** 表格列配置 */
-    const columns = ref([
-        {
-            type: 'selection',
-            columnKey: 'selection',
-            width: 50,
-            align: 'center',
-            fixed: 'left'
-        },
-        {
-            label: '单号',
-            prop: 'orderNumber',
-            slot: 'orderNumber',
-            minWidth: 230
-        },
-        { label: '客户', prop: 'customer', slot: 'customer', minWidth: 360 },
-        { label: '金额', prop: 'amount', slot: 'amount', minWidth: 160 },
-        {
-            label: '状态',
-            prop: 'status',
-            slot: 'status',
-            width: '166'
-        },
-        { label: '时间', prop: 'time', slot: 'time', minWidth: 210 },
-        { label: '备注', prop: 'remarks', slot: 'remarks' },
-        {
-            columnKey: 'action',
-            label: '操作',
-            width: 182,
-            align: 'center',
-            slot: 'action',
-            hideInPrint: true,
-            hideInExport: true,
-            fixed: 'right'
-        }
-    ]);
-
-    /** 表格选中数据 */
-    const selections = ref([]);
-
-    /** 当前编辑数据 */
-    const current = ref(null);
-
-    /** 是否显示编辑弹窗 */
-    const showEdit = ref(false);
-
-    async function queryPage(params) {
-        if (!props.pageConfig.pageUrl)
-            return EleMessage.error('未配置页面请求URL');
-        const res = await proxy.$http.get(props.pageConfig.pageUrl, { params });
-        if (res.data.code === 200) {
-            return res.data;
-        }
-        return Promise.reject(new Error(res.data.msg));
+import { ref, getCurrentInstance, nextTick } from "vue";
+import { ElMessageBox } from "element-plus/es";
+import { EleMessage } from "ele-admin-plus/es";
+import { DownloadOutlined } from "@/components/icons";
+import { Flag, ChatDotSquare } from "@element-plus/icons-vue";
+import OrderSearch from "../components/order-search.vue";
+import OrderNumber from "@/views/recycleOrder/components/order-number.vue";
+import OrderCustomer from "@/views/recycleOrder/components/order-customer.vue";
+import OrderAmount from "@/views/recycleOrder/components/order-amount.vue";
+import OrderTime from "@/views/recycleOrder/components/order-time.vue";
+import { useDictData } from "@/utils/use-dict-data";
+import { download, toFormData, checkDownloadRes } from "@/utils/common";
+import orderRemarks from "@/views/recycleOrder/components/order-remarks.vue";
+import orderTimeline from "@/views/recycleOrder/components/order-timeline.vue";
+import firstCheckModal from "@/views/recycleOrder/components/first-check-modal.vue";
+import modifyAddress from "@/views/recycleOrder/components/modify-address.vue";
+import applyForOrderClaim from "@/views/recycleOrder/components/applyfor-order-claim.vue";
+import afterSalesPayment from "@/views/recycleOrder/components/after-sales-payment.vue";
+//订单日志
+import orderLog from "@/views/recycleOrder/components/order-log.vue";
+//用户标签
+import userBindTag from "@/views/recycleOrder/components/user-bind-tag.vue";
+//订单详情
+import orderDetail from "@/views/recycleOrder/components/order-detail.vue";
+//审核截图
+import auditScreenshot from "@/views/recycleOrder/components/audit-screenshot.vue";
+//推送短信
+import sendSMS from "@/views/recycleOrder/components/send-SMS.vue";
+//短信记录
+import orderSmsLog from "@/views/recycleOrder/components/order-sms-log.vue";
+//申请恢复订单
+import applyOrderRestore from "@/views/recycleOrder/components/apply-order-restore.vue";
+
+let props = defineProps({
+    pageConfig: {
+        type: Object,
+        default: () => ({
+            cacheKey: "recycleOrderTable",
+            pageUrl: "/order/orderInfo/pageList",
+            fileName: "回收订单查询",
+            exportUrl: "/order/orderInfo/export",
+            where: {},
+        }),
+    },
+    exportUrl: { type: String, default: "/system/post/export" },
+    permissionKey: { type: String, default: "search" },
+    propColumns: { type: Array, default: () => [] },
+});
+const usePermission = computed(() => (opts) => {
+    return `recycleOrder:${props.permissionKey}:${opts}`;
+});
+
+let { proxy } = getCurrentInstance();
+/** 字典数据 */
+const [statusDicts] = useDictData(["order_status"]);
+
+/** 表格实例 */
+const tableRef = ref(null);
+
+/** 表格列配置 */
+const columns = ref([
+    {
+        type: "selection",
+        columnKey: "selection",
+        width: 50,
+        align: "center",
+        fixed: "left",
+    },
+    {
+        label: "单号",
+        prop: "orderNumber",
+        slot: "orderNumber",
+        minWidth: 230,
+    },
+    { label: "客户", prop: "customer", slot: "customer", minWidth: 360 },
+    { label: "金额", prop: "amount", slot: "amount", minWidth: 160 },
+    {
+        label: "状态",
+        prop: "status",
+        slot: "status",
+        width: "166",
+    },
+    { label: "时间", prop: "time", slot: "time", minWidth: 210 },
+    { label: "备注", prop: "remarks", slot: "remarks" },
+    {
+        columnKey: "action",
+        label: "操作",
+        width: 182,
+        align: "center",
+        slot: "action",
+        hideInPrint: true,
+        hideInExport: true,
+        fixed: "right",
+    },
+]);
+
+/** 表格选中数据 */
+const selections = ref([]);
+
+/** 当前编辑数据 */
+const current = ref(null);
+
+/** 是否显示编辑弹窗 */
+const showEdit = ref(false);
+
+async function queryPage(params) {
+    if (!props.pageConfig.pageUrl) return EleMessage.error("未配置页面请求URL");
+    const res = await proxy.$http.get(props.pageConfig.pageUrl, { params });
+    if (res.data.code === 200) {
+        return res.data;
     }
-
-    /** 表格数据源 */
-    const datasource = ({ pages, where, orders }) => {
-        let initParams = props.pageConfig?.where || {};
-        return queryPage({
-            ...where,
-            ...orders,
-            ...pages,
-            ...initParams
-        });
-    };
-
-    /** 搜索 */
-    const reload = (where) => {
-        tableRef.value?.reload?.({ page: 1, where });
-    };
-
-    /** 批量操作 */
-    const operatBatch = ({ row, url, title }) => {
-        const rows = row == null ? selections.value : [row];
-        if (!rows.length) {
-            EleMessage.error('请至少选择一条数据');
-            return;
-        }
-        title = title || '是否确认当前操作?';
-        ElMessageBox.confirm(title, '提示', {
-            type: 'warning',
-            draggable: true
-        })
-            .then(() => {
-                const loading = EleMessage.loading({
-                    message: '请求中..',
-                    plain: true
-                });
-
-                proxy.$http
-                    .delete(url)
-                    .then(() => {
-                        loading.close();
-                        EleMessage.success('操作成功');
-                        reload();
-                    })
-                    .catch((e) => {
-                        loading.close();
-                        EleMessage.error(e.message);
-                    });
-            })
-            .catch(() => {});
-    };
-
-    /// 导出数据
-    async function exportPage(params, name) {
-        if (!props.pageConfig.exportUrl)
-            return EleMessage.error('未配置导出的URL!');
-        const res = await proxy.$http({
-            url: props.pageConfig.exportUrl,
-            method: 'POST',
-            data: toFormData(params),
-            responseType: 'blob'
-        });
-        await checkDownloadRes(res);
-        download(
-            res.data,
-            name ? `${name}_${Date.now()}.xlsx` : `post_${Date.now()}.xlsx`
-        );
-    }
-
-    //导出数据 进导出记录
-    function exportRecord(params, name) {
-        if (!props.pageConfig.exportUrl)
-            return EleMessage.error('未配置导出的URL!');
-        return proxy.$http({
-            url: props.pageConfig.exportUrl,
-            method: 'POST',
-            data: params
-        }); // 导出记录
+    return Promise.reject(new Error(res.data.msg));
+}
+
+/** 表格数据源 */
+const datasource = ({ pages, where, orders }) => {
+    let initParams = props.pageConfig?.where || {};
+    return queryPage({
+        ...where,
+        ...orders,
+        ...pages,
+        ...initParams,
+    });
+};
+
+/** 搜索 */
+const reload = (where = {}) => {
+    let data = where && where.search ? { page: 1, where } : { where };
+    delete data.where?.search;
+    delete data.where?.isReset;
+
+    tableRef.value?.reload?.(data);
+};
+
+/** 批量操作 */
+const operatBatch = ({ row, url, title }) => {
+    const rows = row == null ? selections.value : [row];
+    if (!rows.length) {
+        EleMessage.error("请至少选择一条数据");
+        return;
     }
+    title = title || "是否确认当前操作?";
+    ElMessageBox.confirm(title, "提示", {
+        type: "warning",
+        draggable: true,
+    })
+        .then(() => {
+            const loading = EleMessage.loading({
+                message: "请求中..",
+                plain: true,
+            });
 
-    /** 导出数据 */
-    const exportData = (name) => {
-        const loading = EleMessage.loading({
-            message: '请求中..',
-            plain: true
-        });
-        tableRef.value?.fetch?.(({ where, orders }) => {
-            exportRecord({ ...where, ...orders }, name)
-                .then((res) => {
-                    if (res.data.code === 200) {
-                        EleMessage.success('操作成功,请前往导出记录下载');
-                    }
+            proxy.$http
+                .delete(url)
+                .then(() => {
                     loading.close();
+                    EleMessage.success("操作成功");
+                    reload();
                 })
                 .catch((e) => {
                     loading.close();
                     EleMessage.error(e.message);
                 });
-        });
-    };
-
-    //修改备注
-    const remarksRef = ref(null);
-    function handleRemarks(row) {
-        remarksRef.value?.handleOpen(row);
-    }
-
-    //备注弹窗显示
-    const showOrderId = ref();
-    const remarkPopoverRef = ref(null);
-    function handleShowPopover(row) {
-        nextTick(() => {
-            remarkPopoverRef.value?.getRemarks(row.orderId);
-        });
-
-        if (showOrderId.value !== row.orderId) {
-            showOrderId.value = row.orderId;
-        }
-    }
-
-    //弹窗确认操作
-    function messageBoxConfirm({ message, fetch, toast = false }) {
-        ElMessageBox.confirm(message, '提示', {
-            confirmButtonText: '确定',
-            cancelButtonText: '关闭',
-            type: 'warning'
-        }).then(() => {
-            fetch().then((res) => {
+        })
+        .catch(() => { });
+};
+
+/// 导出数据
+async function exportPage(params, name) {
+    if (!props.pageConfig.exportUrl) return EleMessage.error("未配置导出的URL!");
+    const res = await proxy.$http({
+        url: props.pageConfig.exportUrl,
+        method: "POST",
+        data: toFormData(params),
+        responseType: "blob",
+    });
+    await checkDownloadRes(res);
+    download(
+        res.data,
+        name ? `${name}_${Date.now()}.xlsx` : `post_${Date.now()}.xlsx`
+    );
+}
+
+//导出数据 进导出记录
+function exportRecord(params, name) {
+    if (!props.pageConfig.exportUrl) return EleMessage.error("未配置导出的URL!");
+    return proxy.$http({
+        url: props.pageConfig.exportUrl,
+        method: "POST",
+        data: params,
+    }); // 导出记录
+}
+
+/** 导出数据 */
+const exportData = (name) => {
+    const loading = EleMessage.loading({
+        message: "请求中..",
+        plain: true,
+    });
+    tableRef.value?.fetch?.(({ where, orders }) => {
+        exportRecord({ ...where, ...orders }, name)
+            .then((res) => {
                 if (res.data.code === 200) {
-                    EleMessage.success(toast ? res.data.data : '操作成功');
-                    reload();
-                } else {
-                    EleMessage.error(res.data.msg);
+                    EleMessage.success("操作成功,请前往导出记录下载");
                 }
+                loading.close();
+            })
+            .catch((e) => {
+                loading.close();
+                EleMessage.error(e.message);
             });
-        });
-    }
-
-    //取消订单
-    function handleCancelOrder(row) {
-        const rows = row == null ? selections.value : [row];
-        if (!rows.length) {
-            EleMessage.error('请至少选择一条数据');
-            return;
-        }
-        messageBoxConfirm({
-            message: '是否确认取消订单?',
-            fetch: () =>
-                proxy.$http.post('/order/orderInfo/adminCancel', {
-                    orderIds: rows.map((item) => item.orderId)
-                })
-        });
-    }
-    //申请拦截退出
-    function applyForInterception(row) {
-        messageBoxConfirm({
-            message: '确认拦截?',
-            fetch: () =>
-                proxy.$http.post(`/order/orderInfo/intercept/${row.orderId}`)
-        });
-    }
-    //取消拦截退出
-    function cancelInterception(row) {
-        messageBoxConfirm({
-            message: '确认取消拦截?',
-            fetch: () =>
-                proxy.$http.post(
-                    `/order/orderInfo/interceptBack/${row.orderId}`
-                )
-        });
-    }
-    //退回不良
-    function handleReturnBad(row) {
-        messageBoxConfirm({
-            message: '确认退回不良?',
-            toast: true,
-            fetch: () =>
-                proxy.$http.post(`/order/orderInfo/refund/adminSubmit`, {
-                    orderId: row.orderId
-                })
-        });
-    }
-
-    //物流签收
-    function handleLogisticsSigning(row) {
-        messageBoxConfirm({
-            message: '确认签收?',
-            fetch: () =>
-                proxy.$http.post('/order/orderInfo/adminSigned', {
-                    orderIds: [row.orderId]
-                })
-        });
-    }
-    //快递签收
-    function handleSignDelivery(row) {
-        messageBoxConfirm({
-            message: '确认快递签收?',
-            fetch: () =>
-                proxy.$http.post('/order/orderInfo/adminDeliverySigned', {
-                    orderId: row.orderId
-                })
-        });
-    }
-    //物流揽件
-    function materialPickup(row) {
-        messageBoxConfirm({
-            message: '确认物流揽件?',
-            fetch: () =>
-                proxy.$http.post('/order/orderInfo/adminPickup', {
-                    orderIds: [row.orderId]
-                })
-        });
-    }
-    //申请订单理赔
-    const applyForOrderClaimRef = ref(null);
-    function handleApplyForOrderClaim(row) {
-        applyForOrderClaimRef.value?.handleOpen(row);
-    }
-    //售后补款
-    const afterSalesPaymentRef = ref(null);
-    function handleAfterSalesPayment(row) {
-        afterSalesPaymentRef.value?.handleOpen(row);
-    }
-    //推送短信
-    const sendSMSRef = ref(null);
-    function handleSendSMS(row) {
-        sendSMSRef.value?.handleOpen(row);
-    }
-    //短信记录
-    const orderSmsLogRef = ref(null);
-    function handleSmsLog(row) {
-        orderSmsLogRef.value?.handleOpen(row);
-    }
-
-    //确认收货
-    function handleConfirmReceipt(row) {
-        const rows = row == null ? selections.value : [row];
-        if (!rows.length) {
-            EleMessage.error('请至少选择一条数据');
-            return;
-        }
-        messageBoxConfirm({
-            message: '确认收货?',
-            fetch: () =>
-                proxy.$http.post('/order/orderInfo/adminConfirm', {
-                    orderIds: rows.map((item) => item.orderId)
-                })
-        });
-    }
+    });
+};
+
+//修改备注
+const remarksRef = ref(null);
+function handleRemarks(row) {
+    remarksRef.value?.handleOpen(row);
+}
+
+//备注弹窗显示
+const showOrderId = ref();
+const remarkPopoverRef = ref(null);
+function handleShowPopover(row) {
+    nextTick(() => {
+        remarkPopoverRef.value?.getRemarks(row.orderId);
+    });
 
-    //订单详情
-    const orderDetailRef = ref(null);
-    function toOrderDetail(row) {
-        orderDetailRef.value?.handleOpen(row);
-    }
-    //初审
-    const firstCheckRef = ref(null);
-    function handleFirstCheck(row) {
-        const rows = row == null ? selections.value : [row];
-        if (!rows.length) {
-            EleMessage.error('请至少选择一条数据');
-            return;
-        }
-        let orderIds = rows.map((item) => item.orderId).join(',');
-        firstCheckRef.value?.handleOpen(orderIds);
-    }
-    //修改地址
-    const modifyAddressRef = ref(null);
-    function handleModifyAddress(row) {
-        modifyAddressRef.value?.handleOpen(row);
-    }
-    //订单日志
-    const orderLogRef = ref(null);
-    function openOrderLog(row) {
-        orderLogRef.value?.handleOpen(row.orderId);
-    }
-    //用户标签
-    const userTagRef = ref(null);
-    function openEditUserTag(row) {
-        userTagRef.value?.handleOpen(row);
+    if (showOrderId.value !== row.orderId) {
+        showOrderId.value = row.orderId;
     }
-
-    function handleBatchPayment(row) {
-        const rows = row == null ? selections.value : [row];
-        console.log(row, rows, 'xxxx');
-        if (!rows.length) {
-            EleMessage.error('请至少选择一条数据');
-            return;
-        }
-        messageBoxConfirm({
-            message: '确认支付书款?',
-            fetch: () =>
-                proxy.$http.post('/order/orderInfo/payout', {
-                    orderIds: rows.map((item) => item.orderId)
-                })
+}
+
+//弹窗确认操作
+function messageBoxConfirm({ message, fetch, toast = false }) {
+    ElMessageBox.confirm(message, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "关闭",
+        type: "warning",
+    }).then(() => {
+        fetch().then((res) => {
+            if (res.data.code === 200) {
+                EleMessage.success(toast ? res.data.data : "操作成功");
+                reload();
+            } else {
+                EleMessage.error(res.data.msg);
+            }
         });
+    });
+}
+
+//取消订单
+function handleCancelOrder(row) {
+    const rows = row == null ? selections.value : [row];
+    if (!rows.length) {
+        EleMessage.error("请至少选择一条数据");
+        return;
     }
-
-    //回退状态
-    function fallbackOrder(row) {
-        messageBoxConfirm({
-            message: '确认回退?',
-            fetch: () =>
-                proxy.$http.post(`/order/orderInfo/statusBack/${row.orderId}`)
-        });
+    messageBoxConfirm({
+        message: "是否确认取消订单?",
+        fetch: () =>
+            proxy.$http.post("/order/orderInfo/adminCancel", {
+                orderIds: rows.map((item) => item.orderId),
+            }),
+    });
+}
+//申请拦截退出
+function applyForInterception(row) {
+    messageBoxConfirm({
+        message: "确认拦截?",
+        fetch: () => proxy.$http.post(`/order/orderInfo/intercept/${row.orderId}`),
+    });
+}
+//取消拦截退出
+function cancelInterception(row) {
+    messageBoxConfirm({
+        message: "确认取消拦截?",
+        fetch: () =>
+            proxy.$http.post(`/order/orderInfo/interceptBack/${row.orderId}`),
+    });
+}
+//退回不良
+function handleReturnBad(row) {
+    messageBoxConfirm({
+        message: "确认退回不良?",
+        toast: true,
+        fetch: () =>
+            proxy.$http.post(`/order/orderInfo/refund/adminSubmit`, {
+                orderId: row.orderId,
+            }),
+    });
+}
+
+//物流签收
+function handleLogisticsSigning(row) {
+    messageBoxConfirm({
+        message: "确认签收?",
+        fetch: () =>
+            proxy.$http.post("/order/orderInfo/adminSigned", {
+                orderIds: [row.orderId],
+            }),
+    });
+}
+//快递签收
+function handleSignDelivery(row) {
+    messageBoxConfirm({
+        message: "确认快递签收?",
+        fetch: () =>
+            proxy.$http.post("/order/orderInfo/adminDeliverySigned", {
+                orderId: row.orderId,
+            }),
+    });
+}
+//物流揽件
+function materialPickup(row) {
+    messageBoxConfirm({
+        message: "确认物流揽件?",
+        fetch: () =>
+            proxy.$http.post("/order/orderInfo/adminPickup", {
+                orderIds: [row.orderId],
+            }),
+    });
+}
+//申请订单理赔
+const applyForOrderClaimRef = ref(null);
+function handleApplyForOrderClaim(row) {
+    applyForOrderClaimRef.value?.handleOpen(row);
+}
+//售后补款
+const afterSalesPaymentRef = ref(null);
+function handleAfterSalesPayment(row) {
+    afterSalesPaymentRef.value?.handleOpen(row);
+}
+//推送短信
+const sendSMSRef = ref(null);
+function handleSendSMS(row) {
+    sendSMSRef.value?.handleOpen(row);
+}
+//短信记录
+const orderSmsLogRef = ref(null);
+function handleSmsLog(row) {
+    orderSmsLogRef.value?.handleOpen(row);
+}
+
+//确认收货
+function handleConfirmReceipt(row) {
+    const rows = row == null ? selections.value : [row];
+    if (!rows.length) {
+        EleMessage.error("请至少选择一条数据");
+        return;
     }
-    //审核截图
-    const auditScreenshotRef = ref(null);
-    function handleAuditScreenshot(row) {
-        auditScreenshotRef.value?.handleOpen(row);
+    messageBoxConfirm({
+        message: "确认收货?",
+        fetch: () =>
+            proxy.$http.post("/order/orderInfo/adminConfirm", {
+                orderIds: rows.map((item) => item.orderId),
+            }),
+    });
+}
+
+//订单详情
+const orderDetailRef = ref(null);
+function toOrderDetail(row) {
+    orderDetailRef.value?.handleOpen(row);
+}
+//初审
+const firstCheckRef = ref(null);
+function handleFirstCheck(row) {
+    const rows = row == null ? selections.value : [row];
+    if (!rows.length) {
+        EleMessage.error("请至少选择一条数据");
+        return;
     }
-
-    //申请恢复订单
-    const applyOrderRestoreRef = ref(null);
-    function handleApplyForOrderRestore(row) {
-        applyOrderRestoreRef.value?.handleOpen(row);
+    let orderIds = rows.map((item) => item.orderId).join(",");
+    firstCheckRef.value?.handleOpen(orderIds);
+}
+//修改地址
+const modifyAddressRef = ref(null);
+function handleModifyAddress(row) {
+    modifyAddressRef.value?.handleOpen(row);
+}
+//订单日志
+const orderLogRef = ref(null);
+function openOrderLog(row) {
+    orderLogRef.value?.handleOpen(row.orderId);
+}
+//用户标签
+const userTagRef = ref(null);
+function openEditUserTag(row) {
+    userTagRef.value?.handleOpen(row);
+}
+
+function handleBatchPayment(row) {
+    const rows = row == null ? selections.value : [row];
+    console.log(row, rows, "xxxx");
+    if (!rows.length) {
+        EleMessage.error("请至少选择一条数据");
+        return;
     }
+    messageBoxConfirm({
+        message: "确认支付书款?",
+        fetch: () =>
+            proxy.$http.post("/order/orderInfo/payout", {
+                orderIds: rows.map((item) => item.orderId),
+            }),
+    });
+}
 
-    defineExpose({
-        selections,
-        reload,
-        exportData,
-        operatBatch,
-        handleFirstCheck,
-        handleConfirmReceipt,
-        handleCancelOrder,
-        handleBatchPayment
+//回退状态
+function fallbackOrder(row) {
+    messageBoxConfirm({
+        message: "确认回退?",
+        fetch: () => proxy.$http.post(`/order/orderInfo/statusBack/${row.orderId}`),
     });
+}
+//审核截图
+const auditScreenshotRef = ref(null);
+function handleAuditScreenshot(row) {
+    auditScreenshotRef.value?.handleOpen(row);
+}
+
+//申请恢复订单
+const applyOrderRestoreRef = ref(null);
+function handleApplyForOrderRestore(row) {
+    applyOrderRestoreRef.value?.handleOpen(row);
+}
+
+defineExpose({
+    selections,
+    reload,
+    exportData,
+    operatBatch,
+    handleFirstCheck,
+    handleConfirmReceipt,
+    handleCancelOrder,
+    handleBatchPayment,
+});
 </script>

+ 5 - 2
src/views/recycleOrder/components/order-page.vue

@@ -161,8 +161,11 @@
     };
 
     /** 搜索 */
-    const reload = (where) => {
-        tableRef.value?.reload?.({ page: 1, where });
+    const reload = (where = {}) => {
+        let data = where && where.search ? { page: 1, where } : { where };
+        delete data.where?.search;
+        delete data.where?.isReset;
+        tableRef.value?.reload?.(data);
     };
 
     /** 批量操作 */

+ 26 - 25
src/views/recycleOrder/components/refund-customer.vue

@@ -2,8 +2,7 @@
     <div class="recycle-order-number">
         <div class="common-text">
             <el-text>昵称:</el-text>
-            <el-text
-                >{{ row.userNick }}
+            <el-text>{{ row.userNick }}
                 <el-tag type="success" size="small" v-if="platformType">
                     {{ platformType }}
                 </el-tag>
@@ -12,11 +11,9 @@
         <div class="common-text">
             <el-text>收件人:</el-text>
             <el-text v-if="!row.receiveName">暂无信息</el-text>
-            <el-text v-else
-                >{{ formatName(row.receiveName) }}({{
-                    formatPhone(row.receiveMobile)
-                }})</el-text
-            >
+            <el-text v-else>{{ formatName(row.receiveName) }}({{
+                isScrect ? formatPhone(row.receiveMobile) : row.receiveMobile
+                }})</el-text>
         </div>
         <div class="common-text">
             <el-text>省市区:</el-text>
@@ -30,24 +27,28 @@
 </template>
 
 <script setup>
-    import { formatName, formatPhone } from '@/utils/common';
-    import { computed } from 'vue';
+import { formatName, formatPhone } from '@/utils/common';
+import { computed } from 'vue';
 
-    const props = defineProps({
-        row: {
-            type: Object,
-            default: () => {}
-        },
-        isReturn: {
-            type: Boolean,
-            default: false
-        }
-    });
+const props = defineProps({
+    row: {
+        type: Object,
+        default: () => { }
+    },
+    isReturn: {
+        type: Boolean,
+        default: false
+    },
+    isScrect: {
+        default: true,
+        type: Boolean
+    }
+});
 
-    const platformType = computed(() => {
-        const value = props.row.plat;
-        if (value === 1) return '微信';
-        if (value === 2) return '支付宝';
-        return '';
-    });
+const platformType = computed(() => {
+    const value = props.row.plat;
+    if (value === 1) return '微信';
+    if (value === 2) return '支付宝';
+    return '';
+});
 </script>

+ 117 - 113
src/views/recycleOrder/detail/order-base-info.vue

@@ -1,13 +1,7 @@
 <template>
     <div class="base-info">
-        <ele-data-table
-            ref="tableRef"
-            row-key="userId"
-            :columns="columns"
-            :data="datasource"
-            :tools="false"
-            :pagination="false"
-        >
+        <ele-data-table ref="tableRef" row-key="userId" :columns="columns" :data="datasource" :tools="false"
+            :pagination="false">
             <template #orderTime="{ row }">
                 <div class="common-text">
                     <el-text>建单:</el-text>
@@ -18,24 +12,41 @@
                     <el-text>{{ row.orderTime || '-' }}</el-text>
                 </div>
             </template>
+
+            <template #expectMoney="{ row }"> 
+                <div style="display: flex; align-items: center">
+                    {{ '¥' + row.expectMoney }}
+                </div>
+                <div style="color: #f56c6c" v-if="row.upsellExpectMoney">
+                    {{
+                        '+' + row.upsellExpectMoney
+                    }}
+                </div>
+            </template>
+
+            <template #finalMoney="{ row }">
+                <div style="display: flex; align-items: center">
+                    {{
+                        typeof row.finalMoney == 'number'
+                            ? '¥' + row.finalMoney
+                            : '待核算'
+                    }}
+                </div>
+                <div style="color: #f56c6c" v-if="row.upsellFinalMoney">
+                    {{
+                        '+' + row.upsellFinalMoney
+                    }}
+                </div>
+            </template>
+
             <template #status="{ row }">
-                <el-tag
-                    effect="dark"
-                    :type="row.status < 5 ? 'warning' : 'success'"
-                    >{{ row.status < 5 ? '未发货' : '已发货' }}</el-tag
-                >
-                <el-tag
-                    style="margin-left: 15px"
-                    effect="dark"
-                    :type="row.status < 8 ? 'warning' : 'success'"
-                    >{{ row.status < 8 ? '未收货' : '已收货' }}</el-tag
-                >
-                <el-tag
-                    style="margin-left: 15px"
-                    effect="dark"
-                    :type="row.status != 11 ? 'warning' : 'success'"
-                    >{{ row.status == 11 ? '已支付' : '未支付' }}</el-tag
-                >
+                <el-tag effect="dark" :type="row.status < 5 ? 'warning' : 'success'">{{ row.status < 5 ? '未发货' : '已发货'
+                        }}</el-tag>
+                        <el-tag style="margin-left: 15px" effect="dark"
+                            :type="row.status < 8 ? 'warning' : 'success'">{{ row.status < 8 ? '未收货' : '已收货' }}</el-tag>
+                                <el-tag style="margin-left: 15px" effect="dark"
+                                    :type="row.status != 11 ? 'warning' : 'success'">{{ row.status == 11 ? '已支付' : '未支付'
+                                    }}</el-tag>
             </template>
         </ele-data-table>
         <el-row :gutter="12" style="padding: 16px 10px; padding-bottom: 0">
@@ -60,17 +71,15 @@
             <el-col :span="8">
                 <div class="common-text">
                     <el-text>发件人:</el-text>
-                    <el-text
-                        >{{ formatName(detail.sendName) }}(ID:{{
-                            detail.userId
-                        }})</el-text
-                    >
+                    <el-text>{{ formatName(detail.sendName) }}(ID:{{
+                        detail.userId
+                    }})</el-text>
                 </div>
                 <div class="common-text">
                     <el-text>电 话:</el-text>
                     <el-text v-if="!isShowPhone">{{
                         formatPhone(detail.sendMobile)
-                    }}</el-text>
+                        }}</el-text>
                     <el-text v-else>{{ detail.sendMobile }}</el-text>
                 </div>
                 <div class="common-text">
@@ -85,11 +94,9 @@
             <el-col :span="8">
                 <div class="common-text">
                     <el-text>收货仓库:</el-text>
-                    <el-text
-                        >{{ detail.recipientGodown }}-{{
-                            detail.recipientName
-                        }}</el-text
-                    >
+                    <el-text>{{ detail.recipientGodown }}-{{
+                        detail.recipientName
+                    }}</el-text>
                 </div>
                 <div class="common-text">
                     <el-text>收 件 人:</el-text>
@@ -109,89 +116,86 @@
 </template>
 
 <script setup>
-    import { formatName, formatPhone } from '@/utils/common';
-    import { ref, reactive, watch } from 'vue';
-    import { usePermission } from '@/utils/use-permission';
+import { formatName, formatPhone } from '@/utils/common';
+import { ref, reactive, watch } from 'vue';
+import { usePermission } from '@/utils/use-permission';
 
-    const { hasPermission } = usePermission();
-    const isShowPhone = computed(() => {
-        return hasPermission('recycleOrder:search:viewPhone');
-    });
+const { hasPermission } = usePermission();
+const isShowPhone = computed(() => {
+    return hasPermission('recycleOrder:search:viewPhone');
+});
 
-    const props = defineProps({
-        detail: { type: Object, default: () => ({}) }
-    });
+const props = defineProps({
+    detail: { type: Object, default: () => ({}) }
+});
 
-    import { useDictData } from '@/utils/use-dict-data';
+import { useDictData } from '@/utils/use-dict-data';
 
-    /** 字典数据 */
-    const [expressDicts, orderFormDicts] = useDictData([
-        'final_express',
-        'order_form'
-    ]);
+/** 字典数据 */
+const [expressDicts, orderFormDicts] = useDictData([
+    'final_express',
+    'order_form'
+]);
 
-    const finalExpressText = computed(() => {
-        if (props.detail.finalExpress == '0' || !props.detail.finalExpress) {
-            return '暂无信息';
-        }
-        return (
-            expressDicts.value.find(
-                (d) => d.dictValue == props.detail.finalExpress
-            )?.dictLabel || '暂无信息'
-        );
-    });
-
-    const formatTime = computed(() => {
-        if (!props.detail.schedulePickupStartTime) return '-';
-        return (
-            props.detail.schedulePickupStartTime +
-            '-' +
-            props.detail.schedulePickupEndTime.split(' ')[1]
-        );
-    });
+const finalExpressText = computed(() => {
+    if (props.detail.finalExpress == '0' || !props.detail.finalExpress) {
+        return '暂无信息';
+    }
+    return (
+        expressDicts.value.find(
+            (d) => d.dictValue == props.detail.finalExpress
+        )?.dictLabel || '暂无信息'
+    );
+});
 
-    const datasource = ref([]);
-    watch(
-        () => props.detail,
-        (newVal) => {
-            console.log(newVal, 'newVal');
-            datasource.value = newVal ? [newVal] : [];
-            console.log(datasource.value);
-        },
-        { immediate: true, deep: true }
+const formatTime = computed(() => {
+    if (!props.detail.schedulePickupStartTime) return '-';
+    return (
+        props.detail.schedulePickupStartTime +
+        '-' +
+        props.detail.schedulePickupEndTime.split(' ')[1]
     );
+});
+
+const datasource = ref([]);
+watch(
+    () => props.detail,
+    (newVal) => {
+        console.log(newVal, 'newVal');
+        datasource.value = newVal ? [newVal] : [];
+        console.log(datasource.value);
+    },
+    { immediate: true, deep: true }
+);
 
-    const columns = ref([
-        { label: '订单编号', prop: 'orderId' },
-        {
-            label: '订单来源',
-            prop: 'orderFrom',
-            formatter: (row) =>
-                orderFormDicts.value.find((d) => d.dictValue == row.orderFrom)
-                    ?.dictLabel
-        },
-        { label: '用户', prop: 'userNick' },
-        {
-            label: '预估书款',
-            prop: 'expectMoney',
-            formatter: (row) => '¥' + row.expectMoney
-        },
-        {
-            label: '审核书款',
-            prop: 'finalMoney',
-            formatter: (row) =>
-                typeof row.finalMoney == 'number'
-                    ? '¥' + row.finalMoney
-                    : '待核算'
-        },
-        {
-            label: '快递重量',
-            prop: 'chargeWeight',
-            width: 120,
-            formatter: (row) =>
-                row.chargeWeight ? row.chargeWeight + 'kg' : '-'
-        },
-        { label: '下单时间', prop: 'orderTime', slot: 'orderTime', width: 200 },
-        { label: '交易状态', prop: 'status', slot: 'status', width: 240 }
-    ]);
+const columns = ref([
+    { label: '订单编号', prop: 'orderId' },
+    {
+        label: '订单来源',
+        prop: 'orderFrom',
+        formatter: (row) =>
+            orderFormDicts.value.find((d) => d.dictValue == row.orderFrom)
+                ?.dictLabel
+    },
+    { label: '用户', prop: 'userNick' },
+    {
+        label: '预估书款',
+        prop: 'expectMoney',
+        slot: 'expectMoney',
+    },
+    {
+        label: '审核书款',
+        prop: 'finalMoney',
+        slot: 'finalMoney',
+    },
+    {
+        label: '快递重量',
+        prop: 'chargeWeight',
+        width: 120,
+        formatter: (row) =>
+            row.chargeWeight ? row.chargeWeight + 'kg' : '-'
+    },
+    { label: '下单时间', prop: 'orderTime', slot: 'orderTime', width: 200 },
+    { label: '交易状态', prop: 'status', slot: 'status', width: 240 }
+]);
 </script>

+ 6 - 5
src/views/recycleOrder/needReturned/index.vue

@@ -53,7 +53,7 @@
                     <order-number :row="row" isReturn />
                 </template>
                 <template #customer="{ row }">
-                    <refund-customer :row="row" />
+                    <refund-customer :row="row" :isScrect="false" />
                 </template>
                 <template #amount="{ row }">
                     <div class="common-text flex flex-col">
@@ -227,6 +227,7 @@
                       : '-'
         },
         { label: '是否首单', prop: 'firstOrder', slot: 'isFirstOrder' },
+        { label: '创建时间', prop: 'createTime', width: 120 },
         { label: '备注', prop: 'remarkLabel', slot: 'remarks' },
         {
             columnKey: 'action',
@@ -262,10 +263,10 @@
 
     /** 搜索 */
     const reload = (where) => {
-        tableRef.value?.reload?.({
-            page: 1,
-            where
-        });
+        let data = where && where.search ? { page: 1, where } : { where };
+        delete data.where?.search;
+        delete data.where?.isReset;
+        tableRef.value?.reload?.(data);
     };
 
     //订单详情

+ 1 - 1
src/views/recycleOrder/search/index.vue

@@ -179,7 +179,7 @@
     function openOrderLog(row) {
         console.log(row, orderLogRef.value, 'row');
 
-        orderLogRef.value?.handleOpen(row);
+        orderLogRef.value?.handleOpen(row.orderId);
     }
 
     //用户绑定标签

+ 2 - 2
src/views/recycleService/locationOrder/components/location-order-search.vue

@@ -24,10 +24,10 @@
                 label: '仓库名称',
                 prop: 'godownId',
                 options: godownList.value.map((d) => {
-                    return { label: d.name, value: d.id };
+                    return { label: d.godownName, value: d.id };
                 }),
                 props: {
-                    placeholder: '请选择或输入搜索',
+                    placeholder: '请选择或输入搜索仓库',
                     filterable: true,
                     remote: true,
                     remoteMethod: (query) => {

+ 21 - 20
src/views/recycleService/stockIn/components/stock-in-search.vue

@@ -40,7 +40,7 @@
                 label: '仓库名称',
                 prop: 'godownId',
                 options: godownList.value.map((item) => ({
-                    label: item.name,
+                    label: item.godownName,
                     value: item.id
                 }))
             },
@@ -48,25 +48,26 @@
             { type: 'input', label: '物流单号', prop: 'waybillCode' },
             { type: 'input', label: '订单编号', prop: 'orderId' },
             { type: 'input', label: '入库单号', prop: 'stockCode' },
-            {
-                type: 'select',
-                label: '操作员',
-                prop: 'userId',
-                options: userList.value.map((item) => ({
-                    label: item.userName,
-                    value: item.userId
-                })),
-                props: {
-                    filterable: true,
-                    remote: true,
-                    reserveKeyword: true,
-                    remoteMethod: (query) => {
-                        getUserList(query).then((res) => {
-                            userList.value = res.data.rows;
-                        });
-                    }
-                }
-            },
+            // {
+            //     type: 'select',
+            //     label: '操作员',
+            //     prop: 'userId',
+            //     options: userList.value.map((item) => ({
+            //         label: item.userName,
+            //         value: item.userId
+            //     })),
+            //     props: {
+            //         filterable: true,
+            //         remote: true,
+            //         reserveKeyword: true,
+            //         remoteMethod: (query) => {
+            //             getUserList(query).then((res) => {
+            //                 userList.value = res.data.rows;
+            //             });
+            //         }
+            //     }
+            // },
+            { type: 'input', label: '员工姓名', prop: 'userName' },
             { type: 'input', label: '入库备注', prop: ' remark' },
             {
                 type: 'datetimerange',

+ 1 - 1
src/views/recycleService/stockIn/index.vue

@@ -73,7 +73,7 @@
         },
         { label: '订单数量', prop: 'orderNum', align: 'center', width: 100 },
         { label: '反馈', prop: 'inputRemark', align: 'center', minWidth: 200 },
-        { label: '操作员', prop: 'inputName', align: 'center', width: 120 },
+        { label: '员工姓名', prop: 'inputName', align: 'center', width: 120 },
         {
             columnKey: 'action',
             label: '操作',

+ 2 - 2
src/views/recycleService/stockOff/components/stock-off-add.vue

@@ -64,7 +64,7 @@
             },
             {
                 type: 'select',
-                label: '作业人员',
+                label: '录入员',
                 prop: 'taskUser',
                 options: [],
                 props: {
@@ -75,7 +75,7 @@
                     remoteMethod: (query) => {
                         proxy.$http
                             .get('/system/user/list', {
-                                params: { nickName: query || ' ' }
+                                params: { pageSize: 200 }
                             })
                             .then((res) => {
                                 const users = res.data.rows || [];

+ 14 - 13
src/views/recycleService/stockOff/components/stock-off-detail.vue

@@ -5,21 +5,16 @@
         width="80%"
         :close-on-click-modal="false"
         destroy-on-close
+        :body-style="{ padding: '0px' }"
     >
         <el-tabs v-model="activeTab">
             <el-tab-pane label="任务详情" name="detail">
                 <common-table
                     :pageConfig="detailConfig"
                     :columns="detailColumns"
-                    :tool-bar="false"
+                    :tools="false"
+                    :body-style="{ padding: '10px' }"
                 >
-                    <template #taskStatus="{ row }">
-                        <dict-data
-                            code="task_status"
-                            type="tag"
-                            :model-value="row.taskStatus"
-                        />
-                    </template>
 
                     <template #action="{ row }">
                         <div>
@@ -28,7 +23,7 @@
                                 link
                                 v-permission="'recycleService:stockOff:close'"
                                 @click="handleOperate(row, 3)"
-                                v-if="row.taskStatus == 0"
+                                v-if="row.status == 1"
                             >
                                 关闭
                             </el-button>
@@ -40,7 +35,8 @@
                 <common-table
                     :pageConfig="logConfig"
                     :columns="logColumns"
-                    :tool-bar="false"
+                    :tools="false"
+                    :body-style="{ padding: '10px' }"
                 />
             </el-tab-pane>
         </el-tabs>
@@ -56,6 +52,12 @@
     const activeTab = ref('detail');
     const currentTask = ref(null);
 
+    const statusDicts = ref([
+        { label: '待处理', value: 1 },
+        { label: '已完成', value: 2 },
+        { label: '已关闭', value: 3 }
+    ]);
+
     const detailColumns = ref([
         {
             label: '操作',
@@ -66,12 +68,11 @@
         },
         {
             label: '作业状态',
-            prop: 'taskStatus',
+            prop: 'status',
             align: 'center',
             width: 120,
             formatter: (row) =>
-                userDicts.value.find((d) => d.dictValue == row.taskStatus)
-                    ?.dictLabel
+                statusDicts.value.find((d) => d.value == row.status)?.label
         },
         { label: '仓库', prop: 'godownName', align: 'center', width: 100 },
         { label: '下架库位', prop: 'positionCode', align: 'center' },

+ 10 - 2
src/views/recycleService/stockOff/components/stock-off-search.vue

@@ -77,6 +77,10 @@
 
     /** 搜索 */
     const search = (data) => {
+        if (data.isReset) {
+            handleTimeRangeTypeChange(1);
+            return;
+        }
         emit('search', { ...data });
     };
 
@@ -122,7 +126,11 @@
         initKeys.startTime = start;
         initKeys.endTime = end;
         timeRange.value = [start, end];
-        searchRef.value?.setData(initKeys);
+        searchRef.value?.setData({
+            startTime: start,
+            endTime: end,
+            timeRangeType: val
+        });
 
         search(initKeys);
     };
@@ -173,7 +181,7 @@
             },
             {
                 type: 'input',
-                label: '操作',
+                label: '操作',
                 prop: 'operator',
                 colProps: { span: 6 }
             },

+ 1 - 1
src/views/recycleService/stockOff/index.vue

@@ -123,7 +123,7 @@
             width: 100
         },
         { label: '仓库名称', prop: 'godownName', align: 'center' },
-        { label: '作业编号', prop: 'taskCode', align: 'center', width: 160 },
+        { label: '作业编号', prop: 'taskCode', align: 'center', width: 180 },
         { label: '创建时间', prop: 'createTime', align: 'center', width: 160 },
         { label: '订单总数', prop: 'orderNum', align: 'center', width: 100 },
         { label: '完成时间', prop: 'finishTime', align: 'center', width: 160 },

+ 21 - 20
src/views/recycleService/stockOut/components/stock-out-search.vue

@@ -39,7 +39,7 @@
                 label: '仓库名称',
                 prop: 'godownId',
                 options: godownList.value.map((item) => ({
-                    label: item.name,
+                    label: item.godownName,
                     value: item.id
                 }))
             },
@@ -47,25 +47,26 @@
             { type: 'input', label: '物流单号', prop: 'waybillCode' },
             { type: 'input', label: '订单编号', prop: 'orderId' },
             { type: 'input', label: '出库单号', prop: 'stockCode' },
-            {
-                type: 'select',
-                label: '操作员',
-                prop: 'userId',
-                options: userList.value.map((item) => ({
-                    label: item.userName,
-                    value: item.userId
-                })),
-                props: {
-                    filterable: true,
-                    remote: true,
-                    reserveKeyword: true,
-                    remoteMethod: (query) => {
-                        getUserList(query).then((res) => {
-                            userList.value = res.data.rows;
-                        });
-                    }
-                }
-            },
+            // {
+            //     type: 'select',
+            //     label: '操作员',
+            //     prop: 'userId',
+            //     options: userList.value.map((item) => ({
+            //         label: item.userName,
+            //         value: item.userId
+            //     })),
+            //     props: {
+            //         filterable: true,
+            //         remote: true,
+            //         reserveKeyword: true,
+            //         remoteMethod: (query) => {
+            //             getUserList(query).then((res) => {
+            //                 userList.value = res.data.rows;
+            //             });
+            //         }
+            //     }
+            // },
+            { type: 'input', label: '员工姓名', prop: 'userName' },
             { type: 'input', label: '反馈', prop: 'remark' },
             {
                 type: 'datetimerange',

+ 1 - 1
src/views/recycleService/stockOut/index.vue

@@ -82,7 +82,7 @@
             minWidth: 200,
             formatter: (row) => row.outputRemark || '--'
         },
-        { label: '操作员', prop: 'outputName', align: 'center', width: 120 }
+        { label: '员工姓名', prop: 'outputName', align: 'center', width: 120 }
     ]);
 
     /** 页面组件实例 */

+ 1 - 1
src/views/riskControl/restrictLog/components/restrict-history.vue

@@ -46,7 +46,7 @@
     /** 表格列配置 */
     const columns = ref([
         { label: '限制时间', prop: 'createTime', align: 'center', width: 180 },
-        { label: '限制类型', prop: 'limitType', align: 'center' },
+        { label: '限制类型', prop: 'limitTypeDesc', align: 'center' },
         { label: '操作员', prop: 'createName', align: 'center', width: 120 }
     ]);
 

+ 6 - 6
src/views/statistic/after-sales/components/page-search.vue

@@ -27,9 +27,10 @@
                     format: 'YYYY-MM-DD',
                     valueFormat: 'YYYY-MM-DD',
                     onChange: (value) => {
-                        initKeys.statisticStart = value ? value[0] : '';
-                        initKeys.statisticEnd = value ? value[1] : '';
-                        searchRef.value?.setData(initKeys);
+                        searchRef.value?.setData({
+                            statDateStart: value ? value[0] : '',
+                            statDateEnd: value ? value[1] : ''
+                        });
                     }
                 },
                 colProps: {
@@ -40,9 +41,8 @@
     });
 
     const initKeys = reactive({
-        statisticStart: '',
-        statisticEnd: '',
-        time: []
+        statDateStart: '',
+        statDateEnd: '',
     });
 
     const searchRef = ref(null);

+ 7 - 6
src/views/statistic/arrivalSign/components/page-search.vue

@@ -34,9 +34,10 @@
                     format: 'YYYY-MM-DD',
                     valueFormat: 'YYYY-MM-DD',
                     onChange: (value) => {
-                        initKeys.statistateStart = value ? value[0] : '';
-                        initKeys.statistateEnd = value ? value[1] : '';
-                        searchRef.value?.setData(initKeys);
+                        searchRef.value?.setData({
+                            statDateStart: value ? value[0] : '',
+                            statDateEnd: value ? value[1] : ''
+                        });
                     }
                 },
                 colProps: {
@@ -47,9 +48,9 @@
     });
 
     const initKeys = reactive({
-        statistateStart: '',
-        statistateEnd: '',
-        signUserId: ''
+        statDateStart: '',
+        statDateEnd: '',
+        signUserName: ''
     });
 
     function getStoreList(name = '') {

+ 6 - 6
src/views/statistic/audit/components/page-search.vue

@@ -12,7 +12,7 @@
 </template>
 
 <script setup>
-    import { reactive, ref, defineEmits } from 'vue';
+    import { reactive, ref, defineEmits, computed } from 'vue';
     import ProSearch from '@/components/CommonPage/ProSearch2.vue';
 
     const emit = defineEmits(['search']);
@@ -26,15 +26,16 @@
             },
             {
                 type: 'daterange',
-                label: '审核日期',
+                label: ' ',
                 prop: 'time',
                 props: {
                     format: 'YYYY-MM-DD',
                     valueFormat: 'YYYY-MM-DD',
                     onChange: (value) => {
-                        initKeys.statDateStart = value ? value[0] : '';
-                        initKeys.statDateEnd = value ? value[1] : '';
-                        searchRef.value?.setData(initKeys);
+                        searchRef.value?.setData({
+                            statDateStart: value ? value[0] : '',
+                            statDateEnd: value ? value[1] : ''
+                        });
                     }
                 },
                 colProps: {
@@ -48,7 +49,6 @@
         statDateStart: '',
         statDateEnd: '',
         userName: '',
-        time: []
     });
 
     const searchRef = ref(null);

+ 5 - 4
src/views/statistic/defect/components/page-search.vue

@@ -48,9 +48,10 @@
                     format: 'YYYY-MM-DD',
                     valueFormat: 'YYYY-MM-DD',
                     onChange: (value) => {
-                        initKeys.statDateStart = value ? value[0] : '';
-                        initKeys.statDateEnd = value ? value[1] : '';
-                        searchRef.value?.setData(initKeys);
+                        searchRef.value?.setData({
+                            statDateStart: value ? value[0] : '',
+                            statDateEnd: value ? value[1] : ''
+                        });
                     }
                 },
                 colProps: {
@@ -77,7 +78,7 @@
     /** 搜索 */
     const search = (data) => {
         const searchParams = {
-            godownId: data.godownId || 0,
+            godownId: data.godownId,
             statDateStart: data.statDateStart || initKeys.statDateStart,
             statDateEnd: data.statDateEnd || initKeys.statDateEnd
         };

+ 36 - 46
src/views/statistic/defect/index.vue

@@ -1,22 +1,12 @@
 <template>
     <ele-page flex-table>
         <page-search @search="reload" />
-        <common-table
-            ref="pageRef"
-            :pageConfig="pageConfig"
-            :columns="columns"
-            :tools="false"
-            show-summary
-            :flex-table="false"
-        >
+        <common-table ref="pageRef" :pageConfig="pageConfig" :columns="columns" :tools="false" show-summary
+            :flex-table="false">
             <template #toolbar="{ row }">
                 <div>
-                    <el-button
-                        type="success"
-                        plain
-                        v-permission="'statistic:defect:export'"
-                        @click="handleExportExcel(row)"
-                    >
+                    <el-button type="success" plain v-permission="'statistic:defect:export'"
+                        @click="handleExportExcel(row)">
                         导出EXCEL
                     </el-button>
                 </div>
@@ -26,42 +16,42 @@
 </template>
 
 <script setup>
-    import { ref, reactive } from 'vue';
-    import CommonTable from '@/components/CommonPage/CommonTable.vue';
-    import pageSearch from './components/page-search.vue';
+import { ref, reactive } from 'vue';
+import CommonTable from '@/components/CommonPage/CommonTable.vue';
+import pageSearch from './components/page-search.vue';
 
-    defineOptions({ name: 'StatisticDefect' });
+defineOptions({ name: 'StatisticDefect' });
 
-    /** 表格列配置 */
-    const columns = ref([
-        { type: 'index', label: '#', align: 'center', width: 80 },
-        { label: '地区', prop: 'area', align: 'center' },
-        { label: '收货仓库', prop: 'godownName', align: 'center' },
-        {
-            label: '不良率',
-            prop: 'badRatio',
-            align: 'center'
-        },
-        { label: '统计日期', prop: 'statDate', align: 'center' }
-    ]);
+/** 表格列配置 */
+const columns = ref([
+    { type: 'index', label: '#', align: 'center', width: 80 },
+    { label: '地区', prop: 'area', align: 'center' },
+    { label: '收货仓库', prop: 'godownName', align: 'center' },
+    {
+        label: '不良率(%)',
+        prop: 'badRatio',
+        align: 'center',
+    },
+    { label: '统计日期', prop: 'statDate', align: 'center' }
+]);
 
-    /** 页面组件实例 */
-    const pageRef = ref(null);
+/** 页面组件实例 */
+const pageRef = ref(null);
 
-    const pageConfig = reactive({
-        pageUrl: '/order/ordercheck/stat/badRationStat',
-        exportUrl: '/order/ordercheck/stat/badRationStatExport',
-        fileName: '不良统计',
-        cacheKey: 'statisticDefectTable'
-    });
+const pageConfig = reactive({
+    pageUrl: '/order/ordercheck/stat/badRationStat',
+    exportUrl: '/order/ordercheck/stat/badRationStatExport',
+    fileName: '不良统计',
+    cacheKey: 'statisticDefectTable'
+});
 
-    //刷新表格
-    function reload(where) {
-        pageRef.value?.reload(where);
-    }
+//刷新表格
+function reload(where) {
+    pageRef.value?.reload(where);
+}
 
-    //导出excel
-    function handleExportExcel() {
-        pageRef.value?.exportData('不良统计');
-    }
+//导出excel
+function handleExportExcel() {
+    pageRef.value?.exportData('不良统计');
+}
 </script>

+ 5 - 4
src/views/statistic/entry/components/page-search.vue

@@ -23,7 +23,7 @@
         return [
             {
                 type: 'input',
-                label: '审核员',
+                label: '录入员',
                 prop: 'sysUserName'
             },
             {
@@ -34,9 +34,10 @@
                     format: 'YYYY-MM-DD',
                     valueFormat: 'YYYY-MM-DD',
                     onChange: (value) => {
-                        initKeys.startDate = value ? value[0] : '';
-                        initKeys.endDate = value ? value[1] : '';
-                        searchRef.value?.setData(initKeys);
+                        searchRef.value?.setData({
+                            startDate: value ? value[0] : '',
+                            endDate: value ? value[1] : ''
+                        });
                     }
                 },
                 colProps: {

+ 7 - 6
src/views/statistic/inspection/components/page-search.vue

@@ -23,7 +23,7 @@
         return [
             {
                 type: 'input',
-                label: '操作员',
+                label: '员工姓名',
                 prop: 'signUserName'
             },
             {
@@ -34,9 +34,10 @@
                     format: 'YYYY-MM-DD',
                     valueFormat: 'YYYY-MM-DD',
                     onChange: (value) => {
-                        initKeys.statistateStart = value ? value[0] : '';
-                        initKeys.statistateEnd = value ? value[1] : '';
-                        searchRef.value?.setData(initKeys);
+                        searchRef.value?.setData({
+                            statDateStart: value ? value[0] : '',
+                            statDateEnd: value ? value[1] : ''
+                        });
                     }
                 },
                 colProps: {
@@ -47,8 +48,8 @@
     });
 
     const initKeys = reactive({
-        statistateStart: '',
-        statistateEnd: '',
+        statDateStart: '',
+        statDateEnd: '',
         signUserName: ''
     });
 

+ 1 - 1
src/views/statistic/overview/index.vue

@@ -286,7 +286,7 @@
         { value: 0, name: '≥2折', key: 'discount2' },
         { value: 0, name: '2<至≥1', key: 'discount12' },
         { value: 0, name: '1<至≥0.5', key: 'discount051' },
-        { value: 0, name: '0.5', key: 'discount05' }
+        { value: 0, name: '<0.5', key: 'discount05' }
     ]);
 
     // 组织审核品相比例分析数据

+ 4 - 3
src/views/statistic/recycleOrder/components/page-search.vue

@@ -28,9 +28,10 @@
                     format: 'YYYY-MM-DD',
                     valueFormat: 'YYYY-MM-DD',
                     onChange: (value) => {
-                        initKeys.statisticDateStart = value ? value[0] : '';
-                        initKeys.statisticDateEnd = value ? value[1] : '';
-                        searchRef.value?.setData(initKeys);
+                        searchRef.value?.setData({
+                            statisticDateStart: value ? value[0] : '',
+                            statisticDateEnd: value ? value[1] : ''
+                        });
                     }
                 },
                 colProps: {

+ 5 - 4
src/views/statistic/unpacking/components/page-search.vue

@@ -23,7 +23,7 @@
         return [
             {
                 type: 'input',
-                label: '拆包员',
+                label: '员工姓名',
                 prop: 'signUserName'
             },
             {
@@ -34,9 +34,10 @@
                     format: 'YYYY-MM-DD',
                     valueFormat: 'YYYY-MM-DD',
                     onChange: (value) => {
-                        initKeys.statDateStart = value ? value[0] : '';
-                        initKeys.statDateEnd = value ? value[1] : '';
-                        searchRef.value?.setData(initKeys);
+                        searchRef.value?.setData({
+                            statDateStart: value ? value[0] : '',
+                            statDateEnd: value ? value[1] : ''
+                        });
                     }
                 },
                 colProps: {

+ 4 - 3
src/views/statistic/weight/components/page-search.vue

@@ -37,9 +37,10 @@
                     format: 'YYYY-MM-DD',
                     valueFormat: 'YYYY-MM-DD',
                     onChange: (value) => {
-                        initKeys.createTimeStart = value ? value[0] : '';
-                        initKeys.createTimeEnd = value ? value[1] : '';
-                        searchRef.value?.setData(initKeys);
+                        searchRef.value?.setData({
+                            createTimeStart: value ? value[0] : '',
+                            createTimeEnd: value ? value[1] : ''
+                        });
                     }
                 },
                 colProps: {

+ 0 - 1
src/views/statistic/weight/index.vue

@@ -6,7 +6,6 @@
             :pageConfig="pageConfig"
             :columns="columns"
             :tools="false"
-            show-summary
             :flex-table="false"
         >
             <template #toolbar="{ row }">

+ 1 - 1
src/views/system/user/components/user-edit.vue

@@ -16,7 +16,7 @@
         >
             <el-row :gutter="16">
                 <el-col :sm="12" :xs="24">
-                    <el-form-item label="用户昵称" prop="nickName">
+                    <el-form-item label="员工姓名" prop="nickName">
                         <el-input
                             clearable
                             :maxlength="30"

+ 1 - 1
src/views/system/user/components/user-list.vue

@@ -185,7 +185,7 @@
             },
             {
                 prop: 'nickName',
-                label: '用户昵称',
+                label: '员工姓名',
                 align: 'center',
                 minWidth: 110
             },