فهرست منبع

1.外出退费不限制天数2.入住申请增加流程列表展示3.账户余额打印支付方式展示

xiongxing 2 هفته پیش
والد
کامیت
240aeb09ff

+ 1 - 1
src/main.ts

@@ -51,7 +51,7 @@ import { Flex } from 'ant-design-vue'
 import 'ant-design-vue/dist/reset.css'
 import fetchPlugin from './config/axios/fetch';
 //版本号
-export const MAIN_VERSION = '4.4.6'
+export const MAIN_VERSION = '4.4.7'
 
 // 创建实例
 const setupAll = async () => {

+ 2 - 1
src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue

@@ -98,6 +98,7 @@ watch(
     if (value) {
       tasks.value = await TaskApi.getTaskListByProcessInstanceId(props.id)
     }
-  },{ immediate: true }
+  },
+  { immediate: true }
 )
 </script>

+ 9 - 9
src/views/elderly/apply/check-in/Check.vue

@@ -8,10 +8,12 @@
     noPaddingEL="check-in-check"
     @close="handleClosed"
   >
-    <ProcessForm ref="processFormRef" :toggleType="true"/>
+    <ProcessForm ref="processFormRef" :toggleType="true" />
     <template #footer>
       <el-button @click="handleClosed">关闭</el-button>
-      <el-button v-loading="formLoading" type="primary" @click="submitForm" v-if="!isDetail">提交审核</el-button>
+      <el-button v-loading="formLoading" type="primary" @click="submitForm" v-if="!isDetail"
+        >提交审核</el-button
+      >
     </template>
   </Dialog>
 </template>
@@ -26,7 +28,7 @@ const processFormRef = ref()
 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
 const isDetail = ref(false)
 /** 打开弹窗 */
