diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/material/controller/MaterialItemController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/material/controller/MaterialItemController.java new file mode 100644 index 00000000..91c89b8f --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/material/controller/MaterialItemController.java @@ -0,0 +1,208 @@ +package com.budwk.app.zhgh.dayofficework.material.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.zhgh.dayofficework.material.model.MaterialItem; +import com.budwk.app.zhgh.dayofficework.material.model.MaterialType; +import com.budwk.app.zhgh.dayofficework.material.service.MaterialItemService; +import com.budwk.app.zhgh.dayofficework.material.service.MaterialTypeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.SqlExpressionGroup; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.json.Json; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "重大事项") +@At("/platform/material/item") +public class MaterialItemController { + + @Inject + private MaterialItemService itemService; + @Inject + private MaterialTypeService typeService; + + @At("") + @SaCheckPermission("material.item") + @Ok("beetl:/platform/zhgh/dayofficework/material/item/index.html") + public void index() { + } + + @At + @ApiOperation("重大事项展示") + @SaCheckPermission("material.display") + @Ok("beetl:/platform/zhgh/dayofficework/material/display/index.html") + public void displayIndex() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("material.item") + public Result pageData(PageForm pageForm, @Param("typeId") String typeId, @Param("visible") String visible) { + Sql sql = Sqls.create("select mi.id, mi.typeId, mi.title, mi.remark, mi.visible, mi.createdAt, mi.updatedAt, " + + "mt.name as typeName " + + "from material_item mi left join material_type mt on mi.typeId = mt.id $condition"); + Cnd cnd = Cnd.where("mi.delFlag", "=", false).and("mt.delFlag", "=", false); + cnd.andEX("mi.typeId", "=", typeId); + if (StrUtil.isNotBlank(visible)) { + cnd.and("mi.visible", "=", Boolean.parseBoolean(visible)); + } + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.or("mi.title", "like", "%" + pageForm.getSearchKeyword() + "%"); + seg.or("mi.remark", "like", "%" + pageForm.getSearchKeyword() + "%"); + cnd.and(seg); + } + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { + cnd.asc("mt.sort").desc("mi.createdAt"); + } else { + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } + sql.setCondition(cnd); + Pagination pagination = itemService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + @At + @ApiOperation("新增/修改重大事项") + @SaCheckPermission("material.item") + @SLog(tag = "重大事项-事项管理", msg = "新增/修改重大事项") + public Object submit(@Param("data") MaterialItem item) { + if (item.getVisible() == null) { + item.setVisible(true); + } + itemService.insertOrUpdate(item); + return Result.success(); + } + + @At + @ApiOperation("更新重大事项公开状态") + @SaCheckPermission("material.item") + @SLog(tag = "重大事项-事项管理", msg = "更新公开状态") + public Object updateVisible(String id, @Param("visible") String visible) { + if (StrUtil.isBlank(id) || StrUtil.isBlank(visible)) { + return Result.error("参数不能为空"); + } + if (!StrUtil.equalsAnyIgnoreCase(visible, "true", "false")) { + return Result.error("公开状态不正确"); + } + itemService.update( + Chain.make("visible", Boolean.parseBoolean(visible)).add("updatedAt", System.currentTimeMillis()), + Cnd.where(MaterialItem::getId, "=", id).and(MaterialItem::getDelFlag, "=", false) + ); + return Result.success(); + } + + @At + @ApiOperation("删除重大事项") + @SaCheckPermission("material.item") + @SLog(tag = "重大事项-事项管理", msg = "删除重大事项") + public Object delete(String id) { + itemService.vDelete(id); + return Result.success(); + } + + @At + @ApiOperation("查询单个重大事项") + @SaCheckLogin + public Result info(String id) { + MaterialItem item = itemService.fetch(id); + if (item == null || Boolean.TRUE.equals(item.getDelFlag())) { + return Result.error("数据不存在"); + } + NutMap map = org.nutz.lang.Lang.obj2nutmap(item); + MaterialType type = typeService.fetch(item.getTypeId()); + if (type != null) { + map.put("typeName", type.getName()); + } + return Result.success(map); + } + + @At + @ApiOperation("公开展示分组查询") + @SaCheckLogin + public Result display(PageForm pageForm, @Param("typeIds") String typeIds) { + List typeIdList = parseTypeIds(typeIds); + Cnd typeCnd = Cnd.where(MaterialType::getDelFlag, "=", false); + if (!typeIdList.isEmpty()) { + typeCnd.and(MaterialType::getId, "in", typeIdList); + } + typeCnd.asc(MaterialType::getSort).asc(MaterialType::getCreatedAt); + Pagination pagination = typeService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), typeCnd); + List types = pagination.getList(NutMap.class); + if (types.isEmpty()) { + return Result.success(pagination); + } + + List pageTypeIds = types.stream().map(type -> type.getString("id")).collect(Collectors.toList()); + List items = itemService.query(Cnd.where(MaterialItem::getDelFlag, "=", false) + .and(MaterialItem::getVisible, "=", true) + .and(MaterialItem::getTypeId, "in", pageTypeIds) + .desc(MaterialItem::getUpdatedAt) + .desc(MaterialItem::getCreatedAt)); + Map> itemMap = items.stream().collect(Collectors.groupingBy(MaterialItem::getTypeId)); + for (NutMap type : types) { + List details = itemMap.getOrDefault(type.getString("id"), Collections.emptyList()) + .stream() + .limit(5) + .map(org.nutz.lang.Lang::obj2nutmap) + .collect(Collectors.toList()); + type.put("details", details); + } + return Result.success(pagination); + } + + @At + @ApiOperation("公开事项列表") + @SaCheckLogin + public Result detailList(PageForm pageForm, @Param("typeId") String typeId) { + Cnd cnd = Cnd.where(MaterialItem::getDelFlag, "=", false) + .and(MaterialItem::getVisible, "=", true) + .and(MaterialItem::getTypeId, "=", typeId); + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.or(MaterialItem::getTitle, "like", "%" + pageForm.getSearchKeyword() + "%"); + seg.or(MaterialItem::getRemark, "like", "%" + pageForm.getSearchKeyword() + "%"); + cnd.and(seg); + } + cnd.desc(MaterialItem::getUpdatedAt); + cnd.desc(MaterialItem::getCreatedAt); + Pagination pagination = itemService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); + return Result.success(pagination); + } + + private List parseTypeIds(String typeIds) { + if (StrUtil.isBlank(typeIds)) { + return new ArrayList<>(); + } + try { + return Json.fromJsonAsList(String.class, typeIds); + } catch (Exception e) { + return List.of(typeIds); + } + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/material/controller/MaterialTypeController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/material/controller/MaterialTypeController.java new file mode 100644 index 00000000..0be28309 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/material/controller/MaterialTypeController.java @@ -0,0 +1,84 @@ +package com.budwk.app.zhgh.dayofficework.material.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.zhgh.dayofficework.material.model.MaterialType; +import com.budwk.app.zhgh.dayofficework.material.service.MaterialTypeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import java.util.List; + +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "重大事项类型") +@At("/platform/material/type") +public class MaterialTypeController { + + @Inject + private MaterialTypeService typeService; + + @At("") + @SaCheckPermission("material.type") + @Ok("beetl:/platform/zhgh/dayofficework/material/type/index.html") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("material.type") + public Result pageData(PageForm pageForm) { + Cnd cnd = Cnd.where(MaterialType::getDelFlag, "=", false); + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + cnd.and(MaterialType::getName, "like", "%" + pageForm.getSearchKeyword() + "%"); + } + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { + cnd.asc(MaterialType::getSort).asc(MaterialType::getCreatedAt); + } else { + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } + Pagination pagination = typeService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); + return Result.success(pagination); + } + + @At + @ApiOperation("新增/修改重大事项类型") + @SaCheckPermission("material.type") + @SLog(tag = "重大事项-类型管理", msg = "新增/修改重大事项类型") + public Object submit(MaterialType type) { + typeService.insertOrUpdate(type); + return Result.success(); + } + + @At + @ApiOperation("删除重大事项类型") + @SaCheckPermission("material.type") + @SLog(tag = "重大事项-类型管理", msg = "删除重大事项类型") + public Object delete(String id) { + typeService.vDelete(id); + return Result.success(); + } + + @At + @ApiOperation("查询重大事项类型") + @SaCheckLogin + public Result list() { + List list = typeService.query(Cnd.where(MaterialType::getDelFlag, "=", false) + .asc(MaterialType::getSort) + .asc(MaterialType::getCreatedAt)); + return Result.success(list); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/material/model/MaterialItem.java b/src/main/java/com/budwk/app/zhgh/dayofficework/material/model/MaterialItem.java new file mode 100644 index 00000000..1c09bf10 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/material/model/MaterialItem.java @@ -0,0 +1,54 @@ +package com.budwk.app.zhgh.dayofficework.material.model; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.ColDefine; +import org.nutz.dao.entity.annotation.ColType; +import org.nutz.dao.entity.annotation.Column; +import org.nutz.dao.entity.annotation.Comment; +import org.nutz.dao.entity.annotation.Default; +import org.nutz.dao.entity.annotation.Name; +import org.nutz.dao.entity.annotation.Table; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +@Data +@Comment("重大事项") +@Accessors(chain = true) +@Table("material_item") +@EqualsAndHashCode(callSuper = true) +public class MaterialItem extends BaseModel { + + @Name + @Comment("ID") + @ColDefine(type = ColType.VARCHAR, width = 64) + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 64) + @Comment("重大事项类型ID") + private String typeId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 255) + @Comment("标题") + private String title; + + @Column + @ColDefine(type = ColType.TEXT) + @Comment("内容") + private String content; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 255) + @Comment("备注") + private String remark; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("是否公开") + @Default("1") + private Boolean visible; +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/material/model/MaterialType.java b/src/main/java/com/budwk/app/zhgh/dayofficework/material/model/MaterialType.java new file mode 100644 index 00000000..2e6b78aa --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/material/model/MaterialType.java @@ -0,0 +1,37 @@ +package com.budwk.app.zhgh.dayofficework.material.model; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.ColDefine; +import org.nutz.dao.entity.annotation.ColType; +import org.nutz.dao.entity.annotation.Column; +import org.nutz.dao.entity.annotation.Comment; +import org.nutz.dao.entity.annotation.Name; +import org.nutz.dao.entity.annotation.Table; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +@Data +@Comment("重大事项类型") +@Accessors(chain = true) +@Table("material_type") +@EqualsAndHashCode(callSuper = true) +public class MaterialType extends BaseModel { + + @Name + @Comment("ID") + @ColDefine(type = ColType.VARCHAR, width = 64) + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 255) + @Comment("类型名称") + private String name; + + @Column + @ColDefine(type = ColType.INT) + @Comment("排序") + private Integer sort; +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/material/service/MaterialItemService.java b/src/main/java/com/budwk/app/zhgh/dayofficework/material/service/MaterialItemService.java new file mode 100644 index 00000000..344ef39a --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/material/service/MaterialItemService.java @@ -0,0 +1,7 @@ +package com.budwk.app.zhgh.dayofficework.material.service; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.dayofficework.material.model.MaterialItem; + +public interface MaterialItemService extends BaseService { +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/material/service/MaterialTypeService.java b/src/main/java/com/budwk/app/zhgh/dayofficework/material/service/MaterialTypeService.java new file mode 100644 index 00000000..a6bf1b5e --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/material/service/MaterialTypeService.java @@ -0,0 +1,7 @@ +package com.budwk.app.zhgh.dayofficework.material.service; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.dayofficework.material.model.MaterialType; + +public interface MaterialTypeService extends BaseService { +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/material/service/impl/MaterialItemServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/material/service/impl/MaterialItemServiceImpl.java new file mode 100644 index 00000000..abe401a2 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/material/service/impl/MaterialItemServiceImpl.java @@ -0,0 +1,17 @@ +package com.budwk.app.zhgh.dayofficework.material.service.impl; + +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.dayofficework.material.model.MaterialItem; +import com.budwk.app.zhgh.dayofficework.material.service.MaterialItemService; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.IocBean; + +@Slf4j +@IocBean(args = {"refer:dao"}) +public class MaterialItemServiceImpl extends BaseServiceImpl implements MaterialItemService { + + public MaterialItemServiceImpl(Dao dao) { + super(dao); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/material/service/impl/MaterialTypeServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/material/service/impl/MaterialTypeServiceImpl.java new file mode 100644 index 00000000..a1952b18 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/material/service/impl/MaterialTypeServiceImpl.java @@ -0,0 +1,17 @@ +package com.budwk.app.zhgh.dayofficework.material.service.impl; + +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.dayofficework.material.model.MaterialType; +import com.budwk.app.zhgh.dayofficework.material.service.MaterialTypeService; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.IocBean; + +@Slf4j +@IocBean(args = {"refer:dao"}) +public class MaterialTypeServiceImpl extends BaseServiceImpl implements MaterialTypeService { + + public MaterialTypeServiceImpl(Dao dao) { + super(dao); + } +} diff --git a/src/main/resources/db/material_create.sql b/src/main/resources/db/material_create.sql new file mode 100644 index 00000000..a05b6935 --- /dev/null +++ b/src/main/resources/db/material_create.sql @@ -0,0 +1,37 @@ +CREATE TABLE IF NOT EXISTS `material_type` ( + `id` varchar(64) NOT NULL COMMENT '主键ID', + `name` varchar(255) DEFAULT NULL COMMENT '类型名称', + `sort` int DEFAULT 0 COMMENT '排序', + `createdBy` varchar(32) DEFAULT NULL COMMENT '创建人', + `createdAt` bigint DEFAULT NULL COMMENT '创建时间', + `updatedBy` varchar(32) DEFAULT NULL COMMENT '修改人', + `updatedAt` bigint DEFAULT NULL COMMENT '修改时间', + `delFlag` tinyint(1) DEFAULT 0 COMMENT '删除标记', + PRIMARY KEY (`id`), + KEY `idx_material_type_sort` (`sort`, `createdAt`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='重大事项-事项类型'; + +CREATE TABLE IF NOT EXISTS `material_item` ( + `id` varchar(64) NOT NULL COMMENT '主键ID', + `typeId` varchar(64) DEFAULT NULL COMMENT '重大事项类型ID', + `title` varchar(255) DEFAULT NULL COMMENT '标题', + `content` text COMMENT '内容', + `remark` varchar(255) DEFAULT NULL COMMENT '备注', + `visible` tinyint(1) DEFAULT 1 COMMENT '是否公开', + `createdBy` varchar(32) DEFAULT NULL COMMENT '创建人', + `createdAt` bigint DEFAULT NULL COMMENT '创建时间', + `updatedBy` varchar(32) DEFAULT NULL COMMENT '修改人', + `updatedAt` bigint DEFAULT NULL COMMENT '修改时间', + `delFlag` tinyint(1) DEFAULT 0 COMMENT '删除标记', + PRIMARY KEY (`id`), + KEY `idx_material_item_type` (`typeId`), + KEY `idx_material_item_visible` (`visible`, `delFlag`, `updatedAt`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='重大事项-事项'; + +-- 浦发 PostgreSQL 数据迁移到本项目 MySQL 时的字段映射: +-- material_type: id -> id, name -> name, sort -> sort, +-- create_time/update_time 转 13 位时间戳写入 createdAt/updatedAt, +-- deleted=0/1 转 delFlag=0/1。 +-- material_item: type_id -> typeId, visible=0/1 可直接写入 visible, +-- create_time/update_time 转 13 位时间戳写入 createdAt/updatedAt, +-- deleted=0/1 转 delFlag=0/1。 diff --git a/src/main/resources/db/menu/init_material_menu.sql b/src/main/resources/db/menu/init_material_menu.sql new file mode 100644 index 00000000..ba432335 --- /dev/null +++ b/src/main/resources/db/menu/init_material_menu.sql @@ -0,0 +1,66 @@ +-- 重大事项电脑端菜单。 +-- 使用 permission 做幂等判断,避免同一环境重复执行时插入重复菜单。 +INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService) +SELECT + 'f6d70b1a40b64d0f98684426a6200001', + '', + LPAD(IFNULL(MAX(CAST(path AS UNSIGNED)), 0) + 1, 4, '0'), + '重大事项', + 'Material', + 'menu', + '', + '', + 'ti-announcement', + 1, + 0, + 'material', + NULL, + 992, + 1, + '', + UNIX_TIMESTAMP(NOW()) * 1000, + '', + UNIX_TIMESTAMP(NOW()) * 1000, + 0, + 'PC', + NULL, + NULL, + 'z', + 0, + 0 +FROM sys_menu +WHERE (parentId = '' OR parentId IS NULL) + AND CHAR_LENGTH(path) = 4 +HAVING NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'material') t); + +INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService) +SELECT 'f6d70b1a40b64d0f98684426a6200002', p.id, CONCAT(p.path, '0001'), '类型管理', 'Material Type', 'menu', '/platform/material/type', 'data-pjax', '', 1, 0, 'material.type', NULL, 1, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 'l', 0, 0 +FROM sys_menu p +WHERE p.permission = 'material' + AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'material.type') t); + +INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService) +SELECT 'f6d70b1a40b64d0f98684426a6200003', p.id, CONCAT(p.path, '0002'), '事项管理', 'Material Item', 'menu', '/platform/material/item', 'data-pjax', '', 1, 0, 'material.item', NULL, 2, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 's', 0, 0 +FROM sys_menu p +WHERE p.permission = 'material' + AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'material.item') t); + +INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService) +SELECT 'f6d70b1a40b64d0f98684426a6200004', p.id, CONCAT(p.path, '0003'), '事项展示', 'Material Display', 'menu', '/platform/material/item/displayIndex', 'data-pjax', '', 1, 0, 'material.display', NULL, 3, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 's', 0, 0 +FROM sys_menu p +WHERE p.permission = 'material' + AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'material.display') t); + +-- 给系统管理员默认授权,其他角色可在角色管理中按需分配。 +INSERT INTO sys_role_menu (roleId, menuId) +SELECT r.id, m.id +FROM sys_role r +JOIN sys_menu m ON m.permission IN ( + 'material', + 'material.type', + 'material.item', + 'material.display' +) +LEFT JOIN sys_role_menu rm ON rm.roleId = r.id AND rm.menuId = m.id +WHERE r.code = 'SYSADMIN' + AND rm.roleId IS NULL; diff --git a/src/main/resources/views/platform/zhgh/dayofficework/material/display/index.html b/src/main/resources/views/platform/zhgh/dayofficework/material/display/index.html new file mode 100644 index 00000000..88061dac --- /dev/null +++ b/src/main/resources/views/platform/zhgh/dayofficework/material/display/index.html @@ -0,0 +1,635 @@ + + + + +
+
+
+
+

