This commit is contained in:
dengxin
2024-03-19 17:21:24 +08:00
parent ef6c744d41
commit 53cfc53ba8

View File

@@ -1,373 +1,337 @@
import { import {
inviteCount, inviteCount,
inviteList, inviteList,
inviteRead, inviteRead,
inviteRemove, inviteRemove,
noticeCount, noticeCount,
noticeList, noticeList,
noticeRead, noticeRead,
noticeRemove noticeRemove,
} from '@/api/news.js' } from "@/api/news.js";
import website from '@/config/website.js' import website from "@/config/website.js";
const size = 20 const size = 20;
const handler = { const handler = {
'0': { 0: {
count: noticeCount, count: noticeCount,
getList: noticeList, getList: noticeList,
read: noticeRead, read: noticeRead,
remove: noticeRemove remove: noticeRemove,
}, },
'1': { 1: {
count: inviteCount, count: inviteCount,
getList: inviteList, getList: inviteList,
read: inviteRead, read: inviteRead,
remove: inviteRemove remove: inviteRemove,
} },
} };
function getCount(data) { function getCount(data) {
let sum = 0 let sum = 0;
for (let key in data) { for (let key in data) {
sum += data[key] sum += data[key];
} }
return sum return sum;
} }
let refreshTimer = null; let refreshTimer = null;
function startRefreshToken(dispatch) { function startRefreshToken(dispatch) {
refreshTimer = setInterval(() => { refreshTimer = setInterval(() => {
dispatch("newsInit"); dispatch("newsInit");
}, website.newsRefreshTime); }, website.newsRefreshTime);
} }
function stopRefreshToken() { function stopRefreshToken() {
clearInterval(refreshTimer) clearInterval(refreshTimer);
} }
const news = { const news = {
state: { state: {
count: 0, count: 0,
data: { data: {
"0": { 0: {
id: "0", id: "0",
title: "消息通知", title: "消息通知",
icon: "../../../static/img/notice.svg", icon: "../../../static/img/notice.svg",
page: { page: {
current: 0, current: 0,
size, size,
total: size total: size,
}, },
data: [], data: [],
prop: { prop: {
title: 'title', title: "title",
desc: (value) => { desc: (value) => {
if (value.data[0]) if (value.data[0]) return value.data[0][0]["desc"];
return value.data[0][0]['desc'] },
}, time: "createTime",
time: 'createTime', isRead: "isRead",
isRead: 'isRead', listDesc: "desc",
listDesc: 'desc', },
}, navigateTo(item) {
navigateTo(item) { uni.$once("getNewsDetail", (cb) => {
uni.$once('getNewsDetail', (cb) => { cb(item);
cb(item) });
}) uni.navigateTo({
uni.navigateTo({ url: "/pages/news/newsDetail?type=0",
url: "/pages/news/newsDetail?type=0" });
}) },
} },
}, 1: {
"1": { id: "1",
id: "1", title: "任务申请",
title: "任务申请", icon: "../../../static/img/renwu.png",
icon: "../../../static/img/renwu.png", page: {
page: { current: 0,
current: 0, size,
size, total: size,
total: size },
}, data: [],
data: [], prop: {
prop: { title: "missionTitle",
title: 'missionTitle', desc: (value) => {
desc: (value) => { if (value.data[0])
if (value.data[0]) return `您收到${value.data[0][0]["companyName"]}的任务`;
return `您收到${value.data[0][0]['companyName']}的任务` },
}, time: "createTime",
time: 'createTime', isRead: "status",
isRead: 'status', listDesc: "companyName",
listDesc: 'companyName', },
}, navigateTo(item, dispatch) {
navigateTo(item, dispatch) { dispatch("readNew", {
dispatch('readNew', { key: "1",
key: '1', id: item.id,
id: item.id });
}) uni.navigateTo({
uni.navigateTo({ url: `/pages/projectInfo/projectInfo?type=1&missionNo=${encodeURIComponent(
url: `/pages/projectInfo/projectInfo?type=1&missionNo=${encodeURIComponent(item.missionNo)}&id=${encodeURIComponent(item.id)}` item.missionNo
}) )}&id=${encodeURIComponent(item.id)}`,
} });
}, },
"2": { },
id: "1", 2: {
title: "岗位申请", id: "1",
icon: "../../../static/img/job_recruit.svg", title: "岗位申请",
page: { icon: "../../../static/img/job_recruit.svg",
current: 0, page: {
size, current: 0,
total: size size,
}, total: size,
data: [], },
prop: { data: [],
title: 'missionTitle', prop: {
desc: (value) => { title: "missionTitle",
if (value.data[0]) desc: (value) => {
return `您收到${value.data[0][0]['companyName']}的任务` if (value.data[0])
}, return `您收到${value.data[0][0]["companyName"]}的任务`;
time: 'createTime', },
isRead: 'status', time: "createTime",
listDesc: 'companyName', isRead: "status",
}, listDesc: "companyName",
navigateTo(item, dispatch) { },
dispatch('readNew', { navigateTo(item, dispatch) {
key: '1', dispatch("readNew", {
id: item.id key: "1",
}) id: item.id,
uni.navigateTo({ });
url: `/pages/projectInfo/projectInfo?type=1&missionNo=${encodeURIComponent(item.missionNo)}&id=${encodeURIComponent(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", // "3": {
// page: { // id: "1",
// current: 0, // title: "技能推送",
// size, // icon: "../../../static/img/jineng.svg",
// total: size // page: {
// }, // current: 0,
// data: [], // size,
// prop: { // total: size
// title: 'missionTitle', // },
// desc: (value) => { // data: [],
// if (value.data[0]) // prop: {
// return `您收到${value.data[0][0]['companyName']}的任务` // title: 'missionTitle',
// }, // desc: (value) => {
// time: 'createTime', // if (value.data[0])
// isRead: 'status', // return `您收到${value.data[0][0]['companyName']}的任务`
// listDesc: 'companyName', // },
// }, // time: 'createTime',
// navigateTo(item, dispatch) { // isRead: 'status',
// dispatch('readNew', { // listDesc: 'companyName',
// key: '1', // },
// id: item.id // navigateTo(item, dispatch) {
// }) // dispatch('readNew', {
// uni.navigateTo({ // key: '1',
// url: `/pages/projectInfo/projectInfo?type=1&missionNo=${encodeURIComponent(item.missionNo)}&id=${encodeURIComponent(item.id)}` // 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", 4: {
page: { id: "1",
current: 0, title: "个人户申请",
size, icon: "../../../static/img/own_recruit.svg",
total: size page: {
}, current: 0,
data: [], size,
prop: { total: size,
title: 'missionTitle', },
desc: (value) => { data: [],
if (value.data[0]) prop: {
return `您收到${value.data[0][0]['companyName']}的任务` title: "missionTitle",
}, desc: (value) => {
time: 'createTime', if (value.data[0])
isRead: 'status', return `您收到${value.data[0][0]["companyName"]}的任务`;
listDesc: 'companyName', },
}, time: "createTime",
navigateTo(item, dispatch) { isRead: "status",
dispatch('readNew', { listDesc: "companyName",
key: '1', },
id: item.id navigateTo(item, dispatch) {
}) dispatch("readNew", {
uni.navigateTo({ key: "1",
url: `/pages/projectInfo/projectInfo?type=1&missionNo=${encodeURIComponent(item.missionNo)}&id=${encodeURIComponent(item.id)}` id: item.id,
}) });
} uni.navigateTo({
} url: `/pages/projectInfo/projectInfo?type=1&missionNo=${encodeURIComponent(
}, item.missionNo
unread: { )}&id=${encodeURIComponent(item.id)}`,
"0": 0, });
"1": 0 },
}, },
allUnread: 0, },
dic: {} unread: {
}, 0: 0,
actions: { 1: 0,
newsInit({ },
dispatch allUnread: 0,
}) { dic: {},
const ps = [] },
ps.push(dispatch('getUnreadNum')) actions: {
newsInit({ dispatch }) {
const ps = [];
ps.push(dispatch("getUnreadNum"));
for (let key in handler) { for (let key in handler) {
ps.push(dispatch('newsReload', key)) ps.push(dispatch("newsReload", key));
} }
return Promise.all(ps) return Promise.all(ps);
}, },
newsReload({ newsReload({ dispatch, commit }, id) {
dispatch, commit("CLEAR_NEWS_DATA", id);
commit return dispatch("newsGetNextPage", id);
}, id) { },
commit('CLEAR_NEWS_DATA', id) getUnreadNum({ commit }) {
return dispatch('newsGetNextPage', id) for (let key in handler) {
}, handler[key].count().then((result) => {
getUnreadNum({ commit("SET_UNREADNUM", {
commit id: key,
}) { count: result,
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) => {
newsGetNextPage({ if (parseInt(page.total / page.size) + 1 < current) {
state, resolve();
commit return;
}, id) { }
const item = state.data[id] handler[id]
const page = item.page .getList(current, page.size)
const current = page.current + 1 .then((res) => {
return new Promise((resolve, reject) => { const data = res.data.data;
if (parseInt(page.total / page.size) + 1 < current) { commit("ADD_NEWS_DATA", {
resolve() id,
return data: data.records,
} current,
handler[id].getList(current, page.size).then(res => { total: data.total,
const data = res.data.data; });
commit('ADD_NEWS_DATA', { resolve(res);
id, })
data: data.records, .catch(reject);
current, });
total: data.total },
}) removeNew({ commit }, { id, key, group, index }) {
resolve(res) return new Promise((resolve, reject) => {
}).catch(reject) commit("REMOVE_NEWS", {
}) id,
}, key,
removeNew({ group,
commit index,
}, { });
id, handler[key].remove(id).then(resolve, reject);
key, });
group, },
index readNew({ commit }, { key, id }) {
}) { return new Promise((resolve, reject) => {
return new Promise((resolve, reject) => { commit("READ_NEWS", {
commit('REMOVE_NEWS', { key,
id, id,
key, });
group, handler[key].read(id).then(resolve, reject);
index });
}) },
handler[key].remove(id).then(resolve, reject) endRefreshNewsTimer() {
}) stopRefreshToken();
}, },
readNew({ startRefreshNewsTimer({ state, commit, dispatch }) {
commit dispatch("newsInit").then(() => {
}, { startRefreshToken(dispatch);
key, });
id },
}) { },
return new Promise((resolve, reject) => { mutations: {
commit('READ_NEWS', { SET_UNREADNUM: (state, { id, count }) => {
key, state.unread[id] = count;
id state.allUnread = getCount(state.unread);
}) },
handler[key].read(id).then(resolve, reject) CLEAR_NEWS_DATA: (state, id) => {
}) state.data[id].page = {
}, current: 0,
endRefreshNewsTimer(){ size,
stopRefreshToken() };
}, state.data[id].data = [];
startRefreshNewsTimer({ },
state, ADD_NEWS_DATA: (state, { id, data, current, total }) => {
commit, data.forEach((item) => {
dispatch state.dic[item.id] = item;
}) { });
dispatch('newsInit').then(() => { state.data[id].page.total = total;
startRefreshToken(dispatch); state.data[id].page.current = current;
}) if (data.length > 0) {
} state.data[id].data.push(data);
}, }
mutations: { },
SET_UNREADNUM: (state, { REMOVE_NEWS: (state, { id, key, group, index }) => {
id, const readProp = state.data[key].prop["isRead"];
count if (state.dic[id][readProp] === 0) {
}) => { state.unread[key]--;
state.unread[id] = count state.allUnread--;
state.allUnread = getCount(state.unread) }
}, state.dic[id] = undefined;
CLEAR_NEWS_DATA: (state, id) => { const data = state.data[key].data;
state.data[id]?.page = { data[group].splice(index, 1);
current: 0, if (data[group].length === 0) {
size data.splice(group, 1);
} }
state.data[id].data = [] },
}, READ_NEWS: (state, { key, id }) => {
ADD_NEWS_DATA: (state, { const readProp = state.data[key].prop["isRead"];
id, if (state.dic[id][readProp] === 0) {
data, state.dic[id][readProp] = 1;
current, state.unread[key]--;
total state.allUnread--;
}) => { }
data.forEach(item => { },
state.dic[item.id] = item },
}) getters: {},
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; export default news;