From 6af59d985f9a081826dff24a6d2051d2c5754153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=AD=90=E7=90=A6?= <95332614+wangziqi0409@users.noreply.github.com> Date: Tue, 13 Jan 2026 15:19:49 +0800 Subject: [PATCH] add --- backend/pom.xml | 1 + .../confession/ConfessionController.java | 23 +++ .../confession/ConfessionRepository.java | 1 + .../java/com/flower/config/WebConfig.java | 23 ++- backend/src/main/resources/application.yml | 13 +- frontend/package.json | 1 + frontend/src/api/confession.js | 2 + frontend/src/views/ConfessionCreate.vue | 138 ++++++++++++++++-- frontend/src/views/Home.vue | 30 +++- frontend/src/views/Orders.vue | 16 +- frontend/src/views/ProductDetail.vue | 14 +- frontend/src/views/Profile.vue | 21 ++- frontend/src/views/admin/AdminLayout.vue | 30 +++- frontend/src/views/admin/AdminOrders.vue | 16 +- frontend/src/views/admin/AdminProducts.vue | 39 ++++- frontend/vue.config.js | 4 + 16 files changed, 339 insertions(+), 33 deletions(-) diff --git a/backend/pom.xml b/backend/pom.xml index 0f2aea1..1ea6564 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -37,6 +37,7 @@ mysql mysql-connector-java + 8.0.33 runtime diff --git a/backend/src/main/java/com/flower/confession/ConfessionController.java b/backend/src/main/java/com/flower/confession/ConfessionController.java index 997e8c6..f3cd73f 100644 --- a/backend/src/main/java/com/flower/confession/ConfessionController.java +++ b/backend/src/main/java/com/flower/confession/ConfessionController.java @@ -51,6 +51,29 @@ public class ConfessionController { return ApiResponse.ok(confessionRepository.save(confession)); } + @GetMapping("/order/{orderId}") + public ApiResponse getByOrder(@PathVariable Long orderId) { + Order order = orderRepository.findById(orderId) + .orElseThrow(() -> new ApiException(404, "订单不存在")); + if (!order.getUserId().equals(AuthContext.get().getId())) { + throw new ApiException(403, "无权限"); + } + return ApiResponse.ok(confessionRepository.findByOrderId(orderId).orElse(null)); + } + + @PutMapping("/{id}") + public ApiResponse update(@PathVariable Long id, @RequestBody CreateConfessionRequest request) { + Confession confession = confessionRepository.findById(id) + .orElseThrow(() -> new ApiException(404, "告白不存在")); + if (!confession.getUserId().equals(AuthContext.get().getId())) { + throw new ApiException(403, "无权限"); + } + confession.setTitle(request.getTitle()); + confession.setMessage(request.getMessage()); + confession.setImageUrl(request.getImageUrl()); + return ApiResponse.ok(confessionRepository.save(confession)); + } + @PublicEndpoint @GetMapping("/{code}") public ApiResponse get(@PathVariable String code) { diff --git a/backend/src/main/java/com/flower/confession/ConfessionRepository.java b/backend/src/main/java/com/flower/confession/ConfessionRepository.java index 5aa271e..91f6d09 100644 --- a/backend/src/main/java/com/flower/confession/ConfessionRepository.java +++ b/backend/src/main/java/com/flower/confession/ConfessionRepository.java @@ -6,4 +6,5 @@ import java.util.Optional; public interface ConfessionRepository extends JpaRepository { Optional findByCode(String code); + Optional findByOrderId(Long orderId); } diff --git a/backend/src/main/java/com/flower/config/WebConfig.java b/backend/src/main/java/com/flower/config/WebConfig.java index 8e8e02a..5d31433 100644 --- a/backend/src/main/java/com/flower/config/WebConfig.java +++ b/backend/src/main/java/com/flower/config/WebConfig.java @@ -5,17 +5,21 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { private final AuthInterceptor authInterceptor; private final String allowedOrigins; + private final String uploadDir; public WebConfig(AuthInterceptor authInterceptor, - @Value("${app.cors.allowed-origins}") String allowedOrigins) { + @Value("${app.cors.allowed-origins}") String allowedOrigins, + @Value("${app.upload.dir}") String uploadDir) { this.authInterceptor = authInterceptor; this.allowedOrigins = allowedOrigins; + this.uploadDir = uploadDir; } @Override @@ -30,4 +34,21 @@ public class WebConfig implements WebMvcConfigurer { .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") .allowCredentials(true); } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/uploads/**") + .addResourceLocations("file:" + toFileLocation(uploadDir)); + } + + private String toFileLocation(String path) { + String normalized = path.replace("\\", "/"); + if (normalized.matches("^[A-Za-z]:/.*")) { + return "/" + normalized + "/"; + } + if (!normalized.startsWith("/")) { + return "/" + normalized + "/"; + } + return normalized.endsWith("/") ? normalized : normalized + "/"; + } } diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml index 303fd6e..0437be0 100644 --- a/backend/src/main/resources/application.yml +++ b/backend/src/main/resources/application.yml @@ -3,9 +3,9 @@ server: spring: datasource: - url: jdbc:mysql://localhost:3306/flower_shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai + url: jdbc:mysql://localhost:3307/flower_shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root - password: root + password: qq5211314 jpa: hibernate: ddl-auto: update @@ -16,9 +16,18 @@ spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: Asia/Shanghai + servlet: + multipart: + max-file-size: 10MB + max-request-size: 10MB app: cors: allowed-origins: http://localhost:8081 qr: base-url: http://localhost:8081/#/gift + upload: + dir: D:/bs/flower/files + ai: + token: b676775d829147dea4955ce809cc1beb.GZIuVsLf19YT5B12 + model: glm-4.7 diff --git a/frontend/package.json b/frontend/package.json index 8c85ef1..ad257d9 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,6 +9,7 @@ "dependencies": { "axios": "^1.7.2", "core-js": "^3.36.0", + "element-china-area-data": "^6.1.0", "element-ui": "^2.15.14", "vue": "^2.7.16", "vue-router": "^3.6.5" diff --git a/frontend/src/api/confession.js b/frontend/src/api/confession.js index 9bedef7..d80b89b 100644 --- a/frontend/src/api/confession.js +++ b/frontend/src/api/confession.js @@ -1,6 +1,8 @@ import http from './http'; export const createConfession = (data) => http.post('/confessions', data); +export const getConfessionByOrder = (orderId) => http.get(`/confessions/order/${orderId}`); +export const updateConfession = (id, data) => http.put(`/confessions/${id}`, data); export const getConfession = (code) => http.get(`/confessions/${code}`); export const listBarrages = (code) => http.get(`/confessions/${code}/barrages`); export const sendBarrage = (code, data) => http.post(`/confessions/${code}/barrages`, data); diff --git a/frontend/src/views/ConfessionCreate.vue b/frontend/src/views/ConfessionCreate.vue index 684a9a4..c121938 100644 --- a/frontend/src/views/ConfessionCreate.vue +++ b/frontend/src/views/ConfessionCreate.vue @@ -4,19 +4,38 @@ 返回订单 -

定制告白弹幕

- +
定制告白弹幕
+ - - + +
+ + AI 生成 +
+
+ + + 上传图片 + +
+ preview +
- 生成页面 +
+ 生成页面 +

专属链接:{{ giftUrl }}

@@ -26,7 +45,7 @@ + + diff --git a/frontend/vue.config.js b/frontend/vue.config.js index 363a784..5c22893 100644 --- a/frontend/vue.config.js +++ b/frontend/vue.config.js @@ -2,6 +2,10 @@ module.exports = { devServer: { proxy: { '/api': { + target: 'http://localhost:8080/', + changeOrigin: true + }, + '/uploads': { target: 'http://localhost:8080', changeOrigin: true }