diff --git a/Sky_Delivery/font/nginx-1.20.2/logs/nginx.pid b/Sky_Delivery/font/nginx-1.20.2/logs/nginx.pid index 777cdab..703c19e 100644 --- a/Sky_Delivery/font/nginx-1.20.2/logs/nginx.pid +++ b/Sky_Delivery/font/nginx-1.20.2/logs/nginx.pid @@ -1 +1 @@ -22912 +9364 diff --git a/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/config/OssConfiguration.java b/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/config/OssConfiguration.java new file mode 100644 index 0000000..72341a7 --- /dev/null +++ b/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/config/OssConfiguration.java @@ -0,0 +1,22 @@ +package com.sky.config; +//配置类Oss + +import com.sky.properties.AliOssProperties; +import com.sky.utils.AliOssUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@Slf4j +public class OssConfiguration { + + @Bean + @ConditionalOnMissingBean + public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties){ + log.info("开始上传阿里云文件上传工具类对象:{}",aliOssProperties); + return new AliOssUtil(aliOssProperties.getEndpoint(),aliOssProperties.getAccessKeyId(), + aliOssProperties.getAccessKeySecret(),aliOssProperties.getBucketName()); + } +} diff --git a/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/controller/admin/CommonController.java b/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/controller/admin/CommonController.java index 3f35adf..f24a7d0 100644 --- a/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/controller/admin/CommonController.java +++ b/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/controller/admin/CommonController.java @@ -1,14 +1,19 @@ package com.sky.controller.admin; import com.sky.result.Result; +import com.sky.utils.AliOssUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.util.UUID; + /* * 通用接口 *hello图床: 715|WGoDylnmBWl4YX9VNNBqDUxWe0349SBVs3RLNaXw @@ -19,11 +24,26 @@ import org.springframework.web.multipart.MultipartFile; @Slf4j public class CommonController { + @Autowired + private AliOssUtil aliOssUtil; + @PostMapping("/upload") @ApiOperation("文件上传") public Result upload(MultipartFile file){ - log.info("文件开始上传",file); - + log.info("文件开始上传:{}",file); +// 上传到阿里云服务器空间 + try { +// 原始文件名 + String originalFilename = file.getOriginalFilename(); +// 截取后缀 + String extension = originalFilename.substring(originalFilename.lastIndexOf(".")); +// 重命名 + String objectName = UUID.randomUUID().toString() + extension; + String filePath = aliOssUtil.upload(file.getBytes(), objectName); + return Result.success(filePath); + } catch (IOException e) { + log.error("文件上传失败",e ); + } return null; } } diff --git a/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/controller/admin/DishController.java b/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/controller/admin/DishController.java new file mode 100644 index 0000000..66fbaea --- /dev/null +++ b/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/controller/admin/DishController.java @@ -0,0 +1,35 @@ +package com.sky.controller.admin; + +import com.sky.dto.DishDTO; +import com.sky.result.Result; +import com.sky.service.DishService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/* +* 菜品管理 +* */ +@RestController +@RequestMapping("/admin/dish") +@Api(tags = "菜品相关接口") +@Slf4j +public class DishController { + @Autowired + private DishService dishService; + + @PostMapping + @ApiOperation("新增菜品") + public Result save(@RequestBody DishDTO dishDTO){ + log.info("新增菜品{}",dishDTO); + + return Result.success(); + } + + +} diff --git a/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/mapper/DishFlavorMapper.java b/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/mapper/DishFlavorMapper.java new file mode 100644 index 0000000..ffb4c9c --- /dev/null +++ b/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/mapper/DishFlavorMapper.java @@ -0,0 +1,13 @@ +package com.sky.mapper; + +import com.sky.entity.DishFlavor; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface DishFlavorMapper { + +// 批量插入 + void insertBatch(List flavors); +} diff --git a/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/mapper/DishMapper.java b/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/mapper/DishMapper.java index eece6f8..cd81ec2 100644 --- a/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/mapper/DishMapper.java +++ b/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/mapper/DishMapper.java @@ -1,5 +1,8 @@ package com.sky.mapper; +import com.sky.annotation.AutoFill; +import com.sky.entity.Dish; +import com.sky.enumeration.OperationType; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; @@ -14,4 +17,7 @@ public interface DishMapper { @Select("select count(id) from dish where category_id = #{categoryId}") Integer countByCategoryId(Long categoryId); + + @AutoFill(value = OperationType.INSERT) + void insert(Dish dish); } diff --git a/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/service/DishService.java b/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/service/DishService.java new file mode 100644 index 0000000..b2f3aa2 --- /dev/null +++ b/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/service/DishService.java @@ -0,0 +1,8 @@ +package com.sky.service; + +import com.sky.dto.DishDTO; + +public interface DishService { +// 新增菜品和对应的口味 + public void saveWithFlavor(DishDTO dishDTO); +} diff --git a/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/service/impl/DishServiceImpl.java b/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/service/impl/DishServiceImpl.java new file mode 100644 index 0000000..00017bc --- /dev/null +++ b/Sky_Delivery/server/sky-take-out/sky-server/src/main/java/com/sky/service/impl/DishServiceImpl.java @@ -0,0 +1,50 @@ +package com.sky.service.impl; + +import com.sky.dto.DishDTO; +import com.sky.entity.Dish; +import com.sky.entity.DishFlavor; +import com.sky.mapper.DishFlavorMapper; +import com.sky.mapper.DishMapper; +import com.sky.service.DishService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@Slf4j +public class DishServiceImpl implements DishService { + @Autowired + private DishMapper dishMapper; + + @Autowired + private DishFlavorMapper dishFlavorMapper; + +//新增菜品和口味数据,加上事务管理,原子性。成功全成功,失败全失败 + @Transactional + @Override + public void saveWithFlavor(DishDTO dishDTO) { + Dish dish = new Dish(); + //对象的属性拷贝 + BeanUtils.copyProperties(dishDTO,dish); + //向菜品表插入一条数据 + dishMapper.insert(dish); + + Long dishId = dish.getId(); + +// 向口味表插入n条数据 + List flavors = dishDTO.getFlavors(); + if(flavors != null&&flavors.size() > 0){ + //给口味附加上菜品的id + flavors.forEach(dishFlavor -> { + dishFlavor.setDishId(dishId); + }); + + dishFlavorMapper.insertBatch(flavors); + } + + } +} diff --git a/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/application-dev.yml b/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/application-dev.yml index dd9dca6..d60ede5 100644 --- a/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/application-dev.yml +++ b/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/application-dev.yml @@ -6,3 +6,10 @@ sky: database: sky_take_out username: root password: 123456 + + alioss: + endpoint: oss-cn-wuhan-lr.aliyuncs.com + access-key-id: LTAI5tJ3L3iMHw1n6XLRJxz4 + access-key-secret: QVFc0M102xx2m6HDrO4fODewZixHbu + bucket-name: web-sky-lejings + diff --git a/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/application.yml b/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/application.yml index de07ea6..aa86d78 100644 --- a/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/application.yml +++ b/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/application.yml @@ -37,3 +37,9 @@ sky: admin-ttl: 720000000 # 设置前端传递过来的令牌名称 admin-token-name: token + + alioss: + endpoint: ${sky.alioss.endpoint} + access-key-id: ${sky.alioss.access-key-id} + access-key-secret: ${sky.alioss.access-key-secret} + bucket-name: ${sky.alioss.bucket-name} diff --git a/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/banner.txt b/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/banner.txt new file mode 100644 index 0000000..0db0560 --- /dev/null +++ b/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/banner.txt @@ -0,0 +1,16 @@ +/** + * ┌─────────────────────────────────────────────────────────────┐ + * │┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐│ + * ││Esc│!1 │@2 │#3 │$4 │%5 │^6 │&7 │*8 │(9 │)0 │_- │+= │|\ │`~ ││ + * │├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤│ + * ││ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{[ │}] │ BS ││ + * │├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤│ + * ││ Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter ││ + * │├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤│ + * ││ Shift │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│Shift │Fn ││ + * │└─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴┬─────┴───┘│ + * │ │Fn │ Alt │ Space │ Alt │Win│ HHKB │ + * │ └───┴─────┴───────────────────────┴─────┴───┘ │ + * └─────────────────────────────────────────────────────────────┘ + * Happy Hacking auto coding + */ \ No newline at end of file diff --git a/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/mapper/DishFlavorMapper.xml b/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/mapper/DishFlavorMapper.xml new file mode 100644 index 0000000..95e35d2 --- /dev/null +++ b/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/mapper/DishFlavorMapper.xml @@ -0,0 +1,12 @@ + + + + + + insert into dish_flavor (dish_id, name, value) VALUES + + (#{df.dishId},#{df.name},#{df.value}}) + + + diff --git a/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/mapper/DishMapper.xml b/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/mapper/DishMapper.xml new file mode 100644 index 0000000..2bd01a6 --- /dev/null +++ b/Sky_Delivery/server/sky-take-out/sky-server/src/main/resources/mapper/DishMapper.xml @@ -0,0 +1,12 @@ + + + + + + + insert into dish (name, category_id, price, image, description, status, create_time, update_time, create_user, update_user,status) + values + (#{name},#{categoryId},#{price},#{image},#{description},#{status},#{createTime},#{updateTime},#{createUser},#{updateUser},#{status}) + + diff --git a/blog/font/blog/src/App.vue b/blog/font/blog/src/App.vue index 89baddf..8df73ba 100644 --- a/blog/font/blog/src/App.vue +++ b/blog/font/blog/src/App.vue @@ -6,21 +6,21 @@
- back to home + 点击回到主页
- clike to login + 点击登录
-
+
@@ -47,10 +47,10 @@ loginRoute.value = {path: '/personalSpace'} imgUrl.value = Login - console.log('already login',imgUrl.value) + console.log('已经登录',imgUrl.value) } else{ - console.log('not login') + console.log('未登录') } }); @@ -61,12 +61,9 @@ html, body { height: 100%; margin: 0; padding: 0; - background-color: black; } -.lxp{ - background-color: rgb(29, 116, 193); -} + #app { height: 100%; position: relative; /* 确保子元素可以相对于此进行定位 */ @@ -76,8 +73,8 @@ html, body { display: flex; justify-content: space-between; align-items: center; - background-color: rgba(135, 148, 62, 0.8); /* 半透明背景色,以便文字可见 */ - color: rgb(193, 92, 92); + background-color: rgba(220, 221, 214, 0.8); /* 半透明背景色,以便文字可见 */ + color: white; padding: 10px 20px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); z-index: 10; /* 确保头部在其他内容之上 */ diff --git a/blog/font/blog/src/assets/img/11.jpg b/blog/font/blog/src/assets/img/11.jpg deleted file mode 100644 index 74c525a..0000000 Binary files a/blog/font/blog/src/assets/img/11.jpg and /dev/null differ diff --git a/blog/font/blog/src/assets/img/R-C.jpg b/blog/font/blog/src/assets/img/R-C.jpg deleted file mode 100644 index 219e727..0000000 Binary files a/blog/font/blog/src/assets/img/R-C.jpg and /dev/null differ diff --git a/blog/font/blog/src/components/CommentModal.vue b/blog/font/blog/src/components/CommentModal.vue new file mode 100644 index 0000000..f3d7678 --- /dev/null +++ b/blog/font/blog/src/components/CommentModal.vue @@ -0,0 +1,176 @@ + + + + + \ No newline at end of file diff --git a/blog/font/blog/src/components/Modal.vue b/blog/font/blog/src/components/Modal.vue new file mode 100644 index 0000000..8135e9b --- /dev/null +++ b/blog/font/blog/src/components/Modal.vue @@ -0,0 +1,114 @@ + + + + + + \ No newline at end of file diff --git a/blog/font/blog/src/components/home/Publicity.vue b/blog/font/blog/src/components/home/Publicity.vue index f40c2f0..b89d394 100644 --- a/blog/font/blog/src/components/home/Publicity.vue +++ b/blog/font/blog/src/components/home/Publicity.vue @@ -2,7 +2,7 @@ diff --git a/blog/font/blog/src/components/login/PersonalSpace.vue b/blog/font/blog/src/components/login/PersonalSpace.vue index dbe249b..1636243 100644 --- a/blog/font/blog/src/components/login/PersonalSpace.vue +++ b/blog/font/blog/src/components/login/PersonalSpace.vue @@ -1,37 +1,46 @@ + + +

