فهرست منبع

工单问题类型处理人分配管理

[user3] 3 سال پیش
والد
کامیت
551acfc2c7

+ 17 - 0
src/main/java/com/jeeplus/modules/workOrder/dao/WorkOrderDao.java

@@ -5,6 +5,7 @@ import com.jeeplus.common.persistence.annotation.MyBatisDao;
 import com.jeeplus.modules.feedback.entity.QuestionFeedback;
 import com.jeeplus.modules.workOrder.entity.WorkOrder;
 import com.jeeplus.modules.workOrder.entity.WorkOrderProcessing;
+import com.jeeplus.modules.workOrder.entity.WorkOrderQuerstion;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -60,4 +61,20 @@ public interface WorkOrderDao extends CrudDao<WorkOrder> {
 //     * @return
 //     */
 //    List<WorkOrder> findProcessingByUserId(@Param("handleId") String handleId);
+
+    /**
+     * 获取问题类型
+     * @return
+     */
+    List<WorkOrderQuerstion> findQuerstion(WorkOrderQuerstion workOrderQuerstion);
+    /**
+     * 获取问题类型
+     * @return
+     */
+    WorkOrderQuerstion getQuerstion(WorkOrderQuerstion workOrderQuerstion);
+    /**
+     * 获取问题类型
+     * @return
+     */
+    Integer updateQuestion(WorkOrderQuerstion workOrderQuerstion);
 }

+ 46 - 0
src/main/java/com/jeeplus/modules/workOrder/entity/WorkOrderQuerstion.java

@@ -0,0 +1,46 @@
+package com.jeeplus.modules.workOrder.entity;
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.modules.sys.entity.User;
+
+/**
+ * 工单问题类型entity
+ */
+public class WorkOrderQuerstion extends DataEntity<WorkOrderQuerstion> {
+    private String questionKey;
+    private String questionStr;
+    private String userId;
+    private User user;
+
+    public String getQuestionKey() {
+        return questionKey;
+    }
+
+    public void setQuestionKey(String questionKey) {
+        this.questionKey = questionKey;
+    }
+
+    public String getQuestionStr() {
+        return questionStr;
+    }
+
+    public void setQuestionStr(String questionStr) {
+        this.questionStr = questionStr;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public User getUser() {
+        return user;
+    }
+
+    public void setUser(User user) {
+        this.user = user;
+    }
+}

+ 5 - 0
src/main/java/com/jeeplus/modules/workOrder/service/WorkOrderService.java

@@ -16,6 +16,7 @@ import com.jeeplus.modules.workOrder.dao.WorkOrderDao;
 import com.jeeplus.modules.workOrder.entity.WorkOrder;
 import com.jeeplus.modules.workOrder.entity.WorkOrderComment;
 import com.jeeplus.modules.workOrder.entity.WorkOrderProcessing;
+import com.jeeplus.modules.workOrder.entity.WorkOrderQuerstion;
 import com.sun.corba.se.spi.orbutil.threadpool.Work;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -172,4 +173,8 @@ public class WorkOrderService  extends CrudService<WorkOrderDao, WorkOrder> {
         processing.setHandleOpinion("已解决");
         workOrderDao.updateProcessing(processing);
     }
+    @Transactional(readOnly = false)
+    public void updateQuestion(WorkOrderQuerstion workOrderQuerstion) {
+        workOrderDao.updateQuestion(workOrderQuerstion);
+    }
 }

+ 42 - 3
src/main/java/com/jeeplus/modules/workOrder/web/WorkOrderController.java

@@ -8,17 +8,18 @@ import com.jeeplus.common.persistence.Page;
 import com.jeeplus.common.utils.MyBeanUtils;
 import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.common.web.BaseController;
-import com.jeeplus.modules.feedback.entity.QuestionFeedback;
+import com.jeeplus.modules.sys.entity.MainDictDetail;
 import com.jeeplus.modules.sys.entity.User;
 import com.jeeplus.modules.sys.entity.Workattachment;
 import com.jeeplus.modules.sys.service.WorkattachmentService;
+import com.jeeplus.modules.sys.utils.DictUtils;
 import com.jeeplus.modules.sys.utils.UserUtils;
