Newer
Older
smartwell_front / src / components / TableContainer / configColumnsDialog.vue
<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.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">
              <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>