Ver código fonte

基层治理

bihuisong 9 meses atrás
pai
commit
556cc2efe3

+ 18 - 0
zhsq_qk-admin/src/main/java/zhsq_qk/web/controller/system/QkPeopleAppealController.java

@@ -83,4 +83,22 @@ public class QkPeopleAppealController extends BaseController {
     public AjaxResult remove(@PathVariable Long[] ids) {
         return toAjax(qkPeopleAppealService.deleteQkPeopleAppealByIds(ids));
     }
+
+    /**
+     * 查询民生诉求列表
+     */
+    @GetMapping("/allList")
+    public AjaxResult allList(QkPeopleAppeal qkPeopleAppeal) {
+        return success(qkPeopleAppealService.selectQkPeopleAppealList(qkPeopleAppeal));
+    }
+
+    /**
+     * 查询民生诉求已上报和已处理数量
+     */
+    @GetMapping("/selectPeopleAppealCount")
+    public AjaxResult selectPeopleAppealCount() {
+        return success(qkPeopleAppealService.selectPeopleAppealCount());
+    }
+
+
 }

+ 27 - 6
zhsq_qk-system/src/main/java/zhsq_qk/system/domain/QkPeopleAppeal.java

@@ -72,6 +72,18 @@ public class QkPeopleAppeal extends BaseEntity {
     @Excel(name = "事件分类")
     private String evenType;
 
+    /**
+     * 诉求是否处理(0:已上报;1:已处理)
+     */
+    @Excel(name = "诉求是否处理", readConverterExp = "0=:已上报;1:已处理")
+    private String status;
+
+    private String appearImages;
+
+    private List<String> appearImagesList;
+
+    private String evenTypeName;
+
     public String getAppearImages() {
         return appearImages;
     }
@@ -80,13 +92,22 @@ public class QkPeopleAppeal extends BaseEntity {
         this.appearImages = appearImages;
     }
 
-    private String appearImages;
+    public List<String> getAppearImagesList() {
+        return appearImagesList;
+    }
+
+    public void setAppearImagesList(List<String> appearImagesList) {
+        this.appearImagesList = appearImagesList;
+    }
+
+    public String getEvenTypeName() {
+        return evenTypeName;
+    }
+
+    public void setEvenTypeName(String evenTypeName) {
+        this.evenTypeName = evenTypeName;
+    }
 
-    /**
-     * 诉求是否处理(0:已上报;1:已处理)
-     */
-    @Excel(name = "诉求是否处理", readConverterExp = "0=:已上报;1:已处理")
-    private String status;
 
     public void setId(Long id) {
         this.id = id;

+ 37 - 0
zhsq_qk-system/src/main/java/zhsq_qk/system/domain/vo/QkPeopleAppealCountVO.java

@@ -0,0 +1,37 @@
+package zhsq_qk.system.domain.vo;
+
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+public class QkPeopleAppealCountVO {
+
+    private String countReport;
+
+    private String countHandle;
+
+
+    public void setCountReport(String countReport) {
+        this.countReport = countReport;
+    }
+
+    public String getCountReport() {
+        return countReport;
+    }
+
+    public void setCountHandle(String countHandle) {
+        this.countHandle = countHandle;
+    }
+
+    public String getCountHandle() {
+        return countHandle;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("countReport", getCountReport())
+                .append("countHandle", getCountHandle())
+                .toString();
+    }
+}

+ 4 - 0
zhsq_qk-system/src/main/java/zhsq_qk/system/mapper/QkPeopleAppealMapper.java

@@ -1,6 +1,7 @@
 package zhsq_qk.system.mapper;
 
 import zhsq_qk.system.domain.QkPeopleAppeal;
+import zhsq_qk.system.domain.vo.QkPeopleAppealCountVO;
 
 import java.util.List;
 
@@ -58,4 +59,7 @@ public interface QkPeopleAppealMapper {
      * @return 结果
      */
     public int deleteQkPeopleAppealByIds(Long[] ids);
+
+
+    QkPeopleAppealCountVO selectPeopleAppealCount();
 }

+ 3 - 0
zhsq_qk-system/src/main/java/zhsq_qk/system/service/IQkPeopleAppealService.java

@@ -2,6 +2,7 @@ package zhsq_qk.system.service;
 
 import zhsq_qk.common.core.domain.AjaxResult;
 import zhsq_qk.system.domain.QkPeopleAppeal;
+import zhsq_qk.system.domain.vo.QkPeopleAppealCountVO;
 
 import java.util.List;
 
@@ -59,4 +60,6 @@ public interface IQkPeopleAppealService {
      * @return 结果
      */
     public int deleteQkPeopleAppealById(Long id);
+
+    QkPeopleAppealCountVO selectPeopleAppealCount();
 }

+ 14 - 1
zhsq_qk-system/src/main/java/zhsq_qk/system/service/impl/QkPeopleAppealServiceImpl.java

@@ -6,11 +6,13 @@ import org.springframework.stereotype.Service;
 import zhsq_qk.common.utils.DateUtils;
 import zhsq_qk.system.domain.QkPeopleAppeal;
 import zhsq_qk.system.domain.QkPeopleAppealImg;
+import zhsq_qk.system.domain.vo.QkPeopleAppealCountVO;
 import zhsq_qk.system.mapper.QkPeopleAppealImgMapper;
 import zhsq_qk.system.mapper.QkPeopleAppealMapper;
 import zhsq_qk.system.service.IQkPeopleAppealService;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -45,7 +47,13 @@ public class QkPeopleAppealServiceImpl implements IQkPeopleAppealService {
      */
     @Override
     public List<QkPeopleAppeal> selectQkPeopleAppealList(QkPeopleAppeal qkPeopleAppeal) {
-        return qkPeopleAppealMapper.selectQkPeopleAppealList(qkPeopleAppeal);
+        List<QkPeopleAppeal> list = qkPeopleAppealMapper.selectQkPeopleAppealList(qkPeopleAppeal);
+        for (QkPeopleAppeal var : list) {
+            if (StringUtils.isNotEmpty(var.getAppearImages())) {
+                var.setAppearImagesList(Arrays.asList(var.getAppearImages().split(",")));
+            }
+        }
+        return list;
     }
 
     /**
@@ -121,4 +129,9 @@ public class QkPeopleAppealServiceImpl implements IQkPeopleAppealService {
     public int deleteQkPeopleAppealById(Long id) {
         return qkPeopleAppealMapper.deleteQkPeopleAppealById(id);
     }
+
+    @Override
+    public QkPeopleAppealCountVO selectPeopleAppealCount() {
+        return qkPeopleAppealMapper.selectPeopleAppealCount();
+    }
 }

+ 41 - 10
zhsq_qk-system/src/main/resources/mapper/system/QkPeopleAppealMapper.xml

@@ -20,6 +20,12 @@
         <result property="updateBy" column="update_by"/>
         <result property="updateTime" column="update_time"/>
         <result property="remark" column="remark"/>
+        <result property="evenTypeName" column="even_type_name"/>
+    </resultMap>
+
+    <resultMap type="QkPeopleAppealCountVO" id="QkPeopleAppealCountResult">
+        <result property="countReport" column="count_report"/>
+        <result property="countHandle" column="count_handle"/>
     </resultMap>
 
     <sql id="selectQkPeopleAppealVo">
@@ -42,36 +48,53 @@
     </sql>
 
     <select id="selectQkPeopleAppealList" parameterType="QkPeopleAppeal" resultMap="QkPeopleAppealResult">
-        <include refid="selectQkPeopleAppealVo"/>
+        select pa.id,
+        appeal_name,
+        appeal_describe,
+        appear_time,
+        appear_user_id,
+        appear_user_name,
+        appear_phone,
+        appear_address,
+        even_type,
+        case
+        when even_type = 1 then '电梯安全'
+        end as even_type_name,
+        status,
+        remark,
+        GROUP_CONCAT(pai.img_url) as appearImages
+        from qk_people_appeal pa
+        left join qk_people_appeal_img pai on pa.id = pai.appeal_id
         <where>
             <if test="appealName != null  and appealName != ''">
-                and appeal_name like concat('%', #{appealName}, '%')
+                and pa.appeal_name like concat('%', #{appealName}, '%')
             </if>
             <if test="appealDescribe != null  and appealDescribe != ''">
-                and appeal_describe = #{appealDescribe}
+                and pa.appeal_describe = #{appealDescribe}
             </if>
             <if test="appearTime != null ">
-                and appear_time = #{appearTime}
+                and pa.appear_time = #{appearTime}
             </if>
             <if test="appearUserId != null  and appearUserId != ''">
-                and appear_user_id = #{appearUserId}
+                and pa.appear_user_id = #{appearUserId}
             </if>
             <if test="appearUserName != null  and appearUserName != ''">
-                and appear_user_name like concat('%', #{appearUserName}, '%')
+                and pa.appear_user_name like concat('%', #{appearUserName}, '%')
             </if>
             <if test="appearPhone != null  and appearPhone != ''">
-                and appear_phone = #{appearPhone}
+                and pa.appear_phone = #{appearPhone}
             </if>
             <if test="appearAddress != null  and appearAddress != ''">
-                and appear_address = #{appearAddress}
+                and pa.appear_address = #{appearAddress}
             </if>
             <if test="evenType != null  and evenType != ''">
-                and even_type = #{evenType}
+                and pa.even_type = #{evenType}
             </if>
             <if test="status != null  and status != ''">
-                and status = #{status}
+                and pa.status = #{status}
             </if>
         </where>
+        GROUP BY pa.id
     </select>
 
     <select id="selectQkPeopleAppealById" parameterType="Long"
@@ -219,4 +242,12 @@
             #{id}
         </foreach>
     </delete>
+
+    <select id="selectPeopleAppealCount" parameterType="QkPeopleAppealCountVO" resultMap="QkPeopleAppealCountResult">
+        SELECT
+            SUM( CASE WHEN STATUS = 0 THEN 1 ELSE 0 END ) AS count_report,
+            SUM( CASE WHEN STATUS = 1 THEN 1 ELSE 0 END ) AS count_handle
+        FROM
+            qk_people_appeal
+    </select>
 </mapper>

+ 17 - 0
zhsq_qk-ui/src/api/system/appeal.js

@@ -42,3 +42,20 @@ export function delAppeal(id) {
         method: 'delete'
     })
 }
+
+// 查询全部民生诉求列表(不分页)
+export function allListAppeal(query) {
+  return request({
+    url: '/system/appeal/allList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询民生诉求已上报和已处理数量(不分页)
+export function selectPeopleAppealCount() {
+  return request({
+    url: '/system/appeal/selectPeopleAppealCount',
+    method: 'get'
+  })
+}

+ 294 - 288
zhsq_qk-ui/src/assets/images/qkq_sprh.css

@@ -1,7 +1,7 @@
 @charset "utf-8";
 
 .left_con,.right_con{
-	min-height: 80vh;
+	min-height: 82vh;
 }
 
 .bj_left{
@@ -427,7 +427,7 @@ padding-left: 20px;
 
 }
 .nav-li-right.on span,.nav-li-left.on span{
-    text-shadow: 0 0 20px #00aaff;
+    text-shadow: 0 0 20px #00aaff;
 	color: #fff;
 }
 
@@ -599,144 +599,147 @@ padding: 0px 10px;
 .qkq_mssq_div span{
 	font-size: 14px;
 	color: #fff;
-}
-/* 基层治理里的民生诉求部分 */
-.left_con2{
-	width: 715px;
-	background: none;
-}
-.ms_list{
-	height: 795px;
-	overflow-y: scroll;
-}
-.ms_list li{
-	display: flex;
-	flex-direction: column;
-	padding: 10px 10px;
-	cursor: pointer;
-	background-color: #031d564f;
-}
-.ms_list li:hover{
-	background-color: #034a95;
-}
-.ms_list li .ms_tit{
-	display: flex;
-	flex-direction: row;
-}
-.ms_list li .ms_tit img{
-	display: block;
-	width: 300px;
-	height: 180px;
-	margin-right: 15px;
-}
-.ms_list li .ms_txt{
-	display: flex;
-	flex-direction: column;
-	width: 400px;
-}
-.ms_list li .ms_txt h4{
-	color: #fff;
-	text-shadow: 0px 0px 5px #0055ff;
-	font-size: 18px;
-	font-weight: 900;
-	height: 30px;
-	line-height: 30px;
-	overflow: hidden;
-	white-space: nowrap;
-	text-overflow: ellipsis;
-	letter-spacing: 1px;
-}
-.ms_list li .ms_txt p{
-	color: #e9faff;
-	font-size: 16px;
-	line-height: 30px;
-	padding-top: 5px;
-	overflow: hidden;
-	word-break: break-all;
-	text-overflow: ellipsis;
-	display: -webkit-box;
-	-webkit-box-orient: vertical;
-	-webkit-line-clamp: 5;
-	text-align: justify;
-}
-.right_con2{
-	right: 0px;
-	background: none;
-	width: 1060px;
-	/* top:40px; */
-}
-.right_con2 .top_txt{
-	float: right;
-	padding-right: 0px !important;
-}
-.ms_right_top{
-	display: flex;
-	flex-direction: row;
-	/* margin-top: 105px; */
-}
-.ms_img{
-	width: 400px;
-	height: 300px;
-	margin-right: 30px;
-}
-.ms_img div{
-	border: 0px!important;
-	outline: 0px!important;
-}
-.ms_img img{
-	width: 100%;
-	height: 100%;
-	display: block;
-	/* background-color: #074f7a; */
-	border: 0px;
-	outline: 0px;
-}
-.mssq_txt{
-	width: 760px;
-}
-.mssq_txt h4{
-	height: 50px;
-	line-height: 50px;
-	color: #fff;
-	text-shadow: 0px 0px 5px #0055ff;
-	font-size: 20px;
-	font-weight: 900;
-	letter-spacing: 1px;
-}
-.mssq_txt p{
-	height: 80px;
-	color:#e6f6ff ;
-	line-height: 80px;
-	font-size: 18px;
-	font-weight: 900;
-	
-}
-.mssq_txt p span{
-	width: 50%;
-	display: inline-block;
-}
-.mssq_btm_txt{
-	margin-top: 30px;
-}
-.mssq_btm_txt h4{
-	height: 50px;
-	    color: #e9faff;
-	    line-height: 50px;
-	    font-size: 18px;
-	    background: #024089;
-	    padding-left: 20px;
-}
-.mssq_btm_txt p{
-	font-size: 18px;
-	line-height: 45px;
-	text-align: justify;
-	color:#e9faff ;
-	padding: 10px 20px;
-	height: 415px;
-	overflow-y: scroll;
-}
-
-
+}
+/* 基层治理里的民生诉求部分 */
+.left_con2{
+	width: 705px;
+	background: none;
+  left: 0px;
+  min-height: 80vh;
+}
+.ms_list{
+	height: 770px;
+	overflow-y: scroll;
+}
+.ms_list li{
+	display: flex;
+	flex-direction: column;
+	padding: 16px 10px;
+	cursor: pointer;
+	background-color: #031d564f;
+}
+.ms_list li:hover{
+	background-color: #034a95;
+}
+.ms_list li .ms_tit{
+	display: flex;
+	flex-direction: row;
+}
+.ms_list li .ms_tit img{
+	display: block;
+	width: 265px;
+	height: 160px;
+	margin-right: 15px;
+}
+.ms_list li .ms_txt{
+	display: flex;
+	flex-direction: column;
+	width: 372px;
+}
+.ms_list li .ms_txt h4{
+	color: #fff;
+	text-shadow: 0px 0px 5px #0055ff;
+	font-size: 18px;
+	font-weight: 900;
+	height: 30px;
+	line-height: 30px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	letter-spacing: 1px;
+}
+.ms_list li .ms_txt p{
+	color: #e9faff;
+	font-size: 16px;
+	line-height: 30px;
+	padding-top: 5px;
+	overflow: hidden;
+	word-break: break-all;
+	text-overflow: ellipsis;
+	display: -webkit-box;
+	-webkit-box-orient: vertical;
+	-webkit-line-clamp: 4;
+	text-align: justify;
+}
+.right_con2{
+	right: 0px;
+	background: none;
+	width: 995px;
+  min-height: 80vh;
+	/* top:40px; */
+}
+.right_con2 .top_txt{
+	float: right;
+	padding-right: 0px !important;
+}
+.ms_right_top{
+	display: flex;
+	flex-direction: row;
+	/* margin-top: 105px; */
+}
+.ms_img{
+	width: 400px;
+	height: 300px;
+	margin-right: 30px;
+}
+.ms_img div{
+	border: 0px!important;
+	outline: 0px!important;
+}
+.ms_img img{
+	width: 100%;
+	height: 100%;
+	display: block;
+	/* background-color: #074f7a; */
+	border: 0px;
+	outline: 0px;
+}
+.mssq_txt{
+	width: 760px;
+}
+.mssq_txt h4{
+	height: 50px;
+	line-height: 50px;
+	color: #fff;
+	text-shadow: 0px 0px 5px #0055ff;
+	font-size: 20px;
+	font-weight: 900;
+	letter-spacing: 1px;
+}
+.mssq_txt p{
+	height: 80px;
+	color:#e6f6ff ;
+	line-height: 80px;
+	font-size: 18px;
+	font-weight: 900;
+
+}
+.mssq_txt p span{
+	width: 50%;
+	display: inline-block;
+}
+.mssq_btm_txt{
+	margin-top: 30px;
+}
+.mssq_btm_txt h4{
+	height: 50px;
+	    color: #e9faff;
+	    line-height: 50px;
+	    font-size: 18px;
+	    background: #024089;
+	    padding-left: 20px;
+}
+.mssq_btm_txt p{
+	font-size: 18px;
+	line-height: 45px;
+	text-align: justify;
+	color:#e9faff ;
+	padding: 10px 20px;
+	height: 386px;
+	overflow-y: scroll;
+}
+
+
 
 
 /* 政务运行 */
@@ -1011,77 +1014,77 @@ border-radius: 2px;
   background: #0fd3ff;
   border-radius: 2px;
 
-}
-.qkq_aqcn{
-	display: flex;
-	flex-direction: row;
-}
-#qkq_aqcn_chart{
-	width: 160px;
-	height: 120px;
-}
-.qkq_aqcn_txt{
-	margin-top: 10px;
-	width: 150px;
-}
-.qkq_aqcn_txt p{
-	height: 40px;
-	line-height: 40px;
-	border-bottom: 1px dashed #ccc;
-	font-size: 16px;
-	color: #fff;
-}
-.qkq_aqcn_txt p span{
-	float:right;
-	color: #0095ff;
-}
-.qkq_aqcn_col{
-	display: flex;
-	flex-direction: row;
-	justify-content: space-around;
-	padding: 15px 10px;
-	margin-top: 15px;
-	background: rgba(0, 102, 197, 0.2);
-	border-radius: 4px;
-	box-shadow: inset 0px 0px 8px rgba(0, 102, 197, 0.9);
-}
-.qkq_aqcn_col p{
-	text-align: center;
-	font-size: 14px;
-	color: #fff;
-}
-.qkq_aqcn_col p b{
-	text-align: center;
-	font-size: 14px;
-	color: #ff0000;
-	display: block;
-	padding: 5px 0px 0px 0px;
-}
-.qkq_csnl{
-	height: 360px;
-	overflow-y: scroll;
-}
-.qkq_csnl li{
-	padding: 8px 0px;
-	cursor: pointer;
-}
-.qkq_csnl li:hover{
-	background: rgba(0, 102, 197, 0.2);
-}
-.qkq_csnl li h4{
-	font-size: 16px;
-	color: #fff;
-	line-height: 25px;
-}
-.qkq_csnl li p{
-	font-size: 14px;
-	color: #c4dce8;
-	line-height: 25px;
-	padding-left: 8px;
-}
-.qkq_csnl li h4 span.blue{
-	font-weight: 900;
-	color: #0055ff;
+}
+.qkq_aqcn{
+	display: flex;
+	flex-direction: row;
+}
+#qkq_aqcn_chart{
+	width: 160px;
+	height: 120px;
+}
+.qkq_aqcn_txt{
+	margin-top: 10px;
+	width: 150px;
+}
+.qkq_aqcn_txt p{
+	height: 40px;
+	line-height: 40px;
+	border-bottom: 1px dashed #ccc;
+	font-size: 16px;
+	color: #fff;
+}
+.qkq_aqcn_txt p span{
+	float:right;
+	color: #0095ff;
+}
+.qkq_aqcn_col{
+	display: flex;
+	flex-direction: row;
+	justify-content: space-around;
+	padding: 15px 10px;
+	margin-top: 15px;
+	background: rgba(0, 102, 197, 0.2);
+	border-radius: 4px;
+	box-shadow: inset 0px 0px 8px rgba(0, 102, 197, 0.9);
+}
+.qkq_aqcn_col p{
+	text-align: center;
+	font-size: 14px;
+	color: #fff;
+}
+.qkq_aqcn_col p b{
+	text-align: center;
+	font-size: 14px;
+	color: #ff0000;
+	display: block;
+	padding: 5px 0px 0px 0px;
+}
+.qkq_csnl{
+	height: 360px;
+	overflow-y: scroll;
+}
+.qkq_csnl li{
+	padding: 8px 0px;
+	cursor: pointer;
+}
+.qkq_csnl li:hover{
+	background: rgba(0, 102, 197, 0.2);
+}
+.qkq_csnl li h4{
+	font-size: 16px;
+	color: #fff;
+	line-height: 25px;
+}
+.qkq_csnl li p{
+	font-size: 14px;
+	color: #c4dce8;
+	line-height: 25px;
+	padding-left: 8px;
+}
+.qkq_csnl li h4 span.blue{
+	font-weight: 900;
+	color: #0055ff;
 }
 
 /* fwyq */
