cnhis-design-vue 0.3.3-beta → 0.3.4-beta
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/env.d.ts +2 -0
- package/es/big-table/index.css +2 -0
- package/es/big-table/index.js +1373 -64
- package/es/button-print/index.css +2 -0
- package/es/drag-layout/index.css +3 -1
- package/es/drag-layout/index.js +33 -58
- package/es/grid/index.css +3 -1
- package/es/grid/index.js +2 -3
- package/es/index.css +3 -1
- package/es/index.js +1409 -125
- package/package.json +5 -2
- package/packages/big-table/index.ts +17 -0
- package/packages/big-table/src/BigTable.vue +2513 -0
- package/packages/big-table/src/assets/iconfont/iconfont.less +21 -0
- package/packages/big-table/src/assets/iconfont/iconfont.ttf +0 -0
- package/packages/big-table/src/assets/img/failure.png +0 -0
- package/packages/big-table/src/assets/img/icon-asc.png +0 -0
- package/packages/big-table/src/assets/img/icon-desc.png +0 -0
- package/packages/big-table/src/assets/img/no-permission.png +0 -0
- package/packages/big-table/src/assets/img/nodata.png +0 -0
- package/packages/big-table/src/assets/img/notfound.png +0 -0
- package/packages/big-table/src/assets/img/qr.png +0 -0
- package/packages/big-table/src/assets/img/video_default_cover.png +0 -0
- package/packages/big-table/src/assets/img/xb_big.png +0 -0
- package/packages/big-table/src/assets/img/xb_small.png +0 -0
- package/packages/big-table/src/assets/style/table-base.less +275 -0
- package/packages/big-table/src/assets/style/table-global.less +167 -0
- package/packages/big-table/src/bigTableEmits.ts +46 -0
- package/packages/big-table/src/bigTableProps.ts +125 -0
- package/packages/big-table/src/bigTableState.ts +62 -0
- package/packages/big-table/src/components/NoData.vue +90 -0
- package/packages/big-table/src/components/SvgIcon.vue +49 -0
- package/packages/big-table/src/components/TextOverTooltip.vue +110 -0
- package/packages/big-table/src/components/edit-form/EditForm.vue +426 -0
- package/packages/big-table/src/components/edit-form/edit-component/edit-date-picker/edit-date-picker.vue +66 -0
- package/packages/big-table/src/components/edit-form/edit-component/edit-digital/edit-digital.vue +60 -0
- package/packages/big-table/src/components/edit-form/edit-component/edit-input/edit-input.vue +38 -0
- package/packages/big-table/src/components/edit-form/edit-component/edit-input-password/edit-input-password.vue +89 -0
- package/packages/big-table/src/components/edit-form/edit-component/edit-month-picker/edit-month-picker.vue +38 -0
- package/packages/big-table/src/components/edit-form/edit-component/edit-search/edit-search.vue +63 -0
- package/packages/big-table/src/components/edit-form/edit-component/edit-search-more/edit-search-more.vue +69 -0
- package/packages/big-table/src/components/edit-form/edit-component/edit-select/edit-select.vue +51 -0
- package/packages/big-table/src/components/edit-form/edit-component/edit-select-multiple/edit-select-multiple.vue +60 -0
- package/packages/big-table/src/components/edit-form/edit-component/edit-textarea/edit-textarea.vue +34 -0
- package/packages/big-table/src/components/edit-form/edit-component/edit-time-picker/edit-time-picker.vue +42 -0
- package/packages/big-table/src/components/edit-form/edit-component/editFormProps.ts +91 -0
- package/packages/big-table/src/components/edit-form/edit-component/register-com.ts +18 -0
- package/packages/big-table/src/components/edit-form/hooks/useConfigData.ts +79 -0
- package/packages/big-table/src/components/edit-form/hooks/useDateType.ts +184 -0
- package/packages/big-table/src/components/edit-form/hooks/useFormCommon.ts +373 -0
- package/packages/big-table/src/components/edit-form/hooks/useItemDefault.ts +638 -0
- package/packages/big-table/src/components/edit-form/hooks/useSearch.ts +910 -0
- package/packages/big-table/src/components/edit-form/hooks/useValidateRules.ts +387 -0
- package/packages/big-table/src/components/edit-form/interface.ts +53 -0
- package/packages/big-table/src/components/edit-form/types.ts +3 -0
- package/packages/big-table/src/components/edit-form/utils.ts +247 -0
- package/packages/big-table/src/hooks/useBatchEditing.ts +574 -0
- package/packages/big-table/src/hooks/useFormat.ts +612 -0
- package/packages/big-table/src/hooks/useNestTable.ts +109 -0
- package/packages/big-table/src/hooks/useTableParse.ts +169 -0
- package/packages/big-table/src/utils.ts +705 -0
- package/packages/button-print/index.ts +15 -0
- package/packages/button-print/src/ButtonPrint.vue +697 -0
- package/packages/button-print/src/components/IdentityVerification.vue +149 -0
- package/packages/button-print/src/interfaces.ts +19 -0
- package/packages/button-print/src/utils/crypto.js +25 -0
- package/packages/button-print/src/utils/print.es.min.js +1 -0
- package/packages/drag-layout/index.ts +15 -0
- package/packages/drag-layout/src/DragFormLeftItem.vue +131 -0
- package/packages/drag-layout/src/DragFormRightItem.vue +277 -0
- package/packages/drag-layout/src/DragLayout.vue +712 -0
- package/packages/grid/index.ts +17 -0
- package/packages/grid/src/Grid.tsx +22 -0
- package/packages/grid/src/hooks.ts +168 -0
- package/packages/index.ts +36 -0
- package/src/component/svg/index.vue +49 -0
- package/src/core/create.ts +5 -0
- package/src/global/variable.ts +2 -0
- package/src/utils/clickoutside.ts +80 -0
- package/src/utils/crypto.js +25 -0
- package/src/utils/vexutils.ts +811 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { computed, ref, reactive, watch, onMounted } from 'vue'
|
|
2
|
+
import vexutils from '@/utils/vexutils';
|
|
3
|
+
|
|
4
|
+
export const useNestTable = (props: any, state: any, emit: any) => {
|
|
5
|
+
|
|
6
|
+
const isAboutNestTable = computed(() => {
|
|
7
|
+
return props.showNestTable || props.isNestTable;
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
const isExpandTable = computed(() => {
|
|
11
|
+
let { isBatchSelect } = props.columnConfig || {};
|
|
12
|
+
return !props.isNestTable && isBatchSelect == 1;
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
const handleRowId = computed(() => {
|
|
16
|
+
if (state.isTree == 2 || state.isTree == 3) {
|
|
17
|
+
return 'theUniqueKey';
|
|
18
|
+
}
|
|
19
|
+
return props.primaryKey || 'theUniqueKey';
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 子表expand事件
|
|
24
|
+
* @param {*} param0
|
|
25
|
+
* @returns
|
|
26
|
+
*/
|
|
27
|
+
const toggleExpandMethod = ({ expanded, row }: any) => {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 子表expand懒加载
|
|
32
|
+
* @param {*} param0
|
|
33
|
+
* @returns
|
|
34
|
+
*/
|
|
35
|
+
const loadExpandMethod = async ({ row, rowIndex }: any) => {
|
|
36
|
+
try {
|
|
37
|
+
// 子表有数据不再重复请求
|
|
38
|
+
if (row.expandList?.length) {
|
|
39
|
+
return Promise.resolve();
|
|
40
|
+
}
|
|
41
|
+
// 请求数据
|
|
42
|
+
let res = await props.nestTableDataRequest(rowIndex);
|
|
43
|
+
console.log(res, 'loadExpandMethod---res');
|
|
44
|
+
if (!res || !res.status) {
|
|
45
|
+
row.expandList = [];
|
|
46
|
+
row.__emptyItems__ = { noDataTip: res?.data?.resultMsg || "暂无数据" };
|
|
47
|
+
return Promise.reject([])
|
|
48
|
+
}
|
|
49
|
+
let data = res.data || {};
|
|
50
|
+
console.log(data, 'loadExpandMethod---data');
|
|
51
|
+
if (!data) {
|
|
52
|
+
row.expandList = [];
|
|
53
|
+
row.__emptyItems__ = { noDataTip: res?.data?.resultMsg || "暂无数据" };
|
|
54
|
+
return Promise.reject([])
|
|
55
|
+
}
|
|
56
|
+
// 判断结果 { list, oldtableData } or list
|
|
57
|
+
let list, oldtableData;
|
|
58
|
+
if (vexutils.isArray(data)) {
|
|
59
|
+
list = data;
|
|
60
|
+
oldtableData = data;
|
|
61
|
+
} else {
|
|
62
|
+
list = data.list;
|
|
63
|
+
oldtableData = data.oldtableData || data.list;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
row.expandList = list;
|
|
67
|
+
row.oldtableData = oldtableData;
|
|
68
|
+
let key = row[handleRowId.value];
|
|
69
|
+
emit("setNestOriginTableMap", key, oldtableData);
|
|
70
|
+
return Promise.resolve();
|
|
71
|
+
} catch (err: any) {
|
|
72
|
+
console.log(err, 'loadExpandMethod---err');
|
|
73
|
+
row.expandList = [];
|
|
74
|
+
row.__emptyItems__ = { noDataTip: err?.data?.resultMsg || "请求错误" };
|
|
75
|
+
return Promise.reject([]);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 子表行单击事件
|
|
80
|
+
* @param {*} table
|
|
81
|
+
* @param {*} data
|
|
82
|
+
*/
|
|
83
|
+
const nestHandleClickRow = (table: any, data: any) => {
|
|
84
|
+
let checked = table.isCheckedByCheckboxRow(data.row);
|
|
85
|
+
checked = !checked;
|
|
86
|
+
state.checkedRows = []
|
|
87
|
+
table?.setCheckboxRow([data.row], checked);
|
|
88
|
+
// 是否触发子表行单击
|
|
89
|
+
emit("setNestTableClick", checked);
|
|
90
|
+
// 子表行单击 数据
|
|
91
|
+
emit("nestSetSelectRowObj", data.row[handleRowId.value], checked);
|
|
92
|
+
let clickObj = {
|
|
93
|
+
isNestTableTrigger: true,
|
|
94
|
+
checked,
|
|
95
|
+
primaryValue: data.row[handleRowId.value]
|
|
96
|
+
};
|
|
97
|
+
// 行单击事件
|
|
98
|
+
emit("handlerClickRow", data?.row, data.$rowIndex, clickObj);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return {
|
|
102
|
+
isAboutNestTable,
|
|
103
|
+
isExpandTable,
|
|
104
|
+
handleRowId,
|
|
105
|
+
toggleExpandMethod,
|
|
106
|
+
loadExpandMethod,
|
|
107
|
+
nestHandleClickRow
|
|
108
|
+
};
|
|
109
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import vexutils from '@/utils/vexutils';
|
|
2
|
+
|
|
3
|
+
export const useTableParse = (formatData: Function) => {
|
|
4
|
+
// DURATION - 解析时长类型
|
|
5
|
+
const parseDurationValue = (v: any, duration: any) => {
|
|
6
|
+
// < 1 分钟 显示 X秒;< 60 分钟 显示 X分钟;< 24 * 60 分钟 显示 X 小时 X 分钟;< 30 * 24 * 60 分钟 显示X天X小时;< 365 * 24 * 60 显示 X个月X天
|
|
7
|
+
if (!v && v !== 0) return;
|
|
8
|
+
const unitList: any = {
|
|
9
|
+
day: 86400,
|
|
10
|
+
minute: 60,
|
|
11
|
+
hour: 3600,
|
|
12
|
+
second: 1,
|
|
13
|
+
};
|
|
14
|
+
const unit = (duration && unitList[duration]) || 1;
|
|
15
|
+
const value = v * unit || 0;
|
|
16
|
+
const mu = 60;
|
|
17
|
+
if (value < mu) {
|
|
18
|
+
return `${value}秒`;
|
|
19
|
+
}
|
|
20
|
+
const hu = mu * 60;
|
|
21
|
+
if (value < hu) {
|
|
22
|
+
return `${Math.floor(value / 60)}分`;
|
|
23
|
+
}
|
|
24
|
+
const du = hu * 24;
|
|
25
|
+
if (value < du) {
|
|
26
|
+
const v2 = Math.floor(value / 60) % 60;
|
|
27
|
+
return `${Math.floor(value / hu)}小时${v2 ? v2 + "分" : ""}`;
|
|
28
|
+
}
|
|
29
|
+
const MU = du * 30;
|
|
30
|
+
if (value < MU) {
|
|
31
|
+
const v2 = Math.floor(value / hu) % 24;
|
|
32
|
+
return `${Math.floor(value / du)}天${v2 ? v2 + "小时" : ""}`;
|
|
33
|
+
}
|
|
34
|
+
const yu = du * 365;
|
|
35
|
+
if (value < yu) {
|
|
36
|
+
const unit = 30;
|
|
37
|
+
const v1 = Math.floor(value / du / unit);
|
|
38
|
+
const v2 = Math.floor((value - v1 * unit * du) / du);
|
|
39
|
+
return `${v1}个月${v2 ? v2 + "天" : ""}`;
|
|
40
|
+
}
|
|
41
|
+
return `${Math.floor(value / du / 365)}年`;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// COMBINATION - 解析组合组件value
|
|
45
|
+
const parseCombinationValue = (value: any, setting: any) => {
|
|
46
|
+
let data = value ? JSON.parse(value) : [];
|
|
47
|
+
if (!Array.isArray(data)) {
|
|
48
|
+
data = [data];
|
|
49
|
+
}
|
|
50
|
+
const { combinationField: key } = setting;
|
|
51
|
+
if (!key) return value; // <- 如果没有解析字段则直接返回原值
|
|
52
|
+
return data
|
|
53
|
+
.reduce((str: string, item: any) => {
|
|
54
|
+
const v = item[key];
|
|
55
|
+
typeof v !== "undefined" && (str += `,${v}`);
|
|
56
|
+
return str;
|
|
57
|
+
}, "")
|
|
58
|
+
.slice(1);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
// 格式化renderItem
|
|
62
|
+
const formatFieldText = (
|
|
63
|
+
row: any,
|
|
64
|
+
field: any,
|
|
65
|
+
fieldList: any,
|
|
66
|
+
fieldListOriginal: any,
|
|
67
|
+
isTimeAxisRenderNew?: any,
|
|
68
|
+
isTimeAxisExpand?: any
|
|
69
|
+
) => {
|
|
70
|
+
// 轨迹组件需要重新处理 时间显示
|
|
71
|
+
if (isTimeAxisRenderNew && field.fieldType.includes("DATE")) {
|
|
72
|
+
let key = field.columnName;
|
|
73
|
+
if (!isTimeAxisExpand) {
|
|
74
|
+
key = field.columnName + "_fold";
|
|
75
|
+
}
|
|
76
|
+
const text = row[key];
|
|
77
|
+
return text;
|
|
78
|
+
}
|
|
79
|
+
const formatText = (text: string | null) => (text ? text : String(text) === "0" ? "0" : "");
|
|
80
|
+
const haveValue = (val: string | null) => {
|
|
81
|
+
return val !== undefined && val !== "";
|
|
82
|
+
};
|
|
83
|
+
const findField = (columnName: string, fieldList: any) => {
|
|
84
|
+
return fieldList.find((item: any) => item.columnName === columnName);
|
|
85
|
+
};
|
|
86
|
+
const html = formatText(row[field.columnName]);
|
|
87
|
+
|
|
88
|
+
// 主字段没有值,则不展示
|
|
89
|
+
if (!haveValue(html)) {
|
|
90
|
+
return "";
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const { mergedFeildExpression } = field.settingObj;
|
|
94
|
+
if (mergedFeildExpression) {
|
|
95
|
+
const passList: any = [];
|
|
96
|
+
|
|
97
|
+
// 合并字段
|
|
98
|
+
const regexp = /#{(.+?)\}/g;
|
|
99
|
+
let formatHtml = mergedFeildExpression.replace(regexp, (match: any, p1: any) => {
|
|
100
|
+
const findFieldItem = findField(p1, fieldListOriginal);
|
|
101
|
+
passList.push(haveValue(row[p1]) && findFieldItem);
|
|
102
|
+
// 格式化匹配到的合并字段对应的数据项
|
|
103
|
+
if (findFieldItem && formatData) {
|
|
104
|
+
const cloneRow = JSON.parse(JSON.stringify(row));
|
|
105
|
+
const tableData = formatData({
|
|
106
|
+
tableList: [cloneRow],
|
|
107
|
+
fieldList: [findFieldItem],
|
|
108
|
+
btnList: [],
|
|
109
|
+
oldtableData: [row],
|
|
110
|
+
})[0];
|
|
111
|
+
return formatText(tableData[p1]);
|
|
112
|
+
}
|
|
113
|
+
return formatText(row[p1]);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
const pass = passList.every((b: any) => b);
|
|
117
|
+
/* 如果任意次字段值为空 || 无字段权限
|
|
118
|
+
=> 只展示主字段的值 */
|
|
119
|
+
if (!pass) {
|
|
120
|
+
return html;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// 赋值原字段样式
|
|
124
|
+
const originColumnNameColorList = findField(field.columnName, fieldList)?.colorAndIcon || [];
|
|
125
|
+
const findC = originColumnNameColorList.find((c: any) =>
|
|
126
|
+
vexutils.parseCondition(
|
|
127
|
+
c.condition,
|
|
128
|
+
{
|
|
129
|
+
form: {},
|
|
130
|
+
table: {
|
|
131
|
+
...row,
|
|
132
|
+
},
|
|
133
|
+
sys: {},
|
|
134
|
+
},
|
|
135
|
+
fieldList
|
|
136
|
+
)
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
const originColumnNameColor = findC?.color || "inherit";
|
|
140
|
+
const regexp2 = /color(:|;)(.+?)(;|")/g;
|
|
141
|
+
formatHtml = formatHtml.replace(regexp2, (match: any, p1: any, p2: any, p3 = "") => {
|
|
142
|
+
return p3;
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
formatHtml = `<span style="color: ${originColumnNameColor};">${formatHtml}</span>`;
|
|
146
|
+
return formatHtml;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return html;
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
// imgs => imgArr
|
|
153
|
+
const imgs2imgArr = (imgs: any) => {
|
|
154
|
+
if (!imgs) return [];
|
|
155
|
+
|
|
156
|
+
return imgs
|
|
157
|
+
.replace(/(,)(data|http)/g, (match: any, p1: any, p2: any) => {
|
|
158
|
+
return `|${p2}`;
|
|
159
|
+
})
|
|
160
|
+
.split("|");
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
return {
|
|
164
|
+
parseDurationValue,
|
|
165
|
+
parseCombinationValue,
|
|
166
|
+
formatFieldText,
|
|
167
|
+
imgs2imgArr,
|
|
168
|
+
};
|
|
169
|
+
};
|