message_list.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439
  1. <template>
  2. <div style="height: 100%;">
  3. <!-- <van-nav-bar class="headerbar no-down-icon left-text-bold" :left-text="'消息通知'">
  4. <template slot="right">
  5. <van-icon v-if="is_app" name="scan" @click="$router.push({ name: 'scanqr' })"></van-icon>
  6. </template>
  7. </van-nav-bar> -->
  8. <div class="work_body_com">
  9. <scroller :on-refresh="chat_msg_session_list">
  10. <div class="message-header-box"></div>
  11. <div class="bgfff">
  12. <div class="message-header">
  13. <van-row gutter="20">
  14. <van-col span="12" class="event_list">
  15. <van-button class="event" block @click="$router.push({ name: 'approval_list' })" icon="static/images/a1.png">审批<van-tag class="num92" :class="{ num10: review_count > 9 }" color="#F56C6C" round v-show="review_count > 0">{{ review_count }}</van-tag> </van-button>
  16. </van-col>
  17. <van-col span="12" class="event_list">
  18. <van-button class="event" block @click="$router.push({ name: 'my_task' })" icon="static/images/a7.png">任务<van-tag class="num92" :class="{ num10: task_count > 9 }" color="#F56C6C" round v-show="task_count > 0">{{ task_count }}</van-tag></van-button>
  19. </van-col>
  20. </van-row>
  21. </div>
  22. </div>
  23. <van-cell v-if="list_map[index]" is-link v-for="(item, index) in list" :key="index" :title="list_map[index].name" @click="readMsg(index,list_map[index].name)" class="employee_cell">
  24. <!-- 时间 -->
  25. <span style="font-size:0.24rem;" v-if="item.newInfo">{{ item.newInfo.create_time | msg_time }}</span>
  26. <!-- ICON -->
  27. <template slot="icon">
  28. <img :src="list_map[index].avatar" class="employee_cell_head_img"/>
  29. </template>
  30. <!-- 数量 -->
  31. <template slot="default">
  32. <div class="tag_box">
  33. <van-tag class="tag num9" :class="{ num10: item.total > 9 }" v-if="item.total > 0" round color="#F56C6C"></van-tag>
  34. </div>
  35. </template>
  36. <!-- 内容 -->
  37. <template slot="label" v-if="item.newInfo">
  38. <span v-if="item.newInfo.title != ''" style="white-space:nowrap;text-overflow:ellipsis; width:3rem; display: inline-block; overflow: hidden;font-size:0.28rem;">
  39. {{item.newInfo.title}}
  40. </span>
  41. <span v-else style="white-space:nowrap;text-overflow:ellipsis; width:3rem; display: inline-block; overflow: hidden;font-size:0.28rem;">
  42. {{item.newInfo.title }}
  43. </span>
  44. </template>
  45. <template slot="label" v-else>
  46. <span style="white-space:nowrap;text-overflow:ellipsis; width:3rem; display: inline-block; overflow: hidden;font-size:0.28rem;">没有新通知</span>
  47. </template>
  48. </van-cell>
  49. <van-cell v-if="list != null && !list[index]" is-link v-for="(item, index) in list_map" :key="index" :title="item.name" class="employee_cell">
  50. <template slot="icon">
  51. <img :src="item.avatar" class="employee_cell_head_img" />
  52. </template>
  53. <template slot="label">
  54. <span style="white-space:nowrap;text-overflow:ellipsis; width:3rem; display: inline-block; overflow: hidden;font-size:0.28rem;">没有新通知</span>
  55. </template>
  56. </van-cell>
  57. </scroller>
  58. </div>
  59. </div>
  60. </template>
  61. <script>
  62. import request from '@/utils/request'
  63. import { getToken } from '@/utils/auth'
  64. import Vue from 'vue'
  65. import { Search, DropdownMenu, Empty, DropdownItem, SwipeCell, NoticeBar, Tag } from 'vant'
  66. import moment from 'moment'
  67. Vue.use(Search).use(DropdownMenu).use(DropdownItem).use(SwipeCell).use(NoticeBar).use(Tag).use(Empty)
  68. export default {
  69. name: 'message_list',
  70. data () {
  71. return {
  72. tips: '没有通知',
  73. is_app: false,
  74. no_network: false,
  75. qr_scan_mark: false,
  76. plus_show: false,
  77. barcode: null,
  78. set_flash: false,
  79. list: [],
  80. total: 0,
  81. cid: '',
  82. db: null,
  83. review_count: 0,
  84. task_count: 0,
  85. list_map: {}
  86. }
  87. },
  88. filters: {
  89. msg_time (time) {
  90. let now = moment().valueOf() / 1000
  91. let sub = now - time
  92. let ret = ''
  93. if (sub < 3 * 24 * 3600) {
  94. ret = moment(time * 1000).format('MM-DD')
  95. } else if (sub < 24 * 3600) {
  96. ret = moment(time * 1000).format('HH:MM')
  97. } else if (sub < 3600) {
  98. ret = '1小时前'
  99. } else if (sub < 1800) {
  100. ret = '刚刚'
  101. }
  102. return ret
  103. }
  104. },
  105. sockets: {
  106. new_msg (data) {
  107. let self = this
  108. self.chat_msg_session_list(function () {})
  109. },
  110. send_msg_success (data) {
  111. let self = this
  112. self.chat_msg_session_list(function () {})
  113. },
  114. get_badge_num (data) {
  115. let json = JSON.parse(data)
  116. setBadgeNumber(json.num)
  117. }
  118. },
  119. methods: {
  120. clu () {
  121. this.$emit('shwoCunt', {data: 456})
  122. },
  123. get_message_cate () {
  124. let cate_list = false
  125. if (window.plus) {
  126. cate_list = plus.storage.getItem('message_cate_list')
  127. } else {
  128. cate_list = localStorage.getItem('message_cate_list')
  129. }
  130. if (cate_list) {
  131. this.list_map = JSON.parse(cate_list)
  132. return
  133. }
  134. request('get', '/api/notice/cate').then(res => {
  135. if (res.data.code == 1) {
  136. try {
  137. this.list_map = {}
  138. for (let i in res.data.data) {
  139. if (res.data.data[i].is_list == 1 && res.data.data[i].remark != "考勤通知") {//当前无考勤通知,在此处先做限制
  140. this.list_map[res.data.data[i].cate] = { name: res.data.data[i].remark, avatar: res.data.data[i].icon }
  141. }
  142. }
  143. if (window.plus) {
  144. plus.storage.setItem('message_cate_list', JSON.stringify(this.list_map))
  145. } else {
  146. localStorage.setItem('message_cate_list', JSON.stringify(this.list_map))
  147. }
  148. } catch (e) {
  149. console.log(e)
  150. }
  151. }
  152. })
  153. },
  154. readMsg (item, title) {
  155. console.log('11111111111')
  156. console.log(item)
  157. console.log(title)
  158. this.$router.push({ name: 'message_detail', query: { cate: item, title: title }})
  159. },
  160. chat_msg_session_list (done) {
  161. var http1 = request('get', '/api/notice/index', '', 'v2')// 获取未读信息
  162. var http2 = request('get', '/api/integral/review/list', {type: 'waiting', page: 1, pt_id: 0, source_type: 0})// 获取为审批数量
  163. var http3 = request('get', '/api/integral/work/list', {status: 'running', page: 1, pt_id: 0})// 获取任务数
  164. Promise.all([http1, http2, http3]).then(item => {
  165. if (item[0]) {
  166. var data = item[0].data.data.list
  167. this.list = data
  168. this.total = 0
  169. for (let i in data) { this.total += data[i].total }
  170. // 设置APP的角标
  171. if (window.plus) { setBadgeNumber(this.total) }
  172. }
  173. if (item[1]) {
  174. this.review_count = item[1].data.data.total
  175. }
  176. if (item[2]) {
  177. this.task_count = item[2].data.data.total
  178. done()
  179. }
  180. })
  181. },
  182. get_review_count () {
  183. request('get', '/api/integral/review/list', {
  184. type: 'waiting',
  185. page: 1,
  186. pt_id: 0,
  187. source_type: 0
  188. }).then(res => {
  189. if (res.data.code == 1) {
  190. this.review_count = res.data.data.total
  191. }
  192. })
  193. },
  194. get_task_count () {
  195. request('get', '/api/integral/work/list', {
  196. status: 'running',
  197. page: 1,
  198. pt_id: 0
  199. }).then(res => {
  200. if (res.data.code == 1) {
  201. this.task_coun = res.data.data.total
  202. }
  203. })
  204. }
  205. },
  206. created () {
  207. this.get_message_cate()
  208. },
  209. mounted () {
  210. if (window.plus) {
  211. this.is_app = true
  212. }
  213. },
  214. keep_alive_update: {
  215. // 运用缓存更新方法来完成返回后的更新
  216. update_approval_list: function (vm, data) {
  217. vm.chat_msg_session_list(function () {})
  218. vm.clu();
  219. },
  220. update_task_message: function (vm, data) {
  221. vm.chat_msg_session_list(function () {})
  222. vm.clu();
  223. },
  224. update_message_list: function (vm, data) {
  225. vm.$store.dispatch('get_user_info', getToken()).then(res => {
  226. vm.chat_msg_session_list(function () {})
  227. vm.clu();
  228. })
  229. },
  230. update_msgInformation: function (vm, data) {
  231. vm.chat_msg_session_list(function () {})
  232. vm.clu();
  233. }
  234. }
  235. }
  236. </script>
  237. <style scoped>
  238. .left-text-bold /deep/ .van-nav-bar__left {
  239. font-size: 0.4rem !important;
  240. font-weight: bold;
  241. }
  242. .cur_company_name {
  243. line-height: 1rem;
  244. text-indent: 0.5em;
  245. cursor: pointer;
  246. }
  247. .menu_title {
  248. text-indent: 0.5em;
  249. margin-bottom: 0.16rem;
  250. }
  251. .work_body_com {
  252. /* height: calc(100% - 0.92rem); */
  253. height: calc(100%);
  254. position: relative;
  255. }
  256. .van-radio-group {
  257. padding: 0.24rem 0.32rem;
  258. }
  259. .van-radio {
  260. height: 0.8rem;
  261. }
  262. .employee_cell_head_img {
  263. width: 0.96rem;
  264. height: 0.96rem;
  265. -webkit-border-radius: 0.1rem;
  266. -moz-border-radius: 0.1rem;
  267. border-radius: 0.1rem;
  268. margin-right: 0.32rem;
  269. }
  270. .employee_cell {
  271. padding: 0.2rem 0.32rem;
  272. }
  273. .employee_cell .van-cell__title {
  274. line-height: 0.5rem;
  275. font-size: 0.36rem;
  276. font-weight: bold;
  277. }
  278. .employee_cell .van-cell__title .van-cell__value {
  279. font-size: 0.28rem;
  280. }
  281. .employee_cell .van-cell__right-icon {
  282. display: none;
  283. }
  284. .employee_cell .van-cell__label {
  285. font-weight: normal;
  286. font-size: 0.28rem;
  287. }
  288. .user_index_scroller_com .van-icon-scan {
  289. color: #fff !important;
  290. padding-right: 0.32rem;
  291. }
  292. .user_index_scroller_com .van-icon-scan:before {
  293. font-size: 0.4rem;
  294. }
  295. .message-header .van-tag {
  296. display: inline-block;
  297. text-align: center;
  298. line-height: 0.4rem;
  299. font-size: 0.28rem;
  300. width: 0.4rem;
  301. height: 0.4rem;
  302. padding: 0;
  303. -webkit-border-radius: 0.4rem !important;
  304. -moz-border-radius: 50px;
  305. border-radius: 50px;
  306. position: absolute;
  307. /* font-family: Arial; */
  308. }
  309. .message-header .van-tag.gt9 {
  310. padding: 0 0.1rem;
  311. width: auto;
  312. }
  313. .message-header-box {
  314. position: relative;
  315. width: 100vw;
  316. height: 0.8rem;
  317. background: #26a2ff;
  318. z-index: 1;
  319. }
  320. .message-header {
  321. position: relative;
  322. width: calc(100vw - 0.64rem);
  323. height: 1.44rem;
  324. padding: 0;
  325. margin-top: -0.6rem;
  326. margin-left: auto;
  327. margin-right: auto;
  328. background: #fff;
  329. border-radius: 0.16rem;
  330. box-shadow: 0rem 0.04rem 0.12rem rgba(0, 0, 0, 0.03);
  331. z-index: 2;
  332. background-color: #fff;
  333. }
  334. .message-header /deep/ .van-row {
  335. margin: 0 !important;
  336. padding: 0;
  337. }
  338. .message-header .event_list {
  339. width: calc(100% / 2);
  340. padding: 0 !important;
  341. margin-left: -0.2rem;
  342. }
  343. .message-header .event_list .event {
  344. display: block;
  345. text-align: center;
  346. margin: 0.24rem 0;
  347. padding: 0;
  348. border: none;
  349. background: transparent;
  350. }
  351. .message-header .event_list .event:before {
  352. display: none;
  353. background: none;
  354. }
  355. .message-header .event_list .event img {
  356. display: inline-block;
  357. width: 0.98rem;
  358. height: 0.98rem;
  359. margin-right: 0.1rem;
  360. }
  361. .message-header .event_list .event /deep/ .van-button__text {
  362. display: inline-block;
  363. font-size: 0.32rem;
  364. font-weight: bold;
  365. margin-top: 0.1rem;
  366. }
  367. .message-header .event_list .event /deep/ .van-tag--round {
  368. margin: 0.2rem 0 0 0.1rem;
  369. }
  370. .bgfff {
  371. background-color: #fff;
  372. padding-bottom: 0.32rem;
  373. }
  374. .employee_cell:after {
  375. left: 0rem;
  376. }
  377. .num9 {
  378. display: inline-block;
  379. text-align: center;
  380. line-height: 0.2rem;
  381. font-size: 0.28rem;
  382. width: 0.2rem;
  383. height: 0.2rem;
  384. padding: 0px;
  385. border-radius: 0.4rem;
  386. z-index: 1;
  387. background-color: #f56c6c;
  388. /* font-family: Arial; */
  389. font-weight: normal;
  390. }
  391. .num92 {
  392. display: inline-block;
  393. text-align: center;
  394. line-height: 0.4rem;
  395. font-size: 0.28rem;
  396. width: 0.4rem;
  397. height: 0.4rem;
  398. padding: 0px;
  399. border-radius: 0.4rem;
  400. z-index: 1;
  401. background-color: #f56c6c;
  402. /* font-family: Arial; */
  403. font-weight: normal;
  404. }
  405. .num10 {
  406. padding: 0 0.08rem !important;
  407. width: auto !important;
  408. max-width: 0.8rem;
  409. overflow: hidden;
  410. text-overflow: ellipsis;
  411. white-space: nowrap;
  412. }
  413. </style>