Bladeren bron

1、测试权限并加入数据权限
2、加入公司可指派数量
3、测试修改基础模块及指派人员之前的功能
4、加入财务管理

qinyan 5 maanden geleden
bovenliggende
commit
cfbfe8f6ec

+ 4 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/care/CareApplicationsController.java

@@ -5,6 +5,7 @@ import javax.servlet.http.HttpServletResponse;
 
 import com.ruoyi.care.domain.CareApplications;
 import com.ruoyi.care.service.ICareApplicationsService;
+import com.ruoyi.common.annotation.DataScope;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -39,6 +40,7 @@ public class CareApplicationsController extends BaseController
      * 查询护理申请列表
      */
     @PreAuthorize("@ss.hasPermi('care:applications:list')")
+    @DataScope(deptAlias = "u", userAlias = "u")
     @GetMapping("/list")
     public TableDataInfo list(CareApplications careApplications)
     {
@@ -78,6 +80,7 @@ public class CareApplicationsController extends BaseController
     @PostMapping
     public AjaxResult add(@RequestBody CareApplications careApplications)
     {
+        careApplications.setCreateBy(getUserId().toString());
         return toAjax(careApplicationsService.insertCareApplications(careApplications));
     }
 
@@ -89,6 +92,7 @@ public class CareApplicationsController extends BaseController
     @PutMapping
     public AjaxResult edit(@RequestBody CareApplications careApplications)
     {
+        careApplications.setUpdateBy(getUserId().toString());
         return toAjax(careApplicationsService.updateCareApplications(careApplications));
     }
 
@@ -106,7 +110,6 @@ public class CareApplicationsController extends BaseController
     /**
      * 修改护理申请
      */
-    @PreAuthorize("@ss.hasPermi('care:applications:assign')")
     @Log(title = "护理指派公司", businessType = BusinessType.UPDATE)
     @PostMapping("/assign")
     public AjaxResult assign(@RequestBody CareApplications careApplications)

+ 13 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/care/CareCompaniesController.java

@@ -50,7 +50,6 @@ public class CareCompaniesController extends BaseController
         List<CareCompanies> list = careCompaniesService.selectCareCompaniesList(careCompanies);
         return getDataTable(list);
     }
-
     /**
      * 导出护理公司列表
      */
@@ -130,4 +129,17 @@ public class CareCompaniesController extends BaseController
         List<CareCompanies> list = careCompaniesService.selectCareCompaniesList(careCompanies);
         return list;
     }
+
+    /**
+     * 查询护理公司列表
+     */
+    @PreAuthorize("@ss.hasPermi('care:companies:dispatch')")
+    @GetMapping("/dispatch")
+    public TableDataInfo dispatch(CareCompanies careCompanies)
+    {
+        startPage();
+        List<CareCompanies> list = careCompaniesService.selectCareCompaniesList(careCompanies);
+        return getDataTable(list);
+    }
+
 }

+ 7 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/care/CarePersonsController.java

@@ -2,6 +2,8 @@ package com.ruoyi.web.controller.care;
 
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.common.annotation.DataScope;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -38,6 +40,7 @@ public class CarePersonsController extends BaseController
      * 查询特困人员列表
      */
     @PreAuthorize("@ss.hasPermi('care:persons:list')")
