Browse Source

2023/1/29 春节后版本提交

xianwait 2 years ago
parent
commit
3aaf8f4f49
31 changed files with 1691 additions and 550 deletions
  1. 7 6
      willalp-admin/src/main/java/com/willalp/web/controller/app/AppController.java
  2. 57 3
      willalp-admin/src/main/java/com/willalp/web/controller/app/AppFLowController.java
  3. 46 3
      willalp-admin/src/main/java/com/willalp/web/controller/app/AppTwoController.java
  4. 104 0
      willalp-admin/src/main/java/com/willalp/web/controller/clockingin/ReserveConsumingRecordController.java
  5. 9 16
      willalp-admin/src/main/java/com/willalp/web/controller/system/SysDeptPostController.java
  6. 7 0
      willalp-admin/src/main/resources/application-dev.yml
  7. 7 1
      willalp-admin/src/main/resources/application-prod.yml
  8. 1 9
      willalp-admin/src/main/resources/application.yml
  9. 4 4
      willalp-canteen/src/main/java/com/willalp/canteen/domain/req/AppOrderPaymentReq.java
  10. 23 6
      willalp-canteen/src/main/java/com/willalp/canteen/mapper/xml/HsCanteenDiningPlaceMapper.xml
  11. 10 12
      willalp-canteen/src/main/java/com/willalp/canteen/mapper/xml/HsCanteenOrderMapper.xml
  12. 31 18
      willalp-canteen/src/main/java/com/willalp/canteen/mapper/xml/HsGiftTypeMapper.xml
  13. 13 0
      willalp-clocking-in/src/main/java/com/willalp/files/domain/HsOrgPersonnelFiles.java
  14. 3 1
      willalp-clocking-in/src/main/java/com/willalp/files/mapper/xml/HsOrgPersonnelFilesMapper.xml
  15. 204 0
      willalp-clocking-in/src/main/java/com/willalp/flow/domain/ReserveConsumingRecord.java
  16. 5 1
      willalp-clocking-in/src/main/java/com/willalp/flow/domain/req/FlowReq.java
  17. 23 0
      willalp-clocking-in/src/main/java/com/willalp/flow/mapper/ReserveConsumingRecordMapper.java
  18. 2 1
      willalp-clocking-in/src/main/java/com/willalp/flow/mapper/xml/HsFlowBaseMapper.xml
  19. 85 0
      willalp-clocking-in/src/main/java/com/willalp/flow/mapper/xml/ReserveConsumingRecordMapper.xml
  20. 14 2
      willalp-clocking-in/src/main/java/com/willalp/flow/service/HsFlowEngineService.java
  21. 23 0
      willalp-clocking-in/src/main/java/com/willalp/flow/service/IReserveConsumingRecordService.java
  22. 78 64
      willalp-clocking-in/src/main/java/com/willalp/flow/service/impl/HsFlowEngineServiceImpl.java
  23. 35 0
      willalp-clocking-in/src/main/java/com/willalp/flow/service/impl/ReserveConsumingRecordServiceImpl.java
  24. 21 5
      willalp-system/src/main/java/com/willalp/system/mapper/xml/SysDeptPostMapper.xml
  25. 53 0
      willalp-ui/src/api/flow/reserve.js
  26. 2 1
      willalp-ui/src/views/canteen/order/index.vue
  27. 148 157
      willalp-ui/src/views/canteen/place/index.vue
  28. 11 11
      willalp-ui/src/views/files/approval/index.vue
  29. 244 219
      willalp-ui/src/views/files/files/index.vue
  30. 411 0
      willalp-ui/src/views/flow/reserve/index.vue
  31. 10 10
      willalp-ui/src/views/system/deptPost/index.vue

+ 7 - 6
willalp-admin/src/main/java/com/willalp/web/controller/app/AppController.java

