shaogen1995 недель назад: 3
Родитель
Сommit
d42f06b736

+ 206 - 5
src/controller/issueController.ts

@@ -1,5 +1,5 @@
 import dayjs from 'dayjs';
-import { Dict, Files, Goods, Video } from '../model/index.js';
+import { Advanced, Dict, Files, Goods, Share, Video } from '../model/index.js';
 import resSend from '../util/resSend.js';
 import { passWordJia } from '../util/pass.js';
 
@@ -13,6 +13,7 @@ const issue = {
 
     return resSend(res, 0, '获取Proof成功', arr.join('||'));
   },
+  // ---------------项目简介
   getIntro: async (req: any, res: any) => {
     req.apiDescription = '内容发布-获取项目简介';
     const introObj = await Dict.findById('694e4200f4ed1ea12901a424');
@@ -29,6 +30,7 @@ const issue = {
     await introObj.save();
     return resSend(res, 0, '编辑项目简介成功');
   },
+  // ---------------视频展示
   getVideoList: async (req: any, res: any) => {
     req.apiDescription = '内容发布-获取视频展示列表';
     const { pageNum = 1, pageSize = 10, searchKey = '' } = req.body;
@@ -91,10 +93,12 @@ const issue = {
       req.apiDescription = `内容发布-编辑视频展示-${videoObj.name}`;
       return resSend(res, 0, '编辑视频展示成功', videoObj);
     } else {
-      const userModel = new Video(req.body);
+      const infoModel = new Video(req.body);
+      infoModel.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      infoModel.updateTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
       // 新增视频展示
       // 保存数据到数据库
-      const dbBack = await userModel.save();
+      const dbBack = await infoModel.save();
       // 将文档转换为普通对象
       const videoObj = dbBack.toObject();
       req.apiDescription = `内容发布-新增视频展示-${videoObj.name}`;
@@ -123,6 +127,7 @@ const issue = {
     req.apiDescription = `内容发布-获取视频展示详情-${info.name}`;
     return resSend(res, 0, '获取视频展示详情成功', info);
   },
+  // ---------------展品展示
   getGoodsList: async (req: any, res: any) => {
     req.apiDescription = '内容发布-获取展品展示列表';
     const { pageNum = 1, pageSize = 10, searchKey = '' } = req.body;
@@ -190,10 +195,12 @@ const issue = {
       req.apiDescription = `内容发布-编辑展品展示-${findObj.name}`;
       return resSend(res, 0, '编辑展品展示成功', findObj);
     } else {
-      const userModel = new Goods(req.body);
+      const infoModel = new Goods(req.body);
+      infoModel.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      infoModel.updateTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
       // 新增展品展示
       // 保存数据到数据库
-      const dbBack = await userModel.save();
+      const dbBack = await infoModel.save();
       // 将文档转换为普通对象
       const findObj = dbBack.toObject();
       req.apiDescription = `内容发布-新增展品展示-${findObj.name}`;
@@ -258,6 +265,200 @@ const issue = {
     req.apiDescription = `内容发布-获取展品展示详情-${info.name}`;
     return resSend(res, 0, '获取展品展示详情成功', info);
   },
+  // ---------------先进光源
+  getAdvancedList: async (req: any, res: any) => {
+    req.apiDescription = '内容发布-获取先进光源列表';
+    const { pageNum = 1, pageSize = 10, searchKey = '' } = req.body;
+
+    // 构建查询条件
+    const query: any = {};
+
+    if (searchKey) {
+      // 使用正则表达式实现模糊查询,'i'表示不区分大小写
+      query.name = { $regex: searchKey, $options: 'i' };
+    }
+
+    // 计算跳过的文档数量
+    const skip = (pageNum - 1) * pageSize;
+
+    // 修改排序逻辑:先按sort字段降序,再按updateTime字段降序
+    const sortCondition: any = { sort: -1, updateTime: -1 };
+
+    // 并行执行:获取总条数和查询当前页数据
+    const [total, data] = await Promise.all([
+      // 获取满足条件的总记录数
+      Advanced.countDocuments(query),
+      // 查询当前页数据
+      Advanced.find(query).skip(skip).limit(parseInt(pageSize)).sort(sortCondition), // 按sort字段降序,数字越大越靠前;相同则按updateTime降序
+    ]);
+
+    // 计算总页数
+    const totalPages = Math.ceil(total / pageSize);
+    return resSend(res, 0, '获取先进光源列表成功', {
+      list: data,
+      pageNum: parseInt(pageNum),
+      pageSize: parseInt(pageSize),
+      total,
+      totalPages,
+    });
+  },
+  saveAdvanced: async (req: any, res: any) => {
+    if (req.body._id) {
+      // 编辑先进光源
+      // 检查数据是否存在
+      const existing: any = await Advanced.findById(req.body._id);
+      if (!existing) return resSend(res, 404, '数据不存在');
+
+      // 更新字段
+      // 过滤一些字段
+      const filetStr: string[] = [];
+
+      Object.keys(req.body).forEach((key) => {
+        if (key !== '_id' && req.body[key] !== undefined) {
+          if (!filetStr.includes(key)) {
+            existing[key] = req.body[key];
+          }
+        }
+      });
+
+      existing.updateTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      const updatedUser = await existing.save();
+
+      const findObj = updatedUser.toObject();
+      req.apiDescription = `内容发布-编辑先进光源-${findObj.name}`;
+      return resSend(res, 0, '编辑先进光源成功', findObj);
+    } else {
+      const infoModel = new Advanced(req.body);
+      infoModel.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      infoModel.updateTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      // 新增先进光源
+      // 保存数据到数据库
+      const dbBack = await infoModel.save();
+      // 将文档转换为普通对象
+      const findObj = dbBack.toObject();
+      req.apiDescription = `内容发布-新增先进光源-${findObj.name}`;
+      return resSend(res, 0, '新增先进光源成功', findObj);
+    }
+  },
+  delAdvanced: async (req: any, res: any) => {
+    const { _id } = req.params; // 从URL参数中获取ID
+    // 1. 根据ID查找数据
+    const info = await Advanced.findById(_id);
+    if (!info) return resSend(res, 404, '_id错误或数据已被删除');
+
+    const deletedInfo: any = await Advanced.findByIdAndDelete(_id);
+    req.apiDescription = `内容发布-删除先进光源数据-${deletedInfo.name}`;
+    return resSend(res, 0, '删除先进光源数据成功');
+  },
+  getAdvancedInfo: async (req: any, res: any) => {
+    const { _id } = req.params;
+
+    if (!_id) return resSend(res, 400, '_id不能为空');
+
+    // 根据ID查询信息
+    const info = await Advanced.findById(_id);
+
+    if (!info) return resSend(res, 404, '_id错误或数据已被删除');
+    req.apiDescription = `内容发布-获取先进光源详情-${info.name}`;
+    return resSend(res, 0, '获取先进光源详情成功', info);
+  },
+  // ---------------素材共享
+  getShareList: async (req: any, res: any) => {
+    req.apiDescription = '内容发布-获取素材共享列表';
+    const { pageNum = 1, pageSize = 10, searchKey = '' } = req.body;
+
+    // 构建查询条件
+    const query: any = {};
+
+    if (searchKey) {
+      // 使用正则表达式实现模糊查询,'i'表示不区分大小写
+      query.name = { $regex: searchKey, $options: 'i' };
+    }
+
+    // 计算跳过的文档数量
+    const skip = (pageNum - 1) * pageSize;
+
+    // 修改排序逻辑:先按sort字段降序,再按updateTime字段降序
+    const sortCondition: any = { sort: -1, updateTime: -1 };
+
+    // 并行执行:获取总条数和查询当前页数据
+    const [total, data] = await Promise.all([
+      // 获取满足条件的总记录数
+      Share.countDocuments(query),
+      // 查询当前页数据
+      Share.find(query).skip(skip).limit(parseInt(pageSize)).sort(sortCondition), // 按sort字段降序,数字越大越靠前;相同则按updateTime降序
+    ]);
+
+    // 计算总页数
+    const totalPages = Math.ceil(total / pageSize);
+    return resSend(res, 0, '获取素材共享列表成功', {
+      list: data,
+      pageNum: parseInt(pageNum),
+      pageSize: parseInt(pageSize),
+      total,
+      totalPages,
+    });
+  },
+  saveShare: async (req: any, res: any) => {
+    if (req.body._id) {
+      // 编辑素材共享
+      // 检查数据是否存在
+      const existing: any = await Share.findById(req.body._id);
+      if (!existing) return resSend(res, 404, '数据不存在');
+
+      // 更新字段
+      // 过滤一些字段
+      const filetStr: string[] = [];
+
+      Object.keys(req.body).forEach((key) => {
+        if (key !== '_id' && req.body[key] !== undefined) {
+          if (!filetStr.includes(key)) {
+            existing[key] = req.body[key];
+          }
+        }
+      });
+
+      existing.updateTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      const updatedUser = await existing.save();
+
+      const findObj = updatedUser.toObject();
+      req.apiDescription = `内容发布-编辑素材共享-${findObj.name}`;
+      return resSend(res, 0, '编辑素材共享成功', findObj);
+    } else {
+      const infoModel = new Share(req.body);
+      infoModel.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      infoModel.updateTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      // 新增素材共享
+      // 保存数据到数据库
+      const dbBack = await infoModel.save();
+      // 将文档转换为普通对象
+      const findObj = dbBack.toObject();
+      req.apiDescription = `内容发布-新增素材共享-${findObj.name}`;
+      return resSend(res, 0, '新增素材共享成功', findObj);
+    }
+  },
+  delShare: async (req: any, res: any) => {
+    const { _id } = req.params; // 从URL参数中获取ID
+    // 1. 根据ID查找数据
+    const info = await Share.findById(_id);
+    if (!info) return resSend(res, 404, '_id错误或数据已被删除');
+
+    const deletedInfo: any = await Share.findByIdAndDelete(_id);
+    req.apiDescription = `内容发布-删除素材共享数据-${deletedInfo.name}`;
+    return resSend(res, 0, '删除素材共享数据成功');
+  },
+  getShareInfo: async (req: any, res: any) => {
+    const { _id } = req.params;
+
+    if (!_id) return resSend(res, 400, '_id不能为空');
+
+    // 根据ID查询信息
+    const info = await Share.findById(_id);
+
+    if (!info) return resSend(res, 404, '_id错误或数据已被删除');
+    req.apiDescription = `内容发布-获取素材共享详情-${info.name}`;
+    return resSend(res, 0, '获取素材共享详情成功', info);
+  },
 };
 
 export default issue;

+ 5 - 2
src/controller/userController.ts

@@ -150,15 +150,18 @@ const user = {
       req.apiDescription = `用户模块-编辑用户-${userObj.userName}`;
       return resSend(res, 0, '编辑用户成功', userObj);
     } else {
-      const userModel = new User({ ...req.body, passWord: passWordJia('Aa147852') });
+      const infoModel = new User({ ...req.body, passWord: passWordJia('Aa147852') });
       // 新增用户
       // 判断用户名是否已经存在
       const dbUser = await User.findOne({ userName: req.body.userName });
       if (dbUser && dbUser._id) {
         return resSend(res, 400, '用户名已存在');
       } else {
+        infoModel.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+        infoModel.updateTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+
         // 保存数据到数据库
-        const dbBack = await userModel.save();
+        const dbBack = await infoModel.save();
         // 将文档转换为普通对象并删除密码字段
         const userObj = dbBack.toObject();
         req.apiDescription = `用户模块-新增用户-${userObj.userName}`;

+ 21 - 12
src/middleware/validator/issueValidator.ts

@@ -3,12 +3,7 @@ import errorBack from './errorBack.js';
 
 // 新增/编辑视频展示
 export const addVideoVali = errorBack([
-  body('name')
-    .notEmpty()
-    .withMessage('标题不能为空')
-    .bail()
-    .isLength({ max: 30 })
-    .withMessage('长度最大为30个字符'),
+  body('name').notEmpty().withMessage('标题不能为空'),
   body('releaseDate').notEmpty().withMessage('发布日期不能为空'),
   body('type').notEmpty().withMessage('类别不能为空'),
   body('cover').notEmpty().withMessage('封面地址不能为空'),
@@ -18,14 +13,28 @@ export const addVideoVali = errorBack([
 
 // 新增/编辑展品展示
 export const addGoodsVali = errorBack([
-  body('name')
-    .notEmpty()
-    .withMessage('标题不能为空')
-    .bail()
-    .isLength({ max: 30 })
-    .withMessage('长度最大为30个字符'),
+  body('name').notEmpty().withMessage('标题不能为空'),
   body('releaseDate').notEmpty().withMessage('发布日期不能为空'),
   body('type').notEmpty().withMessage('类别不能为空'),
   body('cover').notEmpty().withMessage('封面地址不能为空'),
   body('description').notEmpty().withMessage('概述不能为空'),
 ]);
+
+// 新增/编辑官光源列表
+export const addAdvancedVali = errorBack([
+  body('name').notEmpty().withMessage('标题不能为空'),
+  body('releaseDate').notEmpty().withMessage('发布日期不能为空'),
+  body('type').notEmpty().withMessage('类别不能为空'),
+  body('cover').notEmpty().withMessage('封面地址不能为空'),
+  body('description').notEmpty().withMessage('内容不能为空'),
+]);
+
+// 新增/编辑素材共享
+export const addShareVali = errorBack([
+  body('name').notEmpty().withMessage('标题不能为空'),
+  body('releaseDate').notEmpty().withMessage('发布日期不能为空'),
+  body('type').notEmpty().withMessage('类别不能为空'),
+  body('cover').notEmpty().withMessage('封面地址不能为空'),
+  body('videoUrl').notEmpty().withMessage('视频地址不能为空'),
+  body('videoName').notEmpty().withMessage('视频名称不能为空'),
+]);

+ 51 - 0
src/model/advancedModel.ts

@@ -0,0 +1,51 @@
+import dayjs from 'dayjs';
+import mongoose from 'mongoose';
+
+const AdvancedSchema = new mongoose.Schema({
+  // 标题
+  name: {
+    type: String,
+    require: true,
+  },
+  // 发布日期
+  releaseDate: {
+    type: String,
+    require: true,
+  },
+  // 类别
+  type: {
+    type: String,
+    require: true,
+  },
+  // 封面图地址(原图)
+  cover: {
+    type: String,
+    require: true,
+  },
+  // 封面图地址(压缩)
+  coverSmall: {
+    type: String,
+    default: '',
+  },
+  // 内容
+  description: {
+    type: String,
+    default: '',
+  },
+
+  // 排序值
+  sort: {
+    type: Number,
+    default: 999,
+  },
+  createTime: {
+    type: String,
+    default: dayjs().format('YYYY-MM-DD HH:mm:ss'),
+  },
+  updateTime: {
+    type: String,
+    default: dayjs().format('YYYY-MM-DD HH:mm:ss'),
+  },
+});
+
+export default AdvancedSchema;

+ 4 - 0
src/model/index.ts

@@ -6,6 +6,8 @@ import dictModel from './dictModel.js';
 import fileModel from './fileModel.js';
 import VideoSchema from './videlModel.js';
 import GoodsSchema from './goodsModel.js';
+import AdvancedSchema from './advancedModel.js';
+import ShareSchema from './shareModel.js';
 
 const main = async () => {
   await mongoose.connect(mongodbUrl);
@@ -25,3 +27,5 @@ export const Dict = mongoose.model('Dict', dictModel);
 export const Files = mongoose.model('File', fileModel);
 export const Video = mongoose.model('video', VideoSchema);
 export const Goods = mongoose.model('goods', GoodsSchema);
+export const Advanced = mongoose.model('advanced', AdvancedSchema);
+export const Share = mongoose.model('share', ShareSchema);

+ 54 - 0
src/model/shareModel.ts

@@ -0,0 +1,54 @@
+import dayjs from 'dayjs';
+import mongoose from 'mongoose';
+
+const ShareSchema = new mongoose.Schema({
+  // 标题
+  name: {
+    type: String,
+    require: true,
+  },
+  // 发布日期
+  releaseDate: {
+    type: String,
+    require: true,
+  },
+  // 类别
+  type: {
+    type: String,
+    require: true,
+  },
+  // 封面图地址(原图)
+  cover: {
+    type: String,
+    require: true,
+  },
+  // 封面图地址(压缩)
+  coverSmall: {
+    type: String,
+    default: '',
+  },
+  // 视频地址
+  videoUrl: {
+    type: String,
+    require: true,
+  },
+  videoName: {
+    type: String,
+    require: true,
+  },
+  // 排序值
+  sort: {
+    type: Number,
+    default: 999,
+  },
+  createTime: {
+    type: String,
+    default: dayjs().format('YYYY-MM-DD HH:mm:ss'),
+  },
+  updateTime: {
+    type: String,
+    default: dayjs().format('YYYY-MM-DD HH:mm:ss'),
+  },
+});
+
+export default ShareSchema;

+ 29 - 2
src/router/issue.ts

@@ -5,7 +5,12 @@ import { verifyToken } from '../middleware/jwt.js';
 // 记录日志的中间件
 import requestLogger from '../middleware/requestLogger.js';
 //  校验字段的中间件
-import { addGoodsVali, addVideoVali } from '../middleware/validator/issueValidator.js';
+import {
+  addAdvancedVali,
+  addGoodsVali,
+  addShareVali,
+  addVideoVali,
+} from '../middleware/validator/issueValidator.js';
 
 const issueRouter = express.Router();
 
@@ -14,6 +19,7 @@ issueRouter
   .get('/getIntro', verifyToken, issue.getIntro)
   // 编辑项目简介
   .post('/setIntro', verifyToken, requestLogger, issue.setIntro)
+
   // ----------------------------------
   // 获取视频展示列表
   .post('/getVideoList', verifyToken, issue.getVideoList)
@@ -23,6 +29,7 @@ issueRouter
   .get('/delVideo/:_id', verifyToken, requestLogger, issue.delVideo)
   // 通过id获取视频展示详情
   .get('/getVideoInfo/:_id', verifyToken, issue.getVideoInfo)
+
   // ----------------------------------
   // 获取展品展示列表
   .post('/getGoodsList', verifyToken, issue.getGoodsList)
@@ -31,6 +38,26 @@ issueRouter
   // 删除展品展示
   .get('/delGoods/:_id', verifyToken, requestLogger, issue.delGoods)
   // 通过id获取展品展示详情
-  .get('/getGoodsInfo/:_id', verifyToken, issue.getGoodsInfo);
+  .get('/getGoodsInfo/:_id', verifyToken, issue.getGoodsInfo)
+
+  // ----------------------------------
+  // 获取先进光源列表
+  .post('/getAdvancedList', verifyToken, issue.getAdvancedList)
+  // 新增/编辑先进光源列表
+  .post('/saveAdvanced', verifyToken, addAdvancedVali, requestLogger, issue.saveAdvanced)
+  // 删除先进光源
+  .get('/delAdvanced/:_id', verifyToken, requestLogger, issue.delAdvanced)
+  // // 通过id获取先进光源详情
+  .get('/getAdvancedInfo/:_id', verifyToken, issue.getAdvancedInfo)
+
+  // ----------------------------------
+  // 获取素材共享列表
+  .post('/getShareList', verifyToken, issue.getShareList)
+  // 新增/编辑素材共享列表
+  .post('/saveShare', verifyToken, addShareVali, requestLogger, issue.saveShare)
+  // 删除素材共享
+  .get('/delShare/:_id', verifyToken, requestLogger, issue.delShare)
+  // // 通过id获取素材共享详情
+  .get('/getShareInfo/:_id', verifyToken, issue.getShareInfo);
 
 export default issueRouter;

+ 9 - 1
src/router/show.ts

@@ -17,6 +17,14 @@ showRouter
   // ----------------------------------
   // 获取展品展示列表
   .post('/getGoodsList', issue.getGoodsList)
-  .get('/getGoodsInfo/:_id', issue.getGoodsInfo);
+  .get('/getGoodsInfo/:_id', issue.getGoodsInfo)
+  // ----------------------------------
+  // 获取先进光源列表
+  .post('/getAdvancedList', issue.getAdvancedList)
+  .get('/getAdvancedInfo/:_id', issue.getAdvancedInfo)
+  // ----------------------------------
+  // 获取素材共享列表
+  .post('/getShareList', issue.getShareList)
+  .get('/getShareInfo/:_id', issue.getShareInfo);
 
 export default showRouter;