WXL (wul)
2 天以前 78c6f290eb090d02d92aa97be61b38dd64a28d1e
测试完成
已修改1个文件
已添加8个文件
971 ■■■■■ 文件已修改
dist (4).zip 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/serviceGroup.js 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/groupManagement/PatientGroup/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/views/groupManagement/PatientGroup/particulars.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/views/groupManagement/PersonnelGroup/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/views/groupManagement/PersonnelGroup/particulars.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/views/groupManagement/serviceGroup/index.vue 355 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/groupManagement/serviceGroup/particulars.vue 518 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dist (4).zip
Binary files differ
src/api/system/serviceGroup.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
import request from '@/utils/request'
// æŸ¥è¯¢æœåŠ¡ç»„åˆ—è¡¨
export function listServiceGroup(query) {
  return request({
    url: '/system/serviceGroup/list',
    method: 'get',
    params: query
  })
}
// æŸ¥è¯¢æœåŠ¡ç»„è¯¦ç»†
export function getServiceGroup(groupId) {
  return request({
    url: '/system/serviceGroup/' + groupId,
    method: 'get'
  })
}
// æ–°å¢žæœåŠ¡ç»„
export function addServiceGroup(data) {
  return request({
    url: '/system/serviceGroup',
    method: 'post',
    data: data
  })
}
// ä¿®æ”¹æœåŠ¡ç»„
export function updateServiceGroup(data) {
  return request({
    url: '/system/serviceGroup',
    method: 'put',
    data: data
  })
}
// åˆ é™¤æœåŠ¡ç»„
export function delServiceGroup(groupId) {
  return request({
    url: '/system/serviceGroup/' + groupId,
    method: 'delete'
  })
}
// æŸ¥è¯¢æœåŠ¡ç»„å…³è”çš„ä»»åŠ¡åˆ—è¡¨
export function getGroupTasks(groupId) {
  return request({
    url: '/system/serviceGroup/' + groupId + '/tasks',
    method: 'get'
  })
}
// æŸ¥è¯¢æœåŠ¡ç»„å…³è”çš„æ‚£è€…åˆ—è¡¨
export function getGroupPatients(groupId) {
  return request({
    url: '/system/serviceGroup/' + groupId + '/patients',
    method: 'get'
  })
}
// å…³è”任务到服务组
export function addTaskToGroup(data) {
  return request({
    url: '/system/serviceGroup/tasks',
    method: 'post',
    data: data
  })
}
// ä»ŽæœåŠ¡ç»„ç§»é™¤ä»»åŠ¡
export function removeTaskFromGroup(groupId, taskId) {
  return request({
    url: '/system/serviceGroup/' + groupId + '/tasks/' + taskId,
    method: 'delete'
  })
}
// å…³è”患者到服务组
export function addPatientToGroup(data) {
  return request({
    url: '/system/serviceGroup/patients',
    method: 'post',
    data: data
  })
}
// ä»ŽæœåŠ¡ç»„ç§»é™¤æ‚£è€…
export function removePatientFromGroup(groupId, patientId) {
  return request({
    url: '/system/serviceGroup/' + groupId + '/patients/' + patientId,
    method: 'delete'
  })
}
src/views/groupManagement/PatientGroup/index.vue
src/views/groupManagement/PatientGroup/particulars.vue
src/views/groupManagement/PersonnelGroup/index.vue
src/views/groupManagement/PersonnelGroup/particulars.vue
src/views/groupManagement/serviceGroup/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,355 @@
<template>
  <div class="app-container">
    <el-row :gutter="20">
      <!-- æœç´¢åŒºåŸŸ -->
      <el-form
        :model="queryParams"
        ref="queryForm"
        size="small"
        :inline="true"
        v-show="showSearch"
        label-width="98px"
      >
        <el-form-item label="服务组名称">
          <el-input
            v-model="queryParams.groupName"
            placeholder="请输入服务组名称"
            @keyup.enter.native="handleQuery"
          ></el-input>
        </el-form-item>
        <el-form-item label="创建人">
          <el-input
            v-model="queryParams.createBy"
            placeholder="请输入创建人"
            @keyup.enter.native="handleQuery"
          ></el-input>
        </el-form-item>
        <el-form-item label="创建时间">
          <el-date-picker
            v-model="dateRange"
            style="width: 240px"
            value-format="yyyy-MM-dd"
            type="daterange"
            range-separator="-"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
          ></el-date-picker>
        </el-form-item>
        <el-form-item label="状态">
          <el-select v-model="queryParams.status" placeholder="请选择状态">
            <el-option
              v-for="item in statusOptions"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button
            type="primary"
            icon="el-icon-search"
            size="medium"
            @click="handleQuery"
            >搜索</el-button
          >
          <el-button icon="el-icon-refresh" size="medium" @click="resetQuery"
            >重置</el-button
          >
        </el-form-item>
      </el-form>
      <el-divider></el-divider>
      <!-- æ“ä½œæŒ‰é’®åŒºåŸŸ -->
      <el-row :gutter="10" class="mb8">
        <el-col :span="1.5">
          <el-button
            type="primary"
            icon="el-icon-plus"
            size="medium"
            @click="handleAdd"
            >新建服务组</el-button
          >
        </el-col>
        <right-toolbar
          :showSearch.sync="showSearch"
          @queryTable="getList"
        ></right-toolbar>
      </el-row>
      <!-- æœåŠ¡ç»„åˆ—è¡¨ -->
      <el-table
        v-loading="loading"
        :data="groupList"
        @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="55" align="center" />
        <el-table-column
          label="服务组ID"
          align="center"
          key="groupId"
          prop="groupId"
          width="100"
        />
        <el-table-column
          label="服务组名称"
          align="center"
          key="groupName"
          prop="groupName"
          :show-overflow-tooltip="true"
        />
        <el-table-column
          label="描述"
          align="center"
          key="groupDesc"
          prop="groupDesc"
          :show-overflow-tooltip="true"
        />
        <el-table-column
          label="关联任务数"
          align="center"
          key="taskCount"
          prop="taskCount"
          width="100"
        />
        <el-table-column
          label="关联患者数"
          align="center"
          key="patientCount"
          prop="patientCount"
          width="100"
        />
        <el-table-column
          label="状态"
          align="center"
          key="status"
          prop="status"
          width="100"
        >
          <template slot-scope="scope">
            <el-tag :type="scope.row.status === 1 ? 'success' : 'info'">
              {{ scope.row.status === 1 ? "启用" : "停用" }}
            </el-tag>
          </template>
        </el-table-column>
        <el-table-column
          label="创建人"
          align="center"
          key="createBy"
          prop="createBy"
        />
        <el-table-column
          label="创建时间"
          align="center"
          prop="createTime"
          width="180"
        >
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.createTime) }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="操作"
          align="center"
          width="300"
          class-name="small-padding fixed-width"
        >
          <template slot-scope="scope">
            <el-button
              size="mini"
              type="text"
              icon="el-icon-view"
              @click="handleView(scope.row)"
              >详情</el-button
            >
            <el-button
              size="mini"
              type="text"
              icon="el-icon-delete"
              class="delete-btn"
              @click="handleDelete(scope.row)"
              >删除</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-row>
  </div>
