瀏覽代碼

feat: 导入发货

xdd 2 周之前
父節點
當前提交
990b1fedab

+ 21 - 0
src/api/store/storeOrder.js

@@ -197,6 +197,27 @@ export function importTemplate() {
   })
 }
 
+/**
+ * 获取导入运单号模板
+ * @returns {*}
+ */
+export function getTemplate() {
+  return request({
+    url: '/store/storeOrder/getTemplate',
+    method: 'get'
+  })
+}
+
+/**
+ * 导入运单号
+ * @returns {*}
+ */
+export function importOrderExpressTemplate(){
+  return request({
+    url: '/store/storeOrder/importOrderExpressTemplate',
+    method: 'post'
+  })
+}
 export function editTuiMoney(data) {
   return request({
     url: '/store/storeOrder/editTuiMoney',

+ 61 - 1
src/views/store/storeOrder/healthStoreList.vue

@@ -178,6 +178,16 @@
           v-hasPermi="['store:healthStoreOrder:exportItems']"
         >导出订单明细</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          plain
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleExpressImport"
+          v-hasPermi="['his:integralOrder:exportDeliver']"
+        >导入发货</el-button>
+      </el-col>
 
 	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
@@ -433,6 +443,34 @@
         <el-button @click="upload.open = false">取 消</el-button>
       </div>
     </el-dialog>
+
+    <el-dialog :title="upload.title" :visible.sync="upload.expressOpen" width="400px" append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.orderExpressUrl + '?updateSupport=' + upload.updateSupport"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+          </div>
+          <span>仅允许导入xls、xlsx格式文件。</span>
+          <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="getOrderExpressTemplate">下载模板</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.expressOpen = false">取 消</el-button>
+      </div>
+    </el-dialog>
     <el-dialog title="导入结果" :close-on-press-escape="false" :close-on-click-modal="false" :visible.sync="importMsgOpen" width="500px" append-to-body>
        <div class="import-msg" v-html="importMsg">
        </div>
@@ -442,7 +480,18 @@
 </template>
 
 <script>
-import { importTemplate,exportHealthStoreOrderItems,createUserOrder,listHealthStoreOrder, getStoreOrder, delStoreOrder, addStoreOrder, updateStoreOrder, exportHealthStoreOrder } from "@/api/store/storeOrder";
+import {
+  importTemplate,
+  exportHealthStoreOrderItems,
+  createUserOrder,
+  listHealthStoreOrder,
+  getStoreOrder,
+  delStoreOrder,
+  addStoreOrder,
+  updateStoreOrder,
+  exportHealthStoreOrder,
+  getTemplate
+} from "@/api/store/storeOrder";
 import { getUserList } from "@/api/store/user";
 import { getAddressList } from "@/api/store/userAddress";
 import productOrder from "../components/productOrder";
@@ -597,6 +646,8 @@ export default {
 
       },
       upload: {
+        orderExpressUrl: process.env.VUE_APP_BASE_API + "/store/storeOrder/importOrderExpressTemplate",
+        expressOpen: false,
         // 是否显示弹出层(用户导入)
         open: false,
         // 弹出层标题(用户导入)
@@ -893,6 +944,15 @@ export default {
           this.download(response.msg);
         }).catch(function() {});
     },
+    handleExpressImport(){
+      this.upload.title = "导入";
+      this.upload.expressOpen = true;
+    },
+    getOrderExpressTemplate(){
+      getTemplate().then((response) => {
+        this.download(response.msg);
+      });
+    },
     handleExportItems() {
       if(this.queryParams.status=='00'){
         this.queryParams.status=null;

+ 82 - 17
src/views/store/storeOrder/index.vue

@@ -53,7 +53,7 @@
           size="small"
           @keyup.enter.native="handleQuery"/>
       </el-form-item>
-     
+
       <el-form-item label="员工姓名" prop="companyUserNickName">
         <el-input
           v-model="queryParams.companyUserNickName"
@@ -90,7 +90,7 @@
         </el-select>
       </el-form-item>
 
-      
+
 
       <el-form-item label="物流状态" prop="deliveryStatus">
          <el-select   v-model="queryParams.deliveryStatus" placeholder="请选择物流状态" clearable size="small" >
@@ -160,7 +160,7 @@
             <el-select filterable style="width: 200px" v-model="queryParams.scheduleId" placeholder="请选择档期" clearable size="small" >
               <el-option
                       v-for="item in scheduleOptions"
-                      :key="item.id"  
+                      :key="item.id"
                       :label="item.name"
                       :value="item.id"
                     />
@@ -202,6 +202,16 @@
           v-hasPermi="['store:storeOrder:exportItems']"
         >导出订单明细</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          plain
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleExpressImport"
+          v-hasPermi="['his:integralOrder:exportDeliver']"
+        >导入发货</el-button>
+      </el-col>
       <el-col :span="1.5">
         <el-input
           v-model="orderItemNum"
@@ -287,7 +297,7 @@
               <el-tag prop="status" v-for="(item, index) in deliveryPayStatusOptions"    v-if="scope.row.deliveryPayStatus==item.dictValue">{{item.dictLabel}}</el-tag>
           </template>
       </el-table-column>
-    
+
       <el-table-column label="操作" fixed="right" width="80px" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -305,7 +315,7 @@
         </template>
       </el-table-column>
     </el-table>
-    
+
     <pagination
       v-show="total>0"
       :total="total"
@@ -465,16 +475,59 @@
         <el-button @click="upload.open = false">取 消</el-button>
       </div>
     </el-dialog>
+
+
+    <el-dialog :title="upload.title" :visible.sync="upload.expressOpen" width="400px" append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.orderExpressUrl + '?updateSupport=' + upload.updateSupport"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+          </div>
+          <span>仅允许导入xls、xlsx格式文件。</span>
+          <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="getOrderExpressTemplate">下载模板</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.expressOpen = false">取 消</el-button>
+      </div>
+    </el-dialog>
+
+
     <el-dialog title="导入结果" :close-on-press-escape="false" :close-on-click-modal="false" :visible.sync="importMsgOpen" width="500px" append-to-body>
        <div class="import-msg" v-html="importMsg">
        </div>
     </el-dialog>
-    
+
   </div>
 </template>
 
 <script>
-import { importTemplate,exportStoreOrderItems,createUserOrder,listStoreOrder, getStoreOrder, delStoreOrder, addStoreOrder, updateStoreOrder, exportStoreOrder,getOrderItemsNum } from "@/api/store/storeOrder";
+import {
+  importTemplate,
+  exportStoreOrderItems,
+  createUserOrder,
+  listStoreOrder,
+  getStoreOrder,
+  delStoreOrder,
+  addStoreOrder,
+  updateStoreOrder,
+  exportStoreOrder,
+  getOrderItemsNum,
+  getTemplate
+} from "@/api/store/storeOrder";
 import { getUserList } from "@/api/store/user";
 import { getAddressList } from "@/api/store/userAddress";
 import productOrder from "../components/productOrder";
@@ -614,7 +667,7 @@ export default {
         isSysDel: null,
         deptId:null,
         isUpload:null,
-     
+
       },
       // 表单参数
       form: {
@@ -629,11 +682,12 @@ export default {
         addressId: [
           { required: true, message: "收货信息不能为空" }
         ],
-        
+
       },
       upload: {
         // 是否显示弹出层(用户导入)
         open: false,
+        expressOpen: false,
         // 弹出层标题(用户导入)
         title: "",
         // 是否禁用上传
@@ -644,6 +698,8 @@ export default {
         headers: { Authorization: "Bearer " + getToken() },
         // 上传的地址
         url: process.env.VUE_APP_BASE_API + "/store/storeOrder/importExpress",
+        // 订单运单号地址
+        orderExpressUrl: process.env.VUE_APP_BASE_API + "/store/storeOrder/importOrderExpressTemplate"
       },
     };
   },
@@ -815,7 +871,7 @@ export default {
       else{
         this.queryParams.deliverySendTimeRange=null;
       }
-      
+
       listStoreOrder(this.queryParams).then(response => {
         this.storeOrderList = response.rows;
         this.total = response.total;
@@ -853,7 +909,7 @@ export default {
       else{
         this.queryParams.deliverySendTimeRange=null;
       }
-      
+
       getOrderItemsNum(this.queryParams).then(response => {
         this.orderItemNum = response.orderItemsNum;
         this.loading = false;
@@ -869,7 +925,7 @@ export default {
       this.form = {
         addressId:null,
         userId:null,
-        
+
       };
       this.resetForm("form");
     },
@@ -919,7 +975,7 @@ export default {
               this.getList();
             }
           });
-       
+
         }
       });
     },
@@ -927,7 +983,7 @@ export default {
     handleDelete(row) {
        this.products.splice(this.products.findIndex(item => item.id === row.id), 1)
        this.compute();
-       
+
     },
     /** 导出按钮操作 */
     handleExport() {
@@ -969,6 +1025,10 @@ export default {
           this.download(response.msg);
         }).catch(function() {});
     },
+    handleExpressImport(){
+      this.upload.title = "导入";
+      this.upload.expressOpen = true;
+    },
     handleExportItems() {
       if(this.queryParams.status=='00'){
         this.queryParams.status=null;
@@ -1015,6 +1075,11 @@ export default {
     submitFileForm() {
       this.$refs.upload.submit();
     },
+    getOrderExpressTemplate(){
+      getTemplate().then((response) => {
+        this.download(response.msg);
+      });
+    },
     importTemplate() {
       importTemplate().then((response) => {
         this.download(response.msg);
@@ -1036,7 +1101,7 @@ export default {
       //   });
       this.getList();
     },
-     
+
         /** 查询部门下拉树结构 */
     getTreeselect() {
         var that=this;
@@ -1078,7 +1143,7 @@ export default {
     max-width: 200px;
     text-align: left;
     .goods-title{
-      
+
       overflow:hidden;
       white-space: nowrap;
       text-overflow: ellipsis;
@@ -1101,4 +1166,4 @@ export default {
   }
 
 </style>
- 
+

+ 5 - 0
src/views/store/storeProduct/index.vue

@@ -247,6 +247,7 @@
             >
               <el-button size="small" type="primary">点击上传视频</el-button>
             </el-upload>
+            <el-button size="small" type="primary" @click="handleClearVideo">清除视频</el-button><br/>
             <video v-if="form.video" :src="form.video" controls style="max-width: 300px; max-height: 300px; margin-top: 10px"></video>
           </div>
         </el-form-item>
@@ -809,6 +810,10 @@ export default {
     this.loadWarehouseOptions();
   },
   methods: {
+    handleClearVideo(){
+      this.$set(this.form,'video','')
+      this.$refs.upload.clearFiles();
+    },
     handleSuccess(response, file) {
       // 上传成功后的回调函数
       this.myloading.close();