Commit 6753e24b3d3d4b2f3d8ce85541a1d624d9bf0fb1
Committed by
GitHub
1 parent
b90d3572
feat: 接入vextable组件 (#2508)
Showing
51 changed files
with
2676 additions
and
14 deletions
build/vite/plugin/styleImport.ts
... | ... | @@ -2,7 +2,7 @@ |
2 | 2 | * Introduces component library styles on demand. |
3 | 3 | * https://github.com/anncwb/vite-plugin-style-import |
4 | 4 | */ |
5 | -import { createStyleImportPlugin } from 'vite-plugin-style-import'; | |
5 | +import { createStyleImportPlugin, VxeTableResolve } from 'vite-plugin-style-import'; | |
6 | 6 | |
7 | 7 | export function configStyleImportPlugin(_isBuild: boolean) { |
8 | 8 | if (!_isBuild) { |
... | ... | @@ -77,6 +77,7 @@ export function configStyleImportPlugin(_isBuild: boolean) { |
77 | 77 | }, |
78 | 78 | }, |
79 | 79 | ], |
80 | + resolves: [VxeTableResolve()], | |
80 | 81 | }); |
81 | 82 | return styleImportPlugin; |
82 | 83 | } | ... | ... |
package.json
... | ... | @@ -50,6 +50,7 @@ |
50 | 50 | "crypto-js": "^4.1.1", |
51 | 51 | "dayjs": "^1.11.1", |
52 | 52 | "echarts": "^5.3.2", |
53 | + "exceljs": "^4.3.0", | |
53 | 54 | "intro.js": "^5.1.0", |
54 | 55 | "lodash-es": "^4.17.21", |
55 | 56 | "mockjs": "^1.1.0", |
... | ... | @@ -69,6 +70,9 @@ |
69 | 70 | "vue-json-pretty": "^2.0.6", |
70 | 71 | "vue-router": "^4.0.14", |
71 | 72 | "vue-types": "^4.1.1", |
73 | + "vxe-table": "^4.3.9", | |
74 | + "vxe-table-plugin-export-xlsx": "^3.0.4", | |
75 | + "xe-utils": "^3.5.7", | |
72 | 76 | "xlsx": "^0.18.5" |
73 | 77 | }, |
74 | 78 | "devDependencies": { |
... | ... | @@ -121,6 +125,7 @@ |
121 | 125 | "rimraf": "^3.0.2", |
122 | 126 | "rollup": "^2.70.2", |
123 | 127 | "rollup-plugin-visualizer": "^5.6.0", |
128 | + "sass": "^1.57.1", | |
124 | 129 | "stylelint": "^14.7.1", |
125 | 130 | "stylelint-config-prettier": "^9.0.3", |
126 | 131 | "stylelint-config-recommended": "^7.0.0", | ... | ... |
src/components/VxeTable/index.ts
0 → 100644
1 | +import { withInstall } from '/@/utils'; | |
2 | +import vxeBasicTable from './src/VxeBasicTable'; | |
3 | +import { VXETable } from 'vxe-table'; | |
4 | +import VXETablePluginAntd from './src/components'; | |
5 | +import VXETablePluginExportXLSX from 'vxe-table-plugin-export-xlsx'; | |
6 | +import './src/setting'; | |
7 | + | |
8 | +export const VxeBasicTable = withInstall(vxeBasicTable); | |
9 | +export * from 'vxe-table'; | |
10 | +export * from './src/types'; | |
11 | + | |
12 | +VXETable.use(VXETablePluginAntd).use(VXETablePluginExportXLSX); | ... | ... |
src/components/VxeTable/src/VxeBasicTable.tsx
0 → 100644
1 | +import { defineComponent } from 'vue'; | |
2 | +import { computed, ref } from 'vue'; | |
3 | +import { BasicTableProps } from './types'; | |
4 | +import { omit } from 'lodash'; | |
5 | +import { basicProps } from './props'; | |
6 | +import { ignorePropKeys } from './const'; | |
7 | +import { basicEmits } from './emits'; | |
8 | +import XEUtils from 'xe-utils'; | |
9 | +import type { VxeGridInstance, VxeGridEventProps, GridMethods, TableMethods } from 'vxe-table'; | |
10 | +import { Grid as VxeGrid } from 'vxe-table'; | |
11 | + | |
12 | +import { extendSlots } from '/@/utils/helper/tsxHelper'; | |
13 | +import { gridComponentMethodKeys } from './methods'; | |
14 | + | |
15 | +export default defineComponent({ | |
16 | + name: 'VxeBasicTable', | |
17 | + props: basicProps, | |
18 | + emits: basicEmits, | |
19 | + setup(props, { emit, attrs }) { | |
20 | + const tableElRef = ref<VxeGridInstance>(); | |
21 | + const emitEvents: VxeGridEventProps = {}; | |
22 | + | |
23 | + const extendTableMethods = (methodKeys) => { | |
24 | + const funcs: any = {}; | |
25 | + methodKeys.forEach((name) => { | |
26 | + funcs[name] = (...args: any[]) => { | |
27 | + const $vxegrid: any = tableElRef.value; | |
28 | + if ($vxegrid && $vxegrid[name]) { | |
29 | + return $vxegrid[name](...args); | |
30 | + } | |
31 | + }; | |
32 | + }); | |
33 | + | |
34 | + return funcs; | |
35 | + }; | |
36 | + | |
37 | + const gridExtendTableMethods = extendTableMethods(gridComponentMethodKeys) as GridMethods & | |
38 | + TableMethods; | |
39 | + | |
40 | + basicEmits.forEach((name) => { | |
41 | + const type = XEUtils.camelCase(`on-${name}`) as keyof VxeGridEventProps; | |
42 | + | |
43 | + emitEvents[type] = (...args: any[]) => emit(name, ...args); | |
44 | + }); | |
45 | + | |
46 | + /** | |
47 | + * @description: 二次封装需要的所有属性 | |
48 | + * 1.部分属性需要和全局属性进行合并 | |
49 | + */ | |
50 | + const getBindValues = computed<BasicTableProps>(() => { | |
51 | + const propsData: BasicTableProps = { | |
52 | + ...attrs, | |
53 | + ...props, | |
54 | + }; | |
55 | + | |
56 | + return propsData; | |
57 | + }); | |
58 | + | |
59 | + /** | |
60 | + * @description: Table 所有属性 | |
61 | + */ | |
62 | + const getBindGridValues = computed(() => { | |
63 | + const omitProps = omit(getBindValues.value, ignorePropKeys); | |
64 | + | |
65 | + return { | |
66 | + ...omitProps, | |
67 | + ...getBindGridEvent, | |
68 | + }; | |
69 | + }); | |
70 | + | |
71 | + /** | |
72 | + * @description: 组件外层class | |
73 | + */ | |
74 | + const getWrapperClass = computed(() => { | |
75 | + return [attrs.class]; | |
76 | + }); | |
77 | + | |
78 | + /** | |
79 | + * @description: 重写Vxe-table 方法 | |
80 | + */ | |
81 | + const getBindGridEvent: VxeGridEventProps = { | |
82 | + ...emitEvents, | |
83 | + }; | |
84 | + | |
85 | + return { | |
86 | + getWrapperClass, | |
87 | + getBindGridValues, | |
88 | + tableElRef, | |
89 | + ...gridExtendTableMethods, | |
90 | + }; | |
91 | + }, | |
92 | + render() { | |
93 | + const { tableClass, tableStyle } = this.$props; | |
94 | + | |
95 | + return ( | |
96 | + <div class={`h-full flex flex-col bg-white ${this.getWrapperClass}`}> | |
97 | + <VxeGrid | |
98 | + ref="tableElRef" | |
99 | + class={`vxe-grid_scrollbar px-6 py-4 ${tableClass}`} | |
100 | + style={tableStyle} | |
101 | + {...this.getBindGridValues} | |
102 | + > | |
103 | + {extendSlots(this.$slots)} | |
104 | + </VxeGrid> | |
105 | + </div> | |
106 | + ); | |
107 | + }, | |
108 | +}); | ... | ... |
src/components/VxeTable/src/componentMap.ts
0 → 100644
1 | +import type { Component } from 'vue'; | |
2 | + | |
3 | +import type { ComponentType } from './componentType'; | |
4 | +import { ApiSelect, ApiTreeSelect } from '/@/components/Form'; | |
5 | +import { | |
6 | + Input, | |
7 | + Select, | |
8 | + Radio, | |
9 | + Checkbox, | |
10 | + AutoComplete, | |
11 | + Cascader, | |
12 | + DatePicker, | |
13 | + InputNumber, | |
14 | + Switch, | |
15 | + TimePicker, | |
16 | + TreeSelect, | |
17 | + Rate, | |
18 | + Button, | |
19 | + Empty, | |
20 | +} from 'ant-design-vue'; | |
21 | + | |
22 | +const componentMap = new Map<ComponentType, Component>(); | |
23 | + | |
24 | +componentMap.set('AButton', Button); | |
25 | + | |
26 | +componentMap.set('AInput', Input); | |
27 | +componentMap.set('AInputSearch', Input.Search); | |
28 | +componentMap.set('AInputNumber', InputNumber); | |
29 | +componentMap.set('AAutoComplete', AutoComplete); | |
30 | + | |
31 | +componentMap.set('ASelect', Select); | |
32 | +componentMap.set('ATreeSelect', TreeSelect); | |
33 | +componentMap.set('ASwitch', Switch); | |
34 | +componentMap.set('ARadioGroup', Radio.Group); | |
35 | +componentMap.set('ACheckboxGroup', Checkbox.Group); | |
36 | +componentMap.set('ACascader', Cascader); | |
37 | +componentMap.set('ARate', Rate); | |
38 | + | |
39 | +componentMap.set('ADatePicker', DatePicker); | |
40 | +componentMap.set('AMonthPicker', DatePicker.MonthPicker); | |
41 | +componentMap.set('ARangePicker', DatePicker.RangePicker); | |
42 | +componentMap.set('AWeekPicker', DatePicker.WeekPicker); | |
43 | +componentMap.set('AYearPicker', DatePicker.YearPicker); | |
44 | +componentMap.set('ATimePicker', TimePicker); | |
45 | + | |
46 | +componentMap.set('AApiSelect', ApiSelect); | |
47 | +componentMap.set('AApiTreeSelect', ApiTreeSelect); | |
48 | + | |
49 | +componentMap.set('AEmpty', Empty); | |
50 | + | |
51 | +export function add(compName: ComponentType, component: Component) { | |
52 | + componentMap.set(compName, component); | |
53 | +} | |
54 | + | |
55 | +export function del(compName: ComponentType) { | |
56 | + componentMap.delete(compName); | |
57 | +} | |
58 | + | |
59 | +export { componentMap }; | ... | ... |
src/components/VxeTable/src/componentType.ts
0 → 100644
1 | +export type ComponentType = | |
2 | + | 'AInput' | |
3 | + | 'AInputNumber' | |
4 | + | 'ASelect' | |
5 | + | 'AApiSelect' | |
6 | + | 'ATreeSelect' | |
7 | + | 'AApiTreeSelect' | |
8 | + | 'ARadioGroup' | |
9 | + | 'ACheckboxGroup' | |
10 | + | 'AAutoComplete' | |
11 | + | 'ACascader' | |
12 | + | 'ADatePicker' | |
13 | + | 'AMonthPicker' | |
14 | + | 'ARangePicker' | |
15 | + | 'AWeekPicker' | |
16 | + | 'ATimePicker' | |
17 | + | 'AYearPicker' | |
18 | + | 'ASwitch' | |
19 | + | 'ARate' | |
20 | + | 'AInputSearch' | |
21 | + | 'AButton' | |
22 | + | 'AEmpty'; | ... | ... |
src/components/VxeTable/src/components/AApiSelect.tsx
0 → 100644
1 | +import XEUtils from 'xe-utils'; | |
2 | +import { createDefaultRender, createEditRender, createFormItemRender } from './common'; | |
3 | + | |
4 | +export default { | |
5 | + renderDefault: createDefaultRender({}, (_, params) => { | |
6 | + return { | |
7 | + params: XEUtils.get(params, 'row'), | |
8 | + }; | |
9 | + }), | |
10 | + renderEdit: createEditRender({}, (_, params) => { | |
11 | + return { | |
12 | + params: XEUtils.get(params, 'row'), | |
13 | + }; | |
14 | + }), | |
15 | + renderItemContent: createFormItemRender({}, (_, params) => { | |
16 | + return { | |
17 | + params: XEUtils.get(params, 'row'), | |
18 | + }; | |
19 | + }), | |
20 | +}; | ... | ... |
src/components/VxeTable/src/components/AAutoComplete.tsx
0 → 100644
1 | +import { | |
2 | + createEditRender, | |
3 | + createDefaultRender, | |
4 | + createFilterRender, | |
5 | + createDefaultFilterRender, | |
6 | + createFormItemRender, | |
7 | +} from './common'; | |
8 | + | |
9 | +export default { | |
10 | + autofocus: 'input.ant-input', | |
11 | + renderDefault: createDefaultRender(), | |
12 | + renderEdit: createEditRender(), | |
13 | + renderFilter: createFilterRender(), | |
14 | + defaultFilterMethod: createDefaultFilterRender(), | |
15 | + renderItemContent: createFormItemRender(), | |
16 | +}; | ... | ... |
src/components/VxeTable/src/components/AButton.tsx
0 → 100644
1 | +import { h } from 'vue'; | |
2 | +import { | |
3 | + FormItemContentRenderParams, | |
4 | + FormItemRenderOptions, | |
5 | + VxeGlobalRendererHandles, | |
6 | +} from 'vxe-table'; | |
7 | +import XEUtils from 'xe-utils'; | |
8 | +import { cellText, createEvents, createProps, getComponent } from './common'; | |
9 | + | |
10 | +const COMPONENT_NAME = 'AButton'; | |
11 | + | |
12 | +export function createEditRender() { | |
13 | + return function ( | |
14 | + renderOpts: VxeGlobalRendererHandles.RenderEditOptions, | |
15 | + params: VxeGlobalRendererHandles.RenderEditParams, | |
16 | + ) { | |
17 | + const { attrs } = renderOpts; | |
18 | + const Component = getComponent(COMPONENT_NAME); | |
19 | + | |
20 | + return [ | |
21 | + h(Component, { | |
22 | + ...attrs, | |
23 | + ...createProps(renderOpts, null), | |
24 | + ...createEvents(renderOpts, params), | |
25 | + }), | |
26 | + ]; | |
27 | + }; | |
28 | +} | |
29 | + | |
30 | +export function createDefaultRender() { | |
31 | + return function ( | |
32 | + renderOpts: VxeGlobalRendererHandles.RenderEditOptions, | |
33 | + params: VxeGlobalRendererHandles.RenderEditParams, | |
34 | + ) { | |
35 | + const { attrs } = renderOpts; | |
36 | + const Component = getComponent(COMPONENT_NAME); | |
37 | + | |
38 | + return [ | |
39 | + h( | |
40 | + Component, | |
41 | + { | |
42 | + ...attrs, | |
43 | + ...createProps(renderOpts, null), | |
44 | + ...createEvents(renderOpts, params), | |
45 | + }, | |
46 | + cellText(renderOpts.content), | |
47 | + ), | |
48 | + ]; | |
49 | + }; | |
50 | +} | |
51 | + | |
52 | +export function createFormItemRender() { | |
53 | + return function (renderOpts: FormItemRenderOptions, params: FormItemContentRenderParams) { | |
54 | + const { attrs, content } = renderOpts; | |
55 | + const { property, $form, data } = params; | |
56 | + const props = createProps(renderOpts, null); | |
57 | + const Component = getComponent(COMPONENT_NAME); | |
58 | + | |
59 | + return [ | |
60 | + h( | |
61 | + Component, | |
62 | + { | |
63 | + ...attrs, | |
64 | + ...props, | |
65 | + ...createEvents( | |
66 | + renderOpts, | |
67 | + params, | |
68 | + (value: any) => { | |
69 | + // 处理 model 值双向绑定 | |
70 | + XEUtils.set(data, property, value); | |
71 | + }, | |
72 | + () => { | |
73 | + // 处理 change 事件相关逻辑 | |
74 | + $form.updateStatus({ | |
75 | + ...params, | |
76 | + field: property, | |
77 | + }); | |
78 | + }, | |
79 | + ), | |
80 | + }, | |
81 | + { | |
82 | + default: () => cellText(content || props.content), | |
83 | + }, | |
84 | + ), | |
85 | + ]; | |
86 | + }; | |
87 | +} | |
88 | + | |
89 | +function createToolbarButtonRender() { | |
90 | + return function ( | |
91 | + renderOpts: VxeGlobalRendererHandles.RenderToolOptions, | |
92 | + params: VxeGlobalRendererHandles.RenderButtonParams, | |
93 | + ) { | |
94 | + const { attrs } = renderOpts; | |
95 | + const { button } = params; | |
96 | + const props = createProps(renderOpts, null); | |
97 | + const Component = getComponent(COMPONENT_NAME); | |
98 | + | |
99 | + return [ | |
100 | + h( | |
101 | + Component, | |
102 | + { | |
103 | + ...attrs, | |
104 | + ...props, | |
105 | + ...createEvents(renderOpts, params), | |
106 | + }, | |
107 | + { | |
108 | + default: () => cellText(button?.content || props.content), | |
109 | + }, | |
110 | + ), | |
111 | + ]; | |
112 | + }; | |
113 | +} | |
114 | + | |
115 | +export default { | |
116 | + renderEdit: createEditRender(), | |
117 | + renderDefault: createDefaultRender(), | |
118 | + renderItemContent: createFormItemRender(), | |
119 | + renderToolbarButton: createToolbarButtonRender(), | |
120 | +}; | ... | ... |
src/components/VxeTable/src/components/AButtonGroup.tsx
0 → 100644
1 | +import { | |
2 | + FormItemContentRenderParams, | |
3 | + FormItemRenderOptions, | |
4 | + VxeGlobalRendererHandles, | |
5 | +} from 'vxe-table'; | |
6 | +import { createDefaultRender, createEditRender, createFormItemRender } from './AButton'; | |
7 | + | |
8 | +function createEditButtonRender() { | |
9 | + return function ( | |
10 | + renderOpts: VxeGlobalRendererHandles.RenderEditOptions, | |
11 | + params: VxeGlobalRendererHandles.RenderEditParams, | |
12 | + ) { | |
13 | + const buttonEditRender = createEditRender(); | |
14 | + const { children } = renderOpts; | |
15 | + if (children) { | |
16 | + return children.map( | |
17 | + (childRenderOpts: VxeGlobalRendererHandles.RenderEditOptions) => | |
18 | + buttonEditRender(childRenderOpts, params)[0], | |
19 | + ); | |
20 | + } | |
21 | + return []; | |
22 | + }; | |
23 | +} | |
24 | + | |
25 | +function createDefaultButtonRender() { | |
26 | + return function ( | |
27 | + renderOpts: VxeGlobalRendererHandles.RenderDefaultOptions, | |
28 | + params: VxeGlobalRendererHandles.RenderDefaultParams, | |
29 | + ) { | |
30 | + const buttonDefaultRender = createDefaultRender(); | |
31 | + const { children } = renderOpts; | |
32 | + if (children) { | |
33 | + return children.map( | |
34 | + (childRenderOpts: VxeGlobalRendererHandles.RenderDefaultOptions) => | |
35 | + buttonDefaultRender(childRenderOpts, params)[0], | |
36 | + ); | |
37 | + } | |
38 | + return []; | |
39 | + }; | |
40 | +} | |
41 | + | |
42 | +function createButtonItemRender() { | |
43 | + return function (renderOpts: FormItemRenderOptions, params: FormItemContentRenderParams) { | |
44 | + const buttonItemRender = createFormItemRender(); | |
45 | + const { children } = renderOpts; | |
46 | + if (children) { | |
47 | + return children.map( | |
48 | + (childRenderOpts: FormItemRenderOptions) => buttonItemRender(childRenderOpts, params)[0], | |
49 | + ); | |
50 | + } | |
51 | + return []; | |
52 | + }; | |
53 | +} | |
54 | + | |
55 | +export default { | |
56 | + renderEdit: createEditButtonRender(), | |
57 | + renderDefault: createDefaultButtonRender(), | |
58 | + renderItemContent: createButtonItemRender(), | |
59 | +}; | ... | ... |
src/components/VxeTable/src/components/ACascader.tsx
0 → 100644
1 | +import { VxeGlobalRendererHandles } from 'vxe-table'; | |
2 | +import XEUtils from 'xe-utils'; | |
3 | +import { | |
4 | + createEditRender, | |
5 | + createCellRender, | |
6 | + createFormItemRender, | |
7 | + createExportMethod, | |
8 | +} from './common'; | |
9 | + | |
10 | +function matchCascaderData(index: number, list: any[], values: any[], labels: any[]) { | |
11 | + const val = values[index]; | |
12 | + if (list && values.length > index) { | |
13 | + XEUtils.each(list, (item) => { | |
14 | + if (item.value === val) { | |
15 | + labels.push(item.label); | |
16 | + matchCascaderData(++index, item.children, values, labels); | |
17 | + } | |
18 | + }); | |
19 | + } | |
20 | +} | |
21 | + | |
22 | +function getCascaderCellValue( | |
23 | + renderOpts: VxeGlobalRendererHandles.RenderOptions, | |
24 | + params: VxeGlobalRendererHandles.RenderCellParams, | |
25 | +) { | |
26 | + const { props = {} } = renderOpts; | |
27 | + const { row, column } = params; | |
28 | + const cellValue = XEUtils.get(row, column.field as string); | |
29 | + const values = cellValue || []; | |
30 | + const labels: Array<any> = []; | |
31 | + matchCascaderData(0, props.options, values, labels); | |
32 | + return ( | |
33 | + props.showAllLevels === false ? labels.slice(labels.length - 1, labels.length) : labels | |
34 | + ).join(` ${props.separator || '/'} `); | |
35 | +} | |
36 | + | |
37 | +export default { | |
38 | + renderEdit: createEditRender(), | |
39 | + renderCell: createCellRender(getCascaderCellValue), | |
40 | + renderItemContent: createFormItemRender(), | |
41 | + exportMethod: createExportMethod(getCascaderCellValue), | |
42 | +}; | ... | ... |
src/components/VxeTable/src/components/ACheckboxGroup.tsx
0 → 100644
src/components/VxeTable/src/components/ADatePicker.tsx
0 → 100644
1 | +import { VxeGlobalRendererHandles } from 'vxe-table'; | |
2 | +import XEUtils from 'xe-utils'; | |
3 | +import { | |
4 | + createCellRender, | |
5 | + createEditRender, | |
6 | + createExportMethod, | |
7 | + createFormItemRender, | |
8 | +} from './common'; | |
9 | + | |
10 | +export function getDatePickerCellValue( | |
11 | + renderOpts: VxeGlobalRendererHandles.RenderOptions, | |
12 | + params: VxeGlobalRendererHandles.RenderCellParams | VxeGlobalRendererHandles.ExportMethodParams, | |
13 | + defaultFormat: string, | |
14 | +) { | |
15 | + const { props = {} } = renderOpts; | |
16 | + const { row, column } = params; | |
17 | + let cellValue = XEUtils.get(row, column.field as string); | |
18 | + if (cellValue) { | |
19 | + cellValue = cellValue.format(props.format || defaultFormat); | |
20 | + } | |
21 | + return cellValue; | |
22 | +} | |
23 | + | |
24 | +export default { | |
25 | + renderEdit: createEditRender(), | |
26 | + renderCell: createCellRender(getDatePickerCellValue, () => { | |
27 | + return ['YYYY-MM-DD']; | |
28 | + }), | |
29 | + renderItemContent: createFormItemRender(), | |
30 | + exportMethod: createExportMethod(getDatePickerCellValue, () => { | |
31 | + return ['YYYY-MM-DD']; | |
32 | + }), | |
33 | +}; | ... | ... |
src/components/VxeTable/src/components/AEmpty.tsx
0 → 100644
1 | +import { h } from 'vue'; | |
2 | +import { VxeGlobalRendererHandles } from 'vxe-table'; | |
3 | +import { getComponent } from './common'; | |
4 | + | |
5 | +function createEmptyRender() { | |
6 | + return function (renderOpts: VxeGlobalRendererHandles.RenderEmptyOptions) { | |
7 | + const { name, attrs, props } = renderOpts; | |
8 | + | |
9 | + const Component = getComponent(name); | |
10 | + return [ | |
11 | + h( | |
12 | + 'div', | |
13 | + { | |
14 | + class: 'flex items-center justify-center', | |
15 | + }, | |
16 | + h(Component, { | |
17 | + ...attrs, | |
18 | + ...props, | |
19 | + }), | |
20 | + ), | |
21 | + ]; | |
22 | + }; | |
23 | +} | |
24 | + | |
25 | +export default { | |
26 | + renderEmpty: createEmptyRender(), | |
27 | +}; | ... | ... |
src/components/VxeTable/src/components/AInput.tsx
0 → 100644
1 | +import { | |
2 | + createEditRender, | |
3 | + createDefaultRender, | |
4 | + createFilterRender, | |
5 | + createDefaultFilterRender, | |
6 | + createFormItemRender, | |
7 | +} from './common'; | |
8 | + | |
9 | +export default { | |
10 | + autofocus: 'input.ant-input', | |
11 | + renderDefault: createDefaultRender(), | |
12 | + renderEdit: createEditRender(), | |
13 | + renderFilter: createFilterRender(), | |
14 | + defaultFilterMethod: createDefaultFilterRender(), | |
15 | + renderItemContent: createFormItemRender(), | |
16 | +}; | ... | ... |
src/components/VxeTable/src/components/AInputNumber.tsx
0 → 100644
1 | +import { | |
2 | + createEditRender, | |
3 | + createFilterRender, | |
4 | + createFormItemRender, | |
5 | + createDefaultFilterRender, | |
6 | + createDefaultRender, | |
7 | +} from './common'; | |
8 | + | |
9 | +export default { | |
10 | + autofocus: 'input.ant-input-number-input', | |
11 | + renderDefault: createDefaultRender(), | |
12 | + renderEdit: createEditRender(), | |
13 | + renderFilter: createFilterRender(), | |
14 | + defaultFilterMethod: createDefaultFilterRender(), | |
15 | + renderItemContent: createFormItemRender(), | |
16 | +}; | ... | ... |
src/components/VxeTable/src/components/AInputSearch.tsx
0 → 100644
1 | +import { | |
2 | + createEditRender, | |
3 | + createDefaultRender, | |
4 | + createFilterRender, | |
5 | + createDefaultFilterRender, | |
6 | + createFormItemRender, | |
7 | + createToolbarToolRender, | |
8 | +} from './common'; | |
9 | + | |
10 | +export default { | |
11 | + renderDefault: createDefaultRender(), | |
12 | + renderEdit: createEditRender(), | |
13 | + renderFilter: createFilterRender(), | |
14 | + defaultFilterMethod: createDefaultFilterRender(), | |
15 | + renderItemContent: createFormItemRender(), | |
16 | + renderToolbarTool: createToolbarToolRender(), | |
17 | +}; | ... | ... |
src/components/VxeTable/src/components/AMonthPicker.tsx
0 → 100644
1 | +import { getDatePickerCellValue } from './ADatePicker'; | |
2 | +import { | |
3 | + createCellRender, | |
4 | + createEditRender, | |
5 | + createExportMethod, | |
6 | + createFormItemRender, | |
7 | +} from './common'; | |
8 | + | |
9 | +export default { | |
10 | + renderEdit: createEditRender(), | |
11 | + renderCell: createCellRender(getDatePickerCellValue, () => { | |
12 | + return ['YYYY-MM']; | |
13 | + }), | |
14 | + renderItemContent: createFormItemRender(), | |
15 | + exportMethod: createExportMethod(getDatePickerCellValue, () => { | |
16 | + return ['YYYY-MM']; | |
17 | + }), | |
18 | +}; | ... | ... |
src/components/VxeTable/src/components/ARadioGroup.tsx
0 → 100644
src/components/VxeTable/src/components/ARangePicker.tsx
0 → 100644
1 | +import { VxeColumnPropTypes, VxeGlobalRendererHandles } from 'vxe-table'; | |
2 | +import XEUtils from 'xe-utils'; | |
3 | +import { | |
4 | + createCellRender, | |
5 | + createEditRender, | |
6 | + createExportMethod, | |
7 | + createFormItemRender, | |
8 | +} from './common'; | |
9 | + | |
10 | +function getRangePickerCellValue( | |
11 | + renderOpts: VxeColumnPropTypes.EditRender, | |
12 | + params: VxeGlobalRendererHandles.RenderCellParams | VxeGlobalRendererHandles.ExportMethodParams, | |
13 | +) { | |
14 | + const { props = {} } = renderOpts; | |
15 | + const { row, column } = params; | |
16 | + let cellValue = XEUtils.get(row, column.field as string); | |
17 | + if (cellValue) { | |
18 | + cellValue = XEUtils.map(cellValue, (date: any) => | |
19 | + date.format(props.format || 'YYYY-MM-DD'), | |
20 | + ).join(' ~ '); | |
21 | + } | |
22 | + return cellValue; | |
23 | +} | |
24 | + | |
25 | +export default { | |
26 | + renderEdit: createEditRender(), | |
27 | + renderCell: createCellRender(getRangePickerCellValue), | |
28 | + renderItemContent: createFormItemRender(), | |
29 | + exportMethod: createExportMethod(getRangePickerCellValue), | |
30 | +}; | ... | ... |
src/components/VxeTable/src/components/ARate.tsx
0 → 100644
1 | +import { | |
2 | + createEditRender, | |
3 | + createDefaultRender, | |
4 | + createFilterRender, | |
5 | + createDefaultFilterRender, | |
6 | + createFormItemRender, | |
7 | +} from './common'; | |
8 | + | |
9 | +export default { | |
10 | + renderDefault: createDefaultRender(), | |
11 | + renderEdit: createEditRender(), | |
12 | + renderFilter: createFilterRender(), | |
13 | + defaultFilterMethod: createDefaultFilterRender(), | |
14 | + renderItemContent: createFormItemRender(), | |
15 | +}; | ... | ... |
src/components/VxeTable/src/components/ASelect.tsx
0 → 100644
1 | +import { ComponentOptions, h, resolveComponent } from 'vue'; | |
2 | +import { VxeColumnPropTypes, VxeGlobalRendererHandles } from 'vxe-table'; | |
3 | +import XEUtils from 'xe-utils'; | |
4 | +import { | |
5 | + cellText, | |
6 | + createCellRender, | |
7 | + createEvents, | |
8 | + createProps, | |
9 | + isEmptyValue, | |
10 | + createExportMethod, | |
11 | + createFormItemRender, | |
12 | +} from './common'; | |
13 | + | |
14 | +function renderOptions(options: any[], optionProps: VxeGlobalRendererHandles.RenderOptionProps) { | |
15 | + const labelProp = optionProps.label || 'label'; | |
16 | + const valueProp = optionProps.value || 'value'; | |
17 | + return XEUtils.map(options, (item, oIndex) => { | |
18 | + return h( | |
19 | + resolveComponent('a-select-option') as ComponentOptions, | |
20 | + { | |
21 | + key: oIndex, | |
22 | + value: item[valueProp], | |
23 | + disabled: item.disabled, | |
24 | + }, | |
25 | + { | |
26 | + default: () => cellText(item[labelProp]), | |
27 | + }, | |
28 | + ); | |
29 | + }); | |
30 | +} | |
31 | + | |
32 | +function createEditRender() { | |
33 | + return function ( | |
34 | + renderOpts: VxeColumnPropTypes.EditRender, | |
35 | + params: VxeGlobalRendererHandles.RenderEditParams, | |
36 | + ) { | |
37 | + const { options = [], optionGroups, optionProps = {}, optionGroupProps = {} } = renderOpts; | |
38 | + const { row, column, $table } = params; | |
39 | + const { attrs } = renderOpts; | |
40 | + const cellValue = XEUtils.get(row, column.field as string); | |
41 | + const props = createProps(renderOpts, cellValue); | |
42 | + const ons = createEvents( | |
43 | + renderOpts, | |
44 | + params, | |
45 | + (value: any) => { | |
46 | + // 处理 model 值双向绑定 | |
47 | + XEUtils.set(row, column.field as string, value); | |
48 | + }, | |
49 | + () => { | |
50 | + // 处理 change 事件相关逻辑 | |
51 | + $table.updateStatus(params); | |
52 | + }, | |
53 | + ); | |
54 | + if (optionGroups) { | |
55 | + const groupOptions = optionGroupProps.options || 'options'; | |
56 | + const groupLabel = optionGroupProps.label || 'label'; | |
57 | + return [ | |
58 | + h( | |
59 | + resolveComponent('a-select') as ComponentOptions, | |
60 | + { | |
61 | + ...attrs, | |
62 | + ...props, | |
63 | + ...ons, | |
64 | + }, | |
65 | + { | |
66 | + default: () => { | |
67 | + return XEUtils.map(optionGroups, (group, gIndex) => { | |
68 | + return h( | |
69 | + resolveComponent('a-select-opt-group') as ComponentOptions, | |
70 | + { | |
71 | + key: gIndex, | |
72 | + }, | |
73 | + { | |
74 | + label: () => { | |
75 | + return h('span', {}, group[groupLabel]); | |
76 | + }, | |
77 | + default: () => renderOptions(group[groupOptions], optionProps), | |
78 | + }, | |
79 | + ); | |
80 | + }); | |
81 | + }, | |
82 | + }, | |
83 | + ), | |
84 | + ]; | |
85 | + } | |
86 | + return [ | |
87 | + h( | |
88 | + resolveComponent('a-select') as ComponentOptions, | |
89 | + { | |
90 | + ...props, | |
91 | + ...attrs, | |
92 | + ...ons, | |
93 | + }, | |
94 | + { | |
95 | + default: () => renderOptions(options, optionProps), | |
96 | + }, | |
97 | + ), | |
98 | + ]; | |
99 | + }; | |
100 | +} | |
101 | + | |
102 | +function getSelectCellValue( | |
103 | + renderOpts: VxeGlobalRendererHandles.RenderCellOptions, | |
104 | + params: VxeGlobalRendererHandles.RenderCellParams, | |
105 | +) { | |
106 | + const { | |
107 | + options = [], | |
108 | + optionGroups, | |
109 | + props = {}, | |
110 | + optionProps = {}, | |
111 | + optionGroupProps = {}, | |
112 | + } = renderOpts; | |
113 | + const { row, column } = params; | |
114 | + const labelProp = optionProps.label || 'label'; | |
115 | + const valueProp = optionProps.value || 'value'; | |
116 | + const groupOptions = optionGroupProps.options || 'options'; | |
117 | + const cellValue = XEUtils.get(row, column.field as string); | |
118 | + if (!isEmptyValue(cellValue)) { | |
119 | + return XEUtils.map( | |
120 | + props.mode === 'multiple' ? cellValue : [cellValue], | |
121 | + optionGroups | |
122 | + ? (value) => { | |
123 | + let selectItem; | |
124 | + for (let index = 0; index < optionGroups.length; index++) { | |
125 | + selectItem = XEUtils.find( | |
126 | + optionGroups[index][groupOptions], | |
127 | + (item) => item[valueProp] === value, | |
128 | + ); | |
129 | + if (selectItem) { | |
130 | + break; | |
131 | + } | |
132 | + } | |
133 | + return selectItem ? selectItem[labelProp] : value; | |
134 | + } | |
135 | + : (value) => { | |
136 | + const selectItem = XEUtils.find(options, (item) => item[valueProp] === value); | |
137 | + return selectItem ? selectItem[labelProp] : value; | |
138 | + }, | |
139 | + ).join(', '); | |
140 | + } | |
141 | + return ''; | |
142 | +} | |
143 | + | |
144 | +function createFilterRender() { | |
145 | + return function ( | |
146 | + renderOpts: VxeColumnPropTypes.FilterRender, | |
147 | + params: VxeGlobalRendererHandles.RenderFilterParams, | |
148 | + ) { | |
149 | + const { options = [], optionGroups, optionProps = {}, optionGroupProps = {} } = renderOpts; | |
150 | + const groupOptions = optionGroupProps.options || 'options'; | |
151 | + const groupLabel = optionGroupProps.label || 'label'; | |
152 | + const { column } = params; | |
153 | + const { attrs } = renderOpts; | |
154 | + | |
155 | + return [ | |
156 | + h( | |
157 | + 'div', | |
158 | + { | |
159 | + class: 'vxe-table--filter-antd-wrapper', | |
160 | + }, | |
161 | + optionGroups | |
162 | + ? column.filters.map((option, oIndex) => { | |
163 | + const optionValue = option.data; | |
164 | + const props = createProps(renderOpts, optionValue); | |
165 | + | |
166 | + return h( | |
167 | + resolveComponent('a-select') as ComponentOptions, | |
168 | + { | |
169 | + key: oIndex, | |
170 | + ...attrs, | |
171 | + ...props, | |
172 | + ...createEvents( | |
173 | + renderOpts, | |
174 | + params, | |
175 | + (value: any) => { | |
176 | + // 处理 model 值双向绑定 | |
177 | + option.data = value; | |
178 | + }, | |
179 | + () => { | |
180 | + // 处理 change 事件相关逻辑 | |
181 | + const { $panel } = params; | |
182 | + $panel.changeOption( | |
183 | + null, | |
184 | + props.mode === 'multiple' | |
185 | + ? option.data && option.data.length > 0 | |
186 | + : !XEUtils.eqNull(option.data), | |
187 | + option, | |
188 | + ); | |
189 | + }, | |
190 | + ), | |
191 | + }, | |
192 | + { | |
193 | + default: () => { | |
194 | + return XEUtils.map(optionGroups, (group, gIndex) => { | |
195 | + return h( | |
196 | + resolveComponent('a-select-opt-group') as ComponentOptions, | |
197 | + { | |
198 | + key: gIndex, | |
199 | + }, | |
200 | + { | |
201 | + label: () => { | |
202 | + return h('span', {}, group[groupLabel]); | |
203 | + }, | |
204 | + default: () => renderOptions(group[groupOptions], optionProps), | |
205 | + }, | |
206 | + ); | |
207 | + }); | |
208 | + }, | |
209 | + }, | |
210 | + ); | |
211 | + }) | |
212 | + : column.filters.map((option, oIndex) => { | |
213 | + const optionValue = option.data; | |
214 | + const props = createProps(renderOpts, optionValue); | |
215 | + return h( | |
216 | + resolveComponent('a-select') as ComponentOptions, | |
217 | + { | |
218 | + key: oIndex, | |
219 | + ...attrs, | |
220 | + ...props, | |
221 | + ...createEvents( | |
222 | + renderOpts, | |
223 | + params, | |
224 | + (value: any) => { | |
225 | + // 处理 model 值双向绑定 | |
226 | + option.data = value; | |
227 | + }, | |
228 | + () => { | |
229 | + // 处理 change 事件相关逻辑 | |
230 | + const { $panel } = params; | |
231 | + $panel.changeOption( | |
232 | + null, | |
233 | + props.mode === 'multiple' | |
234 | + ? option.data && option.data.length > 0 | |
235 | + : !XEUtils.eqNull(option.data), | |
236 | + option, | |
237 | + ); | |
238 | + }, | |
239 | + ), | |
240 | + }, | |
241 | + { | |
242 | + default: () => renderOptions(options, optionProps), | |
243 | + }, | |
244 | + ); | |
245 | + }), | |
246 | + ), | |
247 | + ]; | |
248 | + }; | |
249 | +} | |
250 | + | |
251 | +export default { | |
252 | + renderEdit: createEditRender(), | |
253 | + renderCell: createCellRender(getSelectCellValue), | |
254 | + renderFilter: createFilterRender(), | |
255 | + defaultFilterMethod(params) { | |
256 | + const { option, row, column } = params; | |
257 | + const { data } = option; | |
258 | + const { field, filterRender: renderOpts } = column; | |
259 | + const { props = {} } = renderOpts; | |
260 | + const cellValue = XEUtils.get(row, field); | |
261 | + if (props.mode === 'multiple') { | |
262 | + if (XEUtils.isArray(cellValue)) { | |
263 | + return XEUtils.includeArrays(cellValue, data); | |
264 | + } | |
265 | + return data.indexOf(cellValue) > -1; | |
266 | + } | |
267 | + return cellValue == data; | |
268 | + }, | |
269 | + renderItemContent: createFormItemRender(), | |
270 | + exportMethod: createExportMethod(getSelectCellValue), | |
271 | +}; | ... | ... |
src/components/VxeTable/src/components/ASwitch.tsx
0 → 100644
1 | +import { h } from 'vue'; | |
2 | +import XEUtils from 'xe-utils'; | |
3 | +import { | |
4 | + createEditRender, | |
5 | + createDefaultRender, | |
6 | + createProps, | |
7 | + createEvents, | |
8 | + createDefaultFilterRender, | |
9 | + createFormItemRender, | |
10 | + getComponent, | |
11 | +} from './common'; | |
12 | + | |
13 | +export default { | |
14 | + renderDefault: createDefaultRender(), | |
15 | + renderEdit: createEditRender(), | |
16 | + renderFilter(renderOpts, params) { | |
17 | + const { column } = params; | |
18 | + const { name, attrs } = renderOpts; | |
19 | + const Component = getComponent(name); | |
20 | + | |
21 | + return [ | |
22 | + h( | |
23 | + 'div', | |
24 | + { | |
25 | + class: 'vxe-table--filter-antd-wrapper', | |
26 | + }, | |
27 | + column.filters.map((option, oIndex) => { | |
28 | + const optionValue = option.data; | |
29 | + return h(Component, { | |
30 | + key: oIndex, | |
31 | + ...attrs, | |
32 | + ...createProps(renderOpts, optionValue), | |
33 | + ...createEvents( | |
34 | + renderOpts, | |
35 | + params, | |
36 | + (value: any) => { | |
37 | + // 处理 model 值双向绑定 | |
38 | + option.data = value; | |
39 | + }, | |
40 | + () => { | |
41 | + // 处理 change 事件相关逻辑 | |
42 | + const { $panel } = params; | |
43 | + $panel.changeOption(null, XEUtils.isBoolean(option.data), option); | |
44 | + }, | |
45 | + ), | |
46 | + }); | |
47 | + }), | |
48 | + ), | |
49 | + ]; | |
50 | + }, | |
51 | + defaultFilterMethod: createDefaultFilterRender(), | |
52 | + renderItemContent: createFormItemRender(), | |
53 | +}; | ... | ... |
src/components/VxeTable/src/components/ATimePicker.tsx
0 → 100644
1 | +import { getDatePickerCellValue } from './ADatePicker'; | |
2 | +import { | |
3 | + createEditRender, | |
4 | + createCellRender, | |
5 | + createFormItemRender, | |
6 | + createExportMethod, | |
7 | +} from './common'; | |
8 | + | |
9 | +export default { | |
10 | + renderEdit: createEditRender(), | |
11 | + renderCell: createCellRender(getDatePickerCellValue, () => { | |
12 | + return ['HH:mm:ss']; | |
13 | + }), | |
14 | + renderItemContent: createFormItemRender(), | |
15 | + exportMethod: createExportMethod(getDatePickerCellValue, () => { | |
16 | + return ['HH:mm:ss']; | |
17 | + }), | |
18 | +}; | ... | ... |
src/components/VxeTable/src/components/ATreeSelect.tsx
0 → 100644
1 | +import { VxeGlobalRendererHandles } from 'vxe-table'; | |
2 | +import XEUtils from 'xe-utils'; | |
3 | +import { | |
4 | + createEditRender, | |
5 | + createCellRender, | |
6 | + isEmptyValue, | |
7 | + createFormItemRender, | |
8 | + createExportMethod, | |
9 | +} from './common'; | |
10 | + | |
11 | +function getTreeSelectCellValue( | |
12 | + renderOpts: VxeGlobalRendererHandles.RenderOptions, | |
13 | + params: VxeGlobalRendererHandles.RenderCellParams | VxeGlobalRendererHandles.ExportMethodParams, | |
14 | +) { | |
15 | + const { props = {} } = renderOpts; | |
16 | + const { treeData, treeCheckable } = props; | |
17 | + const { row, column } = params; | |
18 | + const cellValue = XEUtils.get(row, column.field as string); | |
19 | + if (!isEmptyValue(cellValue)) { | |
20 | + return XEUtils.map(treeCheckable ? cellValue : [cellValue], (value) => { | |
21 | + const matchObj = XEUtils.findTree(treeData, (item: any) => item.value === value, { | |
22 | + children: 'children', | |
23 | + }); | |
24 | + return matchObj ? matchObj.item.title : value; | |
25 | + }).join(', '); | |
26 | + } | |
27 | + return cellValue; | |
28 | +} | |
29 | + | |
30 | +export default { | |
31 | + renderEdit: createEditRender(), | |
32 | + renderCell: createCellRender(getTreeSelectCellValue), | |
33 | + renderItemContent: createFormItemRender(), | |
34 | + exportMethod: createExportMethod(getTreeSelectCellValue), | |
35 | +}; | ... | ... |
src/components/VxeTable/src/components/AWeekPicker.tsx
0 → 100644
1 | +import { getDatePickerCellValue } from './ADatePicker'; | |
2 | +import { | |
3 | + createEditRender, | |
4 | + createCellRender, | |
5 | + createFormItemRender, | |
6 | + createExportMethod, | |
7 | +} from './common'; | |
8 | + | |
9 | +export default { | |
10 | + renderEdit: createEditRender(), | |
11 | + renderCell: createCellRender(getDatePickerCellValue, () => { | |
12 | + return ['YYYY-WW周']; | |
13 | + }), | |
14 | + renderItemContent: createFormItemRender(), | |
15 | + exportMethod: createExportMethod(getDatePickerCellValue, () => { | |
16 | + return ['YYYY-WW周']; | |
17 | + }), | |
18 | +}; | ... | ... |
src/components/VxeTable/src/components/AYearPicker.tsx
0 → 100644
1 | +import { getDatePickerCellValue } from './ADatePicker'; | |
2 | +import { | |
3 | + createEditRender, | |
4 | + createCellRender, | |
5 | + createFormItemRender, | |
6 | + createExportMethod, | |
7 | +} from './common'; | |
8 | + | |
9 | +export default { | |
10 | + renderEdit: createEditRender(), | |
11 | + renderCell: createCellRender(getDatePickerCellValue, () => { | |
12 | + return ['YYYY']; | |
13 | + }), | |
14 | + renderItemContent: createFormItemRender(), | |
15 | + exportMethod: createExportMethod(getDatePickerCellValue, () => { | |
16 | + return ['YYYY']; | |
17 | + }), | |
18 | +}; | ... | ... |
src/components/VxeTable/src/components/common.tsx
0 → 100644
1 | +import { ComponentOptions, h } from 'vue'; | |
2 | +import { | |
3 | + FormItemContentRenderParams, | |
4 | + FormItemRenderOptions, | |
5 | + VxeGlobalRendererHandles, | |
6 | +} from 'vxe-table'; | |
7 | +import XEUtils from 'xe-utils'; | |
8 | +import { componentMap } from '../componentMap'; | |
9 | +import { ComponentType } from '../componentType'; | |
10 | +import { createPlaceholderMessage } from '../helper'; | |
11 | + | |
12 | +/** | |
13 | + * @description: 获取组件 | |
14 | + */ | |
15 | +export function getComponent(componentName) { | |
16 | + const Component = componentMap.get(componentName as ComponentType); | |
17 | + if (!Component) throw `您还没注册此组件 ${componentName}`; | |
18 | + return Component as ComponentOptions; | |
19 | +} | |
20 | + | |
21 | +export function isEmptyValue(cellValue: any) { | |
22 | + return cellValue === null || cellValue === undefined || cellValue === ''; | |
23 | +} | |
24 | + | |
25 | +export function formatText(cellValue: any) { | |
26 | + return '' + (isEmptyValue(cellValue) ? '' : cellValue); | |
27 | +} | |
28 | + | |
29 | +export function cellText(cellValue: any): string[] { | |
30 | + return [formatText(cellValue)]; | |
31 | +} | |
32 | + | |
33 | +/** | |
34 | + * @description: 方法名转换 | |
35 | + */ | |
36 | +export function getOnName(type: string) { | |
37 | + return 'on' + type.substring(0, 1).toLocaleUpperCase() + type.substring(1); | |
38 | +} | |
39 | + | |
40 | +/** | |
41 | + * @description: 获取组件传值所接受的属性 | |
42 | + */ | |
43 | +function getModelKey(renderOpts: VxeGlobalRendererHandles.RenderOptions) { | |
44 | + let prop = 'value'; | |
45 | + switch (renderOpts.name) { | |
46 | + case 'ASwitch': | |
47 | + prop = 'checked'; | |
48 | + break; | |
49 | + } | |
50 | + return prop; | |
51 | +} | |
52 | + | |
53 | +/** | |
54 | + * @description: 回去双向更新的方法 | |
55 | + */ | |
56 | +function getModelEvent(renderOpts: VxeGlobalRendererHandles.RenderOptions) { | |
57 | + let type = 'update:value'; | |
58 | + switch (renderOpts.name) { | |
59 | + case 'ASwitch': | |
60 | + type = 'update:checked'; | |
61 | + break; | |
62 | + } | |
63 | + return type; | |
64 | +} | |
65 | + | |
66 | +/** | |
67 | + * @description: chang值改变方法 | |
68 | + * @param {} | |
69 | + * @return {*} | |
70 | + * @author: * | |
71 | + */ | |
72 | +function getChangeEvent() { | |
73 | + return 'change'; | |
74 | +} | |
75 | + | |
76 | +function getClickEvent() { | |
77 | + return 'click'; | |
78 | +} | |
79 | +/** | |
80 | + * @description: 获取方法 | |
81 | + * @param {} | |
82 | + * @return {*} | |
83 | + * @author: * | |
84 | + */ | |
85 | +export function createEvents( | |
86 | + renderOpts: VxeGlobalRendererHandles.RenderOptions, | |
87 | + params: VxeGlobalRendererHandles.RenderParams, | |
88 | + inputFunc?: Function, | |
89 | + changeFunc?: Function, | |
90 | + clickFunc?: Function, | |
91 | +) { | |
92 | + const { events } = renderOpts; | |
93 | + const modelEvent = getModelEvent(renderOpts); | |
94 | + const changeEvent = getChangeEvent(); | |
95 | + const clickEvent = getClickEvent(); | |
96 | + const isSameEvent = changeEvent === modelEvent; | |
97 | + const ons: { [type: string]: Function } = {}; | |
98 | + | |
99 | + XEUtils.objectEach(events, (func: Function, key: string) => { | |
100 | + ons[getOnName(key)] = function (...args: any[]) { | |
101 | + func(params, ...args); | |
102 | + }; | |
103 | + }); | |
104 | + if (inputFunc) { | |
105 | + ons[getOnName(modelEvent)] = function (targetEvnt: any) { | |
106 | + inputFunc(targetEvnt); | |
107 | + if (events && events[modelEvent]) { | |
108 | + events[modelEvent](params, targetEvnt); | |
109 | + } | |
110 | + if (isSameEvent && changeFunc) { | |
111 | + changeFunc(targetEvnt); | |
112 | + } | |
113 | + }; | |
114 | + } | |
115 | + if (!isSameEvent && changeFunc) { | |
116 | + ons[getOnName(changeEvent)] = function (...args: any[]) { | |
117 | + changeFunc(...args); | |
118 | + if (events && events[changeEvent]) { | |
119 | + events[changeEvent](params, ...args); | |
120 | + } | |
121 | + }; | |
122 | + } | |
123 | + if (clickFunc) { | |
124 | + ons[getOnName(clickEvent)] = function (...args: any[]) { | |
125 | + clickFunc(...args); | |
126 | + if (events && events[clickEvent]) { | |
127 | + events[clickEvent](params, ...args); | |
128 | + } | |
129 | + }; | |
130 | + } | |
131 | + return ons; | |
132 | +} | |
133 | + | |
134 | +/** | |
135 | + * @description: 获取属性 | |
136 | + */ | |
137 | +export function createProps( | |
138 | + renderOpts: VxeGlobalRendererHandles.RenderOptions, | |
139 | + value: any, | |
140 | + defaultProps?: { [prop: string]: any }, | |
141 | +) { | |
142 | + const name = renderOpts.name as ComponentType; | |
143 | + return XEUtils.assign( | |
144 | + { | |
145 | + placeholder: createPlaceholderMessage(name), | |
146 | + allowClear: true, | |
147 | + }, | |
148 | + defaultProps, | |
149 | + renderOpts.props, | |
150 | + { | |
151 | + [getModelKey(renderOpts)]: value, | |
152 | + }, | |
153 | + ); | |
154 | +} | |
155 | + | |
156 | +/** | |
157 | + * @description: 创建单元格默认显示内容 | |
158 | + */ | |
159 | +export function createDefaultRender( | |
160 | + defaultProps?: { [key: string]: any }, | |
161 | + callBack?: ( | |
162 | + renderOpts: VxeGlobalRendererHandles.RenderDefaultOptions, | |
163 | + params: VxeGlobalRendererHandles.RenderDefaultParams, | |
164 | + ) => Record<string, any>, | |
165 | +) { | |
166 | + return function ( | |
167 | + renderOpts: VxeGlobalRendererHandles.RenderDefaultOptions, | |
168 | + params: VxeGlobalRendererHandles.RenderDefaultParams, | |
169 | + ) { | |
170 | + const { row, column, $table } = params; | |
171 | + const { name, attrs } = renderOpts; | |
172 | + const cellValue = XEUtils.get(row, column.field as string); | |
173 | + const args = (callBack && callBack(renderOpts, params)) ?? {}; | |
174 | + | |
175 | + const Component = getComponent(name); | |
176 | + return [ | |
177 | + h(Component, { | |
178 | + ...attrs, | |
179 | + ...createProps(renderOpts, cellValue, defaultProps), | |
180 | + ...args, | |
181 | + ...createEvents( | |
182 | + renderOpts, | |
183 | + params, | |
184 | + (value: any) => XEUtils.set(row, column.field as string, value), | |
185 | + () => $table.updateStatus(params), | |
186 | + ), | |
187 | + }), | |
188 | + ]; | |
189 | + }; | |
190 | +} | |
191 | + | |
192 | +/** | |
193 | + * @description: 创建编辑单元格 | |
194 | + */ | |
195 | +export function createEditRender( | |
196 | + defaultProps?: { [key: string]: any }, | |
197 | + callBack?: ( | |
198 | + renderOpts: VxeGlobalRendererHandles.RenderEditOptions, | |
199 | + params: VxeGlobalRendererHandles.RenderEditParams, | |
200 | + ) => Record<string, any>, | |
201 | +) { | |
202 | + return function ( | |
203 | + renderOpts: VxeGlobalRendererHandles.RenderEditOptions, | |
204 | + params: VxeGlobalRendererHandles.RenderEditParams, | |
205 | + ) { | |
206 | + const { row, column, $table } = params; | |
207 | + const { name, attrs } = renderOpts; | |
208 | + const cellValue = XEUtils.get(row, column.field as string); | |
209 | + const args = (callBack && callBack(renderOpts, params)) ?? {}; | |
210 | + | |
211 | + const Component = getComponent(name); | |
212 | + return [ | |
213 | + h(Component, { | |
214 | + ...attrs, | |
215 | + ...createProps(renderOpts, cellValue, defaultProps), | |
216 | + ...args, | |
217 | + ...createEvents( | |
218 | + renderOpts, | |
219 | + params, | |
220 | + (value: any) => XEUtils.set(row, column.field as string, value), | |
221 | + () => $table.updateStatus(params), | |
222 | + ), | |
223 | + }), | |
224 | + ]; | |
225 | + }; | |
226 | +} | |
227 | + | |
228 | +/** | |
229 | + * @description: 创建筛选渲染内容 | |
230 | + */ | |
231 | +export function createFilterRender( | |
232 | + defaultProps?: { [key: string]: any }, | |
233 | + callBack?: ( | |
234 | + renderOpts: VxeGlobalRendererHandles.RenderFilterOptions, | |
235 | + params: VxeGlobalRendererHandles.RenderFilterParams, | |
236 | + ) => Record<string, any>, | |
237 | +) { | |
238 | + return function ( | |
239 | + renderOpts: VxeGlobalRendererHandles.RenderFilterOptions, | |
240 | + params: VxeGlobalRendererHandles.RenderFilterParams, | |
241 | + ) { | |
242 | + const { column } = params; | |
243 | + const { name, attrs } = renderOpts; | |
244 | + const args = (callBack && callBack(renderOpts, params)) ?? {}; | |
245 | + | |
246 | + const Component = getComponent(name); | |
247 | + return [ | |
248 | + h( | |
249 | + 'div', | |
250 | + { | |
251 | + class: 'vxe-table--filter-antd-wrapper', | |
252 | + }, | |
253 | + column.filters.map((option, oIndex) => { | |
254 | + const optionValue = option.data; | |
255 | + const checked = !!option.data; | |
256 | + | |
257 | + return h(Component, { | |
258 | + key: oIndex, | |
259 | + ...attrs, | |
260 | + ...createProps(renderOpts, optionValue, defaultProps), | |
261 | + ...args, | |
262 | + ...createEvents( | |
263 | + renderOpts, | |
264 | + params, | |
265 | + (value: any) => { | |
266 | + // 处理 model 值双向绑定 | |
267 | + option.data = value; | |
268 | + }, | |
269 | + () => { | |
270 | + // 处理 change 事件相关逻辑 | |
271 | + const { $panel } = params; | |
272 | + $panel.changeOption(null, checked, option); | |
273 | + }, | |
274 | + ), | |
275 | + }); | |
276 | + }), | |
277 | + ), | |
278 | + ]; | |
279 | + }; | |
280 | +} | |
281 | + | |
282 | +/** | |
283 | + * @description: 默认过滤 | |
284 | + * @param {} | |
285 | + * @return {*} | |
286 | + * @author: * | |
287 | + */ | |
288 | + | |
289 | +export function createDefaultFilterRender() { | |
290 | + return function (params: VxeGlobalRendererHandles.FilterMethodParams) { | |
291 | + const { option, row, column } = params; | |
292 | + const { data } = option; | |
293 | + const cellValue = XEUtils.get(row, column.field as string); | |
294 | + return cellValue === data; | |
295 | + }; | |
296 | +} | |
297 | + | |
298 | +/** | |
299 | + * @description: 创建 form表单渲染 | |
300 | + */ | |
301 | +export function createFormItemRender( | |
302 | + defaultProps?: { [key: string]: any }, | |
303 | + callBack?: ( | |
304 | + renderOpts: FormItemRenderOptions, | |
305 | + params: FormItemContentRenderParams, | |
306 | + ) => Record<string, any>, | |
307 | +) { | |
308 | + return function (renderOpts: FormItemRenderOptions, params: FormItemContentRenderParams) { | |
309 | + const args = (callBack && callBack(renderOpts, params)) ?? {}; | |
310 | + const { data, property, $form } = params; | |
311 | + const { name } = renderOpts; | |
312 | + const { attrs } = renderOpts; | |
313 | + const itemValue = XEUtils.get(data, property); | |
314 | + | |
315 | + const Component = getComponent(name); | |
316 | + return [ | |
317 | + h(Component, { | |
318 | + ...attrs, | |
319 | + ...createProps(renderOpts, itemValue, defaultProps), | |
320 | + ...args, | |
321 | + ...createEvents( | |
322 | + renderOpts, | |
323 | + params, | |
324 | + (value: any) => { | |
325 | + // 处理 model 值双向绑定 | |
326 | + XEUtils.set(data, property, value); | |
327 | + }, | |
328 | + () => { | |
329 | + // 处理 change 事件相关逻辑 | |
330 | + $form.updateStatus({ | |
331 | + ...params, | |
332 | + field: property, | |
333 | + }); | |
334 | + }, | |
335 | + ), | |
336 | + }), | |
337 | + ]; | |
338 | + }; | |
339 | +} | |
340 | + | |
341 | +/** | |
342 | + * @description: cell渲染 | |
343 | + */ | |
344 | +export function createCellRender( | |
345 | + getSelectCellValue: Function, | |
346 | + callBack?: ( | |
347 | + renderOpts: VxeGlobalRendererHandles.RenderCellOptions, | |
348 | + params: VxeGlobalRendererHandles.RenderCellParams, | |
349 | + ) => Array<any>, | |
350 | +) { | |
351 | + return function ( | |
352 | + renderOpts: VxeGlobalRendererHandles.RenderCellOptions, | |
353 | + params: VxeGlobalRendererHandles.RenderCellParams, | |
354 | + ) { | |
355 | + const args = (callBack && callBack(renderOpts, params)) ?? []; | |
356 | + const cellLabel = getSelectCellValue && getSelectCellValue(renderOpts, params, ...args); | |
357 | + const { placeholder } = renderOpts; | |
358 | + | |
359 | + return [ | |
360 | + h( | |
361 | + 'span', | |
362 | + { | |
363 | + class: 'vxe-cell--label', | |
364 | + }, | |
365 | + placeholder && isEmptyValue(cellLabel) | |
366 | + ? [ | |
367 | + h( | |
368 | + 'span', | |
369 | + { | |
370 | + class: 'vxe-cell--placeholder', | |
371 | + }, | |
372 | + formatText(placeholder), | |
373 | + ), | |
374 | + ] | |
375 | + : formatText(cellLabel), | |
376 | + ), | |
377 | + ]; | |
378 | + }; | |
379 | +} | |
380 | + | |
381 | +/** | |
382 | + * @description: 创建 导出渲染 | |
383 | + * @param {} | |
384 | + * @return {*} | |
385 | + * @author: * | |
386 | + */ | |
387 | +export function createExportMethod( | |
388 | + getExportCellValue: Function, | |
389 | + callBack?: (params: VxeGlobalRendererHandles.ExportMethodParams) => Array<any>, | |
390 | +) { | |
391 | + return function (params: VxeGlobalRendererHandles.ExportMethodParams) { | |
392 | + const { row, column, options } = params; | |
393 | + const args = (callBack && callBack(params)) ?? []; | |
394 | + return options && options.original | |
395 | + ? XEUtils.get(row, column.field as string) | |
396 | + : getExportCellValue(column.editRender || column.cellRender, params, ...args); | |
397 | + }; | |
398 | +} | |
399 | + | |
400 | +/** | |
401 | + * @description: 创建单元格默认显示内容 | |
402 | + */ | |
403 | +export function createToolbarToolRender( | |
404 | + defaultProps?: { [key: string]: any }, | |
405 | + callBack?: ( | |
406 | + renderOpts: VxeGlobalRendererHandles.RenderToolOptions, | |
407 | + params: VxeGlobalRendererHandles.RenderToolParams, | |
408 | + ) => Record<string, any>, | |
409 | +) { | |
410 | + return function ( | |
411 | + renderOpts: VxeGlobalRendererHandles.RenderToolOptions, | |
412 | + params: VxeGlobalRendererHandles.RenderToolParams, | |
413 | + ) { | |
414 | + const { name, attrs } = renderOpts; | |
415 | + const args = (callBack && callBack(renderOpts, params)) ?? {}; | |
416 | + | |
417 | + const Component = getComponent(name); | |
418 | + return [ | |
419 | + h(Component, { | |
420 | + ...attrs, | |
421 | + ...createProps(renderOpts, null, defaultProps), | |
422 | + ...args, | |
423 | + ...createEvents(renderOpts, params), | |
424 | + }), | |
425 | + ]; | |
426 | + }; | |
427 | +} | ... | ... |
src/components/VxeTable/src/components/index.tsx
0 → 100644
1 | +import { VXETableCore, VxeGlobalInterceptorHandles } from 'vxe-table'; | |
2 | +import AAutoComplete from './AAutoComplete'; | |
3 | +import AInput from './AInput'; | |
4 | +import AInputNumber from './AInputNumber'; | |
5 | +import ASelect from './ASelect'; | |
6 | +import ACascader from './ACascader'; | |
7 | +import ADatePicker from './ADatePicker'; | |
8 | +import AMonthPicker from './AMonthPicker'; | |
9 | +import ARangePicker from './ARangePicker'; | |
10 | +import AWeekPicker from './AWeekPicker'; | |
11 | +import ATreeSelect from './ATreeSelect'; | |
12 | +import ATimePicker from './ATimePicker'; | |
13 | +import ARate from './ARate'; | |
14 | +import ASwitch from './ASwitch'; | |
15 | +import ARadioGroup from './ARadioGroup'; | |
16 | +import ACheckboxGroup from './ACheckboxGroup'; | |
17 | +import AButton from './AButton'; | |
18 | +import AButtonGroup from './AButtonGroup'; | |
19 | +import AApiSelect from './AApiSelect'; | |
20 | +import AEmpty from './AEmpty'; | |
21 | +import AInputSearch from './AInputSearch'; | |
22 | +import AYearPicker from './AYearPicker'; | |
23 | + | |
24 | +/** | |
25 | + * 检查触发源是否属于目标节点 | |
26 | + */ | |
27 | +function getEventTargetNode(evnt: any, container: HTMLElement, className: string) { | |
28 | + let targetElem; | |
29 | + let target = evnt.target; | |
30 | + while (target && target.nodeType && target !== document) { | |
31 | + if ( | |
32 | + className && | |
33 | + target.className && | |
34 | + target.className.split && | |
35 | + target.className.split(' ').indexOf(className) > -1 | |
36 | + ) { | |
37 | + targetElem = target; | |
38 | + } else if (target === container) { | |
39 | + return { flag: className ? !!targetElem : true, container, targetElem: targetElem }; | |
40 | + } | |
41 | + target = target.parentNode; | |
42 | + } | |
43 | + return { flag: false }; | |
44 | +} | |
45 | + | |
46 | +/** | |
47 | + * 事件兼容性处理 | |
48 | + */ | |
49 | +function handleClearEvent( | |
50 | + params: | |
51 | + | VxeGlobalInterceptorHandles.InterceptorClearFilterParams | |
52 | + | VxeGlobalInterceptorHandles.InterceptorClearActivedParams | |
53 | + | VxeGlobalInterceptorHandles.InterceptorClearAreasParams, | |
54 | +) { | |
55 | + const { $event } = params; | |
56 | + const bodyElem = document.body; | |
57 | + if ( | |
58 | + // 下拉框 | |
59 | + getEventTargetNode($event, bodyElem, 'ant-select-dropdown').flag || | |
60 | + // 级联 | |
61 | + getEventTargetNode($event, bodyElem, 'ant-cascader-menus').flag || | |
62 | + // 日期 | |
63 | + getEventTargetNode($event, bodyElem, 'ant-calendar-picker-container').flag || | |
64 | + // 时间选择 | |
65 | + getEventTargetNode($event, bodyElem, 'ant-time-picker-panel').flag | |
66 | + ) { | |
67 | + return false; | |
68 | + } | |
69 | +} | |
70 | + | |
71 | +/** | |
72 | + * 基于 vxe-table 表格的适配插件,用于兼容 ant-design-vue 组件库 | |
73 | + */ | |
74 | +export const VXETablePluginAntd = { | |
75 | + install(vxetablecore: VXETableCore) { | |
76 | + const { interceptor, renderer } = vxetablecore; | |
77 | + | |
78 | + renderer.mixin({ | |
79 | + AAutoComplete, | |
80 | + AInput, | |
81 | + AInputNumber, | |
82 | + ASelect, | |
83 | + ACascader, | |
84 | + ADatePicker, | |
85 | + AMonthPicker, | |
86 | + ARangePicker, | |
87 | + AWeekPicker, | |
88 | + ATimePicker, | |
89 | + ATreeSelect, | |
90 | + ARate, | |
91 | + ASwitch, | |
92 | + ARadioGroup, | |
93 | + ACheckboxGroup, | |
94 | + AButton, | |
95 | + AButtonGroup, | |
96 | + AApiSelect, | |
97 | + AEmpty, | |
98 | + AInputSearch, | |
99 | + AYearPicker, | |
100 | + }); | |
101 | + | |
102 | + interceptor.add('event.clearFilter', handleClearEvent); | |
103 | + interceptor.add('event.clearActived', handleClearEvent); | |
104 | + interceptor.add('event.clearAreas', handleClearEvent); | |
105 | + }, | |
106 | +}; | |
107 | + | |
108 | +if (typeof window !== 'undefined' && window.VXETable && window.VXETable.use) { | |
109 | + window.VXETable.use(VXETablePluginAntd); | |
110 | +} | |
111 | + | |
112 | +export default VXETablePluginAntd; | ... | ... |
src/components/VxeTable/src/const.ts
0 → 100644
src/components/VxeTable/src/css/common.scss
0 → 100644
src/components/VxeTable/src/css/component.scss
0 → 100644
1 | +%ResetBorder { | |
2 | + border: 0; | |
3 | + box-shadow: none; | |
4 | +} | |
5 | + | |
6 | +%CompWidth { | |
7 | + & > .ant-input, | |
8 | + & > .ant-input-number, | |
9 | + & > .ant-select, | |
10 | + & > .ant-cascader-picker, | |
11 | + & > .ant-calendar-picker, | |
12 | + & > .ant-time-picker { | |
13 | + width: 100%; | |
14 | + } | |
15 | +} | |
16 | +.vxe-form { | |
17 | + .vxe-form--item-content { | |
18 | + @extend %CompWidth; | |
19 | + } | |
20 | +} | |
21 | +.vxe-table--filter-antd-wrapper { | |
22 | + & > .ant-input, | |
23 | + & > .ant-input-number, | |
24 | + & > .ant-select, | |
25 | + & > .ant-rate { | |
26 | + width: 180px; | |
27 | + } | |
28 | +} | |
29 | +.vxe-cell, | |
30 | +.vxe-tree-cell { | |
31 | + @extend %CompWidth; | |
32 | + & > .ant-rate { | |
33 | + vertical-align: bottom; | |
34 | + .anticon-star { | |
35 | + display: block; | |
36 | + } | |
37 | + } | |
38 | +} | |
39 | +.col--valid-error { | |
40 | + & > .vxe-cell, | |
41 | + & > .vxe-tree-cell { | |
42 | + & > .ant-input, | |
43 | + & > .ant-select .ant-input, | |
44 | + & > .ant-select .ant-select-selection, | |
45 | + & > .ant-input-number, | |
46 | + & > .ant-cascader-picker .ant-cascader-input, | |
47 | + & > .ant-calendar-picker .ant-calendar-picker-input { | |
48 | + // border-color: $vxe-table-validate-error-color; | |
49 | + box-shadow: none; | |
50 | + } | |
51 | + } | |
52 | +} | |
53 | +.vxe-table.cell--highlight { | |
54 | + .vxe-cell, | |
55 | + .vxe-tree-cell { | |
56 | + & > .ant-input, | |
57 | + & > .ant-input-number { | |
58 | + padding: 0; | |
59 | + @extend %ResetBorder; | |
60 | + } | |
61 | + & > .ant-select { | |
62 | + .ant-input { | |
63 | + padding: 0; | |
64 | + @extend %ResetBorder; | |
65 | + } | |
66 | + } | |
67 | + & > .ant-input-number { | |
68 | + .ant-input-number-input { | |
69 | + padding: 0; | |
70 | + } | |
71 | + .ant-input-number-handler-wrap, | |
72 | + .ant-input-number-handler-down { | |
73 | + @extend %ResetBorder; | |
74 | + } | |
75 | + } | |
76 | + & > .ant-select { | |
77 | + .ant-select-selection { | |
78 | + @extend %ResetBorder; | |
79 | + .ant-select-selection__rendered { | |
80 | + margin: 0; | |
81 | + } | |
82 | + } | |
83 | + } | |
84 | + & > .ant-cascader-picker { | |
85 | + .ant-input { | |
86 | + @extend %ResetBorder; | |
87 | + } | |
88 | + .ant-cascader-picker-label { | |
89 | + padding: 0; | |
90 | + } | |
91 | + } | |
92 | + & > .ant-calendar-picker { | |
93 | + .ant-calendar-picker-input { | |
94 | + padding: 0; | |
95 | + @extend %ResetBorder; | |
96 | + } | |
97 | + } | |
98 | + & > .ant-time-picker { | |
99 | + .ant-time-picker-input { | |
100 | + padding: 0; | |
101 | + @extend %ResetBorder; | |
102 | + } | |
103 | + } | |
104 | + } | |
105 | +} | ... | ... |
src/components/VxeTable/src/css/index.scss
0 → 100644
src/components/VxeTable/src/css/scrollbar.scss
0 → 100644
1 | +.vxe-grid_scrollbar { | |
2 | + ::-webkit-scrollbar { | |
3 | + width: 8px; | |
4 | + height: 8px; | |
5 | + } | |
6 | + ::-webkit-scrollbar-track { | |
7 | + background-color: #ffffff; | |
8 | + } | |
9 | + ::-webkit-scrollbar-thumb { | |
10 | + background-color: rgba(0, 0, 0, 0.1); | |
11 | + border-radius: 5px; | |
12 | + border: 1px solid #f1f1f1; | |
13 | + box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); | |
14 | + } | |
15 | + ::-webkit-scrollbar-thumb:hover { | |
16 | + background-color: #a8a8a8; | |
17 | + } | |
18 | + ::-webkit-scrollbar-thumb:active { | |
19 | + background-color: #a8a8a8; | |
20 | + } | |
21 | + ::-webkit-scrollbar-corner { | |
22 | + background-color: #ffffff; | |
23 | + } | |
24 | +} | ... | ... |
src/components/VxeTable/src/css/toolbar.scss
0 → 100644
1 | +.vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--footer { | |
2 | + display: flex; | |
3 | +} | |
4 | + | |
5 | +.vxe-toolbar .vxe-tools--wrapper, | |
6 | +.vxe-toolbar .vxe-tools--operate button:first-child { | |
7 | + margin: 0; | |
8 | +} | |
9 | + | |
10 | +.vxe-toolbar .vxe-tools--wrapper, | |
11 | +.vxe-toolbar .vxe-tools--operate .vxe-button { | |
12 | + margin-left: 1px; | |
13 | + border-radius: 0 !important; | |
14 | +} | |
15 | + | |
16 | +.vxe-toolbar .vxe-tools--wrapper, | |
17 | +.vxe-toolbar .vxe-tools--operate button:first-child { | |
18 | + margin-left: 10px; | |
19 | +} | |
20 | + | |
21 | +.vxe-toolbar .vxe-tools--wrapper, | |
22 | +.vxe-toolbar .vxe-tools--operate .vxe-custom--wrapper { | |
23 | + margin-left: 1px; | |
24 | + border-radius: 0 !important; | |
25 | +} | |
26 | + | |
27 | +.vxe-toolbar .vxe-tools--wrapper, | |
28 | +.vxe-toolbar .vxe-tools--operate .vxe-custom--wrapper .vxe-button { | |
29 | + margin-left: 1px; | |
30 | +} | ... | ... |
src/components/VxeTable/src/css/variable.scss
0 → 100644
1 | +$vxe-primary-color: rgb(9, 96, 189) !default; | |
2 | +$vxe-table-row-current-background-color: rgba(9, 96, 189, 0.3); | |
3 | +$vxe-table-row-hover-current-background-color: rgba(9, 96, 189, 0.2); | |
4 | +$vxe-table-column-hover-background-color: rgba(9, 96, 189, 0.3); | |
5 | +$vxe-table-column-current-background-color: rgba(9, 96, 189, 0.2); | |
6 | +$vxe-table-validate-error-color: #f56c6c; | ... | ... |
src/components/VxeTable/src/emits.ts
0 → 100644
1 | +import tableEmits from 'vxe-table/es/table/src/emits'; | |
2 | + | |
3 | +export const basicEmits = [ | |
4 | + ...tableEmits, | |
5 | + 'page-change', | |
6 | + 'form-submit', | |
7 | + 'form-submit-invalid', | |
8 | + 'form-reset', | |
9 | + 'form-collapse', | |
10 | + 'form-toggle-collapse', | |
11 | + 'toolbar-button-click', | |
12 | + 'toolbar-tool-click', | |
13 | + 'zoom', | |
14 | + | |
15 | + //... 如有缺少在此处追加 | |
16 | + // xxx | |
17 | +]; | ... | ... |
src/components/VxeTable/src/helper.ts
0 → 100644
1 | +import { ComponentType } from './componentType'; | |
2 | +import { useI18n } from '/@/hooks/web/useI18n'; | |
3 | + | |
4 | +const { t } = useI18n(); | |
5 | + | |
6 | +/** | |
7 | + * @description: 生成placeholder | |
8 | + */ | |
9 | +export function createPlaceholderMessage(component: ComponentType) { | |
10 | + if (!component) return; | |
11 | + if (component.includes('RangePicker')) { | |
12 | + return [t('common.chooseText'), t('common.chooseText')]; | |
13 | + } | |
14 | + if (component.includes('Input') || component.includes('Complete') || component.includes('Rate')) { | |
15 | + return t('common.inputText'); | |
16 | + } else { | |
17 | + return t('common.chooseText'); | |
18 | + } | |
19 | +} | ... | ... |
src/components/VxeTable/src/methods.ts
0 → 100644
1 | +import { GridMethods, TableMethods } from 'vxe-table'; | |
2 | + | |
3 | +export const gridComponentMethodKeys: (keyof GridMethods | keyof TableMethods)[] = [ | |
4 | + // vxe-grid 部分 | |
5 | + 'dispatchEvent', | |
6 | + 'commitProxy', | |
7 | + 'getFormItems', | |
8 | + 'getPendingRecords', | |
9 | + 'zoom', | |
10 | + 'isMaximized', | |
11 | + 'maximize', | |
12 | + 'revert', | |
13 | + 'getProxyInfo', | |
14 | + | |
15 | + // vxe-table和vxe-grid公共部分 | |
16 | + 'clearAll', | |
17 | + 'syncData', | |
18 | + 'updateData', | |
19 | + 'loadData', | |
20 | + 'reloadData', | |
21 | + 'reloadRow', | |
22 | + 'loadColumn', | |
23 | + 'reloadColumn', | |
24 | + 'getRowNode', | |
25 | + 'getColumnNode', | |
26 | + 'getRowIndex', | |
27 | + 'getVTRowIndex', | |
28 | + 'getVMRowIndex', | |
29 | + 'getColumnIndex', | |
30 | + 'getVTColumnIndex', | |
31 | + 'getVMColumnIndex', | |
32 | + 'createData', | |
33 | + 'createRow', | |
34 | + 'revertData', | |
35 | + 'clearData', | |
36 | + 'isInsertByRow', | |
37 | + 'isUpdateByRow', | |
38 | + 'getColumns', | |
39 | + 'getColumnById', | |
40 | + 'getColumnByField', | |
41 | + 'getTableColumn', | |
42 | + 'getData', | |
43 | + 'getCheckboxRecords', | |
44 | + 'getParentRow', | |
45 | + 'getRowSeq', | |
46 | + 'getRowById', | |
47 | + 'getRowid', | |
48 | + 'getTableData', | |
49 | + 'hideColumn', | |
50 | + 'showColumn', | |
51 | + 'resetColumn', | |
52 | + 'refreshColumn', | |
53 | + 'refreshScroll', | |
54 | + 'recalculate', | |
55 | + 'closeTooltip', | |
56 | + 'isAllCheckboxChecked', | |
57 | + 'isAllCheckboxIndeterminate', | |
58 | + 'getCheckboxIndeterminateRecords', | |
59 | + 'setCheckboxRow', | |
60 | + 'isCheckedByCheckboxRow', | |
61 | + 'isIndeterminateByCheckboxRow', | |
62 | + 'toggleCheckboxRow', | |
63 | + 'setAllCheckboxRow', | |
64 | + 'getRadioReserveRecord', | |
65 | + 'clearRadioReserve', | |
66 | + 'getCheckboxReserveRecords', | |
67 | + 'clearCheckboxReserve', | |
68 | + 'toggleAllCheckboxRow', | |
69 | + 'clearCheckboxRow', | |
70 | + 'setCurrentRow', | |
71 | + 'isCheckedByRadioRow', | |
72 | + 'setRadioRow', | |
73 | + 'clearCurrentRow', | |
74 | + 'clearRadioRow', | |
75 | + 'getCurrentRecord', | |
76 | + 'getRadioRecord', | |
77 | + 'getCurrentColumn', | |
78 | + 'setCurrentColumn', | |
79 | + 'clearCurrentColumn', | |
80 | + 'sort', | |
81 | + 'clearSort', | |
82 | + 'isSort', | |
83 | + 'getSortColumns', | |
84 | + 'closeFilter', | |
85 | + 'isFilter', | |
86 | + 'isRowExpandLoaded', | |
87 | + 'clearRowExpandLoaded', | |
88 | + 'reloadRowExpand', | |
89 | + 'reloadRowExpand', | |
90 | + 'toggleRowExpand', | |
91 | + 'setAllRowExpand', | |
92 | + 'setRowExpand', | |
93 | + 'isExpandByRow', | |
94 | + 'clearRowExpand', | |
95 | + 'clearRowExpandReserve', | |
96 | + 'getRowExpandRecords', | |
97 | + 'getTreeExpandRecords', | |
98 | + 'isTreeExpandLoaded', | |
99 | + 'clearTreeExpandLoaded', | |
100 | + 'reloadTreeExpand', | |
101 | + 'reloadTreeChilds', | |
102 | + 'toggleTreeExpand', | |
103 | + 'setAllTreeExpand', | |
104 | + 'setTreeExpand', | |
105 | + 'isTreeExpandByRow', | |
106 | + 'clearTreeExpand', | |
107 | + 'clearTreeExpandReserve', | |
108 | + 'getScroll', | |
109 | + 'scrollTo', | |
110 | + 'scrollToRow', | |
111 | + 'scrollToColumn', | |
112 | + 'clearScroll', | |
113 | + 'updateFooter', | |
114 | + 'updateStatus', | |
115 | + 'setMergeCells', | |
116 | + 'removeInsertRow', | |
117 | + 'removeMergeCells', | |
118 | + 'getMergeCells', | |
119 | + 'clearMergeCells', | |
120 | + 'setMergeFooterItems', | |
121 | + 'removeMergeFooterItems', | |
122 | + 'getMergeFooterItems', | |
123 | + 'clearMergeFooterItems', | |
124 | + 'openTooltip', | |
125 | + 'focus', | |
126 | + 'blur', | |
127 | + 'connect', | |
128 | + | |
129 | + //... 如有缺少在此处追加 | |
130 | + // xxx | |
131 | +]; | ... | ... |
src/components/VxeTable/src/props.ts
0 → 100644
1 | +import { VxeGridPropTypes, VxeTablePropTypes } from 'vxe-table'; | |
2 | +import tableProps from 'vxe-table/es/table/src/props'; | |
3 | +import { CSSProperties } from 'vue'; | |
4 | + | |
5 | +/** | |
6 | + * @description: table二次开发需要后,需要接受的所有prop属性 | |
7 | + */ | |
8 | +export const basicProps = { | |
9 | + ...tableProps, | |
10 | + columns: Array as PropType<VxeGridPropTypes.Columns>, | |
11 | + pagerConfig: { | |
12 | + type: Object as PropType<VxeGridPropTypes.PagerConfig>, | |
13 | + default: () => ({}), | |
14 | + }, | |
15 | + proxyConfig: { | |
16 | + type: Object as PropType<VxeGridPropTypes.ProxyConfig>, | |
17 | + default: () => ({}), | |
18 | + }, | |
19 | + toolbarConfig: { | |
20 | + type: Object as PropType<VxeGridPropTypes.ToolbarConfig>, | |
21 | + default: () => ({}), | |
22 | + }, | |
23 | + formConfig: { | |
24 | + type: Object as PropType<VxeGridPropTypes.FormConfig>, | |
25 | + default: () => ({}), | |
26 | + }, | |
27 | + zoomConfig: { | |
28 | + type: Object as PropType<VxeGridPropTypes.ZoomConfig>, | |
29 | + default: () => ({}), | |
30 | + }, | |
31 | + printConfig: { | |
32 | + type: Object as PropType<VxeTablePropTypes.PrintConfig>, | |
33 | + default: () => ({}), | |
34 | + }, | |
35 | + exportConfig: { | |
36 | + type: Object as PropType<VxeTablePropTypes.ExportConfig>, | |
37 | + default: () => ({}), | |
38 | + }, | |
39 | + importConfig: { | |
40 | + type: Object as PropType<VxeTablePropTypes.ImportConfig>, | |
41 | + default: () => ({}), | |
42 | + }, | |
43 | + size: String as PropType<VxeGridPropTypes.Size>, | |
44 | + tableClass: { | |
45 | + type: String, | |
46 | + default: '', | |
47 | + }, | |
48 | + tableStyle: { | |
49 | + type: Object as PropType<CSSProperties>, | |
50 | + default: () => ({}), | |
51 | + }, | |
52 | +}; | ... | ... |
src/components/VxeTable/src/setting.ts
0 → 100644
src/components/VxeTable/src/types.ts
0 → 100644
src/components/registerGlobComp.ts
1 | 1 | import type { App } from 'vue'; |
2 | 2 | import { Button } from './Button'; |
3 | 3 | import { Input, Layout } from 'ant-design-vue'; |
4 | +import VXETable from 'vxe-table'; | |
4 | 5 | |
5 | 6 | export function registerGlobComp(app: App) { |
6 | - app.use(Input).use(Button).use(Layout); | |
7 | + app.use(Input).use(Button).use(Layout).use(VXETable); | |
7 | 8 | } | ... | ... |
src/locales/lang/en/routes/demo.ts
src/locales/lang/zh-CN/routes/demo.ts
src/main.ts
src/router/routes/modules/demo/comp.ts
... | ... | @@ -255,6 +255,14 @@ const comp: AppRouteModule = { |
255 | 255 | title: t('routes.demo.table.resizeParentHeightTable'), |
256 | 256 | }, |
257 | 257 | }, |
258 | + { | |
259 | + path: 'vxeTable', | |
260 | + name: 'VxeTableDemo', | |
261 | + component: () => import('/@/views/demo/table/VxeTable.vue'), | |
262 | + meta: { | |
263 | + title: t('routes.demo.table.vxeTable'), | |
264 | + }, | |
265 | + }, | |
258 | 266 | ], |
259 | 267 | }, |
260 | 268 | { | ... | ... |
src/settings/componentSetting.ts
... | ... | @@ -42,6 +42,52 @@ export default { |
42 | 42 | return data; |
43 | 43 | }, |
44 | 44 | }, |
45 | + vxeTable: { | |
46 | + table: { | |
47 | + border: true, | |
48 | + stripe: true, | |
49 | + columnConfig: { | |
50 | + resizable: true, | |
51 | + isCurrent: true, | |
52 | + isHover: true, | |
53 | + }, | |
54 | + rowConfig: { | |
55 | + isCurrent: true, | |
56 | + isHover: true, | |
57 | + }, | |
58 | + emptyRender: { | |
59 | + name: 'AEmpty', | |
60 | + }, | |
61 | + printConfig: {}, | |
62 | + exportConfig: {}, | |
63 | + customConfig: { | |
64 | + storage: true, | |
65 | + }, | |
66 | + }, | |
67 | + grid: { | |
68 | + toolbarConfig: { | |
69 | + enabled: true, | |
70 | + export: true, | |
71 | + zoom: true, | |
72 | + print: true, | |
73 | + refresh: true, | |
74 | + custom: true, | |
75 | + }, | |
76 | + pagerConfig: { | |
77 | + pageSizes: [20, 50, 100, 500], | |
78 | + pageSize: 20, | |
79 | + autoHidden: true, | |
80 | + }, | |
81 | + proxyConfig: { | |
82 | + form: true, | |
83 | + props: { | |
84 | + result: 'items', | |
85 | + total: 'total', | |
86 | + }, | |
87 | + }, | |
88 | + zoomConfig: {}, | |
89 | + }, | |
90 | + }, | |
45 | 91 | // scrollbar setting |
46 | 92 | scrollbar: { |
47 | 93 | // Whether to use native scroll bar | ... | ... |
src/views/demo/table/VxeTable.vue
0 → 100644
1 | +<template> | |
2 | + <PageWrapper | |
3 | + title="VxeTable表格" | |
4 | + content="只展示部分操作,详细功能请查看VxeTable官网事例" | |
5 | + contentFullHeight | |
6 | + fixedHeight | |
7 | + > | |
8 | + <VxeBasicTable ref="tableRef" v-bind="gridOptions"> | |
9 | + <template #action="{ row }"> | |
10 | + <TableAction :actions="createActions(row)" /> | |
11 | + </template> | |
12 | + </VxeBasicTable> | |
13 | + </PageWrapper> | |
14 | +</template> | |
15 | +<script lang="ts" setup> | |
16 | + import { reactive, ref } from 'vue'; | |
17 | + import { TableAction, ActionItem } from '/@/components/Table'; | |
18 | + import { PageWrapper } from '/@/components/Page'; | |
19 | + import { useMessage } from '/@/hooks/web/useMessage'; | |
20 | + import { vxeTableColumns, vxeTableFormSchema } from './tableData'; | |
21 | + import { VxeBasicTable, BasicTableProps, VxeGridInstance } from '/@/components/VxeTable'; | |
22 | + import { demoListApi } from '/@/api/demo/table'; | |
23 | + | |
24 | + const { createMessage } = useMessage(); | |
25 | + | |
26 | + const tableRef = ref<VxeGridInstance>(); | |
27 | + | |
28 | + const gridOptions = reactive<BasicTableProps>({ | |
29 | + id: 'VxeTable', | |
30 | + editConfig: { trigger: 'click', mode: 'cell', showStatus: true }, | |
31 | + columns: vxeTableColumns, | |
32 | + toolbarConfig: { | |
33 | + buttons: [ | |
34 | + { | |
35 | + content: '自定义按钮', | |
36 | + buttonRender: { | |
37 | + name: 'AButton', | |
38 | + props: { | |
39 | + type: 'primary', | |
40 | + }, | |
41 | + events: { | |
42 | + click: () => { | |
43 | + createMessage.success('点击了自定义按钮'); | |
44 | + }, | |
45 | + }, | |
46 | + }, | |
47 | + }, | |
48 | + ], | |
49 | + }, | |
50 | + formConfig: { | |
51 | + enabled: true, | |
52 | + items: vxeTableFormSchema, | |
53 | + }, | |
54 | + height: 'auto', | |
55 | + proxyConfig: { | |
56 | + ajax: { | |
57 | + query: async ({ page, form }) => { | |
58 | + return demoListApi({ | |
59 | + pageNum: page.currentPage, | |
60 | + pageSize: page.pageSize, | |
61 | + ...form, | |
62 | + }); | |
63 | + }, | |
64 | + queryAll: async ({ form }) => { | |
65 | + const data = await demoListApi(form); | |
66 | + return data; | |
67 | + }, | |
68 | + }, | |
69 | + }, | |
70 | + }); | |
71 | + | |
72 | + // 操作按钮(权限控制) | |
73 | + const createActions = (record) => { | |
74 | + const actions: ActionItem[] = [ | |
75 | + { | |
76 | + label: '详情', | |
77 | + onClick: () => { | |
78 | + console.log(record); | |
79 | + }, | |
80 | + }, | |
81 | + { | |
82 | + label: '编辑', | |
83 | + onClick: () => {}, | |
84 | + }, | |
85 | + { | |
86 | + label: '删除', | |
87 | + color: 'error', | |
88 | + popConfirm: { | |
89 | + title: '是否确认删除', | |
90 | + confirm: () => {}, | |
91 | + }, | |
92 | + }, | |
93 | + ]; | |
94 | + | |
95 | + return actions; | |
96 | + }; | |
97 | +</script> | ... | ... |
src/views/demo/table/tableData.tsx
1 | +import { optionsListApi } from '/@/api/demo/select'; | |
1 | 2 | import { FormProps, FormSchema } from '/@/components/Table'; |
2 | 3 | import { BasicColumn } from '/@/components/Table/src/types/table'; |
4 | +import { VxeFormItemProps, VxeGridPropTypes } from '/@/components/VxeTable'; | |
3 | 5 | |
4 | 6 | export function getBasicColumns(): BasicColumn[] { |
5 | 7 | return [ |
... | ... | @@ -302,3 +304,111 @@ export function getTreeTableData() { |
302 | 304 | return arr; |
303 | 305 | })(); |
304 | 306 | } |
307 | + | |
308 | +export const vxeTableColumns: VxeGridPropTypes.Columns = [ | |
309 | + { | |
310 | + title: '序号', | |
311 | + type: 'seq', | |
312 | + fixed: 'left', | |
313 | + width: '50', | |
314 | + align: 'center', | |
315 | + }, | |
316 | + { | |
317 | + title: '固定列', | |
318 | + field: 'name', | |
319 | + width: 150, | |
320 | + showOverflow: 'tooltip', | |
321 | + fixed: 'left', | |
322 | + }, | |
323 | + { | |
324 | + title: '自适应列', | |
325 | + field: 'address', | |
326 | + }, | |
327 | + { | |
328 | + title: '自定义列(自定义导出)', | |
329 | + field: 'no', | |
330 | + width: 200, | |
331 | + showOverflow: 'tooltip', | |
332 | + align: 'center', | |
333 | + slots: { | |
334 | + default: ({ row }) => { | |
335 | + const text = `自定义${row.no}`; | |
336 | + return [<div class="text-red-500">{text}</div>]; | |
337 | + }, | |
338 | + }, | |
339 | + exportMethod: ({ row }) => { | |
340 | + return `自定义${row.no}导出`; | |
341 | + }, | |
342 | + }, | |
343 | + { | |
344 | + title: '自定义编辑', | |
345 | + width: 150, | |
346 | + field: 'name1', | |
347 | + align: 'center', | |
348 | + editRender: { | |
349 | + name: 'AInput', | |
350 | + placeholder: '请点击输入', | |
351 | + }, | |
352 | + }, | |
353 | + { | |
354 | + title: '开始时间', | |
355 | + width: 150, | |
356 | + field: 'beginTime', | |
357 | + showOverflow: 'tooltip', | |
358 | + align: 'center', | |
359 | + }, | |
360 | + { | |
361 | + title: '结束时间', | |
362 | + width: 150, | |
363 | + field: 'endTime', | |
364 | + showOverflow: 'tooltip', | |
365 | + align: 'center', | |
366 | + }, | |
367 | + { | |
368 | + width: 160, | |
369 | + title: '操作', | |
370 | + align: 'center', | |
371 | + slots: { default: 'action' }, | |
372 | + fixed: 'right', | |
373 | + }, | |
374 | +]; | |
375 | + | |
376 | +export const vxeTableFormSchema: VxeFormItemProps[] = [ | |
377 | + { | |
378 | + field: 'field0', | |
379 | + title: 'field0', | |
380 | + itemRender: { | |
381 | + name: 'AInput', | |
382 | + }, | |
383 | + span: 6, | |
384 | + }, | |
385 | + { | |
386 | + field: 'field1', | |
387 | + title: 'field1', | |
388 | + itemRender: { | |
389 | + name: 'AApiSelect', | |
390 | + props: { | |
391 | + api: optionsListApi, | |
392 | + resultField: 'list', | |
393 | + labelField: 'name', | |
394 | + valueField: 'id', | |
395 | + }, | |
396 | + }, | |
397 | + span: 6, | |
398 | + }, | |
399 | + { | |
400 | + span: 12, | |
401 | + align: 'right', | |
402 | + className: '!pr-0', | |
403 | + itemRender: { | |
404 | + name: 'AButtonGroup', | |
405 | + children: [ | |
406 | + { | |
407 | + props: { type: 'primary', content: '查询', htmlType: 'submit' }, | |
408 | + attrs: { class: 'mr-2' }, | |
409 | + }, | |
410 | + { props: { type: 'default', htmlType: 'reset', content: '重置' } }, | |
411 | + ], | |
412 | + }, | |
413 | + }, | |
414 | +]; | ... | ... |
yarn.lock
... | ... | @@ -1151,6 +1151,31 @@ |
1151 | 1151 | minimatch "^3.1.2" |
1152 | 1152 | strip-json-comments "^3.1.1" |
1153 | 1153 | |
1154 | +"@fast-csv/format@4.3.5": | |
1155 | + version "4.3.5" | |
1156 | + resolved "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz#90d83d1b47b6aaf67be70d6118f84f3e12ee1ff3" | |
1157 | + integrity sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A== | |
1158 | + dependencies: | |
1159 | + "@types/node" "^14.0.1" | |
1160 | + lodash.escaperegexp "^4.1.2" | |
1161 | + lodash.isboolean "^3.0.3" | |
1162 | + lodash.isequal "^4.5.0" | |
1163 | + lodash.isfunction "^3.0.9" | |
1164 | + lodash.isnil "^4.0.0" | |
1165 | + | |
1166 | +"@fast-csv/parse@4.3.6": | |
1167 | + version "4.3.6" | |
1168 | + resolved "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz#ee47d0640ca0291034c7aa94039a744cfb019264" | |
1169 | + integrity sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA== | |
1170 | + dependencies: | |
1171 | + "@types/node" "^14.0.1" | |
1172 | + lodash.escaperegexp "^4.1.2" | |
1173 | + lodash.groupby "^4.6.0" | |
1174 | + lodash.isfunction "^3.0.9" | |
1175 | + lodash.isnil "^4.0.0" | |
1176 | + lodash.isundefined "^3.0.1" | |
1177 | + lodash.uniq "^4.5.0" | |
1178 | + | |
1154 | 1179 | "@humanwhocodes/config-array@^0.9.2": |
1155 | 1180 | version "0.9.5" |
1156 | 1181 | resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" |
... | ... | @@ -1719,6 +1744,11 @@ |
1719 | 1744 | resolved "https://registry.npmmirror.com/@types/node/-/node-18.0.3.tgz#463fc47f13ec0688a33aec75d078a0541a447199" |
1720 | 1745 | integrity sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ== |
1721 | 1746 | |
1747 | +"@types/node@^14.0.1": | |
1748 | + version "14.18.36" | |
1749 | + resolved "https://registry.npmjs.org/@types/node/-/node-14.18.36.tgz#c414052cb9d43fab67d679d5f3c641be911f5835" | |
1750 | + integrity sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ== | |
1751 | + | |
1722 | 1752 | "@types/node@^14.17.1": |
1723 | 1753 | version "14.18.21" |
1724 | 1754 | resolved "https://registry.npmmirror.com/@types/node/-/node-14.18.21.tgz#0155ee46f6be28b2ff0342ca1a9b9fd4468bef41" |
... | ... | @@ -2355,6 +2385,35 @@ archive-type@^4.0.0: |
2355 | 2385 | dependencies: |
2356 | 2386 | file-type "^4.2.0" |
2357 | 2387 | |
2388 | +archiver-utils@^2.1.0: | |
2389 | + version "2.1.0" | |
2390 | + resolved "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" | |
2391 | + integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== | |
2392 | + dependencies: | |
2393 | + glob "^7.1.4" | |
2394 | + graceful-fs "^4.2.0" | |
2395 | + lazystream "^1.0.0" | |
2396 | + lodash.defaults "^4.2.0" | |
2397 | + lodash.difference "^4.5.0" | |
2398 | + lodash.flatten "^4.4.0" | |
2399 | + lodash.isplainobject "^4.0.6" | |
2400 | + lodash.union "^4.6.0" | |
2401 | + normalize-path "^3.0.0" | |
2402 | + readable-stream "^2.0.0" | |
2403 | + | |
2404 | +archiver@^5.0.0: | |
2405 | + version "5.3.1" | |
2406 | + resolved "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz#21e92811d6f09ecfce649fbefefe8c79e57cbbb6" | |
2407 | + integrity sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w== | |
2408 | + dependencies: | |
2409 | + archiver-utils "^2.1.0" | |
2410 | + async "^3.2.3" | |
2411 | + buffer-crc32 "^0.2.1" | |
2412 | + readable-stream "^3.6.0" | |
2413 | + readdir-glob "^1.0.0" | |
2414 | + tar-stream "^2.2.0" | |
2415 | + zip-stream "^4.1.0" | |
2416 | + | |
2358 | 2417 | arg@^4.1.0: |
2359 | 2418 | version "4.1.3" |
2360 | 2419 | resolved "https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" |
... | ... | @@ -2530,6 +2589,11 @@ before-after-hook@^2.2.0: |
2530 | 2589 | resolved "https://registry.npmmirror.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" |
2531 | 2590 | integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== |
2532 | 2591 | |
2592 | +big-integer@^1.6.17: | |
2593 | + version "1.6.51" | |
2594 | + resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" | |
2595 | + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== | |
2596 | + | |
2533 | 2597 | big.js@^5.2.2: |
2534 | 2598 | version "5.2.2" |
2535 | 2599 | resolved "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" |
... | ... | @@ -2594,6 +2658,14 @@ binary-mirror-config@^1: |
2594 | 2658 | resolved "https://registry.npmmirror.com/binary-mirror-config/-/binary-mirror-config-1.41.0.tgz#b68032588392bee9262971f977922d075513964b" |
2595 | 2659 | integrity sha512-ZiIhR1s6Sv1Fv6qCQqfPjx0Cj86BgFlhqNxZgHkQOWcxJcMbO3mj1iqsuVjowYqJqeZL8e52+IEv7IRnSX6T6w== |
2596 | 2660 | |
2661 | +binary@~0.3.0: | |
2662 | + version "0.3.0" | |
2663 | + resolved "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" | |
2664 | + integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== | |
2665 | + dependencies: | |
2666 | + buffers "~0.1.1" | |
2667 | + chainsaw "~0.1.0" | |
2668 | + | |
2597 | 2669 | bl@^1.0.0: |
2598 | 2670 | version "1.2.3" |
2599 | 2671 | resolved "https://registry.npmmirror.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" |
... | ... | @@ -2602,7 +2674,7 @@ bl@^1.0.0: |
2602 | 2674 | readable-stream "^2.3.5" |
2603 | 2675 | safe-buffer "^5.1.1" |
2604 | 2676 | |
2605 | -bl@^4.1.0: | |
2677 | +bl@^4.0.3, bl@^4.1.0: | |
2606 | 2678 | version "4.1.0" |
2607 | 2679 | resolved "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" |
2608 | 2680 | integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== |
... | ... | @@ -2616,6 +2688,11 @@ bluebird@^3.5.0: |
2616 | 2688 | resolved "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" |
2617 | 2689 | integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== |
2618 | 2690 | |
2691 | +bluebird@~3.4.1: | |
2692 | + version "3.4.7" | |
2693 | + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" | |
2694 | + integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== | |
2695 | + | |
2619 | 2696 | boolbase@^1.0.0: |
2620 | 2697 | version "1.0.0" |
2621 | 2698 | resolved "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" |
... | ... | @@ -2682,7 +2759,7 @@ buffer-alloc@^1.2.0: |
2682 | 2759 | buffer-alloc-unsafe "^1.1.0" |
2683 | 2760 | buffer-fill "^1.0.0" |
2684 | 2761 | |
2685 | -buffer-crc32@~0.2.3: | |
2762 | +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: | |
2686 | 2763 | version "0.2.13" |
2687 | 2764 | resolved "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" |
2688 | 2765 | integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== |
... | ... | @@ -2697,6 +2774,11 @@ buffer-from@^1.0.0: |
2697 | 2774 | resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" |
2698 | 2775 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== |
2699 | 2776 | |
2777 | +buffer-indexof-polyfill@~1.0.0: | |
2778 | + version "1.0.2" | |
2779 | + resolved "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" | |
2780 | + integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== | |
2781 | + | |
2700 | 2782 | buffer@^5.2.1, buffer@^5.5.0: |
2701 | 2783 | version "5.7.1" |
2702 | 2784 | resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" |
... | ... | @@ -2705,6 +2787,11 @@ buffer@^5.2.1, buffer@^5.5.0: |
2705 | 2787 | base64-js "^1.3.1" |
2706 | 2788 | ieee754 "^1.1.13" |
2707 | 2789 | |
2790 | +buffers@~0.1.1: | |
2791 | + version "0.1.1" | |
2792 | + resolved "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" | |
2793 | + integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== | |
2794 | + | |
2708 | 2795 | builtin-modules@^3.0.0, builtin-modules@^3.1.0: |
2709 | 2796 | version "3.3.0" |
2710 | 2797 | resolved "https://registry.npmmirror.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" |
... | ... | @@ -2830,6 +2917,13 @@ cfb@~1.2.1: |
2830 | 2917 | adler-32 "~1.3.0" |
2831 | 2918 | crc-32 "~1.2.0" |
2832 | 2919 | |
2920 | +chainsaw@~0.1.0: | |
2921 | + version "0.1.0" | |
2922 | + resolved "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" | |
2923 | + integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== | |
2924 | + dependencies: | |
2925 | + traverse ">=0.3.0 <0.4" | |
2926 | + | |
2833 | 2927 | chalk@^1.0.0, chalk@^1.1.3: |
2834 | 2928 | version "1.1.3" |
2835 | 2929 | resolved "https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" |
... | ... | @@ -2881,7 +2975,7 @@ chardet@^0.7.0: |
2881 | 2975 | resolved "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" |
2882 | 2976 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== |
2883 | 2977 | |
2884 | -chokidar@^3.5.2: | |
2978 | +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.2: | |
2885 | 2979 | version "3.5.3" |
2886 | 2980 | resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" |
2887 | 2981 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== |
... | ... | @@ -3083,6 +3177,16 @@ component-emitter@^1.2.1: |
3083 | 3177 | resolved "https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" |
3084 | 3178 | integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== |
3085 | 3179 | |
3180 | +compress-commons@^4.1.0: | |
3181 | + version "4.1.1" | |
3182 | + resolved "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d" | |
3183 | + integrity sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ== | |
3184 | + dependencies: | |
3185 | + buffer-crc32 "^0.2.13" | |
3186 | + crc32-stream "^4.0.2" | |
3187 | + normalize-path "^3.0.0" | |
3188 | + readable-stream "^3.6.0" | |
3189 | + | |
3086 | 3190 | compute-scroll-into-view@^1.0.17: |
3087 | 3191 | version "1.0.17" |
3088 | 3192 | resolved "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz#6a88f18acd9d42e9cf4baa6bec7e0522607ab7ab" |
... | ... | @@ -3366,11 +3470,19 @@ cosmiconfig@^7, cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: |
3366 | 3470 | path-type "^4.0.0" |
3367 | 3471 | yaml "^1.10.0" |
3368 | 3472 | |
3369 | -crc-32@~1.2.0, crc-32@~1.2.1: | |
3473 | +crc-32@^1.2.0, crc-32@~1.2.0, crc-32@~1.2.1: | |
3370 | 3474 | version "1.2.2" |
3371 | 3475 | resolved "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" |
3372 | 3476 | integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== |
3373 | 3477 | |
3478 | +crc32-stream@^4.0.2: | |
3479 | + version "4.0.2" | |
3480 | + resolved "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007" | |
3481 | + integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w== | |
3482 | + dependencies: | |
3483 | + crc-32 "^1.2.0" | |
3484 | + readable-stream "^3.4.0" | |
3485 | + | |
3374 | 3486 | create-require@^1.1.0: |
3375 | 3487 | version "1.1.1" |
3376 | 3488 | resolved "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" |
... | ... | @@ -3521,6 +3633,11 @@ dayjs@^1.10.5, dayjs@^1.11.1: |
3521 | 3633 | resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.3.tgz#4754eb694a624057b9ad2224b67b15d552589258" |
3522 | 3634 | integrity sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A== |
3523 | 3635 | |
3636 | +dayjs@^1.8.34: | |
3637 | + version "1.11.7" | |
3638 | + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" | |
3639 | + integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== | |
3640 | + | |
3524 | 3641 | de-indent@^1.0.2: |
3525 | 3642 | version "1.0.2" |
3526 | 3643 | resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" |
... | ... | @@ -3839,6 +3956,13 @@ download@^7.1.0: |
3839 | 3956 | p-event "^2.1.0" |
3840 | 3957 | pify "^3.0.0" |
3841 | 3958 | |
3959 | +duplexer2@~0.1.4: | |
3960 | + version "0.1.4" | |
3961 | + resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" | |
3962 | + integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== | |
3963 | + dependencies: | |
3964 | + readable-stream "^2.0.2" | |
3965 | + | |
3842 | 3966 | duplexer3@^0.1.4: |
3843 | 3967 | version "0.1.4" |
3844 | 3968 | resolved "https://registry.npmmirror.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" |
... | ... | @@ -3899,7 +4023,7 @@ encodeurl@~1.0.2: |
3899 | 4023 | resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" |
3900 | 4024 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== |
3901 | 4025 | |
3902 | -end-of-stream@^1.0.0, end-of-stream@^1.1.0: | |
4026 | +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: | |
3903 | 4027 | version "1.4.4" |
3904 | 4028 | resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" |
3905 | 4029 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== |
... | ... | @@ -4313,6 +4437,21 @@ etag@^1.8.1: |
4313 | 4437 | resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" |
4314 | 4438 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== |
4315 | 4439 | |
4440 | +exceljs@^4.3.0: | |
4441 | + version "4.3.0" | |
4442 | + resolved "https://registry.npmjs.org/exceljs/-/exceljs-4.3.0.tgz#939bc0d4c59c200acadb7051be34d25c109853c4" | |
4443 | + integrity sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w== | |
4444 | + dependencies: | |
4445 | + archiver "^5.0.0" | |
4446 | + dayjs "^1.8.34" | |
4447 | + fast-csv "^4.3.1" | |
4448 | + jszip "^3.5.0" | |
4449 | + readable-stream "^3.6.0" | |
4450 | + saxes "^5.0.1" | |
4451 | + tmp "^0.2.0" | |
4452 | + unzipper "^0.10.11" | |
4453 | + uuid "^8.3.0" | |
4454 | + | |
4316 | 4455 | exec-buffer@^3.0.0: |
4317 | 4456 | version "3.2.0" |
4318 | 4457 | resolved "https://registry.npmmirror.com/exec-buffer/-/exec-buffer-3.2.0.tgz#b1686dbd904c7cf982e652c1f5a79b1e5573082b" |
... | ... | @@ -4460,6 +4599,14 @@ extglob@^2.0.2: |
4460 | 4599 | snapdragon "^0.8.1" |
4461 | 4600 | to-regex "^3.0.1" |
4462 | 4601 | |
4602 | +fast-csv@^4.3.1: | |
4603 | + version "4.3.6" | |
4604 | + resolved "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz#70349bdd8fe4d66b1130d8c91820b64a21bc4a63" | |
4605 | + integrity sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw== | |
4606 | + dependencies: | |
4607 | + "@fast-csv/format" "4.3.5" | |
4608 | + "@fast-csv/parse" "4.3.6" | |
4609 | + | |
4463 | 4610 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: |
4464 | 4611 | version "3.1.3" |
4465 | 4612 | resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" |
... | ... | @@ -4745,6 +4892,16 @@ fsevents@~2.3.2: |
4745 | 4892 | resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" |
4746 | 4893 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== |
4747 | 4894 | |
4895 | +fstream@^1.0.12: | |
4896 | + version "1.0.12" | |
4897 | + resolved "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" | |
4898 | + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== | |
4899 | + dependencies: | |
4900 | + graceful-fs "^4.1.2" | |
4901 | + inherits "~2.0.0" | |
4902 | + mkdirp ">=0.5 0" | |
4903 | + rimraf "2" | |
4904 | + | |
4748 | 4905 | function-bind@^1.1.1: |
4749 | 4906 | version "1.1.1" |
4750 | 4907 | resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" |
... | ... | @@ -4924,7 +5081,7 @@ glob-parent@^6.0.1: |
4924 | 5081 | dependencies: |
4925 | 5082 | is-glob "^4.0.3" |
4926 | 5083 | |
4927 | -glob@^7.1.3, glob@^7.1.6: | |
5084 | +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: | |
4928 | 5085 | version "7.2.3" |
4929 | 5086 | resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" |
4930 | 5087 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== |
... | ... | @@ -5369,6 +5526,16 @@ imagemin@^7.0.1: |
5369 | 5526 | p-pipe "^3.0.0" |
5370 | 5527 | replace-ext "^1.0.0" |
5371 | 5528 | |
5529 | +immediate@~3.0.5: | |
5530 | + version "3.0.6" | |
5531 | + resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" | |
5532 | + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== | |
5533 | + | |
5534 | +immutable@^4.0.0: | |
5535 | + version "4.2.2" | |
5536 | + resolved "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz#2da9ff4384a4330c36d4d1bc88e90f9e0b0ccd16" | |
5537 | + integrity sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og== | |
5538 | + | |
5372 | 5539 | import-fresh@^3.0.0, import-fresh@^3.2.1: |
5373 | 5540 | version "3.3.0" |
5374 | 5541 | resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" |
... | ... | @@ -5414,7 +5581,7 @@ inflight@^1.0.4: |
5414 | 5581 | once "^1.3.0" |
5415 | 5582 | wrappy "1" |
5416 | 5583 | |
5417 | -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: | |
5584 | +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3: | |
5418 | 5585 | version "2.0.4" |
5419 | 5586 | resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" |
5420 | 5587 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== |
... | ... | @@ -5986,6 +6153,16 @@ jsonpointer@^5.0.0: |
5986 | 6153 | resolved "https://registry.npmmirror.com/jsonpointer/-/jsonpointer-5.0.0.tgz#f802669a524ec4805fa7389eadbc9921d5dc8072" |
5987 | 6154 | integrity sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg== |
5988 | 6155 | |
6156 | +jszip@^3.5.0: | |
6157 | + version "3.10.1" | |
6158 | + resolved "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" | |
6159 | + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== | |
6160 | + dependencies: | |
6161 | + lie "~3.3.0" | |
6162 | + pako "~1.0.2" | |
6163 | + readable-stream "~2.3.6" | |
6164 | + setimmediate "^1.0.5" | |
6165 | + | |
5989 | 6166 | junk@^3.1.0: |
5990 | 6167 | version "3.1.0" |
5991 | 6168 | resolved "https://registry.npmmirror.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" |
... | ... | @@ -6032,6 +6209,13 @@ kolorist@^1.5.1: |
6032 | 6209 | resolved "https://registry.npmmirror.com/kolorist/-/kolorist-1.5.1.tgz#c3d66dc4fabde4f6b7faa6efda84c00491f9e52b" |
6033 | 6210 | integrity sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ== |
6034 | 6211 | |
6212 | +lazystream@^1.0.0: | |
6213 | + version "1.0.1" | |
6214 | + resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" | |
6215 | + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== | |
6216 | + dependencies: | |
6217 | + readable-stream "^2.0.5" | |
6218 | + | |
6035 | 6219 | less@^4.1.2: |
6036 | 6220 | version "4.1.3" |
6037 | 6221 | resolved "https://registry.npmmirror.com/less/-/less-4.1.3.tgz#175be9ddcbf9b250173e0a00b4d6920a5b770246" |
... | ... | @@ -6062,6 +6246,13 @@ levn@^0.4.1: |
6062 | 6246 | prelude-ls "^1.2.1" |
6063 | 6247 | type-check "~0.4.0" |
6064 | 6248 | |
6249 | +lie@~3.3.0: | |
6250 | + version "3.3.0" | |
6251 | + resolved "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" | |
6252 | + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== | |
6253 | + dependencies: | |
6254 | + immediate "~3.0.5" | |
6255 | + | |
6065 | 6256 | lilconfig@2.0.4: |
6066 | 6257 | version "2.0.4" |
6067 | 6258 | resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" |
... | ... | @@ -6092,6 +6283,11 @@ lint-staged@12.3.7: |
6092 | 6283 | supports-color "^9.2.1" |
6093 | 6284 | yaml "^1.10.2" |
6094 | 6285 | |
6286 | +listenercount@~1.0.1: | |
6287 | + version "1.0.1" | |
6288 | + resolved "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" | |
6289 | + integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== | |
6290 | + | |
6095 | 6291 | listr2@^4.0.1: |
6096 | 6292 | version "4.0.5" |
6097 | 6293 | resolved "https://registry.npmmirror.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" |
... | ... | @@ -6168,11 +6364,66 @@ lodash.debounce@^4.0.8: |
6168 | 6364 | resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" |
6169 | 6365 | integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== |
6170 | 6366 | |
6367 | +lodash.defaults@^4.2.0: | |
6368 | + version "4.2.0" | |
6369 | + resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" | |
6370 | + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== | |
6371 | + | |
6372 | +lodash.difference@^4.5.0: | |
6373 | + version "4.5.0" | |
6374 | + resolved "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" | |
6375 | + integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== | |
6376 | + | |
6377 | +lodash.escaperegexp@^4.1.2: | |
6378 | + version "4.1.2" | |
6379 | + resolved "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" | |
6380 | + integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== | |
6381 | + | |
6382 | +lodash.flatten@^4.4.0: | |
6383 | + version "4.4.0" | |
6384 | + resolved "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" | |
6385 | + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== | |
6386 | + | |
6387 | +lodash.groupby@^4.6.0: | |
6388 | + version "4.6.0" | |
6389 | + resolved "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz#0b08a1dcf68397c397855c3239783832df7403d1" | |
6390 | + integrity sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw== | |
6391 | + | |
6392 | +lodash.isboolean@^3.0.3: | |
6393 | + version "3.0.3" | |
6394 | + resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" | |
6395 | + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== | |
6396 | + | |
6397 | +lodash.isequal@^4.5.0: | |
6398 | + version "4.5.0" | |
6399 | + resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" | |
6400 | + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== | |
6401 | + | |
6402 | +lodash.isfunction@^3.0.9: | |
6403 | + version "3.0.9" | |
6404 | + resolved "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" | |
6405 | + integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== | |
6406 | + | |
6171 | 6407 | lodash.ismatch@^4.4.0: |
6172 | 6408 | version "4.4.0" |
6173 | 6409 | resolved "https://registry.npmmirror.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" |
6174 | 6410 | integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== |
6175 | 6411 | |
6412 | +lodash.isnil@^4.0.0: | |
6413 | + version "4.0.0" | |
6414 | + resolved "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz#49e28cd559013458c814c5479d3c663a21bfaa6c" | |
6415 | + integrity sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng== | |
6416 | + | |
6417 | +lodash.isplainobject@^4.0.6: | |
6418 | + version "4.0.6" | |
6419 | + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" | |
6420 | + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== | |
6421 | + | |
6422 | +lodash.isundefined@^3.0.1: | |
6423 | + version "3.0.1" | |
6424 | + resolved "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz#23ef3d9535565203a66cefd5b830f848911afb48" | |
6425 | + integrity sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA== | |
6426 | + | |
6176 | 6427 | lodash.merge@^4.6.2: |
6177 | 6428 | version "4.6.2" |
6178 | 6429 | resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" |
... | ... | @@ -6188,6 +6439,16 @@ lodash.truncate@^4.4.2: |
6188 | 6439 | resolved "https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" |
6189 | 6440 | integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== |
6190 | 6441 | |
6442 | +lodash.union@^4.6.0: | |
6443 | + version "4.6.0" | |
6444 | + resolved "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" | |
6445 | + integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== | |
6446 | + | |
6447 | +lodash.uniq@^4.5.0: | |
6448 | + version "4.5.0" | |
6449 | + resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" | |
6450 | + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== | |
6451 | + | |
6191 | 6452 | lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: |
6192 | 6453 | version "4.17.21" |
6193 | 6454 | resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" |
... | ... | @@ -6493,6 +6754,13 @@ minimatch@^5.0.1: |
6493 | 6754 | dependencies: |
6494 | 6755 | brace-expansion "^2.0.1" |
6495 | 6756 | |
6757 | +minimatch@^5.1.0: | |
6758 | + version "5.1.6" | |
6759 | + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" | |
6760 | + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== | |
6761 | + dependencies: | |
6762 | + brace-expansion "^2.0.1" | |
6763 | + | |
6496 | 6764 | minimatch@^5.1.1: |
6497 | 6765 | version "5.1.2" |
6498 | 6766 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.2.tgz#0939d7d6f0898acbd1508abe534d1929368a8fff" |
... | ... | @@ -6514,6 +6782,11 @@ minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: |
6514 | 6782 | resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" |
6515 | 6783 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== |
6516 | 6784 | |
6785 | +minimist@^1.2.6: | |
6786 | + version "1.2.7" | |
6787 | + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" | |
6788 | + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== | |
6789 | + | |
6517 | 6790 | mixin-deep@^1.2.0: |
6518 | 6791 | version "1.3.2" |
6519 | 6792 | resolved "https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" |
... | ... | @@ -6522,6 +6795,13 @@ mixin-deep@^1.2.0: |
6522 | 6795 | for-in "^1.0.2" |
6523 | 6796 | is-extendable "^1.0.1" |
6524 | 6797 | |
6798 | +"mkdirp@>=0.5 0": | |
6799 | + version "0.5.6" | |
6800 | + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" | |
6801 | + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== | |
6802 | + dependencies: | |
6803 | + minimist "^1.2.6" | |
6804 | + | |
6525 | 6805 | mockjs@^1.1.0: |
6526 | 6806 | version "1.1.0" |
6527 | 6807 | resolved "https://registry.npmmirror.com/mockjs/-/mockjs-1.1.0.tgz#e6a0c378e91906dbaff20911cc0273b3c7d75b06" |
... | ... | @@ -6995,6 +7275,11 @@ p-try@^2.0.0: |
6995 | 7275 | resolved "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" |
6996 | 7276 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== |
6997 | 7277 | |
7278 | +pako@~1.0.2: | |
7279 | + version "1.0.11" | |
7280 | + resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" | |
7281 | + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== | |
7282 | + | |
6998 | 7283 | param-case@^3.0.4: |
6999 | 7284 | version "3.0.4" |
7000 | 7285 | resolved "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" |
... | ... | @@ -7511,7 +7796,7 @@ read-pkg@^5.2.0: |
7511 | 7796 | parse-json "^5.0.0" |
7512 | 7797 | type-fest "^0.6.0" |
7513 | 7798 | |
7514 | -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.1.1, readable-stream@^3.4.0: | |
7799 | +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: | |
7515 | 7800 | version "3.6.0" |
7516 | 7801 | resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" |
7517 | 7802 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== |
... | ... | @@ -7520,7 +7805,7 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.1.1, readable-stre |
7520 | 7805 | string_decoder "^1.1.1" |
7521 | 7806 | util-deprecate "^1.0.1" |
7522 | 7807 | |
7523 | -readable-stream@^2.0.0, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6: | |
7808 | +readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6: | |
7524 | 7809 | version "2.3.7" |
7525 | 7810 | resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" |
7526 | 7811 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== |
... | ... | @@ -7533,6 +7818,13 @@ readable-stream@^2.0.0, readable-stream@^2.3.0, readable-stream@^2.3.5, readable |
7533 | 7818 | string_decoder "~1.1.1" |
7534 | 7819 | util-deprecate "~1.0.1" |
7535 | 7820 | |
7821 | +readdir-glob@^1.0.0: | |
7822 | + version "1.1.2" | |
7823 | + resolved "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.2.tgz#b185789b8e6a43491635b6953295c5c5e3fd224c" | |
7824 | + integrity sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA== | |
7825 | + dependencies: | |
7826 | + minimatch "^5.1.0" | |
7827 | + | |
7536 | 7828 | readdirp@~3.6.0: |
7537 | 7829 | version "3.6.0" |
7538 | 7830 | resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" |
... | ... | @@ -7734,14 +8026,14 @@ rfdc@^1.3.0: |
7734 | 8026 | resolved "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" |
7735 | 8027 | integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== |
7736 | 8028 | |
7737 | -rimraf@^2.5.4: | |
8029 | +rimraf@2, rimraf@^2.5.4: | |
7738 | 8030 | version "2.7.1" |
7739 | 8031 | resolved "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" |
7740 | 8032 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== |
7741 | 8033 | dependencies: |
7742 | 8034 | glob "^7.1.3" |
7743 | 8035 | |
7744 | -rimraf@^3.0.2: | |
8036 | +rimraf@^3.0.0, rimraf@^3.0.2: | |
7745 | 8037 | version "3.0.2" |
7746 | 8038 | resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" |
7747 | 8039 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== |
... | ... | @@ -7824,11 +8116,27 @@ safe-regex@^1.1.0: |
7824 | 8116 | resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" |
7825 | 8117 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== |
7826 | 8118 | |
8119 | +sass@^1.57.1: | |
8120 | + version "1.57.1" | |
8121 | + resolved "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz#dfafd46eb3ab94817145e8825208ecf7281119b5" | |
8122 | + integrity sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw== | |
8123 | + dependencies: | |
8124 | + chokidar ">=3.0.0 <4.0.0" | |
8125 | + immutable "^4.0.0" | |
8126 | + source-map-js ">=0.6.2 <2.0.0" | |
8127 | + | |
7827 | 8128 | sax@^1.2.4: |
7828 | 8129 | version "1.2.4" |
7829 | 8130 | resolved "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" |
7830 | 8131 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== |
7831 | 8132 | |
8133 | +saxes@^5.0.1: | |
8134 | + version "5.0.1" | |
8135 | + resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" | |
8136 | + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== | |
8137 | + dependencies: | |
8138 | + xmlchars "^2.2.0" | |
8139 | + | |
7832 | 8140 | scroll-into-view-if-needed@^2.2.25: |
7833 | 8141 | version "2.2.29" |
7834 | 8142 | resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz#551791a84b7e2287706511f8c68161e4990ab885" |
... | ... | @@ -7908,6 +8216,11 @@ set-value@^2.0.0, set-value@^2.0.1: |
7908 | 8216 | is-plain-object "^2.0.3" |
7909 | 8217 | split-string "^3.0.1" |
7910 | 8218 | |
8219 | +setimmediate@^1.0.5, setimmediate@~1.0.4: | |
8220 | + version "1.0.5" | |
8221 | + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" | |
8222 | + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== | |
8223 | + | |
7911 | 8224 | shallow-equal@^1.0.0: |
7912 | 8225 | version "1.2.1" |
7913 | 8226 | resolved "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" |
... | ... | @@ -8058,7 +8371,7 @@ sortablejs@^1.15.0: |
8058 | 8371 | resolved "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.0.tgz#53230b8aa3502bb77a29e2005808ffdb4a5f7e2a" |
8059 | 8372 | integrity sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w== |
8060 | 8373 | |
8061 | -source-map-js@^1.0.2: | |
8374 | +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: | |
8062 | 8375 | version "1.0.2" |
8063 | 8376 | resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" |
8064 | 8377 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== |
... | ... | @@ -8578,6 +8891,17 @@ tar-stream@^1.5.2: |
8578 | 8891 | to-buffer "^1.1.1" |
8579 | 8892 | xtend "^4.0.0" |
8580 | 8893 | |
8894 | +tar-stream@^2.2.0: | |
8895 | + version "2.2.0" | |
8896 | + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" | |
8897 | + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== | |
8898 | + dependencies: | |
8899 | + bl "^4.0.3" | |
8900 | + end-of-stream "^1.4.1" | |
8901 | + fs-constants "^1.0.0" | |
8902 | + inherits "^2.0.3" | |
8903 | + readable-stream "^3.1.1" | |
8904 | + | |
8581 | 8905 | temp-dir@^1.0.0: |
8582 | 8906 | version "1.0.0" |
8583 | 8907 | resolved "https://registry.npmmirror.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" |
... | ... | @@ -8676,6 +9000,13 @@ tmp@^0.0.33: |
8676 | 9000 | dependencies: |
8677 | 9001 | os-tmpdir "~1.0.2" |
8678 | 9002 | |
9003 | +tmp@^0.2.0: | |
9004 | + version "0.2.1" | |
9005 | + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" | |
9006 | + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== | |
9007 | + dependencies: | |
9008 | + rimraf "^3.0.0" | |
9009 | + | |
8679 | 9010 | to-buffer@^1.1.1: |
8680 | 9011 | version "1.1.1" |
8681 | 9012 | resolved "https://registry.npmmirror.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" |
... | ... | @@ -8730,6 +9061,11 @@ tr46@~0.0.3: |
8730 | 9061 | resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" |
8731 | 9062 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== |
8732 | 9063 | |
9064 | +"traverse@>=0.3.0 <0.4": | |
9065 | + version "0.3.9" | |
9066 | + resolved "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" | |
9067 | + integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== | |
9068 | + | |
8733 | 9069 | traverse@^0.6.6: |
8734 | 9070 | version "0.6.6" |
8735 | 9071 | resolved "https://registry.npmmirror.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" |
... | ... | @@ -8933,6 +9269,22 @@ unset-value@^1.0.0: |
8933 | 9269 | has-value "^0.3.1" |
8934 | 9270 | isobject "^3.0.0" |
8935 | 9271 | |
9272 | +unzipper@^0.10.11: | |
9273 | + version "0.10.11" | |
9274 | + resolved "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz#0b4991446472cbdb92ee7403909f26c2419c782e" | |
9275 | + integrity sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw== | |
9276 | + dependencies: | |
9277 | + big-integer "^1.6.17" | |
9278 | + binary "~0.3.0" | |
9279 | + bluebird "~3.4.1" | |
9280 | + buffer-indexof-polyfill "~1.0.0" | |
9281 | + duplexer2 "~0.1.4" | |
9282 | + fstream "^1.0.12" | |
9283 | + graceful-fs "^4.2.2" | |
9284 | + listenercount "~1.0.1" | |
9285 | + readable-stream "~2.3.6" | |
9286 | + setimmediate "~1.0.4" | |
9287 | + | |
8936 | 9288 | upath@^1.2.0: |
8937 | 9289 | version "1.2.0" |
8938 | 9290 | resolved "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" |
... | ... | @@ -9011,6 +9363,11 @@ uuid@^3.0.1, uuid@^3.3.2: |
9011 | 9363 | resolved "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" |
9012 | 9364 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== |
9013 | 9365 | |
9366 | +uuid@^8.3.0: | |
9367 | + version "8.3.2" | |
9368 | + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" | |
9369 | + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== | |
9370 | + | |
9014 | 9371 | v8-compile-cache-lib@^3.0.1: |
9015 | 9372 | version "3.0.1" |
9016 | 9373 | resolved "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" |
... | ... | @@ -9296,6 +9653,16 @@ vue@^3.2.45: |
9296 | 9653 | "@vue/server-renderer" "3.2.45" |
9297 | 9654 | "@vue/shared" "3.2.45" |
9298 | 9655 | |
9656 | +vxe-table-plugin-export-xlsx@^3.0.4: | |
9657 | + version "3.0.4" | |
9658 | + resolved "https://registry.npmjs.org/vxe-table-plugin-export-xlsx/-/vxe-table-plugin-export-xlsx-3.0.4.tgz#35faabc0791b4e9aa516b78ea3fd45e67314afe4" | |
9659 | + integrity sha512-Og/NbXRIb+BS6sJ48oDNVrZnlkcpaCd/zS8JBAZjHLgioWr1Xoob6FEpaeXBebGPPgTumZNUrrBO57JhhYAerA== | |
9660 | + | |
9661 | +vxe-table@^4.3.9: | |
9662 | + version "4.3.9" | |
9663 | + resolved "https://registry.npmjs.org/vxe-table/-/vxe-table-4.3.9.tgz#4b288e5e666eb4fb47e9732d51d967e2aa69b61f" | |
9664 | + integrity sha512-Ns7Ooa7lOHBpks90i0k0BMNyxfMpUo39ryxTgKE41X3xVnI9tGQs2U6+klfDlsuqYfmG3ibyzHN3OCrWbbKo4Q== | |
9665 | + | |
9299 | 9666 | warning@^4.0.0: |
9300 | 9667 | version "4.0.3" |
9301 | 9668 | resolved "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" |
... | ... | @@ -9581,6 +9948,11 @@ write-file-atomic@^4.0.1: |
9581 | 9948 | imurmurhash "^0.1.4" |
9582 | 9949 | signal-exit "^3.0.7" |
9583 | 9950 | |
9951 | +xe-utils@^3.5.7: | |
9952 | + version "3.5.7" | |
9953 | + resolved "https://registry.npmjs.org/xe-utils/-/xe-utils-3.5.7.tgz#2c885852dfadd5c8beeffdc1f884f8ceb962c669" | |
9954 | + integrity sha512-3H+fDBKBR2wLJgyA7k9C/w1Xljx6Maml5ukV0WDY06HjYyGs2FEz6XhcwRCLIDXX4pBP3Gu0nX9DbCeuuRA2Ew== | |
9955 | + | |
9584 | 9956 | xlsx@^0.18.5: |
9585 | 9957 | version "0.18.5" |
9586 | 9958 | resolved "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz#16711b9113c848076b8a177022799ad356eba7d0" |
... | ... | @@ -9594,6 +9966,11 @@ xlsx@^0.18.5: |
9594 | 9966 | wmf "~1.0.1" |
9595 | 9967 | word "~0.3.0" |
9596 | 9968 | |
9969 | +xmlchars@^2.2.0: | |
9970 | + version "2.2.0" | |
9971 | + resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" | |
9972 | + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== | |
9973 | + | |
9597 | 9974 | xtend@^4.0.0, xtend@~4.0.1: |
9598 | 9975 | version "4.0.2" |
9599 | 9976 | resolved "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" |
... | ... | @@ -9703,6 +10080,15 @@ yocto-queue@^0.1.0: |
9703 | 10080 | resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" |
9704 | 10081 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== |
9705 | 10082 | |
10083 | +zip-stream@^4.1.0: | |
10084 | + version "4.1.0" | |
10085 | + resolved "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79" | |
10086 | + integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== | |
10087 | + dependencies: | |
10088 | + archiver-utils "^2.1.0" | |
10089 | + compress-commons "^4.1.0" | |
10090 | + readable-stream "^3.6.0" | |
10091 | + | |
9706 | 10092 | zrender@5.3.2: |
9707 | 10093 | version "5.3.2" |
9708 | 10094 | resolved "https://registry.npmmirror.com/zrender/-/zrender-5.3.2.tgz#f67b11d36d3d020d62411d3bb123eb1c93cccd69" | ... | ... |