Эх сурвалжийг харах

Merge branch 'test' into 'master'

Test

See merge request quanshu/mp-ui-pc!314
zhong chunping 3 жил өмнө
parent
commit
841027e4a3

+ 19 - 0
src/api/business/order.js

@@ -181,3 +181,22 @@ export function ticketOrderDetail(orderId) {
     method: 'post',
   })
 }
+
+/**
+ * Post 方式上传文件
+ */
+export function setBatchShip(data, config = {}) {
+  var formData  = new FormData()
+  Object.keys(data).forEach(key => {
+    formData.append(key, data[key])
+  })
+  return request({
+    url: '/api/v1/mp/admin/deliver/order/batchShip',
+    method: 'post',
+    data: formData ,
+    ...config,
+    headers: {
+      'Content-Type': 'multipart/form-data'
+    }
+  })
+}

+ 8 - 2
src/views/business/channel/index.vue

@@ -117,15 +117,16 @@
           <el-table-column label="渠道编号" sortable="custom" prop="channelId" width="100px" />
           <el-table-column label="渠道名称" prop="name" show-overflow-tooltip  width="180px">
             <template slot-scope="scope">
+
               <el-button
                   v-if="scope.row.childCnt > 0"
                   size="mini"
                   type="text"
                   @click="handleView(scope.row)"
                 >
-                  {{scope.row.name}}
+                  <pre>{{scope.row.name}}</pre>
               </el-button>
-              <span v-else>{{scope.row.name}}</span>
+              <span v-else><pre>{{scope.row.name}}</pre></span>
             </template>
           </el-table-column>
           <el-table-column label="手机号码" prop="mobile" show-overflow-tooltip  width="120px"/>
@@ -141,6 +142,11 @@
           </el-table-column>
           <el-table-column label="经销商数" sortable="custom" prop="siteCnt"  />
           <el-table-column label="用户数" sortable="custom" prop="userCnt"  />
+          <el-table-column label="注册时间" prop="createdTime" min-width="150px">
+            <template slot-scope="{ row }">
+              {{ parseTime(row.createdTime) }}
+            </template>
+          </el-table-column>
           <el-table-column label="状态" key="statusV">
            <template slot-scope="{ row, column }">
              <el-tag :type="JSON.parse(row.status).value == '1' ? 'success' : 'info'">{{ JSON.parse(row.status).desc }}</el-tag>

+ 10 - 1
src/views/business/salesite/index.vue

@@ -118,7 +118,11 @@
     <el-table v-loading="loading" :data="siteList" @sort-change="sortChannelId" @selection-change="handleSelectionChange">
      <!-- <el-table-column type="selection" width="55"  /> -->
       <el-table-column label="经销商编号" sortable="custom" prop="channelId" width="110px"/>
-      <el-table-column label="经销商名称" show-overflow-tooltip  prop="name" min-width="110px" />
+      <el-table-column label="经销商名称" show-overflow-tooltip  prop="name" min-width="110px" >
+        <template slot-scope="scope">
+          <pre>{{scope.row.name}}</pre>
+        </template>
+      </el-table-column>
       <el-table-column label="手机号码"  prop="mobile" width="120px"/>
       <el-table-column label="佣金比例" sortable="custom" prop="commRate" width="100px">
         <template slot-scope="{ row, column }">
@@ -130,6 +134,11 @@
       <el-table-column label="线下销量" sortable="custom" prop="offLineSaleCnt" width="100px"/>
       <el-table-column label="线上销量" sortable="custom" prop="onLineSaleCnt" width="100px"/>
       <el-table-column label="用户数" sortable="custom" prop="userCnt" width="100px"/>
+      <el-table-column label="注册时间" prop="createdTime" width="150px">
+        <template slot-scope="{ row }">
+          {{ parseTime(row.createdTime) }}
+        </template>
+      </el-table-column>
       <el-table-column label="认证状态" prop="certifyStatus" >
         <template slot-scope="{ row, column }">
              <span v-if="getValue(row.certifyStatus) == 'y'" style="color: blue;"> {{getDesc(row.certifyStatus)}}</span>

+ 180 - 23
src/views/order/deliver/index.vue

@@ -81,10 +81,12 @@
           icon="el-icon-search"
           size="mini"
           @click="pageParams.pageNum = 1;handleQuery()"
