@bdsoft/element 1.1.13 → 1.1.14
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/index.html +13 -0
- package/index.js +6 -6
- package/package.json +19 -23
- package/src/App.vue +28 -0
- package/src/assets/css/element.scss +196 -0
- package/src/assets/css/layout.scss +215 -0
- package/src/assets/css/tailwind.scss +67 -0
- package/src/assets/images/banner.gif +0 -0
- package/src/assets/images/banner.png +0 -0
- package/src/assets/images/bg1.svg +22 -0
- package/src/assets/images/bg2.png +0 -0
- package/src/assets/images/ff.png +0 -0
- package/src/assets/images/home-file1.png +0 -0
- package/src/assets/images/ky.png +0 -0
- package/src/assets/images/menu/add.png +0 -0
- package/src/assets/images/menu/del.png +0 -0
- package/src/assets/images/menu/down.png +0 -0
- package/src/assets/images/menu/dr.png +0 -0
- package/src/assets/images/menu/edit.png +0 -0
- package/src/assets/images/menu/kx.png +0 -0
- package/src/assets/images/menu/mb.png +0 -0
- package/src/assets/images/menu/pz.png +0 -0
- package/src/assets/images/menu/save.png +0 -0
- package/src/assets/images/menu/sj.png +0 -0
- package/src/assets/images/menu/sjk.png +0 -0
- package/src/assets/images/menu/up.png +0 -0
- package/src/assets/images/po-i.png +0 -0
- package/src/assets/images/po1-i1.png +0 -0
- package/src/assets/images/po1-i2.png +0 -0
- package/src/assets/images/po1-i3.png +0 -0
- package/src/assets/images/po1-i4.png +0 -0
- package/src/assets/images/po1-i5.png +0 -0
- package/src/assets/images/po1-i6.png +0 -0
- package/src/assets/images/po1-i7.png +0 -0
- package/src/assets/images/po1-i8.png +0 -0
- package/src/assets/images/po2-i1.png +0 -0
- package/src/assets/images/po2-i2.png +0 -0
- package/src/assets/images/po3-i1.png +0 -0
- package/src/assets/images/po4-i1.png +0 -0
- package/src/assets/images/po5-i1.png +0 -0
- package/src/assets/images/po6-i1.png +0 -0
- package/src/assets/images/po6-i2.png +0 -0
- package/src/assets/images/po7-i1.png +0 -0
- package/src/assets/images/tj1.png +0 -0
- package/src/assets/images/tj2.png +0 -0
- package/src/assets/images/tj3.png +0 -0
- package/src/components/3dcloudwords/index.js +346 -0
- package/src/components/3dcloudwords/index.vue +99 -0
- package/src/components/3dcloudwords/readme.md +66 -0
- package/src/components/badge/index.js +167 -0
- package/src/components/badge/index.scss +166 -0
- package/src/components/badge/index.vue +98 -0
- package/src/components/badge/readme.md +18 -0
- package/src/components/basic/Finish.vue +107 -0
- package/src/components/basic/button.vue +19 -0
- package/src/components/basic/readme.md +7 -0
- package/src/components/button/index.vue +48 -0
- package/src/components/button/readme.md +62 -0
- package/src/components/carousel/index.vue +104 -0
- package/src/components/carousel/readme.md +12 -0
- package/src/components/chartconfig/index.vue +141 -0
- package/src/components/chartconfig/readme.md +25 -0
- package/src/components/contextMenu/hookContxtMenu.js +41 -0
- package/src/components/contextMenu/index.vue +245 -0
- package/src/components/contextMenu/readme.md +55 -0
- package/src/components/contextMenu/useElementBounding.js +40 -0
- package/src/components/countup/countUp.js +196 -0
- package/src/components/countup/index.vue +114 -0
- package/src/components/countup/readme.md +9 -0
- package/src/components/empty/assets/build.png +0 -0
- package/src/components/empty/assets/emptybg.gif +0 -0
- package/src/components/empty/assets/emptybg.png +0 -0
- package/src/components/empty/assets/emptybg2.jpg +0 -0
- package/src/components/empty/assets/emptybg3.jpg +0 -0
- package/src/components/empty/assets/wuxiao.png +0 -0
- package/src/components/empty/assets/wuxiao.webp +0 -0
- package/src/components/empty/building.vue +117 -0
- package/src/components/empty/empty.vue +120 -0
- package/src/components/empty/index.js +12 -0
- package/src/components/empty/invalid.vue +56 -0
- package/src/components/error/Error.vue +79 -0
- package/src/components/error/readme.md +20 -0
- package/src/components/form/Form.vue +84 -0
- package/src/components/form/FormItem.vue +143 -0
- package/src/components/form/data.js +52 -0
- package/src/components/form/readme.md +69 -0
- package/src/components/layout/banner.vue +412 -0
- package/src/components/layout/bar.vue +43 -0
- package/src/components/layout/layout1.vue +60 -0
- package/src/components/layout/layout2.vue +134 -0
- package/src/components/layout/layout3.vue +107 -0
- package/src/components/layout/layout4.vue +66 -0
- package/src/components/layout/nav.vue +333 -0
- package/src/components/layout/readme.md +61 -0
- package/src/components/loading/index.vue +122 -0
- package/src/components/loading/readme.md +6 -0
- package/src/components/notice/NoticeList.vue +198 -0
- package/src/components/notice/NoticeListPaging.vue +281 -0
- package/src/components/notice/NoticeView.vue +92 -0
- package/src/components/notice/readme.md +1 -0
- package/src/components/pagination/index.vue +100 -0
- package/src/components/pagination/readme.md +19 -0
- package/src/components/pagination/scroll-to.js +51 -0
- package/src/components/progress/bar.vue +72 -0
- package/src/components/progress/progress.vue +58 -0
- package/src/components/screenfull/index.js +3 -0
- package/src/components/screenfull/index.vue +65 -0
- package/src/components/screenfull/package.json +15 -0
- package/src/components/screenfull/readme.md +6 -0
- package/src/components/statisticalCount/index.vue +80 -0
- package/src/components/statisticalCount/readme.md +21 -0
- package/src/components/username/index.vue +79 -0
- package/src/components/username/readme.md +22 -0
- package/src/components/username//346/225/210/346/236/234/345/233/276.png +0 -0
- package/src/global/index.ts +6 -0
- package/src/global/register-properties.ts +10 -0
- package/src/index.js +88 -0
- package/src/utils/coms/load.jsx +10 -0
- package/src/utils/func.js +32 -0
- package/src/utils/hookDialog.js +38 -0
- package/src/utils/hookPage.js +49 -0
- package/src/utils/index.js +5 -0
- package/src/utils/lib/console.js +39 -0
- package/src/utils/lib/debounce.js +19 -0
- package/src/utils/lib/deepextend.js +51 -0
- package/src/utils/lib/deepset.js +14 -0
- package/src/utils/lib/extend.js +28 -0
- package/src/utils/lib/index.js +13 -0
- package/src/utils/lib/json.js +90 -0
- package/src/utils/lib/mergeprops.js +62 -0
- package/src/utils/lib/mitt.js +43 -0
- package/src/utils/lib/modify.js +8 -0
- package/src/utils/lib/slot.js +19 -0
- package/src/utils/lib/toarray.js +5 -0
- package/src/utils/lib/tocase.js +11 -0
- package/src/utils/lib/todate.js +10 -0
- package/src/utils/lib/toline.js +10 -0
- package/src/utils/lib/tostring.js +7 -0
- package/src/utils/lib/type.js +45 -0
- package/src/utils/lib/unique.js +6 -0
- package/src/utils/message.js +164 -0
- package/src/utils/type.js +45 -0
- package/src/xm_components/HeadSearch/hook/hookSearch.js +96 -0
- package/src/xm_components/HeadSearch/index.vue +206 -0
- package/src/xm_components/HeadSearch/readme.md +12 -0
- package/src/xm_components/HeadSearch//346/220/234/347/264/242/345/210/227/350/241/250.png +0 -0
- package/src/xm_components/Milestone/index.vue +213 -0
- package/src/xm_components/Milestone/readme.md +15 -0
- package/src/xm_components/MultiStatisticalCard/image.png +0 -0
- package/src/xm_components/MultiStatisticalCard/index.vue +114 -0
- package/src/xm_components/MultiStatisticalCard/readme.md +29 -0
- package/src/xm_components/StatisticalCard/image.png +0 -0
- package/src/xm_components/StatisticalCard/index.vue +196 -0
- package/src/xm_components/StatisticalCard/readme.md +41 -0
- package/src/xm_components/readme.md +1 -0
- package/vite.config.js +58 -0
- package/dist/BdElement.js +0 -23432
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// 分页hook函数 参考说明 components/Pagination/readme.md
|
|
2
|
+
import { reactive, toRefs } from 'vue'
|
|
3
|
+
|
|
4
|
+
export function usePage(changeFn) {
|
|
5
|
+
//
|
|
6
|
+
|
|
7
|
+
let page = reactive({
|
|
8
|
+
// 数据服务分页参数值
|
|
9
|
+
pageHeader: {
|
|
10
|
+
startindex: 0,
|
|
11
|
+
pagesize: 30,
|
|
12
|
+
carrytotal: true
|
|
13
|
+
},
|
|
14
|
+
currentPage: 1,
|
|
15
|
+
pageSizes: [30, 60, 90],
|
|
16
|
+
pageSize: 30,
|
|
17
|
+
total: 0
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
function handleSizeChange(val) {
|
|
21
|
+
page.pageSize = val
|
|
22
|
+
// page.pageHeader.mend = val
|
|
23
|
+
changeFn()
|
|
24
|
+
}
|
|
25
|
+
function handleCurrentChange(val) {
|
|
26
|
+
page.currentPage = val
|
|
27
|
+
page.pageHeader.startindex = val - 1
|
|
28
|
+
changeFn()
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
*
|
|
32
|
+
* @param {*} pageobj { page: currentPage.value, pageSize: val }
|
|
33
|
+
*/
|
|
34
|
+
function handlePagination(pageobj) {
|
|
35
|
+
let pageIndex = pageobj.page
|
|
36
|
+
let pageSize = pageobj.pageSize
|
|
37
|
+
page.currentPage = pageIndex
|
|
38
|
+
page.pageSize = pageSize
|
|
39
|
+
page.pageHeader.startindex = (pageIndex - 1) * pageSize
|
|
40
|
+
page.pageHeader.pagesize = pageSize
|
|
41
|
+
changeFn()
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
...toRefs(page),
|
|
45
|
+
handleSizeChange,
|
|
46
|
+
handleCurrentChange,
|
|
47
|
+
handlePagination
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 格式化日志信息
|
|
3
|
+
*
|
|
4
|
+
* @param {String} type - 日志类型,如 'tip' 或 'err'
|
|
5
|
+
* @param {String} msg - 日志消息内容
|
|
6
|
+
* @param {Object} rule - 可选参数,与日志相关的规则对象
|
|
7
|
+
* @returns {String} - 返回格式化后的日志字符串
|
|
8
|
+
*/
|
|
9
|
+
export function format(type, msg, rule) {
|
|
10
|
+
// 使用模板字符串构建日志信息,包含日志类型和消息内容
|
|
11
|
+
let logMsg = `[form-create ${type}]: ${msg}`;
|
|
12
|
+
// 如果提供了规则对象,则将其转换为JSON字符串并添加到日志信息中
|
|
13
|
+
if (rule) {
|
|
14
|
+
logMsg += `\n\nrule: ${JSON.stringify(rule.getRule ? rule.getRule() : rule)}`;
|
|
15
|
+
}
|
|
16
|
+
// 返回格式化后的日志字符串
|
|
17
|
+
return logMsg;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* 输出格式化的提示信息到控制台
|
|
22
|
+
*
|
|
23
|
+
* @param {String} msg - 提示信息的内容
|
|
24
|
+
* @param {Object} rule - 可选参数,与提示信息相关的规则对象
|
|
25
|
+
*/
|
|
26
|
+
export function tip(msg, rule) {
|
|
27
|
+
// 使用 format 函数格式化提示信息,并通过 console.warn 输出到控制台
|
|
28
|
+
console.warn(format('tip', msg, rule));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
export function err(msg, rule) {
|
|
33
|
+
console.error(format('err', msg, rule));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function logError(e) {
|
|
37
|
+
err(e.toString());
|
|
38
|
+
console.error(e);
|
|
39
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 防抖函数,用于限制函数的执行频率。
|
|
3
|
+
*
|
|
4
|
+
* @param {Function} fn - 需要防抖的函数。
|
|
5
|
+
* @param {number} wait - 防抖的时间间隔,单位为毫秒。
|
|
6
|
+
* @returns {Function} - 返回一个新的函数,该函数在指定的时间间隔内只会执行一次。
|
|
7
|
+
*/
|
|
8
|
+
export default function debounce(fn, wait) {
|
|
9
|
+
// 用于存储定时器的变量
|
|
10
|
+
var timeout = null;
|
|
11
|
+
// 返回一个新的函数,该函数在指定的时间间隔内只会执行一次
|
|
12
|
+
return function (...arg) {
|
|
13
|
+
// 如果定时器已经存在,则清除定时器
|
|
14
|
+
if (timeout !== null)
|
|
15
|
+
clearTimeout(timeout);
|
|
16
|
+
// 设置新的定时器,在指定的时间间隔后执行传入的函数
|
|
17
|
+
timeout = setTimeout(() => fn.call(this, ...arg), wait);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import {$set} from './modify';
|
|
2
|
+
import is from './type';
|
|
3
|
+
|
|
4
|
+
export default function deepExtend(origin, target = {}, mode) {
|
|
5
|
+
let isArr = false;
|
|
6
|
+
for (let key in target) {
|
|
7
|
+
if (Object.prototype.hasOwnProperty.call(target, key)) {
|
|
8
|
+
let clone = target[key];
|
|
9
|
+
if ((isArr = Array.isArray(clone)) || is.Object(clone)) {
|
|
10
|
+
let nst = origin[key] === undefined;
|
|
11
|
+
if (isArr) {
|
|
12
|
+
isArr = false;
|
|
13
|
+
nst && $set(origin, key, []);
|
|
14
|
+
} else if (clone._clone && mode !== undefined) {
|
|
15
|
+
if (mode) {
|
|
16
|
+
clone = clone.getRule();
|
|
17
|
+
nst && $set(origin, key, {});
|
|
18
|
+
} else {
|
|
19
|
+
$set(origin, key, clone._clone());
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
} else {
|
|
23
|
+
nst && $set(origin, key, {});
|
|
24
|
+
}
|
|
25
|
+
origin[key] = deepExtend(origin[key], clone, mode);
|
|
26
|
+
} else {
|
|
27
|
+
$set(origin, key, clone);
|
|
28
|
+
if (!is.Undef(clone)) {
|
|
29
|
+
if (!is.Undef(clone.__json)) {
|
|
30
|
+
origin[key].__json = clone.__json;
|
|
31
|
+
}
|
|
32
|
+
if (!is.Undef(clone.__origin)) {
|
|
33
|
+
origin[key].__origin = clone.__origin;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return (mode !== undefined && Array.isArray(origin)) ? origin.filter(v => !v || !v.__ctrl) : origin
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function deepCopy(value) {
|
|
43
|
+
return deepExtend({}, {value}).value;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function deepExtendArgs(origin, ...lst) {
|
|
47
|
+
lst.forEach(target => {
|
|
48
|
+
origin = deepExtend(origin, target);
|
|
49
|
+
});
|
|
50
|
+
return origin;
|
|
51
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export default function deepSet(data, idx, val) {
|
|
2
|
+
let _data = data, to;
|
|
3
|
+
(idx || '').split('.').forEach(v => {
|
|
4
|
+
if (to) {
|
|
5
|
+
if (!_data[to] || typeof _data[to] != 'object') {
|
|
6
|
+
_data[to] = {}
|
|
7
|
+
}
|
|
8
|
+
_data = _data[to];
|
|
9
|
+
}
|
|
10
|
+
to = v;
|
|
11
|
+
})
|
|
12
|
+
_data[to] = val;
|
|
13
|
+
return _data;
|
|
14
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import {$set} from './modify';
|
|
2
|
+
|
|
3
|
+
const _extends = Object.assign || function (a) {
|
|
4
|
+
for (let b, c = 1; c < arguments.length; c++) {
|
|
5
|
+
for (let d in b = arguments[c], b) {
|
|
6
|
+
Object.prototype.hasOwnProperty.call(b, d) && ($set(a, d, b[d]));
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
return a;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 将传入的多个对象合并成一个新的对象,并返回这个新对象。
|
|
14
|
+
*
|
|
15
|
+
* @returns {Object} - 合并后的新对象。
|
|
16
|
+
*/
|
|
17
|
+
export default function extend() {
|
|
18
|
+
// 使用 _extends 函数将传入的所有对象合并成一个新的对象,并返回这个新对象
|
|
19
|
+
return _extends.apply(this, arguments);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function copy(obj) {
|
|
23
|
+
// 如果 obj 不是对象或者为 null,则直接返回 obj
|
|
24
|
+
if (typeof obj !== 'object' || obj === null) return obj;
|
|
25
|
+
// 如果 obj 是数组,则使用扩展运算符复制数组
|
|
26
|
+
// 如果 obj 是对象,则使用扩展运算符复制对象
|
|
27
|
+
return obj instanceof Array ? [...obj] : {...obj};
|
|
28
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export {default as debounce} from './debounce';
|
|
2
|
+
export {default as toArray} from './toarray';
|
|
3
|
+
export {default as toString} from './tostring';
|
|
4
|
+
export {default as toLine} from './toline';
|
|
5
|
+
export {default as toDate} from './todate';
|
|
6
|
+
export {default as deepExtend, deepExtendArgs, deepCopy} from './deepextend';
|
|
7
|
+
export {default as extend, copy} from './extend';
|
|
8
|
+
export {parseJson, toJson} from './json';
|
|
9
|
+
export {$set, $del} from './modify';
|
|
10
|
+
export {default as is} from './type';
|
|
11
|
+
export {default as uniqueId} from './unique';
|
|
12
|
+
export {default as getSlot} from './slot';
|
|
13
|
+
export {default as deepSet} from './deepset';
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import deepExtend from './deepextend';
|
|
2
|
+
import {err} from './console';
|
|
3
|
+
import is from './type';
|
|
4
|
+
|
|
5
|
+
const PREFIX = '[[FORM-CREATE-PREFIX-';
|
|
6
|
+
const SUFFIX = '-FORM-CREATE-SUFFIX]]';
|
|
7
|
+
|
|
8
|
+
export function toJson(obj, space) {
|
|
9
|
+
return JSON.stringify(deepExtend(Array.isArray(obj) ? [] : {}, obj, true), function (key, val) {
|
|
10
|
+
if (val && val._isVue === true)
|
|
11
|
+
return undefined;
|
|
12
|
+
|
|
13
|
+
if (typeof val !== 'function') {
|
|
14
|
+
return val;
|
|
15
|
+
}
|
|
16
|
+
if (val.__json) {
|
|
17
|
+
return val.__json;
|
|
18
|
+
}
|
|
19
|
+
if (val.__origin)
|
|
20
|
+
val = val.__origin;
|
|
21
|
+
|
|
22
|
+
if (val.__emit)
|
|
23
|
+
return undefined;
|
|
24
|
+
return PREFIX + val + SUFFIX;
|
|
25
|
+
}, space);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function makeFn(fn) {
|
|
29
|
+
return (new Function('return ' + fn))();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function parseFn(fn, mode) {
|
|
33
|
+
if (fn && is.String(fn) && fn.length > 4) {
|
|
34
|
+
let v = fn.trim();
|
|
35
|
+
let flag = false;
|
|
36
|
+
try {
|
|
37
|
+
if (v.indexOf(SUFFIX) > 0 && v.indexOf(PREFIX) === 0) {
|
|
38
|
+
v = v.replace(SUFFIX, '').replace(PREFIX, '');
|
|
39
|
+
flag = true;
|
|
40
|
+
} else if (v.indexOf('$FN:') === 0) {
|
|
41
|
+
v = v.substring(4);
|
|
42
|
+
flag = true;
|
|
43
|
+
} else if (v.indexOf('$EXEC:') === 0) {
|
|
44
|
+
v = v.substring(6);
|
|
45
|
+
flag = true;
|
|
46
|
+
} else if (v.indexOf('$GLOBAL:') === 0) {
|
|
47
|
+
const name = v.substring(8);
|
|
48
|
+
v = function (...args) {
|
|
49
|
+
const callback = args[0].api.getGlobalEvent(name);
|
|
50
|
+
if (callback) {
|
|
51
|
+
return callback.call(this, ...args);
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
v.__json = fn;
|
|
56
|
+
v.__inject = true;
|
|
57
|
+
return v;
|
|
58
|
+
} else if (v.indexOf('$FNX:') === 0) {
|
|
59
|
+
v = makeFn('function($inject){' + v.substring(5) + '}');
|
|
60
|
+
v.__json = fn;
|
|
61
|
+
v.__inject = true;
|
|
62
|
+
return v;
|
|
63
|
+
} else if (!mode && v.indexOf('function ') === 0 && v !== 'function ') {
|
|
64
|
+
flag = true;
|
|
65
|
+
} else if (!mode && v.indexOf('function(') === 0 && v !== 'function(') {
|
|
66
|
+
flag = true;
|
|
67
|
+
}
|
|
68
|
+
if (!flag) return fn;
|
|
69
|
+
let val;
|
|
70
|
+
try{
|
|
71
|
+
val = makeFn(v);
|
|
72
|
+
}catch (e){
|
|
73
|
+
val = makeFn('function ' + v);
|
|
74
|
+
}
|
|
75
|
+
val.__json = fn;
|
|
76
|
+
return val;
|
|
77
|
+
} catch (e) {
|
|
78
|
+
err(`解析失败:${v}\n\nerr: ${e}`);
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return fn;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function parseJson(json, mode) {
|
|
86
|
+
return JSON.parse(json, function (k, v) {
|
|
87
|
+
if (is.Undef(v) || !v.indexOf) return v;
|
|
88
|
+
return parseFn(v, mode);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export const normalMerge = ['props'];
|
|
2
|
+
export const toArrayMerge = ['class', 'style', 'directives'];
|
|
3
|
+
export const functionalMerge = ['on', 'hook'];
|
|
4
|
+
|
|
5
|
+
const mergeProps = (objects, initial = {}, opt = {}) => {
|
|
6
|
+
const _normalMerge = [...normalMerge, ...opt['normal'] || []];
|
|
7
|
+
const _toArrayMerge = [...toArrayMerge, ...opt['array'] || []];
|
|
8
|
+
const _functionalMerge = [...functionalMerge, ...opt['functional'] || []];
|
|
9
|
+
const propsMerge = opt['props'] || [];
|
|
10
|
+
|
|
11
|
+
return objects.reduce((a, b) => {
|
|
12
|
+
for (const key in b) {
|
|
13
|
+
if (a[key]) {
|
|
14
|
+
if (propsMerge.indexOf(key) > -1) {
|
|
15
|
+
a[key] = mergeProps([b[key]], a[key]);
|
|
16
|
+
} else if (_normalMerge.indexOf(key) > -1) {
|
|
17
|
+
a[key] = {...a[key], ...b[key]}
|
|
18
|
+
} else if (_toArrayMerge.indexOf(key) > -1) {
|
|
19
|
+
const arrA = a[key] instanceof Array ? a[key] : [a[key]];
|
|
20
|
+
const arrB = b[key] instanceof Array ? b[key] : [b[key]];
|
|
21
|
+
a[key] = [...arrA, ...arrB]
|
|
22
|
+
} else if (_functionalMerge.indexOf(key) > -1) {
|
|
23
|
+
for (const event in b[key]) {
|
|
24
|
+
if (a[key][event]) {
|
|
25
|
+
const arrA = a[key][event] instanceof Array ? a[key][event] : [a[key][event]];
|
|
26
|
+
const arrB = b[key][event] instanceof Array ? b[key][event] : [b[key][event]];
|
|
27
|
+
a[key][event] = [...arrA, ...arrB]
|
|
28
|
+
} else {
|
|
29
|
+
a[key][event] = b[key][event]
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
} else if (key === 'hook') {
|
|
33
|
+
for (let hook in b[key]) {
|
|
34
|
+
if (a[key][hook]) {
|
|
35
|
+
a[key][hook] = mergeFn(a[key][hook], b[key][hook])
|
|
36
|
+
} else {
|
|
37
|
+
a[key][hook] = b[key][hook]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
} else {
|
|
41
|
+
a[key] = b[key]
|
|
42
|
+
}
|
|
43
|
+
} else {
|
|
44
|
+
if (_normalMerge.indexOf(key) > -1 || _functionalMerge.indexOf(key) > -1 || propsMerge.indexOf(key) > -1) {
|
|
45
|
+
a[key] = {...b[key]}
|
|
46
|
+
} else if (_toArrayMerge.indexOf(key) > -1) {
|
|
47
|
+
a[key] = b[key] instanceof Array ? [...b[key]] : (typeof b[key] === 'object' ? {...b[key]} : b[key]);
|
|
48
|
+
} else
|
|
49
|
+
a[key] = b[key];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return a
|
|
53
|
+
}, initial);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const mergeFn = (fn1, fn2) =>
|
|
57
|
+
function () {
|
|
58
|
+
fn1 && fn1.apply(this, arguments);
|
|
59
|
+
fn2 && fn2.apply(this, arguments);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export default mergeProps;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// https://github.com/developit/mitt
|
|
2
|
+
|
|
3
|
+
export default function Mitt(all) {
|
|
4
|
+
all = all || new Map();
|
|
5
|
+
|
|
6
|
+
const mitt = {
|
|
7
|
+
|
|
8
|
+
$on(type, handler) {
|
|
9
|
+
const handlers = all.get(type);
|
|
10
|
+
const added = handlers && handlers.push(handler);
|
|
11
|
+
if (!added) {
|
|
12
|
+
all.set(type, [handler]);
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
$once(type, handler) {
|
|
17
|
+
handler._once = true;
|
|
18
|
+
mitt.$on(type, handler);
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
$off(type, handler) {
|
|
22
|
+
const handlers = all.get(type);
|
|
23
|
+
if (handlers) {
|
|
24
|
+
handlers.splice(handlers.indexOf(handler) >>> 0, 1);
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
$emit(type, ...args) {
|
|
29
|
+
(all.get(type) || []).slice().map((handler) => {
|
|
30
|
+
if (handler._once) {
|
|
31
|
+
mitt.$off(type, handler);
|
|
32
|
+
delete handler._once;
|
|
33
|
+
}
|
|
34
|
+
handler(...args);
|
|
35
|
+
});
|
|
36
|
+
(all.get('*') || []).slice().map((handler) => {
|
|
37
|
+
handler(type, args);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
return mitt;
|
|
43
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 从给定的 slots 对象中筛选出不需要排除的键值对,并返回一个新的对象。
|
|
3
|
+
*
|
|
4
|
+
* @param {Object} slots - 包含键值对的对象,键是字符串,值是函数。
|
|
5
|
+
* @param {Array} [exclude] - 可选的数组,包含需要排除的键。
|
|
6
|
+
* @returns {Object} - 包含不需要排除的键值对的新对象。
|
|
7
|
+
*/
|
|
8
|
+
export default function getSlot(slots, exclude) {
|
|
9
|
+
// 使用 reduce 方法遍历 slots 对象的所有键
|
|
10
|
+
return Object.keys(slots).reduce((lst, name) => {
|
|
11
|
+
// 检查 exclude 是否存在,并且当前键是否不在 exclude 数组中
|
|
12
|
+
if (!exclude || exclude.indexOf(name) === -1) {
|
|
13
|
+
// 如果不需要排除,则将当前键值对添加到结果对象中
|
|
14
|
+
lst[name] = slots[name];
|
|
15
|
+
}
|
|
16
|
+
// 返回结果对象,继续下一次迭代
|
|
17
|
+
return lst;
|
|
18
|
+
}, {}); // 初始值为空对象
|
|
19
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export default function toCase(str) {
|
|
2
|
+
const to = str.replace(/(-[a-z])/g, function (v) {
|
|
3
|
+
return v.replace('-', '').toLocaleUpperCase();
|
|
4
|
+
});
|
|
5
|
+
|
|
6
|
+
return lower(to);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function lower(str) {
|
|
10
|
+
return str.replace(str[0], str[0].toLowerCase());
|
|
11
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export default function toLine(name) {
|
|
2
|
+
let line = name.replace(/([A-Z])/g, '-$1').toLocaleLowerCase();
|
|
3
|
+
if (line.indexOf('-') === 0)
|
|
4
|
+
line = line.substr(1);
|
|
5
|
+
return line;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function upper(str) {
|
|
9
|
+
return str.replace(str[0], str[0].toLocaleUpperCase());
|
|
10
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
const is = {
|
|
2
|
+
type(arg, type) {
|
|
3
|
+
return Object.prototype.toString.call(arg) === '[object ' + type + ']'
|
|
4
|
+
},
|
|
5
|
+
Undef(v) {
|
|
6
|
+
return v === undefined || v === null
|
|
7
|
+
},
|
|
8
|
+
Element(arg) {
|
|
9
|
+
return typeof arg === 'object' && arg !== null && arg.nodeType === 1 && !is.Object(arg)
|
|
10
|
+
},
|
|
11
|
+
trueArray(data) {
|
|
12
|
+
return Array.isArray(data) && data.length > 0;
|
|
13
|
+
},
|
|
14
|
+
Function(v) {
|
|
15
|
+
const type = this.getType(v);
|
|
16
|
+
return type === 'Function' || type === 'AsyncFunction';
|
|
17
|
+
},
|
|
18
|
+
getType(v) {
|
|
19
|
+
const str = Object.prototype.toString.call(v)
|
|
20
|
+
return /^\[object (.*)\]$/.exec(str)[1]
|
|
21
|
+
},
|
|
22
|
+
empty(value) {
|
|
23
|
+
if (value === undefined || value === null) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (Array.isArray(value) && Array.isArray(value) && !value.length) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return typeof value === 'string' && !value;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
['Date', 'Object', 'String', 'Boolean', 'Array', 'Number'].forEach(t => {
|
|
36
|
+
is[t] = function (arg) {
|
|
37
|
+
return is.type(arg, t);
|
|
38
|
+
}
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
export function hasProperty(rule, k) {
|
|
42
|
+
return ({}).hasOwnProperty.call(rule, k)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export default is;
|