import {validatenull} from "@/util/validate";
|
import {findArray} from "@/util/util";
|
|
/**
|
* 按钮的基础服务
|
*/
|
|
/**
|
* 替换文本中的${xxx}
|
* @param text 文本
|
* @param dataStore 选择的数据
|
* @param sourceData 来源数据
|
* @returns 替换后的值,字符串
|
*/
|
export const replaceFreeMarker = (text,dataStore,sourceData) => {
|
//替换表达式
|
if (!sourceData) {
|
sourceData = {};
|
}
|
if (!dataStore) {
|
dataStore = [];
|
}
|
let replaceData = dataStore.length > 0 ? dataStore[0] : {};
|
if (text && text.indexOf("${") > -1 && text.indexOf("}")) {
|
//js只能使用${xxx}这种的方式
|
let reg = "root.${";
|
while (text.indexOf(reg) > -1) {
|
let temp = text.substring(0, text.indexOf(reg));
|
let field = text.substring(text.indexOf(reg) + reg.length, text.indexOf("}"));
|
let end = text.substring(text.indexOf("}") + 1);
|
field = replaceData[field] || sourceData[field] || '';
|
text = temp + field + end;
|
}
|
reg = "sourceData.${";
|
while (text.indexOf(reg) > -1) {
|
let temp = text.substring(0, text.indexOf(reg));
|
let field = text.substring(text.indexOf(reg) + reg.length, text.indexOf("}"));
|
let end = text.substring(text.indexOf("}") + 1);
|
field = replaceData[field] || sourceData[field] || '';
|
text = temp + field + end;
|
}
|
reg = "${";
|
while (text.indexOf(reg) > -1) {
|
let temp = text.substring(0, text.indexOf(reg));
|
let field = text.substring(text.indexOf(reg) + reg.length, text.indexOf("}"));
|
let end = text.substring(text.indexOf("}") + 1);
|
field = replaceData[field] || sourceData[field] || '';
|
text = temp + field + end;
|
}
|
}
|
return text;
|
};
|
|
/**
|
* 参数转换为小写
|
* @param paramsVOs 参数
|
* @returns 小写后的参数对象
|
*/
|
export const paramLow = (paramsVOs) => {
|
//
|
if (!paramsVOs) {
|
paramsVOs = {};
|
}
|
var params = {};
|
for (var key in paramsVOs) {
|
params[key.toLowerCase()] = paramsVOs[key];
|
}
|
return params;
|
};
|
/**
|
* 执行前置事件
|
* @param options 按钮的配置信息,前置事件里配置的参数会替换这个里的参数的信息
|
* @param buttonTarget 按钮js所在的对象
|
* @param callback 回调,如果存在前置事件,会在执行完成后执行回调,否则直接回调
|
* @param preEventName 前置事件名称,默认beforeevent
|
*/
|
export const callPreEvent = (options,buttonTarget,callback,preEventName) => {
|
const params = paramLow(options.paramVOS);
|
options.paramVOS = params;
|
let beforeEvent = params[preEventName || 'beforeevent'];
|
if(beforeEvent) {
|
let buttonParse = parseEventByUrl(beforeEvent,options,true);
|
buttonParse.options.callback = callback;
|
if(validatenull(buttonParse)){
|
buttonTarget[buttonParse.methodName](buttonParse);
|
}else{
|
layui.use(buttonParse.jsPath,function () {
|
layui[buttonParse.jsPath][buttonParse.methodName](options);
|
});
|
}
|
}else{
|
if(callback){
|
callback(options);
|
}
|
}
|
};
|
/**
|
* 执行后置时间
|
* @param options 按钮的配置信息,后置事件里配置的参数会替换这个里的参数的信息
|
* @param buttonTarget 按钮Js所在的对象
|
*/
|
export const callPostEvent = (options,buttonTarget,callback,postEventName)=>{
|
const params = paramLow(options.paramVOS);
|
options.paramVOS = params;
|
var afterEvent = params[postEventName || 'afterevent'];
|
if(afterEvent) {
|
var buttonParse = parseEventByUrl(afterEvent,options,false);
|
if(validatenull(buttonParse)){
|
buttonTarget[buttonParse.methodName](buttonParse);
|
}else{
|
layui.use(buttonParse.jsPath,function () {
|
layui[buttonParse.jsPath][buttonParse.methodName](options);
|
});
|
}
|
}else{
|
if(callback){
|
callback(options);
|
}
|
}
|
};
|
/**
|
* 使用url获取事件的信息
|
* @param url 路径,格式如jsPath#methodName?param=aaa¶m1=bbb
|
* @param options 按钮的配置信息,会自动覆盖相同属性的参数
|
* @param isBefore 是否为前置事件,否则为后置
|
* @returns {{jsPath: js的路径, options: 按钮的配置信息, methodName: (string)方法的名字}}
|
*/
|
export const parseEventByUrl = (url,options,isBefore) => {
|
//根据配置格式化事件
|
var jsPath = url;
|
var methodName = isBefore?"doBefore":"doAfter";
|
var params = {};
|
if (url.indexOf("?")) {
|
var temp = url.substring(0, url.indexOf("?"));
|
if (temp.indexOf("#") > -1) {
|
var array = temp.split("#");
|
if(array.length == 1){
|
jsPath = array[0];
|
}else{
|
jsPath = array[0];
|
methodName = array[1];
|
}
|
}else{
|
jsPath = temp;
|
}
|
var paramArray = url.substring(url.indexOf("?") + 1).split("&");
|
layui.each(paramArray, function (_index, _item) {
|
if (_item.indexOf("=") < 0) {
|
this.$message.error(isBefore?"前置事件":"后置事件" + "的参数配置错误,需要要xxx=yyy&zzz=a的方式");
|
return true;
|
}
|
params[_item.split("=")[0]] = _item.split("=")[1];
|
});
|
}else{
|
if (url.indexOf("#") > -1) {
|
var array = url.split("#");
|
if(array.length == 1){
|
jsPath = array[0];
|
}else{
|
jsPath = array[0];
|
methodName = array[1];
|
}
|
}else{
|
jsPath = url;
|
}
|
}
|
for (var key in params) {
|
options.paramVOS[key.toLowerCase()] = params[key];
|
}
|
return {
|
jsPath:jsPath,
|
methodName:methodName,
|
options:options
|
};
|
};
|