浏览代码

品种管理

jwyu 1 年之前
父节点
当前提交
4af3003c55

+ 16 - 0
src/routes/modules/ficcXcxRoutes.js

@@ -96,6 +96,22 @@ export default [
 				name:'banner 统计',
 				hidden:true
 			},
+			{
+				path:'reportVariety',
+				component:()=> import('@/views/ficc_manage/reportVariety.vue'),
+				name:'报告分类配置',
+				hidden:true
+			},
+			{
+				path: "chapterVariety",
+				component: () => import("@/views/ficc_manage/chapterVariety.vue"),
+				name: "章节设置",
+				hidden: true,
+				meta: {
+				  pathFrom: "reportVariety",
+				  pathName: "报告分类配置",
+				},
+			  },
 
         ]
     }

+ 10 - 4
src/views/contract_manage/components/ServiceDialog.vue

@@ -113,7 +113,7 @@
               >{{ item.ClassifyName }}:</el-checkbox
             >
             <el-checkbox-group :disabled="selectRowIndex === null" v-model="item.CheckList" @change="handleCheckChange(item)">
-              <el-checkbox :disabled="contractType!=='补充协议'&&tag.PermissionName==='宏观经济'" :label="tag.ChartPermissionId" v-for="tag in item.Items" :key="tag.ChartPermissionId">{{ tag.PermissionName }}</el-checkbox>
+              <el-checkbox :disabled="contractType!=='补充协议'&&tag.IsPublic==1" :label="tag.ChartPermissionId" v-for="tag in item.Items" :key="tag.ChartPermissionId">{{ tag.PermissionName }}</el-checkbox>
             </el-checkbox-group>
           </div>
         </div>
