import { BasicColumn, FormSchema } from '/@/components/Table'; import { h } from 'vue'; // import { Ref } from 'vue'; // import dayjs from 'dayjs'; // 1. 颜色映射(固定规则,可根据业务调整) export const colorHexMap: Record = { blue: '#1890ff', green: '#208840', gold: '#faad14', red: '#f5222d', gray: '#8c8c8c', black: '#000000', }; // 2. 定义动态映射的类型(供外部传入) export type ProductionStatusMap = Record< string | number, { label: string; value: number | string; color: string; } >; // 3. 生成表格列(支持传入动态映射) export const columns: BasicColumn[] = [ { title: '煤矿名称', dataIndex: 'mineName', width: 250, }, { title: '煤矿简称', dataIndex: 'mineNameAbbr', width: 150, ifShow: false, }, { title: '生产状态', dataIndex: 'gjMineStatus', width: 120, // customRender: ({ record }) => { // // 空值/异常值处理 // const status = record.mineProStatus; // // 从动态映射中取值,兜底未知状态 // const { label, color } = dynamicStatusMap.value[status] || { // label: '-', // }; // return h( // 'span', // { // style: { color: colorHexMap[color] }, // }, // label // ); // }, }, { title: '在线状态', dataIndex: 'mineLinkStatus', width: 100, customRender: ({ record }) => { const status = record.mineLinkStatus; if (status === undefined || status === null) { return h('span', { style: { color: colorHexMap.black } }, '-'); } const text = status === 1 ? '在线' : '离线'; const textColor = status === 1 ? colorHexMap.green : colorHexMap.red; return h('span', { style: { color: textColor } }, text); }, }, { title: '质量问题详情', dataIndex: 'queJson', width: 400, ellipsis: true, slots: { customRender: 'queJson' }, }, { title: '当前状态', dataIndex: 'isOk', width: 100, customRender: ({ record }) => { const status = record.isOk; const text = status ? '已解决' : '未解决'; const textColor = status ? colorHexMap.green : colorHexMap.red; return h('span', { style: { color: textColor } }, text); }, }, { title: '处理时间', dataIndex: 'updateTime', width: 180, }, ]; // 4. 查询表单配置(下拉框改为动态options) export const searchFormSchema: FormSchema[] = [ { field: 'deptId', label: '煤矿名称', component: 'Input', colProps: { span: 6 }, groupName: '常规查询', slot: 'mine-cascader', }, { field: 'goafId', label: '密闭名称', component: 'Input', colProps: { span: 6 }, groupName: '常规查询', slot: 'goaf-select', }, // 启用生产状态下拉框(动态options) { field: 'gjMineStatus', label: '生产状态', component: 'JDictSelectTag', componentProps: { dictCode: 'mineProStatus', placeholder: '请选择生产状态', }, colProps: { span: 6 }, }, { field: 'mineLinkStatus', label: '在线状态', component: 'Select', componentProps: { options: [ { label: '离线', value: '0' }, { label: '在线', value: '1' }, ], }, colProps: { span: 6 }, groupName: '常规查询', show: false, }, ]; export const topFormSchema: FormSchema[] = [ { field: 'mineName', label: '煤矿名称', component: 'Input', componentProps: {}, }, { field: 'devicePos', label: '密闭名称', component: 'Input', componentProps: {}, }, ]; /** 弹框表单配置 */ export const formSchema: FormSchema[] = [ { field: 'queTitle', label: '问题简述', component: 'Input', required: true, rules: [ { required: true, message: '请输入问题简述', trigger: 'blur' }, { max: 100, message: '问题简述长度不能超过100个字符', trigger: 'blur' }, ], }, { field: 'startTime', label: '开始时间', component: 'DatePicker', componentProps: { showTime: true, format: 'YYYY-MM-DD HH:mm:ss', }, required: true, rules: [{ required: true, message: '请选择开始时间', trigger: 'blur' }], }, { field: 'endTime', label: '结束时间', component: 'DatePicker', componentProps: { showTime: true, format: 'YYYY-MM-DD HH:mm:ss', }, required: true, rules: [{ required: true, message: '请选择结束时间', trigger: 'blur' }], }, { field: 'queCon', label: '问题描述', component: 'InputTextArea', componentProps: { rows: 4, maxlength: 500, showCount: true, }, // componentProps: { // //是否禁用 // disabled: false, // }, required: true, rules: [ { required: true, message: '请输入问题描述', trigger: 'blur' }, { max: 500, message: '问题描述长度不能超过500个字符', trigger: 'blur' }, ], }, { label: '密闭墙问题照片', field: 'queFileUrls', component: 'JImageUpload', componentProps: { //按钮显示文字 text: '图片上传', //支持两种基本样式picture和picture-card listType: 'picture-card', //用于控制文件上传的业务路径,默认temp bizPath: 'webfile', //是否禁用 disabled: false, //最大上传数量 fileMax: 9, }, colProps: { span: 6, }, }, { label: '密闭墙确认照片', field: 'okQueFileUrls', component: 'JImageUpload', componentProps: { //按钮显示文字 text: '图片上传', //支持两种基本样式picture和picture-card listType: 'picture-card', //用于控制文件上传的业务路径,默认temp bizPath: 'webfile', //是否禁用 disabled: false, //最大上传数量 fileMax: 9, }, colProps: { span: 6, }, }, // { // field: 'param', // label: '参数', // component: 'Input', // required: true, // rules: [ // { required: true, message: '请输入参数', trigger: 'blur' }, // { max: 200, message: '参数长度不能超过200个字符', trigger: 'blur' }, // ], // }, ]; export const exportFormSchema: FormSchema[] = [ { field: 'startTime', label: '开始时间', component: 'DatePicker', componentProps: { showTime: true, format: 'YYYY-MM-DD HH:mm:ss', }, required: true, rules: [{ required: true, message: '请选择开始时间', trigger: 'blur' }], }, { field: 'endTime', label: '结束时间', component: 'DatePicker', componentProps: { showTime: true, format: 'YYYY-MM-DD HH:mm:ss', }, required: true, rules: [{ required: true, message: '请选择结束时间', trigger: 'blur' }], }, ];