From 66026cb727dfee50700d7ed3e54fd1c44fc3bab8 Mon Sep 17 00:00:00 2001
From: sen <sen@qq.com>
Date: 星期五, 10 四月 2026 14:49:45 +0800
Subject: [PATCH] 修改调度单委托报关卸货,多选,增加作废
---
ui/admin-ui3/src/api/tms/tmsDispatchOrder.ts | 3
ui/admin-ui3/src/api/tms/tmsApBill.ts | 11 ++
ui/admin-ui3/src/api/tms/tmsArBill.ts | 10 ++
ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue | 138 ++++++++++++++++++++++++++-------
ui/admin-ui3/src/views/tms/tmsApBill/index.vue | 23 +++++
ui/admin-ui3/src/views/tms/tmsArBill/index.vue | 22 +++++
6 files changed, 171 insertions(+), 36 deletions(-)
diff --git a/ui/admin-ui3/src/api/tms/tmsApBill.ts b/ui/admin-ui3/src/api/tms/tmsApBill.ts
index 5629272..fd08f20 100644
--- a/ui/admin-ui3/src/api/tms/tmsApBill.ts
+++ b/ui/admin-ui3/src/api/tms/tmsApBill.ts
@@ -103,4 +103,13 @@
method:'get',
params: query
})
-}
\ No newline at end of file
+}
+/**
+ * 浣滃簾搴斾粯璐﹀崟
+ */
+export const tmsApBillCancelPush: requestType = (id) => {
+ return request({
+ url: '/tms/tmsApBill/cancelPush/' + id,
+ method: 'post',
+ })
+}
diff --git a/ui/admin-ui3/src/api/tms/tmsArBill.ts b/ui/admin-ui3/src/api/tms/tmsArBill.ts
index 9ea906d..a43f550 100644
--- a/ui/admin-ui3/src/api/tms/tmsArBill.ts
+++ b/ui/admin-ui3/src/api/tms/tmsArBill.ts
@@ -120,4 +120,14 @@
method:'get',
params:query
})
+}
+
+/**
+ * 浣滃簾
+ */
+export const tmsArBillCancelPush: requestType = (id) => {
+ return request({
+ url: '/tms/tmsArBill/cancelPush/' + id,
+ method: 'post',
+ })
}
\ No newline at end of file
diff --git a/ui/admin-ui3/src/api/tms/tmsDispatchOrder.ts b/ui/admin-ui3/src/api/tms/tmsDispatchOrder.ts
index 3610466..7b7f6f8 100644
--- a/ui/admin-ui3/src/api/tms/tmsDispatchOrder.ts
+++ b/ui/admin-ui3/src/api/tms/tmsDispatchOrder.ts
@@ -260,6 +260,8 @@
data
})
}
+
+
export const loadingOrder: requestType = (data) => {
return request({
url: '/tms/tmsDispatchOrder/loadingOrder',
@@ -267,7 +269,6 @@
data
})
}
-
/**
* 瀵煎嚭璋冨害鍗曠鐞�
diff --git a/ui/admin-ui3/src/views/tms/tmsApBill/index.vue b/ui/admin-ui3/src/views/tms/tmsApBill/index.vue
index 296a124..b00b52a 100644
--- a/ui/admin-ui3/src/views/tms/tmsApBill/index.vue
+++ b/ui/admin-ui3/src/views/tms/tmsApBill/index.vue
@@ -32,6 +32,10 @@
<el-link size="small" type="primary" v-if="row.pushStatus == 3 || row.pushStatus == 4|| row.pushStatus == 0"
@click="handleManualPush(row)" class="link-btn" underline="never" icon="el-icon-upload">鎵嬪姩鎺ㄩ��
</el-link>
+ <el-link size="small" type="primary" v-if="[0, 2].includes(row.status)" @click="handleClose(row)"
+ class="link-btn" v-hasPermi="['tms:tmsApBill:closeOrder']" underline="never" icon="el-icon-close">
+ 浣滃簾
+ </el-link>
<el-link size="small" type="primary" v-if="row.status == 0" @click="handleEdit(row)" class="link-btn"
:underline="false" icon="el-icon-edit">璐﹀崟纭
</el-link>
@@ -132,7 +136,7 @@
exportTmsApBill,
getTmsApBill,
listTmsApBill,
- updateTmsApBill, manualPushTmsApBill,getPayableAuditLog
+ updateTmsApBill, manualPushTmsApBill,getPayableAuditLog,tmsApBillCancelPush
} from "@/api/tms/tmsApBill";
import useCurrentInstance from "@/utils/useCurrentInstance";
import { computed, reactive, ref, toRefs } from "vue";
@@ -470,4 +474,21 @@
})
}
+
+const handleClose = (row: any) => {
+ ElMessageBox.confirm("鏄惁瀵瑰簲浠樿处鍗�" + row.systemNo + "杩涜浣滃簾锛�", '绯荤粺鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ return tmsApBillCancelPush(row.id);
+ }).then(() => {
+ onLoad(page.value);
+ ElMessage({
+ message: "鎿嶄綔鎴愬姛锛�",
+ type: 'success'
+ })
+ });
+}
+
</script>
diff --git a/ui/admin-ui3/src/views/tms/tmsArBill/index.vue b/ui/admin-ui3/src/views/tms/tmsArBill/index.vue
index a5d0642..b18dc16 100644
--- a/ui/admin-ui3/src/views/tms/tmsArBill/index.vue
+++ b/ui/admin-ui3/src/views/tms/tmsArBill/index.vue
@@ -47,6 +47,10 @@
<el-link size="small" type="primary" @click="handleEdit(row)" class="link-btn" underline="never"
icon="el-icon-edit">淇敼
</el-link>
+ <el-link size="small" type="primary" v-if="[0, 2].includes(row.status)" @click="handleClose(row)"
+ class="link-btn" v-hasPermi="['tms:tmsArBill:closeOrder']" underline="never" icon="el-icon-close">
+ 浣滃簾
+ </el-link>
<el-link size="small" type="primary" @click="handleLog(row)" class="link-btn" underline="never"
icon="el-icon-tickets">鏃ュ織
</el-link>
@@ -144,7 +148,7 @@
getTmsArBill,
listTmsArBill,
updateTmsArBill, cancelArBill,
- exportArBillFormat,manualPushTmsArBill,listReceivableAuditLog
+ exportArBillFormat,manualPushTmsArBill,listReceivableAuditLog,tmsArBillCancelPush
} from "@/api/tms/tmsArBill";
import useCurrentInstance from "@/utils/useCurrentInstance";
import { computed, reactive, ref, toRefs } from "vue";
@@ -535,5 +539,19 @@
})
}
-
+const handleClose = (row: any) => {
+ ElMessageBox.confirm("鏄惁瀵瑰簲鏀惰处鍗�" + row.systemNo + "杩涜浣滃簾锛�", '绯荤粺鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ return tmsArBillCancelPush(row.id);
+ }).then(() => {
+ onLoad(page.value);
+ ElMessage({
+ message: "鎿嶄綔鎴愬姛锛�",
+ type: 'success'
+ })
+ });
+}
</script>
diff --git a/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue b/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
index 9c46032..7b708bb 100644
--- a/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
+++ b/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
@@ -23,7 +23,8 @@
<span>{{ dictFormat(order_type, row?.orderType || form?.orderType) }}</span>
</template>
<template v-else>
- <el-select v-model="form.orderType" placeholder="璇烽�夋嫨璁㈠崟绫诲瀷" @change="(val) => handleOrderTypeChange(val)" style="width: 100%" clearable>
+ <el-select v-model="form.orderType" placeholder="璇烽�夋嫨璁㈠崟绫诲瀷" @change="(val) => handleOrderTypeChange(val)"
+ style="width: 100%" clearable>
<el-option v-for="item in order_type" :key="item.value" :label="item.label" :value="parseInt(item.value)" />
</el-select>
</template>
@@ -78,11 +79,10 @@
<el-button type="primary" icon="Male" :disabled="pageF.single" @click="handleConnectHang"
v-hasPermi="['tms:tmsDispatchOrder:connectHang']">鎺ユ寕
</el-button>
-
- <el-button type="warning" icon="Avatar" :disabled="!(isCustoms == 0)" @click="handleCustoms"
+ <el-button type="warning" icon="Avatar" :disabled="selectionList.length === 0" @click="handleCustoms"
v-hasPermi="['tms:tmsDispatchOrder:customs']">濮旀墭鎶ュ叧淇℃伅
</el-button>
- <el-button type="primary" icon="UserFilled" :disabled="!(isLoad == 0)" @click="handleLoading"
+ <el-button type="primary" icon="UserFilled" :disabled="selectionList.length === 0" @click="handleLoading"
v-hasPermi="['tms:tmsDispatchOrder:loading']">濮旀墭鍗歌揣淇℃伅
</el-button>
<el-button type="primary" icon="UserFilled" :disabled="pageF.single" @click="handleZZ"
@@ -299,26 +299,40 @@
</div>
<div v-if="optionType == 'customs'">
- <el-descriptions style="margin-bottom: 20px" :column="2" border>
+ <el-descriptions v-if="optionNum == 'radio'" style="margin-bottom: 20px" :column="2" 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>
+ <el-table v-if="optionNum == 'checkbox'" :data="clearanceList" border size="small"
+ style="width: 100%; margin-bottom: 20px">
+ <el-table-column prop="dispatchNo" label="璋冨害鍗曞彿" width="150" />
+ <el-table-column prop="customerName" label="瀹㈡埛" min-width="120" show-overflow-tooltip />
+ <el-table-column prop="projectName" label="椤圭洰鍚嶇О" min-width="120" show-overflow-tooltip />
+ <el-table-column prop="transportLine" label="杩愯緭璺嚎" min-width="150" show-overflow-tooltip />
+ </el-table>
+
<avue-form v-model="form" ref="boxFormRef" :option="boxFormOption">
</avue-form>
</div>
<div v-if="optionType == 'loading'">
- <el-descriptions style="margin-bottom: 20px" :column="2" border>
+ <el-descriptions v-if="optionNum == 'radio'" style="margin-bottom: 20px" :column="2" 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>
+ <el-table v-if="optionNum == 'checkbox'" :data="clearanceList" border size="small"
+ style="width: 100%; margin-bottom: 20px">
+ <el-table-column prop="dispatchNo" label="璋冨害鍗曞彿" width="150" />
+ <el-table-column prop="customerName" label="瀹㈡埛" min-width="120" show-overflow-tooltip />
+ <el-table-column prop="projectName" label="椤圭洰鍚嶇О" min-width="120" show-overflow-tooltip />
+ <el-table-column prop="transportLine" label="杩愯緭璺嚎" min-width="150" show-overflow-tooltip />
+ </el-table>
<avue-form v-model="form" ref="boxFormRef" :option="boxFormOption">
-
</avue-form>
</div>
<template #footer>
@@ -665,7 +679,7 @@
importTemplateTmsDispatchOrder, ypdddjSumbit,
tmsTmsDispatchOrderImportLog,
saveTmsFinanceDetail2,
- getLastLicensePlate
+ getLastLicensePlate,
} from "@/api/tms/tmsDispatchOrder";
import useCurrentInstance from "@/utils/useCurrentInstance";
import { computed, onMounted, onBeforeUnmount, reactive, ref, toRefs, watch, getCurrentInstance, nextTick } from "vue";
@@ -3199,9 +3213,9 @@
}
});
const zzItemsTableData = ref();
-
-
-
+/* 鎶ュ叧鍒楄〃 */
+const clearanceList = ref([]);
+const optionNum = ref(''); // 鐢ㄤ簬鍖哄垎鏄姤鍏宠繕鏄鍗�
const {
tableData,
@@ -3237,6 +3251,7 @@
},
handleSelectionChangeFunc: (selection: any) => {
selectionList.value = selection;
+ clearanceList.value = selection;
if (selection.length > 0) {
isCustoms.value = selection[0].isCustoms;
isLoad.value = selection[0].isLoad;
@@ -3538,11 +3553,24 @@
pageF.isUploading = false;
})
} else if (optionType.value === 'customs') {
- customsOrder({
- id: form.value.id,
- customsServiceProviderId: form.value.customsServiceProviderId,
- customsServiceProviderName: form.value.customsServiceProviderName,
- }).then(res => {
+ let result = <any>[];
+ if (optionNum.value == 'checkbox') {
+ result = clearanceList.value.map(item => {
+ return {
+ id: item.id,
+ customsServiceProviderId: form.value.customsServiceProviderId,
+ customsServiceProviderName: form.value.customsServiceProviderName
+ };
+ });
+ }else if (optionNum.value == 'radio') {
+ result = [{
+ id: form.value.id,
+ customsServiceProviderId: form.value.customsServiceProviderId,
+ customsServiceProviderName: form.value.customsServiceProviderName
+ }]
+ }
+
+ customsOrder(result).then(res => {
ElMessage({
message: "鎻愪氦鎴愬姛锛�",
type: 'success'
@@ -3553,11 +3581,25 @@
pageF.isUploading = false;
})
} else if (optionType.value === 'loading') {
- loadingOrder({
- id: form.value.id,
- loadingServiceProviderId: form.value.loadingServiceProviderId,
- loadingServiceProviderName: form.value.loadingServiceProviderName,
- }).then(res => {
+
+ let result = <any>[];
+ if (optionNum.value == 'checkbox') {
+ result = clearanceList.value.map(item => {
+ return {
+ id: item.id,
+ loadingServiceProviderId: form.value.loadingServiceProviderId,
+ loadingServiceProviderName: form.value.loadingServiceProviderName
+ };
+ });
+ }else if (optionNum.value == 'radio') {
+ result = [{
+ id: form.value.id,
+ loadingServiceProviderId: form.value.loadingServiceProviderId,
+ loadingServiceProviderName: form.value.loadingServiceProviderName
+ }]
+ }
+
+ loadingOrder(result).then(res => {
ElMessage({
message: "鎻愪氦鎴愬姛锛�",
type: 'success'
@@ -4194,17 +4236,32 @@
const handleCustoms = () => {
title.value = '琛ュ厖濮旀墭鎶ュ叧淇℃伅';
open.value = true;
- form.value = selectionList.value[0];
+ form.value = clearanceList.value[0];
optionType.value = 'customs';
+ optionNum.value = 'checkbox'
boxFormOption.value = customsOption.value;
}
-const handleCustomsAdd = (selectionList) => {
+const handleCustomsAdd = (row) => {
title.value = '琛ュ厖濮旀墭瑁呭嵏淇℃伅';
+
+ clearanceList.value = [];
+ // 2. 娓呴櫎琛ㄦ牸瑙嗚涓婄殑閫変腑鐘舵��
+ if (crudRef.value) {
+ crudRef.value.clearSelection();
+ }
+
+ // 3. 閲嶇疆琛ㄥ崟
+ form.value = {};
+
+ // 4. 灏嗗綋鍓嶇偣鍑荤殑琛屾暟鎹祴鍊肩粰 form锛岀敤浜庡脊绐楃紪杈�
+ Object.assign(form.value, row);
+
open.value = true;
- form.value = selectionList;
optionType.value = 'loading';
+ optionNum.value = 'radio';
+
boxFormOption.value = loadingOption.value;
}
const handleLoading = () => {
@@ -4212,14 +4269,33 @@
open.value = true;
form.value = selectionList.value[0];
optionType.value = 'loading';
+ optionNum.value = 'checkbox'
boxFormOption.value = loadingOption.value;
}
-const handleLoadingAdd = (selectionList) => {
- title.value = '琛ュ厖濮旀墭瑁呭嵏淇℃伅';
+const handleLoadingAdd = (row: any) => {
+ // 1. 娓呯┖鎵归噺閫変腑鐨勬暟鎹垪琛紝瀵艰嚧椤堕儴鎸夐挳 disabled (length === 0)
+ clearanceList.value = [];
+ // 2. 娓呴櫎琛ㄦ牸瑙嗚涓婄殑閫変腑鐘舵��
+ if (crudRef.value) {
+ crudRef.value.clearSelection();
+ }
+
+ // 3. 閲嶇疆琛ㄥ崟
+ form.value = {};
+
+ // 4. 灏嗗綋鍓嶇偣鍑荤殑琛屾暟鎹祴鍊肩粰 form锛岀敤浜庡脊绐楃紪杈�
+ Object.assign(form.value, row);
+
+ // 5. 璁剧疆寮圭獥閰嶇疆
+ title.value = '琛ュ厖濮旀墭鎶ュ叧淇℃伅';
+ optionType.value = 'customs';
+ optionNum.value = 'radio';
+ boxFormOption.value = customsOption.value;
+
+ // 6. 鎵撳紑寮圭獥
open.value = true;
- form.value = selectionList;
- optionType.value = 'loading';
- boxFormOption.value = loadingOption.value;
+
+ // 銆愯皟璇曘�戞鏃舵墦鍗帮紝闀垮害搴斾负 0
}
const quotationItems = ref();
const getQuotationItems = async () => {
@@ -4959,7 +5035,7 @@
const handleOrderTypeChange = (value: any) => {
// 闃叉 value 涓� null 鎴� undefined 鏃跺嚭閿� (褰撴竻绌洪�夋嫨鏃�)
if (value === null || value === undefined) {
- return;
+ return;
}
option.value.group.forEach((item: any) => {
@@ -4970,7 +5046,7 @@
cItem.required = !(value == 1);
});
}
-
+
// 澶勭悊鍗歌揣鐐瑰繀濉鍒�
if (item.column.receiverId && item.column.receiverId.rules) {
item.column.receiverId.rules.forEach((cItem: any) => {
--
Gitblit v1.8.0