-          >搜索</el-button
+        >搜索
+        </el-button
         >
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >重置</el-button
+        >重置
+        </el-button
         >
       </el-form-item>
     </el-form>
@@ -98,9 +100,21 @@
           size="small"
           @click="handleExportDraw"
           v-hasPermi="['order:deliver:export']"
-          >导出订单</el-button
+        >导出订单
+        </el-button
         >
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="infor"
+          plain
+          icon="el-icon-upload2"
+          size="small"
+          @click="handleImport"
+          v-hasPermi="['order:deliver:ship']"
+        >批量发货
+        </el-button>
+      </el-col>
       <right-toolbar
         :showSearch.sync="showSearch"
         @queryTable="getList"
@@ -131,7 +145,7 @@
                 />
               </div>
             </el-table-column>
-            <el-table-column label="商品名称" prop="title" min-width="80" />
+            <el-table-column label="商品名称" prop="title" min-width="80"/>
             <el-table-column label="规格" min-width="100">
               <template slot-scope="{ row }">
                 <div>{{ row.properties || "--" }}</div>
@@ -146,7 +160,7 @@
         </template>
       </el-table-column>
       <!-- 不展开列表 -->
-      <el-table-column label="订单号" prop="orderId" min-width="80" />
+      <el-table-column label="订单号" prop="orderId" min-width="80"/>
       <el-table-column label="下单时间" min-width="100">
         <template slot-scope="{ row }">
           <div>
@@ -164,7 +178,7 @@
           <div>{{ $numberFormat(row.payAmt) }}</div>
         </template>
       </el-table-column>
-      <el-table-column label="用户昵称" prop="nickName" min-width="80" />
+      <el-table-column label="用户昵称" prop="nickName" min-width="80"/>
       <el-table-column label="收货人/收货地址" prop="addr" min-width="120">
         <template slot-scope="{ row }">
           <div>
@@ -183,8 +197,9 @@
         <template slot-scope="{ row }">
           <div>
             <el-tag :type="row.status.value === 1 ? 'success' : 'info'" v-if="row.status.value !== 2">{{
-              row.status.desc
-            }}</el-tag>
+                row.status.desc
+              }}
+            </el-tag>
             <el-tag type="info" v-else>已发货</el-tag>
           </div>
         </template>
@@ -196,19 +211,59 @@
               v-hasPermi="['order:deliver:query']"
               type="text"
               @click="getDetail(row)"
-              >查看详情</el-button
+            >查看详情
+            </el-button
             >
             <el-button
               v-if="row.status.value === 1 || row.status.value === 4"
               v-hasPermi="['order:deliver:ship']"
               type="text"
               @click="toGoods(row)"
-              >发货</el-button
+            >发货
+            </el-button
             >
           </div>
         </template>
       </el-table-column>
     </el-table>
+    <!-- 用户导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        :data="reqData"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        :http-request="reqUploadFile"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <span>仅允许导入 xls xlsx 格式文件。</span>
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="upload.open = false">取 消</el-button>
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      title="提示"
+      :visible.sync="dialogVisible"
+      width="60%"
+      :before-close="handleClose">
+      <div v-html="responseData"></div>
+      <span slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
+      </span>
+    </el-dialog>
 
     <!-- 分页 -->
     <pagination
@@ -220,16 +275,18 @@
     />
 
     <!-- 发货 -->
-    <send-goods :send-show="goodsShow" :goods-info="goodsInfo" @close="close" />
+    <send-goods :send-show="goodsShow" :goods-info="goodsInfo" @close="close"/>
   </div>
 </template>
 <script>
 import {
   getDeliverList,
-  deliverOrderExport,
+  deliverOrderExport, setBatchShip
 } from "@/api/business/order";
-import { publicFileGetUrl } from "@/api/common";
+import {publicFileGetUrl} from "@/api/common";
+import {getToken, getSign} from "@/utils/auth";
 import SendGoods from "./components/SendGoods";
