<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) => { console.log(data, '1111') 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 } // 回复默认 const reset = () => { ElMessageBox.confirm( '确认恢复默认展示列?', '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning', } ).then(() => { window.localStorage.removeItem(localTitel.value) emits('confirm', checkAllList.value?.filter((item: any) => item.isRequired !== false)) dialogFormVisible.value = false }) } </script> <template> <el-dialog v-model="dialogFormVisible" title="配置列" append-to-body width="35%"> <template #header> <span class="header-container"> <span>配置列</span> <el-icon class="icon" @click="reset"> <el-tooltip class="box-item" effect="dark" content="恢复默认" placement="top"> <!-- <Refresh /> --> <svg-icon name="reset" /> </el-tooltip> </el-icon> </span> </template> <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"> <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> <style lang="scss" scoped> .header-container { display: flex; align-items: center; .icon { margin-left: 10px; &:hover { cursor: pointer; color: #0d76d4; } } } </style>