Browse Source

feat:线下销售订单

Moss 1 year ago
parent
commit
d8361ac5ba

+ 19 - 0
src/api/order.js

@@ -204,4 +204,23 @@ 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
+  })
 }

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

@@ -0,0 +1,172 @@
+<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">
+			</template-page>
+			<div v-if="~['add', 'edit'].indexOf(activeKey)">
+				<zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
+				  <zj-form-module title="" label-width="100px" :showPackUp="false"
+				    :form-data="formData" :form-items="formItems">
+				  </zj-form-module>
+				</zj-form-container>
+				<div slot="footer" class="dialog-footer">
+				  <el-button size="mini" @click="data.removeTab()">取 消</el-button>
+				  <el-button size="mini" @click="formConfirm(data.removeTab)" type="primary">确 定</el-button>
+				</div>
+			</div>
+		</template>
+	</zj-tab-page>
+</template>
+
+<script>
+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 } from "@/api/order";
+import operation_mixin from '@/components/template/operation_mixin.js'
+export default {
+  components: { TemplatePage },
+  mixins: [import_mixin,operation_mixin],
+  data() {
+    return {
+      // 表格属性
+      tableAttributes: {
+        // 启用勾选列
+        selectColumn: false
+      },
+      // 表格事件
+      tableEvents: {
+        'selection-change': this.selectionChange
+      },
+      // 勾选选中行
+      recordSelected: [],
+      /** 表单变量 */
+      formDialogType: 0,
+      formDialogTitles: ["新增", "编辑"],
+      formDialog: false,
+      formData: {
+        remark: '',
+      },
+		formType: 'add',
+		formVisible: false,
+    }
+  },
+  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]
+        }
+      }]
+    }
+  },
+  methods: {
+    // 列表请求函数
+    getList: getOfflineOrderList,
+    // 列表导出函数
+    exportList: offlineOrderListExport,
+    // 表格列解析渲染数据更改
+    columnParsing(item, defaultData) {
+      return defaultData
+    },
+    // 监听勾选变化
+    selectionChange(data) {
+      this.recordSelected = data
+    },
+	// 表格操作列
+	operation() {
+		return this.operationBtn({
+			remark: {
+				btnType: 'text',
+				click: ({ row, index, column }) => {
+					Object.assign(this.formData, row)
+					this.formDialogType = 0
+					this.openForm('remark',row)
+				}
+			},
+			account: {
+				conditions: ({ row, index, column }) => {
+					return row.orderStatus === 'OVER' && ~["EXCEPTION", "ING"].indexOf(row.status)
+				},
+				btnType: 'text',
+				prompt: '是否确定结算?',
+					click: ({ row, index, column }) => {
+						settlement({
+							orderId: row.orderId
+						}).then(res => {
+							this.$message({ type: 'success', message: `结算成功!` })
+							this.$refs.pageRef.refreshList()
+						})
+					}
+				},
+		})
+	},
+    openForm(type) {
+      this.$refs.tabPage.addTab({
+      	// 对应显示的模块
+      	activeKey: type,
+      	// 唯一标识
+      	key: type,
+      	// 页签名称
+      	label: ({ remark: "备注" })[type],
+      	// 打开时事件
+      	triggerEvent: () => {
+      		this.formCancel()
+      		this.$nextTick(()=>{
+      			this.formType = type
+      			this.formVisible = true
+      		})
+      	},
+      	// 关闭时事件
+      	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) {
+          ([saveRemark][this.formDialogType])(this.formData).then(res => {
+            this.$message({ type: 'success', message: `${this.formDialogTitles[this.formDialogType]}成功!` })
+            cancel('list')
+            this.$refs.pageRef.refreshList()
+          })
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 10 - 21
src/views/mallManagement/order/order_list/index.vue

@@ -138,9 +138,8 @@
                 <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="1" style="text-align: center"><span class="item">业务员</span></el-col>
-                <el-col :span="1" 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>
@@ -151,6 +150,7 @@
                 <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>
@@ -204,18 +204,12 @@
                   <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'">
+                        <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>
@@ -239,15 +233,10 @@
                   </el-col>
                   <el-col :span="2" style="height: 100%;">
                     <div class="col-item">
-                      <div>{{order.saleType | saleTypeFilter}}</div>
-                    </div>
-                  </el-col>
-                  <el-col :span="1" style="height: 100%;">
-                    <div class="col-item">
                       <div>{{order.saleName}}</div>
                     </div>
                   </el-col>
-                  <el-col :span="1" style="height: 100%;">
+                  <el-col :span="2" style="height: 100%;">
                     <div class="col-item">
                       <div>{{order.workerName}}</div>
                     </div>