Kaynağa Gözat

订单详情发货

pengyh 1 yıl önce
ebeveyn
işleme
120967d7c7

+ 3 - 3
src/components/Mall/Member/member-browse.vue

@@ -5,7 +5,7 @@
         <el-table-column align="center" label="商品信息" prop="goodsName" min-width="200">
           <template slot-scope="scope">
             <div class="goods-info">
-              <el-image style="width: 40px; height: 40px;" :src="scope.row.imgUrl" :preview-src-list="[scope.row.imgUrl]" fit="cover"></el-image>
+              <el-image style="width: 40px; height: 40px;" :src="scope.row.goodsImg" :preview-src-list="[scope.row.goodsImg]" fit="cover"></el-image>
               <div class="name">{{scope.row.goodsName}}</div>
             </div>
           </template>
@@ -72,12 +72,12 @@ export default {
     handleSizeChange(val) {
       this.pageSize = val
       this.currentPage = 1
-      this.getList()
+      this.getBrowseList()
     },
     // 更改当前页
     handleCurrentChange(val) {
       this.currentPage = val
-      this.getList()
+      this.getBrowseList()
     },
   }
 }

+ 6 - 6
src/components/Mall/Member/member-order.vue

@@ -90,12 +90,12 @@ export default {
       this.getList()
     },
     goOrderDetail(row) {
-      this.$router.push({
-        path: '/order/detail',
-        query: {
-          orderId: row.orderId
-        }
-      })
+		this.$router.push({
+		  name: "order_detail",
+		  query: {
+		    orderId:row.orderId
+		  }
+		})
     }
   }
 }

+ 6 - 1
src/components/Mall/Member/member-warranty.vue

@@ -88,7 +88,12 @@ export default {
     },
     goOrderDetail(row) {
 		this.$router.push({
-			name: 'orderSettleManag'
+			name: 'orderSettleManag',
+			params: {
+				pageName: row.payNo,
+				pageType: row.orderChannel,
+				pageCode: row.payNo,
+			},
 		})
     }
   }

+ 421 - 27
src/views/mallManagement/order/order_detail/index.vue

@@ -232,7 +232,7 @@
     <el-dialog :title="dialogTitle" :visible.sync="remarkVisible" :show-close="false" :width="dialogWidth"
       :close-on-click-modal="false">
       <el-form :model="orderForm" :rules="orderFormRules" ref="orderForm" v-if="curOpenDialogType !== 'query'"
-        label-width="90px" label-position="left">
+        label-width="100px" label-position="left">
         <el-form-item prop="remark" v-if="curOpenDialogType === 'remark'">
           <el-input type="textarea" :autosize="{ minRows: 8, maxRows: 16 }" placeholder="请输入备注内容" v-model="remark"
             maxlength="100" show-word-limit>
@@ -250,27 +250,218 @@
         <el-form-item label="收货地址" prop="receAddress" v-if="curOpenDialogType === 'info'">
           <el-input v-model="orderForm.receAddress" autocomplete="off" placeholder="请输入收货地址"></el-input>
         </el-form-item>