@@ -1103,7 +1106,7 @@ border-radius: 2px;
 	z-index: 999;
 	display: flex;
 	flex-direction: row;
-}
+}
 .qkq_con2{
 	left: 60px;
 	top:90px;
@@ -1486,7 +1489,7 @@ border-radius: 2px;
 	background: url(../images/qkq_top.png) no-repeat center;
 	width: 40%;
 	height: 100%;
-	background-size: 60%;
+	background-size: 60%;
 	height: 200px;
 }
 .qkq_bjzs_bg{
@@ -1546,11 +1549,11 @@ padding: 0px;
 padding: 0px;
 color: #00ffff;
 padding-right: 10px;
-}
-.qkq_bjzs_txt_fl{
-	display: flex;
-	flex-direction: row;
-	justify-content: space-between;
+}
+.qkq_bjzs_txt_fl{
+	display: flex;
+	flex-direction: row;
+	justify-content: space-between;
 }
 .qkq_bjzs_txt_fr p{
 	text-align: right!important;
@@ -1568,46 +1571,46 @@ padding-right: 10px;
 }
 .qkq_bjs p{
 	color: #fff;
-	line-height: 30px;
-	height: 90px;
-	display: flex;
-	flex-direction: column;
-	padding-top: 10px;
+	line-height: 30px;
+	height: 90px;
+	display: flex;
+	flex-direction: column;
+	padding-top: 10px;
 	margin: 12px auto;
-}
+}
 .qkq_bjs p b i{
-	color: #fff;
-	font-size: 12px;
+	color: #fff;
+	font-size: 12px;
 	padding-left: 10px;
-}
-.qkq_bjs img{
-	height: 70px;
+}
+.qkq_bjs img{
+	height: 70px;
 }
 .qkq_bjs p b{
 	color: #fff;
 	font-size: 24px;
 	padding-top: 31px;
-	color: #fff;
-	display: flex;
-	flex-direction: row;
+	color: #fff;
+	display: flex;
+	flex-direction: row;
 	padding-bottom: 20px;
-}
-.qkq_bjss{
-	padding-top: 50px;
-	width: 200px;
-	margin: 0px 20px;
-	text-align: center;
-}
-.qkq_bjss:nth-child(1){
-	background: url(../images/qkq_icon25.png) no-repeat center;
-	background-size: 98%;
-	position: relative;
-}
-.qkq_bjs:nth-child(2){
-	background: url(../images/qkq_icon26.png) no-repeat center;
-background-size: 92%;
-position: relative;
-}
+}
+.qkq_bjss{
+	padding-top: 50px;
+	width: 200px;
+	margin: 0px 20px;
+	text-align: center;
+}
+.qkq_bjss:nth-child(1){
+	background: url(../images/qkq_icon25.png) no-repeat center;
+	background-size: 98%;
+	position: relative;
+}
+.qkq_bjs:nth-child(2){
+	background: url(../images/qkq_icon26.png) no-repeat center;
+background-size: 92%;
+position: relative;
+}
 
 #qkq_bj4{
 	width: 100%;
