wujianwei
2026-04-03 37b8d2897e68c407631ebc7acf0695ac2a16034f
Merge remote-tracking branch 'origin/yagwly_fa_master' into yagwly_fa_master
9个文件已修改
482 ■■■■■ 已修改文件
ui/admin-ui3/src/api/tms/tmsApBill.ts 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/api/tms/tmsArBill.ts 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/views/cwgl/returnLog/index.vue 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/views/cwgl/schedulingEngine/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/views/tms/generationCost/index.vue 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/views/tms/tmsApBill/index.vue 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/views/tms/tmsArBill/index.vue 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue 195 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/views/tms/tmsReceivableFee/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/api/tms/tmsApBill.ts
@@ -85,3 +85,12 @@
        download('/tms/tmsApBill/export', query);
    })
}
/**
 * 手动推送
 */
export const manualPushTmsApBill: requestType = (id) => {
    return request({
        url: '/tms/tmsApBill/manualPush/' + id,
        method: 'post',
    })
}
ui/admin-ui3/src/api/tms/tmsArBill.ts
@@ -101,3 +101,13 @@
}
/**
 * 手动推送
 */
export const manualPushTmsArBill: requestType = (id) => {
    return request({
        url: '/tms/tmsArBill/manualPush/' + id,
        method: 'post',
    })
}
ui/admin-ui3/src/views/cwgl/returnLog/index.vue
@@ -3,8 +3,8 @@
        <avue-crud :option="option" :table-loading="pageF.loading" :data="tableData" :page="page"
            :permission="permissionList" :before-open="beforeOpen" v-model="form" ref="crudRef" @row-update="rowUpdate"
            @row-save="rowSave" @refresh-change="refreshChange" @row-del="rowDel" @search-change="searchChange"
            @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange" v-model:search="queryParams"
            @size-change="sizeChange" @on-load="onLoad">
            @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
            v-model:search="queryParams" @size-change="sizeChange" @on-load="onLoad">
            <!-- <template #menu-left>
        <el-button type="success" icon="Edit" :disabled="pageF.single" v-hasPermi="['cwgl:requestLog:edit']"
          @click="handleUpdate">修改
@@ -145,13 +145,53 @@
        handleSelectionChangeFunc: (selection: any) => {
            selectionList.value = selection;
        },
        getBeginListFunc: (params = {}) => {
            let newParams = { ...params };
        // getBeginListFunc: (params = {}) => {
        //     let newParams = { ...params };
        //     newParams.type = 1;
        //     newParams = proxy.addDateRangeNew(newParams, newParams?.reqTimeArray, 'reqTime') || [];
        //     delete newParams.reqTimeArray;
        //     return newParams
        // }
         getBeginListFunc: (params = {}) => {
            // 1. 使用浅拷贝,不影响原始查询对象
            // 关键点:从原始 queryParams.value 取值,确保分页时依然能拿到数组
            let newParams = { ...queryParams.value, ...params };
            newParams.type = 1;
            newParams = proxy.addDateRangeNew(newParams, newParams?.reqTimeArray, 'reqTime') || [];
            delete newParams.reqTimeArray;
            return newParams
        }
            // 2. 定义日期字段映射 (数组名 : 接口需要的前缀)
            const dateMap = {
                reqTimeArray: 'reqTime',
            };
            // 3. 遍历处理日期
            Object.keys(dateMap).forEach(arrayKey => {
                const prefix = dateMap[arrayKey];
                const range = newParams[arrayKey];
                if (Array.isArray(range) && range.length === 2) {
                    // 赋值接口需要的 Begin 和 End
                    newParams[`${prefix}Begin`] = range[0];
                    newParams[`${prefix}End`] = range[1];
                }
                // 只在给接口的参数中删除数组,不影响页面显示的 queryParams
                delete newParams[arrayKey];
            });
            // 4. 清洗参数:过滤空值
            const finalParams = {};
            Object.keys(newParams).forEach(key => {
                const val = newParams[key];
                if (val !== '' && val !== null && val !== undefined) {
                    finalParams[key] = val;
                }
            });
            console.log('发送给接口的最终参数:', finalParams);
            // 【核心修改】:直接返回,不要赋值给 queryParams.value
            return finalParams;
        },
    })
