Browse Source

请假H5前后端分离

chenjun 1 year ago
parent
commit
8d564751f3

+ 116 - 9
client_h5/src/pages/leave/index.vue

@@ -1,3 +1,75 @@
+
+<template>
+  <van-form @submit="submitNextActivity" required="true">
+    <van-cell-group inset>
+      <van-field
+        v-model="formData.userNickname"
+        name="请假人"
+        label="请假人"
+        placeholder="请假人"
+        readonly 
+        :rules="[{ required: true, message: '未获取请假人' }]"
+      />
+      <van-field
+        v-model="formData.deptName"
+        name="所在部门"
+        label="所在部门"
+        placeholder="所在部门"
+        readonly 
+        :rules="[{ required: true, message: '未获取所在部门' }]"
+      />
+      <van-field
+        v-model="formData.createTime"
+        name="申请时间"
+        label="申请时间"
+        placeholder="申请时间"
+        readonly 
+        :rules="[{ required: true, message: '请填写申请时间' }]"
+      />
+      <van-field
+        v-model="formData.leaveType"
+        is-link
+        readonly
+        name="休假类型"
+        label="休假类型"
+        placeholder="点击选择休假类型"
+        :rules="[{ required: true, message: '请选择休假类型' }]"
+        @click="showPicker = true"
+      />
+      <van-popup v-model:show="showPicker" position="bottom">
+        <van-picker
+          :columns="columns"
+          @confirm="onConfirm"
+          @cancel="showPicker = false"
+        />
+      </van-popup>
+      <van-field
+        v-model="formData.leaveDays"
+        name="休假天数"
+        label="休假天数"
+        placeholder="休假天数"
+        readonly
+        :rules="[{ required: true, message: '请填写休假天数' }]"
+      />
+      <van-field
+        v-model="formData.leaveReason"
+        name="请假原因"
+        label="请假原因"
+        placeholder="请假原因"
+        type="textarea"
+        rows="3"
+        autosize
+        :rules="[{ required: true, message: '请填写休假原因' }]"
+      />
+    </van-cell-group>
+    <div style="margin: 16px;">
+      <van-button round block type="primary" native-type="submit">
+        转件
+      </van-button>
+    </div>
+  </van-form>
+</template>
+
 <script setup lang="ts">
 import { onMounted } from  'vue'
 import { useRoute } from 'vue-router';
@@ -6,16 +78,52 @@ import reqest from "@/utils/request";
 
 
 const route = useRoute();
