david 2 years ago
parent
commit
2565217105
5 changed files with 306 additions and 1 deletions
  1. 42 1
      src/api/shop.js
  2. 8 0
      src/lang/en.js
  3. 8 0
      src/lang/zh.js
  4. 5 0
      src/router/index.js
  5. 243 0
      src/views/shop/order-list.vue

+ 42 - 1
src/api/shop.js

@@ -116,7 +116,7 @@ export function flowRemainPvList(query) {
   })
 }
 
-//shop/remain-pv
+//shop/remain-pv 列表
 export function remainPv(query) {
   return request({
     url: '/v1/shop/remain-pv',
@@ -126,6 +126,47 @@ export function remainPv(query) {
   })
 }
 
+// 订单列表
+export function orderList(query) {
+  return request({
+    url: '/v1/shop/order-list',
+    method: 'get',
+    data: query,
+    params: query
+  })
+}
+
+// 订单列表导出
+export function orderListExport(query) {
+  return request({
+    url: '/v1/shop/order-list-export',
+    method: 'get',
+    data: query,
+    params: query
+  })
+}
+
+// 订单导出pdf
+export function orderListExportPdf(query) {
+  return request({
+    url: '/v1/shop/order-list-export-pdf/'+query,
+    method: 'get',
+    data: query,
+    params: query
+  })
+}
+
+// 删除订单
+export function deleteOrder(query) {
+  return request({
+    url: '/v1/shop/delete-order',
+    method: 'post',
+    data: query
+  })
+}
+
+
+
 
 
 

+ 8 - 0
src/lang/en.js

@@ -235,6 +235,7 @@ export default {
     relation: '关系',
     reset: '重置',
     exportExcel:'Export Excel',
+    exportPDF:'Export PDF',
     desc: '描述',
     upload: 'Upload',
     modifyData:'Modifying data',
@@ -528,6 +529,13 @@ export default {
     selectDate:'Select date',
     currentImportOrderPeriods:'Current import order periods',
     totalRowsExcel:'Total rows of Excel file',
+    deliverGoods:'deliver goods',
+    deleteOrder:'Delete order',
+    courierCompany:'Courier Services Company',
+    courierNumber:'courier number',
+    selectOrderExportNotice:'Please select an order to export',
+    pdfOnlyOneOrderExported:'Only one order can be exported at a time',
+    sureDeleteOrder:'确定要删除订单吗?订单编号:',
   },
 
   // 管理员管理

+ 8 - 0
src/lang/zh.js

@@ -237,6 +237,7 @@ export default {
     reset: '重置',
     desc: '描述',
     exportExcel:'导出Excel',
+    exportPDF:'导出PDF',
     upload: '上传',
     modifyData:'正在修改数据',
   },
@@ -530,6 +531,13 @@ export default {
     selectDate:'选择日期',
     currentImportOrderPeriods:'当前导入订单期数',
     totalRowsExcel:'Excel 文件总行数',
+    deliverGoods:'发货',
+    deleteOrder:'删除订单',
+    courierCompany:'快递公司',
+    courierNumber:'快递单号',
+    selectOrderExportNotice:'请选择一条订单导出',
+    pdfOnlyOneOrderExported:'每次只能导出一条订单',
+    sureDeleteOrder:'确定要删除订单吗?订单编号:',
   },
 
   // 管理员管理

+ 5 - 0
src/router/index.js

@@ -182,6 +182,11 @@ export const constantRoutes = [
         component: () => import('@/views/shop/remain-pv'),
         name: 'shop_remain-pv',
       },
+      {
+        path: '/shop/order-list',
+        component: () => import('@/views/shop/order-list'),
+        name: 'shop_order-list',
+      },
     ]
   },
   {

+ 243 - 0
src/views/shop/order-list.vue

@@ -0,0 +1,243 @@
+<template>
+    <div v-loading="loading">
+      <div class="white-box">
+        <div class="filter-box">
+          <filter-user :filter-types="filterTypes" @select-value="handleFilterUser"></filter-user>
+        </div>
+        <el-table class="table-box" ref="multipleTable" :data="tableData" stripe style="width: 100%;"
+                  @selection-change="handleSelectionChange"
+                  :height="tool.getTableHeight()">
+          <el-table-column type="selection" width="70" v-if="tableHeaders"></el-table-column>
+          <el-table-column v-for="(tableHeader, key) in tableHeaders" :key="key" :label="tableHeader.header" :width="tableHeader.other.width ? tableHeader.other.width : ''" :prop="tableHeader.other.prop ? tableHeader.other.prop : null">
+            <template slot-scope="scope">
+              <template v-if="scope.row[tableHeader.index].other.tag" >
+                <el-tag :type="scope.row[tableHeader.index].other.tag.type ? scope.row[tableHeader.index].other.tag.type : null" :size="scope.row[tableHeader.index].other.tag.size ? scope.row[tableHeader.index].other.tag.size : null" :class="scope.row[tableHeader.index].other.tag.class ? scope.row[tableHeader.index].other.tag.class : null" >{{scope.row[tableHeader.index].value}}</el-tag>
+              </template>
+              <template v-else>
+                <div v-html="scope.row[tableHeader.index].value"></div>
+              </template>
+            </template>
+          </el-table-column>
+          <el-table-column :fixed="fixedColumn" :label="$t('common.action')" width="180">
+           <template slot-scope="scope">
+              <el-dropdown size="small" trigger="click">
+                <el-button type="primary" size="small" @click.stop="">
+                  {{ $t('common.action') }}<i class="el-icon-arrow-down el-icon--right"></i>
+                </el-button>
+                <el-dropdown-menu slot="dropdown">
+                  <el-dropdown-item command="edit" @click.native="handleDel(scope.row)" v-if="permission.hasPermission(`shop/edit`)">{{ $t('shop.deleteOrder') }}</el-dropdown-item>
+                  <!-- <el-dropdown-item command="edit" @click.native="handleEdit(scope.row)" v-if="permission.hasPermission(`shop/edit`)">Edit order&lt;!&ndash; 编辑订单 &ndash;&gt;</el-dropdown-item>
+                  <el-dropdown-item command="delivery" @click.native="handleShowDeliveryDialog(scope.row)" v-if="permission.hasPermission(`shop/order-delivery`) && scope.row['STATUS'] === '1' && scope.row['DELIVERY_STATUS'] === '0' ">deliver goods&lt;!&ndash; 发货 &ndash;&gt;</el-dropdown-item>
+                  <el-dropdown-item command="refund" @click.native="handleRefund(scope.row.SN)" v-if="permission.hasPermission(`shop/order-delivery`) && scope.row['PAY_TYPE'] === 'pay_stack' && scope.row['STATUS'] === '1' && scope.row['DELIVERY_STATUS'] === '0' ">Refund&lt;!&ndash; 退款 &ndash;&gt;</el-dropdown-item> -->
+                </el-dropdown-menu>
+              </el-dropdown>
+            </template>
+          </el-table-column>
+        </el-table>
+        <div class="white-box-footer">
+          <el-button type="success" size="small" @click="handleExport" v-show="permission.hasPermission(`shop/order-list-export`)">{{ $t('common.exportExcel') }}</el-button>
+          <el-button type="primary" size="small" @click="handleExportPDF" v-show="permission.hasPermission(`shop/order-list-export`)">{{ $t('common.exportPDF') }}</el-button>
+          <pagination :total="totalCount" :page_size="pageSize" @size-change="handleSizeChange"
+                      @current-change="handleCurrentChange"></pagination>
+        </div>
+      </div>
+      <el-dialog :title="$t('shop.deliverGoods')" :visible.sync="dialogDeliveryVisible"><!-- 发货 -->
+        <el-form :model="deliveryForm" label-width="150px" class="form-dialog">
+          <el-form-item :label="$t('shop.courierCompany')"><!-- 快递公司 -->
+            <el-input v-model="deliveryForm.expressCompany"></el-input>
+          </el-form-item>
+          <el-form-item :label="$t('shop.courierNumber')"><!-- 快递单号 -->
+            <el-input v-model="deliveryForm.orderTrackNo"></el-input>
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button @click="dialogDeliveryVisible = false">{{ $t('table.cancel') }}<!-- 取 消 --></el-button>
+          <el-button type="primary" @click.native="handleDelivery">{{ $t('shop.deliverGoods') }}<!-- 发货 --></el-button>
+        </div>
+      </el-dialog>
+    </div>
+  </template>
+  
+  <script>
+  import {getOperatingSystem} from "@/utils"
+  import tool from '@/utils/tool'
+  import FilterUser from '@/components/FilterUser'
+  import permission from '@/utils/permission'
+  import Pagination from '@/components/Pagination'
+  import filterHelper from '@/utils/filterHelper'
+  import { orderList, orderListExport, orderListExportPdf, deleteOrder } from '@/api/shop'
+  
+  export default {
+    name: 'shop_order-list',
+    components: {FilterUser, Pagination},
+    mounted () {
+      let system =  getOperatingSystem()
+      if (system == "Android" || system == 'ios') {
+        this.fixedColumn = false
+      } else {
+        this.fixedColumn = 'right'
+      }
+      this.getData()
+    },
+    data () {
+      return {
+        fixedColumn:false, // 固定,当手机端不固定,pc固定
+        tableHeaders: null,
+        tableData: null,
+        tableHeight: window.innerHeight - 310,
+        loading: true,
+        multipleSelection: [],
+        currentPage: 1,
+        totalPages: 1,
+        totalCount: 1,
+        pageSize: 20,
+        tool: tool,
+        permission: permission,
+        filterTypes: null,
+        filterModel: {},
+        dialogDeliveryVisible: false,
+        deliveryForm: {
+          sn: '',
+          expressCompany: '',
+          orderTrackNo: '',
+        },
+      }
+    },
+    methods: {
+      handleSelectionChange (val) {
+        this.multipleSelection = val
+      },
+      handleCurrentChange (page) {
+        this.getData(page, this.pageSize)
+      },
+      handleSizeChange (pageSize) {
+        this.getData(this.currentPage, pageSize)
+      },
+      handleFilterUser (filterData) {
+        filterHelper.handleFilterUser(this, filterData)
+      },
+      getData (page, pageSize) {
+        let filterData = this.filterModel
+        let vueObj=this
+        const paramsData = Object.assign({
+        page: (page === null || page == undefined) ? 1 : page,
+        pageSize: (pageSize === null || pageSize == undefined) ? vueObj.pageSize : pageSize
+        }, filterData)
+        orderList(paramsData).then(response => {
+            vueObj.tableHeaders = response.data.columnsShow ? response.data.columnsShow : []
+            vueObj.tableData = response.data.list
+            vueObj.filterTypes = response.data.filterTypes
+            vueObj.currentPage = page
+            vueObj.totalPages = parseInt(response.data.totalPages)
+            vueObj.totalCount = parseInt(response.data.totalCount)
+            vueObj.pageSize = pageSize
+            this.loading = false
+        }).catch(err =>{
+            this.loading = false
+            this.$message({
+                message: err,
+                type: 'error'
+            })
+        })
+      },
+      handleExport (){
+        this.$confirm(this.$t('financial.exportNotice'), this.$t('common.hint'), {//`确定要导出当前数据吗?`, '提示'
+          confirmButtonText: this.$t('common.confirm'), // 确定
+          cancelButtonText: this.$t('common.cancel'), // 取消
+          type: 'warning'
+        }).then(() => {
+            orderListExport(this.filterModel).then(response => {
+                this.$message({
+                    message: response.data,
+                    type: 'success'
+                })
+            }).catch(err => {
+                this.$message({
+                    message: err,
+                    type: 'error'
+                })
+            })
+        })
+      },
+      handleExportPDF () {
+        if (this.multipleSelection.length === 0) {
+          this.$message({
+            message: this.$t('shop.selectOrderExportNotice'), // 请选择一条订单导出
+            type: 'error'
+          })
+          return false
+        }
+  
+        // 提取订单ID
+        let orderSnList = this.multipleSelection.map((item) => item.SN.value || '')
+        // 去重
+        let orderSnSet = Array.from(new Set(orderSnList))
+        if (orderSnSet.length !== 1) {
+          this.$message({
+            message: this.$t('shop.pdfOnlyOneOrderExported'), // 每次只能导出一条订单
+            type: 'error'
+          })
+          return false
+        }
+  
+        this.$confirm(this.$t('financial.exportNotice'), this.$t('common.hint'), { // `确定要导出当前数据吗?`, '提示'
+          confirmButtonText: this.$t('common.confirm'), // 确定
+          cancelButtonText: this.$t('common.cancel'), // 取消
+          type: 'info'
+        }).then(() => {
+          // 导出时只需要订单ID即可
+          let orderSn = orderSnSet[0]
+          orderListExportPdf(orderSn).then(response => {
+            this.$message({
+              message: response.data,
+              type: 'success'
+            })
+          }).catch(err => {
+            this.$message({
+                message: response,
+                type: 'error'
+            })
+          })
+        })
+      },
+      handleEdit () {
+        // 进入修改订单页面
+      },
+      handleDel (row) {
+        let orderSn = row.SN.value // order订单表的编号
+        let msg = this.$t('shop.sureDeleteOrder')
+        this.$confirm(`${msg}${orderSn}`, this.$t('common.hint'), {
+          confirmButtonText: this.$t('common.confirm'),
+          cancelButtonText: this.$t('common.cancel'),
+          type: 'warning'
+        }).then(() => {
+          // 删除订单
+          let postData = {
+            orderSn
+          }
+          deleteOrder(postData).then(response => {
+            this.$message({
+              message: response.data,
+              type: 'success'
+            })
+            this.submitButtonStat = false
+            this.$router.go(0)
+          }).catch(err => {
+            this.submitButtonStat = false
+            this.$message({
+              message: err,
+              type: 'error'
+            })
+          })
+        })
+      },
+    }
+  }
+  </script>
+  
+  <style scoped>
+
+  
+
+  </style>
+