From 7ed2a032d0724e68aec8af940f2ce0023a9f0eb7 Mon Sep 17 00:00:00 2001
From: sen <sen@qq.com>
Date: 星期三, 15 四月 2026 09:27:51 +0800
Subject: [PATCH] 修改调度单年月日
---
ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue | 2877 +++++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 2,264 insertions(+), 613 deletions(-)
diff --git a/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue b/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
index 79fb8c6..82fb31f 100644
--- a/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
+++ b/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
@@ -1,25 +1,55 @@
<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"
- >
+ <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 #licensePlate-form="{ row, disabled }">
+ <el-input v-model="form.licensePlate" placeholder="璇烽�夋嫨杞︾墝鍙�" readonly :disabled="disabled"
+ @click="handleVehicleSelect">
+ <template #append>
+ <el-button icon="el-icon-search" @click="handleVehicleSelect" />
+ </template>
+ </el-input>
+ </template>
+ <!-- template 涓� -->
+ <template #requiredVehicleTypes-form="{ row, disabled }">
+ <template v-if="disabled">
+ <span>{{ dictFormat(vehicle_type, row?.requiredVehicleTypes || form?.requiredVehicleTypes) }}</span>
+ </template>
+ <template v-else>
+ <el-select v-model="form.requiredVehicleTypes" placeholder="璇烽�夋嫨杞﹀瀷" style="width: 100%">
+ <el-option v-for="item in vehicle_type" :key="item.value" :label="item.label" :value="item.value" />
+ </el-select>
+ </template>
+ </template>
+
+ <template #orderType-form="{ row, disabled }">
+ <template v-if="disabled">
+ <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-option v-for="item in order_type" :key="item.value" :label="item.label" :value="parseInt(item.value)" />
+ </el-select>
+ </template>
+ </template>
+
+ <template #actualVehicleType-form="{ row, disabled }">
+ <template v-if="disabled">
+ <span>{{ dictFormat(vehicle_type, row?.actualVehicleType || form?.actualVehicleType) }}</span>
+ </template>
+ <template v-else>
+ <el-select v-model="form.actualVehicleType" placeholder="璇烽�夋嫨瀹為檯杞﹀瀷" style="width: 100%">
+ <el-option v-for="item in vehicle_type" :key="item.value" :label="item.label" :value="item.value" />
+ </el-select>
+ </template>
+ </template>
+
+
+
<template #menu-left>
<!-- <el-button-->
<!-- type="success"-->
@@ -36,163 +66,214 @@
<!-- v-hasPermi="['tms:tmsDispatchOrder:remove']"-->
<!-- >鍒犻櫎-->
<!-- </el-button>-->
- <el-button
- type="warning"
- plain
- icon="Download"
- @click="handleExport"
- v-hasPermi="['tms:tmsDispatchOrder:export']"
- >瀵煎嚭
+ <el-button type="warning" plain icon="Download" @click="handleExport"
+ v-hasPermi="['tms:tmsDispatchOrder:export']">瀵煎嚭
</el-button>
-<!-- <el-button-->
-<!-- type="success"-->
-<!-- icon="Promotion"-->
-<!-- :disabled="pageF.multiple"-->
-<!-- @click="handleGenerate"-->
-<!-- v-hasPermi="['tms:tmsDispatchOrder:generate']"-->
-<!-- >鐢熸垚搴旀敹搴斾粯璐圭敤-->
-<!-- </el-button>-->
- <el-button
- type="warning"
- icon="Female"
- :disabled="pageF.single"
- @click="handleDropHook"
- v-hasPermi="['tms:tmsDispatchOrder:dropHook']"
- >鐢╂寕
+ <el-button type="info" icon="Upload" @click="handleImport"
+ v-hasPermi="['tms:tmsDispatchOrder:import']">瀵煎叆</el-button>
+ <el-button type="info" plain icon="Document" @click="handleImportLog">瀵煎叆鏃ュ織</el-button>
+ <!-- <el-button-->
+ <!-- type="success"-->
+ <!-- icon="Promotion"-->
+ <!-- :disabled="pageF.multiple"-->
+ <!-- @click="handleGenerate"-->
+ <!-- v-hasPermi="['tms:tmsDispatchOrder:generate']"-->
+ <!-- >鐢熸垚搴旀敹搴斾粯璐圭敤-->
+ <!-- </el-button>-->
+ <el-button type="warning" icon="Female" :disabled="pageF.single" @click="handleDropHook"
+ v-hasPermi="['tms:tmsDispatchOrder:dropHook']">鐢╂寕
</el-button>
- <el-button
- type="primary"
- icon="Male"
- :disabled="pageF.single"
- @click="handleConnectHang"
- v-hasPermi="['tms:tmsDispatchOrder:connectHang']"
- >鎺ユ寕
+ <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"
- v-hasPermi="['tms:tmsDispatchOrder:customs']"
- >濮旀墭鎶ュ叧淇℃伅
+ <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"
- v-hasPermi="['tms:tmsDispatchOrder:loading']"
- >濮旀墭鍗歌揣淇℃伅
+ <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"
- v-hasPermi="['tms:tmsDispatchOrder:zzdj']"
- >澧炲�间綔涓氱櫥璁�
+ <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-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-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']"
- icon="el-icon-connection">澶嶅埗
- </el-link>
- <el-link size="small" type="primary" v-if="[1,2].includes(row.status)" @click="handleUploadItinerary(row)"
- v-hasPermi="['tms:tmsTrip:add']"
- class="link-btn" :underline="false" icon="el-icon-upload">涓婁紶琛岀▼
- </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="[2].includes(row.status)" @click="handleOk(row)" class="link-btn"
- v-hasPermi="['tms:tmsDispatchOrder:okOrder']"
- :underline="false" icon="el-icon-circle-check">瀹屾垚琛岀▼
- </el-link>
-<!-- <el-link size="small" type="primary" v-if="[2,3].includes(row.status)" @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>
+ <el-button type="primary" icon="Printer" :disabled="pageF.single" @click="handlePrint"
+ v-hasPermi="['tms:tmsDispatchOrder:print']">鎵胯繍鍗曟墦鍗�
+ </el-button>
+ <el-button type="primary" icon="UserFilled" :disabled="!zxhdjSingle" @click="handleZXHDJ"
+ v-hasPermi="['tms:tmsDispatchOrder:zzdj']">瑁呭嵏璐х偣鐧昏
+ </el-button>
</template>
- <template #shipperId-form="{disabled}">
+ <template #loadingServiceProviderName="{ row }">
+ <template v-if="String(row.isCustoms).trim() === '0' && !row.loadingServiceProviderName">
+ <el-link type="primary" underline="never" @click="handleCustomsAdd(row)"
+ style="font-weight: bold; cursor: pointer; color: #409eff;">
+ 寰呮坊鍔�
+ </el-link>
+ </template>
+
+ <template v-else>
+ <span>{{ row.loadingServiceProviderName }}</span>
+ </template>
+ </template>
+
+ <!-- 鍗歌揣鏈嶅姟 -->
+ <template #customsServiceProviderName="{ row }">
+ <template v-if="String(row.isLoad).trim() === '0' && !row.customsServiceProviderName">
+ <el-link type="primary" underline="never" @click="handleLoadingAdd(row)"
+ style="font-weight: bold; cursor: pointer; color: #409eff;">
+ 寰呮坊鍔�
+ </el-link>
+ </template>
+
+ <template v-else>
+ <span>{{ row.customsServiceProviderName }}</span>
+ </template>
+ </template>
+
+
+
+ <template #menu="{ row, index, size }">
+ <el-tooltip content="鏌ョ湅" placement="top" :enterable="false">
+ <el-link type="primary" icon="el-icon-view" underline="never" class="link-btn"
+ v-hasPermi="['tms:tmsDispatchOrder:query']" @click="$refs.crudRef.rowView(row, index)">
+
+ </el-link>
+ </el-tooltip>
+ <el-tooltip content="鍒犻櫎" placement="top" :enterable="false">
+ <el-link type="primary" icon="el-icon-delete" underline="never" class="link-btn"
+ v-hasPermi="['tms:tmsDispatchOrder:remove']" v-if="row.status == 0"
+ @click="$refs.crudRef.rowDel(row, index)">
+
+ </el-link>
+ </el-tooltip>
+
+ <el-tooltip content="缂栬緫" placement="top" :enterable="false">
+ <el-link type="primary" icon="el-icon-edit" underline="never" class="link-btn"
+ v-hasPermi="['tms:tmsDispatchOrder:edit']" v-if="[0, 1].includes(row.status)"
+ @click="$refs.crudRef.rowEdit(row, index)">
+
+ </el-link>
+ </el-tooltip>
+
+ </template>
+ <template #menu-before="{ row }">
+
+
+ <el-tooltip content="杩愯緭璐у搧鐧昏" placement="top">
+ <el-link size="small" type="primary" @click="handleAddGoods(row)" class="link-btn"
+ v-hasPermi="['tms:tmsGoodsDetail:add']" v-if="[0, 1, 2].includes(row.status)" underline="never"
+ icon="el-icon-document-add">
+
+ </el-link>
+ </el-tooltip>
+ <el-tooltip content="瀹為檯杩愯緭璁板綍" placement="top">
+ <el-link size="small" type="primary" @click="handleActual(row)" class="link-btn"
+ v-hasPermi="['tms:tmsDispatchOrder:update']" v-if="[0, 1, 2].includes(row.status)" underline="never"
+ icon="el-icon-set-up">
+
+ </el-link>
+ </el-tooltip>
+ <el-tooltip content="纭畾" placement="top">
+ <el-link size="small" type="primary" v-if="row.status == 0" @click="handleConfirm(row)" class="link-btn"
+ v-hasPermi="['tms:tmsDispatchOrder:confirmOrder']" underline="never" icon="el-icon-pointer">
+
+ </el-link>
+ </el-tooltip>
+ <el-tooltip content="浣滃簾" placement="top">
+ <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="never" icon="el-icon-close">
+
+ </el-link>
+ </el-tooltip>
+ <el-tooltip content="澶嶅埗" placement="top">
+ <el-link size="small" type="primary" @click="handleCopy(row)" class="link-btn" underline="never"
+ v-hasPermi="['tms:tmsDispatchOrder:copyOrder']" icon="el-icon-connection">
+
+ </el-link>
+ </el-tooltip>
+ <el-tooltip content="涓婁紶琛岀▼" placement="top">
+ <el-link size="small" type="primary" v-if="[1, 2].includes(row.status)" @click="handleUploadItinerary(row)"
+ v-hasPermi="['tms:tmsTrip:add']" class="link-btn" underline="never" icon="el-icon-upload">
+
+ </el-link>
+ </el-tooltip>
+ <el-tooltip content="鏌ョ湅琛岀▼" placement="top">
+ <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="never" icon="Finished">
+
+ </el-link>
+ </el-tooltip>
+ <el-tooltip content="瀹屾垚琛岀▼" placement="top">
+ <el-link size="small" type="primary" v-if="[2].includes(row.status)" @click="handleOk(row)" class="link-btn"
+ v-hasPermi="['tms:tmsDispatchOrder:okOrder']" underline="never" icon="el-icon-circle-check">
+
+ </el-link>
+ </el-tooltip>
+ <!--
+ <el-tooltip content="瀹屾垚琛岀▼" placement="top">
+ <el-link size="small" type="primary" v-if="[2].includes(row.status)" @click="handleOk(row)" class="link-btn"
+ v-hasPermi="['tms:tmsDispatchOrder:okOrder']" underline="never" icon="el-icon-circle-check">
+
+ </el-link>
+ </el-tooltip> -->
+
+ <el-tooltip content="鏃ュ織" placement="top">
+ <el-link size="small" type="primary" @click="handleFlow(row)" class="link-btn"
+ v-hasPermi="['cwgl:estimatedReceivable:flog']" underline="never" icon="el-icon-document">
+
+ </el-link>
+ </el-tooltip>
+
+
+ </template>
+
+ <!-- <template #menu="{row}">
+
+</template> -->
+
+ <template #shipperId-form="{ disabled }">
<div style="display:flex; align-items: center;justify-content: space-between">
- <avue-input-table :props="consignorProps" dataType="string"
- :children="consignorOption" :disabled="disabled"
- :on-load="onShipperLoad" suffixIcon="search"
- v-model="form.shipperId" style="width: 80%"
- @change="changeShipper"
- placeholder="璇烽�夋嫨瑁呰揣鐐�"></avue-input-table>
- <el-button icon="plus" :disabled="disabled" @click="handleAddShipper"></el-button>
+ <avue-input-table :props="consignorProps" dataType="string" :children="consignorOption" :disabled="disabled"
+ :on-load="onShipperLoad" suffixIcon="search" v-model="form.shipperId" style="width: 80%"
+ @change="changeShipper" placeholder="璇烽�夋嫨瑁呰揣鐐�"></avue-input-table>
+ <el-button icon="plus" :disabled="disabled" @click="handleAddShipper"></el-button>
</div>
</template>
- <template #receiverId-form="{disabled}">
+ <template #receiverId-form="{ disabled }">
<div style="display:flex; align-items: center;justify-content: space-between">
- <avue-input-table :props="consignorProps"
- :children="consignorOption" dataType="string"
- :on-load="onConsignorLoad" suffixIcon="search"
- v-model="form.receiverId" :disabled="disabled"
- @change="changeReceiver" style="width: 80%"
- placeholder="璇烽�夋嫨鍗歌揣鐐�"></avue-input-table>
- <el-button icon="plus" :disabled="disabled" @click="handleAddReceiver"></el-button>
+ <avue-input-table :props="consignorProps" :children="consignorOption" dataType="string"
+ :on-load="onConsignorLoad" suffixIcon="search" v-model="form.receiverId" :disabled="disabled"
+ @change="changeReceiver" style="width: 80%" placeholder="璇烽�夋嫨鍗歌揣鐐�"></avue-input-table>
+ <el-button icon="plus" :disabled="disabled" @click="handleAddReceiver"></el-button>
</div>
</template>
</avue-crud>
<el-dialog :title="pageF.title" v-model="pageF.open" class="avue-dialog avue-dialog--top" width="80%">
<h2 v-if="optionType == 'addFinance'">鎶ヤ环璐圭敤</h2>
- <avue-crud v-if="optionType == 'addFinance'"
- :option="itemsTableOption"
- :data="itemsTableData"
- @selection-change="selectionChange2"
- >
- <template #count="{row}">
+ <avue-crud v-if="optionType == 'addFinance'" :option="itemsTableOption" :data="itemsTableData"
+ @selection-change="selectionChange2">
+ <template #count="{ row }">
<el-input-number v-model="row.count" @change="countChange(row)" placeholder="璇疯緭鍏ヨ璐规暟閲�"
- min="0"></el-input-number>
+ min="0"></el-input-number>
</template>
</avue-crud>
<h2 v-if="optionType == 'addFinance'">瀹炴姤瀹為攢璐圭敤</h2>
<avue-form v-if="optionType == 'addItinerary' || optionType == 'addFinance'" v-model="boxForm" ref="boxFormRef"
- :option="boxFormOption">
+ :option="boxFormOption">
</avue-form>
- <avue-crud
- :option="boxTableOption"
- :data="boxTableData"
- >
+ <avue-crud :option="boxTableOption" :data="boxTableData">
</avue-crud>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" v-if="optionType == 'addItinerary' || optionType == 'addFinance'"
- :loading="pageF.isUploading" @click="submitForm">
+ :loading="pageF.isUploading" @click="submitForm">
{{ pageF.isUploading ? '鎻愪氦涓�' : '纭� 瀹�' }}
</el-button>
- <el-button type="primary" v-if="optionType == 'generate' " :loading="pageF.isUploading"
- @click="submitGenerate">
+ <el-button type="primary" v-if="optionType == 'generate'" :loading="pageF.isUploading"
+ @click="submitGenerate">
{{ pageF.isUploading ? '鐢熸垚涓�' : '鐢熸垚璐圭敤' }}
</el-button>
<el-button @click="cancelBox">鍙� 娑�</el-button>
@@ -202,10 +283,7 @@
<el-dialog :title="title" v-model="open" class="avue-dialog avue-dialog--top" width="40%">
<div v-if="optionType === 'dropHook'">
- <el-descriptions
- :column="2"
- border
- >
+ <el-descriptions :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.$actualVehicleType }}</el-descriptions-item>
@@ -216,10 +294,7 @@
</el-descriptions>
</div>
<div v-if="optionType == 'connectHang'">
- <el-descriptions style="margin-bottom: 20px"
- :column="2"
- border
- >
+ <el-descriptions 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.$actualVehicleType }}</el-descriptions-item>
@@ -231,37 +306,45 @@
</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>
<div class="dialog-footer">
- <el-button type="primary" :loading="pageF.isUploading" @click="submitForm2">
+ <el-button type="primary" v-if="optionType != 'view'" :loading="pageF.isUploading" @click="submitForm2">
{{ pageF.isUploading ? '鎻愪氦涓�' : '纭� 瀹�' }}
</el-button>
<el-button @click="cancelBox2">鍙� 娑�</el-button>
@@ -271,14 +354,8 @@
<el-dialog title="璐у搧淇℃伅鐧昏" v-model="open2" class="avue-dialog avue-dialog--top" width="80%">
- <avue-crud
- :option="goodsTableOption"
- v-model="goodsForm"
- @row-update="rowGoodsUpdate"
- @row-save="rowGoodsSave"
- @row-del="rowGoodsDel"
- :data="goodsTableData" ref="goodsCrudRef"
- >
+ <avue-crud :option="goodsTableOption" v-model="goodsForm" @row-update="rowGoodsUpdate" @row-save="rowGoodsSave"
+ @row-del="rowGoodsDel" :data="goodsTableData" ref="goodsCrudRef">
</avue-crud>
<!-- <template #footer>-->
<!-- <div class="dialog-footer">-->
@@ -291,9 +368,7 @@
</el-dialog>
<el-dialog title="瀹為檯杩愯緭淇℃伅" v-model="open3" class="avue-dialog avue-dialog--top" width="80%">
- <avue-form v-model="actualForm"
- ref="actualFormRef"
- :option="actualFormOption">
+ <avue-form v-model="actualForm" ref="actualFormRef" :option="actualFormOption">
</avue-form>
<template #footer>
@@ -310,47 +385,75 @@
<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-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-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 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>
+ </avue-crud>
<div v-if="active === 'tab4'">
<h2>瀹炴姤瀹為攢璐圭敤</h2>
- <avue-form v-model="boxForm" ref="boxFormRef"
- :option="boxFormOption">
+ <!-- <avue-form v-model="boxForm" ref="boxFormRef" :option="boxFormOption">
- </avue-form>
- <avue-crud
- :option="boxTableOption"
- :data="boxTableData"
- >
+ </avue-form> -->
+ <avue-crud :option="expenditureTableOption" :data="tmsFinanceDetails">
+ <template #actualFeeAmount="{ row }">
+ <el-input-number v-model="row.actualFeeAmount" :precision="2" :min="0" controls-position="right"
+ placeholder="杈撳叆閲戦" style="width: 100%" />
+ </template>
+ <template #currency="{ row }">
+ <el-radio-group v-model="row.currency">
+ <el-radio v-for="item in sys_currency" :key="item.value" :label="item.value">
+ {{ item.label }}
+ </el-radio>
+ </el-radio-group>
+ </template>
+ <template #voucherUrl="{ row }">
+ <!-- <avue-upload v-model="row.voucherUrl" :action="'/common/upload2'" type="upload" accept="image/*"
+ @upload-after="(res, done, loading, column) => handleUploadAfter(res, done, loading, column, row)"></avue-upload> -->
+
+ <!-- 鍑瘉鍥剧墖 -->
+ <el-upload class="upload-demo" ref="uploadRef" :limit="1" drag :action="urlApi + '/common/upload2'" multiple
+ :show-file-list="true" :on-success="(res) => handleUploadAfter(res, row)"
+ :on-exceed="(files) => handleExceed(files, row)">
+ <el-icon class="el-icon--upload"><upload-filled /></el-icon>
+ <div class="el-upload__text">
+ 鐐瑰嚮鎴栧皢鍥剧墖鎷栨嫿鍒版鍖哄煙涓婁紶
+ </div>
+
+ </el-upload>
+ </template>
+ <template #remark="{ row }">
+ <el-input v-model="row.remark" placeholder="濉啓澶囨敞" clearable />
+ </template>
+ </avue-crud>
+ <avue-crud :option="boxTableOption" :data="boxTableData" @selection-change="boxSelectionChange">
+ <template #menu-left>
+ <el-button type="danger" plain icon="Delete"
+ :disabled="!(boxSelectionList.length === 1 && boxSelectionList[0]?.status === 0)"
+ @click="handleBatchBoxDel">
+ 浣滃簾
+ </el-button>
+ </template>
</avue-crud>
</div>
<template #footer>
<div class="dialog-footer">
- <el-button type="primary"
- :loading="pageF.isUploading" @click="submitTabForm">
+ <el-button type="primary" :loading="pageF.isUploading" @click="submitTabForm">
{{ pageF.isUploading ? '鎻愪氦涓�' : '纭� 瀹�' }}
</el-button>
@@ -361,22 +464,20 @@
<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-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 v-model="boxForm" ref="boxFormRef" :option="boxFormOption">
</avue-form>
<template #footer>
<div class="dialog-footer">
- <el-button type="primary"
- :loading="pageF.isUploading" @click="submitForm5">
+ <el-button type="primary" :loading="pageF.isUploading" @click="submitForm5">
{{ pageF.isUploading ? '鎻愪氦涓�' : '纭� 瀹�' }}
</el-button>
@@ -385,11 +486,192 @@
</template>
</el-dialog>
+ <el-dialog title="鎵胯繍鍗曟墦鍗�" v-model="open6" class="avue-dialog avue-dialog--top cydprint" width="80%">
+ <div v-if="print == 0">
+ <el-descriptions :column="3" border>
+ <el-descriptions-item label="璁㈠崟鍙�">{{ form.dispatchNo }}</el-descriptions-item>
+ <el-descriptions-item label="鎵胯繍鏃ユ湡">{{ form.orderTime }}</el-descriptions-item>
+ <el-descriptions-item label="杞︾墝">{{ form.licensePlate }}</el-descriptions-item>
+ <el-descriptions-item label="璁㈣溅绫诲瀷">{{ form.$actualVehicleType }}</el-descriptions-item>
+
+ <el-descriptions-item label="鍙告満濮撳悕">{{ form.mainDriverName }}</el-descriptions-item>
+ <el-descriptions-item label="鐢佃瘽">{{ form.mainDriverMobile }}</el-descriptions-item>
+ <el-descriptions-item label="鎵樻灦鍙�/鏌滃彿">{{ form.shelfCode }}/ {{ form.containerNo }}</el-descriptions-item>
+ <el-descriptions-item label="瀹㈡埛鍚嶇О">{{ form.customerName }}</el-descriptions-item>
+ <el-descriptions-item label="璧锋璺嚎">{{ form.transportLine }}</el-descriptions-item>
+ <el-descriptions-item label="璋冨害鍛�">{{ form.createBy }}</el-descriptions-item>
+ <el-descriptions-item label="鏄惁鎵撳嵃">{{ form.$isPrint }}</el-descriptions-item>
+ <el-descriptions-item label="鍘嗗彶鎵撳嵃娆℃暟">{{ form.printCount }}</el-descriptions-item>
+ </el-descriptions>
+ <h3 class="title" style="color: #333;font-weight: bold;">鍗曟嵁淇℃伅</h3>
+ <avue-form v-model="boxForm" ref="boxFormRef" :option="boxFormOption">
+
+ </avue-form>
+ </div>
+ <div v-else>
+ <div id="print">
+ <img src="@/assets/img.png" alt="" style="width: 168px;height: 68px">
+ <h3 class="title">鐝犳捣甯傛眹鐣呬氦閫氭姇璧勬湁闄愬叕鍙�</h3>
+ <div class="header">
+ <div class="order">璁㈠崟鍙凤細{{ boxForm.dispatchNo }}</div>
+ <div class="sub-title">璐х墿鎵胯繍鍗曡瘉</div>
+ </div>
+ <table>
+ <tr>
+ <td>鎵胯繍鏃ユ湡锛歿{ boxForm.orderTime }}</td>
+ <td>鍏仈鍗曞彿鐮侊細{{ boxForm.sixLinkNo }}</td>
+ </tr>
+ <tr>
+ <td>杞︾墝锛歿{ boxForm.licensePlate }}</td>
+ <td>璁㈣溅杞﹀瀷: {{ boxForm.$actualVehicleType }}</td>
+ </tr>
+ <tr>
+ <td>鍙告満濮撳悕锛歿{ boxForm.mainDriverName }}</td>
+ <td>鐢佃瘽锛歿{ boxForm.mainDriverMobile }}</td>
+ </tr>
+
+ <tr>
+ <td>鎵樻灦鍙�/鏌滃彿锛歿{ boxForm.shelfCode }}/ {{ boxForm.containerNo }}</td>
+ <td>琛岄┒鍙e哺锛歿{ boxForm.portName }}</td>
+ </tr>
+ <tr>
+ <td>鎻愬崟鍙稴/O锛歿{ boxForm.billNo }}</td>
+ <td>鐮佸ご鍚嶏細{{ boxForm.terminalName }}</td>
+ </tr>
+
+ <tr>
+ <td>瀹㈡埛锛歿{ boxForm.customerName }}</td>
+ <td>鑱旂粶浜猴細{{ boxForm.contactName }} {{ boxForm.contactPhone }} </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <span style="margin-right: 40px">璐х墿鍚嶇О锛歿{ boxForm.cargoName }} </span>
+ <span style="margin-right: 40px">浠舵暟锛歿{ boxForm.pieceCount }} </span>
+ <span style="margin-right: 40px">閲嶉噺锛歿{ boxForm.weight }}KG</span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">璧锋璺嚎锛歿{ boxForm.transportLine }}</td>
+ </tr>
+ <tr>
+ <td>
+ <div style="line-height: 24px">璋冨害鍛橈細{{ boxForm.createBy }}</div>
+ <div style="line-height: 42px">鎵胯繍鍙告満锛歿{ boxForm.mainDriverName }}</div>
+ </td>
+ <td>鏀惰揣浜虹瀛�/鐩栫珷锛�</td>
+ </tr>
+ </table>
+
+ <div>鎵樿繍椤荤煡锛�</div>
+ <div>1.濡傚洜鎵樿繍鑰呮惡甯﹁繚瑙勭鍝侊紝杩濆弽褰撳湴娉曚緥鑰屽紩鑷磋溅杈嗗強鍙告満鎵g暀鎴栧缃氾紝鎵樹汉浜哄繀璧斿伩涓�鍒囨崯澶憋紝鐩磋嚦浜嬩欢瀹屾弧瑙e喅涓烘銆�</div>
+ <div>2.璐х墿瑁呭嵏鍙婅繍杈撴湡闂达紝涓�鍒囦氦閫氭剰澶栧紩鑷磋矾涓嶈兘琛岄┒鎴栬溅杈嗘崯澶辫�屼护璐х墿涓嶈兘濡傛湡浜よ揣鍙婁竴鍒囬銆佺伀銆佺洍绐冨強鍏跺畠鎰忓鍧囩敱璐т富璐熻矗銆�</div>
+ <div>3.涓�鍒囦氦鏄撳潎鎸夋湰鍏徃涔嬫爣鍑嗙粡钀ユ潯娆句负鍑嗭紝鏈叕鍙镐箣璐d换鍦ㄦ煇浜涙儏鍐典笅浼氳璞佸厤鎴栭檺 (鍒跺鏈夐』瑕侊紝娆㈣繋绱㈠彇)锛�</div>
+
+ </div>
+
+ </div>
+
+
+
+ <template #footer>
+ <div class="dialog-footer">
+ <el-button @click="print = 0" v-if="print == 1">閲嶆柊濉啓</el-button>
+ <el-button type="primary" :loading="pageF.isUploading" @click="submitForm6">
+ {{ pageF.isUploading ? '鎻愪氦涓�' : '纭� 瀹�' }}
+ </el-button>
+
+ <el-button @click="open6 = false">鍙� 娑�</el-button>
+ </div>
+ </template>
+ </el-dialog>
+
+ <!-- 鐢ㄦ埛瀵煎叆瀵硅瘽妗� -->
+ <el-dialog title="璋冨害鍗曞鍏�" v-model="upload.open" width="400px" append-to-body>
+ <el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
+ :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+ :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+ <el-icon class="el-icon--upload"><upload-filled /></el-icon>
+ <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+ <template #tip>
+ <div class="el-upload__tip text-center">
+ <span>浠呭厑璁稿鍏ls銆亁lsx鏍煎紡鏂囦欢銆�</span>
+ <el-link type="primary" underline="never" style="font-size:12px;vertical-align: baseline;"
+ @click="importTemplate">涓嬭浇妯℃澘</el-link>
+ </div>
+ </template>
+ </el-upload>
+ <template #footer>
+ <div class="dialog-footer">
+ <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button>
+ <el-button @click="upload.open = false">鍙� 娑�</el-button>
+ </div>
+ </template>
+ </el-dialog>
+
+
+ <el-dialog title="棰勯厤璁㈠崟瑁呭嵏璐х偣鐧昏" v-model="open7" class="avue-dialog avue-dialog--top" width="80%">
+ <avue-form v-model="shipperReceiverForm" ref="shipperReceiverFormRef" :option="shipperReceiverFormOption">
+ <template #dispatchNos="{ disabled }">
+ <div class="dispatchNos">
+ <el-tag v-for="tag in shipperReceiverForm.dispatchNos" :key="tag" closable
+ @close="handleCloseDispatchNo(tag)">
+ {{ tag }}
+ </el-tag>
+ </div>
+
+ </template>
+ <template #shipperId="{ disabled }">
+ <div style="display:flex; align-items: center;justify-content: space-between">
+ <avue-input-table :props="consignorProps" dataType="string" :children="consignorOption" :disabled="disabled"
+ :on-load="onShipperLoad" suffixIcon="search" v-model="shipperReceiverForm.shipperId" style="width: 80%"
+ @change="changeShipper2" placeholder="璇烽�夋嫨瑁呰揣鐐�"></avue-input-table>
+ <el-button icon="plus" :disabled="disabled" @click="handleAddShipper2"></el-button>
+ </div>
+ </template>
+ <template #receiverId="{ disabled }">
+ <div style="display:flex; align-items: center;justify-content: space-between">
+ <avue-input-table :props="consignorProps" :children="consignorOption" dataType="string"
+ :on-load="onConsignorLoad" suffixIcon="search" v-model="shipperReceiverForm.receiverId"
+ :disabled="disabled" @change="changeReceiver2" style="width: 80%" placeholder="璇烽�夋嫨鍗歌揣鐐�"></avue-input-table>
+ <el-button icon="plus" :disabled="disabled" @click="handleAddReceiver2"></el-button>
+ </div>
+ </template>
+ </avue-form>
+ <template #footer>
+ <div class="dialog-footer">
+ <el-button type="primary" :loading="pageF.isUploading" @click="submitZxForm">
+ {{ pageF.isUploading ? '鎻愪氦涓�' : '纭� 瀹�' }}
+ </el-button>
+
+ <el-button @click="open7 = false">鍙� 娑�</el-button>
+ </div>
+ </template>
+ </el-dialog>
+
+ <el-dialog title="瀵煎叆鏃ュ織" v-model="importLogVisible" width="80%">
+ <avue-crud :data="importLogData" :option="importLogOption" :table-loading="importLogLoading"
+ @on-load="getImportLogList"></avue-crud>
+ </el-dialog>
+
+ <flowLog ref="flowLogIshow" :isShow="false" :flowParams="flowParams"></flowLog>
</basicContainer>
+ <el-dialog title="閫夋嫨杞﹁締" v-model="vehicleDialogVisible" width="70%" append-to-body :close-on-click-modal="false">
+ <avue-crud ref="vehicleCrudRef" :option="vehicleOption" :data="vehicleData" :page="vehiclePage"
+ @on-load="loadVehicleList" @search-change="vehicleSearchChange" @search-reset="vehicleSearchReset"
+ @current-change="vehicleCurrentChange" @size-change="vehicleSizeChange" @row-click="handleVehicleRowClick">
+ </avue-crud>
+
+ <template #footer>
+ <el-button @click="vehicleDialogVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="confirmVehicleSelection">纭� 瀹�</el-button>
+ </template>
+ </el-dialog>
+
</template>
<script setup name="tmsDispatchOrder" lang="ts">
+import { listTmsDispatchOrderLog } from "@/api/tms/tmsDispatchOrderLog";
import {
TmsDispatchOrderI,
addTmsDispatchOrder,
@@ -398,50 +680,91 @@
getTmsDispatchOrder,
listTmsDispatchOrder,
updateTmsDispatchOrder,
- confirmOrder, copyOrder, okOrder, initGenerate, generateTmsDispatchOrder, dropHook,
- connectHang,customsOrder,loadingOrder,checkCloseOrder,closeOrder
+ tmsDispatchOrderRecord,
+ confirmOrder,
+ copyOrder,
+ okOrder,
+ initGenerate,
+ generateTmsDispatchOrder,
+ dropHook,
+ connectHang,
+ customsOrder,
+ loadingOrder,
+ checkCloseOrder,
+ closeOrder,
+ printDispatchOrder,
+ importTemplateTmsDispatchOrder, ypdddjSumbit,
+ tmsTmsDispatchOrderImportLog,
+ saveTmsFinanceDetail2,
+ getLastLicensePlate,
} 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 {getTmsProject, listTmsProject} from "@/api/tms/tmsProject";
-import {getTmsServiceProvider, listTmsServiceProvider} from "@/api/tms/tmsServiceProvider";
-import {getTmsLoadingServiceProvider, listTmsLoadingServiceProvider} from "@/api/tms/tmsLoadingServiceProvider";
-import {getTmsCustomsServiceProvider, listTmsCustomsServiceProvider} from "@/api/tms/tmsCustomsServiceProvider";
-import {getTmsDriver, listTmsDriver} from "@/api/tms/tmsDriver";
-import {getTmsVehicle, listTmsVehicle} from "@/api/tms/tmsVehicle";
-import {getTmsContainer, listTmsContainer} from "@/api/tms/tmsContainer";
-import {getTmsShelf, listTmsShelf} from "@/api/tms/tmsShelf";
-import {addTmsConsignor, getTmsConsignor, listTmsConsignor} from "@/api/tms/tmsConsignor";
-import {ElMessage, ElMessageBox} from "element-plus";
-import {addTmsTrip, listTmsTrip} from "@/api/tms/tmsTrip";
+import { computed, onMounted, onBeforeUnmount, 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 { getTmsProject, listTmsProject } from "@/api/tms/tmsProject";
+import { getTmsServiceProvider, listTmsServiceProvider } from "@/api/tms/tmsServiceProvider";
+import { getTmsLoadingServiceProvider, listTmsLoadingServiceProvider } from "@/api/tms/tmsLoadingServiceProvider";
+import { getTmsCustomsServiceProvider, listTmsCustomsServiceProvider } from "@/api/tms/tmsCustomsServiceProvider";
+import { getTmsDriver, listTmsDriver } from "@/api/tms/tmsDriver";
+import { getTmsVehicle, listTmsVehicle } from "@/api/tms/tmsVehicle";
+import { getTmsContainer, listTmsContainer } from "@/api/tms/tmsContainer";
+import { getTmsShelf, listTmsShelf } from "@/api/tms/tmsShelf";
+import { addTmsConsignor, getTmsConsignor, listTmsConsignor } from "@/api/tms/tmsConsignor";
+import { ElMessage, ElMessageBox, type ElUpload } from "element-plus";
+import { addTmsTrip, listTmsTrip } from "@/api/tms/tmsTrip";
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, 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";
+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, 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";
+import { $Print } from '@smallwei/avue'
+import { getToken } from "@/utils/auth";
+import { useAvueTableShowHide } from "@/hooks/useAvueTableShowHide";
+import {
+ tmsFinanceDetail
+} from "@/api/tms/tmsDispatchOrder";
+const { appContext } = getCurrentInstance() as any;
-const {appContext} = getCurrentInstance();
-
-const {proxy} = useCurrentInstance();
+const { proxy } = useCurrentInstance(
+);
+// 瀹氫箟绫诲瀷
+interface VehicleRow {
+ id?: string;
+ licensePlate?: string;
+ serviceProviderName?: string;
+ vehicleType?: string;
+ internalCode?: string;
+ licenseHk?: string;
+ licenseMo?: string;
+ [key: string]: any;
+}
+const { fee_type, sys_currency, vehicle_type, order_type } = proxy.useDict('fee_type', 'sys_currency', 'vehicle_type', 'order_type')
const crudRef = ref();
const boxFormRef = ref();
const goodsCrudRef = ref();
const actualFormRef = ref();
-
+const isAutoSettingVehicle = ref(false);
+/**
+ * 瀛楀吀鍏叡杞崲鍑芥暟
+ */
+const dictFormat = (dict: any, value: any) => {
+ const dictData = Array.isArray(dict) ? dict : (dict?.value || []);
+ if (value === undefined || value === null || value === '') return '';
+ return proxy.selectDictLabel(dictData, value);
+};
const permissionList = (key: any, row: any, index: any) => {
if (key == 'addBtn') {
@@ -456,11 +779,31 @@
return true;
}
};
+const getNextDayMidnight = () => {
+ const date = new Date();
+
+ // 1. 灏嗘棩鏈熸帹杩涘埌鏄庡ぉ
+ date.setDate(date.getDate() + 1);
+
+ // 2. 灏嗘椂鍒嗙姣鍏ㄩ儴娓呴浂
+ date.setHours(0, 0, 0, 0);
+
+ const year = date.getFullYear();
+ const month = String(date.getMonth() + 1).padStart(2, '0');
+ const day = String(date.getDate()).padStart(2, '0');
+ const hours = String(date.getHours()).padStart(2, '0');
+ const minutes = String(date.getMinutes()).padStart(2, '0');
+ const seconds = String(date.getSeconds()).padStart(2, '0');
+
+ // 杩斿洖鏍煎紡锛�2024-01-20 00:00:00
+ return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+};
const data = reactive({
form: <TmsDispatchOrderI>{},
+ boxSelectionList: <any>[],
queryParams: <TmsDispatchOrderI & PageQueryInterface>{},
page: <PagesInterface>{
- pageSize: 10,
+ pageSize: 30,
total: 0,
currentPage: 1,
},
@@ -478,23 +821,36 @@
goodsForm: <any>{},
open3: false,
actualForm: <any>{},
- isCustoms:<any> -1,
+ isCustoms: <any>-1,
isLoad: -1,
- open5:false,
+ open5: false,
+ open6: false,
+ open7: false,
+ zxhdjSingle: false,
})
const {
queryParams, form, page, selectionList, open3,
boxTableData, optionType,
boxFormOption, boxForm, boxTableOption, title, open, open2,
- goodsTableData, goodsForm, actualForm, selectionList2,isCustoms,isLoad,open5
+ goodsTableData, goodsForm, actualForm, selectionList2, isCustoms, isLoad, open5, open6, open7, zxhdjSingle, boxSelectionList
} = toRefs(data);
const option = ref({
+ menuType: 'icon',
+
+ viewBtn: false, // 鍏抽棴鍘熺敓鏌ョ湅
+ editBtn: false, // 鍏抽棴鍘熺敓缂栬緫
+ delBtn: false, // 鍏抽棴鍘熺敓缂栬緫
+
+ searchIndex: 7, // 鍏抽敭锛氭姌鍙犳椂鏄剧ず鐨勪釜鏁帮紙鏍规嵁浣犵殑瀛楁鏁伴噺璋冩暣锛�
+ searchIcon: true, // 鍏抽敭锛氭樉绀烘姌鍙�/灞曞紑鎸夐挳
+ searchMenuSpan: 6, // 鎼滅储鎸夐挳鏍忓崰浣嶏紙鍙�夛級
+
pageKey: 'TmsDispatchOrder',
rowKey: 'id',
labelWidth: 130,
searchSpan: 6,
searchLabelWidth: 150,
- menuWidth: 300,
+ menuWidth: 350,
height: 530,
group: [
{
@@ -511,7 +867,7 @@
message: "璇烽�夋嫨杩愯緭璺嚎", trigger: "change"
}
],
- type: 'table', suffixIcon: 'search',dataType: 'string',
+ type: 'table', suffixIcon: 'search', dataType: 'string',
change: (val: any) => {
const table = crudRef.value?.getPropRef?.('quoteDetailId')?.$refs?.temp;
if (!table) return;
@@ -530,7 +886,7 @@
customerCode: active.customerCode,
contractId: active.contractId,
contractName: active.contractName,
- requiredVehicleTypes: active.vehicleType,
+ requiredVehicleTypes: active.vehicleType + '',
quotePlanId: active.quotePlanId,
});
form.value.shipperId = undefined;
@@ -578,7 +934,7 @@
label: 'transportRoute',
value: 'quoteDetailId'
},
- onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
+ onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
if (value) {
let id = value;
if (Array.isArray(value)) {
@@ -588,7 +944,7 @@
return callback(res.data || {})
})
} else {
- listTransportRouteVi({pageSize: page.pageSize, pageNum: page.currentPage, ...data}).then(res => {
+ listTransportRouteVi({ pageSize: page.pageSize, pageNum: page.currentPage, ...data }).then(res => {
return callback({
total: res.total,
data: res.rows || [],
@@ -615,15 +971,16 @@
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"
- }
- ],
+ label: '涓嬪崟杞﹀瀷',
+ minWidth: 130,
+ display: true, // 鉁� 鏀逛负 true 鍦ㄨ〃鏍兼樉绀�
+ type: 'select',
+ search: true,
+ dicUrl: '/system/dict/data/type/vehicle_type',
+ dataType: 'string',
+
},
+
orderType: {
label: '璁㈠崟绫诲瀷',
display: true,
@@ -635,10 +992,14 @@
message: "璁㈠崟绫诲瀷涓嶈兘涓虹┖", trigger: "change"
}
],
- change: ({value}: any) => {
+ change: ({ value }: any) => {
+
option.value.group.forEach((item: any) => {
+
if (item.prop == 'pcxx') {
item.column.shipperId.rules.forEach((cItem: any) => {
+
+
cItem.required = !(value == 1);
});
item.column.receiverId.rules.forEach((cItem: any) => {
@@ -825,7 +1186,7 @@
],
},
isUrgent: {
- label: '鏄惁绱ф��',value: '1',
+ label: '鏄惁绱ф��', value: '1',
display: true,
type: 'radio', dicUrl: '/system/dict/data/type/sys_number_is', dataType: 'string',
rules: [
@@ -846,13 +1207,20 @@
// },
orderTime: {
label: '涓嬪崟鏃堕棿',
- type: 'datetime', // 鏀逛负 datetime 绫诲瀷
- format: 'YYYY-MM-DD HH:mm:ss',
- valueFormat: 'YYYY-MM-DD HH:mm:ss',
+ type: 'date', // 鏀逛负 datetime 绫诲瀷
+ format: 'YYYY-MM-DD',
+ valueFormat: 'YYYY-MM-DD',
display: true,
+ rules: [
+ {
+ required: true,
+ message: "涓嬪崟鏃堕棿涓嶈兘涓虹┖", trigger: "blur"
+ }
+ ],
},
latestDeparture: {
label: '瑕佹眰鏈�鏅氬嚭鍙戞椂闂�',
+ value: getNextDayMidnight(),
type: 'datetime', // 鏀逛负 datetime 绫诲瀷
format: 'YYYY-MM-DD HH:mm:ss', labelWidth: 150,
valueFormat: 'YYYY-MM-DD HH:mm:ss',
@@ -866,6 +1234,7 @@
},
latestArrival: {
label: '瑕佹眰鏈�鏅氬埌杈炬椂闂�', labelWidth: 150,
+ value: getNextDayMidnight(),
type: 'datetime', // 鏀逛负 datetime 绫诲瀷
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
@@ -894,8 +1263,7 @@
message: "鏄惁鏄嚜钀ヨ溅闃熶笉鑳戒负绌�", trigger: "change"
}
],
- change: ({value}: any) => {
- console.log(value)
+ change: ({ value }: any) => {
option.value.group.forEach((item: any) => {
if (item.prop == 'pcxx') {
item.column.commissionModel.display = value != 1;
@@ -912,7 +1280,7 @@
},
},
- commissionModel:{
+ commissionModel: {
label: '鎻愭垚妯″紡',
display: true, type: 'radio', dicUrl: '/system/dict/data/type/commission_model', dataType: 'string',
rules: [
@@ -943,7 +1311,7 @@
});
}
},
- type: 'table', suffixIcon: 'search',dataType: 'string',
+ type: 'table', suffixIcon: 'search', dataType: 'string',
children: {
border: true,
searchLabelWidth: 100,
@@ -987,7 +1355,7 @@
label: 'serviceShortName',
value: 'id'
},
- onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
+ onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
if (value) {
let id = value;
if (Array.isArray(value)) {
@@ -997,7 +1365,7 @@
return callback(res.data || {})
})
} else {
- listTmsServiceProvider({pageSize: page.pageSize, pageNum: page.currentPage, ...data}).then(res => {
+ listTmsServiceProvider({ pageSize: page.pageSize, pageNum: page.currentPage, ...data }).then(res => {
return callback({
total: res.total,
data: res.rows || [],
@@ -1017,18 +1385,75 @@
message: "涓婚┚椹跺憳涓嶈兘涓虹┖", trigger: "change"
}
],
- change: (val: any) => {
+ // 鍦� mainDriverId 鐨� change 浜嬩欢涓�
+ change: async (val: any) => {
+ if (data.isChanging) return;
+ data.isChanging = true;
+ isAutoSettingVehicle.value = true;
+
const table = crudRef.value?.getPropRef?.('mainDriverId')?.$refs?.temp;
- if (!table) return;
+ if (!table) {
+ data.isChanging = false;
+ isAutoSettingVehicle.value = false;
+ return;
+ }
+
let active = table.active;
if (Array.isArray(active)) active = active[0];
- if (active) {
- Object.assign(form.value, {
- mainDriverId: active.id,
- mainDriverName: active.driverName,
- });
+ console.log('鑷姩濉厖鎴愬姛:', active);
+ if (active && active.driverName) {
+ try {
+
+ await nextTick(); // 绛夊緟娓呯┖鐢熸晥
+ const res = await getLastLicensePlate(active.driverName);
+
+ if (res.code === 200 && res.data) {
+ const vehicleData = res.data;
+ nextTick(() => {
+ Object.assign(form.value, {
+ licensePlate: vehicleData.licensePlate,
+ vehicleId: vehicleData.vehicleId,
+ actualVehicleType: vehicleData.actualVehicleType,
+ mainDriverName: active.driverName
+
+
+ });
+ })
+ await nextTick();
+ console.log('鑷姩濉厖鎴愬姛:', form.value);
+ }
+ } catch (e) {
+ console.error("鑷姩鑾峰彇杞︾墝澶辫触", e);
+ } finally {
+ data.isChanging = false;
+ setTimeout(() => {
+ // isAutoSettingVehicle.value = false;
+ }, 500); // 绋嶅井寤堕暱涓�鐐规椂闂达紝闃叉 vehicleId 鐨� change 浜嬩欢璇Е
+ }
+ } else {
+ data.isChanging = false;
+ // isAutoSettingVehicle.value = false;
}
},
+ // change: (val: any) => {
+ // const table = crudRef.value?.getPropRef?.('mainDriverId')?.$refs?.temp;
+ // if (!table) return;
+ // let active = table.active;
+ // if (Array.isArray(active)) active = active[0];
+ // console.log(active,'888');
+
+ // if (active) {
+ // Object.assign(form.value, {
+ // mainDriverId: active.id,
+ // mainDriverName: active.driverName,
+ // });
+ // console.log(active.driverName,'44');
+ // getLastLicensePlate(active.driverName).then(res => {
+ // console.log(res);
+
+ // })
+ // }
+ // },
type: 'table', suffixIcon: 'search',
children: {
border: true,
@@ -1054,7 +1479,7 @@
label: 'driverName',
value: 'id'
},
- onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
+ onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
if (value) {
let id = value;
if (Array.isArray(value)) {
@@ -1067,7 +1492,7 @@
listTmsDriver({
pageSize: page.pageSize,
pageNum: page.currentPage, ...data,
- carrierType: form.value.operationMode,vehicleProviderId:form.value.vehicleProviderId
+ carrierType: form.value.operationMode, vehicleProviderId: form.value.vehicleProviderId
}).then(res => {
return callback({
total: res.total,
@@ -1120,19 +1545,21 @@
label: 'driverName',
value: 'id'
},
- onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
+ onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
if (value) {
let id = value;
if (Array.isArray(value)) {
id = value[0]
}
+ console.log(98521);
+
getTmsDriver(id).then(res => {
return callback(res.data || {})
})
} else {
listTmsDriver({
pageSize: page.pageSize,
- pageNum: page.currentPage, ...data,vehicleProviderId:form.value.vehicleProviderId,
+ pageNum: page.currentPage, ...data, vehicleProviderId: form.value.vehicleProviderId,
carrierType: form.value.operationMode
}).then(res => {
return callback({
@@ -1145,92 +1572,117 @@
}
},
- vehicleId: {
+ licensePlate: {
label: '杞︾墝鍙�', dataType: 'string',
display: true,
+ readonly: true,
rules: [
{
- required: true,
+ required: false,
message: "杞︾墝鍙蜂笉鑳戒负绌�", trigger: "change"
}
],
- change: (val: any) => {
- const table = crudRef.value?.getPropRef?.('vehicleId')?.$refs?.temp;
- if (!table) return;
- let active = table.active;
- if (Array.isArray(active)) active = active[0];
- if (active) {
- Object.assign(form.value, {
- vehicleId: active.id,
- licensePlate: active.licensePlate,
- actualVehicleType: active.vehicleType,
- });
- }
- },
- type: 'table', suffixIcon: 'search',
- children: {
- border: true,
- searchLabelWidth: 100,
- searchMenuSpan: 5,
- column: {
- serviceProviderName: {
- label: '杞﹁締鏈嶅姟鍟�', minWidth: 130,
- search: true,
- },
- vehicleType: {
- label: '杞﹁締绫诲瀷', minWidth: 120,
- type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/vehicle_type',
-
- search: true,
- },
- internalCode: {
- label: '杞﹁締鍐呴儴缂栫爜', minWidth: 120,
- search: true,
- },
- licensePlate: {
- label: '杞︾墝鍙�', minWidth: 120,
- search: true,
- },
- licenseHk: {
- label: '棣欐腐鐗岀収', minWidth: 120,
- search: true,
- },
- licenseMo: {
- label: '婢抽棬鐗岀収', minWidth: 120,
- search: true,
- },
- },
-
- },
- props: {
- label: 'licensePlate',
- value: 'id'
- },
- onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
- if (value) {
- let id = value;
- if (Array.isArray(value)) {
- id = value[0]
- }
- getTmsVehicle(id).then(res => {
- return callback(res.data || {})
- })
- } else {
- listTmsVehicle({
- pageSize: page.pageSize,
- pageNum: page.currentPage, ...data,
- carrierType: form.value.operationMode,serviceProviderId:form.value.vehicleProviderId
- }).then(res => {
- return callback({
- total: res.total,
- data: res.rows || [],
- })
- })
- }
-
+ click: ({ value, column }) => {
+ // 鐐瑰嚮杈撳叆妗嗘椂瑙﹀彂閫夋嫨寮圭獥
+ handleVehicleSelect();
}
-
},
+ // vehicleId: {
+ // label: '杞︾墝鍙�', dataType: 'string',
+ // display: true,
+ // rules: [
+ // {
+ // required: true,
+ // message: "杞︾墝鍙蜂笉鑳戒负绌�", trigger: "change"
+ // }
+ // ],
+ // change: (val: any) => {
+ // if (isAutoSettingVehicle.value) {
+ // return;
+ // }
+
+ // const table = crudRef.value?.getPropRef?.('vehicleId')?.$refs?.temp;
+ // if (!table) return;
+ // let active = table.active;
+ // if (Array.isArray(active)) active = active[0];
+ // console.log(9852);
+
+ // if (active) {
+ // Object.assign(form.value, {
+ // vehicleId: active.id,
+ // licensePlate: active.licensePlate,
+ // actualVehicleType: active.vehicleType,
+ // });
+ // }
+ // },
+ // type: 'table', suffixIcon: 'search',
+ // children: {
+ // border: true,
+ // searchLabelWidth: 100,
+ // searchMenuSpan: 5,
+ // column: {
+ // serviceProviderName: {
+ // label: '杞﹁締鏈嶅姟鍟�', minWidth: 130,
+ // search: true,
+ // },
+ // vehicleType: {
+ // label: '杞﹁締绫诲瀷', minWidth: 120,
+ // type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/vehicle_type',
+
+ // search: true,
+ // },
+ // internalCode: {
+ // label: '杞﹁締鍐呴儴缂栫爜', minWidth: 120,
+ // search: true,
+ // },
+ // licensePlate: {
+ // label: '杞︾墝鍙�', minWidth: 120,
+ // search: true,
+ // },
+ // licenseHk: {
+ // label: '棣欐腐鐗岀収', minWidth: 120,
+ // search: true,
+ // },
+ // licenseMo: {
+ // label: '婢抽棬鐗岀収', minWidth: 120,
+ // search: true,
+ // },
+ // },
+
+ // },
+ // props: {
+ // label: 'licensePlate',
+ // value: 'id'
+ // },
+ // onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
+ // if (value) {
+ // let id = value;
+ // if (Array.isArray(value)) {
+ // id = value[0]
+ // }
+ // console.log(555, 'xq1');
+
+ // getTmsVehicle(id).then(res => {
+ // return callback(res.data || {})
+ // })
+ // } else {
+ // console.log(444, 'xq1');
+
+ // listTmsVehicle({
+ // pageSize: page.pageSize,
+ // pageNum: page.currentPage, ...data,
+ // carrierType: form.value.operationMode, serviceProviderId: form.value.vehicleProviderId
+ // }).then(res => {
+ // return callback({
+ // total: res.total,
+ // data: res.rows || [],
+ // })
+ // })
+ // }
+
+ // }
+
+ // },
actualVehicleType: {
label: '娲惧嚭杞﹀瀷',
display: true, type: 'select', dicUrl: '/system/dict/data/type/vehicle_type', dataType: 'string',
@@ -1301,7 +1753,7 @@
});
}
},
- type: 'table', suffixIcon: 'search',dataType: 'string',
+ type: 'table', suffixIcon: 'search', dataType: 'string',
children: {
border: true,
searchLabelWidth: 100,
@@ -1335,7 +1787,7 @@
label: 'containerCode',
value: 'id'
},
- onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
+ onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
if (value) {
let id = value;
if (Array.isArray(value)) {
@@ -1345,7 +1797,7 @@
return callback(res.data || {})
})
} else {
- listTmsContainer({pageSize: page.pageSize, pageNum: page.currentPage, ...data}).then(res => {
+ listTmsContainer({ pageSize: page.pageSize, pageNum: page.currentPage, ...data }).then(res => {
return callback({
total: res.total,
data: res.rows || [],
@@ -1375,7 +1827,7 @@
});
}
},
- type: 'table', suffixIcon: 'search',dataType: 'string',
+ type: 'table', suffixIcon: 'search', dataType: 'string',
children: {
border: true,
searchLabelWidth: 100,
@@ -1407,7 +1859,7 @@
label: 'shelfCode',
value: 'id'
},
- onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
+ onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
if (value) {
let id = value;
if (Array.isArray(value)) {
@@ -1417,7 +1869,7 @@
return callback(res.data || {})
})
} else {
- listTmsShelf({pageSize: page.pageSize, pageNum: page.currentPage, ...data}).then(res => {
+ listTmsShelf({ pageSize: page.pageSize, pageNum: page.currentPage, ...data }).then(res => {
return callback({
total: res.total,
data: res.rows || [],
@@ -1509,25 +1961,100 @@
column: {
dispatchNo: {
- label: '璋冨害鍗曞彿', minWidth: 120,
+ label: '璋冨害鍗曞彿', minWidth: 180,
display: false,
search: true,
+ overHidden: true
+ },
+ licensePlate: {
+ label: '杞︾墝鍙�', minWidth: 120,
+ display: false,
+ search: true,
+ overHidden: true
},
customerName: {
label: '瀹㈡埛',
+ display: false, minWidth: 250,
+ search: true,
+ overHidden: true
+ },
+ mainDriverName: {
+ label: '涓婚┚椹跺憳',
display: false, minWidth: 120,
search: true,
+ overHidden: true
},
+ requiredVehicleTypes: {
+ label: '涓嬪崟杞﹀瀷', minWidth: 130,
+ display: false, type: 'select', search: true,
+ dicUrl: '/system/dict/data/type/vehicle_type',
+ dataType: 'string',
- projectName: {
- label: '椤圭洰鍚嶇О',
- display: false, minWidth: 120,
- search: true,
},
- contractName: {
- label: '鍏宠仈鍚堝悓鍚嶇О', minWidth: 120,
+ // createTimeRange: {
+ // label: '鍒涘缓鏃堕棿', display: false, searchRange: true, type: 'date',
+ // format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
+ // valueFormat: 'YYYY-MM-DD',
+ // overHidden: true
+ // },
+ createTimeRangeArray: {
+ label: '鍒涘缓鏃堕棿',
+ minWidth: 150,
+ search: true,
+ searchRange: true,
+ addDisplay: false, // 鏂板鏃朵笉鏄剧ず
+ editDisplay: false, // 淇敼鏃朵笉鏄剧ず
+ viewDisplay: false,
+ type: 'daterange',
+ startPlaceholder: '寮�濮嬫棩鏈�',
+ endPlaceholder: '缁撴潫鏃ユ湡',
+ valueFormat: 'YYYY-MM-DD',
+ hide: true
+ },
+ updateTimeRange: {
+ label: '鏇存柊鏃堕棿', display: false, searchRange: true, type: 'date',
+ format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
+ valueFormat: 'YYYY-MM-DD',
+ overHidden: true
+ },
+ updateTimeRangeArray: {
+ label: '鏇存柊鏃堕棿',
+ minWidth: 150,
+ search: true,
+ searchRange: true,
+ addDisplay: false, // 鏂板鏃朵笉鏄剧ず
+ editDisplay: false, //
+ viewDisplay: false,
+ type: 'daterange',
+ startPlaceholder: '寮�濮嬫棩鏈�',
+ endPlaceholder: '缁撴潫鏃ユ湡',
+ valueFormat: 'YYYY-MM-DD',
+ hide: true
+ },
+ loadingServiceProviderName: {
+ label: '瑁呰揣鏈嶅姟鍟嗗悕绉�', minWidth: 150,
display: false,
search: true,
+ overHidden: true
+ },
+ customsServiceProviderName: {
+ label: '鎶ュ叧鏈嶅姟鍟嗗悕绉�', minWidth: 150,
+ display: false,
+ search: true,
+ overHidden: true
+ },
+ projectName: {
+ label: '椤圭洰鍚嶇О',
+ display: false, minWidth: 250,
+ search: true,
+ overHidden: true
+ },
+
+ contractName: {
+ label: '鍏宠仈鍚堝悓鍚嶇О', minWidth: 250,
+ display: false,
+ search: true,
+ overHidden: true
},
orderType: {
label: '璁㈠崟绫诲瀷',
@@ -1555,18 +2082,10 @@
label: '杞﹁締鏈嶅姟鍟嗗悕绉�', minWidth: 150,
display: false,
search: true,
+ overHidden: true
},
- loadingServiceProviderName: {
- label: '瑁呰揣鏈嶅姟鍟嗗悕绉�', minWidth: 150,
- display: false,
- search: true,
- },
- customsServiceProviderName: {
- label: '鎶ュ叧鏈嶅姟鍟嗗悕绉�', minWidth: 150,
- display: false,
- search: true,
- },
+
isUrgent: {
label: '鏄惁绱ф��',
display: false, minWidth: 100,
@@ -1588,10 +2107,12 @@
type: 'select', dicUrl: '/system/dict/data/type/sys_number_is', dataType: 'string',
},
- mainDriverName: {
- label: '涓婚┚椹跺憳',
+ isPrint: {
+ label: '鏄惁鎵撳嵃鎵胯繍鍗�',
display: false, minWidth: 120,
search: true,
+ type: 'select', dicUrl: '/system/dict/data/type/sys_number_is', dataType: 'string',
+
},
// requiredVehicleTypes: {
@@ -1599,36 +2120,27 @@
// 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,
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: 120,
+ display: false, minWidth: 200,
search: true,
+ overHidden: true
},
receiverName: {
- label: '鍗歌揣鐐瑰悕绉�', minWidth: 120,
+ label: '鍗歌揣鐐瑰悕绉�', minWidth: 200,
display: false,
search: true,
+ overHidden: true
},
// accountsReceivableStatus: {
// label: '搴旀敹璐圭敤鐢熸垚鐘舵��', minWidth: 160,
@@ -1663,23 +2175,13 @@
inStatusList: {
label: '鐘舵��', minWidth: 150,
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/tms_dispatch_order_status',
- display: false,multiple:true,
+ 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,
- },
+
+
createBy: {
label: '鍒涘缓浜�', minWidth: 150,
addDisplay: false,
@@ -1692,15 +2194,13 @@
label: '鍒涘缓鏃堕棿', minWidth: 180,
addDisplay: false,
editDisplay: false,
- viewDisplay: false,
+ viewDisplay: true,
hide: false,
search: false,
+ overHidden: true,
+ searchSpan: 6,
},
- createTimeRange: {
- label: '鍒涘缓鏃堕棿', display: false, search: true, searchRange: true, type: 'date',
- format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
- valueFormat: 'YYYY-MM-DD',
- },
+
updateBy: {
label: '鏇存柊浜�', minWidth: 150,
addDisplay: false,
@@ -1713,29 +2213,109 @@
label: '鏇存柊鏃堕棿', minWidth: 180,
addDisplay: false,
editDisplay: false,
- viewDisplay: false,
+ viewDisplay: true,
hide: false,
search: false,
+ overHidden: true,
+ searchSpan: 6,
+
},
- updateTimeRange: {
- label: '鏇存柊鏃堕棿', display: false, search: true, searchRange: true, type: 'date',
- format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
- valueFormat: 'YYYY-MM-DD',
+ confirmTime: {
+ label: '纭鏃堕棿', minWidth: 180,
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: true,
+ hide: true,
+ search: false,
+ overHidden: true,
+ searchSpan: 6,
},
confirmTimeRange: {
- label: '纭鏃堕棿', display: false, search: true, searchRange: true, type: 'date',
- format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
+ label: '纭鏃堕棿', display: false, 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: 5,
+ confirmTimeRangeArray: {
+ label: '纭鏃堕棿',
+ minWidth: 150,
+ search: true,
+ searchRange: true,
+ addDisplay: false, // 鏂板鏃朵笉鏄剧ず
+ editDisplay: false, // 淇敼鏃朵笉鏄剧ず
+ viewDisplay: false,
+ type: 'daterange',
+ startPlaceholder: '寮�濮嬫棩鏈�',
+ endPlaceholder: '缁撴潫鏃ユ湡',
valueFormat: 'YYYY-MM-DD',
+ hide: true
},
- orderTimeRange: {
- label: '涓嬪崟鏃堕棿', display: false, search: true, searchRange: true, type: 'date',
- format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
+ okTime: {
+ label: '瀹屾垚鏃堕棿', minWidth: 180,
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: true,
+ hide: true,
+ search: false,
+ searchSpan: 6,
+ },
+ // okTimeRange: {
+ // label: '瀹屾垚鏃堕棿2', display: false, searchRange: true, type: 'date',
+ // viewDisplay: true,
+ // format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
+ // valueFormat: 'YYYY-MM-DD',
+ // },
+
+ okTimeRangeArray: {
+ label: '瀹屾垚鏃堕棿',
+ minWidth: 150,
+ search: true,
+ searchRange: true,
+ addDisplay: false, // 鏂板鏃朵笉鏄剧ず
+ editDisplay: false, // 淇敼鏃朵笉鏄剧ず
+ viewDisplay: false,
+ type: 'daterange',
+ startPlaceholder: '寮�濮嬫棩鏈�',
+ endPlaceholder: '缁撴潫鏃ユ湡',
valueFormat: 'YYYY-MM-DD',
+ hide: true
+ },
+ orderTime: {
+ label: '涓嬪崟鏃堕棿', minWidth: 180,
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: true,
+ hide: true,
+ search: false,
+ searchSpan: 6,
+ },
+ loadingDate: {
+ bind: 'orderTime',
+ label: '瑁呰揣鏃ユ湡', minWidth: 180,
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: true,
+ hide: true,
+ search: false,
+ searchSpan: 6,
+ },
+ // orderTimeRange: {
+ // label: '涓嬪崟鏃堕棿', display: false, searchRange: true, type: 'date',
+ // format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
+ // valueFormat: 'YYYY-MM-DD',
+ // },
+ orderTimeRangeArray: {
+ label: '涓嬪崟鏃堕棿',
+ minWidth: 150,
+ search: true,
+ searchRange: true,
+ addDisplay: false, // 鏂板鏃朵笉鏄剧ず
+ editDisplay: false, // 淇敼鏃朵笉鏄剧ず
+ viewDisplay: false,
+ type: 'daterange',
+ startPlaceholder: '寮�濮嬫棩鏈�',
+ endPlaceholder: '缁撴潫鏃ユ湡',
+ valueFormat: 'YYYY-MM-DD',
+ hide: true
},
}
@@ -1758,8 +2338,8 @@
tripType: {
label: '琛岀▼绫诲瀷',
display: true,
- change: function ({value}: any) {
- if (value == '5'){
+ change: function ({ value }: any) {
+ if (value == '5') {
itineraryOption.value.column.iscc.display = true
}
},
@@ -1828,7 +2408,7 @@
},
}
})
-
+const urlApi = ref(import.meta.env.VITE_APP_BASE_API)
const itineraryTableOption = ref({
menu: false,
addBtn: false,
@@ -1906,27 +2486,27 @@
}
],
},
- currency:{
- label: '甯佺',
+ currency: {
+ label: '甯佸埗',
display: true,
type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
rules: [
{
required: true,
- message: "甯佺涓嶈兘涓虹┖", trigger: "change"
+ message: "甯佸埗涓嶈兘涓虹┖", trigger: "change"
}
],
},
voucherUrl: {
- label: '璐圭敤鍑瘉',
+ label: '璐圭敤鍑瘉1',
display: true,
accept: 'string', dataType: 'string',
type: 'upload',
action: '/common/upload2',
},
- remark:{
+ remark: {
label: '澶囨敞',
type: 'textarea', minRows: 3, maxRows: 5, span: 24
},
@@ -1941,7 +2521,8 @@
const financeTableOption = ref({
menu: false,
addBtn: false,
- header: false, selection: false,
+ selection: true,
+ header: true,
title: '鍘嗗彶鍨粯璐圭敤',
column: {
dataSource: {
@@ -1969,8 +2550,8 @@
label: '閲戦',
display: true,
},
- currency:{
- label: '甯佺',
+ currency: {
+ label: '甯佸埗',
display: true,
type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
},
@@ -1982,10 +2563,14 @@
type: 'upload',
action: '/common/upload2',
},
- remark:{
+ remark: {
label: '澶囨敞',
},
-
+ status: {
+ label: '鐘舵��',
+ display: true,
+ type: 'select', dicUrl: '/system/dict/data/type/sys_cancel_word', dataType: 'string',
+ },
}
})
@@ -2096,17 +2681,21 @@
label: 'licensePlate',
value: 'id'
},
- onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
+ onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
if (value) {
let id = value;
if (Array.isArray(value)) {
id = value[0]
}
+ console.log(998, 'xq1');
+
getTmsVehicle(id).then(res => {
return callback(res.data || {})
})
} else {
- listTmsVehicle({pageSize: page.pageSize, pageNum: page.currentPage, ...data}).then(res => {
+ console.log(669, 'xq2');
+
+ listTmsVehicle({ pageSize: page.pageSize, pageNum: page.currentPage, ...data }).then(res => {
return callback({
total: res.total,
data: res.rows || [],
@@ -2150,7 +2739,7 @@
label: 'driverName',
value: 'id'
},
- onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
+ onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
if (value) {
let id = value;
if (Array.isArray(value)) {
@@ -2160,7 +2749,7 @@
return callback(res.data || {})
})
} else {
- listTmsDriver({pageSize: page.pageSize, pageNum: page.currentPage, ...data}).then(res => {
+ listTmsDriver({ pageSize: page.pageSize, pageNum: page.currentPage, ...data }).then(res => {
return callback({
total: res.total,
data: res.rows || [],
@@ -2180,7 +2769,7 @@
labelWidth: 120,
column: {
customsServiceProviderId: {
- label: '鎶ュ叧鏈嶅姟鍟�', span:24,
+ label: '鎶ュ叧鏈嶅姟鍟�', span: 24,
display: true,
rules: [
{
@@ -2205,22 +2794,22 @@
border: true,
searchLabelWidth: 100,
searchMenuSpan: 5,
- column:{
+ column: {
serviceCode: {
label: '鏈嶅姟鍟嗙紪鐮�',
search: true,
},
serviceShortName: {
- label: '鏈嶅姟鍟嗙畝绉�',minWidth:150,
+ label: '鏈嶅姟鍟嗙畝绉�', minWidth: 150,
search: true,
},
serviceName: {
- label: '鏈嶅姟鍟嗗叏绉�',search: true,
+ label: '鏈嶅姟鍟嗗叏绉�', search: true,
},
serviceType: {
- label: '鏈嶅姟绫诲瀷',minWidth:150,
+ label: '鏈嶅姟绫诲瀷', minWidth: 150,
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/service_type',
- multiple:true,
+ multiple: true,
search: true,
},
}
@@ -2229,7 +2818,7 @@
label: 'serviceShortName',
value: 'id'
},
- onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
+ onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
if (value) {
let id = value;
if (Array.isArray(value)) {
@@ -2239,7 +2828,7 @@
return callback(res.data || {})
})
} else {
- listTmsCustomsServiceProvider({pageSize: page.pageSize, pageNum: page.currentPage, ...data}).then(res => {
+ listTmsCustomsServiceProvider({ pageSize: page.pageSize, pageNum: page.currentPage, ...data }).then(res => {
return callback({
total: res.total,
data: res.rows || [],
@@ -2258,7 +2847,7 @@
labelWidth: 120,
column: {
loadingServiceProviderId: {
- label: '瑁呭嵏鏈嶅姟鍟�',span:24,
+ label: '瑁呭嵏鏈嶅姟鍟�', span: 24,
display: true,
rules: [
{
@@ -2283,22 +2872,22 @@
border: true,
searchLabelWidth: 100,
searchMenuSpan: 5,
- column:{
+ column: {
serviceCode: {
label: '鏈嶅姟鍟嗙紪鐮�',
search: true,
},
serviceShortName: {
- label: '鏈嶅姟鍟嗙畝绉�',minWidth:150,
+ label: '鏈嶅姟鍟嗙畝绉�', minWidth: 150,
search: true,
},
serviceName: {
- label: '鏈嶅姟鍟嗗叏绉�',search: true,
+ label: '鏈嶅姟鍟嗗叏绉�', search: true,
},
serviceType: {
- label: '鏈嶅姟绫诲瀷',minWidth:150,
+ label: '鏈嶅姟绫诲瀷', minWidth: 150,
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/service_type',
- multiple:true,
+ multiple: true,
search: true,
},
}
@@ -2307,7 +2896,7 @@
label: 'serviceShortName',
value: 'id'
},
- onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
+ onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
if (value) {
let id = value;
if (Array.isArray(value)) {
@@ -2317,7 +2906,7 @@
return callback(res.data || {})
})
} else {
- listTmsLoadingServiceProvider({pageSize: page.pageSize, pageNum: page.currentPage, ...data}).then(res => {
+ listTmsLoadingServiceProvider({ pageSize: page.pageSize, pageNum: page.currentPage, ...data }).then(res => {
return callback({
total: res.total,
data: res.rows || [],
@@ -2335,8 +2924,8 @@
menuBtn: false,
labelWidth: 120,
column: {
- closeWhy:{
- label: '浣滃簾鍘熷洜',span:24,
+ closeWhy: {
+ label: '浣滃簾鍘熷洜', span: 24,
type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/close_why',
rules: [
{
@@ -2345,10 +2934,10 @@
}
],
},
- closeWhyRemark:{
+ closeWhyRemark: {
label: '浣滃簾鍘熷洜璇存槑',
type: 'textarea',
- span:24,
+ span: 24,
},
}
})
@@ -2400,7 +2989,7 @@
label: 'productName',
value: 'id'
},
- onLoad: ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
+ onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
if (value) {
let id = value;
if (Array.isArray(value)) {
@@ -2674,7 +3263,7 @@
name: 'tab4',
value: '3',
}
- ]
+ ]
})
const tabsOptionRef = ref();
const active = ref('tab1');
@@ -2686,24 +3275,24 @@
menu: false,
selection: false,
column: {
- freeName:{
+ freeName: {
label: '璐圭敤鍚嶇О',
},
- unit:{
+ unit: {
label: '璁¢噺鍗曚綅',
},
- count:{
- label : '璁¤垂鏁伴噺'
+ count: {
+ label: '璁¤垂鏁伴噺'
},
- remark:{
+ remark: {
label: '澶囨敞'
}
}
});
const zzItemsTableData = ref();
-
-
-
+/* 鎶ュ叧鍒楄〃 */
+const clearanceList = ref([]);
+const optionNum = ref(''); // 鐢ㄤ簬鍖哄垎鏄姤鍏宠繕鏄鍗�
const {
tableData,
@@ -2739,32 +3328,81 @@
},
handleSelectionChangeFunc: (selection: any) => {
selectionList.value = selection;
- if (selection.length > 0){
+ clearanceList.value = selection;
+ if (selection.length > 0) {
isCustoms.value = selection[0].isCustoms;
- isLoad.value = selection[0].isLoad ;
- }else{
+ 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)
+ zxhdjSingle.value = pageF.multiple || true;
+ let yp = selection.filter((item: any) => {
+ return item.orderType == 0
+ });
+ if (yp.length > 0) {
+ zxhdjSingle.value = false;
+ }
},
+
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;
+ // 1. 浣跨敤娴呮嫹璐濓紝涓嶅奖鍝嶅師濮嬫煡璇㈠璞�
+ // 鍏抽敭鐐癸細浠庡師濮� queryParams.value 鍙栧�硷紝纭繚鍒嗛〉鏃朵緷鐒惰兘鎷垮埌鏁扮粍
+ let newParams = { ...queryParams.value, ...params };
+
+ // 2. 瀹氫箟鏃ユ湡瀛楁鏄犲皠 (鏁扮粍鍚� : 鎺ュ彛闇�瑕佺殑鍓嶇紑)
+ const dateMap = {
+ confirmTimeRangeArray: 'confirmTimeRange',
+ createTimeRangeArray: 'createTime',
+ updateTimeRangeArray: 'updateTimeRange',
+ okTimeRangeArray: 'okTime',
+ orderTimeRangeArray: 'orderTime'
+ };
+
+ // 3. 閬嶅巻澶勭悊鏃ユ湡
+ Object.keys(dateMap).forEach(arrayKey => {
+ const prefix = dateMap[arrayKey];
+ const range = newParams[arrayKey];
+
+ if (Array.isArray(range) && range.length === 2) {
+ // 璧嬪�兼帴鍙i渶瑕佺殑 Begin 鍜� End
+ newParams[`${prefix}Begin`] = range[0];
+ newParams[`${prefix}End`] = range[1];
+ }
+
+ // 鍙湪缁欐帴鍙g殑鍙傛暟涓垹闄ゆ暟缁勶紝涓嶅奖鍝嶉〉闈㈡樉绀虹殑 queryParams
+ delete newParams[arrayKey];
+ });
+
+ // 4. 娓呮礂鍙傛暟锛氳繃婊ょ┖鍊�
+ const finalParams = {};
+ Object.keys(newParams).forEach(key => {
+ const val = newParams[key];
+ if (val !== '' && val !== null && val !== undefined) {
+ finalParams[key] = val;
+ }
+ });
+
+
+ // 銆愭牳蹇冧慨鏀广�戯細鐩存帴杩斿洖锛屼笉瑕佽祴鍊肩粰 queryParams.value
+ return finalParams;
},
- handleBeforeOpenFunc:(type:string)=>{
- if(type == 'add'){
+ handleBeforeOpenFunc: (type: string) => {
+
+ if (type == 'add') {
form.value = {};
+ } else if (type == 'edit') {
+ // form.value = row;
+
}
}
})
+
+useAvueTableShowHide(option.value);
+
const handleConfirm = (row: any) => {
ElMessageBox.confirm("鏄惁瀵硅皟搴﹀崟鍙�" + row.dispatchNo + "纭畾 锛�", '绯荤粺鎻愮ず', {
confirmButtonText: '纭畾',
@@ -2817,8 +3455,9 @@
const handleUploadItinerary = (row: any) => {
optionType.value = 'addItinerary';
boxFormOption.value = itineraryOption.value;
+
boxTableOption.value = itineraryTableOption.value;
- listTmsTrip({dispatchOrderId: row.id, pageNum: 1, pageSize: 999}).then(res => {
+ listTmsTrip({ dispatchOrderId: row.id, pageNum: 1, pageSize: 999 }).then(res => {
boxTableData.value = res.rows || [];
pageF.open = true;
pageF.title = '涓婁紶琛岀▼';
@@ -2831,6 +3470,7 @@
vehicleNumber: row.licensePlate,
vehicleId: row.vehicleId,
}
+
})
}
const cancelBox = () => {
@@ -2886,7 +3526,7 @@
const handleLogItinerary = (row: any) => {
optionType.value = 'view';
boxTableOption.value = itineraryTableOption.value;
- listTmsTrip({dispatchOrderId: row.id, pageNum: 1, pageSize: 999}).then(res => {
+ listTmsTrip({ dispatchOrderId: row.id, pageNum: 1, pageSize: 999 }).then(res => {
boxTableData.value = res.rows || [];
pageF.open = true;
pageF.title = '鏌ョ湅琛岀▼';
@@ -2898,7 +3538,7 @@
optionType.value = 'addFinance';
boxFormOption.value = financeOption.value;
boxTableOption.value = financeTableOption.value;
- const quotePlanItemRes = await listTmsQuoteItem({quotePlanId: row.quotePlanId, pageNum: 1, pageSize: 999});
+ const quotePlanItemRes = await listTmsQuoteItem({ quotePlanId: row.quotePlanId, pageNum: 1, pageSize: 999 });
let items = quotePlanItemRes.rows || [];
itemsTableData.value = items.map((item: any) => {
return {
@@ -2989,11 +3629,25 @@
}).finally(() => {
pageF.isUploading = false;
})
- }else if (optionType.value === 'customs') {
- customsOrder({id:form.value.id,
- customsServiceProviderId: form.value.customsServiceProviderId,
- customsServiceProviderName: form.value.customsServiceProviderName,
- }).then(res => {
+ } else if (optionType.value === 'customs') {
+ 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'
@@ -3003,11 +3657,26 @@
}).finally(() => {
pageF.isUploading = false;
})
- }else if (optionType.value === 'loading') {
- loadingOrder({id:form.value.id,
- loadingServiceProviderId: form.value.loadingServiceProviderId,
- loadingServiceProviderName: form.value.loadingServiceProviderName,
- }).then(res => {
+ } else if (optionType.value === 'loading') {
+
+ 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'
@@ -3017,7 +3686,7 @@
}).finally(() => {
pageF.isUploading = false;
})
- }else {
+ } else {
connectHang({
dispatchId: form.value.id,
vehicleId: form.value.vehicleId,
@@ -3041,7 +3710,7 @@
}
const handleAddGoods = (row: any) => {
- listTmsGoodsDetail({dispatchId: row.id, pageSize: 999, pageNum: 1}).then(res => {
+ listTmsGoodsDetail({ dispatchId: row.id, pageSize: 999, pageNum: 1 }).then(res => {
goodsTableData.value = res.rows || [];
form.value = row;
open2.value = true;
@@ -3098,7 +3767,7 @@
}
const submitForm3 = () => {
- updateTmsDispatchOrder(actualForm.value).then(res => {
+ tmsDispatchOrderRecord(actualForm.value).then(res => {
ElMessage({
message: "鎿嶄綔鎴愬姛锛�",
type: 'success'
@@ -3115,7 +3784,7 @@
selectionList2.value = selection;
}
-const onShipperLoad = ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
+const onShipperLoad = ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
if (value) {
let id = value;
if (Array.isArray(value)) {
@@ -3134,7 +3803,10 @@
if (districtId) data.districtId = districtId;
if (streetId) data.streetId = streetId;
}
- listTmsConsignor({pageSize: page.pageSize, pageNum: page.currentPage, ...data,customerId: form.value.customerId}).then(res => {
+ if (shipperReceiverForm.value.customerId) {
+ form.value.customerId = shipperReceiverForm.value.customerId;
+ }
+ listTmsConsignor({ pageSize: page.pageSize, pageNum: page.currentPage, ...data, customerId: form.value.customerId }).then(res => {
return callback({
total: res.total,
data: res.rows || [],
@@ -3142,7 +3814,7 @@
})
}
}
-const onConsignorLoad = ({page, value, data}: { page: any, value: any, data: any }, callback: any) => {
+const onConsignorLoad = ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
if (value) {
let id = value;
if (Array.isArray(value)) {
@@ -3161,7 +3833,10 @@
if (districtId) data.districtId = districtId;
if (streetId) data.streetId = streetId;
}
- listTmsConsignor({pageSize: page.pageSize, pageNum: page.currentPage, ...data,customerId: form.value.customerId}).then(res => {
+ if (shipperReceiverForm.value.customerId) {
+ form.value.customerId = shipperReceiverForm.value.customerId;
+ }
+ listTmsConsignor({ pageSize: page.pageSize, pageNum: page.currentPage, ...data, customerId: form.value.customerId }).then(res => {
return callback({
total: res.total,
data: res.rows || [],
@@ -3169,7 +3844,7 @@
})
}
}
-const changeShipper = ({value}: any) => {
+const changeShipper = ({ value }: any) => {
if (value) {
let id = value;
@@ -3204,7 +3879,7 @@
})
}
}
-const changeReceiver = ({value}: any) => {
+const changeReceiver = ({ value }: any) => {
if (value) {
let id = value;
@@ -3240,13 +3915,13 @@
})
}
}
-const consignorAddOption =ref({
+const consignorAddOption = ref({
labelWidth: 120,
group: [
{
label: '鍩虹淇℃伅',
prop: 'jcxx',
- column:{
+ column: {
// consignorCode: {
// label: '瑁呭嵏璐х偣缂栫爜',minWidth: 150,
// addDisplay: false, disabled: true,
@@ -3262,7 +3937,7 @@
// ],
// },
consignorName: {
- label: '瑁呭嵏璐х偣鍚嶇О',minWidth: 150,
+ label: '瑁呭嵏璐х偣鍚嶇О', minWidth: 150,
addDisplay: true,
editDisplay: true,
viewDisplay: true,
@@ -3275,8 +3950,8 @@
}
],
},
- customerName:{
- label: '鎵�灞炲鎴�',minWidth: 150,disabled: true,
+ customerName: {
+ label: '鎵�灞炲鎴�', minWidth: 150, disabled: true,
},
// customerId: {
// label: '鎵�灞炲鎴�',minWidth: 150,
@@ -3371,7 +4046,7 @@
// ],
// },
consignorType: {
- label: '瑁呭嵏璐х偣绫诲瀷',minWidth: 150,
+ label: '瑁呭嵏璐х偣绫诲瀷', minWidth: 150,
type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/consignor_type',
addDisplay: true,
editDisplay: true,
@@ -3390,9 +4065,9 @@
{
label: '鑱旂郴浜轰俊鎭�',
prop: 'lxrxx',
- column:{
+ column: {
contactName: {
- label: '鑱旂郴浜哄鍚�',minWidth: 150,
+ label: '鑱旂郴浜哄鍚�', minWidth: 150,
addDisplay: true,
editDisplay: true,
viewDisplay: true,
@@ -3406,7 +4081,7 @@
],
},
contactPhone: {
- label: '鑱旂郴浜虹數璇�',minWidth: 150,
+ label: '鑱旂郴浜虹數璇�', minWidth: 150,
addDisplay: true,
editDisplay: true,
viewDisplay: true,
@@ -3414,7 +4089,7 @@
search: false,
},
contactEmail: {
- label: '鑱旂郴浜洪偖绠�',minWidth: 150,
+ label: '鑱旂郴浜洪偖绠�', minWidth: 150,
addDisplay: true,
editDisplay: true,
viewDisplay: true,
@@ -3426,12 +4101,12 @@
{
label: '鍦板潃淇℃伅',
prop: 'dzxx',
- column:{
+ column: {
mapLocationDetail: {
- label: '鍦板浘浣嶇疆',minWidth: 150,
+ label: '鍦板浘浣嶇疆', minWidth: 150,
addDisplay: true,
- editDisplay: true,span:24,
+ editDisplay: true, span: 24,
viewDisplay: true,
hide: true,
search: false,
@@ -3451,23 +4126,22 @@
// console.log(form2.value,"form2")
// }
// },
- change: async ({value}:any)=>{
- if (Array.isArray(value) && value.length === 3){
- mapRegeo(value[1], value[0]).then(async res => {
- let params = res.data || {};
- if (params.info === "OK") {
- let {province, city, district, township} = params.regeocode.addressComponent || {};
- const res = await getAddressCode({province, city, district, township});
- const {provinceCode, cityCode, districtCode, townshipCode} = res.data || {};
- form2.value.regionLabel = province + " / " + city + " / " + district + " / " + township;
- form2.value.provinceId = provinceCode;
- form2.value.cityId = cityCode;
- form2.value.districtId = districtCode;
- form2.value.streetId = townshipCode;
- form2.value.dispatchTransportArea = params.regeocode.formatted_address || params.regeocode.formattedAddress;
- console.log(form2.value, "form2")
- }
- });
+ change: async ({ value }: any) => {
+ if (Array.isArray(value) && value.length === 3) {
+ mapRegeo(value[1], value[0]).then(async res => {
+ let params = res.data || {};
+ if (params.info === "OK") {
+ let { province, city, district, township } = params.regeocode.addressComponent || {};
+ const res = await getAddressCode({ province, city, district, township });
+ const { provinceCode, cityCode, districtCode, townshipCode } = res.data || {};
+ form2.value.regionLabel = province + " / " + city + " / " + district + " / " + township;
+ form2.value.provinceId = provinceCode;
+ form2.value.cityId = cityCode;
+ form2.value.districtId = districtCode;
+ form2.value.streetId = townshipCode;
+ form2.value.dispatchTransportArea = params.regeocode.formatted_address || params.regeocode.formattedAddress;
+ }
+ });
}
},
},
@@ -3487,9 +4161,9 @@
// },
electronicFenceRange: {
label: '鐢靛瓙鍥存爮鑼冨洿',
- addDisplay: true,minWidth: 150,
+ addDisplay: true, minWidth: 150,
editDisplay: true,
- viewDisplay: true,append:'绫�',
+ viewDisplay: true, append: '绫�',
hide: false,
search: true,
rules: [
@@ -3504,12 +4178,12 @@
{
label: '鍏朵粬淇℃伅',
prop: 'qtyxx',
- column:{
+ column: {
remark: {
- label: '澶囨敞',minWidth: 150,
+ label: '澶囨敞', minWidth: 150,
type: 'textarea', minRows: 3, maxRows: 5,
addDisplay: true,
- editDisplay: true,span:24,
+ editDisplay: true, span: 24,
viewDisplay: true,
hide: true,
search: false,
@@ -3522,7 +4196,7 @@
const dialForm = ref();
const handleAddShipper = () => {
- if (!form.value.customerId){
+ if (!form.value.customerId) {
return ElMessage.error('璇峰厛閫夋嫨杩愯緭璺嚎');
}
form2.value = {
@@ -3532,33 +4206,33 @@
};
dialForm.value = $DialogForm(appContext)({
title: '鏂板瑁呰揣鍦�',
- data:form2.value,
+ data: form2.value,
width: '80%',
option: consignorAddOption.value,
menuPosition: 'right',
- callback: (res:any,) => {
+ callback: (res: any,) => {
let data1 = res.data;
- if (data1.mapLocationDetail){
- data1.mapLocation = data1.mapLocationDetail[0]+','+data1.mapLocationDetail[1];
+ if (data1.mapLocationDetail) {
+ data1.mapLocation = data1.mapLocationDetail[0] + ',' + data1.mapLocationDetail[1];
data1.addressDetail = data1.mapLocationDetail[2]
}
- addTmsConsignor({...form2.value,...data1}).then(res2=>{
+ addTmsConsignor({ ...form2.value, ...data1 }).then(res2 => {
let active = res2.data || {};
if (active) {
let shipperRegionCode = '';
- if (active.provinceId){
+ if (active.provinceId) {
shipperRegionCode = active.provinceId;
}
- if (active.cityId){
- shipperRegionCode =shipperRegionCode+ ","+active.cityId;
+ if (active.cityId) {
+ shipperRegionCode = shipperRegionCode + "," + active.cityId;
}
- if (active.districtId){
- shipperRegionCode =shipperRegionCode+ ","+active.districtId;
+ if (active.districtId) {
+ shipperRegionCode = shipperRegionCode + "," + active.districtId;
}
- if (active.streetId){
- shipperRegionCode =shipperRegionCode+ ","+active.streetId;
+ if (active.streetId) {
+ shipperRegionCode = shipperRegionCode + "," + active.streetId;
}
Object.assign(form.value, {
shipperId: active.id,
@@ -3566,12 +4240,12 @@
shipperRegionLabel: active.regionLabel,
shipperAddress: active.addressDetail,
shipperMobile: active.contactPhone,
- shipperRegionCode:shipperRegionCode
+ shipperRegionCode: shipperRegionCode
});
}
dialForm.value.close();
res.done();
- }).catch(err=>{
+ }).catch(err => {
res.done();
})
},
@@ -3579,7 +4253,7 @@
}
const handleAddReceiver = () => {
- if (!form.value.customerId){
+ if (!form.value.customerId) {
return ElMessage.error('璇峰厛閫夋嫨杩愯緭璺嚎');
}
form2.value = {
@@ -3589,33 +4263,33 @@
};
dialForm.value = $DialogForm(appContext)({
title: '鏂板鍗歌揣鍦�',
- data:form2.value,
+ data: form2.value,
width: '80%',
option: consignorAddOption.value,
menuPosition: 'right',
- callback: (res:any,) => {
+ callback: (res: any,) => {
let data1 = res.data;
- if (data1.mapLocationDetail){
- data1.mapLocation = data1.mapLocationDetail[0]+','+data1.mapLocationDetail[1];
+ if (data1.mapLocationDetail) {
+ data1.mapLocation = data1.mapLocationDetail[0] + ',' + data1.mapLocationDetail[1];
data1.addressDetail = data1.mapLocationDetail[2]
}
- addTmsConsignor({...form2.value,...data1}).then(res2=>{
+ addTmsConsignor({ ...form2.value, ...data1 }).then(res2 => {
let active = res2.data || {};
if (active) {
let receiverRegionCode = '';
- if (active.provinceId){
+ if (active.provinceId) {
receiverRegionCode = active.provinceId;
}
- if (active.cityId){
- receiverRegionCode =receiverRegionCode+ ","+active.cityId;
+ if (active.cityId) {
+ receiverRegionCode = receiverRegionCode + "," + active.cityId;
}
- if (active.districtId){
- receiverRegionCode =receiverRegionCode+ ","+active.districtId;
+ if (active.districtId) {
+ receiverRegionCode = receiverRegionCode + "," + active.districtId;
}
- if (active.streetId){
- receiverRegionCode =receiverRegionCode+ ","+active.streetId;
+ if (active.streetId) {
+ receiverRegionCode = receiverRegionCode + "," + active.streetId;
}
Object.assign(form.value, {
@@ -3624,12 +4298,12 @@
receiverRegionLabel: active.regionLabel,
receiverAddress: active.addressDetail,
receiverMobile: active.contactPhone,
- receiverRegionCode:receiverRegionCode,
+ receiverRegionCode: receiverRegionCode,
});
}
dialForm.value.close();
res.done();
- }).catch(err=>{
+ }).catch(err => {
res.done();
})
},
@@ -3639,45 +4313,93 @@
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 = (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;
+ optionType.value = 'loading';
+ optionNum.value = 'radio';
+
+ boxFormOption.value = loadingOption.value;
}
const handleLoading = () => {
title.value = '琛ュ厖濮旀墭瑁呭嵏淇℃伅';
open.value = true;
form.value = selectionList.value[0];
optionType.value = 'loading';
+ optionNum.value = 'checkbox'
boxFormOption.value = loadingOption.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;
+
+ // 銆愯皟璇曘�戞鏃舵墦鍗帮紝闀垮害搴斾负 0
}
const quotationItems = ref();
const getQuotationItems = async () => {
- let res = await getDicts("sys_quotation_items");
+ 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)=>{
+const getTabData = (val: string) => {
+ 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: '娆�'}
+ if (filter.length > 0) {
+ zzItemsTableData.value = filter.map((item: any) => {
+ return { rowKey: randomId(), freeName: item.dictLabel, free: item.dictValue, unit: '娆�' }
})
- }else{
+ } else {
zzItemsTableData.value = []
}
}
-const getTab4Data = ()=>{
+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,
@@ -3688,39 +4410,81 @@
-const submitTabForm = ()=>{
- if (['tab1','tab2','tab3'].includes(active.value)){
- let quoteFeeItems = zzItemsTableData.value.filter((item:any)=>{
+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=>{
+ 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();
- }
+ } 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 => {
+ // console.log(tmsFinanceDetails.value);
+ // console.log(boxForm.value);
+ // 1. 鎻愬彇濉啓浜嗛噾棰濈殑鏁版嵁锛堥噾棰濆ぇ浜�0锛�
+ const validDetails = tmsFinanceDetails.value.filter(item => item.actualFeeAmount && item.actualFeeAmount > 0);
+
+ if (validDetails.length === 0) {
+ ElMessage.warning('璇疯嚦灏戝~鍐欎竴椤硅垂鐢ㄩ噾棰�');
+ return;
+ }
+
+ // 2. 鏍¢獙锛氬~鍐欎簡閲戦鐨勬槸鍚﹂兘閫変簡甯佸埗
+ const incomplete = validDetails.find(item => !item.currency);
+ if (incomplete) {
+ ElMessage.error(`璐圭敤绫诲瀷銆�${incomplete.feeTypeName}銆戝凡濉啓閲戦锛岃閫夋嫨甯佸埗锛乣);
+ return; // 鎷︽埅鎻愪氦
+ }
+
+ // 3. 澶勭悊鍑瘉 URL (濡傛灉鏈夊崟寮犳垨澶氬紶涓婁紶鐨勯�昏緫)
+ // 鍋囪鍚庣闇�瑕佺殑鏄�楀彿鍒嗛殧鐨勫瓧绗︿覆
+ const submitData = validDetails.map((item: any) => {
+ let url = item.voucherUrl;
+ item.dispatchOrderId = form.value.id;
+ item.financeType = 2;
+ item.status = 0;
+ item.dataSource = 1;
+ if (Array.isArray(url)) {
+ url = url.join(',');
+ }
+ return { ...item, voucherUrl: url };
+ });
+
+
+ saveTmsFinanceDetail2(submitData).then(res => {
ElMessage({
message: "鎿嶄綔鎴愬姛锛�",
type: 'success'
})
+ // open4.value = false;
+ onLoad(page.value)
+ initExpenditureData();
boxFormRef.value?.resetFields();
getTab4Data();
})
+ // saveTmsFinanceDetail(boxForm.value).then(res => {
+ // ElMessage({
+ // message: "鎿嶄綔鎴愬姛锛�",
+ // type: 'success'
+ // })
+ // boxFormRef.value?.resetFields();
+ // getTab4Data();
+ // })
}
}
-const handleChange = (column:any)=>{
+const handleChange = (column: any) => {
active.value = column.prop;
- if (['tab1','tab2','tab3'].includes(column.prop)){
+ if (['tab1', 'tab2', 'tab3'].includes(column.prop)) {
getTabData(column.value)
- }else if (column.prop === 'tab4'){
+ } else if (column.prop === 'tab4') {
getTab4Data()
}
}
@@ -3732,42 +4496,929 @@
boxFormOption.value = financeOption.value;
boxTableOption.value = financeTableOption.value;
- nextTick(()=>{
+ nextTick(() => {
tabsOptionRef.value.active = "0";
})
}
-const handleClose = (row:any) => {
+const handleClose = (row: any) => {
- if (row.status == 2){
- checkCloseOrder(row.id).then(res=>{
+ if (row.status == 2) {
+ checkCloseOrder(row.id).then(res => {
open5.value = true;
form.value = row;
boxFormOption.value = closeOption.value;
});
- }else{
+ } 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){
+const submitForm5 = () => {
+ boxFormRef.value.validate((valid: boolean, done: any) => {
+ if (valid) {
boxForm.value.id = form.value.id;
- closeOrder(boxForm.value).then(res=>{
+ closeOrder(boxForm.value).then(res => {
ElMessage.success('鎿嶄綔鎴愬姛');
open5.value = false;
done();
onLoad(page.value)
- }).catch(err=>{
+ }).catch(err => {
done();
})
}
})
}
+const printOption = ref({
+ menuBtn: false,
+ labelWidth: 120,
+ column: {
+ sixLinkNo: {
+ label: '鍏仈鍗曞彿',
+ },
+ portName: {
+ label: '琛岄┒鍙e哺',
+ type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_port',
+ },
+ billNo: {
+ label: '鎻愬崟鍙稴/O',
+ },
+ terminalName: {
+ label: '鐮佸ご鍚�',
+ },
+ cargoName: {
+ label: '璐х墿鍚�',
+ },
+ pieceCount: {
+ label: '浠舵暟',
+ },
+ weight: {
+ label: '閲嶉噺',
+ },
+ contactName: {
+ label: '瀹㈡埛鑱旂粶浜�',
+ },
+ contactPhone: {
+ label: '鑱旂粶浜烘墜鏈哄彿',
+ }
+ }
+})
+const print = ref(0)
+const handlePrint = () => {
+ form.value = selectionList.value[0];
+ boxFormOption.value = printOption.value;
+ boxForm.value = form.value
-</script>
\ No newline at end of file
+ getTmsDriver(boxForm.value.mainDriverId).then(res => {
+ open6.value = true;
+ const driver = res.data || {};
+ boxForm.value.mainDriverMobile = driver.mobile;
+ print.value = 0
+ })
+
+}
+
+const submitForm6 = () => {
+ print.value = 1;
+ printDispatchOrder(boxForm.value).then(res => {
+ $Print('#print');
+ onLoad(page.value)
+ })
+
+
+}
+const upload = reactive({
+ // 鏄惁鏄剧ず寮瑰嚭灞傦紙鐢ㄦ埛瀵煎叆锛�
+ open: false,
+ // 鏄惁绂佺敤涓婁紶
+ isUploading: false,
+ // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹�
+ updateSupport: 0,
+ // 璁剧疆涓婁紶鐨勮姹傚ご閮�
+ headers: { Authorization: "Bearer " + getToken() },
+ // 涓婁紶鐨勫湴鍧�
+ url: import.meta.env.VITE_APP_BASE_API + "/tms/tmsDispatchOrder/importData"
+});
+
+
+const uploadRef = ref();
+
+function handleImport() {
+ upload.open = true;
+}
+
+
+/** 涓嬭浇妯℃澘鎿嶄綔 */
+function importTemplate() {
+ importTemplateTmsDispatchOrder();
+
+}
+const handleFileUploadProgress = (event: any, file: any) => {
+ upload.isUploading = true;
+};
+/** 鏂囦欢涓婁紶鎴愬姛澶勭悊 */
+const handleFileSuccess = (response: any, file: any) => {
+ upload.open = false;
+ upload.isUploading = false;
+ uploadRef.value!.clearFiles();
+ proxy.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "瀵煎叆缁撴灉", { dangerouslyUseHTMLString: true });
+ onLoad(page.value);
+};
+/** 鎻愪氦涓婁紶鏂囦欢 */
+function submitFileForm() {
+ uploadRef.value!.submit();
+}
+const shipperReceiverForm = ref<any>({});
+const shipperReceiverFormRef = ref();
+const shipperReceiverFormOption = ref({
+ menuBtn: false, labelWidth: 140,
+ column: {
+ dispatchNos: {
+ label: '璋冨害鍗曞彿', span: 24,
+ rules: [
+ {
+ required: true,
+ message: "璋冨害鍗曞彿涓嶈兘涓虹┖", trigger: "change"
+ }
+ ],
+ },
+ shipperId: {
+ label: '瑁呰揣鐐�', dataType: 'string', disabled: false,
+ display: true,
+ rules: [
+ {
+ required: true,
+ message: "瑁呰揣鐐逛笉鑳戒负绌�", trigger: "change"
+ }
+ ],
+
+ },
+ shipperRegionLabel: {
+ label: '瑁呰揣鐐硅鏀垮尯鍩�',
+ display: true, disabled: true
+
+ },
+ shipperAddress: {
+ label: '瑁呰揣鐐硅缁嗗湴鍧�',
+ display: true, disabled: true
+ },
+ shipperMobile: {
+ label: '瑁呰揣鐐硅仈绯绘柟寮�',
+ display: true, disabled: true
+ },
+ receiverId: {
+ label: '鍗歌揣鐐�',
+ display: true, dataType: 'string', disabled: false,
+ rules: [
+ {
+ required: true,
+ message: "鍗歌揣鐐逛笉鑳戒负绌�", trigger: "change"
+ }
+ ],
+ },
+ receiverRegionLabel: {
+ label: '鍗歌揣鐐硅鏀垮尯鍩�',
+ display: true, disabled: true
+ },
+ receiverAddress: {
+ label: '鍗歌揣鐐硅缁嗗湴鍧�',
+ display: true, disabled: true
+ },
+ receiverMobile: {
+ label: '鍗歌揣鐐硅仈绯绘柟寮�',
+ display: true, disabled: true
+ },
+ }
+});
+
+const changeShipper2 = ({ value }: any) => {
+
+ if (value) {
+ let id = value;
+ if (Array.isArray(value)) {
+ id = value[0]
+ }
+ getTmsConsignor(id).then(res => {
+ let active = res.data || {};
+ let shipperRegionCode = '';
+ if (active.provinceId) {
+ shipperRegionCode = active.provinceId;
+ }
+ if (active.cityId) {
+ shipperRegionCode = shipperRegionCode + "," + active.cityId;
+
+ }
+ if (active.districtId) {
+ shipperRegionCode = shipperRegionCode + "," + active.districtId;
+
+ }
+ if (active.streetId) {
+ shipperRegionCode = shipperRegionCode + "," + active.streetId;
+ }
+ Object.assign(shipperReceiverForm.value, {
+ shipperId: active.id,
+ shipperName: active.consignorName,
+ shipperRegionLabel: active.regionLabel,
+ shipperAddress: active.addressDetail,
+ shipperMobile: active.contactPhone,
+ shipperRegionCode: shipperRegionCode
+ });
+ })
+ }
+}
+const changeReceiver2 = ({ value }: any) => {
+
+ if (value) {
+ let id = value;
+ if (Array.isArray(value)) {
+ id = value[0]
+ }
+ getTmsConsignor(id).then(res => {
+ let active = res.data || {};
+ let receiverRegionCode = '';
+ if (active.provinceId) {
+ receiverRegionCode = active.provinceId;
+ }
+ if (active.cityId) {
+ receiverRegionCode = receiverRegionCode + "," + active.cityId;
+
+ }
+ if (active.districtId) {
+ receiverRegionCode = receiverRegionCode + "," + active.districtId;
+
+ }
+ if (active.streetId) {
+ receiverRegionCode = receiverRegionCode + "," + active.streetId;
+ }
+
+ Object.assign(shipperReceiverForm.value, {
+ receiverId: active.id,
+ receiverName: active.consignorName,
+ receiverRegionLabel: active.regionLabel,
+ receiverAddress: active.addressDetail,
+ receiverMobile: active.contactPhone,
+ receiverRegionCode: receiverRegionCode,
+ });
+ })
+ }
+}
+
+const hasDifferentCustomer = (() => {
+ const customerSet = new Set(
+ selectionList.value.map((item: any) => item.customerId)
+ );
+ return customerSet.size > 1;
+})();
+const handleZXHDJ = () => {
+ if (hasDifferentCustomer) {
+ ElMessage.error('鍗曟鎿嶄綔鍙兘鎿嶄綔涓�涓鎴风殑鏁版嵁');
+ return;
+ }
+ let filter = selectionList.value.filter((item: any) => !item.shipperId);
+ let filter2 = selectionList.value.filter((item: any) => !item.receiverId);
+ let zLen = filter.length || 0;
+ let xLen = filter2.length || 0;
+ if (zLen == 0 && xLen == 0) {
+ ElMessage.error('閫夋嫨鐨勬暟鎹凡瀹屾垚瀵硅鍗歌揣鐐圭櫥璁�');
+ return;
+ }
+ if (zLen > 0 && xLen > 0) {
+ if (zLen > xLen) {
+ ElMessage.error('閫夋嫨鐨勬暟鎹凡濉啓鍗歌揣鐐规暟鎹紝璇峰崟鐙紪杈�');
+ return;
+ }
+ if (zLen < xLen) {
+ ElMessage.error('閫夋嫨鐨勬暟鎹凡濉啓瑁呰揣鐐规暟鎹紝璇峰崟鐙紪杈�');
+ return;
+ }
+ }
+ let item: any = selectionList.value[0];
+ shipperReceiverForm.value.customerId = item?.customerId
+ shipperReceiverForm.value.customerCode = item?.customerCode
+ shipperReceiverForm.value.customerName = item?.customerName;
+ shipperReceiverForm.value.dispatchNos = selectionList.value.map((item: any) => item.dispatchNo) || [];
+
+ shipperReceiverFormOption.value.column.shipperId.disabled = zLen == 0;
+ shipperReceiverFormOption.value.column.shipperId.rules[0].required = zLen != 0;
+ shipperReceiverFormOption.value.column.receiverId.disabled = xLen == 0;
+ shipperReceiverFormOption.value.column.receiverId.rules[0].required = xLen != 0;
+
+
+ open7.value = true;
+}
+
+const handleAddShipper2 = () => {
+
+ form2.value = {
+ customerId: shipperReceiverForm.value.customerId,
+ customerSysCode: shipperReceiverForm.value.customerCode,
+ customerName: shipperReceiverForm.value.customerName,
+ };
+ dialForm.value = $DialogForm(appContext)({
+ title: '鏂板瑁呰揣鍦�',
+ data: form2.value,
+ width: '80%',
+ option: consignorAddOption.value,
+ menuPosition: 'right',
+ callback: (res: any,) => {
+ let data1 = res.data;
+ if (data1.mapLocationDetail) {
+ data1.mapLocation = data1.mapLocationDetail[0] + ',' + data1.mapLocationDetail[1];
+ data1.addressDetail = data1.mapLocationDetail[2]
+ }
+ addTmsConsignor({ ...form2.value, ...data1 }).then(res2 => {
+ let active = res2.data || {};
+ if (active) {
+ let shipperRegionCode = '';
+ if (active.provinceId) {
+ shipperRegionCode = active.provinceId;
+ }
+ if (active.cityId) {
+ shipperRegionCode = shipperRegionCode + "," + active.cityId;
+
+ }
+ if (active.districtId) {
+ shipperRegionCode = shipperRegionCode + "," + active.districtId;
+
+ }
+ if (active.streetId) {
+ shipperRegionCode = shipperRegionCode + "," + active.streetId;
+ }
+ Object.assign(shipperReceiverForm.value, {
+ shipperId: active.id,
+ shipperName: active.consignorName,
+ shipperRegionLabel: active.regionLabel,
+ shipperAddress: active.addressDetail,
+ shipperMobile: active.contactPhone,
+ shipperRegionCode: shipperRegionCode
+ });
+ }
+ dialForm.value.close();
+ res.done();
+ }).catch(err => {
+ res.done();
+ })
+ },
+ })
+}
+
+const handleAddReceiver2 = () => {
+ if (!form.value.customerId) {
+ return ElMessage.error('璇峰厛閫夋嫨杩愯緭璺嚎');
+ }
+ form2.value = {
+ customerId: shipperReceiverForm.value.customerId,
+ customerSysCode: shipperReceiverForm.value.customerCode,
+ customerName: shipperReceiverForm.value.customerName,
+ };
+ dialForm.value = $DialogForm(appContext)({
+ title: '鏂板鍗歌揣鍦�',
+ data: form2.value,
+ width: '80%',
+ option: consignorAddOption.value,
+ menuPosition: 'right',
+ callback: (res: any,) => {
+ let data1 = res.data;
+ if (data1.mapLocationDetail) {
+ data1.mapLocation = data1.mapLocationDetail[0] + ',' + data1.mapLocationDetail[1];
+ data1.addressDetail = data1.mapLocationDetail[2]
+ }
+ addTmsConsignor({ ...form2.value, ...data1 }).then(res2 => {
+ let active = res2.data || {};
+ if (active) {
+ let receiverRegionCode = '';
+ if (active.provinceId) {
+ receiverRegionCode = active.provinceId;
+ }
+ if (active.cityId) {
+ receiverRegionCode = receiverRegionCode + "," + active.cityId;
+
+ }
+ if (active.districtId) {
+ receiverRegionCode = receiverRegionCode + "," + active.districtId;
+
+ }
+ if (active.streetId) {
+ receiverRegionCode = receiverRegionCode + "," + active.streetId;
+ }
+
+ Object.assign(shipperReceiverForm.value, {
+ receiverId: active.id,
+ receiverName: active.consignorName,
+ receiverRegionLabel: active.regionLabel,
+ receiverAddress: active.addressDetail,
+ receiverMobile: active.contactPhone,
+ receiverRegionCode: receiverRegionCode,
+ });
+ }
+ dialForm.value.close();
+ res.done();
+ }).catch(err => {
+ res.done();
+ })
+ },
+ })
+}
+
+const handleCloseDispatchNo = (tag: string) => {
+ let indexOf = shipperReceiverForm.value.dispatchNos.indexOf(tag);
+ shipperReceiverForm.value.dispatchNos.splice(indexOf, 1);
+}
+
+const submitZxForm = () => {
+ shipperReceiverFormRef.value.validate((valid: boolean, done: any) => {
+ if (valid) {
+ ypdddjSumbit(shipperReceiverForm.value).then(res => {
+ ElMessage.success('鐧昏鎴愬姛');
+ open7.value = false;
+ onLoad(page.value);
+
+ done();
+ }).catch(err => {
+ done();
+ })
+ }
+ })
+}
+const importLogVisible = ref(false);
+const importLogLoading = ref(false);
+const importLogData = ref([]);
+
+// 寮圭獥琛ㄦ牸閰嶇疆
+const importLogOption = {
+ header: false,
+ addBtn: false,
+ menu: false, // 浠呭睍绀猴紝涓嶉渶瑕佹搷浣滃垪
+ column: [
+ { label: '瀵煎叆鏃堕棿', prop: 'importTime', type: 'datetime', format: 'YYYY-MM-DD HH:mm:ss' },
+ { label: '瀵煎叆鏂囦欢鍚嶇О', prop: 'fileName' },
+ { label: '鎿嶄綔浜�', prop: 'operator' },
+ { label: '鎴愬姛琛屾暟', prop: 'successCount' },
+ { label: '澶辫触琛屾暟', prop: 'failureCount' },
+ { label: '澶辫触璇存槑', prop: 'failureDescription', overHidden: true }
+ ]
+};
+
+// 鎵撳紑鏃ュ織寮圭獥
+const handleImportLog = () => {
+ importLogVisible.value = true;
+};
+
+// 鑾峰彇鏃ュ織鍒楄〃鏁版嵁锛堥渶鏍规嵁瀹為檯 API 璋冩暣锛�
+const getImportLogList = () => {
+ importLogData.value = []
+ // 鍋囪鏈変竴涓� getLogApi 鐨勬帴鍙�
+ tmsTmsDispatchOrderImportLog().then(res => {
+ if (res.code == 200) {
+ importLogLoading.value = true;
+ importLogData.value = res.data;
+ importLogLoading.value = false;
+ }
+ });
+
+};
+// 1. 瀹氫箟鍞竴鐨勫彉閲忓悕
+const tmsFinanceDetails = ref([]); // 鏁版嵁婧�
+const expenditureTableOption = ref({
+ addBtn: false,
+ menu: false,
+ header: false,
+ border: true,
+ index: false,
+ selection: false,
+ column: [
+ {
+ label: '璐圭敤绫诲瀷',
+ prop: 'feeTypeName',
+ width: 150
+ },
+ {
+ label: '璐圭敤閲戦',
+ prop: 'actualFeeAmount',
+ slot: true,
+ width: 150
+ },
+ {
+ label: '甯佸埗',
+ prop: 'currency',
+ slot: true,
+ width: 200
+ },
+ {
+
+ label: '璐圭敤鍑瘉',
+ display: true,
+ span: 24,
+ accept: 'string', dataType: 'object',
+ type: 'upload',
+ // action: '/common/upload2',
+ prop: 'voucherUrl', // 杩欓噷鏀规垚 prop 灞炴��
+ slot: true, // 寮�鍚彃妲�
+ width: 200
+ },
+ {
+ label: '澶囨敞',
+ prop: 'remark',
+ slot: true
+ }
+ ]
+});
+// 3. 鍥炴樉鍒濆鍖�
+const initExpenditureData = () => {
+ tmsFinanceDetails.value = []
+ if (fee_type.value && fee_type.value.length > 0 && tmsFinanceDetails.value.length === 0) {
+ tmsFinanceDetails.value = fee_type.value.map(item => ({
+ feeType: item.value,
+ feeTypeName: item.label,
+ feeAmount: undefined,
+ currency: '',
+ voucherUrl: '',
+ remark: ''
+ }));
+ }
+};
+// 4. 鐩戝惉鍒囨崲
+watch(() => active.value, (val) => {
+ if (val === 'tab4') {
+ initExpenditureData();
+ }
+});
+const handleUploadAfter = (res: any, row: any) => {
+ // res 鏄帴鍙h繑鍥炵殑瀹屾暣鏁版嵁
+ if (res.code === 200) {
+ // 鎵嬪姩缁欒繖涓�琛岀殑鏁版嵁璧嬪��
+ row.voucherUrl = res.data.url;
+ } else if (res.data && res.data.url) {
+ // 濡傛灉杩斿洖鐨勬暟鎹寘瑁瑰湪 data 閲�
+ row.voucherUrl = res.data.url;
+ }
+};
+/** 褰撴枃浠惰秴鍑洪檺鍒舵椂锛堝疄鐜拌嚜鍔ㄦ浛鎹㈤�昏緫锛� */
+const handleExceed = (files: any, row: any) => {
+ // 1. 娓呴櫎褰撳墠鏄剧ず鐨勬枃浠跺垪琛�
+ uploadRef.value.clearFiles();
+ // 2. 鎵嬪姩鎶婃柊閫夋嫨鐨勬枃浠舵坊鍔犺繘鍘婚噸鏂颁笂浼�
+ const file = files[0];
+ uploadRef.value.handleStart(file);
+ uploadRef.value.submit();
+};
+
+const flowLogIshow = ref()
+const flowParams = ref([])
+
+const handleFlow = (row: string) => {
+ let data = {
+ headId: row.id,
+ }
+ listTmsDispatchOrderLog(data).then((res) => {
+ flowParams.value = res.rows
+ flowLogIshow.value.openModel()
+
+ })
+}
+
+const boxSelectionChange = (selection: any[]) => {
+ boxSelectionList.value = selection;
+}
+const handleBatchBoxDel = () => {
+ if (boxSelectionList.value.length === 0) {
+ ElMessage.warning('璇烽�夋嫨瑕佷綔搴熺殑璐圭敤鏄庣粏');
+ return;
+ }
+
+ ElMessageBox.confirm(`纭瑕佷綔搴熼�変腑鐨� ${boxSelectionList.value.length} 鏉¤垂鐢ㄦ槑缁嗗悧锛焋, '璀﹀憡', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ let data = {
+ id: boxSelectionList.value[0].id,
+ status: 1
+ }
+ tmsFinanceDetail(data).then(res => {
+ ElMessage.success('浣滃簾鎴愬姛');
+ getTab4Data(); // 鍒锋柊鏁版嵁
+ }).catch(err => {
+ ElMessage.error('浣滃簾澶辫触');
+ });
+ }).catch(() => {
+ // 鍙栨秷鎿嶄綔
+ });
+}
+
+const handleOrderTypeChange = (value: any) => {
+ // 闃叉 value 涓� null 鎴� undefined 鏃跺嚭閿� (褰撴竻绌洪�夋嫨鏃�)
+ if (value === null || value === undefined) {
+ return;
+ }
+
+ option.value.group.forEach((item: any) => {
+ if (item.prop == 'pcxx') {
+ // 澶勭悊瑁呰揣鐐瑰繀濉鍒�
+ if (item.column.shipperId && item.column.shipperId.rules) {
+ item.column.shipperId.rules.forEach((cItem: any) => {
+ cItem.required = !(value == 1);
+ });
+ }
+
+ // 澶勭悊鍗歌揣鐐瑰繀濉鍒�
+ if (item.column.receiverId && item.column.receiverId.rules) {
+ item.column.receiverId.rules.forEach((cItem: any) => {
+ cItem.required = !(value == 1);
+ });
+ }
+ }
+ });
+
+ // 銆愭柊澧為�昏緫銆戝鏋滃垏鎹㈠埌浜嗛潪蹇呭~鐘舵�� (value == 1)锛屽垯娓呴櫎杩欎袱涓瓧娈电殑鏍¢獙鎻愮ず
+ if (value == 1) {
+ // 纭繚 crudRef 瀛樺湪涓旀毚闇蹭簡 clearValidate 鏂规硶
+ if (crudRef.value && typeof crudRef.value.clearValidate === 'function') {
+ // 娓呴櫎鎸囧畾瀛楁鐨勬牎楠岀姸鎬�
+ crudRef.value.clearValidate(['shipperId', 'receiverId']);
+ }
+ }
+};
+/* 杞︾墝鍙� */
+// --- 鐘舵�佺鐞� ---
+const vehicleDialogVisible = ref(false);
+const vehicleData = ref<VehicleRow[]>([]);
+const vehicleQuery = ref<any>({});
+const selectedVehicleRow = ref<VehicleRow>({});
+
+const vehiclePage = ref({
+ currentPage: 1,
+ pageSize: 10,
+ total: 0
+});
+
+// --- 寮圭獥閰嶇疆 ---
+const vehicleOption = ref({
+ header: true,
+ menu: false,
+ addBtn: false,
+ refreshBtn: true,
+ columnBtn: false,
+ index: false,
+ selection: false,
+ searchShow: true,
+ searchMenuSpan: 6,
+ searchLabelWidth: 100,
+ highlightCurrentRow: true,
+ column: [
+ { label: '杞﹁締鏈嶅姟鍟�', prop: 'serviceProviderName', search: true },
+ {
+ label: '杞﹁締绫诲瀷',
+ prop: 'vehicleType',
+ type: 'select',
+ dataType: 'string',
+ dicUrl: '/system/dict/data/type/vehicle_type',
+ search: true
+ },
+ { label: '杞﹁締鍐呴儴缂栫爜', prop: 'internalCode', search: true },
+ { label: '杞︾墝鍙�', prop: 'licensePlate', search: true },
+ { label: '棣欐腐鐗岀収', prop: 'licenseHk' },
+ { label: '婢抽棬鐗岀収', prop: 'licenseMo' }
+ ]
+});
+
+// --- 鏂规硶 ---
+
+/**
+ * 鍔犺浇鏁版嵁锛氶粯璁ゅ己鍒朵紶 carrierType: '0'
+ */
+const loadVehicleList = async (page?: any, params?: any) => {
+ const query = {
+ pageNum: vehiclePage.value.currentPage,
+ pageSize: vehiclePage.value.pageSize,
+ carrierType: '0', // 榛樿寮哄埗浼�0
+ ...vehicleQuery.value,
+ ...params
+ };
+
+ try {
+ const res = await listTmsVehicle(query);
+ if (res.code === 200) {
+ // const { records, total } = res.rows;
+ vehicleData.value = res.rows;
+ vehiclePage.value.total = res.total;
+ }
+ } catch (error) {
+ console.error("鍔犺浇杞﹁締鍒楄〃澶辫触", error);
+ }
+};
+
+/**
+ * 鎼滅储锛氬甫鍏ユ悳绱㈠弬鏁板苟寮哄埗 carrierType 涓� 0
+ */
+const vehicleSearchChange = (params: any, done: Function) => {
+ vehicleQuery.value = params;
+ vehiclePage.value.currentPage = 1;
+ loadVehicleList();
+ done();
+};
+
+/**
+ * 閲嶇疆锛氭竻绌烘悳绱㈡潯浠讹紝浣嗕緷鐒朵繚鐣� carrierType 涓� 0
+ */
+const vehicleSearchReset = () => {
+ vehicleQuery.value = {}; // 娓呯┖鎼滅储
+ vehiclePage.value.currentPage = 1;
+ loadVehicleList(); // loadVehicleList 鍐呴儴宸茬粡鍐欐 carrierType: '0'
+};
+
+const vehicleCurrentChange = (val: number) => {
+ vehiclePage.value.currentPage = val;
+ loadVehicleList();
+};
+
+const vehicleSizeChange = (val: number) => {
+ vehiclePage.value.pageSize = val;
+ loadVehicleList();
+};
+
+const handleVehicleRowClick = (row: VehicleRow) => {
+ selectedVehicleRow.value = row;
+};
+
+// 鎵撳紑寮圭獥鏂规硶
+const handleVehicleSelect = () => {
+ selectedVehicleRow.value = {};
+ vehicleDialogVisible.value = true;
+};
+
+/**
+ * 纭閫夋嫨锛氬洖鏄惧埌涓昏〃鍗�
+ */
+const confirmVehicleSelection = () => {
+ if (!selectedVehicleRow.value.licensePlate) {
+ appContext.$message.warning("璇风偣鍑婚�夋嫨涓�琛岃褰�");
+ return;
+ }
+ // 1. 璧嬪�� (纭繚涓昏〃鍗� data.form 瀛樺湪)
+
+
+ data.form.vehicleId = selectedVehicleRow.value.id;
+ data.form.licensePlate = selectedVehicleRow.value.licensePlate;
+ data.form.actualVehicleType= selectedVehicleRow.value.vehicleType;
+
+ // 濡傛灉闇�瑕佸叾浠栧瓧娈典篃鍙互涓�骞跺甫鍥烇紝姣斿鏈嶅姟鍟嗙瓑
+ // data.form.serviceProviderName = selectedVehicleRow.value.serviceProviderName;
+
+ vehicleDialogVisible.value = false;
+
+ // 2. 寮哄埗瑙嗗浘鏇存柊
+ nextTick(() => {
+ appContext.$forceUpdate();
+ });
+};
+
+</script>
+<style lang="scss" scoped>
+::v-deep .cydprint .el-dialog__body {
+ overflow: hidden;
+ //padding: 0;
+ margin: 0;
+}
+
+#print {
+ .title {
+ text-align: center;
+ font-size: 14pt;
+ color: #000;
+ line-height: 23pt;
+ font-weight: bold;
+ margin: 0;
+ }
+
+ .header {
+ position: relative;
+
+ .order {
+ font-size: 12pt;
+ color: #000;
+ line-height: 23pt;
+ }
+
+ .sub-title {
+ position: absolute;
+ left: 50%;
+ transform: translateX(-50%);
+ top: 0;
+ font-size: 12pt;
+ color: #000;
+ line-height: 23pt;
+ text-decoration: underline;
+ }
+
+ }
+
+ table {
+ width: 100%;
+ border-collapse: collapse;
+ /* 鍚堝苟杈规 */
+ font-size: 12px;
+ table-layout: fixed;
+ /* 鍏抽敭鐐� */
+ }
+
+ table,
+ td {
+ border: 1px solid #000;
+
+ }
+
+ td {
+ padding: 4px;
+ vertical-align: middle;
+ width: 50%;
+ /* 寮哄埗绛夊 */
+ word-break: break-all;
+ }
+}
+
+.dispatchNos {
+ //border: 1px solid #ebeef5;
+ border-radius: 4px;
+ min-height: 73px;
+ padding: 1px 11px;
+ box-shadow: 0 0 0 1px var(--el-disabled-border-color) inset;
+}
+
+.link-btn {
+ font-size: 18px;
+}
+
+/* */
+/* 鐜版湁鐨勬牱寮忎繚鎸佷笉鍙�... */
+.specific-drag-area {
+ width: 100%;
+
+ :deep(.full-width-drag) {
+
+ // 1. 鏍稿績锛氶殣钘� Avue 榛樿鍦� dragger 涓嬫柟鐢熸垚鐨勯偅涓�滅偣鍑讳笂浼犫�濇寜閽�
+ // 鍦� 3.x 鐗堟湰涓紝瀹冩槸 el-upload 鍚庣殑涓�涓厔寮熻妭鐐规垨鑰呮槸鍐呴儴鑺傜偣
+ .el-button--primary {
+ display: none !important;
+ }
+
+ .el-upload {
+ width: 100%;
+ display: block; // 纭繚鍧楃骇鏄剧ず
+
+ .el-upload-dragger {
+ width: 100%;
+ height: 120px;
+ background-color: #fcfdfe;
+ border: 2px dashed #dcdfe6;
+ border-radius: 8px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ padding: 0 !important;
+
+ // 瑕嗙洊 Element Plus 榛樿鐨勫唴閮ㄦ枃瀛楁帓鐗堬紝闃叉鍐茬獊
+ .el-upload__text {
+ display: none !important;
+ }
+
+ &:hover {
+ border-color: #409eff;
+ background-color: #f5f7fa;
+ }
+ }
+ }
+ }
+
+ // 3. 鑷畾涔夊唴瀹圭殑鏍峰紡锛堢‘淇濆畠涓嶈 display:none 褰卞搷锛�
+ .drag-zone-inner {
+ pointer-events: none;
+ text-align: center;
+
+ .upload-icon {
+ font-size: 32px !important;
+ color: #909399;
+ margin-bottom: 8px;
+ }
+
+ .drag-text {
+ .main-title {
+ font-size: 14px;
+ color: #606266;
+ font-weight: bold;
+ line-height: 1.5;
+ }
+
+ .sub-title {
+ font-size: 12px;
+ color: #a8abb2;
+ margin-top: 4px;
+ }
+ }
+ }
+}
+</style>
--
Gitblit v1.8.0