-        <el-form-item label="快递单号" prop="logisticsNo" v-if="curOpenDialogType === 'send'">
-          <el-input v-model="orderForm.logisticsNo" autocomplete="off" placeholder="请输入快递单号"></el-input>
-        </el-form-item>
-        <el-form-item label="物流公司" prop="companyCode" v-if="curOpenDialogType === 'send'">
-          <el-select v-model="orderForm.companyCode" placeholder="请选择物流公司" style="width: 100%;">
-            <el-option :label="item.name" :value="item.code" v-for="(item, index) in companyList"
-              :key="index"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="仓储" prop="storageId" v-if="curOpenDialogType === 'send'">
-          <el-select v-model="orderForm.storageId" placeholder="请选择仓储" style="width: 100%;">
-            <el-option :label="item.storageName" :value="item.storageId" v-for="(item, index) in storageList"
-              :key="index"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="是否派单" prop="workOrder" v-if="curOpenDialogType === 'send'">
-          <el-radio-group v-model="orderForm.workOrder">
-            <el-radio :label="true">是</el-radio>
-            <el-radio :label="false">否</el-radio>
-          </el-radio-group>
-        </el-form-item>
+		<template v-if="curOpenDialogType === 'send'">
+			<el-row :gutter="20">
+				<el-col :span="6">
+					<el-form-item label="发货方式" prop="pickType">
+					  <el-radio-group v-model="orderForm.pickType">
+					    <el-radio label="YES">自提/自送</el-radio>
+					    <el-radio label="NO">快递物流</el-radio>
+					  </el-radio-group>
+					</el-form-item>
+				</el-col>
+				<el-col :span="6">
+					<el-form-item v-if="orderForm.pickType == 'YES'" label="提货人" prop="pickName" :rules="[{ required: true, message: '提货人不能为空', trigger: 'blur' }]">
+					  <el-input v-model="orderForm.pickName" placeholder="请输入提货人"></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="6">
+					<el-form-item v-if="orderForm.pickType == 'YES'" label="提货人电话" prop="pickPhone" :rules="[{ required: true, message: '提货人电话不能为空', trigger: 'blur' },{ pattern:/^((1[3456789]\d{9}))$/, message: '电话号码格式不正确', trigger: 'blur' }]">
+					  <el-input v-model="orderForm.pickPhone" placeholder="请输入提货人电话"></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="6">
+					<el-form-item v-if="orderForm.pickType == 'NO'" label="快递单号" prop="logisticsNo">
+					  <el-input v-model="orderForm.logisticsNo" autocomplete="off" placeholder="请输入快递单号"></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="6">
+					<el-form-item v-if="orderForm.pickType == 'NO'" label="物流公司" prop="companyCode">
+					  <el-select v-model="orderForm.companyCode" placeholder="请选择物流公司" style="width: 100%;">
+					    <el-option :label="item.name" :value="item.code" v-for="(item, index) in companyList"
+					      :key="index"></el-option>
+					  </el-select>
+					</el-form-item>
+				</el-col>
+				<el-col :span="6">
+					<el-form-item label="仓储" prop="storageId">
+					  <el-select v-model="orderForm.storageId" placeholder="请选择仓储" style="width: 100%;">
+					    <el-option :label="item.storageName" :value="item.storageId" v-for="(item, index) in storageList"
+					      :key="index"></el-option>
+					  </el-select>
+					</el-form-item>
+				</el-col>
+				<el-col :span="6">
+					<el-form-item label="是否派单" prop="workOrder">
+					  <el-radio-group v-model="orderForm.workOrder">
+					    <el-radio :label="true">是</el-radio>
+					    <el-radio :label="false">否</el-radio>
+					  </el-radio-group>
+					</el-form-item>
+				</el-col>
+				<el-col :span="24">
+					<el-card class="box-card">
+						<el-tabs v-model="typeIndex">
+						    <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="insideCodeQty" align="center" label="导入内机条码数量" width="140"></el-table-column>
+									<el-table-column prop="outCodeQty" align="center" label="导入外机条码数量" width="140"></el-table-column>
+									<el-table-column prop="partsCodeQty" align="center" label="导入配件条码数量" width="140"></el-table-column>
+									<el-table-column label="操作" align="center" width="140" fixed="right">
+										<template slot-scope="scope" v-if="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" 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" 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" 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" 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 || 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">
+											<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>
+		</template>
       </el-form>
       <el-table v-loading="logisticsLoading" :data="logistics" style="width: 100%" size="mini"
         v-if="curOpenDialogType === 'query'">
@@ -285,7 +476,9 @@
         <el-table-column prop="context" label="物流详情" align="center"></el-table-column>
       </el-table>
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="saveForm" v-if="curOpenDialogType !== 'query'">保 存</el-button>
+		  
+        <el-button type="primary" @click="saveForm" v-if="curOpenDialogType !== 'query' && curOpenDialogType !== 'send'">保 存</el-button>
+		<el-button type="primary" @click="deliverGoods" v-if="curOpenDialogType == 'send'">发 货</el-button>
         <el-button @click="cancelForm">{{ curOpenDialogType === 'query' ? '关 闭' : '取 消' }}</el-button>
       </div>
     </el-dialog>
@@ -318,9 +511,10 @@ import {
   confirmOrder,
   getOrderDetail, goodsDeliver,
   saveRemark, orderRefund, orderCompensate, getCompensateList,
-  changeShow
+  changeShow, getCodeDetail, getMaterialList, listImport, saveCode, delCode
 } from "@/api/order";
 import { getExpress, getCompanyList } from "@/api/common";
+import { commonTemplateDownload } from '@/api/common.js'
 import * as Storage from "@/api/storage";
 import { mapGetters } from 'vuex'
 