ui/admin-ui3/src/views/cwgl/schedulingEngine/index.vue
@@ -1715,22 +1715,22 @@
    },
    updateTimeRange: {
      label: '更新时间', display: false, search: true, searchRange: true, type: 'date',
      format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
      format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
      valueFormat: 'YYYY-MM-DD',
    },
    confirmTimeRange: {
      label: '确认时间', display: false, search: true, searchRange: true, type: 'date',
      format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
      format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
      valueFormat: 'YYYY-MM-DD',
    },
    okTimeRange: {
      label: '完成时间', display: false, search: true, searchRange: true, type: 'date',
      format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
      format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
      valueFormat: 'YYYY-MM-DD',
    },
    orderTimeRange: {
      label: '下单时间', display: false, search: true, searchRange: true, type: 'date',
      format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
      format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
      valueFormat: 'YYYY-MM-DD',
    },
ui/admin-ui3/src/views/tms/generationCost/index.vue
@@ -114,17 +114,18 @@
        </avue-form>
        <avue-crud :option="boxTableOption" :data="boxTableData" @selection-change="boxSelectionChange">
          <template #menu-left>
            <el-button type="danger" plain icon="Delete" :disabled="!(boxSelectionList.length === 1 && boxSelectionList[0]?.status === 0)"
            <el-button type="danger" plain icon="Delete"
              :disabled="!(boxSelectionList.length === 1 && boxSelectionList[0]?.status === 0)"
              @click="handleBatchBoxDel">
              作废
            </el-button>
          </template>
          <template #isYF="{ row }">
            <el-checkbox v-model="row.isYF"   :disabled="row.status == 1"  :true-value="1" :false-value="0"
            <el-checkbox v-model="row.isYF" :disabled="row.status == 1" :true-value="1" :false-value="0"
              @change="(e: number) => isYFChange(e, row)"></el-checkbox>
          </template>
          <template #yfServiceProviderId="{ row }">
            <el-select   :disabled="row.status == 1" v-model="row.yfServiceProviderIdType" placeholder="请选择服务商"
            <el-select :disabled="row.status == 1" v-model="row.yfServiceProviderIdType" placeholder="请选择服务商"
              @change="(e: any) => ysServiceProviderChange(e, row)" :filterable="true">
              <el-option v-for="item in serviceProviderList"
                :key="item.serviceProviderId + '_' + item.serviceProviderType" :label="item.serviceProviderName"
@@ -132,10 +133,11 @@
            </el-select>
          </template>
          <template #yfPrice="{ row }">
            <el-input   :disabled="row.status == 1" v-model="row.yfPrice" :min="1" type="number" placeholder="请输入金额"></el-input>
            <el-input :disabled="row.status == 1" v-model="row.yfPrice" :min="1" type="number"
              placeholder="请输入金额"></el-input>
          </template>
          <template #yfCurrency="{ row }">
            <el-radio-group v-model="row.yfCurrency"   :disabled="row.status == 1" >
            <el-radio-group v-model="row.yfCurrency" :disabled="row.status == 1">
              <el-radio v-for="dict in sys_currency" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
            </el-radio-group>
          </template>
