Преглед изворни кода

Merge branch 'develop' of ssh://gogs.zfire.top:2222/zfire-front/zfire-newmall-admin into develop

* 'develop' of ssh://gogs.zfire.top:2222/zfire-front/zfire-newmall-admin:
  no message
  修改
  no message
  no message
  测试维权订单修改----------------------
  维权订单详情操作退货
Moss пре 1 година
родитељ
комит
bf1256653d

+ 61 - 86
src/layout/components/Navbar.vue

@@ -5,19 +5,11 @@
       <hamburger :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
       <div class="menu_module">
         <div class="menu_module_view">
-          <v-scroll-view
-            :x="true"
-            :y="false"
-            slidingBgClassName="slidingBgClassName"
-            slidingBlockClassName="slidingBlockClassName"
-          >
+          <v-scroll-view :x="true" :y="false" slidingBgClassName="slidingBgClassName"
+            slidingBlockClassName="slidingBlockClassName">
             <div class="menu_module_fj">
-              <div
-                v-for="(item, index) in routes"
-                :key="index"
-                :class="{ item: true, select: path === item.path }"
-                @click="path = item.path"
-              >
+              <div v-for="(item, index) in routes" :key="index" :class="{ item: true, select: path === item.path }"
+                @click="path = item.path">
                 {{ item.meta.title }}
               </div>
             </div>
@@ -34,13 +26,10 @@
             @select="handleSelect"
           ></el-autocomplete>
         </div> -->
-        <div
-          style="margin-right: 20px; cursor: pointer"
-          @click="
-            getList()
-            isShow = true
-          "
-        >
+        <div style="margin-right: 20px; cursor: pointer" @click="
+          getList()
+        isShow = true
+          ">
           <i class="el-icon-message-solid"></i>
           <el-badge :is-dot="isDot1 || isDot2"></el-badge>
         </div>
@@ -68,34 +57,21 @@
       </div>
     </div>
     <notice-bar />
-    <el-drawer
-      title="系统消息"
-      :visible.sync="isShow"
-      :append-to-body="true"
-      :with-header="false"
-      direction="rtl"
-      size="25%"
-    >
+    <el-drawer title="系统消息" :visible.sync="isShow" :append-to-body="true" :with-header="false" direction="rtl" size="25%">
       <div class="message">
         <div class="head">
           <div class="flex_asb">
             <el-radio-group size="small" v-model="messageType" @change="getList">
               <el-badge :is-dot="isDot1" class="item">
-                <el-radio-button :label="['WBI', 'WBK', 'CRE_ORDER', 'SEND_MALL', 'RP_MALL', 'CR_SALES']"
-                  >系统消息</el-radio-button
-                >
+                <el-radio-button
+                  :label="['WBI', 'WBK', 'CRE_ORDER', 'SEND_MALL', 'RP_MALL', 'CR_SALES']">系统消息</el-radio-button>
               </el-badge>
               <el-badge :is-dot="isDot2" class="item">
                 <el-radio-button :label="['NOTICE']">平台公告</el-radio-button>
               </el-badge>
             </el-radio-group>
-            <el-switch
-              v-model="isOpen"
-              @change="updateIsNotice"
-              inactive-text="消息弹窗"
-              active-color="#13ce66"
-              inactive-color="#ff4949"
-            >
+            <el-switch v-model="isOpen" @change="updateIsNotice" inactive-text="消息弹窗" active-color="#13ce66"
+              inactive-color="#ff4949">
             </el-switch>
           </div>
           <el-radio-group size="mini" v-model="dateType" @change="getList" style="margin: 10px 0">
@@ -122,17 +98,15 @@
           </div>
         </div>
         <el-card class="box-card" v-for="(item, index) in messageData" style="margin-top: 10px">