-import com.jeeplus.modules.utils.ErrorCode;
 import com.jeeplus.modules.workOrder.dao.WorkOrderCommentDao;
 import com.jeeplus.modules.workOrder.dao.WorkOrderDao;
 import com.jeeplus.modules.workOrder.entity.WorkOrder;
 import com.jeeplus.modules.workOrder.entity.WorkOrderComment;
 import com.jeeplus.modules.workOrder.entity.WorkOrderProcessing;
+import com.jeeplus.modules.workOrder.entity.WorkOrderQuerstion;
 import com.jeeplus.modules.workOrder.enums.WorkOrderStatusEnum;
 import com.jeeplus.modules.workOrder.service.WorkOrderCommentService;
 import com.jeeplus.modules.workOrder.service.WorkOrderService;
@@ -133,7 +134,6 @@ public class WorkOrderController extends BaseController {
 		}else {
 			addMessage(redirectAttributes, "保存工单成功");
 		}
-
 		return "redirect:" + adminPath + "/workOrder/workOrder/?repage";
 	}
 
@@ -334,4 +334,43 @@ public class WorkOrderController extends BaseController {
 		map.put("count",count);
 		return map;
 	}
+	@RequestMapping(value = {"questionTypelist"})
+	public String questionTypelist(WorkOrderQuerstion workOrderQuerstion, HttpServletRequest request, HttpServletResponse response, Model model, RedirectAttributes redirectAttributes) {
+		List<WorkOrderQuerstion> workOrderQuerstions=workOrderDao.findQuerstion(workOrderQuerstion);
+		for (WorkOrderQuerstion querstion:workOrderQuerstions){
+			querstion.setUser(UserUtils.get(querstion.getUserId()));
+			List<MainDictDetail> dictList = DictUtils.getMainDictList("work_order_question_type");
+			for (MainDictDetail dictDetail:dictList){
+				if (dictDetail.getValue().equals(querstion.getQuestionKey())){
+					querstion.setQuestionStr(dictDetail.getLabel());
+					break;
+				}
+			}
+		}
+		Page<WorkOrderQuerstion> page =new Page<WorkOrderQuerstion>(request, response);
+		page.setCount(workOrderQuerstions.size());
+		page.setList(workOrderQuerstions);
+		model.addAttribute("page",page);
+		return "modules/workOrder/quesitonTypeList";
+	}
+	@RequestMapping(value = {"questionform"})
+	public String questionform(WorkOrderQuerstion workOrderQuerstion, HttpServletRequest request, HttpServletResponse response, Model model, RedirectAttributes redirectAttributes) {
+		WorkOrderQuerstion querstion=workOrderDao.getQuerstion(workOrderQuerstion);
+		querstion.setUser(UserUtils.get(querstion.getUserId()));
+		List<MainDictDetail> dictList = DictUtils.getMainDictList("work_order_question_type");
+		for (MainDictDetail dictDetail:dictList){
+			if (dictDetail.getValue().equals(querstion.getQuestionKey())){
+				querstion.setQuestionStr(dictDetail.getLabel());
+				break;
+			}
+		}
+		model.addAttribute("workOrderQuerstion",querstion);
+		return "modules/workOrder/questionForm";
+	}
+	@RequestMapping(value = {"saveQuestion"})
+	public String saveQuestion(WorkOrderQuerstion workOrderQuerstion, HttpServletRequest request, HttpServletResponse response, Model model, RedirectAttributes redirectAttributes) {
+		workOrderService.updateQuestion(workOrderQuerstion);
+		return "redirect:" + adminPath + "/workOrder/workOrder/?repage";
+
+	}
 }

+ 28 - 1
src/main/resources/mappings/modules/workOrder/WorkOrderDao.xml

@@ -172,6 +172,28 @@
 			</otherwise>
 		</choose>
 	</select>
