diff --git a/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/controller/SysBannerController.java b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/controller/SysBannerController.java new file mode 100644 index 0000000..1c69143 --- /dev/null +++ b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/controller/SysBannerController.java @@ -0,0 +1,59 @@ +package com.itmk.web.banner.controller; + + +import com.alibaba.druid.util.StringUtils; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.itmk.utils.ResultUtils; +import com.itmk.utils.ResultVo; +import com.itmk.web.banner.entity.BannerParm; +import com.itmk.web.banner.entity.SysBanner; +import com.itmk.web.banner.service.SysBannerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/banner") +public class SysBannerController { + @Autowired + private SysBannerService sysBannerService; + + // 新增 + @PostMapping + public ResultVo addCategory(@RequestBody SysBanner sysBanner) { + sysBannerService.save(sysBanner); + return ResultUtils.success("新增广告成功!", sysBanner); + } + + // 编辑广告 + @PutMapping + public ResultVo editCategory(@RequestBody SysBanner sysBanner){ + if(sysBannerService.updateById(sysBanner)){ + return ResultUtils.success("编辑广告成功!", sysBanner); + } + return ResultUtils.error("编辑广告失败!"); + } + + // 删除广告 + @DeleteMapping("/{categoryId}") + public ResultVo deleteCategory(@PathVariable Long categoryId){ + if(sysBannerService.removeById(categoryId)){ + return ResultUtils.success("删除广告成功!"); + } + return ResultUtils.error("删除广告失败!"); + } + + // 列表查询 +// 列表查询需要分页 + @GetMapping("/list") + public ResultVo getList(BannerParm parm) { + IPage page = new Page<>(parm.getCurrentPage(), parm.getPageSize()); + //构造查询条件 + QueryWrapper query = new QueryWrapper<>(); + query.lambda().like(!StringUtils.isEmpty(parm.getTitle()),SysBanner::getTitle,parm.getTitle()); + IPage list = sysBannerService.page(page, query); + return ResultUtils.success("查询成功",list); + } + +} diff --git a/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/entity/BannerParm.java b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/entity/BannerParm.java new file mode 100644 index 0000000..1dd4cae --- /dev/null +++ b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/entity/BannerParm.java @@ -0,0 +1,11 @@ +package com.itmk.web.banner.entity; + +import lombok.Data; + +@Data +public class BannerParm { + private Integer currentPage; //当前页 + private Integer pageSize;//每页查询的条数 + private String title; +} + diff --git a/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/entity/SysBanner.java b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/entity/SysBanner.java new file mode 100644 index 0000000..f0f52dc --- /dev/null +++ b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/entity/SysBanner.java @@ -0,0 +1,18 @@ +package com.itmk.web.banner.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +@Data +@TableName("sys_banner") +public class SysBanner { + @TableId(type = IdType.AUTO) + private Long bannerId; + private Long goodsId; + private String title; + private String images; + private String status; + private Integer orderNum; +} \ No newline at end of file diff --git a/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/mapper/SysBannerMapper.java b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/mapper/SysBannerMapper.java new file mode 100644 index 0000000..64a1168 --- /dev/null +++ b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/mapper/SysBannerMapper.java @@ -0,0 +1,7 @@ +package com.itmk.web.banner.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.itmk.web.banner.entity.SysBanner; + +public interface SysBannerMapper extends BaseMapper { +} diff --git a/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/service/SysBannerService.java b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/service/SysBannerService.java new file mode 100644 index 0000000..65ebf72 --- /dev/null +++ b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/service/SysBannerService.java @@ -0,0 +1,7 @@ +package com.itmk.web.banner.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.itmk.web.banner.entity.SysBanner; + +public interface SysBannerService extends IService { +} diff --git a/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/service/impl/SysBannerServiceImpl.java b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/service/impl/SysBannerServiceImpl.java new file mode 100644 index 0000000..3238df5 --- /dev/null +++ b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/banner/service/impl/SysBannerServiceImpl.java @@ -0,0 +1,11 @@ +package com.itmk.web.banner.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.itmk.web.banner.entity.SysBanner; +import com.itmk.web.banner.mapper.SysBannerMapper; +import com.itmk.web.banner.service.SysBannerService; +import org.springframework.stereotype.Service; + +@Service +public class SysBannerServiceImpl extends ServiceImpl implements SysBannerService { +} \ No newline at end of file diff --git a/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/goods/controller/SysGoodsController.java b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/goods/controller/SysGoodsController.java index 81ad606..e086d42 100644 --- a/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/goods/controller/SysGoodsController.java +++ b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/goods/controller/SysGoodsController.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.itmk.utils.ResultUtils; import com.itmk.utils.ResultVo; +import com.itmk.web.category.entity.SelectType; import com.itmk.web.goods.entity.GoodsPageParm; import com.itmk.web.goods.entity.GoodsParm; import com.itmk.web.goods.entity.SysGoods; @@ -16,7 +17,9 @@ import com.itmk.web.goods_specs.service.SysGoodsSpecsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; import java.util.List; +import java.util.Optional; @RestController @RequestMapping("/api/goods") @@ -70,4 +73,21 @@ public class SysGoodsController { return ResultUtils.success("查询菜品成功!", list); } + + //列表 + @GetMapping("/getSelectList") + public ResultVo getSelectList(){ + List list = sysGoodsService.list(); + //组装为前端下拉选择器需要的数据格式 + List selectList = new ArrayList<>(); + Optional.ofNullable(list).orElse(new ArrayList<>()) + .stream() + .forEach(item ->{ + SelectType type = new SelectType(); + type.setLabel(item.getGoodsName()); + type.setValue(String.valueOf(item.getGoodsId())); + selectList.add(type); + }); + return ResultUtils.success("查询成功!",selectList); + } } diff --git a/api-interface/itmk-base-parent/itmk-base-web/src/main/resources/mapper/SysBannerMapper.xml b/api-interface/itmk-base-parent/itmk-base-web/src/main/resources/mapper/SysBannerMapper.xml new file mode 100644 index 0000000..3adada9 --- /dev/null +++ b/api-interface/itmk-base-parent/itmk-base-web/src/main/resources/mapper/SysBannerMapper.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/order-system/src/api/banner/bannerModel.ts b/order-system/src/api/banner/bannerModel.ts new file mode 100644 index 0000000..a63d87b --- /dev/null +++ b/order-system/src/api/banner/bannerModel.ts @@ -0,0 +1,18 @@ +//列表参数类型 +export type bannerListParm = { + currentPage:number; + pageSize:number; + title:string; + total:number; //分页的总条数 +} +//广告管理数据类型 +export type bannerType = { + categoryId: string; + type:string; + bannerId:string; + goodsId:string; + title:string; + images:string; + status:string; + orderNum:string; +} \ No newline at end of file diff --git a/order-system/src/api/banner/index.ts b/order-system/src/api/banner/index.ts new file mode 100644 index 0000000..e5ffc59 --- /dev/null +++ b/order-system/src/api/banner/index.ts @@ -0,0 +1,20 @@ +import http from "../../http"; +import type { bannerType, bannerListParm } from "./bannerModel"; +//新增 +export const addApi = (parm:bannerType)=>{ + return http.post("/api/banner",parm) +} + +//列表 +export const getListApi = (parm:bannerListParm)=>{ + return http.get("/api/banner/list",parm) +} + +//编辑 +export const editApi = (parm:bannerType)=>{ + return http.put("/api/banner",parm) +} +//删除 +export const deleteApi = (bannerId:string)=>{ + return http.delete(`/api/banner/${bannerId}`) +} \ No newline at end of file diff --git a/order-system/src/api/goods/index.ts b/order-system/src/api/goods/index.ts index 3448753..3d915f3 100644 --- a/order-system/src/api/goods/index.ts +++ b/order-system/src/api/goods/index.ts @@ -26,4 +26,9 @@ export const editGoodsApi = (parm: goodsModel) => { export const getGoodsApi = (parm: ListGoodsParm) => { // 查需要找到列表,把列表里面的数据返回出来 return http.get('/api/goods/list', parm) +} + +//菜品下拉列表 +export const getSelectListApi = ()=>{ + return http.get("/api/goods/getSelectList") } \ No newline at end of file diff --git a/order-system/src/compositions/banner/useBanner.ts b/order-system/src/compositions/banner/useBanner.ts new file mode 100644 index 0000000..708f760 --- /dev/null +++ b/order-system/src/compositions/banner/useBanner.ts @@ -0,0 +1,35 @@ +import type { bannerType } from "../../api/banner/bannerModel"; +import { EditType, type FuncList } from "../../type/baseType"; +import { ref } from "vue"; +import { deleteApi } from '../../api/banner/index' +import useInstance from "@/hooks/useInstance"; +import { ElMessage } from "element-plus"; +export default function useBanner(getList: FuncList) { + const { global } = useInstance() + const showBtn = ref<{ show: (title: string, type: string, width?: number, height?: number, row?: bannerType) => {} }>(); + //新增 + const addBtn = () => { + showBtn.value?.show("新增", EditType.ADD, 900, 500) + } + //编辑 + const editBtn = (row: bannerType) => { + showBtn.value?.show("编辑", EditType.EDIT, 900, 500, row) + } + //删除 + const deleteBtn = async (row: bannerType) => { + const confirm = await global.$myconfirm('确定删除吗?') + if (confirm) { + let res = await deleteApi(row.bannerId) + if (res && res.code == 200) { + ElMessage.success(res.msg) + getList() + } + } + } + return { + showBtn, + addBtn, + editBtn, + deleteBtn + } +} \ No newline at end of file diff --git a/order-system/src/compositions/banner/useBannerTable.ts b/order-system/src/compositions/banner/useBannerTable.ts new file mode 100644 index 0000000..98ab3c6 --- /dev/null +++ b/order-system/src/compositions/banner/useBannerTable.ts @@ -0,0 +1,60 @@ +import type { bannerListParm } from "../../api/banner/bannerModel"; +import { reactive ,ref,onMounted,nextTick} from "vue"; +import {getListApi} from '../../api/banner/index' +export default function useBannerTable(){ + //表格高度 + const tableHeight = ref(0) + //接收表格数据 + const tableList = ref([]) + //列表查询的参数 + const listParm = reactive({ + currentPage:1, + pageSize:10, + title:'', + total:0 + }) + //列表 + const getList = async()=>{ + let res = await getListApi(listParm) + if(res && res.code == 200){ + tableList.value = res.data.records; + listParm.total = res.data.total; + } + } + //搜索 + const searchBtn = ()=>{ + getList() + } + //重置 + const resetBtn = ()=>{ + listParm.currentPage = 1; + listParm.title = '' + getList() + } + //页容量改变时触发 + const sizeChange = (size:number)=>{ + listParm.pageSize = size; + getList() + } + //页数改变触发 + const currentChange = (page:number)=>{ + listParm.currentPage = page; + getList() + } + onMounted(()=>{ + getList() + nextTick(()=>{ + tableHeight.value = window.innerHeight - 220 + }) + }) + return{ + listParm, + getList, + searchBtn, + resetBtn, + tableList, + sizeChange, + currentChange, + tableHeight + } +} \ No newline at end of file diff --git a/order-system/src/compositions/banner/useSelectGoods.ts b/order-system/src/compositions/banner/useSelectGoods.ts new file mode 100644 index 0000000..e44739b --- /dev/null +++ b/order-system/src/compositions/banner/useSelectGoods.ts @@ -0,0 +1,56 @@ +import { ref } from "vue"; +import { getSelectListApi } from "../../api/goods"; + +// 定义下拉选项的类型 +export interface SelectOption { + value: string | number; + label: string; +} + +export default function useSelectCategory() { + // 下拉数据 + const selectData = ref([]) + + // 获取下拉数据 + const getSelect = async () => { + try { + let res = await getSelectListApi(); + console.log("API原始响应:", res); // 打印完整响应 + + if (res && res.code == 200) { + // 打印实际数据结构 + console.log("API返回的数据类型:", typeof res.data); + console.log("API返回的数据:", res.data); + + // 检查数据是否为数组 + if (!Array.isArray(res.data)) { + console.error("API返回的数据不是数组:", res.data); + selectData.value = []; + return; + } + + // 检查数组元素结构 + if (res.data.length > 0) { + console.log("第一个元素的结构:", Object.keys(res.data[0])); + } + + // 创建新数组赋值,确保响应式更新 + const newData = res.data.map(item => ({ + value: item.value.toString(), + label: item.label + })); + + selectData.value = newData; + console.log("映射后的分类数据:", JSON.parse(JSON.stringify(newData))); + } + } catch (error) { + console.error("获取分类数据失败:", error); + selectData.value = []; + } + }; + + + return { + selectData, getSelect + } +} \ No newline at end of file diff --git a/order-system/src/views/banner/AddBanner.vue b/order-system/src/views/banner/AddBanner.vue new file mode 100644 index 0000000..355db79 --- /dev/null +++ b/order-system/src/views/banner/AddBanner.vue @@ -0,0 +1,221 @@ + + + + + \ No newline at end of file diff --git a/order-system/src/views/banner/Index.vue b/order-system/src/views/banner/Index.vue index 30b4877..67f1525 100644 --- a/order-system/src/views/banner/Index.vue +++ b/order-system/src/views/banner/Index.vue @@ -1,13 +1,70 @@ - \ No newline at end of file + \ No newline at end of file