fix(图表): 修复新建仪表盘、水波图异常的问题

This commit is contained in:
jianneng-fit2cloud 2025-02-12 11:39:09 +08:00 committed by jianneng-fit2cloud
parent 7673d7198e
commit 667c7d75c8

View File

@ -39,6 +39,7 @@ const emit = defineEmits(['onMiscChange'])
watch( watch(
() => props.quotaFields, () => props.quotaFields,
() => { () => {
init()
initField() initField()
}, },
{ deep: true } { deep: true }
@ -105,116 +106,12 @@ const initField = () => {
if (!isEmpty(state.miscForm.liquidMaxField.id)) { if (!isEmpty(state.miscForm.liquidMaxField.id)) {
state.liquidMaxField = getQuotaField(state.miscForm.liquidMaxField.id) state.liquidMaxField = getQuotaField(state.miscForm.liquidMaxField.id)
} }
if (props.quotaFields.length) {
initDynamicDefaultField()
}
} }
const COUNT_DE_TYPE = [0, 1, 5] const COUNT_DE_TYPE = [0, 1, 5]
const NUMBER_DE_TYPE = [1, 2, 3] const NUMBER_DE_TYPE = [1, 2, 3]
const getFieldSummaryByDeType = (deType: number) => { const getFieldSummaryByDeType = (deType: number) => {
return COUNT_DE_TYPE.includes(deType) || !deType ? 'count' : 'sum' return COUNT_DE_TYPE.includes(deType) || !deType ? 'count' : 'sum'
} }
const initDynamicDefaultField = () => {
const yAxisField = props.chart.yAxis?.[0]
const yAxisId = yAxisField?.id
//
if (quotaData.value?.length === 0) {
if (isLiquid.value && state.miscForm.liquidMaxType === 'dynamic') {
state.miscForm.liquidMax = state.miscForm.liquidMax
? state.miscForm.liquidMax
: cloneDeep(defaultMaxValue.gaugeMax)
state.miscForm.liquidMaxType = 'fix'
state.miscForm.liquidMaxField = {}
changeMisc('liquidMaxField', true)
}
if (isGauge.value && state.miscForm.gaugeMaxType === 'dynamic') {
state.miscForm.gaugeMax = state.miscForm.gaugeMax
? state.miscForm.gaugeMax
: cloneDeep(defaultMaxValue.liquidMax)
state.miscForm.gaugeMaxType = 'fix'
state.miscForm.gaugeMaxField = {}
state.miscForm.gaugeMinType = 'fix'
state.miscForm.gaugeMinField = {}
changeMisc('gaugeMaxField', true)
}
} else {
// quotaData chart.yAxis[0].id
const yAxisExists = props.quotaFields.find(ele => ele.id === yAxisId)
//
if (!yAxisExists) {
if (isLiquid.value) {
state.liquidProcessedNoYAxis = true
state.miscForm.liquidMaxField.id = ''
state.miscForm.liquidMaxField.summary = ''
state.liquidMaxField = {}
changeMisc('liquidMaxField', true)
}
if (isGauge.value) {
state.gaugeProcessedNoYAxis = true
state.miscForm.gaugeMaxField.id = ''
state.miscForm.gaugeMaxField.summary = ''
state.maxField = {}
changeMisc('gaugeMaxField', true)
}
}
if (isLiquid.value) {
// liquidMaxType liquidMax
if (state.miscForm.liquidMaxType === 'dynamic') {
state.miscForm.liquidMax = undefined
// yAxisId yAxisField
const isValidYAxisField =
yAxisId && (yAxisField.extField === 2 || NUMBER_DE_TYPE.includes(yAxisField.deType))
const isMatchingFieldId =
state.miscForm.liquidMaxField.id === yAxisId || !state.miscForm.liquidMaxField.id
// liquidMaxField.id
if (isValidYAxisField && isMatchingFieldId) {
state.miscForm.liquidMaxField.id = getDynamicFieldId()
state.liquidMaxField = getQuotaField(state.miscForm.liquidMaxField.id)
const summary = state.miscForm.liquidMaxField.summary
state.miscForm.liquidMaxField.summary = summary
? summary
: getFieldSummaryByDeType(state.liquidMaxField?.deType)
// changeMisc
if (!state.liquidProcessedNoYAxis) {
state.liquidProcessedNoYAxis = true
changeMisc('liquidMaxField', true)
}
}
}
if (!state.miscForm.liquidMax && state.miscForm.liquidMaxType === 'fix') {
state.miscForm.liquidMax = cloneDeep(defaultMaxValue.liquidMax)
}
} else {
if (state.miscForm.gaugeMaxType === 'dynamic') {
state.miscForm.gaugeMax = undefined
//
if (
yAxisId &&
(yAxisField.extField === 2 || NUMBER_DE_TYPE.includes(yAxisField.deType)) &&
(state.miscForm.gaugeMaxField.id === yAxisId || !state.miscForm.gaugeMaxField.id)
) {
// gaugeMaxField.id
state.miscForm.gaugeMaxField.id = getDynamicFieldId()
state.maxField = getQuotaField(state.miscForm.gaugeMaxField.id)
// summary maxField
const summary = state.miscForm.gaugeMaxField.summary
state.miscForm.gaugeMaxField.summary = summary
? summary
: getFieldSummaryByDeType(state.maxField?.deType)
if (!state.gaugeProcessedNoYAxis) {
state.gaugeProcessedNoYAxis = true
changeMisc('gaugeMaxField', true)
}
}
}
if (!state.miscForm.gaugeMax && state.miscForm.gaugeMaxType === 'fix') {
state.miscForm.gaugeMax = cloneDeep(defaultMaxValue.gaugeMax)
}
}
}
}
const getDynamicFieldId = () => { const getDynamicFieldId = () => {
// yAxisID // yAxisID
@ -225,27 +122,55 @@ const getDynamicFieldId = () => {
} }
const changeQuotaField = (type: string, resetSummary?: boolean) => { const changeQuotaField = (type: string, resetSummary?: boolean) => {
const isCountField = props.chart.yAxis?.[0]?.id === '-1' if (isGauge.value) {
const isDynamic = if (type === 'max') {
type === 'min' const isDynamic = state.miscForm.gaugeMaxType === 'dynamic'
? state.miscForm.gaugeMinType === 'dynamic'
: state.miscForm.gaugeMaxType === 'dynamic'
const field = type === 'min' ? state.miscForm.gaugeMinField : state.miscForm.gaugeMaxField
const maxValueKey = props.chart.type === 'liquid' ? 'liquidMax' : 'gaugeMax'
if (isDynamic) { if (isDynamic) {
if (!field.id && !isCountField) setDynamicFieldId(field) if (!state.miscForm.gaugeMaxField.id) {
if (!field.summary || resetSummary) field.summary = 'count' setDynamicFieldId(state.miscForm.gaugeMaxField)
if (field.id && field.summary) { }
if (type === 'min') state.minField = getQuotaField(field.id) if (!state.miscForm.gaugeMaxField.summary || resetSummary) {
else state.maxField = getQuotaField(field.id) state.miscForm.gaugeMaxField.summary = 'sum'
changeMisc(`${maxValueKey}Field`, true) }
if (state.miscForm.gaugeMaxField.id && state.miscForm.gaugeMaxField.summary) {
state.maxField = getQuotaField(state.miscForm.gaugeMaxField.id)
} }
} else { } else {
if (type === 'max' && isLiquid) {
state.miscForm.liquidMax = state.miscForm.liquidMax || cloneDeep(defaultMaxValue.liquidMax)
} else if (type === 'max') {
state.miscForm.gaugeMax = state.miscForm.gaugeMax || cloneDeep(defaultMaxValue.gaugeMax) state.miscForm.gaugeMax = state.miscForm.gaugeMax || cloneDeep(defaultMaxValue.gaugeMax)
} }
changeMisc('gaugeMaxField', true)
}
if (type === 'min') {
const isDynamic = state.miscForm.gaugeMinType === 'dynamic'
if (isDynamic) {
if (!state.miscForm.gaugeMinField.id) {
setDynamicFieldId(state.miscForm.gaugeMinField)
}
if (!state.miscForm.gaugeMinField.summary || resetSummary) {
state.miscForm.gaugeMinField.summary = 'sum'
}
if (state.miscForm.gaugeMinField.id && state.miscForm.gaugeMinField.summary) {
state.minField = getQuotaField(state.miscForm.gaugeMinField.id)
}
} else {
state.miscForm.gaugeMin = state.miscForm.gaugeMin ?? 0
}
changeMisc('gaugeMinField', true)
}
}
if (isLiquid.value) {
const field = state.miscForm.liquidMaxField
const maxValueKey = 'liquidMax'
const isDynamic = state.miscForm.liquidMaxType === 'dynamic'
if (isDynamic) {
if (!field.id) setDynamicFieldId(field)
if (!field.summary || resetSummary) field.summary = 'count'
if (field.id && field.summary) {
state.liquidMaxField = getQuotaField(field.id)
}
} else {
state.miscForm.liquidMax = state.miscForm.liquidMax || cloneDeep(defaultMaxValue.liquidMax)
}
changeMisc(`${maxValueKey}Field`, true) changeMisc(`${maxValueKey}Field`, true)
} }
} }
@ -310,8 +235,65 @@ const changeMaxValidate = prop => {
changeMisc(prop, true) changeMisc(prop, true)
} }
const addAxis = (form: AxisEditForm) => { const addAxis = (form: AxisEditForm) => {
initAxis(form.axis[0]?.id)
}
const initAxis = yAxisId => {
state.quotaData = [] state.quotaData = []
if (form.axis[0]?.id) { if (yAxisId) {
const uniqueIds = new Set(state.quotaData.map(item => item.id))
state.quotaData = [
...props.quotaFields.filter(
ele => ele.id !== '-1' && ele.extField !== 2 && !uniqueIds.has(ele.id)
)
]
const maxTypeKey = isLiquid.value ? 'liquidMaxType' : 'gaugeMaxType'
const maxValueKey = isLiquid.value ? 'liquidMax' : 'gaugeMax'
if (state.quotaData.length) {
if (isLiquid.value) {
state.miscForm[maxTypeKey] = 'dynamic'
state.miscForm[maxValueKey + 'Field']['id'] = getDynamicFieldId() ?? state.quotaData[0]?.id
state.miscForm[maxValueKey + 'Field']['summary'] = 'sum'
state.liquidMaxField = getQuotaField(state.miscForm[maxValueKey + 'Field']['id'])
changeMisc(`${maxValueKey}Field`, true)
}
if (isGauge.value) {
// max
state.miscForm[maxTypeKey] = 'dynamic'
state.miscForm[maxValueKey + 'Field']['id'] = getDynamicFieldId() ?? state.quotaData[0]?.id
state.miscForm[maxValueKey + 'Field']['summary'] = 'sum'
state.maxField = getQuotaField(state.miscForm[maxValueKey + 'Field']['id'])
changeMisc(`${maxValueKey}Field`, true)
// min
state.miscForm.gaugeMinType = 'fix'
state.miscForm.gaugeMin = 0
changeMisc('gaugeMinField', true)
}
} else {
if (isLiquid.value) {
state.miscForm[maxTypeKey] = 'fix'
state.miscForm[maxValueKey] = cloneDeep(defaultMaxValue[maxValueKey]) ?? 0
state.miscForm[maxValueKey + 'Field']['id'] = ''
state.miscForm[maxValueKey + 'Field']['summary'] = ''
}
if (isGauge.value) {
// max
state.miscForm[maxTypeKey] = 'fix'
state.miscForm[maxValueKey] = cloneDeep(defaultMaxValue[maxValueKey]) ?? 0
state.miscForm[maxValueKey + 'Field']['id'] = ''
state.miscForm[maxValueKey + 'Field']['summary'] = ''
// min
state.miscForm.gaugeMinType = 'fix'
state.miscForm.gaugeMin = 0
state.miscForm.gaugeMinField.id = ''
state.miscForm.gaugeMinField.summary = ''
}
changeMisc('', false)
}
}
}
const initStateForm = () => {
state.quotaData = []
if (props.chart.yAxis?.[0]?.id) {
const uniqueIds = new Set(state.quotaData.map(item => item.id)) const uniqueIds = new Set(state.quotaData.map(item => item.id))
state.quotaData = [ state.quotaData = [
...props.quotaFields.filter( ...props.quotaFields.filter(
@ -321,33 +303,93 @@ const addAxis = (form: AxisEditForm) => {
} }
const maxTypeKey = isLiquid.value ? 'liquidMaxType' : 'gaugeMaxType' const maxTypeKey = isLiquid.value ? 'liquidMaxType' : 'gaugeMaxType'
const maxValueKey = isLiquid.value ? 'liquidMax' : 'gaugeMax' const maxValueKey = isLiquid.value ? 'liquidMax' : 'gaugeMax'
if (form.axis[0]?.id === '-1') { if (quotaData.value.length) {
state.miscForm[maxTypeKey] = 'fix' if (isLiquid.value) {
state.miscForm[maxValueKey] = cloneDeep(defaultMaxValue[maxValueKey]) const hasDynamicValue = props.quotaFields.find(
} else { ele => ele.id === state.miscForm[maxValueKey + 'Field']['id']
state.miscForm[maxTypeKey] = 'dynamic' )
state.miscForm[maxValueKey + 'Field']['id'] = getDynamicFieldId() const hasFixValue = state.miscForm[maxValueKey]
if (state.miscForm[maxTypeKey] === 'dynamic' && !hasDynamicValue) {
state.miscForm[maxValueKey + 'Field']['id'] = state.quotaData[0]?.id ?? ''
state.miscForm[maxValueKey + 'Field']['summary'] = 'sum' state.miscForm[maxValueKey + 'Field']['summary'] = 'sum'
state.liquidMaxField = getQuotaField(state.miscForm[maxValueKey + 'Field']['id'])
changeMisc(`${maxValueKey}Field`, true)
} else if (state.miscForm[maxTypeKey] === 'fix' && !hasFixValue && hasFixValue !== 0) {
state.miscForm[maxValueKey] = cloneDeep(defaultMaxValue[maxValueKey]) ?? 0
changeMisc(`${maxValueKey}Field`, true)
}
} }
if (isGauge.value) { if (isGauge.value) {
// max
const hasDynamicValue = props.quotaFields.find(
ele => ele.id === state.miscForm[maxValueKey + 'Field']['id']
)
const hasFixValue = state.miscForm[maxValueKey]
if (state.miscForm[maxTypeKey] === 'dynamic' && !hasDynamicValue) {
state.miscForm[maxValueKey + 'Field']['id'] = state.quotaData[0]?.id ?? ''
state.miscForm[maxValueKey + 'Field']['summary'] = 'sum'
state.maxField = getQuotaField(state.miscForm[maxValueKey + 'Field']['id'])
changeMisc(`${maxValueKey}Field`, true)
} else if (state.miscForm[maxTypeKey] === 'fix' && !hasFixValue && hasFixValue !== 0) {
state.miscForm[maxValueKey] = cloneDeep(defaultMaxValue[maxValueKey]) ?? 0
changeMisc(`${maxValueKey}Field`, true)
}
// min
const hasDynamicMinValue = props.quotaFields.find(
ele => ele.id === state.miscForm.gaugeMinField.id
)
if (state.miscForm.gaugeMinType === 'dynamic' && !hasDynamicMinValue) {
state.miscForm.gaugeMin = 0
state.miscForm.gaugeMinField.id = state.quotaData[0]?.id ?? ''
state.miscForm.gaugeMinField.summary = 'sum'
state.minField = getQuotaField(state.miscForm.gaugeMinField.id)
changeMisc('gaugeMinField', true)
}
}
} else {
if (isLiquid.value) {
state.miscForm[maxTypeKey] = 'fix'
state.miscForm[maxValueKey] = cloneDeep(defaultMaxValue[maxValueKey]) ?? 0
state.miscForm[maxValueKey + 'Field']['id'] = ''
state.miscForm[maxValueKey + 'Field']['summary'] = ''
}
if (isGauge.value) {
// max
state.miscForm[maxTypeKey] = 'fix'
state.miscForm[maxValueKey] = cloneDeep(defaultMaxValue[maxValueKey]) ?? 0
state.miscForm[maxValueKey + 'Field']['id'] = ''
state.miscForm[maxValueKey + 'Field']['summary'] = ''
// min
state.miscForm.gaugeMinType = 'fix' state.miscForm.gaugeMinType = 'fix'
state.miscForm.gaugeMin = 0 state.miscForm.gaugeMin = 0
state.miscForm.gaugeMinField.id = '' state.miscForm.gaugeMinField.id = ''
state.miscForm.gaugeMinField.summary = '' state.miscForm.gaugeMinField.summary = ''
} }
if (!quotaData.value.length) { changeMisc('', false)
state.miscForm[maxTypeKey] = 'fix'
state.miscForm[maxValueKey] = cloneDeep(defaultMaxValue[maxValueKey])
} }
changeMisc(`${maxValueKey}Field`, false)
} }
onMounted(() => { onMounted(() => {
init() init()
initField() initField()
initAxis(props.chart.yAxis[0]?.id)
useEmitt({ name: 'addAxis', callback: addAxis }) useEmitt({ name: 'addAxis', callback: addAxis })
useEmitt({ name: 'chart-data-change', callback: initField }) useEmitt({
useEmitt({ name: 'chart-type-change', callback: initField }) name: 'chart-data-change',
callback: () => {
initStateForm()
}
})
useEmitt({
name: 'chart-type-change',
callback: () => {
if (isLiquid.value || isGauge.value) {
init()
initField()
initAxis(props.chart.yAxis[0]?.id)
}
}
})
}) })
/** /**