-          <div
-            @click="
-              isShow = false
-              toDetail(
-                item.adminNoticeType,
-                item.paidType,
-                item.adminNoticeType == 'NOTICE' ? item.noticeId : item.orderId,
-                item.id
-              )
-            "
-          >
+          <div @click="
+            isShow = false
+          toDetail(
+            item.adminNoticeType,
+            item.paidType,
+            item.adminNoticeType == 'NOTICE' ? item.noticeId : item.orderId,
+            item.id
+          )
+            ">
             <div v-if="item.adminNoticeType == 'NOTICE'">
               <div class="flex_asb item">
                 <div>
@@ -201,14 +175,8 @@
         </el-card>
         <el-empty v-if="messageData.length == 0" description="暂无数据"></el-empty>
         <div class="flex_ac bottom">
-          <el-pagination
-            @current-change="handleCurrentChange"
-            :current-page="currentPage"
-            :page-size="pageSize"
-            layout="prev, pager, next"
-            background
-            :total="listTotal"
-          ></el-pagination>
+          <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-size="pageSize"
+            layout="prev, pager, next" background :total="listTotal"></el-pagination>
         </div>
       </div>
     </el-drawer>
@@ -276,28 +244,22 @@ export default {
       if (this.dateType === '') {
         return ['', '']
       } else {
-        var date = new Date()
-        var base = Date.parse(date) // 转换为时间戳
-        var year = date.getFullYear() //获取当前年份
-        var mon = date.getMonth() + 1 //获取当前月份
-        var day = date.getDate() //获取当前日
+        var date = new Date();
+        var base = Date.parse(date); // 转换为时间戳
+        var year = date.getFullYear(); //获取当前年份
+        var mon = date.getMonth() + 1; //获取当前月份
+        var day = date.getDate(); //获取当前日
         var oneDay = 24 * 3600 * 1000
 
         var daytimeArr = []
-        var now = new Date(base - oneDay * this.dateType)
-        var myear = now.getFullYear()
-        var month = now.getMonth() + 1
+        var now = new Date((base - oneDay * this.dateType));
+        var myear = now.getFullYear();
+        var month = now.getMonth() + 1;
         var mday = now.getDate()
         if (this.dateType == 1) {
-          return [
-            `${myear}-${month > 9 ? month : '0' + month}-${mday > 9 ? mday : '0' + mday} 00:00:00`,
-            `${myear}-${month > 9 ? month : '0' + month}-${mday > 9 ? mday : '0' + mday} 23:59:59`
-          ]
+          return [`${myear}-${month > 9 ? month : '0' + month}-${mday > 9 ? mday : '0' + mday} 00:00:00`, `${myear}-${month > 9 ? month : '0' + month}-${mday > 9 ? mday : '0' + mday} 23:59:59`]
         } else {
-          return [
-            `${myear}-${month > 9 ? month : '0' + month}-${mday > 9 ? mday : '0' + mday} 00:00:00`,
-            `${year}-${mon > 9 ? mon : '0' + mon}-${day > 9 ? day : '0' + day} 23:59:59`
-          ]
+          return [`${myear}-${month > 9 ? month : '0' + month}-${mday > 9 ? mday : '0' + mday} 00:00:00`, `${year}-${mon > 9 ? mon : '0' + mon}-${day > 9 ? day : '0' + day} 23:59:59`]
         }
       }
     },
@@ -323,17 +285,8 @@ export default {
           WBK: 'applicationWithoutFee',
           CRE_ORDER: 'workOrderPool',
           SEND_MALL: 'order_detail',
-          RP_MALL: 'order_pr',
-          CR_SALES:
-            paidType == 'M'
-              ? 'auxiliarySalesOrder'
-              : paidType == 'P'
-              ? 'attachmentSalesOrder'
-              : paidType == 'YB'
-              ? 'orderSettleManag'
-              : paidType == 'MALL'
-              ? 'order_list'
-              : ''
+          RP_MALL: 'order_refund_detail',
+          CR_SALES: (paidType == 'M' ? 'auxiliarySalesOrder' : paidType == 'P' ? 'attachmentSalesOrder' : paidType == 'YB' ? 'orderSettleManag' : paidType == 'MALL' ? 'order_detail' : '')
         }
         return MAP[val]
       }
