/* ********** */ Root = window.top.Root; RootRole = window.top.RootRole; dataRoot = window.top.dataRoot; dataRootFields = window.top.dataRootFields; Server = window.top.Server; Sortable = window.top.Sortable; newDictionary = window.top.newDictionary //显示大小基准 //分辨率基准 var screen_draft = [1920, 1080]; //var screen_draft = [1366, 768]; //可视范围基准 var wh_draft = [1366, 728]; //dataRoot_lxc = window.top.dataRoot_lxc; //dataRoot_wxy = window.top.dataRoot_wxy; var h_language = localStorage.getItem("userlanguage") || "zh"; /*********** default setting Element的默认设置 ************/ 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", }, ElInputNumber: { 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", } }; function getElementDefault(el) { var defaultObj = {}; if (typeof (el.ztypename) == 'undefined') { var aa = "" } if (el.ztypename == 'ElDatePicker') { var aa = "" } // 通用设置 if (typeof (el.ztypename) != 'undefined') { let ztypename = el.ztypename; if (currencyDefault[ztypename]) { let currencyDefaultObj = currencyDefault[ztypename]; for (var key in currencyDefaultObj) { el[key] = currencyDefaultObj[key]; } } } //自定义模板设置 if (typeof (el.zdefault) != 'undefined') { let zdefault = el.zdefault; if (ElementDefault[zdefault]) { let ElementDefaultObj = ElementDefault[zdefault]; for (var key in ElementDefaultObj) { el[key] = ElementDefaultObj[key]; } } } }; function getElementDefault222(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; }; //******************************************************** //组件的格式化 formatter_json = window.top.formatter_json; formatter_date = window.top.formatter_date; formatter_money = window.top.formatter_money; formatter_float = window.top.formatter_float; formatter_percent = window.top.formatter_percent; formatter_percent100 = window.top.formatter_percent100; formatter_password = window.top.formatter_password; formatter_split = window.top.formatter_split; formatter_prefixorunit = window.top.formatter_prefixorunit; formatter_earlyWarning = window.top.formatter_earlyWarning; dateFormat = window.top.dateFormat; function formatter_Splicing(row, column, cellValue, index) { return row.sku = row.name + row.spec; }; /*********** 文件上传-图片(未完成) ************/ // Vue.component("h-upload-img", { // 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-draggable-order**********/ Vue.component("h-draggable-order", {//拖拽调整顺序 template: ' '+ '
{{title}}
' + '
'+ '
'+ '
'+ '
'+ '

{{index + 1}}、

