瀏覽代碼

Merge branch 'feature_会员管理' of elab-damai-h5/h5-dm-orderFront into master

周建思 4 周之前
父節點
當前提交
2258e6bbd4

+ 4 - 0
src/api/membership.ts

@@ -23,3 +23,7 @@ export function saveMember(params?: any) {
 export function saveMemberBenefits(params?: any) {
     return request.post({ url: '/membership/saveMemberBenefits', params }, { urlPrefix: '/elab-marketing-content' })
 }
+
+export function queryBalanceRecordPage(params?: any) {
+    return request.post({ url: '/membership/queryBalanceRecordPage', params }, { urlPrefix: '/elab-marketing-content' })
+}

+ 8 - 0
src/api/order.ts

@@ -93,3 +93,11 @@ export function cashPay(params ?: any) {
         urlPrefix: '/elab-marketing-content' // 单独定义的 URL 前缀
     })
 }
+export function calPayAmount(params ?: any) {
+    return request.post({
+        url: '/wx/calPayAmount', // 具体的接口路径
+        params
+    }, {
+        urlPrefix: '/elab-marketing-content' // 单独定义的 URL 前缀
+    })
+}

+ 66 - 0
src/views/membership/user/chargeConsumeRecord.vue

@@ -0,0 +1,66 @@
+<template>
+  <div class="order-console">
+    <el-drawer
+        v-model="showOrderConsole"
+        title="余额变动记录"
+        direction="rtl"
+        size="50%"
+        :before-close="beforeClose"
+    >
+      <el-table class="mt-4" size="large" :data="pager.lists">
+        <el-table-column type="index" width="55"/>
+        <el-table-column label="变动类型" prop="typeDesc" min-width="80"/>
+        <el-table-column label="来源/场景" prop="bizScene" show-tooltip-when-overflow/>
+        <el-table-column label="变动金额(元)" prop="amount" align="right" show-tooltip-when-overflow>
+          <template #default="scope">
+            <span v-if="scope.row.type > 0" style="font-weight: bolder;color:#F56C6C">+{{ formatAmount(scope.row.amount) }}</span>
+            <span v-else style="font-weight: bolder;color:#67C23A">-{{ formatAmount(scope.row.amount) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作时间" prop="eventTime"/>
+      </el-table>
+      <div class="flex justify-end mt-4">
+        <pagination v-model="pager" @change="getLists"/>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ElScrollbar } from 'element-plus'
+import feedback from '@/utils/feedback'
+import {useElabPaging} from "@/hooks/useElabPaging";
+import {queryBalanceRecordPage} from "@/api/membership";
+// const route = useRoute()
+const queryParams = reactive({
+  mobile: ''
+})
+const { pager, getLists, resetPage, resetParams } = useElabPaging({
+  fetchFun: queryBalanceRecordPage,
+  params: queryParams
+})
+const showOrderConsole = ref(false)
+const open = (item: any) => {
+  showOrderConsole.value = true
+  queryParams.userId = item.userId
+  getLists()
+}
+const beforeClose = () => {
+  showOrderConsole.value = false
+}
+
+// 示例:添加千分位分隔符并保留两位小数
+const formatAmount = (amount: string) => {
+  return Number(amount).toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
+}
+
+onMounted(() => {
+  // initData()
+})
+defineExpose({
+  open
+})
+
+</script>
+<style lang="scss" scoped>
+</style>

+ 33 - 8
src/views/membership/user/user.vue

@@ -22,26 +22,40 @@
         <el-table-column type="index" width="55"/>
         <el-table-column label="用户id" prop="userId" min-width="120" show-tooltip-when-overflow/>
         <el-table-column label="手机号" prop="userMobile" min-width="120" show-tooltip-when-overflow/>
-        <el-table-column label="会员名称" prop="membershipName" min-width="80"/>
+        <el-table-column label="会员名称" prop="membershipName" min-width="120">
+          <template #default="scope">
+            <span><img :src="scope.row.membershipIcon" style="width: 20px;display: inline-block;margin-right:3px;"/>{{ scope.row.membershipName }}</span>
+          </template>
+        </el-table-column>
         <el-table-column label="会员编号" prop="membershipNo" min-width="100"/>
-        <el-table-column label="账户余额(元)" prop="accountAmount" min-width="100"/>
+        <el-table-column label="账户余额(元)" prop="accountAmount" align="right" min-width="100">
+          <template #default="scope">
+            <span style="font-weight: bolder;color:#F56C6C">{{ formatAmount(scope.row.accountAmount) }}</span>
+          </template>
+        </el-table-column>
         <el-table-column label="入会时间" prop="time" min-width="120"/>
-<!--        <el-table-column label="操作" min-width="180" fixed="right">-->
-<!--          <template #default="{ row }">-->
-<!--            -->
-<!--          </template>-->
-<!--        </el-table-column>-->
+        <el-table-column label="操作" min-width="180" fixed="right">
+          <template #default="{ row }">
+<!--            <el-button type="primary" link @click="updateBalance(row)">修改余额</el-button>-->
+            <el-button type="primary" link @click="showChargeConsumeRecord(row)">余额变动记录</el-button>
+          </template>
+        </el-table-column>
       </el-table>
       <div class="flex justify-end mt-4">
         <pagination v-model="pager" @change="getLists"/>
       </div>
     </el-card>
   </div>
+  <ChargeConsumeRecord @init="init()" ref="chargeConsumeRecordRef"></ChargeConsumeRecord>
 </template>
 <script lang="ts" setup>
 import { useElabPaging } from '@/hooks/useElabPaging'
 import feedback from '@/utils/feedback'
 import {queryMemberUser} from "@/api/membership";
+import ChargeConsumeRecord from './chargeConsumeRecord.vue'
+
+const router = useRouter()
+const chargeConsumeRecordRef = ref<InstanceType<typeof ChargeConsumeRecord>>()
 
 const queryParams = reactive({
   mobile: ''
@@ -52,7 +66,10 @@ const { pager, getLists, resetPage, resetParams } = useElabPaging({
 })
 const editRef = shallowRef<InstanceType<typeof EditPopup>>()
 const showEdit = ref(false)
-
+// 示例:添加千分位分隔符并保留两位小数
+const formatAmount = (amount: string) => {
+  return Number(amount).toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
+}
 const handleAdd = async () => {
   showEdit.value = true
   await nextTick()
@@ -100,5 +117,13 @@ const changeStatus = async (id: number, status: any) => {
     getLists()
   }
 }
+
+const showChargeConsumeRecord = async (row: any) => {
+  chargeConsumeRecordRef.value?.open(row)
+}
+
+const updateBalance = async (data: any) => {
+
+}
 getLists()
 </script>

+ 57 - 22
src/views/order/console.vue

@@ -299,7 +299,8 @@
                     >
                         <div class="left-part">
                             <div class="amount-wrapper">
-                                <div class="amount">{{ coupon.consumeScore / 100 }}</div>
+                                <div class="amount" v-if="coupon.productType !== 'DISCOUNT'">{{ coupon.consumeScore / 100 }} <span style="font-size: 12px">元</span></div>
+                                <div class="amount" v-else>{{ coupon.discount }} <span style="font-size: 12px">折</span></div>
                             </div>
                             <!-- <div class="condition">满{{ coupon.consumeScore / 100 }}可用</div> -->
                         </div>
@@ -484,7 +485,8 @@ import {
     cancelOrder,
     getUserIdByMobile,
     queryUserMemberInfo,
-    cashPay
+    cashPay,
+    calPayAmount
 } from '@/api/order'
 import feedback from '@/utils/feedback'
 // const route = useRoute()
@@ -874,30 +876,41 @@ const checkout = () => {
     // })
 }
 // 添加优惠券点击处理方法
-const handleCouponClick = (coupon: any) => {
-    if (
-        orderData.sumPriceSum < coupon.consumeScore / 100 ||
-        orderData.sumPriceSum < coupon.useThreshold / 100
-    ) {
-        return
-    }
-    if (params.couponId === coupon.ticketRecordId) {
-        params.couponId = ''
-        params.couponNo = ''
-        params.couponName = ''
-        params.couponAmount = '-'
-        orderData.payAmount = orderData.sumPriceSum
-        return
-    }
+const handleCouponClick = async (coupon: any) => {
+  // 取消选中
+  if (params.couponId === coupon.ticketRecordId) {
+    params.couponId = ''
+    params.couponNo = ''
+    params.couponName = ''
+    params.couponAmount = '-'
+    orderData.payAmount = orderData.sumPriceSum
+    return
+  }
+  if (coupon.productType === 'DISCOUNT') {
+    const res = await calPayAmount({amount: orderData.sumPriceSum, ticketId: coupon.ticketRecordId})
     balancePaymentPhone.value = data.phone
     params.couponId = coupon.ticketRecordId
     params.couponNo = coupon.ticketNo
     params.couponName = coupon.productName
-    params.couponAmount = (coupon.consumeScore / 100).toFixed(2)
-    // 计算支付金额
-    orderData.payAmount = (
-        Number(orderData.sumPriceSum) - Number(coupon.consumeScore / 100)
-    ).toFixed(2)
+    params.couponAmount = (Number(orderData.sumPriceSum) - Number(res.single)).toFixed(2)
+    orderData.payAmount = res.single
+    return;
+  }
+  if (
+      orderData.sumPriceSum < coupon.consumeScore / 100 ||
+      orderData.sumPriceSum < coupon.useThreshold / 100
+  ) {
+      return
+  }
+  balancePaymentPhone.value = data.phone
+  params.couponId = coupon.ticketRecordId
+  params.couponNo = coupon.ticketNo
+  params.couponName = coupon.productName
+  params.couponAmount = (coupon.consumeScore / 100).toFixed(2)
+  // 计算支付金额
+  orderData.payAmount = (
+      Number(orderData.sumPriceSum) - Number(coupon.consumeScore / 100)
+  ).toFixed(2)
 }
 
 const open = (item: any, num?: number, orderNumber?: any) => {
@@ -1215,6 +1228,13 @@ const add = (item: any) => {
             orderLoading.value = false
             nextTick(() => {
                 scrollbarRef.value!.setScrollTop(innerRef.value!.clientHeight)
+                if (params.couponId) {
+                  params.couponId = ''
+                  params.couponNo = ''
+                  params.couponName = ''
+                  params.couponAmount = '-'
+                  orderData.payAmount = orderData.sumPriceSum
+                }
             })
         })
 }
@@ -1334,6 +1354,13 @@ const handleAddGoods = (item: any) => {
                 })
             })
     }
