home.vue 33 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237
  1. <template>
  2. <div class="all-box">
  3. <div class="home-dialog">
  4. <el-dialog
  5. top="0"
  6. title="系统通知"
  7. :visible.sync="dialogVisible"
  8. width="30%">
  9. <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
  10. <el-tab-pane v-for="(msgitem,index) in msgtype" :key="index" :label="msgitem.id+''" :name="msgitem.name">
  11. <span slot="label">
  12. {{ msgitem.name }}
  13. <el-badge :hidden="msgitem.unReadCount==0?true:false" :value="msgitem.unReadCount" :max="9999"></el-badge>
  14. </span>
  15. </el-tab-pane>
  16. <div class="msg-box">
  17. <div class="read-btn">
  18. <el-button type="primary" @click="taskclicks(2)" size="mini" :plain="tasknobtn" >未读</el-button>
  19. <el-button type="primary" @click="taskclicks(3)" size="mini" :plain="taskbtn" >已读</el-button>
  20. </div>
  21. <div class="scroll-box">
  22. <div class="news-box" v-for="(item,index) in msglist" :key="index">
  23. <div class="news-box-list">
  24. <div class="news-list-hade">
  25. <div v-if="type==1021">系统通知</div>
  26. <div v-if="type!=1021">{{item.title}}</div>
  27. <div v-if="type!=1021">所属部门: {{item.issuerDep}}</div>
  28. </div>
  29. <div class="news-list-content" v-html="item.content">
  30. </div>
  31. <div class="news-list-posts">
  32. <div v-if="type==1020">发布人: {{item.issuerUser}}</div>
  33. <div v-if="type==1020">发布时间: {{item.releaseTime}}</div>
  34. <div v-if="type!=1020">发送时间: {{item.releaseTime}}</div>
  35. </div>
  36. <div v-if="type==1020" class="news-list-btn" >
  37. <el-button @click="DeleMsg(index,item)" size="mini" v-if="item.isRead==0" type="primary">前往任务</el-button>
  38. <el-button v-if="item.isRead==1" size="mini" type="info">已读任务</el-button>
  39. </div>
  40. <div v-else class="news-list-btn" >
  41. <el-button @click="DeleMsg(index,item)" size="mini" v-if="item.isRead==0" type="primary">确认已读</el-button>
  42. <el-button v-if="item.isRead==1" size="mini" type="info">已读</el-button>
  43. </div>
  44. </div>
  45. </div>
  46. <div v-if="count>10&&msglist.length<count" class="loadmore">
  47. <el-button @click="loadadd" size="mini">加载更多</el-button>
  48. </div>
  49. <el-divider v-if="msglist.length>=count">没有更多了!</el-divider>
  50. </div>
  51. </div>
  52. </el-tabs>
  53. </el-dialog>
  54. </div>
  55. <div class="gpt-dialog">
  56. <el-dialog top="3vh" width="1600px" title="请自行用手机号注册即可使用" :visible.sync="gptdialog">
  57. <iframe src="https://kimi.moonshot.cn" width="100%" height="800px"></iframe>
  58. </el-dialog>
  59. </div>
  60. <el-container class="all">
  61. <el-aside class="delwh menubar">
  62. <div ref="haeds" class="user">
  63. <div class="user-box">
  64. <div class="user-img">
  65. <img src="../assets/logo2.png" />
  66. </div>
  67. <div v-if="panduan" class="user-text">
  68. 泛美国际 - AI智能办公系统
  69. </div>
  70. </div>
  71. </div>
  72. <div ref="avatarhaeds" class="avatar-box">
  73. <div class="nei-avatar">
  74. <div class="avatar">
  75. <div class="avatar-img">
  76. <img v-if="sex==1" src="../assets/nv.png" alt="" />
  77. <img v-else src="../assets/nan.png" alt="" />
  78. </div>
  79. <div v-if="panduan" class="avatar-text">
  80. <div class="avatar-name">员工: {{ userinif.userInfo.cnName }}</div>
  81. <div class="avatar-division">职位: {{ userinif.userInfo.jobName }}</div>
  82. <div>部门: {{ userinif.userInfo.depName }}</div>
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. <el-menu :style="gaodu" :default-active="indexs" class="el-menu-vertical-demo meun-ul" @open="handleOpen" @close="handleClose"
  88. :collapse="isCollapse">
  89. <el-menu-item v-for="(item, filindex) in filmenuList" :key="filindex + '/'"
  90. :index="item.modulid + '-' + item.pageList[0].pageid" @click="toURLs($event.index, item)">
  91. <i :class="iconfont+item.remark"></i>
  92. <span slot="title">{{ item.pageList[0].pageName }}</span>
  93. </el-menu-item>
  94. <el-submenu v-for="(item, index) in filmenuLists" :key="index" :index='item.modulid + ""'
  95. @click="toURL($event.index)">
  96. <template slot="title">
  97. <i :class="iconfont+item.remark"></i>
  98. <span>{{ item.modulName }}</span>
  99. </template>
  100. <el-menu-item-group>
  101. <el-menu-item @click="toURL($event.index, items)" v-for="(items, index) in item.pageList" :key="index"
  102. :index="items.modulid + '-' + items.pageid">{{ items.pageName }}</el-menu-item>
  103. </el-menu-item-group>
  104. </el-submenu>
  105. </el-menu>
  106. </el-aside>
  107. <el-container>
  108. <el-header>
  109. <div class="btnradio">
  110. <el-radio-group v-model="isCollapse" @change="radioChange($event)">
  111. <el-radio-button :class="classA" class="radiobox" :label="false"><span
  112. class="iconfont icon-caidanzhankai icon"></span></el-radio-button>
  113. <el-radio-button :class="classB" class="radiobox" :label="true"><span
  114. class="iconfont icon-caidanshouqi icon"></span></el-radio-button>
  115. </el-radio-group>
  116. <div class="header-title">首页</div>
  117. </div>
  118. <div class="name-box">
  119. <div class="instrument" @click="instrumentclick('.instrument-box', $event)">
  120. <i class="iconfont icon-shiyonggongju"></i>
  121. </div>
  122. <div class="message">
  123. <el-badge :value="unReadCount" class="item">
  124. <i class="iconfont icon-tongzhi" @click="dialogVisible= true"></i>
  125. </el-badge>
  126. </div>
  127. <div class="user-inif" @click="instrumentclick('.user-operate', $event)">
  128. <div class="user-inifs">
  129. <img v-if="sex==1" src="../assets/nv.png" alt="" />
  130. <img v-else src="../assets/nan.png" alt="" />
  131. </div>
  132. </div>
  133. </div>
  134. <div class="instrument-box">
  135. <div class="instrument-box-title">实用工具</div>
  136. <div class="instrument-box-inif">
  137. <div class="box-inif-ul">
  138. <div @click="gptdialog = true" class="box-inif-li">
  139. <div class="inif-li-img">
  140. <img src="../assets/QuNaEr.jpg" alt="" />
  141. </div>
  142. <div class="inif-li-text">KIMI</div>
  143. </div>
  144. <div @click="opengpt" class="box-inif-li">
  145. <div class="inif-li-img">
  146. <img src="../assets/QuNaEr.jpg" alt="" />
  147. </div>
  148. <div class="inif-li-text">GPT</div>
  149. </div>
  150. <!-- <div class="box-inif-li">
  151. <div class="inif-li-img">
  152. <img src="../assets/QuNaEr.jpg" alt="" />
  153. </div>
  154. <div class="inif-li-text">去哪儿</div>
  155. </div>
  156. <div class="box-inif-li">
  157. <div class="inif-li-img">
  158. <img src="../assets/QuNaEr.jpg" alt="" />
  159. </div>
  160. <div class="inif-li-text">去哪儿</div>
  161. </div>
  162. <div class="box-inif-li">
  163. <div class="inif-li-img">
  164. <img src="../assets/QuNaEr.jpg" alt="" />
  165. </div>
  166. <div class="inif-li-text">去哪儿</div>
  167. </div>
  168. <div class="box-inif-li">
  169. <div class="inif-li-img">
  170. <img src="../assets/QuNaEr.jpg" alt="" />
  171. </div>
  172. <div class="inif-li-text">去哪儿</div>
  173. </div>
  174. <div class="box-inif-li">
  175. <div class="inif-li-img">
  176. <img src="../assets/QuNaEr.jpg" alt="" />
  177. </div>
  178. <div class="inif-li-text">去哪儿</div>
  179. </div>
  180. <div class="box-inif-li">
  181. <div class="inif-li-img">
  182. <img src="../assets/QuNaEr.jpg" alt="" />
  183. </div>
  184. <div class="inif-li-text">去哪儿</div>
  185. </div>
  186. <div class="box-inif-li">
  187. <div class="inif-li-img">
  188. <img src="../assets/QuNaEr.jpg" alt="" />
  189. </div>
  190. <div class="inif-li-text">去哪儿</div>
  191. </div>
  192. <div class="box-inif-li">
  193. <div class="inif-li-img">
  194. <img src="../assets/QuNaEr.jpg" alt="" />
  195. </div>
  196. <div class="inif-li-text">去哪儿</div>
  197. </div>
  198. <div class="box-inif-li">
  199. <div class="inif-li-img">
  200. <img src="../assets/QuNaEr.jpg" alt="" />
  201. </div>
  202. <div class="inif-li-text">去哪儿</div>
  203. </div> -->
  204. </div>
  205. </div>
  206. </div>
  207. <div class="user-operate">
  208. <div class="operate-title">
  209. <div class="avatar">
  210. <div class="avatar-img">
  211. <img v-if="sex==1" src="../assets/nv.png" alt="" />
  212. <img v-else src="../assets/nan.png" alt="" />
  213. </div>
  214. <div class="avatar-text">
  215. <div class="avatar-name">姓名:{{ userinif.userInfo.cnName }} 部门: {{ userinif.userInfo.depName }}</div>
  216. <div class="avatar-division">职位: {{ userinif.userInfo.jobName }}</div>
  217. </div>
  218. </div>
  219. </div>
  220. <div class="operate-ul">
  221. <!-- <div class="operate-li">全屏</div>
  222. <div class="operate-li">修改密码</div>
  223. <div class="operate-li">个人资料</div> -->
  224. <div @click="logOut()" class="operate-li">退出</div>
  225. </div>
  226. </div>
  227. </el-header>
  228. <el-main>
  229. <!-- <keep-alive>
  230. <router-view/>
  231. </keep-alive> -->
  232. <router-view @transfer="getUser"/>
  233. </el-main>
  234. </el-container>
  235. </el-container>
  236. </div>
  237. </template>
  238. <script>
  239. //import * as signalR from "@aspnet/signalr";
  240. // const signalR=require('@microsoft/signalr')
  241. // import * as signalR from "@microsoft/signalr";
  242. // import * as signalR from "../../node_modules/microso";
  243. // import child from '~/components/Finance/FeesPage';
  244. // const signalR=require('@microsoft/signalr')
  245. export default {
  246. data() {
  247. return {
  248. userId:'',
  249. token:'',
  250. menuList: [],
  251. isCollapse: false,
  252. panduan: "",
  253. username: "雷怡",
  254. indexs: "1",
  255. pdinstrument: true,
  256. userinif: '',
  257. dialogVisible: false ,
  258. newstasklist:[],
  259. newsgrouplist:[],
  260. activeName: '',
  261. tasknot:0,//任务未读条数
  262. groupnot:0,//团组未读条数
  263. tasknotlist:[],//任务未读
  264. taskReadlist:[],//任务以读
  265. groupnotlist:[],//团组未读
  266. groupReadlist:[],//团组以读
  267. taskbtn:true,//plain任务已读
  268. tasknobtn:false,//plain任务未读
  269. groupbtn:true,//plain团组已读
  270. groupnobtn:true,//plain团组未读
  271. unReadCount:0,//未读总条数
  272. msgtype:[],//未读总条数
  273. pageIndex:1,//页码
  274. pageSize:10,//条数
  275. type:0,//类型
  276. readStatus:2,//状态
  277. msglist:[],//list
  278. count:0,//list数量
  279. panduans:false,
  280. iconfont:'iconfont ',
  281. gaodu:'',
  282. gptdialog:false,
  283. sex:0,
  284. classA:'',
  285. classB:''
  286. };
  287. },
  288. // components: {
  289. // child
  290. // },
  291. methods: {
  292. //子传父
  293. getUser(msg){
  294. console.log(msg);
  295. this.radioChange(msg);
  296. },
  297. handleOpen(key, keyPath) {
  298. console.log(key, keyPath);
  299. },
  300. handleClose(key, keyPath) {
  301. console.log(key, keyPath);
  302. },
  303. //移除element行内样式
  304. removal() {
  305. document.querySelector(".menubar").style.height = window.innerHeight + "px";
  306. document.querySelector(".all").style.height = window.innerHeight + "px";
  307. document.querySelector(".delwh").style.width = "";
  308. document.querySelector(".meun-ul").style.height=(window.innerHeight-(this.$refs.haeds.offsetHeight+this.$refs.avatarhaeds.offsetHeight))+'px';
  309. console.log(window.innerHeight-(this.$refs.haeds.offsetHeight+this.$refs.avatarhaeds.offsetHeight))
  310. },
  311. toURLs(val, item) {
  312. console.log(val)
  313. console.log(item)
  314. localStorage.setItem("indexs", val);
  315. localStorage.setItem("innhtml", item.pageList[0].pageName);
  316. localStorage.setItem("Permissions", JSON.stringify(item.pageAuth));
  317. this.$router.push({ path: "/home" + item.pageList[0].webUrl });
  318. document.querySelector(".header-title").innerHTML = item.pageList[0].pageName;
  319. },
  320. toURL(val, item) {
  321. console.log(val)
  322. console.log(item)
  323. localStorage.setItem("indexs", val);
  324. localStorage.setItem("innhtml", item.pageName);
  325. localStorage.setItem("Permissions", JSON.stringify(item.pageAuth));
  326. this.$router.push({ path: "/home" + item.webUrl });
  327. document.querySelector(".header-title").innerHTML = item.pageName;
  328. },
  329. //打开gpt
  330. opengpt(){
  331. window.open('https://chat.openai.com')
  332. },
  333. radioChange(val) {
  334. this.gaodu='height:'+ (window.innerHeight-(this.$refs.haeds.offsetHeight+this.$refs.avatarhaeds.offsetHeight))+'px'
  335. var radiobox = document.querySelectorAll(".radiobox");
  336. console.log(radiobox)
  337. if (val == true) {
  338. this.panduan = false;
  339. document.querySelector(".user-text").style.display = "none";
  340. document.querySelector(".avatar-text").style.display = "none";
  341. this.isCollapse=val
  342. radiobox[1].style.display = "none";
  343. radiobox[0].style.display = "inline-block";
  344. } else if (val == false) {
  345. this.panduan = true;
  346. this.isCollapse=val
  347. radiobox[1].style.display = "inline-block";
  348. radiobox[0].style.display = "none";
  349. }
  350. },
  351. ifIndexValue() {
  352. this.indexs = localStorage.getItem('indexs');
  353. document.querySelector(".header-title").innerHTML = localStorage.getItem('innhtml');
  354. console.log(this.indexs)
  355. },
  356. //实用工具
  357. instrumentclick(val, evt) {
  358. if (document.querySelector(val).style.top != "60px") {
  359. evt.currentTarget.style.backgroundImage = "linear-gradient(rgba(29,33,41,.03),rgba(29,33,41,.1))";
  360. evt.currentTarget.firstElementChild.style.color = "#666";
  361. document.querySelector(val).style.top = 60 + "px";
  362. } else {
  363. evt.currentTarget.style.backgroundImage = "";
  364. evt.currentTarget.firstElementChild.style.color = "";
  365. document.querySelector(val).style.top = -570 + "px";
  366. }
  367. },
  368. getmenu() {
  369. this.menuList = JSON.parse(localStorage.getItem('userinif')).authData;
  370. console.log(this.menuList)
  371. },
  372. //登出
  373. logOut() {
  374. this.$confirm('此操作将退出此账号, 是否继续?', '提示', {
  375. confirmButtonText: '确定',
  376. cancelButtonText: '取消',
  377. type: 'warning'
  378. }).then(() => {
  379. this.$router.push({ name: 'Login' })
  380. localStorage.clear();
  381. this.$message({
  382. type: 'success',
  383. message: '已退出!'
  384. });
  385. }).catch(() => {
  386. this.$message({
  387. type: 'info',
  388. message: '已取消退出'
  389. });
  390. });
  391. // this.$router.push({name:'Login'})
  392. // localStorage.clear();
  393. },
  394. fatherMethod() {
  395. console.log('测试');
  396. },
  397. handleClick(tab, event) {
  398. this.pageIndex=1;
  399. this.pageSize=10;
  400. this.msglist=[];
  401. this.type=Number(tab.label);
  402. this.PotsMessagePageList();
  403. },
  404. //已读未读切换
  405. taskclicks(val){
  406. if(val==2){
  407. this.tasknobtn=false;
  408. this.taskbtn=true;
  409. }else{
  410. this.tasknobtn=true;
  411. this.taskbtn=false;
  412. }
  413. this.readStatus=val;
  414. this.pageIndex=1;
  415. this.pageSize=10;
  416. this.msglist=[];
  417. this.PotsMessagePageList();
  418. },
  419. //加载更多
  420. loadadd(){
  421. this.pageIndex++
  422. this.PotsMessagePageList()
  423. },
  424. //消息list
  425. PotsMessagePageList(){
  426. console.log(this.type)
  427. var url = "/api/System/PotsMessagePageList"
  428. var that = this
  429. this.$axios({
  430. method: 'post',
  431. url: url,
  432. headers: {
  433. Authorization: 'Bearer ' + that.token
  434. },
  435. data:{
  436. portType:1,
  437. pageIndex:that.pageIndex,
  438. pageSize:that.pageSize,
  439. type:that.type,
  440. userId:that.userId,
  441. readStatus:that.readStatus
  442. }
  443. }).then(function (res) {
  444. console.log(res)
  445. if(res.data.code==200){
  446. var magarr=res.data.data;
  447. that.count=res.data.count;
  448. for(let j=0;j<magarr.length;j++){
  449. that.msglist.push(magarr[j])
  450. }
  451. }else{
  452. that.$message.error(res.data.msg);
  453. }
  454. }).catch(function (error) {
  455. that.$message.error("获取消息列表失败!");
  456. });
  457. },
  458. //任务通知切换
  459. newstasklistclick(){
  460. console.log(this.newstasklist)
  461. },
  462. //消息类型
  463. PotsMsgTypeData(){
  464. this.msglist=[];
  465. var url = "/api/System/PotsMsgTypeData"
  466. var that = this
  467. this.$axios({
  468. method: 'post',
  469. url: url,
  470. headers: {
  471. Authorization: 'Bearer ' + that.token
  472. },
  473. data:{
  474. portType:1,
  475. userId:that.userId
  476. }
  477. }).then(function (res) {
  478. console.log(res)
  479. if(res.data.code==200){
  480. that.msgtype=res.data.data;
  481. if(!that.panduans){
  482. that.activeName=that.msgtype[0].name;
  483. that.type=that.msgtype[0].id;
  484. }
  485. that.panduans=false
  486. that.PotsMessagePageList()
  487. }else{
  488. that.$message.error(res.data.msg);
  489. }
  490. }).catch(function (error) {
  491. that.$message.error(error);
  492. });
  493. },
  494. //未读条数
  495. PotsMessageUnreadTotalCount(){
  496. var url = "/api/System/PotsMessageUnreadTotalCount"
  497. var that = this
  498. this.$axios({
  499. method: 'post',
  500. url: url,
  501. headers: {
  502. Authorization: 'Bearer ' + that.token
  503. },
  504. data:{
  505. userId:that.userId
  506. }
  507. }).then(function (res) {
  508. if(res.data.code==200){
  509. that.unReadCount=res.data.data.messageUnReadCount;
  510. if(that.unReadCount!=localStorage.getItem('unReadCount')){
  511. that.PotsMsgTypeData();
  512. window.localStorage.removeItem('unReadCount');
  513. localStorage.setItem('unReadCount', JSON.stringify(that.unReadCount));
  514. }else{
  515. console.log('没有新通知!')
  516. }
  517. // return res.data.data.unreadCount;
  518. }else{
  519. that.$message.error(res.data.msg);
  520. }
  521. }).catch(function (error) {
  522. that.$message.error(error);
  523. });
  524. },
  525. //消息确认已读
  526. DeleMsg(index,row){
  527. this.$confirm('此操作将认定你已知晓此通知?', '提示', {
  528. confirmButtonText: '确定',
  529. cancelButtonText: '取消',
  530. type: 'warning'
  531. }).then(() => {
  532. var url = "/api/System/SetMessageRead"
  533. var that = this
  534. this.$axios({
  535. method: 'post',
  536. url: url,
  537. headers: {
  538. Authorization: 'Bearer ' + that.token
  539. },
  540. data:{
  541. portType:1,
  542. msgId:row.id,
  543. userId:that.userId
  544. }
  545. }).then(function (res) {
  546. console.log(res)
  547. if(res.data.code==200){
  548. if(that.type==1020){
  549. that.$router.push({ path: "/home/TaskList"});
  550. that.dialogVisible=false;
  551. }
  552. that.panduans=true;
  553. that.PotsMsgTypeData();
  554. that.$message({
  555. type: 'success',
  556. message: res.data.msg
  557. });
  558. }else{
  559. that.$message.error(res.data.msg);
  560. }
  561. }).catch(function (error) {
  562. that.$message.error("确认已读失败!");
  563. });
  564. }).catch(() => {
  565. this.$message({
  566. type: 'info',
  567. message: '已取消确认已读'
  568. });
  569. });
  570. console.log(index,row)
  571. console.log(this.type)
  572. },
  573. //修改未读条数
  574. uplocal(){
  575. window.localStorage.removeItem('unReadCount');
  576. this.unReadCount--;
  577. localStorage.setItem('unReadCount', JSON.stringify(this.unReadCount));
  578. },
  579. //任务切换
  580. taskclick(text){
  581. if(text=='未读'){
  582. this.newstasklist=this.tasknotlist
  583. this.tasknobtn=false;
  584. this.taskbtn=true;
  585. }else{
  586. this.newstasklist=this.taskReadlist
  587. this.tasknobtn=true;
  588. this.taskbtn=false;
  589. }
  590. console.log(this.newstasklist)
  591. },
  592. //团组切换
  593. groupclick(text){
  594. if(text=='未读'){
  595. this.newsgrouplist=this.groupnotlist
  596. this.groupnobtn=false;
  597. this.groupbtn=true;
  598. }else{
  599. this.newsgrouplist=this.groupReadlist
  600. this.groupnobtn=true;
  601. this.groupbtn=false;
  602. }
  603. },
  604. //消息通知
  605. chatHub(){
  606. var url = "/api/chatHub"
  607. var that = this
  608. this.$axios({
  609. method: 'post',
  610. url: url,
  611. headers: {
  612. Authorization: 'Bearer ' + that.token
  613. },
  614. data:{
  615. userId:that.userId
  616. }
  617. }).then(function (res) {
  618. console.log(res)
  619. if(res.data.code==200){
  620. }else{
  621. that.$message.error(res.data.msg);
  622. }
  623. }).catch(function (error) {
  624. that.$message.error("获取数据源失败!");
  625. });
  626. },
  627. handleClosezz(done) {
  628. this.$confirm('确认关闭?')
  629. .then(_ => {
  630. done();
  631. })
  632. .catch(_ => {});
  633. },
  634. setIntervaltime(){
  635. }
  636. //实时通讯
  637. // async startConnection() {
  638. // this.connection = new signalR.HubConnectionBuilder()
  639. // .withUrl('/api/chatHub') // 替换为你的SignalR服务端URL
  640. // .build();
  641. // this.connection.on('ReceiveMessage', (message) => {
  642. // console.log('Received message:', message);
  643. // });
  644. // try {
  645. // await this.connection.start();
  646. // console.log('SignalR Connected.');
  647. // } catch (err) {
  648. // console.log('Error while starting SignalR connection:', err);
  649. // }
  650. // },
  651. // async sendMessage() {
  652. // if (this.connection) {
  653. // try {
  654. // await this.connection.invoke('SendMessage', 'Hello World'); // SendMessage是服务端定义的方法
  655. // } catch (err) {
  656. // console.error(err);
  657. // }
  658. // }
  659. // },
  660. },
  661. mounted() {
  662. // this.unReadCount=JSON.parse(localStorage.getItem('unReadCount'));
  663. this.removal();
  664. this.radioChange(false);
  665. this.ifIndexValue();
  666. this.getmenu();
  667. this.PotsMsgTypeData();
  668. let timer = setInterval(() => {
  669. this.PotsMessageUnreadTotalCount();
  670. }, 10000)
  671. this.$once('hook:beforeDestroy', () => {
  672. clearInterval(timer)
  673. timer = null
  674. })
  675. // setTimeout(this.PotsMessagePageList(),500)
  676. // this.setIntervaltime();
  677. // setInterval(this.PotsMessageUnreadTotalCount, 10000);
  678. // setInterval(this.PsotMsgPageList, 3000);
  679. // this.chatHub();
  680. },
  681. created() {
  682. this.userId=JSON.parse(localStorage.getItem('userinif')).userInfo.userId;
  683. this.sex=JSON.parse(localStorage.getItem('userinif')).userInfo.sex;
  684. this.token=JSON.parse(localStorage.getItem('userinif')).token;
  685. this.userinif = JSON.parse(localStorage.getItem('userinif'));
  686. this.PotsMessageUnreadTotalCount();
  687. // this.startConnection();
  688. },
  689. computed: {
  690. getWsMsg (){
  691. return this.$store.state.webSocketMsg
  692. },
  693. filmenuList: function () {
  694. return this.menuList.filter(function (item) {
  695. if (item.modulName == '主页') {
  696. return item
  697. }
  698. })
  699. },
  700. filmenuLists: function () {
  701. return this.menuList.filter(function (item) {
  702. if (item.modulName != '主页') {
  703. return item
  704. }
  705. })
  706. }
  707. },
  708. watch:{
  709. PotsMessageUnreadTotalCount:{
  710. handler(newVal,oldVal) {
  711. console.log(newVal,oldVal)
  712. }
  713. }
  714. }
  715. };
  716. </script>
  717. <style>
  718. *{
  719. font-family:"微软雅黑";
  720. }
  721. .all-box{
  722. font-family:"微软雅黑";
  723. }
  724. .el-menu .el-menu-item.is-active {
  725. color: #fff;
  726. background-color: rgba(0, 0, 0, 0.1);
  727. }
  728. body {
  729. margin: 0;
  730. padding: 0;
  731. }
  732. html {
  733. background-color: #fff;
  734. }
  735. .home-dialog .el-dialog{
  736. position: fixed;
  737. right: 0;
  738. height: 100%;
  739. margin: 0;
  740. }
  741. .el-menu-vertical-demo:not(.el-menu--collapse) {
  742. width: 260px;
  743. min-height: 400px;
  744. }
  745. .el-menu {
  746. border-right: none;
  747. }
  748. .delwh {
  749. border-right: solid 1px #e6e6e6;
  750. background-image: linear-gradient(270deg,
  751. rgba(178, 45, 226, 0.18),
  752. transparent);
  753. background-color: #0f619f;
  754. }
  755. .el-menu-vertical-demo {
  756. background-image: linear-gradient(270deg,
  757. rgba(178, 45, 226, 0.18),
  758. transparent);
  759. background-color: #0f619f;
  760. }
  761. .aligns{
  762. display: flex;
  763. justify-content: space-between;
  764. }
  765. .el-header {
  766. border-bottom: solid 1px #e6e6e6;
  767. display: flex;
  768. justify-content: space-between;
  769. align-items: center;
  770. position: relative;
  771. z-index: 3;
  772. }
  773. .instrument-box {
  774. position: absolute;
  775. z-index: 2;
  776. right: 20px;
  777. top: -400px;
  778. width: 350px;
  779. border-radius: 5px;
  780. overflow: hidden;
  781. box-shadow: 0 0 5px #0005;
  782. transition: all 0.5s;
  783. }
  784. .instrument-box-title {
  785. background: linear-gradient(250deg, #3e93d6, #8a75aa);
  786. padding: 20px;
  787. text-align: center;
  788. color: #fff;
  789. }
  790. .instrument-box-inif {
  791. background-color: #fff;
  792. height: 320px;
  793. overflow-y: auto;
  794. }
  795. .box-inif-ul {
  796. display: flex;
  797. flex-wrap: wrap;
  798. padding: 10px;
  799. }
  800. .inif-li-text {
  801. font-size: 12px;
  802. }
  803. .box-inif-li {
  804. width: 25%;
  805. height: 81px;
  806. display: flex;
  807. flex-direction: column;
  808. justify-content: center;
  809. align-items: center;
  810. border-radius: 50%;
  811. padding: 10px;
  812. margin: 0 3px;
  813. cursor: pointer;
  814. }
  815. .box-inif-li:hover {
  816. background-image: linear-gradient(rgba(29, 33, 41, 0.03),
  817. rgba(29, 33, 41, 0.04));
  818. color: #967bbd;
  819. }
  820. .btnradio {
  821. display: flex;
  822. align-items: center;
  823. }
  824. .home-dialog .el-dialog__body{
  825. padding: 0px 20px;
  826. }
  827. .name-box {
  828. display: flex;
  829. font-size: 14px;
  830. }
  831. .user-operate {
  832. position: absolute;
  833. z-index: 2;
  834. right: 20px;
  835. top: -300px;
  836. width: 310px;
  837. border-radius: 5px;
  838. overflow: hidden;
  839. box-shadow: 0 0 5px #0005;
  840. transition: all 0.5s;
  841. }
  842. .operate-title {
  843. background: linear-gradient(250deg, #3e93d6, #8a75aa);
  844. padding: 20px;
  845. text-align: center;
  846. color: #fff;
  847. }
  848. .operate-ul {
  849. background-color: #fff;
  850. }
  851. .operate-li {
  852. padding: 12px 24px;
  853. cursor: pointer;
  854. color: #555;
  855. }
  856. .operate-li:hover {
  857. background-image: linear-gradient(rgba(29, 33, 41, 0.03),
  858. rgba(29, 33, 41, 0.04));
  859. color: #967bbd;
  860. }
  861. .names {
  862. margin-right: 20px;
  863. }
  864. .quit {
  865. cursor: pointer;
  866. }
  867. .btnradio .el-radio-button:first-child .el-radio-button__inner {
  868. border: none;
  869. }
  870. .el-radio-button:last-child .el-radio-button__inner {
  871. border: none;
  872. }
  873. .icon {
  874. font-size: 20px;
  875. }
  876. .el-radio-button__inner {
  877. padding: 0;
  878. }
  879. .header-title {
  880. margin-left: 20px;
  881. }
  882. .icon-shouye {
  883. margin-right: 5px;
  884. width: 24px;
  885. text-align: center;
  886. font-size: 18px;
  887. vertical-align: middle;
  888. display: inline-block;
  889. font-weight: 600;
  890. }
  891. .icon-tongjitu {
  892. margin-right: 5px;
  893. width: 24px;
  894. text-align: center;
  895. font-size: 18px;
  896. vertical-align: middle;
  897. display: inline-block;
  898. font-weight: 600;
  899. }
  900. .user-img {
  901. width: 40px;
  902. height: 40px;
  903. }
  904. .user-img img {
  905. width: 100%;
  906. height: 100%;
  907. }
  908. .user-box {
  909. padding: 10px 0;
  910. display: flex;
  911. justify-content: center;
  912. align-items: center;
  913. }
  914. .user-text {
  915. /*margin-left: 15px;*/
  916. font-size: 16px;
  917. /*font-weight: 600;*/
  918. color: #fff;
  919. }
  920. .naem-box {
  921. font-size: 16px;
  922. }
  923. .naem-box div {
  924. padding-left: 20px;
  925. }
  926. .el-menu-vertical-demo .el-menu-item {
  927. color: #82c2f3;
  928. }
  929. .el-menu-vertical-demo .el-menu-item:focus,
  930. .el-menu-vertical-demo .el-menu-item:hover {
  931. background-color: rgba(0, 0, 0, 0.1);
  932. color: #fff;
  933. }
  934. .el-menu-vertical-demo .el-menu-item i {
  935. color: #2595ea;
  936. }
  937. .avatar-box {
  938. height: 9.53rem;
  939. background-image: url("../assets/cover-2-lg.png");
  940. background-repeat: no-repeat;
  941. }
  942. .nei-avatar {
  943. height: 100%;
  944. background-color: rgba(27, 92, 164, 0.5);
  945. display: flex;
  946. justify-content: center;
  947. align-items: center;
  948. transition: all 1.5s;
  949. }
  950. .nei-avatar:hover {
  951. background-color: rgba(27, 92, 164, 0);
  952. }
  953. .avatar {
  954. display: flex;
  955. align-items: center;
  956. justify-content: center;
  957. }
  958. .avatar-text {
  959. color: #fff;
  960. margin-left: 15px;
  961. font-size: 14px;
  962. text-align: left;
  963. }
  964. .avatar-text>div {
  965. line-height: 24px;
  966. }
  967. .avatar-img {
  968. width: 50px;
  969. height: 50px;
  970. border-radius: 50%;
  971. overflow: hidden;
  972. }
  973. .avatar-img img {
  974. width: 100%;
  975. }
  976. .user-inifs {
  977. width: 40px;
  978. height: 40px;
  979. border-radius: 50%;
  980. overflow: hidden;
  981. }
  982. .user-inif img {
  983. width: 100%;
  984. }
  985. i.icon-shiyonggongju {
  986. font-size: 32px;
  987. color: #2198f3;
  988. }
  989. i.icon-tongzhi {
  990. font-size: 32px;
  991. color: #2198f3;
  992. }
  993. .name-box>div {
  994. cursor: pointer;
  995. margin-left: 15px;
  996. display: flex;
  997. justify-content: center;
  998. align-items: center;
  999. width: 50px;
  1000. height: 50px;
  1001. border-radius: 50%;
  1002. }
  1003. .name-box i:hover {
  1004. color: #666;
  1005. }
  1006. .el-main {
  1007. background-color: #ebf6fd;
  1008. }
  1009. .inif-li-img {
  1010. width: 50px;
  1011. height: 50px;
  1012. }
  1013. .inif-li-img img {
  1014. width: 100%;
  1015. }
  1016. .meun-ul{
  1017. overflow: auto;
  1018. }
  1019. .meun-ul::-webkit-scrollbar {
  1020. width: 5px;
  1021. height: 10px;
  1022. }
  1023. .meun-ul::-webkit-scrollbar-track {
  1024. border-radius: 10px;
  1025. }
  1026. .meun-ul::-webkit-scrollbar-thumb {
  1027. border-radius: 10px;
  1028. box-shadow: inset 0 0 0 rgba(0, 158, 255, 0.46);
  1029. background-color: rgba(0, 158, 255, 0.46);
  1030. }
  1031. /*消息*/
  1032. .news-box:last-child{
  1033. border-bottom: 1px solid #EBEEF5;
  1034. }
  1035. .news-box:hover{
  1036. background-color: #EBEEF5;
  1037. }
  1038. .news-box{
  1039. border-top: 1px solid #EBEEF5;
  1040. padding: 10px;
  1041. }
  1042. .news-list-hade{
  1043. display: flex;
  1044. justify-content: space-between;
  1045. font-size:15px;
  1046. font-weight: 600;
  1047. margin-bottom: 15px;
  1048. }
  1049. .news-list-posts{
  1050. text-align: right;
  1051. margin: 10px 0;
  1052. font-size: 15px;
  1053. font-weight: 600;
  1054. }
  1055. .instrument-box-inif::-webkit-scrollbar {
  1056. width: 5px;
  1057. height: 16px;
  1058. background-color: transparent;
  1059. }
  1060. .news-list-btn{
  1061. text-align: right;
  1062. }
  1063. .home-dialog .el-tabs__header{
  1064. margin-bottom: 0;
  1065. }
  1066. .read-btn{
  1067. margin: 10px 0;
  1068. }
  1069. .read-btn .el-badge{
  1070. margin-right: 15px;
  1071. }
  1072. .notyet{
  1073. height: 20px;
  1074. line-height: 20px;
  1075. font-size: 17px;
  1076. font-weight: 600;
  1077. text-align: center;
  1078. }
  1079. .home-dialog .el-dialog__header{
  1080. padding: 10px 20px;
  1081. }
  1082. .news-list-content{
  1083. line-height: 20px;
  1084. }
  1085. .loadmore{
  1086. margin-top: 20px;
  1087. text-align: center;
  1088. }
  1089. /*定义滚动条轨道
  1090. 内阴影+圆角*/
  1091. .instrument-box-inif::-webkit-scrollbar-track {
  1092. -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0);
  1093. border-radius: 10px;
  1094. background-color: transparent;
  1095. }
  1096. /*定义滑块
  1097. 内阴影+圆角*/
  1098. .instrument-box-inif::-webkit-scrollbar-thumb {
  1099. border-radius: 10px;
  1100. -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
  1101. background-color: #b9bcc0;
  1102. }
  1103. .delwh .el-menu {
  1104. background-color: #0f619f;
  1105. }
  1106. .delwh .el-submenu__title:hover,
  1107. .delwh .el-submenu__title:focus {
  1108. background-color: rgba(0, 0, 0, 0.1);
  1109. color: #fff;
  1110. }
  1111. .delwh .el-submenu__title {
  1112. color: #82c2f3;
  1113. }
  1114. .delwh .el-submenu__title i {
  1115. color: #2595ea;
  1116. }
  1117. .delwh .el-menu-item-group__title {
  1118. padding: 0;
  1119. }
  1120. .el-menu-item-group .el-menu-item-group__title {
  1121. padding: 0;
  1122. }
  1123. .delwh::-webkit-scrollbar {display:none}
  1124. .scroll-box{
  1125. height: 750px;
  1126. overflow-y: auto;
  1127. }
  1128. .scroll-box::-webkit-scrollbar {
  1129. width: 6px;
  1130. }
  1131. .scroll-box::-webkit-scrollbar-track {
  1132. background: rgb(239, 239, 239);
  1133. border-radius: 2px;
  1134. }
  1135. .scroll-box::-webkit-scrollbar-thumb {
  1136. background: #40a0ff49;
  1137. border-radius: 10px;
  1138. }
  1139. .scroll-box::-webkit-scrollbar-thumb:hover {
  1140. background: #40a0ff;
  1141. }
  1142. .all-box .communal-box .el-autocomplete,.el-select{
  1143. margin-right: 0;
  1144. }
  1145. .all-box .el-table th.el-table__cell>.cell{
  1146. text-align: center;
  1147. }
  1148. .all-box .el-table--enable-row-transition .el-table__body td.el-table__cell{
  1149. text-align: center;
  1150. }
  1151. .gpt-dialog .el-dialog__body{
  1152. padding: 0 20px;
  1153. padding-bottom:10px;
  1154. }
  1155. </style>