浏览代码

大走访问题诉求+流程操作记录

yin_yu820 2 月之前
父节点
当前提交
6423f4ba26
共有 33 个文件被更改,包括 2970 次插入16 次删除
  1. 152 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/dzfoprecord/controller/DzfQuestionOpRecordController.java
  2. 114 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/dzfoprecord/domain/DzfQuestionOpRecord.java
  3. 37 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/dzfoprecord/mapper/DzfQuestionOpRecordMapper.java
  4. 57 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/dzfoprecord/mapper/xml/DzfQuestionOpRecordMapper.xml
  5. 45 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/dzfoprecord/service/DzfQuestionOpRecordService.java
  6. 161 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/dzfoprecord/service/dto/DzfQuestionOpRecordDTO.java
  7. 38 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/dzfoprecord/service/mapstruct/DzfQuestionOpRecordWrapper.java
  8. 12 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/controller/EnterpriseInfoController.java
  9. 2 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/mapper/EnterpriseInfoMapper.java
  10. 6 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/mapper/xml/EnterpriseInfoMapper.xml
  11. 4 1
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/service/EnterpriseInfoService.java
  12. 152 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/controller/DzfQuestionController.java
  13. 103 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/domain/DzfQuestion.java
  14. 111 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/domain/DzfQuestionDetil.java
  15. 17 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/mapper/DzfQuestionDetilMapper.java
  16. 37 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/mapper/DzfQuestionMapper.java
  17. 6 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/mapper/xml/DzfQuestionDetilMapper.xml
  18. 57 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/mapper/xml/DzfQuestionMapper.xml
  19. 35 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/service/DzfQuestionDetilService.java
  20. 87 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/service/DzfQuestionService.java
  21. 158 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/service/dto/DzfQuestionDTO.java
  22. 110 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/service/dto/DzfQuestionDetilDTO.java
  23. 38 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/service/mapstruct/DzfQuestionDetilWrapper.java
  24. 36 0
      jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/service/mapstruct/DzfQuestionWrapper.java
  25. 2 2
      jp-console/jeeplus-web/src/main/resources/application-production.yml
  26. 60 0
      jp-ui/src/api/dzfoprecord/dzfQuestionOpRecordService.js
  27. 60 0
      jp-ui/src/api/question/dzfQuestionService.js
  28. 4 13
      jp-ui/src/components/qySelect/QySelectDialog.vue
  29. 1 0
      jp-ui/src/components/qySelect/index.vue
  30. 261 0
      jp-ui/src/views/modules/dzfoprecord/DzfQuestionOpRecordForm.vue
  31. 362 0
      jp-ui/src/views/modules/dzfoprecord/DzfQuestionOpRecordList.vue
  32. 260 0
      jp-ui/src/views/modules/question/DzfQuestionForm.vue
  33. 385 0
      jp-ui/src/views/modules/question/DzfQuestionList.vue

+ 152 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/dzfoprecord/controller/DzfQuestionOpRecordController.java

@@ -0,0 +1,152 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.dzfoprecord.controller;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import com.google.common.collect.Lists;
+import com.jeeplus.core.excel.EasyExcelUtils;
+import com.jeeplus.core.excel.ExcelOptions;
+import com.jeeplus.core.excel.annotation.ExportMode;
+import com.jeeplus.core.query.QueryWrapperGenerator;
+import com.jeeplus.aop.logging.annotation.ApiLog;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.dzfoprecord.service.dto.DzfQuestionOpRecordDTO;
+import com.jeeplus.dzfoprecord.service.mapstruct.DzfQuestionOpRecordWrapper;
+import com.jeeplus.dzfoprecord.service.DzfQuestionOpRecordService;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * 处理操作流程Controller
+ * @author 尹宇
+ * @version 2025-04-09
+ */
+
+@Api(tags ="处理操作流程")
+@RestController
+@RequestMapping(value = "/dzfoprecord/dzfQuestionOpRecord")
+public class DzfQuestionOpRecordController {
+
+	@Autowired
+	private DzfQuestionOpRecordService dzfQuestionOpRecordService;
+
+	@Autowired
+	private DzfQuestionOpRecordWrapper dzfQuestionOpRecordWrapper;
+
+	/**
+	 * 处理操作流程列表数据
+	 */
+	@ApiLog("查询处理操作流程列表数据")
+	@ApiOperation(value = "查询处理操作流程列表数据")
+	@PreAuthorize("hasAuthority('dzfoprecord:dzfQuestionOpRecord:list')")
+	@GetMapping("list")
+	public ResponseEntity<IPage<DzfQuestionOpRecordDTO>> list(DzfQuestionOpRecordDTO dzfQuestionOpRecordDTO, Page<DzfQuestionOpRecordDTO> page) throws Exception {
+		QueryWrapper queryWrapper = QueryWrapperGenerator.buildQueryCondition (dzfQuestionOpRecordDTO, DzfQuestionOpRecordDTO.class);
+		IPage<DzfQuestionOpRecordDTO> result = dzfQuestionOpRecordService.findPage (page, queryWrapper);
+		return ResponseEntity.ok (result);
+	}
+
+
+	/**
+	 * 根据Id获取处理操作流程数据
+	 */
+	@ApiLog("根据Id获取处理操作流程数据")
+	@ApiOperation(value = "根据Id获取处理操作流程数据")
+	@PreAuthorize("hasAnyAuthority('dzfoprecord:dzfQuestionOpRecord:view','dzfoprecord:dzfQuestionOpRecord:add','dzfoprecord:dzfQuestionOpRecord:edit')")
+	@GetMapping("queryById")
+	public ResponseEntity<DzfQuestionOpRecordDTO> queryById(String id) {
+		return ResponseEntity.ok ( dzfQuestionOpRecordService.findById ( id ) );
+	}
+
+	/**
+	 * 保存处理操作流程
+	 */
+	@ApiLog("保存处理操作流程")
+	@ApiOperation(value = "保存处理操作流程")
+	@PreAuthorize("hasAnyAuthority('dzfoprecord:dzfQuestionOpRecord:add','dzfoprecord:dzfQuestionOpRecord:edit')")
+	@PostMapping("save")
+	public  ResponseEntity <String> save(@Valid @RequestBody DzfQuestionOpRecordDTO dzfQuestionOpRecordDTO) {
+		//新增或编辑表单保存
+		dzfQuestionOpRecordService.saveOrUpdate (dzfQuestionOpRecordWrapper.toEntity (dzfQuestionOpRecordDTO));
+        return ResponseEntity.ok ( "保存处理操作流程成功" );
+	}
+
+
+	/**
+	 * 删除处理操作流程
+	 */
+	@ApiLog("删除处理操作流程")
+	@ApiOperation(value = "删除处理操作流程")
+	@PreAuthorize("hasAuthority('dzfoprecord:dzfQuestionOpRecord:del')")
+	@DeleteMapping("delete")
+	public ResponseEntity <String> delete(String ids) {
+		String idArray[] = ids.split(",");
+        dzfQuestionOpRecordService.removeByIds ( Lists.newArrayList ( idArray ) );
+		return ResponseEntity.ok( "删除处理操作流程成功" );
+	}
+	
+	/**
+     * 导出处理操作流程数据
+     *
+     * @param dzfQuestionOpRecordDTO
+     * @param page
+     * @param response
+     * @throws Exception
+     */
+    @ApiLog("导出处理操作流程数据")
+    @PreAuthorize("hasAnyAuthority('dzfoprecord:dzfQuestionOpRecord:export')")
+    @GetMapping("export")
+    public void exportFile(DzfQuestionOpRecordDTO dzfQuestionOpRecordDTO, Page <DzfQuestionOpRecordDTO> page, ExcelOptions options, HttpServletResponse response) throws Exception {
+        String fileName = options.getFilename ( );
+		QueryWrapper queryWrapper = QueryWrapperGenerator.buildQueryCondition (dzfQuestionOpRecordDTO, DzfQuestionOpRecordDTO.class);
+        if ( ExportMode.current.equals ( options.getMode ( ) ) ) { // 导出当前页数据
+            
+        } else if ( ExportMode.selected.equals ( options.getMode ( ) ) ) { // 导出选中数据
+            queryWrapper.in ( "a.id", options.getSelectIds () );
+        } else { // 导出全部数据
+            page.setSize ( -1 );
+            page.setCurrent ( 0 );
+        }
+        List<DzfQuestionOpRecordDTO> result = dzfQuestionOpRecordService.findPage ( page, queryWrapper ).getRecords ( );
+        EasyExcelUtils.newInstance ( dzfQuestionOpRecordService, dzfQuestionOpRecordWrapper ).exportExcel ( result,  options.getSheetName ( ), DzfQuestionOpRecordDTO.class, fileName,options.getExportFields (), response );
+    }
+
+    /**
+     * 导入处理操作流程数据
+     *
+     * @return
+     */
+    @PreAuthorize("hasAnyAuthority('dzfoprecord:dzfQuestionOpRecord:import')")
+    @PostMapping("import")
+    public ResponseEntity importFile(MultipartFile file) throws IOException {
+        String result = EasyExcelUtils.newInstance ( dzfQuestionOpRecordService, dzfQuestionOpRecordWrapper ).importExcel ( file, DzfQuestionOpRecordDTO.class );
+        return ResponseEntity.ok ( result );
+    }
+
+    /**
+     * 下载导入处理操作流程数据模板
+     *
+     * @param response
+     * @return
+     */
+    @PreAuthorize ("hasAnyAuthority('dzfoprecord:dzfQuestionOpRecord:import')")
+    @GetMapping("import/template")
+    public void importFileTemplate(HttpServletResponse response) throws IOException {
+        String fileName = "处理操作流程数据导入模板.xlsx";
+        List<DzfQuestionOpRecordDTO> list = Lists.newArrayList();
+        EasyExcelUtils.newInstance ( dzfQuestionOpRecordService, dzfQuestionOpRecordWrapper ).exportExcel ( list,  "处理操作流程数据", DzfQuestionOpRecordDTO.class, fileName, null, response );
+    }
+
+}

+ 114 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/dzfoprecord/domain/DzfQuestionOpRecord.java

@@ -0,0 +1,114 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.dzfoprecord.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+/**
+ * 处理操作流程Entity
+ * @author 尹宇
+ * @version 2025-04-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("dzf_question_op_record")
+public class DzfQuestionOpRecord extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+     * 关联id
+     */
+	private String recordId;
+	/**
+     * 关联类型
+     */
+	private String recordType;
+	/**
+     * 操作类型
+     */
+	private String opType;
+	/**
+     * 操作类型名称
+     */
+	private String opTypeName;
+	/**
+     * 角色ID
+     */
+	private String roleId;
+	/**
+     * 角色名称
+     */
+	private String roleName;
+	/**
+     * 角色等级
+     */
+	private String roleLevel;
+	/**
+     * 备用1
+     */
+	private String des1;
+	/**
+     * 备用2
+     */
+	private String des2;
+	/**
+     * 备用3
+     */
+	private String des3;
+	/**
+     * 备用4
+     */
+	private String des4;
+	/**
+     * 备用5
+     */
+	private String des5;
+	/**
+     * 备用6
+     */
+	private String des6;
+	/**
+     * 备用7
+     */
+	private String des7;
+	/**
+     * 备用8
+     */
+	private String des8;
+	/**
+     * 备用9
+     */
+	private String des9;
+	/**
+     * 创建人名称
+     */
+    @TableField("create_by_name")
+	private String createByNameId;
+	/**
+     * 创建人手机号码
+     */
+	private String phoneNumber;
+	/**
+     * 创建时间
+     */
+	private Date createTime;
+	/**
+     * 更新时间
+     */
+	private Date updateTime;
+	/**
+     * 备注
+     */
+	private String remarks;
+	/**
+     * pre_time
+     */
+	private Date preTime;
+
+}

