@amirjalili1374/ui-kit 1.2.0 → 1.2.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/README.md +10 -10
- package/package.json +1 -2
- package/src/assets/fonts/A Massir Spray.ttf +0 -0
- package/src/assets/fonts/BYekan.ttf +0 -0
- package/src/assets/fonts/BYekan.woff +0 -0
- package/src/assets/fonts/BYekan.woff2 +0 -0
- package/src/assets/fonts/Dima Shekasteh 2 Free.ttf +0 -0
- package/src/assets/fonts/Dima Shekasteh Free Regular.ttf +0 -0
- package/src/assets/fonts/IRANSansWeb.ts +0 -1
- package/src/assets/fonts/IRANSansWeb.ttf +0 -0
- package/src/assets/fonts/IRANSansXBlack.ttf +0 -0
- package/src/assets/fonts/IRANSansXBold.ttf +0 -0
- package/src/assets/fonts/IRANSansXDemiBold.ttf +0 -0
- package/src/assets/fonts/IRANSansXExtraBold.ttf +0 -0
- package/src/assets/fonts/IRANSansXLight.ttf +0 -0
- package/src/assets/fonts/IRANSansXMedium.ttf +0 -0
- package/src/assets/fonts/IRANSansXRegular.ttf +0 -0
- package/src/assets/fonts/IRANSansXThin.ttf +0 -0
- package/src/assets/fonts/IRANSansXUltraLight.ttf +0 -0
- package/src/assets/fonts/IranNastaliq.ttf +0 -0
- package/src/assets/fonts/Vazir-Medium-FD.ttf +0 -0
- package/src/assets/fonts/Vazir-Medium-FD.woff +0 -0
- package/src/assets/fonts/Vazir-Medium-FD.woff2 +0 -0
- package/src/assets/fonts/Vazir-Regular-FD.eot +0 -0
- package/src/assets/fonts/kalamehBold.woff +0 -0
- package/src/assets/fonts/kalamehBold.woff2 +0 -0
- package/src/assets/fonts/kalamehHeavy.woff +0 -0
- package/src/assets/fonts/kalamehHeavy.woff2 +0 -0
- package/src/assets/fonts/kalamehLight.woff +0 -0
- package/src/assets/fonts/kalamehLight.woff2 +0 -0
- package/src/assets/fonts/kalamehRegular.woff +0 -0
- package/src/assets/fonts/kalamehRegular.woff2 +0 -0
- package/src/assets/images/auth/social-google.svg +0 -6
- package/src/assets/images/favicon.svg +0 -18
- package/src/assets/images/icons/icon-card.svg +0 -5
- package/src/assets/images/logos/logo.svg +0 -12
- package/src/assets/images/logos/logolight.svg +0 -12
- package/src/assets/images/maintenance/img-error-bg.svg +0 -34
- package/src/assets/images/maintenance/img-error-blue.svg +0 -43
- package/src/assets/images/maintenance/img-error-purple.svg +0 -42
- package/src/assets/images/maintenance/img-error-text.svg +0 -27
- package/src/assets/images/profile/profile-user-account-svgrepo-com.svg +0 -12
- package/src/assets/images/profile/user-round.svg +0 -15
- package/src/assets/images/template/template-01.ts +0 -1
- package/src/assets/images/vectors/colorized-bg.svg +0 -40
- package/src/assets/images/vectors/logo_stroke_1px.svg +0 -26
- package/src/assets/images/vectors/logo_stroke_2px.svg +0 -26
- package/src/assets/scss/components/_approval-sections.scss +0 -75
- package/src/assets/styles/fonts.scss +0 -77
- package/src/components/Loading.vue +0 -88
- package/src/components/common/AppStepper.vue +0 -139
- package/src/components/shared/BaseBreadcrumb.vue +0 -55
- package/src/components/shared/BaseIcon.vue +0 -27
- package/src/components/shared/ConfirmDialog.vue +0 -72
- package/src/components/shared/CustomAutocomplete.vue +0 -306
- package/src/components/shared/CustomDataTable.vue +0 -1859
- package/src/components/shared/DescriptionInput.vue +0 -204
- package/src/components/shared/DownloadButton.vue +0 -169
- package/src/components/shared/MoneyInput.vue +0 -105
- package/src/components/shared/PdfViewer.vue +0 -645
- package/src/components/shared/ShamsiDatePicker.vue +0 -444
- package/src/components/shared/UiChildCard.vue +0 -17
- package/src/components/shared/UiParentCard.vue +0 -21
- package/src/components/shared/VPriceTextField.vue +0 -136
- package/src/composables/useDataTable.ts +0 -152
- package/src/composables/usePermissions.ts +0 -90
- package/src/composables/useRouteGuard.ts +0 -36
- package/src/composables/useTableActions.ts +0 -207
- package/src/composables/useTableHeaders.ts +0 -172
- package/src/composables/useTableSelection.ts +0 -201
- package/src/constants/enums/approval.ts +0 -13
- package/src/constants/enums/booleanEnum.ts +0 -11
- package/src/constants/enums/contractType.ts +0 -11
- package/src/constants/enums/lcProductType.ts +0 -21
- package/src/constants/enums/repaymentType.ts +0 -11
- package/src/directives/v-digit-limit.ts +0 -15
- package/src/directives/v-permission.ts +0 -31
- package/src/features/index.ts +0 -48
- package/src/index.ts +0 -119
- package/src/plugins/key-clock.ts +0 -39
- package/src/plugins/mdi-icon.ts +0 -31
- package/src/plugins/vuetify.ts +0 -74
- package/src/scss/_override.scss +0 -72
- package/src/scss/_variables.scss +0 -124
- package/src/scss/components/_VButtons.scss +0 -23
- package/src/scss/components/_VCard.scss +0 -20
- package/src/scss/components/_VCustomDataTable.scss +0 -282
- package/src/scss/components/_VField.scss +0 -9
- package/src/scss/components/_VInput.scss +0 -17
- package/src/scss/components/_VNavigationDrawer.scss +0 -3
- package/src/scss/components/_VShadow.scss +0 -3
- package/src/scss/components/_VStepper.scss +0 -235
- package/src/scss/components/_VTabs.scss +0 -11
- package/src/scss/components/_VTextField.scss +0 -40
- package/src/scss/components/_approval.scss +0 -128
- package/src/scss/layout/_container.scss +0 -147
- package/src/scss/layout/_sidebar.scss +0 -138
- package/src/scss/layout/_topbar.scss +0 -39
- package/src/scss/pages/_dashboards.scss +0 -97
- package/src/scss/style.scss +0 -21
- package/src/services/apiService.ts +0 -59
- package/src/services/axiosInstance.ts +0 -14
- package/src/stores/customizer.ts +0 -55
- package/src/stores/permissions.ts +0 -237
- package/src/theme/darkThemes/DarkModernTheme.ts +0 -54
- package/src/theme/darkThemes/DarkOrangeTheme.ts +0 -53
- package/src/theme/darkThemes/DarkPurpleTheme.ts +0 -54
- package/src/theme/darkThemes/DarkRedTheme.ts +0 -54
- package/src/theme/darkThemes/DarkSilverTheme.ts +0 -53
- package/src/theme/darkThemes/DarkSteelTealGreen.ts +0 -53
- package/src/theme/darkThemes/DarkTealTheme.ts +0 -52
- package/src/theme/lightThemes/ModernTheme.ts +0 -55
- package/src/theme/lightThemes/OrangeTheme.ts +0 -54
- package/src/theme/lightThemes/PurpleTheme.ts +0 -54
- package/src/theme/lightThemes/RedTheme.ts +0 -55
- package/src/theme/lightThemes/SilverTheme.ts +0 -55
- package/src/theme/lightThemes/SteelTealGreen.ts +0 -54
- package/src/theme/lightThemes/TealTheme.ts +0 -54
- package/src/types/approval/approvalType.ts +0 -473
- package/src/types/cartable/cartableTypes.ts +0 -169
- package/src/types/componentTypes/DataTableType.ts +0 -14
- package/src/types/componentTypes/DataTableTypes.ts +0 -130
- package/src/types/enums/global.ts +0 -267
- package/src/types/jalaali-js.d.ts +0 -6
- package/src/types/models/Base.ts +0 -4
- package/src/types/models/env.d.ts +0 -10
- package/src/types/models/person.ts +0 -13
- package/src/types/models/userInfo.ts +0 -29
- package/src/types/preApproval/preApprovalTypes.ts +0 -67
- package/src/types/shims-tabler-icons.d.ts +0 -58
- package/src/types/themeTypes/ThemeType.ts +0 -47
- package/src/types/vue-apexcharts.d.ts +0 -1
- package/src/types/vue3-print-nb.d.ts +0 -1
- package/src/types/vue_tabler_icon.d.ts +0 -10
- package/src/utils/NationalCodeValidator.ts +0 -33
- package/src/utils/date-convertor.ts +0 -40
- package/src/utils/greetingUtils.ts +0 -97
- package/src/utils/helpers/fake-backend.ts +0 -68
- package/src/utils/helpers/fetch-wrapper.ts +0 -86
- package/src/utils/number-formatter.ts +0 -33
- package/src/validators/nationalCodeRule.ts +0 -6
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
.profileBtn {
|
|
2
|
-
height: 50px !important;
|
|
3
|
-
margin: 0 0 0 10px !important;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
.search-sheet {
|
|
7
|
-
position: absolute;
|
|
8
|
-
z-index: 9;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
.circle {
|
|
12
|
-
position: relative;
|
|
13
|
-
overflow: hidden;
|
|
14
|
-
&.sm-circle {
|
|
15
|
-
&::before {
|
|
16
|
-
content: '';
|
|
17
|
-
position: absolute;
|
|
18
|
-
width: 200px;
|
|
19
|
-
height: 200px;
|
|
20
|
-
border: 3px solid rgb(var(--v-theme-warning));
|
|
21
|
-
border-radius: 50%;
|
|
22
|
-
top: 125px;
|
|
23
|
-
right: -70px;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
&.lg-circle {
|
|
28
|
-
&::after {
|
|
29
|
-
content: '';
|
|
30
|
-
position: absolute;
|
|
31
|
-
width: 200px;
|
|
32
|
-
height: 200px;
|
|
33
|
-
border: 19px solid rgb(var(--v-theme-warning));
|
|
34
|
-
border-radius: 50%;
|
|
35
|
-
top: 65px;
|
|
36
|
-
right: -150px;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
.bubble-shape {
|
|
2
|
-
position: relative;
|
|
3
|
-
&:before {
|
|
4
|
-
content: '';
|
|
5
|
-
position: absolute;
|
|
6
|
-
width: 210px;
|
|
7
|
-
height: 210px;
|
|
8
|
-
border-radius: 50%;
|
|
9
|
-
top: -125px;
|
|
10
|
-
left: -15px;
|
|
11
|
-
opacity: 0.5;
|
|
12
|
-
}
|
|
13
|
-
&:after {
|
|
14
|
-
content: '';
|
|
15
|
-
position: absolute;
|
|
16
|
-
width: 210px;
|
|
17
|
-
height: 210px;
|
|
18
|
-
border-radius: 50%;
|
|
19
|
-
top: -85px;
|
|
20
|
-
left: -95px;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
&.bubble-primary-shape {
|
|
24
|
-
&::before {
|
|
25
|
-
background: rgb(var(--v-theme-darkprimary));
|
|
26
|
-
}
|
|
27
|
-
&::after {
|
|
28
|
-
background: rgb(var(--v-theme-darkprimary));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
&.bubble-secondary-shape {
|
|
33
|
-
&::before {
|
|
34
|
-
background: rgb(var(--v-theme-darksecondary));
|
|
35
|
-
}
|
|
36
|
-
&::after {
|
|
37
|
-
background: rgb(var(--v-theme-darksecondary));
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
&.bubble-secondary {
|
|
42
|
-
&::before {
|
|
43
|
-
background: rgb(var(--v-theme-secondary));
|
|
44
|
-
}
|
|
45
|
-
&::after {
|
|
46
|
-
background: rgb(var(--v-theme-secondary));
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.z-1 {
|
|
52
|
-
z-index: 1;
|
|
53
|
-
position: relative;
|
|
54
|
-
}
|
|
55
|
-
.bubble-shape-sm {
|
|
56
|
-
position: relative;
|
|
57
|
-
&::before {
|
|
58
|
-
content: '';
|
|
59
|
-
position: absolute;
|
|
60
|
-
width: 210px;
|
|
61
|
-
height: 210px;
|
|
62
|
-
border-radius: 50%;
|
|
63
|
-
top: -160px;
|
|
64
|
-
right: -130px;
|
|
65
|
-
}
|
|
66
|
-
&.bubble-primary {
|
|
67
|
-
&::before {
|
|
68
|
-
background: linear-gradient(140.9deg, rgb(var(--v-theme-lightprimary)) -14.02%, rgba(var(--v-theme-darkprimary), 0) 77.58%);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
&::after {
|
|
72
|
-
content: '';
|
|
73
|
-
position: absolute;
|
|
74
|
-
width: 210px;
|
|
75
|
-
height: 210px;
|
|
76
|
-
border-radius: 50%;
|
|
77
|
-
top: -30px;
|
|
78
|
-
right: -180px;
|
|
79
|
-
}
|
|
80
|
-
&.bubble-primary {
|
|
81
|
-
&::after {
|
|
82
|
-
background: linear-gradient(210.04deg, rgb(var(--v-theme-lightprimary)) -50.94%, rgba(var(--v-theme-darkprimary), 0) 83.49%);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
&.bubble-warning {
|
|
87
|
-
&::before {
|
|
88
|
-
background: linear-gradient(140.9deg, rgb(var(--v-theme-secondary)) -14.02%, rgba(144, 202, 249, 0) 70.5%);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
&.bubble-warning {
|
|
93
|
-
&::after {
|
|
94
|
-
background: linear-gradient(210.04deg, rgb(var(--v-theme-secondary)) -50.94%, rgba(144, 202, 249, 0) 83.49%);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
package/src/scss/style.scss
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
@import './variables';
|
|
2
|
-
@import 'vuetify/styles/main.sass';
|
|
3
|
-
@import './override';
|
|
4
|
-
@import './layout/container';
|
|
5
|
-
@import './layout/sidebar';
|
|
6
|
-
@import './layout/topbar';
|
|
7
|
-
|
|
8
|
-
@import './components/VButtons';
|
|
9
|
-
@import './components/VCard';
|
|
10
|
-
@import './components/VField';
|
|
11
|
-
@import './components/VInput';
|
|
12
|
-
@import './components/VNavigationDrawer';
|
|
13
|
-
@import './components/VShadow';
|
|
14
|
-
@import './components/VTextField';
|
|
15
|
-
@import './components/VTabs';
|
|
16
|
-
@import './components/VCustomDataTable';
|
|
17
|
-
@import './components/approval';
|
|
18
|
-
|
|
19
|
-
@import './pages/dashboards';
|
|
20
|
-
|
|
21
|
-
@import 'vue3-perfect-scrollbar/style.css';
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* API Service for making CRUD operations
|
|
3
|
-
*
|
|
4
|
-
* This service provides a simple interface for common API operations.
|
|
5
|
-
* It works with any axios-compatible instance.
|
|
6
|
-
*/
|
|
7
|
-
import type { AxiosInstance } from 'axios';
|
|
8
|
-
import axiosInstance from './axiosInstance';
|
|
9
|
-
|
|
10
|
-
export interface ApiService {
|
|
11
|
-
fetch(params?: Record<string, any>): Promise<any>;
|
|
12
|
-
create(data: any): Promise<any>;
|
|
13
|
-
update(data: any): Promise<any>;
|
|
14
|
-
delete(id: string | number): Promise<any>;
|
|
15
|
-
get(id: string | number): Promise<any>;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Creates an API service instance for a given resource
|
|
20
|
-
* @param axiosInst - Axios instance to use (defaults to library's axiosInstance)
|
|
21
|
-
* @param resource - API resource path (e.g., '/api/users')
|
|
22
|
-
*/
|
|
23
|
-
export default function apiService(
|
|
24
|
-
axiosInst: AxiosInstance = axiosInstance,
|
|
25
|
-
resource: string
|
|
26
|
-
): ApiService {
|
|
27
|
-
const baseUrl = resource.startsWith('/') ? resource : `/${resource}`;
|
|
28
|
-
|
|
29
|
-
return {
|
|
30
|
-
async fetch(params: Record<string, any> = {}) {
|
|
31
|
-
const response = await axiosInst.get(baseUrl, { params });
|
|
32
|
-
return response;
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
async create(data: any) {
|
|
36
|
-
const response = await axiosInst.post(baseUrl, data);
|
|
37
|
-
return response;
|
|
38
|
-
},
|
|
39
|
-
|
|
40
|
-
async update(data: any) {
|
|
41
|
-
if (!data.id) {
|
|
42
|
-
throw new Error('Update requires an id field');
|
|
43
|
-
}
|
|
44
|
-
const response = await axiosInst.put(`${baseUrl}/${data.id}`, data);
|
|
45
|
-
return response;
|
|
46
|
-
},
|
|
47
|
-
|
|
48
|
-
async delete(id: string | number) {
|
|
49
|
-
const response = await axiosInst.delete(`${baseUrl}/${id}`);
|
|
50
|
-
return response;
|
|
51
|
-
},
|
|
52
|
-
|
|
53
|
-
async get(id: string | number) {
|
|
54
|
-
const response = await axiosInst.get(`${baseUrl}/${id}`);
|
|
55
|
-
return response;
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Axios instance for the UI Kit library
|
|
3
|
-
*
|
|
4
|
-
* This is a minimal wrapper around axios. In your consuming app,
|
|
5
|
-
* you can configure axios globally and this will use the default instance.
|
|
6
|
-
*
|
|
7
|
-
* For custom configuration, you can import and set your own axios instance.
|
|
8
|
-
*/
|
|
9
|
-
import axios from 'axios';
|
|
10
|
-
|
|
11
|
-
// Export the default axios instance or a configured instance
|
|
12
|
-
// Consuming apps can configure axios globally before importing the library
|
|
13
|
-
export default axios;
|
|
14
|
-
|
package/src/stores/customizer.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { defineStore } from 'pinia';
|
|
2
|
-
|
|
3
|
-
export const useCustomizerStore = defineStore({
|
|
4
|
-
id: 'customizer',
|
|
5
|
-
state: () => ({
|
|
6
|
-
Sidebar_drawer: false,
|
|
7
|
-
Customizer_drawer: false,
|
|
8
|
-
mini_sidebar: false,
|
|
9
|
-
fontTheme: 'inter',
|
|
10
|
-
inputBg: 'default',
|
|
11
|
-
layoutType: 'full-width',
|
|
12
|
-
actTheme: 'modern',
|
|
13
|
-
loading: false,
|
|
14
|
-
themeMode: 'light', // 'light' or 'dark'
|
|
15
|
-
menuOrientation: 'vertical' // 'vertical' or 'horizontal'
|
|
16
|
-
}),
|
|
17
|
-
|
|
18
|
-
getters: {
|
|
19
|
-
getActTheme: (state) => state.actTheme,
|
|
20
|
-
},
|
|
21
|
-
actions: {
|
|
22
|
-
SET_SIDEBAR_DRAWER(payload?: boolean) {
|
|
23
|
-
if (payload !== undefined) {
|
|
24
|
-
this.Sidebar_drawer = payload;
|
|
25
|
-
} else {
|
|
26
|
-
this.Sidebar_drawer = !this.Sidebar_drawer;
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
SET_MINI_SIDEBAR(payload: boolean) {
|
|
30
|
-
this.mini_sidebar = payload;
|
|
31
|
-
},
|
|
32
|
-
SET_CUSTOMIZER_DRAWER(payload: boolean) {
|
|
33
|
-
this.Customizer_drawer = payload;
|
|
34
|
-
},
|
|
35
|
-
SET_FONT(payload: string) {
|
|
36
|
-
this.fontTheme = payload;
|
|
37
|
-
},
|
|
38
|
-
SET_THEME(payload: string) {
|
|
39
|
-
this.actTheme = payload;
|
|
40
|
-
},
|
|
41
|
-
SET_LOADING(payload: boolean) {
|
|
42
|
-
this.loading = payload;
|
|
43
|
-
},
|
|
44
|
-
SET_LAYOUT_TYPE(payload: string) {
|
|
45
|
-
this.layoutType = payload;
|
|
46
|
-
},
|
|
47
|
-
SET_THEME_MODE(payload: string) {
|
|
48
|
-
this.themeMode = payload;
|
|
49
|
-
},
|
|
50
|
-
SET_MENU_ORIENTATION(payload: string) {
|
|
51
|
-
this.menuOrientation = payload;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
});
|
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
import { defineStore } from 'pinia';
|
|
2
|
-
|
|
3
|
-
// Minimal customer info interface for permissions store
|
|
4
|
-
interface CustomerInfo {
|
|
5
|
-
isUserInfoLoaded: boolean;
|
|
6
|
-
getUserRoles: string[];
|
|
7
|
-
getUserLotusRoles: string[];
|
|
8
|
-
hasRole: (role: string) => boolean;
|
|
9
|
-
hasLotusRole: (role: string) => boolean;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
// Simple stub - consuming apps should provide their own customer info store
|
|
13
|
-
// or configure permissions store with their own user info
|
|
14
|
-
let customerInfoStore: CustomerInfo | null = null;
|
|
15
|
-
|
|
16
|
-
export function setCustomerInfoStore(store: CustomerInfo) {
|
|
17
|
-
customerInfoStore = store;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
function useCustomerInfoStore(): CustomerInfo {
|
|
21
|
-
if (!customerInfoStore) {
|
|
22
|
-
// Return default empty store if not configured
|
|
23
|
-
return {
|
|
24
|
-
isUserInfoLoaded: false,
|
|
25
|
-
getUserRoles: [],
|
|
26
|
-
getUserLotusRoles: [],
|
|
27
|
-
hasRole: () => false,
|
|
28
|
-
hasLotusRole: () => false
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
return customerInfoStore;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export interface MenuPermission {
|
|
35
|
-
menuKey: string;
|
|
36
|
-
requiredRoles: string[];
|
|
37
|
-
requiredLotusRoles?: string[];
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export const usePermissionsStore = defineStore({
|
|
41
|
-
id: 'permissions',
|
|
42
|
-
state: () => ({
|
|
43
|
-
menuPermissions: [
|
|
44
|
-
{
|
|
45
|
-
menuKey: 'approval_new',
|
|
46
|
-
requiredRoles: ['SMP_CREATE_APPROVAL']
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
menuKey: 'approval_edit',
|
|
50
|
-
requiredRoles: ['SMP_EDIT_APPROVAL']
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
menuKey: 'cartable',
|
|
54
|
-
requiredRoles: ['SMP_VIEW_CARTABLE']
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
menuKey: 'cartable_operation',
|
|
58
|
-
requiredRoles: ['SMP_CARTABLE_OPERATION']
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
menuKey: 'cartable_history',
|
|
62
|
-
requiredRoles: ['SMP_CARTABLE_HIST']
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
menuKey: 'approval_history',
|
|
66
|
-
requiredRoles: ['SMP_APPROVAL_HIST']
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
menuKey: 'flow_management',
|
|
70
|
-
requiredRoles: ['SMP_CREATE_FLOW_MNG']
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
menuKey: 'basic_info',
|
|
74
|
-
requiredRoles: ['SMP_BASIC_INFO']
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
menuKey: 'report',
|
|
78
|
-
requiredRoles: ['SMP_REPORT']
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
menuKey: 'flowManagement',
|
|
82
|
-
requiredRoles: ['SMP_CREATE_FLOW_MNG']
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
menuKey: 'preApprovalReport',
|
|
86
|
-
requiredRoles: ['SMP_PRE_APPROVAL_RPT']
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
menuKey: 'cartableReport',
|
|
90
|
-
requiredRoles: ['SMP_CARTABLE_RPT']
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
menuKey: 'addFile',
|
|
94
|
-
requiredRoles: ['SMP_ADD_FILE']
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
menuKey: 'download1016',
|
|
98
|
-
requiredRoles: ['SMP_DOWNLOAD_1016']
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
menuKey: 'reviewExpertReport',
|
|
102
|
-
requiredRoles: ['SMP_REVIEW_EXPERT_RPT']
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
menuKey: 'downloadExpertReport',
|
|
106
|
-
requiredRoles: ['SMP_DOWNLOAD_EXPERT_RPT_FILE']
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
menuKey: 'downloadDirectiveReport',
|
|
110
|
-
requiredRoles: ['SMP_DL_DIRECTIVE_RPT']
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
menuKey: 'regionPreApprovalReport',
|
|
114
|
-
requiredRoles: ['SMP_REGION_PRE_APPROVAL_RPT']
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
menuKey: 'directiveReport',
|
|
118
|
-
requiredRoles: ['SMP_DIRECTIVE_RPT']
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
menuKey: 'uploadExpertReport',
|
|
122
|
-
requiredRoles: ['SMP_UPLOAD_EXPERT_RPT_FILE']
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
menuKey: 'changeSigner',
|
|
126
|
-
requiredRoles: ['SMP_CHANGE_SIGNER']
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
menuKey: 'regenerate1016',
|
|
130
|
-
requiredRoles: ['SMP_REGEN_1016']
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
menuKey: 'regenerateRegionApproval',
|
|
134
|
-
requiredRoles: ['SMP_REGEN_REGION_RPT']
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
menuKey: 'regeneratePreApproval',
|
|
138
|
-
requiredRoles: ['SMP_REGEN_PRE_APPROVAL_RPT']
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
menuKey: 'regenerateDirective',
|
|
142
|
-
requiredRoles: ['SMP_REGEN_DIRECTIVE_RPT']
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
menuKey: 'approvalSignerReport',
|
|
146
|
-
requiredRoles: ['SMP_APPROVAL_SIGNER_RPT']
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
menuKey: 'downloadApprovalReport',
|
|
150
|
-
requiredRoles: ['SMP_DL_APPROVAL_RPT']
|
|
151
|
-
}
|
|
152
|
-
] as MenuPermission[]
|
|
153
|
-
}),
|
|
154
|
-
|
|
155
|
-
getters: {
|
|
156
|
-
// Check if user has permission for a specific menu
|
|
157
|
-
hasMenuPermission: (state) => (menuKey: string) => {
|
|
158
|
-
const customerInfo = useCustomerInfoStore();
|
|
159
|
-
const permission = state.menuPermissions.find((p) => p.menuKey === menuKey);
|
|
160
|
-
|
|
161
|
-
if (!permission) return true; // If no permission defined, allow access
|
|
162
|
-
|
|
163
|
-
// If user info is not loaded, allow access to prevent sidebar from being empty
|
|
164
|
-
if (!customerInfo.isUserInfoLoaded) return true;
|
|
165
|
-
|
|
166
|
-
const userRoles = customerInfo.getUserRoles || [];
|
|
167
|
-
const userLotusRoles = customerInfo.getUserLotusRoles || [];
|
|
168
|
-
|
|
169
|
-
// If user has no roles at all, allow access to prevent sidebar from being empty
|
|
170
|
-
if (userRoles.length === 0 && userLotusRoles.length === 0) return true;
|
|
171
|
-
|
|
172
|
-
// Check required roles
|
|
173
|
-
const hasRequiredRole = permission.requiredRoles.some((role) => userRoles.includes(role));
|
|
174
|
-
|
|
175
|
-
// Check required lotus roles if defined
|
|
176
|
-
const hasRequiredLotusRole = permission.requiredLotusRoles
|
|
177
|
-
? permission.requiredLotusRoles.some((role) => userLotusRoles.includes(role))
|
|
178
|
-
: true;
|
|
179
|
-
|
|
180
|
-
return hasRequiredRole && hasRequiredLotusRole;
|
|
181
|
-
},
|
|
182
|
-
|
|
183
|
-
// Get all available menu permissions for current user
|
|
184
|
-
getAvailableMenus: (state) => {
|
|
185
|
-
const customerInfo = useCustomerInfoStore();
|
|
186
|
-
if (!customerInfo.isUserInfoLoaded) return [];
|
|
187
|
-
|
|
188
|
-
return state.menuPermissions.filter((permission) => {
|
|
189
|
-
const userRoles = customerInfo.getUserRoles;
|
|
190
|
-
const userLotusRoles = customerInfo.getUserLotusRoles;
|
|
191
|
-
|
|
192
|
-
const hasRequiredRole = permission.requiredRoles.some((role) => userRoles.includes(role));
|
|
193
|
-
|
|
194
|
-
const hasRequiredLotusRole = permission.requiredLotusRoles
|
|
195
|
-
? permission.requiredLotusRoles.some((role) => userLotusRoles.includes(role))
|
|
196
|
-
: true;
|
|
197
|
-
|
|
198
|
-
return hasRequiredRole && hasRequiredLotusRole;
|
|
199
|
-
});
|
|
200
|
-
},
|
|
201
|
-
|
|
202
|
-
// Check if user has any of the specified roles
|
|
203
|
-
hasAnyRole: () => (roles: string[]) => {
|
|
204
|
-
const customerInfo = useCustomerInfoStore();
|
|
205
|
-
return roles.some((role) => customerInfo.hasRole(role));
|
|
206
|
-
},
|
|
207
|
-
|
|
208
|
-
// Check if user has any of the specified lotus roles
|
|
209
|
-
hasAnyLotusRole: () => (roles: string[]) => {
|
|
210
|
-
const customerInfo = useCustomerInfoStore();
|
|
211
|
-
return roles.some((role) => customerInfo.hasLotusRole(role));
|
|
212
|
-
}
|
|
213
|
-
},
|
|
214
|
-
|
|
215
|
-
actions: {
|
|
216
|
-
// Add new menu permission
|
|
217
|
-
addMenuPermission(permission: MenuPermission) {
|
|
218
|
-
this.menuPermissions.push(permission);
|
|
219
|
-
},
|
|
220
|
-
|
|
221
|
-
// Remove menu permission
|
|
222
|
-
removeMenuPermission(menuKey: string) {
|
|
223
|
-
const index = this.menuPermissions.findIndex((p) => p.menuKey === menuKey);
|
|
224
|
-
if (index !== -1) {
|
|
225
|
-
this.menuPermissions.splice(index, 1);
|
|
226
|
-
}
|
|
227
|
-
},
|
|
228
|
-
|
|
229
|
-
// Update menu permission
|
|
230
|
-
updateMenuPermission(menuKey: string, permission: Partial<MenuPermission>) {
|
|
231
|
-
const index = this.menuPermissions.findIndex((p) => p.menuKey === menuKey);
|
|
232
|
-
if (index !== -1) {
|
|
233
|
-
this.menuPermissions[index] = { ...this.menuPermissions[index], ...permission };
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
});
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { ThemeTypes } from '@/types/themeTypes/ThemeType';
|
|
2
|
-
|
|
3
|
-
const DarkModernTheme: ThemeTypes = {
|
|
4
|
-
name: 'DarkModernTheme',
|
|
5
|
-
dark: true,
|
|
6
|
-
variables: {
|
|
7
|
-
'border-color': '#6366f1',
|
|
8
|
-
'carousel-control-size': 10
|
|
9
|
-
},
|
|
10
|
-
colors: {
|
|
11
|
-
primary: '#6366f1', // Modern indigo
|
|
12
|
-
secondary: '#8b5cf6', // Purple
|
|
13
|
-
info: '#06b6d4', // Cyan
|
|
14
|
-
success: '#10b981', // Emerald
|
|
15
|
-
accent: '#f59e0b', // Amber
|
|
16
|
-
warning: '#f59e0b', // Amber
|
|
17
|
-
error: '#ef4444', // Red
|
|
18
|
-
lightprimary: '#1e1b4b', // Indigo 900
|
|
19
|
-
lightsecondary: '#1e1b4b', // Indigo 900
|
|
20
|
-
lightsuccess: '#064e3b', // Green 900
|
|
21
|
-
lighterror: '#7f1d1d', // Red 900
|
|
22
|
-
lightwarning: '#78350f', // Amber 900
|
|
23
|
-
darkText: '#f9fafb', // Gray 50
|
|
24
|
-
lightText: '#d1d5db', // Gray 300
|
|
25
|
-
darkprimary: '#818cf8', // Indigo 400
|
|
26
|
-
darksecondary: '#a78bfa', // Purple 400
|
|
27
|
-
borderLight: '#374151', // Gray 700
|
|
28
|
-
inputBorder: '#4b5563', // Gray 600
|
|
29
|
-
containerBg: '#111827', // Gray 900
|
|
30
|
-
surface: '#0f172a', // Slate 900
|
|
31
|
-
'on-surface-variant': '#e2e8f0', // Slate 200
|
|
32
|
-
facebook: '#4267b2',
|
|
33
|
-
twitter: '#1da1f2',
|
|
34
|
-
linkedin: '#0e76a8',
|
|
35
|
-
gray100: '#1f2937', // Gray 800
|
|
36
|
-
primary200: '#312e81', // Indigo 800
|
|
37
|
-
secondary200: '#5b21b6', // Purple 800
|
|
38
|
-
white: '#FFFFFF',
|
|
39
|
-
// Additional color variations
|
|
40
|
-
primary300: '#c7d2fe',
|
|
41
|
-
primary400: '#7590f1',
|
|
42
|
-
primary500: '#5a4fe4',
|
|
43
|
-
primary600: '#483bc5',
|
|
44
|
-
primary700: '#22215e',
|
|
45
|
-
primary800: '#0b0b5a',
|
|
46
|
-
primary900: '#03031b',
|
|
47
|
-
|
|
48
|
-
secondary400: '#581c87', // Purple 800
|
|
49
|
-
secondary600: '#6b21a8', // Purple 700
|
|
50
|
-
secondary800: '#4c1d95' // Purple 900
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
export { DarkModernTheme };
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import type { ThemeTypes } from '@/types/themeTypes/ThemeType';
|
|
2
|
-
|
|
3
|
-
const DarkOrangeTheme: ThemeTypes = {
|
|
4
|
-
name: 'DarkOrangeTheme',
|
|
5
|
-
dark: true,
|
|
6
|
-
variables: {
|
|
7
|
-
'border-color': '#C77E23',
|
|
8
|
-
'carousel-control-size': 10
|
|
9
|
-
},
|
|
10
|
-
colors: {
|
|
11
|
-
primary: '#C77E23',
|
|
12
|
-
secondary: '#16595A',
|
|
13
|
-
info: '#03c9d7',
|
|
14
|
-
success: '#00c853',
|
|
15
|
-
accent: '#FFAB91',
|
|
16
|
-
warning: '#ffc107',
|
|
17
|
-
error: '#f44336',
|
|
18
|
-
lightprimary: '#2D1B0A',
|
|
19
|
-
lightsecondary: '#1A2A2A',
|
|
20
|
-
lightsuccess: '#1B3A1B',
|
|
21
|
-
lighterror: '#3A1B1B',
|
|
22
|
-
lightwarning: '#3A2F1B',
|
|
23
|
-
darkText: '#FFFFFF',
|
|
24
|
-
lightText: '#B0B0B0',
|
|
25
|
-
darkprimary: '#E89B4A',
|
|
26
|
-
darksecondary: '#1F7A7A',
|
|
27
|
-
borderLight: '#404040',
|
|
28
|
-
inputBorder: '#606060',
|
|
29
|
-
containerBg: '#1A1A1A',
|
|
30
|
-
surface: '#121212',
|
|
31
|
-
'on-surface-variant': '#E0E0E0',
|
|
32
|
-
facebook: '#4267b2',
|
|
33
|
-
twitter: '#1da1f2',
|
|
34
|
-
linkedin: '#0e76a8',
|
|
35
|
-
gray100: '#2A2A2A',
|
|
36
|
-
primary200: '#2D1B0A',
|
|
37
|
-
secondary200: '#1A2A2A',
|
|
38
|
-
white: '#FFFFFF',
|
|
39
|
-
// Additional color variations
|
|
40
|
-
primary300: '#F4E6D3',
|
|
41
|
-
primary400: '#edb27e',
|
|
42
|
-
primary500: '#efa168',
|
|
43
|
-
primary600: '#dc823a',
|
|
44
|
-
primary700: '#884a17',
|
|
45
|
-
primary800: '#603210',
|
|
46
|
-
primary900: '#351b09',
|
|
47
|
-
secondary400: '#2A4040',
|
|
48
|
-
secondary600: '#1F7A7A',
|
|
49
|
-
secondary800: '#0F4748'
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
export { DarkOrangeTheme };
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { ThemeTypes } from '@/types/themeTypes/ThemeType';
|
|
2
|
-
|
|
3
|
-
const DarkPurpleTheme: ThemeTypes = {
|
|
4
|
-
name: 'DarkPurpleTheme',
|
|
5
|
-
dark: true,
|
|
6
|
-
variables: {
|
|
7
|
-
'border-color': '#1e88e5',
|
|
8
|
-
'carousel-control-size': 10
|
|
9
|
-
},
|
|
10
|
-
colors: {
|
|
11
|
-
primary: '#1e88e5',
|
|
12
|
-
secondary: '#5e35b1',
|
|
13
|
-
info: '#03c9d7',
|
|
14
|
-
success: '#00c853',
|
|
15
|
-
accent: '#FFAB91',
|
|
16
|
-
warning: '#ffc107',
|
|
17
|
-
error: '#f44336',
|
|
18
|
-
lightprimary: '#1B2A3A',
|
|
19
|
-
lightsecondary: '#2A1B3A',
|
|
20
|
-
lightsuccess: '#1B3A1B',
|
|
21
|
-
lighterror: '#3A1B1B',
|
|
22
|
-
lightwarning: '#3A2F1B',
|
|
23
|
-
darkText: '#FFFFFF',
|
|
24
|
-
lightText: '#B0B0B0',
|
|
25
|
-
darkprimary: '#42A5F5',
|
|
26
|
-
darksecondary: '#7B1FA2',
|
|
27
|
-
borderLight: '#404040',
|
|
28
|
-
inputBorder: '#606060',
|
|
29
|
-
containerBg: '#1A1A1A',
|
|
30
|
-
surface: '#121212',
|
|
31
|
-
'on-surface-variant': '#E0E0E0',
|
|
32
|
-
facebook: '#4267b2',
|
|
33
|
-
twitter: '#1da1f2',
|
|
34
|
-
linkedin: '#0e76a8',
|
|
35
|
-
gray100: '#2A2A2A',
|
|
36
|
-
primary200: '#1B2A3A',
|
|
37
|
-
secondary200: '#2A1B3A',
|
|
38
|
-
white: '#FFFFFF',
|
|
39
|
-
// Additional color variations
|
|
40
|
-
primary300: '#9fd0f3',
|
|
41
|
-
primary400: '#87bbef',
|
|
42
|
-
primary500: '#5c9fed',
|
|
43
|
-
primary600: '#2567af',
|
|
44
|
-
primary700: '#144a8f',
|
|
45
|
-
primary800: '#093260',
|
|
46
|
-
primary900: '#051832',
|
|
47
|
-
|
|
48
|
-
secondary400: '#4A2A5A',
|
|
49
|
-
secondary600: '#7B1FA2',
|
|
50
|
-
secondary800: '#512DA8'
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
export { DarkPurpleTheme };
|