This commit is contained in:
王子琦
2026-01-20 13:24:10 +08:00
parent cc7d8f30ff
commit 19249fb374
81 changed files with 475 additions and 345 deletions

View File

@@ -2,7 +2,7 @@
<el-container style="min-height: 100vh;">
<el-aside width="220px" style="background: #0f2f23; color: #fff;">
<div style="padding: 18px 16px; font-size: 18px; font-weight: 600;">
Nursing Home
颐云养老院管理平台
</div>
<el-menu
:default-active="activeMenu"
@@ -16,12 +16,12 @@
</el-menu>
</el-aside>
<el-container>
<div class="header-bar">
<el-header class="header-bar">
<div>{{ roleLabel }}</div>
<div>
<el-button size="mini" type="primary" @click="handleLogout">Logout</el-button>
<el-button size="mini" type="primary" @click="handleLogout">退出登录</el-button>
</div>
</div>
</el-header>
<el-main>
<router-view />
</el-main>
@@ -42,42 +42,42 @@ export default {
menu() {
if (this.role === "ADMIN") {
return [
{ path: "/admin/dashboard", label: "Dashboard" },
{ path: "/admin/users", label: "Users" },
{ path: "/admin/elders", label: "Elders" },
{ path: "/admin/schedules", label: "Schedules" },
{ path: "/admin/bills", label: "Bills" },
{ path: "/admin/feedback", label: "Feedback" },
{ path: "/admin/notices", label: "Notices" }
{ path: "/admin/dashboard", label: "运营概览" },
{ path: "/admin/users", label: "账号管理" },
{ path: "/admin/elders", label: "长者档案" },
{ path: "/admin/schedules", label: "排班管理" },
{ path: "/admin/bills", label: "账单管理" },
{ path: "/admin/feedback", label: "反馈处理" },
{ path: "/admin/notices", label: "通知公告" }
];
}
if (this.role === "NURSE") {
return [
{ path: "/nurse/dashboard", label: "Dashboard" },
{ path: "/nurse/schedules", label: "My Schedule" },
{ path: "/nurse/care", label: "Care Records" },
{ path: "/nurse/health", label: "Health Records" },
{ path: "/nurse/handovers", label: "Handovers" },
{ path: "/nurse/notices", label: "Notices" }
{ path: "/nurse/dashboard", label: "工作台" },
{ path: "/nurse/schedules", label: "我的排班" },
{ path: "/nurse/care", label: "护理记录" },
{ path: "/nurse/health", label: "健康监测" },
{ path: "/nurse/handovers", label: "交班记录" },
{ path: "/nurse/notices", label: "通知中心" }
];
}
return [
{ path: "/family/dashboard", label: "Dashboard" },
{ path: "/family/elders", label: "Elders" },
{ path: "/family/care", label: "Daily Care" },
{ path: "/family/health", label: "Health" },
{ path: "/family/bills", label: "Bills" },
{ path: "/family/feedback", label: "Feedback" },
{ path: "/family/notices", label: "Notices" }
{ path: "/family/dashboard", label: "家属首页" },
{ path: "/family/elders", label: "亲人档案" },
{ path: "/family/care", label: "每日动态" },
{ path: "/family/health", label: "健康记录" },
{ path: "/family/bills", label: "账单支付" },
{ path: "/family/feedback", label: "服务反馈" },
{ path: "/family/notices", label: "通知中心" }
];
},
activeMenu() {
return this.$route.path;
},
roleLabel() {
if (this.role === "ADMIN") return "Administrator";
if (this.role === "NURSE") return "Nurse";
return "Family";
if (this.role === "ADMIN") return "管理员";
if (this.role === "NURSE") return "护工";
return "家属";
}
},
methods: {

View File

@@ -1,19 +1,19 @@
<template>
<div class="login-page">
<div class="login-card">
<h2>Welcome Back</h2>
<h2>欢迎登录</h2>
<el-form :model="form" label-position="top">
<el-form-item label="Username">
<el-input v-model="form.username" placeholder="username"></el-input>
<el-form-item label="账号">
<el-input v-model="form.username" placeholder="请输入账号"></el-input>
</el-form-item>
<el-form-item label="Password">
<el-input v-model="form.password" type="password" placeholder="password"></el-input>
<el-form-item label="密码">
<el-input v-model="form.password" type="password" placeholder="请输入密码"></el-input>
</el-form-item>
<el-button type="primary" style="width: 100%;" @click="handleLogin">Login</el-button>
<el-button type="primary" style="width: 100%;" @click="handleLogin">登录</el-button>
</el-form>
<div class="login-footer">
<span>No account?</span>
<el-button type="text" @click="$router.push('/register')">Register</el-button>
<span>还没有账号</span>
<el-button type="text" @click="$router.push('/register')">注册</el-button>
</div>
</div>
</div>

View File

@@ -1,30 +1,30 @@
<template>
<div class="login-page">
<div class="login-card">
<h2>Family Register</h2>
<h2>家属注册</h2>
<el-form :model="form" label-position="top">
<el-form-item label="Username">
<el-form-item label="账号">
<el-input v-model="form.username"></el-input>
</el-form-item>
<el-form-item label="Password">
<el-form-item label="密码">
<el-input v-model="form.password" type="password"></el-input>
</el-form-item>
<el-form-item label="Name">
<el-form-item label="姓名">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="Phone">
<el-form-item label="手机号">
<el-input v-model="form.phone"></el-input>
</el-form-item>
<el-form-item label="Elder ID Card">
<el-form-item label="亲属身份证号">
<el-input v-model="form.elderIdCard"></el-input>
</el-form-item>
<el-form-item label="Relationship">
<el-input v-model="form.relationship" placeholder="son/daughter/spouse"></el-input>
<el-form-item label="关系">
<el-input v-model="form.relationship" placeholder="如:儿子/女儿/配偶"></el-input>
</el-form-item>
<el-button type="primary" style="width: 100%;" @click="handleRegister">Register</el-button>
<el-button type="primary" style="width: 100%;" @click="handleRegister">注册</el-button>
</el-form>
<div class="login-footer">
<el-button type="text" @click="$router.push('/login')">Back to Login</el-button>
<el-button type="text" @click="$router.push('/login')">返回登录</el-button>
</div>
</div>
</div>

View File

@@ -1,31 +1,31 @@
<template>
<div class="page-card">
<h3>Billing</h3>
<h3>账单管理</h3>
<div style="display:flex; gap: 12px; margin-bottom: 12px;">
<el-input v-model="filterElderId" placeholder="Elder ID" style="width: 200px;" />
<el-button type="primary" @click="load">Search</el-button>
<el-button @click="showCreate = true">New Bill</el-button>
<el-input v-model="filterElderId" placeholder="长者ID" style="width: 200px;" />
<el-button type="primary" @click="load">查询</el-button>
<el-button @click="showCreate = true">新建账单</el-button>
</div>
<el-table :data="bills" stripe>
<el-table-column prop="id" label="ID" width="80" />
<el-table-column prop="elderId" label="Elder ID" width="100" />
<el-table-column prop="month" label="Month" />
<el-table-column prop="total" label="Total" />
<el-table-column prop="status" label="Status" />
<el-table-column prop="id" label="编号" width="80" />
<el-table-column prop="elderId" label="长者ID" width="100" />
<el-table-column prop="month" label="月份" />
<el-table-column prop="total" label="金额" />
<el-table-column prop="status" label="状态" />
</el-table>
<el-dialog title="New Bill" :visible.sync="showCreate">
<el-dialog title="新建账单" :visible.sync="showCreate">
<el-form :model="form" label-width="120px">
<el-form-item label="Elder ID"><el-input v-model="form.elderId"/></el-form-item>
<el-form-item label="Month"><el-input v-model="form.month" placeholder="YYYY-MM"/></el-form-item>
<el-form-item label="Bed Fee"><el-input v-model="form.bedFee"/></el-form-item>
<el-form-item label="Care Fee"><el-input v-model="form.careFee"/></el-form-item>
<el-form-item label="Meal Fee"><el-input v-model="form.mealFee"/></el-form-item>
<el-form-item label="Other Fee"><el-input v-model="form.otherFee"/></el-form-item>
<el-form-item label="长者ID"><el-input v-model="form.elderId"/></el-form-item>
<el-form-item label="月份"><el-input v-model="form.month" placeholder="YYYY-MM"/></el-form-item>
<el-form-item label="床位费"><el-input v-model="form.bedFee"/></el-form-item>
<el-form-item label="护理费"><el-input v-model="form.careFee"/></el-form-item>
<el-form-item label="餐饮费"><el-input v-model="form.mealFee"/></el-form-item>
<el-form-item label="其他费用"><el-input v-model="form.otherFee"/></el-form-item>
</el-form>
<span slot="footer">
<el-button @click="showCreate = false">Cancel</el-button>
<el-button type="primary" @click="create">Create</el-button>
<el-button @click="showCreate = false">取消</el-button>
<el-button type="primary" @click="create">创建</el-button>
</span>
</el-dialog>
</div>

View File

@@ -1,28 +1,28 @@
<template>
<div class="page-card">
<h3>Admin Dashboard</h3>
<h3>运营概览</h3>
<el-row :gutter="16" style="margin-top: 12px;">
<el-col :span="6">
<el-card>
<div>Elders</div>
<div>在住长者</div>
<h2>{{ stats.elders }}</h2>
</el-card>
</el-col>
<el-col :span="6">
<el-card>
<div>Nurses</div>
<div>护工数量</div>
<h2>{{ stats.nurses }}</h2>
</el-card>
</el-col>
<el-col :span="6">
<el-card>
<div>Families</div>
<div>家属数量</div>
<h2>{{ stats.families }}</h2>
</el-card>
</el-col>
<el-col :span="6">
<el-card>
<div>Income</div>
<div>累计收入</div>
<h2>{{ stats.income }}</h2>
</el-card>
</el-col>

View File

@@ -1,57 +1,89 @@
<template>
<div class="page-card">
<div style="display:flex; justify-content: space-between; align-items:center;">
<h3>Elders</h3>
<el-button type="primary" @click="showCreate = true">Add Elder</el-button>
<h3>长者档案</h3>
<el-button type="primary" @click="showCreate = true">新增长者</el-button>
</div>
<el-table :data="elders" stripe>
<el-table-column prop="id" label="ID" width="80" />
<el-table-column prop="name" label="Name" />
<el-table-column prop="gender" label="Gender" width="80" />
<el-table-column prop="idCard" label="ID Card" />
<el-table-column prop="roomNo" label="Room" width="100" />
<el-table-column prop="careLevel" label="Care Level" />
<el-table-column label="Actions" width="200">
<el-table-column prop="id" label="编号" width="80" />
<el-table-column prop="name" label="姓名" />
<el-table-column prop="gender" label="性别" width="80" />
<el-table-column prop="idCard" label="身份证号" />
<el-table-column prop="roomNo" label="房间号" width="100" />
<el-table-column prop="careLevel" label="护理等级" />
<el-table-column label="操作" width="200">
<template slot-scope="scope">
<el-button size="mini" @click="editElder(scope.row)">Edit</el-button>
<el-button size="mini" type="danger" @click="deleteElder(scope.row)">Delete</el-button>
<el-button size="mini" @click="editElder(scope.row)">编辑</el-button>
<el-button size="mini" type="danger" @click="deleteElder(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog title="Add Elder" :visible.sync="showCreate">
<el-dialog title="新增长者" :visible.sync="showCreate">
<el-form :model="form" label-width="120px">
<el-form-item label="Name"><el-input v-model="form.name"/></el-form-item>
<el-form-item label="Gender"><el-input v-model="form.gender"/></el-form-item>
<el-form-item label="ID Card"><el-input v-model="form.idCard"/></el-form-item>
<el-form-item label="Birthday"><el-date-picker v-model="form.birthday" type="date"/></el-form-item>
<el-form-item label="Room No"><el-input v-model="form.roomNo"/></el-form-item>
<el-form-item label="Check In"><el-date-picker v-model="form.checkInDate" type="date"/></el-form-item>
<el-form-item label="Care Level"><el-input v-model="form.careLevel"/></el-form-item>
<el-form-item label="Status"><el-input v-model="form.status"/></el-form-item>
<el-form-item label="Remark"><el-input v-model="form.remark"/></el-form-item>
<el-form-item label="姓名"><el-input v-model="form.name"/></el-form-item>
<el-form-item label="性别">
<el-select v-model="form.gender" placeholder="选择性别">
<el-option label="男" value="M" />
<el-option label="女" value="F" />
</el-select>
</el-form-item>
<el-form-item label="身份证号"><el-input v-model="form.idCard" @input="syncBirthday('create')"/></el-form-item>
<el-form-item label="出生日期"><el-date-picker v-model="form.birthday" type="date"/></el-form-item>
<el-form-item label="房间号"><el-input v-model="form.roomNo"/></el-form-item>
<el-form-item label="入住日期"><el-date-picker v-model="form.checkInDate" type="date"/></el-form-item>
<el-form-item label="护理等级">
<el-select v-model="form.careLevel" placeholder="选择护理等级">
<el-option label="一级" value="一级" />
<el-option label="二级" value="二级" />
<el-option label="三级" value="三级" />
</el-select>
</el-form-item>
<el-form-item label="状态">
<el-select v-model="form.status" placeholder="选择状态">
<el-option label="在住" value="在住" />
<el-option label="离院" value="离院" />
</el-select>
</el-form-item>
<el-form-item label="备注"><el-input v-model="form.remark"/></el-form-item>
</el-form>
<span slot="footer">
<el-button @click="showCreate = false">Cancel</el-button>
<el-button type="primary" @click="createElder">Create</el-button>
<el-button @click="showCreate = false">取消</el-button>
<el-button type="primary" @click="createElder">创建</el-button>
</span>
</el-dialog>
<el-dialog title="Edit Elder" :visible.sync="showEdit">
<el-dialog title="编辑长者" :visible.sync="showEdit">
<el-form :model="editForm" label-width="120px">
<el-form-item label="Name"><el-input v-model="editForm.name"/></el-form-item>
<el-form-item label="Gender"><el-input v-model="editForm.gender"/></el-form-item>
<el-form-item label="ID Card"><el-input v-model="editForm.idCard"/></el-form-item>
<el-form-item label="Birthday"><el-date-picker v-model="editForm.birthday" type="date"/></el-form-item>
<el-form-item label="Room No"><el-input v-model="editForm.roomNo"/></el-form-item>
<el-form-item label="Check In"><el-date-picker v-model="editForm.checkInDate" type="date"/></el-form-item>
<el-form-item label="Care Level"><el-input v-model="editForm.careLevel"/></el-form-item>
<el-form-item label="Status"><el-input v-model="editForm.status"/></el-form-item>
<el-form-item label="Remark"><el-input v-model="editForm.remark"/></el-form-item>
<el-form-item label="姓名"><el-input v-model="editForm.name"/></el-form-item>
<el-form-item label="性别">
<el-select v-model="editForm.gender" placeholder="选择性别">
<el-option label="男" value="M" />
<el-option label="女" value="F" />
</el-select>
</el-form-item>
<el-form-item label="身份证号"><el-input v-model="editForm.idCard" @input="syncBirthday('edit')"/></el-form-item>
<el-form-item label="出生日期"><el-date-picker v-model="editForm.birthday" type="date"/></el-form-item>
<el-form-item label="房间号"><el-input v-model="editForm.roomNo"/></el-form-item>
<el-form-item label="入住日期"><el-date-picker v-model="editForm.checkInDate" type="date"/></el-form-item>
<el-form-item label="护理等级">
<el-select v-model="editForm.careLevel" placeholder="选择护理等级">
<el-option label="一级" value="一级" />
<el-option label="二级" value="二级" />
<el-option label="三级" value="三级" />
</el-select>
</el-form-item>
<el-form-item label="状态">
<el-select v-model="editForm.status" placeholder="选择状态">
<el-option label="在住" value="在住" />
<el-option label="离院" value="离院" />
</el-select>
</el-form-item>
<el-form-item label="备注"><el-input v-model="editForm.remark"/></el-form-item>
</el-form>
<span slot="footer">
<el-button @click="showEdit = false">Cancel</el-button>
<el-button type="primary" @click="updateElder">Save</el-button>
<el-button @click="showEdit = false">取消</el-button>
<el-button type="primary" @click="updateElder">保存</el-button>
</span>
</el-dialog>
</div>
@@ -122,6 +154,30 @@ export default {
} catch (e) {
this.$message.error(e.message || "delete failed");
}
},
syncBirthday(type) {
const target = type === "edit" ? this.editForm : this.form;
if (!target || !target.idCard) return;
const id = target.idCard.trim();
if (id.length === 18) {
const year = id.substring(6, 10);
const month = id.substring(10, 12);
const day = id.substring(12, 14);
target.birthday = `${year}-${month}-${day}`;
const genderFlag = parseInt(id.substring(16, 17), 10);
if (!Number.isNaN(genderFlag)) {
target.gender = genderFlag % 2 === 0 ? "F" : "M";
}
} else if (id.length === 15) {
const year = `19${id.substring(6, 8)}`;
const month = id.substring(8, 10);
const day = id.substring(10, 12);
target.birthday = `${year}-${month}-${day}`;
const genderFlag = parseInt(id.substring(14, 15), 10);
if (!Number.isNaN(genderFlag)) {
target.gender = genderFlag % 2 === 0 ? "F" : "M";
}
}
}
}
};

