Преглед на файлове

feature:调试会员套餐的新增接口功能

zeng.chen преди 3 месеца
родител
ревизия
17d9f59241
променени са 3 файла, в които са добавени 120 реда и са изтрити 39 реда
  1. 2 0
      src/views/service/package/detail.vue
  2. 91 18
      src/views/vippackage/list/detail.vue
  3. 27 21
      src/views/vippackage/list/index.vue

+ 2 - 0
src/views/service/package/detail.vue

@@ -169,6 +169,8 @@ export default {
   },
   mounted() {
     this.typeList = this.$route.query.typeList.split(',')
+    console.log("typeList:", this.typeList, this.$route.query.typeList)
+
     if (this.$route.query.id) {
       this.form.id = this.$route.query.id
       this.getList()

+ 91 - 18
src/views/vippackage/list/detail.vue

@@ -6,7 +6,7 @@
           <el-option v-for="item in typeOptions" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item> -->
-      <el-form-item label="套餐名称:">
+      <el-form-item label="套餐名称:" prop="name">
         <el-input v-model="form.name" placeholder="请输入套餐名称" />
       </el-form-item>
       <el-form-item label="关联设备:">
@@ -15,7 +15,7 @@
         </el-select>
       </el-form-item>
       <el-form-item label="资源平台:">
-        <el-select v-model="form.platformId" filterable multiple placeholder="请选择资源平台" :disabled="disabled()">
+        <el-select v-model="platformIds" filterable multiple placeholder="请选择资源平台" :disabled="disabled()">
           <el-option v-for="item in platformOptions" :key="item.value" :label="item.label" :value="item.value" />
         </el-select>
       </el-form-item>
@@ -57,11 +57,11 @@
         <el-input-number v-model="form.sort" :min="1" />
       </el-form-item>
       <el-form-item label='赠送流量:'>
-        <el-switch v-model="form.isFreeContentVip" />
+        <el-switch v-model="form.isFreeFlow" />
       </el-form-item>
-      <el-form-item v-if="form.isFreeContentVip" label="关联流量套餐:">
-        <el-select v-model="form.freeOptions" placeholder="请选择流量套餐:">
-          <el-option v-for="item in form.freeOptions" :key="item.id" :label="item.name" :value="item.id" />
+      <el-form-item v-if="form.isFreeFlow" label="关联流量套餐:" prop="freeActivityId">
+        <el-select v-model="form.freeActivityId" placeholder="请选择流量套餐:">
+          <el-option v-for="item in freeOptions" :key="item.id" :label="item.name" :value="item.id" />
         </el-select>
       </el-form-item>
       <el-form-item>
@@ -96,11 +96,27 @@ export default {
         callback()
       }
     }
+    let checkFreeVip = (rule, value, callback) => {
+      if (this.form.isFreeFlow && !value) {
+        callback(new Error('请选择赠送流量套餐!'))
+      } else {
+        callback()
+      }
+    }
+    let checkName = (rule, value, callback) => {
+      if ((value ?? "").length == 0) {
+        callback(new Error('请输入套餐名称!'))
+      } else {
+        callback()
+      }
+    }
     return {
       // 表单
       form: {},
       // 关联设备
       deviceIds: [],
+      // 资源平台
+      platformIds: [],
       // 区分
       typeList: [],
       // 流量套餐
@@ -155,6 +171,14 @@ export default {
         discount: [{
           validator: checkedDiscount,
           trigger: 'blur'
+        }],
+        freeActivityId: [{
+          validator: checkFreeVip,
+          trigger: 'blur'
+        }],
+        name: [{
+          validator: checkName,
+          trigger: 'blur'
         }]
       }
     }
@@ -165,21 +189,23 @@ export default {
       if (val !== 5) {
         delete this.form.sort
       }
-      this.getDeviceGoodsList(this.deviceIds ?? [], val, this.form.isFreeContentVip ?? false)
+      this.getDeviceGoodsList(this.deviceIds ?? [], val, this.form.isFreeFlow ?? false)
     },
     'form.platform'(val) {
       this.getDevList({ type: val })
     },
-    'form.isFreeContentVip'(val) {
+    'form.isFreeFlow'(val) {
       if (val === true) {
         this.getDeviceGoodsList(this.deviceIds ?? [], this.form.businessType ?? -1, val)
       }
     }
   },
   mounted() {
-    this.typeList = this.$route.query.typeList
-    console.log(this.typeList)
-    console.log(this.$route.query)
+    // this.typeList = this.$route.query.typeList
+    this.typeList = this.$route.query.typeList.split(',')
+    console.log("typeList:", this.typeList, this.$route.query.typeList)
+    this.form.type = this.typeList[0]
+    this.form.freeOptions = []
     if (this.$route.query.id) {
       this.form.id = this.$route.query.id
       this.getList()
@@ -192,24 +218,61 @@ export default {
       detail(this.form.id).then(res => {
         if (res.code === 0) {
           this.form = res.data
+          this.form.isFreeFlow = res.data.isFreeFlow ? true : false
+          this.form.freeActivityId = res.data.freeActivityId
           this.deviceIds = res.data.deviceIds.split(',')
+          console.log("设备id:", JSON.stringify(res.data))
+          // 如果有platformIds,转换为数组
+          if (res.data.platformIds) {
+            try {
+              this.platformIds = JSON.parse(res.data.platformIds)
+            } catch (e) {
+              this.platformIds = [res.data.platformIds]
+            }
+          }
+
+          // 如果有freeActivityId,获取对应的流量套餐选项
+          if (res.data.isFreeFlow && res.data.freeActivityId) {
+            this.getDeviceGoodsList(this.deviceIds, res.data.businessType, true)
+          }
+
           console.log("请求到设备:", this.deviceIds.length)
         }
       })
     },
 
     // 流量套餐
-    getDeviceGoodsList(deviceIds, businessType, isFreeContentVip) {
-      if ((deviceIds ?? []).length === 0 || (businessType ?? -1) < 0 || (isFreeContentVip ?? false) != true) {
-        console.log('设备id或业务类型为空', deviceIds, businessType, isFreeContentVip)
+    getDeviceGoodsList(deviceIds, businessType, isFreeFlow) {
+      if ((deviceIds ?? []).length === 0 || (businessType ?? -1) < 0 || (isFreeFlow ?? false) != true) {
+        console.log('设备id或业务类型为空', deviceIds, businessType, isFreeFlow)
         return
       }
-      console.log('开始请求', this.typeList[0], deviceIds.join(","), businessType, isFreeContentVip)
+      console.log('开始请求', this.typeList[0], deviceIds.join(","), businessType, isFreeFlow)
 
-      deviceGoodsList(this.typeList[0], businessType, deviceIds.join(",")).then((res) => {
-        console.log("流量套餐", JSON.stringify(res.data));
+      deviceGoodsList(0, businessType, deviceIds.join(",")).then((res) => {
         if (res.code === 0) {
-          this.form.freeOptions = res.data;
+
+          // 如果返回的数据为空数组,确保freeOptions也为空数组而不是null或undefined
+          this.freeOptions = res.data || [];
+          console.log("获取到流量套餐:", this.freeOptions.length);
+
+          // 如果freeOptions为空,清空freeActivityId
+          if (this.freeOptions.length === 0) {
+            if (this.form.freeActivityId !== undefined) {
+              this.$message.warning('没有可用的流量套餐!');
+              this.form.freeActivityId = undefined;
+            }
+          }
+          // 如果freeOptions有值且freeActivityId有值,检查是否存在对应的选项
+          else if (this.form.freeActivityId !== undefined) {
+            const exists = this.freeOptions.some(item => item.id == this.form.freeActivityId);
+            if (!exists) {
+              this.$message.warning('原关联的流量套餐已不可用,请重新选择!');
+              this.form.freeActivityId = undefined;
+            } else {
+              console.log("已找到匹配的流量套餐:", this.form.freeActivityId);
+            }
+          }
         }
       });
     },
@@ -217,8 +280,18 @@ export default {
     // 提交
     getSubmit() {
       this.$refs.form.validate((valid) => {
+        console.log('提交:', this.form)
         if (valid) {
           this.form.deviceIds = this.deviceIds.join(',')
+          this.form.platformIds = JSON.stringify(this.platformIds)
+          this.form.isFreeFlow = this.form.isFreeFlow ? 1 : 0
+          console.log('提交:', this.form)
+          if (this.form.isFreeFlow && this.form.freeActivityId === undefined) {
+            this.$message.warning('请选择赠送流量套餐!');
+            return;
+          } else if (this.form.isFreeFlow != true) {
+            this.form.freeActivityId = undefined;
+          }
           if (this.form.id) {
             edit(this.form).then(res => {
               if (res.code === 0) {

+ 27 - 21
src/views/vippackage/list/index.vue

@@ -3,10 +3,10 @@
   <div class="app-container">
     <!-- 搜索 -->
     <el-form inline size="mini">
-      <el-form-item :label="form.typeList[0] === '19' ? '套餐名称:' : '流量名称:'">
+      <el-form-item label="套餐名称:">
         <el-input v-model="form.name" placeholder="请输入名称" clearable />
       </el-form-item>
-      <el-form-item v-if="form.typeList[0] !== '18'" label="资源平台:">
+      <el-form-item v-if="form.typeList[0] === '19'" label="资源平台:">
         <el-select v-model="form.platformId" placeholder="请选择资源平台" clearable>
           <el-option v-for="item in platformOptions" :key="item.value" :label="item.label" :value="item.value" />
         </el-select>
@@ -16,11 +16,7 @@
           <el-option v-for="(item, index) in goodsOptions" :key="index" :label="item" :value="index" />
         </el-select>
       </el-form-item>
-      <el-form-item label="关联设备:">
-        <el-select v-model="form.deviceIds" filterable placeholder="请选择关联设备" clearable>
-          <el-option v-for="item in devOptions" :key="item.value" :label="item.label" :value="item.value" />
-        </el-select>
-      </el-form-item>
+
       <el-form-item label="当前状态:">
         <el-select v-model="form.status" placeholder="请选择当前状态" clearable>
           <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
@@ -36,26 +32,26 @@
     <!-- 列表 -->
     <el-table :data="tableData" v-loading="loading" :default-sort="{ prop: 'sort' }">
       <el-table-column label="排序" align="center" prop="sort" key="sort" :formatter="sortFormatter" />
-      <el-table-column :label="form.typeList[0] === '13' ? '套餐名称' : '流量名称'" align="center" prop="name" key="name"
+      <el-table-column :label="form.typeList[0] === '19' ? '套餐名称' : '流量名称'" align="center" prop="name" key="name"
         show-overflow-tooltip />
       <el-table-column label="关联设备" align="center" prop="deviceIds" key="deviceIds" :formatter="devFormatter"
         show-overflow-tooltip />
       <el-table-column label="原价/元" align="center" prop="price" key="price" />
       <el-table-column label="活动价/元" align="center" prop="discount" key="discount" />
-      <el-table-column v-if="form.typeList[0] === '18'" label="流量套餐" align="center" prop="intro" key="intro"
-        show-overflow-tooltip />
-      <el-table-column v-if="form.typeList[0] !== '18'" label="服务时长" align="center" prop="indate" key="indate"
+      <!-- <el-table-column v-if="form.typeList[0] === '18'" label="流量套餐" align="center" prop="intro" key="intro"
+        show-overflow-tooltip /> -->
+      <el-table-column v-if="form.typeList[0] === '19'" label="服务时长" align="center" prop="indate" key="indate"
         :formatter="timeFormatter" />
-      <el-table-column v-if="form.typeList[0] !== '18'" label="资源平台" align="center" prop="platformId" key="platformId"
+      <el-table-column v-if="form.typeList[0] === '19'" label="资源平台" align="center" prop="platformIds" key="platformId"
         :formatter="platformFormatter" />
       <!-- <el-table-column v-if="form.typeList[0] !== '18'" label="栏目" align="center" prop="groupId" key="groupId"
         :formatter="sceneFormatter" /> -->
       <!-- <el-table-column label="当前状态" align="center" prop="status" key="status" :formatter="statusFormatter" /> -->
       <el-table-column label="是否推荐" align="center" prop="isRecommend" key="isRecommend"
         :formatter="recommendFormatter" />
-      <el-table-column v-if="form.typeList[0] === '18'" label="是否赠送流量" align="center" prop="isFreeFlow" key="isFreeFlow"
+      <el-table-column v-if="form.typeList[0] === '19'" label="是否赠送流量" align="center" prop="isFreeFlow" key="isFreeFlow"
         :formatter="freeFlowFormatter" />
-      <el-table-column v-else-if="form.typeList[0] === '19'" label="是否赠送会员" align="center" prop="isFreeContentVip"
+      <el-table-column v-else-if="form.typeList[0] === '18'" label="是否赠送会员" align="center" prop="isFreeContentVip"
         key="isFreeContentVip" :formatter="freeVipFormatter" />
       <el-table-column label="创建时间" align="center" prop="createTime" key="createTime" />
       <el-table-column label="操作" align="center">
@@ -143,6 +139,10 @@ export default {
           value: 10,
           label: "爱听音乐",
         },
+        {
+          value: 11,
+          label: "喜马拉雅",
+        },
       ],
       // 流量套餐
       goodsOptions: [],
@@ -151,10 +151,10 @@ export default {
     };
   },
   mounted() {
-    if (this.form.typeList[0] === "18") {
+    if (this.form.typeList[0] === "19") {
       // 流量套餐
       this.getGoodSList(2);
-    } else if (this.form.typeList[0] === "19") {
+    } else if (this.form.typeList[0] === "18") {
       // 会员使用权套餐
       // this.getVipList();
     }
@@ -203,8 +203,8 @@ export default {
       this.form = {
         pageNum: 1,
         pageSize: 10,
-        // typeList: this.$route.query.typeList.split(","),
-        typeList: ["18"],
+        typeList: this.$route.query.typeList.split(","),
+        // typeList: ["18"],
       };
       this.getList();
     },
@@ -215,8 +215,7 @@ export default {
         path: `/vippackage/vippackage/detail`,
         query: {
           id: id,
-          // typeList: this.form.typeList.join(","),
-          typeList: ["18"],
+          typeList: this.form.typeList.join(","),
         },
       });
       this.$route.meta.activeMenu = "vippackage/list";
@@ -263,8 +262,15 @@ export default {
       return row.businessType === 5 ? row.sort : "/";
     },
     // 资源平台
+    // 资源平台
     platformFormatter(row) {
-      return this.selectDictLabel(this.platformOptions, row.platformId);
+      if (!row.platformIds) return '';
+      var ids = JSON.parse(row.platformIds);
+      // 如果是数组,遍历处理
+      return ids
+        .map(id => this.selectDictLabel(this.platformOptions, id))
+        .filter(label => label) // 过滤掉空值
+        .join(', ');
     },
     // 服务时间
     timeFormatter(row) {