diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..42a5c4df --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,325 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +## [unreleased] + +### 🚀 Features + +- *(date-picker)* Readonly and disable handle +- Add abort upload controller as function args +- Add abort upload and upload progress handler +- Add workflow template store +- Add type +- Search and paging workflow template +- Add query to store +- Add api function invoice +- Add status filter +- Ad i19n +- Add field to type +- Add i18n +- Update quotation card +- Add switch component +- Also allow other type (num or enum) +- Add icon support for badge component +- Detect quotation status +- Change view by condition +- Add type payment +- Add view type +- Add dynamic color to quotation form info +- Convert back installment no function +- Filter by installment no +- Send selected installment no to preview +- Payment view +- Add shared product group +- Add params +- Remove flow from store +- Shared product group input +- Add tooltip on hover icon nly button +- Don't allow edit after accepted +- Paycondition +- Also get installment no from preset data +- Hide expire when condition met +- Add util for array management +- Add fetch payment fn +- Update payment stores +- Add attachment manager for payment store +- Add ref type for data +- Abstract function +- Add utils function for array +- Add notifcation store + +### 🐛 Bug Fixes + +- I18n +- Receipt dialog +- *(05)* Slip file display +- Employee customerBranch display (registerName) +- *(quotation-preview)* Discount not show +- Price calc +- Changing language doesn't work +- *(05)* Layout space and scroll +- *(01)* Search +- Quotation attachment +- *(04)* Payment type option +- *(01)* Search no data +- *(05)* Total padi remain display condition +- Double upload attachment +- *(04)* Search id, flow dialog +- Typo +- Type +- Search no data, data length display +- *(02)* Padding +- *(04)* Summary +- Pagination +- Workflow page +- Wrong type +- Workflow template => flow form data, scroll to last item, sidemenu active +- *(03)* Tel +- Comma input +- Total not update on change tab +- Type wf function +- Status not update on mount +- Assign step id +- Error import +- *(04)* Service type and store +- Main btn & select input component props, etc +- Workflow change status +- *(04)* Service with workflow +- Pagination boundary +- Service work product attributes (workflow) +- Change workflow template on work, undo issue +- Work product installmentNo +- Workname +- Typos + +### 🚜 Refactor + +- Get customerBranch by id +- Handle telephoneNo +- Handle show moo +- Assign after submit +- Format value before peview +- Add id +- Add query +- Search quotation +- *(utils)* Always append currency .00 +- *(form-quotation)* Layout +- Add type Payment +- Create payment file +- Edit btn add +- Move remark +- Add installments type to service +- By dueDate +- *(05)* Upload slip +- Add type installmentNo +- Add input installmentNo +- Handle negative value +- Handle max-width +- Edit name value filName -> nameField +- Upload file card component +- Payment status i18n, danger color +- ReceiptDialog +- Flowdialog +- Use built in query string instead +- I18n +- Workflow dialog & mock data +- Add installmentNo in node +- Add tab status quotation +- Delete title product +- Add installmentNo +- Edit layout input +- Edit status +- Tel i18n +- *(04 flow)* Type and create function +- Flow +- Add i18n +- Show expiration date +- Move function to utile +- Use i18n +- Calculate days expire +- Handle show date expire +- Create BadgeCompoent +- Use BadgeCompoent +- Allow non i118n text to be passed +- Add type QuotationStatus +- Handle QuotationStatus at create +- Create function changeStatus +- Create function accepted +- Create submitAccepted +- Test submit +- Adjust spacing +- Remove param +- Use icon on quotation card +- Prepare for switch view +- Workflow +- Handle rules registerName +- Convert numbers into thai text +- Add agentUserId +- Add type agentUserId +- Handle field only lagelPersonNo , registerName +- Handle type number +- Handle codeHome Not required +- Use variable for color +- Get stats customer +- Handle homeCode +- Set default +- Add payment store skeleton +- Use icon instead of character +- Handle nrcNO not required +- Show namePrefix +- Handle employmentOffice +- NrcNo can is null +- Handle agentUserId +- Handle fiel required form +- Hide add customer at quotation +- Add new column +- Edit column +- Switch nameEN +- Handle data is null +- Edit agent -> agentUserId +- Remove date from installments +- Add selectedAll +- Type paySplit add invoice +- Add table paySplit +- Edit table paySplit +- Id is null +- Invoice is null +- Add page invoice +- File name +- Project structure (1) +- Project structure (2) +- Update status +- Handle btn save +- Project structure (3) +- Util fn +- Handle peview mod +- Delete log +- Extract navigator into store instead + +### ⚙ïļ Miscellaneous Tasks + +- Change variable name +- Remove unused +- Format +- Deprecate function +- Add deprecated function + +### Refactro + +- By installmentNo +- Add i18n + +## [0.4.2] - 2024-10-21 + +### 🚜 Refactor + +- Use session storage instead + +### ⚙ïļ Miscellaneous Tasks + +- Clean + +## [0.4.1] - 2024-10-18 + +### 🐛 Bug Fixes + +- Error undefined + +### 🚜 Refactor + +- Final price width + +## [0.4.0] - 2024-10-18 + +### 🚀 Features + +- Add vat excluded calc +- Store data for preview +- Disable view mode +- Preview route and trigger preview +- Add print button +- *(i18n)* Add text +- *(doc-preview)* Add toolbar +- Add preview footer +- Remark +- Update button and spacing +- Display company name footer +- Add additional info to preview +- Detect edit mode +- Change mode on reset +- Detect if closeable +- Close button +- Add label +- Store it full response as source + +### 🐛 Bug Fixes + +- *(05)* End of month installments +- Paysplit assign & info display +- Stats not update when change tab with data updated +- Home page menu not working +- *(05)* Node to selected product +- Worker display number, expire date +- *(04)* Pay type +- Background +- Readonly quotation info +- *(05)* Display final price on quotation card +- PricePerUnit calc +- Missing import +- Price scope +- Name +- Wrong calc +- *(05)* Watch paysplit +- Quotation discount +- Remove button +- Type error +- Disabled / readonly field background +- *(05)* Product table +- Display name in table +- Split date +- Hide toggle status +- Reset not actually reset +- Typo +- Delete wrong row +- Warning color +- I18n +- Form info split input +- Readonly editor + +### 🚜 Refactor + +- Create fetchOption +- Create BankComponents +- Use bank +- Set Option +- Add id +- Add i18n +- Filter bank +- By value +- Add closeTab +- Use app button +- New tab +- Calculate value +- Add remark +- By remark +- Set value default +- Placeholder +- Fetchby id branch +- Edit layout bank +- By bank +- Change button +- Change to secondary button +- WarningClose +- Handle null +- Price data product +- Receipt dialog & type +- Add type +- By value at viewHeader + +### ⚙ïļ Miscellaneous Tasks + +- Clean +- Clean log + + diff --git a/cliff.toml b/cliff.toml new file mode 100644 index 00000000..7e2e4f7f --- /dev/null +++ b/cliff.toml @@ -0,0 +1,89 @@ +# git-cliff ~ default configuration file +# https://git-cliff.org/docs/configuration +# +# Lines starting with "#" are comments. +# Configuration options are organized into tables and keys. +# See documentation for more information on available options. + +[changelog] +# changelog header +header = """ +# Changelog\n +All notable changes to this project will be documented in this file.\n +""" +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="version-") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | striptags | trim | upper_first }} + {% for commit in commits | unique(attribute="message") %} + - {% if commit.scope %}*({{ commit.scope }})* {% endif %}\ + {% if commit.breaking %}ðŸ’Ĩ**breaking**ðŸ’Ĩ {% endif %}\ + {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" +# template for the changelog footer +footer = """ + +""" +# remove the leading and trailing s +trim = true +# postprocessors +postprocessors = [ + # { pattern = '', replace = "https://github.com/orhun/git-cliff" }, # replace repository URL +] + +[git] +# parse the commits based on https://www.conventionalcommits.org +conventional_commits = true +# filter out the commits that are not conventional +filter_unconventional = true +# process each line of a commit as an individual commit +split_commits = false +# regex for preprocessing the commit messages +commit_preprocessors = [ + # Replace issue numbers + #{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](/issues/${2}))"}, + # Check spelling of the commit with https://github.com/crate-ci/typos + # If the spelling is incorrect, it will be automatically fixed. + #{ pattern = '.*', replace_command = 'typos --write-changes -' }, +] +# regex for parsing and grouping commits +commit_parsers = [ + { message = "^feat", group = "🚀 Features" }, + { message = "^fix", group = "🐛 Bug Fixes" }, + { message = "^doc", group = "📚 Documentation" }, + { message = "^perf", group = "⚡ Performance" }, + { message = "^refactor", group = "🚜 Refactor" }, + { message = "^style", group = "ðŸŽĻ Styling" }, + { message = "^test", group = "🧊 Testing" }, + { message = "^chore\\(release\\): prepare for", skip = true }, + { message = "^chore\\(deps.*\\)", skip = true }, + { message = "^chore\\(pr\\)", skip = true }, + { message = "^chore\\(pull\\)", skip = true }, + { message = "^chore|^ci", group = "⚙ïļ Miscellaneous Tasks" }, + { body = ".*security", group = "ðŸ›Ąïļ Security" }, + { message = "^revert", group = "◀ïļ Revert" }, +] +# protect breaking changes from being skipped due to matching a skipping commit_parser +protect_breaking_commits = false +# filter out the commits that are not matched by commit parsers +filter_commits = false +# regex for matching git tags +# tag_pattern = "v[0-9].*" +# regex for skipping tags +# skip_tags = "" +# regex for ignoring tags +# ignore_tags = "" +# sort the tags topologically +topo_order = false +# sort the commits inside sections by oldest/newest order +sort_commits = "oldest" +# limit the number of commits included in the changelog. +limit_commits = 300 diff --git a/package.json b/package.json index 84aeae99..29fe5570 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "format": "prettier --write \"**/*.{js,ts,vue,scss,html,md,json}\" --ignore-path .gitignore", "test": "echo \"No test specified\" && exit 0", "dev": "quasar dev", - "build": "quasar build" + "build": "quasar build", + "changelog:generate": "git-cliff -o CHANGELOG.md" }, "dependencies": { "@quasar/extras": "^1.16.12", @@ -30,8 +31,10 @@ "socket.io-client": "^4.7.5", "tesseract.js": "^5.1.1", "thai-baht-text": "^2.0.5", + "udsv": "^0.6.0", "uuid": "^10.0.0", "vue": "^3.4.38", + "vue-dragscroll": "^4.0.6", "vue-i18n": "^9.14.0", "vue-pdf": "^4.3.0", "vue-router": "^4.4.3" @@ -51,7 +54,8 @@ "eslint-config-prettier": "^9.1.0", "eslint-plugin-vue": "^9.27.0", "prettier": "^3.3.3", - "typescript": "^5.5.4" + "typescript": "^5.5.4", + "vue-component-type-helpers": "^2.1.10" }, "engines": { "node": "^24 || ^22 || ^20 || ^18", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7e6f96da..20a9899a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -56,12 +56,18 @@ importers: thai-baht-text: specifier: ^2.0.5 version: 2.0.5 + udsv: + specifier: ^0.6.0 + version: 0.6.0 uuid: specifier: ^10.0.0 version: 10.0.0 vue: specifier: ^3.4.38 version: 3.4.38(typescript@5.5.4) + vue-dragscroll: + specifier: ^4.0.6 + version: 4.0.6(typescript@5.5.4) vue-i18n: specifier: ^9.14.0 version: 9.14.0(vue@3.4.38(typescript@5.5.4)) @@ -117,6 +123,9 @@ importers: typescript: specifier: ^5.5.4 version: 5.5.4 + vue-component-type-helpers: + specifier: ^2.1.10 + version: 2.1.10 packages: @@ -3395,6 +3404,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + udsv@0.6.0: + resolution: {integrity: sha512-na+0EoqqpDeNKZ0HVTtgYtFP9aQgsMwPM77UEK7g4OX2C42w+Qw7QZs9t1ocDGLidtcKJnsPy+o5XrBYaZfzCA==} + ufo@1.5.3: resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} @@ -3507,6 +3519,9 @@ packages: vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + vue-component-type-helpers@2.1.10: + resolution: {integrity: sha512-lfgdSLQKrUmADiSV6PbBvYgQ33KF3Ztv6gP85MfGaGaSGMTXORVaHT1EHfsqCgzRNBstPKYDmvAV9Do5CmJ07A==} + vue-demi@0.14.10: resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} engines: {node: '>=12'} @@ -3518,6 +3533,9 @@ packages: '@vue/composition-api': optional: true + vue-dragscroll@4.0.6: + resolution: {integrity: sha512-zW1k58p41yhmFhmg/JxfesUM4Srl0JfXg7xSINqffVGpHJKvnEHMK4QgF6mUVkPMTgibn976fhPYkomcXPvvFA==} + vue-eslint-parser@9.4.3: resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==} engines: {node: ^14.17.0 || >=16.0.0} @@ -7345,6 +7363,8 @@ snapshots: typescript@5.5.4: {} + udsv@0.6.0: {} + ufo@1.5.3: {} undici-types@6.19.8: {} @@ -7431,10 +7451,18 @@ snapshots: vm-browserify@1.1.2: {} + vue-component-type-helpers@2.1.10: {} + vue-demi@0.14.10(vue@3.4.38(typescript@5.5.4)): dependencies: vue: 3.4.38(typescript@5.5.4) + vue-dragscroll@4.0.6(typescript@5.5.4): + dependencies: + vue: 3.4.38(typescript@5.5.4) + transitivePeerDependencies: + - typescript + vue-eslint-parser@9.4.3(eslint@8.57.0): dependencies: debug: 4.3.4 diff --git a/public/images/building-banner.png b/public/images/building-banner.png new file mode 100644 index 00000000..656ed3c1 Binary files /dev/null and b/public/images/building-banner.png differ diff --git a/public/images/quotation-avatar-border.png b/public/images/quotation-avatar-border.png new file mode 100644 index 00000000..1e2e11da Binary files /dev/null and b/public/images/quotation-avatar-border.png differ diff --git a/public/images/quotation-avatar.png b/public/images/quotation-avatar.png index 754e33a2..460b91f8 100644 Binary files a/public/images/quotation-avatar.png and b/public/images/quotation-avatar.png differ diff --git a/public/option/option.json b/public/option/option.json index 623d6ff4..eb20dd0b 100644 --- a/public/option/option.json +++ b/public/option/option.json @@ -1,5 +1,51 @@ { "eng": { + "workerStatus": [ + { + "label": "Normal", + "value": "normal" + }, + { + "label": "Service Canceled", + "value": "canceled" + }, + { + "label": "Resigned", + "value": "resigned" + }, + { + "label": "Absconded", + "value": "absconded" + }, + { + "label": "Deceased", + "value": "deceased" + }, + { + "label": "Repatriated to Home Country", + "value": "repatriated" + }, + { + "label": "Did Not Enter Thailand", + "value": "not_entered" + } + ], + + "workerType": [ + { + "label": "Bangkok Bank", + "value": "mou" + }, + { + "label": "Nationality Verification Group", + "value": "nvg" + }, + { + "label": "Border Pass Group", + "value": "bp" + } + ], + "bankBook": [ { "label": "Bangkok Bank", @@ -53,131 +99,62 @@ } ], "typeProduct": [ - { - "label": "AC", - "value": "AC" - }, - { - "label": "DOE", - "value": "DOE" - }, - { - "label": "HP", - "value": "HP" - }, - { - "label": "IMM", - "value": "IMM" - }, - { - "label": "MOUC", - "value": "MOUC" - }, - { - "label": "MOUL", - "value": "MOUL" - }, - { - "label": "TM", - "value": "TM" - }, - { - "label": "VS", - "value": "VS" - }, - { - "label": "PPC", - "value": "PPC" - }, - { - "label": "AB", - "value": "AB" - }, - { - "label": "PPL", - "value": "PPL" - }, - { - "label": "PJ", - "value": "PJ" - }, - { - "label": "EBS", - "value": "EBS" - }, - { - "label": "CI", - "value": "CI" - }, - { - "label": "AD", - "value": "AD" - }, - { - "label": "WO", - "value": "WO" - }, - { - "label": "AE", - "value": "AE" - }, - - { - "label": "AB1", - "value": "AB1" - }, - { - "label": "VS1", - "value": "VS1" - }, - { - "label": "PPC1", - "value": "PPC1" - }, - { - "label": "PPL1", - "value": "PPL1" - }, - { - "label": "AC1", - "value": "AC1" - }, - { - "label": "CI1", - "value": "CI1" - }, - { - "label": "AD1", - "value": "AD1" - }, - { - "label": "MOUL1", - "value": "MOUL1" - }, - { - "label": "MOUL3", - "value": "MOUL3" - }, - { - "label": "MOUC1", - "value": "MOUC1" - }, - { - "label": "HP1", - "value": "HP1" - }, - { - "label": "AE3", - "value": "AE3" - }, - { - "label": "CAR", - "value": "CAR" - }, - { - "label": "AD3", - "value": "AD3" - } + { "label": "AB", "value": "AB" }, + { "label": "AB1", "value": "AB1" }, + { "label": "AC", "value": "AC" }, + { "label": "AC1", "value": "AC1" }, + { "label": "AC2", "value": "AC2" }, + { "label": "AD", "value": "AD" }, + { "label": "AD1", "value": "AD1" }, + { "label": "AD3", "value": "AD3" }, + { "label": "AE", "value": "AE" }, + { "label": "AE3", "value": "AE3" }, + { "label": "CAR", "value": "CAR" }, + { "label": "CI", "value": "CI" }, + { "label": "CI1", "value": "CI1" }, + { "label": "CI2", "value": "CI2" }, + { "label": "DOE", "value": "DOE" }, + { "label": "EBS", "value": "EBS" }, + { "label": "GI", "value": "GI" }, + { "label": "GO", "value": "GO" }, + { "label": "HP", "value": "HP" }, + { "label": "HP1", "value": "HP1" }, + { "label": "HP2", "value": "HP2" }, + { "label": "IMM", "value": "IMM" }, + { "label": "MOUC", "value": "MOUC" }, + { "label": "MOUC1", "value": "MOUC1" }, + { "label": "MOUC2", "value": "MOUC2" }, + { "label": "MOUL", "value": "MOUL" }, + { "label": "MOUL1", "value": "MOUL1" }, + { "label": "MOUL3", "value": "MOUL3" }, + { "label": "MOUL4", "value": "MOUL4" }, + { "label": "OI", "value": "OI" }, + { "label": "PJ", "value": "PJ" }, + { "label": "PPC", "value": "PPC" }, + { "label": "PPC1", "value": "PPC1" }, + { "label": "PPC2", "value": "PPC2" }, + { "label": "PPL", "value": "PPL" }, + { "label": "PPL1", "value": "PPL1" }, + { "label": "PPL2", "value": "PPL2" }, + { "label": "PREC1", "value": "PREC1" }, + { "label": "PREC2", "value": "PREC2" }, + { "label": "PREC3", "value": "PREC3" }, + { "label": "PREC4", "value": "PREC4" }, + { "label": "PREM1", "value": "PREM1" }, + { "label": "PREM2", "value": "PREM2" }, + { "label": "PREM3", "value": "PREM3" }, + { "label": "PREM4", "value": "PREM4" }, + { "label": "TB", "value": "TB" }, + { "label": "TB1", "value": "TB1" }, + { "label": "TB2", "value": "TB2" }, + { "label": "TM", "value": "TM" }, + { "label": "TM3", "value": "TM3" }, + { "label": "VS", "value": "VS" }, + { "label": "VS1", "value": "VS1" }, + { "label": "VS2", "value": "VS2" }, + { "label": "WO", "value": "WO" }, + { "label": "WP390", "value": "WP390" }, + { "label": "WP44", "value": "WP44" } ], "prefix": [ @@ -513,29 +490,55 @@ } ], - "insurancePlace": [ + "checkupResults": [ { - "label": "Pacific Cross", - "value": "pacificcross" + "label": "Normal Results", + "value": "normal_results" }, { - "label": "Dhipaya Insurance", - "value": "dhipaya" + "label": "Follow-up Treatment", + "value": "follow_up_treatment" }, { - "label": "Lerdsin Hospital", - "value": "lerdsin" - }, - { - "label": "Ratchapiphat Hospital", - "value": "ratchapipat" - }, - { - "label": "Charoenkrung Pracharak Hospital", - "value": "krungPracharak" + "label": "Failed Health Checkup", + "value": "failed_checkup" } ], + "insurancePlace": [ + { + "label": "Medical Checkup + Social Insurance", + "value": "social_insurance" + }, + { + "label": "Medical Checkup + 990 Insurance", + "value": "insurance_990" + }, + { + "label": "Medical Checkup + Government Hospital 3 Months", + "value": "gov_hospital_3m" + }, + { + "label": "Medical Checkup + Government Hospital 6 Months", + "value": "gov_hospital_6m" + }, + { + "label": "Medical Checkup + Government Hospital 1 Year", + "value": "gov_hospital_1y" + }, + { + "label": "Medical Checkup + Government Hospital 1 Year 3 Months", + "value": "gov_hospital_1y_3m" + }, + { + "label": "Medical Checkup + Government Hospital 1 Year 6 Months", + "value": "gov_hospital_1y_6m" + }, + { + "label": "Medical Checkup + Government Hospital 2 Years", + "value": "gov_hospital_2y" + } + ], "typeReplace": [ { "label": "Work permit, 3 months (325)", @@ -791,7 +794,11 @@ "label": "Recording By", "value": "recordBy", "type": "string" - } + }, + { "label": "Document Check", "value": "documentCheck", "type": "string" }, + { "label": "Duty", "value": "duty", "type": "string" }, + { "label": "Messenger", "value": "messenger", "type": "string" }, + { "label": "Form", "value": "designForm", "type": "string" } ], "workPropertiesField": [ @@ -958,10 +965,95 @@ "label": "Processing Fee", "value": "processingFee" } + ], + + "agenciesType": [ + { + "label": "Agency", + "value": "AGE" + }, + { + "label": "Department of Employment", + "value": "DOE" + }, + { + "label": "Dhipaya Insurance", + "value": "INS" + }, + { + "label": "Embassy", + "value": "EMB" + }, + { + "label": "Government Agencies", + "value": "GA" + }, + { + "label": "Hospital", + "value": "HOS" + }, + { + "label": "Immigration Bureau", + "value": "IMB" + }, + { + "label": "Immigration Checkpoint", + "value": "IMC" + }, + { + "label": "Ministry of Labour", + "value": "MOL" + } ] }, "tha": { + "workerStatus": [ + { + "label": "āļ›āļāļ•āļī", + "value": "normal" + }, + { + "label": "āļĒāļāđ€āļĨāļīāļāļšāļĢāļīāļāļēāļĢ", + "value": "canceled" + }, + { + "label": "āļĨāļēāļ­āļ­āļ", + "value": "resigned" + }, + { + "label": "āļŦāļĨāļšāļŦāļ™āļĩ", + "value": "absconded" + }, + { + "label": "āđ€āļŠāļĩāļĒāļŠāļĩāļ§āļīāļ•", + "value": "deceased" + }, + { + "label": "āļŠāđˆāļ‡āļāļĨāļąāļšāļ›āļĢāļ°āđ€āļ—āļĻāļ•āđ‰āļ™āļ—āļēāļ‡", + "value": "repatriated" + }, + { + "label": "āđ„āļĄāđˆāđ„āļ”āđ‰āđ€āļ”āļīāļ™āļ—āļēāļ‡āđ€āļ‚āđ‰āļēāļ›āļĢāļ°āđ€āļ—āļĻāđ„āļ—āļĒ", + "value": "not_entered" + } + ], + + "workerType": [ + { + "label": "āļāļĨāļļāđˆāļĄ MOU", + "value": "mou" + }, + { + "label": "āļāļĨāļļāđˆāļĄ āļžāļīāļŠāļđāļˆāļ™āđŒāļŠāļąāļāļŠāļēāļ•āļī", + "value": "nvg" + }, + { + "label": "āļāļĨāļļāđˆāļĄ Border pass", + "value": "bp" + } + ], + "bankBook": [ { "label": "āļ˜āļ™āļēāļ„āļēāļĢāļāļĢāļļāļ‡āđ€āļ—āļž", @@ -1015,130 +1107,62 @@ } ], "typeProduct": [ - { - "label": "AC", - "value": "AC" - }, - { - "label": "DOE", - "value": "DOE" - }, - { - "label": "HP", - "value": "HP" - }, - { - "label": "IMM", - "value": "IMM" - }, - { - "label": "MOUC", - "value": "MOUC" - }, - { - "label": "MOUL", - "value": "MOUL" - }, - { - "label": "TM", - "value": "TM" - }, - { - "label": "VS", - "value": "VS" - }, - { - "label": "PPC", - "value": "PPC" - }, - { - "label": "AB", - "value": "AB" - }, - { - "label": "PPL", - "value": "PPL" - }, - { - "label": "PJ", - "value": "PJ" - }, - { - "label": "EBS", - "value": "EBS" - }, - { - "label": "CI", - "value": "CI" - }, - { - "label": "AD", - "value": "AD" - }, - { - "label": "WO", - "value": "WO" - }, - { - "label": "AE", - "value": "AE" - }, - { - "label": "AB1", - "value": "AB1" - }, - { - "label": "VS1", - "value": "VS1" - }, - { - "label": "PPC1", - "value": "PPC1" - }, - { - "label": "PPL1", - "value": "PPL1" - }, - { - "label": "AC1", - "value": "AC1" - }, - { - "label": "CI1", - "value": "CI1" - }, - { - "label": "AD1", - "value": "AD1" - }, - { - "label": "MOUL1", - "value": "MOUL1" - }, - { - "label": "MOUL3", - "value": "MOUL3" - }, - { - "label": "MOUC1", - "value": "MOUC1" - }, - { - "label": "HP1", - "value": "HP1" - }, - { - "label": "AE3", - "value": "AE3" - }, - { - "label": "CAR", - "value": "CAR" - }, - { - "label": "AD3", - "value": "AD3" - } + { "label": "AB", "value": "AB" }, + { "label": "AB1", "value": "AB1" }, + { "label": "AC", "value": "AC" }, + { "label": "AC1", "value": "AC1" }, + { "label": "AC2", "value": "AC2" }, + { "label": "AD", "value": "AD" }, + { "label": "AD1", "value": "AD1" }, + { "label": "AD3", "value": "AD3" }, + { "label": "AE", "value": "AE" }, + { "label": "AE3", "value": "AE3" }, + { "label": "CAR", "value": "CAR" }, + { "label": "CI", "value": "CI" }, + { "label": "CI1", "value": "CI1" }, + { "label": "CI2", "value": "CI2" }, + { "label": "DOE", "value": "DOE" }, + { "label": "EBS", "value": "EBS" }, + { "label": "GI", "value": "GI" }, + { "label": "GO", "value": "GO" }, + { "label": "HP", "value": "HP" }, + { "label": "HP1", "value": "HP1" }, + { "label": "HP2", "value": "HP2" }, + { "label": "IMM", "value": "IMM" }, + { "label": "MOUC", "value": "MOUC" }, + { "label": "MOUC1", "value": "MOUC1" }, + { "label": "MOUC2", "value": "MOUC2" }, + { "label": "MOUL", "value": "MOUL" }, + { "label": "MOUL1", "value": "MOUL1" }, + { "label": "MOUL3", "value": "MOUL3" }, + { "label": "MOUL4", "value": "MOUL4" }, + { "label": "OI", "value": "OI" }, + { "label": "PJ", "value": "PJ" }, + { "label": "PPC", "value": "PPC" }, + { "label": "PPC1", "value": "PPC1" }, + { "label": "PPC2", "value": "PPC2" }, + { "label": "PPL", "value": "PPL" }, + { "label": "PPL1", "value": "PPL1" }, + { "label": "PPL2", "value": "PPL2" }, + { "label": "PREC1", "value": "PREC1" }, + { "label": "PREC2", "value": "PREC2" }, + { "label": "PREC3", "value": "PREC3" }, + { "label": "PREC4", "value": "PREC4" }, + { "label": "PREM1", "value": "PREM1" }, + { "label": "PREM2", "value": "PREM2" }, + { "label": "PREM3", "value": "PREM3" }, + { "label": "PREM4", "value": "PREM4" }, + { "label": "TB", "value": "TB" }, + { "label": "TB1", "value": "TB1" }, + { "label": "TB2", "value": "TB2" }, + { "label": "TM", "value": "TM" }, + { "label": "TM3", "value": "TM3" }, + { "label": "VS", "value": "VS" }, + { "label": "VS1", "value": "VS1" }, + { "label": "VS2", "value": "VS2" }, + { "label": "WO", "value": "WO" }, + { "label": "WP390", "value": "WP390" }, + { "label": "WP44", "value": "WP44" } ], "prefix": [ @@ -1474,26 +1498,53 @@ } ], + "checkupResults": [ + { + "label": "āļœāļĨāļ•āļĢāļ§āļˆāļ›āļāļ•āļī", + "value": "normal_results" + }, + { + "label": "āļ•āļīāļ”āļ•āļēāļĄāļāļēāļĢāļĢāļąāļāļĐāļē", + "value": "follow_up_treatment" + }, + { + "label": "āđ„āļĄāđˆāļœāđˆāļēāļ™āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļļāļ‚āļ āļēāļž", + "value": "failed_checkup" + } + ], + "insurancePlace": [ { - "label": "āđāļ›āļ‹āļīāļŸāļīāļ„āļ„āļĢāļ­āļŠ", - "value": "pacificcross" + "label": "āļ•āļĢāļ§āļˆāđ‚āļĢāļ„ + āļ›āļĢāļ°āļāļąāļ™āļŠāļąāļ‡āļ„āļĄ", + "value": "social_insurance" }, { - "label": "āļ—āļīāļžāļĒāļ›āļĢāļ°āļāļąāļ™āļ āļąāļĒ", - "value": "dhipaya" + "label": "āļ•āļĢāļ§āļˆāđ‚āļĢāļ„ + āļ›āļĢāļ°āļāļąāļ™ 990", + "value": "insurance_990" }, { - "label": "āļĢāļž.āđ€āļĨāļīāļ”āļŠāļīāļ™ 4.āļĢāļž.āļ•āļēāļāļŠāļīāļ™", - "value": "lerdsin" + "label": "āļ•āļĢāļ§āļˆāđ‚āļĢāļ„ + āļ›āļĢāļ°āļāļąāļ™ āļĢāļž.āļĢāļąāļ 3 āđ€āļ”āļ·āļ­āļ™", + "value": "gov_hospital_3m" }, { - "label": "āļĢāļž.āļĢāļēāļŠāļžāļīāļžāļąāļ’āļ™āđŒ", - "value": "ratchapipat" + "label": "āļ•āļĢāļ§āļˆāđ‚āļĢāļ„ + āļ›āļĢāļ°āļāļąāļ™ āļĢāļž.āļĢāļąāļ 6 āđ€āļ”āļ·āļ­āļ™", + "value": "gov_hospital_6m" }, { - "label": "āļĢāļž.āđ€āļˆāļĢāļīāļāļāļĢāļļāļ‡āļ›āļĢāļ°āļŠāļēāļĢāļąāļāļĐāđŒ", - "value": "krungPracharak" + "label": "āļ•āļĢāļ§āļˆāđ‚āļĢāļ„ + āļ›āļĢāļ°āļāļąāļ™ āļĢāļž.āļĢāļąāļ 1 āļ›āļĩ", + "value": "gov_hospital_1y" + }, + { + "label": "āļ•āļĢāļ§āļˆāđ‚āļĢāļ„ + āļ›āļĢāļ°āļāļąāļ™ āļĢāļž.āļĢāļąāļ 1 āļ›āļĩ 3 āđ€āļ”āļ·āļ­āļ™", + "value": "gov_hospital_1y_3m" + }, + { + "label": "āļ•āļĢāļ§āļˆāđ‚āļĢāļ„ + āļ›āļĢāļ°āļāļąāļ™ āļĢāļž.āļĢāļąāļ 1 āļ›āļĩ 6 āđ€āļ”āļ·āļ­āļ™", + "value": "gov_hospital_1y_6m" + }, + { + "label": "āļ•āļĢāļ§āļˆāđ‚āļĢāļ„ + āļ›āļĢāļ°āļāļąāļ™ āļĢāļž.āļĢāļąāļ 2 āļ›āļĩ", + "value": "gov_hospital_2y" } ], @@ -1752,7 +1803,11 @@ "label": "āļĨāļ‡āļŠāļ·āđˆāļ­āļœāļđāđ‰āļšāļąāļ™āļ—āļķāļāļ‚āđ‰āļ­āļĄāļđāļĨ", "value": "recordBy", "type": "string" - } + }, + { "label": "āļ•āļĢāļ§āļˆāļŠāļ­āļšāđ€āļ­āļāļŠāļēāļĢ", "value": "documentCheck", "type": "string" }, + { "label": "āļ­āļēāļāļĢ", "value": "duty", "type": "string" }, + { "label": "āļžāļ™āļąāļāļ‡āļēāļ™āļŠāđˆāļ‡āđ€āļ­āļāļŠāļēāļĢ", "value": "messenger", "type": "string" }, + { "label": "āļ­āļ­āļāđāļšāļšāļŸāļ­āļĢāđŒāļĄ", "value": "designForm", "type": "string" } ], "workPropertiesField": [ @@ -1919,6 +1974,45 @@ "label": "āļ„āđˆāļēāļ”āļģāđ€āļ™āļīāļ™āļ‡āļēāļ™", "value": "processingFee" } + ], + + "agenciesType": [ + { + "label": "āđ€āļ­āđ€āļˆāļ™āļ‹āļĩāđˆ / āļŦāļ™āđˆāļ§āļĒāļ‡āļēāļ™", + "value": "AGE" + }, + { + "label": "āļˆāļąāļ”āļŦāļēāļ‡āļēāļ™āļžāļ·āđ‰āļ™āļ—āļĩāđˆ", + "value": "DOE" + }, + { + "label": "āļ—āļīāļžāļĒāļ›āļĢāļ°āļāļąāļ™āļ āļąāļĒ", + "value": "INS" + }, + { + "label": "āļŠāļ–āļēāļ™āļ—āļđāļ•", + "value": "EMB" + }, + { + "label": "āļŦāļ™āđˆāļ§āļĒāļ‡āļēāļ™āļĢāļēāļŠāļāļēāļĢ", + "value": "GA" + }, + { + "label": "āđ‚āļĢāļ‡āļžāļĒāļēāļšāļēāļĨ", + "value": "HOS" + }, + { + "label": "āļŠāļģāļ™āļąāļāļ‡āļēāļ™āļ•āļĢāļ§āļˆāļ„āļ™āđ€āļ‚āđ‰āļēāđ€āļĄāļ·āļ­āļ‡", + "value": "IMB" + }, + { + "label": "āļ”āđˆāļēāļ™āļ•āļĢāļ§āļˆāļ„āļ™āđ€āļ‚āđ‰āļēāđ€āļĄāļ·āļ­āļ‡", + "value": "IMC" + }, + { + "label": "āļāļĢāļĄāđāļĢāļ‡āļ‡āļēāļ™", + "value": "MOL" + } ] } } diff --git a/quasar.config.ts b/quasar.config.ts index 9ce93693..3acfba30 100644 --- a/quasar.config.ts +++ b/quasar.config.ts @@ -35,10 +35,11 @@ export default configure((ctx) => { devServer: { host: '0.0.0.0', open: false, + port: 5173, }, framework: { config: {}, - plugins: ['Dark', 'Dialog', 'Notify'], + plugins: ['Dark', 'Dialog', 'Notify', 'Loading'], iconSet: 'mdi-v7', cssAddon: true, }, diff --git a/src/boot/components.ts b/src/boot/components.ts index 0e028326..0987be70 100644 --- a/src/boot/components.ts +++ b/src/boot/components.ts @@ -3,9 +3,11 @@ import VueDatePicker from '@vuepic/vue-datepicker'; import '@vuepic/vue-datepicker/dist/main.css'; import GlobalDialog from 'components/GlobalDialog.vue'; import GlobalLoading from 'components/GlobalLoading.vue'; +import VueDragscroll from 'vue-dragscroll'; export default boot(({ app }) => { app.component('global-dialog', GlobalDialog); app.component('global-loading', GlobalLoading); app.component('VueDatePicker', VueDatePicker); + app.use(VueDragscroll); }); diff --git a/src/boot/i18n.ts b/src/boot/i18n.ts index b2c5036c..3f15bad7 100644 --- a/src/boot/i18n.ts +++ b/src/boot/i18n.ts @@ -21,13 +21,16 @@ declare module 'vue-i18n' { } /* eslint-enable @typescript-eslint/no-empty-interface */ -export default boot(({ app }) => { - const i18n = createI18n({ - locale: 'tha', - legacy: false, - messages, - }); +export const i18n = createI18n({ + locale: 'tha', + legacy: false, + messages: { + 'en-US': {}, + ...messages, + }, +}); +export default boot(({ app }) => { // Set i18n instance on app app.use(i18n); }); diff --git a/src/components/01_branch-management/BranchCard.vue b/src/components/01_branch-management/BranchCard.vue index 4c5d51a9..83c268ba 100644 --- a/src/components/01_branch-management/BranchCard.vue +++ b/src/components/01_branch-management/BranchCard.vue @@ -59,7 +59,10 @@ defineProps<{
- {{ data.branchLabelName }} + + {{ data.branchLabelName }} + {{ data.branchLabelName }} + {{ data.branchLabelCode }} @@ -98,11 +101,19 @@ defineProps<{ diff --git a/src/components/03_customer-management/TableEmployee.vue b/src/components/03_customer-management/TableEmployee.vue new file mode 100644 index 00000000..70fdf78f --- /dev/null +++ b/src/components/03_customer-management/TableEmployee.vue @@ -0,0 +1,361 @@ + + + + + diff --git a/src/components/03_customer-management/TableEmpoloyee.vue b/src/components/03_customer-management/TableEmpoloyee.vue index f7b6adfd..cb156e44 100644 --- a/src/components/03_customer-management/TableEmpoloyee.vue +++ b/src/components/03_customer-management/TableEmpoloyee.vue @@ -1,10 +1,13 @@ @@ -55,17 +63,24 @@ defineEmits<{ :rows-per-page-options="[0]" hide-pagination :visible-columns="fieldSelected" + :no-data-label="$t('general.noDataTable')" >