diff --git a/package.json b/package.json
index 9638bb29..a90fe591 100644
--- a/package.json
+++ b/package.json
@@ -17,14 +17,13 @@
"dependencies": {
"@peaceroad/markdown-it-figure-with-p-caption": "^0.11.0",
"@quasar/extras": "^1.16.17",
- "@tato30/vue-pdf": "^1.11.3",
+ "@tato30/vue-pdf": "^1.11.0",
"@vuepic/vue-datepicker": "^8.8.1",
"apexcharts": "^4.5.0",
- "axios": "^1.8.4",
+ "axios": "^1.7.4",
"cropperjs": "^1.6.2",
- "dayjs": "^1.11.13",
"highlight.js": "^11.11.1",
- "keycloak-js": "^25.0.6",
+ "keycloak-js": "^25.0.4",
"markdown-it": "^14.1.0",
"markdown-it-anchor": "^9.2.0",
"markdown-it-highlightjs": "^4.2.0",
@@ -32,41 +31,42 @@
"markdown-it-html5-media": "^0.7.1",
"markdown-it-image-figures": "^2.1.1",
"markdown-it-video": "^0.6.3",
- "mime": "^4.0.6",
+ "mime": "^4.0.4",
"moment": "^2.30.1",
"number-to-words": "^1.2.4",
- "open-props": "^1.7.14",
- "pinia": "^2.3.1",
+ "open-props": "^1.7.5",
+ "pinia": "^2.2.2",
"quasar": "^2.18.1",
- "signature_pad": "^5.0.7",
+ "signature_pad": "^5.0.2",
+ "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.5.13",
+ "vue": "^3.4.38",
"vue-dragscroll": "^4.0.6",
"vue-i18n": "^11.1.2",
"vue-pdf": "^4.3.0",
- "vue-router": "^4.5.0",
+ "vue-router": "^4.4.3",
"vue-tsc": "^2.2.8",
"vue3-apexcharts": "^1.8.0"
},
"devDependencies": {
- "@faker-js/faker": "^9.6.0",
- "@iconify/vue": "^4.3.0",
+ "@faker-js/faker": "^9.3.0",
+ "@iconify/vue": "^4.1.2",
"@intlify/unplugin-vue-i18n": "^6.0.5",
- "@playwright/test": "^1.51.1",
+ "@playwright/test": "^1.46.1",
"@quasar/app-vite": "^2.2.0",
"@types/markdown-it": "^14.1.2",
"@types/markdown-it-highlightjs": "^3.3.4",
- "@types/node": "^20.17.28",
+ "@types/node": "^20.16.1",
"@types/number-to-words": "^1.2.3",
"@types/uuid": "^10.0.0",
- "autoprefixer": "^10.4.21",
+ "autoprefixer": "^10.4.20",
"dotenv": "^16.4.7",
- "prettier": "^3.5.3",
+ "prettier": "^3.3.3",
"typescript": "^5.5.4",
- "vue-component-type-helpers": "^2.2.8"
+ "vue-component-type-helpers": "^2.1.10"
},
"engines": {
"node": "^28 || ^26 || ^24 || ^22 || ^20 || ^18",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7cb78cc6..2e6b8909 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -15,29 +15,26 @@ importers:
specifier: ^1.16.17
version: 1.16.17
'@tato30/vue-pdf':
- specifier: ^1.11.3
- version: 1.11.3(vue@3.5.13(typescript@5.5.4))
+ specifier: ^1.11.0
+ version: 1.11.0(vue@3.4.38(typescript@5.5.4))
'@vuepic/vue-datepicker':
specifier: ^8.8.1
- version: 8.8.1(vue@3.5.13(typescript@5.5.4))
+ version: 8.8.1(vue@3.4.38(typescript@5.5.4))
apexcharts:
specifier: ^4.5.0
version: 4.5.0
axios:
- specifier: ^1.8.4
- version: 1.8.4
+ specifier: ^1.7.4
+ version: 1.7.4
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
keycloak-js:
- specifier: ^25.0.6
- version: 25.0.6
+ specifier: ^25.0.4
+ version: 25.0.4
markdown-it:
specifier: ^14.1.0
version: 14.1.0
@@ -60,8 +57,8 @@ importers:
specifier: ^0.6.3
version: 0.6.3
mime:
- specifier: ^4.0.6
- version: 4.0.6
+ specifier: ^4.0.4
+ version: 4.0.4
moment:
specifier: ^2.30.1
version: 2.30.1
@@ -69,17 +66,20 @@ importers:
specifier: ^1.2.4
version: 1.2.4
open-props:
- specifier: ^1.7.14
- version: 1.7.14
+ specifier: ^1.7.5
+ version: 1.7.5
pinia:
- specifier: ^2.3.1
- version: 2.3.1(typescript@5.5.4)(vue@3.5.13(typescript@5.5.4))
+ specifier: ^2.2.2
+ version: 2.2.2(typescript@5.5.4)(vue@3.4.38(typescript@5.5.4))
quasar:
specifier: ^2.18.1
version: 2.18.1
signature_pad:
- specifier: ^5.0.7
- version: 5.0.7
+ specifier: ^5.0.2
+ version: 5.0.2
+ socket.io-client:
+ specifier: ^4.7.5
+ version: 4.7.5
tesseract.js:
specifier: ^5.1.1
version: 5.1.1
@@ -93,42 +93,42 @@ importers:
specifier: ^10.0.0
version: 10.0.0
vue:
- specifier: ^3.5.13
- version: 3.5.13(typescript@5.5.4)
+ 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: ^11.1.2
- version: 11.1.2(vue@3.5.13(typescript@5.5.4))
+ version: 11.1.2(vue@3.4.38(typescript@5.5.4))
vue-pdf:
specifier: ^4.3.0
version: 4.3.0(webpack@4.47.0)
vue-router:
- specifier: ^4.5.0
- version: 4.5.0(vue@3.5.13(typescript@5.5.4))
+ specifier: ^4.4.3
+ version: 4.4.3(vue@3.4.38(typescript@5.5.4))
vue-tsc:
specifier: ^2.2.8
version: 2.2.8(typescript@5.5.4)
vue3-apexcharts:
specifier: ^1.8.0
- version: 1.8.0(apexcharts@4.5.0)(vue@3.5.13(typescript@5.5.4))
+ version: 1.8.0(apexcharts@4.5.0)(vue@3.4.38(typescript@5.5.4))
devDependencies:
'@faker-js/faker':
- specifier: ^9.6.0
- version: 9.6.0
+ specifier: ^9.3.0
+ version: 9.3.0
'@iconify/vue':
- specifier: ^4.3.0
- version: 4.3.0(vue@3.5.13(typescript@5.5.4))
+ specifier: ^4.1.2
+ version: 4.1.2(vue@3.4.38(typescript@5.5.4))
'@intlify/unplugin-vue-i18n':
specifier: ^6.0.5
- version: 6.0.5(@vue/compiler-dom@3.5.13)(eslint@9.23.0)(rollup@4.37.0)(typescript@5.5.4)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.5.4)))(vue@3.5.13(typescript@5.5.4))
+ version: 6.0.5(@vue/compiler-dom@3.5.13)(eslint@9.23.0)(rollup@4.37.0)(typescript@5.5.4)(vue-i18n@11.1.2(vue@3.4.38(typescript@5.5.4)))(vue@3.4.38(typescript@5.5.4))
'@playwright/test':
- specifier: ^1.51.1
- version: 1.51.1
+ specifier: ^1.46.1
+ version: 1.46.1
'@quasar/app-vite':
specifier: ^2.2.0
- version: 2.2.0(@types/node@20.17.28)(eslint@9.23.0)(pinia@2.3.1(typescript@5.5.4)(vue@3.5.13(typescript@5.5.4)))(quasar@2.18.1)(rollup@4.37.0)(sass@1.77.8)(terser@5.31.0)(typescript@5.5.4)(vue-router@4.5.0(vue@3.5.13(typescript@5.5.4)))(vue@3.5.13(typescript@5.5.4))
+ version: 2.2.0(@types/node@20.16.1)(eslint@9.23.0)(pinia@2.2.2(typescript@5.5.4)(vue@3.4.38(typescript@5.5.4)))(quasar@2.18.1)(rollup@4.37.0)(sass@1.77.8)(terser@5.31.0)(typescript@5.5.4)(vue-router@4.4.3(vue@3.4.38(typescript@5.5.4)))(vue@3.4.38(typescript@5.5.4))
'@types/markdown-it':
specifier: ^14.1.2
version: 14.1.2
@@ -136,8 +136,8 @@ importers:
specifier: ^3.3.4
version: 3.3.4
'@types/node':
- specifier: ^20.17.28
- version: 20.17.28
+ specifier: ^20.16.1
+ version: 20.16.1
'@types/number-to-words':
specifier: ^1.2.3
version: 1.2.3
@@ -145,36 +145,53 @@ importers:
specifier: ^10.0.0
version: 10.0.0
autoprefixer:
- specifier: ^10.4.21
- version: 10.4.21(postcss@8.5.3)
+ specifier: ^10.4.20
+ version: 10.4.20(postcss@8.5.3)
dotenv:
specifier: ^16.4.7
version: 16.4.7
prettier:
- specifier: ^3.5.3
- version: 3.5.3
+ specifier: ^3.3.3
+ version: 3.3.3
typescript:
specifier: ^5.5.4
version: 5.5.4
vue-component-type-helpers:
- specifier: ^2.2.8
- version: 2.2.8
+ specifier: ^2.1.10
+ version: 2.1.10
packages:
+ '@babel/helper-string-parser@7.24.1':
+ resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-string-parser@7.25.9':
resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-validator-identifier@7.22.20':
+ resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-validator-identifier@7.25.9':
resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
engines: {node: '>=6.9.0'}
+ '@babel/parser@7.24.7':
+ resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
'@babel/parser@7.27.0':
resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==}
engines: {node: '>=6.0.0'}
hasBin: true
+ '@babel/types@7.24.0':
+ resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==}
+ engines: {node: '>=6.9.0'}
+
'@babel/types@7.27.0':
resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==}
engines: {node: '>=6.9.0'}
@@ -370,8 +387,8 @@ packages:
resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@faker-js/faker@9.6.0':
- resolution: {integrity: sha512-3vm4by+B5lvsFPSyep3ELWmZfE3kicDtmemVpuwl1yH7tqtnHdsA6hG8fbXedMVdkzgtvzWoRgjSB4Q+FHnZiw==}
+ '@faker-js/faker@9.3.0':
+ resolution: {integrity: sha512-r0tJ3ZOkMd9xsu3VRfqlFR6cz0V/jFYRswAIpC+m/DIfAUXq7g8N7wTAlhSANySXYGKzGryfDXwtwsY8TxEIDw==}
engines: {node: '>=18.0.0', npm: '>=9.0.0'}
'@humanfs/core@0.19.1':
@@ -397,8 +414,8 @@ packages:
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
- '@iconify/vue@4.3.0':
- resolution: {integrity: sha512-Xq0h6zMrHBbrW8jXJ9fISi+x8oDQllg5hTDkDuxnWiskJ63rpJu9CvJshj8VniHVTbsxCg9fVoPAaNp3RQI5OQ==}
+ '@iconify/vue@4.1.2':
+ resolution: {integrity: sha512-CQnYqLiQD5LOAaXhBrmj1mdL2/NCJvwcC4jtW2Z8ukhThiFkLDkutarTOV2trfc9EXqUqRs0KqXOL9pZ/IyysA==}
peerDependencies:
vue: '>=3'
@@ -483,75 +500,12 @@ packages:
'@jridgewell/sourcemap-codec@1.4.15':
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
- '@jridgewell/sourcemap-codec@1.5.0':
- resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
-
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
- '@napi-rs/canvas-android-arm64@0.1.68':
- resolution: {integrity: sha512-h1KcSR4LKLfRfzeBH65xMxbWOGa1OtMFQbCMVlxPCkN1Zr+2gK+70pXO5ktojIYcUrP6KDcOwoc8clho5ccM/w==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [android]
-
- '@napi-rs/canvas-darwin-arm64@0.1.68':
- resolution: {integrity: sha512-/VURlrAD4gDoxW1GT/b0nP3fRz/fhxmHI/xznTq2FTwkQLPOlLkDLCvTmQ7v6LtGKdc2Ed6rvYpRan+JXThInQ==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [darwin]
-
- '@napi-rs/canvas-darwin-x64@0.1.68':
- resolution: {integrity: sha512-tEpvGR6vCLTo1Tx9wmDnoOKROpw57wiCWwCpDOuVlj/7rqEJOUYr9ixW4aRJgmeGBrZHgevI0EURys2ER6whmg==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [darwin]
-
- '@napi-rs/canvas-linux-arm-gnueabihf@0.1.68':
- resolution: {integrity: sha512-U9xbJsumPOiAYeAFZMlHf62b9dGs2HJ6Q5xt7xTB0uEyPeurwhgYBWGgabdsEidyj38YuzI/c3LGBbSQB3vagw==}
- engines: {node: '>= 10'}
- cpu: [arm]
- os: [linux]
-
- '@napi-rs/canvas-linux-arm64-gnu@0.1.68':
- resolution: {integrity: sha512-KFkn8wEm3mPnWD4l8+OUUkxylSJuN5q9PnJRZJgv15RtCA1bgxIwTkBhI/+xuyVMcHqON9sXq7cDkEJtHm35dg==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
-
- '@napi-rs/canvas-linux-arm64-musl@0.1.68':
- resolution: {integrity: sha512-IQzts91rCdOALXBWQxLZRCEDrfFTGDtNRJMNu+2SKZ1uT8cmPQkPwVk5rycvFpvgAcmiFiOSCp1aRrlfU8KPpQ==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
-
- '@napi-rs/canvas-linux-riscv64-gnu@0.1.68':
- resolution: {integrity: sha512-e9AS5UttoIKqXSmBzKZdd3NErSVyOEYzJfNOCGtafGk1//gibTwQXGlSXmAKuErqMp09pyk9aqQRSYzm1AQfBw==}
- engines: {node: '>= 10'}
- cpu: [riscv64]
- os: [linux]
-
- '@napi-rs/canvas-linux-x64-gnu@0.1.68':
- resolution: {integrity: sha512-Pa/I36VE3j57I3Obhrr+J48KGFfkZk2cJN/2NmW/vCgmoF7kCP6aTVq5n+cGdGWLd/cN9CJ9JvNwEoMRDghu0g==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
-
- '@napi-rs/canvas-linux-x64-musl@0.1.68':
- resolution: {integrity: sha512-9c6rkc5195wNxuUHJdf4/mmnq433OQey9TNvQ9LspJazvHbfSkTij8wtKjASVQsJyPDva4fkWOeV/OQ7cLw0GQ==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
-
- '@napi-rs/canvas-win32-x64-msvc@0.1.68':
- resolution: {integrity: sha512-Fc5Dez23u0FoSATurT6/w1oMytiRnKWEinHivdMvXpge6nG4YvhrASrtqMk8dGJMVQpHr8QJYF45rOrx2YU2Aw==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [win32]
-
- '@napi-rs/canvas@0.1.68':
- resolution: {integrity: sha512-LQESrePLEBLvhuFkXx9jjBXRC2ClYsO5mqQ1m/puth5z9SOuM3N/B3vDuqnC3RJFktDktyK9khGvo7dTkqO9uQ==}
- engines: {node: '>= 10'}
+ '@mapbox/node-pre-gyp@1.0.11':
+ resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
+ hasBin: true
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
@@ -572,8 +526,8 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
- '@playwright/test@1.51.1':
- resolution: {integrity: sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==}
+ '@playwright/test@1.46.1':
+ resolution: {integrity: sha512-Fq6SwLujA/DOIvNC2EL/SojJnkKf/rAwJ//APpJJHRyMi1PdKrY3Az+4XNQ51N4RTbItbIByQ0jgd1tayq1aeA==}
engines: {node: '>=18'}
hasBin: true
@@ -734,6 +688,9 @@ packages:
cpu: [x64]
os: [win32]
+ '@socket.io/component-emitter@3.1.1':
+ resolution: {integrity: sha512-dzJtaDAAoXx4GCOJpbB2eG/Qj8VDpdwkLsWGzGm+0L7E8/434RyMbAHmk9ubXWVAb9nXmc44jUf8GKqVDiKezg==}
+
'@svgdotjs/svg.draggable.js@3.0.6':
resolution: {integrity: sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==}
peerDependencies:
@@ -759,8 +716,8 @@ packages:
peerDependencies:
'@svgdotjs/svg.js': ^3.2.4
- '@tato30/vue-pdf@1.11.3':
- resolution: {integrity: sha512-YKEmy3NKAy+UsgYCu+GkKQ1VaIovjP/5lO5NmiKRjv9Jbl1LqJYGafZUt3QXp5Ijg0DN2gYDf8Jl949Lr9E7mA==}
+ '@tato30/vue-pdf@1.11.0':
+ resolution: {integrity: sha512-GQNfVqq8if6/tezgcW1E0iU7kO5VfzMihdU6sfRnw0ewDYcP43JFt3r2fmDggyAY5lu7ArEwCFvlWi7WbvleCw==}
peerDependencies:
vue: ^3.2.33
@@ -824,8 +781,8 @@ packages:
'@types/node-forge@1.3.11':
resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==}
- '@types/node@20.17.28':
- resolution: {integrity: sha512-DHlH/fNL6Mho38jTy7/JT7sn2wnXI+wULR6PV4gy4VHLVvnrV/d3pHAMQHhc4gjdLmK2ZiPoMxzp6B3yRajLSQ==}
+ '@types/node@20.16.1':
+ resolution: {integrity: sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==}
'@types/number-to-words@1.2.3':
resolution: {integrity: sha512-ruSA/QZ6JQofoEEN2zKmN9oihZmrCBgcw0zEzN0UA9Mw0pU5remTddZmrbHjsa99qz12Uxl82x+XkVpHu87oXw==}
@@ -879,17 +836,23 @@ packages:
'@volar/typescript@2.4.12':
resolution: {integrity: sha512-HJB73OTJDgPc80K30wxi3if4fSsZZAOScbj2fcicMuOPoOkcf9NNAINb33o+DzhBdF9xTKC1gnPmIRDous5S0g==}
+ '@vue/compiler-core@3.4.38':
+ resolution: {integrity: sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==}
+
'@vue/compiler-core@3.5.13':
resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
+ '@vue/compiler-dom@3.4.38':
+ resolution: {integrity: sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==}
+
'@vue/compiler-dom@3.5.13':
resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
- '@vue/compiler-sfc@3.5.13':
- resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
+ '@vue/compiler-sfc@3.4.38':
+ resolution: {integrity: sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==}
- '@vue/compiler-ssr@3.5.13':
- resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
+ '@vue/compiler-ssr@3.4.38':
+ resolution: {integrity: sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==}
'@vue/compiler-vue2@2.7.16':
resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
@@ -897,9 +860,6 @@ packages:
'@vue/devtools-api@6.6.3':
resolution: {integrity: sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==}
- '@vue/devtools-api@6.6.4':
- resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
-
'@vue/language-core@2.2.8':
resolution: {integrity: sha512-rrzB0wPGBvcwaSNRriVWdNAbHQWSf0NlGqgKHK5mEkXpefjUlVRP62u03KvwZpvKVjRnBIQ/Lwre+Mx9N6juUQ==}
peerDependencies:
@@ -908,19 +868,22 @@ packages:
typescript:
optional: true
- '@vue/reactivity@3.5.13':
- resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==}
+ '@vue/reactivity@3.4.38':
+ resolution: {integrity: sha512-4vl4wMMVniLsSYYeldAKzbk72+D3hUnkw9z8lDeJacTxAkXeDAP1uE9xr2+aKIN0ipOL8EG2GPouVTH6yF7Gnw==}
- '@vue/runtime-core@3.5.13':
- resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==}
+ '@vue/runtime-core@3.4.38':
+ resolution: {integrity: sha512-21z3wA99EABtuf+O3IhdxP0iHgkBs1vuoCAsCKLVJPEjpVqvblwBnTj42vzHRlWDCyxu9ptDm7sI2ZMcWrQqlA==}
- '@vue/runtime-dom@3.5.13':
- resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==}
+ '@vue/runtime-dom@3.4.38':
+ resolution: {integrity: sha512-afZzmUreU7vKwKsV17H1NDThEEmdYI+GCAK/KY1U957Ig2NATPVjCROv61R19fjZNzMmiU03n79OMnXyJVN0UA==}
- '@vue/server-renderer@3.5.13':
- resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==}
+ '@vue/server-renderer@3.4.38':
+ resolution: {integrity: sha512-NggOTr82FbPEkkUvBm4fTGcwUY8UuTsnWC/L2YZBmvaQ4C4Jl/Ao4HHTB+l7WnFCt5M/dN3l0XLuyjzswGYVCA==}
peerDependencies:
- vue: 3.5.13
+ vue: 3.4.38
+
+ '@vue/shared@3.4.38':
+ resolution: {integrity: sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==}
'@vue/shared@3.5.13':
resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
@@ -993,6 +956,9 @@ packages:
'@yr/monotone-cubic-spline@1.0.3':
resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==}
+ abbrev@1.1.1:
+ resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
+
abort-controller@3.0.0:
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
engines: {node: '>=6.5'}
@@ -1016,6 +982,10 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
+ agent-base@6.0.2:
+ resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
+ engines: {node: '>= 6.0.0'}
+
ajv-errors@1.0.1:
resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==}
peerDependencies:
@@ -1065,6 +1035,9 @@ packages:
aproba@1.2.0:
resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==}
+ aproba@2.0.0:
+ resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
+
archiver-utils@5.0.2:
resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==}
engines: {node: '>= 14'}
@@ -1073,6 +1046,11 @@ packages:
resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==}
engines: {node: '>= 14'}
+ are-we-there-yet@2.0.0:
+ resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==}
+ engines: {node: '>=10'}
+ deprecated: This package is no longer supported.
+
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
@@ -1122,15 +1100,15 @@ packages:
engines: {node: '>= 4.5.0'}
hasBin: true
- autoprefixer@10.4.21:
- resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
+ autoprefixer@10.4.20:
+ resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
engines: {node: ^10 || ^12 || >=14}
hasBin: true
peerDependencies:
postcss: ^8.1.0
- axios@1.8.4:
- resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==}
+ axios@1.7.4:
+ resolution: {integrity: sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==}
b4a@1.6.6:
resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==}
@@ -1221,8 +1199,8 @@ packages:
browserify-zlib@0.2.0:
resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==}
- browserslist@4.24.4:
- resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
+ browserslist@4.23.3:
+ resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
@@ -1292,6 +1270,10 @@ packages:
caniuse-lite@1.0.30001707:
resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==}
+ canvas@2.11.2:
+ resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==}
+ engines: {node: '>=6'}
+
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
@@ -1309,6 +1291,10 @@ packages:
chownr@1.1.4:
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
+ chownr@2.0.0:
+ resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
+ engines: {node: '>=10'}
+
chrome-trace-event@1.0.4:
resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
engines: {node: '>=6.0'}
@@ -1364,6 +1350,10 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ color-support@1.1.3:
+ resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
+ hasBin: true
+
colorjs.io@0.5.2:
resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==}
@@ -1409,6 +1399,9 @@ packages:
console-browserify@1.2.0:
resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==}
+ console-control-strings@1.1.0:
+ resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
+
constants-browserify@1.0.0:
resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==}
@@ -1476,9 +1469,6 @@ 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==}
@@ -1512,6 +1502,10 @@ packages:
resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
engines: {node: '>=0.10'}
+ decompress-response@4.2.1:
+ resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==}
+ engines: {node: '>=8'}
+
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
@@ -1558,6 +1552,9 @@ packages:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
+ delegates@1.0.0:
+ resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
+
depd@2.0.0:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
@@ -1569,6 +1566,10 @@ packages:
resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+ detect-libc@2.0.3:
+ resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
+ engines: {node: '>=8'}
+
diffie-hellman@5.0.3:
resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==}
@@ -1604,8 +1605,8 @@ packages:
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- electron-to-chromium@1.5.126:
- resolution: {integrity: sha512-AtH1uLcTC72LA4vfYcEJJkrMk/MY/X0ub8Hv7QGAePW2JkeUFHEL/QfS4J77R6M87Sss8O0OcqReSaN1bpyA+Q==}
+ electron-to-chromium@1.5.13:
+ resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==}
elementtree@0.1.7:
resolution: {integrity: sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==}
@@ -1635,6 +1636,13 @@ packages:
end-of-stream@1.4.4:
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+ engine.io-client@6.5.3:
+ resolution: {integrity: sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==}
+
+ engine.io-parser@5.2.2:
+ resolution: {integrity: sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==}
+ engines: {node: '>=10.0.0'}
+
enhanced-resolve@4.5.0:
resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==}
engines: {node: '>=6.9.0'}
@@ -1678,10 +1686,6 @@ packages:
resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
engines: {node: '>=6'}
- escalade@3.2.0:
- resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
- engines: {node: '>=6'}
-
escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
@@ -1914,6 +1918,10 @@ packages:
resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
engines: {node: '>=14.14'}
+ fs-minipass@2.1.0:
+ resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
+ engines: {node: '>= 8'}
+
fs-write-stream-atomic@1.0.10:
resolution: {integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==}
deprecated: This package is no longer supported.
@@ -1940,6 +1948,11 @@ packages:
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+ gauge@3.0.2:
+ resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==}
+ engines: {node: '>=10'}
+ deprecated: This package is no longer supported.
+
get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
@@ -1977,7 +1990,6 @@ packages:
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
- deprecated: Glob versions prior to v9 are no longer supported
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
@@ -2012,6 +2024,9 @@ packages:
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
engines: {node: '>= 0.4'}
+ has-unicode@2.0.1:
+ resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
+
has-value@0.3.1:
resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==}
engines: {node: '>=0.10.0'}
@@ -2065,6 +2080,10 @@ packages:
https-browserify@1.0.0:
resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==}
+ https-proxy-agent@5.0.1:
+ resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
+ engines: {node: '>= 6'}
+
iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
@@ -2101,7 +2120,6 @@ packages:
inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
- deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
inherits@2.0.3:
resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
@@ -2289,8 +2307,8 @@ packages:
resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==}
engines: {node: '>=18'}
- keycloak-js@25.0.6:
- resolution: {integrity: sha512-Km+dc+XfNvY6a4az5jcxTK0zPk52ns9mAxLrHj7lF3V+riVYvQujfHmhayltJDjEpSOJ4C8a57LFNNKnNnRP2g==}
+ keycloak-js@25.0.4:
+ resolution: {integrity: sha512-LW7dVgqcBxMnnJTdmh7Zgd0NpStJnX2sCMrJGqcGtm4zmk4Rwlqk2o2uOvY7PaRHHYePXfbIwrqVhlN3GAnRCg==}
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
@@ -2366,13 +2384,21 @@ packages:
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
- magic-string@0.30.17:
- resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+ lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+
+ magic-string@0.30.10:
+ resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==}
make-dir@2.1.0:
resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
engines: {node: '>=6'}
+ make-dir@3.1.0:
+ resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
+ engines: {node: '>=8'}
+
map-cache@0.2.2:
resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
engines: {node: '>=0.10.0'}
@@ -2478,8 +2504,8 @@ packages:
engines: {node: '>=4'}
hasBin: true
- mime@4.0.6:
- resolution: {integrity: sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==}
+ mime@4.0.4:
+ resolution: {integrity: sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==}
engines: {node: '>=16'}
hasBin: true
@@ -2487,6 +2513,10 @@ packages:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
+ mimic-response@2.1.0:
+ resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==}
+ engines: {node: '>=8'}
+
mimoza@1.0.0:
resolution: {integrity: sha512-+j7SSye/hablu66K/jjeyPmk6WL8RoXfeZ+MMn37vSNDGuaWY/5wm10LpSpxAHX4kNoEwkTWYHba8ePVip+Hqg==}
@@ -2510,10 +2540,22 @@ packages:
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ minipass@3.3.6:
+ resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
+ engines: {node: '>=8'}
+
+ minipass@5.0.0:
+ resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
+ engines: {node: '>=8'}
+
minipass@7.1.2:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
+ minizlib@2.1.2:
+ resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
+ engines: {node: '>= 8'}
+
mississippi@3.0.0:
resolution: {integrity: sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==}
engines: {node: '>=4.0.0'}
@@ -2526,6 +2568,11 @@ packages:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
+ mkdirp@1.0.4:
+ resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
mlly@1.7.4:
resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
@@ -2552,6 +2599,9 @@ packages:
resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ nan@2.19.0:
+ resolution: {integrity: sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==}
+
nan@2.22.2:
resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==}
@@ -2560,6 +2610,11 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
+ nanoid@3.3.7:
+ resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
nanomatch@1.2.13:
resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==}
engines: {node: '>=0.10.0'}
@@ -2597,8 +2652,13 @@ packages:
node-libs-browser@2.2.1:
resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==}
- node-releases@2.0.19:
- resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
+ node-releases@2.0.18:
+ resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
+
+ nopt@5.0.0:
+ resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
+ engines: {node: '>=6'}
+ hasBin: true
normalize-path@2.1.1:
resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==}
@@ -2612,9 +2672,17 @@ packages:
resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
engines: {node: '>=0.10.0'}
+ npmlog@5.0.1:
+ resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==}
+ deprecated: This package is no longer supported.
+
number-to-words@1.2.4:
resolution: {integrity: sha512-/fYevVkXRcyBiZDg6yzZbm0RuaD6i0qRfn8yr+6D0KgBMOndFPxuW10qCHpzs50nN8qKuv78k8MuotZhcVX6Pw==}
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
object-copy@0.1.0:
resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==}
engines: {node: '>=0.10.0'}
@@ -2657,8 +2725,8 @@ packages:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
- open-props@1.7.14:
- resolution: {integrity: sha512-rTsf6dGrNhlyyN5+ZAdht50s5A7vzHC/gaA56sQnSfwQU53YzWCMjdzX2hhlK+aK+3ojEwTxsvRSlk3FP8TTHA==}
+ open-props@1.7.5:
+ resolution: {integrity: sha512-DajjLQDJgIa0i+QdB2q5M8lNLo2ICk+DbDh4TsqNsT1tAO8Zm8F7dndSkLMQkobT98lbvDMMpJWO8NT0ibjrjA==}
open@10.1.0:
resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==}
@@ -2773,6 +2841,10 @@ packages:
path-to-regexp@0.1.12:
resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==}
+ path2d@0.2.1:
+ resolution: {integrity: sha512-Fl2z/BHvkTNvkuBzYTpTuirHZg6wW9z8+4SND/3mDTEcYbbNKWAy21dz9D3ePNNwrrK8pqZO5vLPZ1hLF6T7XA==}
+ engines: {node: '>=6'}
+
pathe@1.1.2:
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
@@ -2786,9 +2858,12 @@ packages:
pdfjs-dist@2.6.347:
resolution: {integrity: sha512-QC+h7hG2su9v/nU1wEI3SnpPIrqJODL7GTDFvR74ANKGq1AFJW16PH8VWnhpiTi9YcLSFV9xLeWSgq+ckHLdVQ==}
- pdfjs-dist@4.9.124:
- resolution: {integrity: sha512-yAoM7C+IYIG23dAZHE2KqtE5exEj067Ef6oblb+AHiqLwTJSQOMB+e8ftBA3pp1+6TyE4xeofoHcu9t7XaOE0g==}
- engines: {node: '>=20'}
+ pdfjs-dist@4.5.136:
+ resolution: {integrity: sha512-V1BALcAN/FmxBEShLxoP73PlQZAZtzlaNfRbRhJrKvXzjLC5VaIlBAQUJuWP8iaYUmIdmdLHmt3E2TBglxOm3w==}
+ engines: {node: '>=18'}
+
+ picocolors@1.0.1:
+ resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -2805,12 +2880,15 @@ packages:
resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
engines: {node: '>=6'}
- pinia@2.3.1:
- resolution: {integrity: sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==}
+ pinia@2.2.2:
+ resolution: {integrity: sha512-ja2XqFWZC36mupU4z1ZzxeTApV7DOw44cV4dhQ9sGwun+N89v/XP7+j7q6TanS1u1tdbK4r+1BUx7heMaIdagA==}
peerDependencies:
+ '@vue/composition-api': ^1.4.0
typescript: '>=4.4.4'
- vue: ^2.7.0 || ^3.5.11
+ vue: ^2.6.14 || ^3.3.0
peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
typescript:
optional: true
@@ -2821,13 +2899,13 @@ packages:
pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
- playwright-core@1.51.1:
- resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==}
+ playwright-core@1.46.1:
+ resolution: {integrity: sha512-h9LqIQaAv+CYvWzsZ+h3RsrqCStkBHlgo6/TJlFst3cOTlLghBQlJwPOZKQJTKNaD3QIB7aAVQ+gfWbN3NXB7A==}
engines: {node: '>=18'}
hasBin: true
- playwright@1.51.1:
- resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==}
+ playwright@1.46.1:
+ resolution: {integrity: sha512-oPcr1yqoXLCkgKtD5eNUPLiN40rYEM39odNpIb6VE6S7/15gJmA1NzVv6zJYusV0e7tzvkU/utBFNa/Kpxmwng==}
engines: {node: '>=18'}
hasBin: true
@@ -2838,6 +2916,10 @@ packages:
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+ postcss@8.4.41:
+ resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==}
+ engines: {node: ^10 || ^12 || >=14}
+
postcss@8.5.3:
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
engines: {node: ^10 || ^12 || >=14}
@@ -2846,8 +2928,8 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
- prettier@3.5.3:
- resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==}
+ prettier@3.3.3:
+ resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
engines: {node: '>=14'}
hasBin: true
@@ -3014,6 +3096,10 @@ packages:
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
+ rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ hasBin: true
+
ripemd160@2.0.2:
resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==}
@@ -3217,6 +3303,15 @@ packages:
resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
hasBin: true
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.6.0:
+ resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==}
+ engines: {node: '>=10'}
+ hasBin: true
+
semver@7.6.3:
resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
engines: {node: '>=10'}
@@ -3236,6 +3331,9 @@ packages:
resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
engines: {node: '>= 0.8.0'}
+ set-blocking@2.0.0:
+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
+
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@@ -3293,8 +3391,14 @@ packages:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
- signature_pad@5.0.7:
- resolution: {integrity: sha512-j2C6NTZ3c99G3hvFTsg6oOWy/tmftgwIXrvsr3+99+5SuPW6OdSpo++ZUzLVNfNHYmp2Z2Al76YV/3RhS/nDJg==}
+ signature_pad@5.0.2:
+ resolution: {integrity: sha512-FSseAwRWznAQg90CnrTbC570u1QYi8gijZiyboc18SK2IUx7sYVZhNPLnJRCnwhpyOpgdqXf91XAHL4Yg41yCg==}
+
+ simple-concat@1.0.1:
+ resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
+
+ simple-get@3.1.1:
+ resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==}
snapdragon-node@2.1.1:
resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==}
@@ -3308,9 +3412,21 @@ packages:
resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==}
engines: {node: '>=0.10.0'}
+ socket.io-client@4.7.5:
+ resolution: {integrity: sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==}
+ engines: {node: '>=10.0.0'}
+
+ socket.io-parser@4.2.4:
+ resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==}
+ engines: {node: '>=10.0.0'}
+
source-list-map@2.0.1:
resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==}
+ source-map-js@1.2.0:
+ resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
+ engines: {node: '>=0.10.0'}
+
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
@@ -3424,6 +3540,10 @@ packages:
tar-stream@3.1.7:
resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
+ tar@6.2.1:
+ resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
+ engines: {node: '>=10'}
+
terser-webpack-plugin@1.4.6:
resolution: {integrity: sha512-2lBVf/VMVIddjSn3GqbT90GvIJ/eYXJkt8cTzU7NbjKqK8fwv18Ftr4PlbF46b/e88743iZFL5Dtr/rC4hjIeA==}
engines: {node: '>= 6.9.0'}
@@ -3470,6 +3590,10 @@ packages:
to-arraybuffer@1.0.1:
resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==}
+ to-fast-properties@2.0.0:
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+ engines: {node: '>=4'}
+
to-object-path@0.3.0:
resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==}
engines: {node: '>=0.10.0'}
@@ -3582,8 +3706,8 @@ packages:
resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==}
engines: {node: '>=4'}
- update-browserslist-db@1.1.3:
- resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
+ update-browserslist-db@1.1.0:
+ resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
@@ -3673,8 +3797,8 @@ packages:
vscode-uri@3.1.0:
resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
- vue-component-type-helpers@2.2.8:
- resolution: {integrity: sha512-4bjIsC284coDO9om4HPA62M7wfsTvcmZyzdfR0aUlFXqq4tXxM1APyXpNVxPC8QazKw9OhmZNHBVDA6ODaZsrA==}
+ vue-component-type-helpers@2.1.10:
+ resolution: {integrity: sha512-lfgdSLQKrUmADiSV6PbBvYgQ33KF3Ztv6gP85MfGaGaSGMTXORVaHT1EHfsqCgzRNBstPKYDmvAV9Do5CmJ07A==}
vue-demi@0.14.10:
resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
@@ -3702,8 +3826,8 @@ packages:
vue-resize-sensor@2.0.0:
resolution: {integrity: sha512-W+y2EAI/BxS4Vlcca9scQv8ifeBFck56DRtSwWJ2H4Cw1GLNUYxiZxUHHkuzuI5JPW/cYtL1bPO5xPyEXx4LmQ==}
- vue-router@4.5.0:
- resolution: {integrity: sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==}
+ vue-router@4.4.3:
+ resolution: {integrity: sha512-sv6wmNKx2j3aqJQDMxLFzs/u/mjA9Z5LCgy6BE0f7yFWMjrPLnS/sPNn8ARY/FXw6byV18EFutn5lTO6+UsV5A==}
peerDependencies:
vue: ^3.2.0
@@ -3719,8 +3843,8 @@ packages:
apexcharts: '>=4.0.0'
vue: '>=3.0.0'
- vue@3.5.13:
- resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==}
+ vue@3.4.38:
+ resolution: {integrity: sha512-f0ZgN+mZ5KFgVv9wz0f4OgVKukoXtS3nwET4c2vLBGQR50aI8G0cqbFtLlX9Yiyg3LFGBitruPHt2PxwTduJEw==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
@@ -3777,6 +3901,9 @@ packages:
engines: {node: '>= 8'}
hasBin: true
+ wide-align@1.1.5:
+ resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
+
wildcard@2.0.1:
resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==}
@@ -3808,6 +3935,22 @@ packages:
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ ws@8.11.0:
+ resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ xmlhttprequest-ssl@2.0.0:
+ resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==}
+ engines: {node: '>=0.4.0'}
+
xtend@4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
@@ -3822,6 +3965,9 @@ packages:
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
yaml-eslint-parser@1.2.2:
resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==}
engines: {node: ^14.17.0 || >=16.0.0}
@@ -3856,14 +4002,28 @@ packages:
snapshots:
+ '@babel/helper-string-parser@7.24.1': {}
+
'@babel/helper-string-parser@7.25.9': {}
+ '@babel/helper-validator-identifier@7.22.20': {}
+
'@babel/helper-validator-identifier@7.25.9': {}
+ '@babel/parser@7.24.7':
+ dependencies:
+ '@babel/types': 7.24.0
+
'@babel/parser@7.27.0':
dependencies:
'@babel/types': 7.27.0
+ '@babel/types@7.24.0':
+ dependencies:
+ '@babel/helper-string-parser': 7.24.1
+ '@babel/helper-validator-identifier': 7.22.20
+ to-fast-properties: 2.0.0
+
'@babel/types@7.27.0':
dependencies:
'@babel/helper-string-parser': 7.25.9
@@ -3990,7 +4150,7 @@ snapshots:
'@eslint/core': 0.12.0
levn: 0.4.1
- '@faker-js/faker@9.6.0': {}
+ '@faker-js/faker@9.3.0': {}
'@humanfs/core@0.19.1': {}
@@ -4007,14 +4167,14 @@ snapshots:
'@iconify/types@2.0.0': {}
- '@iconify/vue@4.3.0(vue@3.5.13(typescript@5.5.4))':
+ '@iconify/vue@4.1.2(vue@3.4.38(typescript@5.5.4))':
dependencies:
'@iconify/types': 2.0.0
- vue: 3.5.13(typescript@5.5.4)
+ vue: 3.4.38(typescript@5.5.4)
'@inquirer/figures@1.0.5': {}
- '@intlify/bundle-utils@10.0.1(vue-i18n@11.1.2(vue@3.5.13(typescript@5.5.4)))':
+ '@intlify/bundle-utils@10.0.1(vue-i18n@11.1.2(vue@3.4.38(typescript@5.5.4)))':
dependencies:
'@intlify/message-compiler': 11.1.2
'@intlify/shared': 11.1.2
@@ -4026,7 +4186,7 @@ snapshots:
source-map-js: 1.2.1
yaml-eslint-parser: 1.2.2
optionalDependencies:
- vue-i18n: 11.1.2(vue@3.5.13(typescript@5.5.4))
+ vue-i18n: 11.1.2(vue@3.4.38(typescript@5.5.4))
'@intlify/core-base@11.1.2':
dependencies:
@@ -4040,12 +4200,12 @@ snapshots:
'@intlify/shared@11.1.2': {}
- '@intlify/unplugin-vue-i18n@6.0.5(@vue/compiler-dom@3.5.13)(eslint@9.23.0)(rollup@4.37.0)(typescript@5.5.4)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.5.4)))(vue@3.5.13(typescript@5.5.4))':
+ '@intlify/unplugin-vue-i18n@6.0.5(@vue/compiler-dom@3.5.13)(eslint@9.23.0)(rollup@4.37.0)(typescript@5.5.4)(vue-i18n@11.1.2(vue@3.4.38(typescript@5.5.4)))(vue@3.4.38(typescript@5.5.4))':
dependencies:
'@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0)
- '@intlify/bundle-utils': 10.0.1(vue-i18n@11.1.2(vue@3.5.13(typescript@5.5.4)))
+ '@intlify/bundle-utils': 10.0.1(vue-i18n@11.1.2(vue@3.4.38(typescript@5.5.4)))
'@intlify/shared': 11.1.2
- '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.2)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.5.4)))(vue@3.5.13(typescript@5.5.4))
+ '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.2)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.4.38(typescript@5.5.4)))(vue@3.4.38(typescript@5.5.4))
'@rollup/pluginutils': 5.1.0(rollup@4.37.0)
'@typescript-eslint/scope-manager': 8.28.0
'@typescript-eslint/typescript-estree': 8.28.0(typescript@5.5.4)
@@ -4057,9 +4217,9 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
unplugin: 1.10.1
- vue: 3.5.13(typescript@5.5.4)
+ vue: 3.4.38(typescript@5.5.4)
optionalDependencies:
- vue-i18n: 11.1.2(vue@3.5.13(typescript@5.5.4))
+ vue-i18n: 11.1.2(vue@3.4.38(typescript@5.5.4))
transitivePeerDependencies:
- '@vue/compiler-dom'
- eslint
@@ -4067,14 +4227,14 @@ snapshots:
- supports-color
- typescript
- '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.2)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.5.4)))(vue@3.5.13(typescript@5.5.4))':
+ '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.2)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.4.38(typescript@5.5.4)))(vue@3.4.38(typescript@5.5.4))':
dependencies:
'@babel/parser': 7.27.0
optionalDependencies:
'@intlify/shared': 11.1.2
'@vue/compiler-dom': 3.5.13
- vue: 3.5.13(typescript@5.5.4)
- vue-i18n: 11.1.2(vue@3.5.13(typescript@5.5.4))
+ vue: 3.4.38(typescript@5.5.4)
+ vue-i18n: 11.1.2(vue@3.4.38(typescript@5.5.4))
'@isaacs/cliui@8.0.2':
dependencies:
@@ -4102,55 +4262,25 @@ snapshots:
'@jridgewell/sourcemap-codec@1.4.15': {}
- '@jridgewell/sourcemap-codec@1.5.0': {}
-
'@jridgewell/trace-mapping@0.3.25':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.4.15
- '@napi-rs/canvas-android-arm64@0.1.68':
- optional: true
-
- '@napi-rs/canvas-darwin-arm64@0.1.68':
- optional: true
-
- '@napi-rs/canvas-darwin-x64@0.1.68':
- optional: true
-
- '@napi-rs/canvas-linux-arm-gnueabihf@0.1.68':
- optional: true
-
- '@napi-rs/canvas-linux-arm64-gnu@0.1.68':
- optional: true
-
- '@napi-rs/canvas-linux-arm64-musl@0.1.68':
- optional: true
-
- '@napi-rs/canvas-linux-riscv64-gnu@0.1.68':
- optional: true
-
- '@napi-rs/canvas-linux-x64-gnu@0.1.68':
- optional: true
-
- '@napi-rs/canvas-linux-x64-musl@0.1.68':
- optional: true
-
- '@napi-rs/canvas-win32-x64-msvc@0.1.68':
- optional: true
-
- '@napi-rs/canvas@0.1.68':
- optionalDependencies:
- '@napi-rs/canvas-android-arm64': 0.1.68
- '@napi-rs/canvas-darwin-arm64': 0.1.68
- '@napi-rs/canvas-darwin-x64': 0.1.68
- '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.68
- '@napi-rs/canvas-linux-arm64-gnu': 0.1.68
- '@napi-rs/canvas-linux-arm64-musl': 0.1.68
- '@napi-rs/canvas-linux-riscv64-gnu': 0.1.68
- '@napi-rs/canvas-linux-x64-gnu': 0.1.68
- '@napi-rs/canvas-linux-x64-musl': 0.1.68
- '@napi-rs/canvas-win32-x64-msvc': 0.1.68
+ '@mapbox/node-pre-gyp@1.0.11':
+ dependencies:
+ detect-libc: 2.0.3
+ https-proxy-agent: 5.0.1
+ make-dir: 3.1.0
+ node-fetch: 2.7.0
+ nopt: 5.0.0
+ npmlog: 5.0.1
+ rimraf: 3.0.2
+ semver: 7.6.0
+ tar: 6.2.1
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
optional: true
'@nodelib/fs.scandir@2.1.5':
@@ -4172,20 +4302,20 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
- '@playwright/test@1.51.1':
+ '@playwright/test@1.46.1':
dependencies:
- playwright: 1.51.1
+ playwright: 1.46.1
- '@quasar/app-vite@2.2.0(@types/node@20.17.28)(eslint@9.23.0)(pinia@2.3.1(typescript@5.5.4)(vue@3.5.13(typescript@5.5.4)))(quasar@2.18.1)(rollup@4.37.0)(sass@1.77.8)(terser@5.31.0)(typescript@5.5.4)(vue-router@4.5.0(vue@3.5.13(typescript@5.5.4)))(vue@3.5.13(typescript@5.5.4))':
+ '@quasar/app-vite@2.2.0(@types/node@20.16.1)(eslint@9.23.0)(pinia@2.2.2(typescript@5.5.4)(vue@3.4.38(typescript@5.5.4)))(quasar@2.18.1)(rollup@4.37.0)(sass@1.77.8)(terser@5.31.0)(typescript@5.5.4)(vue-router@4.4.3(vue@3.4.38(typescript@5.5.4)))(vue@3.4.38(typescript@5.5.4))':
dependencies:
'@quasar/render-ssr-error': 1.0.3
'@quasar/ssl-certificate': 1.0.0
- '@quasar/vite-plugin': 1.9.0(@vitejs/plugin-vue@5.2.3(vite@6.2.3(@types/node@20.17.28)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0))(vue@3.5.13(typescript@5.5.4)))(quasar@2.18.1)(vite@6.2.3(@types/node@20.17.28)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0))(vue@3.5.13(typescript@5.5.4))
+ '@quasar/vite-plugin': 1.9.0(@vitejs/plugin-vue@5.2.3(vite@6.2.3(@types/node@20.16.1)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0))(vue@3.4.38(typescript@5.5.4)))(quasar@2.18.1)(vite@6.2.3(@types/node@20.16.1)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0))(vue@3.4.38(typescript@5.5.4))
'@types/chrome': 0.0.262
'@types/compression': 1.7.5
'@types/cordova': 11.0.3
'@types/express': 4.17.21
- '@vitejs/plugin-vue': 5.2.3(vite@6.2.3(@types/node@20.17.28)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0))(vue@3.5.13(typescript@5.5.4))
+ '@vitejs/plugin-vue': 5.2.3(vite@6.2.3(@types/node@20.16.1)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0))(vue@3.4.38(typescript@5.5.4))
archiver: 7.0.1
chokidar: 3.6.0
ci-info: 4.0.0
@@ -4214,13 +4344,13 @@ snapshots:
serialize-javascript: 6.0.2
tinyglobby: 0.2.12
ts-essentials: 9.4.2(typescript@5.5.4)
- vite: 6.2.3(@types/node@20.17.28)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0)
- vue: 3.5.13(typescript@5.5.4)
- vue-router: 4.5.0(vue@3.5.13(typescript@5.5.4))
+ vite: 6.2.3(@types/node@20.16.1)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0)
+ vue: 3.4.38(typescript@5.5.4)
+ vue-router: 4.4.3(vue@3.4.38(typescript@5.5.4))
webpack-merge: 6.0.1
optionalDependencies:
eslint: 9.23.0
- pinia: 2.3.1(typescript@5.5.4)(vue@3.5.13(typescript@5.5.4))
+ pinia: 2.2.2(typescript@5.5.4)(vue@3.4.38(typescript@5.5.4))
typescript: 5.5.4
transitivePeerDependencies:
- '@types/node'
@@ -4248,12 +4378,12 @@ snapshots:
fs-extra: 11.2.0
selfsigned: 2.4.1
- '@quasar/vite-plugin@1.9.0(@vitejs/plugin-vue@5.2.3(vite@6.2.3(@types/node@20.17.28)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0))(vue@3.5.13(typescript@5.5.4)))(quasar@2.18.1)(vite@6.2.3(@types/node@20.17.28)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0))(vue@3.5.13(typescript@5.5.4))':
+ '@quasar/vite-plugin@1.9.0(@vitejs/plugin-vue@5.2.3(vite@6.2.3(@types/node@20.16.1)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0))(vue@3.4.38(typescript@5.5.4)))(quasar@2.18.1)(vite@6.2.3(@types/node@20.16.1)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0))(vue@3.4.38(typescript@5.5.4))':
dependencies:
- '@vitejs/plugin-vue': 5.2.3(vite@6.2.3(@types/node@20.17.28)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0))(vue@3.5.13(typescript@5.5.4))
+ '@vitejs/plugin-vue': 5.2.3(vite@6.2.3(@types/node@20.16.1)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0))(vue@3.4.38(typescript@5.5.4))
quasar: 2.18.1
- vite: 6.2.3(@types/node@20.17.28)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0)
- vue: 3.5.13(typescript@5.5.4)
+ vite: 6.2.3(@types/node@20.16.1)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0)
+ vue: 3.4.38(typescript@5.5.4)
'@rollup/pluginutils@5.1.0(rollup@4.37.0)':
dependencies:
@@ -4323,6 +4453,8 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.37.0':
optional: true
+ '@socket.io/component-emitter@3.1.1': {}
+
'@svgdotjs/svg.draggable.js@3.0.6(@svgdotjs/svg.js@3.2.4)':
dependencies:
'@svgdotjs/svg.js': 3.2.4
@@ -4342,15 +4474,18 @@ snapshots:
dependencies:
'@svgdotjs/svg.js': 3.2.4
- '@tato30/vue-pdf@1.11.3(vue@3.5.13(typescript@5.5.4))':
+ '@tato30/vue-pdf@1.11.0(vue@3.4.38(typescript@5.5.4))':
dependencies:
- pdfjs-dist: 4.9.124
- vue: 3.5.13(typescript@5.5.4)
+ pdfjs-dist: 4.5.136
+ vue: 3.4.38(typescript@5.5.4)
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
'@types/body-parser@1.19.5':
dependencies:
'@types/connect': 3.4.38
- '@types/node': 20.17.28
+ '@types/node': 20.16.1
'@types/chrome@0.0.262':
dependencies:
@@ -4363,7 +4498,7 @@ snapshots:
'@types/connect@3.4.38':
dependencies:
- '@types/node': 20.17.28
+ '@types/node': 20.16.1
'@types/cordova@11.0.3': {}
@@ -4373,7 +4508,7 @@ snapshots:
'@types/express-serve-static-core@4.19.0':
dependencies:
- '@types/node': 20.17.28
+ '@types/node': 20.16.1
'@types/qs': 6.9.14
'@types/range-parser': 1.2.7
'@types/send': 0.17.4
@@ -4415,9 +4550,9 @@ snapshots:
'@types/node-forge@1.3.11':
dependencies:
- '@types/node': 20.17.28
+ '@types/node': 20.16.1
- '@types/node@20.17.28':
+ '@types/node@20.16.1':
dependencies:
undici-types: 6.19.8
@@ -4430,12 +4565,12 @@ snapshots:
'@types/send@0.17.4':
dependencies:
'@types/mime': 1.3.5
- '@types/node': 20.17.28
+ '@types/node': 20.16.1
'@types/serve-static@1.15.7':
dependencies:
'@types/http-errors': 2.0.4
- '@types/node': 20.17.28
+ '@types/node': 20.16.1
'@types/send': 0.17.4
'@types/uuid@10.0.0': {}
@@ -4466,10 +4601,10 @@ snapshots:
'@typescript-eslint/types': 8.28.0
eslint-visitor-keys: 4.2.0
- '@vitejs/plugin-vue@5.2.3(vite@6.2.3(@types/node@20.17.28)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0))(vue@3.5.13(typescript@5.5.4))':
+ '@vitejs/plugin-vue@5.2.3(vite@6.2.3(@types/node@20.16.1)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0))(vue@3.4.38(typescript@5.5.4))':
dependencies:
- vite: 6.2.3(@types/node@20.17.28)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0)
- vue: 3.5.13(typescript@5.5.4)
+ vite: 6.2.3(@types/node@20.16.1)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0)
+ vue: 3.4.38(typescript@5.5.4)
'@volar/language-core@2.4.12':
dependencies:
@@ -4483,6 +4618,14 @@ snapshots:
path-browserify: 1.0.1
vscode-uri: 3.1.0
+ '@vue/compiler-core@3.4.38':
+ dependencies:
+ '@babel/parser': 7.24.7
+ '@vue/shared': 3.4.38
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.2.0
+
'@vue/compiler-core@3.5.13':
dependencies:
'@babel/parser': 7.27.0
@@ -4491,27 +4634,32 @@ snapshots:
estree-walker: 2.0.2
source-map-js: 1.2.1
+ '@vue/compiler-dom@3.4.38':
+ dependencies:
+ '@vue/compiler-core': 3.4.38
+ '@vue/shared': 3.4.38
+
'@vue/compiler-dom@3.5.13':
dependencies:
'@vue/compiler-core': 3.5.13
'@vue/shared': 3.5.13
- '@vue/compiler-sfc@3.5.13':
+ '@vue/compiler-sfc@3.4.38':
dependencies:
- '@babel/parser': 7.27.0
- '@vue/compiler-core': 3.5.13
- '@vue/compiler-dom': 3.5.13
- '@vue/compiler-ssr': 3.5.13
- '@vue/shared': 3.5.13
+ '@babel/parser': 7.24.7
+ '@vue/compiler-core': 3.4.38
+ '@vue/compiler-dom': 3.4.38
+ '@vue/compiler-ssr': 3.4.38
+ '@vue/shared': 3.4.38
estree-walker: 2.0.2
- magic-string: 0.30.17
- postcss: 8.5.3
- source-map-js: 1.2.1
+ magic-string: 0.30.10
+ postcss: 8.4.41
+ source-map-js: 1.2.0
- '@vue/compiler-ssr@3.5.13':
+ '@vue/compiler-ssr@3.4.38':
dependencies:
- '@vue/compiler-dom': 3.5.13
- '@vue/shared': 3.5.13
+ '@vue/compiler-dom': 3.4.38
+ '@vue/shared': 3.4.38
'@vue/compiler-vue2@2.7.16':
dependencies:
@@ -4520,8 +4668,6 @@ snapshots:
'@vue/devtools-api@6.6.3': {}
- '@vue/devtools-api@6.6.4': {}
-
'@vue/language-core@2.2.8(typescript@5.5.4)':
dependencies:
'@volar/language-core': 2.4.12
@@ -4535,34 +4681,36 @@ snapshots:
optionalDependencies:
typescript: 5.5.4
- '@vue/reactivity@3.5.13':
+ '@vue/reactivity@3.4.38':
dependencies:
- '@vue/shared': 3.5.13
+ '@vue/shared': 3.4.38
- '@vue/runtime-core@3.5.13':
+ '@vue/runtime-core@3.4.38':
dependencies:
- '@vue/reactivity': 3.5.13
- '@vue/shared': 3.5.13
+ '@vue/reactivity': 3.4.38
+ '@vue/shared': 3.4.38
- '@vue/runtime-dom@3.5.13':
+ '@vue/runtime-dom@3.4.38':
dependencies:
- '@vue/reactivity': 3.5.13
- '@vue/runtime-core': 3.5.13
- '@vue/shared': 3.5.13
+ '@vue/reactivity': 3.4.38
+ '@vue/runtime-core': 3.4.38
+ '@vue/shared': 3.4.38
csstype: 3.1.3
- '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.5.4))':
+ '@vue/server-renderer@3.4.38(vue@3.4.38(typescript@5.5.4))':
dependencies:
- '@vue/compiler-ssr': 3.5.13
- '@vue/shared': 3.5.13
- vue: 3.5.13(typescript@5.5.4)
+ '@vue/compiler-ssr': 3.4.38
+ '@vue/shared': 3.4.38
+ vue: 3.4.38(typescript@5.5.4)
+
+ '@vue/shared@3.4.38': {}
'@vue/shared@3.5.13': {}
- '@vuepic/vue-datepicker@8.8.1(vue@3.5.13(typescript@5.5.4))':
+ '@vuepic/vue-datepicker@8.8.1(vue@3.4.38(typescript@5.5.4))':
dependencies:
date-fns: 3.6.0
- vue: 3.5.13(typescript@5.5.4)
+ vue: 3.4.38(typescript@5.5.4)
'@webassemblyjs/ast@1.9.0':
dependencies:
@@ -4661,6 +4809,9 @@ snapshots:
'@yr/monotone-cubic-spline@1.0.3': {}
+ abbrev@1.1.1:
+ optional: true
+
abort-controller@3.0.0:
dependencies:
event-target-shim: 5.0.1
@@ -4678,6 +4829,13 @@ snapshots:
acorn@8.14.1: {}
+ agent-base@6.0.2:
+ dependencies:
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
ajv-errors@1.0.1(ajv@6.12.6):
dependencies:
ajv: 6.12.6
@@ -4733,6 +4891,9 @@ snapshots:
aproba@1.2.0: {}
+ aproba@2.0.0:
+ optional: true
+
archiver-utils@5.0.2:
dependencies:
glob: 10.4.5
@@ -4753,6 +4914,12 @@ snapshots:
tar-stream: 3.1.7
zip-stream: 6.0.1
+ are-we-there-yet@2.0.0:
+ dependencies:
+ delegates: 1.0.0
+ readable-stream: 3.6.2
+ optional: true
+
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
@@ -4791,17 +4958,17 @@ snapshots:
atob@2.1.2: {}
- autoprefixer@10.4.21(postcss@8.5.3):
+ autoprefixer@10.4.20(postcss@8.5.3):
dependencies:
- browserslist: 4.24.4
+ browserslist: 4.23.3
caniuse-lite: 1.0.30001707
fraction.js: 4.3.7
normalize-range: 0.1.2
- picocolors: 1.1.1
+ picocolors: 1.0.1
postcss: 8.5.3
postcss-value-parser: 4.2.0
- axios@1.8.4:
+ axios@1.7.4:
dependencies:
follow-redirects: 1.15.6
form-data: 4.0.0
@@ -4948,12 +5115,12 @@ snapshots:
dependencies:
pako: 1.0.11
- browserslist@4.24.4:
+ browserslist@4.23.3:
dependencies:
caniuse-lite: 1.0.30001707
- electron-to-chromium: 1.5.126
- node-releases: 2.0.19
- update-browserslist-db: 1.1.3(browserslist@4.24.4)
+ electron-to-chromium: 1.5.13
+ node-releases: 2.0.18
+ update-browserslist-db: 1.1.0(browserslist@4.23.3)
buffer-builder@0.2.0: {}
@@ -5051,6 +5218,16 @@ snapshots:
caniuse-lite@1.0.30001707: {}
+ canvas@2.11.2:
+ dependencies:
+ '@mapbox/node-pre-gyp': 1.0.11
+ nan: 2.19.0
+ simple-get: 3.1.1
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+ optional: true
+
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
@@ -5091,6 +5268,9 @@ snapshots:
chownr@1.1.4: {}
+ chownr@2.0.0:
+ optional: true
+
chrome-trace-event@1.0.4: {}
ci-info@4.0.0: {}
@@ -5144,6 +5324,9 @@ snapshots:
color-name@1.1.4: {}
+ color-support@1.1.3:
+ optional: true
+
colorjs.io@0.5.2: {}
combined-stream@1.0.8:
@@ -5195,6 +5378,9 @@ snapshots:
console-browserify@1.2.0: {}
+ console-control-strings@1.1.0:
+ optional: true
+
constants-browserify@1.0.0: {}
content-disposition@0.5.4:
@@ -5278,8 +5464,6 @@ snapshots:
date-fns@3.6.0: {}
- dayjs@1.11.13: {}
-
de-indent@1.0.2: {}
debug@2.6.9:
@@ -5296,6 +5480,11 @@ snapshots:
decode-uri-component@0.2.2: {}
+ decompress-response@4.2.1:
+ dependencies:
+ mimic-response: 2.1.0
+ optional: true
+
deep-is@0.1.4: {}
default-browser-id@5.0.0: {}
@@ -5340,6 +5529,9 @@ snapshots:
delayed-stream@1.0.0: {}
+ delegates@1.0.0:
+ optional: true
+
depd@2.0.0: {}
des.js@1.1.0:
@@ -5349,6 +5541,9 @@ snapshots:
destroy@1.2.0: {}
+ detect-libc@2.0.3:
+ optional: true
+
diffie-hellman@5.0.3:
dependencies:
bn.js: 4.12.1
@@ -5389,7 +5584,7 @@ snapshots:
ee-first@1.1.1: {}
- electron-to-chromium@1.5.126: {}
+ electron-to-chromium@1.5.13: {}
elementtree@0.1.7:
dependencies:
@@ -5419,6 +5614,20 @@ snapshots:
dependencies:
once: 1.4.0
+ engine.io-client@6.5.3:
+ dependencies:
+ '@socket.io/component-emitter': 3.1.1
+ debug: 4.3.4
+ engine.io-parser: 5.2.2
+ ws: 8.11.0
+ xmlhttprequest-ssl: 2.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ engine.io-parser@5.2.2: {}
+
enhanced-resolve@4.5.0:
dependencies:
graceful-fs: 4.2.11
@@ -5477,8 +5686,6 @@ snapshots:
escalade@3.1.2: {}
- escalade@3.2.0: {}
-
escape-html@1.0.3: {}
escape-string-regexp@4.0.0: {}
@@ -5783,6 +5990,11 @@ snapshots:
jsonfile: 6.1.0
universalify: 2.0.1
+ fs-minipass@2.1.0:
+ dependencies:
+ minipass: 3.3.6
+ optional: true
+
fs-write-stream-atomic@1.0.10:
dependencies:
graceful-fs: 4.2.11
@@ -5806,6 +6018,19 @@ snapshots:
function-bind@1.1.2: {}
+ gauge@3.0.2:
+ dependencies:
+ aproba: 2.0.0
+ color-support: 1.1.3
+ console-control-strings: 1.1.0
+ has-unicode: 2.0.1
+ object-assign: 4.1.1
+ signal-exit: 3.0.7
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wide-align: 1.1.5
+ optional: true
+
get-caller-file@2.0.5: {}
get-intrinsic@1.2.4:
@@ -5890,6 +6115,9 @@ snapshots:
has-symbols@1.1.0: {}
+ has-unicode@2.0.1:
+ optional: true
+
has-value@0.3.1:
dependencies:
get-value: 2.0.6
@@ -5955,6 +6183,14 @@ snapshots:
https-browserify@1.0.0: {}
+ https-proxy-agent@5.0.1:
+ dependencies:
+ agent-base: 6.0.2
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
iconv-lite@0.4.24:
dependencies:
safer-buffer: 2.1.2
@@ -6148,7 +6384,7 @@ snapshots:
jwt-decode@4.0.0: {}
- keycloak-js@25.0.6:
+ keycloak-js@25.0.4:
dependencies:
js-sha256: 0.11.0
jwt-decode: 4.0.0
@@ -6232,15 +6468,25 @@ snapshots:
dependencies:
yallist: 3.1.1
- magic-string@0.30.17:
+ lru-cache@6.0.0:
dependencies:
- '@jridgewell/sourcemap-codec': 1.5.0
+ yallist: 4.0.0
+ optional: true
+
+ magic-string@0.30.10:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.4.15
make-dir@2.1.0:
dependencies:
pify: 4.0.1
semver: 5.7.2
+ make-dir@3.1.0:
+ dependencies:
+ semver: 6.3.1
+ optional: true
+
map-cache@0.2.2: {}
map-visit@1.0.0:
@@ -6362,10 +6608,13 @@ snapshots:
mime@1.6.0: {}
- mime@4.0.6: {}
+ mime@4.0.4: {}
mimic-fn@2.1.0: {}
+ mimic-response@2.1.0:
+ optional: true
+
mimoza@1.0.0:
dependencies:
mime-db: 1.52.0
@@ -6388,8 +6637,22 @@ snapshots:
minimist@1.2.8: {}
+ minipass@3.3.6:
+ dependencies:
+ yallist: 4.0.0
+ optional: true
+
+ minipass@5.0.0:
+ optional: true
+
minipass@7.1.2: {}
+ minizlib@2.1.2:
+ dependencies:
+ minipass: 3.3.6
+ yallist: 4.0.0
+ optional: true
+
mississippi@3.0.0:
dependencies:
concat-stream: 1.6.2
@@ -6412,6 +6675,9 @@ snapshots:
dependencies:
minimist: 1.2.8
+ mkdirp@1.0.4:
+ optional: true
+
mlly@1.7.4:
dependencies:
acorn: 8.14.1
@@ -6440,11 +6706,16 @@ snapshots:
mute-stream@1.0.0: {}
+ nan@2.19.0:
+ optional: true
+
nan@2.22.2:
optional: true
nanoid@3.3.11: {}
+ nanoid@3.3.7: {}
+
nanomatch@1.2.13:
dependencies:
arr-diff: 4.0.0
@@ -6506,7 +6777,12 @@ snapshots:
util: 0.11.1
vm-browserify: 1.1.2
- node-releases@2.0.19: {}
+ node-releases@2.0.18: {}
+
+ nopt@5.0.0:
+ dependencies:
+ abbrev: 1.1.1
+ optional: true
normalize-path@2.1.1:
dependencies:
@@ -6517,8 +6793,19 @@ snapshots:
normalize-range@0.1.2: {}
+ npmlog@5.0.1:
+ dependencies:
+ are-we-there-yet: 2.0.0
+ console-control-strings: 1.1.0
+ gauge: 3.0.2
+ set-blocking: 2.0.0
+ optional: true
+
number-to-words@1.2.4: {}
+ object-assign@4.1.1:
+ optional: true
+
object-copy@0.1.0:
dependencies:
copy-descriptor: 0.1.1
@@ -6562,7 +6849,7 @@ snapshots:
dependencies:
mimic-fn: 2.1.0
- open-props@1.7.14: {}
+ open-props@1.7.5: {}
open@10.1.0:
dependencies:
@@ -6683,6 +6970,9 @@ snapshots:
path-to-regexp@0.1.12: {}
+ path2d@0.2.1:
+ optional: true
+
pathe@1.1.2: {}
pathe@2.0.3: {}
@@ -6697,9 +6987,15 @@ snapshots:
pdfjs-dist@2.6.347: {}
- pdfjs-dist@4.9.124:
+ pdfjs-dist@4.5.136:
optionalDependencies:
- '@napi-rs/canvas': 0.1.68
+ canvas: 2.11.2
+ path2d: 0.2.1
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ picocolors@1.0.1: {}
picocolors@1.1.1: {}
@@ -6709,15 +7005,13 @@ snapshots:
pify@4.0.1: {}
- pinia@2.3.1(typescript@5.5.4)(vue@3.5.13(typescript@5.5.4)):
+ pinia@2.2.2(typescript@5.5.4)(vue@3.4.38(typescript@5.5.4)):
dependencies:
- '@vue/devtools-api': 6.6.4
- vue: 3.5.13(typescript@5.5.4)
- vue-demi: 0.14.10(vue@3.5.13(typescript@5.5.4))
+ '@vue/devtools-api': 6.6.3
+ vue: 3.4.38(typescript@5.5.4)
+ vue-demi: 0.14.10(vue@3.4.38(typescript@5.5.4))
optionalDependencies:
typescript: 5.5.4
- transitivePeerDependencies:
- - '@vue/composition-api'
pkg-dir@3.0.0:
dependencies:
@@ -6729,11 +7023,11 @@ snapshots:
mlly: 1.7.4
pathe: 2.0.3
- playwright-core@1.51.1: {}
+ playwright-core@1.46.1: {}
- playwright@1.51.1:
+ playwright@1.46.1:
dependencies:
- playwright-core: 1.51.1
+ playwright-core: 1.46.1
optionalDependencies:
fsevents: 2.3.2
@@ -6741,6 +7035,12 @@ snapshots:
postcss-value-parser@4.2.0: {}
+ postcss@8.4.41:
+ dependencies:
+ nanoid: 3.3.7
+ picocolors: 1.0.1
+ source-map-js: 1.2.0
+
postcss@8.5.3:
dependencies:
nanoid: 3.3.11
@@ -6749,7 +7049,7 @@ snapshots:
prelude-ls@1.2.1: {}
- prettier@3.5.3: {}
+ prettier@3.3.3: {}
process-nextick-args@2.0.1: {}
@@ -6915,6 +7215,11 @@ snapshots:
dependencies:
glob: 7.2.3
+ rimraf@3.0.2:
+ dependencies:
+ glob: 7.2.3
+ optional: true
+
ripemd160@2.0.2:
dependencies:
hash-base: 3.0.5
@@ -7106,6 +7411,14 @@ snapshots:
semver@5.7.2: {}
+ semver@6.3.1:
+ optional: true
+
+ semver@7.6.0:
+ dependencies:
+ lru-cache: 6.0.0
+ optional: true
+
semver@7.6.3: {}
send@0.19.0:
@@ -7143,6 +7456,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ set-blocking@2.0.0:
+ optional: true
+
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
@@ -7217,7 +7533,17 @@ snapshots:
signal-exit@4.1.0: {}
- signature_pad@5.0.7: {}
+ signature_pad@5.0.2: {}
+
+ simple-concat@1.0.1:
+ optional: true
+
+ simple-get@3.1.1:
+ dependencies:
+ decompress-response: 4.2.1
+ once: 1.4.0
+ simple-concat: 1.0.1
+ optional: true
snapdragon-node@2.1.1:
dependencies:
@@ -7242,8 +7568,28 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ socket.io-client@4.7.5:
+ dependencies:
+ '@socket.io/component-emitter': 3.1.1
+ debug: 4.3.4
+ engine.io-client: 6.5.3
+ socket.io-parser: 4.2.4
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ socket.io-parser@4.2.4:
+ dependencies:
+ '@socket.io/component-emitter': 3.1.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+
source-list-map@2.0.1: {}
+ source-map-js@1.2.0: {}
+
source-map-js@1.2.1: {}
source-map-resolve@0.5.3:
@@ -7366,6 +7712,16 @@ snapshots:
fast-fifo: 1.3.2
streamx: 2.18.0
+ tar@6.2.1:
+ dependencies:
+ chownr: 2.0.0
+ fs-minipass: 2.1.0
+ minipass: 5.0.0
+ minizlib: 2.1.2
+ mkdirp: 1.0.4
+ yallist: 4.0.0
+ optional: true
+
terser-webpack-plugin@1.4.6(webpack@4.47.0):
dependencies:
cacache: 12.0.4
@@ -7436,6 +7792,8 @@ snapshots:
to-arraybuffer@1.0.1: {}
+ to-fast-properties@2.0.0: {}
+
to-object-path@0.3.0:
dependencies:
kind-of: 3.2.2
@@ -7533,11 +7891,11 @@ snapshots:
upath@1.2.0:
optional: true
- update-browserslist-db@1.1.3(browserslist@4.24.4):
+ update-browserslist-db@1.1.0(browserslist@4.23.3):
dependencies:
- browserslist: 4.24.4
- escalade: 3.2.0
- picocolors: 1.1.1
+ browserslist: 4.23.3
+ escalade: 3.1.2
+ picocolors: 1.0.1
uri-js@4.4.1:
dependencies:
@@ -7570,13 +7928,13 @@ snapshots:
vary@1.1.2: {}
- vite@6.2.3(@types/node@20.17.28)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0):
+ vite@6.2.3(@types/node@20.16.1)(sass-embedded@1.86.0)(sass@1.77.8)(terser@5.31.0):
dependencies:
esbuild: 0.25.1
postcss: 8.5.3
rollup: 4.37.0
optionalDependencies:
- '@types/node': 20.17.28
+ '@types/node': 20.16.1
fsevents: 2.3.3
sass: 1.77.8
sass-embedded: 1.86.0
@@ -7586,24 +7944,24 @@ snapshots:
vscode-uri@3.1.0: {}
- vue-component-type-helpers@2.2.8: {}
+ vue-component-type-helpers@2.1.10: {}
- vue-demi@0.14.10(vue@3.5.13(typescript@5.5.4)):
+ vue-demi@0.14.10(vue@3.4.38(typescript@5.5.4)):
dependencies:
- vue: 3.5.13(typescript@5.5.4)
+ vue: 3.4.38(typescript@5.5.4)
vue-dragscroll@4.0.6(typescript@5.5.4):
dependencies:
- vue: 3.5.13(typescript@5.5.4)
+ vue: 3.4.38(typescript@5.5.4)
transitivePeerDependencies:
- typescript
- vue-i18n@11.1.2(vue@3.5.13(typescript@5.5.4)):
+ vue-i18n@11.1.2(vue@3.4.38(typescript@5.5.4)):
dependencies:
'@intlify/core-base': 11.1.2
'@intlify/shared': 11.1.2
'@vue/devtools-api': 6.6.3
- vue: 3.5.13(typescript@5.5.4)
+ vue: 3.4.38(typescript@5.5.4)
vue-pdf@4.3.0(webpack@4.47.0):
dependencies:
@@ -7618,10 +7976,10 @@ snapshots:
vue-resize-sensor@2.0.0: {}
- vue-router@4.5.0(vue@3.5.13(typescript@5.5.4)):
+ vue-router@4.4.3(vue@3.4.38(typescript@5.5.4)):
dependencies:
- '@vue/devtools-api': 6.6.4
- vue: 3.5.13(typescript@5.5.4)
+ '@vue/devtools-api': 6.6.3
+ vue: 3.4.38(typescript@5.5.4)
vue-tsc@2.2.8(typescript@5.5.4):
dependencies:
@@ -7629,18 +7987,18 @@ snapshots:
'@vue/language-core': 2.2.8(typescript@5.5.4)
typescript: 5.5.4
- vue3-apexcharts@1.8.0(apexcharts@4.5.0)(vue@3.5.13(typescript@5.5.4)):
+ vue3-apexcharts@1.8.0(apexcharts@4.5.0)(vue@3.4.38(typescript@5.5.4)):
dependencies:
apexcharts: 4.5.0
- vue: 3.5.13(typescript@5.5.4)
+ vue: 3.4.38(typescript@5.5.4)
- vue@3.5.13(typescript@5.5.4):
+ vue@3.4.38(typescript@5.5.4):
dependencies:
- '@vue/compiler-dom': 3.5.13
- '@vue/compiler-sfc': 3.5.13
- '@vue/runtime-dom': 3.5.13
- '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.5.4))
- '@vue/shared': 3.5.13
+ '@vue/compiler-dom': 3.4.38
+ '@vue/compiler-sfc': 3.4.38
+ '@vue/runtime-dom': 3.4.38
+ '@vue/server-renderer': 3.4.38(vue@3.4.38(typescript@5.5.4))
+ '@vue/shared': 3.4.38
optionalDependencies:
typescript: 5.5.4
@@ -7721,6 +8079,11 @@ snapshots:
dependencies:
isexe: 2.0.0
+ wide-align@1.1.5:
+ dependencies:
+ string-width: 4.2.3
+ optional: true
+
wildcard@2.0.1: {}
word-wrap@1.2.5: {}
@@ -7755,6 +8118,10 @@ snapshots:
wrappy@1.0.2: {}
+ ws@8.11.0: {}
+
+ xmlhttprequest-ssl@2.0.0: {}
+
xtend@4.0.2: {}
y18n@4.0.3: {}
@@ -7763,6 +8130,9 @@ snapshots:
yallist@3.1.1: {}
+ yallist@4.0.0:
+ optional: true
+
yaml-eslint-parser@1.2.2:
dependencies:
eslint-visitor-keys: 3.4.3
diff --git a/public/images/customer-CORP-avartar-female.png b/public/images/customer-CORP-avartar-female.png
index 4cbb894f..446ef866 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 ae177f60..6ad95d7d 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 c3ba574e..ca0a2bf1 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 ce0ab20c..e9fd15fe 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 ce9370f1..66ace3a0 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 aaf5fb1f..a8daa8ff 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
deleted file mode 100644
index 0493168b..00000000
Binary files a/public/img-group.png and /dev/null differ
diff --git a/public/no-img-female.png b/public/no-img-female.png
index 95f959ff..4e177dca 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 f0ccba15..861f356a 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 963c4ad2..bce4fc0a 100644
--- a/public/option/option.json
+++ b/public/option/option.json
@@ -1,28 +1,5 @@
{
"eng": {
- "visaType": [
- {
- "label": "Non-LA",
- "value": "nla"
- },
- {
- "label": "Non-B",
- "value": "nb"
- },
- {
- "label": "TV.60",
- "value": "tv60"
- },
- {
- "label": "Non-TR",
- "value": "ntr"
- },
- {
- "label": "TV.30",
- "value": "tv30"
- }
- ],
-
"workerStatus": [
{
"label": "Normal",
@@ -177,21 +154,20 @@
{ "label": "VS2", "value": "VS2" },
{ "label": "WO", "value": "WO" },
{ "label": "WP390", "value": "WP390" },
- { "label": "WP44", "value": "WP44" },
- { "label": "CUST", "value": "CUST" }
+ { "label": "WP44", "value": "WP44" }
],
"prefix": [
{
- "label": "MR",
+ "label": "Mr",
"value": "mr"
},
{
- "label": "MRS",
+ "label": "Mrs",
"value": "mrs"
},
{
- "label": "MISS",
+ "label": "Miss",
"value": "miss"
}
],
@@ -207,44 +183,29 @@
}
],
- "border": [
+ "training": [
{
- "label": "Mae Sot, Tak Province",
+ "label": "Myanmar Labor Training Center - Mae Sot, Tak Province",
"value": "trainingTak"
},
{
- "label": "Koh Song, Ranong province",
+ "label": "Myanmar Labor Training Center - Kawthoung, Ranong Province",
"value": "trainingRanong"
},
{
- "label": "Nong Khai, Nong Khai Province",
+ "label": "Laos Labor Training Center - Nong Khai, Nong Khai Province",
"value": "trainingNongKhai"
},
{
- "label": "Aranyaprathet, Sa Kaeo Province",
+ "label": "Cambodian Labor Training Center - Aranyaprathet, Sa Kaeo Province",
"value": "trainingSaKaeo"
},
{
- "label": "Ban Laem, Chanthaburi Province",
+ "label": "Cambodian Labor Training Center - Ban Laem, Chanthaburi Province",
"value": "trainingChanthaburi"
}
],
- "training": [
- {
- "label": "The first center accepts work. and end of employment Tak Province",
- "value": "trainingTak"
- },
- {
- "label": "The first center accepts work. and end of employment Nong Khai Province",
- "value": "trainingNongKhai"
- },
- {
- "label": "The first center accepts work. and end of employment Sa Kaeo Province",
- "value": "trainingSaKaeo"
- }
- ],
-
"nationality": [
{
"label": "Thai",
@@ -1089,29 +1050,6 @@
},
"tha": {
- "visaType": [
- {
- "label": "Non-LA",
- "value": "nla"
- },
- {
- "label": "Non-B",
- "value": "nb"
- },
- {
- "label": "ผผ.60",
- "value": "tv60"
- },
- {
- "label": "Non-TR",
- "value": "ntr"
- },
- {
- "label": "ผผ.30",
- "value": "tv30"
- }
- ],
-
"workerStatus": [
{
"label": "ปกติ",
@@ -1266,8 +1204,7 @@
{ "label": "VS2", "value": "VS2" },
{ "label": "WO", "value": "WO" },
{ "label": "WP390", "value": "WP390" },
- { "label": "WP44", "value": "WP44" },
- { "label": "CUST", "value": "CUST" }
+ { "label": "WP44", "value": "WP44" }
],
"prefix": [
@@ -1296,44 +1233,29 @@
}
],
- "border": [
+ "training": [
{
- "label": "แม่สอด จ.ตาก",
+ "label": "สถานที่อบรมแรงงานเมียนมา-แม่สอด จ.ตาก",
"value": "trainingTak"
},
{
- "label": "เกาะสอง จ.ระนอง",
+ "label": "สถานที่อบรมแรงงานเมียนมา-เกาะสอง จ.ระนอง",
"value": "trainingRanong"
},
{
- "label": "หนองคาย จ.หนองคาย",
+ "label": "สถานที่อบรมแรงงานลาว-หนองคาย จ.หนองคาย",
"value": "trainingNongKhai"
},
{
- "label": "อรัญประเทศ จ.สระแก้ว",
+ "label": "สถานที่อบรมแรงงานกัมพูชา-อรัญประเทศ จ.สระแก้ว",
"value": "trainingSaKaeo"
},
{
- "label": "บ้านแหลม จ.จันทบุรี",
+ "label": "สถานที่อบรมแรงงานกัมพูชา-บ้านแหลม จ.จันทบุรี",
"value": "trainingChanthaburi"
}
],
- "training": [
- {
- "label": "ศูนย์แรกรับเข้าทำงาน และสิ้นสุดการจ้าง จังหวัดตาก",
- "value": "trainingTak"
- },
- {
- "label": "ศูนย์แรกรับเข้าทำงาน และสิ้นสุดการจ้าง จังหวัดหนองคาย",
- "value": "trainingNongKhai"
- },
- {
- "label": "ศูนย์แรกรับเข้าทำงาน และสิ้นสุดการจ้าง จังหวัดสระแก้ว",
- "value": "trainingSaKaeo"
- }
- ],
-
"nationality": [
{
"label": "ไทย",
diff --git a/quasar.config.ts b/quasar.config.ts
index 38bb94c1..cc0715ad 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: 5174,
+ port: 5173,
},
framework: {
config: {},
diff --git a/src/boot/i18n.ts b/src/boot/i18n.ts
index 9430c38a..647f3d10 100644
--- a/src/boot/i18n.ts
+++ b/src/boot/i18n.ts
@@ -2,7 +2,6 @@ import { defineBoot } from '#q-app/wrappers';
import { createI18n } from 'vue-i18n';
import messages from 'src/i18n';
-import { Lang } from 'src/utils/ui';
export type MessageLanguages = keyof typeof messages;
// Type-define 'eng' as the master schema for the resource
@@ -27,7 +26,7 @@ export const i18n = createI18n<
MessageLanguages,
false
>({
- locale: 'tha',
+ locale: 'en-US',
legacy: false,
messages,
});
diff --git a/src/components/01_branch-management/BranchCard.vue b/src/components/01_branch-management/BranchCard.vue
index c10d63fc..83c268ba 100644
--- a/src/components/01_branch-management/BranchCard.vue
+++ b/src/components/01_branch-management/BranchCard.vue
@@ -89,7 +89,15 @@ defineProps<{
-
+
();
defineEmits<{
@@ -122,7 +121,7 @@ watch(
/>
{{ $t(`${title}`) }}
-
+
{{ `${$t('branch.form.bankAccountNo')} ${i + 1}` }}
@@ -176,8 +172,7 @@ watch(
+
+ (virtual = v === 'Virtual')"
+ :rules="[(val) => val && val.length > 0]"
+ :error-message="$t('form.error.required')"
+ >
+
+
+
+ {{ $t('general.noData') }}
+
+
+
+
diff --git a/src/components/02_personnel-management/FormByType.vue b/src/components/02_personnel-management/FormByType.vue
index d1709858..526afa95 100644
--- a/src/components/02_personnel-management/FormByType.vue
+++ b/src/components/02_personnel-management/FormByType.vue
@@ -1,13 +1,13 @@
@@ -133,12 +186,11 @@ function deleteFile(name: string) {
/>
- (typeof v === 'string' ? (sourceNationality = v) : '')
"
- />
-
-
+
+
+
+ {{ $t('general.noData') }}
+
+
+
+
+
-
- (typeof v === 'string' ? (checkpoint = v) : '')
+ (v) => (typeof v === 'string' ? (importNationality = v) : '')
"
- />
-
-
+
+
+
+ {{ $t('general.noData') }}
+
+
+
+
+ (typeof v === 'string' ? (trainingPlace = v) : '')
"
- />
-
- (typeof v === 'string' ? (agencyStatus = v) : '')
- "
- />
+ @clear="trainingPlace = ''"
+ >
+
+
+
+ {{ $t('general.noData') }}
+
+
+
+
(typeof v === 'string' ? (remark = v) : '')
+ (v) => (typeof v === 'string' ? (checkpoint = v) : '')
"
- @clear="remark = ''"
+ @clear="checkpoint = ''"
/>
-
-
-
-
-
-
-
-
-
- {{ file.file.name }}
-
- (typeof v === 'string' ? (checkpointEN = v) : '')
+ "
+ @clear="checkpointEN = ''"
+ />
+
+
+
-
-
-
+
+
+
+
+ {{ file.file.name }}
+
+
+
+
+
-
-
- openNewTab(item.url)"
- >
-
-
-
- {{ item.name }}
+
+
+ openNewTab(item.url)"
+ >
+
+
-
-
-
-
-
+
+
+
+
diff --git a/src/components/02_personnel-management/FormPerson.vue b/src/components/02_personnel-management/FormPerson.vue
index cb0463af..5fa321b6 100644
--- a/src/components/02_personnel-management/FormPerson.vue
+++ b/src/components/02_personnel-management/FormPerson.vue
@@ -1,8 +1,10 @@
@@ -96,19 +152,40 @@ watch(
for="input-citizen-id"
/>
-
+ :dense="dense"
+ :readonly="readonly"
+ :options="prefixNameOptions"
+ :for="`${prefixId}-select-prefix-name`"
+ :label="$t('personnel.form.prefixName')"
+ @filter="prefixNameFilter"
+ :model-value="readonly ? prefixName || '-' : prefixName"
+ @update:model-value="
+ (v) => (typeof v === 'string' ? (prefixName = v) : '')
+ "
+ @clear="prefixName = ''"
+ >
+
+
+
+ {{ $t('general.noData') }}
+
+
+
+
- (typeof v === 'string' ? (prefixName = v) : '')
+ "
+ @clear="prefixName = ''"
/>
@@ -253,13 +328,16 @@ watch(
hide-bottom-space
:readonly="readonly"
:label="$t('form.email')"
- :rules="[
- (val) => (val && val.length > 0) || $t('form.error.required'),
- (v: string) =>
- !v ||
- /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/g.test(v) ||
- $t('form.error.invalid'),
- ]"
+ :rules="
+ readonly
+ ? undefined
+ : [
+ (v: string) =>
+ !v ||
+ /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/g.test(v) ||
+ $t('form.error.invalid'),
+ ]
+ "
class="col-md-3 col-6"
:model-value="readonly ? email || '-' : email"
@update:model-value="(v) => (typeof v === 'string' ? (email = v) : '')"
@@ -275,16 +353,39 @@ watch(
-
+ @filter="genderFilter"
+ :model-value="readonly ? gender || '-' : gender"
+ @update:model-value="(v) => (typeof v === 'string' ? (gender = v) : '')"
+ @clear="gender = ''"
+ >
+
+
+
+ {{ $t('general.noData') }}
+
+
+
+
-
-
+
+
+
+ {{ $t('general.noData') }}
+
+
+
+
+
-
- (typeof v === 'string' ? (contactName = v) : '')
- "
- />
-
- (typeof v === 'string' ? (contactTel = v) : '')
- "
+ :rules="[(val: string) => !!val || $t('form.error.required')]"
+ @filter="nationalityFilter"
>
-
-
+
+
+
+ {{ $t('general.noData') }}
+
+
-
+
diff --git a/src/components/03_customer-management/DialogEmployee.vue b/src/components/03_customer-management/DialogEmployee.vue
deleted file mode 100644
index db428f83..00000000
--- a/src/components/03_customer-management/DialogEmployee.vue
+++ /dev/null
@@ -1,1656 +0,0 @@
-
-
-
-
-
{
- employeeFormState.imageDialog = true;
- employeeFormState.isImageEdit = false;
- }
- "
- @edit="
- () => {
- if (currentFromDataEmployee.id) {
- fetchImageList(
- currentFromDataEmployee.id,
- currentFromDataEmployee.selectedImage || '',
- 'employee',
- );
- }
- employeeFormState.imageDialog =
- employeeFormState.isImageEdit = true;
- }
- "
- @update:toggle-status="
- () => {
- currentFromDataEmployee.status =
- currentFromDataEmployee.status === 'CREATED'
- ? 'INACTIVE'
- : 'CREATED';
- }
- "
- />
-
-
-
-
-
- {
- if (!v) return;
- if (!currentFromDataEmployee.id) return;
- await employeeStore.addImageList(
- v,
- currentFromDataEmployee.id,
- Date.now().toString(),
- );
- await fetchImageList(
- currentFromDataEmployee.id,
- currentFromDataEmployee.selectedImage || '',
- 'employee',
- );
- }
- "
- @remove-image="
- async (v) => {
- if (!v) return;
- if (!currentFromDataEmployee.id) return;
- const name = v.split('/').pop() || '';
- await employeeStore.deleteImageByName(currentFromDataEmployee.id, name);
- await fetchImageList(
- currentFromDataEmployee.id,
- currentFromDataEmployee.selectedImage || '',
- 'employee',
- );
- }
- "
- @submit="
- async (v) => {
- if (employeeFormState.dialogModal && !currentFromDataEmployee.id) {
- employeeFormState.profileUrl = v;
- employeeFormState.imageDialog = false;
- } else {
- refreshImageState = true;
- employeeFormState.dialogType = 'edit';
- currentFromDataEmployee.selectedImage = v;
- employeeFormState.imageList
- ? (employeeFormState.imageList.selectedImage = v)
- : '';
- employeeFormState.profileUrl = `${baseUrl}/employee/${currentFromDataEmployee.id && currentFromDataEmployee.id}/image/${v}`;
- employeeFormStore.resetFormDataEmployee();
- await employeeFormStore.submitPersonal(onCreateImageList);
- employeeFormState.imageDialog = false;
- refreshImageState = false;
- employeeFormState.isEmployeeEdit = false;
- employeeFormState.dialogType = 'info';
- await fetchListEmployee();
- }
- }
- "
- >
-
-
- {{ $t('general.image') }}
- {{
- $i18n.locale === 'eng'
- ? `${currentFromDataEmployee.firstNameEN || currentFromDataEmployee.firstName} ${currentFromDataEmployee.lastNameEN || currentFromDataEmployee.lastName}`
- : `${currentFromDataEmployee.firstName} ${currentFromDataEmployee.lastName}`
- }}
-
-
-
-
-
-
-
diff --git a/src/components/03_customer-management/DrawerEmployee.vue b/src/components/03_customer-management/DrawerEmployee.vue
deleted file mode 100644
index 1c1d39bf..00000000
--- a/src/components/03_customer-management/DrawerEmployee.vue
+++ /dev/null
@@ -1,1772 +0,0 @@
-
-
-
-
-
-
-
{
- employeeFormState.isImageEdit = false;
- employeeFormStore.resetFormDataEmployee();
- employeeFormState.isEmployeeEdit = false;
- employeeFormState.dialogType = 'info';
- employeeFormState.currentIndexPassport = -1;
- }
- "
- @view="
- () => {
- employeeFormState.imageDialog = true;
- employeeFormState.isImageEdit = false;
- }
- "
- @edit="
- employeeFormState.imageDialog = employeeFormState.isImageEdit = true
- "
- @update:toggle-status="
- (v) => {
- if (currentFromDataEmployee.id !== undefined)
- $emit('changeStatus', v);
- }
- "
- :active="currentFromDataEmployee.status !== 'INACTIVE'"
- use-toggle
- color="white"
- icon="mdi-account-outline"
- :bg-color="
- employeeFormState.profileUrl
- ? 'white'
- : 'linear-gradient(135deg, rgba(43,137,223,1) 0%, rgba(230,51,81,1) 100%)'
- "
- v-model:current-tab="employeeFormState.currentTab"
- v-model:toggle-status="currentFromDataEmployee.status"
- fallback-cover="/images/employee-banner.png"
- :title="
- employeeFormState.currentEmployee
- ? setPrefixName(
- {
- namePrefix: employeeFormState.currentEmployee.namePrefix,
- firstName:
- employeeFormState.currentEmployee.firstName ||
- employeeFormState.currentEmployee.firstNameEN,
- lastName:
- employeeFormState.currentEmployee.lastName ||
- employeeFormState.currentEmployee.lastNameEN,
- firstNameEN: employeeFormState.currentEmployee.firstNameEN,
- lastNameEN: employeeFormState.currentEmployee.lastNameEN,
- },
- { locale },
- )
- : '-'
- "
- :caption="currentFromDataEmployee.code"
- :img="
- `${baseUrl}/employee/${currentFromDataEmployee.id}/image/${currentFromDataEmployee.selectedImage}`.concat(
- refreshImageState ? `?ts=${Date.now()}` : '',
- ) || null
- "
- :fallbackImg="`/images/employee-avatar-${currentFromDataEmployee.gender === 'male' ? 'male' : 'female'}.png`"
- :tabs-list="[
- {
- name: 'personalInfo',
- label: $t('customerEmployee.form.group.personalInfo'),
- },
- {
- name: 'passport',
- label: $t('customerEmployee.fileType.passport'),
- },
- {
- name: 'visa',
- label: $t('customerEmployee.form.group.visa'),
- },
- {
- name: 'healthCheck',
- label: $t('customerEmployee.form.group.healthCheck'),
- },
- {
- name: 'workHistory',
- label: $t('customerEmployee.form.group.workHistory'),
- },
- { name: 'other', label: $t('customerEmployee.form.group.other') },
- ]"
- :toggle-title="$t('status.title')"
- />
-
-
-
-
-
- {
- if (!v) return;
- if (!currentFromDataEmployee.id) return;
- await employeeStore.addImageList(
- v,
- currentFromDataEmployee.id,
- Date.now().toString(),
- );
- await fetchImageList(
- currentFromDataEmployee.id,
- currentFromDataEmployee.selectedImage || '',
- 'employee',
- );
- }
- "
- @remove-image="
- async (v) => {
- if (!v) return;
- if (!currentFromDataEmployee.id) return;
- const name = v.split('/').pop() || '';
- await employeeStore.deleteImageByName(currentFromDataEmployee.id, name);
- await fetchImageList(
- currentFromDataEmployee.id,
- currentFromDataEmployee.selectedImage || '',
- 'employee',
- );
- }
- "
- @submit="
- async (v) => {
- if (employeeFormState.dialogModal && !currentFromDataEmployee.id) {
- employeeFormState.profileUrl = v;
- employeeFormState.imageDialog = false;
- } else {
- refreshImageState = true;
- employeeFormState.dialogType = 'edit';
- currentFromDataEmployee.selectedImage = v;
- employeeFormState.imageList
- ? (employeeFormState.imageList.selectedImage = v)
- : '';
- employeeFormState.profileUrl = `${baseUrl}/employee/${currentFromDataEmployee.id && currentFromDataEmployee.id}/image/${v}`;
- employeeFormStore.resetFormDataEmployee();
- await employeeFormStore.submitPersonal(onCreateImageList);
- employeeFormState.imageDialog = false;
- refreshImageState = false;
- employeeFormState.isEmployeeEdit = false;
- employeeFormState.dialogType = 'info';
- await fetchListEmployee();
- }
- }
- "
- >
-
-
- {{ $t('general.image') }}
- {{
- $i18n.locale === 'eng'
- ? `${currentFromDataEmployee.firstNameEN || currentFromDataEmployee.firstName} ${currentFromDataEmployee.lastNameEN || currentFromDataEmployee.lastName}`
- : `${currentFromDataEmployee.firstName} ${currentFromDataEmployee.lastName}`
- }}
-
-
-
-
-
-
-
diff --git a/src/components/03_customer-management/FormEmployeeHealthCheck.vue b/src/components/03_customer-management/FormEmployeeHealthCheck.vue
index f8690dbe..b08e7a70 100644
--- a/src/components/03_customer-management/FormEmployeeHealthCheck.vue
+++ b/src/components/03_customer-management/FormEmployeeHealthCheck.vue
@@ -268,7 +268,6 @@ const insuranceCompanyFilter = selectFilterOptionRefMod(
('employeeOther');
:readonly="readonly || employeeOther.statusSave"
hide-bottom-space
class="col-md-3 col-6"
- :label="$t('general.nativeLanguage', { msg: $t('form.firstName') })"
+ :label="$t('form.firstName')"
:model-value="employeeOther.fatherFirstName"
@update:model-value="
(v) =>
@@ -122,7 +122,7 @@ const employeeOther = defineModel('employeeOther');
:readonly="readonly || employeeOther.statusSave"
hide-bottom-space
class="col-md-3 col-6"
- :label="$t('general.nativeLanguage', { msg: $t('form.lastName') })"
+ :label="$t('form.lastName')"
:model-value="employeeOther.fatherLastName"
@update:model-value="
(v) =>
@@ -177,7 +177,7 @@ const employeeOther = defineModel('employeeOther');
:readonly="readonly || employeeOther.statusSave"
hide-bottom-space
class="col-md-3 col-6"
- :label="$t('general.nativeLanguage', { msg: $t('form.firstName') })"
+ :label="$t('form.firstName')"
:model-value="employeeOther.motherFirstName"
@update:model-value="
(v) =>
@@ -193,7 +193,7 @@ const employeeOther = defineModel('employeeOther');
:readonly="readonly || employeeOther.statusSave"
hide-bottom-space
class="col-md-3 col-6"
- :label="$t('general.nativeLanguage', { msg: $t('form.lastName') })"
+ :label="$t('form.lastName')"
:model-value="employeeOther.motherLastName"
@update:model-value="
(v) =>
diff --git a/src/components/03_customer-management/FormEmployeePassport.vue b/src/components/03_customer-management/FormEmployeePassport.vue
index 06373538..1eb9096d 100644
--- a/src/components/03_customer-management/FormEmployeePassport.vue
+++ b/src/components/03_customer-management/FormEmployeePassport.vue
@@ -9,8 +9,6 @@ import useOptionStore from 'stores/options';
import DatePicker from '../shared/DatePicker.vue';
-import { dateFormat } from 'src/utils/datetime';
-
const optionStore = useOptionStore();
const { locale } = useI18n();
@@ -20,8 +18,8 @@ const issuePlace = defineModel('issuePlace');
const issueCountry = defineModel('issueCountry');
const issueDate = defineModel('issueDate');
const type = defineModel('type');
-const expireDate = defineModel('expireDate');
-const birthDate = defineModel('birthDate');
+const expireDate = defineModel('expireDate');
+const birthDate = defineModel('birthDate');
const workerStatus = defineModel('workerStatus');
const nationality = defineModel('nationality');
const gender = defineModel('gender');
@@ -34,8 +32,6 @@ const firstName = defineModel('firstName');
const namePrefix = defineModel('namePrefix');
const passportNumber = defineModel('passportNumber');
-const file = defineModel('file');
-
const passportValidator = /[a-zA-Z]{1}[a-zA-Z0-9]{1}[0-9]{5,7}$/;
const genderOptions = ref[]>([]);
@@ -107,7 +103,7 @@ onMounted(() => {
'label',
);
passportIssuingCountryFilter = selectFilterOptionRefMod(
- ref(optionStore.rawOption?.eng.nationality),
+ ref(optionStore.globalOption.nationality),
passportIssuingCountryOptions,
'label',
);
@@ -125,13 +121,13 @@ onMounted(() => {
);
genderFilter = selectFilterOptionRefMod(
- ref(optionStore.rawOption?.eng.gender),
+ ref(optionStore.globalOption?.gender),
genderOptions,
'label',
);
nationalityFilter = selectFilterOptionRefMod(
- ref(optionStore.rawOption?.eng.nationality),
+ ref(optionStore.globalOption?.nationality),
nationalityOptions,
'label',
);
@@ -156,7 +152,7 @@ watch(
);
passportIssuingCountryFilter = selectFilterOptionRefMod(
- ref(optionStore.rawOption?.eng.nationality),
+ ref(optionStore.globalOption.nationality),
passportIssuingCountryOptions,
'label',
);
@@ -168,43 +164,19 @@ watch(
);
genderFilter = selectFilterOptionRefMod(
- ref(optionStore.rawOption?.eng.gender),
+ ref(optionStore.globalOption?.gender),
genderOptions,
'label',
);
nationalityFilter = selectFilterOptionRefMod(
- ref(optionStore.rawOption?.eng.nationality),
+ ref(optionStore.globalOption?.nationality),
nationalityOptions,
'label',
);
},
);
-function browse() {
- inputFile?.click();
-}
-
-const inputFile = (() => {
- const _element = document.createElement('input');
- _element.type = 'file';
- _element.accept = 'image/jpeg,image/png';
- _element.addEventListener('change', change);
- return _element;
-})();
-
-async function change(e: Event) {
- const _element = e.target as HTMLInputElement | null;
- const _file = _element?.files?.[0];
-
- if (_file) {
- const newFileName = `passport-${dateFormat(new Date().toISOString())}-${_file.name}`;
- const renamedFile = new File([_file], newFileName, { type: _file.type });
-
- file.value = renamedFile;
- }
-}
-
watch(
() => namePrefix.value,
(v) => {
@@ -249,14 +221,20 @@ watch(
-
-
browse()"
- :disable="readonly"
- >
+
+
('arrivalAt');
const arrivalTMNo = defineModel('arrivalTmNo');
const arrivalTM = defineModel('arrivalTm');
const mrz = defineModel('mrz');
-const entryCount = defineModel('entryCount');
+const entryCount = defineModel('entryCount');
const issuePlace = defineModel('issuePlace');
const issueCountry = defineModel('issueCountry');
const issueDate = defineModel('visaIssueDate');
-const type = defineModel('type');
-const expireDate = defineModel('expireDate');
+const type = defineModel('visaType');
+const expireDate = defineModel('expireDate');
const remark = defineModel('remark');
const workerType = defineModel('workerType');
-const number = defineModel('number');
-const reportDate = defineModel('reportDate');
+const number = defineModel('visaNumber');
-//
-// const calculatedVisaDate = computed(() => {
-// if (!issueDate.value) return undefined;
-// return calculate90DayNext(issueDate.value);
-// });
+const calculatedVisaDate = computed(() => {
+ if (!issueDate.value) return undefined;
+ return calculate90DayNext(issueDate.value);
+});
defineProps<{
title?: string;
@@ -80,12 +78,6 @@ onMounted(async () => {
await fetchProvince();
});
-const visaIssueCountryOptions = ref[]>([]);
-let visaIssueCountryFilter: (
- value: string,
- update: (callbackFn: () => void, afterFn?: (ref: QSelect) => void) => void,
-) => void;
-
const visaTypeOptions = ref[]>([]);
let visaTypeFilter: (
value: string,
@@ -100,14 +92,8 @@ let workerTypeFilter: (
onMounted(() => {
visaTypeFilter = selectFilterOptionRefMod(
- ref(optionStore.globalOption?.visaType),
- visaTypeOptions,
- 'label',
- );
-
- visaIssueCountryFilter = selectFilterOptionRefMod(
ref(optionStore.globalOption?.nationality),
- visaIssueCountryOptions,
+ visaTypeOptions,
'label',
);
@@ -121,14 +107,8 @@ onMounted(() => {
watch(
() => optionStore.globalOption,
() => {
- visaIssueCountryFilter = selectFilterOptionRefMod(
- ref(optionStore.globalOption?.nationality),
- visaIssueCountryOptions,
- 'label',
- );
-
visaTypeFilter = selectFilterOptionRefMod(
- optionStore.globalOption.visaType,
+ optionStore.globalOption.nationality,
visaTypeOptions,
'label',
);
@@ -140,10 +120,6 @@ watch(
);
},
);
-//
-// watch([() => issueDate.value], () => {
-// reportDate.value = calculate90DayNext(issueDate.value);
-// });
@@ -157,7 +133,7 @@ watch(
name="mdi-passport"
style="background-color: var(--surface-3)"
/>
- {{ $t(title) }}
+ {{ title }}
@@ -448,11 +422,11 @@ watch(
class="col-md-4 col-6"
:dense="dense"
:readonly="readonly"
- :options="visaIssueCountryOptions"
+ :options="visaTypeOptions"
:hide-dropdown-icon="readonly"
:for="`${prefixId}-select-issue-country`"
:label="$t('customerEmployee.form.issueCountry')"
- @filter="visaIssueCountryFilter"
+ @filter="visaTypeFilter"
:model-value="readonly ? issueCountry || '-' : issueCountry"
@update:model-value="
(v) => (typeof v === 'string' ? (issueCountry = v) : '')
diff --git a/src/components/03_customer-management/TableEmpoloyee.vue b/src/components/03_customer-management/TableEmpoloyee.vue
index 000c701a..e5e49b51 100644
--- a/src/components/03_customer-management/TableEmpoloyee.vue
+++ b/src/components/03_customer-management/TableEmpoloyee.vue
@@ -22,8 +22,6 @@ const prop = withDefaults(
inTable?: boolean;
addButton?: boolean;
prefixId?: string;
- hideAction?: boolean;
- hideDelete?: boolean;
}>(),
{
gridView: false,
@@ -141,9 +139,8 @@ defineEmits<{
-
+ v-model="customerBranch"
+ :option-value="
+ (v) => ({
+ id: v.id,
+ address: v.address,
+ addressEN: v.addressEN,
+ provinceId: v.provinceId,
+ districtId: v.districtId,
+ subDistrictId: v.subDistrictId,
+ zipCode: v.zipCode,
+ })
+ "
+ emit-value
+ map-options
+ :options="employeeOwnerOption"
+ @filter="(val, update) => $emit('filterOwnerBranch', val, update)"
+ :rules="[
+ (val: string) =>
+ !!val ||
+ $t('form.error.selectField', {
+ field: $t('customerEmployee.branch'),
+ }),
+ ]"
+ >
+
+
+
+
+
+
+
+
+
+ {{
+ scope.opt.customer.customerType === 'CORP'
+ ? $t('customer.form.registerName')
+ : $t('customer.form.ownerName')
+ }}:
+
+ {{
+ scope.opt.customer.customerType === 'CORP'
+ ? $i18n.locale === 'eng'
+ ? scope.opt.registerNameEN
+ : scope.opt.registerName
+ : $i18n.locale === 'eng'
+ ? `${optionStore.mapOption(scope.opt.namePrefix)} ${scope.opt.firstNameEN} ${scope.opt.lastNameEN}` ||
+ '-'
+ : `${optionStore.mapOption(scope.opt.namePrefix)} ${scope.opt.firstName} ${scope.opt.lastName}` ||
+ '-'
+ }}
+ ({{ scope.opt.code }})
+
+
+
+
+
+ {{
+ $t(
+ `branch.form.title.${scope.opt.code.endsWith('-00') ? 'branchHQLabel' : 'branchLabel'}`,
+ )
+ }}
+
+ {{
+ !scope.opt.code.endsWith('-00')
+ ? +scope.opt.code.split('-')[1]
+ : ''
+ }}
+
+
+ {{ $t('general.address') }}
+ {{
+ $i18n.locale === 'eng'
+ ? `${scope.opt.addressEN || ''}, ${scope.opt.mooEN && `${$t('form.moo')} ${scope.opt.mooEN},`} ${scope.opt.soiEN && `${$t('form.soi')} ${scope.opt.soiEN},`} ${scope.opt.streetEN && `${scope.opt.streetEN} Rd,`} ${scope.opt.subDistrict.nameEN || ''}, ${scope.opt.district.nameEN || ''}, ${scope.opt.province.nameEN || ''}`
+ : `${scope.opt.address || ''}, ${scope.opt.moo && `${$t('form.moo')} ${scope.opt.moo},`} ${scope.opt.soi && `${$t('form.soi')} ${scope.opt.soi},`} ${scope.opt.street && `${$t('form.road')} ${scope.opt.street},`} ${scope.opt.subDistrict.name || ''}, ${scope.opt.district.name || ''}, ${scope.opt.province.name || ''}`
+ }}
+ {{ scope.opt.subDistrict?.zipCode || '' }}
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ scope.opt.customer.customerType === 'CORP'
+ ? $t('customer.form.registerName')
+ : $t('customer.form.ownerName')
+ }}:
+
+ {{
+ scope.opt.customer.customerType === 'CORP'
+ ? $i18n.locale === 'eng'
+ ? scope.opt.registerNameEN
+ : scope.opt.registerName
+ : $i18n.locale === 'eng'
+ ? `${optionStore.mapOption(scope.opt.namePrefix)} ${scope.opt.firstNameEN} ${scope.opt.lastNameEN}` ||
+ '-'
+ : `${optionStore.mapOption(scope.opt.namePrefix)} ${scope.opt.firstName} ${scope.opt.lastName}` ||
+ '-'
+ }}
+ ({{ scope.opt.code }})
+
+
+ {{
+ $t(
+ `branch.form.title.${scope.opt.code.endsWith('-00') ? 'branchHQLabel' : 'branchLabel'}`,
+ )
+ }}
+
+ {{
+ !scope.opt.code.endsWith('-00')
+ ? +scope.opt.code.split('-')[1]
+ : ''
+ }}
+
+ {{ $t('general.address') }}
+ {{
+ $i18n.locale === 'eng'
+ ? `${scope.opt.addressEN || ''}, ${scope.opt.mooEN && `${$t('form.moo')} ${scope.opt.mooEN},`} ${scope.opt.soiEN && `${$t('form.soi')} ${scope.opt.soiEN},`} ${scope.opt.streetEN && `${scope.opt.streetEN} Rd,`} ${scope.opt.subDistrict.nameEN || ''}, ${scope.opt.district.nameEN || ''}, ${scope.opt.province.nameEN || ''}`
+ : `${scope.opt.address || ''}, ${scope.opt.moo && `${$t('form.moo')} ${scope.opt.moo},`} ${scope.opt.soi && `${$t('form.soi')} ${scope.opt.soi},`} ${scope.opt.street && `${$t('form.road')} ${scope.opt.street},`} ${scope.opt.subDistrict.name || ''}, ${scope.opt.district.name || ''}, ${scope.opt.province.name || ''}`
+ }}
+ {{ scope.opt.subDistrict?.zipCode || '' }}
+
+ {{ $t('customerBranch.form.title') }}:
+
+ {{ $t('general.address') }}
+ {{
+ $i18n.locale === 'eng'
+ ? `${scope.opt.addressEN || ''}, ${scope.opt.mooEN && `${$t('form.moo')} ${scope.opt.mooEN},`} ${scope.opt.soiEN && `${$t('form.soi')} ${scope.opt.soiEN},`} ${scope.opt.streetEN && `${scope.opt.streetEN} Rd,`} ${scope.opt.subDistrict.nameEN || ''}, ${scope.opt.district.nameEN || ''}, ${scope.opt.province.nameEN || ''}`
+ : `${scope.opt.address || ''}, ${scope.opt.moo && `${$t('form.moo')} ${scope.opt.moo},`} ${scope.opt.soi && `${$t('form.soi')} ${scope.opt.soi},`} ${scope.opt.street && `${$t('form.road')} ${scope.opt.street},`} ${scope.opt.subDistrict.name || ''}, ${scope.opt.district.name || ''}, ${scope.opt.province.name || ''}`
+ }}
+ {{ scope.opt.subDistrict?.zipCode || '' }}
+
+
+
+
+
+
+
+
+
();
const { t } = useI18n();
const userStore = useUserStore();
const optionStore = useOptionStore();
-const workflowStore = useWorkflowTemplate();
const userInTable = defineModel('userInTable', {
default: [],
@@ -48,7 +43,7 @@ const flowData = defineModel('flowData', {
},
});
-let objectOptions = [
+const objectOptions = [
...(optionStore.globalOption?.agenciesType || []),
{ label: t('flow.customer'), value: 'customer' },
{ label: t('flow.officer'), value: 'officer' },
@@ -56,9 +51,7 @@ let objectOptions = [
const options = ref(objectOptions);
const role = ref([]);
const userList = ref([]);
-const groupList = ref([]);
const responsiblePersonSearch = ref('');
-const responsibleMenu = ref(false);
async function getUserList(opts?: { query: string }) {
const resUser = await userStore.fetchList({
@@ -67,10 +60,10 @@ async function getUserList(opts?: { query: string }) {
if (resUser) userList.value = resUser.result;
}
-async function getGroupList() {
- const resGroup = await workflowStore.getGroupList();
- if (resGroup) groupList.value = resGroup;
-}
+// async function getUserById(responsiblePersonId: string) {
+// const resUser = await userStore.fetchById(responsiblePersonId);
+// if (resUser) userInTable.value.push(resUser);
+// }
function selectResponsiblePerson(stepIndex: number, responsiblePerson: User) {
const currStep = flowData.value.step[stepIndex];
@@ -85,7 +78,6 @@ function selectResponsiblePerson(stepIndex: number, responsiblePerson: User) {
userInTable.value[stepIndex] = {
name: flowData.value.step[stepIndex].name,
responsiblePerson: [],
- responsibleGroup: [],
};
}
@@ -109,33 +101,6 @@ function selectResponsiblePerson(stepIndex: number, responsiblePerson: User) {
}
}
-function selectResponsibleGroup(stepIndex: number, responsibleGroup: string) {
- const currStep = flowData.value.step[stepIndex];
- const existGroupIndex = currStep.responsibleGroup?.findIndex(
- (p) => p === responsibleGroup,
- );
-
- if (existGroupIndex === -1) {
- currStep.responsibleGroup?.push(responsibleGroup);
-
- if (!userInTable.value[stepIndex]) {
- userInTable.value[stepIndex] = {
- name: flowData.value.step[stepIndex].name,
- responsiblePerson: [],
- responsibleGroup: [],
- };
- }
-
- userInTable.value[stepIndex]?.responsibleGroup.push(responsibleGroup);
- } else {
- currStep.responsibleGroup?.splice(Number(existGroupIndex), 1);
- userInTable.value[stepIndex]?.responsibleGroup.splice(
- Number(existGroupIndex),
- 1,
- );
- }
-}
-
function selectItem(
val: Record,
responsibleInstitution?: string[],
@@ -177,7 +142,6 @@ watch(
onMounted(async () => {
role.value = getRole() || [];
await getUserList();
- await getGroupList();
await userStore.fetchHqOption();
});
@@ -202,7 +166,6 @@ onMounted(async () => {
:class="{ 'q-ml-lg': $q.screen.gt.xs, 'q-mt-sm': $q.screen.lt.sm }"
>
{
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
- {{
- `${optionStore.mapOption(person.namePrefix || '')} ${
- $i18n.locale === 'eng'
- ? person.firstNameEN
- : person.firstName
- } ${
- $i18n.locale === 'eng'
- ? person.lastNameEN
- : person.lastName
- }`
- }}
-
-
- {{ person.code }}
-
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ `${optionStore.mapOption(person.namePrefix || '')} ${
+ $i18n.locale === 'eng'
+ ? person.firstNameEN
+ : person.firstName
+ } ${
+ $i18n.locale === 'eng'
+ ? person.lastNameEN
+ : person.lastName
+ }`
+ }}
+
+
+ {{ person.code }}
+
+
-
-
-
- {{ $t('general.group') }}
-
-
-
-
-
- {{ group }}
-
-
-
-
-
-
(responsibleMenu = true)"
- @before-hide="() => (responsibleMenu = false)"
- >
+
+
+
{
{{ $t('general.noData') }}
{
{{ $t('personnel.MESSENGER') }}
{
-
-
- {{ $t('general.group') }}
-
-
- {{ $t('general.noData') }}
-
-
-
-
-
-
-
-
- {{ group.name }}
-
-
-
-
+
{
}
: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;
@@ -915,26 +800,19 @@ onMounted(async () => {
}
: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);
}
:deep(
- .q-item.q-item-type.row.no-wrap.q-item--dense.q-item--clickable.q-link.cursor-pointer.q-focusable.q-hoverable.expansion-rounded.surface-2
- .q-focus-helper
-) {
+ .q-item.q-item-type.row.no-wrap.q-item--dense.q-item--clickable.q-link.cursor-pointer.q-focusable.q-hoverable.expansion-rounded.surface-2
+ .q-focus-helper
+ ) {
visibility: hidden;
}
: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 d005c043..59043144 100644
--- a/src/components/04_product-service/PriceDataComponent.vue
+++ b/src/components/04_product-service/PriceDataComponent.vue
@@ -167,28 +167,26 @@ withDefaults(
@@ -276,8 +271,6 @@ withDefaults(
flat
outlined
dense
- :readonly
- :hide-dropdown-icon="readonly"
v-model="vatIncluded"
>
diff --git a/src/components/04_product-service/WorkManagementComponent.vue b/src/components/04_product-service/WorkManagementComponent.vue
index 86e79951..e79872d9 100644
--- a/src/components/04_product-service/WorkManagementComponent.vue
+++ b/src/components/04_product-service/WorkManagementComponent.vue
@@ -98,8 +98,7 @@ watch(
(c, o) => {
const list = c.map((v: { name: string }) => v.name);
const oldList = o.map((v: { name: string }) => v.name);
- const index = workName.value ? oldList.indexOf(workName.value) : -1;
- if (index === -1) return;
+ const index = oldList.indexOf(workName.value || '');
if (
list[index] !== oldList[index] &&
@@ -705,8 +704,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;
@@ -736,8 +735,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 81854b9e..2bde41ce 100644
--- a/src/components/04_product-service/WorkNameManagement.vue
+++ b/src/components/04_product-service/WorkNameManagement.vue
@@ -1,6 +1,7 @@
@@ -58,7 +35,7 @@ function deleteAttachment(name: string) {
-
-
(typeof v === 'string' ? (contactName = v) : '')
- "
- />
- (typeof v === 'string' ? (email = v) : '')"
- @clear="email = ''"
- >
-
-
-
-
- (typeof v === 'string' ? (contactTel = v) : '')
- "
- >
-
-
-
-
-
-
-
-
-
-
-
-
- {{ file.file.name }}
-
-
-
-
-
-
-
-
- openNewTab(item.url)"
- >
-
-
-
- {{ item.name }}
-
-
-
-
-
-
-
diff --git a/src/components/08_request-list/DataDisplay.vue b/src/components/08_request-list/DataDisplay.vue
index f36acb4f..30a8e52b 100644
--- a/src/components/08_request-list/DataDisplay.vue
+++ b/src/components/08_request-list/DataDisplay.vue
@@ -27,38 +27,26 @@ 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 5e4ee55b..b6e2bf1f 100644
--- a/src/components/11_credit-note/FormCredit.vue
+++ b/src/components/11_credit-note/FormCredit.vue
@@ -8,10 +8,6 @@ defineProps<{
const quotationId = defineModel('quotationId', {
required: true,
});
-const isDebitNote = defineModel('isDebitNote', {
- required: false,
- default: false,
-});
@@ -41,7 +37,6 @@ const isDebitNote = defineModel('isDebitNote', {
cancelIncludeDebitNote: true,
hasCancel: true,
}"
- @selected="(v) => (isDebitNote = v.isDebitNote)"
/>
diff --git a/src/components/DialogForm.vue b/src/components/DialogForm.vue
index fb29a4ca..84319bcf 100644
--- a/src/components/DialogForm.vue
+++ b/src/components/DialogForm.vue
@@ -42,15 +42,6 @@ defineProps<{
const modal = defineModel('modal', { default: false });
const currentTab = defineModel('currentTab');
-
-async function onValidationError(ref: any) {
- const el = ref.$el as Element;
- el.scrollIntoView({
- behavior: 'smooth',
- block: 'center',
- inline: 'nearest',
- });
-}
('drawerOpen', {
const myForm = ref();
function reset() {
- if (props.beforeClose) {
- drawerOpen.value = props.beforeClose
- ? props.beforeClose()
- : !drawerOpen.value;
- }
if (myForm.value) {
myForm.value.resetValidation();
}
}
-
-async function onValidationError(ref: any) {
- const el = ref.$el as Element;
- el.scrollIntoView({
- behavior: 'smooth',
- block: 'center',
- inline: 'nearest',
- });
-}
(drawerOpen = beforeClose ? beforeClose() : v)"
:width="$q.screen.gt.xs ? windowSize * 0.85 : windowSize"
v-model="drawerOpen"
behavior="mobile"
@@ -79,7 +66,6 @@ async function onValidationError(ref: any) {
greedy
@submit.prevent
@validation-success="submit"
- @validation-error="onValidationError"
>
-import { Icon } from '@iconify/vue/dist/iconify.js';
-
defineProps<{
hideIcon?: boolean;
- icon?: string;
}>();
@@ -13,13 +10,10 @@ defineProps<{
v-if="!hideIcon"
id="btn-add"
padding="sm"
- :icon="icon ? undefined : 'mdi-plus'"
+ icon="mdi-plus"
direction="up"
class="color-btn"
>
-
-
-
-
-
+ />
diff --git a/src/components/GlobalDialog.vue b/src/components/GlobalDialog.vue
index f9df77d4..059f7755 100644
--- a/src/components/GlobalDialog.vue
+++ b/src/components/GlobalDialog.vue
@@ -46,7 +46,6 @@ defineProps<{
color="grey"
icon="mdi-close"
v-close-popup
- @click="cancel"
/>
diff --git a/src/components/PaginationPageSize.vue b/src/components/PaginationPageSize.vue
index e8ece111..4eb86e0c 100644
--- a/src/components/PaginationPageSize.vue
+++ b/src/components/PaginationPageSize.vue
@@ -1,12 +1,5 @@
@@ -17,12 +10,7 @@ withDefaults(
:key="v"
clickable
v-close-popup
- @click="
- () => {
- pageSize = v;
- fetchData();
- }
- "
+ @click="pageSize = v"
>
{{ v }}
diff --git a/src/components/ProfileBanner.vue b/src/components/ProfileBanner.vue
index 2d4b3975..9c72041c 100644
--- a/src/components/ProfileBanner.vue
+++ b/src/components/ProfileBanner.vue
@@ -229,7 +229,6 @@ const smallBanner = ref(false);
$emit('update:currentTab', v)"
>
import { BranchWithChildren } from 'stores/branch/types';
import KebabAction from './shared/KebabAction.vue';
+import { isRoleInclude } from 'stores/utils';
const nodes = defineModel<(any | BranchWithChildren)[]>('nodes', {
default: [],
@@ -16,7 +17,6 @@ withDefaults(
labelKey?: string;
childrenKey: string;
action?: boolean;
- hideCreate?: boolean;
}>(),
{
color: 'transparent',
@@ -96,9 +96,7 @@ defineEmits<{
expandedTree[expandedTree.length - 1] === node.id,
}"
>
- {{
- $i18n.locale === 'eng' ? node.nameEN || node.name : node.name
- }}
+ {{ node.name }}
{{ node.code }}
@@ -122,7 +120,11 @@ defineEmits<{
/>
-import { ref } from 'vue';
import MainButton from './MainButton.vue';
-const emit = defineEmits<{
+defineEmits<{
(e: 'click', v: MouseEvent): void;
- (e: 'fileSelected', v: File[]): void;
}>();
defineProps<{
iconOnly?: boolean;
@@ -12,29 +10,15 @@ defineProps<{
outlined?: boolean;
disabled?: boolean;
dark?: boolean;
- importFile?: boolean;
label?: string;
icon?: string;
}>();
-
-const inputRef = ref(null);
-
-function triggerFileInput() {
- inputRef.value?.click();
-}
-
-function handleFileChange(event: Event) {
- const files = (event.target as HTMLInputElement).files;
- if (files && files.length > 0) {
- emit('fileSelected', Array.from(files));
- }
-}
(importFile ? triggerFileInput() : $emit('click', e))"
+ @click="(e) => $emit('click', e)"
v-bind="{ ...$props, ...$attrs }"
:icon="icon || 'mdi-import'"
color="var(--info-bg)"
@@ -42,13 +26,4 @@ function handleFileChange(event: Event) {
>
{{ label || $t('general.import') }}
-
- handleFileChange(e)"
- hidden
- accept=".xls, .xlsx , .csv"
- multiple
- />
diff --git a/src/components/button/MainButton.vue b/src/components/button/MainButton.vue
index 08233063..836abe32 100644
--- a/src/components/button/MainButton.vue
+++ b/src/components/button/MainButton.vue
@@ -5,7 +5,6 @@ defineEmits<{
(e: 'click', v: MouseEvent): void;
}>();
defineProps<{
- id?: string;
icon?: string;
color: string;
iconOnly?: boolean;
@@ -19,7 +18,6 @@ defineProps<{
-
-
-
- {{ $t('personnel.form.addressForeign') }}
-
@@ -499,24 +449,7 @@ watchEffect(async () => {
(v) => (typeof v === 'string' ? (street = v) : '')
"
/>
-
{
-
{
-
-
{
(zipCode = v.toString())"
- :rules="
- !addressForeign
- ? []
- : [(val) => (val && val.length > 0) || $t('form.error.required')]
+ addrOptions.subDistrictOps
+ ?.filter((x) => x.id === subDistrictId)
+ .map((x) => x.zipCode)[0] ?? ''
"
/>
{
(v) => (typeof v === 'string' ? (streetEN = v) : '')
"
/>
-
{
-
-
{
-
-
{
(zipCode = v.toString())"
- :rules="
- !addressForeign
- ? []
- : [(val) => (val && val.length > 0) || $t('form.error.required')]
+ addrOptions.subDistrictOps
+ ?.filter((x) => x.id === subDistrictId)
+ .map((x) => x.zipCode)[0] ?? ''
"
/>
-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 = '';
- },
-);
-
-
-
-
-
-
-
- {{ $t('general.advanceSearch') }}
-
-
(date = [])"
- />
-
- (isDateSelect = true)"
- @closed="() => (isDateSelect = false)"
- >
-
-
-
-
-
-
- {{
- date
- ? dateFormatJS({ date: date[0] }) +
- ' - ' +
- dateFormatJS({ date: date[1] })
- : ''
- }}
-
-
-
-
-
-
-
-
-
-
- {{ $t('general.advanceSearch') }}
-
-
-
diff --git a/src/components/shared/AvatarGroup.vue b/src/components/shared/AvatarGroup.vue
index ed8f63ef..a3f3d85e 100644
--- a/src/components/shared/AvatarGroup.vue
+++ b/src/components/shared/AvatarGroup.vue
@@ -25,11 +25,7 @@ withDefaults(
alt="Image"
/>
-
+
{{ person.name }}
diff --git a/src/components/shared/KebabAction.vue b/src/components/shared/KebabAction.vue
index 7bea6b36..4dd095db 100644
--- a/src/components/shared/KebabAction.vue
+++ b/src/components/shared/KebabAction.vue
@@ -16,7 +16,6 @@ const props = withDefaults(
useUpload?: boolean;
useCancel?: boolean;
useRejectCancel?: boolean;
- useCopy?: boolean;
disableCancel?: boolean;
disableDelete?: boolean;
}>(),
@@ -32,7 +31,6 @@ defineEmits<{
(e: 'link'): void;
(e: 'upload'): void;
(e: 'delete'): void;
- (e: 'copy'): void;
(e: 'cancel'): void;
(e: 'rejectCancel'): void;
(e: 'changeStatus'): void;
@@ -174,27 +172,6 @@ watch(
-
$emit('copy')"
- >
-
-
- {{ $t('general.copy') }}
-
-
-
();
defineEmits<{
@@ -78,10 +76,8 @@ defineEmits<{
/>
string | true)[];
}>(),
@@ -72,7 +70,6 @@ watch(
{
- multiple ? (model = []) : (model = '');
- }
- "
>
diff --git a/src/components/shared/select-muliple/SelectOffice.vue b/src/components/shared/select-muliple/SelectOffice.vue
index 22a0a327..24437cd1 100644
--- a/src/components/shared/select-muliple/SelectOffice.vue
+++ b/src/components/shared/select-muliple/SelectOffice.vue
@@ -72,11 +72,7 @@ onMounted(async () => {
:option="selectOptions"
:hide-selected="false"
:fill-input="false"
- :rules="[
- (v: string) => {
- return !!v?.length || $t('form.error.required');
- },
- ]"
+ :rules="[(v: string) => !!v || $t('form.error.required')]"
@filter="filter"
>
diff --git a/src/components/shared/select/SelectBranch.vue b/src/components/shared/select/SelectBranch.vue
index 6fa6aa8c..b18a1e51 100644
--- a/src/components/shared/select/SelectBranch.vue
+++ b/src/components/shared/select/SelectBranch.vue
@@ -75,9 +75,9 @@ function setDefaultValue() {
-import { ref, onMounted } from 'vue';
-
-import { createSelect, SelectProps } from './select';
-import SelectInput from '../SelectInput.vue';
-
-import { BusinessType } from 'src/stores/business-type/types';
-
-import useStore from 'src/stores/business-type';
-
-type SelectOption = BusinessType;
-
-const value = defineModel('value', {
- required: true,
-});
-const valueOption = defineModel('valueOption', {
- required: false,
-});
-
-const selectOptions = ref([]);
-
-const { fetchList: getList, fetchById: getById } = useStore();
-
-defineEmits<{
- (e: 'create'): void;
-}>();
-
-type ExclusiveProps = {
- lang?: string;
- codeOnly?: boolean;
- selectFirstValue?: boolean;
- branchVirtual?: boolean;
- checkRole?: string[];
-};
-
-const props = defineProps & ExclusiveProps>();
-
-const { getOptions, setFirstValue, getSelectedOption, filter } =
- createSelect(
- {
- value,
- valueOption,
- selectOptions,
- getList: async (query) => {
- const ret = await getList({
- query,
- ...props.params,
- pageSize: 99999,
- });
- if (ret) return ret.result;
- },
- getByValue: async (id) => {
- const ret = await getById(id);
- if (ret) return ret;
- },
- },
- { valueField: 'id' },
- );
-
-onMounted(async () => {
- await getOptions();
-
- if (props.autoSelectOnSingle && selectOptions.value.length === 1) {
- setFirstValue();
- }
-
- if (props.selectFirstValue) {
- setDefaultValue();
- } else await getSelectedOption();
-});
-
-function setDefaultValue() {
- setFirstValue();
-}
-
-
-
-
- {{ (lang ?? $i18n.locale) !== 'eng' ? opt.name : opt.nameEN }}
-
-
-
-
-
-
-
-
- {{ $t('general.add', { text: $t('businessType.title') }) }}
-
-
- {{ creatableDisabledText }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('general.add', { text: $t('businessType.title') }) }}
-
-
- {{ creatableDisabledText }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('general.add', { text: $t('menu.manage.businessType') }) }}
-
-
- {{ creatableDisabledText }}
-
-
-
-
-
-
-
-
-
-
-
- {{ (lang ?? $i18n.locale) !== 'eng' ? opt.name : opt.nameEN }}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/components/shared/select/SelectCustomer.vue b/src/components/shared/select/SelectCustomer.vue
index 2e62eba8..8adecb3c 100644
--- a/src/components/shared/select/SelectCustomer.vue
+++ b/src/components/shared/select/SelectCustomer.vue
@@ -30,7 +30,6 @@ defineEmits<{
type ExclusiveProps = {
simple?: boolean;
simpleBranchNo?: boolean;
- selectFirstValue?: boolean;
};
const props = defineProps & ExclusiveProps>();
@@ -65,14 +64,8 @@ onMounted(async () => {
setFirstValue();
}
- if (props.selectFirstValue) {
- setDefaultValue();
- } else await getSelectedOption();
+ await getSelectedOption();
});
-
-function setDefaultValue() {
- setFirstValue();
-}
-
+
+
+
@@ -180,11 +175,3 @@ function setDefaultValue() {
-
-
diff --git a/src/components/shared/select/SelectInstitution.vue b/src/components/shared/select/SelectInstitution.vue
index 4b4ea912..bf5877c0 100644
--- a/src/components/shared/select/SelectInstitution.vue
+++ b/src/components/shared/select/SelectInstitution.vue
@@ -43,7 +43,6 @@ const { getOptions, setFirstValue, getSelectedOption, filter } =
const ret = await getList({
query: query === '' ? undefined : query,
...props.params,
- activeOnly: true,
});
if (ret) return ret.result;
},
diff --git a/src/components/shared/select/SelectQuotation.vue b/src/components/shared/select/SelectQuotation.vue
index 344e500b..ae9f7863 100644
--- a/src/components/shared/select/SelectQuotation.vue
+++ b/src/components/shared/select/SelectQuotation.vue
@@ -25,7 +25,6 @@ const { getQuotationList: getList, getQuotation: getById } = useStore();
defineEmits<{
(e: 'create'): void;
- (e: 'selected', value: SelectOption): void;
}>();
type ExclusiveProps = {
@@ -118,14 +117,6 @@ function setDefaultValue() {
(v: string) => !props.required || !!v || $t('form.error.required'),
]"
@filter="filter"
- @update:model-value="
- (v) => {
- $emit(
- 'selected',
- selectOptions.find((opt) => opt.id === v),
- );
- }
- "
>
& ExclusiveProps>();
@@ -72,7 +71,6 @@ function setDefaultValue() {
diff --git a/src/components/shared/select/select.ts b/src/components/shared/select/select.ts
index 11ec46d4..08fd88b2 100644
--- a/src/components/shared/select/select.ts
+++ b/src/components/shared/select/select.ts
@@ -35,13 +35,7 @@ export const createSelect = >(
let previousSearch = '';
watch(value, (v) => {
- if (!v) return;
-
- if (cache && cache.find((opt) => opt[valueField] === v)) {
- valueOption.value = cache.find((opt) => opt[valueField] === v);
- return;
- }
-
+ if (!v || (cache && cache.find((opt) => opt[valueField] === v))) return;
getSelectedOption();
});
@@ -69,26 +63,15 @@ export const createSelect = >(
const currentValue = value.value;
if (!currentValue) return;
-
+ if (selectOptions.value.find((v) => v[valueField] === currentValue)) return;
if (valueOption.value && valueOption.value[valueField] === currentValue) {
- selectOptions.value.unshift(valueOption.value);
- selectOptions.value = selectOptions.value.filter((curr, idx, arr) => {
- return (
- arr.findIndex((item) => item[valueField] === curr[valueField]) === idx
- );
- });
- return;
+ return selectOptions.value.unshift(valueOption.value);
}
const ret = await getByValue(currentValue);
if (ret) {
selectOptions.value.unshift(ret);
- selectOptions.value = selectOptions.value.filter((curr, idx, arr) => {
- return (
- arr.findIndex((item) => item[valueField] === curr[valueField]) === idx
- );
- });
valueOption.value = ret;
}
}
diff --git a/src/components/shared/table/TableProductAndService.vue b/src/components/shared/table/TableProductAndService.vue
index d8e0c683..e1801167 100644
--- a/src/components/shared/table/TableProductAndService.vue
+++ b/src/components/shared/table/TableProductAndService.vue
@@ -251,10 +251,7 @@ function selectedIndex(item: any) {
>
-
- {{ props.row.detail.replace(/<\/?[^>]+(>|$)/g, '') || '-' }}
-
-
+
{{
typeof col.field === 'string'
? props.row[col.field as keyof (Product | Service)]
diff --git a/src/components/shared/table/TableWorker.vue b/src/components/shared/table/TableWorker.vue
index e8cfa214..4ec870bc 100644
--- a/src/components/shared/table/TableWorker.vue
+++ b/src/components/shared/table/TableWorker.vue
@@ -54,9 +54,7 @@ const columns = [
field: (v: Employee) =>
locale.value === Lang.English
? `${v.firstNameEN} ${v.lastNameEN}`
- : v.firstName
- ? `${v.firstName} ${v.lastName}`
- : `${v.firstNameEN} ${v.lastNameEN}`,
+ : `${v.firstName} ${v.lastName}`,
},
{
name: 'birthDate',
@@ -145,7 +143,6 @@ function selectedIndex(item: Employee) {
handleUpdate()"
size="sm"
@@ -201,7 +198,6 @@ function selectedIndex(item: Employee) {
v-model="props.selected"
size="sm"
:id="`select-worker-${props.row.firstName}`"
- :for="`select-worker-${props.row.firstName}`"
/>
diff --git a/src/components/upload-file/FormCitizen.vue b/src/components/upload-file/FormCitizen.vue
index 06c97e6d..5d35209e 100644
--- a/src/components/upload-file/FormCitizen.vue
+++ b/src/components/upload-file/FormCitizen.vue
@@ -188,7 +188,6 @@ function formatCode(input: string | undefined, type: 'code' | 'number') {
:label="$t('customer.form.citizenId')"
for="input-citizen-id"
v-model="citizenId"
- :rules="[(val: string) => !!val || $t('form.error.required')]"
/>
{
@click="$emit('click')"
>
-
-
-
+
{{
uploading.loaded
@@ -80,7 +79,7 @@ onMounted(() => {
/>
{{ idle ? `Pending` : progress !== 1 ? `Uploading...` : 'Completed' }}
-
+
Promise<{
+ ) => void | Promise<{
status: boolean;
group: string;
meta: { name: string; value: string }[];
@@ -123,7 +123,7 @@ async function change(e: Event) {
...obj.value,
{
_meta: structuredClone(toRaw(selectedMenu.value)._meta || {}),
- group: selectedMenu.value?.group,
+ group: selectedMenu.value?.value,
file: renamedFile,
},
];
@@ -168,8 +168,8 @@ async function change(e: Event) {
type: map['doc_type'],
number: map['doc_number'],
gender: map['sex'],
- firstName: map['last_name'],
- lastName: map['first_name'],
+ firstName: map['first_name'],
+ lastName: map['last_name'],
issueDate: map['issue_date'],
expireDate: map['expire_date'],
issuePlace: map['nationality'],
@@ -327,7 +327,7 @@ defineEmits<{
:rows="
obj
.filter((v) => {
- if (!autoSave && v.group !== selectedMenu?.group) {
+ if (!autoSave && v.group !== selectedMenu?.value) {
return false;
}
return true;
diff --git a/src/css/quasar.variables.scss b/src/css/quasar.variables.scss
index eb2b877b..7bd226ac 100644
--- a/src/css/quasar.variables.scss
+++ b/src/css/quasar.variables.scss
@@ -198,10 +198,3 @@ i.q-icon.mdi.mdi-chevron-down-circle.q-expansion-item__toggle-icon.q-expansion-i
.q-focus-helper {
visibility: hidden;
}
-
-.clear-btn {
- opacity: 0.6;
- &:hover {
- opacity: 1;
- }
-}
diff --git a/src/i18n/eng.ts b/src/i18n/eng.ts
index 3379ba60..858e9489 100644
--- a/src/i18n/eng.ts
+++ b/src/i18n/eng.ts
@@ -4,7 +4,7 @@ export default {
save: 'Save',
open: 'Open',
close: 'Close',
- edit: 'Edit{text}',
+ edit: 'Edit',
cancel: 'Cancel',
back: 'Back',
undo: 'Undo',
@@ -31,7 +31,6 @@ export default {
displayField: 'Display Fields',
order: 'Order',
name: '{msg} Name',
- nameEN: 'Name (English)',
fullName: 'Full Name',
detail: '{msg} Detail',
remark: '{msg} Remark',
@@ -61,7 +60,7 @@ export default {
branchStatus: 'Branch Status',
success: 'Success',
taxNo: 'Legal Person',
- contactName: 'Contact Person',
+ contactName: 'Contact Name',
image: 'Image of ',
apply: 'Apply',
licenseNumber: 'License number',
@@ -154,14 +153,6 @@ export default {
tableOfContent: 'Table of Contents',
draw: 'Draw',
newUpload: 'New Upload',
- nativeLanguage: '{msg} Native Language',
- copy: 'Copy',
- paste: 'Paste',
- period: 'Period',
- documentStatus: 'Document Status',
- advanceSearch: 'Advance Search',
- totalPeople: '{meg} people',
- price: 'Price {price} Baht',
},
menu: {
@@ -204,14 +195,12 @@ export default {
title: 'Manage',
branch: 'Branch',
personnel: 'Personnel',
- group: 'Group',
productService: 'Product and Service',
workflow: 'Workflow',
property: 'Property',
customer: 'Customer',
mainData: 'Main Data',
agencies: 'Agencies',
- businessType: 'Business Type',
},
sales: {
@@ -258,8 +247,7 @@ export default {
manual: {
title: 'Manual',
- usage: 'Usage',
- troubleshooting: 'Troubleshooting',
+ usage: 'การใช้งาน',
},
},
@@ -341,7 +329,7 @@ export default {
requireLength: 'Please enter {msg} character',
branchNameField: "Only letters, numbers, or the characters . , - ' &.",
branchNameENField:
- "Only English letters, numbers, or the characters . , - ' &. ( )",
+ "Only English letters, numbers, or the characters . , - ' &.",
passportFormat: 'Please enter the passport number in the correct format.',
},
warning: {
@@ -388,7 +376,7 @@ export default {
branchLabel: 'Branch',
branchHQLabel: 'Headoffice',
taxNo: 'Legal Person',
- contactName: 'Contact Person',
+ contactName: 'Contact Name',
},
page: {
captionManage: 'Manage',
@@ -409,8 +397,8 @@ export default {
code: 'Headoffice Code',
codeBranch: 'Branch Code',
taxNo: 'Tax Identification Number',
- contactName: 'Contact Person',
- contactTelephone: 'Contact Number',
+ contactName: 'Contact Name',
+ contactTelephone: 'Contact Telephone',
branchName: 'Branch Name',
branchNameEN: 'Branch Name (EN)',
servicePointName: 'Service Point Name',
@@ -460,10 +448,10 @@ export default {
regisNo: 'Registration Number',
startDate: 'Start Date',
retireDate: 'Retire Date',
- responsibleArea: 'Responsible Area',
+ responsibleArea: 'Responsibel Area',
discount: 'Discount Condition',
sourceNationality: 'Source Nationality',
- importNationality: 'Import Nationality',
+ importNationality: 'import Nationality',
trainingPlace: 'Training Place',
checkpoint: 'Checkpoint',
checkpointEN: 'Checkpoint (EN)',
@@ -471,13 +459,6 @@ export default {
citizenId: 'Citizen ID',
citizenIssue: 'Citizen Issue',
citizenExpire: 'Citizen Expire',
- agencyStatus: 'Agency Status',
- normal: 'Normal',
- canceled: 'Canceled',
- blacklist: 'Black list',
- contactName: 'Contact Person',
- contactTel: 'Contact Number',
- addressForeign: 'Use foreign address',
},
},
customer: {
@@ -491,9 +472,10 @@ export default {
powerOfAttorney: 'Power of Attorney',
others: 'Others',
},
+
employer: 'Employer',
employerLegalEntity: 'Legal Entity',
- employerNaturalPerson: 'Natural Person',
+ employerNaturalPerson: 'Natrual Person',
employerType: 'Employer Type',
employee: 'Employee',
form: {
@@ -503,22 +485,24 @@ export default {
},
prefix: {
- mr: 'MR.',
- mrs: 'MRS.',
- miss: 'MISS.',
+ mr: 'Mr.',
+ mrs: 'Mrs.',
+ miss: 'Miss.',
},
- taxpayyerNo: 'Taxpayer Identification Number',
citizenId: 'Citizen ID',
religion: 'Religion',
issueDate: 'Issue Date',
passportExpiryDate: 'Passport Expiry Date',
+
ownerName: 'Customer Name',
firstName: 'First Name ',
lastName: 'Last Name ',
firstNameEN: 'First Name in English',
lastNameEN: 'Last Name in English',
+
cardNumber: 'ID Card Number',
+
prefixName: 'Prefix',
legalPersonNo: 'Legal Entity Registration Number',
registerName: 'Company Name',
@@ -526,6 +510,7 @@ export default {
registerDate: 'Registered On',
registerCompanyName: 'Registered Name',
authorizedCapital: 'Authorized Capital',
+
workplace: 'Workplace',
workplaceEN: 'Workplace (EN)',
address: 'Address',
@@ -533,6 +518,7 @@ export default {
branchCode: 'Branch Code',
customerCode: 'Employer Code',
legalPersonCode: 'Legal Entity Code',
+
codeAbbrev: 'Company Abbreviation',
codeNumber: 'Company Number',
registeredBranch: 'Registered Branch',
@@ -570,7 +556,7 @@ export default {
jobPosition: 'Job Position',
address: 'Address',
workPlace: 'Workplace',
- contactName: 'Contact Person',
+ contactName: 'Contact Name',
contactPhone: 'Contact Phone',
totalEmployee: 'Total Employee',
officeTel: 'Headoffice Telephone',
@@ -624,7 +610,7 @@ export default {
placeOfBirth: 'Place of Birth',
countryOfbirth: 'Country of Birth',
issueCountry: 'Issue Country',
- entryCount: 'Number of Days in the Country',
+ entryCount: 'Entry Count',
employerSelect: {
branchName: 'Branch Name',
customerName: 'Employer Name',
@@ -774,13 +760,10 @@ export default {
},
quotation: {
- ownOnly: 'View Own Quotation Only',
quotationDate: 'Quotation Date',
seller: 'Seller',
paymentChannels: 'Payment Channels',
channelsThat: 'Channels That',
- refNo: 'Reference Number',
- bankAccount: 'Bank Account',
bankAccountNumber: 'Bank Account Number',
bankAccountName: 'Bank Account Name',
inTheNameOf: 'In The Name Of',
@@ -811,7 +794,7 @@ export default {
employee: 'Employee',
employeeName: 'Full Name',
workName: 'Work Name',
- contactName: 'Contact Person',
+ contactName: 'Contact Name',
documentReceivePoint: 'Document Drop-Off Point"',
dueDate: 'Quotation Due Date',
specialCondition: 'Special Conditions',
@@ -929,10 +912,6 @@ export default {
code: 'Agencies Code',
group: 'Agencies Group',
name: 'Agencies Name',
- contactName: 'Contact Person',
- contactTel: 'Contact Number',
- bankInfo: 'Bank Information',
- attachment: 'Attachment',
},
requestList: {
@@ -954,9 +933,8 @@ export default {
localEmployee: 'Local Employee',
nonLocalEmployee: 'Non Local Employee',
noWorkflowTemplate: 'A workflow template has not been selected.',
- salesRepresentative: 'Sales Representative',
- dataOffice: 'Employment Office District',
+ salesRepresentative: 'Sales Representative',
ref: 'Reference',
action: {
title: 'Action',
@@ -1020,7 +998,7 @@ export default {
issueBranch: 'Issue Branch',
issueDate: 'Issue Date',
madeBy: 'Made By',
- contactName: 'Contact Person',
+ contactName: 'Contact Name',
workOrderCode: 'Work Order Code',
workOrderName: 'Work Order Name',
telephone: 'Telephone',
@@ -1079,10 +1057,6 @@ export default {
confirmDebitNoteAccept: 'Confirm acceptance of the debit note.',
},
message: {
- copy: 'Copy',
- warningPaste:
- 'Do you want to replace the data with the newly copied information?',
- warningCopyEmpty: 'You have not copied any data yet',
quotationAccept: 'Once accepted, no further modifications can be made',
beingUse: '"{msg}" is being used.',
incompleteDataEntry: 'Incomplete data entry on {tap} page',
@@ -1127,7 +1101,7 @@ export default {
oneOrMoreBranchMissing:
'One or more branch cannot be delete and is missing.',
cantMakeHQAndBranchSameTime:
- 'Cannot make this as headquarters and branch at the same time.',
+ 'Cannot make this as headquaters and branch at the same time.',
unknowHowToVerify: 'Unknown how to verify identity.',
noPermission:
'You do not have permission to access or perform with this resource.',
@@ -1209,7 +1183,6 @@ export default {
'Product with the same name already exists. If you want to create with this name please select another code.',
userExists: 'User already exits.',
sameNameExists: 'Same name exists.',
- samePropertyNameExists: 'Same property name exists.',
validateError: 'Validate Error',
codeMisMatch: 'Code Mismatch',
@@ -1234,9 +1207,6 @@ export default {
taskListNotPending: 'One or more task is not pending.',
reqNotMet: 'Not Match',
systemError: 'A system error occurred.',
- taskOrderInvalid: 'Please select the product and the organization.',
-
- flowAccountProductIdNotFound: 'Product not found in flow account',
},
},
@@ -1506,26 +1476,4 @@ export default {
type: 'Type',
},
},
-
- dateRange: {
- today: 'Today',
- yesterday: 'Yesterday',
- thisWeek: 'This Week',
- lastWeek: 'Last Week',
- thisMonth: 'This Month',
- lastMonth: 'Last Month',
- thisYear: 'This Year',
- lastYear: 'Last Year',
- last7Days: 'Last 7 Days',
- last30Days: 'Last 30 Days',
- last90Days: 'Last 90 Days',
- customDateRange: 'Custom Date Range',
- },
-
- businessType: {
- title: 'Business Type',
- caption: 'Manage Business Type',
- name: 'Business Type Name',
- nameEn: 'Business Type Name (English)',
- },
};
diff --git a/src/i18n/index.ts b/src/i18n/index.ts
index 2801ec03..bba1bb34 100644
--- a/src/i18n/index.ts
+++ b/src/i18n/index.ts
@@ -1,7 +1,7 @@
import eng from './eng';
-import tha from './tha'; // spellchecker:disable-line
+import tha from './tha';
export default {
eng,
- tha, // spellchecker:disable-line
+ tha,
};
diff --git a/src/i18n/tha.ts b/src/i18n/tha.ts
index 921e25fd..5ce04f74 100644
--- a/src/i18n/tha.ts
+++ b/src/i18n/tha.ts
@@ -4,7 +4,7 @@ export default {
save: 'บันทึก',
open: 'เปิด',
close: 'ปิด',
- edit: 'แก้ไข{text}',
+ edit: 'แก้ไข',
cancel: 'ยกเลิก',
back: 'ย้อนกลับ',
undo: 'ย้อนกลับ',
@@ -31,7 +31,6 @@ export default {
displayField: 'ฟิลด์แสดงผล',
order: 'ลำดับ',
name: 'ชื่อ{msg}',
- nameEN: 'ชื่อ (ภาษาอังกฤษ)',
fullName: 'ชื่อ-สกุล',
detail: 'รายละเอียด{msg}',
remark: 'หมายเหตุ{msg}',
@@ -154,14 +153,6 @@ export default {
tableOfContent: 'สารบัญ',
draw: 'วาด',
newUpload: 'อัปโหลดใหม่',
- nativeLanguage: '{msg} ภาษาต้นทาง',
- copy: 'คัดลอก',
- paste: 'วาง',
- period: 'ช่วงเวลา',
- documentStatus: 'สถานะเอกสาร',
- advanceSearch: 'ค้นหาขั้นสูง',
- totalPeople: '{meg} คน',
- price: 'ราคา {price} บาท',
},
menu: {
@@ -204,14 +195,12 @@ export default {
title: 'จัดการ',
branch: 'สาขา',
personnel: 'บุคลากร',
- group: 'กลุ่ม',
productService: 'สินค้าและบริการ',
workflow: 'ขั้นตอนการทำงาน',
property: 'คุณสมบัติ',
customer: 'ลูกค้า',
mainData: 'ข้อมูลหลัก',
agencies: 'หน่วยงาน',
- businessType: 'ประเภทกิจการ',
},
sales: {
@@ -259,7 +248,6 @@ export default {
manual: {
title: 'คู่มือ',
usage: 'การใช้งาน',
- troubleshooting: 'การแก้ปัญหา',
},
},
@@ -338,7 +326,7 @@ export default {
letterAndNumOnly: 'โปรดใช้เฉพาะ _ ตัวอักษรภาษาอังกฤษและตัวเลขเท่านั้น',
numOnly: 'โปรดใช้เฉพาะตัวเลขเท่านั้น',
requireLength: 'กรุณากรอกให้ครบ {msg} หลัก',
- branchNameField: "โปรดใช้ตัวอักษร ตัวเลข หรือ . , - ' ( ) & เท่านั้น",
+ branchNameField: "โปรดใช้ตัวอักษร ตัวเลข หรือ . , - ' & เท่านั้น",
branchNameENField:
"โปรดใช้ตัวอักษรภาษาอังกฤษ ตัวเลข หรือ . , - ' & เท่านั้น",
passportFormat: 'กรุณากรอกหมายเลขพาสปอร์ตให้ถูกต้องตามรูปแบบ',
@@ -467,13 +455,6 @@ export default {
citizenId: 'เลขที่บัตรประชาชน',
citizenIssue: 'วันที่ออกบัตร',
citizenExpire: 'วันที่หมดอายุ',
- agencyStatus: 'สถานะเอเจนซี่',
- normal: 'ปกติ',
- canceled: 'ยกเลิก',
- blacklist: 'แบล็คลิสต์',
- contactName: 'ชื่อผู้ติดต่อ',
- contactTel: 'เบอร์โทรศัพท์ผู้ติดต่อ',
- addressForeign: 'ใช้ที่อยู่ต่างประเทศ',
},
},
customer: {
@@ -500,16 +481,15 @@ export default {
},
prefix: {
- mr: 'นาย',
- mrs: 'นาง',
- miss: 'นางสาว',
+ mr: 'Mr.',
+ mrs: 'Mrs.',
+ miss: 'Miss.',
},
citizenId: 'บัตรประจำตัวประชาชน',
religion: 'ศาสนา',
issueDate: 'วันที่ออกหนังสือ',
passportExpiryDate: 'วันหiมดอายุหนังสือเดินทาง',
- taxpayyerNo: 'เลขที่ประจำตัวผู้เสียภาษี',
ownerName: 'ชื่อนายจ้าง',
firstName: 'ชื่อ ',
@@ -593,7 +573,7 @@ export default {
family: 'ข้อมูลครอบครัว',
},
workerStatus: 'สถานะคนงาน',
- previousPassportNumber: 'หมายเลขหนังสือเดินทางเล่มเก่า',
+ previousPassportNumber: 'หมายเลขอันเก่าหนังสือเดินทาง',
employerBranch: 'สาขานายจ้าง',
employeeCode: 'รหัสลูกจ้าง',
nrcNo: 'เลขบัตรประจำตัวคนซึ่งไม่มีสัญชาติไทย (N.R.C No.)',
@@ -626,7 +606,7 @@ export default {
placeOfBirth: 'สถานที่เกิด',
countryOfbirth: 'ประเทศที่เกิด',
issueCountry: 'ประเทศที่ออก',
- entryCount: 'จำนวนวันที่เข้าประเทศ',
+ entryCount: 'จำนวนที่เข้าประเทศ',
employerSelect: {
branchName: 'ชื่อสาขา',
customerName: 'ชื่อนายจ้าง',
@@ -654,7 +634,7 @@ export default {
permitIssuedAt: 'สถานที่ออกใบอนุญาต',
permitIssueDate: 'วันที่ออกใบอนุญาตทำงาน',
permitExpireDate: 'วันที่หมดอายุใบอนุญาตทำงาน',
- identityNo: 'เลขประจำตัวคนต่างด้าว (13 หลัก)',
+ identityNo: 'เลขประจำตัวคนต่างด้าว (13หลัก)',
},
formFamily: {
citizenId:
@@ -772,13 +752,10 @@ export default {
},
quotation: {
- ownOnly: 'เห็นเฉพาะใบเสนอราคาของตัวเอง',
quotationDate: 'วันที่ใบเสนอราคา',
seller: 'ผู้ขาย',
paymentChannels: 'ช่องทางชำระเงิน',
channelsThat: 'ช่องทางที่',
- refNo: 'เลขที่อ้างอิง',
- bankAccount: 'บัญชีธนาคาร',
bankAccountNumber: 'เลขบัญชีธนาคาร',
bankAccountName: 'ชื่อบัญชี',
inTheNameOf: 'ในนาม',
@@ -926,10 +903,6 @@ export default {
code: 'รหัสหน่วยงาน',
group: 'กลุ่มหน่วยงาน',
name: 'ชื่อหน่วยงาน',
- contactName: 'ชื่อผู้ติดต่อ',
- contactTel: 'เบอร์โทรผู้ติดต่อ',
- bankInfo: 'ข้อมูลธนาคาร',
- attachment: 'เอกสารเพิ่มเติม',
},
requestList: {
@@ -951,7 +924,6 @@ export default {
nonLocalEmployee: 'พนักงานนอกพื้นที่',
noWorkflowTemplate: 'คุณไม่ได้เลือกแม่แบบขั้นตอนการทำงาน',
salesRepresentative: 'พนักงานขาย',
- dataOffice: 'สำนักงานเขตจัดหางาน',
ref: 'อ้างอิง',
action: {
title: 'จัดการ',
@@ -1070,9 +1042,6 @@ export default {
confirmDebitNoteAccept: 'ยืนยันการตอบรับใบเพิ่มหนี้',
},
message: {
- copy: 'คัดลอก',
- warningPaste: 'คุณต้องการที่จะเเทนที่ข้อมูลที่คัดลอกมาใหม่ใช่หรือไม่',
- warningCopyEmpty: 'คุณยังไม่ได้คัดลอกข้อมูล',
quotationAccept: 'เมื่อตอบรับเเล้วจะไม่สามารถแก้ไขได้อีก',
beingUse: '"{msg}" มีการใช้งานอยู่',
incompleteDataEntry: 'กรอกข้อมูลไม่ครบในหน้า {tap}',
@@ -1194,7 +1163,6 @@ export default {
'สินค้าที่มีชื่อเดียวกันมีในระบบแล้ว หากคุณต้องการสร้างด้วยชื่อนี้โปรดเลือกรหัสอื่น',
userExists: 'ชื่อผู้ใช้นี้มีอยู่ในระบบอยู่แล้ว',
sameNameExists: 'ชื่อนี้ถูกใช้ไปแล้ว',
- samePropertyNameExists: 'คุณสมบัตินี้มีอยู่ในระบบอยู่แล้ว',
validateError: 'เกิดข้อผิดพลาดจากการตรวจสอบ',
codeMisMatch: 'รหัสไม่ตรงกัน',
@@ -1220,8 +1188,6 @@ export default {
'มีงานหนึ่งงานหรือมากกว่าที่ไม่อยู่ในสถานะรอดำเนินการ',
reqNotMet: 'ไม่ตรงกัน',
systemError: 'ระบบเกิดข้อผิดพลาด',
- taskOrderInvalid: 'โปรดเลือก สินค้าเเละสาขา',
- flowAccountProductIdNotFound: 'ไม่พบสินค้าใน flow account',
},
},
@@ -1493,26 +1459,4 @@ export default {
type: 'ประเภท',
},
},
-
- dateRange: {
- today: 'วันนี้',
- yesterday: 'เมื่อวานนี้',
- thisWeek: 'สัปดาห์นี้',
- lastWeek: 'สัปดาห์ที่แล้ว',
- thisMonth: 'เดือนนี้',
- lastMonth: 'เดือนที่แล้ว',
- thisYear: 'ปีนี้',
- lastYear: 'ปีที่แล้ว',
- last7Days: '7 วันที่ผ่านมา',
- last30Days: '30 วันที่ผ่านมา',
- last90Days: '90 วันที่ผ่านมา',
- customDateRange: 'กำหนดช่วงวันที่เอง',
- },
-
- businessType: {
- title: 'ประเภทกิจการ',
- caption: 'จัดการประเภทกิจการ',
- name: 'ชื่อประเภทกิจการ',
- nameEn: 'ชื่อประเภทกิจการ (ภาษาอังกฤษ)',
- },
};
diff --git a/src/layouts/DrawerComponent.vue b/src/layouts/DrawerComponent.vue
index d7a70d33..c1b01436 100644
--- a/src/layouts/DrawerComponent.vue
+++ b/src/layouts/DrawerComponent.vue
@@ -7,7 +7,7 @@ import useMyBranch from 'stores/my-branch';
import { getUserId, getRole } from 'src/services/keycloak';
import { useQuasar } from 'quasar';
import { useI18n } from 'vue-i18n';
-import { canAccess } from 'src/stores/utils';
+import { isRoleInclude } from 'src/stores/utils';
type Menu = {
label: string;
@@ -71,50 +71,82 @@ function initMenu() {
{
label: 'branch',
route: '/branch-management',
- hidden: !canAccess('branch'),
+ hidden: !isRoleInclude([
+ 'system',
+ 'head_of_admin',
+ 'admin',
+ 'branch_manager',
+ 'head_of_accountant',
+ ]),
},
{
label: 'personnel',
route: '/personnel-management',
- hidden: !canAccess('personnel'),
- },
- {
- label: 'group',
- route: '/group-management',
- hidden: !canAccess('personnel'),
+ hidden: !isRoleInclude([
+ 'owner',
+ 'system',
+ 'head_of_admin',
+ 'admin',
+ 'branch_manager',
+ ]),
},
{
label: 'workflow',
route: '/workflow',
- hidden: !canAccess('workflow'),
+ hidden: !isRoleInclude(['system', 'head_of_admin', 'admin']),
},
{
label: 'property',
route: '/property',
- hidden: !canAccess('workflow'),
- },
- {
- label: 'businessType',
- route: '/business-type',
+ hidden: !isRoleInclude(['system', 'head_of_admin', 'admin']),
},
{
label: 'productService',
route: '/product-service',
+ hidden: !isRoleInclude([
+ 'system',
+ 'head_of_admin',
+ 'admin',
+ 'branch_manager',
+ 'head_of_accountant',
+ 'head_of_sale',
+ 'sale',
+ ]),
},
{
label: 'customer',
route: '/customer-management',
- hidden: !canAccess('customer'),
+ hidden: !isRoleInclude([
+ 'system',
+ 'head_of_admin',
+ 'admin',
+ 'branch_manager',
+ 'head_of_accountant',
+ 'accountant',
+ 'head_of_sale',
+ 'sale',
+ ]),
},
{
label: 'agencies',
route: '/agencies-management',
+ hidden: !isRoleInclude(['system', 'head_of_admin', 'admin']),
},
],
},
{
label: 'menu.sales',
icon: 'mdi-store-settings-outline',
+ hidden: !isRoleInclude([
+ 'system',
+ 'head_of_admin',
+ 'admin',
+ 'branch_manager',
+ 'head_of_accountant',
+ 'accountant',
+ 'head_of_sale',
+ 'sale',
+ ]),
children: [
{ label: 'quotation', route: '/quotation' },
{ label: 'invoice', route: '/invoice' },
@@ -137,6 +169,16 @@ function initMenu() {
label: 'menu.account',
icon: 'mdi-bank-outline',
disabled: false,
+ hidden: !isRoleInclude([
+ 'system',
+ 'head_of_admin',
+ 'admin',
+ 'branch_manager',
+ 'head_of_accountant',
+ 'accountant',
+ 'head_of_sale',
+ 'sale',
+ ]),
children: [
{ label: 'receipt', route: '/receipt' },
{ label: 'creditNote', route: '/credit-note' },
@@ -158,13 +200,10 @@ function initMenu() {
{
label: 'menu.overall',
icon: 'mdi-monitor-dashboard',
+ hidden: !isRoleInclude(['system', 'head_of_admin', 'admin', 'executive']),
children: [
{ label: 'report', route: '/report' },
- {
- label: 'dashboard',
- route: '/dash-board',
- hidden: !canAccess('dashBoard'),
- },
+ { label: 'dashboard', route: '/dash-board' },
],
},
@@ -176,10 +215,6 @@ function initMenu() {
label: 'usage',
route: '/manual',
},
- {
- label: 'troubleshooting',
- route: '/troubleshooting',
- },
],
},
];
diff --git a/src/layouts/MainLayout.vue b/src/layouts/MainLayout.vue
index 29e106bc..c09effed 100644
--- a/src/layouts/MainLayout.vue
+++ b/src/layouts/MainLayout.vue
@@ -2,7 +2,7 @@
import { ref, onMounted, computed, reactive } from 'vue';
import { storeToRefs } from 'pinia';
import { useQuasar } from 'quasar';
-import { getUserId, getUsername, getName, logout, getRole } from 'src/services/keycloak';
+import { getUserId, getUsername, logout, getRole } from 'src/services/keycloak';
import { Icon } from '@iconify/vue';
import { useI18n } from 'vue-i18n';
import moment from 'moment';
@@ -39,7 +39,7 @@ const configStore = useConfigStore();
const { data: notificationData } = storeToRefs(notificationStore);
const { visible } = storeToRefs(loaderStore);
-const { t, locale } = useI18n({ useScope: 'global' });
+const { t } = useI18n({ useScope: 'global' });
const userStore = useUserStore();
const canvasModal = ref(false);
@@ -52,14 +52,8 @@ const unread = computed(
);
const userImage = ref();
const userGender = ref('');
-const userName = ref({ th: '', en: '' });
const canvasRef = ref();
-const displayName = computed(() => {
- if (!userName.value.th && !userName.value.en) return getName() || 'Guest';
- return locale.value === 'eng' ? userName.value.en : userName.value.th;
-});
-
const language: {
value: Lang;
label: string;
@@ -167,14 +161,9 @@ onMounted(async () => {
if (user === 'admin') return;
if (uid) {
const res = await userStore.fetchById(uid);
- if (res) {
- if (res.gender) {
- userGender.value = res.gender;
- userImage.value = `${baseUrl}/user/${uid}/profile-image/${res.selectedImage}`;
- }
- // เก็บชื่อทั้งสองภาษา
- userName.value.th = `${res.firstName || ''} ${res.lastName || ''}`.trim();
- userName.value.en = `${res.firstNameEN || ''} ${res.lastNameEN || ''}`.trim();
+ if (res && res.gender) {
+ userGender.value = res.gender;
+ userImage.value = `${baseUrl}/user/${uid}/profile-image/${res.selectedImage}`;
}
}
});
@@ -495,7 +484,6 @@ onMounted(async () => {
{
style="margin-top: 58px"
>
- {{ userName || getName() }}
+ {{ getName() }}
{{ 'Guest' }}
- {{ userName || getName() }}
+ {{ getName() }}
{{ 'Guest' }}
diff --git a/src/pages/00_manual/MainPage.vue b/src/pages/00_manual/MainPage.vue
index 33a19ebe..adcb668f 100644
--- a/src/pages/00_manual/MainPage.vue
+++ b/src/pages/00_manual/MainPage.vue
@@ -1,7 +1,7 @@
@@ -56,7 +34,7 @@ watch(
>
@@ -1011,18 +998,6 @@ onMounted(async () => {
/>
-
-
-
-
diff --git a/src/pages/03_customer-management/TabEmployee.vue b/src/pages/03_customer-management/TabEmployee.vue
deleted file mode 100644
index 81348622..00000000
--- a/src/pages/03_customer-management/TabEmployee.vue
+++ /dev/null
@@ -1,514 +0,0 @@
-
-
-
-
-
-
-
- {{ $t('general.all') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {
- if (
- $q.screen.gt.xs ||
- currentPageEmployee === maxPageEmployee
- )
- return;
- currentPageEmployee = currentPageEmployee + 1;
- fetchListEmployee().then(() =>
- done(currentPageEmployee >= maxPageEmployee),
- );
- }
- "
- >
- {
- openHistory(item.id);
- }
- "
- @view="
- async (item: any) => {
- employeeFormState.drawerModal = true;
- employeeFormState.isEmployeeEdit = false;
- employeeFormStore.assignFormDataEmployee(item.id);
- await fetchImageList(
- item.id,
- item.selectedImage || '',
- 'employee',
- );
- }
- "
- @edit="(item: any) => editEmployeeFormPersonal(item.id)"
- @delete="
- (item: any) => {
- deleteEmployeeById({
- id: item.id,
- fetch: async () =>
- await fetchListEmployee(
- currentTab === 'employer'
- ? {
- page: 1,
- pageSize: 999,
- customerId: customerFormState.currentCustomerId,
- }
- : {
- fetchStats: true,
- mobileFetch: $q.screen.xs,
- },
- ),
- });
- }
- "
- @toggle-status="
- async (item: any) => {
- triggerChangeStatus(item.id, item.status, item.firstNameEN);
- }
- "
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- triggerChangeStatus(
- currentFromDataEmployee.id,
- s,
- currentFromDataEmployee.firstNameEN,
- )
- "
- />
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/03_customer-management/components/employer/EmployerFormAbout.vue b/src/pages/03_customer-management/components/employer/EmployerFormAbout.vue
index 7353db3c..eb131ea9 100644
--- a/src/pages/03_customer-management/components/employer/EmployerFormAbout.vue
+++ b/src/pages/03_customer-management/components/employer/EmployerFormAbout.vue
@@ -137,12 +137,7 @@ watch(
@update:model-value="
(v) => (typeof v === 'string' ? (registerName = v.trim()) : '')
"
- :rules="[
- (val) => !!val || $t('form.error.required'),
- (val) =>
- /^[A-Za-z0-9ก-๙\s&.,'()-]+$/.test(val) ||
- $t('form.error.branchNameField'),
- ]"
+ :rules="[(val: string) => !!val || $t('form.error.required')]"
/>
(typeof v === 'string' ? (registerNameEN = v.trim()) : '')
"
:rules="[
- (val) => !!val || $t('form.error.required'),
- (val) =>
- /^[A-Za-z0-9\s&.,'-]+$/.test(val) ||
- $t('form.error.branchNameENField'),
+ (val: string) =>
+ val === '' ||
+ /^[0-9A-Za-z\s.,]+$/.test(val) ||
+ $t('form.error.letterOnly'),
]"
/>
+ (typeof v === 'string' ? (customerName = v.trim()) : '')
+ "
+ />
+
(typeof v === 'string' ? (prefixName = v) : '')
"
@clear="prefixName = ''"
- :rules="[(val: string) => !!val || $t('form.error.required')]"
>
@@ -385,11 +393,11 @@ watch(
:readonly="readonly"
:disable="!readonly"
class="col-md-2 col-6"
- label="Prefix"
+ label="Title"
:model-value="
readonly
- ? prefixName.toUpperCase() || '-'
- : prefixName.toUpperCase() || ''
+ ? capitalize(prefixName || '') || '-'
+ : capitalize(prefixName || '')
"
@update:model-value="
(v) => (typeof v === 'string' ? (prefixName = v) : '')
diff --git a/src/pages/03_customer-management/components/employer/EmployerFormBasicInfo.vue b/src/pages/03_customer-management/components/employer/EmployerFormBasicInfo.vue
index dbb57c80..d31d3889 100644
--- a/src/pages/03_customer-management/components/employer/EmployerFormBasicInfo.vue
+++ b/src/pages/03_customer-management/components/employer/EmployerFormBasicInfo.vue
@@ -2,7 +2,6 @@
import useOptionStore from 'stores/options';
import SelectBranch from 'src/components/shared/select/SelectBranch.vue';
import { isRoleInclude } from 'src/stores/utils';
-import SelectBusinessType from 'src/components/shared/select/SelectBusinessType.vue';
withDefaults(
defineProps<{
@@ -103,13 +102,7 @@ const telephoneNo = defineModel('telephoneNo', { default: '' });
class="col-md-6"
:readonly
:disabled="
- !isRoleInclude([
- 'admin',
- 'system',
- 'head_of_admin',
- 'executive',
- 'accountant',
- ]) && !readonly
+ !isRoleInclude(['admin', 'system', 'head_of_admin']) && !readonly
"
:label="$t('customer.form.registeredBranch')"
select-first-value
@@ -143,10 +136,15 @@ const telephoneNo = defineModel('telephoneNo', { default: '' });
for="input-tax"
v-model="legalPersonNo"
/>
-
@@ -175,10 +173,15 @@ const telephoneNo = defineModel
('telephoneNo', { default: '' });
:label="$t('personnel.form.citizenId')"
for="input-citizen-id"
/>
-
diff --git a/src/pages/03_customer-management/components/employer/EmployerFormBranch.vue b/src/pages/03_customer-management/components/employer/EmployerFormBranch.vue
index 14f7aa98..1b70b651 100644
--- a/src/pages/03_customer-management/components/employer/EmployerFormBranch.vue
+++ b/src/pages/03_customer-management/components/employer/EmployerFormBranch.vue
@@ -7,8 +7,6 @@ import { CustomerCreate } from 'stores/customer/types';
import EmployerFormAbout from './EmployerFormAbout.vue';
import EmployerFormAuthorized from './EmployerFormAuthorized.vue';
import { waitAll } from 'src/stores/utils';
-import FormEmployeePassport from 'src/components/03_customer-management/FormEmployeePassport.vue';
-import FormEmployeeVisa from 'src/components/03_customer-management/FormEmployeeVisa.vue';
import {
FormCitizen,
CorpFormBusinessRegistration,
@@ -53,7 +51,6 @@ withDefaults(
actionDisabled?: boolean;
customerType?: 'CORP' | 'PERS';
hideAction?: boolean;
- hideDelete?: boolean;
}>(),
{
hideAction: false,
@@ -84,7 +81,7 @@ withDefaults(
/>
(businessTypeDialog = true)"
- />
-
+
+
+
+ {{ $t('general.noData') }}
+
+
+
+
+ (businessTypeDialog = true)"
- />
+ >
+
+
+
+ {{ $t('general.noData') }}
+
+
+
+
-
-
diff --git a/src/pages/03_customer-management/components/employer/EmployerFormContact.vue b/src/pages/03_customer-management/components/employer/EmployerFormContact.vue
index 7f56742c..4a58439c 100644
--- a/src/pages/03_customer-management/components/employer/EmployerFormContact.vue
+++ b/src/pages/03_customer-management/components/employer/EmployerFormContact.vue
@@ -9,6 +9,8 @@ const contactName = defineModel('contactName');
const email = defineModel('email');
const contactTel = defineModel('contactTel');
const officeTel = defineModel('officeTel');
+const agent = defineModel('agent');
+
const agentUserId = defineModel('agentUserId');
@@ -107,6 +109,7 @@ const agentUserId = defineModel('agentUserId');
/>
+
{
const customerStore = useCustomerStore();
- const onCreateImageList = ref<{
- selectedImage: string;
- list: { url: string; imgFile: File | null; name: string }[];
- }>({ selectedImage: '', list: [] });
-
- const { t } = useI18n();
- const flowStore = useFlowStore();
-
- const userBranchStore = useMyBranchStore();
-
- const registerAbleBranchOption = ref<{ id: string; name: string }[]>();
-
- const currentBranchRootId = ref('');
-
- const tabFieldRequired = ref<{
- [key: string]: (keyof CustomerBranchCreate)[];
- }>({
- main: [],
- business: ['businessTypeId', 'jobPosition'],
- address: [
- 'address',
- 'addressEN',
- 'provinceId',
- 'districtId',
- 'subDistrictId',
- ],
- contact: [],
- });
const defaultFormData: CustomerCreate = {
// code: '',
@@ -88,7 +54,6 @@ export const useCustomerForm = defineStore('form-customer', () => {
formDataOcr: Record;
isImageEdit: boolean;
currentCustomerId?: string;
- imageList: { list: string[]; selectedImage: string };
}>({
dialogType: 'info',
dialogOpen: false,
@@ -105,7 +70,6 @@ export const useCustomerForm = defineStore('form-customer', () => {
treeFile: [],
formDataOcr: {},
isImageEdit: false,
- imageList: { list: [], selectedImage: '' },
});
watch(
@@ -168,7 +132,6 @@ export const useCustomerForm = defineStore('form-customer', () => {
state.value.editCustomerCode = data.code;
state.value.customerImageUrl = `${baseUrl}/customer/${id}/image/${data.selectedImage}`;
state.value.defaultCustomerImageUrl = `${baseUrl}/customer/${id}/image/${data.selectedImage}`;
- currentBranchRootId.value = data.branch[0].id || '';
resetFormData.registeredBranchId = data.registeredBranchId;
resetFormData.status = data.status;
@@ -190,7 +153,7 @@ export const useCustomerForm = defineStore('form-customer', () => {
payDate: v.payDate,
jobDescription: v.jobDescription,
jobPosition: v.jobPosition,
- businessTypeId: v.businessTypeId,
+ businessType: v.businessType,
employmentOffice: v.employmentOffice,
employmentOfficeEN: v.employmentOfficeEN,
telephoneNo: v.telephoneNo,
@@ -227,6 +190,7 @@ export const useCustomerForm = defineStore('form-customer', () => {
contactTel: v.contactTel,
officeTel: v.officeTel,
agentUserId: v.agentUserId || undefined,
+ customerName: v.customerName,
authorizedName: v.authorizedName,
authorizedNameEN: v.authorizedNameEN,
@@ -264,6 +228,7 @@ export const useCustomerForm = defineStore('form-customer', () => {
async function addCurrentCustomerBranch() {
if (currentFormData.value.customerBranch?.some((v) => !v.id)) return;
currentFormData.value.customerBranch?.push({
+ id: '',
customerId: '',
branchCode:
currentFormData.value.customerBranch.length !== 0
@@ -297,8 +262,8 @@ export const useCustomerForm = defineStore('form-customer', () => {
birthDate:
currentFormData.value.customerBranch?.at(0)?.birthDate || undefined,
- businessTypeId:
- currentFormData.value.customerBranch?.at(0)?.businessTypeId || '',
+ businessType:
+ currentFormData.value.customerBranch?.at(0)?.businessType || '',
jobPosition:
currentFormData.value.customerBranch?.at(0)?.jobPosition || '',
jobDescription:
@@ -335,6 +300,8 @@ export const useCustomerForm = defineStore('form-customer', () => {
currentFormData.value.customerBranch?.at(0)?.agentUserId || undefined,
status: 'CREATED',
+ customerName:
+ currentFormData.value.customerBranch?.at(0)?.customerName || '',
registerName:
currentFormData.value.customerBranch?.at(0)?.registerName || '',
registerNameEN:
@@ -393,142 +360,23 @@ export const useCustomerForm = defineStore('form-customer', () => {
}
}
- async function fetchListOfOptionBranch() {
- if (registerAbleBranchOption.value) return;
-
- const uid = getUserId();
- const role = getRole();
-
- if (!uid) return; // should not possible as the system require login to be able to access resource.
-
- if (role?.includes('system')) {
- const result = await userBranchStore.fetchListOptionBranch();
- if (result && result.total > 0)
- registerAbleBranchOption.value = result.result;
- } else {
- const result = await userBranchStore.fetchListMyBranch(uid);
- if (result && result.total > 0)
- registerAbleBranchOption.value = result.result;
- }
-
- // TODO: Assign (first) branch of the user as register branch of the data
- }
-
- function customerFormUndo(close = true) {
- if (isFormDataDifferent()) {
- return customerConfirmUnsave(close);
- }
- resetForm();
- state.value.readonly = true;
- }
-
- function customerConfirmUnsave(close = true) {
- dialog({
- color: 'warning',
- icon: 'mdi-alert',
- title: t('form.warning.title'),
- actionText: t('general.ok'),
- persistent: true,
- message: t('form.warning.unsave'),
-
- action: () => {
- resetForm();
- state.value.readonly = true;
-
- if (!state.value.drawerModal) {
- state.value.dialogModal = !close;
- } else {
- state.value.drawerModal = !close;
- }
- },
- cancel: () => {},
- });
- }
-
- function deleteCustomerById(
- id: string,
- fetch?: (...args: unknown[]) => unknown,
- ) {
- dialog({
- color: 'negative',
- icon: 'mdi-alert',
- title: t('dialog.title.confirmDelete'),
- actionText: t('general.delete'),
- persistent: true,
- message: t('dialog.message.confirmDelete'),
- action: async () => {
- await customerStore.deleteById(id);
- await fetch();
- state.value.dialogModal = false;
- flowStore.rotate();
- },
- cancel: () => {},
- });
- }
-
- function validateTabField(
- value: T,
- fieldRequired: { [key: string]: (keyof T)[] },
- ) {
- const list: string[] = [];
-
- for (const tab in fieldRequired) {
- for (const field of fieldRequired[tab]) {
- if (!value[field] && !list.includes(tab)) list.push(tab);
- }
- }
-
- return list;
- }
-
- async function deleteCustomerBranchById(id: string) {
- return await new Promise((resolve) => {
- dialog({
- color: 'negative',
- icon: 'mdi-alert',
- title: t('dialog.title.confirmDelete'),
- actionText: t('general.delete'),
- persistent: true,
- message: t('dialog.message.confirmDelete'),
- action: async () => {
- await customerStore.deleteBranchById(id);
- flowStore.rotate();
- resolve(true);
- },
- cancel: () => {
- resolve(false);
- },
- });
- });
- }
-
return {
- onCreateImageList,
- tabFieldRequired,
- registerAbleBranchOption,
state,
resetFormData,
currentFormData,
- currentBranchRootId,
-
isFormDataDifferent,
resetForm,
assignFormData,
submitFormCustomer,
addCurrentCustomerBranch,
deleteAttachment,
- fetchListOfOptionBranch,
- customerFormUndo,
- customerConfirmUnsave,
- deleteCustomerById,
- validateTabField,
- deleteCustomerBranchById,
};
});
export const useCustomerBranchForm = defineStore('form-customer-branch', () => {
const customerStore = useCustomerStore();
const customerFormStore = useCustomerForm();
+
const defaultFormData: CustomerBranchCreate & {
id?: string;
codeCustomer?: string;
@@ -549,7 +397,7 @@ export const useCustomerBranchForm = defineStore('form-customer-branch', () => {
gender: '',
birthDate: undefined,
- businessTypeId: '',
+ businessType: '',
jobPosition: '',
jobDescription: '',
payDate: '',
@@ -579,6 +427,7 @@ export const useCustomerBranchForm = defineStore('form-customer-branch', () => {
agentUserId: undefined,
status: 'CREATED',
+ customerName: '',
registerName: '',
registerNameEN: '',
registerDate: undefined,
@@ -630,7 +479,7 @@ export const useCustomerBranchForm = defineStore('form-customer-branch', () => {
payDateEN: _data.payDateEN,
jobDescription: _data.jobDescription,
jobPosition: _data.jobPosition,
- businessTypeId: _data.businessTypeId,
+ businessType: _data.businessType,
employmentOffice: _data.employmentOffice,
employmentOfficeEN: _data.employmentOfficeEN,
telephoneNo: _data.telephoneNo,
@@ -664,6 +513,7 @@ export const useCustomerBranchForm = defineStore('form-customer-branch', () => {
officeTel: _data.officeTel,
agentUserId: _data.agentUserId || undefined,
codeCustomer: _data.codeCustomer,
+ customerName: _data.customerName,
homeCode: _data.homeCode,
authorizedName: _data.authorizedName,
authorizedNameEN: _data.authorizedNameEN,
@@ -731,23 +581,11 @@ export const useCustomerBranchForm = defineStore('form-customer-branch', () => {
});
export const useEmployeeForm = defineStore('form-employee', () => {
- const { t } = useI18n();
const customerStore = useCustomerStore();
const employeeStore = useEmployeeStore();
const flowStore = useFlowStore();
const branchStore = useMyBranch();
- const route = useRoute();
-
- const refreshImageState = ref(false);
-
- const onCreateImageList = ref<{
- selectedImage: string;
- list: { url: string; imgFile: File | null; name: string }[];
- }>({ selectedImage: '', list: [] });
-
- const statusEmployeeCreate = ref(false);
-
const state = ref<{
dialogType: 'info' | 'create' | 'edit';
imageDialog: boolean;
@@ -756,8 +594,6 @@ export const useEmployeeForm = defineStore('form-employee', () => {
drawerModal: boolean;
isImageEdit: boolean;
- currentBranchId: string;
- currentCustomerBranch?: CustomerBranch;
currentEmployeeCode: string;
currentEmployee: Employee | null;
currentIndexPassport: number;
@@ -790,9 +626,7 @@ export const useEmployeeForm = defineStore('form-employee', () => {
}
| undefined;
ocr: boolean;
- imageList: { list: string[]; selectedImage: string };
}>({
- currentBranchId: '',
isImageEdit: false,
currentIndexPassport: -1,
currentIndexVisa: -1,
@@ -815,10 +649,9 @@ export const useEmployeeForm = defineStore('form-employee', () => {
infoEmployeePersonCard: [],
formDataEmployeeOwner: undefined,
ocr: false,
- imageList: { list: [], selectedImage: '' },
});
- const defaultFormData: EmployeeCreate & { image?: File } = {
+ const defaultFormData: EmployeeCreate = {
id: '',
code: '',
customerBranchId: '',
@@ -900,7 +733,6 @@ export const useEmployeeForm = defineStore('form-employee', () => {
expireDate: new Date(),
remark: undefined,
workerType: '',
- reportDate: null,
number: '',
},
],
@@ -946,7 +778,7 @@ export const useEmployeeForm = defineStore('form-employee', () => {
};
let resetEmployeeData = structuredClone(defaultFormData);
- const currentFromDataEmployee = ref(
+ const currentFromDataEmployee = ref(
structuredClone(defaultFormData),
);
@@ -968,14 +800,12 @@ export const useEmployeeForm = defineStore('form-employee', () => {
state.value.currentIndexVisa = -1;
state.value.currentIndexCheckup = -1;
state.value.currentIndexWorkHistory = -1;
- state.value.imageList = { list: [], selectedImage: '' };
- // state.value.currentTab = 'personalInfo';
+ state.value.currentTab = 'personalInfo';
if (clean) {
state.value.formDataEmployeeOwner = undefined;
resetEmployeeData = structuredClone(defaultFormData);
state.value.statusSavePersonal = false;
state.value.profileUrl = '';
- state.value.currentBranchId = '';
} else {
resetEmployeeData.selectedImage =
currentFromDataEmployee.value.selectedImage;
@@ -996,16 +826,12 @@ export const useEmployeeForm = defineStore('form-employee', () => {
state.value.currentIndexPassport
].id === undefined
) {
- const { id, employeeId, updatedAt, createdAt, file, ...payload } =
- currentFromDataEmployee.value.employeePassport?.[
- state.value.currentIndexPassport
- ];
-
const res = await employeeStore.postMeta({
parentId: currentFromDataEmployee.value.id || '',
group: 'passport',
- meta: payload,
- file: file,
+ meta: currentFromDataEmployee.value.employeePassport?.[
+ state.value.currentIndexPassport
+ ],
});
if (res) {
@@ -1019,7 +845,7 @@ export const useEmployeeForm = defineStore('form-employee', () => {
state.value.currentIndexPassport
].id !== undefined
) {
- const { id, employeeId, updatedAt, createdAt, file, ...payload } =
+ const { id, employeeId, updatedAt, createdAt, ...payload } =
currentFromDataEmployee.value.employeePassport?.[
state.value.currentIndexPassport
];
@@ -1032,7 +858,6 @@ export const useEmployeeForm = defineStore('form-employee', () => {
state.value.currentIndexPassport
].id || '',
meta: payload,
- file: file || undefined,
});
}
@@ -1260,12 +1085,10 @@ export const useEmployeeForm = defineStore('form-employee', () => {
await assignFormDataEmployee(currentFromDataEmployee.value.id);
}
- async function submitPersonal(imgList?: {
+ async function submitPersonal(imgList: {
selectedImage: string;
list: { url: string; imgFile: File | null; name: string }[];
}) {
- let employeeId: string | undefined = undefined;
-
currentFromDataEmployee.value.firstName =
currentFromDataEmployee.value.firstName.trim();
currentFromDataEmployee.value.middleName =
@@ -1281,11 +1104,10 @@ export const useEmployeeForm = defineStore('form-employee', () => {
currentFromDataEmployee.value.lastNameEN.trim();
if (state.value.dialogType === 'create') {
- delete currentFromDataEmployee.value.image;
const res = await employeeStore.create(
{
...currentFromDataEmployee.value,
- customerBranchId: state.value.currentBranchId || '',
+ customerBranchId: state.value.formDataEmployeeOwner?.id || '',
employeeWork: [],
employeeCheckup: [],
@@ -1295,7 +1117,6 @@ export const useEmployeeForm = defineStore('form-employee', () => {
);
if (res) {
- employeeId = res.id;
await assignFormDataEmployee(res.id);
currentFromDataEmployee.value.id = res.id;
state.value.statusSavePersonal = true;
@@ -1310,19 +1131,17 @@ export const useEmployeeForm = defineStore('form-employee', () => {
state.value.currentEmployee?.status === 'CREATED'
? 'ACTIVE'
: state.value.currentEmployee?.status,
- customerBranchId: state.value.currentBranchId || '',
+ customerBranchId: state.value.formDataEmployeeOwner?.id || '',
employeeWork: [],
employeeCheckup: [],
employeeOtherInfo: undefined,
},
);
if (res) {
- employeeId = res.id;
await assignFormDataEmployee(res.id);
state.value.statusSavePersonal = true;
}
}
- return employeeId;
}
async function assignFormDataEmployee(id?: string) {
@@ -1364,19 +1183,7 @@ export const useEmployeeForm = defineStore('form-employee', () => {
employeePassport: structuredClone(
payload.employeePassport?.length === 0
? state.value.dialogModal
- ? defaultFormData.employeePassport.map((v) => ({
- ...v,
- namePrefix: payload.namePrefix,
- firstName: payload.firstName,
- firstNameEN: payload.firstNameEN,
- middleName: payload.middleName,
- middleNameEN: payload.middleNameEN,
- lastName: payload.lastName,
- lastNameEN: payload.lastNameEN,
- gender: payload.gender,
- nationality: payload.nationality,
- birthDate: payload.dateOfBirth,
- }))
+ ? defaultFormData.employeePassport
: []
: payload.employeePassport,
),
@@ -1398,10 +1205,12 @@ export const useEmployeeForm = defineStore('form-employee', () => {
statusSave: true,
})),
),
- employeeOtherInfo: structuredClone({
- ...(payload.employeeOtherInfo ?? {}),
- statusSave: true,
- }),
+ employeeOtherInfo: structuredClone(
+ {
+ ...payload.employeeOtherInfo,
+ statusSave: !!payload.employeeOtherInfo?.id ? true : false,
+ } || {},
+ ),
employeeWork: structuredClone(
payload.employeeWork?.length === 0
? state.value.dialogModal
@@ -1461,8 +1270,6 @@ export const useEmployeeForm = defineStore('form-employee', () => {
state.value.currentIndexVisa = -1;
}
- state.value.currentBranchId = payload.customerBranchId;
-
const foundBranch = await customerStore.fetchListCustomerBranchById(
payload.customerBranchId,
);
@@ -1518,17 +1325,17 @@ export const useEmployeeForm = defineStore('form-employee', () => {
issueDate: new Date(),
type: '',
expireDate: new Date(),
- birthDate: currentFromDataEmployee.value.dateOfBirth,
+ birthDate: new Date(),
workerStatus: '',
- nationality: currentFromDataEmployee.value.nationality,
- gender: currentFromDataEmployee.value.gender,
- lastNameEN: currentFromDataEmployee.value.lastNameEN,
- lastName: currentFromDataEmployee.value.lastName,
- middleNameEN: currentFromDataEmployee.value.middleNameEN,
- middleName: currentFromDataEmployee.value.middleName,
- firstNameEN: currentFromDataEmployee.value.firstNameEN,
- firstName: currentFromDataEmployee.value.firstName,
- namePrefix: currentFromDataEmployee.value.namePrefix,
+ nationality: '',
+ gender: '',
+ lastNameEN: '',
+ lastName: '',
+ middleNameEN: '',
+ middleName: '',
+ firstNameEN: '',
+ firstName: '',
+ namePrefix: '',
number: '',
});
@@ -1550,7 +1357,6 @@ export const useEmployeeForm = defineStore('form-employee', () => {
expireDate: new Date(),
remark: undefined,
workerType: '',
- reportDate: null,
number: '',
});
@@ -1590,92 +1396,10 @@ export const useEmployeeForm = defineStore('form-employee', () => {
(currentFromDataEmployee.value.employeeWork?.length || 0) - 1;
}
- function employeeFormUndo(close = true) {
- if (isFormDataDifferent()) {
- return employeeConfirmUnsave(close);
- }
- resetFormDataEmployee();
- state.value.editReadonly = true;
- }
-
- function employeeConfirmUnsave(close = true) {
- dialog({
- color: 'warning',
- icon: 'mdi-alert',
- title: t('form.warning.title'),
- actionText: t('general.ok'),
- persistent: true,
- message: t('form.warning.unsave'),
- action: () => {
- resetFormDataEmployee();
- onCreateImageList.value = { selectedImage: '', list: [] };
- state.value.editReadonly = true;
- state.value.dialogModal = !close;
- state.value.drawerModal = !close;
- },
- cancel: () => {},
- });
- }
-
- async function deleteEmployeeById(opts: {
- id?: string;
- type?: 'passport' | 'visa' | 'healthCheck' | 'work';
- index?: number;
- fetch?: (...args: unknown[]) => unknown;
- removeArray?: (...args: unknown[]) => unknown;
- }) {
- dialog({
- color: 'negative',
- icon: 'mdi-alert',
- title: t('dialog.title.confirmDelete'),
- actionText: t('general.delete'),
- persistent: true,
- message: t('dialog.message.confirmDelete'),
- action: async () => {
- if (opts.type === 'passport' && opts.index !== undefined) {
- await deletePassport(opts.index);
- }
-
- if (opts.type === 'visa' && opts.index !== undefined) {
- await deleteVisa(opts.index);
- }
-
- if (opts.type === 'healthCheck' && opts.index !== undefined) {
- await deleteHealthCheck(opts.index);
- }
-
- if (opts.type === 'work' && opts.index !== undefined) {
- await deleteWorkHistory(opts.index);
- } else {
- if (!!opts.id) {
- const result = await employeeStore.deleteById(opts.id);
-
- if (result) {
- state.value.drawerModal = false;
- state.value.dialogModal = false;
- }
- }
- }
-
- if (route.name !== 'CustomerBranchManagement') {
- await opts.fetch?.();
- flowStore.rotate();
- }
- opts.removeArray?.();
- },
-
- cancel: () => {},
- });
- }
-
return {
- refreshImageState,
- statusEmployeeCreate,
- onCreateImageList,
state,
currentFromDataEmployee,
resetEmployeeData,
-
addPassport,
addVisa,
addCheckup,
@@ -1699,9 +1423,5 @@ export const useEmployeeForm = defineStore('form-employee', () => {
employeeFilterOwnerBranch,
isFormDataDifferent,
-
- employeeFormUndo,
- employeeConfirmUnsave,
- deleteEmployeeById,
};
});
diff --git a/src/pages/04_flow-managment/FlowDialog.vue b/src/pages/04_flow-managment/FlowDialog.vue
index 42c429ba..77d8bd12 100644
--- a/src/pages/04_flow-managment/FlowDialog.vue
+++ b/src/pages/04_flow-managment/FlowDialog.vue
@@ -43,7 +43,6 @@ withDefaults(
defineProps<{
readonly?: boolean;
isEdit?: boolean;
- hideAction?: boolean;
}>(),
{ readonly: false, isEdit: false },
);
@@ -61,7 +60,6 @@ async function addStep() {
flowData.value.step.push({
responsibleInstitution: [],
responsiblePersonId: [],
- responsibleGroup: [],
value: [],
detail: '',
name: '',
@@ -168,7 +166,6 @@ function triggerPropertiesDialog(step: WorkFlowPayloadStep) {
id="flow-form-dialog"
>
import { onMounted, reactive, ref, watch } from 'vue';
-import { QTableProps } from 'quasar';
+import { QSelect, QTableProps } from 'quasar';
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
@@ -11,7 +11,7 @@ import {
} from 'src/stores/workflow-template/types';
import { useWorkflowTemplate } from 'src/stores/workflow-template';
import { useNavigator } from 'src/stores/navigator';
-import { dialog, canAccess } from 'src/stores/utils';
+import { dialog } from 'src/stores/utils';
import FloatingActionButton from 'components/FloatingActionButton.vue';
import StatCardComponent from 'src/components/StatCardComponent.vue';
@@ -22,7 +22,6 @@ import NoData from 'src/components/NoData.vue';
import KebabAction from 'src/components/shared/KebabAction.vue';
import PaginationPageSize from 'src/components/PaginationPageSize.vue';
import { useQuasar } from 'quasar';
-import AdvanceSearch from 'src/components/shared/AdvanceSearch.vue';
const { t } = useI18n();
const workflowStore = useWorkflowTemplate();
@@ -46,7 +45,6 @@ const pageState = reactive({
addModal: false,
viewDrawer: false,
isDrawerEdit: true,
- searchDate: [],
});
const fieldSelected = ref<('order' | 'name' | 'step')[]>([
@@ -70,6 +68,7 @@ const fieldSelectedOption = ref<{ label: string; value: string }[]>([
},
]);
+const refFilter = ref>();
const currWorkflowData = ref();
const formDataWorkflow = ref({
status: 'CREATED',
@@ -103,7 +102,6 @@ const columns = [
function triggerDialog(type: 'add' | 'edit' | 'view') {
if (type === 'add') {
registeredBranchId.value = '';
- userInTable.value = [];
formDataWorkflow.value = {
status: 'CREATED',
name: '',
@@ -208,7 +206,7 @@ async function submit() {
...formDataWorkflow.value,
});
} else {
- await workflowStore.createWorkflowTemplate({
+ await workflowStore.creatWorkflowTemplate({
registeredBranchId: registeredBranchId.value,
...formDataWorkflow.value,
});
@@ -224,11 +222,7 @@ function assignFormData(workflowData: WorkflowTemplate) {
status: workflowData.status,
name: workflowData.name,
step: workflowData.step.map((s, i) => {
- userInTable.value[i] = {
- name: s.name,
- responsiblePerson: [],
- responsibleGroup: [],
- };
+ userInTable.value[i] = { name: s.name, responsiblePerson: [] };
s.responsiblePerson.forEach((p) => {
userInTable.value[i].responsiblePerson.push({
id: p.user.id,
@@ -242,16 +236,12 @@ function assignFormData(workflowData: WorkflowTemplate) {
code: p.user.code,
});
});
- s.responsibleGroup.forEach((g) => {
- userInTable.value[i].responsibleGroup.push(g);
- });
return {
id: s.id,
name: s.name,
detail: s.detail,
messengerByArea: s.messengerByArea || false,
value: s.value.length > 0 ? JSON.parse(JSON.stringify(s.value)) : [],
- responsibleGroup: s.responsibleGroup.map((g) => g),
responsiblePersonId: s.responsiblePerson.map((p) => p.userId),
responsibleInstitution: JSON.parse(
JSON.stringify(s.responsibleInstitution),
@@ -292,8 +282,6 @@ async function fetchWorkflowList(mobileFetch?: boolean) {
: statusFilter.value === 'statusACTIVE'
? 'ACTIVE'
: 'INACTIVE',
- startDate: pageState.searchDate[0],
- endDate: pageState.searchDate[1],
});
if (res) {
workflowData.value =
@@ -323,18 +311,14 @@ watch(
fetchWorkflowList();
},
);
-watch(
- [() => pageState.inputSearch, workflowPageSize, () => pageState.searchDate],
- () => {
- workflowData.value = [];
- workflowPage.value = 1;
- fetchWorkflowList();
- },
-);
+watch([() => pageState.inputSearch, workflowPageSize], () => {
+ workflowData.value = [];
+ workflowPage.value = 1;
+ fetchWorkflowList();
+});
-
-
-
-
- {{ $t('general.status') }}
-
-
+
+
+
-
+
{
@@ -849,7 +813,6 @@ watch(
@drawer-undo="undo"
@close="resetForm"
@submit="submit"
- :hide-action="!canAccess('workflow', 'edit')"
:readonly="!pageState.isDrawerEdit"
:isEdit="pageState.isDrawerEdit"
v-model="pageState.addModal"
diff --git a/src/pages/04_product-service/MainPage.vue b/src/pages/04_product-service/MainPage.vue
index 17cd4040..462e7476 100644
--- a/src/pages/04_product-service/MainPage.vue
+++ b/src/pages/04_product-service/MainPage.vue
@@ -3,7 +3,7 @@ import { nextTick, ref, watch, reactive } from 'vue';
import { useI18n } from 'vue-i18n';
import { onMounted } from 'vue';
import { storeToRefs } from 'pinia';
-import { useQuasar, type QTableProps } from 'quasar';
+import { QSelect, useQuasar, type QTableProps } from 'quasar';
import DialogProperties from 'src/components/dialog/DialogProperties.vue';
import ProductCardComponent from 'components/04_product-service/ProductCardComponent.vue';
@@ -33,7 +33,6 @@ import {
SaveButton,
UndoButton,
ToggleButton,
- ImportButton,
} from 'components/button';
import TableProduct from 'src/components/04_product-service/TableProduct.vue';
import PaginationPageSize from 'src/components/PaginationPageSize.vue';
@@ -41,7 +40,7 @@ import PaginationPageSize from 'src/components/PaginationPageSize.vue';
import useFlowStore from 'stores/flow';
import { dateFormat } from 'src/utils/datetime';
-import { formatNumberDecimal, isRoleInclude, canAccess } from 'stores/utils';
+import { formatNumberDecimal, isRoleInclude } from 'stores/utils';
const { getWorkflowTemplate } = useWorkflowTemplate();
import { Status } from 'stores/types';
@@ -60,7 +59,6 @@ import {
ServiceById,
WorkItems,
Attributes,
- WorkCreate,
} from 'stores/product-service/types';
import { computed } from 'vue';
import {
@@ -69,8 +67,6 @@ import {
} from 'src/stores/workflow-template/types';
import { useWorkflowTemplate } from 'src/stores/workflow-template';
import { deepEquals } from 'src/utils/arr';
-import { toRaw } from 'vue';
-import AdvanceSearch from 'src/components/shared/AdvanceSearch.vue';
const flowStore = useFlowStore();
const navigatorStore = useNavigator();
@@ -100,15 +96,10 @@ const {
createWork,
editWork,
deleteWork,
-
- importProduct,
-
- productExport,
} = productServiceStore;
const { workNameItems } = storeToRefs(productServiceStore);
const allStat = ref<{ mode: string; count: number }[]>([]);
-
const stat = ref<
{
icon: string;
@@ -145,29 +136,33 @@ const { t } = useI18n();
const baseUrl = ref(import.meta.env.VITE_API_BASE_URL);
const priceDisplay = computed(() => ({
- // price: !isRoleInclude(['sale_agent']),
- price: true,
+ price: !isRoleInclude(['sale_agent']),
agentPrice: isRoleInclude([
- 'system',
- 'head_of_admin',
'admin',
- 'executive',
- 'accountant',
+ 'head_of_admin',
'head_of_sale',
+ 'system',
+ 'owner',
+ 'accountant',
+ 'sale_agent',
]),
serviceCharge: isRoleInclude([
- 'system',
- 'head_of_admin',
'admin',
- 'executive',
+ 'head_of_admin',
+ 'system',
+ 'owner',
'accountant',
]),
}));
-const actionDisplay = computed(() => canAccess('product', 'edit'));
+const actionDisplay = computed(() =>
+ isRoleInclude(['admin', 'head_of_admin', 'system', 'owner', 'accountant']),
+);
const splitterModel = computed(() =>
$q.screen.lt.md ? (productMode.value !== 'group' ? 0 : 100) : 25,
);
+const refFilterGroup = ref>();
+const refFilterProductService = ref>();
const holdDialog = ref(false);
const imageDialog = ref(false);
const currentNode = ref();
@@ -525,7 +520,6 @@ const currentStatusGroupType = ref('CREATED');
const currentIdGroupType = ref('');
const currentStatus = ref('All');
-const searchDate = ref([]);
// img
const isImageEdit = ref(false);
@@ -621,8 +615,6 @@ async function fetchListGroups(mobileFetch?: boolean) {
: currentStatus.value === 'ACTIVE'
? 'ACTIVE'
: 'INACTIVE',
- startDate: searchDate.value[0],
- endDate: searchDate.value[1],
});
if (res) {
@@ -683,8 +675,6 @@ async function fetchListOfProduct(mobileFetch?: boolean) {
? 'ACTIVE'
: undefined,
productGroupId: currentIdGroup.value,
- startDate: searchDate.value[0],
- endDate: searchDate.value[1],
});
if (res) {
@@ -730,8 +720,6 @@ async function fetchListOfService(mobileFetch?: boolean) {
? 'ACTIVE'
: undefined,
productGroupId: currentIdGroup.value,
- startDate: searchDate.value[0],
- endDate: searchDate.value[1],
});
if (res) {
@@ -1171,7 +1159,6 @@ function clearFormService() {
profileSubmit.value = false;
imageProduct.value = undefined;
profileFileImg.value = null;
- serviceTab.value = 1;
}
function sameFormService() {
@@ -1398,7 +1385,6 @@ function submitAddWorkProduct() {
if (!s.hasOwnProperty('productsId')) {
s.productsId = [];
}
- if (s.productsId.length === 0) return;
s.productsId.push(i.id);
},
);
@@ -1451,11 +1437,17 @@ function confirmDeleteWork(id: string, noDialog?: boolean) {
}
}
-function triggerConfirmCloseWorkName() {
+function triggerConfirmCloseWork() {
dialogWarningClose(t, {
message: t('dialog.message.warningClose'),
action: () => {
manageWorkNameDialog.value = false;
+ if (workNameItems.value[workNameItems.value.length - 1].name === '') {
+ confirmDeleteWork(
+ workNameItems.value[workNameItems.value.length - 1].id,
+ true,
+ );
+ }
},
cancel: () => {},
});
@@ -1598,7 +1590,6 @@ async function enterNext(type: 'service' | 'product') {
inputSearchProductAndService.value = '';
currentStatus.value = 'All';
filterStat.value = [];
- searchDate.value = [];
if (
expandedTree.value.length > 1 &&
@@ -1754,7 +1745,7 @@ watch(currentStatus, async () => {
flowStore.rotate();
});
-watch([inputSearch, () => searchDate.value], async () => {
+watch(inputSearch, async () => {
if (productMode.value === 'group') {
productGroup.value = [];
currentPageGroup.value = 1;
@@ -1763,7 +1754,7 @@ watch([inputSearch, () => searchDate.value], async () => {
}
});
-watch([inputSearchProductAndService, () => searchDate.value], async () => {
+watch(inputSearchProductAndService, async () => {
product.value = [];
service.value = [];
currentPageServiceAndProduct.value = 1;
@@ -1840,84 +1831,6 @@ function handleSubmitSameWorkflow() {
);
}
-async function copy(id: string) {
- {
- const res = await fetchListServiceById(id);
- if (res) {
- formService.value = {
- code: res.code.slice(0, -3),
- name: res.name,
- detail: res.detail,
- attributes: res.attributes,
- work: res.work.map((v) => ({
- id: v.id,
- name: v.name,
- attributes: v.attributes,
- product: v.productOnWork.map((productOnWorkItem) => ({
- id: productOnWorkItem.product.id,
- installmentNo: productOnWorkItem.installmentNo,
- stepCount: productOnWorkItem.stepCount,
- })),
- })),
- status: res.status,
- productGroupId: res.productGroupId,
- selectedImage: res.selectedImage,
- installments: res.installments,
- };
-
- workItems.value = res.work.map((item) => {
- return {
- id: item.id,
- name: item.name,
- attributes: item.attributes,
- product: item.productOnWork.map((productOnWorkItem) => {
- return {
- ...productOnWorkItem.product,
- nameEn: productOnWorkItem.product.name,
- installmentNo: productOnWorkItem.installmentNo,
- };
- }),
- };
- });
- }
- }
-
- dialogService.value = true;
-}
-
-function addWorkName(data: { name: string; order: number }) {
- workNameItems.value.push({ id: '', name: data.name, isEdit: true });
-}
-
-async function submitWorkName(
- workId: string,
- data: Partial,
-) {
- if (workNameItems.value.length === 0) return;
-
- if (!workId) await createWork({ ...data, order: 1 });
- else await editWork(workId, data);
-}
-
-async function triggerExport() {
- productExport({
- pageSize: 100_000,
- productGroupId: currentIdGroup.value,
- query: !!inputSearchProductAndService.value
- ? inputSearchProductAndService.value
- : undefined,
- status:
- currentStatus.value === 'INACTIVE'
- ? 'INACTIVE'
- : currentStatus.value === 'ACTIVE'
- ? 'ACTIVE'
- : undefined,
-
- startDate: searchDate.value[0] ? new Date(searchDate.value[0]) : undefined,
- endDate: searchDate.value[1] ? new Date(searchDate.value[1]) : undefined,
- });
-}
-
watch(
() => formService.value.attributes.workflowId,
async (a, b) => {
@@ -2035,34 +1948,19 @@ watch(
-
-
-
-
- {{ $t('general.status') }}
-
-
+
+
+
-
+
@@ -2217,43 +2115,26 @@ watch(
-
-
-
-
- {{ $t('general.status') }}
-
-
+
+
+
-
+
+
+
+
- {{
- props.row.detail.replace(/<\/?[^>]+(>|$)/g, '') ||
- '-'
- }}
+ {{ props.row.detail || '-' }}
@@ -2747,72 +2618,26 @@ watch(
-
-
-
-
- {{ $t('general.status') }}
-
-
+
+
+
-
+
-
-
- {
- importProduct(
- currentIdGroup,
- file,
- async () => await fetchListOfProduct(),
- );
- }
- "
- />
-
-
-
+
+
{
- copy(props.row.id);
- }
- "
@view="
async () => {
if (props.row.type === 'product') {
@@ -3455,15 +3275,7 @@ watch(
{{ $t('general.recordPerPage') }}
@@ -3595,7 +3407,7 @@ watch(
-
@@ -4730,7 +4535,7 @@ watch(
? workNameRef.isWorkNameEdit()
: false;
if (isWorkNameEdit) {
- triggerConfirmCloseWorkName();
+ triggerConfirmCloseWork();
return true;
}
return false;
@@ -4742,16 +4547,15 @@ watch(
ref="workNameRef"
v-model:name-list="workNameItems"
@delete="confirmDeleteWork"
- @edit="submitWorkName"
- @add="addWorkName"
+ @edit="editWork"
+ @add="createWork"
/>
-
+
-
-
-
-
- {{ $t('general.status') }}
-
-
+
+
+
-
+
undo()"
@close="() => resetForm()"
@submit="() => submit()"
- :hide-action="!canAccess('workflow', 'edit')"
:readonly="!pageState.isDrawerEdit"
:isEdit="pageState.isDrawerEdit"
v-model="pageState.addModal"
diff --git a/src/pages/04_property-managment/PropertyDialog.vue b/src/pages/04_property-managment/PropertyDialog.vue
index 66161d57..333f0ec7 100644
--- a/src/pages/04_property-managment/PropertyDialog.vue
+++ b/src/pages/04_property-managment/PropertyDialog.vue
@@ -30,7 +30,6 @@ withDefaults(
defineProps<{
readonly?: boolean;
isEdit?: boolean;
- hideAction?: boolean;
}>(),
{ readonly: false, isEdit: false },
);
@@ -152,7 +151,7 @@ defineEmits<{
style="position: absolute; z-index: 999; top: 0; right: 0"
>
-import { onMounted, onUnmounted, reactive, ref, watch, computed } from 'vue';
+import { onMounted, reactive, ref, watch, computed } from 'vue';
import { storeToRefs } from 'pinia';
import { useQuasar } from 'quasar';
-import { useI18n } from 'vue-i18n';
// NOTE: Import stores
-import useCustomerStore from 'stores/customer';
import { useQuotationStore } from 'src/stores/quotations';
-import { dialog, isRoleInclude, notify, setPrefixName } from 'stores/utils';
+import { isRoleInclude } from 'stores/utils';
import { useNavigator } from 'src/stores/navigator';
import useFlowStore from 'src/stores/flow';
import useMyBranch from 'stores/my-branch';
import { useQuotationForm } from './form';
import { hslaColors } from './constants';
import { pageTabs, columnQuotation } from './constants';
-import { toCamelCase, canAccess } from 'stores/utils';
-import { getUserId } from 'src/services/keycloak';
+import { toCamelCase } from 'stores/utils';
// NOTE Import Types
import { CustomerBranchCreate, CustomerType } from 'stores/customer/types';
@@ -41,44 +38,26 @@ import { AddressForm } from 'components/form';
import {
EmployerFormBusiness,
EmployerFormAbout,
- EmployerFormBasicInfo,
- EmployerFormBranch,
} from 'src/pages/03_customer-management/components';
import { useCustomerForm } from 'src/pages/03_customer-management/form';
import { Quotation } from 'src/stores/quotations/types';
import TableQuotation from 'src/components/05_quotation/TableQuotation.vue';
import PaginationPageSize from 'src/components/PaginationPageSize.vue';
-import { DialogContainer, DialogHeader } from 'src/components/dialog';
-import AdvanceSearch from 'src/components/shared/AdvanceSearch.vue';
-const { t, locale } = useI18n();
const $q = useQuasar();
const quotationFormStore = useQuotationForm();
const customerFormStore = useCustomerForm();
const flowStore = useFlowStore();
const userBranch = useMyBranch();
const navigatorStore = useNavigator();
-const customerStore = useCustomerStore();
-const {
- fetchListOfOptionBranch,
- customerFormUndo,
- deleteCustomerById,
- validateTabField,
- deleteCustomerBranchById,
-} = customerFormStore;
const {
currentFormData: quotationFormData,
currentFormState: quotationFormState,
} = storeToRefs(quotationFormStore);
-const {
- state: customerFormState,
- currentFormData: customerFormData,
- currentBranchRootId,
- registerAbleBranchOption,
- tabFieldRequired,
-} = storeToRefs(customerFormStore);
+const { state: customerFormState, currentFormData: customerFormData } =
+ storeToRefs(customerFormStore);
const { currentMyBranch } = storeToRefs(userBranch);
const fieldSelectedOption = computed(() => {
@@ -89,8 +68,6 @@ const fieldSelectedOption = computed(() => {
value: v.name,
}));
});
-
-const keyAddDialog = ref(0);
const special = ref(false);
const branchId = ref('');
const agentPrice = ref(false);
@@ -107,14 +84,12 @@ const pageState = reactive({
fieldSelected: [''],
gridView: false,
total: 0,
- sellerId: '',
currentTab: 'Issued',
addModal: false,
quotationModal: false,
employeeModal: false,
receiptModal: false,
- searchDate: [],
});
pageState.fieldSelected = [...columnQuotation.map((v) => v.name)];
@@ -195,7 +170,8 @@ async function submitCustomer() {
customerFormData.value.registeredBranchId = isRoleInclude(['system'])
? branchId.value
: currentMyBranch.value.id;
- await customerFormStore.addCurrentCustomerBranch();
+ await customerFormStore.submitFormCustomer();
+
customerFormState.value.dialogModal = false;
// customerFormState.value.dialogType = 'info';
}
@@ -265,20 +241,6 @@ const {
stats: quotationStats,
} = storeToRefs(quotationStore);
-const customerNameInfo = computed(() => {
- if (customerFormData.value.customerBranch === undefined) return;
-
- const name =
- locale.value === 'eng'
- ? `${customerFormData.value.customerBranch[0]?.firstNameEN} ${customerFormData.value.customerBranch[0]?.lastNameEN}`
- : `${customerFormData.value.customerBranch[0]?.firstName} ${customerFormData.value.customerBranch[0]?.lastName}`;
- return name || '-';
-});
-
-function handleWindowFocus() {
- fetchQuotationList();
-}
-
onMounted(async () => {
pageState.gridView = $q.screen.lt.md ? true : false;
navigatorStore.current.title = 'quotation.title';
@@ -305,7 +267,6 @@ onMounted(async () => {
pageSize: quotationPageSize.value,
status: 'Issued',
urgentFirst: true,
- sellerId: pageState.sellerId || undefined,
});
if (ret) {
@@ -316,12 +277,6 @@ onMounted(async () => {
}
flowStore.rotate();
-
- window.addEventListener('focus', handleWindowFocus);
-});
-
-onUnmounted(() => {
- window.removeEventListener('focus', handleWindowFocus);
});
async function fetchQuotationList(mobileFetch?: boolean) {
@@ -344,9 +299,6 @@ async function fetchQuotationList(mobileFetch?: boolean) {
: 'Issued',
query: pageState.inputSearch,
urgentFirst: true,
- startDate: pageState.searchDate[0],
- endDate: pageState.searchDate[1],
- sellerId: pageState.sellerId || undefined,
});
if (ret) {
@@ -370,12 +322,7 @@ async function fetchQuotationList(mobileFetch?: boolean) {
}
watch(
- [
- () => pageState.currentTab,
- () => pageState.inputSearch,
- () => pageState.searchDate,
- quotationPageSize,
- ],
+ [() => pageState.currentTab, () => pageState.inputSearch, quotationPageSize],
() => {
quotationPage.value = 1;
quotationData.value = [];
@@ -422,11 +369,6 @@ async function storeDataLocal(id: string) {
window.open(url, '_blank');
}
-
-async function filterBySellerId() {
- pageState.sellerId = pageState.sellerId ? '' : getUserId();
- await fetchQuotationList();
-}
@@ -434,7 +376,6 @@ async function filterBySellerId() {
hide-icon
style="z-index: 999"
@click.stop="triggerAddQuotationDialog"
- v-if="canAccess('quotation', 'create')"
/>
@@ -548,21 +489,6 @@ async function filterBySellerId() {
-
-
-
-
-
-
- {{ $t('quotation.ownOnly') }}
-
-
-
-
@@ -680,20 +606,12 @@ async function filterBySellerId() {
class="col surface-2 flex items-center justify-center"
>
storeDataLocal(id)"
@view="
@@ -750,8 +666,7 @@ async function filterBySellerId() {
@@ -1003,50 +911,30 @@ async function filterBySellerId() {
- {
customerFormState.dialogModal = false;
- onCreateImageList = { selectedImage: '', list: [] };
- keyAddDialog++;
+ customerFormStore.resetForm(true);
+ setDefaultCustomer();
}
"
>
-
-
-
-
- :
- {{
- customerFormData.customerType === 'CORP'
- ? $t('customer.employerLegalEntity')
- : $t('customer.employerNaturalPerson')
- }}
-
-
-
-
-
{
@@ -1102,294 +981,143 @@ async function filterBySellerId() {
/>
-
+
{
- combineWorker(v.newWorker, v.worker);
+ selectedWorker = v.worker;
}
"
/>
@@ -2517,7 +2434,7 @@ function covertToNode() {
{
@@ -275,7 +275,6 @@ watch(
{{
formatNumberDecimal(
- summaryPrice.totalPrice -
- summaryPrice.totalDiscount -
- summaryPrice.vatExcluded,
+ summaryPrice.totalPrice - summaryPrice.totalDiscount,
2,
)
}}
@@ -488,11 +482,7 @@ watch(
{{ $t('quotation.totalPriceBaht') }}
-
+
{{
payType === 'SplitCustom' && view === View.Invoice
? formatNumberDecimal(Math.max(installmentAmount || 0, 0), 2) || 0
diff --git a/src/pages/05_quotation/QuotationFormMetadata.vue b/src/pages/05_quotation/QuotationFormMetadata.vue
index 161b0420..071bc84b 100644
--- a/src/pages/05_quotation/QuotationFormMetadata.vue
+++ b/src/pages/05_quotation/QuotationFormMetadata.vue
@@ -1,6 +1,5 @@
@@ -97,11 +95,5 @@ const sellerId = defineModel('sellerId', { required: true });
dense
outlined
/>
-
diff --git a/src/pages/05_quotation/QuotationFormProductSelect.vue b/src/pages/05_quotation/QuotationFormProductSelect.vue
index b2e92761..eb6ffef8 100644
--- a/src/pages/05_quotation/QuotationFormProductSelect.vue
+++ b/src/pages/05_quotation/QuotationFormProductSelect.vue
@@ -51,8 +51,6 @@ const emit = defineEmits<{
const selectedProductGroup = defineModel('selectedProductGroup', {
default: '',
});
-
-const selectedProductGroupOption = ref();
const model = defineModel();
const inputSearch = defineModel('inputSearch');
const productGroup = defineModel('productGroup', {
@@ -68,21 +66,21 @@ const serviceList = defineModel>>(
);
const priceDisplay = computed(() => ({
- // price: !isRoleInclude(['sale_agent']),
- price: true,
+ price: !isRoleInclude(['sale_agent']),
agentPrice: isRoleInclude([
- 'system',
- 'head_of_admin',
'admin',
- 'executive',
- 'accountant',
+ 'head_of_admin',
'head_of_sale',
+ 'system',
+ 'owner',
+ 'accountant',
+ 'sale_agent',
]),
serviceCharge: isRoleInclude([
- 'system',
- 'head_of_admin',
'admin',
- 'executive',
+ 'head_of_admin',
+ 'system',
+ 'owner',
'accountant',
]),
}));
@@ -571,18 +569,14 @@ watch(
{{
productGroup.find(
(g) => g.id === selectedProductGroup,
- )?.name ||
- selectedProductGroupOption?.name ||
- '-'
+ )?.name || '-'
}}
{{
productGroup.find(
(g) => g.id === selectedProductGroup,
- )?.code ||
- selectedProductGroupOption?.code ||
- '-'
+ )?.code || '-'
}}
@@ -868,13 +862,13 @@ watch(
{{ $t('productService.group.title') }}
+
import { useI18n } from 'vue-i18n';
-import { reactive, ref, watch, onMounted } from 'vue';
-import { baseUrl, notify, setPrefixName } from 'src/stores/utils';
+import { reactive, ref, watch } from 'vue';
// NOTE: Import stores
import { dialog } from 'stores/utils';
@@ -9,7 +8,7 @@ import useOptionStore from 'src/stores/options';
import useEmployeeStore from 'src/stores/employee';
import { useEmployeeForm } from 'src/pages/03_customer-management/form';
import { waitAll } from 'src/stores/utils';
-import { calculateAge, dateFormat, dateFormatJS } from 'src/utils/datetime';
+import { calculateAge, dateFormatJS } from 'src/utils/datetime';
import { dialogCheckData } from 'stores/utils';
import { useQuotationForm } from 'pages/05_quotation/form';
@@ -21,7 +20,6 @@ import useOcrStore from 'stores/ocr';
// NOTE: Import Components
import {
- AddButton,
SaveButton,
EditButton,
UndoButton,
@@ -50,13 +48,6 @@ import {
import { storeToRefs } from 'pinia';
import ToggleView from 'src/components/shared/ToggleView.vue';
import TableWorker from 'src/components/shared/table/TableWorker.vue';
-import { SideMenu } from 'src/components';
-import BasicInformation from 'components/03_customer-management/employee/BasicInformation.vue';
-import { AddressForm } from 'src/components/form';
-import ExpirationDate from 'src/components/03_customer-management/ExpirationDate.vue';
-import FormEmployeeHealthCheck from 'src/components/03_customer-management/FormEmployeeHealthCheck.vue';
-import FormEmployeeWorkHistory from 'src/components/03_customer-management/FormEmployeeWorkHistory.vue';
-import FormEmployeeOther from 'src/components/03_customer-management/FormEmployeeOther.vue';
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL;
@@ -66,20 +57,10 @@ const quotationForm = useQuotationForm();
const { locale } = useI18n();
const ocrStore = useOcrStore();
-const test = false;
-
const viewMode = ref(false);
-const { employeeFormUndo, employeeConfirmUnsave, deleteEmployeeById } =
- employeeFormStore;
-
-const {
- state: employeeFormState,
- currentFromDataEmployee,
- onCreateImageList,
- statusEmployeeCreate,
- refreshImageState,
-} = storeToRefs(employeeFormStore);
+const { state: employeeFormState, currentFromDataEmployee } =
+ storeToRefs(employeeFormStore);
const mrz = ref>>();
@@ -113,7 +94,7 @@ const props = withDefaults(
defineProps<{
customerBranchId?: string;
disabledWorkerId?: string[];
- preselectWorker?: (Employee & { workerNew: boolean })[];
+ preselectWorker?: Employee[];
}>(),
{},
);
@@ -133,7 +114,7 @@ const optionStore = useOptionStore();
const employeeStore = useEmployeeStore();
const open = defineModel('open', { default: false });
-const newWorkerList = ref<
+const newWorkerList = defineModel<
(EmployeeWorker & {
attachment?: {
name?: string;
@@ -143,7 +124,7 @@ const newWorkerList = ref<
_meta?: Record;
}[];
})[]
->([]);
+>('newWorkerList', { default: [] });
const workerSelected = ref([]);
const workerList = ref([]);
const importWorkerCriteria = ref<{
@@ -160,22 +141,49 @@ const state = reactive({
search: '',
});
-async function removeNewWorker(index: number) {
- deleteEmployeeById({
- id: newWorkerList.value[index].id,
- removeArray: () => newWorkerList.value.splice(index, 1),
+function removeNewWorker(index: number) {
+ dialog({
+ color: 'negative',
+ icon: 'mdi-trash-can-outline',
+ title: t('dialog.title.confirmDelete'),
+ actionText: t('general.delete'),
+ persistent: true,
+ message: t('dialog.message.confirmDelete'),
+ action: async () => {
+ newWorkerList.value.splice(index, 1);
+ },
+ cancel: () => {},
});
}
function triggerCreateEmployee() {
employeeFormStore.resetFormDataEmployee(true);
- setCurrentBranchId();
- //setDefaultFormEmployee();
+ setDefaultFormEmployee();
employeeFormState.value.dialogType = 'create';
employeeFormState.value.dialogModal = true;
employeeFormState.value.isEmployeeEdit = true;
}
+function setDefaultFormEmployee() {
+ formDataEmployee.value = {
+ passportNo: '',
+ documentExpireDate: new Date(),
+ lastNameEN: '',
+ lastName: '',
+ middleNameEN: '',
+ middleName: '',
+ firstNameEN: '',
+ firstName: '',
+ namePrefix: '',
+ nationality: '',
+ gender: '',
+ dateOfBirth: null,
+ attachment: [],
+ };
+
+ employeeFormState.value.dialogModal = false;
+}
+
function clean() {
workerList.value = [];
workerSelected.value = [];
@@ -208,13 +216,7 @@ function getEmployeeImageUrl(item: Employee) {
function init() {
if (props.preselectWorker) {
- workerSelected.value = JSON.parse(
- JSON.stringify(props.preselectWorker.filter((v) => !v.workerNew)),
- );
-
- newWorkerList.value = JSON.parse(
- JSON.stringify(props.preselectWorker.filter((v) => v.workerNew)),
- );
+ workerSelected.value = JSON.parse(JSON.stringify(props.preselectWorker));
}
getWorkerList();
}
@@ -302,46 +304,6 @@ watch(
}
},
);
-
-function setCurrentBranchId() {
- employeeFormState.value.currentBranchId = props.customerBranchId;
-}
-
-watch(
- () => employeeFormState.value.currentCustomerBranch,
- (e) => {
- if (!e) return;
- if (employeeFormState.value.formDataEmployeeSameAddr) {
- currentFromDataEmployee.value.address = e.address;
- currentFromDataEmployee.value.addressEN = e.addressEN;
- currentFromDataEmployee.value.provinceId = e.provinceId;
- currentFromDataEmployee.value.districtId = e.districtId;
- currentFromDataEmployee.value.subDistrictId = e.subDistrictId;
- }
- currentFromDataEmployee.value.customerBranchId = e.id;
- },
-);
-
-watch(
- () => employeeFormState.value.formDataEmployeeSameAddr,
- (isSame) => {
- if (!employeeFormState.value.currentCustomerBranch) return;
- if (isSame) {
- currentFromDataEmployee.value.address =
- employeeFormState.value.currentCustomerBranch.address;
- currentFromDataEmployee.value.addressEN =
- employeeFormState.value.currentCustomerBranch.addressEN;
- currentFromDataEmployee.value.provinceId =
- employeeFormState.value.currentCustomerBranch.provinceId;
- currentFromDataEmployee.value.districtId =
- employeeFormState.value.currentCustomerBranch.districtId;
- currentFromDataEmployee.value.subDistrictId =
- employeeFormState.value.currentCustomerBranch.subDistrictId;
- }
- currentFromDataEmployee.value.customerBranchId =
- employeeFormState.value.currentCustomerBranch.id;
- },
-);
@@ -482,7 +444,10 @@ watch(
class="full-width"
:prefix-id="'employee-' + index"
:data="{
- name: ` ${emp.firstName ? `${emp.firstName} ${emp.lastName}` : `${emp.firstNameEN} ${emp.lastNameEN}`}`,
+ name:
+ locale === Lang.English
+ ? `${emp.firstNameEN} ${emp.lastNameEN}`
+ : `${emp.firstName} ${emp.lastName}`,
female: emp.gender === 'female',
male: emp.gender === 'male',
img: `/images/employee-avatar-${emp.gender}.png`,
@@ -543,13 +508,7 @@ watch(
@@ -614,14 +573,11 @@ watch(
solid
id="btn-success"
@click="
- () => {
- $emit('success', {
- worker: workerSelected,
- newWorker: newWorkerList,
- });
-
- open = false;
- }
+ emits('success', {
+ worker: workerSelected,
+ newWorker: newWorkerList,
+ }),
+ (open = false)
"
>
{{ $t('general.select', { msg: $t('quotation.employeeList') }) }}
@@ -633,62 +589,20 @@ watch(
{
- employeeFormStore.resetFormDataEmployee(true);
- setCurrentBranchId();
- }
- "
- :before-close="
- () => {
- if (employeeFormStore.isFormDataDifferent()) {
- employeeConfirmUnsave();
- return true;
- }
- employeeFormState.currentTab = 'personalInfo';
- return false;
+ employeeFormState.dialogModal = false;
}
"
>
@@ -699,9 +613,9 @@ watch(
}"
>
{
employeeFormState.imageDialog = true;
@@ -785,1217 +651,369 @@ watch(
"
/>
-
@@ -2010,8 +1028,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);
}
@@ -2028,9 +1046,9 @@ watch(
}
:deep(
- .q-item.q-item-type.row.no-wrap.q-item--dense.q-item--clickable.q-link.cursor-pointer.q-focusable.q-hoverable.surface-1
- .q-focus-helper
-) {
+ .q-item.q-item-type.row.no-wrap.q-item--dense.q-item--clickable.q-link.cursor-pointer.q-focusable.q-hoverable.surface-1
+ .q-focus-helper
+ ) {
visibility: hidden;
}
diff --git a/src/pages/05_quotation/form.ts b/src/pages/05_quotation/form.ts
index 5b16785a..969144ad 100644
--- a/src/pages/05_quotation/form.ts
+++ b/src/pages/05_quotation/form.ts
@@ -8,7 +8,6 @@ import {
QuotationPayload,
QuotationFull,
EmployeeWorker,
- PayCondition,
} from 'src/stores/quotations/types';
import { Employee } from 'src/stores/employee/types';
@@ -30,7 +29,7 @@ export const DEFAULT_DATA: QuotationPayload = {
payBillDate: new Date(),
paySplit: [],
paySplitCount: 0,
- payCondition: PayCondition.Full,
+ payCondition: 'Full',
dueDate: new Date(Date.now() + 86400000),
discount: 0,
contactTel: '',
@@ -41,7 +40,6 @@ export const DEFAULT_DATA: QuotationPayload = {
status: 'CREATED',
remark: '#[quotation-labor]
#[quotation-payment]',
agentPrice: false,
- sellerId: '',
};
const DEFAULT_DATA_INVOICE: InvoicePayload = {
@@ -69,7 +67,6 @@ export const useQuotationForm = defineStore('form-quotation', () => {
file?: File;
_meta?: Record
;
}[];
- workerNew: boolean;
})[]
>([]);
@@ -221,10 +218,9 @@ export const useQuotationForm = defineStore('form-quotation', () => {
},
callback?: () => void,
) {
- const temp = {
+ newWorkerList.value.push({
//passportNo: obj.data.passportNo,
//documentExpireDate: obj.data.documentExpireDate,
- id: obj.data.id,
lastNameEN: obj.data.lastNameEN,
lastName: obj.data.lastName,
middleNameEN: obj.data.middleNameEN,
@@ -236,12 +232,9 @@ export const useQuotationForm = defineStore('form-quotation', () => {
gender: obj.data.gender,
dateOfBirth: obj.data.dateOfBirth,
attachment: obj.data.attachment,
- workerNew: true,
- };
+ });
callback?.();
-
- return temp;
}
function dialogDelete(callback: () => void) {
diff --git a/src/pages/05_quotation/preview/ViewForm.vue b/src/pages/05_quotation/preview/ViewForm.vue
index 3a7fd081..0a12408f 100644
--- a/src/pages/05_quotation/preview/ViewForm.vue
+++ b/src/pages/05_quotation/preview/ViewForm.vue
@@ -1,6 +1,6 @@
-
-
-
-
- {{ $t('general.status') }}
-
-
+
+
+
-
+
@@ -1046,18 +917,12 @@ watch(
}
"
@change-status="triggerChangeStatus"
- @delete-attachment="deleteAttachment"
:readonly="!pageState.isDrawerEdit"
:isEdit="pageState.isDrawerEdit"
- :hide-action="!canAccess('agencies', 'edit')"
v-model="pageState.addModal"
v-model:drawer-model="pageState.viewDrawer"
v-model:data="formData"
- v-model:form-bank-book="formData.bank"
- v-model:image-list-on-create="imageListOnCreate"
- v-model:deletes-status-qr-code-bank-imag="deletesStatusQrCodeBankImag"
- v-model:attachment="attachment"
- :attachment-list="attachmentList"
+ v-model:on-create-image-list="onCreateImageList"
/>
diff --git a/src/pages/08_request-list/MessengerExpansion.vue b/src/pages/08_request-list/MessengerExpansion.vue
index 456aefe4..24434d89 100644
--- a/src/pages/08_request-list/MessengerExpansion.vue
+++ b/src/pages/08_request-list/MessengerExpansion.vue
@@ -13,8 +13,6 @@ const props = defineProps<{
readonly?: boolean;
step: Step;
responsibleAreaDistrictId?: string;
- defaultMessenger?: string;
- prefix?: string;
}>();
const emit = defineEmits<{
@@ -58,7 +56,6 @@ const formData = ref(defaultForm);
function triggerUndo() {
assignToForm();
state.isEdit = false;
- refForm.value?.resetValidation();
}
async function triggerSubmit() {
@@ -87,13 +84,8 @@ function assignToForm() {
customerDutyCost: attributesForm.value.customerDutyCost ?? 30,
companyDuty: attributesForm.value.companyDuty ?? false,
companyDutyCost: attributesForm.value.companyDutyCost ?? 30,
- responsibleUserLocal: attributesForm.value.responsibleUserLocal
- ? attributesForm.value.responsibleUserLocal
- : props.responsibleAreaDistrictId
- ? false
- : true,
- responsibleUserId:
- attributesForm.value.responsibleUserId || props.defaultMessenger,
+ responsibleUserLocal: attributesForm.value.responsibleUserLocal ?? true,
+ responsibleUserId: attributesForm.value.responsibleUserId ?? '',
individualDuty: attributesForm.value.individualDuty ?? false,
individualDutyCost: attributesForm.value.individualDutyCost ?? 10,
}),
@@ -117,21 +109,21 @@ function assignToForm() {