@dt-frames/ui 1.0.1 → 1.0.4

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.
Files changed (207) hide show
  1. package/README.md +1 -15
  2. package/es/assets/style/reset.less +0 -3
  3. package/es/components/iframe/index.d.ts +2 -2
  4. package/es/components/index.d.ts +2 -2
  5. package/es/index.css +1 -1
  6. package/es/index.js +34 -392
  7. package/es/style/assets/style/reset.less +0 -3
  8. package/es/style/components/forms/index.less +84 -0
  9. package/es/style/components/iframe/index.less +3 -0
  10. package/es/style/components/modal/index.less +63 -0
  11. package/es/style/components/table/index.less +162 -0
  12. package/es/style/theme/sider/index.less +25 -25
  13. package/es/style/theme/theme.less +2 -1
  14. package/es/theme/header/components/notify.d.ts +0 -1
  15. package/es/theme/header/components/user-info.d.ts +1 -1
  16. package/package.json +47 -40
  17. package/src/assets/data/icons/actions.ts +427 -0
  18. package/src/assets/data/icons/code.ts +10 -0
  19. package/src/assets/data/icons/commuticate.ts +190 -0
  20. package/src/assets/data/icons/currency.ts +46 -0
  21. package/src/assets/data/icons/devices.ts +128 -0
  22. package/src/assets/data/icons/edit.ts +165 -0
  23. package/src/assets/data/icons/file.ts +104 -0
  24. package/src/assets/data/icons/math.ts +53 -0
  25. package/src/assets/data/icons/message.ts +75 -0
  26. package/src/assets/data/icons/navigate.ts +181 -0
  27. package/src/assets/data/icons/other.ts +333 -0
  28. package/src/assets/data/icons.ts +58 -0
  29. package/src/assets/imgs/logo/logo.png +0 -0
  30. package/src/assets/locales/en_US.json +3 -0
  31. package/src/assets/locales/zh_CN.json +3 -0
  32. package/src/assets/style/index.less +10 -0
  33. package/src/assets/style/reset.less +17 -0
  34. package/src/components/container/index.less +85 -0
  35. package/src/components/container/index.ts +8 -0
  36. package/src/components/container/src/bar.ts +107 -0
  37. package/src/components/container/src/lazy-container.vue +9 -0
  38. package/src/components/container/src/scroll-bar.vue +117 -0
  39. package/src/components/container/src/scroll-container.vue +61 -0
  40. package/src/components/curd/index.ts +5 -0
  41. package/src/components/curd/src/components/dialog.vue +65 -0
  42. package/src/components/curd/src/components/props.ts +32 -0
  43. package/src/components/curd/src/hooks/useCurd.tsx +72 -0
  44. package/src/components/curd/src/types/curd.type.ts +29 -0
  45. package/src/components/excel/index.ts +6 -0
  46. package/src/components/excel/src/export2Excel.ts +44 -0
  47. package/src/components/forms/index.less +84 -0
  48. package/src/components/forms/index.ts +12 -0
  49. package/src/components/forms/src/componentMap.ts +44 -0
  50. package/src/components/forms/src/components/formButton.vue +150 -0
  51. package/src/components/forms/src/components/formIcon.vue +50 -0
  52. package/src/components/forms/src/components/formItem.vue +407 -0
  53. package/src/components/forms/src/components/radioButton.vue +58 -0
  54. package/src/components/forms/src/const/form.const.ts +7 -0
  55. package/src/components/forms/src/hooks/helper.ts +70 -0
  56. package/src/components/forms/src/hooks/useForm.ts +130 -0
  57. package/src/components/forms/src/hooks/useFormActions.ts +63 -0
  58. package/src/components/forms/src/hooks/useFormEvents.ts +247 -0
  59. package/src/components/forms/src/hooks/useFormValue.ts +49 -0
  60. package/src/components/forms/src/hooks/useFormValues.ts +131 -0
  61. package/src/components/forms/src/hooks/useLabelWidth.ts +57 -0
  62. package/src/components/forms/src/index.vue +306 -0
  63. package/src/components/forms/src/prop.ts +80 -0
  64. package/src/components/forms/src/types/form.type.ts +269 -0
  65. package/src/components/icons/index.less +96 -0
  66. package/src/components/icons/index.ts +7 -0
  67. package/src/components/icons/src/pick-icon.vue +117 -0
  68. package/src/components/icons/src/svg-icon.vue +117 -0
  69. package/src/components/iframe/index.less +3 -0
  70. package/src/components/iframe/index.ts +5 -0
  71. package/src/components/iframe/src/index.vue +38 -0
  72. package/src/components/index.ts +46 -0
  73. package/src/components/modal/index.less +63 -0
  74. package/src/components/modal/index.ts +8 -0
  75. package/src/components/modal/src/components/close-icon.vue +47 -0
  76. package/src/components/modal/src/components/modal-wrap.vue +118 -0
  77. package/src/components/modal/src/components/modal.tsx +30 -0
  78. package/src/components/modal/src/components/modalFooter.vue +38 -0
  79. package/src/components/modal/src/hooks/useDrag.ts +107 -0
  80. package/src/components/modal/src/hooks/useFullScreen.ts +27 -0
  81. package/src/components/modal/src/hooks/useModal.ts +177 -0
  82. package/src/components/modal/src/index.vue +173 -0
  83. package/src/components/modal/src/props.ts +43 -0
  84. package/src/components/modal/src/types/modal.type.ts +27 -0
  85. package/src/components/router/base-router.vue +11 -0
  86. package/src/components/router/index.ts +3 -0
  87. package/src/components/source/index.ts +1 -0
  88. package/src/components/source/src/hooks/useFetch.ts +70 -0
  89. package/src/components/source/src/hooks/usePage.ts +3 -0
  90. package/src/components/source/src/hooks/useSource.ts +178 -0
  91. package/src/components/source/src/index.ts +5 -0
  92. package/src/components/source/src/types/source.type.ts +68 -0
  93. package/src/components/source/src/types/table.type.ts +8 -0
  94. package/src/components/table/index.less +162 -0
  95. package/src/components/table/index.ts +7 -0
  96. package/src/components/table/src/components/TableActions.vue +108 -0
  97. package/src/components/table/src/components/TableHeader.vue +77 -0
  98. package/src/components/table/src/components/TableRender.vue +76 -0
  99. package/src/components/table/src/components/setting/Column.vue +355 -0
  100. package/src/components/table/src/components/setting/Download.vue +55 -0
  101. package/src/components/table/src/components/setting/Fullscreen.vue +43 -0
  102. package/src/components/table/src/components/setting/Size.vue +42 -0
  103. package/src/components/table/src/components/setting/index.vue +64 -0
  104. package/src/components/table/src/const.ts +13 -0
  105. package/src/components/table/src/hooks/useColumns.ts +319 -0
  106. package/{es/assets/app-antd-dark-theme-style.e3b0c442.css → src/components/table/src/hooks/useCustomRow.ts} +0 -0
  107. package/src/components/table/src/hooks/useDataSource.ts +99 -0
  108. package/src/components/table/src/hooks/useLoading.ts +29 -0
  109. package/src/components/table/src/hooks/usePagination.ts +76 -0
  110. package/src/components/table/src/hooks/useRowSelection.ts +146 -0
  111. package/src/components/table/src/hooks/useRows.ts +30 -0
  112. package/src/components/table/src/hooks/useTable.ts +77 -0
  113. package/src/components/table/src/hooks/useTableHeader.ts +48 -0
  114. package/src/components/table/src/hooks/useTableInstance.ts +29 -0
  115. package/src/components/table/src/hooks/useTableScroll.ts +227 -0
  116. package/src/components/table/src/index.vue +198 -0
  117. package/src/components/table/src/props.ts +152 -0
  118. package/src/components/table/src/types/table.type.ts +133 -0
  119. package/src/components/table/src/types/tableHeader.type.ts +27 -0
  120. package/{es/assets/app-theme-style.e3b0c442.css → src/components/type.ts} +0 -0
  121. package/src/directives/icon.ts +36 -0
  122. package/src/directives/index.ts +26 -0
  123. package/src/directives/permission.ts +20 -0
  124. package/src/global.d.ts +8 -0
  125. package/src/index.ts +4 -0
  126. package/src/theme/content/index.vue +37 -0
  127. package/src/theme/feature/back-top.vue +11 -0
  128. package/src/theme/feature/index.vue +7 -0
  129. package/src/theme/footer/index.less +16 -0
  130. package/src/theme/footer/index.vue +24 -0
  131. package/src/theme/header/components/bread-crumb.vue +26 -0
  132. package/src/theme/header/components/fullscreen.vue +12 -0
  133. package/src/theme/header/components/handler.ts +81 -0
  134. package/src/theme/header/components/index.ts +21 -0
  135. package/src/theme/header/components/lang-picker.vue +36 -0
  136. package/src/theme/header/components/logo.vue +33 -0
  137. package/src/theme/header/components/menu-search.vue +62 -0
  138. package/src/theme/header/components/notify.vue +22 -0
  139. package/src/theme/header/components/setting-theme.vue +123 -0
  140. package/src/theme/header/components/theme-drawer/enum.ts +12 -0
  141. package/src/theme/header/components/theme-drawer/feature.vue +75 -0
  142. package/src/theme/header/components/theme-drawer/index.ts +7 -0
  143. package/src/theme/header/components/theme-drawer/menu-type.vue +40 -0
  144. package/src/theme/header/components/theme-drawer/select-item.vue +46 -0
  145. package/src/theme/header/components/theme-drawer/switch-item.vue +39 -0
  146. package/src/theme/header/components/theme-drawer/theme-color.vue +26 -0
  147. package/src/theme/header/components/trigger.vue +14 -0
  148. package/src/theme/header/components/user-info.vue +43 -0
  149. package/src/theme/header/const/index.ts +40 -0
  150. package/src/theme/header/helper/menu-tree.ts +64 -0
  151. package/src/theme/header/index.less +438 -0
  152. package/src/theme/header/index.ts +0 -0
  153. package/src/theme/header/index.vue +96 -0
  154. package/src/theme/header/multiple-header.vue +67 -0
  155. package/src/theme/header/set-theme.less +68 -0
  156. package/src/theme/index.ts +3 -0
  157. package/src/theme/sider/components/basic-menu/basic-menu-item.vue +14 -0
  158. package/src/theme/sider/components/basic-menu/basic-menu.vue +122 -0
  159. package/src/theme/sider/components/basic-menu/basic-sub-menu-item.vue +46 -0
  160. package/src/theme/sider/components/basic-menu/menu-item-content.vue +13 -0
  161. package/src/theme/sider/components/drag-bar.vue +26 -0
  162. package/src/theme/sider/components/layout-menu.vue +132 -0
  163. package/src/theme/sider/components/props.ts +97 -0
  164. package/src/theme/sider/components/sider-trigger.vue +24 -0
  165. package/src/theme/sider/helper/sider.ts +52 -0
  166. package/src/theme/sider/helper/split-menu.ts +146 -0
  167. package/src/theme/sider/hooks/useDragLine.ts +86 -0
  168. package/src/theme/sider/hooks/useOpenKeys.ts +57 -0
  169. package/src/theme/sider/index.less +203 -0
  170. package/src/theme/sider/index.vue +88 -0
  171. package/src/theme/tabs/components/TabContent.vue +36 -0
  172. package/src/theme/tabs/components/TabRedo.vue +18 -0
  173. package/src/theme/tabs/hooks/useMultifyTabs.ts +96 -0
  174. package/src/theme/tabs/hooks/useTabDropdown.ts +89 -0
  175. package/src/theme/tabs/index.less +165 -0
  176. package/src/theme/tabs/index.vue +98 -0
  177. package/src/theme/tabs/types/tabs.type.ts +8 -0
  178. package/src/theme/theme.less +67 -0
  179. package/src/theme/theme.vue +90 -0
  180. package/src/theme/transition.less +99 -0
  181. package/es/assets/data/icon.d.ts +0 -4
  182. package/es/assets/data/icon.ts +0 -69
  183. package/es/assets/data/icon11.ts +0 -69
  184. package/es/assets/style/var.less +0 -42
  185. package/es/components/icons/pick-icon.d.ts +0 -529
  186. package/es/components/icons/svg-icon.d.ts +0 -44
  187. package/es/components/table/src/hooks/useFormat.d.ts +0 -2
  188. package/es/components/table/src/hooks/useVirtualScroll.d.ts +0 -5
  189. package/es/components/table/src/utils/format.d.ts +0 -1
  190. package/es/style/assets/style/var.less +0 -42
  191. package/es/theme/content/index.d.ts +0 -29
  192. package/es/theme/header/components/menu-search.d.ts +0 -528
  193. package/es/theme/header/components/setting-theme.d.ts +0 -2550
  194. package/es/theme/header/index.d.ts +0 -4369
  195. package/es/theme/header/multiple-header.d.ts +0 -2001
  196. package/es/theme/styles/hooks/changeTheme.d.ts +0 -1
  197. package/es/theme/styles/hooks/generate.d.ts +0 -13
  198. package/es/theme/styles/index.d.ts +0 -2
  199. package/es/theme/tabs/components/TabRedo.d.ts +0 -49
  200. package/es/theme/tabs/index.d.ts +0 -1399
  201. package/es/theme/theme/initTheme.d.ts +0 -3
  202. package/es/theme/theme/util.d.ts +0 -5
  203. package/es/theme/theme.d.ts +0 -4911
  204. package/es/themes/generate.ts +0 -74
  205. package/es/themes/index.ts +0 -10
  206. package/es/themes/modifyVars.ts +0 -33
  207. package/es/themes/themePlugiin.ts +0 -74
