Bläddra i källkod

合并可配置化部分

hbchen 1 år sedan
förälder
incheckning
11556cf962

+ 0 - 12
src/config/setting.js

@@ -1,12 +0,0 @@
-//全局配置
-export default {
-  name: '后台管理系统',
-  company_name: '**公司',
-  g_logo: require('@/assets/img/home/logo.png'), //主页菜单栏logo
-  g_mini_logo: require('@/assets/img/home/eta_mini.png'), //主页菜单栏mini-logo
-  theme_color: '',
-  menu_bg:'#FFFFFF',//菜单栏背景色
-  login_title: '',//登录页标题
-  login_logo: require('@/assets/img/home/login_logo.png'),//登录页logo
-  login_bg: require('@/assets/img/login_bg.png')
-}

+ 24 - 34
src/main.js

@@ -18,21 +18,8 @@ Vue.use(ElementUI);
 Vue.use(VueRouter);
 Vue.use(Vuex);
 
-import {
-  getBusinessCode
-} from "api/api.js";
-import global from '@/config/setting';
-import{endCalc,optionTimeCalc,doPageEventListener}from'@/utils/TimeOnPage.js';
-
-// 获取商家code
-getBusinessCode().then(res=>{
-  if(res.Ret!==200) return 
-  let bus_code = res.Data||''
-  if(stores.state.TRIAL_CODE == bus_code){
-    doPageEventListener()
-  }
-  stores.mutations.SET_BUSINESS_CODE(stores.state,bus_code) 
-})
+import{endCalc,optionTimeCalc,init}from'@/utils/TimeOnPage.js';
+
 
 import setting from '@/mixins/theme.js'
 Vue.prototype.$setting = setting;
