Jelajahi Sumber

添加一键全部已读接口,添加报修,报废流程代码,修改活动预约因为查询到社团创建时间的显示错误,

xianwait 2 tahun lalu
induk
melakukan
ee060c015e
37 mengubah file dengan 2814 tambahan dan 5 penghapusan
  1. 35 0
      willalp-admin/src/main/java/com/willalp/web/controller/app/AppFLowController.java
  2. 14 0
      willalp-admin/src/main/java/com/willalp/web/controller/app/AppThreeController.java
  3. 104 0
      willalp-admin/src/main/java/com/willalp/web/controller/clockingin/HsDeviceRepairsController.java
  4. 104 0
      willalp-admin/src/main/java/com/willalp/web/controller/clockingin/HsDeviceScrapFlowRecordController.java
  5. 104 0
      willalp-admin/src/main/java/com/willalp/web/controller/clockingin/HsPurchaseFlowRecordController.java
  6. 6 0
      willalp-admin/src/main/java/com/willalp/web/controller/common/CommonController.java
  7. 1 1
      willalp-admin/src/main/resources/application-dev.yml
  8. 1 1
      willalp-admin/src/main/resources/application-prod.yml
  9. 1 1
      willalp-admin/src/main/resources/application.yml
  10. 150 0
      willalp-clocking-in/src/main/java/com/willalp/device/domain/HsDeviceRepairs.java
  11. 216 0
      willalp-clocking-in/src/main/java/com/willalp/device/domain/HsDeviceScrapFlowRecord.java
  12. 22 0
      willalp-clocking-in/src/main/java/com/willalp/device/mapper/HsDeviceRepairsMapper.java
  13. 22 0
      willalp-clocking-in/src/main/java/com/willalp/device/mapper/HsDeviceScrapFlowRecordMapper.java
  14. 61 0
      willalp-clocking-in/src/main/java/com/willalp/device/mapper/xml/HsDeviceRepairsMapper.xml
  15. 71 0
      willalp-clocking-in/src/main/java/com/willalp/device/mapper/xml/HsDeviceScrapFlowRecordMapper.xml
  16. 23 0
      willalp-clocking-in/src/main/java/com/willalp/device/service/IHsDeviceRepairsService.java
  17. 22 0
      willalp-clocking-in/src/main/java/com/willalp/device/service/IHsDeviceScrapFlowRecordService.java
  18. 35 0
      willalp-clocking-in/src/main/java/com/willalp/device/service/impl/HsDeviceRepairsServiceImpl.java
  19. 35 0
      willalp-clocking-in/src/main/java/com/willalp/device/service/impl/HsDeviceScrapFlowRecordServiceImpl.java
  20. 1 1
      willalp-clocking-in/src/main/java/com/willalp/event/mapper/xml/HsActivityAppointMapper.xml
  21. 242 0
      willalp-clocking-in/src/main/java/com/willalp/flow/domain/HsPurchaseFlowRecord.java
  22. 22 0
      willalp-clocking-in/src/main/java/com/willalp/flow/mapper/HsPurchaseFlowRecordMapper.java
  23. 79 0
      willalp-clocking-in/src/main/java/com/willalp/flow/mapper/xml/HsPurchaseFlowRecordMapper.xml
  24. 1 0
      willalp-clocking-in/src/main/java/com/willalp/flow/service/HsFlowEngineService.java
  25. 22 0
      willalp-clocking-in/src/main/java/com/willalp/flow/service/IHsPurchaseFlowRecordService.java
  26. 35 0
      willalp-clocking-in/src/main/java/com/willalp/flow/service/impl/HsPurchaseFlowRecordServiceImpl.java
  27. 8 0
      willalp-clocking-in/src/main/java/com/willalp/msg/mapper/HsAppUserMsgMapper.java
  28. 8 0
      willalp-clocking-in/src/main/java/com/willalp/msg/mapper/xml/HsAppUserMsgMapper.xml
  29. 7 0
      willalp-clocking-in/src/main/java/com/willalp/msg/service/IHsAppUserMsgService.java
  30. 13 0
      willalp-clocking-in/src/main/java/com/willalp/msg/service/impl/HsAppUserMsgServiceImpl.java
  31. 53 0
      willalp-ui/src/api/device/repairs.js
  32. 53 0
      willalp-ui/src/api/device/scrapRecord.js
  33. 53 0
      willalp-ui/src/api/flow/purchaseRecord.js
  34. 339 0
      willalp-ui/src/views/device/repairs/index.vue
  35. 414 0
      willalp-ui/src/views/device/scrapRecord/index.vue
  36. 0 1
      willalp-ui/src/views/event/applyRecord/index.vue
  37. 437 0
      willalp-ui/src/views/flow/purchaseRecord/index.vue

+ 35 - 0
willalp-admin/src/main/java/com/willalp/web/controller/app/AppFLowController.java

@@ -9,6 +9,8 @@ import com.willalp.common.core.domain.AjaxResult;
 import com.willalp.common.core.page.TableDataInfo;
 import com.willalp.common.utils.SecurityUtils;
 import com.willalp.common.utils.StringUtils;
+import com.willalp.device.domain.HsDeviceRepairs;
+import com.willalp.device.service.IHsDeviceRepairsService;
 import com.willalp.erms.domain.HsGoodsStorageRecord;
 import com.willalp.erms.service.IHsGoodsStorageRecordService;
 import com.willalp.erms.service.IHsGoodsStorageService;
