95 lines
2.4 KiB
JavaScript
95 lines
2.4 KiB
JavaScript
import { Condition } from '@/components/widget/bean/Condition'
|
|
const state = {
|
|
conditions: []
|
|
}
|
|
|
|
const mutations = {
|
|
ADD_CONDITION: (state, condition) => {
|
|
condition && valueValid(condition) && state.conditions.push(condition)
|
|
},
|
|
REDUCE_CONDITION: (state, index) => {
|
|
state.conditions && state.conditions.length > index && state.conditions.splice(index, 1)
|
|
},
|
|
CLEAR: (state) => {
|
|
state.conditions = []
|
|
}
|
|
}
|
|
|
|
const actions = {
|
|
add({ commit }, data) {
|
|
const condition = formatCondition(data)
|
|
if (!state.conditions || state.conditions.length === 0) {
|
|
state.conditions = []
|
|
}
|
|
const validResult = isValid(condition)
|
|
if (!validResult.statu && validResult.hasOwnProperty('existIndex') && validResult.existIndex !== -1) {
|
|
commit('REDUCE_CONDITION', validResult.existIndex)
|
|
commit('ADD_CONDITION', condition)
|
|
}
|
|
if (validResult.statu) {
|
|
commit('ADD_CONDITION', condition)
|
|
}
|
|
},
|
|
reduce({ commit }, index) {
|
|
commit('ADD_CONDITION', index)
|
|
},
|
|
delete({ commit }, component) {
|
|
for (let index = 0; index < state.conditions.length; index++) {
|
|
const element = state.conditions[index]
|
|
if (element.componentId === component.componentId) {
|
|
commit('REDUCE_CONDITION', index)
|
|
}
|
|
}
|
|
},
|
|
clear({ commit }) {
|
|
commit('CLEAR')
|
|
}
|
|
|
|
}
|
|
// 判断条件condition是否有效
|
|
const isValid = condition => {
|
|
const nullResult = {
|
|
statu: false,
|
|
msg: 'condition is null'
|
|
}
|
|
const repeatResult = {
|
|
statu: false,
|
|
existIndex: -1,
|
|
msg: 'condition is exist'
|
|
}
|
|
const validResult = {
|
|
statu: true,
|
|
msg: null
|
|
}
|
|
if (!condition) {
|
|
return nullResult
|
|
}
|
|
for (let index = 0; index < state.conditions.length; index++) {
|
|
const item = state.conditions[index]
|
|
if (item.componentId === condition.componentId) {
|
|
repeatResult.existIndex = index
|
|
return repeatResult
|
|
}
|
|
}
|
|
return validResult
|
|
}
|
|
|
|
const valueValid = condition => {
|
|
return condition && condition.value && condition.value.length > 0 && condition.value[0]
|
|
}
|
|
|
|
const formatCondition = obj => {
|
|
const { component, value, operator } = obj
|
|
const fieldId = component.options.attrs.fieldId
|
|
const viewIds = component.options.attrs.viewIds
|
|
const condition = new Condition(component.id, fieldId, operator, value, viewIds)
|
|
return condition
|
|
}
|
|
|
|
export default {
|
|
namespaced: true,
|
|
state,
|
|
mutations,
|
|
actions
|
|
}
|