@@ -344,6 +538,9 @@ export default {
         logisticsNo: '',
         companyCode: '',
         workOrder: true,
+		pickType: 'YES',
+		pickName: '',
+		pickPhone: ''
       },
       orderFormRules: {
         payAmount: [
@@ -456,6 +653,17 @@ export default {
         refundNum: '',
       },
       compensateList: [],
+	  typeIndex: '1',
+	  formData1: {
+	  	list: [],
+	  },
+	  formData2: {
+	  	list: [],
+	  },
+	  isEdit1: 0,
+	  isEdit2: 0,
+	  joinCode: JSON.parse(localStorage.getItem('greemall_user')).joinCode,
+	  orderDetailId: ''
     }
   },
   created() {
@@ -472,10 +680,11 @@ export default {
         this.orderDetail.workerName = this.orderDetail.workerName ? this.orderDetail.workerName : '暂无'
         this.orderDetail.workerPhone = this.orderDetail.workerPhone ? this.orderDetail.workerPhone : ''
         this.evaluateDetail = res.data.orderComment;
+		this.formData1.list = res.data.orderDetails
       })
     },
     showDialog(type) {
-      this.dialogWidth = type === 'query' ? '80%' : '50%'
+      this.dialogWidth = type === 'query' ? '80%' : type === 'send' ? '80%': '50%'
       this.remarkVisible = true
       this.curOpenDialogType = type
       if (type === 'remark') {
@@ -705,7 +914,192 @@ export default {
         this.getDetail();
         this.$successMsg();
       })
-    }
+    },
+	
+	async getCodeDetail(){
+		getCodeDetail({orderId: this.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){
+			delCode({
+			  orderDetailCodeId
+			}).then(res => {
+			  if (res.code == 200) {
+			    this.$message({ type: 'success', message: '删除成功!' })
+			    this.getOrderDetail()
+			    this.getCodeDetail()
+			  } else {
+			    this.$message.error(res.msg);
+			  }
+			})
+		}else{
+			this.formData2.list.splice(index,1)
+		}
+	},
+	saveCode(orderDetailCodes){
+		const that = this
+		let params = [{
+			...orderDetailCodes,
+			orderId: this.orderId,
+		}]
+		delete params[0].material;
+		delete params[0].specs;
+		this.$refs.formData2.validate((valid, invalidFields, errLabels) => {
+			if (valid) {
+				saveCode(params).then(res=>{
+					if(res.code == 200){
+						that.$message.success('保存成功!')
+						this.getOrderDetail()
+						this.getCodeDetail()
+					}
+				})
+			}
+		})
+	},
+	deliverGoods(){
+		this.$refs.orderForm.validate((valid) => {
+		  if (valid) {
+		    goodsDeliver({
+		      orderId: this.orderId,
+		      logisticsNo: this.orderForm.logisticsNo,
+		      storageId: this.orderForm.storageId,
+		      companyCode: this.orderForm.companyCode,
+		      workOrder: this.orderForm.workOrder,
+		    				pickName: this.orderForm.pickName,
+		    				pickPhone: this.orderForm.pickPhone,
+		    				pickType: this.orderForm.pickType,
+		    }).then(() => {
+		      this.cancelForm();
+		      this.getDetail();
+		      this.$successMsg('发货成功');
+		    })
+		  }
+		})
+	},
+	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])
+		    }
+		  }
+		}
+		listImport({ formdata })
+		  .then(res => {
+		    this.getOrderDetail()
+		    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: {
@@ -738,7 +1132,7 @@ export default {
       const totalAmount = parseFloat(this.orderDetail.totalAmount)
       const freight = parseFloat(this.orderDetail.freight)
       return (totalAmount - freight).toFixed(2)
-    }
+    },
   }
 }
 </script>

+ 57 - 30
src/views/mallManagement/order/order_list/index.vue

@@ -254,6 +254,10 @@
 				                @click="queryLogistics(order)">
 				                查看物流
 				              </el-button>
+							  <el-button type="text" size="small"
+							    v-if="(order.orderStatus === 'YFH' || order.orderStatus === 'OVER')" @click="showLogistics(order, 'detail')">
+							    查看发货条码
+							  </el-button>
 				              <!-- toWorkOrderDetail(order.orderId) -->
 				              <el-button type="text" size="small" v-if="order.toWorkOrder && $restrict('workOrder_detail')"
 				                @click="queryWorkOrder(order.orderId)">查看工单</el-button>
