Kaynağa Gözat

Merge branch 'master' into yx_2.0

bding 5 ay önce
ebeveyn
işleme
f3f80c880c
28 değiştirilmiş dosya ile 712 ekleme ve 111 silme
  1. 2 1
      config/dev.env.js
  2. 2 1
      config/prod.env.js
  3. 2 1
      config/prod.test.env.js
  4. 19 0
      src/api/modules/businessCustom.js
  5. 34 1
      src/api/modules/setApi.js
  6. 16 1
      src/routes/modules/ficcXcxRoutes.js
  7. 12 2
      src/views/Home.vue
  8. 19 5
      src/views/business_ETA_manage/addBusiness.vue
  9. 14 1
      src/views/business_ETA_manage/businessDetail.vue
  10. 70 12
      src/views/business_ETA_manage/businessEdit.vue
  11. 17 2
      src/views/business_ETA_manage/businessList.vue
  12. 30 10
      src/views/business_ETA_manage/components/AddRenewal.vue
  13. 2 2
      src/views/custom_manage/customList/applyTurn.vue
  14. 1 2
      src/views/custom_manage/customList/components/raiPermissionbox.vue
  15. 1 0
      src/views/custom_manage/customList/customDetail.vue
  16. 2 5
      src/views/custom_manage/customList/editCustom.vue
  17. 1 1
      src/views/custom_manage/customList/mixins/quartersMixin.js
  18. 2 2
      src/views/custom_manage/customList/updateServe.vue
  19. 0 1
      src/views/interaction_manage/bannerStatistics.vue
  20. 7 2
      src/views/interaction_manage/components/connectiveReportDialog.vue
  21. 104 0
      src/views/interaction_manage/components/moneyDetailsChart.vue
  22. 155 0
      src/views/interaction_manage/registrationDetails.vue
  23. 98 0
      src/views/interaction_manage/researchStatistics.vue
  24. 30 6
      src/views/interaction_manage/videoManage.vue
  25. 1 1
      src/views/rai_manage/activityManage/activityManage.vue
  26. 14 9
      src/views/rai_manage/reportManage/yanXuanSpecial.vue
  27. 40 41
      src/views/report_manage/dayilyNews.vue
  28. 17 2
      src/views/research_manage/shareRecord.vue

+ 2 - 1
config/dev.env.js

@@ -11,5 +11,6 @@ module.exports = merge(prodEnv, {
   HR_MANAGEMENT_SYSTEM:'"http://8.136.199.33:8391/login"',
   FINANCIAL_MANAGEMENT_SYSTEM:'"http://8.136.199.33:8618/login"',
   ETA_SYSTEM:'"http://8.136.199.33:7778/temppage"',
-  CYGX_WEB:'"https://clpttest.hzinsights.com"' // 查研观向网页版首页地址
+  CYGX_WEB:'"https://clpttest.hzinsights.com"', // 查研观向网页版首页地址
+  ETA_Forum:'"http://8.136.199.33:8900/autoLogin"',//ETA社区
 });

+ 2 - 1
config/prod.env.js

@@ -7,5 +7,6 @@ module.exports = {
 	HR_MANAGEMENT_SYSTEM:'"https://hr.hzinsights.com/login"',
 	FINANCIAL_MANAGEMENT_SYSTEM:'"https://fms.hzinsights.com/login"',
 	ETA_SYSTEM:'"https://eta.hzinsights.com/temppage"',
-	CYGX_WEB:'"https://web.hzinsights.com"' // 查研观向网页版首页地址
+	CYGX_WEB:'"https://web.hzinsights.com"', // 查研观向网页版首页地址
+	ETA_Forum:'"https://forumadmin.hzinsights.com/autoLogin"',//ETA社区
 }

+ 2 - 1
config/prod.test.env.js

@@ -9,5 +9,6 @@ module.exports = {
 	HR_MANAGEMENT_SYSTEM:'"http://8.136.199.33:8391/login"',
   FINANCIAL_MANAGEMENT_SYSTEM:'"http://8.136.199.33:8618/login"',
   ETA_SYSTEM:'"http://8.136.199.33:7778/temppage"',
-	CYGX_WEB:'"https://clpttest.hzinsights.com"' // 查研观向网页版首页地址
+	CYGX_WEB:'"https://clpttest.hzinsights.com"', // 查研观向网页版首页地址
+	ETA_Forum:'"http://8.136.199.33:8900/autoLogin"',//ETA社区
 }

+ 19 - 0
src/api/modules/businessCustom.js

@@ -51,6 +51,25 @@ export const businessCustomInterence = {
     addNewContract:(params)=>{
         return http.post('/eta_business/signing',params)
     },
+    /** 
+     * 编辑续约
+     * @param EtaBusinessId Integer 商家ID
+     * @param EtaBusinessContractId Integer 商家合约ID
+     * @param SigningTime String 签约时间
+     * @param ExpiredTime String 到期时间
+     * @returns 
+    */
+    editContract:(params)=>{
+        return http.post('/eta_business/edit_sign',params)
+    },
+    /**
+     * 删除续约信息
+     * @param EtaBusinessContractId Integer 商家合约ID
+     * @returns 
+     */
+    removeContract:(params)=>{
+        return http.post('/eta_business/remove_sign',params)
+    },
     /**
      * 修改销售
      * @param EtaBusinessId Integer 商家ID

+ 34 - 1
src/api/modules/setApi.js

@@ -325,7 +325,40 @@ const departInterence = {
 	 */
 	getBannerStatistic:params=>{
 		return http.get('/banner/statistic',params)
-	}
+	},
+	/**
+	 * 调研报名统计
+	 * @returns 
+	 */
+	getResearchStatistics:params=>{
+		return http.get('/banner/research_statistics/list',params)
+	},
+	/**
+	 * 调研报名统计-活动报名详情
+	 * @returns 
+	 */
+	getResearchStatisticsItem:params=>{
+		return http.get('/banner/research_statistics/item',params)
+	},
+	/**
+	 * 调研报名统计-分享人报名详情
+	 * @returns 
+	 */
+	getResearchStatisticsDetail:params=>{
+		return http.get('/banner/research_statistics/detail',params)
+	},
+	/**
+	 * 调研报名修改付款金额
+	 * @returns 
+	 */
+	getResearchStatisticsAmount:params=>{
+		return http.get('/banner/research_statistics/amount',params)
+	},
+
+	//获取跳转到ETA社区的code
+	getToETAForumCode:()=>{
+		return http.get('/sysuser/forum_admin/auth_code',{})
+	},
 }
 
 /* 视频管理 */

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

@@ -112,7 +112,22 @@ export default [
 				  pathName: "报告分类配置",
 				},
 			  },
-
+			{
+				path:'researchStatisticsFICC',
+				component:()=> import('@/views/interaction_manage/researchStatistics.vue'),
+				name:'调研报名统计',
+				hidden:true
+			},
+			{
+				path:'registrationDetails',
+				component:()=> import('@/views/interaction_manage/registrationDetails.vue'),
+				name:'报名详情',
+				hidden:true,
+				meta: {
+					pathFrom: "researchStatisticsFICC",
+					pathName: "调研报名统计",
+				}
+			},
         ]
     }
 ]

+ 12 - 2
src/views/Home.vue

