import {ref} from "vue"; import models from "../models/index"; let {DSJSearch, DSJComponent, DSJButton, DSJForm, DSJSelect, DSJTable, DSJCascader} = models; /** * 页面工厂类 */ export default class CurdFactory { search = {}; //搜索对象 searchModel = ref({}); //搜索模型对象 table = {} as any; //表格对象 searchFields = []; //搜索字段集合 tableConf = {} as any; //表格配置 update = (opt) => { if (opt) { Object.keys(opt).map((key) => { this[key] = opt[key]; }); } }; /** * 初始化搜索模型对象 */ initSearchModel = () => { let self = this; let props = this.searchFields.map((i: any) => i.prop); props.map((prop: string) => { self.searchModel.value[prop] = ""; }); }; /** * 初始化搜索对象 */ initSearch = () => { let self = this; /** * 生成配置项(select、cascader需要) */ let genOpt = (formItem, fetchOptions) => { let genFuncMap = [ { component: 'dsj-select', classFunc: DSJSelect }, { component: 'dsj-cascader', classFunc: DSJCascader } ]; let find = genFuncMap.find(i => i.component == formItem.component); let classFunc = find ? find.classFunc : DSJSelect; formItem.opt = new classFunc({ fetchOptions }) } let formItemArray = this.searchFields.map(field => { let {fetchOptions, ...formItem} = field; if (fetchOptions) { genOpt(formItem, fetchOptions); } return formItem; }) let search = new DSJSearch({ formOption: new DSJForm({ inline: true, formItemArray, }), events: [ new DSJComponent({ component: "dsj-button", opt: new DSJButton({ label: "查询", type: "primary", click: () => { self.table.assignData({}); }, }), }), new DSJComponent({ component: "dsj-button", opt: new DSJButton({ label: "重置", type: "primary", click: () => { self.initSearchModel(); self.table?.assignData(); }, }), }), ], }); self.search = search; }; /** * 初始化表格对象 */ initTable = () => { } constructor(opt) { if (!opt) opt = {}; this.update(opt); this.initSearchModel(); this.initSearch(); this.initTable(); } }