@@ -73,7 +73,7 @@ public class AppController extends BaseController {
     IHsCanteenOrderService hsCanteenOrderService;
 
     @Autowired
-    IHsGiftOrderDetailService hsCanteenOrderDetailService;
+    IHsCanteenOrderDetailService hsCanteenOrderDetailService;
 
     @Autowired
     ISysUserService sysUserService;
@@ -340,10 +340,11 @@ public class AppController extends BaseController {
 
         try {
             WxMsgTemplateTakeFood wxMsgTemplateTakeFood = new WxMsgTemplateTakeFood();
+            wxMsgTemplateTakeFood.setThing4(wxUtils.getFormat(appOrderPaymentReq.getPlaceName()));
             wxMsgTemplateTakeFood.setPhrase14(wxUtils.getFormat("待取餐"));
             wxMsgTemplateTakeFood.setTime8(wxUtils.getFormat(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", appOrderPaymentReq.getPaytime())));
             StringBuilder de = new StringBuilder();
-            for (HsGiftOrderDetail detail : appOrderPaymentReq.getDetails()) {
+            for (HsCanteenOrderDetail detail : appOrderPaymentReq.getDetails()) {
                 de.append("【").append(detail.getCuisineName()).append("】");
             }
             wxMsgTemplateTakeFood.setThing16(wxUtils.getFormat(de.toString()));
@@ -437,7 +438,7 @@ public class AppController extends BaseController {
     @ResponseBody
     public TableDataInfo getOrderDetail(@RequestBody AppSysReq sys) {
         startPage();
-        HsGiftOrderDetail hcod = new HsGiftOrderDetail();
+        HsCanteenOrderDetail hcod = new HsCanteenOrderDetail();
         hcod.setOrderNumber(sys.getOrderNumber());
         return getDataTable(hsCanteenOrderDetailService.selectHsCanteenOrderDetailList(hcod));
     }
@@ -633,10 +634,10 @@ public class AppController extends BaseController {
         List<HsCanteenDiningPlace> list;
         place.setJgid(req.getOrganizationCode());
         place.setPlaceType(PlaceEnum.CANTEEN.getValue());
-        place.setParentId(null);
+        place.setParentId(Long.valueOf("1550048349556744193"));
         list = hsCanteenDiningPlaceService.selectHsCanteenDiningPlaceList(place);
-        List<Long> ids = list.stream().map(HsCanteenDiningPlace::getParentId).collect(Collectors.toList());
-        list = list.stream().filter(o -> !ids.contains(o.getId())).collect(Collectors.toList());
+        //List<Long> ids = list.stream().map(HsCanteenDiningPlace::getParentId).collect(Collectors.toList());
+        //list = list.stream().filter(o -> !ids.contains(o.getId())).collect(Collectors.toList());
         return AjaxResult.success(list);
     }
 

+ 57 - 3
willalp-admin/src/main/java/com/willalp/web/controller/app/AppFLowController.java

@@ -12,15 +12,19 @@ import com.willalp.common.utils.StringUtils;
 import com.willalp.files.domain.HsOrgPersonnelFiles;
 import com.willalp.files.service.IHsOrgPersonnelFilesService;
 import com.willalp.flow.domain.HsFlowTask;
-import com.willalp.flow.domain.req.FLowReq;
+import com.willalp.flow.domain.ReserveConsumingRecord;
+import com.willalp.flow.domain.req.FlowReq;
 import com.willalp.flow.service.HsFlowEngineService;
 import com.willalp.flow.service.IBizLeaveImgService;
+import com.willalp.flow.service.IReserveConsumingRecordService;
 import com.willalp.flow.util.BeanMapUtilByReflect;
 import com.willalp.msg.service.IHsAppUserMsgService;
+import com.willalp.system.service.ISysConfigService;
 import com.willalp.wx.service.WxMsgService;
 import com.willalp.wx.utils.WxUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -42,6 +46,9 @@ public class AppFLowController extends BaseController {
     @Resource
     private HsFlowEngineService flowEngineService;
 
+    @Resource
+    private ISysConfigService sysConfigService;
+
     @Resource
     private WxMsgService wxMsgService;
 
@@ -77,8 +84,40 @@ public class AppFLowController extends BaseController {
         } catch (IllegalAccessException e) {
             e.printStackTrace();
         }
+        String bizLeaveFlowRunId = sysConfigService.selectConfigByKey(HsFlowEngineService.BIZ_LEAVE_FLOW_KEY);
         return AjaxResult.success(
-                flowEngineService.submitATask(new HsFlowTask(taskId, idStr, "1580107848471093250"), map));
+                flowEngineService.submitATask(new HsFlowTask(taskId, idStr, bizLeaveFlowRunId), map));
+    }
+
+    @Resource
+    private IReserveConsumingRecordService reserveConsumingRecordService;
+
+    /**
+     * 物资领用提交
+     *
+     * @param reserveConsumingRecord
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @ApiOperation("物资领用提交")
+    @PostMapping("/submitApply/rcr")
+    public AjaxResult submitLeave(@RequestBody ReserveConsumingRecord reserveConsumingRecord) {
+        String idStr = IdWorker.getIdStr();
+        String taskId = IdWorker.getIdStr();
+        reserveConsumingRecord.setId(idStr);
+        reserveConsumingRecord.setApplyUserId(SecurityUtils.getUsername());
+        reserveConsumingRecord.setTitle("物资领用审批");
+        reserveConsumingRecordService.save(reserveConsumingRecord);
+        Map<String, Object> map = null;
+        try {
+            //对象转换为Map集合
+            map = BeanMapUtilByReflect.beanToMap(reserveConsumingRecord);
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        }
+        String reserveConsumingRunId = sysConfigService.selectConfigByKey(HsFlowEngineService.RESERVE_FLOW_KEY);
+        return AjaxResult.success(
+                flowEngineService.submitATask(new HsFlowTask(taskId, idStr, reserveConsumingRunId), map));
     }
 
     /**
@@ -89,7 +128,7 @@ public class AppFLowController extends BaseController {
      */
     @ApiOperation("下一步")
     @PostMapping("/nextStep")
-    public AjaxResult nextStep(@RequestBody FLowReq fr) {
+    public AjaxResult nextStep(@RequestBody FlowReq fr) {
         return AjaxResult.success(
                 flowEngineService.nextStep(fr));
     }
@@ -173,6 +212,21 @@ public class AppFLowController extends BaseController {
                 flowEngineService.currentTaskRecords(taskId));
     }
 
+    /**
+     * 驳回时选择进度
+     *
+     * @param taskId
+     * @param request
+     * @return
+     */
+    @ApiOperation("驳回时选择进度")
+    @RequestMapping("/reject/ctr")
+    public AjaxResult rejectTaskRecords(String taskId, HttpServletRequest request) {
+        return AjaxResult.success(
+                flowEngineService.rejectTaskRecords(taskId));
+    }
+
+
     /**
      * 任务撤销
      *

+ 46 - 3
willalp-admin/src/main/java/com/willalp/web/controller/app/AppTwoController.java

@@ -67,14 +67,23 @@ public class AppTwoController extends BaseController {
     private IBizLeaveService bizLeaveService;
 
     /**
-     * 查询岗位配置列表
+     * 当前流程审批人员
+     * @param groupId
+     * @param baseId
+     */
+    @GetMapping("/currentPL")
+    public AjaxResult currentPL(String groupId, String baseId) {
+        return AjaxResult.success(flowEngineService.getApprovalTreePost(groupId, baseId));
+    }
+
+    /**
+     * 当前流程下一级审批人员
      * @param groupId
      * @param baseId
      */
     @GetMapping("/pL")
     public AjaxResult list(String groupId, String baseId) {
         return AjaxResult.success(flowEngineService.getNextApprovalTreePost(groupId, baseId));
-//        return AjaxResult.success(hsPostConfigService.getTreePost());
     }
 
     /**
@@ -159,7 +168,6 @@ public class AppTwoController extends BaseController {
         return AjaxResult.success(hsAppUserMsgService.msgSum(request.getHeader("UserName")));
     }
 
-
     @Resource
     private ISysUserOrganizationService sysUserOrganizationService;
 
@@ -206,6 +214,24 @@ public class AppTwoController extends BaseController {
         return getDataTable(hsGifts);
     }
 
+    @Resource
+    private IHsGiftOrderDetailService giftOrderDetailService;
+
+    /**
+     * 获取订单信息详情
+     *
+     * @param sys
+     * @return
+     */
+    @RequestMapping("/getGiftOrderDetail")
+    @ResponseBody
+    public TableDataInfo getOrderDetail(@RequestBody AppSysReq sys) {
+        startPage();
+        HsGiftOrderDetail hcod = new HsGiftOrderDetail();
+        hcod.setOrderNumber(sys.getOrderNumber());
+        return getDataTable(giftOrderDetailService.selectHsCanteenOrderDetailList(hcod));
+    }
+
     /**
      * 退单
      *
@@ -413,6 +439,23 @@ public class AppTwoController extends BaseController {
     @Resource
     private ISysConfigService sysConfigService;
 
+    /**
+     * 获取订单详情
+     *
+     * @return
+     */
+    @RequestMapping("/orderInfo")
+    @ResponseBody
+    public AjaxResult getOrderInfo(String on) {
+        HsGiftOrder hco = new HsGiftOrder();
+        hco.setOrderNumber(on);
+        List<HsGiftOrder> hsGiftOrders = canteenOrderService.selectHsCanteenOrderList(hco);
+        if (hsGiftOrders == null) {
+            return AjaxResult.error();
+        }
+        return AjaxResult.success(hsGiftOrders.get(0));
+    }
+
     /**
      * 礼品类型
      *

+ 104 - 0
willalp-admin/src/main/java/com/willalp/web/controller/clockingin/ReserveConsumingRecordController.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.ReserveConsumingRecord;
+import com.willalp.flow.service.IReserveConsumingRecordService;
+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-01-12
+ */
+@RestController
+@RequestMapping("/flow/reserve")
+public class ReserveConsumingRecordController extends BaseController
+{
+    @Resource
+    private IReserveConsumingRecordService reserveConsumingRecordService;
+
+    /**
+     * 查询物资领用申请业务数据记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('flow:reserve:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ReserveConsumingRecord reserveConsumingRecord)
+    {
+        startPage();
+        List<ReserveConsumingRecord> list = reserveConsumingRecordService.selectReserveConsumingRecordList(reserveConsumingRecord);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出物资领用申请业务数据记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('flow:reserve:export')")
+    @Log(title = "物资领用申请业务数据记录", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(ReserveConsumingRecord reserveConsumingRecord)
+    {
+        List<ReserveConsumingRecord> list = reserveConsumingRecordService.selectReserveConsumingRecordList(reserveConsumingRecord);
+        ExcelUtil<ReserveConsumingRecord> util = new ExcelUtil<ReserveConsumingRecord>(ReserveConsumingRecord.class);
+        return util.exportExcel(list, "物资领用申请业务数据记录数据");
+    }
+
+    /**
+     * 获取物资领用申请业务数据记录详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('flow:reserve:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return AjaxResult.success(reserveConsumingRecordService.getById(id));
+    }
+
+    /**
+     * 新增物资领用申请业务数据记录
+     */
+    @PreAuthorize("@ss.hasPermi('flow:reserve:add')")
+    @Log(title = "物资领用申请业务数据记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ReserveConsumingRecord reserveConsumingRecord)
+    {
+        reserveConsumingRecord.setCreateBy(SecurityUtils.getUsername());
+        reserveConsumingRecord.setCreateTime(DateUtils.getNowDate());
+        return toAjax(reserveConsumingRecordService.save(reserveConsumingRecord));
+    }
+
+    /**
+     * 修改物资领用申请业务数据记录
+     */
+    @PreAuthorize("@ss.hasPermi('flow:reserve:edit')")
+    @Log(title = "物资领用申请业务数据记录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ReserveConsumingRecord reserveConsumingRecord)
+    {
+        reserveConsumingRecord.setUpdateBy(SecurityUtils.getUsername());
+        reserveConsumingRecord.setUpdateTime(DateUtils.getNowDate());
+        return toAjax(reserveConsumingRecordService.updateById(reserveConsumingRecord));
+    }
+
+    /**
+     * 删除物资领用申请业务数据记录
+     */
+    @PreAuthorize("@ss.hasPermi('flow:reserve:remove')")
+    @Log(title = "物资领用申请业务数据记录", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(reserveConsumingRecordService.removeByIds(Arrays.asList(ids)));
+    }
+}

+ 9 - 16
willalp-admin/src/main/java/com/willalp/web/controller/system/SysDeptPostController.java

@@ -1,26 +1,19 @@
 package com.willalp.web.controller.system;
 
-import java.util.List;
-
-import com.willalp.common.utils.DateUtils;
-import com.willalp.common.utils.SecurityUtils;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.willalp.common.annotation.Log;
 import com.willalp.common.core.controller.BaseController;
 import com.willalp.common.core.domain.AjaxResult;
 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.system.domain.SysDeptPost;
 import com.willalp.system.service.ISysDeptPostService;
-import com.willalp.common.utils.poi.ExcelUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 岗位设置2Controller
@@ -65,7 +58,7 @@ public class SysDeptPostController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:deptPost:query')")
     @GetMapping(value = "/{postId}")
-    public AjaxResult getInfo(@PathVariable("postId") Long postId)
+    public AjaxResult getInfo(@PathVariable("postId") String postId)
     {
         return AjaxResult.success(sysDeptPostService.getById(postId));
     }

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

@@ -14,6 +14,13 @@ willalp:
   addressEnabled: false
   # 验证码类型 math 数组计算 char 字符验证
   captchaType: math
+server:
+  ssl:
+    key-store: classpath:scs1673001719352_ts.willalp.com_server.jks
+    key-store-type: jks
+    key-store-password: Qv2!MVW*SJ^$d1o6
+    protocol: TLS
+    enabled: true
 
 # 日志配置
 logging:

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

@@ -14,7 +14,13 @@ willalp:
   addressEnabled: false
   # 验证码类型 math 数组计算 char 字符验证
   captchaType: math
-
+server:
+  ssl:
+    key-store: classpath:scs1655948404442_hzl.willalp.com_server.jks
+    key-store-type: jks
+    key-store-password: Qz7!sIeMZDpxYLBm
+    protocol: TLS
+    enabled: true
 # 日志配置
 logging:
   level:

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

@@ -12,14 +12,6 @@ server:
     max-threads: 800
     # Tomcat启动初始化的线程数,默认值25
     min-spare-threads: 30
-  ssl:
-    key-store: classpath:scs1655948404442_hzl.willalp.com_server.jks
-    #key-store: classpath:scs1673001719352_ts.willalp.com_server.jks
-    key-store-type: jks
-    #key-store-password: Qv2!MVW*SJ^$d1o6
-    key-store-password: Qz7!sIeMZDpxYLBm
-    protocol: TLS
-    enabled: true
 
 # Spring配置
 spring:
@@ -28,7 +20,7 @@ spring:
     # 国际化资源文件路径
     basename: i18n/messages
   profiles:
-    active: prod
+    active: dev
   # 文件上传
   servlet:
     multipart:

+ 4 - 4
willalp-canteen/src/main/java/com/willalp/canteen/domain/req/AppOrderPaymentReq.java

@@ -1,7 +1,7 @@
 package com.willalp.canteen.domain.req;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.willalp.canteen.domain.HsGiftOrderDetail;
+import com.willalp.canteen.domain.HsCanteenOrderDetail;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.math.BigDecimal;
@@ -38,7 +38,7 @@ public class AppOrderPaymentReq {
     private String jgid;
 
     //    @NotNull(message = "订单明细不能为空")
-    private List<HsGiftOrderDetail> details;
+    private List<HsCanteenOrderDetail> details;
 
     public String getUserNumber() {
         return userNumber;
@@ -96,11 +96,11 @@ public class AppOrderPaymentReq {
         this.jgid = jgid;
     }
 
-    public List<HsGiftOrderDetail> getDetails() {
+    public List<HsCanteenOrderDetail> getDetails() {
         return details;
     }
 
-    public void setDetails(List<HsGiftOrderDetail> details) {
+    public void setDetails(List<HsCanteenOrderDetail> details) {
         this.details = details;
     }
 

+ 23 - 6
willalp-canteen/src/main/java/com/willalp/canteen/mapper/xml/HsCanteenDiningPlaceMapper.xml

@@ -12,10 +12,10 @@
         <result property="jgid" column="jgid"/>
         <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"    />
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="remark" column="remark"/>
         <result property="placeNumber" column="place_number"/>
         <result property="placeSite" column="place_site"/>
         <result property="placeType" column="place_type"/>
@@ -23,7 +23,22 @@
     </resultMap>
 
     <sql id="selectHsCanteenDiningPlaceVo">
-        select place_id, parent_id, ancestors, place_name, jgid ,is_delete, create_by, create_time, update_by, update_time, remark,place_number,place_site,place_type,coordinate  from hs_canteen_dining_place
+        select place_id,
+               parent_id,
+               ancestors,
+               place_name,
+               jgid,
+               is_delete,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               remark,
+               place_number,
+               place_site,
+               place_type,
+               coordinate
+        from hs_canteen_dining_place
     </sql>
 
     <select id="selectHsCanteenDiningPlaceList" parameterType="HsCanteenDiningPlace"
@@ -59,6 +74,8 @@
     </update>
 
     <update id="deleteHsCanteenDiningPlaceByPlaceId">
-        update hs_canteen_dining_place set is_delete = 1 where place_id = #{placeId}
+        update hs_canteen_dining_place
+        set is_delete = 1
+        where place_id = #{placeId}
     </update>
 </mapper>

+ 10 - 12
willalp-canteen/src/main/java/com/willalp/canteen/mapper/xml/HsCanteenOrderMapper.xml

@@ -198,24 +198,22 @@
     </select>
     <select id="getOrderDataBasedOnMenu"
             resultType="com.willalp.canteen.domain.vo.HsCanteenOrderInfoVo">
-        SELECT hco.menu_number,
-               hco.user_number,
-               hcdp.place_name,
-               su.nick_name,
-               hco.order_number,
-               hcod.cuisine_name,
-               hcod.cuisine_number,
-               hcod.price,
-               hcod.amount,
-               hcod.total
+        SELECT DISTINCT hcod.cuisine_number,
+                        hco.menu_number,
+                        hco.user_number,
+                        hcdp.place_name,
+                        su.nick_name,
+                        hco.order_number,
+                        hcod.cuisine_name
         FROM hs_canteen_order hco
                  LEFT JOIN hs_canteen_order_detail hcod ON hcod.menu_number = hco.menu_number
                  LEFT JOIN sys_user su ON su.user_name = hco.user_number
-                 LEFT JOIN hs_canteen_dining_place hcdp on hcdp.place_number = hco.place_number
+                 LEFT JOIN hs_canteen_dining_place hcdp ON hcdp.place_number = hco.place_number
         WHERE hco.menu_number = #{menuCode}
           AND hco.is_delete = 0
           AND hco.zfbz = 0
-        ORDER BY hco.order_number, hcod.cuisine_number
+        ORDER BY hco.order_number,
+                 hcod.cuisine_number
     </select>
     <select id="todayNotOrderUser" resultType="com.willalp.canteen.domain.HsCanteenOrder">
         SELECT user_number

+ 31 - 18
willalp-canteen/src/main/java/com/willalp/canteen/mapper/xml/HsGiftTypeMapper.xml

@@ -1,35 +1,48 @@
 <?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">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.willalp.canteen.mapper.HsGiftTypeMapper">
 
     <resultMap type="HsGiftType" id="HsGiftTypeResult">
-        <result property="id"    column="id"    />
-        <result property="giftTypeNo"    column="gift_type_no"    />
-        <result property="giftTypeName"    column="gift_type_name"    />
-        <result property="parentId"    column="parent_id"    />
-        <result property="orderNum"    column="order_num"    />
-        <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"    />
+        <result property="id" column="id"/>
+        <result property="giftTypeNo" column="gift_type_no"/>
+        <result property="giftTypeName" column="gift_type_name"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="orderNum" column="order_num"/>
+        <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="selectHsGiftTypeVo">
-        select id, gift_type_no, gift_type_name, parent_id, order_num, is_delete, create_by, create_time, update_by, update_time, remark from hs_gift_type
+        select id,
+               gift_type_no,
+               gift_type_name,
+               parent_id,
+               order_num,
+               is_delete,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               remark
+        from hs_gift_type
     </sql>
 
     <select id="selectHsGiftTypeList" parameterType="HsGiftType" resultMap="HsGiftTypeResult">
         <include refid="selectHsGiftTypeVo"/>
         <where>
             is_delete = 0
-            <if test="giftTypeNo != null  and giftTypeNo != ''"> and gift_type_no like concat('%', #{giftTypeNo}, '%')</if>
-            <if test="giftTypeName != null  and giftTypeName != ''"> and gift_type_name like concat('%', #{giftTypeName}, '%')</if>
-            <if test="parentId != null  and parentId != ''"> and parent_id = #{parentId}</if>
-            <if test="orderNum != null "> and order_num = #{orderNum}</if>
+            <if test="giftTypeNo != null  and giftTypeNo != ''">and gift_type_no like concat('%', #{giftTypeNo}, '%')
+            </if>
+            <if test="giftTypeName != null  and giftTypeName != ''">and gift_type_name like concat('%', #{giftTypeName},
+                '%')
+            </if>
+            <if test="parentId != null  and parentId != ''">and parent_id = #{parentId}</if>
         </where>
     </select>
 

+ 13 - 0
willalp-clocking-in/src/main/java/com/willalp/files/domain/HsOrgPersonnelFiles.java

@@ -130,6 +130,11 @@ public class HsOrgPersonnelFiles extends BaseEntity {
      */
     @Excel(name = "座机号")
     private String seatNo;
+    /**
+     * 岗位名称
+     */
+    @Excel(name = "岗位名称")
+    private String post;
 
     /**
      * 取得职称
@@ -377,4 +382,12 @@ public class HsOrgPersonnelFiles extends BaseEntity {
     public void setOrgCode(String orgCode) {
         this.orgCode = orgCode;
     }
+
+    public String getPost() {
+        return post;
+    }
+
+    public void setPost(String post) {
+        this.post = post;
+    }
 }

+ 3 - 1
willalp-clocking-in/src/main/java/com/willalp/files/mapper/xml/HsOrgPersonnelFilesMapper.xml

@@ -22,6 +22,7 @@
         <result property="phone" column="phone"/>
         <result property="email" column="email"/>
         <result property="seatNo" column="seat_no"/>
+        <result property="post" column="post"/>
         <result property="jobTitle" column="job_title"/>
         <result property="department" column="department"/>
         <result property="hiredate" column="hiredate"/>
@@ -52,6 +53,7 @@
                hpf.phone,
                hpf.email,
                seat_no,
+               post,
                job_title,
                sd.dept_name as department,
                hiredate,
@@ -107,7 +109,7 @@
                 and residence = #{residence}
             </if>
             <if test="phone != null  and phone != ''">
-                and phone = #{phone}
+                and  hpf.phone = #{phone}
             </if>
             <if test="email != null  and email != ''">
                 and email = #{email}

+ 204 - 0
willalp-clocking-in/src/main/java/com/willalp/flow/domain/ReserveConsumingRecord.java

@@ -0,0 +1,204 @@
+package com.willalp.flow.domain;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+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;
+
+import java.util.Date;
+
+/**
+ * 物资领用申请业务数据记录对象 reserve_consuming_record
+ *
+ * @author willalp
+ * @date 2023-01-12
+ */
+
+@TableName("reserve_consuming_record")
+public class ReserveConsumingRecord extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private String id;
+
+    /** 审批标题 */
+    @Excel(name = "审批标题")
+    private String title;
+
+    /** 申请科室 */
+    @Excel(name = "申请科室")
+    private String applyDepartment;
+
+    /** 物资类型 */
+    @Excel(name = "物资类型")
+    private String reserveType;
+
+    /** 物资名称 */
+    @Excel(name = "物资名称")
+    private String reserveName;
+
+    /** 物资型号 */
+    @Excel(name = "物资型号")
+    private String reserveModelNo;
+
+    /** 申请数量 */
+    @Excel(name = "申请数量")
+    private Long applyAmount;
+
+    /** 申请人user_code */
+    @Excel(name = "申请人user_code")
+    private String applyUserId;
+
+    /** 申请人 */
+    @Excel(name = "申请人")
+    private String applyUserName;
+
+    /** 申请原因(申请用途) */
+    @Excel(name = "申请原因", readConverterExp = "申=请用途")
+    private String applyReason;
+
+    /** 申请日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "申请日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date applyDate;
+
+    /** 是否删除(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 setApplyDepartment(String applyDepartment)
+    {
+        this.applyDepartment = applyDepartment;
+    }
+
+    public String getApplyDepartment()
+    {
+        return applyDepartment;
+    }
+    public void setReserveType(String reserveType)
+    {
+        this.reserveType = reserveType;
+    }
+
+    public String getReserveType()
+    {
+        return reserveType;
+    }
+    public void setReserveName(String reserveName)
+    {
+        this.reserveName = reserveName;
+    }
+
+    public String getReserveName()
+    {
+        return reserveName;
+    }
+    public void setReserveModelNo(String reserveModelNo)
+    {
+        this.reserveModelNo = reserveModelNo;
+    }
+
+    public String getReserveModelNo()
+    {
+        return reserveModelNo;
+    }
+    public void setApplyAmount(Long applyAmount)
+    {
+        this.applyAmount = applyAmount;
+    }
+
+    public Long getApplyAmount()
+    {
+        return applyAmount;
+    }
+    public void setApplyUserId(String applyUserId)
+    {
+        this.applyUserId = applyUserId;
+    }
+
+    public String getApplyUserId()
+    {
+        return applyUserId;
+    }
+    public void setApplyUserName(String applyUserName)
+    {
+        this.applyUserName = applyUserName;
+    }
+
+    public String getApplyUserName()
+    {
+        return applyUserName;
+    }
+    public void setApplyReason(String applyReason)
+    {
+        this.applyReason = applyReason;
+    }
+
+    public String getApplyReason()
+    {
+        return applyReason;
+    }
+    public void setApplyDate(Date applyDate)
+    {
+        this.applyDate = applyDate;
+    }
+
+    public Date getApplyDate()
+    {
+        return applyDate;
+    }
+    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("applyDepartment", getApplyDepartment())
+            .append("reserveType", getReserveType())
+            .append("reserveName", getReserveName())
+            .append("reserveModelNo", getReserveModelNo())
+            .append("applyAmount", getApplyAmount())
+            .append("applyUserId", getApplyUserId())
+            .append("applyUserName", getApplyUserName())
+            .append("applyReason", getApplyReason())
+            .append("applyDate", getApplyDate())
+            .append("isDelete", getIsDelete())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 5 - 1
willalp-clocking-in/src/main/java/com/willalp/flow/domain/req/FLowReq.java → willalp-clocking-in/src/main/java/com/willalp/flow/domain/req/FlowReq.java

@@ -3,12 +3,16 @@ package com.willalp.flow.domain.req;
 import com.alibaba.fastjson.JSONObject;
 import lombok.Data;
 
+/**
+ * @author Administrator
+ */
 @Data
-public class FLowReq {
+public class FlowReq {
     private String comment;
     private String result;
     private String baseId;
     private String taskId;
+    private String rejectBaseId;
     private String nextApproval;
     private String nextUserName;
     private JSONObject formData;

+ 23 - 0
willalp-clocking-in/src/main/java/com/willalp/flow/mapper/ReserveConsumingRecordMapper.java

@@ -0,0 +1,23 @@
+package com.willalp.flow.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.willalp.flow.domain.ReserveConsumingRecord;
+
+import java.util.List;
+
+/**
+ * 物资领用申请业务数据记录Mapper接口
+ *
+ * @author willalp
+ * @date 2023-01-12
+ */
+public interface ReserveConsumingRecordMapper extends BaseMapper<ReserveConsumingRecord>
+{
+    /**
+     * 查询物资领用申请业务数据记录列表
+     *
+     * @param reserveConsumingRecord 物资领用申请业务数据记录
+     * @return 物资领用申请业务数据记录集合
+     */
+    List<ReserveConsumingRecord> selectReserveConsumingRecordList(ReserveConsumingRecord reserveConsumingRecord);
+}

+ 2 - 1
willalp-clocking-in/src/main/java/com/willalp/flow/mapper/xml/HsFlowBaseMapper.xml

@@ -87,7 +87,8 @@
         <include refid="selectHsFlowBaseVo"/>
         where
         id = (SELECT down_step_id FROM
-        from hs_flow_base
+        hs_flow_base
+        WHERE
         examples_id = #{examplesId} AND
         group_id = id)
     </select>

+ 85 - 0
willalp-clocking-in/src/main/java/com/willalp/flow/mapper/xml/ReserveConsumingRecordMapper.xml

@@ -0,0 +1,85 @@
+<?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.ReserveConsumingRecordMapper">
+
+    <resultMap type="com.willalp.flow.domain.ReserveConsumingRecord" id="ReserveConsumingRecordResult">
+        <result property="id" column="id"/>
+        <result property="title" column="title"/>
+        <result property="applyDepartment" column="apply_department"/>
+        <result property="reserveType" column="reserve_type"/>
+        <result property="reserveName" column="reserve_name"/>
+        <result property="reserveModelNo" column="reserve_model_no"/>
+        <result property="applyAmount" column="apply_amount"/>
+        <result property="applyUserId" column="apply_user_id"/>
+        <result property="applyUserName" column="apply_user_name"/>
+        <result property="applyReason" column="apply_reason"/>
+        <result property="applyDate" column="apply_date"/>
+        <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="selectReserveConsumingRecordVo">
+        select id,
+               title,
+               apply_department,
+               reserve_type,
+               reserve_name,
+               reserve_model_no,
+               apply_amount,
+               apply_user_id,
+               apply_user_name,
+               apply_reason,
+               apply_date,
+               is_delete,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               remark
+        from reserve_consuming_record
+    </sql>
+
+    <select id="selectReserveConsumingRecordList" parameterType="ReserveConsumingRecord"
+            resultMap="ReserveConsumingRecordResult">
+        <include refid="selectReserveConsumingRecordVo"/>
+        <where>
+            is_delete = 0
+            <if test="title != null  and title != ''">
+                and title = #{title}
+            </if>
+            <if test="applyDepartment != null  and applyDepartment != ''">
+                and apply_department = #{applyDepartment}
+            </if>
+            <if test="reserveType != null  and reserveType != ''">
+                and reserve_type = #{reserveType}
+            </if>
+            <if test="reserveName != null  and reserveName != ''">
+                and reserve_name like concat('%', #{reserveName}, '%')
+            </if>
+            <if test="reserveModelNo != null  and reserveModelNo != ''">
+                and reserve_model_no = #{reserveModelNo}
+            </if>
+            <if test="applyAmount != null ">
+                and apply_amount = #{applyAmount}
+            </if>
+            <if test="applyUserId != null  and applyUserId != ''">
+                and apply_user_id = #{applyUserId}
+            </if>
+            <if test="applyUserName != null  and applyUserName != ''">
+                and apply_user_name like concat('%', #{applyUserName}, '%')
+            </if>
+            <if test="applyReason != null  and applyReason != ''">
+                and apply_reason = #{applyReason}
+            </if>
+            <if test="applyDate != null ">
+                and apply_date = #{applyDate}
+            </if>
+        </where>
+    </select>
+</mapper>

+ 14 - 2
willalp-clocking-in/src/main/java/com/willalp/flow/service/HsFlowEngineService.java

@@ -2,7 +2,7 @@ package com.willalp.flow.service;
 
 import com.willalp.flow.domain.HsFlowRunningRecord;
 import com.willalp.flow.domain.HsFlowTask;
-import com.willalp.flow.domain.req.FLowReq;
+import com.willalp.flow.domain.req.FlowReq;
 import com.willalp.system.domain.vo.PostTreeVo;
 
 import java.util.List;
@@ -14,6 +14,10 @@ import java.util.Map;
  */
 public interface HsFlowEngineService {
 
+    String BIZ_LEAVE_FLOW_KEY = "biz_leave_flow_run_key";
+    String FILE_APPROVAL_FLOW_KEY = "file_approval_flow_run_key";
+    String RESERVE_FLOW_KEY = "reserve_consuming_flow_run_key";
+
     /**
      * 提交并生成任务实例
      * @param task
@@ -38,7 +42,7 @@ public interface HsFlowEngineService {
      * @param flow
      * @return
      */
-    int nextStep(FLowReq flow);
+    int nextStep(FlowReq flow);
 
     /**
      * 获取待办
@@ -80,6 +84,14 @@ public interface HsFlowEngineService {
      */
     List<HsFlowRunningRecord> currentTaskRecords(String taskId);
 
+    /**
+     * 驳回时选择进度
+     *
+     * @param taskId
+     * @return
+     */
+    List<HsFlowRunningRecord> rejectTaskRecords(String taskId);
+
     /**
      * 任务撤销
      *

+ 23 - 0
willalp-clocking-in/src/main/java/com/willalp/flow/service/IReserveConsumingRecordService.java

@@ -0,0 +1,23 @@
+package com.willalp.flow.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.willalp.flow.domain.ReserveConsumingRecord;
+
+import java.util.List;
+
+/**
+ * 物资领用申请业务数据记录Service接口
+ *
+ * @author willalp
+ * @date 2023-01-12
+ */
+public interface IReserveConsumingRecordService extends IService<ReserveConsumingRecord>
+{
+    /**
+     * 查询物资领用申请业务数据记录列表
+     *
+     * @param reserveConsumingRecord 物资领用申请业务数据记录
+     * @return 物资领用申请业务数据记录集合
+     */
+    public List<ReserveConsumingRecord> selectReserveConsumingRecordList(ReserveConsumingRecord reserveConsumingRecord);
+}

+ 78 - 64
willalp-clocking-in/src/main/java/com/willalp/flow/service/impl/HsFlowEngineServiceImpl.java

@@ -11,12 +11,13 @@ import com.willalp.common.utils.StringUtils;
 import com.willalp.flow.domain.*;
 import com.willalp.flow.domain.enums.FlowEnum;
 import com.willalp.flow.domain.json.Operators;
-import com.willalp.flow.domain.req.FLowReq;
+import com.willalp.flow.domain.req.FlowReq;
 import com.willalp.flow.mapper.*;
 import com.willalp.flow.service.*;
 import com.willalp.msg.domain.HsAppUserMsg;
 import com.willalp.msg.service.IHsAppUserMsgService;
 import com.willalp.system.domain.vo.PostTreeVo;
+import com.willalp.system.service.ISysConfigService;
 import com.willalp.wx.domain.WxMsgTemplateApproval;
 import com.willalp.wx.domain.WxMsgTemplateApprovalResult;
 import com.willalp.wx.enums.WxTemplateKeyEnum;
@@ -74,6 +75,9 @@ public class HsFlowEngineServiceImpl implements HsFlowEngineService {
     @Resource
     private IHsFlowTaskService taskService;
 
+    @Resource
+    private ISysConfigService sysConfigService;
+
 
     @Override
     public Map<String, Object> submitATask(HsFlowTask task, Map<String, Object> params) {
@@ -127,7 +131,6 @@ public class HsFlowEngineServiceImpl implements HsFlowEngineService {
         map.put("taskId", task.getId());
         map.put("tree", getApprovalTreePost(task.getBaseGroupId(), task.getBaseId()));
         return map;
-
     }
 
     @Override
@@ -144,30 +147,27 @@ public class HsFlowEngineServiceImpl implements HsFlowEngineService {
             HsFlowExamples example = hsFlowExamplesMapper.selectById(examplesId);
             Map<String, Object> formData = hsFlowTaskMapper
                     .selectBusinessCase(example.getBusinessTableName(), hsFlowTask.getBusinessId());
-            switch (examplesId) {
-                case "1580107848471093250":
-                    String leaveStartTime = DateUtils.dateTime(sdf.parse(formData.get("leave_start_time").toString()));
-                    String leaveEndTime = DateUtils.dateTime(sdf.parse(formData.get("leave_end_time").toString()));
-                    content = "<p>标题:" + formData.get("title") + "</p>" +
-                            "<p>申请人:" + formData.get("apply_user_name") + "</p>" +
-                            "<p>开始时间:" + leaveStartTime + "</p>" +
-                            "<p>结束时间:" + leaveEndTime + "</p>";
-                    //异步生成审批消息列表
-                    userMsgService.saveApprovalMsgAndPush("1",
-                            String.valueOf(formData.get("title")), content, taskId,
-                            candidate, applyUserName, new Date());
-                    break;
-                case "1600773666636759041":
-                    //异步生成审批消息列表
-                    content = "<p>标题:" + formData.get("title") + "</p>" +
-                            "<p>申请人:" + formData.get("apply_user_name") + "</p>";
-                    userMsgService.saveApprovalMsgAndPush("1",
-                            String.valueOf(formData.get("title")), content, taskId,
-                            candidate, applyUserName, new Date());
-                    break;
-                default:
-                    break;
+            if (examplesId.equals(sysConfigService.selectConfigByKey(HsFlowEngineService.BIZ_LEAVE_FLOW_KEY))) {
+                String leaveStartTime = DateUtils.dateTime(sdf.parse(formData.get("leave_start_time").toString()));
+                String leaveEndTime = DateUtils.dateTime(sdf.parse(formData.get("leave_end_time").toString()));
+                content = "<p>标题:" + formData.get("title") + "</p>" +
+                        "<p>申请人:" + formData.get("apply_user_name") + "</p>" +
+                        "<p>开始时间:" + leaveStartTime + "</p>" +
+                        "<p>结束时间:" + leaveEndTime + "</p>";
+            } else if (examplesId.equals(sysConfigService.selectConfigByKey(HsFlowEngineService.FILE_APPROVAL_FLOW_KEY))) {
+                //异步生成审批消息列表
+                content = "<p>标题:" + formData.get("title") + "</p>" +
+                        "<p>申请人:" + formData.get("apply_user_name") + "</p>";
+            } else if (examplesId.equals(sysConfigService.selectConfigByKey(HsFlowEngineService.RESERVE_FLOW_KEY))) {
+                content = "<p>标题:" + formData.get("title") + "</p>" +
+                        "<p>申请人:" + formData.get("apply_user_name") + "</p>" +
+                        "<p>物资名称:" + formData.get("reserve_name") + "</p>" +
+                        "<p>申请数量:" + formData.get("apply_amount") + "</p>";
             }
+            //异步生成审批消息列表
+            userMsgService.saveApprovalMsgAndPush("1",
+                    String.valueOf(formData.get("title")), content, taskId,
+                    candidate, applyUserName, new Date());
         } catch (ParseException e) {
             e.printStackTrace();
         }
@@ -182,7 +182,7 @@ public class HsFlowEngineServiceImpl implements HsFlowEngineService {
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public int nextStep(FLowReq flow) {
+    public int nextStep(FlowReq flow) {
         if (StringUtils.isBlank(flow.getTaskId())) {
             throw new BaseException("FLOW_TASK_ID - IS_NULL");
         }
@@ -247,7 +247,8 @@ public class HsFlowEngineServiceImpl implements HsFlowEngineService {
             if (resultTrue) {
                 stepId = hsFlowBase.getDownStepId();
             } else {
-                stepId = hsFlowBase.getUpStepId();
+                // stepId = hsFlowBase.getUpStepId();
+                stepId = flow.getRejectBaseId();
             }
             String username = SecurityUtils.getUsername();
             frr.setComment(hsFlowTask.getBaseName() + ":" + SecurityUtils.getLoginUser().getUser().getNickName() + " - " + flow.getComment());
@@ -264,24 +265,28 @@ public class HsFlowEngineServiceImpl implements HsFlowEngineService {
                 hsFlowTask.setOperator(flow.getNextApproval());
                 hsFlowTask.setBaseName(hsFlowBase1.getFlowModuleName());
             } else if (!resultTrue) {
+                hsFlowTask.setBaseId(stepId);
+                hsFlowTask.setOperator(flow.getNextApproval());
+                HsFlowBase currentFlowTaskBase = flowBaseService.getCurrentFlowTaskBase(hsFlowTask.getBaseGroupId(), stepId);
+                hsFlowTask.setBaseName(currentFlowTaskBase.getFlowModuleName());
                 //拒绝时 通过记录 反向比对 查找上一步 同意的数据并 更新任务
-                List<HsFlowRunningRecord> flowRunningRecords = flowRunningRecordService.selectHsFlowRunningRecordTrue(flow.getTaskId());
-                int count = 0;
-                for (int i = 0; i < flowRunningRecords.size(); i++) {
-                    String baseId = flowRunningRecords.get(i).getBaseId();
-                    if (StringUtils.isNotBlank(baseId) && StringUtils.equals(baseId, stepId)) {
-                        hsFlowTask.setBaseId(flowRunningRecords.get(i).getBaseId());
-                        hsFlowTask.setOperator(flowRunningRecords.get(i).getOperator());
-                        HsFlowBase currentFlowTaskBase = flowBaseService.getCurrentFlowTaskBase(hsFlowTask.getBaseGroupId(), baseId);
-                        hsFlowTask.setBaseName(currentFlowTaskBase.getFlowModuleName());
-                        count++;
-                        break;
-                    }
-                }
+//                List<HsFlowRunningRecord> flowRunningRecords = flowRunningRecordService.selectHsFlowRunningRecordTrue(flow.getTaskId());
+//                int count = 0;
+//                for (int i = 0; i < flowRunningRecords.size(); i++) {
+//                    String baseId = flowRunningRecords.get(i).getBaseId();
+//                    if (StringUtils.isNotBlank(baseId) && StringUtils.equals(baseId, stepId)) {
+//                        hsFlowTask.setBaseId(flowRunningRecords.get(i).getBaseId());
+//                        hsFlowTask.setOperator(flowRunningRecords.get(i).getOperator());
+//                        HsFlowBase currentFlowTaskBase = flowBaseService.getCurrentFlowTaskBase(hsFlowTask.getBaseGroupId(), baseId);
+//                        hsFlowTask.setBaseName(currentFlowTaskBase.getFlowModuleName());
+//                        count++;
+//                        break;
+//                    }
+//                }
                 //没有找到 直接结束
-                if (count == 0) {
-                    stepId = null;
-                }
+//                if (count == 0) {
+//                    stepId = null;
+//                }
             } else {
                 //避免异常找不到任务默认admin
                 hsFlowTask.setOperator("admin");
@@ -300,7 +305,6 @@ public class HsFlowEngineServiceImpl implements HsFlowEngineService {
             hsFlowTask.setOperator(hsFlowTask.getOperator());
             hsFlowTask.setIsEnd("1");
             hsFlowTask.setRemark("任务已结束");
-            String businessId = hsFlowTask.getBusinessId();
             HsFlowRunningRecord frr1 = new HsFlowRunningRecord();
             frr1.setComment("自动结束");
             frr1.setOperator(SecurityUtils.getUsername());
@@ -333,19 +337,20 @@ public class HsFlowEngineServiceImpl implements HsFlowEngineService {
             String content = null;
             try {
                 String examplesId = hsFlowTask.getExamplesId();
-                switch (examplesId) {
-                    case "1580107848471093250":
-                        content = "<p>标题:" + formData.get("title") + "</p>" +
-                                "<p>申请人:" + formData.get("apply_user_name") + "</p>" +
-                                "<p>开始时间:" + DateUtils.dateTime(sdf.parse(formData.get("leave_start_time").toString())) + "</p>" +
-                                "<p>结束时间:" + DateUtils.dateTime(sdf.parse(formData.get("leave_end_time").toString())) + "</p>";
-                        break;
-                    case "1600773666636759041":
-                        content = "<p>标题:" + formData.get("title") + "</p>" +
-                                "<p>申请人:" + formData.get("apply_user_name") + "</p>";
-                        break;
-                    default:
-                        break;
+                if (examplesId.equals(sysConfigService.selectConfigByKey(HsFlowEngineService.BIZ_LEAVE_FLOW_KEY))) {
+                    content = "<p>标题:" + formData.get("title") + "</p>" +
+                            "<p>申请人:" + formData.get("apply_user_name") + "</p>" +
+                            "<p>开始时间:" + DateUtils.dateTime(sdf.parse(formData.get("leave_start_time").toString())) + "</p>" +
+                            "<p>结束时间:" + DateUtils.dateTime(sdf.parse(formData.get("leave_end_time").toString())) + "</p>";
+                } else if (examplesId.equals(sysConfigService.selectConfigByKey(HsFlowEngineService.FILE_APPROVAL_FLOW_KEY))) {
+                    //异步生成审批消息列表
+                    content = "<p>标题:" + formData.get("title") + "</p>" +
+                            "<p>申请人:" + formData.get("apply_user_name") + "</p>";
+                } else if (examplesId.equals(sysConfigService.selectConfigByKey(HsFlowEngineService.RESERVE_FLOW_KEY))) {
+                    content = "<p>标题:" + formData.get("title") + "</p>" +
+                            "<p>申请人:" + formData.get("apply_user_name") + "</p>" +
+                            "<p>物资名称:" + formData.get("reserve_name") + "</p>" +
+                            "<p>申请数量:" + formData.get("apply_amount") + "</p>";
                 }
             } catch (ParseException e) {
                 e.printStackTrace();
@@ -354,12 +359,7 @@ public class HsFlowEngineServiceImpl implements HsFlowEngineService {
             appUserMsg.setMsgTitle(String.valueOf(formData.get("title")));
             appUserMsg.setMsgIsRead("0");
             appUserMsg.setUserCode(hsFlowTask.getOperator());
-            //设置类型
-            if (FlowEnum.LEAVE_FLOW_EXAMPLES_ID.getValue().equals(hsFlowTask.getExamplesId())) {
-                appUserMsg.setMsgType("1");
-            } else if (FlowEnum.FILE_FLOW_EXAMPLES_ID.getValue().equals(hsFlowTask.getExamplesId())) {
-                appUserMsg.setMsgType("5");
-            }
+            appUserMsg.setMsgType("1");
             appUserMsg.setRemark(hsFlowTask.getId());
             appUserMsg.setCreateTime(new Date());
             userMsgService.save(appUserMsg);
@@ -487,7 +487,7 @@ public class HsFlowEngineServiceImpl implements HsFlowEngineService {
                                 Set<String> strings = stringObjectMap.keySet();
                                 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                                 strings.forEach(str -> {
-                                    if (StringUtils.isNotBlank(str) && str.contains("time")) {
+                                    if (StringUtils.isNotBlank(str) && str.contains("time") || str.contains("date")) {
                                         if (stringObjectMap.get(str) instanceof LocalDateTime) {
                                             stringObjectMap.put(str, formatter.format((LocalDateTime) stringObjectMap.get(str)));
                                         }
@@ -513,6 +513,20 @@ public class HsFlowEngineServiceImpl implements HsFlowEngineService {
         return null;
     }
 
+    @Override
+    public List<HsFlowRunningRecord> rejectTaskRecords(String taskId) {
+        if (StringUtils.isNotBlank(taskId)) {
+            List<HsFlowRunningRecord> flowRunningRecords = flowRunningRecordService.getBaseMapper().selectList(new QueryWrapper<HsFlowRunningRecord>()
+                    .eq("task_id", taskId).last("AND yes_or_no = 'RESULT_TRUE' GROUP BY base_id"));
+            flowRunningRecords.forEach(flowRunningRecord -> {
+                String comment = flowRunningRecord.getComment();
+                flowRunningRecord.setComment(comment.substring(0, comment.indexOf("-")));
+            });
+            return flowRunningRecords;
+        }
+        return null;
+    }
+
     @Override
     public int revoke(String taskId) {
         if (StringUtils.isNotBlank(taskId)) {

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

@@ -0,0 +1,35 @@
+package com.willalp.flow.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.willalp.flow.domain.ReserveConsumingRecord;
+import com.willalp.flow.mapper.ReserveConsumingRecordMapper;
+import com.willalp.flow.service.IReserveConsumingRecordService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 物资领用申请业务数据记录Service业务层处理
+ *
+ * @author willalp
+ * @date 2023-01-12
+ */
+@Service
+public class ReserveConsumingRecordServiceImpl extends ServiceImpl<ReserveConsumingRecordMapper, ReserveConsumingRecord>  implements IReserveConsumingRecordService
+{
+    @Resource
+    private ReserveConsumingRecordMapper reserveConsumingRecordMapper;
+
+    /**
+     * 查询物资领用申请业务数据记录列表
+     *
+     * @param reserveConsumingRecord 物资领用申请业务数据记录
+     * @return 物资领用申请业务数据记录
+     */
+    @Override
+    public List<ReserveConsumingRecord> selectReserveConsumingRecordList(ReserveConsumingRecord reserveConsumingRecord)
+    {
+        return reserveConsumingRecordMapper.selectReserveConsumingRecordList(reserveConsumingRecord);
+    }
+}

+ 21 - 5
willalp-system/src/main/java/com/willalp/system/mapper/xml/SysDeptPostMapper.xml

@@ -22,7 +22,21 @@
     </resultMap>
 
     <sql id="selectSysDeptPostVo">
-        select post_id, parent_id, ancestors, post_code, post_name, status, jgid, dept_id, create_by, create_time, update_by, update_time, remark, is_delete        from sys_dept_post
+        select post_id,
+               parent_id,
+               ancestors,
+               post_code,
+               post_name,
+               status,
+               jgid,
+               dept_id,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               remark,
+               is_delete
+        from sys_dept_post
     </sql>
 
     <select id="selectSysDeptPostList" parameterType="SysDeptPost" resultMap="SysDeptPostResult">
@@ -32,9 +46,9 @@
             <if test="parentId != null ">
                 and parent_id = #{parentId}
             </if>
-<!--            <if test="ancestors != null  and ancestors != ''">-->
-<!--                and ancestors = #{ancestors}-->
-<!--            </if>-->
+            <!--            <if test="ancestors != null  and ancestors != ''">-->
+            <!--                and ancestors = #{ancestors}-->
+            <!--            </if>-->
             <if test="postCode != null  and postCode != ''">
                 and post_code = #{postCode}
             </if>
@@ -76,6 +90,8 @@
     </update>
 
     <update id="deleteSysDeptPostByPostId">
-        update sys_dept_post set is_delete = 1 where post_id = #{postId}
+        update sys_dept_post
+        set is_delete = 1
+        where post_id = #{postId}
     </update>
 </mapper>

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

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询物资领用申请业务数据记录列表
+export function listReserve(query) {
+  return request({
+    url: '/flow/reserve/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询物资领用申请业务数据记录详细
+export function getReserve(id) {
+  return request({
+    url: '/flow/reserve/' + id,
+    method: 'get'
+  })
+}
+
+// 新增物资领用申请业务数据记录
+export function addReserve(data) {
+  return request({
+    url: '/flow/reserve',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改物资领用申请业务数据记录
+export function updateReserve(data) {
+  return request({
+    url: '/flow/reserve',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除物资领用申请业务数据记录
+export function delReserve(id) {
+  return request({
+    url: '/flow/reserve/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出物资领用申请业务数据记录
+export function exportReserve(query) {
+  return request({
+    url: '/flow/reserve/export',
+    method: 'get',
+    params: query
+  })
+}

+ 2 - 1
willalp-ui/src/views/canteen/order/index.vue

@@ -580,9 +580,10 @@ export default {
     clickTjdc() {
       this.tjdcList = []
       this.tjdcOpen = true
+      this.loading = true
       tjdcList(this.tjdc).then(re => {
-        console.log(re)
         this.tjdcList = re.data
+        this.loading = false
       })
     },
     clickJctj() {

+ 148 - 157
willalp-ui/src/views/canteen/place/index.vue

@@ -10,21 +10,11 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-<!--      <el-form-item label="机构代码" prop="jgid">-->
-<!--        <el-input-->
-<!--          v-model="queryParams.jgid"-->
-<!--          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
@@ -93,7 +83,8 @@
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="上级目录" prop="parentId">
-          <treeselect v-model="form.parentId" :options="placeOptions" :normalizer="normalizer" placeholder="请选择父id" disabled/>
+          <treeselect v-model="form.parentId" :options="placeOptions" :normalizer="normalizer" placeholder="请选择父id"
+                      disabled/>
         </el-form-item>
         <el-form-item label="位置名称" prop="placeName">
           <el-input v-model="form.placeName" placeholder="请输入地点名称"/>
@@ -101,7 +92,7 @@
         <el-form-item label="具体位置" prop="placeSite">
           <el-input v-model="form.placeSite" placeholder="请输入具体位置"/>
         </el-form-item>
-        <el-form-item label="位置类型" prop="placeType" >
+        <el-form-item label="位置类型" prop="placeType">
           <el-select v-model="form.placeType" placeholder="请选择位置类型" :disabled="usFlag">
             <el-option
               v-for="dict in dict.type.place_type"
@@ -127,159 +118,159 @@
 </template>
 
 <script>
-  import {listPlace, getPlace, delPlace, addPlace, updatePlace, exportPlace} from "@/api/canteen/place";
-  import Treeselect from "@riophae/vue-treeselect";
-  import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-  import user from "@/store/modules/user";
+import {listPlace, getPlace, delPlace, addPlace, updatePlace, exportPlace} from "@/api/canteen/place";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import user from "@/store/modules/user";
 
-  export default {
-    name: "Place",
-    dicts: ['place_type'],
-    components: {
-      Treeselect
+export default {
+  name: "Place",
+  dicts: ['place_type'],
+  components: {
+    Treeselect
+  },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 地点表格数据
+      placeList: [],
+      // 地点树选项
+      placeOptions: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        placeName: null,
+        jgid: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {},
+      usFlag: false
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询地点列表 */
+    getList() {
+      this.loading = true;
+      this.queryParams.jgid = user.state.organ;
+      listPlace(this.queryParams).then(response => {
+        this.placeList = this.handleTree(response.data, "placeId", "parentId");
+        this.loading = false;
+      });
     },
-    data() {
+    /** 转换地点数据结构 */
+    normalizer(node) {
+      if (node.children && !node.children.length) {
+        delete node.children;
+      }
       return {
-        // 遮罩层
-        loading: true,
-        // 显示搜索条件
-        showSearch: true,
-        // 地点表格数据
-        placeList: [],
-        // 地点树选项
-        placeOptions: [],
-        // 弹出层标题
-        title: "",
-        // 是否显示弹出层
-        open: false,
-        // 查询参数
-        queryParams: {
-          placeName: null,
-          jgid: null
-        },
-        // 表单参数
-        form: {},
-        // 表单校验
-        rules: {},
-        usFlag: false
+        id: node.placeId,
+        label: node.placeName,
+        children: node.children
+      };
+    },
+    /** 查询地点下拉树结构 */
+    getTreeselect() {
+      listPlace({jgid: user.state.organ}).then(response => {
+        this.placeOptions = [];
+        const data = {placeId: 0, placeName: '顶级节点', children: []};
+        data.children = this.handleTree(response.data, "placeId", "parentId");
+        this.placeOptions.push(data);
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        placeId: null,
+        parentId: null,
+        placeName: null,
+        jgid: null
       };
+      this.resetForm("form");
     },
-    created() {
+    /** 搜索按钮操作 */
+    handleQuery() {
       this.getList();
     },
-    methods: {
-      /** 查询地点列表 */
-      getList() {
-        this.loading = true;
-        this.queryParams.jgid = user.state.organ;
-        listPlace(this.queryParams).then(response => {
-          this.placeList = this.handleTree(response.data, "placeId", "parentId");
-          this.loading = false;
-        });
-      },
-      /** 转换地点数据结构 */
-      normalizer(node) {
-        if (node.children && !node.children.length) {
-          delete node.children;
-        }
-        return {
-          id: node.placeId,
-          label: node.placeName,
-          children: node.children
-        };
-      },
-      /** 查询地点下拉树结构 */
-      getTreeselect() {
-        listPlace({jgid: user.state.organ}).then(response => {
-          this.placeOptions = [];
-          const data = {placeId: 0, placeName: '顶级节点', children: []};
-          data.children = this.handleTree(response.data, "placeId", "parentId");
-          this.placeOptions.push(data);
-        });
-      },
-      // 取消按钮
-      cancel() {
-        this.open = false;
-        this.reset();
-      },
-      // 表单重置
-      reset() {
-        this.form = {
-          placeId: null,
-          parentId: null,
-          placeName: null,
-          jgid: null
-        };
-        this.resetForm("form");
-      },
-      /** 搜索按钮操作 */
-      handleQuery() {
-        this.getList();
-      },
-      /** 重置按钮操作 */
-      resetQuery() {
-        this.resetForm("queryForm");
-        this.handleQuery();
-      },
-      /** 新增按钮操作 */
-      handleAdd(row) {
-        this.reset();
-        this.getTreeselect();
-        if (row != null && row.placeId) {
-          this.form.parentId = row.placeId;
-          this.usFlag = true;
-          this.form.placeType = row.placeType
-        } else {
-          this.form.parentId = 0;
-          this.usFlag = false;
-        }
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 新增按钮操作 */
+    handleAdd(row) {
+      this.reset();
+      this.getTreeselect();
+      if (row != null && row.placeId) {
+        this.form.parentId = row.placeId;
+        this.usFlag = true;
+        this.form.placeType = row.placeType
+      } else {
+        this.form.parentId = 0;
+        this.usFlag = false;
+      }
+      this.open = true;
+      this.title = "添加地点";
+      this.form.jgid = user.state.organ;
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.getTreeselect();
+      if (row != null) {
+        this.form.parentId = row.placeId;
+      }
+      getPlace(row.placeId).then(response => {
+        this.form = response.data;
         this.open = true;
-        this.title = "添加地点";
-        this.form.jgid = user.state.organ;
-      },
-      /** 修改按钮操作 */
-      handleUpdate(row) {
-        this.reset();
-        this.getTreeselect();
-        if (row != null) {
-          this.form.parentId = row.placeId;
-        }
-        getPlace(row.placeId).then(response => {
-          this.form = response.data;
-          this.open = true;
-          this.title = "修改地点";
-        });
-      },
-      /** 提交按钮 */
-      submitForm() {
-        this.$refs["form"].validate(valid => {
-          if (valid) {
-            if (this.form.placeId != null) {
-              updatePlace(this.form).then(response => {
-                this.$modal.msgSuccess("修改成功");
-                this.open = false;
-                this.getList();
-              });
-            } else {
-              addPlace(this.form).then(response => {
-                this.$modal.msgSuccess("新增成功");
-                this.open = false;
-                this.getList();
-              });
-            }
+        this.title = "修改地点";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.placeId != null) {
+            updatePlace(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addPlace(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
           }
-        });
-      },
-      /** 删除按钮操作 */
-      handleDelete(row) {
-        this.$modal.confirm('是否确认删除地点编号为"' + row.placeId + '"的数据项?').then(function () {
-          return delPlace(row.placeId);
-        }).then(() => {
-          this.getList();
-          this.$modal.msgSuccess("删除成功");
-        }).catch(() => {
-        });
-      }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      this.$modal.confirm('是否确认删除地点编号为"' + row.placeId + '"的数据项?').then(function () {
+        return delPlace(row.placeId);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {
+      });
     }
-  };
+  }
+};
 </script>

+ 11 - 11
willalp-ui/src/views/files/approval/index.vue

@@ -84,21 +84,21 @@
             <!--            </el-table-column>-->
             <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:accessory:edit']"-->
+<!--                >修改-->
+<!--                </el-button>-->
                 <el-button
                   size="mini"
                   type="text"
-                  icon="el-icon-edit"
-                  @click="handleUpdate(scope.row)"
-                  v-hasPermi="['flow:accessory:edit']"
-                >修改
-                </el-button>
-                <el-button
-                  size="mini"
-                  type="text"
-                  icon="el-icon-delete"
+                  icon="el-icon-refresh-left"
                   @click="handleDelete(scope.row)"
                   v-hasPermi="['flow:accessory:remove']"
-                >删除
+                >撤销
                 </el-button>
               </template>
             </el-table-column>
@@ -253,7 +253,7 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除该文件审批流程吗?').then(function() {
+      this.$modal.confirm('是否确认撤销该文件审批流程吗?').then(function() {
         return delAccessory(ids)
       }).then(() => {
         this.getList()

+ 244 - 219
willalp-ui/src/views/files/files/index.vue

@@ -92,14 +92,6 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="生日" prop="birthday">
-        <el-date-picker clearable size="small"
-                        v-model="queryParams.birthday"
-                        type="date"
-                        value-format="yyyy-MM-dd"
-                        placeholder="选择生日">
-        </el-date-picker>
-      </el-form-item>
       <el-form-item label="身份证号" prop="idCard">
         <el-input
           v-model="queryParams.idCard"
@@ -119,12 +111,6 @@
           ></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="用户类型" prop="userType">
-        <el-input clearable size="small"
-                  v-model="queryParams.userType"
-                  placeholder="选择入职时间">
-        </el-input>
-      </el-form-item>
       <el-form-item label="入职时间" prop="hiredate">
         <el-date-picker clearable size="small"
                         v-model="queryParams.hiredate"
@@ -142,13 +128,18 @@
         </el-date-picker>
       </el-form-item>
       <el-row :gutter="10">
-        <el-col :span="4">
-          <el-form-item label="所属部门" prop="department" style="width: 100%">
-            <treeselect v-model="queryParams.department" :options="deptOptions"
-                        placeholder="请选择归属部门"/>
+        <el-col :span="5">
+          <el-form-item prop="department">
+            <div style="display: inline-flex;position: relative;top: -10px;margin-right: 10px">
+              所属部门
+            </div>
+            <div style="display: inline-flex;width: 80%;">
+              <treeselect v-model="queryParams.department" :options="deptOptions"
+                          placeholder="请选择归属部门"/>
+            </div>
           </el-form-item>
         </el-col>
-        <el-col :span="3">
+        <el-col :span="4">
           <el-form-item label="用户类型">
             <el-select v-model="queryParams.userType" placeholder="请选择用户类型">
               <el-option
@@ -160,7 +151,7 @@
             </el-select>
           </el-form-item>
         </el-col>
-        <el-col :span="3">
+        <el-col :span="8">
           <div class="grid-content bg-purple">
             <el-form-item label="操作">
               <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -169,8 +160,6 @@
           </div>
         </el-col>
       </el-row>
-      <el-row>
-      </el-row>
     </el-form>
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
@@ -280,12 +269,19 @@
       <el-table-column label="联系电话" align="center" prop="phone"/>
       <el-table-column label="邮箱" align="center" prop="email"/>
       <el-table-column label="座机号" align="center" prop="seatNo"/>
+      <el-table-column label="所属部门" align="center" prop="department"/>
+      <el-table-column label="岗位名称" align="center" prop="post" width="100">
+        <template slot-scope="scope">
+          <div v-for="item in postData">
+            <span v-if="item.postId === scope.row.post">{{ item.postName }}</span>
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column label="取得职称" align="center" prop="jobTitle" width="100">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.job_title" :value="scope.row.jobTitle"/>
         </template>
       </el-table-column>
-      <el-table-column label="所属部门" align="center" prop="department"/>
       <el-table-column label="入职时间" align="center" prop="hiredate" width="180">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.hiredate, '{y}-{m}-{d}') }}</span>
@@ -308,202 +304,226 @@
     />
 
     <!-- 添加或修改机构人员档案对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body>
+    <el-dialog :visible.sync="open" width="1000px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules">
-        <el-row :gutter="20">
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="用户编号" prop="userCode">
-                <el-input v-model="form.userCode" placeholder="请输入用户编号"/>
-              </el-form-item>
-            </div>
-          </el-col>
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="工号" prop="jobNo">
-                <el-input v-model="form.jobNo" placeholder="请输入工号"/>
-              </el-form-item>
-            </div>
-          </el-col>
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="姓名" prop="userName">
-                <el-input v-model="form.userName" placeholder="请输入姓名"/>
-              </el-form-item>
-            </div>
-          </el-col>
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="性别" prop="sex">
-                <el-select v-model="form.sex" placeholder="请选择性别">
-                  <el-option
-                    v-for="dict in dict.type.sys_user_sex"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="dict.value"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </div>
-          </el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="年龄" prop="age">
-                <el-input v-model="form.age" placeholder="请输入年龄"/>
-              </el-form-item>
-            </div>
-          </el-col>
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="民族" prop="nation">
-                <el-input v-model="form.nation" placeholder="请输入民族"/>
-              </el-form-item>
-            </div>
-          </el-col>
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="籍贯" prop="origo">
-                <el-input v-model="form.origo" placeholder="请输入籍"/>
-              </el-form-item>
-            </div>
-          </el-col>
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="政治面貌" prop="seatNo">
-                <el-input v-model="form.politicsStatus" placeholder="请输入政治面貌"/>
-              </el-form-item>
-            </div>
-          </el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="文化程度" prop="educationalLevel">
-                <el-input v-model="form.educationalLevel" placeholder="请输入文化程度"/>
-              </el-form-item>
-            </div>
-          </el-col>
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="身份证号" prop="idCard">
-                <el-input v-model="form.idCard" placeholder="请输入身份证号"/>
-              </el-form-item>
-            </div>
-          </el-col>
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="生日" prop="birthday">
-                <el-date-picker clearable size="small"
-                                v-model="form.birthday"
-                                type="date"
-                                value-format="yyyy-MM-dd"
-                                placeholder="选择生日">
-                </el-date-picker>
-              </el-form-item>
-            </div>
-          </el-col>
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="居住地" prop="residence">
-                <el-input v-model="form.residence" placeholder="请输入居住地"/>
-              </el-form-item>
-            </div>
-          </el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="联系电话" prop="phone">
-                <el-input v-model="form.phone" placeholder="请输入联系电话"/>
-              </el-form-item>
-            </div>
-          </el-col>
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="邮箱" prop="eMail">
-                <el-input v-model="form.eMail" placeholder="请输入邮箱"/>
-              </el-form-item>
-            </div>
-          </el-col>
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="座机号" prop="seatNo">
-                <el-input v-model="form.seatNo" placeholder="请输入座机号"/>
-              </el-form-item>
-            </div>
-          </el-col>
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="取得职称" prop="jobTitle">
-                <el-select v-model="form.jobTitle" placeholder="请选择取得职称">
+        <el-card>
+          <div style="padding: 10px">基本信息</div>
+          <el-row :gutter="20">
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="用户编号" prop="userCode">
+                  <el-input v-model="form.userCode" placeholder="请输入用户编号"/>
+                </el-form-item>
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="工号" prop="jobNo">
+                  <el-input v-model="form.jobNo" placeholder="请输入工号"/>
+                </el-form-item>
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="姓名" prop="userName">
+                  <el-input v-model="form.userName" placeholder="请输入姓名"/>
+                </el-form-item>
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="性别" prop="sex">
+                  <el-select v-model="form.sex" placeholder="请选择性别">
+                    <el-option
+                      v-for="dict in dict.type.sys_user_sex"
+                      :key="dict.value"
+                      :label="dict.label"
+                      :value="dict.value"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </div>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="年龄" prop="age">
+                  <el-input v-model="form.age" placeholder="请输入年龄"/>
+                </el-form-item>
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="民族" prop="nation">
+                  <el-input v-model="form.nation" placeholder="请输入民族"/>
+                </el-form-item>
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="籍贯" prop="origo">
+                  <el-input v-model="form.origo" placeholder="请输入籍"/>
+                </el-form-item>
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="政治面貌" prop="seatNo">
+                  <el-input v-model="form.politicsStatus" placeholder="请输入政治面貌"/>
+                </el-form-item>
+              </div>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="文化程度" prop="educationalLevel">
+                  <el-input v-model="form.educationalLevel" placeholder="请输入文化程度"/>
+                </el-form-item>
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="身份证号" prop="idCard">
+                  <el-input v-model="form.idCard" placeholder="请输入身份证号"/>
+                </el-form-item>
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="生日" prop="birthday">
+                  <el-date-picker clearable size="small"
+                                  v-model="form.birthday"
+                                  type="date"
+                                  value-format="yyyy-MM-dd"
+                                  placeholder="选择生日">
+                  </el-date-picker>
+                </el-form-item>
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="居住地" prop="residence">
+                  <el-input v-model="form.residence" placeholder="请输入居住地"/>
+                </el-form-item>
+              </div>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="手机号" prop="phone">
+                  <el-input v-model="form.phone" placeholder="请输入手机号"/>
+                </el-form-item>
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="邮箱" prop="eMail">
+                  <el-input v-model="form.eMail" placeholder="请输入邮箱"/>
+                </el-form-item>
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="座机号" prop="seatNo">
+                  <el-input v-model="form.seatNo" placeholder="请输入座机号"/>
+                </el-form-item>
+              </div>
+            </el-col>
+          </el-row>
+        </el-card>
+        <el-card style="margin-top: 10px">
+          <div style="padding: 10px">岗位信息</div>
+          <el-row :gutter="20">
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="所属部门" prop="department">
+                  <treeselect v-model="form.department" :options="deptOptions" :show-count="true"
+                              placeholder="请选择归属部门"/>
+                </el-form-item>
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="岗位名称" prop="post">
+                  <el-select v-model="form.post" placeholder="请选择岗位名称">
+                    <el-option
+                      v-for="dict in postData"
+                      :key="dict.postId"
+                      :label="dict.postName"
+                      :value="dict.postId"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="取得职称" prop="jobTitle">
+                  <el-select v-model="form.jobTitle" placeholder="请选择取得职称">
+                    <el-option
+                      v-for="dict in dict.type.job_title"
+                      :key="dict.value"
+                      :label="dict.label"
+                      :value="dict.value"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="用户类型">
+                <el-select v-model="form.userType" placeholder="请选择用户类型">
                   <el-option
-                    v-for="dict in dict.type.job_title"
+                    v-for="dict in dict.type.user_type"
                     :key="dict.value"
                     :label="dict.label"
                     :value="dict.value"
                   ></el-option>
                 </el-select>
               </el-form-item>
-            </div>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="所属部门" prop="department">
-                <treeselect v-model="form.department" :options="deptOptions" :show-count="true" placeholder="请选择归属部门"/>
-              </el-form-item>
-            </div>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="用户类型">
-              <el-select v-model="form.userType" placeholder="请选择用户类型">
-                <el-option
-                  v-for="dict in dict.type.user_type"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="入职时间" prop="hiredate">
-                <el-date-picker clearable size="small"
-                                v-model="form.hiredate"
-                                type="date"
-                                value-format="yyyy-MM-dd"
-                                placeholder="选择入职时间">
-                </el-date-picker>
-              </el-form-item>
-            </div>
-          </el-col>
-          <el-col :span="6">
-            <div class="grid-content bg-purple">
-              <el-form-item label="离职时间" prop="resignationTime">
-                <el-date-picker clearable size="small"
-                                v-model="form.resignationTime"
-                                type="date"
-                                value-format="yyyy-MM-dd"
-                                placeholder="选择离职时间">
-                </el-date-picker>
-              </el-form-item>
-            </div>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col>
-            <div class="grid-content bg-purple">
-              <el-form-item label="备注" prop="remark">
-                <el-input type="textarea" :rows="2" v-model="form.remark" placeholder="请输入备注"/>
-              </el-form-item>
-            </div>
-          </el-col>
-        </el-row>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="入职时间" prop="hiredate">
+                  <el-date-picker clearable size="small"
+                                  v-model="form.hiredate"
+                                  type="date"
+                                  value-format="yyyy-MM-dd"
+                                  placeholder="选择入职时间">
+                  </el-date-picker>
+                </el-form-item>
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <div class="grid-content bg-purple">
+                <el-form-item label="离职时间" prop="resignationTime">
+                  <el-date-picker clearable size="small"
+                                  v-model="form.resignationTime"
+                                  type="date"
+                                  value-format="yyyy-MM-dd"
+                                  placeholder="选择离职时间">
+                  </el-date-picker>
+                </el-form-item>
+              </div>
+            </el-col>
+          </el-row>
+        </el-card>
+        <el-card style="margin-top: 10px">
+          <el-row>
+            <el-col>
+              <div class="grid-content bg-purple">
+                <el-form-item label="备注" prop="remark">
+                  <el-input type="textarea" :rows="2" v-model="form.remark" placeholder="请输入备注"/>
+                </el-form-item>
+              </div>
+            </el-col>
+          </el-row>
+        </el-card>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -538,18 +558,19 @@
 </template>
 
 <script>
-import { listFiles, getFiles, delFiles, addFiles, updateFiles, exportFiles, importTemp } from '@/api/files/files'
-import { treeselect } from '@/api/system/dept'
+import {listFiles, getFiles, delFiles, addFiles, updateFiles, exportFiles, importTemp} from '@/api/files/files'
+import {treeselect} from '@/api/system/dept'
 import user from '@/store/modules/user'
 import Treeselect from '@riophae/vue-treeselect'
 import '@riophae/vue-treeselect/dist/vue-treeselect.css'
-import { importTempSalaryslip } from '@/api/salary/salaryslip'
-import { getToken } from '@/utils/auth'
+import {importTempSalaryslip} from '@/api/salary/salaryslip'
+import {getToken} from '@/utils/auth'
+import {listDeptPost} from "@/api/system/deptPost";
 
 export default {
   name: 'Files',
   dicts: ['sys_user_sex', 'job_title', 'user_type'],
-  components: { Treeselect },
+  components: {Treeselect},
   data() {
     return {
       defaultProps: {
@@ -587,7 +608,7 @@ export default {
         isUploading: false,
         // 是否更新已经存在的用户数据
         // 设置上传的请求头部
-        headers: { Authorization: 'Bearer ' + getToken() },
+        headers: {Authorization: 'Bearer ' + getToken()},
         // 上传的地址
         url: process.env.VUE_APP_BASE_API + '/files/files/importData'
       },
@@ -617,6 +638,7 @@ export default {
       },
       // 表单参数
       form: {},
+      postData: [],
       // 表单校验
       rules: {}
     }
@@ -629,6 +651,9 @@ export default {
   created() {
     this.getTreeselect()
     this.getList()
+    listDeptPost().then(response => {
+      this.postData = response.data
+    })
   },
   methods: { // 筛选节点
     filterNode(value, data) {
@@ -752,7 +777,7 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除机构人员档案编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除机构人员档案编号为"' + ids + '"的数据项?').then(function () {
         return delFiles(ids)
       }).then(() => {
         this.getList()
@@ -784,7 +809,7 @@ export default {
       this.upload.open = false
       this.upload.isUploading = false
       this.$refs.upload.clearFiles()
-      this.$alert(response.msg, '导入结果', { dangerouslyUseHTMLString: true })
+      this.$alert(response.msg, '导入结果', {dangerouslyUseHTMLString: true})
       this.cancel()
       this.getList()
     },

+ 411 - 0
willalp-ui/src/views/flow/reserve/index.vue

@@ -0,0 +1,411 @@
+<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="applyDepartment">
+        <el-input
+          v-model="queryParams.applyDepartment"
+          placeholder="请输入申请科室"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="物资类型" prop="reserveType">
+        <el-select v-model="queryParams.reserveType" 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="reserveName">
+        <el-input
+          v-model="queryParams.reserveName"
+          placeholder="请输入物资名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="物资型号" prop="reserveModelNo">
+        <el-input
+          v-model="queryParams.reserveModelNo"
+          placeholder="请输入物资型号"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="申请数量" prop="applyAmount">
+        <el-input
+          v-model="queryParams.applyAmount"
+          placeholder="请输入申请数量"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="申请人user_code" prop="applyUserId">
+        <el-input
+          v-model="queryParams.applyUserId"
+          placeholder="请输入申请人user_code"
+          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 label="申请日期" prop="applyDate">
+        <el-date-picker clearable size="small"
+                        v-model="queryParams.applyDate"
+                        type="date"
+                        value-format="yyyy-MM-dd"
+                        placeholder="选择申请日期">
+        </el-date-picker>
+      </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:reserve: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:reserve: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:reserve: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:reserve:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="reserveList" @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="applyDepartment" />
+      <el-table-column label="物资类型" align="center" prop="reserveType">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.reserve_type" :value="scope.row.reserveType"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="物资名称" align="center" prop="reserveName" />
+      <el-table-column label="物资型号" align="center" prop="reserveModelNo" />
+      <el-table-column label="申请数量" align="center" prop="applyAmount" />
+      <el-table-column label="申请人user_code" align="center" prop="applyUserId" />
+      <el-table-column label="申请人" align="center" prop="applyUserName" />
+      <el-table-column label="申请原因" align="center" prop="applyReason" />
+      <el-table-column label="申请日期" align="center" prop="applyDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.applyDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <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:reserve:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['flow:reserve: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="applyDepartment">
+          <el-input v-model="form.applyDepartment" placeholder="请输入申请科室" />
+        </el-form-item>
+        <el-form-item label="物资类型" prop="reserveType">
+          <el-select v-model="form.reserveType" 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="reserveName">
+          <el-input v-model="form.reserveName" placeholder="请输入物资名称" />
+        </el-form-item>
+        <el-form-item label="物资型号" prop="reserveModelNo">
+          <el-input v-model="form.reserveModelNo" placeholder="请输入物资型号" />
+        </el-form-item>
+        <el-form-item label="申请数量" prop="applyAmount">
+          <el-input v-model="form.applyAmount" placeholder="请输入申请数量" />
+        </el-form-item>
+        <el-form-item label="申请人user_code" prop="applyUserId">
+          <el-input v-model="form.applyUserId" placeholder="请输入申请人user_code" />
+        </el-form-item>
+        <el-form-item label="申请人" prop="applyUserName">
+          <el-input v-model="form.applyUserName" placeholder="请输入申请人" />
+        </el-form-item>
+        <el-form-item label="申请原因" prop="applyReason">
+          <el-input v-model="form.applyReason" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="申请日期" prop="applyDate">
+          <el-date-picker clearable size="small"
+                          v-model="form.applyDate"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          placeholder="选择申请日期">
+          </el-date-picker>
+        </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 { listReserve, getReserve, delReserve, addReserve, updateReserve, exportReserve } from "@/api/flow/reserve";
+
+export default {
+  name: "Reserve",
+  dicts: ['reserve_type'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 物资领用申请业务数据记录表格数据
+      reserveList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        title: null,
+        applyDepartment: null,
+        reserveType: null,
+        reserveName: null,
+        reserveModelNo: null,
+        applyAmount: null,
+        applyUserId: null,
+        applyUserName: null,
+        applyReason: null,
+        applyDate: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询物资领用申请业务数据记录列表 */
+    getList() {
+      this.loading = true;
+      listReserve(this.queryParams).then(response => {
+        this.reserveList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        title: null,
+        applyDepartment: null,
+        reserveType: null,
+        reserveName: null,
+        reserveModelNo: null,
+        applyAmount: null,
+        applyUserId: null,
+        applyUserName: null,
+        applyReason: null,
+        applyDate: 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
+      getReserve(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) {
+            updateReserve(this.form).then(() => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addReserve(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 delReserve(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$modal.confirm('是否确认导出所有物资领用申请业务数据记录数据项?').then(() => {
+        this.exportLoading = true;
+        return exportReserve(queryParams);
+      }).then(response => {
+        this.$download.name(response.msg);
+        this.exportLoading = false;
+      }).catch(() => {});
+    }
+  }
+};
+</script>

+ 10 - 10
willalp-ui/src/views/system/deptPost/index.vue

@@ -121,13 +121,13 @@
             @click="handleUpdate(scope.row)"
             v-hasPermi="['system:deptPost:edit']"
           >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-plus"
-            @click="handleAdd(scope.row)"
-            v-hasPermi="['system:deptPost:add']"
-          >新增</el-button>
+<!--          <el-button-->
+<!--            size="mini"-->
+<!--            type="text"-->
+<!--            icon="el-icon-plus"-->
+<!--            @click="handleAdd(scope.row)"-->
+<!--            v-hasPermi="['system:deptPost:add']"-->
+<!--          >新增</el-button>-->
           <el-button
             size="mini"
             type="text"
@@ -142,9 +142,9 @@
     <!-- 添加或修改岗位设置2对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="上级" prop="parentId">
-          <treeselect v-model="form.parentId" :options="deptPostOptions" :normalizer="normalizer" placeholder="请选择父id" />
-        </el-form-item>
+<!--        <el-form-item label="上级" prop="parentId">-->
+<!--          <treeselect v-model="form.parentId" :options="deptPostOptions" :normalizer="normalizer" placeholder="请选择父id" />-->
+<!--        </el-form-item>-->
         <el-form-item label="岗位名称" prop="postName">
           <el-input v-model="form.postName" placeholder="请输入岗位名称" />
         </el-form-item>