@@ -304,75 +308,76 @@
 				</div>
 			</div>
 			<!-- 发货弹窗 -->
-			<div v-if="activeKey == 'deliverGoods' || activeKey == 'editExpressage'" class="app-container">
+			<div v-if="activeKey == 'deliverGoods' || activeKey == 'editExpressage' || activeKey == 'deliverGoodsDetail'" class="app-container">
 				<el-form :model="logisticsForm" ref="logisticsForm" label-width="100px" label-position="left">
 					<el-row :gutter="20">
 						<el-col :span="6">
-							<el-form-item label="发货方式" prop="pickType" v-if="logisticsType === 'add'">
+							<el-form-item label="发货方式" prop="pickType" v-if="logisticsType != 'edit'">
 							  <el-radio-group v-model="logisticsForm.pickType">
-							    <el-radio label="YES">自提/自送</el-radio>
-							    <el-radio label="NO">快递物流</el-radio>
+							    <el-radio :disabled="logisticsType == 'detail'" label="YES">自提/自送</el-radio>
+							    <el-radio :disabled="logisticsType == 'detail'" label="NO">快递物流</el-radio>
 							  </el-radio-group>
 							</el-form-item>
 						</el-col>
 						<el-col :span="6" v-if="logisticsForm.pickType == 'YES'">
 							<el-form-item label="提货人" prop="pickName" :rules="[{ required: true, message: '提货人不能为空', trigger: 'blur' }]">
-							  <el-input v-model="logisticsForm.pickName" placeholder="请输入提货人"></el-input>
+							  <el-input v-model="logisticsForm.pickName" :disabled="logisticsType == 'detail'" placeholder="请输入提货人"></el-input>
 							</el-form-item>
 						</el-col>
 						<el-col :span="6" v-if="logisticsForm.pickType == 'YES'">
 							<el-form-item label="提货人电话" prop="pickPhone" :rules="[{ required: true, message: '提货人电话不能为空', trigger: 'blur' },{ pattern:/^((1[3456789]\d{9}))$/, message: '电话号码格式不正确', trigger: 'blur' }]">
-							  <el-input v-model="logisticsForm.pickPhone" placeholder="请输入提货人电话"></el-input>
+							  <el-input v-model="logisticsForm.pickPhone" :disabled="logisticsType == 'detail'" placeholder="请输入提货人电话"></el-input>
 							</el-form-item>
 						</el-col>
 						<el-col :span="6" v-if="logisticsForm.pickType == 'NO'">
 							<el-form-item label="快递单号" prop="logisticsNo" :rules="[{ required: true, message: '快递单号不能为空', trigger: 'blur' }]">
-							  <el-input v-model="logisticsForm.logisticsNo" placeholder="请输入快递单号"></el-input>
+							  <el-input v-model="logisticsForm.logisticsNo" :disabled="logisticsType == 'detail'" placeholder="请输入快递单号"></el-input>
 							</el-form-item>
 						</el-col>
 						<el-col :span="6" v-if="logisticsForm.pickType == 'NO'">
 							<el-form-item label="物流公司" prop="companyCode"
 							  :rules="[{ required: true, message: '请选择物流公司', trigger: 'change' }]">
-							  <el-select v-model="logisticsForm.companyCode" placeholder="请选择物流公司" style="width: 100%;">
+							  <el-select v-model="logisticsForm.companyCode" :disabled="logisticsType == 'detail'" placeholder="请选择物流公司" style="width: 100%;">
 							    <el-option :label="item.name" :value="item.code" v-for="(item, index) in companyList"
 							      :key="index"></el-option>
 							  </el-select>
 							</el-form-item>
 						</el-col>
 						<el-col :span="6">
-							<el-form-item label="仓储" prop="storageId" v-if="logisticsType === 'add'"
+							<el-form-item label="仓储" prop="storageId" v-if="logisticsType != 'edit'"
 							  :rules="[{ required: true, message: '请选择仓储', trigger: 'change' }]">
-							  <el-select v-model="logisticsForm.storageId" placeholder="请选择仓储" style="width: 100%;">
+							  <el-input v-if="logisticsType == 'detail'" v-model="logisticsForm.storageName" :disabled="true" placeholder="请输入提货人"></el-input>
+							  <el-select v-else v-model="logisticsForm.storageId" placeholder="请选择仓储" style="width: 100%;">
 							    <el-option :label="item.storageName" :value="item.storageId" v-for="(item, index) in storageList"
 							      :key="index"></el-option>
 							  </el-select>
 							</el-form-item>
 						</el-col>
 						<el-col :span="6">
