//指定数组,根据指定条件筛选,返回符合条件的数组 function h_query(datalist, filterobj) { let result = []; result = datalist.filter(item => { let bo = true; for(var k in filterobj) { let k_val = filterobj[k]; let bo_ = item[k].toLowerCase().indexOf(k_val.toLowerCase()) > -1; if (!bo_) { return false; } } return bo; }); return result; }; // function settableHeight(root_el, pagesize) { let tableHeight2_ = 0; let header_height = root_el.getElementsByClassName('el-table__header-wrapper')[0].offsetHeight; let row_height = root_el.getElementsByClassName('el-table__row')[0].offsetHeight || 40; let body_width = root_el.getElementsByClassName('el-table__body')[0].offsetWidth; let body_wrapper_width = root_el.getElementsByClassName('el-table__body-wrapper')[0].offsetWidth; tableHeight2_ = header_height + (row_height * pagesize) + pagesize/4.5; if ((body_width - body_wrapper_width)>5){ tableHeight2_ += 20; } return tableHeight2_; }; function createCode (code) { var code_ = ""; //日期转为单号 var day = new Date(); var Year = 0; var Month = 0; var Day = 0; Year = day.getFullYear(); Month = day.getMonth() + 1; Day = day.getDate(); code_ += Year; if (Month >= 10) { code_ += Month; } else { code_ += "0" + Month; } if (Day >= 10) { code_ += Day; } else { code_ += "0" + Day; } var random = 0; do random = Math.floor(Math.random()*10000); while( random < 1000 ); if (code) { code_ = code + code_+ random; } return code_; } function createDate () { var aDate = new Date(); var date_ = dateFormat(aDate,"yyyy-MM-dd"); return date_; } function createDatetime () { var aDate = new Date(); var date_ = dateFormat(aDate,"yyyy-MM-dd hh:mm:ss"); return date_; } function createYearByYear () { var aDate = new Date(); var date_ = dateFormat(aDate,"yyyy") * 1; var month_ = dateFormat(aDate,"MM") * 1; var year = ""; if (month_ > 11 ) { year = date_ + 1 } else { year = date_ } return year; } function createYearByQuarter () { var aDate = new Date(); var date_ = dateFormat(aDate,"yyyy") * 1; var month_ = dateFormat(aDate,"MM") * 1; var year = ""; if (month_ > 9 ) { year = date_ + 1 } else { year = date_ } return year; } function createQuarter () { var aDate = new Date(); var date_ = dateFormat(aDate,"MM") * 1; var quarter = ""; if (date_ < 4) { quarter = 2 } else if (date_ < 7) { quarter = 3 } else if (date_ < 10) { quarter = 4 } else { quarter = 1 } return quarter; } function createMonth () { var aDate = new Date(); var date_ = dateFormat(aDate,"MM") * 1; var month = ""; if(date_ > 11) { month = 1; }else { month = date_ + 1 } return month; } /*********** default setting ************/ function getElementDefault(el) { var defaultObj = {}; // 通用设置 if (el.ztypename) { let ztypename = el.ztypename; if (currencyDefault[ztypename]) { let currencyDefaultObj = currencyDefault[ztypename]; for (var key in currencyDefaultObj) { defaultObj[key] = currencyDefaultObj[key]; } } } //自定义模板设置 if (el.zdefault) { let zdefault = el.zdefault; if (ElementDefault[zdefault]) { let ElementDefaultObj = ElementDefault[zdefault]; for (var key in ElementDefaultObj) { defaultObj[key] = ElementDefaultObj[key]; } } } return defaultObj; }; var ElTypes = {//可配置项 button: {//按键 ztypename: String, zdefault: String, small: String, type: String,//default, primary, success size: String, icon: String, nativeType: String, loading: Boolean, disabled: Boolean, plain: Boolean, autofocus: Boolean, round: Boolean, circle: Boolean, }, }; //组件通用设置 var currencyDefault = { ElButton: { size: "mini", type: "primary",//default }, ElInput: { size: "mini", }, ElCascader: { size: "mini", }, ElSelect: { size: "mini", }, ElDatePicker: { size: "mini", }, }; //自定义模板设置 var ElementDefault = { buttonmould_refresh: { type: "success", icon: "el-icon-refresh" }, buttonmould1: { size: "mini", type: "success", }, buttonmould2: { size: "small", type: "success", }, buttonmould3: { size: "medium", type: "success", } }; //组件的格式化 dateFormat = window.top.dateFormat; formatter_money = window.top.formatter_money; formatter_TF1 = window.top.formatter_TF1; formatter_TF2 = window.top.formatter_TF2; formatter_TF3 = window.top.formatter_TF3; formatter_TF4 = window.top.formatter_TF4; formatter_Target = window.top.formatter_Target; formatter_OpenState = window.top.formatter_OpenState; formatter_CommitState = window.top.formatter_CommitState; formatter_OrderState = window.top.formatter_OrderState; formatter_Grade = window.top.formatter_Grade; formatter_date = window.top.formatter_date; formatter_isreconciliation = window.top.formatter_isreconciliation; formatter_businessline = window.top.formatter_businessline; formatter_matchstatus = window.top.formatter_matchstatus; formatter_json = window.top.formatter_json; function formatter_Splicing(row, column, cellValue, index) { return row.sku = row.name + row.spec; }; /*********** h-select ************/ Vue.component("h-select", { template: [ '', '
', '', '{{itm.label}}', '', '', '
', '', '
'].join(""), props: { datalist: Array }, data() { return { visible: false, selected: null } }, methods: { fireitemselect(v) { this.selected = v; this.visible = false; this.$emit('itemselect', v); } } }); /*********** h-iconselect ************/ Vue.component("h-iconselect", {//图标点击下拉组件 template: ''+ '
'+ ''+ '{{itm.label}}'+ ''+ ''+ '
'+ ''+ '
', props: { datalist: Array, icon: String }, data() { return { visible: false, } }, methods: { fireitemselect(v) { this.visible = false; this.$emit('itemselect', v); }, } }); /*********** h-table ************/ Vue.component("h-table", {//列表组件1 template: '
'+ // ':header-cell-style="{background:\'#FAFAFA\',color:\'black\',\'text-align\':\'center\'}"> '+ ' '+ ' '+ ' '+ /* ' '+ ' '+ */ ' '+ ' '+ ' '+ ' '+ '
'+ '
'+ ' '+ '
'+ '请添加数据 '+ '
'+ '
'+ '
'+ '
'+ ' '+ '
'+ '
', props: { tableAttr: { type: Object, default: function(){ return {}; } }, "tableloading": {//多选tableAttr type: Boolean, default: false }, "tableFields": Array,//字段 "tableData": Array,//数据 "selectTableData": {//选中的数据 type: Array, default: function(){ return []; } }, "url_img2": {//无数据的图片 type: String, default: "" }, "href": {//无数据的图片 type: String, default: "table1" }, "showSummary": {//是否在表尾显示合计行tableAttr type: Boolean, default: false }, "isSelection": {//多选tableAttr type: Boolean, default: false }, "isShowIndex": {//序号tableAttr type: Boolean, default: false }, "isWithinEditTableData": {//表内编辑 type: Boolean, default: false }, "isEditTableData": {//编辑/删除按键 type: Boolean, default: false }, "isHighlightRow": {//选中高亮tableAttr type: Boolean, default: false }, "isPagination": {//是否显示分页 type: Boolean, default: true }, "editTableButton": {//编辑界面行按键(编辑,删除) type: Object, default: function(){ return { edit: { isshow:true, txt:"编辑" }, del: { isshow:true, txt:"删除" }, save: { isshow:true, txt:"保存" }, } } }, tableHeight: { type: Number, default: 100 }, pagesize: { type: Number, default: 10 }, pagenum: { type: Number, default: 1 }, total: { type: Number, default: 0 }, }, data() { return { zpagesize: this.pagesize, zpagenum: this.pagenum, summaries: [] } }, computed: { isShowTable() { if (this.$refs.ref_notTableData) { this.setNotTableData(); } return this.tableData.length > 0 ? true : true; //false; }, doTableFields() { this.tableFields.map(e=>{ if (e.formatterjson) { e.formatter_f = function(a,b,c,d) { var json_ = e.formatterjson; return formatter_json(a,b,c,d, json_) } } else if (e.formatter) { if (e.formatter == "formatter_money") { e.formatter_f = function(a,b,c,d) {return formatter_money(a,b,c,d)} } else if (e.formatter == "formatter_TF1") { e.formatter_f = function(a,b,c,d) {return formatter_TF1(a,b,c,d)} } else if (e.formatter == "formatter_TF2") { e.formatter_f = function(a,b,c,d) {return formatter_TF2(a,b,c,d)} } else if (e.formatter == "formatter_TF3") { e.formatter_f = function(a,b,c,d) {return formatter_TF3(a,b,c,d)} } else if (e.formatter == "formatter_TF4") { e.formatter_f = function(a,b,c,d) {return formatter_TF4(a,b,c,d)} } else if (e.formatter == "formatter_Target") { e.formatter_f = function(a,b,c,d) {return formatter_Target(a,b,c,d)} } else if (e.formatter == "formatter_OpenState") { e.formatter_f = function(a,b,c,d) {return formatter_OpenState(a,b,c,d)} } else if(e.formatter == "formatter_CommitState") { e.formatter_f = function(a,b,c,d) {return formatter_CommitState(a,b,c,d)} } else if(e.formatter == "formatter_OrderState") { e.formatter_f = function(a,b,c,d) {return formatter_OrderState(a,b,c,d)} } else if(e.formatter == "formatter_Grade") { e.formatter_f = function(a,b,c,d) {return formatter_Grade(a,b,c,d)} } else if(e.formatter == "formatter_date") { e.formatter_f = function(a,b,c,d) {return formatter_date(a,b,c,d)} } else if(e.formatter == "formatter_Splicing") { e.formatter_f = function(a,b,c,d) {return formatter_Splicing(a,b,c,d)} } else if(e.formatter == "formatter_isreconciliation") { e.formatter_f = function(a,b,c,d) {return formatter_isreconciliation(a,b,c,d)} } else if(e.formatter == "formatter_businessline") { e.formatter_f = function(a,b,c,d) {return formatter_businessline(a,b,c,d)} } else if(e.formatter == "formatter_matchstatus") { e.formatter_f = function(a,b,c,d) {return formatter_matchstatus(a,b,c,d)} } } }) return this.tableFields; } }, mounted() { this.setNotTableData(); }, watch: { selectTableData(newVal, oldVal){ if (this.selectTableData && this.selectTableData.length) { this.toggleSelection(this.selectTableData); } else { this.toggleSelection(); } }, }, methods: { cellClass(obj) { let field = obj.column.property; let row_ = this.doTableFields.filter(item => { return item.field == field; }); let class_ = ""; //业务上的样式,如:可点击,存在上下限等 if(row_.length > 0 && row_[0].iscellclick) { class_ = "h_cellclick"; } if(row_.length > 0 && (row_[0].maxval || row_[0].minval)) { if (row_[0].formatter == "formatter_earlyWarning") { if (row_[0].earlyWarningField) { var field1 = row_[0].earlyWarningField[0]; var field2 = row_[0].earlyWarningField[1]; var d_ = 0; var date_field1 = null; var date_field2 = null; if (field1 == "znewdate") { date_field1 = Date.parse(new Date()); } else if(obj.row[field1]) { date_field1 = Date.parse(new Date(obj.row[field1])); } if (field2 == "znewdate") { date_field2 = Date.parse(new Date()); } else if(obj.row[field2]) { date_field2 = Date.parse(new Date(obj.row[field2])); } var d_ = parseInt((date_field1-date_field2)/ (1000 * 60 * 60 * 24)); obj.row[field] = d_; } //-----警告---minval----预警------maxval-----正常-- if (obj.row[field] * 1 > row_[0].maxval * 1) { //正常 class_ += " h_notoverflowval"; } else if(obj.row[field] * 1 < row_[0].minval * 1) { //警告 class_ += " h_overflowval"; } else { //预警 class_ += " h_earlywarning"; } } else if((row_[0].maxval && obj.row[field] * 1 > row_[0].maxval * 1) || (row_[0].minval && obj.row[field] * 1 < row_[0].minval * 1)) { class_ += " h_overflowval"; } else class_ += " h_notoverflowval"; } if(row_.length > 0 && row_[0].formatter == "formatter_TF2") { if(obj.row[field] == "T") { class_ += " h_stamp"; } } //如果存在自定义的class if(row_.length > 0 && row_[0].cssname) { class_ += " " + row_[0].cssname; } return class_; }, setNotTableData() { if (this.tableData.length == 0) { //this.$refs.ref_notTableData.style['height'] = this.tableHeight + "px"; //this.$refs.ref_notTableData.style['min-height'] = this.tableHeight + "px"; //this.$refs.ref_notTableData.style['padding-top'] = (this.tableHeight * 0.3)+"px"; this.$refs.ref_notTableData.style['width'] = "100%"; } else { this.$refs.ref_notTableData.style['height'] = "0px"; this.$refs.ref_notTableData.style['min-height'] = "0px"; this.$refs.ref_notTableData.style['padding-top'] = "0px"; this.$refs.ref_notTableData.style['width'] = "0px"; } }, setCurrentRow(row) { this.$refs.table1.setCurrentRow(row); }, rowClick(row, column, event) { let obj = { row: row, column: column, event: event } this.$emit('row-click', obj); }, headerCellStyle(obj) { var aa = obj; var style_ = { 'background':'#FAFAFA', 'color':'black', 'text-align':'center' } let field = obj.column.property; let row_ = this.doTableFields.filter(item => { return item.field == field; }); if (row_.length && row_[0].headercolor) { style_.background = row_[0].headercolor; } return style_; }, rowDblclick(row, column, event) { let obj = { row: row, column: column, event: event } this.$emit('row-dblclick', obj); }, cellClick(row, column, cell, event) { let obj = { row: row, column: column, cell: cell, event: event } this.$emit('cell-click', obj); }, handleSelectionChange(selection) { this.$emit('selection-change', selection); }, editDataRow(code, scope){ if (code == "edit") { this.$emit('edit-data', scope); } else if (code == "delete") { this.$emit('del-data', scope); } }, cellInputChange(scope) {//row, column, $index 和 store(table 内部的状态管理) let field = scope.column.property; this.$emit('cell-input-change', scope); }, cellSelectChange(scope) { let field = scope.column.property; this.$emit('cell-select-change', scope); }, cellButtonClick(scope) { let field = scope.column.property; this.$emit('cell-button-click', scope); }, showpopup(scope) { let field = scope.column.property; this.$emit('cell-show-popup', scope); }, getSummaries(param) { const { columns, data } = param; const sums = []; var sumfields = {}; var issumfields = false; this.tableFields.map(e=>{ if (e.istablesum) { sumfields[e.field] = e; issumfields = true; } }); if (issumfields) { columns.forEach((column, index) => { if (index === 0) { sums[index] = '汇总'; return; } if (sumfields[column.property]) { const values = data.map(item => Number(item[column.property])); if (!values.every(value => isNaN(value))) { sums[index] = values.reduce((prev, curr) => { const value = Number(curr); if (!isNaN(value)) { return prev + curr; } else { return prev; } }, 0); var field = sumfields[column.property]; if (field.formatter && field.formatter=="formatter_money") { sums[index] = formatter_money(null, null, sums[index]); } else { sums[index] += ''; } } else { sums[index] = ''; } } else sums[index] = ''; }); } return sums; }, visibleChange(isshow, obj) {//下拉展开事件 if (isshow) { this.$emit("visible-change", obj); } }, /* remoteMethod(query, obj) { if (query !== '') { this.loading_filterable = true; setTimeout(() => { this.loading_filterable = false; this.options = this.list.filter(item => { return item.label.toLowerCase() .indexOf(query.toLowerCase()) > -1; }); }, 200); } else { this.options = []; } }, */ toggleSelection(array) { var ref = this.href; //this.tableData; if (array) { array.forEach(id_ => { this.tableData.map(e=>{ if(id_ == e.id) { this.$refs[ref].toggleRowSelection(e,true); } }); }); } else { this.$refs[ref].clearSelection(); } }, operate_(row, column, cellValue, index) { if(cellValue === "create") { return "新增数据"; } else if(cellValue === "delete") { return "删除数据"; } else if(cellValue === "update") { return "修改数据"; } else return ""; }, status_(row, column, cellValue, index) { if (cellValue == "working"){ return "正在审批"; } else if(cellValue == "refuse") { return "待修改"; } else if(cellValue == "open") { return "申请成功"; } else if(cellValue == "close") { return "撤销申请"; } return ""; }, /* 每页条数变更事件 */ handleSizeChange(val) { this.zpagesize = val; let page = { pagesize: this.zpagesize, pagenum: this.zpagenum } this.$emit('get-data', page); }, /* 页码变更事件*/ handleCurrentChange(val) { this.zpagenum = val; let page = { pagesize: this.zpagesize, pagenum: this.zpagenum } this.$emit('get-data', page); }, } }); /*********** h-form ************/ Vue.component("h-form", {//表单组件1 /* template: '
'+ '
{{formAttr.title}}
'+ ' '+ ' '+ ' '+ ' '+ ' '+ '
'+ ' '+ ' '+ ''+ ''+ ''+ ''+ ' '+ //''+ ''+ ''+ '
'+ ' '+ ''+ '
{{formData[fieldObj.isstamp]}}
'+ '
'+ ' '+ ' '+ ' '+ ' '+ ' '+ '{{formData[fieldObj.field]}} '+ ' '+ ' '+ ' '+ ' '+ ' '+ ' '+ ' '+ ' '+ ''+ '{{formData[fieldObj.field]}}'+ //''+ ' '+ '
'+ '
'+ '
'+ '
'+ '
', */ template: '
'+ '
{{formAttr.title}}
'+ ' '+ ' '+ ' '+ ' '+ ' '+ '
'+ ' '+ ' '+ ''+ ''+ ''+ ' '+ ''+ ''+ ''+ ''+ ''+ ' '+ //''+ ''+ '
可用返利 :'+ '
'+ ''+ '
'+ ' '+ ''+ '
{{formDataFace[fieldObj.isstamp]}}
'+ '
'+ ' {{formDataFace[fieldObj.field]}}'+ //' '+ '
'+ ' '+ ''+ '
{{formDataFace[fieldObj.isstamp]}}
'+ '
'+ ' '+ ' '+ ' '+ ' '+ ' '+ '{{formDataData[fieldObj.field]}} '+ ' '+ ' '+ ' '+ ' '+ ' '+ ' '+ ' '+ ' '+ ''+ '{{formDataData[fieldObj.field]}}'+ //''+ ' '+ '
'+ '
'+ '
'+ '
'+ '
', props: { formAttr: Object, tableFields: Array, formData: Object, disabled: { type: Boolean, default: false }, width: { type: String, default: "100%" }, }, data() { return { isRefresh: true, tableFieldsFormat: [], fromFieldObj: {}, formFieldsObj: {}, record: null, formDataData: {}, formDataFace: {}, } }, computed: { tableFields2() { if(this.formAttr && this.tableFields.length > 0) { this.formLayout(); } } }, watch: { tableFields() { if(this.formAttr && this.tableFields.length > 0) { this.formLayout(); } }, formData() { if(this.formData) { this.formDataRecord(); } } }, mounted() { if(this.formAttr && this.tableFields.length > 0) { this.formLayout(); } }, methods: { formLayout() { //表单布局设置 let columnnumber_ = this.formAttr.columnnumber; let tableFieldsFormat_ = []; let rowObj_ = {}; let children_ = []; let i = 0; let field_i = 0; let tableFields_ = clone(this.tableFields); let formFieldsObj_ = {}; for (var r=0; r columnnumber_) {//如果合并列大于表单设置列数 field_.colspan = columnnumber_; } field_i += field_.colspan ? field_.colspan : 1;//如果有合并列数, 默认为1 if (field_i == columnnumber_) {//列数满一行 children_.push(field_); i = columnnumber_; } else {//不满一行, 看是否存在下一属性, //若有则看已有列数加下一合并列数是否超过设置列数,若超了则自动调整该属性的合并列,使下一属性换行。 //若没有下一属性,则调整该属性合并列 let nxt_r = r + 1; let field_nxt = {}; if(nxt_r < tableFields_.length) { for (var nxt_j = nxt_r; nxt_j < tableFields_.length; nxt_j++) { let field_nxtj = tableFields_[nxt_j]; if(field_nxtj.isshow!="T") { continue; } else { field_nxt = field_nxtj; break } } } if (field_nxt.field) { //let field_nxt = tableFields_[nxt_r]; if(field_nxt.colspan) { let field_i_nxt = field_i + field_nxt.colspan; if (field_i_nxt > columnnumber_) { field_.colspan = columnnumber_ - i; children_.push(field_); i = columnnumber_; } else { children_.push(field_); i++; } } else { children_.push(field_); i++; } } else { field_.colspan = columnnumber_ - i; children_.push(field_); i = columnnumber_; } } if (i == columnnumber_) {//列数满一行,保留该行属性,新建下一空行 rowObj_.children = children_; tableFieldsFormat_.push(rowObj_); rowObj_ = {}; children_ = []; i = 0; field_i = 0; } } this.tableFieldsFormat = tableFieldsFormat_; this.formDataRecord(); }, formDataRecord() { /* if (this.formAttr && this.formAttr.formatter && this.formData) { this.formAttr.formatter(this.formData, this.tableFields); } */ let me = this; if (this.formData) { this.record = new Record(me); this.record.setData(this.formData); this.formDataData = this.formData;//this.record.getData(); this.rebate_available = this.formData.rebate_available; this.formDataFace = this.record.getFace(); } }, cellFaceClick(fieldObj) { var fromFieldObj_ = clone(this.fromFieldObj); if (fromFieldObj_[fieldObj.field].isEdit){ return; } this.record.setEditData(this.formDataData); this.record.apply(); this.formDataFace = this.record.getFace(); for (var field in fromFieldObj_) { fromFieldObj_[field].isEdit = false; } if (!fieldObj.disabled && !this.disabled && !this.formAttr.disabled) { fromFieldObj_[fieldObj.field].isEdit = true; } this.fromFieldObj = fromFieldObj_; }, refresh() { this.isRefresh = false; this.isRefresh = true; }, showpopup(obj) {//弹窗弹出事件 let val = this.formDataData[obj.field]; let popupObj = { obj: obj, val: val }; this.$emit('show-popup', popupObj); }, setFormValByField(field, val) { this.formDataData[field] = val; this.isRefresh = false; this.isRefresh = true; }, setFormOptionsByField(fieldobj, result) { let tableFieldsFormat_ = this.tableFieldsFormat; tableFieldsFormat_.map(item => { item.children.map(item2 => { if (item2.field.toLowerCase().indexOf(fieldobj.field.toLowerCase()) > -1) { item2.options = result; } }); }); this.tableFieldsFormat = tableFieldsFormat_; }, visibleChange(isshow, obj) {//下拉展开事件 if (isshow) { //let val = this.formDataData[obj.field]; //let url = obj.dataurl; this.$emit("visible-change", obj); //根据url请求重新获取选择项 /* obj.options = [ {label: "选项1", value:"code1"}, {label: "选项2", value:"code2"}, {label: "选项3", value:"code3"}, {label: "选项4", value:"code4"} ]; */ /* let data = this.formData; let options = url.split("?"); let parendfield = options[1].split("="); let optionslist = dataRoot.database[options[0]]; let result = clone(optionslist); if (obj.selectparent) { let parentval = data[obj.selectparent]; result = optionslist.filter(item => { if (!parentval) { return false; } return item[parendfield[1]].toLowerCase().indexOf(parentval.toLowerCase()) > -1; }); } obj.options = result; */ /* var obj_ = { fieldobj: obj, data: this.formData } this.$emit('visible-change', obj_); */ //obj.options = } }, formchange(val, obj) { var obj_ = { fieldobj: obj, data: this.formData } this.$emit("form-change", obj_); }, ischeckboxchange(val, obj) { obj.disabled = !val; }, ischeckboxchangeToEdit(val, obj) { obj.disabled = !val; this.cellFaceClick(obj); }, selectChange(val, obj) { this.formDataData[obj.field] = val; let me = this; if (obj.selectchildren) { obj.selectchildren.map(e=>{ let tableFieldsFormat_ = me.tableFieldsFormat; tableFieldsFormat_.map(item => { item.children.map(item2 => { if (item2.field.toLowerCase().indexOf(e.toLowerCase()) > -1) { if(item2.ismultiple) { me.formDataData[e] = []; } else { me.formDataData[e] = ""; } } }); }); }); } var obj_ = { fieldobj: obj, data: this.formData } this.$emit("select-change", obj_); this.isRefresh = false; this.isRefresh = true; } } }); /*********** h-form-filter ************/ Vue.component("h-form-filter", {//表单组件2(查询) template: '
'+ ' '+ ' '+ ' '+ ' '+ ' '+ '
'+ '' + '' + '
'+ '
'+ '
', props: { formAttr: Object, tableFields: Array, formData: Object, disabled: { type: Boolean, default: false }, width: { type: String, default: "100%" } }, data() { return { isRefresh: true, tableFieldsFormat: [], } }, computed: { tableFields2() { if(this.formAttr && this.tableFields.length > 0) { this.formLayout(); } } }, watch: { tableFields() { if(this.formAttr && this.tableFields.length > 0) { this.formLayout(); } } }, mounted() { if(this.formAttr && this.tableFields.length > 0) { this.formLayout(); } }, methods: { formLayout() { //表单布局设置 let columnnumber_ = this.formAttr.columnnumber; let tableFieldsFormat_ = []; let rowObj_ = {}; let children_ = []; let i = 0; let field_i = 0; let tableFields_ = clone(this.tableFields); let button_ = {isshow: "T", field: "id"}; if(tableFields_) { tableFields_.push(button_); } for (var r=0; r columnnumber_) {//如果合并列大于表单设置列数 field_.colspan = columnnumber_; } field_i += field_.colspan ? field_.colspan : 1;//如果有合并列数, 默认为1 if (field_i == columnnumber_) {//列数满一行 children_.push(field_); i = columnnumber_; } else {//不满一行, 看是否存在下一属性, //若有则看已有列数加下一合并列数是否超过设置列数,若超了则自动调整该属性的合并列,使下一属性换行。 //若没有下一属性,则调整该属性合并列 let nxt_r = r + 1; let field_nxt = {}; if(nxt_r < tableFields_.length) { for (var nxt_j = nxt_r; nxt_j < tableFields_.length; nxt_j++) { let field_nxtj = tableFields_[nxt_j]; if(field_nxtj.isshow!="T") { continue; } else { field_nxt = field_nxtj; break } } } if (field_nxt.field) { //let field_nxt = tableFields_[nxt_r]; if(field_nxt.colspan) { let field_i_nxt = field_i + field_nxt.colspan; if (field_i_nxt > columnnumber_) { field_.colspan = columnnumber_ - i; children_.push(field_); i = columnnumber_; } else { children_.push(field_); i++; } } else { children_.push(field_); i++; } } else { field_.colspan = columnnumber_ - i; children_.push(field_); i = columnnumber_; } } if (i == columnnumber_) {//列数满一行,保留该行属性,新建下一空行 rowObj_.children = children_; tableFieldsFormat_.push(rowObj_); rowObj_ = {}; children_ = []; i = 0; field_i = 0; } } this.tableFieldsFormat = tableFieldsFormat_; }, h_onQuery() { this.$emit("on-query"); }, h_onInitQuery() { this.$emit("on-init-query"); }, h_onEditQuery() { this.$emit("on-edit-query"); }, refresh() { this.isRefresh = false; this.isRefresh = true; }, showpopup(obj) {//弹窗弹出事件 let val = this.formData[obj.field]; let popupObj = { obj: obj, val: val }; this.$emit('show-popup', popupObj); }, setFormValByField(field, val) { this.formData[field] = val; this.isRefresh = false; this.isRefresh = true; }, setFormOptionsByField(fieldobj, result) { let tableFieldsFormat_ = this.tableFieldsFormat; tableFieldsFormat_.map(item => { item.children.map(item2 => { if (item2.field.toLowerCase().indexOf(fieldobj.field.toLowerCase()) > -1) { item2.options = result; } }); }); this.tableFieldsFormat = tableFieldsFormat_; }, visibleChange(isshow, obj) {//下拉展开事件 if (isshow) { //let val = this.formData[obj.field]; //let url = obj.dataurl; this.$emit("visible-change", obj); //根据url请求重新获取选择项 /* obj.options = [ {label: "选项1", value:"code1"}, {label: "选项2", value:"code2"}, {label: "选项3", value:"code3"}, {label: "选项4", value:"code4"} ]; */ /* let data = this.formData; let options = url.split("?"); let parendfield = options[1].split("="); let optionslist = dataRoot.database[options[0]]; let result = clone(optionslist); if (obj.selectparent) { let parentval = data[obj.selectparent]; result = optionslist.filter(item => { if (!parentval) { return false; } return item[parendfield[1]].toLowerCase().indexOf(parentval.toLowerCase()) > -1; }); } obj.options = result; */ /* var obj_ = { fieldobj: obj, data: this.formData } this.$emit('visible-change', obj_); */ //obj.options = } }, formchange(val, obj) { var obj_ = { fieldobj: obj, data: this.formData } this.$emit("form-change", obj_); }, ischeckboxchange(val, obj) { obj.disabled = !val; }, selectChange(val, obj) { this.formData[obj.field] = val; let me = this; if (obj.selectchildren) { obj.selectchildren.map(e=>{ let tableFieldsFormat_ = me.tableFieldsFormat; tableFieldsFormat_.map(item => { item.children.map(item2 => { if (item2.field.toLowerCase().indexOf(e.toLowerCase()) > -1) { if(item2.ismultiple) { me.formData[e] = []; } else { me.formData[e] = ""; } } }); }); }); } var obj_ = { fieldobj: obj, data: this.formData } this.$emit("select-change", obj_); this.isRefresh = false; this.isRefresh = true; } } }); /* ********** */ Root = window.top.Root; RootRole = window.top.RootRole; dataRoot = window.top.dataRoot; dataRootFields = window.top.dataRootFields; Server = window.top.Server; //dataRoot_lxc = window.top.dataRoot_lxc; //dataRoot_wxy = window.top.dataRoot_wxy; function getSetting(pageName) { var roleCode = Root.role.code; var result = { page: {}, buttons: {} }; if (!setting) { return result; } var pageSetting = setting[pageName]; if (!pageSetting) { return result; } result.page = pageSetting.page; var btnOptions = pageSetting.buttons; var buttons = result.buttons; for (var i = 0; i < btnOptions.length; i++) { var option = btnOptions[i]; if (option.isVisible && !arrayContains(option.isVisible, roleCode)) { continue; } var button = buttons[option.code] = {}; button.disabled = !option.isActive || !arrayContains(option.isActive, roleCode); } return result; } function arrayContains(array, value) { if (!array || !value) { return false; } for (var i = 0; i < array.length; i++) { var bo_ = false; value.map(e=>{ if (e == array[i]) { bo_ = true return bo_; } }); return bo_; } return false; }