de/frontend/src/store/modules/conditions.js
2021-05-20 16:45:27 +08:00

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
}