wangbd-myui
Version:
MY前端基础框架核心组件库
466 lines (443 loc) • 15.8 kB
JavaScript
const _ = require('lodash')
module.exports = _.template(`
/**
* <%=cname%> store module
* @module $my/code/store/<%=name%>
* @author coder
*/
import {mapState, mapActions} from 'vuex'
import { <%=importTypeArray.join(', ')%> } from '$my/code/types'
import { <%=importApiArray.join(', ')%> } from '$my/code/api/<%=kebabCaseName%>'
// store module
export const <%=name%> = {
/**
* 状态数据
* @member state
<%_.each(customStateArray, function(item){ %>
* @property {*} <%=item.state%> <%=item.title%>响应数据
<%})%>
* @property {Array} <%=list%> 获取<%=cname%>列表响应数据
* @property {Number} <%=page%> 获取<%=cname%>列表响应页码
* @property {Number} <%=limit%> 获取<%=cname%>列表页大小,每页记录条数
* @property {Number} <%=total%> 获取<%=cname%>列表数据记录总条数
* @property {Object} <%=model%> 获取<%=cname%>单条记录
*/
state: {
<%_.each(customStateArray, function(item){ %>
<%=item.state%>: null,
<%})%>
<%=list%>: [],
<%=page%>: 1,
<%=limit%>: 0,
<%=total%>: 0,
<%=model%>: null
},
mutations: {
<%_.each(items, function(item, i){%>
<%if(i>0){%>,<%}%>
<%if(item.methodType == 'fetch'){%>
/**
* <%=item.title%>
* @function [mutations]<%=item.NAME%>
* @param {object} state vuex状态
* @param {object} payload 负载数据
* @param {Array} [payload.<%=list%>] 数据列表
* @param {number} [payload.<%=page%>=0] 数据页码
* @param {number} [payload.<%=limit%>=0] 每页条数
* @param {number} [payload.<%=total%>=0] 总记录数
*/
[<%=item.NAME%>](state, payload) {
state.<%=list%> = payload.<%=list%> || [];
state.<%=page%> = payload.<%=page%> || 0;
state.<%=limit%> = payload.<%=limit%> || 0;
state.<%=total%> = payload.<%=total%> || 0;
}
<%}%>
<%if(item.methodType == 'add'){%>
/**
* <%=item.title%>
* @function [mutations]<%=item.NAME%>
* @param {object} state vuex状态
* @param {object} payload 负载数据
* @param {number} [payload.index] 新增到列表的位置索引,默认最近到列表最后
* @param {object} payload.<%=model%> 新增的实体对象
*/
[<%=item.NAME%>](state, payload) {
const list = [...state.<%=list%>]
if(payload.index !== undefined) {
list.splice(payload.index, 0, payload.<%=model%>)
}else {
list.push(payload.<%=model%>);
}
state.<%=list%> = list
state.<%=total%> += 1
}
<%}%>
<%if(item.methodType == 'update'){%>
/**
* <%=item.title%>
* @function [mutations]<%=item.NAME%>
* @param {object} state vuex状态
* @param {object} payload 负载数据
* @param {number} [payload.index] 源实体在列表的位置索引,如没有index,即不更新源列表数据
* @param {object} payload.<%=model%> 更新的实体对象
*/
[<%=item.NAME%>](state, payload) {
if(payload.index !== undefined) {
const list = [...state.<%=list%>]
list.splice(payload.index, 1, payload.<%=model%>)
state.<%=list%> = list
}
}
<%}%>
<%if(item.methodType == 'remove'){%>
/**
* <%=item.title%>
* @function [mutations]<%=item.NAME%>
* @param {object} state vuex状态
* @param {object} payload 负载数据
* @param {number} [payload.index] 源实体在列表的位置索引,如没有index,即不删除实体在源列表数据
*/
[<%=item.NAME%>](state, payload) {
if(payload.index !== undefined) {
const list = [...state.<%=list%>]
list.splice(payload.index, 1)
state.<%=list%> = list
}
state.<%=total%> -= 1
}
<%}%>
<%if(item.methodType == 'get'){%>
/**
* <%=item.title%>
* @function [mutations]<%=item.NAME%>
* @param {object} state vuex状态
* @param {object} payload 负载数据
* @param {object} payload.<%=model%> 实体对象
*/
[<%=item.NAME%>](state, payload) {
state.<%=model%> = payload.<%=model%>
}
<%}%>
<%if(item.methodType == 'batch'){%>
/**
* <%=item.title%>
* @function [mutations]<%=item.NAME%>
* @param {object} state vuex状态
* @param {object} payload 负载数据
* @param {number[]} [payload.indexes] 源实体在列表的位置索引,如没有index,即不删除实体在源列表数据
*/
[<%=item.NAME%>](state, payload) {
state.<%=list%> = state.<%=list%>.filter((item, index) => !payload.indexes.includes(index));
state.<%=total%> -= payload.indexes.length
}
<%}%>
<%if(['fetch','get','add','update','remove','batch'].indexOf(item.methodType)==-1){%>
/**
* <%=item.title%>
* @function [mutations]<%=item.NAME%>
* @param {object} state vuex状态
* @param {object} payload 负载数据
* @param {object} payload.<%=item.state%> 需保存的数据
*/
[<%=item.NAME%>](state, payload) {
state.<%=item.state%> = payload.<%=item.state%>
}
<%}%>
<%})%>
},
actions: {
<%_.each(items, function(item, i){%>
<%if(i>0){%>,<%}%>
<%if(item.methodType == 'fetch'){%>
/**
* <%=item.title%>
* @function [actions]<%=item.NAME%>
* @param {object} context Store实例
* @param {function} context.commit 提交mutation方法
* @param {object} payload 负载数据对象
<%_.each(item.params, function(param){%>
* @param {string|number} payload.<%=param%> URL路径参数数据<%=param%>
<%})%>
* @param {object} payload.<%=item.ajaxParam%> 请求发送数据<%=item.ajaxParam%>
* @param {object} payload.options ajax参数选项
* @returns {Promise} Promise实例
*/
[<%=item.NAME%>]({commit}, {
<%_.each(item.params, function(param){%>
<%=param%>,
<%})%>
<%=item.ajaxParam%>,
options
} = {}) {
return <%=item.name%>(
<%_.each(item.params, function(param){%>
<%=param%>,
<%})%>
<%=item.ajaxParam%>,
options
).then(res => {
commit({
type: <%=item.NAME%>,
<%=list%>: res.<%=list%>,
<%=page%>: Number.parseInt(res.<%=page%>),
<%=limit%>: Number.parseInt(res.<%=limit%>),
<%=total%>: Number.parseInt(res.<%=total%>)
})
return res
})
}
<%}%>
<%if(item.methodType == 'add'){%>
/**
* <%=item.title%>
* @function [actions]<%=item.NAME%>
* @param {object} context Store实例
* @param {function} context.commit 提交mutation方法
* @param {object} payload 负载数据对象
<%_.each(item.params, function(param){%>
* @param {string|number} payload.<%=param%> URL路径参数数据<%=param%>
<%})%>
* @param {object} payload.<%=item.ajaxParam%> 请求发送数据<%=item.ajaxParam%>
* @param {number} [payload.index] 新增到列表的位置索引,默认最近到列表最后
* @param {object} payload.options ajax参数选项
* @returns {Promise} Promise实例
*/
[<%=item.NAME%>]({commit}, {
<%_.each(item.params, function(param){%>
<%=param%>,
<%})%>
<%=item.ajaxParam%>,
index,
options
} = {}) {
return <%=item.name%>(
<%_.each(item.params, function(param){%>
<%=param%>,
<%})%>
<%=item.ajaxParam%>,
options
).then(res => {
commit({
type: <%=item.NAME%>,
<%=model%>: Object.assign({}, <%=item.ajaxParam%>, res),
index: index
})
return res
})
}
<%}%>
<%if(item.methodType == 'update'){%>
/**
* <%=item.title%>
* @function [actions]<%=item.NAME%>
* @param {object} context Store实例
* @param {function} context.commit 提交mutation方法
* @param {object} payload 负载数据对象
<%_.each(item.params, function(param){%>
* @param {string|number} payload.<%=param%> URL路径参数数据<%=param%>
<%})%>
* @param {object} payload.<%=item.ajaxParam%> 请求发送数据<%=item.ajaxParam%>
* @param {number} [payload.index] 源实体在列表的位置索引,如没有index,即不更新实体在源列表数据
* @param {object} payload.options ajax参数选项
* @returns {Promise} Promise实例
*/
[<%=item.NAME%>]({commit, state}, {
<%_.each(item.params, function(param){%>
<%=param%>,
<%})%>
<%=item.ajaxParam%>,
index,
options
}={}) {
return <%=item.name%>(
<%_.each(item.params, function(param){%>
<%=param%>,
<%})%>
<%=item.ajaxParam%>,
options
).then(res => {
commit({
type: <%=item.NAME%>,
index: index,
<%=model%>: Object.assign({}, state.<%=list%>[index], <%=item.ajaxParam%>, res)
})
return res
})
}
<%}%>
<%if(item.methodType == 'remove'){%>
/**
* <%=item.title%>
* @function [actions]<%=item.NAME%>
* @param {object} context Store实例
* @param {function} context.commit 提交mutation方法
* @param {object} payload 负载数据对象
<%_.each(item.params, function(param){%>
* @param {string|number} payload.<%=param%> URL路径参数数据<%=param%>
<%})%>
* @param {object} payload.<%=item.ajaxParam%> 请求发送数据<%=item.ajaxParam%>
* @param {number} [payload.index] 源实体在列表的位置索引,如没有index,即不删除实体在源列表数据
* @param {object} payload.options ajax参数选项
* @returns {Promise} Promise实例
*/
[<%=item.NAME%>]({commit}, {
<%_.each(item.params, function(param){%>
<%=param%>,
<%})%>
<%=item.ajaxParam%>,
index,
options
}={}) {
return <%=item.name%>(
<%_.each(item.params, function(param){%>
<%=param%>,
<%})%>
<%=item.ajaxParam%>,
options
).then(res => {
commit({
type: <%=item.NAME%>,
index: index
})
return res
})
}
<%}%>
<%if(item.methodType == 'get'){%>
/**
* <%=item.title%>
* @function [actions]<%=item.NAME%>
* @param {object} context Store实例
* @param {function} context.commit 提交mutation方法
* @param {object} payload 负载数据对象
<%_.each(item.params, function(param){%>
* @param {string|number} payload.<%=param%> URL路径参数数据<%=param%>
<%})%>
* @param {object} payload.<%=item.ajaxParam%> 请求发送数据<%=item.ajaxParam%>
* @param {object} payload.options ajax参数选项
* @returns {Promise} Promise实例
*/
[<%=item.NAME%>]({commit}, {
<%_.each(item.params, function(param){%>
<%=param%>,
<%})%>
<%=item.ajaxParam%>,
options
}={}) {
return <%=item.name%>(
<%_.each(item.params, function(param){%>
<%=param%>,
<%})%>
<%=item.ajaxParam%>,
options
).then(res => {
commit({
type: <%=item.NAME%>,
<%=model%>: res
})
return res
})
}
<%}%>
<%if(item.methodType == 'batch'){%>
/**
* <%=item.title%>
* @function [actions]<%=item.NAME%>
* @param {object} context Store实例
* @param {function} context.commit 提交mutation方法
* @param {object} payload 负载数据对象
<%_.each(item.params, function(param){%>
* @param {string|number} payload.<%=param%> URL路径参数数据<%=param%>
<%})%>
* @param {object} payload.<%=item.ajaxParam%> 请求发送数据<%=item.ajaxParam%>
* @param {number[]} [payload.indexes] 源实体在列表的位置索引,如没有indexes,即不删除实体在源列表数据
* @param {object} payload.options ajax参数选项
* @returns {Promise} Promise实例
*/
[<%=item.NAME%>]({commit}, {
<%_.each(item.params, function(param){%>
<%=param%>,
<%})%>
<%=item.ajaxParam%>,
indexes,
options
}={}) {
return <%=item.name%>(
<%_.each(item.params, function(param){%>
<%=param%>,
<%})%>
<%=item.ajaxParam%>,
options
).then(res => {
commit({
type: <%=item.NAME%>,
indexes: indexes || []
})
return res
})
}
<%}%>
<%if(['fetch','get','add','update','remove', 'batch'].indexOf(item.methodType)==-1){%>
/**
* <%=item.title%>
* @function [actions]<%=item.NAME%>
* @param {object} context Store实例
* @param {function} context.commit 提交mutation方法
* @param {object} payload 负载数据对象
<%_.each(item.params, function(param){%>
* @param {string|number} payload.<%=param%> URL路径参数数据<%=param%>
<%})%>
* @param {object} payload.<%=item.ajaxParam%> 请求发送数据<%=item.ajaxParam%>
* @param {object} payload.options ajax参数选项
* @returns {Promise} Promise实例
*/
[<%=item.NAME%>]({commit}, {
<%_.each(item.params, function(param){%>
<%=param%>,
<%})%>
<%=item.ajaxParam%>,
options
}={}) {
return <%=item.name%>(
<%_.each(item.params, function(param){%>
<%=param%>,
<%})%>
<%=item.ajaxParam%>,
options
).then(res => {
commit({
type: <%=item.NAME%>,
<%=item.state%>: res
})
return res
})
}
<%}%>
<%})%>
}
}
/**
* Vue mixin setup
*/
export default {
computed: {
...mapState(['<%=name%>'])
},
methods: {
...mapActions({
<%_.each(items, function(item, i){%>
<%if(i>0){%>,<%}%>
<%=item.name%>: <%=item.NAME%>
<%})%>
})
},
beforeCreate() {
const store = this.$store
if (!store) return
if (!store.state.<%=name%>) {
store.registerModule('<%=name%>', <%=name%>)
}
}
}
`)