diff --git a/backend/routers/api.go b/backend/routers/api.go
index 52e0319..e9bdbb6 100644
--- a/backend/routers/api.go
+++ b/backend/routers/api.go
@@ -52,6 +52,7 @@ func ApiRoot(r *gin.RouterGroup) {
ApiStatic(r.Group("/static"))
ApiUser(r.Group("/users"))
+ ApiFiles(r.Group("/files"))
r.GET("/", func(ctx *gin.Context) {
ReturnJson(ctx, "apiOK", nil)
diff --git a/backend/routers/api_Files.go b/backend/routers/api_Files.go
new file mode 100644
index 0000000..8e98dfd
--- /dev/null
+++ b/backend/routers/api_Files.go
@@ -0,0 +1,18 @@
+package routers
+
+import (
+ "fmt"
+
+ "github.com/gin-gonic/gin"
+)
+
+func ApiFiles(r *gin.RouterGroup) {
+ r.POST("/upload", func(ctx *gin.Context) {
+ fmt.Print(ctx.FormFile("file"))
+ ReturnJson(ctx, "apiOK", nil)
+ })
+ r.GET("/upload", func(ctx *gin.Context) {
+ ReturnJson(ctx, "apiOK", nil)
+ })
+
+}
diff --git a/frontent/ops_vue_js/package-lock.json b/frontent/ops_vue_js/package-lock.json
index 0fdec13..23db58a 100644
--- a/frontent/ops_vue_js/package-lock.json
+++ b/frontent/ops_vue_js/package-lock.json
@@ -30,11 +30,21 @@
"axios": "^1.13.2",
"bootstrap": "^5.3.8",
"cropperjs": "^2.1.0",
+ "dropzone": "^6.0.0-beta.2",
+ "filepond": "^4.32.11",
+ "filepond-plugin-file-validate-type": "^1.2.9",
+ "filepond-plugin-image-crop": "^2.0.6",
+ "filepond-plugin-image-exif-orientation": "^1.0.11",
+ "filepond-plugin-image-preview": "^4.6.12",
+ "filepond-plugin-image-resize": "^2.0.10",
+ "flatpickr": "^4.6.13",
"litepicker": "^2.0.12",
"pinia": "^3.0.4",
"tom-select": "^2.4.3",
"vue": "^3.5.22",
"vue-cropper": "^0.6.5",
+ "vue-filepond": "^7.0.4",
+ "vue-flatpickr-component": "^12.0.0",
"vue-i18n": "^11.1.12",
"vue-router": "^4.6.3"
},
@@ -1883,6 +1893,12 @@
"win32"
]
},
+ "node_modules/@swc/helpers": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.2.14.tgz",
+ "integrity": "sha512-wpCQMhf5p5GhNg2MmGKXzUNwxe7zRiCsmqYsamez2beP7mKPCSiu+BjZcdN95yYSzO857kr0VfQewmGpS77nqA==",
+ "license": "MIT"
+ },
"node_modules/@tabler/core": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@tabler/core/-/core-1.4.0.tgz",
@@ -2520,6 +2536,16 @@
"node": ">=0.10"
}
},
+ "node_modules/dropzone": {
+ "version": "6.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/dropzone/-/dropzone-6.0.0-beta.2.tgz",
+ "integrity": "sha512-k44yLuFFhRk53M8zP71FaaNzJYIzr99SKmpbO/oZKNslDjNXQsBTdfLs+iONd0U0L94zzlFzRnFdqbLcs7h9fQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@swc/helpers": "^0.2.13",
+ "just-extend": "^5.0.0"
+ }
+ },
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
@@ -2684,6 +2710,58 @@
}
}
},
+ "node_modules/filepond": {
+ "version": "4.32.11",
+ "resolved": "https://registry.npmjs.org/filepond/-/filepond-4.32.11.tgz",
+ "integrity": "sha512-+uHkc/XNksMMy2S+x5MGxTuA97NqzBBwmoixn3tqGELa4BgqJ+PBiWL3YeRamqAoYguT7t/au3s7ams2jjMshA==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/filepond-plugin-file-validate-type": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/filepond-plugin-file-validate-type/-/filepond-plugin-file-validate-type-1.2.9.tgz",
+ "integrity": "sha512-Tzv07aNdZvjUXDRA3XL16QMEvh6llDrXlcZ6W0eTHQ+taHaVg/JKJTFs/AViO+6ZcpPCcQStbhYEL2HoS+vldw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "filepond": ">=1.x <5.x"
+ }
+ },
+ "node_modules/filepond-plugin-image-crop": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/filepond-plugin-image-crop/-/filepond-plugin-image-crop-2.0.6.tgz",
+ "integrity": "sha512-bSy/KND4EP/QtW8MxIj23qgSEPUVRrT8XdktJ+OU9y8xRjFjTG+qcuw1LsycARQYRtzi8cZrD3P4POOITfkywQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "filepond": ">=3.x <5.x"
+ }
+ },
+ "node_modules/filepond-plugin-image-exif-orientation": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/filepond-plugin-image-exif-orientation/-/filepond-plugin-image-exif-orientation-1.0.11.tgz",
+ "integrity": "sha512-hLBc12Fk6Zkj3L8mSAn+elugHOqT5rLUbgVXQQIQjMe0FsGjtpoxqeVR6jt4IWHGat2L9sFAgU2TGmd1mqosCg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "filepond": ">=3.x <5.x"
+ }
+ },
+ "node_modules/filepond-plugin-image-preview": {
+ "version": "4.6.12",
+ "resolved": "https://registry.npmjs.org/filepond-plugin-image-preview/-/filepond-plugin-image-preview-4.6.12.tgz",
+ "integrity": "sha512-Y8ETX5QVV0mbPB0586UH8AUmG9tZg8PuN5bdEAIlZVJFTct5ebViJ7+Am94/VhTPjLqZjBf1zmDq5JU6XRsZKw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "filepond": ">=4.x <5.x"
+ }
+ },
+ "node_modules/filepond-plugin-image-resize": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/filepond-plugin-image-resize/-/filepond-plugin-image-resize-2.0.10.tgz",
+ "integrity": "sha512-irX+J275u8Ph1KcciCeSQmxeFjbu0+co5XVCkiwdSNnz6KiqrCKN7RXTvEbdgSdDzyi5omr2oP1rKWps5L1RsQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "filepond": ">=3.x <5.x"
+ }
+ },
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -2698,6 +2776,12 @@
"node": ">=8"
}
},
+ "node_modules/flatpickr": {
+ "version": "4.6.13",
+ "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.13.tgz",
+ "integrity": "sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw==",
+ "license": "MIT"
+ },
"node_modules/follow-redirects": {
"version": "1.15.11",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
@@ -3011,6 +3095,12 @@
"node": ">=6"
}
},
+ "node_modules/just-extend": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-5.1.1.tgz",
+ "integrity": "sha512-b+z6yF1d4EOyDgylzQo5IminlUmzSeqR1hs/bzjBNjuGras4FXq/6TrzjxfN0j+TmI0ltJzTNlqXUMCniciwKQ==",
+ "license": "MIT"
+ },
"node_modules/kolorist": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz",
@@ -4201,6 +4291,31 @@
"integrity": "sha512-lSvY6IpeA/Tv/iPZ/FOkMHVRBPSlm7t57nuHEZFBMRNOH8ElvfqVlnHGDOAMlvPhh9gHiddiQoASS+fY0MFX0g==",
"license": "ISC"
},
+ "node_modules/vue-filepond": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/vue-filepond/-/vue-filepond-7.0.4.tgz",
+ "integrity": "sha512-HvWlCG8qjvyykrpPTDjJ+JqsHTXt5/0zWMX9vu7kU3JXCUODPUkGi9prZcauOnIZ4MqyeSZ9M0sDVwdMATyt1g==",
+ "license": "MIT",
+ "peerDependencies": {
+ "filepond": ">=4.7.4 < 5.x",
+ "vue": ">=3 < 4"
+ }
+ },
+ "node_modules/vue-flatpickr-component": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/vue-flatpickr-component/-/vue-flatpickr-component-12.0.0.tgz",
+ "integrity": "sha512-CJ5jrgTaeD66Z4mjEocSTAdB/n6IGSlUICwdBanpyCI8hswq5rwXvEYQ5IKA3K3uVjP5pBlY9Rg6o3xoszTPpA==",
+ "license": "MIT",
+ "dependencies": {
+ "flatpickr": "^4.6.13"
+ },
+ "engines": {
+ "node": ">=14.13.0"
+ },
+ "peerDependencies": {
+ "vue": "^3.2.0"
+ }
+ },
"node_modules/vue-i18n": {
"version": "11.1.12",
"resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.1.12.tgz",
diff --git a/frontent/ops_vue_js/package.json b/frontent/ops_vue_js/package.json
index ecda95f..177b451 100644
--- a/frontent/ops_vue_js/package.json
+++ b/frontent/ops_vue_js/package.json
@@ -34,11 +34,21 @@
"axios": "^1.13.2",
"bootstrap": "^5.3.8",
"cropperjs": "^2.1.0",
+ "dropzone": "^6.0.0-beta.2",
+ "filepond": "^4.32.11",
+ "filepond-plugin-file-validate-type": "^1.2.9",
+ "filepond-plugin-image-crop": "^2.0.6",
+ "filepond-plugin-image-exif-orientation": "^1.0.11",
+ "filepond-plugin-image-preview": "^4.6.12",
+ "filepond-plugin-image-resize": "^2.0.10",
+ "flatpickr": "^4.6.13",
"litepicker": "^2.0.12",
"pinia": "^3.0.4",
"tom-select": "^2.4.3",
"vue": "^3.5.22",
"vue-cropper": "^0.6.5",
+ "vue-filepond": "^7.0.4",
+ "vue-flatpickr-component": "^12.0.0",
"vue-i18n": "^11.1.12",
"vue-router": "^4.6.3"
},
diff --git a/frontent/ops_vue_js/src/components/dateTimePicker.vue b/frontent/ops_vue_js/src/components/dateTimePicker.vue
new file mode 100644
index 0000000..6990ea1
--- /dev/null
+++ b/frontent/ops_vue_js/src/components/dateTimePicker.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
diff --git a/frontent/ops_vue_js/src/components/useDropzone.vue b/frontent/ops_vue_js/src/components/useDropzone.vue
new file mode 100644
index 0000000..1ff83c9
--- /dev/null
+++ b/frontent/ops_vue_js/src/components/useDropzone.vue
@@ -0,0 +1,133 @@
+
+
+
+
+ 已选择的文件:
+
+
+