From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目

---
 src/views/mall/promotion/rewardActivity/components/RewardRuleCouponSelect.vue |  133 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 133 insertions(+), 0 deletions(-)

diff --git a/src/views/mall/promotion/rewardActivity/components/RewardRuleCouponSelect.vue b/src/views/mall/promotion/rewardActivity/components/RewardRuleCouponSelect.vue
new file mode 100644
index 0000000..41b1f2b
--- /dev/null
+++ b/src/views/mall/promotion/rewardActivity/components/RewardRuleCouponSelect.vue
@@ -0,0 +1,133 @@
+<template>
+  <el-button class="ml-10px" type="text" @click="selectCoupon">娣诲姞浼樻儬鍔�</el-button>
+
+  <div
+    v-for="(item, index) in list"
+    :key="item.id"
+    class="coupon-list-item p-x-10px mb-10px flex justify-between"
+  >
+    <div class="coupon-list-item-left flex items-center flex-wrap">
+      <div class="mr-10px"> 浼樻儬鍒稿悕绉帮細{{ item.name }}</div>
+      <div class="mr-10px">
+        鑼冨洿锛�
+        <dict-tag :type="DICT_TYPE.PROMOTION_PRODUCT_SCOPE" :value="item.productScope" />
+      </div>
+      <div class="flex items-center">
+        浼樻儬锛�
+        <dict-tag :type="DICT_TYPE.PROMOTION_DISCOUNT_TYPE" :value="item.discountType" />
+        {{ discountFormat(item) }}
+      </div>
+    </div>
+    <div class="coupon-list-item-right">
+      閫�
+      <el-input v-model="item.giveCount" class="w-150px! p-x-20px!" placeholder="" type="number" />
+      寮�
+      <el-button class="ml-20px" link type="danger" @click="deleteCoupon(index)">鍒犻櫎</el-button>
+    </div>
+  </div>
+
+  <!-- 浼樻儬鍒搁�夋嫨 -->
+  <CouponSelect
+    ref="couponSelectRef"
+    :take-type="CouponTemplateTakeTypeEnum.ADMIN.type"
+    @change="handleCouponChange"
+  />
+</template>
+
+<script lang="ts" setup>
+import { CouponSelect } from '@/views/mall/promotion/coupon/components'
+import * as CouponTemplateApi from '@/api/mall/promotion/coupon/couponTemplate'
+import { RewardRule } from '@/api/mall/promotion/reward/rewardActivity'
+import { DICT_TYPE } from '@/utils/dict'
+import { CouponTemplateTakeTypeEnum } from '@/utils/constants'
+import { discountFormat } from '@/views/mall/promotion/coupon/formatter'
+import { isEmpty } from '@/utils/is'
+import { useVModel } from '@vueuse/core'
+
+defineOptions({ name: 'RewardRuleCouponSelect' })
+
+const props = defineProps<{
+  modelValue: RewardRule
+}>()
+
+const emits = defineEmits<{
+  (e: 'update:modelValue', v: any): void
+}>()
+
+const rewardRule = useVModel(props, 'modelValue', emits) // 璧犻�佽鍒�
+const list = ref<GiveCouponVO[]>([]) // 閫夋嫨鐨勪紭鎯犲埜鍒楄〃
+
+/** 閫夋嫨璧犻�佺殑浼樻儬绫诲瀷鎷撳睍 */
+interface GiveCouponVO extends CouponTemplateApi.CouponTemplateVO {
+  giveCount?: number
+}
+
+/** 閫夋嫨浼樻儬鍒� */
+const couponSelectRef = ref<InstanceType<typeof CouponSelect>>() // 浼樻儬鍒搁�夋嫨
+const selectCoupon = () => {
+  couponSelectRef.value?.open()
+}
+
+/** 閫夋嫨浼樻儬鍒稿悗鐨勫洖璋� */
+const handleCouponChange = (val: CouponTemplateApi.CouponTemplateVO[]) => {
+  for (const item of val) {
+    if (list.value.some((v) => v.id === item.id)) {
+      continue
+    }
+    list.value.push(item)
+  }
+}
+
+/** 鍒犻櫎浼樻儬鍒� */
+const deleteCoupon = (index: number) => {
+  list.value.splice(index, 1)
+}
+
+/** 鍒濆鍖栬禒閫佺殑浼樻儬鍒稿垪琛� */
+const initGiveCouponList = async () => {
+  // 鏍¢獙浼樻儬鍒稿瓨鍦�
+  if (isEmpty(rewardRule.value) || isEmpty(rewardRule.value.giveCouponTemplateCounts)) {
+    return
+  }
+  const tempLateIds = Object.keys(rewardRule.value.giveCouponTemplateCounts!)
+  const data = await CouponTemplateApi.getCouponTemplateList(tempLateIds)
+  if (!data) {
+    return
+  }
+  // 鍥炴樉
+  data.forEach((coupon) => {
+    list.value.push({
+      ...coupon,
+      giveCount: rewardRule.value.giveCouponTemplateCounts![coupon.id]
+    })
+  })
+}
+
+/** 璁剧疆璧犻�佺殑浼樻儬鍒� */
+const setGiveCouponList = () => {
+  if (isEmpty(rewardRule.value)) {
+    return
+  }
+  // 鏍稿績锛氭竻绌� rewardRule.value.giveCouponTemplateCounts锛岃В鍐冲垹闄や笉鐢熸晥鐨勯棶棰�
+  rewardRule.value.giveCouponTemplateCounts = {}
+
+  // 璁剧疆浼樻儬鍒稿拰鍏舵暟閲忕殑瀵瑰簲
+  list.value.forEach((rule) => {
+    rewardRule.value.giveCouponTemplateCounts![rule.id] = rule.giveCount!
+  })
+}
+defineExpose({ setGiveCouponList })
+
+/** 缁勪欢鍒濆鍖� */
+onMounted(async () => {
+  await nextTick()
+  await initGiveCouponList()
+})
+</script>
+
+<style lang="scss" scoped>
+.coupon-list-item {
+  border: 1px dashed var(--el-border-color-darker);
+  border-radius: 8px;
+}
+</style>

--
Gitblit v1.8.0