diff --git a/package-lock.json b/package-lock.json index 1315e92..6e1802a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,22 +8,28 @@ "name": "notsoweb.frontend", "version": "0.9.12", "dependencies": { + "@popperjs/core": "^2.11.8", "@tailwindcss/postcss": "^4.0.9", "@tailwindcss/vite": "^4.0.9", "@vitejs/plugin-vue": "^5.2.1", + "@vuepic/vue-datepicker": "^11.0.2", + "apexcharts": "^5.3.5", "axios": "^1.8.1", "laravel-echo": "^2.0.2", "luxon": "^3.5.0", + "pdf-lib": "^1.17.1", "pinia": "^3.0.1", "pusher-js": "^8.4.0", "tailwindcss": "^4.0", "toastr": "^2.1.4", "uuid": "^11.1.0", + "v-calendar": "^3.1.2", "vite": "^6.2.0", "vue": "^3.5.13", "vue-i18n": "^11.1.1", "vue-multiselect": "^3.2.0", "vue-router": "^4.5.0", + "vue3-apexcharts": "^1.8.0", "ziggy-js": "^2.5.2" }, "devDependencies": { @@ -89,6 +95,15 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/types": { "version": "7.28.1", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz", @@ -658,6 +673,34 @@ "node": ">= 8" } }, + "node_modules/@pdf-lib/standard-fonts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@pdf-lib/standard-fonts/-/standard-fonts-1.0.0.tgz", + "integrity": "sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==", + "license": "MIT", + "dependencies": { + "pako": "^1.0.6" + } + }, + "node_modules/@pdf-lib/upng": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@pdf-lib/upng/-/upng-1.0.1.tgz", + "integrity": "sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==", + "license": "MIT", + "dependencies": { + "pako": "^1.0.10" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@rollup/pluginutils": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", @@ -952,6 +995,62 @@ "license": "MIT", "peer": true }, + "node_modules/@svgdotjs/svg.draggable.js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz", + "integrity": "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==", + "license": "MIT", + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4" + } + }, + "node_modules/@svgdotjs/svg.filter.js": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz", + "integrity": "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw==", + "license": "MIT", + "dependencies": { + "@svgdotjs/svg.js": "^3.2.4" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@svgdotjs/svg.js": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.5.tgz", + "integrity": "sha512-/VNHWYhNu+BS7ktbYoVGrCmsXDh+chFMaONMwGNdIBcFHrWqk2jY8fNyr3DLdtQUIalvkPfM554ZSFa3dm3nxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Fuzzyma" + } + }, + "node_modules/@svgdotjs/svg.resize.js": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz", + "integrity": "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==", + "license": "MIT", + "engines": { + "node": ">= 14.18" + }, + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4", + "@svgdotjs/svg.select.js": "^4.0.1" + } + }, + "node_modules/@svgdotjs/svg.select.js": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.3.tgz", + "integrity": "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg==", + "license": "MIT", + "engines": { + "node": ">= 14.18" + }, + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4" + } + }, "node_modules/@tailwindcss/node": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz", @@ -1233,12 +1332,24 @@ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "license": "MIT" }, + "node_modules/@types/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", + "license": "MIT" + }, "node_modules/@types/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", "license": "MIT" }, + "node_modules/@types/resize-observer-browser": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.11.tgz", + "integrity": "sha512-cNw5iH8JkMkb3QkCoe7DaZiawbDQEUX8t7iuQaRTyLOyQCR2h+ibBD4GJt7p5yhUHrlOeL7ZtbxNHeipqNsBzQ==", + "license": "MIT" + }, "node_modules/@vitejs/plugin-vue": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", @@ -1397,6 +1508,37 @@ "integrity": "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==", "license": "MIT" }, + "node_modules/@vuepic/vue-datepicker": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@vuepic/vue-datepicker/-/vue-datepicker-11.0.2.tgz", + "integrity": "sha512-uHh78mVBXCEjam1uVfTzZ/HkyDwut/H6b2djSN9YTF+l/EA+XONfdCnOVSi1g+qVGSy65DcQAwyBNidAssnudQ==", + "license": "MIT", + "dependencies": { + "date-fns": "^4.1.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "vue": ">=3.3.0" + } + }, + "node_modules/@vuepic/vue-datepicker/node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/@yr/monotone-cubic-spline": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", + "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==", + "license": "MIT" + }, "node_modules/acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", @@ -1426,6 +1568,20 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/apexcharts": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-5.3.5.tgz", + "integrity": "sha512-I04DY/WBZbJgJD2uixeV5EzyiL+J5LgKQXEu8rctqAwyRmKv44aDVeofJoLdTJe3ao4r2KEQfCgtVzXn6pqirg==", + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "@svgdotjs/svg.draggable.js": "^3.0.4", + "@svgdotjs/svg.filter.js": "^3.0.8", + "@svgdotjs/svg.js": "^3.2.4", + "@svgdotjs/svg.resize.js": "^2.0.2", + "@svgdotjs/svg.select.js": "^4.0.1", + "@yr/monotone-cubic-spline": "^1.0.3" + } + }, "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", @@ -1783,6 +1939,31 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/date-fns-tz": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-2.0.1.tgz", + "integrity": "sha512-fJCG3Pwx8HUoLhkepdsP7Z5RsucUi+ZBOxyM5d0ZZ6c4SdYustq0VMmOu6Wf7bli+yS/Jwp91TOCqn9jMcVrUA==", + "license": "MIT", + "peerDependencies": { + "date-fns": "2.x" + } + }, "node_modules/debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", @@ -2761,6 +2942,12 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -2988,6 +3175,12 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -3017,6 +3210,24 @@ "dev": true, "license": "MIT" }, + "node_modules/pdf-lib": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/pdf-lib/-/pdf-lib-1.17.1.tgz", + "integrity": "sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==", + "license": "MIT", + "dependencies": { + "@pdf-lib/standard-fonts": "^1.0.0", + "@pdf-lib/upng": "^1.0.1", + "pako": "^1.0.11", + "tslib": "^1.11.1" + } + }, + "node_modules/pdf-lib/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, "node_modules/perfect-debounce": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", @@ -3491,6 +3702,24 @@ "uuid": "dist/esm/bin/uuid" } }, + "node_modules/v-calendar": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/v-calendar/-/v-calendar-3.1.2.tgz", + "integrity": "sha512-QDWrnp4PWCpzUblctgo4T558PrHgHzDtQnTeUNzKxfNf29FkCeFpwGd9bKjAqktaa2aJLcyRl45T5ln1ku34kg==", + "license": "MIT", + "dependencies": { + "@types/lodash": "^4.14.165", + "@types/resize-observer-browser": "^0.1.7", + "date-fns": "^2.16.1", + "date-fns-tz": "^2.0.0", + "lodash": "^4.17.20", + "vue-screen-utils": "^1.0.0-beta.13" + }, + "peerDependencies": { + "@popperjs/core": "^2.0.0", + "vue": "^3.2.0" + } + }, "node_modules/vite": { "version": "6.3.5", "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", @@ -3667,6 +3896,25 @@ "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", "license": "MIT" }, + "node_modules/vue-screen-utils": { + "version": "1.0.0-beta.13", + "resolved": "https://registry.npmjs.org/vue-screen-utils/-/vue-screen-utils-1.0.0-beta.13.tgz", + "integrity": "sha512-EJ/8TANKhFj+LefDuOvZykwMr3rrLFPLNb++lNBqPOpVigT2ActRg6icH9RFQVm4nHwlHIHSGm5OY/Clar9yIg==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue3-apexcharts": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/vue3-apexcharts/-/vue3-apexcharts-1.8.0.tgz", + "integrity": "sha512-5tSD4mXTBbIJ9ir+58qHE6oNtIe0RNgqIRYMKpcsIaxkKtwUww4JhvPkpUFlmiW4OJbbdklgjleXq1lfcM4gdA==", + "license": "MIT", + "peerDependencies": { + "apexcharts": ">=4.0.0", + "vue": ">=3.0.0" + } + }, "node_modules/ws": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", diff --git a/package.json b/package.json index 0c368ee..cc69e1c 100644 --- a/package.json +++ b/package.json @@ -10,22 +10,28 @@ "preview": "vite preview" }, "dependencies": { + "@popperjs/core": "^2.11.8", "@tailwindcss/postcss": "^4.0.9", "@tailwindcss/vite": "^4.0.9", "@vitejs/plugin-vue": "^5.2.1", + "@vuepic/vue-datepicker": "^11.0.2", + "apexcharts": "^5.3.5", "axios": "^1.8.1", "laravel-echo": "^2.0.2", "luxon": "^3.5.0", + "pdf-lib": "^1.17.1", "pinia": "^3.0.1", "pusher-js": "^8.4.0", "tailwindcss": "^4.0", "toastr": "^2.1.4", "uuid": "^11.1.0", + "v-calendar": "^3.1.2", "vite": "^6.2.0", "vue": "^3.5.13", "vue-i18n": "^11.1.1", "vue-multiselect": "^3.2.0", "vue-router": "^4.5.0", + "vue3-apexcharts": "^1.8.0", "ziggy-js": "^2.5.2" }, "devDependencies": { diff --git a/src/components/Holos/Button/ButtonRh.vue b/src/components/Holos/Button/ButtonRh.vue new file mode 100644 index 0000000..fb5879b --- /dev/null +++ b/src/components/Holos/Button/ButtonRh.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/Holos/Calendar.vue b/src/components/Holos/Calendar.vue new file mode 100644 index 0000000..96db6d4 --- /dev/null +++ b/src/components/Holos/Calendar.vue @@ -0,0 +1,191 @@ + + + + + \ No newline at end of file diff --git a/src/components/Holos/Canvas.vue b/src/components/Holos/Canvas.vue new file mode 100644 index 0000000..e675454 --- /dev/null +++ b/src/components/Holos/Canvas.vue @@ -0,0 +1,606 @@ + + + diff --git a/src/pages/Dashboard/Admin.vue b/src/pages/Dashboard/Admin.vue new file mode 100644 index 0000000..8985870 --- /dev/null +++ b/src/pages/Dashboard/Admin.vue @@ -0,0 +1,274 @@ + + + diff --git a/src/pages/Dashboard/Coordinator.vue b/src/pages/Dashboard/Coordinator.vue new file mode 100644 index 0000000..d13379b --- /dev/null +++ b/src/pages/Dashboard/Coordinator.vue @@ -0,0 +1,341 @@ + + + diff --git a/src/pages/Dashboard/Employee.vue b/src/pages/Dashboard/Employee.vue new file mode 100644 index 0000000..f001a50 --- /dev/null +++ b/src/pages/Dashboard/Employee.vue @@ -0,0 +1,247 @@ + + + + diff --git a/src/pages/Dashboard/Index.vue b/src/pages/Dashboard/Index.vue index 1b0dd60..6dfd144 100644 --- a/src/pages/Dashboard/Index.vue +++ b/src/pages/Dashboard/Index.vue @@ -1,9 +1,119 @@ \ No newline at end of file diff --git a/src/pages/Dashboard/Module.js b/src/pages/Dashboard/Module.js new file mode 100644 index 0000000..cd617bf --- /dev/null +++ b/src/pages/Dashboard/Module.js @@ -0,0 +1,16 @@ +import { lang } from '@Lang/i18n'; + +// Ruta API +const apiTo = (name, params = {}) => route(`dashboard.${name}`, params) + +// Ruta visual +const viewTo = ({ name = '', params = {}, query = {} }) => view({ name: `dashboard.${name}`, params, query }) + +// Obtener traducción del componente +const transl = (str) => lang(`dashboard.${str}`) + +export { + viewTo, + apiTo, + transl +} \ No newline at end of file diff --git a/src/pages/Employees/Index.vue b/src/pages/Employees/Index.vue new file mode 100644 index 0000000..27327bb --- /dev/null +++ b/src/pages/Employees/Index.vue @@ -0,0 +1,160 @@ + + + \ No newline at end of file diff --git a/src/pages/Events/Assignamment.vue b/src/pages/Events/Assignamment.vue new file mode 100644 index 0000000..49d3b3c --- /dev/null +++ b/src/pages/Events/Assignamment.vue @@ -0,0 +1,183 @@ + + + diff --git a/src/pages/Events/Index.vue b/src/pages/Events/Index.vue new file mode 100644 index 0000000..52f0e44 --- /dev/null +++ b/src/pages/Events/Index.vue @@ -0,0 +1,284 @@ + + + diff --git a/src/pages/Events/Justification.vue b/src/pages/Events/Justification.vue new file mode 100644 index 0000000..c1128f8 --- /dev/null +++ b/src/pages/Events/Justification.vue @@ -0,0 +1,360 @@ + + + diff --git a/src/pages/Events/Reports.vue b/src/pages/Events/Reports.vue new file mode 100644 index 0000000..e9673cb --- /dev/null +++ b/src/pages/Events/Reports.vue @@ -0,0 +1,204 @@ + + + diff --git a/src/pages/Maquetador/Index.vue b/src/pages/Maquetador/Index.vue new file mode 100644 index 0000000..af51117 --- /dev/null +++ b/src/pages/Maquetador/Index.vue @@ -0,0 +1,662 @@ + + + \ No newline at end of file diff --git a/src/pages/Payroll/Index.vue b/src/pages/Payroll/Index.vue new file mode 100644 index 0000000..bbbc2b0 --- /dev/null +++ b/src/pages/Payroll/Index.vue @@ -0,0 +1,143 @@ + + + \ No newline at end of file diff --git a/src/pages/Security/Index.vue b/src/pages/Security/Index.vue new file mode 100644 index 0000000..b66675b --- /dev/null +++ b/src/pages/Security/Index.vue @@ -0,0 +1,164 @@ + + + \ No newline at end of file diff --git a/src/pages/Vacations/Admin/Create.vue b/src/pages/Vacations/Admin/Create.vue new file mode 100644 index 0000000..c1692d9 --- /dev/null +++ b/src/pages/Vacations/Admin/Create.vue @@ -0,0 +1,181 @@ + + + \ No newline at end of file diff --git a/src/pages/Vacations/Admin/Form.vue b/src/pages/Vacations/Admin/Form.vue new file mode 100644 index 0000000..4ac48cb --- /dev/null +++ b/src/pages/Vacations/Admin/Form.vue @@ -0,0 +1,236 @@ + + +