From c6ac7827159e71f6906a42ceb29a4f83a2f239f6 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期五, 21 二月 2025 14:12:38 +0800
Subject: [PATCH] ll

---
 admin/src/views/combo/record.vue                 |  400 +++++++++++-------------------
 admin/src/views/combo/components/SaleDetail.vue  |  138 ++++++++++
 admin/src/views/combo/components/OrderDetail.vue |  140 ++++++++--
 admin/src/views/combo/order.vue                  |   46 ++
 admin/src/api/business/combo.js                  |   34 ++
 5 files changed, 458 insertions(+), 300 deletions(-)

diff --git a/admin/src/api/business/combo.js b/admin/src/api/business/combo.js
index 6a6d329..ed20247 100644
--- a/admin/src/api/business/combo.js
+++ b/admin/src/api/business/combo.js
@@ -34,7 +34,7 @@
 }
 
 export function comboReDetailPost(params) {
-  return request.get('/business/goodsorder/getGoodsorderCanBanlanceDTO', {params})
+  return request.get('/business/goodsorder/getGoodsorderCanBanlanceDTO', { params })
 }
 export function comboOrderRefundPost(data) {
   return request.post('/business/goodsorder/backGoodsorder', data, {
@@ -42,7 +42,7 @@
   })
 }
 export function comboOrderDetailPost(params) {
-  return request.get('/business/goodsorder/discountOrderDetail', {params})
+  return request.get('/business/goodsorder/discountOrderDetail', { params })
 }
 
 export function comboListOrderEx(data) {
@@ -50,4 +50,34 @@
     trim: true,
     download: true
   })