+import { randomStr20 } from '@/utils/util'
 export default {
   name: "Deliver",
   components: {
@@ -239,6 +296,7 @@ export default {
     return {
       loading: false,
       showSearch: true,
+      dialogVisible: false,
       // 筛选
       queryParams: {
         nickName: "",
@@ -247,7 +305,7 @@ export default {
         startTime: "",
         endTime: "",
         status: "",
-        tel:"",
+        tel: "",
       },
       // 分页
       pageParams: {
@@ -267,24 +325,44 @@ export default {
       goodsShow: false,
       // 订单详情
       goodsInfo: {},
+      // 用户导入参数
+      upload: {
+        open: false,// 是否显示弹出层(用户导入)
+        title: "",// 弹出层标题(用户导入)
+        isUploading: false,// 是否禁用上传
+        url: "",// 上传的地址
+        headers: {},//请求头
+      },
+      fileSaveUrl: '',
+      reqData: {},
+      responseData:'',
     };
   },
   created() {
     this.getList();
   },
   methods: {
-    // 订单列表
+    handleClose(done) {
+      this.$confirm('确认关闭?')
+        .then(_ => {
+          done();
+        })
+        .catch(_ => {
+        });
+    },
+      // 订单列表
     getList() {
-      let data = {...this.queryParams,
-        resource:Number(this.queryParams.resource)
+      let data = {
+        ...this.queryParams,
+        resource: Number(this.queryParams.resource)
       }
       this.loading = true;
       getDeliverList(
         "pageNum=" +
-          this.pageParams.pageNum +
-          "&pageSize=" +
-          this.pageParams.pageSize +
-          "&",
+        this.pageParams.pageNum +
+        "&pageSize=" +
+        this.pageParams.pageSize +
+        "&",
         data
       )
         .then((res) => {
@@ -312,6 +390,75 @@ export default {
       this.getList();
     },
 
+    //请求头
+    getHttpHeader() {
+      let timestamp = parseInt(new Date().getTime()),
+        nonce = randomStr20();
+      var sign = getSign(this.reqData || {}, timestamp)
+      let url = process.env.VUE_APP_BASE_API + '/api/v1/mp/admin/deliver/order/batchShip' + '?sign=' + sign + '&nonce=' + nonce;
+      this.upload.url = url
+      var headers = {
+        "Authorization": "Bearer " + getToken(),
+        "x-zz-timestamp": timestamp
+      }
+      this.upload.headers = headers
+      console.log(this.upload)
+    },
+
+    // 自定义文件上传的实现
+    reqUploadFile(param) {
+      var data = this.reqData || {}
+      var params = {
+        file: param.file,
+        ...data
+      }
+      setBatchShip(params, this.headers).then(response => {
+        //  console.log("importFileSaveAPI============ response.msg"+response.msg)
+        this.upload.open = false;
+        this.upload.isUploading = false;
+        this.$refs.upload.clearFiles();
+        if(response.data){
+          this.responseData = response.data
+          this.dialogVisible = true
+          // this.$alert(response.data, "导入结果", { dangerouslyUseHTMLString: true, customClass: 'msgbox' });
+        }
+        this.close()
+      }).catch(response => {
+        this.upload.open = false;
+        this.upload.isUploading = false;
+        this.$refs.upload.clearFiles();
+        if(response.data){
+          this.responseData = response.data
+          this.dialogVisible = true
+          // this.$alert(response.data, "导入结果", { dangerouslyUseHTMLString: true, customClass: 'msgbox'  });
+        }
+        this.vloading.close();
+        //param.onError()
+      })
+    },
+
+    //导入按钮操作
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+      this.getHttpHeader()
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      console.log(file)
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+
     // 重置
     resetQuery() {
       this.queryParams = {
@@ -355,7 +502,7 @@ export default {
 
     // 查看详情
     getDetail(row) {
-      this.$router.push({ name: "DeliverDetail", query: { id: row.orderId } });
+      this.$router.push({name: "DeliverDetail", query: {id: row.orderId}});
     },
 
     // 点击发货
@@ -372,6 +519,10 @@ export default {
 
     // 导出订单
     handleExportDraw() {
+      let data = {
+        ...this.queryParams,
+        resource: this.queryParams.resource == "" ? this.queryParams.resource: Number(this.queryParams.resource)
+      }
       this.$confirm("是否确认导出订单?", "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
@@ -383,7 +534,7 @@ export default {
             text: "正在导出订单.....",
             background: "rgba(0, 0, 0, 0.7)",
           });
-          return deliverOrderExport(this.queryParams);
+          return deliverOrderExport(data);
         })
         .then((response) => {
           this.vloading.close();
@@ -400,4 +551,10 @@ export default {
 ::v-deep .el-tabs--border-card > .el-tabs__content {
   padding: 0;
 }
+
+</style>
+<style  lang="scss">
+.msgbox {
+  width: 60%;
+}
 </style>