@dt-frames/ui 2.0.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/assets/data/icons/actions.d.ts +1 -0
- package/es/assets/data/icons/actions.ts +423 -0
- package/es/assets/data/icons/code.d.ts +1 -0
- package/es/assets/data/icons/code.ts +10 -0
- package/es/assets/data/icons/commuticate.d.ts +1 -0
- package/es/assets/data/icons/commuticate.ts +182 -0
- package/es/assets/data/icons/currency.d.ts +1 -0
- package/es/assets/data/icons/currency.ts +44 -0
- package/es/assets/data/icons/devices.d.ts +1 -0
- package/es/assets/data/icons/devices.ts +126 -0
- package/es/assets/data/icons/edit.d.ts +1 -0
- package/es/assets/data/icons/edit.ts +163 -0
- package/es/assets/data/icons/file.d.ts +1 -0
- package/es/assets/data/icons/file.ts +99 -0
- package/es/assets/data/icons/math.d.ts +1 -0
- package/es/assets/data/icons/math.ts +53 -0
- package/es/assets/data/icons/message.d.ts +1 -0
- package/es/assets/data/icons/message.ts +68 -0
- package/es/assets/data/icons/navigate.d.ts +1 -0
- package/es/assets/data/icons/navigate.ts +181 -0
- package/es/assets/data/icons/other.d.ts +1 -0
- package/es/assets/data/icons/other.ts +324 -0
- package/es/assets/data/index.d.ts +4 -0
- package/es/assets/data/index.ts +58 -0
- package/es/assets/icons/iconfont.css +7266 -0
- package/es/assets/icons/iconfont.eot +0 -0
- package/es/assets/icons/iconfont.svg +5445 -0
- package/es/assets/icons/iconfont.ttf +0 -0
- package/es/assets/icons/iconfont.woff +0 -0
- package/es/assets/icons/iconfont.woff2 +0 -0
- package/es/assets/imgs/header/avatar.png +0 -0
- package/es/assets/imgs/logo/logo.png +0 -0
- package/es/assets/imgs/table/empty.png +0 -0
- package/es/assets/locales/en.d.ts +101 -0
- package/es/assets/locales/en.ts +101 -0
- package/es/assets/locales/index.d.ts +2 -0
- package/es/assets/locales/index.ts +5 -0
- package/es/assets/locales/zh.d.ts +103 -0
- package/es/assets/locales/zh.ts +103 -0
- package/es/components/container/index.d.ts +94 -0
- package/es/components/container/index.js +290 -0
- package/es/components/container/index.less +64 -0
- package/es/components/container/src/components/bar.d.ts +14 -0
- package/es/components/container/src/components/scroll-bar.d.ts +70 -0
- package/es/components/container/src/hooks/scroll.d.ts +10 -0
- package/es/components/container/src/scroll-container.d.ts +76 -0
- package/es/components/container/src/slot-container.d.ts +20 -0
- package/es/components/container/src/types/scroll.type.d.ts +22 -0
- package/es/components/container/src/utils/scroll.d.ts +5 -0
- package/es/components/curd/index.d.ts +2 -0
- package/es/components/curd/index.js +3120 -0
- package/es/components/curd/src/components/Curd.d.ts +1246 -0
- package/es/components/curd/src/hooks/useCurd.d.ts +112 -0
- package/es/components/curd/src/props.d.ts +187 -0
- package/es/components/curd/src/types/curd.type.d.ts +19 -0
- package/es/components/drawer/index.d.ts +8039 -0
- package/es/components/drawer/index.js +838 -0
- package/es/components/drawer/index.less +10 -0
- package/es/components/drawer/src/components/DrawerFooter.d.ts +139 -0
- package/es/components/drawer/src/components/DrawerHeader.d.ts +11 -0
- package/es/components/drawer/src/hooks/useDrawer.d.ts +3 -0
- package/es/components/drawer/src/index.d.ts +8041 -0
- package/es/components/drawer/src/props.d.ts +64 -0
- package/es/components/drawer/src/types/index.type.d.ts +48 -0
- package/es/components/form/index.d.ts +3219 -0
- package/es/components/form/index.js +1896 -0
- package/es/components/form/index.less +141 -0
- package/es/components/form/src/components/FormButtons.d.ts +88 -0
- package/es/components/form/src/components/FormItem.d.ts +165 -0
- package/es/components/form/src/components/componentMap.d.ts +4 -0
- package/es/components/form/src/components/formIcon.d.ts +1231 -0
- package/es/components/form/src/components/formInputUseDialog.d.ts +911 -0
- package/es/components/form/src/components/index.d.ts +4 -0
- package/es/components/form/src/components/radioButton.d.ts +34 -0
- package/es/components/form/src/enums/index.d.ts +7 -0
- package/es/components/form/src/hooks/helper.d.ts +14 -0
- package/es/components/form/src/hooks/useForm.d.ts +6 -0
- package/es/components/form/src/hooks/useFormActions.d.ts +12 -0
- package/es/components/form/src/hooks/useFormEvent.d.ts +25 -0
- package/es/components/form/src/hooks/useFormValue.d.ts +3 -0
- package/es/components/form/src/hooks/useFormValues.d.ts +11 -0
- package/es/components/form/src/hooks/useLabelWidth.d.ts +22 -0
- package/es/components/form/src/index.d.ts +2965 -0
- package/es/components/form/src/props.d.ts +133 -0
- package/es/components/form/src/types/actions.type.d.ts +15 -0
- package/es/components/form/src/types/form.type.d.ts +70 -0
- package/es/components/icons/index.d.ts +497 -0
- package/es/components/icons/index.js +1969 -0
- package/es/components/icons/index.less +42 -0
- package/es/components/icons/src/pick-icon.d.ts +455 -0
- package/es/components/icons/src/svg-icon.d.ts +44 -0
- package/es/components/modal/index.d.ts +3 -0
- package/es/components/modal/index.js +1193 -0
- package/es/components/modal/index.less +54 -0
- package/es/components/modal/src/components/CloseIcon.d.ts +40 -0
- package/es/components/modal/src/components/Modal.d.ts +108 -0
- package/es/components/modal/src/components/ModalFooter.d.ts +139 -0
- package/es/components/modal/src/components/ModalWrap.d.ts +153 -0
- package/es/components/modal/src/hooks/useDrag.d.ts +7 -0
- package/es/components/modal/src/hooks/useFullScreen.d.ts +6 -0
- package/es/components/modal/src/hooks/useModal.d.ts +5 -0
- package/es/components/modal/src/index.d.ts +774 -0
- package/es/components/modal/src/props.d.ts +100 -0
- package/es/components/modal/src/types/modal.type.d.ts +17 -0
- package/es/components/source/hooks/useDownload.d.ts +8 -0
- package/es/components/source/hooks/useSource.d.ts +40 -0
- package/es/components/source/index.d.ts +2 -0
- package/es/components/source/index.js +332 -0
- package/es/components/source/types/source.type.d.ts +37 -0
- package/es/components/source/utils/index.d.ts +8 -0
- package/es/components/table/index.d.ts +3 -0
- package/es/components/table/index.js +3983 -0
- package/es/components/table/index.less +192 -0
- package/es/components/table/src/components/TableAction.d.ts +70 -0
- package/es/components/table/src/components/TableHeader.d.ts +1136 -0
- package/es/components/table/src/components/TableRender.d.ts +17 -0
- package/es/components/table/src/components/editTable/CellComponent.d.ts +22 -0
- package/es/components/table/src/components/editTable/EditTableCell.d.ts +93 -0
- package/es/components/table/src/components/editTable/componentMap.d.ts +4 -0
- package/es/components/table/src/components/editTable/index.d.ts +9 -0
- package/es/components/table/src/components/editTable/props.d.ts +27 -0
- package/es/components/table/src/components/tableSetting/Column.d.ts +69 -0
- package/es/components/table/src/components/tableSetting/Download.d.ts +922 -0
- package/es/components/table/src/components/tableSetting/DownloadCtrl.d.ts +888 -0
- package/es/components/table/src/components/tableSetting/Fullscreen.d.ts +22 -0
- package/es/components/table/src/components/tableSetting/index.d.ts +1030 -0
- package/es/components/table/src/hooks/useColumns.d.ts +14 -0
- package/es/components/table/src/hooks/useCustomRow.d.ts +20 -0
- package/es/components/table/src/hooks/useDataSource.d.ts +15 -0
- package/es/components/table/src/hooks/useHeader.d.ts +8 -0
- package/es/components/table/src/hooks/useHeaderCode.d.ts +3 -0
- package/es/components/table/src/hooks/useLoading.d.ts +6 -0
- package/es/components/table/src/hooks/usePagination.d.ts +7 -0
- package/es/components/table/src/hooks/useRow.d.ts +5 -0
- package/es/components/table/src/hooks/useRowSelection.d.ts +12 -0
- package/es/components/table/src/hooks/useTable.d.ts +9 -0
- package/es/components/table/src/hooks/useTableInstance.d.ts +16 -0
- package/es/components/table/src/hooks/useTableScroll.d.ts +13 -0
- package/es/components/table/src/index.d.ts +644 -0
- package/es/components/table/src/props.d.ts +185 -0
- package/es/components/table/src/types/actions.type.d.ts +21 -0
- package/es/components/table/src/types/header.type.d.ts +23 -0
- package/es/components/table/src/types/table.type.d.ts +98 -0
- package/es/directives/icon.d.ts +2 -0
- package/es/directives/index.d.ts +7 -0
- package/es/directives/index.js +2015 -0
- package/es/directives/permission.d.ts +2 -0
- package/es/global.d.ts +7 -0
- package/es/index.d.ts +1 -0
- package/es/index.js +4 -0
- package/es/theme/index.d.ts +10 -0
- package/es/theme/index.js +3255 -0
- package/es/theme/index.less +603 -0
- package/es/theme/src/components/content/index.d.ts +27 -0
- package/es/theme/src/components/feature/back-top.d.ts +5 -0
- package/es/theme/src/components/feature/index.d.ts +7 -0
- package/es/theme/src/components/footer/index.d.ts +31 -0
- package/es/theme/src/components/header/components/bread-crumb.d.ts +6 -0
- package/es/theme/src/components/header/components/fullscreen.d.ts +5 -0
- package/es/theme/src/components/header/components/index.d.ts +11 -0
- package/es/theme/src/components/header/components/lang-picker.d.ts +23 -0
- package/es/theme/src/components/header/components/logo.d.ts +35 -0
- package/es/theme/src/components/header/components/menu-filter.d.ts +22 -0
- package/es/theme/src/components/header/components/notify.d.ts +24 -0
- package/es/theme/src/components/header/components/setting-theme.d.ts +223 -0
- package/es/theme/src/components/header/components/size.d.ts +282 -0
- package/es/theme/src/components/header/components/theme-drawer/feature.d.ts +138 -0
- package/es/theme/src/components/header/components/theme-drawer/index.d.ts +3 -0
- package/es/theme/src/components/header/components/theme-drawer/menu-type.d.ts +16 -0
- package/es/theme/src/components/header/components/theme-drawer/select.d.ts +58 -0
- package/es/theme/src/components/header/components/theme-drawer/switch.d.ts +49 -0
- package/es/theme/src/components/header/components/trigger.d.ts +10 -0
- package/es/theme/src/components/header/components/user-info.d.ts +37 -0
- package/es/theme/src/components/header/helper/change-theme.d.ts +13 -0
- package/es/theme/src/components/header/helper/menu-tree.d.ts +3 -0
- package/es/theme/src/components/header/index.d.ts +699 -0
- package/es/theme/src/components/header/multiple-header.d.ts +785 -0
- package/es/theme/src/components/sider/components/basic-menu/basic-menu-item.d.ts +62 -0
- package/es/theme/src/components/sider/components/basic-menu/basic-menu.d.ts +207 -0
- package/es/theme/src/components/sider/components/basic-menu/basic-sub-menu-item.d.ts +127 -0
- package/es/theme/src/components/sider/components/basic-menu/menu-item-content.d.ts +26 -0
- package/es/theme/src/components/sider/components/drag-bar.d.ts +14 -0
- package/es/theme/src/components/sider/components/layout-menu.d.ts +22 -0
- package/es/theme/src/components/sider/components/props.d.ts +69 -0
- package/es/theme/src/components/sider/components/sider-trigger.d.ts +18 -0
- package/es/theme/src/components/sider/helper/sider.d.ts +12 -0
- package/es/theme/src/components/sider/helper/split-menu.d.ts +10 -0
- package/es/theme/src/components/sider/index.d.ts +70 -0
- package/es/theme/src/components/tabs/components/TabContent.d.ts +6 -0
- package/es/theme/src/components/tabs/components/TabRedo.d.ts +21 -0
- package/es/theme/src/components/tabs/components/index.d.ts +3 -0
- package/es/theme/src/components/tabs/hooks/useMultifyTabs.d.ts +7 -0
- package/es/theme/src/components/tabs/hooks/useTabDropdown.d.ts +6 -0
- package/es/theme/src/components/tabs/index.d.ts +63 -0
- package/es/theme/src/components/tabs/types/tabs.type.d.ts +7 -0
- package/es/theme/src/enums/index.d.ts +1 -0
- package/es/theme/src/enums/theme.enum.d.ts +33 -0
- package/es/theme/src/hooks/index.d.ts +6 -0
- package/es/theme/src/hooks/useDragLine.d.ts +2 -0
- package/es/theme/src/hooks/useHeader.d.ts +25 -0
- package/es/theme/src/hooks/useMenu.d.ts +27 -0
- package/es/theme/src/hooks/useMultifyTab.d.ts +7 -0
- package/es/theme/src/hooks/useOpenKeys.d.ts +7 -0
- package/es/theme/src/hooks/useTheme.d.ts +9 -0
- package/es/theme/src/index.d.ts +1643 -0
- package/es/theme/src/setting/theme.setting.d.ts +2 -0
- package/es/theme/src/stores/index.d.ts +3 -0
- package/es/theme/src/stores/routeReuse.store.d.ts +23 -0
- package/es/theme/src/stores/theme.store.d.ts +15 -0
- package/es/theme/src/types/index.d.ts +3 -0
- package/es/theme/src/types/menu.type.d.ts +15 -0
- package/es/theme/src/types/theme.type.d.ts +60 -0
- package/es/utils/withInstall.d.ts +4 -0
- package/index.d.ts +10 -0
- package/index.js +34 -0
- package/package.json +3 -6
- package/tailwind.config.cjs +11 -0
- package/tsconfig.json +41 -0
- package/tsconfig.node.json +9 -0
- package/vite.config.ts +51 -0
|
@@ -0,0 +1,3983 @@
|
|
|
1
|
+
import { DtCache, CacheKey, deepMerge, Pages, useGo, useRedo, Language, useAppStore, useSlots as useSlots$1, error, http, useApp, getDynamicProps, isBoolean, isFunction, getPopupContainer, useI18n, isNumber, isArray, isObject, isString, dispatchResize, useTimeoutFn, off, on, windowResizeFn, useMessage, isNullAndUnDef, getDictValueByCode, formatNumber, isVnode } from "@dt-frames/core";
|
|
2
|
+
import { toRaw as toRaw$1, unref, computed as computed$1, ref as ref$1, watch, onUnmounted, defineComponent, useAttrs, resolveDirective, openBlock, createElementBlock, Fragment, renderList, withDirectives, createVNode, withCtx, createTextVNode, toDisplayString, createElementVNode, normalizeClass, normalizeStyle, createCommentVNode, createBlock, provide, inject, h as h$1, mergeProps, nextTick, getCurrentInstance as getCurrentInstance$1, reactive, readonly, watchEffect, isRef, normalizeProps, guardReactiveProps, toRefs, isVNode, onMounted as onMounted$1, resolveDynamicComponent, renderSlot, createSlots, useSlots as useSlots$2 } from "vue";
|
|
3
|
+
import { defineStore } from "pinia";
|
|
4
|
+
import { Tooltip, MenuItem, Menu, Dropdown, RadioButton, RadioGroup, Button, FormItem, Col, Spin, Checkbox as Checkbox$1, Divider as Divider$1, Row, CheckboxGroup, Popover as Popover$1, Table } from "ant-design-vue/es";
|
|
5
|
+
import "ant-design-vue/es/table/style";
|
|
6
|
+
import { omit, cloneDeep, isEqual } from "lodash-es";
|
|
7
|
+
import "ant-design-vue/es/dropdown/style";
|
|
8
|
+
import "ant-design-vue/es/menu/style";
|
|
9
|
+
import "ant-design-vue/es/tooltip/style";
|
|
10
|
+
import { useDebounceFn, useFullscreen, isFunction as isFunction$1 } from "@vueuse/core";
|
|
11
|
+
import { Input, InputNumber, Select, TreeSelect, Switch, Checkbox, DatePicker, TimePicker, Popover, Radio, AutoComplete, Cascader, Slider, Rate, Divider, Modal } from "ant-design-vue";
|
|
12
|
+
import "ant-design-vue/es/radio/style";
|
|
13
|
+
import "ant-design-vue/es/col/style";
|
|
14
|
+
import "ant-design-vue/es/form/style";
|
|
15
|
+
import "ant-design-vue/es/button/style";
|
|
16
|
+
import "ant-design-vue/es/spin/style";
|
|
17
|
+
import "ant-design-vue/es/row/style";
|
|
18
|
+
import "ant-design-vue/es/divider/style";
|
|
19
|
+
import "ant-design-vue/es/checkbox/style";
|
|
20
|
+
import "ant-design-vue/es/popover/style";
|
|
21
|
+
import Sortablejs from "sortablejs";
|
|
22
|
+
import dayjs from "dayjs";
|
|
23
|
+
var Theme = /* @__PURE__ */ ((Theme2) => {
|
|
24
|
+
Theme2["DARK"] = "dark";
|
|
25
|
+
Theme2["LIGHT"] = "light";
|
|
26
|
+
return Theme2;
|
|
27
|
+
})(Theme || {});
|
|
28
|
+
var MenuType = /* @__PURE__ */ ((MenuType2) => {
|
|
29
|
+
MenuType2["SIDE"] = "sidebar";
|
|
30
|
+
MenuType2["TOP_MENU"] = "top-menu";
|
|
31
|
+
MenuType2["MIX"] = "mix";
|
|
32
|
+
return MenuType2;
|
|
33
|
+
})(MenuType || {});
|
|
34
|
+
var MenuMode = /* @__PURE__ */ ((MenuMode2) => {
|
|
35
|
+
MenuMode2["INLINE"] = "inline";
|
|
36
|
+
MenuMode2["HORIZONTAL"] = "horizontal";
|
|
37
|
+
MenuMode2["VERTICAL"] = "vertical";
|
|
38
|
+
return MenuMode2;
|
|
39
|
+
})(MenuMode || {});
|
|
40
|
+
var ContentMode = /* @__PURE__ */ ((ContentMode2) => {
|
|
41
|
+
ContentMode2["FULL"] = "full";
|
|
42
|
+
ContentMode2["FIXED"] = "fixed";
|
|
43
|
+
return ContentMode2;
|
|
44
|
+
})(ContentMode || {});
|
|
45
|
+
var UiSize = /* @__PURE__ */ ((UiSize2) => {
|
|
46
|
+
UiSize2["LARGE"] = "large";
|
|
47
|
+
UiSize2["MIDDLE"] = "middle";
|
|
48
|
+
UiSize2["SMALL"] = "small";
|
|
49
|
+
return UiSize2;
|
|
50
|
+
})(UiSize || {});
|
|
51
|
+
const defaultThemeConf = {
|
|
52
|
+
content: {
|
|
53
|
+
contentMode: ContentMode.FULL
|
|
54
|
+
},
|
|
55
|
+
headOptions: {
|
|
56
|
+
fixed: true,
|
|
57
|
+
theme: Theme.LIGHT,
|
|
58
|
+
showLogo: true,
|
|
59
|
+
showBackToTop: true,
|
|
60
|
+
useLockPage: true,
|
|
61
|
+
size: UiSize.SMALL,
|
|
62
|
+
showSize: true,
|
|
63
|
+
showBreadCrumb: true,
|
|
64
|
+
showFullScreen: true,
|
|
65
|
+
showSearch: true,
|
|
66
|
+
showNotice: true,
|
|
67
|
+
showLocaleSwitch: true,
|
|
68
|
+
showSettingTheme: true,
|
|
69
|
+
showLoginOut: true
|
|
70
|
+
},
|
|
71
|
+
menuOptions: {
|
|
72
|
+
fixed: true,
|
|
73
|
+
theme: Theme.DARK,
|
|
74
|
+
collapsed: false,
|
|
75
|
+
collapsedShowTitle: false,
|
|
76
|
+
canDrag: true,
|
|
77
|
+
show: true,
|
|
78
|
+
hidden: false,
|
|
79
|
+
split: false,
|
|
80
|
+
menuWidth: 240,
|
|
81
|
+
trigger: true,
|
|
82
|
+
type: MenuType.SIDE,
|
|
83
|
+
mode: MenuMode.INLINE
|
|
84
|
+
},
|
|
85
|
+
footerOptions: {
|
|
86
|
+
show: false,
|
|
87
|
+
height: 48,
|
|
88
|
+
title: "Copyright(C) 2021 by www.ithinkdt.com. All rights reserved.",
|
|
89
|
+
subTitle: "Privacy Statement"
|
|
90
|
+
},
|
|
91
|
+
routeReuse: {
|
|
92
|
+
show: true,
|
|
93
|
+
cache: true,
|
|
94
|
+
canDrag: true,
|
|
95
|
+
showQuick: true,
|
|
96
|
+
showRedo: true,
|
|
97
|
+
showFold: true
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const useThemeStore = defineStore({
|
|
101
|
+
id: "dt-theme",
|
|
102
|
+
state: () => ({
|
|
103
|
+
themeConf: DtCache.getLocal(CacheKey.THEME) ?? defaultThemeConf,
|
|
104
|
+
pageLoading: false
|
|
105
|
+
}),
|
|
106
|
+
getters: {
|
|
107
|
+
getThemeConf() {
|
|
108
|
+
return this.themeConf;
|
|
109
|
+
},
|
|
110
|
+
getHeaderConf() {
|
|
111
|
+
return this.themeConf.headOptions;
|
|
112
|
+
},
|
|
113
|
+
getMenuConf() {
|
|
114
|
+
return this.themeConf.menuOptions;
|
|
115
|
+
},
|
|
116
|
+
getFooterConf() {
|
|
117
|
+
return this.themeConf.footerOptions;
|
|
118
|
+
},
|
|
119
|
+
getRouteReuseConf() {
|
|
120
|
+
return this.themeConf.routeReuse;
|
|
121
|
+
},
|
|
122
|
+
getPageLoading() {
|
|
123
|
+
return this.pageLoading;
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
actions: {
|
|
127
|
+
setThemeConf(options = {}) {
|
|
128
|
+
let newThemeConf = deepMerge(this.themeConf, options);
|
|
129
|
+
this.themeConf = deepMerge(defaultThemeConf, newThemeConf);
|
|
130
|
+
DtCache.setLocal(CacheKey.THEME, this.themeConf);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
defineStore({
|
|
135
|
+
id: "route-reuse",
|
|
136
|
+
state: () => ({
|
|
137
|
+
cacheTabList: /* @__PURE__ */ new Set(),
|
|
138
|
+
tabList: DtCache.getLocal(CacheKey.THEME)?.routeReuse?.cache ? DtCache.getLocal(CacheKey.ROUTE_REUSE) || [] : [],
|
|
139
|
+
lastDragEndIndex: 0
|
|
140
|
+
}),
|
|
141
|
+
getters: {
|
|
142
|
+
getTabList() {
|
|
143
|
+
return this.tabList;
|
|
144
|
+
},
|
|
145
|
+
getCachedTabList() {
|
|
146
|
+
return Array.from(this.cacheTabList);
|
|
147
|
+
},
|
|
148
|
+
getLastDragEndIndex() {
|
|
149
|
+
return this.lastDragEndIndex;
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
actions: {
|
|
153
|
+
async addTab(route) {
|
|
154
|
+
const { path, name, fullPath, params, query, meta } = route;
|
|
155
|
+
if (path === Pages.NOT_FOUND || path === Pages.LOGIN || path === Pages.BASE_PAGE) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
let updateIndex = -1;
|
|
159
|
+
const tabHasExits = this.tabList.some((tab, index) => {
|
|
160
|
+
updateIndex = index;
|
|
161
|
+
return (tab.fullPath || tab.path) === (fullPath || path);
|
|
162
|
+
});
|
|
163
|
+
if (tabHasExits) {
|
|
164
|
+
const curTab = toRaw$1(this.tabList)[updateIndex];
|
|
165
|
+
curTab.params = params || curTab.params;
|
|
166
|
+
curTab.query = query || curTab.query;
|
|
167
|
+
curTab.fullPath = fullPath || curTab.fullPath;
|
|
168
|
+
this.tabList.splice(updateIndex, 1, curTab);
|
|
169
|
+
} else {
|
|
170
|
+
this.tabList.push(JSON.parse(JSON.stringify(route)));
|
|
171
|
+
}
|
|
172
|
+
this.updateCacheTab();
|
|
173
|
+
},
|
|
174
|
+
closeTab(path, router) {
|
|
175
|
+
const go = useGo(router);
|
|
176
|
+
const index = this.tabList.findIndex((item) => item.path === path);
|
|
177
|
+
let page;
|
|
178
|
+
if (index === 0) {
|
|
179
|
+
if (this.tabList.length !== 1) {
|
|
180
|
+
page = this.tabList[index + 1];
|
|
181
|
+
}
|
|
182
|
+
} else {
|
|
183
|
+
page = this.tabList[index - 1];
|
|
184
|
+
}
|
|
185
|
+
this.bulkCloseTabs([path]);
|
|
186
|
+
this.updateCacheTab();
|
|
187
|
+
path === router.currentRoute.value.path && go(page.path);
|
|
188
|
+
},
|
|
189
|
+
closeAllTab(currentRoute, router) {
|
|
190
|
+
const go = useGo(router);
|
|
191
|
+
let filterTabList = this.tabList.filter((item) => item?.meta?.affix ?? false);
|
|
192
|
+
const route = filterTabList.length > 0 ? filterTabList[filterTabList.length - 1] : unref(currentRoute);
|
|
193
|
+
this.tabList = [route];
|
|
194
|
+
this.updateCacheTab();
|
|
195
|
+
go(route.path);
|
|
196
|
+
},
|
|
197
|
+
closeLeftTabs(path) {
|
|
198
|
+
const index = this.tabList.findIndex((item) => item.path === path);
|
|
199
|
+
if (index > 0) {
|
|
200
|
+
const leftTabs = this.tabList.slice(0, index);
|
|
201
|
+
const pathList = [];
|
|
202
|
+
for (const item of leftTabs) {
|
|
203
|
+
const affix = item?.meta?.affix ?? false;
|
|
204
|
+
if (!affix) {
|
|
205
|
+
pathList.push(item.fullPath);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
this.bulkCloseTabs(pathList);
|
|
209
|
+
}
|
|
210
|
+
this.updateCacheTab();
|
|
211
|
+
},
|
|
212
|
+
closeRightTabs(path) {
|
|
213
|
+
const index = this.tabList.findIndex((item) => item.path === path);
|
|
214
|
+
if (index >= 0 && index < this.tabList.length - 1) {
|
|
215
|
+
const rightTabs = this.tabList.slice(index + 1, this.tabList.length);
|
|
216
|
+
const pathList = [];
|
|
217
|
+
for (const item of rightTabs) {
|
|
218
|
+
const affix = item?.meta?.affix ?? false;
|
|
219
|
+
if (!affix) {
|
|
220
|
+
pathList.push(item.fullPath);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
this.bulkCloseTabs(pathList);
|
|
224
|
+
}
|
|
225
|
+
this.updateCacheTab();
|
|
226
|
+
},
|
|
227
|
+
closeOtherTabs(path) {
|
|
228
|
+
const pathList = [];
|
|
229
|
+
for (let item of this.tabList) {
|
|
230
|
+
const affix = item?.meta?.affix ?? false;
|
|
231
|
+
if (item.path !== path && !affix) {
|
|
232
|
+
pathList.push(item.path);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
this.bulkCloseTabs(pathList);
|
|
236
|
+
this.updateCacheTab();
|
|
237
|
+
},
|
|
238
|
+
bulkCloseTabs(pathList) {
|
|
239
|
+
this.tabList = this.tabList.filter((item) => !pathList.includes(item.fullPath));
|
|
240
|
+
},
|
|
241
|
+
updateCacheTab() {
|
|
242
|
+
const cacheTab = DtCache.getLocal(CacheKey.THEME)?.routeReuse?.cache;
|
|
243
|
+
cacheTab && DtCache.setLocal(CacheKey.ROUTE_REUSE, this.tabList);
|
|
244
|
+
const cacheMap = /* @__PURE__ */ new Set();
|
|
245
|
+
for (const tab of this.tabList) {
|
|
246
|
+
if (tab.meta?.hideTab) {
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
const name = tab.name;
|
|
250
|
+
cacheMap.add(name);
|
|
251
|
+
}
|
|
252
|
+
this.cacheTabList = cacheMap;
|
|
253
|
+
},
|
|
254
|
+
async refreshPage(router) {
|
|
255
|
+
const findTab = this.getCachedTabList.find((item) => item === unref(router.currentRoute).name);
|
|
256
|
+
if (findTab) {
|
|
257
|
+
this.cacheTabList.delete(findTab.toString());
|
|
258
|
+
}
|
|
259
|
+
const redo = useRedo(router);
|
|
260
|
+
await redo();
|
|
261
|
+
},
|
|
262
|
+
sortTabs(oldIndex, newIndex) {
|
|
263
|
+
const currentTab = this.tabList[oldIndex];
|
|
264
|
+
this.tabList.splice(oldIndex, 1);
|
|
265
|
+
this.tabList.splice(newIndex, 0, currentTab);
|
|
266
|
+
this.lastDragEndIndex = this.lastDragEndIndex + 1;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
function useMenu() {
|
|
271
|
+
const { getMenuConf, setThemeConf } = useThemeStore();
|
|
272
|
+
const getCollapsedShowTitle = computed$1(() => getMenuConf.collapsedShowTitle);
|
|
273
|
+
const getIsSidebarType = computed$1(() => getMenuConf.type === MenuType.SIDE);
|
|
274
|
+
const getMenuFixed = computed$1(() => getMenuConf.fixed);
|
|
275
|
+
const getShowMenu = computed$1(() => getMenuConf.show);
|
|
276
|
+
const getShowSidebar = computed$1(() => {
|
|
277
|
+
return unref(getSplit) || unref(getShowMenu) && unref(getMenuMode) !== MenuMode.HORIZONTAL;
|
|
278
|
+
});
|
|
279
|
+
const getMenuHidden = computed$1(() => getMenuConf.hidden);
|
|
280
|
+
const getMenuTheme = computed$1(() => getMenuConf.theme);
|
|
281
|
+
const getTrigger = computed$1(() => getMenuConf.trigger);
|
|
282
|
+
const getCanDrag = computed$1(() => getMenuConf.canDrag);
|
|
283
|
+
const getIsMixMode = computed$1(() => {
|
|
284
|
+
return unref(getMenuMode) === MenuMode.INLINE && unref(getMenuType) === MenuType.MIX;
|
|
285
|
+
});
|
|
286
|
+
const getMenuWidth = computed$1(() => unref(getIsMixMode) ? Number(getMenuConf.menuWidth) - 40 : getMenuConf.menuWidth);
|
|
287
|
+
const getLogoWidth = computed$1(() => getMenuConf.menuWidth);
|
|
288
|
+
const getMenuType = computed$1(() => getMenuConf.type);
|
|
289
|
+
const getIsTopMenu = computed$1(() => unref(getMenuType) === MenuType.TOP_MENU);
|
|
290
|
+
const getMenuMode = computed$1(() => getMenuConf.mode);
|
|
291
|
+
const getSplit = computed$1(() => getMenuConf.split);
|
|
292
|
+
const getCollapsed = computed$1(() => getMenuConf.collapsed);
|
|
293
|
+
const getIsHorizontal = computed$1(() => unref(getMenuMode) === MenuMode.HORIZONTAL);
|
|
294
|
+
const setThemeStore = (conf = {}) => setThemeConf(conf);
|
|
295
|
+
const toggleCollapsed = () => setThemeStore({
|
|
296
|
+
menuOptions: {
|
|
297
|
+
collapsed: !unref(getCollapsed)
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
const getMiniWidthNumber = computed$1(() => getMenuConf.collapsedShowTitle ? 80 : 48);
|
|
301
|
+
const getRealWidth = computed$1(() => {
|
|
302
|
+
return unref(getCollapsed) ? unref(getMiniWidthNumber) : unref(getMenuWidth);
|
|
303
|
+
});
|
|
304
|
+
const getCalcContentWidth = computed$1(() => {
|
|
305
|
+
const width = unref(getIsTopMenu) || !unref(getShowMenu) || unref(getSplit) && unref(getMenuHidden) ? 0 : unref(getRealWidth);
|
|
306
|
+
return `calc(100% - ${unref(width)}px)`;
|
|
307
|
+
});
|
|
308
|
+
return {
|
|
309
|
+
getCollapsedShowTitle,
|
|
310
|
+
getIsSidebarType,
|
|
311
|
+
getMenuFixed,
|
|
312
|
+
getShowMenu,
|
|
313
|
+
getShowSidebar,
|
|
314
|
+
getMenuHidden,
|
|
315
|
+
getMenuTheme,
|
|
316
|
+
getTrigger,
|
|
317
|
+
getMenuWidth,
|
|
318
|
+
getLogoWidth,
|
|
319
|
+
getMenuType,
|
|
320
|
+
getIsTopMenu,
|
|
321
|
+
getMenuMode,
|
|
322
|
+
getSplit,
|
|
323
|
+
getCollapsed,
|
|
324
|
+
getIsHorizontal,
|
|
325
|
+
getMiniWidthNumber,
|
|
326
|
+
getRealWidth,
|
|
327
|
+
getCalcContentWidth,
|
|
328
|
+
getIsMixMode,
|
|
329
|
+
getCanDrag,
|
|
330
|
+
toggleCollapsed,
|
|
331
|
+
setThemeStore
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
function useMultipleTab() {
|
|
335
|
+
const { getRouteReuseConf } = useThemeStore();
|
|
336
|
+
const getShowMultipleTab = computed$1(() => getRouteReuseConf.show);
|
|
337
|
+
const getShowQuick = computed$1(() => getRouteReuseConf.showQuick);
|
|
338
|
+
const getShowRedo = computed$1(() => getRouteReuseConf.showRedo);
|
|
339
|
+
const getCanCache = computed$1(() => getRouteReuseConf.cache);
|
|
340
|
+
const getCanDrag = computed$1(() => getRouteReuseConf.canDrag);
|
|
341
|
+
return {
|
|
342
|
+
getShowMultipleTab,
|
|
343
|
+
getShowQuick,
|
|
344
|
+
getShowRedo,
|
|
345
|
+
getCanCache,
|
|
346
|
+
getCanDrag
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
function useHeader() {
|
|
350
|
+
const HEADER_HEIGHT = 48;
|
|
351
|
+
const TABS_HEIGHT = 33;
|
|
352
|
+
const { getHeaderConf = {} } = useThemeStore();
|
|
353
|
+
const {
|
|
354
|
+
getIsSidebarType,
|
|
355
|
+
getMenuType,
|
|
356
|
+
getShowMenu,
|
|
357
|
+
getMenuHidden,
|
|
358
|
+
getTrigger,
|
|
359
|
+
getMenuMode,
|
|
360
|
+
getSplit,
|
|
361
|
+
getIsTopMenu,
|
|
362
|
+
getIsMixMode
|
|
363
|
+
} = useMenu();
|
|
364
|
+
const { getShowMultipleTab } = useMultipleTab();
|
|
365
|
+
const getHeaderTheme = computed$1(() => getHeaderConf.theme);
|
|
366
|
+
const getFixed = computed$1(() => getHeaderConf.fixed);
|
|
367
|
+
const getShowHeaderLogo = computed$1(() => unref(getShowLogo) && !unref(getIsSidebarType));
|
|
368
|
+
const getShowSearch = computed$1(() => getHeaderConf.showSearch);
|
|
369
|
+
const getShowHeaderTrigger = computed$1(() => {
|
|
370
|
+
if (unref(getMenuType) === MenuType.TOP_MENU || !unref(getShowMenu) || unref(getMenuHidden)) {
|
|
371
|
+
return false;
|
|
372
|
+
}
|
|
373
|
+
return unref(getTrigger);
|
|
374
|
+
});
|
|
375
|
+
const getShowBreadCrumb = computed$1(() => getHeaderConf.showBreadCrumb);
|
|
376
|
+
const getShowBread = computed$1(
|
|
377
|
+
() => unref(getMenuMode) !== MenuMode.HORIZONTAL && !unref(getSplit) && unref(getShowBreadCrumb)
|
|
378
|
+
);
|
|
379
|
+
const getShowTopMenu = computed$1(() => unref(getMenuMode) === MenuMode.HORIZONTAL || unref(getSplit));
|
|
380
|
+
const getShowNotice = computed$1(() => getHeaderConf.showNotice);
|
|
381
|
+
const getShowFullScreen = computed$1(() => getHeaderConf.showFullScreen);
|
|
382
|
+
const getShowLocale = computed$1(() => getHeaderConf.showLocaleSwitch);
|
|
383
|
+
const getShowSettingTheme = computed$1(() => getHeaderConf.showSettingTheme);
|
|
384
|
+
const getShowFullHeaderRef = computed$1(() => {
|
|
385
|
+
return !unref(getIsSidebarType) && !unref(getIsTopMenu);
|
|
386
|
+
});
|
|
387
|
+
const getHeaderHeight = computed$1(() => {
|
|
388
|
+
let height = 0;
|
|
389
|
+
height += HEADER_HEIGHT;
|
|
390
|
+
if (unref(getShowMultipleTab) && !unref(getSplit)) {
|
|
391
|
+
height += TABS_HEIGHT;
|
|
392
|
+
}
|
|
393
|
+
return height;
|
|
394
|
+
});
|
|
395
|
+
const getTabsHeight = computed$1(() => TABS_HEIGHT);
|
|
396
|
+
const getShowInsetHeaderRef = computed$1(() => {
|
|
397
|
+
return unref(getIsSidebarType) || unref(getIsTopMenu);
|
|
398
|
+
});
|
|
399
|
+
const getShowBackToTop = computed$1(() => getHeaderConf.showBackToTop);
|
|
400
|
+
const getIsZH = computed$1(() => {
|
|
401
|
+
let local = DtCache.getLocal(CacheKey.LOCALE);
|
|
402
|
+
if (!local)
|
|
403
|
+
return true;
|
|
404
|
+
return local === Language.ZH;
|
|
405
|
+
});
|
|
406
|
+
const getUiSize = computed$1(() => getHeaderConf?.size ?? UiSize.SMALL);
|
|
407
|
+
const getShowUiSize = computed$1(() => getHeaderConf?.showSize);
|
|
408
|
+
const getShowLogo = computed$1(() => getHeaderConf.showLogo);
|
|
409
|
+
const getShowLoginOut = computed$1(() => getHeaderConf.showLoginOut);
|
|
410
|
+
const loginOutClick = getHeaderConf.logoutClick;
|
|
411
|
+
return {
|
|
412
|
+
getHeaderTheme,
|
|
413
|
+
getFixed,
|
|
414
|
+
getShowSearch,
|
|
415
|
+
getShowHeaderLogo,
|
|
416
|
+
getShowHeaderTrigger,
|
|
417
|
+
getShowBread,
|
|
418
|
+
getShowTopMenu,
|
|
419
|
+
getShowFullScreen,
|
|
420
|
+
getShowLocale,
|
|
421
|
+
getShowSettingTheme,
|
|
422
|
+
getShowNotice,
|
|
423
|
+
getShowFullHeaderRef,
|
|
424
|
+
getHeaderHeight,
|
|
425
|
+
getTabsHeight,
|
|
426
|
+
getShowInsetHeaderRef,
|
|
427
|
+
getShowBackToTop,
|
|
428
|
+
getIsZH,
|
|
429
|
+
getUiSize,
|
|
430
|
+
getShowLogo,
|
|
431
|
+
getShowLoginOut,
|
|
432
|
+
getShowUiSize,
|
|
433
|
+
loginOutClick
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
const codeMap = /* @__PURE__ */ new Map();
|
|
437
|
+
function useHeaderCode(code, changeColumns) {
|
|
438
|
+
const { appConf } = useAppStore();
|
|
439
|
+
const { getIsZH } = useHeader();
|
|
440
|
+
useSlots$1();
|
|
441
|
+
useSlots();
|
|
442
|
+
if (!appConf.pages.queryColumnApi) {
|
|
443
|
+
error("\u8BF7\u5728init.config.ts\u4E2D\u914D\u7F6EqueryColumnApi\uFF01");
|
|
444
|
+
return;
|
|
445
|
+
}
|
|
446
|
+
const getAlign = (key) => key === 0 ? "center" : key === 2 ? "right" : "left";
|
|
447
|
+
const renderCell = (type, slot, ctx) => {
|
|
448
|
+
switch (type) {
|
|
449
|
+
case 0:
|
|
450
|
+
return { date: ctx };
|
|
451
|
+
case 1:
|
|
452
|
+
return { dict: ctx };
|
|
453
|
+
case 5:
|
|
454
|
+
return { percent: ctx };
|
|
455
|
+
case 7:
|
|
456
|
+
if (!appConf.structure[ctx]) {
|
|
457
|
+
error(`\u672A\u627E\u5230structure: ${ctx} !`);
|
|
458
|
+
return {};
|
|
459
|
+
}
|
|
460
|
+
return { dict: { ...appConf.structure[ctx], struCode: ctx } };
|
|
461
|
+
case 11:
|
|
462
|
+
return { number: ctx };
|
|
463
|
+
}
|
|
464
|
+
};
|
|
465
|
+
function getColumns() {
|
|
466
|
+
if (codeMap.get(code)) {
|
|
467
|
+
changeColumns(codeMap.get(code));
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
http.post(
|
|
471
|
+
appConf.pages.queryColumnApi,
|
|
472
|
+
{ tableCode: code }
|
|
473
|
+
).then((rsp) => {
|
|
474
|
+
handleData(rsp);
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
function handleData(data) {
|
|
478
|
+
let rows = [];
|
|
479
|
+
data.forEach((it) => {
|
|
480
|
+
let obj = {
|
|
481
|
+
title: unref(getIsZH) ? it.cloumnName : it.cloumnEngName,
|
|
482
|
+
dataIndex: it.cloumnCode,
|
|
483
|
+
sorter: it.ifOrder,
|
|
484
|
+
align: getAlign(it.textAlign),
|
|
485
|
+
show: Boolean(it.ifDisplay),
|
|
486
|
+
defaultHidden: !Boolean(it.ifDisplay)
|
|
487
|
+
};
|
|
488
|
+
if (it.cloumnType !== void 0)
|
|
489
|
+
obj.render = renderCell(it.cloumnType, it.slot, it.dictCode);
|
|
490
|
+
if (it.width)
|
|
491
|
+
obj.width = Number(it.width);
|
|
492
|
+
rows.push(obj);
|
|
493
|
+
});
|
|
494
|
+
codeMap.set(code, rows);
|
|
495
|
+
changeColumns(rows);
|
|
496
|
+
}
|
|
497
|
+
getColumns();
|
|
498
|
+
}
|
|
499
|
+
function useTable(props2) {
|
|
500
|
+
const tableRef = ref$1(null);
|
|
501
|
+
const loadedRef = ref$1(false);
|
|
502
|
+
let stopWatch;
|
|
503
|
+
function registerTable(instance) {
|
|
504
|
+
const { isProd } = useApp();
|
|
505
|
+
if (unref(loadedRef) && unref(isProd) && instance === unref(tableRef))
|
|
506
|
+
return;
|
|
507
|
+
if (props2?.columnCode) {
|
|
508
|
+
useHeaderCode(
|
|
509
|
+
props2.columnCode,
|
|
510
|
+
(columns) => {
|
|
511
|
+
props2.columns = columns;
|
|
512
|
+
instance.setProps(getDynamicProps(props2));
|
|
513
|
+
}
|
|
514
|
+
);
|
|
515
|
+
}
|
|
516
|
+
tableRef.value = instance;
|
|
517
|
+
loadedRef.value = true;
|
|
518
|
+
stopWatch?.();
|
|
519
|
+
stopWatch = watch(
|
|
520
|
+
() => props2,
|
|
521
|
+
() => {
|
|
522
|
+
props2 && instance.setProps(getDynamicProps(props2));
|
|
523
|
+
},
|
|
524
|
+
{
|
|
525
|
+
immediate: true,
|
|
526
|
+
deep: true
|
|
527
|
+
}
|
|
528
|
+
);
|
|
529
|
+
onUnmounted(() => {
|
|
530
|
+
tableRef.value = null;
|
|
531
|
+
loadedRef.value = null;
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
function getTableInstance2() {
|
|
535
|
+
const table = unref(tableRef);
|
|
536
|
+
if (!table) {
|
|
537
|
+
error("\u6CA1\u6709table\u8868\u5355\u5B9E\u4F8B");
|
|
538
|
+
}
|
|
539
|
+
return table;
|
|
540
|
+
}
|
|
541
|
+
const methods = {
|
|
542
|
+
setProps: (props22) => getTableInstance2().setProps(props22),
|
|
543
|
+
setLoading: (loading) => getTableInstance2().setLoading(loading),
|
|
544
|
+
clearSelectedRowKeys: () => getTableInstance2().clearSelectedRowKeys(),
|
|
545
|
+
getSelectRows: () => getTableInstance2().getSelectRows(),
|
|
546
|
+
getSelectedRowKeys: () => getTableInstance2().getSelectedRowKeys(),
|
|
547
|
+
setSelectedRowKeys: (keys) => getTableInstance2().setSelectedRowKeys(keys),
|
|
548
|
+
getRowSelection: () => toRaw(getTableInstance2().getRowSelection()),
|
|
549
|
+
getColumns: (opt) => toRaw(getTableInstance2().getColumns(opt)),
|
|
550
|
+
setColumns: (columns) => getTableInstance2().setColumns(columns),
|
|
551
|
+
setColumnsByDataIndex: (dataIndex, value) => {
|
|
552
|
+
return getTableInstance2().setColumnsByDataIndex(dataIndex, value);
|
|
553
|
+
},
|
|
554
|
+
getCacheColumns: () => toRaw(getTableInstance2().getCacheColumns()),
|
|
555
|
+
findTableDataRecord: (rowKey) => getTableInstance2().findTableDataRecord(rowKey),
|
|
556
|
+
updateTableDataRecord: (rowKey, record) => getTableInstance2().updateTableDataRecord(rowKey, record),
|
|
557
|
+
getPagination: () => getTableInstance2().getPagination()
|
|
558
|
+
};
|
|
559
|
+
return [registerTable, methods];
|
|
560
|
+
}
|
|
561
|
+
const _imports_0 = "data:image/png;base64,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";
|
|
562
|
+
const _hoisted_1$b = {
|
|
563
|
+
key: 0,
|
|
564
|
+
class: "dt-table-action-btn"
|
|
565
|
+
};
|
|
566
|
+
const _hoisted_2$3 = ["onClick"];
|
|
567
|
+
const _hoisted_3$3 = /* @__PURE__ */ createElementVNode("i", { class: "i ic:baseline-settings dt-table-action-dropdown cursor-pointer" }, null, -1);
|
|
568
|
+
const _hoisted_4$3 = { class: "text-13 opacity-80" };
|
|
569
|
+
const _sfc_main$k = /* @__PURE__ */ defineComponent({
|
|
570
|
+
__name: "TableAction",
|
|
571
|
+
props: {
|
|
572
|
+
fixed: {
|
|
573
|
+
type: String,
|
|
574
|
+
default: "right"
|
|
575
|
+
},
|
|
576
|
+
expand: {
|
|
577
|
+
type: Boolean,
|
|
578
|
+
default: false
|
|
579
|
+
},
|
|
580
|
+
width: {
|
|
581
|
+
type: String,
|
|
582
|
+
default: "70px"
|
|
583
|
+
},
|
|
584
|
+
btns: {
|
|
585
|
+
type: Array,
|
|
586
|
+
default: []
|
|
587
|
+
},
|
|
588
|
+
flag: {
|
|
589
|
+
type: String
|
|
590
|
+
},
|
|
591
|
+
record: {
|
|
592
|
+
default: {}
|
|
593
|
+
},
|
|
594
|
+
index: {
|
|
595
|
+
type: Number
|
|
596
|
+
}
|
|
597
|
+
},
|
|
598
|
+
setup(__props) {
|
|
599
|
+
const props2 = __props;
|
|
600
|
+
const actionBtns = ref$1([]);
|
|
601
|
+
function handleAction(it) {
|
|
602
|
+
if (isFunction(it.onClick)) {
|
|
603
|
+
it.onClick({
|
|
604
|
+
row: props2.record,
|
|
605
|
+
index: props2.index
|
|
606
|
+
});
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
const attrs = useAttrs();
|
|
610
|
+
function getPopupContainer$1() {
|
|
611
|
+
return isFunction(attrs.getPopupContainer) ? attrs.getPopupContainer() : getPopupContainer();
|
|
612
|
+
}
|
|
613
|
+
watch(
|
|
614
|
+
() => props2.btns,
|
|
615
|
+
(btns) => {
|
|
616
|
+
actionBtns.value = [...btns].map((it) => {
|
|
617
|
+
return {
|
|
618
|
+
...it,
|
|
619
|
+
ifShow: isBoolean(it.show) ? it.show : isFunction(it.show) ? it.show(props2.record) : true
|
|
620
|
+
};
|
|
621
|
+
});
|
|
622
|
+
},
|
|
623
|
+
{
|
|
624
|
+
immediate: true
|
|
625
|
+
}
|
|
626
|
+
);
|
|
627
|
+
return (_ctx, _cache) => {
|
|
628
|
+
const _component_ATooltip = Tooltip;
|
|
629
|
+
const _component_AMenuItem = MenuItem;
|
|
630
|
+
const _component_AMenu = Menu;
|
|
631
|
+
const _component_ADropdown = Dropdown;
|
|
632
|
+
const _directive_auth = resolveDirective("auth");
|
|
633
|
+
return props2.expand ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(actionBtns.value, (item) => {
|
|
634
|
+
return openBlock(), createElementBlock(Fragment, null, [
|
|
635
|
+
item.ifShow ? withDirectives((openBlock(), createElementBlock("span", _hoisted_1$b, [
|
|
636
|
+
createVNode(_component_ATooltip, { placement: "bottom" }, {
|
|
637
|
+
title: withCtx(() => [
|
|
638
|
+
createTextVNode(toDisplayString(item.name), 1)
|
|
639
|
+
]),
|
|
640
|
+
default: withCtx(() => [
|
|
641
|
+
createElementVNode("i", {
|
|
642
|
+
class: normalizeClass(["i cursor-pointer", item.icon]),
|
|
643
|
+
style: normalizeStyle({
|
|
644
|
+
color: item.color
|
|
645
|
+
}),
|
|
646
|
+
onClick: ($event) => handleAction(item)
|
|
647
|
+
}, null, 14, _hoisted_2$3)
|
|
648
|
+
]),
|
|
649
|
+
_: 2
|
|
650
|
+
}, 1024)
|
|
651
|
+
])), [
|
|
652
|
+
[_directive_auth, item.auth]
|
|
653
|
+
]) : createCommentVNode("", true)
|
|
654
|
+
], 64);
|
|
655
|
+
}), 256)) : (openBlock(), createBlock(_component_ADropdown, {
|
|
656
|
+
key: 1,
|
|
657
|
+
getPopupContainer: getPopupContainer$1,
|
|
658
|
+
trigger: ["click"]
|
|
659
|
+
}, {
|
|
660
|
+
overlay: withCtx(() => [
|
|
661
|
+
createVNode(_component_AMenu, { class: "dt-action-select flex flex-col" }, {
|
|
662
|
+
default: withCtx(() => [
|
|
663
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(actionBtns.value, (item) => {
|
|
664
|
+
return withDirectives((openBlock(), createElementBlock("span", null, [
|
|
665
|
+
item.ifShow ? (openBlock(), createBlock(_component_AMenuItem, {
|
|
666
|
+
key: 0,
|
|
667
|
+
onClick: ($event) => handleAction(item)
|
|
668
|
+
}, {
|
|
669
|
+
default: withCtx(() => [
|
|
670
|
+
createElementVNode("i", {
|
|
671
|
+
class: normalizeClass(["i text-base opacity-80 pr-2", item.icon]),
|
|
672
|
+
style: normalizeStyle({
|
|
673
|
+
color: item.color
|
|
674
|
+
})
|
|
675
|
+
}, null, 6),
|
|
676
|
+
createElementVNode("span", _hoisted_4$3, toDisplayString(item.name), 1)
|
|
677
|
+
]),
|
|
678
|
+
_: 2
|
|
679
|
+
}, 1032, ["onClick"])) : createCommentVNode("", true)
|
|
680
|
+
])), [
|
|
681
|
+
[_directive_auth, item.auth]
|
|
682
|
+
]);
|
|
683
|
+
}), 256))
|
|
684
|
+
]),
|
|
685
|
+
_: 1
|
|
686
|
+
})
|
|
687
|
+
]),
|
|
688
|
+
default: withCtx(() => [
|
|
689
|
+
_hoisted_3$3
|
|
690
|
+
]),
|
|
691
|
+
_: 1
|
|
692
|
+
}));
|
|
693
|
+
};
|
|
694
|
+
}
|
|
695
|
+
});
|
|
696
|
+
const tableKey = Symbol("dt-page");
|
|
697
|
+
function createTableInstance(instance) {
|
|
698
|
+
provide(tableKey, instance);
|
|
699
|
+
}
|
|
700
|
+
function getTableInstance() {
|
|
701
|
+
return inject(tableKey);
|
|
702
|
+
}
|
|
703
|
+
const componentMap$1 = /* @__PURE__ */ new Map();
|
|
704
|
+
componentMap$1.set("Input", Input);
|
|
705
|
+
componentMap$1.set("InputNumber", InputNumber);
|
|
706
|
+
componentMap$1.set("Select", Select);
|
|
707
|
+
componentMap$1.set("TreeSelect", TreeSelect);
|
|
708
|
+
componentMap$1.set("Switch", Switch);
|
|
709
|
+
componentMap$1.set("Checkbox", Checkbox);
|
|
710
|
+
componentMap$1.set("DatePicker", DatePicker);
|
|
711
|
+
componentMap$1.set("TimePicker", TimePicker);
|
|
712
|
+
const CellComponent = ({
|
|
713
|
+
component = "Input",
|
|
714
|
+
rule = true,
|
|
715
|
+
ruleMessage,
|
|
716
|
+
popoverVisible,
|
|
717
|
+
getPopupContainer: getPopupContainer2
|
|
718
|
+
}, { attrs }) => {
|
|
719
|
+
const Comp = componentMap$1.get(component);
|
|
720
|
+
const DefaultComp = h$1(Comp, attrs);
|
|
721
|
+
if (!rule)
|
|
722
|
+
return DefaultComp;
|
|
723
|
+
return h$1(
|
|
724
|
+
Popover,
|
|
725
|
+
{
|
|
726
|
+
overlayClassName: "edit-cell-rule-popover",
|
|
727
|
+
visible: !!popoverVisible,
|
|
728
|
+
...getPopupContainer2 ? { getPopupContainer: getPopupContainer2 } : {}
|
|
729
|
+
},
|
|
730
|
+
{
|
|
731
|
+
default: () => DefaultComp,
|
|
732
|
+
content: () => ruleMessage
|
|
733
|
+
}
|
|
734
|
+
);
|
|
735
|
+
};
|
|
736
|
+
const basicProps$1 = {
|
|
737
|
+
value: {
|
|
738
|
+
type: [String, Number, Boolean, Object],
|
|
739
|
+
default: ""
|
|
740
|
+
},
|
|
741
|
+
record: {
|
|
742
|
+
type: Object
|
|
743
|
+
},
|
|
744
|
+
column: {
|
|
745
|
+
type: Object,
|
|
746
|
+
default: () => ({})
|
|
747
|
+
},
|
|
748
|
+
index: Number
|
|
749
|
+
};
|
|
750
|
+
const _hoisted_1$a = { class: "editable-cell" };
|
|
751
|
+
const _sfc_main$j = /* @__PURE__ */ defineComponent({
|
|
752
|
+
__name: "EditTableCell",
|
|
753
|
+
props: basicProps$1,
|
|
754
|
+
setup(__props) {
|
|
755
|
+
const props2 = __props;
|
|
756
|
+
const { getUiSize } = useHeader();
|
|
757
|
+
const { t } = useI18n("UI");
|
|
758
|
+
const { editRule, align = "left" } = props2.column;
|
|
759
|
+
const table = getTableInstance();
|
|
760
|
+
const ruleMessage = ref$1("");
|
|
761
|
+
const ruleVisible = ref$1(false);
|
|
762
|
+
const optionsRef = ref$1([]);
|
|
763
|
+
const currentValueRef = ref$1(props2.value);
|
|
764
|
+
const getComponent = computed$1(() => props2.column?.editComponent || "Input");
|
|
765
|
+
const getRuleVisible = computed$1(() => {
|
|
766
|
+
return unref(ruleMessage) && unref(ruleVisible);
|
|
767
|
+
});
|
|
768
|
+
const getWrapperClass = computed$1(() => {
|
|
769
|
+
return `edit-cell-align-${align}`;
|
|
770
|
+
});
|
|
771
|
+
const getIsCheckComp = computed$1(() => {
|
|
772
|
+
const component = unref(getComponent);
|
|
773
|
+
return ["Checkbox", "Switch"].includes(component);
|
|
774
|
+
});
|
|
775
|
+
const createPlaceholderMessage = (component) => {
|
|
776
|
+
if (component.includes("Input")) {
|
|
777
|
+
return t("PLEASE_INPUT");
|
|
778
|
+
}
|
|
779
|
+
return t("PLEASE_SELECT");
|
|
780
|
+
};
|
|
781
|
+
const setTableValue = () => {
|
|
782
|
+
props2.record[props2.column.dataIndex] = unref(currentValueRef);
|
|
783
|
+
};
|
|
784
|
+
const getComponentProps = computed$1(() => {
|
|
785
|
+
const isCheckValue = unref(getIsCheckComp);
|
|
786
|
+
const valueField = isCheckValue ? "checked" : "value";
|
|
787
|
+
const val = unref(currentValueRef);
|
|
788
|
+
const value = isCheckValue ? isNumber(val) && isBoolean(val) ? val : !!val : val;
|
|
789
|
+
let compProps = props2.column?.editComponentProps ?? {};
|
|
790
|
+
const { record, column, index } = props2;
|
|
791
|
+
if (isFunction(compProps)) {
|
|
792
|
+
compProps = compProps({ text: val, record, column, index }) ?? {};
|
|
793
|
+
}
|
|
794
|
+
if (unref(getComponent) === "InputNumber") {
|
|
795
|
+
compProps = {
|
|
796
|
+
formatter: (value2) => `${value2}`.replace(/[1-9]\d{0,2}(?=(\d{3})+$)/g, "$&,"),
|
|
797
|
+
parser: (value2) => value2.replace(/\$\s?|(,*)/g, ""),
|
|
798
|
+
...compProps
|
|
799
|
+
};
|
|
800
|
+
}
|
|
801
|
+
return {
|
|
802
|
+
size: "small",
|
|
803
|
+
dropdownClassName: unref(getUiSize),
|
|
804
|
+
getPopupContainer: () => document.body,
|
|
805
|
+
placeholder: createPlaceholderMessage(unref(getComponent)),
|
|
806
|
+
...omit(compProps, "onChange"),
|
|
807
|
+
[valueField]: value
|
|
808
|
+
};
|
|
809
|
+
});
|
|
810
|
+
async function handleChange(e) {
|
|
811
|
+
const component = unref(getComponent);
|
|
812
|
+
if (component === "Checkbox") {
|
|
813
|
+
currentValueRef.value = e.target.checked;
|
|
814
|
+
} else if (e?.target && Reflect.has(e.target, "value")) {
|
|
815
|
+
currentValueRef.value = e.target.value;
|
|
816
|
+
} else {
|
|
817
|
+
currentValueRef.value = e;
|
|
818
|
+
}
|
|
819
|
+
const onChange = unref(getComponentProps)?.onChange;
|
|
820
|
+
if (onChange && isFunction(onChange))
|
|
821
|
+
onChange(...arguments);
|
|
822
|
+
setTableValue();
|
|
823
|
+
table.emits?.("edit-change", {
|
|
824
|
+
column: props2.column,
|
|
825
|
+
value: unref(currentValueRef),
|
|
826
|
+
record: toRaw(props2.record),
|
|
827
|
+
index: props2.index
|
|
828
|
+
});
|
|
829
|
+
handleSubmitRule();
|
|
830
|
+
}
|
|
831
|
+
async function handleSubmitRule() {
|
|
832
|
+
const { column, record } = props2;
|
|
833
|
+
const { editRule: editRule2 } = column;
|
|
834
|
+
const currentValue = unref(currentValueRef);
|
|
835
|
+
if (editRule2) {
|
|
836
|
+
if (isBoolean(editRule2) && !currentValue && !isNumber(currentValue)) {
|
|
837
|
+
ruleVisible.value = true;
|
|
838
|
+
const component = unref(getComponent);
|
|
839
|
+
ruleMessage.value = createPlaceholderMessage(component);
|
|
840
|
+
return false;
|
|
841
|
+
}
|
|
842
|
+
if (isFunction(editRule2)) {
|
|
843
|
+
const res = await editRule2(currentValue, record);
|
|
844
|
+
if (!!res) {
|
|
845
|
+
ruleMessage.value = res;
|
|
846
|
+
ruleVisible.value = true;
|
|
847
|
+
return false;
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
ruleMessage.value = "";
|
|
852
|
+
return true;
|
|
853
|
+
}
|
|
854
|
+
function handleOptionsChange(options) {
|
|
855
|
+
optionsRef.value = options;
|
|
856
|
+
}
|
|
857
|
+
return (_ctx, _cache) => {
|
|
858
|
+
return openBlock(), createElementBlock("div", _hoisted_1$a, [
|
|
859
|
+
createVNode(unref(CellComponent), mergeProps({ ref: "elRef" }, unref(getComponentProps), {
|
|
860
|
+
component: _ctx.column?.editComponent,
|
|
861
|
+
popoverVisible: unref(getRuleVisible),
|
|
862
|
+
rule: unref(editRule),
|
|
863
|
+
ruleMessage: ruleMessage.value,
|
|
864
|
+
class: unref(getWrapperClass),
|
|
865
|
+
onChange: handleChange,
|
|
866
|
+
onOptionsChange: handleOptionsChange
|
|
867
|
+
}), null, 16, ["component", "popoverVisible", "rule", "ruleMessage", "class"])
|
|
868
|
+
]);
|
|
869
|
+
};
|
|
870
|
+
}
|
|
871
|
+
});
|
|
872
|
+
function renderEditCell(column) {
|
|
873
|
+
return ({ text: value, record, index }) => {
|
|
874
|
+
record.onValid = async () => {
|
|
875
|
+
if (isArray(record?.validCbs)) {
|
|
876
|
+
const validFns = (record?.validCbs || []).map((fn) => fn());
|
|
877
|
+
const res = await Promise.all(validFns);
|
|
878
|
+
return res.every((item) => !!item);
|
|
879
|
+
}
|
|
880
|
+
return false;
|
|
881
|
+
};
|
|
882
|
+
record.onEdit = async (edit, submit = false) => {
|
|
883
|
+
if (!submit) {
|
|
884
|
+
record.editable = edit;
|
|
885
|
+
}
|
|
886
|
+
if (!edit && submit) {
|
|
887
|
+
if (!await record.onValid())
|
|
888
|
+
return false;
|
|
889
|
+
const res = await record.onSubmitEdit?.();
|
|
890
|
+
if (res) {
|
|
891
|
+
record.editable = false;
|
|
892
|
+
return true;
|
|
893
|
+
}
|
|
894
|
+
return false;
|
|
895
|
+
}
|
|
896
|
+
if (!edit && !submit) {
|
|
897
|
+
record.onCancelEdit?.();
|
|
898
|
+
}
|
|
899
|
+
return true;
|
|
900
|
+
};
|
|
901
|
+
return h(_sfc_main$j, {
|
|
902
|
+
value,
|
|
903
|
+
record,
|
|
904
|
+
column,
|
|
905
|
+
index
|
|
906
|
+
});
|
|
907
|
+
};
|
|
908
|
+
}
|
|
909
|
+
const INDEX_FLAG = "INDEX";
|
|
910
|
+
const ACTION_COLUMN = "ACTION";
|
|
911
|
+
function handleItem(item, ellipsis) {
|
|
912
|
+
const { appConf } = useAppStore();
|
|
913
|
+
const { align } = appConf.ui.table;
|
|
914
|
+
const { key, dataIndex, children } = item;
|
|
915
|
+
item.align = item.align || align;
|
|
916
|
+
if (ellipsis) {
|
|
917
|
+
if (!key)
|
|
918
|
+
item.key = dataIndex && dataIndex.toString();
|
|
919
|
+
if (!isBoolean(item.ellipsis)) {
|
|
920
|
+
item = Object.assign(item, {
|
|
921
|
+
ellipsis
|
|
922
|
+
});
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
if (children && children.length) {
|
|
926
|
+
handleChildren(children, !!ellipsis);
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
function handleChildren(children, ellipsis) {
|
|
930
|
+
if (!children)
|
|
931
|
+
return;
|
|
932
|
+
children.forEach((item) => {
|
|
933
|
+
const { children: children2 } = item;
|
|
934
|
+
handleItem(item, ellipsis);
|
|
935
|
+
handleChildren(children2, ellipsis);
|
|
936
|
+
});
|
|
937
|
+
}
|
|
938
|
+
function handleIndexColumn(propsRef, getPaginationRef, columns) {
|
|
939
|
+
const { getIsZH } = useHeader();
|
|
940
|
+
const { t } = useI18n("UI");
|
|
941
|
+
const { showIndexColumn, indexColumnProps, isTreeTable } = unref(propsRef);
|
|
942
|
+
let pushIndexColumns = false;
|
|
943
|
+
if (unref(isTreeTable)) {
|
|
944
|
+
return;
|
|
945
|
+
}
|
|
946
|
+
columns.forEach(() => {
|
|
947
|
+
const indIndex = columns.findIndex((column) => column.flag === INDEX_FLAG);
|
|
948
|
+
if (showIndexColumn) {
|
|
949
|
+
pushIndexColumns = indIndex === -1;
|
|
950
|
+
} else if (!showIndexColumn && indIndex !== -1) {
|
|
951
|
+
columns.splice(indIndex, 1);
|
|
952
|
+
}
|
|
953
|
+
});
|
|
954
|
+
if (!pushIndexColumns)
|
|
955
|
+
return;
|
|
956
|
+
const isFixedLeft = columns.some((item) => item.fixed === "left");
|
|
957
|
+
columns.unshift({
|
|
958
|
+
flag: INDEX_FLAG,
|
|
959
|
+
width: unref(getIsZH) ? 50 : 70,
|
|
960
|
+
title: t("NUMBER"),
|
|
961
|
+
align: "center",
|
|
962
|
+
customRender: ({ index }) => {
|
|
963
|
+
const getPagination = unref(getPaginationRef);
|
|
964
|
+
const { appConf } = useAppStore();
|
|
965
|
+
const { defaultPageSize } = appConf.ui.table;
|
|
966
|
+
if (isBoolean(getPagination)) {
|
|
967
|
+
return `${index + 1}`;
|
|
968
|
+
}
|
|
969
|
+
const { current = 1, pageSize = defaultPageSize } = getPagination;
|
|
970
|
+
return ((current < 1 ? 1 : current) - 1) * pageSize + index + 1;
|
|
971
|
+
},
|
|
972
|
+
...isFixedLeft ? {
|
|
973
|
+
fixed: "left"
|
|
974
|
+
} : {},
|
|
975
|
+
...indexColumnProps
|
|
976
|
+
});
|
|
977
|
+
}
|
|
978
|
+
function handleActionColumn(propsRef, columns) {
|
|
979
|
+
const { getIsZH } = useHeader();
|
|
980
|
+
const { t } = useI18n("UI");
|
|
981
|
+
const { operations = [
|
|
982
|
+
{ name: t("EDIT"), icon: "mdi:text-box-edit-outline", onClick: unref(propsRef).onUpdate },
|
|
983
|
+
{ name: t("DELETE"), icon: "mdi:delete-outline", onClick: unref(propsRef).onDelete }
|
|
984
|
+
] } = unref(propsRef);
|
|
985
|
+
if (!operations || isObject(operations) && !operations?.btns || isArray(operations) && !operations)
|
|
986
|
+
return;
|
|
987
|
+
const hasIndex = columns.findIndex((column) => column.flag === ACTION_COLUMN);
|
|
988
|
+
if (hasIndex === -1) {
|
|
989
|
+
let column = isObject(operations) ? operations : isArray(operations) ? { btns: operations } : {};
|
|
990
|
+
let expand = column.expand ? column.expand : false;
|
|
991
|
+
let columnObj = {
|
|
992
|
+
fixed: "right",
|
|
993
|
+
title: t("ACTIONS"),
|
|
994
|
+
align: "center",
|
|
995
|
+
expand,
|
|
996
|
+
width: `${expand ? column.btns.length * 30 + 40 : unref(getIsZH) ? 70 : 90}px`,
|
|
997
|
+
...column,
|
|
998
|
+
flag: ACTION_COLUMN
|
|
999
|
+
};
|
|
1000
|
+
columns.push({
|
|
1001
|
+
...columnObj,
|
|
1002
|
+
customRender: ({ record, index }) => {
|
|
1003
|
+
return h$1(
|
|
1004
|
+
_sfc_main$k,
|
|
1005
|
+
omit({
|
|
1006
|
+
...columnObj,
|
|
1007
|
+
record,
|
|
1008
|
+
index
|
|
1009
|
+
}, "align")
|
|
1010
|
+
);
|
|
1011
|
+
}
|
|
1012
|
+
});
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
1015
|
+
function sortFixedColumn(columns) {
|
|
1016
|
+
const fixedLeftColumn = [];
|
|
1017
|
+
const fixedRightColumn = [];
|
|
1018
|
+
const defaultColumn = [];
|
|
1019
|
+
for (let column of columns) {
|
|
1020
|
+
if (column.defaultHidden)
|
|
1021
|
+
continue;
|
|
1022
|
+
if (column.fixed === "left") {
|
|
1023
|
+
fixedLeftColumn.push(column);
|
|
1024
|
+
continue;
|
|
1025
|
+
}
|
|
1026
|
+
if (column.fixed === "right") {
|
|
1027
|
+
fixedRightColumn.push(column);
|
|
1028
|
+
continue;
|
|
1029
|
+
}
|
|
1030
|
+
defaultColumn.push(column);
|
|
1031
|
+
}
|
|
1032
|
+
return [
|
|
1033
|
+
...fixedLeftColumn,
|
|
1034
|
+
...defaultColumn,
|
|
1035
|
+
...fixedRightColumn
|
|
1036
|
+
];
|
|
1037
|
+
}
|
|
1038
|
+
function useColumns(propsRef, getPaginationRef, tableElRef) {
|
|
1039
|
+
const columnsRef = ref(unref(propsRef).columns);
|
|
1040
|
+
let cacheColumns = unref(propsRef).columns;
|
|
1041
|
+
const getColumnsRef = computed$1(() => {
|
|
1042
|
+
const columns = cloneDeep(unref(columnsRef));
|
|
1043
|
+
const { ellipsis } = unref(propsRef);
|
|
1044
|
+
columns.forEach((it, index) => {
|
|
1045
|
+
it.class = it.class ?? "";
|
|
1046
|
+
if (!it.class.split(" ").includes("__column")) {
|
|
1047
|
+
it.class = `${it.class} __column`;
|
|
1048
|
+
}
|
|
1049
|
+
const { customRender, render } = it;
|
|
1050
|
+
if (it.sorter) {
|
|
1051
|
+
it.sorter = {
|
|
1052
|
+
multiple: Number(it.sorter)
|
|
1053
|
+
};
|
|
1054
|
+
}
|
|
1055
|
+
handleItem(
|
|
1056
|
+
it,
|
|
1057
|
+
Reflect.has(it, "ellipsis") ? !!it.ellipsis : !!ellipsis && !render && !customRender
|
|
1058
|
+
);
|
|
1059
|
+
});
|
|
1060
|
+
handleIndexColumn(propsRef, getPaginationRef, columns);
|
|
1061
|
+
handleActionColumn(propsRef, columns);
|
|
1062
|
+
return columns;
|
|
1063
|
+
});
|
|
1064
|
+
const getViewColumns = computed$1(() => {
|
|
1065
|
+
const viewColumns = sortFixedColumn(unref(getColumnsRef));
|
|
1066
|
+
const columns = cloneDeep(viewColumns);
|
|
1067
|
+
return columns.filter((column) => isIfShow(column)).map((column) => {
|
|
1068
|
+
if (column.edit) {
|
|
1069
|
+
column.customRender = renderEditCell(column);
|
|
1070
|
+
}
|
|
1071
|
+
return column;
|
|
1072
|
+
});
|
|
1073
|
+
});
|
|
1074
|
+
function isIfShow(column) {
|
|
1075
|
+
const ifShow = column.show;
|
|
1076
|
+
return isBoolean(ifShow) ? ifShow : isFunction(ifShow) ? ifShow(column) : true;
|
|
1077
|
+
}
|
|
1078
|
+
useDebounceFn(addResize, 100);
|
|
1079
|
+
function addResize() {
|
|
1080
|
+
const { resizable, minWidth = 50, maxWidth = 700 } = unref(propsRef);
|
|
1081
|
+
let els = unref(tableElRef)?.$el.querySelectorAll(".__column"), allWidth = 0, columnAllWidth = 0, noWidthNum = 0, avgWidth = 0;
|
|
1082
|
+
for (let i = 0; i < els?.length; i++) {
|
|
1083
|
+
allWidth += els[i].offsetWidth ?? 0;
|
|
1084
|
+
}
|
|
1085
|
+
columnsRef.value.forEach((it) => {
|
|
1086
|
+
if (isIfShow(it)) {
|
|
1087
|
+
if (it.width) {
|
|
1088
|
+
columnAllWidth += parseInt(`${it.width}`);
|
|
1089
|
+
} else {
|
|
1090
|
+
noWidthNum++;
|
|
1091
|
+
}
|
|
1092
|
+
}
|
|
1093
|
+
});
|
|
1094
|
+
avgWidth = (allWidth - columnAllWidth) / noWidthNum;
|
|
1095
|
+
columnsRef.value.forEach((it) => {
|
|
1096
|
+
it.width = it.width || avgWidth - 1;
|
|
1097
|
+
if (Reflect.has(it, "resizable") ? !!it.resizable : resizable) {
|
|
1098
|
+
it.resizable = true;
|
|
1099
|
+
it.minWidth = it.minWidth || minWidth;
|
|
1100
|
+
it.maxWidth = it.maxWidth || maxWidth;
|
|
1101
|
+
}
|
|
1102
|
+
});
|
|
1103
|
+
}
|
|
1104
|
+
function getColumns(opt) {
|
|
1105
|
+
const { ignoreIndex, ignoreAction, sort } = opt || {};
|
|
1106
|
+
let columns = toRaw$1(unref(getColumnsRef));
|
|
1107
|
+
if (ignoreIndex) {
|
|
1108
|
+
columns = columns.filter((it) => it.flag !== INDEX_FLAG);
|
|
1109
|
+
}
|
|
1110
|
+
if (ignoreAction) {
|
|
1111
|
+
columns = columns.filter((it) => it.flag !== ACTION_COLUMN);
|
|
1112
|
+
}
|
|
1113
|
+
if (sort) {
|
|
1114
|
+
columns = sortFixedColumn(columns);
|
|
1115
|
+
}
|
|
1116
|
+
return columns;
|
|
1117
|
+
}
|
|
1118
|
+
function setColumns(columnList = []) {
|
|
1119
|
+
const columns = cloneDeep(columnList);
|
|
1120
|
+
if (!isArray(columns) || !columns.length) {
|
|
1121
|
+
columnsRef.value = [];
|
|
1122
|
+
return;
|
|
1123
|
+
}
|
|
1124
|
+
const cacheKeys = cacheColumns.map((item) => item.dataIndex);
|
|
1125
|
+
if (!isString(columns[0])) {
|
|
1126
|
+
columnsRef.value = columns;
|
|
1127
|
+
} else {
|
|
1128
|
+
const columnKeys = columns;
|
|
1129
|
+
const newColumns = [];
|
|
1130
|
+
cacheColumns.forEach((it) => {
|
|
1131
|
+
newColumns.push({
|
|
1132
|
+
...it,
|
|
1133
|
+
show: true,
|
|
1134
|
+
defaultHidden: !columnKeys.includes(it.dataIndex || it.key)
|
|
1135
|
+
});
|
|
1136
|
+
});
|
|
1137
|
+
if (!isEqual(cacheKeys, columns)) {
|
|
1138
|
+
newColumns.sort((prev, next) => {
|
|
1139
|
+
return columnKeys.indexOf(prev.dataIndex) - columnKeys.indexOf(next.dataIndex);
|
|
1140
|
+
});
|
|
1141
|
+
}
|
|
1142
|
+
columnsRef.value = newColumns;
|
|
1143
|
+
cacheColumns = [...newColumns];
|
|
1144
|
+
}
|
|
1145
|
+
}
|
|
1146
|
+
function setColumnsByDataIndex(dataIndex, value) {
|
|
1147
|
+
if (!dataIndex || !value)
|
|
1148
|
+
return;
|
|
1149
|
+
cacheColumns.forEach((item) => {
|
|
1150
|
+
if (item.dataIndex === dataIndex) {
|
|
1151
|
+
Object.assign(item, value);
|
|
1152
|
+
return;
|
|
1153
|
+
}
|
|
1154
|
+
});
|
|
1155
|
+
columnsRef.value = [...cacheColumns];
|
|
1156
|
+
}
|
|
1157
|
+
function getCacheColumns() {
|
|
1158
|
+
return cacheColumns;
|
|
1159
|
+
}
|
|
1160
|
+
watch(
|
|
1161
|
+
() => unref(propsRef).columns,
|
|
1162
|
+
(columns) => {
|
|
1163
|
+
columnsRef.value = columns;
|
|
1164
|
+
cacheColumns = columns.filter((it) => !it.flag) ?? [];
|
|
1165
|
+
nextTick(() => addResize());
|
|
1166
|
+
}
|
|
1167
|
+
);
|
|
1168
|
+
return {
|
|
1169
|
+
getViewColumns,
|
|
1170
|
+
getColumnsRef,
|
|
1171
|
+
getColumns,
|
|
1172
|
+
setColumns,
|
|
1173
|
+
setColumnsByDataIndex,
|
|
1174
|
+
getCacheColumns
|
|
1175
|
+
};
|
|
1176
|
+
}
|
|
1177
|
+
function useCustomRow(propsRef, { setSelectedRowKeys, getSelectedRowKeys, clearSelectedRowKeys, emits }) {
|
|
1178
|
+
const customRow = (record, index) => {
|
|
1179
|
+
return {
|
|
1180
|
+
onClick: (e) => {
|
|
1181
|
+
e?.stopPropagation();
|
|
1182
|
+
function handleClick() {
|
|
1183
|
+
const { rowSelection, rowKey, clickToSelectRow } = unref(propsRef);
|
|
1184
|
+
if (!rowSelection || !clickToSelectRow)
|
|
1185
|
+
return;
|
|
1186
|
+
const keys = getSelectedRowKeys();
|
|
1187
|
+
const key = record[rowKey];
|
|
1188
|
+
if (!key)
|
|
1189
|
+
return;
|
|
1190
|
+
const isCheckbox = rowSelection.type === "checkbox";
|
|
1191
|
+
const isRadio = rowSelection.type === "radio";
|
|
1192
|
+
if (clickToSelectRow) {
|
|
1193
|
+
if (isCheckbox) {
|
|
1194
|
+
if (keys.includes(key)) {
|
|
1195
|
+
setSelectedRowKeys(keys.filter((it) => it !== key));
|
|
1196
|
+
} else {
|
|
1197
|
+
setSelectedRowKeys([...keys, key]);
|
|
1198
|
+
}
|
|
1199
|
+
}
|
|
1200
|
+
if (isRadio)
|
|
1201
|
+
setSelectedRowKeys([key]);
|
|
1202
|
+
return;
|
|
1203
|
+
}
|
|
1204
|
+
if (isCheckbox) {
|
|
1205
|
+
const tr = e.composedPath?.().find((dom) => dom.tagName === "TR");
|
|
1206
|
+
if (!tr)
|
|
1207
|
+
return;
|
|
1208
|
+
const checkBox = tr.querySelector("input[type=checkbox]");
|
|
1209
|
+
if (!checkBox || checkBox.hasAttribute("disabled"))
|
|
1210
|
+
return;
|
|
1211
|
+
if (!keys.includes(key)) {
|
|
1212
|
+
setSelectedRowKeys([...keys, key]);
|
|
1213
|
+
return;
|
|
1214
|
+
}
|
|
1215
|
+
const keyIndex = keys.findIndex((item) => item === key);
|
|
1216
|
+
keys.splice(keyIndex, 1);
|
|
1217
|
+
setSelectedRowKeys(keys);
|
|
1218
|
+
return;
|
|
1219
|
+
}
|
|
1220
|
+
if (isRadio) {
|
|
1221
|
+
if (!keys.includes(key)) {
|
|
1222
|
+
if (keys.length) {
|
|
1223
|
+
clearSelectedRowKeys();
|
|
1224
|
+
}
|
|
1225
|
+
setSelectedRowKeys([key]);
|
|
1226
|
+
return;
|
|
1227
|
+
}
|
|
1228
|
+
clearSelectedRowKeys();
|
|
1229
|
+
}
|
|
1230
|
+
}
|
|
1231
|
+
handleClick();
|
|
1232
|
+
emits("row-click", record, index, e);
|
|
1233
|
+
},
|
|
1234
|
+
onDblclick: (event) => {
|
|
1235
|
+
emits("row-dbClick", record, index, event);
|
|
1236
|
+
},
|
|
1237
|
+
onContextmenu: (event) => {
|
|
1238
|
+
emits("row-contextmenu", record, index, event);
|
|
1239
|
+
},
|
|
1240
|
+
onMouseenter: (event) => {
|
|
1241
|
+
emits("row-mouseenter", record, index, event);
|
|
1242
|
+
},
|
|
1243
|
+
onMouseleave: (event) => {
|
|
1244
|
+
emits("row-mouseleave", record, index, event);
|
|
1245
|
+
}
|
|
1246
|
+
};
|
|
1247
|
+
};
|
|
1248
|
+
return {
|
|
1249
|
+
customRow
|
|
1250
|
+
};
|
|
1251
|
+
}
|
|
1252
|
+
function useDataSource(propsRef, {
|
|
1253
|
+
getPaginationInfo,
|
|
1254
|
+
setPagination,
|
|
1255
|
+
clearSelectedRowKeys
|
|
1256
|
+
}) {
|
|
1257
|
+
const dataSourceRef = ref$1([]);
|
|
1258
|
+
watch(
|
|
1259
|
+
() => unref(propsRef).dataSource,
|
|
1260
|
+
(dataSource) => {
|
|
1261
|
+
dataSource && (dataSourceRef.value = dataSource);
|
|
1262
|
+
},
|
|
1263
|
+
{
|
|
1264
|
+
immediate: true
|
|
1265
|
+
}
|
|
1266
|
+
);
|
|
1267
|
+
const getDataSourceRef = computed$1(() => {
|
|
1268
|
+
return unref(dataSourceRef);
|
|
1269
|
+
});
|
|
1270
|
+
function handleTableChange(pagination, filters, sorter) {
|
|
1271
|
+
const { sortFn, filterFn, onTableChange: onTableChange2, clearSelectOnPageChange } = unref(propsRef);
|
|
1272
|
+
const { appConf: appConf2 } = useAppStore();
|
|
1273
|
+
const { current = 1, pageSize = appConf2.ui.table.defaultPageSize } = pagination;
|
|
1274
|
+
if (clearSelectOnPageChange) {
|
|
1275
|
+
clearSelectedRowKeys();
|
|
1276
|
+
}
|
|
1277
|
+
setPagination(pagination);
|
|
1278
|
+
const params = {};
|
|
1279
|
+
if (sorter && isFunction(sortFn)) {
|
|
1280
|
+
params.sortInfo = sortFn(sorter);
|
|
1281
|
+
}
|
|
1282
|
+
if (filters && isFunction(filterFn)) {
|
|
1283
|
+
params.filterInfo = filterFn(filters);
|
|
1284
|
+
}
|
|
1285
|
+
return onTableChange2({
|
|
1286
|
+
pagination: {
|
|
1287
|
+
current,
|
|
1288
|
+
pageSize
|
|
1289
|
+
},
|
|
1290
|
+
sort: sorter,
|
|
1291
|
+
filter: toRaw$1(unref(params.filterInfo)),
|
|
1292
|
+
showBtnLoading: false
|
|
1293
|
+
});
|
|
1294
|
+
}
|
|
1295
|
+
const { defSort, onTableChange } = unref(propsRef);
|
|
1296
|
+
const { appConf } = useAppStore();
|
|
1297
|
+
onTableChange({
|
|
1298
|
+
pagination: {
|
|
1299
|
+
current: 1,
|
|
1300
|
+
pageSize: appConf.ui.table.defaultPageSize
|
|
1301
|
+
},
|
|
1302
|
+
sort: defSort,
|
|
1303
|
+
filter: null,
|
|
1304
|
+
showBtnLoading: false
|
|
1305
|
+
}, false);
|
|
1306
|
+
function updateTableDataRecord(rowKey, record) {
|
|
1307
|
+
const row = findTableDataRecord(rowKey);
|
|
1308
|
+
if (row) {
|
|
1309
|
+
for (const field in record) {
|
|
1310
|
+
row[field] = record[field];
|
|
1311
|
+
}
|
|
1312
|
+
return row;
|
|
1313
|
+
}
|
|
1314
|
+
}
|
|
1315
|
+
function findTableDataRecord(rowKey) {
|
|
1316
|
+
if (!dataSourceRef.value || dataSourceRef.value.length == 0 || !rowKey)
|
|
1317
|
+
return;
|
|
1318
|
+
const { childrenColumnName = "children" } = unref(propsRef);
|
|
1319
|
+
const findRow = (array) => {
|
|
1320
|
+
let ret;
|
|
1321
|
+
array.some(function iter(r) {
|
|
1322
|
+
if (Reflect.has(r, unref(propsRef).rowKey) && r[unref(propsRef).rowKey] === rowKey) {
|
|
1323
|
+
ret = r;
|
|
1324
|
+
return true;
|
|
1325
|
+
}
|
|
1326
|
+
return r[childrenColumnName] && r[childrenColumnName].some(iter);
|
|
1327
|
+
});
|
|
1328
|
+
return ret;
|
|
1329
|
+
};
|
|
1330
|
+
return findRow(dataSourceRef.value);
|
|
1331
|
+
}
|
|
1332
|
+
return {
|
|
1333
|
+
getDataSourceRef,
|
|
1334
|
+
handleTableChange,
|
|
1335
|
+
updateTableDataRecord,
|
|
1336
|
+
findTableDataRecord
|
|
1337
|
+
};
|
|
1338
|
+
}
|
|
1339
|
+
function useFormValue(props2, key = "value", changeEvent = "change", emitData) {
|
|
1340
|
+
const instance = getCurrentInstance$1();
|
|
1341
|
+
const emit = instance?.emit;
|
|
1342
|
+
const innerState = reactive({
|
|
1343
|
+
value: props2[key]
|
|
1344
|
+
});
|
|
1345
|
+
const defaultState = readonly(innerState);
|
|
1346
|
+
const setState = (val) => {
|
|
1347
|
+
innerState.value = val;
|
|
1348
|
+
nextTick(() => {
|
|
1349
|
+
emit?.(changeEvent, val, ...toRaw$1(unref(emitData)) || []);
|
|
1350
|
+
});
|
|
1351
|
+
};
|
|
1352
|
+
watchEffect(() => {
|
|
1353
|
+
innerState.value = props2[key];
|
|
1354
|
+
});
|
|
1355
|
+
const state = computed$1({
|
|
1356
|
+
get() {
|
|
1357
|
+
return innerState.value;
|
|
1358
|
+
},
|
|
1359
|
+
set(value) {
|
|
1360
|
+
if (isEqual(value, defaultState.value))
|
|
1361
|
+
return;
|
|
1362
|
+
innerState.value = value;
|
|
1363
|
+
nextTick(() => {
|
|
1364
|
+
emit?.(changeEvent, value, ...toRaw$1(unref(emitData)) || []);
|
|
1365
|
+
});
|
|
1366
|
+
}
|
|
1367
|
+
});
|
|
1368
|
+
return [state, setState, defaultState];
|
|
1369
|
+
}
|
|
1370
|
+
const _sfc_main$i = /* @__PURE__ */ defineComponent({
|
|
1371
|
+
__name: "radioButton",
|
|
1372
|
+
props: {
|
|
1373
|
+
value: {
|
|
1374
|
+
type: [String, Number, Boolean]
|
|
1375
|
+
},
|
|
1376
|
+
options: {
|
|
1377
|
+
type: Array,
|
|
1378
|
+
default: () => []
|
|
1379
|
+
}
|
|
1380
|
+
},
|
|
1381
|
+
setup(__props) {
|
|
1382
|
+
const props2 = __props;
|
|
1383
|
+
const attrs = useAttrs();
|
|
1384
|
+
const [state] = useFormValue(props2);
|
|
1385
|
+
const getOptions = computed$1(() => {
|
|
1386
|
+
const { options } = props2;
|
|
1387
|
+
if (!options || options?.length === 0)
|
|
1388
|
+
return [];
|
|
1389
|
+
const isStringArr = options.some((item) => isString(item));
|
|
1390
|
+
if (!isStringArr)
|
|
1391
|
+
return options;
|
|
1392
|
+
return options.map((item) => ({ label: item, value: item }));
|
|
1393
|
+
});
|
|
1394
|
+
return (_ctx, _cache) => {
|
|
1395
|
+
const _component_ARadioButton = RadioButton;
|
|
1396
|
+
const _component_ARadioGroup = RadioGroup;
|
|
1397
|
+
return openBlock(), createBlock(_component_ARadioGroup, mergeProps(unref(attrs), {
|
|
1398
|
+
value: unref(state),
|
|
1399
|
+
"onUpdate:value": _cache[0] || (_cache[0] = ($event) => isRef(state) ? state.value = $event : null),
|
|
1400
|
+
"button-style": "solid"
|
|
1401
|
+
}), {
|
|
1402
|
+
default: withCtx(() => [
|
|
1403
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(getOptions), (item) => {
|
|
1404
|
+
return openBlock(), createBlock(_component_ARadioButton, {
|
|
1405
|
+
key: `${item.value}`,
|
|
1406
|
+
value: item.value,
|
|
1407
|
+
disabled: item.disabled
|
|
1408
|
+
}, {
|
|
1409
|
+
default: withCtx(() => [
|
|
1410
|
+
createTextVNode(toDisplayString(item.label), 1)
|
|
1411
|
+
]),
|
|
1412
|
+
_: 2
|
|
1413
|
+
}, 1032, ["value", "disabled"]);
|
|
1414
|
+
}), 128))
|
|
1415
|
+
]),
|
|
1416
|
+
_: 1
|
|
1417
|
+
}, 16, ["value"]);
|
|
1418
|
+
};
|
|
1419
|
+
}
|
|
1420
|
+
});
|
|
1421
|
+
const _hoisted_1$9 = { class: "input-with-dialog" };
|
|
1422
|
+
const _sfc_main$h = /* @__PURE__ */ defineComponent({
|
|
1423
|
+
__name: "formInputUseDialog",
|
|
1424
|
+
setup(__props) {
|
|
1425
|
+
const { t } = useI18n("UI");
|
|
1426
|
+
const attrs = useAttrs();
|
|
1427
|
+
const bindProps = computed$1(() => {
|
|
1428
|
+
return {
|
|
1429
|
+
...omit(attrs, [
|
|
1430
|
+
"formValues"
|
|
1431
|
+
]),
|
|
1432
|
+
disabled: true
|
|
1433
|
+
};
|
|
1434
|
+
});
|
|
1435
|
+
function onClickInput() {
|
|
1436
|
+
const { model, schema = {} } = attrs.formValues;
|
|
1437
|
+
if (!schema.openDialog || !isFunction(schema.openDialog)) {
|
|
1438
|
+
error(t("MUSE_FUNCTION"));
|
|
1439
|
+
return;
|
|
1440
|
+
}
|
|
1441
|
+
schema.openDialog(model);
|
|
1442
|
+
}
|
|
1443
|
+
function clearProps() {
|
|
1444
|
+
const { model, schema = {} } = attrs.formValues;
|
|
1445
|
+
[...schema.linkProps, schema.name].forEach((it) => model[it] = null);
|
|
1446
|
+
}
|
|
1447
|
+
return (_ctx, _cache) => {
|
|
1448
|
+
return openBlock(), createElementBlock("div", _hoisted_1$9, [
|
|
1449
|
+
createElementVNode("div", { onClick: onClickInput }, [
|
|
1450
|
+
createVNode(unref(Input), normalizeProps(guardReactiveProps(unref(bindProps))), null, 16)
|
|
1451
|
+
]),
|
|
1452
|
+
unref(attrs).formValues?.schema?.linkProps?.length ? (openBlock(), createElementBlock("i", {
|
|
1453
|
+
key: 0,
|
|
1454
|
+
class: "i mdi:close-circle",
|
|
1455
|
+
onClick: clearProps
|
|
1456
|
+
})) : createCommentVNode("", true)
|
|
1457
|
+
]);
|
|
1458
|
+
};
|
|
1459
|
+
}
|
|
1460
|
+
});
|
|
1461
|
+
const components = {
|
|
1462
|
+
Input,
|
|
1463
|
+
InputWithDialog: _sfc_main$h,
|
|
1464
|
+
InputTextArea: Input.TextArea,
|
|
1465
|
+
InputSearch: Input.Search,
|
|
1466
|
+
InputGroup: Input.Group,
|
|
1467
|
+
InputPassword: Input.Password,
|
|
1468
|
+
Select,
|
|
1469
|
+
TreeSelect,
|
|
1470
|
+
Radio,
|
|
1471
|
+
RadioGroup: Radio.Group,
|
|
1472
|
+
RadioButtonGroup: _sfc_main$i,
|
|
1473
|
+
Checkbox,
|
|
1474
|
+
CheckboxGroup: Checkbox.Group,
|
|
1475
|
+
AutoComplete,
|
|
1476
|
+
Cascader,
|
|
1477
|
+
DatePicker,
|
|
1478
|
+
MonthPicker: DatePicker.MonthPicker,
|
|
1479
|
+
WeekPicker: DatePicker.WeekPicker,
|
|
1480
|
+
RangePicker: DatePicker.RangePicker,
|
|
1481
|
+
InputNumber,
|
|
1482
|
+
Switch,
|
|
1483
|
+
TimePicker,
|
|
1484
|
+
Slider,
|
|
1485
|
+
Rate,
|
|
1486
|
+
Divider
|
|
1487
|
+
};
|
|
1488
|
+
const componentMap = /* @__PURE__ */ new Map();
|
|
1489
|
+
for (let item in components) {
|
|
1490
|
+
componentMap.set(item, components[item]);
|
|
1491
|
+
}
|
|
1492
|
+
const _hoisted_1$8 = {
|
|
1493
|
+
key: 0,
|
|
1494
|
+
className: "preIcon pr-1"
|
|
1495
|
+
};
|
|
1496
|
+
const _hoisted_2$2 = {
|
|
1497
|
+
key: 0,
|
|
1498
|
+
className: "preIcon pl-1"
|
|
1499
|
+
};
|
|
1500
|
+
const _hoisted_3$2 = { class: "text" };
|
|
1501
|
+
const _hoisted_4$2 = /* @__PURE__ */ createElementVNode("i", { class: "text-2xl i ic:baseline-arrow-drop-down" }, null, -1);
|
|
1502
|
+
const _hoisted_5$1 = [
|
|
1503
|
+
_hoisted_4$2
|
|
1504
|
+
];
|
|
1505
|
+
const _sfc_main$g = /* @__PURE__ */ defineComponent({
|
|
1506
|
+
__name: "FormButtons",
|
|
1507
|
+
props: {
|
|
1508
|
+
mode: {
|
|
1509
|
+
type: String,
|
|
1510
|
+
default: "search"
|
|
1511
|
+
},
|
|
1512
|
+
show: {
|
|
1513
|
+
type: Boolean,
|
|
1514
|
+
default: true
|
|
1515
|
+
},
|
|
1516
|
+
showAdvancedButton: {
|
|
1517
|
+
type: Boolean,
|
|
1518
|
+
default: true
|
|
1519
|
+
},
|
|
1520
|
+
minShowColumn: {
|
|
1521
|
+
type: Number,
|
|
1522
|
+
default: 2
|
|
1523
|
+
},
|
|
1524
|
+
buttonList: {
|
|
1525
|
+
type: [Array],
|
|
1526
|
+
default: []
|
|
1527
|
+
},
|
|
1528
|
+
isAdvanced: {
|
|
1529
|
+
type: Boolean,
|
|
1530
|
+
default: true
|
|
1531
|
+
}
|
|
1532
|
+
},
|
|
1533
|
+
emits: ["handle-method"],
|
|
1534
|
+
setup(__props, { emit: emits }) {
|
|
1535
|
+
const props2 = __props;
|
|
1536
|
+
const { t } = useI18n();
|
|
1537
|
+
const advancedRef = ref$1(props2.isAdvanced);
|
|
1538
|
+
let key = 0;
|
|
1539
|
+
const showAdvanceRef = computed$1(() => {
|
|
1540
|
+
return props2.mode === "search" ? props2.showAdvancedButton : false;
|
|
1541
|
+
});
|
|
1542
|
+
const colOpt = computed$1(() => {
|
|
1543
|
+
let style = {
|
|
1544
|
+
textAlign: "right"
|
|
1545
|
+
};
|
|
1546
|
+
if (props2.mode === "dialog") {
|
|
1547
|
+
Object.assign(style, {
|
|
1548
|
+
display: "inline-block"
|
|
1549
|
+
});
|
|
1550
|
+
}
|
|
1551
|
+
return { style };
|
|
1552
|
+
});
|
|
1553
|
+
const getAdvanceClass = computed$1(() => {
|
|
1554
|
+
return [
|
|
1555
|
+
"basic-arrow",
|
|
1556
|
+
{ "basic-arrow--active": !advancedRef.value }
|
|
1557
|
+
];
|
|
1558
|
+
});
|
|
1559
|
+
const toggleAdvanced = () => {
|
|
1560
|
+
advancedRef.value = !advancedRef.value;
|
|
1561
|
+
dispatchResize();
|
|
1562
|
+
emits("handle-method", advancedRef.value);
|
|
1563
|
+
};
|
|
1564
|
+
function handleBtnClick(button) {
|
|
1565
|
+
if (button.onClick && isFunction(button.onClick)) {
|
|
1566
|
+
button.onClick();
|
|
1567
|
+
} else {
|
|
1568
|
+
emits("handle-method", button);
|
|
1569
|
+
}
|
|
1570
|
+
}
|
|
1571
|
+
watch(() => props2.isAdvanced, (v) => {
|
|
1572
|
+
if (v) {
|
|
1573
|
+
nextTick(() => toggleAdvanced());
|
|
1574
|
+
}
|
|
1575
|
+
}, {
|
|
1576
|
+
immediate: true
|
|
1577
|
+
});
|
|
1578
|
+
watch(
|
|
1579
|
+
() => props2.buttonList,
|
|
1580
|
+
(v) => key = new Date().getTime(),
|
|
1581
|
+
{
|
|
1582
|
+
immediate: true,
|
|
1583
|
+
deep: true
|
|
1584
|
+
}
|
|
1585
|
+
);
|
|
1586
|
+
return (_ctx, _cache) => {
|
|
1587
|
+
const _component_AButton = Button;
|
|
1588
|
+
const _component_AFormItem = FormItem;
|
|
1589
|
+
const _component_ACol = Col;
|
|
1590
|
+
const _directive_icon = resolveDirective("icon");
|
|
1591
|
+
const _directive_auth = resolveDirective("auth");
|
|
1592
|
+
return __props.show ? (openBlock(), createBlock(_component_ACol, normalizeProps(mergeProps({ key: 0 }, unref(colOpt))), {
|
|
1593
|
+
default: withCtx(() => [
|
|
1594
|
+
createVNode(_component_AFormItem, {
|
|
1595
|
+
class: "dt-form-btns",
|
|
1596
|
+
style: normalizeStyle({
|
|
1597
|
+
"margin-bottom": __props.mode === "search" ? "16px" : "0px"
|
|
1598
|
+
})
|
|
1599
|
+
}, {
|
|
1600
|
+
default: withCtx(() => [
|
|
1601
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(__props.buttonList, (button) => {
|
|
1602
|
+
return openBlock(), createElementBlock(Fragment, null, [
|
|
1603
|
+
(button.show === void 0 ? true : button.show) ? withDirectives((openBlock(), createBlock(_component_AButton, {
|
|
1604
|
+
type: button.type,
|
|
1605
|
+
class: normalizeClass(button.class),
|
|
1606
|
+
loading: button.loading?.value,
|
|
1607
|
+
disabled: button.disabled,
|
|
1608
|
+
key: unref(key),
|
|
1609
|
+
onClick: ($event) => handleBtnClick(button)
|
|
1610
|
+
}, {
|
|
1611
|
+
icon: withCtx(() => [
|
|
1612
|
+
button.preIcon ? withDirectives((openBlock(), createElementBlock("span", _hoisted_1$8, null, 512)), [
|
|
1613
|
+
[_directive_icon, button.preIcon]
|
|
1614
|
+
]) : createCommentVNode("", true)
|
|
1615
|
+
]),
|
|
1616
|
+
default: withCtx(() => [
|
|
1617
|
+
createTextVNode(" " + toDisplayString(unref(t)(button.name)) + " ", 1),
|
|
1618
|
+
button.postIcon ? withDirectives((openBlock(), createElementBlock("span", _hoisted_2$2, null, 512)), [
|
|
1619
|
+
[_directive_icon, button.postIcon]
|
|
1620
|
+
]) : createCommentVNode("", true)
|
|
1621
|
+
]),
|
|
1622
|
+
_: 2
|
|
1623
|
+
}, 1032, ["type", "class", "loading", "disabled", "onClick"])), [
|
|
1624
|
+
[_directive_auth, button.auth]
|
|
1625
|
+
]) : createCommentVNode("", true)
|
|
1626
|
+
], 64);
|
|
1627
|
+
}), 256)),
|
|
1628
|
+
unref(showAdvanceRef) ? (openBlock(), createBlock(_component_AButton, {
|
|
1629
|
+
key: 0,
|
|
1630
|
+
type: "link",
|
|
1631
|
+
class: "advanced",
|
|
1632
|
+
onClick: toggleAdvanced
|
|
1633
|
+
}, {
|
|
1634
|
+
default: withCtx(() => [
|
|
1635
|
+
createElementVNode("span", _hoisted_3$2, toDisplayString(advancedRef.value ? unref(t)("UI.ADVANCED") : unref(t)("UI.EXPAND")), 1),
|
|
1636
|
+
createElementVNode("span", {
|
|
1637
|
+
class: normalizeClass(unref(getAdvanceClass))
|
|
1638
|
+
}, _hoisted_5$1, 2)
|
|
1639
|
+
]),
|
|
1640
|
+
_: 1
|
|
1641
|
+
})) : createCommentVNode("", true)
|
|
1642
|
+
]),
|
|
1643
|
+
_: 1
|
|
1644
|
+
}, 8, ["style"])
|
|
1645
|
+
]),
|
|
1646
|
+
_: 1
|
|
1647
|
+
}, 16)) : createCommentVNode("", true);
|
|
1648
|
+
};
|
|
1649
|
+
}
|
|
1650
|
+
});
|
|
1651
|
+
const _hoisted_1$7 = { key: 0 };
|
|
1652
|
+
const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
1653
|
+
__name: "Fullscreen",
|
|
1654
|
+
setup(__props) {
|
|
1655
|
+
const { t } = useI18n("UI");
|
|
1656
|
+
const table = getTableInstance();
|
|
1657
|
+
const wrapEl = ref$1(null);
|
|
1658
|
+
const { toggle, isFullscreen } = useFullscreen(wrapEl);
|
|
1659
|
+
watch(
|
|
1660
|
+
() => table.tableElRef.value,
|
|
1661
|
+
(v) => {
|
|
1662
|
+
const getParent = (el) => {
|
|
1663
|
+
if (!el || !el.parentNode)
|
|
1664
|
+
return null;
|
|
1665
|
+
if (el.parentNode.className?.indexOf("dt-layout-content") !== -1) {
|
|
1666
|
+
wrapEl.value = el.parentNode;
|
|
1667
|
+
} else {
|
|
1668
|
+
getParent(el.parentNode);
|
|
1669
|
+
}
|
|
1670
|
+
};
|
|
1671
|
+
getParent(v.$el);
|
|
1672
|
+
}
|
|
1673
|
+
);
|
|
1674
|
+
return (_ctx, _cache) => {
|
|
1675
|
+
const _component_ATooltip = Tooltip;
|
|
1676
|
+
return openBlock(), createBlock(_component_ATooltip, { placement: "top" }, {
|
|
1677
|
+
title: withCtx(() => [
|
|
1678
|
+
!unref(isFullscreen) ? (openBlock(), createElementBlock("span", _hoisted_1$7, toDisplayString(unref(t)("FULLSCREEN")), 1)) : createCommentVNode("", true)
|
|
1679
|
+
]),
|
|
1680
|
+
default: withCtx(() => [
|
|
1681
|
+
createElementVNode("span", {
|
|
1682
|
+
class: "flex",
|
|
1683
|
+
onClick: _cache[0] || (_cache[0] = (...args) => unref(toggle) && unref(toggle)(...args))
|
|
1684
|
+
}, [
|
|
1685
|
+
createElementVNode("i", {
|
|
1686
|
+
class: normalizeClass(["i w-7 leading-7 text-center cursor-pointer", unref(isFullscreen) ? "ic:baseline-fullscreen-exit" : "ic:baseline-fullscreen"])
|
|
1687
|
+
}, null, 2)
|
|
1688
|
+
])
|
|
1689
|
+
]),
|
|
1690
|
+
_: 1
|
|
1691
|
+
});
|
|
1692
|
+
};
|
|
1693
|
+
}
|
|
1694
|
+
});
|
|
1695
|
+
const orgDialogProp = reactive({});
|
|
1696
|
+
const cbTransfer = reactive({});
|
|
1697
|
+
const dataTransfer = reactive({});
|
|
1698
|
+
function useModalOut() {
|
|
1699
|
+
const modal = ref$1(null);
|
|
1700
|
+
const loaded = ref$1(true);
|
|
1701
|
+
const uid = ref$1(null);
|
|
1702
|
+
const { isProd } = useApp();
|
|
1703
|
+
function register(modalMethod, uuid) {
|
|
1704
|
+
if (!getCurrentInstance()) {
|
|
1705
|
+
throw new Error("useModal\u53EA\u80FD\u5728setup()\u6216\u8005\u51FD\u6570\u4E2D\u4F7F\u7528");
|
|
1706
|
+
}
|
|
1707
|
+
uid.value = uuid;
|
|
1708
|
+
onUnmounted(() => {
|
|
1709
|
+
if (unref(isProd)) {
|
|
1710
|
+
modal.value = null;
|
|
1711
|
+
loaded.value = false;
|
|
1712
|
+
dataTransfer[unref(uid)] = null;
|
|
1713
|
+
orgDialogProp[unref(uid)] = null;
|
|
1714
|
+
cbTransfer[unref(uid)] = (res) => {
|
|
1715
|
+
};
|
|
1716
|
+
}
|
|
1717
|
+
});
|
|
1718
|
+
if (unref(loaded) && modalMethod === unref(modal))
|
|
1719
|
+
return;
|
|
1720
|
+
modal.value = modalMethod;
|
|
1721
|
+
loaded.value = true;
|
|
1722
|
+
}
|
|
1723
|
+
const getInstance = () => {
|
|
1724
|
+
const instance = unref(modal);
|
|
1725
|
+
if (!instance) {
|
|
1726
|
+
error("useModalOut \u5B9E\u4F8B\u672A\u5B9A\u4E49");
|
|
1727
|
+
}
|
|
1728
|
+
return instance;
|
|
1729
|
+
};
|
|
1730
|
+
const methods = {
|
|
1731
|
+
setModalProps: (props2) => {
|
|
1732
|
+
getInstance()?.setModalProps(props2);
|
|
1733
|
+
},
|
|
1734
|
+
redoModalHeight: () => {
|
|
1735
|
+
getInstance()?.redoModalHeight?.();
|
|
1736
|
+
},
|
|
1737
|
+
openModal: (params, afterClose) => {
|
|
1738
|
+
const id = unref(uid);
|
|
1739
|
+
dataTransfer[id] = isObject(params) ? { ...toRaw(params) } : params;
|
|
1740
|
+
getInstance()?.setModalProps({
|
|
1741
|
+
footer: [],
|
|
1742
|
+
defaultFullscreen: false,
|
|
1743
|
+
...orgDialogProp[id],
|
|
1744
|
+
visible: true
|
|
1745
|
+
});
|
|
1746
|
+
cbTransfer[id] = (res) => {
|
|
1747
|
+
if (afterClose && isFunction(afterClose)) {
|
|
1748
|
+
afterClose(res);
|
|
1749
|
+
}
|
|
1750
|
+
};
|
|
1751
|
+
},
|
|
1752
|
+
closeModal: () => {
|
|
1753
|
+
getInstance()?.setModalProps({ visible: false });
|
|
1754
|
+
}
|
|
1755
|
+
};
|
|
1756
|
+
return [register, methods];
|
|
1757
|
+
}
|
|
1758
|
+
function useModal(props2, setModalData) {
|
|
1759
|
+
const modalInstanceRef = ref$1(null);
|
|
1760
|
+
const currentInstance = getCurrentInstance();
|
|
1761
|
+
const uidRef = ref$1(null);
|
|
1762
|
+
const { isProd } = useApp();
|
|
1763
|
+
const getInstance = () => {
|
|
1764
|
+
const instance = unref(modalInstanceRef);
|
|
1765
|
+
if (!instance) {
|
|
1766
|
+
error("useModal \u5B9E\u4F8B\u672A\u5B9A\u4E49");
|
|
1767
|
+
}
|
|
1768
|
+
return instance;
|
|
1769
|
+
};
|
|
1770
|
+
const register = (modalInstance, uuid) => {
|
|
1771
|
+
if (unref(isProd)) {
|
|
1772
|
+
modalInstanceRef.value = null;
|
|
1773
|
+
}
|
|
1774
|
+
uidRef.value = uuid;
|
|
1775
|
+
modalInstanceRef.value = modalInstance;
|
|
1776
|
+
currentInstance?.emit("register", modalInstance, uuid);
|
|
1777
|
+
orgDialogProp[uuid] = toRaw(props2);
|
|
1778
|
+
modalInstance.setModalProps(props2);
|
|
1779
|
+
};
|
|
1780
|
+
watchEffect(() => {
|
|
1781
|
+
const data = dataTransfer[unref(uidRef)];
|
|
1782
|
+
if (!data)
|
|
1783
|
+
return;
|
|
1784
|
+
if (!setModalData || !isFunction(setModalData))
|
|
1785
|
+
return;
|
|
1786
|
+
nextTick(() => {
|
|
1787
|
+
setModalData(data);
|
|
1788
|
+
});
|
|
1789
|
+
});
|
|
1790
|
+
const methods = {
|
|
1791
|
+
setLoading: (loading = true) => {
|
|
1792
|
+
getInstance()?.setModalProps({ loading });
|
|
1793
|
+
},
|
|
1794
|
+
closeModal: (rsp) => {
|
|
1795
|
+
if (cbTransfer[unref(uidRef)])
|
|
1796
|
+
cbTransfer[unref(uidRef)](rsp);
|
|
1797
|
+
getInstance()?.setModalProps({ visible: false });
|
|
1798
|
+
},
|
|
1799
|
+
setModalProps: (props22) => {
|
|
1800
|
+
getInstance()?.setModalProps(props22);
|
|
1801
|
+
},
|
|
1802
|
+
redoModalHeight: () => {
|
|
1803
|
+
const callRedo = getInstance()?.redoModalHeight;
|
|
1804
|
+
callRedo && callRedo();
|
|
1805
|
+
}
|
|
1806
|
+
};
|
|
1807
|
+
return [register, methods];
|
|
1808
|
+
}
|
|
1809
|
+
const basicProps = {
|
|
1810
|
+
t: {
|
|
1811
|
+
type: String
|
|
1812
|
+
},
|
|
1813
|
+
visible: {
|
|
1814
|
+
type: Boolean
|
|
1815
|
+
},
|
|
1816
|
+
closable: {
|
|
1817
|
+
type: Boolean,
|
|
1818
|
+
default: true
|
|
1819
|
+
},
|
|
1820
|
+
destroyOnClose: {
|
|
1821
|
+
type: Boolean
|
|
1822
|
+
},
|
|
1823
|
+
scrollTop: {
|
|
1824
|
+
type: Boolean,
|
|
1825
|
+
default: true
|
|
1826
|
+
},
|
|
1827
|
+
height: { type: Number },
|
|
1828
|
+
minHeight: { type: Number },
|
|
1829
|
+
width: { type: [String, Number] },
|
|
1830
|
+
draggable: {
|
|
1831
|
+
type: Boolean,
|
|
1832
|
+
default: true
|
|
1833
|
+
},
|
|
1834
|
+
defaultFullscreen: {
|
|
1835
|
+
type: Boolean
|
|
1836
|
+
},
|
|
1837
|
+
canFullscreen: {
|
|
1838
|
+
type: Boolean,
|
|
1839
|
+
default: true
|
|
1840
|
+
},
|
|
1841
|
+
title: {
|
|
1842
|
+
type: String
|
|
1843
|
+
},
|
|
1844
|
+
loading: { type: Boolean, default: false },
|
|
1845
|
+
loadingTip: { type: String, default: "\u52A0\u8F7D\u4E2D..." },
|
|
1846
|
+
useWrapper: {
|
|
1847
|
+
type: Boolean,
|
|
1848
|
+
default: true
|
|
1849
|
+
},
|
|
1850
|
+
wrapClassName: { type: String },
|
|
1851
|
+
zIndex: { type: Number },
|
|
1852
|
+
centered: { type: Boolean },
|
|
1853
|
+
showOkBtn: {
|
|
1854
|
+
type: Boolean,
|
|
1855
|
+
default: true
|
|
1856
|
+
},
|
|
1857
|
+
showCancelBtn: {
|
|
1858
|
+
type: Boolean,
|
|
1859
|
+
default: true
|
|
1860
|
+
},
|
|
1861
|
+
okText: {
|
|
1862
|
+
type: String
|
|
1863
|
+
},
|
|
1864
|
+
cancelText: {
|
|
1865
|
+
type: String
|
|
1866
|
+
},
|
|
1867
|
+
mask: { type: Boolean, default: true },
|
|
1868
|
+
maskClosable: { type: Boolean, default: true },
|
|
1869
|
+
keyboard: { type: Boolean, default: true },
|
|
1870
|
+
maskStyle: Object,
|
|
1871
|
+
footer: {
|
|
1872
|
+
type: Object
|
|
1873
|
+
},
|
|
1874
|
+
bodyStyle: Object,
|
|
1875
|
+
wrapperProps: Object,
|
|
1876
|
+
getContainer: Function,
|
|
1877
|
+
closeFunc: Function,
|
|
1878
|
+
afterClose: Function
|
|
1879
|
+
};
|
|
1880
|
+
function useDragMove(context) {
|
|
1881
|
+
const getStyle = (dom, attr) => {
|
|
1882
|
+
return getComputedStyle(dom)[attr];
|
|
1883
|
+
};
|
|
1884
|
+
const drag = (wrap) => {
|
|
1885
|
+
if (!wrap)
|
|
1886
|
+
return;
|
|
1887
|
+
wrap.setAttribute("data-drag", unref(context.draggable));
|
|
1888
|
+
const dialogHeaderEl = wrap.querySelector(".ant-modal-header");
|
|
1889
|
+
const dragDom = wrap.querySelector(".ant-modal");
|
|
1890
|
+
if (!dialogHeaderEl || !dragDom || !unref(context.draggable))
|
|
1891
|
+
return;
|
|
1892
|
+
dialogHeaderEl.style.cursor = "move";
|
|
1893
|
+
dialogHeaderEl.onmousedown = (e) => {
|
|
1894
|
+
if (!e)
|
|
1895
|
+
return;
|
|
1896
|
+
const disX = e.clientX;
|
|
1897
|
+
const disY = e.clientY;
|
|
1898
|
+
const screenWidth = document.body.clientWidth;
|
|
1899
|
+
const screenHeight = document.documentElement.clientHeight;
|
|
1900
|
+
const dragDomWidth = dragDom.offsetWidth;
|
|
1901
|
+
const dragDomheight = dragDom.offsetHeight;
|
|
1902
|
+
console.log(dragDomWidth, dragDomheight, screenHeight, screenWidth);
|
|
1903
|
+
const minDragDomLeft = dragDom.offsetLeft;
|
|
1904
|
+
const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth;
|
|
1905
|
+
const minDragDomTop = dragDom.offsetTop;
|
|
1906
|
+
const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight;
|
|
1907
|
+
const domLeft = getStyle(dragDom, "left");
|
|
1908
|
+
const domTop = getStyle(dragDom, "top");
|
|
1909
|
+
let styL = +domLeft;
|
|
1910
|
+
let styT = +domTop;
|
|
1911
|
+
if (domLeft.includes("%")) {
|
|
1912
|
+
styL = +document.body.clientWidth * (+domLeft.replace(/%/g, "") / 100);
|
|
1913
|
+
styT = +document.body.clientHeight * (+domTop.replace(/%/g, "") / 100);
|
|
1914
|
+
} else {
|
|
1915
|
+
styL = +domLeft.replace(/px/g, "");
|
|
1916
|
+
styT = +domTop.replace(/px/g, "");
|
|
1917
|
+
}
|
|
1918
|
+
document.onmousemove = function(e2) {
|
|
1919
|
+
let left = e2.clientX - disX;
|
|
1920
|
+
let top = e2.clientY - disY;
|
|
1921
|
+
if (-left > minDragDomLeft) {
|
|
1922
|
+
left = -minDragDomLeft;
|
|
1923
|
+
} else if (left > maxDragDomLeft) {
|
|
1924
|
+
left = maxDragDomLeft;
|
|
1925
|
+
}
|
|
1926
|
+
if (-top > minDragDomTop) {
|
|
1927
|
+
top = -minDragDomTop;
|
|
1928
|
+
} else if (top > maxDragDomTop) {
|
|
1929
|
+
top = maxDragDomTop;
|
|
1930
|
+
}
|
|
1931
|
+
dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`;
|
|
1932
|
+
};
|
|
1933
|
+
document.onmouseup = () => {
|
|
1934
|
+
document.onmousemove = null;
|
|
1935
|
+
document.onmouseup = null;
|
|
1936
|
+
};
|
|
1937
|
+
};
|
|
1938
|
+
};
|
|
1939
|
+
const handleDrag = () => {
|
|
1940
|
+
const dragWraps = document.querySelectorAll(".ant-modal-wrap");
|
|
1941
|
+
for (const wrap of Array.from(dragWraps)) {
|
|
1942
|
+
if (!wrap)
|
|
1943
|
+
continue;
|
|
1944
|
+
const display = getStyle(wrap, "display");
|
|
1945
|
+
const draggable = wrap.getAttribute("data-drag");
|
|
1946
|
+
if (display !== "none") {
|
|
1947
|
+
if (draggable === null || unref(context.destroyOnClose)) {
|
|
1948
|
+
drag(wrap);
|
|
1949
|
+
}
|
|
1950
|
+
}
|
|
1951
|
+
}
|
|
1952
|
+
};
|
|
1953
|
+
watchEffect(() => {
|
|
1954
|
+
if (!unref(context.visible) || !unref(context.draggable)) {
|
|
1955
|
+
return;
|
|
1956
|
+
}
|
|
1957
|
+
useTimeoutFn(() => {
|
|
1958
|
+
handleDrag();
|
|
1959
|
+
}, 30);
|
|
1960
|
+
});
|
|
1961
|
+
}
|
|
1962
|
+
function _isSlot(s) {
|
|
1963
|
+
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
|
|
1964
|
+
}
|
|
1965
|
+
const _sfc_main$e = {
|
|
1966
|
+
name: "Modal",
|
|
1967
|
+
inheritAttrs: false,
|
|
1968
|
+
props: basicProps,
|
|
1969
|
+
emits: ["cancel"],
|
|
1970
|
+
setup(props2, {
|
|
1971
|
+
slots,
|
|
1972
|
+
emit
|
|
1973
|
+
}) {
|
|
1974
|
+
const {
|
|
1975
|
+
visible,
|
|
1976
|
+
draggable,
|
|
1977
|
+
destroyOnClose
|
|
1978
|
+
} = toRefs(props2);
|
|
1979
|
+
const attrs = useAttrs();
|
|
1980
|
+
useDragMove({
|
|
1981
|
+
visible,
|
|
1982
|
+
destroyOnClose,
|
|
1983
|
+
draggable
|
|
1984
|
+
});
|
|
1985
|
+
const {
|
|
1986
|
+
extendSlots
|
|
1987
|
+
} = useSlots$1();
|
|
1988
|
+
const onCancel = (e) => emit("cancel", e);
|
|
1989
|
+
return () => {
|
|
1990
|
+
let _slot;
|
|
1991
|
+
const propsData = {
|
|
1992
|
+
...unref(attrs),
|
|
1993
|
+
...props2,
|
|
1994
|
+
destroyOnClose: true,
|
|
1995
|
+
onCancel
|
|
1996
|
+
};
|
|
1997
|
+
if (!propsData?.visible)
|
|
1998
|
+
return null;
|
|
1999
|
+
return createVNode(Modal, propsData, _isSlot(_slot = extendSlots(slots)) ? _slot : {
|
|
2000
|
+
default: () => [_slot]
|
|
2001
|
+
});
|
|
2002
|
+
};
|
|
2003
|
+
}
|
|
2004
|
+
};
|
|
2005
|
+
const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
2006
|
+
__name: "CloseIcon",
|
|
2007
|
+
props: {
|
|
2008
|
+
canFullscreen: { type: Boolean, default: true },
|
|
2009
|
+
fullScreen: { type: Boolean }
|
|
2010
|
+
},
|
|
2011
|
+
emits: ["cancel", "fullscreen"],
|
|
2012
|
+
setup(__props, { emit }) {
|
|
2013
|
+
const props2 = __props;
|
|
2014
|
+
const { t } = useI18n("UI");
|
|
2015
|
+
const getClass = computed$1(() => {
|
|
2016
|
+
return [
|
|
2017
|
+
"dt-basic-modal-close",
|
|
2018
|
+
`dt-basic-modal-close--custom`,
|
|
2019
|
+
{
|
|
2020
|
+
[`dt-basic-modal-close--can-full`]: props2.canFullscreen
|
|
2021
|
+
}
|
|
2022
|
+
];
|
|
2023
|
+
});
|
|
2024
|
+
function handleCancel(e) {
|
|
2025
|
+
emit("cancel", e);
|
|
2026
|
+
}
|
|
2027
|
+
function handleFullScreen(e) {
|
|
2028
|
+
e?.stopPropagation();
|
|
2029
|
+
e?.preventDefault();
|
|
2030
|
+
emit("fullscreen");
|
|
2031
|
+
}
|
|
2032
|
+
return (_ctx, _cache) => {
|
|
2033
|
+
const _component_ATooltip = Tooltip;
|
|
2034
|
+
return openBlock(), createElementBlock("div", {
|
|
2035
|
+
class: normalizeClass(["flex h-14 items-center justify-center", unref(getClass)])
|
|
2036
|
+
}, [
|
|
2037
|
+
__props.canFullscreen ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
2038
|
+
__props.fullScreen ? (openBlock(), createBlock(_component_ATooltip, {
|
|
2039
|
+
key: 0,
|
|
2040
|
+
title: unref(t)("EXIT_FULLSCREEN"),
|
|
2041
|
+
placement: "bottom"
|
|
2042
|
+
}, {
|
|
2043
|
+
default: withCtx(() => [
|
|
2044
|
+
createElementVNode("i", {
|
|
2045
|
+
class: "i ic:baseline-fullscreen-exit hover:font-bold inline-block w-10 h-14 pr-4",
|
|
2046
|
+
onClick: handleFullScreen
|
|
2047
|
+
})
|
|
2048
|
+
]),
|
|
2049
|
+
_: 1
|
|
2050
|
+
}, 8, ["title"])) : (openBlock(), createBlock(_component_ATooltip, {
|
|
2051
|
+
key: 1,
|
|
2052
|
+
title: unref(t)("FULLSCREEN"),
|
|
2053
|
+
placement: "bottom"
|
|
2054
|
+
}, {
|
|
2055
|
+
default: withCtx(() => [
|
|
2056
|
+
createElementVNode("i", {
|
|
2057
|
+
class: "i ic:baseline-fullscreen hover:font-bold inline-block h-14 w-10 pr-4",
|
|
2058
|
+
onClick: handleFullScreen
|
|
2059
|
+
})
|
|
2060
|
+
]),
|
|
2061
|
+
_: 1
|
|
2062
|
+
}, 8, ["title"]))
|
|
2063
|
+
], 64)) : createCommentVNode("", true),
|
|
2064
|
+
createElementVNode("i", {
|
|
2065
|
+
class: "i mdi:close h-14 w-10 pr-4",
|
|
2066
|
+
onClick: handleCancel
|
|
2067
|
+
})
|
|
2068
|
+
], 2);
|
|
2069
|
+
};
|
|
2070
|
+
}
|
|
2071
|
+
});
|
|
2072
|
+
const isServer = typeof window === "undefined";
|
|
2073
|
+
const BAR_MAP = {
|
|
2074
|
+
vertical: {
|
|
2075
|
+
offset: "offsetHeight",
|
|
2076
|
+
scroll: "scrollTop",
|
|
2077
|
+
scrollSize: "scrollHeight",
|
|
2078
|
+
size: "height",
|
|
2079
|
+
key: "vertical",
|
|
2080
|
+
axis: "Y",
|
|
2081
|
+
client: "clientY",
|
|
2082
|
+
direction: "top"
|
|
2083
|
+
},
|
|
2084
|
+
horizontal: {
|
|
2085
|
+
offset: "offsetWidth",
|
|
2086
|
+
scroll: "scrollLeft",
|
|
2087
|
+
scrollSize: "scrollWidth",
|
|
2088
|
+
size: "width",
|
|
2089
|
+
key: "horizontal",
|
|
2090
|
+
axis: "X",
|
|
2091
|
+
client: "clientX",
|
|
2092
|
+
direction: "left"
|
|
2093
|
+
}
|
|
2094
|
+
};
|
|
2095
|
+
function renderThumbStyle({ move, size, bar }) {
|
|
2096
|
+
const style = {};
|
|
2097
|
+
const translate = `translate${bar.axis}(${move}%)`;
|
|
2098
|
+
style[bar.size] = size;
|
|
2099
|
+
style.transform = translate;
|
|
2100
|
+
style.msTransform = translate;
|
|
2101
|
+
style.webkitTransform = translate;
|
|
2102
|
+
return style;
|
|
2103
|
+
}
|
|
2104
|
+
function resizeHandler(entries) {
|
|
2105
|
+
for (const entry of entries) {
|
|
2106
|
+
const listeners = entry.target.__resizeListeners__ || [];
|
|
2107
|
+
if (listeners.length) {
|
|
2108
|
+
listeners.forEach((fn) => {
|
|
2109
|
+
fn();
|
|
2110
|
+
});
|
|
2111
|
+
}
|
|
2112
|
+
}
|
|
2113
|
+
}
|
|
2114
|
+
function addResizeListener(element, fn) {
|
|
2115
|
+
if (isServer)
|
|
2116
|
+
return;
|
|
2117
|
+
if (!element.__resizeListeners__) {
|
|
2118
|
+
element.__resizeListeners__ = [];
|
|
2119
|
+
element.__ro__ = new ResizeObserver(resizeHandler);
|
|
2120
|
+
element.__ro__.observe(element);
|
|
2121
|
+
}
|
|
2122
|
+
element.__resizeListeners__.push(fn);
|
|
2123
|
+
}
|
|
2124
|
+
function removeResizeListener(element, fn) {
|
|
2125
|
+
if (!element || !element.__resizeListeners__)
|
|
2126
|
+
return;
|
|
2127
|
+
element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);
|
|
2128
|
+
if (!element.__resizeListeners__.length) {
|
|
2129
|
+
element.__ro__.disconnect();
|
|
2130
|
+
}
|
|
2131
|
+
}
|
|
2132
|
+
const Bar = defineComponent({
|
|
2133
|
+
name: "Bar",
|
|
2134
|
+
props: {
|
|
2135
|
+
vertical: Boolean,
|
|
2136
|
+
size: String,
|
|
2137
|
+
move: Number
|
|
2138
|
+
},
|
|
2139
|
+
setup(props2) {
|
|
2140
|
+
const instance = getCurrentInstance$1();
|
|
2141
|
+
const thumb = ref$1();
|
|
2142
|
+
const wrap = inject("scroll-bar-wrap", {});
|
|
2143
|
+
const bar = computed$1(() => {
|
|
2144
|
+
return BAR_MAP[props2.vertical ? "vertical" : "horizontal"];
|
|
2145
|
+
});
|
|
2146
|
+
const barStore = ref$1({});
|
|
2147
|
+
const cursorDown = ref$1();
|
|
2148
|
+
const clickThumbHandler = (e) => {
|
|
2149
|
+
if (e.ctrlKey || e.button === 2) {
|
|
2150
|
+
return;
|
|
2151
|
+
}
|
|
2152
|
+
window.getSelection()?.removeAllRanges();
|
|
2153
|
+
startDrag(e);
|
|
2154
|
+
barStore.value[bar.value.axis] = e.currentTarget[bar.value.offset] - (e[bar.value.client] - e.currentTarget.getBoundingClientRect()[bar.value.direction]);
|
|
2155
|
+
};
|
|
2156
|
+
const clickTrackHandler = (e) => {
|
|
2157
|
+
const offset = Math.abs(
|
|
2158
|
+
e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]
|
|
2159
|
+
);
|
|
2160
|
+
const thumbHalf = thumb.value[bar.value.offset] / 2;
|
|
2161
|
+
const thumbPositionPercentage = (offset - thumbHalf) * 100 / instance?.vnode.el?.[bar.value.offset];
|
|
2162
|
+
wrap.value[bar.value.scroll] = thumbPositionPercentage * wrap.value[bar.value.scrollSize] / 100;
|
|
2163
|
+
};
|
|
2164
|
+
const startDrag = (e) => {
|
|
2165
|
+
e.stopImmediatePropagation();
|
|
2166
|
+
cursorDown.value = true;
|
|
2167
|
+
on(document, "mousemove", mouseMoveDocumentHandler);
|
|
2168
|
+
on(document, "mouseup", mouseUpDocumentHandler);
|
|
2169
|
+
document.onselectstart = () => false;
|
|
2170
|
+
};
|
|
2171
|
+
const mouseMoveDocumentHandler = (e) => {
|
|
2172
|
+
if (cursorDown.value === false)
|
|
2173
|
+
return;
|
|
2174
|
+
const prevPage = barStore.value[bar.value.axis];
|
|
2175
|
+
if (!prevPage)
|
|
2176
|
+
return;
|
|
2177
|
+
const offset = (instance?.vnode.el?.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1;
|
|
2178
|
+
const thumbClickPosition = thumb.value[bar.value.offset] - prevPage;
|
|
2179
|
+
const thumbPositionPercentage = (offset - thumbClickPosition) * 100 / instance?.vnode.el?.[bar.value.offset];
|
|
2180
|
+
wrap.value[bar.value.scroll] = thumbPositionPercentage * wrap.value[bar.value.scrollSize] / 100;
|
|
2181
|
+
};
|
|
2182
|
+
function mouseUpDocumentHandler() {
|
|
2183
|
+
cursorDown.value = false;
|
|
2184
|
+
barStore.value[bar.value.axis] = 0;
|
|
2185
|
+
off(document, "mousemove", mouseMoveDocumentHandler);
|
|
2186
|
+
document.onselectstart = null;
|
|
2187
|
+
}
|
|
2188
|
+
onUnmounted(() => {
|
|
2189
|
+
off(document, "mouseup", mouseUpDocumentHandler);
|
|
2190
|
+
});
|
|
2191
|
+
return () => h$1(
|
|
2192
|
+
"div",
|
|
2193
|
+
{
|
|
2194
|
+
class: ["scrollbar__bar", "is-" + bar.value.key],
|
|
2195
|
+
onMousedown: clickTrackHandler
|
|
2196
|
+
},
|
|
2197
|
+
h$1("div", {
|
|
2198
|
+
ref: thumb,
|
|
2199
|
+
class: "scrollbar__thumb",
|
|
2200
|
+
onMousedown: clickThumbHandler,
|
|
2201
|
+
style: renderThumbStyle({
|
|
2202
|
+
size: props2.size,
|
|
2203
|
+
move: props2.move,
|
|
2204
|
+
bar: bar.value
|
|
2205
|
+
})
|
|
2206
|
+
})
|
|
2207
|
+
);
|
|
2208
|
+
}
|
|
2209
|
+
});
|
|
2210
|
+
const _hoisted_1$6 = { class: "scrollbar relative h-full overflow-hidden" };
|
|
2211
|
+
const _sfc_main$c = /* @__PURE__ */ defineComponent({
|
|
2212
|
+
__name: "scroll-bar",
|
|
2213
|
+
props: {
|
|
2214
|
+
wrapClass: {
|
|
2215
|
+
type: [String, Array],
|
|
2216
|
+
default: ""
|
|
2217
|
+
},
|
|
2218
|
+
wrapStyle: Array,
|
|
2219
|
+
viewClass: {
|
|
2220
|
+
type: [String, Array],
|
|
2221
|
+
default: ""
|
|
2222
|
+
},
|
|
2223
|
+
viewStyle: {
|
|
2224
|
+
type: [String, Array],
|
|
2225
|
+
default: ""
|
|
2226
|
+
},
|
|
2227
|
+
noresize: Boolean,
|
|
2228
|
+
tag: {
|
|
2229
|
+
type: String,
|
|
2230
|
+
default: "div"
|
|
2231
|
+
}
|
|
2232
|
+
},
|
|
2233
|
+
setup(__props) {
|
|
2234
|
+
const props2 = __props;
|
|
2235
|
+
const sizeWidth = ref$1("0");
|
|
2236
|
+
const sizeHeight = ref$1("0");
|
|
2237
|
+
const moveX = ref$1(0);
|
|
2238
|
+
const moveY = ref$1(0);
|
|
2239
|
+
const wrap = ref$1();
|
|
2240
|
+
const resize = ref$1();
|
|
2241
|
+
provide("scroll-bar-wrap", wrap);
|
|
2242
|
+
const style = computed$1(() => {
|
|
2243
|
+
let rsStyle = {};
|
|
2244
|
+
if (Array.isArray(props2.wrapStyle)) {
|
|
2245
|
+
props2.wrapStyle.forEach((it) => {
|
|
2246
|
+
if (it)
|
|
2247
|
+
rsStyle = Object.assign({}, rsStyle, it);
|
|
2248
|
+
});
|
|
2249
|
+
}
|
|
2250
|
+
return rsStyle;
|
|
2251
|
+
});
|
|
2252
|
+
const handleScroll = () => {
|
|
2253
|
+
moveY.value = unref(wrap).scrollTop * 100 / unref(wrap).clientHeight;
|
|
2254
|
+
moveX.value = unref(wrap).scrollLeft * 100 / unref(wrap).clientWidth;
|
|
2255
|
+
};
|
|
2256
|
+
const update = () => {
|
|
2257
|
+
if (!unref(wrap))
|
|
2258
|
+
return;
|
|
2259
|
+
const heightPercentage = unref(wrap).clientHeight * 100 / unref(wrap).scrollHeight;
|
|
2260
|
+
const widthPercentage = unref(wrap).clientWidth * 100 / unref(wrap).scrollWidth;
|
|
2261
|
+
sizeHeight.value = heightPercentage < 100 ? heightPercentage + "%" : "";
|
|
2262
|
+
sizeWidth.value = widthPercentage < 100 ? widthPercentage + "%" : "";
|
|
2263
|
+
};
|
|
2264
|
+
onMounted$1(() => {
|
|
2265
|
+
nextTick(update);
|
|
2266
|
+
if (!props2.noresize) {
|
|
2267
|
+
addResizeListener(unref(resize), update);
|
|
2268
|
+
addResizeListener(unref(wrap), update);
|
|
2269
|
+
addEventListener("resize", update);
|
|
2270
|
+
}
|
|
2271
|
+
});
|
|
2272
|
+
onBeforeUnmount(() => {
|
|
2273
|
+
if (!props2.noresize) {
|
|
2274
|
+
removeResizeListener(unref(resize), update);
|
|
2275
|
+
removeResizeListener(unref(wrap), update);
|
|
2276
|
+
removeEventListener("resize", update);
|
|
2277
|
+
}
|
|
2278
|
+
});
|
|
2279
|
+
return (_ctx, _cache) => {
|
|
2280
|
+
return openBlock(), createElementBlock("div", _hoisted_1$6, [
|
|
2281
|
+
createElementVNode("div", {
|
|
2282
|
+
ref_key: "wrap",
|
|
2283
|
+
ref: wrap,
|
|
2284
|
+
class: normalizeClass([[__props.wrapClass, "scrollbar__wrap--hidden-default"], "h-full overflow-auto"]),
|
|
2285
|
+
style: normalizeStyle(unref(style)),
|
|
2286
|
+
onScroll: handleScroll
|
|
2287
|
+
}, [
|
|
2288
|
+
(openBlock(), createBlock(resolveDynamicComponent(__props.tag), {
|
|
2289
|
+
class: normalizeClass(["box-border", __props.viewClass]),
|
|
2290
|
+
ref_key: "resize",
|
|
2291
|
+
ref: resize,
|
|
2292
|
+
style: normalizeStyle(__props.viewStyle)
|
|
2293
|
+
}, {
|
|
2294
|
+
default: withCtx(() => [
|
|
2295
|
+
renderSlot(_ctx.$slots, "default")
|
|
2296
|
+
]),
|
|
2297
|
+
_: 3
|
|
2298
|
+
}, 8, ["class", "style"]))
|
|
2299
|
+
], 38),
|
|
2300
|
+
createVNode(unref(Bar), {
|
|
2301
|
+
move: moveX.value,
|
|
2302
|
+
size: sizeWidth.value
|
|
2303
|
+
}, null, 8, ["move", "size"]),
|
|
2304
|
+
createVNode(unref(Bar), {
|
|
2305
|
+
vertical: "",
|
|
2306
|
+
move: moveY.value,
|
|
2307
|
+
size: sizeHeight.value
|
|
2308
|
+
}, null, 8, ["move", "size"])
|
|
2309
|
+
]);
|
|
2310
|
+
};
|
|
2311
|
+
}
|
|
2312
|
+
});
|
|
2313
|
+
const _sfc_main$b = /* @__PURE__ */ defineComponent({
|
|
2314
|
+
__name: "scroll-container",
|
|
2315
|
+
setup(__props) {
|
|
2316
|
+
const scrollbarRef = ref(null);
|
|
2317
|
+
return (_ctx, _cache) => {
|
|
2318
|
+
return openBlock(), createBlock(_sfc_main$c, mergeProps({
|
|
2319
|
+
ref_key: "scrollbarRef",
|
|
2320
|
+
ref: scrollbarRef
|
|
2321
|
+
}, _ctx.$attrs, { class: "w-full h-full" }), {
|
|
2322
|
+
default: withCtx(() => [
|
|
2323
|
+
renderSlot(_ctx.$slots, "default")
|
|
2324
|
+
]),
|
|
2325
|
+
_: 3
|
|
2326
|
+
}, 16);
|
|
2327
|
+
};
|
|
2328
|
+
}
|
|
2329
|
+
});
|
|
2330
|
+
const _sfc_main$a = /* @__PURE__ */ defineComponent({
|
|
2331
|
+
__name: "slot-container",
|
|
2332
|
+
props: {
|
|
2333
|
+
template: {
|
|
2334
|
+
type: Function
|
|
2335
|
+
},
|
|
2336
|
+
data: {
|
|
2337
|
+
type: Object
|
|
2338
|
+
}
|
|
2339
|
+
},
|
|
2340
|
+
setup(__props) {
|
|
2341
|
+
const props2 = __props;
|
|
2342
|
+
const Container = h("div", [props2.template(props2.data)]);
|
|
2343
|
+
return (_ctx, _cache) => {
|
|
2344
|
+
return openBlock(), createBlock(unref(Container));
|
|
2345
|
+
};
|
|
2346
|
+
}
|
|
2347
|
+
});
|
|
2348
|
+
const withInstall = (comp) => {
|
|
2349
|
+
comp.install = (app) => {
|
|
2350
|
+
app.component(comp.name, comp);
|
|
2351
|
+
};
|
|
2352
|
+
return comp;
|
|
2353
|
+
};
|
|
2354
|
+
const DtScrollContainer = withInstall(_sfc_main$b);
|
|
2355
|
+
withInstall(_sfc_main$a);
|
|
2356
|
+
const _sfc_main$9 = /* @__PURE__ */ defineComponent({
|
|
2357
|
+
__name: "ModalWrap",
|
|
2358
|
+
props: {
|
|
2359
|
+
useWrapper: { type: Boolean, default: true },
|
|
2360
|
+
modalHeaderHeight: { type: Number, default: 55 },
|
|
2361
|
+
modalFooterHeight: { type: Number, default: 58 },
|
|
2362
|
+
minHeight: { type: Number, default: 200 },
|
|
2363
|
+
height: { type: Number },
|
|
2364
|
+
visible: { type: Boolean },
|
|
2365
|
+
fullScreen: { type: Boolean }
|
|
2366
|
+
},
|
|
2367
|
+
emits: ["ext-height", "height-change"],
|
|
2368
|
+
setup(__props, { emit: emits }) {
|
|
2369
|
+
const props2 = __props;
|
|
2370
|
+
const wrapperRef = ref$1(null);
|
|
2371
|
+
const wrapRef = ref$1(null);
|
|
2372
|
+
const realHeightRef = ref$1(0);
|
|
2373
|
+
const minRealHeightRef = ref$1(0);
|
|
2374
|
+
let realHeight = 0;
|
|
2375
|
+
const wrapStyle = computed$1(() => {
|
|
2376
|
+
return {
|
|
2377
|
+
minHeight: `${props2.minHeight}px`,
|
|
2378
|
+
[props2.fullScreen ? "height" : "maxHeight"]: `${unref(realHeightRef)}px`
|
|
2379
|
+
};
|
|
2380
|
+
});
|
|
2381
|
+
onMounted(() => {
|
|
2382
|
+
const { modalHeaderHeight, modalFooterHeight } = props2;
|
|
2383
|
+
emits("ext-height", modalHeaderHeight + modalFooterHeight);
|
|
2384
|
+
});
|
|
2385
|
+
async function getModalDom() {
|
|
2386
|
+
const wrapperRefDom = unref(wrapperRef);
|
|
2387
|
+
if (!wrapperRefDom)
|
|
2388
|
+
return;
|
|
2389
|
+
const bodyDom = wrapperRefDom.$el.parentElement;
|
|
2390
|
+
if (!bodyDom)
|
|
2391
|
+
return;
|
|
2392
|
+
bodyDom.style.padding = "0";
|
|
2393
|
+
await nextTick();
|
|
2394
|
+
const modalDom = bodyDom.parentElement && bodyDom.parentElement.parentElement;
|
|
2395
|
+
return modalDom;
|
|
2396
|
+
}
|
|
2397
|
+
async function setModalHeight() {
|
|
2398
|
+
if (!props2.visible)
|
|
2399
|
+
return;
|
|
2400
|
+
try {
|
|
2401
|
+
const modalDom = await getModalDom();
|
|
2402
|
+
if (!modalDom)
|
|
2403
|
+
return;
|
|
2404
|
+
const modalRect = getComputedStyle(modalDom).top;
|
|
2405
|
+
const modalTop = Number.parseInt(modalRect);
|
|
2406
|
+
let maxHeight = window.innerHeight - props2.modalFooterHeight - props2.modalHeaderHeight - 100;
|
|
2407
|
+
if (modalTop < 40) {
|
|
2408
|
+
maxHeight -= 26;
|
|
2409
|
+
}
|
|
2410
|
+
await nextTick();
|
|
2411
|
+
const warpEl = unref(wrapRef);
|
|
2412
|
+
if (!warpEl)
|
|
2413
|
+
return;
|
|
2414
|
+
await nextTick();
|
|
2415
|
+
realHeight = warpEl.scrollHeight;
|
|
2416
|
+
if (props2.fullScreen) {
|
|
2417
|
+
realHeightRef.value = window.innerHeight - props2.modalFooterHeight - props2.modalHeaderHeight;
|
|
2418
|
+
} else {
|
|
2419
|
+
realHeightRef.value = props2.height ? props2.height : realHeight > maxHeight ? maxHeight : realHeight;
|
|
2420
|
+
}
|
|
2421
|
+
emits("height-change", unref(realHeightRef));
|
|
2422
|
+
const _modalDom = await getModalDom();
|
|
2423
|
+
_modalDom.style.top = (window.innerHeight - _modalDom.offsetHeight) / 2 + "px";
|
|
2424
|
+
} catch (error2) {
|
|
2425
|
+
console.log(error2);
|
|
2426
|
+
}
|
|
2427
|
+
}
|
|
2428
|
+
windowResizeFn(setModalHeight.bind(null, false));
|
|
2429
|
+
watchEffect(() => {
|
|
2430
|
+
props2.useWrapper && setModalHeight();
|
|
2431
|
+
});
|
|
2432
|
+
watch(
|
|
2433
|
+
() => props2.fullScreen,
|
|
2434
|
+
(v) => {
|
|
2435
|
+
setModalHeight();
|
|
2436
|
+
if (!v) {
|
|
2437
|
+
realHeightRef.value = minRealHeightRef.value;
|
|
2438
|
+
} else {
|
|
2439
|
+
minRealHeightRef.value = realHeightRef.value;
|
|
2440
|
+
}
|
|
2441
|
+
}
|
|
2442
|
+
);
|
|
2443
|
+
return (_ctx, _cache) => {
|
|
2444
|
+
return openBlock(), createBlock(unref(DtScrollContainer), {
|
|
2445
|
+
ref_key: "wrapperRef",
|
|
2446
|
+
ref: wrapperRef
|
|
2447
|
+
}, {
|
|
2448
|
+
default: withCtx(() => [
|
|
2449
|
+
createElementVNode("div", {
|
|
2450
|
+
ref_key: "wrapRef",
|
|
2451
|
+
ref: wrapRef,
|
|
2452
|
+
style: normalizeStyle(unref(wrapStyle))
|
|
2453
|
+
}, [
|
|
2454
|
+
renderSlot(_ctx.$slots, "default")
|
|
2455
|
+
], 4)
|
|
2456
|
+
]),
|
|
2457
|
+
_: 3
|
|
2458
|
+
}, 512);
|
|
2459
|
+
};
|
|
2460
|
+
}
|
|
2461
|
+
});
|
|
2462
|
+
const _sfc_main$8 = /* @__PURE__ */ defineComponent({
|
|
2463
|
+
__name: "ModalFooter",
|
|
2464
|
+
props: {
|
|
2465
|
+
buttons: Object,
|
|
2466
|
+
showSave: { type: Boolean, default: true },
|
|
2467
|
+
showCancel: { type: Boolean, default: true },
|
|
2468
|
+
okText: { type: String },
|
|
2469
|
+
cancelText: { type: String }
|
|
2470
|
+
},
|
|
2471
|
+
emits: [
|
|
2472
|
+
"handleSave",
|
|
2473
|
+
"handleCancel"
|
|
2474
|
+
],
|
|
2475
|
+
setup(__props, { emit: emits }) {
|
|
2476
|
+
const props2 = __props;
|
|
2477
|
+
const { t } = useI18n("UI");
|
|
2478
|
+
const buttonList = computed$1(() => {
|
|
2479
|
+
if (props2.buttons && props2.buttons.length)
|
|
2480
|
+
return props2.buttons;
|
|
2481
|
+
let buttonActions = [
|
|
2482
|
+
{ t: "\u4FDD\u5B58", name: props2.okText || t("SAVE"), preIcon: "mdi:content-save", type: "primary", flag: "OK" },
|
|
2483
|
+
{ t: "\u5173\u95ED", name: props2.cancelText || t("CLOSE"), preIcon: "mdi:close", flag: "CANCEL" }
|
|
2484
|
+
];
|
|
2485
|
+
if (!props2.showSave)
|
|
2486
|
+
buttonActions = buttonActions.filter((btn) => btn.flag !== "OK");
|
|
2487
|
+
if (!props2.showCancel)
|
|
2488
|
+
buttonActions = buttonActions.filter((btn) => btn.flag !== "CANCEL");
|
|
2489
|
+
return buttonActions;
|
|
2490
|
+
});
|
|
2491
|
+
function handleMethod(item) {
|
|
2492
|
+
switch (item.flag) {
|
|
2493
|
+
case "OK":
|
|
2494
|
+
emits("handleSave");
|
|
2495
|
+
break;
|
|
2496
|
+
case "CANCEL":
|
|
2497
|
+
emits("handleCancel");
|
|
2498
|
+
break;
|
|
2499
|
+
}
|
|
2500
|
+
}
|
|
2501
|
+
return (_ctx, _cache) => {
|
|
2502
|
+
return openBlock(), createElementBlock(Fragment, null, [
|
|
2503
|
+
renderSlot(_ctx.$slots, "appendFooter"),
|
|
2504
|
+
createVNode(_sfc_main$g, {
|
|
2505
|
+
mode: "dialog",
|
|
2506
|
+
buttonList: unref(buttonList),
|
|
2507
|
+
onHandleMethod: _cache[0] || (_cache[0] = ($event) => handleMethod($event))
|
|
2508
|
+
}, null, 8, ["buttonList"])
|
|
2509
|
+
], 64);
|
|
2510
|
+
};
|
|
2511
|
+
}
|
|
2512
|
+
});
|
|
2513
|
+
function useFullScreen(wrapClassName) {
|
|
2514
|
+
const fullScreenRef = ref$1(false);
|
|
2515
|
+
const getWrapClassName = computed$1(() => {
|
|
2516
|
+
const clsName = unref(wrapClassName) || "";
|
|
2517
|
+
const cls = unref(fullScreenRef) ? `fullscreen-modal ${clsName} ` : unref(clsName);
|
|
2518
|
+
return `dt-modal ${cls}`;
|
|
2519
|
+
});
|
|
2520
|
+
function toggleFullScreen(e) {
|
|
2521
|
+
e && e.stopPropagation();
|
|
2522
|
+
fullScreenRef.value = !unref(fullScreenRef);
|
|
2523
|
+
dispatchResize();
|
|
2524
|
+
}
|
|
2525
|
+
return {
|
|
2526
|
+
fullScreenRef,
|
|
2527
|
+
getWrapClassName,
|
|
2528
|
+
toggleFullScreen
|
|
2529
|
+
};
|
|
2530
|
+
}
|
|
2531
|
+
const _sfc_main$7 = /* @__PURE__ */ defineComponent({
|
|
2532
|
+
__name: "index",
|
|
2533
|
+
props: basicProps,
|
|
2534
|
+
emits: ["visible-change", "height-change", "cancel", "save", "register", "update:visible"],
|
|
2535
|
+
setup(__props, { emit: emits }) {
|
|
2536
|
+
const props2 = __props;
|
|
2537
|
+
const visibleRef = ref$1(false);
|
|
2538
|
+
const propsRef = ref$1();
|
|
2539
|
+
const modalWrapperRef = ref$1(null);
|
|
2540
|
+
const { getWrapClassName, toggleFullScreen, fullScreenRef } = useFullScreen(computed$1(() => unref(propsRef)?.wrapClassName));
|
|
2541
|
+
const getMergeProps = computed$1(() => {
|
|
2542
|
+
return {
|
|
2543
|
+
...props2,
|
|
2544
|
+
...unref(propsRef)
|
|
2545
|
+
};
|
|
2546
|
+
});
|
|
2547
|
+
const getBindValue = computed$1(() => {
|
|
2548
|
+
const bindValue = {
|
|
2549
|
+
...unref(getMergeProps),
|
|
2550
|
+
...unref(propsRef),
|
|
2551
|
+
visible: unref(visibleRef),
|
|
2552
|
+
wrapClassName: unref(getWrapClassName)
|
|
2553
|
+
};
|
|
2554
|
+
let omitArr = unref(fullScreenRef) ? ["height", "title"] : ["title"];
|
|
2555
|
+
if (isArray(unref(propsRef)?.footer)) {
|
|
2556
|
+
omitArr.push("footer");
|
|
2557
|
+
}
|
|
2558
|
+
return omit(bindValue, omitArr);
|
|
2559
|
+
});
|
|
2560
|
+
const getWrapperHeight = computed$1(() => {
|
|
2561
|
+
if (unref(fullScreenRef))
|
|
2562
|
+
return void 0;
|
|
2563
|
+
return unref(getBindValue).height;
|
|
2564
|
+
});
|
|
2565
|
+
const modalFooterHeight = computed$1(() => {
|
|
2566
|
+
if (isArray(props2.footer)) {
|
|
2567
|
+
return (unref(propsRef)?.footer).length ? 0 : void 0;
|
|
2568
|
+
}
|
|
2569
|
+
return props2?.footer !== void 0 && !props2.footer ? 0 : void 0;
|
|
2570
|
+
});
|
|
2571
|
+
const modalMethods = {
|
|
2572
|
+
setModalProps,
|
|
2573
|
+
redoModalHeight: () => {
|
|
2574
|
+
nextTick(() => {
|
|
2575
|
+
if (unref(modalWrapperRef)) {
|
|
2576
|
+
unref(modalWrapperRef).setModalHeight();
|
|
2577
|
+
}
|
|
2578
|
+
});
|
|
2579
|
+
}
|
|
2580
|
+
};
|
|
2581
|
+
const instance = getCurrentInstance();
|
|
2582
|
+
if (instance) {
|
|
2583
|
+
emits("register", modalMethods, instance.uid);
|
|
2584
|
+
}
|
|
2585
|
+
function handleHeightChange(height) {
|
|
2586
|
+
emits("height-change", height);
|
|
2587
|
+
}
|
|
2588
|
+
function setModalProps(props22) {
|
|
2589
|
+
propsRef.value = deepMerge(unref(propsRef) || {}, props22);
|
|
2590
|
+
if (Reflect.has(props22, "visible")) {
|
|
2591
|
+
visibleRef.value = !!props22.visible;
|
|
2592
|
+
}
|
|
2593
|
+
if (Reflect.has(props22, "defaultFullscreen")) {
|
|
2594
|
+
fullScreenRef.value = !!props22.defaultFullscreen;
|
|
2595
|
+
}
|
|
2596
|
+
}
|
|
2597
|
+
function handleSave() {
|
|
2598
|
+
emits("save");
|
|
2599
|
+
}
|
|
2600
|
+
async function handleCancel(e = null) {
|
|
2601
|
+
if (e) {
|
|
2602
|
+
e?.stopPropagation();
|
|
2603
|
+
if (e.target?.classList?.contains("dt-basic-modal-close--custom"))
|
|
2604
|
+
return;
|
|
2605
|
+
if (props2.closeFunc && isFunction(props2.closeFunc)) {
|
|
2606
|
+
const isClose = await props2.closeFunc();
|
|
2607
|
+
visibleRef.value = !isClose;
|
|
2608
|
+
return;
|
|
2609
|
+
}
|
|
2610
|
+
}
|
|
2611
|
+
const { afterClose } = unref(getBindValue);
|
|
2612
|
+
if (afterClose && isFunction(afterClose)) {
|
|
2613
|
+
afterClose();
|
|
2614
|
+
}
|
|
2615
|
+
visibleRef.value = false;
|
|
2616
|
+
emits("cancel", e);
|
|
2617
|
+
}
|
|
2618
|
+
watch(() => unref(visibleRef), (v) => {
|
|
2619
|
+
emits("visible-change", v);
|
|
2620
|
+
emits("update:visible", v);
|
|
2621
|
+
nextTick(() => {
|
|
2622
|
+
if (props2.scrollTop && v && unref(modalWrapperRef)) {
|
|
2623
|
+
unref(modalWrapperRef).$el.scrollTop = 0;
|
|
2624
|
+
}
|
|
2625
|
+
});
|
|
2626
|
+
}, {
|
|
2627
|
+
immediate: false
|
|
2628
|
+
});
|
|
2629
|
+
return (_ctx, _cache) => {
|
|
2630
|
+
const _component_ASpin = Spin;
|
|
2631
|
+
return openBlock(), createBlock(_sfc_main$e, mergeProps(unref(getBindValue), { onCancel: handleCancel }), createSlots({
|
|
2632
|
+
default: withCtx(() => [
|
|
2633
|
+
createVNode(_component_ASpin, {
|
|
2634
|
+
spinning: unref(getBindValue).loading,
|
|
2635
|
+
tip: unref(getBindValue).loadingTip
|
|
2636
|
+
}, {
|
|
2637
|
+
default: withCtx(() => [
|
|
2638
|
+
createVNode(_sfc_main$9, mergeProps({
|
|
2639
|
+
useWrapper: unref(getBindValue).useWrapper,
|
|
2640
|
+
fullScreen: unref(fullScreenRef),
|
|
2641
|
+
ref_key: "modalWrapperRef",
|
|
2642
|
+
ref: modalWrapperRef,
|
|
2643
|
+
minHeight: unref(getBindValue).minHeight,
|
|
2644
|
+
height: unref(getWrapperHeight),
|
|
2645
|
+
visible: visibleRef.value,
|
|
2646
|
+
modalFooterHeight: unref(modalFooterHeight)
|
|
2647
|
+
}, unref(omit)(unref(getBindValue).wrapperProps, "visible", "height", "modalFooterHeight"), { onHeightChange: handleHeightChange }), {
|
|
2648
|
+
default: withCtx(() => [
|
|
2649
|
+
renderSlot(_ctx.$slots, "default")
|
|
2650
|
+
]),
|
|
2651
|
+
_: 3
|
|
2652
|
+
}, 16, ["useWrapper", "fullScreen", "minHeight", "height", "visible", "modalFooterHeight"])
|
|
2653
|
+
]),
|
|
2654
|
+
_: 3
|
|
2655
|
+
}, 8, ["spinning", "tip"])
|
|
2656
|
+
]),
|
|
2657
|
+
_: 2
|
|
2658
|
+
}, [
|
|
2659
|
+
!_ctx.$slots.closeIcon ? {
|
|
2660
|
+
name: "closeIcon",
|
|
2661
|
+
fn: withCtx(() => [
|
|
2662
|
+
createVNode(_sfc_main$d, {
|
|
2663
|
+
canFullscreen: unref(getBindValue).canFullscreen,
|
|
2664
|
+
fullScreen: unref(fullScreenRef),
|
|
2665
|
+
onCancel: handleCancel,
|
|
2666
|
+
onFullscreen: unref(toggleFullScreen)
|
|
2667
|
+
}, null, 8, ["canFullscreen", "fullScreen", "onFullscreen"])
|
|
2668
|
+
]),
|
|
2669
|
+
key: "0"
|
|
2670
|
+
} : void 0,
|
|
2671
|
+
!_ctx.$slots.title ? {
|
|
2672
|
+
name: "title",
|
|
2673
|
+
fn: withCtx(() => [
|
|
2674
|
+
createTextVNode(toDisplayString(unref(getMergeProps).title), 1)
|
|
2675
|
+
]),
|
|
2676
|
+
key: "1"
|
|
2677
|
+
} : void 0,
|
|
2678
|
+
!_ctx.$slots.footer ? {
|
|
2679
|
+
name: "footer",
|
|
2680
|
+
fn: withCtx(() => [
|
|
2681
|
+
createVNode(_sfc_main$8, {
|
|
2682
|
+
buttons: propsRef.value?.footer,
|
|
2683
|
+
showSave: unref(getBindValue).showOkBtn,
|
|
2684
|
+
showCancel: unref(getBindValue).showCancelBtn,
|
|
2685
|
+
okText: unref(getBindValue).okText,
|
|
2686
|
+
cancelText: unref(getBindValue).cancelText,
|
|
2687
|
+
onHandleSave: handleSave,
|
|
2688
|
+
onHandleCancel: handleCancel
|
|
2689
|
+
}, createSlots({ _: 2 }, [
|
|
2690
|
+
renderList(Object.keys(_ctx.$slots), (item) => {
|
|
2691
|
+
return {
|
|
2692
|
+
name: item,
|
|
2693
|
+
fn: withCtx((data) => [
|
|
2694
|
+
renderSlot(_ctx.$slots, item, normalizeProps(guardReactiveProps(data || {})))
|
|
2695
|
+
])
|
|
2696
|
+
};
|
|
2697
|
+
})
|
|
2698
|
+
]), 1032, ["buttons", "showSave", "showCancel", "okText", "cancelText"])
|
|
2699
|
+
]),
|
|
2700
|
+
key: "2"
|
|
2701
|
+
} : void 0,
|
|
2702
|
+
renderList(Object.keys(unref(omit)(_ctx.$slots, "default")), (item) => {
|
|
2703
|
+
return {
|
|
2704
|
+
name: item,
|
|
2705
|
+
fn: withCtx((data) => [
|
|
2706
|
+
renderSlot(_ctx.$slots, item, normalizeProps(guardReactiveProps(data || {})))
|
|
2707
|
+
])
|
|
2708
|
+
};
|
|
2709
|
+
})
|
|
2710
|
+
]), 1040);
|
|
2711
|
+
};
|
|
2712
|
+
}
|
|
2713
|
+
});
|
|
2714
|
+
const _hoisted_1$5 = { class: "column-select" };
|
|
2715
|
+
const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
|
2716
|
+
__name: "DownloadCtrl",
|
|
2717
|
+
setup(__props) {
|
|
2718
|
+
const { t } = useI18n("UI");
|
|
2719
|
+
const { message } = useMessage();
|
|
2720
|
+
const state = reactive({
|
|
2721
|
+
indeterminate: false,
|
|
2722
|
+
checkAll: false
|
|
2723
|
+
});
|
|
2724
|
+
const modalData = ref$1([]);
|
|
2725
|
+
const onCheckAllChange = (e) => {
|
|
2726
|
+
modalData.value?.map((it) => it.show = e.target.checked);
|
|
2727
|
+
};
|
|
2728
|
+
const [registerDialog, { closeModal }] = useModal(
|
|
2729
|
+
{
|
|
2730
|
+
width: "60%",
|
|
2731
|
+
title: t("SETTING_EXPORT_COLUMN")
|
|
2732
|
+
},
|
|
2733
|
+
(data) => {
|
|
2734
|
+
modalData.value = data;
|
|
2735
|
+
}
|
|
2736
|
+
);
|
|
2737
|
+
function save() {
|
|
2738
|
+
let columns = unref(modalData)?.filter((it) => it.show);
|
|
2739
|
+
if (!columns.length) {
|
|
2740
|
+
message.error(t("NO_EXPORT_COLUMN"));
|
|
2741
|
+
return;
|
|
2742
|
+
}
|
|
2743
|
+
closeModal(columns);
|
|
2744
|
+
}
|
|
2745
|
+
watch(
|
|
2746
|
+
() => unref(modalData),
|
|
2747
|
+
(v) => {
|
|
2748
|
+
if (isArray(v)) {
|
|
2749
|
+
let showLens = v.filter((it) => it.show).length;
|
|
2750
|
+
Object.assign(state, {
|
|
2751
|
+
checkAll: showLens === v.length,
|
|
2752
|
+
indeterminate: showLens !== v.length && showLens > 0
|
|
2753
|
+
});
|
|
2754
|
+
}
|
|
2755
|
+
},
|
|
2756
|
+
{
|
|
2757
|
+
deep: true
|
|
2758
|
+
}
|
|
2759
|
+
);
|
|
2760
|
+
return (_ctx, _cache) => {
|
|
2761
|
+
const _component_ACheckbox = Checkbox$1;
|
|
2762
|
+
const _component_ADivider = Divider$1;
|
|
2763
|
+
const _component_ACol = Col;
|
|
2764
|
+
const _component_ARow = Row;
|
|
2765
|
+
return openBlock(), createBlock(unref(_sfc_main$7), {
|
|
2766
|
+
onRegister: unref(registerDialog),
|
|
2767
|
+
onSave: save
|
|
2768
|
+
}, {
|
|
2769
|
+
default: withCtx(() => [
|
|
2770
|
+
createElementVNode("div", _hoisted_1$5, [
|
|
2771
|
+
createVNode(_component_ACheckbox, {
|
|
2772
|
+
checked: state.checkAll,
|
|
2773
|
+
"onUpdate:checked": _cache[0] || (_cache[0] = ($event) => state.checkAll = $event),
|
|
2774
|
+
indeterminate: state.indeterminate,
|
|
2775
|
+
onChange: onCheckAllChange
|
|
2776
|
+
}, {
|
|
2777
|
+
default: withCtx(() => [
|
|
2778
|
+
createTextVNode(toDisplayString(unref(t)("SELECT_ALL")), 1)
|
|
2779
|
+
]),
|
|
2780
|
+
_: 1
|
|
2781
|
+
}, 8, ["checked", "indeterminate"]),
|
|
2782
|
+
createVNode(_component_ADivider, { dashed: "" }),
|
|
2783
|
+
createVNode(_component_ARow, null, {
|
|
2784
|
+
default: withCtx(() => [
|
|
2785
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(modalData.value, (it, index) => {
|
|
2786
|
+
return openBlock(), createBlock(_component_ACol, { span: 8 }, {
|
|
2787
|
+
default: withCtx(() => [
|
|
2788
|
+
createVNode(_component_ACheckbox, {
|
|
2789
|
+
checked: it.show,
|
|
2790
|
+
"onUpdate:checked": ($event) => it.show = $event
|
|
2791
|
+
}, {
|
|
2792
|
+
default: withCtx(() => [
|
|
2793
|
+
createTextVNode(toDisplayString(it.title), 1)
|
|
2794
|
+
]),
|
|
2795
|
+
_: 2
|
|
2796
|
+
}, 1032, ["checked", "onUpdate:checked"])
|
|
2797
|
+
]),
|
|
2798
|
+
_: 2
|
|
2799
|
+
}, 1024);
|
|
2800
|
+
}), 256))
|
|
2801
|
+
]),
|
|
2802
|
+
_: 1
|
|
2803
|
+
})
|
|
2804
|
+
])
|
|
2805
|
+
]),
|
|
2806
|
+
_: 1
|
|
2807
|
+
}, 8, ["onRegister"]);
|
|
2808
|
+
};
|
|
2809
|
+
}
|
|
2810
|
+
});
|
|
2811
|
+
const _hoisted_1$4 = /* @__PURE__ */ createElementVNode("i", { class: "i ic:baseline-download w-7 leading-7 text-center cursor-pointer" }, null, -1);
|
|
2812
|
+
const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
2813
|
+
__name: "Download",
|
|
2814
|
+
props: {
|
|
2815
|
+
onlyBackDowonload: Boolean,
|
|
2816
|
+
onlyFrontDownload: Boolean
|
|
2817
|
+
},
|
|
2818
|
+
setup(__props) {
|
|
2819
|
+
const table = getTableInstance();
|
|
2820
|
+
const [registerDialog, { openModal }] = useModalOut();
|
|
2821
|
+
const { t } = useI18n("UI");
|
|
2822
|
+
function handleTitleClick({ key }) {
|
|
2823
|
+
const { onDownload, columns: allColumns, dataSource } = unref(table.getBind);
|
|
2824
|
+
const excludesFlag = ["ACTION", "CHECKBOX", "RADIO"];
|
|
2825
|
+
const columns = allColumns.filter((it) => !excludesFlag.includes(it.flag));
|
|
2826
|
+
openModal(columns, (selectColumns) => {
|
|
2827
|
+
onDownload({
|
|
2828
|
+
type: key,
|
|
2829
|
+
columns: selectColumns,
|
|
2830
|
+
rows: key === "select" ? table.getSelectRows() : key === "current" ? dataSource : []
|
|
2831
|
+
});
|
|
2832
|
+
});
|
|
2833
|
+
}
|
|
2834
|
+
return (_ctx, _cache) => {
|
|
2835
|
+
const _component_AMenuItem = MenuItem;
|
|
2836
|
+
const _component_AMenu = Menu;
|
|
2837
|
+
const _component_ADropdown = Dropdown;
|
|
2838
|
+
const _component_ATooltip = Tooltip;
|
|
2839
|
+
return openBlock(), createBlock(_component_ATooltip, { placement: "top" }, {
|
|
2840
|
+
title: withCtx(() => [
|
|
2841
|
+
createElementVNode("span", null, toDisplayString(unref(t)("EXPORT")), 1)
|
|
2842
|
+
]),
|
|
2843
|
+
default: withCtx(() => [
|
|
2844
|
+
createVNode(_component_ADropdown, {
|
|
2845
|
+
placement: "bottom",
|
|
2846
|
+
trigger: ["click"],
|
|
2847
|
+
getPopupContainer: unref(getPopupContainer)
|
|
2848
|
+
}, {
|
|
2849
|
+
overlay: withCtx(() => [
|
|
2850
|
+
createVNode(_component_AMenu, { onClick: handleTitleClick }, {
|
|
2851
|
+
default: withCtx(() => [
|
|
2852
|
+
!__props.onlyBackDowonload ? (openBlock(), createBlock(_component_AMenuItem, { key: "current" }, {
|
|
2853
|
+
default: withCtx(() => [
|
|
2854
|
+
createElementVNode("span", null, toDisplayString(unref(t)("EXPORT_CURRENT_PAGE")), 1)
|
|
2855
|
+
]),
|
|
2856
|
+
_: 1
|
|
2857
|
+
})) : createCommentVNode("", true),
|
|
2858
|
+
!__props.onlyBackDowonload ? (openBlock(), createBlock(_component_AMenuItem, { key: "select" }, {
|
|
2859
|
+
default: withCtx(() => [
|
|
2860
|
+
createElementVNode("span", null, toDisplayString(unref(t)("EXPORT_SELECT_COLUMN")), 1)
|
|
2861
|
+
]),
|
|
2862
|
+
_: 1
|
|
2863
|
+
})) : createCommentVNode("", true),
|
|
2864
|
+
!__props.onlyFrontDownload ? (openBlock(), createBlock(_component_AMenuItem, { key: "all" }, {
|
|
2865
|
+
default: withCtx(() => [
|
|
2866
|
+
createElementVNode("span", null, toDisplayString(unref(t)("EXPORT_ALL")), 1)
|
|
2867
|
+
]),
|
|
2868
|
+
_: 1
|
|
2869
|
+
})) : createCommentVNode("", true)
|
|
2870
|
+
]),
|
|
2871
|
+
_: 1
|
|
2872
|
+
})
|
|
2873
|
+
]),
|
|
2874
|
+
default: withCtx(() => [
|
|
2875
|
+
_hoisted_1$4
|
|
2876
|
+
]),
|
|
2877
|
+
_: 1
|
|
2878
|
+
}, 8, ["getPopupContainer"]),
|
|
2879
|
+
createVNode(_sfc_main$6, { onRegister: unref(registerDialog) }, null, 8, ["onRegister"])
|
|
2880
|
+
]),
|
|
2881
|
+
_: 1
|
|
2882
|
+
});
|
|
2883
|
+
};
|
|
2884
|
+
}
|
|
2885
|
+
});
|
|
2886
|
+
const _hoisted_1$3 = /* @__PURE__ */ createElementVNode("i", { class: "i ant-design:drag-outlined drag-icon cursor-pointer" }, null, -1);
|
|
2887
|
+
const _hoisted_2$1 = ["onClick"];
|
|
2888
|
+
const _hoisted_3$1 = ["onClick"];
|
|
2889
|
+
const _hoisted_4$1 = /* @__PURE__ */ createElementVNode("i", { class: "i ant-design:setting-outlined w-7 leading-7 text-center cursor-pointer" }, null, -1);
|
|
2890
|
+
const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
2891
|
+
__name: "Column",
|
|
2892
|
+
emits: [
|
|
2893
|
+
"columns-change"
|
|
2894
|
+
],
|
|
2895
|
+
setup(__props, { emit: emits }) {
|
|
2896
|
+
const { t } = useI18n("UI");
|
|
2897
|
+
const attrs = useAttrs();
|
|
2898
|
+
const prefixCls = "column-setting";
|
|
2899
|
+
const table = getTableInstance();
|
|
2900
|
+
const defaultRowSelection = omit(table.getRowSelection(), "selectedRowKeys");
|
|
2901
|
+
let inited = false;
|
|
2902
|
+
const cachePlainOptions = ref$1([]);
|
|
2903
|
+
const plainOptions = ref$1([]);
|
|
2904
|
+
const plainSortOptions = ref$1([]);
|
|
2905
|
+
const columnListRef = ref$1(null);
|
|
2906
|
+
const checkIndex = ref$1(false);
|
|
2907
|
+
const checkSelect = ref$1(false);
|
|
2908
|
+
const getValues = computed$1(() => {
|
|
2909
|
+
return unref(table?.getBind);
|
|
2910
|
+
});
|
|
2911
|
+
let sortable;
|
|
2912
|
+
let sortableOrder = [];
|
|
2913
|
+
const state = reactive({
|
|
2914
|
+
checkAll: true,
|
|
2915
|
+
checkedList: [],
|
|
2916
|
+
defaultCheckList: []
|
|
2917
|
+
});
|
|
2918
|
+
const indeterminate = computed$1(() => {
|
|
2919
|
+
let len = plainOptions.value.length;
|
|
2920
|
+
let checkedLen = state.checkedList.length;
|
|
2921
|
+
unref(checkIndex) && checkedLen--;
|
|
2922
|
+
return checkedLen > 0 && checkedLen < len;
|
|
2923
|
+
});
|
|
2924
|
+
watchEffect(() => {
|
|
2925
|
+
const columns = table.getColumns();
|
|
2926
|
+
if (columns && columns.length) {
|
|
2927
|
+
init();
|
|
2928
|
+
}
|
|
2929
|
+
});
|
|
2930
|
+
watchEffect(() => {
|
|
2931
|
+
const values = unref(getValues);
|
|
2932
|
+
checkIndex.value = !!values.showIndexColumn;
|
|
2933
|
+
checkSelect.value = !!values.rowSelection;
|
|
2934
|
+
});
|
|
2935
|
+
function handleVisibleChange() {
|
|
2936
|
+
if (inited)
|
|
2937
|
+
return;
|
|
2938
|
+
nextTick(() => {
|
|
2939
|
+
const columnListEl = unref(columnListRef);
|
|
2940
|
+
if (!columnListEl)
|
|
2941
|
+
return;
|
|
2942
|
+
const el = columnListEl.$el;
|
|
2943
|
+
if (!el)
|
|
2944
|
+
return;
|
|
2945
|
+
sortable = Sortablejs.create(unref(el), {
|
|
2946
|
+
animation: 500,
|
|
2947
|
+
delay: 400,
|
|
2948
|
+
delayOnTouchOnly: true,
|
|
2949
|
+
handle: ".drag-icon ",
|
|
2950
|
+
onEnd: (evt) => {
|
|
2951
|
+
const { oldIndex, newIndex } = evt;
|
|
2952
|
+
if (isNullAndUnDef(oldIndex) || isNullAndUnDef(newIndex) || oldIndex === newIndex) {
|
|
2953
|
+
return;
|
|
2954
|
+
}
|
|
2955
|
+
const columns = cloneDeep(plainSortOptions.value);
|
|
2956
|
+
if (oldIndex > newIndex) {
|
|
2957
|
+
columns.splice(newIndex, 0, columns[oldIndex]);
|
|
2958
|
+
columns.splice(oldIndex + 1, 1);
|
|
2959
|
+
} else {
|
|
2960
|
+
columns.splice(newIndex + 1, 0, columns[oldIndex]);
|
|
2961
|
+
columns.splice(oldIndex, 1);
|
|
2962
|
+
}
|
|
2963
|
+
plainSortOptions.value = columns;
|
|
2964
|
+
setColumns(
|
|
2965
|
+
columns.map((col) => col.value).filter((value) => state.checkedList.includes(value))
|
|
2966
|
+
);
|
|
2967
|
+
}
|
|
2968
|
+
});
|
|
2969
|
+
sortableOrder = sortable.toArray();
|
|
2970
|
+
inited = true;
|
|
2971
|
+
});
|
|
2972
|
+
}
|
|
2973
|
+
function onCheckAllChange(e) {
|
|
2974
|
+
const checkList = plainOptions.value.map((item) => item.value);
|
|
2975
|
+
if (e.target.checked) {
|
|
2976
|
+
state.checkedList = checkList;
|
|
2977
|
+
setColumns(checkList);
|
|
2978
|
+
} else {
|
|
2979
|
+
state.checkedList = [];
|
|
2980
|
+
setColumns([]);
|
|
2981
|
+
}
|
|
2982
|
+
}
|
|
2983
|
+
function handleIndexCheckChange(e) {
|
|
2984
|
+
table.setProps({
|
|
2985
|
+
showIndexColumn: e.target.checked
|
|
2986
|
+
});
|
|
2987
|
+
}
|
|
2988
|
+
function handleSelectCheckChange(e) {
|
|
2989
|
+
table.setProps({
|
|
2990
|
+
rowSelection: e.target.checked ? defaultRowSelection : null
|
|
2991
|
+
});
|
|
2992
|
+
}
|
|
2993
|
+
function onChange(checkedList) {
|
|
2994
|
+
const len = plainSortOptions.value.length;
|
|
2995
|
+
state.checkAll = checkedList.length === len;
|
|
2996
|
+
const sortList = unref(plainSortOptions).map((item) => item.value);
|
|
2997
|
+
checkedList.sort((prev, next) => {
|
|
2998
|
+
return sortList.indexOf(prev) - sortList.indexOf(next);
|
|
2999
|
+
});
|
|
3000
|
+
setColumns(checkedList);
|
|
3001
|
+
}
|
|
3002
|
+
function reset() {
|
|
3003
|
+
state.checkedList = [...state.defaultCheckList];
|
|
3004
|
+
state.checkAll = true;
|
|
3005
|
+
plainOptions.value = unref(cachePlainOptions);
|
|
3006
|
+
plainSortOptions.value = unref(cachePlainOptions);
|
|
3007
|
+
setColumns(table.getCacheColumns());
|
|
3008
|
+
sortable.sort(sortableOrder);
|
|
3009
|
+
}
|
|
3010
|
+
function getColumns() {
|
|
3011
|
+
return table.getColumns({
|
|
3012
|
+
ignoreIndex: true,
|
|
3013
|
+
ignoreAction: true
|
|
3014
|
+
}).reduce((ret, it) => {
|
|
3015
|
+
ret.push({
|
|
3016
|
+
label: it.title,
|
|
3017
|
+
value: it.dataIndex || it.title,
|
|
3018
|
+
...it
|
|
3019
|
+
});
|
|
3020
|
+
return ret;
|
|
3021
|
+
}, []);
|
|
3022
|
+
}
|
|
3023
|
+
function handleColumnFixed(item, fixed) {
|
|
3024
|
+
if (!state.checkedList.includes(item.dataIndex))
|
|
3025
|
+
return;
|
|
3026
|
+
const columns = getColumns();
|
|
3027
|
+
const isFixed = item.fixed === fixed ? false : fixed;
|
|
3028
|
+
const index = columns.findIndex((col) => col.dataIndex === item.dataIndex);
|
|
3029
|
+
if (index !== -1) {
|
|
3030
|
+
columns[index].fixed = isFixed;
|
|
3031
|
+
}
|
|
3032
|
+
item.fixed = isFixed;
|
|
3033
|
+
if (isFixed && !item.width) {
|
|
3034
|
+
item.width = 100;
|
|
3035
|
+
}
|
|
3036
|
+
table.setColumnsByDataIndex?.(item.dataIndex, { fixed: isFixed });
|
|
3037
|
+
setColumns(columns);
|
|
3038
|
+
}
|
|
3039
|
+
function setColumns(columns) {
|
|
3040
|
+
table.setColumns(columns);
|
|
3041
|
+
const data = unref(plainSortOptions).map((col) => {
|
|
3042
|
+
const visable = columns.findIndex(
|
|
3043
|
+
(c) => c === col.value || typeof c !== "string" && c.dataIndex === col.value
|
|
3044
|
+
) !== -1;
|
|
3045
|
+
return { dataIndex: col.value, fixed: col.fixed, visable };
|
|
3046
|
+
});
|
|
3047
|
+
emits("columns-change", data);
|
|
3048
|
+
}
|
|
3049
|
+
function init() {
|
|
3050
|
+
const columns = getColumns();
|
|
3051
|
+
const checkList = table.getColumns({ ignoreAction: true }).map((it) => it.defaultHidden ? "" : it.dataIndex || it.title).filter(Boolean);
|
|
3052
|
+
if (!plainOptions.value.length) {
|
|
3053
|
+
plainOptions.value = columns;
|
|
3054
|
+
plainSortOptions.value = columns;
|
|
3055
|
+
cachePlainOptions.value = cloneDeep(columns);
|
|
3056
|
+
state.defaultCheckList = checkList;
|
|
3057
|
+
} else {
|
|
3058
|
+
unref(plainOptions).forEach(
|
|
3059
|
+
(it) => it.fixed === columns.find((col) => col.dataIndex === it.dataIndex)?.fixed
|
|
3060
|
+
);
|
|
3061
|
+
}
|
|
3062
|
+
state.isInit = true;
|
|
3063
|
+
state.checkedList = checkList;
|
|
3064
|
+
}
|
|
3065
|
+
function getPopupContainer$1() {
|
|
3066
|
+
return isFunction$1(attrs.getPopupContainer) ? attrs.getPopupContainer() : getPopupContainer();
|
|
3067
|
+
}
|
|
3068
|
+
return (_ctx, _cache) => {
|
|
3069
|
+
const _component_ACheckbox = Checkbox$1;
|
|
3070
|
+
const _component_AButton = Button;
|
|
3071
|
+
const _component_ATooltip = Tooltip;
|
|
3072
|
+
const _component_ADivider = Divider$1;
|
|
3073
|
+
const _component_ACheckboxGroup = CheckboxGroup;
|
|
3074
|
+
const _component_APopover = Popover$1;
|
|
3075
|
+
return openBlock(), createBlock(_component_ATooltip, { placement: "top" }, {
|
|
3076
|
+
title: withCtx(() => [
|
|
3077
|
+
createElementVNode("span", null, toDisplayString(unref(t)("COLUMN_CONTROL")), 1)
|
|
3078
|
+
]),
|
|
3079
|
+
default: withCtx(() => [
|
|
3080
|
+
createVNode(_component_APopover, {
|
|
3081
|
+
placement: "bottomLeft",
|
|
3082
|
+
trigger: "click",
|
|
3083
|
+
overlayClassName: `${prefixCls}__cloumn-list`,
|
|
3084
|
+
onVisibleChange: handleVisibleChange,
|
|
3085
|
+
getPopupContainer: getPopupContainer$1
|
|
3086
|
+
}, {
|
|
3087
|
+
title: withCtx(() => [
|
|
3088
|
+
createElementVNode("div", {
|
|
3089
|
+
class: normalizeClass(`${prefixCls}__popover-title flex`)
|
|
3090
|
+
}, [
|
|
3091
|
+
createVNode(_component_ACheckbox, {
|
|
3092
|
+
indeterminate: unref(indeterminate),
|
|
3093
|
+
checked: state.checkAll,
|
|
3094
|
+
"onUpdate:checked": _cache[0] || (_cache[0] = ($event) => state.checkAll = $event),
|
|
3095
|
+
onChange: onCheckAllChange
|
|
3096
|
+
}, {
|
|
3097
|
+
default: withCtx(() => [
|
|
3098
|
+
createTextVNode(toDisplayString(unref(t)("COLUMN_SHOW")), 1)
|
|
3099
|
+
]),
|
|
3100
|
+
_: 1
|
|
3101
|
+
}, 8, ["indeterminate", "checked"]),
|
|
3102
|
+
createVNode(_component_ACheckbox, {
|
|
3103
|
+
checked: checkIndex.value,
|
|
3104
|
+
"onUpdate:checked": _cache[1] || (_cache[1] = ($event) => checkIndex.value = $event),
|
|
3105
|
+
onChange: handleIndexCheckChange
|
|
3106
|
+
}, {
|
|
3107
|
+
default: withCtx(() => [
|
|
3108
|
+
createTextVNode(toDisplayString(unref(t)("INDEX")), 1)
|
|
3109
|
+
]),
|
|
3110
|
+
_: 1
|
|
3111
|
+
}, 8, ["checked"]),
|
|
3112
|
+
createVNode(_component_ACheckbox, {
|
|
3113
|
+
checked: checkSelect.value,
|
|
3114
|
+
"onUpdate:checked": _cache[2] || (_cache[2] = ($event) => checkSelect.value = $event),
|
|
3115
|
+
onChange: handleSelectCheckChange,
|
|
3116
|
+
disabled: !unref(defaultRowSelection)
|
|
3117
|
+
}, {
|
|
3118
|
+
default: withCtx(() => [
|
|
3119
|
+
createTextVNode(toDisplayString(unref(t)("CHECKBOX")), 1)
|
|
3120
|
+
]),
|
|
3121
|
+
_: 1
|
|
3122
|
+
}, 8, ["checked", "disabled"]),
|
|
3123
|
+
createVNode(_component_AButton, {
|
|
3124
|
+
type: "link",
|
|
3125
|
+
onClick: reset
|
|
3126
|
+
}, {
|
|
3127
|
+
default: withCtx(() => [
|
|
3128
|
+
createTextVNode(toDisplayString(unref(t)("RESET")), 1)
|
|
3129
|
+
]),
|
|
3130
|
+
_: 1
|
|
3131
|
+
})
|
|
3132
|
+
], 2)
|
|
3133
|
+
]),
|
|
3134
|
+
content: withCtx(() => [
|
|
3135
|
+
createVNode(_component_ACheckboxGroup, {
|
|
3136
|
+
value: state.checkedList,
|
|
3137
|
+
"onUpdate:value": _cache[3] || (_cache[3] = ($event) => state.checkedList = $event),
|
|
3138
|
+
onChange,
|
|
3139
|
+
ref_key: "columnListRef",
|
|
3140
|
+
ref: columnListRef
|
|
3141
|
+
}, {
|
|
3142
|
+
default: withCtx(() => [
|
|
3143
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(plainOptions.value, (item) => {
|
|
3144
|
+
return openBlock(), createElementBlock("div", {
|
|
3145
|
+
key: item.value,
|
|
3146
|
+
class: normalizeClass(`${prefixCls}__check-item flex pt-1 pr-4 pb-2 items-center`)
|
|
3147
|
+
}, [
|
|
3148
|
+
_hoisted_1$3,
|
|
3149
|
+
createVNode(_component_ACheckbox, {
|
|
3150
|
+
value: item.value
|
|
3151
|
+
}, {
|
|
3152
|
+
default: withCtx(() => [
|
|
3153
|
+
createTextVNode(toDisplayString(item.label), 1)
|
|
3154
|
+
]),
|
|
3155
|
+
_: 2
|
|
3156
|
+
}, 1032, ["value"]),
|
|
3157
|
+
createVNode(_component_ATooltip, {
|
|
3158
|
+
placement: "bottomLeft",
|
|
3159
|
+
mouseLeaveDelay: 0.4,
|
|
3160
|
+
getPopupContainer: getPopupContainer$1
|
|
3161
|
+
}, {
|
|
3162
|
+
title: withCtx(() => [
|
|
3163
|
+
createTextVNode(toDisplayString(unref(t)("FIXED_TO_LEFT")), 1)
|
|
3164
|
+
]),
|
|
3165
|
+
default: withCtx(() => [
|
|
3166
|
+
createElementVNode("span", {
|
|
3167
|
+
class: normalizeClass({
|
|
3168
|
+
disabled: !state.checkedList.includes(item.value),
|
|
3169
|
+
active: item.fixed === "left"
|
|
3170
|
+
})
|
|
3171
|
+
}, [
|
|
3172
|
+
createElementVNode("i", {
|
|
3173
|
+
class: normalizeClass(["i mdi:arrow-collapse-left cursor-pointer", `${prefixCls}__fixed-left`]),
|
|
3174
|
+
onClick: ($event) => handleColumnFixed(item, "left")
|
|
3175
|
+
}, null, 10, _hoisted_2$1)
|
|
3176
|
+
], 2)
|
|
3177
|
+
]),
|
|
3178
|
+
_: 2
|
|
3179
|
+
}, 1032, ["mouseLeaveDelay"]),
|
|
3180
|
+
createVNode(_component_ADivider, { type: "vertical" }),
|
|
3181
|
+
createVNode(_component_ATooltip, {
|
|
3182
|
+
placement: "bottomLeft",
|
|
3183
|
+
mouseLeaveDelay: 0.4,
|
|
3184
|
+
getPopupContainer: getPopupContainer$1
|
|
3185
|
+
}, {
|
|
3186
|
+
title: withCtx(() => [
|
|
3187
|
+
createTextVNode(toDisplayString(unref(t)("FIXED_TO_RIGHT")), 1)
|
|
3188
|
+
]),
|
|
3189
|
+
default: withCtx(() => [
|
|
3190
|
+
createElementVNode("span", {
|
|
3191
|
+
class: normalizeClass({
|
|
3192
|
+
disabled: !state.checkedList.includes(item.value),
|
|
3193
|
+
active: item.fixed === "right"
|
|
3194
|
+
})
|
|
3195
|
+
}, [
|
|
3196
|
+
createElementVNode("i", {
|
|
3197
|
+
class: normalizeClass(["i mdi:arrow-collapse-right cursor-pointer", `${prefixCls}__fixed-right`]),
|
|
3198
|
+
onClick: ($event) => handleColumnFixed(item, "right")
|
|
3199
|
+
}, null, 10, _hoisted_3$1)
|
|
3200
|
+
], 2)
|
|
3201
|
+
]),
|
|
3202
|
+
_: 2
|
|
3203
|
+
}, 1032, ["mouseLeaveDelay"])
|
|
3204
|
+
], 2);
|
|
3205
|
+
}), 128))
|
|
3206
|
+
]),
|
|
3207
|
+
_: 1
|
|
3208
|
+
}, 8, ["value"])
|
|
3209
|
+
]),
|
|
3210
|
+
default: withCtx(() => [
|
|
3211
|
+
_hoisted_4$1
|
|
3212
|
+
]),
|
|
3213
|
+
_: 1
|
|
3214
|
+
}, 8, ["overlayClassName"])
|
|
3215
|
+
]),
|
|
3216
|
+
_: 1
|
|
3217
|
+
});
|
|
3218
|
+
};
|
|
3219
|
+
}
|
|
3220
|
+
});
|
|
3221
|
+
const _hoisted_1$2 = { class: "flex dt-table-setting" };
|
|
3222
|
+
const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
3223
|
+
__name: "index",
|
|
3224
|
+
props: {
|
|
3225
|
+
setting: {
|
|
3226
|
+
type: Object,
|
|
3227
|
+
default: () => ({})
|
|
3228
|
+
}
|
|
3229
|
+
},
|
|
3230
|
+
emits: ["columns-change"],
|
|
3231
|
+
setup(__props, { emit: emits }) {
|
|
3232
|
+
const props2 = __props;
|
|
3233
|
+
const getSetting = computed$1(() => {
|
|
3234
|
+
return {
|
|
3235
|
+
download: true,
|
|
3236
|
+
setting: true,
|
|
3237
|
+
fullscreen: true,
|
|
3238
|
+
...props2.setting
|
|
3239
|
+
};
|
|
3240
|
+
});
|
|
3241
|
+
function handleColumnChange(data) {
|
|
3242
|
+
emits("columns-change", data);
|
|
3243
|
+
}
|
|
3244
|
+
return (_ctx, _cache) => {
|
|
3245
|
+
return openBlock(), createElementBlock("div", _hoisted_1$2, [
|
|
3246
|
+
unref(getSetting).download ? (openBlock(), createBlock(_sfc_main$5, normalizeProps(mergeProps({ key: 0 }, unref(getSetting))), null, 16)) : createCommentVNode("", true),
|
|
3247
|
+
unref(getSetting).setting ? (openBlock(), createBlock(_sfc_main$4, {
|
|
3248
|
+
key: 1,
|
|
3249
|
+
onColumnsChange: handleColumnChange
|
|
3250
|
+
})) : createCommentVNode("", true),
|
|
3251
|
+
unref(getSetting).fullscreen ? (openBlock(), createBlock(_sfc_main$f, { key: 2 })) : createCommentVNode("", true)
|
|
3252
|
+
]);
|
|
3253
|
+
};
|
|
3254
|
+
}
|
|
3255
|
+
});
|
|
3256
|
+
const _hoisted_1$1 = { class: "dt-table-header" };
|
|
3257
|
+
const _hoisted_2 = { class: "flex flex-row justify-between" };
|
|
3258
|
+
const _hoisted_3 = { class: "flex flex-row flex-1" };
|
|
3259
|
+
const _hoisted_4 = { key: 0 };
|
|
3260
|
+
const _hoisted_5 = {
|
|
3261
|
+
key: 0,
|
|
3262
|
+
class: "border dt-table-header-top text-12 bg-gray-100 mt-1 py-1 px-3 border-dashed"
|
|
3263
|
+
};
|
|
3264
|
+
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
3265
|
+
__name: "TableHeader",
|
|
3266
|
+
props: {
|
|
3267
|
+
tableSetting: {
|
|
3268
|
+
type: [Object, Boolean]
|
|
3269
|
+
},
|
|
3270
|
+
toolbar: {
|
|
3271
|
+
type: Array,
|
|
3272
|
+
default: () => []
|
|
3273
|
+
}
|
|
3274
|
+
},
|
|
3275
|
+
setup(__props) {
|
|
3276
|
+
const props2 = __props;
|
|
3277
|
+
const getActionsProps = {
|
|
3278
|
+
mode: null,
|
|
3279
|
+
showAdvancedButton: false,
|
|
3280
|
+
show: true,
|
|
3281
|
+
buttonList: props2.toolbar
|
|
3282
|
+
};
|
|
3283
|
+
return (_ctx, _cache) => {
|
|
3284
|
+
return openBlock(), createElementBlock("div", _hoisted_1$1, [
|
|
3285
|
+
createElementVNode("div", _hoisted_2, [
|
|
3286
|
+
createElementVNode("div", _hoisted_3, [
|
|
3287
|
+
unref(getActionsProps)?.buttonList.length ? (openBlock(), createBlock(unref(_sfc_main$g), normalizeProps(mergeProps({ key: 0 }, unref(getActionsProps))), null, 16)) : createCommentVNode("", true),
|
|
3288
|
+
renderSlot(_ctx.$slots, "toolbar")
|
|
3289
|
+
]),
|
|
3290
|
+
__props.tableSetting ? (openBlock(), createElementBlock("div", _hoisted_4, [
|
|
3291
|
+
createVNode(_sfc_main$3, { setting: __props.tableSetting }, null, 8, ["setting"])
|
|
3292
|
+
])) : createCommentVNode("", true)
|
|
3293
|
+
]),
|
|
3294
|
+
_ctx.$slots.headerTop ? (openBlock(), createElementBlock("div", _hoisted_5, [
|
|
3295
|
+
renderSlot(_ctx.$slots, "headerTop")
|
|
3296
|
+
])) : createCommentVNode("", true)
|
|
3297
|
+
]);
|
|
3298
|
+
};
|
|
3299
|
+
}
|
|
3300
|
+
});
|
|
3301
|
+
function useTableHeader(propsRef, slots, handlers) {
|
|
3302
|
+
const { t } = useI18n("UI");
|
|
3303
|
+
const getHeaderProps = computed(() => {
|
|
3304
|
+
const TABLE_TOOLS = [
|
|
3305
|
+
{ t: "\u65B0\u589E", name: t("ADD"), preIcon: "mdi:plus", type: "primary", onClick: unref(propsRef).onAdd },
|
|
3306
|
+
{ t: "\u5220\u9664", name: t("DELETE"), preIcon: "mdi:delete-outline", onClick: unref(propsRef).onDeletes }
|
|
3307
|
+
];
|
|
3308
|
+
const { tableSetting, toolbar = TABLE_TOOLS } = unref(propsRef);
|
|
3309
|
+
const { getSlot } = useSlots$1();
|
|
3310
|
+
const hideTitle = (!toolbar || !toolbar.filter((it) => it.show ?? true).length) && !slots.toolbar && !slots.headerTop && !tableSetting;
|
|
3311
|
+
return {
|
|
3312
|
+
title: hideTitle ? null : () => h$1(
|
|
3313
|
+
_sfc_main$2,
|
|
3314
|
+
{
|
|
3315
|
+
tableSetting,
|
|
3316
|
+
toolbar,
|
|
3317
|
+
onColumnsChange: handlers.onColumnsChange
|
|
3318
|
+
},
|
|
3319
|
+
{
|
|
3320
|
+
...slots.toolbar ? {
|
|
3321
|
+
toolbar: () => getSlot(slots, "toolbar")
|
|
3322
|
+
} : {},
|
|
3323
|
+
...slots.headerTop ? {
|
|
3324
|
+
headerTop: () => getSlot(slots, "headerTop")
|
|
3325
|
+
} : {}
|
|
3326
|
+
}
|
|
3327
|
+
)
|
|
3328
|
+
};
|
|
3329
|
+
});
|
|
3330
|
+
return {
|
|
3331
|
+
getHeaderProps
|
|
3332
|
+
};
|
|
3333
|
+
}
|
|
3334
|
+
function useLoading(props2) {
|
|
3335
|
+
const getLoading = ref$1(false);
|
|
3336
|
+
watch(
|
|
3337
|
+
() => unref(props2)?.loading,
|
|
3338
|
+
(v) => getLoading.value = v
|
|
3339
|
+
);
|
|
3340
|
+
function setLoading(loading) {
|
|
3341
|
+
getLoading.value = loading;
|
|
3342
|
+
}
|
|
3343
|
+
return {
|
|
3344
|
+
getLoading,
|
|
3345
|
+
setLoading
|
|
3346
|
+
};
|
|
3347
|
+
}
|
|
3348
|
+
function usePagination(props2) {
|
|
3349
|
+
const { t } = useI18n("UI");
|
|
3350
|
+
const paginationRef = ref$1();
|
|
3351
|
+
const { getUiSize } = useHeader();
|
|
3352
|
+
watch(
|
|
3353
|
+
() => unref(props2).pagination,
|
|
3354
|
+
(pagination) => {
|
|
3355
|
+
if (!isBoolean(pagination) && pagination) {
|
|
3356
|
+
paginationRef.value = {
|
|
3357
|
+
...unref(paginationRef),
|
|
3358
|
+
...pagination ?? {}
|
|
3359
|
+
};
|
|
3360
|
+
}
|
|
3361
|
+
}
|
|
3362
|
+
);
|
|
3363
|
+
const getPaginationInfo = computed$1(() => {
|
|
3364
|
+
const { appConf } = useAppStore();
|
|
3365
|
+
let { pagination } = unref(props2);
|
|
3366
|
+
if (isBoolean(pagination) && !pagination) {
|
|
3367
|
+
return false;
|
|
3368
|
+
}
|
|
3369
|
+
if (!pagination) {
|
|
3370
|
+
pagination = {
|
|
3371
|
+
pageSize: appConf.ui.table.defaultPageSize,
|
|
3372
|
+
current: 1
|
|
3373
|
+
};
|
|
3374
|
+
}
|
|
3375
|
+
const { defaultPageSize, pageSizeOptions } = {
|
|
3376
|
+
...appConf.ui.table,
|
|
3377
|
+
...pagination
|
|
3378
|
+
};
|
|
3379
|
+
return {
|
|
3380
|
+
current: 1,
|
|
3381
|
+
pageSize: defaultPageSize,
|
|
3382
|
+
defaultPageSize,
|
|
3383
|
+
showTotal: (total, range) => t("TOTAL_PAGE", { total }),
|
|
3384
|
+
showSizeChanger: true,
|
|
3385
|
+
pageSizeOptions,
|
|
3386
|
+
showQuickJumper: true,
|
|
3387
|
+
class: `dt-pagination dt-pagination-${unref(getUiSize)}`,
|
|
3388
|
+
...isBoolean(pagination) ? {} : pagination,
|
|
3389
|
+
...unref(paginationRef)
|
|
3390
|
+
};
|
|
3391
|
+
});
|
|
3392
|
+
function setPagination(info) {
|
|
3393
|
+
const paginationInfo = unref(getPaginationInfo);
|
|
3394
|
+
paginationRef.value = {
|
|
3395
|
+
...!isBoolean(paginationInfo) ? paginationInfo : {},
|
|
3396
|
+
...info
|
|
3397
|
+
};
|
|
3398
|
+
}
|
|
3399
|
+
function getPagination() {
|
|
3400
|
+
return unref(getPaginationInfo);
|
|
3401
|
+
}
|
|
3402
|
+
return {
|
|
3403
|
+
getPaginationInfo,
|
|
3404
|
+
setPagination,
|
|
3405
|
+
getPagination
|
|
3406
|
+
};
|
|
3407
|
+
}
|
|
3408
|
+
const DEFAULT_CONFIG = {
|
|
3409
|
+
id: "id",
|
|
3410
|
+
children: "children",
|
|
3411
|
+
pid: "pid"
|
|
3412
|
+
};
|
|
3413
|
+
function useRowSelection(propsRef, emit) {
|
|
3414
|
+
const selectedRowKeysRef = ref$1([]);
|
|
3415
|
+
const selectedRowRef = ref$1([]);
|
|
3416
|
+
const getRowSelectionRef = computed$1(() => {
|
|
3417
|
+
const { rowSelection, showCheckboxColumn } = unref(propsRef);
|
|
3418
|
+
if (!rowSelection && !showCheckboxColumn)
|
|
3419
|
+
return null;
|
|
3420
|
+
if (isBoolean(showCheckboxColumn)) {
|
|
3421
|
+
if (showCheckboxColumn && rowSelection) {
|
|
3422
|
+
rowSelection.type = "checkbox";
|
|
3423
|
+
} else {
|
|
3424
|
+
return null;
|
|
3425
|
+
}
|
|
3426
|
+
}
|
|
3427
|
+
return {
|
|
3428
|
+
selectedRowKeys: unref(selectedRowKeysRef),
|
|
3429
|
+
onChange: (selectedRowKeys) => setSelectedRowKeys(selectedRowKeys),
|
|
3430
|
+
...omit(rowSelection, ["onChange"])
|
|
3431
|
+
};
|
|
3432
|
+
});
|
|
3433
|
+
function findeNodeAll(tree, func, config = {}) {
|
|
3434
|
+
const _config = Object.assign({}, DEFAULT_CONFIG, config), result = [], list = [...tree];
|
|
3435
|
+
for (const node of list) {
|
|
3436
|
+
func(node) && result.push(node);
|
|
3437
|
+
node[_config?.children] && list.push(...node[_config?.children]);
|
|
3438
|
+
}
|
|
3439
|
+
return result;
|
|
3440
|
+
}
|
|
3441
|
+
function setSelectedRowKeys(rowKeys) {
|
|
3442
|
+
selectedRowKeysRef.value = rowKeys;
|
|
3443
|
+
const allSelectedRows = findeNodeAll(
|
|
3444
|
+
toRaw$1(unref(propsRef).dataSource).concat(toRaw$1(unref(selectedRowRef))),
|
|
3445
|
+
(item) => rowKeys.includes(item[unref(propsRef).rowKey]),
|
|
3446
|
+
{
|
|
3447
|
+
children: propsRef.value.childrenColumnName ?? "children"
|
|
3448
|
+
}
|
|
3449
|
+
);
|
|
3450
|
+
const trueSelectedRows = [];
|
|
3451
|
+
rowKeys.forEach((key) => {
|
|
3452
|
+
const found = allSelectedRows.find((item) => item[unref(propsRef).rowKey] === key);
|
|
3453
|
+
found && trueSelectedRows.push(found);
|
|
3454
|
+
});
|
|
3455
|
+
selectedRowRef.value = trueSelectedRows;
|
|
3456
|
+
}
|
|
3457
|
+
function clearSelectedRowKeys() {
|
|
3458
|
+
selectedRowKeysRef.value = [];
|
|
3459
|
+
selectedRowRef.value = [];
|
|
3460
|
+
}
|
|
3461
|
+
function getRowSelection() {
|
|
3462
|
+
return unref(getRowSelectionRef);
|
|
3463
|
+
}
|
|
3464
|
+
function getSelectedRowKeys() {
|
|
3465
|
+
return unref(selectedRowKeysRef);
|
|
3466
|
+
}
|
|
3467
|
+
function getSelectRows() {
|
|
3468
|
+
return unref(selectedRowRef);
|
|
3469
|
+
}
|
|
3470
|
+
watch(
|
|
3471
|
+
() => unref(propsRef).rowSelection?.selectedRowKeys,
|
|
3472
|
+
(v) => {
|
|
3473
|
+
setSelectedRowKeys(v);
|
|
3474
|
+
}
|
|
3475
|
+
);
|
|
3476
|
+
watch(
|
|
3477
|
+
() => unref(selectedRowKeysRef),
|
|
3478
|
+
() => {
|
|
3479
|
+
nextTick(() => {
|
|
3480
|
+
const { rowSelection } = unref(propsRef);
|
|
3481
|
+
if (rowSelection) {
|
|
3482
|
+
const { onChange } = rowSelection;
|
|
3483
|
+
if (onChange && isFunction(onChange))
|
|
3484
|
+
onChange(getSelectedRowKeys(), getSelectRows());
|
|
3485
|
+
}
|
|
3486
|
+
emit("selection-change", {
|
|
3487
|
+
keys: getSelectedRowKeys(),
|
|
3488
|
+
rows: getSelectRows()
|
|
3489
|
+
});
|
|
3490
|
+
});
|
|
3491
|
+
},
|
|
3492
|
+
{ deep: true }
|
|
3493
|
+
);
|
|
3494
|
+
return {
|
|
3495
|
+
getRowSelectionRef,
|
|
3496
|
+
clearSelectedRowKeys,
|
|
3497
|
+
getRowSelection,
|
|
3498
|
+
getSelectedRowKeys,
|
|
3499
|
+
getSelectRows,
|
|
3500
|
+
setSelectedRowKeys
|
|
3501
|
+
};
|
|
3502
|
+
}
|
|
3503
|
+
function useTableScroll(propsRef, tableElRef, columnsRef, rowSelectionRef) {
|
|
3504
|
+
const tableHeightRef = ref$1(0), filterSource = ref$1([]);
|
|
3505
|
+
ref$1(null);
|
|
3506
|
+
let footerEl, bodyEl;
|
|
3507
|
+
const debounceRedoHeight = useDebounceFn(redoHeight, 100);
|
|
3508
|
+
windowResizeFn(calcTableHeight, 280);
|
|
3509
|
+
const getCanResize = computed$1(() => {
|
|
3510
|
+
const { canResize, scroll } = unref(propsRef);
|
|
3511
|
+
return canResize && !(scroll || {}).y;
|
|
3512
|
+
});
|
|
3513
|
+
watch(
|
|
3514
|
+
() => propsRef.value.dataSource,
|
|
3515
|
+
(v) => {
|
|
3516
|
+
debounceRedoHeight();
|
|
3517
|
+
},
|
|
3518
|
+
{
|
|
3519
|
+
deep: true,
|
|
3520
|
+
flush: "post"
|
|
3521
|
+
}
|
|
3522
|
+
);
|
|
3523
|
+
function redoHeight() {
|
|
3524
|
+
nextTick(() => calcTableHeight());
|
|
3525
|
+
}
|
|
3526
|
+
function setHeight(height) {
|
|
3527
|
+
tableHeightRef.value = height;
|
|
3528
|
+
}
|
|
3529
|
+
async function calcTableHeight() {
|
|
3530
|
+
const { pagination, virtual } = unref(propsRef);
|
|
3531
|
+
const table = unref(tableElRef);
|
|
3532
|
+
const tableEl = table?.$el;
|
|
3533
|
+
const tableData = unref(propsRef).dataSource;
|
|
3534
|
+
if (!tableEl)
|
|
3535
|
+
return;
|
|
3536
|
+
if (!bodyEl) {
|
|
3537
|
+
bodyEl = tableEl.querySelector(".ant-table-body");
|
|
3538
|
+
if (!bodyEl)
|
|
3539
|
+
return;
|
|
3540
|
+
}
|
|
3541
|
+
const hasScrollBarY = bodyEl.scrollHeight > bodyEl.clientHeight;
|
|
3542
|
+
const hasScrollBarX = bodyEl.scrollWidth > bodyEl.clientWidth;
|
|
3543
|
+
if (hasScrollBarY) {
|
|
3544
|
+
tableEl.classList.contains("hide-scrollbar-y") && tableEl.classList.remove("hide-scrollbar-y");
|
|
3545
|
+
} else {
|
|
3546
|
+
!tableEl.classList.contains("hide-scrollbar-y") && tableEl.classList.add("hide-scrollbar-y");
|
|
3547
|
+
}
|
|
3548
|
+
if (hasScrollBarX) {
|
|
3549
|
+
tableEl.classList.contains("hide-scrollbar-x") && tableEl.classList.remove("hide-scrollbar-x");
|
|
3550
|
+
} else {
|
|
3551
|
+
!tableEl.classList.contains("hide-scrollbar-x") && tableEl.classList.add("hide-scrollbar-x");
|
|
3552
|
+
}
|
|
3553
|
+
bodyEl.style.height = "unset";
|
|
3554
|
+
if (!unref(getCanResize) || !unref(tableData) || tableData.length === 0)
|
|
3555
|
+
return;
|
|
3556
|
+
await nextTick();
|
|
3557
|
+
let headerHeight = 0, paginationHeight = 2, footerHeight = 0, titleHeight = tableEl.querySelector(".ant-table-title")?.offsetHeight ?? 0, marginHeight = 15;
|
|
3558
|
+
const headEl = tableEl.querySelector(".ant-table-thead ");
|
|
3559
|
+
if (headEl) {
|
|
3560
|
+
headerHeight = headEl.offsetHeight;
|
|
3561
|
+
}
|
|
3562
|
+
if (!isBoolean(pagination)) {
|
|
3563
|
+
let paginationEl = tableEl.querySelector(".ant-pagination");
|
|
3564
|
+
if (paginationEl) {
|
|
3565
|
+
const offsetHeight = paginationEl.offsetHeight;
|
|
3566
|
+
paginationHeight += offsetHeight || 0;
|
|
3567
|
+
} else {
|
|
3568
|
+
paginationHeight += 50;
|
|
3569
|
+
}
|
|
3570
|
+
if (!footerEl) {
|
|
3571
|
+
footerEl = tableEl.querySelector(".ant-table-footer");
|
|
3572
|
+
} else {
|
|
3573
|
+
const offsetHeight = footerEl.offsetHeight;
|
|
3574
|
+
footerHeight += offsetHeight || 0;
|
|
3575
|
+
}
|
|
3576
|
+
} else {
|
|
3577
|
+
paginationHeight = -8;
|
|
3578
|
+
}
|
|
3579
|
+
const tableHeight = table?.$el?.offsetHeight ?? 0;
|
|
3580
|
+
let height = tableHeight - paginationHeight - footerHeight - headerHeight - titleHeight - marginHeight;
|
|
3581
|
+
height = Math.max(height, 167);
|
|
3582
|
+
setHeight(height);
|
|
3583
|
+
bodyEl.style.height = `${height}px`;
|
|
3584
|
+
filterSource.value = unref(propsRef)?.dataSource;
|
|
3585
|
+
}
|
|
3586
|
+
const getScrollX = computed$1(() => {
|
|
3587
|
+
let width = 0;
|
|
3588
|
+
if (unref(rowSelectionRef)) {
|
|
3589
|
+
width += 32;
|
|
3590
|
+
}
|
|
3591
|
+
const NORMAL_WIDTH = 120;
|
|
3592
|
+
const columns = unref(columnsRef).filter((item) => !item.defaultHidden);
|
|
3593
|
+
columns.forEach((item) => {
|
|
3594
|
+
width += Number.parseInt(item.width) || NORMAL_WIDTH;
|
|
3595
|
+
});
|
|
3596
|
+
const table = unref(tableElRef);
|
|
3597
|
+
const tableWidth = table?.$el?.offsetWidth ?? 0;
|
|
3598
|
+
return tableWidth > width ? "100%" : width;
|
|
3599
|
+
});
|
|
3600
|
+
const getScrollRef = computed$1(() => {
|
|
3601
|
+
const tableHeight = unref(tableHeightRef);
|
|
3602
|
+
const { canResize, scroll } = unref(propsRef);
|
|
3603
|
+
return {
|
|
3604
|
+
x: unref(getScrollX),
|
|
3605
|
+
y: tableHeight,
|
|
3606
|
+
scrollToFirstRowOnChange: false,
|
|
3607
|
+
...scroll
|
|
3608
|
+
};
|
|
3609
|
+
});
|
|
3610
|
+
onMounted$1(() => {
|
|
3611
|
+
calcTableHeight();
|
|
3612
|
+
nextTick(() => debounceRedoHeight());
|
|
3613
|
+
});
|
|
3614
|
+
return {
|
|
3615
|
+
getScrollRef,
|
|
3616
|
+
filterSource
|
|
3617
|
+
};
|
|
3618
|
+
}
|
|
3619
|
+
function useRows(propsRef) {
|
|
3620
|
+
function getRowClassName(record, index) {
|
|
3621
|
+
const { striped, rowClassName } = unref(propsRef);
|
|
3622
|
+
const classNames = [];
|
|
3623
|
+
if (striped) {
|
|
3624
|
+
classNames.push(index % 2 === 1 ? "table-striped" : "");
|
|
3625
|
+
}
|
|
3626
|
+
if (rowClassName && isFunction(rowClassName)) {
|
|
3627
|
+
classNames.push(rowClassName(record, index));
|
|
3628
|
+
}
|
|
3629
|
+
return classNames.join(" ");
|
|
3630
|
+
}
|
|
3631
|
+
return {
|
|
3632
|
+
getRowClassName
|
|
3633
|
+
};
|
|
3634
|
+
}
|
|
3635
|
+
const props = {
|
|
3636
|
+
column: Object,
|
|
3637
|
+
record: Object,
|
|
3638
|
+
index: Number
|
|
3639
|
+
};
|
|
3640
|
+
const _sfc_main$1 = {
|
|
3641
|
+
name: "TableRender",
|
|
3642
|
+
props,
|
|
3643
|
+
setup(props2, {}) {
|
|
3644
|
+
let renderText = ref$1(null);
|
|
3645
|
+
watch(() => [props2.record, props2.column], (v) => {
|
|
3646
|
+
if (v) {
|
|
3647
|
+
renderCell();
|
|
3648
|
+
}
|
|
3649
|
+
}, {
|
|
3650
|
+
immediate: true,
|
|
3651
|
+
deep: true
|
|
3652
|
+
});
|
|
3653
|
+
function renderCell() {
|
|
3654
|
+
const {
|
|
3655
|
+
column,
|
|
3656
|
+
record,
|
|
3657
|
+
index
|
|
3658
|
+
} = props2;
|
|
3659
|
+
const {
|
|
3660
|
+
render,
|
|
3661
|
+
dataIndex
|
|
3662
|
+
} = column;
|
|
3663
|
+
const text = record[dataIndex.toString()];
|
|
3664
|
+
if (isObject(render)) {
|
|
3665
|
+
const {
|
|
3666
|
+
dict,
|
|
3667
|
+
date,
|
|
3668
|
+
number,
|
|
3669
|
+
percent,
|
|
3670
|
+
struc
|
|
3671
|
+
} = render;
|
|
3672
|
+
if (struc) {
|
|
3673
|
+
const {
|
|
3674
|
+
appConf
|
|
3675
|
+
} = useAppStore();
|
|
3676
|
+
let apiStruc = appConf.structure[struc];
|
|
3677
|
+
if (!apiStruc) {
|
|
3678
|
+
error(`${struc}\u672A\u5728structure\u4E2D\u914D\u7F6E`);
|
|
3679
|
+
} else {
|
|
3680
|
+
renderText = getDictValueByCode(text, apiStruc);
|
|
3681
|
+
}
|
|
3682
|
+
} else if (dict) {
|
|
3683
|
+
renderText = getDictValueByCode(text, dict);
|
|
3684
|
+
} else if (date) {
|
|
3685
|
+
renderText.value = (text && dayjs(text).format(date || "YYYY-MM-DD")) ?? "";
|
|
3686
|
+
} else if (number) {
|
|
3687
|
+
renderText.value = formatNumber(text, number);
|
|
3688
|
+
} else if (percent) {
|
|
3689
|
+
renderText.value = formatNumber((text || 0) * 100, percent) + "%";
|
|
3690
|
+
} else if (isVnode(render)) {
|
|
3691
|
+
renderText.value = createVNode(Fragment, null, [createTextVNode(" "), render, createTextVNode(" ")]);
|
|
3692
|
+
} else if (render["setup"]) {
|
|
3693
|
+
renderText.value = createVNode(render, {
|
|
3694
|
+
...record,
|
|
3695
|
+
text
|
|
3696
|
+
});
|
|
3697
|
+
}
|
|
3698
|
+
} else if (isFunction(render)) {
|
|
3699
|
+
let afterRenderData = render(record, index, text);
|
|
3700
|
+
if (afterRenderData.__v_isRef) {
|
|
3701
|
+
renderText = afterRenderData;
|
|
3702
|
+
} else if (afterRenderData["setup"]) {
|
|
3703
|
+
renderText.value = createVNode(afterRenderData, {
|
|
3704
|
+
...record,
|
|
3705
|
+
text
|
|
3706
|
+
});
|
|
3707
|
+
} else {
|
|
3708
|
+
renderText.value = isVnode(afterRenderData) ? createVNode(Fragment, null, [afterRenderData]) : afterRenderData;
|
|
3709
|
+
}
|
|
3710
|
+
} else {
|
|
3711
|
+
renderText.value = unref(text);
|
|
3712
|
+
}
|
|
3713
|
+
}
|
|
3714
|
+
return () => createVNode("span", null, [unref(renderText)]);
|
|
3715
|
+
}
|
|
3716
|
+
};
|
|
3717
|
+
const DEFAULT_SORT_FN = (sortInfo) => {
|
|
3718
|
+
const { field, order } = sortInfo;
|
|
3719
|
+
return field && order ? { field, order } : {};
|
|
3720
|
+
};
|
|
3721
|
+
const TableProps = {
|
|
3722
|
+
clickToSelectRow: { type: Boolean, default: false },
|
|
3723
|
+
tableSetting: { type: [Boolean, Object], default: () => ({}) },
|
|
3724
|
+
striped: { type: Boolean, default: true },
|
|
3725
|
+
canColDrag: { type: Boolean, default: true },
|
|
3726
|
+
clearSelectOnPageChange: { type: Boolean, default: false },
|
|
3727
|
+
resizable: { type: Boolean, default: true },
|
|
3728
|
+
minWidth: { type: Number },
|
|
3729
|
+
maxWidth: { type: Number },
|
|
3730
|
+
virtual: { type: Boolean, default: false },
|
|
3731
|
+
sortFn: { type: Function, default: DEFAULT_SORT_FN },
|
|
3732
|
+
defSort: { type: Object, default: null },
|
|
3733
|
+
filterFn: {
|
|
3734
|
+
type: Function,
|
|
3735
|
+
default: (data) => {
|
|
3736
|
+
return data;
|
|
3737
|
+
}
|
|
3738
|
+
},
|
|
3739
|
+
rowKey: {
|
|
3740
|
+
type: String,
|
|
3741
|
+
default: "id"
|
|
3742
|
+
},
|
|
3743
|
+
columnCode: { type: String, default: "" },
|
|
3744
|
+
columns: { type: [Array], default: () => [] },
|
|
3745
|
+
slotsTemplate: { type: Object, default: () => ({}) },
|
|
3746
|
+
showIndexColumn: { type: Boolean, default: false },
|
|
3747
|
+
showCheckboxColumn: { type: Boolean, default: true },
|
|
3748
|
+
expandMethodIcon: { type: Boolean, default: false },
|
|
3749
|
+
ellipsis: { type: Boolean, default: true },
|
|
3750
|
+
dataSource: { type: Array, default: null },
|
|
3751
|
+
bordered: { type: Boolean, default: true },
|
|
3752
|
+
canResize: { type: Boolean, default: true },
|
|
3753
|
+
pagination: {
|
|
3754
|
+
type: [Object, Boolean],
|
|
3755
|
+
default: null
|
|
3756
|
+
},
|
|
3757
|
+
loading: { type: Boolean, default: false },
|
|
3758
|
+
rowClassName: { type: Function },
|
|
3759
|
+
scroll: {
|
|
3760
|
+
type: Object,
|
|
3761
|
+
default: {}
|
|
3762
|
+
},
|
|
3763
|
+
onTableChange: {
|
|
3764
|
+
type: Function,
|
|
3765
|
+
default: () => ({})
|
|
3766
|
+
},
|
|
3767
|
+
onDownload: {
|
|
3768
|
+
type: Function,
|
|
3769
|
+
default: (excelData) => ({})
|
|
3770
|
+
},
|
|
3771
|
+
rowSelection: {
|
|
3772
|
+
type: Object,
|
|
3773
|
+
default: {
|
|
3774
|
+
type: "checkbox",
|
|
3775
|
+
fixed: true
|
|
3776
|
+
}
|
|
3777
|
+
},
|
|
3778
|
+
customRow: {
|
|
3779
|
+
type: Function,
|
|
3780
|
+
default: () => ({})
|
|
3781
|
+
},
|
|
3782
|
+
childrenColumnName: {
|
|
3783
|
+
type: String,
|
|
3784
|
+
default: "children"
|
|
3785
|
+
},
|
|
3786
|
+
indexColumnProps: {
|
|
3787
|
+
type: [Array],
|
|
3788
|
+
default: () => []
|
|
3789
|
+
},
|
|
3790
|
+
isTreeTable: {
|
|
3791
|
+
type: Boolean,
|
|
3792
|
+
default: false
|
|
3793
|
+
},
|
|
3794
|
+
operations: {
|
|
3795
|
+
type: Object
|
|
3796
|
+
},
|
|
3797
|
+
toolbar: {
|
|
3798
|
+
type: Array
|
|
3799
|
+
},
|
|
3800
|
+
registerInstance: {
|
|
3801
|
+
type: Function
|
|
3802
|
+
},
|
|
3803
|
+
onAdd: {
|
|
3804
|
+
type: Function,
|
|
3805
|
+
default: (params) => ({})
|
|
3806
|
+
},
|
|
3807
|
+
onUpdate: {
|
|
3808
|
+
type: Function,
|
|
3809
|
+
default: (params) => ({})
|
|
3810
|
+
},
|
|
3811
|
+
onDelete: {
|
|
3812
|
+
type: Function,
|
|
3813
|
+
default: (params) => ({})
|
|
3814
|
+
},
|
|
3815
|
+
onDeletes: {
|
|
3816
|
+
type: Function,
|
|
3817
|
+
default: (params) => ({})
|
|
3818
|
+
}
|
|
3819
|
+
};
|
|
3820
|
+
const _hoisted_1 = /* @__PURE__ */ createElementVNode("img", { src: _imports_0 }, null, -1);
|
|
3821
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
3822
|
+
__name: "index",
|
|
3823
|
+
props: TableProps,
|
|
3824
|
+
emits: [
|
|
3825
|
+
"register",
|
|
3826
|
+
"selection-change",
|
|
3827
|
+
"columns-change",
|
|
3828
|
+
"row-click",
|
|
3829
|
+
"row-dbClick",
|
|
3830
|
+
"row-contextmenu",
|
|
3831
|
+
"row-mouseenter",
|
|
3832
|
+
"row-mouseleave",
|
|
3833
|
+
"edit-change"
|
|
3834
|
+
],
|
|
3835
|
+
setup(__props, { emit: emits }) {
|
|
3836
|
+
const props2 = __props;
|
|
3837
|
+
const tableElRef = ref$1(null);
|
|
3838
|
+
const attrs = useAttrs();
|
|
3839
|
+
const slots = useSlots$2();
|
|
3840
|
+
const innerPropsRef = ref$1();
|
|
3841
|
+
const getProps = computed$1(() => {
|
|
3842
|
+
return { ...props2, ...unref(innerPropsRef) };
|
|
3843
|
+
});
|
|
3844
|
+
const { getRowClassName } = useRows(getProps);
|
|
3845
|
+
const tableCls = computed$1(() => {
|
|
3846
|
+
return [
|
|
3847
|
+
"dt-table",
|
|
3848
|
+
"box-border",
|
|
3849
|
+
{ "dt-table-no-pagation": !unref(getProps).pagination }
|
|
3850
|
+
];
|
|
3851
|
+
});
|
|
3852
|
+
const { getLoading, setLoading } = useLoading(getProps);
|
|
3853
|
+
const { getPaginationInfo, setPagination, getPagination } = usePagination(getProps);
|
|
3854
|
+
const {
|
|
3855
|
+
getViewColumns,
|
|
3856
|
+
getColumnsRef,
|
|
3857
|
+
getColumns,
|
|
3858
|
+
setColumns,
|
|
3859
|
+
setColumnsByDataIndex,
|
|
3860
|
+
getCacheColumns
|
|
3861
|
+
} = useColumns(getProps, getPaginationInfo, tableElRef);
|
|
3862
|
+
const {
|
|
3863
|
+
getRowSelectionRef,
|
|
3864
|
+
clearSelectedRowKeys,
|
|
3865
|
+
getRowSelection,
|
|
3866
|
+
getSelectRows,
|
|
3867
|
+
getSelectedRowKeys,
|
|
3868
|
+
setSelectedRowKeys
|
|
3869
|
+
} = useRowSelection(getProps, emits);
|
|
3870
|
+
const { getScrollRef, filterSource } = useTableScroll(getProps, tableElRef, getColumnsRef, getRowSelectionRef);
|
|
3871
|
+
const handlers = {
|
|
3872
|
+
onColumnsChange: (data) => {
|
|
3873
|
+
emits("columns-change", data);
|
|
3874
|
+
unref(getProps).onColumnsChange?.(data);
|
|
3875
|
+
}
|
|
3876
|
+
};
|
|
3877
|
+
const { getHeaderProps } = useTableHeader(getProps, slots, handlers);
|
|
3878
|
+
const { customRow } = useCustomRow(getProps, { setSelectedRowKeys, getSelectedRowKeys, clearSelectedRowKeys, emits });
|
|
3879
|
+
const { handleTableChange, findTableDataRecord, updateTableDataRecord } = useDataSource(
|
|
3880
|
+
getProps,
|
|
3881
|
+
{
|
|
3882
|
+
getPaginationInfo,
|
|
3883
|
+
setPagination,
|
|
3884
|
+
clearSelectedRowKeys
|
|
3885
|
+
}
|
|
3886
|
+
);
|
|
3887
|
+
const getBind = computed$1(() => {
|
|
3888
|
+
return {
|
|
3889
|
+
...attrs,
|
|
3890
|
+
...unref(getProps),
|
|
3891
|
+
...unref(getHeaderProps),
|
|
3892
|
+
scroll: unref(getScrollRef),
|
|
3893
|
+
loading: unref(getLoading),
|
|
3894
|
+
dataSource: toRaw(unref(filterSource)),
|
|
3895
|
+
pagination: toRaw(unref(getPaginationInfo)),
|
|
3896
|
+
rowSelection: unref(getRowSelectionRef),
|
|
3897
|
+
rowKey: unref(getProps).rowKey,
|
|
3898
|
+
columns: unref(getViewColumns),
|
|
3899
|
+
tableLayout: "fixed",
|
|
3900
|
+
class: unref(tableCls),
|
|
3901
|
+
customRow,
|
|
3902
|
+
onChange: handleTableChange,
|
|
3903
|
+
onResizeColumn: (w, col) => {
|
|
3904
|
+
col.width = w;
|
|
3905
|
+
setColumnsByDataIndex(col.dataIndex, col);
|
|
3906
|
+
}
|
|
3907
|
+
};
|
|
3908
|
+
});
|
|
3909
|
+
function setProps(props22) {
|
|
3910
|
+
let allProps = {
|
|
3911
|
+
...unref(innerPropsRef),
|
|
3912
|
+
...props22
|
|
3913
|
+
};
|
|
3914
|
+
if (isObject(props22.tableSetting)) {
|
|
3915
|
+
let historyTableSetting = unref(innerPropsRef)?.tableSetting;
|
|
3916
|
+
allProps.tableSetting = {
|
|
3917
|
+
...isBoolean(historyTableSetting) ? {} : historyTableSetting,
|
|
3918
|
+
...props22.tableSetting
|
|
3919
|
+
};
|
|
3920
|
+
}
|
|
3921
|
+
innerPropsRef.value = allProps;
|
|
3922
|
+
}
|
|
3923
|
+
const tableAction = {
|
|
3924
|
+
setProps,
|
|
3925
|
+
setLoading,
|
|
3926
|
+
clearSelectedRowKeys,
|
|
3927
|
+
getSelectRows,
|
|
3928
|
+
getSelectedRowKeys,
|
|
3929
|
+
setSelectedRowKeys,
|
|
3930
|
+
getRowSelection,
|
|
3931
|
+
getColumns,
|
|
3932
|
+
setColumns,
|
|
3933
|
+
setColumnsByDataIndex,
|
|
3934
|
+
getCacheColumns,
|
|
3935
|
+
findTableDataRecord,
|
|
3936
|
+
updateTableDataRecord,
|
|
3937
|
+
getPagination,
|
|
3938
|
+
emits
|
|
3939
|
+
};
|
|
3940
|
+
createTableInstance({ ...tableAction, tableElRef, getBind, getProps });
|
|
3941
|
+
emits("register", tableAction);
|
|
3942
|
+
if (unref(innerPropsRef)?.registerInstance) {
|
|
3943
|
+
unref(innerPropsRef)?.registerInstance(tableAction);
|
|
3944
|
+
}
|
|
3945
|
+
return (_ctx, _cache) => {
|
|
3946
|
+
const _component_ATable = Table;
|
|
3947
|
+
return openBlock(), createBlock(_component_ATable, mergeProps({
|
|
3948
|
+
ref_key: "tableElRef",
|
|
3949
|
+
ref: tableElRef
|
|
3950
|
+
}, unref(getBind), {
|
|
3951
|
+
rowClassName: unref(getRowClassName),
|
|
3952
|
+
onChange: unref(handleTableChange)
|
|
3953
|
+
}), createSlots({
|
|
3954
|
+
bodyCell: withCtx(({ column, record, index }) => [
|
|
3955
|
+
_ctx.$slots.bodyCell ? renderSlot(_ctx.$slots, "bodyCell", normalizeProps(mergeProps({ key: 0 }, { column, record, index }))) : createCommentVNode("", true),
|
|
3956
|
+
column?.render && !_ctx.$slots.bodyCell ? (openBlock(), createBlock(_sfc_main$1, {
|
|
3957
|
+
key: 1,
|
|
3958
|
+
column,
|
|
3959
|
+
record,
|
|
3960
|
+
index
|
|
3961
|
+
}, null, 8, ["column", "record", "index"])) : createCommentVNode("", true)
|
|
3962
|
+
]),
|
|
3963
|
+
emptyText: withCtx(() => [
|
|
3964
|
+
_hoisted_1
|
|
3965
|
+
]),
|
|
3966
|
+
_: 2
|
|
3967
|
+
}, [
|
|
3968
|
+
renderList(Object.keys(_ctx.$slots), (item) => {
|
|
3969
|
+
return {
|
|
3970
|
+
name: item,
|
|
3971
|
+
fn: withCtx((data) => [
|
|
3972
|
+
renderSlot(_ctx.$slots, item, normalizeProps(guardReactiveProps(data || {})))
|
|
3973
|
+
])
|
|
3974
|
+
};
|
|
3975
|
+
})
|
|
3976
|
+
]), 1040, ["rowClassName", "onChange"]);
|
|
3977
|
+
};
|
|
3978
|
+
}
|
|
3979
|
+
});
|
|
3980
|
+
export {
|
|
3981
|
+
_sfc_main as DtTable,
|
|
3982
|
+
useTable
|
|
3983
|
+
};
|