+ 37 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/dzfoprecord/mapper/DzfQuestionOpRecordMapper.java

@@ -0,0 +1,37 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.dzfoprecord.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.dzfoprecord.service.dto.DzfQuestionOpRecordDTO;
+import com.jeeplus.dzfoprecord.domain.DzfQuestionOpRecord;
+
+/**
+ * 处理操作流程MAPPER接口
+ * @author 尹宇
+ * @version 2025-04-09
+ */
+public interface DzfQuestionOpRecordMapper extends BaseMapper<DzfQuestionOpRecord> {
+
+    /**
+     * 根据id获取处理操作流程
+     * @param id
+     * @return
+     */
+    DzfQuestionOpRecordDTO findById(String id);
+
+    /**
+     * 获取处理操作流程列表
+     *
+     * @param queryWrapper
+     * @return
+     */
+    IPage <DzfQuestionOpRecordDTO> findList(Page <DzfQuestionOpRecordDTO> page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper);
+
+}

+ 57 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/dzfoprecord/mapper/xml/DzfQuestionOpRecordMapper.xml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.dzfoprecord.mapper.DzfQuestionOpRecordMapper">
+
+	<sql id="dzfQuestionOpRecordColumns">
+		a.id AS "id",
+		a.record_id AS "recordId",
+		a.record_type AS "recordType",
+		a.op_type AS "opType",
+		a.op_type_name AS "opTypeName",
+		a.role_id AS "roleId",
+		a.role_name AS "roleName",
+		a.role_level AS "roleLevel",
+		a.des1 AS "des1",
+		a.des2 AS "des2",
+		a.des3 AS "des3",
+		a.des4 AS "des4",
+		a.des5 AS "des5",
+		a.des6 AS "des6",
+		a.des7 AS "des7",
+		a.des8 AS "des8",
+		a.des9 AS "des9",
+		a.create_by AS "createBy.id",
+		a.create_by_name AS "createByName.id",
+		a.phone_number AS "phoneNumber",
+		a.create_time AS "createTime",
+		a.update_by AS "updateBy.id",
+		a.update_time AS "updateTime",
+		a.del_flag AS "delFlag",
+		a.remarks AS "remarks",
+		a.pre_time AS "preTime"
+	</sql>
+
+	<sql id="dzfQuestionOpRecordJoins">
+
+		LEFT JOIN sys_user createByName ON createByName.id = a.create_by_name
+	</sql>
+
+
+
+	<select id="findById" resultType="com.jeeplus.dzfoprecord.service.dto.DzfQuestionOpRecordDTO">
+		SELECT
+			<include refid="dzfQuestionOpRecordColumns"/>
+		FROM dzf_question_op_record a
+		<include refid="dzfQuestionOpRecordJoins"/>
+		WHERE a.id = #{id} and a.del_flag = 0
+	</select>
+
+	<select id="findList" resultType="com.jeeplus.dzfoprecord.service.dto.DzfQuestionOpRecordDTO">
+		SELECT
+			<include refid="dzfQuestionOpRecordColumns"/>
+		FROM dzf_question_op_record a
+		<include refid="dzfQuestionOpRecordJoins"/>
+	    ${ew.customSqlSegment}
+	</select>
+
+</mapper>

+ 45 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/dzfoprecord/service/DzfQuestionOpRecordService.java

@@ -0,0 +1,45 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.dzfoprecord.service;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.dzfoprecord.service.dto.DzfQuestionOpRecordDTO;
+import com.jeeplus.dzfoprecord.domain.DzfQuestionOpRecord;
+import com.jeeplus.dzfoprecord.mapper.DzfQuestionOpRecordMapper;
+
+/**
+ * 处理操作流程Service
+ * @author 尹宇
+ * @version 2025-04-09
+ */
+@Service
+@Transactional
+public class DzfQuestionOpRecordService extends ServiceImpl<DzfQuestionOpRecordMapper, DzfQuestionOpRecord> {
+
+	/**
+	 * 根据id查询
+	 * @param id
+	 * @return
+	 */
+	public DzfQuestionOpRecordDTO findById(String id) {
+		return baseMapper.findById ( id );
+	}
+
+	/**
+	 * 自定义分页检索
+	 * @param page
+	 * @param queryWrapper
+	 * @return
+	 */
+	public IPage <DzfQuestionOpRecordDTO> findPage(Page <DzfQuestionOpRecordDTO> page, QueryWrapper queryWrapper) {
+		queryWrapper.eq ("a.del_flag", 0 ); // 排除已经删除
+		return  baseMapper.findList (page, queryWrapper);
+	}
+
+}

+ 161 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/dzfoprecord/service/dto/DzfQuestionOpRecordDTO.java

@@ -0,0 +1,161 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.dzfoprecord.service.dto;
+
+import com.jeeplus.sys.service.dto.UserDTO;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.jeeplus.core.excel.converter.ExcelUserDTOConverter;
+import com.jeeplus.core.service.dto.BaseDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+/**
+ * 处理操作流程DTO
+ * @author 尹宇
+ * @version 2025-04-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DzfQuestionOpRecordDTO extends BaseDTO {
+
+	private static final long serialVersionUID = 1L;
+
+	        
+	/**
+     * 关联id
+     */
+	@ExcelProperty("关联id") 
+	private String recordId;
+	        
+	/**
+     * 关联类型
+     */
+	@ExcelProperty("关联类型") 
+	private String recordType;
+	        
+	/**
+     * 操作类型
+     */
+	@ExcelProperty("操作类型") 
+	private String opType;
+	        
+	/**
+     * 操作类型名称
+     */
+	@ExcelProperty("操作类型名称") 
+	private String opTypeName;
+	        
+	/**
+     * 角色ID
+     */
+	@ExcelProperty("角色ID") 
+	private String roleId;
+	        
+	/**
+     * 角色名称
+     */
+	@ExcelProperty("角色名称") 
+	private String roleName;
+	        
+	/**
+     * 角色等级
+     */
+	@ExcelProperty("角色等级") 
+	private String roleLevel;
+	        
+	/**
+     * 备用1
+     */
+	@ExcelProperty("备用1") 
+	private String des1;
+	        
+	/**
+     * 备用2
+     */
+	@ExcelProperty("备用2") 
+	private String des2;
+	        
+	/**
+     * 备用3
+     */
+	@ExcelProperty("备用3") 
+	private String des3;
+	        
+	/**
+     * 备用4
+     */
+	@ExcelProperty("备用4") 
+	private String des4;
+	        
+	/**
+     * 备用5
+     */
+	@ExcelProperty("备用5") 
+	private String des5;
+	        
+	/**
+     * 备用6
+     */
+	@ExcelProperty("备用6") 
+	private String des6;
+	        
+	/**
+     * 备用7
+     */
+	@ExcelProperty("备用7") 
+	private String des7;
+	        
+	/**
+     * 备用8
+     */
+	@ExcelProperty("备用8") 
+	private String des8;
+	        
+	/**
+     * 备用9
+     */
+	@ExcelProperty("备用9") 
+	private String des9;
+	        
+	/**
+     * 创建人名称
+     */
+    @ExcelProperty(value = "创建人名称", converter = ExcelUserDTOConverter.class) 
+	private UserDTO createByName;
+	        
+	/**
+     * 创建人手机号码
+     */
+	@ExcelProperty("创建人手机号码") 
+	private String phoneNumber;
+	        
+	/**
+     * 创建时间
+     */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ExcelProperty("创建时间") 
+	private Date createTime;
+	        
+	/**
+     * 更新时间
+     */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ExcelProperty("更新时间") 
+	private Date updateTime;
+	        
+	/**
+     * 备注
+     */
+	@ExcelProperty("备注") 
+	private String remarks;
+	        
+	/**
+     * pre_time
+     */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ExcelProperty("pre_time") 
+	private Date preTime;
+
+}

+ 38 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/dzfoprecord/service/mapstruct/DzfQuestionOpRecordWrapper.java

@@ -0,0 +1,38 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.dzfoprecord.service.mapstruct;
+
+
+import com.jeeplus.core.mapstruct.EntityWrapper;
+import com.jeeplus.dzfoprecord.service.dto.DzfQuestionOpRecordDTO;
+import com.jeeplus.dzfoprecord.domain.DzfQuestionOpRecord;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.Mappings;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+
+/**
+ *  DzfQuestionOpRecordWrapper
+ * @author 尹宇
+ * @version 2025-04-09
+ */
+@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE, uses = {} )
+public interface DzfQuestionOpRecordWrapper extends EntityWrapper<DzfQuestionOpRecordDTO, DzfQuestionOpRecord> {
+
+    DzfQuestionOpRecordWrapper INSTANCE = Mappers.getMapper(DzfQuestionOpRecordWrapper.class);
+     @Mappings({
+            @Mapping(source = "createByName.id", target = "createByNameId"),
+            @Mapping(source = "createBy.id", target = "createBy"),
+            @Mapping (source = "updateBy.id", target = "updateBy")})
+    DzfQuestionOpRecord toEntity(DzfQuestionOpRecordDTO dto);
+
+
+    @Mappings({
+            @Mapping(source = "createByNameId", target = "createByName.id"),
+            @Mapping (source = "createBy", target = "createBy.id"),
+            @Mapping (source = "updateBy", target = "updateBy.id")})
+    DzfQuestionOpRecordDTO toDTO(DzfQuestionOpRecord entity);
+}
+

+ 12 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/controller/EnterpriseInfoController.java

@@ -483,6 +483,18 @@ public class EnterpriseInfoController {
 		return ResponseEntity.ok (ei);
 	}
 
+	/**
+	 * 获取当前登录人企业基本信息数据
+	 */
+	@ApiLog("取当前登录人企业基本信息数据")
+	@ApiOperation(value = "取当前登录人企业基本信息数据")
+	@GetMapping("queryByUserName")
+	public ResponseEntity<EnterpriseInfoDTO> queryByUserName() {
+		UserDTO userDTO = UserUtils.getCurrentUserDTO();
+
+		return ResponseEntity.ok (enterpriseInfoService.findByUserid ( userDTO.getLoginName() ));
+	}
+
 	@ApiLog("获取不展示字段")
 	@ApiOperation(value = "获取不展示字段")
 	@GetMapping("getnologinstr")

+ 2 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/mapper/EnterpriseInfoMapper.java

@@ -25,6 +25,8 @@ import java.util.List;
  */
 public interface EnterpriseInfoMapper extends BaseMapper<EnterpriseInfo> {
 
+
+    EnterpriseInfoDTO findByUserid(String userid);
     List<EnterpriseInfoDTO> findListFromLy(String Lyid);
     List<EnterpriseInfoDTO> findList();
     IPage <EnterpriseInfoDTO> findList2(Page <EnterpriseInfoDTO> page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper,String industry,String name,String bz2);

+ 6 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/mapper/xml/EnterpriseInfoMapper.xml

@@ -169,6 +169,12 @@
         where del_flag=0 and name=#{name}
     </select>
 
+    <select id="findByUserid" resultType="com.jeeplus.enterpriseinfo.service.dto.EnterpriseInfoDTO">
+        SELECT *
+        FROM ly_enterprise_info
+        where del_flag=0 and phone=#{userid} LIMIT 1
+    </select>
+
     <select id="getOfficeBuildTypeforuserid" resultType="String">
         SELECT ob.stype
         FROM `sys_user` u

+ 4 - 1
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/enterpriseinfo/service/EnterpriseInfoService.java

@@ -61,7 +61,10 @@ public class EnterpriseInfoService extends ServiceImpl<EnterpriseInfoMapper, Ent
         //queryWrapper.eq ("a.del_flag", 0 ); // 排除已经删除
         return  baseMapper.findList3 (page, queryWrapper,name);
     }
