diff --git a/.gitignore b/.gitignore index efeb494..2f4543c 100644 --- a/.gitignore +++ b/.gitignore @@ -89,3 +89,6 @@ ry-vue2/ # 旧 vue 控制台 # ===== OCR 模型 (大二进制, 不进版本库, 部署时放 jar 同目录 models/) ===== ry-api/models/ ry-ocr-java/src/main/resources/models/ + +# ===== OA 单点登录临时笔记 (含 OA 管理员密码, 不入库) ===== +oalogin/ diff --git a/ry-api/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ry-api/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index 43bb07a..abbe8db 100644 --- a/ry-api/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/ry-api/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -25,6 +25,7 @@ import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysMenuService; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.business.domain.BizExpert; +import com.ruoyi.business.service.ComplianceLoginService; import com.ruoyi.business.service.IBizExpertService; /** @@ -56,6 +57,9 @@ public class SysLoginController @Autowired private IBizExpertService expertService; + @Autowired + private ComplianceLoginService complianceLoginService; + /** * 登录方法 * @@ -70,6 +74,12 @@ public class SysLoginController { return AjaxResult.error("您的信息正在审核中"); } + // 合规人员/项目负责人门禁: 校验其仍存在于 ecology 视图, 角色变更则软删重建 + String complianceGate = complianceGate(loginBody.getUsername()); + if (complianceGate != null) + { + return AjaxResult.error(complianceGate); + } AjaxResult ajax = AjaxResult.success(); // 生成令牌 String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), @@ -101,6 +111,33 @@ public class SysLoginController return expert != null && "1".equals(expert.getAuditStatus()); } + /** + * 密码登录门禁: 用户名命中 manager/leader 时校验其仍存在于 ecology 视图. + * 返回 null=放行, 非 null=错误提示 (直接报错, 不走密码登录). + */ + private String complianceGate(String username) + { + if (username == null || username.isEmpty()) + { + return null; + } + SysUser probe = userService.selectUserByUserName(username); + if (probe == null && username.contains("@")) + { + probe = userService.selectUserByEmail(username); + } + if (probe == null || probe.getUserId() == null) + { + return null; + } + String role = probe.getRoleType(); + if (!"manager".equals(role) && !"leader".equals(role)) + { + return null; + } + return complianceLoginService.gateForPasswordLogin(probe); + } + /** * 获取用户信息 * diff --git a/ry-api/ruoyi-admin/src/main/resources/application-prod.yml b/ry-api/ruoyi-admin/src/main/resources/application-prod.yml index 125515b..6c3343a 100644 --- a/ry-api/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ry-api/ruoyi-admin/src/main/resources/application-prod.yml @@ -10,6 +10,12 @@ spring: url: jdbc:mysql://47.95.12.80:3306/hegui?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: hegui password: C55zwt5L2TeB4kLB + # 合规(泛微 ecology)外部只读库, 登录校验合规人员/项目负责人用 + ecology: + url: jdbc:mysql://oagm228.guojustar.com:3306/ecology?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8 + username: user_compliance + password: 'ComplexPass@2026' + driver-class-name: com.mysql.cj.jdbc.Driver # 生产环境外部接口地址 ruoyi: @@ -20,15 +26,15 @@ ruoyi: base-url: https://hegui.bahim.org.cn/camera/ supplier-account-api: -# base-url: https://zbsupplier.guojustar.com/supplier-api/bidding/supplier/openapi/accounts - base-url: https://zbsuppliertest.guojustar.com/supplier-api/bidding/supplier/openapi/accounts + base-url: https://zbsupplier.guojustar.com/supplier-api/bidding/supplier/openapi/accounts +# base-url: https://zbsuppliertest.guojustar.com/supplier-api/bidding/supplier/openapi/accounts supplier-account-api-aes: key-id: supplier-api-key key: 'kY0+oIO/laeaaaYDd+9TCYbCQR0b/vqMeJ9sUnSVd9U=' bidding-api: -# notice-list-url: https://zbpublic.guojustar.com/portal-api/bidding/public/notice/list -# detail-url: https://zbpublic.guojustar.com/#/detail/ - notice-list-url: https://zbpublictest.guojustar.com/portal-api/bidding/public/notice/list - detail-url: https://zbpublictest.guojustar.com/#/detail/ + notice-list-url: https://zbpublic.guojustar.com/portal-api/bidding/public/notice/list + detail-url: https://zbpublic.guojustar.com/#/detail/ +# notice-list-url: https://zbpublictest.guojustar.com/portal-api/bidding/public/notice/list +# detail-url: https://zbpublictest.guojustar.com/#/detail/ diff --git a/ry-api/ruoyi-admin/src/main/resources/application-test.yml b/ry-api/ruoyi-admin/src/main/resources/application-test.yml index 10211c1..9e936a2 100644 --- a/ry-api/ruoyi-admin/src/main/resources/application-test.yml +++ b/ry-api/ruoyi-admin/src/main/resources/application-test.yml @@ -6,6 +6,12 @@ spring: url: jdbc:mysql://mmos.uvwcloud.com:3306/guoju0808?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: Qljl1rh_ + # 合规(泛微 ecology)外部只读库, 登录校验合规人员/项目负责人用 + ecology: + url: jdbc:mysql://101.254.99.156:11120/ecology?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8 + username: user_compliance + password: 'ComplexPass@2026' + driver-class-name: com.mysql.cj.jdbc.Driver # 测试环境外部接口地址 ruoyi: diff --git a/ry-api/ruoyi-admin/src/main/resources/application.yml b/ry-api/ruoyi-admin/src/main/resources/application.yml index 60135b7..257c176 100644 --- a/ry-api/ruoyi-admin/src/main/resources/application.yml +++ b/ry-api/ruoyi-admin/src/main/resources/application.yml @@ -97,7 +97,7 @@ spring: basename: i18n/messages profiles: # 默认 prod 环境; 本地测试用 --spring.profiles.active=test (group 自动展开为 druid,test) - active: prod + active: test group: test: druid,test prod: druid,prod diff --git a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/config/EcologyDataSourceConfig.java b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/config/EcologyDataSourceConfig.java new file mode 100644 index 0000000..0ee1ffb --- /dev/null +++ b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/config/EcologyDataSourceConfig.java @@ -0,0 +1,42 @@ +package com.ruoyi.business.config; + +import com.alibaba.druid.pool.DruidDataSource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import org.springframework.jdbc.core.JdbcTemplate; + +/** + * 合规(泛微 ecology)外部只读库数据源. + *

+ * 用于登录时校验合规人员(manager) / 项目负责人(leader) 是否仍存在于 + * {@code v_compliance_project_manager} 视图 (按 mobile 手机号匹配). + *