-const open = async (row, detail=false) => {
+const open = async (row, detail = false) => {
   dialogVisible.value = true
   isDetail.value = detail
   nextTick(() => {
@@ -123,14 +125,13 @@ const validateForm = (dataForm: any): boolean => {
 /** 提交表单 */
 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
 const submitForm = async () => {
-
-  if(formLoading.value){
+  if (formLoading.value) {
     return
   }
   formLoading.value = true
   try {
     let { valid, dataForm } = await processFormRef.value.submitForm()
-    if(!valid){
+    if (!valid) {
       return
     }
 
@@ -147,10 +148,9 @@ const submitForm = async () => {
       emit('success')
     }
   } finally {
-    setTimeout(()=>{
+    setTimeout(() => {
       formLoading.value = false
-    },500)
+    }, 500)
   }
-
 }
 </script>

+ 7 - 4
src/views/elderly/apply/check-in/ProcessForm.vue

@@ -707,7 +707,7 @@
       </el-form-item>
     </div>
   </el-form>
-  <ProcessInstanceTask ref="processRef" />
+  <ProcessInstanceTask ref="processRef" v-if="isDetail" />
   <SyntheticAbilityDetail ref="detailRef" />
 </template>
 <script setup lang="ts">
@@ -946,6 +946,9 @@ const init = async (row, detail = false, status) => {
   getOverheadByType(7)
   getTreeData()
   //根据身份证查询床位 (定金预定的情况)
+  if (detail) {
+    processRef.value?.open(dataForm.value.elderId, dataForm.value.processInstanceId)
+  }
 }
 
 const changeOutTime = () => {
@@ -1599,9 +1602,9 @@ const disabledDate = (time: Date, type) => {
 
 // 打开入住审批流程
 const processRef = ref()
-const handleOpenResult = () => {
-  processRef.value.open(dataForm.value.elderId)
-}
+// const handleOpenResult = () => {
+//   processRef.value.open(dataForm.value.elderId, dataForm.value.processInstanceId)
+// }
 
 // 校验
 const handleValidate = (item) => {

+ 10 - 127
src/views/elderly/apply/check-in/ProcessInstanceTask.vue

@@ -1,141 +1,24 @@
 <template>
-  <Dialog v-model="dialogVisible" title="审批结果" class="check-in-process" width="60%">
-    <!-- 审批记录 -->
-    <ProcessInstanceTaskList
-      :loading="tasksLoad"
-      :process-instance="processInstance"
-      :tasks="tasks"
-      :statusType="statusType"
-      @refresh="getTaskList"
-    />
-    <template #footer>
-      <el-button @click="handleClosed">关闭</el-button>
-    </template>
-  </Dialog>
+  <!-- 审批记录 -->
+  <ProcessInstanceTaskList :loading="processInstanceLoading" :id="processInstanceId" />
 </template>
 <script setup lang="ts">
-import type { ApiAttrs } from '@form-create/element-ui/types/config'
-import * as TaskApi from '@/api/bpm/task'
-import * as ProcessInstanceApi from '@/api/bpm/processInstance'
-import { setConfAndFields2 } from '@/utils/formCreate'
 import ProcessInstanceTaskList from '@/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue'
 import { findBpmRecord } from '@/api/elderly/elder/elderly-Info'
 defineOptions({ name: 'ProcessInstanceTask' })
-const message = useMessage() // 消息弹窗
-const dialogVisible = ref(false) // 弹窗
-const formRef = ref() // 表单 Ref
-const tasksLoad = ref(true) // 任务的加载中
-const tasks = ref<any[]>([]) // 任务列表
-const runningTasks = ref<any[]>([]) // 运行中的任务
-const auditForms = ref<any[]>([]) // 审批任务的表单
-const approveForms = ref<any[]>([]) // 审批通过时,额外的补充信息
-const approveFormFApis = ref<ApiAttrs[]>([]) // approveForms 的 fAPi
-const processInstance = ref<any>({}) // 流程实例
-const processInstanceLoading = ref(false) // 流程实例的加载中
 
-/** 加载任务列表 */
-const getTaskList = async (id) => {
-  runningTasks.value = []
-  auditForms.value = []
-  approveForms.value = []
-  approveFormFApis.value = []
-  try {
-    // 获得未取消的任务
-    tasksLoad.value = true
-    const data = await TaskApi.getTaskListByProcessInstanceId(id)
-    tasks.value = []
-    // 1.1 移除已取消的审批
-    data.forEach((task) => {
-      if (task.status !== 4) {
-        tasks.value.push(task)
-      }
-    })
-    // 1.2 排序,将未完成的排在前面,已完成的排在后面;
-    tasks.value.sort((a, b) => {
-      // 有已完成的情况,按照完成时间倒序
-      if (a.endTime && b.endTime) {
-        return b.endTime - a.endTime
-      } else if (a.endTime) {
-        return 1
-      } else if (b.endTime) {
-        return -1
-        // 都是未完成,按照创建时间倒序
-      } else {
-        return b.createTime - a.createTime
-      }
-    })
-
-    // 获得需要自己审批的任务
-    loadRunningTask(tasks.value)
-  } finally {
-    tasksLoad.value = false
-  }
-}
-
-/**
- * 设置 runningTasks 中的任务
- */
-const loadRunningTask = (tasks) => {
-  tasks.forEach((task) => {
-    // if (!isEmpty(task.children)) {
-    //   loadRunningTask(task.children)
-    // }
-    // // 2.1 只有待处理才需要
-    // if (task.status !== 1 && task.status !== 6) {
-    //   return
-    // }
-    // // 2.2 自己不是处理人
-    // if (!task.assigneeUser || task.assigneeUser.id !== userId) {
-    //   return
-    // }
-    // 2.3 添加到处理任务
-    runningTasks.value.push({ ...task })
-    auditForms.value.push({
-      reason: '',
-      copyUserIds: []
-    })
-
-    // 2.4 处理 approve 表单
-    if (task.formId && task.formConf) {
-      const approveForm = {}
-      setConfAndFields2(approveForm, task.formConf, task.formFields, task.formVariable)
-      approveForms.value.push(approveForm)
-    } else {
-      approveForms.value.push({}) // 占位,避免为空
-    }
-  })
-}
-
-const getProcessInstance = async (id) => {
-  try {
-    processInstanceLoading.value = true
-    const data = await ProcessInstanceApi.getProcessInstance(id)
-    if (!data) {
-      message.error('查询不到流程信息!')
-      return
-    }
-    processInstance.value = data
-  } finally {
-    processInstanceLoading.value = false
-  }
-}
+const processInstanceId = ref('')
+const processInstanceLoading = ref(false)
 
 /** 打开弹窗 */
-const statusType = ref('')
-const open = async (elderId) => {
+const open = async (elderId, id) => {
   const res = await findBpmRecord(elderId)
   if (res) {
-    getTaskList(res.processInstanceId)
-    getProcessInstance(res.processInstanceId)
-    statusType.value = res.status
+    processInstanceId.value = String(res.processInstanceId || id)
+    processInstanceLoading.value = false
+    await nextTick()
+    processInstanceLoading.value = true
   }
-  dialogVisible.value = true
-}
-defineExpose({ open }) // 提供 open 方法,用于打开弹窗
-
-// 关闭表单
-const handleClosed = () => {
-  formRef.value?.resetFields()
-  dialogVisible.value = false
 }
+defineExpose({ open })
 </script>

+ 49 - 35
src/views/elderly/fee/deposit/Print.vue

@@ -30,7 +30,15 @@
                 : getDictLabel(DICT_TYPE.BALANCE_TYPE, item.type)
             }}</td
           >
-          <td>¥{{ pageType == 2 ? formatNum(item.changeAmount) : (item.type == '1' ? formatNum(item.amount) : formatNum(-item.amount)) }}</td>
+          <td
+            >¥{{
+              pageType == 2
+                ? formatNum(item.changeAmount)
+                : item.type == '1'
+                  ? formatNum(item.amount)
+                  : formatNum(-item.amount)
+            }}</td
+          >
           <td>{{ item.remarks }}</td>
         </tr>
         <tr>
@@ -48,7 +56,7 @@
           <td colspan="2" align="center">支付方式</td>
           <td colspan="2">
             <span>{{ payText }}</span>
-            <span class="fr">¥{{ total.toFixed(2) }}</span>
+            <!-- <span class="fr">¥{{ total.toFixed(2) }}</span> -->
           </td>
         </tr>
       </table>
@@ -89,7 +97,7 @@ interface stateType {
       remarks: string
       type: string
       amount: string
-      payType: number,
+      payType: number
       itemId: string
     }[]
   }
@@ -121,10 +129,11 @@ const open = async (elderId, id, type = 1, single = true) => {
     pageTitle.value = '押金'
     const res = await getDepositDetail(elderId)
     getList()
-    if (single) { // 详情中的打印
+    if (single) {
+      // 详情中的打印
       let item = res.records.find((item) => item.id == id)
       // 缴纳为正,其余为负
-      total.value += item.type == 1 ? item.amount : (-item.amount)
+      total.value += item.type == 1 ? item.amount : -item.amount
       dataForm.value = {
         ...res,
         list: [item],
@@ -132,14 +141,15 @@ const open = async (elderId, id, type = 1, single = true) => {
         createdBy: item.createdBy,
         createdTime: item.createdTime
       }
-    } else { // 列表的打印
+    } else {
+      // 列表的打印
       dataForm.value = {
         ...res,
         list: res.records,
         orderNumber: ''
       }
       res.records.map((item) => {
-        total.value += item.type == 1 ? item.amount : (-item.amount)
+        total.value += item.type == 1 ? item.amount : -item.amount
       })
     }
   } else if (type == 2) {
@@ -148,7 +158,7 @@ const open = async (elderId, id, type = 1, single = true) => {
     // 如果有id就过滤只显示那一条的数据
     if (id) {
       let item = res.balanceRecord.find((item) => item.id == id)
-      total.value += item.type == 1 ? item.changeAmount : (-item.changeAmount)
+      total.value += item.type == 1 ? item.changeAmount : -item.changeAmount
       dataForm.value = {
         ...res,
         list: [item],
@@ -158,33 +168,37 @@ const open = async (elderId, id, type = 1, single = true) => {
     }
   }
 
-  if(type == 1){
-    if (single) {
-      payText.value = getDictLabel(DICT_TYPE.BILL_PAY_TYPE, dataForm.value.list[0].type)
-    } else {
-      // 变成对象
-      let dataInfo = {}
-      dataForm.value.list.forEach((item, index) => {
-        let { payType } = item
-        if (!dataInfo[payType]) {
-          dataInfo[payType] = {
-            payType,
-            child: []
-          }
-        }
-        dataInfo[payType].child.push(item)
-      })
-      let list = Object.values(dataInfo) // list 转换成功的数据
-      list.map((l) => {
-        payText.value += getDictLabel(DICT_TYPE.BILL_PAY_TYPE, l.payType) + ':'
-        let num = 0
-        l.child.map((c) => {
-          num += c.type == 1 ? c.amount : (-c.amount)
-        })
-        payText.value += num + ';'
-      })
-    }
-  }
+  // if (type == 1) {
+  //   if (single) {
+  //     payText.value = getDictLabel(DICT_TYPE.BILL_PAY_TYPE, dataForm.value.list[0].type)
+  //   } else {
+  //     // 变成对象
+  //     let dataInfo = {}
+  //     dataForm.value.list.forEach((item, index) => {
+  //       let { payType } = item
+  //       if (!dataInfo[payType]) {
+  //         dataInfo[payType] = {
+  //           payType,
+  //           child: []
+  //         }
+  //       }
+  //       dataInfo[payType].child.push(item)
+  //     })
+  //     let list = Object.values(dataInfo) // list 转换成功的数据
+  //     list.map((l) => {
+  //       payText.value += getDictLabel(DICT_TYPE.BILL_PAY_TYPE, l.payType) + ':'
+  //       let num = 0
+  //       l.child.map((c) => {
+  //         num += c.type == 1 ? c.amount : -c.amount
+  //       })
+  //       payText.value += num + ';'
+  //     })
+  //   }
+  // }
+  const payTypes = [...new Set(dataForm.value.list.map((item) => item.payType))]
+  payText.value = payTypes
+    .map((payType) => getDictLabel(DICT_TYPE.BILL_PAY_TYPE, payType))
+    .join('、')
 }
 defineExpose({ open }) // 提供 open 方法,用于打开弹窗
 

+ 55 - 32
src/views/elderly/fee/out-refund/Form.vue

@@ -78,22 +78,22 @@
 
       <template v-if="dataForm.isRefund == '1'">
         <div class="wrap">
-          <div style="display: flex;align-items: center;flex-direction: row">
+          <div style="display: flex; align-items: center; flex-direction: row">
             <div style="font-weight: bold">退费条件</div>
             <el-radio-group v-model="dataForm.configType" style="margin-left: 38px">
               <el-radio :value="0" size="large">统一退费条件</el-radio>
               <el-radio :value="1" size="large">单独退费条件</el-radio>
             </el-radio-group>
           </div>
-          <div class="desc" v-show="dataForm.configType==0">
+          <div class="desc" v-show="dataForm.configType == 0">
             外出超过
             <TgInputNumber class="w50 ml2 mr2" v-model="dataForm.maximumDays" />天满足退费条件
             其中自外出后第
             <TgInputNumber
               class="w50 ml2 mr2"
               v-model="dataForm.minimumDays"
-              :max="Number(dataForm.maximumDays)"
             />天,开始退费,并且返院当日
+            <!-- :max="Number(dataForm.maximumDays)" -->
             <TgRadio
               class="inline ml5"
               v-model="dataForm.isSameDayRefund"
@@ -107,7 +107,7 @@
               >
             </TgRadio>
           </div>
-          <div style="height: 20px;color: transparent" v-show="dataForm.configType!=0">--</div>
+          <div style="height: 20px; color: transparent" v-show="dataForm.configType != 0">--</div>
         </div>
 
         <div class="wrap">
@@ -178,11 +178,16 @@
                   style="max-width: 300px"
                   placeholder="输入金额"
                   type="number"
-                  :disabled="(scope.row.isCustom==0 || isDetail)"
+                  :disabled="scope.row.isCustom == 0 || isDetail"
                   class="input-with-select"
                 >
                   <template #prepend>
-                    <el-select v-model="scope.row.isCustom" :disabled="isDetail" placeholder="请选择" style="width: 85px">
+                    <el-select
+                      v-model="scope.row.isCustom"
+                      :disabled="isDetail"
+                      placeholder="请选择"
+                      style="width: 85px"
+                    >
                       <el-option label="启用" :value="1" />
                       <el-option label="禁用" :value="0" />
                     </el-select>
@@ -211,23 +216,39 @@
             <el-table-column prop="amount" label="金额" width="200">
               <template #default="scope">
                 <span v-if="scope.row.type == 2"
-                  ><TgInputNumber  v-model="scope.row.proportion" class="w120" />%</span
+                  ><TgInputNumber v-model="scope.row.proportion" class="w120" />%</span
+                >
+                <span v-else>
+                  <TgInputNumber
+                    :disabled="scope.row.type == 3"
+                    v-model="scope.row.amount"
+                    class="w120"
+                  />
+                  元</span
                 >
-                <span v-else> <TgInputNumber :disabled="scope.row.type==3" v-model="scope.row.amount" class="w120" /> 元</span>
               </template>
             </el-table-column>
-            <el-table-column v-if="dataForm.configType==1" prop="amount2" label="退费条件" width="900">
+            <el-table-column
+              v-if="dataForm.configType == 1"
+              prop="amount2"
+              label="退费条件"
+              width="900"
+            >
               <template #default="scope">
-                <div style="display: flex;flex-direction: row;align-items: center;">
-                  <div style="height: 60px;align-items: center;display: flex;flex-direction: row">
+                <div style="display: flex; flex-direction: row; align-items: center">
+                  <div
+                    style="height: 60px; align-items: center; display: flex; flex-direction: row"
+                  >
                     外出超过
-                    <TgInputNumber  class="w50 ml2 mr2" v-model="scope.row.maximumDays" />天满足退费条件
-                    其中自外出后第
+                    <TgInputNumber
+                      class="w50 ml2 mr2"
+                      v-model="scope.row.maximumDays"
+                    />天满足退费条件 其中自外出后第
                     <TgInputNumber
                       class="w50 ml2 mr2"
                       v-model="scope.row.minimumDays"
-                      :max="Number(scope.row.maximumDays)"
                     />天,开始退费,并且返院当日
+                    <!-- :max="Number(scope.row.maximumDays)" -->
                     <TgRadio
                       class="inline ml5"
                       v-model="scope.row.isSameDayRefund"
@@ -237,7 +258,7 @@
                         v-for="(item, index) in getIntDictOptions(DICT_TYPE.REFUND_TERMS_TYPE)"
                         :key="index"
                         :value="item.value"
-                      >{{ item.label }}</el-radio
+                        >{{ item.label }}</el-radio
                       >
                     </TgRadio>
                   </div>
@@ -248,20 +269,22 @@
         </div>
       </template>
 
-<!--      <div class="content">-->
-<!--        <div class="left">-->
-<!--          <img :src="counter" alt="" />-->
-<!--          <div class="column">-->
-<!--            <span class="text">外出退费计算器</span>-->
-<!--            <span>输入外出起止日期,测试一下退费金额吧。</span>-->
-<!--          </div>-->
-<!--        </div>-->
-<!--        <el-button type="primary" round @click="handleTest">点击测试</el-button>-->
-<!--      </div>-->
+      <!--      <div class="content">-->
+      <!--        <div class="left">-->
+      <!--          <img :src="counter" alt="" />-->
+      <!--          <div class="column">-->
+      <!--            <span class="text">外出退费计算器</span>-->
+      <!--            <span>输入外出起止日期,测试一下退费金额吧。</span>-->
+      <!--          </div>-->
+      <!--        </div>-->
+      <!--        <el-button type="primary" round @click="handleTest">点击测试</el-button>-->
+      <!--      </div>-->
     </el-form>
     <template #footer>
       <el-button @click="handleClosed">关闭</el-button>
-      <el-button v-loading="formLoading" type="primary" @click="submitForm" v-if="!isDetail">确定</el-button>
+      <el-button v-loading="formLoading" type="primary" @click="submitForm" v-if="!isDetail"
+        >确定</el-button
+      >
     </template>
     <Counter ref="counterRef" />
   </Dialog>
@@ -308,7 +331,7 @@ const state = reactive<OutRefundFormType>({
     maximumDays: undefined,
     minimumDays: undefined,
     items: [],
-    tenantId: undefined,
+    tenantId: undefined
   },
   dataRule: {
     // 表单规则
@@ -335,7 +358,7 @@ const open = async (tenantId, id, detail) => {
       const res = await getOutboundRefundDetail(id)
       dataForm.value = res
       dataForm.value.items.map(async (item) => {
-        getItemList(item, false,false)
+        getItemList(item, false, false)
       })
     } finally {
     }
@@ -357,7 +380,7 @@ const submitForm = async () => {
       if (item.itemId == m.itemId && index != i) {
         result = true
       }
-      if(item.isCustom==1 && (item.customAmount=='')){
+      if (item.isCustom == 1 && item.customAmount == '') {
         result = true
       }
     })
@@ -494,10 +517,10 @@ const getItemList = async (row, flag = true, flag2 = false) => {
       if (row?.__isNew) {
         row.__isNew = false
       }
-      const sameCategoryRows = dataForm.value.items.filter(item => item.categoryId === row.categoryId)
-      const existingItemIdSet = new Set(
-        sameCategoryRows.map(item => item.itemId).filter(Boolean)
+      const sameCategoryRows = dataForm.value.items.filter(
+        (item) => item.categoryId === row.categoryId
       )
+      const existingItemIdSet = new Set(sameCategoryRows.map((item) => item.itemId).filter(Boolean))
 
       // 当前行如果还没选子项:优先回填“缺失的子项”
       if (!row.itemId) {