+ 重大事项 + +

+

根据相关规定,现将各类信息公开如下:

+
+ + + +
+ +
+
+
+ +
+ {{ item.name }} +
+
+
    +
  • + + {{ detail.title }} + {{ formatDate(detail.updatedAt || detail.createdAt) }} +
  • +
+
暂无数据
+
+
+
+
+
+ +
+
+ +
+ +
+
+
+ 返回 +
+ {{ currentType.name }} +
+ +
+
+
+
+
    +
  • + + {{ detail.title }} + {{ formatDate(detail.updatedAt || detail.createdAt) }} +
  • +
+
+ +
+
+ + +
+
+
+ +
+
+
+ 返回 +
+

{{ detailData.title }}

+
+ {{ detailData.typeName || currentType.name }} + 发布时间:{{ formatDateTime(detailData.updatedAt || detailData.createdAt) }} +
+
+ +
+
+
+
+
+
+
+ 备注:{{ detailData.remark }} +
+
+
+
+
+ + + + diff --git a/src/main/resources/views/platform/zhgh/dayofficework/material/item/index.html b/src/main/resources/views/platform/zhgh/dayofficework/material/item/index.html new file mode 100644 index 00000000..a08400fa --- /dev/null +++ b/src/main/resources/views/platform/zhgh/dayofficework/material/item/index.html @@ -0,0 +1,200 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + 新增事项 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/src/main/resources/views/platform/zhgh/dayofficework/material/type/basicForm.js b/src/main/resources/views/platform/zhgh/dayofficework/material/type/basicForm.js new file mode 100644 index 00000000..e21a2d5d --- /dev/null +++ b/src/main/resources/views/platform/zhgh/dayofficework/material/type/basicForm.js @@ -0,0 +1,53 @@ +const basicForm = { + template: /*language=HTML*/ ` +
+ + + + + + + + + + 取消 + 提交 + +
+ `, + data() { + return { + formData: { + sort: 0 + }, + formRules: { + name: [{required: true, message: '必填', trigger: ['blur', 'change']}], + sort: [{required: true, message: '必填', trigger: ['blur', 'change']}], + }, + } + }, + methods: { + onOpen(row) { + this.formData = row && row.id ? clone(row) : {sort: 0} + }, + onSubmit() { + this.$refs.formRef.validate((valid) => { + if (valid) { + this.$confirm("您确定要提交吗?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + const resp = await this.$axios.post("/platform/material/type/submit", this.formData) + if (resp.code === 0) { + this.$message.success(resp.msg) + this.$emit('refresh') + } else { + this.$message.warning(resp.msg) + } + }) + } + }) + }, + } +} diff --git a/src/main/resources/views/platform/zhgh/dayofficework/material/type/index.html b/src/main/resources/views/platform/zhgh/dayofficework/material/type/index.html new file mode 100644 index 00000000..d6d36d1b --- /dev/null +++ b/src/main/resources/views/platform/zhgh/dayofficework/material/type/index.html @@ -0,0 +1,98 @@ + + +
+ + + + + +
+ +