-
+    //根据userid 查询企业整个数据
+    public EnterpriseInfoDTO findByUserid(String userid) {
+        return  baseMapper.findByUserid (userid);
+    }
 
     //按楼宇查询企业
     public List<EnterpriseInfoDTO> findListFromLy(String Lyid) {

+ 152 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/controller/DzfQuestionController.java

@@ -0,0 +1,152 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.question.controller;
+
+import java.io.IOException;
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import com.google.common.collect.Lists;
+import com.jeeplus.core.excel.EasyExcelUtils;
+import com.jeeplus.core.excel.ExcelOptions;
+import com.jeeplus.core.excel.annotation.ExportMode;
+import com.jeeplus.core.query.QueryWrapperGenerator;
+import com.jeeplus.aop.logging.annotation.ApiLog;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.question.service.mapstruct.DzfQuestionWrapper;
+import com.jeeplus.question.service.dto.DzfQuestionDTO;
+import com.jeeplus.question.service.DzfQuestionService;
+
+/**
+ * 问题诉求Controller
+ * @author 尹宇
+ * @version 2025-04-07
+ */
+@Api(tags ="问题诉求")
+@RestController
+@RequestMapping(value = "/question/dzfQuestion")
+public class DzfQuestionController {
+
+	@Autowired
+	private DzfQuestionService dzfQuestionService;
+	
+	@Autowired
+	private DzfQuestionWrapper dzfQuestionWrapper;
+
+	/**
+	 * 问题诉求列表数据
+	 */
+	@ApiLog("查询问题诉求列表数据")
+	@ApiOperation(value = "查询问题诉求列表数据")
+	@PreAuthorize("hasAuthority('question:dzfQuestion:list')")
+	@GetMapping("list")
+	public ResponseEntity<IPage<DzfQuestionDTO>> list(DzfQuestionDTO dzfQuestionDTO, Page<DzfQuestionDTO> page) throws Exception {
+		QueryWrapper queryWrapper = QueryWrapperGenerator.buildQueryCondition (dzfQuestionDTO, DzfQuestionDTO.class);
+		IPage<DzfQuestionDTO> result = dzfQuestionService.findPage (page, queryWrapper);
+		return ResponseEntity.ok (result);
+	}
+
+
+	/**
+	 * 根据Id获取问题诉求数据
+	 */
+	@ApiLog("根据Id获取问题诉求数据")
+	@ApiOperation(value = "根据Id获取问题诉求数据")
+	@PreAuthorize("hasAnyAuthority('question:dzfQuestion:view','question:dzfQuestion:add','question:dzfQuestion:edit')")
+	@GetMapping("queryById")
+	public ResponseEntity<DzfQuestionDTO> queryById(String id) {
+		return ResponseEntity.ok ( dzfQuestionService.findById ( id ) );
+	}
+
+	/**
+	 * 保存问题诉求
+	 */
+	@ApiLog("保存问题诉求")
+	@ApiOperation(value = "保存问题诉求")
+	@PreAuthorize("hasAnyAuthority('question:dzfQuestion:add','question:dzfQuestion:edit')")
+	@PostMapping("save")
+	public  ResponseEntity <String> save(@Valid @RequestBody DzfQuestionDTO dzfQuestionDTO) {
+		//新增或编辑表单保存
+		dzfQuestionService.saveOrUpdate (dzfQuestionDTO);
+        return ResponseEntity.ok ( "保存问题诉求成功" );
+	}
+
+
+	/**
+	 * 删除问题诉求
+	 */
+	@ApiLog("删除问题诉求")
+	@ApiOperation(value = "删除问题诉求")
+	@PreAuthorize("hasAuthority('question:dzfQuestion:del')")
+	@DeleteMapping("delete")
+	public ResponseEntity <String> delete(String ids) {
+		String idArray[] = ids.split(",");
+		for(String id: idArray){
+			dzfQuestionService.removeById ( id );
+		}
+		return ResponseEntity.ok( "删除问题诉求成功" );
+	}
+	
+	/**
+     * 导出问题诉求数据
+     *
+     * @param dzfQuestionDTO
+     * @param page
+     * @param response
+     * @throws Exception
+     */
+    @ApiLog("导出问题诉求数据")
+    @PreAuthorize("hasAnyAuthority('question:dzfQuestion:export')")
+    @GetMapping("export")
+    public void exportFile(DzfQuestionDTO dzfQuestionDTO, Page <DzfQuestionDTO> page, ExcelOptions options, HttpServletResponse response) throws Exception {
+        String fileName = options.getFilename ( );
+		QueryWrapper queryWrapper = QueryWrapperGenerator.buildQueryCondition (dzfQuestionDTO, DzfQuestionDTO.class);
+        if ( ExportMode.current.equals ( options.getMode ( ) ) ) { // 导出当前页数据
+            
+        } else if ( ExportMode.selected.equals ( options.getMode ( ) ) ) { // 导出选中数据
+            queryWrapper.in ( "a.id", options.getSelectIds () );
+        } else { // 导出全部数据
+            page.setSize ( -1 );
+            page.setCurrent ( 0 );
+        }
+        List<DzfQuestionDTO> result = dzfQuestionService.findPage ( page, queryWrapper ).getRecords ( );
+        EasyExcelUtils.newInstance ( dzfQuestionService, dzfQuestionWrapper ).exportExcel ( result,  options.getSheetName ( ), DzfQuestionDTO.class, fileName,options.getExportFields (), response );
+    }
+
+    /**
+     * 导入问题诉求数据
+     *
+     * @return
+     */
+    @PreAuthorize("hasAnyAuthority('question:dzfQuestion:import')")
+    @PostMapping("import")
+    public ResponseEntity importFile(MultipartFile file) throws IOException {
+        String result = EasyExcelUtils.newInstance ( dzfQuestionService, dzfQuestionWrapper ).importExcel ( file, DzfQuestionDTO.class );
+        return ResponseEntity.ok ( result );
+    }
+
+    /**
+     * 下载导入问题诉求数据模板
+     *
+     * @param response
+     * @return
+     */
+    @PreAuthorize ("hasAnyAuthority('question:dzfQuestion:import')")
+    @GetMapping("import/template")
+    public void importFileTemplate(HttpServletResponse response) throws IOException {
+        String fileName = "问题诉求数据导入模板.xlsx";
+        List<DzfQuestionDTO> list = Lists.newArrayList();
+        EasyExcelUtils.newInstance ( dzfQuestionService, dzfQuestionWrapper ).exportExcel ( list,  "问题诉求数据", DzfQuestionDTO.class, fileName, null, response );
+    }	
+
+}

+ 103 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/domain/DzfQuestion.java

@@ -0,0 +1,103 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.question.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+/**
+ * 问题诉求Entity
+ * @author 尹宇
+ * @version 2025-04-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("dzf_question")
+public class DzfQuestion extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+     * 企业id
+     */
+	private String qyId;
+	/**
+     * 企业名称
+     */
+	private String qyName;
+	/**
+     * 属地
+     */
+	private String qySd;
+	/**
+     * 企业负责人
+     */
+	private String qyFzr;
+	/**
+     * 负责人号码
+     */
+	private String phone;
+	/**
+     * 挂钩干部
+     */
+	private String officer;
+	/**
+     * 挂钩干部姓名
+     */
+	private String officeName;
+	/**
+     * 问题状态
+     */
+	private String states;
+	/**
+     * 办结时间
+     */
+	private String finishTime;
+	/**
+     * 备注
+     */
+	private String remark;
+	/**
+     * 备用1
+     */
+	private String des1;
+	/**
+     * 备用2
+     */
+	private String des2;
+	/**
+     * 备用3
+     */
+	private String des3;
+	/**
+     * 备用4
+     */
+	private String des4;
+	/**
+     * 备用5
+     */
+	private String des5;
+	/**
+     * 备用6
+     */
+	private String des6;
+	/**
+     * 备用7
+     */
+	private String des7;
+	/**
+     * 备用8
+     */
+	private String des8;
+	/**
+     * 备用9
+     */
+	private String des9;
+	/**
+     * 备用10
+     */
+	private String des10;
+
+}

+ 111 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/domain/DzfQuestionDetil.java

@@ -0,0 +1,111 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.question.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.BaseEntity;
+import com.jeeplus.core.query.Query;
+import com.jeeplus.core.query.QueryType;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+/**
+ * 问题详情Entity
+ * @author 尹宇
+ * @version 2025-04-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("dzf_question_detil")
+public class DzfQuestionDetil extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+     * 问题主表主键
+     */
+    @TableField("qid")
+	private String qidId;
+	/**
+     * 问题名称
+     */
+	private String qName;
+	/**
+     * 问题类别
+     */
+	private String qType;
+	/**
+     * 缺口数
+     */
+	private String gaps;
+	/**
+     * 问题描述
+     */
+	private String des;
+	/**
+     * 交办部门
+     */
+	private String dept;
+	/**
+     * 问题状态
+     */
+	private String states;
+	/**
+     * 处理进度
+     */
+	private String dealProgress;
+	/**
+     * 进度名称
+     */
+	private String progressName;
+	/**
+     * 评价
+     */
+	private String evaluateFlag;
+	/**
+     * 预计办结时间
+     */
+	private String preTime;
+	/**
+     * 备注1
+     */
+	private String des1;
+	/**
+     * 备注2
+     */
+	private String des2;
+	/**
+     * 备注3
+     */
+	private String des3;
+	/**
+     * 备注4
+     */
+	private String des4;
+	/**
+     * 备注5
+     */
+	private String des5;
+	/**
+     * 备注6
+     */
+	private String des6;
+	/**
+     * 备注7
+     */
+	private String des7;
+	/**
+     * 备注8
+     */
+	private String des8;
+	/**
+     * 备注9
+     */
+	private String des9;
+	/**
+     * 备注10
+     */
+	private String des10;
+
+}

+ 17 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/mapper/DzfQuestionDetilMapper.java

@@ -0,0 +1,17 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.question.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jeeplus.question.domain.DzfQuestionDetil;
+
+/**
+ * 问题详情MAPPER接口
+ * @author 尹宇
+ * @version 2025-04-07
+ */
+public interface DzfQuestionDetilMapper extends BaseMapper<DzfQuestionDetil> {
+
+
+}

+ 37 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/mapper/DzfQuestionMapper.java

@@ -0,0 +1,37 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.question.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.question.service.dto.DzfQuestionDTO;
+import com.jeeplus.question.domain.DzfQuestion;
+
+/**
+ * 问题诉求MAPPER接口
+ * @author 尹宇
+ * @version 2025-04-07
+ */
+public interface DzfQuestionMapper extends BaseMapper<DzfQuestion> {
+
+    /**
+     * 根据id获取问题诉求
+     * @param id
+     * @return
+     */
+    DzfQuestionDTO findById(String id);
+
+    /**
+     * 获取问题诉求列表
+     *
+     * @param queryWrapper
+     * @return
+     */
+    IPage <DzfQuestionDTO> findList(Page <DzfQuestionDTO> page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper);
+
+}

+ 6 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/mapper/xml/DzfQuestionDetilMapper.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.question.mapper.DzfQuestionDetilMapper">
+
+
+</mapper>