View File

@@ -1,35 +1,35 @@
<template>
<div class="page-card">
<h3>Feedback</h3>
<h3>反馈处理</h3>
<el-table :data="items" stripe>
<el-table-column prop="id" label="ID" width="80" />
<el-table-column prop="elderId" label="Elder ID" />
<el-table-column prop="type" label="Type" />
<el-table-column prop="content" label="Content" />
<el-table-column prop="status" label="Status" width="120" />
<el-table-column label="Actions" width="200">
<el-table-column prop="id" label="编号" width="80" />
<el-table-column prop="elderId" label="长者ID" />
<el-table-column prop="type" label="类型" />
<el-table-column prop="content" label="内容" />
<el-table-column prop="status" label="状态" width="120" />
<el-table-column label="操作" width="200">
<template slot-scope="scope">
<el-button size="mini" @click="openReply(scope.row)">Reply</el-button>
<el-button size="mini" @click="openReply(scope.row)">回复</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog title="Reply" :visible.sync="showReply">
<el-dialog title="回复处理" :visible.sync="showReply">
<el-form :model="replyForm" label-width="120px">
<el-form-item label="Status">
<el-form-item label="状态">
<el-select v-model="replyForm.status">
<el-option label="New" value="NEW" />
<el-option label="Processing" value="PROCESSING" />
<el-option label="Closed" value="CLOSED" />
<el-option label="新建" value="NEW" />
<el-option label="处理中" value="PROCESSING" />
<el-option label="已关闭" value="CLOSED" />
</el-select>
</el-form-item>
<el-form-item label="Reply">
<el-form-item label="回复">
<el-input v-model="replyForm.reply" type="textarea" />
</el-form-item>
</el-form>
<span slot="footer">
<el-button @click="showReply = false">Cancel</el-button>
<el-button type="primary" @click="saveReply">Save</el-button>
<el-button @click="showReply = false">取消</el-button>
<el-button type="primary" @click="saveReply">保存</el-button>
</span>
</el-dialog>
</div>