@@ -192,28 +179,31 @@ router.beforeEach(async(to, from, next) => {
 
 router.afterEach((to, from, next) => {
   // 改变页面标题
-  if(stores.state.TRIAL_CODE == stores.state.businessCode){
-    // 试用ETA
-    document.title = to.matched[to.matched.length-1].name ?
-    `${global.company_name}-${to.matched[to.matched.length-1].name}`: global.name
-  }else{
-    document.title = to.matched[to.matched.length - 1].name
-    ? `ETA-${to.matched[to.matched.length - 1].name}`
-    : "ETA";
-  }
+  document.title = to.matched[to.matched.length - 1].name
+  ? `${setting.name}-${to.matched[to.matched.length - 1].name}`
+  : setting.name;
 
   window.scrollTo(0, 0);
-  
-  sessionStorage.setItem('preTitle',from.name||'')
-  const routerChangeType = sessionStorage.getItem('routerChangeType')
-  if(routerChangeType==='popstate'){
-    const IsActive = sessionStorage.getItem('IsActive')
-    if(IsActive=='1'){
-      endCalc('popstate',Number(sessionStorage.getItem('popStayTime')||0))
+  if(stores.state.hasTrialUserPermisson){
+
+    sessionStorage.setItem('preTitle',from.name||'')
+
+    if(!stores.state.hasDoPageListening){
+      // 初始化需要放在 页面设置标题后,才能拿到正确的标题
+      init()
+      stores.mutations.SET_PAGE_EVENT_LISTENER(stores.state,true)
+    }
+
+    const routerChangeType = sessionStorage.getItem('routerChangeType')
+    if(routerChangeType==='popstate'){
+      const IsActive = sessionStorage.getItem('IsActive')
+      if(IsActive=='1'){
+        endCalc('popstate',Number(sessionStorage.getItem('popStayTime')||0))
+      }
+      optionTimeCalc()
+      sessionStorage.removeItem('routerChangeType')
+      sessionStorage.removeItem('popStayTime')
     }
-    optionTimeCalc()
-    sessionStorage.removeItem('routerChangeType')
-    sessionStorage.removeItem('popStayTime')
   }
 });
 

+ 1 - 1
src/mixins/theme.js

@@ -2,7 +2,7 @@
 一些动态配置和一些全局自定义东西 
 */
 export default {
-	name: '后台管理系统',
+	name: 'ETA',
   theme_color: '#0052D9',
   menu_bg:'#fff',//菜单栏背景色
   //跳转外部系统

+ 58 - 38
src/utils/TimeOnPage.js

@@ -1,6 +1,6 @@
 //计算账号累计活跃时长
-import global from '@/config/setting';
-import {timeOnPage ,recordActiveLogin} from '@/api/api.js';
+import setting from '@/mixins/theme.js'
+import {timeOnPage , recordActiveLogin} from '@/api/api.js';
 //活跃时间间隔 (s)
 const TimeInterval = 60*10
 //页面停留时间 (s)
@@ -9,7 +9,6 @@ let stayTime = 0
 
 //活跃时间记录计时器 1分钟记录一次
 let intervalTimer=null
-let loginStayTime=0
 
 export const openLoginTimer=()=>{
   // 登录时间
@@ -40,7 +39,6 @@ export const recordActiveLoginFun=(time)=>{
     }).finally(()=>{
       // 清除工作
       clearInterval(intervalTimer)
-      loginStayTime=0
       localStorage.removeItem('loginTime')
     })
   }
@@ -87,6 +85,15 @@ export const endCalc = (type,intervalT)=>{
   sessionStorage.setItem('IsActive',0)
 }
 
+// 退出登录时的结算
+export const loginEndCalc=()=>{
+  let t = new Date().getTime() - timeStr
+  //console.log('待了时长replacestate:'+ t)
+  const IsActive = sessionStorage.getItem('IsActive')
+  if(Number(IsActive)){
+    endCalc('logout',t)
+  }
+}
 
 //发送活跃时长数据
 export const sendTOPInfo = (type,intervalT)=>{
@@ -102,7 +109,7 @@ export const sendTOPInfo = (type,intervalT)=>{
   const Part = Title.split('-').length>1?Title.split('-')[1]:Title
   const ActiveTime = type==='timeup'?stayTime:Number(intervalT)/1000
   //发送数据
-  if(!Part.length||Part==global.name) return
+  if(!Part.length||Part==setting.name) return
   if(ActiveTime>TimeInterval*12) return
   console.log("ActiveTime:",ActiveTime,"Part:",Part)
   timeOnPage({
@@ -129,40 +136,61 @@ let rewriteHis = function(type){
   }
 }
 
+export function init(){
+  const unloadT = sessionStorage.getItem('unloadT')
+  const IsActive = sessionStorage.getItem('IsActive')
+  if(unloadT){
+    //console.log('刷新该页呆了时长',unloadT)
+    sessionStorage.removeItem('unloadT')
+    sessionStorage.setItem('preTitle',document.title)
+    if(Number(IsActive)){
+      endCalc('unload',unloadT)
+    }
+  }
+  timeStr = new Date().getTime()
+  optionTimeCalc()
 
-export const doPageEventListener=function(){
-
-  // 登录活跃时长 没有在记录 而且 有token 去打开计时器
   if((!localStorage.getItem("loginTime")) && localStorage.getItem('auth')){
+    // 初始化的时候 先重置最近登录时长
+    recordActiveLogin({ActiveTime:0}).then(res=>{
+      if(res.Ret!==200) return
+    })
     openLoginTimer()
   }
+}
+
+export const doPageEventListener=function(){
+
+  // init() 放在router.afterEach中,不然一开始拿不到正确的页面标题
 
   window.history.pushState = rewriteHis('pushState')
 
   window.history.replaceState = rewriteHis('replaceState')
-  
-  //刷新加载完成
-  window.addEventListener('load',(e)=>{
-    const unloadT = sessionStorage.getItem('unloadT')
-    const IsActive = sessionStorage.getItem('IsActive')
-    if(unloadT){
-      //console.log('刷新该页呆了时长',unloadT)
-      sessionStorage.removeItem('unloadT')
-      sessionStorage.setItem('preTitle',document.title)
-      if(Number(IsActive)){
-        endCalc('unload',unloadT)
-      }
-    }
-    console.log('onload')
-    timeStr = new Date().getTime()
-    optionTimeCalc()
-
-    // 登录活跃时长 没有在记录 而且 有token 去打开计时器
-    if((!localStorage.getItem("loginTime")) && localStorage.getItem('auth')){
-      openLoginTimer()
-    }
-  })
 
+  //刷新加载完成 
+  // 因为监听改位置了,每次路由刷新时,由于需要等待接口返回,需要先判断是否有 权限才能监听,这时候onload已经执行了,根本监听不到
+  // window.addEventListener('load',(e)=>{
+    // const unloadT = sessionStorage.getItem('unloadT')
+    // const IsActive = sessionStorage.getItem('IsActive')
+    // if(unloadT){
+    //   //console.log('刷新该页呆了时长',unloadT)
+    //   sessionStorage.removeItem('unloadT')
+    //   sessionStorage.setItem('preTitle',document.title)
+    //   if(Number(IsActive)){
+    //     endCalc('unload',unloadT)
+    //   }
+    // }
+    // timeStr = new Date().getTime()
+    // optionTimeCalc()
+  
+    // if((!localStorage.getItem("loginTime")) && localStorage.getItem('auth')){
+    //   // 初始化的时候 先重置最近登录时长
+    //   recordActiveLogin({ActiveTime:0}).then(res=>{
+    //     if(res.Ret!==200) return
+    //   })
+    //   openLoginTimer()
+    // }
+  // })
   //刷新离开页面
   window.addEventListener('beforeunload',(e)=>{
     console.log('beforeunload')
@@ -179,7 +207,6 @@ export const doPageEventListener=function(){
     recordActiveLoginFun()
     // 猜测在unload这里 浏览器不会等待异步返回 清除工作在这进行
     clearInterval(intervalTimer)
-    loginStayTime=0
     localStorage.removeItem('loginTime')
   })
 
@@ -240,13 +267,6 @@ export const doPageEventListener=function(){
   }); */
   document.addEventListener('click',(e)=>{
 
-    // 登录活跃时间
-    loginStayTime=0
-    // 超时之后的点击页面,重新计算登录活跃时间
-    if((!localStorage.getItem("loginTime")) && localStorage.getItem('auth')){
-      openLoginTimer()
-    }
-
     //console.log('click',e,e.composedPath())
     //只计算displayMain 的click
     const path = e.composedPath()

+ 20 - 21
src/views/Home.vue

@@ -7,13 +7,13 @@
           <img
             class="logo"
             v-if="!isCollapse"
-            :src="isTrail?global.g_logo:$setting.g_logo"
+            :src="$setting.g_logo"
           />
           <!-- 折叠侧边栏logo尺寸 -->
           <img
             class="logo_coll"
             v-else
-            :src="isTrail?global.g_mini_logo:$setting.g_mini_logo"
+            :src="$setting.g_mini_logo"
           />
         </div>
         <div
@@ -23,7 +23,7 @@
           <aside class="menu-expanded">
             <!--导航菜单-->
             <el-menu
-              :background-color="isTrail?global.menu_bg:$setting.menu_bg"
+              :background-color="$setting.menu_bg"
               text-color="#333"
               :collapse-transition="false"
               :active-text-color="$setting.theme_color"
@@ -316,8 +316,8 @@ import PwdDlg from "@/components/pwdDlg.vue";
 import questionMsgDia from "@/components/questionMsgDia.vue";
 import questionnaireDia from "../components/questionnaireDia.vue";
 import EventBus from "@/api/bus.js";
-import global from '@/config/setting';
-import {recordActiveLoginFun} from "@/utils/TimeOnPage.js"
+
+import {recordActiveLoginFun,loginEndCalc} from "@/utils/TimeOnPage.js"
 
 export default {
   components: {
@@ -386,7 +386,7 @@ export default {
     },
 		// 是否是eta试用
     isTrail(){
-			return this.$store.state.businessCode == this.$store.state.TRIAL_CODE
+			return this.$store.state.hasTrialUserPermisson
 		}
   },
   data() {
@@ -465,7 +465,6 @@ export default {
       //链接系统
       linkSystems: this.$setting.linkSystems,
       bus_code:"",
-      global
     };
   },
   created() {
@@ -479,7 +478,7 @@ export default {
       this.isShowApprovalNotice = true;
     }
     this.resetLinkSys()
-    // this.getBusinessCodeFun()
+    this.getBusinessCodeFun()
     
     this.getQuestionStaus()
   },
@@ -494,13 +493,12 @@ export default {
   },
   methods: {
     // 获取商家Code
-    // getBusinessCodeFun(){
-      // getBusinessCode().then(res=>{
-      //   if(res.Ret!==200) return 
-      //   this.bus_code = res.Data||''
-      //   this.$store.commit("SET_BUSINESS_CODE", this.bus_code);
-      // })
-    // },
+    getBusinessCodeFun(){
+      getBusinessCode().then(res=>{
+        if(res.Ret!==200) return 
+        this.bus_code = res.Data||''
+      })
+    },
     //判断是否为初始密码
     async isInitialPwd() {
       const res = await checkPwd();
@@ -679,7 +677,6 @@ export default {
         this.questionList=[]
         return 
       }
-      // console.log(this.isTrail,'isTrail');
       homeInterface.getQuestionnaireDetail().then(res=>{
         // console.log(res);
         if(res.Ret == 200){
@@ -702,8 +699,7 @@ export default {
       // });
       // window.open(href, "_blank");
       //打开帮助文档
-      const href = `${process.env.VUE_APP_ETA_HELP_DOCS}?bus_code=${this.$store.state.businessCode}`
-      // console.log(href);
+      const href = `${process.env.VUE_APP_ETA_HELP_DOCS}?bus_code=${this.bus_code}`
       // const href = `http://192.168.77.13:3033/help/index?bus_code=${this.bus_code}`
       window.open(href, "_blank");
     },
@@ -787,10 +783,13 @@ export default {
       })
         .then(() => {
           if(this.isTrail){
+            // 结算活跃计时
+            loginEndCalc()
             // 结算登录计时
             recordActiveLoginFun()
           }
           setTimeout(() => {
+            // 退出登录时可能有一些请求需要发送或者处理
             localStorage.setItem("auth", "");
             localStorage.setItem("userName", "");
             localStorage.setItem("Role", "");
@@ -799,15 +798,15 @@ export default {
             localStorage.setItem("AdminName", "");
             localStorage.setItem("ManageType", "");
             localStorage.setItem("RoleIdentity", "");
-            that.$router.push("/login");
-          }, 0);
 
+            that.$router.push("/login");
+          }, 10);
         })
         .catch(() => {});
     },
     toDoc(){
       //打开更新日志项目
-      const href = `${process.env.VUE_APP_ETA_DOCS}?bus_code=${this.$store.state.businessCode}`
+      const href = `${process.env.VUE_APP_ETA_DOCS}?bus_code=${this.bus_code}`
       window.open(href, "_blank");
     },
     collapseHandle () {

+ 30 - 45
src/views/Login.vue

@@ -2,8 +2,8 @@
 	<div id="login">
 		<div id="login_wrapper">
       
-			<img class="login-bg" :src="isTrail?global.login_bg:$setting.login_bg" alt />
-			<img class="login-icon" :src="isTrail?global.login_logo:$setting.login_logo" v-if="isTrail?global.login_logo:$setting.login_logo">
+            <img class="login-bg" :src="$setting.login_bg" alt />
+            <img class="login-icon" :src="$setting.login_logo" />
 			<!-- <el-form
 				:model="ruleForm"
 				:rules="rules"
@@ -132,41 +132,40 @@
 import { userLogin, departInterence,recordActiveLogin } from "@/api/api.js";
 import http from "@/api/http.js";
 import md5 from "@/utils/md5.js";
+
 import EmailModel from "./login_manage/EmailModel.vue";
 import ForgetPassModel from "./login_manage/ForgetPassModel.vue";
 import MobileModel from "./login_manage/MobileModel.vue";
 import OrdinaryModel from "./login_manage/OrdinaryModel.vue";
-import global from '@/config/setting'
-import {openLoginTimer} from "@/utils/TimeOnPage.js"
+
 export default {
     components: { OrdinaryModel, MobileModel, EmailModel, ForgetPassModel },
   data() {
     return {
-			global,
-      b: new http.Base64(),
-      logining: false, //登录loadding
-      ruleForm: {
-        account: "",
-        checkPass: "",
-      },
-      rules: {
-        account: [
-          {
-            required: true,
-            message: "请输入用户名",
-            trigger: "blur",
-          },
-        ],
-        checkPass: [
-          {
-            required: true,
-            message: "请输入密码",
-            trigger: "blur",
-          },
-        ],
-      },
-      checked: false, //是否保持登录状态
-      visible: true, //密码输入类型
+        b: new http.Base64(),
+        logining: false, //登录loadding
+        ruleForm: {
+            account: "",
+            checkPass: "",
+        },
+        rules: {
+            account: [
+            {
+                required: true,
+                message: "请输入用户名",
+                trigger: "blur",
+            },
+            ],
+            checkPass: [
+            {
+                required: true,
+                message: "请输入密码",
+                trigger: "blur",
+            },
+            ],
+        },
+        checked: false, //是否保持登录状态
+        visible: true, //密码输入类型
 
         activeModel: 'ordinaryModel',
         /* form check 错误提示标识*/
@@ -179,14 +178,8 @@ export default {
 
         isCheckDialogShow:false,
         checkActiveModel:'checkMobileModel'
-    };
-  },
-	computed: {
-		// 是否是eta试用
-    isTrail(){
-			return this.$store.state.businessCode == this.$store.state.TRIAL_CODE
-		}
-  },
+        };
+    },
     created() {
         this.keyupSubmit(); //回车登录
         this.getPhoneCode();//获取手机号区号
@@ -450,14 +443,6 @@ export default {
             localStorage.setItem("ManageType", res.Data.Authority);
             localStorage.setItem("AdminId", res.Data.AdminId);
             localStorage.setItem("AdminName", res.Data.AdminName);
-            // 打开登录计时
-            if(this.isTrail){
-                // 登录的时候 先重置最近登录时长
-                recordActiveLogin({ActiveTime:0}).then(res=>{
-                    if(res.Ret!==200) return
-                })
-                openLoginTimer()
-            }
         },
         //根据角色判断应该进入系统的哪个页面,进入系统
         async loginSys(res){

+ 1 - 7
src/views/dataEntry_manage/databaseComponents/addTargetDiaBase.vue

@@ -110,15 +110,9 @@ export default {
 			search_company_txt: ''
 		};
 	},
-	computed: {
-		// 是否是eta试用
-    isTrail(){
-			return this.$store.state.businessCode == this.$store.state.TRIAL_CODE
-		}
-  },
 	methods: {
 		init() {
-			this.fromType = this.isTrail?'同花顺':'wind'
+			this.fromType = 'wind'
 			this.status = ''
 			this.tableData = []
 			this.dataList = []

+ 2 - 8
src/views/system_manage/departManage.vue

@@ -116,7 +116,6 @@
 						<template slot-scope="scope">
 							<div style="color:#4099ef; font-size:24px;display: flex;gap:0 10px;">
 								<span  v-permission="permissionBtn.sysDepartPermission.sysDepart_saveUser"
-								v-if="!isTrail || (!(scope.row.DepartmentGroup=='ETA试用客户'&&scope.row.Enabled===0))"
 									class="editsty" @click.stop="editUser(scope.row)">编辑</span>
 								<span v-permission="permissionBtn.sysDepartPermission.sysDepart_resetPass"
 									class="editsty" @click.stop="resetPassWord(scope.row)">重置密码</span>
@@ -397,7 +396,6 @@ import { departInterence } from '@/api/api.js';
 import http from '@/api/http.js'
 import md5 from '@/utils/md5.js';
 import mixin from './mixin/departManageMixin.js';
-import global from '@/config/setting'
 //自定义省市数据
 import{province_sorce,city_sorce} from '@/utils/distpicker'; 
 export default {
@@ -425,7 +423,6 @@ export default {
         }
 		}
 		return {
-			global,
 			isAddDepart:false,//添加部门弹窗
 			departForm:{
 				title:"添加部门",
@@ -605,11 +602,8 @@ export default {
     }
 	},
 	computed:{
-		// 有些是试用平台独有的内容和判断
-		// 是否是eta试用
 		isTrail(){
-			// console.log(this.$store.state.businessCode,this.$store.state.TRIAL_CODE,'this.$store.state.businessCode == this.$store.state.TRIAL_CODE');
-			return this.$store.state.businessCode == this.$store.state.TRIAL_CODE
+			return this.$store.state.hasTrialUserPermisson
 		}
 	},
 	created() {
@@ -655,7 +649,7 @@ export default {
 					this.departArr = res.Data.List || []
 					if(this.isTrail){
 						this.departArr = this.departArr.map(item=>{
-							//如果部门为ETA试用客户,则屏蔽所有操作
+							//如果部门为ETA试用客户,则屏蔽所有操作 CRM12.4
 							if(item.DepartmentName==='ETA试用客户'){
 								item.disabled = true
 								item.canEdit = false

+ 4 - 2
src/vuex/index.js

@@ -27,8 +27,10 @@ const state = {
   breadSelfName: '',//面包屑自定义当前页面name
 
   dynamicOutLinks:{},//外部动态链接配置 iframe链接 研报详情分享link
-  businessCode:"", //商家code
-  TRIAL_CODE:"e069d0a024e09636a1225e72a964b4b6", //试用平台的 商家code
+  // 是否执行过页面监听
+  hasDoPageListening:false,
+  // 是否有 试用用户行为权限
+  hasTrialUserPermisson:false,
 };
 
 export default {

+ 10 - 0
src/vuex/modules/permissionButton.js

@@ -1,4 +1,6 @@
 import {departInterence} from '@/api/api.js';
+import{doPageEventListener}from'@/utils/TimeOnPage.js';
+
 // 权限配置按钮
 const permissionButtons = {
     state:()=>({
@@ -15,6 +17,14 @@ const permissionButtons = {
                 departInterence.getRoleBtnAuth().then(res=>{
                     const buttons = res.Data || []
                     commit('SET_PERMISSION_BUTTONS',buttons)
+                    
+                    let trialUserPermisson = !!buttons.find(item => item.ButtonCode =="trialUserAction")
+                    commit('SET_ETRIAL',trialUserPermisson)
+
+                    if(!this.state.hasDoPageListening && trialUserPermisson){
+                        //有ETA用户行为记录权限 而且没有执行过页面监听
+                        doPageEventListener()
+                    }
                     resolve('获取权限按钮成功')
                 })
 /*                 const buttons = [

+ 6 - 0
src/vuex/mutations.js

@@ -30,6 +30,12 @@ const mutations = {
     setting.dynamicOutLinks = state.dynamicOutLinks;
 
   },
+  SET_PAGE_EVENT_LISTENER:(state,flag)=>{
+    state.hasDoPageListening = flag
+  },
+  SET_ETRIAL(state,flag){
+    state.hasTrialUserPermisson = flag
+  },
   //设置商家code
   SET_BUSINESS_CODE(state,code) {
     state.businessCode = code || ""