+ 57 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/mapper/xml/DzfQuestionMapper.xml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.question.mapper.DzfQuestionMapper">
+
+	<sql id="dzfQuestionColumns">
+		a.id AS "id",
+		a.qy_id AS "qyId",
+		a.qy_name AS "qyName",
+		a.qy_sd AS "qySd",
+		a.qy_fzr AS "qyFzr",
+		a.phone AS "phone",
+		a.officer AS "officer",
+		a.office_name AS "officeName",
+		a.states AS "states",
+		a.finish_time AS "finishTime",
+		a.remark AS "remark",
+		a.des1 AS "des1",
+		a.des2 AS "des2",
+		a.des3 AS "des3",
+		a.des4 AS "des4",
+		a.des5 AS "des5",
+		a.des6 AS "des6",
+		a.des7 AS "des7",
+		a.des8 AS "des8",
+		a.des9 AS "des9",
+		a.des10 AS "des10",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.del_flag AS "delFlag"
+	</sql>
+
+	<sql id="dzfQuestionJoins">
+
+		LEFT JOIN sys_user qyName ON qyName.id = a.qy_name
+	</sql>
+
+
+
+	<select id="findById" resultType="com.jeeplus.question.service.dto.DzfQuestionDTO">
+		SELECT
+			<include refid="dzfQuestionColumns"/>
+		FROM dzf_question a
+		<include refid="dzfQuestionJoins"/>
+		WHERE a.id = #{id} and a.del_flag = 0
+	</select>
+
+	<select id="findList" resultType="com.jeeplus.question.service.dto.DzfQuestionDTO" >
+		SELECT
+			<include refid="dzfQuestionColumns"/>
+		FROM dzf_question a
+		<include refid="dzfQuestionJoins"/>
+	    ${ew.customSqlSegment}
+	</select>
+
+</mapper>

+ 35 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/service/DzfQuestionDetilService.java

@@ -0,0 +1,35 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.question.service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jeeplus.question.service.mapstruct.DzfQuestionDetilWrapper;
+import com.jeeplus.question.service.dto.DzfQuestionDetilDTO;
+import com.jeeplus.question.domain.DzfQuestionDetil;
+import com.jeeplus.question.mapper.DzfQuestionDetilMapper;
+
+/**
+ * 问题详情Service
+ * @author 尹宇
+ * @version 2025-04-07
+ */
+@Service
+@Transactional
+public class DzfQuestionDetilService extends ServiceImpl<DzfQuestionDetilMapper, DzfQuestionDetil> {
+
+	/**
+	* 查询列表
+	* @param qidId
+	* @return
+	*/
+	public List <DzfQuestionDetilDTO> findList(String qidId) {
+		return super.lambdaQuery ().eq ( DzfQuestionDetil::getQidId, qidId ).list ().stream ().map (DzfQuestionDetilWrapper.INSTANCE::toDTO ).collect( Collectors.toList());
+	}
+
+}

+ 87 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/service/DzfQuestionService.java

@@ -0,0 +1,87 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.question.service;
+
+import com.jeeplus.sys.constant.CommonConstants;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.question.service.dto.DzfQuestionDTO;
+import com.jeeplus.question.service.dto.DzfQuestionDetilDTO;
+import com.jeeplus.question.service.mapstruct.DzfQuestionWrapper;
+import com.jeeplus.question.service.mapstruct.DzfQuestionDetilWrapper;
+import com.jeeplus.question.domain.DzfQuestion;
+import com.jeeplus.question.domain.DzfQuestionDetil;
+import com.jeeplus.question.mapper.DzfQuestionMapper;
+
+/**
+ * 问题诉求Service
+ * @author 尹宇
+ * @version 2025-04-07
+ */
+@Service
+@Transactional
+public class DzfQuestionService extends ServiceImpl<DzfQuestionMapper, DzfQuestion> {
+	/**
+	* 子表service
+	*/
+	@Autowired
+	private DzfQuestionDetilService dzfQuestionDetilService;
+
+	/**
+	 * 根据id查询
+	 * @param id
+	 * @return
+	 */
+	public DzfQuestionDTO findById(String id) {
+		DzfQuestionDTO dzfQuestionDTO = baseMapper.findById ( id );
+		dzfQuestionDTO.setDzfQuestionDetilDTOList(dzfQuestionDetilService.findList(id));
+		return dzfQuestionDTO;
+	}
+
+	/**
+	 * 自定义分页检索
+	 * @param page
+	 * @param queryWrapper
+	 * @return
+	 */
+	public IPage <DzfQuestionDTO> findPage(Page <DzfQuestionDTO> page, QueryWrapper queryWrapper) {
+		queryWrapper.eq ("a.del_flag", 0 ); // 排除已经删除
+		return  baseMapper.findList (page, queryWrapper);
+	}
+
+	/**
+	* 保存或者更新
+	* @param  dzfQuestionDTO
+	* @return
+	*/
+	public void saveOrUpdate(DzfQuestionDTO dzfQuestionDTO) {
+		DzfQuestion dzfQuestion =  DzfQuestionWrapper.INSTANCE.toEntity ( dzfQuestionDTO );
+		super.saveOrUpdate (dzfQuestion);
+		for (DzfQuestionDetilDTO dzfQuestionDetilDTO : dzfQuestionDTO.getDzfQuestionDetilDTOList ()){
+			if ( CommonConstants.DELETED.equals ( dzfQuestionDetilDTO.getDelFlag()) ){
+				dzfQuestionDetilService.removeById ( dzfQuestionDetilDTO.getId () );
+			}else{
+				DzfQuestionDetil dzfQuestionDetil = DzfQuestionDetilWrapper.INSTANCE.toEntity ( dzfQuestionDetilDTO );
+				dzfQuestionDetil.setQidId ( dzfQuestion.getId () );
+				dzfQuestionDetilService.saveOrUpdate ( dzfQuestionDetil );
+			}
+		}
+	}
+
+	/**
+	 * 删除
+	 * @param  id
+	 * @return
+	 */
+	public void removeById(String id) {
+		super.removeById ( id );
+		dzfQuestionDetilService.lambdaUpdate ().eq ( DzfQuestionDetil::getQidId, id ).remove ();
+	}
+
+}

+ 158 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/service/dto/DzfQuestionDTO.java

@@ -0,0 +1,158 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.question.service.dto;
+
+import java.util.List;
+import com.google.common.collect.Lists;
+import com.jeeplus.core.query.Query;
+import com.jeeplus.core.query.QueryType;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.jeeplus.core.excel.converter.ExcelUserDTOConverter;
+import com.jeeplus.core.service.dto.BaseDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+/**
+ * 问题诉求DTO
+ * @author 尹宇
+ * @version 2025-04-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DzfQuestionDTO extends BaseDTO {
+
+	private static final long serialVersionUID = 1L;
+
+	        
+	/**
+     * 企业id
+     */
+	@ExcelProperty("企业id") 
+	private String qyId;
+	        
+	/**
+     * 企业名称
+     */
+    @Query(tableColumn = "a.qy_name", javaField = "qyName", type = QueryType.LIKE)
+    @ExcelProperty(value = "企业名称", converter = ExcelUserDTOConverter.class) 
+	private String qyName;
+	        
+	/**
+     * 属地
+     */
+	@ExcelProperty("属地") 
+	private String qySd;
+	        
+	/**
+     * 企业负责人
+     */
+    @Query(tableColumn = "a.qy_fzr", javaField = "qyFzr", type = QueryType.LIKE)
+	@ExcelProperty("企业负责人") 
+	private String qyFzr;
+	        
+	/**
+     * 负责人号码
+     */
+    @Query(tableColumn = "a.phone", javaField = "phone", type = QueryType.LIKE)
+	@ExcelProperty("负责人号码") 
+	private String phone;
+	        
+	/**
+     * 挂钩干部
+     */
+    @Query(tableColumn = "a.officer", javaField = "officer", type = QueryType.LIKE)
+	@ExcelProperty("挂钩干部") 
+	private String officer;
+	        
+	/**
+     * 挂钩干部姓名
+     */
+    @Query(tableColumn = "a.office_name", javaField = "officeName", type = QueryType.LIKE)
+	@ExcelProperty("挂钩干部姓名") 
+	private String officeName;
+	        
+	/**
+     * 问题状态
+     */
+    @Query(tableColumn = "a.states", javaField = "states", type = QueryType.EQ)
+	@ExcelProperty("问题状态") 
+	private String states;
+	        
+	/**
+     * 办结时间
+     */
+    @Query(tableColumn = "a.finish_time", javaField = "finishTime", type = QueryType.BETWEEN)
+	@ExcelProperty("办结时间") 
+	private String finishTime;
+	        
+	/**
+     * 备注
+     */
+	@ExcelProperty("备注") 
+	private String remark;
+	        
+	/**
+     * 备用1
+     */
+	@ExcelProperty("备用1") 
+	private String des1;
+	        
+	/**
+     * 备用2
+     */
+	@ExcelProperty("备用2") 
+	private String des2;
+	        
+	/**
+     * 备用3
+     */
+	@ExcelProperty("备用3") 
+	private String des3;
+	        
+	/**
+     * 备用4
+     */
+	@ExcelProperty("备用4") 
+	private String des4;
+	        
+	/**
+     * 备用5
+     */
+	@ExcelProperty("备用5") 
+	private String des5;
+	        
+	/**
+     * 备用6
+     */
+	@ExcelProperty("备用6") 
+	private String des6;
+	        
+	/**
+     * 备用7
+     */
+	@ExcelProperty("备用7") 
+	private String des7;
+	        
+	/**
+     * 备用8
+     */
+	@ExcelProperty("备用8") 
+	private String des8;
+	        
+	/**
+     * 备用9
+     */
+	@ExcelProperty("备用9") 
+	private String des9;
+	        
+	/**
+     * 备用10
+     */
+	@ExcelProperty("备用10") 
+	private String des10;
+    /**
+     *子表列表
+     */
+	private List<DzfQuestionDetilDTO> dzfQuestionDetilDTOList = Lists.newArrayList();
+
+}

+ 110 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/service/dto/DzfQuestionDetilDTO.java

@@ -0,0 +1,110 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.question.service.dto;
+
+import com.jeeplus.core.query.Query;
+import com.jeeplus.core.query.QueryType;
+import com.jeeplus.core.service.dto.BaseDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+/**
+ * 问题详情Entity
+ * @author 尹宇
+ * @version 2025-04-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DzfQuestionDetilDTO extends BaseDTO {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+     * 问题主表主键
+     */
+	private DzfQuestionDTO qid;
+	/**
+     * 问题名称
+     */
+    @Query(type = QueryType.LIKE)
+	private String qName;
+	/**
+     * 问题类别
+     */
+    @Query(type = QueryType.EQ)
+	private String qType;
+	/**
+     * 缺口数
+     */
+	private String gaps;
+	/**
+     * 问题描述
+     */
+    @Query(type = QueryType.LIKE)
+	private String des;
+	/**
+     * 交办部门
+     */
+	private String dept;
+	/**
+     * 问题状态
+     */
+	private String states;
+	/**
+     * 处理进度
+     */
+	private String dealProgress;
+	/**
+     * 进度名称
+     */
+	private String progressName;
+	/**
+     * 评价
+     */
+	private String evaluateFlag;
+	/**
+     * 预计办结时间
+     */
+	private String preTime;
+	/**
+     * 备注1
+     */
+	private String des1;
+	/**
+     * 备注2
+     */
+	private String des2;
+	/**
+     * 备注3
+     */
+	private String des3;
+	/**
+     * 备注4
+     */
+	private String des4;
+	/**
+     * 备注5
+     */
+	private String des5;
+	/**
+     * 备注6
+     */
+	private String des6;
+	/**
+     * 备注7
+     */
+	private String des7;
+	/**
+     * 备注8
+     */
+	private String des8;
+	/**
+     * 备注9
+     */
+	private String des9;
+	/**
+     * 备注10
+     */
+	private String des10;
+
+}