@@ -602,7 +555,7 @@ export default {
         params: {
           noticeIds: id
         }
-      }).then(res => {})
+      }).then(res => { })
     }
   }
 }
@@ -617,21 +570,26 @@ export default {
 ::v-deep .is-fixed {
   right: 10px !important;
 }
+
 ::v-deep .slidingBgClassName {
   background: rgba(0, 0, 0, 0.01) !important;
 }
+
 ::v-deep .slidingBlockClassName {
   background: rgba(0, 0, 0, 0.05) !important;
 }
+
 .flex_asb {
   display: flex;
   justify-content: space-between;
   align-items: center;
 }
+
 .flex_ac {
   display: flex;
   justify-content: center;
 }
+
 .message {
   padding: 20px;
   position: relative;
@@ -639,6 +597,7 @@ export default {
   padding-bottom: 60px;
   padding-top: 150px;
   box-sizing: border-box;
+
   .head {
     width: 25%;
     position: fixed;
@@ -647,6 +606,7 @@ export default {
     background: #ffffff;
     padding: 20px;
   }
+
   .bottom {
     width: 25%;
     position: fixed;
@@ -656,11 +616,13 @@ export default {
     padding: 10px 0;
   }
 }
+
 .box-card {
   .item {
     cursor: pointer;
     margin-bottom: 6px;
   }
+
   .read1 {
     color: #f5680e;
     background: #fff2da;
@@ -668,6 +630,7 @@ export default {
     border-radius: 4px;
     font-size: 14px;
   }
+
   .read2 {
     color: #42b983;
     background: #d7fdde;
@@ -676,6 +639,7 @@ export default {
     font-size: 14px;
   }
 }
+
 .navbar {
   width: 100%;
   height: 50px;
@@ -685,6 +649,7 @@ export default {
   display: flex;
   flex-direction: row;
   align-items: center;
+
   .hamburger-container {
     line-height: 46px;
     height: 100%;
@@ -698,22 +663,26 @@ export default {
       background: rgba(0, 0, 0, 0.025);
     }
   }
+
   .menu_module {
     height: 100%;
     flex: 1;
     position: relative;
+
     .menu_module_view {
       position: absolute;
       top: 0;
       left: 0;
       bottom: 0;
       right: 0;
+
       .menu_module_fj {
         height: 100%;
         width: fit-content;
         white-space: nowrap;
         box-sizing: border-box;
         padding: 0 10px;
+
         .item {
           display: inline-block;
           height: 100%;
@@ -722,16 +691,19 @@ export default {
           padding: 0 10px;
           cursor: pointer;
         }
+
         .select {
           border-bottom: 1px solid #000;
         }
       }
     }
   }
+
   .flex {
     display: flex;
     align-items: center;
   }
+
   .ellipsis {
     display: inline-block;
     width: (16px * 6);
@@ -739,11 +711,12 @@ export default {
     overflow: hidden;
     text-overflow: ellipsis;
   }
+
   .right-menu {
     height: 100%;
     line-height: 50px;
 
-    & > div {
+    &>div {
       float: left;
     }
 
@@ -788,8 +761,9 @@ export default {
         padding-top: 0;
         padding-bottom: 0;
       }
+
       .right-menu-item {
-        .notice-icon > i {
+        .notice-icon>i {
           font-size: 18px;
         }
 
@@ -801,6 +775,7 @@ export default {
     }
   }
 }
+
 ::v-deep .el-badge__content.is-fixed {
   z-index: 99;
 }

Разлика између датотеке није приказан због своје велике величине
+ 504 - 490
src/views/mallManagement/order/order_refund/index.vue


+ 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="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>
+		</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() {

Неке датотеке нису приказане због велике количине промена