+    <select id="findQuerstion" resultType="com.jeeplus.modules.workOrder.entity.WorkOrderQuerstion">
+		SELECT
+			a.id,
+		    a.question_key AS "questionKey",
+		    a.user_id AS "userId"
+		FROM
+			work_order_querstion_relation a
+		<where>
+			<if test="questionKey!=null and questionKey!=''">
+				and a.question_key=#{questionKey}
+			</if>
+		</where>
+	</select>
+	<select id="getQuerstion" resultType="com.jeeplus.modules.workOrder.entity.WorkOrderQuerstion">
+		SELECT
+		a.id,
+		a.question_key AS "questionKey",
+		a.user_id AS "userId"
+		FROM
+		work_order_querstion_relation a
+		where a.id=#{id}
+	</select>
 	<!--	<select id="findProcessingByUserId" resultType="com.jeeplus.modules.workOrder.entity.WorkOrderProcessing">-->
 <!--		select-->
 <!--		<include refid="workOrderProcessingColumns"/>-->
@@ -273,7 +295,12 @@
 			question_type=#{questionType}
 		WHERE id = #{id}
 	</update>
-	
+	<update id="updateQuestion">
+		UPDATE work_order_querstion_relation SET
+			  user_id=#{user.id}
+		WHERE id = #{id}
+	</update>
+
 	<delete id="delete">
 		delete from work_order WHERE id = #{id}
 	</delete>

+ 486 - 0
src/main/webapp/webpage/modules/workOrder/quesitonTypeList.jsp