-							<el-form-item label="是否派单" prop="workOrder" v-if="logisticsType === 'add'">
+							<el-form-item label="是否派单" prop="workOrder" v-if="logisticsType != 'edit'">
 							  <el-radio-group v-model="logisticsForm.workOrder">
-							    <el-radio :label="true">是</el-radio>
-							    <el-radio :label="false">否</el-radio>
+							    <el-radio :disabled="logisticsType == 'detail'" :label="true">是</el-radio>
+							    <el-radio :disabled="logisticsType == 'detail'" :label="false">否</el-radio>
 							  </el-radio-group>
 							</el-form-item>
 						</el-col>
 						<el-col :span="6">
-							<el-form-item label="是否退换单" prop="exchange" v-if="logisticsType === 'add'">
+							<el-form-item label="是否退换单" prop="exchange" v-if="logisticsType != 'edit'">
 							  <el-radio-group v-model="logisticsForm.exchange">
-							    <el-radio :label="true">是</el-radio>
-							    <el-radio :label="false">否</el-radio>
+							    <el-radio :disabled="logisticsType == 'detail'" :label="true">是</el-radio>
+							    <el-radio :disabled="logisticsType == 'detail'" :label="false">否</el-radio>
 							  </el-radio-group>
 							</el-form-item>
 						</el-col>
 						<el-col :span="24">
 							<el-card class="box-card">
-								<el-tabs v-model="typeIndex">
+								<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>
+								<el-button size="small" v-show="typeIndex == 2 && logisticsType == 'add'" type="primary" @click="addCode()">新增</el-button>
+								<el-button size="small" v-show="typeIndex == 1 && logisticsType == 'add'" 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">
@@ -395,7 +400,7 @@
 											<el-table-column prop="outCodeQty" align="center" label="导入外机条码数量" width="140"></el-table-column>
 											<el-table-column prop="partsCodeQty" 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">
+												<template slot-scope="scope" v-if="formType != 2 && joinCode && logisticsType == 'add'">
 													<el-upload
 													  action='_'
 													  :show-file-list='false'
@@ -441,7 +446,7 @@
 											<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-select v-model="scope.row.specs" @change="(e)=>{changeSpecs(e,scope.row)}" value-key="goodsMaterialSpecsName" :disabled="isEdit2 != scope.$index || formType == 2 || logisticsType == 'detail'" placeholder="请选择" style="width: 100%;">
 														    <el-option
 														      v-for="(item,ind) in formData1.list"
 														      :key="ind"
@@ -456,7 +461,7 @@
 												<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%;">
+															:disabled="isEdit2 != scope.$index || formType == 2 || logisticsType == 'detail'" placeholder="请选择" style="width: 100%;">
 														    <el-option
 														      v-for="(item,ind) in [{name: '内机',id: 'INSIDE'},{name: '外机',id: 'OUT'},{name: '配件',id: 'PARTS'}]"
 														      :key="ind"
@@ -472,14 +477,14 @@
 													<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 this.$message.warning('请先选择物料类型!');
+																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%;">
+														}" value-key="name" :disabled="isEdit2 != scope.$index || formType == 2 || logisticsType == 'detail'" placeholder="请选择" style="width: 100%;">
 														    <el-option
 														      v-for="(item,ind) in scope.row.materialList"
 														      :key="ind"
@@ -500,19 +505,19 @@
 											<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-input type="text" v-model="scope.row.materialCode" :disabled="isEdit2 != scope.$index || formType == 2 || logisticsType == 'detail'" 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-input type="number" v-model="scope.row.stockQty" :disabled="isEdit2 != scope.$index || formType == 2 || scope.row.uniqueCode=='YES' || logisticsType == 'detail'" 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">
+												<template slot-scope="scope" v-if="logisticsType == 'add'">
 													<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)">
@@ -529,7 +534,7 @@
 				</el-form>
 				<br/>
 				<div slot="footer" class="dialog-footer">
