home.vue 36 KB

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