@@ -62,12 +62,13 @@
                   </template>
                   <el-menu-item
                     v-for="child in item.children"
-                    :index="child.path"
+                    :index="child.path=='etaForum'?null:child.path"
                     :path="child.path"
                     :key="child.path"
                     v-show="!child.hidden"
                   >
-                    <a :href="`/${child.path}`" :style="`display: block;color:${child.path===activePath ? '#FDB863 ' : '#fff'}`" @click="(e) => e.preventDefault() ">
+                    <span v-if="child.path==='etaForum'" :style="`display: block;color:${child.path===activePath ? '#FDB863 ' : '#fff'}`" @click.prevent="linkToOtherMS('ETA_Forum')">{{child.name}}</span>
+                    <a v-else :href="`/${child.path}`" :style="`display: block;color:${child.path===activePath ? '#FDB863 ' : '#fff'}`" @click="(e) => e.preventDefault() ">
                       {{child.name}}
                     </a>
                   </el-menu-item>
@@ -733,6 +734,15 @@ export default {
           href=`${href}?code=${res.Data}`
         }
       }
+      if(key==='ETA_Forum'){
+        const res=await departInterence.getToETAForumCode()
+        if(res.Ret===200){
+          href=`${href}?code=${res.Data}`
+        }else{
+          this.$message.warning(res.Msg)
+          return
+        }
+      }
       window.open(href,'_blank');
     },
     // 切换通知消息类型

+ 19 - 5
src/views/business_ETA_manage/addBusiness.vue

@@ -54,7 +54,7 @@
                     <el-form-item label="社会信用码" prop="creditCode">
                         <el-input disabled placeholder="请输入社会信用码" v-model="firstFormData.creditCode"/>
                     </el-form-item>
-                    <el-form-item label="商家地址" prop="address">
+                    <el-form-item label="商家地址" prop="address" v-if="firstFormData.areaType=='国内'">
                         <el-cascader 
                             v-model="firstFormData.address"
                             :props="locationProps"
@@ -64,6 +64,16 @@
                             placeholder="请选择客户地址" 
                         />
                     </el-form-item>
+                    <el-form-item label="所属国家" prop="nation" v-else>
+                        <el-select v-model="firstFormData.nation" placeholder="请选择所属国家" filterable style="width: 360px;">
+                            <el-option :label="item.cnName" :value="item.cnName" v-for="item in countryData" :key="item.code" >
+                            <div style="display: flex;justify-content: space-between;">
+                                <span>{{ item.cnName }}</span>
+                                <span style="color: #8492a6; font-size: 13px">{{ item.code }}</span>
+                            </div>
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
                 </div>
                 <div class="form-line">
                     <el-form-item label="决策人" prop="decisionMaker">
@@ -174,9 +184,11 @@ import { customInterence,roadshowInterence,businessCustomInterence } from '@/api
 import autocomplete from "@/components/autocomplete.vue";
 import Steps from "./components/Steps.vue";
 import {locationOptions} from "@/views/custom_manage/customList/location"
+import country from "@/utils/countryData"
 export default {
     components: {autocomplete,Steps},
     data() {
+        this.countryData = country
         return {
             /* 城市地址数据 */
             locationOptions,
@@ -221,6 +233,7 @@ export default {
                 name:[{ required: true, message: '请输入商家名称', trigger: 'blur' },],
                 creditCode:[{ required: true, message: '请输入社会信用码', trigger: 'blur' },],
                 address:[{ required: true, message: '请选择商家地址', trigger: 'change' },],
+                nation:[{ required: true, message: '请选择所属国家', trigger: 'change' },],
                 decisionMaker:[{required: true, message: '请输入决策人', trigger: 'blur' },],
                 teamSize:[{required: true, message: '请选择研究团队规模', trigger: 'change' },],
                 industry:[{required: true, message: '请选择所属行业', trigger: 'change' },],
@@ -236,6 +249,7 @@ export default {
                 name:'',
                 creditCode:'',
                 address:'',
+                nation:'',
                 decisionMaker:'',
                 teamSize:'',
                 fundsize:'',
@@ -255,11 +269,11 @@ export default {
                 console.log('watch?',newVal)
                 if(newVal==='海外'){
                     this.firstFormData.creditCode = 'HZ' + new Date().getTime()
-                    this.firstFormData.address = ['海外','其他市']
-                    this.selectRegion(['海外','其他市'])
+                    // this.firstFormData.address = ['海外','其他市']
+                    // this.selectRegion(['海外','其他市'])
                 }else{
                     this.firstFormData.creditCode = ''
-                    this.firstFormData.address = []
+                    // this.firstFormData.address = []
                 }
             }
         }
@@ -278,6 +292,7 @@ export default {
                 RegionType:params.areaType,
                 Province:params.province,
                 City:params.city,
+                Nation:params.nation,
                 SellerId:Number(cascaderNodes[0]?cascaderNodes[0].value:0),
                 SellerName:cascaderNodes[0]?cascaderNodes[0].label:'',
                 Leader:params.decisionMaker,
@@ -302,7 +317,6 @@ export default {
                         if(res.Ret!==200) return 
                         this.step++
                     })
-                    
                 }
             })
         },

+ 14 - 1
src/views/business_ETA_manage/businessDetail.vue

@@ -31,7 +31,7 @@
                                 <el-radio label="海外" border>海外</el-radio>
                             </el-radio-group>
                         </el-form-item>
-                        <el-form-item label="商家地址" prop="address">
+                        <el-form-item label="商家地址" prop="address" v-if="firstFormData.RegionType=='国内'">
                             <el-cascader 
                                 v-model="firstFormData.address"
                                 :props="locationProps"
@@ -41,6 +41,16 @@
                                 placeholder="请选择客户地址" 
                             />
                         </el-form-item>
+                        <el-form-item label="所属国家" prop="Nation" v-else>
+                            <el-select v-model="firstFormData.Nation" placeholder="请选择所属国家" filterable style="width: 360px;">
+                                <el-option :label="item.cnName" :value="item.cnName" v-for="item in countryData" :key="item.code" >
+                                <div style="display: flex;justify-content: space-between;">
+                                    <span>{{ item.cnName }}</span>
+                                    <span style="color: #8492a6; font-size: 13px">{{ item.code }}</span>
+                                </div>
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
                     </div>
                     <div class="form-line">
                         <el-form-item label="社会信用码" prop="CreditCode">
@@ -157,9 +167,11 @@ import { customInterence , businessCustomInterence} from '@/api/api.js'
 import Steps from "./components/Steps.vue";
 import AddRenewal from "./components/AddRenewal";
 import {locationOptions} from "@/views/custom_manage/customList/location"
