慰问、会员入会接入待办

This commit is contained in:
2026-11-06 17:25:12 +08:00
parent e744b7c271
commit 49407374b0
3257 changed files with 604 additions and 549641 deletions
+5
View File
@@ -0,0 +1,5 @@
# Maven build output is generated locally and must not be versioned.
/target/
# IDEA workspace settings belong to the local developer environment.
/.idea/workspace.xml
-215
View File
@@ -1,215 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="0fb07392-d0a7-4efe-b746-d08bbfef26ce" name="Changes" comment="广播订阅" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Class" />
</list>
</option>
</component>
<component name="GitSEFilterConfiguration">
<file-type-list>
<filtered-out-file-type name="LOCAL_BRANCH" />
<filtered-out-file-type name="REMOTE_BRANCH" />
<filtered-out-file-type name="TAG" />
<filtered-out-file-type name="COMMIT_BY_MESSAGE" />
</file-type-list>
</component>
<component name="MavenImportPreferences">
<option name="generalSettings">
<MavenGeneralSettings>
<option name="customMavenHome" value="$PROJECT_DIR$/../../apps/maven/apache-maven-3.6.3" />
<option name="localRepository" value="E:\apps\maven\maven_repo" />
<option name="mavenHomeTypeForPersistence" value="CUSTOM" />
<option name="userSettingsFile" value="E:\apps\maven\apache-maven-3.6.3\conf\settings.xml" />
</MavenGeneralSettings>
</option>
</component>
<component name="ProjectId" id="2zOwLE5J5wsHdx6LOp9U6VCtlFG" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="project.structure.last.edited" value="Project" />
<property name="project.structure.proportion" value="0.0" />
<property name="project.structure.side.proportion" value="0.2" />
<property name="settings.editor.selected.configurable" value="vcs.Subversion" />
<property name="vue.rearranger.settings.migration" value="true" />
</component>
<component name="RunManager" selected="Application.MainLauncher">
<configuration name="MainLauncher" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="io.v.nutz.MainLauncher" />
<module name="mini" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="io.v.nutz.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="WebTestDemo.addAidMember" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
<module name="mini" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="io.v.nutz.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="io.v.nutz" />
<option name="MAIN_CLASS_NAME" value="io.v.nutz.WebTestDemo" />
<option name="METHOD_NAME" value="addAidMember" />
<option name="TEST_OBJECT" value="method" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="WebTestDemo.updateTask" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
<module name="mini" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="io.v.nutz.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="io.v.nutz" />
<option name="MAIN_CLASS_NAME" value="io.v.nutz.WebTestDemo" />
<option name="METHOD_NAME" value="updateTask" />
<option name="TEST_OBJECT" value="method" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<list>
<item itemvalue="Application.MainLauncher" />
<item itemvalue="JUnit.WebTestDemo.addAidMember" />
<item itemvalue="JUnit.WebTestDemo.updateTask" />
</list>
<recent_temporary>
<list>
<item itemvalue="Application.MainLauncher" />
<item itemvalue="JUnit.WebTestDemo.updateTask" />
<item itemvalue="JUnit.WebTestDemo.addAidMember" />
</list>
</recent_temporary>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="SvnConfiguration" cleanupOnStartRun="true">
<configuration>C:\Users\Administrator\AppData\Roaming\Subversion</configuration>
<supportedVersion>125</supportedVersion>
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="0fb07392-d0a7-4efe-b746-d08bbfef26ce" name="Changes" comment="" />
<created>1751615372556</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1751615372556</updated>
<workItem from="1751615377650" duration="57693000" />
</task>
<task id="LOCAL-00001">
<created>1751963115714</created>
<option name="number" value="00001" />
<option name="presentableId" value="LOCAL-00001" />
<option name="project" value="LOCAL" />
<updated>1751963115714</updated>
</task>
<task id="LOCAL-00002">
<created>1753181241498</created>
<option name="number" value="00002" />
<option name="presentableId" value="LOCAL-00002" />
<option name="project" value="LOCAL" />
<updated>1753181241498</updated>
</task>
<task id="LOCAL-00003">
<created>1754897236551</created>
<option name="number" value="00003" />
<option name="presentableId" value="LOCAL-00003" />
<option name="project" value="LOCAL" />
<updated>1754897236551</updated>
</task>
<task id="LOCAL-00004">
<created>1754964481025</created>
<option name="number" value="00004" />
<option name="presentableId" value="LOCAL-00004" />
<option name="project" value="LOCAL" />
<updated>1754964481025</updated>
</task>
<task id="LOCAL-00005">
<created>1755138327488</created>
<option name="number" value="00005" />
<option name="presentableId" value="LOCAL-00005" />
<option name="project" value="LOCAL" />
<updated>1755138327488</updated>
</task>
<task id="LOCAL-00006" summary="广播订阅">
<created>1755155438531</created>
<option name="number" value="00006" />
<option name="presentableId" value="LOCAL-00006" />
<option name="project" value="LOCAL" />
<updated>1755155438531</updated>
</task>
<task id="LOCAL-00007" summary="广播订阅">
<created>1764121969148</created>
<option name="number" value="00007" />
<option name="presentableId" value="LOCAL-00007" />
<option name="project" value="LOCAL" />
<updated>1764121969148</updated>
</task>
<task id="LOCAL-00008" summary="广播订阅">
<created>1774437124422</created>
<option name="number" value="00008" />
<option name="presentableId" value="LOCAL-00008" />
<option name="project" value="LOCAL" />
<updated>1774437124422</updated>
</task>
<task id="LOCAL-00009" summary="广播订阅">
<created>1776763699110</created>
<option name="number" value="00009" />
<option name="presentableId" value="LOCAL-00009" />
<option name="project" value="LOCAL" />
<updated>1776763699110</updated>
</task>
<task id="LOCAL-00010" summary="广播订阅">
<created>1776823685058</created>
<option name="number" value="00010" />
<option name="presentableId" value="LOCAL-00010" />
<option name="project" value="LOCAL" />
<updated>1776823685058</updated>
</task>
<task id="LOCAL-00011" summary="广播订阅">
<created>1778468883862</created>
<option name="number" value="00011" />
<option name="presentableId" value="LOCAL-00011" />
<option name="project" value="LOCAL" />
<updated>1778468883862</updated>
</task>
<option name="localTasksCounter" value="12" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="VcsManagerConfiguration">
<MESSAGE value="广播订阅" />
<option name="LAST_COMMIT_MESSAGE" value="广播订阅" />
</component>
</project>
@@ -49,7 +49,9 @@ public class MemberAgendaController {
final String title = "【会员系统】";
List<NutMap> list = new ArrayList<>();
if (!ShiroUtil.hasAnyRoles("sysadmin,A06,gh01,H03")) {
if (!ShiroUtil.hasAnyRoles("sysadmin,A06,gh01,H03")
&& !org.apache.shiro.SecurityUtils.getSubject().isPermitted("member.apply.audit.union")
&& !org.apache.shiro.SecurityUtils.getSubject().isPermitted("member.apply.audit.school")) {
return list;
}
boolean anyRoles = ShiroUtil.hasAnyRoles("sysadmin,A06,H03");
@@ -67,20 +69,26 @@ public class MemberAgendaController {
int marUnionNum = 0;
Cnd marUnionCnd = Cnd.where("mar.stateId", "=", MemberApplyState.UNION);
if (!anyRoles) {
marUnionCnd.and("u.unionid", "=", Vi.getUnionId());
// 入会审核范围与 PC 部门审核列表一致,校级角色不能自动越过部门权限。
if (!ShiroUtil.hasAnyRoles("sysadmin")) {
marUnionCnd.and("mar.unionId", "=", Vi.getUnionId());
}
marSql.setCondition(marUnionCnd);
marUnionNum = memberService.count(marSql);
list.add(new NutMap().addv("title", title).addv("iconClass", vi.getIconByPath("/platform/member/apply/audit/union")).addv("label", "待部门工会入会审核").addv("number", marUnionNum).addv("url", "/platform/member/apply/audit/union"));
if (org.apache.shiro.SecurityUtils.getSubject().isPermitted("member.apply.audit.union"))
list.add(new NutMap().addv("title", title).addv("iconClass", vi.getIconByPath("/platform/member/apply/audit/union")).addv("label", "待部门工会入会审核").addv("number", marUnionNum).addv("url", "/platform/member/apply/audit/union"));
int marSchoolNum = 0;
Cnd marSchoolCnd = Cnd.where("mar.stateId", "=", MemberApplyState.SCHOOL_UNION);
marSql.setCondition(marSchoolCnd);
marSchoolNum = memberService.count(marSql);
list.add(new NutMap().addv("title", title).addv("iconClass", vi.getIconByPath("/platform/member/apply/audit/school")).addv("label", "待校工会入会审核").addv("number", marSchoolNum).addv("url", "/platform/member/apply/audit/school"));
if (org.apache.shiro.SecurityUtils.getSubject().isPermitted("member.apply.audit.school"))
list.add(new NutMap().addv("title", title).addv("iconClass", vi.getIconByPath("/platform/member/apply/audit/school")).addv("label", "待校工会入会审核").addv("number", marSchoolNum).addv("url", "/platform/member/apply/audit/school"));
// 非原会员变更管理角色仅返回按权限计算的入会待办。
if (!ShiroUtil.hasAnyRoles("sysadmin,A06,gh01,H03")) return list;
// 会员变更
Sql mcrSql = Sqls.create("""
SELECT
@@ -111,4 +119,24 @@ public class MemberAgendaController {
List<Sys_menu> menus = Optional.ofNullable(user).orElse(new Sys_user()).getMenus();
return list.stream().filter(v -> Strings.isNotBlank(v.getString("url")) && menus.stream().anyMatch(x -> Strings.isNotBlank(x.getHref()) && v.getString("url").contains(x.getHref()))).distinct().collect(Collectors.toList());
}
/**
* 无需参数,返回当前登录人今年可办理的入会审核节点。
* 每项 title/name/count/mobileHref 分别表示业务标题、节点名称、待办数量和手机入口。
*/
@At
@ViReturn
public Object getMobileAgenda() {
return memberService.getCurrentYearApplyAgenda();
}
/**
* 无需传入办理人,身份从登录会话获取;返回本人今年实际办理的会员入会记录。
* 每项 moduleName/auditState/auditTime/mobileUrl 为业务名称、办理节点、办理时间和只读详情地址。
*/
@At
@ViReturn
public Object getCompletes() {
return memberService.getCurrentYearApplyCompletes();
}
}
@@ -15,6 +15,8 @@ import io.v.nutz.util.ShiroUtil;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Sqls;
import org.nutz.ioc.aop.Aop;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
@@ -130,6 +132,7 @@ public class MemberApplyAuditController {
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
public Object doAudit(@ViRequired String recordId, Audit audit) {
MemberApplyRecord record = memberApplyRecordViService.fetch(recordId);
MemberApplyAuditHandle applyHandle = Enum.instance(MemberApplyAuditHandle.class, record.getStateId());
@@ -7,6 +7,7 @@ import io.v.nutz.diseaseaid.constant.AidFundMemberAuditState;
import io.v.nutz.diseaseaid.mode.AidFundMemberMode;
import io.v.nutz.diseaseaid.model.AidFundMemberAuditRecord;
import io.v.nutz.member.UserMode;
import io.v.nutz.member.service.MemberService;
import io.v.nutz.member.constant.MemberApplyState;
import io.v.nutz.member.constant.MemberOrigin;
import io.v.nutz.member.model.MemberApplyRecord;
@@ -25,6 +26,8 @@ import io.v.nutz.util.ShiroUtil;
import io.v.nutz.util.ViResource;
import io.v.nutz.web.commons.base.Globals;
import lombok.Getter;
import org.nutz.ioc.aop.Aop;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
@@ -55,6 +58,7 @@ public enum MemberApplyAuditHandle {
*/
CREATE(null) {
@Override
@Aop(TransAop.READ_COMMITTED)
public MemberApplyRecord next(MemberApplyRecord record, Audit audit) {
record.setUserId(ShiroUtil.getPrincipalProperty("id").toString());
record.setStateId(MemberApplyState.UNION);
@@ -64,22 +68,8 @@ public enum MemberApplyAuditHandle {
Sys_user user = sysUserService.fetch(record.getUserId());
Sql sql = Sqls.create("""
SELECT
su.loginname,
su.username
FROM
sys_user_role sur
LEFT JOIN sys_user su ON su.id = sur.userId
WHERE
sur.roleId = @roleId
AND sur.unionid = @unionId
""")
// .setParam("roleId", Roles.UNION_MANGER)
.setParam("roleId", Roles.GH01)
.setParam("unionId", record.getUnionId());
List<NutMap> mapList = sysUserService.listMap(sql);
// 接收人由 PC 部门审核权限关联的角色确定,并限定申请所属工会。
List<NutMap> mapList = memberService.applyAuditRecipients(false, record.getUnionId());
if (Lang.isNotEmpty(mapList)) {
List<TodoTask.Processor> processors = new ArrayList<>();
@@ -102,6 +92,8 @@ public enum MemberApplyAuditHandle {
todoTask.setInitiatorId(user.getLoginname());
todoTask.setPcViewUrl(Globals.AppDomain + "/platform/member/apply/audit/union");
todoTask.setH5ViewUrl(Globals.AppDomain + "/mobile/member/audit");
todoTask.setDoneH5Url(Globals.AppDomain + "/mobile/member/audit?isAudit=true");
todoTask.setDonePcUrl(todoTask.getPcViewUrl() + "?audit=1");
todoTask.setBizId(insert.getId());
todoTask.setBizType("申请入会部门工会审核");
todoTask.setStatus(TodoTaskEnum.TaskStatus.ACTIVE.name());
@@ -121,6 +113,7 @@ public enum MemberApplyAuditHandle {
*/
AUDIT_UNION(MemberApplyState.UNION) {
@Override
@Aop(TransAop.READ_COMMITTED)
public MemberApplyRecord next(MemberApplyRecord record, Audit audit) {
record.setStateId(audit.getAuditPass() ? MemberApplyState.SCHOOL_UNION : MemberApplyState.UNION_FAIL);
@@ -130,18 +123,8 @@ public enum MemberApplyAuditHandle {
if (audit.getAuditPass()) {
Sql sql = Sqls.create("""
SELECT
su.loginname,
su.username
FROM
sys_user_role sur
LEFT JOIN sys_user su ON su.id = sur.userId
WHERE
sur.roleId = @roleId
""").setParam("roleId", Roles.H03);
List<NutMap> mapList = sysUserService.listMap(sql);
// 部门通过后仅向具有 PC 校工会审核权限的角色成员派发下一阶段待办。
List<NutMap> mapList = memberService.applyAuditRecipients(true, record.getUnionId());
if (Lang.isNotEmpty(mapList)) {
List<TodoTask.Processor> processors = new ArrayList<>();
@@ -163,6 +146,8 @@ public enum MemberApplyAuditHandle {
todoTask.setInitiatorId(user.getLoginname());
todoTask.setPcViewUrl(Globals.AppDomain + "/platform/member/apply/audit/school");
todoTask.setH5ViewUrl(Globals.AppDomain + "/mobile/member/audit");
todoTask.setDoneH5Url(Globals.AppDomain + "/mobile/member/audit?isAudit=true");
todoTask.setDonePcUrl(todoTask.getPcViewUrl() + "?audit=1");
todoTask.setBizId(record.getId());
todoTask.setBizType("申请入会校工会审核");
todoTask.setStatus(TodoTaskEnum.TaskStatus.ACTIVE.name());
@@ -178,14 +163,7 @@ public enum MemberApplyAuditHandle {
List.of(Map.of("tool", MsgApi.sendTool.wechat_enterprise.name())));
}
//部门工会的待办设置为完成
TodoTask todoTask = dao.fetch(TodoTask.class, Cnd.where("bizId", "=", record.getId())
.and("bizType", "=", "申请入会部门工会审核"));
if (todoTask != null) {
todoTask.setProcessorId(ShiroUtil.getPrincipalProperty("loginname").toString());
todoTask.setStatus(TodoTaskEnum.TaskStatus.COMPLETE.name());
todoTaskInterface.updateTask(todoTask);
}
memberService.completeApplyAuditTasks(record.getId(), false);
return record;
}
},
@@ -194,6 +172,7 @@ public enum MemberApplyAuditHandle {
*/
AUDIT_SCHOOL(MemberApplyState.SCHOOL_UNION) {
@Override
@Aop(TransAop.READ_COMMITTED)
public MemberApplyRecord next(MemberApplyRecord record, Audit audit) {
memberApplyRecordViService.transactional(() -> {
@@ -242,14 +221,7 @@ public enum MemberApplyAuditHandle {
List.of(Map.of("tool", MsgApi.sendTool.wechat_enterprise.name())));
}
//校工会的待办设置为完成
TodoTask todoTask = dao.fetch(TodoTask.class, Cnd.where("bizId", "=", record.getId())
.and("bizType", "=", "申请入会校工会审核"));
if (todoTask != null) {
todoTask.setProcessorId(ShiroUtil.getPrincipalProperty("loginname").toString());
todoTask.setStatus(TodoTaskEnum.TaskStatus.COMPLETE.name());
todoTaskInterface.updateTask(todoTask);
}
memberService.completeApplyAuditTasks(record.getId(), true);
});
sysUserService.deleteCache(record.getUserId());
@@ -270,6 +242,7 @@ public enum MemberApplyAuditHandle {
public TodoTaskInterface todoTaskInterface = ViResource.ioc.getByType(TodoTaskInterface.class);
public MsgApi msgApi = ViResource.ioc.getByType(MsgApi.class);
public Dao dao = ViResource.dao;
public MemberService memberService = ViResource.ioc.getByType(MemberService.class);
public abstract MemberApplyRecord next(MemberApplyRecord record, Audit audit);
@@ -34,4 +34,21 @@ public interface MemberService extends ViService<Sys_user> {
* @return
*/
Pagination memberChangeRecords(PageForm pageForm, CndPlus cnd);
/** 按当前用户 PC 审核权限查询手机列表;isAudit 为已审标记,year 可空,返回 list/totalCount 分页数据。 */
Object mobileApplyAuditPage(int pageNumber, int pageSize, boolean isAudit, Integer year);
/** 按申请记录校验访问范围并返回审核/只读视图,userId 必须属于该记录,done 强制只读。 */
String mobileApplyAuditView(String recordId, String userId, boolean done);
/** 查询拥有指定阶段审核权限的启用角色成员;部门阶段限定 unionId,返回 loginname/username。 */
List<NutMap> applyAuditRecipients(boolean school, String unionId);
/** 关闭指定申请当前阶段的全部有效待办,保留接收人并记录实际办理人和已办地址。 */
void completeApplyAuditTasks(String recordId, boolean school);
/** 返回当前年份入会待办卡片;身份取当前会话,部门限定本工会,超管可查看两级范围。 */
List<NutMap> getCurrentYearApplyAgenda();
/** 返回当前登录人本年度实际审核的入会记录及只读详情地址,不把角色范围内的已审视作本人已办。 */
List<NutMap> getCurrentYearApplyCompletes();
}
@@ -15,6 +15,21 @@ import org.nutz.lang.util.NutMap;
import org.nutz.plugins.wkcache.annotation.CacheDefaults;
import java.util.List;
import java.util.Objects;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.member.constant.MemberApplyState;
import io.v.nutz.member.model.MemberApplyRecord;
import io.v.nutz.todoTask.TodoTask;
import io.v.nutz.todoTask.TodoTaskInterface;
import io.v.nutz.web.commons.base.Globals;
import io.v.nutz.web.commons.utils.ShiroUtil;
import org.apache.shiro.authz.UnauthorizedException;
import org.apache.shiro.authz.permission.WildcardPermission;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.aop.Aop;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.lang.Strings;
/**
@@ -70,4 +85,151 @@ public class MemberServiceImpl extends ViServiceImpl<Sys_user> implements Member
Sql sql = Sqls.create(MEMBER_CHANGE_RECORDS).setCondition(cnd);
return list(pageForm, sql);
}
@Inject
private TodoTaskInterface todoTaskInterface;
/** 与 PC 页面的权限注解一致,不能用待办角色名称替代审核权限。 */
private boolean canApplyAudit(boolean school) {
return ShiroUtil.hasPermission("member.apply.audit." + (school ? "school" : "union"));
}
@Override
public Object mobileApplyAuditPage(int pageNumber, int pageSize, boolean isAudit, Integer year) {
boolean union = canApplyAudit(false);
boolean school = canApplyAudit(true);
if (!union && !school) throw new UnauthorizedException("无会员审核权限");
Sql sql = Sqls.create("SELECT mar.*, st.stateName, st.stateColor, u.unionname, u.username, "
+ "u.loginname, u.personType FROM member_apply_record mar "
+ "LEFT JOIN audit_state st ON st.stateId=mar.stateId LEFT JOIN `user` u ON u.id=mar.userId $condition");
SqlExpressionGroup scope = new SqlExpressionGroup();
// 已审沿用 PC 各阶段 stateId > 当前阶段的口径;双权限取并集,避免重复记录。
if (union && (ShiroUtil.hasRole("sysadmin") || Strings.isNotBlank(Vi.getUnionId()))) {
Cnd department = Cnd.where("mar.stateId", isAudit ? ">" : "=", MemberApplyState.UNION);
if (!ShiroUtil.hasRole("sysadmin")) department.and("mar.unionId", "=", Vi.getUnionId());
scope.or(department.where());
} else if (!school) {
return listPageMap(Math.max(1, pageNumber), Math.max(1, pageSize), sql.setCondition(Cnd.where("1", "=", 0)));
}
if (school) scope.or("mar.stateId", isAudit ? ">" : "=", MemberApplyState.SCHOOL_UNION);
CndPlus cnd = CndPlus.create();
cnd.and(scope);
cnd.andExcludeEmpty("YEAR(mar.applyTime)", "=", year);
cnd.asc("mar.stateId").desc("mar.applyTime");
return listPageMap(Math.max(1, pageNumber), Math.max(1, Math.min(pageSize, 100)), sql.setCondition(cnd));
}
@Override
public String mobileApplyAuditView(String recordId, String userId, boolean done) {
MemberApplyRecord record = Strings.isBlank(recordId) ? null : dao().fetch(MemberApplyRecord.class, recordId);
if (record == null || !Objects.equals(record.getUserId(), userId)) {
throw new IllegalArgumentException("申请记录不存在或申请人不匹配");
}
boolean union = canApplyAudit(false) && (ShiroUtil.hasRole("sysadmin")
|| Strings.isNotBlank(Vi.getUnionId()) && Objects.equals(Vi.getUnionId(), record.getUnionId()));
boolean school = canApplyAudit(true) && record.getStateId() != null
&& record.getStateId() >= MemberApplyState.SCHOOL_UNION;
if (!union && !school) throw new UnauthorizedException("无权查看该申请");
if (!done && union && Objects.equals(record.getStateId(), MemberApplyState.UNION)) {
return "beetl:/mobile/member/union_Audit.html";
}
if (!done && school && Objects.equals(record.getStateId(), MemberApplyState.SCHOOL_UNION)) {
return "beetl:/mobile/member/school_Audit.html";
}
return "beetl:/mobile/member/detail.html";
}
@Override
public List<NutMap> applyAuditRecipients(boolean school, String unionId) {
// 从 PC 权限对应的角色成员取接收人,兼容 Shiro 通配权限并排除禁用角色、菜单和账号。
Sql sql = Sqls.create("SELECT DISTINCT su.loginname, su.username, sm.permission FROM sys_user_role sur "
+ "JOIN sys_user su ON su.id=sur.userId JOIN sys_role sr ON sr.id=sur.roleId "
+ "JOIN sys_role_menu srm ON srm.roleId=sr.id JOIN sys_menu sm ON sm.id=srm.menuId "
+ "WHERE sr.disabled=false AND sm.disabled=false AND su.disabled=false "
+ (school ? "" : "AND sur.unionid=@unionId AND su.unionid=@unionId "));
sql.setParam("unionId", unionId);
WildcardPermission required = new WildcardPermission("member.apply.audit." + (school ? "school" : "union"));
java.util.Map<String, NutMap> recipients = new java.util.LinkedHashMap<>();
for (NutMap row : listMap(sql)) {
String permission = row.getString("permission");
if (Strings.isNotBlank(permission) && Strings.isNotBlank(row.getString("loginname"))
&& new WildcardPermission(permission).implies(required)) {
recipients.putIfAbsent(row.getString("loginname"), row);
}
}
return new java.util.ArrayList<>(recipients.values());
}
@Override
@Aop(TransAop.READ_COMMITTED)
public void completeApplyAuditTasks(String recordId, boolean school) {
// 同阶段可能存在历史重复待办,只关闭 ACTIVE 项,保留接收角色成员列表用于已办归属。
List<TodoTask> tasks = dao().query(TodoTask.class, Cnd.where("bizId", "=", recordId)
.and("bizType", "=", school ? "申请入会校工会审核" : "申请入会部门工会审核")
.and("status", "=", "ACTIVE").and(Cnd.exps("delFlag", "=", false).or("delFlag", "is", null)));
for (TodoTask task : tasks) {
task.setProcessorId(ShiroUtil.getPrincipalProperty("loginname").toString());
task.setStatus("COMPLETE");
task.setDonePcUrl(Globals.AppDomain + "/platform/member/apply/audit/" + (school ? "school" : "union") + "?audit=1");
task.setDoneH5Url(Globals.AppDomain + "/mobile/member/audit?isAudit=true");
todoTaskInterface.updateTask(task);
}
}
@Override
public List<NutMap> getCurrentYearApplyAgenda() {
int year = java.time.LocalDate.now().getYear();
boolean admin = ShiroUtil.hasRole("sysadmin");
List<NutMap> items = new java.util.ArrayList<>();
for (boolean school : new boolean[]{false, true}) {
if (!admin && !canApplyAudit(school)) continue;
// 没有工会归属的部门审核人不能因空条件而获得全校范围。
if (!school && !admin && Strings.isBlank(Vi.getUnionId())) continue;
Cnd cnd = Cnd.where("stateId", "=", school ? MemberApplyState.SCHOOL_UNION : MemberApplyState.UNION)
.and("applyTime", ">=", year + "-01-01")
.and("applyTime", "<", (year + 1) + "-01-01");
if (!school && !admin) cnd.and("unionId", "=", Vi.getUnionId());
int count = dao().count(MemberApplyRecord.class, cnd);
items.add(new NutMap().setv("title", "【会员入会】")
.setv("name", school ? "待校工会入会审核" : "待部门工会入会审核")
.setv("count", count).setv("mobileHref", "/mobile/member/audit"));
}
return items;
}
@Override
public List<NutMap> getCurrentYearApplyCompletes() {
Object principalLoginname = ShiroUtil.getPrincipalProperty("loginname");
String loginname = principalLoginname == null ? "" : principalLoginname.toString();
boolean admin = ShiroUtil.hasRole("sysadmin");
boolean union = admin || canApplyAudit(false);
boolean school = admin || canApplyAudit(true);
if (Strings.isBlank(loginname) || !union && !school) return java.util.Collections.emptyList();
int year = java.time.LocalDate.now().getYear();
// 只读取当前申请实际关联的审核记录,按办理工号和办理年份筛选;同人办理两级保留两个节点。
Sql sql = Sqls.create("""
SELECT mar.id, a.id auditId, nodes.nodeId,
CONCAT('【会员入会】', COALESCE(u.username, '')) moduleName,
nodes.nodeName auditState, a.auditTime,
CONCAT('/mobile/member/audit/findOne?record_id=', mar.id,
'&user_id=', mar.userId, '&done=true') mobileUrl
FROM member_apply_record mar
LEFT JOIN `user` u ON u.id=mar.userId
JOIN (SELECT 1 nodeId, '部门工会审核' nodeName
UNION ALL SELECT 2, '校工会审核') nodes ON 1=1
JOIN audit a ON a.id=CASE nodes.nodeId WHEN 1 THEN mar.unionAuditId ELSE mar.schoolAuditId END
WHERE a.loginname=@loginname AND a.auditTime>=@startTime AND a.auditTime<@endTime
AND ((nodes.nodeId=1 AND @unionAllowed=1 AND (@admin=1 OR mar.unionId=@unionId))
OR (nodes.nodeId=2 AND @schoolAllowed=1))
ORDER BY a.auditTime DESC, mar.id, nodes.nodeId
""");
sql.setParam("loginname", loginname);
sql.setParam("startTime", year + "-01-01");
sql.setParam("endTime", (year + 1) + "-01-01");
sql.setParam("unionAllowed", union ? 1 : 0);
sql.setParam("schoolAllowed", school ? 1 : 0);
sql.setParam("admin", admin ? 1 : 0);
sql.setParam("unionId", Strings.sNull(Vi.getUnionId()));
return listMap(sql);
}
}
@@ -1,112 +1,47 @@
package io.v.nutz.mobile.member;
import cn.wizzer.framework.base.service.BaseService;
import io.v.nutz.annontation.ViReturn;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.dao.CndPlus;
import io.v.nutz.member.constant.MemberApplyState;
import io.v.nutz.util.ShiroUtil;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import io.v.nutz.member.service.MemberService;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.Logical;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/**
* @author zhf
* @date 2021/9/26 9:24
* @description
*/
/** 手机端会员审核统一入口,与 PC 端共享两级审核权限。 */
@IocBean
@At("/mobile/member/audit")
@Ok("json:full")
@RequiresAuthentication
@RequiresPermissions(value = {"member.apply.audit.union", "member.apply.audit.school"}, logical = Logical.OR)
public class MemberAuditUnionController {
@Inject
private MemberService memberService;
@At("")
@Ok("beetl:/mobile/member/audit_list.html")
public void indext() {
public void index() {
}
@Inject
private BaseService baseService;
/**
* pageNumber/pageSize 为页码和每页条数,isAudit 区分已审/待审,year 为申请年份(可空)。
* 返回分页对象,list 为申请记录,totalCount 为符合当前审核权限的数据总数。
*/
@At
@ViReturn
public Object pageData(int pageNumber, int pageSize, boolean isAudit, Integer year) {
Sql sql = Sqls.create("""
SELECT
mar.*,
st.stateName,
st.stateColor,
u.unionname,
u.username,
u.loginname,
u.personType
FROM
`member_apply_record` mar
LEFT JOIN audit_state st ON st.stateId = mar.stateId
LEFT JOIN `user` u ON u.id = mar.userId
$condition
""");
CndPlus cnd = CndPlus.create();
cnd.and("mar.memberStates", "=", 1);
if (ShiroUtil.hasAnyRoles("sysadmin")) {
cnd.and("mar.stateId", "in", isAudit ? Lang.array(MemberApplyState.UNION_FAIL, MemberApplyState.SCHOOL_UNION_FAIL, MemberApplyState.NORMAL_MEMBER) : Lang.array(MemberApplyState.UNION, MemberApplyState.SCHOOL_UNION));
} else {
if (ShiroUtil.hasAnyRoles("A06,wyh02") && ShiroUtil.hasAnyRoles("H04")) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("mar.stateId", isAudit ? ">" : "=", MemberApplyState.SCHOOL_UNION);
seg.or(CndPlus.exps("mar.unionId", "=", Vi.getUnionId()).and("mar.stateId", isAudit ? ">" : "=", MemberApplyState.UNION));
cnd.and(seg);
} else if (ShiroUtil.hasAnyRoles("A06,wyh02")) {
cnd.and("mar.stateId", isAudit ? ">" : "=", MemberApplyState.SCHOOL_UNION);
} else if (ShiroUtil.hasAnyRoles("H04")) {
cnd.and("mar.unionId", "=", Vi.getUnionId());
cnd.and("mar.stateId", isAudit ? ">" : "=", MemberApplyState.UNION);
}
/*if (ShiroUtil.hasAnyRoles("A06,wyh02")) {
cnd.and("mar.stateId", isAudit ? ">" : "=", MemberApplyState.SCHOOL_UNION);
} else if (ShiroUtil.hasAnyRoles("H04")) {
cnd.and("mar.unionId", "=", Vi.getUnionId());
cnd.and("mar.stateId", isAudit ? ">" : "=", MemberApplyState.UNION);
}*/
}
/* if (!ShiroUtil.hasAnyRoles("sysadmin")) {
if (ShiroUtil.hasAnyRoles("A06,wyh02")) {
cnd.and("mar.stateId", isAudit ? ">" : "=", MemberApplyState.SCHOOL_UNION);
}
}*/
cnd.andExcludeEmpty("YEAR(mar.applyTime)", "=", year);
cnd.asc("mar.stateId");
cnd.desc("mar.applyTime");
sql.setCondition(cnd);
return baseService.listPageMap(pageNumber, pageSize, sql);
return memberService.mobileApplyAuditPage(pageNumber, pageSize, isAudit, year);
}
/**
* record_id 为申请记录 ID,user_id 为申请人 ID,done 表示从已办入口只读查看。
* 返回 Beetl 页面视图;实际审核阶段和访问范围均由数据库记录决定。
*/
@At("/findOne")
@Ok("re")
public String findOne(Integer stateId) {
if (stateId == MemberApplyState.UNION && ShiroUtil.hasAnyRoles("H04,A06,sysadmin")) {
return "beetl:/mobile/member/union_Audit.html";
} else if (stateId == MemberApplyState.SCHOOL_UNION && ShiroUtil.hasAnyRoles("A06,sysadmin")) {
return "beetl:/mobile/member/school_Audit.html";
} /*else if (stateId == MemberApplyState.NORMAL_MEMBER || stateId == MemberApplyState.UNION_FAIL || stateId == MemberApplyState.SCHOOL_UNION_FAIL) {
return "beetl:/mobile/member/detail.html";
}*/
return "beetl:/mobile/member/detail.html";
public String findOne(String record_id, String user_id, boolean done) {
return memberService.mobileApplyAuditView(record_id, user_id, done);
}
}
@@ -12,13 +12,11 @@ import io.v.nutz.sys.models.Sys_menu;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.util.ShiroUtil;
import io.v.nutz.zgfw.service.CondolenceService;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
@@ -53,71 +51,24 @@ public class CondolenceAgentController {
List<NutMap> result = new ArrayList<>();
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", 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", UCR).setv("iconClass", vi.getIconByPath(UCR)).setv("label", "待部门工会审核").setv("number", condolenceService.countCurrentYearAgenda(2000)));
result.add(new NutMap().setv("title", title).setv("url", FR).setv("iconClass", vi.getIconByPath(FR)).setv("label", "待二级党组织审核").setv("number", condolenceService.countCurrentYearAgenda(2012)));
result.add(new NutMap().setv("title", title).setv("url", VCR).setv("iconClass", vi.getIconByPath(VCR)).setv("label", "待校工会审核").setv("number", condolenceService.countCurrentYearAgenda(2020)));
result.add(new NutMap().setv("title", title).setv("url", ECR).setv("iconClass", vi.getIconByPath(ECR)).setv("label", "待工会常务副主席审核").setv("number", condolenceService.countCurrentYearAgenda(2050)));
Sys_user user = (Sys_user) ShiroUtil.getPrincipal();
List<Sys_menu> menus = Optional.ofNullable(user).orElse(new Sys_user()).getMenus();
return result.stream().filter(v -> Strings.isNotBlank(v.getString("url")) && menus.stream().anyMatch(x -> Strings.isNotBlank(x.getHref()) && v.getString("url").equals(x.getHref()))).distinct().collect(Collectors.toList());
}
/**
* 待工会主席审核
*
* @return
* 无需传参,身份取自登录会话,返回今年本人办理的慰问记录列表。
* 每项包含 moduleName(业务名称)、auditState(办理节点)、auditTime(审核日期)、mobileUrl(详情链接)。
*/
private Integer getUcrCount() {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT COUNT(1) FROM condolence con LEFT JOIN `user` us ON con.be_user=us.id $condition
""");
cnd.and("con.state_id", "=", 2000);
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) {
cnd.and("us.unionid", "=", vi.getUnionId());
}
sql.setCondition(cnd);
return condolenceService.count(sql);
@At
@ViReturn
@RequiresAuthentication
public Object getCompletes() {
return condolenceService.getCurrentYearCompletes();
}
/**
* 待工会会计审核
* 暂时没用
*
* @return
*/
private Integer getFrCount() {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT COUNT(1) FROM condolence con LEFT JOIN `user` us ON con.be_user=us.id $condition
""");
cnd.and("con.state_id", "=", 2012);
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) {
cnd.and("us.unionid", "=", vi.getUnionId());
}
sql.setCondition(cnd);
return condolenceService.count(sql);
}
/**
* 待校工会主席审核
*
* @return
*/
private Integer getVcrCount() {
return condolenceService.count(Cnd.where("state_id", "=", 2020));
}
/**
* 待工会常务副主席审核
* 暂时没用
*
* @return
*/
private Integer getEcrCount() {
return condolenceService.count(Cnd.where("state_id", "=", 2050));
}
}
@@ -5,6 +5,7 @@ import io.v.nutz.service.ViService;
import io.v.nutz.zgfw.model.condolence.Condolence;
import org.nutz.dao.entity.Record;
import org.nutz.lang.util.NutMap;
import java.util.List;
/**
@@ -19,6 +20,20 @@ public interface CondolenceService extends ViService<Condolence> {
*/
NutMap findOne(String id);
/**
* 无参数;按当前会话工号及本自然年审核日期查询本人慰问已办。
* @return 列表项包含 id、reviewId、moduleName、auditState、auditTime、mobileUrl;按审核日期倒序
*/
List<NutMap> getCurrentYearCompletes();
/**
* 统计当前登录用户可见范围内、申请时间属于当前自然年的慰问待办数量。
*
* @param stateId 审核状态:2000 部门工会、2012 二级党组织、2020 校工会、2050 历史常务副主席待办
* @return 待办数量(Integer);不支持的状态返回 0,权限菜单过滤仍由待办接口保留
*/
Integer countCurrentYearAgenda(int stateId);
/**
* 判断被慰问人在当前自然年是否已有住院慰问申请。
*
@@ -3,6 +3,8 @@ package io.v.nutz.zgfw.service.impl;
import cn.wizzer.framework.base.service.BaseService;
import io.v.nutz.base.utils.DateUtil;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.util.ShiroUtil;
import io.v.nutz.modules.services.ReviewService;
import io.v.nutz.service.impl.ViServiceImpl;
import io.v.nutz.zgfw.model.condolence.Condolence;
@@ -19,6 +21,8 @@ import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import java.util.List;
import java.util.Collections;
/**
* @author 1V
@@ -37,6 +41,78 @@ public class CondolenceServiceImpl extends ViServiceImpl<Condolence> implements
this.condolenceDao = dao;
}
/**
* 按审核状态统计本自然年申请,保留原待办对部门工会、二级党组织节点的工会范围限制。
*
* @param stateId 2000、2012、2020 或 2050;其他值不属于本接口的待办节点
* @return 当前节点的待办条数,不包含往年或下一年度申请
*/
/**
* 按审核记录的办理人工号及办理年份筛选,不将申请当前状态误作个人审核结果。
* @return 本人今年的已办列表;未获得登录工号时返回空列表,禁止扩大到全员记录
*/
@Override
public List<NutMap> getCurrentYearCompletes() {
Object principalLoginname = ShiroUtil.getPrincipalProperty("loginname");
String loginname = principalLoginname == null ? "" : principalLoginname.toString();
if (Strings.isBlank(loginname)) {
return Collections.emptyList();
}
int year = DateUtil.getYear();
// 只读取申请当前关联的审核记录;再次审核覆盖的旧关联无法在此恢复。
Sql sql = Sqls.create("""
SELECT con.id, r.id reviewId,
CONCAT('【职工慰问】', COALESCE(con.be_user_username, '')) moduleName,
nodes.nodeName auditState, r.time auditTime,
CONCAT('/mobile/condolence/apply/info?id=', con.id) mobileUrl
FROM condolence con
JOIN (
SELECT 1 nodeId, '部门工会审核' nodeName
UNION ALL SELECT 2, '二级党组织审核'
UNION ALL SELECT 3, '校工会审核'
UNION ALL SELECT 4, '工会常务副主席审核'
) nodes ON 1=1
JOIN review r ON r.id = CASE nodes.nodeId
WHEN 1 THEN con.union_chairman_review
WHEN 2 THEN con.finance_review
WHEN 3 THEN con.vice_chairman_review
WHEN 4 THEN con.executive_chairman_review END
WHERE r.loginname = @loginname AND r.time >= @startTime AND r.time < @endTime
ORDER BY r.time DESC, con.id, nodes.nodeId
""");
sql.setParam("loginname", loginname);
sql.setParam("startTime", year + "-01-01");
sql.setParam("endTime", (year + 1) + "-01-01");
return listMap(sql);
}
@Override
public Integer countCurrentYearAgenda(int stateId) {
if (stateId != 2000 && stateId != 2012 && stateId != 2020 && stateId != 2050) {
return 0;
}
// 年份只读取一次;左闭右开范围包含年初当天及年末全部时间,跨年后自动切换。
int year = DateUtil.getYear();
if (stateId == 2000 || stateId == 2012) {
Cnd cnd = Cnd.where("con.state_id", "=", stateId)
.and("con.apply_time", ">=", year + "-01-01")
.and("con.apply_time", "<", (year + 1) + "-01-01");
// 沿用原待办的角色判断:系统管理员和校工会管理员不限制所属工会。
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) {
cnd.and("us.unionid", "=", Vi.getUnionId());
}
Sql sql = Sqls.create("""
SELECT COUNT(1) FROM condolence con LEFT JOIN `user` us ON con.be_user=us.id $condition
""");
sql.setCondition(cnd);
return count(sql);
}
// 校级节点保留原有全校统计范围,仅追加申请年份条件。
return count(Cnd.where("state_id", "=", stateId)
.and("apply_time", ">=", year + "-01-01")
.and("apply_time", "<", (year + 1) + "-01-01"));
}
@Override
public boolean hasHospitalCondolenceInCurrentYear(Condolence application) {
CondolenceType type = condolenceDao.fetch(CondolenceType.class, application.getType());
@@ -110,6 +186,14 @@ public class CondolenceServiceImpl extends ViServiceImpl<Condolence> implements
if (Strings.isNotBlank(record.getString("union_chairman_review"))) {
record.put("ucr", reviewService.fetch(record.getString("union_chairman_review")));
}
// 二级党组织审核沿用 finance_review 字段,详情以 fr 返回审核人、时间、意见和签字。
if (Strings.isNotBlank(record.getString("finance_review"))) {
record.put("fr", reviewService.fetch(record.getString("finance_review")));
}
// 历史常务副主席审核记录仅用于展示,不改变当前审批流转。
if (Strings.isNotBlank(record.getString("executive_chairman_review"))) {
record.put("ecr", reviewService.fetch(record.getString("executive_chairman_review")));
}
//校工会
if (Strings.isNotBlank(record.getString("vice_chairman_review"))) {
record.put("vcr", reviewService.fetch(record.getString("vice_chairman_review")));
@@ -235,6 +235,36 @@
</el-form>
</el-tab-pane>
<el-tab-pane v-if="hasPane(6)&&viewData.ecr" label="工会常务副主席审核信息" name="6">
<el-form label-width="130px" label-suffix=":" style="padding: 20px 0">
<vi-title title="审核信息"></vi-title>
<el-row gutter="20">
<el-col :span="12">
<el-form-item label="审核人员">
{{ viewData.ecr.username }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间">
{{ viewData.ecr.time }}
</el-form-item>
</el-col>
</el-row>
<el-form-item label="审核意见">
<div class="textarea-div">{{ viewData.ecr.opinion ? viewData.ecr.opinion : '暂无' }}</div>
</el-form-item>
<el-form-item label="签&emsp;&emsp;字">
<el-image v-if="viewData.ecr.sign"
style="width: 300px; height: 100px"
:src="viewData.ecr.sign"
fit="contain"></el-image>
<span v-else>暂无</span>
</el-form-item>
</el-form>
</el-tab-pane>
<el-tab-pane v-if="handle" :label="label" name="999">
<slot name="handle"></slot>
</el-tab-pane>
@@ -257,7 +287,7 @@ module.exports = {
},
panes: {
type: Array,
default: []
default: () => []
},
},
filters: {
@@ -278,27 +308,32 @@ module.exports = {
watch: {},
methods: {
hasPane(name) {
if (!this.handle) {
// 未指定页签范围时展示所有已有审核记录;显式传入范围时保持原有限制。
if (!this.handle || this.panes.length === 0) {
return true
}
return this.panes.includes(name)
},
async getInfo(id) {
this.loading = true
const {data, code, msg} = await $.get("/platform/fw/condolence/findOne", {id})
this.loading = false
if (data) {
this.activeName = this.handle ? "999" : "1"
condolence.toFormData(data)
this.viewData = data
} else {
this.viewData = {}
this.$message({
message: "获取信息失败",
type: 'error'
});
}
/**
* id 为慰问申请 ID;接口 data 为申请详情,ucr/fr/vcr/ecr 为各节点审核记录对象。
* 无记录时对应页签隐藏;请求结束后统一解除加载状态。
*/
getInfo(id) {
this.$set(this, 'loading', true)
this.$set(this, 'viewData', {})
return $.post('/platform/fw/condolence/findOne', {id})
.then((res) => {
if (res.code === 0 && res.data) {
condolence.toFormData(res.data)
this.$set(this, 'activeName', this.handle ? '999' : '1')
this.$set(this, 'viewData', res.data)
} else {
this.$message.error('获取信息失败')
}
})
.always(() => {
this.$set(this, 'loading', false)
})
},
},
created() {
+115 -19
View File
@@ -223,9 +223,12 @@ layout("/mobile/platform.html"){
roles: [],
active: 1,
needCount: 0,
needRequestId: 0,
needItems: [],
activeName: '0',
completedItems: [],
completedLoading: false,
completedRequestId: 0,
}
},
methods: {
@@ -244,7 +247,8 @@ layout("/mobile/platform.html"){
location.href = o.mobileHref
},
toHref(o) {
location.href = o.mobileUrl + '?audit=1';
// 详情链接已携带申请 ID,保留查询参数。
location.href = o.mobileUrl;
},
/**
* 入学登记待办
@@ -256,20 +260,111 @@ layout("/mobile/platform.html"){
this.needItems = this.needItems.concat(data.filter(v => v.number > 0))
}
},*/
async getNeedItems() {
const {data, code} = await $.get('/platform/needItems/getNeedItems')
if (code === 0) {
const obj = data.filter(v => {
return v.mobileHref != null && v.count > 0
/**
* requestId 为本轮刷新序号,忽略旧请求,避免返回页面或切换页签时覆盖新数据。
* 通用接口 data 为待办数组,使用 count 和 mobileHref;完成后继续加载慰问待办。
*/
getNeedItems(requestId) {
return $.post('/platform/needItems/getNeedItems')
.then((res) => {
if (requestId === this.needRequestId && res.code === 0) {
this.$set(this, 'needItems', (res.data || []).filter(v => v.mobileHref && v.count > 0
&& v.mobileHref.split('?')[0] !== '/mobile/member/audit'
&& !['/platform/member/apply/audit/union', '/platform/member/apply/audit/school'].includes((v.href || '').split('?')[0])))
}
})
.always(() => {
if (requestId === this.needRequestId) {
this.getCondolenceAgenda(requestId)
}
})
this.needItems = obj
}
},
async getCompletes() {
const {data, code} = await $.get('/platform/sys/completed/getCompletes')
if (code === 0) {
this.completedItems = data;
}
/**
* 复用 PC 慰问待办的菜单权限和统计口径,将 label/number 转为手机模板的 name/count。
* 仅映射手机端已有审核页面的三个节点,历史常务副主席节点不提供手机办理入口。
*/
getCondolenceAgenda(requestId) {
const auditUrls = [
'/platform/fw/condolence/ucr/union',
'/platform/fw/condolence/fr',
'/platform/fw/condolence/vcr/school'
]
return $.post('/platform/condolence/agent/getAgenda')
.then((res) => {
if (requestId !== this.needRequestId || res.code !== 0) {
return
}
const items = (res.data || []).filter(v => auditUrls.includes(v.url) && v.number > 0)
.map(v => ({
title: v.title,
name: v.label,
count: v.number,
mobileHref: '/mobile/condolence/audit'
}))
this.$set(this, 'needItems', this.needItems.concat(items))
})
.always(() => {
if (requestId === this.needRequestId) {
this.getMemberApplyAgenda(requestId)
}
})
},
/**
* 无需业务参数;后端按会话权限返回今年会员入会节点,字段与首页待办卡片一致。
* 专用数据替代通用配置中的同业务卡片,避免双计数;失败不影响已加载的慰问待办。
*/
getMemberApplyAgenda(requestId) {
return $.post('/platform/member/agenda/getMobileAgenda')
.then((res) => {
if (requestId !== this.needRequestId) return
if (res.code === 0) {
const items = (res.data || []).filter(v => v.count > 0 && v.mobileHref)
this.$set(this, 'needItems', this.needItems.concat(items))
} else {
vant.Toast.fail('会员入会待办加载失败,请重试')
}
}, () => {
if (requestId === this.needRequestId) vant.Toast.fail('会员入会待办加载失败,请重试')
})
.always(() => {
if (requestId === this.needRequestId) this.$set(this, 'needCount', this.needItems.length)
})
},
/**
* 两个接口均无需传办理人,按当前会话返回本人今年已办。
* 各业务独立合并;全部请求结束后关闭 loading,旧刷新结果不得覆盖当前列表。
*/
getCompletes() {
const requestId = this.completedRequestId + 1
this.$set(this, 'completedRequestId', requestId)
this.$set(this, 'completedItems', [])
this.$set(this, 'completedLoading', true)
const sources = [
{url: '/platform/condolence/agent/getCompletes', label: '慰问'},
{url: '/platform/member/agenda/getCompletes', label: '会员入会'}
]
let remaining = sources.length
const requests = sources.map(source => $.post(source.url)
.then((res) => {
if (requestId !== this.completedRequestId) return
if (res.code === 0) {
const items = this.completedItems.concat(res.data || [])
// 现有日期字段统一交给 moment 解析,兼容日期字符串和时间戳。
items.sort((a, b) => (moment(b.auditTime).valueOf() || 0) - (moment(a.auditTime).valueOf() || 0))
this.$set(this, 'completedItems', items)
} else {
vant.Toast.fail(source.label + '已办加载失败,请重试')
}
}, () => {
if (requestId === this.completedRequestId) vant.Toast.fail(source.label + '已办加载失败,请重试')
})
.always(() => {
remaining--
if (requestId === this.completedRequestId && remaining === 0) {
this.$set(this, 'completedLoading', false)
}
}))
return $.when.apply($, requests)
},
/**
* 会员个人核对待办
@@ -291,12 +386,13 @@ layout("/mobile/platform.html"){
this.needItems = this.needItems.concat(data.filter(v => v.count > 0))
}
},
async initData() {
await this.getNeedItems();
// await this.getMemberCheckSelfAgenda()
// await this.getWelfareCheckSelfAgenda()
// await this.getCompletes();
this.needCount = this.needItems.length
initData() {
this.getCompletes()
// 每轮重新合并通用、慰问和会员入会待办,防止重复追加;刷新序号隔离尚未完成的旧请求。
this.$set(this, 'needRequestId', this.needRequestId + 1)
this.$set(this, 'needItems', [])
this.$set(this, 'needCount', 0)
return this.getNeedItems(this.needRequestId)
},
async setNeedItems() {
const {data, code} = await $.get('/platform/needItems/getNeedItems')
@@ -59,9 +59,10 @@ layout("/mobile/platform.html"){
{text: '已审核', value: true},
],
handle: true,
queryVersion: 0,
pageForm: {
year: new Date().getFullYear(),
isAudit: false,
year: GetQueryString("isAudit") === "true" ? null : new Date().getFullYear(),
isAudit: GetQueryString("isAudit") === "true",
},
}
},
@@ -70,6 +71,7 @@ layout("/mobile/platform.html"){
},
methods: {
yearChange() {
this.queryVersion++
this.pageForm.pageNumber = 1
this.tableData = []
this.finished = false
@@ -77,40 +79,32 @@ layout("/mobile/platform.html"){
},
onLoad() {
this.loading = true
$.post(loc() + '/pageData', this.pageForm).then(res => {
// 捕获本次筛选条件,筛选切换后忽略旧请求,避免串页。
const requestKey = this.queryVersion || 0
$.post('/mobile/member/audit/pageData', Object.assign({}, this.pageForm)).then(res => {
if (requestKey !== (this.queryVersion || 0)) return
if (res.code === 0) {
this.tableData = this.tableData.concat(res.data.list)
if (this.tableData.length === res.data.totalCount) {
this.finished = true
} else {
this.pageForm.pageNumber++
}
this.finished = this.tableData.length >= res.data.totalCount || res.data.list.length === 0
if (!this.finished) this.pageForm.pageNumber++
} else {
this.finished = true
this.$toast.fail(res.msg || '加载失败')
}
this.loading = false
}).fail(() => {
if (requestKey !== (this.queryVersion || 0)) return
this.finished = true
this.$toast.fail('加载失败,请重新筛选后重试')
}).always(() => {
if (requestKey === (this.queryVersion || 0)) this.loading = false
})
},
/* pageData() {
this.mLoading = true
setTimeout(async () => {
$.get(loc() + '/pageData', this.pageForm, (res) => {
if (res.code === 0) {
this.tableData = this.tableData.concat(res.data.list)
if (this.tableData.length === res.data.totalCount) {
this.finished = true
} else {
this.pageForm.pageNumber++
}
}
})
this.mLoading = false
}, 600)
},*/
openView(o) {
window.location.href = '/mobile/member/audit/findOne?stateId=' + o.stateId + '&record_id=' + o.id + '&user_id=' + o.userId
window.location.href = '/mobile/member/audit/findOne?stateId=' + o.stateId + '&record_id=' + o.id + '&user_id=' + o.userId + '&done=' + this.pageForm.isAudit
},
},
async created() {
created() {
this.yearList = [{text: '全部年份', value: null}]
let nowYear = new Date().getFullYear()
for (let i = nowYear; i >= nowYear - 9; i--) {
this.yearList.push({text: i, value: i})
@@ -26,7 +26,6 @@ layout("/mobile/platform.html"){
<van-field v-model="formData.auditTime" label="审核时间" readonly></van-field>
<van-field
required
v-model="formData.auditOpinion"
rows="1"
autosize
@@ -46,12 +45,12 @@ layout("/mobile/platform.html"){
<van-row gutter="20" style="margin-top: 30px;padding: 0 25px">
<van-col span="12">
<van-button :color="themeColor" plain block @click="doAudit(false)">拒 绝
<van-button :color="themeColor" plain block :loading="formLoading" :disabled="formLoading" @click="doAudit(false)">拒 绝
</van-button>
</van-col>
<van-col span="12">
<van-button :color="themeColor" block @click="doAudit(true)">通 过
<van-button :color="themeColor" block :loading="formLoading" :disabled="formLoading" @click="doAudit(true)">通 过
</van-button>
</van-col>
</van-row>
@@ -72,6 +71,7 @@ layout("/mobile/platform.html"){
data() {
return {
handle: true,
formLoading: false,
id: "",
formData: {},
}
@@ -81,25 +81,27 @@ layout("/mobile/platform.html"){
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
},
methods: {
async doAudit(pass) {
if (!this.formData.auditOpinion) {
this.$toast.fail('请填写审核意见');
return
}
this.formData.auditPass = pass
const resp = await $.post("/platform/member/apply/audit/doAudit", this.formData)
requestLaterFun(resp, (data) => {
this.$toast.success('审核成功');
setTimeout(() => {
location.href = '/mobile/member/audit'
}, 1000)
}, () => {
this.$toast.fail('审核失败');
}, () => {
doAudit(pass) {
if (this.formLoading) return
// 与 PC 共用审核参数;提交前读取手写签名,避免仅提交历史签名。
this.$refs.signature.submitSign()
this.$set(this.formData, 'auditPass', pass)
this.formLoading = true
$.post('/platform/member/apply/audit/doAudit', this.formData).then(resp => {
requestLaterFun(resp, () => {
this.$toast.success('审核成功')
location.replace('/mobile/member/audit')
}, () => {
this.$toast.fail('审核失败')
}, () => {})
}).fail(() => {
this.$toast.fail('审核失败,请稍后重试')
}).always(() => {
this.formLoading = false
})
},
},
async created() {
created() {
const record_id = GetQueryString("record_id")
const user_id = GetQueryString("user_id")
setTimeout(() => {
@@ -26,7 +26,7 @@ layout("/mobile/platform.html"){
<van-field v-model="formData.auditTime" label="审核时间" readonly></van-field>
<van-field required
<van-field
v-model="formData.auditOpinion"
rows="1"
autosize
@@ -45,12 +45,12 @@ layout("/mobile/platform.html"){
<van-row gutter="20" style="margin-top: 30px;padding: 0 25px">
<van-col span="12">
<van-button :color="themeColor" plain block @click="doAudit(false)">拒 绝
<van-button :color="themeColor" plain block :loading="formLoading" :disabled="formLoading" @click="doAudit(false)">拒 绝
</van-button>
</van-col>
<van-col span="12">
<van-button :color="themeColor" block @click="doAudit(true)">通 过
<van-button :color="themeColor" block :loading="formLoading" :disabled="formLoading" @click="doAudit(true)">通 过
</van-button>
</van-col>
</van-row>
@@ -70,6 +70,7 @@ layout("/mobile/platform.html"){
data() {
return {
handle: true,
formLoading: false,
id: "",
formData: {},
}
@@ -80,25 +81,27 @@ layout("/mobile/platform.html"){
},
methods: {
async doAudit(pass) {
if (!this.formData.auditOpinion) {
this.$toast.fail('请填写审核意见');
return
}
this.formData.auditPass = pass
const resp = await $.post("/platform/member/apply/audit/doAudit", this.formData)
requestLaterFun(resp, (data) => {
this.$toast.success('审核成功');
setTimeout(() => {
location.href = '/mobile/member/audit'
}, 1000)
}, () => {
this.$toast.fail('审核失败');
}, () => {
doAudit(pass) {
if (this.formLoading) return
// 与 PC 共用审核参数;提交前读取手写签名,避免仅提交历史签名。
this.$refs.signature.submitSign()
this.$set(this.formData, 'auditPass', pass)
this.formLoading = true
$.post('/platform/member/apply/audit/doAudit', this.formData).then(resp => {
requestLaterFun(resp, () => {
this.$toast.success('审核成功')
location.replace('/mobile/member/audit')
}, () => {
this.$toast.fail('审核失败')
}, () => {})
}).fail(() => {
this.$toast.fail('审核失败,请稍后重试')
}).always(() => {
this.formLoading = false
})
},
},
async created() {
created() {
const record_id = GetQueryString("record_id")
const user_id = GetQueryString("user_id")
setTimeout(() => {
@@ -288,7 +288,8 @@
pageForm: {
source: source,
searchName: "u.username",
audit: 2
// 已办入口默认显示本阶段已审核记录。
audit: new URLSearchParams(window.location.search).get("audit") === "1" ? 1 : 2
},
unions: [],
tableColumns: [
-162
View File
@@ -1,162 +0,0 @@
nutz.application.name=UNION_NJUST
server.port=8080
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:/project/UNION_NJUST/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.10.88.114
ftp.port=21
ftp.username=ftp_user
ftp.password=NJUST_DD3s@#2025
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://127.0.0.1:3306/UNION_NJUST?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=NJUST_DD3s@#2025
jdbc.validationQuery=select 1
jdbc.maxActive=500
jdbc.testWhileIdle=true
jdbc.connectionProperties=druid.stat.slowSqlMillis=2000
jdbc.defaultAutoCommit=true
xsssql.ignore.urls=/platform/common/user/userPageData,/platform/cms/content/article/addDo,/platform/sys/app/conf/addDo,/platform/sys/app/conf/editDo,/platform/sys/task/cronExp,/platform/sys/task/editDo,/platform/sys/task/addDo
#环境 dev/prod
v.environment=prod
v.loginUrl=/sso/login
v.loginUrlMobile=/mobile/cas/login
#shiro.ini.path=shiro.ini
shiro.objects=platformAuthc,AuthenticationFilter,Cas20ProxyReceivingTicketValidationFilter,platformRealm,authenticationStrategy,weChatFilter
#end
shiro.ini.urls:
/sso/**=Cas20ProxyReceivingTicketValidationFilter
/mobile/cas/login=AuthenticationFilter
/platform/doLogin=anon
/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:/project/UNION_NJUST/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=budwk5mini
deploy.appkey=wizzer
# 是否真的发送短信
sms.enabled=false
# 腾讯云短信配置
sms.tencent.secret-id=1
sms.tencent.secret-key=2
# 验证码模板ID
sms.tencent.tpl.code=1
# 短信通知模板ID
sms.tencent.tpl.msg=2
# 应用ID
sms.tencent.appid=1
# 短信签名
sms.tencent.sign=萌发开源
-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')
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.
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.
Binary file not shown.
@@ -1,642 +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.
-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