Parcourir la source

Merge branch 'moss_jxc' into develop

* moss_jxc:
  feat:线下订单
  feat:线下销售订单
  feat:商城订单-订单列表增加进销存相关字段
  feat:商城编辑商品-增加进销存相关业务配置
  feat:商品分类管理-去掉工单大类和工单小类
Moss il y a 1 an
Parent
commit
8b511764a8

+ 9 - 0
src/api/goods.js

@@ -358,4 +358,13 @@ export function deleteNewclassify(params) {
     method: 'post',
     params
   })
+}
+
+// 获取规格列表
+export function getGoodsSpecList(params) {
+  return request({
+    url: '/goods/material/item/count',
+    method: 'post',
+    params
+  })
 }

+ 37 - 0
src/api/order.js

@@ -204,4 +204,41 @@ export function changeShow(params) {
     method: 'post',
     params
   })
+}
+
+
+// 获取线下订单列表
+export function getOfflineOrderList(data) {
+  return request({
+    url: `/order/offline/list?moduleId=${data.moduleId}`,
+    method: 'post',
+    data
+  })
+}
+
+// 导出线下订单列表
+export function offlineOrderListExport(data, name) {
+  return postBlob({
+    url: '/order/offline/list/export',
+    data,
+    name
+  })
+}
+
+// 线下订单保存
+export function offlineOrderSave(params) {
+  return request({
+    url: '/order/offline/save',
+    method: 'post',
+    data: params
+  })
+}
+
+// 新增标签
+export function getOfflineOrderDetail(params) {
+  return request({
+    url: '/order/offline/detail',
+    method: 'post',
+    params
+  })
 }

+ 1 - 56
src/views/mallManagement/goods/classify_index/index.vue

@@ -119,26 +119,6 @@
 							</el-form-item>
 						</el-col>
 						<el-col :span="6">
-							<el-form-item label="工单大类" prop="main">
-							  <el-select v-model="addChildForm.main" value-key="categoryId" placeholder="请选择工单大类" style="width: 250px;" @change="changeOrderType">
-							    <el-option :label="item.name" :value="item" v-for="(item, index) in orderMainType" :key="index">
-							     <!-- <span style="color: #8492a6">{{ item.number }}</span>
-							      <span style="margin-left: 10px;">{{ item.name }}</span> -->
-							    </el-option>
-							  </el-select>
-							</el-form-item>
-						</el-col>
-						<el-col :span="6">
-							<el-form-item label="工单小类" prop="smallType">
-							  <el-select v-model="addChildForm.small" value-key="categoryId" placeholder="请选择工单小类" style="width: 250px;" :disabled="!addChildForm.main.name">
-							    <el-option :label="item.name" :value="item" v-for="(item, index) in orderSmallType" :key="index">
-							     <!-- <span style="color: #8492a6">{{ item.id }}</span>
-							      <span style="margin-left: 10px;">{{ item.name }}</span> -->
-							    </el-option>
-							  </el-select>
-							</el-form-item>
-						</el-col>
-						<el-col :span="6">
 							<el-form-item label="工单类型" prop="workOrderType">
 							  <el-radio-group v-model="addChildForm.workOrderType">
 							    <el-radio :label="'INSTALL'">安装</el-radio>
@@ -197,7 +177,7 @@
 
 <script>
 import { getToken } from '@/utils/auth'
-import { getClassifyList, addClassify, editClassify, deleteClassify, getClassifyDetail, getSmallType } from '@/api/goods'
+import { getClassifyList, addClassify, editClassify, deleteClassify, getClassifyDetail } from '@/api/goods'
 import { ORDER_MAIN_TYPE } from "@/utils/select_data";
 import { getMainList } from "@/api/workOrder/settlementStandardInstall";
 
@@ -240,8 +220,6 @@ export default {
       addChildForm: {
         oneClassify: '',
         twoClassify: '',
-		main: {},
-        small: {},
         workOrderType: 'REPAIR',
         imgUrl: '',
         taxNumber: '',
@@ -380,22 +358,6 @@ export default {
       })
     },
 
-    // 改变大类
-    changeOrderType(e) {
-		this.orderSmallType = e.children
-		this.addChildForm.small = {};
-		// this.getSmallType();
-    },
-
-    getSmallType() {
-      getSmallType({
-        mainNumber: this.addChildForm.orderType,
-        categoryId: this.addChildForm.oneClassify
-      }).then(res => {
-        this.orderSmallType = res.data;
-      })
-    },
-
     // 打开 新增编辑 二级分类
     addOrEditChild(type, cid) {
 		this.$refs.tabPage.addTab({
@@ -435,8 +397,6 @@ export default {
 							this.addChildForm = {
 								oneClassify: res.data.parentId,
 								twoClassify: res.data.name,
-								main: {name: res.data.mainName,categoryId: res.data.mainNumber},
-								small: {name: res.data.smallName,categoryId: res.data.smallNumber},
 								workOrderType: res.data.workOrderType,
 								imgUrl: res.data.imgUrl,
 								taxNumber: res.data.taxNumber,
@@ -444,7 +404,6 @@ export default {
 								status: res.data.status,
 								sort: res.data.sortNum
 							}
-							// this.getSmallType();
 						})
 					}
 				})
