| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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' |
| | | }) |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| | |
| | | [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`, |