@@ -227,7 +229,7 @@
  updateTmsDispatchOrder,
  generateTmsDispatchOrder, initGenerate, initYSGenerate,
  ysGenerateTmsDispatchOrder, initYFGenerate, yfGenerateTmsDispatchOrder,
  getServiceProvider, checkCloseOrder, closeOrder,tmsFinanceDetail
  getServiceProvider, checkCloseOrder, closeOrder, tmsFinanceDetail
} from "@/api/tms/tmsDispatchOrder";
import useCurrentInstance from "@/utils/useCurrentInstance";
import { computed, onMounted, reactive, ref, toRefs, watch, getCurrentInstance, nextTick } from "vue";
@@ -900,7 +902,7 @@
const financeTableOption = ref({
  menu: false,
  addBtn: false,
  header: true,
  header: true,
  selection: true,
  title: '历史垫付费用',
  column: {
@@ -973,7 +975,7 @@
      label: '应付币制',
      display: true,
    },
     status: {
    status: {
      label: '状态',
      display: true,
      type: 'select', dicUrl: '/system/dict/data/type/sys_cancel_word', dataType: 'string',
@@ -1221,50 +1223,48 @@
    console.log(pageF.single)
  },
  getBeginListFunc: (params = {}) => {
    // 1. 日期转换
    let newParams = <any>{ ...params };
    if (newParams) {
      // 1. 定义日期字段映射 (数组名 : 接口需要的前缀)
      // 这样写的好处是:如果你有多个日期,直接在这里添加一行即可
      const dateMap = {
        createTimeRange: 'createTime',
        updateTimeRange: 'updateTime',
        confirmTimeRange: 'confirmTime',
        okTimeRange: 'okTime',
    // 1. 使用浅拷贝,不影响原始查询对象
    // 关键点:从原始 queryParams.value 取值,确保分页时依然能拿到数组
    let newParams = { ...queryParams.value, ...params };
      };
    // 2. 定义日期字段映射 (数组名 : 接口需要的前缀)
    const dateMap = {
      createTimeRange: 'createTime',
      updateTimeRange: 'updateTime',
      confirmTimeRange: 'confirmTime',
      okTimeRange: 'okTime',
    };
      // 2. 遍历处理日期
      Object.keys(dateMap).forEach(arrayKey => {
        const prefix = dateMap[arrayKey];
        const range = newParams[arrayKey];
    // 3. 遍历处理日期
    Object.keys(dateMap).forEach(arrayKey => {
      const prefix = dateMap[arrayKey];
      const range = newParams[arrayKey];
        if (Array.isArray(range) && range.length > 0) {
          // 赋值 Begin 和 End
          newParams[`${prefix}Begin`] = range[0];
          newParams[`${prefix}End`] = range[1];
        }
      if (Array.isArray(range) && range.length === 2) {
        // 赋值接口需要的 Begin 和 End
        newParams[`${prefix}Begin`] = range[0];
        newParams[`${prefix}End`] = range[1];
      }
        // 【核心改动】:无论是否有值,处理完后都把原始的 Array 字段删掉
        // 这样请求里就不会出现 confirmTimeRangeArray: [...]
        delete newParams[arrayKey];
      });
      // 只在给接口的参数中删除数组,不影响页面显示的 queryParams
      delete newParams[arrayKey];
    });
      // 3. 通用清洗:删除所有空字符串、null 或 undefined 的其他字段
      Object.keys(newParams).forEach(key => {
        const val = newParams[key];
        if (val === '' || val === null || val === undefined) {
          delete newParams[key];
        }
      });
    // 4. 清洗参数:过滤空值
    const finalParams = {};
    Object.keys(newParams).forEach(key => {
      const val = newParams[key];
      if (val !== '' && val !== null && val !== undefined) {
        finalParams[key] = val;
      }
    });
    } else {
      newParams = {};
    }
    console.log('发送给接口的最终参数:', finalParams);
    return newParams;
    // 【核心修改】:直接返回,不要赋值给 queryParams.value
    return finalParams;
  },
})
@@ -1705,7 +1705,7 @@
    ElMessage.warning('请选择要作废的费用明细');
    return;
  }
  ElMessageBox.confirm(`确认要作废选中的 ${boxSelectionList.value.length} 条费用明细吗?`, '警告', {
    confirmButtonText: '确定',
    cancelButtonText: '取消',
@@ -1714,15 +1714,15 @@
    // 从 boxTableData 中移除选中的项
    // const ids = boxSelectionList.value.map((item: any) => item.id).join(',');
    let data = {
      id:boxSelectionList.value[0].id,
      status:1
      id: boxSelectionList.value[0].id,
      status: 1
    }
      tmsFinanceDetail(data).then(res => {
        ElMessage.success('作废成功');
        getTab2Data(); // 刷新数据
      }).catch(err => {
        ElMessage.error('作废失败');
      });
    tmsFinanceDetail(data).then(res => {
      ElMessage.success('作废成功');
      getTab2Data(); // 刷新数据
    }).catch(err => {
      ElMessage.error('作废失败');
    });
    // ElMessage.success('作废成功');
    // boxSelectionList.value = []; // 清空选择
  }).catch(() => {
ui/admin-ui3/src/views/tms/tmsApBill/index.vue
@@ -46,9 +46,12 @@
        </el-button>
      </template>
      <template #menu="{row}">
        <el-link size="small" type="primary" v-if="row.status != 2"
        <!-- <el-link size="small" type="primary" v-if="row.status != 2"
                 @click="handleJs(row)" class="link-btn" :underline="false"
                 icon="el-icon-tickets">结算
        </el-link> -->
          <el-link size="small" type="primary" v-if="row.pushStatus == '3' || row.pushStatus == '4'"
          @click="handleManualPush(row)" class="link-btn" underline="never" icon="el-icon-upload">手动推送
        </el-link>
        <el-link size="small" type="primary"  v-if="row.status == 0"
                 @click="handleEdit(row)" class="link-btn" :underline="false"
@@ -151,7 +154,7 @@
  exportTmsApBill,
  getTmsApBill,
  listTmsApBill,
  updateTmsApBill
  updateTmsApBill,manualPushTmsApBill
} from "@/api/tms/tmsApBill";
import useCurrentInstance from "@/utils/useCurrentInstance";
import {computed, reactive, ref, toRefs} from "vue";
@@ -212,12 +215,15 @@
    billName: {
      label: '账单名称',
      hide: false,
      search: true,minWidth:200,
      search: true,minWidth:220,
      showOverflowTooltip: true
    },
    serviceProviderName: {
      label: '供应商名称',
      hide: false,
      search: true,minWidth:200,
      search: true,minWidth:220,
      showOverflowTooltip: true
    },
    dispatchCount: {
      label: '调度单数量',
@@ -244,7 +250,11 @@
      hide: false,
      search: false,minWidth:120,
    },
    pushTime: {
      label: '推送时间', display: false,  searchRange: true, type: 'date',
      format: 'YYYY-MM-DD', hide: false, searchSpan: 6, minWidth: 150,
      valueFormat: 'YYYY-MM-DD',
    },
    invoiceStatus: {
      label: '开票状态',minWidth:120,fixed:'right',
      type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/invoice_status',
@@ -258,8 +268,15 @@
      hide: false,
      search: true,
    },
  pushStatus: {
      label: '推送状态',
      minWidth: 120,
      type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_push_status',
      hide: false,
      search: true,
      fixed: 'right'
    }
  }
})
@@ -446,4 +463,19 @@
    })
  });
}
const handleManualPush = (row: any) => {
  ElMessageBox.confirm(`确定要将账单【${row.billName}】手动推送到财务系统吗?`, '系统提示', {
    confirmButtonText: '确定',
    cancelButtonText: '取消',
    type: 'info'
  }).then(() => {
    // 调用推送接口
    return manualPushTmsApBill(row.id);
  }).then((res) => {
    proxy.$message.success(res.msg);
    onLoad(page.value); // 刷新列表
  }).catch(() => {
    // 取消操作
  });
}
</script>
ui/admin-ui3/src/views/tms/tmsArBill/index.vue
@@ -38,8 +38,11 @@
        <el-link size="small" type="primary" v-if="row.status != 2" @click="handleJs(row)" class="link-btn"
          underline="never" icon="el-icon-tickets">结算
        </el-link>
        <el-link size="small" type="primary"  @click="handleDerive(row)" class="link-btn"
          underline="never" icon="Download">导出
        <el-link size="small" type="primary" v-if="row.pushStatus == '3' || row.pushStatus == '4'"
          @click="handleManualPush(row)" class="link-btn" underline="never" icon="el-icon-upload">手动推送
        </el-link>
        <el-link size="small" type="primary" @click="handleDerive(row)" class="link-btn" underline="never"
          icon="Download">导出
        </el-link>
        <el-link size="small" type="primary" @click="handleEdit(row)" class="link-btn" underline="never"
          icon="el-icon-edit">修改
