From de0dfb6020dc00b554c629dc01b1eb38156e094e Mon Sep 17 00:00:00 2001
From: zhangback <zhangback@163.com>
Date: 星期日, 04 一月 2026 12:29:04 +0800
Subject: [PATCH] 提交
---
ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue | 397 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 379 insertions(+), 18 deletions(-)
diff --git a/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue b/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
index ff759c8..79fb8c6 100644
--- a/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
+++ b/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
@@ -85,19 +85,31 @@
v-hasPermi="['tms:tmsDispatchOrder:loading']"
>濮旀墭鍗歌揣淇℃伅
</el-button>
+ <el-button
+ type="primary"
+ icon="UserFilled"
+ :disabled="pageF.single"
+ @click="handleZZ"
+ v-hasPermi="['tms:tmsDispatchOrder:zzdj']"
+ >澧炲�间綔涓氱櫥璁�
+ </el-button>
</template>
<template #menu-before="{row}">
<el-link size="small" type="primary" @click="handleAddGoods(row)" class="link-btn"
- v-hasPermi="['tms:tmsGoodsDetail:add']"
+ v-hasPermi="['tms:tmsGoodsDetail:add']" v-if="[0,1,2].includes(row.status)"
:underline="false" icon="el-icon-document-add">杩愯緭璐у搧鐧昏
</el-link>
<el-link size="small" type="primary" @click="handleActual(row)" class="link-btn"
- v-hasPermi="['tms:tmsDispatchOrder:update']"
+ v-hasPermi="['tms:tmsDispatchOrder:update']" v-if="[0,1,2].includes(row.status)"
:underline="false" icon="el-icon-set-up">瀹為檯杩愯緭璁板綍
</el-link>
<el-link size="small" type="primary" v-if="row.status == 0" @click="handleConfirm(row)" class="link-btn"
v-hasPermi="['tms:tmsDispatchOrder:confirmOrder']"
:underline="false" icon="el-icon-pointer">纭畾
+ </el-link>
+ <el-link size="small" type="primary" v-if="[0,1,2].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" @click="handleCopy(row)" class="link-btn" :underline="false"
v-hasPermi="['tms:tmsDispatchOrder:copyOrder']"
@@ -196,7 +208,7 @@
>
<el-descriptions-item label="璋冨害鍗曞彿">{{ form.dispatchNo }}</el-descriptions-item>
<el-descriptions-item label="瀹㈡埛">{{ form.customerName }}</el-descriptions-item>
- <el-descriptions-item label="瀹為檯杩愯緭宸ュ叿绫诲瀷">{{ form.$actualVehicleType }}</el-descriptions-item>
+ <el-descriptions-item label="娲惧嚭杞﹀瀷">{{ form.$actualVehicleType }}</el-descriptions-item>
<el-descriptions-item label="杩愯緭宸ュ叿鍙风爜">{{ form.licensePlate }}</el-descriptions-item>
<el-descriptions-item label="鎵樻灦鍙�">{{ form.shelfCode }}</el-descriptions-item>
<el-descriptions-item label="涓婚┚椹跺憳">{{ form.mainDriverName }}</el-descriptions-item>
@@ -210,7 +222,7 @@
>
<el-descriptions-item label="璋冨害鍗曞彿">{{ form.dispatchNo }}</el-descriptions-item>
<el-descriptions-item label="瀹㈡埛">{{ form.customerName }}</el-descriptions-item>
- <el-descriptions-item label="瀹為檯杩愯緭宸ュ叿绫诲瀷">{{ form.$actualVehicleType }}</el-descriptions-item>
+ <el-descriptions-item label="娲惧嚭杞﹀瀷">{{ form.$actualVehicleType }}</el-descriptions-item>
<el-descriptions-item label="鎵樻灦鍙�">{{ form.shelfCode }}</el-descriptions-item>
</el-descriptions>
<avue-form v-model="form" ref="boxFormRef" :option="boxFormOption">
@@ -295,6 +307,85 @@
</el-dialog>
+
+ <el-dialog title="澧炲�间綔涓氱櫥璁�" v-model="open4" 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="tabsOption" ref="tabsOptionRef"
+ @change="handleChange"></avue-tabs>
+
+ <avue-crud v-if="active !== 'tab4'"
+ :option="zzItemsTableOption" ref="itemsTableRef"
+ :data="zzItemsTableData"
+ >
+ <template #count="{row}">
+ <el-input-number v-model="row.count" placeholder="璁¤垂鏁伴噺"
+ :min="0"></el-input-number>
+ </template>
+ <template #remark="{row}">
+ <el-input v-model="row.remark" placeholder="澶囨敞" ></el-input>
+ </template>
+
+
+ </avue-crud>
+
+ <div v-if="active === 'tab4'">
+ <h2>瀹炴姤瀹為攢璐圭敤</h2>
+ <avue-form v-model="boxForm" ref="boxFormRef"
+ :option="boxFormOption">
+
+ </avue-form>
+ <avue-crud
+ :option="boxTableOption"
+ :data="boxTableData"
+ >
+ </avue-crud>
+ </div>
+ <template #footer>
+ <div class="dialog-footer">
+ <el-button type="primary"
+ :loading="pageF.isUploading" @click="submitTabForm">
+ {{ pageF.isUploading ? '鎻愪氦涓�' : '纭� 瀹�' }}
+ </el-button>
+
+ <el-button @click="open4 = 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>
@@ -307,10 +398,11 @@
getTmsDispatchOrder,
listTmsDispatchOrder,
updateTmsDispatchOrder,
- confirmOrder, copyOrder, okOrder, initGenerate, generateTmsDispatchOrder, dropHook, connectHang,customsOrder,loadingOrder,
+ confirmOrder, copyOrder, okOrder, initGenerate, generateTmsDispatchOrder, dropHook,
+ connectHang,customsOrder,loadingOrder,checkCloseOrder,closeOrder
} from "@/api/tms/tmsDispatchOrder";
import useCurrentInstance from "@/utils/useCurrentInstance";
-import {computed, onMounted, reactive, ref, toRefs, watch, getCurrentInstance} from "vue";
+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";
@@ -325,15 +417,22 @@
import {addTmsConsignor, getTmsConsignor, listTmsConsignor} from "@/api/tms/tmsConsignor";
import {ElMessage, ElMessageBox} from "element-plus";
import {addTmsTrip, listTmsTrip} from "@/api/tms/tmsTrip";
-import {addTmsFinanceDetail, listTmsFinanceDetail, updateTmsFinanceDetail} from "@/api/tms/tmsFinanceDetail";
+import {
+ addTmsFinanceDetail,
+ listTmsFinanceDetail,
+ saveTmsFinanceDetail,
+ updateTmsFinanceDetail
+} from "@/api/tms/tmsFinanceDetail";
import {getTmsProductInfo, listTmsProductInfo} from "@/api/tms/tmsProductInfo";
import {addTmsGoodsDetail, delTmsGoodsDetail, listTmsGoodsDetail, updateTmsGoodsDetail} from "@/api/tms/tmsGoodsDetail";
import {getTransportRouteVi, listTransportRouteVi} from "@/api/tms/tmsTransportRouteVi";
import {listTmsQuoteItem} from "@/api/tms/tmsQuotePlanItem";
-import {$DialogForm} from '@smallwei/avue'
+import {$DialogForm, randomId} from '@smallwei/avue'
import {getTmsCustomerInfo, listTmsCustomerInfo} from "@/api/tms/tmsCustomerInfo";
import {getAddressCode} from "@/api/tms/tmsRegion";
import {mapRegeo} from "@/api/common";
+import {getDicts} from "@/api/system/dict/data";
+import {pushTmsQuoteFee} from "@/api/tms/tmsQuoteFee";
const {appContext} = getCurrentInstance();
@@ -381,12 +480,13 @@
actualForm: <any>{},
isCustoms:<any> -1,
isLoad: -1,
+ open5:false,
})
const {
queryParams, form, page, selectionList, open3,
boxTableData, optionType,
boxFormOption, boxForm, boxTableOption, title, open, open2,
- goodsTableData, goodsForm, actualForm, selectionList2,isCustoms,isLoad
+ goodsTableData, goodsForm, actualForm, selectionList2,isCustoms,isLoad,open5
} = toRefs(data);
const option = ref({
pageKey: 'TmsDispatchOrder',
@@ -438,7 +538,6 @@
form.value.shipperAddress = undefined;
form.value.shipperMobile = undefined;
form.value.receiverId = undefined;
- form.value.receiverRegionLabel = undefined;
form.value.receiverAddress = undefined;
form.value.receiverMobile = undefined;
}
@@ -1469,7 +1568,21 @@
search: true,
},
isUrgent: {
- label: '鏄惁绱ф�ュ惁',
+ label: '鏄惁绱ф��',
+ display: false, minWidth: 100,
+ search: true,
+ type: 'select', dicUrl: '/system/dict/data/type/sys_number_is', dataType: 'string',
+
+ },
+ iscc: {
+ 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',
@@ -1486,8 +1599,15 @@
// display: false,
// search: true,
// },
+ requiredVehicleTypes: {
+ label: '涓嬪崟杞﹀瀷',minWidth: 130,
+ display: false, type: 'select', search: true,
+ dicUrl: '/system/dict/data/type/vehicle_type',
+ dataType: 'string',
+
+ },
actualVehicleType: {
- label: '瀹為檯杩愯緭宸ュ叿绫诲瀷', minWidth: 130,
+ label: '娲惧嚭杞﹀瀷', minWidth: 130,
display: false,
search: true,
type: 'select', dicUrl: '/system/dict/data/type/vehicle_type', dataType: 'string',
@@ -1638,11 +1758,27 @@
tripType: {
label: '琛岀▼绫诲瀷',
display: true,
+ change: function ({value}: any) {
+ if (value == '5'){
+ itineraryOption.value.column.iscc.display = true
+ }
+ },
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/trip_type',
rules: [
{
required: true,
message: "琛岀▼绫诲瀷涓嶈兘涓虹┖", trigger: "change"
+ }
+ ],
+ },
+ iscc: {
+ label: '鏄惁鏌ヨ溅',
+ display: false,
+ type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_number_is',
+ rules: [
+ {
+ required: true,
+ message: "鏄惁鏌ヨ溅涓嶈兘涓虹┖", trigger: "change"
}
],
},
@@ -1734,7 +1870,7 @@
display: true,
},
voucherUrl: {
- label: '琛岀▼鍑瘉',
+ label: '鍑瘉',
display: true,
span: 24, dataType: 'string',
type: 'img',
@@ -1770,14 +1906,29 @@
}
],
},
- voucherUrl: {
- label: '琛岀▼鍑瘉',
+ currency:{
+ label: '甯佺',
display: true,
- span: 24,
+ 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: '澶囨敞',
+ type: 'textarea', minRows: 3, maxRows: 5, span: 24
},
dataSource: {
label: '鏁版嵁鏉ユ簮',
@@ -1818,6 +1969,11 @@
label: '閲戦',
display: true,
},
+ currency:{
+ label: '甯佺',
+ display: true,
+ type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
+ },
feeVoucherUrl: {
label: '璐圭敤鍑瘉',
display: true,
@@ -1825,7 +1981,9 @@
accept: 'string', dataType: 'object',
type: 'upload',
action: '/common/upload2',
-
+ },
+ remark:{
+ label: '澶囨敞',
},
}
@@ -2173,6 +2331,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,
+ },
+ }
+})
+
const goodsTableOption = ref({
@@ -2466,6 +2646,65 @@
const itemsCrudRef = ref()
const itemsTableData = ref<any>([])
+const tabsOption = ref({
+ column: [
+ {
+ label: '杩愯緭澧炲�间綔涓氱櫥璁�',
+ prop: 'tab1',
+ name: 'tab1',
+ value: '0',
+
+ },
+ {
+ label: '鎶ュ叧澧炲�间綔涓氱櫥璁�',
+ prop: 'tab2',
+ name: 'tab2',
+ value: '1',
+ },
+ {
+ label: '瑁呭嵏澧炲�间綔涓氱櫥璁�',
+ prop: 'tab3',
+ name: 'tab3',
+ value: '2',
+
+ },
+ {
+ label: '瀹炴姤瀹為攢璐圭敤鐧昏',
+ prop: 'tab4',
+ name: 'tab4',
+ value: '3',
+ }
+ ]
+})
+const tabsOptionRef = ref();
+const active = ref('tab1');
+const open4 = ref(false);
+const zzItemsTableOption = ref({
+ pageKey: 'zzItemsTable',
+ rowKey: 'rowKey',
+ header: false,
+ menu: false,
+ selection: false,
+ column: {
+ freeName:{
+ label: '璐圭敤鍚嶇О',
+ },
+ unit:{
+ label: '璁¢噺鍗曚綅',
+ },
+ count:{
+ label : '璁¤垂鏁伴噺'
+ },
+ remark:{
+ label: '澶囨敞'
+ }
+ }
+});
+const zzItemsTableData = ref();
+
+
+
+
const {
tableData,
pageF,
@@ -2511,11 +2750,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') || {};
+ queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.orderTimeRange, 'orderTime') || {};
+ return params;
},
handleBeforeOpenFunc:(type:string)=>{
if(type == 'add'){
@@ -3409,4 +3650,124 @@
optionType.value = 'loading';
boxFormOption.value = loadingOption.value;
}
+const quotationItems = ref();
+const getQuotationItems = async () => {
+ let res = await getDicts("sys_quotation_items");
+ quotationItems.value = res.data || [];
+}
+getQuotationItems();
+
+const getTabData = (val:string)=>{
+ console.log(val)
+ let filter = quotationItems.value.filter((item:any)=>{
+ return item.remark == val;
+ });
+ if (filter.length > 0){
+ zzItemsTableData.value = filter.map((item:any)=>{
+ return { rowKey: randomId() ,freeName: item.dictLabel,free: item.dictValue,unit: '娆�'}
+ })
+ }else{
+ zzItemsTableData.value = []
+ }
+}
+
+const getTab4Data = ()=>{
+ 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 submitTabForm = ()=>{
+ if (['tab1','tab2','tab3'].includes(active.value)){
+ let quoteFeeItems = zzItemsTableData.value.filter((item:any)=>{
+ return item.count && item.count > 0;
+ })
+ console.log(quoteFeeItems)
+ pushTmsQuoteFee({...form.value,quoteFeeItems:quoteFeeItems}).then(res=>{
+ ElMessage.success('淇濆瓨鎴愬姛');
+ open4.value = false;
+ })
+ }else if (active.value === 'tab4'){
+ 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();
+ getTab4Data();
+ })
+ }
+}
+
+
+
+const handleChange = (column:any)=>{
+ active.value = column.prop;
+ if (['tab1','tab2','tab3'].includes(column.prop)){
+ getTabData(column.value)
+ }else if (column.prop === 'tab4'){
+ getTab4Data()
+ }
+}
+
+const handleZZ = () => {
+ open4.value = true;
+ form.value = selectionList.value[0];
+ handleChange(tabsOption.value.column[0]);
+
+ boxFormOption.value = financeOption.value;
+ boxTableOption.value = financeTableOption.value;
+ nextTick(()=>{
+ tabsOptionRef.value.active = "0";
+
+ })
+}
+
+const handleClose = (row:any) => {
+
+ if (row.status == 2){
+ 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