@@ -466,21 +425,11 @@ export default {
     submitAddChildForm(cancel) {
       this.$refs.addChildForm.validate((valid) => {
         if (valid) {
-          // let index = this.$findElem(ORDER_MAIN_TYPE, 'number', this.addChildForm.orderType);
-          // let mainName = index >= 0 ? ORDER_MAIN_TYPE[index].name : '';
-
-          // let index2 = this.$findElem(this.orderSmallType, 'id', this.addChildForm.smallType);
-          // let smallName = index2 >= 0 ? this.orderSmallType[index2].name : '';
-          
           let params = {}
           if(this.addChildFormType == 'edit2') {
             params = {
                 categoryId: this.editChildId,
                 name: this.addChildForm.twoClassify,
-                mainNumber: this.addChildForm.main.categoryId || '',
-                mainName: this.addChildForm.main.name || '',
-                smallNumber: this.addChildForm.small.categoryId || '',
-                smallName: this.addChildForm.small.name,
                 workOrderType: this.addChildForm.workOrderType,
                 imgUrl: this.addChildForm.imgUrl,
                 taxNumber: this.addChildForm.taxNumber,
@@ -499,10 +448,6 @@ export default {
               children: [{
                 parentId: this.addChildForm.oneClassify,
                 name: this.addChildForm.twoClassify,
-                mainNumber: this.addChildForm.main.categoryId || '',
-                mainName: this.addChildForm.main.name || '',
-                smallNumber: this.addChildForm.small.categoryId || '',
-                smallName: this.addChildForm.small.name,
                 imgUrl: this.addChildForm.imgUrl,
                 taxNumber: this.addChildForm.taxNumber,
                 taxPercent: this.addChildForm.taxPercent,

Fichier diff supprimé car celui-ci est trop grand
+ 325 - 454
src/views/mallManagement/goods/goods_add/index.vue


+ 112 - 0
src/views/mallManagement/order/components/preview.vue

@@ -0,0 +1,112 @@
+<template>
+  <el-dialog
+    :visible.sync="visible"
+    :show-close="false"
+    :maskClosable="false"
+    :close-on-click-modal="false"
+    @cancel="hideModal"
+    :width="350 + 'mm'"
+  >
+    <div v-loading="spinning" style="min-height: 100px">
+      <div id="preview_content" ref="printDom"></div>
+    </div>
+    <template slot="title">
+      <div>
+        <el-button :loading="waitShowPrinter" type="primary" icon="printer" @click.stop="print">打印</el-button>
+      </div>
+    </template>
+    <template slot="footer">
+      <el-button key="close" type="info" @click="hideModal"> 关闭 </el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script>
+export default {
+    name: 'PrintPreview',
+  props: {
+    addPrint: {
+      type: Function,
+      default: null
+    },
+  },
+ 
+  data() {
+    return {
+      visible: false,
+      spinning: true,
+      waitShowPrinter: false,
+      // 纸张宽 mm
+      width: 0,
+      // 模板
+      hiprintTemplate: {},
+      // 数据
+      printData: {}
+    }
+  },
+  computed: {},
+  watch: {},
+  created() {},
+  mounted() {},
+  methods: {
+    hideModal() {
+      this.visible = false
+      this.waitShowPrinter = false
+      // console.log(this.$parent);
+    },
+    show(hiprintTemplate, printData, width = '210') {
+      this.visible = true
+      this.width = width
+      this.hiprintTemplate = hiprintTemplate
+      setTimeout(() => {
+        // eslint-disable-next-line no-undef
+        $('#preview_content').html(hiprintTemplate.getHtml(printData))
+        this.spinning = false
+      }, 500)
+    },
+    print() {
+      this.hiprintTemplate.print()
+      setTimeout(() => {
+        this.hideModal()
+        this.$emit('refreshList')
+      }, 2000)
+
+    }
+    // toPdf() {
+    //   downloadPDF(this.$refs.printDom);
+    //   this.hiprintTemplate.toPdf({}, '打印预览');
+    // },
+  }
+}
+</script>
+
+<style scoped>
+::v-deep .el-dialog__body {
+  padding: 0;
+}
+
+::v-deep tr {
+  height: 40px !important;
+}
+
+::v-deep .hiprint-printPaper {
+  margin: 0 auto;
+}
+
+/* ::v-deep tr td {
+  border: 0 !important;
+
+} */
+
+::v-deep .hiprint-paperNumber {
+  display: none;
+}
+
+.ant-modal-body {
+  padding: 0px;
+}
+
+.ant-modal-content {
+  margin-bottom: 24px;
+}
+</style>

+ 667 - 0
src/views/mallManagement/order/offline_order_list/index.vue

@@ -0,0 +1,667 @@
+<template>
+	<zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: $route.meta.title+'-列表', essential: true }]">
+		<template slot-scope="{activeKey, data}">
+			<template-page v-if="activeKey == 'list'" ref="pageRef" :get-list="getList" :table-attributes="tableAttributes" :table-events="tableEvents"
+			  :options-evens-group="optionsEvensGroup" :moreParameters="moreParameters" :column-parsing="columnParsing"
+			  :operation="operation()" :exportList="exportList">
+        <div slot="moreSearch">
+          <el-radio-group v-model="examineStatus" size="mini" @change="changeType">
+            <el-radio-button label="">全部</el-radio-button>
+            <el-radio-button label="WAIT">待审核</el-radio-button>
+            <el-radio-button label="OK">审核通过</el-radio-button>
+            <el-radio-button label="FAIL">审核驳回</el-radio-button>
+          </el-radio-group>
+          <br><br>
+        </div>
+			</template-page>
+			<div v-if="~['add', 'edit'].indexOf(activeKey)" style="box-sizing: border-box;padding: 16px;">
+
+				<el-form ref="formRef" :model="formData" :rules="formRules" label-position="left" label-width="90px">
+
+          <div style="font-weight: 500;">客户信息</div>
+          <el-divider></el-divider>
+
+          <el-row :gutter="20">
+            <el-col :span="6">
+              <el-form-item label="业务员" prop="saleName">
+                <el-input v-model="formData.saleName" autocomplete="off" placeholder="请输入业务员"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="业务员电话" prop="saleMobile">
+                <el-input v-model="formData.saleMobile" autocomplete="off" placeholder="请输入业务员电话"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="销售类型" prop="salesType">
+                <el-radio-group v-model="formData.salesType" disabled>
+                  <el-radio :label="''">线下销售</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="客户名称" prop="receUserName">
+                <el-input v-model="formData.receUserName" autocomplete="off" placeholder="请输入客户名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="客户电话" prop="recePhone">
+                <el-input v-model="formData.recePhone" autocomplete="off" placeholder="请输入客户电话"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="支付方式" prop="payType">
+                <el-radio-group v-model="formData.payType">
+                  <el-radio label="WECHAT">微信支付</el-radio>
+                  <el-radio label="CASH">现金支付</el-radio>
+                  <el-radio label="TRANSFER">转账支付</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="客户地址" prop="province" :required="true">
+                <el-row>
+                  <el-col :span="5" style="margin-right: 12px;">
+                    <el-input type="text" v-model="formData.province" disabled placeholder="请选择省"></el-input>
+                  </el-col>
+                  <el-col :span="5" style="margin-right: 12px;">
+                    <el-input type="text" v-model="formData.city" disabled placeholder="请选择市"></el-input>
+                  </el-col>
+                  <el-col :span="5" style="margin-right: 12px;">
+                    <el-input type="text" v-model="formData.area" disabled placeholder="请选择区"></el-input>
+                  </el-col>
+                  <el-col :span="8">
+                    <el-input type="text" v-model="formData.street" disabled placeholder="请选择街道"></el-input>
+                  </el-col>
+                </el-row>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="" prop="receAddress">
+                <el-row :gutter="20">
+                  <el-col :span="22">
+                    <el-input type="text" v-model="formData.receAddress" placeholder="详细地址"></el-input>
+                  </el-col>
+                  <el-col :span="2">
+                    <geographicalPosi :formData="formData" @selectPosi="selectAddress"/>
+                  </el-col>
+                </el-row>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="备注" prop="remark">
+                <el-input type="textarea" v-model="formData.remark" autocomplete="off" placeholder="请输入备注"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="附件" prop="remark">
+                <el-upload class="avatar-uploader" style="height:122px" :action="baseURL + 'common/upload'" :headers="myHeaders"
+                  :show-file-list="false" :on-success="uploadSuccess" :before-upload="beforeUpload">
+                  <img v-if="formData.fileUrl" :src="formData.fileUrl" class="avatar">
+                  <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                </el-upload>
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <div style="font-weight: 500;">商品信息</div>
+          <el-divider></el-divider>
+
+          <div>
+            <el-button type="primary" size="small" @click="addGoods">添加</el-button>
+          </div>
+          <el-table
+            class="specTable"
+            :data="goodsList"
+            element-loading-text="Loading"
+            border
+            highlight-current-row
+            stripe
+            style="margin-top: 20px">
+            <el-table-column align="center" label="品牌" prop="brandName" min-width="120">
+              <template slot-scope="scope">
+                {{scope.row.brandName}}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="大类" prop="mainName" min-width="120">
+              <template slot-scope="scope">
+                {{scope.row.mainName}}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="小类" prop="smallName" min-width="120">
+              <template slot-scope="scope">
+                {{scope.row.smallName}}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="商品名称" prop="goodsName" min-width="120">
+              <template slot-scope="scope">
+                {{scope.row.goodsName}}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="规格型号" prop="goodsMaterialId" min-width="120">
+              <template slot-scope="scope">
+                <el-select size="small" v-model="scope.row.goodsMaterialId" filterable placeholder="请选择" @change="changeSpec(scope.$index, scope.row)">
+                  <el-option
+                    v-for="item in goodsSpecList"
+                    :key="item.id"
+                    :label="item.specsName"
+                    :value="item.id">
+                  </el-option>
+                </el-select>
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="单位" prop="unit" min-width="120">
+              <template slot-scope="scope">
+                {{scope.row.unit | unitFilter}}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="订单数量" prop="num" min-width="120">
+              <template slot-scope="scope">
+                <el-input size="small" v-model="scope.row.num"></el-input>
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="内机数量" prop="insideQty" min-width="120">
+              <template slot-scope="scope">
+                {{scope.row.insideQty}}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="外机数量" prop="outQty" min-width="120">
+              <template slot-scope="scope">
+                {{scope.row.outQty}}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="配件数量" prop="partsQty" min-width="120">
+              <template slot-scope="scope">
+                {{scope.row.partsQty}}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="单价" prop="price" min-width="120">
+              <template slot-scope="scope">
+                <el-input size="small" v-model="scope.row.price"></el-input>
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="金额" prop="amount" min-width="120">
+              <template slot-scope="scope">
+                {{scope.row.amount}}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="库存数量" prop="stockQty" min-width="120">
+              <template slot-scope="scope">
+                {{scope.row.stockQty}}
+              </template>
+            </el-table-column>
+
+            <el-table-column align="center" label="操作" min-width="120">
+              <template slot-scope="scope">
+                <!-- <el-button type="text" @click="edit('theory', scope.$index)">编辑</el-button> -->
+                <el-popconfirm title="确定删除吗?" @confirm="deleteGoods(scope.$index)" style="margin-left: 10px;">
+                  <el-button slot="reference" type="text">删除</el-button>
+                </el-popconfirm>
+              </template>
+            </el-table-column>
+          </el-table>
+          
+        </el-form>
+				<div slot="footer" class="dialog-footer" style="margin-top: 20px;">
+				  <el-button size="mini" @click="data.removeTab()">取 消</el-button>
+				  <el-button size="mini" @click="formConfirm(data.removeTab)" type="primary">确 定</el-button>
+				</div>
+			</div>
+
+      <div v-if="~['detail', 'examine'].indexOf(activeKey)" style="box-sizing: border-box;padding: 16px;">
+        
+      </div>
+		</template>
+	</zj-tab-page>
+</template>
+
+<script>
+import { getToken } from '@/utils/auth'
+import { lbsAmapRegion } from '@/api/common.js'
+import TemplatePage from '@/components/template/template-page-1.vue'
+import import_mixin from '@/components/template/import_mixin.js'
+import { required, mobileRequired, mobile } from '@/components/template/rules_verify.js'
+import { getOfflineOrderList, offlineOrderListExport, offlineOrderSave, getOfflineOrderDetail } from "@/api/order";
+import { getGoodsSpecList } from '@/api/goods'
+import operation_mixin from '@/components/template/operation_mixin.js'
+import geographicalPosi from '@/components/geographicalPosi/index.vue'
+export default {
+  components: { TemplatePage, geographicalPosi },
+  mixins: [import_mixin,operation_mixin],
+  filters: {
+    unitFilter(val) {
+      const MAP = {
+        C: '整套',
+        I: '单个'
+      }
+      return MAP[val];
+    }
+  },
+  data() {
+    return {
+      baseURL: process.env.VUE_APP_BASE_API,
+      myHeaders: { 'x-token': getToken() },
+      // 表格属性
+      tableAttributes: {
+        // 启用勾选列
+        selectColumn: false
+      },
+      // 表格事件
+      tableEvents: {
+        'selection-change': this.selectionChange
+      },
+      // 勾选选中行
+      recordSelected: [],
+      /** 表单变量 */
+      formDialogType: 0,
+      formDialogTitles: ["新增", "编辑"],
+      formDialog: false,
+      formData: {
+        saleName: '', // 业务员
+        saleMobile: '', // 业务员电话
+        salesType: '', // 销售类型
+        receUserName: '', // 客户名称
+        recePhone: '', // 客户电话
+        payType: 'WECHAT', // 支付方式
+        lng: '',
+        lat: '',
+        province: '',
+        provinceId: '',
+        city: '',
+        cityId: '',
+        area: '',
+        areaId: '',
+        street: '',
+        streetId: '',
+        receAddress: '',
+        remark: '', // 备注
+        fileUrl: '', // 附件
+      },
+      formRules: {
+        receUserName: [{ required: true, message: '请输入客户名称', trigger: 'blur' }],
+        recePhone: [{ required: true, message: '请输入客户电话', trigger: 'blur' }],
+        payType: [{ required: true, message: '请选择支付方式', trigger: 'change' }],
+      },
+      formType: 'add',
+      formVisible: false,
+
+      examineStatus: '',
+      provinceList: [],
+      cityList: [],
+      areaList: [],
+      streetList: [],
+      goodsList: [],
+      goodsSpecList: [],
+
+      detailData: {},
+    }
+  },
+  computed: {
+    // 事件组合
+    optionsEvensGroup() {
+      return [
+        [
+          [
+            this.optionsEvensAuth("add", {
+              click: () => {
+                this.openForm('add')
+              }
+            })
+          ],
+        ]
+      ]
+    },
+    // 更多参数
+    moreParameters() {
+      return []
+    },
+    formItems() {
+      return [{
+        md: 24,
+        isShow: true,
+        name: 'el-input',
+        attributes: { placeholder: '请输入', type: "textarea", maxlength: "100",rows: 5 },
+        formItemAttributes: {
+          label: '备注',
+          prop: 'remark',
+          rules: [...required]
+        }
+      }]
+    }
+  },
+
+  create() {
+		
+  },
+
+  methods: {
+    // 列表请求函数
+    // getList: getOfflineOrderList,
+    getList(p) {
+      try {
+        var pam = JSON.parse(JSON.stringify(p))
+        if (this.examineStatus) {
+          pam.params.push({ "param": "a.examine_status", "compare": "=", "value": this.examineStatus })
+        }
+        return getOfflineOrderList(pam)
+      } catch (error) {
+        console.log(error)
+      }
+    },
+    // 列表导出函数
+    exportList: offlineOrderListExport,
+    // 表格列解析渲染数据更改
+    columnParsing(item, defaultData) {
+      return defaultData
+    },
+    // 监听勾选变化
+    selectionChange(data) {
+      this.recordSelected = data
+    },
+    // 切换状态
+    changeType(val) {
+      this.$refs.pageRef.refreshList()
+    },
+    // 表格操作列
+    operation() {
+      return this.operationBtn({
+        edit: {
+          btnType: 'text',
+          click: ({ row, index, column }) => {
+            this.openForm('edit', row.orderId)
+          }
+        },
+        detail: {
+          btnType: 'text',
+          click: ({ row, index, column }) => {
+            this.openDetail('detail', row.orderId)
+          }
+        },
+        examine: {
+          // conditions: ({ row, index, column }) => {
+          //   return row.orderStatus === 'OVER' && ~["EXCEPTION", "ING"].indexOf(row.status)
+          // },
+          btnType: 'text',
+          click: ({ row, index, column }) => {
+            this.openDetail('examine', row.orderId)
+          }
+        },
+      })
+    },
+    openForm(type, orderId) {
+      this.$refs.tabPage.addTab({
+      	// 对应显示的模块
+      	activeKey: type,
+      	// 唯一标识
+      	key: type,
+      	// 页签名称
+      	label: ({ add: '新增', edit: '编辑' })[type],
+      	// 打开时事件
+      	triggerEvent: () => {
+      		this.formCancel()
+      		this.$nextTick(()=>{
+            this.getGoodsSpecList();
+            this.getinitlbslist();
+      			this.formType = type
+      			this.formVisible = true
+            if (type == 'add') {
+      				this.formDialogType = 0
+      			} else if(type == 'edit'){
+      				this.formDialogType = 1
+      				getOfflineOrderDetail({ orderId }).then(res => {
+                this.goodsList = res.data.orderDetails;
+      				  Object.assign(this.formData, res.data)
+      				})
+      			}
+      		})
+      	},
+      	// 关闭时事件
+      	closeEvent: () => {
+			    this.formCancel()
+      	}
+      })
+    },
+    formCancel() {
+      this.formVisible = false
+      this.$refs?.formRef?.resetFields()
+      this.$data.formRef = this.$options.data().formRef
+    },
+    formConfirm(cancel) {
+      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
+        if (valid) {
+          offlineOrderSave({...this.formData, orderDetails: this.goodsList}).then(res => {
+            this.$message({ type: 'success', message: `${this.formDialogTitles[this.formDialogType]}成功!` })
+            cancel('list')
+            this.$refs.pageRef.refreshList()
+          })
+        }
+      })
+    },
+
+    openDetail(type, orderId) {
+      this.$refs.tabPage.addTab({
+      	// 对应显示的模块
+      	activeKey: type,
+      	// 唯一标识
+      	key: type,
+      	// 页签名称
+      	label: ({ detail: '详情', examine: '审核' })[type],
+      	// 打开时事件
+      	triggerEvent: () => {
+      		this.formCancel()
+      		this.$nextTick(()=>{
+            if (type == 'detail') {
+      				this.formDialogType = 0
+      			} else if(type == 'examine'){
+      				this.formDialogType = 1
+      			}
+            getOfflineOrderDetail({ orderId }).then(res => {
+              this.detailData = res.data;
+            })
+      		})
+      	},
+      	// 关闭时事件
+      	closeEvent: () => {
+			    this.detailCancel()
+      	}
+      })
+    },
+    detailCancel() {
+      this.formVisible = false
+      this.$refs?.formRef?.resetFields()
+      this.$data.formRef = this.$options.data().formRef
+    },
+    detailConfirm(cancel) {
+      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
+        if (valid) {
+          offlineOrderSave({...this.formData, orderDetails: this.goodsList}).then(res => {
+            this.$message({ type: 'success', message: `${this.formDialogTitles[this.formDialogType]}成功!` })
+            cancel('list')
+            this.$refs.pageRef.refreshList()
+          })
+        }
+      })
+    },
+
+    // 附件 - 上传成功
+    uploadSuccess(res, file) {
+      this.formData.fileUrl = res.data.url;
+    },
+
+    // 附件 - 上传前
+    beforeUpload(file) {
+      const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);
+      const whiteList = ['jpg', 'jpeg', 'png'];
+      if (whiteList.indexOf(fileSuffix) === -1) {
+        this.$errorMsg('只支持上传jpg/png文件!');
+        return false;
+      }
+    },
+
+    getinitlbslist() {
+      // 初始化请求省市区街道下拉选项数据
+      lbsAmapRegion({ pid: 0 }).then(res => {
+        this.provinceList = res.data
+        // 创建工单时获取ip地址定位赋值
+        if (!this.id && this.$IpAdd.province) {
+          var item = this.provinceList.find(item => item.name === this.$IpAdd.province)
+          if (item) {
+            this.formData.provinceId = item.id
+            this.formData.province = item.name
+          }
+        }
+        if (this.formData.provinceId) {
+          lbsAmapRegion({ pid: this.formData.provinceId }).then(res => {
+            this.cityList = res.data
+            // 创建工单时获取ip地址定位赋值
+            if (!this.id && this.$IpAdd.city) {
+              var item2 = this.cityList.find(item => item.name === this.$IpAdd.city)
+              if (item2) {
+                this.formData.cityId = item2.id
+                this.formData.city = item2.name
+              }
+            }
+            if (this.formData.cityId) {
+              lbsAmapRegion({ pid: this.formData.cityId }).then(res => {
+                this.areaList = res.data
+              })
+            }
+            if (this.formData.areaId) {
+              lbsAmapRegion({ pid: this.formData.areaId }).then(res => {
+                this.streetList = res.data
+              })
+            }
+          })
+        }
+      })
+    },
+
+    selectAddress(data){
+      console.log(data);
+      this.formData.lng = data.center[0]
+      this.formData.lat = data.center[1]
+      // 获取定位的省市区街道
+      var { province, city, district, township } = data.data.addressComponent
+      // 获取选中省名称id
+      var { id, name } = this.provinceList.find(item => item.name === province)
+      this.formData.provinceId = id
+      this.formData.province = name
+      // 请求市选项
+      lbsAmapRegion({ pid: this.formData.provinceId }).then(res => {
+        // 赋值市选项
+        this.cityList = res.data
+        // 获取选中市名称id
+        var { id, name } = res.data.find(item => item.name === city)
+        this.formData.cityId = id
+        this.formData.city = name
+        // 请求区选项
+        lbsAmapRegion({ pid: this.formData.cityId }).then(res => {
+          // 赋值区选项
+          this.areaList = res.data
+          // 获取选中区名称id
+          var { id, name } = res.data.find(item => item.name === district)
+          this.formData.areaId = id
+          this.formData.area = name
+          // 请求街道选项
+          lbsAmapRegion({ pid: this.formData.areaId }).then(res => {
+            // 赋值街道选项
+            this.streetList = res.data
+            // 获取选中街道名称id
+            var { id, name } = res.data.find(item => item.name === township)
+            this.formData.streetId = id
+            this.formData.street = name
+            // 赋值GPS详细地址
+            this.formData.receAddress = data.name
+          })
+        })
+      })
+    },
+
+    // 获取规格列表
+    getGoodsSpecList() {
+      getGoodsSpecList({
+        pageNum: 1,
+        pageSize: -1,
+        specsName: '10'
+      }).then(res => {
+        this.goodsSpecList = res.data.records;
+      })
+    },
+
+    // 添加商品
+    addGoods() {
+      let obj = {
+        goodsMaterialId: '', // 物料编号
+        brandId: '', // 品牌id
+        brandName: '', // 品牌名称
+        mainId: '', // 大类id
+        mainName: '', // 大类名称
+        smallId: '', // 小类id
+        smallName: '', // 小类名称
+        goodsName: '', // 商品名称
+        specsName: '', // 规格名称
+        unit: '', // 单位
+        num: '', // 订单数量
+        insideQty: '', // 内机数量
+        outQty: '', // 外机数量
+        partsQty: '', // 配件数量
+        price: '', // 单价
+        amount: '', // 金额
+        stockQty: '', // 当前库存
+      }
+      let item = JSON.parse(JSON.stringify(obj));
+      this.goodsList.push(item);
+      console.log(this.goodsList);
+    },
+
+    // 删除规格
+    deleteGoods(index) {
+      this.goodsList.splice(index, 1);
+    },
+
+    // 选择规格型号
+    changeSpec(index, row) {
+      let item = this.goodsSpecList.find(o => o.id == row.goodsMaterialId);
+      this.goodsList[index].goodsMaterialId = item.id;
+      this.goodsList[index].mainId = item.mainId;
+      this.goodsList[index].mainName = item.mainName;
+      this.goodsList[index].smallId = item.smallId;
+      this.goodsList[index].smallName = item.smallName;
+      this.goodsList[index].goodsName = item.goodsName;
+      this.goodsList[index].specsName = item.specsName;
+      this.goodsList[index].unit = item.unit;
+      this.goodsList[index].stockQty = item.stockQty;
+    },
+
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>
+
+<style lang="scss">
+.specTable .el-table__cell {
+  padding: 0 !important;
+}
+
+// 图片墙
+.el-upload-list--picture-card .el-upload-list__item {
+  width: 100px;
+  height: 100px;
+}
+
+.el-upload--picture-card {
+  width: 100px;
+  height: 100px;
+  line-height: 100px;
+
+  .avatar-uploader-icon {
+    font-size: 28px;
+    color: #8c939d;
+    width: 100px;
+    height: 100px;
+    line-height: 100px;
+    text-align: center;
+  }
+}
+</style>

+ 642 - 437
src/views/mallManagement/order/order_list/index.vue

@@ -1,450 +1,485 @@
 <template>
-	<zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: $route.meta.title+'-列表', essential: true }]">
-		<template slot-scope="{activeKey, data}">
-			<div v-if="activeKey == 'list'" class="app-container">
-				<div class="screen-container">
-				  <el-form ref="screenForm" :model="screenForm" label-width="70px" size="small" label-position="left">
-				    <el-row :gutter="20">
-				      <el-col :xs="24" :sm="12" :lg="6">
-				        <el-form-item label="订单号" prop="orderId">
-				          <el-input v-model="screenForm.orderId" placeholder="请输入订单号"></el-input>
-				        </el-form-item>
-				      </el-col>
-				      <el-col :xs="24" :sm="12" :lg="6">
-				        <el-form-item label="商品名称" prop="goodsName">
-				          <el-input v-model="screenForm.goodsName" placeholder="请输入商品名称"></el-input>
-				        </el-form-item>
-				      </el-col>
-				      <el-col :xs="24" :sm="12" :lg="6">
-				        <el-form-item label="会员昵称" prop="memberName">
-				          <el-input v-model="screenForm.memberName" placeholder="请输入会员昵称"></el-input>
-				        </el-form-item>
-				      </el-col>
-				      <el-col :xs="24" :sm="12" :lg="6">
-				        <el-form-item label="手机号" prop="phone">
-				          <el-input v-model="screenForm.phone" placeholder="请输入手机号"></el-input>
-				        </el-form-item>
-				      </el-col>
-				
-				      <el-col :xs="24" :sm="12" :lg="6">
-				        <el-form-item label="网点名称" prop="websitId">
-				          <el-select v-model="screenForm.websitId" placeholder="全部" filterable>
-				            <el-option label="全部" value=""></el-option>
-				            <el-option :label="item.name" :value="item.id" v-for="(item, index) in websiteList"
-				              :key="index"></el-option>
-				          </el-select>
-				        </el-form-item>
-				      </el-col>
-				
-				      <el-col :xs="24" :sm="12" :lg="6">
-				        <el-form-item label="兑换码" prop="exchangeCode">
-				          <el-input v-model="screenForm.exchangeCode" placeholder="请输入兑换码"></el-input>
-				        </el-form-item>
-				      </el-col>
-				
-				      <!--          <el-col :xs="24" :sm="12" :lg="6">-->
-				      <!--            <el-form-item label="当前状态" prop="orderStatus">-->
-				      <!--              <el-select v-model="screenForm.orderStatus" placeholder="全部">-->
-				      <!--                <el-option label="全部" value=""></el-option>-->
-				      <!--                <el-option :label="item.label" :value="item.value" v-for="(item, index) in screen_status" :key="index"></el-option>-->
-				      <!--              </el-select>-->
-				      <!--            </el-form-item>-->
-				      <!--          </el-col>-->
-				
-				      <el-col :xs="24" :sm="12" :lg="6">
-				        <el-form-item label="创建时间" prop="createDate" style="height: 33px;">
-				          <el-date-picker v-model="screenForm.createDate" type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss"
-				            range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
-				          </el-date-picker>
-				        </el-form-item>
-				      </el-col>
-				
-				      <el-col :xs="24" :sm="12" :lg="6">
-				        <el-form-item label="支付时间" prop="payDate" style="height: 33px;">
-				          <el-date-picker v-model="screenForm.payDate" type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss"
-				            range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
-				          </el-date-picker>
-				        </el-form-item>
-				      </el-col>
-				
-				      <el-col :xs="24" :sm="12" :lg="6">
-				        <el-form-item label="评价状态" prop="evaluateStatus">
-				          <el-select v-model="screenForm.evaluateStatus" placeholder="全部">
-				            <el-option label="全部" value=""></el-option>
-				            <el-option label="未评价订单" :value="0"></el-option>
-				            <el-option label="已评价订单" :value="3"></el-option>
-				            <el-option label="差评订单" :value="1"></el-option>
-				            <el-option label="好评订单" :value="2"></el-option>
-				          </el-select>
-				        </el-form-item>
-				      </el-col>
-				
-				      <el-col :xs="24" :sm="12" :lg="6">
-				        <el-form-item label="派单异常" prop="sendStatus">
-				          <el-select v-model="screenForm.sendStatus" placeholder="全部">
-				            <el-option label="全部" value=""></el-option>
-				            <el-option label="派单异常订单" :value="true"></el-option>
-				          </el-select>
-				        </el-form-item>
-				      </el-col>
-				      <el-col :xs="24" :sm="12" :lg="6">
-				        <el-form-item label="信息编号" prop="workerOrderNo">
-				          <el-input v-model="screenForm.workerOrderNo" placeholder="请输入信息编号"></el-input>
-				        </el-form-item>
-				      </el-col>
-				
-				      <el-col :xs="24" :sm="12" :lg="6" class="tr">
-				        <el-form-item label="">
-				          <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
-				          <el-button size="small" @click="resetScreenForm">清空</el-button>
-				        </el-form-item>
-				      </el-col>
-				    </el-row>
-				  </el-form>
-				</div>
-				
-				<div class="tabs-container order-tabs-container clearfix">
-				  <div class="fl">
-				    <el-tabs v-model="tabCurrent" type="card" @tab-click="changeTabs" class="fl" style="margin-right: 20px">
-				      <el-tab-pane label="全部" name="ALL"></el-tab-pane>
-				      <el-tab-pane label="待付款" name="NOPAY"></el-tab-pane>
-				      <el-tab-pane label="待发货" name="DFH"></el-tab-pane>
-				      <el-tab-pane label="已发货" name="YFH"></el-tab-pane>
-				      <el-tab-pane label="已完成" name="OVER"></el-tab-pane>
-				      <el-tab-pane label="已关闭" name="CLOSE"></el-tab-pane>
-				      <el-tab-pane label="已超时" name="TIMEOUT"></el-tab-pane>
-				    </el-tabs>
-				    <el-button v-if="$restrict('batchNote')" class="fl" type="primary" size="small" @click="batchRemark">批量备注</el-button>
-				    <el-button class="fl" type="primary" size="small" @click="batchShipmentVisible = true"
-				      v-show="tabCurrent == 'DFH' && $restrict('batchDelivery')">批量发货</el-button>
-				    <el-button class="fl" size="small" @click="downloadTemplate" v-show="tabCurrent == 'DFH' && $restrict('template')">下载批量发货模版</el-button>
-				  </div>
-				  <div class="fr">
-				    <el-button v-if="$restrict('exp')" size="small" type="primary" @click="handleExport">导出报表</el-button>
-				  </div>
-				</div>
-				<div class="order-main-container">
-				  <div class="table-top">
-				    <el-row style="width:100%">
-				      <el-col :span="6">
-				        <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="allChange"
-				          style="margin-left: 10px"></el-checkbox>
-				        <span class="item product">商品信息</span>
-				      </el-col>
-				      <el-col :span="3" style="text-align: right"><span class="item">单价(元)/数量</span></el-col>
-				      <el-col :span="3" style="text-align: center"><span class="item">买家信息</span></el-col>
-				      <el-col :span="3" style="text-align: center"><span class="item">收货信息</span></el-col>
-				      <el-col :span="2" style="text-align: center"><span class="item">实付金额</span></el-col>
-				      <el-col :span="2" style="text-align: center"><span class="item">订单状态</span></el-col>
-				      <el-col :span="2" style="text-align: center"><span class="item">评价状态</span></el-col>
-				      <el-col :span="3" style="text-align: center"><span class="item">操作</span></el-col>
-				    </el-row>
-				  </div>
-				  <div class="order-item" v-for="order in dataList" :key="order.orderId">
-				    <div class="order-top">
-				      <el-checkbox v-model="order.selected"></el-checkbox>
-				      <span><b>订单号</b>:{{ order.orderId }}</span>
-				      <span><b>下单时间</b>:{{ order.createTime }}</span>
-				      <span><b>商户</b>:{{ order.companyWechatName || '无' }}</span>
-				      <span><b>网点</b>:{{ order.websitName || '无' }}</span>
-				      <div class="fr">
-				        <el-link type="primary" v-if="$restrict('orderNote')" :underline="false" @click="showRemark(order)">订单备注</el-link>
-				        <el-link type="primary" v-if="$restrict('detail')" :underline="false" @click="queryDetail(order.orderId)">查看详情</el-link>
-				        <!-- <el-link type="primary" :underline="false" @click="queryWorkOrder(order.orderId)">订单工单</el-link> -->
-				      </div>
-				    </div>
-				    <div class="order-content">
-				      <el-row style="width:100%;">
-				        <el-col :span="9" style="height: 100%;">
-				          <div class="col-item-pro">
-				            <div class="pro-item" v-for="orderItem in order.orderDetails" :key="orderItem.orderDetailId">
-				              <div class="left">
-				                <div class="image">
-				                  <img :src="orderItem.imgUrl" style="height:80px;width: 80px;">
-				                </div>
-				                <div class="main">
-				                  <span>{{ orderItem.goodsName }}</span>
-				                  <span class="spec"
-				                    v-if="orderItem.goodsSpecName === '默认' && orderItem.goodsSpecValue === '默认'">默认</span>
-				                  <span class="spec" v-else>{{ orderItem.goodsSpecName }}-{{ orderItem.goodsSpecValue }}</span>
-				                </div>
-				              </div>
-				              <div class="right">
-				                <span>¥{{ orderItem.price }}</span>
-				                <span>x{{ orderItem.num }}</span>
-				              </div>
-				            </div>
-				          </div>
-				        </el-col>
-				        <el-col :span="3" style="height: 100%;">
-				          <div class="col-item">
-				            <div>{{ order.userName }}</div>
-				            <div>{{ order.phone }}</div>
-				            <div style="color: #409EFF;">{{ order.isAddCorp ? '(已入驻企微)' : '' }}</div>
-				          </div>
-				        </el-col>
-				        <el-col :span="3" style="height: 100%;">
-				          <div class="col-item">
-				            <div>{{ order.receUserName }}/{{ order.recePhone }}</div>
-				            <div class="ellipsis-2">{{ order.province + order.city + order.area + order.street + order.receAddress +
-				              order.houseNo }}</div>
-				          </div>
-				        </el-col>
-				        <el-col :span="2" style="height: 100%;">
-				          <div class="col-item">
-				            <div class="totalprice">¥{{ order.payAmount }}</div>
-				            <div style="font-size: 12px" v-if="order.discountAmount">(<span>-{{ order.discountAmount }}</span><span
-				                v-if="order.promotionDiscountRate">/{{ order.promotionDiscountRate * 10 }}折</span>)</div>
-				          </div>
-				        </el-col>
-				        <el-col :span="2" style="height: 100%;">
-				          <div class="col-item">
-				            <div style="display: flex; align-items: center;">
-				              <img src="@/assets/order/CLOSE.png" style="width: 16px; flex-shrink: 0;"
-				                v-if="order.orderStatus == 'CLOSE'">
-				              <img src="@/assets/order/DFH.png" style="width: 16px; flex-shrink: 0;"
-				                v-if="order.orderStatus == 'DFH'">
-				              <img src="@/assets/order/NOPAY.png" style="width: 16px; flex-shrink: 0;"
-				                v-if="order.orderStatus == 'NOPAY'">
-				              <img src="@/assets/order/OVER.png" style="width: 16px; flex-shrink: 0;"
-				                v-if="order.orderStatus == 'OVER'">
-				              <img src="@/assets/order/TIMEOUT.png" style="width: 16px; flex-shrink: 0;"
-				                v-if="order.orderStatus == 'TIMEOUT'">
-				              <img src="@/assets/order/YFH.png" style="width: 16px; flex-shrink: 0;"
-				                v-if="order.orderStatus == 'YFH'">
-				              <span style="margin-left: 4px">{{ order.orderStatus | ORDER_CURRENT_STATUS_FILTER }}</span>
-				            </div>
-				            <div>({{ order.toWorkOrder ? '已派单' : '未派单' }})</div>
-				          </div>
-				        </el-col>
-				        <el-col :span="2" style="height: 100%;">
-				          <div class="col-item">
-				            <el-popover placement="top" width="220" trigger="hover" v-if="order.commentService">
-				              <div class="rate-list">
-				                <div style="display: flex; align-items: center; margin-bottom: 5px;">商品质量:<el-rate
-				                    :value="order.commentGoods" disabled></el-rate></div>
-				                <div style="display: flex; align-items: center; margin-bottom: 5px;">服务质量:<el-rate
-				                    :value="order.commentService" disabled></el-rate></div>
-				                <div style="display: flex; align-items: center;">配送质量:<el-rate :value="order.commentExpress"
-				                    disabled></el-rate></div>
-				              </div>
-				              <el-button type="text" slot="reference">已评价</el-button>
-				            </el-popover>
-				            <div v-else>未评价</div>
-				          </div>
-				        </el-col>
-				        <el-col :span="3" style="height: 100%;">
-				          <div class="col-item">
-				            <div class="operate">
-				              <el-popconfirm title="确定取消订单吗?" @confirm="cancelOrder(order.orderId)"
-				                v-if="order.orderStatus === 'NOPAY' && $restrict('cancelOrder')">
-				                <el-button slot="reference" type="text" size="small">取消订单</el-button>
-				              </el-popconfirm>
-				              <el-button type="text" size="small" v-if="order.orderStatus === 'DFH' && $restrict('deliver')"
-				                @click="showLogistics(order, 'add')">发货</el-button>
-				              <el-button type="text" size="small" v-if="order.orderStatus === 'DFH' && $restrict('changeShippingaddress')"
-				                @click="openAddressForm(order)">修改收货地址</el-button>
-				              <el-button type="text" size="small"
-				                v-if="order.orderStatus === 'YFH' && $restrict('changeDeliverynumber') && order.orderDetails.some(i => i.workOrderType === 'INSTALL')"
-				                @click="showLogistics(order, 'edit')">
-				                修改快递单号
-				              </el-button>
-				              <el-button type="text" size="small"
-				                v-if="(order.orderStatus === 'YFH' || order.orderStatus === 'OVER') && $restrict('viewLogistics') && order.orderDetails.some(i => i.workOrderType === 'INSTALL')"
-				                @click="queryLogistics(order)">
-				                查看物流
-				              </el-button>
-				              <!-- toWorkOrderDetail(order.orderId) -->
-				              <el-button type="text" size="small" v-if="order.toWorkOrder && $restrict('workOrder_detail')"
-				                @click="queryWorkOrder(order.orderId)">查看工单</el-button>
-				            </div>
-				          </div>
-				        </el-col>
-				      </el-row>
-				    </div>
-				    <div class="order-remark buyer" v-if="order.buyerMsg">买家留言:{{ order.buyerMsg }}</div>
-				    <div class="order-remark saler" v-if="order.remark">商家备注:{{ order.remark }}</div>
-				  </div>
-				  <div class="no-data" v-if="dataList.length <= 0">暂无订单</div>
-				</div>
-				<div class="pagination clearfix">
-				  <div class="fr">
-				    <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage"
-				      :page-sizes="[10, 20, 30, 50]" :page-size="10" layout="total, sizes, prev, pager, next, jumper"
-				      :total="listTotal">
-				    </el-pagination>
-				  </div>
-				</div>
-			</div>
-			<!-- 订单备注 -->
-			<div v-if="activeKey == 'remark'" class="app-container">
-				<el-input type="textarea" :autosize="{ minRows: 8, maxRows: 16 }" placeholder="请输入备注内容" v-model="remark"
-				  maxlength="100" show-word-limit>
-				</el-input>
-				<div slot="footer" class="dialog-footer">
-				  <el-button type="primary" @click="saveRemark(data.removeTab)">保 存</el-button>
-				  <el-button @click="data.removeTab();cancelRemark">取 消</el-button>
-				</div>
-			</div>
-			<!-- 物流信息 -->
-			<div v-if="activeKey == 'materialDetail'" class="app-container">
-				<el-table v-loading="logisticsLoading" :data="logistics" style="width: 100%" size="mini">
-				  <el-table-column prop="comName" label="物流公司" align="center"></el-table-column>
-				  <el-table-column prop="areaName" label="地区名称" align="center"></el-table-column>
-				  <el-table-column prop="time" label="物流时间" align="center"></el-table-column>
-				  <el-table-column prop="state" label="物流状态" align="center">
-				    <template slot-scope="scope">
-				      {{ scope.row.state | EXPRESS_CURRENT_STATE_FILTER }}
-				    </template>
-				  </el-table-column>
-				  <el-table-column prop="context" label="物流详情" align="center"></el-table-column>
-				</el-table>
-				<div slot="footer" class="dialog-footer">
-				  <el-button @click="logisticsVisible = false;data.removeTab()">关 闭</el-button>
-				</div>
-			</div>
-			<!-- 发货弹窗 -->
-			<div v-if="activeKey == 'deliverGoods' || activeKey == 'editExpressage'" 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="logisticsNo" :rules="[{ required: true, message: '快递单号不能为空', trigger: 'blur' }]">
-							  <el-input v-model="logisticsForm.logisticsNo" placeholder="请输入快递单号"></el-input>
-							</el-form-item>
-						</el-col>
-						<el-col :span="6">
-							<el-form-item label="物流公司" prop="companyCode"
-							  :rules="[{ required: true, message: '请选择物流公司', trigger: 'change' }]">
-							  <el-select v-model="logisticsForm.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" v-if="logisticsType === 'add'"
-							  :rules="[{ required: true, message: '请选择仓储', trigger: 'change' }]">
-							  <el-select 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-radio-group v-model="logisticsForm.workOrder">
-							    <el-radio :label="true">是</el-radio>
-							    <el-radio :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-radio-group v-model="logisticsForm.exchange">
-							    <el-radio :label="true">是</el-radio>
-							    <el-radio :label="false">否</el-radio>
-							  </el-radio-group>
-							</el-form-item>
-						</el-col>
-					</el-row>
-				</el-form>
-				<div slot="footer" class="dialog-footer">
-				  <el-button type="primary" @click="saveLogistics(data.removeTab)">保 存</el-button>
-				  <el-button @click="cancelLogistics;data.removeTab()">取 消</el-button>
-				</div>
-			</div>
-			<!-- 修改收货地址 -->
-			<div v-if="activeKey == 'editAddress'" class="app-container">
-				<el-form :model="addressForm" :rules="addressFormRules" ref="addressForm" label-width="80px" label-position="left">
-					<el-row :gutter="20">
-						<el-col :span="6">
-							<el-form-item label="姓名" prop="name">
-							  <el-input v-model="addressForm.name" placeholder="请输入姓名"></el-input>
-							</el-form-item>
-						</el-col>
-						<el-col :span="6">
-							<el-form-item label="电话" prop="phone">
-							  <el-input v-model="addressForm.phone" placeholder="请输入电话"></el-input>
-							</el-form-item>
-						</el-col>
-						<el-col :span="6">
-							<el-form-item label="省" prop="province">
-							  <el-select v-model="addressForm.province" placeholder="请选择省" @change="changeProvince" style="width: 100%">
-							    <el-option v-for="item in provinceList" :key="item.id" :label="item.name" :value="item.id"></el-option>
-							  </el-select>
-							</el-form-item>
-						</el-col>
-						<el-col :span="6">
-							<el-form-item label="市" prop="city">
-							  <el-select v-model="addressForm.city" placeholder="请选择市" @change="changeCity" style="width: 100%">
-							    <el-option v-for="item in cityList" :key="item.id" :label="item.name" :value="item.id"></el-option>
-							  </el-select>
-							</el-form-item>
-						</el-col>
-						<el-col :span="6">
-							<el-form-item label="区" prop="area">
-							  <el-select v-model="addressForm.area" placeholder="请选择区" @change="changeArea" style="width: 100%">
-							    <el-option v-for="item in areaList" :key="item.id" :label="item.name" :value="item.id"></el-option>
-							  </el-select>
-							</el-form-item>
-						</el-col>
-						<el-col :span="6">
-							<el-form-item label="街道" prop="street">
-							  <el-select v-model="addressForm.street" placeholder="请选择街道" @change="changeStreet" style="width: 100%">
-							    <el-option v-for="item in streetList" :key="item.id" :label="item.name" :value="item.id"></el-option>
-							  </el-select>
-							</el-form-item>
-						</el-col>
-						<el-col :span="6">
-							<el-form-item label="详细地址" prop="address">
-							  <el-input v-model="addressForm.address" placeholder="请输入详细地址"></el-input>
-							</el-form-item>
-						</el-col>
-						<el-col :span="6">
-							<el-form-item label="门牌号" prop="house">
-							  <el-input v-model="addressForm.house" placeholder="请输入门牌号"></el-input>
-							</el-form-item>
-						</el-col>
-					</el-row>
-				</el-form>
-				<div slot="footer" class="dialog-footer">
-				  <el-button type="primary" @click="submitAddressForm(data.removeTab)">保 存</el-button>
-				  <el-button @click="cancelAddressForm;data.removeTab()">取 消</el-button>
-				</div>
-			</div>
-		</template>
-		<!-- 批量发货 -->
-		<el-dialog title="批量发货" :visible.sync="batchShipmentVisible" :show-close="false" width="30%"
-		  :close-on-click-modal="false">
-		  <el-form ref="batchShipmentForm" label-position="top" label-width="120px" style="height: 194px;">
-		    <el-form-item label="上传发货表格" prop="fileUrl">
-		      <el-upload ref="upload" class="upload-demo" :action="baseURL + 'order/goods/batch/deliver'" :headers="myHeaders"
-		        :on-remove="handleRemove" :on-change="handleChange" :before-upload="beforeUpload" :auto-upload="false"
-		        :file-list="fileList">
-		        <el-button size="small" type="primary">{{ fileList.length == 0 ? '点击上传' : '重新上传' }}</el-button>
-		        <div slot="tip" class="el-upload__tip">只支持上传excel表格文件</div>
-		      </el-upload>
-		    </el-form-item>
-		  </el-form>
-		
-		  <div slot="footer" class="dialog-footer">
-		    <el-button @click="cancelBatchShipmentForm">取 消</el-button>
-		    <el-button type="primary" @click="submitBatchShipmentForm">发 货</el-button>
-		  </div>
-		</el-dialog>
-	</zj-tab-page>
+  <div>
+    <zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: $route.meta.title+'-列表', essential: true }]">
+      <template slot-scope="{activeKey, data}">
+        <div v-if="activeKey == 'list'" class="app-container">
+          <div class="screen-container">
+            <el-form ref="screenForm" :model="screenForm" label-width="70px" size="small" label-position="left">
+              <el-row :gutter="20">
+                <el-col :xs="24" :sm="12" :lg="6">
+                  <el-form-item label="订单号" prop="orderId">
+                    <el-input v-model="screenForm.orderId" placeholder="请输入订单号"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :xs="24" :sm="12" :lg="6">
+                  <el-form-item label="商品名称" prop="goodsName">
+                    <el-input v-model="screenForm.goodsName" placeholder="请输入商品名称"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :xs="24" :sm="12" :lg="6">
+                  <el-form-item label="会员昵称" prop="memberName">
+                    <el-input v-model="screenForm.memberName" placeholder="请输入会员昵称"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :xs="24" :sm="12" :lg="6">
+                  <el-form-item label="手机号" prop="phone">
+                    <el-input v-model="screenForm.phone" placeholder="请输入手机号"></el-input>
+                  </el-form-item>
+                </el-col>
+          
+                <el-col :xs="24" :sm="12" :lg="6">
+                  <el-form-item label="网点名称" prop="websitId">
+                    <el-select v-model="screenForm.websitId" placeholder="全部" filterable>
+                      <el-option label="全部" value=""></el-option>
+                      <el-option :label="item.name" :value="item.id" v-for="(item, index) in websiteList"
+                        :key="index"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+          
+                <el-col :xs="24" :sm="12" :lg="6">
+                  <el-form-item label="兑换码" prop="exchangeCode">
+                    <el-input v-model="screenForm.exchangeCode" placeholder="请输入兑换码"></el-input>
+                  </el-form-item>
+                </el-col>
+          
+                <!--          <el-col :xs="24" :sm="12" :lg="6">-->
+                <!--            <el-form-item label="当前状态" prop="orderStatus">-->
+                <!--              <el-select v-model="screenForm.orderStatus" placeholder="全部">-->
+                <!--                <el-option label="全部" value=""></el-option>-->
+                <!--                <el-option :label="item.label" :value="item.value" v-for="(item, index) in screen_status" :key="index"></el-option>-->
+                <!--              </el-select>-->
+                <!--            </el-form-item>-->
+                <!--          </el-col>-->
+          
+                <el-col :xs="24" :sm="12" :lg="6">
+                  <el-form-item label="创建时间" prop="createDate" style="height: 33px;">
+                    <el-date-picker v-model="screenForm.createDate" type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss"
+                      range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
+                    </el-date-picker>
+                  </el-form-item>
+                </el-col>
+          
+                <el-col :xs="24" :sm="12" :lg="6">
+                  <el-form-item label="支付时间" prop="payDate" style="height: 33px;">
+                    <el-date-picker v-model="screenForm.payDate" type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss"
+                      range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
+                    </el-date-picker>
+                  </el-form-item>
+                </el-col>
+          
+                <el-col :xs="24" :sm="12" :lg="6">
+                  <el-form-item label="评价状态" prop="evaluateStatus">
+                    <el-select v-model="screenForm.evaluateStatus" placeholder="全部">
+                      <el-option label="全部" value=""></el-option>
+                      <el-option label="未评价订单" :value="0"></el-option>
+                      <el-option label="已评价订单" :value="3"></el-option>
+                      <el-option label="差评订单" :value="1"></el-option>
+                      <el-option label="好评订单" :value="2"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+          
+                <el-col :xs="24" :sm="12" :lg="6">
+                  <el-form-item label="派单异常" prop="sendStatus">
+                    <el-select v-model="screenForm.sendStatus" placeholder="全部">
+                      <el-option label="全部" value=""></el-option>
+                      <el-option label="派单异常订单" :value="true"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :xs="24" :sm="12" :lg="6">
+                  <el-form-item label="信息编号" prop="workerOrderNo">
+                    <el-input v-model="screenForm.workerOrderNo" placeholder="请输入信息编号"></el-input>
+                  </el-form-item>
+                </el-col>
+          
+                <el-col :xs="24" :sm="12" :lg="6" class="tr">
+                  <el-form-item label="">
+                    <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+                    <el-button size="small" @click="resetScreenForm">清空</el-button>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form>
+          </div>
+          
+          <div class="tabs-container order-tabs-container clearfix">
+            <div class="fl">
+              <el-tabs v-model="tabCurrent" type="card" @tab-click="changeTabs" class="fl" style="margin-right: 20px">
+                <el-tab-pane label="全部" name="ALL"></el-tab-pane>
+                <el-tab-pane label="待付款" name="NOPAY"></el-tab-pane>
+                <el-tab-pane label="待发货" name="DFH"></el-tab-pane>
+                <el-tab-pane label="已发货" name="YFH"></el-tab-pane>
+                <el-tab-pane label="已完成" name="OVER"></el-tab-pane>
+                <el-tab-pane label="已退款" name="CLOSE"></el-tab-pane>
+                <el-tab-pane label="已超时" name="TIMEOUT"></el-tab-pane>
+              </el-tabs>
+              <el-button v-if="$restrict('batchNote')" class="fl" type="primary" size="small" @click="batchRemark">批量备注</el-button>
+              <el-button class="fl" type="primary" size="small" @click="batchShipmentVisible = true"
+                v-show="tabCurrent == 'DFH' && $restrict('batchDelivery')">批量发货</el-button>
+              <el-button class="fl" size="small" @click="downloadTemplate" v-show="tabCurrent == 'DFH' && $restrict('template')">下载批量发货模版</el-button>
+            </div>
+            <div class="fr">
+              <el-button v-if="$restrict('exp')" size="small" type="primary" @click="handleExport">导出报表</el-button>
+            </div>
+          </div>
+          <div class="order-main-container">
+            <div class="table-top">
+              <el-row style="width:100%">
+                <el-col :span="3">
+                  <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="allChange"
+                    style="margin-left: 10px"></el-checkbox>
+                  <span class="item product">商品信息</span>
+                </el-col>
+                <el-col :span="3" style="text-align: right"><span class="item">单价(元)/数量</span></el-col>
+                <el-col :span="3" style="text-align: center"><span class="item">买家信息</span></el-col>
+                <el-col :span="3" style="text-align: center"><span class="item">收货信息</span></el-col>
+                <el-col :span="2" style="text-align: center"><span class="item">实付金额</span></el-col>
+                <el-col :span="2" style="text-align: center"><span class="item">订单状态</span></el-col>
+                <el-col :span="2" style="text-align: center"><span class="item">评价状态</span></el-col>
+                <el-col :span="2" style="text-align: center"><span class="item">业务员</span></el-col>
+                <el-col :span="2" style="text-align: center"><span class="item">分销员</span></el-col>
+                <el-col :span="2" style="text-align: center"><span class="item">操作</span></el-col>
+              </el-row>
+            </div>
+            <div class="order-item" v-for="order in dataList" :key="order.orderId">
+              <div class="order-top">
+                <el-checkbox v-model="order.selected"></el-checkbox>
+                <span><b>订单号</b>:{{ order.orderId }}</span>
+                <span><b>下单时间</b>:{{ order.createTime }}</span>
+                <span><b>商户</b>:{{ order.companyWechatName || '无' }}</span>
+                <span><b>网点</b>:{{ order.websitName || '无' }}</span>
+                <el-tag>{{order.saleType | saleTypeFilter}}</el-tag>
+                <div class="fr">
+                  <el-link type="primary" v-if="$restrict('orderNote')" :underline="false" @click="showRemark(order)">订单备注</el-link>
+                  <el-link type="primary" v-if="$restrict('detail')" :underline="false" @click="queryDetail(order.orderId)">查看详情</el-link>
+                  <!-- <el-link type="primary" :underline="false" @click="queryWorkOrder(order.orderId)">订单工单</el-link> -->
+                </div>
+              </div>
+              <div class="order-content">
+                <el-row style="width:100%;">
+                  <el-col :span="6" style="height: 100%;">
+                    <div class="col-item-pro">
+                      <div class="pro-item" v-for="orderItem in order.orderDetails" :key="orderItem.orderDetailId">
+                        <div class="left">
+                          <div class="image">
+                            <img :src="orderItem.imgUrl" style="height:80px;width: 80px;">
+                          </div>
+                          <div class="main">
+                            <span>{{ orderItem.goodsName }}</span>
+                            <span class="spec"
+                              v-if="orderItem.goodsSpecName === '默认' && orderItem.goodsSpecValue === '默认'">默认</span>
+                            <span class="spec" v-else>{{ orderItem.goodsSpecName }}-{{ orderItem.goodsSpecValue }}</span>
+                          </div>
+                        </div>
+                        <div class="right">
+                          <span>¥{{ orderItem.price }}</span>
+                          <span>x{{ orderItem.num }}</span>
+                        </div>
+                      </div>
+                    </div>
+                  </el-col>
+                  <el-col :span="3" style="height: 100%;">
+                    <div class="col-item">
+                      <div>{{ order.userName }}</div>
+                      <div>{{ order.phone }}</div>
+                      <div style="color: #409EFF;">{{ order.isAddCorp ? '(已入驻企微)' : '' }}</div>
+                    </div>
+                  </el-col>
+                  <el-col :span="3" style="height: 100%;">
+                    <div class="col-item">
+                      <div>{{ order.receUserName }}/{{ order.recePhone }}</div>
+                      <div class="ellipsis-2">{{ order.province + order.city + order.area + order.street + order.receAddress +
+                        order.houseNo }}</div>
+                    </div>
+                  </el-col>
+                  <el-col :span="2" style="height: 100%;">
+                    <div class="col-item">
+                      <div class="totalprice">¥{{ order.payAmount }}</div>
+                      <div style="font-size: 12px" v-if="order.discountAmount">(<span>-{{ order.discountAmount }}</span><span
+                          v-if="order.promotionDiscountRate">/{{ order.promotionDiscountRate * 10 }}折</span>)</div>
+                    </div>
+                  </el-col>
+                  <el-col :span="2" style="height: 100%;">
+                    <div class="col-item">
+                      <div style="display: flex; align-items: center;">
+                        <img src="@/assets/order/CLOSE.png" style="width: 16px; flex-shrink: 0;" v-if="order.orderStatus == 'CLOSE'">
+                        <img src="@/assets/order/DFH.png" style="width: 16px; flex-shrink: 0;" v-if="order.orderStatus == 'DFH'">
+                        <img src="@/assets/order/NOPAY.png" style="width: 16px; flex-shrink: 0;" v-if="order.orderStatus == 'NOPAY'">
+                        <img src="@/assets/order/OVER.png" style="width: 16px; flex-shrink: 0;" v-if="order.orderStatus == 'OVER'">
+                        <img src="@/assets/order/TIMEOUT.png" style="width: 16px; flex-shrink: 0;" v-if="order.orderStatus == 'TIMEOUT'">
+                        <img src="@/assets/order/YFH.png" style="width: 16px; flex-shrink: 0;" v-if="order.orderStatus == 'YFH'">
+                        <span style="margin-left: 4px">{{ order.orderStatus | ORDER_CURRENT_STATUS_FILTER }}</span>
+                      </div>
+                      <div>({{ order.toWorkOrder ? '已派单' : '未派单' }})</div>
+                    </div>
+                  </el-col>
+                  <el-col :span="2" style="height: 100%;">
+                    <div class="col-item">
+                      <el-popover placement="top" width="220" trigger="hover" v-if="order.commentService">
+                        <div class="rate-list">
+                          <div style="display: flex; align-items: center; margin-bottom: 5px;">商品质量:<el-rate
+                              :value="order.commentGoods" disabled></el-rate></div>
+                          <div style="display: flex; align-items: center; margin-bottom: 5px;">服务质量:<el-rate
+                              :value="order.commentService" disabled></el-rate></div>
+                          <div style="display: flex; align-items: center;">配送质量:<el-rate :value="order.commentExpress"
+                              disabled></el-rate></div>
+                        </div>
+                        <el-button type="text" slot="reference">已评价</el-button>
+                      </el-popover>
+                      <div v-else>未评价</div>
+                    </div>
+                  </el-col>
+                  <el-col :span="2" style="height: 100%;">
+                    <div class="col-item">
+                      <div>{{order.saleName}}</div>
+                    </div>
+                  </el-col>
+                  <el-col :span="2" style="height: 100%;">
+                    <div class="col-item">
+                      <div>{{order.workerName}}</div>
+                    </div>
+                  </el-col>
+                  <el-col :span="2" style="height: 100%;">
+                    <div class="col-item">
+                      <div class="operate">
+                        <el-popconfirm title="确定取消订单吗?" @confirm="cancelOrder(order.orderId)"
+                          v-if="order.orderStatus === 'NOPAY' && $restrict('cancelOrder')">
+                          <el-button slot="reference" type="text" size="small">取消订单</el-button>
+                        </el-popconfirm>
+                        <el-button type="text" size="small" v-if="order.orderStatus === 'DFH' && $restrict('deliver')"
+                          @click="showLogistics(order, 'add')">发货</el-button>
+                        <el-button type="text" size="small" v-if="order.orderStatus === 'DFH' && $restrict('changeShippingaddress')"
+                          @click="openAddressForm(order)">修改收货地址</el-button>
+                        <el-button type="text" size="small"
+                          v-if="order.orderStatus === 'YFH' && $restrict('changeDeliverynumber') && order.orderDetails.some(i => i.workOrderType === 'INSTALL')"
+                          @click="showLogistics(order, 'edit')">
+                          修改快递单号
+                        </el-button>
+                        <el-button type="text" size="small"
+                          v-if="(order.orderStatus === 'YFH' || order.orderStatus === 'OVER') && $restrict('viewLogistics') && order.orderDetails.some(i => i.workOrderType === 'INSTALL')"
+                          @click="queryLogistics(order)">
+                          查看物流
+                        </el-button>
+                        <!-- toWorkOrderDetail(order.orderId) -->
+                        <el-button type="text" size="small" v-if="order.toWorkOrder && $restrict('workOrder_detail')"
+                          @click="queryWorkOrder(order.orderId)">查看工单</el-button>
+                        <el-button type="text" size="small"
+                          v-if="(order.orderStatus === 'DFH' || order.orderStatus === 'YFH')"
+                          @click="toPrint(order)">
+                          打印
+                        </el-button>
+                      </div>
+                    </div>
+                  </el-col>
+                </el-row>
+              </div>
+              <div class="order-remark buyer" v-if="order.buyerMsg">买家留言:{{ order.buyerMsg }}</div>
+              <div class="order-remark saler" v-if="order.remark">商家备注:{{ order.remark }}</div>
+            </div>
+            <div class="no-data" v-if="dataList.length <= 0">暂无订单</div>
+          </div>
+          <div class="pagination clearfix">
+            <div class="fr">
+              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage"
+                :page-sizes="[10, 20, 30, 50]" :page-size="10" layout="total, sizes, prev, pager, next, jumper"
+                :total="listTotal">
+              </el-pagination>
+            </div>
+          </div>
+        </div>
+        <!-- 订单备注 -->
+        <div v-if="activeKey == 'remark'" class="app-container">
+          <el-input type="textarea" :autosize="{ minRows: 8, maxRows: 16 }" placeholder="请输入备注内容" v-model="remark"
+            maxlength="100" show-word-limit>
+          </el-input>
+          <div slot="footer" class="dialog-footer">
+            <el-button type="primary" @click="saveRemark(data.removeTab)">保 存</el-button>
+            <el-button @click="data.removeTab();cancelRemark">取 消</el-button>
+          </div>
+        </div>
+        <!-- 物流信息 -->
+        <div v-if="activeKey == 'materialDetail'" class="app-container">
+          <el-table v-loading="logisticsLoading" :data="logistics" style="width: 100%" size="mini">
+            <el-table-column prop="comName" label="物流公司" align="center"></el-table-column>
+            <el-table-column prop="areaName" label="地区名称" align="center"></el-table-column>
+            <el-table-column prop="time" label="物流时间" align="center"></el-table-column>
+            <el-table-column prop="state" label="物流状态" align="center">
+              <template slot-scope="scope">
+                {{ scope.row.state | EXPRESS_CURRENT_STATE_FILTER }}
+              </template>
+            </el-table-column>
+            <el-table-column prop="context" label="物流详情" align="center"></el-table-column>
+          </el-table>
+          <div slot="footer" class="dialog-footer">
+            <el-button @click="logisticsVisible = false;data.removeTab()">关 闭</el-button>
+          </div>
+        </div>
+        <!-- 发货弹窗 -->
+        <div v-if="activeKey == 'deliverGoods' || activeKey == 'editExpressage'" 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="logisticsNo" :rules="[{ required: true, message: '快递单号不能为空', trigger: 'blur' }]">
+                  <el-input v-model="logisticsForm.logisticsNo" placeholder="请输入快递单号"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="物流公司" prop="companyCode"
+                  :rules="[{ required: true, message: '请选择物流公司', trigger: 'change' }]">
+                  <el-select v-model="logisticsForm.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" v-if="logisticsType === 'add'"
+                  :rules="[{ required: true, message: '请选择仓储', trigger: 'change' }]">
+                  <el-select 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-radio-group v-model="logisticsForm.workOrder">
+                    <el-radio :label="true">是</el-radio>
+                    <el-radio :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-radio-group v-model="logisticsForm.exchange">
+                    <el-radio :label="true">是</el-radio>
+                    <el-radio :label="false">否</el-radio>
+                  </el-radio-group>
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </el-form>
+          <div slot="footer" class="dialog-footer">
+            <el-button type="primary" @click="saveLogistics(data.removeTab)">保 存</el-button>
+            <el-button @click="cancelLogistics;data.removeTab()">取 消</el-button>
+          </div>
+        </div>
+        <!-- 修改收货地址 -->
+        <div v-if="activeKey == 'editAddress'" class="app-container">
+          <el-form :model="addressForm" :rules="addressFormRules" ref="addressForm" label-width="80px" label-position="left">
+            <el-row :gutter="20">
+              <el-col :span="6">
+                <el-form-item label="姓名" prop="name">
+                  <el-input v-model="addressForm.name" placeholder="请输入姓名"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="电话" prop="phone">
+                  <el-input v-model="addressForm.phone" placeholder="请输入电话"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="省" prop="province">
+                  <el-select v-model="addressForm.province" placeholder="请选择省" @change="changeProvince" style="width: 100%">
+                    <el-option v-for="item in provinceList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="市" prop="city">
+                  <el-select v-model="addressForm.city" placeholder="请选择市" @change="changeCity" style="width: 100%">
+                    <el-option v-for="item in cityList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="区" prop="area">
+                  <el-select v-model="addressForm.area" placeholder="请选择区" @change="changeArea" style="width: 100%">
+                    <el-option v-for="item in areaList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="街道" prop="street">
+                  <el-select v-model="addressForm.street" placeholder="请选择街道" @change="changeStreet" style="width: 100%">
+                    <el-option v-for="item in streetList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="详细地址" prop="address">
+                  <el-input v-model="addressForm.address" placeholder="请输入详细地址"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="门牌号" prop="house">
+                  <el-input v-model="addressForm.house" placeholder="请输入门牌号"></el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </el-form>
+          <div slot="footer" class="dialog-footer">
+            <el-button type="primary" @click="submitAddressForm(data.removeTab)">保 存</el-button>
+            <el-button @click="cancelAddressForm;data.removeTab()">取 消</el-button>
+          </div>
+        </div>
+      </template>
+      <!-- 批量发货 -->
+      <el-dialog title="批量发货" :visible.sync="batchShipmentVisible" :show-close="false" width="30%"
+        :close-on-click-modal="false">
+        <el-form ref="batchShipmentForm" label-position="top" label-width="120px" style="height: 194px;">
+          <el-form-item label="上传发货表格" prop="fileUrl">
+            <el-upload ref="upload" class="upload-demo" :action="baseURL + 'order/goods/batch/deliver'" :headers="myHeaders"
+              :on-remove="handleRemove" :on-change="handleChange" :before-upload="beforeUpload" :auto-upload="false"
+              :file-list="fileList">
+              <el-button size="small" type="primary">{{ fileList.length == 0 ? '点击上传' : '重新上传' }}</el-button>
+              <div slot="tip" class="el-upload__tip">只支持上传excel表格文件</div>
+            </el-upload>
+          </el-form-item>
+        </el-form>
+      
+        <div slot="footer" class="dialog-footer">
+          <el-button @click="cancelBatchShipmentForm">取 消</el-button>
+          <el-button type="primary" @click="submitBatchShipmentForm">发 货</el-button>
+        </div>
+      </el-dialog>
+
+    </zj-tab-page>
+    
+    <print-preview ref="preView" @initPrint="handleInitPrint" @refreshList="handleRefreshList" />
+  </div>
+	
 </template>
 
 <script>
 import { getToken } from '@/utils/auth'
-import { cancelOrder, getList, goodsDeliver, saveRemark, batchShipment, batchRemark, getWebsiteList, editLogistics, getRegion, editAddress } from "@/api/order";
+import { cancelOrder, getList, goodsDeliver, saveRemark, getOrderDetail, batchRemark, getWebsiteList, editLogistics, getRegion, editAddress } from "@/api/order";
 import { getExpress, getCompanyList } from "@/api/common";
 import { downloadFiles, handleImport } from '@/utils/util'
+import printPreview from '../components/preview.vue'
+import { disAutoConnect, hiprint } from 'vue-plugin-hiprint'
 import * as Storage from "@/api/storage";
 import '@/styles/order-list.scss'
 
 export default {
   name: "order_list",
+
+	components: { 
+    printPreview
+  },
+  
+  filters: {
+    saleTypeFilter(val) {
+      const MAP = {
+        1: '商城销售',
+        2: '线下销售',
+      }
+      return MAP[val];
+    }
+  },
+
   data() {
     return {
       baseURL: process.env.VUE_APP_BASE_API,
@@ -468,7 +503,7 @@ export default {
         { label: '待发货', value: 'DFH' },
         { label: '已发货', value: 'YFH' },
         { label: '已完成', value: 'OVER' },
-        { label: '已关闭', value: 'CLOSE' }
+        { label: '已退款', value: 'CLOSE' }
       ],
       tabCurrent: 'ALL',
       currentPage: 1, // 当前页码
@@ -536,7 +571,21 @@ export default {
     },
     isIndeterminate() {
       return !this.dataList.every(item => item.selected !== true) && !this.dataList.every(item => item.selected !== false)
-    }
+    },
+
+    filterArr() {
+			return function (arr, size) {
+				//判断如果不是数组(就没有length),或者size没有传值,size小于1,就返回空数组
+				if (!arr.length || !size || size < 1) return []
+				let [start, end, result] = [null, null, []]
+				for (let i = 0; i < Math.ceil(arr.length / size); i++) {
+					start = i * size
+					end = start + size
+					result.push(arr.slice(start, end))
+				}
+				return result
+			}
+		}
   },
   created() {
     this.getList();
@@ -1055,6 +1104,162 @@ export default {
 
     },
 
+
+
+
+    // 点击打印
+		async toPrint(row) {
+			let pagingData = []
+			const { data } = await getOrderDetail({
+				orderId: row.orderId
+			})
+			pagingData = this.filterArr(data.orderDetails, 4)
+			// 初始化模板,否则生成的模板叠加
+			hiprint.init()
+			this.hiprintTemplate = new hiprint.PrintTemplate()
+			// 兼容批量打印
+			let len = pagingData.length
+			let loadingLen = len
+			// 使用 i-- 提升for效率
+			this.$startLoading()
+			for (let i = 0; i < len; i++) {
+				try {
+					let html = ''
+					let num = 0
+					let totalAmount = 0
+					pagingData[i].forEach(item => {
+						totalAmount = (Number(item.payAmount) * 100 + totalAmount * 100) / 100
+						num += Number(item.num)
+						html += `
+              <tr align="center">
+              <td>${item.goodsName}</td>
+              <td>${item.goodsSpecName}</td>
+              <td>${item.goodsMaterialUnit || ''}</td>
+              <td>${item.num}</td>
+              <td>${item.price}</td>
+              <td>${item.payAmount}</td>
+              <td></td>
+              <td></td>
+              </tr>
+            `
+					})
+					// 模板基础配置
+					this.panel = this.hiprintTemplate.addPrintPanel({
+						height: 140,
+						width: 241,
+						fontFamily: '黑体',
+						fontSize: 13,
+						paperFooter: 340,
+						paperHeader: 10,
+						paperNumberDisabled: true
+					})
+
+					// 获取收款单模板和基础配置
+					this.panel.addPrintHtml({
+						options: {
+							width: 633,
+							top: 30,
+							left: 20,
+							fontFamily: '黑体',
+							fontSize: 13,
+							content: this.setTableDom(data, html, totalAmount, num, len, i)
+						}
+					})
+
+					loadingLen--
+				} catch (error) {
+					console.log(999, error)
+					this.$endLoading()
+					return
+				}
+			}
+			if (loadingLen === 0) {
+				this.$endLoading()
+			}
+			console.log(333)
+			// 预览打印内容
+			this.$refs.preView.show(this.hiprintTemplate, this.panel)
+		},
+
+		// 打印模板
+		setTableDom(data, html, totalAmount, num, length, page) {
+			return `
+	   <div style="font-family:'黑体';font-size: 16px;">
+			<div style="display: flex;justify-content: center;align-items: center;position: relative;">
+				<h1 style="text-align:center;margin: 10px 0;">${data.companyWechatName}销售单</h1>
+				<div style="position: absolute;right:0;">共 ${length}页 第 ${page+1} 页</div>
+			</div>
+		  <div style="display: flex;justify-content: space-between;">
+			<div style="width: 28%;"></div>
+			<div>单据日期: ${data.createTime}</div>
+			<div>单据编号: ${data.orderId}</div>
+		  </div>
+		  <div style="display: flex;justify-content: space-between;font-size: 16px;margin: 10px 0;">
+		  	<div>客户: ${data.receUserName}</div>
+		  	<div>摘要: ${data.payType}</div>
+		  </div>
+		  <div style="display: flex;font-size: 16px;margin-bottom: 10px;">
+		  	<div>联系电话: ${data.recePhone}</div>
+		  	<div style="margin-left: 50px;">收货地址: ${data.province}${data.city}${data.area}${data.street}${data.receAddress}</div>
+		  </div>
+	      <div >
+	        <table border=".5" cellspacing="0" width="856"
+	         style="border-color: rgb(0,0,0);
+	          border-collapse: collapse;
+	          border-style: none;
+	          border: 1px solid rgb(0,0,0);
+	          font-weight: normal;
+	          
+	          text-decoration: none;
+	          vertical-align: middle;
+	          box-sizing: border-box;
+	          word-wrap: break-word;
+	          word-break: break-all;">
+				<tr align="center">
+					<td>商品名称</td>
+					<td>规格</td>
+					<td>单位</td>
+					<td>数量</td>
+					<td>单价</td>
+					<td>金额</td>
+					<td>仓库</td>
+					<td>备注</td>
+				</tr>
+	            ${html}
+				<tr align="center" align="center">
+				  <td>小计: </td>
+				  <td colspan="2"></td>
+				  <td>${num}</td>
+				  <td></td>
+				  <td>${totalAmount}</td>
+				  <td colspan="2">金额总计: ${totalAmount}</td>
+				</tr>
+	        </table>
+	      </div>
+		  <div style="display: flex;justify-content: space-between;font-size: 16px;margin: 10px 0;">
+		  	<div>制单人: ${data.createBy || ''}</div>
+		  	<div>审核人: ${data.companyWechatName || ''}</div>
+			<div>业务员: </div>
+			<div>签收人: </div>
+		  </div>
+	      <div style="margin:100px 0 0 0">
+	        <div></div>
+	      </div>
+	   </div>
+	  `
+		},
+
+		handleRefreshList() {
+			this.recordSelected = []
+			this.$refs.pageRef.refreshList()
+		},
+
+		handleInitPrint() {
+			this.$nextTick(() => {
+				this.initPrint()
+			})
+		},
+
   }
 }
 

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff