/***********************************************/ //vue 常用组件封装 //CREATE:zh 2018-11-16 /***********************************************/ jQuery.fn.onPositionChanged = function (trigger, millis) { if (millis == null) millis = 100; var o = $(this[0]); // our jquery object if (o.length < 1) return o; var lastPos = null; var lastOff = null; setInterval(function () { if (o == null || o.length < 1) return o; // abort if element is non existend eny more if (lastPos == null) lastPos = o.position(); if (lastOff == null) lastOff = o.offset(); var newPos = o.position(); var newOff = o.offset(); if (lastPos.top != newPos.top || lastPos.left != newPos.left) { $(this).trigger('onPositionChanged', { lastPos: lastPos, newPos: newPos }); if (typeof (trigger) == "function") trigger(lastPos, newPos); lastPos = o.position(); } if (lastOff.top != newOff.top || lastOff.left != newOff.left) { $(this).trigger('onOffsetChanged', { lastOff: lastOff, newOff: newOff }); if (typeof (trigger) == "function") trigger(lastOff, newOff); lastOff = o.offset(); } }, millis); return o; }; //动态高度 var wms = parent.wmsAdmin; var useAutoHeight = { data: function () { return { autoHeight: window.innerHeight } }, mounted: function () { var $this = this; $(window).on('resize', function () { $this.autoHeight = window.innerHeight; }).resize(); } }; //当前app var wmsApps = { data: function () { return { wmsApp: { jxx: false, ss: false, hc: false } } }, mounted: function () { var $this = this; ajaxManage({ url: "/Basic/Common/CurrentWmsApp", dataType: 'text', success: function (data) { switch (data) { case 'JXX': $this.wmsApp.jxx = true; break; case 'SS': $this.wmsApp.ss = true; break; case 'HC': $this.wmsApp.hc = true; break; } } }); } }; //控件是否分配过滤器 Vue.directive('need', { bind: function (el, binding, vnode) { if (!$_need(binding.value)) { el.parentNode.removeChild(el); } } }); var $_need = function (value) { var isExist = false; if (!isExist && wms.pageSetReadOnly.length > 0) if (wms.pageSetReadOnly.indexOf(value) > -1) isExist = true; return isExist; } Vue.prototype.$_need = $_need; //权限按钮过滤器 Vue.directive('has', { bind: function (el, binding, vnode) { if (!$_has(binding.value)) { el.parentNode.removeChild(el); } } }); var btnPermissions = []; var $_has = function (value) { var isExist = false; var menuId = GetUrlParam("menuid"); if (btnPermissions.length == 0) ajaxManage({ url: "/Power/GetPower?menuid=" + GetUrlParam("menuid"), success: function (data) { if (data) { if (data.isSupper == 1) isExist = true; else { if (data.listButtonCode) { btnPermissions = data.listButtonCode.map(function (n) { return $.trim(n); }); } } } } }); if (!isExist && btnPermissions.length > 0) if (btnPermissions.indexOf(value) > -1) isExist = true; return isExist; }; Vue.component('hh-table', { template: unescape(__hhtable__), props: ['data', 'coloptions', 'tbloptions', 'check', 'rowno', 'paging', 'where', 'url', 'height', 'pagingoption', 'id', 'single', 'dh', 'rowstyle', 'power', 'notfirstload', 'serialize'], mixins: [useAutoHeight], computed: { tableHeight: function () { return this.autoHeight - (this.dh || 0); } }, data: function () { return { datas: this.data || [], defaultPagingOptions: { pageSize: 10, pageIndex: 1, pageSizes: [10, 20, 30, 40], total: 0 }, ref: this.id || '_ref' + (new Date()).valueOf(), pagingOptions: this.paging ? $.extend(this.defaultPagingOptions, this.pagingoption) : this.defaultPagingOptions, param: this.where || {}, selections: [], showLoading: false, cols: this.coloptions || [] } }, methods: { currentSelect: function (selection, row) { if (this.single) { this.clearSelected(); var ref = this.ref; eval('this.$refs.' + ref + '.toggleRowSelection(row)'); this.selections = []; this.selections.push(row); } }, changeSelect: function (val) { this.selections = val; this.$emit('changeselect', val); }, clearData: function () { var data = [] this.showLoading = false; this.datas = data.rows;; //this.url = ''; }, loadData: function (_param) { var $this = this; $this.showLoading = true; if (_param != 'newPageIndex') { this.pagingOptions.pageIndex = 1; $this.param = _param || $this.param; } var param = $this.param; $this.pagingOptions = this.paging ? $.extend(this.defaultPagingOptions, this.pagingoption) : this.defaultPagingOptions; var pagingData = { pageIndex: $this.pagingOptions.pageIndex, pageSize: $this.pagingOptions.pageSize } if (!param) param = {}; if ($this.paging) param = $.extend(pagingData, param); var __data = param; if (this.serialize) __data = JSON.stringify(__data); ajaxManage({ url: $this.url, data: __data, async: true, traditional: true, success: function (data) { $this.showLoading = false; if (data) { $this.datas = []; if (data.Status == 1) { if ($this.paging) { $this.datas = data.Data.rows; $this.pagingOptions.total = data.Data.total; } else { $this.datas = data.Data; } $this.$emit('loaded'); } else { parent.wmsAdmin.error(data.Msg); } } else { parent.wmsAdmin.error("系统异常"); } } }); }, clearSelected: function () { var ref = this.ref; eval('this.$refs.' + ref + '.clearSelection()'); }, pageSizeChange: function (newPageSize) { this.pagingOptions.pageSize = newPageSize; this.loadData(); }, pageIndexChange: function (newPageIndex) { this.pagingOptions.pageIndex = newPageIndex; this.loadData('newPageIndex'); }, toggleRowSelection: function (row, selected) { var ref = this.ref; eval('this.$refs.' + ref + '.toggleRowSelection(row)'); }, clickRow: function (row, event, column) { var ref = this.ref; //是否单选 if (this.single) { this.clearSelected(); } eval('this.$refs.' + ref + '.toggleRowSelection(row)'); this.$emit('clickrow', row, event, column); }, dbClickRow: function (row, event) { this.$emit('dbclickrow', row, event); }, selectall: function () { if (this.single) this.clearSelected(); this.$emit('selectall'); }, loadPower: function (val) { var $this = this; if (val) { var currentOptions = Enumerable.From(wms.pageSetList).Where("x=>x.CN_S_POWER=='" + val + "'").OrderBy("o=>o.CN_N_ORDER").ToArray(); if (!currentOptions || currentOptions.length == 0) { wms.warning("未找到配置<" + val + ">的列"); return; } $this.cols = currentOptions.map(function (n) { return { f: n.CN_S_POWER_CODE, n: n.CN_S_POWER_NAME, w: n.CN_F_WIDTH <= 0 ? null : n.CN_F_WIDTH, align: n.CN_S_ALIGN }; }); } } }, mounted: function () { var $this = this; this.pagingOptions = this.paging ? $.extend(this.defaultPagingOptions, this.pagingoption) : this.defaultPagingOptions; if ($this.url && !$this.notfirstload) { $this.loadData($this.param); } this.loadPower($this.power); }, watch: { where: function (val) { this.param = val; }, url: function (val) { this.url = val; this.pagingOptions.pageIndex = 1; this.loadData(); }, single: function (val) { this.single = val; }, paging: function (val) { this.paging = val; }, height: function (val) { this.height = val; }, data: function (val) { this.datas = val; }, coloptions: function (val) { this.cols = val; }, power: function (val) { this.loadPower(val); } } }); Vue.component('hh-select-url', { props: ['url', 'multiple', 'valuefield', 'textfield', 'datafield', 'ajaxtype', 'postdata', 'iseval', 'width', 'disabled', 'value', 'defaultvalue', 'options', 'usedefault'], data: function () { return { defaultValue: { value: '', label: '全部' }, modelValue: this.value || '', isMultiple: this.multiple == "true" ? true : false, ajaxType: this.ajaxtype || "GET", selectWidth: this.width || 150, isDisabled: this.disabled || false, useDefaultValue: this.usedefault == false ? false : true } }, template: '' + '' + '' + '', methods: { inputChange: function ($event) { this.$emit('input', $event); }, changeValue: function ($event) { this.$emit('change', $event); } }, computed: { optionsData: function () { var $this = this; var _url = $this.url; var tempOptions = []; if ($this.options) return $this.options; $.ajax({ type: $this.ajaxType, url: _url, data: $this.postdata, dataType: "json", async: false, success: function (data) { if (data) { if ($this.iseval) { data = eval("(" + data + ")"); } var rows = data; if ($this.datafield) { rows = eval("rows." + $this.datafield); if (!rows.Success) { if (rows.Msg) { wms.error(rows.Msg); return; } } } if (!$this.multiple && $this.useDefaultValue) { if ($this.defaultvalue) { tempOptions.push($this.defaultvalue); } else { tempOptions.push($this.defaultValue); } } var successData = [""]; if (rows.length > 0) { successData = []; rows.forEach(function (n) { successData.push(eval("n." + $this.valuefield)); tempOptions.push({ value: eval("n." + $this.valuefield), label: eval("n." + $this.textfield) }); }); } $this.$emit('success', successData); //没有默认值,没有默认选项,默认选中第一条 //if (!$this.useDefaultValue && !$this.modelValue && tempOptions.length > 0) { // $this.modelValue = tempOptions[0].value; // //$this.value = tempOptions[0].value; // //$this.$refs._selectRef.value = tempOptions[0].value; //} } } }); return tempOptions; } }, watch: { disabled: function (val) { this.isDisabled = val; }, modelValue: function (val) { this.value = val; }, value: function (val) { this.modelValue = val; }, url: function (val) { this.url = val; } } });