Prechádzať zdrojové kódy

修改了权限模块

bding 1 mesiac pred
rodič
commit
ab225c7746

+ 27 - 61
src/views/custom_manage/customList/applyTurn.vue

@@ -146,8 +146,7 @@
 								权限设置
 							</label>
 							<template  v-if="(companyInfo.CompanyType=='权益' || isRoleType== '权益') && !isXClassCustom" >
-								<raiPermissionbox ref="raiPermissionboxRef" v-for="item in authList" :key="item.ClassifyName" :data="item" :formData="formData"
-								:hasNoChild="hasNoChild"></raiPermissionbox>
+								<raiPermissionbox ref="raiPermissionboxRef" v-for="item in authList" :key="item.ClassifyName" :allData="item.Items" :formData.sync="formData" :raiCheckList.sync="raiCheckList"></raiPermissionbox>
 							</template>
 							<ul class="menu_lists" style="width:100%" v-else>
 								<li v-for="item in authList" :key="item.ClassifyName" class="menu_item">
@@ -262,6 +261,8 @@ export default {
 			citiesEquity:[], //
 			citiesListEquity:[], //
 			citiesListpitchOn:[],
+
+			raiCheckList:[], //权益复选框
 		};
 	},
 	methods: {
@@ -294,24 +295,9 @@ export default {
 					let newArr = [];
 					/* 处理权限列表 */
 					if(this.isRaiCompany && !this.isXClassCustom ) {
-						res.Data.Item.PermissionList[0].Items.map(item => {
-							item.disabled=item.isIndeterminate=false								
-							if(item.ChartPermissionId==22 && (!item.Child)) this.hasNoChild=true
-						})
-						/* 处理数据把复选框 拆分成三个*/
 						res.Data.Item.PermissionList.length&&res.Data.Item.PermissionList.forEach(item => {
-						let arr = item.Items.filter(key=> [22,21,20,19,23,156, 30, 69,148,62].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,20031,20032,52,53,54].includes(key.ChartPermissionId))
-						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
-						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
-							let obj = {
-								...item,
-								Items:arr,
-								ItemsPrivate,
-								ItemsUp,
-								ItemsBig
-							}
-							newArr.push(obj)
+							this.raiCheckList = item.CheckList || []
+							newArr.push(item)
 						})
 					} else {
 						res.Data.Item.PermissionList.forEach(item => {
@@ -338,24 +324,8 @@ export default {
 				let newArr = [];
 				if(res.Ret === 200) {
 					if(this.isRaiCompany && !this.isXClassCustom) {
-						res.Data.List[0].Items.map(item => {
-							item.disabled=item.isIndeterminate=false								
-							if(item.ChartPermissionId==22 && (!item.Child)) this.hasNoChild=true
-						})
-						/* 处理数据把复选框 拆分成三个*/
 						res.Data.List.length&&res.Data.List.forEach(item => {
-						let arr = item.Items.filter(key=> [22,21,20,19,23,156, 30, 69,148,62].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,20031,20032,52,53,54].includes(key.ChartPermissionId))
-						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
-						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
-							let obj = {
-								...item,
-								Items:arr,
-								ItemsPrivate,
-								ItemsUp,
-								ItemsBig
-							}
-							newArr.push(obj)
+							newArr.push(item)
 						})
 					}else {
 						res.Data.List.length&&res.Data.List.forEach(item => {
@@ -391,35 +361,34 @@ export default {
 				if (valid) {
 					/* 处理权限列表 */
 					let checkArr = [];
-					let checkArrName = [];
-					let hasMinusSignVal = 0
-					if((this.companyInfo.CompanyType==='权益' || this.isRoleType== '权益') && !this.isXClassCustom){
-					 	hasMinusSignVal = this.$refs.raiPermissionboxRef[0].minus_sign_val;		
+					let PointsArr = []
+					let isPoints = true;
+					if((this.companyInfo.CompanyType === '权益' || this.isRoleType == '权益') && !this.isXClassCustom){
+						checkArr = this.raiCheckList
 						this.authList.forEach(item => {
-								if(item.CheckList.length) {
-									checkArr.push(item.CheckList)
-									item.ItemsUp.forEach(key=>{
-										if(item.CheckList.includes(key.ChartPermissionId)) {
-											checkArrName.push(key.PermissionName)
-										}
-									})
-								}
-							})
-						}else {
-							this.authList.forEach(item => {
-								if(item.CheckList.length) {
-									checkArr.push(item.CheckList)
+							item.Items.forEach(key => {
+								if (checkArr.includes(key.ChartPermissionId) && key.ShowInput) {
+									if (!key.Points) return isPoints = false;
+									PointsArr.push({
+										ChartPermissionId: key.ChartPermissionId,
+										Points: key.Points-0,
+									});
 								}
 							})
+							
+						})
+					}else {
+						this.authList.forEach(item => {
+							if(item.CheckList.length) {
+								checkArr.push(item.CheckList)
+							}
+						})
 					}
-					const hasFiftyTwo = checkArr.flat(2).includes(52);
-					if(hasFiftyTwo && !hasMinusSignVal) return this.$message.error('请输入研选扣点数')
-
+					if(!isPoints) return this.$message.warning('请输入点数!')
 					if(!checkArr.length && this.companyInfo.CompanyType === '权益') {
 						this.$message.warning('请选择权限!');
 						return
 					}else {
-						
 						let PermissionIds = [... new Set(checkArr.flat(2))].join(',');
 						let params = {
 							CompanyId:Number(this.companyInfo.CompanyId),
@@ -433,15 +402,12 @@ export default {
 							PayMethod:this.formData.payway,
 							PermissionIds,
 							PackageType:this.formData.setmeal ? this.formData.setmeal : 0,
-							PermissionNames:checkArrName.length? checkArrName.join(','):'',
 							RaiPackageType:this.formData.qyBigServeCheck||0,
-							Points:hasMinusSignVal||0
+							PointsArr
 						}
-						// console.log(params);
 						customInterence.applyTurn(params).then(res => {
 							if(res.Ret === 200) {
 								this.$message.success(res.Msg);
-								//this.$router.go(-1);
 								this.$router.push({path:`/${this.$route.meta.pathFrom}`})
 							}
 						})

+ 1 - 2
src/views/custom_manage/customList/components/deductDetailDlg.vue

@@ -2,7 +2,7 @@
   <div class="">
     <!-- banner 详情的弹框 -->
     <el-dialog
-      :title="isShowDlgType == '专项调研' ? '专项调研次数明细' : '研选服务点数明细'"
+      :title="isShowDlgType == '专项调研' ? '专项/路演点数' : '研选服务点数明细'"
       :visible.sync="isShowResearchNumber"
       width="1200px"
       v-dialogDrag
@@ -14,7 +14,6 @@
       <el-table style="margin-bottom: 30px" :data="tableList" border height="500">
         <el-table-column align="center" prop="Content" label="事项"></el-table-column>
         <el-table-column align="center" prop="CreateTime" label="时间" width="180"></el-table-column>
-        <el-table-column align="center" prop="ChartPermissionName" label="行业" width="100" v-if="isShowDlgType == '专项调研'"></el-table-column>
         <el-table-column align="center" prop="RealName" label="参会人" width="100"></el-table-column>
         <el-table-column align="center" prop="minNumber" label="小计" width="80">
           <template slot-scope="{ row }">

+ 279 - 312
src/views/custom_manage/customList/components/raiPermissionbox.vue

@@ -1,92 +1,49 @@
 <template>
-  <div class="rai-checkbox-content" id="rai-checkbox-content">
-    <div class="rai-checkbox-bigS-box">
-      <el-checkbox
-        v-model="itB.Checked"
-        v-for="itB in data.ItemsBig"
-        :key="itB.PermissionName"
-        @change="(e) => bigServeCheck(e, itB, data)"
-        :indeterminate="itB.isIndeterminate && !itB.disabled"
-        class="bigS-item"
-        :disabled="itB.disabled || (formData.qyBigServeCheck != getQyBigServeCheckNumber(itB.PermissionName) && formData.qyBigServeCheck != 0)"
-        >{{ itB.PermissionName }}</el-checkbox
-      >
-    </div>
-    <div class="rai-checkbox-box">
-      <div class="rai-checkbox-main-container">
-        <div class="rai-checkbox-main-row">
-          <div
-            class="rai-checkbox-item"
-            v-for="it in data.Items"
-            :key="it.ChartPermissionId"
-            :style="{ width: [23, 148, 62].includes(it.ChartPermissionId) ? '84px' : [156,30,69].includes(it.ChartPermissionId) ? '110px' : '168px' }"
+  <div class="rai-checkbox-box">
+    <!-- 第一行:套餐 -->
+    <el-row :gutter="10" style="margin-bottom: 16px">
+      <el-col v-for="item in packages" :key="item.PermissionName" :span="3">
+        <el-checkbox v-model="item.Checked" @change="onPackageChange(item)" :disabled="item.disabled">
+          {{ item.PermissionName }}
+        </el-checkbox>
+      </el-col>
+    </el-row>
+
+    <!-- 第二行:主模块 -->
+    <div class="main-list">
+      <div class="main-list-item" :class="[item.Child && 'fixed-width']" v-for="item in mainList" :key="item.PermissionName">
+        <div>
+          <el-checkbox v-model="item.Checked" :indeterminate="item.isIndeterminate" :disabled="item.disabled" @change="onMainChange(item)">
+            {{ item.PermissionName }}
+          </el-checkbox>
+        </div>
+        <div v-if="item.Child" style="margin-left: 10px">
+          <el-checkbox
+            v-for="child in item.Child"
+            :key="child.PermissionName"
+            :disabled="item.disabled"
+            v-model="child.Checked"
+            @change="() => onChildChange(item)"
+            style="display: block; margin-right: 15px"
           >
-            <template v-if="it.Child">
-              <el-checkbox
-                :label="it.PermissionName"
-                style="margin-right: 8px"
-                v-model="it.Checked"
-                @change="handleItemCheck(it, data)"
-                :indeterminate="it.isIndeterminate"
-                :disabled="it.disabled"
-              ></el-checkbox>
-              <el-checkbox-group v-model="data.CheckList" style="height: unset" @change="handleQYChecked(it, data)" :disabled="it.disabled">
-                <div class="rai-checkbox-serve-box">
-                  <el-checkbox :label="itChild.ChartPermissionId" v-for="itChild in it.Child" :key="itChild.ChartPermissionId" class="small-item">{{ itChild.PermissionName }}</el-checkbox>
-                </div>
-              </el-checkbox-group>
-            </template>
-            <template v-else>
-              <el-checkbox-group v-model="data.CheckList" style="height: unset; margin-right: 8px" @change="handleQYChecked(it, data)">
-                <el-checkbox :label="it.ChartPermissionId" :disabled="it.disabled">{{ it.PermissionName }}</el-checkbox>
-              </el-checkbox-group>
-            </template>
-          </div>
+            {{ child.PermissionName }}
+          </el-checkbox>
         </div>
-        <el-checkbox-group v-model="data.CheckList" style="height: unset">
-          <div class="rai-checkbox-upS-box">
-            <el-checkbox
-              :label="itU.ChartPermissionId"
-              v-for="itU in data.ItemsUp"
-              :key="itU.ChartPermissionId"
-              class="rai-checkbox-item upS-item"
-              :disabled="itU.disabled"
-              @change="(e) => handleUpdateChecked(e, itU.PermissionName, data)"
-              >{{ itU.PermissionName }}</el-checkbox
-            >
-          </div>
-        </el-checkbox-group>
+        <el-input type="number" style="width: 118px; margin: 0 8px" placeholder="请输入点数" v-if="item.ShowInput" v-model="item.Points"></el-input>
+        <p class="text-content" v-if="item.ChartContent">{{ item.ChartContent }}</p>
       </div>
-      <div class="rai-checkbox-private-container">
-        <el-checkbox-group v-model="data.CheckList" style="height: unset">
-          <div class="rai-checkbox-upS-box">
-            <el-checkbox
-              :label="itP.ChartPermissionId"
-              v-for="(itP, inP) in data.ItemsPrivate"
-              :key="itP.ChartPermissionId"
-              :disabled="itP.disabled"
-              :style="{ height: hasNoChild ? '48px' : '95px', width: itP.ChartPermissionId == 52 && data.CheckList.includes(52) ? '220px' : itP.PermissionName.includes('研选') ? '130px' : '84px' }"
-              class="rai-checkbox-item upS-item"
-              @change="(e) => handlePrivateChecked(e, itP, data)"
-            >
-              {{ itP.PermissionName }}
-              <p v-if="itP.ChartPermissionId == 31" class="checkbox-text">(30000元/年)</p>
-              <p v-if="itP.ChartPermissionId == 52" class="checkbox-text">(点/2000元)</p>
-              <input
-                @click.stop
-                @input="validateInteger"
-                placeholder="请输入点数"
-                style="margin-left: 10px"
-                v-if="itP.ChartPermissionId == 52 && data.CheckList.includes(52)"
-                v-model="minus_sign_val"
-              />
-            </el-checkbox>
-          </div>
-        </el-checkbox-group>
-        <div class="rai-checkbox-notice-box" v-if="data.ItemsUp.length > 0">
-          <span class="rai-checkbox-notice" v-if="formData.qyBigServeCheck"> 同时包含{{ formData.qyBigServeCheck == 2 ? "12" : "16" }}次专项调研</span>
-          <p class="rai-checkbox-notice" v-if="equityGroupDisabled(data.CheckList)">同时包含升级行业各5次专项调研</p>
-        </div>
+    </div>
+
+    <!-- 第三行:升级模块 -->
+    <div class="bootm-list">
+      <div class="bootm-list-item" v-for="item in upgradeList" :key="item.PermissionName">
+        <el-checkbox v-model="item.Checked" :disabled="item.disabled" @change="onUpgradeChange(item)">
+          {{ item.PermissionName }}
+        </el-checkbox>
+      </div>
+      <div class="rai-checkbox-notice-box">
+        <span class="rai-checkbox-notice" v-if="this.formData.qyBigServeCheck"> 同时包含{{ this.formData.qyBigServeCheck == 2 ? "12" : "16" }}次专项调研</span>
+        <p class="rai-checkbox-notice" v-if="equityGroupDisabled(raiCheckList)">同时包含升级行业各5次专项调研</p>
       </div>
     </div>
   </div>
@@ -94,282 +51,292 @@
 
 <script>
 export default {
-  name: "raiPermissionbox",
-  data() {
-    return {
-      minus_sign_val: "",
-    };
-  },
+  name: "PermissionCheckboxGroup",
   props: {
-    data: {
+    allData: {
+      type: Array,
       required: true,
-      type: Object,
+    },
+    raiCheckList: {
+      type: Array,
+      default: () => [],
     },
     formData: {
-      //formData.qyBigServeCheck  0-无 1- 70万 2- 45万
-      required: true,
       type: Object,
     },
-    hasNoChild: {
-      type: Boolean,
-      default: false,
+  },
+  data() {
+    return {
+      qyBigServeCheck: "",
+    };
+  },
+  computed: {
+    packages() {
+      return this.allData.filter((item) => item.PermissionName.includes("套餐"));
+    },
+    mainList() {
+      return this.allData.filter((item) => item.PermissionName && !item.PermissionName.includes("升级") && !item.PermissionName.includes("套餐"));
+    },
+    upgradeList() {
+      return this.allData.filter((item) => item.PermissionName.includes("升级"));
     },
   },
-  created() {
-    // 回显
-    if (this.data.CheckList && this.data.CheckList.length > 0) {
-      this.data.Items.map((item) => {
+  methods: {
+    // 处理选中后的id
+    updateCheckList() {
+      const list = [];
+      this.allData.forEach((item) => {
         if (item.Child) {
-          item.Child.map((t) => {
-            this.handleQYChecked(item, this.data);
+          item.Child.forEach((child) => {
+            if (child.Checked) {
+              list.push(child.ChartPermissionId);
+            }
           });
-        } else {
-          this.handleQYChecked(item, this.data);
+          return;
+        }
+        if (item.Checked && item.ChartPermissionId > 0) {
+          list.push(item.ChartPermissionId);
         }
       });
-      this.data.ItemsPrivate.map((itP) => {
-        let flag = this.data.CheckList.includes(itP.ChartPermissionId);
-        this.handlePrivateChecked(flag, itP, this.data);
-      });
-      this.data.ItemsUp.map((itU) => {
-        let flag = this.data.CheckList.includes(itU.ChartPermissionId);
-        this.handleUpdateChecked(flag, itU.PermissionName, this.data);
-      });
-    }
-  },
-  methods: {
-    // 套餐选中逻辑修复
-    bigServeCheck(value, itB, item) {
-      this.formData.qyBigServeCheck = value ? this.getQyBigServeCheckNumber(itB.PermissionName) : 0;
-
-      // 更新 `indeterminate` 状态
-      item.ItemsBig.forEach((itB) => (itB.isIndeterminate = false));
+      this.$emit("update:raiCheckList", list);
+    },
+    // 套餐选中后的逻辑
+    onPackageChange(pkg) {
+      if (pkg.Checked) {
+        let indexItme = this.packages.findIndex((item) => item.PermissionName === pkg.PermissionName);
+        this.packages[indexItme == 0 ? 1 : 0].disabled = true;
+        // 取消其他套餐
+        this.packages.forEach((item) => {
+          if (item !== pkg) {
+            item.Checked = false;
+          }
+        });
 
-      const bigServeItems = this.hasNoChild
-        ? [22, 21, 20, 19, 23, 156, 30, 69]
-        : process.env.NODE_ENV === "production"
-        ? [22, 39, 21, 38, 20, 37, 19, 36, 23, 156, 30, 69, 148, 62]
-        : [22, 37, 21, 36, 20, 35, 19, 34, 23, 156, 30, 69, 148, 62];
+        // 全部先清空
+        this.mainList.forEach((main) => {
+          main.Checked = false;
+          main.isIndeterminate = false;
+          main.disabled = false;
+          if (main.Child) {
+            main.Child.forEach((c) => (c.Checked = false));
+          }
+        });
+        this.upgradeList.forEach((up) => {
+          up.Checked = false;
+          up.disabled = false;
+        });
 
-      if (value) {
-        item.CheckList = [...new Set([...item.CheckList, ...bigServeItems])];
+        // 根据 SetMenuChartPermissionId 选中主模块和子模块
+        pkg.SetMenuChartPermissionId.forEach((id) => {
+          const main = this.allData.find((i) => i.ChartPermissionId === id);
+          if (main) {
+            main.Checked = true;
+            if (main.Child) {
+              main.Child.forEach((c) => (c.Checked = true));
+              this.updateIndeterminate(main);
+            }
+            // 禁用升级
+            const upgrade = this.upgradeList.find((u) => u.PermissionName.includes(main.PermissionName));
+            if (upgrade) {
+              upgrade.disabled = true;
+            }
+          }
+        });
       } else {
-        item.CheckList = item.CheckList.filter((t) => !bigServeItems.includes(t));
-      }
-
-      if (!this.hasNoChild) {
-        // 更新子级状态
-        item.Items.forEach((ele) => {
-          if (ele.Child) {
-            ele.Checked = value;
-            this.handleItemCheck(ele, item);
+        this.packages.forEach((item) => (item.disabled = false));
+        // 清空所有勾选
+        this.mainList.forEach((main) => {
+          main.Checked = false;
+          main.isIndeterminate = false;
+          main.disabled = false;
+          if (main.Child) {
+            main.Child.forEach((c) => (c.Checked = false));
           }
         });
+        this.upgradeList.forEach((up) => {
+          up.Checked = false;
+          up.disabled = false;
+        });
       }
+      this.$emit("update:formData", {
+        ...this.formData,
+        qyBigServeCheck: pkg.Checked ? (pkg.PermissionName.includes("70") ? 1 : 2) : 0,
+      });
+      this.updateCheckList();
     },
-    // 医药、消费、科技、智造(有主客观)选中
-    // 父子选中逻辑修复
-    handleItemCheck(it, item) {
-      const childIds = it.Child.map((t) => t.ChartPermissionId);
+    // 行业选中后的逻辑
+    onMainChange(item) {
+      if (item.Child) {
+        item.Child.forEach((child) => {
+          child.Checked = item.Checked;
+        });
+      }
 
-      if (it.Checked) {
-        item.CheckList = [...new Set([...item.CheckList, ...childIds])];
-      } else {
-        item.CheckList = item.CheckList.filter((t) => !childIds.includes(t));
+      const upgradeItem = this.upgradeList.find((up) => up.PermissionName.includes(item.PermissionName));
+      if (upgradeItem) {
+        upgradeItem.disabled = item.Checked;
       }
 
-      this.updateParentStatus(it, item);
+      this.updateIndeterminate(item);
+      this.updateCheckList();
     },
-    // 更新父级状态
-    updateParentStatus(it, item) {
-      let count = 0;
+    // 行业的主客观
+    onChildChange(parent) {
+      const total = parent.Child.length;
+      const checkedCount = parent.Child.filter((c) => c.Checked).length;
 
-      if (it.Child) {
-        it.Child.forEach((child) => {
-          if (item.CheckList.includes(child.ChartPermissionId)) count++;
-        });
-        it.Checked = count === it.Child.length;
-        it.isIndeterminate = count > 0 && count < it.Child.length;
+      if (checkedCount === total) {
+        parent.Checked = true;
+        parent.isIndeterminate = false;
+      } else if (checkedCount > 0) {
+        parent.Checked = false;
+        parent.isIndeterminate = true;
+      } else {
+        parent.Checked = false;
+        parent.isIndeterminate = false;
       }
 
-      // 更新禁用状态
-      const relatedItem = item.ItemsUp.find((up) => up.PermissionName.includes(it.PermissionName));
-      if (relatedItem) {
-        relatedItem.disabled = count !== 0;
+      const upgradeItem = this.upgradeList.find((up) => up.PermissionName.includes(parent.PermissionName));
+      if (upgradeItem) {
+        upgradeItem.disabled = checkedCount > 0;
       }
+      this.updateCheckList();
     },
-    handleQYChecked(it, item) {
-      // console.log(it,item);
-      let count = 0;
-      if (it.Child) {
-        // 有主客观
-        it.Child.map((t) => {
-          if (item.CheckList.includes(t.ChartPermissionId)) count++;
-        });
-        it.Checked = count == 2;
-        it.isIndeterminate = count == 1;
-      }
-      if (this.hasNoChild) {
-        if (item.CheckList.includes(it.ChartPermissionId)) count++;
-      }
-      // 设置升级套餐的禁用
-      let changeItem = item.ItemsUp.find((itUp) => itUp.PermissionName.includes(it.PermissionName));
-      if (changeItem) changeItem.disabled = count != 0;
-      // 设置大套餐的状态
-      let bigServeCheckNum;
-      if (this.formData.qyBigServeCheck) {
-        //qyBigServeCheck有值就作用在对应的大套餐
-        bigServeCheckNum = this.formData.qyBigServeCheck == 1 ? 1 : 0;
-      } else {
-        // 默认作用在45万上 原本有状态的话,就作用在有状态的大套餐
-        bigServeCheckNum = item.ItemsBig[1].isIndeterminate || item.ItemsBig[1].Checked ? 1 : 0;
-      }
-      // 正式服 各行业的客观的chartPermissionId和测试服的不一样
-      let allChartPermissionIds = process.env.NODE_ENV === "production" ? [22, 39, 21, 38, 20, 37, 19, 36, 23, 156, 30, 69, 148, 62] : [22, 37, 21, 36, 20, 35, 19, 34, 23, 156, 30, 69, 148, 62];
+    // 升级选中后的逻辑
+    onUpgradeChange(upgrade) {
+      const main = this.mainList.find((main) => upgrade.PermissionName.includes(main.PermissionName));
+      if (main) {
+        main.disabled = upgrade.Checked;
 
-      let bigServeItems = this.hasNoChild ? [22, 21, 20, 19, 23, 156, 30, 69] : allChartPermissionIds;
-      if (bigServeItems.every((t) => item.CheckList.includes(t))) {
-        item.ItemsBig[bigServeCheckNum].Checked = true;
-        this.formData.qyBigServeCheck = this.getQyBigServeCheckNumber(item.ItemsBig[bigServeCheckNum].PermissionName);
-      } else {
-        item.ItemsBig[bigServeCheckNum].Checked = false;
-        this.formData.qyBigServeCheck = 0;
+        if (upgrade.Checked) {
+          main.Checked = false;
+          main.isIndeterminate = false;
+          if (main.Child) {
+            main.Child.forEach((c) => (c.Checked = false));
+          }
+        }
       }
-      item.ItemsBig[bigServeCheckNum].isIndeterminate = bigServeItems.some((t) => item.CheckList.includes(t)) && !item.ItemsBig[bigServeCheckNum].Checked;
+      this.updateCheckList();
     },
-    handleUpdateChecked(value, name, item) {
-      let isDisabled = item.ItemsUp.some((itU) => item.CheckList.includes(itU.ChartPermissionId));
-      // 设置大套餐禁用
-      item.ItemsBig.map((itb) => (itb.disabled = isDisabled));
-      // 设置基础套餐禁用
-      item.Items.find((its) => name.includes(its.PermissionName)).disabled = value;
-    },
-    handlePrivateChecked(value, itP, item) {
-      if (![20032, 20031, 31].includes(itP.ChartPermissionId)) return;
-      // 买方严选的互斥
-      item.ItemsPrivate.forEach((itPri) => {
-        if ([20032, 20031, 31].includes(itPri.ChartPermissionId) && itP.ChartPermissionId != itPri.ChartPermissionId && value) {
-          itPri.disabled = true;
-        } else {
-          itPri.disabled = false;
-        }
-      });
+    // 更新 indeterminate 状态
+    updateIndeterminate(item) {
+      if (!item.Child) return;
+      const total = item.Child.length;
+      const checked = item.Child.filter((c) => c.Checked).length;
+      item.isIndeterminate = checked > 0 && checked < total;
     },
+    // 是否有超过100000的点数
     equityGroupDisabled(item) {
       return item.some((key) => key > 100000);
     },
-    getQyBigServeCheckNumber(permissionName) {
-      return permissionName.includes("70") ? 1 : 2;
-    },
-    // 数字输入校验
-    validateInteger() {
-      this.minus_sign_val = this.minus_sign_val.replace(/[^0-9]/g, "");
-      if (this.minus_sign_val !== "") {
-        this.minus_sign_val = parseInt(this.minus_sign_val, 10);
+  },
+  mounted() {
+    // 初始化
+    if (this.raiCheckList.length > 0) {
+      // 设置套餐选中与互斥状态
+      if (this.formData.qyBigServeCheck) {
+        const selectedIndex = this.formData.qyBigServeCheck == 2 ? 0 : 1;
+        this.packages[selectedIndex].Checked = true;
+        this.packages[1 - selectedIndex].disabled = true;
       }
-    },
+
+      // 初始化主模块与子模块状态
+      this.mainList.forEach((main) => {
+        const isMainChecked = this.raiCheckList.includes(main.ChartPermissionId);
+        main.Checked = isMainChecked;
+        main.isIndeterminate = false;
+
+        // 更新子模块
+        if (main.Child) {
+          let checkedCount = 0;
+          main.Child.forEach((child) => {
+            const isChildChecked = this.raiCheckList.includes(child.ChartPermissionId);
+            child.Checked = isChildChecked;
+            if (isChildChecked) checkedCount++;
+          });
+
+          if (checkedCount > 0 && checkedCount < main.Child.length) {
+            main.isIndeterminate = true;
+            main.Checked = false;
+          } else if (checkedCount === main.Child.length) {
+            main.Checked = true;
+            main.isIndeterminate = false;
+          }
+        }
+
+        // 升级模块与主模块互斥处理
+        const upgrade = this.upgradeList.find((up) => up.PermissionName.includes(main.PermissionName));
+        if (upgrade) {
+          upgrade.disabled = isMainChecked || (main.Child && main.Child.some((c) => c.Checked));
+        }
+      });
+
+      // 初始化升级模块状态
+      this.upgradeList.forEach((upgrade) => {
+        const isUpgradeChecked = this.raiCheckList.includes(upgrade.ChartPermissionId);
+        upgrade.Checked = isUpgradeChecked;
+
+        const main = this.mainList.find((m) => upgrade.PermissionName.includes(m.PermissionName));
+        if (main) {
+          main.disabled = isUpgradeChecked;
+        }
+      });
+
+      // 更新总勾选列表
+      this.updateCheckList();
+    }
   },
 };
 </script>
 
-<style lang="scss" scoped>
-.rai-checkbox-content {
-  // width: 100%;
-  // height: 160px;
-  padding: 20px 0 20px 20px;
-  border: 1px dashed #aab4cc;
-  // display: flex;
-  .rai-checkbox-bigS-box {
+<style scoped lang="scss">
+.rai-checkbox-box {
+  width: 102%;
+  .main-list {
     display: flex;
-    .bigS-item {
-      display: inline-flex;
+    padding-right: 15px;
+    border-right: 1px solid #e4e7ed;
+    border-top: 1px solid #e4e7ed;
+    border-bottom: 1px solid #e4e7ed;
+    overflow: hidden;
+    .main-list-item {
+      position: relative;
+      display: flex;
       align-items: center;
-      padding: 4px 8px;
-      height: 22px;
-      margin: 0 20px 20px 0;
-    }
-  }
-  .rai-checkbox-box {
-    display: flex;
-    // flex-wrap: wrap;
-    .rai-checkbox-main-container {
-      .rai-checkbox-main-row {
-        display: flex;
-        .small-item {
-          display: inline-flex;
-          align-items: center;
-          border: solid 1px #dcdfe6;
-          padding: 4px 12px;
-          height: 48px;
-          width: 84px;
-          margin-right: -1px;
-          margin-bottom: -1px;
-          &:first-child {
-            margin-top: -1px;
-          }
-        }
+      border-left: 1px solid #e4e7ed;
+      padding: 0 20px;
+      .text-content {
+        position: absolute;
+        left: 10px;
+        bottom: 0;
       }
     }
-    .rai-checkbox-private-container {
-      .rai-checkbox-notice-box {
-        display: flex;
-        align-items: center;
-        border: solid 1px #dcdfe6;
-        border-left: none;
-        height: 48px;
-        margin-right: -1px;
-        margin-left: -276px;
-        padding-left: 200px;
-        .rai-checkbox-notice {
-          color: #f00;
-        }
-      }
+    .fixed-width {
+      width: 150px !important;
     }
-    .rai-checkbox-upS-box {
-      display: flex;
-      .upS-item {
-        position: relative;
-        justify-content: flex-start;
-        .checkbox-text {
-          position: absolute;
-          font-size: 12px;
-          color: #999;
-          bottom: 15px;
-          left: 20px;
-        }
-        input {
-          width: 90px;
-          height: 30px;
-          border-radius: 4px;
-          padding-left: 10px;
-          border: 1px solid #dcdfe6;
-        }
-      }
+  }
+  .bootm-list {
+    display: flex;
+    border-right: 1px solid #e4e7ed;
+    border-left: 1px solid #e4e7ed;
+    border-bottom: 1px solid #e4e7ed;
+    .bootm-list-item {
+      width: 150px;
+      padding-left: 20px;
+      border-right: 1px solid #e4e7ed;
     }
-    .rai-checkbox-item {
-      display: flex;
-      align-items: center;
-      justify-content: space-between;
-      border: solid 1px #dcdfe6;
-      margin-bottom: -1px;
-      margin-right: -1px;
-      padding-left: 12px;
-      min-height: 48px;
-      width: 168px;
-      .rai-checkbox-serve-box {
-        display: flex;
-        flex-direction: column;
-        align-items: flex-start;
-        height: unset;
-      }
+  }
+  .rai-checkbox-notice-box {
+    flex: 1;
+    text-align: center;
+    .rai-checkbox-notice {
+      color: #f00;
     }
   }
 }
-</style>
-<style lang="scss">
-#rai-checkbox-content {
-  .el-checkbox {
-    color: #333333;
+@media screen and (max-width: 1701px) {
+  .rai-checkbox-box {
+    width: 107%;
   }
 }
 </style>

+ 3 - 3
src/views/custom_manage/customList/customDetail.vue

@@ -66,7 +66,7 @@
 								<span class="con">{{raiform.Scale ==1?'50亿以下':raiform.Scale ==2?'50~100亿':raiform.Scale ==3?'100亿以上':''}}</span>
 							</li>
 							<li v-if="raiform.SpecialSurplus">
-								<label class="label-num" >专项调研剩余次数</label>
+								<label class="label-num" >专项/路演点数</label>
 								<span class="con">{{raiform.SpecialSurplus}} <span class="editsty" @click="clickDlgNumberHandler('专项调研')">明细>></span></span>
 							</li>
 							<li v-if="RoleType==='admin'" style="width:100%">
@@ -74,11 +74,11 @@
 								>客户编码</label>
 								<span class="con" style="word-break: break-word;">{{raiform.OpenCode}}</span>
 							</li>
-							<li  style="width:100%" v-if="raiform.Points">
+							<!-- <li  style="width:100%" v-if="raiform.Points">
 								<label class="label-num">研选服务点数</label>
 								<span class="con" style="word-break: break-word;">{{raiform.Points}}</span>
 								<span v-if="raiform.Points" @click="clickDlgNumberHandler('研选服务')" class="con" style="word-break: break-word;color:#409EFF;padding-left:10px;cursor: pointer;">明细>></span>
-							</li>
+							</li> -->
 						</ul>
 						<el-collapse v-model="raiCollapseOpen" accordion>
 							<el-collapse-item name="1">

+ 28 - 43
src/views/custom_manage/customList/updateServe.vue

@@ -123,8 +123,7 @@
 								权限设置
 							</label>
 							<template  v-if="companyInfo.CompanyType=='权益' || isRoleType== '权益'">
-								<raiPermissionbox  ref="raiPermissionboxRef" v-for="item in authList" :key="item.ClassifyName" :data="item" :formData="dataForm"
-								:hasNoChild="hasNoChild"></raiPermissionbox>
+								<raiPermissionbox  ref="raiPermissionboxRef" v-for="item in authList" :key="item.ClassifyName" :allData="item.Items" :formData.sync="dataForm" :raiCheckList.sync="raiCheckList"></raiPermissionbox>
 							</template>
 							<ul v-else class="menu_lists" style="width:100%">
 								<li v-for="item in authList" :key="item.ClassifyName" class="menu_item">
@@ -275,6 +274,8 @@ export default {
 			citiesEquity:[], //
 			citiesListEquity:[], //
 			citiesListpitchOn:[],
+			
+			raiCheckList:[], //权益复选框
 		};
 	},
 	// 补充协议 最大截至日期 为权限中最大的
@@ -439,24 +440,9 @@ export default {
 					/* 处理权限列表 */
 					let newArr = [];
 					if(this.companyInfo.CompanyType == '权益' || this.isRoleType== '权益') {
-						res.Data.Item.PermissionList[0].Items.map(item => {
-							item.disabled=item.isIndeterminate=false								
-							if(item.ChartPermissionId==22 && (!item.Child)) this.hasNoChild=true
-						})
-						/* 处理数据把复选框 拆分成三个*/
 						res.Data.Item.PermissionList.length&&res.Data.Item.PermissionList.forEach(item => {
-						let arr = item.Items.filter(key=> [22,21,20,19,23,156, 30, 69,148,62].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,52,20031,20032,53,54].includes(key.ChartPermissionId))
-						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
-						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
-							let obj = {
-								...item,
-								Items:arr,
-								ItemsPrivate,
-								ItemsUp,
-								ItemsBig
-							}
-							newArr.push(obj)
+							this.raiCheckList = item.CheckList || []
+							newArr.push(item)
 						})
 					} else {
 						res.Data.Item.PermissionList.forEach(item => {
@@ -515,24 +501,8 @@ export default {
 				if(res.Ret === 200) {
 					let newArr = [];
 					if(this.companyInfo.CompanyType == '权益' || this.isRoleType== '权益') {
-						res.Data.List[0].Items.map(item => {
-							item.disabled=item.isIndeterminate=false								
-							if(item.ChartPermissionId==22 && (!item.Child)) this.hasNoChild=true
-						})
-						/* 处理数据把复选框 拆分成三个*/
 						res.Data.List.length&&res.Data.List.forEach(item => {
-						let arr = item.Items.filter(key=> [22,21,20,19,23,156, 30, 69,148,62].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,52,20031,20032,53,54].includes(key.ChartPermissionId))
-						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
-						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
-							let obj = {
-								...item,
-								Items:arr,
-								ItemsPrivate,
-								ItemsUp,
-								ItemsBig
-							}
-							newArr.push(obj)
+							newArr.push(item)
 						})
 					}else {
 					res.Data.List.length&&res.Data.List.forEach(item => {
@@ -722,14 +692,28 @@ export default {
 					if (valid) {
 						/* 处理权限列表 */
 						let checkArr = [];
+						let PointsArr = []
+						let isPoints = true;
 						this.authList.forEach(item => {
 							if(item.CheckList.length) {
 								checkArr.push(item.CheckList)
 							}
 						})
-						if(!checkArr.length && this.companyInfo.CompanyType === '权益') {
-							this.$message.warning('请选择权限!');
-							return
+							
+						if((this.companyInfo.CompanyType === '权益' || this.isRoleType == '权益') && !this.isXClassCustom){
+							checkArr = this.raiCheckList
+							this.authList.forEach(item => {
+								item.Items.forEach(key => {
+									if (checkArr.includes(key.ChartPermissionId) && key.ShowInput) {
+										if (!key.Points) return isPoints = false;
+										PointsArr.push({
+											ChartPermissionId: key.ChartPermissionId,
+											Points: key.Points-0,
+										});
+									}
+								})
+								
+							})
 						}
 						// 判断
 						let flag=this.handleValidate(checkArr.flat(2))
@@ -737,9 +721,10 @@ export default {
 							this.$message.warning('同行业有重叠的合同期限,请核实后再提交')
 							return false
 						}
-						const hasFiftyTwo = checkArr.flat(2).includes(52);
-						const hasMinusSignVal = this.companyInfo.CompanyType === '权益' ? this.$refs.raiPermissionboxRef[0].minus_sign_val : 0	
-						if(hasFiftyTwo && !hasMinusSignVal) return this.$message.error('请输入研选扣点数')
+						// 判断是否有选着了权限没有输入点数
+						if(!isPoints) return this.$message.warning('请输入点数!')
+						if(!checkArr.length && this.companyInfo.CompanyType === '权益') return this.$message.warning('请选择权限!');
+
 						let PermissionIds = checkArr.flat(2).join(',');
 						let params = {
 							CompanyId:this.companyInfo.CompanyId,
@@ -755,7 +740,7 @@ export default {
 							PermissionIds:PermissionIds,
 							PackageType:Number(this.dataForm.setmeal),
 							RaiPackageType:this.dataForm.qyBigServeCheck||0,
-							Points:hasMinusSignVal||0
+							PointsArr
 						}
 
 						console.log(params);