<script lang="ts" setup name="EditArea"> import type { FormRules } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus' // import CircularJSON from 'circular-json' const emits = defineEmits(['confirm']) const dataFormRef = ref() const dialogFormVisible = ref(false) // 对话框是否显示 const checkAllList = ref<any[]>() const localTitel = ref() const checkList = ref<string[]>([]) const initDialog = (data: any) => { checkAllList.value = data.columns localTitel.value = data.title // 设置默认选中 if (localStorage.getItem(localTitel.value)) { const data = JSON.parse(localStorage.getItem(localTitel.value) as string) checkList.value = data.map((item: any) => item.text) } else { // checkList.value = data.columns.filter((item: any) => item.isRequired).map((item: any) => item.text) checkList.value = data.columns.filter((item: any) => item.isRequired !== false).map((item: any) => item.text) } dialogFormVisible.value = true } defineExpose({ initDialog, }) // 保存数据 const saveData = () => { if (checkList.value.length < 4) { ElMessage.warning('最少选择4列数据') return } dialogFormVisible.value = false emits('confirm', checkAllList.value?.filter((item: any) => checkList.value.includes(item.text))) } const cancel = () => { dialogFormVisible.value = false } </script> <template> <el-dialog v-model="dialogFormVisible" title="配置列" append-to-body width="35%"> <el-form ref="dataFormRef" :model="{}" label-position="right" label-width="80px"> <el-row :gutter="24"> <el-col :span="24"> <el-form-item label="配置列:" prop="config"> <el-checkbox-group v-model="checkList" :min="4"> <!-- :disabled="item.isRequired" --> <el-checkbox v-for="item in checkAllList" :key="item" :label="item.text" :value="item.text" /> </el-checkbox-group> </el-form-item> </el-col> </el-row> </el-form> <template #footer> <div class="dialog-footer"> <el-button type="primary" @click="saveData"> 保存 </el-button> <el-button @click="cancel"> 取消 </el-button> </div> </template> </el-dialog> </template> <style lang="scss" scoped> .el-dialog { width: 700px; } .el-select { width: 100%; } </style>