Browse Source

refactor: 重构store分层

分层分类project role task 去掉了home
tall
wally 4 years ago
parent
commit
5f6fff865d
  1. 1
      .env
  2. 3
      CHANGELOG.md
  3. 3
      src/apis/plugin.js
  4. 6
      src/apis/project.js
  5. 5
      src/apis/role.js
  6. 9
      src/apis/task.js
  7. 2
      src/components/Globals/Globals.vue
  8. 12
      src/components/Roles/Roles.vue
  9. 10
      src/components/TimeLine/TimeLine.vue
  10. 9
      src/components/TimeLine/component/TimeBox.vue
  11. 2
      src/components/TimeLine/component/TimeStatus.vue
  12. 6
      src/components/Tips/Tips.vue
  13. 2
      src/components/Title/Title.vue
  14. 14
      src/config/domains.js
  15. 40
      src/pages/project/project.vue
  16. 6
      src/store/index.js
  17. 18
      src/store/project/actions.js
  18. 11
      src/store/project/getters.js
  19. 12
      src/store/project/index.js
  20. 21
      src/store/project/mutations.js
  21. 5
      src/store/project/state.js
  22. 19
      src/store/role/actions.js
  23. 3
      src/store/role/getters.js
  24. 12
      src/store/role/index.js
  25. 30
      src/store/role/mutations.js
  26. 7
      src/store/role/state.js
  27. 18
      src/store/task/actions.js
  28. 3
      src/store/task/getters.js
  29. 12
      src/store/task/index.js
  30. 142
      src/store/task/mutations.js
  31. 35
      src/store/task/state.js

1
.env

@ -0,0 +1 @@
VUE_APP_DOMAIN=qcp

3
CHANGELOG.md

@ -1,4 +1,4 @@
# 0.1.0 (2021-07-28)
# 0.1.0 (2021-07-29)
### 🌟 新功能
范围|描述|commitId
@ -44,6 +44,7 @@
- | 日常任务修改 | dfa7ee2
- | 更新代码 | 8c27e68
- | 更新代码 | 1f40a76
- | 格式细节调整 | b907a03
- | 添加插件数据 | 2f11b42
- | 组件新建 | 89c0035

3
src/apis/plugin.js