View File

@@ -1,32 +1,32 @@
<template>
<div class="page-card">
<h3>Notices</h3>
<h3>通知公告</h3>
<div style="margin-bottom: 12px;">
<el-button type="primary" @click="showCreate = true">New Notice</el-button>
<el-button type="primary" @click="showCreate = true">发布通知</el-button>
</div>
<el-table :data="items" stripe>
<el-table-column prop="id" label="ID" width="80" />
<el-table-column prop="title" label="Title" />
<el-table-column prop="targetRole" label="Target" width="120" />
<el-table-column prop="createdAt" label="Created" />
<el-table-column prop="id" label="编号" width="80" />
<el-table-column prop="title" label="标题" />
<el-table-column prop="targetRole" label="对象" width="120" />
<el-table-column prop="createdAt" label="创建时间" />
</el-table>
<el-dialog title="New Notice" :visible.sync="showCreate">
<el-dialog title="发布通知" :visible.sync="showCreate">
<el-form :model="form" label-width="120px">
<el-form-item label="Title"><el-input v-model="form.title"/></el-form-item>
<el-form-item label="Content"><el-input v-model="form.content" type="textarea"/></el-form-item>
<el-form-item label="Target Role">
<el-form-item label="标题"><el-input v-model="form.title"/></el-form-item>
<el-form-item label="内容"><el-input v-model="form.content" type="textarea"/></el-form-item>
<el-form-item label="通知对象">
<el-select v-model="form.targetRole">
<el-option label="All" value="ALL" />
<el-option label="Nurse" value="NURSE" />
<el-option label="Family" value="FAMILY" />
<el-option label="全部" value="ALL" />
<el-option label="护工" value="NURSE" />
<el-option label="家属" value="FAMILY" />
</el-select>
</el-form-item>
<el-form-item label="Target User ID"><el-input v-model="form.targetUserId"/></el-form-item>
<el-form-item label="指定用户ID"><el-input v-model="form.targetUserId"/></el-form-item>
</el-form>
<span slot="footer">
<el-button @click="showCreate = false">Cancel</el-button>
<el-button type="primary" @click="create">Create</el-button>
<el-button @click="showCreate = false">取消</el-button>
<el-button type="primary" @click="create">发布</el-button>
</span>
</el-dialog>
</div>