@@ -425,6 +425,7 @@ export default {
         if (res.Ret === 200) {
           let arr = res.Data.List;
           arr.forEach((item) => {
+            item.Items=item.Items||[]
             item.CheckList = [];
             item.CheckAll = false;
             item.indeterminate = false;
@@ -467,9 +468,14 @@ export default {
       e.CheckList = e.CheckAll ? arr : [];
       e.indeterminate = false;
       // 需求更改,合同类型为补充协议时不默认勾选宏观经济
-      if(e.ClassifyName==='宏观经济'&&this.contractType!=='补充协议'){
-        e.CheckList.push(1)
-      }
+      if(this.contractType!=='补充协议'){
+        e.Items.forEach(_e=>{
+          if(_e.IsPublic==1){
+            e.CheckList.push(_e.ChartPermissionId)
+          }
+        })
+        
+      } 
     },
 
     //选择单个

+ 1 - 1
src/views/custom_manage/compontents/CpessionTable.vue

@@ -132,7 +132,7 @@ export default {
 		},
 		// 是否可选择
 		canSelect(row) {
-			return row.ChartPermissionId === 1 ? false : true;
+			return row.IsPublic == 1 ? false : true;
 		}
 	},
 	created() {},

+ 27 - 7
src/views/custom_manage/customList/addCustom.vue

@@ -160,9 +160,9 @@
 				</label>
 				<ul class="menu_lists">
 					<li v-for="item in authList" :key="item.ClassifyName" class="menu_item">
-						<el-checkbox :indeterminate="item.isIndeterminate" v-model="item.checkAll" :disabled="item.ClassifyName === '宏观经济'" @change="handleCheckAll(item)" style="marginRight:30px;fontWeight:bold;minWidth:90px;">{{item.ClassifyName+':'}}</el-checkbox>
+						<el-checkbox :indeterminate="item.isIndeterminate" v-model="item.checkAll" :disabled="setSelectPerDisabled(item)" @change="handleCheckAll(item)" style="marginRight:30px;fontWeight:bold;minWidth:90px;">{{item.ClassifyName+':'}}</el-checkbox>
 						<el-checkbox-group  v-model="item.CheckList" @change="handleChecked(item)">
-							<el-checkbox v-for="list in item.Items" :label="list.ChartPermissionId" :key="list.ChartPermissionId" class="list_item" :disabled="list.ChartPermissionId==1">{{list.PermissionName}}</el-checkbox>
+							<el-checkbox v-for="list in item.Items" :label="list.ChartPermissionId" :key="list.ChartPermissionId" class="list_item" :disabled="list.IsPublic==1">{{list.PermissionName}}</el-checkbox>
 						</el-checkbox-group>
 					</li>
 				</ul>
@@ -487,14 +487,23 @@ export default {
 				if(res.Ret === 200) {
 					let newArr = [];
 					res.Data.List.length&&res.Data.List.forEach(item => {
+						item.Items=item.Items||[]
+						const temarr=item.Items?item.Items.filter(_e=>_e.IsPublic==1):[]
 						let obj = {
-							checkAll:false,
-							isIndeterminate:item.ClassifyName === '宏观经济'?true:false,
 							...item,
+
+							// checkAll:false,
+							// isIndeterminate:item.ClassifyName === '宏观经济'?true:false,
+							// 修改为通过公有私有判断
+							checkAll:item.Items.length>0?temarr.length==item.Items.length:false,
+							isIndeterminate:item.Items.length>0?temarr.length==item.Items.length?false:item.Items.some(_e=>_e.IsPublic==1):false,
+							CheckList:item.CheckList||[],
+							
 						}
 						newArr.push(obj)
 					})
 					this.authList = newArr;
+					console.log(this.authList);
 					// if(this.dataForm.custype == '权益') {
 					// 	this.citiesEquity = res.Data.ListType ? res.Data.ListType[0].Items : [];
         			// 	this.citiesListEquity  = res.Data.List ? res.Data.List[0].Items : [];
@@ -513,6 +522,11 @@ export default {
 				}
 			})
 		},
+		//控制权限设置是否禁用编辑
+		setSelectPerDisabled(data){
+			const arr=data.Items?data.Items.filter(_e=>_e.IsPublic==1):[]
+			return arr.length==data.Items.length
+		},
 		/* 获取销售 */
 		getSale() {
 			customInterence.saleslist().then(res => {
@@ -625,13 +639,19 @@ export default {
 		/* 选择全选或取消全选 */
 		handleCheckAll(item) {
 			// 取到所有的子菜单id
-		
+
+			//获取公有的id合集
+			let publicIds=[]
+
 			
 			let ids = item.Items.map(item =>{
+				if(item.IsPublic==1){
+					publicIds.push(item.ChartPermissionId)
+				}
 				return item.ChartPermissionId
 			})
-			item.CheckList = item.checkAll ? ids : [];	
-        	item.isIndeterminate = false;
+			item.CheckList = item.checkAll ? ids : publicIds;	
+        	item.isIndeterminate = publicIds.length>0&&!item.checkAll?true:false;
 		},
 		/* 复选框組选中时 */
 		handleChecked(item) {

+ 20 - 5
src/views/custom_manage/customList/applyTurn.vue

@@ -125,7 +125,7 @@
 							</template>
 							<ul class="menu_lists" style="width:100%" v-else>
 								<li v-for="item in authList" :key="item.ClassifyName" class="menu_item">
-									<el-checkbox v-if="item.ClassifyName !== '权益'" :indeterminate="item.isIndeterminate" v-model="item.checkAll" :disabled="item.ClassifyName === '宏观经济' || item.disabled" @change="handleCheckAll(item)" style="marginRight:30px;fontWeight:bold;minWidth:90px;">{{item.ClassifyName+':'}}</el-checkbox>
+									<el-checkbox v-if="item.ClassifyName !== '权益'" :indeterminate="item.isIndeterminate" v-model="item.checkAll" :disabled="setSelectVarietyDisabled(item)" @change="handleCheckAll(item)" style="marginRight:30px;fontWeight:bold;minWidth:90px;">{{item.ClassifyName+':'}}</el-checkbox>
 									<el-checkbox-group v-model="item.CheckList" @change="handleChecked(item)">
 										<el-checkbox v-for="list in item.Items" :label="list.ChartPermissionId" :key="list.ChartPermissionId" class="list_item" :disabled="list.ChartPermissionId==1  || list.disabled">{{list.PermissionName}}</el-checkbox>
 									</el-checkbox-group>
@@ -229,6 +229,11 @@ export default {
 		};
 	},
 	methods: {
+		setSelectVarietyDisabled(item){
+			//return item.ClassifyName === '宏观经济' || item.disabled
+			return item.Items.some(_e=>_e.IsPublic==1)||item.disabled
+		},
+
 		/* 重新申请获取上次申请的合同信息并回显 */
 		getLastContract() {
 			customInterence.reapplyDetail({
@@ -273,6 +278,8 @@ export default {
 						})
 					} else {
 						res.Data.Item.PermissionList.forEach(item => {
+							item.CheckList=item.CheckList||[]
+							item.Items=item.Items||[]
 						let obj = {
 							checkAll:item.CheckList&&item.CheckList.length===item.Items.length?true:false,
 							isIndeterminate:item.CheckList&&item.CheckList.length>0 && item.CheckList.length<item.Items.length,
@@ -314,9 +321,11 @@ export default {
 						})
 					}else {
 						res.Data.List.length&&res.Data.List.forEach(item => {
+							item.CheckList=item.CheckList||[]
+							item.Items=item.Items||[]
 					    	let obj = {
-					    		checkAll:false,
-					    		isIndeterminate:item.ClassifyName === '宏观经济'?true:false,
+					    		checkAll:item.CheckList&&item.CheckList.length===item.Items.length?true:false,
+					    		isIndeterminate:item.CheckList&&item.CheckList.length>0 && item.CheckList.length<item.Items.length,
 					    		...item,
 					    	}
 					    	newArr.push(obj)
@@ -546,10 +555,16 @@ export default {
 				})
 			} else {
 				  this.authList.forEach(item => {
-					 if(item.ClassifyName == '宏观经济') {
+					//  if(item.ClassifyName == '宏观经济') {
+					if(item.Items.some(_e=>_e.IsPublic==1)){
 						 item.CheckList = [1]
+						item.Items.forEach(_e=>{
+							if(_e.IsPublic==1){
+								item.CheckList.push(_e.ChartPermissionId)
+							}
+						})
 						 item.isIndeterminate = true
-						 item.Items[1].disabled=false
+						//  item.Items[1].disabled=false
 					 }else {
 						 item.Items.forEach(key => {		
 							item.CheckList = []

+ 2 - 0
src/views/custom_manage/customList/customDetail.vue

@@ -1072,6 +1072,8 @@ export default {
 					if(res.Data.FiccItem){
 						let auth = [];
 						res.Data.FiccItem.PermissionList.forEach(item=> {
+							item.Items=item.Items||[]
+							item.CheckList=item.CheckList||[]
 							let obj = {
 								checkAll:item.CheckList&&item.CheckList.length===item.Items.length?true:false,
 								isIndeterminate:item.CheckList&&item.CheckList.length>0 && item.CheckList.length<item.Items.length,

+ 2 - 0
src/views/custom_manage/customList/customList.vue

@@ -1868,6 +1868,8 @@ ShareListDialog},
 					// res.Data.List 有值为 ficc
 					// res.Data.ListRai 有值为 权益
 					res.Data.List ? res.Data.List.forEach(item=> {
+						item.Items=item.Items||[]
+						item.CheckList=item.CheckList||[]
 						let obj = {
 							checkAll:item.CheckList&&item.CheckList.length===item.Items.length?true:false,
 							isIndeterminate:item.CheckList&&item.CheckList.length>0 && item.CheckList.length<item.Items.length,

+ 3 - 0
src/views/custom_manage/customList/editCustom.vue

@@ -741,6 +741,8 @@ export default {
 					if(res.Data.FiccItem){
 						let auth = [];
 						res.Data.FiccItem.PermissionList.forEach(item=> {
+							item.Items=item.Items||[]
+							item.CheckList=item.CheckList||[]
 							let obj = {
 								checkAll:item.CheckList&&item.CheckList.length===item.Items.length?true:false,
 								isIndeterminate:item.CheckList&&item.CheckList.length>0 && item.CheckList.length<item.Items.length,
@@ -748,6 +750,7 @@ export default {
 							}
 							auth.push(obj)
 						})
+						console.log(auth);
 						this.ficcform={...this.ficcform,authList:auth}
 					}
 					// 处理权益权限列表格式

+ 364 - 0
src/views/ficc_manage/chapterVariety.vue

@@ -0,0 +1,364 @@
+<template>
+  <div class="classify-page">
+    <div class="content-box">
+      <el-tree
+        :data="list"
+        node-key="ReportChapterTypeId"
+        :props="{
+          label: 'ReportChapterTypeName',
+          children: 'Child',
+        }"
+        check-strictly
+        empty-text="暂无数据"
+        draggable
+        :allow-drop="canDropHandle"
+        @node-drop="dropOverHandle"
+      >
+        <div class="classify-item-wrap" slot-scope="{ data }">
+          <div>
+            <span :class="['tag', data.Enabled == 1 ? 'open' : 'close']">{{
+              data.Enabled == 1 ? "启用" : "禁用"
+            }}</span>
+            <span>{{ data.ReportChapterTypeName }}</span>
+          </div>
+
+          <div class="opt-box">
+            <span
+              style="cursor: pointer; color: #409eff"
+              @click.stop="handleShowEdit(data)"
+              >小程序配置</span
+            >
+          </div>
+        </div>
+      </el-tree>
+    </div>
+
+    <!-- 分类弹窗 -->
+    <m-dialog title="小程序配置" :show.sync="aeForm.show" width="650px">
+      <div style="padding-left: 50px">
+        <el-form
+          :model="aeForm"
+          :rules="aerules"
+          ref="aeForm"
+          label-position="left"
+          hide-required-asterisk
+          label-width="100px"
+        >
+          <el-form-item
+            label="未选中icon"
+            prop="UnselectedIcon"
+          >
+            <input
+              type="file"
+              size="small"
+              name="file"
+              @change="fileSelected(1)"
+              id="file1"
+              class="true-file"
+              style="display: none"
+            />
+            <el-input
+              readonly
+              type="text"
+              v-model="aeForm.UnselectedIcon"
+              placeholder="上传icon"
+              size="medium"
+              style="width: 400px"
+            >
+              <el-button
+                slot="append"
+                type="primary"
+                size="mini"
+                @click.native="clickinput(1)"
+                >选择图片</el-button
+              >
+            </el-input>
+          </el-form-item>
+          <el-form-item
+            label="选中icon"
+            prop="selectedIcon"
+          >
+            <input
+              type="file"
+              size="small"
+              name="file"
+              @change="fileSelected(2)"
+              id="file2"
+              class="true-file"
+              style="display: none"
+            />
+            <el-input
+              readonly
+              type="text"
+              v-model="aeForm.selectedIcon"
+              placeholder="上传icon"
+              size="medium"
+              style="width: 400px"
+            >
+              <el-button
+                slot="append"
+                type="primary"
+                size="mini"
+                @click.native="clickinput(2)"
+                >选择图片</el-button
+              >
+            </el-input>
+          </el-form-item>
+          <el-form-item
+            label="带字icon"
+            prop="wordIcon"
+          >
+            <input
+              type="file"
+              size="small"
+              name="file3"
+              @change="fileSelected(3)"
+              id="file6"
+              class="true-file"
+              style="display: none"
+            />
+            <el-input
+              readonly
+              type="text"
+              v-model="aeForm.wordIcon"
+              placeholder="上传icon"
+              size="medium"
+              style="width: 400px"
+            >
+              <el-button
+                slot="append"
+                type="primary"
+                size="mini"
+                @click.native="clickinput(3)"
+                >选择图片</el-button
+              >
+            </el-input>
+          </el-form-item>
+          <el-form-item
+            label="章节配图"
+            prop="bgImg"
+          >
+            <input
+              type="file"
+              size="small"
+              name="file4"
+              @change="fileSelected(4)"
+              id="file6"
+              class="true-file"
+              style="display: none"
+            />
+            <el-input
+              readonly
+              type="text"
+              v-model="aeForm.bgImg"
+              placeholder="上传icon"
+              size="medium"
+              style="width: 400px"
+            >
+              <el-button
+                slot="append"
+                type="primary"
+                size="mini"
+                @click.native="clickinput(4)"
+                >选择图片</el-button
+              >
+            </el-input>
+          </el-form-item>
+          <el-form-item
+            label="小程序端隐藏"
+            prop="IsShow"
+          >
+            <el-switch
+              v-model="aeForm.IsShow"
+              inactive-color="#ededed"
+            ></el-switch>
+          </el-form-item>
+        </el-form>
+      </div>
+      <div slot="footer" style="margin-top: 20px">
+        <el-button @click="aeForm.show=false" style="width: 132px; height: 40px"
+          >取消</el-button
+        >
+        <el-button
+          @click="setClassifyHandle"
+          type="primary"
+          style="width: 132px; height: 40px"
+          >保存</el-button
+        >
+      </div>
+    </m-dialog>
+  </div>
+</template>
+
+<script>
+import mDialog from '@/components/mDialog.vue';
+import { bannerupload, getchapterTypeList,editChapterType } from 'api/api.js';
+export default {
+    components: { mDialog },
+  beforeRouteEnter(to, from, next) {
+    if (to.query.reportType == 'day') {
+      to.matched[1].name = '晨报章节设置'
+    } else {
+      to.matched[1].name = '周报章节设置'
+    }
+    next()
+  },
+  data() {
+    return {
+      list: [],
+      aeForm: {
+        show: false,
+        id:0,
+        UnselectedIcon:'',
+        selectedIcon:'',
+        wordIcon:'',
+        bgImg:'',
+        IsShow:false
+      }
+    }
+  },
+  mounted() {
+    this.getList()
+  },
+  methods: {
+    async getList() {
+      getchapterTypeList({ ReportType: this.$route.query.reportType == 'week' ? 'week' : 'day' }).then(res => {
+        if (res.Ret === 200) {
+          this.list = res.Data.List || []
+        }
+      })
+    },
+    handleShowEdit(data) {
+      this.aeForm = {
+        show: true,
+        id:data.ReportChapterTypeId,
+        UnselectedIcon:data.UnselectedImage,
+        selectedIcon:data.SelectedImage,
+        wordIcon:data.WordsImage,
+        bgImg:data.EditImgUrl,
+        IsShow:data.IsShow==1?true: false
+      }
+    },
+
+    setClassifyHandle(){
+        this.$refs.aeForm.validate((valid)=>{
+            if(valid){
+                let params={
+                    ReportChapterTypeId:this.aeForm.id,
+                    SelectedImage:this.aeForm.selectedIcon,
+                    UnselectedImage:this.aeForm.UnselectedIcon,
+                    WordsImage:this.aeForm.wordIcon,
+                    EditImgUrl:this.aeForm.bgImg,
+                    IsShow:this.aeForm.IsShow?1:0
+                }
+                editChapterType(params).then(res=>{
+                    if(res.Ret===200){
+                        this.$message.success( res.Msg );
+						this.getList();
+						this.aeForm.show=false;
+                    }
+                })
+            }
+        })
+    },
+
+    clickinput(type) {  //上传模拟点击
+      $(`#file${type}`).click();
+    },
+    fileSelected(type) {  //选择文件上传
+      const that = this;
+      if (document.getElementById('file' + type).files[0]) {
+        let hostfile = document.getElementById('file' + type).files[0];
+        let size = Math.floor(hostfile.size / 1024 / 1024);
+        if (size > 200) {
+          that.$message.error('上传文件大小不能大于200M!');
+          hostfile = {};
+          return false
+        }
+        if (hostfile.name.toLowerCase().includes('.png') || hostfile.name.toLowerCase().includes('.jpg') || hostfile.name.toLowerCase().includes('.jpeg')) {
+          let form = new FormData();
+          form.append('file', hostfile);  //hostfile.name
+          that.uploadloading = true;
+          bannerupload(form).then((res) => {
+            if (res.Ret === 200) {
+              if (type == 1) {
+                that.aeForm.UnselectedIcon = res.Data.ResourceUrl;
+              } else if (type == 2) {
+                that.aeForm.selectedIcon = res.Data.ResourceUrl;
+              } else if (type == 3) {
+                that.aeForm.wordIcon = res.Data.ResourceUrl
+              } else if (type == 4) {
+                that.aeForm.bgImg = res.Data.ResourceUrl
+              }
+            }
+            $("#file" + type).val('');
+            hostfile = {};
+          });
+        } else {
+          that.$message.error('上传文件格式不正确!');
+        }
+      }
+    },
+  },
+}
+</script>
+
+<style lang="scss">
+.el-cascader .el-input {
+  width: 100%;
+}
+.classify-page {
+  .content-box {
+    .el-tree-node__content {
+      padding-top: 10px;
+      padding-bottom: 10px;
+      border-bottom: 1px solid #c8cdd9;
+    }
+  }
+}
+</style>
+<style lang="scss" scoped>
+.top-wrap {
+  display: flex;
+  justify-content: space-between;
+  background: #ffffff;
+  border-radius: 4px;
+  padding: 20px;
+}
+.content-box {
+  padding: 20px;
+  margin-top: 20px;
+  height: calc(100vh - 260px);
+  overflow-y: auto;
+  background-color: #ffffff;
+  .classify-item-wrap {
+    flex: 1;
+    padding-right: 20px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    .tag {
+      display: inline-block;
+      min-width: 76px;
+      line-height: 30px;
+      text-align: center;
+      &.open {
+        background-color: #ecf2fe;
+        color: #0052d9;
+      }
+      &.close {
+        background-color: #0052d9;
+        color: #fff;
+      }
+    }
+    .opt-box {
+      .icon-drag,
+      .icon-set {
+        width: 16px;
+        height: 16px;
+        margin-left: 10px;
+      }
+    }
+  }
+}
+</style>

+ 805 - 0
src/views/ficc_manage/reportVariety.vue

@@ -0,0 +1,805 @@
+<template>
+  <div class="report-variety-page">
+    <div class="top-wrap">
+      <el-input
+        placeholder="分类名称"
+        v-model="searchVal"
+        style="max-width: 262px"
+        @change="getList"
+        clearable
+      >
+        <i slot="prefix" class="el-input__icon el-icon-search"></i>
+      </el-input>
+    </div>
+    <div class="content-box">
+      <el-tree
+        :data="list"
+        node-key="Id"
+        :props="{
+          label: 'ClassifyName',
+          children: 'Child',
+        }"
+        check-strictly
+        empty-text="暂无数据"
+        indent="76"
+      >
+        <div class="classify-item-wrap" slot-scope="{ node, data }">
+          <div>
+            <span :class="['tag', data.Enabled==1?'open':'close']">{{data.Enabled==1?'启用':'禁用'}}</span>
+            <span>{{ data.ClassifyName }}</span>
+          </div>
+
+          <div class="opt-box">
+            <span class="editsty" v-if="['晨报','周报'].includes(data.ClassifyName)" @click="chapterSetting(data)">章节设置</span>
+            <span
+              style="cursor: pointer; color: #409eff"
+              @click.stop="handleShowEdit(data)"
+              >小程序配置</span
+            >
+          </div>
+        </div>
+      </el-tree>
+    </div>
+
+    <!-- 分类弹窗 -->
+    <m-dialog title="小程序配置" :show.sync="aeForm.show" width="650px">
+      <div style="padding-left: 50px">
+        <el-form
+          :model="aeForm"
+          :rules="aerules"
+          ref="aeForm"
+          label-position="left"
+          hide-required-asterisk
+          label-width="100px"
+        >
+          <el-form-item
+            prop="showType"
+            label="展示形式"
+            v-if="aeForm.parent_id == 0"
+          >
+            <el-select
+              v-model="aeForm.showType"
+              placeholder="请选择"
+              style="width: 400px"
+            >
+              <el-option label="列表" :value="1"></el-option>
+              <!-- <el-option label="专栏" :value="2"></el-option>  -->
+              <el-option label="品种" :value="3"></el-option>
+            </el-select>
+          </el-form-item>
+          <!-- 一级目录子目录 -->
+          <el-form-item
+            label="子目录"
+            v-if="aeForm.parent_id == 0 && aeForm.showType == 1"
+          >
+            <draggable v-model="ClassifyMenuList" animation="300">
+              <div
+                style="display: inline-block; margin-right: 5px"
+                v-for="(item, index) in ClassifyMenuList"
+                :key="item"
+              >
+                <el-input
+                  v-if="item.inputVisible"
+                  v-model="item.MenuName"
+                  ref="itemINput"
+                  size="small"
+                  style="width: 90px"
+                  :autofocus="true"
+                  @keyup.enter.native="item.inputVisible = false"
+                  @blur="item.inputVisible = false"
+                ></el-input>
+                <el-tag
+                  v-else
+                  closable
+                  :disable-transitions="false"
+                  @click="showInput(index)"
+                  @close="handleClose(index)"
+                >
+                  {{ item.MenuName }}
+                </el-tag>
+              </div>
+            </draggable>
+            <div>
+              <el-input
+                v-if="inputVisible"
+                v-model="inputValue"
+                ref="saveTagInput"
+                size="small"
+                @keyup.enter.native="handleInputConfirm"
+                @blur="handleInputConfirm"
+                style="width: 90px"
+              >
+              </el-input>
+              <el-button v-else size="small" @click="showInput(-1)"
+                >+ 点击新增</el-button
+              >
+            </div>
+          </el-form-item>
+          <!-- 二级目录子目录 -->
+          <el-form-item label="子目录" v-if="aeForm.parent_id != 0&&selectMenuOpt.length>0">
+            <el-select
+              v-model="aeForm.ClassifyMenuId"
+              clearable
+              placeholder="请选择"
+              style="width: 400px"
+            >
+              <el-option
+                :label="item.MenuName"
+                :value="item.MenuId"
+                v-for="item in selectMenuOpt"
+                :key="item.MenuId"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+
+          <el-form-item
+            label="FICC页icon"
+            v-if="aeForm.parent_id == 0"
+            prop="YbFiccIcon"
+          >
+            <input
+              type="file"
+              size="small"
+              name="file"
+              @change="fileSelected(6)"
+              id="file6"
+              class="true-file"
+              style="display: none"
+            />
+            <el-input
+              readonly
+              type="text"
+              v-model="aeForm.YbFiccIcon"
+              placeholder="上传FICC页icon"
+              size="medium"
+              style="width: 400px"
+            >
+              <el-button
+                slot="append"
+                type="primary"
+                size="mini"
+                @click.native="clickinput(6)"
+                >选择图片</el-button
+              >
+            </el-input>
+          </el-form-item>
+          <el-form-item
+            label="报告合集配图"
+            v-if="aeForm.parent_id == 0 && aeForm.showType !== 2"
+            prop="YbRightBanner"
+          >
+            <input
+              type="file"
+              size="small"
+              name="file"
+              @change="fileSelected(11)"
+              id="file11"
+              class="true-file"
+              style="display: none"
+            />
+            <el-input
+              readonly
+              type="text"
+              v-model="aeForm.YbRightBanner"
+              placeholder="上传报告合集配图"
+              size="medium"
+              style="width: 400px"
+            >
+              <el-button
+                slot="append"
+                type="primary"
+                size="mini"
+                @click.native="clickinput(11)"
+                >选择图片</el-button
+              >
+            </el-input>
+          </el-form-item>
+          <el-form-item
+            label="分享链接配图"
+            prop="YbShareBgImg"
+            v-if="aeForm.parent_id == 0"
+          >
+            <input
+              type="file"
+              size="small"
+              name="file"
+              @change="fileSelected(10)"
+              id="file10"
+              class="true-file"
+              style="display: none"
+            />
+            <el-input
+              readonly
+              type="text"
+              v-model="aeForm.YbShareBgImg"
+              placeholder="上传分享链接配图"
+              size="medium"
+              style="width: 400px"
+            >
+              <el-button
+                slot="append"
+                type="primary"
+                size="mini"
+                @click.native="clickinput(10)"
+                >选择图片</el-button
+              >
+            </el-input>
+          </el-form-item>
+          
+
+          <!-- 二级分类配置列表背景图 -->
+          <el-form-item
+            label="列表背景图"
+            v-if="aeForm.parent_id != 0 && (parentIsList || parentIsVariety)"
+            prop="YbListImg"
+          >
+            <input
+              type="file"
+              size="small"
+              name="file"
+              @change="fileSelected(9)"
+              id="file9"
+              class="true-file"
+              style="display: none"
+            />
+            <el-input
+              readonly
+              type="text"
+              v-model="aeForm.YbListImg"
+              placeholder="上传列表背景图"
+              size="medium"
+              style="width: 400px"
+            >
+              <el-button
+                slot="append"
+                type="primary"
+                size="mini"
+                @click.native="clickinput(9)"
+                >选择图片</el-button
+              >
+            </el-input>
+          </el-form-item>
+          <!-- 列表、品种的二级分类 展示分享链接配图 但是不是必填的 -->
+          <el-form-item
+            label="分享链接配图"
+            prop="YbShareBgImg_"
+            v-if="aeForm.parent_id != 0 && (parentIsList || parentIsVariety)"
+          >
+            <input
+              type="file"
+              size="small"
+              name="file"
+              @change="fileSelected(12)"
+              id="file12"
+              class="true-file"
+              style="display: none"
+            />
+            <el-input
+              readonly
+              type="text"
+              v-model="aeForm.YbShareBgImg_"
+              placeholder="上传分享链接配图"
+              size="medium"
+              style="width: 400px"
+            >
+              <el-button
+                slot="append"
+                type="primary"
+                size="mini"
+                @click.native="clickinput(12)"
+                >选择图片</el-button
+              >
+            </el-input>
+          </el-form-item>
+
+          <el-form-item
+            label="关联线上路演"
+            prop="IsShow"
+            v-if="aeForm.parent_id!=0"
+          >
+            <el-switch
+              v-model="aeForm.IsShow"
+              inactive-color="#ededed"
+            ></el-switch>
+          </el-form-item>
+
+          <el-form-item
+            label="小程序端隐藏"
+            prop="IsShow"
+          >
+            <el-switch
+              v-model="aeForm.IsShow"
+              inactive-color="#ededed"
+            ></el-switch>
+          </el-form-item>
+
+        </el-form>
+      </div>
+      <div slot="footer" style="margin-top: 20px">
+        <el-button @click="cancelClassify" style="width: 132px; height: 40px"
+          >取消</el-button
+        >
+        <el-button
+          @click="setClassifyHandle"
+          type="primary"
+          style="width: 132px; height: 40px"
+          >保存</el-button
+        >
+      </div>
+    </m-dialog>
+  </div>
+</template>
+
+<script>
+import mDialog from '@/components/mDialog.vue';
+import { bannerupload, classifylist,classifyedit } from 'api/api.js';
+export default {
+  components: { mDialog },
+  computed: {
+    parentIsList() {
+      //当前上级分类是否为列表
+      let flag = false
+      if (this.aeForm.show) {
+        this.list.forEach(item => {
+          if (item.Id == this.aeForm.parent_id) {
+            if (item.ShowType == 1) {
+              flag = true
+            }
+          }
+        })
+      }
+      return flag
+    },
+    parentIsVariety() {
+      //当前上级分类是否为品种
+      let flag = false
+      if (this.aeForm.show) {
+        this.list.forEach(item => {
+          if (item.Id == this.aeForm.parent_id) {
+            if (item.ShowType == 3) {
+              flag = true
+            }
+          }
+        })
+      }
+      return flag
+    },
+    selectMenuOpt() {
+      let arr = []
+      if (this.aeForm.show) {
+        this.list.forEach(item => {
+          if (item.Id == this.aeForm.parent_id) {
+            arr = item.ClassifyMenuList || []
+          }
+        })
+      }
+      return arr
+    },
+
+  },
+  data() {
+    return {
+      searchVal:'',
+      list: [],
+      inputVisible: false,
+      inputValue: '',
+      ClassifyMenuList: [],
+      YbFiccPcIconList: [
+        {
+          label: '蓝色',
+          val: 'https://hzstatic.hzinsights.com/static/yb_wx/ficc_classify_bg_blue.png'
+        },
+        {
+          label: '绿色',
+          val: 'https://hzstatic.hzinsights.com/static/yb_wx/ficc_classify_bg_green.png'
+        },
+        {
+          label: '红色',
+          val: 'https://hzstatic.hzinsights.com/static/yb_wx/ficc_classify_bg_orange.png'
+        },
+      ],
+      aeForm: {
+        show: false,
+        classify_name: '',
+        parent_id: 0,
+        abstract: '',
+        descript: '',
+        author: '',
+        authorDsec: '',
+        classifyDsec: '',
+        authorTag: '',
+        classifyImg: '',
+        reportImg: '',
+        columImg: '',
+        bannerImg: '',
+        avatar: '',
+        label: "",
+        hasTel: 0,//是否有电话会:0-否 1-是
+        showType: 1,//展示形式 1-列表 2-专栏 3-品种
+        Sort: '',
+        YbFiccSort: '',
+        YbFiccIcon: '',
+        YbIconUrl: '',
+        YbBgUrl: '',
+        YbFiccPcIcon: '',
+        IsShow: false,//是否在小程序端展示:0-隐藏 1-显示
+        YbListImg: '',//小程序研报列表封面图
+        YbShareBgImg: '',
+        ClassifyMenuId: '',
+        YbRightBanner: '',//报告合集配图
+        relate: [],
+      },
+      aerules: {
+        abstract: [{
+          required: true,
+          message: '请输入分类简介',
+          trigger: 'blur'
+        }],
+        descript: [{
+          required: true,
+          message: '请输入分类描述',
+          trigger: 'blur'
+        }],
+        author: [{
+          required: true,
+          message: '请输入栏目作者',
+          trigger: 'blur'
+        }],
+        authorDsec: [{
+          required: true,
+          message: '请输入作者简介',
+          trigger: 'blur'
+        }],
+        classifyDsec: [{
+          required: true,
+          message: '请输入栏目简介',
+          trigger: 'blur'
+        }],
+        classifyImg: [{
+          required: true,
+          message: '请上传首页配图',
+          trigger: 'blur'
+        }],
+        reportImg: [{
+          required: true,
+          message: '请上传研报配图',
+          trigger: 'blur'
+        }],
+        bannerImg: [{
+          required: true,
+          message: '请上传头部banner',
+          trigger: 'blur'
+        }],
+        avatar: [{
+          required: true,
+          message: '请上传作者头像',
+          trigger: 'blur'
+        }],
+        columImg: [{
+          required: true,
+          message: '请上传专栏配图',
+          trigger: 'blur'
+        }],
+        label: [{
+          required: true,
+          message: '请输入分类标签',
+          trigger: 'blur'
+        }],
+        hasTel: [{
+          required: true,
+          message: '请选择',
+          trigger: 'change'
+        }],
+        showType: [{
+          required: true,
+          message: '请选择展示形式',
+          trigger: 'change'
+        }],
+        Sort: [{
+          required: true,
+          message: '请输入数字',
+          trigger: 'blur'
+        }],
+        YbFiccSort: [{
+          required: true,
+          message: '请输入数字',
+          trigger: 'blur'
+        }],
+        YbFiccIcon: [{
+          required: true,
+          message: '上传FICC页icon',
+          trigger: 'change'
+        }],
+        YbRightBanner: [{
+          required: true,
+          message: '上传报告合集配图',
+          trigger: 'change'
+        }],
+        YbFiccPcIcon: [{
+          required: true,
+          message: '选择背景颜色',
+          trigger: 'change'
+        }],
+        IsShow: [{
+          required: true,
+          message: '小程序端隐藏',
+          trigger: 'change'
+        }],
+        YbListImg: [{
+          required: true,
+          message: '上传列表背景图',
+          trigger: 'change'
+        }],
+        YbShareBgImg: [{
+          required: true,
+          message: '上传列表背景图',
+          trigger: 'change'
+        }],
+      },
+    }
+  },
+  created() {
+    this.getlist()
+  },
+  methods: {
+    chapterSetting(row){
+      let reportType;
+			if(row.ClassifyName=='周报'){
+				reportType='week'
+			}else{
+				reportType='day'
+			}
+			this.$router.push({path:'chapterVariety',query:{reportType}})
+    },
+    showInput(index){
+			if(index!=-1){
+				this.ClassifyMenuList[index].inputVisible=true
+				this.$nextTick(_ => {
+					this.$refs.itemINput[0].$refs.input.focus();
+				})
+				return
+			}
+			this.inputVisible = true;
+			this.$nextTick(_ => {
+				this.$refs.saveTagInput.$refs.input.focus();
+			});
+		},
+		handleInputConfirm() {
+			let inputValue = this.inputValue;
+			if (inputValue) {
+				this.ClassifyMenuList.push({MenuId:0,MenuName:inputValue,inputVisible:false});
+			}
+			this.inputVisible = false;
+			this.inputValue = '';
+		},
+		handleClose(index){
+			this.ClassifyMenuList.splice(index,1)
+		},
+    //保存
+    setClassifyHandle(){
+      this.$refs.aeForm.validate((valid)=>{
+        if(valid){
+          console.log(this.aeForm);
+          let params={
+            ClassifyId:this.aeForm.classify_id,
+            ClassifyLabel:this.aeForm.label,
+            ShowType:this.aeForm.showType,
+            IsShow:this.aeForm.IsShow?0:1,
+            YbFiccSort:this.aeForm.YbFiccSort?Number(this.aeForm.YbFiccSort):0,
+            YbFiccIcon:this.aeForm.YbFiccIcon,
+            YbFiccPcIcon:this.aeForm.YbFiccPcIcon,
+            YbIconUrl:this.aeForm.YbIconUrl,
+            YbBgUrl:this.aeForm.YbBgUrl,
+            YbListImg:this.aeForm.YbListImg,
+            YbShareBgImg:this.aeForm.parent_id!=0&&(this.parentIsList||this.parentIsVariety)?this.aeForm.YbShareBgImg_:this.aeForm.YbShareBgImg,
+            ClassifyMenuId:this.aeForm.ClassifyMenuId||0,
+            YbRightBanner:this.aeForm.YbRightBanner||'',
+            MenuList:[],
+            RelateTel:this.aeForm.relate.includes(1)?1:0,
+            RelateVideo:this.aeForm.relate.includes(2)?1:0,
+          }
+          params.MenuList=this.ClassifyMenuList.map(item=>{
+						return {
+							MenuId:item.MenuId,
+							MenuName:item.MenuName
+						}
+					})
+          classifyedit(params).then(res =>{
+							if( res.Ret==200 ){
+								this.$message.success( res.Msg );
+								this.getlist();
+								this.aeForm.show=false;
+							}
+					});
+
+        }
+      })
+    },
+    cancelClassify(){
+      this.aeForm.show=false
+    },
+    handleShowEdit(item) {
+      this.aeForm = {
+        show: true,
+        classify_id: parseInt(item.Id),
+        classify_name: item.ClassifyName,
+        parent_id: item.ParentId,
+        descript: item.Descript,
+        author: item.ReportAuthor,
+        authorDsec: item.AuthorDescript,
+        classifyDsec: item.Abstract,
+        authorTag: item.VipTitle,
+        classifyImg: item.ReportImgUrl,
+        reportImg: item.HomeImgUrl,
+        columImg: item.ColumnImgUrl,
+        bannerImg: item.HeadImgUrl,
+        avatar: item.AvatarImgUrl,
+        label: item.ClassifyLabel,
+        hasTel: item.HasTeleconference,
+        showType: item.ShowType,
+        Sort: item.Sort,
+        YbFiccSort: item.YbFiccSort,
+        YbFiccIcon: item.YbFiccIcon,
+        YbIconUrl: item.YbIconUrl,
+        YbBgUrl: item.YbBgUrl,
+        YbFiccPcIcon: item.YbFiccPcIcon,
+        IsShow: item.IsShow == 0 ? true : false,//是否在小程序端展示:0-隐藏 1-显示
+        YbListImg: item.YbListImg,
+        YbShareBgImg: item.YbShareBgImg,
+        ClassifyMenuId: item.ClassifyMenuId || '',
+        YbRightBanner: item.YbRightBanner || '',
+        relate: [item.RelateTel == 1 ? 1 : null, item.RelateVideo == 1 ? 2 : null],
+      }
+      this.ClassifyMenuList = item.ClassifyMenuList ? item.ClassifyMenuList.map(item => {
+        return {
+          MenuId: item.MenuId,
+          MenuName: item.MenuName,
+          inputVisible: false
+        }
+      }) : []
+      //若编辑的为列表、品种下的二级分类 需要计算YbShareBgImg_
+      //已填写则获取已填写内容
+      if (item.YbShareBgImg) {
+        this.aeForm.YbShareBgImg_ = item.YbShareBgImg
+      } else {//若未填写则取一级分类的YbShareBgImg
+        this.aeForm.YbShareBgImg_ = this.getParentYbShareBgImg(item.ParentId)
+      }
+      this.$nextTick(() => {
+        this.$refs.aeForm.clearValidate();
+      })
+    },
+    //根据上级分类id获取YbShareBgImg
+    getParentYbShareBgImg(id) {
+      let YbShareBgImg = ''
+      let parent = this.list.find((item) => { return item.Id === id })
+      if (!parent) return
+      YbShareBgImg = parent.YbShareBgImg || ''
+      return YbShareBgImg
+    },
+    getlist() {  //获取列表
+      let params = { KeyWord: this.searchVal };
+      this.listLoading = true;
+      classifylist(params).then((res) => {
+        if (res.Ret == 200) {
+          this.list = res.Data.List || [];
+
+        }
+        this.listLoading = false;
+      });
+    },
+    clickinput(type) {  //上传模拟点击
+      $(`#file${type}`).click();
+    },
+    fileSelected(type) {  //选择文件上传
+      const that = this;
+      if (document.getElementById('file' + type).files[0]) {
+        let hostfile = document.getElementById('file' + type).files[0];
+        let size = Math.floor(hostfile.size / 1024 / 1024);
+        if (size > 200) {
+          that.$message.error('上传文件大小不能大于200M!');
+          hostfile = {};
+          return false
+        }
+        if (hostfile.name.toLowerCase().includes('.png') || hostfile.name.toLowerCase().includes('.jpg') || hostfile.name.toLowerCase().includes('.jpeg')) {
+          let form = new FormData();
+          form.append('file', hostfile);  //hostfile.name
+          that.uploadloading = true;
+          bannerupload(form).then((res) => {
+            if (res.Ret === 200) {
+              if (type == 1) {
+                that.aeForm.classifyImg = res.Data.ResourceUrl;
+              } else if (type == 2) {
+                that.aeForm.bannerImg = res.Data.ResourceUrl;
+              } else if (type == 3) {
+                that.aeForm.avatar = res.Data.ResourceUrl
+              } else if (type == 4) {
+                that.aeForm.columImg = res.Data.ResourceUrl
+              } else if (type == 5) {
+                that.aeForm.reportImg = res.Data.ResourceUrl
+              } else if (type == 6) {
+                that.aeForm.YbFiccIcon = res.Data.ResourceUrl
+              } else if (type == 7) {
+                that.aeForm.YbIconUrl = res.Data.ResourceUrl
+              } else if (type == 8) {
+                that.aeForm.YbBgUrl = res.Data.ResourceUrl
+              } else if (type == 9) {
+                this.aeForm.YbListImg = res.Data.ResourceUrl
+              } else if (type == 10) {
+                this.aeForm.YbShareBgImg = res.Data.ResourceUrl
+              } else if (type == 11) {
+                this.aeForm.YbRightBanner = res.Data.ResourceUrl
+              } else if (type == 12) {
+                this.aeForm.YbShareBgImg_ = res.Data.ResourceUrl
+              }
+            }
+            $("#file" + type).val('');
+            hostfile = {};
+          });
+        } else {
+          that.$message.error('上传文件格式不正确!');
+        }
+      }
+    },
+  },
+}
+</script>
+
+<style lang="scss">
+.el-cascader .el-input {
+  width: 100%;
+}
+.report-variety-page {
+  .content-box {
+    .el-tree-node__content {
+      padding-top: 10px;
+      padding-bottom: 10px;
+      border-bottom: 1px solid #c8cdd9;
+    }
+  }
+}
+</style>
+<style lang="scss" scoped>
+.top-wrap {
+  display: flex;
+  justify-content: flex-end;
+  background: #ffffff;
+  border-radius: 4px;
+  padding: 10px 20px;
+}
+.content-box {
+  padding: 20px;
+  margin-top: 20px;
+  height: calc(100vh - 230px);
+  overflow-y: auto;
+  background-color: #ffffff;
+  .classify-item-wrap {
+    flex: 1;
+    padding-right: 20px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    .tag {
+      display: inline-block;
+      min-width: 76px;
+      line-height: 30px;
+      text-align: center;
+      &.open {
+        background-color: #ecf2fe;
+        color: #0052d9;
+      }
+      &.close {
+        background-color: #0052d9;
+        color: #fff;
+      }
+    }
+    .opt-box {
+      .icon-drag,
+      .icon-set {
+        width: 16px;
+        height: 16px;
+        margin-left: 10px;
+      }
+    }
+  }
+}
+</style>

+ 4 - 0
src/views/ficc_manage/userTableColums.js

@@ -44,6 +44,10 @@ export const tableColums = (type) => {
           label: "来源",
           key: "SourceStr",
         },
+        {
+          label: "申请品种",
+          key: "Permission",
+        },
         {
           label: "申请类型",
           key: "ApplyStatus",