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 @@ + + + + + + + \ No newline at end of file diff --git a/frontent/ops_vue_js/src/i18n/en.json b/frontent/ops_vue_js/src/i18n/en.json index 50aaf22..e155d4a 100644 --- a/frontent/ops_vue_js/src/i18n/en.json +++ b/frontent/ops_vue_js/src/i18n/en.json @@ -154,5 +154,19 @@ "license": "License", "source_code": "Source Code", "copy": "Copyright © 2025 Operations. All rights reserved." + }, + "cost_type":{ + "unit_price":"Unit Price", + "freight":"Freight" + }, + "order_status": { + "pending_order": "Pending Order", + "order_placed": "Order Placed", + "in_transit": "In Transit", + "completed": "Completed", + "refund_requested": "Refund Requested", + "returning": "Returning", + "refunded": "Refunded", + "lost_package": "Lost Package" } } diff --git a/frontent/ops_vue_js/src/i18n/zh-CN.json b/frontent/ops_vue_js/src/i18n/zh-CN.json index 5efd208..1e6ffbc 100644 --- a/frontent/ops_vue_js/src/i18n/zh-CN.json +++ b/frontent/ops_vue_js/src/i18n/zh-CN.json @@ -15,10 +15,10 @@ "purchase": "采购", "warehouse": "仓库" }, - "tagadder":{ - "not_fund_item":"没有找到匹配项", - "loding":"正在加载...", - "add":"添加新选项: " + "tagadder": { + "not_fund_item": "没有找到匹配项", + "loding": "正在加载...", + "add": "添加新选项: " }, "cropper": { "select_image": "选择图片", @@ -154,5 +154,19 @@ "license": "协议", "source_code": "源码", "copy": "版权 © 2025 Operations. 保留所有权利。" + }, + "cost_type": { + "unit_price": "单价", + "freight": "运费" + }, + "order_status": { + "pending_order": "待下单", + "order_placed": "已下单", + "in_transit": "运输中", + "completed": "已完成", + "refund_requested": "申请退款", + "returning": "退回中", + "refunded": "已退款", + "lost_package": "丢件" } } diff --git a/frontent/ops_vue_js/src/views/purchase/addorder.vue b/frontent/ops_vue_js/src/views/purchase/addorder.vue index 6ece80e..668840f 100644 --- a/frontent/ops_vue_js/src/views/purchase/addorder.vue +++ b/frontent/ops_vue_js/src/views/purchase/addorder.vue @@ -1,9 +1,9 @@ @@ -96,7 +120,7 @@ watch(locale, () => {
备注 0/100