'+ '
'+ '
'+ //id="vuedraggable" '
'+ // v-if="!isdisabled" '
'+ ' '+ ' '+ '
{{item[labelfield]}}
'+ '
'+ '
'+ '
'+ ' '+ '
'+ ' '+ '
', props: { datalist: Array, selectdatalist: Array, title: { type: String, default: "字段拖拽" }, icon: { type: String, default: "el-icon-setting" }, identificationfield: { type: String, default: "id" }, labelfield: { type: String, default: "label" }, isselectfield: {//显示和隐藏的字段及对应值 type: Object, default: function(){ return { field: "is_h_select", show: true, hide: false }; } }, //是否可拖拽顺序,默认可拖拽true isdisabled: { type: Boolean, default: true }, //是否可设置是否选中,默认可调整true isselect: { type: Boolean, default: true }, }, data() { return { visible: false, data_list: [], new_datalist: [], select_datalist: this.selectdatalist, select_datalist_old: this.selectdatalist, select_datalist_obj: {}, select_datalist_oldobj: {}, buttontype: "txt" } }, watch: { datalist(newVal, oldVal){ this.data_list = clone(this.datalist); }, }, created() { this.data_list = clone(this.datalist); }, mounted() { var a = ""; }, methods: { init_vuedraggable(id_) { var me = this; var vuedraggable_el = document.getElementById(id_).getElementsByClassName("h_draggable_order_item")[0]//getElementById('vuedraggable'); var ops = { animation: 1000, handle: ".item_vuedraggable", filter: ".not_vuedraggable", //拖动结束 onEnd: function (evt) { me.data_list; //获取拖动后的排序 var arr = sortable.toArray(); //alert(JSON.stringify(arr)); }, //排序结束事件 onUpdate: function (evt) { me.data_list; //获取拖动后的排序 var arr = sortable.toArray(); me.new_datalist = arr; //alert(JSON.stringify(arr)); }, }; //初始化 var sortable = Sortable.create(vuedraggable_el, ops); var arr = sortable.toArray(); this.new_datalist = arr; }, onshow() { var id_ = this.$el.childNodes[0].childNodes[0].attributes["aria-describedby"].nodeValue; this.init_vuedraggable(id_); var me = this; this.data_list = clone(this.datalist); this.select_datalist = clone(this.selectdatalist); this.select_datalist_old = clone(this.selectdatalist); this.select_datalist_obj = {}; this.select_datalist_oldobj = {}; if (this.select_datalist && this.select_datalist.length) { this.select_datalist.map(e=>{ var id_ = e[me.identificationfield]; if (id_) { me.select_datalist_obj[id_] = e; me.select_datalist_oldobj[id_] = e; } }) } if (this.isselect && this.data_list.length) { this.data_list.map(e=>{ var id_ = e[me.identificationfield]; if (me.select_datalist_oldobj[id_]) { e[me.isselectfield.field] = true; } else { e[me.isselectfield.field] = false; } }) } }, switchChange(e, item) { var aa = ""; this.$forceUpdate(); }, saveOrder() { var me = this; this.visible = false; var select_datalist_ = []; this.new_datalist; this.identificationfield; var data_listobj = {}; var newdatalist = []; this.data_list.map(e=>{ data_listobj[e[this.identificationfield]] = e; }); this.new_datalist.map(f=>{ var e = data_listobj[f]; if(e[me.isselectfield.field]) { e[me.isselectfield.field] = me.isselectfield.show if (e.children) { e.children.map(s => { s[me.isselectfield.field] = me.isselectfield.show }) } select_datalist_.push(e); } else { if (e.children) { e.children.map(s => { s[me.isselectfield.field] = me.isselectfield.hide }) } e[me.isselectfield.field] = me.isselectfield.hide } newdatalist.push(e); }) if (select_datalist_.length == 0) { Root.message({ type: 'warning', message: '至少选择一个显示字段' }) return; } var obj = { select_datalist: select_datalist_, data_list: newdatalist } this.$emit('save-order', obj); }, onStart(e){ }, } }); /*********** 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 *****************/ /* **********h-table-lie********* */ Vue.component("h-table-lie", {//列表单列 template: //存在格式化 ' '+ ' '+ //////////////////// ' '+ ' '+ ' '+ ' ', props: { tableAttr: { type: Object, default: function(){ return {}; } }, tableField: { type: Object, default: function(){ return {}; } }, tableFieldClick: {//字段对应的点击事件 type: Object, default: function(){ return { }; } }, tableFormAttr: { type: Object, default: function(){ return { columnnumber: 1, labelwidth: "100px", labelposition: "left",//"left",// right//top size: "mini", border: "0px solid #c6c6c600" }; } }, hideoverflowtooltip: {//超长时是否显示完整数据(默认不显示) type: Boolean, default: false }, isWithinEditTableData: {//表内编辑 type: Boolean, default: false }, //////对比 isOldContrast: {//是否对比差异isOldContrast//tableDataOld type: Boolean, default: false }, isAddContrast: {//是否显示新增差异isOldContrast//tableDataOld//isAddContrast type: Boolean, default: false }, tableDataOld: {//对比差异的历史数据 type: Object, default: function(){ return {}; } }, }, data() { return { } }, computed: { }, mounted() { this.tableField; }, watch: { }, methods: { setPercentageColor(val) { if (val < 30) { return '#909399'; } else if (val < 70) { return '#e6a23c'; } else { return '#67c23a'; } }, onkeyup(scope, tableField) { if (this.tableFieldClick[tableField.field] && this.tableFieldClick[tableField.field].input && this.tableFieldClick[tableField.field].input.onkeyup){ this.tableFieldClick[tableField.field].input.onkeyup(scope, tableField); } else if (tableField.inputkeys && scope.row && scope.row[tableField.field]) { if (tableField.inputkeys == "number") {//仅数字(正整数) // scope.row[tableField.field] = scope.row[tableField.field].replace(/[\u4E00-\u9FA5]/g,'');//中文替换 scope.row[tableField.field] = scope.row[tableField.field].replace(/\D/g,'') } else if (tableField.inputkeys == "decimal") {//仅数字+点(正小数) scope.row[tableField.field] = scope.row[tableField.field].replace(/[^\d.]/g,''); } else if (tableField.inputkeys == "minus") {//仅数字+负号(正负整数) //如果首位是“-”,则判断后续的值 if (scope.row[tableField.field].substring(0, 1) == "-") { var val_ = scope.row[tableField.field].substring(1); val_ = val_.replace(/\D/g,'') scope.row[tableField.field] = "-" + val_ } else { scope.row[tableField.field] = scope.row[tableField.field].replace(/\D/g,'') } } else if (tableField.inputkeys == "minusdecimal") {//仅数字+负号+点(正负小数) if (scope.row[tableField.field].substring(0, 1) == "-") { var val_ = scope.row[tableField.field].substring(1); val_ = val_.replace(/[^\d.]/g,'') scope.row[tableField.field] = "-" + val_ } else { scope.row[tableField.field] = scope.row[tableField.field].replace(/[^\d.]/g,''); } } } }, onkeydown(event, tableField) { let key = event.key; if (key == "Backspace" || key == "Delete") {//删除按键Backspace return true } if (this.tableFieldClick[tableField.field] && this.tableFieldClick[tableField.field].input && this.tableFieldClick[tableField.field].input.onkeydown){ this.tableFieldClick[tableField.field].input.onkeydown(event, tableField); } else if (tableField.inputkeys) { if (tableField.inputkeys == "number") {//仅数字(正整数) var box = /^[0-9]*$/;//数值的正则表达式 if (!box.test(key)) { event.returnValue = false return false } else { return true } } else if (tableField.inputkeys == "decimal") {//仅数字+点(正小数) var box = /^[0-9]*$/;//数值的正则表达式 if (key == ".") {//删除按键Backspace return true } if (!box.test(key)) { event.returnValue = false return false } else return true } else if (tableField.inputkeys == "minus") {//仅数字+负号(正负整数) var box = /^[0-9]*$/;//数值的正则表达式 if (key == "-") {//删除按键Backspace return true } if (!box.test(key)) { event.returnValue = false return false } else return true } else if (tableField.inputkeys == "minusdecimal") {//仅数字+负号+点(正负小数) var box = /^[0-9]*$/;//数值的正则表达式 if (key == "-" || key == ".") {//删除按键Backspace return true } if (!box.test(key)) { event.returnValue = false return false } else return true } } }, cellValClick(row, tableField, val, clicktype) { var column_ = { property: tableField.field } let obj = { row: row, column: column_, val: val, tableField: tableField } if (clicktype == "valclick") { var notclick_vals = this.tableFieldClick[tableField.field].val.notclick_val; var notclick_bindfields = this.tableFieldClick[tableField.field].val.notclick_bindfield; var notclick_vals_ = []; var bo_ = false; if (notclick_vals) { if (typeof(notclick_vals) == "string") { notclick_vals_ = notclick_vals.split(";"); } else if (Array.isArray(notclick_vals)) { notclick_vals_ = notclick_vals; } notclick_vals_.map(v=>{ if (val == v) { bo_ = true; } }); } if (notclick_bindfields && notclick_bindfields.length) { notclick_bindfields.map(b=>{ if (val == b.val) { bo_ = true; } }); } if (this.tableFieldClick[tableField.field] && (val || val == 0) && !bo_) { this.tableFieldClick[tableField.field].val.onclick(obj); } } else if (clicktype == "defaultvalclick") { if (this.tableFieldClick[tableField.field] && !val) { this.tableFieldClick[tableField.field].defaultval.onclick(obj); } } else if (clicktype == "suffixvalclick") { if (this.tableFieldClick[tableField.field] && val) { this.tableFieldClick[tableField.field].suffixval.onclick(obj); } } }, //悬浮入 cellValMouseenter(row, tableField, val) { if (tableField.iscellclick) { var column_ = { property: tableField.field } let obj = { row: row, column: column_, val: val, tableField: tableField } this.$emit('cell-val-mouseenter', obj); } }, //悬浮出 cellValMouseleave(row, tableField, val) { if (tableField.iscellclick) { var column_ = { property: tableField.field } let obj = { row: row, column: column_, val: val, tableField: tableField } this.$emit('cell-val-mouseleave', obj); } }, cellInputChange(scope, tableField) {//row, column, $index 和 store(table 内部的状态管理) let field = scope.column.property; // if (tableField.inputkeys == "number") {//仅数字(正整数) // // value.replace(/[\u4e00-\u9fa5]/ig,'') // scope.row[tableField.field] = scope.row[tableField.field].replace(/\D/g,'') // } // else if (tableField.inputkeys == "decimal") {//仅数字+点(正小数) // scope.row[tableField.field] = scope.row[tableField.field].replace(/[^\d.]/g,''); // } if (this.tableFieldClick[tableField.field] && this.tableFieldClick[tableField.field].input && this.tableFieldClick[tableField.field].input.onchange) { this.tableFieldClick[tableField.field].input.onchange(scope); } // this.$emit('cell-input-change', scope); }, cellSelectChange(val, scope, tableField) { let field = scope.column.property; var optionsObj = {}; var value_ = "value"; if (tableField.props && tableField.props.value) { value_ = tableField.props.value; } tableField.options.map(o=>{ optionsObj[o[value_]] = o; }) var selectoption = optionsObj[val]; scope.fieldobj = tableField; scope.selectoption = selectoption; scope.data = scope.row; if (this.tableFieldClick[tableField.field] && this.tableFieldClick[tableField.field].select && this.tableFieldClick[tableField.field].select.onchange) { this.tableFieldClick[tableField.field].select.onchange(scope); } // this.$emit('cell-select-change', scope); }, visibleChange(isopen, tableField, scope) {//下拉展开事件 let me = this if (isopen) { // tableFieldClick[tableField.field] && tableFieldClick[tableField.field].visible && tableFieldClick[tableField.field].visible.onchange if (this.tableFieldClick[tableField.field] && this.tableFieldClick[tableField.field].visible && this.tableFieldClick[tableField.field].visible.onchange) { this.tableFieldClick[tableField.field].visible.onchange(tableField, function(obj_) { if (!tableField.options || tableField.options.length == 0) { tableField.options = obj_.options; me.tableField = clone(tableField) } else { tableField.options = obj_.options; } }, scope); } // this.$emit("visible-change", obj); } }, cellButtonClick(scope, button_code, tableField) { // let field = scope.column.property; // var obj = scope; // if (button_) { // obj.column.property = button_; // } if (this.tableFieldClick[tableField.field] && this.tableFieldClick[tableField.field].buttons && this.tableFieldClick[tableField.field].buttons.onclick) { this.tableFieldClick[tableField.field].buttons.onclick(scope, button_code); } // this.$emit('cell-button-click', obj); }, showpopup(scope) { let field = scope.column.property; if (this.tableFieldClick[field] && this.tableFieldClick[field].popup && this.tableFieldClick[field].popup.onclick) { this.tableFieldClick[field].popup.onclick(scope); } //this.$emit('cell-show-popup', scope); }, querySearch(queryString, cb, tableField) { var obj = { queryString: queryString, cb: cb, tableField: tableField } var inputoptions = tableField.inputoptions; var results = queryString ? inputoptions.filter(this.createFilter(queryString)) : inputoptions; cb(results); this.$emit('cell-query-search', obj); }, createFilter(queryString) { return (restaurant) => { return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0); }; }, } }); /* *************h-table-header-a**************** */ Vue.component("h-table-header-a", {//列表组件2 template: ' '+ ' '+ ' '+ ' '+ ' ', props: { tableAttr: { type: Object, default: function(){ return {}; } }, tableField: { type: Object, default: function(){ return {}; } }, tableFieldClick: {//字段对应的点击事件 type: Object, default: function(){ return { }; } }, hideoverflowtooltip: {//超长时是否显示完整数据(默认不显示) type: Boolean, default: false }, isWithinEditTableData: {//表内编辑 type: Boolean, default: false }, ////对比 isOldContrast: {//是否对比差异isOldContrast//tableDataOld type: Boolean, default: false }, isAddContrast: {//是否显示新增差异isOldContrast//tableDataOld//isAddContrast type: Boolean, default: false }, tableDataOld: {//对比差异的历史数据 type: Object, default: function(){ return {}; } }, }, data() { return { } }, computed: { }, mounted() { }, watch: { }, methods: { // cellValClick(obj) { // this.$emit('cell-val-click', obj); // }, cellValMouseenter(obj) { this.$emit('cell-val-mouseenter', obj); }, cellValMouseleave(obj) { this.$emit('cell-val-mouseleave', obj); }, 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); }, // visibleChange(obj) {//下拉展开事件 // this.$emit("visible-change", obj); // }, 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); // }, querySearch(obj) { this.$emit('cell-query-search', obj); }, } }); /* *************h-table-header-b**************** */ Vue.component("h-table-header-b", {//列表组件2 template: ' '+ ' '+ ' '+ ' '+ ' ', props: { tableAttr: { type: Object, default: function(){ return {}; } }, tableField: { type: Object, default: function(){ return {}; } }, tableFieldClick: {//字段对应的点击事件 type: Object, default: function(){ return { }; } }, hideoverflowtooltip: {//超长时是否显示完整数据(默认不显示) type: Boolean, default: false }, isWithinEditTableData: {//表内编辑 type: Boolean, default: false }, ////对比 isOldContrast: {//是否对比差异isOldContrast//tableDataOld type: Boolean, default: false }, isAddContrast: {//是否显示新增差异isOldContrast//tableDataOld//isAddContrast type: Boolean, default: false }, tableDataOld: {//对比差异的历史数据 type: Object, default: function(){ return {}; } }, }, data() { return { } }, computed: { }, mounted() { }, watch: { }, methods: { // cellValClick(obj) { // this.$emit('cell-val-click', obj); // }, cellValMouseenter(obj) { this.$emit('cell-val-mouseenter', obj); }, cellValMouseleave(obj) { this.$emit('cell-val-mouseleave', obj); }, 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); }, // visibleChange(isopen, obj) {//下拉展开事件 // if (isopen) { // this.$emit("visible-change", obj); // } // }, 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); // }, querySearch(obj) { this.$emit('cell-query-search', obj); }, } }); /* *************h-table-new**************** */ Vue.component("h-table", {//列表组件2 template: '
'+ '
'+ '
'+ '
'+ '
{{tableAttr.title}}
'+ '
'+ //自定义按键 '
'+ ''+ '
'+ //添加数据 '
'+ ''+ ' '+ ''+ '
'+ //删除数据 '
'+ ''+ ' '+ ''+ '
'+ //数据排序 '
'+ ''+ ' '+ ''+ '
'+ //表头筛选设置 '
'+ ''+ ' '+ ''+ '
'+ //更多功能 '
'+ ''+ ' '+ ' '+ ''+ '
'+ '
'+ '
'+ '
'+ '{{tablelanguage_map[tablelanguage].totalcnt}} {{tableData.length}} {{tablelanguage_map[tablelanguage].row}} '+ '{{tablelanguage_map[tablelanguage].selected}} {{selection_cnt}} {{tablelanguage_map[tablelanguage].row}} '+ '{{tablelanguage_map[tablelanguage].clear}} '+ '注意:明细中的数据将在页面关闭后清空 '+ //购物车 '
'+ ''+ ''+ ' '+ ' '+ ' '+ ' '+ ' '+ ''+ '
'+ '清空明细 '+ '确定 '+ '
'+ ''+ ''+ ''+ ''+ ''+ '
'+ '
'+ '
'+ '
'+ //表字段配置 '
'+ //''+ ' '+ //''+ '
'+ '
'+ ' '+ ' '+ ' '+ ' '+ ' '+ // ':header-cell-style="{background:\'#FAFAFA\',color:\'black\',\'text-align\':\'center\'}"> '+ ' '+ ' '+ ' '+ ' '+ '
'+ '
'+ ' '+ '
'+ '{{emptytext}} '+ '
'+ '
'+ '
'+ '
'+ ' '+ '
'+ '
', props: { tableAttr: { type: Object, default: function(){ return { isborder: true, isdraggableorder222: true, toolbarobj222: { toolbuttons: [ {name: "审批", classname: "", type: ""}, {name: "审批111", classname: "", type: ""}, ], isadd: true, isdelete: true, isorder: true, isfilterfield: true, ismore: true, } }; } }, tableFieldClick: {//字段对应的点击事件 type: Object, default: function(){ return { }; } }, identificationfield: {//属性数据标识字段 type: String, default: "field" }, orderlabelfield: {//显示的字段 type: String, default: "name" }, orderisselect: {//显示和隐藏的字段及对应值 type: Object, default: function(){ return { field: "isshow", show: "T", hide: "F" }; } }, isdraggableorder: {//字段顺序及显示按键 type: Boolean, default: false }, istree: {//树形列表的箭头单元格 type: Boolean, default: false }, defaultExpandAll: {//是否默认全展开 type: Boolean, default: false }, ////对比 isOldContrast: {//是否对比差异isOldContrast//tableDataOld type: Boolean, default: false }, isAddContrast: {//是否显示新增差异isOldContrast//tableDataOld//isAddContrast type: Boolean, default: false }, tableDataOld: {//对比差异的历史数据 type: Object, default: function(){ return {}; } }, treeprops: {//树形数据配置 type: Object, default: function(){ return {children: 'children', hasChildren: 'haschildren'}; } }, lazy: {//多选tableAttr type: Boolean, default: false }, "layout": {//无数据的图片 type: String, default: "total, prev, pager, next"//"total, sizes, prev, pager, next, jumper" }, "tableFields": Array,//字段 "tableData": Array,//数据 "selectTableData": {//选中的数据 type: Array, default: function(){ return []; } }, "tableloading": {//多选tableAttr type: Boolean, default: false }, stripe: {//斑马条纹 type: Boolean, default: true }, "tablelanguage": {//表格语言 type: String, default: "zh" }, "url_img2": {//无数据的图片 type: String, // default: window.top.config.url_root + "img/zanwushuju.png" }, "href": {//无数据的图片 type: String, default: "table1" }, "rowkey": {//树形数据时需要设置 type: String, default: null }, "showSummary": {//是否在表尾显示合计行tableAttr type: Boolean, default: false }, isshowShoppingcart: {//是否在多选时显示购物车 type: Boolean, default: false }, selectedIdByFields: {//已选择的行数据(唯一标识字段,可以是多字段的组合) type: Array, default: function(){ return ["id"]; } }, // initSelectedList: {//已选择的行数据数组(初始已选数据) // type: Array, // default: function(){ // return [ // {id:"123"} // ]; // } // }, "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:"保存" }, } } }, "expands": Array,//展开的节点 emptytext: {//空数据显示内容 type: String, default: "无数据" }, tableHeight: { type: Number, default: null }, pagesize: { type: Number, default: 10 }, pagenum: { type: Number, default: 1 }, total: { type: Number, default: 0 }, }, data() { return { zpagesize: this.pagesize, zpagenum: this.pagenum, istableloading: true, istablehover: false, summaries: [], z_old_tableData: [], tableFields_obj: {}, selection_cnt: 0, show_maxcnt: 99, popover_shoppingcart: false, selectedList: this.selectTableData, selectedMap: {},//已选择的行数据对象(初始已选数据根据唯一字段转换的对象) doTableFieldObjs: {}, tablelanguage_map: { zh: { totalcnt: "总共", selected: "已选择", row: "条", clear: "清空选择", operation: "操作", no_: "序号", empty: "无数据" }, en: { totalcnt: "Total", selected: "Selected", row: "Row", clear: "Clear", operation: "operation", no_: "No.", empty: "empty" } }, doFieldsObj: {}, showTableFields: [], selectHandle: function(row, rowIndex) {//多选时的复选框禁止选择事件 if (row.h_classname == "z_notrowclick") { return false } else { return true } }, } }, mounted() { this.tablelanguage_map.zh.empty = this.emptytext; this.istableloading = true; this.setNotTableData(); if (this.selectedList.length) { //初始已选数据根据唯一字段转换的对象 this.selectedList.map(r=>{ var e_id_val = ""; this.selectedIdByFields.map(id_field=>{ e_id_val += r[id_field]; }) this.selectedMap[e_id_val] = r; }) } }, computed: { isShowTable() { var me = this; this.tableFields.map(e=>{ me.tableFields_obj[e.field] = e; //国际化设置,目前仅支持中/英 if (h_language && h_language=="en" && e.labelenglish) { if (!e.labelchinese) { e.labelchinese = clone(e.name); } e.name = clone(e.labelenglish); } else { if (e.labelchinese) { e.name = clone(e.labelchinese); } } }); if (this.$refs.ref_notTableData) { this.setNotTableData(); } return (this.tableData && this.tableData.length > 0) ? true : true; //false; }, doTableFields() { var me = this; this.istableloading = true; me.showTableFields = []; var me_tableFields = clone(this.tableFields); me_tableFields.map(t=>{ if (t.inputtype && !t.type) { t.type = t.inputtype.toLowerCase(); } if (t.tagtype && typeof t.tagtype === 'string') { var tagtype = t.tagtype.replace(/\^/g, '\"'); t.tagtype = JSON.parse(tagtype); } if (t.isshow == "T") { me.showTableFields.push(t); } me.tableFieldAttr(t); }) var oldTableFields_ = clone(me_tableFields); if (me_tableFields.length > 0 ) { oldTableFields_= listTOtableGroup(me_tableFields, "table_formgroup_name", "formchildren"); } var tableFields_ = clone(oldTableFields_); var rowindex = 0; var index = 0; var doFieldsObj_ = {}; if(this.isEditTableData) { index = 0; } me.setFieldsObj(tableFields_,rowindex, index, doFieldsObj_, function(fieldsObj) { me.doFieldsObj = clone(fieldsObj); }); // return this.tableFields; return tableFields_; } }, watch: { isEditTableData() { var me = this; var ref = this.href; this.$nextTick(function() { me.$refs[ref].doLayout(); me.istableloading = false; }) }, selectTableData(newVal, oldVal){ if (this.selectTableData && this.selectTableData.length) { this.toggleSelection(this.selectTableData); } else { this.toggleSelection(); } }, tableData() { this.$nextTick(function() { this.tableData.map(r=>{ var e_id_val = ""; this.selectedIdByFields.map(id_field=>{ e_id_val += r[id_field]; }) if (this.selectedMap[e_id_val]) { var ref = this.href; this.$refs[ref].toggleRowSelection(r, true) } }) }) }, selectedList() { this.selectedMap = {}; if (this.selectedList.length) { //初始已选数据根据唯一字段转换的对象 this.selectedList.map(r=>{ var e_id_val = ""; this.selectedIdByFields.map(id_field=>{ e_id_val += r[id_field]; }) this.selectedMap[e_id_val] = r; }) } } }, methods: { //购物车事件 shoppingcartDataRow(code, scope) { var row = scope.row; if (code == "delete") { // 从购物车中移出 var e_id_val = ""; this.selectedIdByFields.map(id_field=>{ e_id_val += row[id_field]; }) // 如果购物车中有,则从购物车中删除 if (this.selectedMap[e_id_val]) { this.selectedList.remove(this.selectedMap[e_id_val]); delete this.selectedMap[e_id_val]; } // 取消当前表格中的对应数据的选中状态 this.tableData.map(r=>{ var e2_id_val = ""; this.selectedIdByFields.map(id_field=>{ e2_id_val += r[id_field]; }) if (e2_id_val == e_id_val) { var ref = this.href; this.$refs[ref].toggleRowSelection(r, false) } }) // this.$emit('shoppingcart-del-data', scope); } }, getShoppingcart() { return this.selectedList; }, //清空购物车 emptyShoppingcart() { // 取消当前表格中的对应数据的选中状态 this.tableData.map(r=>{ var e2_id_val = ""; this.selectedIdByFields.map(id_field=>{ e2_id_val += r[id_field]; }) if (this.selectedMap[e2_id_val]) {//如果在购物车中则取消选中 var ref = this.href; this.$refs[ref].toggleRowSelection(r, false) } }) //清空购物车 this.selectedList = []; this.popover_shoppingcart = false; }, saveShoppingcart(list) { this.popover_shoppingcart = false; this.$emit('save-shoppingcart', list); }, table_hover(ishover) { if (ishover) { this.istablehover = true; } else { this.istablehover = false; } }, saveOrder(v) { this.$emit('order-fields', v); }, isArray(r){ return Object.prototype.toString.call(r)== '[object Array]'; }, setFieldsObj(list, rowindex, index, doFieldsObj_, callback) { list.map(l=>{ if(l.isshow == "T"){ if (!doFieldsObj_[rowindex]) { doFieldsObj_[rowindex] = {}; } else { index++; } doFieldsObj_[rowindex][index] = l; if (l.children) { var rowindex_ = rowindex + 1; var index_ = 0; if(doFieldsObj_[rowindex_]){ index_ = Object.keys(doFieldsObj_[rowindex_]).length - 1; } this.doSetFieldsObj(l.children, rowindex_, index_, doFieldsObj_); } } }) callback(doFieldsObj_); }, doSetFieldsObj(list, rowindex, index, doFieldsObj_) { list.map(l=>{ if (!doFieldsObj_[rowindex]) { doFieldsObj_[rowindex] = {}; } else { index++; } doFieldsObj_[rowindex][index] = l; if (l.children) { var rowindex_ = rowindex + 1; var index_ = 0; this.doSetFieldsObj(l.children, rowindex_, index_, doFieldsObj_); } }) }, tableFieldAttr(t) { var me = this; if (t.children) { this.tableFieldAttr(t.children); } else { if(this.isArray(t)) { t.map(e=>{ me.tableFieldAttr(e); }) } else { this.doTableFieldAttr(t); } } }, doTableFieldAttr(e) { //国际化设置,目前仅支持中/英 if (h_language && h_language=="en" && e.labelenglish) { if (!e.labelchinese) { e.labelchinese = clone(e.name); } e.name = clone(e.labelenglish); } else { if (e.labelchinese) { e.name = clone(e.labelchinese); } } //设置下拉选项的(根据字典数据设置) if (e.type == "select" || e.type == "selectmultiple" || e.type == "cascader") { if (!e.props) { var props_ = {value: "code", label: "value"}; e.props = clone(props_); } if (e.optionsgroup) { //:options="fieldObj.options" :props="fieldObj.props" //根据optionsname获取公用的对应关系,从字典中获取,字典数据从数据库获取 var list_ = newDictionary.getList(e.optionsgroup); e.options = clone(list_); } else if(!e.options) { e.options = [] } } if (e.type == "radio" || e.type == "checkboxobj") { if (e.optionsgroup) { //:options="fieldObj.options" :props="fieldObj.props" ;//{value: "code", label: "value"}; //根据optionsname获取公用的对应关系,从字典中获取,字典数据从数据库获取 var list_ = newDictionary.getList(e.optionsgroup); e.options = clone(list_); } else if(!e.options) { e.options = [] } } if (e.formatter) { //formatpattern 格式设置(可以是小数位数。也可以是时间、日期的格式) if (e.formatter == "formatter_json") { var json_ = {}; if (e.formatterjson) { //说明是对应关系 json_ = e.formatterjson; } else if (e.formatpattern){ //根据formatpattern获取公用的对应关系,从字典中获取,字典数据从数据库获取 var map_ = newDictionary.getMap(e.formatpattern); json_ = e.formatterjson = clone(map_); } else if (!e.formatpattern && e.optionsgroup){ //根据optionsgroup下拉组名获取公用的对应关系,从字典中获取,字典数据从数据库获取 var map_ = newDictionary.getMap(e.optionsgroup); json_ = e.formatterjson = clone(map_); } e.formatter_f = function(a,b,c,d) {return formatter_json(a,b,c,d, json_)} } else if (e.formatter == "formatter_money") { var digit = e.formatpattern;//小数位数,默认2位 e.formatter_f = function(a,b,c,d) {return formatter_money(a,b,c,d, digit)} } else if(e.formatter == "formatter_date") { var format = e.formatpattern;//日期格式,默认"yyyy-MM-dd" e.formatter_f = function(a,b,c,d) {return formatter_date(a,b,c,d, format)} } else if(e.formatter == "formatter_float") { var digit = e.formatpattern;//小数位数,默认2位 e.formatter_f = function(a,b,c,d) {return formatter_float(a,b,c,d, digit)} } else if(e.formatter == "formatter_percent") { var digit = e.formatpattern;//小数位数,默认2位 e.formatter_f = function(a,b,c,d) {return formatter_percent(a,b,c,d, digit)} } else if(e.formatter == "formatter_percent100") { var digit = e.formatpattern;//小数位数,默认2位 e.formatter_f = function(a,b,c,d) {return formatter_percent100(a,b,c,d, digit)} } else if(e.formatter == "formatter_prefixorunit") { var prefix = e.prefix;//前缀 var unit = e.suffix;//后缀或单位 e.formatter_f = function(a,b,c,d) {return formatter_prefixorunit(a,b,c,d, prefix, unit)} } else if(e.formatter == "formatter_split") { var format = e.formatpattern;//拼接的字段格式 format = "#{name}-{name}%" e.formatter_f = function(a,b,c,d) {return formatter_split(a,b,c,d, format)} } else if(e.formatter == "formatter_password") { e.formatter_f = function(a,b,c,d) {return formatter_password(a,b,c,d)} } else if(e.formatter == "formatter_earlyWarning") { e.formatter_f = function(a,b,c,d) {return formatter_earlyWarning(a,b,c,d)} } } /* else if(e.field != "id") { e.formatter_f = function(row, column, cellValue, index) { if (typeof cellValue === 'number' && !isNaN(cellValue)) {//主要针对int 0 return cellValue.toString(); } else return cellValue } } */ if (e.field) { this.doTableFieldObjs[e.field] = e; } return e; }, tableRowClassName({row, rowIndex}) { if (row.h_classname) { return row.h_classname; } return ''; }, cellClass(obj) { // if(clone(this.tableData) == clone(this.z_old_tableData)) { // return // } // this.z_old_tableData = clone(this.tableData); let field = obj.column.property; let row_ = []; var row_field = this.doTableFieldObjs[field]; if (row_field) { row_.push(row_field); } /* let row_ = this.doTableFields.filter(item => { return item.field == field; }); */ let class_ = ""; //业务上的样式,如:可点击,存在上下限等 if(this.tableFieldClick[field] && this.tableFieldClick[field].val && this.tableFieldClick[field].val.onclick) { 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" || obj.row[field] == "S1" || obj.row[field] == "S2" || obj.row[field] == "S3") { class_ += " h_stamp"; } } if(row_.length > 0 && row_[0].isstamp) { if(obj.row[field]) { class_ += " h_stamp"; } } if(this.tableFieldClick[field] && this.tableFieldClick[field].val && this.tableFieldClick[field].val.onclick) { var notclick_vals = this.tableFieldClick[field].val.notclick_val; var notclick_bindfields = this.tableFieldClick[field].val.notclick_bindfield; // if (row_.length > 0 && row_[0].iscellclick && !row_[0].isclick) { if((!obj.row[field] || obj.row[field] == "") && obj.row[field] != 0 && (!this.tableFieldClick[field].defaultval || (this.tableFieldClick[field].defaultval && !this.tableFieldClick[field].defaultval.onclick))) { class_ += " h_notclick"; } if (notclick_vals) { var notclick_vals_ = []; if (typeof(notclick_vals) == "string") { notclick_vals_ = notclick_vals.split(";"); } else if (Array.isArray(notclick_vals)) { notclick_vals_ = notclick_vals; } var bo_ = false; var val_ = obj.row[field]; notclick_vals_.map(v=>{ if (val_ == v) { bo_ = true; } }); if (bo_) { class_ += " h_notclick"; } } //notclick_bindfield: [{field: "folw_id", val: null},{}] if (notclick_bindfields && notclick_bindfields.length) { var bo_ = false; notclick_bindfields.map(b=>{ var val_ = obj.row[b.field]; if (val_ == b.val) { bo_ = true; } }); if (bo_) { class_ += " h_notclick"; } } } //如果存在自定义的class if(row_.length > 0 && row_[0].cssname) { class_ += " " + row_[0].cssname; } if(this.tableFieldClick[field] && this.tableFieldClick[field].cssname) { this.tableFieldClick[field].cssname(obj.row, function(classname){ if (classname) { class_ += " " + classname; } }) } //如果存在差异则背景高亮isOldContrast//tableDataOld if(this.isOldContrast && !(this.isWithinEditTableData || obj.row.isWithinEdit)) { var row_n = obj.row; if (this.tableDataOld[row_n.id] && row_n.id) {//如果存在历史数据 var row_o = this.tableDataOld[row_n.id]; if (row_n[field] != row_o[field] && (row_n[field] || row_o[field])) { var f_o = null; var f_n = null; if (row_n[field]) { f_n = JSON.stringify(row_n[field]); } if (row_o[field]) { f_o = JSON.stringify(row_o[field]); } if(f_n != f_o) { class_ += "z_contrast_tablecall"; } } } else if (this.isAddContrast && !this.tableDataOld[row_n.id] && row_n.id) { // 显示新增数据差异 this.tableDataOld[row_n.id] = {}; class_ += "z_contrast_tablecall"; } } return class_; }, setNotTableData() { var me = this; if (!this.tableData || (this.tableData && 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.tableData.map(d=>{ me.tableFields.map(f=>{ me.notTableData(d, f); }) }); 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"; } var ref = this.href; this.$nextTick(function() { //me.$refs[ref].doLayout(); setTimeout(() => { if (me.$refs[ref]) { me.$refs[ref].doLayout(); } me.istableloading = false; }, 100); }) }, notTableData(d, f) { var me = this; if (f.children) { this.notTableData(d, f.children); } else { if(this.isArray(f)) { f.map(e=>{ me.notTableData(d, e); }) } else { this.doNotTableData(d, f); } } }, doNotTableData(d, f) { //isassignment: 是否默认值替换原值 ,如果有保存会被替换 if (!d[f.field] && f.defaultval && f.isassignment) { //defaultval_filter: 默认值的条件第一层数组的元素是or, 里面的数组元素是and //type: 是条件,如果没有则是等于val值时可替换, "isnull"为空时,"isnotnull" 不为空时 if (f.defaultval_filter) {//:[[{field: "", val: ""},{field: "", val: ""}], [{}]] var defaultval_filter_ = f.defaultval_filter; if (f.defaultval_filter instanceof String) { defaultval_filter_ = JSON.parse(f.defaultval_filter); } defaultval_filter_.map(m=>{ var bo_m = true; m.map(mf=>{ if (!mf.type) { if (d[mf.field] != mf.val) { bo_m = false } } else if (mf.type == "isnull") { if (d[mf.field]) { bo_m = false } } else if (mf.type == "isnotnull") { if (!d[mf.field]) { bo_m = false } } }); if (bo_m) { d[f.field] = f.defaultval } else { //单条设置不显示默认值的字段 if (!d.z_h_notdefaultval) { d.z_h_notdefaultval = {}; } d.z_h_notdefaultval[f.field] = true; } }) } else { d[f.field] = f.defaultval } } //return d; }, setCurrentRow(row) { this.$refs.table1.setCurrentRow(row); }, sortChange({column, prop, order}) { let obj = { column: column, prop: prop, order: order, field: this.tableFields_obj[prop] } this.$emit('orderby-change', obj); }, arraySpanMethod({ row, column, rowIndex, columnIndex }) { let obj = { row: row, column: column, rowIndex: rowIndex, columnIndex: columnIndex } var result = []; if (this.$listeners["span-method"]) { this.$emit('span-method', obj, function(r) { result = r; }); } else { return [1,1]; } return result; //(返回数组)return [1,2] 1行2列。columnIndex 是行号 //(返回对象)return {rowspan: 2, colspan: 1} 2行1列。columnIndex 是行号 }, checkClick(data, checked, indeterminate) { let obj = { data: data, checked: checked, indeterminate: indeterminate } this.$emit('check-click', obj); }, load(tree, treeNode, resolve) { /* let obj = { data: data, checked: checked, indeterminate: indeterminate } */ this.$emit('load-click', tree, treeNode, resolve); }, rowClick(row, column, event) { var is_click = true; if (event.currentTarget.classList) { event.currentTarget.classList.forEach((class_, index)=>{ if (class_ == "z_notrowclick") { is_click = false; return } }) } if (!is_click) { return } let obj = { row: row, column: column, event: event } this.$emit('row-click', obj); }, headerCellStyle(obj) { var aa = obj; var rowIndex = obj.rowIndex; var index = obj.columnIndex; var style_ = { /* 'background':'#FAFAFA', 'color':'black', */ 'text-align':'center' } let field = obj.column.property; let label = obj.column.label; if (obj.row && obj.row.length) { var f_ = obj.row[0]; if (!f_.property && f_.label == "序号" && index > 0) { index = index - 1; } } let row_ = {}; if (field == "phone") { var aa = ""; } if (field) { /* let row_field = this.doTableFields.filter(item => { return item.field == field; }); */ row_ = this.doTableFieldObjs[field]; } else { row_ = this.doFieldsObj[rowIndex][index]; } if (row_ && row_.headercolor) { //if (row_.length && row_[0].headercolor) { style_.background = row_.headercolor; } return style_; }, rowDblclick(row, column, event) { var is_click = true; if (event.currentTarget.classList) { event.currentTarget.classList.forEach((class_, index)=>{ if (class_ == "z_notrowclick") { is_click = false; return } }) } if (!is_click) { return } let obj = { row: row, column: column, event: event } this.$emit('row-dblclick', obj); }, cellClick(row, column, cell, event) { // if (this.tableFields_obj[column.property]) { // var tableField = this.tableFields_obj[column.property]; // if (tableField.iscellelclick) { // let obj = { // row: row, // column: column, // cell: cell, // event: event // } // this.$emit('cell-el-click', obj); // } // } // else { // let obj = { // row: row, // column: column, // cell: cell, // event: event // } // this.$emit('cell-el-click', obj); // } }, // cellValClick(obj) { // this.$emit('cell-click', obj); // }, cellValMouseenter(obj) { this.$emit('cell-val-mouseenter', obj); }, cellValMouseleave(obj) { this.$emit('cell-val-mouseleave', obj); }, // 全选复选框选择或取消事件 allSelectionChange(selection) { }, // 行复选框选择或取消事件 rowSelectionChange(selection, row) { let selected = selection.length && selection.indexOf(row) !== -1 if (!selected) { // 取消选中 var e_id_val = ""; this.selectedIdByFields.map(id_field=>{ e_id_val += row[id_field]; }) // 如果购物车中有,则从购物车中删除 if (this.selectedMap[e_id_val]) { this.selectedList.remove(this.selectedMap[e_id_val]); delete this.selectedMap[e_id_val]; } } }, handleSelectionChange(selection) { this.selection_cnt = selection.length; if (this.isshowShoppingcart) { // 有购物车功能 if (selection.length == 0) { // 全部取消选中 var removeselection_map_ = {}; // 根据当前表格中的数据进行购物车的删除 this.tableData.map(r=>{ var e_id_val = ""; this.selectedIdByFields.map(id_field=>{ e_id_val += r[id_field]; }) removeselection_map_[e_id_val] = r; }) for (var key in removeselection_map_) { var row_ = removeselection_map_[key]; if (this.selectedMap[key]) { this.selectedList.remove(this.selectedMap[key]); delete this.selectedMap[key]; } } } else { // 存在选中行 // 遍历选中行,并根据唯一字段组判断是否在购物车中,若没有则添加到购物车 var selection_map_ = {}; selection.map(r=>{ var e_id_val = ""; this.selectedIdByFields.map(id_field=>{ e_id_val += r[id_field]; }) selection_map_[e_id_val] = r; }) for (var key in selection_map_) { var row_ = selection_map_[key]; if (!this.selectedMap[key]) { this.selectedMap[key] = row_; this.selectedList.unshift(row_); } } } } this.$emit('selection-change', selection); }, hTableEmptySelect() { var ref = this.href; this.$refs[ref].clearSelection(); }, 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); }, querySearch(obj) { this.$emit('cell-query-search', obj); }, createFilter(queryString) { return (restaurant) => { return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0); }; }, // showpopup(scope) { // let field = scope.column.property; // this.$emit('cell-show-popup', scope); // }, tableFieldsList(t, fields_) { var me = this; if (t.children) { this.tableFieldsList(t.children, fields_); } else { if(this.isArray(t)) { t.map(e=>{ me.tableFieldsList(e, fields_); }) } else { fields_.push(t); } return fields_ } }, getSummaries(param) { var me = this; const { columns, data } = param; const sums = []; var sumfields = {}; var issumfields = false; var tableFields_ = []; this.tableFields.map(e=>{ tableFields_ = me.tableFieldsList(e, tableFields_); }); 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(obj) {//下拉展开事件 // this.$emit("visible-change", obj); // }, 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 ""; }, toggleSelection(array, iscancelselect) { var ref = this.href; if (iscancelselect && array) { array.forEach(id_ => { this.tableData.map(e=>{ if(id_ == e.id) { this.$refs[ref].toggleRowSelection(e,false); } }); }); } else if (array) { array.forEach(id_ => { this.tableData.map(e=>{ if(id_ == e.id) { this.$refs[ref].toggleRowSelection(e,true); } }); }); } else { this.$refs[ref].clearSelection(); } }, toggleSelectionByRow(row) { var ref = this.href; this.$refs[ref].toggleRowSelection(row,true); }, /* 每页条数变更事件 */ 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-cell-input", {//输入框 template: ' '+ //只读 ' '+ //可编辑 ' '+ ' ', props: { formAttr: Object, formDataData: {//表单全部数据 type: Object, default: function(){ return {}; } }, fromFieldObj: { type: Object, default: function(){ return {}; } }, fieldObj: {//表单字段数据 type: Object, default: function(){ return {}; } }, tableFieldClick: {//字段对应的点击事件 type: Object, default: function(){ return { }; } }, formFieldData: null,//字段值 dataIndex: {//字段值的下标 type: Number, default: -1 }, dataId: {//字段值的id type: String, default: "" }, disabled: { type: Boolean, default: false }, }, data() { return { cellData: "" } }, computed: { }, watch: { }, mounted() { this.cellData = this.formFieldData; }, methods: { onkeyup(val, fieldObj) { if (this.tableFieldClick[fieldObj.field] && this.tableFieldClick[fieldObj.field].input && this.tableFieldClick[fieldObj.field].input.onkeyup){ this.tableFieldClick[fieldObj.field].input.onkeyup(val, fieldObj); } else if (fieldObj.inputkeys && val) { if (fieldObj.inputkeys == "number") {//仅数字(正整数) val = val.replace(/\D/g,'') } else if (fieldObj.inputkeys == "decimal") {//仅数字+点(正小数) val = val.replace(/[^\d.]/g,''); } else if (fieldObj.inputkeys == "minus") {//仅数字+负号(正负整数) //如果首位是“-”,则判断后续的值 if (val.substring(0, 1) == "-") { var val_ = val.substring(1); val_ = val_.replace(/\D/g,'') val = "-" + val_ } else { val = val.replace(/\D/g,'') } } else if (fieldObj.inputkeys == "minusdecimal") {//仅数字+负号+点(正负小数) if (val.substring(0, 1) == "-") { var val_ = val.substring(1); val_ = val_.replace(/[^\d.]/g,'') val = "-" + val_ } else { val = val.replace(/[^\d.]/g,''); } } } }, onkeydown(event, fieldObj) { let key = event.key; if (key == "Backspace" || key == "Delete") {//删除按键Backspace return true } if (this.tableFieldClick[fieldObj.field] && this.tableFieldClick[fieldObj.field].input && this.tableFieldClick[fieldObj.field].input.onkeydown){ this.tableFieldClick[fieldObj.field].input.onkeydown(event, fieldObj); } else if (fieldObj.inputkeys) { if (fieldObj.inputkeys == "number") {//仅数字(正整数) var box = /^[0-9]*$/;//数值的正则表达式 if (!box.test(key)) { event.returnValue = false return false } else return true } else if (fieldObj.inputkeys == "decimal") {//仅数字+点(正小数) var box = /^[0-9]*$/;//数值的正则表达式 if (key == ".") {//删除按键Backspace return true } if (!box.test(key)) { event.returnValue = false return false } else return true } else if (fieldObj.inputkeys == "minus") {//仅数字+负号(正负整数) var box = /^[0-9]*$/;//数值的正则表达式 if (key == "-") {//删除按键Backspace return true } if (!box.test(key)) { event.returnValue = false return false } else return true } else if (fieldObj.inputkeys == "minusdecimal") {//仅数字+负号+点(正负小数) var box = /^[0-9]*$/;//数值的正则表达式 if (key == "-" || key == ".") {//删除按键Backspace return true } if (!box.test(key)) { event.returnValue = false return false } else return true } } }, formchange(val, obj) { if (typeof(val) == "string") { //去除两端的空格 val = val.replace(/(^\s*)|(\s*$)/g, ""); //去除中间的回车换行 //this.formData[obj.field] = val = val.replace(/[\r\n]/g,""); } if (this.dataIndex > -1) { this.formDataData[obj.field][this.dataIndex] = val; } else { this.formDataData[obj.field] = val; } var obj_ = { fieldobj: obj, data: this.formDataData } if (this.tableFieldClick[obj.field] && this.tableFieldClick[obj.field].input && this.tableFieldClick[obj.field].input.onchange) { this.tableFieldClick[obj.field].input.onchange(obj_); } // this.$emit("form-change", obj_); }, remoteMethod(query, fieldObj) { var fromFieldsObj_ = clone(this.fromFieldObj); var fromFieldObj_ = fromFieldsObj_[fieldObj.field]; var obj = { query: query, fieldObj: fieldObj } if (query !== '') { this.$emit('remote-method', obj); } else { fieldObj.options = []; } }, } }); Vue.component("h-cell-select", {//下拉选择器的单元格 template://clearable ' '+ //只读 // '{{typeof (hdisabled) != \'undefined\'}}{{hdisabled}}'+ // '{{typeof (disabled) != \'undefined\'}}{{disabled}}'+ // '