You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

371 lines
8.4 KiB

  1. <template>
  2. <view class="message_list">
  3. <!-- 公告 -->
  4. <view class="m-nav">
  5. <view class="m-n-lside">
  6. <image src="@/static/images/notice.png" mode=""></image>
  7. 全部{{ count }}条新消息
  8. </view>
  9. <view class="m-n-rside" @click="allRead">
  10. 全部已读
  11. </view>
  12. </view>
  13. <!-- 选项卡 -->
  14. <view class="m-tabs">
  15. <u-tabs :list="list" :current="current" :is-scroll="false" @change="change"></u-tabs>
  16. </view>
  17. <template v-if="current == 0">
  18. <scroll-view :scroll-top="scrollTop" refresher-enabled="true" :refresher-triggered="triggered"
  19. @refresherpulling="onPulling" @refresherrefresh="onRefresh" @refresherrestore="onRestore"
  20. :scroll-y="true" class="scroll-Y" @scrolltolower="lower">
  21. <template v-if="updateAnnList.length!=0">
  22. <block v-for="(item,index) in updateAnnList" :key="index">
  23. <view class="upgradeItem" @click="goReception(item, index)">
  24. <view class="right">
  25. <view class="title">
  26. <template v-if="item.messageType == 2">
  27. {{ item.weekDate }}
  28. </template>
  29. <template v-else>
  30. {{ fomatDate(item.createTime) }}
  31. </template>
  32. <template v-if="item.orgCode&&item.orgName">
  33. {{ item.orgName }}
  34. </template>
  35. {{item.title}}
  36. <template v-if="item.readFlag==0">
  37. <view class="notRead"></view>
  38. </template>
  39. </view>
  40. <view class="time">{{item.createTime}}</view>
  41. </view>
  42. </view>
  43. </block>
  44. </template>
  45. <template v-else>
  46. <view style="padding: 100rpx 0;">
  47. <u-empty text="暂无数据" mode="list"></u-empty>
  48. </view>
  49. </template>
  50. </scroll-view>
  51. </template>
  52. <!-- 升级公告 -->
  53. <template v-if="current == 1">
  54. <scroll-view :scroll-top="scrollTop" refresher-enabled="true" :refresher-triggered="triggered"
  55. @refresherpulling="onPulling" @refresherrefresh="onRefresh" @refresherrestore="onRestore"
  56. :scroll-y="true" class="scroll-Y" @scrolltolower="lower">
  57. <template v-if="updateAnnList.length!=0">
  58. <block v-for="(item,index) in updateAnnList" :key="index">
  59. <view class="upgradeItem" @click="goDetail(item)">
  60. <view class="right">
  61. <view class="title">
  62. {{item.title}}
  63. <template v-if="item.readFlag==0">
  64. <view class="notRead"></view>
  65. </template>
  66. </view>
  67. <view class="time">{{item.createTime}}</view>
  68. </view>
  69. </view>
  70. </block>
  71. </template>
  72. <template v-else>
  73. <view style="padding: 100rpx 0;">
  74. <u-empty text="暂无数据" mode="list"></u-empty>
  75. </view>
  76. </template>
  77. </scroll-view>
  78. </template>
  79. </view>
  80. </template>
  81. <script>
  82. var util = require("../../utils/util.js");
  83. var config = require("../../config");
  84. export default {
  85. data() {
  86. return {
  87. triggered: true,
  88. scrollTop: 0,
  89. old: {
  90. scrollTop: 0
  91. },
  92. updateAnnList: [],
  93. sysItemList: [],
  94. list: [{
  95. name: '接待报告',
  96. id: 1, // 1日报 2周报 3其他(非3为接待报告,3是系统消息)
  97. }, {
  98. name: '升级公告',
  99. id: 3, // 1日报 2周报 3其他(非3为接待报告,3是系统消息)
  100. }],
  101. count: 0, // 全部条数
  102. current: 0,
  103. pageNum: 1,
  104. pageSize: 10,
  105. };
  106. },
  107. onShow() {
  108. this.updateAnnList = []
  109. this.pageNum = 1
  110. this.updateInit()
  111. this.getMessageNotRed()
  112. },
  113. onLoad() {
  114. this._freshing = false;
  115. setTimeout(() => {
  116. this.triggered = true;
  117. }, 1000)
  118. },
  119. onPullDownRefresh() {
  120. this.initPage()
  121. setTimeout(function() {
  122. uni.stopPullDownRefresh();
  123. }, 1000);
  124. },
  125. methods: {
  126. onPulling(e) {
  127. console.log("onpulling", e);
  128. },
  129. onRefresh() {
  130. if (this._freshing) return;
  131. this.updateAnnList = []
  132. this.pageNum = 1
  133. this.updateInit()
  134. this._freshing = true;
  135. setTimeout(() => {
  136. this.triggered = false;
  137. this._freshing = false;
  138. }, 3000)
  139. },
  140. onRestore() {
  141. this.triggered = 'restore'; // 需要重置
  142. console.log("onRestore");
  143. },
  144. lower(e) {
  145. this.pageNum++
  146. this.updateInit()
  147. },
  148. initPage() {
  149. this.updateAnnList = []
  150. this.pageNum = 1
  151. this.updateInit()
  152. },
  153. // 全部标记已读
  154. allRead() {
  155. this.$u.get('/zkMessage/updateState', {
  156. accountId: uni.getStorageSync('weapp_session_userInfo_data').accountId,
  157. projectId: uni.getStorageSync('buildingID').id,
  158. }).then(res => {
  159. uni.showToast({
  160. title: '全部已读成功!',
  161. duration: 2000
  162. });
  163. this.initPage()
  164. }).catch(e => {
  165. console.log(e)
  166. })
  167. },
  168. updateInit() {
  169. let obj = {
  170. messageType: this.list[this.current].id,
  171. id: uni.getStorageSync('weapp_session_userInfo_data').accountId,
  172. num: this.pageNum,
  173. size: this.pageSize
  174. }
  175. if (this.current == 0) {
  176. obj.projectId = uni.getStorageSync('buildingID').id
  177. } else {
  178. obj.projectId = ''
  179. }
  180. uni.request({
  181. url: config.service.updateList,
  182. method: "GET",
  183. data: obj,
  184. header: {
  185. 'content-type': 'application/json',
  186. 'Access-Token': uni.getStorageSync('weapp_session_login_data').token
  187. },
  188. success: (res) => {
  189. if (res.data.data) {
  190. if (this.pageNum != 1) {
  191. this.updateAnnList = [...this.updateAnnList, ...res.data.data.list.results];
  192. } else {
  193. this.updateAnnList = res.data.data.list.results || []
  194. }
  195. }
  196. console.log(this.updateAnnList)
  197. },
  198. fail: e => {
  199. console.log(e)
  200. }
  201. })
  202. },
  203. goDetail(data) {
  204. this.$store.commit('setMessageObj', data)
  205. uni.navigateTo({
  206. url: "./messageDetail"
  207. })
  208. },
  209. // 获取未读消息数量
  210. getMessageNotRed() {
  211. uni.request({
  212. url: config.service.notReadNum,
  213. method: "GET",
  214. data: {
  215. id: uni.getStorageSync('weapp_session_userInfo_data').accountId,
  216. projectId: uni.getStorageSync('buildingID').id,
  217. },
  218. header: {
  219. 'content-type': 'application/json',
  220. 'Access-Token': uni.getStorageSync('weapp_session_login_data').token
  221. },
  222. success: (res) => {
  223. this.count = res.data.data || 0
  224. }
  225. })
  226. },
  227. // 跳转日报
  228. goReception(data, index) {
  229. this.$store.commit('setMessageObj', data)
  230. data.readFlag = 1
  231. if (data.messageType == 2) {
  232. uni.navigateTo({
  233. url: `/pages/reportExcel/weekReport?id=${data.id}`
  234. })
  235. } else {
  236. uni.navigateTo({
  237. url: `/pages/reportExcel/dayReport?id=${data.id}`
  238. })
  239. }
  240. },
  241. fomatDate(date) {
  242. if (!date) return '--'
  243. let arr = date.split(' ')
  244. let str = arr[0]
  245. let result = str.split('-')
  246. return `${result[1]}月${result[2]}日`
  247. },
  248. // 转换时间
  249. getTimeLine(date, type = 1) {
  250. let resu = '--'
  251. if (!date) return resu
  252. let time = new Date(date.replace(/-/g, '/'))
  253. time.setDate(time.getDate() - 7)
  254. let arr = date.split(' ')
  255. let str = arr[0]
  256. let result = str.split('-')
  257. let m = (time.getMonth() + 1) < 10 ? `0${time.getMonth() + 1}` : (time.getMonth() + 1)
  258. let d = time.getDate() < 10 ? `0${time.getDate()}` : time.getDate()
  259. if (type == 1) {
  260. resu = `${m}.${d}-${result[1]}.${result[2]}`
  261. } else {
  262. resu = `${m}月${d}日~${result[1]}月${result[2]}日`
  263. }
  264. return resu
  265. },
  266. change(index) {
  267. this.current = index;
  268. this.initPage()
  269. }
  270. }
  271. }
  272. </script>
  273. <style lang="scss">
  274. .message_list {
  275. width: 100vw;
  276. height: calc(100vh - var(--window-top));
  277. background: #F8F8F8;
  278. display: flex;
  279. flex-direction: column;
  280. .m-nav {
  281. flex-shrink: 0;
  282. padding: 0 30rpx;
  283. width: 100%;
  284. height: 68rpx;
  285. display: flex;
  286. align-items: center;
  287. .m-n-lside {
  288. flex-grow: 1;
  289. display: flex;
  290. align-items: center;
  291. image {
  292. margin-right: 16rpx;
  293. width: 36rpx;
  294. height: 36rpx;
  295. }
  296. }
  297. .m-n-rside {
  298. flex-shrink: 0;
  299. padding: 6rpx 14rpx;
  300. border: 1rpx solid #E0E0E0;
  301. font-size: 24rpx;
  302. }
  303. }
  304. .m-tabs {
  305. flex-shrink: 0;
  306. }
  307. .scroll-Y {
  308. padding: 20rpx 0 0 0;
  309. flex-grow: 1;
  310. overflow-y: scroll;
  311. .upgradeItem {
  312. margin: 0 0 20rpx 0;
  313. padding: 24rpx 30rpx 28rpx;
  314. height: 156rpx;
  315. display: flex;
  316. background: #fff;
  317. .right {
  318. .title {
  319. font-size: 32rpx;
  320. font-weight: bold;
  321. display: flex;
  322. .notRead {
  323. width: 14rpx;
  324. height: 14rpx;
  325. background: #FF0000;
  326. border-radius: 100%;
  327. }
  328. }
  329. .time {
  330. margin: 18rpx 0 0 0;
  331. color: #6f6f6f;
  332. font-size: 24rpx;
  333. }
  334. }
  335. }
  336. }
  337. }
  338. </style>