@@ -0,0 +1,486 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>反馈管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript" src="${ctxStatic}/ckeditor/ckeditor.js"></script>
+	<script type="text/javascript">
+
+		$(function () {
+			$(".btn btn-white btn-sm").bind("click",function () {
+
+            })
+        });
+
+        $(document).ready(function() {
+            //搜索框收放
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow1);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow1);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#createStartDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#createEndDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+        });
+
+        function openDialog(title,url,width,height,target) {
+
+            if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+                width = 'auto';
+                height = 'auto';
+            } else {//如果是PC端,根据用户设置的width和height显示。
+
+            }
+
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url,
+                skin: 'three-btns',
+                btn: ['保存', '关闭'],
+                /*yes: function (index, layero) {
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if (target) {
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    } else {
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target", top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+
+                    if (iframeWin.contentWindow.doSubmit()) {
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function () {
+                            top.layer.close(index)
+                        }, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+
+                },*/
+
+                btn1:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }else {
+                        return false;
+                    }
+                },
+                btn2: function (index) {
+                }
+            });
+        }
+
+        function openDialogAdmin(title,url,width,height,target) {
+
+            if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+                width = 'auto';
+                height = 'auto';
+            } else {//如果是PC端,根据用户设置的width和height显示。
+
+            }
+
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url,
+                skin: 'three-btns',
+                btn: ['提交', '关闭'],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2: function (index) {
+                }
+            });
+        }
+
+        function openDialogre(title,url,width,height,target,buttons) {
+
+            if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+                width = 'auto';
+                height = 'auto';
+            } else {//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            var split = buttons.split(",");
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                skin: 'three-btns',
+                content: url,
+                btn: split,
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){
+                        	top.layer.close(index);
+							window.location.reload();
+						}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    if(split.length==2){return}
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }else {
+                        return false;
+                    }
+                },
+                btn3: function (index) {
+                }
+            });
+        }
+
+        function openDialogreModify(title,url,id,width,height,target,buttons) {
+
+            if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+                width = 'auto';
+                height = 'auto';
+            } else {//如果是PC端,根据用户设置的width和height显示。
+
+            }
+
+			$.ajax({
+				async: false,
+				url: "${ctx}/oa/oaNotify/getOaNotify?id="+id,
+				dataType: "json",
+				success: function (data) {
+					if(data.success){
+						var split = buttons.split(",");
+						top.layer.open({
+							type: 2,
+							area: [width, height],
+							title: title,
+							maxmin: true, //开启最大化最小化按钮
+							skin: 'three-btns',
+							content: url,
+							btn: split,
+							btn1: function(index, layero){
+								var body = top.layer.getChildFrame('body', index);
+								var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+								var inputForm = body.find('#inputForm');
+								var top_iframe;
+								if(target){
+									top_iframe = target;//如果指定了iframe,则在改frame中跳转
+								}else{
+									top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+								}
+								inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+								if(iframeWin.contentWindow.doSubmit(1) ){
+									// top.layer.close(index);//关闭对话框。
+									setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+								}
+							},
+							btn2:function(index,layero){
+								if(split.length==2){return}
+								var body = top.layer.getChildFrame('body', index);
+								var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+								var inputForm = body.find('#inputForm');
+								var top_iframe;
+								if(target){
+									top_iframe = target;//如果指定了iframe,则在改frame中跳转
+								}else{
+									top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+								}
+								inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+								if(iframeWin.contentWindow.doSubmit(2) ){
+									// top.layer.close(index);//关闭对话框。
+									setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+								}else {
+									return false;
+								}
+							},
+							btn3: function (index) {
+							}
+						});
+					}else{
+						top.layer.msg("该公告信息已删除!", {icon: 0});
+						window.location.reload();
+					}
+				}
+			});
+
+
+        }
+
+
+		//打开对话框(查看)
+		function openDialogListView(title,url,id,width,height){
+
+
+			if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+				width='auto';
+				height='auto';
+			}else{//如果是PC端,根据用户设置的width和height显示。
+
+			}
+			$.ajax({
+				async: false,
+				url: "${ctx}/feedback/questionFeedback/getFeedback?id="+id,
+				dataType: "json",
+				success: function (data) {
+					if(data.success){
+						top.layer.open({
+							type: 2,
+							skin: 'one-btn',
+							area: [width, height],
+							title: title,
+							maxmin: true, //开启最大化最小化按钮
+							content: url ,
+							btn: ['关闭'],
+							cancel: function(index){
+							}
+						});
+					}else{
+						top.layer.msg("该反馈信息已删除!", {icon: 0});
+						window.location.reload();
+					}
+				}
+			});
+
+		}
+	</script>
+	<script>
+
+		function notifyDialogre(title,url,width,height,target){
+			if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+				width='auto';
+				height='auto';
+			}else{//如果是PC端,根据用户设置的width和height显示。
+
+			}
+			top.layer.open({
+				type: 2,
+				area: [width, height],
+				title: title,
+				skin:"three-btns",
+				maxmin: true, //开启最大化最小化按钮
+				content: url ,
+				btn: ['通过','驳回','关闭'],
+				btn1: function(index, layero){
+					var body = top.layer.getChildFrame('body', index);
+					var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+					var inputForm = body.find('#inputForm');
+					var top_iframe;
+					if(target){
+						top_iframe = target;//如果指定了iframe,则在改frame中跳转
+					}else{
+						top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+					}
+					inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+					if(iframeWin.contentWindow.doSubmit(1) ){
+						top.layer.close(index);//关闭对话框。
+						setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+					}
+				},
+				btn2:function(index,layero){
+					var body = top.layer.getChildFrame('body', index);
+					var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+					var inputForm = body.find('#inputForm');
+					var top_iframe;
+					if(target){
+						top_iframe = target;//如果指定了iframe,则在改frame中跳转
+					}else{
+						top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+					}
+					inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+					if(iframeWin.contentWindow.doSubmit(2) ){
+						top.layer.close(index);//关闭对话框。
+						setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+					}
+					return false;
+				},
+				btn3: function(index){
+				}
+			});
+
+		}
+	</script>
+	<style>
+		body{
+			background-color:transparent;
+			filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+			color:#ffffff;
+			background-color:rgba(255,255,255,0);
+			height:100%;
+		}
+	</style>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+	<sys:message content="${message}"/>
+	<div class="layui-row">
+		<div class="full-width fl">
+			<div class="contentShadow layui-row" id="queryDiv">
+			<form:form id="searchForm" modelAttribute="workOrderQuerstion" action="${ctx}/workOrder/workOrder/questionTypelist" method="post" class="form-inline">
+			<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+			<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+			<input id="toflag" name="toflag" type="hidden" value="1"/>
+			<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+
+				<div class="commonQuery">
+					<div class="layui-item query athird">
+						<label class="layui-form-label">问题类型:</label>
+						<div class="layui-input-block with-icon">
+							<form:select path="questionKey" class="form-control simple-select">
+								<form:option value="" label=""/>
+								<form:options items="${fns:getMainDictList('work_order_question_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+							</form:select>
+						</div>
+					</div>
+					<div class="layui-item athird" style="float: right">
+						<div class="input-group">
+<%--							<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>--%>
+							<div class="layui-btn-group search-spacing">
+								<button id="searchQuery" class="layui-btn layui-btn-sm  layui-bg-blue" onclick="search()">查询</button>
+								<button id="searchReset" class="layui-btn layui-btn-sm  " onclick="resetSearch()">重置</button>
+							</div>
+						</div>
+					</div>
+					<div style="    clear:both;"></div>
+				</div>
+			</form:form>
+			</div>
+		</div>
+		<div class="full-width fl">
+			<div class="contentShadow layui-form contentDetails">
+				<div class="nav-btns">
+					<div class="layui-btn-group">
+						<button class="layui-btn layui-btn-sm" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"> 刷新</button>
+					</div>
+				</div>
+				<table class="oa-table layui-table" id="contentTable"></table>
+
+				<!-- 分页代码 -->
+				<table:page page="${page}"></table:page>
+				<div style="clear: both;"></div>
+			</div>
+		</div>
+	</div>
+	<div id="changewidth"></div>
+</div>
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script>
+    layui.use('table', function(){
+        layui.table.render({
+            limit:${ page.pageSize }
+            ,elem: '#contentTable'
+            ,page: false
+            ,cols: [[
+                // {checkbox: true, fixed: true},
+                {field:'index',align:'center',width:40,title: '序号'}
+				,{field:'questionStr',align:'center', title: '问题类型',templet:function(d){
+						var xml =
+								<%--"<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogListView('查看反馈', '${ctx}/feedback/questionFeedback/view?id=" + d.id + "','" + d.id + "','95%','95%')\"></a>" +--%>
+								"<span title=" + d.questionStr + ">" + d.questionStr + "</span>";
+						return xml;
+					}}
+                ,{field:'userName', align:'center',title: '解决人',templet:function(d){
+                        return "<span title='"+ d.userName +"'>" + d.userName + "</span>";
+                    }}
+                ,{align:'center',title:"操作",templet:function(d){
+                        ////对操作进行初始化
+                        var xml = "<div class=\"layui-btn-group\">";
+						if(d.canedit1 != undefined && d.canedit1 =="1")
+						{
+							xml+="<a href=\"#\" onclick=\"openDialogre('配置用户', '${ctx}/workOrder/workOrder/questionform?id=" + d.id +"','80%', '50%','','保存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 配置</a>";
+						}
+                        xml+="</div>"
+                            return xml;
+                    }}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="querstion" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${querstion.id}"
+                    ,"questionStr":"${querstion.questionStr}"
+                    ,"userName":"${querstion.user.name}"
+					,"canedit1":1
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+
+    resizeListTable();
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+</body>
+</html>

+ 147 - 0
src/main/webapp/webpage/modules/workOrder/questionForm.jsp

@@ -0,0 +1,147 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>反馈管理</title>
+    <meta name="decorator" content="default"/>
+
+    <script type="text/javascript" src="${ctxStatic}/layui/layui.js"></script>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/css/layui.css"/>
+    <style type="text/css">
+        img {width: 50px; height: 50px;}
+    </style>
+    <script type="text/javascript" src="${ctxStatic}/ckeditor/ckeditor.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/layui/layui.js"></script>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/css/layui.css"/>
+    <script type="text/javascript" language="JavaScript" for="window" event="onload">
+        var validateForm;
+        function doSubmit(i){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            var type =$("#questionType").val();
+            if (type==''){
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }else {
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+
+            return false;
+        }
+        $(document).ready(function() {
+            layui.use(['form', 'layer'], function () {
+                var form = layui.form;
+            });
+            //$("#name").focus();
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',<%=request.getAttribute("disabled")%>);
+            laydate.render({
+                elem: '#startDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'datetime'
+                , trigger: 'click'
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'datetime'
+                , trigger: 'click'
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+        });
+    </script>
+    <script type="text/javascript">
+
+        function changeUser(ids,names,parents) {
+            var split = ids.split(',');
+            var split2 = names.split(',');
+            $("#userTableList").html("");
+            userIdx=0;
+            for(var i=0;i<split.length;i++){
+                var id = split[i];
+                if(id==''||id==null){
+                    continue;
+                }
+                var obj = {'id':id,'name':split2[i],'officeName':parents[i]};
+                addRow('#userTableList',userIdx,userTpl,obj);
+                userIdx+=1;
+            }
+        }
+        function insertTitle(tValue){
+            var list = "${workOrder.workAttachments}";
+            var size = (list.split('url')).length-1;
+            var files = $("#attachment_file")[0].files;
+            for(var i = 0;i<files.length;i++) {
+                var file = files[i];
+                var attachmentId = "";
+                var attachmentFlag = "191";
+                console.log(file);
+                var timestamp = new Date().getTime();
+                var str=file.name;
+                var index = str.lastIndexOf(".");
+                str = str.substring(index + 1, str.length);
+                if (str == "png" || str == "jpg" || str == "gif" || str == "bmp" || str == "jpeg"){
+                    var storeAs = "workOrder";
+                    var uploadPath = "http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/" + storeAs;
+                    /*将这段字符串存到数据库即可*/
+                    var divId = "_attachment";
+                    $("#addFile" + divId).show();
+                    multipartUploadWithSts(storeAs, file, attachmentId, attachmentFlag, uploadPath, divId, size);
+                }else{
+                    top.layer.msg("请上传图片!",{icon:2});
+                    return false
+                }
+
+            }
+        }
+
+
+    </script>
+
+</head>
+<body >
+<div class="single-form">
+    <div class="container">
+        <form:form id="inputForm" modelAttribute="workOrderQuerstion" enctype="multipart/form-data" action="${ctx}/workOrder/workOrder/saveQuestion" method="post" class="form-horizontal layui-form">
+            <form:hidden path="id"/>
+            <sys:message content="${message}"/>
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>问题类型处理人信息</h2></div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">问题类型:</label>
+                    <div class="layui-input-block">
+                        <form:input path="questionStr" readonly="true" htmlEscape="false" placeholder="请输入工单标题" maxlength="50" class="form-control required layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">处理人:</label>
+                    <div class="layui-input-block with-icon">
+                        <sys:inquireselectUserNotReadolnyTow id="userId" name="user.id" value="${workOrderQuerstion.user.id}" labelName="user.name" labelValue="${workOrderQuerstion.user.name}" cssStyle="background-color: #fff"
+                                                             title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
+                    </div>
+                </div>
+            </div>
+            <div class="form-group layui-row page-end"></div>
+        </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 28 - 3
src/main/webapp/webpage/modules/workOrder/workOrderList.jsp

@@ -252,6 +252,30 @@
 			});
 
 		}
+
+
+		function openDialogList(title,url,width,height){
+
+
+			if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+				width='auto';
+				height='auto';
+			}else{//如果是PC端,根据用户设置的width和height显示。
+
+			}
+			top.layer.open({
+				type: 2,
+				skin: 'one-btn',
+				area: [width, height],
+				title: title,
+				maxmin: true, //开启最大化最小化按钮
+				content: url ,
+				btn: ['关闭'],
+				cancel: function(index){
+				}
+			});
+
+		}
 	</script>
 	<script>
 
@@ -371,10 +395,11 @@
 			<div class="contentShadow layui-form contentDetails">
 				<div class="nav-btns">
 					<div class="layui-btn-group">
-<%--						<shiro:hasPermission name="feedback:workOrder:add">--%>
-							<table:addRow label="新增" url="${ctx}/workOrder/workOrder/form" title="反馈" height="95%;" width="95%;"></table:addRow><!-- 增加按钮 -->
-<%--						</shiro:hasPermission>--%>
+						<table:addRow label="新增" url="${ctx}/workOrder/workOrder/form" title="反馈" height="95%;" width="95%;"></table:addRow><!-- 增加按钮 -->
 						<button class="layui-btn layui-btn-sm" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"> 刷新</button>
+						<shiro:hasPermission name="workOrder:workOrder:administration">
+							<a class="layui-btn layui-btn-sm layui-bg-orange" onclick="openDialogList('问题类型分配用户管理列表', '${ctx}/workOrder/workOrder/questionTypelist','95%','95%')">类型分配管理</a>
+						</shiro:hasPermission>
 					</div>
 				</div>
 				<table class="oa-table layui-table" id="contentTable"></table>