/***********************************************/
|
//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: '<el-select ref="_selectRef" v-bind:value="modelValue" v-bind:style="\'width:\'+selectWidth+\'px\'" placeholder="请选择" size="mini" @input="inputChange" v-bind:clearable="false" v-on:change="changeValue" v-bind:multiple="isMultiple" v-bind:collapse-tags="isMultiple" v-bind:disabled="isDisabled">'
|
+ '<el-option v-for="item in optionsData"'
|
+ 'v-bind:key="item.value"'
|
+ 'v-bind:label="item.label"'
|
+ 'v-bind:value="item.value">'
|
+ '</el-option>'
|
+ '</el-select>',
|
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;
|
}
|
}
|
});
|