@@ -141,6 +143,9 @@ public class AppFLowController extends BaseController {
     @Resource
     private IHsOrgPersonnelFilesService personnelFilesService;
 
+    @Resource
+    private IHsDeviceRepairsService deviceRepairsService;
+
     /**
      * 入职提交
      *
@@ -218,6 +223,36 @@ public class AppFLowController extends BaseController {
                 flowEngineService.submitTask(new HsFlowTask(taskId, idStr, reserveConsumingRunId), map));
     }
 
+    /**
+     * 设备报修提交
+     *
+     * @param deviceRepairs
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @ApiOperation("设备报修提交")
+    @PostMapping("/submitApply/deviceRepairs")
+    public AjaxResult submitDeviceRepairs(@RequestBody HsDeviceRepairs deviceRepairs) {
+        String idStr = IdWorker.getIdStr();
+        String taskId = IdWorker.getIdStr();
+        //入职流程组件
+        deviceRepairs.setId(idStr);
+        deviceRepairs.setCreateBy(SecurityUtils.getUsername());
+        deviceRepairs.setCreateTime(new Date());
+        deviceRepairs.setTitle("设备报修审批");
+        deviceRepairsService.save(deviceRepairs);
+        Map<String, Object> map = null;
+        try {
+            //对象转换为Map集合
+            map = BeanMapUtilByReflect.beanToMap(deviceRepairs);
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        }
+        String deviceRepairsRunId = sysConfigService.selectConfigByKey(HsFlowEngineService.DEVICE_REPAIRS_APPROVAL_FLOW_RUN_KEY);
+        return AjaxResult.success(
+                flowEngineService.submitTask(new HsFlowTask(taskId, idStr, deviceRepairsRunId), map));
+    }
+
 
     /**
      * 下一步

+ 14 - 0
willalp-admin/src/main/java/com/willalp/web/controller/app/AppThreeController.java

@@ -23,6 +23,7 @@ import com.willalp.event.domain.HsWelfareApplyRecord;
 import com.willalp.event.service.*;
 import com.willalp.files.service.IHsOrgPersonnelFilesService;
 import com.willalp.flow.service.IHsFlowCcService;
+import com.willalp.msg.service.IHsAppUserMsgService;
 import com.willalp.system.service.ISysDeptService;
 import com.willalp.system.service.ISysPostService;
 import io.swagger.annotations.Api;
@@ -80,6 +81,19 @@ public class AppThreeController extends BaseController {
     @Resource
     private IHsWelfareApplyRecordService welfareApplyRecordService;
 
+    @Resource
+    private IHsAppUserMsgService userMsgService;
+
+    /**
+     * 全部已读
+     *
+     * @return
+     */
+    @RequestMapping("/doAllRead")
+    public AjaxResult doAllRead() {
+        userMsgService.doAllRead(getUsername());
+        return AjaxResult.success();
+    }
 
     /**
      * 员工档案信息

+ 104 - 0
willalp-admin/src/main/java/com/willalp/web/controller/clockingin/HsDeviceRepairsController.java

@@ -0,0 +1,104 @@
+package com.willalp.web.controller.clockingin;
+
+import com.willalp.common.annotation.Log;
+import com.willalp.common.core.controller.BaseController;
+import com.willalp.common.core.domain.AjaxResult;
+import com.willalp.common.core.page.TableDataInfo;
+import com.willalp.common.enums.BusinessType;
+import com.willalp.common.utils.DateUtils;
+import com.willalp.common.utils.SecurityUtils;
+import com.willalp.common.utils.poi.ExcelUtil;
+import com.willalp.device.domain.HsDeviceRepairs;
+import com.willalp.device.service.IHsDeviceRepairsService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 设备报修流程记录Controller
+ *
+ * @author willalp
+ * @date 2023-04-21
+ */
+@RestController
+@RequestMapping("/device/repairs")
+public class HsDeviceRepairsController extends BaseController
+{
+    @Resource
+    private IHsDeviceRepairsService hsDeviceRepairsService;
+
+    /**
+     * 查询设备报修流程记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('device:repairs:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(HsDeviceRepairs hsDeviceRepairs)
+    {
+        startPage();
+        List<HsDeviceRepairs> list = hsDeviceRepairsService.selectHsDeviceRepairsList(hsDeviceRepairs);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出设备报修流程记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('device:repairs:export')")
+    @Log(title = "设备报修流程记录", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(HsDeviceRepairs hsDeviceRepairs)
+    {
+        List<HsDeviceRepairs> list = hsDeviceRepairsService.selectHsDeviceRepairsList(hsDeviceRepairs);
+        ExcelUtil<HsDeviceRepairs> util = new ExcelUtil<HsDeviceRepairs>(HsDeviceRepairs.class);
+        return util.exportExcel(list, "设备报修流程记录数据");
+    }
+
+    /**
+     * 获取设备报修流程记录详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('device:repairs:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return AjaxResult.success(hsDeviceRepairsService.getById(id));
+    }
+
+    /**
+     * 新增设备报修流程记录
+     */
+    @PreAuthorize("@ss.hasPermi('device:repairs:add')")
+    @Log(title = "设备报修流程记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody HsDeviceRepairs hsDeviceRepairs)
+    {
+        hsDeviceRepairs.setCreateBy(SecurityUtils.getUsername());
+        hsDeviceRepairs.setCreateTime(DateUtils.getNowDate());
+        return toAjax(hsDeviceRepairsService.save(hsDeviceRepairs));
+    }
+
+    /**
+     * 修改设备报修流程记录
+     */
+    @PreAuthorize("@ss.hasPermi('device:repairs:edit')")
+    @Log(title = "设备报修流程记录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody HsDeviceRepairs hsDeviceRepairs)
+    {
+        hsDeviceRepairs.setUpdateBy(SecurityUtils.getUsername());
+        hsDeviceRepairs.setUpdateTime(DateUtils.getNowDate());
+        return toAjax(hsDeviceRepairsService.updateById(hsDeviceRepairs));
+    }
+
+    /**
+     * 删除设备报修流程记录
+     */
+    @PreAuthorize("@ss.hasPermi('device:repairs:remove')")
+    @Log(title = "设备报修流程记录", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(hsDeviceRepairsService.removeByIds(Arrays.asList(ids)));
+    }
+}

+ 104 - 0
willalp-admin/src/main/java/com/willalp/web/controller/clockingin/HsDeviceScrapFlowRecordController.java

@@ -0,0 +1,104 @@
+package com.willalp.web.controller.clockingin;
+
+import com.willalp.common.annotation.Log;
+import com.willalp.common.core.controller.BaseController;
+import com.willalp.common.core.domain.AjaxResult;
+import com.willalp.common.core.page.TableDataInfo;
+import com.willalp.common.enums.BusinessType;
+import com.willalp.common.utils.DateUtils;
+import com.willalp.common.utils.SecurityUtils;
+import com.willalp.common.utils.poi.ExcelUtil;
+import com.willalp.device.domain.HsDeviceScrapFlowRecord;
+import com.willalp.device.service.IHsDeviceScrapFlowRecordService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 设备报废流程记录Controller
+ *
+ * @author willalp
+ * @date 2023-04-23
+ */
+@RestController
+@RequestMapping("/device/scrapRecord")
+public class HsDeviceScrapFlowRecordController extends BaseController
+{
+    @Resource
+    private IHsDeviceScrapFlowRecordService hsDeviceScrapFlowRecordService;
+
+    /**
+     * 查询设备报废流程记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('device:scrapRecord:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(HsDeviceScrapFlowRecord hsDeviceScrapFlowRecord)
+    {
+        startPage();
+        List<HsDeviceScrapFlowRecord> list = hsDeviceScrapFlowRecordService.selectHsDeviceScrapFlowRecordList(hsDeviceScrapFlowRecord);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出设备报废流程记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('device:scrapRecord:export')")
+    @Log(title = "设备报废流程记录", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(HsDeviceScrapFlowRecord hsDeviceScrapFlowRecord)
+    {
+        List<HsDeviceScrapFlowRecord> list = hsDeviceScrapFlowRecordService.selectHsDeviceScrapFlowRecordList(hsDeviceScrapFlowRecord);
+        ExcelUtil<HsDeviceScrapFlowRecord> util = new ExcelUtil<HsDeviceScrapFlowRecord>(HsDeviceScrapFlowRecord.class);
+        return util.exportExcel(list, "设备报废流程记录数据");
+    }
+
+    /**
+     * 获取设备报废流程记录详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('device:scrapRecord:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return AjaxResult.success(hsDeviceScrapFlowRecordService.getById(id));
+    }
+
+    /**
+     * 新增设备报废流程记录
+     */
+    @PreAuthorize("@ss.hasPermi('device:scrapRecord:add')")
+    @Log(title = "设备报废流程记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody HsDeviceScrapFlowRecord hsDeviceScrapFlowRecord)
+    {
+        hsDeviceScrapFlowRecord.setCreateBy(SecurityUtils.getUsername());
+        hsDeviceScrapFlowRecord.setCreateTime(DateUtils.getNowDate());
+        return toAjax(hsDeviceScrapFlowRecordService.save(hsDeviceScrapFlowRecord));
+    }
+
+    /**
+     * 修改设备报废流程记录
+     */
+    @PreAuthorize("@ss.hasPermi('device:scrapRecord:edit')")
+    @Log(title = "设备报废流程记录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody HsDeviceScrapFlowRecord hsDeviceScrapFlowRecord)
+    {
+        hsDeviceScrapFlowRecord.setUpdateBy(SecurityUtils.getUsername());
+        hsDeviceScrapFlowRecord.setUpdateTime(DateUtils.getNowDate());
+        return toAjax(hsDeviceScrapFlowRecordService.updateById(hsDeviceScrapFlowRecord));
+    }
+
+    /**
+     * 删除设备报废流程记录
+     */
+    @PreAuthorize("@ss.hasPermi('device:scrapRecord:remove')")
+    @Log(title = "设备报废流程记录", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(hsDeviceScrapFlowRecordService.removeByIds(Arrays.asList(ids)));
+    }
+}

+ 104 - 0
willalp-admin/src/main/java/com/willalp/web/controller/clockingin/HsPurchaseFlowRecordController.java

@@ -0,0 +1,104 @@
+package com.willalp.web.controller.clockingin;
+
+import com.willalp.common.annotation.Log;
+import com.willalp.common.core.controller.BaseController;
+import com.willalp.common.core.domain.AjaxResult;
+import com.willalp.common.core.page.TableDataInfo;
+import com.willalp.common.enums.BusinessType;
+import com.willalp.common.utils.DateUtils;
+import com.willalp.common.utils.SecurityUtils;
+import com.willalp.common.utils.poi.ExcelUtil;
+import com.willalp.flow.domain.HsPurchaseFlowRecord;
+import com.willalp.flow.service.IHsPurchaseFlowRecordService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 采购流程记录Controller
+ *
+ * @author willalp
+ * @date 2023-04-23
+ */
+@RestController
+@RequestMapping("/flow/purchaseRecord")
+public class HsPurchaseFlowRecordController extends BaseController
+{
+    @Resource
+    private IHsPurchaseFlowRecordService hsPurchaseFlowRecordService;
+
+    /**
+     * 查询采购流程记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('flow:purchaseRecord:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(HsPurchaseFlowRecord hsPurchaseFlowRecord)
+    {
+        startPage();
+        List<HsPurchaseFlowRecord> list = hsPurchaseFlowRecordService.selectHsPurchaseFlowRecordList(hsPurchaseFlowRecord);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出采购流程记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('flow:purchaseRecord:export')")
+    @Log(title = "采购流程记录", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(HsPurchaseFlowRecord hsPurchaseFlowRecord)
+    {
+        List<HsPurchaseFlowRecord> list = hsPurchaseFlowRecordService.selectHsPurchaseFlowRecordList(hsPurchaseFlowRecord);
+        ExcelUtil<HsPurchaseFlowRecord> util = new ExcelUtil<HsPurchaseFlowRecord>(HsPurchaseFlowRecord.class);
+        return util.exportExcel(list, "采购流程记录数据");
+    }
+
+    /**
+     * 获取采购流程记录详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('flow:purchaseRecord:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return AjaxResult.success(hsPurchaseFlowRecordService.getById(id));
+    }
+
+    /**
+     * 新增采购流程记录
+     */
+    @PreAuthorize("@ss.hasPermi('flow:purchaseRecord:add')")
+    @Log(title = "采购流程记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody HsPurchaseFlowRecord hsPurchaseFlowRecord)
+    {
+        hsPurchaseFlowRecord.setCreateBy(SecurityUtils.getUsername());
+        hsPurchaseFlowRecord.setCreateTime(DateUtils.getNowDate());
+        return toAjax(hsPurchaseFlowRecordService.save(hsPurchaseFlowRecord));
+    }
+
+    /**
+     * 修改采购流程记录
+     */
+    @PreAuthorize("@ss.hasPermi('flow:purchaseRecord:edit')")
+    @Log(title = "采购流程记录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody HsPurchaseFlowRecord hsPurchaseFlowRecord)
+    {
+        hsPurchaseFlowRecord.setUpdateBy(SecurityUtils.getUsername());
+        hsPurchaseFlowRecord.setUpdateTime(DateUtils.getNowDate());
+        return toAjax(hsPurchaseFlowRecordService.updateById(hsPurchaseFlowRecord));
+    }
+
+    /**
+     * 删除采购流程记录
+     */
+    @PreAuthorize("@ss.hasPermi('flow:purchaseRecord:remove')")
+    @Log(title = "采购流程记录", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(hsPurchaseFlowRecordService.removeByIds(Arrays.asList(ids)));
+    }
+}

+ 6 - 0
willalp-admin/src/main/java/com/willalp/web/controller/common/CommonController.java

@@ -74,6 +74,12 @@ public class CommonController {
             String url = FileUploadUtils.upload(filePath, file);
             AjaxResult ajax = AjaxResult.success();
             ajax.put("fileName", fileName);
+            if (StringUtils.isNotBlank(fileName)) {
+                String[] fileNmaes = fileName.split("\\.");
+                if (fileNmaes.length > 1) {
+                    ajax.put("extname", fileNmaes[1]);
+                }
+            }
             ajax.put("url", url);
             return ajax;
         } catch (Exception e) {

+ 1 - 1
willalp-admin/src/main/resources/application-dev.yml

@@ -39,7 +39,7 @@ spring:
     druid:
       # 主库数据源
       master:
-        url: jdbc:mysql://123.60.93.230:3306/willalp_pns_ml_dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
+        url: jdbc:mysql://123.60.93.230:3306/willalp_pns_ml_dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true
         #url: jdbc:mysql://114.115.142.166:3306/willalp_pns_prod?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         #url: jdbc:mysql://localhost:3306/willalp-pns-ml-dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root

+ 1 - 1
willalp-admin/src/main/resources/application-prod.yml

@@ -37,7 +37,7 @@ spring:
     druid:
       # 主库数据源
       master:
-        url: jdbc:mysql://114.115.142.166:3306/willalp_pns_prod?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
+        url: jdbc:mysql://114.115.142.166:3306/willalp_pns_prod?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true
         username: root
         #password: annaru_mysql
         password: willalp_mysql

+ 1 - 1
willalp-admin/src/main/resources/application.yml

@@ -21,7 +21,7 @@ spring:
     # 国际化资源文件路径
     basename: i18n/messages
   profiles:
-    active: prod
+    active: dev
   # 文件上传
   servlet:
     multipart:

+ 150 - 0
willalp-clocking-in/src/main/java/com/willalp/device/domain/HsDeviceRepairs.java

@@ -0,0 +1,150 @@
+package com.willalp.device.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.willalp.common.annotation.Excel;
+import com.willalp.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 设备报修流程记录对象 hs_device_repairs
+ *
+ * @author willalp
+ * @date 2023-04-21
+ */
+
+@TableName("hs_device_repairs")
+public class HsDeviceRepairs extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    @TableId
+    private String id;
+
+    /** 审批标题 */
+    @Excel(name = "审批标题")
+    private String title;
+
+    /** 设备位置 */
+    @Excel(name = "设备位置")
+    private String deviceLoca;
+
+    /** 紧急程度 */
+    @Excel(name = "紧急程度")
+    private String urgencyLevel;
+
+    /** 设备照片(5张最大) */
+    private String photos;
+
+    /** 申请部门 */
+    @Excel(name = "申请部门")
+    private String deptId;
+
+    /** 申请人 */
+    @Excel(name = "申请人")
+    private String applyUserName;
+
+    /**
+     * 报修说明
+     */
+    private String remark;
+
+    /** 是否删除(0.未删除;1.已删除) */
+    @TableLogic
+    private Integer isDelete;
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setDeviceLoca(String deviceLoca) {
+        this.deviceLoca = deviceLoca;
+    }
+
+    public String getDeviceLoca() {
+        return deviceLoca;
+    }
+
+    public void setUrgencyLevel(String urgencyLevel) {
+        this.urgencyLevel = urgencyLevel;
+    }
+
+    public String getUrgencyLevel() {
+        return urgencyLevel;
+    }
+
+    public void setPhotos(String photos) {
+        this.photos = photos;
+    }
+
+    public String getPhotos() {
+        return photos;
+    }
+
+    public void setDeptId(String deptId) {
+        this.deptId = deptId;
+    }
+
+    public String getDeptId() {
+        return deptId;
+    }
+
+    public void setApplyUserName(String applyUserName) {
+        this.applyUserName = applyUserName;
+    }
+
+    public String getApplyUserName() {
+        return applyUserName;
+    }
+
+    public void setIsDelete(Integer isDelete) {
+        this.isDelete = isDelete;
+    }
+
+    public Integer getIsDelete() {
+        return isDelete;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("title", getTitle())
+                .append("deviceLoca", getDeviceLoca())
+                .append("urgencyLevel", getUrgencyLevel())
+                .append("photos", getPhotos())
+                .append("deptId", getDeptId())
+                .append("applyUserName", getApplyUserName())
+                .append("isDelete", getIsDelete())
+                .append("createBy", getCreateBy())
+                .append("createTime", getCreateTime())
+                .append("updateBy", getUpdateBy())
+                .append("updateTime", getUpdateTime())
+                .append("remark", getRemark())
+                .toString();
+    }
+
+    @Override
+    public String getRemark() {
+        return remark;
+    }
+
+    @Override
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+}

+ 216 - 0
willalp-clocking-in/src/main/java/com/willalp/device/domain/HsDeviceScrapFlowRecord.java

@@ -0,0 +1,216 @@
+package com.willalp.device.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.willalp.common.annotation.Excel;
+import com.willalp.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 设备报废流程记录对象 hs_device_scrap_flow_record
+ *
+ * @author willalp
+ * @date 2023-04-23
+ */
+
+@TableName("hs_device_scrap_flow_record")
+public class HsDeviceScrapFlowRecord extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    @TableId
+    private String id;
+
+    /** 审批标题 */
+    @Excel(name = "审批标题")
+    private String title;
+
+    /** 用途 */
+    @Excel(name = "用途")
+    private String whatUse;
+
+    /** 设备类型 */
+    @Excel(name = "设备类型")
+    private String deviceType;
+
+    /** 设备名称 */
+    @Excel(name = "设备名称")
+    private String deviceName;
+
+    /** 规格 */
+    @Excel(name = "规格")
+    private String deviceGg;
+
+    /** 报废性质 */
+    @Excel(name = "报废性质")
+    private String scrapType;
+
+    /** 设备存放位置 */
+    @Excel(name = "设备存放位置")
+    private String depositLoca;
+
+    /** 报修状态 */
+    @Excel(name = "报修状态")
+    private String repairsStatus;
+
+    /** 图片(5张最大) */
+    @Excel(name = "图片", readConverterExp = "5=张最大")
+    private String photos;
+
+    /** 申请部门 */
+    @Excel(name = "申请部门")
+    private String deptId;
+
+    /** 申请人 */
+    @Excel(name = "申请人")
+    private String applyUserName;
+
+    /** 是否删除(0.未删除;1.已删除) */
+    @TableLogic
+    private Integer isDelete;
+
+    public void setId(String id)
+    {
+        this.id = id;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+    public void setTitle(String title)
+    {
+        this.title = title;
+    }
+
+    public String getTitle()
+    {
+        return title;
+    }
+    public void setWhatUse(String whatUse)
+    {
+        this.whatUse = whatUse;
+    }
+
+    public String getWhatUse()
+    {
+        return whatUse;
+    }
+    public void setDeviceType(String deviceType)
+    {
+        this.deviceType = deviceType;
+    }
+
+    public String getDeviceType()
+    {
+        return deviceType;
+    }
+    public void setDeviceName(String deviceName)
+    {
+        this.deviceName = deviceName;
+    }
+
+    public String getDeviceName()
+    {
+        return deviceName;
+    }
+    public void setDeviceGg(String deviceGg)
+    {
+        this.deviceGg = deviceGg;
+    }
+
+    public String getDeviceGg()
+    {
+        return deviceGg;
+    }
+    public void setScrapType(String scrapType)
+    {
+        this.scrapType = scrapType;
+    }
+
+    public String getScrapType()
+    {
+        return scrapType;
+    }
+    public void setDepositLoca(String depositLoca)
+    {
+        this.depositLoca = depositLoca;
+    }
+
+    public String getDepositLoca()
+    {
+        return depositLoca;
+    }
+    public void setRepairsStatus(String repairsStatus)
+    {
+        this.repairsStatus = repairsStatus;
+    }
+
+    public String getRepairsStatus()
+    {
+        return repairsStatus;
+    }
+    public void setPhotos(String photos)
+    {
+        this.photos = photos;
+    }
+
+    public String getPhotos()
+    {
+        return photos;
+    }
+    public void setDeptId(String deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public String getDeptId()
+    {
+        return deptId;
+    }
+    public void setApplyUserName(String applyUserName)
+    {
+        this.applyUserName = applyUserName;
+    }
+
+    public String getApplyUserName()
+    {
+        return applyUserName;
+    }
+    public void setIsDelete(Integer isDelete)
+    {
+        this.isDelete = isDelete;
+    }
+
+    public Integer getIsDelete()
+    {
+        return isDelete;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("title", getTitle())
+            .append("whatUse", getWhatUse())
+            .append("deviceType", getDeviceType())
+            .append("deviceName", getDeviceName())
+            .append("deviceGg", getDeviceGg())
+            .append("scrapType", getScrapType())
+            .append("depositLoca", getDepositLoca())
+            .append("repairsStatus", getRepairsStatus())
+            .append("photos", getPhotos())
+            .append("deptId", getDeptId())
+            .append("applyUserName", getApplyUserName())
+            .append("isDelete", getIsDelete())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 22 - 0
willalp-clocking-in/src/main/java/com/willalp/device/mapper/HsDeviceRepairsMapper.java

@@ -0,0 +1,22 @@
+package com.willalp.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import java.util.List;
+import com.willalp.device.domain.HsDeviceRepairs;
+
+/**
+ * 设备报修流程记录Mapper接口
+ *
+ * @author willalp
+ * @date 2023-04-21
+ */
+public interface HsDeviceRepairsMapper extends BaseMapper<HsDeviceRepairs>
+{
+    /**
+     * 查询设备报修流程记录列表
+     *
+     * @param hsDeviceRepairs 设备报修流程记录
+     * @return 设备报修流程记录集合
+     */
+    List<HsDeviceRepairs> selectHsDeviceRepairsList(HsDeviceRepairs hsDeviceRepairs);
+}

+ 22 - 0
willalp-clocking-in/src/main/java/com/willalp/device/mapper/HsDeviceScrapFlowRecordMapper.java

@@ -0,0 +1,22 @@
+package com.willalp.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import java.util.List;
+import com.willalp.device.domain.HsDeviceScrapFlowRecord;
+
+/**
+ * 设备报废流程记录Mapper接口
+ *
+ * @author willalp
+ * @date 2023-04-23
+ */
+public interface HsDeviceScrapFlowRecordMapper extends BaseMapper<HsDeviceScrapFlowRecord>
+{
+    /**
+     * 查询设备报废流程记录列表
+     *
+     * @param hsDeviceScrapFlowRecord 设备报废流程记录
+     * @return 设备报废流程记录集合
+     */
+    List<HsDeviceScrapFlowRecord> selectHsDeviceScrapFlowRecordList(HsDeviceScrapFlowRecord hsDeviceScrapFlowRecord);
+}

+ 61 - 0
willalp-clocking-in/src/main/java/com/willalp/device/mapper/xml/HsDeviceRepairsMapper.xml

@@ -0,0 +1,61 @@
+<?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.willalp.device.mapper.HsDeviceRepairsMapper">
+
+    <resultMap type="com.willalp.device.domain.HsDeviceRepairs" id="HsDeviceRepairsResult">
+        <result property="id" column="id"/>
+        <result property="title" column="title"/>
+        <result property="deviceLoca" column="device_loca"/>
+        <result property="urgencyLevel" column="urgency_level"/>
+        <result property="photos" column="photos"/>
+        <result property="deptId" column="dept_id"/>
+        <result property="applyUserName" column="apply_user_name"/>
+        <result property="isDelete" column="is_delete"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="remark" column="remark"/>
+    </resultMap>
+
+    <sql id="selectHsDeviceRepairsVo">
+        select id,
+               title,
+               device_loca,
+               urgency_level,
+               photos,
+               dept_id,
+               apply_user_name,
+               is_delete,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               remark
+        from hs_device_repairs
+    </sql>
+
+    <select id="selectHsDeviceRepairsList" parameterType="HsDeviceRepairs" resultMap="HsDeviceRepairsResult">
+        <include refid="selectHsDeviceRepairsVo"/>
+        <where>
+            is_delete = 0
+            <if test="title != null  and title != ''">
+                and title = #{title}
+            </if>
+            <if test="deviceLoca != null  and deviceLoca != ''">
+                and device_loca = #{deviceLoca}
+            </if>
+            <if test="urgencyLevel != null  and urgencyLevel != ''">
+                and urgency_level = #{urgencyLevel}
+            </if>
+            <if test="deptId != null  and deptId != ''">
+                and dept_id = #{deptId}
+            </if>
+            <if test="applyUserName != null  and applyUserName != ''">
+                and apply_user_name like concat('%', #{applyUserName}, '%')
+            </if>
+        </where>
+    </select>
+</mapper>

+ 71 - 0
willalp-clocking-in/src/main/java/com/willalp/device/mapper/xml/HsDeviceScrapFlowRecordMapper.xml

@@ -0,0 +1,71 @@
+<?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.willalp.device.mapper.HsDeviceScrapFlowRecordMapper">
+
+    <resultMap type="com.willalp.device.domain.HsDeviceScrapFlowRecord" id="HsDeviceScrapFlowRecordResult">
+                    <result property="id" column="id"/>
+                    <result property="title" column="title"/>
+                    <result property="whatUse" column="what_use"/>
+                    <result property="deviceType" column="device_type"/>
+                    <result property="deviceName" column="device_name"/>
+                    <result property="deviceGg" column="device_gg"/>
+                    <result property="scrapType" column="scrap_type"/>
+                    <result property="depositLoca" column="deposit_loca"/>
+                    <result property="repairsStatus" column="repairs_status"/>
+                    <result property="photos" column="photos"/>
+                    <result property="deptId" column="dept_id"/>
+                    <result property="applyUserName" column="apply_user_name"/>
+                    <result property="isDelete" column="is_delete"/>
+                    <result property="createBy" column="create_by"/>
+                    <result property="createTime" column="create_time"/>
+                    <result property="updateBy" column="update_by"/>
+                    <result property="updateTime" column="update_time"/>
+                    <result property="remark" column="remark"/>
+            </resultMap>
+    
+    <sql id="selectHsDeviceScrapFlowRecordVo">
+        select id, title, what_use, device_type, device_name, device_gg, scrap_type, deposit_loca, repairs_status, photos, dept_id, apply_user_name, is_delete, create_by, create_time, update_by, update_time, remark        from hs_device_scrap_flow_record
+    </sql>
+
+    <select id="selectHsDeviceScrapFlowRecordList" parameterType="HsDeviceScrapFlowRecord" resultMap="HsDeviceScrapFlowRecordResult">
+        <include refid="selectHsDeviceScrapFlowRecordVo"/>
+        <where>
+            is_delete = 0
+                                                                                                    <if test="title != null  and title != ''">
+                            and title = #{title}
+                        </if>
+                                                                                                            <if test="whatUse != null  and whatUse != ''">
+                            and what_use = #{whatUse}
+                        </if>
+                                                                                                            <if test="deviceType != null  and deviceType != ''">
+                            and device_type = #{deviceType}
+                        </if>
+                                                                                                            <if test="deviceName != null  and deviceName != ''">
+                            and device_name like concat('%', #{deviceName}, '%')
+                        </if>
+                                                                                                            <if test="deviceGg != null  and deviceGg != ''">
+                            and device_gg = #{deviceGg}
+                        </if>
+                                                                                                            <if test="scrapType != null  and scrapType != ''">
+                            and scrap_type = #{scrapType}
+                        </if>
+                                                                                                            <if test="depositLoca != null  and depositLoca != ''">
+                            and deposit_loca = #{depositLoca}
+                        </if>
+                                                                                                            <if test="repairsStatus != null  and repairsStatus != ''">
+                            and repairs_status = #{repairsStatus}
+                        </if>
+                                                                                                            <if test="photos != null  and photos != ''">
+                            and photos = #{photos}
+                        </if>
+                                                                                                            <if test="deptId != null  and deptId != ''">
+                            and dept_id = #{deptId}
+                        </if>
+                                                                                                            <if test="applyUserName != null  and applyUserName != ''">
+                            and apply_user_name like concat('%', #{applyUserName}, '%')
+                        </if>
+                                                                                                                                                                                                                                </where>
+    </select>
+</mapper>

+ 23 - 0
willalp-clocking-in/src/main/java/com/willalp/device/service/IHsDeviceRepairsService.java

@@ -0,0 +1,23 @@
+package com.willalp.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.willalp.device.domain.HsDeviceRepairs;
+
+import java.util.List;
+
+/**
+ * 设备报修流程记录Service接口
+ *
+ * @author willalp
+ * @date 2023-04-21
+ */
+public interface IHsDeviceRepairsService extends IService<HsDeviceRepairs>
+{
+    /**
+     * 查询设备报修流程记录列表
+     *
+     * @param hsDeviceRepairs 设备报修流程记录
+     * @return 设备报修流程记录集合
+     */
+    public List<HsDeviceRepairs> selectHsDeviceRepairsList(HsDeviceRepairs hsDeviceRepairs);
+}

+ 22 - 0
willalp-clocking-in/src/main/java/com/willalp/device/service/IHsDeviceScrapFlowRecordService.java

@@ -0,0 +1,22 @@
+package com.willalp.device.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.willalp.device.domain.HsDeviceScrapFlowRecord;
+
+/**
+ * 设备报废流程记录Service接口
+ *
+ * @author willalp
+ * @date 2023-04-23
+ */
+public interface IHsDeviceScrapFlowRecordService extends IService<HsDeviceScrapFlowRecord>
+{
+    /**
+     * 查询设备报废流程记录列表
+     *
+     * @param hsDeviceScrapFlowRecord 设备报废流程记录
+     * @return 设备报废流程记录集合
+     */
+    public List<HsDeviceScrapFlowRecord> selectHsDeviceScrapFlowRecordList(HsDeviceScrapFlowRecord hsDeviceScrapFlowRecord);
+}

+ 35 - 0
willalp-clocking-in/src/main/java/com/willalp/device/service/impl/HsDeviceRepairsServiceImpl.java

@@ -0,0 +1,35 @@
+package com.willalp.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.willalp.device.domain.HsDeviceRepairs;
+import com.willalp.device.mapper.HsDeviceRepairsMapper;
+import com.willalp.device.service.IHsDeviceRepairsService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 设备报修流程记录Service业务层处理
+ *
+ * @author willalp
+ * @date 2023-04-21
+ */
+@Service
+public class HsDeviceRepairsServiceImpl extends ServiceImpl<HsDeviceRepairsMapper, HsDeviceRepairs>  implements IHsDeviceRepairsService
+{
+    @Resource
+    private HsDeviceRepairsMapper hsDeviceRepairsMapper;
+
+    /**
+     * 查询设备报修流程记录列表
+     *
+     * @param hsDeviceRepairs 设备报修流程记录
+     * @return 设备报修流程记录
+     */
+    @Override
+    public List<HsDeviceRepairs> selectHsDeviceRepairsList(HsDeviceRepairs hsDeviceRepairs)
+    {
+        return hsDeviceRepairsMapper.selectHsDeviceRepairsList(hsDeviceRepairs);
+    }
+}

+ 35 - 0
willalp-clocking-in/src/main/java/com/willalp/device/service/impl/HsDeviceScrapFlowRecordServiceImpl.java

@@ -0,0 +1,35 @@
+package com.willalp.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.List;
+import com.willalp.common.utils.DateUtils;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Service;
+import com.willalp.device.mapper.HsDeviceScrapFlowRecordMapper;
+import com.willalp.device.domain.HsDeviceScrapFlowRecord;
+import com.willalp.device.service.IHsDeviceScrapFlowRecordService;
+
+/**
+ * 设备报废流程记录Service业务层处理
+ *
+ * @author willalp
+ * @date 2023-04-23
+ */
+@Service
+public class HsDeviceScrapFlowRecordServiceImpl extends ServiceImpl<HsDeviceScrapFlowRecordMapper, HsDeviceScrapFlowRecord>  implements IHsDeviceScrapFlowRecordService
+{
+    @Resource
+    private HsDeviceScrapFlowRecordMapper hsDeviceScrapFlowRecordMapper;
+
+    /**
+     * 查询设备报废流程记录列表
+     *
+     * @param hsDeviceScrapFlowRecord 设备报废流程记录
+     * @return 设备报废流程记录
+     */
+    @Override
+    public List<HsDeviceScrapFlowRecord> selectHsDeviceScrapFlowRecordList(HsDeviceScrapFlowRecord hsDeviceScrapFlowRecord)
+    {
+        return hsDeviceScrapFlowRecordMapper.selectHsDeviceScrapFlowRecordList(hsDeviceScrapFlowRecord);
+    }
+}

+ 1 - 1
willalp-clocking-in/src/main/java/com/willalp/event/mapper/xml/HsActivityAppointMapper.xml

@@ -70,7 +70,7 @@
                he.event_name       eventName,
                he.event_start_time eventTime,
                hai.project_name    eventType,
-               hai.create_time
+               haa.create_time
         from hs_activity_appoint haa
                  left join hs_event he on haa.activity_id = he.id
                  left join hs_associations_info hai on hai.id = he.activity_type_id

+ 242 - 0
willalp-clocking-in/src/main/java/com/willalp/flow/domain/HsPurchaseFlowRecord.java

@@ -0,0 +1,242 @@
+package com.willalp.flow.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.willalp.common.annotation.Excel;
+import com.willalp.common.core.domain.BaseEntity;
+
+/**
+ * 采购流程记录对象 hs_purchase_flow_record
+ *
+ * @author willalp
+ * @date 2023-04-23
+ */
+
+@TableName("hs_purchase_flow_record")
+public class HsPurchaseFlowRecord extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private String id;
+
+    /** 审批标题 */
+    @Excel(name = "审批标题")
+    private String title;
+
+    /** 用途 */
+    @Excel(name = "用途")
+    private String whatUse;
+
+    /** 物品类型 */
+    @Excel(name = "物品类型")
+    private String goodsType;
+
+    /** 物品名称 */
+    @Excel(name = "物品名称")
+    private String goodsName;
+
+    /** 规格 */
+    @Excel(name = "规格")
+    private String goodsGg;
+
+    /** 需求数量 */
+    @Excel(name = "需求数量")
+    private Long wantUseAmount;
+
+    /** 预估单价 */
+    @Excel(name = "预估单价")
+    private BigDecimal ygUnitPrice;
+
+    /** 预估总价 */
+    @Excel(name = "预估总价")
+    private String ygTotalPrices;
+
+    /** 采购状态 */
+    @Excel(name = "采购状态")
+    private String purchaseStatus;
+
+    /** 图片(5张最大) */
+    @Excel(name = "图片", readConverterExp = "5=张最大")
+    private String photos;
+
+    /** 附件 */
+    @Excel(name = "附件")
+    private String involveFile;
+
+    /** 申请部门 */
+    @Excel(name = "申请部门")
+    private String deptId;
+
+    /** 申请人 */
+    @Excel(name = "申请人")
+    private String applyUserName;
+
+    /** 是否删除(0.未删除;1.已删除) */
+    private Integer isDelete;
+
+    public void setId(String id)
+    {
+        this.id = id;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+    public void setTitle(String title)
+    {
+        this.title = title;
+    }
+
+    public String getTitle()
+    {
+        return title;
+    }
+    public void setWhatUse(String whatUse)
+    {
+        this.whatUse = whatUse;
+    }
+
+    public String getWhatUse()
+    {
+        return whatUse;
+    }
+    public void setGoodsType(String goodsType)
+    {
+        this.goodsType = goodsType;
+    }
+
+    public String getGoodsType()
+    {
+        return goodsType;
+    }
+    public void setGoodsName(String goodsName)
+    {
+        this.goodsName = goodsName;
+    }
+
+    public String getGoodsName()
+    {
+        return goodsName;
+    }
+    public void setGoodsGg(String goodsGg)
+    {
+        this.goodsGg = goodsGg;
+    }
+
+    public String getGoodsGg()
+    {
+        return goodsGg;
+    }
+    public void setWantUseAmount(Long wantUseAmount)
+    {
+        this.wantUseAmount = wantUseAmount;
+    }
+
+    public Long getWantUseAmount()
+    {
+        return wantUseAmount;
+    }
+    public void setYgUnitPrice(BigDecimal ygUnitPrice)
+    {
+        this.ygUnitPrice = ygUnitPrice;
+    }
+
+    public BigDecimal getYgUnitPrice()
+    {
+        return ygUnitPrice;
+    }
+    public void setYgTotalPrices(String ygTotalPrices)
+    {
+        this.ygTotalPrices = ygTotalPrices;
+    }
+
+    public String getYgTotalPrices()
+    {
+        return ygTotalPrices;
+    }
+    public void setPurchaseStatus(String purchaseStatus)
+    {
+        this.purchaseStatus = purchaseStatus;
+    }
+
+    public String getPurchaseStatus()
+    {
+        return purchaseStatus;
+    }
+    public void setPhotos(String photos)
+    {
+        this.photos = photos;
+    }
+
+    public String getPhotos()
+    {
+        return photos;
+    }
+    public void setInvolveFile(String involveFile)
+    {
+        this.involveFile = involveFile;
+    }
+
+    public String getInvolveFile()
+    {
+        return involveFile;
+    }
+    public void setDeptId(String deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public String getDeptId()
+    {
+        return deptId;
+    }
+    public void setApplyUserName(String applyUserName)
+    {
+        this.applyUserName = applyUserName;
+    }
+
+    public String getApplyUserName()
+    {
+        return applyUserName;
+    }
+    public void setIsDelete(Integer isDelete)
+    {
+        this.isDelete = isDelete;
+    }
+
+    public Integer getIsDelete()
+    {
+        return isDelete;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("title", getTitle())
+            .append("whatUse", getWhatUse())
+            .append("goodsType", getGoodsType())
+            .append("goodsName", getGoodsName())
+            .append("goodsGg", getGoodsGg())
+            .append("wantUseAmount", getWantUseAmount())
+            .append("ygUnitPrice", getYgUnitPrice())
+            .append("ygTotalPrices", getYgTotalPrices())
+            .append("purchaseStatus", getPurchaseStatus())
+            .append("photos", getPhotos())
+            .append("involveFile", getInvolveFile())
+            .append("deptId", getDeptId())
+            .append("applyUserName", getApplyUserName())
+            .append("isDelete", getIsDelete())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 22 - 0
willalp-clocking-in/src/main/java/com/willalp/flow/mapper/HsPurchaseFlowRecordMapper.java

@@ -0,0 +1,22 @@
+package com.willalp.flow.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import java.util.List;
+import com.willalp.flow.domain.HsPurchaseFlowRecord;
+
+/**
+ * 采购流程记录Mapper接口
+ *
+ * @author willalp
+ * @date 2023-04-23
+ */
+public interface HsPurchaseFlowRecordMapper extends BaseMapper<HsPurchaseFlowRecord>
+{
+    /**
+     * 查询采购流程记录列表
+     *
+     * @param hsPurchaseFlowRecord 采购流程记录
+     * @return 采购流程记录集合
+     */
+    List<HsPurchaseFlowRecord> selectHsPurchaseFlowRecordList(HsPurchaseFlowRecord hsPurchaseFlowRecord);
+}

+ 79 - 0
willalp-clocking-in/src/main/java/com/willalp/flow/mapper/xml/HsPurchaseFlowRecordMapper.xml

@@ -0,0 +1,79 @@
+<?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.willalp.flow.mapper.HsPurchaseFlowRecordMapper">
+
+    <resultMap type="com.willalp.flow.domain.HsPurchaseFlowRecord" id="HsPurchaseFlowRecordResult">
+                    <result property="id" column="id"/>
+                    <result property="title" column="title"/>
+                    <result property="whatUse" column="what_use"/>
+                    <result property="goodsType" column="goods_type"/>
+                    <result property="goodsName" column="goods_name"/>
+                    <result property="goodsGg" column="goods_gg"/>
+                    <result property="wantUseAmount" column="want_use_amount"/>
+                    <result property="ygUnitPrice" column="yg_unit_price"/>
+                    <result property="ygTotalPrices" column="yg_total_prices"/>
+                    <result property="purchaseStatus" column="purchase_status"/>
+                    <result property="photos" column="photos"/>
+                    <result property="involveFile" column="involve_file"/>
+                    <result property="deptId" column="dept_id"/>
+                    <result property="applyUserName" column="apply_user_name"/>
+                    <result property="isDelete" column="is_delete"/>
+                    <result property="createBy" column="create_by"/>
+                    <result property="createTime" column="create_time"/>
+                    <result property="updateBy" column="update_by"/>
+                    <result property="updateTime" column="update_time"/>
+                    <result property="remark" column="remark"/>
+            </resultMap>
+    
+    <sql id="selectHsPurchaseFlowRecordVo">
+        select id, title, what_use, goods_type, goods_name, goods_gg, want_use_amount, yg_unit_price, yg_total_prices, purchase_status, photos, involve_file, dept_id, apply_user_name, is_delete, create_by, create_time, update_by, update_time, remark        from hs_purchase_flow_record
+    </sql>
+
+    <select id="selectHsPurchaseFlowRecordList" parameterType="HsPurchaseFlowRecord" resultMap="HsPurchaseFlowRecordResult">
+        <include refid="selectHsPurchaseFlowRecordVo"/>
+        <where>
+            is_delete = 0
+                                                                                                    <if test="title != null  and title != ''">
+                            and title = #{title}
+                        </if>
+                                                                                                            <if test="whatUse != null  and whatUse != ''">
+                            and what_use = #{whatUse}
+                        </if>
+                                                                                                            <if test="goodsType != null  and goodsType != ''">
+                            and goods_type = #{goodsType}
+                        </if>
+                                                                                                            <if test="goodsName != null  and goodsName != ''">
+                            and goods_name like concat('%', #{goodsName}, '%')
+                        </if>
+                                                                                                            <if test="goodsGg != null  and goodsGg != ''">
+                            and goods_gg = #{goodsGg}
+                        </if>
+                                                                                                            <if test="wantUseAmount != null ">
+                            and want_use_amount = #{wantUseAmount}
+                        </if>
+                                                                                                            <if test="ygUnitPrice != null ">
+                            and yg_unit_price = #{ygUnitPrice}
+                        </if>
+                                                                                                            <if test="ygTotalPrices != null  and ygTotalPrices != ''">
+                            and yg_total_prices = #{ygTotalPrices}
+                        </if>
+                                                                                                            <if test="purchaseStatus != null  and purchaseStatus != ''">
+                            and purchase_status = #{purchaseStatus}
+                        </if>
+                                                                                                            <if test="photos != null  and photos != ''">
+                            and photos = #{photos}
+                        </if>
+                                                                                                            <if test="involveFile != null  and involveFile != ''">
+                            and involve_file = #{involveFile}
+                        </if>
+                                                                                                            <if test="deptId != null  and deptId != ''">
+                            and dept_id = #{deptId}
+                        </if>
+                                                                                                            <if test="applyUserName != null  and applyUserName != ''">
+                            and apply_user_name like concat('%', #{applyUserName}, '%')
+                        </if>
+                                                                                                                                                                                                                                </where>
+    </select>
+</mapper>

+ 1 - 0
willalp-clocking-in/src/main/java/com/willalp/flow/service/HsFlowEngineService.java

@@ -32,6 +32,7 @@ public interface HsFlowEngineService {
     String PRSSONNEl_HIRE_APP_FLOW_RUN_KEY = "personnel_hire_approval_flow_run_key";
     /** 员工离职流程配置key*/
     String PERSONNEL_DIMISSION_APPROVAL_FLOW_RUN_KEY = "personnel_dimission_approval_flow_run_key";
+    String DEVICE_REPAIRS_APPROVAL_FLOW_RUN_KEY = "device_repairs_approval_flow_run_key";
 
     /** 空节点*/
     String EMPTY = "EMPTY";

+ 22 - 0
willalp-clocking-in/src/main/java/com/willalp/flow/service/IHsPurchaseFlowRecordService.java

@@ -0,0 +1,22 @@
+package com.willalp.flow.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.willalp.flow.domain.HsPurchaseFlowRecord;
+
+/**
+ * 采购流程记录Service接口
+ *
+ * @author willalp
+ * @date 2023-04-23
+ */
+public interface IHsPurchaseFlowRecordService extends IService<HsPurchaseFlowRecord>
+{
+    /**
+     * 查询采购流程记录列表
+     *
+     * @param hsPurchaseFlowRecord 采购流程记录
+     * @return 采购流程记录集合
+     */
+    public List<HsPurchaseFlowRecord> selectHsPurchaseFlowRecordList(HsPurchaseFlowRecord hsPurchaseFlowRecord);
+}

+ 35 - 0
willalp-clocking-in/src/main/java/com/willalp/flow/service/impl/HsPurchaseFlowRecordServiceImpl.java

@@ -0,0 +1,35 @@
+package com.willalp.flow.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.List;
+import com.willalp.common.utils.DateUtils;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Service;
+import com.willalp.flow.mapper.HsPurchaseFlowRecordMapper;
+import com.willalp.flow.domain.HsPurchaseFlowRecord;
+import com.willalp.flow.service.IHsPurchaseFlowRecordService;
+
+/**
+ * 采购流程记录Service业务层处理
+ *
+ * @author willalp
+ * @date 2023-04-23
+ */
+@Service
+public class HsPurchaseFlowRecordServiceImpl extends ServiceImpl<HsPurchaseFlowRecordMapper, HsPurchaseFlowRecord>  implements IHsPurchaseFlowRecordService
+{
+    @Resource
+    private HsPurchaseFlowRecordMapper hsPurchaseFlowRecordMapper;
+
+    /**
+     * 查询采购流程记录列表
+     *
+     * @param hsPurchaseFlowRecord 采购流程记录
+     * @return 采购流程记录
+     */
+    @Override
+    public List<HsPurchaseFlowRecord> selectHsPurchaseFlowRecordList(HsPurchaseFlowRecord hsPurchaseFlowRecord)
+    {
+        return hsPurchaseFlowRecordMapper.selectHsPurchaseFlowRecordList(hsPurchaseFlowRecord);
+    }
+}

+ 8 - 0
willalp-clocking-in/src/main/java/com/willalp/msg/mapper/HsAppUserMsgMapper.java

@@ -49,4 +49,12 @@ public interface HsAppUserMsgMapper extends EasyBaseMapper<HsAppUserMsg> {
     int allReadMsgByUserCode(@Param("uc") String uc);
 
 
+
+    /**
+     * 消息设置全部已读
+     *
+     * @param userCode
+     */
+    int doAllRead(@Param("userCode") String userCode);
+
 }

+ 8 - 0
willalp-clocking-in/src/main/java/com/willalp/msg/mapper/xml/HsAppUserMsgMapper.xml

@@ -36,6 +36,14 @@
                remark
         from hs_app_user_msg
     </sql>
+    <update id="doAllRead">
+        update hs_app_user_msg
+        set msg_is_read = 1
+        where user_code = #{userCode};
+        update hs_flow_task
+        set msg_is_read = 1
+        where operator = #{userCode};
+    </update>
     <select id="selectHsAppUserMsgList" parameterType="HsAppUserMsg" resultMap="HsAppUserMsgResult">
         <include refid="selectHsAppUserMsgVo"/>
         <where>

+ 7 - 0
willalp-clocking-in/src/main/java/com/willalp/msg/service/IHsAppUserMsgService.java

@@ -36,6 +36,13 @@ public interface IHsAppUserMsgService extends IService<HsAppUserMsg>
      */
     void readReceiptVerify(String userCode);
 
+    /**
+     * 消息设置全部已读
+     *
+     * @param userCode
+     */
+    void doAllRead(String userCode);
+
     /**
      * 按照ID 已读(DB中)
      *

+ 13 - 0
willalp-clocking-in/src/main/java/com/willalp/msg/service/impl/HsAppUserMsgServiceImpl.java

@@ -77,6 +77,19 @@ public class HsAppUserMsgServiceImpl extends ServiceImpl<HsAppUserMsgMapper, HsA
         }
     }
 
+    @Override
+    public void doAllRead(String userCode) {
+        if (StringUtils.isBlank(userCode)) {
+            throw new BaseException("User code is blank");
+        }
+        int result = hsAppUserMsgMapper.doAllRead(userCode);
+        if (result > 0) {
+            if (null != WebSocketUsers.getUsers().get(userCode)) {
+                WebSocketUsers.sendMessageToUserByText(WebSocketUsers.getUsers().get(userCode), "all_Read");
+            }
+        }
+    }
+
     private void userMsgStatPush(List<HsAppUserMsg> msgs) {
         List<SysDictData> appMsgType = sysDictTypeService.selectDictDataByType("app_msg_type");
         if (null == appMsgType || appMsgType.size() <= 0) {

+ 53 - 0
willalp-ui/src/api/device/repairs.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询设备报修流程记录列表
+export function listRepairs(query) {
+  return request({
+    url: '/device/repairs/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询设备报修流程记录详细
+export function getRepairs(id) {
+  return request({
+    url: '/device/repairs/' + id,
+    method: 'get'
+  })
+}
+
+// 新增设备报修流程记录
+export function addRepairs(data) {
+  return request({
+    url: '/device/repairs',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改设备报修流程记录
+export function updateRepairs(data) {
+  return request({
+    url: '/device/repairs',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除设备报修流程记录
+export function delRepairs(id) {
+  return request({
+    url: '/device/repairs/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出设备报修流程记录
+export function exportRepairs(query) {
+  return request({
+    url: '/device/repairs/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
willalp-ui/src/api/device/scrapRecord.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询设备报废流程记录列表
+export function listScrapRecord(query) {
+  return request({
+    url: '/device/scrapRecord/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询设备报废流程记录详细
+export function getScrapRecord(id) {
+  return request({
+    url: '/device/scrapRecord/' + id,
+    method: 'get'
+  })
+}
+
+// 新增设备报废流程记录
+export function addScrapRecord(data) {
+  return request({
+    url: '/device/scrapRecord',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改设备报废流程记录
+export function updateScrapRecord(data) {
+  return request({
+    url: '/device/scrapRecord',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除设备报废流程记录
+export function delScrapRecord(id) {
+  return request({
+    url: '/device/scrapRecord/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出设备报废流程记录
+export function exportScrapRecord(query) {
+  return request({
+    url: '/device/scrapRecord/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
willalp-ui/src/api/flow/purchaseRecord.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询采购流程记录列表
+export function listPurchaseRecord(query) {
+  return request({
+    url: '/flow/purchaseRecord/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询采购流程记录详细
+export function getPurchaseRecord(id) {
+  return request({
+    url: '/flow/purchaseRecord/' + id,
+    method: 'get'
+  })
+}
+
+// 新增采购流程记录
+export function addPurchaseRecord(data) {
+  return request({
+    url: '/flow/purchaseRecord',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改采购流程记录
+export function updatePurchaseRecord(data) {
+  return request({
+    url: '/flow/purchaseRecord',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除采购流程记录
+export function delPurchaseRecord(id) {
+  return request({
+    url: '/flow/purchaseRecord/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出采购流程记录
+export function exportPurchaseRecord(query) {
+  return request({
+    url: '/flow/purchaseRecord/export',
+    method: 'get',
+    params: query
+  })
+}

+ 339 - 0
willalp-ui/src/views/device/repairs/index.vue

@@ -0,0 +1,339 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
+      <el-form-item label="审批标题" prop="title">
+        <el-input
+          v-model="queryParams.title"
+          placeholder="请输入审批标题"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="设备位置" prop="deviceLoca">
+        <el-input
+          v-model="queryParams.deviceLoca"
+          placeholder="请输入设备位置"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="紧急程度" prop="urgencyLevel">
+        <el-select v-model="queryParams.urgencyLevel" placeholder="请选择紧急程度" clearable size="small">
+          <el-option
+            v-for="dict in dict.type.device_repairs_urgency_level"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="申请部门" prop="deptId">
+        <el-select v-model="queryParams.deptId" placeholder="请选择申请部门" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="申请人" prop="applyUserName">
+        <el-input
+          v-model="queryParams.applyUserName"
+          placeholder="请输入申请人"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['device:repairs:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['device:repairs:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['device:repairs:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+          v-hasPermi="['device:repairs:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="repairsList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="主键" align="center" prop="id" />
+      <el-table-column label="审批标题" align="center" prop="title" />
+      <el-table-column label="设备位置" align="center" prop="deviceLoca" />
+      <el-table-column label="紧急程度" align="center" prop="urgencyLevel">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.device_repairs_urgency_level" :value="scope.row.urgencyLevel"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="申请部门" align="center" prop="deptId" />
+      <el-table-column label="申请人" align="center" prop="applyUserName" />
+      <el-table-column label="报修说明" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['device:repairs:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['device:repairs:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改设备报修流程记录对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" >
+        <el-form-item label="审批标题" prop="title">
+          <el-input v-model="form.title" placeholder="请输入审批标题" />
+        </el-form-item>
+        <el-form-item label="设备位置" prop="deviceLoca">
+          <el-input v-model="form.deviceLoca" placeholder="请输入设备位置" />
+        </el-form-item>
+        <el-form-item label="紧急程度" prop="urgencyLevel">
+          <el-select v-model="form.urgencyLevel" placeholder="请选择紧急程度">
+            <el-option
+              v-for="dict in dict.type.device_repairs_urgency_level"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="设备照片" prop="photos">
+          <el-input v-model="form.photos" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="申请部门" prop="deptId">
+          <el-select v-model="form.deptId" placeholder="请选择申请部门">
+            <el-option label="请选择字典生成" value="" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="申请人" prop="applyUserName">
+          <el-input v-model="form.applyUserName" placeholder="请输入申请人" />
+        </el-form-item>
+        <el-form-item label="报修说明" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入报修说明" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listRepairs, getRepairs, delRepairs, addRepairs, updateRepairs, exportRepairs } from "@/api/device/repairs";
+
+export default {
+  name: "Repairs",
+  dicts: ['device_repairs_urgency_level'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 设备报修流程记录表格数据
+      repairsList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        title: null,
+        deviceLoca: null,
+        urgencyLevel: null,
+        deptId: null,
+        applyUserName: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询设备报修流程记录列表 */
+    getList() {
+      this.loading = true;
+      listRepairs(this.queryParams).then(response => {
+        this.repairsList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        title: null,
+        deviceLoca: null,
+        urgencyLevel: null,
+        photos: null,
+        deptId: null,
+        applyUserName: null,
+        isDelete: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加设备报修流程记录";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getRepairs(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改设备报修流程记录";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateRepairs(this.form).then(() => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addRepairs(this.form).then(() => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除设备报修流程记录编号为"' + ids + '"的数据项?').then(function() {
+        return delRepairs(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$modal.confirm('是否确认导出所有设备报修流程记录数据项?').then(() => {
+        this.exportLoading = true;
+        return exportRepairs(queryParams);
+      }).then(response => {
+        this.$download.name(response.msg);
+        this.exportLoading = false;
+      }).catch(() => {});
+    }
+  }
+};
+</script>

+ 414 - 0
willalp-ui/src/views/device/scrapRecord/index.vue

@@ -0,0 +1,414 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
+      <el-form-item label="审批标题" prop="title">
+        <el-input
+          v-model="queryParams.title"
+          placeholder="请输入审批标题"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="用途" prop="whatUse">
+        <el-input
+          v-model="queryParams.whatUse"
+          placeholder="请输入用途"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="设备类型" prop="deviceType">
+        <el-select v-model="queryParams.deviceType" placeholder="请选择设备类型" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="设备名称" prop="deviceName">
+        <el-input
+          v-model="queryParams.deviceName"
+          placeholder="请输入设备名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="规格" prop="deviceGg">
+        <el-input
+          v-model="queryParams.deviceGg"
+          placeholder="请输入规格"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="报废性质" prop="scrapType">
+        <el-select v-model="queryParams.scrapType" placeholder="请选择报废性质" clearable size="small">
+          <el-option
+            v-for="dict in dict.type.device_scrap_status"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="设备存放位置" prop="depositLoca">
+        <el-input
+          v-model="queryParams.depositLoca"
+          placeholder="请输入设备存放位置"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="报修状态" prop="repairsStatus">
+        <el-select v-model="queryParams.repairsStatus" placeholder="请选择报修状态" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="申请部门" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入申请部门"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="申请人" prop="applyUserName">
+        <el-input
+          v-model="queryParams.applyUserName"
+          placeholder="请输入申请人"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['device:scrapRecord:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['device:scrapRecord:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['device:scrapRecord:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+          v-hasPermi="['device:scrapRecord:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="scrapRecordList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="主键" align="center" prop="id" />
+      <el-table-column label="审批标题" align="center" prop="title" />
+      <el-table-column label="用途" align="center" prop="whatUse" />
+      <el-table-column label="设备类型" align="center" prop="deviceType" />
+      <el-table-column label="设备名称" align="center" prop="deviceName" />
+      <el-table-column label="规格" align="center" prop="deviceGg" />
+      <el-table-column label="报废性质" align="center" prop="scrapType">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.device_scrap_status" :value="scope.row.scrapType"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="设备存放位置" align="center" prop="depositLoca" />
+      <el-table-column label="报修状态" align="center" prop="repairsStatus" />
+      <el-table-column label="图片" align="center" prop="photos" />
+      <el-table-column label="申请部门" align="center" prop="deptId" />
+      <el-table-column label="申请人" align="center" prop="applyUserName" />
+      <el-table-column label="报废原因" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['device:scrapRecord:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['device:scrapRecord:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改设备报废流程记录对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" >
+        <el-form-item label="审批标题" prop="title">
+          <el-input v-model="form.title" placeholder="请输入审批标题" />
+        </el-form-item>
+        <el-form-item label="用途" prop="whatUse">
+          <el-input v-model="form.whatUse" placeholder="请输入用途" />
+        </el-form-item>
+        <el-form-item label="设备类型" prop="deviceType">
+          <el-select v-model="form.deviceType" placeholder="请选择设备类型">
+            <el-option label="请选择字典生成" value="" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="设备名称" prop="deviceName">
+          <el-input v-model="form.deviceName" placeholder="请输入设备名称" />
+        </el-form-item>
+        <el-form-item label="规格" prop="deviceGg">
+          <el-input v-model="form.deviceGg" placeholder="请输入规格" />
+        </el-form-item>
+        <el-form-item label="报废性质" prop="scrapType">
+          <el-select v-model="form.scrapType" placeholder="请选择报废性质">
+            <el-option
+              v-for="dict in dict.type.device_scrap_status"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="设备存放位置" prop="depositLoca">
+          <el-input v-model="form.depositLoca" placeholder="请输入设备存放位置" />
+        </el-form-item>
+        <el-form-item label="报修状态">
+          <el-radio-group v-model="form.repairsStatus">
+            <el-radio label="1">请选择字典生成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="图片">
+          <imageUpload v-model="form.photos"/>
+        </el-form-item>
+        <el-form-item label="申请部门" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入申请部门" />
+        </el-form-item>
+        <el-form-item label="申请人" prop="applyUserName">
+          <el-input v-model="form.applyUserName" placeholder="请输入申请人" />
+        </el-form-item>
+        <el-form-item label="报废原因" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入报废原因" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listScrapRecord, getScrapRecord, delScrapRecord, addScrapRecord, updateScrapRecord, exportScrapRecord } from "@/api/device/scrapRecord";
+
+export default {
+  name: "ScrapRecord",
+  dicts: ['device_scrap_status'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 设备报废流程记录表格数据
+      scrapRecordList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        title: null,
+        whatUse: null,
+        deviceType: null,
+        deviceName: null,
+        deviceGg: null,
+        scrapType: null,
+        depositLoca: null,
+        repairsStatus: null,
+        photos: null,
+        deptId: null,
+        applyUserName: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询设备报废流程记录列表 */
+    getList() {
+      this.loading = true;
+      listScrapRecord(this.queryParams).then(response => {
+        this.scrapRecordList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        title: null,
+        whatUse: null,
+        deviceType: null,
+        deviceName: null,
+        deviceGg: null,
+        scrapType: null,
+        depositLoca: null,
+        repairsStatus: "0",
+        photos: null,
+        deptId: null,
+        applyUserName: null,
+        isDelete: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加设备报废流程记录";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getScrapRecord(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改设备报废流程记录";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateScrapRecord(this.form).then(() => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addScrapRecord(this.form).then(() => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除设备报废流程记录编号为"' + ids + '"的数据项?').then(function() {
+        return delScrapRecord(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$modal.confirm('是否确认导出所有设备报废流程记录数据项?').then(() => {
+        this.exportLoading = true;
+        return exportScrapRecord(queryParams);
+      }).then(response => {
+        this.$download.name(response.msg);
+        this.exportLoading = false;
+      }).catch(() => {});
+    }
+  }
+};
+</script>

+ 0 - 1
willalp-ui/src/views/event/applyRecord/index.vue

@@ -98,7 +98,6 @@
           icon="el-icon-plus"
           size="mini"
           @click="handleImport"
-          v-hasPermi="['salary:salaryslip:add']"
         >导入
         </el-button>
       </el-col>

+ 437 - 0
willalp-ui/src/views/flow/purchaseRecord/index.vue

@@ -0,0 +1,437 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
+      <el-form-item label="审批标题" prop="title">
+        <el-input
+          v-model="queryParams.title"
+          placeholder="请输入审批标题"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="用途" prop="whatUse">
+        <el-input
+          v-model="queryParams.whatUse"
+          placeholder="请输入用途"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="物品类型" prop="goodsType">
+        <el-select v-model="queryParams.goodsType" placeholder="请选择物品类型" clearable size="small">
+          <el-option
+            v-for="dict in dict.type.reserve_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="物品名称" prop="goodsName">
+        <el-input
+          v-model="queryParams.goodsName"
+          placeholder="请输入物品名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="规格" prop="goodsGg">
+        <el-input
+          v-model="queryParams.goodsGg"
+          placeholder="请输入规格"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="需求数量" prop="wantUseAmount">
+        <el-input
+          v-model="queryParams.wantUseAmount"
+          placeholder="请输入需求数量"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="预估单价" prop="ygUnitPrice">
+        <el-input
+          v-model="queryParams.ygUnitPrice"
+          placeholder="请输入预估单价"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="预估总价" prop="ygTotalPrices">
+        <el-input
+          v-model="queryParams.ygTotalPrices"
+          placeholder="请输入预估总价"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="采购状态" prop="purchaseStatus">
+        <el-select v-model="queryParams.purchaseStatus" placeholder="请选择采购状态" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="申请部门" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入申请部门"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="申请人" prop="applyUserName">
+        <el-input
+          v-model="queryParams.applyUserName"
+          placeholder="请输入申请人"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['flow:purchaseRecord:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['flow:purchaseRecord:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['flow:purchaseRecord:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+          v-hasPermi="['flow:purchaseRecord:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="purchaseRecordList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="主键" align="center" prop="id" />
+      <el-table-column label="审批标题" align="center" prop="title" />
+      <el-table-column label="用途" align="center" prop="whatUse" />
+      <el-table-column label="物品类型" align="center" prop="goodsType">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.reserve_type" :value="scope.row.goodsType"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="物品名称" align="center" prop="goodsName" />
+      <el-table-column label="规格" align="center" prop="goodsGg" />
+      <el-table-column label="需求数量" align="center" prop="wantUseAmount" />
+      <el-table-column label="预估单价" align="center" prop="ygUnitPrice" />
+      <el-table-column label="预估总价" align="center" prop="ygTotalPrices" />
+      <el-table-column label="采购状态" align="center" prop="purchaseStatus" />
+      <el-table-column label="图片" align="center" prop="photos" />
+      <el-table-column label="附件" align="center" prop="involveFile" />
+      <el-table-column label="申请部门" align="center" prop="deptId" />
+      <el-table-column label="申请人" align="center" prop="applyUserName" />
+      <el-table-column label="申请原因" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['flow:purchaseRecord:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['flow:purchaseRecord:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改采购流程记录对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" >
+        <el-form-item label="审批标题" prop="title">
+          <el-input v-model="form.title" placeholder="请输入审批标题" />
+        </el-form-item>
+        <el-form-item label="用途" prop="whatUse">
+          <el-input v-model="form.whatUse" placeholder="请输入用途" />
+        </el-form-item>
+        <el-form-item label="物品类型" prop="goodsType">
+          <el-select v-model="form.goodsType" placeholder="请选择物品类型">
+            <el-option
+              v-for="dict in dict.type.reserve_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="物品名称" prop="goodsName">
+          <el-input v-model="form.goodsName" placeholder="请输入物品名称" />
+        </el-form-item>
+        <el-form-item label="规格" prop="goodsGg">
+          <el-input v-model="form.goodsGg" placeholder="请输入规格" />
+        </el-form-item>
+        <el-form-item label="需求数量" prop="wantUseAmount">
+          <el-input v-model="form.wantUseAmount" placeholder="请输入需求数量" />
+        </el-form-item>
+        <el-form-item label="预估单价" prop="ygUnitPrice">
+          <el-input v-model="form.ygUnitPrice" placeholder="请输入预估单价" />
+        </el-form-item>
+        <el-form-item label="预估总价" prop="ygTotalPrices">
+          <el-input v-model="form.ygTotalPrices" placeholder="请输入预估总价" />
+        </el-form-item>
+        <el-form-item label="采购状态">
+          <el-radio-group v-model="form.purchaseStatus">
+            <el-radio label="1">请选择字典生成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="图片" prop="photos">
+          <el-input v-model="form.photos" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="附件">
+          <fileUpload v-model="form.involveFile"/>
+        </el-form-item>
+        <el-form-item label="申请部门" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入申请部门" />
+        </el-form-item>
+        <el-form-item label="申请人" prop="applyUserName">
+          <el-input v-model="form.applyUserName" placeholder="请输入申请人" />
+        </el-form-item>
+        <el-form-item label="申请原因" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listPurchaseRecord, getPurchaseRecord, delPurchaseRecord, addPurchaseRecord, updatePurchaseRecord, exportPurchaseRecord } from "@/api/flow/purchaseRecord";
+
+export default {
+  name: "PurchaseRecord",
+  dicts: ['reserve_type'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 采购流程记录表格数据
+      purchaseRecordList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        title: null,
+        whatUse: null,
+        goodsType: null,
+        goodsName: null,
+        goodsGg: null,
+        wantUseAmount: null,
+        ygUnitPrice: null,
+        ygTotalPrices: null,
+        purchaseStatus: null,
+        photos: null,
+        involveFile: null,
+        deptId: null,
+        applyUserName: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询采购流程记录列表 */
+    getList() {
+      this.loading = true;
+      listPurchaseRecord(this.queryParams).then(response => {
+        this.purchaseRecordList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        title: null,
+        whatUse: null,
+        goodsType: null,
+        goodsName: null,
+        goodsGg: null,
+        wantUseAmount: null,
+        ygUnitPrice: null,
+        ygTotalPrices: null,
+        purchaseStatus: "0",
+        photos: null,
+        involveFile: null,
+        deptId: null,
+        applyUserName: null,
+        isDelete: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加采购流程记录";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getPurchaseRecord(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改采购流程记录";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updatePurchaseRecord(this.form).then(() => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addPurchaseRecord(this.form).then(() => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除采购流程记录编号为"' + ids + '"的数据项?').then(function() {
+        return delPurchaseRecord(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$modal.confirm('是否确认导出所有采购流程记录数据项?').then(() => {
+        this.exportLoading = true;
+        return exportPurchaseRecord(queryParams);
+      }).then(response => {
+        this.$download.name(response.msg);
+        this.exportLoading = false;
+      }).catch(() => {});
+    }
+  }
+};
+</script>