+ 38 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/service/mapstruct/DzfQuestionDetilWrapper.java

@@ -0,0 +1,38 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.question.service.mapstruct;
+
+
+import com.jeeplus.core.mapstruct.EntityWrapper;
+import com.jeeplus.question.service.dto.DzfQuestionDetilDTO;
+import com.jeeplus.question.domain.DzfQuestionDetil;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.Mappings;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+
+/**
+ *  DzfQuestionDetilWrapper
+ * @author 尹宇
+ * @version 2025-04-07
+ */
+@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE, uses = {} )
+public interface DzfQuestionDetilWrapper extends EntityWrapper<DzfQuestionDetilDTO, DzfQuestionDetil> {
+
+    DzfQuestionDetilWrapper INSTANCE = Mappers.getMapper(DzfQuestionDetilWrapper.class);
+     @Mappings({
+            @Mapping(source = "qid.id", target = "qidId"),
+            @Mapping(source = "createBy.id", target = "createBy"),
+            @Mapping (source = "updateBy.id", target = "updateBy")})
+    DzfQuestionDetil toEntity(DzfQuestionDetilDTO dto);
+
+
+    @Mappings({
+            @Mapping(source = "qidId", target = "qid.id"),
+            @Mapping (source = "createBy", target = "createBy.id"),
+            @Mapping (source = "updateBy", target = "updateBy.id")})
+    DzfQuestionDetilDTO toDTO(DzfQuestionDetil entity);
+}
+

+ 36 - 0
jp-console/jeeplus-module/ly/src/main/java/com/jeeplus/question/service/mapstruct/DzfQuestionWrapper.java

@@ -0,0 +1,36 @@
+/**
+ * Copyright © 2021-2025 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.question.service.mapstruct;
+
+
+import com.jeeplus.core.mapstruct.EntityWrapper;
+import com.jeeplus.question.service.dto.DzfQuestionDTO;
+import com.jeeplus.question.domain.DzfQuestion;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.Mappings;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+
+/**
+ *  DzfQuestionWrapper
+ * @author 尹宇
+ * @version 2025-04-07
+ */
+@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE, uses = {} )
+public interface DzfQuestionWrapper extends EntityWrapper<DzfQuestionDTO, DzfQuestion> {
+
+    DzfQuestionWrapper INSTANCE = Mappers.getMapper(DzfQuestionWrapper.class);
+     @Mappings({
+            @Mapping(source = "createBy.id", target = "createBy"),
+            @Mapping (source = "updateBy.id", target = "updateBy")})
+    DzfQuestion toEntity(DzfQuestionDTO dto);
+
+
+    @Mappings({
+            @Mapping (source = "createBy", target = "createBy.id"),
+            @Mapping (source = "updateBy", target = "updateBy.id")})
+    DzfQuestionDTO toDTO(DzfQuestion entity);
+}
+

+ 2 - 2
jp-console/jeeplus-web/src/main/resources/application-production.yml

@@ -204,8 +204,8 @@ devtool:
   packageName: com.jeeplus    # 默认包名
   author: xx     # 默认作者
 # 产品授权
-productId: Y2019112587
-license: 11F29488D09EF07B19FF2CA9FF391B10696DD6C023DCA0B5D74DD3D60E02ED998E4061A5AF0756160F2BADBF433163E310A762D8CC5017962768E532F7CD5CBF7B84231E59E5037D57BCFA74584FFD796F6FAF90D1EEF4EFDF1E43C22F98646F70B10D9239C475BB26B53B82A2E30F8D2B4731942274C2086E8F944A0F86634E
+productId: Y20230727035
+license: 0AF7C55F8C3B9EB1277AE94D336DD385382AB70858B261F729E94D845FB9AC513308C80199FD5DDF9C48272A2E202196A83CCC5CA91F3AFBAAF95A662E086252
 
 
 

+ 60 - 0
jp-ui/src/api/dzfoprecord/dzfQuestionOpRecordService.js

@@ -0,0 +1,60 @@
+import request from '@/utils/httpRequest'
+
+export default {
+  save: function (inputForm) {
+    return request({
+      url: '/dzfoprecord/dzfQuestionOpRecord/save',
+      method: 'post',
+      data: inputForm
+    })
+  },
+
+  delete: function (ids) {
+    return request({
+      url: '/dzfoprecord/dzfQuestionOpRecord/delete',
+      method: 'delete',
+      params: {ids: ids}
+    })
+  },
+
+  queryById: function (id) {
+    return request({
+      url: '/dzfoprecord/dzfQuestionOpRecord/queryById',
+      method: 'get',
+      params: {id: id}
+    })
+  },
+
+  list: function (params) {
+    return request({
+      url: '/dzfoprecord/dzfQuestionOpRecord/list',
+      method: 'get',
+      params: params
+    })
+  },
+
+  exportTemplate: function () {
+    return request({
+      url: '/dzfoprecord/dzfQuestionOpRecord/import/template',
+      method: 'get',
+      responseType: 'blob'
+    })
+  },
+
+  exportExcel: function (params) {
+    return request({
+      url: '/dzfoprecord/dzfQuestionOpRecord/export',
+      method: 'get',
+      params: params,
+      responseType: 'blob'
+    })
+  },
+
+  importExcel: function (data) {
+    return request({
+      url: '/dzfoprecord/dzfQuestionOpRecord/import',
+      method: 'post',
+      data: data
+    })
+  }
+}

+ 60 - 0
jp-ui/src/api/question/dzfQuestionService.js

@@ -0,0 +1,60 @@
+import request from '@/utils/httpRequest'
+
+export default {
+  save: function (inputForm) {
+    return request({
+      url: '/question/dzfQuestion/save',
+      method: 'post',
+      data: inputForm
+    })
+  },
+
+  delete: function (ids) {
+    return request({
+      url: '/question/dzfQuestion/delete',
+      method: 'delete',
+      params: {ids: ids}
+    })
+  },
+
+  queryById: function (id) {
+    return request({
+      url: '/question/dzfQuestion/queryById',
+      method: 'get',
+      params: {id: id}
+    })
+  },
+
+  list: function (params) {
+    return request({
+      url: '/question/dzfQuestion/list',
+      method: 'get',
+      params: params
+    })
+  },
+
+  exportTemplate: function () {
+    return request({
+      url: '/question/dzfQuestion/import/template',
+      method: 'get',
+      responseType: 'blob'
+    })
+  },
+
+  exportExcel: function (params) {
+    return request({
+      url: '/question/dzfQuestion/export',
+      method: 'get',
+      params: params,
+      responseType: 'blob'
+    })
+  },
+
+  importExcel: function (data) {
+    return request({
+      url: '/question/dzfQuestion/import',
+      method: 'post',
+      data: data
+    })
+  }
+}

+ 4 - 13
jp-ui/src/components/qySelect/QySelectDialog.vue

@@ -34,21 +34,12 @@
               </el-table-column>
 
               <el-table-column prop="name" align="center" width="400" label="企业名称"> </el-table-column>
-              <el-table-column prop="industry" align="center" width="280" label="所属行业">
-                <template slot-scope="scope">
-                  {{$dictUtils.getDictLabel("industrial_type", scope.row.industry)}}
-                </template>
-              </el-table-column>
-              <el-table-column prop="floor" align="center" width="100" label="楼层"> </el-table-column>
-              <!-- <el-table-column prop="state" align="center" width="90" label="所属楼宇">
-                <template slot-scope="scope">
-                  {{ $dictUtils.getDictLabel("hs_site_state", scope.row.state, '-') }}
-                </template>
-              </el-table-column> -->
-
+              <el-table-column prop="des1" align="center" width="200" label="属地"> </el-table-column>
+              <el-table-column prop="industry" align="center" width="300" label="所属行业"> </el-table-column>
+              <el-table-column prop="des3" align="center" width="100" label="销售规模"> </el-table-column>
               <el-table-column prop="lxr" width="170" label="联系人" align="center"> </el-table-column>
               <el-table-column prop="phone" width="200" label="联系电话" align="center"> </el-table-column>
-              <el-table-column prop="entryTime" width="200" label="入住时间" align="center"> </el-table-column>
+              <el-table-column prop="bz5" width="200" label="挂钩干部" align="center"> </el-table-column>
 
 
             </el-table>

+ 1 - 0
jp-ui/src/components/qySelect/index.vue

@@ -79,6 +79,7 @@ export default {
   },
   methods: {
     selectQyToInput (sites) {
+      console.log("GG:"+JSON.stringify(sites))
       this.selectData = sites
       this.$emit('valueChanges', this.selectData, this)
       this.labelValue = sites.map(site => { return site.id }).join(',')

+ 261 - 0
jp-ui/src/views/modules/dzfoprecord/DzfQuestionOpRecordForm.vue

@@ -0,0 +1,261 @@
+<template>
+<div>
+  <el-dialog
+    :title="title"
+    :close-on-click-modal="false"
+     v-dialogDrag
+    :visible.sync="visible">
+    <el-form :model="inputForm" size="small" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method==='view'"
+             label-width="120px">
+      <el-row  :gutter="15">
+        <el-col :span="12">
+            <el-form-item label="关联id" prop="recordId"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.recordId" placeholder="请填写关联id"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="关联类型" prop="recordType"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.recordType" placeholder="请填写关联类型"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="操作类型" prop="opType"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.opType" placeholder="请填写操作类型"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="操作类型名称" prop="opTypeName"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.opTypeName" placeholder="请填写操作类型名称"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="角色ID" prop="roleId"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.roleId" placeholder="请填写角色ID"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="角色名称" prop="roleName"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.roleName" placeholder="请填写角色名称"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="角色等级" prop="roleLevel"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.roleLevel" placeholder="请填写角色等级"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="备用1" prop="des1"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.des1" placeholder="请填写备用1"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="备用2" prop="des2"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.des2" placeholder="请填写备用2"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="备用3" prop="des3"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.des3" placeholder="请填写备用3"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="备用4" prop="des4"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.des4" placeholder="请填写备用4"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="备用5" prop="des5"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.des5" placeholder="请填写备用5"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="备用6" prop="des6"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.des6" placeholder="请填写备用6"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="备用7" prop="des7"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.des7" placeholder="请填写备用7"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="备用8" prop="des8"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.des8" placeholder="请填写备用8"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="备用9" prop="des9"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.des9" placeholder="请填写备用9"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="创建人名称" prop="createByName.id"
+                :rules="[
+                 ]">
+                <user-select :limit='1' :value="inputForm.createByName.id" @getValue='(value) => {inputForm.createByName.id=value}'></user-select>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="创建人手机号码" prop="phoneNumber"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.phoneNumber" placeholder="请填写创建人手机号码"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="创建时间" prop="createTime"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.createTime" placeholder="请填写创建时间"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="更新时间" prop="updateTime"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.updateTime" placeholder="请填写更新时间"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="备注" prop="remarks"
+                :rules="[
+                 ]">
+          <el-input type="textarea" v-model="inputForm.remarks" placeholder="请填写备注"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="pre_time" prop="preTime"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.preTime" placeholder="请填写pre_time"     ></el-input>
+           </el-form-item>
+        </el-col>
+        </el-row>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button size="small" @click="visible = false">关闭</el-button>
+      <el-button size="small" type="primary" v-if="method != 'view'" @click="doSubmit()" v-noMoreClick>确定</el-button>
+    </span>
+  </el-dialog>
+</div>
+</template>
+
+<script>
+  import UserSelect from '@/components/userSelect'
+  import dzfQuestionOpRecordService from '@/api/dzfoprecord/dzfQuestionOpRecordService'
+  export default {
+    data () {
+      return {
+        title: '',
+        method: '',
+        visible: false,
+        loading: false,
+        inputForm: {
+          id: '',
+          recordId: '',
+          recordType: '',
+          opType: '',
+          opTypeName: '',
+          roleId: '',
+          roleName: '',
+          roleLevel: '',
+          des1: '',
+          des2: '',
+          des3: '',
+          des4: '',
+          des5: '',
+          des6: '',
+          des7: '',
+          des8: '',
+          des9: '',
+          createByName: {
+            id: ''
+          },
+          phoneNumber: '',
+          createTime: '',
+          updateTime: '',
+          remarks: '',
+          preTime: ''
+        }
+      }
+    },
+    components: {
+      UserSelect
+    },
+    methods: {
+      init (method, id) {
+        this.method = method
+        this.inputForm.id = id
+        if (method === 'add') {
+          this.title = `新建处理操作流程`
+        } else if (method === 'edit') {
+          this.title = '修改处理操作流程'
+        } else if (method === 'view') {
+          this.title = '查看处理操作流程'
+        }
+        this.visible = true
+        this.loading = false
+        this.$nextTick(() => {
+          this.$refs.inputForm.resetFields()
+          if (method === 'edit' || method === 'view') { // 修改或者查看
+            this.loading = true
+            dzfQuestionOpRecordService.queryById(this.inputForm.id).then(({data}) => {
+              this.inputForm = this.recover(this.inputForm, data)
+              this.loading = false
+            })
+          }
+        })
+      },
+      // 表单提交
+      doSubmit () {
+        this.$refs['inputForm'].validate((valid) => {
+          if (valid) {
+            this.loading = true
+            dzfQuestionOpRecordService.save(this.inputForm).then(({data}) => {
+              this.visible = false
+              this.$message.success(data)
+              this.$emit('refreshDataList')
+              this.loading = false
+            }).catch(() => {
+              this.loading = false
+            })
+          }
+        })
+      }
+    }
+  }
+</script>
+
+  

