<script lang="ts" setup>
|
import { computed, reactive, ref } from 'vue'
|
import { deepCopy } from '@/utils/utils'
|
import { useEmitt } from '@/hooks/web/useEmitt'
|
import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain'
|
import { storeToRefs } from 'pinia'
|
import { ElMessage } from 'element-plus-secondary'
|
const loading = ref(false)
|
const subject = ref()
|
const subjectDialogShow = ref(false)
|
const dvMainStore = dvMainStoreWithOut()
|
const { canvasViewInfo } = storeToRefs(dvMainStore)
|
|
const state = reactive({
|
viewId: null
|
})
|
const curDataSetParamsInfo = ref([])
|
|
const resetForm = () => {
|
subject.value.clearValidate()
|
subjectDialogShow.value = false
|
}
|
const subjectForm = ref(null)
|
const rules = ref({})
|
|
const optInit = item => {
|
if (item) {
|
state.viewId = item.id
|
const chartInfo = canvasViewInfo.value[state.viewId]
|
curDataSetParamsInfo.value = deepCopy(chartInfo.calParams)
|
subjectDialogShow.value = true
|
}
|
}
|
|
const saveSubject = () => {
|
if (disabledCheck.value) {
|
ElMessage.error('请输入正确参数')
|
return
|
}
|
canvasViewInfo.value[state.viewId]['calParams'] = curDataSetParamsInfo.value
|
useEmitt().emitter.emit('calcData-' + state.viewId, canvasViewInfo.value[state.viewId])
|
resetForm()
|
}
|
|
const disabledCheck = computed(() => {
|
return (
|
!curDataSetParamsInfo.value ||
|
(curDataSetParamsInfo.value &&
|
curDataSetParamsInfo.value.filter(item => item.value === null || item.value === undefined)
|
.length > 0)
|
)
|
})
|
|
const statesCheck = () => {
|
return subjectDialogShow.value
|
}
|
|
const handleDialogClick = e => {
|
e.preventDefault()
|
e.stopPropagation()
|
}
|
|
defineExpose({
|
optInit,
|
statesCheck,
|
resetForm
|
})
|
</script>
|
|
<template>
|
<el-dialog
|
v-loading="loading"
|
title="计算参数输入"
|
v-model="subjectDialogShow"
|
width="400px"
|
:before-close="resetForm"
|
@click="handleDialogClick"
|
>
|
<el-form
|
v-if="subjectDialogShow"
|
label-position="top"
|
ref="subject"
|
:model="subjectForm"
|
:rules="rules"
|
@submit.prevent
|
>
|
<el-form-item
|
v-for="paramsItem in curDataSetParamsInfo"
|
:key="paramsItem"
|
class="form-item"
|
:prop="'value_' + paramsItem.name"
|
>
|
<template #label>
|
<label class="m-label">
|
计算字段[{{ paramsItem.name }}] <span style="color: red">*</span>
|
</label>
|
</template>
|
<el-input-number
|
style="width: 100%"
|
v-model="paramsItem.value"
|
placeholder="请输入一个数字"
|
controls-position="right"
|
/>
|
</el-form-item>
|
</el-form>
|
<template #footer>
|
<el-button secondary @click="resetForm()">取消</el-button>
|
<el-button type="primary" @click="saveSubject()">确认</el-button>
|
</template>
|
</el-dialog>
|
</template>
|
|
<style lang="less" scoped>
|
:deep(.ed-dialog__header) {
|
text-align: left;
|
}
|
.m-label {
|
color: #1f2329;
|
font-size: 14px;
|
font-style: normal;
|
font-weight: 400;
|
line-height: 14px;
|
display: inline-block;
|
}
|
.form-item {
|
margin-bottom: 16px;
|
:deep(.ed-form-item__label) {
|
line-height: 14px !important;
|
}
|
|
:deep(.ed-input__inner) {
|
font-size: 14px !important;
|
}
|
|
:deep(.ed-form-item__error) {
|
top: 88%;
|
}
|
.ed-input {
|
--ed-input-height: 32px !important;
|
}
|
|
&:last-child {
|
margin-bottom: 0;
|
}
|
|
:deep(.avatar-uploader-container) {
|
margin-bottom: 0px;
|
}
|
}
|
</style>
|