@@ -1667,44 +1670,47 @@ display: block;
 }
 .qkq_sxtop p:nth-child(3) i{
 	background: #ffca5e;
-}
-.qkq_gc_div{
-	float: left;
-	width: 50%;
-	height: 90px;
-	padding-top: 15px;
-	padding-left: 3%;
-}
-.qkq_gc_div p{
-	text-align: left;
-	color: #fff;
-	margin-bottom: 10px;
-	font-size: 14px;
-}
-.qkq_gc_div p b{
-	font-size: 26px;
-	color: #00ffff;
-	padding-right: 7px;
-}
-.qkq_gc_con{
-	background:#1b232f;
-}
-#qkq_bjs_01{
-	width: 200px;
-	height: 200px;
-}
-#qkq_bjs_02{
-	width: 100%;
-	height: 200px;
-}
-
-
-
-/* 弹框 */
-.el-dialog{
-	width: 92%!important;
-	height: 92vh;
-}
+}
+.qkq_gc_div{
+	float: left;
+	width: 50%;
+	height: 90px;
+	padding-top: 15px;
+	padding-left: 3%;
+}
+.qkq_gc_div p{
+	text-align: left;
+	color: #fff;
+	margin-bottom: 10px;
+	font-size: 14px;
+}
+.qkq_gc_div p b{
+	font-size: 26px;
+	color: #00ffff;
+	padding-right: 7px;
+}
+.qkq_gc_con{
+	background:#1b232f;
+}
+#qkq_bjs_01{
+	width: 200px;
+	height: 200px;
+}
+#qkq_bjs_02{
+	width: 100%;
+	height: 200px;
+}
+
+
+
+/* 弹框 */
+.el-dialog{
+	width: 92%!important;
+	height: 92vh;
+}
 .el-dialog:not(.is-fullscreen) {
     margin-top: 3vh !important;
-}
+}
+.el-dialog__body{
+  padding: 8px 20px;
+}