View File

@@ -1,48 +1,48 @@
<template>
<div class="page-card">
<h3>Schedule Management</h3>
<h3>排班管理</h3>
<div style="margin: 12px 0; display:flex; gap: 12px;">
<el-date-picker v-model="date" type="date" placeholder="Pick date" />
<el-button type="primary" @click="load">Search</el-button>
<el-button @click="showCreate = true">Add Schedule</el-button>
<el-date-picker v-model="date" type="date" placeholder="选择日期" />
<el-button type="primary" @click="load">查询</el-button>
<el-button @click="showCreate = true">新增排班</el-button>
</div>
<el-table :data="schedules" stripe>
<el-table-column prop="id" label="ID" width="80" />
<el-table-column prop="nurseId" label="Nurse ID" width="100" />
<el-table-column prop="date" label="Date" />
<el-table-column prop="shift" label="Shift" />
<el-table-column prop="task" label="Task" />
<el-table-column label="Actions" width="200">
<el-table-column prop="id" label="编号" width="80" />
<el-table-column prop="nurseId" label="护工ID" width="100" />
<el-table-column prop="date" label="日期" />
<el-table-column prop="shift" label="班次" />
<el-table-column prop="task" label="任务" />
<el-table-column label="操作" width="200">
<template slot-scope="scope">
<el-button size="mini" @click="edit(scope.row)">Edit</el-button>
<el-button size="mini" type="danger" @click="remove(scope.row)">Delete</el-button>
<el-button size="mini" @click="edit(scope.row)">编辑</el-button>
<el-button size="mini" type="danger" @click="remove(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog title="Schedule" :visible.sync="showCreate">
<el-dialog title="新增排班" :visible.sync="showCreate">
<el-form :model="form" label-width="120px">
<el-form-item label="Nurse ID"><el-input v-model="form.nurseId"/></el-form-item>
<el-form-item label="Date"><el-date-picker v-model="form.date" type="date"/></el-form-item>
<el-form-item label="Shift"><el-input v-model="form.shift"/></el-form-item>
<el-form-item label="Task"><el-input v-model="form.task"/></el-form-item>
<el-form-item label="护工ID"><el-input v-model="form.nurseId"/></el-form-item>
<el-form-item label="日期"><el-date-picker v-model="form.date" type="date"/></el-form-item>
<el-form-item label="班次"><el-input v-model="form.shift"/></el-form-item>
<el-form-item label="任务"><el-input v-model="form.task"/></el-form-item>
</el-form>
<span slot="footer">
<el-button @click="showCreate = false">Cancel</el-button>
<el-button type="primary" @click="create">Save</el-button>
<el-button @click="showCreate = false">取消</el-button>
<el-button type="primary" @click="create">保存</el-button>
</span>
</el-dialog>
<el-dialog title="Edit Schedule" :visible.sync="showEdit">
<el-dialog title="编辑排班" :visible.sync="showEdit">
<el-form :model="editForm" label-width="120px">
<el-form-item label="Nurse ID"><el-input v-model="editForm.nurseId"/></el-form-item>
<el-form-item label="Date"><el-date-picker v-model="editForm.date" type="date"/></el-form-item>
<el-form-item label="Shift"><el-input v-model="editForm.shift"/></el-form-item>
<el-form-item label="Task"><el-input v-model="editForm.task"/></el-form-item>
<el-form-item label="护工ID"><el-input v-model="editForm.nurseId"/></el-form-item>
<el-form-item label="日期"><el-date-picker v-model="editForm.date" type="date"/></el-form-item>
<el-form-item label="班次"><el-input v-model="editForm.shift"/></el-form-item>
<el-form-item label="任务"><el-input v-model="editForm.task"/></el-form-item>
</el-form>
<span slot="footer">
<el-button @click="showEdit = false">Cancel</el-button>
<el-button type="primary" @click="update">Save</el-button>
<el-button @click="showEdit = false">取消</el-button>
<el-button type="primary" @click="update">保存</el-button>
</span>
</el-dialog>
</div>

