diff --git a/src/api/aftersales/aftersalesWorkOrder.js b/src/api/aftersales/aftersalesWorkOrder.js index 389d5083..baed09b7 100644 --- a/src/api/aftersales/aftersalesWorkOrder.js +++ b/src/api/aftersales/aftersalesWorkOrder.js @@ -274,3 +274,12 @@ export const $_getAbnormalPackage = (params) => { params }) } + +//查询申述数据 +export const $_listAppeal = (params) => { + return request({ + url: '/api/logpm-aftersales/aftersalesAppeal/listAppeal', + method: 'get', + params + }) +} diff --git a/src/option/aftersales/vueTvemp.js b/src/option/aftersales/vueTvemp.js index e7749a9a..d36cd424 100644 --- a/src/option/aftersales/vueTvemp.js +++ b/src/option/aftersales/vueTvemp.js @@ -644,5 +644,15 @@ export const Claimsfield = [ sortable: true, head: false, }, + { + prop: 'createUserName', + label: '操作', + type: 6, + values: '', + width: '220', + checkarr: [], + fixed: 'right', + sortable: false, + }, ] diff --git a/src/page/index/top/index.vue b/src/page/index/top/index.vue index 3de4b69e..0ee9e0e6 100644 --- a/src/page/index/top/index.vue +++ b/src/page/index/top/index.vue @@ -67,7 +67,7 @@ </div> <el-dialog v-model="isshow" title="切换仓库" width="30%"> <div style="display: flex; flex-direction: column; align-items: center"> - <el-select class="selecin" v-model="warehousevalue" placeholder="请选择切换的仓库"> + <el-select class="selecin" v-model="warehousevalue" filterable placeholder="请选择切换的仓库"> <el-option v-for="(item, index) in datalist" :key="item.id" diff --git a/src/router/views/index.js b/src/router/views/index.js index 08cd3f34..d35eb521 100644 --- a/src/router/views/index.js +++ b/src/router/views/index.js @@ -1216,6 +1216,21 @@ export default [ }, ], }, + + { + path: '/aftersales/aftersalesWorkOrderInfo', + component: Layout, + redirect: '/aftersales/aftersalesWorkOrderInfo', + children: [ + { + path: '/aftersales/aftersalesWorkOrderInfo', + name: '工单详情查看', + component: () => import('@/views/aftersales/aftersalesWorkOrderInfo.vue'), + }, + ], + }, + + { path: '/aftersales/aftersalesWorkOrderend', component: Layout, diff --git a/src/views/aftersales/aftersalesWorkOrder.vue b/src/views/aftersales/aftersalesWorkOrder.vue index e0478b35..77e05ba8 100644 --- a/src/views/aftersales/aftersalesWorkOrder.vue +++ b/src/views/aftersales/aftersalesWorkOrder.vue @@ -2,6 +2,7 @@ <div class="content_max"> <!-- 菜单 --> <el-tabs type="border-card" v-model="tabValue" @tab-change="tabChenge" class="el_tabs"> + <div> </div> <el-tab-pane :name="item.name" :label="item.label" v-for="item in TabList" :key="item.name"> </el-tab-pane> <div class="content_right"> @@ -89,7 +90,7 @@ <el-button type="primary" @click="assign">工单指派</el-button> <el-button type="primary" @click="arbitrate">申请仲裁</el-button> <el-button type="primary" @click="Batchcompletion">批量完结</el-button> - <el-button type="primary" @click="appeal">申诉</el-button> + <el-button type="primary" @click="appeal" v-if="details.query.workOrderStatus == 30">申诉</el-button> <!-- <el-button type="primary" @click="ProcessingParty"> 处理方信息</el-button> --> </div> <!-- 头部右侧按钮模块 --> @@ -126,11 +127,14 @@ <template v-if="slotProps.scope.column.label === '操作'"> <div class="ElBtnClass"> <el-button @click="addingRecord(slotProps.scope)">新增记录</el-button> - <el-button @click="view(slotProps.scope)">查看</el-button> + <el-button v-if="!ClaimStatus" @click="view(slotProps.scope)">查看</el-button> <!-- <el-button @click="ViewEvent(slotProps.scope)">编辑</el-button> --> <el-button @click="reply(slotProps.scope)">回复</el-button> <!-- <el-button @click="ViewDelete(slotProps.scope)">删除</el-button> --> <el-button @click="CompletionButton(slotProps.scope)">完结</el-button> + <el-button v-if="ClaimStatus" @click="appeal(slotProps.scope)" + >申诉</el-button + > </div> </template> </template> @@ -1013,7 +1017,7 @@ import { $_addCompletionEnd, $_appealSubmit, $_listSettlement, - $_getAbnormalPackage, + $_listAppeal, } from '@/api/aftersales/aftersalesWorkOrder'; import { getToken } from '@/utils/auth'; import { getDictionaryBiz } from '@/api/system/dict'; //字典 @@ -1469,11 +1473,10 @@ const searchHide = () => { const view = val => { console.log(val.row.id); $router.push({ - path: '/aftersales/aftersalesWorkOrderAdd', + path: '/aftersales/aftersalesWorkOrderInfo', query: { id: val.row.id, name: val.row.id + '-信息查看', - routerState: 'view', }, }); return; @@ -1586,6 +1589,13 @@ const appeal = val => { }); return; } + if (details.selectionList.length>1) { + ElMessage({ + message: '只能单条申诉', + type: 'warning', + }); + return; + } dialogappeal.value = true; //展开申诉弹窗 }; // 工单申诉确认按钮 @@ -1596,7 +1606,16 @@ const Appealbutton = () => { let data = { peopleEntityList: [], //参数一 }; + data.workOrderId=details.selectionList[0].id + data.reason=Reasonforappeal.value + + data.appealPeopleName= warehouseData.value + .filter(item => Appealselection.value.includes(item.value)) + .map(item => item.label) + .join(','), //实际责任人名称 + details.selectionList.forEach(item => { + console.log(item.id); console.log(item, '已经选择的列表'); data['peopleEntityList'].push({ workOrderId: item.id, //异常工单ID @@ -1608,10 +1627,6 @@ const Appealbutton = () => { .filter(item => Appealselection.value.includes(item.value)) .map(item => item.label) .join(','), //实际责任人名称 - actualPersonId: warehouseData.value - .filter(item => Appealselection.value.includes(item.value)) - .map(item => item.value) - .join(','), //实际责任人ID }); }); console.log(data, '处理好的值'); @@ -1646,6 +1661,11 @@ const AppealTab = val => { IndexTable({ workOrderStatus: 30 }); } else { console.log('当前是申诉列表'); + let data={} + $_listAppeal(data).then(res=>{ + console.log(res,'申诉列表返回值') + + }) } }; @@ -2764,6 +2784,7 @@ const CompletedSubmission = () => { display: flex; align-items: flex-end; margin-bottom: 10px; + } .el-times { :deep(.el-input__wrapper) { @@ -3001,10 +3022,15 @@ const CompletedSubmission = () => { :deep(.el_tabs) { width: 100%; display: flex; - flex-direction: column; + // flex-direction: column; + flex-wrap: wrap; .el-tabs__content { padding: 0; } + .el-tabs__header{ + height: 37px; + width: 100%; + } } :deep(.avue-crud__pagination) { padding-top: 2px !important; @@ -3029,4 +3055,7 @@ const CompletedSubmission = () => { justify-content: flex-end; margin-top: 10px; } +:deep(.avue-crud__header){ + align-items: center; +} </style> diff --git a/src/views/aftersales/aftersalesWorkOrderAdd.vue b/src/views/aftersales/aftersalesWorkOrderAdd.vue index ae0326a7..c1356494 100644 --- a/src/views/aftersales/aftersalesWorkOrderAdd.vue +++ b/src/views/aftersales/aftersalesWorkOrderAdd.vue @@ -21,6 +21,7 @@ placeholder="请输入包条码" clearable :rows="2" + @change="ChangePackageInfo(item.packageCode, index)" /> </div> @@ -36,6 +37,9 @@ </div> <div class="el-btn"> + <el-button v-if="item.state" type="primary" @click="historicalPackages(index)"> + 查看历史包件 + </el-button> <el-button type="primary" @click="PackagRemoval(index)"> 移除 </el-button> </div> </div> @@ -361,6 +365,17 @@ :rows="2" /> </div> + + <div class="maxBox"> + <span class="title">说明:</span> + <el-input + v-model="item.responsibilityRatio" + placeholder="请输入说明 " + clearable + :rows="2" + /> + </div> + </div> <div class="el-btn"> <el-button type="primary" @click="ResponsibilityRemoval(index)"> 移除 </el-button> @@ -454,6 +469,28 @@ </span> </template> </el-dialog> + + <el-dialog v-model="dialogHistoricalPackage" title="查看历史包件" width="30%"> + <el-form-item label="历史包件选择"> + <el-select v-model="HistoricalPackageinput" clearable filterable placeholder="请选择包件"> + <el-option + v-for="item in HistoricalPackageList" + :key="item.value" + :label="item.workOrderNumber" + :value="item.workOrderId" + /> + </el-select> + <el-button @click="ViewPackageDetails(HistoricalPackageinput)">查看详情</el-button> + </el-form-item> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogHistoricalPackage = false">取消</el-button> + <el-button type="primary" @click="HistoricalPackage(HistoricalPackageinput)"> + 确定选择 + </el-button> + </span> + </template> + </el-dialog> </template> <script setup> @@ -468,6 +505,7 @@ import { $_getDetail, $_remove, $_getBusinessDepartmentUser, + $_getAbnormalPackage, } from '@/api/aftersales/aftersalesWorkOrder'; import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue'; import { getToken } from '@/utils/auth'; @@ -491,6 +529,7 @@ const DiscoveringNodes = ref([]); //发现节点下拉选择 const warehouseData = ref([]); //处理方 const SelectType = ref(null); //类型 const StateType = ref(true); //类型 +const HistoricalPackageinput = ref(''); //历史包件选择 const dialogImageUrl = ref(null); //图片 const dialogVisible = ref(null); //图片 const groundlineSet = ref(true); //干线条件都满足 @@ -505,6 +544,9 @@ const routerState = ref(''); //路由状态 const personResponsibleList = ref([]); //责任人列表 const companyProportion = ref(0); //公司占比 const identifying = ref(1); //订单,零担状态 +const dialogHistoricalPackage = ref(false); //历史包件弹窗 +const HistoricalPackageList = ref([]); //历史包件数组 +const HistorIndex = ref(0); //历史包件索引 const PackageInfo = ref([ //包件信息 { packageCode: '', orderCode: '', waybillNumber: '' }, @@ -690,6 +732,7 @@ const TopChange = val => { identifying.value = 2; } }; + //表单提交 const ConfirmForm = () => { // 图片类型:10运损,20窜货 @@ -940,6 +983,70 @@ const moneyBtnB = () => { } fleeingState.value = true; //开启弹窗输入 }; +// 查询包件信息自动回显 +const ChangePackageInfo = (val, index) => { + let data = { + packageCode: val, + }; + $_getAbnormalPackage(data).then(res => { + console.log(res, '包件信息'); + console.log(res.data.data, '包件信息'); + + const packageData = res.data.data[0]; + PackageInfo.value[index].orderCode = packageData.orderCode; //订单自编码 + PackageInfo.value[index].waybillNumber = packageData.waybillNumber; //运单号 + PackageInfo.value[index].orderId = packageData.orderId; //运单号 + PackageInfo.value[index].state = false; //状态 + + if (res.data.data.length > 1) { + HistoricalPackageList.value = res.data.data; + PackageInfo.value[index].state = true; //状态 + } + // packageCode; //包件码 + // //订单自编码 + // orderCode: orderId; //运单号 + // workOrderId; //工单id + // workOrderNumber; //工单名称 + console.log(PackageInfo.value, '处理好的参数'); + }); +}; + +// 查看历史包件 +const historicalPackages = val => { + dialogHistoricalPackage.value = true; //打开历史包件弹窗 + HistorIndex.value = val; + console.log(val); +}; +// 历史包件确定选择 +const HistoricalPackage = val => { + let info = HistoricalPackageList.value.find(obj => obj.workOrderId == val); + PackageInfo.value[HistorIndex.value].orderCode = info.orderCode; //订单自编码 + PackageInfo.value[HistorIndex.value].waybillNumber = info.waybillNumber; //运单号 + PackageInfo.value[HistorIndex.value].orderId = info.orderId; //运单号 + dialogHistoricalPackage.value = false; //关闭历史包件弹窗 +}; +// 历史包件里面的查看 +const ViewPackageDetails = val => { + if(!val){ + ElMessage({ + message: '请选择要查看的数据', + type: 'warning', + }) + return + } + console.log(val); + let info = HistoricalPackageList.value.find(obj => obj.workOrderId == val); + console.log(info,'筛选的值'); + $router.push({ + path: '/aftersales/aftersalesWorkOrderInfo', + query: { + id: info.workOrderId, + name: info.workOrderId + '-信息查看', + routerState: 'view', + }, + }); + dialogHistoricalPackage.value = false; //打开历史包件弹窗 +}; </script> <style scoped lang="scss"> @@ -957,6 +1064,7 @@ const moneyBtnB = () => { flex: 1 0 30%; :deep(.el-form-item__label) { width: 100px !important; + justify-content: flex-start; } } :deep(.el-form-item__content) { @@ -1085,8 +1193,9 @@ const moneyBtnB = () => { display: flex; align-items: center; width: 30%; + margin-right: 16px; .title { - width: 120px; + width: 80px; font-size: 14px; color: #606266; } diff --git a/src/views/aftersales/aftersalesWorkOrderInfo.vue b/src/views/aftersales/aftersalesWorkOrderInfo.vue new file mode 100644 index 00000000..d31f3036 --- /dev/null +++ b/src/views/aftersales/aftersalesWorkOrderInfo.vue @@ -0,0 +1,1287 @@ +<template> + <el-card class="box-card"> + <!-- <el-tabs type="border-card" class="topClass" @tab-change="TopChange"> + <el-tab-pane label="订单"></el-tab-pane> + <el-tab-pane label="零担"></el-tab-pane> + </el-tabs> --> + + <el-tabs type="border-card" class="PackageInformation"> + <el-tab-pane label="包件信息"> + <div class="ResponsibilityBoxS"> + <!-- <div><el-button type="primary" @click="AddPackage"> 添加信息 </el-button></div> --> + <div class="el_btbox" v-for="(item, index) in PackageInfo" :key="index"> + <div class="leftbox"> + <div class="maxBox"> + <span class="title">包条码:</span> + <el-input + v-model="item.packageCode" + placeholder="请输入包条码" + clearable + :rows="2" + @change="ChangePackageInfo(item.packageCode, index)" + /> + </div> + + <div class="maxBox"> + <span class="title">订单自编码:</span> + <el-input v-model="item.orderCode" placeholder="请输入订单自编号" clearable /> + </div> + + <div class="maxBox"> + <span class="title">运单号:</span> + <el-input v-model="item.waybillNumber" placeholder="请输入运单号" clearable /> + </div> + </div> + + <div class="el-btn"> + <!-- <el-button v-if="item.state" type="primary" @click="historicalPackages(index)"> + 查看历史包件 + </el-button> --> + <!-- <el-button type="primary" @click="PackagRemoval(index)"> 移除 </el-button> --> + </div> + </div> + <!-- <div class="NumTotal"> + <span>总件数:{{ Indexform.number }}</span> + </div> --> + </div> + </el-tab-pane> + </el-tabs> + <el-form :model="Indexform" label-width="100px" class="IndexFrom" ref="IndexForm"> + <el-form-item label="异常类型"> + <el-select + v-model="Indexform.workOrderType" + clearable + placeholder="选择工单异常类型" + @change="abnormalChange" + > + <el-option + v-for="item in IndexException" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + + <el-form-item label="发现节点"> + <el-select + v-model="Indexform.discoveryNode" + clearable + placeholder="选择发现节点" + @change="DiscoveringNodesChange" + > + <el-option + v-for="item in DiscoveringNodes" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + + <el-form-item label="异常工单号"> + <el-input v-model="Indexform.workOrderNumber" disabled placeholder="异常工单号" clearable /> + </el-form-item> + <!-- 必填(提货环节可以不填写运单号) --> + <!-- <el-form-item label="运单号" v-if="groundlineType != 1"> + <el-input v-model="Indexform.waybillNumber" placeholder="请输入运单号" clearable /> + </el-form-item> --> + + <!-- <el-form-item label="少货件数" v-if="StateType || SelectType == 2"> + <div class="moneyNum"> + <el-input + @change="ShortageTtems" + v-model="Indexform.number" + placeholder="请输入少货件数" + clearable + /> + <div class="el_btn" @click="moneyBtnA"><span>编辑</span></div> + </div> + </el-form-item> --> + + <!-- <el-form-item label="窜货件数" v-if="StateType || SelectType == 3"> + <div class="moneyNum"> + <el-input + @change="fleeingTtems" + v-model="Indexform.number" + placeholder="请输入窜货件数" + clearable + /> + <div class="el_btn" @click="moneyBtnB"><span>编辑</span></div> + </div> + </el-form-item> --> + + <!-- <el-form-item + label="包条码" + v-if="SelectType == 1 || SelectType == 2 || SelectType == 3 || StateType" + > + <el-input + v-model="Indexform.packageCode" + placeholder="请输入包条码,多个用逗号隔开" + clearable + /> + </el-form-item> --> + + <!-- 必填 --> + <!-- <el-form-item label="订单自编号"> + <el-input v-model="Indexform.orderCode" placeholder="请输入订单自编号" clearable /> + </el-form-item> --> + + <el-form-item + label="车次号" + v-if=" + groundlineSet || + groundlineType == 1 || + groundlineType == 3 || + groundlineType == 4 || + groundlineType == 8 || + groundlineType == 5 || + groundlineType == 7 || + groundlineType == 8 + " + > + <el-input + v-model="Indexform.trainNumber" + placeholder="请输入车次号(干线卸车环节)" + clearable + /> + </el-form-item> + <!-- 必填 --> + <el-form-item label="一级品"> + <el-input v-model="Indexform.first" placeholder="请输入一级品类" clearable /> + </el-form-item> + <!-- 必填 --> + <el-form-item label="二级品"> + <el-input v-model="Indexform.secondary" placeholder="请输入二级品类" clearable /> + </el-form-item> + + <el-form-item label="车辆路线" v-if="groundlineSet || groundlineType == 3"> + <el-input + v-model="Indexform.vehicleRoute" + placeholder="请输入车辆路线车次号(通过车次号自动带出车辆路线)" + clearable + /> + </el-form-item> + + <el-form-item label="发货时间"> + <el-date-picker + v-model="Indexform.deliverGoodsTime" + type="datetime" + format="YYYY-MM-DD HH:mm:ss" + value-format="YYYY-MM-DD HH:mm:ss" + placeholder="请选择发货时间" + /> + </el-form-item> + + <el-form-item + label="发现时间" + v-if=" + groundlineSet || + groundlineType == 2 || + groundlineType == 3 || + groundlineType == 4 || + groundlineType == 8 || + groundlineType == 5 || + groundlineType == 7 || + groundlineType == 8 + " + > + <el-date-picker + v-model="Indexform.discoveryTime" + type="datetime" + format="YYYY-MM-DD HH:mm:ss" + value-format="YYYY-MM-DD HH:mm:ss" + placeholder="请选择发现时间" + /> + </el-form-item> + + <el-form-item + label="配送时间" + v-if=" + groundlineSet || + groundlineType == 3 || + groundlineType == 4 || + groundlineType == 8 || + groundlineType == 5 || + groundlineType == 7 || + groundlineType == 8 + " + > + <el-date-picker + v-model="Indexform.deliveryTime" + type="datetime" + format="YYYY-MM-DD HH:mm:ss" + value-format="YYYY-MM-DD HH:mm:ss" + placeholder="请选择配送时间" + /> + </el-form-item> + + <el-form-item + label="入库时间" + v-if="groundlineSet || groundlineType == 2 || groundlineType == 4" + > + <el-date-picker + v-model="Indexform.warehousingTime" + type="datetime" + format="YYYY-MM-DD HH:mm:ss" + value-format="YYYY-MM-DD HH:mm:ss" + placeholder="请选择入库" + /> + </el-form-item> + <!-- 必填 --> + <el-form-item label="运单商场"> + <el-input v-model="Indexform.waybillMall" placeholder="请输入运单商场" clearable /> + </el-form-item> + + <el-form-item + label="配送司机" + v-if=" + groundlineSet || + groundlineType == 3 || + groundlineType == 4 || + groundlineType == 8 || + groundlineType == 5 || + groundlineType == 7 || + groundlineType == 8 + " + > + <el-select + v-model="Indexform.deliveryDriver" + filterable + default-first-option + :reserve-keyword="false" + placeholder="请输入配送司机" + > + <el-option + v-for="item in DeliveryDriver" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + <!-- 必填 --> + <el-form-item label="异常问题描述"> + <el-input v-model="Indexform.problemDescription" placeholder="请输入异常问题" clearable /> + </el-form-item> + </el-form> + + <!-- 必填 --> + <div class="el_clzr"> + <el-form-item class="investigate" label="调查经过"> + <el-input + v-model="Indexform.investigationPocess" + placeholder="请输入调查经过" + clearable + :rows="2" + type="textarea" + /> + </el-form-item> + + <el-form-item label="处理方"> + <el-select + v-model="Indexform.processor" + clearable + filterable + multiple + placeholder="请选择处理方" + > + <el-option + v-for="item in warehouseData" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </div> + + <el-tabs type="border-card"> + <el-tab-pane label="责任方信息"> + <div class="ResponsibilityBox"> + <!-- <div><el-button type="primary" @click="responsibleParty"> 添加信息 </el-button></div> --> + <div class="el_btbox" v-for="(item, index) in FangAddList" :key="index"> + <div class="leftbox"> + <div class="maxBox"> + <span class="title">责任方:</span> + + <!-- 提货环节 --> + + <el-select + v-model="item.businessName" + clearable + placeholder="请选提货择责任方" + v-if="groundlineType == 1" + > + <el-option + v-for="item in responsible" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + + <el-select + v-else + v-model="item.businessName" + filterable + placeholder="责任方" + @change="ResponsiblePartychange(item.businessName, index)" + > + <el-option + v-for="item in warehouseData" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </div> + + <div class="maxBox"> + <span class="title">责任人:</span> + <el-select + v-model="item.personResponsibleName" + clearable + filterable + placeholder="责任人" + > + <el-option + v-for="item in personResponsibleList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </div> + <div class="maxBox"> + <span class="title">占比:</span> + <el-input + v-model="item.responsibilityRatio" + placeholder="占比 " + clearable + :rows="2" + /> + </div> + + <div class="maxBox"> + <span class="title">说明:</span> + <el-input + v-model="item.responsibilityRatio" + placeholder="说明 " + clearable + :rows="2" + /> + </div> + </div> + <div class="el-btn"> + <!-- <el-button type="primary" @click="ResponsibilityRemoval(index)"> 移除 </el-button> --> + </div> + </div> + <div class="Proportion"> + <!-- <span class="title">公司占比:{{ companyProportion }}</span> --> + </div> + </div> + </el-tab-pane> + </el-tabs> + + <div class="Transport_damage_photos" v-if="SelectType == 1 || SelectType == 3 || StateType"> + <span class="title">{{ + SelectType == 1 ? '运损照片' : SelectType == 3 ? '窜货照片' : '照片' + }}</span> + <el-upload + v-model:file-list="Indexform.packList" + list-type="picture-card" + :on-preview="pictureList" + :on-remove="ImgListRemove" + :action="doubledCount" + :on-success="ImgSuccess" + :before-upload="beforeAvatarUpload" + :headers="headers" + multiple + drag + > + <el-icon><Plus /></el-icon> + </el-upload> + + <el-dialog v-model="dialogVisible"> + <img w-full :src="dialogImageUrl" alt="图片" /> + </el-dialog> + </div> + + <!-- <div class="dialog-footer"> + <el-button @click="Indexdialog = false">取消</el-button> + <el-button type="primary" @click="ConfirmForm"> 提交 </el-button> + </div> --> + </el-card> + + <div class="foot_btn"> + <el-button type="primary" @click="ConfirmForm">新增记录</el-button> + <el-button type="primary" @click="ConfirmForm">完结 </el-button> + <el-button type="primary" @click="ConfirmForm">打回 </el-button> + </div> + + <!-- 少货件数大于3 --> + <el-dialog + :show-close="false" + v-model="ShortageState" + title="少货件数" + width="40%" + @close="ShortageStateFun" + lock-scroll + draggable + > + <div class="ShortageStatenum" v-for="item in ShortageList"> + <span class="title">件数{{ item.number }}</span + ><el-input v-model="item.packageCode" placeholder="请输入包条码" /> + </div> + + <template #footer> + <span class="dialog-footer"> + <el-button @click="ShortageCancellation">取消</el-button> + <el-button type="primary" @click="ShortageState = false"> 确认信息 </el-button> + </span> + </template> + </el-dialog> + + <!-- 窜货件数大于3 --> + <el-dialog + :show-close="false" + v-model="fleeingState" + title="窜货件数" + width="40%" + @close="fleeingFun" + lock-scroll + draggable + > + <div class="ShortageStatenum" v-for="item in fleeingList"> + <span class="title">件数{{ item.number }}</span + ><el-input v-model="item.packageCode" placeholder="请输入包条码" /> + </div> + + <template #footer> + <span class="dialog-footer"> + <el-button @click="fleeingCancellation">取消</el-button> + <el-button type="primary" @click="ShortageState = false"> 确认信息 </el-button> + </span> + </template> + </el-dialog> + + <el-dialog v-model="dialogHistoricalPackage" title="查看历史包件" width="30%"> + <el-form-item label="历史包件选择"> + <el-select v-model="HistoricalPackageinput" clearable filterable placeholder="请选择包件"> + <el-option + v-for="item in HistoricalPackageList" + :key="item.value" + :label="item.workOrderNumber" + :value="item.workOrderId" + /> + </el-select> + <el-button @click="ViewPackageDetails(HistoricalPackageinput)">查看详情</el-button> + </el-form-item> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogHistoricalPackage = false">取消</el-button> + <el-button type="primary" @click="HistoricalPackage(HistoricalPackageinput)"> + 确定选择 + </el-button> + </span> + </template> + </el-dialog> + </template> + + <script setup> + import { ElMessage } from 'element-plus'; + import { ElMessageBox } from 'element-plus'; + import { useRouter, useRoute } from 'vue-router'; + import { getDictionaryBiz } from '@/api/system/dict'; //字典 + import { getDetailWarehouse, getDeptWarehouse } from '@/api/basicdata/basicdataWarehouse'; //处理方 + import { + $_getList, + $_submit, + $_getDetail, + $_remove, + $_getBusinessDepartmentUser, + $_getAbnormalPackage, + } from '@/api/aftersales/aftersalesWorkOrder'; + import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue'; + import { getToken } from '@/utils/auth'; + const $router = useRouter(); + const $route = useRoute(); + const Indexform = ref({ + packList: [ + { + name: 'food.jpeg', + url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100', + }, + { + name: 'food.jpeg', + url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100', + }, + ], + decreaseImageEntityList: [], //处理好的图片数据 + }); //首页新增表单 + const IndexException = ref([]); //异常类型下拉选择 + const DiscoveringNodes = ref([]); //发现节点下拉选择 + const warehouseData = ref([]); //处理方 + const SelectType = ref(null); //类型 + const StateType = ref(true); //类型 + const HistoricalPackageinput = ref(''); //历史包件选择 + const dialogImageUrl = ref(null); //图片 + const dialogVisible = ref(null); //图片 + const groundlineSet = ref(true); //干线条件都满足 + const groundlineType = ref(null); //干线状态 + const ShortageState = ref(false); //少货件数弹窗状态 + const fleeingState = ref(false); //窜货件数弹窗 + const ShortageList = ref([]); //少货件数 + const fleeingList = ref([]); //窜货件数 + const valueStrictly = ref(); + const routerID = ref(null); //路由参数ID + const routerState = ref(''); //路由状态 + const personResponsibleList = ref([]); //责任人列表 + const companyProportion = ref(0); //公司占比 + const identifying = ref(1); //订单,零担状态 + const dialogHistoricalPackage = ref(false); //历史包件弹窗 + const HistoricalPackageList = ref([]); //历史包件数组 + const HistorIndex = ref(0); //历史包件索引 + const PackageInfo = ref([ + //包件信息 + { packageCode: '', orderCode: '', waybillNumber: '' }, + ]); + // 责任方列表 + const FangAddList = ref([{ businessName: '', personResponsibleName: '', responsibilityRatio: '' }]); + // 提货责任方 + const responsible = ref([ + { + value: '1', + label: '工厂', + }, + { + value: '2', + label: '外包搬运', + }, + { + value: '3', + label: '物流', + }, + ]); + + const DeliveryDriver = ref([ + { + value: '0', + label: '兰溪', + }, + { + value: '1', + label: '李华', + }, + { + value: '2', + label: '唐飞', + }, + ]); + // 图片列表 + const fileList = ref([]); + // 字典公共函数 + function updateDictionary(targetArray, dictionaryType) { + getDictionaryBiz(dictionaryType).then(res => { + console.log(res, '字典'); + res.data.data.forEach(item => { + targetArray.push({ + value: item.dictKey, + label: item.dictValue, + }); + }); + }); + } + // 图片上传必须携带TOKEN + const headers = computed(() => { + return { 'Blade-Auth': 'Bearer ' + getToken() }; + }); + // 图片上传接口 + const doubledCount = computed(() => { + return '/api/blade-resource/oss/endpoint/put-file'; + }); + // 图片上传接口 + + // 图片上传成功回调函数 + const ImgSuccess = (response, uploadFile) => { + if (response.success === true) { + console.log(response); + Indexform.value['packList'].push({ + name: response.data.originalName, + url: response.data.link, + }); + console.log(Indexform.value['packList'], '图片列表'); + } + }; + + // 上传图片规则 + const beforeAvatarUpload = rawFile => { + if (rawFile.type !== 'image/png') { + ElMessage.error('图片格式只能为image/png!'); + return false; + } else if (rawFile.size / 1024 / 1024 > 2) { + ElMessage.error('图片大小不能大于2MB!'); + return false; + } + return true; + }; + // 点击图片列表回调 + const pictureList = val => { + console.log(val, '图片列表'); + }; + // 点击图片移除 + const ImgListRemove = val => { + console.log(val, '移除图片'); + }; + // 处理方和责任方获取数据 + const handle = () => { + getDeptWarehouse().then(res => { + res.data.data.forEach(item => { + warehouseData.value.push({ + value: item.id, + label: item.name, + }); + }); + }); + }; + + // 获取当前责任方的责任人 + const ResponsiblePartychange = (val, index) => { + FangAddList.value[index].personResponsibleName = null; //清空当前选择的责任人 + $_getBusinessDepartmentUser({ + warehouseId: val, + }).then(res => { + console.log(res, '获取责任人列表'); + personResponsibleList.value = res.data.data; + }); + }; + const onLoad = () => { + console.log($route.query.id, '页面初始化'); + updateDictionary(IndexException.value, 'pc_work_order'); //异常类型 + updateDictionary(DiscoveringNodes.value, 'pc_discovery_node'); //发现环节 + handle(); //处理方和责任方信息 + }; + onLoad(); //初始化程序 + // 异常类型事件 + const abnormalChange = val => { + console.log(val, '异常事件类型'); + console.log(StateType.value); + StateType.value = false; + if (val == 1 || val == 2 || val == 3) { + SelectType.value = val; + } else { + StateType.value = true; + } + // 运损无数据默认0 + if (val == 1) { + Indexform.value.packageCode = 0; + } else { + Indexform.value.packageCode = null; + } + }; + + // 发现节点事件 + const DiscoveringNodesChange = val => { + groundlineSet.value = false; //干线条件都不满足 + if (val == 1 || val == 2 || val == 3 || val == 4 || val == 5 || val == 8 || val == 7) { + groundlineType.value = val; //干线状态 + console.log(val); + } else { + groundlineSet.value = true; //展示所有搜索框 + } + }; + + // 照片 + const handleRemove = (uploadFile, uploadFiles) => { + console.log(uploadFile, uploadFiles); + }; + + const handlePictureCardPreview = uploadFile => { + dialogImageUrl.value = uploadFile.url; + dialogVisible.value = true; + }; + + // 添加包件 + const AddPackage = () => { + PackageInfo.value.push({ packageCode: '', orderCode: '', waybillNumber: '' }); + }; + // 包件移除 + const PackagRemoval = val => { + PackageInfo.value.splice(val, 1); //移除当前点击的按钮 + }; + // 责任方添加 + const responsibleParty = () => { + FangAddList.value.push({ businessName: '', personResponsibleName: '', responsibilityRatio: '' }); + }; + // 责任移除 + const ResponsibilityRemoval = val => { + FangAddList.value.splice(val, 1); //移除当前点击的按钮 + }; + // 顶部标签切换 + const TopChange = val => { + console.log(val); + if (val == 0) { + identifying.value = 1; + } else { + identifying.value = 2; + } + }; + + //表单提交 + const ConfirmForm = () => { + // 图片类型:10运损,20窜货 + // decreaseImageEntityList:[ + // {imageType:10,imageName:'图片名称',imagePath:'图片路径'}, + // {imageType:10,imageName:'图片名称',imagePath:'图片路径'}, + // ] + console.log(Indexform.value['packList'], '图片列表'); + // 处理图片(当类型为货损或为窜货才执行下面的东西) + if (SelectType.value == 1 || SelectType.value == 3) { + if (Indexform.value['packList']) { + Indexform.value['packList'].forEach(item => { + Indexform.value['decreaseImageEntityList'].push({ + imageType: SelectType.value == 1 ? 10 : SelectType.value == 3 ? 20 : '', + imageName: item.name, + imagePath: item.url, + }); + }); + } + } + + console.log(Indexform.value['decreaseImageEntityList'], '处理好的图片'); + //司机信息处理 + if (Indexform.value.deliveryDriver) { + Indexform.value.deliveryDriver = DeliveryDriver.value.find( + item => item.value == Indexform.value.deliveryDriver + ).label; + } + + console.log(Indexform.value.deliveryDriver); // 输出李华 + let processorEntityList = []; + + //处理方信息处理 + if (Indexform.value.processor.length) { + Indexform.value.processor.forEach(item => { + let found = warehouseData.value.find(element => element.value == item.toString()); + processorEntityList.push({ + businessName: found ? found.label : '', + businessId: item, + conditions: 1, + typesOf: 2, + }); + }); + } + + // 提货责任方 + // if (Indexform.value.businessMame) { + // const found = responsible.value.find(item => item.value === Indexform.value.businessMame); + // if (found) { + // processorEntityList.push({ + // businessName: found.label, + // businessId: found.id, + // conditions: 1, + // typesOf: 1, + // }); + // } + // } + // 提货责任方 + + console.log(Indexform.value.businessMame, '提货责任方'); + let DataSubmit = { + personResponsibleDTO: [], + packageEntityList: [], ////包件信息 + ...Indexform.value, + }; //解构表单参数 + DataSubmit.processorEntityList = processorEntityList; + DataSubmit.decreaseImageEntityList = JSON.parse( + JSON.stringify(Indexform.value['decreaseImageEntityList']) + ); + + // 包件信息 + // packageEntityList + + DataSubmit['packageEntityList'].push({ + workOrderId: Indexform.workOrderNumber, //异常ID + number: PackageInfo.value.length, //数量 + packageCode: PackageInfo.value.map(item => item.packageCode).join(','), //包件码 + warehouseId: '', //仓库ID + packageImage: Indexform.value['packList'].map(item => item.url).join(','), //包件图片路径 + waybillNumber: PackageInfo.value.map(item => item.waybillNumber).join(','), //运单号 + orderCode: PackageInfo.value.map(item => item.orderCode).join(','), //订单自编码 + }); + (DataSubmit.orderCode = PackageInfo.value.map(item => item.orderCode).join(',')), //订单自编码 + // 总件数 + (Indexform.value.number = PackageInfo.value.length); + console.log(DataSubmit['packageEntityList'], '包件信息'); + // 调查经过 + DataSubmit.surveyRecordDTO = { + content: Indexform.value.investigationPocess, + workOrderId: Indexform.value.workOrderNumber, + }; + console.log(DataSubmit.surveyRecordDTO, '调查经过'); + // 新责任方处理 + // FangAddList.value + + // 责任方信息 + FangAddList.value.forEach(item => { + DataSubmit['personResponsibleDTO'].push({ + businessName: item.businessName, //责任方名称 + businessId: warehouseData.value.find(obj => obj.label == item.businessName)?.value || null, + wordOrderId: Indexform.value.workOrderNumber, //异常工单ID + personResponsibleId: + personResponsibleList.value.find(obj => obj.id == item.personResponsibleName)?.id || null, //责任人ID personResponsibleList + personResponsibleName: + personResponsibleList.value.find(obj => obj.id == item.personResponsibleName)?.name || null, //责任人名称 + responsibilityRatio: item.responsibilityRatio, //责任比例 + }); + }); + let proportion = 0; //责任比例之和 + DataSubmit['personResponsibleDTO'].forEach(item => { + proportion += Number(item.responsibilityRatio); + }); + console.log(proportion, '责任比例之和'); + companyProportion.value = 100 - proportion; + DataSubmit.companyProportion = companyProportion.value; //公司占比 + console.log(DataSubmit.companyProportion, '公司占比'); + console.log(DataSubmit['personResponsibleDTO'], '新责任方处理的数据'); + //console.log(Indexform.value.duty.length); + //责任方信息处理 + if (FangAddList.value.length) { + console.log(warehouseData.value, 'warehouseData.value'); + FangAddList.value.forEach(item => { + console.log(item, 'item'); + processorEntityList.push({ + businessName: + warehouseData.value.find(obj => obj.value == item.businessName)?.label || null, + businessId: item.businessName, + conditions: 1, + typesOf: 1, + }); + }); + } + DataSubmit.identifying = identifying.value; //1订单2零担3库存品 + + console.log(processorEntityList, '老责任方处理好的数据'); + + // //责任方信息处理 + // if (Indexform.value.duty.length) { + // Indexform.value.forEach(item => { + // let found = warehouseData.value.find(element => element.value == item.toString()); + // processorEntityList.push({ + // businessName: found ? found.label : '', + // businessId: item, + // conditions: 1, + // typesOf: 1, + // }); + // }); + // } + + delete DataSubmit.duty, //移除多余字段 + delete DataSubmit.packList; //移除图片原始字段 + delete DataSubmit.processor; //移除多余字段 + console.log(DataSubmit, '处理好的数据'); + //提交表单信息stringify + $_submit(DataSubmit).then(res => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + Indexform.value = {}; //重置表单 + $router.push('/aftersales/aftersalesWorkOrder'); //添加成功跳转到列表 + } + }); + }; + + // 少货件数对应事件 + const ShortageTtems = val => { + ShortageList.value = []; //进入之前重置参数 + const pattern = /\s+/g; + const result = val.replace(pattern, ''); + console.log(result); // 输出 "33" + Indexform.value.number = result; + if (Indexform.value.number > 1) { + ShortageState.value = true; //数量大于1,开启弹窗输入 + } + for (let i = 0; i < val; i++) { + ShortageList.value.push({ + number: i + 1, //件数 + packageCode: null, //输入框 + }); + } + }; + // 少货关闭回调 + const ShortageStateFun = () => { + ShortageList.value.forEach(item => { + if (item.packageCode == null) { + Indexform.value.number = null; + } + }); + }; + // 少货按钮取消 + const ShortageCancellation = () => { + Indexform.value.number = null; //少货件数 + ShortageList.value = []; //进入之前重置参数 + ShortageState.value = false; //关闭弹窗 + }; + // 窜货关闭回调 + const fleeingFun = () => { + fleeingList.value.forEach(item => { + if (item.packageCode == null) { + Indexform.value.number = null; + } + }); + }; + // 窜货取消事件 + const fleeingCancellation = () => { + Indexform.value.number = null; //少货件数 + fleeingList.value = []; //进入之前重置参数 + fleeingState.value = false; //关闭弹窗 + }; + // 窜货输入框 + const fleeingTtems = val => { + fleeingList.value = []; //进入之前重置参数 + const pattern = /\s+/g; + const result = val.replace(pattern, ''); + console.log(result); // 输出 "33" + Indexform.value.number = result; + if (Indexform.value.number > 1) { + fleeingState.value = true; //数量大于1,开启弹窗输入 + } + for (let i = 0; i < val; i++) { + fleeingList.value.push({ + number: i + 1, //件数 + packageCode: null, //输入框 + }); + } + }; + // 少货编辑 + const moneyBtnA = () => { + if (!Indexform.value.number) { + ElMessage({ + message: '请输入少货数量', + type: 'warning', + }); + return; + } + ShortageState.value = true; //开启弹窗输入 + }; + // 窜货编辑 + const moneyBtnB = () => { + if (!Indexform.value.number) { + ElMessage({ + message: '请输入窜货数量', + type: 'warning', + }); + return; + } + fleeingState.value = true; //开启弹窗输入 + }; + // 查询包件信息自动回显 + const ChangePackageInfo = (val, index) => { + let data = { + packageCode: val, + }; + $_getAbnormalPackage(data).then(res => { + console.log(res, '包件信息'); + console.log(res.data.data, '包件信息'); + + const packageData = res.data.data[0]; + PackageInfo.value[index].orderCode = packageData.orderCode; //订单自编码 + PackageInfo.value[index].waybillNumber = packageData.waybillNumber; //运单号 + PackageInfo.value[index].orderId = packageData.orderId; //运单号 + PackageInfo.value[index].state = false; //状态 + + if (res.data.data.length > 1) { + HistoricalPackageList.value = res.data.data; + PackageInfo.value[index].state = true; //状态 + } + // packageCode; //包件码 + // //订单自编码 + // orderCode: orderId; //运单号 + // workOrderId; //工单id + // workOrderNumber; //工单名称 + console.log(PackageInfo.value, '处理好的参数'); + }); + }; + + // 查看历史包件 + const historicalPackages = val => { + dialogHistoricalPackage.value = true; //打开历史包件弹窗 + HistorIndex.value = val; + console.log(val); + }; + // 历史包件确定选择 + const HistoricalPackage = val => { + let info = HistoricalPackageList.value.find(obj => obj.workOrderId == val); + PackageInfo.value[HistorIndex.value].orderCode = info.orderCode; //订单自编码 + PackageInfo.value[HistorIndex.value].waybillNumber = info.waybillNumber; //运单号 + PackageInfo.value[HistorIndex.value].orderId = info.orderId; //运单号 + dialogHistoricalPackage.value = false; //关闭历史包件弹窗 + }; + // 历史包件里面的查看 + const ViewPackageDetails = val => { + if(!val){ + ElMessage({ + message: '请选择要查看的数据', + type: 'warning', + }) + return + } + console.log(val); + let info = HistoricalPackageList.value.find(obj => obj.workOrderId == val); + console.log(info,'筛选的值'); + $router.push({ + path: '/aftersales/aftersalesWorkOrderInfo', + query: { + id: info.workOrderId, + name: info.workOrderId + '-信息查看', + }, + }); + dialogHistoricalPackage.value = false; //打开历史包件弹窗 + }; + </script> + + <style scoped lang="scss"> + .IndexFrom { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + + .el-form-item { + height: 46px; + display: flex; + align-items: center; + margin: 0; + margin-bottom: 18px; + flex: 1 0 30%; + :deep(.el-form-item__label) { + width: 100px !important; + justify-content: flex-start; + } + } + :deep(.el-form-item__content) { + height: 100%; + width: 70% !important; + flex: none; + .el-input { + height: 100% !important; + display: flex; + align-items: center; + } + } + .el-input__wrapper { + height: 32px !important; + } + :deep(.el-input) { + width: 100% !important; + } + :deep(.el-input__wrapper) { + height: 30px !important; + } + :deep(.el-select) { + width: 100%; + } + :deep(.el-form-item__label) { + margin-left: 20px; + } + } + .el_clzr { + margin-top: 40px; + + :deep(.el-select) { + width: 100%; + } + :deep(.el-input) { + height: 38px; + } + :deep(.el-form-item__label) { + margin-left: 20px; + font-size: 14px; + width: 100px !important; + } + .el-form-item { + margin: 0; + margin-bottom: 34px; + } + :deep(.el-input__wrapper) { + height: 35px !important; + } + :deep(.el-form-item__content) { + height: 100%; + width: 90% !important; + flex: none; + .el-input { + height: 100% !important; + display: flex; + align-items: center; + } + } + } + .Transport_damage_photos { + display: flex; + padding: 0 15px; + margin-top: 20px; + .title { + width: 100px; + display: block; + margin-bottom: 10px; + font-size: 14px; + } + } + .dialog-footer { + width: 100%; + display: flex; + justify-content: flex-end; + padding: 0 10px; + box-sizing: border-box; + padding-right: 36px; + } + .investigate { + :deep(.el-form-item__content) { + width: 90% !important; + box-sizing: border-box; + } + } + .ShortageStatenum { + display: flex; + align-items: center; + margin-bottom: 10px; + .title { + width: 80px; + } + .remove { + width: 47px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + color: #ff0000; + } + } + .moneyNum { + display: flex; + flex: 1; + .el_btn { + width: 50px; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #ccc; + margin-left: 3px; + border-radius: 4px; + cursor: pointer; + } + } + .ResponsibilityBox { + width: 100%; + display: flex; + flex-direction: column; + .leftbox { + width: 80%; + display: flex; + justify-content: space-between; + } + .maxBox { + display: flex; + align-items: center; + width: 30%; + .title { + width: 120px; + font-size: 14px; + color: #606266; + } + .el-select { + width: 100%; + } + } + .el-btn { + margin-left: 5%; + border: none; + } + .el_btbox { + display: flex; + margin-top: 10px; + } + } + .ResponsibilityBoxS { + width: 100%; + display: flex; + flex-direction: column; + margin-bottom: 10px; + .leftbox { + width: 80%; + display: flex; + justify-content: space-between; + } + .maxBox { + display: flex; + align-items: center; + width: 30%; + .title { + width: 140px; + color: #606266; + font-size: 14px; + } + .el-select { + width: 100%; + } + } + .el-btn { + margin-left: 5%; + border: none; + } + .el_btbox { + display: flex; + margin-top: 10px; + } + } + .PackageInformation { + margin-bottom: 10px; + } + .NumTotal { + width: 30%; + margin-top: 16px; + display: flex; + align-items: center; + span { + width: 120px; + font-size: 14px; + } + } + .Proportion { + margin-top: 16px; + .title { + font-size: 14px; + color: #606266; + } + } + + :deep(.is-active) { + border-bottom: 1px solid #e4e7ed !important; + } + .topClass { + :deep(.el-tabs__content) { + padding: 0; + } + } + .foot_btn { + position: fixed; + bottom: 0; + left: 50%; + transform: translate(0, -50%); + width: 100%; + height: 40px; + background-color: #ffffff; + border-top: 1px solid #fff; + box-shadow: 3px -1px 1px #ccc; + display: flex; + align-items: center; + padding-left: 10px; + } + :deep(.el-card__body) { + margin-bottom: 50px; + } + </style> + \ No newline at end of file diff --git a/src/views/aftersales/aftersalesWorkOrderend.vue b/src/views/aftersales/aftersalesWorkOrderend.vue index 6fef7fca..75ad7851 100644 --- a/src/views/aftersales/aftersalesWorkOrderend.vue +++ b/src/views/aftersales/aftersalesWorkOrderend.vue @@ -22,9 +22,32 @@ <el-input v-model="endFrom.orderCode" placeholder="请输入订单自自编号" /> </el-form-item> - <el-form-item label="包条码"> + <!-- <el-form-item label="包条码"> <el-input v-model="endFrom.orderPackageCode" placeholder="请输入包条码" /> - </el-form-item> + </el-form-item> --> + + + <!-- <div class="selector"> --> + <div class="el-form-item"> + <span class="el-form-item__label">运损节点</span> + <el-select + v-model="endFrom.transportloss" + filterable + default-first-option + :reserve-keyword="false" + placeholder="运损发现节点" + @change="TransportChange" + > + <el-option + v-for="item in TransportlossList" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </div> + <!-- </div> --> + <el-form-item label="品类"> <el-input v-model="endFrom.name" placeholder="请输入品类" /> @@ -98,26 +121,7 @@ </el-form-item> </div> --> - <div class="selector"> - <div class="el-form-item"> - <span class="el-form-item__label">运损节点</span> - <el-select - v-model="endFrom.transportloss" - filterable - default-first-option - :reserve-keyword="false" - placeholder="运损发现节点" - @change="TransportChange" - > - <el-option - v-for="item in TransportlossList" - :key="item.value" - :label="item.label" - :value="item.value" - /> - </el-select> - </div> - </div> + </div> <!-- <div class="selector"> <div class="el-form-item selector"> @@ -140,6 +144,48 @@ </div> </div> --> + <el-tabs type="border-card" class="PackageInformation"> + <el-tab-pane label="包件信息"> + <div class="ResponsibilityBoxS"> + <div><el-button type="primary" @click="AddPackage"> 添加信息 </el-button></div> + <div class="el_btbox" v-for="(item, index) in PackageInfo" :key="index"> + <div class="leftbox"> + <div class="maxBox"> + <span class="title">包条码:</span> + <el-input + v-model="item.packageCode" + placeholder="请输入包条码" + clearable + :rows="2" + @change="ChangePackageInfo(item.packageCode, index)" + /> + </div> + + <div class="maxBox"> + <span class="title">订单自编码:</span> + <el-input v-model="item.orderCode" placeholder="请输入订单自编号" clearable /> + </div> + + <div class="maxBox"> + <span class="title">运单号:</span> + <el-input v-model="item.waybillNumber" placeholder="请输入运单号" clearable /> + </div> + </div> + + <div class="el-btn"> + <el-button v-if="item.state" type="primary" @click="historicalPackages(index)"> + 查看历史包件 + </el-button> + <el-button type="primary" @click="PackagRemoval(index)"> 移除 </el-button> + </div> + </div> + <div class="NumTotal"> + <span>总件数:{{ endFrom.number }}</span> + </div> + </div> + </el-tab-pane> + </el-tabs> + <el-tabs type="border-card" style="width: 100%"> <el-tab-pane label="责任方选择"> <div class="ResponsibilityBox"> @@ -614,6 +660,30 @@ </span> </template> </el-dialog> + + + <el-dialog v-model="dialogHistoricalPackage" title="查看历史包件" width="30%"> + <el-form-item label="历史包件选择"> + <el-select v-model="HistoricalPackageinput" clearable filterable placeholder="请选择包件"> + <el-option + v-for="item in HistoricalPackageList" + :key="item.value" + :label="item.workOrderNumber" + :value="item.workOrderId" + /> + </el-select> + <el-button @click="ViewPackageDetails(HistoricalPackageinput)">查看详情</el-button> + </el-form-item> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogHistoricalPackage = false">取消</el-button> + <el-button type="primary" @click="HistoricalPackage(HistoricalPackageinput)"> + 确定选择 + </el-button> + </span> + </template> + </el-dialog> + </el-card> </template> @@ -630,6 +700,7 @@ import { $_savaSurveyRecord, $_addProcessingResults, $_getSurveyRecord, + $_getAbnormalPackage, } from '@/api/aftersales/aftersalesWorkOrder'; import { columnList, recordList } from '@/option/aftersales/vueTvemp.js'; import { getToken } from '@/utils/auth'; @@ -656,6 +727,13 @@ const Msgtextarea = ref(''); //回复框消息 const msgState = ref(0); //回复消息状态 const Msgloading = ref(false); //消息回复的加载效果 const companyProportion = ref(0); //公司占比 +const HistoricalPackageList = ref([]); //历史包件数组 +const dialogHistoricalPackage=ref(false);//包件弹窗 +const HistoricalPackageinput=ref('');//历史包件选择 +const PackageInfo = ref([ + //包件信息 + { packageCode: '', orderCode: '', waybillNumber: '' }, +]); // 提货责任方 const responsible = ref([ { @@ -1184,6 +1262,47 @@ const amountMoney = () => { console.log('收款总计金额', TotalamountReceived.value); }; +// 添加包件 +const AddPackage = () => { + PackageInfo.value.push({ packageCode: '', orderCode: '', waybillNumber: '' }); +}; +// 包件移除 +const PackagRemoval = val => { + PackageInfo.value.splice(val, 1); //移除当前点击的按钮 +}; +// 查看历史包件 +const historicalPackages = val => { + dialogHistoricalPackage.value = true; //打开历史包件弹窗 + HistorIndex.value = val; + console.log(val); +}; +// 查询包件信息自动回显 +const ChangePackageInfo = (val, index) => { + let data = { + packageCode: val, + }; + $_getAbnormalPackage(data).then(res => { + console.log(res, '包件信息'); + console.log(res.data.data, '包件信息'); + + const packageData = res.data.data[0]; + PackageInfo.value[index].orderCode = packageData.orderCode; //订单自编码 + PackageInfo.value[index].waybillNumber = packageData.waybillNumber; //运单号 + PackageInfo.value[index].orderId = packageData.orderId; //运单号 + PackageInfo.value[index].state = false; //状态 + + if (res.data.data.length > 1) { + HistoricalPackageList.value = res.data.data; + PackageInfo.value[index].state = true; //状态 + } + // packageCode; //包件码 + // //订单自编码 + // orderCode: orderId; //运单号 + // workOrderId; //工单id + // workOrderNumber; //工单名称 + console.log(PackageInfo.value, '处理好的参数'); + }); +}; // 新视频预览 const AddVideoPreview = val => { VideoPreviewStatus.value = true; //开启视频查看弹窗 @@ -1448,6 +1567,29 @@ const replyMessage = () => { } }); }; + +// 历史包件里面的查看 +const ViewPackageDetails = val => { + if(!val){ + ElMessage({ + message: '请选择要查看的数据', + type: 'warning', + }) + return + } + console.log(val); + let info = HistoricalPackageList.value.find(obj => obj.workOrderId == val); + console.log(info,'筛选的值'); + $router.push({ + path: '/aftersales/aftersalesWorkOrderInfo', + query: { + id: info.workOrderId, + name: info.workOrderId + '-信息查看', + routerState: 'view', + }, + }); + dialogHistoricalPackage.value = false; //打开历史包件弹窗 +}; </script> <style scoped lang="scss"> @@ -1480,6 +1622,9 @@ const replyMessage = () => { margin: 0; margin-bottom: 0.9375vw; flex: 1 0 30%; + :deep(.el-select){ + width: 100%; + } } :deep(.el-form-item__label) { width: 100px !important; @@ -1854,4 +1999,51 @@ const replyMessage = () => { display: flex; justify-content: flex-end; } +.PackageInformation { + width: 100%; + margin-bottom: 10px; +} +.ResponsibilityBoxS { + width: 100%; + display: flex; + flex-direction: column; + margin-bottom: 10px; + .leftbox { + width: 80%; + display: flex; + justify-content: space-between; + } + .maxBox { + display: flex; + align-items: center; + width: 30%; + .title { + width: 140px; + color: #606266; + font-size: 14px; + } + .el-select { + width: 100%; + } + } + .el-btn { + margin-left: 5%; + border: none; + display: flex; + } + .el_btbox { + display: flex; + margin-top: 10px; + } +} +.NumTotal { + width: 30%; + margin-top: 16px; + display: flex; + align-items: center; + span { + width: 120px; + font-size: 14px; + } +} </style> diff --git a/src/views/basicdata/warehouse/goodsShelf/basicdataGoodsShelfView.vue b/src/views/basicdata/warehouse/goodsShelf/basicdataGoodsShelfView.vue index a6c24102..aab34e96 100644 --- a/src/views/basicdata/warehouse/goodsShelf/basicdataGoodsShelfView.vue +++ b/src/views/basicdata/warehouse/goodsShelf/basicdataGoodsShelfView.vue @@ -647,11 +647,11 @@ onMounted(() => { initconfig(); initnumber(); }); -async function initnumber() { - let res = await Alloclocationsnub(); - console.log(res.data.data); - details.countnumber = res.data.data; -} +// async function initnumber() { +// let res = await Alloclocationsnub(); +// console.log(res.data.data); +// details.countnumber = res.data.data; +// } // watchEffect(()=>{ // if(details.isshowupt){ // details.inputtxts='' @@ -666,8 +666,10 @@ async function initconfig() { let res = await getstoreCargo(); details.arrlist = res.data.data; console.log(details.arrlist, '仓库列表'); + if (details.arrlist.length > 0) { $_locationsnub({ warehouseId: details.arrlist[0].id }).then(res => { + details.countnumber =res.data.data console.log('初始化仓库参数成功', res); }); } @@ -849,6 +851,7 @@ const checkcso = val => { console.log(details.arrlist[val].id, '选择的ID-====='); console.log(val, '货位接受参数'); $_locationsnub({ warehouseId: details.arrlist[val].id }).then(res => { + details.countnumber =res.data.data console.log('切换请求成功', res); }); if (details.arrlist[details.checkselect]?.warehouseGoodsAreaVOList.length > 0) { diff --git a/src/views/distribution/checkInventoryTask/createTask.vue b/src/views/distribution/checkInventoryTask/createTask.vue index d291648f..b205aa11 100644 --- a/src/views/distribution/checkInventoryTask/createTask.vue +++ b/src/views/distribution/checkInventoryTask/createTask.vue @@ -2462,17 +2462,17 @@ const InventorySubmit = () => { InventoryPopup.value = false; //关闭创建盘点任务弹窗 loading.value = true; //开启表格加载 console.log(SubData, '处理好的数据'); - // postAddtaskQuest(SubData).then(res => { - // onLoad(); //体积之后初始化页面 - // if ((res.data.code = 200)) { - // ElMessage({ - // message: res.data.msg, - // type: 'success', - // }); - // onLoad(); //体积之后初始化页面 - // } - // console.log(res, '盘点计划提交成功'); - // }); + postAddtaskQuest(SubData).then(res => { + + if ((res.data.code = 200)) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + onLoad(); //体积之后初始化页面 + } + console.log(res, '盘点计划提交成功'); + }); return; } @@ -2495,10 +2495,18 @@ const InventorySubmit = () => { SubData.startTime = formInventory.value.time[0]; console.log(SubData, '处理好要提交的数据'); InventoryPopup.value = false; //关闭创建盘点任务弹窗 - // postAddtaskQuest(SubData).then(res => { - // console.log(res, '盘点计划提交成功'); - // onLoad(); //体积之后初始化页面 - // }); + loading.value = true; //开启表格加载 + postAddtaskQuest(SubData).then(res => { + if ((res.data.code = 200)) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + onLoad(); //体积之后初始化页面 + } + console.log(res, '盘点计划提交成功'); + + }); }; // 顶部废弃按钮 const discard = () => { diff --git a/vite.config.js b/vite.config.js index eacdd94d..ae6eea31 100644 --- a/vite.config.js +++ b/vite.config.js @@ -25,7 +25,8 @@ export default ({ mode, command }) => { target: 'http://192.168.6.122:8777', // target: 'http://192.168.6.116:8777', - // tjj + // tjj : + // target:'http://192.168.10.25:13000', // sst // target: 'http://192.168.10.94:8888', // target: 'http://192.168.10.29:13000',