@@ -78,7 +81,8 @@
          </div>
          <div v-else>{{ form.deductionAmount }}</div>
        </el-descriptions-item>
        <el-descriptions-item label="实际结算金额" v-if="opt == 'edit'">{{ form.actualSettlementAmount }}</el-descriptions-item>
        <el-descriptions-item label="实际结算金额" v-if="opt == 'edit'">{{ form.actualSettlementAmount
          }}</el-descriptions-item>
        <el-descriptions-item label="减免原因" v-if="opt == 'edit'">
          <div v-if="opt === 'edit'">
            <el-input v-model="form.reasonReduction" placeholder="请输入减免原因" />
@@ -87,7 +91,7 @@
        </el-descriptions-item>
        <el-descriptions-item label="已结算金额" v-if="opt == 'js'">{{ form.settledAmount }}</el-descriptions-item>
        <el-descriptions-item label="待结算金额" v-if="opt == 'js'">{{ Number(form.settleAmount) -
          Number(form.settledAmount)}}</el-descriptions-item>
          Number(form.settledAmount) }}</el-descriptions-item>
      </el-descriptions>
      <h3>关联明细</h3>
      <avue-crud :option="YSGenerateTableOption" ref="itemsTableRef" :data="form.items">
@@ -135,7 +139,7 @@
  getTmsArBill,
  listTmsArBill,
  updateTmsArBill, cancelArBill,
  exportArBillFormat
  exportArBillFormat,manualPushTmsArBill
} from "@/api/tms/tmsArBill";
import useCurrentInstance from "@/utils/useCurrentInstance";
import { computed, reactive, ref, toRefs } from "vue";
@@ -199,19 +203,21 @@
    },
    billName: {
      label: '账单名称',
      addDisplay: true, minWidth: 200,
      addDisplay: true, minWidth: 220,
      editDisplay: true,
      viewDisplay: true,
      hide: false,
      search: true,
      showOverflowTooltip: true
    },
    customerName: {
      label: '客户名称',
      addDisplay: true, minWidth: 200,
      addDisplay: true, minWidth: 220,
      editDisplay: true,
      viewDisplay: true,
      hide: false,
      search: true,
      showOverflowTooltip: true
    },
    dispatchCount: {
      label: '调度单数量',
@@ -248,14 +254,19 @@
      viewDisplay: true,
      hide: false,
    },
    pushTime: {
      label: '推送时间', display: false, search: true, searchRange: true, type: 'date',
      format: 'YYYY-MM-DD', hide: false, searchSpan: 6, minWidth: 150,
      valueFormat: 'YYYY-MM-DD',
    },
    invoiceStatus: {
      label: '开票状态',
      addDisplay: true,
      editDisplay: true, minWidth: 120,
      type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/invoice_status',
      hide: false,
      search: true,
      fixed: 'right'
    },
    status: {
      label: '状态',
@@ -263,9 +274,17 @@
      editDisplay: true,
      viewDisplay: true,
      type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/ar_bill_status',
      hide: false,
      search: true,
      fixed: 'right'
    },
    pushStatus: {
      label: '推送状态',
      minWidth: 120,
      type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_push_status',
      hide: false,
      search: true,
      fixed: 'right'
    }
  }
})
@@ -483,5 +502,19 @@
  };
  download('tms/tmsArBill/exportArBillFormat', downloadParams);
};
const handleManualPush = (row: any) => {
  ElMessageBox.confirm(`确定要将账单【${row.billName}】手动推送到财务系统吗?`, '系统提示', {
    confirmButtonText: '确定',
    cancelButtonText: '取消',
    type: 'info'
  }).then(() => {
    // 调用推送接口
    return manualPushTmsArBill(row.id);
  }).then((res) => {
    proxy.$message.success(res.msg);
    onLoad(page.value); // 刷新列表
  }).catch(() => {
    // 取消操作
  });
}
</script>
ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
@@ -385,7 +385,8 @@
        </avue-crud>
        <avue-crud :option="boxTableOption" :data="boxTableData" @selection-change="boxSelectionChange">
          <template #menu-left>
            <el-button type="danger" plain icon="Delete" :disabled="!(boxSelectionList.length === 1 && boxSelectionList[0]?.status === 0)"
            <el-button type="danger" plain icon="Delete"
              :disabled="!(boxSelectionList.length === 1 && boxSelectionList[0]?.status === 0)"
              @click="handleBatchBoxDel">
              作废
            </el-button>