+import country from "@/utils/countryData"
 export default {
     components: {Steps,AddRenewal},
     data() {
+        this.countryData = country
         return {
             locationOptions,
             locationProps:{
@@ -189,6 +201,7 @@ export default {
                 BusinessName:'',
                 CreditCode:'',
                 Address:'',
+                Nation:'',
                 Leader:'',
                 ResearchTeamSize:'',
                 CapitalScale:'',

+ 70 - 12
src/views/business_ETA_manage/businessEdit.vue

@@ -30,7 +30,7 @@
                                 <el-radio label="海外" border>海外</el-radio>
                             </el-radio-group>
                         </el-form-item>
-                        <el-form-item label="商家地址" prop="address">
+                        <el-form-item label="商家地址" prop="address" v-if="firstFormData.RegionType=='国内'">
                             <el-cascader 
                                 v-model="firstFormData.address"
                                 :props="locationProps"
@@ -40,6 +40,16 @@
                                 placeholder="请选择客户地址" 
                             />
                         </el-form-item>
+                        <el-form-item label="所属国家" prop="Nation" v-else>
+                            <el-select v-model="firstFormData.Nation" placeholder="请选择所属国家" filterable style="width: 360px;">
+                                <el-option :label="item.cnName" :value="item.cnName" v-for="item in countryData" :key="item.code" >
+                                <div style="display: flex;justify-content: space-between;">
+                                    <span>{{ item.cnName }}</span>
+                                    <span style="color: #8492a6; font-size: 13px">{{ item.code }}</span>
+                                </div>
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
                     </div>
                     <div class="form-line">
                         <el-form-item label="社会信用码" prop="CreditCode">
@@ -95,6 +105,7 @@
                 </el-form>
             </div>
             <div class="second-step-form-wrap" v-show="step===2">
+                <el-button type="primary" @click="addRenewalHandle" style="margin-top: 15px;">添加续约</el-button>
                 <el-table :data="recordData" border>
                     <el-table-column
                         v-for="item in tableColOpts"
@@ -104,8 +115,14 @@
                         align="center"
                     >
                     </el-table-column>
+                    <el-table-column label="操作" align="center">
+                        <template slot-scope="scope">
+                            <span class="editsty" @click="editRenewal(scope.row)" style="padding: 0 3px;">编辑</span>
+                            <span class="deletesty" @click="deleteRenewal(scope.row)" style="padding: 0 3px;">删除</span>
+                        </template>
+                    </el-table-column>
                 </el-table>
-                <el-button type="text" @click="showRenewal=true">添加续约</el-button>
+                <!-- <el-button type="text" @click="showRenewal=true">添加续约</el-button> -->
             </div>
         </div>
         <div class="business-other">
@@ -133,7 +150,7 @@
 
         <!-- 添加续约 -->
         <el-dialog
-            title="添加续约"
+            :title="renewalDiaTitle"
             :visible.sync="showRenewal"
             :modal-append-to-body="false"
             :close-on-click-modal="false"
@@ -142,7 +159,8 @@
         >
             <AddRenewal 
                 @addRenewal="handleAddRenewal"
-                @close="showRenewal=false"/>
+                @close="showRenewal=false"
+                :renewalForm="renewalForm"/>
         </el-dialog>
     </div>
 </template>
@@ -152,9 +170,11 @@ import { customInterence , businessCustomInterence} from '@/api/api.js'
 import Steps from "./components/Steps.vue";
 import AddRenewal from "./components/AddRenewal";
 import {locationOptions} from "@/views/custom_manage/customList/location"
+import country from "@/utils/countryData"
 export default {
     components: {Steps,AddRenewal},
     data() {
+        this.countryData = country
         return {
             locationOptions,
             locationProps:{
@@ -184,6 +204,7 @@ export default {
                 BusinessName:'',
                 CreditCode:'',
                 Address:'',
+                Nation:'',
                 Leader:'',
                 ResearchTeamSize:'',
                 CapitalScale:'',
@@ -194,6 +215,7 @@ export default {
                 City:''
             },
             rules:{
+                Nation:[{ required: true, message: '请选择所属国家', trigger: 'change' },],
                 address:[{ required: true, message: '请选择商家地址', trigger: 'change' },],
                 decisionMaker:[{required: true, message: '请输入决策人', trigger: 'blur' },],
                 teamSize:[{required: true, message: '请选择研究团队规模', trigger: 'change' },],
@@ -204,7 +226,7 @@ export default {
             recordData:[],
             tableColOpts:[
                 {
-                    label:'签约时间',
+                    label:'运维时间',
                     key:'SigningTime'
                 },{
                     label:'到期时间',
@@ -216,6 +238,8 @@ export default {
             ],
             activities:[],
             showRenewal:false,
+            renewalDiaTitle:"添加续约",
+            renewalForm:{}
         }
     },
     created() {
@@ -277,13 +301,13 @@ export default {
         // 保存商家
         handleSaveDetail(){
             const {EtaBusinessId,CapitalScale,
-                   address,Leader,IndustryId,
+                   address,Leader,IndustryId,Nation,
                    ResearchTeamSize,UserMax} = this.firstFormData
             const IndustryName = this.tradeArr.find(item=>item.IndustryId===IndustryId).IndustryName
             businessCustomInterence.editBusiness({
                 EtaBusinessId,Leader,
                 IndustryName,CapitalScale,
-                ResearchTeamSize,
+                ResearchTeamSize,Nation,
                 IndustryId:Number(IndustryId),
                 UserMax:Number(UserMax),
                 Province:address[0],
@@ -294,15 +318,49 @@ export default {
                 this.getBusinessDetail()
             })
         },
-        //添加续约
-        handleAddRenewal({signDate,expirationDate}){
-            businessCustomInterence.addNewContract({
+        // 添加续约
+        addRenewalHandle(){
+            this.renewalForm={}
+            this.renewalDiaTitle="添加续约"
+            this.showRenewal=true
+        },
+        // 编辑续约
+        editRenewal(row){
+            this.renewalDiaTitle="编辑续约"
+            this.renewalForm={
+                id:row.EtaBusinessContractId,
+                signDate:row.SigningTime,
+                expirationDate:row.ExpiredTime
+            }
+            this.showRenewal=true
+        },
+        deleteRenewal(row){
+            this.$confirm("是否确认删除该签约信息?", "提示", {
+                type: "warning"
+            }).then(() => {
+                businessCustomInterence.
+                removeContract({EtaBusinessContractId:row.EtaBusinessContractId})
+                .then(res=>{
+                    if(res.Ret == 200){
+                        this.$message.success("删除成功")
+                        this.getTableData(Number(this.$route.query.id))
+                        this.getTimeLineData(Number(this.$route.query.id))
+                    }
+                })
+            }).catch(() => {});
+        },
+        //添加续约-保存
+        handleAddRenewal({signDate,expirationDate,id}){
+            // id-商家合约ID
+            let api = Number(id) ? 'editContract' : 'addNewContract'
+            businessCustomInterence[api]({
                 EtaBusinessId:Number(this.$route.query.id),
+                EtaBusinessContractId:Number(id),
                 SigningTime:signDate,
                 ExpiredTime:expirationDate
             }).then(res=>{
                 if(res.Ret!==200) return 
-                this.$message.success('添加续约成功')
+                this.$message.success(this.renewalDiaTitle+'成功')
                 this.showRenewal=false
                 this.getTableData(Number(this.$route.query.id))
                 this.getTimeLineData(Number(this.$route.query.id))
@@ -345,7 +403,7 @@ export default {
             }
         }
         .el-table{
-            margin-top: 30px;
+            margin-top: 15px;
         }
     }
     .business-other{

+ 17 - 2
src/views/business_ETA_manage/businessList.vue

@@ -57,6 +57,14 @@
                     @change="changeSelectOptions('location')" 
                     placeholder="请选择客户地址" 
                 />
+                <el-select v-model="nation" placeholder="请选择所属国家" filterable clearable @change="changeSelectOptions('nation')">
+                    <el-option :label="item.cnName" :value="item.cnName" v-for="item in countryData" :key="item.code" >
+                        <div style="display: flex;justify-content: space-between;">
+                            <span>{{ item.cnName }}</span>
+                            <span style="color: #8492a6; font-size: 13px">{{ item.code }}</span>
+                        </div>
+                    </el-option>
+                </el-select>
                 <el-select 
                     v-model="signStatus" 
                     placeholder="请选择签约状态" 
@@ -94,6 +102,9 @@
                             <span v-else-if="item.key==='BusinessName'" class="link" @click="handleShowDetail(scope.row)">
                                 {{ scope.row.BusinessName }}
                             </span>
+                            <span v-else-if="item.key==='Address'">
+                                {{ scope.row.RegionType=='海外'?scope.row.Nation || scope.row.Address:scope.row.Address }}
+                            </span>  
                             <span v-else>{{scope.row[item.key]}}</span>
                         </template>
                     </el-table-column>
@@ -175,9 +186,11 @@ import { customInterence ,businessCustomInterence , roadshowInterence} from '@/a
 import {locationOptions} from "@/views/custom_manage/customList/location"
 import AddRenewal from './components/AddRenewal.vue'
 import ModifySaller from './components/ModifySaller.vue'
+import country from "@/utils/countryData"
 export default {
     components:{AddRenewal,ModifySaller},
     data() {
+        this.countryData = country
         return {
             /* dialog */
             showRenewal:false,//显示添加续约
@@ -194,6 +207,7 @@ export default {
             valueLocation:[],
             provinceValue:'',
             cityValue:'',
+            nation:'',
             locationProps:{
                 multiple: true,
                 value:'name',
@@ -234,7 +248,7 @@ export default {
                     key:'BusinessCode'
                 },
                 {
-                    label:'商家地址',
+                    label:'商家地址/所属国家',
                     key:'Address'
                 },
                 {
@@ -246,7 +260,7 @@ export default {
                     key:'SigningStatus'
                 },
                 {
-                    label:'最新签约时间',
+                    label:'运维开始时间',
                     key:'SigningTime',
                     sort:true
                 },
@@ -321,6 +335,7 @@ export default {
                 Province:this.provinceValue,
                 City:this.cityValue,
                 IndustryId:Number(this.trade),
+                Nation:this.nation,
                 PageSize:this.pageSize,
                 CurrentIndex:this.page,
                 SortParam:this.sortParam,

+ 30 - 10
src/views/business_ETA_manage/components/AddRenewal.vue

@@ -7,7 +7,7 @@
             label-width="100px" 
             class="demo-ruleForm"
         >
-            <el-form-item label="签约时间" prop="signDate">
+            <el-form-item label="运维时间" prop="signDate">
                 <el-date-picker
                     v-model="ruleForm.signDate"
                     type="date"
@@ -33,13 +33,34 @@
 
 <script>
 export default {
+    props:{
+        renewalForm:{
+            type:Object,
+            default:()=>{
+                return {}
+            }
+        }
+    },
+    watch:{
+        renewalForm:{
+            handler:function(value){
+                if(value.id){
+                    this.ruleForm.id = value.id || 0
+                    this.ruleForm.signDate = value.signDate || ''
+                    this.ruleForm.expirationDate = value.expirationDate || ''
+                }
+            },
+            immediate:true
+        }
+    },
     data() {
         return {
             rules:{
-                signDate:[{required: true, message: '请选择签署日期', trigger: 'change' },],
-                expirationDate:[{required: true, message: '请选择签署日期', trigger: 'change' },],
+                signDate:[{required: true, message: '请选择运维时间', trigger: 'change' },],
+                expirationDate:[{required: true, message: '请选择到期时间', trigger: 'change' },],
             },
             ruleForm:{
+                id:0,
                 signDate:'',
                 expirationDate:''
             }
@@ -51,7 +72,7 @@ export default {
                 if(valid){
                     const flag=this.$moment(this.ruleForm.signDate).isBefore(this.ruleForm.expirationDate);
                     if(!flag){
-                        this.$message.warning('到期时间不得早于签约时间')
+                        this.$message.warning('到期时间不得早于运维时间')
                         return
                     }
                     this.$emit('addRenewal',this.ruleForm)
@@ -60,9 +81,12 @@ export default {
             })
         },
         initForm(){
+            this.ruleForm.id = 0
             this.ruleForm.signDate = ''
             this.ruleForm.expirationDate = ''
-            this.$refs.ruleForm.resetFields();
+            this.$nextTick(()=>{
+                this.$refs.ruleForm.clearValidate();
+            })
         },
         handleClose(){
             this.initForm()
@@ -70,8 +94,4 @@ export default {
         }
     },
 }
-</script>
-
-<style>
-
-</style>
+</script>

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

@@ -281,7 +281,7 @@ export default {
 						/* 处理数据把复选框 拆分成三个*/
 						res.Data.Item.PermissionList.length&&res.Data.Item.PermissionList.forEach(item => {
 						let arr = item.Items.filter(key=> [22,21,20,19,23,30].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,20031,20032,52,53,54].includes(key.ChartPermissionId))
+						let ItemsPrivate = item.Items.filter(key=> [29,31,20031,20032,52,53,54,138,62].includes(key.ChartPermissionId))
 						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
 						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
 							let obj = {
@@ -325,7 +325,7 @@ export default {
 						/* 处理数据把复选框 拆分成三个*/
 						res.Data.List.length&&res.Data.List.forEach(item => {
 						let arr = item.Items.filter(key=> [22,21,20,19,23,30].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,20031,20032,52,53,54].includes(key.ChartPermissionId))
+						let ItemsPrivate = item.Items.filter(key=> [29,31,20031,20032,52,53,54,138,62].includes(key.ChartPermissionId))
 						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
 						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
 							let obj = {

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

@@ -42,7 +42,7 @@
         <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':itemsPrivateWidth[inP]}"
+            :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>
@@ -65,7 +65,6 @@
   export default {
     name:'raiPermissionbox',
     data() {
-		  this.itemsPrivateWidth=['84px','146px','260px','84px']
       return {
         minus_sign_val:''
       }

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

@@ -235,6 +235,7 @@
 							<span :class="{'isShared':scope.row.IsShared}">{{scope.row.RealName}}</span>
 						</template>
 					</el-table-column>
+					<el-table-column prop="Position" label="职位" align="center" min-width="80px"></el-table-column>
 					<el-table-column
 					prop="Mobile"
 					label="手机号"

+ 2 - 5
src/views/custom_manage/customList/editCustom.vue

@@ -257,6 +257,7 @@
 							<span>{{scope.row.RealName}}</span>
 						</template>
 					</el-table-column>
+					<el-table-column prop="Position" label="职位" align="center" min-width="80px"></el-table-column>
 					<el-table-column
 					prop="Mobile"
 					label="手机号"
@@ -1230,10 +1231,6 @@ export default {
 		},
 		/* 导入联系人打开弹窗 */
 		async importHandle() {
-			// this.isShowImportDia = true;
-			// let have_card = this.userTable.some(item => {
-			// 	return item.BusinessCardUrl;
-			// })
 			let totalRes=await customInterence.companyUserTotal({CompanyId:this.companyId})
 			if(totalRes.Ret===200){
 				if(totalRes.Data.Total>=1) {
@@ -1354,11 +1351,11 @@ export default {
 	mounted() {
 		this.getDetail();
 		this.getSale();
-		this.getuserTable();
 		this.getCustomerSourceList()
 		this.getIndustry('ficc')
 		this.getIndustry('权益')
 		this.roleDepart = localStorage.getItem('RoleType') || '';
+		this.getuserTable();
 	},
 }
 </script>

+ 1 - 1
src/views/custom_manage/customList/mixins/quartersMixin.js

@@ -84,7 +84,7 @@ export default {
   watch: {
     selectedQuarters(newValue, oldValue) {
       if (!newValue.length) return;
-      if (!this.isConsecutiveSelection() && this.showAlert) {
+      if (!this.isConsecutiveSelection() && this.showAlert && this.isXClassCustom) {
         this.showAlert = false;
         this.selectedQuarters.pop();
         this.$message.error("只能选择相邻的季度");

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

@@ -433,7 +433,7 @@ export default {
 						/* 处理数据把复选框 拆分成三个*/
 						res.Data.Item.PermissionList.length&&res.Data.Item.PermissionList.forEach(item => {
 						let arr = item.Items.filter(key=> [22,21,20,19,23,30].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,52,20031,20032,53,54].includes(key.ChartPermissionId))
+						let ItemsPrivate = item.Items.filter(key=> [29,31,52,20031,20032,53,54,138,62].includes(key.ChartPermissionId))
 						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
 						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
 							let obj = {
@@ -509,7 +509,7 @@ export default {
 						/* 处理数据把复选框 拆分成三个*/
 						res.Data.List.length&&res.Data.List.forEach(item => {
 						let arr = item.Items.filter(key=> [22,21,20,19,23,30].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,52,20031,20032,53,54].includes(key.ChartPermissionId))
+						let ItemsPrivate = item.Items.filter(key=> [29,31,52,20031,20032,53,54,138,62].includes(key.ChartPermissionId))
 						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
 						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
 							let obj = {

+ 0 - 1
src/views/interaction_manage/bannerStatistics.vue

@@ -12,7 +12,6 @@
         </thead>
         <tbody v-for="item in tableData" :key="item.ViewHistoryID">
           <tr v-for="(_item, index) in item.SourceList" :key="_item.LastUpdatedTime">
-            <!-- <td class="thead-rs" :rowspan="item.SourceList.length" v-if="index == 0"> <img :src="item.BannerUrl" class="table-img" alt="" /></td> -->
             <td class="thead-rs" :rowspan="item.SourceList.length" v-if="index == 0">{{ item.Remark }}</td>
             <td class="thead-rs" :rowspan="item.SourceList.length" v-if="index == 0">{{ item.StartDate }} -- {{ item.EndDate }}</td>
             <td class="thead-rs" :rowspan="item.SourceList.length" v-if="index == 0">{{ item.Pv }}</td>

+ 7 - 2
src/views/interaction_manage/components/connectiveReportDialog.vue

@@ -61,11 +61,15 @@ export default {
     isShow:{
       type:Boolean,
       default:false
+    },
+    reportId:{
+      type:Number,
+      default:0
     }
   },
   data() {
     return {
-      ReportId:'',
+      ReportId:0,
       searchTitle:'',
       searchType:'',
       reportTypeList:[],
@@ -75,7 +79,7 @@ export default {
   watch:{
     isShow(val){
       if(val){
-        this.ReportId=''
+        this.ReportId=this.reportId
         this.searchTitle=''
         this.searchType=''
         this.getTableData()
@@ -109,6 +113,7 @@ export default {
     saveHandle(){
       //检查该报告是否已关联视频
       const item = this.reportList.find(i=>i.ReportId==this.ReportId)
+      if(!item) return 
       if(item.BindVideo){
         this.$message.error(`该报告已关联${item.BindVideoTitle},请重新选择`)
         return 

+ 104 - 0
src/views/interaction_manage/components/moneyDetailsChart.vue

@@ -0,0 +1,104 @@
+<template>
+  <div class="bar-chart" ref="moneyChart" style="height: 400px"></div>
+</template>
+
+<script>
+export default {
+  name: "",
+  props: {
+    title: {
+      type: String,
+    },
+    chartData: {
+      type: Array,
+      default: [],
+    },
+  },
+  data() {
+    return {
+      dateList: "",
+    };
+  },
+  watch: {
+    chartData: {
+      handler(newChart) {
+        if (newChart.length == 2) {
+          this.drawChart();
+        }
+      },
+    },
+  },
+  methods: {
+    drawChart() {
+      const chart = this.$refs.moneyChart;
+      const transformedData = this.chartData.map((item) => ({
+        name: item.Name, // 将 Name 转换为 name
+        value: item.Percentage, // 将 Percentage 转换为 value
+        details: {
+          Count: item.Count,
+          Amount: item.Amount,
+        },
+      }));
+      if (chart) {
+        const myChart = echarts.init(chart);
+        const option = {
+          tooltip: {
+            show: true,
+            trigger: "item",
+            formatter: function (params) {
+              return `${params.name}${params.value}%`;
+            },
+          },
+          legend: {
+            // top: "0%",
+            left: "center",
+          },
+          color: ["#409EFF", "#BDD7F1"],
+          series: [
+            {
+              name: "",
+              type: "pie",
+              radius: "70%",
+              avoidLabelOverlap: false,
+              label: {
+                show: true,
+                position: "outside",
+                //position: "inner",
+                formatter(params) {
+                  const details = params.data.details;
+                  console.log(params);
+                  let str = details.Amount ? `付款金额:${details.Amount || ""}元` : "";
+                  return `人数:${details.Count}人\n${str}`;
+                },
+                rich: {
+                  title: {},
+                  value: {},
+                  detail: {},
+                },
+              },
+              labelLine: {},
+              data: transformedData,
+            },
+          ],
+        };
+        myChart.setOption(option);
+        window.addEventListener("resize", function () {
+          myChart.resize();
+        });
+      }
+      this.$on("hook:destroyed", () => {
+        window.removeEventListener("resize", function () {
+          myChart.resize();
+        });
+      });
+    },
+  },
+  created() {},
+  mounted() {
+    // this.$nextTick(() => {
+    //   this.drawChart();
+    // });
+  },
+};
+</script>
+<style lang="scss" scoped></style>

+ 155 - 0
src/views/interaction_manage/registrationDetails.vue

@@ -0,0 +1,155 @@
+<template>
+  <div class="container registration-details">
+    <div class="content">
+      <div>
+        <el-table :data="tableData" show-summary style="width: 538px" border>
+          <el-table-column align="center" prop="RealName" label="分享人">
+            <template slot-scope="{ row }">
+              <span>{{ row.RealName }}({{ row.CompanyName }})</span>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="Count" label="报名数量" width="196">
+            <template slot-scope="{ row }">
+              <span class="editsty" @click="numberHandler(row)">{{ row.Count }}</span>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <div class="chart-content">
+        <moneyDetailsChart :chartData="chartData" />
+      </div>
+    </div>
+    <!-- 点击量详情 -->
+    <el-dialog :visible.sync="showDetails" :modal-append-to-body="false" v-dialogDrag width="65vw" @close="cancelHandle">
+      <div slot="title">{{ shareInfo.RealName }}-报名详情</div>
+      <div style="margin-bottom: 118px">
+        <el-table :data="detailsList" style="width: 100%; margin: 20px 0 30px" ref="clickNumberRef" border @sort-change="detailSortChange">
+          <el-table-column prop="CustomCompanyName" label="公司名称" align="center"> </el-table-column>
+          <el-table-column prop="CustomName" label="姓名" align="center"> </el-table-column>
+          <el-table-column prop="CustomMobile" label="手机号" align="center"> </el-table-column>
+          <el-table-column prop="CreateTime" label="报名时间" align="center" min-width="140"> </el-table-column>
+          <el-table-column prop="Amount" label="付款金额(元)" align="center" min-width="140">
+            <template slot-scope="scope">
+              <div v-if="scope.row.Enable == 1">
+                <!-- 如果数据不为空,则双击后显示输入框 -->
+                <div v-if="scope.row.isInput" @dblclick="handleDoubleClick(scope.$index, scope.row)">
+                  <span class="editsty" v-if="scope.row.isInput">
+                    {{ scope.row.Amount }}
+                  </span>
+                </div>
+                <!-- 如果数据为空,则默认显示输入框 -->
+                <div v-else>
+                  <el-input style="width: 90%" type="number" @input="handleInput(scope.row)" v-model.number="scope.row.Amount" @blur="handleBlur(scope.$index, scope.row)"></el-input>
+                </div>
+              </div>
+              <span v-else>{{ scope.row.Amount }}</span>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { departInterence } from "@/api/api.js";
+
+import moneyDetailsChart from "./components/moneyDetailsChart.vue";
+export default {
+  data() {
+    return {
+      tableData: [],
+      showDetails: false,
+      detailsList: [],
+      chartData: [],
+      shareInfo: {},
+    };
+  },
+  components: { moneyDetailsChart },
+  mounted() {
+    this.getDataList();
+  },
+  methods: {
+    // 点击了数量
+    numberHandler(row) {
+      this.showDetails = true;
+      this.shareInfo = row;
+      this.getdetailsDataList(row);
+    },
+    // 关闭了弹框
+    cancelHandle() {
+      this.detailsList = [];
+      this.showDetails = false;
+      this.shareInfo = {};
+    },
+    // 双击切换输入框
+    handleDoubleClick(index, row) {
+      row.isInput = false;
+    },
+    // 失去焦点后的请求
+    handleBlur(index, row) {
+      // 可能需要更新tableData来反映新输入的值
+      this.editAmount(row);
+      // 完成编辑,隐藏输入框
+      row.isInputBol = row.Amount && row.Amount > 0 ? true : false;
+    },
+    // 输入框的值
+    handleInput(row) {
+      row.Amount = row.Amount ? row.Amount : 0;
+    },
+    // 获取数据
+    async getDataList() {
+      const res = await departInterence.getResearchStatisticsItem({
+        BannerId: +this.$route.query.id,
+      });
+      if (res.Ret === 200) {
+        this.tableData = res.Data.List || [];
+        this.chartData = [res.Data.HasPayed, res.Data.NoPay];
+      }
+    },
+    // 获取数据
+    async getdetailsDataList(row) {
+      const res = await departInterence.getResearchStatisticsDetail({
+        Mobile: row.Mobile,
+        BannerId: row.BannerId,
+      });
+      if (res.Ret === 200) {
+        const arr = res.Data || [];
+        this.detailsList = arr.map((item) => {
+          return {
+            ...item,
+            isInput: item.Amount && item.Amount > 0 ? true : false,
+          };
+        });
+      }
+    },
+    // 修改金额
+    async editAmount(row) {
+      const res = await departInterence.getResearchStatisticsAmount({
+        YbResearchSignupStatisticsId: row.YbResearchSignupStatisticsId,
+        Amount: row.Amount,
+      });
+      if (res.Ret === 200) {
+        this.$message.success("修改成功");
+      }
+    },
+  },
+  beforeRouteEnter(to, from, next) {
+    if (to.query.name) {
+      to.matched[1].name = to.query.name + "报名详情";
+    }
+    next();
+  },
+};
+</script>
+<style scoped lang="scss">
+.registration-details {
+  .content {
+    display: flex;
+    .chart-content {
+      flex: 1;
+      flex-shrink: 0;
+    }
+  }
+}
+</style>

+ 98 - 0
src/views/interaction_manage/researchStatistics.vue

@@ -0,0 +1,98 @@
+<template>
+  <div class="container research-statistics-content">
+    <p class="lable-txt">进行中</p>
+    <div class="progress-box">
+      <div class="progress-item" v-for="item in ongoingList" :key="item.BannerId" @click="goDetailHandler(item)">
+        <p class="title">{{ item.Remark }}</p>
+        <p class="time">{{ item.StartDate }}~{{ item.EndDate }}</p>
+        <p class="num">报名人数:{{ item.Count }}</p>
+      </div>
+    </div>
+    <p class="lable-txt">已结束</p>
+    <div class="progress-box">
+      <div class="progress-item item-end" v-for="item in overList" :key="item.BannerId" @click="goDetailHandler(item)">
+        <p class="title">{{ item.Remark }}</p>
+        <p class="time">{{ item.StartDate }}~{{ item.EndDate }}</p>
+        <p class="num">报名人数:{{ item.Count }}</p>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { departInterence } from "@/api/api.js";
+
+export default {
+  name: "",
+  components: {},
+  props: {},
+  data() {
+    return {
+      ongoingList: [],
+      overList: [],
+    };
+  },
+  computed: {},
+  watch: {},
+  created() {},
+  mounted() {
+    this.getDataList();
+  },
+  methods: {
+    // 获取数据
+    async getDataList() {
+      const res = await departInterence.getResearchStatistics();
+      if (res.Ret === 200) {
+        this.ongoingList = res.Data.OngoingList || [];
+        this.overList = res.Data.OverList || [];
+      }
+    },
+    // 跳转详情
+    goDetailHandler(item) {
+      this.$router.push({
+        path: "registrationDetails",
+        query: {
+          id: item.BannerId,
+          name:item.Remark
+        },
+      });
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.research-statistics-content {
+  .lable-txt {
+    margin-bottom: 20px;
+  }
+  .progress-box {
+    display: flex;
+    flex-wrap: wrap;
+    .progress-item {
+      width: 292px;
+      height: 126px;
+      padding: 20px;
+      color: #409eff;
+      border-radius: 4px;
+      border: 1px solid #b3d8ff;
+      background-color: #ecf5ff;
+      margin: 0 20px 20px 0;
+      box-sizing: border-box;
+      cursor: pointer;
+      display: flex;
+      flex-direction: column;
+      justify-content: space-between;
+    }
+    .item-end {
+      color: #666666;
+      border: 1px solid #c0c4cc;
+      background-color: #f2f6fa;
+      &:hover {
+        color: #409eff;
+        border: 1px solid #b3d8ff;
+        background-color: #ecf5ff;
+      }
+    }
+  }
+}
+</style>

+ 30 - 6
src/views/interaction_manage/videoManage.vue

@@ -12,7 +12,7 @@
             <el-input
                 placeholder="关键词搜索"
                 v-model="keyword"
-                style="maxWidth:520px"
+                style="max-width:520px"
                 @input="searchHandle"
                 clearable
                 v-if="navType!==2"
@@ -212,6 +212,7 @@
                             v-model="popData.permission"
                             collapse-tags
                             placeholder="请选择品种"
+                            :disabled="!!reportId && isReportHasPermission"
                         ></el-cascader>
                     </el-form-item>
                     <el-form-item label="视频" prop="videoUrl">
@@ -234,7 +235,11 @@
                     </el-form-item>
                     <el-form-item label="关联报告" prop="reportUrl" v-if="navType==3">
                         <div style="display:flex">
-                        <el-input readonly v-model="popData.reportUrl" placeholder="请选择关联报告"></el-input>
+                        <el-input readonly v-model="popData.reportUrl" placeholder="请选择关联报告">
+                            <template slot='suffix' v-if="!!popData.reportUrl">
+                                <i class="el-icon-circle-close" style="cursor: pointer;margin-right: 5px;" @click="reportRemove"></i>
+                            </template>
+                        </el-input>
                         <el-button type="primary" style="margin-left:10px;" @click="showReportDialog">关联报告</el-button>
                         </div>
                     </el-form-item>
@@ -424,6 +429,7 @@
         <!-- 关联报告弹窗 -->
         <connective-report-dialog
           :isShow="isShowReportDialog"
+          :reportId="this.reportId"
           @reportChange="setReportUrl"
           @cancel="isShowReportDialog=false"
         />
@@ -534,7 +540,9 @@ export default {
             previewVideoUrl:"",
             
             isShowReportDialog:false,//关联报告弹窗
-            reportId:0
+            reportId:0,
+            // 报告是否关联品种
+            isReportHasPermission:false
         }
     },
     created() {
@@ -621,6 +629,10 @@ export default {
             if(res.Ret===200){
                 const arr=res.Data.List||[]
                 this.perList=arr.map(item => {
+                    if(!(item && item.List)){
+                        // 无(子)品种
+                        return null
+                    }
                     let obj={}
                     obj.value=item.ClassifyName
                     obj.label=item.ClassifyName
@@ -628,7 +640,7 @@ export default {
                         return {value:_item.ChartPermissionID,label:_item.ChartPermissionName}
                     })
                     return obj
-                })
+                }).filter(Boolean)
             }
         },
 
@@ -643,6 +655,7 @@ export default {
             this.popData.VideoId=0
             this.popData.permission=''
             this.popData.reportUrl=''
+            this.isReportHasPermission=false
             if(!item){
                 this.popData.type='添加视频'
             }else{
@@ -654,9 +667,12 @@ export default {
                 this.popData.VideoSeconds=item.VideoSeconds
                 this.popData.VideoId=item.CommunityVideoId
                 if(this.navType===3){
-                    this.popData.permission=item.ChartPermissionIds.split(',')
+                    this.$nextTick(()=>{
+                        this.popData.permission=item.ChartPermissionIds.split(',').map(it => +it)
+                    })
                     this.popData.VideoId=item.RoadVideoId
-                    item.ReportId&&this.setReportUrl({ReportId:item.ReportId,Title:item.ReportTitle})
+                    this.setReportUrl({ReportId:item.ReportId || 0,Title:item.ReportTitle || '',
+                                        PermissionIds:item.ChartPermissionIds?item.ChartPermissionIds.split(','):[]})
                 }
             }
             this.showPop=true
@@ -1072,6 +1088,12 @@ export default {
         endingPreview(){
             this.$refs.previewVideo && this.$refs.previewVideo.pause()
         },
+        // 删除关联的报告
+        reportRemove(){
+            this.popData.reportUrl=''
+            this.reportId = 0
+            this.popData.permission=''
+        },
         //打开关联报告弹窗
         showReportDialog(){
           this.isShowReportDialog = true
@@ -1080,6 +1102,8 @@ export default {
         setReportUrl(item){
           this.reportId = item.ReportId
           this.popData.reportUrl = item.Title
+          this.popData.permission=item.PermissionIds
+          this.isReportHasPermission = item.PermissionIds && item.PermissionIds.length>0
           this.isShowReportDialog = false
         }
     },

+ 1 - 1
src/views/rai_manage/activityManage/activityManage.vue

@@ -8,7 +8,7 @@
           <span v-for="(item, index) in listTitle" :key="item.ChartPermissionId" @click="tabsBoxBtn(item, index)" :class="index == tabsPitchon ? 'pitch' : ''">{{ item.PermissionName }}</span>
         </div>
         <div style="display: flex; align-items: center">
-          <el-upload style="height: 40px" ref="imgUpload" action="#" :http-request="handleUploadImg" :show-file-list="false" accept="image/*">
+          <el-upload v-if="isResearch" style="height: 40px" ref="imgUpload" action="#" :http-request="handleUploadImg" :show-file-list="false" accept="image/*">
             <el-button style="height: 40px" type="primary">识图建会</el-button>
           </el-upload>
           <el-button style="margin-left: 20px; height: 40px" type="primary" @click="$router.push(!isResearch ? '/addActivity' : '/addPurchaserActivity')">添加活动</el-button>

+ 14 - 9
src/views/rai_manage/reportManage/yanXuanSpecial.vue

@@ -1,9 +1,9 @@
 <template>
   <div class="container yanxuan-special_container">
-    <el-card style="margin-bottom: 20px">
+    <el-card style="margin-bottom: 20px" v-if="topLableList.length">
       <span @click="tlableClickHandler(item)" :class="['top-table-item', item.value == topLableActive && 'top-table-item-active']" v-for="item in topLableList" :key="item.value">{{ item.name }}</span>
     </el-card>
-    <el-card>
+    <el-card v-if="topLableList.length">
       <template v-if="topLableActive == 1">
         <div class="report-stuts-content">
           <span
@@ -75,7 +75,7 @@
                 <span v-if="item.label != 'PV/UV'" @click="handleRowClick(row, item.key)" :style="handleRowStyle(item.key)">{{ handleRowContent(row, item.key) }}</span>
                 <div class="pv-uv-download" v-else>
                   <span>{{ row.Pv }} / {{ row.Uv }}</span>
-                  <a :href="exportPvUv(row.Id)" download>
+                  <a :href="exportPvUv(row.Id)" download v-if="Role == 'rai_admin' || Role == 'admin'">
                     <img src="~@/assets/img/rai_m/pvuv_download.png" alt="" />
                   </a>
                 </div>
@@ -163,8 +163,10 @@ export default {
     };
   },
   computed: {
-    // 头部lable
-
+    Role() {
+      let role = localStorage.getItem("Role") || "";
+      return role;
+    },
     // 文章的状态
     reportStutsList() {
       return ReportStutsList;
@@ -336,11 +338,14 @@ export default {
     async getYanxuanShowButton() {
       const res = await raiInterface.getYanxuanShowButton();
       if (res.Ret === 200) {
-        let { IsShowSpecialAuthor } = res.Data;
-        if (IsShowSpecialAuthor) {
-          this.topLableList = TopLableList;
-        } else {
+        let { IsShowSpecialAuthor, IsShowYanXuanSpecial } = res.Data;
+        if (IsShowSpecialAuthor && !IsShowYanXuanSpecial) {
+          this.topLableList = [TopLableList[1]];
+          this.topLableActive = 2;
+        } else if (!IsShowSpecialAuthor && IsShowYanXuanSpecial) {
           this.topLableList = [TopLableList[0]];
+        } else if (IsShowSpecialAuthor && IsShowYanXuanSpecial) {
+          this.topLableList = TopLableList;
         }
       }
     },

+ 40 - 41
src/views/report_manage/dayilyNews.vue

@@ -66,8 +66,13 @@
           label-width="80px">
           <el-form-item prop="classify" label="报告分类">
             <el-cascader
+              ref="cascaderRef"
               :options="classifyArr"
               v-model="configForm.classify"
+              :props="{
+                label:'ClassifyName',
+                children:'Child'
+              }"
               placeholder="类型筛选"
               size="medium"
               style="width: 70%"
@@ -236,30 +241,28 @@ export default {
     },
 
     getClassify() {
-      let params={CurrentIndex:0,PageSize:1000,KeyWord:''};
-			reportEnInterface.classifyList(params).then((res) => {
-				if( res.Ret==200&&Array.isArray(res.Data.List) ){
-					res.Data.List.forEach(item=>{
-						let newitem={label:item.ClassifyName,value: JSON.stringify({
-              name: item.ClassifyName,
-              id: item.Id
-            })};
-						if( item.Child ){
-							let childnode=[];
-							item.Child.forEach(itemchild=>{
-								childnode.push({label:itemchild.ClassifyName,value:JSON.stringify({
-                  name: itemchild.ClassifyName,
-                  id: itemchild.Id
-                })});
-							});
-							newitem.children=childnode;
-						}
-						this.classifyArr.push(newitem);
-					});
-
-          // this.configForm.classify =  [this.classifyArr[0].value,this.classifyArr[0].children[0].value]
-				}
-			});
+        reportEnInterface.classifyList().then((res) => {
+            if(res.Ret!==200) return 
+            this.classifyArr = res.Data.List||[]
+            this.formatClassifyArr({Child:this.classifyArr})
+        });
+    },
+    formatClassifyArr(tree){
+        function dfs(node,level){
+            node.value = JSON.stringify({id:node.Id,name:node.ClassifyName})
+            if(!node.Child&&level<3){
+                node.disabled = true
+            }
+            if(Array.isArray(node.Child)){
+                for(let n of node.Child){
+                    dfs(n,level+1)
+                }
+                if(!node.Child.length){
+                    node.disabled = true
+                }
+            }
+        }
+        dfs(tree,0)
     },
 
     /* 生成报告 */
@@ -267,18 +270,6 @@ export default {
       if(!this.newsList.length) return this.$message.warning('暂无内容')
       const { classify,title,abstract,author,frequency,overview } = this.configForm;
       if(!classify || !title || !abstract||!overview) this.$message.warning('请先设置默认值')
-      
-/*       const params = {
-        ClassifyIdFirst: Number(JSON.parse(classify[0]).id),
-        ClassifyNameFirst: JSON.parse(classify[0]).name,
-        ClassifyIdSecond: classify.length>1 ? Number(JSON.parse(classify[1]).id) : 0,
-        ClassifyNameSecond: classify.length>1 ? JSON.parse(classify[1]).name : '',
-        Title:title,
-        Abstract: abstract,
-        Author: author,
-        Frequency: frequency,
-        Overview:overview
-      } */
 
       dayApi.translateReport(/* params */).then(res => {
         if(res.Ret !== 200) return
@@ -309,15 +300,21 @@ export default {
           Title,
           ClassifyIdFirst,
           ClassifyIdSecond,
+          ClassifyIdThird,
           ClassifyNameFirst,
           ClassifyNameSecond,
+          ClassifyNameThird,
           Author,
           Frequency,
           Overview
         } = res.Data;
-        let val_first = ClassifyIdFirst ? JSON.stringify({name: ClassifyNameFirst,id: ClassifyIdFirst}) : '';
-        let val_second = ClassifyIdSecond ? JSON.stringify({name: ClassifyNameSecond,id: ClassifyIdSecond}) : '';
-        this.configForm.classify =  val_second ? [val_first,val_second] : val_first ? [val_first] : []
+
+        this.configForm.classify = [
+            JSON.stringify({id:ClassifyIdFirst||0,name:ClassifyNameFirst||''}),
+            JSON.stringify({id:ClassifyIdSecond||0,name:ClassifyNameSecond||''}),
+            JSON.stringify({id:ClassifyIdThird||0,name:ClassifyNameThird||''})
+        ]
+        
         this.configForm.title = Title;
         this.configForm.abstract = Abstract;
         this.configForm.author = Author;
@@ -344,8 +341,10 @@ export default {
       const params = {
         ClassifyIdFirst: Number(JSON.parse(classify[0]).id),
         ClassifyNameFirst: JSON.parse(classify[0]).name,
-        ClassifyIdSecond: classify.length>1 ? Number(JSON.parse(classify[1]).id) : 0,
-        ClassifyNameSecond: classify.length>1 ? JSON.parse(classify[1]).name : '',
+        ClassifyIdSecond: Number(JSON.parse(classify[1]).id),
+        ClassifyNameSecond: JSON.parse(classify[1]).name,
+        ClassifyIdThird:Number(JSON.parse(classify[2]).id),
+        ClassifyNameThird:JSON.parse(classify[2]).name,
         Title:title,
         Abstract: abstract,
         Author: author,

+ 17 - 2
src/views/research_manage/shareRecord.vue

@@ -3,12 +3,21 @@
     <el-card>
       <div class="share-record-top">
         <div>
-          <el-date-picker v-model="selectTime" type="daterange" value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="handleListChange">
+          <el-date-picker
+            v-model="selectTime"
+            style="width: 260px"
+            type="daterange"
+            value-format="yyyy-MM-dd"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            @change="handleListChange"
+          >
           </el-date-picker>
           <el-cascader
             v-model="sales"
             placeholder="请选择分享人"
-            style="width: 200px; margin-left: 20px"
+            style="width: 200px; margin: 0 20px"
             :options="salesArr"
             :props="defaultSalesProps"
             :show-all-levels="false"
@@ -18,6 +27,9 @@
             @change="handleListChange"
           >
           </el-cascader>
+          <el-select v-model="actionVal" placeholder="用户行为" @change="handleListChange" clearable>
+            <el-option v-for="item in actionOptions" :key="item" :label="item" :value="item"> </el-option>
+          </el-select>
         </div>
         <div>
           <el-input placeholder="请输入姓名/手机号" v-model="keyword" style="width: 300px" @input="handleListChange" clearable>
@@ -78,6 +90,8 @@ export default {
       }, //销售级联配置
       selectTime: [],
       tableData: [],
+      actionVal: "",
+      actionOptions: ["注册", "查看专栏", "查看报告", "查看活动"],
     };
   },
   computed: {},
@@ -136,6 +150,7 @@ export default {
         KeyWord: this.keyword,
         StartDate: this.selectTime && this.selectTime[0] ? this.selectTime[0] : "",
         EndDate: this.selectTime && this.selectTime[1] ? this.selectTime[1] : "",
+        Action: this.actionVal,
       });
       if (res.Ret === 200) {
         this.tableData = res.Data.List || [];