+ 23 - 10
zhsq_qk-ui/src/views/fusion/jczl.vue

@@ -3,7 +3,7 @@
     <div class="map">
       <!--      <img src="@/assets/images/sprh-map.png"/>-->
       <supermap ref="supermap" style="height: 100%;width: 100%;position: absolute;z-index: 0;"
-                :yxtSltProps="sltProps"></supermap>
+                :yxtSltProps="sltProps" :pageType="pageType"></supermap>
     </div>
     <!-- 阴影背景 -->
     <div class="bj_left"><img src="@/assets/images/sprhbj-left.png"/></div>
@@ -25,8 +25,8 @@
     <div class="left_con">
       <div class="top_txt">
         <b>汽开区</b>
-<!--        <span>小雨</span>-->
-<!--        <span>9~16℃</span>-->
+        <!--        <span>小雨</span>-->
+        <!--        <span>9~16℃</span>-->
       </div>
       <!-- 便民服务 -->
       <div class="qkq_bmfw">
@@ -88,14 +88,14 @@
         <div class="qkq_mssq_div" @click="appealReport">
           <img src="../../assets/images/qkq_icon22.png"/>
           <div class="qkq_mssq_txt">
-            <p>240</p>
+            <p>{{ appeal.countReport }}</p>
             <span>诉求已上报</span>
           </div>
         </div>
