From 723210a121d3568b9929940c62f9995b3f3c468e Mon Sep 17 00:00:00 2001 From: dengxin <2390584170@qq.com> Date: Tue, 19 Mar 2024 11:53:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=94=B3=E8=AF=B7=E6=B6=88?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages.json | 2 +- pages/recruit/subPage/MessageList.vue | 37 ++- static/img/job_recruit.svg | 1 + static/img/own_recruit.svg | 1 + store/getters.js | 1 + store/index.js | 2 + store/models/news_recruit.js | 373 ++++++++++++++++++++++++++ 7 files changed, 402 insertions(+), 15 deletions(-) create mode 100644 static/img/job_recruit.svg create mode 100644 static/img/own_recruit.svg create mode 100644 store/models/news_recruit.js diff --git a/pages.json b/pages.json index 8fbddc3..0a6e1e0 100644 --- a/pages.json +++ b/pages.json @@ -247,7 +247,7 @@ { "path": "pages/recruit/subPage/MessageList", "style": { - "navigationBarTitleText": "消息", + "navigationBarTitleText": "申请消息", "enablePullDownRefresh": false, "navigationStyle": "custom" } diff --git a/pages/recruit/subPage/MessageList.vue b/pages/recruit/subPage/MessageList.vue index 404a86f..b1a0670 100644 --- a/pages/recruit/subPage/MessageList.vue +++ b/pages/recruit/subPage/MessageList.vue @@ -1,9 +1,10 @@ @@ -27,8 +29,11 @@ import { mapGetters } from 'vuex' + import CustomTabbar from '@/components/CustomTabbar/custom_tabbar.vue' + import CustomNavbar from '@/components/CustomNavbar/navbar.vue'; export default { + components: {CustomTabbar,CustomNavbar}, data() { return { loading: false @@ -65,18 +70,18 @@ // } console.log(item.data) // 任务推送、岗位推送、政策推送 - if(item.title == '任务推送') { - console.log('任务推送') + if(item.title == '任务申请') { + console.log('任务申请') uni.navigateTo({ url: './taskProjectList' }) - } else if(item.title == '岗位推送') { - console.log('岗位推送') + } else if(item.title == '岗位申请') { + console.log('岗位申请') uni.navigateTo({ url: './jobProjectList' }) - } else if(item.title == '政策推送') { - console.log('政策推送') + } else if(item.title == '个人户申请') { + console.log('个人户申请') uni.navigateTo({ url: './policyList' }) @@ -85,13 +90,16 @@ url: './newsList?type=' + item.id }) } - } + }, + back() { + uni.reLaunch({ url: '/pages/my/my' }) + }, }, computed: { - ...mapGetters(['news']), + ...mapGetters(['news_recruit']), data() { - console.log(this.news.data,'--------------------=========='); - return this.news.data + console.log(this.news_recruit.data,'--------------------=========='); + return this.news_recruit.data } } } @@ -165,6 +173,7 @@ padding-bottom: 30rpx; padding-right: 30rpx; padding-top: 30rpx; + padding-left: 30rpx; overflow: hidden; display: flex; align-items: center; @@ -172,9 +181,9 @@ .body { background-color: #fefefe; - padding-left: 30rpx; + /* padding-left: 30rpx; - width: 720rpx; + width: 720rpx; */ } page { diff --git a/static/img/job_recruit.svg b/static/img/job_recruit.svg new file mode 100644 index 0000000..83fcfb8 --- /dev/null +++ b/static/img/job_recruit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/own_recruit.svg b/static/img/own_recruit.svg new file mode 100644 index 0000000..1c1a331 --- /dev/null +++ b/static/img/own_recruit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/store/getters.js b/store/getters.js index b775e70..fb057a9 100644 --- a/store/getters.js +++ b/store/getters.js @@ -5,6 +5,7 @@ const getters = { userChecked:state=>state.user.userChecked, area: state => state.area, news: state=> state.news, + news_recruit: state=> state.news_recruit, auth: state => state.auth, authPass: (state,getters) => getters.auth.laborState && getters.auth.realNameState && getters.auth.bankCardState && getters.auth.insureState, authInfo: state => state.auth.authInfo, diff --git a/store/index.js b/store/index.js index 5d5ec31..e590055 100644 --- a/store/index.js +++ b/store/index.js @@ -6,6 +6,7 @@ import user from './models/user.js' import area from './models/area.js' import auth from './models/auth.js' import news from './models/news.js' +import news_recruit from './models/news_recruit.js' import vip from './models/vip.js' import face from './models/face.js' import authentication from './models/authentication.js' @@ -17,6 +18,7 @@ const store = new Vuex.Store({ area, auth, news, + news_recruit, vip, face, authentication diff --git a/store/models/news_recruit.js b/store/models/news_recruit.js new file mode 100644 index 0000000..b4010da --- /dev/null +++ b/store/models/news_recruit.js @@ -0,0 +1,373 @@ +import { + inviteCount, + inviteList, + inviteRead, + inviteRemove, + noticeCount, + noticeList, + noticeRead, + noticeRemove +} from '@/api/news.js' +import website from '@/config/website.js' +const size = 20 +const handler = { + '0': { + count: noticeCount, + getList: noticeList, + read: noticeRead, + remove: noticeRemove + }, + '1': { + count: inviteCount, + getList: inviteList, + read: inviteRead, + remove: inviteRemove + } +} + +function getCount(data) { + let sum = 0 + for (let key in data) { + sum += data[key] + } + return sum +} + +let refreshTimer = null; + +function startRefreshToken(dispatch) { + refreshTimer = setInterval(() => { + dispatch("newsInit"); + }, website.newsRefreshTime); +} + +function stopRefreshToken() { + clearInterval(refreshTimer) +} + +const news = { + state: { + count: 0, + data: { + // "0": { + // id: "0", + // title: "消息通知", + // icon: "../../static/img/notice.svg", + // page: { + // current: 0, + // size, + // total: size + // }, + // data: [], + // prop: { + // title: 'title', + // desc: (value) => { + // if (value.data[0]) + // return value.data[0][0]['desc'] + // }, + // time: 'createTime', + // isRead: 'isRead', + // listDesc: 'desc', + // }, + // navigateTo(item) { + // uni.$once('getNewsDetail', (cb) => { + // cb(item) + // }) + // uni.navigateTo({ + // url: "/pages/news/newsDetail?type=0" + // }) + // } + // }, + "1": { + id: "1", + title: "任务申请", + icon: "../../../static/img/renwu.png", + page: { + current: 0, + size, + total: size + }, + data: [], + prop: { + title: 'missionTitle', + desc: (value) => { + if (value.data[0]) + return `您收到${value.data[0][0]['companyName']}的任务` + }, + time: 'createTime', + isRead: 'status', + listDesc: 'companyName', + }, + navigateTo(item, dispatch) { + dispatch('readNew', { + key: '1', + id: item.id + }) + uni.navigateTo({ + url: `/pages/projectInfo/projectInfo?type=1&missionNo=${encodeURIComponent(item.missionNo)}&id=${encodeURIComponent(item.id)}` + }) + } + }, + "2": { + id: "1", + title: "岗位申请", + icon: "../../../static/img/job_recruit.svg", + page: { + current: 0, + size, + total: size + }, + data: [], + prop: { + title: 'missionTitle', + desc: (value) => { + if (value.data[0]) + return `您收到${value.data[0][0]['companyName']}的任务` + }, + time: 'createTime', + isRead: 'status', + listDesc: 'companyName', + }, + navigateTo(item, dispatch) { + dispatch('readNew', { + key: '1', + id: item.id + }) + uni.navigateTo({ + url: `/pages/projectInfo/projectInfo?type=1&missionNo=${encodeURIComponent(item.missionNo)}&id=${encodeURIComponent(item.id)}` + }) + } + }, + // "3": { + // id: "1", + // title: "技能推送", + // icon: "../../static/img/jineng.svg", + // page: { + // current: 0, + // size, + // total: size + // }, + // data: [], + // prop: { + // title: 'missionTitle', + // desc: (value) => { + // if (value.data[0]) + // return `您收到${value.data[0][0]['companyName']}的任务` + // }, + // time: 'createTime', + // isRead: 'status', + // listDesc: 'companyName', + // }, + // navigateTo(item, dispatch) { + // dispatch('readNew', { + // key: '1', + // id: item.id + // }) + // uni.navigateTo({ + // url: `/pages/projectInfo/projectInfo?type=1&missionNo=${encodeURIComponent(item.missionNo)}&id=${encodeURIComponent(item.id)}` + // }) + // } + // }, + "4": { + id: "1", + title: "个人户申请", + icon: "../../../static/img/own_recruit.svg", + page: { + current: 0, + size, + total: size + }, + data: [], + prop: { + title: 'missionTitle', + desc: (value) => { + if (value.data[0]) + return `您收到${value.data[0][0]['companyName']}的任务` + }, + time: 'createTime', + isRead: 'status', + listDesc: 'companyName', + }, + navigateTo(item, dispatch) { + dispatch('readNew', { + key: '1', + id: item.id + }) + uni.navigateTo({ + url: `/pages/projectInfo/projectInfo?type=1&missionNo=${encodeURIComponent(item.missionNo)}&id=${encodeURIComponent(item.id)}` + }) + } + } + }, + unread: { + "0": 0, + "1": 0 + }, + allUnread: 0, + dic: {} + }, + actions: { + newsInit({ + dispatch + }) { + const ps = [] + ps.push(dispatch('getUnreadNum')) + + for (let key in handler) { + ps.push(dispatch('newsReload', key)) + } + return Promise.all(ps) + }, + newsReload({ + dispatch, + commit + }, id) { + commit('CLEAR_NEWS_DATA', id) + return dispatch('newsGetNextPage', id) + }, + getUnreadNum({ + commit + }) { + for (let key in handler) { + handler[key].count().then((result) => { + commit('SET_UNREADNUM', { + id: key, + count: result + }) + }) + } + }, + newsGetNextPage({ + state, + commit + }, id) { + const item = state.data[id] + const page = item.page + const current = page.current + 1 + return new Promise((resolve, reject) => { + if (parseInt(page.total / page.size) + 1 < current) { + resolve() + return + } + handler[id].getList(current, page.size).then(res => { + const data = res.data.data; + commit('ADD_NEWS_DATA', { + id, + data: data.records, + current, + total: data.total + }) + resolve(res) + }).catch(reject) + }) + }, + removeNew({ + commit + }, { + id, + key, + group, + index + }) { + return new Promise((resolve, reject) => { + commit('REMOVE_NEWS', { + id, + key, + group, + index + }) + handler[key].remove(id).then(resolve, reject) + }) + }, + readNew({ + commit + }, { + key, + id + }) { + return new Promise((resolve, reject) => { + commit('READ_NEWS', { + key, + id + }) + handler[key].read(id).then(resolve, reject) + }) + }, + endRefreshNewsTimer(){ + stopRefreshToken() + }, + startRefreshNewsTimer({ + state, + commit, + dispatch + }) { + dispatch('newsInit').then(() => { + startRefreshToken(dispatch); + }) + } + }, + mutations: { + SET_UNREADNUM: (state, { + id, + count + }) => { + state.unread[id] = count + state.allUnread = getCount(state.unread) + }, + CLEAR_NEWS_DATA: (state, id) => { + state.data[id].page = { + current: 0, + size + } + state.data[id].data = [] + }, + ADD_NEWS_DATA: (state, { + id, + data, + current, + total + }) => { + data.forEach(item => { + state.dic[item.id] = item + }) + state.data[id].page.total = total + state.data[id].page.current = current + if (data.length > 0) { + state.data[id].data.push(data) + } + }, + REMOVE_NEWS: (state, { + id, + key, + group, + index + }) => { + const readProp = state.data[key].prop['isRead'] + if (state.dic[id][readProp] === 0) { + state.unread[key]-- + state.allUnread-- + } + state.dic[id] = undefined + const data = state.data[key].data + data[group].splice(index, 1) + if (data[group].length === 0) { + data.splice(group, 1) + } + }, + READ_NEWS: (state, { + key, + id + }) => { + const readProp = state.data[key].prop['isRead'] + if (state.dic[id][readProp] === 0) { + state.dic[id][readProp] = 1 + state.unread[key]-- + state.allUnread-- + } + } + }, + getters: { + + } +}; +export default news;