Переглянути джерело

维权订单详情操作退货

pengyh 1 рік тому
батько
коміт
faefaf4bcc

+ 4 - 3
src/views/mallManagement/order/order_refund/index.vue

@@ -450,7 +450,7 @@
 				</el-form>
 				<div slot="footer" class="dialog-footer">
 				  <el-button @click="returnGoodsVisible = false;data.removeTab()">关 闭</el-button>
-				  <el-button v-if="activeKey == 'REFUND_GOODS'" @click="saveReturnGoods(data.removeTab)">确 定</el-button>
+				  <el-button type="primary" v-if="activeKey == 'REFUND_GOODS'" @click="saveReturnGoods(data.removeTab)">确 定</el-button>
 				</div>
 			</div>
 		</template>
@@ -461,6 +461,7 @@
 import {getRefundList, saveRefundRemark, changeExamineStatus, receiveProd, getWebsiteList, getOrderDetail, getCodeDetail2, getMaterialList, listImport2, saveCode2,delCode2} from "@/api/order"
 import {getExpress} from "@/api/common"
 import {downloadFiles} from '@/utils/util'
+import { commonTemplateDownload } from '@/api/common.js'
 import '@/styles/order-list.scss'
 
 export default {
@@ -507,7 +508,7 @@ export default {
 		joinCode: JSON.parse(localStorage.getItem('greemall_user')).joinCode,
 		orderDetailId: '',
 		returnGoodsFormRules: {
-			refundMessage: [{ required: true, message: '请填写卖家留言', trigger: 'blur' }],
+			// refundMessage: [{ required: true, message: '请填写卖家留言', trigger: 'blur' }],
 		},
     }
   },