@@ -0,0 +1,173 @@
1
+ <template>
2
+ <Modal v-bind="getBindValue" @cancel="handleCancel">
3
+ <template #closeIcon v-if="!$slots.closeIcon">
4
+ <CloseIcon
5
+ :canFullscreen="getBindValue.canFullscreen"
6
+ :fullScreen="fullScreenRef"
7
+ @cancel="handleCancel"
8
+ @fullscreen="toggleFullScreen"
9
+ />
10
+ </template>
11
+
12
+ <template #title v-if="!$slots.title">
13
+ {{ getMergeProps.title }}
14
+ </template>
15
+
16
+ <template #footer v-if="!$slots.footer">
17
+ <!-- 默认的footer内容 -->
18
+ <ModalFooter :showSave="getBindValue.showSave" @handle-save="handleSave" @handle-cancel="handleCancel">
19
+ <template #[item]="data" v-for="item in Object.keys($slots)">
20
+ <slot :name="item" v-bind="data || {}"></slot>
21
+ </template>
22
+ </ModalFooter>
23
+ </template>
24
+
25
+ <ModalWrapper
26
+ :useWrapper="getBindValue.useWrapper"
27
+ :footerOffset="wrapperFooterOffset"
28
+ :fullScreen="fullScreenRef"
29
+ ref="modalWrapperRef"
30
+ :loading="getBindValue.loading"
31
+ :loading-tip="getBindValue.loadingTip"
32
+ :minHeight="getBindValue.minHeight"
33
+ :height="getWrapperHeight"
34
+ :visible="visibleRef"
35
+ :modalFooterHeight="footer !== undefined && !footer ? 0 : undefined"
36
+ v-bind="omit(getBindValue.wrapperProps, 'visible', 'height', 'modalFooterHeight')"
37
+ @ext-height="handleExtHeight"
38
+ @height-change="handleHeightChange"
39
+ >
40
+ <slot></slot>
41
+ </ModalWrapper>
42
+
43
+ <template #[item]="data" v-for="item in Object.keys(omit($slots, 'default'))">
44
+ <slot :name="item" v-bind="data || {}"></slot>
45
+ </template>
46
+ </Modal>
47
+ </template>
48
+
49
+ <script lang="ts" setup>
50
+ import { computed, unref, ref, watch, getCurrentInstance, nextTick } from 'vue';
51
+ import Modal from './components/modal';
52
+ import { omit } from 'lodash-es';
53
+ import { useFullScreen } from './hooks/useFullScreen';
54
+ import { basicProps } from './props';
55
+ import ModalWrapper from './components/modal-wrap.vue';
56
+ import ModalFooter from './components/modalFooter.vue'
57
+
58
+ import CloseIcon from './components/close-icon.vue';
59
+ import { isFunction, deepMerge, ModalProps, ModalMethods } from '@dt-frames/core';
60
+
61
+ const visibleRef = ref(false);
62
+ const propsRef = ref<Partial<ModalProps>>();
63
+ const modalWrapperRef = ref(null);
64
+ const extHeightRef = ref(0);
65
+
66
+ const props = defineProps( basicProps );
67
+ const emits = defineEmits(['visible-change', 'height-change', 'cancel', 'save', 'register', 'update:visible'])
68
+
69
+
70
+ const modalMethods: ModalMethods = {
71
+ setModalProps,
72
+ emitVisible: undefined,
73
+ redoModalHeight: () => {
74
+ nextTick(() => {
75
+ if (unref(modalWrapperRef)) {
76
+ (unref(modalWrapperRef) as any).setModalHeight();
77
+ }
78
+ });
79
+ },
80
+ }
81
+
82
+ const { getWrapClassName, toggleFullScreen, fullScreenRef } = useFullScreen({
83
+ wrapClassName: computed(() => props.wrapClassName),
84
+ extHeightRef,
85
+ modalWrapperRef
86
+ });
87
+
88
+ const getMergeProps = computed(() => {
89
+ return {
90
+ ...props,
91
+ ...(unref(propsRef) as any)
92
+ }
93
+ })
94
+
95
+ const getBindValue = computed(() => {
96
+ const bindValue = {
97
+ ...unref(getMergeProps),
98
+ ...(unref(propsRef) as any),
99
+ visible: unref(visibleRef),
100
+ wrapClassName: unref(getWrapClassName),
101
+ }
102
+
103
+ return omit(bindValue, unref(fullScreenRef) ? ['height', 'title'] : 'title');
104
+ });
105
+
106
+ const getWrapperHeight = computed(() => {
107
+ if (unref(fullScreenRef)) return undefined;
108
+ return unref(getBindValue).height;
109
+ });
110
+
111
+ const instance = getCurrentInstance();
112
+ if (instance) { emits('register', modalMethods, instance.uid); }
113
+
114
+ watch(() => unref(visibleRef), (v) => {
115
+ emits('visible-change', v);
116
+ emits('update:visible', v);
117
+ instance && modalMethods.emitVisible?.(v, instance.uid);
118
+ nextTick(() => {
119
+ if (props.scrollTop && v && unref(modalWrapperRef)) {
120
+ (unref(modalWrapperRef).$el as any).scrollTop = 0;
121
+ }
122
+ });
123
+ },{
124
+ immediate: false,
125
+ })
126
+
127
+ function handleHeightChange(height: string) {
128
+ emits('height-change', height);
129
+ }
130
+
131
+ function handleExtHeight(height: number) {
132
+ extHeightRef.value = height;
133
+ }
134
+
135
+
136
+ function setModalProps(props: Partial<ModalProps>) {
137
+
138
+ propsRef.value = deepMerge(unref(propsRef) || ({} as any), props);
139
+
140
+ if (Reflect.has(props, 'visible')) {
141
+ visibleRef.value = !!props.visible;
142
+ }
143
+ if (Reflect.has(props, 'defaultFullscreen')) {
144
+ fullScreenRef.value = !!props.defaultFullscreen;
145
+ }
146
+ }
147
+
148
+ // 弹框保存
149
+ function handleSave() {
150
+ emits('save')
151
+ handleCancel()
152
+ }
153
+
154
+ // 弹框关闭
155
+ async function handleCancel(e: Event = null) {
156
+ if( e ) {
157
+ e?.stopPropagation();
158
+
159
+ // 过滤自定义关闭按钮的空白区域
160
+ if ((e.target as HTMLElement)?.classList?.contains('dt-basic-modal-close--custom')) return;
161
+
162
+ if (props.closeFunc && isFunction(props.closeFunc)) {
163
+ const isClose: boolean = await props.closeFunc();
164
+ visibleRef.value = !isClose;
165
+ return;
166
+ }
167
+ }
168
+
169
+ visibleRef.value = false;
170
+
171
+ emits('cancel', e)
172
+ }
173
+ </script>
@@ -0,0 +1,43 @@
1
+ import { CSSProperties, PropType, VNodeChild } from "vue";
2
+
3
+ // 支持设置的属性
4
+ const modalProps = {
5
+ visible : { type: Boolean },
6
+ scrollTop : { type: Boolean, default: true },
7
+ height : { type: Number },
8
+ minHeight : { type: Number },
9
+ draggable : { type: Boolean, default: true },
10
+ closeFunc : Function
11
+ };
12
+
13
+ export const basicProps = Object.assign({}, modalProps, {
14
+ defaultFullscreen : { type: Boolean },
15
+ canFullscreen : { type: Boolean, default: true },
16
+ wrapperFooterOffset : { type: Number, default: 0 },
17
+ useWrapper : { type: Boolean, default: true },
18
+ loading : { type: Boolean },
19
+ loadingTip : { type: String },
20
+ closable : { type: Boolean, default: true },
21
+ destroyOnClose : { type: Boolean },
22
+ title : { type: String },
23
+ visible : { type: Boolean },
24
+ width : { type: String as PropType<Number | String> },
25
+ wrapClassName : { type: String },
26
+ zIndex : { type: Number },
27
+ centered : { type: Boolean },
28
+ showSave : { type: Boolean },
29
+
30
+ // 掩膜
31
+ mask : { type: Boolean, default: true },
32
+ maskClosable : { type: Boolean, default: true },
33
+ keyboard : { type: Boolean, default: true },
34
+ maskStyle : Object as PropType<CSSProperties>,
35
+
36
+ footer : Object as PropType<VNodeChild | JSX.Element>,
37
+
38
+ bodyStyle : Object as PropType<CSSProperties>,
39
+
40
+ wrapperProps : Object,
41
+ afterClose : Function,
42
+ getContainer : Function as PropType<() => any>
43
+ })
@@ -0,0 +1,27 @@
1
+ import { ModalProps } from "@dt-frames/core"
2
+ import { ComputedRef } from "vue"
3
+
4
+ export type ModalMethods = {
5
+ setModalProps: ( props: Partial<ModalProps> ) => void
6
+ emitVisible?: ( visable: boolean, uid: number ) => void
7
+ redoModalHeight?: () => void
8
+ }
9
+
10
+ export interface ReturnMethods extends ModalMethods{
11
+ openModal: <T = any>(props?: boolean, data?: T, openOnSet?: boolean) => void
12
+ closeModal: () => void
13
+ getVisible?: ComputedRef<boolean>
14
+ }
15
+
16
+ export interface ReturnInnerMethods extends ModalMethods {
17
+ openModal: <T = any>(props?: boolean, data?: T, openOnSet?: boolean) => void
18
+ closeModal: () => void
19
+ changeLoading: (loading: boolean) => void
20
+ getVisible?: ComputedRef<boolean>
21
+ redoModalHeight: () => void
22
+ }
23
+
24
+ export type RegisterFn = (modalMethods: ModalMethods, uuid?: string) => void
25
+
26
+ export type UseModalReturnType = [RegisterFn, ReturnMethods]
27
+ export type UseModalInnerReturnType = [RegisterFn, ReturnInnerMethods];
@@ -0,0 +1,11 @@
1
+ <template>
2
+ <router-view></router-view>
3
+ </template>
4
+
5
+ <script lang="ts">
6
+ import { defineComponent } from 'vue'
7
+
8
+ export default defineComponent({
9
+ name: 'dt-base-router'
10
+ })
11
+ </script>
@@ -0,0 +1,3 @@
1
+ import DtBaseRouter from './base-router.vue'
2
+
3
+ export { DtBaseRouter }
@@ -0,0 +1 @@
1
+ export * from './src/index'
@@ -0,0 +1,70 @@
1
+ import { ApiType } from "../types/source.type";
2
+ import { message } from 'ant-design-vue'
3
+ import { http, isBoolean, isFunction, isString, JsonResult, Recordable } from "@dt-frames/core";
4
+
5
+ export function useFetch(api: string | ApiType, baseUrl: string = '') {
6
+
7
+ const getApiObj= () => {
8
+ if( isString(api) ) {
9
+ return { api }
10
+ }
11
+
12
+ return { ...api }
13
+ }
14
+
15
+ /**
16
+ * 是否可以向服务器发送请求
17
+ * 如果beforeFetch返回的是false, 则停止请求
18
+ * */
19
+ const getParams = (params: Recordable = { }) => {
20
+ const { model, beforeFetch } = getApiObj()
21
+
22
+ if( !api ) {
23
+ message.error('请求的url不能为空')
24
+ return false
25
+ }
26
+
27
+ return beforeFetch && isFunction( beforeFetch )
28
+ ? beforeFetch( Object.assign({}, model, params) )
29
+ : params
30
+ }
31
+
32
+
33
+
34
+ /**
35
+ * 发送请求
36
+ * handleParams 记录返回的值
37
+ */
38
+ function fetch(params: Recordable = { }) {
39
+ const handleParams = getParams( params )
40
+
41
+ if( isBoolean( handleParams ) && handleParams === false)
42
+ return Promise.resolve()
43
+
44
+ const { api: _api, type = 'post', header = { }, afterFetch } = getApiObj()
45
+
46
+ return new Promise(( resolve, reject ) => {
47
+ http[type]( `${ baseUrl }${_api}`, handleParams, {
48
+ ...header,
49
+ ...{ onlyData: false }
50
+ }).then(
51
+ (data: JsonResult) => {
52
+ if( afterFetch && isFunction(afterFetch) ) {
53
+ data = afterFetch( data )
54
+ }
55
+ if( data.status ) {
56
+ resolve( data.data )
57
+ }
58
+ },
59
+ (error) => {
60
+ reject( error )
61
+ }
62
+ )
63
+ })
64
+ }
65
+
66
+ return {
67
+ fetch
68
+ }
69
+
70
+ }
@@ -0,0 +1,3 @@
1
+ export function usePage() {
2
+
3
+ }
@@ -0,0 +1,178 @@
1
+ import { computed, ref, reactive, toRaw, Ref } from 'vue'
2
+ import { http, isFunction, isString, JsonResult, Recordable } from "@dt-frames/core"
3
+ import { BaseDataType, SourceType } from "../types/source.type"
4
+ import { useFetch } from './useFetch'
5
+ import { TableParamsType } from '../types/table.type'
6
+ import { DownloadType } from '../../../table/src/types/tableHeader.type'
7
+ import { handleDownloadPage } from '../../../excel/index'
8
+ import { useAppStore } from '@dt-frames/core'
9
+
10
+ export function useSource(opt: SourceType) {
11
+ const loading: {
12
+ [key: string]: Ref<boolean>
13
+ } = {
14
+ onSearch: ref(false),
15
+ onReset: ref(false)
16
+ }
17
+ const { baseUrl = '', api = {}, exportName = '' } = opt
18
+ const { add, deletes, update, queryById, queryPage } = api
19
+
20
+ // 定义加载状态
21
+ for( let it in api ) {
22
+ loading['on' + it.slice(0,1).toUpperCase() + it.slice(1).toLowerCase()] = ref(false)
23
+ }
24
+
25
+ // 定义分页数据
26
+ const { appConf } = useAppStore()
27
+ const pagination = ref({
28
+ current: appConf?.ui?.table?.defaultPageNo || 1,
29
+ pageSize: appConf?.ui?.table?.defaultPageSize || 10,
30
+ total: 0
31
+ })
32
+
33
+ const dataSource = ref([])
34
+ const baseData = reactive<BaseDataType>({
35
+ entityDTO: {},
36
+ pageDTO: {
37
+ pageNo: 0,
38
+ pageSize: 10
39
+ },
40
+ orderDTOs: {}
41
+ })
42
+
43
+
44
+ /**
45
+ * 分页查询
46
+ */
47
+ function onSearch(model: Recordable) {
48
+ baseData.entityDTO = { ...model }
49
+ baseData.pageDTO.pageNo = 0
50
+ loading.onSearch.value = true
51
+
52
+ search()
53
+ }
54
+
55
+ // 重置
56
+ function onReset(model: Recordable) {
57
+ baseData.entityDTO = { ...model }
58
+ baseData.pageDTO.pageNo = 0
59
+ loading.onReset.value = true
60
+
61
+ search()
62
+ }
63
+
64
+
65
+ /**
66
+ * table 表单发生改变时, 进行分页查询
67
+ * 如果为首次 则为数据初始化 不需要查询
68
+ */
69
+ function onTableChange( params: TableParamsType, needSearch: boolean = true ) {
70
+ const { pagination, showBtnLoading, sort = [], filter } = params
71
+
72
+ baseData.pageDTO = {
73
+ pageNo: pagination.current - 1,
74
+ pageSize: pagination.pageSize
75
+ }
76
+
77
+ baseData.orderDTOs = sort
78
+
79
+ if( needSearch ) search()
80
+ }
81
+
82
+
83
+ // 查询
84
+ function search() {
85
+ const { fetch } = useFetch(queryPage, baseUrl)
86
+ loading.onQuerypage.value = true
87
+
88
+ fetch(
89
+ toRaw(baseData)
90
+ ).then( (rsp: any) => {
91
+ const { records, pageDTO } = rsp
92
+
93
+ dataSource.value = records
94
+
95
+ pagination.value = {
96
+ current: (pageDTO?.pageNo??0) + 1,
97
+ pageSize: (pageDTO?.pageSize??10),
98
+ total: pageDTO?.totalCount??0
99
+ }
100
+ } )
101
+ .finally(() => {
102
+ loading.onSearch.value = false
103
+ loading.onQuerypage.value = false
104
+ loading.onReset.value = false
105
+ })
106
+ }
107
+
108
+
109
+ // 新增
110
+ function onAdd(model: Recordable) {
111
+ const { fetch } = useFetch(add, baseUrl)
112
+
113
+ fetch(model).then( (rsp: any) => {
114
+ search()
115
+ } )
116
+ }
117
+
118
+
119
+ // 根据id查询
120
+ async function onQueryById(id: string) {
121
+ const { fetch } = useFetch(queryById, baseUrl)
122
+ return await fetch( { id } )
123
+ }
124
+
125
+
126
+ // 修改
127
+ function onUpdate(model: Recordable) {
128
+ const { fetch } = useFetch(update, baseUrl)
129
+ fetch(model).then( (rsp: any) => {
130
+ search()
131
+ } )
132
+ }
133
+
134
+
135
+ // 删除
136
+ function onDeletes(ids: any) {
137
+ const { fetch } = useFetch(deletes, baseUrl)
138
+
139
+ fetch(ids).then( (rsp: any) => {
140
+ search()
141
+ } )
142
+ }
143
+
144
+
145
+ // 导出
146
+ function onDownload( excelData: DownloadType ) {
147
+ handleDownloadPage(excelData, exportName)
148
+ }
149
+
150
+ const form = {
151
+ onSearch,
152
+ onReset,
153
+ loading
154
+ }
155
+
156
+ const table = {
157
+ dataSource,
158
+ pagination,
159
+ onTableChange,
160
+ onDownload,
161
+ loading: loading.onQuerypage
162
+ }
163
+
164
+ const curd = {
165
+ onAdd,
166
+ onQueryById,
167
+ onUpdate,
168
+ onDeletes
169
+ }
170
+
171
+ return {
172
+ api,
173
+ form,
174
+ table,
175
+ curd,
176
+ onSearch
177
+ }
178
+ }
@@ -0,0 +1,5 @@
1
+ import { useSource } from './hooks/useSource'
2
+
3
+ export {
4
+ useSource
5
+ }
@@ -0,0 +1,68 @@
1
+ import { Recordable } from "@dt-frames/core"
2
+
3
+ export type ApiType = {
4
+ // api接口
5
+ api: string
6
+
7
+ // 请求类型
8
+ type?: 'get' | 'post' | 'put' | 'delete',
9
+
10
+ // 请求头信息
11
+ header?: any
12
+
13
+ // 默认的基础数据
14
+ model?: Recordable
15
+
16
+ // 请求之前
17
+ beforeFetch?: ( params: Recordable ) => boolean
18
+
19
+ // 请求之后
20
+ afterFetch?: <T = any>( data: any) => T
21
+ }
22
+
23
+
24
+ export type ApiObjType = {
25
+ // 新增
26
+ add?: string | ApiType
27
+
28
+ // 修改
29
+ update?: string | ApiType
30
+
31
+ // 保存
32
+ save?: string | ApiType
33
+
34
+ // 删除
35
+ deletes?: string | ApiType
36
+
37
+ // 查找
38
+ queryById?: string | ApiType
39
+
40
+ // 分页查询
41
+ queryPage?: string | ApiType
42
+
43
+ // 其它接口
44
+ [key: string]: string | ApiType
45
+ }
46
+
47
+
48
+ export type SourceType = {
49
+ // 基础路径
50
+ baseUrl?: string
51
+
52
+ // 文件导出名称
53
+ exportName?: string
54
+
55
+ // api接口
56
+ api: ApiObjType
57
+ }
58
+
59
+ export type BaseDataType = {
60
+ entityDTO?: any
61
+
62
+ pageDTO?: {
63
+ pageNo: Number
64
+ pageSize: Number
65
+ } | null
66
+
67
+ orderDTOs: any
68
+ }
@@ -0,0 +1,8 @@
1
+ import { Recordable } from "@dt-frames/core";
2
+
3
+ export type TableParamsType = {
4
+ pagination: any,
5
+ showBtnLoading: boolean,
6
+ sort: Recordable,
7
+ filter: any
8
+ }