@@ -671,7 +672,7 @@
const { proxy } = useCurrentInstance(
);
const { fee_type, sys_currency,vehicle_type } = proxy.useDict('fee_type', 'sys_currency','vehicle_type')
const { fee_type, sys_currency, vehicle_type } = proxy.useDict('fee_type', 'sys_currency', 'vehicle_type')
const crudRef = ref();
const boxFormRef = ref();
const goodsCrudRef = ref();
@@ -1469,7 +1470,7 @@
        },
        vehicleId: {
          label: '车牌号1', dataType: 'string',
          label: '车牌号', dataType: 'string',
          display: true,
          rules: [
            {
@@ -1862,12 +1863,12 @@
      dataType: 'string',
    },
    createTimeRange: {
      label: '创建时间', display: false, searchRange: true, type: 'date',
      format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
      valueFormat: 'YYYY-MM-DD',
      overHidden: true
    },
    // createTimeRange: {
    //   label: '创建时间', display: false, searchRange: true, type: 'date',
    //   format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
    //   valueFormat: 'YYYY-MM-DD',
    //   overHidden: true
    // },
    createTimeRangeArray: {
      label: '创建时间',
      minWidth: 150,
@@ -1875,6 +1876,7 @@
      searchRange: true,
      addDisplay: false,  // 新增时不显示
      editDisplay: false, // 修改时不显示
      viewDisplay: false,
      type: 'daterange',
      startPlaceholder: '开始日期',
      endPlaceholder: '结束日期',
@@ -1893,7 +1895,8 @@
      search: true,
      searchRange: true,
      addDisplay: false,  // 新增时不显示
      editDisplay: false, // 修改时不显示
      editDisplay: false, //
      viewDisplay: false,
      type: 'daterange',
      startPlaceholder: '开始日期',
      endPlaceholder: '结束日期',
@@ -2050,20 +2053,8 @@
      search: true,
    },
    confirmTime: {
      label: '确认时间', minWidth: 200,
      display: false,
      hide: false,
      search: false,
      searchSpan: 6,
    },
    orderTime: {
      label: '下单时间', minWidth: 180,
      display: false,
      hide: false,
      search: false,
      searchSpan: 6,
    },
    createBy: {
      label: '创建人', minWidth: 150,
      addDisplay: false,
@@ -2076,7 +2067,7 @@
      label: '创建时间', minWidth: 180,
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      viewDisplay: true,
      hide: false,
      search: false,
      overHidden: true,
@@ -2095,14 +2086,23 @@
      label: '更新时间', minWidth: 180,
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      viewDisplay: true,
      hide: false,
      search: false,
      overHidden: true,
      searchSpan: 6,
    },
    confirmTime: {
      label: '确认时间', minWidth: 180,
      addDisplay: false,
      editDisplay: false,
      viewDisplay: true,
      hide: true,
      search: false,
      overHidden: true,
      searchSpan: 6,
    },
    confirmTimeRange: {
      label: '确认时间', display: false, searchRange: true, type: 'date',
      format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
@@ -2115,17 +2115,29 @@
      searchRange: true,
      addDisplay: false,  // 新增时不显示
      editDisplay: false, // 修改时不显示
      viewDisplay: false,
      type: 'daterange',
      startPlaceholder: '开始日期',
      endPlaceholder: '结束日期',
      valueFormat: 'YYYY-MM-DD',
      hide: true
    },
    okTimeRange: {
      label: '完成时间', display: false, searchRange: true, type: 'date',
      format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
      valueFormat: 'YYYY-MM-DD',
    okTime: {
      label: '完成时间', minWidth: 180,
      addDisplay: false,
      editDisplay: false,
      viewDisplay: true,
      hide: true,
      search: false,
      searchSpan: 6,
    },
    // okTimeRange: {
    //   label: '完成时间2', display: false, searchRange: true, type: 'date',
    //   viewDisplay: true,
    //   format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
    //   valueFormat: 'YYYY-MM-DD',
    // },
    okTimeRangeArray: {
      label: '完成时间',
      minWidth: 150,
@@ -2133,17 +2145,39 @@
      searchRange: true,
      addDisplay: false,  // 新增时不显示
      editDisplay: false, // 修改时不显示
      viewDisplay: false,
      type: 'daterange',
      startPlaceholder: '开始日期',
      endPlaceholder: '结束日期',
      valueFormat: 'YYYY-MM-DD',
      hide: true
    },
    orderTimeRange: {
      label: '下单时间', display: false, searchRange: true, type: 'date',
      format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
      valueFormat: 'YYYY-MM-DD',
    orderTime: {
      label: '下单时间', minWidth: 180,
      addDisplay: false,
      editDisplay: false,
      viewDisplay: true,
      hide: true,
      search: false,
      searchSpan: 6,
    },
    // 表单组配置(派车信息组)
    loadingDate: {
      label: '装货日期',
      prop: 'loadingDate', // 保持原有字段名
      bind: 'orderTime',    // 4. 强制绑定到 row 里的 orderTime 字段
      minWidth: 180,
      display: true,
      viewDisplay: true,
      addDisplay: false,
      editDisplay: false,
      hide: false,
    },
    // orderTimeRange: {
    //   label: '下单时间', display: false, searchRange: true, type: 'date',
    //   format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
    //   valueFormat: 'YYYY-MM-DD',
    // },
    orderTimeRangeArray: {
      label: '下单时间',
      minWidth: 150,
@@ -2151,6 +2185,7 @@
      searchRange: true,
      addDisplay: false,  // 新增时不显示
      editDisplay: false, // 修改时不显示
      viewDisplay: false,
      type: 'daterange',
      startPlaceholder: '开始日期',
      endPlaceholder: '结束日期',
@@ -3183,69 +3218,47 @@
  },
  getBeginListFunc: (params = {}) => {
    // 1. 日期转换
    let newParams = <any>{ ...params };
    if (newParams) {
      // 1. 定义日期字段映射 (数组名 : 接口需要的前缀)
      // 这样写的好处是:如果你有多个日期,直接在这里添加一行即可
      const dateMap = {
        confirmTimeRangeArray: 'confirmTimeRange',
        createTimeRangeArray: 'createTime',
        updateTimeRangeArray: 'updateTimeRange',
        okTimeRangeArray: 'okTime',
        orderTimeRangeArray: 'orderTime'
      };
    // 1. 使用浅拷贝,不影响原始查询对象
    // 关键点:从原始 queryParams.value 取值,确保分页时依然能拿到数组
    let newParams = { ...queryParams.value, ...params };
      // 2. 遍历处理日期
      Object.keys(dateMap).forEach(arrayKey => {
        const prefix = dateMap[arrayKey];
        const range = newParams[arrayKey];
    // 2. 定义日期字段映射 (数组名 : 接口需要的前缀)
    const dateMap = {
      confirmTimeRangeArray: 'confirmTimeRange',
      createTimeRangeArray: 'createTime',
      updateTimeRangeArray: 'updateTimeRange',
      okTimeRangeArray: 'okTime',
      orderTimeRangeArray: 'orderTime'
    };
        if (Array.isArray(range) && range.length > 0) {
          // 赋值 Begin 和 End
          newParams[`${prefix}Begin`] = range[0];
          newParams[`${prefix}End`] = range[1];
        }
    // 3. 遍历处理日期
    Object.keys(dateMap).forEach(arrayKey => {
      const prefix = dateMap[arrayKey];
      const range = newParams[arrayKey];
        // 【核心改动】:无论是否有值,处理完后都把原始的 Array 字段删掉
        // 这样请求里就不会出现 confirmTimeRangeArray: [...]
        delete newParams[arrayKey];
      });
      if (Array.isArray(range) && range.length === 2) {
        // 赋值接口需要的 Begin 和 End
        newParams[`${prefix}Begin`] = range[0];
        newParams[`${prefix}End`] = range[1];
      }
      // 3. 通用清洗:删除所有空字符串、null 或 undefined 的其他字段
      Object.keys(newParams).forEach(key => {
        const val = newParams[key];
        if (val === '' || val === null || val === undefined) {
          delete newParams[key];
        }
      });
      // 只在给接口的参数中删除数组,不影响页面显示的 queryParams
      delete newParams[arrayKey];
    });
    } else {
      newParams = {};
    }
    // 4. 清洗参数:过滤空值
    const finalParams = {};
    Object.keys(newParams).forEach(key => {
      const val = newParams[key];
      if (val !== '' && val !== null && val !== undefined) {
        finalParams[key] = val;
      }
    });
    return newParams;
    // newParams = proxy.addDateRangeNew(queryParams.value, queryParams.value?.createTimeRangeArray, 'createTime');
    // newParams = proxy.addDateRangeNew(queryParams.value, queryParams.value?.updateTimeRangeArray, 'updateTime');
    // newParams = proxy.addDateRangeNew(queryParams.value, queryParams.value?.confirmTimeRangeArray, 'confirmTime');
    // newParams = proxy.addDateRangeNew(queryParams.value, queryParams.value?.okTimeRangeArray, 'okTime');
    // newParams =  proxy.addDateRangeNew(queryParams.value, queryParams.value?.orderTimeRangeArray, 'orderTime');
    console.log('发送给接口的最终参数:', finalParams);
    // delete newParams.createTimeRangeArray;
    // delete newParams.updateTimeRangeArray;
    // delete newParams.confirmTimeRangeArray;
    // delete newParams.okTimeRangeArray;
    // delete newParams.orderTimeRangeArray;
    // delete newParams.updateTimeArray;
    // delete newParams.businessTimeArray;
    // delete newParams.payableConfirmTimeArray;
    queryParams.value = newParams;
    return newParams;
    // 【核心修改】:直接返回,不要赋值给 queryParams.value
    return finalParams;
  },
  handleBeforeOpenFunc: (type: string) => {
    if (type == 'add') {
ui/admin-ui3/src/views/tms/tmsReceivableFee/index.vue
@@ -172,6 +172,7 @@
  rowKey: 'id',
  addBtn: false,
  editBtn: false,
   searchLabelWidth: 120,
  delBtn: false,
  viewBtn: false,
  column: {