-const { activityInstanceId, participantId } = route.query as {
+const formData = ref({
+  instanceId: undefined,
+  id: undefined,
+  leaveHours: undefined,
+  userNickname: undefined,
+  deptName: undefined,
+  createTime: undefined,
+  leaveNo: undefined,
+  leaveType: undefined,
+  leaveDays: undefined,
+  leaveReason: undefined,
+  leaveTimeCreateList: []
+})
+const showPicker = ref(false);
+const columns = [
+      { text: '事假', value: '11' },
+      { text: '病假', value: '12' },
+      { text: '婚假', value: '13' },
+      { text: '产假', value: '14' },
+      { text: '陪产假', value: '15' },
+      { text: '工伤', value: '16' },
+      { text: '年假', value: '17' },
+      { text: '调休', value: '18' },
+      { text: '其他', value: '20' },
+    ];
+const { activityInstanceId, participantId,flowInstanceId } = route.query as {
   activityInstanceId: string;
   participantId: string;
+  flowInstanceId: string;
 };
 const activityData: FlowDTO = {
   activityInstanceId,
   participantId,
   flowOpinion: ''
 }
+const onConfirm = ({ selectedOptions }) => {
+  formData.leaveType = selectedOptions[0]?.text;
+  showPicker.value = false;
+};
 const submitNextActivity = async () => {
+  //更新表单业务数据
+  await reqest.post("/business/Leave/update",formData)
+  //工作流转件
+  activityData.activityInstanceId='018f23b914660a07729e8f224db60203'
+  activityData.participantId='018f23b9148b0a07729e8f224db60205'
+  activityData.flowOpinion='{"id":"018f23b914970a07729e8f224db60206","opinionContent":"同意","opinionTime":"2024-04-28"}'
   const result = await getNextActivity(jsonToFormData(activityData))
   // getNextActivity(activityData).then(result => {
   //   console.log(result)
@@ -35,19 +143,18 @@ const jsonToFormData = (json: any): FormData | null => {
   return null;
 }
 
+/** 初始化表单数据 */
+const initFormData= async () => {
+  const result = await reqest.get(`/business/Leave/mobileAdd?flowInstanceId=${flowInstanceId}`)
+  formData.value = result.data
+}
+
 /** 初始化 */
 onMounted(() => {
-  activityData.activityInstanceId='018f23b914660a07729e8f224db60203'
-  activityData.participantId='018f23b9148b0a07729e8f224db60205'
-  activityData.flowOpinion='{"id":"018f23b914970a07729e8f224db60206","opinionContent":"同意","opinionTime":"2024-04-28"}'
-  submitNextActivity()
+  initFormData()
 })
 </script>
 
-<template>
-  <div class="Leave_box"></div>
-</template>
-
 <style lang="scss" scoped>
 @import "./index.scss";
 </style>

+ 12 - 1
client_h5/src/service/flow.ts

@@ -5,7 +5,9 @@ export interface FlowDTO {
     participantId: string
     flowOpinion: string
 }
-
+export interface FlowCreateDTO {
+  templateId: string
+}
 /**
  * 获取下一步活动
  * **/
@@ -13,4 +15,13 @@ export const getNextActivity = async (data: FlowDTO) => {
   return await reqest.post(`/workflow/Transfer/getNextActivity`, data,{
     headers: { 'Authorization': 'Bearer test83e06d0d-af60-4419-9437-c9a68bf1b669' }
   });
+}
+
+/**
+ * 发起流程
+ * **/
+export const createProcessByModalId = async (createData: FlowCreateDTO) => {
+  return await reqest.post(`/workflow/TProcessEngine/addMobile`, createData,{
+    headers: { 'Authorization': 'Bearer test83e06d0d-af60-4419-9437-c9a68bf1b669' }
+  });
 }

+ 3 - 0
zjugis-business/src/main/java/com/zjugis/business/converter/leave/LeaveConvert.java

@@ -1,6 +1,7 @@
 package com.zjugis.business.converter.leave;
 
 import com.zjugis.business.flow.leave.controller.vo.LeaveCreateReqVO;
+import com.zjugis.business.flow.leave.controller.vo.LeaveRespVO;
 import com.zjugis.business.flow.leave.controller.vo.LeaveUpdateReqVO;
 import com.zjugis.business.flow.leave.entity.LeaveDO;
 import org.mapstruct.Mapper;
@@ -21,5 +22,7 @@ public interface LeaveConvert {
 
     LeaveDO convert(LeaveUpdateReqVO reqVO);
 
+    LeaveRespVO convert01(LeaveDO entity);
+
     LeaveUpdateReqVO convert(LeaveDO entity);
 }

+ 9 - 0
zjugis-business/src/main/java/com/zjugis/business/flow/leave/controller/LeaveController.java

@@ -1,9 +1,13 @@
 package com.zjugis.business.flow.leave.controller;
 
+import com.zjugis.business.converter.leave.LeaveConvert;
 import com.zjugis.business.flow.leave.controller.vo.LeaveCreateReqVO;
 import com.zjugis.business.flow.leave.controller.vo.LeaveDaysReqVO;
+import com.zjugis.business.flow.leave.controller.vo.LeaveRespVO;
 import com.zjugis.business.flow.leave.controller.vo.LeaveUpdateReqVO;
 import com.zjugis.business.flow.leave.service.LeaveService;
+import com.zjugis.business.flow.travelcost.controller.vo.TravelCostOverviewVO;
+import com.zjugis.framework.common.pojo.CommonResult;
 import com.zjugis.framework.workflow.model.BaseController;
 import com.zjugis.framework.workflow.workflow.WorkFlow;
 import com.zjugis.framework.workflow.workflow.WorkFlowMobile;
@@ -48,6 +52,11 @@ public class LeaveController extends BaseController {
         return resultPage(map);
     }
 
+    @GetMapping("/mobileAdd")
+    public CommonResult<LeaveRespVO> mobileAdd(String activityTemplateId, String flowInstanceId, String userId){
+        return CommonResult.success(LeaveConvert.INSTANCE.convert01(leaveService.flowAdd(flowInstanceId, userId)));
+    }
+
     @PostMapping("/getLeaveDays")
     @Operation(summary = "获取请假天数")
     public String getLeaveDays(@Valid @RequestBody List<LeaveDaysReqVO> reqVO) {

+ 8 - 0
zjugis-business/src/main/java/com/zjugis/business/flow/leave/controller/vo/LeaveBaseVO.java

@@ -1,10 +1,13 @@
 package com.zjugis.business.flow.leave.controller.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
  * @Author 陈俊
@@ -49,4 +52,9 @@ public class LeaveBaseVO {
 
     @Schema(description = "请假原因")
     private String leaveReason;
+
+    @Schema(description = "申请时间")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
 }

+ 21 - 0
zjugis-business/src/main/java/com/zjugis/business/flow/leave/controller/vo/LeaveRespVO.java

@@ -0,0 +1,21 @@
+package com.zjugis.business.flow.leave.controller.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+/**
+ * @Author 陈俊
+ * @Date 2024/4/29 9:48
+ * @Version 1.0
+ */
+@Schema(description = "工作流程 - 请假流程 respVO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class LeaveRespVO extends LeaveBaseVO{
+
+    @Schema(description = "主键ID")
+    private String id;
+}

+ 7 - 0
zjugis-business/src/main/java/com/zjugis/business/flow/leave/service/LeaveService.java

@@ -53,4 +53,11 @@ public interface LeaveService {
      * @return
      */
     String getLeaveDays(List<LeaveDaysReqVO> reqVO);
+
+    /**
+     * 添加流程数据
+     * @param flowInstanceId
+     * @param userId
+     */
+    LeaveDO flowAdd(String flowInstanceId, String userId);
 }

+ 29 - 0
zjugis-business/src/main/java/com/zjugis/business/flow/leave/service/LeaveServiceImpl.java

@@ -222,6 +222,35 @@ public class LeaveServiceImpl implements LeaveService {
         return totalTime + "";
     }
 
+    @Override
+    public LeaveDO flowAdd(String flowInstanceId, String userId) {
+        if (StringUtils.isNotBlank(SecurityFrameworkUtils.getLoginUserId())) {
+            userId = SecurityFrameworkUtils.getLoginUserId();
+        }
+        CommonResult<IFlowInstance> flowResult = workflowClient.flowInstance(flowInstanceId);
+        if (flowResult.isSuccess()) {
+            IFlowInstance flowInstance = flowResult.getData();
+            LeaveDO entity = findByInstanceId(flowInstanceId);
+            if (Objects.isNull(entity)) {
+                entity = new LeaveDO();
+                entity.setInstanceId(flowInstanceId);
+                entity.setUserId(userId);
+                entity.setLeaveNo(flowInstance.getCode());
+                entity.setCreateTime(LocalDateTime.now());
+                entity.setFlowStatus(FlowStatusConstants.FLOW_NOT_START);
+                CommonResult<AdminUserRespDTO> result = adminUserApi.getUser(userId);
+                if (result.isSuccess()) {
+                    entity.setUserNickname(result.getData().getNickname());
+                    entity.setDeptId(result.getData().getDeptId());
+                    entity.setDeptName(result.getData().getDeptName());
+                }
+                leaveDao.insert(entity);
+            }
+            return entity;
+        }
+        return null;
+    }
+
     private Map<String, Object> createModelMap() {
         Map<String, Object> map = new HashMap<>();
         map.put("formEntity", new HashMap<>());