</template>
<script>
import { listServiceGroup, delServiceGroup } from "@/api/system/serviceGroup";
export default {
  name: "ServiceGroupList",
  dicts: ["sys_normal_disable"],
  data() {
    return {
      // é®ç½©å±‚
      loading: false,
      // é€‰ä¸­æ•°ç»„
      ids: [],
      // éžå•个禁用
      single: true,
      // éžå¤šä¸ªç¦ç”¨
      multiple: true,
      // æ˜¾ç¤ºæœç´¢æ¡ä»¶
      showSearch: true,
      // æ€»æ¡æ•°
      total: 5,
      // æœåŠ¡ç»„è¡¨æ ¼æ•°æ®
      groupList: [
        {
          groupId: "SG2025001",
          groupName: "糖尿病随访管理组",
          groupDesc: "专门负责糖尿病患者的定期随访和健康管理服务",
          taskCount: 5,
          patientCount: 150,
          status: 1,
          createBy: "张医生",
          createTime: "2025-10-15 14:30:00",
        },
        {
          groupId: "SG2025002",
          groupName: "高血压健康管理组",
          groupDesc: "高血压患者的用药指导和血压监测管理",
          taskCount: 3,
          patientCount: 89,
          status: 1,
          createBy: "李医生",
          createTime: "2025-10-10 09:15:00",
        },
        {
          groupId: "SG2025003",
          groupName: "术后康复随访组",
          groupDesc: "外科手术后患者的康复指导和随访管理",
          taskCount: 2,
          patientCount: 45,
          status: 0,
          createBy: "王医生",
          createTime: "2025-09-28 16:20:00",
        },
        {
          groupId: "SG2025004",
          groupName: "孕产期健康管理组",
          groupDesc: "孕期和产后妇女的健康监测和指导服务",
          taskCount: 4,
          patientCount: 67,
          status: 1,
          createBy: "赵医生",
          createTime: "2025-10-05 11:30:00",
        },
        {
          groupId: "SG2025005",
          groupName: "慢性病综合管理组",
          groupDesc: "多种慢性病患者的综合健康管理服务",
          taskCount: 6,
          patientCount: 203,
          status: 1,
          createBy: "张医生",
          createTime: "2025-09-15 08:45:00",
        },
      ],
      // æ—¥æœŸèŒƒå›´
      dateRange: [],
      // çŠ¶æ€é€‰é¡¹
      statusOptions: [
        { value: 1, label: "启用" },
        { value: 0, label: "停用" },
      ],
      // æŸ¥è¯¢å‚æ•°
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        groupName: undefined,
        createBy: undefined,
        status: undefined,
      },
    };
  },
  created() {
    this.getList();
  },
  methods: {
    /** æŸ¥è¯¢æœåŠ¡ç»„åˆ—è¡¨ */
    getList() {
      // this.loading = true;
      // listServiceGroup(
      //   this.addDateRange(this.queryParams, this.dateRange)
      // ).then((response) => {
      //   this.groupList = response.rows;
      //   this.total = response.total;
      //   this.loading = false;
      // });
    },
    /** æœç´¢æŒ‰é’®æ“ä½œ */
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** é‡ç½®æŒ‰é’®æ“ä½œ */
    resetQuery() {
      this.dateRange = [];
      this.resetForm("queryForm");
      this.handleQuery();
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
    handleSelectionChange(selection) {
      this.ids = selection.map((item) => item.groupId);
      this.single = selection.length !== 1;
      this.multiple = !selection.length;
    },
    /** æ–°å¢žæŒ‰é’®æ“ä½œ */
    handleAdd() {
      this.$router.push("/group/serviceGroupPar");
    },
    /** è¯¦æƒ…按钮操作 */
    handleView(row, type) {
      this.$router.push({
        path: "/group/serviceGroupPar",
        query: {
          type: this.topqueryParams.type,
        },
      });
    },
    /** åˆ é™¤æŒ‰é’®æ“ä½œ */
    handleDelete(row) {
      const groupIds = row.groupId || this.ids;
      this.$modal
        .confirm('是否确认删除服务组编号为"' + groupIds + '"的数据项?')
        .then(() => {
          return delServiceGroup(groupIds);
        })
        .then(() => {
          this.getList();
          this.$modal.msgSuccess("删除成功");
        })
        .catch(() => {});
    },
  },
};
</script>
<style scoped>
.delete-btn {
  color: #f56c6c;
}
.app-container {
  padding: 20px;
}
.mb8 {
  margin-bottom: 8px;
}
</style>
src/views/groupManagement/serviceGroup/particulars.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,518 @@
<template>
  <div class="app-container">
    <!-- é¡¶éƒ¨é¢åŒ…屑导航 -->
    <el-breadcrumb separator-class="el-icon-arrow-right" class="breadcrumb">
      <el-breadcrumb-item :to="{ path: '/system/serviceGroup' }">服务组管理</el-breadcrumb-item>
      <el-breadcrumb-item>服务组详情</el-breadcrumb-item>
    </el-breadcrumb>
    <!-- é¡¶éƒ¨åŸºç¡€ä¿¡æ¯ -->
    <el-card class="base-info-card" shadow="never">
      <div slot="header" class="clearfix">
        <span class="card-title">服务组基础信息</span>
        <el-button
          style="float: right; padding: 3px 0"
          type="text"
          icon="el-icon-edit"
          @click="handleEdit"
          >编辑</el-button
        >
      </div>
      <el-row :gutter="20">
        <el-col :span="8">
          <div class="info-item">
            <label>服务组名称:</label>
            <span>{{ baseInfo.groupName }}</span>
          </div>
        </el-col>
        <el-col :span="8">
          <div class="info-item">
            <label>服务组ID:</label>
            <span>{{ baseInfo.groupId }}</span>
          </div>
        </el-col>
        <el-col :span="8">
          <div class="info-item">
            <label>状态:</label>
            <el-tag :type="baseInfo.status === 1 ? 'success' : 'info'">
              {{ baseInfo.status === 1 ? '启用' : '停用' }}
            </el-tag>
          </div>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="24">
          <div class="info-item">
            <label>描述:</label>
            <span>{{ baseInfo.groupDesc || '暂无描述' }}</span>
          </div>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="8">
          <div class="info-item">
            <label>创建人:</label>
            <span>{{ baseInfo.createBy }}</span>
          </div>
        </el-col>
        <el-col :span="8">
          <div class="info-item">
            <label>创建时间:</label>
            <span>{{ parseTime(baseInfo.createTime) }}</span>
          </div>
        </el-col>
        <el-col :span="8">
          <div class="info-item">
            <label>更新时间:</label>
            <span>{{ parseTime(baseInfo.updateTime) }}</span>
          </div>
        </el-col>
      </el-row>
    </el-card>
    <!-- ä¸­éƒ¨å…³è”任务 -->
    <el-card class="task-card" shadow="never">
      <div slot="header" class="clearfix">
        <span class="card-title">关联任务</span>
        <el-button
          style="float: right; margin-left: 10px;"
          type="primary"
          icon="el-icon-plus"
          size="mini"
          @click="handleAddTask"
          >关联任务</el-button
        >
        <el-button
          style="float: right;"
          type="text"
          icon="el-icon-setting"
          @click="handleManageTasks"
          >管理</el-button
        >
      </div>
      <el-table
        v-loading="taskLoading"
        :data="taskList"
        style="width: 100%"
      >
        <el-table-column
          label="任务名称"
          prop="taskName"
          min-width="200"
          :show-overflow-tooltip="true"
        />
        <el-table-column
          label="任务类型"
          prop="taskType"
          width="120"
          align="center"
        >
          <template slot-scope="scope">
            <dict-tag :options="dict.type.task_type" :value="scope.row.taskType"/>
          </template>
        </el-table-column>
        <el-table-column
          label="任务状态"
          prop="sendState"
          width="100"
          align="center"
        >
          <template slot-scope="scope">
            <dict-tag :options="dict.type.task_status" :value="scope.row.sendState"/>
          </template>
        </el-table-column>
        <el-table-column
          label="总任务/已随访"
          width="120"
          align="center"
        >
          <template slot-scope="scope">
            <span>{{ scope.row.totalCount }}/{{ scope.row.completedCount }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="创建时间"
          prop="createTime"
          width="180"
          align="center"
        >
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.createTime) }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="操作"
          width="200"
          align="center"
          fixed="right"
        >
          <template slot-scope="scope">
            <el-button
              size="mini"
              type="text"
              @click="handleViewTask(scope.row)"
              >查看</el-button
            >
            <el-button
              size="mini"
              type="text"
              class="delete-btn"
              @click="handleRemoveTask(scope.row)"
              >移除</el-button
            >
          </template>
        </el-table-column>
      </el-table>
      <div v-if="taskList.length === 0 && !taskLoading" class="empty-text">
        æš‚无关联任务,请先关联任务
      </div>
    </el-card>
    <!-- åº•部关联患者 -->
    <el-card class="patient-card" shadow="never">
      <div slot="header" class="clearfix">
        <span class="card-title">关联患者</span>
        <el-button
          style="float: right; margin-left: 10px;"
          type="primary"
          icon="el-icon-plus"
          size="mini"
          @click="handleAddPatient"
          >关联患者</el-button
        >
        <el-button
          style="float: right;"
          type="text"
          icon="el-icon-setting"
          @click="handleManagePatients"
          >管理</el-button
        >
      </div>
      <el-table
        v-loading="patientLoading"
        :data="patientList"
        style="width: 100%"
      >
        <el-table-column
          label="患者姓名"
          prop="patientName"
          width="120"
          align="center"
        />
        <el-table-column
          label="性别"
          prop="gender"
          width="80"
          align="center"
        >
          <template slot-scope="scope">
            <dict-tag :options="dict.type.sys_user_sex" :value="scope.row.gender"/>
          </template>
        </el-table-column>
        <el-table-column
          label="年龄"
          prop="age"
          width="80"
          align="center"
        />
        <el-table-column
          label="手机号"
          prop="phone"
          width="130"
          align="center"
        />
        <el-table-column
          label="病历号"
          prop="medicalRecordNo"
          width="120"
          align="center"
        />
        <el-table-column
          label="诊断"
          prop="diagnosis"
          min-width="200"
          :show-overflow-tooltip="true"
        />
        <el-table-column
          label="关联时间"
          prop="relationTime"
          width="180"
          align="center"
        >
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.relationTime) }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="操作"
          width="150"
          align="center"
          fixed="right"
        >
          <template slot-scope="scope">
            <el-button
              size="mini"
              type="text"
              @click="handleViewPatient(scope.row)"
              >详情</el-button
            >
            <el-button
              size="mini"
              type="text"
              class="delete-btn"
              @click="handleRemovePatient(scope.row)"
              >移除</el-button
            >
          </template>
        </el-table-column>
      </el-table>
      <div v-if="patientList.length === 0 && !patientLoading" class="empty-text">
        æš‚无关联患者,请先关联患者
      </div>
    </el-card>
  </div>
