@lambo-design/shared 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/config.js +25 -0
- package/config/env.js +4 -0
- package/config/index.js +3 -0
- package/config/themes/default/default.css +241 -0
- package/config/themes/default/default.less +319 -0
- package/config/themes/default/var.less +314 -0
- package/config/themes/gold/default.css +241 -0
- package/config/themes/gold/default.less +319 -0
- package/config/themes/gold/var.less +314 -0
- package/config/themes/index.js +10 -0
- package/config/themes/lime/default.css +241 -0
- package/config/themes/lime/default.less +319 -0
- package/config/themes/lime/var.less +314 -0
- package/config/themes/theme-default.js +252 -0
- package/config/themes/theme-gold.js +252 -0
- package/config/themes/theme-lime.js +252 -0
- package/index.js +3 -0
- package/package.json +20 -0
- package/styles/variables.less +21 -0
- package/utils/ajax/cacheconf.js +19 -0
- package/utils/ajax/index.js +12 -0
- package/utils/ajax/interceptors.js +90 -0
- package/utils/assist.js +79 -0
- package/utils/bus.js +3 -0
- package/utils/crypto/index.js +38 -0
- package/utils/crypto/md5.js +152 -0
- package/utils/crypto/sm3.js +235 -0
- package/utils/date.js +352 -0
- package/utils/dom.js +38 -0
- package/utils/excel.js +523 -0
- package/utils/index.js +5 -0
- package/utils/lodop.js +160 -0
- package/utils/modelerUtil.js +224 -0
- package/utils/number.js +123 -0
- package/utils/platform.js +519 -0
- package/utils/theme.js +43 -0
- package/utils/zoomScroll.js +9 -0
- package/vendor/xlsx-0.19.1.tgz +0 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import config from "@/config/config"
|
|
2
|
+
import ajax from '@/utils/ajax'
|
|
3
|
+
|
|
4
|
+
export const tools = {
|
|
5
|
+
|
|
6
|
+
registerFileDrop(container, callback) {
|
|
7
|
+
container.get(0).addEventListener('dragover', tools.handleDragOver, false);
|
|
8
|
+
container.get(0).addEventListener('drop', tools.handleFileSelect, false);
|
|
9
|
+
},
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* 通过xml创建bpmn
|
|
13
|
+
* @param {string} xml 创建bpms xml
|
|
14
|
+
* @param {object} bpmnModeler bpmn对象
|
|
15
|
+
* @param {object} container 容器对象
|
|
16
|
+
*/
|
|
17
|
+
async createDiagram(xml, bpmnModeler, container) {
|
|
18
|
+
try {
|
|
19
|
+
await bpmnModeler.importXML(xml);
|
|
20
|
+
} catch (err) {
|
|
21
|
+
console.error(err);
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
/**
|
|
25
|
+
* 通过Json设置颜色
|
|
26
|
+
* @param {object} json json 字符串
|
|
27
|
+
*/
|
|
28
|
+
setColor(json, bpmnModeler) {
|
|
29
|
+
var modeling = bpmnModeler.get('modeling');
|
|
30
|
+
var elementRegistry = bpmnModeler.get('elementRegistry')
|
|
31
|
+
var elementToColor = elementRegistry.get(json.name);
|
|
32
|
+
if (elementToColor) {
|
|
33
|
+
modeling.setColor([elementToColor], {
|
|
34
|
+
stroke: json.stroke,
|
|
35
|
+
fill: json.fill
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
async createNewDiagram(bpmnModeler, processDefinitionId) {
|
|
42
|
+
const {$Message} = this;
|
|
43
|
+
let bpmnXmlStr = '<?xml version="1.0" encoding="UTF-8"?>\n' +
|
|
44
|
+
'<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:normal="http://flowable.org/bpmn/normal" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd" id="diagram" targetNamespace="http://bpmn.io/schema/bpmn">\n' +
|
|
45
|
+
' <bpmn2:process id="Process_1" isExecutable="true">\n' +
|
|
46
|
+
' <bpmn2:startEvent id="StartEvent_1"/>\n' +
|
|
47
|
+
' </bpmn2:process>\n' +
|
|
48
|
+
' <bpmndi:BPMNDiagram id="BPMNDiagram_1">\n' +
|
|
49
|
+
' <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">\n' +
|
|
50
|
+
' <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">\n' +
|
|
51
|
+
' <dc:Bounds height="36.0" width="36.0" x="412.0" y="240.0"/>\n' +
|
|
52
|
+
' </bpmndi:BPMNShape>\n' +
|
|
53
|
+
' </bpmndi:BPMNPlane>\n' +
|
|
54
|
+
' </bpmndi:BPMNDiagram>\n' +
|
|
55
|
+
'</bpmn2:definitions>'
|
|
56
|
+
if (processDefinitionId) {
|
|
57
|
+
await ajax.get(config.upmsServerContext + '/manage/workflow/getProcessXml?processDefinitionId=' + processDefinitionId).then(function ({data}) {
|
|
58
|
+
if (data.code === 1) {
|
|
59
|
+
bpmnXmlStr = data.data;
|
|
60
|
+
} else {
|
|
61
|
+
$Message.error("加载流程xml失败," + data.message);
|
|
62
|
+
}
|
|
63
|
+
// 将字符串转换成图显示出来
|
|
64
|
+
bpmnModeler.importXML(bpmnXmlStr, function (err) {
|
|
65
|
+
if (err) {
|
|
66
|
+
console.error(err)
|
|
67
|
+
}
|
|
68
|
+
})
|
|
69
|
+
})
|
|
70
|
+
} else {
|
|
71
|
+
// 将字符串转换成图显示出来
|
|
72
|
+
bpmnModeler.importXML(bpmnXmlStr, function (err) {
|
|
73
|
+
if (err) {
|
|
74
|
+
console.error(err)
|
|
75
|
+
}
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
// 下载为SVG格式,done是个函数,调用的时候传入的
|
|
80
|
+
saveSVG(bpmnModeler, done) {
|
|
81
|
+
// 把传入的done再传给bpmn原型的saveSVG函数调用
|
|
82
|
+
this.bpmnModeler.saveSVG(done)
|
|
83
|
+
},
|
|
84
|
+
// 下载为SVG格式,done是个函数,调用的时候传入的
|
|
85
|
+
saveDiagram(bpmnModeler, done) {
|
|
86
|
+
// 把传入的done再传给bpmn原型的saveXML函数调用
|
|
87
|
+
this.bpmnModeler.saveXML({format: true}, function (err, xml) {
|
|
88
|
+
done(err, xml)
|
|
89
|
+
})
|
|
90
|
+
},
|
|
91
|
+
// 下载为SVG格式,done是个函数,调用的时候传入的
|
|
92
|
+
deployBpm(bpmnModeler, xmlStr) {
|
|
93
|
+
const {$Message, $Spin} = this
|
|
94
|
+
const elementRegistry = bpmnModeler.get('elementRegistry');
|
|
95
|
+
const processNode = elementRegistry.filter(
|
|
96
|
+
(item) => {
|
|
97
|
+
return item.type === 'bpmn:Process'
|
|
98
|
+
}
|
|
99
|
+
)[0];
|
|
100
|
+
const processId = processNode.id;
|
|
101
|
+
const processName = processNode.businessObject.name;
|
|
102
|
+
if (!processId) {
|
|
103
|
+
$Message.error("流程编号不能为空")
|
|
104
|
+
return
|
|
105
|
+
}
|
|
106
|
+
if (!processName) {
|
|
107
|
+
$Message.error("流程名称不能为空")
|
|
108
|
+
return
|
|
109
|
+
}
|
|
110
|
+
$Spin.show();
|
|
111
|
+
ajax.post(config.upmsServerContext + '/manage/workflow/deployString', {
|
|
112
|
+
bpmnXml: xmlStr,
|
|
113
|
+
processId: processId,
|
|
114
|
+
processName: processName
|
|
115
|
+
}).then(function ({data}) {
|
|
116
|
+
$Spin.hide();
|
|
117
|
+
if (data.code === 1) {
|
|
118
|
+
$Message.success("流程部署成功")
|
|
119
|
+
} else {
|
|
120
|
+
$Message.error(data.data)
|
|
121
|
+
}
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
// 把传入的done再传给bpmn原型的saveSVG函数调用
|
|
125
|
+
// this.bpmnModeler.saveSVG(done)
|
|
126
|
+
},
|
|
127
|
+
// 当图发生改变的时候会调用这个函数,这个data就是图的xml
|
|
128
|
+
// setEncoded(link, name, data) {
|
|
129
|
+
// // 把xml转换为URI,下载要用到的
|
|
130
|
+
// const encodedData = encodeURIComponent(data)
|
|
131
|
+
// // 获取到图的xml,保存就是把这个xml提交给后台
|
|
132
|
+
// this.xmlStr = data
|
|
133
|
+
// // 下载图的具体操作,改变a的属性,className令a标签可点击,href令能下载,download是下载的文件的名字
|
|
134
|
+
// if (data) {
|
|
135
|
+
// link.className = 'active'
|
|
136
|
+
// link.href = 'data:application/bpmn20-xml;charset=UTF-8,' + encodedData
|
|
137
|
+
// link.download = name
|
|
138
|
+
// }
|
|
139
|
+
// },
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* 下载bpmn
|
|
143
|
+
* @param {object} bpmnModeler bpmn对象
|
|
144
|
+
*/
|
|
145
|
+
downLoad(bpmnModeler) {
|
|
146
|
+
var downloadLink = $("#downloadBpmn")
|
|
147
|
+
bpmnModeler.saveXML({format: true}, function (err, xml) {
|
|
148
|
+
if (err) {
|
|
149
|
+
return console.error('could not save BPMN 2.0 diagram', err);
|
|
150
|
+
}
|
|
151
|
+
tools.setEncoded(downloadLink, 'diagram.bpmn', err ? null : xml);
|
|
152
|
+
});
|
|
153
|
+
},
|
|
154
|
+
/**
|
|
155
|
+
* 转码xml并下载
|
|
156
|
+
* @param {object} link 按钮
|
|
157
|
+
* @param {string} name 下载名称
|
|
158
|
+
* @param {string} data base64XML
|
|
159
|
+
*/
|
|
160
|
+
setEncoded(link, name, data) {
|
|
161
|
+
var encodedData = encodeURIComponent(data);
|
|
162
|
+
if (data) {
|
|
163
|
+
link.addClass('active').attr({
|
|
164
|
+
'href': 'data:application/bpmn20-xml;charset=UTF-8,' + encodedData,
|
|
165
|
+
'download': name
|
|
166
|
+
});
|
|
167
|
+
} else {
|
|
168
|
+
link.removeClass('active');
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
/**
|
|
172
|
+
* 上传bpmn
|
|
173
|
+
* @param {object} bpmnModeler bpmn对象
|
|
174
|
+
* @param {object} container 容器对象
|
|
175
|
+
*/
|
|
176
|
+
upload(bpmnModeler, container) {
|
|
177
|
+
|
|
178
|
+
},
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* 根据数据设置颜色
|
|
183
|
+
* @param data
|
|
184
|
+
* @returns {Array}
|
|
185
|
+
*/
|
|
186
|
+
getByColor(data) {
|
|
187
|
+
|
|
188
|
+
var ColorJson = []
|
|
189
|
+
for (var k in data['doneLightSet']) {
|
|
190
|
+
var par = {
|
|
191
|
+
"name": data['doneLightSet'][k],
|
|
192
|
+
"stroke": "green",
|
|
193
|
+
"fill": "green"
|
|
194
|
+
}
|
|
195
|
+
ColorJson.push(par)
|
|
196
|
+
}
|
|
197
|
+
for (var k in data['donePointSet']) {
|
|
198
|
+
var par = {
|
|
199
|
+
"name": data['donePointSet'][k],
|
|
200
|
+
"stroke": "gray",
|
|
201
|
+
"fill": "#53d63a"
|
|
202
|
+
|
|
203
|
+
}
|
|
204
|
+
ColorJson.push(par)
|
|
205
|
+
}
|
|
206
|
+
for (var k in data['doneTaskSet']) {
|
|
207
|
+
var par = {
|
|
208
|
+
"name": data['doneTaskSet'][k],
|
|
209
|
+
"stroke": "green",
|
|
210
|
+
"fill": "#53d63a"
|
|
211
|
+
}
|
|
212
|
+
ColorJson.push(par)
|
|
213
|
+
}
|
|
214
|
+
for (var k in data['todoPointSet']) {
|
|
215
|
+
var par = {
|
|
216
|
+
"name": data['todoPointSet'][k],
|
|
217
|
+
"stroke": "green",
|
|
218
|
+
"fill": "#d6541c"
|
|
219
|
+
}
|
|
220
|
+
ColorJson.push(par)
|
|
221
|
+
}
|
|
222
|
+
return ColorJson
|
|
223
|
+
}
|
|
224
|
+
}
|
package/utils/number.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 生成uid
|
|
3
|
+
*/
|
|
4
|
+
export function guid() {
|
|
5
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
6
|
+
var r = Math.random() * 16 | 0,
|
|
7
|
+
v = c === 'x' ? r : (r & 0x3 | 0x8);
|
|
8
|
+
return v.toString(16);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// 数字每三位加逗号
|
|
13
|
+
export function toThousands(num) {
|
|
14
|
+
let result = '';
|
|
15
|
+
num = (num || 0).toString();
|
|
16
|
+
while (num.length > 3) {
|
|
17
|
+
result = ',' + num.slice(-3) + result;
|
|
18
|
+
num = num.slice(0, num.length - 3);
|
|
19
|
+
}
|
|
20
|
+
if (num) {
|
|
21
|
+
result = num + result;
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* 数字金额转为汉字
|
|
28
|
+
* @param values
|
|
29
|
+
* @returns {string}
|
|
30
|
+
*/
|
|
31
|
+
export function toChies(values) {
|
|
32
|
+
//形参
|
|
33
|
+
let len = values.length //统计出长度
|
|
34
|
+
let arr = []
|
|
35
|
+
|
|
36
|
+
let chin_list = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'] //所有的数值对应的汉字
|
|
37
|
+
|
|
38
|
+
let chin_lisp = [
|
|
39
|
+
'仟',
|
|
40
|
+
'佰',
|
|
41
|
+
'拾',
|
|
42
|
+
'亿',
|
|
43
|
+
'仟',
|
|
44
|
+
'佰',
|
|
45
|
+
'拾',
|
|
46
|
+
'万',
|
|
47
|
+
'仟',
|
|
48
|
+
'佰',
|
|
49
|
+
'拾'
|
|
50
|
+
] //进制
|
|
51
|
+
|
|
52
|
+
for (let i = 0; i < len; i++) {
|
|
53
|
+
arr.push(parseInt(values[i])) //输入的数据按下标存进去 存进去的只是数字
|
|
54
|
+
arr[i] = chin_list[arr[i]] //是根据我们输入的输入的数字,对应着我们的chin_list这个数组
|
|
55
|
+
} //123['壹','佰','贰','拾','叁']
|
|
56
|
+
|
|
57
|
+
for (let i = len - 1, j = 1; i > 0; i--) {
|
|
58
|
+
//i =2 1 //倒序 为了添加进制,方便我们去观看
|
|
59
|
+
arr.splice(i, 0, chin_lisp[chin_lisp.length - j++]) //j=2
|
|
60
|
+
}
|
|
61
|
+
arr = arr.join('')
|
|
62
|
+
if (len >= 1) {
|
|
63
|
+
arr += '元整'
|
|
64
|
+
}
|
|
65
|
+
return arr
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function numToDX(num) {
|
|
69
|
+
if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(num))
|
|
70
|
+
return "数据非法";
|
|
71
|
+
let unit = "千百拾亿千百拾万千百拾元角分", str = "";
|
|
72
|
+
num += "00";
|
|
73
|
+
let p = num.indexOf('.');
|
|
74
|
+
if (p >= 0)
|
|
75
|
+
num = num.substring(0, p) + num.substr(p + 1, 2);
|
|
76
|
+
unit = unit.substr(unit.length - num.length);
|
|
77
|
+
for (let i = 0; i < num.length; i++)
|
|
78
|
+
str += '零壹贰叁肆伍陆柒捌玖'.charAt(num.charAt(i)) + unit.charAt(i);
|
|
79
|
+
return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整");
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* 校验电话号码是否正确
|
|
84
|
+
*
|
|
85
|
+
*/
|
|
86
|
+
|
|
87
|
+
export function checkTel(val) {
|
|
88
|
+
var isPhone = /^([0-9]{3,4}-)?[0-9]{7,8}$/;
|
|
89
|
+
var isMob = /^((\+?86)|(\(\+86\)))?(13[0123456789][0-9]{8}|15[012356789][0-9]{8}|18[0123456789][0-9]{8}|14[57][0-9]{8}|17[678][0-9]{8})$/;
|
|
90
|
+
if (isMob.test(val) || isPhone.test(val)) {
|
|
91
|
+
return true;
|
|
92
|
+
} else {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* 保留小数位数
|
|
99
|
+
*/
|
|
100
|
+
export function toFixed(num, digit) {
|
|
101
|
+
if (digit > 6) {
|
|
102
|
+
digit = 6;
|
|
103
|
+
}
|
|
104
|
+
var changenum;
|
|
105
|
+
if (num > 0) {
|
|
106
|
+
changenum = (parseInt(num * Math.pow(10, digit) + 0.5) / Math.pow(10, digit)).toString();
|
|
107
|
+
} else {
|
|
108
|
+
changenum = (parseInt(num * Math.pow(10, digit) - 0.5) / Math.pow(10, digit)).toString();
|
|
109
|
+
}
|
|
110
|
+
var index = changenum.indexOf(".");
|
|
111
|
+
if (index < 0 && digit > 0) {
|
|
112
|
+
changenum = changenum + ".";
|
|
113
|
+
for (var i = 0; i < digit; i++) {
|
|
114
|
+
changenum = changenum + "0";
|
|
115
|
+
}
|
|
116
|
+
} else {
|
|
117
|
+
index = changenum.length - index;
|
|
118
|
+
for (var i = 0; i < (digit - index) + 1; i++) {
|
|
119
|
+
changenum = changenum + "0";
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return changenum;
|
|
123
|
+
}
|