From 3429e6ac7b7e40de8661d81a62231e1ec51bf922 Mon Sep 17 00:00:00 2001 From: GoCo Date: Sun, 31 Aug 2025 17:59:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=A6=E5=91=98=E7=AB=AF=20=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AiolActivityController.java | 221 ++++++++++++ .../AiolActivitySignupController.java | 182 ++++++++++ .../controller/AiolCommentController.java | 25 ++ .../AiolContentConfigController.java | 182 ++++++++++ .../aiol/controller/AiolIndexController.java | 166 +++++++++ .../controller/AiolResourceController.java | 288 +++++++++------- .../aiol}/controller/AiolTagController.java | 22 +- .../modules/aiol/entity/AiolActivity.java | 105 ++++++ .../aiol/entity/AiolActivitySignup.java | 80 +++++ .../aiol/entity/AiolContentConfig.java | 56 +++ .../jeecg/modules/aiol/entity/AiolTag.java | 72 ++++ .../aiol/mapper/AiolActivityMapper.java | 17 + .../aiol/mapper/AiolActivitySignupMapper.java | 17 + .../aiol/mapper/AiolContentConfigMapper.java | 17 + .../modules/aiol/mapper/AiolTagMapper.java | 17 + .../aiol/mapper/xml/AiolActivityMapper.xml | 5 + .../mapper/xml/AiolActivitySignupMapper.xml | 5 + .../mapper/xml/AiolContentConfigMapper.xml | 5 + .../modules/aiol/mapper/xml/AiolTagMapper.xml | 5 + .../aiol/service/IAiolActivityService.java | 14 + .../service/IAiolActivitySignupService.java | 14 + .../aiol/service/IAiolCommentService.java | 15 + .../service/IAiolContentConfigService.java | 14 + .../aiol/service/IAiolResourceService.java | 13 +- .../modules/aiol/service/IAiolTagService.java | 14 + .../service/impl/AiolActivityServiceImpl.java | 19 + .../impl/AiolActivitySignupServiceImpl.java | 19 + .../service/impl/AiolCommentServiceImpl.java | 92 +++++ .../impl/AiolContentConfigServiceImpl.java | 19 + .../service/impl/AiolResourceServiceImpl.java | 308 +++++++++++++++++ .../aiol/service/impl/AiolTagServiceImpl.java | 19 + .../modules/aiol/uniapp/AiolActivityForm.vue | 133 +++++++ .../modules/aiol/uniapp/AiolActivityList.vue | 44 +++ .../aiol/uniapp/AiolActivitySignupForm.vue | 113 ++++++ .../aiol/uniapp/AiolActivitySignupList.vue | 44 +++ .../aiol/uniapp/AiolContentConfigForm.vue | 101 ++++++ .../aiol/uniapp/AiolContentConfigList.vue | 44 +++ .../jeecg/modules/aiol/uniapp/AiolTagForm.vue | 101 ++++++ .../jeecg/modules/aiol/uniapp/AiolTagList.vue | 44 +++ .../modules/aiol/uniapp3/AiolActivityData.ts | 61 ++++ .../modules/aiol/uniapp3/AiolActivityForm.vue | 326 ++++++++++++++++++ .../modules/aiol/uniapp3/AiolActivityList.vue | 148 ++++++++ .../aiol/uniapp3/AiolActivitySignupData.ts | 34 ++ .../aiol/uniapp3/AiolActivitySignupForm.vue | 274 +++++++++++++++ .../aiol/uniapp3/AiolActivitySignupList.vue | 148 ++++++++ .../aiol/uniapp3/AiolContentConfigData.ts | 24 ++ .../aiol/uniapp3/AiolContentConfigForm.vue | 248 +++++++++++++ .../aiol/uniapp3/AiolContentConfigList.vue | 148 ++++++++ .../jeecg/modules/aiol/uniapp3/AiolTagData.ts | 24 ++ .../modules/aiol/uniapp3/AiolTagForm.vue | 248 +++++++++++++ .../modules/aiol/uniapp3/AiolTagList.vue | 148 ++++++++ .../modules/aiol/vue3/AiolActivity.api.ts | 64 ++++ .../modules/aiol/vue3/AiolActivity.data.ts | 179 ++++++++++ .../modules/aiol/vue3/AiolActivityList.vue | 220 ++++++++++++ .../aiol/vue3/AiolActivitySignup.api.ts | 64 ++++ .../aiol/vue3/AiolActivitySignup.data.ts | 100 ++++++ .../aiol/vue3/AiolActivitySignupList.vue | 206 +++++++++++ .../aiol/vue3/AiolContentConfig.api.ts | 64 ++++ .../aiol/vue3/AiolContentConfig.data.ts | 78 +++++ .../aiol/vue3/AiolContentConfigList.vue | 206 +++++++++++ .../jeecg/modules/aiol/vue3/AiolTag.api.ts | 64 ++++ .../jeecg/modules/aiol/vue3/AiolTag.data.ts | 78 +++++ .../jeecg/modules/aiol/vue3/AiolTagList.vue | 206 +++++++++++ .../V20250831_1__menu_insert_AiolActivity.sql | 26 ++ ...0831_1__menu_insert_AiolActivitySignup.sql | 26 ++ ...50831_1__menu_insert_AiolContentConfig.sql | 26 ++ .../vue3/V20250831_1__menu_insert_AiolTag.sql | 26 ++ .../aiol/vue3/components/AiolActivityForm.vue | 70 ++++ .../vue3/components/AiolActivityModal.vue | 99 ++++++ .../components/AiolActivitySignupForm.vue | 70 ++++ .../components/AiolActivitySignupModal.vue | 99 ++++++ .../vue3/components/AiolContentConfigForm.vue | 70 ++++ .../components/AiolContentConfigModal.vue | 99 ++++++ .../aiol/vue3/components/AiolTagForm.vue | 70 ++++ .../aiol/vue3/components/AiolTagModal.vue | 99 ++++++ .../biz/controller/ActivityBizController.java | 4 +- .../controller/AiolTagController1.java | 165 +++++++++ ...AiolTagMapper.java => AiolTagMapper1.java} | 2 +- ...viceImpl.java => AiolTagServiceImpl1.java} | 4 +- .../src/views/aiol/AiolActivity.api.ts | 64 ++++ .../src/views/aiol/AiolActivity.data.ts | 179 ++++++++++ .../src/views/aiol/AiolActivityList.vue | 220 ++++++++++++ .../src/views/aiol/AiolActivitySignup.api.ts | 64 ++++ .../src/views/aiol/AiolActivitySignup.data.ts | 100 ++++++ .../src/views/aiol/AiolActivitySignupList.vue | 206 +++++++++++ .../src/views/aiol/AiolContentConfig.api.ts | 64 ++++ .../src/views/aiol/AiolContentConfig.data.ts | 78 +++++ .../src/views/aiol/AiolContentConfigList.vue | 206 +++++++++++ .../src/views/aiol/AiolHomeworkSubmit.api.ts | 64 ++++ .../src/views/aiol/AiolHomeworkSubmit.data.ts | 126 +++++++ .../src/views/aiol/AiolHomeworkSubmitList.vue | 206 +++++++++++ .../V20250831_1__menu_insert_AiolActivity.sql | 26 ++ ...0831_1__menu_insert_AiolActivitySignup.sql | 26 ++ ...50831_1__menu_insert_AiolContentConfig.sql | 26 ++ ...0831_1__menu_insert_AiolHomeworkSubmit.sql | 26 ++ .../aiol/components/AiolActivityForm.vue | 70 ++++ .../aiol/components/AiolActivityModal.vue | 99 ++++++ .../components/AiolActivitySignupForm.vue | 70 ++++ .../components/AiolActivitySignupModal.vue | 99 ++++++ .../aiol/components/AiolContentConfigForm.vue | 70 ++++ .../components/AiolContentConfigModal.vue | 99 ++++++ .../components/AiolHomeworkSubmitForm.vue | 70 ++++ .../components/AiolHomeworkSubmitModal.vue | 99 ++++++ 103 files changed, 9207 insertions(+), 136 deletions(-) create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolActivityController.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolActivitySignupController.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolContentConfigController.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolIndexController.java rename jeecg-boot/jeecg-boot-module/{jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag => jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol}/controller/AiolTagController.java (90%) create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolActivity.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolActivitySignup.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolContentConfig.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolTag.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolActivityMapper.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolActivitySignupMapper.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolContentConfigMapper.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolTagMapper.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolActivityMapper.xml create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolActivitySignupMapper.xml create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolContentConfigMapper.xml create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolTagMapper.xml create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolActivityService.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolActivitySignupService.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolContentConfigService.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolTagService.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolActivityServiceImpl.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolActivitySignupServiceImpl.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolContentConfigServiceImpl.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolTagServiceImpl.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivityForm.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivityList.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivitySignupForm.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivitySignupList.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolContentConfigForm.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolContentConfigList.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolTagForm.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolTagList.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivityData.ts create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivityForm.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivityList.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivitySignupData.ts create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivitySignupForm.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivitySignupList.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolContentConfigData.ts create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolContentConfigForm.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolContentConfigList.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolTagData.ts create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolTagForm.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolTagList.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivity.api.ts create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivity.data.ts create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivityList.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivitySignup.api.ts create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivitySignup.data.ts create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivitySignupList.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolContentConfig.api.ts create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolContentConfig.data.ts create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolContentConfigList.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolTag.api.ts create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolTag.data.ts create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolTagList.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolActivity.sql create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolActivitySignup.sql create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolContentConfig.sql create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolTag.sql create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivityForm.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivityModal.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivitySignupForm.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivitySignupModal.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolContentConfigForm.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolContentConfigModal.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolTagForm.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolTagModal.vue create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/controller/AiolTagController1.java rename jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/mapper/{AiolTagMapper.java => AiolTagMapper1.java} (83%) rename jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/service/impl/{AiolTagServiceImpl.java => AiolTagServiceImpl1.java} (70%) create mode 100644 jeecgboot-vue3/src/views/aiol/AiolActivity.api.ts create mode 100644 jeecgboot-vue3/src/views/aiol/AiolActivity.data.ts create mode 100644 jeecgboot-vue3/src/views/aiol/AiolActivityList.vue create mode 100644 jeecgboot-vue3/src/views/aiol/AiolActivitySignup.api.ts create mode 100644 jeecgboot-vue3/src/views/aiol/AiolActivitySignup.data.ts create mode 100644 jeecgboot-vue3/src/views/aiol/AiolActivitySignupList.vue create mode 100644 jeecgboot-vue3/src/views/aiol/AiolContentConfig.api.ts create mode 100644 jeecgboot-vue3/src/views/aiol/AiolContentConfig.data.ts create mode 100644 jeecgboot-vue3/src/views/aiol/AiolContentConfigList.vue create mode 100644 jeecgboot-vue3/src/views/aiol/AiolHomeworkSubmit.api.ts create mode 100644 jeecgboot-vue3/src/views/aiol/AiolHomeworkSubmit.data.ts create mode 100644 jeecgboot-vue3/src/views/aiol/AiolHomeworkSubmitList.vue create mode 100644 jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolActivity.sql create mode 100644 jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolActivitySignup.sql create mode 100644 jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolContentConfig.sql create mode 100644 jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolHomeworkSubmit.sql create mode 100644 jeecgboot-vue3/src/views/aiol/components/AiolActivityForm.vue create mode 100644 jeecgboot-vue3/src/views/aiol/components/AiolActivityModal.vue create mode 100644 jeecgboot-vue3/src/views/aiol/components/AiolActivitySignupForm.vue create mode 100644 jeecgboot-vue3/src/views/aiol/components/AiolActivitySignupModal.vue create mode 100644 jeecgboot-vue3/src/views/aiol/components/AiolContentConfigForm.vue create mode 100644 jeecgboot-vue3/src/views/aiol/components/AiolContentConfigModal.vue create mode 100644 jeecgboot-vue3/src/views/aiol/components/AiolHomeworkSubmitForm.vue create mode 100644 jeecgboot-vue3/src/views/aiol/components/AiolHomeworkSubmitModal.vue diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolActivityController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolActivityController.java new file mode 100644 index 00000000..ff901ee8 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolActivityController.java @@ -0,0 +1,221 @@ +package org.jeecg.modules.aiol.controller; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.query.QueryRuleEnum; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.config.shiro.IgnoreAuth; +import org.jeecg.modules.aiol.entity.AiolActivity; +import org.jeecg.modules.aiol.entity.AiolTag; +import org.jeecg.modules.aiol.mapper.AiolTagMapper; +import org.jeecg.modules.aiol.service.IAiolActivityService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.apache.shiro.authz.annotation.RequiresPermissions; + +/** + * @Description: 活动 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +@Tag(name = "活动") +@RestController +@RequestMapping("/aiol/aiolActivity") +@Slf4j +public class AiolActivityController extends JeecgController { + @Autowired + private IAiolActivityService aiolActivityService; + + /** + * 分页列表查询 + * + * @param aiolActivity + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "活动-分页列表查询") + @Operation(summary = "活动-分页列表查询") + @GetMapping(value = "/list") + @IgnoreAuth + public Result> queryPageList(AiolActivity aiolActivity, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + + + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(aiolActivity, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = aiolActivityService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param aiolActivity + * @return + */ + @AutoLog(value = "活动-添加") + @Operation(summary = "活动-添加") + @RequiresPermissions("aiol:aiol_activity:add") + @PostMapping(value = "/add") + public Result add(@RequestBody AiolActivity aiolActivity) { + aiolActivityService.save(aiolActivity); + + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param aiolActivity + * @return + */ + @AutoLog(value = "活动-编辑") + @Operation(summary = "活动-编辑") + @RequiresPermissions("aiol:aiol_activity:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody AiolActivity aiolActivity) { + aiolActivityService.updateById(aiolActivity); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "活动-通过id删除") + @Operation(summary = "活动-通过id删除") + @RequiresPermissions("aiol:aiol_activity:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + aiolActivityService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "活动-批量删除") + @Operation(summary = "活动-批量删除") + @RequiresPermissions("aiol:aiol_activity:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.aiolActivityService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "活动-通过id查询") + @Operation(summary = "活动-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + AiolActivity aiolActivity = aiolActivityService.getById(id); + if (aiolActivity == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(aiolActivity); + } + + /** + * 导出excel + * + * @param request + * @param aiolActivity + */ + @RequiresPermissions("aiol:aiol_activity:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, AiolActivity aiolActivity) { + return super.exportXls(request, aiolActivity, AiolActivity.class, "活动"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("aiol:aiol_activity:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, AiolActivity.class); + } + + @Autowired + private AiolTagMapper aiolTagMapper; + + @GetMapping("/selected") + @Operation(summary = "查询精选活动") + @IgnoreAuth + public Result> getSelectedActivities() { + // 1. 从 aiol_tag 表查询 target_type='activity' 的 target_id 列表 + QueryWrapper tagWrapper = new QueryWrapper<>(); + tagWrapper.eq("target_type", "activity"); + List tags = aiolTagMapper.selectList(tagWrapper); + + if (tags == null || tags.isEmpty()) { + return Result.OK(List.of()); + } + + // 2. 提取 target_id 列表 + List activityIds = tags.stream() + .map(AiolTag::getTargetId) + .filter(id -> id != null && !id.trim().isEmpty()) + .collect(Collectors.toList()); + + if (activityIds.isEmpty()) { + return Result.OK(List.of()); + } + + // 3. 根据 target_id 列表查询活动数据 + QueryWrapper activityWrapper = new QueryWrapper<>(); + activityWrapper.in("id", activityIds); + List activities = aiolActivityService.list(activityWrapper); + + return Result.OK(activities); + } +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolActivitySignupController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolActivitySignupController.java new file mode 100644 index 00000000..911ef8c5 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolActivitySignupController.java @@ -0,0 +1,182 @@ +package org.jeecg.modules.aiol.controller; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.query.QueryRuleEnum; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.aiol.entity.AiolActivitySignup; +import org.jeecg.modules.aiol.service.IAiolActivitySignupService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.apache.shiro.authz.annotation.RequiresPermissions; + /** + * @Description: 活动报名 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +@Tag(name="活动报名") +@RestController +@RequestMapping("/aiol/aiolActivitySignup") +@Slf4j +public class AiolActivitySignupController extends JeecgController { + @Autowired + private IAiolActivitySignupService aiolActivitySignupService; + + /** + * 分页列表查询 + * + * @param aiolActivitySignup + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "活动报名-分页列表查询") + @Operation(summary="活动报名-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(AiolActivitySignup aiolActivitySignup, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + + + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(aiolActivitySignup, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = aiolActivitySignupService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param aiolActivitySignup + * @return + */ + @AutoLog(value = "活动报名-添加") + @Operation(summary="活动报名-添加") + @RequiresPermissions("aiol:aiol_activity_signup:add") + @PostMapping(value = "/add") + public Result add(@RequestBody AiolActivitySignup aiolActivitySignup) { + aiolActivitySignupService.save(aiolActivitySignup); + + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param aiolActivitySignup + * @return + */ + @AutoLog(value = "活动报名-编辑") + @Operation(summary="活动报名-编辑") + @RequiresPermissions("aiol:aiol_activity_signup:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody AiolActivitySignup aiolActivitySignup) { + aiolActivitySignupService.updateById(aiolActivitySignup); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "活动报名-通过id删除") + @Operation(summary="活动报名-通过id删除") + @RequiresPermissions("aiol:aiol_activity_signup:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + aiolActivitySignupService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "活动报名-批量删除") + @Operation(summary="活动报名-批量删除") + @RequiresPermissions("aiol:aiol_activity_signup:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.aiolActivitySignupService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "活动报名-通过id查询") + @Operation(summary="活动报名-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + AiolActivitySignup aiolActivitySignup = aiolActivitySignupService.getById(id); + if(aiolActivitySignup==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(aiolActivitySignup); + } + + /** + * 导出excel + * + * @param request + * @param aiolActivitySignup + */ + @RequiresPermissions("aiol:aiol_activity_signup:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, AiolActivitySignup aiolActivitySignup) { + return super.exportXls(request, aiolActivitySignup, AiolActivitySignup.class, "活动报名"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("aiol:aiol_activity_signup:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, AiolActivitySignup.class); + } + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolCommentController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolCommentController.java index 983cdc37..ffcf53d9 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolCommentController.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolCommentController.java @@ -14,6 +14,8 @@ import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryRuleEnum; import org.jeecg.common.util.oConvertUtils; +import org.jeecg.config.shiro.IgnoreAuth; +import org.jeecg.modules.aiol.dto.CommentWithUserInfo; import org.jeecg.modules.aiol.entity.AiolComment; import org.jeecg.modules.aiol.service.IAiolCommentService; @@ -179,4 +181,27 @@ public class AiolCommentController extends JeecgController> queryCourseCommentList(@PathVariable("courseId") String courseId) { + List list = aiolCommentService.getCommentList("course", courseId); + return Result.OK(list); + } + + // @GetMapping("/activity/{activityId}/list") + // @Operation(summary = "查询活动评论列表", description = "根据活动ID查询活动评论列表,包含用户信息") + // public Result> queryActivityCommentList(@PathVariable("activityId") String activityId) { + // List list = commentBizService.getCommentList("activity", activityId); + // return Result.OK(list); + // } + + // @GetMapping("/{targetType}/{targetId}/list") + // @Operation(summary = "查询通用评论列表", description = "根据目标类型和目标ID查询评论列表,包含用户信息") + // public Result> queryCommentList( + // @PathVariable("targetType") String targetType, + // @PathVariable("targetId") String targetId) { + // List list = commentBizService.getCommentList(targetType, targetId); + // return Result.OK(list); + // } } diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolContentConfigController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolContentConfigController.java new file mode 100644 index 00000000..f2592e7e --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolContentConfigController.java @@ -0,0 +1,182 @@ +package org.jeecg.modules.aiol.controller; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.query.QueryRuleEnum; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.aiol.entity.AiolContentConfig; +import org.jeecg.modules.aiol.service.IAiolContentConfigService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.apache.shiro.authz.annotation.RequiresPermissions; + /** + * @Description: 内容配置 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +@Tag(name="内容配置") +@RestController +@RequestMapping("/aiol/aiolContentConfig") +@Slf4j +public class AiolContentConfigController extends JeecgController { + @Autowired + private IAiolContentConfigService aiolContentConfigService; + + /** + * 分页列表查询 + * + * @param aiolContentConfig + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "内容配置-分页列表查询") + @Operation(summary="内容配置-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(AiolContentConfig aiolContentConfig, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + + + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(aiolContentConfig, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = aiolContentConfigService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param aiolContentConfig + * @return + */ + @AutoLog(value = "内容配置-添加") + @Operation(summary="内容配置-添加") + @RequiresPermissions("aiol:aiol_content_config:add") + @PostMapping(value = "/add") + public Result add(@RequestBody AiolContentConfig aiolContentConfig) { + aiolContentConfigService.save(aiolContentConfig); + + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param aiolContentConfig + * @return + */ + @AutoLog(value = "内容配置-编辑") + @Operation(summary="内容配置-编辑") + @RequiresPermissions("aiol:aiol_content_config:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody AiolContentConfig aiolContentConfig) { + aiolContentConfigService.updateById(aiolContentConfig); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "内容配置-通过id删除") + @Operation(summary="内容配置-通过id删除") + @RequiresPermissions("aiol:aiol_content_config:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + aiolContentConfigService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "内容配置-批量删除") + @Operation(summary="内容配置-批量删除") + @RequiresPermissions("aiol:aiol_content_config:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.aiolContentConfigService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "内容配置-通过id查询") + @Operation(summary="内容配置-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + AiolContentConfig aiolContentConfig = aiolContentConfigService.getById(id); + if(aiolContentConfig==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(aiolContentConfig); + } + + /** + * 导出excel + * + * @param request + * @param aiolContentConfig + */ + @RequiresPermissions("aiol:aiol_content_config:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, AiolContentConfig aiolContentConfig) { + return super.exportXls(request, aiolContentConfig, AiolContentConfig.class, "内容配置"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("aiol:aiol_content_config:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, AiolContentConfig.class); + } + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolIndexController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolIndexController.java new file mode 100644 index 00000000..ddd0a8e1 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolIndexController.java @@ -0,0 +1,166 @@ +package org.jeecg.modules.aiol.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.jeecg.config.shiro.IgnoreAuth; +import org.jeecg.modules.aiol.dto.CommentWithUserInfo; +import org.jeecg.modules.aiol.entity.AiolContentConfig; +import org.jeecg.modules.aiol.entity.AiolCourse; +import org.jeecg.modules.aiol.mapper.AiolContentConfigMapper; +import org.jeecg.modules.aiol.mapper.AiolCourseMapper; +import org.jeecg.modules.aiol.service.IAiolCommentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.ZSetOperations; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.*; + +@Tag(name = "首页") +@RestController +@RequestMapping("/aiol/index") +@Slf4j +public class AiolIndexController { + @Autowired + private AiolContentConfigMapper contentConfigMapper; + @Autowired + private IAiolCommentService commentBizService; + @Autowired(required = false) + private StringRedisTemplate stringRedisTemplate; + @Autowired + private AiolCourseMapper courseMapper; + + private static final String HOT_SEARCH_ZSET_KEY = "hot:search"; + + @GetMapping("/content") + @Operation(summary = "查询首页内容") + @IgnoreAuth + public Result queryContent(@RequestParam String contentKey) { + AiolContentConfig contentConfig = contentConfigMapper.selectOne(new QueryWrapper().eq("content_key", contentKey)); + if (contentConfig == null) { + return Result.error("内容配置不存在"); + } + return Result.OK(contentConfig.getContentValue()); + } + + @GetMapping("/statistics") + @Operation(summary = "查询首页数据统计") + @IgnoreAuth + public Result> queryStatistics() { + Map map = new HashMap<>(); + + // 定义统计项的配置键 + String[] statisticsKeys = {"xxsp", "mszj", "pxjc", "zysc", "zxsy"}; + + // 从配置表查询每个统计项的值 + for (String key : statisticsKeys) { + AiolContentConfig contentConfig = contentConfigMapper.selectOne( + new QueryWrapper().eq("content_key", key) + ); + + if (contentConfig != null && contentConfig.getContentValue() != null) { + try { + // 尝试解析为数字,如果失败则使用默认值0 + Integer value = Integer.parseInt(contentConfig.getContentValue()); + map.put(key, value); + } catch (NumberFormatException e) { + log.warn("配置项 {} 的值 {} 不是有效数字,使用默认值0", key, contentConfig.getContentValue()); + map.put(key, 0); + } + } else { + log.warn("配置项 {} 不存在,使用默认值0", key); + map.put(key, 0); + } + } + + return Result.OK(map); + } + + @GetMapping("/selected_comments") + @Operation(summary = "查询精选评论") + @IgnoreAuth + public Result> querySelectedComments() { + // 查询精选评论(包含用户信息) + List comments = commentBizService.getAllSelectedComments(); + return Result.OK(comments); + } + + @GetMapping("/hot_search") + @Operation(summary = "查询热门搜索记录(关键词+搜索次数,Redis ZSet 排名)") + @IgnoreAuth + public Result>> queryHotSearch(@RequestParam(defaultValue = "10") Integer limit) { + if (limit == null || limit <= 0) { + limit = 10; + } + if (stringRedisTemplate == null) { + return Result.error("Redis 未配置,无法查询热门搜索"); + } + + Set> tuples = stringRedisTemplate.opsForZSet() + .reverseRangeWithScores(HOT_SEARCH_ZSET_KEY, 0, limit - 1); + + List> result = new ArrayList<>(); + if (tuples != null) { + for (ZSetOperations.TypedTuple tuple : tuples) { + if (tuple == null) { + continue; + } + Map item = new HashMap<>(); + item.put("keyword", tuple.getValue()); + item.put("count", tuple.getScore() == null ? 0 : tuple.getScore().longValue()); + result.add(item); + } + } + return Result.OK(result); + } + + @GetMapping("/search") + @Operation(summary = "全局搜索(课程:name/description/school)") + @IgnoreAuth + public Result> globalSearch( + @RequestParam String keyword, + @RequestParam(required = false, defaultValue = "20") Integer limit + ) { + if (limit == null || limit <= 0) { + limit = 20; + } + if (limit > 100) { + limit = 100; + } + + if (keyword == null || keyword.trim().isEmpty()) { + return Result.OK(new ArrayList<>()); + } + + if (keyword.trim().length() < 2) { + return Result.error("关键词长度至少为2个字符"); + } + + // 记录关键词到 Redis 热搜 + if (stringRedisTemplate != null) { + try { + stringRedisTemplate.opsForZSet().incrementScore(HOT_SEARCH_ZSET_KEY, keyword.trim(), 1D); + } catch (Exception e) { + log.warn("记录热搜关键词到 Redis 失败: {}", keyword, e); + } + } + + String kw = keyword.trim(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.lambda() + .like(AiolCourse::getName, kw) + .or() + .like(AiolCourse::getDescription, kw) + .or() + .like(AiolCourse::getSchool, kw); + + List list = courseMapper.selectList(wrapper.last("limit " + limit)); + return Result.OK(list); + } +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolResourceController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolResourceController.java index dd708d3d..5aa14aa9 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolResourceController.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolResourceController.java @@ -1,20 +1,21 @@ package org.jeecg.modules.aiol.controller; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryRuleEnum; import org.jeecg.common.util.oConvertUtils; +import org.jeecg.config.shiro.IgnoreAuth; +import org.jeecg.modules.aiol.constant.EntityLinkConst; import org.jeecg.modules.aiol.entity.AiolResource; +import org.jeecg.modules.aiol.service.IAiolEntityLinkService; import org.jeecg.modules.aiol.service.IAiolResourceService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -38,128 +39,129 @@ import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import org.jeecg.common.aspect.annotation.AutoLog; import org.apache.shiro.authz.annotation.RequiresPermissions; - /** + +/** * @Description: 资源 * @Author: jeecg-boot - * @Date: 2025-08-31 + * @Date: 2025-08-31 * @Version: V1.0 */ -@Tag(name="资源") +@Tag(name = "资源") @RestController @RequestMapping("/aiol/aiolResource") @Slf4j public class AiolResourceController extends JeecgController { - @Autowired - private IAiolResourceService aiolResourceService; - - /** - * 分页列表查询 - * - * @param aiolResource - * @param pageNo - * @param pageSize - * @param req - * @return - */ - //@AutoLog(value = "资源-分页列表查询") - @Operation(summary="资源-分页列表查询") - @GetMapping(value = "/list") - public Result> queryPageList(AiolResource aiolResource, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { + @Autowired + private IAiolResourceService aiolResourceService; + + /** + * 分页列表查询 + * + * @param aiolResource + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "资源-分页列表查询") + @Operation(summary = "资源-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(AiolResource aiolResource, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(aiolResource, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = aiolResourceService.page(page, queryWrapper); - return Result.OK(pageList); - } - - /** - * 添加 - * - * @param aiolResource - * @return - */ - @AutoLog(value = "资源-添加") - @Operation(summary="资源-添加") - @RequiresPermissions("aiol:aiol_resource:add") - @PostMapping(value = "/add") - public Result add(@RequestBody AiolResource aiolResource) { - aiolResourceService.save(aiolResource); - - return Result.OK("添加成功!"); - } - - /** - * 编辑 - * - * @param aiolResource - * @return - */ - @AutoLog(value = "资源-编辑") - @Operation(summary="资源-编辑") - @RequiresPermissions("aiol:aiol_resource:edit") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody AiolResource aiolResource) { - aiolResourceService.updateById(aiolResource); - return Result.OK("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @AutoLog(value = "资源-通过id删除") - @Operation(summary="资源-通过id删除") - @RequiresPermissions("aiol:aiol_resource:delete") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - aiolResourceService.removeById(id); - return Result.OK("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @AutoLog(value = "资源-批量删除") - @Operation(summary="资源-批量删除") - @RequiresPermissions("aiol:aiol_resource:deleteBatch") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.aiolResourceService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - //@AutoLog(value = "资源-通过id查询") - @Operation(summary="资源-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - AiolResource aiolResource = aiolResourceService.getById(id); - if(aiolResource==null) { - return Result.error("未找到对应数据"); - } - return Result.OK(aiolResource); - } + Page page = new Page(pageNo, pageSize); + IPage pageList = aiolResourceService.page(page, queryWrapper); + return Result.OK(pageList); + } /** - * 导出excel - * - * @param request - * @param aiolResource - */ + * 添加 + * + * @param aiolResource + * @return + */ + @AutoLog(value = "资源-添加") + @Operation(summary = "资源-添加") + @RequiresPermissions("aiol:aiol_resource:add") + @PostMapping(value = "/add") + public Result add(@RequestBody AiolResource aiolResource) { + aiolResourceService.save(aiolResource); + + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param aiolResource + * @return + */ + @AutoLog(value = "资源-编辑") + @Operation(summary = "资源-编辑") + @RequiresPermissions("aiol:aiol_resource:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody AiolResource aiolResource) { + aiolResourceService.updateById(aiolResource); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "资源-通过id删除") + @Operation(summary = "资源-通过id删除") + @RequiresPermissions("aiol:aiol_resource:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + aiolResourceService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "资源-批量删除") + @Operation(summary = "资源-批量删除") + @RequiresPermissions("aiol:aiol_resource:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.aiolResourceService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "资源-通过id查询") + @Operation(summary = "资源-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + AiolResource aiolResource = aiolResourceService.getById(id); + if (aiolResource == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(aiolResource); + } + + /** + * 导出excel + * + * @param request + * @param aiolResource + */ @RequiresPermissions("aiol:aiol_resource:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, AiolResource aiolResource) { @@ -167,16 +169,64 @@ public class AiolResourceController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, AiolResource.class); } + @Autowired + private IAiolEntityLinkService entityLinkBizService; + + @GetMapping("/feature") + @Operation(summary = "查询精品资源") + @IgnoreAuth + public Result> queryFeatureResource() { + List list = aiolResourceService.list(new QueryWrapper().eq("iz_featured", 1)); + return Result.OK(list); + } + + @GetMapping("/video") + @Operation(summary = "按课程分类查询视频资源") + @IgnoreAuth + public Result> queryVideoResource(@RequestParam("categoryId") String courseCategoryId) { + List targetIds = entityLinkBizService.listTargetIds(EntityLinkConst.SourceType.COURSE_CATEGORY, courseCategoryId, EntityLinkConst.TargetType.RESOURCE); + List list = new ArrayList<>(); + for (String targetId : targetIds) { + AiolResource resource = aiolResourceService.getById(targetId); + if (resource.getType() == EntityLinkConst.ResourceType.VIDEO) { + list.add(resource); + } + } + return Result.OK(list); + } + + @GetMapping("/image") + @Operation(summary = "按课程分类查询图片资源") + @IgnoreAuth + public Result> queryImageResource(@RequestParam("categoryId") String courseCategoryId) { + List targetIds = entityLinkBizService.listTargetIds(EntityLinkConst.SourceType.COURSE_CATEGORY, courseCategoryId, EntityLinkConst.TargetType.RESOURCE); + List list = new ArrayList<>(); + for (String targetId : targetIds) { + AiolResource resource = aiolResourceService.getById(targetId); + if (resource.getType() == EntityLinkConst.ResourceType.IMAGE) { + list.add(resource); + } + } + return Result.OK(list); + } + + @PostMapping("/upload") + @Operation(summary = "课程视频文件上传", description = "课程视频文件上传,返回各清晰度的m3u8文件地址") + public Result> upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws Exception { + if (file == null || file.isEmpty()) return Result.error("没有找到上传的文件"); + Map qualityUrls = aiolResourceService.uploadHls(file, request); + return Result.OK(qualityUrls); + } } diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/controller/AiolTagController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolTagController.java similarity index 90% rename from jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/controller/AiolTagController.java rename to jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolTagController.java index 140255bb..a12f782b 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/controller/AiolTagController.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolTagController.java @@ -1,4 +1,4 @@ -package org.jeecg.modules.gen.aioltag.controller; +package org.jeecg.modules.aiol.controller; import java.util.Arrays; import java.util.HashMap; @@ -14,8 +14,8 @@ import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryRuleEnum; import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.gen.aioltag.entity.AiolTag; -import org.jeecg.modules.gen.aioltag.service.IAiolTagService; +import org.jeecg.modules.aiol.entity.AiolTag; +import org.jeecg.modules.aiol.service.IAiolTagService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -41,12 +41,12 @@ import org.apache.shiro.authz.annotation.RequiresPermissions; /** * @Description: 标签 * @Author: jeecg-boot - * @Date: 2025-08-28 + * @Date: 2025-08-31 * @Version: V1.0 */ @Tag(name="标签") @RestController -@RequestMapping("/gen/aioltag/aiolTag") +@RequestMapping("/aiol/aiolTag") @Slf4j public class AiolTagController extends JeecgController { @Autowired @@ -84,7 +84,7 @@ public class AiolTagController extends JeecgController */ @AutoLog(value = "标签-添加") @Operation(summary="标签-添加") - @RequiresPermissions("gen.aioltag:aiol_tag:add") + @RequiresPermissions("aiol:aiol_tag:add") @PostMapping(value = "/add") public Result add(@RequestBody AiolTag aiolTag) { aiolTagService.save(aiolTag); @@ -100,7 +100,7 @@ public class AiolTagController extends JeecgController */ @AutoLog(value = "标签-编辑") @Operation(summary="标签-编辑") - @RequiresPermissions("gen.aioltag:aiol_tag:edit") + @RequiresPermissions("aiol:aiol_tag:edit") @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) public Result edit(@RequestBody AiolTag aiolTag) { aiolTagService.updateById(aiolTag); @@ -115,7 +115,7 @@ public class AiolTagController extends JeecgController */ @AutoLog(value = "标签-通过id删除") @Operation(summary="标签-通过id删除") - @RequiresPermissions("gen.aioltag:aiol_tag:delete") + @RequiresPermissions("aiol:aiol_tag:delete") @DeleteMapping(value = "/delete") public Result delete(@RequestParam(name="id",required=true) String id) { aiolTagService.removeById(id); @@ -130,7 +130,7 @@ public class AiolTagController extends JeecgController */ @AutoLog(value = "标签-批量删除") @Operation(summary="标签-批量删除") - @RequiresPermissions("gen.aioltag:aiol_tag:deleteBatch") + @RequiresPermissions("aiol:aiol_tag:deleteBatch") @DeleteMapping(value = "/deleteBatch") public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { this.aiolTagService.removeByIds(Arrays.asList(ids.split(","))); @@ -160,7 +160,7 @@ public class AiolTagController extends JeecgController * @param request * @param aiolTag */ - @RequiresPermissions("gen.aioltag:aiol_tag:exportXls") + @RequiresPermissions("aiol:aiol_tag:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, AiolTag aiolTag) { return super.exportXls(request, aiolTag, AiolTag.class, "标签"); @@ -173,7 +173,7 @@ public class AiolTagController extends JeecgController * @param response * @return */ - @RequiresPermissions("gen.aioltag:aiol_tag:importExcel") + @RequiresPermissions("aiol:aiol_tag:importExcel") @RequestMapping(value = "/importExcel", method = RequestMethod.POST) public Result importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, AiolTag.class); diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolActivity.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolActivity.java new file mode 100644 index 00000000..0fcfb49a --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolActivity.java @@ -0,0 +1,105 @@ +package org.jeecg.modules.aiol.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import org.jeecg.common.constant.ProvinceCityArea; +import org.jeecg.common.util.SpringContextUtils; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 活动 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +@Data +@TableName("aiol_activity") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@Schema(description="活动") +public class AiolActivity implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @Schema(description = "主键") + private java.lang.String id; + /**标题*/ + @Excel(name = "标题", width = 15) + @Schema(description = "标题") + private java.lang.String title; + /**介绍*/ + @Excel(name = "介绍", width = 15) + @Schema(description = "介绍") + private java.lang.String introduction; + /**说明图片*/ + @Excel(name = "说明图片", width = 15) + @Schema(description = "说明图片") + private java.lang.String imgs; + /**头图*/ + @Excel(name = "头图", width = 15) + @Schema(description = "头图") + private java.lang.String banner; + /**介绍视频*/ + @Excel(name = "介绍视频", width = 15) + @Schema(description = "介绍视频") + private java.lang.String video; + /**报名人数上限*/ + @Excel(name = "报名人数上限", width = 15) + @Schema(description = "报名人数上限") + private java.lang.Integer maxNum; + /**开始时间*/ + @Excel(name = "开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @Schema(description = "开始时间") + private java.util.Date startTime; + /**结束时间*/ + @Excel(name = "结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @Schema(description = "结束时间") + private java.util.Date endTime; + /**扩展字段*/ + @Excel(name = "扩展字段", width = 15) + @Schema(description = "扩展字段") + private java.lang.String extra; + /**附件*/ + @Excel(name = "附件", width = 15) + @Schema(description = "附件") + private java.lang.String attachment; + /**状态*/ + @Excel(name = "状态", width = 15, dicCode = "course_status") + @Dict(dicCode = "course_status") + @Schema(description = "状态") + private java.lang.String status; + /**创建人*/ + @Schema(description = "创建人") + private java.lang.String createBy; + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @Schema(description = "创建日期") + private java.util.Date createTime; + /**更新人*/ + @Schema(description = "更新人") + private java.lang.String updateBy; + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @Schema(description = "更新日期") + private java.util.Date updateTime; +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolActivitySignup.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolActivitySignup.java new file mode 100644 index 00000000..344fc17f --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolActivitySignup.java @@ -0,0 +1,80 @@ +package org.jeecg.modules.aiol.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import org.jeecg.common.constant.ProvinceCityArea; +import org.jeecg.common.util.SpringContextUtils; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 活动报名 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +@Data +@TableName("aiol_activity_signup") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@Schema(description="活动报名") +public class AiolActivitySignup implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @Schema(description = "主键") + private java.lang.String id; + /**姓名*/ + @Excel(name = "姓名", width = 15) + @Schema(description = "姓名") + private java.lang.String name; + /**年龄*/ + @Excel(name = "年龄", width = 15) + @Schema(description = "年龄") + private java.lang.String age; + /**手机号*/ + @Excel(name = "手机号", width = 15) + @Schema(description = "手机号") + private java.lang.String phone; + /**邮箱*/ + @Excel(name = "邮箱", width = 15) + @Schema(description = "邮箱") + private java.lang.String email; + /**扩展字段*/ + @Excel(name = "扩展字段", width = 15) + @Schema(description = "扩展字段") + private java.lang.String extra; + /**附件*/ + @Excel(name = "附件", width = 15) + @Schema(description = "附件") + private java.lang.String attachment; + /**创建人*/ + @Schema(description = "创建人") + private java.lang.String createBy; + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @Schema(description = "创建日期") + private java.util.Date createTime; + /**更新人*/ + @Schema(description = "更新人") + private java.lang.String updateBy; + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @Schema(description = "更新日期") + private java.util.Date updateTime; +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolContentConfig.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolContentConfig.java new file mode 100644 index 00000000..4a58b586 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolContentConfig.java @@ -0,0 +1,56 @@ +package org.jeecg.modules.aiol.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import org.jeecg.common.constant.ProvinceCityArea; +import org.jeecg.common.util.SpringContextUtils; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 内容配置 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +@Data +@TableName("aiol_content_config") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@Schema(description="内容配置") +public class AiolContentConfig implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @Schema(description = "主键") + private java.lang.String id; + /**配置标识*/ + @Excel(name = "配置标识", width = 15) + @Schema(description = "配置标识") + private java.lang.String contentKey; + /**配置值*/ + @Excel(name = "配置值", width = 15) + @Schema(description = "配置值") + private java.lang.String contentValue; + /**值类型*/ + @Excel(name = "值类型", width = 15) + @Schema(description = "值类型") + private java.lang.String valueType; + /**描述*/ + @Excel(name = "描述", width = 15) + @Schema(description = "描述") + private java.lang.String description; +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolTag.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolTag.java new file mode 100644 index 00000000..1a9ea639 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolTag.java @@ -0,0 +1,72 @@ +package org.jeecg.modules.aiol.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import org.jeecg.common.constant.ProvinceCityArea; +import org.jeecg.common.util.SpringContextUtils; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 标签 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +@Data +@TableName("aiol_tag") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@Schema(description="标签") +public class AiolTag implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @Schema(description = "主键") + private java.lang.String id; + /**标签名*/ + @Excel(name = "标签名", width = 15) + @Schema(description = "标签名") + private java.lang.String name; + /**目标类型*/ + @Excel(name = "目标类型", width = 15) + @Schema(description = "目标类型") + private java.lang.String targetType; + /**目标id*/ + @Excel(name = "目标id", width = 15) + @Schema(description = "目标id") + private java.lang.String targetId; + /**描述*/ + @Excel(name = "描述", width = 15) + @Schema(description = "描述") + private java.lang.String description; + /**创建人*/ + @Schema(description = "创建人") + private java.lang.String createBy; + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @Schema(description = "创建日期") + private java.util.Date createTime; + /**更新人*/ + @Schema(description = "更新人") + private java.lang.String updateBy; + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @Schema(description = "更新日期") + private java.util.Date updateTime; +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolActivityMapper.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolActivityMapper.java new file mode 100644 index 00000000..74c9d30f --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolActivityMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.aiol.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.aiol.entity.AiolActivity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 活动 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +public interface AiolActivityMapper extends BaseMapper { + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolActivitySignupMapper.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolActivitySignupMapper.java new file mode 100644 index 00000000..89576347 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolActivitySignupMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.aiol.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.aiol.entity.AiolActivitySignup; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 活动报名 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +public interface AiolActivitySignupMapper extends BaseMapper { + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolContentConfigMapper.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolContentConfigMapper.java new file mode 100644 index 00000000..ebe9d78e --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolContentConfigMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.aiol.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.aiol.entity.AiolContentConfig; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 内容配置 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +public interface AiolContentConfigMapper extends BaseMapper { + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolTagMapper.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolTagMapper.java new file mode 100644 index 00000000..3133b1a0 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/AiolTagMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.aiol.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.aiol.entity.AiolTag; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 标签 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +public interface AiolTagMapper extends BaseMapper { + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolActivityMapper.xml b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolActivityMapper.xml new file mode 100644 index 00000000..0d68f3ae --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolActivityMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolActivitySignupMapper.xml b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolActivitySignupMapper.xml new file mode 100644 index 00000000..2e285b92 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolActivitySignupMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolContentConfigMapper.xml b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolContentConfigMapper.xml new file mode 100644 index 00000000..90375131 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolContentConfigMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolTagMapper.xml b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolTagMapper.xml new file mode 100644 index 00000000..87c91160 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/mapper/xml/AiolTagMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolActivityService.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolActivityService.java new file mode 100644 index 00000000..51296854 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolActivityService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.aiol.service; + +import org.jeecg.modules.aiol.entity.AiolActivity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 活动 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +public interface IAiolActivityService extends IService { + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolActivitySignupService.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolActivitySignupService.java new file mode 100644 index 00000000..7ec8c42d --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolActivitySignupService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.aiol.service; + +import org.jeecg.modules.aiol.entity.AiolActivitySignup; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 活动报名 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +public interface IAiolActivitySignupService extends IService { + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolCommentService.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolCommentService.java index d299dbb0..84573abd 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolCommentService.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolCommentService.java @@ -1,8 +1,11 @@ package org.jeecg.modules.aiol.service; +import org.jeecg.modules.aiol.dto.CommentWithUserInfo; import org.jeecg.modules.aiol.entity.AiolComment; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * @Description: 评论 * @Author: jeecg-boot @@ -10,5 +13,17 @@ import com.baomidou.mybatisplus.extension.service.IService; * @Version: V1.0 */ public interface IAiolCommentService extends IService { + /** + * 根据目标类型和目标ID查询评论列表(包含用户信息) + * @param targetType 目标类型 + * @param targetId 目标ID + * @return + */ + List getCommentList(String targetType, String targetId); + /** + * 查询所有精选评论列表(包含用户信息) + * @return + */ + List getAllSelectedComments(); } diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolContentConfigService.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolContentConfigService.java new file mode 100644 index 00000000..7eff1682 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolContentConfigService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.aiol.service; + +import org.jeecg.modules.aiol.entity.AiolContentConfig; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 内容配置 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +public interface IAiolContentConfigService extends IService { + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolResourceService.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolResourceService.java index 09744f42..ebd48886 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolResourceService.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolResourceService.java @@ -2,6 +2,10 @@ package org.jeecg.modules.aiol.service; import org.jeecg.modules.aiol.entity.AiolResource; import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.util.Map; /** * @Description: 资源 @@ -10,5 +14,12 @@ import com.baomidou.mybatisplus.extension.service.IService; * @Version: V1.0 */ public interface IAiolResourceService extends IService { - + /** + * 上传视频并切片为 HLS(m3u8+ts),按配置(local|minio|alioss)上传,返回各清晰度的 m3u8 路径/URL + * @param file 上传的视频文件 + * @param request 用于读取 header 或环境配置 + * @return 各清晰度的 m3u8 路径/URL,Map的key为清晰度名称(如"480p", "720p", "1080p"),value为对应的URL + * @throws Exception 处理异常 + */ + Map uploadHls(MultipartFile file, HttpServletRequest request) throws Exception; } diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolTagService.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolTagService.java new file mode 100644 index 00000000..942f59de --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolTagService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.aiol.service; + +import org.jeecg.modules.aiol.entity.AiolTag; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 标签 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +public interface IAiolTagService extends IService { + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolActivityServiceImpl.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolActivityServiceImpl.java new file mode 100644 index 00000000..83e6a2c8 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolActivityServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.aiol.service.impl; + +import org.jeecg.modules.aiol.entity.AiolActivity; +import org.jeecg.modules.aiol.mapper.AiolActivityMapper; +import org.jeecg.modules.aiol.service.IAiolActivityService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 活动 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +@Service +public class AiolActivityServiceImpl extends ServiceImpl implements IAiolActivityService { + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolActivitySignupServiceImpl.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolActivitySignupServiceImpl.java new file mode 100644 index 00000000..02281f76 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolActivitySignupServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.aiol.service.impl; + +import org.jeecg.modules.aiol.entity.AiolActivitySignup; +import org.jeecg.modules.aiol.mapper.AiolActivitySignupMapper; +import org.jeecg.modules.aiol.service.IAiolActivitySignupService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 活动报名 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +@Service +public class AiolActivitySignupServiceImpl extends ServiceImpl implements IAiolActivitySignupService { + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolCommentServiceImpl.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolCommentServiceImpl.java index fded3e86..b477dcb4 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolCommentServiceImpl.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolCommentServiceImpl.java @@ -1,12 +1,23 @@ package org.jeecg.modules.aiol.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.jeecg.modules.aiol.dto.CommentWithUserInfo; import org.jeecg.modules.aiol.entity.AiolComment; +import org.jeecg.modules.aiol.entity.AiolUserInfo; import org.jeecg.modules.aiol.mapper.AiolCommentMapper; +import org.jeecg.modules.aiol.mapper.AiolUserInfoMapper; import org.jeecg.modules.aiol.service.IAiolCommentService; +import org.jeecg.modules.system.entity.SysUser; +import org.jeecg.modules.system.mapper.SysUserMapper; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import java.util.ArrayList; +import java.util.List; + /** * @Description: 评论 * @Author: jeecg-boot @@ -15,5 +26,86 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; */ @Service public class AiolCommentServiceImpl extends ServiceImpl implements IAiolCommentService { + @Autowired + private AiolUserInfoMapper userInfoMapper; + @Autowired + private SysUserMapper sysUserMapper; + @Override + public List getCommentList(String targetType, String targetId) { + // 1. 根据目标类型和目标ID查询评论列表 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("target_type", targetType) + .eq("target_id", targetId) + .orderByDesc("iz_top") // 置顶评论在前 + .orderByDesc("create_time"); // 按时间倒序 + + List comments = this.list(queryWrapper); + + // 2. 根据userid关联查询用户信息,构建包含用户信息的评论列表 + List result = new ArrayList<>(); + for (AiolComment comment : comments) { + CommentWithUserInfo commentWithUser = new CommentWithUserInfo(); + // 复制评论基本信息 + BeanUtils.copyProperties(comment, commentWithUser); + + // 查询用户基本信息 + SysUser sysUser = sysUserMapper.selectById(comment.getUserId()); + if (sysUser != null) { + commentWithUser.setUserName(sysUser.getRealname()); + commentWithUser.setUserAvatar(sysUser.getAvatar()); + + // 查询用户扩展信息 + AiolUserInfo userInfo = userInfoMapper.selectOne( + new QueryWrapper().eq("user_id", comment.getUserId()) + ); + if (userInfo != null) { + commentWithUser.setUserTag(userInfo.getTag()); + } + } + + result.add(commentWithUser); + } + + // 3. 返回评论列表 + return result; + } + + @Override + public List getAllSelectedComments() { + // 1. 查询所有评论,按置顶和时间排序 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("iz_top") // 置顶评论在前 + .orderByDesc("create_time"); // 按时间倒序 + + List comments = this.list(queryWrapper); + + // 2. 根据userid关联查询用户信息,构建包含用户信息的评论列表 + List result = new ArrayList<>(); + for (AiolComment comment : comments) { + CommentWithUserInfo commentWithUser = new CommentWithUserInfo(); + // 复制评论基本信息 + BeanUtils.copyProperties(comment, commentWithUser); + + // 查询用户基本信息 + SysUser sysUser = sysUserMapper.selectById(comment.getUserId()); + if (sysUser != null) { + commentWithUser.setUserName(sysUser.getRealname()); + commentWithUser.setUserAvatar(sysUser.getAvatar()); + + // 查询用户扩展信息 + AiolUserInfo userInfo = userInfoMapper.selectOne( + new QueryWrapper().eq("user_id", comment.getUserId()) + ); + if (userInfo != null) { + commentWithUser.setUserTag(userInfo.getTag()); + } + } + + result.add(commentWithUser); + } + + // 3. 返回评论列表 + return result; + } } diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolContentConfigServiceImpl.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolContentConfigServiceImpl.java new file mode 100644 index 00000000..74ef9176 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolContentConfigServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.aiol.service.impl; + +import org.jeecg.modules.aiol.entity.AiolContentConfig; +import org.jeecg.modules.aiol.mapper.AiolContentConfigMapper; +import org.jeecg.modules.aiol.service.IAiolContentConfigService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 内容配置 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +@Service +public class AiolContentConfigServiceImpl extends ServiceImpl implements IAiolContentConfigService { + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolResourceServiceImpl.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolResourceServiceImpl.java index d71bf717..a98bde8a 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolResourceServiceImpl.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolResourceServiceImpl.java @@ -1,11 +1,34 @@ package org.jeecg.modules.aiol.service.impl; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.util.CommonUtils; +import org.jeecg.common.util.MinioUtil; +import org.jeecg.common.util.SpringContextUtils; +import org.jeecg.common.util.oss.OssBootUtil; import org.jeecg.modules.aiol.entity.AiolResource; import org.jeecg.modules.aiol.mapper.AiolResourceMapper; import org.jeecg.modules.aiol.service.IAiolResourceService; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.stream.Stream; /** * @Description: 资源 @@ -14,6 +37,291 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; * @Version: V1.0 */ @Service +@Slf4j public class AiolResourceServiceImpl extends ServiceImpl implements IAiolResourceService { + /** + * 视频清晰度配置 + */ + @Data + @AllArgsConstructor + public static class VideoQuality { + private String name; // 清晰度名称 + private String outputDir; // 输出目录 + private int width; // 宽度 + private int height; // 高度 + private String bitrate; // 视频比特率 + private String audioRate; // 音频比特率 + } + // 预定义的清晰度配置 + private static final List QUALITY_CONFIGS = Arrays.asList( + new VideoQuality("480p", "480p", 854, 480, "1000k", "96k"), + new VideoQuality("720p", "720p", 1280, 720, "2500k", "128k"), + new VideoQuality("1080p", "1080p", 1920, 1080, "5000k", "192k") + ); + + private static final int SEGMENT_TIME = 10; // HLS切片时长(秒) + private static final ExecutorService executorService = Executors.newFixedThreadPool(3); + + @Override + public Map uploadHls(MultipartFile file, HttpServletRequest request) throws Exception { + // 读取上传类型 + String configUploadType = SpringContextUtils.getApplicationContext().getEnvironment().getProperty("jeecg.uploadType", "minio"); + String uploadType = configUploadType; + + // 1) 保存临时原始视频 + String uuid = UUID.randomUUID().toString(); + String tmpRoot = System.getProperty("java.io.tmpdir"); + Path tmpVideoDir = Path.of(tmpRoot, "jeecg", "video", uuid); + Path hlsBaseDir = Path.of(tmpRoot, "jeecg", "hls", uuid); + Files.createDirectories(tmpVideoDir); + Files.createDirectories(hlsBaseDir); + + String original = CommonUtils.getFileName(Objects.requireNonNull(file.getOriginalFilename())); + Path tmpVideoFile = tmpVideoDir.resolve(original); + Files.copy(file.getInputStream(), tmpVideoFile, StandardCopyOption.REPLACE_EXISTING); + + log.info("开始多清晰度视频处理,文件: {}", original); + + try { + // 2) 并行处理多个清晰度 + List>> futures = new ArrayList<>(); + + for (VideoQuality quality : QUALITY_CONFIGS) { + CompletableFuture> future = CompletableFuture.supplyAsync(() -> { + try { + return processVideoQuality(tmpVideoFile, hlsBaseDir, quality, uploadType, uuid); + } catch (Exception e) { + log.error("处理{}清晰度失败", quality.getName(), e); + throw new RuntimeException("处理" + quality.getName() + "清晰度失败: " + e.getMessage()); + } + }, executorService); + futures.add(future); + } + + // 3) 等待所有清晰度处理完成 + CompletableFuture allFutures = CompletableFuture.allOf( + futures.toArray(new CompletableFuture[0]) + ); + + // 设置超时时间为30分钟 + allFutures.get(30, TimeUnit.MINUTES); + + // 4) 收集结果 - 各清晰度的index.m3u8地址 + Map qualityUrls = new HashMap<>(); + for (CompletableFuture> future : futures) { + qualityUrls.putAll(future.get()); + } + + log.info("多清晰度视频处理完成,各清晰度地址: {}", qualityUrls); + return qualityUrls; + + } finally { + // 清理临时文件 + deleteQuietly(hlsBaseDir.toFile()); + deleteQuietly(tmpVideoDir.toFile()); + } + } + + /** + * 处理单个清晰度的视频切片 + */ + private Map processVideoQuality(Path inputFile, Path hlsBaseDir, VideoQuality quality, String uploadType, String uuid) throws Exception { + log.info("开始处理 {} 清晰度...", quality.getName()); + + // 创建清晰度输出目录 + Path outputDir = hlsBaseDir.resolve(quality.getOutputDir()); + Files.createDirectories(outputDir); + + Path playlistPath = outputDir.resolve("index.m3u8"); + + // 构建FFmpeg命令 - 参考Go代码 + List args = Arrays.asList( + "ffmpeg", "-i", inputFile.toString(), + "-vf", String.format("scale=%d:%d", quality.getWidth(), quality.getHeight()), + "-c:v", "libx264", + "-b:v", quality.getBitrate(), + "-c:a", "aac", + "-b:a", quality.getAudioRate(), + "-hls_time", String.valueOf(SEGMENT_TIME), + "-hls_playlist_type", "vod", + "-hls_segment_filename", outputDir.resolve("segment%d.ts").toString(), + "-y", // 覆盖已存在的文件 + playlistPath.toString() + ); + + // 执行FFmpeg并处理日志 + executeFFmpegWithLogging(args, quality.getName()); + + log.info("{} 清晰度处理完成", quality.getName()); + + // 上传切片文件 + return uploadQualityFiles(outputDir, quality, uploadType, uuid); + } + + /** + * 上传单个清晰度的所有文件 + */ + private Map uploadQualityFiles(Path outputDir, VideoQuality quality, String uploadType, String uuid) throws Exception { + Map urls = new HashMap<>(); + String basePrefix = "video/hls/" + uuid + "/" + quality.getOutputDir(); + String m3u8Url = ""; + + try (Stream paths = Files.list(outputDir)) { + for (Path file : (Iterable) paths::iterator) { + if (!Files.isRegularFile(file)) continue; + + String fileName = file.getFileName().toString(); + String relativePath = basePrefix + "/" + fileName; + + try (InputStream in = Files.newInputStream(file)) { + String fileUrl = ""; + if ("minio".equals(uploadType)) { + fileUrl = MinioUtil.upload(in, relativePath); + } else if ("alioss".equals(uploadType)) { + OssBootUtil.upload(in, relativePath); + fileUrl = relativePath; // 可在网关拼域名 + } else { + // 本地存储 + String uploadpath = SpringContextUtils.getApplicationContext().getEnvironment().getProperty("jeecg.path.upload"); + Path target = Path.of(uploadpath, relativePath); + Files.createDirectories(target.getParent()); + Files.copy(file, target, StandardCopyOption.REPLACE_EXISTING); + fileUrl = relativePath; + } + + if (fileName.endsWith(".m3u8")) { + m3u8Url = fileUrl; + } + } + } + } + + urls.put(quality.getName(), m3u8Url); + return urls; + } + + /** + * 执行FFmpeg命令并处理日志输出 + */ + private void executeFFmpegWithLogging(List args, String qualityName) throws Exception { + // 打印FFmpeg命令 + log.info("执行FFmpeg命令[{}]: {}", qualityName, String.join(" ", args)); + + ProcessBuilder pb = new ProcessBuilder(args); + pb.redirectErrorStream(true); // 将错误输出重定向到标准输出 + Process process = pb.start(); + + // 使用单独的线程来读取FFmpeg输出,避免阻塞 + StringBuilder ffmpegOutput = new StringBuilder(); + Thread logThread = new Thread(() -> { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { + String line; + while ((line = reader.readLine()) != null) { + synchronized (ffmpegOutput) { + ffmpegOutput.append(line).append("\n"); + } + + // 输出详细日志到DEBUG级别 + log.debug("FFmpeg[{}]: {}", qualityName, line); + + // 过滤并输出关键进度信息 + if (line.contains("frame=") && line.contains("time=")) { + // 提取进度信息 + String progressInfo = extractProgressInfo(line); + if (progressInfo != null) { + log.info("FFmpeg进度[{}]: {}", qualityName, progressInfo); + } + } + + // 输出警告和错误信息 + if (line.toLowerCase().contains("warning") || line.toLowerCase().contains("error")) { + log.warn("FFmpeg[{}]: {}", qualityName, line); + } + + // 输出关键状态信息 + if (line.contains("Stream mapping:") || line.contains("Press [q] to stop") || + line.contains("video:") || line.contains("audio:")) { + log.info("FFmpeg[{}]: {}", qualityName, line); + } + } + } catch (Exception e) { + log.error("读取FFmpeg输出时发生错误[{}]", qualityName, e); + } + }); + + logThread.setDaemon(true); + logThread.start(); + + // 等待进程完成 + boolean finished = process.waitFor(15, TimeUnit.MINUTES); + int exitCode = process.exitValue(); + + // 等待日志线程完成 + logThread.join(5000); // 最多等待5秒 + + if (!finished || exitCode != 0) { + synchronized (ffmpegOutput) { + log.error("FFmpeg处理[{}]失败,退出码: {}", qualityName, exitCode); + log.error("FFmpeg完整输出[{}]:\n{}", qualityName, ffmpegOutput.toString()); + } + throw new RuntimeException(String.format("FFmpeg处理%s失败,退出码: %d", qualityName, exitCode)); + } + + log.info("FFmpeg处理[{}]成功完成", qualityName); + } + + /** + * 从FFmpeg输出行中提取进度信息 + */ + private String extractProgressInfo(String line) { + try { + // FFmpeg进度行格式示例: + // frame= 1234 fps= 25 q=23.0 size= 12345kB time=00:01:23.45 bitrate=1234.5kbits/s speed=1.23x + if (line.contains("time=") && line.contains("bitrate=")) { + // 提取时间和比特率信息 + String time = ""; + String bitrate = ""; + String speed = ""; + String frame = ""; + + String[] parts = line.split("\\s+"); + for (String part : parts) { + if (part.startsWith("time=")) { + time = part.substring(5); + } else if (part.startsWith("bitrate=")) { + bitrate = part.substring(8); + } else if (part.startsWith("speed=")) { + speed = part.substring(6); + } else if (part.startsWith("frame=")) { + frame = part.substring(6); + } + } + + if (!time.isEmpty()) { + return String.format("frame=%s time=%s bitrate=%s speed=%s", frame, time, bitrate, speed); + } + } + } catch (Exception e) { + // 解析失败时忽略,返回原始行 + return line.trim(); + } + return null; + } + + + + /** 删除临时目录文件 */ + private static void deleteQuietly(File file) { + try { + if (file == null || !file.exists()) return; + if (file.isDirectory()) { + File[] children = file.listFiles(); + if (children != null) { + for (File c : children) deleteQuietly(c); + } + } + file.delete(); + } catch (Exception ignored) {} + } } diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolTagServiceImpl.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolTagServiceImpl.java new file mode 100644 index 00000000..93f6ea8e --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolTagServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.aiol.service.impl; + +import org.jeecg.modules.aiol.entity.AiolTag; +import org.jeecg.modules.aiol.mapper.AiolTagMapper; +import org.jeecg.modules.aiol.service.IAiolTagService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 标签 + * @Author: jeecg-boot + * @Date: 2025-08-31 + * @Version: V1.0 + */ +@Service +public class AiolTagServiceImpl extends ServiceImpl implements IAiolTagService { + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivityForm.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivityForm.vue new file mode 100644 index 00000000..ea701eb2 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivityForm.vue @@ -0,0 +1,133 @@ + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivityList.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivityList.vue new file mode 100644 index 00000000..fef2ee05 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivityList.vue @@ -0,0 +1,44 @@ + + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivitySignupForm.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivitySignupForm.vue new file mode 100644 index 00000000..08144839 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivitySignupForm.vue @@ -0,0 +1,113 @@ + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivitySignupList.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivitySignupList.vue new file mode 100644 index 00000000..84b266d2 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolActivitySignupList.vue @@ -0,0 +1,44 @@ + + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolContentConfigForm.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolContentConfigForm.vue new file mode 100644 index 00000000..e93f4e38 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolContentConfigForm.vue @@ -0,0 +1,101 @@ + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolContentConfigList.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolContentConfigList.vue new file mode 100644 index 00000000..7768d211 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolContentConfigList.vue @@ -0,0 +1,44 @@ + + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolTagForm.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolTagForm.vue new file mode 100644 index 00000000..5fdabe57 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolTagForm.vue @@ -0,0 +1,101 @@ + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolTagList.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolTagList.vue new file mode 100644 index 00000000..fc5b2bc2 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp/AiolTagList.vue @@ -0,0 +1,44 @@ + + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivityData.ts b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivityData.ts new file mode 100644 index 00000000..e1ce02d2 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivityData.ts @@ -0,0 +1,61 @@ +import { render } from '@/common/renderUtils'; +//列表数据 +export const columns = [ + { + title: '标题', + align:"center", + dataIndex: 'title' + }, + { + title: '介绍', + align:"center", + dataIndex: 'introduction', + }, + { + title: '说明图片', + align:"center", + dataIndex: 'imgs', + customRender:render.renderImage, + }, + { + title: '头图', + align:"center", + dataIndex: 'banner', + customRender:render.renderImage, + }, + { + title: '介绍视频', + align:"center", + dataIndex: 'video', + }, + { + title: '报名人数上限', + align:"center", + dataIndex: 'maxNum' + }, + { + title: '开始时间', + align:"center", + dataIndex: 'startTime' + }, + { + title: '结束时间', + align:"center", + dataIndex: 'endTime' + }, + { + title: '扩展字段', + align:"center", + dataIndex: 'extra' + }, + { + title: '附件', + align:"center", + dataIndex: 'attachment', + }, + { + title: '状态', + align:"center", + dataIndex: 'status_dictText' + }, +]; \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivityForm.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivityForm.vue new file mode 100644 index 00000000..51654f23 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivityForm.vue @@ -0,0 +1,326 @@ + +{ +layout: 'default', +style: { +navigationStyle: 'custom', +navigationBarTitleText: '活动', +}, +} + + + + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivityList.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivityList.vue new file mode 100644 index 00000000..d6e24c7d --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivityList.vue @@ -0,0 +1,148 @@ + +{ +layout: 'default', +style: { +navigationBarTitleText: '活动', +navigationStyle: 'custom', +}, +} + + + + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivitySignupData.ts b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivitySignupData.ts new file mode 100644 index 00000000..f2480665 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivitySignupData.ts @@ -0,0 +1,34 @@ +import { render } from '@/common/renderUtils'; +//列表数据 +export const columns = [ + { + title: '姓名', + align:"center", + dataIndex: 'name' + }, + { + title: '年龄', + align:"center", + dataIndex: 'age' + }, + { + title: '手机号', + align:"center", + dataIndex: 'phone' + }, + { + title: '邮箱', + align:"center", + dataIndex: 'email' + }, + { + title: '扩展字段', + align:"center", + dataIndex: 'extra' + }, + { + title: '附件', + align:"center", + dataIndex: 'attachment' + }, +]; \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivitySignupForm.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivitySignupForm.vue new file mode 100644 index 00000000..313e5176 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivitySignupForm.vue @@ -0,0 +1,274 @@ + +{ +layout: 'default', +style: { +navigationStyle: 'custom', +navigationBarTitleText: '活动报名', +}, +} + + + + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivitySignupList.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivitySignupList.vue new file mode 100644 index 00000000..30785394 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolActivitySignupList.vue @@ -0,0 +1,148 @@ + +{ +layout: 'default', +style: { +navigationBarTitleText: '活动报名', +navigationStyle: 'custom', +}, +} + + + + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolContentConfigData.ts b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolContentConfigData.ts new file mode 100644 index 00000000..bf653a5e --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolContentConfigData.ts @@ -0,0 +1,24 @@ +import { render } from '@/common/renderUtils'; +//列表数据 +export const columns = [ + { + title: '配置标识', + align:"center", + dataIndex: 'contentKey' + }, + { + title: '配置值', + align:"center", + dataIndex: 'contentValue' + }, + { + title: '值类型', + align:"center", + dataIndex: 'valueType' + }, + { + title: '描述', + align:"center", + dataIndex: 'description' + }, +]; \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolContentConfigForm.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolContentConfigForm.vue new file mode 100644 index 00000000..904d6cf2 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolContentConfigForm.vue @@ -0,0 +1,248 @@ + +{ +layout: 'default', +style: { +navigationStyle: 'custom', +navigationBarTitleText: '内容配置', +}, +} + + + + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolContentConfigList.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolContentConfigList.vue new file mode 100644 index 00000000..764d516c --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolContentConfigList.vue @@ -0,0 +1,148 @@ + +{ +layout: 'default', +style: { +navigationBarTitleText: '内容配置', +navigationStyle: 'custom', +}, +} + + + + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolTagData.ts b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolTagData.ts new file mode 100644 index 00000000..cffe6905 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolTagData.ts @@ -0,0 +1,24 @@ +import { render } from '@/common/renderUtils'; +//列表数据 +export const columns = [ + { + title: '标签名', + align:"center", + dataIndex: 'name' + }, + { + title: '目标类型', + align:"center", + dataIndex: 'targetType' + }, + { + title: '目标id', + align:"center", + dataIndex: 'targetId' + }, + { + title: '描述', + align:"center", + dataIndex: 'description' + }, +]; \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolTagForm.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolTagForm.vue new file mode 100644 index 00000000..a924280e --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolTagForm.vue @@ -0,0 +1,248 @@ + +{ +layout: 'default', +style: { +navigationStyle: 'custom', +navigationBarTitleText: '标签', +}, +} + + + + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolTagList.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolTagList.vue new file mode 100644 index 00000000..e55a6800 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/uniapp3/AiolTagList.vue @@ -0,0 +1,148 @@ + +{ +layout: 'default', +style: { +navigationBarTitleText: '标签', +navigationStyle: 'custom', +}, +} + + + + + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivity.api.ts b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivity.api.ts new file mode 100644 index 00000000..d9150cdf --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivity.api.ts @@ -0,0 +1,64 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/aiol/aiolActivity/list', + save='/aiol/aiolActivity/add', + edit='/aiol/aiolActivity/edit', + deleteOne = '/aiol/aiolActivity/delete', + deleteBatch = '/aiol/aiolActivity/deleteBatch', + importExcel = '/aiol/aiolActivity/importExcel', + exportXls = '/aiol/aiolActivity/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivity.data.ts b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivity.data.ts new file mode 100644 index 00000000..766b2385 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivity.data.ts @@ -0,0 +1,179 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +import { getWeekMonthQuarterYear } from '/@/utils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '标题', + align:"center", + dataIndex: 'title' + }, + { + title: '介绍', + align:"center", + dataIndex: 'introduction', + }, + { + title: '说明图片', + align:"center", + dataIndex: 'imgs', + customRender:render.renderImage, + }, + { + title: '头图', + align:"center", + dataIndex: 'banner', + customRender:render.renderImage, + }, + { + title: '介绍视频', + align:"center", + dataIndex: 'video', + }, + { + title: '报名人数上限', + align:"center", + dataIndex: 'maxNum' + }, + { + title: '开始时间', + align:"center", + dataIndex: 'startTime' + }, + { + title: '结束时间', + align:"center", + dataIndex: 'endTime' + }, + { + title: '扩展字段', + align:"center", + dataIndex: 'extra' + }, + { + title: '附件', + align:"center", + dataIndex: 'attachment', + }, + { + title: '状态', + align:"center", + dataIndex: 'status_dictText' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '标题', + field: 'title', + component: 'Input', + }, + { + label: '介绍', + field: 'introduction', + component: 'JEditor', + }, + { + label: '说明图片', + field: 'imgs', + component: 'JImageUpload', + componentProps:{ + fileMax: 0 + }, + }, + { + label: '头图', + field: 'banner', + component: 'JImageUpload', + componentProps:{ + fileMax: 0 + }, + }, + { + label: '介绍视频', + field: 'video', + component: 'JUpload', + componentProps:{ + }, + }, + { + label: '报名人数上限', + field: 'maxNum', + component: 'InputNumber', + }, + { + label: '开始时间', + field: 'startTime', + component: 'DatePicker', + componentProps: { + showTime: true, + valueFormat: 'YYYY-MM-DD HH:mm:ss' + }, + }, + { + label: '结束时间', + field: 'endTime', + component: 'DatePicker', + componentProps: { + showTime: true, + valueFormat: 'YYYY-MM-DD HH:mm:ss' + }, + }, + { + label: '扩展字段', + field: 'extra', + component: 'Input', + }, + { + label: '附件', + field: 'attachment', + component: 'JUpload', + componentProps:{ + }, + }, + { + label: '状态', + field: 'status', + component: 'JDictSelectTag', + componentProps:{ + dictCode:"course_status", + type: "radio" + }, + }, + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + +// 高级查询数据 +export const superQuerySchema = { + title: {title: '标题',order: 0,view: 'text', type: 'string',}, + introduction: {title: '介绍',order: 1,view: 'umeditor', type: 'string',}, + imgs: {title: '说明图片',order: 2,view: 'image', type: 'string',}, + banner: {title: '头图',order: 3,view: 'image', type: 'string',}, + video: {title: '介绍视频',order: 4,view: 'file', type: 'string',}, + maxNum: {title: '报名人数上限',order: 5,view: 'number', type: 'number',}, + startTime: {title: '开始时间',order: 6,view: 'datetime', type: 'string',}, + endTime: {title: '结束时间',order: 7,view: 'datetime', type: 'string',}, + extra: {title: '扩展字段',order: 8,view: 'text', type: 'string',}, + attachment: {title: '附件',order: 9,view: 'file', type: 'string',}, + status: {title: '状态',order: 10,view: 'radio', type: 'string',dictCode: 'course_status',}, +}; + +/** +* 流程表单调用这个方法获取formSchema +* @param param +*/ +export function getBpmFormSchema(_formData): FormSchema[]{ + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivityList.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivityList.vue new file mode 100644 index 00000000..4a09f332 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivityList.vue @@ -0,0 +1,220 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivitySignup.api.ts b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivitySignup.api.ts new file mode 100644 index 00000000..a4a763c8 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivitySignup.api.ts @@ -0,0 +1,64 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/aiol/aiolActivitySignup/list', + save='/aiol/aiolActivitySignup/add', + edit='/aiol/aiolActivitySignup/edit', + deleteOne = '/aiol/aiolActivitySignup/delete', + deleteBatch = '/aiol/aiolActivitySignup/deleteBatch', + importExcel = '/aiol/aiolActivitySignup/importExcel', + exportXls = '/aiol/aiolActivitySignup/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivitySignup.data.ts b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivitySignup.data.ts new file mode 100644 index 00000000..5fd91f42 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivitySignup.data.ts @@ -0,0 +1,100 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +import { getWeekMonthQuarterYear } from '/@/utils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '姓名', + align:"center", + dataIndex: 'name' + }, + { + title: '年龄', + align:"center", + dataIndex: 'age' + }, + { + title: '手机号', + align:"center", + dataIndex: 'phone' + }, + { + title: '邮箱', + align:"center", + dataIndex: 'email' + }, + { + title: '扩展字段', + align:"center", + dataIndex: 'extra' + }, + { + title: '附件', + align:"center", + dataIndex: 'attachment' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '姓名', + field: 'name', + component: 'Input', + }, + { + label: '年龄', + field: 'age', + component: 'Input', + }, + { + label: '手机号', + field: 'phone', + component: 'Input', + }, + { + label: '邮箱', + field: 'email', + component: 'Input', + }, + { + label: '扩展字段', + field: 'extra', + component: 'Input', + }, + { + label: '附件', + field: 'attachment', + component: 'Input', + }, + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + +// 高级查询数据 +export const superQuerySchema = { + name: {title: '姓名',order: 0,view: 'text', type: 'string',}, + age: {title: '年龄',order: 1,view: 'text', type: 'string',}, + phone: {title: '手机号',order: 2,view: 'text', type: 'string',}, + email: {title: '邮箱',order: 3,view: 'text', type: 'string',}, + extra: {title: '扩展字段',order: 4,view: 'text', type: 'string',}, + attachment: {title: '附件',order: 5,view: 'text', type: 'string',}, +}; + +/** +* 流程表单调用这个方法获取formSchema +* @param param +*/ +export function getBpmFormSchema(_formData): FormSchema[]{ + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivitySignupList.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivitySignupList.vue new file mode 100644 index 00000000..6a559dc9 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolActivitySignupList.vue @@ -0,0 +1,206 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolContentConfig.api.ts b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolContentConfig.api.ts new file mode 100644 index 00000000..1b2a989c --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolContentConfig.api.ts @@ -0,0 +1,64 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/aiol/aiolContentConfig/list', + save='/aiol/aiolContentConfig/add', + edit='/aiol/aiolContentConfig/edit', + deleteOne = '/aiol/aiolContentConfig/delete', + deleteBatch = '/aiol/aiolContentConfig/deleteBatch', + importExcel = '/aiol/aiolContentConfig/importExcel', + exportXls = '/aiol/aiolContentConfig/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolContentConfig.data.ts b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolContentConfig.data.ts new file mode 100644 index 00000000..93bf6c15 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolContentConfig.data.ts @@ -0,0 +1,78 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +import { getWeekMonthQuarterYear } from '/@/utils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '配置标识', + align:"center", + dataIndex: 'contentKey' + }, + { + title: '配置值', + align:"center", + dataIndex: 'contentValue' + }, + { + title: '值类型', + align:"center", + dataIndex: 'valueType' + }, + { + title: '描述', + align:"center", + dataIndex: 'description' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '配置标识', + field: 'contentKey', + component: 'Input', + }, + { + label: '配置值', + field: 'contentValue', + component: 'Input', + }, + { + label: '值类型', + field: 'valueType', + component: 'Input', + }, + { + label: '描述', + field: 'description', + component: 'Input', + }, + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + +// 高级查询数据 +export const superQuerySchema = { + contentKey: {title: '配置标识',order: 0,view: 'text', type: 'string',}, + contentValue: {title: '配置值',order: 1,view: 'text', type: 'string',}, + valueType: {title: '值类型',order: 2,view: 'text', type: 'string',}, + description: {title: '描述',order: 3,view: 'text', type: 'string',}, +}; + +/** +* 流程表单调用这个方法获取formSchema +* @param param +*/ +export function getBpmFormSchema(_formData): FormSchema[]{ + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolContentConfigList.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolContentConfigList.vue new file mode 100644 index 00000000..0a81ff0d --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolContentConfigList.vue @@ -0,0 +1,206 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolTag.api.ts b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolTag.api.ts new file mode 100644 index 00000000..dfef9f29 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolTag.api.ts @@ -0,0 +1,64 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/aiol/aiolTag/list', + save='/aiol/aiolTag/add', + edit='/aiol/aiolTag/edit', + deleteOne = '/aiol/aiolTag/delete', + deleteBatch = '/aiol/aiolTag/deleteBatch', + importExcel = '/aiol/aiolTag/importExcel', + exportXls = '/aiol/aiolTag/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolTag.data.ts b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolTag.data.ts new file mode 100644 index 00000000..056609dc --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolTag.data.ts @@ -0,0 +1,78 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +import { getWeekMonthQuarterYear } from '/@/utils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '标签名', + align:"center", + dataIndex: 'name' + }, + { + title: '目标类型', + align:"center", + dataIndex: 'targetType' + }, + { + title: '目标id', + align:"center", + dataIndex: 'targetId' + }, + { + title: '描述', + align:"center", + dataIndex: 'description' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '标签名', + field: 'name', + component: 'Input', + }, + { + label: '目标类型', + field: 'targetType', + component: 'Input', + }, + { + label: '目标id', + field: 'targetId', + component: 'Input', + }, + { + label: '描述', + field: 'description', + component: 'Input', + }, + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + +// 高级查询数据 +export const superQuerySchema = { + name: {title: '标签名',order: 0,view: 'text', type: 'string',}, + targetType: {title: '目标类型',order: 1,view: 'text', type: 'string',}, + targetId: {title: '目标id',order: 2,view: 'text', type: 'string',}, + description: {title: '描述',order: 3,view: 'text', type: 'string',}, +}; + +/** +* 流程表单调用这个方法获取formSchema +* @param param +*/ +export function getBpmFormSchema(_formData): FormSchema[]{ + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolTagList.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolTagList.vue new file mode 100644 index 00000000..f65c3595 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/AiolTagList.vue @@ -0,0 +1,206 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolActivity.sql b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolActivity.sql new file mode 100644 index 00000000..d5d05d73 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolActivity.sql @@ -0,0 +1,26 @@ +-- 注意:该页面对应的前台目录为views/aiol文件夹下 +-- 如果你想更改到其他目录,请修改sql中component字段对应的值 + + +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('202508310532220470', NULL, '活动', '/aiol/aiolActivityList', 'aiol/AiolActivityList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2025-08-31 17:32:47', NULL, NULL, 0); + +-- 权限控制sql +-- 新增 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('202508310532220471', '202508310532220470', '添加活动', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:47', NULL, NULL, 0, 0, '1', 0); +-- 编辑 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('202508310532220472', '202508310532220470', '编辑活动', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:47', NULL, NULL, 0, 0, '1', 0); +-- 删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('202508310532220473', '202508310532220470', '删除活动', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:47', NULL, NULL, 0, 0, '1', 0); +-- 批量删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('202508310532220474', '202508310532220470', '批量删除活动', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:47', NULL, NULL, 0, 0, '1', 0); +-- 导出excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('202508310532220475', '202508310532220470', '导出excel_活动', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:47', NULL, NULL, 0, 0, '1', 0); +-- 导入excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('202508310532220476', '202508310532220470', '导入excel_活动', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:47', NULL, NULL, 0, 0, '1', 0); \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolActivitySignup.sql b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolActivitySignup.sql new file mode 100644 index 00000000..ca976663 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolActivitySignup.sql @@ -0,0 +1,26 @@ +-- 注意:该页面对应的前台目录为views/aiol文件夹下 +-- 如果你想更改到其他目录,请修改sql中component字段对应的值 + + +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('2025083105325940510', NULL, '活动报名', '/aiol/aiolActivitySignupList', 'aiol/AiolActivitySignupList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2025-08-31 17:32:51', NULL, NULL, 0); + +-- 权限控制sql +-- 新增 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105325950511', '2025083105325940510', '添加活动报名', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity_signup:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:51', NULL, NULL, 0, 0, '1', 0); +-- 编辑 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105325950512', '2025083105325940510', '编辑活动报名', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity_signup:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:51', NULL, NULL, 0, 0, '1', 0); +-- 删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105325950513', '2025083105325940510', '删除活动报名', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity_signup:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:51', NULL, NULL, 0, 0, '1', 0); +-- 批量删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105325950514', '2025083105325940510', '批量删除活动报名', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity_signup:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:51', NULL, NULL, 0, 0, '1', 0); +-- 导出excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105325950515', '2025083105325940510', '导出excel_活动报名', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity_signup:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:51', NULL, NULL, 0, 0, '1', 0); +-- 导入excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105325950516', '2025083105325940510', '导入excel_活动报名', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity_signup:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:51', NULL, NULL, 0, 0, '1', 0); \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolContentConfig.sql b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolContentConfig.sql new file mode 100644 index 00000000..ccf34931 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolContentConfig.sql @@ -0,0 +1,26 @@ +-- 注意:该页面对应的前台目录为views/aiol文件夹下 +-- 如果你想更改到其他目录,请修改sql中component字段对应的值 + + +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('2025083105162700080', NULL, '内容配置', '/aiol/aiolContentConfigList', 'aiol/AiolContentConfigList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2025-08-31 17:16:08', NULL, NULL, 0); + +-- 权限控制sql +-- 新增 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105162700081', '2025083105162700080', '添加内容配置', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_content_config:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:16:08', NULL, NULL, 0, 0, '1', 0); +-- 编辑 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105162700082', '2025083105162700080', '编辑内容配置', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_content_config:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:16:08', NULL, NULL, 0, 0, '1', 0); +-- 删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105162700083', '2025083105162700080', '删除内容配置', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_content_config:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:16:08', NULL, NULL, 0, 0, '1', 0); +-- 批量删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105162700084', '2025083105162700080', '批量删除内容配置', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_content_config:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:16:08', NULL, NULL, 0, 0, '1', 0); +-- 导出excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105162700085', '2025083105162700080', '导出excel_内容配置', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_content_config:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:16:08', NULL, NULL, 0, 0, '1', 0); +-- 导入excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105162700086', '2025083105162700080', '导入excel_内容配置', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_content_config:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:16:08', NULL, NULL, 0, 0, '1', 0); \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolTag.sql b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolTag.sql new file mode 100644 index 00000000..93b49769 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/V20250831_1__menu_insert_AiolTag.sql @@ -0,0 +1,26 @@ +-- 注意:该页面对应的前台目录为views/aiol文件夹下 +-- 如果你想更改到其他目录,请修改sql中component字段对应的值 + + +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('2025083105371050490', NULL, '标签', '/aiol/aiolTagList', 'aiol/AiolTagList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2025-08-31 17:37:49', NULL, NULL, 0); + +-- 权限控制sql +-- 新增 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105371050491', '2025083105371050490', '添加标签', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_tag:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:37:49', NULL, NULL, 0, 0, '1', 0); +-- 编辑 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105371050492', '2025083105371050490', '编辑标签', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_tag:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:37:49', NULL, NULL, 0, 0, '1', 0); +-- 删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105371050493', '2025083105371050490', '删除标签', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_tag:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:37:49', NULL, NULL, 0, 0, '1', 0); +-- 批量删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105371050494', '2025083105371050490', '批量删除标签', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_tag:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:37:49', NULL, NULL, 0, 0, '1', 0); +-- 导出excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105371050495', '2025083105371050490', '导出excel_标签', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_tag:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:37:49', NULL, NULL, 0, 0, '1', 0); +-- 导入excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105371050496', '2025083105371050490', '导入excel_标签', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_tag:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:37:49', NULL, NULL, 0, 0, '1', 0); \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivityForm.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivityForm.vue new file mode 100644 index 00000000..66b7ca9a --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivityForm.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivityModal.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivityModal.vue new file mode 100644 index 00000000..c1742dfc --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivityModal.vue @@ -0,0 +1,99 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivitySignupForm.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivitySignupForm.vue new file mode 100644 index 00000000..6b9abdc3 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivitySignupForm.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivitySignupModal.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivitySignupModal.vue new file mode 100644 index 00000000..b2ac54da --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolActivitySignupModal.vue @@ -0,0 +1,99 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolContentConfigForm.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolContentConfigForm.vue new file mode 100644 index 00000000..1a2c9dd7 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolContentConfigForm.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolContentConfigModal.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolContentConfigModal.vue new file mode 100644 index 00000000..1235974d --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolContentConfigModal.vue @@ -0,0 +1,99 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolTagForm.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolTagForm.vue new file mode 100644 index 00000000..a8d6d75d --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolTagForm.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolTagModal.vue b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolTagModal.vue new file mode 100644 index 00000000..b7d24175 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/vue3/components/AiolTagModal.vue @@ -0,0 +1,99 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/controller/ActivityBizController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/controller/ActivityBizController.java index 9a92e455..ebaae7f5 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/controller/ActivityBizController.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/controller/ActivityBizController.java @@ -16,7 +16,7 @@ import org.jeecg.config.shiro.IgnoreAuth; import org.jeecg.modules.biz.service.ActivityBizService; import org.jeecg.modules.gen.activity.entity.Activity; import org.jeecg.modules.gen.aioltag.entity.AiolTag; -import org.jeecg.modules.gen.aioltag.mapper.AiolTagMapper; +import org.jeecg.modules.gen.aioltag.mapper.AiolTagMapper1; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @RestController @@ -28,7 +28,7 @@ public class ActivityBizController { @Autowired private ActivityBizService activityBizService; @Autowired - private AiolTagMapper aiolTagMapper; + private AiolTagMapper1 aiolTagMapper; @GetMapping("/list") @Operation(summary = "查询活动列表") diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/controller/AiolTagController1.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/controller/AiolTagController1.java new file mode 100644 index 00000000..7b6e745a --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/controller/AiolTagController1.java @@ -0,0 +1,165 @@ +package org.jeecg.modules.gen.aioltag.controller; + +import java.util.Arrays; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.gen.aioltag.entity.AiolTag; +import org.jeecg.modules.gen.aioltag.service.IAiolTagService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.apache.shiro.authz.annotation.RequiresPermissions; + /** + * @Description: 标签 + * @Author: jeecg-boot + * @Date: 2025-08-28 + * @Version: V1.0 + */ +@Tag(name="标签") +@RestController +@RequestMapping("/gen/aioltag/aiolTag") +@Slf4j +public class AiolTagController1 extends JeecgController { + @Autowired + private IAiolTagService aiolTagService; + + /** + * 分页列表查询 + * + * @param aiolTag + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "标签-分页列表查询") + @Operation(summary="标签-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(AiolTag aiolTag, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + + + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(aiolTag, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = aiolTagService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param aiolTag + * @return + */ + @AutoLog(value = "标签-添加") + @Operation(summary="标签-添加") + @RequiresPermissions("gen.aioltag:aiol_tag:add") + @PostMapping(value = "/add") + public Result add(@RequestBody AiolTag aiolTag) { + aiolTagService.save(aiolTag); + + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param aiolTag + * @return + */ + @AutoLog(value = "标签-编辑") + @Operation(summary="标签-编辑") + @RequiresPermissions("gen.aioltag:aiol_tag:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody AiolTag aiolTag) { + aiolTagService.updateById(aiolTag); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "标签-通过id删除") + @Operation(summary="标签-通过id删除") + @RequiresPermissions("gen.aioltag:aiol_tag:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + aiolTagService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "标签-批量删除") + @Operation(summary="标签-批量删除") + @RequiresPermissions("gen.aioltag:aiol_tag:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.aiolTagService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "标签-通过id查询") + @Operation(summary="标签-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + AiolTag aiolTag = aiolTagService.getById(id); + if(aiolTag==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(aiolTag); + } + + /** + * 导出excel + * + * @param request + * @param aiolTag + */ + @RequiresPermissions("gen.aioltag:aiol_tag:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, AiolTag aiolTag) { + return super.exportXls(request, aiolTag, AiolTag.class, "标签"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("gen.aioltag:aiol_tag:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, AiolTag.class); + } + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/mapper/AiolTagMapper.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/mapper/AiolTagMapper1.java similarity index 83% rename from jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/mapper/AiolTagMapper.java rename to jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/mapper/AiolTagMapper1.java index 9bad91f3..275f6b5b 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/mapper/AiolTagMapper.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/mapper/AiolTagMapper1.java @@ -12,6 +12,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @Date: 2025-08-28 * @Version: V1.0 */ -public interface AiolTagMapper extends BaseMapper { +public interface AiolTagMapper1 extends BaseMapper { } diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/service/impl/AiolTagServiceImpl.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/service/impl/AiolTagServiceImpl1.java similarity index 70% rename from jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/service/impl/AiolTagServiceImpl.java rename to jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/service/impl/AiolTagServiceImpl1.java index 142e6bd5..b97a8da3 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/service/impl/AiolTagServiceImpl.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/aioltag/service/impl/AiolTagServiceImpl1.java @@ -1,7 +1,7 @@ package org.jeecg.modules.gen.aioltag.service.impl; import org.jeecg.modules.gen.aioltag.entity.AiolTag; -import org.jeecg.modules.gen.aioltag.mapper.AiolTagMapper; +import org.jeecg.modules.gen.aioltag.mapper.AiolTagMapper1; import org.jeecg.modules.gen.aioltag.service.IAiolTagService; import org.springframework.stereotype.Service; @@ -14,6 +14,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; * @Version: V1.0 */ @Service -public class AiolTagServiceImpl extends ServiceImpl implements IAiolTagService { +public class AiolTagServiceImpl1 extends ServiceImpl implements IAiolTagService { } diff --git a/jeecgboot-vue3/src/views/aiol/AiolActivity.api.ts b/jeecgboot-vue3/src/views/aiol/AiolActivity.api.ts new file mode 100644 index 00000000..d9150cdf --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/AiolActivity.api.ts @@ -0,0 +1,64 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/aiol/aiolActivity/list', + save='/aiol/aiolActivity/add', + edit='/aiol/aiolActivity/edit', + deleteOne = '/aiol/aiolActivity/delete', + deleteBatch = '/aiol/aiolActivity/deleteBatch', + importExcel = '/aiol/aiolActivity/importExcel', + exportXls = '/aiol/aiolActivity/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecgboot-vue3/src/views/aiol/AiolActivity.data.ts b/jeecgboot-vue3/src/views/aiol/AiolActivity.data.ts new file mode 100644 index 00000000..766b2385 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/AiolActivity.data.ts @@ -0,0 +1,179 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +import { getWeekMonthQuarterYear } from '/@/utils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '标题', + align:"center", + dataIndex: 'title' + }, + { + title: '介绍', + align:"center", + dataIndex: 'introduction', + }, + { + title: '说明图片', + align:"center", + dataIndex: 'imgs', + customRender:render.renderImage, + }, + { + title: '头图', + align:"center", + dataIndex: 'banner', + customRender:render.renderImage, + }, + { + title: '介绍视频', + align:"center", + dataIndex: 'video', + }, + { + title: '报名人数上限', + align:"center", + dataIndex: 'maxNum' + }, + { + title: '开始时间', + align:"center", + dataIndex: 'startTime' + }, + { + title: '结束时间', + align:"center", + dataIndex: 'endTime' + }, + { + title: '扩展字段', + align:"center", + dataIndex: 'extra' + }, + { + title: '附件', + align:"center", + dataIndex: 'attachment', + }, + { + title: '状态', + align:"center", + dataIndex: 'status_dictText' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '标题', + field: 'title', + component: 'Input', + }, + { + label: '介绍', + field: 'introduction', + component: 'JEditor', + }, + { + label: '说明图片', + field: 'imgs', + component: 'JImageUpload', + componentProps:{ + fileMax: 0 + }, + }, + { + label: '头图', + field: 'banner', + component: 'JImageUpload', + componentProps:{ + fileMax: 0 + }, + }, + { + label: '介绍视频', + field: 'video', + component: 'JUpload', + componentProps:{ + }, + }, + { + label: '报名人数上限', + field: 'maxNum', + component: 'InputNumber', + }, + { + label: '开始时间', + field: 'startTime', + component: 'DatePicker', + componentProps: { + showTime: true, + valueFormat: 'YYYY-MM-DD HH:mm:ss' + }, + }, + { + label: '结束时间', + field: 'endTime', + component: 'DatePicker', + componentProps: { + showTime: true, + valueFormat: 'YYYY-MM-DD HH:mm:ss' + }, + }, + { + label: '扩展字段', + field: 'extra', + component: 'Input', + }, + { + label: '附件', + field: 'attachment', + component: 'JUpload', + componentProps:{ + }, + }, + { + label: '状态', + field: 'status', + component: 'JDictSelectTag', + componentProps:{ + dictCode:"course_status", + type: "radio" + }, + }, + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + +// 高级查询数据 +export const superQuerySchema = { + title: {title: '标题',order: 0,view: 'text', type: 'string',}, + introduction: {title: '介绍',order: 1,view: 'umeditor', type: 'string',}, + imgs: {title: '说明图片',order: 2,view: 'image', type: 'string',}, + banner: {title: '头图',order: 3,view: 'image', type: 'string',}, + video: {title: '介绍视频',order: 4,view: 'file', type: 'string',}, + maxNum: {title: '报名人数上限',order: 5,view: 'number', type: 'number',}, + startTime: {title: '开始时间',order: 6,view: 'datetime', type: 'string',}, + endTime: {title: '结束时间',order: 7,view: 'datetime', type: 'string',}, + extra: {title: '扩展字段',order: 8,view: 'text', type: 'string',}, + attachment: {title: '附件',order: 9,view: 'file', type: 'string',}, + status: {title: '状态',order: 10,view: 'radio', type: 'string',dictCode: 'course_status',}, +}; + +/** +* 流程表单调用这个方法获取formSchema +* @param param +*/ +export function getBpmFormSchema(_formData): FormSchema[]{ + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/AiolActivityList.vue b/jeecgboot-vue3/src/views/aiol/AiolActivityList.vue new file mode 100644 index 00000000..4a09f332 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/AiolActivityList.vue @@ -0,0 +1,220 @@ + + + + + \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/AiolActivitySignup.api.ts b/jeecgboot-vue3/src/views/aiol/AiolActivitySignup.api.ts new file mode 100644 index 00000000..a4a763c8 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/AiolActivitySignup.api.ts @@ -0,0 +1,64 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/aiol/aiolActivitySignup/list', + save='/aiol/aiolActivitySignup/add', + edit='/aiol/aiolActivitySignup/edit', + deleteOne = '/aiol/aiolActivitySignup/delete', + deleteBatch = '/aiol/aiolActivitySignup/deleteBatch', + importExcel = '/aiol/aiolActivitySignup/importExcel', + exportXls = '/aiol/aiolActivitySignup/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecgboot-vue3/src/views/aiol/AiolActivitySignup.data.ts b/jeecgboot-vue3/src/views/aiol/AiolActivitySignup.data.ts new file mode 100644 index 00000000..5fd91f42 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/AiolActivitySignup.data.ts @@ -0,0 +1,100 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +import { getWeekMonthQuarterYear } from '/@/utils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '姓名', + align:"center", + dataIndex: 'name' + }, + { + title: '年龄', + align:"center", + dataIndex: 'age' + }, + { + title: '手机号', + align:"center", + dataIndex: 'phone' + }, + { + title: '邮箱', + align:"center", + dataIndex: 'email' + }, + { + title: '扩展字段', + align:"center", + dataIndex: 'extra' + }, + { + title: '附件', + align:"center", + dataIndex: 'attachment' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '姓名', + field: 'name', + component: 'Input', + }, + { + label: '年龄', + field: 'age', + component: 'Input', + }, + { + label: '手机号', + field: 'phone', + component: 'Input', + }, + { + label: '邮箱', + field: 'email', + component: 'Input', + }, + { + label: '扩展字段', + field: 'extra', + component: 'Input', + }, + { + label: '附件', + field: 'attachment', + component: 'Input', + }, + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + +// 高级查询数据 +export const superQuerySchema = { + name: {title: '姓名',order: 0,view: 'text', type: 'string',}, + age: {title: '年龄',order: 1,view: 'text', type: 'string',}, + phone: {title: '手机号',order: 2,view: 'text', type: 'string',}, + email: {title: '邮箱',order: 3,view: 'text', type: 'string',}, + extra: {title: '扩展字段',order: 4,view: 'text', type: 'string',}, + attachment: {title: '附件',order: 5,view: 'text', type: 'string',}, +}; + +/** +* 流程表单调用这个方法获取formSchema +* @param param +*/ +export function getBpmFormSchema(_formData): FormSchema[]{ + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/AiolActivitySignupList.vue b/jeecgboot-vue3/src/views/aiol/AiolActivitySignupList.vue new file mode 100644 index 00000000..6a559dc9 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/AiolActivitySignupList.vue @@ -0,0 +1,206 @@ + + + + + \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/AiolContentConfig.api.ts b/jeecgboot-vue3/src/views/aiol/AiolContentConfig.api.ts new file mode 100644 index 00000000..1b2a989c --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/AiolContentConfig.api.ts @@ -0,0 +1,64 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/aiol/aiolContentConfig/list', + save='/aiol/aiolContentConfig/add', + edit='/aiol/aiolContentConfig/edit', + deleteOne = '/aiol/aiolContentConfig/delete', + deleteBatch = '/aiol/aiolContentConfig/deleteBatch', + importExcel = '/aiol/aiolContentConfig/importExcel', + exportXls = '/aiol/aiolContentConfig/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecgboot-vue3/src/views/aiol/AiolContentConfig.data.ts b/jeecgboot-vue3/src/views/aiol/AiolContentConfig.data.ts new file mode 100644 index 00000000..93bf6c15 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/AiolContentConfig.data.ts @@ -0,0 +1,78 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +import { getWeekMonthQuarterYear } from '/@/utils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '配置标识', + align:"center", + dataIndex: 'contentKey' + }, + { + title: '配置值', + align:"center", + dataIndex: 'contentValue' + }, + { + title: '值类型', + align:"center", + dataIndex: 'valueType' + }, + { + title: '描述', + align:"center", + dataIndex: 'description' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '配置标识', + field: 'contentKey', + component: 'Input', + }, + { + label: '配置值', + field: 'contentValue', + component: 'Input', + }, + { + label: '值类型', + field: 'valueType', + component: 'Input', + }, + { + label: '描述', + field: 'description', + component: 'Input', + }, + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + +// 高级查询数据 +export const superQuerySchema = { + contentKey: {title: '配置标识',order: 0,view: 'text', type: 'string',}, + contentValue: {title: '配置值',order: 1,view: 'text', type: 'string',}, + valueType: {title: '值类型',order: 2,view: 'text', type: 'string',}, + description: {title: '描述',order: 3,view: 'text', type: 'string',}, +}; + +/** +* 流程表单调用这个方法获取formSchema +* @param param +*/ +export function getBpmFormSchema(_formData): FormSchema[]{ + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/AiolContentConfigList.vue b/jeecgboot-vue3/src/views/aiol/AiolContentConfigList.vue new file mode 100644 index 00000000..0a81ff0d --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/AiolContentConfigList.vue @@ -0,0 +1,206 @@ + + + + + \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/AiolHomeworkSubmit.api.ts b/jeecgboot-vue3/src/views/aiol/AiolHomeworkSubmit.api.ts new file mode 100644 index 00000000..664e216e --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/AiolHomeworkSubmit.api.ts @@ -0,0 +1,64 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/aiol/aiolHomeworkSubmit/list', + save='/aiol/aiolHomeworkSubmit/add', + edit='/aiol/aiolHomeworkSubmit/edit', + deleteOne = '/aiol/aiolHomeworkSubmit/delete', + deleteBatch = '/aiol/aiolHomeworkSubmit/deleteBatch', + importExcel = '/aiol/aiolHomeworkSubmit/importExcel', + exportXls = '/aiol/aiolHomeworkSubmit/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecgboot-vue3/src/views/aiol/AiolHomeworkSubmit.data.ts b/jeecgboot-vue3/src/views/aiol/AiolHomeworkSubmit.data.ts new file mode 100644 index 00000000..7d4f13a1 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/AiolHomeworkSubmit.data.ts @@ -0,0 +1,126 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +import { getWeekMonthQuarterYear } from '/@/utils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '作业id', + align:"center", + dataIndex: 'homeworkId' + }, + { + title: '学生id', + align:"center", + dataIndex: 'studentId' + }, + { + title: '作业内容', + align:"center", + dataIndex: 'content' + }, + { + title: '附件', + align:"center", + dataIndex: 'attachment' + }, + { + title: '得分', + align:"center", + dataIndex: 'score' + }, + { + title: '批改意见', + align:"center", + dataIndex: 'comment' + }, + { + title: '批改时间', + align:"center", + dataIndex: 'gradedTime' + }, + { + title: '状态', + align:"center", + dataIndex: 'status' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '作业id', + field: 'homeworkId', + component: 'Input', + }, + { + label: '学生id', + field: 'studentId', + component: 'Input', + }, + { + label: '作业内容', + field: 'content', + component: 'Input', + }, + { + label: '附件', + field: 'attachment', + component: 'Input', + }, + { + label: '得分', + field: 'score', + component: 'InputNumber', + }, + { + label: '批改意见', + field: 'comment', + component: 'Input', + }, + { + label: '批改时间', + field: 'gradedTime', + component: 'DatePicker', + componentProps: { + showTime: true, + valueFormat: 'YYYY-MM-DD HH:mm:ss' + }, + }, + { + label: '状态', + field: 'status', + component: 'InputNumber', + }, + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + +// 高级查询数据 +export const superQuerySchema = { + homeworkId: {title: '作业id',order: 0,view: 'text', type: 'string',}, + studentId: {title: '学生id',order: 1,view: 'text', type: 'string',}, + content: {title: '作业内容',order: 2,view: 'text', type: 'string',}, + attachment: {title: '附件',order: 3,view: 'text', type: 'string',}, + score: {title: '得分',order: 4,view: 'number', type: 'number',}, + comment: {title: '批改意见',order: 5,view: 'text', type: 'string',}, + gradedTime: {title: '批改时间',order: 6,view: 'datetime', type: 'string',}, + status: {title: '状态',order: 7,view: 'number', type: 'number',}, +}; + +/** +* 流程表单调用这个方法获取formSchema +* @param param +*/ +export function getBpmFormSchema(_formData): FormSchema[]{ + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/AiolHomeworkSubmitList.vue b/jeecgboot-vue3/src/views/aiol/AiolHomeworkSubmitList.vue new file mode 100644 index 00000000..179a3118 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/AiolHomeworkSubmitList.vue @@ -0,0 +1,206 @@ + + + + + \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolActivity.sql b/jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolActivity.sql new file mode 100644 index 00000000..d5d05d73 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolActivity.sql @@ -0,0 +1,26 @@ +-- 注意:该页面对应的前台目录为views/aiol文件夹下 +-- 如果你想更改到其他目录,请修改sql中component字段对应的值 + + +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('202508310532220470', NULL, '活动', '/aiol/aiolActivityList', 'aiol/AiolActivityList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2025-08-31 17:32:47', NULL, NULL, 0); + +-- 权限控制sql +-- 新增 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('202508310532220471', '202508310532220470', '添加活动', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:47', NULL, NULL, 0, 0, '1', 0); +-- 编辑 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('202508310532220472', '202508310532220470', '编辑活动', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:47', NULL, NULL, 0, 0, '1', 0); +-- 删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('202508310532220473', '202508310532220470', '删除活动', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:47', NULL, NULL, 0, 0, '1', 0); +-- 批量删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('202508310532220474', '202508310532220470', '批量删除活动', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:47', NULL, NULL, 0, 0, '1', 0); +-- 导出excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('202508310532220475', '202508310532220470', '导出excel_活动', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:47', NULL, NULL, 0, 0, '1', 0); +-- 导入excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('202508310532220476', '202508310532220470', '导入excel_活动', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:47', NULL, NULL, 0, 0, '1', 0); \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolActivitySignup.sql b/jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolActivitySignup.sql new file mode 100644 index 00000000..ca976663 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolActivitySignup.sql @@ -0,0 +1,26 @@ +-- 注意:该页面对应的前台目录为views/aiol文件夹下 +-- 如果你想更改到其他目录,请修改sql中component字段对应的值 + + +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('2025083105325940510', NULL, '活动报名', '/aiol/aiolActivitySignupList', 'aiol/AiolActivitySignupList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2025-08-31 17:32:51', NULL, NULL, 0); + +-- 权限控制sql +-- 新增 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105325950511', '2025083105325940510', '添加活动报名', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity_signup:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:51', NULL, NULL, 0, 0, '1', 0); +-- 编辑 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105325950512', '2025083105325940510', '编辑活动报名', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity_signup:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:51', NULL, NULL, 0, 0, '1', 0); +-- 删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105325950513', '2025083105325940510', '删除活动报名', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity_signup:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:51', NULL, NULL, 0, 0, '1', 0); +-- 批量删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105325950514', '2025083105325940510', '批量删除活动报名', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity_signup:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:51', NULL, NULL, 0, 0, '1', 0); +-- 导出excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105325950515', '2025083105325940510', '导出excel_活动报名', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity_signup:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:51', NULL, NULL, 0, 0, '1', 0); +-- 导入excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105325950516', '2025083105325940510', '导入excel_活动报名', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_activity_signup:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:32:51', NULL, NULL, 0, 0, '1', 0); \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolContentConfig.sql b/jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolContentConfig.sql new file mode 100644 index 00000000..ccf34931 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolContentConfig.sql @@ -0,0 +1,26 @@ +-- 注意:该页面对应的前台目录为views/aiol文件夹下 +-- 如果你想更改到其他目录,请修改sql中component字段对应的值 + + +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('2025083105162700080', NULL, '内容配置', '/aiol/aiolContentConfigList', 'aiol/AiolContentConfigList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2025-08-31 17:16:08', NULL, NULL, 0); + +-- 权限控制sql +-- 新增 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105162700081', '2025083105162700080', '添加内容配置', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_content_config:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:16:08', NULL, NULL, 0, 0, '1', 0); +-- 编辑 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105162700082', '2025083105162700080', '编辑内容配置', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_content_config:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:16:08', NULL, NULL, 0, 0, '1', 0); +-- 删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105162700083', '2025083105162700080', '删除内容配置', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_content_config:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:16:08', NULL, NULL, 0, 0, '1', 0); +-- 批量删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105162700084', '2025083105162700080', '批量删除内容配置', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_content_config:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:16:08', NULL, NULL, 0, 0, '1', 0); +-- 导出excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105162700085', '2025083105162700080', '导出excel_内容配置', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_content_config:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:16:08', NULL, NULL, 0, 0, '1', 0); +-- 导入excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083105162700086', '2025083105162700080', '导入excel_内容配置', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_content_config:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 17:16:08', NULL, NULL, 0, 0, '1', 0); \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolHomeworkSubmit.sql b/jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolHomeworkSubmit.sql new file mode 100644 index 00000000..499023d1 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/V20250831_1__menu_insert_AiolHomeworkSubmit.sql @@ -0,0 +1,26 @@ +-- 注意:该页面对应的前台目录为views/aiol文件夹下 +-- 如果你想更改到其他目录,请修改sql中component字段对应的值 + + +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('2025083111594860520', NULL, '作业提交', '/aiol/aiolHomeworkSubmitList', 'aiol/AiolHomeworkSubmitList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2025-08-31 11:59:52', NULL, NULL, 0); + +-- 权限控制sql +-- 新增 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083111594860521', '2025083111594860520', '添加作业提交', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_homework_submit:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 11:59:52', NULL, NULL, 0, 0, '1', 0); +-- 编辑 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083111594860522', '2025083111594860520', '编辑作业提交', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_homework_submit:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 11:59:52', NULL, NULL, 0, 0, '1', 0); +-- 删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083111594860523', '2025083111594860520', '删除作业提交', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_homework_submit:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 11:59:52', NULL, NULL, 0, 0, '1', 0); +-- 批量删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083111594870524', '2025083111594860520', '批量删除作业提交', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_homework_submit:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 11:59:52', NULL, NULL, 0, 0, '1', 0); +-- 导出excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083111594870525', '2025083111594860520', '导出excel_作业提交', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_homework_submit:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 11:59:52', NULL, NULL, 0, 0, '1', 0); +-- 导入excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2025083111594870526', '2025083111594860520', '导入excel_作业提交', NULL, NULL, 0, NULL, NULL, 2, 'aiol:aiol_homework_submit:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2025-08-31 11:59:52', NULL, NULL, 0, 0, '1', 0); \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/components/AiolActivityForm.vue b/jeecgboot-vue3/src/views/aiol/components/AiolActivityForm.vue new file mode 100644 index 00000000..66b7ca9a --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/components/AiolActivityForm.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/components/AiolActivityModal.vue b/jeecgboot-vue3/src/views/aiol/components/AiolActivityModal.vue new file mode 100644 index 00000000..c1742dfc --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/components/AiolActivityModal.vue @@ -0,0 +1,99 @@ + + + + + \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/components/AiolActivitySignupForm.vue b/jeecgboot-vue3/src/views/aiol/components/AiolActivitySignupForm.vue new file mode 100644 index 00000000..6b9abdc3 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/components/AiolActivitySignupForm.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/components/AiolActivitySignupModal.vue b/jeecgboot-vue3/src/views/aiol/components/AiolActivitySignupModal.vue new file mode 100644 index 00000000..b2ac54da --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/components/AiolActivitySignupModal.vue @@ -0,0 +1,99 @@ + + + + + \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/components/AiolContentConfigForm.vue b/jeecgboot-vue3/src/views/aiol/components/AiolContentConfigForm.vue new file mode 100644 index 00000000..1a2c9dd7 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/components/AiolContentConfigForm.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/components/AiolContentConfigModal.vue b/jeecgboot-vue3/src/views/aiol/components/AiolContentConfigModal.vue new file mode 100644 index 00000000..1235974d --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/components/AiolContentConfigModal.vue @@ -0,0 +1,99 @@ + + + + + \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/components/AiolHomeworkSubmitForm.vue b/jeecgboot-vue3/src/views/aiol/components/AiolHomeworkSubmitForm.vue new file mode 100644 index 00000000..b6850f46 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/components/AiolHomeworkSubmitForm.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/aiol/components/AiolHomeworkSubmitModal.vue b/jeecgboot-vue3/src/views/aiol/components/AiolHomeworkSubmitModal.vue new file mode 100644 index 00000000..5e7c2771 --- /dev/null +++ b/jeecgboot-vue3/src/views/aiol/components/AiolHomeworkSubmitModal.vue @@ -0,0 +1,99 @@ + + + + + \ No newline at end of file