273 lines
8.1 KiB
JavaScript
273 lines
8.1 KiB
JavaScript
import {toast} from 'nc-lightapp-front';
|
||
const EMPTY_FN = function () {
|
||
};
|
||
/**
|
||
* 对象合并 类似Object.assign();
|
||
* @returns 第一个参数对象
|
||
*/
|
||
const apply = function(){
|
||
if(!arguments){
|
||
throw new ReferenceError("该方法执行时至少传递一个参数对象!");
|
||
}
|
||
//参数的长度
|
||
let length = arguments.length;
|
||
//长度是1 直接返回
|
||
if(length == 1){
|
||
return arguments[0];
|
||
}
|
||
//源
|
||
let target = arguments[0];
|
||
//从第二个元素开始 到 最后一个组成sources
|
||
let sources = [...arguments].slice(1);
|
||
for(let i = 0;i<sources.length;i++){
|
||
//第i个参数
|
||
let param = sources[i];
|
||
Object.keys(param).forEach(key=>{
|
||
//param原型上有该对象或者属性
|
||
if(Object.prototype.hasOwnProperty.call(param,key)){
|
||
target[key] = param[key];
|
||
}
|
||
})
|
||
}
|
||
return target;
|
||
}
|
||
/**
|
||
* 加载单据模板
|
||
* props:
|
||
* cfg:{必输项
|
||
* pagecode: 必输项 参数模板的参数
|
||
* },
|
||
* callback(fn): 回调
|
||
*/
|
||
const loadTemplate = function (props, {pagecode,appcode} = cfg) {
|
||
return new Promise(resolve=>{
|
||
props.createUIDom(
|
||
{
|
||
pagecode,
|
||
appcode
|
||
},
|
||
(data) => {
|
||
resolve({...data});
|
||
}
|
||
);
|
||
})
|
||
};
|
||
|
||
|
||
/**
|
||
* 加载多语言
|
||
* @param {*} props 必输项
|
||
* @param {*} cfg:{
|
||
* moduleId: 必输项 【应用编码: 例如 38211902 @attention 这里是应用编码多语文件的名称也要以应用编码命名】
|
||
* domainName:必输项 【领域编码:例如 uapbd、fi、gl等等】
|
||
* }
|
||
*/
|
||
const loadLang = function (props, {moduleId,domainName} = cfg) {
|
||
return new Promise((resolve)=>{
|
||
//请求多语
|
||
props.MultiInit.getMultiLang(
|
||
{
|
||
moduleId,
|
||
domainName,
|
||
callback: (data, success, inlt) => {
|
||
if (!success){
|
||
toast({content: '加载语言包失败', color: 'warning'});
|
||
}
|
||
resolve({lang:data,inlt});
|
||
}
|
||
}
|
||
);
|
||
})
|
||
};
|
||
|
||
/**
|
||
* 加载参照 多个参照一块加载
|
||
* @param {*} urls
|
||
* 示例:[
|
||
* {
|
||
* url:'uapbd/refer/supplier/SupplierClassTreeRef/index',
|
||
* name:'uapbd/refer/supplier/SupplierClassTreeRef/index'
|
||
* },
|
||
* {
|
||
* url:'uapbd/refer/supplier/SupplierClassTreeRef/index',
|
||
* name:'uapbd/refer/supplier/SupplierClassTreeRef/index'
|
||
* }
|
||
* ]
|
||
* @returns
|
||
*/
|
||
const loadRefer = function (urls = []) {
|
||
if(!urls || urls.length == 0){
|
||
return Promise.resolve(true);
|
||
}
|
||
let result = {};
|
||
//构造
|
||
let loads = (urls.filter((refObj,index)=>{
|
||
let {url} = refObj;
|
||
let jsname = url.includes(".")?url.substring(0, url.length - 3):url;
|
||
if(!window[jsname]){
|
||
return refObj;
|
||
}
|
||
})||[]).map((refObj)=>{
|
||
return new Promise((resolve,reject)=>{
|
||
let {url,name} = refObj;
|
||
let jsname = url.includes(".")?url.substring(0, url.length - 3):url;
|
||
let script = document.createElement('script');
|
||
let suffix = url.includes(".")?'':'.js'
|
||
script.src = '../../../../' + url+suffix;
|
||
script.type = 'text/javascript';
|
||
script.onload = () => {
|
||
result[name] = window[jsname].default || EMPTY_FN;
|
||
resolve(result);
|
||
};
|
||
script.onerror = () => {
|
||
result[name] = undefined;
|
||
reject(result);
|
||
};
|
||
document.body.appendChild(script);
|
||
})
|
||
});
|
||
//Promise 请求全部参照
|
||
return Promise.all(loads);
|
||
|
||
}
|
||
/**
|
||
* 请求资源
|
||
* @param {*} config
|
||
* props, 当前应用对象的props
|
||
* pagecode, 页面编码
|
||
* appcode, 应用编码
|
||
* moduleId, 建议使用应用编码
|
||
* domainName, 领域编码
|
||
* referObjs = [], 参照请求路径集合
|
||
* callback = EMPTY_FN 回调
|
||
*/
|
||
const loadNCCResource = function (config) {
|
||
let {
|
||
props,
|
||
pagecode,
|
||
appcode,
|
||
moduleId,
|
||
domainName,
|
||
referObjs = [],
|
||
callback = EMPTY_FN
|
||
} = config;
|
||
//加载参照
|
||
loadRefer(referObjs)
|
||
.then(()=>{
|
||
return Promise.all([
|
||
//加载模板
|
||
loadTemplate(props,{pagecode,appcode}),
|
||
//加载多语
|
||
loadLang(props,{moduleId,domainName})
|
||
]);
|
||
}).then(res=>{
|
||
callback({...res[0],...res[1]});
|
||
})
|
||
};
|
||
|
||
const isArray = function(param){
|
||
return Object.prototype.toString.call(param).slice(8, -1) === 'Array';
|
||
};
|
||
|
||
const isString = function(param) {
|
||
return Object.prototype.toString.call(param).slice(8, -1) === 'String';
|
||
};
|
||
const isObject = function(param){
|
||
return Object.prototype.toString.call(param).slice(8, -1) === 'Object';
|
||
};
|
||
const transferDataWapper = function(datas, grandsonMap){
|
||
(isObject(datas)?[datas]:datas || []).forEach((data)=>{
|
||
let {head,body,bodys} = data;
|
||
head['bodys'] = apply({},(bodys || body || {}));
|
||
data['body'] = apply({},(bodys || body || {}));
|
||
data['bodys'] = apply({},(bodys || body || {}));
|
||
grandsonMap && (data['grandsonMap'] = apply({}, grandsonMap));
|
||
})
|
||
return datas;
|
||
};
|
||
|
||
const onTransferItemSelectedWrapper = function( func ){
|
||
const fetchDataUnWapper = function(datas){
|
||
([datas] || []).forEach((data)=>{
|
||
let {head,body,bodys} = data;
|
||
data['body'] = apply({},body || head['bodys'] || bodys);
|
||
data['bodys'] = apply({},body || head['bodys'] || bodys);
|
||
})
|
||
return datas;
|
||
};
|
||
return function(record, isComplete, curActiveIndex,status){
|
||
func(fetchDataUnWapper(record), isComplete, curActiveIndex,status);
|
||
};
|
||
};
|
||
const onTransferWrapper = function( {props,fetchList}){
|
||
let {ncTabs} = fetchList;
|
||
let {tabPanes} = ncTabs;
|
||
let tables = (tabPanes || []).map(tabPane=>{
|
||
let {transferTable,headIdName,bodyIdName} = tabPane;
|
||
let {headTableId,bodyTableId,billType} = transferTable;
|
||
return {headTableId,bodyTableId,billType,headPkField:headIdName,bodyPkField:bodyIdName};
|
||
});
|
||
let data = props.transferTable.getTransferTableSelectedValue();
|
||
let records = (tables || []).map(table=>{
|
||
let {headTableId,bodyTableId,billType,headPkField,bodyPkField} = table;
|
||
let transData = data[headTableId];
|
||
let records = (transData || []).map(record=>{
|
||
let pk = record[headPkField] ? record[headPkField].value : record.head[headTableId].rows[0].values[headPkField].value
|
||
let ts = record["ts"] ? record["ts"].value : record.head[headTableId].rows[0].values["ts"].value
|
||
let children = (record.body && bodyTableId && bodyTableId.length>0 && record.body[bodyTableId]) ? (record.body[bodyTableId].rows || []).map(row=>{
|
||
return {pk:row.values[bodyPkField].value,ts:row.values["ts"].value}
|
||
}):[];
|
||
return {pk,ts,children};
|
||
});
|
||
return {billType,records};
|
||
});
|
||
return records;
|
||
};
|
||
//float类型数求和
|
||
const FloatAdd = function(arg1,arg2){
|
||
var r1,r2,m,s1 = arg1.toString(),s2 = arg2.toString();
|
||
try{
|
||
r1=s1.split(".")[1].length;
|
||
}catch(e){
|
||
r1=0
|
||
}
|
||
try{
|
||
r2=s2.split(".")[1].length;
|
||
}catch(e){
|
||
r2=0
|
||
}
|
||
m=Math.pow(10,Math.max(r1,r2));
|
||
return (arg1*m+arg2*m)/m;
|
||
};
|
||
//float类型数乘积
|
||
const FloatMultiple = function(f1,f2){
|
||
var m=0,s1=f1.toString(),s2=f2.toString();
|
||
|
||
try{
|
||
m+=s1.split(".")[1].length;
|
||
}catch(e){
|
||
|
||
}
|
||
try{
|
||
m+=s2.split(".")[1].length;
|
||
}catch(e){
|
||
|
||
}
|
||
return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
|
||
};
|
||
export const Utils = {
|
||
loadNCCResource,
|
||
loadTemplate,
|
||
loadLang,
|
||
loadRefer,
|
||
apply,
|
||
transferDataWapper,
|
||
onTransferItemSelectedWrapper,
|
||
onTransferWrapper,
|
||
FloatAdd,
|
||
FloatMultiple
|
||
};
|
||
|
||
|
||
|