diff --git a/src/api/waybill/orderPackageListDetails.js b/src/api/waybill/orderPackageListDetails.js index ccaf4f3c..4671896b 100644 --- a/src/api/waybill/orderPackageListDetails.js +++ b/src/api/waybill/orderPackageListDetails.js @@ -51,11 +51,11 @@ export const postIncomingPackageByBussiness = data => { /** * 获取二维码 */ -export const getShowAdvancePackgeCode = params => { +export const getShowAdvancePackgeCode = data => { return request({ url: '/api/logpm-trunkline/advanceDetail/showAdvancePackgeCode', - method: 'get', - params, + method: 'post', + data, }); }; diff --git a/src/option/reportforms/CreateOrderTimelinessRatioReport.js b/src/option/reportforms/CreateOrderTimelinessRatioReport.js index 8f6561d3..70a2a7d1 100644 --- a/src/option/reportforms/CreateOrderTimelinessRatioReport.js +++ b/src/option/reportforms/CreateOrderTimelinessRatioReport.js @@ -650,6 +650,18 @@ export const columnListDetails = [ head: false, isshowSummary: false, //开启统计 }, + { + prop: 'incomingTime', + label: '入库时间', + type: 1, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + head: false, + isshowSummary: false, //开启统计 + }, { prop: 'waybillStatusName', label: '是否开单', diff --git a/src/option/reportforms/Mainlinedeliverydetails.js b/src/option/reportforms/Mainlinedeliverydetails.js index 275493f2..3fb72dc4 100644 --- a/src/option/reportforms/Mainlinedeliverydetails.js +++ b/src/option/reportforms/Mainlinedeliverydetails.js @@ -322,7 +322,7 @@ export const columnList = [ { prop: 'createUserName', label: '创建人', - type: 1, + type:1, values: '', width: '150', checkarr: [], diff --git a/src/option/reportforms/PackageTransferTimePageReport.js b/src/option/reportforms/PackageTransferTimePageReport.js index 14ae9279..727f31e2 100644 --- a/src/option/reportforms/PackageTransferTimePageReport.js +++ b/src/option/reportforms/PackageTransferTimePageReport.js @@ -163,3 +163,157 @@ export const columnList = [ head: false, }, ]; + +export const columnListByZero = [ + { + prop: '', + label: '复选框', + type: 0, + width: 55, + fixed: true, + }, + { + prop: '', + label: '序号', + type: 12, + values: '', + width: 55, + fixed: true, + }, + { + prop: 'businessLine', + label: '事业线', + type: 1, + values: '', + width: '180', + checkarr: [], + fixed: false, + sortable: true, + head: false, + }, + { + prop: 'departureWarehouseName', + label: '始发仓', + type: 1, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + head: false, + }, + { + prop: 'destinationWarehouseName', + label: '目的仓', + type: 1, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + head: false, + }, + { + prop: 'warehouseName', + label: '中转仓', + type: 1, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + head: false, + }, + { + prop: 'brand', + label: '品牌', + type: 1, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + head: false, + }, + { + prop: 'incomingNum', + label: '中转入库件数', + type: 6, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + head: false, + isshowSummary: true, //开启统计 + }, + { + prop: 'outNum', + label: '中转出库件数', + type: 6, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + head: false, + isshowSummary: true, //开启统计 + }, + { + prop: 'noOutNum', + label: '未出库件数', + type: 6, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + head: false, + isshowSummary: true, //开启统计 + }, + { + prop: 'outOnTimeNum', + label: '中转准时出库件数', + type: 1, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + head: false, + isshowSummary: true, //开启统计 + }, + { + prop: 'outOnTimeRate', + label: '中转准时出库率', + type: 6, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + head: false, + }, + { + prop: 'avgTime', + label: '平均中转时效(小时)', + type: 1, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + head: false, + }, + { + prop: 'hoursTime', + label: '标准时效(小时)', + type: 1, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + head: false, + }, +]; diff --git a/src/views/aftersales/aftersalesWorkOrderend.vue b/src/views/aftersales/aftersalesWorkOrderend.vue index 51591590..d3f734fb 100644 --- a/src/views/aftersales/aftersalesWorkOrderend.vue +++ b/src/views/aftersales/aftersalesWorkOrderend.vue @@ -190,7 +190,8 @@ </div> <div class="maxBox" style="flex: 1"> <span class="title">说明:</span> - <el-input v-model="item.description" placeholder="请输入说明 " clearable :rows="2" disabled /> + <el-input type="textarea" + :autosize="{ minRows: 1, maxRows: 10 }" v-model="item.description" placeholder="请输入说明 " clearable :rows="2" disabled /> </div> </div> </div> diff --git a/src/views/distribution/artery/VehicleStowageZeroLoading.vue b/src/views/distribution/artery/VehicleStowageZeroLoading.vue index 8d907f64..fb185b9c 100644 --- a/src/views/distribution/artery/VehicleStowageZeroLoading.vue +++ b/src/views/distribution/artery/VehicleStowageZeroLoading.vue @@ -574,7 +574,7 @@ const handleZeroLoad = async ({ row }, type) => { for (let i = 0; i < details.zeroItem.zeroPackageList.length; i++) { const item = details.zeroItem.zeroPackageList[i]; - item.enterNum = item.loadingNum || item.stockNum || 0; + item.enterNum = item.loadingNum || 0; item.maxNum = (item.loadingNum || 0) + (item.stockNum || 0); console.log('item :>> ', item); @@ -586,9 +586,6 @@ const handleZeroLoad = async ({ row }, type) => { /** 卸车 -- 零担 -- 提交 */ const handleZeroUnLoadSubmit = async () => { try { - details.popUpShow.transferVisited = false; - details.loadingObj.pageLoading = true; - // let res: any = {}; const submitData = { @@ -610,6 +607,11 @@ const handleZeroUnLoadSubmit = async () => { submitData.enterNum = _loadingNum; if (submitData.enterNum === 0) return ElMessage.warning('装车总数为零,请填写需要装车的数据'); + else if (submitData.enterNum > details.zeroItem.planNum) + return ElMessage.warning('总装车数大于计划处,请调整'); + + details.popUpShow.transferVisited = false; + details.loadingObj.pageLoading = true; const res = await postLoadingZero(submitData); diff --git a/src/views/distribution/artery/directGoMarketDetails.vue b/src/views/distribution/artery/directGoMarketDetails.vue index 58c3fdfb..8d33026d 100644 --- a/src/views/distribution/artery/directGoMarketDetails.vue +++ b/src/views/distribution/artery/directGoMarketDetails.vue @@ -353,7 +353,6 @@ style="width: 100%" :precision="0" :max="details.zeroItem.num" - readonly :controls="false" v-model="details.zeroItem.enterNum" /> diff --git a/src/views/distribution/artery/truckLoadingDetails.vue b/src/views/distribution/artery/truckLoadingDetails.vue index 592a4a26..72a5fec6 100644 --- a/src/views/distribution/artery/truckLoadingDetails.vue +++ b/src/views/distribution/artery/truckLoadingDetails.vue @@ -1328,7 +1328,7 @@ const printOrder = async ({ row }) => { details.loadingObj.pageLoading = true; let qr = { - orderPackageCodes: row.scanCode, + orderPackageCodes: [row.scanCode], }; details.html = ''; @@ -1404,7 +1404,7 @@ const handleBatchBarcode = async () => { _arr.length > 0 && _promiseArr.push( getShowAdvancePackgeCode({ - orderPackageCodes: _arr.map(val => val.scanCode).join(','), + orderPackageCodes: _arr.map(val => val.scanCode), }).then(res => { const { code, data } = res.data; if (code !== 200 || getObjType(data.moldList) !== 'array') return; diff --git a/src/views/distribution/deliverylist/distributionDeliveryListedt.vue b/src/views/distribution/deliverylist/distributionDeliveryListedt.vue index 0f0f5f88..b91350ab 100644 --- a/src/views/distribution/deliverylist/distributionDeliveryListedt.vue +++ b/src/views/distribution/deliverylist/distributionDeliveryListedt.vue @@ -156,7 +156,7 @@ icon="el-icon-view" @click="viewAbnormalLoading(slotProps.scope.row)" v-if="slotProps.scope.row.isHaveAbnormalPackage == '2'" - >异常审核 + >异常记录 </el-text> <el-text @@ -825,7 +825,7 @@ <MyPrint :html="html" v-model="dialogVisibleF" width="70%"></MyPrint> <el-dialog - title="异常包件列表" + title="异常记录" v-model="abnormalBox" width="67%" append-to-body diff --git a/src/views/distribution/inventory/CreateOrder.vue b/src/views/distribution/inventory/CreateOrder.vue index 052a810d..1ada6ad8 100644 --- a/src/views/distribution/inventory/CreateOrder.vue +++ b/src/views/distribution/inventory/CreateOrder.vue @@ -3882,6 +3882,19 @@ const handleSubmit = (formEl: FormInstance | undefined) => { val.deliveryPrice = !isNumber(val.deliveryPrice) ? 0 : val.deliveryPrice; val.pickupPrice = !isNumber(val.pickupPrice) ? 0 : val.pickupPrice; val.subtotalFreight = !isNumber(val.subtotalFreight) ? 0 : val.subtotalFreight; + + if (val.chargeType === 2 && val.volume === 0) { + return ElMessage({ + message: '请填写方数', + type: 'warning', + }); + } + if (val.chargeType === 3 && val.weight === 0) { + return ElMessage({ + message: '请填写重量', + type: 'warning', + }); + } } // if (!(details.query.totalFreight > 0)) { diff --git a/src/views/distribution/inventory/delivery/Unstoreddetails.vue b/src/views/distribution/inventory/delivery/Unstoreddetails.vue index 0f852193..f68a8fb9 100644 --- a/src/views/distribution/inventory/delivery/Unstoreddetails.vue +++ b/src/views/distribution/inventory/delivery/Unstoreddetails.vue @@ -438,7 +438,7 @@ const printOrder = async row => { details.loadingObj.list = true; details.html = ''; let qr = { - orderPackageCodes: row.orderPackageCode, + orderPackageCodes: [row.orderPackageCode], }; const res = await getShowAdvancePackgeCode(qr); const { code, data } = res.data; @@ -463,7 +463,7 @@ const handleBatchBarcode = async () => { details.loadingObj.list = true; let qr = { - orderPackageCodes: details.selectionList.map(val => val.orderPackageCode).join(','), + orderPackageCodes: details.selectionList.map(val => val.orderPackageCode), }; const res = await getShowAdvancePackgeCode(qr); diff --git a/src/views/distribution/signfor/distributionSignfortreat.vue b/src/views/distribution/signfor/distributionSignfortreat.vue index f2ccf13a..cc632a71 100644 --- a/src/views/distribution/signfor/distributionSignfortreat.vue +++ b/src/views/distribution/signfor/distributionSignfortreat.vue @@ -162,7 +162,7 @@ size="small" v-if="slotProps.scope.row.abnormalLoadedNumber > 0" @click="viewAbnormalLoading(slotProps.scope)" - >异 常 审 核</el-text + >异 常 记 录</el-text > <!-- v-if=" slotProps.scope.row.sijiSigningStatus == '司机已签收' && @@ -478,7 +478,7 @@ v-model="columnList" ></edittablehead> <el-dialog - title="异常装车包件列表" + title="异常记录" v-model="abnormalBox" width="50%" :before-close="beforeClose" diff --git a/src/views/reportforms/CreateOrderTimelinessRatioReport.vue b/src/views/reportforms/CreateOrderTimelinessRatioReport.vue index cb9a9cc0..8c691e3b 100644 --- a/src/views/reportforms/CreateOrderTimelinessRatioReport.vue +++ b/src/views/reportforms/CreateOrderTimelinessRatioReport.vue @@ -86,6 +86,7 @@ <!-- 头部左侧按钮模块 --> <div class="avue-crud__left"> <el-button type="primary" icon="Download" @click="ExportData"> 导出 </el-button> + <el-button type="primary" icon="Download" @click="ExportDetailData"> 明细导出 </el-button> </div> <!-- 头部右侧按钮模块 --> <div class="avue-crud__right"> @@ -162,6 +163,7 @@ import { postFindbusinessLine } from '@/api/reportforms/SalesDepartmentIncomeRep import { postOpenTimePage, postOpenTimeExport, + postOpenTimeDetailExport, } from '@/api/reportforms/CreateOrderTimelinessRatioReport'; import { getListName } from '@/api/basicdata/basicdataVehicle'; import { @@ -488,6 +490,37 @@ const ExportData = async () => { } }; +// 明细导出 +const ExportDetailData = async () => { + try { + details.loadingObj.list = true; + + const submitData: any = {}; + + // 时间周期 + if (getObjType(details.query.timeArr) === 'array' && details.query.timeArr.length > 0) { + submitData.startTimeStr = details.query.timeArr[0]; + submitData.endTimeStr = details.query.timeArr[1]; + + const start = new Date(submitData.startTimeStr).getTime(); + const end = new Date(submitData.endTimeStr).getTime(); + + if (end - start + 1000 * 60 * 60 * 24 > 1000 * 60 * 60 * 24 * 31) + return ElMessage.warning('时间不能大于31天'); + } + + const res = await postOpenTimeDetailExport(submitData); + const { status, data } = res; + if (status !== 200) return; + const time = new Date().getTime(); + downloadXls(data, '开单及时率报表 -' + time + '.xlsx'); + } catch (error) { + console.log('error :>> ', error); + } finally { + details.loadingObj.list = false; + } +}; + /** 跳转详情 */ const handleJumpDetail = (row, column) => { if (!row[column.property]) return; diff --git a/src/views/reportforms/PackageTransferTimePageReport.vue b/src/views/reportforms/PackageTransferTimePageReport.vue index 2c3fd58b..0b6a51ab 100644 --- a/src/views/reportforms/PackageTransferTimePageReport.vue +++ b/src/views/reportforms/PackageTransferTimePageReport.vue @@ -173,8 +173,9 @@ <el-tab-pane label="零担" name="zero"> <!-- 列表模块 --> <tablecmt + columnListName="columnListByZero" ref="tableNodeRef2" - :columnList="details.columnList" + :columnList="details.columnListByZero" :tableData="details.data" @inputTxt="inputsc" @timeCheck="timesc" @@ -192,7 +193,6 @@ </tablecmt> </el-tab-pane> </el-tabs> - <!-- 分页模块 --> <div class="avue-crud__pagination flex-c-sb" style="width: 100%"> <div style="font-size: 14px">勾选数量: {{ selectionList.length }}</div> @@ -219,6 +219,14 @@ :columnList="details.columnList" v-model="details.columnList" ></edittablehead> + + <edittablehead + columnListName="columnListByZero" + @closce="showdrawerByZero" + :drawerShow="details.drawerShowByZero" + :columnList="details.columnListByZero" + v-model="details.columnListByZero" + ></edittablehead> </template> <script setup lang="ts"> @@ -252,7 +260,7 @@ import { } from '@/utils/util'; import { useRouter } from 'vue-router'; import { ElMessage, ElMessageBox } from 'element-plus'; -import { columnList } from '@/option/reportforms/PackageTransferTimePageReport'; +import { columnList, columnListByZero } from '@/option/reportforms/PackageTransferTimePageReport'; // 获取路由实例 const $router = useRouter(); @@ -298,6 +306,7 @@ const details = reactive<any>({ }, ], columnList: deepClone(columnList), + columnListByZero: deepClone(columnListByZero), data: [], /** 头部搜索配置 */ titleSearchOption: [], @@ -313,6 +322,7 @@ const details = reactive<any>({ selectionList: [], /** 是否显示设置表格 */ drawerShow: false, + drawerShowByZero: false, /** 分页参数 */ page: { pageNum: 1, @@ -466,6 +476,11 @@ const showdrawer = (_flag?: boolean) => { details.drawerShow = _flag; }; +/** 展开列表控件 */ +const showdrawerByZero = (_flag?: boolean) => { + details.drawerShowByZero = _flag; +}; + /** 是否开启搜索区 */ const searchHide = () => { details.search = !details.search; diff --git a/src/views/warehouse/prewarehousing/PreStoragePackage.vue b/src/views/warehouse/prewarehousing/PreStoragePackage.vue index 31ec564d..81a04b0c 100644 --- a/src/views/warehouse/prewarehousing/PreStoragePackage.vue +++ b/src/views/warehouse/prewarehousing/PreStoragePackage.vue @@ -353,7 +353,7 @@ const handleShowQrCode = async ({ row }) => { details.loadingObj.pageLoading = true; let qr = { - orderPackageCodes: row.orderPackageCode, + orderPackageCodes: [row.orderPackageCode], }; details.html = ''; const res = await getShowAdvancePackgeCode(qr); @@ -393,7 +393,7 @@ const handleBatchShowQrCode = async () => { }); // return let qr = { - orderPackageCodes: checkcode.join(','), + orderPackageCodes: checkcode, }; details.html = ''; const res = await getShowAdvancePackgeCode(qr); diff --git a/src/views/waybill/CreateZeroOrder.vue b/src/views/waybill/CreateZeroOrder.vue index 7da6c06d..511d1a3d 100644 --- a/src/views/waybill/CreateZeroOrder.vue +++ b/src/views/waybill/CreateZeroOrder.vue @@ -2981,6 +2981,19 @@ const handleSubmit = async (formEl: FormInstance | undefined) => { val.deliveryPrice = !isNumber(val.deliveryPrice) ? 0 : val.deliveryPrice; val.pickupPrice = !isNumber(val.pickupPrice) ? 0 : val.pickupPrice; val.subtotalFreight = !isNumber(val.subtotalFreight) ? 0 : val.subtotalFreight; + + if (val.chargeType === 2 && val.volume === 0) { + return ElMessage({ + message: '请填写方数', + type: 'warning', + }); + } + if (val.chargeType === 3 && val.weight === 0) { + return ElMessage({ + message: '请填写重量', + type: 'warning', + }); + } } // if (!(details.query.totalFreight > 0)) return ElMessage.warning('请输入大于零的运费'); diff --git a/src/views/waybill/orderPackageList.vue b/src/views/waybill/orderPackageList.vue index 5f16d893..451d337d 100644 --- a/src/views/waybill/orderPackageList.vue +++ b/src/views/waybill/orderPackageList.vue @@ -847,7 +847,7 @@ const handleBatchBarcode = async () => { details.loadingObj.pageLoading = true; let qr = { - orderPackageCodes: details.selectionList.map(val => val.orderPackageCode).join(','), + orderPackageCodes: details.selectionList.map(val => val.orderPackageCode), }; details.html = ''; @@ -878,7 +878,7 @@ const printOrder = async ({ row }) => { details.loadingObj.pageLoading = true; details.html = ''; let qr = { - orderPackageCodes: row.orderPackageCode, + orderPackageCodes: [row.orderPackageCode], }; const res = await getShowAdvancePackgeCode(qr); const { code, data } = res.data; diff --git a/src/views/waybill/orderPackageListDetails.vue b/src/views/waybill/orderPackageListDetails.vue index b91e6956..0c15638f 100644 --- a/src/views/waybill/orderPackageListDetails.vue +++ b/src/views/waybill/orderPackageListDetails.vue @@ -739,7 +739,7 @@ const printOrder = async ({ row }) => { details.loadingObj.pageLoading = true; details.html = ''; let qr = { - orderPackageCodes: row.orderPackageCode, + orderPackageCodes: [row.orderPackageCode], }; const res = await getShowAdvancePackgeCode(qr); const { code, data } = res.data; @@ -907,7 +907,7 @@ const handleBatchBarcode = async () => { details.loadingObj.pageLoading = true; let qr = { - orderPackageCodes: details.selectionList.map(val => val.orderPackageCode).join(','), + orderPackageCodes: details.selectionList.map(val => val.orderPackageCode), }; const res = await getShowAdvancePackgeCode(qr); diff --git a/src/views/waybill/orderPackageListDetailsByMarket.vue b/src/views/waybill/orderPackageListDetailsByMarket.vue index 70dca818..afa30692 100644 --- a/src/views/waybill/orderPackageListDetailsByMarket.vue +++ b/src/views/waybill/orderPackageListDetailsByMarket.vue @@ -717,7 +717,7 @@ const printOrder = async ({ row }) => { details.loadingObj.pageLoading = true; details.html = ''; let qr = { - orderPackageCodes: row.orderPackageCode, + orderPackageCodes: [row.orderPackageCode], }; const res = await getShowAdvancePackgeCode(qr); const { code, data } = res.data; @@ -886,7 +886,7 @@ const handleBatchBarcode = async () => { details.loadingObj.pageLoading = true; let qr = { - orderPackageCodes: details.selectionList.map(val => val.orderPackageCode).join(','), + orderPackageCodes: details.selectionList.map(val => val.orderPackageCode), }; const res = await getShowAdvancePackgeCode(qr); diff --git a/src/views/wel/bulletinboard/bulletinboard.vue b/src/views/wel/bulletinboard/bulletinboard.vue index 39afbc58..28cbea7f 100644 --- a/src/views/wel/bulletinboard/bulletinboard.vue +++ b/src/views/wel/bulletinboard/bulletinboard.vue @@ -5,33 +5,23 @@ <transition name="slide"> <div class="announcement-board" v-if="isShow"> <div class="announcement-content" v-loading="loading"> - <div - class="announcement-item" - v-for="(item, index) in announcements" - :key="item.id" - @click="showDetails(item, index)" - > + <div class="announcement-item" v-for="(item, index) in announcements" :key="item.id" + @click="showDetails(item, index)"> <span v-if="isToday(item.releaseTime)" class="red-dot"></span> <h2>{{ item.title }}</h2> <p class="date">时间:{{ item.releaseTime }}</p> </div> - <el-empty description="暂无公告通知" v-if="!announcements.length" /> + <el-empty description="暂无公告通知" v-if="!announcements?.length" /> </div> <div class="footer"> - <span>消息数: {{ announcements.length }}</span> + <span>消息数: {{ announcements?.length || 0 }}</span> </div> </div> </transition> - <el-dialog - v-model="centerDialogVisible" - :title="currentAnnouncement.title" - width="60%" - center - style="min-height: 500px" - class="el_announcement" - > + <el-dialog v-model="centerDialogVisible" :title="currentAnnouncement.title" width="60%" center + style="min-height: 500px" class="el_announcement"> <p> <span class="time">时间: {{ currentAnnouncement.releaseTime }}</span> <br /> <span class="category">分类:{{ currentAnnouncement.categoryName }}</span> @@ -39,11 +29,13 @@ <div v-html="currentAnnouncement.content" class="content"></div> <template #footer> <div class="dialog-footer"> - <el-button type="primary" @click="Previous" - ><el-icon><DArrowLeft /></el-icon> 上一条 + <el-button type="primary" @click="Previous"><el-icon> + <DArrowLeft /> + </el-icon> 上一条 </el-button> - <el-button type="primary" @click="next" - >下一条<el-icon><DArrowRight /></el-icon> + <el-button type="primary" @click="next">下一条<el-icon> + <DArrowRight /> + </el-icon> </el-button> </div> </template> @@ -172,6 +164,7 @@ const toggleAnnouncements = () => { border-radius: 8px; overflow: hidden; position: relative; + .announcement-content { padding: 0 10px; height: 450px; @@ -219,6 +212,7 @@ const toggleAnnouncements = () => { .content { display: flex; align-items: center; + p { font-size: 14px; color: #555; @@ -230,6 +224,7 @@ const toggleAnnouncements = () => { white-space: nowrap; // 溢出不换行 } } + .date { font-size: 12px; color: #999; @@ -241,6 +236,7 @@ const toggleAnnouncements = () => { /* 响应式设计 */ @media (max-width: 768px) { + .el_top, .announcement-board { width: 90%; @@ -288,16 +284,19 @@ const toggleAnnouncements = () => { display: flex; justify-content: space-evenly; transform: translate(-56%, 0); + button { width: 150px; height: 50px; margin: 0; } } + .footer { display: flex; justify-content: flex-end; padding-right: 6px; + span { display: flex; border: 1px solid;