Jelajahi Sumber

订单列表修改

kevin_zhangl 3 tahun lalu
induk
melakukan
4c69609f64
4 mengubah file dengan 33 tambahan dan 434 penghapusan
  1. 9 0
      src/api/shop.js
  2. 13 38
      src/views/shop/dec-order-list.vue
  3. 0 380
      src/views/shop/index.vue
  4. 11 16
      src/views/shop/order-list.vue

+ 9 - 0
src/api/shop.js

@@ -27,6 +27,15 @@ export function fetchDecOrderList(query) {
   })
 }
 
+// 下载报单PDF
+export function downloadDecOrder(orderSn) {
+  return request({
+    url: `/v1/shop/dec-order-export/${orderSn}`,
+    method: 'get',
+    params: { }
+  })
+}
+
 // 订单列表
 export function fetchOrderList(query) {
   return request({

+ 13 - 38
src/views/shop/dec-order-list.vue

@@ -9,19 +9,16 @@
       highlight-current-row
       style="width: 100%;"
     >
-      <el-table-column width="120px" align="center" :label="$t('shop.productCode')" prop="SKU_CODE">
+      <el-table-column width="130px" align="center" :label="$t('shop.productCode')" prop="SKU_CODE">
         <template slot-scope="{row}">
           <span>{{ row.SKU_CODE }}</span>
         </template>
       </el-table-column>
-      <el-table-column width="130px" align="center" :label="$t('shop.productName')" prop="GOODS_TITLE">
+      <el-table-column width="250px" align="center" :label="$t('shop.productName')" prop="GOODS_TITLE">
         <template slot-scope="{row}">
-          <span>{{ row.GOODS_TITLE }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column width="130px" align="center" :label="$t('shop.orderType')" prop="ORDER_TYPE">
-        <template slot-scope="{row}">
-          <span>{{ row.ORDER_TYPE }}</span>
+          <span style="height: auto; display:-webkit-box; overflow: hidden; text-overflow: ellipsis; -webkit-box-orient:vertical; -webkit-line-clamp:1;">
+						{{ row.GOODS_TITLE }}
+					</span>
         </template>
       </el-table-column>
       <el-table-column width="120px" align="center" :label="$t('shop.productPrice')" prop="REAL_PRICE">
@@ -41,7 +38,7 @@
       </el-table-column>
       <el-table-column width="80px" align="center" :label="$t('shop.taxRate')" prop="TAX_RATE">
         <template slot-scope="{row}">
-          <span>{{ row.TAX_RATE }}</span>
+          <span>{{ row.TAX_RATE / 100 }}</span>
         </template>
       </el-table-column>
       <el-table-column width="120px" align="center" :label="$t('shop.taxAmount')" prop="TAX_AMOUNT">
@@ -54,9 +51,9 @@
           <span>{{ row.TOTAL_AMOUNT }}</span>
         </template>
       </el-table-column>
-      <el-table-column width="150px" align="center" :label="$t('shop.orderCode')" prop="SN">
+      <el-table-column width="190px" align="center" :label="$t('shop.orderCode')" prop="ORDER_SN">
         <template slot-scope="{row}">
-          <span>{{ row.SN }}</span>
+          <span>{{ row.ORDER_SN }}</span>
         </template>
       </el-table-column>
       <el-table-column width="120px" align="center" :label="$t('shop.memberCode')" prop="USER_NAME">
@@ -64,21 +61,11 @@
           <span>{{ row.USER_NAME }}</span>
         </template>
       </el-table-column>
-      <el-table-column width="130px" align="center" :label="$t('shop.memberName')" prop="REAL_NAME">
+      <el-table-column width="250px" align="center" :label="$t('shop.memberName')" prop="REAL_NAME">
         <template slot-scope="{row}">
           <span>{{ row.REAL_NAME }}</span>
         </template>
       </el-table-column>
-      <el-table-column width="130px" align="center" :label="$t('shop.recipientName')" prop="CONSIGNEE">
-        <template slot-scope="{row}">
-          <span>{{ row.CONSIGNEE }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column width="130px" align="center" :label="$t('shop.phoneNumber')" prop="MOBILE">
-        <template slot-scope="{row}">
-          <span>{{ row.MOBILE }}</span>
-        </template>
-      </el-table-column>
       <el-table-column width="150px" align="center" :label="$t('shop.shippingAddress')" prop="FULL_ADDRESS">
         <template slot-scope="{row}">
           <span>{{ row.FULL_ADDRESS }}</span>
@@ -89,21 +76,11 @@
           <span>{{ row.CON_USER_NAME }}</span>
         </template>
       </el-table-column>
-      <el-table-column width="130px" align="center" :label="$t('shop.payment')" prop="PAY_TYPE">
-        <template slot-scope="{row}">
-          <span>{{ row.PAY_TYPE }}</span>
-        </template>
-      </el-table-column>
       <el-table-column width="150px" align="center" :label="$t('shop.createdTime')" prop="CREATED_AT">
         <template slot-scope="{row}">
           <span>{{ row.CREATED_AT | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column width="150px" align="center" :label="$t('shop.payTime')" prop="PAY_AT">
-        <template slot-scope="{row}">
-          <span>{{ row.PAY_AT | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
-        </template>
-      </el-table-column>
       <el-table-column class-name="status-col" align="center" width="100" :label="$t('shop.payStatus')" prop="STATUS">
         <template slot-scope="{row}">
           <el-tag :type="row.STATUS | statusFilter">
@@ -111,10 +88,9 @@
           </el-tag>
         </template>
       </el-table-column>
-
       <el-table-column width="100px" align="center" :label="$t('shop.action')" class-name="small-padding fixed-width">
         <template slot-scope="{row}">
-          <el-button type="primary" size="mini" @click="handleDownload(row.SN)">{{ $t('shop.download') }}</el-button>
+          <el-button type="primary" size="mini" @click="handleDownload(row.ORDER_SN)">{{ $t('shop.download') }}</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -124,9 +100,8 @@
 </template>
 
 <script>
-import { fetchDecOrderList, downloadOrder } from '@/api/shop'
+import {fetchDecOrderList, downloadDecOrder} from '@/api/shop'
 import waves from '@/directive/waves'
-import { parseTime } from '@/utils'
 import tool from '@/utils/tool'
 import Pagination from '@/components/Pagination'
 
@@ -136,7 +111,7 @@ export default {
   directives: { waves },
   filters: {
     bvFilter(row) {
-      return tool.calculateTax(row.REAL_PV, row.BUY_NUMS)
+      return tool.calculateBV(row.REAL_PV, row.BUY_NUMS)
     },
     statusFilter(status) {
       const statusMap = {
@@ -177,7 +152,7 @@ export default {
     },
     handleDownload(orderSn) {
       this.downloadLoading = true
-      downloadOrder(orderSn).then(response => {
+			downloadDecOrder(orderSn).then(response => {
         const { fileUrl, targetName } = response.data
         const downloadElement = document.createElement('a')
         downloadElement.target = '_blank'

+ 0 - 380
src/views/shop/index.vue

@@ -1,380 +0,0 @@
-<template>
-    <div class="app-container">
-      <div class="filter-container">
-        <el-input v-model="listQuery.title" :placeholder="$t('table.title')" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />
-        <el-select v-model="listQuery.importance" :placeholder="$t('table.importance')" clearable style="width: 90px" class="filter-item">
-          <el-option v-for="item in importanceOptions" :key="item" :label="item" :value="item" />
-        </el-select>
-        <el-select v-model="listQuery.type" :placeholder="$t('table.type')" clearable class="filter-item" style="width: 130px">
-          <el-option v-for="item in calendarTypeOptions" :key="item.key" :label="item.display_name+'('+item.key+')'" :value="item.key" />
-        </el-select>
-        <el-select v-model="listQuery.sort" style="width: 140px" class="filter-item" @change="handleFilter">
-          <el-option v-for="item in sortOptions" :key="item.key" :label="item.label" :value="item.key" />
-        </el-select>
-        <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">
-          {{ $t('table.search') }}
-        </el-button>
-        <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-edit" @click="handleCreate">
-          {{ $t('table.add') }}
-        </el-button>
-        <el-button v-waves :loading="downloadLoading" class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload">
-          {{ $t('table.export') }}
-        </el-button>
-        <el-checkbox v-model="showReviewer" class="filter-item" style="margin-left:15px;" @change="tableKey=tableKey+1">
-          {{ $t('table.reviewer') }}
-        </el-checkbox>
-      </div>
-  
-      <el-table
-        :key="tableKey"
-        v-loading="listLoading"
-        :data="list"
-        border
-        fit
-        highlight-current-row
-        style="width: 100%;"
-        @sort-change="sortChange"
-      >
-        <el-table-column :label="$t('table.id')" prop="id" sortable="custom" align="center" width="80" :class-name="getSortClass('id')">
-          <template slot-scope="{row}">
-            <span>{{ row.id }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column :label="$t('table.date')" width="150px" align="center">
-          <template slot-scope="{row}">
-            <span>{{ row.timestamp | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column :label="$t('table.title')" min-width="150px">
-          <template slot-scope="{row}">
-            <span class="link-type" @click="handleUpdate(row)">{{ row.title }}</span>
-            <el-tag>{{ row.type | typeFilter }}</el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column :label="$t('table.author')" width="110px" align="center">
-          <template slot-scope="{row}">
-            <span>{{ row.author }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column v-if="showReviewer" :label="$t('table.reviewer')" width="110px" align="center">
-          <template slot-scope="{row}">
-            <span style="color:red;">{{ row.reviewer }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column :label="$t('table.importance')" width="80px">
-          <template slot-scope="{row}">
-            <svg-icon v-for="n in +row.importance" :key="n" icon-class="star" class="meta-item__icon" />
-          </template>
-        </el-table-column>
-        <el-table-column :label="$t('table.readings')" align="center" width="95">
-          <template slot-scope="{row}">
-            <span v-if="row.pageviews" class="link-type" @click="handleFetchPv(row.pageviews)">{{ row.pageviews }}</span>
-            <span v-else>0</span>
-          </template>
-        </el-table-column>
-        <el-table-column :label="$t('table.status')" class-name="status-col" width="100">
-          <template slot-scope="{row}">
-            <el-tag :type="row.status | statusFilter">
-              {{ row.status }}
-            </el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column :label="$t('table.actions')" align="center" width="230" class-name="small-padding fixed-width">
-          <template slot-scope="{row,$index}">
-            <el-button type="primary" size="mini" @click="handleUpdate(row)">
-              {{ $t('table.edit') }}
-            </el-button>
-            <el-button v-if="row.status!='published'" size="mini" type="success" @click="handleModifyStatus(row,'published')">
-              {{ $t('table.publish') }}
-            </el-button>
-            <el-button v-if="row.status!='draft'" size="mini" @click="handleModifyStatus(row,'draft')">
-              {{ $t('table.draft') }}
-            </el-button>
-            <el-button v-if="row.status!='deleted'" size="mini" type="danger" @click="handleDelete(row,$index)">
-              {{ $t('table.delete') }}
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-  
-      <pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
-  
-      <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
-        <el-form ref="dataForm" :rules="rules" :model="temp" label-position="left" label-width="70px" style="width: 400px; margin-left:50px;">
-          <el-form-item :label="$t('table.type')" prop="type">
-            <el-select v-model="temp.type" class="filter-item" placeholder="Please select">
-              <el-option v-for="item in calendarTypeOptions" :key="item.key" :label="item.display_name" :value="item.key" />
-            </el-select>
-          </el-form-item>
-          <el-form-item :label="$t('table.date')" prop="timestamp">
-            <el-date-picker v-model="temp.timestamp" type="datetime" placeholder="Please pick a date" />
-          </el-form-item>
-          <el-form-item :label="$t('table.title')" prop="title">
-            <el-input v-model="temp.title" />
-          </el-form-item>
-          <el-form-item :label="$t('table.status')">
-            <el-select v-model="temp.status" class="filter-item" placeholder="Please select">
-              <el-option v-for="item in statusOptions" :key="item" :label="item" :value="item" />
-            </el-select>
-          </el-form-item>
-          <el-form-item :label="$t('table.importance')">
-            <el-rate v-model="temp.importance" :colors="['#99A9BF', '#F7BA2A', '#FF9900']" :max="3" style="margin-top:8px;" />
-          </el-form-item>
-          <el-form-item :label="$t('table.remark')">
-            <el-input v-model="temp.remark" :autosize="{ minRows: 2, maxRows: 4}" type="textarea" placeholder="Please input" />
-          </el-form-item>
-        </el-form>
-        <div slot="footer" class="dialog-footer">
-          <el-button @click="dialogFormVisible = false">
-            {{ $t('table.cancel') }}
-          </el-button>
-          <el-button type="primary" @click="dialogStatus==='create'?createData():updateData()">
-            {{ $t('table.confirm') }}
-          </el-button>
-        </div>
-      </el-dialog>
-  
-      <el-dialog :visible.sync="dialogPvVisible" title="Reading statistics">
-        <el-table :data="pvData" border fit highlight-current-row style="width: 100%">
-          <el-table-column prop="key" label="Channel" />
-          <el-table-column prop="pv" label="Pv" />
-        </el-table>
-        <span slot="footer" class="dialog-footer">
-          <el-button type="primary" @click="dialogPvVisible = false">{{ $t('table.confirm') }}</el-button>
-        </span>
-      </el-dialog>
-    </div>
-  </template>
-  
-  <script>
-  import { fetchList, fetchPv, createArticle, updateArticle } from '@/api/article'
-  import waves from '@/directive/waves' // waves directive
-  import { parseTime } from '@/utils'
-  import Pagination from '@/components/Pagination' // secondary package based on el-pagination
-  
-  const calendarTypeOptions = [
-    { key: 'CN', display_name: 'China' },
-    { key: 'US', display_name: 'USA' },
-    { key: 'JP', display_name: 'Japan' },
-    { key: 'EU', display_name: 'Eurozone' }
-  ]
-  
-  // arr to obj, such as { CN : "China", US : "USA" }
-  const calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => {
-    acc[cur.key] = cur.display_name
-    return acc
-  }, {})
-  
-  export default {
-    name: 'IndexShop',
-    components: { Pagination },
-    directives: { waves },
-    filters: {
-      statusFilter(status) {
-        const statusMap = {
-          published: 'success',
-          draft: 'info',
-          deleted: 'danger'
-        }
-        return statusMap[status]
-      },
-      typeFilter(type) {
-        return calendarTypeKeyValue[type]
-      }
-    },
-    data() {
-      return {
-        tableKey: 0,
-        list: null,
-        total: 0,
-        listLoading: true,
-        listQuery: {
-          page: 1,
-          limit: 20,
-          importance: undefined,
-          title: undefined,
-          type: undefined,
-          sort: '+id'
-        },
-        importanceOptions: [1, 2, 3],
-        calendarTypeOptions,
-        sortOptions: [{ label: 'ID Ascending', key: '+id' }, { label: 'ID Descending', key: '-id' }],
-        statusOptions: ['published', 'draft', 'deleted'],
-        showReviewer: false,
-        temp: {
-          id: undefined,
-          importance: 1,
-          remark: '',
-          timestamp: new Date(),
-          title: '',
-          type: '',
-          status: 'published'
-        },
-        dialogFormVisible: false,
-        dialogStatus: '',
-        textMap: {
-          update: 'Edit',
-          create: 'Create'
-        },
-        dialogPvVisible: false,
-        pvData: [],
-        rules: {
-          type: [{ required: true, message: 'type is required', trigger: 'change' }],
-          timestamp: [{ type: 'date', required: true, message: 'timestamp is required', trigger: 'change' }],
-          title: [{ required: true, message: 'title is required', trigger: 'blur' }]
-        },
-        downloadLoading: false
-      }
-    },
-    created() {
-      this.getList()
-    },
-    methods: {
-      getList() {
-        this.listLoading = true
-        fetchList(this.listQuery).then(response => {
-          this.list = response.data.items
-          this.total = response.data.total
-  
-          // Just to simulate the time of the request
-          setTimeout(() => {
-            this.listLoading = false
-          }, 1.5 * 1000)
-        })
-      },
-      handleFilter() {
-        this.listQuery.page = 1
-        this.getList()
-      },
-      handleModifyStatus(row, status) {
-        this.$message({
-          message: '操作成功',
-          type: 'success'
-        })
-        row.status = status
-      },
-      sortChange(data) {
-        const { prop, order } = data
-        if (prop === 'id') {
-          this.sortByID(order)
-        }
-      },
-      sortByID(order) {
-        if (order === 'ascending') {
-          this.listQuery.sort = '+id'
-        } else {
-          this.listQuery.sort = '-id'
-        }
-        this.handleFilter()
-      },
-      resetTemp() {
-        this.temp = {
-          id: undefined,
-          importance: 1,
-          remark: '',
-          timestamp: new Date(),
-          title: '',
-          status: 'published',
-          type: ''
-        }
-      },
-      handleCreate() {
-        this.resetTemp()
-        this.dialogStatus = 'create'
-        this.dialogFormVisible = true
-        this.$nextTick(() => {
-          this.$refs['dataForm'].clearValidate()
-        })
-      },
-      createData() {
-        this.$refs['dataForm'].validate((valid) => {
-          if (valid) {
-            this.temp.id = parseInt(Math.random() * 100) + 1024 // mock a id
-            this.temp.author = 'vue-element-admin'
-            createArticle(this.temp).then(() => {
-              this.list.unshift(this.temp)
-              this.dialogFormVisible = false
-              this.$notify({
-                title: '成功',
-                message: '创建成功',
-                type: 'success',
-                duration: 2000
-              })
-            })
-          }
-        })
-      },
-      handleUpdate(row) {
-        this.temp = Object.assign({}, row) // copy obj
-        this.temp.timestamp = new Date(this.temp.timestamp)
-        this.dialogStatus = 'update'
-        this.dialogFormVisible = true
-        this.$nextTick(() => {
-          this.$refs['dataForm'].clearValidate()
-        })
-      },
-      updateData() {
-        this.$refs['dataForm'].validate((valid) => {
-          if (valid) {
-            const tempData = Object.assign({}, this.temp)
-            tempData.timestamp = +new Date(tempData.timestamp) // change Thu Nov 30 2017 16:41:05 GMT+0800 (CST) to 1512031311464
-            updateArticle(tempData).then(() => {
-              const index = this.list.findIndex(v => v.id === this.temp.id)
-              this.list.splice(index, 1, this.temp)
-              this.dialogFormVisible = false
-              this.$notify({
-                title: '成功',
-                message: '更新成功',
-                type: 'success',
-                duration: 2000
-              })
-            })
-          }
-        })
-      },
-      handleDelete(row, index) {
-        this.$notify({
-          title: '成功',
-          message: '删除成功',
-          type: 'success',
-          duration: 2000
-        })
-        this.list.splice(index, 1)
-      },
-      handleFetchPv(pv) {
-        fetchPv(pv).then(response => {
-          this.pvData = response.data.pvData
-          this.dialogPvVisible = true
-        })
-      },
-      handleDownload() {
-        this.downloadLoading = true
-        import('@/vendor/Export2Excel').then(excel => {
-          const tHeader = ['timestamp', 'title', 'type', 'importance', 'status']
-          const filterVal = ['timestamp', 'title', 'type', 'importance', 'status']
-          const data = this.formatJson(filterVal)
-          excel.export_json_to_excel({
-            header: tHeader,
-            data,
-            filename: 'table-list'
-          })
-          this.downloadLoading = false
-        })
-      },
-      formatJson(filterVal) {
-        return this.list.map(v => filterVal.map(j => {
-          if (j === 'timestamp') {
-            return parseTime(v[j])
-          } else {
-            return v[j]
-          }
-        }))
-      },
-      getSortClass: function(key) {
-        const sort = this.listQuery.sort
-        return sort === `+${key}` ? 'ascending' : 'descending'
-      }
-    }
-  }
-  </script>
-  

+ 11 - 16
src/views/shop/order-list.vue

@@ -10,14 +10,16 @@
       style="width: 100%;"
       :span-method="objectSpanMethod"
     >
-      <el-table-column width="120px" align="center" :label="$t('shop.productCode')" prop="SKU_CODE">
+      <el-table-column width="130px" align="center" :label="$t('shop.productCode')" prop="SKU_CODE">
         <template slot-scope="{row}">
           <span>{{ row.SKU_CODE }}</span>
         </template>
       </el-table-column>
       <el-table-column width="250px" align="center" :label="$t('shop.productName')" prop="GOODS_TITLE">
         <template slot-scope="{row}">
-          <span>{{ row.GOODS_TITLE }}</span>
+          <span style="height: auto; display:-webkit-box; overflow: hidden; text-overflow: ellipsis; -webkit-box-orient:vertical; -webkit-line-clamp:1;">
+						{{ row.GOODS_TITLE }}
+					</span>
         </template>
       </el-table-column>
       <el-table-column width="130px" align="center" :label="$t('shop.orderType')" prop="ORDER_TYPE">
@@ -60,12 +62,12 @@
           <span>{{ row.SN }}</span>
         </template>
       </el-table-column>
-      <el-table-column width="120px" align="center" :label="$t('shop.memberCode')" prop="USER_NAME">
+      <el-table-column width="230px" align="center" :label="$t('shop.memberCode')" prop="USER_NAME">
         <template slot-scope="{row}">
           <span>{{ row.USER_NAME }}</span>
         </template>
       </el-table-column>
-      <el-table-column width="130px" align="center" :label="$t('shop.memberName')" prop="REAL_NAME">
+      <el-table-column width="230px" align="center" :label="$t('shop.memberName')" prop="REAL_NAME">
         <template slot-scope="{row}">
           <span>{{ row.REAL_NAME }}</span>
         </template>
@@ -120,9 +122,8 @@
 </template>
 
 <script>
-import { fetchOrderList, downloadOrder } from '@/api/shop'
+import {downloadOrder, fetchOrderList} from '@/api/shop'
 import waves from '@/directive/waves'
-import { parseTime } from '@/utils'
 import tool from '@/utils/tool'
 import Pagination from '@/components/Pagination'
 
@@ -162,13 +163,9 @@ export default {
     }
   },
   created() {
-    // 订单列表查询
+    // 列表查询
     this.getList()
   },
-  mounted() {
-    // 第1步,根据表体信息,计算合并单元格的信息
-    // this.computeCell(this.list)
-  },
   methods: {
     getList() {
       this.listLoading = true
@@ -176,11 +173,9 @@ export default {
         this.list = response.data.list
         this.total = parseInt(response.data.totalCount)
         const settingObj = this.list
-        const settingArr = Object.keys(this.list).map(key => {
-          return settingObj[key]
-        })
-
-        this.tableData = settingArr
+				this.tableData = Object.keys(this.list).map(key => {
+					return settingObj[key]
+				})
         this.getSpanArr(this.tableData)
 
         setTimeout(() => {