diff --git a/package.json b/package.json index be62c38a..9638bb29 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "apexcharts": "^4.5.0", "axios": "^1.8.4", "cropperjs": "^1.6.2", + "dayjs": "^1.11.13", "highlight.js": "^11.11.1", "keycloak-js": "^25.0.6", "markdown-it": "^14.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 47c2eb49..7cb78cc6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: cropperjs: specifier: ^1.6.2 version: 1.6.2 + dayjs: + specifier: ^1.11.13 + version: 1.11.13 highlight.js: specifier: ^11.11.1 version: 11.11.1 @@ -1473,6 +1476,9 @@ packages: date-fns@3.6.0: resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} @@ -5272,6 +5278,8 @@ snapshots: date-fns@3.6.0: {} + dayjs@1.11.13: {} + de-indent@1.0.2: {} debug@2.6.9: diff --git a/public/img-group.png b/public/img-group.png new file mode 100644 index 00000000..0493168b Binary files /dev/null and b/public/img-group.png differ diff --git a/quasar.config.ts b/quasar.config.ts index cc0715ad..38bb94c1 100644 --- a/quasar.config.ts +++ b/quasar.config.ts @@ -31,7 +31,7 @@ export default defineConfig((ctx) => { devServer: { host: '0.0.0.0', open: false, - port: 5173, + port: 5174, }, framework: { config: {}, diff --git a/src/components/01_branch-management/FormBank.vue b/src/components/01_branch-management/FormBank.vue index 66f4241b..8c2b53bd 100644 --- a/src/components/01_branch-management/FormBank.vue +++ b/src/components/01_branch-management/FormBank.vue @@ -177,7 +177,7 @@ watch(
( const sourceNationality = defineModel( 'sourceNationality', ); -const importNationality = defineModel( +const importNationality = defineModel( 'importNationality', ); const trainingPlace = defineModel('trainingPlace'); const checkpoint = defineModel('checkpoint'); -const agencyFile = defineModel('agencyFile'); -const agencyFileList = - defineModel<{ name: string; url: string }[]>('agencyFileList'); +const userFile = defineModel('userFile'); +const userFileList = + defineModel<{ name: string; url: string }[]>('userFileList'); const remark = defineModel('remark'); const agencyStatus = defineModel('agencyStatus'); const attachmentRef = ref(); -const checkpointENOption = ref([]); defineProps<{ dense?: boolean; @@ -71,18 +70,12 @@ function deleteFile(name: string) { userStore.deleteAttachment(userId.value, payload); const result = await userStore.fetchAttachment(userId.value); if (result) { - agencyFileList.value = result; + userFileList.value = result; } }, cancel: () => {}, }); } - -onMounted(async () => { - const resultOption = await fetch('/option/option.json'); - const rawOption = await resultOption.json(); - checkpointENOption.value = rawOption.eng.border; -}); + + { {{ $t('general.noData') }} { {{ $t('personnel.MESSENGER') }} {
+ + + {{ $t('general.group') }} + + + {{ $t('general.noData') }} + + +
+ + + + +
+ {{ group.name }} +
+
+
- + { :deep(.q-dialog.fullscreen.no-pointer-events.q-dialog--modal) { visibility: hidden; } + +.transition-rotate { + transition: transform 0.3s ease; +} +.rotated { + transform: rotate(180deg); +} diff --git a/src/components/04_product-service/PriceDataComponent.vue b/src/components/04_product-service/PriceDataComponent.vue index 59043144..68ab5cbf 100644 --- a/src/components/04_product-service/PriceDataComponent.vue +++ b/src/components/04_product-service/PriceDataComponent.vue @@ -244,16 +244,19 @@ withDefaults( diff --git a/src/components/07_agencies-management/FormBasicInfoAgencies.vue b/src/components/07_agencies-management/FormBasicInfoAgencies.vue index f01bed38..7f3f3c5d 100644 --- a/src/components/07_agencies-management/FormBasicInfoAgencies.vue +++ b/src/components/07_agencies-management/FormBasicInfoAgencies.vue @@ -133,7 +133,7 @@ type Options = { label: string; value: string }; :readonly="readonly" hide-bottom-space class="col-md-4 col-12" - :label="$t('form.telephone')" + :label="$t('agencies.contactTel')" :model-value="readonly ? contactTel || '-' : contactTel" @update:model-value=" (v) => (typeof v === 'string' ? (contactTel = v) : '') diff --git a/src/components/FloatingActionButton.vue b/src/components/FloatingActionButton.vue index aa4c11b4..2d4b8541 100644 --- a/src/components/FloatingActionButton.vue +++ b/src/components/FloatingActionButton.vue @@ -1,6 +1,9 @@ @@ -10,10 +13,13 @@ defineProps<{ v-if="!hideIcon" id="btn-add" padding="sm" - icon="mdi-plus" + :icon="icon ? undefined : 'mdi-plus'" direction="up" class="color-btn" > + + > + + diff --git a/src/components/button/ImportButton.vue b/src/components/button/ImportButton.vue index 363bb0c3..c7d30509 100644 --- a/src/components/button/ImportButton.vue +++ b/src/components/button/ImportButton.vue @@ -1,8 +1,10 @@ diff --git a/src/components/button/PasteButton.vue b/src/components/button/PasteButton.vue new file mode 100644 index 00000000..c06a2833 --- /dev/null +++ b/src/components/button/PasteButton.vue @@ -0,0 +1,32 @@ + + + diff --git a/src/components/button/index.ts b/src/components/button/index.ts index d9b59582..9f3367ef 100644 --- a/src/components/button/index.ts +++ b/src/components/button/index.ts @@ -14,3 +14,4 @@ export { default as PrintButton } from './PrintButton.vue'; export { default as StateButton } from './StateButton.vue'; export { default as NextButton } from './NextButton.vue'; export { default as ImportButton } from './ImportButton.vue'; +export { default as PasteButton } from './PasteButton.vue'; diff --git a/src/components/shared/AdvanceSearch.vue b/src/components/shared/AdvanceSearch.vue new file mode 100644 index 00000000..5b5b33a9 --- /dev/null +++ b/src/components/shared/AdvanceSearch.vue @@ -0,0 +1,189 @@ + + diff --git a/src/components/shared/AvatarGroup.vue b/src/components/shared/AvatarGroup.vue index a3f3d85e..ed8f63ef 100644 --- a/src/components/shared/AvatarGroup.vue +++ b/src/components/shared/AvatarGroup.vue @@ -25,7 +25,11 @@ withDefaults( alt="Image" /> -
+
{{ person.name }} diff --git a/src/components/shared/KebabAction.vue b/src/components/shared/KebabAction.vue index 4dd095db..7bea6b36 100644 --- a/src/components/shared/KebabAction.vue +++ b/src/components/shared/KebabAction.vue @@ -16,6 +16,7 @@ const props = withDefaults( useUpload?: boolean; useCancel?: boolean; useRejectCancel?: boolean; + useCopy?: boolean; disableCancel?: boolean; disableDelete?: boolean; }>(), @@ -31,6 +32,7 @@ defineEmits<{ (e: 'link'): void; (e: 'upload'): void; (e: 'delete'): void; + (e: 'copy'): void; (e: 'cancel'): void; (e: 'rejectCancel'): void; (e: 'changeStatus'): void; @@ -172,6 +174,27 @@ watch( + + + + {{ $t('general.copy') }} + + + string | true)[]; }>(), @@ -82,7 +83,7 @@ watch( :hide-selected hide-bottom-space :fill-input="fillInput && !!model" - :hide-dropdown-icon="readonly" + :hide-dropdown-icon="readonly || hideDropdownIcon" input-debounce="500" :option-value=" typeof props.optionValue === 'string' ? props.optionValue : 'value' @@ -103,6 +104,11 @@ watch( } " :rules + @clear=" + () => { + multiple ? (model = []) : (model = ''); + } + " >