From d36c55fc4575c64a6fa5feadbc327bcd3b5d9b12 Mon Sep 17 00:00:00 2001 From: xzg <4727863@qq.com> Date: Tue, 16 Jan 2024 15:59:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=A6=E6=83=85=EF=BC=8C=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aftersales/aftersalesWorkOrderInfo.vue | 2974 +++++++++-------- .../aftersalesWorkOrderInfoEnxt.vue | 104 +- .../aftersalesWorkOrderInfoTemp.vue | 2974 ++++++++--------- .../aftersales/aftersalesWorkOrdermodify.vue | 823 +++-- 4 files changed, 3535 insertions(+), 3340 deletions(-) diff --git a/src/views/aftersales/aftersalesWorkOrderInfo.vue b/src/views/aftersales/aftersalesWorkOrderInfo.vue index 4be73b01..18557d7c 100644 --- a/src/views/aftersales/aftersalesWorkOrderInfo.vue +++ b/src/views/aftersales/aftersalesWorkOrderInfo.vue @@ -1,657 +1,917 @@ <template> - <el-card class="box-card" v-loading="Pageloading" element-loading-text="正在处理中..."> - <el-tabs type="border-card" class="PackageInformation"> - <el-tab-pane label="包件信息"> - <div class="ResponsibilityBoxS"> - <div class="el_btbox" v-for="(item, index) in PackageInfo" :key="index"> - <div class="leftbox"> - <div class="maxBox"> - <span class="title">包条码:</span> - <el-input - disabled - v-model="item.packageCode" - placeholder="请输入包条码" - clearable - :rows="2" - @change="ChangePackageInfo(item.packageCode, index)" - /> - </div> - - <div class="maxBox"> - <span class="title">订单自编码:</span> - <el-input - disabled - v-model="item.orderCode" - placeholder="请输入订单自编号" - clearable - /> - </div> - - <div class="maxBox"> - <span class="title">运单号:</span> - <el-input - disabled - v-model="item.waybillNumber" - placeholder="请输入运单号" - clearable - /> - </div> - <div class="maxBox"> - <span class="title">品牌:</span> - <el-input disabled v-model="item.brandName" placeholder="请输入品牌" clearable /> - </div> - </div> - </div> - <div class="NumTotal"> - <span>总件数:{{ PackageInfo.length }}</span> - </div> - </div> - </el-tab-pane> - </el-tabs> - <el-form disabled :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=" - 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="钉钉流程号"> - <el-input v-model="Indexform.processNumber" placeholder="请输入钉钉流程号" /> - </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-item label="调查经过"> - <el-input - disabled - v-model="Indexform.investigationProcess" - placeholder="请输入调查经过" - clearable - :rows="2" - type="textarea" - /> - </el-form-item> - - <el-form-item label="处理方"> - <el-select - v-model="Indexform.processor" - clearable - filterable - multiple - placeholder="请选择处理方" + <div class="content-max"> + <el-card class="box-card el_last"> + <div> + <el-tabs type="border-card" class="topClass"> + <el-tab-pane label="订单信息"></el-tab-pane> + <el-tab-pane label="零担信息"></el-tab-pane> + </el-tabs> + + <el-form + :model="Indexform" + label-width="100px" + class="IndexFrom" + ref="IndexForm" + :rules="rules" disabled > - <el-option - v-for="item in warehouseData" - :key="item.value" - :label="item.label" - :value="item.value" - /> - </el-select> - </el-form-item> - <el-form-item label="处理结果"> - <el-select - v-model="Indexform.result" - multiple - filterable - default-first-option - :reserve-keyword="false" - placeholder="请选择处理结果" - @change="changeProcessingResults" - disabled - > - <el-option - v-for="item in ProcessingResults" - :key="item.dictKey" - :label="item.dictValue" - :value="item.dictKey" - /> - </el-select> - </el-form-item> - <el-form-item> </el-form-item> - </el-form> - - <div class="ProcessingResults" v-if="ProcessingList.length"> - <div class="title">处理结果-理赔金额</div> - <div class="Listadmiration"> - <div class="name" v-for="(item, index) in ProcessingList" :key="index"> - <span>{{ item.name }}:</span> - <el-tooltip :content="item.input" placement="top"> - <el-input-number - v-model="item.input" - :min="item.min" - :max="item.max" - @change="TotalChange" + <el-form-item label="异常类型" class="el_inputTop"> + <el-select v-model="Indexform.workOrderType" clearable placeholder="选择工单异常类型"> + <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="发现节点" class="el_inputTop"> + <el-select v-model="Indexform.discoveryNode" clearable placeholder="选择发现节点"> + <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="异常工单号" class="el_inputTop el_Workordernumber"> + <el-input + v-model="Indexform.workOrderNumber" disabled + :placeholder=" + Indexform.workOrderNumber ? Indexform.workOrderNumber : '暂未生成工单号' + " + clearable /> - </el-tooltip> - <div class="Paymentname"> - {{ item.payment ? item.text : '支付方式' }} - </div> - <div class="el_PaymentUnit"> - <span>支付单位:</span> - <el-input v-model="item.paymentUnit" disabled placeholder="暂无支付单位" /> - </div> - <el-date-picker - disabled - v-model="item.compensationTime" - type="datetime" - format="YYYY-MM-DD" - value-format="YYYY-MM-DD HH:mm:ss" - placeholder="理赔支付时间" - /> - </div> - </div> - - <div class="el_tool"> - <span>总金额:{{ TotalClaimAmount }}</span> - </div> - </div> - <!-- 处理结果说明 --> - <el-form-item label="处理结果说明" class="el_resj"> - <el-input - v-model="Indexform.resultDescription" - placeholder="请输入处理结果说明" - clearable - :autosize="{ minRows: 3, maxRows: 4 }" - type="textarea" - disabled - /> - </el-form-item> - - <el-tabs type="border-card"> - <el-tab-pane label="内部责任划分"> - <div class="ResponsibilityBox"> - <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" - disabled - > - <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)" - disabled - > - <el-option - v-for="item in warehouseData" - :key="item.value" - :label="item.label" - :value="item.value" - /> - </el-select> + </el-form-item> + + <el-tabs type="border-card" class="PackageInformation"> + <el-tab-pane label="包件信息"> + <template #label> + <span class="custom-tabs-label"> + <el-icon><Box /></el-icon> + <span>包件信息</span> + </span> + </template> + <div class="ResponsibilityBoxS"> + <div class="el_btbox" v-for="(item, index) in PackageInfo" :key="index"> + <div class="leftbox"> + <div class="maxBox" v-if="identifying != '2'"> + <el-form-item label="包条码"> + <el-tooltip + :content="item.packageCode ? item.packageCode : '包条码'" + placement="top" + > + <el-input + v-model="item.packageCode" + placeholder="请输入包条码" + clearable + :rows="2" + @change="ChangePackageInfo(item.packageCode, index)" + /> + </el-tooltip> + </el-form-item> + </div> + + <div class="maxBox"> + <el-form-item label="运单号"> + <el-tooltip + :content="item.waybillNumber ? item.waybillNumber : '运单号'" + placement="top" + > + <el-input + v-model="item.waybillNumber" + placeholder="请输入运单号" + @change="ChangePackageInfo(item.packageCode, index)" + /> + </el-tooltip> + </el-form-item> + </div> + + <div class="maxBox"> + <el-form-item label="订单自编号"> + <el-tooltip + :content="item.orderCode ? item.orderCode : '订单自编号'" + placement="top" + > + <el-input + v-model="item.orderCode" + :disabled="identifying != '2'" + :placeholder=" + identifying != '2' ? '订单自编号(自动带出)' : '请输入订单自编号' + " + /> + </el-tooltip> + </el-form-item> + </div> + + <div class="maxBox brand"> + <el-form-item label="品牌"> + <el-tooltip + :content="item.brandName ? item.brandName : '品牌'" + placement="top" + > + <el-input + v-model="item.brandName" + :disabled="identifying != '2'" + :placeholder="identifying != '2' ? '品牌(自动带出)' : '请输入品牌'" + /> + </el-tooltip> + </el-form-item> + </div> + + <div class="maxBox" v-if="identifying != '1'"> + <el-form-item> </el-form-item> + </div> + </div> + </div> + <div class="NumTotal"> + <span>总件数:{{ NumberPackages }}</span> + </div> </div> + </el-tab-pane> + </el-tabs> + + <!-- 必填(提货环节可以不填写运单号) --> + <!-- 必填 --> + + <el-form-item + label="车次号" + v-if=" + groundlineType == 3 || + groundlineType == 5 || + groundlineType == 7 || + groundlineType == 6 + " + > + <el-input + v-model="Indexform.trainNumber" + placeholder="请输入车次号(干线卸车环节)" + clearable + /> + </el-form-item> - <div class="maxBox"> - <span class="title">责任人:</span> - <el-select - v-model="item.personResponsibleName" - clearable - filterable - placeholder="请选责任人" - disabled - > - <el-option - v-for="item in personResponsibleList" - :key="item.id" - :label="item.name" - :value="item.id" - /> - </el-select> + <el-form-item + label="配送时间" + v-if="groundlineType == 5 || groundlineType == 7 || groundlineType == 6" + > + <el-date-picker + v-model="Indexform.deliveryTime" + type="datetime" + format="YYYY-MM-DD" + value-format="YYYY-MM-DD" + placeholder="请选择配送时间" + /> + </el-form-item> + + <!-- 必填 --> + + <el-form-item + label="配送司机" + prop="deliveryDriver" + v-if="groundlineType == 5 || groundlineType == 7 || groundlineType == 6" + > + <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.driverName + '-' + item.trainNumber" + :value="item.id" + /> + </el-select> + </el-form-item> + + <el-form-item label="车辆路线" v-if="groundlineType == 3"> + <el-input v-model="Indexform.vehicleRoute" placeholder="请输入车辆路线" clearable /> + </el-form-item> + + <el-form-item label="发货时间" v-if="groundlineType == 2"> + <el-date-picker + v-model="Indexform.deliverGoodsTime" + type="datetime" + format="YYYY-MM-DD" + value-format="YYYY-MM-DD HH:mm:ss" + placeholder="请选择发货时间" + /> + </el-form-item> + + <el-form-item + label="发现时间" + v-if=" + groundlineType == 4 || + groundlineType == 5 || + groundlineType == 6 || + groundlineType == 7 + " + > + <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="一级品"> + <el-input v-model="Indexform.first" placeholder="请输入一级品类" /> + </el-form-item> + + <el-form-item label="二级品"> + <el-input v-model="Indexform.secondary" placeholder="请输入二级品类" /> + </el-form-item> + + <el-form-item label="入库时间" v-if="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="请输入运单商场" /> + </el-form-item> + + <el-form-item label="合作模式"> + <el-input + v-model="Indexform.typeServiceName" + disabled + :placeholder=" + Indexform.typeServiceName ? Indexform.typeServiceName : '暂未查询到合作模式' + " + clearable + /> + </el-form-item> + + <!-- <el-form-item label="钉钉流程号"> + <el-input v-model="Indexform.processNumber" placeholder="请输入钉钉流程号" /> + </el-form-item> --> + + <!-- 必填 --> + <!-- <el-form-item label="异常问题描述"> + <el-input v-model="Indexform.problemDescription" placeholder="请输入异常问题" clearable /> + </el-form-item> --> + + <el-form-item label="处理方"> + <el-select + v-model="Indexform.processor" + clearable + filterable + multiple + placeholder="请选择处理方" + @change="Processingrelease" + > + <el-option + v-for="item in warehouseData" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + + <el-form-item v-if="isShowFormItem1"> </el-form-item> + <el-form-item v-if="isShowFormItem2"> </el-form-item> + + <el-tabs type="border-card" class="el_nint"> + <el-tab-pane> + <template #label> + <span class="custom-tabs-label"> + <el-icon><List /></el-icon> + <span>内部责任划分</span> + </span> + </template> + <div class="ResponsibilityBox"> + <div class="el_btbox" v-for="(item, index) in FangAddList" :key="index"> + <div class="leftbox"> + <div class="maxBox"> + <!-- 提货环节 --> + <el-form-item label="责任方"> + <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="请选择责任方" + > + <el-option + v-for="item in warehouseData" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </div> + + <div class="maxBox"> + <el-form-item label="责任人"> + <el-select + v-if="groundlineType != 1" + v-model="item.personResponsibleName" + clearable + filterable + placeholder="请选责任人" + > + <el-option + v-for="item in item.personResponsibleList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + + <el-tooltip :content="item.personResponsibleName" placement="top" v-else> + <el-input v-model="item.personResponsibleName" placeholder="责任人" /> + </el-tooltip> + </el-form-item> + </div> + <div class="maxBox el_zb"> + <el-form-item label="占比" class="title"> + <el-tooltip :content="item.responsibilityRatio" placement="top"> + <el-input + :controls="false" + v-model="item.responsibilityRatio" + placeholder="0" + :min="0" + :max="item.ProportionMax" + v-percentage + /> + </el-tooltip> + </el-form-item> + </div> + <div class="maxBox"> + <el-form-item label="三方责任人"> + <el-tooltip :content="item.tripartite" placement="top"> + <el-input v-model="item.tripartite" placeholder="三方责任人" /> + </el-tooltip> + </el-form-item> + </div> + + <div class="maxBox brand"> + <el-form-item label="说明"> + <el-tooltip :content="item.description" placement="top"> + <el-input + v-model="item.description" + placeholder="请输入说明 " + :rows="2" + /> + </el-tooltip> + </el-form-item> + </div> + </div> + </div> + <div class="Proportion"> + <span class="title">公司占比:{{ companyProportion }}%</span> + </div> </div> - <div class="maxBox"> - <span class="title">占比:</span> - <el-input - v-model="item.responsibilityRatio" - placeholder="请输入占比 " - :rows="2" - disabled + </el-tab-pane> + </el-tabs> + </el-form> + <el-tabs type="border-card" class="el_Processingresults"> + <el-tab-pane> + <template #label> + <span class="custom-tabs-label"> + <el-icon><EditPen /></el-icon> + <span>处理结果</span> + </span> + </template> + <div class="selector"> + <el-select + v-model="Indexform.result" + multiple + filterable + default-first-option + :reserve-keyword="false" + placeholder="暂无处理结果" + disabled + > + <el-option + v-for="item in ProcessingResults" + :key="item.dictKey" + :label="item.dictValue" + :value="item.dictKey" /> + </el-select> + </div> + + <div class="ProcessingResults" v-if="ProcessingList.length"> + <div class="title">处理结果-理赔金额</div> + <div class="Listadmiration"> + <div class="name" v-for="(item, index) in ProcessingList" :key="index"> + <div class="payment_right"> + <div class="el_titleName"> + <span>{{ item.name }}</span> + <el-input disabled class="money" v-model="item.input" /> + </div> + <div class="el_titleName"> + <span>支付方式</span> + <div class="Paymentname"> + {{ item.payment ? item.text : '暂未选择支付方式' }} + </div> + </div> + + <div class="el_titleName"> + <span>支付单位</span> + <div class="el_PaymentUnit"> + <el-input disabled v-model="item.paymentUnit" placeholder="支付单位" /> + </div> + </div> + + <div class="el_titleName"> + <span>支付时间</span> + <el-date-picker + v-model="item.compensationTime" + type="datetime" + format="YYYY-MM-DD" + value-format="YYYY-MM-DD HH:mm:ss" + placeholder="理赔支付时间" + disabled + /> + </div> + </div> + </div> </div> - <div class="maxBox"> - <span class="title">三方责任人:</span> - <el-input v-model="item.tripartite" placeholder="请输入三方责任人" disabled /> - </div> - <div class="maxBox"> - <span class="title">说明:</span> - <el-input - disabled - v-model="item.description" - placeholder="请输入说明 " - clearable - :rows="2" - /> + + <div class="el_tool"> + <span>总金额:{{ TotalClaimAmount }}元</span> </div> </div> - </div> - <div class="Proportion"> - <span class="title">公司占比:{{ companyProportion }}%</span> - </div> - </div> - </el-tab-pane> - </el-tabs> - <!-- 完结信息 --> - <el-tabs type="border-card" class="demo-tabs el-endtabs" v-if="UserPermissions != '仓库客服'"> - <el-tab-pane> - <template #label> - <span class="custom-tabs-label"> - <el-icon><calendar /></el-icon> - <span>完结信息</span> - </span> - </template> - - <div class="payanindemnity" v-for="(item, index) in CompensationParty" :key="index"> - <div class="el_pklab"> - <span class="title" :style="{ color: item.state != 0 ? '#000' : '#F56C6C' }" - >{{ item.state == 0 ? '赔款方' : '受款方' }}{{ item.cld }}</span - > - </div> - <div class="el_pkLi"> - <div class="sk_input"> + <!-- 处理结果说明 --> + <el-form-item label="处理结果说明" class="el_resj" v-if="ProcessingList.length"> <el-input - v-model="item.name" - :placeholder="item.state == 0 ? '暂无赔款方' : '暂无受款方'" + v-model="Indexform.resultDescription" + placeholder="请输入处理结果说明" + clearable + :autosize="{ minRows: 3, maxRows: 4 }" + type="textarea" disabled /> + </el-form-item> + </el-tab-pane> + </el-tabs> + + <!-- 完结信息 --> + <el-tabs + type="border-card" + class="demo-tabs el-endtabs" + v-if="UserPermissions != '仓库客服'" + > + <el-tab-pane> + <template #label> + <span class="custom-tabs-label"> + <el-icon><calendar /></el-icon> + <span>完结信息</span> + </span> + </template> + + <div class="payanindemnity" v-for="(item, index) in CompensationParty" :key="index"> + <div class="el_pklab"> + <span class="title" :style="{ color: item.state != 0 ? '#000' : '#F56C6C' }" + >{{ item.state == 0 ? '赔款方' : '受款方' }}{{ item.cld }}</span + > + </div> + + <div class="el_pkLi"> + <div class="sk_input"> + <el-tooltip :content="item.name" placement="top"> + <el-input + v-model="item.name" + :placeholder="item.state == 0 ? '暂无赔款方' : '暂无受款方'" + disabled + /> + </el-tooltip> + </div> + <div class="sk_input"> + <span>原因</span> + <el-tooltip :content="item.reason" placement="top"> + <el-input v-model="item.reason" placeholder="暂无原因" disabled /> + </el-tooltip> + </div> + <div class="sk_input"> + <span>金额</span> + <el-tooltip :content="item.num?item.num:'0'" placement="top"> + <el-input + @input="amountMoney" + :min="0" + v-model="item.num" + placeholder="0" + disabled + /> + </el-tooltip> + </div> + <!-- 赔款方是那个仓库的 --> + <div class="sk_input" v-if="item.state == 0"> + <span>仓库</span> + <el-select v-model="item.warehouseId" disabled filterable placeholder="暂无仓库"> + <el-option + v-for="item in warehouseData" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + + </div> + + <div class="sk_input" v-if="item.state == 1"></div> + <!-- 责任人 --> + <div class="sk_input" v-if="item.state == 0"> + <span>责任人</span> + <el-tooltip :content="item.compensationPersonnel?item.compensationPersonnel:'暂无责任人'" placement="top"> + <el-input + v-model="item.compensationPersonnel" + placeholder="暂无责任人" + clearable + :rows="2" + disabled + /> + </el-tooltip> + </div> + + <div class="sk_input" v-if="item.state == 1"></div> + </div> </div> - <div class="sk_input"> - <el-input v-model="item.reason" placeholder="暂无原因" disabled /> + <div class="paySum"> + <span> + <el-icon><Coin /></el-icon>赔款金额总和:<b>{{ TotalamountCompensation }}</b></span + > + <span> + <el-icon><Coin /></el-icon>受款金额总和:<b>{{ TotalamountReceived }}</b></span + > </div> - <div class="sk_input"> + </el-tab-pane> + </el-tabs> + + <!-- 仲裁原因 --> + <!-- v-if="routerState == 'end'" --> + <div class="arbitrate" v-if="UserPermissions != '仓库客服'"> + <el-tabs type="border-card" class="demo-tabs"> + <el-tab-pane> + <template #label> + <span class="custom-tabs-label"> + <el-icon><Star /></el-icon> + <span>仲裁原因</span> + </span> + </template> + <el-input - @input="amountMoney" - :min="0" - v-model="item.num" - placeholder="金额" + v-model="Indexform.arbitrate" + type="textarea" + :autosize="{ minRows: 5, maxRows: 4 }" disabled + placeholder="暂无仲裁原因" /> - </div> - <!-- 赔款方是那个仓库的 --> - <div class="sk_input" v-if="item.state == 0"> - <el-select v-model="item.warehouseId" disabled filterable placeholder="暂无仓库"> - <el-option - v-for="item in warehouseData" - :key="item.value" - :label="item.label" - :value="item.value" - /> - </el-select> - </div> + </el-tab-pane> + </el-tabs> + </div> - <div class="sk_input" v-if="item.state == 1"></div> - <!-- 责任人 --> - <div class="sk_input" v-if="item.state == 0"> - <el-input - v-model="item.personResponsibleList" - placeholder="暂无责任人" - clearable - :rows="2" + + + <!-- 照片回显 --> + <el-tabs type="border-card" class="demo-tabs el-photo"> + <el-tab-pane> + <template #label> + <span class="custom-tabs-label"> + <el-icon><Picture /></el-icon> + <span>{{ + SelectType == 1 ? '运损照片' : SelectType == 3 ? '窜货照片' : '照片' + }}</span> + </span> + </template> + <!-- 照片 --> + <div class="Transport_damage_photos"> + <el-upload disabled - /> + 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 + class="el-picture-card" + > + <el-icon><Plus /></el-icon> + </el-upload> + + <el-dialog v-model="dialogImgList" width="30%"> + <el-image + :src="amplifyurl" + :zoom-rate="1.2" + :max-scale="7" + :min-scale="0.2" + :preview-src-list="amplifysrcList" + :initial-index="4" + fit="cover" + /> + </el-dialog> </div> + </el-tab-pane> + </el-tabs> - <div class="sk_input" v-if="item.state == 1"></div> + + </div> + <div class="dialog-footer"> + <el-button type="primary" v-if="PermissionButton.reply" @click="addireply">回复</el-button> + <el-button type="primary" v-if="PermissionButton.Processing_results" @click="addingRecord" + >处理结果 + </el-button> + <el-button type="primary" v-if="PermissionButton.work_order_completion" @click="EndJump" + >完结</el-button + > + <el-button type="primary" v-if="PermissionButton.repulse" @click="BatchReturn" + >打回</el-button + > + <el-button + type="primary" + v-if="PermissionButton.apply_arbitration" + @click="CustomerServiceCompleted" + >客服仲裁完结</el-button + > + <el-button + type="primary" + v-if="PermissionButton.information_editing" + @click="EditInformation" + >信息编辑</el-button + > + <el-button + type="primary" + v-if="PermissionButton.Appeal_established" + @click="AppealEstablished" + >申诉成立</el-button + > + <el-button type="primary" v-if="PermissionButton.Appeal_rejection" @click="AppealRejection" + >申诉驳回</el-button + > + </div> + </el-card> + + <el-affix :offset="msgTop"> + <div class="right"> + <el-tabs type="border-card"> + <div class="content"> + <el-tab-pane + label="调查记录" + v-loading="Msgloading" + element-loading-text="正在获取记录..." + > + <div class="el_Processingparty"> + <div></div> + <div class="el_Refresh" @click="Chatrefresh"> + <el-button type="primary">刷新</el-button> + </div> + </div> + <div class="ovhe" :style="{ height: msgHight + 'px' }" ref="scrollContainer"> + <el-timeline> + <el-timeline-item + placement="top" + v-for="(item, index) in MessageContent" + :key="index" + > + <el-card + :class="{ + CardidentifyingC1: item.difference == '1', + CardidentifyingC2: item.difference == '2', + CardidentifyingC3: item.difference == '3', + 'mx-1': true, + }" + > + <div class="header"> + <div class="e_ico"> + <el-icon><User /></el-icon>: + <h4>{{ item.username }}【{{ item.name }}】</h4> + </div> + + <el-tag + :class="{ + identifyingC1: item.difference == '1', + identifyingC2: item.difference == '2', + identifyingC3: item.difference == '3', + 'mx-1': true, + }" + effect="dark" + >{{ + item.difference == '1' + ? ' 调查记录' + : item.difference == '2' + ? '指定记录' + : item.difference == '3' + ? '操作记录' + : '' + }} + </el-tag> + </div> + + <div class="e_ico"> + <el-icon><ChatRound /></el-icon>:<span> {{ item.content }}</span> + </div> + + <div class="img" v-if="item.img"> + <el-image + :src="item.img" + :zoom-rate="1.2" + :max-scale="7" + :min-scale="0.2" + :preview-src-list="item.imgList" + :initial-index="4" + fit="cover" + /> + </div> + <div class="mp4" @click="AddVideoPreview(index)" v-if="item.mp4"> + <span + >视频: <el-icon><VideoPlay /></el-icon>点击预览 + </span> + </div> + + <div class="file" v-if="item.file" @click="FileDownload(index)"> + <a :href="item.file"> + <span + >文件: <el-icon><FolderOpened /></el-icon> 点击下载 + </span> + </a> + </div> + + <div class="identifying"> + <div class="e_ico"> + <el-icon><Timer /></el-icon>: + <p>{{ item.time }}</p> + </div> + <div + class="tag" + v-if=" + (msgState == 1 || msgState == 2 || msgState == 3) && item.identifying + " + > + <el-tag class="mx-1" effect="dark" + >{{ + msgState == 1 + ? ' 待回复' + : msgState == 2 + ? '已回复' + : msgState == 3 + ? '已超时' + : '' + }} + </el-tag> + </div> + </div> + </el-card> + </el-timeline-item> + </el-timeline> + </div> + <!-- 输入框 --> + </el-tab-pane> </div> - </div> - <div class="paySum"> - <span> - <el-icon><Coin /></el-icon>赔款金额总和:<b>{{ TotalamountCompensation }}</b></span - > - <span> - <el-icon><Coin /></el-icon>受款金额总和:<b>{{ TotalamountReceived }}</b></span - > - </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 - disabled - 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="dialogImgList" width="30%"> - <el-image - :src="amplifyurl" - :zoom-rate="1.2" - :max-scale="7" - :min-scale="0.2" - :preview-src-list="amplifysrcList" - :initial-index="4" - fit="cover" - /> - </el-dialog> - </div> - <!-- appeal为真表示正常进入为假表示从申诉列表进入 --> - <div class="foot_btn" v-if="!appeal"> - <!-- v-if="PermissionButton.reply" - v-if="PermissionButton.processing_completed" - v-if="PermissionButton.work_order_completion" - v-if="PermissionButton.repulse" - v-if="PermissionButton.arbitration_completed" - v-if="PermissionButton.information_editing" --> - <el-button type="primary" @click="addireply">回复</el-button> - <el-button type="primary" @click="addingRecord" v-if="$route.query.workOrderStatus != '21'" - >处理结果</el-button + </el-tabs> + </div> + </el-affix> + + <!-- 打回弹窗 --> + <el-dialog v-model="dialogReturn" title="工单打回" width="40%" draggable class="plAllret"> + <el-form + v-loading="repulse" + element-loading-text="正在打回中..." + label-position="top" + label-width="100px" + :model="BatchFrom" + class="el_form_BatchFrom" > - <el-button type="primary" @click="EndJump">完结 </el-button> - <el-button type="primary" @click="BatchReturn">打回 </el-button> - <el-button type="primary" @click="CustomerServiceCompleted">客服仲裁完结 </el-button> - <el-button @click="EditInformation">信息编辑</el-button> - </div> - <div class="foot_btn" v-if="appeal && AppealReview"> - <el-button type="primary" @click="AppealEstablished">申诉成立 </el-button> - <el-button type="primary" @click="AppealRejection">申诉驳回 </el-button> - </div> - </el-card> - <!-- 批量打回弹窗 --> - <el-dialog v-model="dialogReturn" title="批量打回" width="40%" draggable class="plAllret"> - <el-form - v-loading="repulse" - element-loading-text="正在打回中..." - label-position="top" - label-width="100px" - :model="BatchFrom" - > - <el-form-item label="打回原因"> - <el-input v-model="BatchFrom.txt" type="textarea" :rows="4" /> - </el-form-item> - - <el-form-item label="流转营业部"> - <el-select - v-model="BatchFrom.businessDepartment" - multiple - filterable - default-first-option - :reserve-keyword="false" - placeholder="请选择活动区域" - > - <el-option - v-for="item in warehouseData" - :key="item.value" - :label="item.label" - :value="item.value" - /> - </el-select> - </el-form-item> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="dialogReturn = false">取消</el-button> - <el-button type="primary" @click="ConfirmReturn" :disabled="repulse"> 确定 </el-button> - </span> - </template> - </el-dialog> + <el-form-item label="打回原因" class="el_BatchFrom"> + <el-input v-model="BatchFrom.txt" type="textarea" :rows="4" /> + </el-form-item> + + <el-form-item label="流转营业部"> + <el-select + v-model="BatchFrom.businessDepartment" + multiple + filterable + default-first-option + :reserve-keyword="false" + placeholder="请选择活动区域" + > + <el-option + v-for="item in warehouseData" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogReturn = false">取消</el-button> + <el-button type="primary" @click="ConfirmReturn" :disabled="repulse"> 确定 </el-button> + </span> + </template> + </el-dialog> + </div> </template> <script setup> -import { ElMessage } from 'element-plus'; -import { ElMessageBox } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { useRouter, useRoute } from 'vue-router'; -import { getDictionaryBiz } from '@/api/system/dict'; //字典 -import { getDetailWarehouse, getDeptWarehouse } from '@/api/basicdata/basicdataWarehouse'; //处理方 -import { AddressClosed } from '@/utils/util'; import { useStore } from 'vuex'; +const $useStore = useStore(); +import { getDictionaryBiz } from '@/api/system/dict'; //字典 +import { getDeptWarehouse } from '@/api/basicdata/basicdataWarehouse'; //处理方 import { - $_getList, - $_submit, - $_getDetail, - $_remove, - $_getBusinessDepartmentUser, - $_getAbnormalPackage, + $_getTrackRecord, + $_getSurveyRecord, $_getInfo, $_batchReturn, $_Cancelappeal, } from '@/api/aftersales/aftersalesWorkOrder'; -import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue'; - +import { ref, reactive, computed, onMounted } from 'vue'; import { getToken } from '@/utils/auth'; const $router = useRouter(); const $route = useRoute(); const Indexform = ref({ packList: [], decreaseImageEntityList: [], //处理好的图片数据 + discoveryNode: '1', }); //首页新增表单 -const dialogImgList = ref(false); +const pageState = ref(false); //页面加载状态 +const ProcessingResults = ref([]); //处理结果列表选项 const IndexException = ref([]); //异常类型下拉选择 +const ZFname = ref(''); //支付名字预留状态 +const IndexForm = ref(null); //表格ref实力 const DiscoveringNodes = ref([]); //发现节点下拉选择 -const ProcessingResults = ref([]); //处理结果列表选项 const warehouseData = ref([]); //处理方 const SelectType = ref(null); //类型 -const BatchFrom = ref({}); //打回内容 -const StateType = ref(true); //类型 const HistoricalPackageinput = ref(''); //历史包件选择 const dialogImageUrl = ref(null); //图片 -const TotalamountCompensation = ref(0); //赔款总金额 -const TotalamountReceived = ref(0); //受款总金额 const dialogVisible = ref(null); //图片 -const ProcessingList = ref([]); //处理结果已经选择的列表 const groundlineSet = ref(true); //干线条件都满足 +const TotalClaimAmount = ref(0); //总金额 const groundlineType = ref(null); //干线状态 +const Inputbox = ref(true); //调查经过输入框状态 const ShortageState = ref(false); //少货件数弹窗状态 -const Pageloading = ref(false); //申诉列表 const fleeingState = ref(false); //窜货件数弹窗 const ShortageList = ref([]); //少货件数 const fleeingList = ref([]); //窜货件数 const valueStrictly = ref(); +const ProcessingreleaseState = ref(true); //是否可以填写处理结果 const routerID = ref(null); //路由参数ID const routerState = ref(''); //路由状态 const personResponsibleList = ref([]); //责任人列表 -const companyProportion = ref(0); //公司占比 +const ZFdialog = ref(false); //支付方式弹出 +const companyProportion = ref(100); //公司占比 const identifying = ref(1); //订单,零担状态 const dialogHistoricalPackage = ref(false); //历史包件弹窗 const HistoricalPackageList = ref([]); //历史包件数组 const HistorIndex = ref(0); //历史包件索引 -const TotalClaimAmount = ref(0); //总金额 -const dialogReturn = ref(false); //打回弹窗 -const ProcessingRecords = ref([]); //处理放记录用于匹配按钮 -const ProcessingRecordsName = ref([]); //匹配的处理方中文名字 -const repulse = ref(false); //加载效果 +const NumberPackages = ref(0); //包件个数 +const dialogImgList = ref(false); //图片预览弹窗 const amplifyurl = ref(''); //当前点击的图片 const amplifysrcList = ref([]); //图片循环列表 -const RouteIndexs = ref(''); //进入前的页面索引 -const UserPermissions = ref(''); //当前状态 -const warehouseInfo = ref(''); //仓库信息 -const warehouseState = ref(false); //仓库权限 -const $useStore = useStore(); +const ProcessingList = ref([]); //处理结果已经选择的列表 +const Paymentmethod = ref([]); //支付方式 +const Mydata = ref(); //当前登录人信息 +const UserPermissions = ref(); //当前登录人角色身份 +// ====== +const MessageContent = ref([]); //调查记录 +const scrollContainer = ref(null); //客服实例 +const msgHight = ref(100); //聊天框消息高度 +const msgTop = ref(0); //调查记录距离页面吸顶记录 +const msgState = ref(0); +const Msgloading = ref(false); +const TotalamountCompensation = ref(0); //赔款总金额 +const TotalamountReceived = ref(0); //受款总金额 +const BatchFrom = ref({}); //打回内容 +const dialogReturn = ref(false); //打回弹窗 const appeal = ref(false); //工单申诉状态 const AppealReview = ref(false); //申诉状态只能查看 -const accessControl = $useStore.getters.permission; - const CompensationParty = ref([ { name: '', @@ -660,7 +920,7 @@ const CompensationParty = ref([ reason: '', cld: 1, warehouseId: null, - personResponsibleList: '', + compensationPersonnel: '', }, //赔款方 // explains: '' { @@ -670,14 +930,16 @@ const CompensationParty = ref([ reason: '', cld: 1, warehouseId: null, - personResponsibleList: '', + compensationPersonnel: '', }, //受款方 // explains: '' ]); //收/赔 +// ======= + const PackageInfo = ref([ //包件信息 - { packageCode: '', orderCode: '', waybillNumber: '', brandName: '' }, + { packageCode: '', orderCode: '', waybillNumber: '', brandName: '', state: false }, ]); // 责任方列表 const FangAddList = ref([ @@ -687,6 +949,7 @@ const FangAddList = ref([ responsibilityRatio: '', description: '', tripartite: '', + ProportionMax: 100, }, ]); // 提货责任方 @@ -704,6 +967,120 @@ const responsible = ref([ label: '物流', }, ]); + +onMounted(() => { + msgHight.value = window.innerHeight * 0.8; + console.log(msgHight.value, '处理好的页面高度'); + msgTop.value = window.innerHeight * 0.1; + console.log(msgTop.value, '处理好的页面高度'); + // 滚动到最后 + setTimeout(() => { + const container = scrollContainer.value; + if (container) { + container.scrollTop = container.scrollHeight; + } + }, 0); +}); + +// 底部按钮权限 +const PermissionButton = computed(() => { + return { + reply: !appeal.value, //回复 + Processing_results: !appeal.value && $route.query.workOrderStatus != '21', //处理结果 + work_order_completion: !appeal.value, //完结 + repulse: !appeal.value, //打回 + apply_arbitration: !appeal.value, //客服仲裁完结 + information_editing: !appeal.value, //信息编辑 + Appeal_established: appeal.value && AppealReview.value, //申诉成立 + Appeal_rejection: appeal.value && AppealReview.value, //申诉驳回 + }; +}); + +// 聊天记录获取 +const Chathistory = res => { + Msgloading.value = true; + let filetype = ''; //文件类型 + + if (UserPermissions.value != '仓库客服') { + console.log(UserPermissions.value, '当前不是仓库客服'); + $_getTrackRecord({ + id: $route.query.id, + }) + .then(res => { + MessageContent.value = []; //先清空内容,防止内容重复叠加 + res.data.data.surveyRecordEntities.forEach(item => { + MessageContent.value.unshift({ + time: item.createTime, //时间 + content: item.processingResults, //消息内容 + name: item.addDepartment, //营业部名称 + username: item.addPeople, //用户名 + img: filetype == 'png' ? item.pictureUrl : '', + file: filetype == 'docx' ? item.pictureUrl : '', + mp4: filetype == 'mp4' ? item.pictureUrl : '', + imgList: [filetype == 'png' ? item.pictureUrl : ''], + difference: item.difference, + identifying: false, //待回复标识 + }); + }); + setTimeout(() => { + const container = scrollContainer.value; + if (container) { + container.scrollTop = container.scrollHeight; + } + }, 0); + console.log(res, '聊天记录'); + Msgloading.value = false; //关闭加载效果 + }) + .catch(res => { + Msgloading.value = false; //关闭加载效果 + }); + } else { + $_getSurveyRecord({ + id: $route.query.id, + }) + .then(res => { + MessageContent.value = []; //先清空内容,防止内容重复叠加 + console.log(res, '聊天返回值'); + // 仓库客服不需要操作记录 + if (res.data.data.processorVOList) { + if (res.data.data.processorVOList.length) { + msgState.value = res.data.data.processorVOList[0].processingStatus; //获取聊天状态 + } + } + res.data.data.surveyRecordEntities.forEach(item => { + if (item.pictureUrl) { + filetype = Fileidentifier(item.pictureUrl); + } + MessageContent.value.push({ + time: item.createTime, //时间 + content: item.content, //消息内容 + name: item.addDepartment, //营业部名称 + username: item.addPeople, //用户名 + img: filetype == 'png' ? item.pictureUrl : '', + file: filetype == 'docx' ? item.pictureUrl : '', + mp4: filetype == 'mp4' ? item.pictureUrl : '', + imgList: [filetype == 'png' ? item.pictureUrl : ''], + difference: item.difference, + identifying: true, //是否显示待回复按钮 + }); + }); + setTimeout(() => { + const container = scrollContainer.value; + if (container) { + container.scrollTop = container.scrollHeight; + } + }, 0); + + console.log(res, '聊天记录'); + Msgloading.value = false; //关闭加载效果 + }) + .catch(res => { + Msgloading.value = false; //关闭加载效果 + }); + } +}; + +const DeliveryDriver = ref([]); // 图片列表 const fileList = ref([]); // 字典公共函数 @@ -718,23 +1095,6 @@ function updateDictionary(targetArray, dictionaryType) { }); }); } - -// 获取角色权限 -getDictionaryBiz('after_sales_visits').then(res => { - console.log(res, '角色字典'); - const matchingItem = res.data.data.find( - item => item.dictValue == JSON.parse(localStorage.getItem('TWMS-userInfo')).content.role_name - ); - if (matchingItem) { - UserPermissions.value = matchingItem.dictValue; - } else { - UserPermissions.value = '仓库客服'; - } - console.log(UserPermissions.value, '当前角色权限'); -}); - -warehouseInfo.value = localStorage.getItem('WarehouseName'); - // 图片上传必须携带TOKEN const headers = computed(() => { return { 'Blade-Auth': 'Bearer ' + getToken() }; @@ -749,168 +1109,31 @@ const doubledCount = computed(() => { 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'], '图片列表'); + amplifysrcList.value.push(response.data.link); } }; -// 后台控制权限按钮 -const PermissionButton = computed(() => { - return { - workAdd: accessControl.workAdd, //新增 - batch_return: accessControl.batch_return, //批量打回 - assign: accessControl.assign, //工单指派 - apply_arbitration: accessControl.apply_arbitration, //申请仲裁 - batch_completion: accessControl.batch_completion, //批量完结 - representations: accessControl.representations, //申诉 - reply: accessControl.reply, //回复 - processing_completed: accessControl.processing_completed, //处理完结 - work_order_completion: accessControl.work_order_completion, //完结 - repulse: accessControl.repulse, //打回 - arbitration_completed: accessControl.arbitration_completed, //仲裁完结 - information_editing: accessControl.information_editing, //信息编辑 - }; -}); -// const PermissionButtonS = computed(() => { -// return { -// workAdd:accessControl.workAdd,//新增 -// batch_return:accessControl.batch_return,//批量打回 -// assign:accessControl.assign, //工单指派 -// apply_arbitration:accessControl.apply_arbitration,//申请仲裁 -// batch_completion:accessControl.batch_completion,//批量完结 -// representations:accessControl.representations,//申诉 -// reply:accessControl.reply,//回复 -// processing_completed:accessControl.processing_completed,//处理完结 -// work_order_completion:accessControl.work_order_completion,//完结 -// repulse:accessControl.repulse,//打回 -// arbitration_completed:accessControl.arbitration_completed,//仲裁完结 -// information_editing:accessControl.information_editing,//信息编辑 -// } -// }); -// 详情按钮权限 -const ButtonPermissions = computed(() => { - // 根据 TabPermissions 的状态,决定每个按钮的显示隐藏逻辑 - switch (RouteIndexs.value != 'null') { - case RouteIndexs.value == 0: //全部 - return { - reply: false, //回复按钮(都可以查看) - ProcessingResults: false, //处理结果按钮 - end: false, //完结按钮 - repulse: false, //打回按钮 - ArbitrationCompleted: false, //客服仲裁完结 - edit: false, //编辑 - }; - case RouteIndexs.value == 1: //处理中 - return { - reply: false, //回复按钮 - ProcessingResults: false, //处理结果按钮 - end: false, //完结按钮 - repulse: false, //打回按钮 - ArbitrationCompleted: false, //客服仲裁完结 - edit: false, //编辑 - }; - case RouteIndexs.value == 2: //处理完毕 - return { - reply: false, //回复按钮 - ProcessingResults: false, //处理结果按钮 - end: UserPermissions.value == '职能客服', //完结按钮 - repulse: UserPermissions.value == '客服经理', //打回按钮 - ArbitrationCompleted: false, //客服仲裁完结 - edit: false, //编辑 - }; - case RouteIndexs.value == 3: //待处理 - return { - reply: UserPermissions.value == '仓库客服', //回复按钮 - ProcessingResults: UserPermissions.value == '仓库客服', //处理结果按钮 - end: UserPermissions.value != '仓库客服', //完结按钮 - repulse: UserPermissions.value != '仓库客服', //打回按钮 - ArbitrationCompleted: false, //客服仲裁完结 - edit: UserPermissions.value == '仓库客服', //编辑 - }; - case RouteIndexs.value == 4: //理赔金额未出 - return { - reply: false, //回复按钮 - ProcessingResults: false, //处理结果按钮 - end: false, //完结按钮 - repulse: false, //打回按钮 - ArbitrationCompleted: false, //客服仲裁完结 - edit: false, //编辑 - }; - case RouteIndexs.value == 5: //仲裁中 - return { - reply: UserPermissions.value == '职能客服', //回复按钮 - ProcessingResults: false, //处理结果按钮 - end: false, //完结按钮 - repulse: false, //打回按钮 - ArbitrationCompleted: UserPermissions.value == '职能客服', //客服仲裁完结 - edit: false, //编辑 - }; - case RouteIndexs.value == 6: //完结 - return { - reply: false, //回复按钮 - ProcessingResults: false, //处理结果按钮 - end: false, //完结按钮 - repulse: false, //打回按钮 - ArbitrationCompleted: false, //客服仲裁完结 - edit: false, //编辑 - }; - case RouteIndexs.value == 7: //超时未处理 - return { - reply: false, //回复按钮 - ProcessingResults: false, //处理结果按钮 - end: false, //完结按钮 - repulse: false, //打回按钮 - ArbitrationCompleted: false, //客服仲裁完结 - edit: false, //编辑 - }; - - case RouteIndexs.value == 8: //待回复 - return { - reply: UserPermissions.value == '仓库客服', //回复按钮 - ProcessingResults: UserPermissions.value == '仓库客服', //处理结果按钮 - end: UserPermissions.value != '仓库客服', //完结按钮 - repulse: UserPermissions.value != '仓库客服', //打回按钮 - ArbitrationCompleted: false, //客服仲裁完结 - edit: UserPermissions.value == '仓库客服', //编辑 - }; - - // 其他任何情况下的默认情况 - default: - return { - reply: false, //回复按钮 - ProcessingResults: false, //处理结果按钮 - end: false, //完结按钮 - repulse: false, //打回按钮 - ArbitrationCompleted: false, //客服仲裁完结 - edit: false, //编辑 - }; - } -}); - // 上传图片规则 const beforeAvatarUpload = rawFile => { - if (rawFile.type !== 'image/png') { - ElMessage.error('图片格式只能为image/png!'); + console.log(rawFile); + if (rawFile.type !== 'image/png' && rawFile.type !== 'image/jpeg') { + ElMessage.error('图片格式只能为 png/jpg!'); return false; - } else if (rawFile.size / 1024 / 1024 > 2) { - ElMessage.error('图片大小不能大于2MB!'); + } else if (rawFile.size / 1024 / 1024 > 10) { + ElMessage.error('图片大小不能大于10MB!'); return false; } return true; }; // 点击图片列表回调 const pictureList = val => { + console.log(val, '图片列表'); dialogImgList.value = true; console.log(val, '图片列表'); amplifyurl.value = val.url; }; -// 点击图片移除 -const ImgListRemove = val => { - console.log(val, '移除图片'); -}; + // 处理方和责任方获取数据 const handle = () => { getDeptWarehouse().then(res => { @@ -922,492 +1145,183 @@ const handle = () => { }); }); }; -const changeProcessingResults = val => { - // 首先删除取消的项目 - ProcessingList.value = ProcessingList.value.filter(item => val.includes(item.state - 1)); - - // 然后添加或保持新的项目 - val.forEach(num => { - let newItem = { - input: 0, - min: 0, - max: 9999999999999, - state: num + 1, - payment: '', - text: '', - compensationTime: '', - }; - // 根据num为newItem的name字段赋值 - switch (num) { - case '1': - newItem.name = '下补单'; - break; - case '2': - newItem.name = '维修/补漆'; - break; - case '3': - newItem.name = '客户未要求理赔'; - break; - case '4': - newItem.name = '用库存'; - break; - case '5': - newItem.name = '赔商家'; - break; - case '6': - newItem.name = '赔付运费'; - break; - case '7': - newItem.name = '工厂考核'; - break; - default: - return; - } - // 如果列表中不存在则加入新项目 - if (!ProcessingList.value.some(item => item.state === newItem.state)) { - ProcessingList.value.push(newItem); - console.log(`添加:${newItem.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 = () => { - if ($route.query.RouteIndexs != 'null') { - RouteIndexs.value = $route.query.RouteIndexs; //记录当前状态 - } - - console.log($route.query.id, '页面初始化'); - routerState.value = $route.query.routerState; - updateDictionary(IndexException.value, 'pc_work_order'); //异常类型 - updateDictionary(DiscoveringNodes.value, 'pc_discovery_node'); //发现环节 - updateDictionary(DiscoveringNodes.value, 'pc_discovery_node'); //发现环节 - handle(); //处理方和责任方信息 - if ($route.query.Routstate) { - appeal.value = true; - } - // 只能查看申诉信息 - if ($route.query.AppealReview) { - if ($route.query.AppealReview == 'false') { - console.log($route.query.AppealReview, '申诉状态'); - AppealReview.value = false; + Mydata.value = JSON.parse(localStorage.getItem('my_data')); //记录本地登录 + getDictionaryBiz('after_sales_visits').then(res => { + const matchingItem = res.data.data.find( + item => item.dictValue == JSON.parse(localStorage.getItem('TWMS-userInfo')).content.role_name + ); + if (matchingItem) { + UserPermissions.value = matchingItem.dictValue; //记录当前人身份 } else { - AppealReview.value = true; - console.log(AppealReview.value, '当前申诉状态'); + UserPermissions.value = '仓库客服'; } - } - - console.log(appeal.value); - $_getInfo({ id: $route.query.id }).then(res => { - console.log(res, '回显返回值参数'); - Indexform.value = res.data.data; - - Indexform.value['result'] = []; - Indexform.value['processor'] = []; - //图片处理回显 - Indexform.value.packList = res.data.data.decreaseImageVOList.map(res => { - amplifysrcList.value.push(res.imagePath); - return { - name: res.imageName, - url: res.imagePath, - }; - }); - // 包件回显 - PackageInfo.value = res.data.data.abnormalPackageVOList; - console.log(res.data.data.abnormalPackageVOList, '包件信息'); - // 责任方回显 - - FangAddList.value = res.data.data.processorVOList - .filter(item => item && item.typesOf && item.typesOf == '1') - .map(item => { - return { businessName: item.businessId }; + console.log(UserPermissions.value, '当前角色权限'); + Chathistory(); //聊天的历史记录 + routerState.value = $route.query.routerState; + updateDictionary(IndexException.value, 'pc_work_order'); //异常类型 + updateDictionary(DiscoveringNodes.value, 'pc_discovery_node'); //发现环节 + handle(); //处理方和责任方信息 + + $_getInfo({ id: $route.query.id }).then(res => { + console.log(res, '回显返回值参数'); + Indexform.value = res.data.data; + + Indexform.value['result'] = []; + Indexform.value['processor'] = []; + //图片处理回显 + Indexform.value.packList = res.data.data.decreaseImageVOList.map(res => { + amplifysrcList.value.push(res.imagePath); + return { + name: res.imageName, + url: res.imagePath, + }; }); - console.log(FangAddList.value, '责任方回显问题'); + // 包件回显 + PackageInfo.value = res.data.data.abnormalPackageVOList; + console.log(res.data.data.abnormalPackageVOList, '包件信息'); + NumberPackages.value = res.data.data.abnormalPackageVOList.length; //包件个数统计 + // 责任方回显 + + FangAddList.value = res.data.data.processorVOList + .filter(item => item && item.typesOf && item.typesOf == '1') + .map(item => { + return { businessName: item.businessId }; + }); + console.log(FangAddList.value, '责任方回显问题'); - // 公司占比回显计算 - let sum = 0; - res.data.data.personResponsibleVOS.forEach(item => { - sum = Number(item.responsibilityRatio) + sum; - }); + // 公司占比回显计算 + let sum = 0; + res.data.data.personResponsibleVOS.forEach(item => { + sum = Number(item.responsibilityRatio) + sum; + }); - if (res.data.data.discoveryNode == '1') { - groundlineType.value = '1'; - } else { - groundlineType.value = 'null'; - } + groundlineType.value = res.data.data.discoveryNode; //发现节点回显 - FangAddList.value = res.data.data.personResponsibleVOS.map(res => { - return { - businessName: res.businessId, //责任人ID - personResponsibleName: res.personResponsibleName, //责任人名称 - responsibilityRatio: res.responsibilityRatio + '%', //占比 - description: res.description, //说明 - tripartite: res.tripartite, //三方责任人 - }; - }); - console.log(FangAddList.value, '责任方回显问题'); - res.data.data.processorVOList.forEach(item => { - if (item) { - if (item.typesOf == 2) { - // 处理方 - Indexform.value.processor.push(item.businessId); - } - } - }); - companyProportion.value = 100 - sum; - ProcessingRecordsName.value = ProcessingRecords.value.filter(item => - warehouseData.value.includes(item.value) - ).label; - console.log(ProcessingRecordsName.value, '匹配到的中文处理方'); - // updateDictionary(columnList[2].checkarr, 'pc_work_order'); //异常类型 - // updateDictionary(columnList[3].checkarr, 'pc_discovery_node'); //发现环节 - getDictionaryBiz('result_handling').then(res => { - console.log(res, '发现环节'); - ProcessingResults.value = res.data.data; - }); - // 处理结果回显 - if (res.data.data.processingResultsVO.processingMoneyEntityList) { - ProcessingList.value = res.data.data.processingResultsVO.processingMoneyEntityList.map( - item => { - Indexform.value.result.push(item.resultType); - return { - input: item.money, - min: 0, - max: 9999999999999999999999999999, - state: item.resultType, - payment: item.compensationMethod, - name: item.resultTypeName, - text: item.compensationMethodName, - compensationTime: item.compensationTime, //支付时间 - paymentUnit: item.paymentUnit, //支付单位 - }; - } - ); - } - // 总金额回显 - TotalClaimAmount.value = res.data.data.processingResultsVO.money; - // 理赔支付时间 - Indexform.value.compensationTime = res.data.data.processingResultsVO.compensationTime; - // 处理结果说明回显 - Indexform.value.resultDescription = res.data.data.processingResultsVO.resultDescription; - - if (res.data.data.completionRecipientEntityList.length > 0) { - CompensationParty.value = []; - res.data.data.completionRecipientEntityList.forEach((item, index) => { - TotalamountReceived.value += Number(item.money); - CompensationParty.value.push({ - state: 1, //状态 - num: item.money, //金额 - name: item.recipient, //受款方名字 - reason: item.reasonReceivingPayment, //受款方原因 - // explains: item.explains, //受款方说明 - cld: index + 1, - id: item.id, - }); + FangAddList.value = res.data.data.personResponsibleVOS.map(res => { + return { + businessName: res.businessId, //责任人ID + personResponsibleName: res.personResponsibleName, //责任人名称 + responsibilityRatio: res.responsibilityRatio + '%', //占比 + description: res.description, //说明 + tripartite: res.tripartite, //三方责任人 + }; }); - } - // 赔款方 - if (res.data.data.completionRecordEntities.length) { - res.data.data.completionRecordEntities.forEach((item, index) => { - TotalamountCompensation.value += Number(item.money); - CompensationParty.value.push({ - state: 0, //状态 - num: item.money, //金额 - name: item.indemnitor, //受款方名字 - reason: item.reason, //受款方原因 - // explains: item.explains, //受款方说明 - cld: index + 1, - id: item.id, - accounting: item.accounting ? item.accounting : '', - warehouseId: item.warehouseId, //仓库 - personResponsibleList: item.compensationPersonnel, //责任人 - }); + console.log(FangAddList.value, '责任方回显问题'); + res.data.data.processorVOList.forEach(item => { + if (item) { + if (item.typesOf == 2) { + // 处理方 + Indexform.value.processor.push(item.businessId); + } + } }); - } - }); -}; -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; - } -}; + companyProportion.value = 100 - sum; -// 发现节点事件 -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: '', - description: '', - }); -}; - -// 责任移除 -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 BatchReturn = () => { - BatchFrom.value.businessDepartment = []; - BatchFrom.value.txt = null; - dialogReturn.value = true; -}; - -// 打回按钮 - -const ConfirmReturn = () => { - repulse.value = true; //开启加载并关闭按钮 - let data = { - processorList: [], - }; - // 过滤满足条件的对象 - let foundObjs = warehouseData.value.filter(obj => - BatchFrom.value.businessDepartment.includes(obj.value) - ); - data['businessId'] = foundObjs.map(item => item.value).join(','); - data['businessName'] = foundObjs.map(item => item.label).join(','); - // 营业部处理 - foundObjs.forEach(item => { - data['processorList'].push({ id: item.value, name: item.label }); - }); - data.reasonReturn = BatchFrom.value.txt; //打回原因 - data.workOrderIds = [$route.query.id]; //异常工单ID - console.log(data, '处理好的值'); - $_batchReturn(data) - .then(res => { - if (res.data.code == 200) { - ElMessage({ - message: res.data.msg, - type: 'success', + getDictionaryBiz('result_handling').then(res => { + console.log(res, '发现环节'); + ProcessingResults.value = res.data.data; + }); + // 处理结果回显 + if (res.data.data.processingResultsVO.processingMoneyEntityList) { + ProcessingList.value = res.data.data.processingResultsVO.processingMoneyEntityList.map( + item => { + Indexform.value.result.push(item.resultType); + return { + input: item.money + '元', + min: 0, + max: 9999999999999999999999999999, + state: item.resultType, + payment: item.compensationMethod, + name: item.resultTypeName, + text: item.compensationMethodName, + compensationTime: item.compensationTime, //支付时间 + paymentUnit: item.paymentUnit, //支付单位 + }; + } + ); + } + // 总金额回显 + TotalClaimAmount.value = res.data.data.processingResultsVO.money; + // 理赔支付时间 + Indexform.value.compensationTime = res.data.data.processingResultsVO.compensationTime; + // 处理结果说明回显 + Indexform.value.resultDescription = res.data.data.processingResultsVO.resultDescription; + + if (res.data.data.completionRecipientEntityList.length > 0) { + CompensationParty.value = []; + res.data.data.completionRecipientEntityList.forEach((item, index) => { + TotalamountReceived.value += Number(item.money); + CompensationParty.value.push({ + state: 1, //状态 + num: item.money, //金额 + name: item.recipient, //受款方名字 + reason: item.reasonReceivingPayment, //受款方原因 + // explains: item.explains, //受款方说明 + cld: index + 1, + id: item.id, + }); + }); + } + // 赔款方 + if (res.data.data.completionRecordEntities.length) { + res.data.data.completionRecordEntities.forEach((item, index) => { + TotalamountCompensation.value += Number(item.money); + CompensationParty.value.push({ + state: 0, //状态 + num: item.money, //金额 + name: item.indemnitor, //受款方名字 + reason: item.reason, //受款方原因 + // explains: item.explains, //受款方说明 + cld: index + 1, + id: item.id, + accounting: item.accounting ? item.accounting : '', + warehouseId: item.warehouseId, //仓库 + compensationPersonnel: item.compensationPersonnel, //责任人 + }); }); - $router.push('/aftersales/aftersalesWorkOrder'); //打回成功跳转到列表 } - }) - .catch(error => { - console.log(error, '错误信息'); - }) - .finally(() => { - repulse.value = false; //关闭加载并关闭按钮 - dialogReturn.value = false; //关闭打回弹窗 }); -}; + }); -// 少货件数对应事件 -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; - } + console.log(Mydata.value, '记录本地登录'); + getDictionaryBiz('result_handling').then(res => { + console.log(res, '发现环节'); + ProcessingResults.value = res.data.data; }); -}; -// 少货按钮取消 -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; - } + // 支付方式字典 + getDictionaryBiz('payment_method').then(res => { + //处理结果字典 + console.log(res); + Paymentmethod.value = res.data.data; }); }; -// 窜货取消事件 -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; +onLoad(); //初始化程序 + +// 是否显示处理结果 +const Processingrelease = () => { + if (Indexform.value.processor.length == 1 && Mydata.value.id == Indexform.value.processor[0]) { + ProcessingreleaseState.value = true; //显示处理放 + } else { + ProcessingreleaseState.value = false; //关闭处理方 } - fleeingState.value = true; //开启弹窗输入 -}; -// 查询包件信息自动回显 -const ChangePackageInfo = (val, index) => { - let data = { - packageCode: val, - }; - $_getAbnormalPackage(data).then(res => { - console.log(res, '包件信息'); - console.log(res.data.data, '包件信息'); - if (res.data.data.length) { - 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].brandName = packageData.brandName; //品牌 - 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; //运单号 - PackageInfo.value[HistorIndex.value].brandName = packageData.brandName; //品牌 - dialogHistoricalPackage.value = false; //关闭历史包件弹窗 - - PackageInfo.value[HistorIndex.value].relatedWorkOrdersId = info.workOrderId; - console.log(PackageInfo.value, '处理好的参数'); -}; -// 历史包件里面的查看 -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; //打开历史包件弹窗 +// 对调查经过输入框进行处理 +const isShowFormItem1 = computed(() => { + return !['1', '2', '5', '6', '7'].includes(groundlineType.value); +}); +// 对调查经过输入框进行处理 +const isShowFormItem2 = computed(() => { + return !['2', '5', '6', '7', '8'].includes(groundlineType.value); +}); +// 聊天刷新 +const Chatrefresh = () => { + Chathistory(); }; +// 底部按钮事件 // 回复 const addireply = () => { $router.push({ @@ -1421,7 +1335,8 @@ const addireply = () => { }, }); }; -// 新增记录跳转 + +// 处理结果 const addingRecord = () => { $router.push({ path: '/aftersales/aftersalesWorkOrderend', @@ -1434,6 +1349,26 @@ const addingRecord = () => { }, }); }; + +// 完结 +const EndJump = () => { + $router.push({ + path: '/aftersales/aftersalesWorkOrderend', + query: { + id: $route.query.id, + name: $route.query.workOrderNumber + '-完结填写', + RouterState: 'end', + index: '2', + workOrderStatus: $route.query.workOrderStatus, //当前单子状态 + }, + }); +}; +// 打回 +const BatchReturn = () => { + BatchFrom.value.businessDepartment = []; + BatchFrom.value.txt = null; + dialogReturn.value = true; +}; // 客服仲裁完结 const CustomerServiceCompleted = () => { $router.push({ @@ -1450,7 +1385,8 @@ const CustomerServiceCompleted = () => { }, }); }; -// 编辑信息 + +// 信息编辑 const EditInformation = () => { $router.push({ path: '/aftersales/aftersalesWorkOrdermodify', @@ -1465,15 +1401,19 @@ const EditInformation = () => { }, }); }; -const EndJump = () => { +// 申诉成立 +const AppealEstablished = () => { $router.push({ - path: '/aftersales/aftersalesWorkOrderend', + path: '/aftersales/aftersalesWorkOrdermodify', query: { - id: $route.query.id, - name: $route.query.workOrderNumber + '-完结填写', - RouterState: 'end', - index: '2', - workOrderStatus: $route.query.workOrderStatus, //当前单子状态 + id: $route.query.id, //这里的id是workOrderId是有申诉列表带入的 + name: $route.query.workOrderNumber + '-申诉编辑', + businessId: $route.query.businessId, + warehouseId: $route.query.warehouseId, + workOrderNumber: $route.query.workOrderNumber, + RouterState: 'Kfend', + Appealeditor: 'appeal', //申诉编辑 + appealID: $route.query.appealID, //申诉ID }, }); }; @@ -1487,48 +1427,67 @@ const AppealRejection = () => { }; $_Cancelappeal(data) .then(res => { - console.log(res, '申诉驳回返回值'); + console.log(res, '申诉驳回返回值'); + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '申诉驳回成功', + type: 'success', + }); + $useStore.commit('DEL_TAG_CURRENT'); //关闭当前页面 + $router.push({ + path: '/aftersales/aftersalesWorkOrder', + }); + } + }) + .catch(res => { + ElMessage({ + showClose: true, + message: '操作失败', + type: 'success', + }); + }) + .finally(() => { + Pageloading.value = false; //关闭加载效果 + }); +}; + +// 工单打回确认按钮 +const ConfirmReturn = () => { + repulse.value = true; //开启加载并关闭按钮 + let data = { + processorList: [], + }; + // 过滤满足条件的对象 + let foundObjs = warehouseData.value.filter(obj => + BatchFrom.value.businessDepartment.includes(obj.value) + ); + data['businessId'] = foundObjs.map(item => item.value).join(','); + data['businessName'] = foundObjs.map(item => item.label).join(','); + // 营业部处理 + foundObjs.forEach(item => { + data['processorList'].push({ id: item.value, name: item.label }); + }); + data.reasonReturn = BatchFrom.value.txt; //打回原因 + data.workOrderIds = [$route.query.id]; //异常工单ID + console.log(data, '处理好的值'); + $_batchReturn(data) + .then(res => { + repulse.value = false; //关闭加载并关闭按钮 + dialogReturn.value = false; //关闭打回弹窗 if (res.data.code == 200) { ElMessage({ - showClose: true, - message: '申诉驳回成功', + message: res.data.msg, type: 'success', }); - $useStore.commit('DEL_TAG_CURRENT'); //关闭当前页面 - $router.push({ - path: '/aftersales/aftersalesWorkOrder', - }); + $router.push('/aftersales/aftersalesWorkOrder'); //打回成功跳转到列表 } }) - .catch(res => { - ElMessage({ - showClose: true, - message: '操作失败', - type: 'success', - }); - }) - .finally(() => { - Pageloading.value = false; //关闭加载效果 + .catch(error => { + repulse.value = false; //关闭加载并关闭按钮 + dialogReturn.value = false; //关闭打回弹窗 }); }; - -// 申诉成立 -const AppealEstablished = () => { - // 编辑信息 - $router.push({ - path: '/aftersales/aftersalesWorkOrdermodify', - query: { - id: $route.query.id, //这里的id是workOrderId是有申诉列表带入的 - name: $route.query.workOrderNumber + '-申诉编辑', - businessId: $route.query.businessId, - warehouseId: $route.query.warehouseId, - workOrderNumber: $route.query.workOrderNumber, - RouterState: 'Kfend', - Appealeditor: 'appeal', //申诉编辑 - appealID: $route.query.appealID, //申诉ID - }, - }); -}; </script> <style scoped lang="scss"> @@ -1536,8 +1495,7 @@ const AppealEstablished = () => { display: flex; flex-wrap: wrap; justify-content: flex-start; - border: 1px solid #dcdfe6; - + border: 1px solid #ccc; .el-form-item { height: 46px; display: flex; @@ -1545,15 +1503,15 @@ const AppealEstablished = () => { margin: 0; margin-bottom: 18px; flex: 1 0 30%; + margin-right: 16px; :deep(.el-form-item__label) { - width: 100px !important; + width: auto !important; justify-content: flex-start; } } :deep(.el-form-item__content) { height: 100%; width: 70% !important; - flex: none; .el-input { height: 100% !important; display: flex; @@ -1611,27 +1569,23 @@ const AppealEstablished = () => { } .Transport_damage_photos { display: flex; - padding: 0 15px; margin-top: 20px; + flex-direction: column; .title { width: 100px; display: block; margin-bottom: 10px; font-size: 14px; - } - :deep(.el-upload-dragger) { - display: flex; - justify-content: center; - align-items: center; + font-weight: bold; + color: #5b5b5b; } } .dialog-footer { width: 100%; display: flex; justify-content: flex-end; - padding: 0 10px; box-sizing: border-box; - padding-right: 36px; + margin-top: 10px; } .investigate { :deep(.el-form-item__content) { @@ -1674,17 +1628,37 @@ const AppealEstablished = () => { display: flex; flex-direction: column; .leftbox { - width: 80%; display: flex; justify-content: space-between; + .el_zb { + :deep(.el-input__inner) { + text-align: center; + } + width: 250px; + text-align: right; + :deep(.el-form-item__label) { + width: auto !important; + } + :deep(.el-input) { + margin-left: 10px; + text-align: right; + } + :deep(.el-form-item__content) { + flex-wrap: nowrap; + } + } } .maxBox { display: flex; align-items: center; width: 30%; margin-right: 16px; + font-size: 14px; + .brand { + margin-right: 0; + } .title { - width: 130px; + width: 120px; font-size: 14px; color: #606266; } @@ -1692,6 +1666,9 @@ const AppealEstablished = () => { width: 100%; } } + .brand { + margin-right: 0; + } .el-btn { margin-left: 5%; border: none; @@ -1706,17 +1683,28 @@ const AppealEstablished = () => { display: flex; flex-direction: column; margin-bottom: 10px; - .leftbox { - width: 80%; display: flex; justify-content: space-between; + width: 100%; } + .maxBox { display: flex; align-items: center; width: 30%; margin-right: 20px; + + :deep(.el-form-item) { + margin: 0; + margin-right: 10px; + + font-size: 12px; + .el-form-item__label { + margin: 0; + width: auto !important; + } + } .title { width: 140px; color: #606266; @@ -1725,57 +1713,104 @@ const AppealEstablished = () => { .el-select { width: 100%; } + :deep(.el-form-item) { + margin-right: 0; + } + } + .brand { + margin-right: 0; } .el-btn { margin-left: 5%; border: none; + display: flex; } .el_btbox { display: flex; - margin-top: 10px; + align-items: center; } } -.PackageInformation { +:deep(.PackageInformation) { margin-bottom: 10px; + width: 100%; + border-left: none; + border-right: none; + .el-tabs__header { + } + .el-tabs__content { + // padding-right: 0; + } + .is-active { + font-weight: bold; + } } .NumTotal { width: 30%; - margin-top: 16px; + margin-top: 10px; display: flex; align-items: center; span { width: 120px; font-size: 14px; + border: 1px solid #ccc; + display: flex; + width: auto; + padding: 4px 12px; } } .Proportion { margin-top: 16px; .title { font-size: 14px; - color: #606266; + border: 1px solid #ccc; + width: auto; + padding: 4px 12px; } } :deep(.is-active) { border-bottom: 1px solid #e4e7ed !important; } -.topClass { - :deep(.el-tabs__content) { +:deep(.topClass) { + border-bottom: none; + .el-tabs__content { padding: 0; } + .is-active { + font-weight: bold; + } } .foot_btn { - width: 100%; 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; } +:deep(.el-upload-dragger) { + display: flex; + align-items: center; + justify-content: center; +} +.box-card { + height: 100% !important; + overflow-y: scroll; +} +:deep(.selector) { + .el-select { + width: 100%; + } +} + .ProcessingResults { width: 100%; min-height: 260px; @@ -1805,19 +1840,30 @@ const AppealEstablished = () => { display: flex; margin-bottom: 20px; height: 30px; - width: 46%; - margin-right: 38px; - :deep(.el-input-number) { - width: 220px; + width: 100%; + justify-content: space-between; + .payment_right { + width: 100%; + display: flex; + :deep(.el-input) { + height: 100% !important; + } + :deep(.money) { + width: 100px; + } } span { - display: block; - width: 30%; - color: #606266; + color: #000000; font-size: 16px; + margin-right: 8px; display: flex; align-items: center; - justify-content: center; + justify-content: flex-end; + width: 80px; + margin-left: 10px; + } + .el_titleName { + display: flex; } } } @@ -1828,14 +1874,13 @@ const AppealEstablished = () => { .name { width: 10%; color: #606266; - - :deep(.el-input--prefix) { - width: 200px; - } } - :deep(.el-input) { + .el-input { width: auto; } + :deep(.el-input--prefix) { + width: 200px; + } } .ZFlptime { margin: 10px 0; @@ -1851,46 +1896,272 @@ const AppealEstablished = () => { font-size: 14px; padding: 10px; cursor: pointer; - width: 200px; + width: 140px; margin: 0 10px; + overflow: hidden; } .Paymentname:hover { border: 1px solid #172e60; } -.el_resj { - margin-top: 20px !important; - :deep(.el-form-item__label) { - justify-content: flex-start; - margin-left: 20px; +.el_Processingresults { + margin-top: 12px; + :deep(.is-active) { + font-weight: bold; + } +} +.el_PaymentUnit { + margin: 0 4px; +} +:deep(.el-input-number) { + width: 180px !important; +} +.Investigationprocess { + height: auto !important; + align-items: flex-start !important; + flex: 1 0 44% !important; + :deep(.el-form-item__content) { + width: 100% !important; + } +} +.el_tool { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + span { font-size: 14px; - width: 100px !important; + border: 1px solid #ccc; + padding: 4px 20px; + color: #000000; + font-weight: 600; } } -.lptime { - height: 30px !important; +.el_nint { + width: 100%; + border-right: none; + border-left: none; + border-bottom: none; + + :deep(.el-tabs__content) { + padding-right: 0; + } + :deep(.is-active) { + font-weight: bold; + } } -:deep(.el-image) { - width: 100% !important; - height: 300px !important; +:deep(.el_inputTop) { + margin-bottom: 0 !important; } -:deep(.el-input) { - height: 100% !important; +.content-max { + display: flex; + justify-content: space-between; + width: 100%; + background-color: #fff; + :deep(.el-card) { + width: 70%; + } + .el-affix { + flex: 1 1 0%; + margin-left: 10px; + } + .el_last { + display: flex; + height: 100%; + :deep(.el-card__body) { + display: flex; + flex-direction: column; + flex: 1; + } + :deep(.dialog-footer) { + flex: 1; + display: flex; + align-items: flex-end; + } + } } -.el_PaymentUnit { + +.right { + width: 100%; + :deep(.el-card__body) { + padding: 10px !important; + } + :deep(.el-timeline) { + padding: 0; + } + .ovhe { + padding: 6px; + .header { + display: flex; + justify-content: space-between; + align-items: center; + .el-tag { + width: 70px; + } + } + } + .content { + position: relative; + :deep(.el-card) { + width: 100%; + } + } + + :deep(.el-card__body:last-child) { + padding: 0px !important; + } + :deep(.el-timeline-item) { + padding-bottom: 30px; + } + :deep(.el-card) { + padding: 10px; + box-sizing: border-box; + } + .ovhe::-webkit-scrollbar { + width: 4px; + height: 0px; + } + .ovhe::-webkit-scrollbar-thumb { + background-color: #12b7f5; + background-image: -webkit-linear-gradient( + 45deg, + rgba(255, 93, 143, 1) 25%, + transparent 25%, + transparent 50%, + rgba(255, 93, 143, 1) 50%, + rgba(255, 93, 143, 1) 75%, + transparent 75%, + transparent + ); + } + + .ovhe::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + background: #f6f6f6; + } + + .ovhe::-webkit-scrollbar-track { + background-color: #fff; /* 设置滚动条槽为透明 */ + } + :deep(.el-tabs__content) { + padding: 0; + } + :deep(.el-timeline-item__node) { + background-color: #8fa3ad; + } + :deep(.el-icon) { + font-size: 16px; + } +} + +.el_Processingparty { + width: 100%; display: flex; align-items: center; - margin-right: 6px; + justify-content: space-between; + font-size: 12px; + margin-bottom: 8px; + box-shadow: -1px 2px 2px 0px #f5f5f5; + padding: 0 4px; + box-sizing: border-box; + border-radius: 4px; + height: 40px; + span { + width: 40px; + } + :deep(.el-select) { + width: 100%; + } span { + font-size: 20px; + } + :deep(.el_Refresh) { + i { + font-size: 30px; + } + } +} + +.ovhe { + position: relative; + overflow-y: scroll; + scroll-behavior: smooth; + .e_ico { display: flex; - width: 80px !important; align-items: center; } - :deep(.el-input) { - width: 150px; + .img { + width: 50px; + height: 50px; + img { + width: 100%; + height: 100%; + } + } + .mp4 { + margin-top: 2px; + span { + display: flex; + align-items: center; + vertical-align: bottom; + cursor: pointer; + } } + .tag { + display: flex; + justify-content: flex-end; + } + .file { + span { + display: flex; + align-items: center; + vertical-align: bottom; + cursor: pointer; + } + } + :deep(.el-timeline-item__timestamp) { + display: none !important; + } +} +.identifying { + display: flex; + align-items: center; + justify-content: space-between; + .el-tag { + width: 70px; + } +} +.identifyingC1 { + background-color: #409eff; + border-radius: 4px; + + border: none; +} +.identifyingC2 { + background-color: #10d070; + border: none; +} +.identifyingC3 { + background-color: #d3832a; + border: none; +} +.CardidentifyingC1, +.CardidentifyingC2, +.CardidentifyingC3 { + box-shadow: -1px -1px 4px 0px #e3e3e3; + border-top-left-radius: 20px; + border-bottom: 1px solid #d5d5d563 !important; + border-right: 1px solid #d5d5d563 !important; } .el-endtabs { - margin-top: 26px; + margin-top: 10px; +} +:deep(.custom-tabs-label) { + font-weight: bold; + display: flex; + align-items: center; + .el-icon { + margin-right: 4px; + } } .payanindemnity { display: flex; @@ -1898,16 +2169,26 @@ const AppealEstablished = () => { margin-top: 20px; justify-content: space-between; .title { - width: 126px; + width: max-content; height: 100%; - display: flex; display: block; - align-items: center; + font-size: 14px; + font-weight: 500; } .sk_input { margin: 0 5px; - margin-left: 20px; + margin-left: 4px; width: 20%; + display: flex; + align-items: center; + span{ + width: 100px; + margin-right: 4px; + display: flex; + justify-content: flex-end; + font-size: 14px; + font-weight: 400; + } } .el-button { border: none; @@ -1917,11 +2198,6 @@ const AppealEstablished = () => { width: 100%; } } - -:deep(.custom-tabs-label) { - display: flex; - align-items: center; -} .paySum { margin-top: 36px; font-size: 14px; @@ -1932,4 +2208,58 @@ const AppealEstablished = () => { align-items: center; } } +:deep(.el-photo) { + margin-top: 10px; + .el-upload--picture-card { + display: none; + } + .Transport_damage_photos { + margin-top: 0; + .el-picture-card { + display: flex; + padding: 6px; + } + } + + .el-tabs__content { + padding: 0; + } + .el-upload-list__item { + margin: 0; + } +} +.arbitrate { + margin-top: 10px; +} +.el_BatchFrom { + width: 70%; +} +.el_form_BatchFrom { + display: flex; + justify-content: space-between; + :deep(.el-select-tags-wrapper) { + .el-tag { + width: 100%; + } + } +} +:deep(#avue-view) { + background-color: #fff; +} +:deep(.el_resj){ + flex-direction: column; + .el-form-item__label{ + justify-content: center; + font-weight: 500; + border: 1px solid #dcdfe6; + width: fit-content; + display: flex; + align-items: center; + padding: 0; + padding: 0 4px; + border-bottom: 0; + color: #172e60; + border-radius: 2px; + } +} </style> diff --git a/src/views/aftersales/aftersalesWorkOrderInfoEnxt.vue b/src/views/aftersales/aftersalesWorkOrderInfoEnxt.vue index 89378eaa..68897717 100644 --- a/src/views/aftersales/aftersalesWorkOrderInfoEnxt.vue +++ b/src/views/aftersales/aftersalesWorkOrderInfoEnxt.vue @@ -1,50 +1,5 @@ <template> <el-card class="box-card" v-loading="editloading" element-loading-text="正在处理中..."> - <el-tabs type="border-card" class="PackageInformation"> - <el-tab-pane label="订单"> - <el-form-item label="异常类型" prop="workOrderType" class="el_inputTop"> - <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="发现节点" prop="discoveryNode" class="el_inputTop"> - <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="异常工单号" class="el_inputTop"> - <el-input - v-model="Indexform.workOrderNumber" - disabled - placeholder="异常工单号(自动生成)" - clearable - /> - </el-form-item> - </el-tab-pane> - </el-tabs> - <el-tabs type="border-card" class="PackageInformation"> <el-tab-pane label="包件信息"> <div class="ResponsibilityBoxS"> @@ -249,8 +204,8 @@ </el-form-item> <!-- 必填 --> <!-- <el-form-item label="异常问题描述"> - <el-input v-model="Indexform.problemDescription" placeholder="请输入异常问题" clearable /> - </el-form-item> --> + <el-input v-model="Indexform.problemDescription" placeholder="请输入异常问题" clearable /> + </el-form-item> --> <el-form-item label="处理方"> <el-select @@ -1119,7 +1074,7 @@ const onLoad = () => { console.log(res, '环节字典'); Indexform.value.workOrderType = res.data.data.find( res => res.dictKey == Indexform.value.workOrderType - ).dictKey; //异常类型回显 + ).dictValue; //异常类型回显 }); //发现环节回显 @@ -1168,7 +1123,7 @@ const onLoad = () => { // 总金额回显 TotalClaimAmount.value = res.data.data.processingResultsVO.money; // 理赔支付时间 - Indexform.value.compensationTime = res.data.data.processingResultsVO.compensationTime; + // Indexform.value.compensationTime = res.data.data.processingResultsVO.compensationTime; // 处理结果说明回显 Indexform.value.resultDescription = res.data.data.processingResultsVO.resultDescription; @@ -1581,8 +1536,11 @@ function removeEmptyProperties(obj) { return obj; } -//表单提交 +//信息编辑表单提交 const ConfirmForm = () => { + + + console.log(ProcessingpartyData.value, '处理方信息'); // 支付方式校验 if (ProcessingList.value.length) { @@ -1825,6 +1783,7 @@ const ConfirmForm = () => { // warehouseId: $route.query.warehouseId == '/' ? '' : $route.query.warehouseId, // 仓库ID warehouseId: item.warehouseId, //责任仓库 personResponsibleList: item.personResponsibleList, //责任人 + }); } else { DataSubmit['completionRecipientEntities'].push({ @@ -1851,7 +1810,7 @@ const ConfirmForm = () => { DataSubmit.aftersalesProcessingResultsDTO['compensationMethod'] = ProcessingList.value .map(item => item.text) .join(','); - + DataSubmit.aftersalesProcessingResultsDTO.resultDescription=Indexform.value.resultDescription, //处理结果说明 DataSubmit.aftersalesProcessingResultsDTO['processingMoneyEntityList'] = ProcessingList.value .map(item => { console.log(item); @@ -1868,12 +1827,14 @@ const ConfirmForm = () => { compensationMethodName: paymentMethodMatch ? paymentMethodMatch.dictValue : '', resultName: item.name, //处理结果名字 paymentUnit: item.paymentUnit, //支付单位 + compensationTime:item.compensationTime,//理赔支付时间 }; } else { return null; } }) .filter(item => item !== null); + //移除的货损图片 DataSubmit = removeEmptyProperties(DataSubmit); @@ -1908,11 +1869,12 @@ const ConfirmForm = () => { }); }; -// 客服仲裁完结 +// 客服仲裁完结 编辑提交 const Arbitrationcompleted = () => { console.log(Copyprocessingresults.value, '初始化处理结果参数'); console.log(ProcessingList.value, '最新的处理结果参数'); + if (Processingresults.value) { // 理赔金额未出编辑 // 处理结果编辑 @@ -1939,7 +1901,6 @@ const Arbitrationcompleted = () => { console.log(missingObjects); data.aftersalesProcessingResultsDTO['assignList'] = missingObjects.map(item => item.id); } - data.aftersalesProcessingResultsDTO['processingMoneyEntityList'] = ProcessingList.value .map(item => { console.log(item); @@ -1966,11 +1927,21 @@ const Arbitrationcompleted = () => { .filter(item => item !== null); // 总金额 - let sum = 0; //金额总计 - for (let i = 0; i < ProcessingList.value.length; i++) { - sum = computeNumber(sum, '+', ProcessingList.value[i].input).result; - } - data.aftersalesProcessingResultsDTO.money = sum; //金额汇总 + // let sum = 0; //金额总计 + // for (let i = 0; i < ProcessingList.value.length; i++) { + // sum = computeNumber(sum, '+', ProcessingList.value[i].input).result; + // } + // data.aftersalesProcessingResultsDTO.money = sum; //金额汇总 + + let TotalAmount=0;//总金额 + ProcessingList.value.forEach(res=>{ + console.log(res); + TotalAmount += Number(res.input) + }) + console.log(TotalAmount,'总金额'); + DataSubmit.aftersalesProcessingResultsDTO.money = TotalAmount; //金额汇总 + + data.aftersalesProcessingResultsDTO['resultType'] = ProcessingList.value .map(item => item.name) .join(','); //处理结果说明文字拼接 @@ -2057,11 +2028,10 @@ const Arbitrationcompleted = () => { }; }); console.log(data, '处理好的值'); - $_updateCompletionEnd(data) - .then(res => { - console.log(res, '完结成功'); - console.log(res, '完结编辑'); - editloading.value = false; //关闭加载效果 + $_updateCompletionEnd(data).then(res => { + console.log(res, '完结成功'); + console.log(res, '完结编辑'); + editloading.value = false; //关闭加载效果 if (res.data.code == 200) { ElMessage({ message: res.data.msg, @@ -2073,10 +2043,9 @@ const Arbitrationcompleted = () => { path: '/aftersales/aftersalesWorkOrder', }); } - }) - .catch(res => { - editloading.value = false; //关闭加载效果 - }); + }).catch(res=>{ + editloading.value = false; //关闭加载效果 + }); return; } @@ -2219,6 +2188,7 @@ const Arbitrationcompleted = () => { resultName: item.name, //处理结果名字 paymentUnit: item.paymentUnit, //支付单位 id: item.id, //当前id + compensationTime:item.compensationTime,//理赔支付时间 }; } else { return null; diff --git a/src/views/aftersales/aftersalesWorkOrderInfoTemp.vue b/src/views/aftersales/aftersalesWorkOrderInfoTemp.vue index 18557d7c..4be73b01 100644 --- a/src/views/aftersales/aftersalesWorkOrderInfoTemp.vue +++ b/src/views/aftersales/aftersalesWorkOrderInfoTemp.vue @@ -1,917 +1,657 @@ <template> - <div class="content-max"> - <el-card class="box-card el_last"> - <div> - <el-tabs type="border-card" class="topClass"> - <el-tab-pane label="订单信息"></el-tab-pane> - <el-tab-pane label="零担信息"></el-tab-pane> - </el-tabs> - - <el-form - :model="Indexform" - label-width="100px" - class="IndexFrom" - ref="IndexForm" - :rules="rules" - disabled - > - <el-form-item label="异常类型" class="el_inputTop"> - <el-select v-model="Indexform.workOrderType" clearable placeholder="选择工单异常类型"> - <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="发现节点" class="el_inputTop"> - <el-select v-model="Indexform.discoveryNode" clearable placeholder="选择发现节点"> - <el-option - v-for="item in DiscoveringNodes" - :key="item.value" - :label="item.label" - :value="item.value" - /> - </el-select> - </el-form-item> + <el-card class="box-card" v-loading="Pageloading" element-loading-text="正在处理中..."> + <el-tabs type="border-card" class="PackageInformation"> + <el-tab-pane label="包件信息"> + <div class="ResponsibilityBoxS"> + <div class="el_btbox" v-for="(item, index) in PackageInfo" :key="index"> + <div class="leftbox"> + <div class="maxBox"> + <span class="title">包条码:</span> + <el-input + disabled + v-model="item.packageCode" + placeholder="请输入包条码" + clearable + :rows="2" + @change="ChangePackageInfo(item.packageCode, index)" + /> + </div> - <el-form-item label="异常工单号" class="el_inputTop el_Workordernumber"> - <el-input - v-model="Indexform.workOrderNumber" - disabled - :placeholder=" - Indexform.workOrderNumber ? Indexform.workOrderNumber : '暂未生成工单号' - " - clearable - /> - </el-form-item> - - <el-tabs type="border-card" class="PackageInformation"> - <el-tab-pane label="包件信息"> - <template #label> - <span class="custom-tabs-label"> - <el-icon><Box /></el-icon> - <span>包件信息</span> - </span> - </template> - <div class="ResponsibilityBoxS"> - <div class="el_btbox" v-for="(item, index) in PackageInfo" :key="index"> - <div class="leftbox"> - <div class="maxBox" v-if="identifying != '2'"> - <el-form-item label="包条码"> - <el-tooltip - :content="item.packageCode ? item.packageCode : '包条码'" - placement="top" - > - <el-input - v-model="item.packageCode" - placeholder="请输入包条码" - clearable - :rows="2" - @change="ChangePackageInfo(item.packageCode, index)" - /> - </el-tooltip> - </el-form-item> - </div> - - <div class="maxBox"> - <el-form-item label="运单号"> - <el-tooltip - :content="item.waybillNumber ? item.waybillNumber : '运单号'" - placement="top" - > - <el-input - v-model="item.waybillNumber" - placeholder="请输入运单号" - @change="ChangePackageInfo(item.packageCode, index)" - /> - </el-tooltip> - </el-form-item> - </div> - - <div class="maxBox"> - <el-form-item label="订单自编号"> - <el-tooltip - :content="item.orderCode ? item.orderCode : '订单自编号'" - placement="top" - > - <el-input - v-model="item.orderCode" - :disabled="identifying != '2'" - :placeholder=" - identifying != '2' ? '订单自编号(自动带出)' : '请输入订单自编号' - " - /> - </el-tooltip> - </el-form-item> - </div> - - <div class="maxBox brand"> - <el-form-item label="品牌"> - <el-tooltip - :content="item.brandName ? item.brandName : '品牌'" - placement="top" - > - <el-input - v-model="item.brandName" - :disabled="identifying != '2'" - :placeholder="identifying != '2' ? '品牌(自动带出)' : '请输入品牌'" - /> - </el-tooltip> - </el-form-item> - </div> - - <div class="maxBox" v-if="identifying != '1'"> - <el-form-item> </el-form-item> - </div> - </div> - </div> - <div class="NumTotal"> - <span>总件数:{{ NumberPackages }}</span> - </div> + <div class="maxBox"> + <span class="title">订单自编码:</span> + <el-input + disabled + v-model="item.orderCode" + placeholder="请输入订单自编号" + clearable + /> </div> - </el-tab-pane> - </el-tabs> - - <!-- 必填(提货环节可以不填写运单号) --> - <!-- 必填 --> - - <el-form-item - label="车次号" - v-if=" - groundlineType == 3 || - groundlineType == 5 || - groundlineType == 7 || - groundlineType == 6 - " - > - <el-input - v-model="Indexform.trainNumber" - placeholder="请输入车次号(干线卸车环节)" - clearable - /> - </el-form-item> - <el-form-item - label="配送时间" - v-if="groundlineType == 5 || groundlineType == 7 || groundlineType == 6" - > - <el-date-picker - v-model="Indexform.deliveryTime" - type="datetime" - format="YYYY-MM-DD" - value-format="YYYY-MM-DD" - placeholder="请选择配送时间" + <div class="maxBox"> + <span class="title">运单号:</span> + <el-input + disabled + v-model="item.waybillNumber" + placeholder="请输入运单号" + clearable + /> + </div> + <div class="maxBox"> + <span class="title">品牌:</span> + <el-input disabled v-model="item.brandName" placeholder="请输入品牌" clearable /> + </div> + </div> + </div> + <div class="NumTotal"> + <span>总件数:{{ PackageInfo.length }}</span> + </div> + </div> + </el-tab-pane> + </el-tabs> + <el-form disabled :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=" + 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="钉钉流程号"> + <el-input v-model="Indexform.processNumber" placeholder="请输入钉钉流程号" /> + </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-item label="调查经过"> + <el-input + disabled + v-model="Indexform.investigationProcess" + placeholder="请输入调查经过" + clearable + :rows="2" + type="textarea" + /> + </el-form-item> + + <el-form-item label="处理方"> + <el-select + v-model="Indexform.processor" + clearable + filterable + multiple + placeholder="请选择处理方" + disabled + > + <el-option + v-for="item in warehouseData" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + <el-form-item label="处理结果"> + <el-select + v-model="Indexform.result" + multiple + filterable + default-first-option + :reserve-keyword="false" + placeholder="请选择处理结果" + @change="changeProcessingResults" + disabled + > + <el-option + v-for="item in ProcessingResults" + :key="item.dictKey" + :label="item.dictValue" + :value="item.dictKey" + /> + </el-select> + </el-form-item> + <el-form-item> </el-form-item> + </el-form> + + <div class="ProcessingResults" v-if="ProcessingList.length"> + <div class="title">处理结果-理赔金额</div> + <div class="Listadmiration"> + <div class="name" v-for="(item, index) in ProcessingList" :key="index"> + <span>{{ item.name }}:</span> + <el-tooltip :content="item.input" placement="top"> + <el-input-number + v-model="item.input" + :min="item.min" + :max="item.max" + @change="TotalChange" + disabled /> - </el-form-item> + </el-tooltip> + <div class="Paymentname"> + {{ item.payment ? item.text : '支付方式' }} + </div> + <div class="el_PaymentUnit"> + <span>支付单位:</span> + <el-input v-model="item.paymentUnit" disabled placeholder="暂无支付单位" /> + </div> + <el-date-picker + disabled + v-model="item.compensationTime" + type="datetime" + format="YYYY-MM-DD" + value-format="YYYY-MM-DD HH:mm:ss" + placeholder="理赔支付时间" + /> + </div> + </div> - <!-- 必填 --> + <div class="el_tool"> + <span>总金额:{{ TotalClaimAmount }}</span> + </div> + </div> + <!-- 处理结果说明 --> + <el-form-item label="处理结果说明" class="el_resj"> + <el-input + v-model="Indexform.resultDescription" + placeholder="请输入处理结果说明" + clearable + :autosize="{ minRows: 3, maxRows: 4 }" + type="textarea" + disabled + /> + </el-form-item> + + <el-tabs type="border-card"> + <el-tab-pane label="内部责任划分"> + <div class="ResponsibilityBox"> + <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" + disabled + > + <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)" + disabled + > + <el-option + v-for="item in warehouseData" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </div> - <el-form-item - label="配送司机" - prop="deliveryDriver" - v-if="groundlineType == 5 || groundlineType == 7 || groundlineType == 6" - > - <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.driverName + '-' + item.trainNumber" - :value="item.id" - /> - </el-select> - </el-form-item> - - <el-form-item label="车辆路线" v-if="groundlineType == 3"> - <el-input v-model="Indexform.vehicleRoute" placeholder="请输入车辆路线" clearable /> - </el-form-item> - - <el-form-item label="发货时间" v-if="groundlineType == 2"> - <el-date-picker - v-model="Indexform.deliverGoodsTime" - type="datetime" - format="YYYY-MM-DD" - value-format="YYYY-MM-DD HH:mm:ss" - placeholder="请选择发货时间" - /> - </el-form-item> - - <el-form-item - label="发现时间" - v-if=" - groundlineType == 4 || - groundlineType == 5 || - groundlineType == 6 || - groundlineType == 7 - " - > - <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="一级品"> - <el-input v-model="Indexform.first" placeholder="请输入一级品类" /> - </el-form-item> - - <el-form-item label="二级品"> - <el-input v-model="Indexform.secondary" placeholder="请输入二级品类" /> - </el-form-item> - - <el-form-item label="入库时间" v-if="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="请输入运单商场" /> - </el-form-item> - - <el-form-item label="合作模式"> - <el-input - v-model="Indexform.typeServiceName" - disabled - :placeholder=" - Indexform.typeServiceName ? Indexform.typeServiceName : '暂未查询到合作模式' - " - clearable - /> - </el-form-item> - - <!-- <el-form-item label="钉钉流程号"> - <el-input v-model="Indexform.processNumber" placeholder="请输入钉钉流程号" /> - </el-form-item> --> - - <!-- 必填 --> - <!-- <el-form-item label="异常问题描述"> - <el-input v-model="Indexform.problemDescription" placeholder="请输入异常问题" clearable /> - </el-form-item> --> - - <el-form-item label="处理方"> - <el-select - v-model="Indexform.processor" - clearable - filterable - multiple - placeholder="请选择处理方" - @change="Processingrelease" - > - <el-option - v-for="item in warehouseData" - :key="item.value" - :label="item.label" - :value="item.value" - /> - </el-select> - </el-form-item> - - <el-form-item v-if="isShowFormItem1"> </el-form-item> - <el-form-item v-if="isShowFormItem2"> </el-form-item> - - <el-tabs type="border-card" class="el_nint"> - <el-tab-pane> - <template #label> - <span class="custom-tabs-label"> - <el-icon><List /></el-icon> - <span>内部责任划分</span> - </span> - </template> - <div class="ResponsibilityBox"> - <div class="el_btbox" v-for="(item, index) in FangAddList" :key="index"> - <div class="leftbox"> - <div class="maxBox"> - <!-- 提货环节 --> - <el-form-item label="责任方"> - <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="请选择责任方" - > - <el-option - v-for="item in warehouseData" - :key="item.value" - :label="item.label" - :value="item.value" - /> - </el-select> - </el-form-item> - </div> - - <div class="maxBox"> - <el-form-item label="责任人"> - <el-select - v-if="groundlineType != 1" - v-model="item.personResponsibleName" - clearable - filterable - placeholder="请选责任人" - > - <el-option - v-for="item in item.personResponsibleList" - :key="item.id" - :label="item.name" - :value="item.id" - /> - </el-select> - - <el-tooltip :content="item.personResponsibleName" placement="top" v-else> - <el-input v-model="item.personResponsibleName" placeholder="责任人" /> - </el-tooltip> - </el-form-item> - </div> - <div class="maxBox el_zb"> - <el-form-item label="占比" class="title"> - <el-tooltip :content="item.responsibilityRatio" placement="top"> - <el-input - :controls="false" - v-model="item.responsibilityRatio" - placeholder="0" - :min="0" - :max="item.ProportionMax" - v-percentage - /> - </el-tooltip> - </el-form-item> - </div> - <div class="maxBox"> - <el-form-item label="三方责任人"> - <el-tooltip :content="item.tripartite" placement="top"> - <el-input v-model="item.tripartite" placeholder="三方责任人" /> - </el-tooltip> - </el-form-item> - </div> - - <div class="maxBox brand"> - <el-form-item label="说明"> - <el-tooltip :content="item.description" placement="top"> - <el-input - v-model="item.description" - placeholder="请输入说明 " - :rows="2" - /> - </el-tooltip> - </el-form-item> - </div> - </div> - </div> - <div class="Proportion"> - <span class="title">公司占比:{{ companyProportion }}%</span> - </div> + <div class="maxBox"> + <span class="title">责任人:</span> + <el-select + v-model="item.personResponsibleName" + clearable + filterable + placeholder="请选责任人" + disabled + > + <el-option + v-for="item in personResponsibleList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> </div> - </el-tab-pane> - </el-tabs> - </el-form> - <el-tabs type="border-card" class="el_Processingresults"> - <el-tab-pane> - <template #label> - <span class="custom-tabs-label"> - <el-icon><EditPen /></el-icon> - <span>处理结果</span> - </span> - </template> - <div class="selector"> - <el-select - v-model="Indexform.result" - multiple - filterable - default-first-option - :reserve-keyword="false" - placeholder="暂无处理结果" - disabled - > - <el-option - v-for="item in ProcessingResults" - :key="item.dictKey" - :label="item.dictValue" - :value="item.dictKey" + <div class="maxBox"> + <span class="title">占比:</span> + <el-input + v-model="item.responsibilityRatio" + placeholder="请输入占比 " + :rows="2" + disabled /> - </el-select> - </div> - - <div class="ProcessingResults" v-if="ProcessingList.length"> - <div class="title">处理结果-理赔金额</div> - <div class="Listadmiration"> - <div class="name" v-for="(item, index) in ProcessingList" :key="index"> - <div class="payment_right"> - <div class="el_titleName"> - <span>{{ item.name }}</span> - <el-input disabled class="money" v-model="item.input" /> - </div> - <div class="el_titleName"> - <span>支付方式</span> - <div class="Paymentname"> - {{ item.payment ? item.text : '暂未选择支付方式' }} - </div> - </div> - - <div class="el_titleName"> - <span>支付单位</span> - <div class="el_PaymentUnit"> - <el-input disabled v-model="item.paymentUnit" placeholder="支付单位" /> - </div> - </div> - - <div class="el_titleName"> - <span>支付时间</span> - <el-date-picker - v-model="item.compensationTime" - type="datetime" - format="YYYY-MM-DD" - value-format="YYYY-MM-DD HH:mm:ss" - placeholder="理赔支付时间" - disabled - /> - </div> - </div> - </div> </div> - - <div class="el_tool"> - <span>总金额:{{ TotalClaimAmount }}元</span> + <div class="maxBox"> + <span class="title">三方责任人:</span> + <el-input v-model="item.tripartite" placeholder="请输入三方责任人" disabled /> + </div> + <div class="maxBox"> + <span class="title">说明:</span> + <el-input + disabled + v-model="item.description" + placeholder="请输入说明 " + clearable + :rows="2" + /> </div> </div> + </div> + <div class="Proportion"> + <span class="title">公司占比:{{ companyProportion }}%</span> + </div> + </div> + </el-tab-pane> + </el-tabs> + <!-- 完结信息 --> + <el-tabs type="border-card" class="demo-tabs el-endtabs" v-if="UserPermissions != '仓库客服'"> + <el-tab-pane> + <template #label> + <span class="custom-tabs-label"> + <el-icon><calendar /></el-icon> + <span>完结信息</span> + </span> + </template> + + <div class="payanindemnity" v-for="(item, index) in CompensationParty" :key="index"> + <div class="el_pklab"> + <span class="title" :style="{ color: item.state != 0 ? '#000' : '#F56C6C' }" + >{{ item.state == 0 ? '赔款方' : '受款方' }}{{ item.cld }}</span + > + </div> - <!-- 处理结果说明 --> - <el-form-item label="处理结果说明" class="el_resj" v-if="ProcessingList.length"> + <div class="el_pkLi"> + <div class="sk_input"> <el-input - v-model="Indexform.resultDescription" - placeholder="请输入处理结果说明" - clearable - :autosize="{ minRows: 3, maxRows: 4 }" - type="textarea" + v-model="item.name" + :placeholder="item.state == 0 ? '暂无赔款方' : '暂无受款方'" disabled /> - </el-form-item> - </el-tab-pane> - </el-tabs> - - <!-- 完结信息 --> - <el-tabs - type="border-card" - class="demo-tabs el-endtabs" - v-if="UserPermissions != '仓库客服'" - > - <el-tab-pane> - <template #label> - <span class="custom-tabs-label"> - <el-icon><calendar /></el-icon> - <span>完结信息</span> - </span> - </template> - - <div class="payanindemnity" v-for="(item, index) in CompensationParty" :key="index"> - <div class="el_pklab"> - <span class="title" :style="{ color: item.state != 0 ? '#000' : '#F56C6C' }" - >{{ item.state == 0 ? '赔款方' : '受款方' }}{{ item.cld }}</span - > - </div> - - <div class="el_pkLi"> - <div class="sk_input"> - <el-tooltip :content="item.name" placement="top"> - <el-input - v-model="item.name" - :placeholder="item.state == 0 ? '暂无赔款方' : '暂无受款方'" - disabled - /> - </el-tooltip> - </div> - <div class="sk_input"> - <span>原因</span> - <el-tooltip :content="item.reason" placement="top"> - <el-input v-model="item.reason" placeholder="暂无原因" disabled /> - </el-tooltip> - </div> - <div class="sk_input"> - <span>金额</span> - <el-tooltip :content="item.num?item.num:'0'" placement="top"> - <el-input - @input="amountMoney" - :min="0" - v-model="item.num" - placeholder="0" - disabled - /> - </el-tooltip> - </div> - <!-- 赔款方是那个仓库的 --> - <div class="sk_input" v-if="item.state == 0"> - <span>仓库</span> - <el-select v-model="item.warehouseId" disabled filterable placeholder="暂无仓库"> - <el-option - v-for="item in warehouseData" - :key="item.value" - :label="item.label" - :value="item.value" - /> - </el-select> - - </div> - - <div class="sk_input" v-if="item.state == 1"></div> - <!-- 责任人 --> - <div class="sk_input" v-if="item.state == 0"> - <span>责任人</span> - <el-tooltip :content="item.compensationPersonnel?item.compensationPersonnel:'暂无责任人'" placement="top"> - <el-input - v-model="item.compensationPersonnel" - placeholder="暂无责任人" - clearable - :rows="2" - disabled - /> - </el-tooltip> - </div> - - <div class="sk_input" v-if="item.state == 1"></div> - </div> </div> - <div class="paySum"> - <span> - <el-icon><Coin /></el-icon>赔款金额总和:<b>{{ TotalamountCompensation }}</b></span - > - <span> - <el-icon><Coin /></el-icon>受款金额总和:<b>{{ TotalamountReceived }}</b></span - > + <div class="sk_input"> + <el-input v-model="item.reason" placeholder="暂无原因" disabled /> </div> - </el-tab-pane> - </el-tabs> - - <!-- 仲裁原因 --> - <!-- v-if="routerState == 'end'" --> - <div class="arbitrate" v-if="UserPermissions != '仓库客服'"> - <el-tabs type="border-card" class="demo-tabs"> - <el-tab-pane> - <template #label> - <span class="custom-tabs-label"> - <el-icon><Star /></el-icon> - <span>仲裁原因</span> - </span> - </template> - + <div class="sk_input"> <el-input - v-model="Indexform.arbitrate" - type="textarea" - :autosize="{ minRows: 5, maxRows: 4 }" + @input="amountMoney" + :min="0" + v-model="item.num" + placeholder="金额" disabled - placeholder="暂无仲裁原因" /> - </el-tab-pane> - </el-tabs> - </div> - - - - <!-- 照片回显 --> - <el-tabs type="border-card" class="demo-tabs el-photo"> - <el-tab-pane> - <template #label> - <span class="custom-tabs-label"> - <el-icon><Picture /></el-icon> - <span>{{ - SelectType == 1 ? '运损照片' : SelectType == 3 ? '窜货照片' : '照片' - }}</span> - </span> - </template> - <!-- 照片 --> - <div class="Transport_damage_photos"> - <el-upload - disabled - 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 - class="el-picture-card" - > - <el-icon><Plus /></el-icon> - </el-upload> - - <el-dialog v-model="dialogImgList" width="30%"> - <el-image - :src="amplifyurl" - :zoom-rate="1.2" - :max-scale="7" - :min-scale="0.2" - :preview-src-list="amplifysrcList" - :initial-index="4" - fit="cover" + </div> + <!-- 赔款方是那个仓库的 --> + <div class="sk_input" v-if="item.state == 0"> + <el-select v-model="item.warehouseId" disabled filterable placeholder="暂无仓库"> + <el-option + v-for="item in warehouseData" + :key="item.value" + :label="item.label" + :value="item.value" /> - </el-dialog> + </el-select> </div> - </el-tab-pane> - </el-tabs> + <div class="sk_input" v-if="item.state == 1"></div> + <!-- 责任人 --> + <div class="sk_input" v-if="item.state == 0"> + <el-input + v-model="item.personResponsibleList" + placeholder="暂无责任人" + clearable + :rows="2" + disabled + /> + </div> - </div> - <div class="dialog-footer"> - <el-button type="primary" v-if="PermissionButton.reply" @click="addireply">回复</el-button> - <el-button type="primary" v-if="PermissionButton.Processing_results" @click="addingRecord" - >处理结果 - </el-button> - <el-button type="primary" v-if="PermissionButton.work_order_completion" @click="EndJump" - >完结</el-button - > - <el-button type="primary" v-if="PermissionButton.repulse" @click="BatchReturn" - >打回</el-button - > - <el-button - type="primary" - v-if="PermissionButton.apply_arbitration" - @click="CustomerServiceCompleted" - >客服仲裁完结</el-button - > - <el-button - type="primary" - v-if="PermissionButton.information_editing" - @click="EditInformation" - >信息编辑</el-button - > - <el-button - type="primary" - v-if="PermissionButton.Appeal_established" - @click="AppealEstablished" - >申诉成立</el-button - > - <el-button type="primary" v-if="PermissionButton.Appeal_rejection" @click="AppealRejection" - >申诉驳回</el-button - > - </div> - </el-card> - - <el-affix :offset="msgTop"> - <div class="right"> - <el-tabs type="border-card"> - <div class="content"> - <el-tab-pane - label="调查记录" - v-loading="Msgloading" - element-loading-text="正在获取记录..." - > - <div class="el_Processingparty"> - <div></div> - <div class="el_Refresh" @click="Chatrefresh"> - <el-button type="primary">刷新</el-button> - </div> - </div> - <div class="ovhe" :style="{ height: msgHight + 'px' }" ref="scrollContainer"> - <el-timeline> - <el-timeline-item - placement="top" - v-for="(item, index) in MessageContent" - :key="index" - > - <el-card - :class="{ - CardidentifyingC1: item.difference == '1', - CardidentifyingC2: item.difference == '2', - CardidentifyingC3: item.difference == '3', - 'mx-1': true, - }" - > - <div class="header"> - <div class="e_ico"> - <el-icon><User /></el-icon>: - <h4>{{ item.username }}【{{ item.name }}】</h4> - </div> - - <el-tag - :class="{ - identifyingC1: item.difference == '1', - identifyingC2: item.difference == '2', - identifyingC3: item.difference == '3', - 'mx-1': true, - }" - effect="dark" - >{{ - item.difference == '1' - ? ' 调查记录' - : item.difference == '2' - ? '指定记录' - : item.difference == '3' - ? '操作记录' - : '' - }} - </el-tag> - </div> - - <div class="e_ico"> - <el-icon><ChatRound /></el-icon>:<span> {{ item.content }}</span> - </div> - - <div class="img" v-if="item.img"> - <el-image - :src="item.img" - :zoom-rate="1.2" - :max-scale="7" - :min-scale="0.2" - :preview-src-list="item.imgList" - :initial-index="4" - fit="cover" - /> - </div> - <div class="mp4" @click="AddVideoPreview(index)" v-if="item.mp4"> - <span - >视频: <el-icon><VideoPlay /></el-icon>点击预览 - </span> - </div> - - <div class="file" v-if="item.file" @click="FileDownload(index)"> - <a :href="item.file"> - <span - >文件: <el-icon><FolderOpened /></el-icon> 点击下载 - </span> - </a> - </div> - - <div class="identifying"> - <div class="e_ico"> - <el-icon><Timer /></el-icon>: - <p>{{ item.time }}</p> - </div> - <div - class="tag" - v-if=" - (msgState == 1 || msgState == 2 || msgState == 3) && item.identifying - " - > - <el-tag class="mx-1" effect="dark" - >{{ - msgState == 1 - ? ' 待回复' - : msgState == 2 - ? '已回复' - : msgState == 3 - ? '已超时' - : '' - }} - </el-tag> - </div> - </div> - </el-card> - </el-timeline-item> - </el-timeline> - </div> - <!-- 输入框 --> - </el-tab-pane> + <div class="sk_input" v-if="item.state == 1"></div> </div> - </el-tabs> - </div> - </el-affix> - - <!-- 打回弹窗 --> - <el-dialog v-model="dialogReturn" title="工单打回" width="40%" draggable class="plAllret"> - <el-form - v-loading="repulse" - element-loading-text="正在打回中..." - label-position="top" - label-width="100px" - :model="BatchFrom" - class="el_form_BatchFrom" - > - <el-form-item label="打回原因" class="el_BatchFrom"> - <el-input v-model="BatchFrom.txt" type="textarea" :rows="4" /> - </el-form-item> - - <el-form-item label="流转营业部"> - <el-select - v-model="BatchFrom.businessDepartment" - multiple - filterable - default-first-option - :reserve-keyword="false" - placeholder="请选择活动区域" + </div> + <div class="paySum"> + <span> + <el-icon><Coin /></el-icon>赔款金额总和:<b>{{ TotalamountCompensation }}</b></span > - <el-option - v-for="item in warehouseData" - :key="item.value" - :label="item.label" - :value="item.value" - /> - </el-select> - </el-form-item> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="dialogReturn = false">取消</el-button> - <el-button type="primary" @click="ConfirmReturn" :disabled="repulse"> 确定 </el-button> - </span> - </template> - </el-dialog> - </div> + <span> + <el-icon><Coin /></el-icon>受款金额总和:<b>{{ TotalamountReceived }}</b></span + > + </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 + disabled + 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="dialogImgList" width="30%"> + <el-image + :src="amplifyurl" + :zoom-rate="1.2" + :max-scale="7" + :min-scale="0.2" + :preview-src-list="amplifysrcList" + :initial-index="4" + fit="cover" + /> + </el-dialog> + </div> + <!-- appeal为真表示正常进入为假表示从申诉列表进入 --> + <div class="foot_btn" v-if="!appeal"> + <!-- v-if="PermissionButton.reply" + v-if="PermissionButton.processing_completed" + v-if="PermissionButton.work_order_completion" + v-if="PermissionButton.repulse" + v-if="PermissionButton.arbitration_completed" + v-if="PermissionButton.information_editing" --> + <el-button type="primary" @click="addireply">回复</el-button> + <el-button type="primary" @click="addingRecord" v-if="$route.query.workOrderStatus != '21'" + >处理结果</el-button + > + <el-button type="primary" @click="EndJump">完结 </el-button> + <el-button type="primary" @click="BatchReturn">打回 </el-button> + <el-button type="primary" @click="CustomerServiceCompleted">客服仲裁完结 </el-button> + <el-button @click="EditInformation">信息编辑</el-button> + </div> + <div class="foot_btn" v-if="appeal && AppealReview"> + <el-button type="primary" @click="AppealEstablished">申诉成立 </el-button> + <el-button type="primary" @click="AppealRejection">申诉驳回 </el-button> + </div> + </el-card> + <!-- 批量打回弹窗 --> + <el-dialog v-model="dialogReturn" title="批量打回" width="40%" draggable class="plAllret"> + <el-form + v-loading="repulse" + element-loading-text="正在打回中..." + label-position="top" + label-width="100px" + :model="BatchFrom" + > + <el-form-item label="打回原因"> + <el-input v-model="BatchFrom.txt" type="textarea" :rows="4" /> + </el-form-item> + + <el-form-item label="流转营业部"> + <el-select + v-model="BatchFrom.businessDepartment" + multiple + filterable + default-first-option + :reserve-keyword="false" + placeholder="请选择活动区域" + > + <el-option + v-for="item in warehouseData" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogReturn = false">取消</el-button> + <el-button type="primary" @click="ConfirmReturn" :disabled="repulse"> 确定 </el-button> + </span> + </template> + </el-dialog> </template> <script setup> -import { ElMessage, ElMessageBox } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import { ElMessageBox } from 'element-plus'; import { useRouter, useRoute } from 'vue-router'; -import { useStore } from 'vuex'; -const $useStore = useStore(); import { getDictionaryBiz } from '@/api/system/dict'; //字典 -import { getDeptWarehouse } from '@/api/basicdata/basicdataWarehouse'; //处理方 +import { getDetailWarehouse, getDeptWarehouse } from '@/api/basicdata/basicdataWarehouse'; //处理方 +import { AddressClosed } from '@/utils/util'; +import { useStore } from 'vuex'; import { - $_getTrackRecord, - $_getSurveyRecord, + $_getList, + $_submit, + $_getDetail, + $_remove, + $_getBusinessDepartmentUser, + $_getAbnormalPackage, $_getInfo, $_batchReturn, $_Cancelappeal, } from '@/api/aftersales/aftersalesWorkOrder'; -import { ref, reactive, computed, onMounted } from 'vue'; +import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue'; + import { getToken } from '@/utils/auth'; const $router = useRouter(); const $route = useRoute(); const Indexform = ref({ packList: [], decreaseImageEntityList: [], //处理好的图片数据 - discoveryNode: '1', }); //首页新增表单 -const pageState = ref(false); //页面加载状态 -const ProcessingResults = ref([]); //处理结果列表选项 +const dialogImgList = ref(false); const IndexException = ref([]); //异常类型下拉选择 -const ZFname = ref(''); //支付名字预留状态 -const IndexForm = ref(null); //表格ref实力 const DiscoveringNodes = ref([]); //发现节点下拉选择 +const ProcessingResults = ref([]); //处理结果列表选项 const warehouseData = ref([]); //处理方 const SelectType = ref(null); //类型 +const BatchFrom = ref({}); //打回内容 +const StateType = ref(true); //类型 const HistoricalPackageinput = ref(''); //历史包件选择 const dialogImageUrl = ref(null); //图片 +const TotalamountCompensation = ref(0); //赔款总金额 +const TotalamountReceived = ref(0); //受款总金额 const dialogVisible = ref(null); //图片 +const ProcessingList = ref([]); //处理结果已经选择的列表 const groundlineSet = ref(true); //干线条件都满足 -const TotalClaimAmount = ref(0); //总金额 const groundlineType = ref(null); //干线状态 -const Inputbox = ref(true); //调查经过输入框状态 const ShortageState = ref(false); //少货件数弹窗状态 +const Pageloading = ref(false); //申诉列表 const fleeingState = ref(false); //窜货件数弹窗 const ShortageList = ref([]); //少货件数 const fleeingList = ref([]); //窜货件数 const valueStrictly = ref(); -const ProcessingreleaseState = ref(true); //是否可以填写处理结果 const routerID = ref(null); //路由参数ID const routerState = ref(''); //路由状态 const personResponsibleList = ref([]); //责任人列表 -const ZFdialog = ref(false); //支付方式弹出 -const companyProportion = ref(100); //公司占比 +const companyProportion = ref(0); //公司占比 const identifying = ref(1); //订单,零担状态 const dialogHistoricalPackage = ref(false); //历史包件弹窗 const HistoricalPackageList = ref([]); //历史包件数组 const HistorIndex = ref(0); //历史包件索引 -const NumberPackages = ref(0); //包件个数 -const dialogImgList = ref(false); //图片预览弹窗 +const TotalClaimAmount = ref(0); //总金额 +const dialogReturn = ref(false); //打回弹窗 +const ProcessingRecords = ref([]); //处理放记录用于匹配按钮 +const ProcessingRecordsName = ref([]); //匹配的处理方中文名字 +const repulse = ref(false); //加载效果 const amplifyurl = ref(''); //当前点击的图片 const amplifysrcList = ref([]); //图片循环列表 -const ProcessingList = ref([]); //处理结果已经选择的列表 -const Paymentmethod = ref([]); //支付方式 -const Mydata = ref(); //当前登录人信息 -const UserPermissions = ref(); //当前登录人角色身份 -// ====== -const MessageContent = ref([]); //调查记录 -const scrollContainer = ref(null); //客服实例 -const msgHight = ref(100); //聊天框消息高度 -const msgTop = ref(0); //调查记录距离页面吸顶记录 -const msgState = ref(0); -const Msgloading = ref(false); -const TotalamountCompensation = ref(0); //赔款总金额 -const TotalamountReceived = ref(0); //受款总金额 -const BatchFrom = ref({}); //打回内容 -const dialogReturn = ref(false); //打回弹窗 +const RouteIndexs = ref(''); //进入前的页面索引 +const UserPermissions = ref(''); //当前状态 +const warehouseInfo = ref(''); //仓库信息 +const warehouseState = ref(false); //仓库权限 +const $useStore = useStore(); const appeal = ref(false); //工单申诉状态 const AppealReview = ref(false); //申诉状态只能查看 +const accessControl = $useStore.getters.permission; + const CompensationParty = ref([ { name: '', @@ -920,7 +660,7 @@ const CompensationParty = ref([ reason: '', cld: 1, warehouseId: null, - compensationPersonnel: '', + personResponsibleList: '', }, //赔款方 // explains: '' { @@ -930,16 +670,14 @@ const CompensationParty = ref([ reason: '', cld: 1, warehouseId: null, - compensationPersonnel: '', + personResponsibleList: '', }, //受款方 // explains: '' ]); //收/赔 -// ======= - const PackageInfo = ref([ //包件信息 - { packageCode: '', orderCode: '', waybillNumber: '', brandName: '', state: false }, + { packageCode: '', orderCode: '', waybillNumber: '', brandName: '' }, ]); // 责任方列表 const FangAddList = ref([ @@ -949,7 +687,6 @@ const FangAddList = ref([ responsibilityRatio: '', description: '', tripartite: '', - ProportionMax: 100, }, ]); // 提货责任方 @@ -967,120 +704,6 @@ const responsible = ref([ label: '物流', }, ]); - -onMounted(() => { - msgHight.value = window.innerHeight * 0.8; - console.log(msgHight.value, '处理好的页面高度'); - msgTop.value = window.innerHeight * 0.1; - console.log(msgTop.value, '处理好的页面高度'); - // 滚动到最后 - setTimeout(() => { - const container = scrollContainer.value; - if (container) { - container.scrollTop = container.scrollHeight; - } - }, 0); -}); - -// 底部按钮权限 -const PermissionButton = computed(() => { - return { - reply: !appeal.value, //回复 - Processing_results: !appeal.value && $route.query.workOrderStatus != '21', //处理结果 - work_order_completion: !appeal.value, //完结 - repulse: !appeal.value, //打回 - apply_arbitration: !appeal.value, //客服仲裁完结 - information_editing: !appeal.value, //信息编辑 - Appeal_established: appeal.value && AppealReview.value, //申诉成立 - Appeal_rejection: appeal.value && AppealReview.value, //申诉驳回 - }; -}); - -// 聊天记录获取 -const Chathistory = res => { - Msgloading.value = true; - let filetype = ''; //文件类型 - - if (UserPermissions.value != '仓库客服') { - console.log(UserPermissions.value, '当前不是仓库客服'); - $_getTrackRecord({ - id: $route.query.id, - }) - .then(res => { - MessageContent.value = []; //先清空内容,防止内容重复叠加 - res.data.data.surveyRecordEntities.forEach(item => { - MessageContent.value.unshift({ - time: item.createTime, //时间 - content: item.processingResults, //消息内容 - name: item.addDepartment, //营业部名称 - username: item.addPeople, //用户名 - img: filetype == 'png' ? item.pictureUrl : '', - file: filetype == 'docx' ? item.pictureUrl : '', - mp4: filetype == 'mp4' ? item.pictureUrl : '', - imgList: [filetype == 'png' ? item.pictureUrl : ''], - difference: item.difference, - identifying: false, //待回复标识 - }); - }); - setTimeout(() => { - const container = scrollContainer.value; - if (container) { - container.scrollTop = container.scrollHeight; - } - }, 0); - console.log(res, '聊天记录'); - Msgloading.value = false; //关闭加载效果 - }) - .catch(res => { - Msgloading.value = false; //关闭加载效果 - }); - } else { - $_getSurveyRecord({ - id: $route.query.id, - }) - .then(res => { - MessageContent.value = []; //先清空内容,防止内容重复叠加 - console.log(res, '聊天返回值'); - // 仓库客服不需要操作记录 - if (res.data.data.processorVOList) { - if (res.data.data.processorVOList.length) { - msgState.value = res.data.data.processorVOList[0].processingStatus; //获取聊天状态 - } - } - res.data.data.surveyRecordEntities.forEach(item => { - if (item.pictureUrl) { - filetype = Fileidentifier(item.pictureUrl); - } - MessageContent.value.push({ - time: item.createTime, //时间 - content: item.content, //消息内容 - name: item.addDepartment, //营业部名称 - username: item.addPeople, //用户名 - img: filetype == 'png' ? item.pictureUrl : '', - file: filetype == 'docx' ? item.pictureUrl : '', - mp4: filetype == 'mp4' ? item.pictureUrl : '', - imgList: [filetype == 'png' ? item.pictureUrl : ''], - difference: item.difference, - identifying: true, //是否显示待回复按钮 - }); - }); - setTimeout(() => { - const container = scrollContainer.value; - if (container) { - container.scrollTop = container.scrollHeight; - } - }, 0); - - console.log(res, '聊天记录'); - Msgloading.value = false; //关闭加载效果 - }) - .catch(res => { - Msgloading.value = false; //关闭加载效果 - }); - } -}; - -const DeliveryDriver = ref([]); // 图片列表 const fileList = ref([]); // 字典公共函数 @@ -1095,6 +718,23 @@ function updateDictionary(targetArray, dictionaryType) { }); }); } + +// 获取角色权限 +getDictionaryBiz('after_sales_visits').then(res => { + console.log(res, '角色字典'); + const matchingItem = res.data.data.find( + item => item.dictValue == JSON.parse(localStorage.getItem('TWMS-userInfo')).content.role_name + ); + if (matchingItem) { + UserPermissions.value = matchingItem.dictValue; + } else { + UserPermissions.value = '仓库客服'; + } + console.log(UserPermissions.value, '当前角色权限'); +}); + +warehouseInfo.value = localStorage.getItem('WarehouseName'); + // 图片上传必须携带TOKEN const headers = computed(() => { return { 'Blade-Auth': 'Bearer ' + getToken() }; @@ -1109,31 +749,168 @@ const doubledCount = computed(() => { 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'], '图片列表'); - amplifysrcList.value.push(response.data.link); } }; +// 后台控制权限按钮 +const PermissionButton = computed(() => { + return { + workAdd: accessControl.workAdd, //新增 + batch_return: accessControl.batch_return, //批量打回 + assign: accessControl.assign, //工单指派 + apply_arbitration: accessControl.apply_arbitration, //申请仲裁 + batch_completion: accessControl.batch_completion, //批量完结 + representations: accessControl.representations, //申诉 + reply: accessControl.reply, //回复 + processing_completed: accessControl.processing_completed, //处理完结 + work_order_completion: accessControl.work_order_completion, //完结 + repulse: accessControl.repulse, //打回 + arbitration_completed: accessControl.arbitration_completed, //仲裁完结 + information_editing: accessControl.information_editing, //信息编辑 + }; +}); +// const PermissionButtonS = computed(() => { +// return { +// workAdd:accessControl.workAdd,//新增 +// batch_return:accessControl.batch_return,//批量打回 +// assign:accessControl.assign, //工单指派 +// apply_arbitration:accessControl.apply_arbitration,//申请仲裁 +// batch_completion:accessControl.batch_completion,//批量完结 +// representations:accessControl.representations,//申诉 +// reply:accessControl.reply,//回复 +// processing_completed:accessControl.processing_completed,//处理完结 +// work_order_completion:accessControl.work_order_completion,//完结 +// repulse:accessControl.repulse,//打回 +// arbitration_completed:accessControl.arbitration_completed,//仲裁完结 +// information_editing:accessControl.information_editing,//信息编辑 +// } +// }); +// 详情按钮权限 +const ButtonPermissions = computed(() => { + // 根据 TabPermissions 的状态,决定每个按钮的显示隐藏逻辑 + switch (RouteIndexs.value != 'null') { + case RouteIndexs.value == 0: //全部 + return { + reply: false, //回复按钮(都可以查看) + ProcessingResults: false, //处理结果按钮 + end: false, //完结按钮 + repulse: false, //打回按钮 + ArbitrationCompleted: false, //客服仲裁完结 + edit: false, //编辑 + }; + case RouteIndexs.value == 1: //处理中 + return { + reply: false, //回复按钮 + ProcessingResults: false, //处理结果按钮 + end: false, //完结按钮 + repulse: false, //打回按钮 + ArbitrationCompleted: false, //客服仲裁完结 + edit: false, //编辑 + }; + case RouteIndexs.value == 2: //处理完毕 + return { + reply: false, //回复按钮 + ProcessingResults: false, //处理结果按钮 + end: UserPermissions.value == '职能客服', //完结按钮 + repulse: UserPermissions.value == '客服经理', //打回按钮 + ArbitrationCompleted: false, //客服仲裁完结 + edit: false, //编辑 + }; + case RouteIndexs.value == 3: //待处理 + return { + reply: UserPermissions.value == '仓库客服', //回复按钮 + ProcessingResults: UserPermissions.value == '仓库客服', //处理结果按钮 + end: UserPermissions.value != '仓库客服', //完结按钮 + repulse: UserPermissions.value != '仓库客服', //打回按钮 + ArbitrationCompleted: false, //客服仲裁完结 + edit: UserPermissions.value == '仓库客服', //编辑 + }; + case RouteIndexs.value == 4: //理赔金额未出 + return { + reply: false, //回复按钮 + ProcessingResults: false, //处理结果按钮 + end: false, //完结按钮 + repulse: false, //打回按钮 + ArbitrationCompleted: false, //客服仲裁完结 + edit: false, //编辑 + }; + case RouteIndexs.value == 5: //仲裁中 + return { + reply: UserPermissions.value == '职能客服', //回复按钮 + ProcessingResults: false, //处理结果按钮 + end: false, //完结按钮 + repulse: false, //打回按钮 + ArbitrationCompleted: UserPermissions.value == '职能客服', //客服仲裁完结 + edit: false, //编辑 + }; + case RouteIndexs.value == 6: //完结 + return { + reply: false, //回复按钮 + ProcessingResults: false, //处理结果按钮 + end: false, //完结按钮 + repulse: false, //打回按钮 + ArbitrationCompleted: false, //客服仲裁完结 + edit: false, //编辑 + }; + case RouteIndexs.value == 7: //超时未处理 + return { + reply: false, //回复按钮 + ProcessingResults: false, //处理结果按钮 + end: false, //完结按钮 + repulse: false, //打回按钮 + ArbitrationCompleted: false, //客服仲裁完结 + edit: false, //编辑 + }; + + case RouteIndexs.value == 8: //待回复 + return { + reply: UserPermissions.value == '仓库客服', //回复按钮 + ProcessingResults: UserPermissions.value == '仓库客服', //处理结果按钮 + end: UserPermissions.value != '仓库客服', //完结按钮 + repulse: UserPermissions.value != '仓库客服', //打回按钮 + ArbitrationCompleted: false, //客服仲裁完结 + edit: UserPermissions.value == '仓库客服', //编辑 + }; + + // 其他任何情况下的默认情况 + default: + return { + reply: false, //回复按钮 + ProcessingResults: false, //处理结果按钮 + end: false, //完结按钮 + repulse: false, //打回按钮 + ArbitrationCompleted: false, //客服仲裁完结 + edit: false, //编辑 + }; + } +}); + // 上传图片规则 const beforeAvatarUpload = rawFile => { - console.log(rawFile); - if (rawFile.type !== 'image/png' && rawFile.type !== 'image/jpeg') { - ElMessage.error('图片格式只能为 png/jpg!'); + if (rawFile.type !== 'image/png') { + ElMessage.error('图片格式只能为image/png!'); return false; - } else if (rawFile.size / 1024 / 1024 > 10) { - ElMessage.error('图片大小不能大于10MB!'); + } else if (rawFile.size / 1024 / 1024 > 2) { + ElMessage.error('图片大小不能大于2MB!'); return false; } return true; }; // 点击图片列表回调 const pictureList = val => { - console.log(val, '图片列表'); dialogImgList.value = true; console.log(val, '图片列表'); amplifyurl.value = val.url; }; - +// 点击图片移除 +const ImgListRemove = val => { + console.log(val, '移除图片'); +}; // 处理方和责任方获取数据 const handle = () => { getDeptWarehouse().then(res => { @@ -1145,183 +922,492 @@ const handle = () => { }); }); }; +const changeProcessingResults = val => { + // 首先删除取消的项目 + ProcessingList.value = ProcessingList.value.filter(item => val.includes(item.state - 1)); + + // 然后添加或保持新的项目 + val.forEach(num => { + let newItem = { + input: 0, + min: 0, + max: 9999999999999, + state: num + 1, + payment: '', + text: '', + compensationTime: '', + }; + // 根据num为newItem的name字段赋值 + switch (num) { + case '1': + newItem.name = '下补单'; + break; + case '2': + newItem.name = '维修/补漆'; + break; + case '3': + newItem.name = '客户未要求理赔'; + break; + case '4': + newItem.name = '用库存'; + break; + case '5': + newItem.name = '赔商家'; + break; + case '6': + newItem.name = '赔付运费'; + break; + case '7': + newItem.name = '工厂考核'; + break; + default: + return; + } + // 如果列表中不存在则加入新项目 + if (!ProcessingList.value.some(item => item.state === newItem.state)) { + ProcessingList.value.push(newItem); + console.log(`添加:${newItem.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 = () => { - Mydata.value = JSON.parse(localStorage.getItem('my_data')); //记录本地登录 - getDictionaryBiz('after_sales_visits').then(res => { - const matchingItem = res.data.data.find( - item => item.dictValue == JSON.parse(localStorage.getItem('TWMS-userInfo')).content.role_name - ); - if (matchingItem) { - UserPermissions.value = matchingItem.dictValue; //记录当前人身份 + if ($route.query.RouteIndexs != 'null') { + RouteIndexs.value = $route.query.RouteIndexs; //记录当前状态 + } + + console.log($route.query.id, '页面初始化'); + routerState.value = $route.query.routerState; + updateDictionary(IndexException.value, 'pc_work_order'); //异常类型 + updateDictionary(DiscoveringNodes.value, 'pc_discovery_node'); //发现环节 + updateDictionary(DiscoveringNodes.value, 'pc_discovery_node'); //发现环节 + handle(); //处理方和责任方信息 + if ($route.query.Routstate) { + appeal.value = true; + } + // 只能查看申诉信息 + if ($route.query.AppealReview) { + if ($route.query.AppealReview == 'false') { + console.log($route.query.AppealReview, '申诉状态'); + AppealReview.value = false; } else { - UserPermissions.value = '仓库客服'; + AppealReview.value = true; + console.log(AppealReview.value, '当前申诉状态'); } - console.log(UserPermissions.value, '当前角色权限'); - Chathistory(); //聊天的历史记录 - routerState.value = $route.query.routerState; - updateDictionary(IndexException.value, 'pc_work_order'); //异常类型 - updateDictionary(DiscoveringNodes.value, 'pc_discovery_node'); //发现环节 - handle(); //处理方和责任方信息 - - $_getInfo({ id: $route.query.id }).then(res => { - console.log(res, '回显返回值参数'); - Indexform.value = res.data.data; - - Indexform.value['result'] = []; - Indexform.value['processor'] = []; - //图片处理回显 - Indexform.value.packList = res.data.data.decreaseImageVOList.map(res => { - amplifysrcList.value.push(res.imagePath); - return { - name: res.imageName, - url: res.imagePath, - }; - }); - // 包件回显 - PackageInfo.value = res.data.data.abnormalPackageVOList; - console.log(res.data.data.abnormalPackageVOList, '包件信息'); - NumberPackages.value = res.data.data.abnormalPackageVOList.length; //包件个数统计 - // 责任方回显 - - FangAddList.value = res.data.data.processorVOList - .filter(item => item && item.typesOf && item.typesOf == '1') - .map(item => { - return { businessName: item.businessId }; - }); - console.log(FangAddList.value, '责任方回显问题'); + } - // 公司占比回显计算 - let sum = 0; - res.data.data.personResponsibleVOS.forEach(item => { - sum = Number(item.responsibilityRatio) + sum; + console.log(appeal.value); + $_getInfo({ id: $route.query.id }).then(res => { + console.log(res, '回显返回值参数'); + Indexform.value = res.data.data; + + Indexform.value['result'] = []; + Indexform.value['processor'] = []; + //图片处理回显 + Indexform.value.packList = res.data.data.decreaseImageVOList.map(res => { + amplifysrcList.value.push(res.imagePath); + return { + name: res.imageName, + url: res.imagePath, + }; + }); + // 包件回显 + PackageInfo.value = res.data.data.abnormalPackageVOList; + console.log(res.data.data.abnormalPackageVOList, '包件信息'); + // 责任方回显 + + FangAddList.value = res.data.data.processorVOList + .filter(item => item && item.typesOf && item.typesOf == '1') + .map(item => { + return { businessName: item.businessId }; }); + console.log(FangAddList.value, '责任方回显问题'); - groundlineType.value = res.data.data.discoveryNode; //发现节点回显 + // 公司占比回显计算 + let sum = 0; + res.data.data.personResponsibleVOS.forEach(item => { + sum = Number(item.responsibilityRatio) + sum; + }); - FangAddList.value = res.data.data.personResponsibleVOS.map(res => { - return { - businessName: res.businessId, //责任人ID - personResponsibleName: res.personResponsibleName, //责任人名称 - responsibilityRatio: res.responsibilityRatio + '%', //占比 - description: res.description, //说明 - tripartite: res.tripartite, //三方责任人 - }; - }); - console.log(FangAddList.value, '责任方回显问题'); - res.data.data.processorVOList.forEach(item => { - if (item) { - if (item.typesOf == 2) { - // 处理方 - Indexform.value.processor.push(item.businessId); - } - } - }); - companyProportion.value = 100 - sum; + if (res.data.data.discoveryNode == '1') { + groundlineType.value = '1'; + } else { + groundlineType.value = 'null'; + } - getDictionaryBiz('result_handling').then(res => { - console.log(res, '发现环节'); - ProcessingResults.value = res.data.data; - }); - // 处理结果回显 - if (res.data.data.processingResultsVO.processingMoneyEntityList) { - ProcessingList.value = res.data.data.processingResultsVO.processingMoneyEntityList.map( - item => { - Indexform.value.result.push(item.resultType); - return { - input: item.money + '元', - min: 0, - max: 9999999999999999999999999999, - state: item.resultType, - payment: item.compensationMethod, - name: item.resultTypeName, - text: item.compensationMethodName, - compensationTime: item.compensationTime, //支付时间 - paymentUnit: item.paymentUnit, //支付单位 - }; - } - ); + FangAddList.value = res.data.data.personResponsibleVOS.map(res => { + return { + businessName: res.businessId, //责任人ID + personResponsibleName: res.personResponsibleName, //责任人名称 + responsibilityRatio: res.responsibilityRatio + '%', //占比 + description: res.description, //说明 + tripartite: res.tripartite, //三方责任人 + }; + }); + console.log(FangAddList.value, '责任方回显问题'); + res.data.data.processorVOList.forEach(item => { + if (item) { + if (item.typesOf == 2) { + // 处理方 + Indexform.value.processor.push(item.businessId); + } } - // 总金额回显 - TotalClaimAmount.value = res.data.data.processingResultsVO.money; - // 理赔支付时间 - Indexform.value.compensationTime = res.data.data.processingResultsVO.compensationTime; - // 处理结果说明回显 - Indexform.value.resultDescription = res.data.data.processingResultsVO.resultDescription; - - if (res.data.data.completionRecipientEntityList.length > 0) { - CompensationParty.value = []; - res.data.data.completionRecipientEntityList.forEach((item, index) => { - TotalamountReceived.value += Number(item.money); - CompensationParty.value.push({ - state: 1, //状态 - num: item.money, //金额 - name: item.recipient, //受款方名字 - reason: item.reasonReceivingPayment, //受款方原因 - // explains: item.explains, //受款方说明 - cld: index + 1, - id: item.id, - }); + }); + companyProportion.value = 100 - sum; + ProcessingRecordsName.value = ProcessingRecords.value.filter(item => + warehouseData.value.includes(item.value) + ).label; + console.log(ProcessingRecordsName.value, '匹配到的中文处理方'); + // updateDictionary(columnList[2].checkarr, 'pc_work_order'); //异常类型 + // updateDictionary(columnList[3].checkarr, 'pc_discovery_node'); //发现环节 + getDictionaryBiz('result_handling').then(res => { + console.log(res, '发现环节'); + ProcessingResults.value = res.data.data; + }); + // 处理结果回显 + if (res.data.data.processingResultsVO.processingMoneyEntityList) { + ProcessingList.value = res.data.data.processingResultsVO.processingMoneyEntityList.map( + item => { + Indexform.value.result.push(item.resultType); + return { + input: item.money, + min: 0, + max: 9999999999999999999999999999, + state: item.resultType, + payment: item.compensationMethod, + name: item.resultTypeName, + text: item.compensationMethodName, + compensationTime: item.compensationTime, //支付时间 + paymentUnit: item.paymentUnit, //支付单位 + }; + } + ); + } + // 总金额回显 + TotalClaimAmount.value = res.data.data.processingResultsVO.money; + // 理赔支付时间 + Indexform.value.compensationTime = res.data.data.processingResultsVO.compensationTime; + // 处理结果说明回显 + Indexform.value.resultDescription = res.data.data.processingResultsVO.resultDescription; + + if (res.data.data.completionRecipientEntityList.length > 0) { + CompensationParty.value = []; + res.data.data.completionRecipientEntityList.forEach((item, index) => { + TotalamountReceived.value += Number(item.money); + CompensationParty.value.push({ + state: 1, //状态 + num: item.money, //金额 + name: item.recipient, //受款方名字 + reason: item.reasonReceivingPayment, //受款方原因 + // explains: item.explains, //受款方说明 + cld: index + 1, + id: item.id, }); - } - // 赔款方 - if (res.data.data.completionRecordEntities.length) { - res.data.data.completionRecordEntities.forEach((item, index) => { - TotalamountCompensation.value += Number(item.money); - CompensationParty.value.push({ - state: 0, //状态 - num: item.money, //金额 - name: item.indemnitor, //受款方名字 - reason: item.reason, //受款方原因 - // explains: item.explains, //受款方说明 - cld: index + 1, - id: item.id, - accounting: item.accounting ? item.accounting : '', - warehouseId: item.warehouseId, //仓库 - compensationPersonnel: item.compensationPersonnel, //责任人 - }); + }); + } + // 赔款方 + if (res.data.data.completionRecordEntities.length) { + res.data.data.completionRecordEntities.forEach((item, index) => { + TotalamountCompensation.value += Number(item.money); + CompensationParty.value.push({ + state: 0, //状态 + num: item.money, //金额 + name: item.indemnitor, //受款方名字 + reason: item.reason, //受款方原因 + // explains: item.explains, //受款方说明 + cld: index + 1, + id: item.id, + accounting: item.accounting ? item.accounting : '', + warehouseId: item.warehouseId, //仓库 + personResponsibleList: item.compensationPersonnel, //责任人 }); - } - }); + }); + } }); +}; +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; + } +}; - console.log(Mydata.value, '记录本地登录'); - getDictionaryBiz('result_handling').then(res => { - console.log(res, '发现环节'); - ProcessingResults.value = res.data.data; - }); - // 支付方式字典 - getDictionaryBiz('payment_method').then(res => { - //处理结果字典 - console.log(res); - Paymentmethod.value = res.data.data; +// 发现节点事件 +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: '', + description: '', }); }; -onLoad(); //初始化程序 -// 是否显示处理结果 -const Processingrelease = () => { - if (Indexform.value.processor.length == 1 && Mydata.value.id == Indexform.value.processor[0]) { - ProcessingreleaseState.value = true; //显示处理放 +// 责任移除 +const ResponsibilityRemoval = val => { + FangAddList.value.splice(val, 1); //移除当前点击的按钮 +}; +// 顶部标签切换 +const TopChange = val => { + console.log(val); + if (val == 0) { + identifying.value = 1; } else { - ProcessingreleaseState.value = false; //关闭处理方 + identifying.value = 2; } }; -// 对调查经过输入框进行处理 -const isShowFormItem1 = computed(() => { - return !['1', '2', '5', '6', '7'].includes(groundlineType.value); -}); -// 对调查经过输入框进行处理 -const isShowFormItem2 = computed(() => { - return !['2', '5', '6', '7', '8'].includes(groundlineType.value); -}); -// 聊天刷新 -const Chatrefresh = () => { - Chathistory(); +// 批量打回 +const BatchReturn = () => { + BatchFrom.value.businessDepartment = []; + BatchFrom.value.txt = null; + dialogReturn.value = true; +}; + +// 打回按钮 + +const ConfirmReturn = () => { + repulse.value = true; //开启加载并关闭按钮 + let data = { + processorList: [], + }; + // 过滤满足条件的对象 + let foundObjs = warehouseData.value.filter(obj => + BatchFrom.value.businessDepartment.includes(obj.value) + ); + data['businessId'] = foundObjs.map(item => item.value).join(','); + data['businessName'] = foundObjs.map(item => item.label).join(','); + // 营业部处理 + foundObjs.forEach(item => { + data['processorList'].push({ id: item.value, name: item.label }); + }); + data.reasonReturn = BatchFrom.value.txt; //打回原因 + data.workOrderIds = [$route.query.id]; //异常工单ID + console.log(data, '处理好的值'); + $_batchReturn(data) + .then(res => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + $router.push('/aftersales/aftersalesWorkOrder'); //打回成功跳转到列表 + } + }) + .catch(error => { + console.log(error, '错误信息'); + }) + .finally(() => { + repulse.value = false; //关闭加载并关闭按钮 + dialogReturn.value = false; //关闭打回弹窗 + }); +}; + +// 少货件数对应事件 +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, '包件信息'); + if (res.data.data.length) { + 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].brandName = packageData.brandName; //品牌 + 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; //运单号 + PackageInfo.value[HistorIndex.value].brandName = packageData.brandName; //品牌 + dialogHistoricalPackage.value = false; //关闭历史包件弹窗 + + PackageInfo.value[HistorIndex.value].relatedWorkOrdersId = info.workOrderId; + console.log(PackageInfo.value, '处理好的参数'); +}; +// 历史包件里面的查看 +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; //打开历史包件弹窗 }; -// 底部按钮事件 // 回复 const addireply = () => { $router.push({ @@ -1335,8 +1421,7 @@ const addireply = () => { }, }); }; - -// 处理结果 +// 新增记录跳转 const addingRecord = () => { $router.push({ path: '/aftersales/aftersalesWorkOrderend', @@ -1349,26 +1434,6 @@ const addingRecord = () => { }, }); }; - -// 完结 -const EndJump = () => { - $router.push({ - path: '/aftersales/aftersalesWorkOrderend', - query: { - id: $route.query.id, - name: $route.query.workOrderNumber + '-完结填写', - RouterState: 'end', - index: '2', - workOrderStatus: $route.query.workOrderStatus, //当前单子状态 - }, - }); -}; -// 打回 -const BatchReturn = () => { - BatchFrom.value.businessDepartment = []; - BatchFrom.value.txt = null; - dialogReturn.value = true; -}; // 客服仲裁完结 const CustomerServiceCompleted = () => { $router.push({ @@ -1385,8 +1450,7 @@ const CustomerServiceCompleted = () => { }, }); }; - -// 信息编辑 +// 编辑信息 const EditInformation = () => { $router.push({ path: '/aftersales/aftersalesWorkOrdermodify', @@ -1401,19 +1465,15 @@ const EditInformation = () => { }, }); }; -// 申诉成立 -const AppealEstablished = () => { +const EndJump = () => { $router.push({ - path: '/aftersales/aftersalesWorkOrdermodify', + path: '/aftersales/aftersalesWorkOrderend', query: { - id: $route.query.id, //这里的id是workOrderId是有申诉列表带入的 - name: $route.query.workOrderNumber + '-申诉编辑', - businessId: $route.query.businessId, - warehouseId: $route.query.warehouseId, - workOrderNumber: $route.query.workOrderNumber, - RouterState: 'Kfend', - Appealeditor: 'appeal', //申诉编辑 - appealID: $route.query.appealID, //申诉ID + id: $route.query.id, + name: $route.query.workOrderNumber + '-完结填写', + RouterState: 'end', + index: '2', + workOrderStatus: $route.query.workOrderStatus, //当前单子状态 }, }); }; @@ -1427,67 +1487,48 @@ const AppealRejection = () => { }; $_Cancelappeal(data) .then(res => { - console.log(res, '申诉驳回返回值'); - if (res.data.code == 200) { - ElMessage({ - showClose: true, - message: '申诉驳回成功', - type: 'success', - }); - $useStore.commit('DEL_TAG_CURRENT'); //关闭当前页面 - $router.push({ - path: '/aftersales/aftersalesWorkOrder', - }); - } - }) - .catch(res => { - ElMessage({ - showClose: true, - message: '操作失败', - type: 'success', - }); - }) - .finally(() => { - Pageloading.value = false; //关闭加载效果 - }); -}; - -// 工单打回确认按钮 -const ConfirmReturn = () => { - repulse.value = true; //开启加载并关闭按钮 - let data = { - processorList: [], - }; - // 过滤满足条件的对象 - let foundObjs = warehouseData.value.filter(obj => - BatchFrom.value.businessDepartment.includes(obj.value) - ); - data['businessId'] = foundObjs.map(item => item.value).join(','); - data['businessName'] = foundObjs.map(item => item.label).join(','); - // 营业部处理 - foundObjs.forEach(item => { - data['processorList'].push({ id: item.value, name: item.label }); - }); - data.reasonReturn = BatchFrom.value.txt; //打回原因 - data.workOrderIds = [$route.query.id]; //异常工单ID - console.log(data, '处理好的值'); - $_batchReturn(data) - .then(res => { - repulse.value = false; //关闭加载并关闭按钮 - dialogReturn.value = false; //关闭打回弹窗 + console.log(res, '申诉驳回返回值'); if (res.data.code == 200) { ElMessage({ - message: res.data.msg, + showClose: true, + message: '申诉驳回成功', type: 'success', }); - $router.push('/aftersales/aftersalesWorkOrder'); //打回成功跳转到列表 + $useStore.commit('DEL_TAG_CURRENT'); //关闭当前页面 + $router.push({ + path: '/aftersales/aftersalesWorkOrder', + }); } }) - .catch(error => { - repulse.value = false; //关闭加载并关闭按钮 - dialogReturn.value = false; //关闭打回弹窗 + .catch(res => { + ElMessage({ + showClose: true, + message: '操作失败', + type: 'success', + }); + }) + .finally(() => { + Pageloading.value = false; //关闭加载效果 }); }; + +// 申诉成立 +const AppealEstablished = () => { + // 编辑信息 + $router.push({ + path: '/aftersales/aftersalesWorkOrdermodify', + query: { + id: $route.query.id, //这里的id是workOrderId是有申诉列表带入的 + name: $route.query.workOrderNumber + '-申诉编辑', + businessId: $route.query.businessId, + warehouseId: $route.query.warehouseId, + workOrderNumber: $route.query.workOrderNumber, + RouterState: 'Kfend', + Appealeditor: 'appeal', //申诉编辑 + appealID: $route.query.appealID, //申诉ID + }, + }); +}; </script> <style scoped lang="scss"> @@ -1495,7 +1536,8 @@ const ConfirmReturn = () => { display: flex; flex-wrap: wrap; justify-content: flex-start; - border: 1px solid #ccc; + border: 1px solid #dcdfe6; + .el-form-item { height: 46px; display: flex; @@ -1503,15 +1545,15 @@ const ConfirmReturn = () => { margin: 0; margin-bottom: 18px; flex: 1 0 30%; - margin-right: 16px; :deep(.el-form-item__label) { - width: auto !important; + 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; @@ -1569,23 +1611,27 @@ const ConfirmReturn = () => { } .Transport_damage_photos { display: flex; + padding: 0 15px; margin-top: 20px; - flex-direction: column; .title { width: 100px; display: block; margin-bottom: 10px; font-size: 14px; - font-weight: bold; - color: #5b5b5b; + } + :deep(.el-upload-dragger) { + display: flex; + justify-content: center; + align-items: center; } } .dialog-footer { width: 100%; display: flex; justify-content: flex-end; + padding: 0 10px; box-sizing: border-box; - margin-top: 10px; + padding-right: 36px; } .investigate { :deep(.el-form-item__content) { @@ -1628,37 +1674,17 @@ const ConfirmReturn = () => { display: flex; flex-direction: column; .leftbox { + width: 80%; display: flex; justify-content: space-between; - .el_zb { - :deep(.el-input__inner) { - text-align: center; - } - width: 250px; - text-align: right; - :deep(.el-form-item__label) { - width: auto !important; - } - :deep(.el-input) { - margin-left: 10px; - text-align: right; - } - :deep(.el-form-item__content) { - flex-wrap: nowrap; - } - } } .maxBox { display: flex; align-items: center; width: 30%; margin-right: 16px; - font-size: 14px; - .brand { - margin-right: 0; - } .title { - width: 120px; + width: 130px; font-size: 14px; color: #606266; } @@ -1666,9 +1692,6 @@ const ConfirmReturn = () => { width: 100%; } } - .brand { - margin-right: 0; - } .el-btn { margin-left: 5%; border: none; @@ -1683,28 +1706,17 @@ const ConfirmReturn = () => { display: flex; flex-direction: column; margin-bottom: 10px; + .leftbox { + width: 80%; display: flex; justify-content: space-between; - width: 100%; } - .maxBox { display: flex; align-items: center; width: 30%; margin-right: 20px; - - :deep(.el-form-item) { - margin: 0; - margin-right: 10px; - - font-size: 12px; - .el-form-item__label { - margin: 0; - width: auto !important; - } - } .title { width: 140px; color: #606266; @@ -1713,104 +1725,57 @@ const ConfirmReturn = () => { .el-select { width: 100%; } - :deep(.el-form-item) { - margin-right: 0; - } - } - .brand { - margin-right: 0; } .el-btn { margin-left: 5%; border: none; - display: flex; } .el_btbox { display: flex; - align-items: center; + margin-top: 10px; } } -:deep(.PackageInformation) { +.PackageInformation { margin-bottom: 10px; - width: 100%; - border-left: none; - border-right: none; - .el-tabs__header { - } - .el-tabs__content { - // padding-right: 0; - } - .is-active { - font-weight: bold; - } } .NumTotal { width: 30%; - margin-top: 10px; + margin-top: 16px; display: flex; align-items: center; span { width: 120px; font-size: 14px; - border: 1px solid #ccc; - display: flex; - width: auto; - padding: 4px 12px; } } .Proportion { margin-top: 16px; .title { font-size: 14px; - border: 1px solid #ccc; - width: auto; - padding: 4px 12px; + color: #606266; } } :deep(.is-active) { border-bottom: 1px solid #e4e7ed !important; } -:deep(.topClass) { - border-bottom: none; - .el-tabs__content { +.topClass { + :deep(.el-tabs__content) { padding: 0; } - .is-active { - font-weight: bold; - } } .foot_btn { + width: 100%; 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; } -:deep(.el-upload-dragger) { - display: flex; - align-items: center; - justify-content: center; -} -.box-card { - height: 100% !important; - overflow-y: scroll; -} -:deep(.selector) { - .el-select { - width: 100%; - } -} - .ProcessingResults { width: 100%; min-height: 260px; @@ -1840,30 +1805,19 @@ const ConfirmReturn = () => { display: flex; margin-bottom: 20px; height: 30px; - width: 100%; - justify-content: space-between; - .payment_right { - width: 100%; - display: flex; - :deep(.el-input) { - height: 100% !important; - } - :deep(.money) { - width: 100px; - } + width: 46%; + margin-right: 38px; + :deep(.el-input-number) { + width: 220px; } span { - color: #000000; + display: block; + width: 30%; + color: #606266; font-size: 16px; - margin-right: 8px; display: flex; align-items: center; - justify-content: flex-end; - width: 80px; - margin-left: 10px; - } - .el_titleName { - display: flex; + justify-content: center; } } } @@ -1874,13 +1828,14 @@ const ConfirmReturn = () => { .name { width: 10%; color: #606266; + + :deep(.el-input--prefix) { + width: 200px; + } } - .el-input { + :deep(.el-input) { width: auto; } - :deep(.el-input--prefix) { - width: 200px; - } } .ZFlptime { margin: 10px 0; @@ -1896,272 +1851,46 @@ const ConfirmReturn = () => { font-size: 14px; padding: 10px; cursor: pointer; - width: 140px; + width: 200px; margin: 0 10px; - overflow: hidden; } .Paymentname:hover { border: 1px solid #172e60; } -.el_Processingresults { - margin-top: 12px; - :deep(.is-active) { - font-weight: bold; - } -} -.el_PaymentUnit { - margin: 0 4px; -} -:deep(.el-input-number) { - width: 180px !important; -} -.Investigationprocess { - height: auto !important; - align-items: flex-start !important; - flex: 1 0 44% !important; - :deep(.el-form-item__content) { - width: 100% !important; - } -} -.el_tool { - display: flex; - align-items: center; - font-size: 16px; - font-weight: bold; - span { +.el_resj { + margin-top: 20px !important; + :deep(.el-form-item__label) { + justify-content: flex-start; + margin-left: 20px; font-size: 14px; - border: 1px solid #ccc; - padding: 4px 20px; - color: #000000; - font-weight: 600; - } -} -.el_nint { - width: 100%; - border-right: none; - border-left: none; - border-bottom: none; - - :deep(.el-tabs__content) { - padding-right: 0; - } - :deep(.is-active) { - font-weight: bold; + width: 100px !important; } } -:deep(.el_inputTop) { - margin-bottom: 0 !important; +.lptime { + height: 30px !important; } -.content-max { - display: flex; - justify-content: space-between; - width: 100%; - background-color: #fff; - :deep(.el-card) { - width: 70%; - } - .el-affix { - flex: 1 1 0%; - margin-left: 10px; - } - .el_last { - display: flex; - height: 100%; - :deep(.el-card__body) { - display: flex; - flex-direction: column; - flex: 1; - } - :deep(.dialog-footer) { - flex: 1; - display: flex; - align-items: flex-end; - } - } +:deep(.el-image) { + width: 100% !important; + height: 300px !important; } - -.right { - width: 100%; - :deep(.el-card__body) { - padding: 10px !important; - } - :deep(.el-timeline) { - padding: 0; - } - .ovhe { - padding: 6px; - .header { - display: flex; - justify-content: space-between; - align-items: center; - .el-tag { - width: 70px; - } - } - } - .content { - position: relative; - :deep(.el-card) { - width: 100%; - } - } - - :deep(.el-card__body:last-child) { - padding: 0px !important; - } - :deep(.el-timeline-item) { - padding-bottom: 30px; - } - :deep(.el-card) { - padding: 10px; - box-sizing: border-box; - } - .ovhe::-webkit-scrollbar { - width: 4px; - height: 0px; - } - .ovhe::-webkit-scrollbar-thumb { - background-color: #12b7f5; - background-image: -webkit-linear-gradient( - 45deg, - rgba(255, 93, 143, 1) 25%, - transparent 25%, - transparent 50%, - rgba(255, 93, 143, 1) 50%, - rgba(255, 93, 143, 1) 75%, - transparent 75%, - transparent - ); - } - - .ovhe::-webkit-scrollbar-track { - -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); - background: #f6f6f6; - } - - .ovhe::-webkit-scrollbar-track { - background-color: #fff; /* 设置滚动条槽为透明 */ - } - :deep(.el-tabs__content) { - padding: 0; - } - :deep(.el-timeline-item__node) { - background-color: #8fa3ad; - } - :deep(.el-icon) { - font-size: 16px; - } +:deep(.el-input) { + height: 100% !important; } - -.el_Processingparty { - width: 100%; +.el_PaymentUnit { display: flex; align-items: center; - justify-content: space-between; - font-size: 12px; - margin-bottom: 8px; - box-shadow: -1px 2px 2px 0px #f5f5f5; - padding: 0 4px; - box-sizing: border-box; - border-radius: 4px; - height: 40px; - span { - width: 40px; - } - :deep(.el-select) { - width: 100%; - } + margin-right: 6px; span { - font-size: 20px; - } - :deep(.el_Refresh) { - i { - font-size: 30px; - } - } -} - -.ovhe { - position: relative; - overflow-y: scroll; - scroll-behavior: smooth; - .e_ico { display: flex; + width: 80px !important; align-items: center; } - .img { - width: 50px; - height: 50px; - img { - width: 100%; - height: 100%; - } - } - .mp4 { - margin-top: 2px; - span { - display: flex; - align-items: center; - vertical-align: bottom; - cursor: pointer; - } - } - .tag { - display: flex; - justify-content: flex-end; - } - .file { - span { - display: flex; - align-items: center; - vertical-align: bottom; - cursor: pointer; - } - } - :deep(.el-timeline-item__timestamp) { - display: none !important; - } -} -.identifying { - display: flex; - align-items: center; - justify-content: space-between; - .el-tag { - width: 70px; + :deep(.el-input) { + width: 150px; } } -.identifyingC1 { - background-color: #409eff; - border-radius: 4px; - - border: none; -} -.identifyingC2 { - background-color: #10d070; - border: none; -} -.identifyingC3 { - background-color: #d3832a; - border: none; -} -.CardidentifyingC1, -.CardidentifyingC2, -.CardidentifyingC3 { - box-shadow: -1px -1px 4px 0px #e3e3e3; - border-top-left-radius: 20px; - border-bottom: 1px solid #d5d5d563 !important; - border-right: 1px solid #d5d5d563 !important; -} .el-endtabs { - margin-top: 10px; -} -:deep(.custom-tabs-label) { - font-weight: bold; - display: flex; - align-items: center; - .el-icon { - margin-right: 4px; - } + margin-top: 26px; } .payanindemnity { display: flex; @@ -2169,26 +1898,16 @@ const ConfirmReturn = () => { margin-top: 20px; justify-content: space-between; .title { - width: max-content; + width: 126px; height: 100%; + display: flex; display: block; - font-size: 14px; - font-weight: 500; + align-items: center; } .sk_input { margin: 0 5px; - margin-left: 4px; + margin-left: 20px; width: 20%; - display: flex; - align-items: center; - span{ - width: 100px; - margin-right: 4px; - display: flex; - justify-content: flex-end; - font-size: 14px; - font-weight: 400; - } } .el-button { border: none; @@ -2198,6 +1917,11 @@ const ConfirmReturn = () => { width: 100%; } } + +:deep(.custom-tabs-label) { + display: flex; + align-items: center; +} .paySum { margin-top: 36px; font-size: 14px; @@ -2208,58 +1932,4 @@ const ConfirmReturn = () => { align-items: center; } } -:deep(.el-photo) { - margin-top: 10px; - .el-upload--picture-card { - display: none; - } - .Transport_damage_photos { - margin-top: 0; - .el-picture-card { - display: flex; - padding: 6px; - } - } - - .el-tabs__content { - padding: 0; - } - .el-upload-list__item { - margin: 0; - } -} -.arbitrate { - margin-top: 10px; -} -.el_BatchFrom { - width: 70%; -} -.el_form_BatchFrom { - display: flex; - justify-content: space-between; - :deep(.el-select-tags-wrapper) { - .el-tag { - width: 100%; - } - } -} -:deep(#avue-view) { - background-color: #fff; -} -:deep(.el_resj){ - flex-direction: column; - .el-form-item__label{ - justify-content: center; - font-weight: 500; - border: 1px solid #dcdfe6; - width: fit-content; - display: flex; - align-items: center; - padding: 0; - padding: 0 4px; - border-bottom: 0; - color: #172e60; - border-radius: 2px; - } -} </style> diff --git a/src/views/aftersales/aftersalesWorkOrdermodify.vue b/src/views/aftersales/aftersalesWorkOrdermodify.vue index 84bca7a2..6cb7c9a7 100644 --- a/src/views/aftersales/aftersalesWorkOrdermodify.vue +++ b/src/views/aftersales/aftersalesWorkOrdermodify.vue @@ -1,85 +1,17 @@ <template> <el-card class="box-card" v-loading="editloading" element-loading-text="正在处理中..."> - <el-tabs type="border-card" class="PackageInformation"> - <el-tab-pane label="包件信息"> - <div class="ResponsibilityBoxS"> - <div> - <el-button type="primary" v-if="RouterState != 'Kfend'" @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)" - :disabled="RouterState == 'Kfend'" - /> - </div> - - <div class="maxBox"> - <span class="title">订单自编码:</span> - <el-input - :disabled="RouterState == 'Kfend'" - v-model="item.orderCode" - placeholder="请输入订单自编号" - clearable - /> - </div> - - <div class="maxBox"> - <span class="title">运单号:</span> - <el-input - :disabled="RouterState == 'Kfend'" - v-model="item.waybillNumber" - placeholder="请输入运单号" - clearable - /> - </div> - - <div class="maxBox"> - <span class="title">品牌:</span> - <el-input - :disabled="RouterState == 'Kfend'" - v-model="item.brandName" - 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" - v-if="RouterState != 'Kfend'" - @click="PackagRemoval(index, item)" - > - 移除 - </el-button> - </div> - </div> - <div class="NumTotal"> - <span>总件数:{{ Indexform.number }}</span> - </div> - </div> - </el-tab-pane> + <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-form - :disabled="RouterState == 'Kfend'" :model="Indexform" label-width="100px" class="IndexFrom" ref="IndexForm" + :rules="rules" > - <el-form-item label="异常类型"> + <el-form-item label="异常类型" prop="workOrderType" class="el_inputTop"> <el-select v-model="Indexform.workOrderType" clearable @@ -95,7 +27,7 @@ </el-select> </el-form-item> - <el-form-item label="发现节点"> + <el-form-item label="发现节点" prop="discoveryNode" class="el_inputTop"> <el-select v-model="Indexform.discoveryNode" clearable @@ -111,11 +43,99 @@ </el-select> </el-form-item> - <el-form-item label="异常工单号"> - <el-input v-model="Indexform.workOrderNumber" disabled placeholder="异常工单号" clearable /> + <el-form-item label="异常工单号" class="el_inputTop"> + <el-input + v-model="Indexform.workOrderNumber" + disabled + placeholder="异常工单号(自动生成)" + clearable + /> </el-form-item> - <el-form-item label="车次号"> + <el-tabs type="border-card" class="PackageInformation"> + <el-tab-pane label="包件信息"> + <div class="ResponsibilityBoxS"> + <div> + <el-button type="primary" v-if="RouterState != 'Kfend'" @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-form-item label="包条码"> + <el-input + v-model="item.packageCode" + placeholder="请输入包条码" + clearable + :rows="2" + @change="ChangePackageInfo(item.packageCode, index)" + :disabled="RouterState == 'Kfend'" + /> + </el-form-item> + </div> + + <div class="maxBox"> + <el-form-item label="订单自编码"> + <el-input + :disabled="RouterState == 'Kfend'" + v-model="item.orderCode" + placeholder="请输入订单自编号" + clearable + /> + </el-form-item> + </div> + + <div class="maxBox"> + <el-form-item label="运单号"> + <el-input + :disabled="RouterState == 'Kfend'" + v-model="item.waybillNumber" + placeholder="请输入运单号" + clearable + /> + </el-form-item> + </div> + + <div class="maxBox"> + <el-form-item label="品牌"> + <el-input + :disabled="RouterState == 'Kfend'" + v-model="item.brandName" + placeholder="请输入品牌" + clearable + /> + </el-form-item> + </div> + </div> + + <div class="el-btn"> + <el-button v-if="item.state" type="primary" @click="historicalPackages(index)"> + 查看历史包件 + </el-button> + <el-button + type="primary" + v-if="RouterState != 'Kfend'" + @click="PackagRemoval(index, item)" + > + 移除 + </el-button> + </div> + </div> + <div class="NumTotal"> + <span>总件数:{{ Indexform.number }}</span> + </div> + </div> + </el-tab-pane> + </el-tabs> + + <el-form-item + label="车次号" + v-if=" + groundlineType == 3 || groundlineType == 5 || groundlineType == 7 || groundlineType == 6 + " + > <el-input v-model="Indexform.trainNumber" placeholder="请输入车次号(干线卸车环节)" @@ -123,16 +143,41 @@ @change="DeliveryTrainnumber" /> </el-form-item> - <!-- 必填 --> - <el-form-item label="一级品"> - <el-input v-model="Indexform.first" placeholder="请输入一级品类" clearable /> + + <el-form-item + label="配送时间" + v-if="groundlineType == 5 || groundlineType == 7 || groundlineType == 6" + > + <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="二级品"> - <el-input v-model="Indexform.secondary" placeholder="请输入二级品类" clearable /> + + <el-form-item + label="配送司机" + v-if="groundlineType == 5 || groundlineType == 7 || groundlineType == 6" + > + <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-form-item label="车辆路线" v-if="groundlineType == 3"> <el-input v-model="Indexform.vehicleRoute" placeholder="请输入车辆路线车次号(通过车次号自动带出车辆路线)" @@ -140,7 +185,7 @@ /> </el-form-item> - <el-form-item label="发货时间"> + <el-form-item label="发货时间" v-if="groundlineType == 2"> <el-date-picker v-model="Indexform.deliverGoodsTime" type="datetime" @@ -150,7 +195,12 @@ /> </el-form-item> - <el-form-item label="发现时间"> + <el-form-item + label="发现时间" + v-if=" + groundlineType == 4 || groundlineType == 5 || groundlineType == 6 || groundlineType == 7 + " + > <el-date-picker v-model="Indexform.discoveryTime" type="datetime" @@ -160,17 +210,16 @@ /> </el-form-item> - <el-form-item label="配送时间"> - <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 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="入库时间"> + <el-form-item label="入库时间" v-if="groundlineType == 4"> <el-date-picker v-model="Indexform.warehousingTime" type="datetime" @@ -183,29 +232,24 @@ <el-form-item label="运单商场"> <el-input v-model="Indexform.waybillMall" placeholder="请输入运单商场" clearable /> </el-form-item> - <el-form-item label="钉钉流程号"> - <el-input v-model="Indexform.processNumber" placeholder="请输入钉钉流程号" /> - </el-form-item> - <el-form-item label="配送司机"> - <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 label="合作模式"> + <el-input + v-model="Indexform.typeServiceName" + disabled + placeholder="合作模式(自动带出)" + clearable + /> </el-form-item> + + <!-- <el-form-item label="钉钉流程号"> + <el-input v-model="Indexform.processNumber" placeholder="请输入钉钉流程号" /> + </el-form-item> --> + <!-- 必填 --> <!-- <el-form-item label="异常问题描述"> - <el-input v-model="Indexform.problemDescription" placeholder="请输入异常问题" clearable /> - </el-form-item> --> + <el-input v-model="Indexform.problemDescription" placeholder="请输入异常问题" clearable /> + </el-form-item> --> <el-form-item label="处理方"> <el-select @@ -224,23 +268,28 @@ /> </el-select> </el-form-item> - - <el-form-item label="调查经过"> + <el-form-item v-if="isShowFormItem1"> </el-form-item> + <el-form-item v-if="isShowFormItem2"> </el-form-item> + <el-form-item + label="调查经过" + style="height: auto ,align-items: flex-start;" + class="Investigationprocess" + > <el-input :disabled="RouterState == 'Kfend'" v-model="Indexform.investigationProcess" placeholder="请输入调查经过" clearable - :rows="2" + :rows="4" type="textarea" + style="height: auto ,align-items: flex-start;" /> </el-form-item> <el-form-item> </el-form-item> - <el-form-item> </el-form-item> </el-form> - <el-tabs type="border-card"> + <el-tabs type="border-card" class="el_Responsibility"> <el-tab-pane label="内部责任划分"> <div class="ResponsibilityBox"> <div> @@ -290,6 +339,7 @@ <div class="maxBox"> <span class="title">责任人:</span> <el-select + v-if="groundlineType != 1" :disabled="RouterState == 'Kfend'" v-model="item.personResponsibleName" clearable @@ -297,12 +347,13 @@ placeholder="请选责任人" > <el-option - v-for="item in personResponsibleList" + v-for="item in item.personResponsibleList" :key="item.id" :label="item.name" :value="item.id" /> </el-select> + <el-input v-else v-model="item.personResponsibleName" clearable placeholder="请输入责任人" /> </div> <div class="maxBox el_zb"> <span class="title">占比:</span> @@ -323,6 +374,7 @@ v-model="item.tripartite" placeholder="请输入三方责任人" :disabled="RouterState == 'Kfend'" + clearable /> </el-form-item> </div> @@ -354,84 +406,98 @@ </div> </el-tab-pane> </el-tabs> - - <el-form-item label="处理结果" class="el_handle"> - <el-select - v-model="Indexform.result" - multiple - filterable - default-first-option - :reserve-keyword="false" - placeholder="请选择处理结果" - @change="changeProcessingResults" - :disabled="Appealeditor == 'appeal'" - > - <el-option - v-for="item in ProcessingResults" - :key="item.dictKey" - :label="item.dictValue" - :value="item.dictKey" - /> - </el-select> - </el-form-item> - - <div class="ProcessingResults" v-if="ProcessingList.length"> - <div class="title">处理结果-理赔金额</div> - <div class="Listadmiration"> - <div class="name" v-for="(item, index) in ProcessingList" :key="index"> - <span>{{ item.name }}:</span> - <el-tooltip :content="item.input" placement="top"> - <el-input-number - v-model="item.input" - :min="item.min" - :max="item.max" - @change="TotalChange" - :disabled="Appealeditor == 'appeal' && CompletedEditing" + <!-- 处理结果 --> + <el-tabs type="border-card" class="el_Processingresults"> + <el-tab-pane label="处理结果"> + <el-form-item class="el_handle"> + <el-select + v-model="Indexform.result" + multiple + filterable + default-first-option + :reserve-keyword="false" + placeholder="请选择处理结果" + @change="changeProcessingResults" + :disabled="Appealeditor == 'appeal'" + > + <el-option + v-for="item in ProcessingResults" + :key="item.dictKey" + :label="item.dictValue" + :value="item.dictKey" /> - </el-tooltip> - <!-- 申诉的时候不展示 --> - <div v-if="Appealeditor != 'appeal'" class="Paymentname" @click="PaymentSelection(item)"> - {{ item.payment ? item.text : '支付方式' }} - </div> + </el-select> + </el-form-item> + + <div class="ProcessingResults" v-if="ProcessingList.length"> + <div class="title">处理结果-理赔金额</div> + <div class="Listadmiration"> + <div class="name" v-for="(item, index) in ProcessingList" :key="index"> + <span>{{ item.name }}:</span> + <el-tooltip :content="item.input+'元'" placement="top"> + <el-input-number + v-model="item.input" + :min="item.min" + :max="item.max" + @change="TotalChange" + :disabled="Appealeditor == 'appeal' && CompletedEditing" + /> + </el-tooltip> + <!-- 申诉的时候不展示 --> + <div + v-if="Appealeditor != 'appeal'" + class="Paymentname" + @click="PaymentSelection(item)" + > + {{ item.payment ? item.text : '支付方式' }} + </div> - <div class="Paymentname" v-else> - {{ item.payment ? item.text : '支付方式' }} + <div class="Paymentname" v-else> + {{ item.payment ? item.text : '支付方式' }} + </div> + + <div class="el_PaymentUnit"> + <span>支付单位:</span> + <el-input + v-model="item.paymentUnit" + placeholder="请输入支付单位" + :disabled="Appealeditor == 'appeal' && CompletedEditing" + /> + </div> + + <el-tooltip content="item.input" placement="top"> + <el-date-picker + v-model="item.compensationTime" + type="datetime" + format="YYYY-MM-DD" + value-format="YYYY-MM-DD HH:mm:ss" + placeholder="支付时间" + :disabled="Appealeditor == 'appeal' && CompletedEditing" + class="el_Claimpaymenttime" + /> + </el-tooltip> + </div> </div> - <div class="el_PaymentUnit"> - <span>支付单位:</span> - <el-input - v-model="item.paymentUnit" - placeholder="请输入支付单位" - :disabled="Appealeditor == 'appeal' && CompletedEditing" - /> + <div class="el_tool"> + <span>总金额:{{ TotalClaimAmount }}元</span> </div> - <el-date-picker - v-model="item.compensationTime" - type="datetime" - format="YYYY-MM-DD" - value-format="YYYY-MM-DD HH:mm:ss" - placeholder="理赔支付时间" - :disabled="Appealeditor == 'appeal' && CompletedEditing" - /> </div> - </div> - <div class="el_tool"> - <span>总金额:{{ TotalClaimAmount }}元</span> - </div> - </div> - <!-- 处理结果说明 --> - <el-form-item label="处理结果说明" class="el_resj"> - <el-input - v-model="Indexform.resultDescription" - placeholder="请输入处理结果说明" - clearable - :autosize="{ minRows: 3, maxRows: 4 }" - type="textarea" - :disabled="Appealeditor == 'appeal'" - /> - </el-form-item> + <!-- 处理结果说明 --> + <el-form-item label="处理结果说明" class="el_resj"> + <el-input + v-model="Indexform.resultDescription" + placeholder="请输入处理结果说明" + clearable + :autosize="{ minRows: 3, maxRows: 4 }" + type="textarea" + :disabled="Appealeditor == 'appeal'" + /> + </el-form-item> + </el-tab-pane> + </el-tabs> + <el-tabs type="border-card" class="demo-tabs" v-if="!Processingresults"> <el-tab-pane> <template #label> @@ -949,6 +1015,17 @@ const handle = () => { }); }; +// 获取当前责任方的责任人 +// const ResponsiblePartychange = (val, index) => { +// FangAddList.value[index].personResponsibleName = null; //清空当前选择的责任人 +// $_getBusinessDepartmentUser({ +// warehouseId: val, +// }).then(res => { +// console.log(res, '获取责任人列表'); +// personResponsibleList.value = res.data.data; +// }); +// }; + // 获取当前责任方的责任人 const ResponsiblePartychange = (val, index) => { FangAddList.value[index].personResponsibleName = null; //清空当前选择的责任人 @@ -956,9 +1033,10 @@ const ResponsiblePartychange = (val, index) => { warehouseId: val, }).then(res => { console.log(res, '获取责任人列表'); - personResponsibleList.value = res.data.data; + FangAddList.value[index].personResponsibleList = res.data.data; }); }; + const onLoad = () => { RouterState.value = $route.query.RouterState; if ($route.query.Appealeditor) { @@ -1001,11 +1079,7 @@ const onLoad = () => { handle(); //处理方和责任方信息 $_getInfo({ id: $route.query.id }).then(res => { - if (res.data.data.discoveryNode == '1') { - groundlineType.value = '1'; - } else { - groundlineType.value = 'null'; - } + groundlineType.value = res.data.data.discoveryNode; //发现节点回显 oldData.value = JSON.parse(JSON.stringify(res.data.data)); console.log(oldData.value, '旧数据'); console.log(res, '回显返回值参数'); @@ -1074,7 +1148,7 @@ const onLoad = () => { console.log(res, '环节字典'); Indexform.value.workOrderType = res.data.data.find( res => res.dictKey == Indexform.value.workOrderType - ).dictValue; //异常类型回显 + ).dictKey; //异常类型回显 }); //发现环节回显 @@ -1121,7 +1195,10 @@ const onLoad = () => { ProcessedId.value = res.data.data.processingResultsVO.id; } // 总金额回显 - TotalClaimAmount.value = res.data.data.processingResultsVO.money; + if(res.data.data.processingResultsVO.money){ + TotalClaimAmount.value = res.data.data.processingResultsVO.money; + } + // 理赔支付时间 Indexform.value.compensationTime = res.data.data.processingResultsVO.compensationTime; // 处理结果说明回显 @@ -1287,11 +1364,20 @@ const CompanyProportionInput = item => { // 发现节点事件 const DiscoveringNodesChange = val => { groundlineSet.value = false; //干线条件都不满足 - if (val == 1 || val == 2 || val == 3 || val == 4 || val == 5 || val == 8 || val == 7) { + if ( + val == 1 || + val == 2 || + val == 3 || + val == 4 || + val == 5 || + val == 6 || + val == 8 || + val == 7 + ) { groundlineType.value = val; //干线状态 console.log(val); } else { - groundlineSet.value = true; //展示所有搜索框 + groundlineType.value = null; //干线状态 } }; @@ -1823,6 +1909,7 @@ const ConfirmForm = () => { compensationMethodName: paymentMethodMatch ? paymentMethodMatch.dictValue : '', resultName: item.name, //处理结果名字 paymentUnit: item.paymentUnit, //支付单位 + compensationTime:item.compensationTime,//理赔支付时间 }; } else { return null; @@ -1921,11 +2008,22 @@ const Arbitrationcompleted = () => { .filter(item => item !== null); // 总金额 - let sum = 0; //金额总计 - for (let i = 0; i < ProcessingList.value.length; i++) { - sum = computeNumber(sum, '+', ProcessingList.value[i].input).result; - } - data.aftersalesProcessingResultsDTO.money = sum; //金额汇总 + // let sum = 0; //金额总计 + // for (let i = 0; i < ProcessingList.value.length; i++) { + // sum = computeNumber(sum, '+', ProcessingList.value[i].input).result; + // } + // data.aftersalesProcessingResultsDTO.money = sum; //金额汇总 + + let TotalAmount=0;//总金额 + ProcessingList.value.forEach(res=>{ + console.log(res); + TotalAmount += Number(res.input) + }) + console.log(TotalAmount,'总金额'); + DataSubmit.aftersalesProcessingResultsDTO.money = TotalAmount; //金额汇总 + + + data.aftersalesProcessingResultsDTO['resultType'] = ProcessingList.value .map(item => item.name) .join(','); //处理结果说明文字拼接 @@ -2012,10 +2110,11 @@ const Arbitrationcompleted = () => { }; }); console.log(data, '处理好的值'); - $_updateCompletionEnd(data).then(res => { - console.log(res, '完结成功'); - console.log(res, '完结编辑'); - editloading.value = false; //关闭加载效果 + $_updateCompletionEnd(data) + .then(res => { + console.log(res, '完结成功'); + console.log(res, '完结编辑'); + editloading.value = false; //关闭加载效果 if (res.data.code == 200) { ElMessage({ message: res.data.msg, @@ -2027,9 +2126,10 @@ const Arbitrationcompleted = () => { path: '/aftersales/aftersalesWorkOrder', }); } - }).catch(res=>{ - editloading.value = false; //关闭加载效果 - }); + }) + .catch(res => { + editloading.value = false; //关闭加载效果 + }); return; } @@ -2361,6 +2461,15 @@ const ViewPackageDetails = val => { }); dialogHistoricalPackage.value = false; //打开历史包件弹窗 }; + +// 对调查经过输入框进行处理 +const isShowFormItem1 = computed(() => { + return !['1', '2', '5', '6', '7'].includes(groundlineType.value); +}); +// 对调查经过输入框进行处理 +const isShowFormItem2 = computed(() => { + return !['2', '5', '6', '7', '8'].includes(groundlineType.value); +}); </script> <style scoped lang="scss"> @@ -2495,105 +2604,59 @@ const ViewPackageDetails = val => { cursor: pointer; } } -.ResponsibilityBox { - width: 100%; - display: flex; - flex-direction: column; - .leftbox { - width: 80%; - display: flex; - justify-content: space-between; - .el_zb { - width: 140px; - margin-right: 50px; - text-align: right; - :deep(.el-input) { - margin-left: 10px; - text-align: right; - } - } - } - .maxBox { - display: flex; - align-items: center; - width: 30%; - margin-right: 16px; - font-size: 14px; - .title { - width: 80px; - font-size: 14px; - color: #606266; - } - .el-select { - width: 100%; - } - :deep(.el-form-item) { - margin-bottom: 0; - } - } - .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%; - margin-right: 20px; - .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; + width: 100%; + border-left: none; + border-right: none; } .NumTotal { width: 30%; - margin-top: 16px; + margin-top: 10px; display: flex; align-items: center; span { width: 120px; font-size: 14px; + border: 1px solid #ccc; + display: flex; + width: auto; + padding: 4px 12px; } } + .Proportion { - margin-top: 16px; + width: 30%; + margin-top: 10px; + display: flex; + align-items: center; .title { + width: 120px; + font-size: 14px; + border: 1px solid #ccc; + display: flex; + width: auto; + padding: 4px 12px; + } +} + +.el_tool{ + width: 30%; + margin-top: 10px; + display: flex; + align-items: center; + span{ + width: 120px; font-size: 14px; - color: #606266; + border: 1px solid #ccc; + display: flex; + width: auto; + padding: 4px 12px; } } + :deep(.is-active) { border-bottom: 1px solid #e4e7ed !important; } @@ -2653,10 +2716,12 @@ const ViewPackageDetails = val => { width: 230px; } span { - display: block; width: 30%; color: #606266; font-size: 16px; + display: flex; + justify-content: flex-end; + margin-right: 10px; } } } @@ -2679,9 +2744,10 @@ const ViewPackageDetails = val => { margin: 10px 0; } .Paymentname { - width: 180px; + width: 200px; margin: 0 10px; } + } .el_handle { margin-top: 16px; @@ -2699,11 +2765,10 @@ const ViewPackageDetails = val => { border: 1px solid #bfbfbf; margin-left: 2px; border-radius: 4px; - width: 100px; font-size: 14px; padding: 10px; cursor: pointer; - width: 100px; + width: 120px; } .payanindemnity { @@ -2782,4 +2847,164 @@ const ViewPackageDetails = val => { width: 150px; } } +.IndexFrom { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + border: 1px solid #ccc; + .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; + } +} +:deep(.el_inputTop) { + margin-bottom: 0 !important; +} +.Investigationprocess { + height: auto !important; + align-items: flex-start !important; + flex: 1 0 44% !important; + :deep(.el-form-item__content) { + width: 100% !important; + } +} +.el_Responsibility { + margin-top: 6px; +} +.ResponsibilityBox { + width: 100%; + display: flex; + flex-direction: column; + + .leftbox { + width: 80%; + display: flex; + justify-content: space-between; + .el_zb { + width: 140px; + margin-right: 50px; + text-align: right; + :deep(.el-input) { + margin-left: 10px; + text-align: right; + } + } + } + .maxBox { + display: flex; + align-items: center; + width: 30%; + margin-right: 16px; + font-size: 14px; + .title { + width: 80px; + font-size: 14px; + color: #606266; + } + .el-select { + width: 100%; + } + :deep(.el-form-item) { + margin-bottom: 0; + } + } + .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; + :deep(.el-form-item__label) { + width: auto !important; + } + } + .maxBox { + display: flex; + align-items: center; + width: 30%; + margin-right: 20px; + .title { + width: 140px; + color: #606266; + font-size: 14px; + } + .el-select { + width: 100%; + } + :deep(.el-form-item) { + margin: 4px 0; + } + } + + .el-btn { + margin-left: 5%; + border: none; + display: flex; + align-items: center; + } + .el_btbox { + display: flex; + margin-top: 10px; + } +} +:deep(.el_Processingresults) { + margin-top: 6px; + .el-tabs__content { + padding: 0 10px; + } + + .el_resj{ + flex-direction: column; + .el-form-item__label{ + justify-content: flex-start; + font-size: 14px; + } + } +} + </style>