index.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884
  1. <template>
  2. <div class="box-all" v-loading="loading">
  3. <el-header>
  4. <div class="flex-box" style="height: 60px;box-shadow: 0 1px 4px rgba(0,21,41,.08);">
  5. <div @click="homeUrl" class="logo-box flex-box flex-center-center">
  6. <img v-if="site_info.logo_url" :src="site_info.logo_url" class="logo"/>
  7. <img v-else src="static/images/logo3.png" class="logo" />
  8. </div>
  9. <div class="flex-1 flex-box-ce" style="padding: 0 20px;" v-if="site_info.name">
  10. <el-dropdown @command="handleCommand">
  11. <div class="cursor black" style="font-size: 18px;font-weight: 600;">{{ site_info.name }}<i class="el-icon-caret-bottom"></i></div>
  12. <el-dropdown-menu slot="dropdown">
  13. <el-dropdown-item v-for="(group, index) in companyList" v-if="!group.isNoShow" :key="index" :label="group.label" :divided="group.id == 1 || group.id == 2" :class="{ active: site_info.id==group.id }" :command="group">
  14. <span v-if="group.id == 2"><i class="el-icon-circle-plus" style="margin-right: 10px;"></i>{{ group.name }}</span>
  15. <span v-else-if="group.id == 1"> <i class="el-icon-setting" style="margin-right: 10px;"></i>{{ group.name }}</span>
  16. <span v-else>{{ group.name }}<i v-if="group.isSelect" class="el-icon-check" style="margin-left: 10px;"></i></span>
  17. </el-dropdown-item>
  18. </el-dropdown-menu>
  19. </el-dropdown>
  20. <div style="margin-left: 20px;">
  21. <el-popover v-if="isAdministrator" placement="bottom" width="364" trigger="hover">
  22. <SystemMessage></SystemMessage>
  23. <div slot="reference" class="count_max">{{ site_info.user_count_max }}用户</div>
  24. </el-popover>
  25. </div>
  26. <div class="flex-1"></div>
  27. <div class="right-menu">
  28. <div class="flex-box-ce">
  29. <div v-for="(item, index) in icons" :key="index" class="icon-item" @click="iconActive(item.id)">
  30. <div class="flex-box-ce" v-if="item.id!=3">
  31. <svg-icon :icon-class="item.icon" style="font-size: 18px;position: relative;top: 1px;right:2px"></svg-icon> <span>{{ item.name }}</span>
  32. </div>
  33. <el-popover v-else placement="bottom" width="240" trigger="hover">
  34. <div class="flex-box-v flex-center-center">
  35. <img src="static/images/code.png" alt="" style="width: 220px;">
  36. <div style="margin-top: 10px;" class="fontColorC">扫码下载手机版</div>
  37. </div>
  38. <div class="flex-box-ce" slot="reference">
  39. <svg-icon :icon-class="item.icon" style="font-size: 18px;position:relative;top: 1px;right:2px"></svg-icon> <span>{{ item.name }}</span>
  40. </div>
  41. </el-popover>
  42. </div>
  43. </div>
  44. <!-- 切换公司或退出账号 -->
  45. <el-dropdown @command="handleCommand2">
  46. <span class="el-dropdown-link" style="cursor: pointer;">
  47. <userImage class="user_img" width="40px" height="40px" fontSize="14" :user_name="account_info.name" :img_url="account_info.img_url"></userImage>
  48. </span>
  49. <el-dropdown-menu slot="dropdown">
  50. <el-dropdown-item v-for="(group, index) in userConcent" :key="index" :command="group">
  51. <span v-if="group.id == 2" class="red"><i class="el-icon-warning" style="margin-right: 10px;"></i>{{ group.name }}</span>
  52. </el-dropdown-item>
  53. </el-dropdown-menu>
  54. </el-dropdown>
  55. </div>
  56. </div>
  57. </div>
  58. </el-header>
  59. <el-container class="main">
  60. <div class="main-left">
  61. <div class="flex-box-v flex-center-center">
  62. <template v-for="(item,index) in menuArr">
  63. <div class="flex-box-v menu-item" v-if="item.show" :class="{'menu-active':menuIndex==item.index,[item.class]:item.class}" @click="openUrl(item)">
  64. <svg-icon :icon-class="item.icon" class="svgIcon"></svg-icon>
  65. <span style="margin-top: 5px;">{{ item.name }}</span>
  66. </div>
  67. </template>
  68. </div>
  69. </div>
  70. <el-main class="main-content">
  71. <router-view />
  72. </el-main>
  73. </el-container>
  74. <el-dialog :close-on-click-modal="false" title="客服" :visible.sync="innerVisible" width="400px" append-to-body class="innerVisible">
  75. <p style="margin:0;font-size:18px;">微信扫码添加功道云客服进行咨询</p>
  76. <img src="static/images/code2.png" style="width:100%" />
  77. <p style="font-size:20px;">电话咨询:400-6877-880</p>
  78. </el-dialog>
  79. <el-dialog :close-on-click-modal="false" title="创建新企业" :visible.sync="StartAnewBusiness" width="40%" :before-close="handleClose">
  80. <el-form :model="rejectForm" ref="rejectForm" label-width="80px" v-loading="rejectLoading">
  81. <el-form-item
  82. label="企业名称"
  83. prop="StartAnewBusinessName"
  84. :rules="[
  85. { required: true, message: '请输入企业名称', trigger: 'blur' },
  86. { min: 3, max: 30,message: '长度在 3 到 30 个字符', trigger: 'blur'}
  87. ]"
  88. >
  89. <el-input type="textarea" placeholder="公司名/组织名称" v-model="rejectForm.StartAnewBusinessName" maxlength="30" show-word-limit></el-input>
  90. </el-form-item>
  91. <el-form-item label="企业规模" prop="remark">
  92. <el-select v-model="rejectForm.StartAnewBusinessVal" placeholder="请选择">
  93. <el-option v-for="item in StartAnewBusinessPeople" :key="item.value" :label="item.label" :value="item.value"></el-option>
  94. </el-select>
  95. </el-form-item>
  96. <el-form-item>
  97. <el-button @click="adoptClose">取 消</el-button>
  98. <el-button type="primary" @click="StartAnewBuY('rejectForm')">创建完成</el-button>
  99. </el-form-item>
  100. </el-form>
  101. </el-dialog>
  102. <!-- 建议 -->
  103. <Suggest :visible.sync="isShowJy"></Suggest>
  104. <!-- 系统公告 -->
  105. <div class="updateNotice">
  106. <el-dialog title="系统公告" :visible.sync="updateVisible" width="700px" top="10vh">
  107. <b style="font-size:16px;margin:0 0 10px 0;display: inline-block;">{{ announcement.title }}</b>
  108. <div class="announDetails" style="padding:0 0 0 0" v-html="announcement.content"></div>
  109. <span slot="footer" class="dialog-footer"><el-button @click="openNotice" type="primary" round>查看详情</el-button></span>
  110. </el-dialog>
  111. </div>
  112. </div>
  113. </template>
  114. <script>
  115. import { mapGetters, mapState } from 'vuex';
  116. import { useShepherd } from 'vue-shepherd'
  117. import { setToken, returnJSEncrypt,_debounce } from '@/utils/auth';
  118. import Suggest from '@/components/Suggest';
  119. import SystemMessage from '@/components/SystemMessage';
  120. import axios from 'axios';
  121. export default {
  122. components: { Suggest,SystemMessage },
  123. data() {
  124. return {
  125. menuArr:[],
  126. menuIndex:1,
  127. isShowJy: false,
  128. updateVisible: false,
  129. announcement: {},
  130. loading: false,
  131. defaultActive: '0-0',
  132. innerVisible: false,
  133. rejectLoading: false,
  134. rejectForm: {
  135. StartAnewBusinessName: '',
  136. StartAnewBusinessVal: '1-10人'
  137. },
  138. StartAnewBusinessPeople: [
  139. { value: '1-10人', lable: 0 },
  140. { value: '10-50人', lable: 1 },
  141. { value: '50-200人', lable: 2 },
  142. { value: '200-500人', lable: 3 },
  143. { value: '500-1000人', lable: 4 },
  144. { value: '1000人以上', lable: 5 }
  145. ],
  146. StartAnewBusiness: false,
  147. companyList: [],
  148. userInfo: this.$store.getters.user_info,
  149. cpmpanyId: this.$store.getters.user_info.site_id,
  150. concent: [{ id: 2,name: '创建新企业'},{ id: 1,name: '企业信息设置',isNoShow:this.$getIsAdministrator()? false:true}],
  151. userConcent: [
  152. // {id:1,name:''},
  153. { id: 2,name: '退出账号'},
  154. ],
  155. noticeItem:{},
  156. icons:[
  157. {name:'教程',icon:'#icon-jiaocheng',id:1},
  158. {name:'客服',icon:'#icon-kefu',id:2},
  159. {name:'手机版',icon:'#icon-shouji',id:3}
  160. ],
  161. isAdministrator:this.$getIsAdministrator(),
  162. isLog:false,
  163. };
  164. },
  165. computed: {
  166. ...mapGetters(['site_info','account_info'])
  167. },
  168. watch: {
  169. $route(to, from) {
  170. var str = to.path;
  171. this.menuArr.some((item, index) => {
  172. if (item.path == str) {
  173. this.menuIndex =item.index;
  174. this.$setCache('path',item.index);
  175. return true;
  176. }
  177. });
  178. },
  179. site_info(){
  180. this.menuArr=[
  181. {name:'首页',icon:'#icon-shouye',path:'/index',show:true,index:1},
  182. {name:'目标',icon:'#icon-zhiyeshengyamubiao',path:'/okrIndex',show:this.site_info.sub_menu.okr,index:4,class:'okr'},
  183. {name:'绩效',icon:'#icon-jixiao',path:'/performanceIndex',show:this.site_info.sub_menu.per,index:3,class:'performance'},
  184. {name:'积分',icon:'#icon-PC_gongzuotai_ABfen',path:'/pointIndex',show:this.site_info.sub_menu.integral,index:2,class:'point'},
  185. {name:'巡检',icon:'#icon-tongxunlu_tianjiabumen',path:'/examineIndex',show:this.site_info.sub_menu.sm,index:5,class:'examine'},
  186. {name:'组织',icon:'#icon-shezhi_zuzhijiagou',path:'/organization',show:this.$userInfo().is_site_owner||this.$userInfo().is_site_manager,index:6},
  187. {name:'设置',icon:'#icon-shezhi-xianxing',path:'/system',show:true,index:7},
  188. ];
  189. }
  190. },
  191. created() {
  192. if(this.$route.path!='/index'){
  193. this.menuIndex =this.$getCache('path')!=1? this.$getCache('path'):1;
  194. }
  195. this.$store.dispatch('get_dept_tree',true).then((res) => {}) // 获取部门树型结构列表
  196. this.$store.dispatch('get_site_info',true).then((res) => {}) // 获取部门树型结构列表
  197. },
  198. mounted() {
  199. this.noticeList();
  200. this.getCompany();
  201. if(this.site_info.id){
  202. this.menuArr=[
  203. {name:'首页',icon:'#icon-shouye',path:'/index',show:true,index:1},
  204. {name:'目标',icon:'#icon-zhiyeshengyamubiao',path:'/okrIndex',show:this.site_info.sub_menu.okr,index:4,class:'okr'},
  205. {name:'绩效',icon:'#icon-jixiao',path:'/performanceIndex',show:this.site_info.sub_menu.per,index:3,class:'performance'},
  206. {name:'积分',icon:'#icon-PC_gongzuotai_ABfen',path:'/pointIndex',show:this.site_info.sub_menu.integral,index:2,class:'point'},
  207. {name:'巡检',icon:'#icon-tongxunlu_tianjiabumen',path:'/examineIndex',show:this.site_info.sub_menu.sm,index:5,class:'examine'},
  208. {name:'组织',icon:'#icon-shezhi_zuzhijiagou',path:'/organization',show:this.$userInfo().is_site_owner||this.$userInfo().is_site_manager,index:6},
  209. {name:'设置',icon:'#icon-shezhi-xianxing',path:'/system',show:true,index:7},
  210. ];
  211. }
  212. this.$nextTick(()=>{
  213. // this.initShepherd();
  214. })
  215. },
  216. methods: {
  217. openCursor(item){
  218. let urls=['https://www.yuque.com/xbddba/usmcgl?#','https://www.yuque.com/xbddba/qmvgbb?#','https://www.yuque.com/xbddba/pea8fp?#','https://www.yuque.com/xbddba/rtl7hs?#']
  219. window.open(urls[item.id-1],'_blank');
  220. },
  221. initShepherd(){
  222. // 初始化Shepherd并设置默认参数以及第一步引导
  223. var shepherd = useShepherd({
  224. // 设置默认引导配置
  225. defaultStepOptions: {
  226. // 引导左上角取消按钮图标的配置
  227. cancelIcon: {
  228. enabled: true, // 默认为true
  229. },
  230. // 指定引导盒子的类名, 用于后续自定义样式, 类名可叠加
  231. classes: 'box-all',
  232. // 滚动方式
  233. scrollTo: {
  234. behavior: 'smooth',
  235. block: 'center'
  236. }
  237. },
  238. // 添加第一步引导
  239. steps: [
  240. {
  241. // 设置引导标题
  242. title: '目标系统',
  243. // 设置引导文本
  244. text: '这是第一个引导说明, 你好呀!朋友',
  245. // 设置指向的目标元素
  246. attachTo: {
  247. // 目标元素
  248. element: '.okr',
  249. // 引导DOM位于目标元素的方位
  250. on: 'bottom'
  251. },
  252. // 设置底部按钮
  253. buttons: [
  254. {
  255. action: function() {
  256. // Shepherd退出引导的方法
  257. return this.cancel();
  258. },
  259. // 颜色是否突出, 设置次要的颜色就不为突出
  260. secondary: true,
  261. text: 'Exit'
  262. },
  263. {
  264. action: function() {
  265. // Shepherd执行下一步引导的方法
  266. return this.next();
  267. },
  268. text: 'Next'
  269. }
  270. ],
  271. id: 'welcome' // 用于Shepherd step的唯一标识符
  272. },
  273. {
  274. // 设置引导标题
  275. title: '绩效系统',
  276. // 设置引导文本
  277. text: '这是第一个引导说明, 你好呀!朋友',
  278. // 设置指向的目标元素
  279. attachTo: {
  280. // 目标元素
  281. element: '.performance',
  282. // 引导DOM位于目标元素的方位
  283. on: 'bottom'
  284. },
  285. // 设置底部按钮
  286. buttons: [
  287. {
  288. action: function() {
  289. // Shepherd退出引导的方法
  290. return this.cancel();
  291. },
  292. // 颜色是否突出, 设置次要的颜色就不为突出
  293. secondary: true,
  294. text: 'Exit'
  295. },
  296. {
  297. action: function() {
  298. // Shepherd执行下一步引导的方法
  299. return this.next();
  300. },
  301. text: 'Next'
  302. }
  303. ],
  304. id: 'welcome' // 用于Shepherd step的唯一标识符
  305. },
  306. {
  307. // 设置引导标题
  308. title: '积分系统',
  309. // 设置引导文本
  310. text: '这是第一个引导说明, 你好呀!朋友',
  311. // 设置指向的目标元素
  312. attachTo: {
  313. // 目标元素
  314. element: '.point',
  315. // 引导DOM位于目标元素的方位
  316. on: 'bottom'
  317. },
  318. // 设置底部按钮
  319. buttons: [
  320. {
  321. action: function() {
  322. // Shepherd退出引导的方法
  323. return this.cancel();
  324. },
  325. // 颜色是否突出, 设置次要的颜色就不为突出
  326. secondary: true,
  327. text: 'Exit'
  328. },
  329. {
  330. action: function() {
  331. // Shepherd执行下一步引导的方法
  332. return this.next();
  333. },
  334. text: 'Next'
  335. }
  336. ],
  337. id: 'welcome' // 用于Shepherd step的唯一标识符
  338. },
  339. {
  340. // 设置引导标题
  341. title: '巡检系统',
  342. // 设置引导文本
  343. text: '这是第一个引导说明, 你好呀!朋友',
  344. // 设置指向的目标元素
  345. attachTo: {
  346. // 目标元素
  347. element: '.examine',
  348. // 引导DOM位于目标元素的方位
  349. on: 'bottom'
  350. },
  351. // 设置底部按钮
  352. buttons: [
  353. {
  354. action: function() {
  355. // Shepherd退出引导的方法
  356. return this.cancel();
  357. },
  358. // 颜色是否突出, 设置次要的颜色就不为突出
  359. secondary: true,
  360. text: 'Exit'
  361. },
  362. {
  363. action: function() {
  364. // Shepherd执行下一步引导的方法
  365. return this.next();
  366. },
  367. text: 'Next'
  368. }
  369. ],
  370. id: 'welcome' // 用于Shepherd step的唯一标识符
  371. }
  372. ],
  373. // 是否背景突出引导, 默认是false
  374. useModalOverlay: true
  375. });
  376. shepherd.start();
  377. },
  378. homeUrl(){
  379. this.$router.push({ path: '/index' });
  380. },
  381. iconActive(id){
  382. if(id==1){
  383. window.open('https://www.yuque.com/xbddba/wqeca2','_blank');
  384. }else if(id==2){
  385. this.innerVisible=true;
  386. }else{
  387. }
  388. },
  389. openUrl(item){
  390. if(this.menuIndex==item.index||this.isLog){
  391. return false;
  392. }
  393. this.isLog=true;
  394. if(item){
  395. this.menuIndex=item.index;
  396. this.$setCache('point_path','0-0');//积分初始化路由
  397. this.$setCache('okr_path', '0-0'); //OKR,再进来初始化
  398. this.$setCache('examine_path','0-0');//现场管理
  399. this.$setCache('performance_path', '0-0'); //关闭绩效系统窗口后,再进来初始化
  400. this.$setCache('path',item.index);
  401. this.$router.push({ path: item.path });
  402. }else{
  403. this.$setCache('point_path','0-0');//积分初始化路由
  404. this.$setCache('okr_path', '0-0'); //OKR,再进来初始化
  405. this.$setCache('examine_path','0-0');//现场管理
  406. this.$setCache('performance_path', '0-0'); //关闭绩效系统窗口后,再进来初始化
  407. this.$setCache('path',1);
  408. this.$router.push({ path: '/index' });
  409. }
  410. setTimeout(()=>{
  411. this.isLog=false
  412. },1000);
  413. },
  414. openNotice() {
  415. this.updateVisible = false;
  416. this.$router.push({ path: '/update_notice',query:{item:JSON.stringify(this.noticeItem),type:1}})
  417. },
  418. getNoticeDetail(id){
  419. this.$axiosUser('get', '/api/pro/article', {id:id}).then(res => {
  420. let data=res.data.data
  421. this.updateVisible = true;
  422. this.$setCache('noticeId',id);
  423. this.announcement = data;
  424. });
  425. },
  426. //系统公告
  427. noticeList() {
  428. let params = { page: 1, page_size: 1, type:1 };
  429. this.$axiosUser('get', '/api/pro/article/list', params).then(res => {
  430. let list = res.data.data.list[0];
  431. if(res.data.data.list.length>0){
  432. if (this.$getCache('noticeId')) {
  433. if (this.$getCache('noticeId') != list.id) {
  434. this.getNoticeDetail(list.id);
  435. }
  436. } else {
  437. this.getNoticeDetail(list.id);
  438. }
  439. this.noticeItem=list
  440. }
  441. });
  442. },
  443. handleCommand2(item) {
  444. if (item.id == 1) {
  445. this.$router.push({ path: '/system',query:{name:'User'} });
  446. } else{
  447. this.logout();
  448. }
  449. },
  450. handleCommand(item) {
  451. if (item.id !== 1 && item.id !== 2) {
  452. this.cpmpanyId = item.id;
  453. this.checkCompany();
  454. } else if (item.id == 1 && item.name == '企业信息设置') {
  455. this.$router.push({ path: '/system',query:{name:'Company'} });
  456. } else if (item.id == 2 && item.name == '创建新企业') {
  457. this.rejectForm = {
  458. StartAnewBusinessName: '',
  459. StartAnewBusinessVal: '1-10人'
  460. };
  461. this.StartAnewBusiness = true;
  462. }
  463. },
  464. StartAnewBuY(formName) {
  465. this.$refs[formName].validate(valid => {
  466. if (valid) {
  467. this.$axios('post', '/api/pro/site/create', {
  468. name: this.rejectForm.StartAnewBusinessName,
  469. scale: this.rejectForm.StartAnewBusinessVal,
  470. industry: '互联网',
  471. tel: '',
  472. employee_name: ''
  473. })
  474. .then(res => {
  475. this.cpmpanyId = res.data.data.id;
  476. this.checkCompany();
  477. })
  478. .finally(() => {
  479. this.StartAnewBusiness = false;
  480. });
  481. }
  482. });
  483. },
  484. adoptClose() {
  485. this.StartAnewBusiness = false;
  486. setTimeout(() => {
  487. this.rejectForm = {
  488. StartAnewBusinessName: '',
  489. StartAnewBusinessVal: '1-10人'
  490. };
  491. }, 200);
  492. },
  493. //关闭 创建新企业 弹窗
  494. handleClose(done) {
  495. done();
  496. this.rejectForm = {
  497. StartAnewBusinessName: '',
  498. StartAnewBusinessVal: '1-10人'
  499. };
  500. },
  501. // 切换公司
  502. checkCompany() {
  503. this.$axios('post', '/api/pro/employee-login', { site_id: this.cpmpanyId }).then(res => {
  504. setToken(res.data.data.token);
  505. this.$setCache('point_path','0-0');//积分初始化路由
  506. this.$setCache('okr_path', '0-0'); //OKR,再进来初始化
  507. this.$setCache('examine_path','0-0');//现场管理
  508. this.$setCache('performance_path', '0-0'); //关闭绩效系统窗口后,再进来初始化
  509. this.$removeCache(['SET_EMPLOYEE_MAP','SET_EMPLOYEE_MAP_ALL','site_info', 'dept_tree','account_info','userInfo']);
  510. this.$router.replace({path:'index'})
  511. this.$nextTick(()=>{
  512. window.location.reload();
  513. })
  514. });
  515. },
  516. // 获取公司列表
  517. getCompany() {
  518. this.$axios('get', '/api/pro/account/site').then(res => {
  519. if (res.data.code == 1) {
  520. let site_list = [];
  521. let site_map = {};
  522. if (res.data.data.list && res.data.data.list.length == 0) {
  523. this.companyList = [...this.concent];
  524. } else {
  525. let data=res.data.data;
  526. for (let i in data) {
  527. site_list.push({
  528. id: data[i].site.id,
  529. name: data[i].site.name,
  530. });
  531. site_map[data[i].site.id] = data[i].site.name;
  532. }
  533. this.$nextTick(() => {
  534. this.companyList = [...site_list, ...this.concent];
  535. this.cpmpanyId = this.userInfo.site_id;
  536. });
  537. }
  538. }
  539. });
  540. },
  541. logout() {
  542. this.$store.dispatch('LogOut');
  543. },
  544. }
  545. };
  546. </script>
  547. <style scoped="scoped" lang="scss">
  548. .icon-item{
  549. margin-right: 30px;
  550. cursor: pointer;
  551. }
  552. .icon-item:hover{
  553. color: #409eff;
  554. }
  555. .count_max{
  556. border: 1px solid #005bea;
  557. border-radius: 5px;
  558. padding:4px 10px;
  559. color: #005bea;
  560. cursor: pointer;
  561. }
  562. .menu-item{
  563. width: 70px;
  564. color: #ccc;
  565. text-align: center;
  566. padding: 10px 0;
  567. cursor: pointer;
  568. position: relative;
  569. border-left: 3px solid #191a23;
  570. transition: border-color .3s,background-color .3s,color .3s;
  571. }
  572. .svgIcon {
  573. font-size: 16px;
  574. margin: 0 auto;
  575. }
  576. .menu-item:hover{
  577. background-color: #393b4b;
  578. }
  579. .menu-active{
  580. background-color: #393b4b;
  581. border-left: 5px solid #005bea;
  582. color: #fff;
  583. }
  584. .announDetails {
  585. ::v-deep img {
  586. width: 100%;
  587. }
  588. }
  589. .updateNotice ::v-deep .el-dialog {
  590. border-radius: 10px;
  591. .el-dialog__header {
  592. padding: 13px 20px;
  593. text-align: center;
  594. background-color: #3193fc;
  595. border-radius: 8px 8px 0 0;
  596. .el-dialog__title {
  597. font-size: 16px;
  598. color: #fff;
  599. }
  600. .el-icon-close {
  601. color: #fff;
  602. }
  603. }
  604. .el-dialog__body {
  605. padding: 20px 20px 30px 20px;
  606. }
  607. .el-dialog__footer {
  608. .dialog-footer {
  609. .is-round {
  610. padding: 10px 19px;
  611. border-radius: 15px;
  612. }
  613. }
  614. }
  615. }
  616. .navigation {
  617. position: fixed;
  618. right: 20px;
  619. bottom: 100px;
  620. z-index: 999;
  621. }
  622. .navigationBox {
  623. background-color: #409eff;
  624. color: #fff;
  625. font-size: 12px;
  626. margin-top: 20px;
  627. text-align: center;
  628. }
  629. .navigationItem {
  630. padding: 6px;
  631. cursor: pointer;
  632. }
  633. .navigationItem:hover {
  634. background-color: #005bea;
  635. }
  636. .money {
  637. line-height: 32px;
  638. text-align: center;
  639. height: 32px;
  640. color: #ff9600;
  641. width: 88px;
  642. background: #ffffff;
  643. border: 1px solid #ff9600;
  644. opacity: 1;
  645. border-radius: 3px;
  646. cursor: pointer;
  647. margin-left: 20px;
  648. }
  649. .money2 {
  650. line-height: 32px;
  651. text-align: center;
  652. height: 32px;
  653. color: #409eff;
  654. width: 120px;
  655. background: #ffffff;
  656. border: 1px solid #409eff;
  657. opacity: 1;
  658. border-radius: 3px;
  659. cursor: pointer;
  660. margin: 0 20px;
  661. padding-left: 10px;
  662. }
  663. .innerVisible p {
  664. text-align: center;
  665. }
  666. .megData div:nth-child(1) {
  667. background-image: linear-gradient(to bottom, #5e6e9b 0%, #232d48 100%);
  668. text-align: center;
  669. color: #e1bf66;
  670. border-top-left-radius: 25px;
  671. border-bottom-left-radius: 25px;
  672. line-height: 35px;
  673. height: 35px;
  674. padding: 0 10px;
  675. }
  676. .megData div:nth-child(2) {
  677. background-image: linear-gradient(to bottom, #ffeab2 0%, #e1bf66 100%);
  678. text-align: center;
  679. color: #232d48;
  680. border-top-right-radius: 25px;
  681. border-bottom-right-radius: 25px;
  682. line-height: 35px;
  683. height: 35px;
  684. padding: 0 10px;
  685. }
  686. .jx {
  687. width: 140px;
  688. color: #fff;
  689. border-radius: 3px;
  690. text-align: left;
  691. box-shadow: 1px 1px 0px 0px #ccc;
  692. height: 45px;
  693. font-size: 16px;
  694. padding-left: 36px;
  695. line-height: 45px;
  696. cursor: pointer;
  697. font-weight: 600;
  698. // border: 1px solid #409EFF;
  699. border-radius: 5px;
  700. background-image: linear-gradient(117deg, #00c6fb 0%, #005bea 100%);
  701. margin: 0 auto;
  702. margin-bottom: 10px;
  703. }
  704. .PCtutorials {
  705. height: 38px;
  706. width: 38px;
  707. display: inline-block;
  708. border-radius: 50%;
  709. text-align: center;
  710. font-size: 18px;
  711. line-height: 38px;
  712. -webkit-transition: all 0.3s;
  713. -moz-transition: all 0.3s;
  714. -ms-transition: all 0.3s;
  715. -o-transition: all 0.3s;
  716. transition: all 0.3s;
  717. background-color: #409eff;
  718. color: #fff;
  719. }
  720. .PCtutorials:hover {
  721. box-shadow: 0 0 3px #ccc;
  722. }
  723. .routerActive {
  724. background-color: #199afb !important;
  725. }
  726. .active {
  727. color: #409eff;
  728. background-color: rgba(38, 162, 255, 0.1);
  729. }
  730. .right-menu {
  731. float: right;
  732. height: 100%;
  733. display: flex;
  734. align-items: center;
  735. &:focus {
  736. outline: none;
  737. }
  738. .right-menu-item {
  739. display: inline-block;
  740. margin: 0 8px;
  741. }
  742. .screenfull {
  743. height: 20px;
  744. }
  745. .international {
  746. vertical-align: top;
  747. }
  748. .theme-switch {
  749. vertical-align: 15px;
  750. }
  751. .avatar-container {
  752. height: 60px;
  753. margin-right: 30px;
  754. .avatar-wrapper {
  755. cursor: pointer;
  756. margin-top: 5px;
  757. position: relative;
  758. .user-avatar {
  759. width: 40px;
  760. height: 40px;
  761. border-radius: 10px;
  762. }
  763. .el-icon-caret-bottom {
  764. position: absolute;
  765. right: -20px;
  766. top: 25px;
  767. font-size: 12px;
  768. }
  769. }
  770. }
  771. }
  772. .el-menu-vertical-demo:not(.el-menu--collapse) {
  773. width: 180px;
  774. }
  775. .el-header {
  776. background-color: #fff;
  777. padding: 0 !important;
  778. border-bottom: 1px solid #f1f1f1;
  779. min-width: 1100px;
  780. }
  781. .el-menu {
  782. overflow: hidden;
  783. border: none;
  784. }
  785. .con_nav_left {
  786. background: #fff;
  787. overflow-y: scroll;
  788. }
  789. .box-all {
  790. height: 100%;
  791. overflow: hidden;
  792. }
  793. .el-main {
  794. background-color: #f0f4fa;
  795. height: calc(100vh - 60px);
  796. overflow-y: scroll;
  797. padding: 10px;
  798. min-width: 1100px;
  799. box-sizing: border-box;
  800. }
  801. .el-main::-webkit-scrollbar {
  802. display: none;
  803. }
  804. .logo-box {
  805. cursor: pointer;
  806. width: 70px;
  807. border-bottom: 1px solid #101117;
  808. background: #191a23;
  809. }
  810. .logo-box .logo {
  811. width: 30px;
  812. height: 30px;
  813. margin-right: 5px;
  814. border-radius: 6px;
  815. }
  816. .logo-box div {
  817. font-size: 16px;
  818. font-weight: 600;
  819. }
  820. .wn {
  821. height: 26px;
  822. width: 26px;
  823. margin-right: 12px;
  824. cursor: pointer;
  825. }
  826. .hea-right {
  827. padding: 0 20px;
  828. }
  829. .upgrade {
  830. margin-left: 10px;
  831. margin-right: 10px;
  832. }
  833. /deep/ .el-menu-item {
  834. padding-right: 10px !important;
  835. }
  836. /deep/ .el-menu-item.is-active {
  837. color: #409eff;
  838. background-color: #ecf5ff;
  839. }
  840. /deep/ .el-submenu .el-menu-item {
  841. min-width: 180px;
  842. box-sizing: border-box;
  843. }
  844. .main-left {
  845. background: #191a23;
  846. -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35);
  847. box-shadow: 2px 0 6px rgba(0,21,41,.35);
  848. }
  849. </style>