</template>
<script>
import { getServiceGroup, getGroupTasks, getGroupPatients } from "@/api/system/serviceGroup";
export default {
  name: "ServiceGroupDetail",
  dicts: ['sys_user_sex', 'task_status', 'task_type'],
  data() {
    return {
      groupId: this.$route.params.groupId || 'SG2025001',
      baseInfoLoading: false,
      taskLoading: false,
      patientLoading: false,
      // æµ‹è¯•数据 - åŸºç¡€ä¿¡æ¯
      baseInfo: {
        groupId: 'SG2025001',
        groupName: '糖尿病随访管理服务组',
        groupDesc: '专门负责糖尿病患者的定期随访、用药指导和健康管理服务,提高患者治疗依从性',
        status: 1,
        createBy: '张医生',
        createTime: '2025-10-15 14:30:00',
        updateTime: '2025-10-20 09:15:00'
      },
      // æµ‹è¯•数据 - å…³è”任务
      taskList: [
        {
          taskId: 'T1001',
          taskName: '糖尿病月度随访评估',
          taskType: 1,
          sendState: 2,
          totalCount: 150,
          completedCount: 120,
          createTime: '2025-10-18 10:00:00'
        },
        {
          taskId: 'T1002',
          taskName: '血糖监测依从性问卷',
          taskType: 2,
          sendState: 1,
          totalCount: 150,
          completedCount: 85,
          createTime: '2025-10-16 14:30:00'
        },
        {
          taskId: 'T1003',
          taskName: '并发症筛查提醒任务',
          taskType: 3,
          sendState: 3,
          totalCount: 150,
          completedCount: 45,
          createTime: '2025-10-10 09:20:00'
        }
      ],
      // æµ‹è¯•数据 - å…³è”患者
      patientList: [
        {
          patientId: 'P2025001',
          patientName: '王小明',
          gender: 1,
          age: 45,
          phone: '13800138000',
          medicalRecordNo: 'MR2025001001',
          diagnosis: '2型糖尿病,伴有周围神经并发症',
          relationTime: '2025-10-16 09:00:00'
        },
        {
          patientId: 'P2025002',
          patientName: '李小红',
          gender: 0,
          age: 62,
          phone: '13900139000',
          medicalRecordNo: 'MR2025001002',
          diagnosis: '1型糖尿病,胰岛素依赖型',
          relationTime: '2025-10-17 14:30:00'
        },
        {
          patientId: 'P2025003',
          patientName: '赵建国',
          gender: 1,
          age: 58,
          phone: '13600136000',
          medicalRecordNo: 'MR2025001003',
          diagnosis: '2型糖尿病,伴有糖尿病肾病',
          relationTime: '2025-10-18 11:20:00'
        }
      ]
    };
  },
  created() {
    this.groupId = this.$route.params.groupId;
    this.getDetail();
    this.getTaskList();
    this.getPatientList();
  },
  methods: {
    /** èŽ·å–æœåŠ¡ç»„è¯¦æƒ… */
    getDetail() {
      // this.baseInfoLoading = true;
      // getServiceGroup(this.groupId).then(response => {
      //   this.baseInfo = response.data;
      //   this.baseInfoLoading = false;
      // });
    },
    /** èŽ·å–å…³è”ä»»åŠ¡åˆ—è¡¨ */
    getTaskList() {
      // this.taskLoading = true;
      // getGroupTasks(this.groupId).then(response => {
      //   this.taskList = response.rows;
      //   this.taskLoading = false;
      // });
    },
    /** èŽ·å–å…³è”æ‚£è€…åˆ—è¡¨ */
    getPatientList() {
      // this.patientLoading = true;
      // getGroupPatients(this.groupId).then(response => {
      //   this.patientList = response.rows;
      //   this.patientLoading = false;
      // });
    },
    /** ç¼–辑服务组 */
    handleEdit() {
      this.$router.push(`/system/serviceGroup/edit/${this.groupId}`);
    },
    /** å…³è”任务 */
    handleAddTask() {
      this.$router.push(`/system/serviceGroup/tasks/${this.groupId}?action=add`);
    },
    /** ç®¡ç†ä»»åŠ¡ */
    handleManageTasks() {
      this.$router.push(`/system/serviceGroup/tasks/${this.groupId}`);
    },
    /** æŸ¥çœ‹ä»»åŠ¡è¯¦æƒ… */
    handleViewTask(task) {
      // æ ¹æ®ä»»åŠ¡ç±»åž‹è·³è½¬åˆ°ä¸åŒçš„ä»»åŠ¡è¯¦æƒ…é¡µ
      const routeMap = {
        1: '/followvisit/particty',
        2: '/followvisit/QuestionnaireTask',
        3: '/followvisit/Missioncreation'
      };
      const route = routeMap[task.type] || '/followvisit/task';
      this.$router.push(`${route}?id=${task.taskid}`);
    },
    /** ç§»é™¤ä»»åŠ¡ */
    handleRemoveTask(task) {
      this.$modal.confirm(`是否确认移除任务"${task.taskName}"?`).then(() => {
        // è°ƒç”¨ç§»é™¤ä»»åŠ¡API
        removeTaskFromGroup(this.groupId, task.taskid).then(() => {
          this.$modal.msgSuccess("移除成功");
          this.getTaskList();
        });
      }).catch(() => {});
    },
    /** å…³è”患者 */
    handleAddPatient() {
      this.$router.push(`/system/serviceGroup/patients/${this.groupId}?action=add`);
    },
    /** ç®¡ç†æ‚£è€… */
    handleManagePatients() {
      this.$router.push(`/system/serviceGroup/patients/${this.groupId}`);
    },
    /** æŸ¥çœ‹æ‚£è€…详情 */
    handleViewPatient(patient) {
      this.$router.push(`/system/patient/detail/${patient.patientId}`);
    },
    /** ç§»é™¤æ‚£è€… */
    handleRemovePatient(patient) {
      this.$modal.confirm(`是否确认移除患者"${patient.patientName}"?`).then(() => {
        // è°ƒç”¨ç§»é™¤æ‚£è€…API
        removePatientFromGroup(this.groupId, patient.patientId).then(() => {
          this.$modal.msgSuccess("移除成功");
          this.getPatientList();
        });
      }).catch(() => {});
    },
  }
};
</script>
<style scoped>
.app-container {
  padding: 20px;
}
.breadcrumb {
  margin-bottom: 20px;
}
.base-info-card,
.task-card,
.patient-card {
  margin-bottom: 20px;
}
.card-title {
  font-size: 16px;
  font-weight: bold;
  color: #303133;
}
.info-item {
  margin-bottom: 15px;
  line-height: 1.5;
}
.info-item label {
  display: inline-block;
  width: 100px;
  color: #606266;
  font-weight: normal;
  text-align: right;
  margin-right: 10px;
}
.info-item span {
  color: #303133;
}
.empty-text {
  text-align: center;
  color: #909399;
  padding: 40px 0;
  font-size: 14px;
}
.delete-btn {
  color: #f56c6c;
}
.clearfix:before,
.clearfix:after {
  display: table;
  content: "";
}
.clearfix:after {
  clear: both;
}
</style>
vue.config.js
@@ -37,8 +37,8 @@
      [process.env.VUE_APP_BASE_API]: {
        // target: `https://www.health-y.cn/lssf`,
        // target: `http://192.168.100.129:8095`,
        // target: `http://192.168.100.10:8096`,
        target:`http://localhost:8095`,
        target: `http://192.168.100.10:8096`,
        // target:`http://localhost:8095`,
        // target:`http://35z1t16164.qicp.vip`,
        // target: `http://192.168.100.193:8095`,
        // target: `http://192.168.101.166:8093`,