@@ -570,7 +571,7 @@ export default {
 		},
 		changeType(){
 			this.getOrderDetail()
-			this.getCodeDetail()
+			this.getCodeDetail2()
 		},
 		async getCodeDetail2(){
 			getCodeDetail2({orderId: this.editOrderId}).then(async res => {

+ 397 - 9
src/views/mallManagement/order/order_refund_detail/index.vue

@@ -22,7 +22,8 @@
             </div>
             <div class="order-refund-main-opt-btn">
               <template v-if="orderDetail.orderStatus === 'DSJCL'">
-                <el-popconfirm title="确定同意吗?" @confirm="changeExamineStatus('OK')">
+				<el-button v-if="orderDetail.refundType == 'REFUND_GOODS'" @click="changeExamineStatus('OK',orderDetail.refundType)" slot="reference" size="small" type="primary">同意</el-button>
+                <el-popconfirm v-else title="确定同意吗?" @confirm="changeExamineStatus('OK')">
                   <el-button slot="reference" size="small" type="primary">同意</el-button>
                 </el-popconfirm>
                 <el-popconfirm title="确定拒绝吗?" @confirm="changeExamineStatus('FAIL')" style="margin-left: 10px;">
@@ -178,11 +179,189 @@
         <el-button @click="logisticsVisible = false">关 闭</el-button>
       </div>
     </el-dialog>
+	<!-- 退货确认 -->
+	<el-dialog :title="'退货确认'" :visible.sync="returnGoodsVisible" :show-close="false" width="80%" :close-on-click-modal="false">
+		<el-form :model="returnGoodsForm" :rules="returnGoodsFormRules" ref="returnGoodsForm" label-width="80px" label-position="left">
+			<el-row :gutter="20">
+				<el-col :span="24">
+					<el-form-item label="卖家留言" prop="refundMessage">
+					  <el-input type="textarea" :rows="5" v-model="returnGoodsForm.refundMessage" placeholder="请输入卖家留言"></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="24">
+					<el-card class="box-card">
+						<el-tabs v-model="typeIndex" @tab-click="changeType">
+						    <el-tab-pane label="发货数量" name="1"></el-tab-pane>
+						    <el-tab-pane label="发货条码" name="2"></el-tab-pane>
+						</el-tabs>
+						<br/>
+						<el-button size="small" v-show="typeIndex == 2" type="primary" @click="addCode()">新增</el-button>
+						<el-button size="small" v-show="typeIndex == 1" type="primary" @click="handleDownload('导入条码模板')">导入条码模板下载</el-button>
+						<div class="table">
+							<!-- 发货数量 -->
+							<el-form v-show="typeIndex == 1" ref="formData1" :model="formData1" label-width="0" size="small" label-position="left">
+								<el-table :data="formData1.list" element-loading-text="Loading" border fit highlight-current-row stripe>
+									<el-table-column prop="brandName" align="center" label="品牌"></el-table-column>
+									<el-table-column prop="mainName" align="center" label="大类"></el-table-column>
+									<el-table-column prop="smallName" align="center" label="小类"></el-table-column>
+									<el-table-column prop="goodsName" align="center" label="商品名称"></el-table-column>
+									<el-table-column prop="goodsMaterialSpecsName" align="center" label="规格型号"></el-table-column>
+									<el-table-column prop="goodsMaterialUnit" align="center" label="单位">
+										<template slot-scope="scope">
+											{{scope.row.goodsMaterialUnit == 'C'?'整套':scope.row.goodsMaterialUnit == 'I'?"单个":''}}
+										</template>
+									</el-table-column>
+									<el-table-column prop="num" align="center" label="数量"></el-table-column>
+									<el-table-column prop="insideNum" align="center" label="内机数量"></el-table-column>
+									<el-table-column prop="outNum" align="center" label="外机数量"></el-table-column>
+									<el-table-column prop="partNum" align="center" label="配件数量"></el-table-column>
+									<el-table-column prop="refundInsideCodeQty" align="center" label="导入内机条码数量" width="140"></el-table-column>
+									<el-table-column prop="refundOutCodeQty" align="center" label="导入外机条码数量" width="140"></el-table-column>
+									<el-table-column prop="refundPartsCodeQty" align="center" label="导入配件条码数量" width="140"></el-table-column>
+									<el-table-column label="操作" align="center" width="140" fixed="right">
+										<template slot-scope="scope" v-if="formType != 2 && joinCode">
+											<el-upload
+											  action='_'
+											  :show-file-list='false'
+											  :http-request="importCode"
+											>
+												<el-button @click="orderDetailId = scope.row.orderDetailId" size="mini" type="text">导入条码</el-button>
+											</el-upload>
+										</template>
+									</el-table-column>
+								</el-table>
+							</el-form>
+							<!-- 发货条码 -->
+							<el-form ref="formData2" :model="formData2">
+								<el-table v-show="typeIndex == 2" :data="formData2.list" element-loading-text="Loading" border fit highlight-current-row stripe>
+									<el-table-column label="品牌" align="center">
+										<template slot-scope="scope">
+											<el-form-item>
+												<el-input type="text" v-model="scope.row.brandName" :disabled="true" placeholder="请输入"></el-input>
+											</el-form-item>
+										</template>
+									</el-table-column>
+									<el-table-column label="商品大类" align="center">
+										<template slot-scope="scope">
+											<el-form-item>
+												<el-input type="text" v-model="scope.row.mainName" :disabled="true" placeholder="请输入"></el-input>
+											</el-form-item>
+										</template>
+									</el-table-column>
+									<el-table-column label="商品小类" align="center">
+										<template slot-scope="scope">
+											<el-form-item>
+												<el-input type="text" v-model="scope.row.smallName" :disabled="true" placeholder="请输入"></el-input>
+											</el-form-item>
+										</template>
+									</el-table-column>
+									<el-table-column prop="" align="center" label="商品名称">
+										<template slot-scope="scope">
+											<el-form-item>
+												<el-input type="text" v-model="scope.row.goodsMaterialName" :disabled="true" placeholder="请输入"></el-input>
+											</el-form-item>
+										</template>
+									</el-table-column>
+									<el-table-column label="规格型号" align="center">
+										<template slot-scope="scope">
+											<el-form-item :prop="'list.' + scope.$index + '.specs'" :rules="[{ required: true, message: `请选择规格型号`, trigger: 'blur' }]">
+												<el-select v-model="scope.row.specs" @change="(e)=>{changeSpecs(e,scope.row)}" value-key="goodsMaterialSpecsName" :disabled="isEdit2 != scope.$index || formType == 2" placeholder="请选择" style="width: 100%;">
+												    <el-option
+												      v-for="(item,ind) in formData1.list"
+												      :key="ind"
+												      :label="item.goodsMaterialSpecsName"
+												      :value="item">
+												    </el-option>
+												</el-select>
+											</el-form-item>
+										</template>
+									</el-table-column>
+									<el-table-column label="物料类型" align="center">
+										<template slot-scope="scope">
+											<el-form-item :prop="'list.' + scope.$index + '.goodsMaterialItemType'" :rules="[{ required: true, message: `请选择物料类型`, trigger: 'blur' }]">
+												<el-select v-model="scope.row.goodsMaterialItemType" @change="(e)=>{changeMaterial(e,scope.row)}" 
+													:disabled="isEdit2 != scope.$index || formType == 2" placeholder="请选择" style="width: 100%;">
+												    <el-option
+												      v-for="(item,ind) in [{name: '内机',id: 'INSIDE'},{name: '外机',id: 'OUT'},{name: '配件',id: 'PARTS'}]"
+												      :key="ind"
+												      :label="item.name"
+												      :value="item.id">
+												    </el-option>
+												</el-select>
+											</el-form-item>
+										</template>
+									</el-table-column>
+									<el-table-column label="物料名称" align="center">
+										<template slot-scope="scope">
+											<el-form-item :prop="'list.' + scope.$index + '.material'" :rules="[{ required: true, message: `请选择物料名称`, trigger: 'blur' }]">
+												<el-select v-model="scope.row.material" @focus="(e)=>{
+													if(!scope.row.goodsMaterialItemType){
+														return $message.warning('请先选择物料类型!');
+													}
+												}" @change="(e)=>{
+													scope.row.materialName = e.name
+													scope.row.stockQty = (e.uniqueCode=='YES'?1:null)
+													scope.row.uniqueCode = e.uniqueCode
+													scope.row.goodsMaterialItemId = e.itemId
+													
+												}" value-key="name" :disabled="isEdit2 != scope.$index || formType == 2" placeholder="请选择" style="width: 100%;">
+												    <el-option
+												      v-for="(item,ind) in scope.row.materialList"
+												      :key="ind"
+												      :label="item.name"
+												      :value="item">
+												    </el-option>
+												</el-select>
+											</el-form-item>
+										</template>
+									</el-table-column>
+									<el-table-column prop="" align="center" label="是否一物一码" >
+										<template slot-scope="scope">
+											<el-form-item>
+												{{scope.row.uniqueCode=='YES'?'是':scope.row.uniqueCode=='NO'?'否':''}}
+											</el-form-item>
+										</template>
+									</el-table-column>
+									<el-table-column prop="" align="center" label="条码" >
+										<template slot-scope="scope">
+											<el-form-item :prop="'list.' + scope.$index + '.materialCode'" :rules="[{ required: true, message: `请输入条码`, trigger: 'blur' }]">
+												<el-input type="text" v-model="scope.row.materialCode" :disabled="isEdit2 != scope.$index || formType == 2" placeholder="请输入"></el-input>
+											</el-form-item>
+										</template>
+									</el-table-column>
+									<el-table-column prop="" align="center" label="数量">
+										<template slot-scope="scope">
+											<el-form-item :prop="'list.' + scope.$index + '.stockQty'" :rules="[{ required: true, message: `请输入数量`, trigger: 'blur' }]">
+												<el-input type="number" v-model="scope.row.stockQty" :disabled="isEdit2 != scope.$index || formType == 2 || scope.row.uniqueCode=='YES'" placeholder="请输入"></el-input>
+											</el-form-item>
+										</template>
+									</el-table-column>
+									<el-table-column label="操作" align="right" width="140" fixed="right">
+										<template slot-scope="scope" v-if="formType != 2">
+											<el-button size="mini" type="primary" v-if="scope.$index == isEdit2" @click="saveCode(scope.row)">保存</el-button>
+											<el-button size="mini" type="primary" v-if="scope.$index != isEdit2" @click="isEdit2 = scope.$index">编辑</el-button>
+											<el-popconfirm title="确定删除吗?" @confirm="delCode(scope.row.orderDetailCodeId,scope.$index)">
+												<el-button slot="reference" size="mini" type="danger">删除</el-button>
+											</el-popconfirm>
+										</template>
+									</el-table-column>
+								</el-table>
+							</el-form>
+						</div>
+					</el-card>
+				</el-col>
+			</el-row>
+		</el-form>
+		<div slot="footer" class="dialog-footer">
+		  <el-button @click="returnGoodsVisible = false;">关 闭</el-button>
+		  <el-button type="primary" @click="saveReturnGoods()">确 定</el-button>
+		</div>
+	</el-dialog>
   </div>
 </template>
 
 <script>
-import {changeExamineStatus, getOrderRefundDetail, receiveProd, saveRefundRemark} from "@/api/order";
+import {changeExamineStatus, getOrderRefundDetail, receiveProd, saveRefundRemark, getOrderDetail, getCodeDetail2, getMaterialList, listImport2, saveCode2,delCode2} from "@/api/order";
 import {getExpress} from "@/api/common";
 
 export default {
@@ -193,7 +372,25 @@ export default {
       orderDetail: {},
       remarkVisible: false,
       logisticsVisible: false,
-      logistics: []
+      logistics: [],
+	  returnGoodsVisible: false,
+	  typeIndex: '1',
+	  formData1: {
+	  	list: [],
+	  },
+	  formData2: {
+	  	list: [],
+	  },
+	  isEdit1: 0,
+	  isEdit2: 0,
+	  joinCode: JSON.parse(localStorage.getItem('greemall_user')).joinCode,
+	  orderDetailId: '',
+	  returnGoodsFormRules: {
+	  	// refundMessage: [{ required: true, message: '请填写卖家留言', trigger: 'blur' }],
+	  },
+	  returnGoodsForm: {
+	  	refundMessage: ''
+	  },
     }
   },
   created() {
@@ -233,14 +430,30 @@ export default {
       })
     },
     // 变更维权处理状态
-    changeExamineStatus(examineStatus) {
-      console.log(123);
+    changeExamineStatus(examineStatus,refundType) {
+      console.log(refundType);
       const orderRefundId = this.orderRefundId
-      changeExamineStatus({orderRefundId, examineStatus}).then(() => {
-        this.getDetail();
-        this.$successMsg('操作成功');
-      })
+		if(refundType == 'REFUND_GOODS'){
+			this.getOrderDetail()
+			this.getCodeDetail2()
+			this.returnGoodsVisible = true
+		}else{
+			changeExamineStatus({orderRefundId, examineStatus}).then(() => {
+			  this.getDetail();
+			  this.$successMsg('操作成功');
+			})
+		}
     },
+	saveReturnGoods(){
+		changeExamineStatus({
+		  orderRefundId: this.orderRefundId,
+		  examineStatus: 'OK',
+		  refundMessage: this.returnGoodsForm.refundMessage
+		}).then(() => {
+		  this.getDetail();
+		  this.$successMsg('操作成功');
+		})
+	},
     // 确认收货
     receiveProd() {
       const orderRefundId = this.orderRefundId
@@ -256,6 +469,181 @@ export default {
         this.logistics = res.data
       })
     },
+		
+		getOrderDetail(){
+			getOrderDetail({orderId: this.orderDetail.orderId}).then(res => {
+			  this.formData1.list = res.data.orderDetails
+			})
+		},
+		changeType(){
+			this.getOrderDetail()
+			this.getCodeDetail2()
+		},
+		async getCodeDetail2(){
+			getCodeDetail2({orderId: this.orderDetail.orderId}).then(async res => {
+				for(var item of res.data){
+					item.specs = {goodsMaterialSpecsName: item.specsName}
+					item.material = {name: item.materialName}
+					item.materialList = await this.getMaterialList(item.specsName,item.goodsMaterialItemType)
+				}
+				this.formData2.list = res.data
+			})
+		},
+		async getMaterialList(specsName,type){
+			return new Promise((resolve, reject) => {
+				getMaterialList({
+					pageNum: 1,
+					pageSize: -1,
+					specsName,
+					type
+				}).then(async res => {
+					resolve(res.data.records) 
+				})
+			})
+			
+		},
+		async changeSpecs(e,row){
+			row.brandName = e.brandName
+			row.brandId = e.brandId
+			row.mainName = e.mainName
+			row.mainId = e.mainNumber
+			row.smallName = e.smallName
+			row.smallId = e.smallNumber
+			row.specsName = e.goodsMaterialSpecsName
+			row.goodsMaterialName = e.goodsName
+			row.goodsMaterialId = e.goodsMaterialId
+			row.material = null
+			row.materialName = ''
+			row.stockQty = ''
+			row.uniqueCode = ''
+			row.materialList = await this.getMaterialList(row.specsName,row.goodsMaterialItemType)
+			row.orderDetailId = e.orderDetailId
+		},
+		async changeMaterial(e,row){
+			if(!row.specs){
+				return this.$message.warning('请先选择规格型号!');
+			}
+			row.material = null
+			row.materialName = ''
+			row.stockQty = ''
+			row.uniqueCode = ''
+			row.materialList = await this.getMaterialList(row.specsName,row.goodsMaterialItemType)
+		},
+		//发货新增条码
+		addCode(){
+			this.$refs.formData2.validate((valid) => {
+				if (valid) {
+					this.isEdit2 = 0
+					this.formData2.list.unshift({
+						brandId: '',
+						brandName: '',
+						mainId: '',
+						mainName: '',
+						stockQty: '',
+						smallId: '',
+						smallName: '',
+						goodsMaterialItemType: '',
+						goodsMaterialName: '',
+						goodsMaterialId: '',
+						materialCode: '',
+						uniqueCode: '',
+						specs: null,
+						specsName: '',
+						materialName: '',
+						material: null,
+						materialList: [],
+						orderDetailId: '',
+						goodsMaterialItemId: ''
+					})
+				}
+			});
+		},
+		delCode(orderDetailCodeId,index){
+			if(orderDetailCodeId){
+				delCode2({
+				  orderDetailCodeId
+				}).then(res => {
+				  if (res.code == 200) {
+				    this.$message({ type: 'success', message: '删除成功!' })
+				    this.getOrderDetail()
+				    this.getCodeDetail2()
+				  } else {
+				    this.$message.error(res.msg);
+				  }
+				})
+			}else{
+				this.formData2.list.splice(index,1)
+			}
+		},
+		saveCode(orderDetailCodes){
+			const that = this
+			let params = [{
+				...orderDetailCodes,
+				orderId: this.orderRefundId,
+			}]
+			delete params[0].material;
+			delete params[0].specs;
+			this.$refs.formData2.validate((valid, invalidFields, errLabels) => {
+				if (valid) {
+					saveCode2(params).then(res=>{
+						if(res.code == 200){
+							that.$message.success('保存成功!')
+							this.getOrderDetail()
+							this.getCodeDetail2()
+						}
+					})
+				}
+			})
+		},
+		importCode(data){
+			const loading = this.$loading({
+			  lock: true,
+			  text: '正在导入',
+			  spinner: 'el-icon-loading',
+			  background: 'rgba(0, 0, 0, 0.7)'
+			})
+			var formdata = new FormData()
+			formdata.append('file', data.file)
+			let params = {
+				orderDetailId: this.orderDetailId
+			}
+			if (!!params) {
+			  for (const key in params) {
+			    if (Object.hasOwnProperty.call(params, key)) {
+			      formdata.append(key, params[key])
+			    }
+			  }
+			}
+			listImport2({ formdata })
+			  .then(res => {
+			    this.getOrderDetail()
+				this.getCodeDetail()
+			    loading.close()
+			    this.$message({
+			      type: 'success',
+			      message: '导入成功!'
+			    })
+			  })
+			  .catch(err => {
+			    loading.close()
+			    this.$message({
+			      type: 'error',
+			      message: err.message || '导入失败'
+			    })
+			  })
+		},
+		
+		// 下载导入模版
+		handleDownload(title) {
+			commonTemplateDownload({ name: '导入条码.xlsx' }, title).then(res => {
+				this.$message({
+					message: '下载成功',
+					type: 'success'
+				})
+			}).catch(err => {
+				this.$message.error('下载失败')
+			})
+		},
   },
   computed: {
     totalAmountCompute() {