科室可以自己控制关联诊室的 预约属性

dev
鹿和sa0ChunLuyu 23 hours ago
parent fc1b4bfff6
commit 2987d9c314

@ -0,0 +1,31 @@
<?php
namespace App\Http\Controllers\API\Admin\YeWu;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Services\Admin\YeWu\SubDepartmentService;
class SubDepartmentController extends Controller
{
/**
* 获取当前用户所在科室的子科室列表
*/
public function GetList(Request $request)
{
$userid = $request->get('userid');
$service = new SubDepartmentService();
return $service->GetList($userid);
}
/**
* 保存子科室配置(状态、预约属性)
*/
public function Save(Request $request)
{
$userid = $request->get('userid');
$info = request('info');
$service = new SubDepartmentService();
return $service->Save($info, $userid);
}
}

@ -0,0 +1,79 @@
<?php
namespace App\Services\Admin\YeWu;
use Illuminate\Support\Facades\DB;
class SubDepartmentService
{
/**
* 获取当前用户所在科室的子科室列表
* @param int $userid 当前登录用户ID
* @return \Illuminate\Http\JsonResponse
*/
public function GetList($userid)
{
$user = DB::table('users')->where('id', $userid)->first();
if (!$user || !$user->department_id) {
return \Yz::Return(false, '当前用户未绑定科室', []);
}
$department_id = $user->department_id;
$list = DB::table('s_department')
->where('pid', $department_id)
->where('is_del', 0)
->select('id', 'department_name', 'department_number', 'department_status', 'appointment_enabled')
->orderBy('id', 'asc')
->get();
return \Yz::Return(true, '查询成功', ['list' => $list]);
}
/**
* 保存子科室配置(仅状态和预约属性)
* @param array $info 包含 id, department_status, appointment_enabled
* @param int $userid 当前登录用户ID用于越权校验
* @return \Illuminate\Http\JsonResponse
*/
public function Save($info, $userid)
{
$id = $info['id'] ?? 0;
if (!$id) {
return \Yz::Return(false, '缺少子科室ID', []);
}
$user = DB::table('users')->where('id', $userid)->first();
if (!$user || !$user->department_id) {
return \Yz::Return(false, '当前用户未绑定科室', []);
}
$department_id = $user->department_id;
// 越权校验:该子科室的 pid 必须是当前用户的科室
$subDept = DB::table('s_department')
->where('id', $id)
->where('is_del', 0)
->first();
if (!$subDept) {
return \Yz::Return(false, '子科室不存在', []);
}
if ($subDept->pid != $department_id) {
return \Yz::Return(false, '无权修改该科室', []);
}
$updateData = [];
if (isset($info['department_status'])) {
$updateData['department_status'] = $info['department_status'];
}
if (isset($info['appointment_enabled'])) {
$updateData['appointment_enabled'] = $info['appointment_enabled'];
}
if (empty($updateData)) {
return \Yz::Return(false, '无更新内容', []);
}
$c = DB::table('s_department')->where('id', $id)->update($updateData);
if ($c === false) {
return \Yz::Return(false, '保存失败', []);
}
return \Yz::Return(true, '保存成功', []);
}
}

@ -92,6 +92,8 @@
Route::post('admin/SaveDepartmentChildren','App\Http\Controllers\API\Admin\YeWu\DepartmentController@SaveChildren');//保存科室关联诊室关系 Route::post('admin/SaveDepartmentChildren','App\Http\Controllers\API\Admin\YeWu\DepartmentController@SaveChildren');//保存科室关联诊室关系
Route::post('admin/GetHasScheduleTopDepartments','App\Http\Controllers\API\Admin\YeWu\DepartmentController@GetHasScheduleTopDepartments');//获取有排班资源的科室列表 Route::post('admin/GetHasScheduleTopDepartments','App\Http\Controllers\API\Admin\YeWu\DepartmentController@GetHasScheduleTopDepartments');//获取有排班资源的科室列表
Route::post('admin/DeptSyncDepartment','App\Http\Controllers\API\Admin\YeWu\DepartmentController@SyncDepartment');//从HIS同步科室 Route::post('admin/DeptSyncDepartment','App\Http\Controllers\API\Admin\YeWu\DepartmentController@SyncDepartment');//从HIS同步科室
Route::post('admin/GetSubDepartmentList','App\Http\Controllers\API\Admin\YeWu\SubDepartmentController@GetList');//获取当前用户科室的子科室列表
Route::post('admin/SaveSubDepartment','App\Http\Controllers\API\Admin\YeWu\SubDepartmentController@Save');//保存子科室配置(状态、预约属性)
Route::post('admin/SaveDepartmentResource','App\Http\Controllers\API\Admin\YeWu\DepartmentResourceController@Save');//保存科室资源信息 Route::post('admin/SaveDepartmentResource','App\Http\Controllers\API\Admin\YeWu\DepartmentResourceController@Save');//保存科室资源信息
Route::post('admin/DepartmentResourceGetList','App\Http\Controllers\API\Admin\YeWu\DepartmentResourceController@GetList');//获取科室资源list Route::post('admin/DepartmentResourceGetList','App\Http\Controllers\API\Admin\YeWu\DepartmentResourceController@GetList');//获取科室资源list
Route::post('admin/DepartmentResourceGetEnableList','App\Http\Controllers\API\Admin\YeWu\DepartmentResourceController@GetEnableList');//获取可用科室资源 Route::post('admin/DepartmentResourceGetEnableList','App\Http\Controllers\API\Admin\YeWu\DepartmentResourceController@GetEnableList');//获取可用科室资源

