dct 4 maanden geleden
bovenliggende
commit
28e28f8cf0

+ 4 - 10
config/index.js

@@ -42,24 +42,18 @@ module.exports = {
 
     cssSourceMap: true,
     proxyTable: {
-      '/api/**': {  //使用"/api"来代替"http://f.apiplus.c"
-        target: 'https://potadev.cleartv.cn', //源地址
-        changeOrigin: true,
-        ws: true,
-        pathRewrite: {
-          '^/api': '/' //路径重写
-        }
-      },
       '/tenant': {
       // target: 'https://pdev.cleartv.cn/cticketmember/',
-        target: 'http://114.104.160.233:28002/',
+        // target: 'http://114.104.160.233:28002/',
+        target: 'http://114.104.160.118:18001/',
         // target: 'https://oriented-quail-refined.ngrok-free.app/',
         changeOrigin: true,
         rewrite: (path) => path.replace(/^\/api/, '')
       },
       '/admin': {
       // target: 'https://pdev.cleartv.cn/cticketmember/',
-        target: 'http://114.104.160.233:28001/',
+        // target: 'http://114.104.160.233:28001/',
+        target: 'http://114.104.160.118:18001/',
         changeOrigin: true,
         rewrite: (path) => path.replace(/^\/api/, '')
       }

+ 21 - 0
src/const.js

@@ -8,6 +8,21 @@ export const orderStatus = {
   'FAILED': { label: '失败', color: 'danger' }
 }
 
+/**
+ * 订单状态枚举(包含中文描述)
+ */
+export const ORDER_STATUS = Object.freeze({
+  WAIT_PAY: Object.freeze({ value: 'WAIT_PAY', label: '待支付', color: 'info' }),
+  WAIT_CONFIRM: Object.freeze({ value: 'WAIT_CONFIRM', label: '待确认', color: 'info' }), // 自营:用户已支付但未发送线下
+  WAIT_USE: Object.freeze({ value: 'WAIT_USE', label: '待使用', color: 'info' }),
+  PART_USE: Object.freeze({ value: 'PART_USE', label: '部分使用', color: 'success' }),
+  REFUNDING: Object.freeze({ value: 'REFUNDING', label: '取消中', color: 'danger' }), // 自营订单取消流程中
+  CANCELED: Object.freeze({ value: 'CANCELED', label: '已取消', color: 'danger' }),
+  PART_CANCEL: Object.freeze({ value: 'PART_CANCEL', label: '部分取消', color: 'danger' }),
+  COMPLETE: Object.freeze({ value: 'COMPLETE', label: '已完成', color: 'success' }),
+  CLOSED: Object.freeze({ value: 'CLOSED', label: '已关闭', color: 'danger' })
+})
+
 export const allStatus = {
   'WAIT_USE': {label: '未检票', color: 'info'},
   'PART_USE': {label: '部分检票', color: 'warning'},
@@ -76,6 +91,12 @@ export const orderCategories = [
   }
 ]
 
+export const CategoryDict = {
+  'ticket': '景区门票',
+  'batch': '场次售票',
+  'member': '年卡次卡'
+}
+
 export const ticketStatusDic = [
   {
     value: 'WAIT_USE',

+ 2 - 1
src/store/modules/user.js

@@ -50,7 +50,8 @@ const user = {
           // 设置用户名
           commit('SET_NAME', info.loginName)
           // 设置菜单
-          commit('SET_MENU_LIST', ['all'] || res.data.resourceList)
+          // commit('SET_MENU_LIST', ['all'] || res.data.resourceList)
+          commit('SET_MENU_LIST', res.data.resourceList)
           // 设置按钮权限
           // commit('SET_PERMISSIONLIST', res.data.roleList)
           commit('SET_PERMISSIONLIST', [])

+ 5 - 0
src/utils/index.js

@@ -1,4 +1,5 @@
 import CryptoJS from 'crypto-js'
+import { ORDER_STATUS } from '@/const'
 
 const payStatus = {
   WAIT_PAY: {
@@ -31,6 +32,10 @@ export function getPayStatus (str, attr = 'label') {
   return payStatus[str] ? payStatus[str][attr] : ''
 }
 
+export function getOrderStatus (str, attr = 'label') {
+  return ORDER_STATUS[str] ? ORDER_STATUS[str][attr] : ''
+}
+
 export function parseTime (time, cFormat) {
   if (arguments.length === 0) {
     return null

+ 8 - 3
src/views/goodsCenter/priceList/EditDialog.vue

@@ -18,7 +18,7 @@
           <el-option
             v-for="item in ticketTypeList"
             :key="item.id"
-            :label="item.name"
+            :label="`${item.ticketTypeId}-${item.name}-${CategoryDict[item.category] || ''}`"
             :value="item.ticketTypeId"></el-option>
         </el-select>
       </el-form-item>
@@ -111,7 +111,7 @@
           :precision="0"></el-input-number>
         <el-tooltip
           effect="dark"
-          content="0代表不限库存"
+          :content="stockContent"
           placement="top"
         >
           <i class="el-icon-info"></i>
@@ -222,6 +222,7 @@
 <script>
 import { addOTATicketSale, updateOTATicketSale } from '@/api/otaTicketSale'
 import moment from 'moment'
+import { CategoryDict } from '@/const'
 
 export default {
   props: {
@@ -265,6 +266,7 @@ export default {
   },
   data () {
     return {
+      CategoryDict,
       visible: false,
       selectedBatch: {}, // 节目场次
       performBatchList: [], // 节目场次列表
@@ -298,7 +300,10 @@ export default {
       deletedOption: {
         name: '',
         id: 0
-      }
+      },
+      stockContent: `1.-1代表无限库存
+        2.已消耗库存数为用户历次下单门票张数之和,不包含退票
+        3.修改库存数后,用户历史下单门票张数仍计算在内`
     }
   },
   watch: {

+ 81 - 44
src/views/queryReport/orderList.vue

@@ -6,6 +6,13 @@
         :model="form"
         :inline="true"
         label-width="150px">
+        <el-form-item
+          label="关键字"
+          prop="searchKeywords">
+          <el-input
+            v-model="form.searchKeywords"
+            placeholder="订单号/票号/姓名/电话/证件号"></el-input>
+        </el-form-item>
         <el-form-item
           label="下单起始时间"
           prop="createTimeBegin">
@@ -42,26 +49,11 @@
             placeholder="选择日期时间">
           </el-date-picker>
         </el-form-item>
-        <el-form-item
-          label="订单号"
-          prop="orderNo">
-          <el-input v-model="form.orderNo"></el-input>
-        </el-form-item>
         <el-form-item
           label="合作方订单号"
           prop="partnerOrderNo">
           <el-input v-model="form.partnerOrderNo"></el-input>
         </el-form-item>
-        <el-form-item
-          label="票号"
-          prop="ticketNo">
-          <el-input v-model="form.ticketNo"></el-input>
-        </el-form-item>
-        <el-form-item
-          label="第三方分销商订单号"
-          prop="keyWords7">
-          <el-input v-model="form.keyWords7"></el-input>
-        </el-form-item>
         <el-form-item
           label="分销商名称"
           prop="keyWords9">
@@ -116,21 +108,6 @@
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item
-          label="游客名称"
-          prop="visitorName">
-          <el-input v-model="form.visitorName"></el-input>
-        </el-form-item>
-        <el-form-item
-          label="游客电话"
-          prop="visitorPhone">
-          <el-input v-model="form.visitorPhone"></el-input>
-        </el-form-item>
-        <el-form-item
-          label="游客证件号"
-          prop="visitorIdentify">
-          <el-input v-model="form.visitorIdentify"></el-input>
-        </el-form-item>
         <el-form-item
           label="门票状态"
           prop="ticketStatus">
@@ -156,6 +133,9 @@
         <el-button
           type="primary"
           @click="getOrderList($event,true)">搜索</el-button>
+        <el-button
+          type="primary"
+          @click="reportExport">导出</el-button>
       </div>
     </div>
 
@@ -166,13 +146,16 @@
       <el-table
         :data="tableData"
         stripe
+        border
         row-class-name="is-center"
         v-loading="loading">
         <el-table-column type="expand">
           <template
             slot-scope="scope"
             v-if="scope.row.ticketList && scope.row.ticketList.length > 0">
-            <el-table :data="scope.row.ticketList">
+            <el-table
+              :data="scope.row.ticketList"
+              border>
               <el-table-column
                 min-width="260"
                 prop="ticketInfo"
@@ -180,6 +163,7 @@
                 <template slot-scope="scope">
                   <div class=""><span>票号:</span>{{ scope.row.ticketNo }}</div>
                   <div class=""><span>票种:</span>{{ scope.row.ticketTypeName }}</div>
+                  <div class=""><span>产品ID:</span>{{ scope.row.otaProductId }}</div>
                   <div class=""><span>金额:</span>{{ scope.row.price }}</div>
                   <div class=""><span>状态:</span>
                     <el-tag :type="ticketStatus[scope.row.status]&&ticketStatus[scope.row.status].color">
@@ -251,9 +235,17 @@
         </el-table-column>
         <el-table-column
           prop="partnerOrderNo"
-          min-width="120"
+          min-width="220"
           label="合作方订单号">
         </el-table-column>
+        <el-table-column
+          prop="ticketTypeName"
+          width="120"
+          label="票种">
+          <template slot-scope="scope">
+            {{ getTicketTypeName(scope.row) }}
+          </template>
+        </el-table-column>
         <el-table-column
           prop="buyerName"
           min-width="90"
@@ -282,6 +274,19 @@
             </el-tag>
           </template>
         </el-table-column>
+        <el-table-column
+          prop="status"
+          width="100"
+          label="订单状态">
+          <template slot-scope="scope">
+            <el-tag
+              :type="getOrderStatus(scope.row.status, 'color')"
+              size="normal"
+            >
+              {{ getOrderStatus(scope.row.status) }}
+            </el-tag>
+          </template>
+        </el-table-column>
         <el-table-column
           prop="price"
           width="70"
@@ -328,7 +333,6 @@
           </template>
         </el-table-column> -->
         <el-table-column
-          fixed="right"
           width="80"
           label="操作">
           <template slot-scope="scope">
@@ -343,7 +347,7 @@
               @click="showGuestInfo(scope.row)">游客信息</el-button> -->
             <el-button
               type="text"
-              v-if="scope.row.isSelfOrder === 0"
+              v-if="scope.row.isSelfOrder === 0 && hasPermission('order-cancel')"
               @click="showRefundOrder(scope.row)">退单</el-button>
           </template>
         </el-table-column>
@@ -479,9 +483,9 @@ import ElDialog from '@/components/Dialog'
 import OrderDialog from './orderList/OrderDialog'
 import GuestDialog from './orderList/GuestDialog'
 import TicketInfo from './orderList/TicketInfo'
-import { orderStatus, ticketStatusDic, ticketStatus, IDENTIFY_TYPES } from '@/const'
+import { ORDER_STATUS, ticketStatusDic, ticketStatus, IDENTIFY_TYPES } from '@/const'
 import moment from 'moment'
-import { getPayStatus } from '@/utils'
+import { getPayStatus, getOrderStatus } from '@/utils'
 
 export default {
   name: 'orderList',
@@ -506,6 +510,7 @@ export default {
       totalObj: {},
       type: '', // 操作状态 cancel退订单
       form: {
+        searchKeywords: '', // 关键字搜索
         createTimeBegin: moment().subtract(7, 'days').startOf('day'),
         createTimeEnd: moment().endOf('day'),
         partnerOrderNo: '', // ota订单号
@@ -521,7 +526,7 @@ export default {
         pageNum: 1,
         pageSize: 10
       },
-      orderStatusDic: orderStatus,
+      orderStatusDic: ORDER_STATUS,
       ticketStatusDic,
       ticketStatus,
       loading: false,
@@ -544,10 +549,21 @@ export default {
     otaList () {
       const list = JSON.parse(localStorage.getItem('otaList'))
       return this.projectName === 'YINXIANGMAZU' && !this.queryClear ? list.filter(item => item.otaSourceCode !== 'CLEARWX') : list
+    },
+    permissionList () {
+      return this.$store.state.user.menuList || []
     }
   },
   methods: {
     getPayStatus,
+    getOrderStatus,
+    hasPermission (key) {
+      return !!this.permissionList.some(item => item.code === key)
+    },
+    getTicketTypeName (row) {
+      const ticket = row.ticketList && row.ticketList.length > 0 && row.ticketList[0]
+      return ticket ? ticket.ticketTypeName : ''
+    },
     reset () {
       this.$refs.form.resetFields()
     },
@@ -638,6 +654,7 @@ export default {
         })
 
         cancelOrder({
+          orderId: item.id,
           ticketCancelRequestList: ticketList
         }).then(res => {
           this.loading = false
@@ -652,14 +669,35 @@ export default {
       this.currentItem = item
       this.guestDialogVisible = true
     },
+    reportExport () {
+      this.$confirm(`是否要导出明细数据`, '确认提示', {
+        confirmButtonText: '是',
+        cancelButtonText: '否',
+        type: 'warning'
+      }).then(() => {
+        this.handelExport({
+          ...this.form,
+          export: true,
+          exportDetail: true
+        })
+      }).catch(() => {
+        this.handelExport({
+          ...this.form,
+          export: true,
+          exportDetail: false
+        })
+      })
+    },
     handelExport () {
       this.form.export = true
       getOrderList(this.form).then(res => {
-        this.$notify({
-          title: '提示',
-          message: '导出成功',
-          type: 'success'
-        })
+        this.$confirm('导出成功,是否去下载页', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.$router.push('/queryReport/reportExport')
+        }).catch(() => {})
       }, () => {
         this.$notify.error({
           title: '提示',
@@ -672,6 +710,5 @@ export default {
 }
 </script>
 
-<style scoped>
-
+<style lang="scss" scoped>
 </style>

+ 4 - 0
src/views/queryReport/reportExport.vue

@@ -82,6 +82,10 @@
         stripe
         row-class-name="is-center"
         v-loading="loading">
+        <el-table-column
+          prop="fileName"
+          label="文件名称">
+        </el-table-column>
         <el-table-column
           prop="type"
           label="导出类型">

+ 2 - 2
src/views/systemSetting/role/EditDialog.vue

@@ -119,7 +119,7 @@ export default {
       this.$refs.form.resetFields()
     },
     submit () {
-      if (this.resourceIdList.length === 0) {
+      if (this.resourceIdList.length === 0 && this.selectPermission.length === 0) {
         this.$message.error('请至少选择一个权限')
         return
       }
@@ -133,7 +133,7 @@ export default {
       })
     },
     editRole () {
-      this.form.resourceIdList = this.resourceIdList
+      this.form.resourceIdList = this.selectPermission || []
 
       editRole(this.form).then(res => {
         this.$message.success('添加成功')