| | |
| | | download('/cwgl/estimatedReceivable/export',query); |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 确认 |
| | | */ |
| | | export const getEstimatedReceivableConfirm:requestType = (id) => { |
| | | return request({ |
| | | url: '/cwgl/estimatedReceivable/confirm/' + id, |
| | | method:'get' |
| | | }) |
| | | } |
| | | /** |
| | | * 取消 |
| | | */ |
| | | export const getCwglEstimatedReceivableCancel:requestType = (id) => { |
| | | return request({ |
| | | url: '/cwgl/estimatedReceivable/cancel/' + id, |
| | | method:'get' |
| | | }) |
| | | } |
| | | /** |
| | | * 作废 |
| | | */ |
| | | export const getEstimatedReceivableInvalid:requestType = (id) => { |
| | | return request({ |
| | | url: '/cwgl/estimatedReceivable/invalid/' + id, |
| | | method:'get' |
| | | }) |
| | | } |
| | |
| | | data |
| | | }) |
| | | } |
| | | export const updateEstimatedReceivableBillNmae:requestType = (data) => { |
| | | return request({ |
| | | url: '/cwgl/estimatedReceivableBill/name', |
| | | method: 'put', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 删除预估应收账单 |
| | |
| | | method: 'delete' |
| | | }) |
| | | } |
| | | |
| | | /* 取消关联 */ |
| | | export const cancelRelevancy:requestType = (id) => { |
| | | return request({ |
| | | url: '/cwgl/estimatedReceivableBill/cancel/relevancy/' + id, |
| | | method: 'get' |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 导出预估应收账单 |
| | |
| | | download('/cwgl/estimatedReceivableBill/export',query); |
| | | }) |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | */ |
| | | export const estimatedReceivableBillSettlement:requestType = (data) => { |
| | | return request({ |
| | | url: '/cwgl/estimatedReceivableBill/settlement', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | /** |
| | | * 新增预估应收管理日志 |
| | | */ |
| | | export const addEstimatedReceivableLog:requestType = (data) => { |
| | | return request({ |
| | | url: '/cwgl/estimatedReceivableLog', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | /** |
| | | * 查询预估应收账单日志列表 |
| | | */ |
| | | export const listEstimatedReceivableBillLog:requestType = (query) => { |
| | | return request({ |
| | | url: '/cwgl/estimatedReceivableBillLog/list', |
| | | method:'get', |
| | | params:query |
| | | }) |
| | | } |
| | |
| | | method:'get' |
| | | }) |
| | | } |
| | | /* 待入账业务账单 */ |
| | | export const getCwglPendingSettlementBusinessBillList:requestType = (query) => { |
| | | return request({ |
| | | url: '/cwgl/pendingSettlementBusiness/bill/list', |
| | | method:'get', |
| | | params:query |
| | | }) |
| | | } |
| | | /* 确认未勾选账单 */ |
| | | export const pendingSettlementBusinessCreateBillList:requestType = (query) => { |
| | | return request({ |
| | | url: '/cwgl/pendingSettlementBusiness/create/bill/list', |
| | | method:'get', |
| | | params:query |
| | | }) |
| | | } |
| | | /* 确认勾选账单 */ |
| | | export const cwglPendingSettlementBusinessCreateBill:requestType = (data,id) => { |
| | | return request({ |
| | | url: '/cwgl/pendingSettlementBusiness/create/bill/'+ id, |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | /* 客户名称 */ |
| | | export const getSelectCustomNam:requestType = () => { |
| | | return request({ |
| | | url: '/cwgl/pendingSettlementBusiness/select/customName', |
| | | method:'get' |
| | | }) |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取生成账单 |
| | | */ |
| | | export const getPendingSettlementBusinessBill:requestType = (id) => { |
| | | return request({ |
| | | url: '/cwgl/pendingSettlementBusiness/bill/' + id, |
| | | method:'get' |
| | | }) |
| | | } |
| | | /** |
| | | * 新增待入账业务 |
| | | */ |
New file |
| | |
| | | <script lang="ts" setup> |
| | | import { reactive, ref, toRefs, watch, nextTick } from "vue"; |
| | | import { BaseEntityInterface, PageQueryInterface } from "@/utils/globalInterface"; |
| | | import { usePagePlus } from "@/hooks/usePagePlus"; |
| | | import { getToken } from "@/utils/auth"; |
| | | |
| | | // import { listDzInoutOrder } from "@/api/dz/dzInoutOrder"; |
| | | import useCurrentInstance from "@/utils/useCurrentInstance"; import { ElTable, ElTableColumn } from 'element-plus' |
| | | const { proxy } = useCurrentInstance(); |
| | | |
| | | interface DzInoutOrderI extends BaseEntityInterface { |
| | | id?: number, |
| | | no?: string, |
| | | sasStockNo?: string, |
| | | entryNo?: string, |
| | | bondInvtId?: number, |
| | | bondInvtNo?: string, |
| | | releaseId?: number, |
| | | releaseNo?: string, |
| | | areainOriactNo?: string, |
| | | areainEtpsNo?: string, |
| | | areainEtpsNm?: string, |
| | | areainEtpsSccd?: string, |
| | | masterCuscd?: string, |
| | | stockTypecd?: string, |
| | | businessTypecd?: string, |
| | | rltSasStockNo?: string, |
| | | dclEr?: string, |
| | | dclEtpsNo?: string, |
| | | dclEtpsNm?: string, |
| | | dclEtpsSccd?: string, |
| | | inputCode?: string, |
| | | inputSccd?: string, |
| | | inputName?: string, |
| | | etpsPreentNo?: string, |
| | | packageQty?: string, |
| | | grossWt?: string, |
| | | netWt?: string, |
| | | packType?: string, |
| | | eportReplaceMark?: number, |
| | | mtpckEndprdType?: string, |
| | | enterpriseName?: string, |
| | | stockDate?: string, |
| | | tradeType?: number, |
| | | conveyanceId?: number, |
| | | conveyanceNo?: string, |
| | | conveyanceName?: string, |
| | | enterId?: number, |
| | | deleted?: number, |
| | | } |
| | | const props = defineProps({ |
| | | flowParams: Array, |
| | | flowParamsShow: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | fileNameIshow: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | }) |
| | | console.log(props); |
| | | |
| | | const { } = |
| | | proxy.useDict(); |
| | | |
| | | |
| | | const stockTypecdFormat = (row: any) => { |
| | | return proxy.selectDictLabel(sy_dz_account_book_status.value, row.stockTypecd); |
| | | } |
| | | |
| | | const data = reactive({ |
| | | orderSelection: <DzInoutOrderI[]>[], |
| | | queryParams: <DzInoutOrderI & PageQueryInterface>{ pageNum: 1, pageSize: 10 }, |
| | | rules: {}, |
| | | }) |
| | | const { queryParams, rules, orderSelection } = toRefs(data); |
| | | const currentRow = ref() |
| | | const emit = defineEmits(['affirm']) |
| | | const { |
| | | pageF, tableData, getList, |
| | | handleQuery, resetQuery, |
| | | } = usePagePlus({ |
| | | title: '流程日志', |
| | | queryParams: queryParams.value, |
| | | // getListApi: listDzInoutOrder, |
| | | resetQueryFunc: () => { |
| | | }, |
| | | |
| | | }) |
| | | |
| | | |
| | | const multipleTableRef = ref<InstanceType<typeof ElTable>>() |
| | | /** |
| | | * 确定 |
| | | */ |
| | | const affirmQuery = () => { |
| | | |
| | | } |
| | | let newArray = ref<any>() |
| | | const openModel = () => { |
| | | pageF.drawerOpen = true; |
| | | } |
| | | |
| | | |
| | | const closeModel = () => { |
| | | pageF.drawerOpen = false; |
| | | } |
| | | |
| | | |
| | | // getList() |
| | | const download_qr_code = (row: string) => { |
| | | downloadFile(row.fileName); |
| | | } |
| | | const baseURL = import.meta.env.VITE_APP_BASE_API |
| | | |
| | | // 创建一个点击事件触发下载 |
| | | function downloadFile(row: any) { |
| | | // 文件下载地址 |
| | | const fileUrl = baseURL + "/common/download/resource?resource=" + encodeURI(row); |
| | | // 设置请求头 |
| | | const headers = new Headers(); |
| | | headers.append('Authorization', 'Bearer ' + getToken()); // 设置授权头,替换YourAccessToken为实际的访问令牌 |
| | | // 发起 Fetch 请求 |
| | | fetch(fileUrl, { |
| | | method: 'GET', |
| | | headers: headers, |
| | | }) |
| | | .then(response => response.blob()) |
| | | .then(blob => { |
| | | // 创建一个虚拟的链接元素,模拟点击下载 |
| | | const link = document.createElement('a'); |
| | | link.href = window.URL.createObjectURL(blob); |
| | | link.download = row; // 设置下载文件名,替换filename.ext为实际的文件名和扩展名 |
| | | document.body.appendChild(link); |
| | | // 模拟点击 |
| | | link.click(); |
| | | |
| | | // 移除虚拟链接元素 |
| | | document.body.removeChild(link); |
| | | }) |
| | | .catch(error => console.error('下载失败:', error)); |
| | | } |
| | | defineExpose({ |
| | | openModel, |
| | | }) |
| | | </script> |
| | | <template> |
| | | <el-dialog v-model="pageF.drawerOpen" title="流程日志" append-to-body width="1000px"> |
| | | <div class="app-container" style="padding-top: 0;"> |
| | | <el-table ref="multipleTableRef" :data="props.flowParams"> |
| | | <el-table-column align="center" label="处理时间" prop="createTime" /> |
| | | <el-table-column align="center" label="处理人员" prop="createBy" /> |
| | | <el-table-column align="center" label="附件下载" prop="fileName"> |
| | | <template #default="scope"> |
| | | <el-link v-if="scope.row.fileName" type="primary" :underline="false" |
| | | @click="download_qr_code(scope.row)"> |
| | | {{scope.row.fileName}} |
| | | </el-link> |
| | | <span v-else>无附件</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column align="center" label="节点描述" prop="operation" show-overflow-tooltip="true" /> |
| | | </el-table> |
| | | <!-- <pagination style="position: relative;" v-show="pageF.total > 0" v-model:limit="queryParams.pageSize" |
| | | v-model:page="queryParams.pageNum" :total="pageF.total" @pagination="getList" /> --> |
| | | </div> |
| | | |
| | | <div class="dialog-footer" style="text-align: right"> |
| | | <el-button @click="closeModel">关闭</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | |
| | | |
| | | <style scoped></style> |
| | |
| | | import DictTag from "/src/components/DictTag/index.vue"; |
| | | import FileUpload from "/src/components/FileUpload/index.vue"; |
| | | import basicContainer from '/src/components/basic-container/main.vue'; |
| | | import flowLog from './components/flowLog/index.vue'; |
| | | |
| | | import SvgIcon from "/src/components/SvgIcon/index.vue"; |
| | | |
| | | app.component("DictTag", DictTag); |
| | | app.component('FileUpload', FileUpload); |
| | | app.component('basicContainer', basicContainer) |
| | | app.component('flowLog', flowLog) |
| | | |
| | | |
| | | app.component('svg-icon', SvgIcon) |
| | | |
| | |
| | | delBtn: false, |
| | | viewBtn: false, |
| | | selection: false, |
| | | searchSpan: 5, |
| | | searchLabelWidth: 100, |
| | | column: { |
| | | dispatchNo: { |
| | | fixed: 'left', |
| | |
| | | vehiclePlateId: { |
| | | label: '车板号', width: 120, |
| | | }, |
| | | mainDriverName: { |
| | | label: '主驾驶员', width: 120, |
| | | }, |
| | | assistantDriverName: { |
| | | label: '副驾驶员', width: 120, |
| | | }, |
| | | pointNum: { |
| | | label: '提送货点数', width: 120, |
| | | }, |
| | | quantity: { |
| | | label: '件数', width: 120, |
| | | }, |
| | | actualDepartureTime: { |
| | | label: '实际出发时间', width: 180, |
| | | }, |
| | | actualDepartureTimeRange: { |
| | | label: '实际出发时间', display: false, search: true, searchRange: true, type: 'date', |
| | | format: 'YYYY-MM-DD', hide: true, searchSpan: 6, searchLabelWidth: 110, |
| | | valueFormat: 'YYYY-MM-DD', |
| | | }, |
| | | requiredArrivalTime: { |
| | | label: '要求到达时间', width: 180, |
| | | }, |
| | | requiredArrivalTimeRange: { |
| | | label: '要求到达时间', display: false, search: true, searchRange: true, type: 'date', |
| | | format: 'YYYY-MM-DD', hide: true, searchSpan: 6, searchLabelWidth: 110, |
| | | valueFormat: 'YYYY-MM-DD', |
| | | }, |
| | | actualArrivalTime: { |
| | | label: '实际到达时间', width: 180, |
| | | }, |
| | | actualArrivalTimeRange: { |
| | | label: '要求到达时间', display: false, search: true, searchRange: true, type: 'date', |
| | | format: 'YYYY-MM-DD', hide: true, searchSpan: 6, searchLabelWidth: 110, |
| | | valueFormat: 'YYYY-MM-DD', |
| | | }, |
| | | beReturn: { |
| | | label: '是否回程', dataType: 'string', width: 100, |
| | | type: 'select', dicUrl: '/system/dict/data/type/dispatch_order_status', |
| | | }, |
| | | dispatchQuantity: { |
| | | label: '实发件数', width: 100, |
| | | }, |
| | | dispatchWeight: { |
| | | label: '实发重量', width: 100, |
| | | }, |
| | | dispatchVolume: { |
| | | label: '实发体积(立方)', width: 160, |
| | | }, |
| | | status: { |
| | | label: '状态', search: true, dataType: 'string', width: 100, |
| | | type: 'select', dicUrl: '/system/dict/data/type/dispatch_order_status', |
| | | }, |
| | | remark: { |
| | | label: '备注', width: 120, |
| | | type: 'textarea', minRows: 3, maxRows: 5, |
| | | }, |
| | | // mainDriverName: { |
| | | // label: '主驾驶员', width: 120, |
| | | // }, |
| | | // assistantDriverName: { |
| | | // label: '副驾驶员', width: 120, |
| | | // }, |
| | | // pointNum: { |
| | | // label: '提送货点数', width: 120, |
| | | // }, |
| | | // quantity: { |
| | | // label: '件数', width: 120, |
| | | // }, |
| | | // actualDepartureTime: { |
| | | // label: '实际出发时间', width: 180, |
| | | // }, |
| | | // actualDepartureTimeRange: { |
| | | // label: '实际出发时间', display: false, search: true, searchRange: true, type: 'date', |
| | | // format: 'YYYY-MM-DD', hide: true, searchSpan: 5, searchLabelWidth: 120, |
| | | // valueFormat: 'YYYY-MM-DD', |
| | | // }, |
| | | // requiredArrivalTime: { |
| | | // label: '要求到达时间', width: 180, |
| | | // }, |
| | | // requiredArrivalTimeRange: { |
| | | // label: '要求到达时间', display: false, search: true, searchRange: true, type: 'date', |
| | | // format: 'YYYY-MM-DD', hide: true, searchSpan: 5, searchLabelWidth: 120, |
| | | // valueFormat: 'YYYY-MM-DD', |
| | | // }, |
| | | // actualArrivalTime: { |
| | | // label: '实际到达时间', width: 180, |
| | | // }, |
| | | // actualArrivalTimeRange: { |
| | | // label: '要求到达时间', display: false, search: true, searchRange: true, type: 'date', |
| | | // format: 'YYYY-MM-DD', hide: true, searchSpan: 5, searchLabelWidth: 120, |
| | | // valueFormat: 'YYYY-MM-DD', |
| | | // }, |
| | | // beReturn: { |
| | | // label: '是否回程', dataType: 'string', width: 100, |
| | | // type: 'select', dicUrl: '/system/dict/data/type/dispatch_order_status', |
| | | // }, |
| | | // dispatchQuantity: { |
| | | // label: '实发件数', width: 100, |
| | | // }, |
| | | // dispatchWeight: { |
| | | // label: '实发重量', width: 100, |
| | | // }, |
| | | // dispatchVolume: { |
| | | // label: '实发体积(立方)', width: 160, |
| | | // }, |
| | | // status: { |
| | | // label: '状态', search: true, dataType: 'string', width: 100, |
| | | // type: 'select', dicUrl: '/system/dict/data/type/dispatch_order_status', |
| | | // }, |
| | | // remark: { |
| | | // label: '备注', width: 120, |
| | | // type: 'textarea', minRows: 3, maxRows: 5, |
| | | // }, |
| | | // createBy: { |
| | | // label: '创建人', |
| | | // }, |
| | |
| | | type: 'select', |
| | | dicUrl: '/system/dict/data/type/sys_whether_type', |
| | | }, |
| | | |
| | | } |
| | | }) |
| | | |
| | |
| | | <template> |
| | | <basicContainer > |
| | | <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" |
| | | @size-change="sizeChange" |
| | | @on-load="onLoad" |
| | | > |
| | | <basicContainer> |
| | | <avue-crud :option="option" v-model:search="queryParams" :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" @size-change="sizeChange" @on-load="onLoad"> |
| | | |
| | | <template #dispatchNo-form="{ row, size, }"> |
| | | <div style="cursor: pointer;"> |
| | | <el-input v-model="form.dispatchNo" @click="handleFormSearch" readonly placeholder="请输入调度单号"> |
| | | <template #append> |
| | | <el-button icon="Search" style="cursor: pointer;" @click="handleFormSearch"></el-button> |
| | | </template> |
| | | </el-input> |
| | | </div> |
| | | </template> |
| | | |
| | | |
| | | |
| | | <template #menu-left> |
| | | <el-button |
| | | type="success" |
| | | icon="Edit" |
| | | :disabled="pageF.single" |
| | | v-hasPermi="['cwgl:estimatedReceivable:edit']" |
| | | @click="handleUpdate">修改 |
| | | <el-button type="success" icon="Edit" :disabled="pageF.single" v-hasPermi="['cwgl:estimatedReceivable:edit']" |
| | | @click="handleUpdate">修改 |
| | | </el-button> |
| | | <el-button |
| | | type="danger" |
| | | icon="Delete" |
| | | :disabled="pageF.multiple" |
| | | @click="handleDelete" |
| | | v-hasPermi="['cwgl:estimatedReceivable:remove']" |
| | | >删除 |
| | | <el-button type="danger" icon="Delete" :disabled="pageF.multiple" @click="handleDelete" |
| | | v-hasPermi="['cwgl:estimatedReceivable:remove']">删除 |
| | | </el-button> |
| | | <el-button |
| | | type="warning" |
| | | plain |
| | | icon="Download" |
| | | @click="handleExport" |
| | | v-hasPermi="['cwgl:estimatedReceivable:export']" |
| | | >导出 |
| | | <el-button type="warning" plain icon="Download" @click="handleExport" |
| | | v-hasPermi="['cwgl:estimatedReceivable:export']">导出 |
| | | </el-button> |
| | | </template> |
| | | |
| | | |
| | | <template #menu="{ size, row, index }"> |
| | | <el-link class="link-btn" type="primary" v-if="row.isConfirmed == 1" :underline="false" plain :size="size" |
| | | @click="handleCancel(row)" v-hasPermi="['cwgl:estimatedReceivable:cancel']"> 取消确认 |
| | | </el-link> |
| | | <el-link class="link-btn" type="primary" v-if="row.isConfirmed == 0" :underline="false" plain |
| | | @click="handleAffirm(row)" v-hasPermi="['cwgl:estimatedReceivable:confirm']"> 确认 |
| | | </el-link> |
| | | <el-link class="link-btn" type="primary" v-if="row.isConfirmed == 1" :underline="false" plain |
| | | @click="handleInvalid(row)" v-hasPermi="['cwgl:estimatedReceivable:invalid']"> 作废 |
| | | </el-link> |
| | | <el-link class="link-btn" type="primary" :underline="false" plain @click="handleFlow(row)" |
| | | v-hasPermi="['cwgl:estimatedReceivable:flog']"> 日志 |
| | | </el-link> |
| | | </template> |
| | | </avue-crud> |
| | | </basicContainer> |
| | | |
| | | <el-dialog v-model="dialog.visible" :title="dialog.title" width="1200px"> |
| | | <!-- <el-form ref="storagesTransferRef" :model="newForm" :rules="rules" label-width="120px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="调度单号" prop="dispatchNo"> |
| | | <el-input v-model="newForm.dispatchNo" placeholder="请输入调度单号" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="客户名称" prop="customerName"> |
| | | <el-input v-model="newForm.customerName" placeholder="请输入客户名称" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="项目名称" prop="projectName"> |
| | | <el-input v-model="newForm.projectName" placeholder="请输入项目名称" /> |
| | | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="下单日期" prop="createdTime"> |
| | | <el-date-picker v-model="newForm.createdTime" type="date" valueFormat="YYYY-MM-DD" placeholder="请选择下单日期"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="newGetList">搜索</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | </el-col> |
| | | |
| | | </el-row> |
| | | |
| | | </el-form> |
| | | |
| | | <el-table :data="newTableData" @selection-change="handleSelectionChange" border ref="newTableRef" |
| | | @row-click="handleRowClick"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column fixed label="调度单号" align="center" prop="dispatchNo" show-overflow-tooltip /> |
| | | <el-table-column label="客户名称" align="center" prop="customerName" show-overflow-tooltip /> |
| | | <el-table-column label="项目名称" align="center" prop="projectName" show-overflow-tooltip /> |
| | | <el-table-column label="下单日期" align="center" prop="createdTime" show-overflow-tooltip /> |
| | | </el-table> --> |
| | | |
| | | <avue-crud :option="newOption" :data="newTableData" v-model:search="newForm" :page="newPageF" |
| | | :table-loading="itemTableLoading2" @search-change="newSearchChange" ref="newTableRef" |
| | | @selection-change="newSelectionChange" @search-reset="newRsetChange" |
| | | @current-change="handleAttachmentCurrentChange" @size-change="handleAttachmentSizeChange" @on-load="newOnLoad"> |
| | | </avue-crud> |
| | | |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">确 定</el-button> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | </template> |
| | | |
| | | </el-dialog> |
| | | |
| | | <flowLog ref="flowLogIshow" :flowParams="flowParams" ></flowLog> |
| | | </template> |
| | | |
| | | <script setup name="estimatedReceivable" lang="ts"> |
| | | import {EstimatedReceivableI,addEstimatedReceivable, delEstimatedReceivable, exportEstimatedReceivable, getEstimatedReceivable, listEstimatedReceivable, updateEstimatedReceivable} from "@/api/cwgl/estimatedReceivable"; |
| | | import useCurrentInstance from "@/utils/useCurrentInstance"; |
| | | import {computed,reactive, ref, toRefs} from "vue"; |
| | | import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface"; |
| | | import {usePagePlus} from "@/hooks/usePagePlus"; |
| | | import {hasPermission} from "@/utils/permissionUtils"; |
| | | import { |
| | | EstimatedReceivableI, addEstimatedReceivable, delEstimatedReceivable, exportEstimatedReceivable, getEstimatedReceivable, listEstimatedReceivable, updateEstimatedReceivable, |
| | | getEstimatedReceivableConfirm, getCwglEstimatedReceivableCancel, getEstimatedReceivableInvalid |
| | | } from "@/api/cwgl/estimatedReceivable"; |
| | | import { listEstimatedReceivableLog} from "@/api/cwgl/estimatedReceivableLog"; |
| | | import {listEstimatedReceivableBillLog} from "@/api/cwgl/estimatedReceivableBillLog"; |
| | | import { |
| | | listPendingSettlementBusiness, |
| | | } from "@/api/cwgl/pendingSettlementBusiness"; |
| | | import useCurrentInstance from "@/utils/useCurrentInstance"; |
| | | import { computed, reactive, ref, toRefs } from "vue"; |
| | | import { PagesInterface, PageQueryInterface } from "@/utils/globalInterface"; |
| | | import { usePagePlus } from "@/hooks/usePagePlus"; |
| | | import { hasPermission } from "@/utils/permissionUtils"; |
| | | import { ElMessage, ElMessageBox } from "element-plus"; |
| | | |
| | | const { proxy } = useCurrentInstance(); |
| | | const crudRef = ref(); |
| | | const { proxy } = useCurrentInstance(); |
| | | const crudRef = ref(); |
| | | |
| | | const permissionList = computed(()=>{ |
| | | return { |
| | | addBtn: hasPermission(["cwgl:estimatedReceivable:add"]), |
| | | delBtn: hasPermission(["cwgl:estimatedReceivable:remove"]), |
| | | editBtn: hasPermission(["cwgl:estimatedReceivable:edit"]), |
| | | viewBtn: hasPermission(["cwgl:estimatedReceivable:query"]), |
| | | } |
| | | }) |
| | | const permissionList = computed(() => { |
| | | return { |
| | | addBtn: hasPermission(["cwgl:estimatedReceivable:add"]), |
| | | delBtn: hasPermission(["cwgl:estimatedReceivable:remove"]), |
| | | editBtn: hasPermission(["cwgl:estimatedReceivable:edit"]), |
| | | viewBtn: hasPermission(["cwgl:estimatedReceivable:query"]), |
| | | } |
| | | }) |
| | | |
| | | const data = reactive({ |
| | | form:<EstimatedReceivableI>{}, |
| | | queryParams:<EstimatedReceivableI&PageQueryInterface>{}, |
| | | page: <PagesInterface>{ |
| | | pageSize: 10, |
| | | total: 0, |
| | | currentPage: 1, |
| | | const data = reactive({ |
| | | form: <EstimatedReceivableI>{}, |
| | | newTableData: [], |
| | | newForm: <EstimatedReceivableI>{ |
| | | pageNum: 1, |
| | | pageSize: 10 |
| | | }, |
| | | queryParams: <EstimatedReceivableI & PageQueryInterface>{}, |
| | | page: <PagesInterface>{ |
| | | pageSize: 10, |
| | | total: 0, |
| | | currentPage: 1, |
| | | }, |
| | | selectionList: [], |
| | | newSelectionList: [], |
| | | itemTableLoading1: false, |
| | | itemTableLoading2: false, |
| | | }) |
| | | const { queryParams, form, page, selectionList, newForm, newTableData, newSelectionList, itemTableLoading1, itemTableLoading2 } = toRefs(data); |
| | | const option = ref({ |
| | | pageKey: 'EstimatedReceivable', |
| | | rowKey: 'id', |
| | | searchSpan: 5, |
| | | editDisplay: false, |
| | | |
| | | addBtn: true, |
| | | editBtn: true, |
| | | delBtn: false, |
| | | viewBtn: false, |
| | | |
| | | searchLabelWidth: 100, |
| | | labelWidth: 120, |
| | | column: { |
| | | // id: { |
| | | // label: 'ID', |
| | | // }, |
| | | feeSystemNo: { |
| | | label: '费用系统编号', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "费用系统编号不能为空", trigger: "blur" |
| | | } |
| | | ], |
| | | search: true, |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | }, |
| | | selectionList:[], |
| | | }) |
| | | const {queryParams,form,page,selectionList} = toRefs(data); |
| | | const option = ref({ |
| | | pageKey: 'EstimatedReceivable', |
| | | rowKey: 'id', |
| | | column: { |
| | | id: { |
| | | label: 'ID', |
| | | }, |
| | | feeSystemNo: { |
| | | label: '费用系统编号', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "费用系统编号不能为空", trigger: "blur" } |
| | | ], }, |
| | | dispatchNo: { |
| | | label: '调度单号', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "调度单号不能为空", trigger: "blur" } |
| | | ], }, |
| | | customerName: { |
| | | label: '客户名称', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "客户名称不能为空", trigger: "blur" } |
| | | ], }, |
| | | projectName: { |
| | | label: '项目名称', |
| | | }, |
| | | orderDate: { |
| | | label: '下单日期', |
| | | }, |
| | | feeName: { |
| | | label: '费用名称', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "费用名称不能为空", trigger: "blur" } |
| | | ], }, |
| | | estimatedAmount: { |
| | | label: '预估费用金额', |
| | | }, |
| | | currency: { |
| | | label: '币制', |
| | | }, |
| | | relatedBillName: { |
| | | label: '关联账单名称', |
| | | }, |
| | | relatedBillStatus: { |
| | | label: '关联账单状态', |
| | | }, |
| | | isConfirmed: { |
| | | label: '是否确认(0:未确认;1:已确认)', |
| | | }, |
| | | confirmBy: { |
| | | label: '确认人', |
| | | }, |
| | | confirmTime: { |
| | | label: '确认时间', |
| | | }, |
| | | remark: { |
| | | label: '备注', |
| | | type: 'textarea', minRows: 3, maxRows: 5, |
| | | }, |
| | | createBy: { |
| | | label: '创建人', |
| | | }, |
| | | updateBy: { |
| | | label: '更新人', |
| | | }, |
| | | createTime: { |
| | | label: '创建时间', |
| | | }, |
| | | updateTime: { |
| | | label: '更新时间', |
| | | }, |
| | | deleted: { |
| | | label: '删除标记(0:正常;1:删除)', |
| | | }, |
| | | } |
| | | }) |
| | | dispatchNo: { |
| | | label: '调度单号', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "调度单号不能为空", trigger: "blur" |
| | | } |
| | | ], |
| | | search: true, |
| | | }, |
| | | customerName: { |
| | | label: '客户名称', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "客户名称不能为空", trigger: "blur" |
| | | } |
| | | ], |
| | | search: true, |
| | | disabled: true, |
| | | }, |
| | | projectName: { |
| | | label: '项目名称', |
| | | search: true, |
| | | disabled: true, |
| | | }, |
| | | orderDate: { |
| | | label: '下单日期', |
| | | search: true, |
| | | type: 'datetime', // 改为 datetime 类型 |
| | | format: 'YYYY-MM-DD HH:mm:ss', |
| | | valueFormat: 'YYYY-MM-DD HH:mm:ss', |
| | | }, |
| | | feeName: { |
| | | label: '费用名称', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "费用名称不能为空", trigger: "blur" |
| | | } |
| | | ], |
| | | search: true, |
| | | }, |
| | | |
| | | const { tableData,pageF,rowSave,rowUpdate,rowDel,beforeOpen,searchChange, |
| | | searchReset,selectionChange,onLoad,currentChange,sizeChange,handleDelete,handleExport,handleUpdate,refreshChange} = usePagePlus({ |
| | | form:form, |
| | | option:option, |
| | | queryParams:queryParams, |
| | | idKey:'id', |
| | | page:page.value, |
| | | getListApi:listEstimatedReceivable, |
| | | getDetailApi:getEstimatedReceivable, |
| | | exportApi:exportEstimatedReceivable, |
| | | deleteApi:delEstimatedReceivable, |
| | | addApi:addEstimatedReceivable, |
| | | updateApi:updateEstimatedReceivable, |
| | | handleUpdateFunc:()=>{ |
| | | estimatedAmount: { |
| | | label: '费用金额', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "费用金额不能为空", trigger: "blur" |
| | | } |
| | | ], |
| | | }, |
| | | currency: { |
| | | label: '币制', |
| | | disabled: true, |
| | | }, |
| | | relatedBillName: { |
| | | label: '关联账单名称', |
| | | }, |
| | | relatedBillStatus: { |
| | | label: '关联账单状态', |
| | | search: true, |
| | | dataType: 'string', |
| | | type: 'select', |
| | | |
| | | dicUrl: '/system/dict/data/type/sys_related_status', |
| | | // formatter: (row, value) => { |
| | | // // 自定义格式化逻辑(如果需要) |
| | | // return value; |
| | | // } |
| | | }, |
| | | isConfirmed: { |
| | | label: '是否确认', |
| | | dataType: 'string', |
| | | |
| | | search: true, |
| | | type: 'select', |
| | | dicUrl: '/system/dict/data/type/sys_affirm_status', |
| | | }, |
| | | remark: { |
| | | label: '备注', |
| | | type: 'textarea', minRows: 3, maxRows: 5, |
| | | }, |
| | | |
| | | |
| | | |
| | | // confirmBy: { |
| | | // label: '确认人', |
| | | // }, |
| | | // confirmTime: { |
| | | // label: '确认时间', |
| | | // }, |
| | | |
| | | // createBy: { |
| | | // label: '创建人', |
| | | // }, |
| | | // updateBy: { |
| | | // label: '更新人', |
| | | // }, |
| | | // createTime: { |
| | | // label: '创建时间', |
| | | // }, |
| | | // updateTime: { |
| | | // label: '更新时间', |
| | | // }, |
| | | // deleted: { |
| | | // label: '删除标记(0:正常;1:删除)', |
| | | // }, |
| | | } |
| | | }) |
| | | |
| | | const newOption = ref({ |
| | | pageKey: 'PendingSettlementBusiness', |
| | | rowKey: 'id', |
| | | searchSpan: 5, |
| | | selectionType: 'single', |
| | | selectType: 'radio', |
| | | editDisplay: false, |
| | | addBtn: false, |
| | | editBtn: false, |
| | | menu: false, |
| | | delBtn: false, |
| | | viewBtn: false, |
| | | searchLabelWidth: 100, |
| | | labelWidth: 120, |
| | | indexLabel: '序号', |
| | | column: { |
| | | dispatchNo: { |
| | | label: '调度单号', |
| | | search: true, |
| | | }, |
| | | customerName: { |
| | | label: '客户名称', |
| | | search: true, |
| | | }, |
| | | projectName: { |
| | | label: '项目名称', |
| | | search: true, |
| | | }, |
| | | createdTime: { |
| | | label: '下单日期', |
| | | search: true, |
| | | type: 'date', |
| | | format: 'YYYY-MM-DD', |
| | | valueFormat: 'YYYY-MM-DD', |
| | | } |
| | | } |
| | | }) |
| | | const { tableData, pageF, rowSave, rowUpdate, rowDel, beforeOpen, searchChange, |
| | | searchReset, selectionChange, onLoad, currentChange, sizeChange, handleDelete, handleExport, handleUpdate, refreshChange } = usePagePlus({ |
| | | form: form, |
| | | option: option, |
| | | queryParams: queryParams, |
| | | idKey: 'id', |
| | | page: page.value, |
| | | getListApi: listEstimatedReceivable, |
| | | getDetailApi: getEstimatedReceivable, |
| | | exportApi: exportEstimatedReceivable, |
| | | deleteApi: delEstimatedReceivable, |
| | | addApi: addEstimatedReceivable, |
| | | updateApi: updateEstimatedReceivable, |
| | | handleUpdateFunc: () => { |
| | | crudRef.value.rowEdit(selectionList.value[0]); |
| | | }, |
| | | handleSelectionChangeFunc:(selection:any)=>{ |
| | | handleSelectionChangeFunc: (selection: any) => { |
| | | selectionList.value = selection; |
| | | } |
| | | }) |
| | | const dialog = reactive({ |
| | | visible: false, |
| | | title: '', |
| | | }) |
| | | const newPageF = ref<PagesInterface>({ |
| | | total: 0, |
| | | pageSize: 10 |
| | | }) |
| | | const storagesTransferRef = ref<FormInstance>() |
| | | const handleFormSearch = () => { |
| | | listPendingSettlementBusiness(newForm.value).then((res) => { |
| | | if (res.code === 200) { |
| | | dialog.visible = true; |
| | | dialog.title = '选择调度单号'; |
| | | newTableData.value = res.rows || []; |
| | | newPageF.value.total = res.total || 0; |
| | | console.log(newPageF.value.totale); |
| | | |
| | | } |
| | | }) |
| | | } |
| | | const newGetList = () => { |
| | | console.log(newForm.value); |
| | | |
| | | listPendingSettlementBusiness(newForm.value).then((res) => { |
| | | if (res.code === 200) { |
| | | newTableData.value = res.rows || []; |
| | | newPageF.value.total = res.total || 0; |
| | | } |
| | | }) |
| | | } |
| | | |
| | | |
| | | |
| | | const newTableRef = ref(); |
| | | const newSelectionChange = (selection: any) => { |
| | | |
| | | // 只保留最后一个选中的项 |
| | | if (selection.length > 1) { |
| | | const nowVal = selection.shift(); |
| | | // newTableRef.value.clearSelection([]); |
| | | newTableRef.value.toggleRowSelection(nowVal, false); |
| | | |
| | | } else { |
| | | console.log("newSelectionChange", selection); |
| | | |
| | | newSelectionList.value = selection |
| | | } |
| | | } |
| | | |
| | | const resetQuery = () => { |
| | | newForm.value = { |
| | | pageNum: 1, |
| | | pageSize: 10 |
| | | } |
| | | listPendingSettlementBusiness(newForm.value).then((res) => { |
| | | if (res.code === 200) { |
| | | newTableData.value = res.rows || []; |
| | | newPageF.value.total = res.total || 0; |
| | | } |
| | | }) |
| | | } |
| | | const submitForm = () => { |
| | | if (newSelectionList.value.length === 0) { |
| | | proxy.$modal.msgWarning("请选择调度单号"); |
| | | return; |
| | | } |
| | | const selectedDispatchNo = newSelectionList.value[0] |
| | | // option.value.column = selectedDispatchNo; |
| | | // 将选中行的数据赋值给表单 |
| | | form.value.dispatchNo = selectedDispatchNo.dispatchNo; |
| | | form.value.customerName = selectedDispatchNo.customerName; |
| | | form.value.projectName = selectedDispatchNo.projectName; |
| | | form.value.currency = '人民币'; |
| | | dialog.visible = false; |
| | | } |
| | | |
| | | /* */ |
| | | // 处理附件分页页码变化 |
| | | const handleAttachmentCurrentChange = (currentPage: number) => { |
| | | newForm.value.pageNum = currentPage; |
| | | getEstimatedReceivableCancel(); |
| | | } |
| | | // 处理附件分页大小变化 |
| | | const handleAttachmentSizeChange = (pageSize: number) => { |
| | | newForm.value.pageSize = pageSize; |
| | | getEstimatedReceivableCancel(); |
| | | } |
| | | const newOnLoad = () => { |
| | | getEstimatedReceivableCancel() |
| | | } |
| | | // 加载附件数据的函数 |
| | | const loadAttachmentData = () => { |
| | | itemTableLoading2.value = true; |
| | | listPendingSettlementBusiness(newForm.value).then((res) => { |
| | | if (res.code === 200) { |
| | | dialog.visible = true; |
| | | dialog.title = '选择调度单号'; |
| | | newTableData.value = res.rows || []; |
| | | newPageF.value.total = res.total || 0; |
| | | } |
| | | itemTableLoading2.value = false; |
| | | }) |
| | | |
| | | } |
| | | const getEstimatedReceivableCancel = () => { |
| | | itemTableLoading2.value = true; |
| | | listPendingSettlementBusiness(newForm.value).then((res) => { |
| | | if (res.code === 200) { |
| | | newTableData.value = res.rows || []; |
| | | newPageF.value.total = res.total || 0; |
| | | } |
| | | itemTableLoading2.value = false; |
| | | }) |
| | | } |
| | | const newSearchChange = (params, done) => { |
| | | itemTableLoading2.value = true; |
| | | listPendingSettlementBusiness(newForm.value).then((res) => { |
| | | if (res.code === 200) { |
| | | done() |
| | | newTableData.value = res.rows || []; |
| | | newPageF.value.total = res.total || 0; |
| | | } |
| | | itemTableLoading2.value = false; |
| | | }) |
| | | } |
| | | const newRsetChange = (done) => { |
| | | getEstimatedReceivableCancel() |
| | | } |
| | | // 附件表格加载事件 |
| | | const attachmentChange = () => { |
| | | // loadAttachmentData(); |
| | | } |
| | | /* */ |
| | | const cancel = () => { |
| | | dialog.visible = false; |
| | | newForm.value = { |
| | | pageNum: 1, |
| | | pageSize: 10 |
| | | } |
| | | newTableData.value = []; |
| | | } |
| | | const handleCancel = (row: any) => { |
| | | |
| | | proxy.$modal.confirm(`是否取消确认该调度单号 :${row.dispatchNo}?`).then(function () { |
| | | return getCwglEstimatedReceivableCancel(row.id); |
| | | }).then((res) => { |
| | | if (res.code == 200) { |
| | | console.log(res); |
| | | |
| | | onLoad(page.value); |
| | | proxy.$modal.msgSuccess(res.msg); |
| | | } |
| | | }) |
| | | } |
| | | const handleAffirm = (row: any) => { |
| | | proxy.$modal.confirm(`是否确认该调度单号 :${row.dispatchNo}?`).then(function () { |
| | | return getEstimatedReceivableConfirm(row.id); |
| | | }).then((res) => { |
| | | onLoad(page.value); |
| | | |
| | | proxy.$modal.msgSuccess(res.msg); |
| | | }) |
| | | |
| | | } |
| | | |
| | | const handleInvalid = (row: any) => { |
| | | proxy.$modal.confirm(`是否作废该调度单号 :${row.dispatchNo}?`).then(function () { |
| | | return getEstimatedReceivableInvalid(row.id); |
| | | }).then((res) => { |
| | | onLoad(page.value); |
| | | |
| | | proxy.$modal.msgSuccess(res.msg); |
| | | }) |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | const flowLogIshow = ref() |
| | | const flowParams = ref([]) |
| | | |
| | | const handleFlow = (row: string) => { |
| | | let data = { |
| | | estimatedId: row.id, |
| | | } |
| | | listEstimatedReceivableLog(data).then((res) => { |
| | | flowParams.value = res.rows |
| | | flowLogIshow.value.openModel() |
| | | |
| | | }) |
| | | } |
| | | </script> |
| | |
| | | <template> |
| | | <basicContainer > |
| | | <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" |
| | | @size-change="sizeChange" |
| | | @on-load="onLoad" |
| | | > |
| | | <basicContainer> |
| | | <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" |
| | | @size-change="sizeChange" @on-load="onLoad"> |
| | | <template #menu-left> |
| | | <el-button |
| | | type="success" |
| | | icon="Edit" |
| | | :disabled="pageF.single" |
| | | v-hasPermi="['cwgl:estimatedReceivableBill:edit']" |
| | | @click="handleUpdate">修改 |
| | | <!-- <el-button type="success" icon="Edit" :disabled="pageF.single" |
| | | v-hasPermi="['cwgl:estimatedReceivableBill:edit']" @click="handleUpdate">修改 |
| | | </el-button> --> |
| | | <!-- <el-button type="danger" icon="Delete" :disabled="pageF.multiple" @click="handleDelete" |
| | | v-hasPermi="['cwgl:estimatedReceivableBill:remove']">删除 |
| | | </el-button> |
| | | <el-button |
| | | type="danger" |
| | | icon="Delete" |
| | | :disabled="pageF.multiple" |
| | | @click="handleDelete" |
| | | v-hasPermi="['cwgl:estimatedReceivableBill:remove']" |
| | | >删除 |
| | | </el-button> |
| | | <el-button |
| | | type="warning" |
| | | plain |
| | | icon="Download" |
| | | @click="handleExport" |
| | | v-hasPermi="['cwgl:estimatedReceivableBill:export']" |
| | | >导出 |
| | | </el-button> |
| | | <el-button type="warning" plain icon="Download" @click="handleExport" |
| | | v-hasPermi="['cwgl:estimatedReceivableBill:export']">导出 |
| | | </el-button> --> |
| | | </template> |
| | | <template #billSystemNo="{ size, row, index }"> |
| | | |
| | | <el-link class="link-btn" type="primary" :underline="false" plain @click="handleBillSystemNo(row)"> |
| | | {{ row.billSystemNo }} |
| | | </el-link> |
| | | </template> |
| | | |
| | | |
| | | <template #menu="{ size, row, index }"> |
| | | |
| | | <el-link class="link-btn" type="primary" v-if="[0, 1].includes(row.status)" :underline="false" plain |
| | | @click="handleclose(row)" v-hasPermi="['cwgl:estimatedReceivableBill:confirm']"> 结算 |
| | | </el-link> |
| | | <el-link class="link-btn" type="primary" v-if="[0].includes(row.status)" :underline="false" plain |
| | | @click="handleAmend(row)" v-hasPermi="['cwgl:estimatedReceivableBill:invalid']"> 修改 |
| | | </el-link> |
| | | <el-link class="link-btn" type="primary" :underline="false" plain @click="handleFlow(row)" |
| | | v-hasPermi="['cwgl:estimatedReceivableBill:flog']"> 日志 |
| | | </el-link> |
| | | </template> |
| | | </avue-crud> |
| | | </basicContainer> |
| | | |
| | | |
| | | <el-dialog v-model="dialog.visible" :title="dialog.title" width="1200px"> |
| | | <el-form ref="newFormRef" v-if="!dispIshow && noIshow" :model="newForm" :rules="rules" label-width="120px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="本次结算金额" prop="settlementAmount"> |
| | | <el-input v-model="newForm.settlementAmount" placeholder="请输入本次结算金额" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="备注" prop="remark"> |
| | | <el-input v-model="newForm.remark" :rows="2" type="textarea" placeholder="请输入备注" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="附件" prop="attachment"> |
| | | <FileUpload v-model="newForm.attachment" :isShowTip="false" |
| | | :fileType="['pdf', 'bmp', 'gif', 'jpg', 'jpeg', 'png']"></FileUpload> |
| | | 支持文件类型: pdf,bmp,gif,jpg,jpeg,png' |
| | | </el-form-item> |
| | | </el-col> |
| | | |
| | | </el-row> |
| | | |
| | | </el-form> |
| | | |
| | | <div v-if="!dispIshow && noIshow" style="text-align: center;margin-top: 20px;"> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | <el-button type="primary" @click="submitForm">确 定</el-button> |
| | | </div> |
| | | |
| | | |
| | | <h2 style="margin: 15px;font-size: 15px;"> |
| | | 账单基本信息 |
| | | </h2> |
| | | <el-form ref="storagesTransferRef" :model="newObjForm" label-width="120px"> |
| | | <el-descriptions class="margin-top" title="" :column="3" border> |
| | | <el-descriptions-item label="账单系统编号" align="center"> |
| | | {{ importForm.billSystemNo }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="账单名称" align="center"> |
| | | <el-input v-if="dispIshow" v-model="importForm.billName" placeholder="请输入账单名称" /> |
| | | <span v-if="!dispIshow"> {{ importForm.billName }}</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="客户名称" align="center"> |
| | | {{ importForm.customerName }} |
| | | </el-descriptions-item> |
| | | |
| | | <el-descriptions-item label="应结算金额" align="center"> |
| | | {{ importForm.totalAmount }} |
| | | </el-descriptions-item> |
| | | |
| | | <el-descriptions-item v-if="!dispIshow" label="已结算金额" align="center"> |
| | | {{ importForm.settledAmount }} |
| | | </el-descriptions-item> |
| | | |
| | | <el-descriptions-item v-if="!dispIshow" label="待结算金额" align="center"> |
| | | <span v-if="importForm.totalAmount == 0">0</span> |
| | | <span v-else>{{ (importForm.totalAmount - importForm.settledAmount).toFixed(2) }}</span> |
| | | </el-descriptions-item> |
| | | |
| | | <el-descriptions-item v-if="dispIshow" label="" align="center"> |
| | | </el-descriptions-item> |
| | | |
| | | <el-descriptions-item v-if="dispIshow" label="" align="center"> |
| | | </el-descriptions-item> |
| | | |
| | | </el-descriptions> |
| | | </el-form> |
| | | |
| | | <div v-if="dispIshow" style="text-align: center;margin-top: 20px;"> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | <el-button type="primary" @click="submitFormTow">确 定</el-button> |
| | | </div> |
| | | <h2 style="margin: 15px;font-size: 15px;"> |
| | | 关联明细 |
| | | </h2> |
| | | <avue-crud :option="newOption" :data="newTableData" v-model:search="newFormData" :page="newPageF" |
| | | :table-loading="itemTableLoading2" @search-change="newSearchChange" ref="newTableRef" |
| | | @search-reset="newRsetChange" @current-change="handleAttachmentCurrentChange" |
| | | @size-change="handleAttachmentSizeChange" @on-load="newOnLoad"> |
| | | |
| | | <template #menu="{ size, row, index }"> |
| | | <el-link class="link-btn" type="primary" :underline="false" plain @click="handleRelevance(row)" |
| | | v-hasPermi="['cwgl:estimatedReceivableBill:relevancy']"> 取消关联 |
| | | </el-link> |
| | | </template> |
| | | |
| | | </avue-crud> |
| | | |
| | | |
| | | <div v-if="!noIshow" style="text-align: right;margin-top: 20px;"> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | |
| | | </el-dialog> |
| | | |
| | | <flowLog ref="flowLogIshow" :fileNameIshow="true" :flowParams="flowParams"></flowLog> |
| | | |
| | | |
| | | </template> |
| | | |
| | | <script setup name="estimatedReceivableBill" lang="ts"> |
| | | import {EstimatedReceivableBillI,addEstimatedReceivableBill, delEstimatedReceivableBill, exportEstimatedReceivableBill, getEstimatedReceivableBill, listEstimatedReceivableBill, updateEstimatedReceivableBill} from "@/api/cwgl/estimatedReceivableBill"; |
| | | import useCurrentInstance from "@/utils/useCurrentInstance"; |
| | | import {computed,reactive, ref, toRefs} from "vue"; |
| | | import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface"; |
| | | import {usePagePlus} from "@/hooks/usePagePlus"; |
| | | import {hasPermission} from "@/utils/permissionUtils"; |
| | | import { |
| | | EstimatedReceivableBillI, addEstimatedReceivableBill, delEstimatedReceivableBill, exportEstimatedReceivableBill, getEstimatedReceivableBill, listEstimatedReceivableBill, updateEstimatedReceivableBill, |
| | | estimatedReceivableBillSettlement, addEstimatedReceivableLog, cancelRelevancy, listEstimatedReceivableBillLog, updateEstimatedReceivableBillNmae |
| | | } from "@/api/cwgl/estimatedReceivableBill"; |
| | | import useCurrentInstance from "@/utils/useCurrentInstance"; |
| | | import { computed, reactive, ref, toRefs } from "vue"; |
| | | import { PagesInterface, PageQueryInterface } from "@/utils/globalInterface"; |
| | | import { usePagePlus } from "@/hooks/usePagePlus"; |
| | | import { hasPermission } from "@/utils/permissionUtils"; |
| | | import { |
| | | getPendingSettlementBusiness, listPendingSettlementBusiness |
| | | } from "@/api/cwgl/pendingSettlementBusiness"; |
| | | const { proxy } = useCurrentInstance(); |
| | | const crudRef = ref(); |
| | | |
| | | const { proxy } = useCurrentInstance(); |
| | | const crudRef = ref(); |
| | | const permissionList = computed(() => { |
| | | return { |
| | | addBtn: hasPermission(["cwgl:estimatedReceivableBill:add"]), |
| | | delBtn: hasPermission(["cwgl:estimatedReceivableBill:remove"]), |
| | | editBtn: hasPermission(["cwgl:estimatedReceivableBill:edit"]), |
| | | viewBtn: hasPermission(["cwgl:estimatedReceivableBill:query"]), |
| | | } |
| | | }) |
| | | const dispIshow = ref(false) |
| | | const data = reactive({ |
| | | form: <EstimatedReceivableBillI>{}, |
| | | queryParams: <EstimatedReceivableBillI & PageQueryInterface>{}, |
| | | page: <PagesInterface>{ |
| | | pageSize: 10, |
| | | total: 0, |
| | | currentPage: 1, |
| | | }, |
| | | selectionList: [], |
| | | newForm: <EstimatedReceivableI>{ |
| | | pageNum: 1, |
| | | pageSize: 10 |
| | | }, |
| | | importForm: {}, |
| | | newTableData: [], |
| | | newFormData: { |
| | | pageNum: 1, |
| | | pageSize: 10 |
| | | }, |
| | | itemTableLoading2: false, |
| | | rules: { |
| | | settlementAmount: [ |
| | | { required: true, message: '请输入本次结算金额', trigger: 'blur' } |
| | | ], |
| | | |
| | | const permissionList = computed(()=>{ |
| | | return { |
| | | addBtn: hasPermission(["cwgl:estimatedReceivableBill:add"]), |
| | | delBtn: hasPermission(["cwgl:estimatedReceivableBill:remove"]), |
| | | editBtn: hasPermission(["cwgl:estimatedReceivableBill:edit"]), |
| | | viewBtn: hasPermission(["cwgl:estimatedReceivableBill:query"]), |
| | | } |
| | | }) |
| | | }, |
| | | }) |
| | | const { queryParams, form, page, selectionList, newForm, importForm, newTableData, itemTableLoading2, newFormData, rules } = toRefs(data); |
| | | const option = ref({ |
| | | pageKey: 'EstimatedReceivableBill', |
| | | rowKey: 'id', |
| | | |
| | | const data = reactive({ |
| | | form:<EstimatedReceivableBillI>{}, |
| | | queryParams:<EstimatedReceivableBillI&PageQueryInterface>{}, |
| | | page: <PagesInterface>{ |
| | | pageSize: 10, |
| | | total: 0, |
| | | currentPage: 1, |
| | | searchSpan: 5, |
| | | editDisplay: false, |
| | | |
| | | addBtn: false, |
| | | editBtn: false, |
| | | delBtn: false, |
| | | viewBtn: false, |
| | | |
| | | searchLabelWidth: 100, |
| | | labelWidth: 120, |
| | | |
| | | column: { |
| | | // id: { |
| | | // label: 'ID', |
| | | // }, |
| | | billSystemNo: { |
| | | label: '账单系统编号', |
| | | search: true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "账单系统编号不能为空", trigger: "blur" |
| | | } |
| | | ], |
| | | }, |
| | | selectionList:[], |
| | | }) |
| | | const {queryParams,form,page,selectionList} = toRefs(data); |
| | | const option = ref({ |
| | | pageKey: 'EstimatedReceivableBill', |
| | | rowKey: 'id', |
| | | column: { |
| | | id: { |
| | | label: 'ID', |
| | | }, |
| | | billSystemNo: { |
| | | label: '账单系统编号', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "账单系统编号不能为空", trigger: "blur" } |
| | | ], }, |
| | | billName: { |
| | | label: '账单名称', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "账单名称不能为空", trigger: "blur" } |
| | | ], }, |
| | | customerName: { |
| | | label: '客户名称', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "客户名称不能为空", trigger: "blur" } |
| | | ], }, |
| | | dispatchCount: { |
| | | label: '调度单数量', |
| | | }, |
| | | totalAmount: { |
| | | label: '应结算金额', |
| | | }, |
| | | settledAmount: { |
| | | label: '已结算金额', |
| | | }, |
| | | invoiceStatus: { |
| | | label: '开票状态', |
| | | }, |
| | | attachment: { |
| | | label: '附件地址', |
| | | type: 'textarea', minRows: 3, maxRows: 5, |
| | | }, |
| | | status: { |
| | | label: '状态', |
| | | }, |
| | | remark: { |
| | | label: '备注', |
| | | type: 'textarea', minRows: 3, maxRows: 5, |
| | | }, |
| | | createBy: { |
| | | label: '创建人', |
| | | }, |
| | | confirmTime: { |
| | | label: '确认时间', |
| | | }, |
| | | createTime: { |
| | | label: '创建时间', |
| | | }, |
| | | updateTime: { |
| | | label: '更新时间', |
| | | }, |
| | | deleted: { |
| | | label: '删除标记(0:正常;1:删除)', |
| | | }, |
| | | } |
| | | }) |
| | | billName: { |
| | | label: '账单名称', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "账单名称不能为空", trigger: "blur" |
| | | } |
| | | ], |
| | | }, |
| | | customerName: { |
| | | label: '客户名称', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "客户名称不能为空", trigger: "blur" |
| | | } |
| | | ], |
| | | search: true, |
| | | }, |
| | | |
| | | const { tableData,pageF,rowSave,rowUpdate,rowDel,beforeOpen,searchChange, |
| | | searchReset,selectionChange,onLoad,currentChange,sizeChange,handleDelete,handleExport,handleUpdate,refreshChange} = usePagePlus({ |
| | | form:form, |
| | | option:option, |
| | | queryParams:queryParams, |
| | | idKey:'id', |
| | | page:page.value, |
| | | getListApi:listEstimatedReceivableBill, |
| | | getDetailApi:getEstimatedReceivableBill, |
| | | exportApi:exportEstimatedReceivableBill, |
| | | deleteApi:delEstimatedReceivableBill, |
| | | addApi:addEstimatedReceivableBill, |
| | | updateApi:updateEstimatedReceivableBill, |
| | | handleUpdateFunc:()=>{ |
| | | dispatchCount: { |
| | | label: '调度单数量', |
| | | }, |
| | | totalAmount: { |
| | | label: '应结算金额', |
| | | }, |
| | | settledAmount: { |
| | | label: '已结算金额', |
| | | }, |
| | | invoiceStatus: { |
| | | label: '开票状态', |
| | | search: true, |
| | | dataType: 'string', |
| | | type: 'select', |
| | | dicUrl: '/system/dict/data/type/sys_ticket_status', |
| | | }, |
| | | // attachment: { |
| | | // label: '附件地址', |
| | | // type: 'textarea', minRows: 3, maxRows: 5, |
| | | // }, |
| | | status: { |
| | | label: '状态', |
| | | search: true, |
| | | dataType: 'string', |
| | | type: 'select', |
| | | dicUrl: '/system/dict/data/type/sys_final_statement_status', |
| | | }, |
| | | // remark: { |
| | | // label: '备注', |
| | | // type: 'textarea', minRows: 3, maxRows: 5, |
| | | // }, |
| | | // createBy: { |
| | | // label: '创建人', |
| | | // }, |
| | | // confirmTime: { |
| | | // label: '确认时间', |
| | | // }, |
| | | // createTime: { |
| | | // label: '创建时间', |
| | | // }, |
| | | // updateTime: { |
| | | // label: '更新时间', |
| | | // }, |
| | | // deleted: { |
| | | // label: '删除标记(0:正常;1:删除)', |
| | | // }, |
| | | } |
| | | }) |
| | | |
| | | const newOption = ref({ |
| | | pageKey: 'PendingSettlementBusiness', |
| | | rowKey: 'id', |
| | | searchSpan: 5, |
| | | selectionType: 'single', |
| | | selectType: 'radio', |
| | | editDisplay: false, |
| | | addBtn: false, |
| | | editBtn: false, |
| | | selection: false, |
| | | delBtn: false, |
| | | menu: false, |
| | | viewBtn: false, |
| | | header: false, |
| | | // searchLabelWidth: 100, |
| | | // labelWidth: 120, |
| | | column: { |
| | | projectName: { |
| | | label: '项目名称1', |
| | | }, |
| | | dispatchNo: { |
| | | label: '调度单号', |
| | | }, |
| | | createdTime: { |
| | | label: '下单时间', |
| | | }, |
| | | estimatedTotalIncome: { |
| | | label: '预估应收金额', |
| | | }, |
| | | currency: { |
| | | label: '币制', |
| | | }, |
| | | // customerName: { |
| | | // label: '客户名称', |
| | | // search: true, |
| | | // }, |
| | | |
| | | |
| | | } |
| | | }) |
| | | const { tableData, pageF, rowSave, rowUpdate, rowDel, beforeOpen, searchChange, |
| | | searchReset, selectionChange, onLoad, currentChange, sizeChange, handleDelete, handleExport, handleUpdate, refreshChange } = usePagePlus({ |
| | | form: form, |
| | | option: option, |
| | | queryParams: queryParams, |
| | | idKey: 'id', |
| | | page: page.value, |
| | | getListApi: listEstimatedReceivableBill, |
| | | getDetailApi: getEstimatedReceivableBill, |
| | | exportApi: exportEstimatedReceivableBill, |
| | | deleteApi: delEstimatedReceivableBill, |
| | | addApi: addEstimatedReceivableBill, |
| | | updateApi: updateEstimatedReceivableBill, |
| | | handleUpdateFunc: () => { |
| | | crudRef.value.rowEdit(selectionList.value[0]); |
| | | }, |
| | | handleSelectionChangeFunc:(selection:any)=>{ |
| | | handleSelectionChangeFunc: (selection: any) => { |
| | | selectionList.value = selection; |
| | | } |
| | | }) |
| | | const dialog = reactive({ |
| | | visible: false, |
| | | title: '', |
| | | }) |
| | | const newTableRef = ref(); |
| | | const handleclose = (row) => { |
| | | newFormData.value.billId = row.id; |
| | | dispIshow.value = false; |
| | | newOption.value.menu = false; |
| | | noIshow.value = true; |
| | | listPendingSettlementBusiness({ billId: row.id }).then((res) => { |
| | | if (res.code === 200) { |
| | | newForm.value.id = row.id; |
| | | importForm.value = row; |
| | | dialog.visible = true; |
| | | newPageF.value.total = res.total || 0; |
| | | newTableData.value = res.rows || []; |
| | | newTableData.value.map(item => { |
| | | item.currency = '人民币'; |
| | | }); |
| | | newTableRef.value.refreshTable(); |
| | | dialog.title = '应收账单结算'; |
| | | } |
| | | }) |
| | | |
| | | // crudRef.value.close(); |
| | | } |
| | | |
| | | const handleAmend = (row) => { |
| | | newFormData.value.billId = row.id; |
| | | dispIshow.value = true; |
| | | newOption.value.menu = true; |
| | | listPendingSettlementBusiness({ billId: row.id }).then((res) => { |
| | | if (res.code === 200) { |
| | | newForm.value.id = row.id; |
| | | importForm.value = row; |
| | | dialog.visible = true; |
| | | newPageF.value.total = res.total || 0; |
| | | newTableData.value = res.rows || []; |
| | | newTableData.value.map(item => { |
| | | item.currency = '人民币'; |
| | | }); |
| | | newTableRef.value.refreshTable(); |
| | | dialog.title = '应收账单修改'; |
| | | } |
| | | }) |
| | | } |
| | | const noIshow = ref(false) |
| | | const handleBillSystemNo = (row) => { |
| | | newFormData.value.billId = row.id; |
| | | dispIshow.value = false; |
| | | noIshow.value = false; |
| | | newOption.value.menu = false; |
| | | listPendingSettlementBusiness({ billId: row.id }).then((res) => { |
| | | if (res.code === 200) { |
| | | importForm.value = row; |
| | | dialog.visible = true; |
| | | dialog.title = '账单详情'; |
| | | newPageF.value.total = res.total || 0; |
| | | newTableData.value = res.rows || []; |
| | | newTableData.value.map(item => { |
| | | item.currency = '人民币'; |
| | | }); |
| | | newTableRef.value.refreshTable(); |
| | | } |
| | | }) |
| | | } |
| | | const newFormRef = ref(); |
| | | const submitForm = () => { |
| | | newFormRef.value!.validate(valid => { |
| | | if (valid) { |
| | | let data = { |
| | | billId: newForm.value.id, |
| | | fileName: newForm.value.attachment |
| | | } |
| | | addEstimatedReceivableLog(data).then((res1) => { |
| | | if (res1.code === 200) { |
| | | estimatedReceivableBillSettlement(newForm.value).then((res) => { |
| | | if (res.code === 200) { |
| | | proxy.$message.success('操作成功'); |
| | | dialog.visible = false; |
| | | newForm.value = {}; |
| | | |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | }); |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | const submitFormTow = () => { |
| | | proxy.$modal.confirm(`是否确认修改账单名称?`).then(function () { |
| | | return updateEstimatedReceivableBillNmae(newForm.value); |
| | | }).then((res) => { |
| | | proxy.$modal.msgSuccess(res.msg); |
| | | }) |
| | | |
| | | } |
| | | const storagesTransferRef = ref(); |
| | | const cancel = () => { |
| | | newForm.value = {}; |
| | | dialog.visible = false; |
| | | proxy.resetForm(storagesTransferRef.value) |
| | | } |
| | | |
| | | |
| | | const newPageF = ref<PagesInterface>({ |
| | | total: 0, |
| | | pageSize: 10 |
| | | }) |
| | | |
| | | const newSearchChange = (params, done) => { |
| | | // itemTableLoading2.value = true; |
| | | // listPendingSettlementBusiness(newForm.value).then((res) => { |
| | | // if (res.code === 200) { |
| | | // done() |
| | | // newTableData.value = res.rows || []; |
| | | // newPageF.value.total = res.total || 0; |
| | | // } |
| | | // itemTableLoading2.value = false; |
| | | // }) |
| | | } |
| | | const newRsetChange = (done) => { |
| | | getEstimatedReceivableCancel() |
| | | } |
| | | // 处理附件分页页码变化 |
| | | const handleAttachmentCurrentChange = (currentPage: number) => { |
| | | newFormData.value.pageNum = currentPage; |
| | | getEstimatedReceivableCancel(); |
| | | } |
| | | // 处理附件分页大小变化 |
| | | const handleAttachmentSizeChange = (pageSize: number) => { |
| | | newFormData.value.pageSize = pageSize; |
| | | getEstimatedReceivableCancel(); |
| | | } |
| | | const newOnLoad = (newPageF) => { |
| | | getEstimatedReceivableCancel(newPageF); |
| | | } |
| | | const getEstimatedReceivableCancel = () => { |
| | | itemTableLoading2.value = true; |
| | | listPendingSettlementBusiness(newFormData.value).then((res) => { |
| | | if (res.code === 200) { |
| | | newTableData.value = res.rows || []; |
| | | newTableData.value.map(item => { |
| | | item.currency = '人民币'; |
| | | }); |
| | | newTableRef.value.refreshTable(); |
| | | newPageF.value.total = res.total || 0; |
| | | } |
| | | itemTableLoading2.value = false; |
| | | }) |
| | | } |
| | | |
| | | const handleRelevance = (row) => { |
| | | proxy.$modal.confirm(`是否取消关联成功该调度号 :${row.dispatchNo}?`).then(function () { |
| | | return cancelRelevancy(row.id); |
| | | }).then((res) => { |
| | | newOnLoad(newPageF.value); |
| | | proxy.$modal.msgSuccess(res.msg); |
| | | }) |
| | | |
| | | } |
| | | |
| | | const flowLogIshow = ref() |
| | | const flowParams = ref([]) |
| | | const handleFlow = (row: string) => { |
| | | let data = { |
| | | estimatedId: row.id, |
| | | } |
| | | listEstimatedReceivableBillLog(data).then((res) => { |
| | | flowParams.value = res.rows |
| | | flowLogIshow.value.openModel() |
| | | |
| | | }) |
| | | } |
| | | </script> |
| | | <style scoped> |
| | | ::v-deep .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell { |
| | | border: var(--el-descriptions-table-border); |
| | | padding: 8px 11px; |
| | | width: 200px; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <basicContainer > |
| | | <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" |
| | | @size-change="sizeChange" |
| | | @on-load="onLoad" |
| | | > |
| | | <basicContainer> |
| | | <avue-crud :option="option" v-model:search="queryParams" :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" @size-change="sizeChange" @on-load="onLoad"> |
| | | |
| | | <template #menu-left> |
| | | <el-button |
| | | type="success" |
| | | icon="Edit" |
| | | :disabled="pageF.single" |
| | | v-hasPermi="['cwgl:pendingSettlementBusiness:edit']" |
| | | @click="handleUpdate">修改 |
| | | <el-button type="success" :disabled="generateDisabled" @click="handleGenerate" |
| | | v-hasPermi="['cwgl:pendingSettlementBusiness:add']">生成账单 |
| | | </el-button> |
| | | <el-button |
| | | type="danger" |
| | | icon="Delete" |
| | | :disabled="pageF.multiple" |
| | | @click="handleDelete" |
| | | v-hasPermi="['cwgl:pendingSettlementBusiness:remove']" |
| | | >删除 |
| | | <!-- <el-button type="success" icon="Edit" :disabled="pageF.single" |
| | | v-hasPermi="['cwgl:pendingSettlementBusiness:edit']" @click="handleUpdate">修改 |
| | | </el-button> --> |
| | | <!-- <el-button type="danger" icon="Delete" :disabled="pageF.multiple" @click="handleDelete" |
| | | v-hasPermi="['cwgl:pendingSettlementBusiness:remove']">删除 |
| | | </el-button> --> |
| | | <el-button type="warning" plain icon="Download" @click="handleExport" |
| | | v-hasPermi="['cwgl:pendingSettlementBusiness:export']">导出 |
| | | </el-button> |
| | | <el-button |
| | | type="warning" |
| | | plain |
| | | icon="Download" |
| | | @click="handleExport" |
| | | v-hasPermi="['cwgl:pendingSettlementBusiness:export']" |
| | | >导出 |
| | | </el-button> |
| | | |
| | | </template> |
| | | <template #menu="{ size, row, index }"> |
| | | <el-link class="link-btn" type="primary" :underline="false" plain :size="size" @click="handleFy(row)" |
| | | v-hasPermi="['cwgl:pendingSettlementBusiness:query']"> 费用明细 |
| | | </el-link> |
| | | </template> |
| | | </avue-crud> |
| | | |
| | | <el-dialog v-model="dialog.visible" :title="dialog.title" width="1000px"> |
| | | <el-form ref="storagesTransferRef" :model="form" :rules="rules" label-width="120px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="账单名称" prop="billName"> |
| | | <el-input v-model="form.billName" placeholder="请输入账单名称" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="客户名称" prop="customerName"> |
| | | <el-input v-model="form.customerName" disabled placeholder="请输入客户名称" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="调度单数量" prop="count"> |
| | | <el-input-number v-model="form.count" disabled :min="0" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="结算金额" prop="price"> |
| | | <el-input-number v-model="form.price" disabled :min="0" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">确 定</el-button> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | </template> |
| | | |
| | | </el-dialog> |
| | | |
| | | |
| | | <el-dialog v-model="dialog.detail" :title="dialog.title" width="1000px"> |
| | | <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick"> |
| | | <el-tab-pane label="成本" name="first"></el-tab-pane> |
| | | <el-tab-pane label="收入" name="second"></el-tab-pane> |
| | | </el-tabs> |
| | | <el-table :data="tableDataList" show-summary :summary-method="getSummaries" style="width: 100%"> |
| | | <el-table-column prop="feeName" label="费用名称" /> |
| | | <el-table-column prop="estimatedAmount" label="费用金额" /> |
| | | <el-table-column prop="currency" label="费用币制" /> |
| | | </el-table> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | </template> |
| | | |
| | | </el-dialog> |
| | | |
| | | |
| | | |
| | | |
| | | </basicContainer> |
| | | </template> |
| | | |
| | | <script setup name="pendingSettlementBusiness" lang="ts"> |
| | | import {PendingSettlementBusinessI,addPendingSettlementBusiness, delPendingSettlementBusiness, exportPendingSettlementBusiness, getPendingSettlementBusiness, listPendingSettlementBusiness, updatePendingSettlementBusiness} from "@/api/cwgl/pendingSettlementBusiness"; |
| | | import useCurrentInstance from "@/utils/useCurrentInstance"; |
| | | import {computed,reactive, ref, toRefs} from "vue"; |
| | | import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface"; |
| | | import {usePagePlus} from "@/hooks/usePagePlus"; |
| | | import {hasPermission} from "@/utils/permissionUtils"; |
| | | import { |
| | | PendingSettlementBusinessI, addPendingSettlementBusiness, delPendingSettlementBusiness, exportPendingSettlementBusiness, getPendingSettlementBusiness, listPendingSettlementBusiness, updatePendingSettlementBusiness, |
| | | getPendingSettlementBusinessBill, getCwglPendingSettlementBusinessBillList, getSelectCustomNam, cwglPendingSettlementBusinessCreateBill, pendingSettlementBusinessCreateBillList |
| | | } from "@/api/cwgl/pendingSettlementBusiness"; |
| | | import { listEstimatedReceivable } from "@/api/cwgl/estimatedReceivable"; |
| | | |
| | | const { proxy } = useCurrentInstance(); |
| | | const crudRef = ref(); |
| | | |
| | | const permissionList = computed(()=>{ |
| | | return { |
| | | addBtn: hasPermission(["cwgl:pendingSettlementBusiness:add"]), |
| | | delBtn: hasPermission(["cwgl:pendingSettlementBusiness:remove"]), |
| | | editBtn: hasPermission(["cwgl:pendingSettlementBusiness:edit"]), |
| | | viewBtn: hasPermission(["cwgl:pendingSettlementBusiness:query"]), |
| | | import useCurrentInstance from "@/utils/useCurrentInstance"; |
| | | import { computed, reactive, ref, toRefs } from "vue"; |
| | | import { PagesInterface, PageQueryInterface } from "@/utils/globalInterface"; |
| | | import { usePagePlus } from "@/hooks/usePagePlus"; |
| | | import { hasPermission } from "@/utils/permissionUtils"; |
| | | |
| | | const { proxy } = useCurrentInstance(); |
| | | const crudRef = ref(); |
| | | |
| | | const permissionList = computed(() => { |
| | | return { |
| | | addBtn: hasPermission(["cwgl:pendingSettlementBusiness:add"]), |
| | | delBtn: hasPermission(["cwgl:pendingSettlementBusiness:remove"]), |
| | | editBtn: hasPermission(["cwgl:pendingSettlementBusiness:edit"]), |
| | | viewBtn: hasPermission(["cwgl:pendingSettlementBusiness:query"]), |
| | | generate: hasPermission(["cwgl:pendingSettlementBusiness:generate"]), |
| | | |
| | | } |
| | | }) |
| | | |
| | | const data = reactive({ |
| | | form: <PendingSettlementBusinessI & any>{ |
| | | billName: '', |
| | | customerNa: '', |
| | | count: 0, |
| | | price: 0 |
| | | }, |
| | | selectCustomName: [], |
| | | queryParams: <PendingSettlementBusinessI & PageQueryInterface>{}, |
| | | page: <PagesInterface>{ |
| | | pageSize: 10, |
| | | total: 0, |
| | | currentPage: 1, |
| | | }, |
| | | selectionList: [], |
| | | tableDataList: [], |
| | | rules: { |
| | | billName: [ |
| | | { required: true, message: '账单名称不能为空', trigger: 'blur' } |
| | | ], |
| | | }, |
| | | generateDisabled: false, // 控制生成账单按钮的禁用状态 |
| | | }) |
| | | const { queryParams, form, page, selectionList, generateDisabled, rules, tableDataList, |
| | | selectCustomName |
| | | } = toRefs(data); |
| | | const getSelectCustomName = () => { |
| | | getSelectCustomNam().then((res) => { |
| | | if (res.code === 200) { |
| | | // selectCustomName.value = res.data; |
| | | selectCustomName.value = res.data.map(item => ({ |
| | | dictLabel: item, |
| | | dictValue: item |
| | | })); |
| | | option.value.column.customerName.dicData = selectCustomName.value || []; |
| | | } |
| | | }) |
| | | |
| | | const data = reactive({ |
| | | form:<PendingSettlementBusinessI>{}, |
| | | queryParams:<PendingSettlementBusinessI&PageQueryInterface>{}, |
| | | page: <PagesInterface>{ |
| | | pageSize: 10, |
| | | total: 0, |
| | | currentPage: 1, |
| | | } |
| | | getSelectCustomName() |
| | | const option = ref({ |
| | | pageKey: 'PendingSettlementBusiness', |
| | | rowKey: 'id', |
| | | addBtn: false, |
| | | generateDisabled: true, |
| | | editBtn: false, |
| | | delBtn: false, |
| | | viewBtn: false, |
| | | selection: true, |
| | | generate: false, |
| | | searchSpan: 5, |
| | | searchLabelWidth: 100, |
| | | column: { |
| | | // id: { |
| | | // label: 'ID', |
| | | // }, |
| | | projectName: { |
| | | fixed: 'left', |
| | | label: '项目名称', search: true, |
| | | }, |
| | | selectionList:[], |
| | | }) |
| | | const {queryParams,form,page,selectionList} = toRefs(data); |
| | | const option = ref({ |
| | | pageKey: 'PendingSettlementBusiness', |
| | | rowKey: 'id', |
| | | column: { |
| | | id: { |
| | | label: 'ID', |
| | | }, |
| | | bookingNo: { |
| | | label: '客户订单号', |
| | | }, |
| | | customerId: { |
| | | label: '客户id', |
| | | }, |
| | | carrierId: { |
| | | label: '承运商id', |
| | | }, |
| | | projectName: { |
| | | label: '项目名称', |
| | | }, |
| | | dispatchNo: { |
| | | label: '调度单号', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "调度单号不能为空", trigger: "blur" } |
| | | ], }, |
| | | createdTime: { |
| | | label: '下单时间', |
| | | }, |
| | | transportMode: { |
| | | label: '运输方式', |
| | | }, |
| | | productId: { |
| | | label: '服务产品', |
| | | }, |
| | | customerName: { |
| | | label: '客户名称', |
| | | }, |
| | | operationMode: { |
| | | label: '运营模式', |
| | | }, |
| | | carrierName: { |
| | | label: '承运商', |
| | | }, |
| | | departureLocation: { |
| | | label: '出发地', |
| | | }, |
| | | arrivalLocation: { |
| | | label: '目的地', |
| | | }, |
| | | vehicleId: { |
| | | label: '运输工具ID', |
| | | }, |
| | | licensePlateNumber: { |
| | | label: '车牌', |
| | | }, |
| | | vehicleType: { |
| | | label: '车型', |
| | | }, |
| | | mainDriver: { |
| | | label: '主驾驶员', |
| | | }, |
| | | assistantDriver: { |
| | | label: '副驾驶员', |
| | | }, |
| | | pointNum: { |
| | | label: '提送货点数', |
| | | }, |
| | | businessContact: { |
| | | label: '业务联系人', |
| | | }, |
| | | estimatedTotalIncome: { |
| | | label: '预估总收入', |
| | | }, |
| | | estimatedTotalCost: { |
| | | label: '预估总成本', |
| | | }, |
| | | estimatedProfit: { |
| | | label: '预估利润', |
| | | }, |
| | | electronicLock: { |
| | | label: '电子锁', |
| | | }, |
| | | reWeighingWeight: { |
| | | label: '复磅重量', |
| | | }, |
| | | quantity: { |
| | | label: '件数', |
| | | }, |
| | | actualDepartureTime: { |
| | | label: '实际出发时间', |
| | | }, |
| | | requiredArrivalTime: { |
| | | label: '要求到达时间', |
| | | }, |
| | | actualArrivalTime: { |
| | | label: '实际到达时间', |
| | | }, |
| | | beReturn: { |
| | | label: '是否回程', |
| | | }, |
| | | dispatchQuantity: { |
| | | label: '实发件数', |
| | | }, |
| | | dispatchWeight: { |
| | | label: '实发重量', |
| | | }, |
| | | dispatchVolume: { |
| | | label: '实发体积(立方)', |
| | | }, |
| | | emptyMileage: { |
| | | label: '空载里程', |
| | | }, |
| | | emptyFuel: { |
| | | label: '空载油耗', |
| | | }, |
| | | heavyMileage: { |
| | | label: '重载里程', |
| | | }, |
| | | heavyFuel: { |
| | | label: '重载油耗', |
| | | }, |
| | | beScheduled: { |
| | | label: '是否按班次', |
| | | }, |
| | | trackingNo: { |
| | | label: '快递单号', |
| | | }, |
| | | sealNo: { |
| | | label: '铅封号', |
| | | }, |
| | | scheduleNo: { |
| | | label: '班次号', |
| | | }, |
| | | transportStatus: { |
| | | label: '运输状态', |
| | | }, |
| | | estimatedBillId: { |
| | | label: '预估账单ID', |
| | | }, |
| | | settlementBillId: { |
| | | label: '结算账单ID', |
| | | }, |
| | | settlementStatus: { |
| | | label: '结算状态', |
| | | }, |
| | | createTime: { |
| | | label: '创建时间', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "创建时间不能为空", trigger: "blur" } |
| | | ], }, |
| | | updateTime: { |
| | | label: '更新时间', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "更新时间不能为空", trigger: "blur" } |
| | | ] }, |
| | | } |
| | | }) |
| | | dispatchNo: { |
| | | label: '调度单号', |
| | | search: true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: "调度单号不能为空", trigger: "blur" |
| | | } |
| | | ], |
| | | }, |
| | | customerName: { |
| | | label: '客户名称', |
| | | search: true, |
| | | type: 'select', // 设置为下拉框类型 |
| | | dicData: [], // 使用 selectCustomName 作为数据源 |
| | | disabled: false // 根据需要设置是否禁用 |
| | | }, |
| | | licensePlateNumber: { |
| | | label: '车牌', search: true, hide: true, |
| | | }, |
| | | vehicleType: { |
| | | label: '车型', search: true, hide: true, |
| | | }, |
| | | createdTime: { |
| | | label: '下单时间', |
| | | display: false, |
| | | search: true, |
| | | type: 'date', |
| | | format: 'YYYY-MM-DD', |
| | | searchSpan: 5, minWidth: 100, |
| | | valueFormat: 'YYYY-MM-DD', |
| | | }, |
| | | operationMode: { |
| | | label: '运营模式', |
| | | }, |
| | | createTime: { |
| | | label: '创建时间', display: false, hide: true, type: 'date', |
| | | format: 'YYYY-MM-DD', searchSpan: 5, minWidth: 100, searchLabelWidth: 110, |
| | | valueFormat: 'YYYY-MM-DD', |
| | | }, |
| | | // bookingNo: { |
| | | // label: '客户订单号', showOverflowTooltip: true, |
| | | // }, |
| | | |
| | | const { tableData,pageF,rowSave,rowUpdate,rowDel,beforeOpen,searchChange, |
| | | searchReset,selectionChange,onLoad,currentChange,sizeChange,handleDelete,handleExport,handleUpdate,refreshChange} = usePagePlus({ |
| | | form:form, |
| | | option:option, |
| | | queryParams:queryParams, |
| | | idKey:'id', |
| | | page:page.value, |
| | | getListApi:listPendingSettlementBusiness, |
| | | getDetailApi:getPendingSettlementBusiness, |
| | | exportApi:exportPendingSettlementBusiness, |
| | | deleteApi:delPendingSettlementBusiness, |
| | | addApi:addPendingSettlementBusiness, |
| | | updateApi:updatePendingSettlementBusiness, |
| | | handleUpdateFunc:()=>{ |
| | | // customerId: { |
| | | // label: '客户id', |
| | | // }, |
| | | // carrierId: { |
| | | // label: '承运商id', |
| | | // }, |
| | | |
| | | |
| | | // createdTime: { |
| | | // label: '下单时间', |
| | | // }, |
| | | transportMode: { |
| | | label: '运输方式', hide: true, |
| | | }, |
| | | productId: { |
| | | label: '服务产品', hide: true, |
| | | }, |
| | | |
| | | |
| | | carrierName: { |
| | | label: '承运商', |
| | | }, |
| | | departureLocation: { |
| | | label: '出发地', |
| | | }, |
| | | arrivalLocation: { |
| | | label: '目的地', |
| | | }, |
| | | isCreate: { |
| | | label: '是否已入账', dataType: 'string', search: true, |
| | | type: 'select', |
| | | dicUrl: '/system/dict/data/type/sys_whether_type', |
| | | }, |
| | | // vehicleId: { |
| | | // label: '运输工具ID',hide: true, |
| | | // }, |
| | | |
| | | |
| | | // mainDriver: { |
| | | // label: '主驾驶员',hide: true, |
| | | // }, |
| | | // assistantDriver: { |
| | | // label: '副驾驶员',hide: true, |
| | | // }, |
| | | // pointNum: { |
| | | // label: '提送货点数',hide: true, |
| | | // }, |
| | | // businessContact: { |
| | | // label: '业务联系人',hide: true, |
| | | // }, |
| | | // estimatedTotalIncome: { |
| | | // label: '预估总收入', |
| | | // }, |
| | | // estimatedTotalCost: { |
| | | // label: '预估总成本', |
| | | // }, |
| | | // estimatedProfit: { |
| | | // label: '预估利润', |
| | | // }, |
| | | // electronicLock: { |
| | | // label: '电子锁', |
| | | // }, |
| | | // reWeighingWeight: { |
| | | // label: '复磅重量', |
| | | // }, |
| | | // quantity: { |
| | | // label: '件数', |
| | | // }, |
| | | // actualDepartureTime: { |
| | | // label: '实际出发时间', |
| | | // }, |
| | | // requiredArrivalTime: { |
| | | // label: '要求到达时间', |
| | | // }, |
| | | // actualArrivalTime: { |
| | | // label: '实际到达时间', |
| | | // }, |
| | | // beReturn: { |
| | | // label: '是否回程', |
| | | // }, |
| | | // dispatchQuantity: { |
| | | // label: '实发件数', |
| | | // }, |
| | | // dispatchWeight: { |
| | | // label: '实发重量', |
| | | // }, |
| | | // dispatchVolume: { |
| | | // label: '实发体积(立方)', |
| | | // }, |
| | | // emptyMileage: { |
| | | // label: '空载里程', |
| | | // }, |
| | | // emptyFuel: { |
| | | // label: '空载油耗', |
| | | // }, |
| | | // heavyMileage: { |
| | | // label: '重载里程', |
| | | // }, |
| | | // heavyFuel: { |
| | | // label: '重载油耗', |
| | | // }, |
| | | // beScheduled: { |
| | | // label: '是否按班次', |
| | | // }, |
| | | // trackingNo: { |
| | | // label: '快递单号', |
| | | // }, |
| | | // sealNo: { |
| | | // label: '铅封号', |
| | | // }, |
| | | // scheduleNo: { |
| | | // label: '班次号', |
| | | // }, |
| | | // transportStatus: { |
| | | // label: '运输状态', |
| | | // }, |
| | | // estimatedBillId: { |
| | | // label: '预估账单ID', |
| | | // }, |
| | | // settlementBillId: { |
| | | // label: '结算账单ID', |
| | | // }, |
| | | // settlementStatus: { |
| | | // label: '结算状态', |
| | | // }, |
| | | // updateTime: { |
| | | // label: '更新时间', |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: "更新时间不能为空", trigger: "blur" |
| | | // } |
| | | // ] |
| | | // }, |
| | | } |
| | | }) |
| | | |
| | | const { tableData, pageF, rowSave, rowUpdate, rowDel, beforeOpen, searchChange, |
| | | searchReset, selectionChange, onLoad, currentChange, sizeChange, handleDelete, handleExport, handleUpdate, refreshChange } = usePagePlus({ |
| | | form: form, |
| | | option: option, |
| | | queryParams: queryParams, |
| | | idKey: 'id', |
| | | page: page.value, |
| | | getListApi: listPendingSettlementBusiness, |
| | | getDetailApi: getPendingSettlementBusiness, |
| | | exportApi: exportPendingSettlementBusiness, |
| | | deleteApi: delPendingSettlementBusiness, |
| | | addApi: addPendingSettlementBusiness, |
| | | updateApi: updatePendingSettlementBusiness, |
| | | handleUpdateFunc: () => { |
| | | crudRef.value.rowEdit(selectionList.value[0]); |
| | | }, |
| | | handleSelectionChangeFunc:(selection:any)=>{ |
| | | handleSelectionChangeFunc: (selection: any) => { |
| | | if (selection.every((item: any) => item.isCreate == '0')) { |
| | | generateDisabled.value = false; |
| | | } else { |
| | | generateDisabled.value = true; |
| | | if (selection.length > 0) { |
| | | proxy.$message.warning('请选择未入账的记录'); |
| | | } |
| | | } |
| | | selectionList.value = selection; |
| | | selectionList.value = selection; |
| | | } |
| | | }) |
| | | const dialog = reactive({ |
| | | visible: false, |
| | | detail: false, |
| | | title: '', |
| | | }) |
| | | const selectedIds = ref<string>(''); |
| | | const handleGenerate = () => { |
| | | form.value = {}; |
| | | dialog.title = '生成账单'; |
| | | if (selectionList.value.length > 0) { |
| | | selectedIds.value = selectionList.value.map(item => item.id).join(','); |
| | | } |
| | | if (selectionList.value.length === 0) { |
| | | if (queryParams.value.customerName == '') { |
| | | proxy.$message.warning('请选择客户名称'); |
| | | return; |
| | | } |
| | | getCwglPendingSettlementBusinessBillList({ customerName: queryParams.value.customerName }).then((res) => { |
| | | if (res.code === 200) { |
| | | form.value = res.data; |
| | | // option.value.generate = true; |
| | | dialog.visible = true; |
| | | } |
| | | }) |
| | | } else { |
| | | getPendingSettlementBusinessBill(selectedIds.value).then((res) => { |
| | | if (res.code === 200) { |
| | | form.value = res.data; |
| | | // option.value.generate = true; |
| | | dialog.visible = true; |
| | | } |
| | | }) |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | const storagesTransferRef = ref<FormInstance>() |
| | | const submitForm = () => { |
| | | storagesTransferRef.value!.validate(valid => { |
| | | if (valid) { |
| | | if (selectionList.value.length == 0) { |
| | | pendingSettlementBusinessCreateBillList(form.value).then((res) => { |
| | | if (res.code === 200) { |
| | | proxy.$message.success(res.msg); |
| | | dialog.visible = false; |
| | | onLoad(page.value) |
| | | } |
| | | |
| | | }); |
| | | } else { |
| | | |
| | | cwglPendingSettlementBusinessCreateBill(form.value, selectedIds.value).then((res) => { |
| | | if (res.code === 200) { |
| | | proxy.$message.success(res.msg); |
| | | dialog.visible = false; |
| | | onLoad(page.value) |
| | | |
| | | |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | const cancel = () => { |
| | | form.value = {}; |
| | | dialog.visible = false; |
| | | dialog.detail = false; |
| | | proxy.resetForm(storagesTransferRef.value) |
| | | option.value.generate = false; |
| | | } |
| | | const activeName = ref('first') |
| | | const dispatchNo = ref(''); |
| | | const handleClick = (tab: TabsPaneContext, event: Event) => { |
| | | if (tab.props.name == 'first') { |
| | | getListVable(dispatchNo.value, 0); |
| | | } else if (tab.props.name == 'second') { |
| | | getListVable(dispatchNo.value, 1); |
| | | } |
| | | } |
| | | |
| | | const handleFy = (row: any) => { |
| | | dispatchNo.value = row.dispatchNo; |
| | | if (activeName.value == 'first') { |
| | | listEstimatedReceivable({ dispatchNo: row.dispatchNo, feeType: 0 }).then((res) => { |
| | | if (res.code === 200) { |
| | | dialog.detail = true; |
| | | tableDataList.value = res.rows || []; |
| | | } |
| | | }) |
| | | } else if (activeName.value == 'second') { |
| | | // 这里可以添加查询收入相关的逻辑 |
| | | listEstimatedReceivable({ dispatchNo: row.dispatchNo, feeType: 1 }).then((res) => { |
| | | if (res.code === 200) { |
| | | dialog.detail = true; |
| | | tableDataList.value = res.rows || []; |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | const getListVable = (dispatchNo, feeType) => { |
| | | listEstimatedReceivable({ dispatchNo: dispatchNo, feeType: feeType }).then((res) => { |
| | | if (res.code === 200) { |
| | | tableDataList.value = res.rows || []; |
| | | } |
| | | }) |
| | | } |
| | | // 添加合计方法 |
| | | const getSummaries = (param) => { |
| | | const { columns, data } = param; |
| | | const sums = []; |
| | | columns.forEach((column, index) => { |
| | | if (index === 0) { |
| | | sums[index] = '合计'; |
| | | return; |
| | | } |
| | | if (column.property === 'estimatedAmount') { |
| | | const values = data.map(item => Number(item.estimatedAmount)); |
| | | if (!values.every(value => Number.isNaN(value))) { |
| | | sums[index] = values.reduce((prev, curr) => { |
| | | const value = Number(curr); |
| | | if (!Number.isNaN(value)) { |
| | | return prev + curr; |
| | | } else { |
| | | return prev; |
| | | } |
| | | }, 0); |
| | | sums[index] = sums[index].toFixed(2); |
| | | } else { |
| | | sums[index] = 'N/A'; |
| | | } |
| | | } else { |
| | | sums[index] = ''; |
| | | } |
| | | }); |
| | | |
| | | return sums; |
| | | } |
| | | </script> |