@ -475,6 +475,14 @@ export const GetChildrenDepartments = (data = {}) => {
export const CancelYuYue = (data = {}) => { export const CancelYuYue = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CancelYuYue', data: data }) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CancelYuYue', data: data })
} }
//获取当前用户科室的子科室列表
export const GetSubDepartmentList = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetSubDepartmentList', data: data })
}
//保存子科室配置(状态、预约属性)
export const SaveSubDepartment = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveSubDepartment', data: data })
}
//设置互斥 //设置互斥
export const SetHuChi = (data = {}) => { export const SetHuChi = (data = {}) => {

@ -180,6 +180,13 @@ const router = createRouter({
meta: { meta: {
title: '排班项目管理' title: '排班项目管理'
} }
},{
path: '/yewu/subDepartmentConfig',
name: 'YewuSubDepartmentConfig',
component: () => import('../views/YeWu/SubDepartmentConfig.vue'),
meta: {
title: '子科室配置'
}
},{ },{
path: '/appointmentmngr/timeperiodmngr', path: '/appointmentmngr/timeperiodmngr',
name: 'AppointmentMngrTimePeriodMngr', name: 'AppointmentMngrTimePeriodMngr',

@ -0,0 +1,91 @@
<template>
<div>
<el-table :data="tableData" style="width: 100%;" row-key="id" :row-style="{ 'height': '60px' }"
v-loading="loading">
<el-table-column prop="department_name" label="科室名称" />
<el-table-column prop="department_number" label="科室编号" />
<el-table-column label="状态" width="120">
<template #default="scope">
<el-switch v-model="scope.row.department_status" :active-value="1" :inactive-value="0"
active-text="正常" inactive-text="关闭" inline-prompt
:loading="scope.row._saving"
@change="handleSave(scope.row, 'department_status')" />
</template>
</el-table-column>
<el-table-column label="参与预约" width="120">
<template #default="scope">
<el-switch v-model="scope.row.appointment_enabled" :active-value="1" :inactive-value="0"
active-text="是" inactive-text="否" inline-prompt
:loading="scope.row._saving"
@change="handleSave(scope.row, 'appointment_enabled')" />
</template>
</el-table-column>
</el-table>
<el-empty v-if="!loading && tableData.length === 0" description="当前科室下暂无子科室" />
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import { ElMessage } from 'element-plus'
import { GetSubDepartmentList, SaveSubDepartment } from '@/api/api.js'
let loading = ref(false)
let tableData = ref([])
//
const getList = () => {
loading.value = true
GetSubDepartmentList().then(res => {
loading.value = false
if (res.status) {
tableData.value = (res.data.list || []).map(item => ({
...item,
_saving: false
}))
} else {
ElMessage.error(res.msg)
}
}).catch(() => {
loading.value = false
})
}
// switch
// field
const handleSave = (row, field) => {
row._saving = true
SaveSubDepartment({
info: {
id: row.id,
department_status: row.department_status,
appointment_enabled: row.appointment_enabled
}
}).then(res => {
row._saving = false
if (res.status) {
ElMessage.success('保存成功')
} else {
//
rollback(row, field)
ElMessage.error(res.msg || '保存失败')
}
}).catch(() => {
row._saving = false
rollback(row, field)
ElMessage.error('网络异常,保存失败')
})
}
//
const rollback = (row, field) => {
row[field] = row[field] === 1 ? 0 : 1
}
onMounted(() => {
getList()
})
</script>
<style scoped>
</style>
Loading…
Cancel
Save