@ -1,5 +1,6 @@
import domain from '@/config/domains';
const apiUrl = process.env.VUE_APP_API_URL;
const mock = `${apiUrl}/defaultwbs`;
const mock = `${apiUrl}${domain}`;
const plugin = `${apiUrl}/pluginshop/plugin`;
const install = (Vue, vm) => {

6
src/apis/project.js

@ -1,10 +1,12 @@
const apiUrl = process.env.VUE_APP_API_URL;
const tall = `${apiUrl}/defaultwbs/project`;
import domainPath from '@/config/domains';
const tall = `${apiUrl}${domainPath}`;
const project = `${tall}/project`;
const install = (Vue, vm) => {
vm.$u.api = { ...vm.$u.api } || {};
//根据id获取项目信息
vm.$u.api.findProjectById = param => vm.$u.post(`${tall}/findProjectById`, param);
vm.$u.api.findProjectById = param => vm.$u.post(`${project}/findProjectById`, param);
};
export default { install };

5
src/apis/role.js

@ -1,10 +1,11 @@
const apiUrl = process.env.VUE_APP_API_URL;
const tall = `${apiUrl}/defaultwbs/role`;
import domain from '@/config/domains';
const role = `${apiUrl}${domain}/role`;
const install = (Vue, vm) => {
vm.$u.api = { ...vm.$u.api } || {};
//根据时间基准点和角色查找定期任务
vm.$u.api.findShowRole = param => vm.$u.post(`${tall}/show`, param);
vm.$u.api.findShowRole = param => vm.$u.post(`${role}/show`, param);
};
export default { install };

9
src/apis/task.js

@ -1,12 +1,13 @@
const apiUrl = process.env.VUE_APP_API_URL;
const tall = `${apiUrl}/defaultwbs/task`;
import domain from '@/config/domains';
const task = `${apiUrl}${domain}/task`;
const install = (Vue, vm) => {
vm.$u.api = { ...vm.$u.api } || {};
vm.$u.api.getGlobal = param => vm.$u.post(`${tall}/global`, param);
vm.$u.api.getPermanent = param => vm.$u.post(`${tall}/permanent`, param);
vm.$u.api.getGlobal = param => vm.$u.post(`${task}/global`, param);
vm.$u.api.getPermanent = param => vm.$u.post(`${task}/permanent`, param);
//根据时间基准点和角色查找定期任务
vm.$u.api.getRegularTask = param => vm.$u.post(`${tall}/regular`, param);
vm.$u.api.getRegularTask = param => vm.$u.post(`${task}/regular`, param);
};
export default { install };

2
src/components/Globals/Globals.vue

@ -43,7 +43,7 @@ export default {
};
},
computed: mapState('home', ['isShrink']),
computed: mapState('task', ['isShrink']),
methods: {
getClass(col, row) {

12
src/components/Roles/Roles.vue

@ -1,5 +1,5 @@
<template>
<view class="wrap bg-white px-2">
<view class="px-2 bg-white wrap">
<view class="home-box u-skeleton">
<scroll-view :enable-flex="true" :scroll-left="scrollLeft" :throttle="false" scroll-with-animation scroll-x>
<view class="tab-box">
@ -43,7 +43,10 @@ export default {
};
},
computed: { ...mapState('home', ['visibleRoles', 'roleId', 'tasks']) },
computed: {
...mapState('role', ['visibleRoles', 'roleId']),
...mapState('task', ['tasks']),
},
watch: {
visibleRoles(val) {
@ -63,8 +66,9 @@ export default {
},
methods: {
...mapMutations('home', ['setRoleId', 'setTasks']),
...mapActions('home', ['handleRegularTask']),
...mapActions('task', ['handleRegularTask']),
...mapMutations('role', ['setRoleId']),
...mapMutations('task', ['setTasks']),
//
setCurrentRole(index) {

10
src/components/TimeLine/TimeLine.vue

@ -14,7 +14,9 @@
>
<!-- 时间轴 -->
<u-divider bg-color="#f3f4f6" class="pt-5" fontSize="14px" v-if="topEnd">到顶啦</u-divider>
<TimeBox />
<u-divider bg-color="#f3f4f6" class="pb-5" fontSize="14px" v-if="bottomEnd">到底啦</u-divider>
</scroll-view>
</template>
@ -31,14 +33,18 @@ export default {
return { top: 0 };
},
computed: mapState('home', ['scrollTop', 'showTips', 'visibleRoles', 'tasks', 'topEnd', 'bottomEnd']),
computed: {
...mapState('role', ['visibleRoles']),
...mapState('task', ['scrollTop', 'showTips', 'tasks', 'topEnd', 'bottomEnd']),
},
mounted() {
this.setDatumPoint();
},
methods: {
...mapMutations('home', ['setScrollTop', 'setShrink', 'setRoleId', 'setUpTasks', 'setDownTasks']),
...mapMutations('role', ['setRoleId']),
...mapMutations('task', ['setScrollTop', 'setShrink', 'setUpTasks', 'setDownTasks']),
//
scroll(e) {

9
src/components/TimeLine/component/TimeBox.vue

@ -67,12 +67,13 @@ export default {
return { currentComponent: '', styleType: 0 };
},
computed: mapState('home', ['roleId', 'timeNode', 'timeUnit', 'tasks', 'taskLoading']),
created() {},
computed: {
...mapState('role', ['roleId']),
...mapState('task', ['timeNode', 'timeUnit', 'tasks', 'taskLoading']),
},
methods: {
...mapMutations('home', ['setTipsContent', 'setTipsContent', 'setTimeNode']),
...mapMutations('task', ['setTipsContent', 'setTipsContent', 'setTimeNode']),
//
setHeight(panel) {

2
src/components/TimeLine/component/TimeStatus.vue

@ -73,7 +73,7 @@ export default {
};
},
methods: {
...mapMutations('home', ['setClient', 'setTips', 'setStatus', 'setTipsContent']),
...mapMutations('task', ['setClient', 'setTips', 'setStatus', 'setTipsContent']),
chooseList() {
return this.start;

6
src/components/Tips/Tips.vue

@ -1,6 +1,6 @@
<template>
<view
class="fixed shadow-2xl shadow-2xl"
class="fixed shadow-2xl"
style="z-index: 1000"
:style="{
left: client.left + 'px',
@ -41,7 +41,7 @@ export default {
type: String,
},
},
computed: mapState('home', ['client', 'showTips', 'status', 'tipsContent']),
computed: mapState('task', ['client', 'showTips', 'status', 'tipsContent']),
data() {
return {
footStyle: { padding: '4px 15px' },
@ -53,7 +53,7 @@ export default {
this.height = window.screen.height;
},
methods: {
...mapMutations('home', ['setTips']),
...mapMutations('task', ['setTips']),
clickOk() {
this.$refs.uToast.show({
title: '点击了确定',

2
src/components/Title/Title.vue

@ -21,7 +21,7 @@ export default {
return { title: '加载中...' };
},
computed: mapState('home', ['project']),
computed: mapState('project', ['project']),
methods: {
// LWBS

14
src/config/domains.js

@ -0,0 +1,14 @@
const domain = process.env.VUE_APP_DOMAIN;
const domains = {
default: {
path: '/defaultwbs',
description: '默认最小项目',
},
qcp: {
path: '/qcp/v3.0',
description: '平车项目',
},
};
export default domains[domain].path;

40
src/pages/project/project.vue

@ -21,7 +21,8 @@ export default {
computed: {
...mapState('user', ['user', 'token']),
...mapState('home', ['visibleRoles', 'roleId', 'timeNode', 'timeUnit', 'tasks']),
...mapState('role', ['visibleRoles', 'roleId']),
...mapState('task', ['timeNode', 'timeUnit', 'tasks']),
},
onLoad(options) {
@ -40,6 +41,7 @@ export default {
await this.getGlobal();
}
},
/**
* 当角色发生变化时
* 重新查询永久日常任务和普通日常任务
@ -60,20 +62,14 @@ export default {
},
methods: {
...mapMutations('home', [
'setProject',
'setInvisibleRoles',
'setVisibleRoles',
'setRoleId',
'setUpTasks',
'setDownTasks',
'setDailyTasks',
'setProjectName',
'setTimeNode',
]),
...mapActions('user', ['getUserId']),
...mapActions('home', ['getProjectById', 'getRoles', 'handleRegularTask']),
...mapActions('project', ['getProjectById']),
...mapActions('role', ['getRoles']),
...mapActions('task', ['handleRegularTask']),
...mapMutations('user', ['setToken']),
...mapMutations('project', ['setProject', 'setProjectName']),
...mapMutations('role', ['setInvisibleRoles', 'setVisibleRoles', 'setRoleId']),
...mapMutations('task', ['setUpTasks', 'setDownTasks', 'setDailyTasks', 'setTimeNode']),
/**
* 初始化
@ -82,19 +78,13 @@ export default {
async init(options) {
try {
if (!this.token) {
// storetoken
const TOKEN = this.$t.storage.getStorageSync(this.$t.app.tokenKey);
if (TOKEN) {
// token store
this.setToken(TOKEN);
// tokenuserIdtoken
// token userId
if (!options || !options.u) {
// u (userId)
this.$t.ui.showToast('缺少用户信息参数');
} else {
// token userIdtoken
if (!options || !options.u) {
// u (userId)
this.$t.ui.showToast('缺少用户信息参数');
} else {
await this.getUserId(options.u);
}
await this.getUserId(options.u);
}
}

6
src/store/index.js

@ -1,10 +1,12 @@
import Vue from 'vue';
import Vuex from 'vuex';
import home from './home/index';
import db from './db/index';
import user from './user/index';
import messages from './messages/index';
import socket from './socket/index';
import project from './project/index';
import role from './role/index';
import task from './task/index';
Vue.use(Vuex);
export default new Vuex.Store({ modules: { home, db, user, messages, socket } });
export default new Vuex.Store({ modules: { db, user, messages, socket, project, role, task } });

18
src/store/project/actions.js

@ -0,0 +1,18 @@
const actions = {
/**
* 通过项目id获取项目信息
* @param {any} commit
* @param {object} params 提交的参数
*/
async getProjectById({ commit }, params) {
try {
const res = await uni.$u.api.findProjectById(params);
commit('setProject', res);
return res;
} catch (error) {
throw error || '获取项目信息失败';
}
},
};
export default actions;

11
src/store/project/getters.js

@ -0,0 +1,11 @@
const getters = {
/**
* 当前项目的id
* @param {object} project
*/
projectId({ project }) {
return project.id;
},
};
export default getters;

12
src/store/project/index.js

@ -0,0 +1,12 @@
import state from './state';
import getters from './getters';
import mutations from './mutations';
import actions from './actions';
export default {
namespaced: true,
state,
getters,
mutations,
actions,
};

21
src/store/project/mutations.js

@ -0,0 +1,21 @@
const mutations = {
/**
* 设置当前项目信息
* @param { object } state
* @param { object } data
*/
setProject(state, data) {
state.project = { ...data };
},
/**
* 设置当前项目名称
* @param { object } state
* @param { string } data
*/
setProjectName(state, data) {
state.project.name = data;
},
};
export default mutations;

5
src/store/project/state.js

@ -0,0 +1,5 @@
const state = {
project: { name: '加载中...' }, // 当前项目信息
};
export default state;

19
src/store/role/actions.js

@ -0,0 +1,19 @@
const actions = {
/**
* 通过项目id获取角色信息
* @param {any} commit
* @param {object} params 提交的参数
*/
async getRoles({ commit }, params) {
try {
const res = await uni.$u.api.findShowRole(params);
commit('setInvisibleRoles', res.invisibleList);
commit('setVisibleRoles', res.visibleList);
return res;
} catch (error) {
throw error || '获取角色信息失败';
}
},
};
export default actions;

3
src/store/role/getters.js

@ -0,0 +1,3 @@
const getters = {};
export default getters;

12
src/store/role/index.js

@ -0,0 +1,12 @@
import state from './state';
import getters from './getters';
import mutations from './mutations';
import actions from './actions';
export default {
namespaced: true,
state,
getters,
mutations,
actions,
};

30
src/store/role/mutations.js

@ -0,0 +1,30 @@
const mutations = {
/**
* 设置不展示的角色信息
* @param {Object} state
* @param {Array} data 服务端返回的模板数组
*/
setInvisibleRoles(state, data) {
state.invisibleRoles = data || [];
},
/**
* 设置展示的角色信息
* @param {Object} state
* @param {Array} data 服务端返回的模板数组
*/
setVisibleRoles(state, data) {
state.visibleRoles = data || [];
},
/**
* 设置当前角色信息
* @param {Object} state
* @param {string} roleId 当前正在展示的角色的id
*/
setRoleId(state, roleId) {
state.roleId = roleId;
},
};
export default mutations;

7
src/store/role/state.js

@ -0,0 +1,7 @@
const state = {
invisibleRoles: [], // 不展示的角色信息
visibleRoles: [], // 展示的角色信息
roleId: '', // 当前展示查看的角色id
};
export default state;

18
src/store/task/actions.js

@ -0,0 +1,18 @@
const actions = {
/**
* 根据时间基准点和角色查找定期任务
* @param {string} roleId 角色id
* @param {string} timeNode 时间基准点 默认当前
* @param {string} timeUnit 时间颗粒度 默认天
*/
// eslint-disable-next-line
async handleRegularTask({ commit }, param) {
try {
return await uni.$u.api.getRegularTask(param);
} catch (error) {
throw error || '获取定期任务失败';
}
},
};
export default actions;

3
src/store/task/getters.js

@ -0,0 +1,3 @@
const getters = {};
export default getters;

12
src/store/task/index.js

@ -0,0 +1,12 @@
import state from './state';
import getters from './getters';
import mutations from './mutations';
import actions from './actions';
export default {
namespaced: true,
state,
getters,
mutations,
actions,
};

142
src/store/task/mutations.js

@ -0,0 +1,142 @@
const mutations = {
/**
* 记录时间轴向上滚动的距离
* @param { object } state
* @param { number } num
*/
setScrollTop(state, num) {
state.scrollTop = num;
},
/**
* 设置日常任务当前是否应该处于收缩状态
* @param { object } state
* @param { boolean } data
*/
setShrink(state, data) {
state.isShrink = data;
},
/**
* 存储鼠标点击位置
* @param { object } state
* @param { object } data
*/
setClient(state, data) {
state.client = { ...data };
},
/**
* 是否显示tips
* @param { object } state
* @param { boolean } data
*/
setTips(state, data) {
state.showTips = data;
},
/**
* 是否显示tips
* @param { object } state
* @param { number } data
*/
setStatus(state, data) {
state.status = data;
},
/**
* 是否显示tips
* @param { object } state
* @param { string } data
*/
setTipsContent(state, data) {
state.tipsContent = data;
},
/**
* 设置时间基准点
* @param { object } state
* @param { number } data
*/
setTimeNode(state, data) {
state.timeNode = data;
},
/**
* 设置时间颗粒度
* @param { object } state
* @param { number } data
*/
setTimeUnit(state, data) {
state.timeUnit = data;
},
/**
* 设置向上查到的定期任务数据
* @param {Object} state
* @param {Array} data 服务端返回的模板数组
*/
setUpTasks(state, data) {
if (!data || !data.length) {
state.topEnd = true;
}
if (!state.tasks[0].name) {
state.tasks = [...data];
} else {
state.tasks = [...data.concat(state.tasks)];
}
},
/**
* 设置向下查到的定期任务数据
* @param {Object} state
* @param {Array} data 服务端返回的模板数组
*/
setDownTasks(state, data) {
if (!data || !data.length) {
state.bottomEnd = true;
}
if (!state.tasks[0].name) {
state.tasks = [...data];
} else {
state.tasks = [...state.tasks.concat(data)];
}
},
/**
* 清空定期任务数据
* @param {Object} state
*/
setTasks(state) {
const time = +new Date().getTime();
const data = [
{
panel: {},
plugins: [],
planStart: uni.$t.time.add(time, -1, 'day').valueOf(),
},
{
panel: {},
plugins: [],
planStart: time,
},
{
panel: {},
plugins: [],
planStart: uni.$t.time.add(time, 1, 'day').valueOf(),
},
];
state.tasks = data;
},
/**
* 设置日常任务数据
* @param {Object} state
* @param {Array} data 服务端返回的模板数组
*/
setDailyTasks(state, data) {
state.dailyTasks = data || [];
},
};
export default mutations;

35
src/store/task/state.js

@ -0,0 +1,35 @@
const state = {
scrollTop: 0,
isShrink: false, // true: 收起, false:展开
client: {
left: 0, // 鼠标点击位置距离左边的距离
top: 0, // 鼠标点击位置距离上边的距离
},
showTips: false,
status: 0, // 点击了时间轴上的哪种样式,默认点击了开始
tipsContent: '', // 提示框内的内容,需要传入
timeNode: new Date().getTime(), // 时间基准点
timeUnit: 4, // // 时间颗粒度
tasks: [
{
panel: {},
plugins: [],
planStart: uni.$t.time.add(+new Date().getTime(), -1, 'day').valueOf(),
},
{
panel: {},
plugins: [],
planStart: new Date().getTime(),
},
{
panel: {},
plugins: [],
planStart: uni.$t.time.add(+new Date().getTime(), 1, 'day').valueOf(),
},
], // 定期任务
topEnd: false, // 时间轴向上查任务到顶了
bottomEnd: false, // 时间轴向下查任务到底了
dailyTasks: [], // 日常任务
};
export default state;
Loading…
Cancel
Save