优化完成

This commit is contained in:
2026-03-19 15:20:48 +08:00
parent 045b52c98b
commit 74b927af66
5 changed files with 801 additions and 515 deletions

View File

@@ -4,8 +4,8 @@ VITE_APP_TITLE = 一公里配送
# 开发环境配置 # 开发环境配置
VITE_APP_ENV = 'development' VITE_APP_ENV = 'development'
# 若依管理系统/开发环境 # 一公里配送/开发环境
VITE_APP_BASE_API = 'http://192.168.1.5:8087' VITE_APP_BASE_API = 'http://192.168.1.13:8088'
# VITE_APP_BASE_API = 'http://47.100.212.83:18088' # VITE_APP_BASE_API = 'http://47.100.212.83:18088'
# VITE_APP_BASE_API = 'http://192.168.1.112:8086' # VITE_APP_BASE_API = 'http://192.168.1.112:8086'

View File

@@ -4,7 +4,7 @@ VITE_APP_TITLE = 一公里配送
# 生产环境配置 # 生产环境配置
VITE_APP_ENV = 'production' VITE_APP_ENV = 'production'
# 若依管理系统/生产环境 # 一公里配送/生产环境
# VITE_APP_BASE_API = '/prod-api' # VITE_APP_BASE_API = '/prod-api'
VITE_APP_BASE_API = 'http://47.100.212.83:18088' VITE_APP_BASE_API = 'http://47.100.212.83:18088'

View File

@@ -4,7 +4,7 @@ VITE_APP_TITLE = 一公里配送
# 生产环境配置 # 生产环境配置
VITE_APP_ENV = 'staging' VITE_APP_ENV = 'staging'
# 若依管理系统/生产环境 # 一公里配送/生产环境
VITE_APP_BASE_API = '/stage-api' VITE_APP_BASE_API = '/stage-api'
# 是否在打包时开启压缩,支持 gzip 和 brotli # 是否在打包时开启压缩,支持 gzip 和 brotli

View File