+ * 独立 JdbcTemplate (bean 名 ecologyJdbcTemplate), 不接入主库事务 / MyBatis, + * 避免与 DruidConfig 的主从动态数据源 (dynamicDataSource @Primary) 产生二义性. + */ +@Configuration +public class EcologyDataSourceConfig +{ + @Bean(name = "ecologyJdbcTemplate") + public JdbcTemplate ecologyJdbcTemplate(Environment env) + { + String url = env.getProperty("spring.datasource.ecology.url"); + String username = env.getProperty("spring.datasource.ecology.username"); + String password = env.getProperty("spring.datasource.ecology.password"); + String driver = env.getProperty("spring.datasource.ecology.driver-class-name", "com.mysql.cj.jdbc.Driver"); + + DruidDataSource ds = new DruidDataSource(); + ds.setUrl(url); + ds.setUsername(username); + ds.setPassword(password); + ds.setDriverClassName(driver); + // 只读小连接池, 登录校验用 + ds.setInitialSize(1); + ds.setMinIdle(1); + ds.setMaxActive(3); + ds.setMaxWait(3000); + ds.setValidationQuery("SELECT 1"); + return new JdbcTemplate(ds); + } +} diff --git a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizAuthController.java b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizAuthController.java index 0d74d1c..9cb6489 100644 --- a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizAuthController.java +++ b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizAuthController.java @@ -19,7 +19,9 @@ import com.ruoyi.business.dto.SmsValidForm; import com.ruoyi.business.mapper.BizPersonMapper; import com.ruoyi.business.service.IBizExpertService; import com.ruoyi.business.service.IBizOrgService; +import com.ruoyi.business.service.ComplianceLoginService; import com.ruoyi.business.service.SysSmsService; +import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.id.SnowflakeId; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.controller.BaseController; @@ -69,6 +71,9 @@ public class BizAuthController extends BaseController { @Autowired private IBizExpertService expertService; + @Autowired + private ComplianceLoginService complianceLoginService; + @Autowired private BizPersonMapper bizPersonMapper; @@ -101,8 +106,8 @@ public class BizAuthController extends BaseController { if (phone == null || !phone.matches("^1\\d{10}$")) { return error("请输入正确的手机号"); } - // 登录反义: 手机号未注册则不发 - if (!userService.isPhoneRegistered(phone)) { + // 登录反义: 手机号未注册则不发; 但合规人员/项目负责人可从 ecology 视图自动建号, 放行发码 + if (!userService.isPhoneRegistered(phone) && !complianceLoginService.existsInEcology(phone)) { return error("该手机号未注册, 请先注册账号"); } String uuid = smsService.sendCode(phone); @@ -138,15 +143,15 @@ public class BizAuthController extends BaseController { return error("验证码错误或已过期: " + e.getMessage()); } - // 3. 查用户 (checkPhoneUnique 只 select user_id+phonenumber, 缺 role_type/user_name/status, - // 需再按 userId 查完整 user, 否则 LoginUser 里 roleType=null 导致前端拿不到角色而跳回登录页) - SysUser probe = userMapper.checkPhoneUnique(phone); - if (probe == null || probe.getUserId() == null) { - return error("该手机号未注册"); + // 3. 查用户 + 合规人员/项目负责人身份校验 (可能从 ecology 视图自动建号) + SysUser user; + try { + user = complianceLoginService.reconcileForLogin(phone); + } catch (ServiceException e) { + return error(e.getMessage()); } - SysUser user = userMapper.selectUserById(probe.getUserId()); if (user == null) { - return error("该手机号未注册"); + return error("用户不存在"); } // 4. 校验用户状态 diff --git a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/service/ComplianceLoginService.java b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/service/ComplianceLoginService.java new file mode 100644 index 0000000..6eba4e2 --- /dev/null +++ b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/service/ComplianceLoginService.java @@ -0,0 +1,200 @@ +package com.ruoyi.business.service; + +import java.util.List; +import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.ruoyi.business.domain.BizPerson; +import com.ruoyi.business.mapper.BizPersonMapper; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.id.SnowflakeId; +import com.ruoyi.system.mapper.SysUserMapper; +import com.ruoyi.system.service.ISysUserService; + +/** + * 合规人员(manager) / 项目负责人(leader) 登录身份校验 + 自动建号. + *

+ * 单一可信源 = 泛微 ecology 的 {@code v_compliance_project_manager} 视图 (按 mobile 手机号): + * - type=1 → 合规人员 → role_type=manager + * - type=2 → 项目负责人 → role_type=leader + *

+ * 登录决策 (手机号 vs 视图 vs sys_user): + * - 已注册且非 manager/leader → 不查视图, 直接放行 (走原逻辑) + * - 视图里没有 → 报"用户不存在" + * - 视图里有 + sys_user 没有 → 入库(sys_user + biz_person, 登录名=手机号, 密码留空) 后放行 + * - 视图里有 + sys_user 有 + 角色匹配 → 放行 + * - 视图里有 + sys_user 有 + 角色不匹配 → 软删旧 + 建新 后放行 + */ +@Service +public class ComplianceLoginService +{ + private static final Logger log = LoggerFactory.getLogger(ComplianceLoginService.class); + + private static final String ECOLOGY_LOOKUP_SQL = + "SELECT lastname, type FROM v_compliance_project_manager WHERE mobile = ? LIMIT 1"; + + @Autowired + @Qualifier("ecologyJdbcTemplate") + private JdbcTemplate ecologyJdbcTemplate; + + @Autowired + private SysUserMapper userMapper; + + @Autowired + private ISysUserService userService; + + @Autowired + private BizPersonMapper bizPersonMapper; + + /** + * 短信登录主路径: 查用户 + 合规/负责人校验, 返回最终要登录的 SysUser. + * 无资格时抛 {@link ServiceException}("用户不存在"). + */ + @Transactional(rollbackFor = Exception.class) + public SysUser reconcileForLogin(String phone) + { + SysUser user = findUserByPhone(phone); + String role = user == null ? null : user.getRoleType(); + boolean needEcology = user == null || "manager".equals(role) || "leader".equals(role); + if (!needEcology) + { + return user; + } + + EcologyPerson p = queryEcology(phone); + if (p == null) + { + throw new ServiceException("用户不存在"); + } + String expectedRole = p.type == 1 ? "manager" : "leader"; + + if (user == null) + { + // sys_user 没有 → 自动入库 + return provision(p, phone, expectedRole); + } + if (expectedRole.equals(role)) + { + // 角色匹配 → 直接放行 + return user; + } + // 角色不匹配 → 软删旧 + 建新 + userService.deleteUserByIds(new Long[] { user.getUserId() }); + return provision(p, phone, expectedRole); + } + + /** + * 密码登录门禁: 已解析出的 manager/leader 校验其是否仍在视图、角色是否一致. + * 返回 null=放行; 非 null=错误提示 (此时调用方应直接报错, 不再走密码登录). + */ + @Transactional(rollbackFor = Exception.class) + public String gateForPasswordLogin(SysUser user) + { + String phone = user.getPhonenumber(); + EcologyPerson p = queryEcology(phone == null ? "" : phone); + if (p == null) + { + return "用户不存在"; + } + String expectedRole = p.type == 1 ? "manager" : "leader"; + if (expectedRole.equals(user.getRoleType())) + { + return null; + } + // 角色不匹配 → 软删旧 + 建新 (新账号密码留空, 只能短信登录) + userService.deleteUserByIds(new Long[] { user.getUserId() }); + provision(p, phone, expectedRole); + return "账号角色已更新, 请使用手机验证码登录"; + } + + /** + * 手机号是否存在于 ecology 视图 (短信发码前放行合规/负责人未注册手机号用). + */ + public boolean existsInEcology(String phone) + { + return queryEcology(phone) != null; + } + + private SysUser findUserByPhone(String phone) + { + SysUser probe = userMapper.checkPhoneUnique(phone); + if (probe == null || probe.getUserId() == null) + { + return null; + } + return userMapper.selectUserById(probe.getUserId()); + } + + private EcologyPerson queryEcology(String phone) + { + if (phone == null || phone.isEmpty()) + { + return null; + } + try + { + List> rows = ecologyJdbcTemplate.queryForList(ECOLOGY_LOOKUP_SQL, phone); + if (rows == null || rows.isEmpty()) + { + return null; + } + Map row = rows.get(0); + Object typeObj = row.get("type"); + if (typeObj == null) + { + return null; + } + EcologyPerson p = new EcologyPerson(); + p.type = ((Number) typeObj).intValue(); + p.name = row.get("lastname") == null ? null : row.get("lastname").toString(); + return p; + } + catch (Exception e) + { + // ecology 库不可达时 fail-closed: 视作视图没有, 合规/负责人被拦, 普通用户不受影响 + log.warn("查询 ecology 合规视图失败: {}", e.getMessage()); + return null; + } + } + + private SysUser provision(EcologyPerson p, String phone, String role) + { + String name = (p.name == null || p.name.isEmpty()) ? phone : p.name; + + SysUser u = new SysUser(); + u.setUserName(phone); // 登录名 = 手机号 + u.setNickName(name); + u.setPhonenumber(phone); + u.setRoleType(role); // 显式写, 避免 DB 默认 'executor' + u.setStatus("0"); + // 密码留空 (只能短信登录) + u.setCreateBy(phone); + userService.insertUser(u); + Long userId = u.getUserId(); + + BizPerson person = new BizPerson(); + SnowflakeId.injectIfEmpty(person, "personId"); + person.setName(name); + person.setPhone(phone); + person.setUnitType(role); + person.setDepartment("manager".equals(role) ? "合规部" : "项目组"); + person.setPosition("manager".equals(role) ? "合规员" : "项目负责人"); + person.setUserId(userId); + person.setCreateBy(phone); + person.setUpdateBy(phone); + bizPersonMapper.insert(person); + return u; + } + + private static class EcologyPerson + { + int type; + String name; + } +} diff --git a/ry-vue3/.env.test b/ry-vue3/.env.test index eafed6e..cce3805 100644 --- a/ry-vue3/.env.test +++ b/ry-vue3/.env.test @@ -1,5 +1,5 @@ # 测试环境 API 基路径 (nginx 反向代理前缀) -VITE_APP_BASE_API = '/hegui-api' +VITE_APP_BASE_API = '/hg-api' # 测试环境静态资源子路径 (nginx 部署在 /hegui/) -VITE_BASE = '/hegui/' +VITE_BASE = '/hg/' diff --git a/ry-vue3/src/assets/login.jpg b/ry-vue3/src/assets/login.jpg index c2b4cfb..3667291 100644 Binary files a/ry-vue3/src/assets/login.jpg and b/ry-vue3/src/assets/login.jpg differ diff --git a/ry-vue3/src/views/auth/Login.vue b/ry-vue3/src/views/auth/Login.vue index 21b5a00..87d3435 100644 --- a/ry-vue3/src/views/auth/Login.vue +++ b/ry-vue3/src/views/auth/Login.vue @@ -21,8 +21,8 @@

-

{{ loginMode === 'password' ? '账号登录' : '手机号登录' }}

- +

{{ loginMode === 'password' ? '登录' : '登录' }}

+ @@ -375,7 +374,7 @@ function confirmRegister() { // 执行方(供应商)注册: 跳转到独立供应商注册系统, 不走本系统注册页 if (registerUserType.value === 'executor') { showRoleModal.value = false - window.location.href = 'https://zbsuppliertest.guojustar.com/' + window.location.href = 'https://zbsupplier.guojustar.com/' return } const routeMap = { @@ -599,11 +598,13 @@ body { margin: 0; padding: 0; } } .login-page .login-title{ + transform: translateY(-10px); font-size: 26px; font-weight: 600; color: #1f2937; margin-bottom: 10px; letter-spacing: 2px; + text-align: center; } .login-page .login-subtitle{ diff --git a/ry-vue3/src/views/portal/PublicityDetail.vue b/ry-vue3/src/views/portal/PublicityDetail.vue index aac9330..d4b3ac7 100644 --- a/ry-vue3/src/views/portal/PublicityDetail.vue +++ b/ry-vue3/src/views/portal/PublicityDetail.vue @@ -279,11 +279,13 @@ function isImg(url) { // OSS bucket 设置了 Content-Disposition: attachment, iframe/embed 直接访问会被强制下载. // 所有 OSS 文件 URL 走 /common/oss/proxy 后端代理 (重写为 inline) // 必须加 /dev-api 前缀: Vite dev server proxy 只代理 /dev-api/* 到后端, 其他相对 URL 会 SPA fallback 到 index.html -// #toolbar=0 隐藏 Chrome PDF viewer 工具栏, #zoom=page-width 强制 PDF 撑满 iframe 宽度 +// #toolbar=0 隐藏 Chrome PDF viewer 工具栏, #zoom=<百分比> 放大 PDF 内容 +// 红头文件自带较宽页边距, page-width 会把整页(含边距)缩进 iframe, 正文仍偏小; +// 用数值缩放(如 160)裁掉边距、让正文尽量占满宽度, 数字越大越大/裁得越多 function proxyUrl(url) { if (!url) return url if (url.includes('hwtossbamlorgcn.oss-cn-beijing.aliyuncs.com')) { - return import.meta.env.VITE_APP_BASE_API + '/common/oss/proxy?url=' + encodeURIComponent(url) + '#toolbar=0&zoom=page-width' + return import.meta.env.VITE_APP_BASE_API + '/common/oss/proxy?url=' + encodeURIComponent(url) + '#toolbar=0&zoom=121' } return url } @@ -584,8 +586,6 @@ onBeforeUnmount(() => { gap: 20px; background: transparent; /* 不要 card 包裹 */ padding: 24px 0; /* 去掉左右内边距让内容铺满 */ - /* 给悬浮按钮留右边距,避免按钮遮住内容 */ - padding-right: 80px; border-radius: 0; box-shadow: none; align-items: stretch; @@ -689,18 +689,24 @@ onBeforeUnmount(() => { 100% { background-position: -200% 0; } } -/* 悬浮固定到页面右侧中部 - 不占 detail-main 空间 */ +/* 悬浮固定到 main 右上, 紧贴版心右侧 - 不占 detail-main 空间 */ .detail-actions { position: fixed; - right: 24px; - top: 50%; - transform: translateY(-50%); + left: calc(50% + 630px); /* 版心右缘(677) 附近, 按钮右缘略出内容右上角 */ + top: 180px; z-index: 100; display: flex; flex-direction: column; gap: 12px; width: 132px; } +/* 中窄屏: 版心右侧放不下按钮时改贴屏幕右缘, 避免溢出 */ +@media (max-width: 1660px) and (min-width: 901px) { + .detail-actions { + left: auto; + right: 12px; + } +} .action-btn { display: flex; align-items: center; justify-content: center; gap: 6px; height: 38px; padding: 0 18px; diff --git a/shouce/admin.md b/shouce/admin.md new file mode 100644 index 0000000..3e4d303 --- /dev/null +++ b/shouce/admin.md @@ -0,0 +1,209 @@ +# 后台管理员用户手册 + +> 本手册面向「后台管理员」角色。内容基于系统实际页面整理。 + +## 角色说明 + +后台管理员是平台的**超级管理员**,负责系统级维护与全局业务管理: + +- **系统账号**:用户管理、角色管理 +- **基础数据**:科室、职称、项目类别(供医生注册 / 投稿下拉选择) +- **网站内容**:协议、专项计划、劳务协议模板 +- **业务复用**:项目管理、会议管理、专家管理、支持/执行单位管理(权限比合规人员更大,如可删除项目、新增单位等) + +## 菜单概览 + +登录后左侧菜单(后台管理员角色): + +- 工作台 +- 用户管理 +- 角色管理 +- 项目管理 +- 会议管理 +- 资料库管理(子菜单:专家管理 / 支持单位管理 / 执行单位管理 / 科室管理 / 职称管理 / 项目类别管理) +- 网站管理(子菜单:协议管理 / 专项计划管理 / 劳务协议配置) +- 消息通知 +- 账号信息 + +--- + +## Q1. 如何维护基础数据(科室 / 职称 / 项目类别) + +> 「科室管理」「职称管理」「项目类别管理」三个页面结构完全一致,都是「基础数据」的新增、编辑、删除:这些数据用于**医生(专家)注册时选择科室 / 职称**、**医生投稿时选择项目类别**。后台管理员在此维护下拉选项。 + +### 一、进入与列表 + +1. 点击左侧菜单「**资料库管理**」→「科室管理」/「职称管理」/「项目类别管理」。 +2. 列表展示:ID(项目类别页为「序号」)、名称、排序、状态(启用 / 停用)、创建时间。 +3. 可按名称、状态筛选。 + +### 二、新增 + +1. 点「**新增科室 / 新增职称 / 新增类别**」按钮。 +2. 弹窗填写: + - **名称**:科室名称 / 职称名称 / 类别名称。 + - **排序**(数字越小越靠前)。 +3. 点「**保存**」→ 新增成功(默认启用)。 + +### 三、编辑 + +1. 点行内「**编辑**」。 +2. 可改名称、排序,以及**状态**(启用 / 停用,仅编辑时可选)。 +3. 点「保存」。 + +### 四、停用 / 启用 + +- 行内「**停用** / **启用**」切换;停用后该项不再出现在前台的下拉选项里。 + +### 五、删除 + +- 点行内「**删除**」→ 确认「该操作不可恢复」→ 删除。 + +### 六、注意事项 + +- 三个页面操作完全一致,区别仅是「名称」字段的叫法(科室名称 / 职称名称 / 类别名称)。 +- 科室、职称供**医生注册**时选择;项目类别供**医生投稿**时选择。停用 / 删除后前台下拉不再显示。 +- 删除**不可恢复**,删除前请确认该项已无项目 / 专家引用。 + +--- + +## Q2. 如何管理用户(系统账号) + +> 「用户管理」维护系统全部登录账号,覆盖 6 种角色。新建用户时按角色**显示不同字段**(无企业归属的账号 / 评审专家 / 支持方·执行方)。 + +### 一、查看与筛选 + +1. 点击左侧菜单「**用户管理**」。 +2. 列表展示:用户 ID、账号、姓名、角色、单位名称、手机号、邮箱、状态(启用 / 停用)、创建时间。 +3. 可按用户账号、姓名、单位名称、角色、状态筛选。 + +### 二、新建用户(按角色) + +1. 点「**新建用户**」按钮。 +2. 先选「**角色**」(6 种:后台管理员 / 合规人员 / 评审专家 / 执行人 / 支持方 / 项目负责人)。 +3. 填通用字段: + - **登录账号**。 + - **密码**。 + - 邮箱。 +4. 按所选角色填附加字段: + - **后台管理员 / 合规人员 / 项目负责人**(无企业归属的账号):姓名、手机号。 + - **评审专家**:姓名、手机号、工作单位、科室、职称。 + - **支持方 / 执行人**:选「**账号类型**」—— + - **主账号(新建单位)**:单位名称、企业性质、联系人、联系电话。 + - **子账号(选已有单位)**:所属单位(搜索选择)、姓名、手机号、部门、职务。 +5. 选「**状态**」(启用 / 停用,默认启用)。 +6. 点「保存」→ 新建成功。 + +### 三、编辑用户 + +1. 点行内「**编辑**」。 +2. 账号(登录名)**不可改**;可改姓名、角色、手机号、邮箱。 +3. 点「保存」。 + +### 四、重置密码 + +- 点行内「**重置密码**」→ 确认 → 重置为默认密码 `123456`。 + +### 五、停用 / 启用 + +- 点行内「**停用** / **启用**」切换;停用后该账号无法登录。 + +### 六、删除 + +- 点行内「**删除**」→ 弹强警告(「删除后无法恢复,该用户关联的项目 / 会议 / 报名数据将受影响」)→ 确认删除。 +- **不能删除自己**(自己账号的「删除」置灰)。 + +### 七、注意事项 + +- 6 种角色:后台管理员、合规人员、评审专家、执行人、支持方、项目负责人。 +- 「子账号」必须挂到**已有主账号的单位**下(下拉只列出有主账号的单位)。 +- 重置密码固定为 `123456`,建议提醒使用人首次登录后自行修改。 +- 删除不可恢复,且会影响该用户关联的项目 / 会议 / 报名数据,谨慎操作。 + +--- + +## Q3. 如何管理专项计划 + +> 「专项计划」是门户对外展示的栏目,支持**富文本**或**上传文件**两种内容形式。后台管理员在此维护,访客在门户详情页查看。 + +### 一、进入与列表 + +1. 点击左侧菜单「**网站管理**」→「专项计划管理」。 +2. 列表展示:ID、标题、类型(富文本 / 上传文件)、排序、状态(启用 / 停用)、更新时间。 +3. 可按标题、类型、状态筛选。 + +### 二、新建专项计划 + +1. 点「**新增**」进入新建页。 +2. 填写字段: + - **标题**。 + - **内容类型**:**富文本** 或 **上传文件**—— + - 富文本 → 在「正文」富文本编辑器里录入内容。 + - 上传文件 → 上传文件作为内容。 + - **排序**(数字越小越靠前)。 + - **状态**(启用 / 停用)。 + - **备注**(内部备注)。 +3. 点「保存」→ 返回列表。 + +### 三、编辑 + +- 列表点「**编辑**」进入编辑页,可改全部字段(标题、类型、正文或文件、排序、状态、备注)。 +- 切换内容类型会**清空另一字段**(富文本 → 文件会清空正文,反之清空文件),避免脏数据。 + +### 四、预览 + +- 列表点「**预览**」→ 新窗口打开门户的专项计划详情页(公开页 `/special-plan/{id}`)。 +- 已停用的项「预览」置灰。 + +### 五、删除 + +- 列表点「**删除**」→ 确认 → 删除。 + +### 六、注意事项 + +- 专项计划对外展示在门户,预览打开的是公开详情页。 +- 富文本 / 上传文件二选一;切换类型会清空已填的另一侧内容。 +- 状态在「编辑」页里切换(列表页无独立的启用 / 停用按钮)。 +- 排序数字越小越靠前。 + +--- + +## Q4. 如何管理用户协议 / 隐私政策 + +> 「协议管理」维护两条**固定协议**:**用户协议(agreement)**和**隐私政策(privacy)**——二者各一条,只能编辑内容与状态,不能新增或删除。 + +### 一、进入与列表 + +1. 点击左侧菜单「**网站管理**」→「协议管理」。 +2. 列表展示:ID、标题、类型(用户协议 / 隐私政策)、状态(启用 / 停用)、更新时间。 +3. 可按类型、标题、状态筛选。 + +### 二、编辑协议 + +1. 点行内「**编辑**」进入编辑页。 +2. 字段: + - **标题**。 + - **类型**(用户协议 / 隐私政策,编辑时**不可改**)。 + - **状态**(启用 / 停用)。 + - **正文**(富文本)。 + - **备注**(内部备注)。 +3. 点「保存」。 + +### 三、预览 + +- 点行内「**预览**」→ 新窗口打开门户协议正文页。已停用的项「预览」置灰。 + +### 四、这两个协议在哪里展示 + +- 展示在**三个注册页**:专家注册、执行单位(供应商)注册、支持方注册——页面底部「我已阅读并同意」区各有「《用户协议》」「《隐私政策》」两个链接。 +- 访客点击后,新窗口打开门户公开文章页: + - `/article/agreement` → 用户协议正文 + - `/article/privacy` → 隐私政策正文 +- **只有「启用」状态的协议会被注册页展示**(停用后注册页不再显示对应链接,后台预览也置灰)。 + +### 五、注意事项 + +- 用户协议、隐私政策各**固定一条**,只能编辑,不能新增 / 删除(列表页无「新增」「删除」入口)。 +- 编辑页「类型」不可改。 +- 正文为富文本,支持格式排版。 +- 修改启用状态会直接影响注册页协议链接的显示。 diff --git a/shouce/doctor.md b/shouce/doctor.md new file mode 100644 index 0000000..c0a5604 --- /dev/null +++ b/shouce/doctor.md @@ -0,0 +1,105 @@ +# 医生(评审专家)用户手册 + +> 本手册面向「医生」角色(评审专家)。内容基于系统实际页面整理。 + +## 角色说明 + +医生是项目的发起者(评审专家),负责**投稿策划方案**。策划方案经合规管理员审核通过后立项,之后医生才能看到自己报名的项目和参与的会议。 + +## 菜单概览 + +登录后左侧菜单(医生角色): + +- 首页 +- 我的项目策划方案(投稿入口) +- 我参与的会议(资质审核通过后才显示) +- 我报名的项目(资质审核通过后才显示) +- 消息通知 +- 账号信息 + +--- + +## Q1. 如何投稿策划方案 + +> 医生通过「投稿」提交策划方案(含设计文件),审核通过后立项。 + +### 一、进入投稿列表 + +1. 点击左侧菜单「**我的项目策划方案**」。 +2. 列表展示:投稿名称、项目方向、项目类别、形式、设计文件、状态、是否结算、项目编号、创建时间、审核意见、备注。 + +### 二、新建投稿 + +1. 点击「**新建投稿**」按钮。 +2. 填写字段: + - 策划方案名称 + - 项目方向(下拉选择) + - 项目形式(线上 / 线下 / 线上+线下 / 其他) + - 项目类别(下拉选择) + - 设计文件 + - 备注 +3. 点击「**保存**」→ 存为草稿(状态「未提交」)。 + +### 三、提交投稿 + +1. 保存后回到列表,点击该行「**提交**」按钮。 +2. 确认提交 → 状态变为「待审核」,进入合规审核流程。 +3. 也可勾选多条草稿 → 点击「**批量提交**」一次性提交多条。 + +### 四、查看审核结果 + +- 列表「状态」列显示当前状态:**未提交 / 待审核 / 通过 / 拒绝**。 +- 「审核意见」列显示合规管理员的审核意见。 +- 审核**通过**后立项,列表会生成「项目编号」。 + +### 五、注意事项 + +- 只有「未提交」「拒绝」状态的投稿可以**修改 / 提交**;「待审核」「通过」状态锁定,不可修改。 +- 被**拒绝**后,可修改内容后重新提交(重新进入审核)。 + +--- + +## Q2. 如何参与会议并签署劳务 + +> 会议执行后,医生作为参会人需要「签署劳务」:填写劳务信息并手写签名,平台自动生成 PDF 劳务协议归档。 + +### 一、参与会议(查看会议信息) + +1. 点击左侧菜单「**我参与的会议**」(资质审核通过后才显示)。 +2. 列表展示:项目编号、会议名称、当前阶段、日程、邀请函、签署状态。 +3. 可点击「日程」查看 / 下载**日程海报**,「邀请函」查看 / 下载**会议邀请函**。 + +### 二、签署劳务(三步) + +**进入签署:** + +1. 在「我参与的会议」列表,找到要签署的会议,点击行内「**签署劳务**」。 +2. 弹出**二维码**(也可点「复制链接」),用手机扫码或打开链接,自动登录并进入签署页。 + +**第一步:填写劳务信息** + +在手机上填写: + +- 手机号、姓名、工作单位、科室、医务职称 +- 账户名称(持卡人姓名)、身份证号、银行卡号、银行名称、开户银行(支行)、开户银行地址、银行详细地址 +- 身份证附件(正反面) +- 劳务形式(多选) + +填完后点「下一步」。 + +**第二步:签署协议** + +1. 页面显示劳务协议正文。 +2. 底部点「签名确认」→ 弹出**手写签名画板**,在画板上手写姓名(可「清除」重写)。 +3. 确认签名 → 点「提交」。 + +**第三步:签字成功** + +- 提示签字成功,系统自动生成 PDF 劳务协议并归档。 + +### 三、注意事项 + +- 签署状态在列表中区分「已签署 / 未签署」;已签署后点「**查看劳务**」可查看 / 下载签字 PDF。 +- 手机扫码后**无需再次登录**。 +- 身份证正反面必须上传。 +- 再次打开已签署的签署链接,会直接展示已签协议 PDF。 \ No newline at end of file diff --git a/shouce/executor.md b/shouce/executor.md new file mode 100644 index 0000000..68e4f85 --- /dev/null +++ b/shouce/executor.md @@ -0,0 +1,190 @@ +# 执行方(执行单位)用户手册 + +> 本手册面向「执行方」角色(承接项目并执行会议的单位)。内容基于系统实际页面整理。 + +## 角色说明 + +执行方是承接项目、执行会议的单位(供应商)。账号分两种: + +| 账号类型 | 权限 | +|---|---| +| **主账号** | 查看本单位承接的全部项目;可分配项目、建会、上传材料、人员管理等 | +| **执行人员** | 只能查看被分配的项目;仅查看,不参与分配 | + +## 菜单概览 + +登录后左侧菜单(执行方角色): + +- 首页 +- 我的项目策划方案(投稿入口) +- 项目列表(承接的项目) +- 会议列表(会议管理) +- 人员管理(仅主账号可见) +- 消息通知 +- 账号信息 + +--- + +## Q1. 如何分配项目(把项目分配给执行人员) + +> 「分配」是指**主账号**把承接的项目指派给团队下的「执行人员(子账号)」,由该执行人员负责该项目。执行人员本身不能发起分配。 + +### 一、单个项目分配 + +1. 点击左侧菜单「**项目列表**」。 +2. 找到目标项目,点击行内「**分配**」链接。 +3. 弹窗中选择「分配给执行人」(下拉支持搜索,可多选;管理员账号显示但不可选)。 +4. 点击「确定」,完成分配。 + +### 二、批量分配 + +1. 在列表首列勾选多个项目。 +2. 点击上方工具栏「**项目分配**」按钮。 +3. 弹窗中显示「已选项目数」与「项目编号预览」,选择执行人(可多选)。 +4. 点击「确定」,批量分配完成。结果按项目逐条反馈(成功 N / 总数,失败项列出原因)。 + +### 三、注意事项 + +- 分配对象是「执行人员」——来自「人员管理」中本单位团队下的**子账号**;管理员不可被分配。 +- 重新分配会**覆盖**该项目原已分配的执行人员。 +- 执行人员登录后,列表页**不会显示**「项目分配」按钮与勾选列,只能查看自己被分配的项目。 +- 已结题的项目不再显示「分配」入口。 + +--- + +## Q2. 如何建会(新建会议) + +> 「建会」是指为承接的项目创建一场具体的会议(第 N 期)。主账号与执行人员只要能看到项目,都可建会。 + +### 一、进入建会 + +1. 点击左侧菜单「**项目列表**」,找到要建会的项目。 +2. 点击行内「**建会**」链接,进入「新建会议」页。 + +**建会入口有两个限制:** + +- **场次上限**:某项目已建会议数达到分配场次时,「建会」按钮置灰(悬停提示「已建会议数已达分配场次上限」)。 +- **结题项目**:已结题的项目不显示「建会」入口。 + +### 二、填写会议信息 + +页面上方是**只读快照**(项目编号、项目名称、支持单位、总场次/总期数、项目创建人、项目创建时间),下方填写: + +| 字段 | 说明 | +|---|---| +| 会议名称 | 执行方**不可改**,自动取项目名称 | +| 期数 | 本次会议是项目的第几期 | +| 会议开始时间 | 会议开始日期时间 | +| 会议结束时间 | 会议结束日期时间 | +| 会议地点 | 会议举办地点 | +| 备注 | 补充说明 | + +### 三、保存 + +点击「**保存**」→ 创建成功,自动跳转到会议列表。 + +### 四、注意事项 + +- 「总场次/总期数」对执行方 = 分配给本单位的场次口径。 + +--- + +## Q3. 如何上传并提交会议材料 + +> 会议材料分「**劳务**」「**会务**」两条轨,独立上传、独立提交、独立审核。完整审核链路:**执行方提交 → 合规审核(一审)→ 支持方监察(二审)**。 + +### 一、进入材料管理 + +1. 点击左侧菜单「**会议列表**」,找到要上传材料的会议。 +2. 点击行内「**上传材料**」,进入会议详情页的「材料管理」区。 + +### 二、上传劳务材料(劳务材料 tab) + +1. **参会人管理**:点「+ 新增参会人」按手机号添加医生(姓名 / 手机号 / 医院 / 科室 / 职称 / 银行卡 / 身份证等),或「批量导入」。添加后可「邀请参会」「推送电子签」让医生完成签署。 +2. **劳务协议**:点「下载目录」拿空目录模板,放入各参会人签好的协议后压缩,点「上传协议」回填(按「序号_姓名」逐个对应)。 +3. **专家照片**:同上——下载目录 → 放照片 → 压缩上传回填。 +4. **劳务材料**(逐个上传): + - 企业权益 + - 签到表(会议现场签到表,可扫码拍照) + - 前全景(会议现场前全景,带定位框,扫码拍照) + - 后全景(会议现场后全景,扫码拍照) +5. **日程海报**:上传会议日程海报。 + +页面底部自动汇总「**劳务费合计**」。 + +### 三、上传会务材料(会务材料 tab) + +1. **发票表**:上传含发票的材料后,系统自动识别发票号、开票时间、金额并汇总展示。 +2. **会务材料**(逐个上传):物料制作、酒店、大交通、小交通、执行费、设计费、其他、总结算单、总发票(每项都有提示:需要什么照片 / 盖章结算单 / 发票)。 +3. **打包上传**:点「下载目录」拿空目录模板,把各类材料放进对应子目录后压缩成 zip,点「上传会务材料」一次性回填(单个目录多文件会自动打包成一个 zip)。 + +页面底部自动汇总「**会务费合计**」,上传总发票后以总发票金额为准。 + +### 四、提交材料 + +上传完成后,点底部提交按钮: + +- 「**提交劳务**」:仅提交劳务轨。 +- 「**提交会务**」:仅提交会务轨。 +- 「**提交全部**」:两轨一起提交。 + +提交前系统会**自动保存**所有未保存的内容,然后进入审核流程,提示「材料已提交,待合规审核」。 + +### 五、查看审核进度 + +- 详情页右侧「**材料审核**」时间轴,按轮次记录「执行方提交 → 合规审核 → 支持方监察」的通过 / 拒绝结果。 +- 被拒绝的轨会退回,需重新修改上传后再提交。 + +### 六、注意事项 + +- 只有「**已执行**」且「**未冻结**」的会议才能提交材料;未执行会议不能提交。 +- 材料一经提交进入审核,对应轨即**锁定**,不能再改(除非被拒绝退回)。 +- 「保存」按钮仅在材料未提交 / 被退回时可用;两轨都进入审核后锁定。 +- 劳务 / 会务两轨可独立提交、独立被审,互不影响。 + +--- + +## Q4. 如何管理团队人员(执行人员) + +> 执行方主账号可维护本单位团队人员,其中**子账号就是「执行人员」**——即 Q1「分配项目」里可被分配的对象。此菜单仅主账号可见。 + +### 一、进入人员管理 + +1. 点击左侧菜单「**人员管理**」(仅主账号可见,执行人员无此菜单)。 +2. 列表展示:姓名、手机号、所属公司、部门、职务、角色、状态。 + - 角色:`管理员`(主账号)/ `执行人员`(子账号)。 + - 状态:`正常` / `禁用`。 +3. 可按姓名、手机号、所属公司、部门、职务筛选。 + +### 二、新建人员(执行人员 / 子账号) + +1. 点击「**新建人员**」→ 进入独立新建页。 +2. 填写字段: + - 用户名(子账号登录用户名) + - 初始密码 + - 姓名、手机号 + - 所属公司(由主账号注册时自动带出,只读不可改) + - 部门、职务、状态(正常 / 禁用) +3. 点击「**保存**」。新建成功后弹窗显示子账号**账号 + 初始密码**(仅本次显示,请记录后告知使用人)。 + +### 三、编辑人员 + +- 列表「更多 → 编辑」进入编辑页;可改姓名、手机号、部门、职务、状态,**用户名和密码不可改**。 + +### 四、批量导入 + +1. 点击「**批量导入**」→「批量导入模板下载」下载 Excel 模板。 +2. 按模板填写后选择文件 →「开始导入」。 +3. 导入完成后弹窗逐行展示成功 / 失败明细(含失败原因)。 + +### 五、重置密码 / 禁用 / 恢复 + +- **重置密码**:一键重置为默认密码 `123456`。 +- **禁用 / 恢复**:禁用后该账号无法登录;恢复后重新启用。 +- 主账号**不能**禁用自己。 + +### 六、注意事项 + +- 子账号= 执行人员,就是 Q1「项目分配」里可被分配的对象。 +- 已禁用的执行人员**不会**出现在「项目分配」的候选列表里(Q1)。 +- 新建时填的用户名 / 密码,就是该执行人员登录系统的账号。 \ No newline at end of file diff --git a/shouce/flow.md b/shouce/flow.md new file mode 100644 index 0000000..37c717e --- /dev/null +++ b/shouce/flow.md @@ -0,0 +1,96 @@ +# 主要流程说明 + +> 本章梳理平台整体的**项目全生命周期**主线与支撑环节,帮助读者理解业务如何流转、各角色在哪个环节做什么。各角色的具体操作见对应手册(后台管理员 / 合规人员 / 医生 / 执行方 / 支持方 / 项目负责人)。 + +## 一、角色与账号体系 + +| 角色 | 在业务里的位置 | +|---|---| +| 后台管理员 | 系统维护 + 全局兜底(账号 / 基础数据 / 网站内容 / 单位) | +| 合规人员 | 核心审核与项目管理(合规管理员 / 项目经理) | +| 医生(评审专家) | 项目发起者:投稿、参与会议、签署劳务 | +| 执行方 | 承接项目、建会、上传材料 | +| 支持方 | 申办方:监察二审、查看项目 | +| 项目负责人 | 纯只读,查看自己负责的项目 | + +- **账号类型**:主账号(注册即新建单位)与 子账号(挂靠已有单位)。支持方 / 执行方按主账号 / 子账号区分权限;医生 / 后台管理员 / 项目负责人 / 合规人员是无企业归属的账号。 +- **门户匿名访问**:首页、项目公示、3 个注册页、登录、协议、专项计划,均无需登录即可访问。 + +## 二、主线:项目全生命周期 + +``` +① 医生注册·资质审核 → ② 医生投稿·立项 → ③ 项目创建·分配·公示 + → ④ 公示意向·报名 → ⑤ 执行方建会·上传材料 → ⑥ 医生签署劳务 + → ⑦ 材料审核·结算·完结 +``` + +**① 医生(评审专家)注册与资质审核** + +- 医生在门户「专家注册」提交执业证书、职称证明。 +- 审核(合规人员「专家审核」或后台管理员「专家管理」)通过后,生成医生账号,医生解锁「我参与的会议 / 我报名的项目」。 +- **后台管理员**:审核专家,或「新建专家」直接通过 + 建账号。 + +**② 医生投稿 → 立项** + +- 医生在「我的项目策划方案」新建投稿 → 提交。 +- 合规人员在「策划方案管理」审核,通过时**填写项目编号** = 立项。 +- **后台管理员**:维护「项目类别」下拉选项(供医生投稿选择)。 + +**③ 项目创建、分配与公示** + +- 合规人员新建项目(项目信息 + 角色劳务 + 公告文件,并指定项目负责人)→ 分配支持单位(1 个)+ 执行单位(多个,各分场次 / 金额)。 +- 「保存并发布公告」→ 门户「项目公示」对外可见。 +- **后台管理员**:全局兜底查看项目 / 会议;可**删除项目**(合规人员无删除权)。 + +**④ 公示意向与报名** + +- 门户公示详情页按 4 类公告(专家参与邀请函 / 项目公益支持函 / 项目通知 / 日程)展示。 +- 访客或登录用户可:医生「立即报名」、支持方「公益支持」(支持意向)、执行方「项目执行申请」(执行意向)。 +- 意向会被系统记录,合规人员在「支持意向 / 执行意向」查看与导出。 +- **后台管理员**:基本不介入。 + +**⑤ 执行方建会与上传材料** + +- 执行方在「项目列表」建会(第 N 期,受分配场次上限约束)。 +- 上传「劳务材料」(参会人 / 劳务协议 / 签到表 / 现场全景 / 日程海报)与「会务材料」(发票自动识别 / 各类费用 / 总结算单 / 总发票),页面自动汇总劳务费 / 会务费。 +- **后台管理员**:会议管理兜底查看,不参与上传。 + +**⑥ 医生签署劳务(生成 PDF)** + +- 执行方「邀请参会 / 推送电子签」→ 医生手机扫码(免登录)完成三步签署:填劳务信息 → 手写签名 → 生成 PDF 归档。 +- PDF 按「劳务协议模板」自动填入姓名、手机号、会议名称、费用总额等信息。 +- **后台管理员**:配置「劳务协议模板」(默认模板、启用 / 禁用),影响生成的劳务协议正文。 + +**⑦ 材料审核 → 结算 → 完结** + +- 执行方提交材料 → 合规一审(劳务 / 会务分轨,可独立通过 / 退回)→ 支持方监察二审 → 结算(上传付款凭证)→ 完结。 +- **后台管理员**:会议管理兜底查看审核进度;审核动作由合规人员 / 支持方完成。 + +## 三、支撑环节 + +**① 账号与单位体系** + +- 支持单位 / 执行单位在门户注册 → 生成单位主账号。 +- 后台管理员 / 合规人员维护单位、单位下子账号:支持方子账号 = 监察员,执行方子账号 = 执行人员。 +- 新增 / 编辑 / 批量导入单位、指定「机构管理员」(更换主账号)为后台管理员专属;合规人员只能管理单位下人员。 + +**② 基础数据(科室 / 职称 / 项目类别)** + +- 供医生注册选择科室 / 职称、医生投稿选择项目类别。 +- 后台管理员专属维护(新增、编辑、删除、启停用)。 + +**③ 网站内容(协议 / 专项计划 / 劳务协议模板)** + +- 协议、专项计划在门户对外展示;劳务协议模板用于医生签署时生成 PDF。 +- 后台管理员专属维护。 + +## 四、各角色职责速查 + +| 角色 | 主要职责 | +|---|---| +| 医生(评审专家) | 注册资质、投稿策划方案、参与会议、签署劳务 | +| 合规人员 | 审核立项、建项目分配、材料一审、专家审核、结算完结 | +| 执行方 | 承接项目、建会、上传材料、提交审核 | +| 支持方 | 监察二审、查看项目 | +| 项目负责人 | 只读查看自己负责的项目 | +| 后台管理员 | 系统维护 + 全局兜底(账号 / 基础数据 / 网站内容 / 单位) | diff --git a/shouce/leader.md b/shouce/leader.md new file mode 100644 index 0000000..0cf272b --- /dev/null +++ b/shouce/leader.md @@ -0,0 +1,63 @@ +# 项目负责人用户手册 + +> 本手册面向「项目负责人」角色。内容基于系统实际页面整理。 + +## 角色说明 + +项目负责人是项目的负责人(**纯只读账号**),用于查看被指定为自己负责的项目及其执行情况。账号无企业 / 机构归属、无主账号 / 子账号之分,数据按「项目负责人 = 自己」隔离: + +- 只能看到**自己负责的项目**,及其项目下的**会议** +- **纯只读**:不提供任何写操作(新建 / 编辑 / 分配 / 审核 / 结算 / 评分 / 删除等) +- 项目负责人由合规人员在**新建项目**时指定(见《合规人员手册》Q2) + +## 菜单概览 + +登录后左侧菜单(项目负责人角色): + +- 首页 +- 项目列表 +- 会议列表 +- 账号信息 + +--- + +## Q1. 如何查看我负责的项目 / 会议 + +> 项目负责人是只读角色:只能查看被指定为自己负责的项目及其会议,不能做任何写操作(新建、编辑、分配、审核、结算、评分等)。 + +### 一、查看我负责的项目 + +1. 点击左侧菜单「**项目列表**」。 +2. 列表展示:项目编号、项目名称、总场次/总期数、已执行、未执行、总金额、可用金额、已支付劳务费、已支付会务费、执行单位评分(合规/支持)、支持单位、服务机构、项目形式、是否结题、项目开始/结束时间。 +3. 可按支持单位、服务机构、项目编号、项目名称、项目形式、项目时间、是否结题、是否结算筛选。 +4. 数据隔离:仅显示「项目负责人 = 自己」的项目(后端按项目负责人字段隔离)。 + +### 二、查看项目详情 + +- 点击项目名称或行内「**查看**」→ 进入项目详情页(只读),展示: + - **项目信息**:项目编号、项目名称、总场次/总期数、总金额、管理费及税金、项目形式、项目开始时间、项目结束时间、是否招标项目、项目负责人、支持单位、执行单位列表(名称 / 场次 / 金额)。 + - **角色劳务设置**:各会议角色的劳务金额。 + - **支持单位监督员**:该项目支持单位下的监督员名单。 + +### 三、从项目跳到会议 / 看评分 + +- 点击列表「总场次 / 已执行 / 未执行」列的数字 → 跳到会议列表,并按对应范围(全部 / 已执行 / 未执行)自动筛选。 +- 点击「执行单位评分(合规 / 支持)」列 → 弹窗查看该项目的 4 维度评分明细与平均分(只读)。 + +### 四、查看会议列表 + +1. 点击左侧菜单「**会议列表**」(或从项目列表点场次数字跳入)。 +2. 列表展示:项目编号、会议 ID、项目形式、会议名称、会议开始/结束时间、总期数、期数、当前阶段、备注。 +3. 可按项目编号、会议 ID、会议名称、期数、会议时间、项目形式、当前阶段、备注筛选。 +4. 会议同样按「项目负责人 = 自己」隔离,只显示自己负责项目下的会议。 + +### 五、查看会议详情 + +- 点击会议名称或行内「**查看**」→ 进入会议详情页(只读),仅展示会议信息、材料与审核进度,无任何操作按钮。 + +### 六、注意事项 + +- 项目负责人是**纯只读**账号:项目列表、会议列表、详情页均不显示任何「新建 / 编辑 / 分配 / 审核 / 结算 / 评分 / 删除」等写操作按钮。 +- 只能看到「项目负责人 = 自己」的项目;他人的项目不可见。 +- 「项目负责人」在新建项目时由合规人员指定(见《合规人员手册》Q2「如何创建项目并分配支持单位 / 执行单位」)。 +- 侧栏无「消息通知」菜单项;消息可从首页的通知模块进入查看。 diff --git a/shouce/manager.md b/shouce/manager.md new file mode 100644 index 0000000..6d130f1 --- /dev/null +++ b/shouce/manager.md @@ -0,0 +1,300 @@ +# 合规人员(合规管理员)用户手册 + +> 本手册面向「合规人员」角色(合规管理员 / 项目经理)。内容基于系统实际页面整理。 + +## 角色说明 + +合规人员是平台的核心审核与项目管理角色,负责贯穿「投稿 → 立项 → 执行 → 审核 → 结算」全流程: + +- 审核医生投稿的**策划方案**(通过后立项) +- **项目管理**(新建、分配支持方/执行方、删除、导出) +- **会议管理**(建会、材料合规审核·一审、结算、完结) +- **专家资质审核**(医生注册后是否放行) +- **支持/执行单位管理**、**支持/执行意向查看**、账号与消息 + +## 菜单概览 + +登录后左侧菜单(合规人员角色): + +- 工作台 +- 策划方案管理 +- 项目管理 +- 会议管理 +- 专家审核 +- 支持单位管理 +- 执行单位管理 +- 支持意向 +- 执行意向 +- 消息通知 +- 账号管理 + +--- + +## Q1. 如何审核策划方案(立项) + +> 医生通过「投稿」提交策划方案(含设计文件),合规人员在此审核。**审核通过即「立项」**——通过时需手动填写项目编号,之后该方案进入「项目管理」成为正式项目;退回则医生可修改后重新提交。 + +### 一、查看策划方案列表 + +1. 点击左侧菜单「**策划方案管理**」。 +2. 列表展示:策划方案名称、项目方向、项目类别、项目形式、设计文件、状态、是否结算、项目编号、提交时间、备注。 +3. 可按项目编号、策划方案名称、项目方向、项目类别、状态、是否结算、备注筛选。 + +### 二、查看设计文件 + +- 列表「设计文件」列可点「**查看**」(新窗口预览 PDF)或「**下载**」。 +- 审核前先查看设计文件,确认方案内容。 + +### 三、单个审核(通过 / 退回) + +1. 找到状态为「**待审核**」的行,点击行内「**审核**」。 +2. 弹窗中: + - 选择审核结果「**通过**」或「**退回**」。 + - 选「通过」时,需填写「**项目编号**」(即立项后该项目的编号)。 + - 审核意见(会回显给医生在「审核意见」列看到)。 +3. 点击「确认」: + - 通过 → 状态变「通过」,生成项目编号,立项成功。 + - 退回 → 状态变「拒绝」,医生可修改后重新提交。 + +### 四、批量退回 + +1. 勾选多条「待审核」的方案。 +2. 点击「**批量审核**」→ 弹窗只允许**退回**,填审核意见。 +3. 点击「确认退回」→ 批量应用(非待审核的会被跳过并提示)。 + +### 五、修改策划方案 + +- 点击行内「**修改**」,进入修改页,可改:项目规划(项目方向)、投稿名称、学科方向、形式、项目类别、设计文件、备注(项目编号只读不可改)。 + +### 六、结算 + +- 状态为「通过」且「未结算」的行,显示「**结算**」按钮;点击确认即标记为已结算。 +- 也可勾选多条「通过且未结算」的方案 →「**批量结算**」。 + +### 七、注意事项 + +- 「退回」与「拒绝」是同一状态,只是不同入口的叫法不同。 +- 审核**通过时需填写项目编号**,是立项的关键一步;退回时无需填。 +- 只有「待审核」状态的方案才有「审核」按钮;「通过」且未结算的才有「结算」按钮。 +- 审核意见会回显给医生,退回时建议写明原因。 + +--- + +## Q2. 如何创建项目并分配支持单位 / 执行单位 + +> 项目「新建」和「分配」是两个独立页面:先新建项目(填项目信息 + 角色劳务 + 公告文件),再到「项目分配」页面指定**支持单位**(一个)和**执行单位**(可多个,每个分场次 + 金额)。 + +### 一、新建项目 + +1. 点击左侧菜单「**项目管理**」→「**新建项目**」按钮,进入新建页。 +2. **项目信息**: + - 项目名称、项目编号 + - 项目负责人(下拉选择) + - 是否招标项目(是 / 否) + - 项目形式(线上 / 线下 / 线上+线下 / 其他) + - 总场次 / 总期数、总金额(元)、管理费(元) + - 开始时间、结束时间 +3. **角色劳务设置**:为每种会议角色(主席 / 主持 / 讲者 / 点评·评审 / 讨论 / 其他)配置劳务金额;可「+ 增加角色」或「删除角色」。 +4. **公告文件**:上传邀请函、支持函、通知、日程(PDF / 图片)。 +5. 底部按钮: + - 「**保存**」→ 暂存(不对外发布)。 + - 「**保存并发布公告**」→ 保存并发布到公示(外部可见)。 + +### 二、分配支持单位 / 执行单位 + +**入口:**「项目管理」列表页——单个项目点行内「**分配**」;或多个项目勾选后点顶部「**项目分配**」(批量)。 + +1. **选择支持单位**:下拉搜索并选择一个支持单位(一个项目一个支持方)。 +2. **添加执行单位**:在表格里「+ 增加执行方」,每行选执行单位 + 填「场次」「金额」(可加多个执行单位,同一项目不能重复选同一执行单位)。 +3. **提交截止(天)**:执行方提交材料的自然日期限。 +4. 页面顶部实时显示「项目总场次 / 已分配场次」「总金额 / 已分配金额 / 可用金额」,**超出会红色告警**,需调整到不超。 +5. 点「**保存**」完成分配。 + +### 三、注意事项 + +- 支持单位只能选**一个**;执行单位可**多个**,按「场次 + 金额」分别分配。 +- 已分配场次 / 金额总和**不得超过**项目总场次 / 总金额,否则无法保存。 +- 已结题的项目**不能分配**(行内「分配」置灰,批量会跳过已结题项)。 +- 已禁用的支持单位 / 执行单位仍显示但置灰,不可选。 +- 分配后,执行单位在自己「项目列表」能看到该项目并建会(见执行方手册)。 + +--- + +## Q3. 如何审核会议材料(合规一审)并结算 + +> 执行方提交材料后,先到**合规审核(一审)**——由合规人员对「劳务」「会务」两轨材料分别通过 / 退回;两轨都通过后,合规人员补充付款凭证、结算、完结。完整的链路:**执行方提交 → 合规一审 → 支持方监察二审 → 结算 → 完结**。 + +### 一、进入会议审核 + +1. 点击左侧菜单「**会议管理**」。 +2. 列表中,处于「**待合规审核**」状态的会议,行内显示黄色「**审核**」链接;点击进入会议详情页。 +3. 详情页底部「材料管理」区,会按轨显示「**审核劳务**」「**审核会务**」「**审核全部**」按钮(哪一轨到了待审状态,对应按钮才亮)。 + +### 二、审核材料(一审,分轨) + +1. 先切换到「劳务材料」「会务材料」tab,检查执行方上传的材料(参会人、劳务协议、签到表、发票、结算单等)。 +2. 点「审核劳务」/「审核会务」/「审核全部」,弹出审核窗口: + - 对「劳务材料」「会务材料」分别选 **通过** 或 **拒绝**。 + - 填写审核意见(退回时建议写明原因,将退回执行方整改)。 +3. 点「确定」提交,提示「审核完成」。 + +### 三、批量审核 + +- 会议列表勾选多个「待合规审核」的会议 →「**批量审核**」→ 选「通过 / 退回」+ 填意见(退回时意见需填写)→ 确定,逐条返回成功 / 失败明细。 + +### 四、结算 / 完结 + +1. **结算**:两轨材料都「通过」后,会议进入待结算。点「结算」→ 确认「已上传劳务 / 会务付款凭证」→ 结算完成。 +2. **完结**:已结算的会议,在「更多 → 完结」或详情页「完结」按钮,确认后流程终止。 + +### 五、上传付款凭证 / 下载材料 + +- **付款凭证**:详情页「劳务凭证」「会务凭证」tab 上传(结算前需补充)。 +- **下载材料**:列表行内「会务下载」「劳务下载」打 zip 下载;也可勾选多个会议「批量下载会务 / 批量下载劳务」。 + +### 六、注意事项 + +- 一审是**分轨**的:劳务、会务可独立通过 / 拒绝,互不影响。 +- **拒绝会退回执行方**重新提交,重新提交后再次进入合规一审(重新走一轮)。 +- 只有「两轨都通过」才能结算;结算前建议先上传付款凭证。 +- 「审核」与「结算」在列表互斥出现:待审显示「审核」,两轨通过且未结算才显示「结算」。 +- 冻结的会议可在「更多 → 解冻」重新放开(解冻后提交截止时间重新计算)。 +- 二审(支持方监察)在合规一审通过后自动流转,见支持方手册。 + +--- + +## Q4. 如何审核专家(医生资质) + +> 「专家」即医生(评审专家)。医生注册后提交资质材料,合规人员在此审核;**审核通过后医生才能看到「我参与的会议」「我报名的项目」**,进入完整业务流程。 + +### 一、进入专家审核 + +1. 点击左侧菜单「**专家审核**」。 +2. 列表展示:姓名、手机号、工作单位、科室、职称、执业证书、职称证明、审核状态、启用状态、审批时间、审批人。 +3. 可按姓名、手机号、工作单位、审核状态筛选(未提交 / 待审核 / 通过 / 拒绝)。 + +### 二、查看资质材料 + +- 「执业证书」「职称证明」列可点「查看」(图片预览)或「下载」。 +- 审核前先核对证书、证明是否齐全有效。 + +### 三、单个审核(通过 / 拒绝) + +1. 找到状态为「待审核」的专家,点行内「**审核**」。 +2. 弹窗中选「**通过**」或「**拒绝**」,填写审核意见(拒绝时建议写明原因)。 +3. 点「确认」→ 状态更新,系统记录审批人与审批时间。 +4. 已拒绝的专家,行内「已拒绝」可查看拒绝时间 / 审批人 / 拒绝意见。 + +### 四、批量审核 + +- 勾选多个专家 →「**批量审核**」→ 确认后批量通过(意见记为「批量通过」)。 + +### 五、新建专家(可选) + +- 「新建专家」录入医生信息(姓名 / 手机号 / 工作单位 / 科室 / 职称 / 执业证书 / 职称证明 / 身份证 / 银行卡等),**新建即自动通过审核**,并生成登录账号(初始密码 = 手机号,弹窗提示)。 + +### 六、注意事项 + +- 审核状态:未提交 / 待审核 / 通过 / 拒绝;只有「待审核」需要处理。 +- **通过是医生解锁完整功能的闸门**——未通过前医生看不到「我参与的会议」「我报名的项目」。 +- 拒绝会回显意见给医生,便于其修改后重新提交。 +- 新建专家 = 自动通过审核 + 创建登录账号(医生角色)。 + +--- + +## Q5. 如何管理支持单位 / 执行单位 + +> 「支持单位管理」「执行单位管理」是两个镜像菜单,分别维护**支持单位**(申办方)与**执行单位**(供应商)的单位信息及单位下人员。合规人员对单位本身只有**查看 / 人员管理 / 启用禁用**权限;**新增、编辑、批量导入单位是后台管理员专属**。单位下的人员则可新建、导入、编辑、禁用、重置密码。 + +### 一、查看单位列表 + +1. 点击左侧菜单「**支持单位管理**」或「**执行单位管理**」。 +2. 列表展示:单位名称、单位地址、税号/统一社会信用代码、合作状态(正常 / 禁用)、创建日期、联系人、联系电话。 +3. 可按单位名称、税号/统一社会信用代码、合作状态筛选。 +4. 点行内「**查看**」弹窗展示单位完整信息(含「公司类型」标签:支持方 / 执行方)。 + +### 二、管理单位下人员 + +1. 点行内「**人员管理**」→ 跳转到该单位的人员列表(面包屑显示「… / 单位名」)。 +2. 人员列表展示:姓名、手机号、(执行单位另有「邮箱」列)、企业名称、部门、职务、状态;可按姓名、手机号、企业名称、部门、职务筛选。 +3. 合规人员可对人员执行以下操作: + - **查看**:进入人员详情(只读)。 + - **编辑**:改姓名、手机号、部门、职务、状态(用户名 / 密码不可改)。 + - **新建人员**:录入子账号(用户名 / 初始密码 / 姓名 / 手机号 / 部门 / 职务 / 状态),保存后弹窗显示「账号 + 初始密码」。 + - **批量导入**:下载模板 → 按模板填写 → 选择文件导入 → 弹窗逐行展示成功 / 失败明细。 + - **启用 / 禁用**:禁用后该账号无法登录;恢复后重新启用。 + - **重置密码**:一键重置为默认密码 `123456`。 + +### 三、启用 / 禁用单位 + +- 行内「**禁用**」:禁用后该企业**主账号无法登录,企业下子账号也将被拦截**(弹窗有确认提示)。 +- 已禁用单位行内显示「**恢复**」,点击即恢复为正常。 + +### 四、注意事项 + +- 合规人员**不能新增 / 编辑 / 批量导入单位**,这些按钮仅后台管理员可见。 +- 「更换机构管理员」开关仅后台管理员可见,合规人员无法指定某人员为该机构主账号。 +- 支持单位与执行单位是两个独立菜单、两套独立数据,管理入口与操作方式完全一致,区别仅是「公司类型」标签(支持方 / 执行方)。 +- 禁用单位是「一刀切」:该单位主账号及旗下所有子账号都会被拦截登录,恢复后一并放开。 +- 单位下新建的子账号:支持单位 = **监察员**,执行单位 = **执行人员**——即支持方 Q1「分配监察员」、执行方 Q1「分配执行人」里可被分配的对象。 + +--- + +## Q6. 如何查看支持意向 / 执行意向 + +> 「支持意向」「执行意向」是**公示公告对外匿名征集**的两个意向列表——外部访客(无需登录)在公示页填写「我有支持意向」或「我有执行意向」,这些意向会被系统记录,合规人员在此集中查看并导出。当前页面为**只读 + 导出**,不提供审核 / 删除操作。 + +### 一、进入意向列表 + +1. 点击左侧菜单「**支持意向**」或「**执行意向**」。 +2. 列表展示:项目编号、意向项目名称、姓名、工作单位、部门、职务、手机号、**账号状态**、创建时间。 +3. 「账号状态」标记该意向人是否已注册为系统账号: + - **存在**(绿)→ 已是平台账号(可对应到具体单位 / 人员)。 + - **不存在**(黄)→ 尚未注册。 + +### 二、筛选 + +- 可按项目编号、意向项目名称、姓名、工作单位、手机号筛选。 + +### 三、导出 + +- 点「**导出**」→ 按**当前筛选条件**全量下载 Excel(`支持意向_日期.xlsx` / `执行意向_日期.xlsx`)。 + +### 四、注意事项 + +- 数据来自公示页的**匿名意向**(访客无需登录即可填写)。 +- 「账号状态」用于识别该意向人是否已有账号,便于后续对接;未注册的仅留下姓名 / 单位 / 手机号等联系方式。 +- 当前页面**无审核 / 删除操作**(操作列已关闭),仅提供查看与导出。 +- 支持意向 / 执行意向是两个独立列表,入口与操作一致,区别仅是意向类型(支持 / 执行)。 + +--- + +## Q7. 如何修改个人账号信息(账号管理) + +> 菜单名「**账号管理**」,实际是**修改自己登录账号的信息**(姓名 / 手机号 / 密码),不是管理他人账号。 + +### 一、进入账号管理 + +1. 点击左侧菜单「**账号管理**」。 +2. 页面展示并回显当前账号的「姓名」「手机号」。 + +### 二、修改姓名 / 手机号 + +1. 「姓名」清空无法保存。 +2. 修改「手机号」。 +3. 点「**保存**」→ 提示「保存成功」。 + +### 三、修改登录密码 + +1. 填写「原密码」、「新密码」、「确认密码」。 +2. 点「**保存**」→ 姓名 / 手机号与密码(若填了)分别提交更新。 + +### 四、取消 + +- 点「**取消**」恢复为进入页面时的姓名 / 手机号,并清空三个密码输入框。 + +### 五、注意事项 + +- **密码留空 = 不修改密码**:三个密码框都留空时,只更新姓名 / 手机号,不影响密码。 +- 只要填了「新密码」,就**必须同时填「原密码」**,否则无法改密。 +- 本页只作用于**当前登录的合规人员账号自身**;管理他人账号(如单位下人员)走「支持单位管理 / 执行单位管理」里的「人员管理」(见 Q5)。 \ No newline at end of file diff --git a/shouce/manual.md b/shouce/manual.md new file mode 100644 index 0000000..60584df --- /dev/null +++ b/shouce/manual.md @@ -0,0 +1,954 @@ +# 平台用户使用说明(完整版) + + + +# 第一部分 · 平台概述与业务流程 + +> 本章梳理平台整体的**项目全生命周期**,帮助读者理解业务如何流转、各角色在哪个环节做什么。 + +## 一、角色与账号体系 + +| 角色 | 在业务里的位置 | +|---|---| +| 后台管理员 | 系统维护 | +| 合规人员 | 核心审核与项目管理 | +| 医生 | 投稿、参与会议、签署劳务 | +| 执行方 | 承接项目、建会、上传材料 | +| 支持方 | 申办方:监察、查看项目 | +| 项目负责人 | 纯只读,查看自己负责的项目 | + +- **账号类型**:主账号(注册即新建单位)与 子账号(挂靠已有单位)。支持方 / 执行方按主账号 / 子账号区分权限;医生 / 后台管理员 / 项目负责人 / 合规人员是无企业归属的账号。 +- **门户匿名访问**:首页、项目公示、3 个注册页、登录、协议、专项计划,均无需登录即可访问。 + +## 二、主线:项目全生命周期 + +``` +1. 医生注册·资质审核 +2. 医生投稿·立项 +3. 项目创建·分配·公示 +4. 公示意向·报名 +5. 执行方建会·上传材料 +6. 医生签署劳务 +7. 材料审核·结算·完结 +``` + +**1. 医生注册与资质审核** + +- 医生在门户注册,提交执业证书、职称证明。 +- 医生注册后**审核通过前不能登录系统**;合规人员或后台管理员审核通过后,医生才能登录,看到**我参与的会议 / 我报名的项目**。 +- **后台管理员**:审核专家,或直接新建专家并通过、创建账号。 + +**2. 医生投稿** + +- 医生新建投稿并提交。 +- 合规人员审核,通过时**填写项目编号** 并在OA创建项目。 + +**3. 项目创建、分配与公示** + +- 合规人员新建项目 → 分配支持单位 + 执行单位(各分场次 / 金额)。 +- 发布公告后,门户**项目公示**对外可见。 + +**4. 公示与报名** + +- 门户公示详情页按 4 类公告(专家参与邀请函 / 项目公益支持函 / 项目通知 / 日程)展示。 +- 公示页提供三个按钮:医生**立即报名**、**公益支持**、**项目执行申请**。 +- 合规人员查看与导出意向。 + +**5. 执行方建会与上传材料** + +- 执行方建会。 +- 上传**劳务材料**(参会人 / 劳务协议 / 签到表 / 现场全景 / 日程海报)与**会务材料**(发票自动识别 / 各类费用 / 总发票),页面自动汇总劳务费 / 会务费。 + +**6. 医生签署劳务(生成 PDF)** + +- 执行方发起签署 → 医生手机扫码(免登录)完成三步签署:填劳务信息 → 手写签名 → 生成 PDF 归档。 +- PDF 按**劳务协议模板**自动填入姓名、手机号、会议名称、费用总额等信息。 +- **后台管理员**:配置**劳务协议模板**(默认模板、启用 / 禁用),影响生成的劳务协议正文。 + +**7. 材料审核 → 结算 → 完结** + +- 执行方提交材料 → 合规审核 → 支持方监察 → 结算(上传凭证)→ 完结。 +- **后台管理员**:兜底查看审核进度;审核动作由合规人员 / 支持方完成。 + + +## 三、各角色职责 + +| 角色 | 主要职责 | +|---|---| +| 医生 | 投稿策划方案、参与会议、签署劳务 | +| 合规人员 | 创建项目、建项目分配、材料审核、专家审核、项目结算 | +| 执行方 | 建会、上传材料、提交审核 | +| 支持方 | 监察、查看项目 | +| 项目负责人 | 查看自己负责的项目 | +| 后台管理员 | 系统维护 | + +--- + +# 第二部分 · 分角色操作手册 + +## 角色一 · 医生 + +### 菜单概览 + +登录后左侧菜单(医生角色): + +- 首页 +- 我的项目策划方案 +- 我参与的会议 +- 我报名的项目 +- 消息通知 +- 账号信息 + +### Q1. 如何投稿策划方案 + + +#### 一、进入投稿列表 + +1. 点击左侧菜单**我的项目策划方案**。 +2. 列表展示:投稿名称、项目方向、项目类别、形式、设计文件、状态、是否结算、项目编号、创建时间、审核意见、备注。 + +#### 二、新建投稿 + +1. 点击**新建投稿**按钮。 +2. 填写字段: + - 策划方案名称 + - 项目方向 + - 项目形式(线上 / 线下 / 线上+线下 / 其他) + - 项目类别 + - 设计文件 + - 备注 +3. 点击**保存**→ 存为草稿(状态**未提交**)。 + +#### 三、提交投稿 + +1. 保存后回到列表,点击该行**提交**按钮。 +2. 确认提交 → 状态变为**待审核**,进入合规审核流程。 +3. 也可勾选多条草稿 → 点击**批量提交**一次性提交多条。 + +#### 四、查看审核结果 + +- 列表**状态**列显示当前状态:**未提交 / 待审核 / 通过 / 拒绝**。 +- **审核意见**列显示合规人员的审核意见。 +- 审核**通过**后,列表显示**项目编号**。 + + +### Q2. 如何参与会议并签署劳务 + +> 会议执行后,医生作为参会人需要**签署劳务**:填写劳务信息并手写签名,平台自动生成 PDF 劳务协议归档。 + +#### 一、查看会议信息 + +1. 点击左侧菜单**我参与的会议**。 +2. 列表展示:项目编号、会议名称、当前阶段、日程、邀请函、签署状态。 +3. 可点击**日程**查看 / 下载**日程海报**,**邀请函**查看 / 下载**会议邀请函**。 + +#### 二、签署劳务 + +**进入签署:** + +1. 在**我参与的会议**列表,找到要签署的会议,点击行内**签署劳务**。 +2. 弹出**二维码**,用手机扫码或打开链接,自动登录并进入签署页。 + +**第一步:填写劳务信息** + +在手机上填写: + +- 手机号、姓名、工作单位、科室、医务职称、身份证附件(正反面) +- 账户名称、身份证号、银行卡号、银行名称、开户银行(支行)、开户银行地址、银行详细地址等 + +填完后点**下一步**。 + +**第二步:签署协议** + +1. 页面显示劳务协议正文。 +2. 底部点**签名确认**→ 弹出**手写签名画板**,在画板上手写姓名。 +3. 确认签名 → 点**提交**。 + +**第三步:签字成功** + +- 提示签字成功,系统自动生成 PDF 劳务协议并归档。 + +#### 三、注意事项 + +- 签署状态在列表中区分**已签署 / 未签署**;已签署后点**查看劳务**可查看 / 下载签字 PDF。 +- 身份证正反面必须上传。 +- 再次打开已签署的签署链接,会直接展示已签协议 PDF。 + +--- + +## 角色二 · 合规人员 + + +### 角色说明 + +合规人员是平台的核心审核与项目管理角色,负责贯穿**投稿 → 立项 → 执行 → 审核 → 结算**全流程: + +- 审核医生投稿的**策划方案**(通过后立项) +- **项目管理**(新建、分配支持方/执行方、删除、导出) +- **会议管理**(建会、材料合规审核、结算、完结) +- **专家资质审核**(医生注册后是否放行) +- **支持/执行单位管理**、**支持/执行意向查看**、账号与消息 + +### 菜单概览 + +登录后左侧菜单: + +- 工作台 +- 策划方案管理 +- 项目管理 +- 会议管理 +- 专家审核 +- 支持单位管理 +- 执行单位管理 +- 支持意向 +- 执行意向 +- 消息通知 +- 账号管理 + +### Q1. 如何审核策划方案 + + +#### 一、查看策划方案列表 + +1. 点击左侧菜单**策划方案管理**。 +2. 列表展示:策划方案名称、项目方向、项目类别、项目形式、设计文件、状态、是否结算、项目编号、提交时间、备注。 +3. 可按项目编号、策划方案名称、项目方向、项目类别、状态、是否结算、备注筛选。 + +#### 二、查看设计文件 + +- 列表**设计文件**列可点**查看**(新窗口预览 PDF)或**下载**。 +- 审核前先查看设计文件,确认方案内容。 + +#### 三、审核策划方案 + +1. 找到状态为**待审核**的行,点击行内**审核**。 +2. 弹窗中: + - 选择审核结果**通过**或**退回**。 + - 选**通过**时,需填写**项目编号**。 + - 审核意见(会回显给医生在**审核意见**列看到)。 + +#### 四、批量退回 + +1. 勾选多条**待审核**的方案。 +2. 点击**批量审核**→ 弹窗只允许**退回**,填审核意见。 +3. 点击**确认退回**→ 批量应用。 + +#### 五、修改策划方案 + +- 点击行内**修改**,进入修改页,可改:项目规划(项目方向)、投稿名称、学科方向、形式、项目类别、设计文件、备注。 + +#### 六、结算 + +- 状态为**通过**且**未结算**的行,显示**结算**按钮;点击确认即标记为已结算。 +- 也可勾选多条**通过且未结算**的方案 →**批量结算**。 + +#### 七、注意事项 + +- 审核**通过时需填写项目编号**,退回时无需填。 +- 只有**待审核**状态的方案才有**审核**按钮;**通过**且未结算的才有**结算**按钮。 +- 审核意见会回显给医生,退回时建议写明原因。 + +### Q2. 如何创建项目并分配支持单位 / 执行单位 + +#### 一、新建项目 + +1. 点击左侧菜单**项目管理**→**新建项目**按钮,进入新建页。 +2. **项目信息**: + - 项目名称、项目编号 + - 项目负责人 + - 是否招标项目 + - 项目形式 + - 总场次 / 总期数、总金额(元)、管理费(元) + - 开始时间、结束时间 +3. **角色劳务设置**:为每种会议角色配置劳务金额;可**增加角色**或**删除角色**。 +4. **公告文件**:上传邀请函、支持函、通知、日程。 +5. 底部按钮: + - **保存** → 暂存,不对外发布。 + - **保存并发布公告**→ 保存并发布到公示。 + +#### 二、分配支持单位 / 执行单位 + +**入口:** **项目管理**列表页——单个项目点行内**分配**;或多个项目勾选后点顶部**项目分配**进行批量分配。 + +1. **选择支持单位**:选择一个支持单位。 +2. **添加执行单位**:在表格里**+ 增加执行方**,每行选执行单位 + 填**场次** **金额**(可加多个执行单位,同一项目不能重复选同一执行单位)。 +3. **提交截止(天)**:执行方提交材料的自然日期限。 +4. 页面顶部实时显示**项目总场次 / 已分配场次** **总金额 / 已分配金额 / 可用金额**,**超出会红色告警**,需调整到不超。 +5. 点**保存**完成分配。 + +#### 三、注意事项 + +- 支持单位只能选**一个**;执行单位可**多个**,按**场次 + 金额**分别分配。 +- 已分配场次 / 金额总和**不得超过**项目总场次 / 总金额,否则无法保存。 +- 已结题的项目**不能分配**(行内**分配**置灰,批量会跳过已结题项)。 +- 已禁用的支持单位 / 执行单位仍显示但置灰,不可选。 +- 分配后,执行单位在自己**项目列表**能看到该项目并建会(见执行方手册)。 + +### Q3. 如何审核会议材料并结算 + +> 执行方提交材料后,先到**合规审核**——由合规人员对**劳务材料** **会务材料**分别审核;合规审核通过后,再到**支持方监察**——由支持方对两类材料分别监察;合规审核与支持方监察都通过后,合规人员补充付款凭证、结算、完结。完整的链路:**执行方提交 → 合规审核 → 支持方监察 → 结算 → 完结**。 + +#### 一、进入会议审核 + +1. 点击左侧菜单**会议管理**。 +2. 列表中,处于**待合规审核**状态的会议,行内显示**审核**链接;点击进入会议详情页。 +3. 详情页底部**材料管理**区,会分别显示**审核劳务** **审核会务** **审核全部**按钮。 + +#### 二、审核材料(劳务 / 会务分别审核) + +1. 先切换到**劳务材料** **会务材料**tab,检查执行方上传的材料(参会人、劳务协议、签到表、发票、结算单等)。 +2. 点**审核劳务**/**审核会务**/**审核全部**,弹出审核窗口: + - 对**劳务材料** **会务材料**选 **通过** 或 **拒绝**。 + - 填写审核意见(退回时建议写明原因,将退回执行方整改)。 +3. 点**确定**提交,提示**审核完成**。 + +#### 三、批量审核 + +- 会议列表勾选多个**待合规审核**的会议 →**批量审核**→ 选**通过 / 退回**+ 填意见(退回时意见需填写)→ 确定,逐条返回成功 / 失败明细。 + +#### 四、结算 / 完结 + +1. **结算**:劳务、会务材料都**通过**后,会议进入待结算。点**结算**→ 确认**已上传劳务 / 会务付款凭证**→ 结算完成,会议完结。 + +#### 五、上传付款凭证 / 下载材料 + +- **付款凭证**:详情页**劳务凭证** **会务凭证** 上传(结算前需补充)。 +- **下载材料**:列表行内**会务下载** **劳务下载**打 zip 下载;也可勾选多个会议**批量下载会务 / 批量下载劳务**。 + +#### 六、注意事项 + +- 劳务、会务可独立通过 / 拒绝,互不影响。 +- **拒绝会退回执行方**重新提交,重新提交后再次进入合规审核。 +- 只有劳务、会务**都通过**才能结算;结算前建议先上传付款凭证。 +- 冻结的会议可在**更多 → 解冻**重新放开(解冻后提交截止时间重新计算)。 +- 支持方监察在合规审核通过后流转,见支持方手册。 + +### Q4. 如何审核专家(医生资质) + +> 医生注册后提交资质材料,合规人员审核;审核通过后医生才能登录,看到**我参与的会议** **我报名的项目**,进入完整业务流程。 + +#### 一、进入专家审核 + +1. 点击左侧菜单**专家审核**。 +2. 列表展示:姓名、手机号、工作单位、科室、职称、执业证书、职称证明、审核状态、启用状态、审批时间、审批人。 +3. 可按姓名、手机号、工作单位、审核状态筛选(未提交 / 待审核 / 通过 / 拒绝)。 + +#### 二、查看资质材料 + +- **执业证书** **职称证明**列可点**查看**来预览或**下载**。 +- 审核前先核对证书、证明是否齐全有效。 + +#### 三、审核专家 + +1. 找到状态为**待审核**的专家,点行内**审核**。 +2. 弹窗中选**通过**或**拒绝**,填写审核意见。 + +#### 四、批量审核 + +- 勾选多个专家 →**批量审核**→ 确认后批量审核。 + +#### 五、新建专家 + +- **新建专家**录入医生信息(姓名 / 手机号 / 工作单位 / 科室 / 职称 / 执业证书 / 职称证明 / 身份证 / 银行卡等),**新建即自动通过审核**,并生成登录账号(初始密码 = 手机号,弹窗提示)。 + +#### 六、注意事项 + +- 审核状态:未提交 / 待审核 / 通过 / 拒绝;只有**待审核**需要处理。 +- 未通过前医生不能登录。 +- 新建专家 将 自动通过审核 + 创建登录账号(医生角色)。 + +### Q5. 如何管理支持单位 / 执行单位 + +#### 一、查看单位列表 + +1. 点击左侧菜单**支持单位管理**或**执行单位管理**。 +2. 列表展示:单位名称、单位地址、税号/统一社会信用代码、合作状态(正常 / 禁用)、创建日期、联系人、联系电话。 +3. 可按单位名称、税号/统一社会信用代码、合作状态筛选。 +4. 点行内**查看**弹窗展示单位完整信息。 + +#### 二、管理单位下人员 + +1. 点行内**人员管理**→ 跳转到该单位的人员列表(面包屑显示**… / 单位名**)。 +2. 人员列表展示:姓名、手机号、(执行单位另有**邮箱**列)、企业名称、部门、职务、状态;可按姓名、手机号、企业名称、部门、职务筛选。 +3. 合规人员可对人员执行以下操作: + - **查看**:进入人员详情。 + - **编辑**:改姓名、手机号、部门、职务、状态。 + - **新建人员**:录入子账号(用户名 / 初始密码 / 姓名 / 手机号 / 部门 / 职务 / 状态)。 + - **批量导入**:下载模板 → 按模板填写 → 选择文件导入 → 弹窗逐行展示成功 / 失败明细。 + - **启用 / 禁用**:禁用后该账号无法登录;恢复后重新启用。 + - **重置密码**:一键重置为默认密码 `123456`。 + +#### 三、启用 / 禁用单位 + +- 行内**禁用**:禁用后该企业**主账号无法登录,企业下子账号也将被拦截**。 +- 已禁用单位行内显示**恢复**,点击即恢复为正常。 + +#### 四、注意事项 + +- 合规人员**不能新增 / 编辑 / 批量导入单位**,这些按钮仅后台管理员可见。 +- 禁用单位后,该单位主账号及旗下所有子账号都会被拦截登录,恢复后一并放开。 + +### Q6. 如何查看支持意向 / 执行意向 + +#### 一、进入意向列表 + +点击左侧菜单**支持意向**或**执行意向**。 + +#### 二、筛选 + +- 可按项目编号、意向项目名称、姓名、工作单位、手机号筛选。 + +#### 三、导出 + +- 点**导出**→ 按**当前筛选条件**下载 Excel。 + +#### 四、注意事项 + +- 支持意向(公示页**公益支持**)匿名访客无需登录即可填写;执行意向(公示页**项目执行申请**)需登录后才能填写。 +- **账号状态**用于识别该意向人是否已有账号,便于后续对接;未注册的仅留下姓名 / 单位 / 手机号等联系方式。 +- 当前页面**无审核 / 删除操作**(操作列已关闭),仅提供查看与导出。 + +### Q7. 如何修改个人账号信息(账号管理) + +#### 一、进入账号管理 + +1. 点击左侧菜单**账号管理**。 +2. 页面展示并回显当前账号的**姓名** **手机号**。 + +#### 二、修改姓名 / 手机号 + +1. **姓名**清空无法保存。 +2. 修改**手机号**。 +3. 点**保存**→ 提示**保存成功**。 + +#### 三、修改登录密码 + +1. 填写**原密码**、**新密码**、**确认密码**。 +2. 点**保存**→ 姓名 / 手机号与密码(若填了)分别提交更新。 + + +#### 五、注意事项 + +- **密码留空 = 不修改密码**:三个密码框都留空时,只更新姓名 / 手机号,不影响密码。 +- 只要填了**新密码**,就**必须同时填原密码**,否则无法改密。 + +--- + +## 角色三 · 执行方(执行单位) + + +### 角色说明 + +执行方是承接项目、执行会议的单位(供应商)。账号分两种: + +| 账号类型 | 权限 | +|---|---| +| **主账号** | 查看本单位承接的全部项目;可分配项目、建会、上传材料、人员管理等 | +| **执行人员** | 只能查看被分配的项目;不参与分配 | + +### 菜单概览 + +登录后左侧菜单(执行方角色): + +- 首页 +- 我的项目策划方案(投稿入口) +- 项目列表(承接的项目) +- 会议列表 +- 人员管理(仅主账号可见) +- 消息通知 +- 账号信息 + +### Q1. 如何分配项目(把项目分配给执行人员) + +> **分配**是指**主账号**把承接的项目指派给团队下的**执行人员(子账号)**,由该执行人员负责该项目。 + +#### 一、单个项目分配 + +1. 点击左侧菜单**项目列表**。 +2. 找到目标项目,点击行内**分配**链接。 +3. 弹窗中选择**分配给执行人**(可多选;管理员账号显示但不可选)。 +4. 点击**确定**,完成分配。 + +#### 二、批量分配 + +1. 在列表首列勾选多个项目。 +2. 点击上方工具栏**项目分配**按钮。 +3. 弹窗中显示**已选项目数**与**项目编号预览**,选择执行人(可多选)。 +4. 点击**确定**,批量分配完成。结果按项目逐条反馈(成功 N / 总数,失败项列出原因)。 + +#### 三、注意事项 + +- 分配对象是**执行人员**——来自**人员管理**中本单位团队下的**子账号**。 +- 重新分配会**覆盖**该项目原已分配的执行人员。 +- 执行人员登录后,列表页**不会显示** **项目分配**按钮与勾选列,只能查看自己被分配的项目。 +- 已结题的项目不再显示**分配**入口。 + +### Q2. 如何建会 + +> **建会**是指为承接的项目创建一场具体的会议(第 N 期)。主账号与执行人员只要能看到项目,都可建会。 + +#### 一、进入建会 + +1. 点击左侧菜单**项目列表**,找到要建会的项目。 +2. 点击行内**建会**链接,进入**新建会议**页。 + +**建会入口有两个限制:** + +- **场次上限**:某项目已建会议数达到分配场次时,**建会**按钮置灰。 +- **结题项目**:已结题的项目不显示**建会**入口。 + +#### 二、填写会议信息 + +填写期数、会议开始时间、会议结束时间、会议地点、备注。 + +#### 三、保存 + +点击**保存**, 创建成功,自动跳转到会议列表。 + +#### 四、注意事项 + +- **总场次/总期数**对执行方是分配给本单位的场次口径。 + +### Q3. 如何上传并提交会议材料 + +> 会议材料分**劳务材料** **会务材料**两类,独立上传、独立提交、独立审核。完整审核链路:**执行方提交 → 合规审核 → 支持方监察**。 + +#### 一、进入材料管理 + +1. 点击左侧菜单**会议列表**,找到要上传材料的会议。 +2. 点击行内**上传材料**,进入会议详情页的**材料管理**区。 + +#### 二、上传劳务材料 + +1. **参会人管理**:点**+ 新增参会人**按手机号添加医生(姓名 / 手机号 / 医院 / 科室 / 职称 / 银行卡 / 身份证等),或**批量导入**。添加后可**邀请参会** **推送电子签**让医生完成签署。 +2. **劳务协议**:点**下载目录**拿空目录模板,放入各参会人签好的协议后压缩,点**上传协议**回填(按**序号_姓名**逐个对应)。 +3. **专家照片**:同上。 +4. **劳务材料**: + - 企业权益 + - 签到表(会议现场签到表,带定位框,可扫码拍照) + - 前全景(会议现场前全景,带定位框,扫码拍照) + - 后全景(会议现场后全景,扫码拍照) +5. **日程海报**:上传会议日程海报。 + +页面底部自动汇总**劳务费合计**。 + +#### 三、上传会务材料 + +1. **发票表**:上传含发票的材料后,系统自动识别发票号、开票时间、金额并汇总展示。 +2. **会务材料**:物料制作、酒店、大交通、小交通、执行费、设计费、其他、总结算单、总发票。 +3. **打包上传**:点**下载目录**拿空目录模板,把各类材料放进对应子目录后压缩成 zip,点**上传会务材料**一次性回填(单个目录多文件会自动打包成一个 zip)。 + +页面底部自动汇总**会务费合计**,**上传总发票后以总发票金额为准**。 + +#### 四、提交材料 + +上传完成后,点底部提交按钮: + +- **提交劳务**:仅提交劳务材料。 +- **提交会务**:仅提交会务材料。 +- **提交全部**:劳务、会务一起提交。 + +提交前系统会**自动保存**所有未保存的内容,然后进入审核流程,提示**材料已提交,待合规审核**。 + +#### 五、查看审核进度 + +- 详情页右侧**材料审核**时间轴,按轮次记录**执行方提交 → 合规审核 → 支持方监察**的通过 / 拒绝结果。 +- 被拒绝的那类材料会退回,需重新修改上传后再提交。 + +#### 六、注意事项 + +- 只有**已执行**且**未冻结**的会议才能提交材料;未执行会议不能提交。 +- 材料一经提交进入审核,对应材料即**锁定**,不能再改(除非被拒绝退回)。 +- **保存**按钮仅在材料未提交 / 被退回时可用;劳务、会务都进入审核后锁定。 +- 劳务 / 会务可独立提交、独立被审,互不影响。 + +### Q4. 如何管理团队人员(执行人员) + + +#### 一、进入人员管理 + +1. 点击左侧菜单**人员管理**(仅主账号可见,执行人员无此菜单)。 +2. 列表展示:姓名、手机号、所属公司、部门、职务、角色、状态。 + - 角色:`管理员`(主账号)/ `执行人员`(子账号)。 + - 状态:`正常` / `禁用`。 +3. 可按姓名、手机号、所属公司、部门、职务筛选。 + +#### 二、新建人员(执行人员 / 子账号) + +1. 点击**新建人员**→ 进入独立新建页。 +2. 填写字段: + - 用户名(子账号登录用户名) + - 初始密码 + - 姓名、手机号 + - 所属公司(由主账号注册时自动带出,只读不可改) + - 部门、职务、状态(正常 / 禁用) +3. 点击**保存**。新建成功后弹窗显示子账号**账号 + 初始密码**(仅本次显示,请记录后告知使用人)。 + +#### 三、编辑人员 + +- 列表**更多 → 编辑**进入编辑页;可改姓名、手机号、部门、职务、状态,**用户名和密码不可改**。 + +#### 四、批量导入 + +1. 点击**批量导入**→**批量导入模板下载**下载 Excel 模板。 +2. 按模板填写后选择文件 →**开始导入**。 +3. 导入完成后弹窗逐行展示成功 / 失败明细(含失败原因)。 + +#### 五、重置密码 / 禁用 / 恢复 + +- **重置密码**:一键重置为默认密码 `123456`。 +- **禁用 / 恢复**:禁用后该账号无法登录;恢复后重新启用。 +- 主账号**不能**禁用自己。 + +#### 六、注意事项 + +- 已禁用的执行人员**不会**出现在**项目分配**的候选列表里。 +- 新建时填的用户名 / 密码,就是该执行人员登录系统的账号。 + +--- + +## 角色四 · 支持方 + +### 角色说明 + +支持方是项目的支持单位。支持方账号分两种: + +| 账号类型 | 权限 | +|---|---| +| **主账号** | 查看本单位全部项目;可进行项目分配、项目评价、人员管理等操作 | +| **监察员子账号** | 只能查看被主账号分配的项目;仅查看,**不参与分配** | + +### 菜单概览 + +登录后左侧菜单(支持方角色): + +- 首页 +- 我的项目 +- 会议列表 +- 人员管理(仅主账号可见) +- 消息通知 +- 账号信息 + +### Q1. 如何查看并分配项目? + +#### 一、查看项目 + +1. 点击左侧菜单**我的项目**,进入项目列表页。 + +2. 列表上方支持按以下条件筛选: + - 项目编号 + - 项目名称 + - 项目时间 + - 是否结题(已结题 / 未结题) + +3. 列表展示字段:项目编号、项目名称、总场次、已执行、未执行、总金额、可用金额、劳务费、会务费、项目开始时间、项目结束时间、是否结题、执行单位评价(支持方)。 + +5. **权限差异**: + - 主账号:可查看本单位全部项目。 + - 监察员子账号:只能看到被分配给自己负责的项目。 + +#### 二、分配项目(把项目分配给监察员) + +> **分配**是指**主账号**把项目指派给团队下的**监察员子账号**,由该子账号负责该项目后续的监察工作。子账号本身不能发起分配。 + +**单个项目分配:** + +1. 在**我的项目**列表,找到目标项目,点击行内**分配**链接。 +2. 弹窗中选择**分配给监察员**(可多选)。 +3. 点击**确定**,完成分配。 + +**批量分配:** + +1. 在列表首列勾选多个项目。 +2. 点击上方工具栏**项目分配**按钮。 +3. 弹窗中选择监察员(可多选)。 +4. 点击**确定**,批量分配完成。 + +**注意事项:** + +- 监察员候选来自**人员管理**中本单位团队下的**子账号**;已禁用的账号不会出现在候选列表。 +- 重新分配会**覆盖**该项目原已分配的监察员。 +- 监察员子账号登录后,列表页**不会显示** **项目分配**按钮与勾选列,只能查看自己被分配的项目。 + +### Q2. 如何给项目打分(执行单位评分)? + +#### 一、给单个项目打分 + +1. 进入**我的项目**列表,找到要评价的项目。 +2. 点击该行操作列的**项目评价**链接,弹出**执行单位评分**弹窗。 +3. 弹窗内按 4 个维度分别打分(每项 1~5 分): + - 履约质量 —— 服务 / 活动效果达标度 + - 时效响应 —— 执行 & 售后响应速度 + - 配合度 —— 沟通配合 & 问题处理 + - 合规安全 —— 流程合规 & 无安全事故 +4. 填好 4 项分数后点击**确定**,即可完成打分。 + +#### 二、查看已评分 + +- 列表**执行单位评价(支持方)**列显示的就是该项目执行单位的平均分。 +- 点击该数字,可弹窗查看 4 个维度的明细得分与平均分。 + +#### 三、注意事项 + +- 重新打分会**覆盖**自己之前对该项目的评分(再次打开时会回显上次的分数)。 +- 打分对象是**执行单位**,不是项目本身。 + +### Q3. 如何管理团队人员(监察员) + +> 支持方主账号可维护本单位的团队人员,其中**子账号就是监察员**。此菜单仅主账号可见。 + +#### 一、进入人员管理 + +1. 点击左侧菜单**人员管理**(仅主账号可见,子账号无此菜单)。 +2. 列表展示:账号、姓名、手机号、所属公司、部门、职务、角色、状态、创建时间。 + - 角色:`管理员`(主账号)/ `监察员`(子账号)。 + - 状态:`正常` / `禁用`。 +3. 可按姓名、手机号、工作单位、部门、状态筛选。 + +#### 二、新建人员(子账号 / 监察员) + +1. 点击**新建人员**按钮。 +2. 填写字段: + - 用户名(子账号登录用户名) + - 初始密码 + - 姓名、手机号、部门、职务、状态 + - **所属公司**由主账号注册时自动带出,不可修改 +3. 点击**保存**。新建成功后弹窗会显示刚创建的子账号**账号 + 初始密码**(密码仅本次显示,请记录后告知使用人)。 + +#### 三、批量导入 + +1. 点击**批量导入**→**批量导入模板下载**下载 Excel 模板。 +2. 按模板填写后,选择文件并**开始导入**。 +3. 导入完成后弹窗逐行展示成功 / 失败列表。 + +#### 四、编辑 / 禁用 / 删除 / 重置密码 + +行内操作列支持: + +- **查看 / 编辑**:编辑可改姓名、手机号、部门、职务、状态;用户名和密码不可改。 +- **重置密码**:一键重置为默认密码 `123456`。 +- **禁用 / 恢复**:禁用后该账号无法登录;恢复后重新启用。 +- **删除**:不可恢复,请谨慎操作。 + +#### 五、注意事项 + +- 主账号**不能**禁用 / 删除自己。 +- 已禁用的监察员**不会**出现在**项目分配**的候选列表里。 +- 新建人员时填的用户名 / 密码,就是该监察员登录系统的账号。 + +### Q4. 如何监察会议 + +> **监察**是指支持方对执行方提交的会议材料(劳务 / 会务)的审核。完整审核链路:执行方提交材料 → 合规审核(由合规人员做)→ 支持方监察。支持方监察通过后,该会议材料才算审核完成。 + +#### 一、进入会议监察 + +1. 点击左侧菜单**会议列表**。 +2. 列表中,处于**待监察**状态的会议,操作列会显示**监察**按钮;其余会议只有**查看**。 + - 支持方主账号和监察员都能看到监察入口。 + +#### 二、监察会议材料 + +1. 点击**监察**进入会议详情页。 +2. 详情页底部按材料分类显示监察按钮:**监察劳务** / **监察会务** / **监察全部**(哪一类到了待监察状态,对应按钮才亮)。 +3. 点击按钮,弹出**监察意见**窗口: + - 对**劳务材料** **会务材料**分别选择 **通过** 或 **拒绝**。 + - 填写审核意见(拒绝时建议说明原因,将退回执行方整改)。 + +#### 三、查看审核轨迹 + +- 会议详情页右侧**材料审核**时间轴,会按轮次记录每一次**提交 → 合规 → 监察**的通过 / 拒绝结果,可追溯历史。 + +#### 四、注意事项 + +- 只有合规审核通过后的会议,才会到支持方监察这一步。 +- **拒绝**会退回执行方重新提交,重新提交后再次进入合规审核。 +- 系统按**项目分配的支持单位**校验权限,支持方只能监察自己单位项目下的会议。 +- 劳务 / 会务可独立通过 / 拒绝,互不影响。 + +--- + +## 角色五 · 项目负责人 + +> 本手册面向**项目负责人**角色。内容基于系统实际页面整理。 + +### 角色说明 + +项目负责人是**只读账号**,用于查看被指定为自己负责的项目及其执行情况。 + +- 只能看到**自己负责的项目**,及其项目下的**会议** +- 不提供任何写操作(新建 / 编辑 / 分配 / 审核 / 结算 / 评分 / 删除等) +- 项目负责人由合规人员在**新建项目**时指定 + +### 菜单概览 + +登录后左侧菜单(项目负责人角色): + +- 首页 +- 项目列表 +- 会议列表 +- 账号信息 + +### Q1. 如何查看我负责的项目 / 会议 + +> 项目负责人只能查看被指定为自己负责的项目及其会议,不能做任何写操作。 + +#### 一、查看我负责的项目 + +- 点击左侧菜单**项目列表**。 + +#### 二、查看项目详情 + +- 点击项目名称或行内**查看**→ 进入项目详情页 + +#### 三、看评分 + +- 点击**执行单位评分(合规 / 支持)**列 → 弹窗查看该项目的 4 维度评分明细与平均分。 + +#### 四、查看会议列表 + +- 点击左侧菜单**会议列表**(或从项目列表点场次数字跳入)。 + +#### 五、查看会议详情 + +- 点击会议名称或行内**查看**→ 进入会议详情页。 + +#### 六、注意事项 + +- 项目负责人是**纯只读**账号:项目列表、会议列表、详情页均不显示任何**新建 / 编辑 / 分配 / 审核 / 结算 / 评分 / 删除**等写操作按钮。 +- 只能看到**项目负责人是自己**的项目。 +- **项目负责人**在新建项目时由合规人员指定 + +--- + +## 角色六 · 后台管理员 + + +### 角色说明 + +后台管理员是平台的**超级管理员**,负责系统级维护与全局业务管理: + +- **系统账号**:用户管理、角色管理 +- **基础数据**:科室、职称、项目类别 +- **网站内容**:协议、专项计划、劳务协议模板 +- **业务权限**:项目管理、会议管理、专家管理、支持/执行单位管理等 + +### 菜单概览 + +登录后左侧菜单: + +- 工作台 +- 用户管理 +- 角色管理 +- 项目管理 +- 会议管理 +- 资料库管理(子菜单:专家管理 / 支持单位管理 / 执行单位管理 / 科室管理 / 职称管理 / 项目类别管理) +- 网站管理(子菜单:协议管理 / 专项计划管理 / 劳务协议配置) +- 消息通知 +- 账号信息 + +### Q1. 如何维护基础数据(科室 / 职称 / 项目类别) + +#### 一、进入与列表 + +1. 点击左侧菜单**资料库管理**→**科室管理**/**职称管理**/**项目类别管理**。 +2. 列表展示:ID(项目类别页为**序号**)、名称、排序、状态(启用 / 停用)、创建时间。 +3. 可按名称、状态筛选。 + +#### 二、新增 + +1. 点**新增科室 / 新增职称 / 新增类别**按钮。 +2. 弹窗填写: + - **名称**:科室名称 / 职称名称 / 类别名称。 + - **排序**(数字越小越靠前)。 +3. 点**保存**→ 新增成功(默认启用)。 + +#### 三、编辑 + +1. 点行内**编辑**。 +2. 可改名称、排序,以及**状态**(启用 / 停用)。 +3. 点**保存**。 + +#### 四、停用 / 启用 + +- 行内**停用** / **启用**切换;停用后该项不再出现在前台的选项里。 + +#### 五、删除 + +- 点行内**删除**→ 确认**该操作不可恢复**→ 删除。 + + +### Q2. 如何管理用户(系统账号) + +#### 一、查看与筛选 + +1. 点击左侧菜单**用户管理**。 +2. 列表展示:用户 ID、账号、姓名、角色、单位名称、手机号、邮箱、状态(启用 / 停用)、创建时间。 +3. 可按用户账号、姓名、单位名称、角色、状态筛选。 + +#### 二、新建用户(按角色) + +1. 点**新建用户**按钮。 +2. 先选**角色**( 后台管理员 / 合规人员 / 评审专家 / 执行人 / 支持方 / 项目负责人)。 +3. 填通用字段。 +4. 按所选角色填附加字段。 +5. 点**保存**→ 新建成功。 + +#### 三、编辑用户 + +1. 点行内**编辑**。 +2. 可改姓名、角色、手机号、邮箱等。 +3. 点**保存**。 + +#### 四、重置密码 + +- 点行内**重置密码**→ 确认 → 重置为默认密码 `123456`。 + +#### 五、停用 / 启用 + +- 点行内**停用** / **启用**切换;停用后该账号无法登录。 + +#### 六、删除 + +- 点行内**删除**→ 弹强警告 → 确认删除。 +- **不能删除自己**(自己账号的**删除**置灰)。 + + +### Q3. 如何管理专项计划 + +#### 一、进入与列表 + +1. 点击左侧菜单**网站管理**→**专项计划管理**。 +2. 列表展示:ID、标题、类型、排序、状态(启用 / 停用)、更新时间。 +3. 可按标题、类型、状态筛选。 + +#### 二、新建专项计划 + +1. 点**新增**进入新建页。 +2. 填写字段: + - **标题**。 + - **内容类型**: + - 富文本 → 在**正文**富文本编辑器里录入内容。 + - 上传文件 → 上传文件作为内容。 + - **排序**(数字越小越靠前)。 + - **状态**(启用 / 停用)。 + - **备注**(内部备注)。 +3. 点**保存**→ 返回列表。 + +#### 三、编辑 + +- 列表点**编辑**进入编辑页,可改全部字段。 +- 切换内容类型会**清空另一字段**(富文本 → 文件会清空正文,反之清空文件)。 + +#### 四、预览 + +- 列表点**预览**→ 新窗口打开门户的专项计划详情页。 +- 已停用的项**预览**置灰。 + +#### 五、删除 + +- 列表点**删除**→ 确认 → 删除。 + +#### 六、注意事项 + +- 专项计划对外展示在门户,预览打开的是公开详情页。 +- 排序数字越小越靠前。 diff --git a/shouce/sponsor.md b/shouce/sponsor.md new file mode 100644 index 0000000..b1efcf3 --- /dev/null +++ b/shouce/sponsor.md @@ -0,0 +1,172 @@ +# 支持方用户手册 + +> 本手册面向「支持方」角色(申办方 / 支持单位)。内容基于系统实际页面整理。 + +## 角色说明 + +支持方是项目的发起 / 支持单位。支持方账号分两种: + +| 账号类型 | 权限 | +|---|---| +| **主账号** | 查看本单位全部项目;可进行项目分配、项目评价、人员管理等操作 | +| **监察员子账号** | 只能查看被主账号分配的项目;仅查看,**不参与分配** | + +## 菜单概览 + +登录后左侧菜单(支持方角色): + +- 首页 +- 我的项目 +- 会议列表 +- 人员管理(仅主账号可见) +- 消息通知 +- 账号信息 + +--- + +## Q1. 如何查看并分配项目? + +### 一、查看项目 + +1. 登录系统进入支持方「**首页**」,顶部有 5 张 KPI 卡:项目总数量、已结算的项目、已结题的项目、已执行会议、未执行会议。点击「项目总数量」卡片可快速进入项目列表。 + +2. 点击左侧菜单「**我的项目**」,进入项目列表页。 + +3. 列表上方支持按以下条件筛选: + - 项目编号(模糊) + - 项目名称(模糊) + - 项目时间(起止日期范围) + - 是否结题(已结题 / 未结题) + +4. 列表展示字段:项目编号、项目名称、总场次、已执行、未执行、总金额、可用金额、劳务费、会务费、项目开始时间、项目结束时间、是否结题、执行单位评价(支持方)。 + +5. **权限差异**: + - 主账号:可查看本单位全部项目。 + - 监察员子账号:只能看到被分配给自己负责的项目。 + +### 二、分配项目(把项目分配给监察员) + +> 「分配」是指**主账号**把项目指派给团队下的「监察员子账号」,由该子账号负责该项目后续的监察工作。子账号本身不能发起分配。 + +**单个项目分配:** + +1. 在「我的项目」列表,找到目标项目,点击行内「**分配**」链接。 +2. 弹窗中选择「分配给监察员」(下拉支持按姓名 / 手机号搜索,可多选)。 +3. 点击「确定」,完成分配。 + +**批量分配:** + +1. 在列表首列勾选多个项目。 +2. 点击上方工具栏「**项目分配**」按钮。 +3. 弹窗中会显示「已选项目数」与「项目编号预览」,选择监察员(可多选)。 +4. 点击「确定」,批量分配完成。结果会按项目逐条反馈(成功 N / 总数,失败项会列出原因)。 + +**注意事项:** + +- 监察员候选来自「人员管理」中本单位团队下的**子账号**;已禁用的账号不会出现在候选列表。 +- 重新分配会**覆盖**该项目原已分配的监察员。 +- 监察员子账号登录后,列表页**不会显示**「项目分配」按钮与勾选列,只能查看自己被分配的项目。 + +--- + +## Q2. 如何给项目打分(执行单位评分)? + +> 「打分」是指支持方对项目的**执行单位**进行评价,从 4 个维度各打 1~5 分,系统自动算平均分。评分结果会在列表「执行单位评价(支持方)」列显示。 + +### 一、给单个项目打分 + +1. 进入「我的项目」列表,找到要评价的项目。 +2. 点击该行操作列的「**项目评价**」链接,弹出「执行单位评分」弹窗。 +3. 弹窗内按 4 个维度分别打分(每项 1~5 分): + - 履约质量 —— 服务 / 活动效果达标度 + - 时效响应 —— 执行 & 售后响应速度 + - 配合度 —— 沟通配合 & 问题处理 + - 合规安全 —— 流程合规 & 无安全事故 +4. 填好 4 项分数后点击「确定」,系统提示「评分完成,平均分:X.X」并刷新列表。 + +### 二、查看已评分 + +- 列表「执行单位评价(支持方)」列显示的就是该项目执行单位的平均分。 +- 点击该数字,可弹窗查看 4 个维度的明细得分与平均分。 + +### 三、注意事项 + +- 重新打分会**覆盖**自己之前对该项目的评分(再次打开时会回显上次的分数)。 +- 打分对象是「执行单位」(承接项目执行的单位),不是项目本身。 + +--- + +## Q3. 如何管理团队人员(监察员) + +> 支持方主账号可以维护本单位的团队人员,其中**子账号就是「监察员」**——也就是 Q1「分配项目」里可被分配的对象。此菜单仅主账号可见。 + +### 一、进入人员管理 + +1. 点击左侧菜单「**人员管理**」(仅主账号可见,子账号无此菜单)。 +2. 列表展示:账号、姓名、手机号、所属公司、部门、职务、角色、状态、创建时间。 + - 角色:`管理员`(主账号)/ `监察员`(子账号)。 + - 状态:`正常` / `禁用`。 +3. 可按姓名、手机号、工作单位、部门、状态筛选。 + +### 二、新建人员(子账号 / 监察员) + +1. 点击「**新建人员**」按钮。 +2. 填写字段: + - 用户名(子账号登录用户名) + - 初始密码 + - 姓名、手机号、部门、职务、状态(正常 / 禁用) + - 「所属公司」由主账号注册时自动带出,不可修改 +3. 点击「保存」。新建成功后弹窗会显示刚创建的子账号**账号 + 初始密码**(密码仅本次显示,请记录后告知使用人)。 + +### 三、批量导入 + +1. 点击「**批量导入**」→「批量导入模板下载」下载 Excel 模板。 +2. 按模板填写后,选择文件并「开始导入」。 +3. 导入完成后弹窗逐行展示成功 / 失败明细(含失败原因)。 + +### 四、编辑 / 禁用 / 删除 / 重置密码 + +行内操作列支持: + +- **查看 / 编辑**:编辑可改姓名、手机号、部门、职务、状态;用户名和密码不可改。 +- **重置密码**:一键重置为默认密码 `123456`。 +- **禁用 / 恢复**:禁用后该账号无法登录;恢复后重新启用。 +- **删除**:不可恢复,请谨慎操作。 + +### 五、注意事项 + +- 主账号**不能**禁用 / 删除自己(避免把自己锁在系统外)。 +- 已禁用的监察员**不会**出现在「项目分配」的候选列表里(Q1)。 +- 新建人员时填的用户名 / 密码,就是该监察员登录系统的账号。 + +--- + +## Q4. 如何监察会议 + +> 「监察」是指支持方对执行方提交的会议材料(劳务 / 会务)进行**二审**。完整审核链路:执行方提交材料 → 合规审核(一审,由合规管理员做)→ 支持方监察(二审)。支持方监察通过后,该会议材料才算审核完成。 + +### 一、进入会议监察 + +1. 点击左侧菜单「**会议列表**」。 +2. 列表中,处于「待监察」状态的会议,操作列会显示「**监察**」按钮;其余会议只有「查看」。 + - 支持方主账号和监察员都能看到监察入口。 + +### 二、监察会议材料 + +1. 点击「监察」进入会议详情页。 +2. 详情页底部按材料轨显示监察按钮:**监察劳务** / **监察会务** / **监察全部**(哪一轨到了待监察状态,对应按钮才亮)。 +3. 点击按钮,弹出「监察意见」窗口: + - 对「劳务材料」「会务材料」分别选择 **通过** 或 **拒绝**。 + - 填写审核意见(拒绝时建议说明原因,将退回执行方整改)。 +4. 点击「确定」提交,系统提示「审核完成」。 + +### 三、查看审核轨迹 + +- 会议详情页右侧「材料审核」时间轴,会按轮次记录每一次「提交 → 合规 → 监察」的通过 / 拒绝结果,可追溯历史。 + +### 四、注意事项 + +- 监察是**二审**:只有合规审核(一审)通过后的会议,才会到支持方监察这一步。 +- 「拒绝」会退回执行方重新提交,重新提交后再次进入合规审核,重新走一轮。 +- 系统按「项目分配的支持单位」校验权限,支持方只能监察自己单位项目下的会议。 +- 劳务 / 会务两轨可独立通过 / 拒绝,互不影响。