-        <div class="qkq_mssq_div">
+        <div class="qkq_mssq_div" @click="appealHandle">
           <img src="../../assets/images/qkq_icon.png"/>
           <div class="qkq_mssq_txt">
-            <p>240</p>
+            <p>{{ appeal.countHandle }}</p>
             <span>诉求已处理</span>
           </div>
         </div>
@@ -265,22 +265,26 @@ import "@/assets/images/qkq_index.css";
 import "@/assets/images/qkq_sprh.css";
 import supermap from "@/views/supermap/supermap";
 import jczlDetails from "@/views/fusion/jczlDetails";
+import {getAppeal, selectPeopleAppealCount} from "@/api/system/appeal";
 
 export default {
   name: "jczl",
-  components: {supermap,jczlDetails},
+  components: {supermap, jczlDetails},
   data() {
     return {
       currentTime: '',
       sltProps: null,
       btnOne: true,
-      btnTwo: false
+      btnTwo: false,
+      pageType: 'jtzl',
+      appeal: {}
     }
   },
 
   created() {
   },
   mounted() {
+    this.selectPeopleAppealCount();
     this.regionTop();
     this.trend();
     this.matterUpTop();
@@ -295,8 +299,17 @@ export default {
     }, 1000);
   },
   methods: {
-    appealReport(){
-      alert("诉求已上报")
+    selectPeopleAppealCount() {
+      selectPeopleAppealCount().then(response => {
+        this.appeal = response.data;
+      });
+    },
+    appealReport() {
+      this.$refs.jczlDetails.selectAllListAppeal(0)
+      this.$refs.jczlDetails.detailsOpen = true
+    },
+    appealHandle() {
+      this.$refs.jczlDetails.selectAllListAppeal(1)
       this.$refs.jczlDetails.detailsOpen = true
     },
     sltHandle() {

+ 77 - 114
zhsq_qk-ui/src/views/fusion/jczlDetails.vue

@@ -1,111 +1,56 @@
 <template>
   <div style="background-color: #32435A">
-    <el-dialog title="详情" :visible.sync="detailsOpen" append-to-body >
+    <el-dialog title="详情" :visible.sync="detailsOpen" append-to-body>
       <div style="display: flex;position: relative;">
-      <div class="left_con left_con2" style="position:absolute;top:0px;">
-        <ul class="ms_list scrollbar">
-          <li>
-            <div class="ms_tit">
-              <img src="../../assets/images/qikai.png"/>
-              <div class="ms_txt">
-                <h4>这是民生诉求的标题展示位置这是民生诉求的标题展示位置</h4>
-                <p>
-                  这是民生诉求的详细描述说明,这是说明2024年8月6日09:29:51,当前位置也是这样不用理会,这是民生诉求的详细描述说明,这是说明2024年8月6日09:29:51,当前位置也是这样不用理会,当前位置也是这样不用理会,看看就好...
-                </p>
+        <div class="left_con left_con2" style="position:absolute;top:0px;">
+          <ul class="ms_list scrollbar">
+            <li v-for="(item, index) in appealList" :key="index"
+                @click="onAppealClick(item)">
+              <div class="ms_tit">
+                <img :src="getImgUrl(item.appearImagesList[0])"/>
+                <div class="ms_txt">
+                  <h4>{{ item.appealName }}</h4>
+                  <p>{{ item.appealDescribe }}</p>
+                </div>
               </div>
-            </div>
-          </li>
-          <li>
-            <div class="ms_tit">
-              <img src="../../assets/images/qikai.png"/>
-              <div class="ms_txt">
-                <h4>这是民生诉求的标题展示位置这是民生诉求的标题展示位置</h4>
-                <p>
-                  这是民生诉求的详细描述说明,这是说明2024年8月6日09:29:51,当前位置也是这样不用理会,这是民生诉求的详细描述说明,这是说明2024年8月6日09:29:51,当前位置也是这样不用理会,当前位置也是这样不用理会,看看就好...
-                </p>
-              </div>
-            </div>
-          </li>
-          <li>
-            <div class="ms_tit">
-              <img src="../../assets/images/qikai.png"/>
-              <div class="ms_txt">
-                <h4>这是民生诉求的标题展示位置这是民生诉求的标题展示位置</h4>
-                <p>
-                  这是民生诉求的详细描述说明,这是说明2024年8月6日09:29:51,当前位置也是这样不用理会,这是民生诉求的详细描述说明,这是说明2024年8月6日09:29:51,当前位置也是这样不用理会,当前位置也是这样不用理会,看看就好...
-                </p>
-              </div>
-            </div>
-          </li>
-          <li>
-            <div class="ms_tit">
-              <img src="../../assets/images/qikai.png"/>
-              <div class="ms_txt">
-                <h4>这是民生诉求的标题展示位置这是民生诉求的标题展示位置</h4>
-                <p>
-                  这是民生诉求的详细描述说明,这是说明2024年8月6日09:29:51,当前位置也是这样不用理会,这是民生诉求的详细描述说明,这是说明2024年8月6日09:29:51,当前位置也是这样不用理会,当前位置也是这样不用理会,看看就好...
-                </p>
+            </li>
+          </ul>
+        </div>
+        <!--左侧结束-->
+        <!--右侧开始-->
+        <div class="right_con right_con2" style="position:absolute;top:0px;">
+          <div class="ms_right">
+            <div class="ms_right_top">
+              <div class="ms_img">
+                <el-carousel :interval="5000" arrow="always">
+                  <el-carousel-item v-for="(item, index) in images" :key="index">
+                    <img :src="item"/>
+                  </el-carousel-item>
+                </el-carousel>
               </div>
-            </div>
-          </li>
-          <li>
-            <div class="ms_tit">
-              <img src="../../assets/images/qikai.png"/>
-              <div class="ms_txt">
-                <h4>这是民生诉求的标题展示位置这是民生诉求的标题展示位置</h4>
-                <p>
-                  这是民生诉求的详细描述说明,这是说明2024年8月6日09:29:51,当前位置也是这样不用理会,这是民生诉求的详细描述说明,这是说明2024年8月6日09:29:51,当前位置也是这样不用理会,当前位置也是这样不用理会,看看就好...
-                </p>
+              <div class="mssq_txt">
+                <h4>{{ form.appealName }}</h4>
+                <div class="mssq_txt_p">
+                  <p>
+                    <span>事件时间:{{ form.appearTime }}</span>
+                    <span>事件分类:{{ form.evenTypeName }}</span>
+                  </p>
+                  <p>
+                    <span>上报人:{{ form.appearUserName }}</span>
+                    <span>联系方式:{{ form.appearPhone }}</span>
+                  </p>
+                  <p>事件位置:{{ form.appearAddress }}</p>
+                </div>
               </div>
+
             </div>
-          </li>
-        </ul>
-      </div>
-      <!--左侧结束-->
-      <!--右侧开始-->
-      <div class="right_con right_con2"  style="position:absolute;top:0px;">
-        <div class="ms_right">
-          <div class="ms_right_top">
-            <div class="ms_img">
-              <el-carousel :interval="5000" arrow="always">
-                <el-carousel-item v-for="(image, index) in images" :key="index">
-                  <img
-                    :src="image.src"
-                  />
-                </el-carousel-item>
-              </el-carousel>
-            </div>
-            <div class="mssq_txt">
-              <h4>这是民生诉求的标题展示位置这是民生诉求的标题展示位置</h4>
-              <div class="mssq_txt_p">
-                <p>
-                  <span>事件时间:8月6日13:07:35</span>
-                  <span>事件分类:电梯安全</span>
-                </p>
-                <p>
-                  <span>上报人:刘美红</span>
-                  <span>联系方式:18652636965</span>
-                </p>
-                <p>事件位置:长春市汽开区万达广场B座</p>
-              </div>
+            <div class="mssq_btm_txt">
+              <h4>具体诉求:</h4>
+              <p class="scrollbar">{{ form.appealDescribe }}</p>
             </div>
-
-          </div>
-          <div class="mssq_btm_txt">
-            <h4>具体诉求:</h4>
-            <p class="scrollbar">民办培训学校办学层次、专业(工种)变更的,应通过审批机关审核批准。申请时需提交以下材料:
-              <br>(一)变更办学层次、专业(工种)的报告及决策机构同意的书面材料;
-              <br>(二)《吉林省民办职业培训学校变更审批表》;
-              <br>(三)《办学许可证》(正、副本)。
-              <br>(四)本办法第十二条第(六)、(九)、(十)款要求材料。
-              <br> 第十二条 申请正式设立民办学校应提交以下材料:
-              <br>(六)拟聘理论教师、实习指导教师的身份、学历、资格证明材料的复印件;
-              <br>(九)满足教学和实训需要的主要设施、设备的清单;<br> (十)开展相应职业(工种)培训的教学计划、教学大纲和相应的教材目录;
-            </p>
           </div>
         </div>
       </div>
-	  </div>
     </el-dialog>
   </div>
 </template>
@@ -114,6 +59,7 @@
 import "@/assets/images/qkq_body.css";
 import "@/assets/images/qkq_index.css";
 import "@/assets/images/qkq_sprh.css";
+import {allListAppeal} from "@/api/system/appeal";
 
 export default {
   name: "jczlDetails",
@@ -121,25 +67,42 @@ export default {
   data() {
     return {
       detailsOpen: false,
-      images: [
-        {
-          src: require('@/assets/images/qikai.png')
-        },
-        {
-          src: '@/assets/images/login-back2.png'
-        },
-        {
-          src: '@/assets/images/login-background.png'
-        },
-        {
-          src: '@/assets/images/qikai.png'
-        },
-      ]
+      appealList: [],
+      form: {},
+      baseUrl: process.env.VUE_APP_BASE_API,
+      images: []
+    }
+  },
+  created() {
+  },
+  mounted() {
+  },
+  methods: {
+    getImgUrl(val) {
+      return this.baseUrl + val
+    },
+    selectAllListAppeal(val) {
+      let params = {
+        status: val
+      }
+      allListAppeal(params).then(response => {
+        this.appealList = response.data;
+        this.form = this.appealList[0]
+        this.listToString(this.form.appearImagesList)
+      });
+    },
+    onAppealClick(val) {
+      this.form = val
+      this.listToString(this.form.appearImagesList)
+    },
+    // 对象转成指定字符串分隔
+    listToString(list) {
+      this.images = []
+      for (let i = 0; i < list.length; i++) {
+        this.images.push(this.baseUrl + list[i])
+      }
     }
   },
-  created() {},
-  mounted() {},
-  methods: {},
 };
 </script>
 

+ 71 - 43
zhsq_qk-ui/src/views/system/appeal/index.vue

@@ -83,7 +83,11 @@
           <dict-tag :options="dict.type.even_type" :value="scope.row.evenType"/>
         </template>
       </el-table-column>
-      <el-table-column label="诉求是否处理" align="center" prop="status"/>
+      <el-table-column label="诉求处理状态" align="center" prop="status">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.appeal_status" :value="scope.row.status"/>
+        </template>
+      </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -113,44 +117,55 @@
     />
 
     <!-- 添加或修改民生诉求对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="108px">
-        <el-form-item label="诉求标题" prop="appealName">
-          <el-input v-model="form.appealName" placeholder="请输入诉求标题"/>
-        </el-form-item>
-        <el-form-item label="诉求描述" prop="appealDescribe">
-          <el-input v-model="form.appealDescribe" type="textarea" placeholder="请输入诉求描述"/>
-        </el-form-item>
-        <el-form-item label="上报时间" prop="appearTime">
-          <el-date-picker clearable
-                          v-model="form.appearTime"
-                          type="datetime"
-                          value-format="yyyy-MM-dd hh:mm:ss"
-                          placeholder="请选择上报时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="上报人姓名" prop="appearUserName">
-          <el-input v-model="form.appearUserName" placeholder="请输入上报人姓名"/>
-        </el-form-item>
-        <el-form-item label="上报联系方式" prop="appearPhone">
-          <el-input v-model="form.appearPhone" placeholder="请输入上报联系方式"/>
-        </el-form-item>
-        <el-form-item label="上报位置" prop="appearAddress">
-          <el-input v-model="form.appearAddress" placeholder="请输入上报位置"/>
-        </el-form-item>
-        <el-form-item label="事件分类" prop="evenType">
-          <el-select v-model="form.evenType" placeholder="请选择事件分类">
-            <el-option
-              v-for="dict in dict.type.even_type"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="图片" prop="appearImages">
-          <image-upload v-model="form.appearImages"/>
-        </el-form-item>
+    <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
+      <el-form ref="form" :model="form" :inline="true" :rules="rules" label-width="108px">
+
+            <el-form-item label="诉求标题" prop="appealName">
+              <el-input v-model="form.appealName" placeholder="请输入诉求标题"/>
+            </el-form-item>
+          <el-form-item label="上报时间" prop="appearTime">
+            <el-date-picker clearable
+                            v-model="form.appearTime"
+                            type="datetime"
+                            value-format="yyyy-MM-dd hh:mm:ss"
+                            placeholder="请选择上报时间">
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="上报人姓名" prop="appearUserName">
+            <el-input v-model="form.appearUserName" placeholder="请输入上报人姓名"/>
+          </el-form-item>
+          <el-form-item label="上报联系方式" prop="appearPhone">
+            <el-input v-model="form.appearPhone" placeholder="请输入上报联系方式" style="width: 220px"/>
+          </el-form-item>
+          <el-form-item label="上报位置" prop="appearAddress">
+            <el-input v-model="form.appearAddress" placeholder="请输入上报位置"/>
+          </el-form-item>
+          <el-form-item label="事件分类" prop="evenType">
+            <el-select v-model="form.evenType" placeholder="请选择事件分类">
+              <el-option
+                v-for="dict in dict.type.even_type"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item v-show="appealStatus" label="诉求处理状态" prop="status">
+            <el-select v-model="form.status" placeholder="请选择诉求处理状态">
+              <el-option
+                v-for="dict in dict.type.appeal_status"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="诉求描述" prop="appealDescribe">
+            <el-input v-model="form.appealDescribe" type="textarea" placeholder="请输入诉求描述" style="width: 540px"/>
+          </el-form-item>
+          <el-form-item label="图片" prop="appearImages">
+            <image-upload :limit="5" v-model="form.appearImages"/>
+          </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -165,7 +180,7 @@ import {addAppeal, delAppeal, getAppeal, listAppeal, updateAppeal} from "@/api/s
 
 export default {
   name: "Appeal",
-  dicts: ["even_type"],
+  dicts: ["even_type", "appeal_status"],
   data() {
     return {
       // 遮罩层
@@ -202,17 +217,18 @@ export default {
       },
       // 表单参数
       form: {
-        appearImages:[]
+        appearImages: []
       },
+      appealStatus: false,
       // 表单校验
       rules: {
         appealName: [
           {required: true, message: "诉求标题不能为空", trigger: "blur"},
-          { max: 50, message: '诉求标题最多可以输入50个字符', trigger: 'blur' }
+          {max: 50, message: '诉求标题最多可以输入50个字符', trigger: 'blur'}
         ],
         appealDescribe: [
           {required: true, message: "诉求描述不能为空", trigger: "blur"},
-          { max: 250, message: '诉求描述最多可以输入250个字符', trigger: 'blur' }
+          {max: 250, message: '诉求描述最多可以输入250个字符', trigger: 'blur'}
         ],
         appearTime: [
           {required: true, message: "上报时间不能为空", trigger: "change"},
@@ -222,6 +238,11 @@ export default {
         ],
         appearPhone: [
           {required: true, message: "上报联系方式不能为空", trigger: "blur"},
+          {
+            pattern: /^1[0-9][0-9]\d{8}$/,
+            message: "请输入正确的手机号码",
+            trigger: "blur"
+          }
         ],
         appearAddress: [
           {required: true, message: "上报位置不能为空", trigger: "blur"},
@@ -229,6 +250,9 @@ export default {
         evenType: [
           {required: true, message: "事件分类不能为空", trigger: "blur"},
         ],
+        status: [
+          {required: true, message: "诉求处理状态不能为空", trigger: "blur"},
+        ],
         appearImages: [
           {required: true, message: "图片不能为空,至少上传一张", trigger: "blur"},
         ],
@@ -293,11 +317,15 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
+      this.appealStatus = false
+      this.rules.status[0].required = false
       this.open = true;
       this.title = "添加民生诉求";
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
+      this.appealStatus = true
+      this.rules.status[0].required = true
       this.reset();
       const id = row.id || this.ids
       getAppeal(id).then(response => {