@@ -77,8 +77,8 @@ const router = useRouter()
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
const loginForm = ref({ const loginForm = ref({
username: "admin", username: "",
password: "admin123", password: "",
rememberMe: false, rememberMe: false,
code: "", code: "",
uuid: "" uuid: ""

View File

@@ -2,9 +2,13 @@
<div class="app-container"> <div class="app-container">
<el-splitter> <el-splitter>
<el-splitter-panel size="40%"> <el-splitter-panel size="40%">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" label-width="90"> <el-form
<el-row > :model="queryParams"
ref="queryRef"
v-show="showSearch"
label-width="90"
>
<el-row>
<el-col :span="10"> <el-col :span="10">
<el-form-item label="单据号" prop="billNoCk"> <el-form-item label="单据号" prop="billNoCk">
<el-input <el-input
@@ -15,28 +19,72 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="14" > <el-col :span="14">
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery"
>搜索</el-button
>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row
:gutter="10"
class="mb8"
style="justify-content: flex-end; margin-right: 0"
>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="plus"
@click="delieryReceipt()"
:disabled="multipleBill"
>生成配送单</el-button
>
</el-col>
<!-- <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> -->
</el-row>
</el-form> </el-form>
<el-table v-loading="loading" highlight-current-row :data="billList" @row-dblclick="billClick" > <el-table
<el-table-column label="单据号" align="center" prop="billNo" width="200" /> v-loading="loading"
<el-table-column label="库存状态" align="center" > highlight-current-row
:data="billList"
ref="billTable"
@row-dblclick="billClick"
@select="handleBillSelectionChange"
@select-all="handleBillSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column
label="单据号"
align="center"
prop="billNo"
width="200"
/>
<el-table-column label="库存状态" align="center">
<template #default="scope"> <template #default="scope">
<span>{{ isChukuFun(scope.row.isDelivery) }}</span> <span>{{ isChukuFun(scope.row.isDelivery) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="理货员" align="center" prop="operatorName" /> <el-table-column label="理货员" align="center" prop="operatorName" />
<el-table-column label="出库类型" align="center" prop="operationTypeName" width="150"/> <el-table-column
<el-table-column label="出库时间" align="center" prop="operationTime" width="170"> label="出库类型"
align="center"
prop="operationTypeName"
width="150"
/>
<el-table-column
label="出库时间"
align="center"
prop="operationTime"
width="170"
>
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.operationTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span> <span>{{
parseTime(scope.row.operationTime, "{y}-{m}-{d} {h}:{i}:{s}")
}}</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -57,36 +105,102 @@
type="primary" type="primary"
plain plain
icon="plus" icon="plus"
size="mini"
@click="delieryReceipt()" @click="delieryReceipt()"
:disabled="multiple" :disabled="multiple"
>生成配送单</el-button> >生成配送单</el-button
>
</el-col> </el-col>
</el-row> </el-row>
<el-table v-loading="detailLoading" show-overflow-tooltip :data="stockList" @selection-change="handleSelectionChange"> <el-table
v-loading="detailLoading"
show-overflow-tooltip
:data="stockList"
ref="detailTable"
@select="handleSelectionChange"
@select-all="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="库存状态" align="center" > <el-table-column label="库存状态" align="center">
<template #default="scope"> <template #default="scope">
<span>{{ isChukuFun(scope.row.bizType) }}</span> <span>{{ isChukuFun(scope.row.bizType) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="项目号" align="center" prop="xmNo" width="150"/> <el-table-column
<el-table-column label="项目描述" align="center" prop="xmMs" width="250"/> label="项目号"
<el-table-column label="物料号" align="center" prop="wlNo" width="100"/> align="center"
<el-table-column label="物料描述" align="center" prop="wlMs" width="250"/> prop="xmNo"
<el-table-column label="供应商名称" align="center" prop="gysMc" width="200"/> width="150"
/>
<el-table-column
label="项目描述"
align="center"
prop="xmMs"
width="250"
/>
<el-table-column
label="物料号"
align="center"
prop="wlNo"
width="100"
/>
<el-table-column
label="物料描述"
align="center"
prop="wlMs"
width="250"
/>
<el-table-column
label="供应商名称"
align="center"
prop="gysMc"
width="200"
/>
<el-table-column label="合同单价" align="center" prop="htDj" /> <el-table-column label="合同单价" align="center" prop="htDj" />
<el-table-column label="订单编号" align="center" prop="sapNo" width="150"/> <el-table-column
label="订单编号"
align="center"
prop="sapNo"
width="150"
/>
<el-table-column label="计量单位" align="center" prop="dw" /> <el-table-column label="计量单位" align="center" prop="dw" />
<el-table-column label="实际出库数量" align="center" prop="realQty" width="120"/> <el-table-column
<el-table-column label="库位码" align="center" prop="pcode" width="120"/> label="实际出库数量"
align="center"
prop="realQty"
width="120"
/>
<el-table-column
label="库位码"
align="center"
prop="pcode"
width="120"
/>
<el-table-column label="托盘码" align="center" prop="trayCode" /> <el-table-column label="托盘码" align="center" prop="trayCode" />
<el-table-column label="身份码" align="center" prop="entityId" width="200"/> <el-table-column
label="身份码"
align="center"
prop="entityId"
width="200"
/>
<!-- <el-table-column label="出库类型" align="center" prop="operationTypeName" width="150"/> --> <!-- <el-table-column label="出库类型" align="center" prop="operationTypeName" width="150"/> -->
<el-table-column label="物资类型" align="center" prop="wlTypeName" width="120"/> <el-table-column
<el-table-column label="所属仓库" align="center" prop="cangkuName" width="150"> label="物资类型"
align="center"
prop="wlTypeName"
width="120"
/>
<el-table-column
label="所属仓库"
align="center"
prop="cangkuName"
width="150"
>
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.parentWarehouseName }}-{{ scope.row.warehouseName }}</span> <span
>{{ scope.row.parentWarehouseName }}-{{
scope.row.warehouseName
}}</span
>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column label="操作时间" align="center" prop="operationTime" width="200"> <!-- <el-table-column label="操作时间" align="center" prop="operationTime" width="200">
@@ -95,15 +209,26 @@
</template> </template>
</el-table-column> --> </el-table-column> -->
<!-- <el-table-column label="库龄" align="center" prop="stockAge" /> --> <!-- <el-table-column label="库龄" align="center" prop="stockAge" /> -->
<el-table-column label="备注" align="center" prop="remark" width="200"/> <el-table-column
label="备注"
align="center"
prop="remark"
width="200"
/>
</el-table> </el-table>
</el-splitter-panel> </el-splitter-panel>
</el-splitter> </el-splitter>
<el-dialog title="生成配送单" v-model="dialogPicDetailVisible"> <el-dialog title="生成配送单" v-model="dialogPicDetailVisible">
<div class="container"> <div class="container">
<div class="billBox"><span>出库单号</span><span>{{ detailQueryParams.billNoCk }}</span></div> <div class="billBox">
<el-form :model="delieryData" ref="form" :rules="rules" label-width="100"> <span>出库单号</span><span>{{ detailQueryParams.billNoCk }}</span>
</div>
<el-form
:model="delieryData"
ref="form"
:rules="rules"
label-width="100"
>
<el-divider content-position="left">配送信息</el-divider> <el-divider content-position="left">配送信息</el-divider>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
@@ -112,7 +237,6 @@
v-model="delieryData.originName" v-model="delieryData.originName"
placeholder="请输入起点" placeholder="请输入起点"
clearable clearable
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -129,8 +253,17 @@
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="配送人" prop="shipperName"> <el-form-item label="配送人" prop="shipperName">
<el-select v-model="delieryData.shipperName" placeholder="请选择配送人" clearable > <el-select
<el-option v-for="dict in personList" :key="dict.userId" :label="dict.userName" :value="dict.userName" /> v-model="delieryData.shipperName"
placeholder="请选择配送人"
clearable
>
<el-option
v-for="dict in personList"
:key="dict.userId"
:label="dict.userName"
:value="dict.userName"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -178,13 +311,12 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="配送日期" prop="deliveryDate"> <el-form-item label="配送日期" prop="deliveryDate">
<el-date-picker <el-date-picker
v-model="delieryData.deliveryDate" v-model="delieryData.deliveryDate"
type="date" type="date"
format="YYYY-MM-DD" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
style="width: 100%;" style="width: 100%"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -193,20 +325,12 @@
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="重量" prop="deliveryTon"> <el-form-item label="重量" prop="deliveryTon">
<el-input <el-input v-model="delieryData.deliveryTon" />
v-model="delieryData.deliveryTon"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="体积" prop="goodsSize"> <el-form-item label="体积" prop="goodsSize">
<el-input <el-input v-model="delieryData.goodsSize" />
v-model="delieryData.goodsSize"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -221,15 +345,26 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4" :offset="1"> <el-col :span="4" :offset="1">
<el-button type="primary" @click="calculateFun(null)">计算</el-button> <el-button type="primary" @click="calculateFun(null)"
>计算</el-button
>
</el-col> </el-col>
</el-row> </el-row>
<el-divider content-position="left">计算信息</el-divider> <el-divider content-position="left">计算信息</el-divider>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="推荐车型" prop="vehicleTypeId"> <el-form-item label="推荐车型" v-for="(item, index) in delieryData.vehicleTypeNameList" :key="index">
<el-select v-model="delieryData.vehicleTypeId" placeholder="请选择推荐车型" clearable @change="changeCarType"> <el-select
<el-option v-for="dict in carTypeList" :key="dict.id" :label="dict.typeName" :value="dict.id" /> v-model="item.vehicleTypeId"
placeholder="请选择推荐车型"
@change="changeCarType($event, index)"
>
<el-option
v-for="dict in carTypeList"
:key="dict.id"
:label="dict.name"
:value="dict.id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -254,13 +389,17 @@
</template> </template>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script setup name="outWarehouse"> <script setup name="outWarehouse">
import {listBill,listStock,calculate,addDelivery} from "@/api/outWarehouse/outWarehouse"; import {
import { listType } from "@/api/document/type" listBill,
import {listUser} from "@/api/system/user"; //理货员 listStock,
import { Plus } from '@element-plus/icons-vue' calculate,
addDelivery,
} from "@/api/outWarehouse/outWarehouse";
import { listType } from "@/api/document/type";
import { listUser } from "@/api/system/user"; //理货员
// let map = null; // let map = null;
@@ -286,286 +425,433 @@
// onUnmounted(() => { // onUnmounted(() => {
// map?.destroy(); // map?.destroy();
// }); // });
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const detailLoading = ref(false); //加载列表详情
const showSearch = ref(true);
const detailLoading = ref(false); //加载列表详情 const total = ref(0); //单据
const showSearch = ref(true);
const total = ref(0); //单 const personList = ref([]); //理货员下拉数
const carTypeList = ref([]); //推荐车型下拉数据
const dialogPicDetailVisible = ref(false);
const multiple = ref(true);
const data = reactive({
const personList = ref([]); //理货员下拉数据 fileList: [],
const carTypeList = ref([]) //推荐车型下拉数据
const dialogPicDetailVisible = ref(false)
const multiple = ref(true)
const data = reactive({
fileList:[],
form: {}, form: {},
//配送单提交的数据 //配送单提交的数据
delieryData:{ delieryData: {
deliveryTon:0, //重量 deliveryTon: 0, //重量
goodsSize:0, //体积 goodsSize: 0, //体积
items:[] items: [],
vehicleTypeNameList: [{}], //推荐车型列表
}, },
queryParams: { queryParams: {},
detailQueryParams: {
},
detailQueryParams:{
pageNum: 1, pageNum: 1,
pageSize: 200, pageSize: 200,
id:null, id: null,
billNoCk:"" billNoCk: "",
}, },
rules: { rules: {
originName: [{ required: true, message: "起点不能为空", trigger: "change" }], originName: [
{ required: true, message: "起点不能为空", trigger: "change" },
],
destName: [{ required: true, message: "终点不能为空", trigger: "change" }], destName: [{ required: true, message: "终点不能为空", trigger: "change" }],
shipperName: [{ required: true, message: "配送人不能为空", trigger: "change" }], shipperName: [
shipperPhone: [{ pattern: /^1[3456789]\d{9}$/, message: '请输入有效的电话号码', trigger: 'blur' }], { required: true, message: "配送人不能为空", trigger: "change" },
receiverName: [{ required: true, message: "收货人不能为空", trigger: "change" }], ],
shipperPhone: [
{
pattern: /^1[3456789]\d{9}$/,
message: "请输入有效的电话号码",
trigger: "blur",
},
],
receiverName: [
{ required: true, message: "收货人不能为空", trigger: "change" },
],
receiverPhone: [ receiverPhone: [
{ required: true, message: "收货人电话不能为空", trigger: "change" }, { required: true, message: "收货人电话不能为空", trigger: "change" },
{ pattern: /^1[3456789]\d{9}$/, message: '请输入有效的电话号码', trigger: 'blur' } {
pattern: /^1[3456789]\d{9}$/,
message: "请输入有效的电话号码",
trigger: "blur",
},
],
deliveryTon: [
{ required: true, message: "重量不能为空", trigger: "change" },
], ],
deliveryTon: [{ required: true, message: "重量不能为空", trigger: "change" }],
goodsSize: [{ required: true, message: "体积不能为空", trigger: "change" }], goodsSize: [{ required: true, message: "体积不能为空", trigger: "change" }],
totalKm: [{ required: true, message: "公里数不能为空", trigger: "change" }], totalKm: [{ required: true, message: "公里数不能为空", trigger: "change" }],
vehicleTypeId: [{ required: true, message: "推荐车型不能为空", trigger: "change" }], suggestFee: [
suggestFee: [{ required: true, message: "建议费用不能为空", trigger: "change" }], { required: true, message: "建议费用不能为空", trigger: "change" },
deliveryDate:[{ required: true, message: "配送日期不能为空", trigger: "change" }] ],
deliveryDate: [
{ required: true, message: "配送日期不能为空", trigger: "change" },
],
}, },
switchRules:{ switchRules: {
toCangku:[{ required: true, message: "目标仓库不能为空", trigger: "change" }], toCangku: [
toPcode:[{ required: true, message: "目标存放位置不能为空", trigger: "change" }], { required: true, message: "目标仓库不能为空", trigger: "change" },
],
toPcode: [
{ required: true, message: "目标存放位置不能为空", trigger: "change" },
],
}, },
});
}); const { queryParams, detailQueryParams, delieryData, rules } = toRefs(data);
//生成配送单弹框
const { queryParams,detailQueryParams,delieryData,rules } = toRefs(data); function delieryReceipt() {
//生成配送单弹框 dialogPicDetailVisible.value = true;
function delieryReceipt(){
dialogPicDetailVisible.value = true
//理货员下拉数据 //理货员下拉数据
listUser().then(response=>{ listUser().then((response) => {
personList.value = response.rows personList.value = response.rows;
}) });
//车型下拉数据 //车型下拉数据
listType({pageNum:1,pageSize:1000}).then(response => { listType({ pageNum: 1, pageSize: 1000 }).then((response) => {
carTypeList.value = response.rows // carTypeList.value = response.rows;
});
}
}) //双击单据,查询明细
} function billClick(row) {
stockList.value = row.recordList;
//双击单据,查询明细 }
function billClick(row){ function isChukuFun(isChuku) {
stockList.value = row.recordList
}
function isChukuFun(isChuku){
// scope.row.isChuku==0?"已入库":(scope.row.isChuku==1?"已出库":"审批中") // scope.row.isChuku==0?"已入库":(scope.row.isChuku==1?"已出库":"审批中")
return "已出库" return "已出库";
} }
const stockList = ref([]); //明细列表 const stockList = ref([]); //明细列表
const billList = ref([]); //单据列表 const billList = ref([]); //单据列表
const loading = ref(true); const loading = ref(true);
/** 查询库存单据主列表 */ /** 查询库存单据主列表 */
function getList() { function getList() {
loading.value = true; loading.value = true;
listBill(queryParams.value).then(response => { listBill(queryParams.value).then((response) => {
billList.value = response.data; billList.value = response.data;
loading.value = false; loading.value = false;
}); });
} }
/** 搜索按钮操作 */ /** 搜索按钮操作 */
function handleQuery() { function handleQuery() {
queryParams.value.pageNum = 1; queryParams.value.pageNum = 1;
multipleBill.value = true;
multiple.value = true
stockList.value = []
getList(); getList();
} }
/** 重置按钮操作 */ /** 重置按钮操作 */
function resetQuery() { function resetQuery() {
proxy.resetForm("queryRef"); proxy.resetForm("queryRef");
handleQuery(); handleQuery();
} }
// 多选框选中数据 const multipleBill = ref(true);
function handleSelectionChange(selection) { const billTable = ref(null);
delieryData.value.deliveryTon = 0 const detailTable = ref(null);
delieryData.value.goodsSize = 0 // 多选框选中数据
if(selection.length>0){ function handleBillSelectionChange(selectionArr) {
for(let i=0;i<selection.length;i++){ if (!multiple.value) {
delieryData.value.deliveryTon += Number(selection[i].weightKg) proxy.$confirm('此操作将删除右侧勾选, 是否继续?', '提示', {
delieryData.value.goodsSize += Number(selection[i].volumeM3) confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
detailTable.value.clearSelection();
delieryData.value.deliveryTon = 0;
delieryData.value.goodsSize = 0;
let selection = selectionArr
.flatMap((item) => item.recordList)
if (selection.length > 0) {
for (let i = 0; i < selection.length; i++) {
delieryData.value.deliveryTon +=
Number(selection[i].weightKg) * 1000 * selection[i].realQty;
delieryData.value.goodsSize +=
Number(selection[i].volumeM3) * 1000 * selection[i].realQty;
// selection[i].rkInfoId = selection[i].id // selection[i].rkInfoId = selection[i].id
selection[i].rkRecordId = selection[i].id selection[i].rkRecordId = selection[i].id;
} }
delieryData.value.items = selection delieryData.value.items = selection;
// selection.forEach(element => { // selection.forEach(element => {
// delieryData.value.deliveryTon += Number(element.deliveryTon) // delieryData.value.deliveryTon += Number(element.deliveryTon)
// delieryData.value.goodsSize += Number(element.goodsSize) // delieryData.value.goodsSize += Number(element.goodsSize)
// }); // });
}else{ } else {
delieryData.value.deliveryTon = 0 delieryData.value.deliveryTon = 0;
delieryData.value.goodsSize = 0 delieryData.value.goodsSize = 0;
delieryData.value.items = [] delieryData.value.items = [];
} }
delieryData.value.deliveryTon = delieryData.value.deliveryTon.toFixed(3) / 1000 delieryData.value.deliveryTon = delieryData.value.deliveryTon / 1000000;
delieryData.value.goodsSize = delieryData.value.goodsSize.toFixed(3) delieryData.value.goodsSize = delieryData.value.goodsSize / 1000;
multiple.value = !selection.length multipleBill.value = !selectionArr.length;
multiple.value = true
console.log(selectionArr);
proxy.$message({
type: 'success',
message: '删除成功!',
})
})
.catch(() => {
billTable.value.clearSelection();
proxy.$message({
type: 'info',
message: '已取消删除',
})
})
} else {
delieryData.value.deliveryTon = 0;
delieryData.value.goodsSize = 0;
let selection = selectionArr
.flatMap((item) => item.recordList)
if (selection.length > 0) {
for (let i = 0; i < selection.length; i++) {
delieryData.value.deliveryTon +=
Number(selection[i].weightKg) * 1000 * selection[i].realQty;
delieryData.value.goodsSize +=
Number(selection[i].volumeM3) * 1000 * selection[i].realQty;
// selection[i].rkInfoId = selection[i].id
selection[i].rkRecordId = selection[i].id;
}
delieryData.value.items = selection;
// selection.forEach(element => {
// delieryData.value.deliveryTon += Number(element.deliveryTon)
// delieryData.value.goodsSize += Number(element.goodsSize)
// });
} else {
delieryData.value.deliveryTon = 0;
delieryData.value.goodsSize = 0;
delieryData.value.items = [];
}
delieryData.value.deliveryTon = delieryData.value.deliveryTon / 1000000;
delieryData.value.goodsSize = delieryData.value.goodsSize / 1000;
multipleBill.value = !selectionArr.length;
multiple.value = true
console.log(selectionArr);
}
}
function handleSelectionChange(selection) {
console.log(selection);
if (!multipleBill.value) {
proxy.$confirm('此操作将删除左侧勾选, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
billTable.value.clearSelection();
delieryData.value.deliveryTon = 0;
delieryData.value.goodsSize = 0;
if (selection.length > 0) {
for (let i = 0; i < selection.length; i++) {
delieryData.value.deliveryTon +=
Number(selection[i].weightKg) * 1000 * selection[i].realQty;
delieryData.value.goodsSize +=
Number(selection[i].volumeM3) * 1000 * selection[i].realQty;
// selection[i].rkInfoId = selection[i].id
selection[i].rkRecordId = selection[i].id;
}
delieryData.value.items = selection;
// selection.forEach(element => {
// delieryData.value.deliveryTon += Number(element.deliveryTon)
// delieryData.value.goodsSize += Number(element.goodsSize)
// });
} else {
delieryData.value.deliveryTon = 0;
delieryData.value.goodsSize = 0;
delieryData.value.items = [];
}
delieryData.value.deliveryTon = delieryData.value.deliveryTon / 1000000;
delieryData.value.goodsSize = delieryData.value.goodsSize / 1000;
multiple.value = !selection.length;
multipleBill.value = true
console.log(selection);
proxy.$message({
type: 'success',
message: '删除成功!',
})
})
.catch(() => {
detailTable.value.clearSelection();
proxy.$message({
type: 'info',
message: '已取消删除',
})
})
} else {
delieryData.value.deliveryTon = 0;
delieryData.value.goodsSize = 0;
if (selection.length > 0) {
for (let i = 0; i < selection.length; i++) {
delieryData.value.deliveryTon +=
Number(selection[i].weightKg) * 1000 * selection[i].realQty;
delieryData.value.goodsSize +=
Number(selection[i].volumeM3) * 1000 * selection[i].realQty;
// selection[i].rkInfoId = selection[i].id
selection[i].rkRecordId = selection[i].id;
}
delieryData.value.items = selection;
// selection.forEach(element => {
// delieryData.value.deliveryTon += Number(element.deliveryTon)
// delieryData.value.goodsSize += Number(element.goodsSize)
// });
} else {
delieryData.value.deliveryTon = 0;
delieryData.value.goodsSize = 0;
delieryData.value.items = [];
}
delieryData.value.deliveryTon = delieryData.value.deliveryTon / 1000000;
delieryData.value.goodsSize = delieryData.value.goodsSize / 1000;
multiple.value = !selection.length;
multipleBill.value = true
console.log(selection);
}
} }
//根据重量、体积、公里数计算车型、费用 //根据重量、体积、公里数计算车型、费用
function calculateFun(vehicleTypeId){ function calculateFun(id) {
if(!delieryData.value.deliveryTon || !delieryData.value.goodsSize || !delieryData.value.totalKm){ if (
!delieryData.value.deliveryTon ||
!delieryData.value.goodsSize ||
!delieryData.value.totalKm
) {
proxy.$modal.msgWarning("请输入公里数、重量、体积"); proxy.$modal.msgWarning("请输入公里数、重量、体积");
return return;
} }
let info = { let info = {
weightTon:0, weightTon: 0,
volumeM3:0, volumeM3: 0,
distanceKm:0, distanceKm: 0,
vehicleTypeId:vehicleTypeId };
let hasVehicle = delieryData.value.vehicleTypeNameList.every(item => item.vehicleTypeId)
if (hasVehicle) {
info.vehicleTypeId = delieryData.value.vehicleTypeNameList.map(item => item.vehicleTypeId).join(',')
} }
info.weightTon = delieryData.value.deliveryTon info.weightTon = delieryData.value.deliveryTon;
info.volumeM3 = delieryData.value.goodsSize info.volumeM3 = delieryData.value.goodsSize;
info.distanceKm = delieryData.value.totalKm info.distanceKm = delieryData.value.totalKm;
if(vehicleTypeId){ calculate(info).then((response) => {
info.vehicleTypeId = vehicleTypeId
}
calculate(info).then(response=>{
// 检查后端是否返回了错误信息 // 检查后端是否返回了错误信息
if(response.data.errorMessage) { if (response.data.warningMessage) {
// 如果有错误信息,显示给用户,并清空相关字段 proxy.$modal.msgError(response.data.warningMessage);
proxy.$modal.msgError(response.data.errorMessage); return;
if(!vehicleTypeId){
delieryData.value.vehicleTypeId = null;
} }
delieryData.value.suggestFee = null; if (response.data.bestPlan.length > 0 && !id) {
delieryData.value.vehicleTypeName = null; delieryData.value.vehicleTypeNameList = response.data.bestPlan;
} else {
// 没有错误信息,正常处理返回的车型信息
if(!vehicleTypeId){
delieryData.value.vehicleTypeId = response.data.vehicleTypeId;
} }
carTypeList.value = response.data.candidates;
delieryData.value.suggestFee = response.data.suggestFee; delieryData.value.suggestFee = response.data.suggestFee;
delieryData.value.vehicleTypeName = response.data.vehicleTypeName; delieryData.value.vehicleTypeName = response.data.vehicleTypeName;
} console.log(delieryData.value)
// console.log(response) });
})
} }
//切换车型 //切换车型
function changeCarType(id){ function changeCarType(id, index) {
if(!delieryData.value.totalKm || !delieryData.value.deliveryTon || !delieryData.value.goodsSize){ console.log(id, index)
if (
!delieryData.value.totalKm ||
!delieryData.value.deliveryTon ||
!delieryData.value.goodsSize
) {
proxy.$modal.msgWarning("请输入公里数、重量、体积"); proxy.$modal.msgWarning("请输入公里数、重量、体积");
return return;
} }
calculateFun(id) calculateFun(id);
} }
// 取消按钮 // 取消按钮
function cancel() { function cancel() {
dialogPicDetailVisible.value = false delieryData.value.originName = null;
reset() delieryData.value.destName = null;
delieryData.value.shipperName = null;
delieryData.value.shipperPhone = null;
delieryData.value.receiverName = null;
delieryData.value.receiverPhone = null;
delieryData.value.receiverOrgName = null;
delieryData.value.deliveryDate = null;
delieryData.value.totalKm = null;
delieryData.value.vehicleTypeNameList = [{}];
delieryData.value.suggestFee = null;
proxy.$refs["form"].resetFields()
dialogPicDetailVisible.value = false;
} }
function reset() { // function reset() {
delieryData.value = {
originName: null,
destName: null,
shipperName: null,
shipperPhone: null,
receiverName: null,
receiverPhone: null,
receiverOrgName: null,
deliveryDate: null,
deliveryTon: null,
goodsSize: null,
totalKm: null,
vehicleTypeId: null,
suggestFee: null,
vehicleTypeName: null
}
// this.resetForm("form")
proxy.resetForm("queryRef");
}
function submitForm() { // }
proxy.$refs["form"].validate(valid => {
function submitForm() {
let hasVehicle = delieryData.value.vehicleTypeNameList.every(item => item.vehicleTypeId)
if (!hasVehicle) {
proxy.$modal.msgWarning('请选择配送车型')
return
}
proxy.$refs["form"].validate((valid) => {
// console.log(delieryData.value) // console.log(delieryData.value)
// return // return
if (valid) { if (valid) {
addDelivery(delieryData.value).then(response => { let obj = JSON.parse(JSON.stringify(delieryData.value))
proxy.$modal.msgSuccess("操作成功") obj.vehicleTypeName = obj.vehicleTypeNameList.map(item => item.vehicleTypeName).join(',')
dialogPicDetailVisible.value = false obj.vehicleTypeId = obj.vehicleTypeNameList.map(item => item.vehicleTypeId).join(',')
stockList.value = [] addDelivery(obj).then((response) => {
getList() proxy.$modal.msgSuccess("操作成功");
}) dialogPicDetailVisible.value = false;
} stockList.value = [];
})
}
//数据列表
getList(); getList();
});
}
});
}
</script> //数据列表
getList();
</script>
<style scoped> <style scoped>
.el-table .warning-row { .el-table .warning-row {
--el-table-tr-bg-color: var(--el-color-warning-light-9); --el-table-tr-bg-color: var(--el-color-warning-light-9);
} }
.el-table .success-row { .el-table .success-row {
--el-table-tr-bg-color: var(--el-color-success-light-9); --el-table-tr-bg-color: var(--el-color-success-light-9);
} }
.titleBox{ .titleBox {
text-align: center; text-align: center;
} }
.topBox{ .topBox {
margin-bottom: 10px; margin-bottom: 10px;
display: flex; display: flex;
} }
.bottomBox{ .bottomBox {
margin-top: 20px; margin-top: 20px;
} }
.oneLineBox{ .oneLineBox {
display: flex; display: flex;
} }
.everyBox{ .everyBox {
width: 30%; width: 30%;
} }
.examine{ .examine {
margin-top: 20px; margin-top: 20px;
height: 100px; height: 100px;
background-color: #ededed; background-color: #ededed;
padding: 20px 0 0 20px; padding: 20px 0 0 20px;
border-radius: 10px; border-radius: 10px;
} }
.billBox{ .billBox {
font-weight: bold; font-weight: bold;
} }
</style> </style>