فهرست منبع

fix(web): 用户管理会员等级下拉改为后台动态加载5级, 优惠券管理等级选项同步动态化

Xiaogang Liao 2 ماه پیش
والد
کامیت
68fb02d479
2فایلهای تغییر یافته به همراه42 افزوده شده و 9 حذف شده
  1. 29 6
      cfc-web/src/views/Users.vue
  2. 13 3
      cfc-web/src/views/admin/CouponManagement.vue

+ 29 - 6
cfc-web/src/views/Users.vue

@@ -174,6 +174,16 @@
             ></el-option>
           </el-select>
         </el-form-item>
+        <el-form-item label="会员等级">
+          <el-select v-model="editForm.memberLevel" clearable placeholder="选择会员等级" style="width: 100%">
+            <el-option
+              v-for="lv in memberLevelOptions"
+              :key="lv.levelCode"
+              :label="lv.levelName + '(' + lv.levelCode + ')'"
+              :value="lv.levelCode"
+            ></el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item label="角色">
           <el-checkbox-group v-model="editForm.roles">
             <el-checkbox
@@ -228,7 +238,7 @@
 
 <script>
 import SortMixin from '@/mixins/SortMixin'
-import { getUserList, updateUser, deleteUser, resetUserPassword, searchUsers } from '@/api/admin'
+import { getUserList, updateUser, deleteUser, resetUserPassword, searchUsers, listMembershipLevels } from '@/api/admin'
 
 import { getRoleLabel } from '@/utils/permissions'
 
@@ -270,7 +280,8 @@ export default {
         realName: '',
         phone: '',
         roles: [],
-        referrerId: null
+        referrerId: null,
+        memberLevel: ''
       },
       editRules: {
         nickname: [
@@ -290,10 +301,12 @@ export default {
       ],
       userSearchResults: [],
       userSearchLoading: false,
+      memberLevelOptions: [],
     }
   },
   mounted() {
     this.loadUsers()
+    this.loadMemberLevels()
   },
   methods: {
     loadList() {
@@ -327,6 +340,15 @@ const res = await getUserList(params)
         this.loading = false
       }
     },
+    async loadMemberLevels() {
+      try {
+        const res = await listMembershipLevels()
+        const list = res.data || []
+        this.memberLevelOptions = Array.isArray(list) ? list.filter(function(l) { return l && typeof l === 'object' && l.levelCode }) : []
+      } catch (e) {
+        this.memberLevelOptions = []
+      }
+    },
     handleSearch() {
       this.pagination.current = 1
       this.loadUsers()
@@ -358,7 +380,8 @@ const res = await getUserList(params)
         realName: row.realName || '',
         phone: row.phone || '',
         roles: row.roles ? [...row.roles] : (row.role ? [row.role] : []),
-        referrerId: row.referrerId || null
+        referrerId: row.referrerId || null,
+        memberLevel: row.memberLevel || ''
       }
       this.editDialogVisible = true
     },
@@ -447,11 +470,11 @@ const res = await getUserList(params)
       return String(dateStr).replace('T', ' ').substring(0, 19)
     },
     memberLevelLabel(level) {
-      const map = { FREE: '免费', FAMILY: '家庭会员', PROVIDER: '服务商' }
-      return map[level] || '免费'
+      const map = { FREE: '免费会员', FAMILY: '家庭会员', PROVIDER: '标准会员', PREMIUM: '高级家庭会员', LIFETIME: '终身会员' }
+      return map[level] || '免费会员'
     },
     memberLevelType(level) {
-      const map = { FREE: 'info', FAMILY: 'success', PROVIDER: 'warning' }
+      const map = { FREE: 'info', FAMILY: 'success', PROVIDER: 'warning', PREMIUM: 'primary', LIFETIME: 'danger' }
       return map[level] || 'info'
     },
     async searchUsersForReferrer(query) {

+ 13 - 3
cfc-web/src/views/admin/CouponManagement.vue

@@ -145,9 +145,7 @@
         </el-form-item>
         <el-form-item v-if="form.grantType === 'JOIN' || form.grantType === 'PERIODIC'" label="适用会员等级">
           <el-select v-model="form.grantLevelCode" placeholder="请选择会员等级" style="width: 100%">
-            <el-option label="FREE" value="FREE" />
-            <el-option label="FAMILY" value="FAMILY" />
-            <el-option label="PREMIUM" value="PREMIUM" />
+            <el-option v-for="lv in memberLevelOptions" :key="lv.levelCode" :label="lv.levelName + '(' + lv.levelCode + ')'" :value="lv.levelCode" />
           </el-select>
         </el-form-item>
         <el-form-item v-if="form.grantType === 'PERIODIC'" label="补发周期">
@@ -208,6 +206,7 @@
 <script>
 import SortMixin from '@/mixins/SortMixin'
 import { getCouponList, createCoupon, updateCoupon, deleteCoupon, batchIssueCoupons, toggleCouponStatus } from '@/api/coupon'
+import { listMembershipLevels } from '@/api/admin'
 import ProductPicker from '@/components/ProductPicker'
 
 export default {
@@ -236,6 +235,7 @@ export default {
       batchUserIds: '',
       batchSubmitting: false,
       couponOptions: [],
+      memberLevelOptions: [],
       keyword: '',
       sortableColumns: { name: '名称' }
 
@@ -243,8 +243,18 @@ export default {
   },
   created() {
     this.loadData()
+    this.loadMemberLevels()
   },
   methods: {
+    async loadMemberLevels() {
+      try {
+        const res = await listMembershipLevels()
+        const list = res.data || []
+        this.memberLevelOptions = Array.isArray(list) ? list.filter(function(l) { return l && typeof l === 'object' && l.levelCode }) : []
+      } catch (e) {
+        this.memberLevelOptions = []
+      }
+    },
     getEmptyForm() {
       return {
         id: null,