From 16b37fa24394118e40bf9f32a0fefbb7f71483f5 Mon Sep 17 00:00:00 2001
From: wujianwei <wjw@11.com>
Date: 星期一, 09 三月 2026 11:17:33 +0800
Subject: [PATCH] 修改本地配置
---
ui/admin-ui3/src/views/tms/generationCost/index.vue | 280 +++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 228 insertions(+), 52 deletions(-)
diff --git a/ui/admin-ui3/src/views/tms/generationCost/index.vue b/ui/admin-ui3/src/views/tms/generationCost/index.vue
index 48dd64a..c3aed09 100644
--- a/ui/admin-ui3/src/views/tms/generationCost/index.vue
+++ b/ui/admin-ui3/src/views/tms/generationCost/index.vue
@@ -47,7 +47,10 @@
</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">鏌ョ湅琛岀▼
@@ -78,7 +81,7 @@
<el-descriptions-item label="杞﹀瀷">{{form.$actualVehicleType}}</el-descriptions-item>
<el-descriptions-item label="杞︾墝">{{form.licensePlate}}</el-descriptions-item>
</el-descriptions>
- <avue-tabs :option="tabsOption2"
+ <avue-tabs :option="tabsOption2" ref="tabsOption2Ref"
@change="handleChange2"></avue-tabs>
<div v-if="active === 'tab1'">
<avue-crud
@@ -95,6 +98,9 @@
: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">
@@ -151,6 +157,15 @@
: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>
@@ -187,23 +202,34 @@
:data="boxTableData"
>
<template #expand="{row}">
- <avue-crud
+ <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"
+ <el-button type="primary" v-if="optionType != 'view'"
:loading="pageF.isUploading" @click="submitGenerate">
{{ pageF.isUploading ? '鎻愪氦涓�' : '纭� 瀹�' }}
</el-button>
@@ -213,7 +239,31 @@
</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>
@@ -227,7 +277,9 @@
getTmsDispatchOrder,
costListTmsDispatchOrder,
updateTmsDispatchOrder,
- generateTmsDispatchOrder, initGenerate, initYSGenerate, ysGenerateTmsDispatchOrder, initYFGenerate,yfGenerateTmsDispatchOrder
+ 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";
@@ -244,6 +296,7 @@
import {listTmsLoadingServiceProvider} from "@/api/tms/tmsLoadingServiceProvider";
import {selectPaymentTmsQuotePlan} from "@/api/tms/tmsQuotePlan";
import {addTmsQuoteFee, listTmsQuoteFee, pushTmsQuoteFee} from "@/api/tms/tmsQuoteFee";
+
const {appContext} = getCurrentInstance();
@@ -293,12 +346,14 @@
isCustoms:<any> -1,
isLoad: -1,
active: 'tab1',
- quotationItems:[]
+ quotationItems:[],
+ serviceProviderList: <any>[],
+ open5:false,
})
const {
queryParams, form, page, selectionList,
- boxTableData, optionType,open,
- boxFormOption, boxForm, boxTableOption,boxItemTableOption,selectionList2,isCustoms,isLoad,active,quotationItems
+ boxTableData, optionType,open,open5,
+ boxFormOption, boxForm, boxTableOption,boxItemTableOption,selectionList2,isCustoms,isLoad,active,quotationItems,serviceProviderList
} = toRefs(data);
const option = ref({
pageKey: 'TmsDispatchOrder',
@@ -609,7 +664,14 @@
search: true,
},
isUrgent: {
- label: '鏄惁绱ф�ュ惁',
+ 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',
@@ -672,13 +734,21 @@
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/tms_dispatch_order_status',
display: false,
hide: false, fixed: 'right',
- search: true,
+ 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,
@@ -742,6 +812,9 @@
}, {
label: '寰呯敓鎴愬簲浠�',
prop: 'tab2',
+ }, {
+ label: '宸蹭綔搴�',
+ prop: 'tab3',
}]
})
const tabsOption2 = ref({
@@ -850,10 +923,15 @@
voucherUrl: {
label: '琛岀▼鍑瘉',
display: true,
- span: 24,
accept: 'string', dataType: 'string',
type: 'upload',
action: '/common/upload2',
+
+ },
+ remark: {
+ label: '澶囨敞',span:24,
+ display: true,
+ type: 'textarea',
},
dataSource: {
@@ -904,10 +982,20 @@
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:{
@@ -946,6 +1034,9 @@
},
sum: {
label: '鎬婚噾棰�',
+ },
+ remark: {
+ label: '澶囨敞',
},
isYF: {
label: '鏄惁搴斾粯璐圭敤',
@@ -1033,18 +1124,24 @@
dispatchNo:{
label: '璋冨害鍗曞彿',
},
-
- transportLine:{
- label: '杩愯緭璺嚎',
+ serviceProviderType:{
+ label: '鏈嶅姟鍟嗙被鍨�',
+ type: 'radio', dicUrl: '/system/dict/data/type/provider_type', dataType: 'string',
},
- actualVehicleType:{
- label: '杞﹀瀷',
- display: true, type: 'select', dicUrl: '/system/dict/data/type/vehicle_type', dataType: 'string',
-
- },licensePlate:{
- label: '杞︾墝',
+ serviceProviderName:{
+ label: '鏈嶅姟鍟嗗悕绋�',
},
- receivableAmount:{
+ // transportLine:{
+ // label: '杩愯緭璺嚎',
+ // },
+ // actualVehicleType:{
+ // label: '杞﹀瀷',
+ // display: true, type: 'select', dicUrl: '/system/dict/data/type/vehicle_type', dataType: 'string',
+ //
+ // },licensePlate:{
+ // label: '杞︾墝',
+ // },
+ payableAmount:{
label: '搴斾粯璐圭敤',
}
}
@@ -1079,6 +1176,28 @@
}
})
+
+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,
+ },
+ }
+})
@@ -1131,12 +1250,13 @@
isLoad.value = isLoad.value == 0 && !pageF.single ? 0 : -1;
console.log(pageF.single)
},
- getBeginListFunc: () => {
+ getBeginListFunc: (params = {}) => {
queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.createTimeRange, 'createTime') || {};
queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.updateTimeRange, 'updateTime') || {};
queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.confirmTimeRange, 'confirmTime') || {};
queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.okTimeRange, 'okTime') || {};
- },
+ return params;
+ },
})
@@ -1178,6 +1298,7 @@
message: "鎿嶄綔鎴愬姛锛�",
type: 'success'
})
+ boxFormRef.value?.resetFields();
getTab2Data();
})
}
@@ -1194,11 +1315,14 @@
boxTableOption.value = itineraryTableOption.value;
listTmsTrip({dispatchOrderId: row.id, pageNum: 1, pageSize: 999}).then(res => {
boxTableData.value = res.rows || [];
- pageF.open = true;
+ open.value = true;
pageF.title = '鏌ョ湅琛岀▼';
boxFormOption.value.title = '';
})
}
+
+const tabsOption2Ref = ref();
+
const handleAddFinance = async (row: any) => {
pageF.open = true;
@@ -1207,42 +1331,62 @@
boxFormOption.value = financeOption.value;
boxTableOption.value = financeTableOption.value;
form.value = row;
- await getTab1Data();
+ handleChange2(tabsOption2.value.column[0]);
+ nextTick(()=>{
+ tabsOption2Ref.value.active = "0";
+ })
}
const getTab1Data = async () =>{
- const quotePlanItemRes = await listTmsQuoteItem({quotePlanId: form.value.quotePlanId, pageNum: 1, pageSize: 999});
- let items = quotePlanItemRes.rows || [];
-
+ 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 find = rowsData.find((ele: any) => {
- return item.free == ele.free
+ 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,
- feeType: item.freeName,
- rowKey: item.id,
+ 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,
- rowKey: item.id,
- feeType: item.freeName,
- unit: item.unit,
- price: item.price,
- currency: item.currency,
+ freeName:item.dictLabel,
+ rowKey: item.dictCode,
+ feeType: item.dictLabel,
+ price: 0,
+ currency: 'RMB',
count: 0,
+ unit: '娆�',
+ free: item.dictValue,
sum: 0,
+ ...find2,
}
}
})
@@ -1258,18 +1402,22 @@
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(res => {
+ }).then(async res => {
boxTableData.value = res.rows || [];
+
boxForm.value = {
- dispatchOrderId: form.value.id,
+ dispatchOrderId: form.value.id,
dataSource: 0,
financeType: 2,
}
})
}
+
@@ -1301,6 +1449,8 @@
}else if (column.prop === 'tab2'){
accountsPayableStatus = 0;
+ }else if (column.prop === 'tab3'){
+ queryParams.value.inStatusList = [5];
}
page.value.currentPage = 1;
queryParams.value.accountsReceivableStatus = accountsReceivableStatus;
@@ -1357,6 +1507,10 @@
row.serviceProviderId = serviceProviderId;
}
+ }
+
+ if (row.serviceProviderType){
+ serviceProviderChange(row);
}
@@ -1427,19 +1581,6 @@
let ids = selectionList.value.map((item: any) => item.id);
initYFGenerate(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 = 'yfGenerate';
open.value = true;
pageF.title = '鐢熸垚搴斾粯璐圭敤';
@@ -1480,6 +1621,41 @@
}
+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>
\ No newline at end of file
--
Gitblit v1.8.0