+ 362 - 0
jp-ui/src/views/modules/dzfoprecord/DzfQuestionOpRecordList.vue

@@ -0,0 +1,362 @@
+<template>
+    <div class="page">
+      <el-form size="small" :inline="true" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+            <!-- 搜索框-->
+          <el-form-item>
+            <el-button type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
+            <el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
+          </el-form-item>
+      </el-form>
+
+     <div class="bg-white top">
+        <vxe-toolbar :refresh="{query: refreshList}" import export print custom>
+          <template #buttons>
+            <el-button v-if="hasPermission('dzfoprecord:dzfQuestionOpRecord:add')" type="primary" size="small" icon="el-icon-plus" @click="add()">新建</el-button>
+            <el-button v-if="hasPermission('dzfoprecord:dzfQuestionOpRecord:edit')" type="warning" size="small" icon="el-icon-edit-outline" @click="edit()" :disabled="$refs.dzfQuestionOpRecordTable && $refs.dzfQuestionOpRecordTable.getCheckboxRecords().length !== 1" plain>修改</el-button>
+            <el-button v-if="hasPermission('dzfoprecord:dzfQuestionOpRecord:del')" type="danger"   size="small" icon="el-icon-delete" @click="del()" :disabled="$refs.dzfQuestionOpRecordTable && $refs.dzfQuestionOpRecordTable.getCheckboxRecords().length === 0" plain>删除</el-button>
+          </template>
+          <template #tools>
+            <vxe-button
+    		  type="default"
+    		  title="下载导入模板"
+    		  v-if="hasPermission('dzfoprecord:dzfQuestionOpRecord:import')"
+    		  class="el-icon-document m-r-12"
+    		  @click="downloadTpl()"
+    		  circle
+            >
+            </vxe-button>
+          </template>
+        </vxe-toolbar>
+        <div style="height: calc(100% - 80px);">
+        <vxe-table
+            border="inner"
+            auto-resize
+            resizable
+            height="auto"
+            :loading="loading"
+            size="small"
+            ref="dzfQuestionOpRecordTable"
+            show-header-overflow
+            show-overflow
+            highlight-hover-row
+            :menu-config="{}"
+            :print-config="{}"
+            :import-config="{
+            importMethod: importMethod,
+                types: ['csv', 'xls', 'xlsx'],
+                remote: true,
+            }"
+            :export-config="{
+                remote: true,
+                filename: `处理操作流程数据${moment(new Date()).format(
+            		'YYYY-MM-DD'
+                )}`,
+                sheetName: '处理操作流程数据',
+                exportMethod: exportMethod,
+                types: ['xlsx'],
+                modes: ['current', 'selected', 'all'],
+            }"
+            @sort-change="sortChangeHandle"
+            :sort-config="{remote:true}"
+            :data="dataList"
+            :checkbox-config="{}">
+            <vxe-column type="seq" width="40"></vxe-column>
+            <vxe-column type="checkbox"  width="40px"></vxe-column>
+    <vxe-column
+        field="recordId"
+        sortable
+        title="关联id">
+            <template slot-scope="scope">
+              <el-link  type="primary" :underline="false" v-if="hasPermission('dzfoprecord:dzfQuestionOpRecord:edit')" @click="edit(scope.row.id)">{{scope.row.recordId}}</el-link>
+              <el-link  type="primary" :underline="false" v-else-if="hasPermission('dzfoprecord:dzfQuestionOpRecord:view')"  @click="view(scope.row.id)">{{scope.row.recordId}}</el-link>
+              <span v-else>{{scope.row.recordId}}</span>
+            </template>
+      </vxe-column>
+    <vxe-column
+        field="recordType"
+        sortable
+        title="关联类型">
+      </vxe-column>
+    <vxe-column
+        field="opType"
+        sortable
+        title="操作类型">
+      </vxe-column>
+    <vxe-column
+        field="opTypeName"
+        sortable
+        title="操作类型名称">
+      </vxe-column>
+    <vxe-column
+        field="roleId"
+        sortable
+        title="角色ID">
+      </vxe-column>
+    <vxe-column
+        field="roleName"
+        sortable
+        title="角色名称">
+      </vxe-column>
+    <vxe-column
+        field="roleLevel"
+        sortable
+        title="角色等级">
+      </vxe-column>
+    <vxe-column
+        field="des1"
+        sortable
+        title="备用1">
+      </vxe-column>
+    <vxe-column
+        field="des2"
+        sortable
+        title="备用2">
+      </vxe-column>
+    <vxe-column
+        field="des3"
+        sortable
+        title="备用3">
+      </vxe-column>
+    <vxe-column
+        field="des4"
+        sortable
+        title="备用4">
+      </vxe-column>
+    <vxe-column
+        field="des5"
+        sortable
+        title="备用5">
+      </vxe-column>
+    <vxe-column
+        field="des6"
+        sortable
+        title="备用6">
+      </vxe-column>
+    <vxe-column
+        field="des7"
+        sortable
+        title="备用7">
+      </vxe-column>
+    <vxe-column
+        field="des8"
+        sortable
+        title="备用8">
+      </vxe-column>
+    <vxe-column
+        field="des9"
+        sortable
+        title="备用9">
+      </vxe-column>
+      <vxe-column
+        field=""
+        sortable
+        title="创建人名称">
+            <template slot-scope="scope">
+                {{scope.row.createByName}}
+            </template>
+      </vxe-column>
+    <vxe-column
+        field="phoneNumber"
+        sortable
+        title="创建人手机号码">
+      </vxe-column>
+    <vxe-column
+        field="createTime"
+        sortable
+        title="创建时间">
+      </vxe-column>
+    <vxe-column
+        field="updateTime"
+        sortable
+        title="更新时间">
+      </vxe-column>
+    <vxe-column
+        field="remarks"
+        sortable
+        title="备注">
+      </vxe-column>
+    <vxe-column
+        field="preTime"
+        sortable
+        title="pre_time">
+      </vxe-column>
+      <vxe-column
+        fixed="right"
+        align="center"
+        width="200"
+        title="操作">
+        <template  slot-scope="scope">
+          <el-button v-if="hasPermission('dzfoprecord:dzfQuestionOpRecord:view')" type="text" icon="el-icon-view" size="small" @click="view(scope.row.id)">查看</el-button>
+          <el-button v-if="hasPermission('dzfoprecord:dzfQuestionOpRecord:edit')" type="text" icon="el-icon-edit" size="small" @click="edit(scope.row.id)">修改</el-button>
+          <el-button v-if="hasPermission('dzfoprecord:dzfQuestionOpRecord:del')" type="text"  icon="el-icon-delete" size="small" @click="del(scope.row.id)">删除</el-button>
+        </template>
+      </vxe-column>
+    </vxe-table>
+    <vxe-pager
+      background
+      size="small"
+      :current-page="tablePage.currentPage"
+      :page-size="tablePage.pageSize"
+      :total="tablePage.total"
+      :page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+      :layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+      @page-change="currentChangeHandle">
+    </vxe-pager>
+    </div>
+    </div>
+        <!-- 弹窗, 新增 / 修改 -->
+    <DzfQuestionOpRecordForm  ref="dzfQuestionOpRecordForm" @refreshDataList="refreshList"></DzfQuestionOpRecordForm>
+  </div>
+</template>
+
+<script>
+  import DzfQuestionOpRecordForm from './DzfQuestionOpRecordForm'
+  import dzfQuestionOpRecordService from '@/api/dzfoprecord/dzfQuestionOpRecordService'
+  export default {
+    data () {
+      return {
+        searchForm: {
+        },
+        dataList: [],
+        tablePage: {
+          total: 0,
+          currentPage: 1,
+          pageSize: 10,
+          orders: [{ column: 'a.create_date', asc: false }]
+        },
+        loading: false
+      }
+    },
+    components: {
+      DzfQuestionOpRecordForm
+    },
+    activated () {
+      this.refreshList()
+    },
+    methods: {
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        dzfQuestionOpRecordService.list({
+          'current': this.tablePage.currentPage,
+          'size': this.tablePage.pageSize,
+          'orders': this.tablePage.orders,
+          ...this.searchForm
+        }).then(({data}) => {
+          this.dataList = data.records
+          this.tablePage.total = data.total
+          this.loading = false
+        })
+      },
+      // 当前页
+      currentChangeHandle ({ currentPage, pageSize }) {
+        this.tablePage.currentPage = currentPage
+        this.tablePage.pageSize = pageSize
+        this.refreshList()
+      },
+      // 排序
+      sortChangeHandle (obj) {
+        this.tablePage.orders = []
+        if (obj.order != null) {
+          this.tablePage.orders = [{ column: obj.column.sortBy || this.$utils.toLine(obj.property), asc: obj.order === 'asc' }]
+        } else {
+          this.tablePage.orders = [{ column: 'a.create_date', asc: false }]
+        }
+        this.refreshList()
+      },
+      // 新增
+      add () {
+        this.$refs.dzfQuestionOpRecordForm.init('add', '')
+      },
+      // 修改
+      edit (id) {
+        id = id || this.$refs.dzfQuestionOpRecordTable.getCheckboxRecords().map(item => {
+          return item.id
+        })[0]
+        this.$refs.dzfQuestionOpRecordForm.init('edit', id)
+      },
+      // 查看
+      view (id) {
+        this.$refs.dzfQuestionOpRecordForm.init('view', id)
+      },
+      // 删除
+      del (id) {
+        let ids = id || this.$refs.dzfQuestionOpRecordTable.getCheckboxRecords().map(item => {
+          return item.id
+        }).join(',')
+        this.$confirm(`确定删除所选项吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.loading = true
+          dzfQuestionOpRecordService.delete(ids).then(({data}) => {
+            this.$message.success(data)
+            this.refreshList()
+            this.loading = false
+          })
+        })
+      },
+      // 下载模板
+      downloadTpl () {
+        this.loading = true
+        dzfQuestionOpRecordService.exportTemplate().then(({data}) => {
+    // 将二进制流文件写入excel表,以下为重要步骤
+          this.$utils.downloadExcel(data, '请假表单导入模板')
+          this.loading = false
+        }).catch(function (err) {
+          this.loading = false
+          if (err.response) {
+            console.log(err.response)
+          }
+        })
+      },
+      // 自定义服务端导入
+      importMethod ({ file }) {
+      // 处理表单
+        const formBody = new FormData()
+        formBody.append('file', file)
+        this.loading = true
+        dzfQuestionOpRecordService.importExcel(formBody).then(({data}) => {
+          this.$message.success({
+            dangerouslyUseHTMLString: true,
+            message: data
+          })
+          this.refreshList()
+        })
+      },
+      // 自定义服务端导出
+      exportMethod ({ options }) {
+      // 传给服务端的参数
+        const params = {
+          current: this.tablePage.currentPage,
+          size: this.tablePage.pageSize,
+          orders: this.tablePage.orders,
+          ...this.searchForm,
+          filename: options.filename,
+          sheetName: options.sheetName,
+          isHeader: options.isHeader,
+          original: options.original,
+          mode: options.mode,
+          selectIds: options.mode === 'selected' ? options.data.map((item) => item.id) : [],
+          exportFields: options.columns.map((column) => column.property && column.property.split('.')[0])
+        }
+        this.loading = true
+        return dzfQuestionOpRecordService.exportExcel(params).then(({data}) => {
+      // 将二进制流文件写入excel表,以下为重要步骤
+          this.$utils.downloadExcel(data, options.filename)
+          this.loading = false
+        }).catch(function (err) {
+          if (err.response) {
+            console.log(err.response)
+          }
+        })
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      }
+    }
+  }
+</script>
+

+ 260 - 0
jp-ui/src/views/modules/question/DzfQuestionForm.vue

@@ -0,0 +1,260 @@
+<template>
+<div>
+  <el-dialog
+    :title="title"
+    :close-on-click-modal="false"
+     v-dialogDrag
+    :visible.sync="visible">
+    <el-form :model="inputForm" size="small" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method==='view'"
+             label-width="120px">
+      <el-row  :gutter="15">
+        <el-col :span="12">
+            <!-- <el-form-item label="企业名称" prop="qyName"
+                :rules="[
+                 ]">
+                <user-select :limit='1' :value="inputForm.qyName" @getValue='(value) => {inputForm.qyName=value}'></user-select>
+           </el-form-item> -->
+
+           <el-form-item label="企业" prop="qyId"
+                :rules="[
+                  {required: true, message:'企业不能为空', trigger:'blur'}
+                 ]">
+                <qy-select :limit='1' :value="inputForm.qyId" @getValue='(value,name,sizs) => {inputForm.qyId=value;inputForm.qySd=sizs[0].des1;inputForm.qyFzr=sizs[0].lxr;inputForm.phone=sizs[0].phone;inputForm.officer=sizs[0].bz6;inputForm.officeName=sizs[0].bz5;}'  ></qy-select>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="属地" prop="qySd"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.qySd" placeholder="请填写属地"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="企业负责人" prop="qyFzr"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.qyFzr" placeholder="请填写企业负责人"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="负责人号码" prop="phone"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.phone" placeholder="请填写负责人号码"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="挂钩干部联系电话" prop="officer"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.officer" placeholder="请填写挂钩干部联系电话"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="挂钩干部姓名" prop="officeName"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.officeName" placeholder="请填写挂钩干部姓名"     ></el-input>
+           </el-form-item>
+        </el-col>
+    <el-col :span="24">
+     <el-form-item label-width="0">
+        <el-tabs v-model="dzfQuestionTab">
+            <el-tab-pane label="问题详情">
+                  <el-button @click="addDzfQuestionDetilRow" type="primary">新增</el-button>
+                  <el-table
+                  class="table"
+                  size="small"
+                  :data="inputForm.dzfQuestionDetilDTOList.filter((item) => { return item.delFlag !== '1'})"
+                  style="width: 100%">
+                  <el-table-column
+                    prop=""
+                    header-align="center"
+                    align="center"
+                    show-overflow-tooltip
+                    label="问题名称">
+                      <template  #default="{row}">
+                          <el-input v-model="row.qName" placeholder="请填写问题名称"     ></el-input>
+                      </template>
+                  </el-table-column>
+                  <el-table-column
+                    prop=""
+                    header-align="center"
+                    align="center"
+                    show-overflow-tooltip
+                    label="问题类别">
+                      <template  #default="{row}">
+                          <el-input v-model="row.qType" placeholder="请填写问题类别"     ></el-input>
+                      </template>
+                  </el-table-column>
+                  <el-table-column
+                    prop=""
+                    header-align="center"
+                    align="center"
+                    show-overflow-tooltip
+                    label="缺口数">
+                      <template  #default="{row}">
+                          <el-input v-model="row.gaps" placeholder="请填写缺口数"     ></el-input>
+                      </template>
+                  </el-table-column>
+                  <el-table-column
+                    prop=""
+                    header-align="center"
+                    align="center"
+                    show-overflow-tooltip
+                    label="问题描述">
+                      <template  #default="{row}">
+                          <el-input v-model="row.des" placeholder="请填写问题描述"     ></el-input>
+                      </template>
+                  </el-table-column>
+                  <el-table-column
+                    prop=""
+                    header-align="center"
+                    align="center"
+                    show-overflow-tooltip
+                    label="交办部门">
+                      <template  #default="{row}">
+                          <el-input v-model="row.dept" placeholder="请填写交办部门"     ></el-input>
+                      </template>
+                  </el-table-column>
+                  <el-table-column
+                    prop=""
+                    header-align="center"
+                    align="center"
+                    show-overflow-tooltip
+                    label="预计办结时间">
+                      <template  #default="{row}">
+                          <el-input v-model="row.preTime" placeholder="请填写预计办结时间"     ></el-input>
+                      </template>
+                  </el-table-column>
+                  <el-table-column
+                    fixed="right"
+                    label="操作"
+                    width="100">
+                    <template #default="{row}">
+                      <el-button  @click="delDzfQuestionDetilRow(row)" type="text" size="small">删除</el-button>
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </el-tab-pane>
+        </el-tabs>
+           </el-form-item>
+          </el-col>
+        </el-row>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button size="small" @click="visible = false">关闭</el-button>
+      <el-button size="small" type="primary" v-if="method != 'view'" @click="doSubmit()" v-noMoreClick>确定</el-button>
+    </span>
+  </el-dialog>
+</div>
+</template>
+
+<script>
+  import QySelect from '@/components/qySelect'
+  import dzfQuestionService from '@/api/question/dzfQuestionService'
+  export default {
+    data () {
+      return {
+        title: '',
+        method: '',
+        visible: false,
+        loading: false,
+        dzfQuestionTab: '0',
+        inputForm: {
+          id: '',
+          dzfQuestionDetilDTOList: [],
+          qyName: '',
+          qySd: '',
+          qyFzr: '',
+          phone: '',
+          officer: '',
+          officeName: ''
+        }
+      }
+    },
+    components: {
+      QySelect
+    },
+    methods: {
+      init (method, id) {
+        this.method = method
+        if (method === 'add') {
+          this.title = `新建问题诉求`
+        } else if (method === 'edit') {
+          this.title = '修改问题诉求'
+        } else if (method === 'view') {
+          this.title = '查看问题诉求'
+        }
+        this.visible = true
+        this.loading = false
+        this.$nextTick(() => {
+          this.$refs.inputForm.resetFields()
+          this.inputForm.id = id
+          this.dzfQuestionTab = '0'
+          this.inputForm.dzfQuestionDetilDTOList = []
+          if (method === 'edit' || method === 'view') { // 修改或者查看
+            this.loading = true
+            dzfQuestionService.queryById(this.inputForm.id).then(({data}) => {
+              this.inputForm = this.recover(this.inputForm, data)
+              this.loading = false
+            })
+          }
+        })
+      },
+      saveDzfQuestionDetilRow (child) {
+        if (child[0] === '') {
+          this.inputForm.dzfQuestionDetilDTOList.push(child[1])
+        } else {
+          this.inputForm.dzfQuestionDetilDTOList.forEach((item, index) => {
+            if (item === child[0]) {
+              this.inputForm.dzfQuestionDetilDTOList.splice(index, 1, child[1])
+            }
+          })
+        }
+      },
+      addDzfQuestionDetilRow () {
+        this.inputForm.dzfQuestionDetilDTOList.push({
+          qName: '',
+          qType: '',
+          gaps: '',
+          des: '',
+          dept: '',
+          preTime: ''
+        })
+      },
+      delDzfQuestionDetilRow (child) {
+        this.inputForm.dzfQuestionDetilDTOList.forEach((item, index) => {
+          if (item === child && item.id === '') {
+            this.inputForm.dzfQuestionDetilDTOList.splice(index, 1)
+          } else if (item === child) {
+            item.delFlag = '1'
+            this.inputForm.dzfQuestionDetilDTOList.splice(index, 1, item)
+          }
+        })
+      },
+      // 表单提交
+      doSubmit () {
+        this.$refs['inputForm'].validate((valid) => {
+          if (valid) {
+            this.loading = true
+            dzfQuestionService.save(this.inputForm).then(({data}) => {
+              this.visible = false
+              this.$message.success(data)
+              this.$emit('refreshDataList')
+              this.loading = false
+            }).catch(() => {
+              this.loading = false
+            })
+          }
+        })
+      },
+
+
+
+
+    }
+  }
+</script>
+
+

+ 385 - 0
jp-ui/src/views/modules/question/DzfQuestionList.vue

@@ -0,0 +1,385 @@
+<template>
+    <div class="page">
+      <el-form size="small" :inline="true" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+            <!-- 搜索框-->
+         <el-form-item prop="qyName">
+            <user-select :limit='1' size="small" placeholder="请选择企业名称" :value="searchForm.qyName" @getValue='(value) => {searchForm.qyName=value}'></user-select>
+         </el-form-item>
+         <el-form-item prop="qyFzr">
+                <el-input size="small" v-model="searchForm.qyFzr" placeholder="企业负责人" clearable></el-input>
+         </el-form-item>
+         <el-form-item prop="phone">
+                <el-input size="small" v-model="searchForm.phone" placeholder="负责人号码" clearable></el-input>
+         </el-form-item>
+         <el-form-item prop="officer">
+                <el-input size="small" v-model="searchForm.officer" placeholder="挂钩干部" clearable></el-input>
+         </el-form-item>
+         <el-form-item prop="officeName">
+                <el-input size="small" v-model="searchForm.officeName" placeholder="挂钩干部姓名" clearable></el-input>
+         </el-form-item>
+         <el-form-item prop="states">
+                <el-input size="small" v-model="searchForm.states" placeholder="问题状态" clearable></el-input>
+         </el-form-item>
+         <el-form-item prop="finishTime">
+                <el-input size="small" v-model="searchForm.finishTime" placeholder="办结时间" clearable></el-input>
+         </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
+            <el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
+          </el-form-item>
+      </el-form>
+
+     <div class="bg-white top">
+        <vxe-toolbar :refresh="{query: refreshList}" import export print custom>
+          <template #buttons>
+            <el-button v-if="hasPermission('question:dzfQuestion:add')" type="primary" size="small" icon="el-icon-plus" @click="add()">新建</el-button>
+            <el-button v-if="hasPermission('question:dzfQuestion:edit')" type="warning" size="small" icon="el-icon-edit-outline" @click="edit()" :disabled="$refs.dzfQuestionTable && $refs.dzfQuestionTable.getCheckboxRecords().length !== 1" plain>修改</el-button>
+            <el-button v-if="hasPermission('question:dzfQuestion:del')" type="danger"   size="small" icon="el-icon-delete" @click="del()" :disabled="$refs.dzfQuestionTable && $refs.dzfQuestionTable.getCheckboxRecords().length === 0" plain>删除</el-button>
+          </template>
+          <template #tools>
+            <vxe-button
+    		  type="default"
+    		  title="下载导入模板"
+    		  v-if="hasPermission('question:dzfQuestion:import')"
+    		  class="el-icon-document m-r-12"
+    		  @click="downloadTpl()"
+    		  circle
+            >
+            </vxe-button>
+          </template>
+        </vxe-toolbar>
+        <div style="height: calc(100% - 80px);">
+        <vxe-table
+            border="inner"
+            auto-resize
+            resizable
+            height="auto"
+            :loading="loading"
+            size="small"
+            ref="dzfQuestionTable"
+            show-header-overflow
+            show-overflow
+            highlight-hover-row
+            :menu-config="{}"
+            :print-config="{}"
+            :import-config="{
+            importMethod: importMethod,
+                types: ['csv', 'xls', 'xlsx'],
+                remote: true,
+            }"
+            :export-config="{
+                remote: true,
+                filename: `问题诉求数据${moment(new Date()).format(
+            		'YYYY-MM-DD'
+                )}`,
+                sheetName: '问题诉求数据',
+                exportMethod: exportMethod,
+                types: ['xlsx'],
+                modes: ['current', 'selected', 'all'],
+            }"
+            @sort-change="sortChangeHandle"
+            :sort-config="{remote:true}"
+            :expand-config="{accordion: true, lazy: true,loadMethod:detail}"
+            :data="dataList"
+            :checkbox-config="{}">
+            <vxe-column type="seq" width="40"></vxe-column>
+            <vxe-column type="checkbox"  width="40px"></vxe-column>
+            <vxe-column type="expand" width="80" >
+                <template #content="{ row }">
+                    <el-tabs>
+                            <el-tab-pane label="问题详情">
+                                <el-table
+                                        size="small"
+                                        :data="row.dzfQuestionDetilDTOList"
+                                        style="width: 100%">
+                                                    <el-table-column
+                                                            prop="qName"
+                                                            show-overflow-tooltip
+                                                            label="问题名称">
+                                                    </el-table-column>
+                                                    <el-table-column
+                                                            prop="qType"
+                                                            show-overflow-tooltip
+                                                            label="问题类别">
+                                                    </el-table-column>
+                                                    <el-table-column
+                                                            prop="gaps"
+                                                            show-overflow-tooltip
+                                                            label="缺口数">
+                                                    </el-table-column>
+                                                    <el-table-column
+                                                            prop="des"
+                                                            show-overflow-tooltip
+                                                            label="问题描述">
+                                                    </el-table-column>
+                                                    <el-table-column
+                                                            prop="dept"
+                                                            show-overflow-tooltip
+                                                            label="交办部门">
+                                                    </el-table-column>
+                                                    <el-table-column
+                                                            prop="preTime"
+                                                            show-overflow-tooltip
+                                                            label="预计办结时间">
+                                                    </el-table-column>
+                                </el-table>
+                            </el-tab-pane>
+                    </el-tabs>
+                </template>
+            </vxe-column>
+    <vxe-column
+        field="qyId"
+        sortable
+        title="企业id">
+            <template slot-scope="scope">
+              <el-link  type="primary" :underline="false" v-if="hasPermission('question:dzfQuestion:edit')" @click="edit(scope.row.id)">{{scope.row.qyId}}</el-link>
+              <el-link  type="primary" :underline="false" v-else-if="hasPermission('question:dzfQuestion:view')"  @click="view(scope.row.id)">{{scope.row.qyId}}</el-link>
+              <span v-else>{{scope.row.qyId}}</span>
+            </template>
+      </vxe-column>
+      <vxe-column
+        field=""
+        sortable
+        title="企业名称">
+            <template slot-scope="scope">
+                {{scope.row.qyName }}
+            </template>
+      </vxe-column>
+    <vxe-column
+        field="qySd"
+        sortable
+        title="属地">
+      </vxe-column>
+    <vxe-column
+        field="qyFzr"
+        sortable
+        title="企业负责人">
+      </vxe-column>
+    <vxe-column
+        field="phone"
+        sortable
+        title="负责人号码">
+      </vxe-column>
+    <vxe-column
+        field="officer"
+        sortable
+        title="挂钩干部">
+      </vxe-column>
+    <vxe-column
+        field="officeName"
+        sortable
+        title="挂钩干部姓名">
+      </vxe-column>
+    <vxe-column
+        field="states"
+        sortable
+        title="问题状态">
+      </vxe-column>
+    <vxe-column
+        field="finishTime"
+        sortable
+        title="办结时间">
+      </vxe-column>
+
+      <vxe-column
+        fixed="right"
+        align="center"
+        width="200"
+        title="操作">
+        <template  slot-scope="scope">
+          <el-button v-if="hasPermission('question:dzfQuestion:view')" type="text" icon="el-icon-view" size="small" @click="view(scope.row.id)">查看</el-button>
+          <el-button v-if="hasPermission('question:dzfQuestion:edit')" type="text" icon="el-icon-edit" size="small" @click="edit(scope.row.id)">修改</el-button>
+          <el-button v-if="hasPermission('question:dzfQuestion:del')" type="text"  icon="el-icon-delete" size="small" @click="del(scope.row.id)">删除</el-button>
+        </template>
+      </vxe-column>
+    </vxe-table>
+    <vxe-pager
+      background
+      size="small"
+      :current-page="tablePage.currentPage"
+      :page-size="tablePage.pageSize"
+      :total="tablePage.total"
+      :page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+      :layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+      @page-change="currentChangeHandle">
+    </vxe-pager>
+    </div>
+    </div>
+        <!-- 弹窗, 新增 / 修改 -->
+    <DzfQuestionForm  ref="dzfQuestionForm" @refreshDataList="refreshList"></DzfQuestionForm>
+  </div>
+</template>
+
+<script>
+  import DzfQuestionForm from './DzfQuestionForm'
+  import dzfQuestionService from '@/api/question/dzfQuestionService'
+  import UserSelect from '@/components/userSelect'
+  export default {
+    data () {
+      return {
+        searchForm: {
+          qyName: '',
+          qyFzr: '',
+          phone: '',
+          officer: '',
+          officeName: '',
+          states: '',
+          finishTime: ''
+        },
+        dataList: [],
+        tablePage: {
+          total: 0,
+          currentPage: 1,
+          pageSize: 10,
+          orders: [{ column: 'a.create_date', asc: false }]
+        },
+        loading: false
+      }
+    },
+    components: {
+      UserSelect,
+      DzfQuestionForm
+    },
+    activated () {
+      this.refreshList()
+    },
+    methods: {
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        dzfQuestionService.list({
+          'current': this.tablePage.currentPage,
+          'size': this.tablePage.pageSize,
+          'orders': this.tablePage.orders,
+          ...this.searchForm
+        }).then(({data}) => {
+          this.dataList = data.records
+          this.tablePage.total = data.total
+          this.loading = false
+        })
+      },
+      // 当前页
+      currentChangeHandle ({ currentPage, pageSize }) {
+        this.tablePage.currentPage = currentPage
+        this.tablePage.pageSize = pageSize
+        this.refreshList()
+      },
+      // 排序
+      sortChangeHandle (obj) {
+        this.tablePage.orders = []
+        if (obj.order != null) {
+          this.tablePage.orders = [{ column: obj.column.sortBy || this.$utils.toLine(obj.property), asc: obj.order === 'asc' }]
+        } else {
+          this.tablePage.orders = [{ column: 'a.create_date', asc: false }]
+        }
+        this.refreshList()
+      },
+      // 新增
+      add () {
+        this.$refs.dzfQuestionForm.init('add', '')
+      },
+      // 修改
+      edit (id) {
+        id = id || this.$refs.dzfQuestionTable.getCheckboxRecords().map(item => {
+          return item.id
+        })[0]
+        this.$refs.dzfQuestionForm.init('edit', id)
+      },
+      // 查看
+      view (id) {
+        this.$refs.dzfQuestionForm.init('view', id)
+      },
+      // 删除
+      del (id) {
+        let ids = id || this.$refs.dzfQuestionTable.getCheckboxRecords().map(item => {
+          return item.id
+        }).join(',')
+        this.$confirm(`确定删除所选项吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.loading = true
+          dzfQuestionService.delete(ids).then(({data}) => {
+            this.$message.success(data)
+            this.refreshList()
+            this.loading = false
+          })
+        })
+      },
+      // 下载模板
+      downloadTpl () {
+        this.loading = true
+        dzfQuestionService.exportTemplate().then(({data}) => {
+    // 将二进制流文件写入excel表,以下为重要步骤
+          this.$utils.downloadExcel(data, '请假表单导入模板')
+          this.loading = false
+        }).catch(function (err) {
+          this.loading = false
+          if (err.response) {
+            console.log(err.response)
+          }
+        })
+      },
+      // 自定义服务端导入
+      importMethod ({ file }) {
+      // 处理表单
+        const formBody = new FormData()
+        formBody.append('file', file)
+        this.loading = true
+        dzfQuestionService.importExcel(formBody).then(({data}) => {
+          this.$message.success({
+            dangerouslyUseHTMLString: true,
+            message: data
+          })
+          this.refreshList()
+        })
+      },
+      // 自定义服务端导出
+      exportMethod ({ options }) {
+      // 传给服务端的参数
+        const params = {
+          current: this.tablePage.currentPage,
+          size: this.tablePage.pageSize,
+          orders: this.tablePage.orders,
+          ...this.searchForm,
+          filename: options.filename,
+          sheetName: options.sheetName,
+          isHeader: options.isHeader,
+          original: options.original,
+          mode: options.mode,
+          selectIds: options.mode === 'selected' ? options.data.map((item) => item.id) : [],
+          exportFields: options.columns.map((column) => column.property && column.property.split('.')[0])
+        }
+        this.loading = true
+        return dzfQuestionService.exportExcel(params).then(({data}) => {
+      // 将二进制流文件写入excel表,以下为重要步骤
+          this.$utils.downloadExcel(data, options.filename)
+          this.loading = false
+        }).catch(function (err) {
+          if (err.response) {
+            console.log(err.response)
+          }
+        })
+      },
+      // 查看详情
+      detail ({row}) {
+        return new Promise(resolve => {
+          dzfQuestionService.queryById(row.id).then(({data}) => {
+            this.dataList.forEach((item, index) => {
+              if (item.id === row.id) {
+                item.dzfQuestionDetilDTOList = data.dzfQuestionDetilDTOList
+              }
+            })
+            resolve()
+          })
+        })
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      }
+    }
+  }
+</script>
+