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/images/customer-CORP-avartar-female.png b/public/images/customer-CORP-avartar-female.png index 446ef866..4cbb894f 100644 Binary files a/public/images/customer-CORP-avartar-female.png and b/public/images/customer-CORP-avartar-female.png differ diff --git a/public/images/customer-CORP-avartar-male.png b/public/images/customer-CORP-avartar-male.png index 6ad95d7d..ae177f60 100644 Binary files a/public/images/customer-CORP-avartar-male.png and b/public/images/customer-CORP-avartar-male.png differ diff --git a/public/images/customer-PERS-avartar-female.png b/public/images/customer-PERS-avartar-female.png index ca0a2bf1..c3ba574e 100644 Binary files a/public/images/customer-PERS-avartar-female.png and b/public/images/customer-PERS-avartar-female.png differ diff --git a/public/images/customer-PERS-avartar-male.png b/public/images/customer-PERS-avartar-male.png index e9fd15fe..ce0ab20c 100644 Binary files a/public/images/customer-PERS-avartar-male.png and b/public/images/customer-PERS-avartar-male.png differ diff --git a/public/images/employee-avatar-female.png b/public/images/employee-avatar-female.png index 66ace3a0..ce9370f1 100644 Binary files a/public/images/employee-avatar-female.png and b/public/images/employee-avatar-female.png differ diff --git a/public/images/employee-avatar-male.png b/public/images/employee-avatar-male.png index a8daa8ff..aaf5fb1f 100644 Binary files a/public/images/employee-avatar-male.png and b/public/images/employee-avatar-male.png differ 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/public/no-img-female.png b/public/no-img-female.png index 4e177dca..95f959ff 100644 Binary files a/public/no-img-female.png and b/public/no-img-female.png differ diff --git a/public/no-img-man.png b/public/no-img-man.png index 861f356a..f0ccba15 100644 Binary files a/public/no-img-man.png and b/public/no-img-man.png differ diff --git a/public/option/option.json b/public/option/option.json index c5ea33cd..963c4ad2 100644 --- a/public/option/option.json +++ b/public/option/option.json @@ -183,15 +183,15 @@ "prefix": [ { - "label": "Mr", + "label": "MR", "value": "mr" }, { - "label": "Mrs", + "label": "MRS", "value": "mrs" }, { - "label": "Miss", + "label": "MISS", "value": "miss" } ], 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/BranchCard.vue b/src/components/01_branch-management/BranchCard.vue index 83c268ba..c10d63fc 100644 --- a/src/components/01_branch-management/BranchCard.vue +++ b/src/components/01_branch-management/BranchCard.vue @@ -89,15 +89,7 @@ defineProps<{ -
+ diff --git a/src/components/04_product-service/WorkManagementComponent.vue b/src/components/04_product-service/WorkManagementComponent.vue index e79872d9..86e79951 100644 --- a/src/components/04_product-service/WorkManagementComponent.vue +++ b/src/components/04_product-service/WorkManagementComponent.vue @@ -98,7 +98,8 @@ watch( (c, o) => { const list = c.map((v: { name: string }) => v.name); const oldList = o.map((v: { name: string }) => v.name); - const index = oldList.indexOf(workName.value || ''); + const index = workName.value ? oldList.indexOf(workName.value) : -1; + if (index === -1) return; if ( list[index] !== oldList[index] && @@ -704,8 +705,8 @@ watch( } :deep( - .q-item__section.column.q-item__section--side.justify-center.q-item__section--avatar.q-focusable.relative-position.cursor-pointer - ) { + .q-item__section.column.q-item__section--side.justify-center.q-item__section--avatar.q-focusable.relative-position.cursor-pointer +) { justify-content: start !important; padding-right: 8px !important; padding-top: 16px; @@ -735,8 +736,8 @@ watch( } :deep( - i.q-icon.mdi.mdi-chevron-down-circle.q-expansion-item__toggle-icon.q-expansion-item__toggle-icon--rotated - ) { + i.q-icon.mdi.mdi-chevron-down-circle.q-expansion-item__toggle-icon.q-expansion-item__toggle-icon--rotated +) { color: var(--brand-1); } diff --git a/src/components/04_product-service/WorkNameManagement.vue b/src/components/04_product-service/WorkNameManagement.vue index 2bde41ce..81854b9e 100644 --- a/src/components/04_product-service/WorkNameManagement.vue +++ b/src/components/04_product-service/WorkNameManagement.vue @@ -1,7 +1,6 @@ diff --git a/src/components/08_request-list/DataDisplay.vue b/src/components/08_request-list/DataDisplay.vue index 30a8e52b..f36acb4f 100644 --- a/src/components/08_request-list/DataDisplay.vue +++ b/src/components/08_request-list/DataDisplay.vue @@ -27,26 +27,38 @@ withDefaults( class="app-text-muted q-pr-sm" :width="iconSize || '2rem'" /> - - + + {{ label }} - + {{ value }} {{ value }} - + {{ item }} diff --git a/src/components/11_credit-note/FormCredit.vue b/src/components/11_credit-note/FormCredit.vue index b6e2bf1f..5e4ee55b 100644 --- a/src/components/11_credit-note/FormCredit.vue +++ b/src/components/11_credit-note/FormCredit.vue @@ -8,6 +8,10 @@ defineProps<{ const quotationId = defineModel('quotationId', { required: true, }); +const isDebitNote = defineModel('isDebitNote', { + required: false, + default: false, +}); + + { + + { +import { ref, watch } from 'vue'; +import { dateFormatJS } from 'src/utils/datetime'; +import SelectInput from './SelectInput.vue'; +import VueDatePicker from '@vuepic/vue-datepicker'; +import dayjs from 'dayjs'; + +defineProps<{ + active?: boolean; +}>(); + +const date = defineModel(); + +const dateRange = ref(''); +const isDateSelect = ref(false); + +function mapDateRange(val: string) { + const today = dayjs(); + let start: dayjs.Dayjs, end: dayjs.Dayjs; + + switch (val) { + case 'toDay': + start = today.startOf('day'); + end = today.endOf('day'); + break; + case 'yesterday': + start = today.subtract(1, 'day').startOf('day'); + end = today.subtract(1, 'day').endOf('day'); + break; + case 'thisWeek': + start = today.startOf('week'); + end = today.endOf('week'); + break; + case 'lastWeek': + start = today.subtract(1, 'week').startOf('week'); + end = today.subtract(1, 'week').endOf('week'); + break; + case 'thisMonth': + start = today.startOf('month'); + end = today.endOf('month'); + break; + case 'lastMonth': + start = today.subtract(1, 'month').startOf('month'); + end = today.subtract(1, 'month').endOf('month'); + break; + case 'thisYear': + start = today.startOf('year'); + end = today.endOf('year'); + break; + case 'lastYear': + start = today.subtract(1, 'year').startOf('year'); + end = today.subtract(1, 'year').endOf('year'); + break; + case 'last7Days': + start = today.subtract(6, 'day').startOf('day'); + end = today.endOf('day'); + break; + case 'last30Days': + start = today.subtract(29, 'day').startOf('day'); + end = today.endOf('day'); + break; + case 'last90Days': + start = today.subtract(89, 'day').startOf('day'); + end = today.endOf('day'); + break; + case 'customDateRange': + start = today.startOf('day'); + end = today.endOf('day'); + break; + default: + return; + } + + return [start.toDate().toISOString(), end.toDate().toISOString()]; +} + +watch( + () => dateRange.value, + () => { + if (!dateRange.value) return; + date.value = mapDateRange(dateRange.value); + }, +); + +watch( + () => date.value, + () => { + if (date.value && date.value.length === 0) dateRange.value = ''; + }, +); + + 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') }} + + + (); defineEmits<{ @@ -76,8 +78,10 @@ defineEmits<{ />