qy-better-lib 0.0.1

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 (185) hide show
  1. package/.vscode/extensions.json +3 -0
  2. package/LICENSE +24 -0
  3. package/README.md +2 -0
  4. package/index.html +13 -0
  5. package/package.json +37 -0
  6. package/packages/core/DOCUMENTATION.md +2681 -0
  7. package/packages/core/LICENSE +24 -0
  8. package/packages/core/package.json +67 -0
  9. package/packages/core/types/index.d.ts +39 -0
  10. package/packages/core/types/json.d.ts +4 -0
  11. package/packages/core/types/vue.shim.d.ts +5 -0
  12. package/packages/core/vitest.config.ts +15 -0
  13. package/packages/core/yarn.lock +1233 -0
  14. package/packages/hooks/DOCUMENTATION.md +634 -0
  15. package/packages/hooks/LICENSE +24 -0
  16. package/packages/hooks/__tests__/use-chart/index.test.ts +287 -0
  17. package/packages/hooks/__tests__/use-emit/index.test.ts +248 -0
  18. package/packages/hooks/__tests__/use-fullscreen/index.test.ts +162 -0
  19. package/packages/hooks/__tests__/use-image/index.test.ts +230 -0
  20. package/packages/hooks/__tests__/use-layout-flow/index.test.ts +382 -0
  21. package/packages/hooks/__tests__/use-mqtt/index.test.ts +392 -0
  22. package/packages/hooks/__tests__/use-print/index.test.ts +378 -0
  23. package/packages/hooks/__tests__/use-watermark/index.test.ts +277 -0
  24. package/packages/hooks/__tests__/use-websocket/index.test.ts +402 -0
  25. package/packages/hooks/package.json +104 -0
  26. package/packages/hooks/types/index.d.ts +1 -0
  27. package/packages/hooks/types/json.d.ts +4 -0
  28. package/packages/hooks/types/vue.shim.d.ts +5 -0
  29. package/packages/hooks/yarn.lock +1832 -0
  30. package/packages/lowcode/core/package.json +60 -0
  31. package/packages/lowcode/core/types/index.d.ts +1 -0
  32. package/packages/lowcode/core/types/json.d.ts +4 -0
  33. package/packages/lowcode/core/types/vue.shim.d.ts +5 -0
  34. package/packages/lowcode/core/vite.dist.min.config.js +40 -0
  35. package/packages/lowcode/core/vite.dist.min.config.js.map +1 -0
  36. package/packages/lowcode/core/vite.lib.config.js +74 -0
  37. package/packages/lowcode/core/vite.lib.config.js.map +1 -0
  38. package/packages/lowcode/core/yarn.lock +1132 -0
  39. package/packages/lowcode/mobile/package.json +63 -0
  40. package/packages/lowcode/mobile/types/index.d.ts +1 -0
  41. package/packages/lowcode/mobile/types/json.d.ts +4 -0
  42. package/packages/lowcode/mobile/types/vue.shim.d.ts +77 -0
  43. package/packages/lowcode/mobile/vite.config.js +11 -0
  44. package/packages/lowcode/mobile/vite.config.js.map +1 -0
  45. package/packages/lowcode/mobile/vite.dist.min.config.js +71 -0
  46. package/packages/lowcode/mobile/vite.dist.min.config.js.map +1 -0
  47. package/packages/lowcode/mobile/vite.lib.config.js +137 -0
  48. package/packages/lowcode/mobile/vite.lib.config.js.map +1 -0
  49. package/packages/lowcode/mobile/yarn.lock +3888 -0
  50. package/packages/lowcode/pc/package.json +64 -0
  51. package/packages/lowcode/pc/vite.config.js +11 -0
  52. package/packages/lowcode/pc/vite.config.js.map +1 -0
  53. package/packages/lowcode/pc/vite.dist.min.config.js +71 -0
  54. package/packages/lowcode/pc/vite.dist.min.config.js.map +1 -0
  55. package/packages/lowcode/pc/vite.lib.config.js +137 -0
  56. package/packages/lowcode/pc/vite.lib.config.js.map +1 -0
  57. package/packages/lowcode/pc/yarn.lock +4026 -0
  58. package/packages/pc_components/DOCUMENTATION.md +566 -0
  59. package/packages/pc_components/LICENSE +24 -0
  60. package/packages/pc_components/lib/commDialog/index.d.ts +3 -0
  61. package/packages/pc_components/lib/commDialog/index.js +8 -0
  62. package/packages/pc_components/lib/commDialog/src/index.vue.d.ts +102 -0
  63. package/packages/pc_components/lib/commDialog/src/index.vue.js +43 -0
  64. package/packages/pc_components/lib/commDialog/src/index.vue2.js +4 -0
  65. package/packages/pc_components/lib/commDialog/src/props.d.ts +49 -0
  66. package/packages/pc_components/lib/commDialog/src/props.js +48 -0
  67. package/packages/pc_components/lib/commDialog/src/type.d.ts +39 -0
  68. package/packages/pc_components/lib/commForm/index.d.ts +3 -0
  69. package/packages/pc_components/lib/commForm/index.js +8 -0
  70. package/packages/pc_components/lib/commForm/src/index.vue.d.ts +95 -0
  71. package/packages/pc_components/lib/commForm/src/index.vue.js +50 -0
  72. package/packages/pc_components/lib/commForm/src/index.vue2.js +4 -0
  73. package/packages/pc_components/lib/commForm/src/props.d.ts +49 -0
  74. package/packages/pc_components/lib/commForm/src/props.js +47 -0
  75. package/packages/pc_components/lib/commForm/src/type.d.ts +8 -0
  76. package/packages/pc_components/lib/contextMenu/index.d.ts +5 -0
  77. package/packages/pc_components/lib/contextMenu/index.js +8 -0
  78. package/packages/pc_components/lib/contextMenu/src/index.vue.d.ts +91 -0
  79. package/packages/pc_components/lib/contextMenu/src/index.vue.js +153 -0
  80. package/packages/pc_components/lib/contextMenu/src/index.vue2.js +4 -0
  81. package/packages/pc_components/lib/contextMenu/src/props.d.ts +32 -0
  82. package/packages/pc_components/lib/contextMenu/src/props.js +27 -0
  83. package/packages/pc_components/lib/contextMenu/src/type.d.ts +11 -0
  84. package/packages/pc_components/lib/describeView/index.d.ts +2 -0
  85. package/packages/pc_components/lib/describeView/index.js +7 -0
  86. package/packages/pc_components/lib/describeView/src/index.vue.d.ts +61 -0
  87. package/packages/pc_components/lib/describeView/src/index.vue.js +84 -0
  88. package/packages/pc_components/lib/describeView/src/index.vue2.js +4 -0
  89. package/packages/pc_components/lib/describeView/src/props.d.ts +35 -0
  90. package/packages/pc_components/lib/describeView/src/props.js +33 -0
  91. package/packages/pc_components/lib/describeView/src/type.d.ts +10 -0
  92. package/packages/pc_components/lib/index.d.ts +18 -0
  93. package/packages/pc_components/lib/index.js +40 -0
  94. package/packages/pc_components/lib/simpleVirtualList/index.d.ts +2 -0
  95. package/packages/pc_components/lib/simpleVirtualList/index.js +7 -0
  96. package/packages/pc_components/lib/simpleVirtualList/src/index.vue.d.ts +28 -0
  97. package/packages/pc_components/lib/simpleVirtualList/src/index.vue.js +101 -0
  98. package/packages/pc_components/lib/simpleVirtualList/src/index.vue2.js +4 -0
  99. package/packages/pc_components/lib/simpleVirtualList/src/type.d.ts +12 -0
  100. package/packages/pc_components/lib/styles/comm-form.scss +4 -0
  101. package/packages/pc_components/lib/styles/context-menu.scss +47 -0
  102. package/packages/pc_components/lib/styles/describe-view.scss +25 -0
  103. package/packages/pc_components/lib/styles/index.scss +6 -0
  104. package/packages/pc_components/lib/styles/simple-virtual-list.scss +25 -0
  105. package/packages/pc_components/lib/styles/table-extend.scss +100 -0
  106. package/packages/pc_components/lib/styles/text-button.scss +71 -0
  107. package/packages/pc_components/lib/tableExtend/index.d.ts +3 -0
  108. package/packages/pc_components/lib/tableExtend/index.js +7 -0
  109. package/packages/pc_components/lib/tableExtend/props.d.ts +130 -0
  110. package/packages/pc_components/lib/tableExtend/props.js +128 -0
  111. package/packages/pc_components/lib/tableExtend/src/colVisible.vue.d.ts +3 -0
  112. package/packages/pc_components/lib/tableExtend/src/colVisible.vue.js +128 -0
  113. package/packages/pc_components/lib/tableExtend/src/colVisible.vue2.js +4 -0
  114. package/packages/pc_components/lib/tableExtend/src/index.vue.d.ts +186 -0
  115. package/packages/pc_components/lib/tableExtend/src/index.vue.js +234 -0
  116. package/packages/pc_components/lib/tableExtend/src/index.vue2.js +4 -0
  117. package/packages/pc_components/lib/tableExtend/src/valueCol.vue.d.ts +24 -0
  118. package/packages/pc_components/lib/tableExtend/src/valueCol.vue.js +29 -0
  119. package/packages/pc_components/lib/tableExtend/src/valueCol.vue2.js +4 -0
  120. package/packages/pc_components/lib/tableExtend/type.d.ts +165 -0
  121. package/packages/pc_components/lib/tableExtend/type.js +9 -0
  122. package/packages/pc_components/lib/tableExtend/useTable.d.ts +27 -0
  123. package/packages/pc_components/lib/tableExtend/useTable.js +115 -0
  124. package/packages/pc_components/lib/textButton/index.d.ts +2 -0
  125. package/packages/pc_components/lib/textButton/index.js +7 -0
  126. package/packages/pc_components/lib/textButton/src/index.vue.d.ts +42 -0
  127. package/packages/pc_components/lib/textButton/src/index.vue.js +44 -0
  128. package/packages/pc_components/lib/textButton/src/index.vue2.js +4 -0
  129. package/packages/pc_components/lib/textButton/src/props.d.ts +23 -0
  130. package/packages/pc_components/lib/textButton/src/props.js +30 -0
  131. package/packages/pc_components/lib/textButton/src/type.d.ts +30 -0
  132. package/packages/pc_components/lib/utils/index.d.ts +77 -0
  133. package/packages/pc_components/lib/utils/index.js +124 -0
  134. package/packages/pc_components/package.json +73 -0
  135. package/packages/pc_components/types/index.d.ts +9 -0
  136. package/packages/pc_components/types/json.d.ts +4 -0
  137. package/packages/pc_components/types/vue.shim.d.ts +5 -0
  138. package/packages/pc_components/yarn.lock +1641 -0
  139. package/postcss.config.js +19 -0
  140. package/public/vite.svg +1 -0
  141. package/src/App.vue +37 -0
  142. package/src/api/index.ts +42 -0
  143. package/src/assets/vue.svg +1 -0
  144. package/src/document/core.md +2680 -0
  145. package/src/document/hooks.md +632 -0
  146. package/src/document/pc_components.md +566 -0
  147. package/src/locales/en.json +1 -0
  148. package/src/locales/zh-cn.json +1 -0
  149. package/src/main.ts +13 -0
  150. package/src/plugins/element-plus.ts +16 -0
  151. package/src/plugins/i18n.ts +17 -0
  152. package/src/plugins/index.ts +13 -0
  153. package/src/plugins/store.ts +12 -0
  154. package/src/router/index.ts +20 -0
  155. package/src/shared/chartType.ts +279 -0
  156. package/src/shared/const.ts +160 -0
  157. package/src/shared/lib.ts +129 -0
  158. package/src/shared/request.ts +255 -0
  159. package/src/shared/type.ts +48 -0
  160. package/src/shared/utils/date.ts +83 -0
  161. package/src/shared/utils/utils.ts +85 -0
  162. package/src/store/index.ts +22 -0
  163. package/src/store/modules/app.ts +17 -0
  164. package/src/store/modules/shared.ts +21 -0
  165. package/src/styles/index.scss +169 -0
  166. package/src/types/app.d.ts +23 -0
  167. package/src/types/echarts.d.ts +5 -0
  168. package/src/types/index.d.ts +1 -0
  169. package/src/types/json.d.ts +4 -0
  170. package/src/types/scss.d.ts +9 -0
  171. package/src/types/vue.shim.d.ts +5 -0
  172. package/src/views/docs/docs-content.vue +379 -0
  173. package/src/views/docs/docs-header.vue +130 -0
  174. package/src/views/docs/docs-sidebar.vue +76 -0
  175. package/src/views/docs/hooks.ts +600 -0
  176. package/src/views/docs/index.vue +30 -0
  177. package/src/views/docs/styles/docs-content.scss +106 -0
  178. package/src/views/docs/styles/docs-header.scss +20 -0
  179. package/src/views/docs/styles/docs-sidebar.scss +182 -0
  180. package/src/views/docs/styles/index.scss +14 -0
  181. package/src/views/docs/type.ts +101 -0
  182. package/src/views/index.vue +34 -0
  183. package/tsconfig.json +37 -0
  184. package/tsconfig.node.json +8 -0
  185. package/vite.config.ts +54 -0