+}
+
+export function comboSalePage(data) {
+  return request.post('/business/discountMember/page', data, {
+    trim: true
+  })
+}
+export function comboSaleEx(data) {
+  return request.post('/business/discountMember/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
+export function comboSaleAdjust(data) {
+  return request.post('/business/discountMember/adjust', data, {
+    trim: true
+  })
+}
+export function comboSaleCancel(data) {
+  return request.post('/business/discountMember/cancel', data, {
+    trim: true
+  })
+}
+export function comboSalerDetailPost(id) {
+  return request.get('/business/discountMember/' + id)
+}
+export function discountLogLog(data) {
+  return request.post('/business/discountLog/page', data, {
+    trim: true
+  })
 }
\ No newline at end of file
diff --git a/admin/src/views/combo/components/OrderDetail.vue b/admin/src/views/combo/components/OrderDetail.vue
index 8768d44..075ca64 100644
--- a/admin/src/views/combo/components/OrderDetail.vue
+++ b/admin/src/views/combo/components/OrderDetail.vue
@@ -1,45 +1,95 @@
 <template>
-  <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking">
-    <div class="title">鏀粯鏄庣粏</div>
-    <el-table :data="list" stripe border>
-      <el-table-column prop="id" label="璁㈠崟缂栧彿" show-overflow-tooltip align="center"></el-table-column>
-      <el-table-column prop="onlineorderId" label="浜ゆ槗鍗曞彿" show-overflow-tooltip align="center"></el-table-column>
-      <el-table-column prop="refundType" label="浜ゆ槗绫诲瀷" width="100px" align="center">
+  <GlobalWindow :title="title" width="1000px" :visible.sync="visible" :confirm-working="isWorking">
+    <div class="title">璁㈠崟淇℃伅</div>
+    <div class="info_warp">
+      <div class="item">
+        <div class="la">璁㈠崟缂栧彿锛�</div>
+        <div class="val">{{ info.id }}</div>
+      </div>
+      <div class="item">
+        <div class="la">璁㈠崟鐘舵�侊細</div>
+        <div class="val">{{ info.status == 1 ? '宸叉敮浠�' : '鏈敮浠�' }}</div>
+      </div>
+      <div class="item">
+        <div class="la">涓嬪崟鏃堕棿锛�</div>
+        <div class="val">{{ info.createDate }}</div>
+      </div>
+      <div class="item">
+        <div class="la">鏀粯鏃堕棿锛�</div>
+        <div class="val">{{ info.payDate }}</div>
+      </div>
+      <div class="item">
+        <div class="la">璁㈠崟閲戦锛�</div>
+        <div class="val">{{ info.money }}</div>
+      </div>
+      <div class="item">
+        <div class="la">鏀粯鏂瑰紡锛�</div>
+        <div class="val">{{ info.payWay == 0 ? '寰俊' : '鏀粯瀹�' }}</div>
+      </div>
+      <div class="item">
+        <div class="la">鏀粯鍗曞彿锛�</div>
+        <div class="val">{{ info.onlineOrderid }}</div>
+      </div>
+      <div class="item">
+        <div class="la">瀹屾垚鏃堕棿锛�</div>
+        <div class="val">{{ info.closeDate }}</div>
+      </div>
+      <div class="item">
+        <div class="la">澶囨敞锛�</div>
+        <div class="val">{{ info.closeInfo }}</div>
+      </div>
+    </div>
+    <div class="title">涔板淇℃伅</div>
+    <div class="info_warp">
+      <div class="item">
+        <div class="la">鍛㈢О锛�</div>
+        <div class="val">{{ form.member.name }}</div>
+      </div>
+      <div class="item">
+        <div class="la">鎵嬫満鍙凤細</div>
+        <div class="val">{{ form.member.phone }}</div>
+      </div>
+      <div class="item">
+        <div class="la">openId锛�</div>
+        <div class="val">{{ form.member.openid }}</div>
+      </div>
+    </div>
+    <div class="title">鍟嗗搧淇℃伅</div>
+    <el-table :data="[goods]" stripe border>
+      <el-table-column prop="name" min-width="100px" label="濂楅鍗�" show-overflow-tooltip align="center"></el-table-column>
+      <el-table-column prop="refundType" label="鏈夋晥鏈�" min-width="160px" align="center">
         <template slot-scope="{row}">
-          {{ typeToStr(row.refundType) }}
+          {{ row.startDate }} 鑷� {{ row.endDate }}
         </template>
       </el-table-column>
-      <el-table-column prop="money" label="浜ゆ槗閲戦(鍏�)" width="100px" align="center"></el-table-column>
-      <el-table-column prop="payWay" label="娓犻亾" width="100px" align="center">
+      <el-table-column label="鏁伴噺" width="80px" align="center">
         <template slot-scope="{row}">
-          {{ row.payWay==0? '寰俊' : '鏀粯瀹�' }}
+          <span>1</span>
         </template>
       </el-table-column>
-      <el-table-column prop="payDate" label="浜ゆ槗鏃堕棿" width="150px" align="center"></el-table-column>
-
+      <el-table-column prop="price" label="浠锋牸" width="100px" align="center"></el-table-column>
+      <el-table-column prop="payWay" label="鐘舵��" width="100px" align="center">
+        <template slot-scope="{row}">
+          {{ info.status == 1 ? '宸叉敮浠�' : '鏈敮浠�' }}
+        </template>
+      </el-table-column>
     </el-table>
-    <div class="title">楠戣璁板綍</div>
-    <el-table
-      :data="memberRidesList"
-      stripe
-      border
-    >
-      <el-table-column prop="openid" label="鐢ㄦ埛" width="250px" show-overflow-tooltip align="center"></el-table-column>
-      <el-table-column prop="bikeCode" label="杞﹁締缂栧彿" width="100px" align="center"></el-table-column>
-      <el-table-column prop="bikeType" label="杞︾被鍨�" width="200px" align="center"></el-table-column>
-      <el-table-column prop="rideTime" label="鍊熷嚭鏃堕暱(鍒�)" width="200px" align="center"></el-table-column>
-      <el-table-column prop="duration" label="璁¤垂鏃堕暱(鍒�)" width="200px" align="center"></el-table-column>
-      <el-table-column prop="bikeType" label="杞︾被鍨�" width="150px" align="center"></el-table-column>
-      <el-table-column prop="rentDate" label="鍊熷嚭鏃堕棿" width="150px" align="center"></el-table-column>
-      <el-table-column prop="backDate" label="杩樿溅鏃堕棿" width="150px" align="center"></el-table-column>
-      <el-table-column prop="closeStatus" fixed="right" label="缁撶畻鐘舵��" width="100px" align="center">
-        <template slot-scope="{row}">
-          {{ row.closeStatus == 0 ? '鏈粨绠�' : '宸茬粨绠�' }}
+    <div v-if="form.refundList && form.refundList.length > 0" class="title">閫�娆句俊鎭�</div>
+    <el-table v-if="form.refundList && form.refundList.length > 0" :data="form.refundList" stripe border>
+      <el-table-column prop="createDate" label="閫�娆炬椂闂�" min-width="180px" show-overflow-tooltip align="center"></el-table-column>
+      <el-table-column prop="money" label="閫�娆鹃噾棰�" min-width="100px" align="center"></el-table-column>
+      <el-table-column label="鐘舵��" min-width="100px" align="center">
+        <template v-slot="{row}">
+          <span v-if="row.status == 0">棰勯��娆�</span>
+          <span v-if="row.status == 1">閫�娆惧け璐�</span>
+          <span v-if="row.status == 2">閫�娆惧畬鎴�</span>
         </template>
       </el-table-column>
+      <el-table-column prop="reason" label="閫�娆惧娉�" min-width="100px" align="center"></el-table-column>
+      <el-table-column prop="creatorName" label="鎿嶄綔浜�" min-width="100px" align="center"></el-table-column>
     </el-table>
     <div slot="footer">
-      <el-button @click="visible=false">杩斿洖</el-button>
+      <el-button @click="visible = false">杩斿洖</el-button>
     </div>
   </GlobalWindow>
 </template>
@@ -52,12 +102,14 @@
   name: 'OperaSitesWindow',
   extends: BaseOpera,
   components: { GlobalWindow },
-  data () {
+  data() {
     return {
       // 琛ㄥ崟鏁版嵁
       form: {
-        goodsorderId: ''
+        member: {}
       },
+      info: {},
+      goods: {},
       list: [],
       memberRidesList: [],
       // 0缁撶畻閫�娆� 1寮哄埗缁撶畻閫�娆� 2缁撶畻鍚庨��娆� [99: 铏氭嫙type 鏀粯鎶奸噾]
@@ -78,7 +130,11 @@
       this.title = title
       this.visible = true
       // 鏂板缓
+      console.log('target', target)
+
       this.form = target
+      this.info = target.goodsOrder
+      this.goods = target.discountMember
       this.$nextTick(() => {
         this.list = target.payOrderDTOList
         this.memberRidesList = target.memberRidesList
@@ -86,7 +142,7 @@
       })
     },
     typeToStr(type) {
-      let temp = this.type.find(item => item.id == type )
+      let temp = this.type.find(item => item.id == type)
       return temp ? temp.label : '-'
     }
   },
@@ -94,7 +150,23 @@
 }
 </script>
 
-<style scoped>
+<style scoped lang="scss">
+.info_warp {
+  display: flex;
+  flex-wrap: wrap;
+  font-size: 14px;
+
+  .item {
+    display: flex;
+    width: 33.3%;
+    margin-bottom: 6px;
+
+    .val {
+      color: #666666;
+    }
+  }
+}
+
 .title {
   font-size: 18px;
   font-weight: 600;
diff --git a/admin/src/views/combo/components/SaleDetail.vue b/admin/src/views/combo/components/SaleDetail.vue
new file mode 100644
index 0000000..7d1dd41
--- /dev/null
+++ b/admin/src/views/combo/components/SaleDetail.vue
@@ -0,0 +1,138 @@
+<template>
+  <GlobalWindow title="濂楅鍗¤鎯�" :visible.sync="isShowModal" width="1000px" @close="close" @confirm="close">
+    <div>
+      <div class="modal_title">濂楅鍚嶇О锛歿{ detail.name }}</div>
+      <div class="place">
+        <span>濂楅鍙凤細{{ detail.code }}</span>
+        <span v-if="detail.useType == 1">鏈夋晥鏈燂細{{ detail.useDays }}澶�</span>
+        <span v-if="detail.useType == 0">鏈夋晥鏈燂細{{ detail.useStartDate }}鑷硔{ detail.useEndDate }}</span>
+        <span v-if="detail.useType == 2">鏈夋晥鏈燂細{{ detail.useStartDate }}鑷硔{ detail.useEndDate }}</span>
+      </div>
+      <div class="df_ac">
+        <el-tabs style="flex: 1;" v-model="activeTab" @tab-click="handleClick">
+          <el-tab-pane label="濂楅浣跨敤鏄庣粏" name="0" />
+          <el-tab-pane label="濂楅鎿嶄綔璁板綍" name="2" />
+        </el-tabs>
+        <div style="border-bottom: 2px solid #e5e7ec; margin-top: 1px;">{{ activeTab == 0 ? '浣跨敤鎯呭喌' : '鎿嶄綔鎯呭喌' }}锛歿{ pagination.total }}娆�</div>
+      </div>
+      <el-table v-if="activeTab == 0" v-loading="loading" :data="list" stripe border>
+        <el-table-column prop="createDate" align="center" label="浣跨敤鏃堕棿" min-width="100" show-overflow-tooltip />
+        <el-table-column prop="discountMemberId" align="center" label="鍏宠仈璁㈠崟" min-width="120" show-overflow-tooltip />
+        <el-table-column prop="" align="center" label="楠戣溅鏃堕暱" min-width="80" show-overflow-tooltip>
+          <template v-slot="{ row }">
+            {{ row.rideTime }}鍒嗛挓
+          </template>
+        </el-table-column>
+        <el-table-column prop="ridePrice" align="center" label="鎶垫墸閲戦" min-width="100" show-overflow-tooltip />
+      </el-table>
+      <el-table v-if="activeTab == 2" v-loading="loading" :data="list" stripe border>
+        <el-table-column prop="createDate" align="center" label="鎿嶄綔鏃堕棿" min-width="100" show-overflow-tooltip />
+        <el-table-column prop="info" align="center" label="鎿嶄綔绫诲瀷" min-width="100" show-overflow-tooltip>
+          <template v-slot="{ row }">
+           <span v-if="row.type == 0">鐢ㄦ埛楠戣浣跨敤</span>
+           <span v-if="row.type == 1">骞冲彴浣滃簾</span>
+           <span v-if="row.type == 2">骞冲彴璋冩暣</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="editInfo" align="center" label="鎿嶄綔澶囨敞" min-width="100" show-overflow-tooltip />
+        <el-table-column prop="creatorName" align="center" label="鎿嶄綔浜�" min-width="100" show-overflow-tooltip />
+      </el-table>
+      <div class="table_btns">
+        <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
+      </div>
+    </div>
+  </GlobalWindow>
+</template>
+<script>
+import { comboSalerDetailPost, discountLogLog } from '@/api/business/combo.js'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import BasePageTemp from '@/components/base/BasePageTemp'
+export default {
+  name: 'ComboDetail',
+  extends: BasePageTemp,
+  components: {
+    GlobalWindow
+  },
+  data() {
+    return {
+      isShowModal: false,
+      activeTab: '0',
+      detail: {},
+      pagination: {
+        page: 1,
+        rows: 10
+      },
+      totalCount: 0,
+      list: [],
+      loading: false
+    }
+  },
+  created() {
+    // this.detail = this.$route.query
+    // this.comboDetail()
+  },
+  methods: {
+    getDetail(row) {
+      comboSalerDetailPost(row.id).then(res => {
+        this.detail = res
+        this.getList()
+      }, () => {
+
+      })
+    },
+    handleClick(val) {
+      this.getList()
+    },
+    getList(page) {
+      const { pagination, activeTab, detail } = this
+      this.loading = true
+      if (page) { pagination.page = page }
+      discountLogLog({
+        model: {
+          type: activeTab,
+          discountMemberId: detail.id
+        },
+        capacity: pagination.pageSize,
+        page: pagination.page,
+      }).then(res => {
+        this.loading = false
+        this.list = res.records || []
+        this.pagination.total = res.total || 0
+      }, () => {
+        this.loading = false
+      })
+    },
+    close() {
+      this.isShowModal = false
+      this.$emit('close')
+    },
+    currentPageChange(val) {
+      this.pagination.page = val
+      this.comboDetail()
+    },
+    pageSizeChange(val) {
+      this.pagination.rows = val
+      this.comboDetail()
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.modal_title {
+  font-size: 18px;
+  font-weight: 500;
+  margin-bottom: 6px;
+}
+
+.place {
+  color: #999999;
+  font-size: 13px;
+  display: flex;
+  margin-bottom: 8px;
+
+  span {
+    margin-right: 60px;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/admin/src/views/combo/order.vue b/admin/src/views/combo/order.vue
index 949d402..e0d03d6 100644
--- a/admin/src/views/combo/order.vue
+++ b/admin/src/views/combo/order.vue
@@ -6,7 +6,7 @@
       <el-button type="primary" @click="handleEx()">瀵煎嚭</el-button>
     </div>
     <el-table v-loading="loading" :data="list" stripe border>
-      <el-table-column prop="code" align="center" label="璁㈠崟缂栧彿" min-width="180" show-overflow-tooltip>
+      <el-table-column prop="code" align="center" label="璁㈠崟缂栧彿" min-width="200" show-overflow-tooltip>
         <template scope="{row}">
           <span @click="handleDetail(row.id)" class="primaryColor pointer">{{ row.code }}</span>
         </template>
@@ -15,7 +15,7 @@
       <el-table-column prop="money" align="center" label="鍚堣(鍏�)" min-width="80" show-overflow-tooltip />
       <el-table-column prop="money" align="center" label="瀹炰粯(鍏�)" min-width="80" show-overflow-tooltip />
       <el-table-column prop="refundMoney" align="center" label="宸查��閲戦(鍏�)" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="memberId" align="center" label="鐢ㄦ埛淇℃伅" min-width="140" show-overflow-tooltip />
+      <el-table-column prop="memberId" align="center" label="鐢ㄦ埛淇℃伅" min-width="200" show-overflow-tooltip />
       <el-table-column prop="payWay" align="center" label="鏀粯鏂瑰紡" min-width="80" show-overflow-tooltip>
         <template v-slot="{ row }">
           <span v-if="row.payWay == 0">寰俊鏀粯</span>
@@ -32,7 +32,8 @@
       <el-table-column label="鎿嶄綔" fixed="right" align="center" min-width="80" show-overflow-tooltip>
         <template v-slot="{ row }">
           <span @click="handleDetail(row.id)" class="primaryColor pointer">鏌ョ湅璇︽儏</span>
-          <span v-if="row.status == 1 && (row.refundMoney < row.money)" @click="handRefund(row.id)" class="primaryColor pointer ml10">閫�娆�</span>
+          <span v-if="row.status == 1 && (row.refundMoney < row.money)" @click="handRefund(row.id)"
+            class="primaryColor pointer ml10">閫�娆�</span>
         </template>
       </el-table-column>
     </el-table>
@@ -73,19 +74,22 @@
             label: '璁㈠崟缂栧彿',
           },
           {
-            filed: 'name',
+            filed: 'discountName',
             type: 'input',
             label: '濂楅鍗�',
             placeholder: '璇疯緭鍏ュ崱鍚嶇О',
           },
           {
-            filed: 'pay',
+            filed: 'payWay',
             type: 'select',
             label: '鏀粯鏂瑰紡',
-            options: []
+            options: [
+              { label: '寰俊', value: 0 },
+              { label: '鏀粯瀹�', value: 1 },
+            ]
           },
           {
-            filed: 'status',
+            filed: 'payStatus',
             type: 'select',
             label: '璁㈠崟鐘舵��',
             options: [
@@ -94,12 +98,12 @@
             ]
           },
           {
-            filed: 'time',
+            filed: 'selDate',
             type: 'date',
             label: '鏀粯鏃堕棿',
           },
           {
-            filed: 'username',
+            filed: 'openid',
             type: 'input',
             label: '鐢ㄦ埛淇℃伅',
           },
@@ -117,22 +121,33 @@
       this.$refs.RefundRef.open(id)
     },
     handleDetail(id) {
-      comboOrderDetailPost({id})
+      comboOrderDetailPost({ id })
         .then(res => {
-          this.$refs.OrderDetailRef.open('璁㈠崟璇︽儏', res)
+          if (res) {
+            this.$refs.OrderDetailRef.open('璁㈠崟璇︽儏', res)
+          }
+
         })
         .catch(err => {
           this.$tip.apiFailed(err)
         })
     },
     handleEx() {
+      const { pagination, filters } = this
       this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
         .then(() => {
           this.loading = true
+          if (filters.selDate && filters.selDate.length > 0) {
+            filters.startDate = filters.selDate[0]
+            filters.endDate = filters.selDate[1]
+          } else {
+            filters.startDate = null
+            filters.endDate = null
+          }
           comboListOrderEx({
             page: 1,
             capacity: 1000000,
-            model: this.filters
+            model: filters
           })
             .then(response => {
               this.download(response)
@@ -155,6 +170,13 @@
       const { pagination, filters } = this
       this.loading = true
       if (page) { pagination.page = page }
+      if (filters.selDate && filters.selDate.length > 0) {
+        filters.startDate = filters.selDate[0]
+        filters.endDate = filters.selDate[1]
+      } else {
+        filters.startDate = null
+        filters.endDate = null
+      }
       comboOrderPost({
         model: {
           ...filters,
diff --git a/admin/src/views/combo/record.vue b/admin/src/views/combo/record.vue
index a30b1b8..8d8b0c7 100644
--- a/admin/src/views/combo/record.vue
+++ b/admin/src/views/combo/record.vue
@@ -2,71 +2,48 @@
   <div class="main_app">
     <Breadcrumb />
     <QueryForm v-model="querys" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clearQueryForm">
-      <template #btns>
-        <el-button v-if="meta.indexOf('MealsUseDetailExport') > -1" type="primary"
-          @click="comboRecordExport">瀵煎嚭</el-button>
-      </template>
-      <template #indate>
-        <el-date-picker v-model="querys.indate" type="datetimerange" range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" class="w400"
-          :picker-options="pickerOptions" />
-      </template>
     </QueryForm>
     <div class="table_btns">
-      <el-button v-preventReClick plain type="primary" @click="handleEx">瀵煎嚭</el-button>
-      <el-button v-preventReClick plain type="danger" @click="openModal('zuofei')">浣滃簾</el-button>
-      <el-button v-preventReClick plain @click="openModal('tiaozheng')">濂楅璋冩暣</el-button>
+      <el-button plain type="primary" @click="handleEx">瀵煎嚭</el-button>
+      <el-button plain type="danger" @click="openModal('zuofei')">浣滃簾</el-button>
+      <el-button plain @click="openModal('tiaozheng')">濂楅璋冩暣</el-button>
     </div>
     <el-table v-loading="loading" :data="list" stripe border @selection-change="handleSelectionChange">
       <el-table-column fixed="left" align="center" type="selection" :selectable="handleDisable" width="55" />
-      <el-table-column align="center" label="濂楅绁ㄥ彿" width="300" show-overflow-tooltip>
+      <el-table-column align="center" label="濂楅绁ㄥ彿" min-width="160" show-overflow-tooltip>
         <template v-slot="scope">
           <span class="primaryColor pointer" @click="comboDetail(scope.row)">{{
-            scope.row.id
-            }}</span>
+            scope.row.code
+          }}</span>
         </template>
       </el-table-column>
-      <el-table-column align="center" label="濂楅绫诲瀷" width="120">
+      <el-table-column align="center" label="濂楅绫诲瀷" min-width="80">
         <template v-slot="scope">
-          <span v-if="scope.row.mealsType === '0'">闂ㄧエ娆″崱</span>
-          <span v-if="scope.row.mealsType === '1'">闂ㄧエ鏈熼檺鍗�</span>
-          <span v-if="scope.row.mealsType === '2'">棰勫畾娆″崱</span>
-          <span v-if="scope.row.mealsType === '3'">璇剧▼棰勭害娆″崱</span>
-          <span v-if="scope.row.mealsType === '4'">璇剧▼鏈熼檺鍗�</span>
+          <span v-if="scope.row.type == '0'">鏈熼檺鍗�</span>
+          <span v-if="scope.row.type == '1'">娆″崱</span>
         </template>
       </el-table-column>
-      <el-table-column align="center" label="濂楅鍚嶇О" show-overflow-tooltip width="160" prop="mealsName" />
-      <el-table-column align="center" label="鐢ㄦ埛淇℃伅" min-width="240" prop="memberInfo" show-overflow-tooltip />
-      <el-table-column align="center" label="浣跨敤娆℃暟" width="80" prop="useCount">
+      <el-table-column align="center" label="濂楅鍚嶇О" show-overflow-tooltip min-width="100" prop="name" />
+      <el-table-column align="center" label="鐢ㄦ埛淇℃伅" min-width="100" prop="openid" show-overflow-tooltip />
+      <el-table-column align="center" label="浣跨敤娆℃暟" min-width="80" prop="useTimes">
+      </el-table-column>
+      <el-table-column align="center" label="鏈夋晥鏃ユ湡" min-width="200" prop="remainCount">
         <template v-slot="scope">
-          <span v-if="scope.row.mealsType === '1'">-</span>
-          <span v-else>{{ scope.row.useCount }}</span>
+          <span>{{ scope.row.useStartDate }}鑷硔{ scope.row.useEndDate }}</span>
         </template>
       </el-table-column>
-      <el-table-column align="center" label="鏈夋晥鏃ユ湡" width="80" prop="remainCount">
+      <el-table-column align="center" label="濂楅鐘舵��" min-width="80">
         <template v-slot="scope">
-          <span v-if="scope.row.mealsType === '1'">-</span>
-          <span v-else>{{ scope.row.remainCount }}</span>
+          <span v-if="scope.row.status == '0'" class="text_success">姝e父</span>
+          <span v-if="scope.row.status == '1'" class="text_warning">浣滃簾</span>
+          <span v-if="scope.row.status == '2'" class="text-danger">寰呮敮浠�</span>
         </template>
       </el-table-column>
-      <el-table-column fixed="right" align="center" label="濂楅鐘舵��" width="80">
-        <template v-slot="scope">
-          <span v-if="scope.row.status === '0'" class="text_success">姝e父</span>
-          <span v-if="scope.row.status === '1'" class="text_warning">鍐荤粨</span>
-          <span v-if="scope.row.status === '2'" class="text-danger">浣滃簾</span>
-          <span v-if="scope.row.status === '3'" class="text-danger">澶辨晥</span>
-        </template>
-      </el-table-column>
-      <el-table-column align="center" label="鏈夋晥鏃ユ湡" width="120" prop="validTime" />
-      <el-table-column align="center" label="鎿嶄綔" fixed="right" width="150">
+      <el-table-column align="center" label="鎿嶄綔" fixed="right" min-width="150">
         <template v-slot="scope">
           <template>
-            <el-button v-if="
-              meta.indexOf('MealsMemberPartRefund') > -1 &&
-              (scope.row.status == '0' || scope.row.status == '1')
-            " type="text" @click="rowClickRefund(scope.row)">閫�娆�</el-button>
-            <el-button v-if="scope.row.status == '0'" type="text"
-              @click="getServiceChargePriceBtn('2', scope.row.id)">鍐荤粨</el-button>
+            <el-button v-if="scope.row.status == '0'" type="text" @click="openCan(scope.row)">浣滃簾</el-button>
+            <span v-else>-</span>
           </template>
         </template>
       </el-table-column>
@@ -78,14 +55,14 @@
     <el-dialog title="濂楅璋冩暣" :visible.sync="isShowAdjust" width="500px">
       <div class="adjust_modal">
         <div style="margin-top: -30px; margin-bottom: 10px;">
-          <el-radio v-model="adjustData.aa" label="1">宸查�夊綋鍓�2鏉℃暟鎹�</el-radio>
+          <el-radio v-model="adjustData.flag" label="0">宸查�墈{ selList.length }}鏉℃暟鎹�</el-radio>
         </div>
         <div style="margin-bottom: 16px;">
-          <el-radio v-model="adjustData.aa" label="1">宸查�夌幇鏈夌瓫閫夋潯浠朵笅鍏ㄩ儴鐨�11鏉℃暟鎹�</el-radio>
+          <el-radio v-model="adjustData.flag" label="1">閫夌幇鏈夌瓫閫夋潯浠朵笅鍏ㄩ儴鐨剓{ pagination.total }}鏉℃暟鎹�</el-radio>
         </div>
         <div class="df_ac mb5">
           <span class="key">鏈夋晥鏈熷鍔狅細</span>
-          <el-input v-model="adjustData.addTime" oninput="value=value.replace(/[^\d]/g,'')" class="flex1 mr10" />
+          <el-input v-model="adjustData.addNum" oninput="value=value.replace(/[^\d]/g,'')" class="flex1 mr10" />
           <span>澶�</span>
         </div>
         <div class="df_ac mb20">
@@ -99,26 +76,43 @@
       </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="isShowAdjust = false">鍙栨秷</el-button>
-        <el-button v-preventReClick type="primary" :loading="subLoading" @click="handleModelEnter">纭畾</el-button>
+        <el-button type="primary" :loading="subLoading" @click="handleModelEnter">纭畾</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog title="濂楅浣滃簾" :visible.sync="isShowCan" width="500px">
+      <div class="adjust_modal" style="margin-top: -30px;">
+        <div class="red" style="font-size: 16px;">纭畾浣滃簾閫変腑濂楅鍚楋紵浣滃簾鍚庯紝濂楅涓嶅彲浣跨敤</div>
+        <div class="df_ac mt10">
+          <el-input type="textarea" v-model="remarkCan" placeholder="璇锋寜瑕佹眰杈撳叆澶囨敞璇存槑锛岄潪蹇呭~" />
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="isShowCan = false">鍙栨秷</el-button>
+        <el-button type="primary" :loading="subLoading" @click="handleCan">纭畾</el-button>
       </span>
     </el-dialog>
 
     <Refund v-if="isShowRefund" ref="RefundRef" @close="isShowRefund = false" @success="refundSuccess" />
     <Detail v-if="isShowDetail" ref="detailRef" />
-    <orderDialog ref="child" @orderSuccess="getList()" />
+    <Detail ref="DetailRef" />
   </div>
 </template>
 
 <script>
-import { pickerOptions } from './components/config'
 import BasePageTemp from '@/components/base/BasePageTemp'
 import Breadcrumb from '@/layouts/Breadcrumb'
-// import Detail from '../comboDetail'
-// import Refund from './refund.vue'
+import Detail from './components/SaleDetail.vue'
+import { Message } from 'element-ui'
+import {
+  comboSalePage,
+  comboSaleEx,
+  comboSaleCancel,
+  comboSaleAdjust,
+} from '@/api/business/combo.js'
 export default {
   name: 'SalesRecord',
   extends: BasePageTemp,
-  components: { Breadcrumb },
+  components: { Breadcrumb, Detail },
   data() {
     return {
       exportLoading: false,
@@ -126,19 +120,19 @@
       isShowRefund: false,
       queryFormConfig: {
         formItems: [{
-          filed: 'id',
+          filed: 'code',
           type: 'input',
           label: '濂楅绁ㄥ彿',
           placeholder: '璇疯緭鍏ュ椁愬彿',
           clearable: true
         }, {
-          filed: 'mealsName',
+          filed: 'name',
           type: 'input',
           label: '濂楅鍚嶇О',
           placeholder: '璇疯緭鍏ュ椁愬悕绉�',
           clearable: true
         }, {
-          filed: 'memberSearchValue',
+          filed: 'openid',
           type: 'input',
           label: '鐢ㄦ埛淇℃伅',
           clearable: true
@@ -150,13 +144,12 @@
           clearable: true,
           options: [
             { value: '0', label: '姝e父' },
-            { value: '1', label: '鍐荤粨' },
-            { value: '2', label: '浣滃簾' },
-            { value: '3', label: '澶辨晥' }]
+            { value: '1', label: '浣滃簾' },
+            // { value: '2', label: '寰呮敮浠�' }
+          ]
         }],
         online: true
       },
-      pickerOptions,
       querys: {
         id: '',
         mealsName: '',
@@ -167,17 +160,21 @@
 
       saleRecordList: [],
       saleRecordTotal: 0,
-      selectSalesList: [],
+      selList: [],
       saleRecordLoading: false,
       subLoading: false,
 
-      isShowModal: false,
+      isShowCan: false,
       ModalTitle: '',
       ModalText: '',
       ModelRemark: '',
+      remarkCan: '',
       // 猬囷笍adjust璋冩暣鐩稿叧
       isShowAdjust: false,
+      isShowCan: false,
+      canList: [],
       adjustData: {
+        flag: 0,
         addNum: '',
         addTime: ''
       },
@@ -187,7 +184,7 @@
   },
   created() {
     // this.meta = this.$route.meta.buttons || []
-    // this.getList(1)
+    this.getList(1)
   },
   methods: {
     rowClickRefund(row) {
@@ -201,84 +198,53 @@
       this.isShowRefund = false
       this.getList()
     },
-    getServiceChargePriceBtn(type, mealsMemberId) {
-      this.serviceChargeId = mealsMemberId
-      getServiceChargePrice({
-        param: {
-          type,
-          mealsMemberId
-        }
-      }).then((res) => {
-        if (res.errorCode === '000000') {
-          this.serviceChargePrice = res.record.price
-          this.openModal('dongjie')
-        }
-      })
+    handleEx() {
+      const { pagination, filters } = this
+      this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+        .then(() => {
+          this.loading = true
+          comboSaleEx({
+            page: 1,
+            capacity: 1000000,
+            model: filters
+          })
+            .then(response => {
+              this.download(response)
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.loading = false
+            })
+        })
         .catch(() => { })
     },
-    handleEx() {
-      const { querys } = this
-      this.exportLoading = true
-      recordExport({
-        param: {
-          ...querys
-        }
-      }).then((res) => {
-        this.exportLoading = false
-        if (res.errorCode === '000000') {
-          const a = document.createElement('a') // 鍒涘缓涓�涓猘鏍囩鍏冪礌
-          a.style.display = 'none' // 璁剧疆鍏冪礌涓嶅彲瑙�
-          a.href = res.record.showUrl // 璁剧疆涓嬭浇鍦板潃
-          document.body.appendChild(a) // 鍔犲叆
-          a.click() // 瑙﹀彂鐐瑰嚮,涓嬭浇
-          document.body.removeChild(a) //
-          this.$message.success('瀵煎嚭鎴愬姛')
-        }
-      })
-        .catch(() => {
-          this.exportLoading = false
-        })
+    openCan(row) {
+      this.isShowCan = true
+      this.canList = [row]
     },
-    handleDisable(row, index) {
-      if (row.status === '2') {
-        return false
-      } else {
-        return true
-      }
+    handleDisable(row) {
+      // return row.status == 0
+      return true
     },
     // 鏌ヨ琛ㄦ牸鏁版嵁
     getList(page) {
-      const { querys, pagination } = this
-      if (page) {
-        pagination.page = page
-        this.pagination.page = Number(page)
-      }
-      if (querys.indate && querys.indate.length > 0) {
-        querys.startTime = querys.indate[0]
-        querys.endTime = querys.indate[1]
-      } else {
-        querys.startTime = null
-        querys.endTime = null
-      }
-      pagination.firstQueryTime = parseTime(new Date())
-      this.saleRecordLoading = true
-      comboSalesRecordPost({
-        pagination, param: {
-          ...querys,
-          venueId: sessionStorage.getItem('venueId')
-        }
+      const { pagination, filters } = this
+      this.loading = true
+      if (page) { pagination.page = page }
+      comboSalePage({
+        model: {
+          ...filters
+        },
+        capacity: pagination.pageSize,
+        page: pagination.page,
       }).then(res => {
-        this.saleRecordLoading = false
-        if (res.errorCode === '000000') {
-          this.saleRecordLoading = false
-          this.saleRecordTotal = res.totalCount
-          this.saleRecordList = res.recordList
-          if (res.totalCount && res.recordList.length === 0 && pagination.page > 1) {
-            this.getList(Math.ceil(res.totalCount / pagination.rows))
-          }
-        }
-      }).catch(() => {
-        this.saleRecordLoading = false
+        this.loading = false
+        this.list = res.records || []
+        this.pagination.total = res.total || 0
+      }, () => {
+        this.loading = false
       })
     },
     clearQueryForm() {
@@ -288,19 +254,11 @@
     },
     // 鎵撳紑modal 鍐荤粨 瑙e喕 浣滃簾
     openModal(type) {
-      const { selectSalesList } = this
+      const { selList } = this
       this.ModelRemark = ''
       this.adjustData.addNum = ''
       this.adjustData.addTime = ''
       switch (type) {
-        case 'dongjie':
-          this.ModalTitle = '濂楅鍐荤粨'
-          this.ModalText = '纭畾鍐荤粨閫変腑濂楅鍚楋紵鍐荤粨鍚庯紝濂楅灏嗘棤娉曚娇鐢�'
-          break
-        case 'jiedong':
-          this.ModalTitle = '濂楅瑙e喕'
-          this.ModalText = '纭畾瑙e喕閫変腑濂楅鍚楋紵瑙e喕鍚庯紝濂楅鍙珛鍗崇敓鏁堜娇鐢�'
-          break
         case 'zuofei':
           this.ModalTitle = '濂楅浣滃簾'
           this.ModalText = '纭畾浣滃簾閫変腑濂楅鍚楋紵浣滃簾鍚庯紝濂楅涓嶅彲浣跨敤'
@@ -311,28 +269,21 @@
         default:
           break
       }
-      if (selectSalesList.length === 0 && type !== 'dongjie') {
-        return this.$message.warning(`璇峰厛閫夋嫨瑕�${this.ModalTitle.slice(2)}鐨勫椁恅)
+      if (selList.length === 0 && type == 'zuofei') {
+        return Message.warning(`璇峰厛閫夋嫨瑕�${this.ModalTitle.slice(2)}鐨勫椁恅)
       }
       if (this.ModalTitle === '濂楅璋冩暣') {
         this.isShowAdjust = true
+        this.adjustData = {
+          flag: '0'
+        }
       } else {
-        this.isShowModal = true
+        this.isShowCan = true
       }
     },
     // 纭畾 鍐荤粨 瑙e喕 浣滃簾
     handleModelEnter() {
-      // if (!this.ModelRemark) {
-      //   this.$message.warning('鎿嶄綔澶囨敞蹇呭~')
-      //   return
-      // }
       switch (this.ModalTitle) {
-        case '濂楅鍐荤粨':
-          this.Freeze()
-          break
-        case '濂楅瑙e喕':
-          this.Unfreeze()
-          break
         case '濂楅浣滃簾':
           this.cancellation()
           break
@@ -343,92 +294,27 @@
           break
       }
     },
-    // 鍐荤粨
-    Freeze() {
-      const that = this
-      const data = {
-        type: '1',
-        handleRemake: this.ModelRemark,
-        isCreateOrder: '1',
-        id: this.serviceChargeId
-      }
-      this.subLoading = true
-      handleComboSalesPost({ param: { ...data } }).then(res => {
-        this.subLoading = false
-        this.isShowModal = false
-        if (res.errorCode === '000000') {
-          const obj = res.record
-          if (obj && obj.price) {
-            obj.goodsInfos = obj.serviceChargeOrderInfo
-            obj.allPrice = obj.price
-            this.$refs.child.continuePay(obj, 'handlingFees')
-          } else {
-            this.$message.success('鍐荤粨鎴愬姛')
-            this.getList()
-          }
-          //
-        } else if (res.errorCode === '200001') {
-          this.$confirm('瀛樺湪鏈鐞嗚鍗�, 鏄惁璺宠浆?', '鎻愮ず', {
-            confirmButtonText: '纭畾',
-            cancelButtonText: '鍙栨秷',
-            type: 'warning',
-            callback: () => { },
-            beforeClose: (action, ctx, close) => {
-              if (action !== 'confirm') {
-                close()
-                return
-              }
-              ctx.confirmButtonLoading = true
-              that.$router.push({ name: 'HandlingFees' })
-            }
-          }).finally(() => {
-            this.subLoading = false
-            this.isShowModal = false
-          })
-        }
-      })
-    },
-    // 瑙e喕
-    async Unfreeze() {
-      const data = {
-        type: '2',
-        handleRemake: this.ModelRemark,
-        id: this.selectSalesList.map(i => i.id).join(',')
-      }
-      this.subLoading = true
-      const res = await handleComboSalesPost({ param: { ...data } }).catch(() => {
-        this.subLoading = false
-        this.isShowModal = false
-      })
-      this.subLoading = false
-      this.isShowModal = false
-      if (res && res.errorCode === '000000') {
-        this.$message.success('瑙e喕鎴愬姛')
-        this.getList()
-      }
-    },
     // 璋冩暣
     async handleAdjust() {
       if (!this.adjustData.addNum && !this.adjustData.addTime) {
-        return this.$message.warning('璇疯緭鍏ヨ璋冩暣鐨勬湁鏁堟湡澶╂暟鎴栬�呬綑閲忔鏁�')
+        return Message.warning('璇疯緭鍏ヨ璋冩暣鐨勬湁鏁堟湡澶╂暟鎴栬�呬綑閲忔鏁�')
       }
       const data = {
-        type: '3',
-        handleRemake: this.ModelRemark,
-        addNum: this.adjustData.addNum || 0,
-        addTime: this.adjustData.addTime || 0,
-        id: this.selectSalesList.map(i => i.id).join(',')
+        info: this.ModelRemark,
+        addDays: this.adjustData.addNum || 0,
+        choseIdList: this.adjustData.flag == 0 ? this.selList.map(i => i.id) : [],
+        ...this.filters
       }
 
       this.subLoading = true
-      const res = await handleComboSalesPost({ param: { ...data } }).catch(() => {
+      const res = await comboSaleAdjust({ ...data }).catch(() => {
         this.subLoading = false
-        this.isShowModal = false
+        this.isShowCan = false
       })
       this.subLoading = false
-      this.isShowModal = false
-      if (res && res.errorCode === '000000') {
-        this.$message.success('濂楅璋冩暣鎴愬姛')
+      this.isShowCan = false
+      if (res) {
+        Message.success('濂楅璋冩暣鎴愬姛')
         this.getList()
         this.isShowAdjust = false
       }
@@ -436,36 +322,46 @@
     // 浣滃簾
     async cancellation() {
       const data = {
-        type: '4',
-        handleRemake: this.ModelRemark,
-        id: this.selectSalesList.map(i => i.id).join(',')
+        handleRemake: this.remarkCan,
+        choseIdList: this.selList.map(i => i.id)
       }
       this.subLoading = true
-      const res = await handleComboSalesPost({ param: { ...data } }).catch(() => {
+      const res = await comboSaleCancel({ ...data }).catch(() => {
         this.subLoading = false
-        this.isShowModal = false
+        this.isShowCan = false
       })
       this.subLoading = false
-      this.isShowModal = false
-      if (res && res.errorCode === '000000') {
-        this.$message.success('浣滃簾鎴愬姛')
+      this.isShowCan = false
+      if (res) {
+        Message.success('浣滃簾鎴愬姛')
+        this.getList()
+      }
+    },
+    async handleCan() {
+      const data = {
+        handleRemake: this.remarkCan,
+        choseIdList: this.canList.map(i => i.id)
+      }
+      this.subLoading = true
+      const res = await comboSaleCancel({ ...data }).catch(() => {
+        this.subLoading = false
+        this.isShowCan = false
+      })
+      this.subLoading = false
+      this.isShowCan = false
+      if (res) {
+        Message.success('浣滃簾鎴愬姛')
         this.getList()
       }
     },
     handleSelectionChange(val) {
-      this.selectSalesList = val
+      this.selList = val
     },
     comboDetail(item) {
-      this.isShowDetail = true
       this.$nextTick(() => {
-        this.$refs.detailRef.isShowModal = true
-        this.$refs.detailRef.comboDetail(item)
+        this.$refs.DetailRef.isShowModal = true
+        this.$refs.DetailRef.getDetail(item)
       })
-
-      // this.$router.push({
-      //   name: 'comboDetail',
-      //   query: item
-      // })
     },
     pageSizeChange(val) {
       this.pagination.rows = val
@@ -484,9 +380,9 @@
       text-align: right;
     }
   }
-  .el-dialog__body{
-    
-  }
+
+  .el-dialog__body {}
+
   .text_warning {
     color: #e89e42;
   }

--
Gitblit v1.9.3