View File

@@ -1,71 +1,71 @@
<template>
<div class="page-card">
<div style="display:flex; justify-content: space-between; align-items:center;">
<h3>User Management</h3>
<el-button type="primary" @click="showCreate = true">New User</el-button>
<h3>账号管理</h3>
<el-button type="primary" @click="showCreate = true">新建用户</el-button>
</div>
<div style="margin: 12px 0;">
<el-select v-model="role" placeholder="role" @change="loadUsers">
<el-option label="All" value=""></el-option>
<el-option label="Admin" value="ADMIN"></el-option>
<el-option label="Nurse" value="NURSE"></el-option>
<el-option label="Family" value="FAMILY"></el-option>
<el-select v-model="role" placeholder="角色" @change="loadUsers">
<el-option label="全部" value=""></el-option>
<el-option label="管理员" value="ADMIN"></el-option>
<el-option label="护工" value="NURSE"></el-option>
<el-option label="家属" value="FAMILY"></el-option>
</el-select>
</div>
<el-table :data="users" stripe>
<el-table-column prop="id" label="ID" width="80" />
<el-table-column prop="username" label="Username" />
<el-table-column prop="name" label="Name" />
<el-table-column prop="role" label="Role" width="100" />
<el-table-column prop="status" label="Status" width="100">
<el-table-column prop="id" label="编号" width="80" />
<el-table-column prop="username" label="账号" />
<el-table-column prop="name" label="姓名" />
<el-table-column prop="role" label="角色" width="100" />
<el-table-column prop="status" label="状态" width="100">
<template slot-scope="scope">
<el-tag :type="scope.row.status === 1 ? 'success' : 'info'">
{{ scope.row.status === 1 ? 'Active' : 'Disabled' }}
{{ scope.row.status === 1 ? '启用' : '禁用' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="Actions" width="200">
<el-table-column label="操作" width="200">
<template slot-scope="scope">
<el-button size="mini" @click="editUser(scope.row)">Edit</el-button>
<el-button size="mini" @click="resetPwd(scope.row)">Reset</el-button>
<el-button size="mini" @click="editUser(scope.row)">编辑</el-button>
<el-button size="mini" @click="resetPwd(scope.row)">重置密码</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog title="Create User" :visible.sync="showCreate">
<el-dialog title="新建用户" :visible.sync="showCreate">
<el-form :model="createForm" label-width="120px">
<el-form-item label="Username"><el-input v-model="createForm.username"/></el-form-item>
<el-form-item label="Password"><el-input v-model="createForm.password" type="password"/></el-form-item>
<el-form-item label="Name"><el-input v-model="createForm.name"/></el-form-item>
<el-form-item label="Phone"><el-input v-model="createForm.phone"/></el-form-item>
<el-form-item label="Role">
<el-form-item label="账号"><el-input v-model="createForm.username"/></el-form-item>
<el-form-item label="密码"><el-input v-model="createForm.password" type="password"/></el-form-item>
<el-form-item label="姓名"><el-input v-model="createForm.name"/></el-form-item>
<el-form-item label="手机号"><el-input v-model="createForm.phone"/></el-form-item>
<el-form-item label="角色">
<el-select v-model="createForm.role">
<el-option label="Admin" value="ADMIN"/>
<el-option label="Nurse" value="NURSE"/>
<el-option label="Family" value="FAMILY"/>
<el-option label="管理员" value="ADMIN"/>
<el-option label="护工" value="NURSE"/>
<el-option label="家属" value="FAMILY"/>
</el-select>
</el-form-item>
</el-form>
<span slot="footer">
<el-button @click="showCreate = false">Cancel</el-button>
<el-button type="primary" @click="createUser">Create</el-button>
<el-button @click="showCreate = false">取消</el-button>
<el-button type="primary" @click="createUser">创建</el-button>
</span>
</el-dialog>
<el-dialog title="Edit User" :visible.sync="showEdit">
<el-dialog title="编辑用户" :visible.sync="showEdit">
<el-form :model="editForm" label-width="120px">
<el-form-item label="Name"><el-input v-model="editForm.name"/></el-form-item>
<el-form-item label="Phone"><el-input v-model="editForm.phone"/></el-form-item>
<el-form-item label="Status">
<el-form-item label="姓名"><el-input v-model="editForm.name"/></el-form-item>
<el-form-item label="手机号"><el-input v-model="editForm.phone"/></el-form-item>
<el-form-item label="状态">
<el-select v-model="editForm.status">
<el-option label="Active" :value="1"/>
<el-option label="Disabled" :value="0"/>
<el-option label="启用" :value="1"/>
<el-option label="禁用" :value="0"/>
</el-select>
</el-form-item>
</el-form>
<span slot="footer">
<el-button @click="showEdit = false">Cancel</el-button>
<el-button type="primary" @click="updateUser">Save</el-button>
<el-button @click="showEdit = false">取消</el-button>
<el-button type="primary" @click="updateUser">保存</el-button>
</span>
</el-dialog>
</div>

View File

@@ -1,19 +1,19 @@
<template>
<div class="page-card">
<h3>Bills</h3>
<h3>账单支付</h3>
<div style="margin-bottom: 12px;">
<el-select v-model="elderId" placeholder="Select elder" @change="load">
<el-select v-model="elderId" placeholder="选择亲人" @change="load">
<el-option v-for="elder in elders" :key="elder.id" :label="elder.name" :value="elder.id" />
</el-select>
</div>
<el-table :data="items" stripe>
<el-table-column prop="month" label="Month" />
<el-table-column prop="total" label="Total" />
<el-table-column prop="status" label="Status" />
<el-table-column label="Actions" width="160">
<el-table-column prop="month" label="月份" />
<el-table-column prop="total" label="金额" />
<el-table-column prop="status" label="状态" />
<el-table-column label="操作" width="160">
<template slot-scope="scope">
<el-button size="mini" type="primary" @click="pay(scope.row)" :disabled="scope.row.status === 'PAID'">
Pay
支付
</el-button>
</template>
</el-table-column>

View File

@@ -1,15 +1,15 @@
<template>
<div class="page-card">
<h3>Daily Care</h3>
<h3>每日动态</h3>
<div style="margin-bottom: 12px;">
<el-select v-model="elderId" placeholder="Select elder" @change="load">
<el-select v-model="elderId" placeholder="选择亲人" @change="load">
<el-option v-for="elder in elders" :key="elder.id" :label="elder.name" :value="elder.id" />
</el-select>
</div>
<el-table :data="items" stripe>
<el-table-column prop="recordTime" label="Time" />
<el-table-column prop="content" label="Content" />
<el-table-column prop="attachmentUrl" label="Attachment" />
<el-table-column prop="recordTime" label="时间" />
<el-table-column prop="content" label="护理内容" />
<el-table-column prop="attachmentUrl" label="附件" />
</el-table>
</div>
</template>

View File

@@ -1,6 +1,6 @@
<template>
<div class="page-card">
<h3>Family Dashboard</h3>
<p>View elder status, bills, and send feedback.</p>
<h3>家属首页</h3>
<p>查看亲人情况账单与服务反馈</p>
</div>
</template>

View File

@@ -1,11 +1,11 @@
<template>
<div class="page-card">
<h3>Elders</h3>
<h3>亲人档案</h3>
<el-table :data="elders" stripe>
<el-table-column prop="name" label="Name" />
<el-table-column prop="gender" label="Gender" width="80" />
<el-table-column prop="roomNo" label="Room" width="100" />
<el-table-column prop="careLevel" label="Care Level" />
<el-table-column prop="name" label="姓名" />
<el-table-column prop="gender" label="性别" width="80" />
<el-table-column prop="roomNo" label="房间号" width="100" />
<el-table-column prop="careLevel" label="护理等级" />
</el-table>
</div>
</template>

View File

@@ -1,26 +1,26 @@
<template>
<div class="page-card">
<h3>Feedback</h3>
<h3>服务反馈</h3>
<el-form :model="form" label-width="120px">
<el-form-item label="Elder">
<el-select v-model="form.elderId" placeholder="Select elder">
<el-form-item label="亲人">
<el-select v-model="form.elderId" placeholder="选择亲人">
<el-option v-for="elder in elders" :key="elder.id" :label="elder.name" :value="elder.id" />
</el-select>
</el-form-item>
<el-form-item label="Type">
<el-form-item label="类型">
<el-select v-model="form.type">
<el-option label="Suggestion" value="SUGGESTION" />
<el-option label="Complaint" value="COMPLAINT" />
<el-option label="Praise" value="PRAISE" />
<el-option label="建议" value="SUGGESTION" />
<el-option label="投诉" value="COMPLAINT" />
<el-option label="表扬" value="PRAISE" />
</el-select>
</el-form-item>
<el-form-item label="Content">
<el-form-item label="内容">
<el-input v-model="form.content" type="textarea" />
</el-form-item>
<el-form-item label="Rating">
<el-form-item label="评分">
<el-input v-model="form.rating" />
</el-form-item>
<el-button type="primary" @click="submit">Submit</el-button>
<el-button type="primary" @click="submit">提交</el-button>
</el-form>
</div>
</template>

View File

@@ -1,17 +1,17 @@
<template>
<div class="page-card">
<h3>Health Records</h3>
<h3>健康记录</h3>
<div style="margin-bottom: 12px;">
<el-select v-model="elderId" placeholder="Select elder" @change="load">
<el-select v-model="elderId" placeholder="选择亲人" @change="load">
<el-option v-for="elder in elders" :key="elder.id" :label="elder.name" :value="elder.id" />
</el-select>
</div>
<el-table :data="items" stripe>
<el-table-column prop="recordTime" label="Time" />
<el-table-column prop="temperature" label="Temp" />
<el-table-column prop="bpSystolic" label="BP S" />
<el-table-column prop="bpDiastolic" label="BP D" />
<el-table-column prop="heartRate" label="HR" />
<el-table-column prop="recordTime" label="时间" />
<el-table-column prop="temperature" label="体温" />
<el-table-column prop="bpSystolic" label="收缩压" />
<el-table-column prop="bpDiastolic" label="舒张压" />
<el-table-column prop="heartRate" label="心率" />
</el-table>
</div>
</template>

View File

@@ -1,10 +1,10 @@
<template>
<div class="page-card">
<h3>Notices</h3>
<h3>通知中心</h3>
<el-table :data="items" stripe>
<el-table-column prop="title" label="Title" />
<el-table-column prop="content" label="Content" />
<el-table-column prop="createdAt" label="Created" />
<el-table-column prop="title" label="标题" />
<el-table-column prop="content" label="内容" />
<el-table-column prop="createdAt" label="时间" />
</el-table>
</div>
</template>

View File

@@ -1,28 +1,28 @@
<template>
<div class="page-card">
<h3>Care Records</h3>
<h3>护理记录</h3>
<el-form :model="form" label-width="120px">
<el-form-item label="Elder ID"><el-input v-model="form.elderId"/></el-form-item>
<el-form-item label="Content"><el-input v-model="form.content" type="textarea"/></el-form-item>
<el-form-item label="Record Time"><el-date-picker v-model="form.recordTime" type="datetime"/></el-form-item>
<el-form-item label="Attachment">
<el-form-item label="长者ID"><el-input v-model="form.elderId"/></el-form-item>
<el-form-item label="护理内容"><el-input v-model="form.content" type="textarea"/></el-form-item>
<el-form-item label="记录时间"><el-date-picker v-model="form.recordTime" type="datetime"/></el-form-item>
<el-form-item label="附件">
<el-upload :http-request="upload" :show-file-list="false">
<el-button size="mini">Upload</el-button>
<el-button size="mini">上传</el-button>
</el-upload>
<div v-if="form.attachmentUrl" style="margin-top: 6px;">
Uploaded: {{ form.attachmentUrl }}
已上传: {{ form.attachmentUrl }}
</div>
</el-form-item>
<el-button type="primary" @click="create">Save</el-button>
<el-button type="primary" @click="create">保存</el-button>
</el-form>
<div style="margin-top: 16px;">
<el-input v-model="filterElderId" placeholder="Elder ID" style="width: 200px;" />
<el-button @click="load" style="margin-left: 8px;">Search</el-button>
<el-input v-model="filterElderId" placeholder="长者ID" style="width: 200px;" />
<el-button @click="load" style="margin-left: 8px;">查询</el-button>
<el-table :data="items" stripe style="margin-top: 12px;">
<el-table-column prop="elderId" label="Elder ID" width="100" />
<el-table-column prop="content" label="Content" />
<el-table-column prop="recordTime" label="Record Time" />
<el-table-column prop="elderId" label="长者ID" width="100" />
<el-table-column prop="content" label="护理内容" />
<el-table-column prop="recordTime" label="记录时间" />
</el-table>
</div>
</div>

View File

@@ -1,6 +1,6 @@
<template>
<div class="page-card">
<h3>Nurse Dashboard</h3>
<p>Use the menu to manage schedules and records.</p>
<h3>护工工作台</h3>
<p>通过左侧菜单管理排班与护理记录</p>
</div>
</template>

View File

@@ -1,15 +1,15 @@
<template>
<div class="page-card">
<h3>Handovers</h3>
<h3>交班记录</h3>
<el-form :model="form" label-width="120px">
<el-form-item label="Date"><el-date-picker v-model="form.date" type="date"/></el-form-item>
<el-form-item label="Content"><el-input v-model="form.content" type="textarea"/></el-form-item>
<el-button type="primary" @click="create">Save</el-button>
<el-form-item label="日期"><el-date-picker v-model="form.date" type="date"/></el-form-item>
<el-form-item label="内容"><el-input v-model="form.content" type="textarea"/></el-form-item>
<el-button type="primary" @click="create">保存</el-button>
</el-form>
<el-table :data="items" stripe style="margin-top: 12px;">
<el-table-column prop="date" label="Date" />
<el-table-column prop="content" label="Content" />
<el-table-column prop="date" label="日期" />
<el-table-column prop="content" label="内容" />
</el-table>
</div>
</template>

View File

@@ -1,31 +1,31 @@
<template>
<div class="page-card">
<h3>Health Records</h3>
<h3>健康监测</h3>
<el-form :model="form" label-width="140px">
<el-form-item label="Elder ID"><el-input v-model="form.elderId"/></el-form-item>
<el-form-item label="Temperature"><el-input v-model="form.temperature"/></el-form-item>
<el-form-item label="Blood Pressure">
<el-form-item label="长者ID"><el-input v-model="form.elderId"/></el-form-item>
<el-form-item label="体温"><el-input v-model="form.temperature"/></el-form-item>
<el-form-item label="血压">
<div style="display:flex; gap:8px;">
<el-input v-model="form.bpSystolic" placeholder="Systolic" />
<el-input v-model="form.bpDiastolic" placeholder="Diastolic" />
<el-input v-model="form.bpSystolic" placeholder="收缩压" />
<el-input v-model="form.bpDiastolic" placeholder="舒张压" />
</div>
</el-form-item>
<el-form-item label="Heart Rate"><el-input v-model="form.heartRate"/></el-form-item>
<el-form-item label="Note"><el-input v-model="form.note"/></el-form-item>
<el-form-item label="Record Time"><el-date-picker v-model="form.recordTime" type="datetime"/></el-form-item>
<el-button type="primary" @click="create">Save</el-button>
<el-form-item label="心率"><el-input v-model="form.heartRate"/></el-form-item>
<el-form-item label="备注"><el-input v-model="form.note"/></el-form-item>
<el-form-item label="记录时间"><el-date-picker v-model="form.recordTime" type="datetime"/></el-form-item>
<el-button type="primary" @click="create">保存</el-button>
</el-form>
<div style="margin-top: 16px;">
<el-input v-model="filterElderId" placeholder="Elder ID" style="width: 200px;" />
<el-button @click="load" style="margin-left: 8px;">Search</el-button>
<el-input v-model="filterElderId" placeholder="长者ID" style="width: 200px;" />
<el-button @click="load" style="margin-left: 8px;">查询</el-button>
<el-table :data="items" stripe style="margin-top: 12px;">
<el-table-column prop="elderId" label="Elder ID" width="100" />
<el-table-column prop="temperature" label="Temp" />
<el-table-column prop="bpSystolic" label="BP S" />
<el-table-column prop="bpDiastolic" label="BP D" />
<el-table-column prop="heartRate" label="HR" />
<el-table-column prop="recordTime" label="Record Time" />
<el-table-column prop="elderId" label="长者ID" width="100" />
<el-table-column prop="temperature" label="体温" />
<el-table-column prop="bpSystolic" label="收缩压" />
<el-table-column prop="bpDiastolic" label="舒张压" />
<el-table-column prop="heartRate" label="心率" />
<el-table-column prop="recordTime" label="记录时间" />
</el-table>
</div>
</div>

View File

@@ -1,10 +1,10 @@
<template>
<div class="page-card">
<h3>Notices</h3>
<h3>通知中心</h3>
<el-table :data="items" stripe>
<el-table-column prop="title" label="Title" />
<el-table-column prop="content" label="Content" />
<el-table-column prop="createdAt" label="Created" />
<el-table-column prop="title" label="标题" />
<el-table-column prop="content" label="内容" />
<el-table-column prop="createdAt" label="时间" />
</el-table>
</div>
</template>

View File

@@ -1,14 +1,14 @@
<template>
<div class="page-card">
<h3>My Schedule</h3>
<h3>我的排班</h3>
<div style="margin-bottom: 12px; display:flex; gap: 12px;">
<el-date-picker v-model="date" type="date" placeholder="Pick date" />
<el-button type="primary" @click="load">Search</el-button>
<el-date-picker v-model="date" type="date" placeholder="选择日期" />
<el-button type="primary" @click="load">查询</el-button>
</div>
<el-table :data="items" stripe>
<el-table-column prop="date" label="Date" />
<el-table-column prop="shift" label="Shift" />
<el-table-column prop="task" label="Task" />
<el-table-column prop="date" label="日期" />
<el-table-column prop="shift" label="班次" />
<el-table-column prop="task" label="任务" />
</el-table>
</div>
</template>