@@ -0,0 +1,255 @@
1
+ import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios";
2
+ import { getToken, removeToken } from "@qy_better_lib/core";
3
+ import { messageAlert } from "@qy_better_lib/pc";
4
+
5
+ import dayjs from "dayjs";
6
+ import router from "@/router/index";
7
+
8
+ export type ResponseType = {
9
+ code: string | number,
10
+ success: boolean;
11
+ data?: any | undefined;
12
+ msg: string;
13
+ total?: number;
14
+ };
15
+
16
+ export type RequestOptions = {
17
+ responseType?:
18
+ | "arraybuffer"
19
+ | "blob"
20
+ | "document"
21
+ | "json"
22
+ | "text"
23
+ | "stream";
24
+ contentType?: string;
25
+ // 是否为Basic方式
26
+ isBasic?: boolean;
27
+ /**超时时间,默认30S */
28
+ timeout?: number;
29
+ };
30
+
31
+ /**
32
+ * 网络请求
33
+ * @param contentType 数据类型:默认application/json
34
+ * @returns
35
+ */
36
+ function request(option?: RequestOptions): AxiosInstance {
37
+ const service = axios.create({
38
+ responseType: option?.responseType,
39
+ headers: {
40
+ "Content-Type": option?.contentType || "application/json",
41
+ },
42
+ timeout: option?.timeout || 1000 * 30,
43
+ baseURL: "/",
44
+ // 请求数据处理
45
+ transformRequest: [(data, config) => transformRequest(data, config)],
46
+ transformResponse: [(data, config) => transformResponse(data, config)],
47
+ });
48
+
49
+ // 拦截请求
50
+ service.interceptors.request.use((config) => {
51
+ let token = getToken();
52
+ if (!!token) {
53
+ config.headers && (config.headers.Authorization = `${token}`);
54
+ }
55
+ return config;
56
+ });
57
+
58
+ // 响应前拦截器
59
+ service.interceptors.response.use(
60
+ (response) => {
61
+ const message = responseStatus(response);
62
+ const responseType = response.headers["content-disposition"];
63
+ // 下载文件
64
+ if (responseType && responseType.indexOf("attachment;") > -1) {
65
+ if (response.data.size === 0) {
66
+ messageAlert("error", "No Data", false, 2500);
67
+ return;
68
+ }
69
+ return handleDownload(response);
70
+ }
71
+ message && messageAlert("error", message, false, 2500);
72
+ const { code, success, data, msg, total } = response.data;
73
+ return { success, data, msg, code, total };
74
+ // 后续方案
75
+ // return [response.data, true];
76
+ },
77
+ (err: any) => {
78
+ let errmsg = "";
79
+ if (!err.response) {
80
+ if (/[timeout of]\s+\d+ms\s+[exceeded]/.test(err.message)) {
81
+ errmsg = "请求超时,请检查网络";
82
+ }
83
+ } else {
84
+ errmsg = responseStatus(err.response);
85
+ }
86
+ errmsg && messageAlert("error", errmsg, false, 2500);
87
+ // 需要进行异常后续处理的,通过判断返回值为res[1]===false判断
88
+ return Promise.resolve([errmsg, false]);
89
+ }
90
+ );
91
+ return service;
92
+ }
93
+
94
+ function transformRequest(data: any, config: any) {
95
+ if (!data) return data;
96
+ // 是文件类型,则不做任何处理
97
+ if (config["Content-Type"] === "multipart/form-data") {
98
+ return data;
99
+ }
100
+ // 时间格式处理
101
+ return formatDate(data);
102
+ }
103
+
104
+ function transformResponse(data: any, config: any) {
105
+ if (data == "" || data == undefined) return data;
106
+ // 是文件类型,则不做任何处理
107
+ if (config["Content-Type"] === "multipart/form-data") {
108
+ return data;
109
+ }
110
+ const contentDisposition = config["content-disposition"];
111
+ if (contentDisposition && contentDisposition.indexOf("attachment;") > -1) {
112
+ return data;
113
+ }
114
+ // 时间格式处理
115
+ data = data.replace(
116
+ /[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(\.\d{3})?/g, //\+\d{4}
117
+ (math) => {
118
+ return dayjs(math).format("YYYY-MM-DD HH:mm:ss");
119
+ }
120
+ );
121
+ data = JSON.parse(data);
122
+ return data;
123
+ }
124
+
125
+ /**
126
+ * 默认时区处理
127
+ */
128
+ function formatDate(data: any): any {
129
+ Date.prototype.toJSON = function () {
130
+ return dayjs(this).format("YYYY-MM-DD HH:mm:ss");
131
+ };
132
+ data = JSON.stringify(data);
133
+ return data;
134
+ }
135
+
136
+ /**
137
+ * 处理文件下载请求
138
+ * @param response
139
+ * @returns
140
+ */
141
+ function handleDownload(response: AxiosResponse<any>) {
142
+ //如果返回的是application/json,则表示返回的是json,没有要下载的问题,可能是逻辑处理失败
143
+ if (String(response.headers) === "application/json") {
144
+ var reader = new FileReader();
145
+ reader.onload = (e: any) => {
146
+ var data = JSON.parse(e.target.result);
147
+ if (data.code === 1) {
148
+ return data.data;
149
+ } else {
150
+ messageAlert("error", data.msg, false, 2500);
151
+ return null;
152
+ }
153
+ };
154
+ reader.readAsText(response.data);
155
+ return;
156
+ }
157
+ const blob = new Blob([response.data]);
158
+ const url: string = window.URL.createObjectURL(blob);
159
+
160
+ // 如果是预览直接返�
161
+ if (response.config?.headers?.preview) return url;
162
+
163
+ let fileName = "";
164
+ // 如果响应头包�content-disposition'属性,则从该属性中获取文件名称
165
+ let cd = response.headers["content-disposition"];
166
+ if (cd) {
167
+ fileName = decodeURI(cd.split("filename=")[1]);
168
+ }
169
+
170
+ //如果文件名不存在,则使用时间�
171
+ if (!fileName) {
172
+ fileName = new Date().getTime().toString();
173
+ }
174
+
175
+ fileName = fileName.replace(/(.*_)(\d+)(\.\w+)/, (context, $1, $2, $3) => {
176
+ let str = dayjs(+$2).format("YYYYMMDDHHmmss");
177
+ return `${$1}${str}${$3}`;
178
+ });
179
+
180
+ //通过模拟a标签点击事件下载文件
181
+ const link = document.createElement("a");
182
+ link.href = url;
183
+ link.setAttribute("download", fileName);
184
+ document.body.appendChild(link);
185
+ link.click();
186
+ document.body.removeChild(link);
187
+ return { code: 200 };
188
+ }
189
+
190
+ /**
191
+ * 用户失效
192
+ */
193
+ function userInvalid(response: AxiosResponse): string {
194
+ removeToken();
195
+ const currentPath = router.currentRoute.value.fullPath;
196
+ if (router.currentRoute.value.path !== "/login") {
197
+ const redirect = currentPath === "/login" ? undefined : currentPath;
198
+ router.replace({
199
+ path: `/login`,
200
+ query: { redirect: redirect && encodeURIComponent(redirect) },
201
+ });
202
+ return "登录信息已失效,请重新登录";
203
+ }
204
+ return "";
205
+ }
206
+
207
+ /**http状态码异常 */
208
+ function responseStatus(response: AxiosResponse): string {
209
+ const status = response.status;
210
+
211
+ let message: string = "";
212
+ switch (status) {
213
+ case 404:
214
+ message = "数据接口异常";
215
+ break;
216
+ case 401:
217
+ message = userInvalid(response);
218
+ break;
219
+ case 400:
220
+ message = response.data?.msg || "参数错误";
221
+ break;
222
+ case 500:
223
+ message = response.data?.msg || "服务异常,请重试";
224
+ break;
225
+ case 200:
226
+ message = responseSuccess(response);
227
+ break;
228
+ }
229
+ return message;
230
+ }
231
+
232
+ /**
233
+ * 响应成功code异常
234
+ */
235
+ function responseSuccess(response: AxiosResponse): string {
236
+ const { code, msg } = response.data;
237
+ switch (code) {
238
+ case 0:
239
+ return msg || "服务异常";
240
+ case 401:
241
+ return userInvalid(response);
242
+ case 500:
243
+ return msg || "服务异常";
244
+ case -1:
245
+ return msg || "服务异常";
246
+ case 200:
247
+ return "";
248
+ case 203:
249
+ return msg || "服务异常";
250
+ default:
251
+ return "";
252
+ }
253
+ }
254
+
255
+ export default request;
@@ -0,0 +1,48 @@
1
+ import type { Ref, WritableComputedRef } from "vue";
2
+
3
+ export type { TableProp, TableColumn } from "@qy_better_lib/pc";
4
+
5
+ /**
6
+ * 无返回函数
7
+ */
8
+ export type Fn = () => void;
9
+
10
+ export type Fnps = (...args) => void;
11
+
12
+ export type noop = () => {};
13
+
14
+ export type MenuLayout = {
15
+ /**菜单列表 */
16
+ menus: any[];
17
+ /**当前页面路径 */
18
+ paths: Record<string, any>;
19
+ /**选择的菜单key */
20
+ activeMenu?: Record<string, any>;
21
+ };
22
+
23
+ /**Layout State */
24
+ export type LayoutState = {
25
+ /**菜单展开状态 */
26
+ menuExpand: WritableComputedRef<boolean>;
27
+ /**页面选项卡 */
28
+ pageTabList: Ref<any[]>;
29
+ };
30
+
31
+ export type Locale = "zh-cn" | "en";
32
+
33
+ /**
34
+ * 表单配置
35
+ */
36
+ export type FormOption = {
37
+ /**是否显示 */
38
+ visible: boolean,
39
+ /**key-唯一标识 */
40
+ key?: string | number,
41
+ /**其他数据 */
42
+ [key: string]: any;
43
+ }
44
+
45
+ export type PageProvide = {
46
+ on_search: () => any,
47
+ [key: string]: any
48
+ }
@@ -0,0 +1,83 @@
1
+ import dayjs from "dayjs";
2
+
3
+ /**
4
+ * 获取一小时内的范围时间
5
+ * @export
6
+ * @return {*}
7
+ */
8
+ export function getNowHourDateTime(): [string, string] {
9
+ const before = dayjs(+new Date() - 1000 * 60 * 60).format(
10
+ "YYYY-MM-DD HH:mm:ss"
11
+ );
12
+ return [before, dayjs().format("YYYY-MM-DD HH:mm:ss")];
13
+ }
14
+
15
+ /**
16
+ * 获取当日范围时间
17
+ * @export
18
+ * @return {*}
19
+ */
20
+ export function getNowDayDateTime(): [string, string] {
21
+ return [
22
+ dayjs().format("YYYY-MM-DD 00:00:00"),
23
+ dayjs().format("YYYY-MM-DD 23:59:59"),
24
+ ];
25
+ }
26
+ /**
27
+ * 获取本周的时间范围
28
+ * @export
29
+ * @return {*}
30
+ */
31
+ export function getWeekDateTime(): [string, string] {
32
+ const nowDate = new Date();
33
+ const before =
34
+ +new Date(nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate()) -
35
+ nowDate.getDay() * 24 * 60 * 60 * 1000;
36
+ return [
37
+ dayjs(before).format("YYYY-MM-DD 00:00:00"),
38
+ dayjs().format("YYYY-MM-DD 23:59:59"),
39
+ ];
40
+ }
41
+
42
+ /**
43
+ * 获取本月的时间范围
44
+ * @export
45
+ * @return {*}
46
+ */
47
+ export function getMonthDateTime(): [string, string] {
48
+ const nowDate = new Date();
49
+ const before = +new Date(nowDate.getFullYear(), nowDate.getMonth(), 1);
50
+ return [
51
+ dayjs(before).format("YYYY-MM-DD HH:mm:ss"),
52
+ dayjs().format("YYYY-MM-DD HH:mm:ss"),
53
+ ];
54
+ }
55
+
56
+ /**
57
+ * 获取本季度的时间范围
58
+ * @export
59
+ * @return {*}
60
+ */
61
+ export function getQuarterDateTime(): [string, string] {
62
+ const nowDate = new Date();
63
+ const quarter = Math.ceil((nowDate.getMonth() + 1) / 3);
64
+ const before = new Date(nowDate.getFullYear(), (quarter - 1) * 3, 1);
65
+ return [
66
+ dayjs(before).format("YYYY-MM-DD HH:mm:ss"),
67
+ dayjs().format("YYYY-MM-DD HH:mm:ss"),
68
+ ];
69
+ }
70
+
71
+ /**
72
+ * 获取本年的时间范围
73
+ * @export
74
+ * @return {*}
75
+ */
76
+ export function getYearDateTime(): [string, string] {
77
+ const nowDate = new Date();
78
+ const before = new Date(nowDate.getFullYear(), 0, 1);
79
+ return [
80
+ dayjs(before).format("YYYY-MM-DD HH:mm:ss"),
81
+ dayjs().format("YYYY-MM-DD HH:mm:ss"),
82
+ ];
83
+ }
@@ -0,0 +1,85 @@
1
+ import { isObject } from "@qy_better_lib/core";
2
+ import md5 from "crypto-js/md5";
3
+ /**
4
+ * 获取图片路径
5
+ * @param fileName
6
+ * @returns
7
+ */
8
+ export function getImageUrl(fileName: string) {
9
+ return new URL(`/src/assets/images/${fileName}`, import.meta.url).href;
10
+ }
11
+ /**
12
+ * 将file转换成base64
13
+ * @param file
14
+ * @param callback
15
+ * @returns
16
+ */
17
+ export async function file_to_base64(file) {
18
+ const reader = new FileReader();
19
+ reader.readAsDataURL(file);
20
+ return new Promise((resolve, reject) => {
21
+ reader.onload = (event) => {
22
+ return resolve(event.target?.result);
23
+ };
24
+
25
+ // 当出现错误时触发
26
+ reader.onerror = (error) => {
27
+ console.error('Error: ', error);
28
+ return reject(false);
29
+ };
30
+ });
31
+ }
32
+ /**
33
+ * MD5加密
34
+ * @param str
35
+ * @returns
36
+ */
37
+ export function encrypt_md5(str: string) {
38
+ return md5(str).toString().toLowerCase()
39
+ }
40
+
41
+ export function download_file_for_url(url: string) {
42
+ const link = document.createElement("a");
43
+ link.href = url;
44
+ link.target = "_blank";
45
+ document.body.appendChild(link);
46
+ link.click();
47
+ document.body.removeChild(link);
48
+ }
49
+ /**是否为手机号 */
50
+ export function is_mobile(str: string) {
51
+ const regex = /^1[3-9]\d{9}$/;
52
+ return regex.test(str);
53
+ }
54
+ /**
55
+ * 前置数组
56
+ * @param parent
57
+ * @param child
58
+ */
59
+ export function pre_child_array(parent: any[], child: any[], key: string) {
60
+ // 创建一个标记数组,初始化为false
61
+ let ishas = new Array(parent.length).fill(false);
62
+ for (let i = 0; i < parent.length; i++) {
63
+ if (child.some(s => {
64
+ if (!isObject(s)) {
65
+ return s === parent[i][key];
66
+ } else {
67
+ return s[key] === parent[i][key];
68
+ }
69
+ })) {
70
+ ishas[i] = true;
71
+ }
72
+ }
73
+ let Elements: any[] = [];
74
+ let nonElements: any[] = [];
75
+
76
+ for (let i = 0; i < parent.length; i++) {
77
+ if (ishas[i]) {
78
+ Elements.push(parent[i]);
79
+ } else {
80
+ nonElements.push(parent[i]);
81
+ }
82
+ }
83
+ const arr = Elements.concat(nonElements);
84
+ return arr;
85
+ }
@@ -0,0 +1,22 @@
1
+ import app, { AppStore } from "./modules/app";
2
+ import shared, { SharedStateStore } from "./modules/shared";
3
+
4
+ interface Stores {
5
+ app: AppStore;
6
+ shared: SharedStateStore;
7
+ }
8
+
9
+ const store: Stores = {
10
+ app: {} as AppStore,
11
+ shared: {} as SharedStateStore,
12
+ };
13
+
14
+ /**
15
+ * 注册状态库
16
+ */
17
+ export const registerStore = () => {
18
+ store.app = app();
19
+ store.shared = shared();
20
+ };
21
+
22
+ export default store;
@@ -0,0 +1,17 @@
1
+ import { defineStore } from "pinia";
2
+
3
+ interface AppState {
4
+ /**路由页面是否显示 */
5
+ routeViewDisplay: boolean;
6
+ }
7
+ export type AppStore = {
8
+ state: AppState;
9
+ };
10
+
11
+ export default defineStore("appStore", () => {
12
+ const state = reactive<AppState>({
13
+ routeViewDisplay: true,
14
+ });
15
+
16
+ return { state };
17
+ });
@@ -0,0 +1,21 @@
1
+ import { defineStore } from "pinia";
2
+ /**
3
+ * 用户状态
4
+ */
5
+
6
+ interface State {
7
+ resources?: Record<string, any>;
8
+ isSuper?: boolean;
9
+ }
10
+ export type SharedStateStore = {
11
+ state: State;
12
+ };
13
+
14
+ export default defineStore("sharedStore", () => {
15
+ const state = reactive<State>({
16
+ resources: [],
17
+ isSuper: false,
18
+ });
19
+
20
+ return { state };
21
+ });
@@ -0,0 +1,169 @@
1
+ html,
2
+ body {
3
+ height: 100%;
4
+ width: 100%;
5
+ margin: 0;
6
+ padding: 0;
7
+ color: var(--text-color);
8
+ font-size: 14px;
9
+ font-weight: 400;
10
+ font-family: "'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', '微软雅黑', Arial, sans-serif";
11
+ }
12
+
13
+ #app {
14
+ height: 100%;
15
+ padding: var(--page-padding);
16
+ }
17
+
18
+ *,
19
+ *:before,
20
+ *:after {
21
+ box-sizing: border-box;
22
+ }
23
+
24
+ a:focus,
25
+ a:active {
26
+ outline: none;
27
+ text-decoration: none;
28
+ }
29
+
30
+ a:link {
31
+ text-decoration: none;
32
+ }
33
+
34
+ a,
35
+ abbr,
36
+ acronym,
37
+ address,
38
+ applet,
39
+ article,
40
+ aside,
41
+ audio,
42
+ b,
43
+ big,
44
+ blockquote,
45
+ body,
46
+ canvas,
47
+ caption,
48
+ center,
49
+ cite,
50
+ code,
51
+ dd,
52
+ del,
53
+ details,
54
+ dfn,
55
+ div,
56
+ dl,
57
+ dt,
58
+ em,
59
+ embed,
60
+ fieldset,
61
+ figcaption,
62
+ figure,
63
+ footer,
64
+ form,
65
+ h1,
66
+ h2,
67
+ h3,
68
+ h4,
69
+ h5,
70
+ h6,
71
+ header,
72
+ html,
73
+ i,
74
+ iframe,
75
+ img,
76
+ input,
77
+ ins,
78
+ kbd,
79
+ label,
80
+ legend,
81
+ li,
82
+ mark,
83
+ menu,
84
+ nav,
85
+ object,
86
+ ol,
87
+ output,
88
+ p,
89
+ pre,
90
+ q,
91
+ ruby,
92
+ s,
93
+ samp,
94
+ section,
95
+ small,
96
+ span,
97
+ strike,
98
+ strong,
99
+ sub,
100
+ summary,
101
+ table,
102
+ tbody,
103
+ td,
104
+ tfoot,
105
+ time,
106
+ tr,
107
+ tt,
108
+ u,
109
+ ul,
110
+ var,
111
+ video {
112
+ margin: 0;
113
+ padding: 0;
114
+ border: 0;
115
+ vertical-align: baseline;
116
+ }
117
+
118
+ li {
119
+ list-style: none;
120
+ }
121
+
122
+ :root {
123
+ --text-color: #333333;
124
+ --text-color-light1: #666666;
125
+ --text-color-light2: #999999;
126
+ --text-color-light3: #a0a1a7;
127
+ --background-color-inverse: #ffffff;
128
+ --background-color-light1: #f2f3f5;
129
+ --background-color: #efefef;
130
+ --border-color: #e4e6ec;
131
+ }
132
+
133
+ /* Element Plus 暗黑模式变量 */
134
+ html.dark {
135
+ --el-color-primary: #409eff;
136
+ --el-color-success: #67c23a;
137
+ --el-color-warning: #e6a23c;
138
+ --el-color-danger: #f56c6c;
139
+ --el-color-info: #909399;
140
+ --el-bg-color: #1f1f1f;
141
+ --el-bg-color-page: #121212;
142
+ --el-bg-color-overlay: #282828;
143
+ --el-text-color-primary: #ffffff;
144
+ --el-text-color-regular: #e0e0e0;
145
+ --el-text-color-secondary: #b0b0b0;
146
+ --el-text-color-placeholder: #909090;
147
+ --el-border-color: #434343;
148
+ --el-border-color-light: #303030;
149
+ --el-border-color-lighter: #262626;
150
+ --el-border-color-extra-light: #1f1f1f;
151
+ --el-fill-color: #2a2a2a;
152
+ --el-fill-color-light: #303030;
153
+ --el-fill-color-lighter: #393939;
154
+ --el-fill-color-blank: transparent;
155
+ --el-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
156
+ --el-box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
157
+ --el-box-shadow-lighter: 0 2px 12px 0 rgba(0, 0, 0, 0.08);
158
+ --el-box-shadow-dark: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.12);
159
+
160
+ /* 项目变量 */
161
+ --text-color: #ffffff;
162
+ --text-color-light1: #e0e0e0;
163
+ --text-color-light2: #b0b0b0;
164
+ --text-color-light3: #909090;
165
+ --background-color-inverse: #2a2a2a;
166
+ --background-color-light1: #303030;
167
+ --background-color: #1f1f1f;
168
+ --border-color: #434343;
169
+ }