+    @DataScope(deptAlias = "u", userAlias = "u")
     @GetMapping("/list")
     public TableDataInfo list(CarePersons carePersons)
     {
@@ -77,6 +80,7 @@ public class CarePersonsController extends BaseController
     @PostMapping
     public AjaxResult add(@RequestBody CarePersons carePersons)
     {
+        carePersons.setCreateBy(getUserId().toString());
         return toAjax(carePersonsService.insertCarePersons(carePersons));
     }
 
@@ -88,6 +92,7 @@ public class CarePersonsController extends BaseController
     @PutMapping
     public AjaxResult edit(@RequestBody CarePersons carePersons)
     {
+        carePersons.setUpdateBy(getUserId().toString());
         return toAjax(carePersonsService.updateCarePersons(carePersons));
     }
 
@@ -106,6 +111,8 @@ public class CarePersonsController extends BaseController
      * 查询所有特困人员列表
      */
     @GetMapping("/listAll")
+    @PreAuthorize("@ss.hasPermi('care:persons:listAll')")
+    @DataScope(deptAlias = "u", userAlias = "u")
     public List<CarePersons> listAll(CarePersons carePersons)
     {
         List<CarePersons> list = carePersonsService.selectCarePersonsList(carePersons);

+ 2 - 2
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java

@@ -45,8 +45,8 @@ public class RyTask {
     }
 
     public void ryNoParams() {
-        this.syncTender();
-        this.syncTenderLog();
+        //this.syncTender();
+        //this.syncTenderLog();
     }
 
 

+ 10 - 0
ruoyi-system/src/main/java/com/ruoyi/care/domain/CareCompanies.java

@@ -48,6 +48,16 @@ public class CareCompanies extends BaseEntity
 
     /** 登录名 */
     private String loginName;
+    //当天还可派单数
+    private String count;
+
+    public String getCount() {
+        return count;
+    }
+
+    public void setCount(String count) {
+        this.count = count;
+    }
 
     public String getLoginName() {
         return loginName;

+ 19 - 0
ruoyi-system/src/main/java/com/ruoyi/care/service/impl/CareNursesServiceImpl.java

@@ -3,6 +3,7 @@ package com.ruoyi.care.service.impl;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.ruoyi.care.domain.CareCompanies;
 import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.utils.DateUtils;
@@ -143,8 +144,19 @@ public class CareNursesServiceImpl implements ICareNursesService
      * @return 结果
      */
     @Override
+    @Transactional
     public int deleteCareNursesByNurseIds(Long[] nurseIds)
     {
+        Long[] userIds=new Long[nurseIds.length];
+        for (int i = 0; i < nurseIds.length; i++) {
+            Long nurseId = nurseIds[i];
+            CareNurses careNurses=careNursesMapper.selectCareNursesByNurseId(nurseId);
+            userIds[i]=careNurses.getUserId();
+        }
+        // 删除用户与角色关联
+        userRoleMapper.deleteUserRole(userIds);
+        // 删除用户
+        userMapper.deleteUserByIds(userIds);
         return careNursesMapper.deleteCareNursesByNurseIds(nurseIds);
     }
 
@@ -155,8 +167,15 @@ public class CareNursesServiceImpl implements ICareNursesService
      * @return 结果
      */
     @Override
+    @Transactional
     public int deleteCareNursesByNurseId(Long nurseId)
     {
+        CareNurses careNurses=careNursesMapper.selectCareNursesByNurseId(nurseId);
+        // 删除用户与角色关联
+        userRoleMapper.deleteUserRoleByUserId(careNurses.getUserId());
+        // 删除用户
+        userMapper.deleteUserById(careNurses.getUserId());
+
         return careNursesMapper.deleteCareNursesByNurseId(nurseId);
     }
 }

+ 31 - 0
ruoyi-system/src/main/java/com/ruoyi/care/service/impl/CarePersonsServiceImpl.java

@@ -1,12 +1,19 @@
 package com.ruoyi.care.service.impl;
 
 import java.util.List;
+
+import com.ruoyi.care.domain.CareCompanies;
+import com.ruoyi.care.domain.CareNurses;
 import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.system.mapper.SysUserMapper;
+import com.ruoyi.system.mapper.SysUserPostMapper;
+import com.ruoyi.system.mapper.SysUserRoleMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.care.mapper.CarePersonsMapper;
 import com.ruoyi.care.domain.CarePersons;
 import com.ruoyi.care.service.ICarePersonsService;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 特困人员Service业务层处理
@@ -19,7 +26,13 @@ public class CarePersonsServiceImpl implements ICarePersonsService
 {
     @Autowired
     private CarePersonsMapper carePersonsMapper;
+    @Autowired
+    private SysUserMapper userMapper;
+    @Autowired
+    private SysUserRoleMapper userRoleMapper;
 
+    @Autowired
+    private SysUserPostMapper userPostMapper;
     /**
      * 查询特困人员
      * 
@@ -77,8 +90,19 @@ public class CarePersonsServiceImpl implements ICarePersonsService
      * @return 结果
      */
     @Override
+    @Transactional
     public int deleteCarePersonsByPersonIds(Long[] personIds)
     {
+        Long[] userIds=new Long[personIds.length];
+        for (int i = 0; i < personIds.length; i++){
+            CarePersons carePersons = selectCarePersonsByPersonId(personIds[i]);
+            userIds[i]=carePersons.getUserId();
+        }
+        // 删除用户与角色关联
+        userRoleMapper.deleteUserRole(userIds);
+        // 删除用户
+        userMapper.deleteUserByIds(userIds);
+
         return carePersonsMapper.deleteCarePersonsByPersonIds(personIds);
     }
 
@@ -89,8 +113,15 @@ public class CarePersonsServiceImpl implements ICarePersonsService
      * @return 结果
      */
     @Override
+    @Transactional
     public int deleteCarePersonsByPersonId(Long personId)
     {
+        CarePersons carePersons=selectCarePersonsByPersonId(personId);
+        // 删除用户与角色关联
+        userRoleMapper.deleteUserRoleByUserId(carePersons.getUserId());
+        // 删除用户
+        userMapper.deleteUserById(carePersons.getUserId());
+
         return carePersonsMapper.deleteCarePersonsByPersonId(personId);
     }
 }

+ 2 - 0
ruoyi-system/src/main/resources/mapper/care/CareApplicationsMapper.xml

@@ -64,6 +64,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 LEFT JOIN care_assignments s on a.apply_id=s.apply_id
                 LEFT JOIN care_nurses n on n.nurse_id=s.apply_id
                 LEFT JOIN care_hospital h on h.hospital_id=s.company_id
+                LEFT JOIN sys_user u on u.user_id=a.create_by
     </sql>
 
     <select id="selectCareApplicationsList" parameterType="CareApplications" resultMap="CareApplicationsResult">
@@ -81,6 +82,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="dealStatus != null  and dealStatus != ''"> and a.deal_status = #{dealStatus}</if>
             <if test="payStatus != null  and payStatus != ''"> and a.pay_status = #{payStatus}</if>
             <if test="auditReason != null  and auditReason != ''"> and a.audit_reason = #{auditReason}</if>
+            <if test="params.dataScope != null and params.dataScope !=''"> ${params.dataScope}</if>
         </where>
     </select>
     

+ 15 - 2
ruoyi-system/src/main/resources/mapper/care/CareCompaniesMapper.xml

@@ -21,6 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateBy"    column="update_by"    />
         <result property="updateTime"    column="update_time"    />
         <result property="remark"    column="remark"    />
+        <result property="count" column="count"/>
     </resultMap>
 
     <sql id="selectCareCompaniesVo">
@@ -44,10 +45,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         c.update_by,
         c.update_time,
         c.remark,
-        u.user_name login_name
+        u.user_name login_name,
+        (c.dispatch_person_number-COALESCE(d.count, 0)) count
         FROM
         care_companies c
-        LEFT JOIN sys_user u ON u.user_id=c.user_id
+        LEFT JOIN sys_user u ON u.user_id = c.user_id
+        LEFT JOIN (
+        SELECT
+        a.company_id,
+        COUNT(*) AS count
+        FROM
+        care_assignments a
+        WHERE
+        DATE( a.create_time ) = CURDATE()
+        GROUP BY
+        a.company_id
+        ) d ON c.company_id = d.company_id
         <where>
             <if test="1==1"> and c.del_flag = '0'</if>
             <if test="name != null  and name != ''"> and c.name like concat('%', #{name}, '%')</if>

+ 41 - 16
ruoyi-system/src/main/resources/mapper/care/CarePersonsMapper.xml

@@ -29,32 +29,57 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectCarePersonsVo">
-        select person_id, name, date_of_birth, gender, id_number, address, phone_number, emergency_contact, emergency_phone, health_status, medical_conditions, disability, registered_date, user_id, del_flag, create_by, create_time, update_by, update_time, remark,age from care_persons
+        SELECT
+            c.person_id,
+            c.NAME,
+            c.date_of_birth,
+            c.gender,
+            c.id_number,
+            c.address,
+            c.phone_number,
+            c.emergency_contact,
+            c.emergency_phone,
+            c.health_status,
+            c.medical_conditions,
+            c.disability,
+            c.registered_date,
+            c.user_id,
+            c.del_flag,
+            c.create_by,
+            c.create_time,
+            c.update_by,
+            c.update_time,
+            c.remark,
+            c.age
+        FROM
+            care_persons c
+         LEFT JOIN sys_user u on u.user_id=c.create_by
     </sql>
 
     <select id="selectCarePersonsList" parameterType="CarePersons" resultMap="CarePersonsResult">
         <include refid="selectCarePersonsVo"/>
         <where>  
-            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
-            <if test="dateOfBirth != null  and dateOfBirth != ''"> and date_of_birth = #{dateOfBirth}</if>
-            <if test="gender != null  and gender != ''"> and gender = #{gender}</if>
-            <if test="idNumber != null  and idNumber != ''"> and id_number = #{idNumber}</if>
-            <if test="address != null  and address != ''"> and address = #{address}</if>
-            <if test="phoneNumber != null  and phoneNumber != ''"> and phone_number = #{phoneNumber}</if>
-            <if test="emergencyContact != null  and emergencyContact != ''"> and emergency_contact = #{emergencyContact}</if>
-            <if test="emergencyPhone != null  and emergencyPhone != ''"> and emergency_phone = #{emergencyPhone}</if>
-            <if test="healthStatus != null  and healthStatus != ''"> and health_status = #{healthStatus}</if>
-            <if test="medicalConditions != null  and medicalConditions != ''"> and medical_conditions = #{medicalConditions}</if>
-            <if test="disability != null  and disability != ''"> and disability = #{disability}</if>
-            <if test="registeredDate != null  and registeredDate != ''"> and registered_date = #{registeredDate}</if>
-            <if test="userId != null "> and user_id = #{userId}</if>
-            <if test="age != null "> and age = #{age}</if>
+            <if test="name != null  and name != ''"> and c.name like concat('%', #{name}, '%')</if>
+            <if test="dateOfBirth != null  and dateOfBirth != ''"> and c.date_of_birth = #{dateOfBirth}</if>
+            <if test="gender != null  and gender != ''"> and c.gender = #{gender}</if>
+            <if test="idNumber != null  and idNumber != ''"> and c.id_number = #{idNumber}</if>
+            <if test="address != null  and address != ''"> and c.address = #{address}</if>
+            <if test="phoneNumber != null  and phoneNumber != ''"> and c.phone_number = #{phoneNumber}</if>
+            <if test="emergencyContact != null  and emergencyContact != ''"> and c.emergency_contact = #{emergencyContact}</if>
+            <if test="emergencyPhone != null  and emergencyPhone != ''"> and c.emergency_phone = #{emergencyPhone}</if>
+            <if test="healthStatus != null  and healthStatus != ''"> and c.health_status = #{healthStatus}</if>
+            <if test="medicalConditions != null  and medicalConditions != ''"> and c.medical_conditions = #{medicalConditions}</if>
+            <if test="disability != null  and disability != ''"> and c.disability = #{disability}</if>
+            <if test="registeredDate != null  and registeredDate != ''"> and c.registered_date = #{registeredDate}</if>
+            <if test="userId != null "> and c.user_id = #{userId}</if>
+            <if test="age != null "> and c.age = #{age}</if>
+            <if test="params.dataScope != null and params.dataScope !=''"> ${params.dataScope}</if>
         </where>
     </select>
     
     <select id="selectCarePersonsByPersonId" parameterType="Long" resultMap="CarePersonsResult">
         <include refid="selectCarePersonsVo"/>
-        where person_id = #{personId}
+        where c.person_id = #{personId}
     </select>
 
     <insert id="insertCarePersons" parameterType="CarePersons" useGeneratedKeys="true" keyProperty="personId">

+ 9 - 1
ruoyi-vue/src/api/care/companies.js

@@ -48,4 +48,12 @@ export function resetPassword(userId) {
     url: '/care/companies/resetPassword/' + userId,
     method: 'put'
   })
-}
+}
+// 查询护理公司统计列表
+export function dispatchCompanies(query) {
+  return request({
+    url: '/care/companies/dispatch',
+    method: 'get',
+    params: query
+  })
+}

+ 127 - 14
ruoyi-vue/src/views/care/applications/index.vue

@@ -144,9 +144,14 @@
       <el-table-column label="备注" align="center" prop="remark" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="158px">
         <template #default="scope">
-          <el-button link type="primary" icon="Check" @click="handleCheck(scope.row)" v-hasPermi="['care:applications:check']">送审</el-button>
-          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['care:applications:edit']">修改</el-button>
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['care:applications:remove']">删除</el-button>
+          <div v-if="scope.row.status == 'no_check' || scope.row.status == 'disagree'">
+            <el-button link type="primary" icon="Check" @click="handleCheck(scope.row)" v-hasPermi="['care:applications:check']">送审</el-button>
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['care:applications:edit']">修改</el-button>
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['care:applications:remove']">删除</el-button>
+          </div>
+          <div v-else>
+            <el-button link type="success" icon="View" @click="handleView(scope.row)" v-hasPermi="['care:applications:edit']">查看</el-button>
+          </div>
         </template>
       </el-table-column>
     </el-table>
@@ -163,13 +168,21 @@
     <el-dialog :title="title" v-model="open" width="500px" append-to-body>
       <el-form ref="applicationsRef" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="申请人" prop="personId">
-          <el-select v-model="form.personId" placeholder="请选择特困人员" @change="handleSelectChange">
+          <el-select v-model="form.personId"
+                     filterable
+                     remote
+                     reserve-keyword
+                     placeholder="请输入特困人员名字进行过滤"
+                     :remote-method="personSelectorData"
+                     :loading="personLoading"
+                     style="width: 200px"  @change="handleSelectChange"
+          >
             <el-option
-                v-for="dict in personList"
-                :key="dict.personId"
-                :label="dict.name"
-                :value="dict.personId"
-            ></el-option>
+                v-for="item in personList"
+                :key="item.personId"
+                :label="item.name"
+                :value="item.personId"
+            />
           </el-select>
           <el-input v-model="form.personName" placeholder="personName" type="hidden"></el-input>
         </el-form-item>
@@ -207,7 +220,7 @@
                           v-model="form.applyDate"
                           type="date"
                           value-format="YYYY-MM-DD"
-                          placeholder="请选择协议生效日期">
+                          placeholder="请选择申请日期">
           </el-date-picker>
         </el-form-item>
         <el-form-item label="备注" prop="remark">
@@ -221,6 +234,90 @@
         </div>
       </template>
     </el-dialog>
+
+    <el-dialog :title="title" v-model="openDetail" width="500px" append-to-body>
+      <el-form ref="applicationsRef" :model="form" label-width="80px">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="申请人" prop="personId">
+              <el-select v-model="form.personId"
+                         filterable
+                         remote
+                         reserve-keyword
+                         placeholder="请输入特困人员名字进行过滤"
+                         :remote-method="personSelectorData"
+                         :loading="personLoading"
+                         style="width: 200px"
+              >
+                <el-option
+                    v-for="item in personList"
+                    :key="item.personId"
+                    :label="item.name"
+                    :value="item.personId"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="首选性别" prop="nurseGender">
+              <el-select v-model="form.nurseGender" placeholder="请选择首选护理人员性别" disabled>
+                <el-option
+                    v-for="dict in sys_user_sex"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="护理需求" prop="careNeeds">
+              <el-input v-model="form.careNeeds" type="textarea" placeholder="请输入详细护理需求" disabled />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="所在医院" prop="hospital">
+              <el-input v-model="form.hospital" type="textarea" placeholder="请输入详细护理需求" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="详细地址" prop="address">
+              <el-input v-model="form.address" placeholder="请输入科室具体楼层房间床号" disabled/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="预计天数" prop="careDays">
+              <el-input v-model="form.careDays" placeholder="请输入预计天数" disabled/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="申请日期" prop="applyDate">
+              <el-input v-model="form.applyDate" placeholder="请输入申请日期" disabled/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="备注" prop="remark">
+              <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" disabled/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="护理备注" prop="assignRemark">
+              <el-input v-model="form.assignRemark" type="textarea" placeholder="请输入内容" disabled/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </el-dialog>
   </div>
 </template>
 
@@ -235,6 +332,7 @@ const { sys_user_sex,care_apply_status,deal_status,pay_status } = proxy.useDict(
 const applicationsList = ref([]);
 const hispitalList=ref([]);
 const personList=ref([]);
+const personLoading=ref(true);
 const open = ref(false);
 const loading = ref(true);
 const showSearch = ref(true);
@@ -243,7 +341,7 @@ const single = ref(true);
 const multiple = ref(true);
 const total = ref(0);
 const title = ref("");
-
+const openDetail=ref(false);
 const data = reactive({
   form: {},
   queryParams: {
@@ -358,6 +456,18 @@ function handleUpdate(row) {
     title.value = "修改护理申请";
   });
 }
+
+//查看按钮
+function handleView(row) {
+  reset();
+  const _applyId = row.applyId || ids.value
+  getApplications(_applyId).then(response => {
+    form.value = response.data;
+    openDetail.value = true;
+    title.value = "查看护理申请";
+  });
+}
+
 // 送审
 function handleCheck(row) {
   proxy.$modal.confirm('是否确认送审"' + row.personName + '"的护理申请?').then(function() {
@@ -424,12 +534,15 @@ function listHispital() {
   });
 }
 /** 查询所有特困人员 */
-function listPersons() {
-  listAllPersons().then(response => {
+function personSelectorData(qstr){
+  personLoading.value = true;
+  listAllPersons({
+    name: qstr
+  }).then(response=>{
+    personLoading.value = false;
     personList.value = response;
   });
 }
-listPersons();
 listHispital();
 getList();
 </script>

+ 2 - 15
ruoyi-vue/src/views/care/applications/index_assign_nurse.vue

@@ -58,19 +58,6 @@
         <el-button icon="Refresh" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
-
-    <el-row :gutter="10" class="mb8">
-<!--      <el-col :span="1.5">-->
-<!--        <el-button-->
-<!--            type="warning"-->
-<!--            plain-->
-<!--            icon="Download"-->
-<!--            @click="handleExport"-->
-<!--            v-hasPermi="['care:applications:export']"-->
-<!--        >导出</el-button>-->
-<!--      </el-col>-->
-      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
         <el-table v-loading="loading" :data="applicationsAssignList" @selection-change="handleSelectionChange">
           <el-table-column type="selection" width="55" align="center" />
           <el-table-column label="申请人姓名" align="center" prop="personName" />
@@ -92,7 +79,7 @@
           <el-table-column label="备注" align="center" prop="remark" />
           <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="128px">
             <template #default="scope">
-              <el-button link type="primary" icon="Edit" @click="handleAssign(scope.row)" v-hasPermi="['care:applications:assign']">指派</el-button>
+              <el-button link type="primary" icon="Edit" @click="handleAssign(scope.row)" v-hasPermi="['care:assignments:add']">指派</el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -214,7 +201,7 @@
   </div>
 </template>
 
-<script setup name="WaitCheckApplications">
+<script setup name="assignNurseApplications">
 import {
   listApplications,
   getApplications,

+ 376 - 0
ruoyi-vue/src/views/care/applications/index_money.vue

@@ -0,0 +1,376 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="128px">
+      <el-form-item label="申请人姓名" prop="personName">
+        <el-input
+            v-model="queryParams.personName"
+            placeholder="请输入申请人姓名"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="首选护理人员性别" prop="nurseGender">
+        <el-select v-model="queryParams.nurseGender" placeholder="请选择首选护理人员性别" clearable>
+          <el-option
+              v-for="dict in sys_user_sex"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="所在医院" prop="hospital">
+        <el-select v-model="queryParams.hospital" placeholder="请选择所在医院" clearable>
+          <el-option
+              v-for="dict in hispitalList"
+              :key="dict.name"
+              :label="dict.name"
+              :value="dict.name"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="申请日期" prop="applyDate">
+        <el-input
+            v-model="queryParams.applyDate"
+            placeholder="请输入申请日期"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+    <el-tabs v-model="activeName">
+      <el-tab-pane label="未支付" name="waitPay">
+        <el-table v-loading="loading" :data="applicationsPayList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="55" align="center" />
+          <el-table-column label="申请人姓名" align="center" prop="personName" />
+          <el-table-column label="护理需求详情" align="center" prop="careNeeds" />
+          <el-table-column label="首选护理人员性别" align="center" prop="nurseGender">
+            <template #default="scope">
+              <dict-tag :options="sys_user_sex" :value="scope.row.nurseGender"/>
+            </template>
+          </el-table-column>
+          <el-table-column label="所在医院" align="center" prop="hospital" />
+          <el-table-column label="预计天数" align="center" prop="careDays" />
+          <el-table-column label="申请日期" align="center" prop="applyDate" />
+          <el-table-column label="支付状态" align="center" prop="payStatus">
+            <template #default="scope">
+              <dict-tag :options="pay_status" :value="scope.row.payStatus"/>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="128px">
+            <template #default="scope">
+              <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['care:applications:pay']">确定支付</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+            v-show="total>0"
+            :total="total"
+            v-model:page="queryParams.pageNum"
+            v-model:limit="queryParams.pageSize"
+            @pagination="getList"
+        />
+      </el-tab-pane>
+      <el-tab-pane label="已支付" name="isPay">
+        <el-table v-loading="loading" :data="applicationsIsPayList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="55" align="center" />
+          <el-table-column label="申请人姓名" align="center" prop="personName" />
+          <el-table-column label="护理需求详情" align="center" prop="careNeeds" />
+          <el-table-column label="首选护理人员性别" align="center" prop="nurseGender">
+            <template #default="scope">
+              <dict-tag :options="sys_user_sex" :value="scope.row.nurseGender"/>
+            </template>
+          </el-table-column>
+          <el-table-column label="所在医院" align="center" prop="hospital" />
+          <el-table-column label="预计天数" align="center" prop="careDays" />
+          <el-table-column label="申请日期" align="center" prop="applyDate" />
+          <el-table-column label="支付状态" align="center" prop="payStatus">
+            <template #default="scope">
+              <dict-tag :options="pay_status" :value="scope.row.payStatus"/>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="128px">
+            <template #default="scope">
+              <el-button link type="primary" icon="Edit" @click="handleCancel(scope.row)" v-hasPermi="['care:applications:cancelPay']">取消支付</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+            v-show="assignTotal>0"
+            :total="assignTotal"
+            v-model:page="queryParams.pageNumAssign"
+            v-model:limit="queryParams.pageSizeAssign"
+            @pagination="getIsPayList"
+        />
+      </el-tab-pane>
+    </el-tabs>
+
+
+    <!-- 添加或修改护理申请对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="applicationsRef" :model="form" :rules="rules" label-width="80px">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="申请人" prop="personId">
+              <el-select v-model="form.personId" placeholder="请选择特困人员" disabled>
+                <el-option
+                    v-for="dict in personList"
+                    :key="dict.personId"
+                    :label="dict.name"
+                    :value="dict.personId"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="首选性别" prop="nurseGender">
+              <el-select v-model="form.nurseGender" placeholder="请选择首选护理人员性别" disabled>
+                <el-option
+                    v-for="dict in sys_user_sex"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="护理需求" prop="careNeeds">
+              <el-input v-model="form.careNeeds" type="textarea" placeholder="请输入详细护理需求" disabled />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="所在医院" prop="hospital">
+              <el-select v-model="form.hospital" placeholder="所在公司" disabled>
+                <el-option
+                    v-for="dict in hispitalList"
+                    :key="dict.name"
+                    :label="dict.name"
+                    :value="dict.name"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="详细地址" prop="address">
+              <el-input v-model="form.address" placeholder="请输入科室具体楼层房间床号" disabled/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="预计天数" prop="careDays">
+              <el-input v-model="form.careDays" placeholder="请输入预计天数" disabled/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="申请日期" prop="applyDate">
+              <el-input v-model="form.applyDate" placeholder="请输入申请日期" disabled/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="备注" prop="remark">
+              <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" disabled/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="payApplications">
+import { listApplications, updateApplications } from "@/api/care/applications";
+import { listAllHospital } from "@/api/care/hospital";
+import {listAllPersons} from "@/api/care/persons";
+import {listAllCompany} from "@/api/care/nurses";
+const { proxy } = getCurrentInstance();
+const { sys_user_sex,pay_status } = proxy.useDict('sys_user_sex','pay_status');
+
+const applicationsPayList = ref([]);
+const applicationsIsPayList = ref([]);
+const hispitalList=ref([]);
+const personList=ref([]);
+const companyList=ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+const assignTotal=ref(0);
+const activeName = ref("waitPay");
+
+const openAssign=ref(false);
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    pageNumAssign: 1,
+    pageSizeAssign: 10,
+    personId: null,
+    personName: null,
+    careNeeds: null,
+    nurseGender: null,
+    hospital: null,
+    address: null,
+    careDays: null,
+    applyDate: null,
+    status: null,
+    dealStatus: null,
+    payStatus: null,
+    auditReason: null,
+  }
+});
+
+const {queryParams, form, rules} = toRefs(data);
+
+/** 查询护理申请列表 */
+function getList() {
+  loading.value = true;
+  queryParams.value.payStatus = 'dis_pay';
+  listApplications(queryParams.value).then(response => {
+    applicationsPayList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function getIsPayList() {
+  loading.value = true;
+  queryParams.value.payStatus = 'is_pay';
+  listApplications(queryParams.value).then(response => {
+    applicationsIsPayList.value = response.rows;
+    assignTotal.value = response.total;
+    loading.value = false;
+  });
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false;
+  openAssign.value = false;
+  reset();
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    applyId: null,
+    personId: null,
+    personName: null,
+    careNeeds: null,
+    nurseGender: null,
+    hospital: null,
+    address: null,
+    careDays: null,
+    applyDate: null,
+    status: null,
+    dealStatus: null,
+    payStatus: null,
+    auditReason: null,
+    delFlag: null,
+    createBy: null,
+    createTime: null,
+    updateBy: null,
+    updateTime: null,
+    remark: null,
+    companyId: null,
+    assignRemark: null,
+    assignId: null
+  };
+  proxy.resetForm("applicationsRef");
+  proxy.resetForm("applicationAssignRef");
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  queryParams.value.pageNumAssign = 1;
+  getList();
+  getIsPayList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.applyId);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  proxy.$modal.confirm('是否支付"' + row.personName + '"的护理?').then(function() {
+    row.payStatus = 'is_pay';
+    updateApplications(row).then(response => {
+      proxy.$modal.msgSuccess("支付成功");
+      getList();
+      getIsPayList();
+    });
+  })
+}
+
+/** 指派操作 */
+function handleCancel(row) {
+  proxy.$modal.confirm('是否取消支付"' + row.personName + '"的护理?').then(function() {
+    row.payStatus = 'dis_pay';
+    updateApplications(row).then(response => {
+      proxy.$modal.msgSuccess("取消支付成功");
+      open.value = false;
+      getList();
+      getIsPayList();
+    });
+  })
+}
+
+/** 查询医院列表 */
+function listHispital() {
+  listAllHospital().then(response => {
+    hispitalList.value = response;
+  });
+}
+
+/** 查询所有特困人员 */
+function listPersons() {
+  listAllPersons().then(response => {
+    personList.value = response;
+  });
+}
+
+/** 查询公司列表 */
+function listCompany() {
+  listAllCompany().then(response => {
+    companyList.value = response;
+  });
+}
+
+listPersons();
+listHispital();
+getList();
+getIsPayList();
+listCompany();
+</script>

+ 3 - 3
ruoyi-vue/src/views/care/applications/index_wait_check.vue

@@ -128,7 +128,7 @@
           <el-table-column label="备注" align="center" prop="remark" />
           <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="128px">
             <template #default="scope">
-              <el-button link type="primary" icon="Edit" @click="handleAssign(scope.row)" v-hasPermi="['care:applications:assign']">指派</el-button>
+              <el-button link type="primary" icon="Edit" @click="handleAssign(scope.row)" v-hasPermi="['care:applications:assignCompany']">指派</el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -314,8 +314,8 @@
               <el-select v-model="form.companyId" placeholder="护理公司">
                 <el-option
                     v-for="dict in companyList"
-                    :key="dict.name"
-                    :label="dict.name"
+                    :key="dict.name+'('+dict.count+')'"
+                    :label="dict.name+'('+dict.count+')'"
                     :value="dict.companyId"
                 ></el-option>
               </el-select>

+ 1 - 14
ruoyi-vue/src/views/care/clocks/index_task.vue

@@ -155,14 +155,13 @@
   </el-dialog>
 </template>
 
-<script setup name="WaitCheckApplications">
+<script setup name="ClocksTask">
 import {
   getApplications,
   listApplications,
     updateApplications
 } from "@/api/care/applications";
 import clockIndex from './index.vue';
-import {delAssignments} from "@/api/care/assignments";
 
 const { proxy } = getCurrentInstance();
 const {deal_status,sys_user_sex } = proxy.useDict('deal_status','sys_user_sex');
@@ -212,10 +211,6 @@ function getList(){
     loading.value = false;
   });
 }
-// 取消按钮
-function cancel() {
-  open.value=false;
-}
 
 /** 搜索按钮操作 */
 function handleQuery() {
@@ -245,14 +240,6 @@ function handleExport() {
   }, `applications_${new Date().getTime()}.xlsx`)
 }
 
-function handleSelectChange(value) {
-  // 找到选中的选项
-  const person =personList.value.find(option => option.personId === value);
-  if (person) {
-    form.value.personId=person.personId
-    form.value.personName=person.name
-  }
-}
 
 function look(row) {
   const _applyId = row.applyId || ids.value

+ 8 - 8
ruoyi-vue/src/views/care/persons/index.vue

@@ -82,7 +82,7 @@
           plain
           icon="Plus"
           @click="handleAdd"
-          v-hasPermi="['exam:persons:add']"
+          v-hasPermi="['care:persons:add']"
         >新增</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -92,7 +92,7 @@
           icon="Edit"
           :disabled="single"
           @click="handleUpdate"
-          v-hasPermi="['exam:persons:edit']"
+          v-hasPermi="['care:persons:edit']"
         >修改</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -102,7 +102,7 @@
           icon="Delete"
           :disabled="multiple"
           @click="handleDelete"
-          v-hasPermi="['exam:persons:remove']"
+          v-hasPermi="['care:persons:remove']"
         >删除</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -111,7 +111,7 @@
           plain
           icon="Download"
           @click="handleExport"
-          v-hasPermi="['exam:persons:export']"
+          v-hasPermi="['care:persons:export']"
         >导出</el-button>
       </el-col>
       <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
@@ -141,8 +141,8 @@
       <el-table-column label="备注" align="center" prop="remark" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template #default="scope">
-          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['exam:persons:edit']">修改</el-button>
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['exam:persons:remove']">删除</el-button>
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['care:persons:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['care:persons:remove']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -245,7 +245,7 @@
                               v-model="form.registeredDate"
                               type="date"
                               value-format="YYYY-MM-DD"
-                              placeholder="请选择协议生效日期">
+                              placeholder="请选择登记日期">
               </el-date-picker>
             </el-form-item>
           </el-col>
@@ -439,7 +439,7 @@ function handleDelete(row) {
 
 /** 导出按钮操作 */
 function handleExport() {
-  proxy.download('exam/persons/export', {
+  proxy.download('care/persons/export', {
     ...queryParams.value
   }, `persons_${new Date().getTime()}.xlsx`)
 }

+ 125 - 0
ruoyi-vue/src/views/care/statistics/company_dispatch.vue

@@ -0,0 +1,125 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="公司名称" prop="name">
+        <el-input
+            v-model="queryParams.name"
+            placeholder="请输入公司名称"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="公司地址" prop="address">
+        <el-input
+            v-model="queryParams.address"
+            placeholder="请输入公司地址"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="公司法人" prop="legalPerson">
+        <el-input
+            v-model="queryParams.legalPerson"
+            placeholder="请输入公司法人"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="公司状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择公司状态" clearable>
+          <el-option
+              v-for="dict in sys_normal_disable"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="companiesList">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="公司名称" align="center" prop="name" />
+      <el-table-column label="公司地址" align="center" prop="address" />
+      <el-table-column label="公司法人" align="center" prop="legalPerson" />
+      <el-table-column label="公司联系电话" align="center" prop="phoneNumber" />
+      <el-table-column label="每日可派单人数" align="center" prop="dispatchPersonNumber" />
+      <el-table-column label="派单数" align="center" prop="count" />
+      <el-table-column label="公司状态" align="center" prop="status">
+        <template #default="scope">
+          <dict-tag :options="sys_normal_disable" :value="scope.row.status"/>
+        </template>
+      </el-table-column>
+
+    </el-table>
+
+    <pagination
+        v-show="total>0"
+        :total="total"
+        v-model:page="queryParams.pageNum"
+        v-model:limit="queryParams.pageSize"
+        @pagination="getList"
+    />
+  </div>
+</template>
+
+<script setup name="CompaniesDispatch">
+import { dispatchCompanies} from "@/api/care/companies";
+
+const { proxy } = getCurrentInstance();
+const { sys_normal_disable } = proxy.useDict('sys_normal_disable');
+
+const companiesList = ref([]);
+const loading = ref(true);
+const showSearch = ref(true);
+const total = ref(0);
+
+const data = reactive({
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    name: null,
+    address: null,
+    legalPerson: null,
+    phoneNumber: null,
+    email: null,
+    dispatchPersonNumber: null,
+    userId: null,
+    status: null,
+  },
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询护理公司列表 */
+function getList() {
+  loading.value = true;
+  dispatchCompanies(queryParams.value).then(response => {
+    companiesList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+getList();
+</script>