+    if (params.couponId) {
+      params.couponId = ''
+      params.couponNo = ''
+      params.couponName = ''
+      params.couponAmount = '-'
+      orderData.payAmount = orderData.sumPriceSum
+    }
 }
 //只有正常执行了接口才触发
 const addHandle = (item: { summary: any }) => {
@@ -1392,6 +1419,14 @@ const reduce = (item: any) => {
                 orderLoading.value = false
             })
     }
+
+    if (params.couponId) {
+      params.couponId = ''
+      params.couponNo = ''
+      params.couponName = ''
+      params.couponAmount = '-'
+      orderData.payAmount = orderData.sumPriceSum
+    }
 }
 //只有正常执行了接口才触发
 const reduceHandle = (item: { summary: number }) => {

+ 2 - 0
src/views/orders/list.vue

@@ -7,6 +7,7 @@
                         <el-option label="全部" value />
                         <el-option label="吧台点单" value="0" />
                         <el-option label="扫码点单" value="1" />
+                        <el-option label="商城订单" value="2" />
                     </el-select>
                 </el-form-item>
                 <el-form-item label="订单状态" class="w-[280px]">
@@ -16,6 +17,7 @@
                         <!--                        <el-option label="待结帐" value="1" />-->
                         <el-option label="已下单" value="2" />
                         <el-option label="已退款" value="4" />
+                        <el-option label="已核销" value="8" />
                     </el-select>
                 </el-form-item>
                 <!--                <el-form-item label="创建时间" class="w-[280px]">-->