瀏覽代碼

个人素养提升 添加暂存以及其他优化功能

徐滕 1 周之前
父節點
當前提交
af3766d520

+ 1 - 1
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/service/WorkKnowledgeBasePointExchangeService.java

@@ -570,7 +570,7 @@ public class WorkKnowledgeBasePointExchangeService extends CrudService<WorkKnowl
     @Transactional(readOnly = false)
     public String cancelLastExchange() {
         // 1. 查询最近7天内的兑换扣减记录(按创建时间倒序)
-        Date since = new Date(System.currentTimeMillis() - 7L * 24 * 60 * 60 * 1000);
+        Date since = new Date(System.currentTimeMillis() - 15L * 24 * 60 * 60 * 1000);
         List<WorkKnowledgeBasePointDetail> recentRecords = pointDetailDao.findExchangeRecordsAfter(since);
         if (recentRecords == null || recentRecords.isEmpty()) {
             return "未找到可取消的兑换记录";

+ 18 - 5
src/main/java/com/jeeplus/modules/workqualityimprovement/web/WkQualityImprovementController.java

@@ -209,6 +209,7 @@ public class WkQualityImprovementController extends BaseController {
 
 	/**
 	 * 为任务被选人发送通知记录
+	 * 如果已存在相同的通知(同任务+同用户+status=0),则只更新发送时间,避免重复发送
 	 */
 	private void sendTaskNotify(WkQualityImprovementTask task, List<String> userIds) {
 		String title = "您有一条【" + task.getTitle() + "】待填写";
@@ -219,12 +220,24 @@ public class WkQualityImprovementController extends BaseController {
 			if (user == null) {
 				continue;
 			}
-			WorkProjectNotify notify = UtilNotify.saveNotify(
-					task.getId(), null, companyId, title, content, "202", "0", "待填写", ""
+			// 先查询是否已存在相同的通知(同任务+同用户+status=0未读)
+			List<WorkProjectNotify> existingList = workProjectNotifyService.getByNotifyIdAndNotifyUserAndTitle(
+					title, task.getId(), userId
 			);
-			notify.setUser(user);
-			notify.setId("");
-			workProjectNotifyService.save(notify);
+			if (existingList != null && !existingList.isEmpty()) {
+				// 已存在通知,只更新发送时间(update_date)
+				WorkProjectNotify existing = existingList.get(0);
+				existing.setUpdateDate(new Date());
+				workProjectNotifyService.save(existing);
+			} else {
+				// 不存在,创建新通知
+				WorkProjectNotify notify = UtilNotify.saveNotify(
+						task.getId(), null, companyId, title, content, "202", "0", "待填写", ""
+				);
+				notify.setUser(user);
+				notify.setId("");
+				workProjectNotifyService.save(notify);
+			}
 		}
 	}
 

+ 212 - 0
src/main/resources/mysqlDateBase/work_quality_improvement.sql

@@ -0,0 +1,212 @@
+-- =====================================================
+-- 员工素养提升计划表
+-- 功能说明:
+-- 1. 办公室创建素养提升任务,选择填写人员
+-- 2. 通过Activiti工作流发送待办给被选人
+-- 3. 被选人填写个人素养提升计划表并提交
+-- 4. 提交后不可修改,支持列表导出和个人表格导出
+-- =====================================================
+
+-- 1. 素养提升任务表(办公室创建)
+CREATE TABLE IF NOT EXISTS `wk_quality_improvement_task` (
+  `id` VARCHAR(64) NOT NULL COMMENT '主键ID',
+  `title` VARCHAR(200) NOT NULL COMMENT '活动标题',
+  `year` VARCHAR(20) NOT NULL COMMENT '活动年份',
+  `description` TEXT COMMENT '活动描述',
+  `status` VARCHAR(2) DEFAULT '0' COMMENT '状态(0:草稿 1:已发送 2:已截止)',
+  `process_instance_id` VARCHAR(64) DEFAULT NULL COMMENT 'Activiti流程实例ID',
+  `office_id` VARCHAR(64) DEFAULT NULL COMMENT '创建部门ID',
+  `office_name` VARCHAR(200) DEFAULT NULL COMMENT '创建部门名称',
+  `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
+  `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
+  `update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
+  `update_date` DATETIME DEFAULT NULL COMMENT '更新时间',
+  `remarks` VARCHAR(255) DEFAULT NULL COMMENT '备注信息',
+  `del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标记(0:正常 1:删除)',
+  PRIMARY KEY (`id`),
+  KEY `idx_status` (`status`),
+  KEY `idx_del_flag` (`del_flag`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='素养提升任务表';
+
+-- 2. 素养提升个人记录表(被选人填写)
+CREATE TABLE IF NOT EXISTS `wk_quality_improvement_record` (
+  `id` VARCHAR(64) NOT NULL COMMENT '主键ID',
+  `task_id` VARCHAR(64) NOT NULL COMMENT '关联任务ID',
+  `task_title` VARCHAR(200) DEFAULT NULL COMMENT '任务标题(冗余)',
+  `task_year` VARCHAR(20) DEFAULT NULL COMMENT '任务年份(冗余)',
+  `user_id` VARCHAR(64) NOT NULL COMMENT '填写人ID',
+  `user_name` VARCHAR(100) DEFAULT NULL COMMENT '姓名(冗余)',
+  `office_name` VARCHAR(200) DEFAULT NULL COMMENT '部门(冗余)',
+  `position` VARCHAR(100) DEFAULT NULL COMMENT '岗位',
+  `work_years` VARCHAR(20) DEFAULT NULL COMMENT '入职年限',
+  `growth_stage` VARCHAR(50) DEFAULT NULL COMMENT '当前成长阶段',
+  `weakness_goal` TEXT COMMENT '短板与不足/总体目标',
+  -- 专业实操能力提升(4个方向)
+  `score_mapping` INT DEFAULT NULL COMMENT '识图/算量/建模 评分(1-5)',
+  `plan_mapping` TEXT COMMENT '识图/算量/建模 目标措施',
+  `score_pricing` INT DEFAULT NULL COMMENT '清单/定额计价 评分(1-5)',
+  `plan_pricing` TEXT COMMENT '清单/定额计价 目标措施',
+  `score_change` INT DEFAULT NULL COMMENT '变更/签证/索赔/争议处理 评分(1-5)',
+  `plan_change` TEXT COMMENT '变更/签证/索赔/争议处理 目标措施',
+  `score_process` INT DEFAULT NULL COMMENT '全过程业务能力 评分(1-5)',
+  `plan_process` TEXT COMMENT '全过程业务能力 目标措施',
+  -- 数字化与办公能力提升(3个方向)
+  `score_ccpm` INT DEFAULT NULL COMMENT 'CCPM系统全流程操作 评分(1-5)',
+  `plan_ccpm` TEXT COMMENT 'CCPM系统 目标措施',
+  `score_software` INT DEFAULT NULL COMMENT '广联达/未来/博威等软件 评分(1-5)',
+  `plan_software` TEXT COMMENT '广联达等软件 目标措施',
+  `score_ai` INT DEFAULT NULL COMMENT 'AI辅助工具应用 评分(1-5)',
+  `plan_ai` TEXT COMMENT 'AI辅助工具 目标措施',
+  -- 学习考证与知识更新
+  `engineer_status` VARCHAR(20) DEFAULT NULL COMMENT '造价工程师状态(备考中/已通过/已取得)',
+  `engineer_plan` TEXT COMMENT '造价工程师具体计划',
+  `engineer_deadline` VARCHAR(50) DEFAULT NULL COMMENT '造价工程师完成时限',
+  `training_types` VARCHAR(200) DEFAULT NULL COMMENT '培训类型(多选逗号分隔)',
+  `training_direction` TEXT COMMENT '培训方向',
+  `training_deadline` VARCHAR(50) DEFAULT NULL COMMENT '培训完成时限',
+  `regulation_level` VARCHAR(20) DEFAULT NULL COMMENT '清单/定额/新规掌握程度',
+  `regulation_deadline` VARCHAR(50) DEFAULT NULL COMMENT '新规掌握完成时限',
+  `case_count` INT DEFAULT NULL COMMENT '案例篇数',
+  `insight_count` INT DEFAULT NULL COMMENT '心得篇数',
+  `paper_count` INT DEFAULT NULL COMMENT '论文篇数',
+  `output_difficulty` TEXT COMMENT '输出困难说明',
+  `output_deadline` VARCHAR(50) DEFAULT NULL COMMENT '输出完成时限',
+  -- 沟通服务与业务开拓能力提升(5个方向)
+  `score_comm_client` INT DEFAULT NULL COMMENT '与甲方/施工单位沟通 评分(1-5)',
+  `plan_comm_client` TEXT COMMENT '与甲方/施工单位沟通 目标措施',
+  `score_comm_writing` INT DEFAULT NULL COMMENT '书面表达/底稿/报告撰写 评分(1-5)',
+  `plan_comm_writing` TEXT COMMENT '书面表达 目标措施',
+  `score_comm_response` INT DEFAULT NULL COMMENT '客户需求响应与关系维护 评分(1-5)',
+  `plan_comm_response` TEXT COMMENT '客户需求响应 目标措施',
+  `score_comm_cross` INT DEFAULT NULL COMMENT '跨专业贯通 评分(1-5)',
+  `plan_comm_cross` TEXT COMMENT '跨专业贯通 目标措施',
+  `score_comm_expand` INT DEFAULT NULL COMMENT '主动开拓/洽谈业务能力 评分(1-5)',
+  `plan_comm_expand` TEXT COMMENT '主动开拓 目标措施',
+  -- 底部总结
+  `core_advantage` TEXT COMMENT '核心优势与提升思路',
+  -- 流程与状态
+  `process_instance_id` VARCHAR(64) DEFAULT NULL COMMENT 'Activiti流程实例ID',
+  `submit_status` VARCHAR(2) DEFAULT '0' COMMENT '提交状态(0:未填写 1:已提交)',
+  `submit_date` DATETIME DEFAULT NULL COMMENT '提交时间',
+  `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
+  `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
+  `update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
+  `update_date` DATETIME DEFAULT NULL COMMENT '更新时间',
+  `remarks` VARCHAR(255) DEFAULT NULL COMMENT '备注信息',
+  `del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标记(0:正常 1:删除)',
+  PRIMARY KEY (`id`),
+  KEY `idx_task_id` (`task_id`),
+  KEY `idx_user_id` (`user_id`),
+  KEY `idx_submit_status` (`submit_status`),
+  KEY `idx_process_instance_id` (`process_instance_id`),
+  KEY `idx_del_flag` (`del_flag`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='素养提升个人记录表';
+
+-- =====================================================
+-- 3. 字典数据:当前成长阶段(growth_stage)
+-- 说明:在sys_dict表中插入成长阶段选项,前端下拉框和后端导出均从字典读取
+-- 使用方式:
+--   JSP: <c:forEach items="${fns:getDictList('growth_stage')}" var="dict">
+--   Java: DictUtils.getDictList("growth_stage")
+-- =====================================================
+INSERT INTO `sys_dict` (`id`, `value`, `label`, `type`, `description`, `sort`, `parent_id`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`, `del_flag`)
+VALUES
+  ('wk_gs_001', '基础造价助理', '基础造价助理', 'growth_stage', '当前成长阶段', 10, '0', '1', NOW(), '1', NOW(), '基础造价助理', '0'),
+  ('wk_gs_002', '资深造价助理', '资深造价助理', 'growth_stage', '当前成长阶段', 20, '0', '1', NOW(), '1', NOW(), '资深造价助理', '0'),
+  ('wk_gs_003', '项目现场负责人', '项目现场负责人', 'growth_stage', '当前成长阶段', 30, '0', '1', NOW(), '1', NOW(), '项目现场负责人', '0'),
+  ('wk_gs_004', '初级项目负责人', '初级项目负责人', 'growth_stage', '当前成长阶段', 40, '0', '1', NOW(), '1', NOW(), '初级项目负责人', '0'),
+  ('wk_gs_005', '项目经理', '项目经理', 'growth_stage', '当前成长阶段', 50, '0', '1', NOW(), '1', NOW(), '项目经理', '0');
+
+-- =====================================================
+-- 4. 字典数据:入职年限(work_years)
+-- =====================================================
+INSERT INTO `sys_dict` (`id`, `value`, `label`, `type`, `description`, `sort`, `parent_id`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`, `del_flag`)
+VALUES
+  ('wk_wy_001', '1年内', '1年内', 'work_years', '入职年限', 10, '0', '1', NOW(), '1', NOW(), '1年内', '0'),
+  ('wk_wy_002', '1-2年', '1-2年', 'work_years', '入职年限', 20, '0', '1', NOW(), '1', NOW(), '1-2年', '0'),
+  ('wk_wy_003', '2-3年', '2-3年', 'work_years', '入职年限', 30, '0', '1', NOW(), '1', NOW(), '2-3年', '0'),
+  ('wk_wy_004', '3-4年', '3-4年', 'work_years', '入职年限', 40, '0', '1', NOW(), '1', NOW(), '3-4年', '0'),
+  ('wk_wy_005', '5', '更多', 'work_years', '入职年限', 50, '0', '1', NOW(), '1', NOW(), '更多', '0');
+
+-- =====================================================
+-- 5. 字典数据:造价工程师状态(engineer_status)
+-- =====================================================
+INSERT INTO `sys_dict` (`id`, `value`, `label`, `type`, `description`, `sort`, `parent_id`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`, `del_flag`)
+VALUES
+  ('wk_es_001', '备考中', '备考中', 'engineer_status', '造价工程师状态', 10, '0', '1', NOW(), '1', NOW(), '备考中', '0'),
+  ('wk_es_002', '已通过', '已通过', 'engineer_status', '造价工程师状态', 20, '0', '1', NOW(), '1', NOW(), '已通过', '0'),
+  ('wk_es_003', '已取得', '已取得', 'engineer_status', '造价工程师状态', 30, '0', '1', NOW(), '1', NOW(), '已取得', '0');
+
+-- =====================================================
+-- 6. 字典数据:培训类型(training_type)
+-- =====================================================
+INSERT INTO `sys_dict` (`id`, `value`, `label`, `type`, `description`, `sort`, `parent_id`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`, `del_flag`)
+VALUES
+  ('wk_tt_001', '入职集训', '入职集训', 'training_type', '培训类型', 10, '0', '1', NOW(), '1', NOW(), '入职集训', '0'),
+  ('wk_tt_002', '全员培训', '全员培训', 'training_type', '培训类型', 20, '0', '1', NOW(), '1', NOW(), '全员培训', '0'),
+  ('wk_tt_003', '季度内训', '季度内训', 'training_type', '培训类型', 30, '0', '1', NOW(), '1', NOW(), '季度内训', '0'),
+  ('wk_tt_004', '线上自学', '线上自学', 'training_type', '培训类型', 40, '0', '1', NOW(), '1', NOW(), '线上自学', '0');
+
+-- =====================================================
+-- 7. 字典数据:新规掌握程度(regulation_level)
+-- =====================================================
+INSERT INTO `sys_dict` (`id`, `value`, `label`, `type`, `description`, `sort`, `parent_id`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`, `del_flag`)
+VALUES
+  ('wk_rl_001', '了解', '了解', 'regulation_level', '新规掌握程度', 10, '0', '1', NOW(), '1', NOW(), '了解', '0'),
+  ('wk_rl_002', '熟悉', '熟悉', 'regulation_level', '新规掌握程度', 20, '0', '1', NOW(), '1', NOW(), '熟悉', '0'),
+  (`wk_rl_003', '掌握', '掌握', 'regulation_level', '新规掌握程度', 30, '0', '1', NOW(), '1', NOW(), '掌握', '0'),
+  (`wk_rl_004', '精通', '精通', 'regulation_level', '新规掌握程度', 40, '0', '1', NOW(), '1', NOW(), '精通', '0');
+
+-- =====================================================
+-- 8. 数据权限支持:记录表新增 office_id、company_id 字段(已建表的环境执行)
+-- 说明:数据权限过滤(dataScopeFilterOR 生成的 dsf)依赖主表别名的
+--       a.office_id、a.company_id 字段,因此记录表需要冗余这两个字段
+-- =====================================================
+ALTER TABLE `wk_quality_improvement_record`
+  ADD COLUMN `office_id`  VARCHAR(64) DEFAULT NULL COMMENT '填写人部门ID(数据权限用)' AFTER `user_name`,
+  ADD COLUMN `company_id` VARCHAR(64) DEFAULT NULL COMMENT '所属公司ID(数据权限用)' AFTER `office_id`;
+
+-- 存量数据回填:按填写人当前部门回填 office_id
+UPDATE `wk_quality_improvement_record` r
+LEFT JOIN `sys_user` u ON u.id = r.user_id
+SET r.office_id = u.office_id
+WHERE r.office_id IS NULL;
+
+-- 存量数据回填:按填写人部门向上取 type='1' 的公司节点回填 company_id
+UPDATE `wk_quality_improvement_record` r
+LEFT JOIN `sys_user` u ON u.id = r.user_id
+LEFT JOIN `sys_office` o ON o.id = u.office_id
+SET r.company_id = (
+    SELECT x.id FROM `sys_office` x
+    WHERE x.type = '1' AND (x.id = o.id OR FIND_IN_SET(x.id, o.parent_ids))
+    ORDER BY LENGTH(x.parent_ids) DESC LIMIT 1
+)
+WHERE r.company_id IS NULL;
+
+-- =====================================================
+-- 9. 清理素养提升计划通知的重复数据
+-- 说明:同一任务+同一用户+同一标题+status=0(未读)的通知只保留最新的一条,
+--       删除其余重复记录,避免一个人收到多条相同通知
+-- 执行前建议先备份:SELECT * FROM work_project_notify WHERE type='202' AND status='0'
+-- =====================================================
+
+-- 查看当前重复情况(可选,用于确认重复数据量)
+-- SELECT notify_id, notify_user, title, COUNT(*) as cnt
+-- FROM work_project_notify
+-- WHERE type = '202' AND status = '0' AND del_flag = '0'
+-- GROUP BY notify_id, notify_user, title
+-- HAVING COUNT(*) > 1;
+
+-- 删除重复通知:保留每组中 update_date 最新的一条(update_date 相同时保留 id 最大的)
+DELETE FROM work_project_notify
+WHERE type = '202' AND status = '0' AND del_flag = '0'
+  AND id NOT IN (
+    -- 每组保留最新的一条
+    SELECT keep_id FROM (
+      SELECT notify_id, notify_user, title,
+             SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY update_date DESC, id DESC), ',', 1) as keep_id
+      FROM work_project_notify
+      WHERE type = '202' AND status = '0' AND del_flag = '0'
+      GROUP BY notify_id, notify_user, title
+    ) tmp
+  );

+ 10 - 3
src/main/webapp/webpage/modules/sys/sysHome.jsp

@@ -877,7 +877,7 @@
             });
 
         }
-        /** 打开确认最佳答案页面(带提交/关闭按钮) */
+        /** 打开确认最佳答案页面(带暂存/提交/关闭按钮) */
         function openConfirmAnswerDialog(title,url,width,height) {
             console.log(123)
             if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {
@@ -894,8 +894,9 @@
                 maxmin: true,
                 content: url,
                 skin: 'three-btns',
-                btn: ['提交', '关闭'],
+                btn: ['提交', '暂存', '关闭'],
                 btn1: function(index, layero) {
+                    // 提交 - 做必填验证,验证通过后提交并关闭弹窗
                     var body = top.layer.getChildFrame('body', index);
                     var iframeWin = layero.find('iframe')[0];
                     var inputForm = body.find('#inputForm');
@@ -908,7 +909,13 @@
                         }, 300);
                     }
                 },
-                btn2: function(index) {
+                btn2: function(index, layero) {
+                    // 暂存 - 不做必填验证,保存后可继续编辑
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0];
+                    iframeWin.contentWindow.doSubmit(2);
+                },
+                btn3: function(index) {
                     top.layer.close(index);
                     window.location.reload();
                 }

+ 9 - 3
src/main/webapp/webpage/modules/workprojectnotify/workProjectNotifyList.jsp

@@ -56,7 +56,7 @@
 				type : 'date'
 			});
 		});
-        /** 打开素养提升计划填写页面(带提交/关闭按钮) */
+        /** 打开素养提升计划填写页面(带暂存/提交/关闭按钮) */
         function openConfirmAnswerDialog(title,url,width,height) {
             if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
                 width = 'auto';
@@ -69,7 +69,7 @@
                 skin: 'three-btns',
                 maxmin: true, //开启最大化最小化按钮
                 content: url,
-                btn: ['提交', '关闭'],
+                btn: ['提交', '暂存', '关闭'],
                 btn1: function(index, layero) {
                     var body = top.layer.getChildFrame('body', index);
                     var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
@@ -83,7 +83,13 @@
                         }, 100);//延时0.1秒,对应360 7.1版本bug
                     }
                 },
-                btn2: function(index) {
+                btn2: function(index, layero) {
+                    // 暂存 - 不做必填验证,保存后可继续编辑
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0];
+                    iframeWin.contentWindow.doSubmit(2);
+                },
+                btn3: function(index) {
                 }
             });
         }

+ 9 - 3
src/main/webapp/webpage/modules/workprojectnotify/workProjectNotifyReadShowList.jsp

@@ -132,7 +132,7 @@
         }
 
 
-		/** 打开确认最佳答案页面(带提交/关闭按钮) */
+		/** 打开确认最佳答案页面(带暂存/提交/关闭按钮) */
 		function openConfirmAnswerDialog(title,url,width,height) {
 			if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {
 				var width = 'auto';
@@ -148,7 +148,7 @@
 				maxmin: true,
 				content: url,
 				skin: 'three-btns',
-				btn: ['提交', '关闭'],
+				btn: ['提交', '暂存', '关闭'],
 				btn1: function(index, layero) {
 					var body = top.layer.getChildFrame('body', index);
 					var iframeWin = layero.find('iframe')[0];
@@ -162,7 +162,13 @@
 						}, 300);
 					}
 				},
-				btn2: function(index) {
+				btn2: function(index, layero) {
+					// 暂存 - 不做必填验证,保存后可继续编辑
+					var body = top.layer.getChildFrame('body', index);
+					var iframeWin = layero.find('iframe')[0];
+					iframeWin.contentWindow.doSubmit(2);
+				},
+				btn3: function(index) {
 					top.layer.close(index);
 				}
 			});

+ 13 - 4
src/main/webapp/webpage/modules/workqualityimprovement/recordForm.jsp

@@ -47,11 +47,20 @@
                 $("#inputForm").submit();
                 return true;
             } else {
-                // 暂存
+                // 暂存 - 无验证,使用 AJAX 保存后留在当前页面继续编辑
                 syncWorkYears();
-                $("#inputForm").attr("action", "${ctx}/workqualityimprovement/wkQualityImprovement/recordSave");
-                $("#inputForm").submit();
-                return true;
+                $.ajax({
+                    url: '${ctx}/workqualityimprovement/wkQualityImprovement/recordSave',
+                    type: 'POST',
+                    data: $("#inputForm").serialize(),
+                    success: function(data){
+                        top.layer.msg('暂存成功!', {icon: 1, time: 1500});
+                    },
+                    error: function(){
+                        top.layer.msg('暂存失败,请重试!', {icon: 2});
+                    }
+                });
+                return false; // 不关闭弹窗
             }
         }
 

+ 8 - 2
src/main/webapp/webpage/modules/workqualityimprovement/recordList.jsp

@@ -38,7 +38,7 @@
 				maxmin: true,
 				content: url,
 				skin: "three-btns",
-				btn: ['提交', '关闭'],
+				btn: ['提交', '暂存', '关闭'],
 				btn1: function(index, layero){
 					var body = top.layer.getChildFrame('body', index);
 					var iframeWin = layero.find('iframe')[0];
@@ -49,7 +49,13 @@
 						setTimeout(function(){top.layer.close(index); search();}, 100);
 					}
 				},
-				btn2: function(index){
+				btn2: function(index, layero){
+					// 暂存 - 不做必填验证,保存后可继续编辑
+					var body = top.layer.getChildFrame('body', index);
+					var iframeWin = layero.find('iframe')[0];
+					iframeWin.contentWindow.doSubmit(2);
+				},
+				btn3: function(index){
 					top.layer.close(index);
 				}
 			});