此账号注销后无法找回,请谨慎操作。

+ + +
- - \ No newline at end of file diff --git a/blog/font/blog/src/components/utils/Article.vue b/blog/font/blog/src/components/utils/Article.vue index e0964b4..6e965c9 100644 --- a/blog/font/blog/src/components/utils/Article.vue +++ b/blog/font/blog/src/components/utils/Article.vue @@ -8,11 +8,11 @@
- - + +
-
likes: {{ Likes }}
- +
点赞数: {{ Likes }}
+
@@ -32,9 +32,9 @@ const props = defineProps(['post_id','user_id','username','title','updated_at',' console.log("Likes:",props.Likes); function handleDelete() { - ElMessageBox.confirm('sure?', '提示', { - confirmButtonText: 'yse', - cancelButtonText: 'no', + ElMessageBox.confirm('您确定要删除这篇文章吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', type: 'warning' }).then(() => { // 用户点击确定 @@ -43,11 +43,11 @@ function handleDelete() { post_id: props.post_id, // 传递 post_id 参数 } }) - toast.success("success"); + toast.success("删除成功"); emit('destroy'); }).catch(() => { // 用户点击取消 - console.log('what’s the id?',props.post_id) + console.log('要删除的文章id是',props.post_id) }); } @@ -73,7 +73,7 @@ function handleClick(post_id:number) { display: flex; flex-direction: column; padding: 15px; - border: 2px solid #5b3b3b; + border: 1px solid #ddd; border-radius: 5px; margin-bottom: 10px; text-decoration: none; @@ -82,7 +82,7 @@ function handleClick(post_id:number) { } .article-overview:hover { - background-color: #6e3d3d; + background-color: #f4f4f4; } .article-header { @@ -97,7 +97,7 @@ function handleClick(post_id:number) { } .article-title { - font-size: 20px; + font-size: 18px; font-weight: bold; margin-bottom: 5px; } @@ -110,12 +110,12 @@ function handleClick(post_id:number) { .article-details { display: flex; flex-direction: column; - font-size: 16px; + font-size: 12px; color: #777; } .article-likes { - margin-bottom: 3px; + margin-bottom: 2px; } .article-published-date { diff --git a/blog/font/blog/src/components/utils/CommentSection.vue b/blog/font/blog/src/components/utils/CommentSection.vue new file mode 100644 index 0000000..de37de2 --- /dev/null +++ b/blog/font/blog/src/components/utils/CommentSection.vue @@ -0,0 +1,144 @@ + + + + + + \ No newline at end of file diff --git a/blog/font/blog/src/components/utils/Paper.vue b/blog/font/blog/src/components/utils/Paper.vue index 6336963..a92f5ab 100644 --- a/blog/font/blog/src/components/utils/Paper.vue +++ b/blog/font/blog/src/components/utils/Paper.vue @@ -1,12 +1,12 @@ +onMounted(() => { + getAll(selectedOption.value); +}); + +// 查询后,有文章显示在主页,没有文章,引入pinia提xing +// 查询博客根据作者名称 +const searchBlogByTitle = (author: string) => { + axios.get('http://127.0.0.1:8080/post/search', { + params: { title: "",username: author }, + headers: { token: '' } + }) + .then(res => { + postOverviewList.splice(0, postOverviewList.length); + postOverviewList.push(...res.data.data); + console.log("根据作者名称查询博客成功", res.data.data); + }) + .catch(error => console.error('There was an error fetching the data!', error)); +}; + +// 查询博客根据文章名称 +const searchBlogByAuthor = (title: string) => { + axios.get('http://127.0.0.1:8080/post/search', { + params: { title: title ,username:''}, + headers: { token: '' } + }) + .then(res => { + postOverviewList.splice(0, postOverviewList.length); + postOverviewList.push(...res.data.data); + console.log("根据文章名称查询博客成功", res.data.data); + }) + .catch(error => console.error('There was an error fetching the data!', error)); +}; +// 评论再做一个页面 +// 查询评论根据用户名称 +const searchCommentByUser = (user: string) => { + axios.get('http://127.0.0.1:8080/comment/search', { + params: { content: "",username: user }, + headers: { token: '' } + }) + .then(res => { + commentList.splice(0, commentList.length); + commentList.push(...res.data.data); + console.log("根据用户名称查询评论成功", res.data.data); + isCommentModalVisible.value = true; + }) + .catch(error => console.error('There was an error fetching the data!', error)); +}; + +// 查询评论根据评论内容 +const searchCommentByContent = (content: string) => { + axios.get('http://127.0.0.1:8080/comment/search', { + params: { content: content,username: "" }, + headers: { token: '' } + }) + .then(res => { + commentList.splice(0, commentList.length); + commentList.push(...res.data.data); + console.log("根据评论内容查询评论成功", res.data.data); + isCommentModalVisible.value = true; + }) + .catch(error => console.error('There was an error fetching the data!', error)); +}; +