ch3chi-commons-vue 1.2.0 → 1.8.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.
- package/package.json +2 -1
- package/src/api/ApiService.ts +869 -0
- package/src/auth/AuthorizationService.ts +138 -0
- package/src/auth/PermissionDescriptor.ts +99 -0
- package/src/auth/keys.ts +5 -0
- package/src/components/CAlert.vue +188 -0
- package/src/components/CAlertDefine.ts +20 -0
- package/src/components/CBSToast.vue +119 -0
- package/src/components/CGlobalSpinner.vue +84 -0
- package/src/components/CImage.vue +67 -0
- package/src/components/CRowCheckBox.vue +75 -0
- package/src/components/CRowTextInput.vue +27 -0
- package/src/components/CTable.vue +524 -0
- package/src/components/CTableDefine.ts +566 -0
- package/src/components/CTableTD.vue +28 -0
- package/src/components/HasPermission.vue +28 -0
- package/src/components/form/CChangePasswordFormField.vue +146 -0
- package/src/components/form/CCheckBoxFormField.vue +91 -0
- package/src/components/form/CCheckBoxPlatFormField.vue +94 -0
- package/src/components/form/CDateFormField.vue +149 -0
- package/src/components/form/CDateQueryField.vue +111 -0
- package/src/components/form/CDateRangeFormField.vue +138 -0
- package/src/components/form/CFilePickerFormField.vue +471 -0
- package/src/components/form/CRadioFormField.vue +62 -0
- package/src/components/form/CRadioPlatFormField.vue +67 -0
- package/src/components/form/CSelectFormField.vue +175 -0
- package/src/components/form/CTextAreaFormField.vue +84 -0
- package/src/components/form/CTextInputFormField.vue +99 -0
- package/src/components/form/CTinyMCEEditorFormField.vue +99 -0
- package/src/components/form/SCTextInputFormField.vue +129 -0
- package/src/composables/useCheckBoxFormField.ts +126 -0
- package/src/composables/useRadioFormField.ts +106 -0
- package/src/directive/CBootstrapDirective.ts +83 -0
- package/src/directive/CDateFormatterDirective.ts +37 -0
- package/src/directive/CFTurnstileDirective.ts +46 -0
- package/src/directive/CFormDirective.ts +57 -0
- package/src/directive/PermissionDirective.ts +102 -0
- package/src/env.d.ts +19 -0
- package/src/index.ts +83 -0
- package/src/model/BSFieldStyleConfig.ts +349 -0
- package/src/model/BaseDictionary.ts +86 -0
- package/src/model/BaseFormDataModel.ts +623 -0
- package/src/model/BaseListViewModel.ts +392 -0
- package/src/model/CBSModalViewModel.ts +91 -0
- package/src/model/CFileDataModel.ts +181 -0
- package/src/model/CImageViewModel.ts +34 -0
- package/src/model/CMenuItem.ts +199 -0
- package/src/model/EmailReceiverDataModel.ts +149 -0
- package/src/model/EmptyDataModel.ts +25 -0
- package/src/model/FormOptions.ts +112 -0
- package/src/model/LoginDataModel.ts +51 -0
- package/src/model/PasswordDataModel.ts +70 -0
- package/src/model/QueryParameter.ts +310 -0
- package/src/model/SessionUser.ts +110 -0
- package/src/model/ShowMessageDataModel.ts +69 -0
- package/src/model/TokenUser.ts +157 -0
- package/src/stores/FormDataStore.ts +73 -0
- package/src/stores/ViewStore.ts +701 -0
- package/src/stores/VueSessionStoreInstaller.ts +22 -0
- package/src/types/turnstile.d.ts +8 -0
- package/src/utils/CToolUtils.ts +133 -0
- package/dist/api/ApiService.d.ts +0 -233
- package/dist/auth/AuthorizationService.d.ts +0 -56
- package/dist/auth/PermissionDescriptor.d.ts +0 -37
- package/dist/components/CAlert.vue.d.ts +0 -17
- package/dist/components/CAlertDefine.d.ts +0 -14
- package/dist/components/CBSToast.vue.d.ts +0 -6
- package/dist/components/CGlobalSpinner.vue.d.ts +0 -13
- package/dist/components/CRowCheckBox.vue.d.ts +0 -14
- package/dist/components/CRowTextInput.vue.d.ts +0 -10
- package/dist/components/CTable.vue.d.ts +0 -24
- package/dist/components/CTableDefine.d.ts +0 -201
- package/dist/components/CTableTD.vue.d.ts +0 -7
- package/dist/components/form/CChangePasswordFormField.vue.d.ts +0 -14
- package/dist/components/form/CCheckBoxFormField.vue.d.ts +0 -30
- package/dist/components/form/CDateFormField.vue.d.ts +0 -17
- package/dist/components/form/CDateQueryField.vue.d.ts +0 -16
- package/dist/components/form/CDateRangeFormField.vue.d.ts +0 -17
- package/dist/components/form/CFilePickerFormField.vue.d.ts +0 -28
- package/dist/components/form/CRadioFormField.vue.d.ts +0 -30
- package/dist/components/form/CSelectFormField.vue.d.ts +0 -18
- package/dist/components/form/CTextAreaFormField.vue.d.ts +0 -16
- package/dist/components/form/CTextInputFormField.vue.d.ts +0 -22
- package/dist/directive/CBootstrapDirective.d.ts +0 -17
- package/dist/directive/CDateFormatterDirective.d.ts +0 -10
- package/dist/directive/CFTurnstileDirective.d.ts +0 -15
- package/dist/directive/CFormDirective.d.ts +0 -9
- package/dist/directive/PermissionDirective.d.ts +0 -15
- package/dist/index.cjs.js +0 -19103
- package/dist/index.d.ts +0 -45
- package/dist/index.es.js +0 -19086
- package/dist/model/BSFieldStyleConfig.d.ts +0 -121
- package/dist/model/BaseDictionary.d.ts +0 -34
- package/dist/model/BaseFormDataModel.d.ts +0 -199
- package/dist/model/BaseListViewModel.d.ts +0 -165
- package/dist/model/CBSModalViewModel.d.ts +0 -44
- package/dist/model/CFileDataModel.d.ts +0 -74
- package/dist/model/CImageViewModel.d.ts +0 -8
- package/dist/model/CMenuItem.d.ts +0 -86
- package/dist/model/EmailReceiverDataModel.d.ts +0 -57
- package/dist/model/EmptyDataModel.d.ts +0 -7
- package/dist/model/FormOptions.d.ts +0 -60
- package/dist/model/LoginDataModel.d.ts +0 -12
- package/dist/model/PasswordDataModel.d.ts +0 -15
- package/dist/model/QueryParameter.d.ts +0 -92
- package/dist/model/SessionUser.d.ts +0 -45
- package/dist/model/ShowMessageDataModel.d.ts +0 -44
- package/dist/model/TokenUser.d.ts +0 -50
- package/dist/stores/FormDataStore.d.ts +0 -31
- package/dist/stores/ViewStore.d.ts +0 -349
- package/dist/style.css +0 -223
- package/dist/utils/CToolUtils.d.ts +0 -53
|
@@ -1,349 +0,0 @@
|
|
|
1
|
-
import { ComponentPublicInstance } from 'vue';
|
|
2
|
-
import { DefineStoreOptions } from 'pinia';
|
|
3
|
-
import { default as CAlert } from '../components/CAlert.vue';
|
|
4
|
-
import { CAlertModalData } from '../components/CAlertDefine';
|
|
5
|
-
import { default as CBSToast } from '../components/CBSToast.vue';
|
|
6
|
-
import { default as CGlobalSpinner } from '../components/CGlobalSpinner.vue';
|
|
7
|
-
import { SessionUser } from '../model/SessionUser';
|
|
8
|
-
import { CMenuItem } from '../model/CMenuItem';
|
|
9
|
-
import { ShowMessageType } from '../model/ShowMessageDataModel';
|
|
10
|
-
import { AccessToken } from '../model/TokenUser';
|
|
11
|
-
import { BaseDictionary, CBaseDictionary } from '../model/BaseDictionary';
|
|
12
|
-
export type RouterNavigationType = 'push' | 'back' | 'forward' | 'unknown';
|
|
13
|
-
/**
|
|
14
|
-
* 全局視圖相關的狀態
|
|
15
|
-
*/
|
|
16
|
-
export type GlobalViewState = {
|
|
17
|
-
navigationType: RouterNavigationType;
|
|
18
|
-
isSidebarOpen: boolean;
|
|
19
|
-
mainBSModal: ComponentPublicInstance<typeof CAlert> | null;
|
|
20
|
-
toastView: ComponentPublicInstance<typeof CBSToast> | null;
|
|
21
|
-
globalSpinner: ComponentPublicInstance<typeof CGlobalSpinner> | null;
|
|
22
|
-
version: string;
|
|
23
|
-
};
|
|
24
|
-
/**
|
|
25
|
-
* 全局視圖相關的行為
|
|
26
|
-
*/
|
|
27
|
-
export interface GlobalViewActions {
|
|
28
|
-
routerNavigationType(type: RouterNavigationType): void;
|
|
29
|
-
toggleSidebar(): void;
|
|
30
|
-
showModal(data: CAlertModalData): void;
|
|
31
|
-
showModalError(data: CAlertModalData): void;
|
|
32
|
-
showModelAlert(data: CAlertModalData): void;
|
|
33
|
-
showModalConfirm(data: CAlertModalData): void;
|
|
34
|
-
hideModal(): void;
|
|
35
|
-
addToast(data: CAlertModalData): void;
|
|
36
|
-
showSpinner(): void;
|
|
37
|
-
hideSpinner(): void;
|
|
38
|
-
setVersion(version: string): void;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* 全局視圖相關的 getters
|
|
42
|
-
*/
|
|
43
|
-
export interface GlobalViewGetters {
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* 全局視圖 store 定義類型
|
|
47
|
-
*/
|
|
48
|
-
export type GlobalViewStoreOptionDefine = Omit<DefineStoreOptions<'view', GlobalViewState, GlobalViewGetters, GlobalViewActions>, 'id'>;
|
|
49
|
-
/**
|
|
50
|
-
* 全局視圖 store 定義
|
|
51
|
-
*/
|
|
52
|
-
export declare const globalViewStoreOptions: GlobalViewStoreOptionDefine;
|
|
53
|
-
/**
|
|
54
|
-
* 保存視圖相關的狀態,例如側邊欄開啟狀態、模態框、Toast、全局加載等
|
|
55
|
-
*/
|
|
56
|
-
export declare const useViewStore: import('pinia').StoreDefinition<"view", GlobalViewState, GlobalViewGetters & ThisType<{
|
|
57
|
-
navigationType: RouterNavigationType;
|
|
58
|
-
isSidebarOpen: boolean;
|
|
59
|
-
mainBSModal: ComponentPublicInstance<typeof CAlert> | null;
|
|
60
|
-
toastView: ComponentPublicInstance<typeof CBSToast> | null;
|
|
61
|
-
globalSpinner: ComponentPublicInstance<typeof CGlobalSpinner> | null;
|
|
62
|
-
version: string;
|
|
63
|
-
} & {} & {} & import('pinia').PiniaCustomProperties<string, import('pinia').StateTree, import('pinia')._GettersTree<import('pinia').StateTree>, import('pinia')._ActionsTree>> & import('pinia')._GettersTree<GlobalViewState>, GlobalViewActions & ThisType<GlobalViewActions & {
|
|
64
|
-
navigationType: RouterNavigationType;
|
|
65
|
-
isSidebarOpen: boolean;
|
|
66
|
-
mainBSModal: ComponentPublicInstance<typeof CAlert> | null;
|
|
67
|
-
toastView: ComponentPublicInstance<typeof CBSToast> | null;
|
|
68
|
-
globalSpinner: ComponentPublicInstance<typeof CGlobalSpinner> | null;
|
|
69
|
-
version: string;
|
|
70
|
-
} & import('pinia')._StoreWithState<"view", GlobalViewState, GlobalViewGetters, GlobalViewActions> & {} & {} & import('pinia').PiniaCustomProperties<string, import('pinia').StateTree, import('pinia')._GettersTree<import('pinia').StateTree>, import('pinia')._ActionsTree>>>;
|
|
71
|
-
export declare const __GlobalViewStoreDefine__: GlobalViewState & GlobalViewActions & GlobalViewGetters & GlobalViewStoreOptionDefine;
|
|
72
|
-
/**
|
|
73
|
-
* 使用者會話相關的狀態
|
|
74
|
-
*/
|
|
75
|
-
export type UserSessionState<T extends SessionUser = SessionUser> = {
|
|
76
|
-
user: T | null;
|
|
77
|
-
token?: AccessToken | null;
|
|
78
|
-
isAuth: boolean;
|
|
79
|
-
sessionCheckTimer: number | null;
|
|
80
|
-
shouldRedirectToLogin: boolean | null;
|
|
81
|
-
shouldRedirectToMessage?: boolean;
|
|
82
|
-
redirectMessageType?: ShowMessageType | null;
|
|
83
|
-
};
|
|
84
|
-
/**
|
|
85
|
-
* 使用者會話相關的行為
|
|
86
|
-
*/
|
|
87
|
-
export interface UserSessionActions<T extends SessionUser = SessionUser> {
|
|
88
|
-
saveUser(user: T | null): void;
|
|
89
|
-
saveToken(token: AccessToken | null): void;
|
|
90
|
-
setAuthenticated(isAuth: boolean): void;
|
|
91
|
-
checkSessionIsValid(): Promise<boolean>;
|
|
92
|
-
validateSession(helper: () => Promise<T>): Promise<boolean>;
|
|
93
|
-
refreshToken(helper: () => Promise<AccessToken>): Promise<boolean>;
|
|
94
|
-
startSessionCheck(): void;
|
|
95
|
-
stopSessionCheck(): void;
|
|
96
|
-
hasPermission(needPermission: string | string[]): boolean;
|
|
97
|
-
logout(): void;
|
|
98
|
-
triggerManualLogout: () => void;
|
|
99
|
-
resetShouldRedirectToLogin: () => void;
|
|
100
|
-
triggerAuthFailedRedirect: () => void;
|
|
101
|
-
resetAuthFailedRedirect: () => void;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* 使用者會話相關的 getters
|
|
105
|
-
*/
|
|
106
|
-
export interface UserSessionGetters<T extends SessionUser = SessionUser> {
|
|
107
|
-
currentUser(state: UserSessionState<T>): T | null;
|
|
108
|
-
currentToken(state: UserSessionState<T>): AccessToken | null;
|
|
109
|
-
isAuthenticated(state: UserSessionState<T>): boolean;
|
|
110
|
-
userUid(state: UserSessionState<T>): string | undefined;
|
|
111
|
-
account(state: UserSessionState<T>): string | undefined;
|
|
112
|
-
userName(state: UserSessionState<T>): string | undefined;
|
|
113
|
-
email(state: UserSessionState<T>): string | undefined;
|
|
114
|
-
roleCode(state: UserSessionState<T>): string | undefined;
|
|
115
|
-
permissions(state: UserSessionState<T>): string[] | undefined;
|
|
116
|
-
menuItems(): CMenuItem[];
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* 使用者會話 store 定義類型
|
|
120
|
-
*/
|
|
121
|
-
export type UserSessionStoreOptionDefine<T extends SessionUser = SessionUser> = Omit<DefineStoreOptions<'session', UserSessionState<T>, UserSessionGetters<T>, UserSessionActions<T>>, 'id'>;
|
|
122
|
-
/**
|
|
123
|
-
* 使用者會話 store 定義
|
|
124
|
-
* 此方式僅適用於 SessionUser 類型,只使用 session 當作帳號權限驗證
|
|
125
|
-
*/
|
|
126
|
-
export declare const userSessionStoreOptions: UserSessionStoreOptionDefine<SessionUser>;
|
|
127
|
-
/**
|
|
128
|
-
* 持久化設定選項
|
|
129
|
-
*/
|
|
130
|
-
export interface PersistOptions<T extends SessionUser = SessionUser> {
|
|
131
|
-
enabled?: boolean;
|
|
132
|
-
key?: string;
|
|
133
|
-
storage?: Storage;
|
|
134
|
-
paths?: string[];
|
|
135
|
-
userConstructor?: new () => T;
|
|
136
|
-
serializer?: {
|
|
137
|
-
serialize: (state: any) => string;
|
|
138
|
-
deserialize: (str: string) => any;
|
|
139
|
-
};
|
|
140
|
-
onLogout?: (user: T | null, token: AccessToken | null) => void;
|
|
141
|
-
onLogin?: (user: T) => void;
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* 創建使用者會話 store 選項的工廠函數,支援自訂的 SessionUser 類型
|
|
145
|
-
* @param persistOptions
|
|
146
|
-
*/
|
|
147
|
-
export declare function createUserSessionOptions<T extends SessionUser = SessionUser>(persistOptions?: PersistOptions<T>): UserSessionStoreOptionDefine<T>;
|
|
148
|
-
/**
|
|
149
|
-
* 創建使用者會話 store 的工廠函數,支援自訂的 SessionUser 類型
|
|
150
|
-
*/
|
|
151
|
-
export declare function createUserSessionStore<T extends SessionUser = SessionUser>(storeId?: string, persistOptions?: PersistOptions<T>): import('pinia').StoreDefinition<string, UserSessionState<T>, UserSessionGetters<T> & ThisType<{
|
|
152
|
-
user: import('vue').UnwrapRef<T> | null;
|
|
153
|
-
token?: {
|
|
154
|
-
tokenType?: string | undefined;
|
|
155
|
-
accessToken?: string | undefined;
|
|
156
|
-
accessTokenExpiresAt?: string | undefined;
|
|
157
|
-
refreshToken?: string | undefined;
|
|
158
|
-
refreshTokenExpiresAt?: string | undefined;
|
|
159
|
-
sessionUid?: string | undefined;
|
|
160
|
-
isExpired: () => boolean;
|
|
161
|
-
isRefreshTokenExpired: () => boolean;
|
|
162
|
-
loadToken: (data: Record<string, any>) => AccessToken;
|
|
163
|
-
toJSON: () => Record<string, any>;
|
|
164
|
-
loadJSON: (data: Record<string, any>) => AccessToken;
|
|
165
|
-
readonly bearerToken: string;
|
|
166
|
-
} | null | undefined;
|
|
167
|
-
isAuth: boolean;
|
|
168
|
-
sessionCheckTimer: number | null;
|
|
169
|
-
shouldRedirectToLogin: boolean | null;
|
|
170
|
-
shouldRedirectToMessage?: boolean | undefined;
|
|
171
|
-
redirectMessageType?: (ShowMessageType | null) | undefined;
|
|
172
|
-
} & {
|
|
173
|
-
readonly currentUser: T | null;
|
|
174
|
-
readonly currentToken: AccessToken | null;
|
|
175
|
-
readonly isAuthenticated: boolean;
|
|
176
|
-
readonly userUid: string | undefined;
|
|
177
|
-
readonly account: string | undefined;
|
|
178
|
-
readonly userName: string | undefined;
|
|
179
|
-
readonly email: string | undefined;
|
|
180
|
-
readonly roleCode: string | undefined;
|
|
181
|
-
readonly permissions: string[] | undefined;
|
|
182
|
-
readonly menuItems: CMenuItem[];
|
|
183
|
-
} & {} & import('pinia').PiniaCustomProperties<string, import('pinia').StateTree, import('pinia')._GettersTree<import('pinia').StateTree>, import('pinia')._ActionsTree>> & import('pinia')._GettersTree<UserSessionState<T>>, UserSessionActions<T> & ThisType<UserSessionActions<T> & {
|
|
184
|
-
user: import('vue').UnwrapRef<T> | null;
|
|
185
|
-
token?: {
|
|
186
|
-
tokenType?: string | undefined;
|
|
187
|
-
accessToken?: string | undefined;
|
|
188
|
-
accessTokenExpiresAt?: string | undefined;
|
|
189
|
-
refreshToken?: string | undefined;
|
|
190
|
-
refreshTokenExpiresAt?: string | undefined;
|
|
191
|
-
sessionUid?: string | undefined;
|
|
192
|
-
isExpired: () => boolean;
|
|
193
|
-
isRefreshTokenExpired: () => boolean;
|
|
194
|
-
loadToken: (data: Record<string, any>) => AccessToken;
|
|
195
|
-
toJSON: () => Record<string, any>;
|
|
196
|
-
loadJSON: (data: Record<string, any>) => AccessToken;
|
|
197
|
-
readonly bearerToken: string;
|
|
198
|
-
} | null | undefined;
|
|
199
|
-
isAuth: boolean;
|
|
200
|
-
sessionCheckTimer: number | null;
|
|
201
|
-
shouldRedirectToLogin: boolean | null;
|
|
202
|
-
shouldRedirectToMessage?: boolean | undefined;
|
|
203
|
-
redirectMessageType?: (ShowMessageType | null) | undefined;
|
|
204
|
-
} & import('pinia')._StoreWithState<"session", UserSessionState<T>, UserSessionGetters<T>, UserSessionActions<T>> & {
|
|
205
|
-
readonly currentUser: T | null;
|
|
206
|
-
readonly currentToken: AccessToken | null;
|
|
207
|
-
readonly isAuthenticated: boolean;
|
|
208
|
-
readonly userUid: string | undefined;
|
|
209
|
-
readonly account: string | undefined;
|
|
210
|
-
readonly userName: string | undefined;
|
|
211
|
-
readonly email: string | undefined;
|
|
212
|
-
readonly roleCode: string | undefined;
|
|
213
|
-
readonly permissions: string[] | undefined;
|
|
214
|
-
readonly menuItems: CMenuItem[];
|
|
215
|
-
} & {} & import('pinia').PiniaCustomProperties<string, import('pinia').StateTree, import('pinia')._GettersTree<import('pinia').StateTree>, import('pinia')._ActionsTree>>>;
|
|
216
|
-
/**
|
|
217
|
-
* 預設的使用者會話 store(使用 SessionUser)
|
|
218
|
-
*/
|
|
219
|
-
export declare const useUserSessionStore: import('pinia').StoreDefinition<string, UserSessionState<SessionUser>, UserSessionGetters<SessionUser> & ThisType<{
|
|
220
|
-
user: {
|
|
221
|
-
userUid?: string | undefined;
|
|
222
|
-
iat?: number | undefined;
|
|
223
|
-
account?: string | undefined;
|
|
224
|
-
name?: string | undefined;
|
|
225
|
-
email?: string | undefined;
|
|
226
|
-
roleCode?: string | undefined;
|
|
227
|
-
roleName?: string | undefined;
|
|
228
|
-
permissions?: string[] | undefined;
|
|
229
|
-
load: (data: Record<string, any>) => SessionUser;
|
|
230
|
-
loadFromValidateSession: (data: any) => SessionUser;
|
|
231
|
-
merge: (data: Partial<SessionUser>) => SessionUser;
|
|
232
|
-
process: (data: Record<string, any>) => Record<string, any>;
|
|
233
|
-
toJSON: () => Record<string, any>;
|
|
234
|
-
loadJSON: (data: Record<string, any>) => SessionUser;
|
|
235
|
-
} | null;
|
|
236
|
-
token?: {
|
|
237
|
-
tokenType?: string | undefined;
|
|
238
|
-
accessToken?: string | undefined;
|
|
239
|
-
accessTokenExpiresAt?: string | undefined;
|
|
240
|
-
refreshToken?: string | undefined;
|
|
241
|
-
refreshTokenExpiresAt?: string | undefined;
|
|
242
|
-
sessionUid?: string | undefined;
|
|
243
|
-
isExpired: () => boolean;
|
|
244
|
-
isRefreshTokenExpired: () => boolean;
|
|
245
|
-
loadToken: (data: Record<string, any>) => AccessToken;
|
|
246
|
-
toJSON: () => Record<string, any>;
|
|
247
|
-
loadJSON: (data: Record<string, any>) => AccessToken;
|
|
248
|
-
readonly bearerToken: string;
|
|
249
|
-
} | null | undefined;
|
|
250
|
-
isAuth: boolean;
|
|
251
|
-
sessionCheckTimer: number | null;
|
|
252
|
-
shouldRedirectToLogin: boolean | null;
|
|
253
|
-
shouldRedirectToMessage?: boolean | undefined;
|
|
254
|
-
redirectMessageType?: (ShowMessageType | null) | undefined;
|
|
255
|
-
} & {
|
|
256
|
-
readonly currentUser: SessionUser | null;
|
|
257
|
-
readonly currentToken: AccessToken | null;
|
|
258
|
-
readonly isAuthenticated: boolean;
|
|
259
|
-
readonly userUid: string | undefined;
|
|
260
|
-
readonly account: string | undefined;
|
|
261
|
-
readonly userName: string | undefined;
|
|
262
|
-
readonly email: string | undefined;
|
|
263
|
-
readonly roleCode: string | undefined;
|
|
264
|
-
readonly permissions: string[] | undefined;
|
|
265
|
-
readonly menuItems: CMenuItem[];
|
|
266
|
-
} & {} & import('pinia').PiniaCustomProperties<string, import('pinia').StateTree, import('pinia')._GettersTree<import('pinia').StateTree>, import('pinia')._ActionsTree>> & import('pinia')._GettersTree<UserSessionState<SessionUser>>, UserSessionActions<SessionUser> & ThisType<UserSessionActions<SessionUser> & {
|
|
267
|
-
user: {
|
|
268
|
-
userUid?: string | undefined;
|
|
269
|
-
iat?: number | undefined;
|
|
270
|
-
account?: string | undefined;
|
|
271
|
-
name?: string | undefined;
|
|
272
|
-
email?: string | undefined;
|
|
273
|
-
roleCode?: string | undefined;
|
|
274
|
-
roleName?: string | undefined;
|
|
275
|
-
permissions?: string[] | undefined;
|
|
276
|
-
load: (data: Record<string, any>) => SessionUser;
|
|
277
|
-
loadFromValidateSession: (data: any) => SessionUser;
|
|
278
|
-
merge: (data: Partial<SessionUser>) => SessionUser;
|
|
279
|
-
process: (data: Record<string, any>) => Record<string, any>;
|
|
280
|
-
toJSON: () => Record<string, any>;
|
|
281
|
-
loadJSON: (data: Record<string, any>) => SessionUser;
|
|
282
|
-
} | null;
|
|
283
|
-
token?: {
|
|
284
|
-
tokenType?: string | undefined;
|
|
285
|
-
accessToken?: string | undefined;
|
|
286
|
-
accessTokenExpiresAt?: string | undefined;
|
|
287
|
-
refreshToken?: string | undefined;
|
|
288
|
-
refreshTokenExpiresAt?: string | undefined;
|
|
289
|
-
sessionUid?: string | undefined;
|
|
290
|
-
isExpired: () => boolean;
|
|
291
|
-
isRefreshTokenExpired: () => boolean;
|
|
292
|
-
loadToken: (data: Record<string, any>) => AccessToken;
|
|
293
|
-
toJSON: () => Record<string, any>;
|
|
294
|
-
loadJSON: (data: Record<string, any>) => AccessToken;
|
|
295
|
-
readonly bearerToken: string;
|
|
296
|
-
} | null | undefined;
|
|
297
|
-
isAuth: boolean;
|
|
298
|
-
sessionCheckTimer: number | null;
|
|
299
|
-
shouldRedirectToLogin: boolean | null;
|
|
300
|
-
shouldRedirectToMessage?: boolean | undefined;
|
|
301
|
-
redirectMessageType?: (ShowMessageType | null) | undefined;
|
|
302
|
-
} & import('pinia')._StoreWithState<"session", UserSessionState<SessionUser>, UserSessionGetters<SessionUser>, UserSessionActions<SessionUser>> & {
|
|
303
|
-
readonly currentUser: SessionUser | null;
|
|
304
|
-
readonly currentToken: AccessToken | null;
|
|
305
|
-
readonly isAuthenticated: boolean;
|
|
306
|
-
readonly userUid: string | undefined;
|
|
307
|
-
readonly account: string | undefined;
|
|
308
|
-
readonly userName: string | undefined;
|
|
309
|
-
readonly email: string | undefined;
|
|
310
|
-
readonly roleCode: string | undefined;
|
|
311
|
-
readonly permissions: string[] | undefined;
|
|
312
|
-
readonly menuItems: CMenuItem[];
|
|
313
|
-
} & {} & import('pinia').PiniaCustomProperties<string, import('pinia').StateTree, import('pinia')._GettersTree<import('pinia').StateTree>, import('pinia')._ActionsTree>>>;
|
|
314
|
-
export declare const __UserSessionTypes__: UserSessionState & UserSessionGetters & UserSessionActions & UserSessionStoreOptionDefine & PersistOptions;
|
|
315
|
-
export interface DictionaryPersistOptions<T extends BaseDictionary = CBaseDictionary> {
|
|
316
|
-
enabled?: boolean;
|
|
317
|
-
key?: string;
|
|
318
|
-
storage?: Storage;
|
|
319
|
-
paths?: string[];
|
|
320
|
-
dictConstructor?: new () => T;
|
|
321
|
-
serializer?: {
|
|
322
|
-
serialize: (state: any) => string;
|
|
323
|
-
deserialize: (str: string) => any;
|
|
324
|
-
};
|
|
325
|
-
}
|
|
326
|
-
export type DictionaryState<T extends BaseDictionary = CBaseDictionary> = {
|
|
327
|
-
dictionary: T | null;
|
|
328
|
-
};
|
|
329
|
-
export interface DictionaryActions<T extends BaseDictionary = CBaseDictionary> {
|
|
330
|
-
setDictionary(dict: T): void;
|
|
331
|
-
loadAll(): void;
|
|
332
|
-
loadDictionary(key: string): void;
|
|
333
|
-
}
|
|
334
|
-
export interface DictionaryGetters<T extends BaseDictionary = CBaseDictionary> {
|
|
335
|
-
dict(): T | null;
|
|
336
|
-
}
|
|
337
|
-
/**
|
|
338
|
-
* Dictionary store 定義類型
|
|
339
|
-
*/
|
|
340
|
-
export type DictionaryStoreOptionDefine<T extends BaseDictionary = CBaseDictionary> = Omit<DefineStoreOptions<'dictionary', DictionaryState<T>, DictionaryGetters<T>, DictionaryActions<T>>, 'id'>;
|
|
341
|
-
/**
|
|
342
|
-
* 創建 Dictionary store 選項的工廠函數
|
|
343
|
-
* @param dictConstructor
|
|
344
|
-
*/
|
|
345
|
-
export declare function createDictionaryStoreOptions<T extends BaseDictionary = CBaseDictionary>(options: {
|
|
346
|
-
dictionary?: T;
|
|
347
|
-
persistOptions?: DictionaryPersistOptions<T>;
|
|
348
|
-
}): DictionaryStoreOptionDefine<T>;
|
|
349
|
-
export declare const __DictionaryStoreTypes__: DictionaryState & DictionaryActions & DictionaryGetters & DictionaryStoreOptionDefine;
|
package/dist/style.css
DELETED
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
.toast.c-toast-error[data-v-5a5057c1] {
|
|
3
|
-
background-color: #ffffff;
|
|
4
|
-
color: #212529;
|
|
5
|
-
border-left: 4px solid #dc3545;
|
|
6
|
-
}
|
|
7
|
-
.toast.c-toast-error .toast-header[data-v-5a5057c1] {
|
|
8
|
-
background-color: #f5c6cb;
|
|
9
|
-
color: #721c24;
|
|
10
|
-
border-bottom: 1px solid #f1aeb5;
|
|
11
|
-
}
|
|
12
|
-
.toast.c-toast-alert[data-v-5a5057c1] {
|
|
13
|
-
background-color: #ffffff;
|
|
14
|
-
color: #212529;
|
|
15
|
-
border-left: 4px solid #fd7e14;
|
|
16
|
-
}
|
|
17
|
-
.toast.c-toast-alert .toast-header[data-v-5a5057c1] {
|
|
18
|
-
background-color: #fde2d3;
|
|
19
|
-
color: #8a4116;
|
|
20
|
-
border-bottom: 1px solid #fde2d3;
|
|
21
|
-
}
|
|
22
|
-
.toast.c-toast-info[data-v-5a5057c1] {
|
|
23
|
-
background-color: #ffffff;
|
|
24
|
-
color: #212529;
|
|
25
|
-
border-left: 4px solid #20c997;
|
|
26
|
-
}
|
|
27
|
-
.toast.c-toast-info .toast-header[data-v-5a5057c1] {
|
|
28
|
-
background-color: #d4f4e6;
|
|
29
|
-
color: #0f5132;
|
|
30
|
-
border-bottom: 1px solid #d4f4e6;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/* 增加一些通用樣式改進 */
|
|
34
|
-
.toast[data-v-5a5057c1] {
|
|
35
|
-
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
|
|
36
|
-
border-radius: 0.375rem;
|
|
37
|
-
}
|
|
38
|
-
.toast-header[data-v-5a5057c1] {
|
|
39
|
-
font-weight: 600;
|
|
40
|
-
}
|
|
41
|
-
.toast-body[data-v-5a5057c1] {
|
|
42
|
-
padding: 0.75rem;
|
|
43
|
-
background-color: #ffffff;
|
|
44
|
-
color: #212529;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.c-global-overlay[data-v-819a33ab] {
|
|
48
|
-
position: fixed;
|
|
49
|
-
top: 0; left: 0; right: 0; bottom: 0;
|
|
50
|
-
background: rgba(44, 44, 44, 0.5);
|
|
51
|
-
z-index: 30000;
|
|
52
|
-
display: flex;
|
|
53
|
-
align-items: center;
|
|
54
|
-
justify-content: center;
|
|
55
|
-
}
|
|
56
|
-
.c-global-spinner[data-v-819a33ab] {
|
|
57
|
-
--spinner-color: var(--v42442b26);
|
|
58
|
-
}
|
|
59
|
-
.c-global-spinner .spinner-border[data-v-819a33ab] {
|
|
60
|
-
width: 3rem;
|
|
61
|
-
height: 3rem;
|
|
62
|
-
color: var(--spinner-color, #E4B445);
|
|
63
|
-
border-width: 0.4em;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
.c-multiline-text[data-v-49ff4b16] {
|
|
67
|
-
white-space: pre-wrap;
|
|
68
|
-
word-break: break-word;
|
|
69
|
-
}
|
|
70
|
-
.flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08)}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none !important;box-shadow:none !important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:'';height:0;width:0;left:22px}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.arrowRight:after{left:auto;right:22px}.flatpickr-calendar.arrowCenter:before,.flatpickr-calendar.arrowCenter:after{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:transparent;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-prev-month,.flatpickr-months .flatpickr-next-month{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9)}.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,.flatpickr-months .flatpickr-next-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-prev-month i,.flatpickr-months .flatpickr-next-month i{position:relative}.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,.flatpickr-months .flatpickr-next-month.flatpickr-prev-month{/*
|
|
71
|
-
/*rtl:begin:ignore*/left:0/*
|
|
72
|
-
/*rtl:end:ignore*/}/*
|
|
73
|
-
/*rtl:begin:ignore*/
|
|
74
|
-
/*
|
|
75
|
-
/*rtl:end:ignore*/
|
|
76
|
-
.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,.flatpickr-months .flatpickr-next-month.flatpickr-next-month{/*
|
|
77
|
-
/*rtl:begin:ignore*/right:0/*
|
|
78
|
-
/*rtl:end:ignore*/}/*
|
|
79
|
-
/*rtl:begin:ignore*/
|
|
80
|
-
/*
|
|
81
|
-
/*rtl:end:ignore*/
|
|
82
|
-
.flatpickr-months .flatpickr-prev-month:hover,.flatpickr-months .flatpickr-next-month:hover{color:#959ea9}.flatpickr-months .flatpickr-prev-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-prev-month svg,.flatpickr-months .flatpickr-next-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-outer-spin-button,.numInputWrapper input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,0.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,0.1)}.numInputWrapper span:active{background:rgba(0,0,0,0.2)}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,0.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,0.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(0,0,0,0.5)}.numInputWrapper:hover{background:rgba(0,0,0,0.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\0;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,0.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,0.9)}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,0.5);background:transparent;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:none;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:focus,.flatpickr-current-month .flatpickr-monthDropdown-months:active{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:rgba(0,0,0,0.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.dayContainer + .dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:rgba(57,57,57,0.3);background:transparent;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,0.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,0.3);background:transparent;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:bold}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:bold;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time input:hover,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time .flatpickr-am-pm:focus{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}
|
|
83
|
-
.c-single-file-box .c-multiple-file[data-v-b1ff243c]{
|
|
84
|
-
display: none;
|
|
85
|
-
}
|
|
86
|
-
.c-multiple-file-box .c-single-file[data-v-b1ff243c] {
|
|
87
|
-
display: none;
|
|
88
|
-
}
|
|
89
|
-
.c-file-upload-list .progress[data-v-b1ff243c] {
|
|
90
|
-
height: 8px;
|
|
91
|
-
}
|
|
92
|
-
.c-file-download-link[data-v-b1ff243c]:is(a) {
|
|
93
|
-
color: var(--bs-link-color);
|
|
94
|
-
cursor: pointer;
|
|
95
|
-
}
|
|
96
|
-
.c-file-download-link[data-v-b1ff243c]:is(a):hover {
|
|
97
|
-
color: var(--bs-link-hover-color);
|
|
98
|
-
text-decoration: underline;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
.c-textarea-readonly[data-v-cf428e50] {
|
|
103
|
-
background-color: #e9ecef;
|
|
104
|
-
opacity: 1;
|
|
105
|
-
min-height: 90px;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
/* 非 scoped 樣式:定義 CSS 變數 */
|
|
110
|
-
.content-table {
|
|
111
|
-
/* 定義 CSS 變數預設值 */
|
|
112
|
-
--c-pagination-bg-color: #fff;
|
|
113
|
-
--c-pagination-text-color: #2e2e2e;
|
|
114
|
-
--c-pagination-border-color: #E4B445;
|
|
115
|
-
--c-pagination-hover-bg-color: #E4B445;
|
|
116
|
-
--c-pagination-hover-text-color: #fff;
|
|
117
|
-
--c-pagination-hover-border-color: #d4a33c;
|
|
118
|
-
--c-pagination-active-bg-color: #E4B445;
|
|
119
|
-
--c-pagination-active-text-color: #fff;
|
|
120
|
-
--c-pagination-active-border-color: #E4B445;
|
|
121
|
-
--c-scrollbar-thumb-color: #E4B445;
|
|
122
|
-
--c-scrollbar-track-color: #f1f1f1;
|
|
123
|
-
--c-scrollbar-thumb-hover-color: #d4a33c;
|
|
124
|
-
--c-scrollbar-height: 8px;
|
|
125
|
-
}
|
|
126
|
-
.content-table-body {
|
|
127
|
-
/* 自訂 scrollbar 樣式 */
|
|
128
|
-
scrollbar-width: thin; /* Firefox */
|
|
129
|
-
scrollbar-color: var(--c-scrollbar-thumb-color) var(--c-scrollbar-track-color); /* Firefox: thumb 和 track 顏色 */
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/* WebKit 瀏覽器 (Chrome, Safari, Edge) */
|
|
133
|
-
.content-table-body::-webkit-scrollbar {
|
|
134
|
-
height: var(--c-scrollbar-height); /* scrollbar 高度 */
|
|
135
|
-
}
|
|
136
|
-
.content-table-body::-webkit-scrollbar-track {
|
|
137
|
-
background: var(--c-scrollbar-track-color); /* track 背景色 */
|
|
138
|
-
border-radius: 4px;
|
|
139
|
-
}
|
|
140
|
-
.content-table-body::-webkit-scrollbar-thumb {
|
|
141
|
-
background: var(--c-scrollbar-thumb-color); /* thumb 顏色 */
|
|
142
|
-
border-radius: 4px;
|
|
143
|
-
transition: background 0.3s;
|
|
144
|
-
}
|
|
145
|
-
.content-table-body::-webkit-scrollbar-thumb:hover {
|
|
146
|
-
background: var(--c-scrollbar-thumb-hover-color); /* hover 時的顏色 */
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
.content-table[data-v-b60bf553] {
|
|
151
|
-
display: flex;
|
|
152
|
-
flex-direction: column;
|
|
153
|
-
justify-content: center;
|
|
154
|
-
align-items: center;
|
|
155
|
-
}
|
|
156
|
-
.content-table table[data-v-b60bf553] {
|
|
157
|
-
table-layout: auto;
|
|
158
|
-
}
|
|
159
|
-
.content-table-body[data-v-b60bf553] {
|
|
160
|
-
width: 100%;
|
|
161
|
-
overflow-x: auto;
|
|
162
|
-
}
|
|
163
|
-
.content-table table th[data-v-b60bf553],
|
|
164
|
-
.content-table table td[data-v-b60bf553] {
|
|
165
|
-
width: auto;
|
|
166
|
-
}
|
|
167
|
-
.content-table table td[data-v-b60bf553] {
|
|
168
|
-
vertical-align: middle;
|
|
169
|
-
text-align: left;
|
|
170
|
-
}
|
|
171
|
-
.content-table-footer[data-v-b60bf553] {
|
|
172
|
-
border-top: 1px solid #dee2e6;
|
|
173
|
-
}
|
|
174
|
-
.content-table .pagination .page-link[data-v-b60bf553] {
|
|
175
|
-
min-width: 36px;
|
|
176
|
-
text-align: center;
|
|
177
|
-
display: inline-block;
|
|
178
|
-
color: var(--c-pagination-text-color, #2e2e2e);
|
|
179
|
-
background-color: var(--c-pagination-bg-color, #fff);
|
|
180
|
-
border: 1px solid var(--c-pagination-border-color, #E4B445);
|
|
181
|
-
margin: 0 2px;
|
|
182
|
-
border-radius: 4px;
|
|
183
|
-
transition: background-color .3s, color .3s;
|
|
184
|
-
}
|
|
185
|
-
.content-table .pagination .page-link[data-v-b60bf553]:hover,
|
|
186
|
-
.content-table .pagination .page-link[data-v-b60bf553]:focus {
|
|
187
|
-
background-color: var(--c-pagination-hover-bg-color, #E4B445);
|
|
188
|
-
color: var(--c-pagination-hover-text-color, #fff);
|
|
189
|
-
border-color: var(--c-pagination-hover-border-color, #d4a33c);
|
|
190
|
-
}
|
|
191
|
-
.content-table .pagination .active .page-link[data-v-b60bf553] {
|
|
192
|
-
background-color: var(--c-pagination-active-bg-color, #E4B445);
|
|
193
|
-
color: var(--c-pagination-active-text-color, #fff);
|
|
194
|
-
border-color: var(--c-pagination-active-border-color, #E4B445);
|
|
195
|
-
}
|
|
196
|
-
.content-table .pagination .page-link.c-page-action[data-v-b60bf553] {
|
|
197
|
-
padding-left: 0.2rem;
|
|
198
|
-
padding-right: 0.2rem;
|
|
199
|
-
}
|
|
200
|
-
.dropdown-menu.c-page-menu[data-v-b60bf553] {
|
|
201
|
-
min-width: 200px;
|
|
202
|
-
}
|
|
203
|
-
.c-sortable[data-v-b60bf553] {
|
|
204
|
-
cursor: pointer;
|
|
205
|
-
user-select: none;
|
|
206
|
-
transition: background-color 0.2s;
|
|
207
|
-
}
|
|
208
|
-
.c-sortable[data-v-b60bf553]:hover {
|
|
209
|
-
background-color: rgba(0, 123, 255, 0.1);
|
|
210
|
-
}
|
|
211
|
-
.c-sort-icon[data-v-b60bf553] {
|
|
212
|
-
font-size: 16px;
|
|
213
|
-
color: #6c757d;
|
|
214
|
-
transition: color 0.2s;
|
|
215
|
-
}
|
|
216
|
-
.c-sortable:hover .c-sort-icon[data-v-b60bf553] {
|
|
217
|
-
color: #007bff;
|
|
218
|
-
}
|
|
219
|
-
.c-sortable .c-arrow-up[data-v-b60bf553],
|
|
220
|
-
.c-sortable .c-arrow-down[data-v-b60bf553] {
|
|
221
|
-
color: #007bff;
|
|
222
|
-
}
|
|
223
|
-
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { default as _ } from 'lodash';
|
|
2
|
-
import * as yup from "yup";
|
|
3
|
-
/**
|
|
4
|
-
* 空函式
|
|
5
|
-
*/
|
|
6
|
-
export declare const voidFunction: () => void;
|
|
7
|
-
/**
|
|
8
|
-
* 延遲指定毫秒數
|
|
9
|
-
* @param ms 毫秒數
|
|
10
|
-
*/
|
|
11
|
-
export declare const delay: (ms: number) => Promise<unknown>;
|
|
12
|
-
/**
|
|
13
|
-
* 從 params 中挑選有值的屬性並指派到 payload 中
|
|
14
|
-
* @param payload
|
|
15
|
-
* @param params
|
|
16
|
-
*/
|
|
17
|
-
export declare const pickAndAssign: (payload: Record<string, any>, params: Record<string, any>) => Record<string, any> & _.Dictionary<any>;
|
|
18
|
-
/**
|
|
19
|
-
* 寫入 Vue ref 物件的值
|
|
20
|
-
* @param refObj
|
|
21
|
-
* @param value
|
|
22
|
-
*/
|
|
23
|
-
export declare const writeVueRefValue: (refObj: any, value: any) => void;
|
|
24
|
-
/**
|
|
25
|
-
* Lodash 擴充工具
|
|
26
|
-
*/
|
|
27
|
-
export declare const lodashExTools: {
|
|
28
|
-
getVal: (obj: any, path: string | null | undefined, defaultValue?: any) => any;
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* 檢查是否有相同的檔案
|
|
32
|
-
* @param fileList 檔案列表
|
|
33
|
-
* @param file 要檢查的檔案
|
|
34
|
-
*/
|
|
35
|
-
export declare const checkHasSameFile: (fileList: File[], file: File) => boolean;
|
|
36
|
-
/**
|
|
37
|
-
* 格式化物件中的所有日期屬性為指定格式的字串。
|
|
38
|
-
* @param obj
|
|
39
|
-
*/
|
|
40
|
-
export declare function formatDatesInObject(obj: any): any;
|
|
41
|
-
/**
|
|
42
|
-
* 建立一個日期區間驗證器,用於 yup 的 test 方法中。
|
|
43
|
-
* @param startDateKey
|
|
44
|
-
* @param endDateKey
|
|
45
|
-
* @param startDateMessage
|
|
46
|
-
* @param endDateMessage
|
|
47
|
-
*/
|
|
48
|
-
export declare function makeDateRangeValidator({ startDateKey, endDateKey, startDateMessage, endDateMessage }: {
|
|
49
|
-
startDateKey: string;
|
|
50
|
-
endDateKey: string;
|
|
51
|
-
startDateMessage: string;
|
|
52
|
-
endDateMessage: string;
|
|
53
|
-
}): (this: yup.TestContext, formValues: Record<string, any>) => true | yup.ValidationError;
|