-				  <el-button type="primary" @click="saveLogistics(data.removeTab)">{{logisticsType === 'add'?'发 货':'保 存'}}</el-button>
+				  <el-button type="primary" v-if="logisticsType != 'detail'" @click="saveLogistics(data.removeTab)">{{logisticsType === 'add'?'发 货':'保 存'}}</el-button>
 				  <el-button @click="cancelLogistics;data.removeTab()">取 消</el-button>
 				</div>
 			</div>
@@ -670,6 +675,7 @@ export default {
       logisticsForm: {
         logisticsNo: '',
         storageId: '',
+		storageName: '',
         companyCode: '',
         workOrder: true,
         exchange: false,
@@ -799,6 +805,10 @@ export default {
 		  this.formData1.list = res.data.orderDetails
 		})
 	},
+	changeType(){
+		this.getOrderDetail()
+		this.getCodeDetail()
+	},
 	async getCodeDetail(){
 		getCodeDetail({orderId: this.editOrderId}).then(async res => {
 			for(var item of res.data){
@@ -840,6 +850,9 @@ export default {
 		row.orderDetailId = e.orderDetailId
 	},
 	async changeMaterial(e,row){
+		if(!row.specs){
+			return this.$message.warning('请先选择规格型号!');
+		}
 		row.material = null
 		row.materialName = ''
 		row.stockQty = ''
@@ -930,7 +943,7 @@ export default {
 			// 唯一标识
 			key: type,
 			// 页签名称
-			label: ({ remark: "订单备注", editExpressage: "修改快递单号",editAddress: "修改收货地址", materialDetail: "查看物流", deliverGoods: "发货" })[type],
+			label: ({ remark: "订单备注", editExpressage: "修改快递单号",editAddress: "修改收货地址", materialDetail: "查看物流", deliverGoods: "发货", deliverGoodsDetail: '查看发货条码' })[type],
 			// 打开时事件
 			triggerEvent: () => {
 				
@@ -1034,8 +1047,21 @@ export default {
 				this.getOrderDetail()
 				this.getCodeDetail()
 				this.openForm('deliverGoods',item)
-			}else{
+			}else if(type == 'edit'){
 				this.openForm('editExpressage',item)
+			}else{
+				this.logisticsForm.logisticsNo = item.logisticsNo
+				this.logisticsForm.storageId = item.storageId
+				this.logisticsForm.storageName = item.storageName
+				this.logisticsForm.companyCode = item.companyCode
+				this.logisticsForm.workOrder = item.workOrder
+				this.logisticsForm.exchange = item.exchangeOrder
+				this.logisticsForm.pickType = item.pickType
+				this.logisticsForm.pickName = item.pickName
+				this.logisticsForm.pickPhone = item.pickPhone
+				this.getOrderDetail()
+				this.getCodeDetail()
+				this.openForm('deliverGoodsDetail',item)
 			}
     },
     // 取消快递信息填写
@@ -1397,6 +1423,7 @@ export default {
 		listImport({ formdata })
 		  .then(res => {
 		    this.getOrderDetail()
+			this.getCodeDetail()
 		    loading.close()
 		    this.$message({
 		      type: 'success',

+ 10 - 2
src/views/mallManagement/order/order_refund/index.vue

@@ -286,7 +286,7 @@
 						</el-col>
 						<el-col :span="24">
 							<el-card class="box-card">
-								<el-tabs v-model="typeIndex">
+								<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>
@@ -392,7 +392,7 @@
 													<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 this.$message.warning('请先选择物料类型!');
+																return $message.warning('请先选择物料类型!');
 															}
 														}" @change="(e)=>{
 															scope.row.materialName = e.name
@@ -568,6 +568,10 @@ export default {
 			  this.formData1.list = res.data.orderDetails
 			})
 		},
+		changeType(){
+			this.getOrderDetail()
+			this.getCodeDetail()
+		},
 		async getCodeDetail2(){
 			getCodeDetail2({orderId: this.editOrderId}).then(async res => {
 				for(var item of res.data){
@@ -609,6 +613,9 @@ export default {
 			row.orderDetailId = e.orderDetailId
 		},
 		async changeMaterial(e,row){
+			if(!row.specs){
+				return this.$message.warning('请先选择规格型号!');
+			}
 			row.material = null
 			row.materialName = ''
 			row.stockQty = ''
@@ -885,6 +892,7 @@ export default {
 			listImport2({ formdata })
 			  .then(res => {
 			    this.getOrderDetail()
+				this.getCodeDetail()
 			    loading.close()
 			    this.$message({
 			      type: 'success',