<template>
|
<basicContainer>
|
<avue-crud :option="option" :table-loading="pageF.loading" :data="tableData" :page="page"
|
:permission="permissionList" :before-open="beforeOpen" v-model="form" v-model:search="queryParams" 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="warning" plain icon="Download" @click="handleExport"
|
v-hasPermi="['tms:tmsDispatchOrder:export']">导出
|
</el-button>
|
<el-button type="primary" icon="Promotion" :disabled="pageF.multiple" @click="handleYSGenerate"
|
v-hasPermi="['tms:tmsDispatchOrder:generate']">生成应收费用
|
</el-button>
|
<el-button type="success" icon="Promotion" :disabled="pageF.multiple" @click="handleYFGenerate"
|
v-hasPermi="['tms:tmsDispatchOrder:generate']">生成应付费用
|
</el-button>
|
</template>
|
<template #menu-before="{ row }">
|
<el-link size="small" type="primary" v-if="[0, 1, 2, 3].includes(row.status)" @click="handleClose(row)"
|
class="link-btn" v-hasPermi="['tms:tmsDispatchOrder:closeOrder']" :underline="false" icon="el-icon-close">作废
|
</el-link>
|
<el-link size="small" type="primary" v-if="![0, 1].includes(row.status)" @click="handleLogItinerary(row)"
|
v-hasPermi="['tms:tmsTrip:list']" class="link-btn" :underline="false" icon="el-icon-view">查看行程
|
</el-link>
|
<el-link size="small" type="primary" v-if="row.accountsReceivableStatus == 0" @click="handleAddFinance(row)"
|
class="link-btn" v-hasPermi="['tms:tmsFinanceDetail:add']" :underline="false" icon="el-icon-edit-pen">费用登记
|
</el-link>
|
</template>
|
<template #menu="{ row }">
|
<el-link size="small" type="primary" @click="handleLog(row)" class="link-btn" :underline="false"
|
icon="el-icon-tickets">日志
|
</el-link>
|
</template>
|
|
|
<template #body>
|
<avue-tabs :option="tabsOption" @change="handleChange"></avue-tabs>
|
</template>
|
</avue-crud>
|
<el-dialog title="费用登记" v-model="pageF.open" class="avue-dialog avue-dialog--top" width="80%">
|
<el-descriptions :column="3" border>
|
<el-descriptions-item label="调度单号">{{ form.dispatchNo }}</el-descriptions-item>
|
<el-descriptions-item label="客户名称">{{ form.customerName }}</el-descriptions-item>
|
<el-descriptions-item label="项目名称">{{ form.projectName }}</el-descriptions-item>
|
<el-descriptions-item label="运输路线">{{ form.transportLine }}</el-descriptions-item>
|
<el-descriptions-item label="车型">{{ form.$actualVehicleType }}</el-descriptions-item>
|
<el-descriptions-item label="车牌">{{ form.licensePlate }}</el-descriptions-item>
|
</el-descriptions>
|
<avue-tabs :option="tabsOption2" ref="tabsOption2Ref" @change="handleChange2"></avue-tabs>
|
<div v-if="active === 'tab1'">
|
<avue-crud :option="itemsTableOption" ref="itemsTableRef" :data="itemsTableData"
|
@selection-change="selectionChange2">
|
<template #count="{ row }">
|
<el-input-number v-model="row.count" @change="countChange(row)" placeholder="请输入计费数量"
|
:min="0"></el-input-number>
|
</template>
|
<template #isYF="{ row }">
|
<el-checkbox v-model="row.isYF" :true-value="1" :false-value="0"
|
@change="(e: number) => isYFChange(e, row)"></el-checkbox>
|
</template>
|
<template #remark="{ row }">
|
<el-input v-model="row.remark" placeholder="备注"></el-input>
|
</template>
|
<template #expand="{ row }">
|
<el-descriptions :column="3" border v-if="row.isYF == 1">
|
<el-descriptions-item label="服务商">
|
<el-select v-model="row.serviceProviderId" placeholder="请选择服务商" @change="serviceProviderChange(row)"
|
:filterable="true">
|
<el-option v-for="item in row.serviceProviderData" :key="item.id" :label="item.serviceShortName"
|
:value="item.id"></el-option>
|
</el-select>
|
</el-descriptions-item>
|
<el-descriptions-item label="是否存在应付报价">
|
<span :style="{ color: row.isCZYF == 0 ? 'red' : '' }">{{ row.isCZYF == 0 ? '否' : row.isCZYF == 1 ? '是' :
|
''}}</span>
|
|
</el-descriptions-item>
|
<el-descriptions-item label="计费金额">
|
<el-input v-model="row.yfPrice" :min="1" @change="yfPriceChange(row)" type="number"
|
placeholder="请输入金额"></el-input>
|
</el-descriptions-item>
|
<el-descriptions-item label="币制">
|
<el-radio-group v-model="row.yfCurrency">
|
<el-radio v-for="dict in sys_currency" :key="dict.value" :label="dict.value">{{ dict.label
|
}}</el-radio>
|
</el-radio-group>
|
</el-descriptions-item>
|
<el-descriptions-item label="计费数量">
|
<el-input-number v-model="row.yfCount" @change="yfPriceChange(row)" placeholder="请输入计费数量"
|
:min="0"></el-input-number>
|
|
</el-descriptions-item>
|
<el-descriptions-item label="总金额">{{ row.yfSum }}</el-descriptions-item>
|
</el-descriptions>
|
</template>
|
</avue-crud>
|
</div>
|
<div v-if="active === 'tab2'">
|
<h2>实报实销费用</h2>
|
<avue-form v-model="boxForm" ref="boxFormRef" :option="boxFormOption">
|
|
</avue-form>
|
<avue-crud :option="boxTableOption" :data="boxTableData">
|
<template #isYF="{ row }">
|
<el-checkbox v-model="row.isYF" :true-value="1" :false-value="0"
|
@change="(e: number) => isYFChange(e, row)"></el-checkbox>
|
</template>
|
<template #yfServiceProviderId="{ row }">
|
<el-select 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"
|
:value="item.serviceProviderId + '_' + item.serviceProviderType"></el-option>
|
</el-select>
|
</template>
|
<template #yfPrice="{ row }">
|
<el-input v-model="row.yfPrice" :min="1" type="number" placeholder="请输入金额"></el-input>
|
</template>
|
<template #yfCurrency="{ row }">
|
<el-radio-group v-model="row.yfCurrency">
|
<el-radio v-for="dict in sys_currency" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
|
</el-radio-group>
|
</template>
|
</avue-crud>
|
</div>
|
<template #footer>
|
<div class="dialog-footer">
|
<el-button type="primary" :loading="pageF.isUploading" @click="submitForm">
|
{{ pageF.isUploading ? '提交中' : '确 定' }}
|
</el-button>
|
|
<el-button @click="cancelBox">取 消</el-button>
|
</div>
|
</template>
|
</el-dialog>
|
|
|
|
|
<el-dialog :title="pageF.title" v-model="open" class="avue-dialog avue-dialog--top" width="80%">
|
<avue-crud :option="boxTableOption" ref="itemsTableRef" :data="boxTableData">
|
<template #expand="{ row }">
|
<avue-crud v-if="optionType === 'ysGenerate'" :option="boxItemTableOption" ref="itemsTableRef2"
|
:data="row.tmsReceivableFeeItems">
|
</avue-crud>
|
<avue-crud v-else :option="boxItemTableOption" ref="itemsTableRef2" :data="row.payableFeeItems">
|
</avue-crud>
|
|
</template>
|
<template #receivableAmount="{ row }">
|
<div v-if="row.receivableAmountRMB > 0">{{ row.receivableAmountRMB }}人民币</div>
|
<div v-if="row.receivableAmountHKD > 0">{{ row.receivableAmountHKD }}港币</div>
|
|
</template>
|
|
<template #payableAmount="{ row }">
|
<div v-if="row.payableRmbAmount > 0">{{ row.payableRmbAmount }}人民币</div>
|
<div v-if="row.payableHkbAmount > 0">{{ row.payableHkbAmount }}港币</div>
|
</template>
|
</avue-crud>
|
|
|
<template #footer>
|
<div class="dialog-footer">
|
<el-button type="primary" v-if="optionType != 'view'" :loading="pageF.isUploading" @click="submitGenerate">
|
{{ pageF.isUploading ? '提交中' : '确 定' }}
|
</el-button>
|
|
<el-button @click="open = false">取 消</el-button>
|
</div>
|
</template>
|
</el-dialog>
|
|
<el-dialog title="调度单作废" v-model="open5" class="avue-dialog avue-dialog--top" width="80%">
|
<el-descriptions :column="3" border>
|
<el-descriptions-item label="调度单号">{{ form.dispatchNo }}</el-descriptions-item>
|
<el-descriptions-item label="客户名称">{{ form.customerName }}</el-descriptions-item>
|
<el-descriptions-item label="项目名称">{{ form.projectName }}</el-descriptions-item>
|
<el-descriptions-item label="运输路线">{{ form.transportLine }}</el-descriptions-item>
|
<el-descriptions-item label="车型">{{ form.$actualVehicleType }}</el-descriptions-item>
|
<el-descriptions-item label="车牌">{{ form.licensePlate }}</el-descriptions-item>
|
</el-descriptions>
|
|
<avue-form v-model="boxForm" ref="boxFormRef" :option="boxFormOption">
|
|
</avue-form>
|
<template #footer>
|
<div class="dialog-footer">
|
<el-button type="primary" :loading="pageF.isUploading" @click="submitForm5">
|
{{ pageF.isUploading ? '提交中' : '确 定' }}
|
</el-button>
|
|
<el-button @click="open5 = false">取 消</el-button>
|
</div>
|
</template>
|
</el-dialog>
|
|
</basicContainer>
|
</template>
|
|
<script setup name="tmsDispatchOrder" lang="ts">
|
import {
|
TmsDispatchOrderI,
|
addTmsDispatchOrder,
|
delTmsDispatchOrder,
|
exportTmsDispatchOrder,
|
getTmsDispatchOrder,
|
costListTmsDispatchOrder,
|
updateTmsDispatchOrder,
|
generateTmsDispatchOrder, initGenerate, initYSGenerate,
|
ysGenerateTmsDispatchOrder, initYFGenerate, yfGenerateTmsDispatchOrder,
|
getServiceProvider, checkCloseOrder, closeOrder
|
} from "@/api/tms/tmsDispatchOrder";
|
import useCurrentInstance from "@/utils/useCurrentInstance";
|
import { computed, onMounted, reactive, ref, toRefs, watch, getCurrentInstance, nextTick } from "vue";
|
import { PagesInterface, PageQueryInterface } from "@/utils/globalInterface";
|
import { usePagePlus } from "@/hooks/usePagePlus";
|
import { hasPermission } from "@/utils/permissionUtils";
|
import { ElMessage, ElMessageBox } from "element-plus";
|
import { addTmsTrip, listTmsTrip } from "@/api/tms/tmsTrip";
|
import { saveTmsFinanceDetail, listTmsFinanceDetail, updateTmsFinanceDetail } from "@/api/tms/tmsFinanceDetail";
|
import { listTmsQuoteItem } from "@/api/tms/tmsQuotePlanItem";
|
import { getDicts } from "@/api/system/dict/data";
|
import { listTmsServiceProvider } from "@/api/tms/tmsServiceProvider";
|
import { listTmsCustomsServiceProvider } from "@/api/tms/tmsCustomsServiceProvider";
|
import { listTmsLoadingServiceProvider } from "@/api/tms/tmsLoadingServiceProvider";
|
import { selectPaymentTmsQuotePlan } from "@/api/tms/tmsQuotePlan";
|
import { addTmsQuoteFee, listTmsQuoteFee, pushTmsQuoteFee } from "@/api/tms/tmsQuoteFee";
|
|
|
|
const { appContext } = getCurrentInstance();
|
|
const { proxy } = useCurrentInstance();
|
const crudRef = ref();
|
const boxFormRef = ref();
|
|
const { sys_quotation_items, sys_unit, sys_currency } =
|
proxy.useDict("sys_quotation_items", "sys_unit", "sys_currency");
|
const permissionList = (key: any, row: any, index: any) => {
|
if (key == 'addBtn') {
|
return hasPermission(["tms:tmsDispatchOrder:add"])
|
} else if (key == 'delBtn') {
|
return hasPermission(["tms:tmsDispatchOrder:remove"]) && row?.status == 0
|
} else if (key == 'editBtn') {
|
return hasPermission(["tms:tmsDispatchOrder:edit"]) && [0, 1].includes(row?.status)
|
} else if (key == 'viewBtn') {
|
return hasPermission(["tms:tmsDispatchOrder:query"])
|
} else {
|
return true;
|
}
|
};
|
const data = reactive({
|
form: <TmsDispatchOrderI>{},
|
queryParams: <TmsDispatchOrderI & PageQueryInterface>{},
|
page: <PagesInterface>{
|
pageSize: 10,
|
total: 0,
|
currentPage: 1,
|
},
|
selectionList: [],
|
optionType: '',
|
boxTableData: <any>[],
|
boxForm: <any>{},
|
boxFormOption: <any>{},
|
boxTableOption: <any>{},
|
boxItemTableOption: <any>{},
|
title: '',
|
open: false,
|
open2: false,
|
goodsTableData: <any>[],
|
selectionList2: <any>[],
|
goodsForm: <any>{},
|
open3: false,
|
actualForm: <any>{},
|
isCustoms: <any>-1,
|
isLoad: -1,
|
active: 'tab1',
|
quotationItems: [],
|
serviceProviderList: <any>[],
|
open5: false,
|
})
|
const {
|
queryParams, form, page, selectionList,
|
boxTableData, optionType, open, open5,
|
boxFormOption, boxForm, boxTableOption, boxItemTableOption, selectionList2, isCustoms, isLoad, active, quotationItems, serviceProviderList
|
} = toRefs(data);
|
const option = ref({
|
pageKey: 'TmsDispatchOrder',
|
rowKey: 'id',
|
labelWidth: 130,
|
searchSpan: 6,
|
searchLabelWidth: 150,
|
menuWidth: 300,
|
height: 530,
|
addBtn: false,
|
editBtn: false,
|
delBtn: false,
|
group: [
|
{
|
label: '基本信息',
|
prop: 'jbxx',
|
column: {
|
|
transportLine: {
|
label: '运输线路', span: 24,
|
display: true,
|
},
|
customerName: {
|
label: '客户名称',
|
display: true, disabled: true
|
},
|
projectName: {
|
label: '关联项目',
|
display: true, disabled: true
|
},
|
// customerCode: {
|
// label: '客户编码',
|
// display: true,disabled:true
|
// },
|
contractName: {
|
label: '关联合同',
|
display: true, disabled: true
|
},
|
requiredVehicleTypes: {
|
label: '下单车型', disabled: true,
|
display: true, type: 'select', dicUrl: '/system/dict/data/type/vehicle_type', dataType: 'string',
|
rules: [
|
{
|
required: true,
|
message: "下单车型不能为空", trigger: "blur"
|
}
|
],
|
},
|
orderType: {
|
label: '订单类型',
|
display: true,
|
type: 'select', dataType: 'string',
|
dicUrl: '/system/dict/data/type/order_type',
|
rules: [
|
{
|
required: true,
|
message: "订单类型不能为空", trigger: "change"
|
}
|
]
|
},
|
isCustoms: {
|
label: '委托报关',
|
display: true,
|
type: 'radio', dicUrl: '/system/dict/data/type/sys_number_is', dataType: 'string',
|
rules: [
|
{
|
required: true,
|
message: "委托报关不能为空", trigger: "blur"
|
}
|
],
|
},
|
isLoad: {
|
label: '委托装卸',
|
display: true,
|
type: 'radio', dicUrl: '/system/dict/data/type/sys_number_is', dataType: 'string',
|
rules: [
|
{
|
required: true,
|
message: "委托装卸不能为空", trigger: "blur"
|
}
|
],
|
},
|
isUrgent: {
|
label: '是否紧急', value: '1',
|
display: true,
|
type: 'radio', dicUrl: '/system/dict/data/type/sys_number_is', dataType: 'string',
|
rules: [
|
{
|
required: true,
|
message: "是否紧急不能为空", trigger: "blur"
|
}
|
],
|
},
|
|
orderTime: {
|
label: '下单时间',
|
type: 'datetime', // 改为 datetime 类型
|
format: 'YYYY-MM-DD HH:mm:ss',
|
valueFormat: 'YYYY-MM-DD HH:mm:ss',
|
display: true,
|
},
|
latestDeparture: {
|
label: '要求最晚出发时间',
|
type: 'datetime', // 改为 datetime 类型
|
format: 'YYYY-MM-DD HH:mm:ss', labelWidth: 150,
|
valueFormat: 'YYYY-MM-DD HH:mm:ss',
|
display: true,
|
rules: [
|
{
|
required: true,
|
message: "要求最晚出发时间不能为空", trigger: "blur"
|
}
|
],
|
},
|
latestArrival: {
|
label: '要求最晚到达时间', labelWidth: 150,
|
type: 'datetime', // 改为 datetime 类型
|
format: 'YYYY-MM-DD HH:mm:ss',
|
valueFormat: 'YYYY-MM-DD HH:mm:ss',
|
display: true,
|
rules: [
|
{
|
required: true,
|
message: "要求最晚到达时间不能为空", trigger: "blur"
|
}
|
],
|
},
|
|
|
}
|
},
|
{
|
label: '派车信息',
|
prop: 'pcxx',
|
column: {
|
operationMode: {
|
label: '是否是自营车队', value: 0,
|
type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is',
|
rules: [
|
{
|
required: true,
|
message: "是否是自营车队不能为空", trigger: "change"
|
}
|
],
|
change: ({ value }: any) => {
|
console.log(value)
|
option.value.group.forEach((item: any) => {
|
if (item.prop == 'pcxx') {
|
item.column.commissionModel.display = value != 1;
|
item.column.vehicleProviderName.display = value == 1;
|
item.column.containerNo.display = value == 1;
|
item.column.shelfCode.display = value == 1;
|
// item.column.vehicleProviderId.rules.forEach((cItem: any) => {
|
// cItem.required = value == 1;
|
// });
|
}
|
})
|
|
},
|
},
|
commissionModel: {
|
label: '提成模式',
|
display: true, type: 'radio', dicUrl: '/system/dict/data/type/commission_model', dataType: 'string',
|
rules: [
|
{
|
required: true,
|
message: "提成模式不能为空", trigger: "change"
|
}
|
],
|
},
|
vehicleProviderName: {
|
label: '车辆服务商',
|
display: true,
|
rules: [
|
{
|
required: true,
|
message: "车辆服务商不能为空", trigger: "change"
|
}
|
],
|
|
},
|
mainDriverName: {
|
label: '主驾驶员',
|
display: true, dataType: 'string',
|
rules: [
|
{
|
required: true,
|
message: "主驾驶员不能为空", trigger: "change"
|
}
|
],
|
|
},
|
assistantDriverName: {
|
label: '副驾驶员',
|
display: true, dataType: 'string',
|
|
},
|
licensePlate: {
|
label: '车牌号', dataType: 'string',
|
display: true,
|
},
|
actualVehicleType: {
|
label: '派出车型',
|
display: true, type: 'select', dicUrl: '/system/dict/data/type/vehicle_type', dataType: 'string',
|
},
|
shipperName: {
|
label: '装货点', dataType: 'string',
|
display: true,
|
},
|
shipperRegionLabel: {
|
label: '装货点行政区域',
|
display: true, disabled: true
|
|
},
|
shipperAddress: {
|
label: '装货点详细地址',
|
display: true, disabled: true
|
},
|
shipperMobile: {
|
label: '装货点联系方式',
|
display: true, disabled: true
|
},
|
receiverName: {
|
label: '卸货点',
|
display: true, dataType: 'string',
|
},
|
receiverRegionLabel: {
|
label: '卸货点行政区域',
|
display: true, disabled: true
|
},
|
receiverAddress: {
|
label: '卸货点详细地址',
|
display: true, disabled: true
|
},
|
receiverMobile: {
|
label: '卸货点联系方式',
|
display: true, disabled: true
|
},
|
containerNo: {
|
label: '集装箱号',
|
display: true,
|
},
|
shelfCode: {
|
label: '托板号',
|
display: true,
|
},
|
remark: {
|
label: '备注', span: 24,
|
type: 'textarea', minRows: 3, maxRows: 5,
|
display: true,
|
},
|
},
|
},
|
|
|
],
|
column: {
|
|
dispatchNo: {
|
label: '调度单号', minWidth: 140,
|
display: false,
|
search: true,
|
},
|
customerName: {
|
label: '客户',
|
display: false, minWidth: 200,
|
search: true,
|
overHidden: true
|
},
|
|
projectName: {
|
label: '项目名称',
|
display: false, minWidth: 150,
|
search: true,
|
overHidden: true
|
},
|
contractName: {
|
label: '关联合同名称', minWidth: 160,
|
display: false,
|
search: true,
|
overHidden: true
|
},
|
orderType: {
|
label: '订单类型',
|
display: false,
|
search: true, minWidth: 120,
|
type: 'select', dataType: 'string',
|
dicUrl: '/system/dict/data/type/order_type',
|
},
|
transportLine: {
|
label: '运输线路',
|
display: false,
|
search: true, minWidth: 180, overHidden: true
|
},
|
|
|
vehicleProviderName: {
|
label: '车辆服务商名称', minWidth: 150,
|
display: false,
|
search: true,
|
},
|
|
loadingServiceProviderName: {
|
label: '装货服务商名称', minWidth: 150,
|
display: false,
|
search: true,
|
},
|
customsServiceProviderName: {
|
label: '报关服务商名称', minWidth: 150,
|
display: false,
|
search: true,
|
},
|
isUrgent: {
|
label: '是否紧急',
|
display: false, minWidth: 100,
|
search: true,
|
type: 'select', dicUrl: '/system/dict/data/type/sys_number_is', dataType: 'string',
|
|
},
|
isfk: {
|
label: '是否放空',
|
display: false, minWidth: 100,
|
search: true,
|
type: 'select', dicUrl: '/system/dict/data/type/sys_number_is', dataType: 'string',
|
|
},
|
mainDriverName: {
|
label: '主驾驶员',
|
display: false, minWidth: 120,
|
search: true,
|
},
|
|
// requiredVehicleTypes: {
|
// label: '要求运输工具类型',
|
// display: false,
|
// search: true,
|
// },
|
actualVehicleType: {
|
label: '实际运输工具类型', minWidth: 130,
|
display: false,
|
search: true,
|
type: 'select', dicUrl: '/system/dict/data/type/vehicle_type', dataType: 'string',
|
|
},
|
|
licensePlate: {
|
label: '车牌号', minWidth: 120,
|
display: false,
|
search: true,
|
},
|
|
shipperName: {
|
label: '装货点名称',
|
display: false, minWidth: 160,
|
search: true,
|
overHidden: true
|
},
|
receiverName: {
|
label: '卸货点名称', minWidth: 160,
|
display: false,
|
search: true,
|
overHidden: true
|
},
|
// accountsReceivableStatus: {
|
// label: '应收费用生成状态', minWidth: 160,
|
// display: false,
|
// hide: false,
|
// search: true,
|
// type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/accounts_status',
|
//
|
// },
|
// accountsPayableStatus: {
|
// label: '应付费用生成状态', minWidth: 160,
|
// display: false,
|
// hide: false,
|
// search: true,
|
// type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/accounts_status',
|
//
|
// },
|
|
status: {
|
label: '状态', minWidth: 150,
|
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/tms_dispatch_order_status',
|
display: false,
|
hide: false, fixed: 'right',
|
search: false,
|
rules: [
|
{
|
required: true,
|
message: "状态不能为空", trigger: "change"
|
}
|
],
|
},
|
inStatusList: {
|
label: '状态', minWidth: 150,
|
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/tms_dispatch_order_status',
|
display: false, multiple: true,
|
hide: true,
|
search: true,
|
|
},
|
confirmTime: {
|
label: '确认时间', minWidth: 180,
|
display: false,
|
hide: false,
|
search: false,
|
},
|
orderTime: {
|
label: '下单时间', minWidth: 180,
|
display: false,
|
hide: false,
|
search: false,
|
},
|
updateBy: {
|
label: '更新人', minWidth: 150,
|
addDisplay: false,
|
editDisplay: false,
|
viewDisplay: false,
|
hide: false,
|
search: false,
|
},
|
updateTime: {
|
label: '更新时间', minWidth: 180,
|
addDisplay: false,
|
editDisplay: false,
|
viewDisplay: false,
|
hide: false,
|
search: false,
|
},
|
updateTimeRange: {
|
label: '更新时间', display: false, search: true, searchRange: true, type: 'date',
|
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: 6,
|
valueFormat: 'YYYY-MM-DD',
|
},
|
okTimeRange: {
|
label: '完成时间', display: false, search: true, searchRange: true, type: 'date',
|
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: 6,
|
valueFormat: 'YYYY-MM-DD',
|
},
|
|
}
|
})
|
|
const tabsOption = ref({
|
column: [{
|
label: '全部',
|
prop: 'all',
|
}, {
|
label: '待生成应收',
|
prop: 'tab1',
|
}, {
|
label: '待生成应付',
|
prop: 'tab2',
|
}, {
|
label: '已作废',
|
prop: 'tab3',
|
}]
|
})
|
const tabsOption2 = ref({
|
column: [
|
{
|
label: '报价费用登记',
|
prop: 'tab1',
|
name: 'tab1',
|
|
},
|
{
|
label: '实报实销费用登记',
|
prop: 'tab2',
|
name: 'tab2',
|
}]
|
})
|
const itineraryTableOption = ref({
|
menu: false,
|
addBtn: false,
|
header: false, selection: false,
|
title: '历史行程',
|
column: {
|
dataSource: {
|
label: '数据来源',
|
display: false,
|
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/data_source',
|
|
},
|
driverName: {
|
label: '主驾驶员名称',
|
display: true, disabled: true,
|
},
|
vehicleNumber: {
|
label: '车牌号码',
|
display: true, disabled: true,
|
|
},
|
tripType: {
|
label: '行程类型',
|
display: true,
|
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/trip_type',
|
|
},
|
tripTime: {
|
label: '时间',
|
type: 'date', valueFormat: 'YYYY-MM-DD',
|
display: true,
|
},
|
odometer: {
|
label: '仪表里程',
|
display: true,
|
},
|
address: {
|
label: '具体地址',
|
display: true,
|
},
|
voucherUrl: {
|
label: '行程凭证',
|
display: true,
|
span: 24, dataType: 'string',
|
type: 'upload',
|
action: '/common/upload2',
|
|
},
|
|
}
|
})
|
|
const financeOption = ref({
|
menuBtn: false,
|
labelWidth: 120,
|
column: {
|
feeType: {
|
label: '费用类型',
|
display: true,
|
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/fee_type',
|
rules: [
|
{
|
required: true,
|
message: "费用类型不能为空", trigger: "change"
|
}
|
],
|
},
|
actualFeeAmount: {
|
label: '费用金额',
|
type: 'number',
|
display: true,
|
rules: [
|
{
|
required: true,
|
message: "费用金额不能为空", trigger: "change"
|
}
|
],
|
},
|
currency: {
|
label: '币制',
|
display: true,
|
type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
|
rules: [
|
{
|
required: true,
|
message: "币制不能为空", trigger: "change"
|
}
|
],
|
},
|
voucherUrl: {
|
label: '行程凭证',
|
display: true,
|
accept: 'string', dataType: 'string',
|
type: 'upload',
|
action: '/common/upload2',
|
|
},
|
remark: {
|
label: '备注', span: 24,
|
display: true,
|
type: 'textarea',
|
|
},
|
dataSource: {
|
label: '数据来源',
|
display: false,
|
value: 0
|
},
|
}
|
})
|
|
const financeTableOption = ref({
|
menu: false,
|
addBtn: false,
|
header: false, selection: false,
|
title: '历史垫付费用',
|
column: {
|
dataSource: {
|
label: '数据来源',
|
display: false,
|
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/data_source',
|
|
},
|
createBy: {
|
label: '添加人',
|
display: true, disabled: true,
|
},
|
feeCreateTime: {
|
label: '上传时间',
|
display: true, disabled: true,
|
|
},
|
feeType: {
|
label: '费用类型',
|
display: true,
|
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/fee_type',
|
|
},
|
actualFeeAmount: {
|
label: '金额',
|
display: true,
|
},
|
currency: {
|
label: '币制',
|
display: true,
|
type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
|
rules: [
|
{
|
required: true,
|
message: "币制不能为空", trigger: "change"
|
}
|
],
|
},
|
feeVoucherUrl: {
|
label: '费用凭证',
|
display: true,
|
span: 24,
|
accept: 'string', dataType: 'object',
|
type: 'upload',
|
action: '/common/upload2',
|
|
},
|
remark: {
|
label: '备注',
|
display: true,
|
},
|
isYF: {
|
label: '是否应付费用',
|
display: true,
|
type: 'radio', dicUrl: '/system/dict/data/type/sys_number_is', dataType: 'string',
|
|
},
|
yfServiceProviderId: {
|
label: '服务商',
|
display: true,
|
type: 'select',
|
|
},
|
yfPrice: {
|
label: '应付金额',
|
display: true,
|
},
|
yfCurrency: {
|
label: '应付币制',
|
display: true,
|
|
}
|
|
}
|
})
|
|
const itemsTableOption = ref({
|
pageKey: 'itemsTable',
|
rowKey: 'rowKey',
|
header: false, expand: true,
|
addBtn: false, menu: false,
|
column: {
|
feeType: {
|
label: '费用名称',
|
},
|
unit: {
|
label: '计量单位',
|
},
|
price: {
|
label: '计费金额',
|
},
|
currency: {
|
label: '币制',
|
},
|
count: {
|
label: '计费数量', minWidth: 130,
|
},
|
sum: {
|
label: '总金额',
|
},
|
remark: {
|
label: '备注',
|
},
|
isYF: {
|
label: '是否应付费用',
|
}
|
}
|
})
|
|
|
const YSGenerateTableOption = ref({
|
menu: false,
|
add: false,
|
header: false,
|
selection: false,
|
expand: true,
|
defaultExpandAll: true,
|
rowKey: 'id',
|
column: {
|
dispatchNo: {
|
label: '调度单号',
|
},
|
customerName: {
|
label: '客户名称',
|
},
|
shipperName: {
|
label: '装货地',
|
},
|
receiverName: {
|
label: '卸货地',
|
},
|
transportLine: {
|
label: '运输路线',
|
},
|
actualVehicleType: {
|
label: '车型',
|
display: true, type: 'select', dicUrl: '/system/dict/data/type/vehicle_type', dataType: 'string',
|
|
}, licensePlate: {
|
label: '车牌',
|
},
|
receivableAmount: {
|
label: '应收费用',
|
}
|
}
|
})
|
const YSGenerateItemTableOption = ref({
|
menu: false,
|
add: false,
|
header: false,
|
selection: false,
|
rowKey: 'rowKey',
|
|
column: {
|
feeType: {
|
label: '费用类型',
|
type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/receivable_fee_type',
|
|
},
|
feeName: {
|
label: '费用名称',
|
},
|
registerTime: {
|
label: '登记时间',
|
},
|
registerAmount: {
|
label: '登记金额',
|
},
|
currency: {
|
label: '币制',
|
type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
|
|
}
|
}
|
})
|
|
|
const YFGenerateTableOption = ref({
|
menu: false,
|
add: false,
|
header: false,
|
selection: false,
|
expand: true,
|
defaultExpandAll: true,
|
rowKey: 'id',
|
column: {
|
dispatchNo: {
|
label: '调度单号',
|
},
|
serviceProviderType: {
|
label: '服务商类型',
|
type: 'radio', dicUrl: '/system/dict/data/type/provider_type', dataType: 'string',
|
},
|
serviceProviderName: {
|
label: '服务商名稱',
|
},
|
// transportLine:{
|
// label: '运输路线',
|
// },
|
// actualVehicleType:{
|
// label: '车型',
|
// display: true, type: 'select', dicUrl: '/system/dict/data/type/vehicle_type', dataType: 'string',
|
//
|
// },licensePlate:{
|
// label: '车牌',
|
// },
|
payableAmount: {
|
label: '应付费用',
|
}
|
}
|
})
|
const YFGenerateItemTableOption = ref({
|
menu: false,
|
add: false,
|
header: false,
|
selection: false,
|
rowKey: 'rowKey',
|
|
column: {
|
feeType: {
|
label: '费用类型',
|
type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/receivable_fee_type',
|
|
},
|
feeName: {
|
label: '费用名称',
|
},
|
registerTime: {
|
label: '登记时间',
|
},
|
registerAmount: {
|
label: '登记金额',
|
},
|
currency: {
|
label: '币制',
|
type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
|
|
}
|
}
|
})
|
|
|
const closeOption = ref({
|
menuBtn: false,
|
labelWidth: 120,
|
column: {
|
closeWhy: {
|
label: '作废原因', span: 24,
|
type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/close_why',
|
rules: [
|
{
|
required: true,
|
message: "作废原因不能为空", trigger: "change"
|
}
|
],
|
},
|
closeWhyRemark: {
|
label: '作废原因说明',
|
type: 'textarea',
|
span: 24,
|
},
|
}
|
})
|
|
|
|
|
|
const itemsTableData = ref<any>([])
|
const itemsTableRef = ref();
|
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: costListTmsDispatchOrder,
|
getDetailApi: getTmsDispatchOrder,
|
exportApi: exportTmsDispatchOrder,
|
deleteApi: delTmsDispatchOrder,
|
addApi: addTmsDispatchOrder,
|
updateApi: updateTmsDispatchOrder,
|
handleUpdateFunc: () => {
|
crudRef.value.rowEdit(selectionList.value[0]);
|
},
|
handleSelectionChangeFunc: (selection: any) => {
|
selectionList.value = selection;
|
if (selection.length > 0) {
|
isCustoms.value = selection[0].isCustoms;
|
isLoad.value = selection[0].isLoad;
|
} else {
|
isCustoms.value = -1;
|
isLoad.value = -1;
|
}
|
isCustoms.value = isCustoms.value == 0 && !pageF.single ? 0 : -1;
|
isLoad.value = isLoad.value == 0 && !pageF.single ? 0 : -1;
|
console.log(pageF.single)
|
},
|
|
getBeginListFunc: (params = {}) => {
|
// 1. 日期转换
|
let newParams = <any>{ ...params };
|
if (newParams) {
|
// 1. 定义日期字段映射 (数组名 : 接口需要的前缀)
|
// 这样写的好处是:如果你有多个日期,直接在这里添加一行即可
|
const dateMap = {
|
createTimeRange: 'createTime',
|
updateTimeRange: 'updateTime',
|
confirmTimeRange: 'confirmTime',
|
okTimeRange: 'okTime',
|
|
};
|
|
// 2. 遍历处理日期
|
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];
|
}
|
|
// 【核心改动】:无论是否有值,处理完后都把原始的 Array 字段删掉
|
// 这样请求里就不会出现 confirmTimeRangeArray: [...]
|
delete newParams[arrayKey];
|
});
|
|
// 3. 通用清洗:删除所有空字符串、null 或 undefined 的其他字段
|
Object.keys(newParams).forEach(key => {
|
const val = newParams[key];
|
if (val === '' || val === null || val === undefined) {
|
delete newParams[key];
|
}
|
});
|
|
} else {
|
newParams = {};
|
}
|
|
return newParams;
|
|
},
|
|
})
|
|
|
|
|
|
|
const cancelBox = () => {
|
if (optionType.value === 'addItinerary' || optionType.value === 'addFinance') {
|
boxForm.value = {};
|
boxFormRef.value?.resetFields();
|
}
|
pageF.open = false;
|
}
|
|
const submitForm = () => {
|
if (active.value === 'tab1') {
|
console.log()
|
pushTmsQuoteFee({
|
...form.value,
|
quoteFeeItems: selectionList2.value
|
}).then(res => {
|
ElMessage({
|
message: "操作成功!",
|
type: 'success'
|
})
|
getTab1Data();
|
})
|
|
|
} else {
|
if (Array.isArray(boxForm.value.feeVoucherUrl)) {
|
boxForm.value.feeVoucherUrl = boxForm.value.feeVoucherUrl.toString();
|
}
|
boxForm.value.rowItems = boxTableData.value;
|
saveTmsFinanceDetail(boxForm.value).then(res => {
|
ElMessage({
|
message: "操作成功!",
|
type: 'success'
|
})
|
boxFormRef.value?.resetFields();
|
getTab2Data();
|
})
|
}
|
|
|
}
|
|
|
const handleLog = (row: any) => {
|
|
}
|
const handleLogItinerary = (row: any) => {
|
optionType.value = 'view';
|
boxTableOption.value = itineraryTableOption.value;
|
listTmsTrip({ dispatchOrderId: row.id, pageNum: 1, pageSize: 999 }).then(res => {
|
boxTableData.value = res.rows || [];
|
open.value = true;
|
pageF.title = '查看行程';
|
boxFormOption.value.title = '';
|
})
|
}
|
|
const tabsOption2Ref = ref();
|
|
|
const handleAddFinance = async (row: any) => {
|
pageF.open = true;
|
pageF.title = '费用登记';
|
optionType.value = 'addFinance';
|
boxFormOption.value = financeOption.value;
|
boxTableOption.value = financeTableOption.value;
|
form.value = row;
|
handleChange2(tabsOption2.value.column[0]);
|
nextTick(() => {
|
tabsOption2Ref.value.active = "0";
|
|
})
|
}
|
|
|
const getTab1Data = async () => {
|
const quotePlanItemRes2 = await listTmsQuoteItem({ quotePlanId: form.value.quotePlanId, pageNum: 1, pageSize: 999 });
|
let list = quotePlanItemRes2.rows || [];
|
let quotePlanItemRes = await getDicts("sys_quotation_items");
|
console.log(quotePlanItemRes)
|
let items = quotePlanItemRes.data || [];
|
let res = await listTmsQuoteFee({ dispatchId: form.value.id, pageNum: 1, pageSize: 999 });
|
let rowsData = res.rows || [];
|
selectionList2.value = []
|
itemsTableRef.value?.clearSelection();
|
itemsTableData.value = items.map((item: any) => {
|
let find2 = list.find((ele: any) => {
|
return item.dictValue == ele.free
|
});
|
let find = rowsData.find((ele: any) => {
|
return item.dictValue == ele.free
|
});
|
delete item.remark;
|
if (find) {
|
let aRow = {
|
unit: '次',
|
|
...item,
|
freeName: item.dictLabel,
|
feeType: item.dictLabel,
|
rowKey: item.dictCode,
|
free: item.dictValue,
|
...find,
|
...find2,
|
price: find.price || 0,
|
currency: find.currency || 'RMB',
|
sum: find.sum || 0,
|
};
|
selectionList2.value.push(aRow);
|
return aRow
|
} else {
|
return {
|
...item,
|
freeName: item.dictLabel,
|
rowKey: item.dictCode,
|
feeType: item.dictLabel,
|
price: 0,
|
currency: 'RMB',
|
count: 0,
|
unit: '次',
|
free: item.dictValue,
|
sum: 0,
|
...find2,
|
}
|
}
|
})
|
await nextTick(() => {
|
for (const item of selectionList2.value) {
|
isYFChange(item.isYF, item);
|
}
|
itemsTableRef.value?.toggleSelection(selectionList2.value);
|
})
|
|
|
}
|
|
|
const getTab2Data = async () => {
|
let serviceProvider = await getServiceProvider(form.value.id);
|
serviceProviderList.value = serviceProvider.data || [];
|
listTmsFinanceDetail({
|
dispatchOrderId: form.value.id, financeType: 2,
|
pageNum: 1, pageSize: 999
|
}).then(async res => {
|
boxTableData.value = res.rows || [];
|
|
boxForm.value = {
|
dispatchOrderId: form.value.id,
|
dataSource: 0,
|
financeType: 2,
|
}
|
})
|
}
|
|
|
|
|
|
|
|
const getQuotationItems = async () => {
|
let res = await getDicts("sys_quotation_items");
|
quotationItems.value = res.data || [];
|
}
|
getQuotationItems();
|
|
const countChange = (row: any) => {
|
row.sum = Number(row.price) * Number(row.count);
|
}
|
|
const selectionChange2 = (selection?: any[]) => {
|
selectionList2.value = selection;
|
}
|
|
|
|
|
const handleChange = (column: any) => {
|
let accountsReceivableStatus: number | undefined = undefined;
|
let accountsPayableStatus: number | undefined = undefined;
|
if (column.prop === 'tab1') {
|
accountsReceivableStatus = 0
|
|
} else if (column.prop === 'tab2') {
|
accountsPayableStatus = 0;
|
} else if (column.prop === 'tab3') {
|
queryParams.value.inStatusList = [5];
|
}
|
page.value.currentPage = 1;
|
queryParams.value.accountsReceivableStatus = accountsReceivableStatus;
|
queryParams.value.accountsPayableStatus = accountsPayableStatus;
|
onLoad(page.value)
|
}
|
|
const handleChange2 = (column: any) => {
|
active.value = column.prop;
|
if (column.prop === 'tab1') {
|
getTab1Data()
|
} else if (column.prop === 'tab2') {
|
getTab2Data()
|
}
|
}
|
|
const isYFChange = async (value: number, row: any) => {
|
if (value == 1) {
|
let find: any = quotationItems.value.find((item: any) => item.dictLabel === row.feeType);
|
if (find) {
|
console.log(find, "find")
|
let opt = find.remark;
|
row.serviceProviderType = opt;
|
if (opt == 0) {
|
let res = await listTmsServiceProvider({ pageSize: 999, pageNum: 1 })
|
row.serviceProviderData = res.rows || [];
|
|
// 车辆运营商
|
let serviceProviderId = form.value.vehicleProviderId || row.serviceProviderId;
|
if (!serviceProviderId) {
|
ElMessage.warning("找不到该费用的车辆服务商");
|
} else {
|
row.serviceProviderId = serviceProviderId;
|
}
|
|
} else if (opt == 1) {
|
let res = await listTmsCustomsServiceProvider({ pageSize: 999, pageNum: 1 })
|
row.serviceProviderData = res.rows || [];
|
let serviceProviderId = form.value.customsServiceProviderId || row.serviceProviderId;
|
if (!serviceProviderId) {
|
ElMessage.warning("找不到该费用的报关服务商");
|
} else {
|
row.serviceProviderId = serviceProviderId;
|
|
}
|
|
} else if (opt == 2) {
|
let res = await listTmsLoadingServiceProvider({ pageSize: 999, pageNum: 1 })
|
row.serviceProviderData = res.rows || [];
|
let serviceProviderId = form.value.loadingServiceProviderId || row.serviceProviderId;
|
if (!serviceProviderId) {
|
ElMessage.warning("找不到该费用的装货服务商");
|
} else {
|
row.serviceProviderId = serviceProviderId;
|
|
}
|
}
|
|
if (row.serviceProviderType) {
|
serviceProviderChange(row);
|
}
|
|
|
}
|
}
|
|
itemsTableRef.value?.toggleRowExpansion(row, value == 1)
|
|
|
|
// serviceProviderData
|
|
|
}
|
|
const serviceProviderChange = (row: any) => {
|
selectPaymentTmsQuotePlan({ providerId: row.serviceProviderId, providerType: row.serviceProviderType, free: row.free }).then(res => {
|
let resData = res.data || {};
|
if (Object.keys(resData).length > 0) {
|
row.yfCurrency = resData.currency;
|
row.yfId = resData.id;
|
row.yfPrice = resData.price;
|
row.yfCurrency = resData.currency;
|
row.yfCurrency = resData.currency;
|
row.isCZYF = 1;
|
} else {
|
row.isCZYF = 0;
|
}
|
})
|
}
|
|
const yfPriceChange = (row: any) => {
|
let yfCount = row.yfCount || 0;
|
let yfPrice = row.yfPrice || 0;
|
row.yfSum = Number(yfPrice) * Number(yfCount);
|
}
|
/**
|
* 生成应收费用
|
*/
|
const handleYSGenerate = () => {
|
let ids = selectionList.value.map((item: any) => item.id);
|
initYSGenerate(ids).then(res => {
|
boxTableData.value = res.data || [];
|
boxTableData.value.forEach((item: any) => {
|
let items = item.tmsReceivableFeeItems || [];
|
let receivableAmountRMB = items.filter((cItem: any) => cItem.currency == 'RMB').reduce((pre: any, cur: any) => {
|
return pre + Number(cur.registerAmount)
|
}, 0);
|
let receivableAmountHKD = items.filter((cItem: any) => cItem.currency == 'HKD').reduce((pre: any, cur: any) => {
|
return pre + Number(cur.registerAmount)
|
}, 0);
|
console.log(receivableAmountRMB, receivableAmountHKD)
|
item.receivableAmountRMB = receivableAmountRMB;
|
item.receivableAmountHKD = receivableAmountHKD;
|
|
})
|
optionType.value = 'ysGenerate';
|
open.value = true;
|
pageF.title = '生成应收费用';
|
boxTableOption.value = YSGenerateTableOption.value;
|
boxItemTableOption.value = YSGenerateItemTableOption.value;
|
})
|
}
|
/**
|
* 生成应付费用
|
*/
|
const handleYFGenerate = () => {
|
let ids = selectionList.value.map((item: any) => item.id);
|
initYFGenerate(ids).then(res => {
|
boxTableData.value = res.data || [];
|
optionType.value = 'yfGenerate';
|
open.value = true;
|
pageF.title = '生成应付费用';
|
boxTableOption.value = YFGenerateTableOption.value;
|
boxItemTableOption.value = YFGenerateItemTableOption.value;
|
})
|
}
|
|
const submitGenerate = () => {
|
pageF.isUploading = true;
|
let ids = selectionList.value.map((item: any) => item.id);
|
if (optionType.value == 'ysGenerate') {
|
ysGenerateTmsDispatchOrder(ids).then(res => {
|
pageF.isUploading = false;
|
ElMessage({
|
message: "生成成功!",
|
type: 'success'
|
})
|
open.value = false;
|
onLoad(page.value);
|
}).finally(() => {
|
pageF.isUploading = false;
|
})
|
} else if (optionType.value == 'yfGenerate') {
|
yfGenerateTmsDispatchOrder(ids).then(res => {
|
pageF.isUploading = false;
|
ElMessage({
|
message: "生成成功!",
|
type: 'success'
|
})
|
open.value = false;
|
onLoad(page.value);
|
}).finally(() => {
|
pageF.isUploading = false;
|
})
|
}
|
|
|
}
|
|
const ysServiceProviderChange = (e: any, row: any) => {
|
let active = serviceProviderList.value.find((item: any) => item.serviceProviderId + '_' + item.serviceProviderType == e)
|
row.yfServiceProviderId = active.serviceProviderId;
|
row.yfServiceProviderName = active.serviceProviderName;
|
row.yfServiceProviderType = active.serviceProviderType;
|
}
|
const handleClose = (row: any) => {
|
|
if (row.status == 2 && row.isfk == 1) {
|
checkCloseOrder(row.id).then(res => {
|
open5.value = true;
|
form.value = row;
|
boxFormOption.value = closeOption.value;
|
});
|
} else {
|
open5.value = true;
|
form.value = row;
|
boxFormOption.value = closeOption.value;
|
|
}
|
}
|
const submitForm5 = () => {
|
boxFormRef.value.validate((valid: boolean, done: any) => {
|
console.log(valid)
|
if (valid) {
|
boxForm.value.id = form.value.id;
|
closeOrder(boxForm.value).then(res => {
|
ElMessage.success('操作成功');
|
open5.value = false;
|
done();
|
onLoad(page.value)
|
}).catch(err => {
|
done();
|
})
|
}
|
})
|
}
|
</script>
|