Compare commits

..
15 Commits
Author SHA1 Message Date
c-chenxs1 8d584b66f7 fix: 来源:客户反馈 #69
孙飙已退休,我后台也已设置为非会员,系统里已看不到他了。可是这次“福享生活”后台勾选时,运动健康学院系统操作员魏震在勾选人员名单时,全选了,然后把孙飙也选上了。我这看不到,他那怎么会看到的呢?请修复Bug.
2026-10-27 15:42:53 +08:00
c-duxc1 a20c632093 慰问申请-校工会办公室审核:PC 进入审核时自动识别并清除 [object Object] 等异常签字缓存(localStorage.getItem('signature')),重新生成签字二维码; 2026-10-26 16:40:44 +08:00
c-duxc1 443e76e7a1 Merge remote-tracking branch 'origin/main' 2026-10-23 10:24:16 +08:00
c-duxc1 d24fba03da 慰问申请-校工会办公室审核:普通系统管理员不参与校工会办公室审核,超级管理员账号保留兜底权限;修复手机端首页‘我的待办’不显示‘校工会办公室审核’的待办提醒(慰问申请分工会审核未做兼容,保持手机端不显示待办提醒); 2026-10-23 10:22:45 +08:00
c-duxc1 16ea56524e 慰问申请-校工会办公室审核:普通系统管理员不参与校工会办公室审核,超级管理员账号保留兜底权限;修复手机端首页‘我都待办’不显示慰问审核提醒; 2026-10-23 09:56:09 +08:00
c-duxc1 3b5cde7bb1 慰问申请-校工会办公室审核:仅用新增的“校工会办公室审核员”来审核,移除校工会管理员角色的手机端审核权限(保留pc端不验证角色和系统管理员的审核权限)。 2026-10-23 08:56:08 +08:00
c-duxc1 f0cd566d31 慰问申请板块,1.“校工会审核”改名“校工会办公室审核”并且审核角色也改成新增的“校工会办公室审核员”来审核。2.在审批意见时不需要手写同意、不同意,改成勾选项。 2026-10-22 16:12:45 +08:00
c-duxc1 b2ffc17032 爱心帮扶-职工慰问-分工会审核(手机端):
1.superadmin(工号):查看并审核全部分工会数据;
2.gh01(分工会主席角色)、sp01(职工慰问审批员):只能查看并审核自己分工会的数据;
3.sysadmin(角色):不再自动拥有分工会审核权限。
2026-10-12 17:31:16 +08:00
c-duxc1 2b72da43f4 爱心帮扶-职工慰问-分工会审核:关闭系统管理员看所有申请的权限,保留superadmin工号的查看所有申请权限; 2026-10-09 20:38:59 +08:00
c-duxc1 2e83b7b90c 爱心帮扶-职工慰问-慰问申请:修复分工会主席工号可以无法写入待办 assignments字段(sql查询结果集没回调函数,导致查询结果永远是空); 2026-10-09 20:16:51 +08:00
c-zhangr1 3f6228b493 Merge remote-tracking branch 'origin/main' 2026-09-20 15:55:26 +08:00
c-zhangr1 502e73c81e 南体上面问题,【会员结婚慰问、退休慰问的收款人、开户行、银行卡号隐掉隐藏掉的字段,】申请界面隐藏了,手机端和PC端查看和编辑界面还有显示。 2026-09-20 15:55:14 +08:00
dd3s_206 faac94c6e2 爱心帮扶-职工慰问-慰问类型设置:新增‘是否有领据’选项,如果没有领据,慰问阅览导出附件时就标记为‘已导出’;修复导出后‘是否导出字段’不自动刷新问题; 2026-09-17 14:46:15 +08:00
c-zhangr1 3080eaa2cb commit 2026-09-10 09:52:44 +08:00
c-zhangr1 ba3a985c40 commit 2026-09-09 16:16:22 +08:00
3778 changed files with 554 additions and 608740 deletions
+28
View File
@@ -0,0 +1,28 @@
# Compiled class file
*.class
*.iml
*.idea
target/
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
src/main/resources/application.yaml
src/main/resources/application-dev.yaml
+15
View File
@@ -31,11 +31,26 @@
<option name="name" value="Maven Central repository" /> <option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" /> <option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository> </remote-repository>
<remote-repository>
<option name="id" value="nutz-snapshots" />
<option name="name" value="nutz-snapshots" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository>
<remote-repository> <remote-repository>
<option name="id" value="jboss.community" /> <option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" /> <option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository> </remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository>
<remote-repository>
<option name="id" value="nutz" />
<option name="name" value="nutz" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository>
<remote-repository> <remote-repository>
<option name="id" value="central" /> <option name="id" value="central" />
<option name="name" value="Central Repository" /> <option name="name" value="Central Repository" />
+2 -15
View File
@@ -8,18 +8,5 @@
</list> </list>
</option> </option>
</component> </component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_15" default="true" project-jdk-name="adopt-15" project-jdk-type="JavaSDK" /> <component name="ProjectRootManager" version="2" languageLevel="JDK_15" project-jdk-name="15" project-jdk-type="JavaSDK" />
<component name="SvnBranchConfigurationManager"> </project>
<option name="myConfigurationMap">
<map>
<entry key="$PROJECT_DIR$">
<value>
<SvnBranchConfiguration>
<option name="trunkUrl" value="http://192.168.21.203:8443/svn/UNION_NSI" />
</SvnBranchConfiguration>
</value>
</entry>
</map>
</option>
</component>
</project>
-8
View File
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/mini.iml" filepath="$PROJECT_DIR$/mini.iml" />
</modules>
</component>
</project>
Generated
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="VcsDirectoryMappings"> <component name="VcsDirectoryMappings">
<mapping directory="" vcs="svn" /> <mapping directory="" vcs="Git" />
</component> </component>
</project> </project>
-8
View File
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="AdditionalModuleElements">
<content url="file://$MODULE_DIR$" dumb="true">
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
</content>
</component>
</module>
@@ -133,7 +133,7 @@ public class SiteUnionProcessController {
String dyHomeReserve = "9020230075"; String dyHomeReserve = "9020230075";
// String dyHomeReserve = "2007080352"; // String dyHomeReserve = "2007080352";
//校工会审核人(邓研,苏新荣) //校工会审核人(邓研,苏新荣)
String schoolReserve = "2007080352,1996070092"; String schoolReserve = "1996070092";
// String schoolReserve = "2007080352"; // String schoolReserve = "2007080352";
if (isPass){ if (isPass){
@@ -151,7 +151,7 @@ public class SiteUnionProcessController {
// msgApi.sendQiyeMsgTemplate(sendUserLoginName,schoolReserve,"场地预约审核",auditUrl,schoolContent); // msgApi.sendQiyeMsgTemplate(sendUserLoginName,schoolReserve,"场地预约审核",auditUrl,schoolContent);
msgApi.sendMsg(schoolReserve,msgContent); msgApi.sendMsg(schoolReserve,msgContent);
} }
List<String> list = Lang.list("2007080352", "1996070092"); List<String> list = Lang.list("1996070092");
list.forEach(item -> { list.forEach(item -> {
msgApi.sendMsg(item,msgContent); msgApi.sendMsg(item,msgContent);
}); });
@@ -190,6 +190,11 @@ public interface Roles {
*/ */
String XGHKJ = "4f72d9259837486a8092c19897fa9dd6"; String XGHKJ = "4f72d9259837486a8092c19897fa9dd6";
/**
* 校工会办公室审核员
*/
String CONDOLENCE_OFFICE = "c8d7e6f5a4b34c2291d0e8f7a6b5c4d3";
/** /**
* 校工会管理员 * 校工会管理员
*/ */
@@ -186,14 +186,24 @@ public class MainPageNeedItemsController {
//查询数据库中的待办事项 //查询数据库中的待办事项
List<NeedItems> needItemsList = dao.queryByJoin(NeedItems.class, "^needItemsSource$", Cnd.NEW()); List<NeedItems> needItemsList = dao.queryByJoin(NeedItems.class, "^needItemsSource$", Cnd.NEW());
// 普通系统管理员不参与校工会办公室审核,超级管理员账号保留兜底权限。
boolean superadmin = "superadmin".equals(ShiroUtil.getPrincipalProperty("loginname"));
if (!superadmin && ShiroUtil.hasRole("sysadmin") && !ShiroUtil.hasRole("condolence_office")) {
needItemsList.removeIf(item -> ("condolence".equals(item.getQueryTable())
&& "state_id".equals(item.getQueryColumn())
&& Integer.valueOf(2020).equals(item.getStateId()))
|| "/platform/fw/condolence/vcr".equals(item.getHref())
|| "/platform/fw/condolence/vcr/school".equals(item.getHref()));
}
//根据当前登录用户的角色查询可以看到哪些菜单 //根据当前登录用户的角色查询可以看到哪些菜单
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
if (!ShiroUtil.hasRole("sysadmin")) { if (!superadmin && !ShiroUtil.hasRole("sysadmin")) {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
select menuId from sys_role_menu where roleId in (select roleId from sys_user_role where userId = @userId) select menuId from sys_role_menu where roleId in (select roleId from sys_user_role where userId = @userId)
""").setParam("userId", ShiroUtil.getPlatformUid()); """).setParam("userId", ShiroUtil.getPlatformUid());
List<NutMap> menuIds = baseService.listMap(sql); List<NutMap> menuIds = baseService.listMap(sql);
List<String> menuId = menuIds.stream().map(o -> o.getString("menuId")).collect(Collectors.toList()); List<String> menuId = menuIds.stream().map(o -> o.getString("menuid")).collect(Collectors.toList());
cnd.and("id", "in", menuId); cnd.and("id", "in", menuId);
} }
List<Sys_menu> menus = dao.query(Sys_menu.class, cnd); List<Sys_menu> menus = dao.query(Sys_menu.class, cnd);
@@ -1,5 +1,6 @@
package io.v.nutz.mobile.condolence; package io.v.nutz.mobile.condolence;
import cn.wizzer.framework.base.Result;
import io.v.nutz.annontation.ViReturn; import io.v.nutz.annontation.ViReturn;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
@@ -44,6 +45,9 @@ public class CondolenceAuditControll {
@Param(value = "searchKeyword", required = false) String searchKeyword, int pageNumber, int pageSize, @Param(value = "searchKeyword", required = false) String searchKeyword, int pageNumber, int pageSize,
@Param(value = "pageOrderName", required = false) String pageOrderName, @Param(value = "pageOrderName", required = false) String pageOrderName,
@Param(value = "pageOrderBy", required = false) String pageOrderBy) { @Param(value = "pageOrderBy", required = false) String pageOrderBy) {
if (!hasAuditPermission()) {
return Result.error("您没有慰问审核权限!");
}
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
con.*, con.*,
@@ -65,20 +69,28 @@ public class CondolenceAuditControll {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
if (!ShiroUtil.hasAnyRoles("sysadmin")) { if (!"superadmin".equals(ShiroUtil.getPrincipalProperty("loginname"))) {
SqlExpressionGroup group = new SqlExpressionGroup(); SqlExpressionGroup group = new SqlExpressionGroup();
if (ShiroUtil.hasAnyRoles("A06")) { boolean hasAuditRole = false;
group.or(Cnd.exps("con.state_id", isAudit ? ">" : "=", 2020).or("con.state_id", isAudit ? ">" : "=", 2000)); if (ShiroUtil.hasAnyRoles("gh01,sp01")) {
// cnd.and("con.state_id", isAudit ? ">" : "=", 2020); group.or(Cnd.exps("con.state_id", isAudit ? ">" : "=", 2000)
.and("sqr.unionid", "=", Vi.getUnionId()));
hasAuditRole = true;
} }
if (ShiroUtil.hasAnyRoles("H04")) { if (ShiroUtil.hasAnyRoles("condolence_office")) {
group.and("con.state_id", isAudit ? ">" : "=", 2000); group.or(Cnd.exps("con.state_id", isAudit ? ">" : "=", 2020));
group.and("be.unionid", "=", Vi.getUnionId()); hasAuditRole = true;
} }
if (ShiroUtil.hasAnyRoles("xghkj")) { if (ShiroUtil.hasAnyRoles("xghkj")) {
group.and("con.state_id", isAudit ? ">" : "=", 2012); group.or(Cnd.exps("con.state_id", isAudit ? ">" : "=", 2012));
hasAuditRole = true;
}
if (hasAuditRole) {
cnd.and(group);
} else {
// 非慰问审核角色不允许查看手机端慰问审核数据。
cnd.and("1", "=", 0);
} }
cnd.and(group);
} else { } else {
cnd.and("con.state_id", "in", isAudit ? "1990,2010,2014,2030,2040" : "2000,2012,2020"); cnd.and("con.state_id", "in", isAudit ? "1990,2010,2014,2030,2040" : "2000,2012,2020");
} }
@@ -104,15 +116,24 @@ public class CondolenceAuditControll {
return condolenceService.listPage(pageNumber, pageSize, sql); return condolenceService.listPage(pageNumber, pageSize, sql);
} }
/**
* 校验手机端慰问审核权限,超级管理员账号保留兜底权限。
*/
private boolean hasAuditPermission() {
return "superadmin".equals(ShiroUtil.getPrincipalProperty("loginname"))
|| ShiroUtil.hasAnyRoles("gh01,sp01,condolence_office,xghkj");
}
@At("/auditHtml") @At("/auditHtml")
@Ok("re") @Ok("re")
public String auditHtml(Integer state_id) { public String auditHtml(Integer state_id) {
if (state_id == 2000 && ShiroUtil.hasAnyRoles("H04,A06,sysadmin")) { boolean superadmin = "superadmin".equals(ShiroUtil.getPrincipalProperty("loginname"));
if (state_id == 2000 && (superadmin || ShiroUtil.hasAnyRoles("gh01,sp01"))) {
return "beetl:/mobile/condolence/union_Audit.html"; return "beetl:/mobile/condolence/union_Audit.html";
} else if (state_id == 2012 && ShiroUtil.hasAnyRoles("gh03,xghkj,sysadmin")) { } else if (state_id == 2012 && (superadmin || ShiroUtil.hasAnyRoles("gh03,xghkj"))) {
return "beetl:/mobile/condolence/fr_Audit.html"; return "beetl:/mobile/condolence/fr_Audit.html";
} else if (state_id == 2020 && ShiroUtil.hasAnyRoles("A06,sysadmin")) { } else if (state_id == 2020 && (superadmin || ShiroUtil.hasAnyRoles("condolence_office"))) {
return "beetl:/mobile/condolence/school_Audit.html"; return "beetl:/mobile/condolence/school_Audit.html";
} }
return "beetl:/mobile/condolence/apply_info.html"; return "beetl:/mobile/condolence/apply_info.html";
@@ -92,10 +92,12 @@ public class WelfareMemberEscalationController {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
cnd.and("unionId", "=", Vi.getUnionId()); cnd.and("unionId", "=", Vi.getUnionId());
SqlExpressionGroup seg = new SqlExpressionGroup(); // SqlExpressionGroup seg = new SqlExpressionGroup();
seg.and("member","=",1); // seg.and("member","=",1);
seg.or(Cnd.exps("userState","=","退休").and(Cnd.exps("retiredTime",">=","2024-06-01").and("retiredTime","<","2024-12-30"))); // seg.or(Cnd.exps("userState","=","退休").and(Cnd.exps("retiredTime",">=","2024-06-01").and("retiredTime","<","2024-12-30")));
cnd.and(seg); // cnd.and(seg);
cnd.and("member", "=", 1);
cnd.asc("userState").asc("unitname").asc("unionname"); cnd.asc("userState").asc("unitname").asc("unionname");
// cnd.and("userState", "=", "在职"); // cnd.and("userState", "=", "在职");
@@ -55,7 +55,7 @@ public class CondolenceAgentController {
result.add(new NutMap().setv("title", title).setv("url", UCR).setv("iconClass", vi.getIconByPath(UCR)).setv("label", "待院级工会审核").setv("number", getUcrCount())); result.add(new NutMap().setv("title", title).setv("url", UCR).setv("iconClass", vi.getIconByPath(UCR)).setv("label", "待院级工会审核").setv("number", getUcrCount()));
result.add(new NutMap().setv("title", title).setv("url", FR).setv("iconClass", vi.getIconByPath(FR)).setv("label", "待二级党组织审核").setv("number", getFrCount())); result.add(new NutMap().setv("title", title).setv("url", FR).setv("iconClass", vi.getIconByPath(FR)).setv("label", "待二级党组织审核").setv("number", getFrCount()));
result.add(new NutMap().setv("title", title).setv("url", VCR).setv("iconClass", vi.getIconByPath(VCR)).setv("label", "待校工会审核").setv("number", getVcrCount())); result.add(new NutMap().setv("title", title).setv("url", VCR).setv("iconClass", vi.getIconByPath(VCR)).setv("label", "待校工会办公室审核").setv("number", getVcrCount()));
result.add(new NutMap().setv("title", title).setv("url", ECR).setv("iconClass", vi.getIconByPath(ECR)).setv("label", "待工会常务副主席审核").setv("number", getEcrCount())); result.add(new NutMap().setv("title", title).setv("url", ECR).setv("iconClass", vi.getIconByPath(ECR)).setv("label", "待工会常务副主席审核").setv("number", getEcrCount()));
Sys_user user = (Sys_user) ShiroUtil.getPrincipal(); Sys_user user = (Sys_user) ShiroUtil.getPrincipal();
List<Sys_menu> menus = Optional.ofNullable(user).orElse(new Sys_user()).getMenus(); List<Sys_menu> menus = Optional.ofNullable(user).orElse(new Sys_user()).getMenus();
@@ -92,7 +92,7 @@ public class CondolenceAgentController {
} }
/** /**
* 待校工会主席审核 * 待校工会办公室审核
* *
* @return * @return
*/ */
@@ -113,7 +113,8 @@ public class CondolenceReadCon {
be.unionname be_unionname, be.unionname be_unionname,
state.state_name, state.state_name,
state.state_color, state.state_color,
type.`code` type.`code`,
type.hasReceipt AS has_receipt
FROM FROM
condolence con condolence con
LEFT JOIN `user` be ON con.be_user = be.id LEFT JOIN `user` be ON con.be_user = be.id
@@ -375,6 +376,7 @@ public class CondolenceReadCon {
type.`name` AS type_name, type.`name` AS type_name,
type.money, type.money,
type.`code` typeCode, type.`code` typeCode,
type.hasReceipt AS has_receipt,
c.remark, c.remark,
c.deadImmediateFamily, c.deadImmediateFamily,
c.inpatientSurgicalName, c.inpatientSurgicalName,
@@ -402,6 +404,10 @@ public class CondolenceReadCon {
sql.setParam("id", id); sql.setParam("id", id);
NutMap nutMap = condolenceService.fetch(sql); NutMap nutMap = condolenceService.fetch(sql);
if (nutMap.get("has_receipt") != null && !nutMap.getBoolean("has_receipt")) {
return;
}
if (StrUtil.isNotBlank(nutMap.getString("lkrSignData"))) { if (StrUtil.isNotBlank(nutMap.getString("lkrSignData"))) {
try { try {
nutMap.put("lkr", ViTool.poiBase64Image7030(nutMap.getString("lkrSignData"))); nutMap.put("lkr", ViTool.poiBase64Image7030(nutMap.getString("lkrSignData")));
@@ -451,6 +457,8 @@ public class CondolenceReadCon {
nutMap.put("detail", username + "其它慰问"); nutMap.put("detail", username + "其它慰问");
} else if (typeCode.equals("J")) { } else if (typeCode.equals("J")) {
nutMap.put("detail", username + "取环慰问"); nutMap.put("detail", username + "取环慰问");
} else {
nutMap.put("detail", username + nutMap.getString("type_name"));
} }
double m = nutMap.getDouble("money"); double m = nutMap.getDouble("money");
String cm = Convert.digitToChinese(m); String cm = Convert.digitToChinese(m);
@@ -461,7 +469,8 @@ public class CondolenceReadCon {
try { try {
String fileName = nutMap.getString("unionname") + nutMap.getString("detail") + "领据"; String fileName = nutMap.getString("unionname") + nutMap.getString("detail") + "领据";
response.addHeader("Content-Type", "application/octet-stream"); response.addHeader("Content-Type", "application/octet-stream");
response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1) + "\".docx"); response.addHeader("Content-Disposition", "attachment;filename="
+ URLEncoder.encode(fileName + ".docx", StandardCharsets.UTF_8));
ServletOutputStream outputStream = response.getOutputStream(); ServletOutputStream outputStream = response.getOutputStream();
Configure config = Configure.newBuilder().build(); Configure config = Configure.newBuilder().build();
XWPFTemplate.compile(officeTemplateUtil.getPath("condolenceDocument2"), config).render(nutMap).writeAndClose(response.getOutputStream()); XWPFTemplate.compile(officeTemplateUtil.getPath("condolenceDocument2"), config).render(nutMap).writeAndClose(response.getOutputStream());
@@ -574,6 +583,7 @@ public class CondolenceReadCon {
bwwr.username AS bwwrname, bwwr.username AS bwwrname,
bwwr.unionname, bwwr.unionname,
type.`name` AS type_name, type.`name` AS type_name,
type.hasReceipt AS has_receipt,
c.files c.files
FROM FROM
`condolence` c `condolence` c
@@ -602,9 +612,13 @@ public class CondolenceReadCon {
zipOutputStream.write(bytes, 0, bytes.length); zipOutputStream.write(bytes, 0, bytes.length);
zipOutputStream.closeEntry(); zipOutputStream.closeEntry();
} }
zipOutputStream.finish();
response.flushBuffer();
} }
zipOutputStream.finish();
if (condolence.get("has_receipt") != null && !condolence.getBoolean("has_receipt")) {
condolenceService.update(Chain.make("isExport", 1), Cnd.where("id", "=", id));
}
response.flushBuffer();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@@ -1,5 +1,6 @@
package io.v.nutz.zgfw.controller.condolence; package io.v.nutz.zgfw.controller.condolence;
import cn.wizzer.framework.base.Result;
import io.v.nutz.annontation.ViReturn; import io.v.nutz.annontation.ViReturn;
import io.v.nutz.base.utils.DateUtil; import io.v.nutz.base.utils.DateUtil;
import io.v.nutz.base.utils.MsgApi; import io.v.nutz.base.utils.MsgApi;
@@ -89,8 +90,13 @@ public class CondolenceUcrCon {
cnd.and("con.state_id", isAudit ? ">" : "=", 2000); cnd.and("con.state_id", isAudit ? ">" : "=", 2000);
if (!ShiroUtil.hasAnyRoles("sysadmin")) { if (!"superadmin".equals(ShiroUtil.getPrincipalProperty("loginname"))) {
cnd.and("sqr.unionid", "=", vi.getUnionId()); if (ShiroUtil.hasAnyRoles("gh01,sp01")) {
cnd.and("sqr.unionid", "=", vi.getUnionId());
} else {
// 非分工会主席、职工慰问审批员角色(包括sysadmin)不允许查看分工会审核数据。
cnd.and("1", "=", 0);
}
} }
Vi.cndPlus(cnd, "YEAR(con.apply_time)", "=", year); Vi.cndPlus(cnd, "YEAR(con.apply_time)", "=", year);
@@ -125,6 +131,10 @@ public class CondolenceUcrCon {
@ViReturn @ViReturn
@RequiresPermissions("fw.condolence.ucr") @RequiresPermissions("fw.condolence.ucr")
public Object doEdit(String id) { public Object doEdit(String id) {
Condolence condolence = condolenceService.fetch(id);
if (!hasReviewPermission(condolence)) {
return Result.error("您没有分工会审核权限!");
}
condolenceService.update(Chain.make("state_id", 2000), Cnd.where("id", "=", id)); condolenceService.update(Chain.make("state_id", 2000), Cnd.where("id", "=", id));
return null; return null;
} }
@@ -133,11 +143,14 @@ public class CondolenceUcrCon {
@ViReturn @ViReturn
@RequiresPermissions("fw.condolence.ucr") @RequiresPermissions("fw.condolence.ucr")
public Object doReview(String id, Integer pass, Review review) { public Object doReview(String id, Integer pass, Review review) {
Condolence condolence = condolenceService.fetch(id);
if (!hasReviewPermission(condolence)) {
return Result.error("您没有分工会审核权限!");
}
review.setLoginname(ShiroUtil.getPrincipalProperty("loginname").toString()); review.setLoginname(ShiroUtil.getPrincipalProperty("loginname").toString());
review.setUsername(ShiroUtil.getPrincipalProperty("username").toString()); review.setUsername(ShiroUtil.getPrincipalProperty("username").toString());
review.setTime(DateUtil.getDate()); review.setTime(DateUtil.getDate());
review = reviewService.insert(review); review = reviewService.insert(review);
Condolence condolence = condolenceService.fetch(id);
condolence.setUnion_chairman_review(review.getId()); condolence.setUnion_chairman_review(review.getId());
if (pass == 1) { if (pass == 1) {
condolence.setState_id("2010"); condolence.setState_id("2010");
@@ -167,5 +180,21 @@ public class CondolenceUcrCon {
return null; return null;
} }
/**
* 校验分工会审核权限:superadmin可审核全部,分工会主席和职工慰问审批员只能审核本分工会数据。
*/
private boolean hasReviewPermission(Condolence condolence) {
if ("superadmin".equals(ShiroUtil.getPrincipalProperty("loginname"))) {
return true;
}
if (condolence == null || !ShiroUtil.hasAnyRoles("gh01,sp01")) {
return false;
}
Sql sql = Sqls.fetchString(Sqls.create("select unionid from `user` where id = @id")
.setParam("id", condolence.getManager()).toString());
condolenceService.dao().execute(sql);
return vi.getUnionId().equals(sql.getString());
}
} }
@@ -1,5 +1,6 @@
package io.v.nutz.zgfw.controller.condolence; package io.v.nutz.zgfw.controller.condolence;
import cn.wizzer.framework.base.Result;
import io.v.nutz.annontation.ViReturn; import io.v.nutz.annontation.ViReturn;
import io.v.nutz.base.utils.DateUtil; import io.v.nutz.base.utils.DateUtil;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
@@ -17,6 +18,7 @@ import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Ok;
@@ -25,7 +27,7 @@ import org.nutz.mvc.annotation.Param;
/** /**
* @Author: 1V * @Author: 1V
* @DateTime: 2020/11/20 11:49 * @DateTime: 2020/11/20 11:49
* @Description: 校工会审核 * @Description: 校工会办公室审核
*/ */
@At({"/platform/fw/condolence/vcr","/platform/fw/condolence/vcr/school"}) @At({"/platform/fw/condolence/vcr","/platform/fw/condolence/vcr/school"})
@IocBean @IocBean
@@ -112,9 +114,19 @@ public class CondolenceVcrCon {
@ViReturn @ViReturn
@RequiresPermissions("fw.condolence.vcr") @RequiresPermissions("fw.condolence.vcr")
public Object doReview(String id, Integer pass, Review review) { public Object doReview(String id, Integer pass, Review review) {
if (!Integer.valueOf(1).equals(pass) && !Integer.valueOf(2).equals(pass)
&& !Integer.valueOf(3).equals(pass)) {
return Result.error("请选择审批意见!");
}
String sign = review == null ? null : review.getSign();
if (Strings.isBlank(sign) || !sign.startsWith("data:image/") || !sign.contains(";base64,")) {
return Result.error("签字数据异常,请重新签字!");
}
review.setLoginname(ShiroUtil.getPrincipalProperty("loginname").toString()); review.setLoginname(ShiroUtil.getPrincipalProperty("loginname").toString());
review.setUsername(ShiroUtil.getPrincipalProperty("username").toString()); review.setUsername(ShiroUtil.getPrincipalProperty("username").toString());
review.setTime(DateUtil.getDate()); review.setTime(DateUtil.getDate());
review.setOpinion(Integer.valueOf(3).equals(pass) ? "同意"
: Integer.valueOf(1).equals(pass) ? "不同意" : "返回修改");
review = reviewService.insert(review); review = reviewService.insert(review);
Condolence condolence = condolenceService.fetch(id); Condolence condolence = condolenceService.fetch(id);
condolence.setVice_chairman_review(review.getId()); condolence.setVice_chairman_review(review.getId());
@@ -1,6 +1,7 @@
package io.v.nutz.zgfw.handler.condolence; package io.v.nutz.zgfw.handler.condolence;
import io.v.nutz.base.utils.MsgApi; import io.v.nutz.base.utils.MsgApi;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
import io.v.nutz.util.ViResource; import io.v.nutz.util.ViResource;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
@@ -11,7 +12,6 @@ import lombok.Getter;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
import java.util.List; import java.util.List;
@@ -32,7 +32,7 @@ public enum CondolenceMsgHandler {
u.username, u.username,
u.unionname, u.unionname,
u.loginname, u.loginname,
type.`name` as typeName type.`name` as typename
FROM FROM
condolence c condolence c
LEFT JOIN `user` u ON u.id = c.manager LEFT JOIN `user` u ON u.id = c.manager
@@ -42,9 +42,8 @@ public enum CondolenceMsgHandler {
sql.setParam("id", id); sql.setParam("id", id);
NutMap nutMap = condolenceService.fetch(sql); NutMap nutMap = condolenceService.fetch(sql);
String msg = "您好!" + nutMap.getString("unionname") + "的" + nutMap.getString("username") + "申请的" String msg = "您好!" + nutMap.getString("unionname") + "的" + nutMap.getString("username") + "申请的"
+ nutMap.getString("typeName") + "慰问已经提交,请您登录到智慧工会系统职工服务>职工慰问下进行审核。"; + nutMap.getString("typename") + "慰问已经提交,请您登录到智慧工会系统职工服务>职工慰问下进行审核。";
List<String> schoolLoginNames = Lang.list("2007080352", "1996070092", "1987070031"); for (String loginname : getRoleLoginNames(Roles.CONDOLENCE_OFFICE)) {
for (String loginname : schoolLoginNames) {
msgApi.sendMsg(loginname, msg); msgApi.sendMsg(loginname, msg);
} }
} else { } else {
@@ -83,7 +82,7 @@ public enum CondolenceMsgHandler {
u.username, u.username,
u.unionname, u.unionname,
u.loginname, u.loginname,
type.`name` as typeName type.`name` as typename
FROM FROM
condolence c condolence c
LEFT JOIN `user` u ON u.id = c.manager LEFT JOIN `user` u ON u.id = c.manager
@@ -93,9 +92,8 @@ public enum CondolenceMsgHandler {
sql.setParam("id", id); sql.setParam("id", id);
NutMap nutMap = condolenceService.fetch(sql); NutMap nutMap = condolenceService.fetch(sql);
String msg = "您好!" + nutMap.getString("unionname") + "的" + nutMap.getString("username") + "申请的" String msg = "您好!" + nutMap.getString("unionname") + "的" + nutMap.getString("username") + "申请的"
+ nutMap.getString("typeName") + "慰问分工会主席已经审批通过,请您登录到智慧工会系统职工服务>职工慰问下进行审核。"; + nutMap.getString("typename") + "慰问分工会主席已经审批通过,请您登录到智慧工会系统职工服务>职工慰问下进行审核。";
List<String> schoolLoginNames = Lang.list("1986110082", "1996070092", "1987070031"); for (String loginname : getRoleLoginNames(Roles.CONDOLENCE_OFFICE)) {
for (String loginname : schoolLoginNames) {
msgApi.sendMsg(loginname, msg); msgApi.sendMsg(loginname, msg);
} }
} }
@@ -112,7 +110,7 @@ public enum CondolenceMsgHandler {
u.username, u.username,
u.unionname, u.unionname,
u.loginname, u.loginname,
type.`name` as typeName type.`name` as typename
FROM FROM
condolence c condolence c
LEFT JOIN `user` u ON u.id = c.manager LEFT JOIN `user` u ON u.id = c.manager
@@ -126,7 +124,7 @@ public enum CondolenceMsgHandler {
if (opinion == null) { if (opinion == null) {
opinion = ""; opinion = "";
} }
String msg = "您好!您申请的" + nutMap.getString("typeName") + "慰问分工会主席拒绝了您的申请,拒绝理由:" + String msg = "您好!您申请的" + nutMap.getString("typename") + "慰问分工会主席拒绝了您的申请,拒绝理由:" +
opinion + "请您登录到智慧工会系统重新修改提交!"; opinion + "请您登录到智慧工会系统重新修改提交!";
msgApi.sendMsg(nutMap.getString("loginname"), msg); msgApi.sendMsg(nutMap.getString("loginname"), msg);
System.out.println(msg); System.out.println(msg);
@@ -144,7 +142,7 @@ public enum CondolenceMsgHandler {
u.username, u.username,
u.unionname, u.unionname,
u.loginname, u.loginname,
type.`name` as typeName, type.`name` as typename,
c.way c.way
FROM FROM
condolence c condolence c
@@ -154,7 +152,7 @@ public enum CondolenceMsgHandler {
"""); """);
sql.setParam("id", id); sql.setParam("id", id);
NutMap nutMap = condolenceService.fetch(sql); NutMap nutMap = condolenceService.fetch(sql);
String msg = "您好!您申请的" + nutMap.getString("typeName") + "的慰问校工会已经审批通过!"; String msg = "您好!您申请的" + nutMap.getString("typename") + "的慰问校工会办公室已经审批通过!";
// 慰问品审核通过后,提醒申请人等待礼品备好并按短信通知领取。 // 慰问品审核通过后,提醒申请人等待礼品备好并按短信通知领取。
if ("慰问品 (C)".equals(nutMap.getString("way"))) { if ("慰问品 (C)".equals(nutMap.getString("way"))) {
msg += "礼品备好后会发短信通知您前来领取。"; msg += "礼品备好后会发短信通知您前来领取。";
@@ -175,7 +173,7 @@ public enum CondolenceMsgHandler {
u.username, u.username,
u.unionname, u.unionname,
u.loginname, u.loginname,
type.`name` as typeName type.`name` as typename
FROM FROM
condolence c condolence c
LEFT JOIN `user` u ON u.id = c.manager LEFT JOIN `user` u ON u.id = c.manager
@@ -184,7 +182,7 @@ public enum CondolenceMsgHandler {
"""); """);
sql.setParam("id", id); sql.setParam("id", id);
NutMap nutMap = condolenceService.fetch(sql); NutMap nutMap = condolenceService.fetch(sql);
String msg = "您好!您申请的" + nutMap.getString("typeName") + "的慰问校工会审批拒绝了,请您登录智慧工会系统查看详情!"; String msg = "您好!您申请的" + nutMap.getString("typename") + "的慰问校工会办公室审批拒绝了,请您登录智慧工会系统查看详情!";
String loginname = nutMap.getString("loginname"); String loginname = nutMap.getString("loginname");
msgApi.sendMsg(loginname, msg); msgApi.sendMsg(loginname, msg);
} }
@@ -192,6 +190,26 @@ public enum CondolenceMsgHandler {
public abstract void exec(String id, NutMap extra); public abstract void exec(String id, NutMap extra);
/**
* 查询指定角色下的用户工号。
*/
public List<String> getRoleLoginNames(String roleId) {
Sql sql = Sqls.create("""
SELECT
u.loginname
FROM
sys_user_role sur
LEFT JOIN `user` u ON u.id = sur.userid
WHERE
sur.roleId = @roleId
GROUP BY
sur.userId
""").setParam("roleId", roleId);
sql.setCallback(Sqls.callback.strs());
dao.execute(sql);
return sql.getList(String.class);
}
public Dao dao = ViResource.dao; public Dao dao = ViResource.dao;
public MsgApi msgApi = ViResource.ioc.get(MsgApi.class); public MsgApi msgApi = ViResource.ioc.get(MsgApi.class);
public CondolenceService condolenceService = ViResource.ioc.get(CondolenceServiceImpl.class); public CondolenceService condolenceService = ViResource.ioc.get(CondolenceServiceImpl.class);
@@ -14,7 +14,6 @@ import org.nutz.dao.Dao;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record; import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
import java.util.List; import java.util.List;
@@ -100,7 +99,7 @@ public enum CondolenceToDoHandler {
GROUP BY GROUP BY
sur.userId sur.userId
""").setParam("roleId", Roles.UNION_MANGER).setParam("userId", condolence.getManager()); """).setParam("roleId", Roles.UNION_MANGER).setParam("userId", condolence.getManager());
Sqls.queryString(sql.toString()); sql.setCallback(Sqls.callback.strs());
dao.execute(sql); dao.execute(sql);
List<String> loginNames = sql.getList(String.class); List<String> loginNames = sql.getList(String.class);
localProcessService.createTask( localProcessService.createTask(
@@ -135,16 +134,29 @@ public enum CondolenceToDoHandler {
}, },
/** /**
* 创建校工会任务 * 创建校工会办公室审核任务
*/ */
CREATE_SCHOOL_TASK() { CREATE_SCHOOL_TASK() {
@Override @Override
public void exec(Condolence condolence, String option) { public void exec(Condolence condolence, String option) {
List<String> schoolLoginNames = Lang.list("2007080352", "1996070092", "1987070031"); Sql sql = Sqls.create("""
SELECT
u.loginname
FROM
sys_user_role sur
LEFT JOIN `user` u ON u.id = sur.userid
WHERE
sur.roleId = @roleId
GROUP BY
sur.userId
""").setParam("roleId", Roles.CONDOLENCE_OFFICE);
sql.setCallback(Sqls.callback.strs());
dao.execute(sql);
List<String> schoolLoginNames = sql.getList(String.class);
localProcessService.createTask( localProcessService.createTask(
"condolence@" + condolence.getId(), "condolence@" + condolence.getId(),
"vice_chairman_review", "vice_chairman_review",
"校工会审核", "校工会办公室审核",
(String) ShiroUtil.getPrincipalProperty("id"), (String) ShiroUtil.getPrincipalProperty("id"),
schoolLoginNames, schoolLoginNames,
"/platform/fw/condolence/vcr/school", "/platform/fw/condolence/vcr/school",
@@ -153,12 +165,12 @@ public enum CondolenceToDoHandler {
"/platform/fw/condolence/vcr/school" "/platform/fw/condolence/vcr/school"
); );
localProcessService.updateProcessNodeName("condolence@" + condolence.getId(), "校工会审核"); localProcessService.updateProcessNodeName("condolence@" + condolence.getId(), "校工会办公室审核");
} }
}, },
/** /**
* 校工会完成 * 校工会办公室审核完成
*/ */
COMPLETE_SCHOOL_TASK() { COMPLETE_SCHOOL_TASK() {
@Override @Override
@@ -57,6 +57,11 @@ public class CondolenceType {
@ColDefine(type = ColType.BOOLEAN) @ColDefine(type = ColType.BOOLEAN)
private Boolean isUploadFile; private Boolean isUploadFile;
@Column
@Comment("是否有领据")
@ColDefine(type = ColType.BOOLEAN)
private Boolean hasReceipt;
@Column @Column
@Comment("上传附件说明") @Comment("上传附件说明")
@ColDefine(type = ColType.VARCHAR,width = 200) @ColDefine(type = ColType.VARCHAR,width = 200)
@@ -0,0 +1,143 @@
-- 慰问申请:将原校工会审核改名为校工会办公室审核,并创建独立审核角色
-- 执行环境:MySQL
SET @condolence_office_role_fixed_id := 'c8d7e6f5a4b34c2291d0e8f7a6b5c4d3';
-- 创建校工会办公室审核员角色。
INSERT INTO `sys_role`
(`id`, `name`, `code`, `aliasName`, `disabled`, `unitid`, `system_name`, `note`, `serialNumber`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
SELECT
@condolence_office_role_fixed_id,
'校工会办公室审核员',
'condolence_office',
'CondolenceOfficeReviewer',
0,
'',
'',
'负责慰问申请的校工会办公室审核',
(SELECT IFNULL(MAX(r.`serialNumber`), 0) + 1 FROM (SELECT `serialNumber` FROM `sys_role`) r),
'',
UNIX_TIMESTAMP() * 1000,
'',
UNIX_TIMESTAMP() * 1000,
0
WHERE NOT EXISTS (
SELECT 1 FROM `sys_role` WHERE `code` = 'condolence_office'
);
SET @condolence_office_role_id := (
SELECT `id` FROM `sys_role` WHERE `code` = 'condolence_office' LIMIT 1
);
-- 复用原校工会审核菜单,不增加新的流程菜单。
SET @condolence_office_menu_id := (
SELECT `id`
FROM `sys_menu`
WHERE `permission` = 'fw.condolence.vcr'
OR `href` IN ('/platform/fw/condolence/vcr', '/platform/fw/condolence/vcr/school')
ORDER BY CASE WHEN `permission` = 'fw.condolence.vcr' THEN 1 ELSE 2 END
LIMIT 1
);
UPDATE `sys_menu`
SET `name` = '校工会办公室审核',
`aliasName` = 'CondolenceOfficeReview',
`note` = '慰问申请校工会办公室审核',
`href` = '/platform/fw/condolence/vcr/school',
`showit` = 1,
`disabled` = 0,
`updatedAt` = UNIX_TIMESTAMP() * 1000,
`delFlag` = 0
WHERE `id` = @condolence_office_menu_id;
-- 首页待办按菜单地址精确匹配,同步原待办配置并补充手机端入口。
SET @condolence_office_need_item_id := (
SELECT `id`
FROM `need_items`
WHERE `menuId` = @condolence_office_menu_id
OR `href` IN ('/platform/fw/condolence/vcr', '/platform/fw/condolence/vcr/school')
OR (`queryTable` = 'condolence' AND `queryColumn` = 'state_id' AND `stateId` = 2020)
LIMIT 1
);
SET @condolence_office_need_item_new_id := REPLACE(UUID(), '-', '');
INSERT INTO `need_items`
(`id`, `menuId`, `title`, `name`, `code`, `href`, `mobileHref`, `iconClass`, `color`,
`creatUser`, `creatTime`, `queryTable`, `queryColumn`, `stateId`, `userIdColumn`, `queryType`)
SELECT
@condolence_office_need_item_new_id,
@condolence_office_menu_id,
'【职工慰问】',
'待校工会办公室审核',
'condolence_office',
'/platform/fw/condolence/vcr/school',
'/mobile/condolence/audit',
'',
'',
'',
DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'),
'condolence',
'state_id',
2020,
'',
''
WHERE @condolence_office_need_item_id IS NULL
AND @condolence_office_menu_id IS NOT NULL;
SET @condolence_office_need_item_id := COALESCE(
@condolence_office_need_item_id,
@condolence_office_need_item_new_id
);
UPDATE `need_items`
SET `menuId` = @condolence_office_menu_id,
`name` = '待校工会办公室审核',
`href` = '/platform/fw/condolence/vcr/school',
`mobileHref` = '/mobile/condolence/audit',
`queryTable` = 'condolence',
`queryColumn` = 'state_id',
`stateId` = 2020,
`userIdColumn` = '',
`queryType` = ''
WHERE `id` = @condolence_office_need_item_id;
-- 同步原审核节点的状态名称,不新增状态。
UPDATE `state`
SET `state_name` = CASE `state_id`
WHEN 1995 THEN '校工会办公室返回修改'
WHEN 2020 THEN '待校工会办公室审核'
WHEN 2030 THEN '校工会办公室审核不通过'
WHEN 2040 THEN '校工会办公室审核通过'
ELSE `state_name`
END
WHERE `state_id` IN (1995, 2020, 2030, 2040);
-- 给新角色授权原审核菜单及其全部上级菜单,保证菜单树正常显示。
INSERT INTO `sys_role_menu` (`roleId`, `menuId`)
SELECT @condolence_office_role_id, ancestor.`id`
FROM `sys_menu` target
JOIN `sys_menu` ancestor ON target.`path` LIKE CONCAT(ancestor.`path`, '%')
WHERE target.`id` = @condolence_office_menu_id
AND NOT EXISTS (
SELECT 1
FROM `sys_role_menu` rm
WHERE rm.`roleId` = @condolence_office_role_id
AND rm.`menuId` = ancestor.`id`
);
-- 将工号为1986110082、姓名为路海松的人员分配为校工会办公室审核员。
INSERT INTO `sys_user_role` (`userId`, `roleId`)
SELECT u.`id`, @condolence_office_role_id
FROM `sys_user` u
WHERE u.`loginname` = '1986110082'
AND u.`username` = '路海松'
AND NOT EXISTS (
SELECT 1
FROM `sys_user_role` ur
WHERE ur.`userId` = u.`id`
AND ur.`roleId` = @condolence_office_role_id
);
SELECT @condolence_office_role_id AS `roleId`,
@condolence_office_menu_id AS `menuId`;
@@ -19,7 +19,8 @@
<th>联系电话</th> <th>联系电话</th>
<td>{{ viewData.mobile || '-' }}</td> <td>{{ viewData.mobile || '-' }}</td>
</tr> </tr>
<tr> <!-- 结婚、退休离岗慰问不涉及收款信息,查看及审核时不展示对应字段。 -->
<tr v-if="showPayeeFields">
<th>收款人</th> <th>收款人</th>
<td>{{ viewData.payee_username }}</td> <td>{{ viewData.payee_username }}</td>
<th>收款人银行卡</th> <th>收款人银行卡</th>
@@ -315,7 +316,7 @@
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="校工会主席审核信息" name="5" v-if="viewData.vcr"> <el-tab-pane label="校工会办公室审核信息" name="5" v-if="viewData.vcr">
<el-form label-width="130px" label-suffix=":" style="padding: 20px 0"> <el-form label-width="130px" label-suffix=":" style="padding: 20px 0">
<vi-title title="审核信息"></vi-title> <vi-title title="审核信息"></vi-title>
<el-row gutter="20"> <el-row gutter="20">
@@ -380,6 +381,12 @@ module.exports = {
loading: true, loading: true,
} }
}, },
computed: {
showPayeeFields() {
const hiddenTypeNames = ['会员结婚慰问', '会员退休离岗慰问']
return !hiddenTypeNames.includes(this.viewData.typename)
},
},
components: { components: {
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'), 'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
}, },
@@ -91,7 +91,7 @@
<template v-if="viewData.vcr"> <template v-if="viewData.vcr">
<div class="van-cell-group__title mt20"> <div class="van-cell-group__title mt20">
<div class="van-sidebar-item van-sidebar-item--select"> <div class="van-sidebar-item van-sidebar-item--select">
校工会审核信息 校工会办公室审核信息
</div> </div>
</div> </div>
<van-cell-group> <van-cell-group>
@@ -51,7 +51,7 @@ layout("/mobile/platform.html"){
<van-empty v-if="mLoading==false&&tableData.length==0" class="custom-image" <van-empty v-if="mLoading==false&&tableData.length==0" class="custom-image"
image="/none.svg" image="/none.svg"
description="暂无数据"> :description="permissionDenied ? '您没有慰问审核权限' : '暂无数据'">
</van-empty> </van-empty>
@@ -72,6 +72,7 @@ layout("/mobile/platform.html"){
{text: '已审核', value: true}, {text: '已审核', value: true},
], ],
handle: true, handle: true,
permissionDenied: false,
pageForm: { pageForm: {
year: new Date().getFullYear(), year: new Date().getFullYear(),
isAudit: false, isAudit: false,
@@ -90,6 +91,11 @@ layout("/mobile/platform.html"){
this.flushUnits() this.flushUnits()
}, },
pageData() { pageData() {
if (this.permissionDenied) {
this.finished = true
this.mLoading = false
return
}
this.mLoading = true this.mLoading = true
$.get(loc() + '/pageData', this.pageForm, (res) => { $.get(loc() + '/pageData', this.pageForm, (res) => {
if (res.code === 0) { if (res.code === 0) {
@@ -99,14 +105,18 @@ layout("/mobile/platform.html"){
} else { } else {
this.pageForm.pageNumber++ this.pageForm.pageNumber++
} }
} else {
this.permissionDenied = true
this.finished = true
vant.Toast(res.msg || '您没有慰问审核权限!')
} }
this.mLoading = false
}) })
this.mLoading = false
}, },
async flushUnits() { async flushUnits() {
//this.$set(this.pageForm, "unitId", "") //this.$set(this.pageForm, "unitId", "")
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') { if ("${@shiro.getPrincipalProperty('loginname')}" === 'superadmin' ||
"${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
await mCommon.getUnitList(this.pageForm.unionId) await mCommon.getUnitList(this.pageForm.unionId)
} else { } else {
await mCommon.getUnitList("${@shiro.getPrincipalProperty('unit').getUnionid()}") await mCommon.getUnitList("${@shiro.getPrincipalProperty('unit').getUnionid()}")
@@ -7,11 +7,11 @@ layout("/mobile/platform.html"){
@click-left="history.back()"></van-nav-bar> @click-left="history.back()"></van-nav-bar>
<condolence-info ref="info" :id.sync="id" title="校工会审核" :handle="handle"> <condolence-info ref="info" :id.sync="id" title="校工会办公室审核" :handle="handle">
<template #handle> <template #handle>
<div class="van-cell-group__title mt10"> <div class="van-cell-group__title mt10">
<div class="van-sidebar-item van-sidebar-item--select"> <div class="van-sidebar-item van-sidebar-item--select">
校工会审核 校工会办公室审核
</div> </div>
</div> </div>
<van-form> <van-form>
@@ -26,15 +26,14 @@ layout("/mobile/platform.html"){
<van-field v-model="formData.time" label="审核时间" left-icon="clock-o" <van-field v-model="formData.time" label="审核时间" left-icon="clock-o"
readonly></van-field> readonly></van-field>
<van-field v-model="formData.opinion" <van-field label="审批意见" required>
rows="1" <template #input>
required <van-radio-group v-model="formData.pass" direction="horizontal">
left-icon="chat-o" <van-radio :name="3" shape="square">同意</van-radio>
autosize <van-radio :name="1" shape="square">不同意</van-radio>
label="审核意见" </van-radio-group>
type="textarea" </template>
placeholder="请输入审核意见" </van-field>
></van-field>
<van-field label="签字" required style="flex-flow: column"> <van-field label="签字" required style="flex-flow: column">
<template #label> <template #label>
@@ -47,17 +46,12 @@ layout("/mobile/platform.html"){
<van-row gutter="20" style="margin-top: 30px;padding: 0 25px"> <van-row gutter="20" style="margin-top: 30px;padding: 0 25px">
<van-col span="8"> <van-col span="12">
<van-button :color="themeColor" plain block @click="doAudit(1)">拒 绝
</van-button>
</van-col>
<van-col span="8">
<van-button color="red" block plain @click="doAudit(2)">返回修改 <van-button color="red" block plain @click="doAudit(2)">返回修改
</van-button> </van-button>
</van-col> </van-col>
<van-col span="8"> <van-col span="12">
<van-button :color="themeColor" block @click="doAudit(3)">通 过 <van-button :color="themeColor" block @click="doAudit">提交
</van-button> </van-button>
</van-col> </van-col>
</van-row> </van-row>
@@ -89,8 +83,11 @@ layout("/mobile/platform.html"){
methods: { methods: {
async doAudit(pass) { async doAudit(pass) {
if (!this.formData.opinion) { if (pass === 2) {
this.$toast.fail('请填写审核意见'); this.formData.pass = pass
}
if (this.formData.pass === null) {
this.$toast.fail('请选择审批意见');
return return
} }
// 审核签字由独立画布维护,不能只依赖 van-field 的 required 属性。 // 审核签字由独立画布维护,不能只依赖 van-field 的 required 属性。
@@ -104,9 +101,9 @@ layout("/mobile/platform.html"){
return return
}*/ }*/
await this.$refs.signature.updateSign() await this.$refs.signature.updateSign()
this.formData.pass = pass
const resp = await $.post("/platform/fw/condolence/vcr/doReview", this.formData) const resp = await $.post("/platform/fw/condolence/vcr/doReview", this.formData)
if (resp.code === 0) { if (resp.code === 0) {
await doCompletes();
this.$toast.success('审核成功'); this.$toast.success('审核成功');
setTimeout(() => { setTimeout(() => {
history.back() history.back()
@@ -122,7 +119,7 @@ layout("/mobile/platform.html"){
id: this.id, id: this.id,
username: "${@shiro.getPrincipalProperty('username')}", username: "${@shiro.getPrincipalProperty('username')}",
time: moment().format('YYYY-MM-DD'), time: moment().format('YYYY-MM-DD'),
opinion: null, pass: null,
sign: "" sign: ""
} }
} }
@@ -66,6 +66,15 @@ layout("/layouts/platform.html"){
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" header-align="center" label="是否有领据"
show-overflow-tooltip
prop="hasReceipt">
<template scope="{row}">
<span v-if="row.hasReceipt != false" class="text-success">是</span>
<span v-else class="text-danger">否</span>
</template>
</el-table-column>
<el-table-column label="是否禁用" prop="isDisabled" header-align="center" <el-table-column label="是否禁用" prop="isDisabled" header-align="center"
align="center"> align="center">
<template scope="{row}"> <template scope="{row}">
@@ -152,6 +161,13 @@ layout("/layouts/platform.html"){
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="是否有领据" prop="hasReceipt">
<el-radio-group v-model="formData.hasReceipt">
<el-radio-button :label="true">是</el-radio-button>
<el-radio-button :label="false">否</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="上传附件说明" prop="uploadFileDesc" v-if="formData.isUploadFile"> <el-form-item label="上传附件说明" prop="uploadFileDesc" v-if="formData.isUploadFile">
<el-input v-model="formData.uploadFileDesc" type="textarea" :rows="3" maxlength="200" <el-input v-model="formData.uploadFileDesc" type="textarea" :rows="3" maxlength="200"
show-word-limit clearable></el-input> show-word-limit clearable></el-input>
@@ -239,6 +255,7 @@ layout("/layouts/platform.html"){
openAdd() { openAdd() {
this.formData = { this.formData = {
isUploadFile: true, isUploadFile: true,
hasReceipt: true,
goodsAlbum: [] goodsAlbum: []
} }
this.dialogVisible = true this.dialogVisible = true
@@ -315,6 +332,9 @@ layout("/layouts/platform.html"){
if (code == 0) { if (code == 0) {
this.formData = data this.formData = data
this.$set(this.formData, 'goodsAlbum', data.goodsAlbum || []) this.$set(this.formData, 'goodsAlbum', data.goodsAlbum || [])
if (data.hasReceipt == null) {
this.$set(this.formData, 'hasReceipt', true)
}
this.dialogVisible = true this.dialogVisible = true
if (this.$refs['form']) { if (this.$refs['form']) {
this.$refs['form'].resetFields() this.$refs['form'].resetFields()
@@ -23,7 +23,7 @@ layout("/layouts/platform.html"){
<span slot="label"> <span slot="label">
校工会直接慰问 校工会直接慰问
<el-tooltip class="item" effect="dark" <el-tooltip class="item" effect="dark"
content="直接慰问,由校工会直接慰问,无需经过分工会审核,直接由校工会主席审核。" content="直接慰问,由校工会直接慰问,无需经过分工会审核,直接由校工会办公室审核。"
placement="top-start"> placement="top-start">
<i class="el-icon-question"></i> <i class="el-icon-question"></i>
</el-tooltip> </el-tooltip>
@@ -102,42 +102,44 @@ layout("/layouts/platform.html"){
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- <el-row gutter="60">--> <!-- 结婚、退休离岗慰问无需填写收款信息;不渲染表单项可同时避免触发对应必填校验。 -->
<el-col :span="12"> <template v-if="showPayeeFields">
<el-form-item prop="payee" label="收款人"> <el-col :span="12">
<el-select <el-form-item prop="payee" label="收款人">
style="width: 100%" <el-select
v-model="formData.payee" style="width: 100%"
filterable v-model="formData.payee"
clearable filterable
remote clearable
reserve-keyword remote
placeholder="请输入姓名或工号查找" reserve-keyword
:remote-method="userPayee" placeholder="请输入姓名或工号查找"
:loading="userLoading" :remote-method="userPayee"
@change="payeeChange"> :loading="userLoading"
<el-option @change="payeeChange">
v-for="item in userPayees" <el-option
:key="item.id" v-for="item in userPayees"
:label="item.username+'('+item.loginname+')'+'('+item.unitname+')'" :key="item.id"
:value="item.id"> :label="item.username+'('+item.loginname+')'+'('+item.unitname+')'"
</el-option> :value="item.id">
</el-select> </el-option>
</el-form-item> </el-select>
</el-col> </el-form-item>
<el-col :span="12"> </el-col>
<el-form-item prop="payee_bank_number" label="收款人银行卡"> <el-col :span="12">
<el-input placeholder="请填写银行卡号" v-model="formData.payee_bank_number" <el-form-item prop="payee_bank_number" label="收款人银行卡">
maxlength="30" <el-input placeholder="请填写银行卡号" v-model="formData.payee_bank_number"
type="text"></el-input> maxlength="30"
</el-form-item> type="text"></el-input>
</el-col> </el-form-item>
<el-col :span="12"> </el-col>
<el-form-item prop="payee_bank_name" label="收款人开户行"> <el-col :span="12">
<el-input placeholder="请填写开户行" v-model="formData.payee_bank_name" maxlength="30" <el-form-item prop="payee_bank_name" label="收款人开户行">
type="text"></el-input> <el-input placeholder="请填写开户行" v-model="formData.payee_bank_name" maxlength="30"
</el-form-item> type="text"></el-input>
</el-col> </el-form-item>
</el-col>
</template>
</el-row> </el-row>
<el-row gutter="60"> <el-row gutter="60">
@@ -403,7 +405,7 @@ layout("/layouts/platform.html"){
occur_time: [{required: true, message: '必填', trigger: ['blur', 'change']}], occur_time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
jtzz: [{required: true, message: '必填', trigger: ['blur', 'change']}], jtzz: [{required: true, message: '必填', trigger: ['blur', 'change']}],
poszdw: [{required: true, message: '必填', trigger: ['blur', 'change']}], poszdw: [{required: true, message: '必填', trigger: ['blur', 'change']}],
files: [{required: true, message: '必填', trigger: ['blur', 'change']}], // files: [{required: true, message: '必填', trigger: ['blur', 'change']}],
goods_desc: [{required: true, message: '请输入慰问品名称、编号、规格等', trigger: ['blur', 'change']}], goods_desc: [{required: true, message: '请输入慰问品名称、编号、规格等', trigger: ['blur', 'change']}],
mobile: [ mobile: [
{required: true, message: '请输入慰问对象联系电话', trigger: ['blur', 'change']}, {required: true, message: '请输入慰问对象联系电话', trigger: ['blur', 'change']},
@@ -412,7 +414,7 @@ layout("/layouts/platform.html"){
birthday: [{required: true, message: '必填', trigger: ['blur', 'change']}], birthday: [{required: true, message: '必填', trigger: ['blur', 'change']}],
// job_title: [{required: true, message: '必填', trigger: ['blur', 'change']}], // job_title: [{required: true, message: '必填', trigger: ['blur', 'change']}],
birth_child_num: [{required: true, message: '必填', trigger: ['blur', 'change']}], birth_child_num: [{required: true, message: '必填', trigger: ['blur', 'change']}],
sign: [{required: true, message: '请扫码签字', trigger: ['blur', 'change']}], // sign: [{required: true, message: '请扫码签字', trigger: ['blur', 'change']}],
payee: [{required: true, message: '请选择收款人', trigger: ['blur', 'change']}], payee: [{required: true, message: '请选择收款人', trigger: ['blur', 'change']}],
payee_bank_number: [{required: true, message: '请填写收款人银行卡', trigger: ['blur', 'change']}], payee_bank_number: [{required: true, message: '请填写收款人银行卡', trigger: ['blur', 'change']}],
payee_bank_name: [{required: true, message: '请填写收款人开户行', trigger: ['blur', 'change']}], payee_bank_name: [{required: true, message: '请填写收款人开户行', trigger: ['blur', 'change']}],
@@ -444,6 +446,11 @@ layout("/layouts/platform.html"){
}*/ }*/
}, },
computed: { computed: {
showPayeeFields() {
const condolenceType = this.typeOptions.find(item => item.id === this.formData.type)
const hiddenTypeNames = ['会员结婚慰问', '会员退休离岗慰问']
return !condolenceType || !hiddenTypeNames.includes(condolenceType.name)
},
goodsAlbumFile() { goodsAlbumFile() {
const goodsAlbum = this.formData.goodsAlbum const goodsAlbum = this.formData.goodsAlbum
return goodsAlbum && goodsAlbum.length ? goodsAlbum[0] : null return goodsAlbum && goodsAlbum.length ? goodsAlbum[0] : null
@@ -550,10 +557,10 @@ layout("/layouts/platform.html"){
}, },
async doAdd() { async doAdd() {
// 签字由自定义组件回写,提交前单独判断,避免 Element 表单漏过空签字。 // 签字由自定义组件回写,提交前单独判断,避免 Element 表单漏过空签字。
if (!this.formData.sign) { /*if (!this.formData.sign) {
this.$message.warning('请扫码签字') this.$message.warning('请扫码签字')
return return
} }*/
this.$refs["form"].validate(async (valid) => { this.$refs["form"].validate(async (valid) => {
if (valid) { if (valid) {
const formData = JSON.parse(JSON.stringify(this.formData)) const formData = JSON.parse(JSON.stringify(this.formData))
@@ -492,7 +492,7 @@ layout("/layouts/platform.html"){
'guava': httpVueLoader('/components/plugins/Guava.vue'), 'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'), 'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'), 'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'info': httpVueLoader('/components/condolence/Info.vue?v=1.0.1'), 'info': httpVueLoader('/components/condolence/Info.vue?v=1.0.2'),
}, },
methods: { methods: {
async payeeChange() { async payeeChange() {
@@ -142,7 +142,8 @@ layout("/layouts/platform.html"){
<el-table-column align="center" prop="state_id" header-align="center" <el-table-column align="center" prop="state_id" header-align="center"
label="是否导出" sortable> label="是否导出" sortable>
<template scope="scope"> <template scope="scope">
<span v-if="scope.row.exportdocumentno" class="text-success"> <span v-if="scope.row.exportdocumentno || (scope.row.has_receipt == false && scope.row.isexport)"
class="text-success">
是 是
</span> </span>
<span v-else class="text-danger">否</span> <span v-else class="text-danger">否</span>
@@ -162,7 +163,8 @@ layout("/layouts/platform.html"){
<el-dropdown-item :command="{type:'view',data:row}"> <el-dropdown-item :command="{type:'view',data:row}">
查看 查看
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item :command="{type:'exportReceipt',data:row}"> <el-dropdown-item v-if="row.has_receipt != false"
:command="{type:'exportReceipt',data:row}">
导出领据 导出领据
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item :command="{type:'exportFiles',data:row}"> <el-dropdown-item :command="{type:'exportFiles',data:row}">
@@ -216,7 +218,7 @@ layout("/layouts/platform.html"){
'guava': httpVueLoader('/components/plugins/Guava.vue'), 'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'), 'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'), 'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'info': httpVueLoader('/components/condolence/Info.vue?v=1.0.1'), 'info': httpVueLoader('/components/condolence/Info.vue?v=1.0.2'),
}, },
methods: { methods: {
dropdownCommand(command) { dropdownCommand(command) {
@@ -230,13 +232,44 @@ layout("/layouts/platform.html"){
} else if (type == 'Print') { } else if (type == 'Print') {
condolence.doPrint(data.id) condolence.doPrint(data.id)
} else if (type == 'exportReceipt') { } else if (type == 'exportReceipt') {
if (!['D', 'E', 'F', 'G', 'H', 'I', 'J'].includes(data.code)) { if (data.has_receipt == false) {
this.notifyWarning('只有住院和去世类型才可导出领据') this.notifyWarning('该慰问类型没有领据')
return return
} }
window.open(loc() + '/exportReceipt?id=' + data.id) this.downloadAndRefresh(loc() + '/exportReceipt?id=' + data.id, '慰问领据.docx')
} else if (type == 'exportFiles') { } else if (type == 'exportFiles') {
window.open(loc() + '/exportFiles?id=' + data.id) this.downloadAndRefresh(loc() + '/exportFiles?id=' + data.id, '申请附件.zip')
}
},
async downloadAndRefresh(url, defaultFileName) {
const loading = this.$loading({
lock: true,
text: '正在导出,请稍候',
spinner: 'el-icon-loading'
})
try {
const response = await axios.get(url, {responseType: 'blob'})
const disposition = response.headers['content-disposition'] || ''
let fileName = disposition.includes('filename=')
? disposition.substring(disposition.indexOf('filename=') + 9).replace(/"/g, '')
: defaultFileName
fileName = decodeURIComponent(fileName.replace(/\+/g, ' '))
const downloadUrl = window.URL.createObjectURL(response.data)
const link = document.createElement('a')
link.href = downloadUrl
link.download = fileName
link.style.display = 'none'
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
window.URL.revokeObjectURL(downloadUrl)
this.pageData()
} catch (e) {
this.notifyError('导出失败')
} finally {
loading.close()
} }
}, },
doExportSummary() { doExportSummary() {
@@ -256,7 +256,7 @@ layout("/layouts/platform.html"){
'guava': httpVueLoader('/components/plugins/Guava.vue'), 'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'), 'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'), 'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'info': httpVueLoader('/components/condolence/Info.vue?v=1.0.1'), 'info': httpVueLoader('/components/condolence/Info.vue?v=1.0.2'),
}, },
methods: { methods: {
dropdownCommand(command) { dropdownCommand(command) {
@@ -151,7 +151,7 @@ layout("/layouts/platform.html"){
</template> </template>
<template #edit> <template #edit>
<info ref="info2" handle label="校工会审核"> <info ref="info2" handle label="校工会办公室审核">
<template #handle> <template #handle>
<el-form :model="formData" ref="form" :rules="formRules" label-position="right" <el-form :model="formData" ref="form" :rules="formRules" label-position="right"
style="padding: 20px 0" style="padding: 20px 0"
@@ -171,10 +171,11 @@ layout("/layouts/platform.html"){
</el-col> </el-col>
</el-row> </el-row>
<el-form-item prop="opinion" label="审核意见"> <el-form-item prop="pass" label="审批意见">
<el-input type="textarea" v-model="formData.opinion" rows="4" <el-radio-group v-model="formData.pass">
maxlength="500" <el-radio :label="3">同意</el-radio>
placeholder="请填写您的审核意见"></el-input> <el-radio :label="1">不同意</el-radio>
</el-radio-group>
</el-form-item> </el-form-item>
<el-form-item prop="sign" label="签&emsp;&emsp;字"> <el-form-item prop="sign" label="签&emsp;&emsp;字">
@@ -184,15 +185,11 @@ layout("/layouts/platform.html"){
</el-form> </el-form>
<div style="float: right;margin: 20px 0"> <div style="float: right;margin: 20px 0">
<el-button @click="doReview(1)" :disabled="subDis" :loading="subLoading1">拒
绝
</el-button>
<el-button type="danger" @click="doReview(2)" :disabled="subDis" <el-button type="danger" @click="doReview(2)" :disabled="subDis"
:loading="subLoading2">返回修改 :loading="subLoading2">返回修改
</el-button> </el-button>
<el-button type="primary" @click="doReview(3)" :disabled="subDis" <el-button type="primary" @click="doReview" :disabled="subDis"
:loading="subLoading3">通 :loading="subLoading3">提交
过
</el-button> </el-button>
</div> </div>
@@ -223,7 +220,7 @@ layout("/layouts/platform.html"){
year: new Date().getFullYear() + "" year: new Date().getFullYear() + ""
}, },
formRules: { formRules: {
opinion: [{required: true, message: '必填', trigger: ['blur', 'change']}], pass: [{required: true, message: '请选择审批意见', trigger: 'change'}],
sign: [{required: true, message: '请签字', trigger: ['blur', 'change']}], sign: [{required: true, message: '请签字', trigger: ['blur', 'change']}],
}, },
subDis: false, subDis: false,
@@ -237,9 +234,12 @@ layout("/layouts/platform.html"){
'guava': httpVueLoader('/components/plugins/Guava.vue'), 'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'), 'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'), 'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'info': httpVueLoader('/components/condolence/Info.vue?v=1.0.1'), 'info': httpVueLoader('/components/condolence/Info.vue?v=1.0.2'),
}, },
methods: { methods: {
isValidSign(sign) {
return typeof sign === 'string' && /^data:image\/(png|jpeg|jpg);base64,/i.test(sign)
},
dropdownCommand(command) { dropdownCommand(command) {
const {type, data} = command const {type, data} = command
if (type == 'view') { if (type == 'view') {
@@ -250,11 +250,18 @@ layout("/layouts/platform.html"){
}, },
async openReview(row) { async openReview(row) {
const {id} = row const {id} = row
const cachedSign = localStorage.getItem('signature')
if (cachedSign && !this.isValidSign(cachedSign)) {
// 仅清理当前浏览器中的异常签字缓存,避免 [object Object] 再次提交。
localStorage.removeItem('signature')
}
this.formData = { this.formData = {
id, id,
username: "${@shiro.getPrincipalProperty('username')}", username: "${@shiro.getPrincipalProperty('username')}",
time: moment().format('YYYY-MM-DD'), time: moment().format('YYYY-MM-DD'),
pass: null,
sign: '',
} }
this.subLoading1 = false this.subLoading1 = false
this.subLoading2 = false this.subLoading2 = false
@@ -265,29 +272,27 @@ layout("/layouts/platform.html"){
this.$refs['form'].resetFields() this.$refs['form'].resetFields()
} }
}, },
async doReview(flag) { async doReview(pass) {
if (pass === 2) {
this.formData.pass = pass
}
// 签字由自定义组件回写,审核提交前单独判断,避免 Element 表单漏过空签字。 // 签字由自定义组件回写,审核提交前单独判断,避免 Element 表单漏过空签字。
if (!this.formData.sign) { if (!this.isValidSign(this.formData.sign)) {
this.$message.warning('请签字') localStorage.removeItem('signature')
this.$set(this.formData, 'sign', '')
this.$message.warning('签字数据异常,请重新签字')
return return
} }
this.$refs["form"].validate(async (valid) => { this.$refs["form"].validate(async (valid) => {
if (valid) { if (valid) {
this.formData.pass = flag
this.subDis = true this.subDis = true
if (flag == 1) { pass === 2 ? this.subLoading2 = true : this.subLoading3 = true
this.subLoading1 = true
} else if (flag == 2) {
this.subLoading2 = true
} else {
this.subLoading3 = true
}
const resp = await $.post(loc() + "/doReview", this.formData) const resp = await $.post(loc() + "/doReview", this.formData)
this.subDis = false this.subDis = false
this.subLoading1 = false this.subLoading1 = false
this.subLoading2 = false this.subLoading2 = false
this.subLoading3 = false
if (resp.code === 0) { if (resp.code === 0) {
this.pageData() this.pageData()
this.$refs.guava.index() this.$refs.guava.index()
-149
View File
@@ -1,149 +0,0 @@
nutz.application.name=UNION_BASIC
server.port=80
server.host=0.0.0.0
jetty.contextPath=/
jetty.threadpool.idleTimeout=60000
jetty.threadpool.minThreads=10
jetty.threadpool.maxThreads=500
jetty.page.403=/error/403.html
jetty.page.404=/error/404.html
jetty.page.500=/error/500.html
#结合ftp使用,或用nginx代理ftp路径
jetty.staticPath=D://files
#开发模式静态资源
jetty.staticPathLocal=D:/gsProject/UNION_NSI/src/main/resources/static
nutz.mvc.ignore=^(.+[.])(jsp|png|gif|jpg|js|css|jspx|jpeg|html|mp3|mp4|ico|svg)$
nutz.mvc.exclusions=/favicon/*,/assets/*,/druid/*,/upload/*
ftp.enabled=true
ftp.host=192.168.21.203
ftp.port=9090
ftp.username=ftpuser
ftp.password=123456
ftp.timeout=100
redis.host=127.0.0.1
redis.port=6379
redis.timeout=2000
redis.max_redir=10
redis.database=0
redis.maxTotal=150
redis.pool.maxTotal=150
redis.pool.maxIdle=50
redis.pool.minIdle=10
#redis.password=zxy123
#redis集群模式设置
#redis.mode=cluster
redis.mode=normal
#redis.nodes=192.168.6.31:6377,192.168.6.31:6378,192.168.6.28:6377,192.168.6.28:6378,192.168.6.34:6377,192.168.6.34:6378
jdbc.url=jdbc:mysql://192.168.21.203:3306/union_nsi?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=root
jdbc.validationQuery=select 1
jdbc.maxActive=500
jdbc.testWhileIdle=true
jdbc.connectionProperties=druid.stat.slowSqlMillis=2000
jdbc.defaultAutoCommit=true
xsssql.ignore.urls=/platform/cms/content/article/addDo,/platform/sys/app/conf/addDo,/platform/sys/app/conf/editDo,/platform/member/change/mange/userPageData,/platform/welfare/member/mange/userPageData
#环境 dev/prod
v.environment=dev
v.loginUrl=/sso/login
v.loginUrlMobile=/mobile/cas/login
v.ip=192.168.21.207
#shiro.ini.path=shiro.ini
shiro.objects=platformAuthc,AuthenticationFilter,Cas20ProxyReceivingTicketValidationFilter,platformRealm,authenticationStrategy
#end
shiro.ini.urls:
/sso/**=Cas20ProxyReceivingTicketValidationFilter
/mobile/login=anon
/platform/jsz/login=anon
/assets/**=anon
/**=anon
/signature/**=anon
/platform/**=AuthenticationFilter
#end
#设置session会话超时时间(单位:毫秒)
shiro.session.manager.globalSessionTimeout=2000000000
#设置redis缓存时间(单位:秒)与上面的毫秒数保持一致
shiro.session.cache.redis.ttl=2000000
#缓存名和 RedisConstant.PLATFORM_REDIS_PREFIX 常量保持一致
shiro.session.dao.activeSessionsCacheName=budwk5mini:shiro:activeSessionCache
#使用redis二级缓存
shiro.session.cache.type=lcache
shiro.session.enable=true
shiro.url.login=/platform
shiro.url.logout_redirect=/platform
shiro.url.unauth=/platform
#开发时设置本地路径,便于调试
beetl.RESOURCE.rootLocal=D:/gsProject/UNION_NSI/src/main/resources/views/
beetl.RESOURCE.root=views/
beetl.DELIMITER_STATEMENT_START=<!--#
beetl.DELIMITER_STATEMENT_END=#-->
beetl.FT.escape=io.v.nutz.web.commons.ext.beetl.HtmlEscapeFormat
#用法: ${"wizzer",escape}
beetl.FT.filesize=io.v.nutz.web.commons.ext.beetl.FileSizeFormat
#用法: ${10241024,filesize}
beetl.FT.html2txt=io.v.nutz.web.commons.ext.beetl.Html2TxtFormat
#用法: ${"",html2txt="100"} 截取100字符
beetl.FT.strlen=io.v.nutz.web.commons.ext.beetl.StrlenFormat
#用法: ${"",strlen="100"} 截取100字符
#获取系统参数
beetl.FN.getSysConfig=io.v.nutz.web.commons.ext.beetl.GetSysConfig
#==============================================================
#Configure Main Scheduler Properties
#==============================================================
#quartz延迟启动秒数
quartz.startupDelay=10
quartz.scheduler.instanceName=defaultScheduler
quartz.scheduler.instanceId=AUTO
#==============================================================
#Configure JobStore isClustered=启用集群模式
#==============================================================
quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
#quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
#Other delegates can see: http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/tutorial-lesson-09.html
quartz.jobStore.dataSource=myDS
quartz.jobStore.tablePrefix=SYS_QRTZ_
quartz.jobStore.isClustered=true
quartz.jobStore.clusterCheckinInterval=20000
quartz.jobStore.maxMisfiresToHandleAtATime=120
quartz.jobStore.misfireThreshold=120000
quartz.jobStore.txIsolationLevelSerializable=false
#==============================================================
#Configure ThreadPool
#==============================================================
quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
quartz.threadPool.threadCount=2
quartz.threadPool.threadPriority=5
quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
#==============================================================
#Skip Check Update
#update:true
#not update:false
#==============================================================
quartz.scheduler.skipUpdateCheck=true
#============================================================================
# Configure Plugins
#============================================================================
quartz.plugin.triggHistory.class=org.quartz.plugins.history.LoggingJobHistoryPlugin
quartz.plugin.shutdownhook.class=org.quartz.plugins.management.ShutdownHookPlugin
quartz.plugin.shutdownhook.cleanShutdown=true
#============================================================================
# NutDao dataSource
#============================================================================
quartz.dataSource.myDS.connectionProvider.class=io.v.nutz.task.conn.NutConnectionProvider
logback.exts.loglevel.cache.prefix=budwk5mini:logback:loglevel:
#动态修改日志等级
logback.exts.loglevel.enabled=true
#心跳间隔(单位:秒)
logback.exts.loglevel.heartbeat=15
#为应用管理提供支持,启用获取部署版本号,结合守护进程使用
# 详见 https://github.com/Wizzercn/PythonWk
logback.exts.deploy.enabled=false
#为应用管理提供支持,部署根路径
logback.exts.deploy.root=/data/budwk5mini
#应用管理通信接口签名,正式环境务必更改
deploy.appid=
deploy.appkey=
-8
View File
@@ -1,8 +0,0 @@
____ ___ ___ __ _______ __ __ _ _
| _ \ | \ \ / / | \ \ / / ____| | \/ (_) (_)
| |_) |_ _ __| |\ \ /\ / /| | _______\ \ / /| |__ | \ / |_ _ __ _
| _ <| | | |/ _` | \ \/ \/ / | |/ /______\ \/ / |___ \ | |\/| | | '_ \| |
| |_) | |_| | (_| | \ /\ / | < \ / ___) | | | | | | | | | |
|____/ \__,_|\__,_| \/ \/ |_|\_\ \/ |____/ |_| |_|_|_| |_|_|
:: Built with BudWk.com [wizzer@qq.com]
-18
View File
@@ -1,18 +0,0 @@
var chain={
"default" : {
"ps" : [
"io.v.nutz.web.commons.proc.LogTimeProcessor",
"io.v.nutz.web.commons.proc.GlobalsSettingProcessor",
"org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor",
"org.nutz.mvc.impl.processor.EncodingProcessor",
"org.nutz.mvc.impl.processor.ModuleProcessor",
"org.nutz.mvc.impl.processor.ActionFiltersProcessor",
"io.v.nutz.web.commons.proc.XssSqlFilterProcessor",
"io.v.nutz.web.commons.proc.NutShiroProcessor",
"org.nutz.mvc.impl.processor.AdaptorProcessor",
"org.nutz.mvc.impl.processor.MethodInvokeProcessor",
"org.nutz.mvc.impl.processor.ViewProcessor"
],
"error" : 'io.v.nutz.web.commons.proc.WkFailProcessor'
}
};
-50
View File
@@ -1,50 +0,0 @@
/* cms_menu_01 */
update sys_menu set location=10 where path='0001'
/* cms_menu_02 */
update sys_menu set location=8 where path='0002'
/* cms_menu_03 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('02e86a61e99746bea34236ea73dd52a5','','0003','CMS','CMS','menu','','','ti-world','1','0','cms',NULL,'9','1','1a19ef09b12344b4a797d6e6dfe7fb29','1468895671','0')
/* cms_menu_04 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('077cb6be4c7c41cc8955ee045a4f0286','68cdbf694f71445c8587a20234d6fe31','0003000300020001','添加链接','Add','data','','','','0','0','cms.link.link.add',NULL,'47','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468897043','0')
/* cms_menu_05 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('17500ef3a9e44b4fabb240162a164fcb','6075fc0cf0ef441b9d93cc3cab3445bf','0003000200020003','删除文章','Delete','data','','','','0','0','cms.content.article.delete',NULL,'40','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896170','0')
/* cms_menu_06 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('31ed2243077c44448cce26abfd5ae574','9822bafbe3454dfd8e8b974ebc304d03','0003000300010002','修改分类','Edit','data','','','','0','0','cms.link.class.edit',NULL,'44','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896957','0')
/* cms_menu_07 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('33aed9298643424783116e0cf0f7fcbe','6075fc0cf0ef441b9d93cc3cab3445bf','0003000200020001','添加文章','Add','data','','','','0','0','cms.content.article.add',NULL,'38','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896151','0')
/* cms_menu_08 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('36e0faf5062b4f6b95d4167cbb1f8fea','68cdbf694f71445c8587a20234d6fe31','0003000300020002','修改链接','Edit','data','','','','0','0','cms.link.link.edit',NULL,'48','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468897051','0')
/* cms_menu_09 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('3c24111091ad4a70ad2d9cc361311d2f','68cdbf694f71445c8587a20234d6fe31','0003000300020003','删除链接','Delete','data','','','','0','0','cms.link.link.delete',NULL,'49','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468897060','0')
/* cms_menu_10 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('3f330d729ca34dc9825c46122be1bfae','02e86a61e99746bea34236ea73dd52a5','00030003','广告链接','AD','menu','','','ti-link','1','0','cms.link',NULL,'41','1','1a19ef09b12344b4a797d6e6dfe7fb29','1468896230','0')
/* cms_menu_11 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('4781372b00bb4d52b429b58e72b80c68','b2631bbdbf824cc4b74d819c87962c0d','0003000200010001','添加栏目','Add','data','','','','0','0','cms.content.channel.add',NULL,'33','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896049','0')
/* cms_menu_12 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('50ba60ee650e4c739e6abc3ab71e4960','b2631bbdbf824cc4b74d819c87962c0d','0003000200010004','栏目排序','Sort','data','','','','0','0','cms.content.channel.sort',NULL,'36','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896092','0')
/* cms_menu_13 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('6075fc0cf0ef441b9d93cc3cab3445bf','6b6de8c720c645a1808e1c3e9ccbfc90','000300020002','文章管理','Article','menu','/platform/cms/article','data-pjax','','1','0','cms.content.article',NULL,'37','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896141','0')
/* cms_menu_14 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('68cdbf694f71445c8587a20234d6fe31','3f330d729ca34dc9825c46122be1bfae','000300030002','链接管理','Link','menu','/platform/cms/link/link','data-pjax','','1','0','cms.link.link',NULL,'46','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468897031','0')
/* cms_menu_15 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('6b6de8c720c645a1808e1c3e9ccbfc90','02e86a61e99746bea34236ea73dd52a5','00030002','内容管理','Content','menu','','','ti-pencil-alt','1','0','cms.content',NULL,'31','1','1a19ef09b12344b4a797d6e6dfe7fb29','1468895990','0')
/* cms_menu_16 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('7125a72beee34b21ab3df9bf01b7bce6','9822bafbe3454dfd8e8b974ebc304d03','0003000300010003','删除分类','Delete','data','','','','0','0','cms.link.class.delete',NULL,'45','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896968','0')
/* cms_menu_17 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('73a29d3f99224426b5a87c92da122275','d1e991ad38a8424daf9f7eb000ee27f4','0003000100010001','保存配置','Save','data','','','','0','0','cms.site.settings.save',NULL,'30','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468895899','0')
/* cms_menu_18 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('7db6207d0dab4d6e95a7eee4f2efe875','9822bafbe3454dfd8e8b974ebc304d03','0003000300010001','添加分类','Add','data','','','','0','0','cms.link.class.add',NULL,'43','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896947','0')
/* cms_menu_19 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('9822bafbe3454dfd8e8b974ebc304d03','3f330d729ca34dc9825c46122be1bfae','000300030001','链接分类','Class','menu','/platform/cms/link/class','data-pjax','','1','0','cms.link.class',NULL,'42','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896932','0')
/* cms_menu_20 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('b2631bbdbf824cc4b74d819c87962c0d','6b6de8c720c645a1808e1c3e9ccbfc90','000300020001','栏目管理','Channel','menu','/platform/cms/channel','data-pjax','','1','0','cms.content.channel',NULL,'32','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896018','0')
/* cms_menu_21 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('d1e991ad38a8424daf9f7eb000ee27f4','d920314e925c451da6d881e7a29743b7','000300010001','网站配置','Settings','menu','/platform/cms/site','data-pjax','','1','0','cms.site.settings',NULL,'29','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468895881','0')
/* cms_menu_22 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('d920314e925c451da6d881e7a29743b7','02e86a61e99746bea34236ea73dd52a5','00030001','站点管理','Site','menu','','','ti-world','1','0','cms.site',NULL,'28','1','1a19ef09b12344b4a797d6e6dfe7fb29','1468895821','0')
/* cms_menu_23 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('e461c62a1d5441619cd35612f3b40691','b2631bbdbf824cc4b74d819c87962c0d','0003000200010002','修改栏目','Edit','data','','','','0','0','cms.content.channel.edit',NULL,'34','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896060','0')
/* cms_menu_24 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('ef9f436c61654ec09efbfa79a40061cf','6075fc0cf0ef441b9d93cc3cab3445bf','0003000200020002','修改文章','Edit','data','','','','0','0','cms.content.article.edit',NULL,'39','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896159','0')
/* cms_menu_25 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('f6fba69c3b704d79834b8bd2cc753729','b2631bbdbf824cc4b74d819c87962c0d','0003000200010003','删除栏目','Delete','data','','','','0','0','cms.content.channel.delete',NULL,'35','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896072','0')
-103
View File
@@ -1,103 +0,0 @@
/* wx_menu_01 */
update sys_menu set location=10 where path='0001'
/* wx_menu_02 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('b0edc6861a494b79b97990dc05f0a524','','0002','微信','Wechat','menu','','','fa fa-weixin','1','0','wx',NULL,'8','1','','1467471229','0')
/* wx_menu_03 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('e4256d7b0ffc4a02906cf900322b6213','b0edc6861a494b79b97990dc05f0a524','00020001','微信会员','Member','menu','','','fa fa-user','1','0','wx.user',NULL,'1','1','','1467471292','0')
/* wx_menu_04 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('b19b23b0459a4754bf1fb8cb234450f2','e4256d7b0ffc4a02906cf900322b6213','000200010001','会员列表','List','menu','/platform/wx/user/index','data-pjax','','1','0','wx.user.list',NULL,'2','0','','1467471357','0')
/* wx_menu_05 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('4dc997fef71e4862b9db22de8e99a618','b19b23b0459a4754bf1fb8cb234450f2','0002000100010001','同步会员信息','Sync','data','','','','0','0','wx.user.list.sync',NULL,'0','0','','1467473044','0')
/* wx_menu_06 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('9f20a757a6bc40ddbb650c70debbf660','b0edc6861a494b79b97990dc05f0a524','00020002','消息管理','Message','menu','','','ti-pencil-alt','1','0','wx.msg',NULL,'3','1','','1467471415','0')
/* wx_menu_07 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('f426468abf714b1599729f8c36ebbb0d','9f20a757a6bc40ddbb650c70debbf660','000200020001','会员消息','Msg','menu','/platform/wx/msg/user','data-pjax','','1','0','wx.msg.user',NULL,'4','1','','1467471478','0')
/* wx_menu_08 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('1734e586e96941268a4c5248b593cef9','f426468abf714b1599729f8c36ebbb0d','0002000200010001','回复消息','Reply','data','','','','0','0','wx.msg.user.reply',NULL,'0','0','','1467473127','0')
/* wx_menu_09 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('6bb17a41f6394ed0a8a6faf5ff781354','9f20a757a6bc40ddbb650c70debbf660','000200020002','群发消息','Mass','menu','/platform/wx/msg/mass','data-pjax','','1','0','wx.msg.mass',NULL,'5','0','','1467471561','0')
/* wx_menu_10 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('56d0658c5a8848818ac05e8ffa5c0570','6bb17a41f6394ed0a8a6faf5ff781354','0002000200020001','添加图文','Add','data','','','','0','0','wx.msg.mass.addNews',NULL,'0','0','','1467473338','0')
/* wx_menu_11 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('ce709456e867425297955b3c40406d7e','6bb17a41f6394ed0a8a6faf5ff781354','0002000200020002','删除图文','Delete','data','','','','0','0','wx.msg.mass.delNews',NULL,'0','0','','1467473363','0')
/* wx_menu_12 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('3099f497480c4b1987bce3f3a26c3fb4','6bb17a41f6394ed0a8a6faf5ff781354','0002000200020003','群发消息','Push','data','','','','0','0','wx.msg.mass.pushNews',NULL,'0','0','','1467473400','0')
/* wx_menu_13 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('4cd8e4e9519e4cff95465194fdcc8d88','b0edc6861a494b79b97990dc05f0a524','00020003','自动回复','AutoReply','menu','','','ti-back-left','1','0','wx.reply',NULL,'6','1','','1467471610','0')
/* wx_menu_14 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('234f8ec3c2bc42bf9f6202aecae36fd6','4cd8e4e9519e4cff95465194fdcc8d88','000200030001','文本内容','Txt','menu','/platform/wx/reply/txt','data-pjax','','1','0','wx.reply.txt',NULL,'7','0','','1467471884','0')
/* wx_menu_15 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('c3a44b478d3241b899b9c3f4611bc2b6','234f8ec3c2bc42bf9f6202aecae36fd6','0002000300010001','添加文本','Add','data','','','','0','0','wx.reply.txt.add',NULL,'0','0','','1467473460','0')
/* wx_menu_16 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('fd63a8e389e04ff3a86c3cea53a3b9d5','234f8ec3c2bc42bf9f6202aecae36fd6','0002000300010002','修改文本','Edit','data','','','','0','0','wx.reply.txt.edit',NULL,'0','0','','1467473519','0')
/* wx_menu_17 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('7c040dfd8db347e5956a3bc1764653dc','234f8ec3c2bc42bf9f6202aecae36fd6','0002000300010003','删除文本','Delete','data','','','','0','0','wx.reply.txt.delete',NULL,'0','0','','1467473540','0')
/* wx_menu_18 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('234f8ec3c2bc42bf9f6202aecae36f99','4cd8e4e9519e4cff95465194fdcc8d88','000200030005','图片内容','Img','menu','/platform/wx/reply/img','data-pjax','','1','0','wx.reply.img',NULL,'8','0','','1467471884','0')
/* wx_menu_19 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('c3a44b478d3241b899b9c3f4611bc216','234f8ec3c2bc42bf9f6202aecae36f99','0002000300050001','添加图片','Add','data','','','','0','0','wx.reply.img.add',NULL,'0','0','','1467473460','0')
/* wx_menu_20 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('fd63a8e389e04ff3a86c3cea53a3b925','234f8ec3c2bc42bf9f6202aecae36f99','0002000300050002','修改图片','Edit','data','','','','0','0','wx.reply.img.edit',NULL,'0','0','','1467473519','0')
/* wx_menu_21 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('7c040dfd8db347e5956a3bc17646533c','234f8ec3c2bc42bf9f6202aecae36f99','0002000300050003','删除图片','Delete','data','','','','0','0','wx.reply.img.delete',NULL,'0','0','','1467473540','0')
/* wx_menu_22 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('17e1ee23ca1443f1bc886c2f5eb7c24b','4cd8e4e9519e4cff95465194fdcc8d88','000200030002','图文内容','News','menu','/platform/wx/reply/news','data-pjax','','1','0','wx.reply.news',NULL,'9','0','','1467471926','0')
/* wx_menu_23 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('2275cb125710414e91b617dd7c62f12c','17e1ee23ca1443f1bc886c2f5eb7c24b','0002000300020001','添加图文','add','data','','','','0','0','wx.reply.news.add',NULL,'0','0','','1467473585','0')
/* wx_menu_24 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('0a972ce655cb4c84809d58668b655900','17e1ee23ca1443f1bc886c2f5eb7c24b','0002000300020002','修改图文','Edit','data','','','','0','0','wx.reply.news.edit',NULL,'0','0','','1467473596','0')
/* wx_menu_25 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('fc52d5284b8f4522802383c1ef732242','17e1ee23ca1443f1bc886c2f5eb7c24b','0002000300020003','删除图文','Delete','data','','','','0','0','wx.reply.news.delete',NULL,'0','0','','1467473606','0')
/* wx_menu_26 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('2cb327ad59b140828fd26eb2a46cb948','4cd8e4e9519e4cff95465194fdcc8d88','000200030003','关注自动回复','Follow','menu','/platform/wx/reply/conf/follow','data-pjax','','1','0','wx.reply.follow',NULL,'10','0','','1467472280','0')
/* wx_menu_27 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('dd965b2c1dfd493fb5efc7e4bcac99d4','2cb327ad59b140828fd26eb2a46cb948','0002000300030001','添加绑定','Add','data','','','','0','0','wx.reply.follow.add',NULL,'0','0','','1467474026','0')
/* wx_menu_28 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('30a5e70a1456447ebf90b5546e9bc321','2cb327ad59b140828fd26eb2a46cb948','0002000300030002','修改绑定','Edit','data','','','','0','0','wx.reply.follow.edit',NULL,'0','0','','1467474056','0')
/* wx_menu_29 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('2a63040409094f1e9dc535dd78ce15b7','2cb327ad59b140828fd26eb2a46cb948','0002000300030003','删除绑定','Delete','data','','','','0','0','wx.reply.follow.delete',NULL,'0','0','','1467474080','0')
/* wx_menu_30 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('0706112ff5dc46e388064a99bcdb0561','4cd8e4e9519e4cff95465194fdcc8d88','000200030004','关键词回复','Keyword','menu','/platform/wx/reply/conf/keyword','data-pjax','','1','0','wx.reply.keyword',NULL,'11','0','','1467472362','0')
/* wx_menu_31 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('e864c78aba63448892cbcb6a3a7f4da7','0706112ff5dc46e388064a99bcdb0561','0002000300040001','添加绑定','Add','data','','','','0','0','wx.reply.keyword.add',NULL,'0','0','','1467474113','0')
/* wx_menu_32 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('ff6cd243a77c4ae98dacf6149c816c75','0706112ff5dc46e388064a99bcdb0561','0002000300040002','修改绑定','Edit','data','','','','0','0','wx.reply.keyword.edit',NULL,'0','0','','1467474125','0')
/* wx_menu_33 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('733d3f35d49f45af99ca9220048583ba','0706112ff5dc46e388064a99bcdb0561','0002000300040003','删除绑定','Delete','data','','','','0','0','wx.reply.keyword.delete',NULL,'0','0','','1467474136','0')
/* wx_menu_34 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('bcf64d623fdd4519ae345b7a08c071a1','b0edc6861a494b79b97990dc05f0a524','00020004','微信配置','Config','menu','','','fa fa-weixin','1','0','wx.conf',NULL,'12','1','','1467472498','0')
/* wx_menu_35 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('66cc21d7ce104dd6877cbce114c59fb3','bcf64d623fdd4519ae345b7a08c071a1','000200040001','帐号配置','Account','menu','/platform/wx/conf/account','data-pjax','','1','0','wx.conf.account',NULL,'13','0','','1467472624','0')
/* wx_menu_36 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('309dc29ad3c34408a68df8f867a5c9ff','66cc21d7ce104dd6877cbce114c59fb3','0002000400010001','添加帐号','Add','data','','','','0','0','wx.conf.account.add',NULL,'0','0','','1467474187','0')
/* wx_menu_37 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('96554b09a2dd4f82bab7546fa59acd35','66cc21d7ce104dd6877cbce114c59fb3','0002000400010002','修改帐号','Edit','data','','','','0','0','wx.conf.account.edit',NULL,'0','0','','1467474197','0')
/* wx_menu_38 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('d568f4c2b687404e8aec7b9edcae5767','66cc21d7ce104dd6877cbce114c59fb3','0002000400010003','删除帐号','Delete','data','','','','0','0','wx.conf.account.delete',NULL,'0','0','','1467474209','0')
/* wx_menu_39 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('2fab774f8b6d40cb9d7e187babab2d91','bcf64d623fdd4519ae345b7a08c071a1','000200040002','菜单配置','Menu','menu','/platform/wx/conf/menu','data-pjax','','1','0','wx.conf.menu',NULL,'14','0','','1467472649','0')
/* wx_menu_40 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('45d958ca78304f25b51f6c71cf66f6d8','2fab774f8b6d40cb9d7e187babab2d91','0002000400020001','添加菜单','Add','data','','','','0','0','wx.conf.menu.add',NULL,'0','0','','1467474283','0')
/* wx_menu_41 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('44da90bc76a5419a841f4924333f7a66','2fab774f8b6d40cb9d7e187babab2d91','0002000400020002','修改菜单','Edit','data','','','','0','0','wx.conf.menu.edit',NULL,'0','0','','1467474294','0')
/* wx_menu_42 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('9a9557177d334c209cf73c3817fe3b63','2fab774f8b6d40cb9d7e187babab2d91','0002000400020003','删除菜单','Delete','data','','','','0','0','wx.conf.menu.delete',NULL,'0','0','','1467474304','0')
/* wx_menu_43 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('0a43d291e0c94ad88c8b690009279e34','2fab774f8b6d40cb9d7e187babab2d91','0002000400020004','保存排序','Save','data','','','','0','0','wx.conf.menu.sort',NULL,'0','0','','1467474314','0')
/* wx_menu_44 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('5244f5c38eb24b918e9ad64d456daa38','2fab774f8b6d40cb9d7e187babab2d91','0002000400020005','推送到微信','Push','data','','','','0','0','wx.conf.menu.push',NULL,'0','0','','1467474330','0')
/* wx_menu_45 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('6afc5075913d4df4b44a6476080e35a0','b0edc6861a494b79b97990dc05f0a524','00020005','模板消息','Template','menu','','','ti-notepad','1','0','wx.tpl',NULL,'50','1','','1470406797','0')
/* wx_menu_46 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('1385ae887e5c4b8aa33fbf228be7f907','6afc5075913d4df4b44a6476080e35a0','000200050001','模板编号','Id','menu','/platform/wx/tpl/id','data-pjax','','1','0','wx.tpl.id',NULL,'51','0','','1470406854','0')
/* wx_menu_47 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('e6b6224617b04090a76e46a4b048fb96','1385ae887e5c4b8aa33fbf228be7f907','0002000500010001','添加编号','Add','data','','','','0','0','wx.tpl.id.add',NULL,'54','0','','1470407055','0')
/* wx_menu_48 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('3888f05aa4064f788ba7ec51c495ce7c','1385ae887e5c4b8aa33fbf228be7f907','0002000500010002','删除编号','Delete','data','','','','0','0','wx.tpl.id.delete',NULL,'55','0','','1470407068','0')
/* wx_menu_49 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('cabbe834a7474675b899e8442b5c2604','6afc5075913d4df4b44a6476080e35a0','000200050002','模板列表','List','menu','/platform/wx/tpl/list','data-pjax','','1','0','wx.tpl.list',NULL,'52','0','','1470406883','0')
/* wx_menu_50 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('a11163584dfe456cbfd6fb2d4b74391b','cabbe834a7474675b899e8442b5c2604','0002000500020001','获取列表','Get','data','','','','0','0','wx.tpl.list.get',NULL,'56','0','','1470407390','0')
/* wx_menu_51 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('c76a84f871d047db955dd1465c845ac1','6afc5075913d4df4b44a6476080e35a0','000200050003','发送记录','Log','menu','/platform/wx/tpl/log','data-pjax','','1','0','wx.tpl.log',NULL,'53','0','','1470406926','0')
@@ -1,176 +0,0 @@
-- 生日祝福模块初始化脚本
-- 适用数据库:MySQL
-- 说明:
-- 1. 后台筛选项复用系统已有字典:UserState、UserType,避免覆盖现有人员口径。
-- 2. 菜单和角色授权采用幂等写法,可重复执行。
CREATE TABLE IF NOT EXISTS `blessing` (
`id` varchar(32) NOT NULL COMMENT 'id',
`blessingName` varchar(32) DEFAULT NULL COMMENT '祝福名称',
`activityGroupId` varchar(32) DEFAULT NULL COMMENT '发送范围',
`blessingMode` varchar(32) DEFAULT NULL COMMENT '祝福模式',
`isSend` varchar(2) DEFAULT NULL COMMENT '是否发送,0未开启,1进行中,2,已完成',
`sendTypes` json DEFAULT NULL COMMENT '发送方式',
`blessingContent` text COMMENT '祝福内容',
`blessingCron` text COMMENT 'cron表达式',
`applyDate` varchar(30) DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='祝福计划表';
CREATE TABLE IF NOT EXISTS `blessing_user` (
`id` varchar(32) NOT NULL COMMENT 'id',
`userId` varchar(32) DEFAULT NULL COMMENT '接收人ID',
`blessingId` varchar(32) DEFAULT NULL COMMENT '祝福ID',
`applyDate` varchar(32) DEFAULT NULL COMMENT '发送时间',
PRIMARY KEY (`id`),
KEY `idx_blessing_user_userId` (`userId`),
KEY `idx_blessing_user_blessingId` (`blessingId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='祝福发送人员表';
CREATE TABLE IF NOT EXISTS `blessing_gift` (
`id` varchar(32) NOT NULL COMMENT 'ID',
`giftName` varchar(50) DEFAULT NULL COMMENT '礼物名称',
`fileName` varchar(50) DEFAULT NULL COMMENT '礼物文件名称',
`files` json DEFAULT NULL COMMENT '礼物图片',
`sortField` varchar(10) DEFAULT NULL COMMENT '排序字段',
`createBy` varchar(32) DEFAULT NULL COMMENT '创建人',
`createDate` varchar(50) DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='祝福礼物表';
CREATE TABLE IF NOT EXISTS `greeting` (
`id` varchar(32) NOT NULL COMMENT 'ID',
`birthday` varchar(4) DEFAULT NULL COMMENT '职工生日',
`userId` varchar(32) DEFAULT NULL COMMENT '职工ID',
`username` varchar(32) DEFAULT NULL COMMENT '职工姓名',
`loginname` varchar(32) DEFAULT NULL COMMENT '职工编号',
PRIMARY KEY (`id`),
KEY `idx_greeting_userId` (`userId`),
KEY `idx_greeting_birthday` (`birthday`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生日祝福中间表';
CREATE TABLE IF NOT EXISTS `greeting_info` (
`id` varchar(32) NOT NULL COMMENT 'ID',
`presenter` varchar(32) DEFAULT NULL COMMENT '赠送者ID',
`received` varchar(32) DEFAULT NULL COMMENT '收到者ID',
`giftId` varchar(32) DEFAULT NULL COMMENT '礼物ID',
`giftTime` varchar(32) DEFAULT NULL COMMENT '送礼时间',
`message` varchar(255) DEFAULT NULL COMMENT '祝福语',
`isSend` tinyint(1) DEFAULT '0' COMMENT '是否发送贺卡',
PRIMARY KEY (`id`),
KEY `idx_greeting_info_received` (`received`),
KEY `idx_greeting_info_presenter` (`presenter`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生日礼物记录表';
CREATE TABLE IF NOT EXISTS `user_birthday_config` (
`id` varchar(32) NOT NULL COMMENT 'id',
`picUrl` varchar(100) DEFAULT NULL COMMENT '图片地址',
`birthdayUrl` varchar(100) DEFAULT NULL 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 '删除标记',
`opBy` varchar(255) DEFAULT NULL COMMENT 'opBy',
`opAt` varchar(255) DEFAULT NULL COMMENT 'opAt',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生日祝福配置表';
CREATE TABLE IF NOT EXISTS `user_birthday_msg_log` (
`id` varchar(32) NOT NULL COMMENT 'id',
`pushTime` varchar(50) DEFAULT NULL COMMENT '推送时间',
`msgTitle` varchar(100) DEFAULT NULL COMMENT '消息标题',
`msgContent` text COMMENT '消息内容',
`receiveBy` varchar(50) DEFAULT NULL COMMENT '接收人',
`receiveName` varchar(50) DEFAULT NULL COMMENT '接收人姓名',
`pushBy` varchar(50) DEFAULT NULL COMMENT '推送人',
`pushByName` varchar(50) DEFAULT NULL COMMENT '推送人姓名',
`pushType` varchar(50) DEFAULT NULL COMMENT '推送人类型',
`link` varchar(500) DEFAULT NULL 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 '删除标记',
`opBy` varchar(255) DEFAULT NULL COMMENT 'opBy',
`opAt` varchar(255) DEFAULT NULL COMMENT 'opAt',
PRIMARY KEY (`id`),
KEY `idx_user_birthday_msg_log_receiveBy` (`receiveBy`),
KEY `idx_user_birthday_msg_log_pushTime` (`pushTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生日祝福消息日志表';
INSERT INTO `sys_config` (`configKey`, `configValue`, `note`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
SELECT 'GreetingTime', '15', '生日祝福查询时间范围:当天起未来N天', '', UNIX_TIMESTAMP() * 1000, '', UNIX_TIMESTAMP() * 1000, 0
WHERE NOT EXISTS (SELECT 1 FROM `sys_config` WHERE `configKey` = 'GreetingTime');
INSERT INTO `sys_config` (`configKey`, `configValue`, `note`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
SELECT 'BirthdayAutoSendEnabled', '1', '生日祝福是否自动发送', '', UNIX_TIMESTAMP() * 1000, '', UNIX_TIMESTAMP() * 1000, 0
WHERE NOT EXISTS (SELECT 1 FROM `sys_config` WHERE `configKey` = 'BirthdayAutoSendEnabled');
INSERT INTO `sys_config` (`configKey`, `configValue`, `note`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
SELECT 'BirthdayAutoSendTitle', '请点击查收您的生日福利', '生日祝福自动发送标题', '', UNIX_TIMESTAMP() * 1000, '', UNIX_TIMESTAMP() * 1000, 0
WHERE NOT EXISTS (SELECT 1 FROM `sys_config` WHERE `configKey` = 'BirthdayAutoSendTitle');
INSERT INTO `sys_config` (`configKey`, `configValue`, `note`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
SELECT 'BirthdayAutoSendContent', '校工会祝您:生日快乐!幸福安康', '生日祝福自动发送内容', '', UNIX_TIMESTAMP() * 1000, '', UNIX_TIMESTAMP() * 1000, 0
WHERE NOT EXISTS (SELECT 1 FROM `sys_config` WHERE `configKey` = 'BirthdayAutoSendContent');
INSERT INTO `sys_task` (`id`, `name`, `jobClass`, `note`, `cron`, `data`, `exeAt`, `exeResult`, `disabled`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
SELECT 'bd000000000000000000000000000101', 'UserBirthdayJob', 'io.v.nutz.task.job.staffmanage.UserBirthdayJob', '生日当天自动发送生日福利通知', '0 0 9 * * ?', NULL, NULL, NULL, 0, '', UNIX_TIMESTAMP() * 1000, '', UNIX_TIMESTAMP() * 1000, 0
WHERE NOT EXISTS (SELECT 1 FROM `sys_task` WHERE `name` = 'UserBirthdayJob');
INSERT INTO `sys_task` (`id`, `name`, `jobClass`, `note`, `cron`, `data`, `exeAt`, `exeResult`, `disabled`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
SELECT 'bd000000000000000000000000000102', 'GreetingJob', 'io.v.nutz.task.job.brithday.GreetingJob', '生成生日祝福中间表数据', '0 0 1 * * ?', NULL, NULL, NULL, 0, '', UNIX_TIMESTAMP() * 1000, '', UNIX_TIMESTAMP() * 1000, 0
WHERE NOT EXISTS (SELECT 1 FROM `sys_task` WHERE `name` = 'GreetingJob');
SET @birthday_root_id := 'bd000000000000000000000000000201';
SET @birthday_manage_id := 'bd000000000000000000000000000202';
SET @birthday_msglog_id := 'bd000000000000000000000000000203';
SET @birthday_config_id := 'bd000000000000000000000000000204';
SET @birthday_autosend_id := 'bd000000000000000000000000000205';
SET @birthday_export_id := 'bd000000000000000000000000000206';
SET @birthday_root_id := IFNULL((SELECT `id` FROM `sys_menu` WHERE `permission` = 'staffManage.birthday' LIMIT 1), @birthday_root_id);
SET @birthday_root_path := (SELECT `path` FROM `sys_menu` WHERE `id` = @birthday_root_id LIMIT 1);
SET @birthday_root_path := IFNULL(@birthday_root_path, LPAD((SELECT IFNULL(MAX(CAST(`path` AS UNSIGNED)), 0) + 1 FROM `sys_menu` WHERE IFNULL(`parentId`, '') = '' AND LENGTH(`path`) = 4), 4, '0'));
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `aliasName`, `type`, `href`, `target`, `icon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
SELECT @birthday_root_id, '', @birthday_root_path, '生日祝福', 'BirthdayBlessing', 'menu', '', '', 'fa fa-birthday-cake', 1, 0, 'staffManage.birthday', '生日祝福模块', (SELECT IFNULL(MAX(`location`), 0) + 1 FROM (SELECT `location` FROM `sys_menu`) m), 1, '', UNIX_TIMESTAMP() * 1000, '', UNIX_TIMESTAMP() * 1000, 0
WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `id` = @birthday_root_id OR `permission` = 'staffManage.birthday');
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `aliasName`, `type`, `href`, `target`, `icon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
SELECT @birthday_manage_id, @birthday_root_id, CONCAT(@birthday_root_path, '0001'), '生日管理', 'BirthdayManage', 'menu', '/platform/staffManage/birthday/manage', 'data-pjax', '', 1, 0, 'staffManage.birthday.manage', '生日人员查询、贺卡配置和通知发送', (SELECT IFNULL(MAX(`location`), 0) + 1 FROM (SELECT `location` FROM `sys_menu`) m), 0, '', UNIX_TIMESTAMP() * 1000, '', UNIX_TIMESTAMP() * 1000, 0
WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `id` = @birthday_manage_id OR `permission` = 'staffManage.birthday.manage');
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `aliasName`, `type`, `href`, `target`, `icon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
SELECT @birthday_msglog_id, @birthday_root_id, CONCAT(@birthday_root_path, '0002'), '发送记录', 'BirthdayMsgLog', 'menu', '/platform/staffManage/birthday/msgLog', 'data-pjax', '', 1, 0, 'staffManage.birthday.msgLog', '生日祝福通知发送记录', (SELECT IFNULL(MAX(`location`), 0) + 1 FROM (SELECT `location` FROM `sys_menu`) m), 0, '', UNIX_TIMESTAMP() * 1000, '', UNIX_TIMESTAMP() * 1000, 0
WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `id` = @birthday_msglog_id OR `permission` = 'staffManage.birthday.msgLog');
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `aliasName`, `type`, `href`, `target`, `icon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
SELECT @birthday_config_id, @birthday_root_id, CONCAT(@birthday_root_path, '0003'), '系统配置', 'BirthdayConfig', 'menu', '/platform/staffManage/birthday/config', 'data-pjax', '', 1, 0, 'staffManage.birthday.config', '生日祝福背景图、贺卡、倒计时和自动发送开关配置', (SELECT IFNULL(MAX(`location`), 0) + 1 FROM (SELECT `location` FROM `sys_menu`) m), 0, '', UNIX_TIMESTAMP() * 1000, '', UNIX_TIMESTAMP() * 1000, 0
WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `id` = @birthday_config_id OR `permission` = 'staffManage.birthday.config');
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `aliasName`, `type`, `href`, `target`, `icon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
SELECT @birthday_autosend_id, @birthday_root_id, CONCAT(@birthday_root_path, '0004'), '自动发送祝福', 'BirthdayAutoSend', 'menu', '/platform/staffManage/birthday/autoSend', 'data-pjax', '', 1, 0, 'staffManage.birthday.autoSend', '生日祝福自动发送任务配置', (SELECT IFNULL(MAX(`location`), 0) + 1 FROM (SELECT `location` FROM `sys_menu`) m), 0, '', UNIX_TIMESTAMP() * 1000, '', UNIX_TIMESTAMP() * 1000, 0
WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `id` = @birthday_autosend_id OR `permission` = 'staffManage.birthday.autoSend');
INSERT INTO `sys_menu` (`id`, `parentId`, `path`, `name`, `aliasName`, `type`, `href`, `target`, `icon`, `showit`, `disabled`, `permission`, `note`, `location`, `hasChildren`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`)
SELECT @birthday_export_id, @birthday_root_id, CONCAT(@birthday_root_path, '0005'), '数据导出', 'BirthdayExport', 'menu', '/platform/staffManage/birthday/export', 'data-pjax', '', 1, 0, 'staffManage.birthday.export', '生日祝福人员名单和签名表导出', (SELECT IFNULL(MAX(`location`), 0) + 1 FROM (SELECT `location` FROM `sys_menu`) m), 0, '', UNIX_TIMESTAMP() * 1000, '', UNIX_TIMESTAMP() * 1000, 0
WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `id` = @birthday_export_id OR `permission` = 'staffManage.birthday.export');
INSERT INTO `sys_role_menu` (`roleId`, `menuId`)
SELECT r.`id`, m.`id`
FROM `sys_role` r
JOIN `sys_menu` m ON m.`permission` IN (
'staffManage.birthday',
'staffManage.birthday.manage',
'staffManage.birthday.config',
'staffManage.birthday.autoSend',
'staffManage.birthday.msgLog',
'staffManage.birthday.export'
)
WHERE r.`code` = 'sysadmin'
AND NOT EXISTS (
SELECT 1 FROM `sys_role_menu` rm
WHERE rm.`roleId` = r.`id`
AND rm.`menuId` = m.`id`
);
-128
View File
@@ -1,128 +0,0 @@
#user nobody;
worker_processes auto;
worker_rlimit_nofile 100000;
error_log logs/error.log warn;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
client_max_body_size 10m;
log_format main '$remote_addr $remote_user [$time_local] "$request" '
'"$http_host" $status $upstream_status '
'$body_bytes_sent "$http_referer" '
'"$http_cookie" "$http_x_forwarded_for" '
'"$upstream_addr" $request_time $upstream_response_time';
#配置按天生成日志文件
map $time_iso8601 $logdate {
'~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
default 'date-not-found';
}
access_log logs/access-$logdate.log main;
error_log logs/error.log;
server_tokens off;
sendfile on;
#tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60;
client_header_timeout 10;
client_body_timeout 10;
reset_timedout_connection on;
send_timeout 30;
proxy_connect_timeout 60;
proxy_read_timeout 60;
proxy_send_timeout 60;
gzip on;
gzip_disable "msie6";
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1000;
gzip_proxied any;
gzip_vary on;
add_header X-Frame-Options SAMEORIGIN;
#设置访问的web应用列表
upstream app{
server 127.0.0.1:8080;
}
server {
listen 80;
server_name zhgh.nsi.edu.cn;
#rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
location /{
proxy_pass http://app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header X-real-ip $remote_addr;
proxy_cache_bypass $http_upgrade;
}
location /csrf.html{
root html;
}
#access_log logs/host.access.log main;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#HTTPS server
server {
listen 443 ssl;
server_name zhgh.nsi.edu.cn;
ssl_certificate C:/env/ssl/_.nsi.edu.cn_bundle.crt;
ssl_certificate_key C:/env/ssl/_.nsi.edu.cn.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /{
proxy_pass http://app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header X-real-ip $remote_addr;
proxy_cache_bypass $http_upgrade;
}
location /csrf.html{
root html;
}
#access_log logs/host.access.log main;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,193 +0,0 @@
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
>
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Author>Administrator</Author>
<LastAuthor>11386</LastAuthor>
<Created>2019-11-13T03:15:50Z</Created>
<LastSaved>2019-12-15T12:17:40Z</LastSaved>
<Company>Microsoft</Company>
<Version>16.00</Version>
</DocumentProperties>
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
<AllowPNG/>
</OfficeDocumentSettings>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>5532</WindowHeight>
<WindowWidth>16212</WindowWidth>
<WindowTopX>32767</WindowTopX>
<WindowTopY>32767</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Center"/>
<Borders/>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="s62">
<Interior/>
</Style>
<Style ss:ID="s64">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Font ss:FontName="方正小标宋简体" x:CharSet="134" ss:Size="16" ss:Color="#000000"/>
<Interior/>
</Style>
<Style ss:ID="s66">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders/>
<Font ss:FontName="黑体" x:CharSet="134" x:Family="Modern" ss:Size="11"
ss:Color="#000000" ss:Bold="1"/>
<Interior/>
</Style>
<Style ss:ID="s68">
<Alignment ss:Horizontal="Left" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="黑体" x:CharSet="134" x:Family="Modern" ss:Size="11"
ss:Color="#000000"/>
<Interior/>
</Style>
<Style ss:ID="s70">
<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Bold="1"/>
<Interior/>
</Style>
<Style ss:ID="s71">
<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11"/>
<Interior/>
</Style>
<Style ss:ID="s72">
<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11"/>
<Interior/>
</Style>
</Styles>
<Worksheet ss:Name="Sheet1">
<Table ss:ExpandedColumnCount="9" ss:ExpandedRowCount="999" x:FullColumns="1"
x:FullRows="1" ss:StyleID="s62" ss:DefaultColumnWidth="328.20000000000005"
ss:DefaultRowHeight="14.55">
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="34.199999999999996"/>
<Column ss:StyleID="s62" ss:Width="329.40000000000003"/>
<Column ss:StyleID="s62" ss:Width="93"/>
<Column ss:StyleID="s62" ss:Width="115.2"/>
<Column ss:StyleID="s62" ss:Width="317.39999999999998"/>
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="85.2"/>
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="68.399999999999991"/>
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="76.8"/>
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="87.6"/>
<Row ss:AutoFitHeight="0" ss:Height="20.549999999999997">
<Cell ss:MergeAcross="7" ss:StyleID="s64"><Data ss:Type="String">${meetingName}提案承办分单位表</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0">
<Cell ss:MergeAcross="7" ss:StyleID="s66"><Data ss:Type="String">${unitName}</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0">
<Cell ss:MergeAcross="7" ss:StyleID="s68"><Data ss:Type="String">${principal}</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="43.199999999999996">
<Cell ss:StyleID="s70"><Data ss:Type="String">序号</Data></Cell>
<Cell ss:StyleID="s70"><Data ss:Type="String">提案案名</Data></Cell>
<Cell ss:StyleID="s70"><Data ss:Type="String">提案人</Data></Cell>
<Cell ss:StyleID="s70"><Data ss:Type="String">承办单位</Data></Cell>
<Cell ss:StyleID="s70"><Data ss:Type="String">协办单位</Data></Cell>
<Cell ss:StyleID="s70"><Data ss:Type="String">提案人是否已签署反馈意见</Data></Cell>
<Cell ss:StyleID="s70"><Data ss:Type="String">备注</Data></Cell>
</Row>
<#list pros as xx>
<Row ss:AutoFitHeight="0">
<Cell ss:StyleID="s71"><Data ss:Type="Number">${xx_index+1}</Data></Cell>
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.proposalName!}</Data></Cell>
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.username!}(${xx.unitname!})</Data></Cell>
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.pruMaster!}</Data></Cell>
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.pruSlave!}</Data></Cell>
<Cell ss:StyleID="s72"><Data ss:Type="String"><#if xx.feedback??>已签署<#else>未签署</#if></Data></Cell>
<Cell ss:StyleID="s70"/>
</Row>
</#list>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<Selected/>
<Panes>
<Pane>
<Number>3</Number>
<ActiveRow>4</ActiveRow>
<ActiveCol>7</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name="Sheet2">
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
x:FullRows="1" ss:DefaultRowHeight="14.55">
<Row ss:AutoFitHeight="0"/>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name="Sheet3">
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
x:FullRows="1" ss:DefaultRowHeight="14.55">
<Row ss:AutoFitHeight="0"/>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<Print>
<ValidPrinterInfo/>
<PaperSizeIndex>9</PaperSizeIndex>
<HorizontalResolution>600</HorizontalResolution>
<VerticalResolution>600</VerticalResolution>
</Print>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-194
View File
@@ -1,194 +0,0 @@
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Author>Administrator</Author>
<LastAuthor>11386</LastAuthor>
<Created>2019-11-13T03:15:50Z</Created>
<LastSaved>2019-12-15T12:17:40Z</LastSaved>
<Company>Microsoft</Company>
<Version>16.00</Version>
</DocumentProperties>
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
<AllowPNG/>
</OfficeDocumentSettings>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>5532</WindowHeight>
<WindowWidth>16212</WindowWidth>
<WindowTopX>32767</WindowTopX>
<WindowTopY>32767</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Center"/>
<Borders/>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="s62">
<Interior/>
</Style>
<Style ss:ID="s64">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Font ss:FontName="方正小标宋简体" x:CharSet="134" ss:Size="16" ss:Color="#000000"/>
<Interior/>
</Style>
<Style ss:ID="s66">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders/>
<Font ss:FontName="黑体" x:CharSet="134" x:Family="Modern" ss:Size="11"
ss:Color="#000000" ss:Bold="1"/>
<Interior/>
</Style>
<Style ss:ID="s68">
<Alignment ss:Horizontal="Left" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="黑体" x:CharSet="134" x:Family="Modern" ss:Size="11"
ss:Color="#000000"/>
<Interior/>
</Style>
<Style ss:ID="s70">
<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Bold="1"/>
<Interior/>
</Style>
<Style ss:ID="s71">
<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11"/>
<Interior/>
</Style>
<Style ss:ID="s72">
<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11"/>
<Interior/>
</Style>
</Styles>
<Worksheet ss:Name="Sheet1">
<Table ss:ExpandedColumnCount="9" ss:ExpandedRowCount="999" x:FullColumns="1"
x:FullRows="1" ss:StyleID="s62" ss:DefaultColumnWidth="328.20000000000005"
ss:DefaultRowHeight="14.55">
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="34.199999999999996"/>
<Column ss:StyleID="s62" ss:Width="329.40000000000003"/>
<Column ss:StyleID="s62" ss:Width="93"/>
<Column ss:StyleID="s62" ss:Width="115.2"/>
<Column ss:StyleID="s62" ss:Width="317.39999999999998"/>
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="85.2"/>
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="68.399999999999991"/>
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="76.8"/>
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="87.6"/>
<Row ss:AutoFitHeight="0" ss:Height="20.549999999999997">
<Cell ss:MergeAcross="7" ss:StyleID="s64"><Data ss:Type="String">${meetingName}提案承办分单位表</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0">
<Cell ss:MergeAcross="7" ss:StyleID="s66"><Data ss:Type="String">${unitName}</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0">
<Cell ss:MergeAcross="7" ss:StyleID="s68"><Data ss:Type="String">${principal}</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="43.199999999999996">
<Cell ss:StyleID="s70"><Data ss:Type="String">序号</Data></Cell>
<Cell ss:StyleID="s70"><Data ss:Type="String">提案案名</Data></Cell>
<Cell ss:StyleID="s70"><Data ss:Type="String">提案人</Data></Cell>
<Cell ss:StyleID="s70"><Data ss:Type="String">承办单位</Data></Cell>
<Cell ss:StyleID="s70"><Data ss:Type="String">协办单位</Data></Cell>
<Cell ss:StyleID="s70"><Data ss:Type="String">提案人是否已签署反馈意见</Data></Cell>
<Cell ss:StyleID="s70"><Data ss:Type="String">备注</Data></Cell>
</Row>
<#list pros as xx>
<Row ss:AutoFitHeight="0">
<Cell ss:StyleID="s71"><Data ss:Type="Number">${xx_index+1}</Data></Cell>
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.proposalName!}</Data></Cell>
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.username!}(${xx.unitname!})</Data></Cell>
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.pruMaster!}</Data></Cell>
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.pruSlave!}</Data></Cell>
<Cell ss:StyleID="s72"><Data ss:Type="String"><#if xx.feedback??>已签署<#else>未签署</#if></Data></Cell>
<Cell ss:StyleID="s70"/>
</Row>
</#list>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<Selected/>
<Panes>
<Pane>
<Number>3</Number>
<ActiveRow>4</ActiveRow>
<ActiveCol>7</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name="Sheet2">
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
x:FullRows="1" ss:DefaultRowHeight="14.55">
<Row ss:AutoFitHeight="0"/>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name="Sheet3">
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
x:FullRows="1" ss:DefaultRowHeight="14.55">
<Row ss:AutoFitHeight="0"/>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<Print>
<ValidPrinterInfo/>
<PaperSizeIndex>9</PaperSizeIndex>
<HorizontalResolution>600</HorizontalResolution>
<VerticalResolution>600</VerticalResolution>
</Print>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More