Merge remote-tracking branch 'origin/yagwly_fa_master' into yagwly_fa_master
| | |
| | | download('/tms/tmsApBill/export', query); |
| | | }) |
| | | } |
| | | /** |
| | | * 手动推送 |
| | | */ |
| | | export const manualPushTmsApBill: requestType = (id) => { |
| | | return request({ |
| | | url: '/tms/tmsApBill/manualPush/' + id, |
| | | method: 'post', |
| | | }) |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 手动推送 |
| | | */ |
| | | export const manualPushTmsArBill: requestType = (id) => { |
| | | return request({ |
| | | url: '/tms/tmsArBill/manualPush/' + id, |
| | | method: 'post', |
| | | }) |
| | | } |
| | |
| | | <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">修改 |
| | |
| | | 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; |
| | | }, |
| | | }) |
| | | |
| | | |
| | |
| | | }, |
| | | 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', |
| | | }, |
| | | |
| | |
| | | </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" |
| | |
| | | </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> |
| | |
| | | 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"; |
| | |
| | | const financeTableOption = ref({ |
| | | menu: false, |
| | | addBtn: false, |
| | | header: true, |
| | | header: true, |
| | | selection: true, |
| | | title: '历史垫付费用', |
| | | column: { |
| | |
| | | label: '应付币制', |
| | | display: true, |
| | | }, |
| | | status: { |
| | | status: { |
| | | label: '状态', |
| | | display: true, |
| | | type: 'select', dicUrl: '/system/dict/data/type/sys_cancel_word', dataType: 'string', |
| | |
| | | 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; |
| | | }, |
| | | |
| | | }) |
| | |
| | | ElMessage.warning('请选择要作废的费用明细'); |
| | | return; |
| | | } |
| | | |
| | | |
| | | ElMessageBox.confirm(`确认要作废选中的 ${boxSelectionList.value.length} 条费用明细吗?`, '警告', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | |
| | | // 从 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(() => { |
| | |
| | | </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" |
| | |
| | | exportTmsApBill, |
| | | getTmsApBill, |
| | | listTmsApBill, |
| | | updateTmsApBill |
| | | updateTmsApBill,manualPushTmsApBill |
| | | } from "@/api/tms/tmsApBill"; |
| | | import useCurrentInstance from "@/utils/useCurrentInstance"; |
| | | import {computed, reactive, ref, toRefs} from "vue"; |
| | |
| | | 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: '调度单数量', |
| | |
| | | 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', |
| | |
| | | |
| | | 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' |
| | | } |
| | | |
| | | |
| | | } |
| | | }) |
| | |
| | | }) |
| | | }); |
| | | } |
| | | 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> |
| | |
| | | <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">修改 |
| | |
| | | </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="请输入减免原因" /> |
| | |
| | | </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"> |
| | |
| | | getTmsArBill, |
| | | listTmsArBill, |
| | | updateTmsArBill, cancelArBill, |
| | | exportArBillFormat |
| | | exportArBillFormat,manualPushTmsArBill |
| | | } from "@/api/tms/tmsArBill"; |
| | | import useCurrentInstance from "@/utils/useCurrentInstance"; |
| | | import { computed, reactive, ref, toRefs } from "vue"; |
| | |
| | | }, |
| | | 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: '调度单数量', |
| | |
| | | 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: '状态', |
| | |
| | | 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' |
| | | } |
| | | } |
| | | }) |
| | |
| | | }; |
| | | 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> |
| | |
| | | </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> |
| | |
| | | |
| | | 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(); |
| | |
| | | |
| | | }, |
| | | vehicleId: { |
| | | label: '车牌号1', dataType: 'string', |
| | | label: '车牌号', dataType: 'string', |
| | | display: true, |
| | | rules: [ |
| | | { |
| | |
| | | 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, |
| | |
| | | searchRange: true, |
| | | addDisplay: false, // 新增时不显示 |
| | | editDisplay: false, // 修改时不显示 |
| | | viewDisplay: false, |
| | | type: 'daterange', |
| | | startPlaceholder: '开始日期', |
| | | endPlaceholder: '结束日期', |
| | |
| | | search: true, |
| | | searchRange: true, |
| | | addDisplay: false, // 新增时不显示 |
| | | editDisplay: false, // 修改时不显示 |
| | | editDisplay: false, // |
| | | viewDisplay: false, |
| | | type: 'daterange', |
| | | startPlaceholder: '开始日期', |
| | | endPlaceholder: '结束日期', |
| | |
| | | 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, |
| | |
| | | label: '创建时间', minWidth: 180, |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | viewDisplay: true, |
| | | hide: false, |
| | | search: false, |
| | | overHidden: true, |
| | |
| | | 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, |
| | |
| | | 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, |
| | |
| | | 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, |
| | |
| | | searchRange: true, |
| | | addDisplay: false, // 新增时不显示 |
| | | editDisplay: false, // 修改时不显示 |
| | | viewDisplay: false, |
| | | type: 'daterange', |
| | | startPlaceholder: '开始日期', |
| | | endPlaceholder: '结束日期', |
| | |
| | | }, |
| | | |
| | | 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') { |
| | |
| | | rowKey: 'id', |
| | | addBtn: false, |
| | | editBtn: false, |
| | | searchLabelWidth: 120, |
| | | delBtn: false, |
| | | viewBtn: false, |
| | | column: { |