新建检验项目设置的检验类型页面
This commit is contained in:
478
openhis-ui-vue3/src/views/maintainSystem/Inspection/index.vue
Normal file
478
openhis-ui-vue3/src/views/maintainSystem/Inspection/index.vue
Normal file
@@ -0,0 +1,478 @@
|
|||||||
|
<template>
|
||||||
|
<div class="inspection-container">
|
||||||
|
<!-- 左侧导航 -->
|
||||||
|
<div class="side-nav">
|
||||||
|
<div
|
||||||
|
v-for="(navItem, index) in navItems"
|
||||||
|
:key="index"
|
||||||
|
class="nav-item"
|
||||||
|
:class="{ active: activeNav === index }"
|
||||||
|
@click="activeNav = index"
|
||||||
|
>
|
||||||
|
{{ navItem }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 右侧主内容 -->
|
||||||
|
<div class="main-content">
|
||||||
|
<div class="header-actions">
|
||||||
|
<button class="add-new-btn" @click="addNewRow">
|
||||||
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<line x1="12" y1="5" x2="12" y2="19"></line>
|
||||||
|
<line x1="5" y1="12" x2="19" y2="12"></line>
|
||||||
|
</svg>
|
||||||
|
新增
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="table-container">
|
||||||
|
<table class="data-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>行</th>
|
||||||
|
<th>*大类编码</th>
|
||||||
|
<th>*大类项目名称</th>
|
||||||
|
<th>*执行科室</th>
|
||||||
|
<th>序号</th>
|
||||||
|
<th>备注</th>
|
||||||
|
<th>操作</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr
|
||||||
|
v-for="(row, index) in tableData"
|
||||||
|
:key="row.id"
|
||||||
|
:class="{ 'editing': editingRowId === row.id }"
|
||||||
|
>
|
||||||
|
<td>{{ index + 1 }}</td>
|
||||||
|
<td>
|
||||||
|
<template v-if="editingRowId === row.id">
|
||||||
|
<input v-model="row.code" type="text" :style="inputStyle">
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
{{ row.code }}
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<template v-if="editingRowId === row.id">
|
||||||
|
<input v-model="row.name" type="text" :style="inputStyle">
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
{{ row.name }}
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<template v-if="editingRowId === row.id">
|
||||||
|
<select v-model="row.department" :style="inputStyle">
|
||||||
|
<option
|
||||||
|
v-for="dept in departments"
|
||||||
|
:key="dept"
|
||||||
|
:value="dept"
|
||||||
|
>
|
||||||
|
{{ dept }}
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
{{ row.department }}
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<template v-if="editingRowId === row.id">
|
||||||
|
<input v-model="row.order" type="text" :style="inputStyle">
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
{{ row.order }}
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<template v-if="editingRowId === row.id">
|
||||||
|
<input v-model="row.remark" type="text" :style="inputStyle">
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
{{ row.remark }}
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
<td class="action-cell">
|
||||||
|
<div
|
||||||
|
class="action-btn confirm-btn"
|
||||||
|
@click="handleConfirm(row)"
|
||||||
|
>
|
||||||
|
<svg v-if="editingRowId === row.id" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<polyline points="20 6 9 17 4 12"></polyline>
|
||||||
|
</svg>
|
||||||
|
<span v-else>✓</span>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="editingRowId !== row.id"
|
||||||
|
class="action-btn edit-btn"
|
||||||
|
@click="handleEdit(row)"
|
||||||
|
>
|
||||||
|
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path>
|
||||||
|
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="editingRowId !== row.id"
|
||||||
|
class="action-btn add-btn"
|
||||||
|
@click="handleAdd(row, index)"
|
||||||
|
>
|
||||||
|
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<line x1="12" y1="5" x2="12" y2="19"></line>
|
||||||
|
<line x1="5" y1="12" x2="19" y2="12"></line>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="action-btn delete-btn"
|
||||||
|
@click="handleDelete(row.id)"
|
||||||
|
>
|
||||||
|
<svg v-if="editingRowId === row.id" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<line x1="18" y1="6" x2="6" y2="18"></line>
|
||||||
|
<line x1="6" y1="6" x2="18" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
<span v-else>×</span>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 页码区域 -->
|
||||||
|
<div class="pagination">
|
||||||
|
<div class="page-btn">上一页</div>
|
||||||
|
<div class="page-btn active">1</div>
|
||||||
|
<div class="page-btn">2</div>
|
||||||
|
<div class="page-btn">3</div>
|
||||||
|
<div class="page-btn">下一页</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'InspectionManagement',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
navItems: ['检验类型', '检验项目', '套餐设置'],
|
||||||
|
activeNav: 0,
|
||||||
|
editingRowId: null,
|
||||||
|
nextId: 11,
|
||||||
|
departments: ['医学检验科', '病理科', '放射科', '超声科', '心电图室'],
|
||||||
|
inputStyle: {
|
||||||
|
width: '100%',
|
||||||
|
border: '1px solid #E8E8E8',
|
||||||
|
borderRadius: '4px',
|
||||||
|
padding: '4px'
|
||||||
|
},
|
||||||
|
tableData: [
|
||||||
|
{ id: 1, code: '10', name: '临检(镜检)', department: '医学检验科', order: '999999', remark: '' },
|
||||||
|
{ id: 2, code: '08', name: '临检(尿液)', department: '医学检验科', order: '999999', remark: '' },
|
||||||
|
{ id: 3, code: '06', name: '免疫组化', department: '医学检验科', order: '999999', remark: '' },
|
||||||
|
{ id: 4, code: '04', name: '免疫', department: '医学检验科', order: '999999', remark: '' },
|
||||||
|
{ id: 5, code: '02', name: '常规', department: '医学检验科', order: '999999', remark: '' },
|
||||||
|
{ id: 6, code: '09', name: '病理', department: '医学检验科', order: '999999', remark: '' },
|
||||||
|
{ id: 7, code: '07', name: '临检(血液)', department: '医学检验科', order: '999999', remark: '' },
|
||||||
|
{ id: 8, code: '05', name: '外送', department: '医学检验科', order: '999999', remark: '' },
|
||||||
|
{ id: 9, code: '03', name: '妇科', department: '医学检验科', order: '999999', remark: '' },
|
||||||
|
{ id: 10, code: '01', name: '生化', department: '医学检验科', order: '999999', remark: '' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
addNewRow() {
|
||||||
|
const newRow = {
|
||||||
|
id: this.nextId++,
|
||||||
|
code: '',
|
||||||
|
name: '',
|
||||||
|
department: this.departments[0],
|
||||||
|
order: '',
|
||||||
|
remark: ''
|
||||||
|
}
|
||||||
|
this.tableData.push(newRow)
|
||||||
|
this.editingRowId = newRow.id
|
||||||
|
},
|
||||||
|
|
||||||
|
handleEdit(row) {
|
||||||
|
this.editingRowId = row.id
|
||||||
|
},
|
||||||
|
|
||||||
|
handleConfirm(row) {
|
||||||
|
this.editingRowId = null
|
||||||
|
},
|
||||||
|
|
||||||
|
handleDelete(rowId) {
|
||||||
|
this.tableData = this.tableData.filter(row => row.id !== rowId)
|
||||||
|
},
|
||||||
|
|
||||||
|
handleAdd(row, index) {
|
||||||
|
const newRow = {
|
||||||
|
id: this.nextId++,
|
||||||
|
code: '',
|
||||||
|
name: '',
|
||||||
|
department: this.departments[0],
|
||||||
|
order: '',
|
||||||
|
remark: ''
|
||||||
|
}
|
||||||
|
this.tableData.splice(index + 1, 0, newRow)
|
||||||
|
this.editingRowId = newRow.id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
/* 新增按钮样式 */
|
||||||
|
.header-actions {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.add-new-btn {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
padding: 8px 16px;
|
||||||
|
background-color: rgba(24, 144, 255, 0.1);
|
||||||
|
color: #1890FF;
|
||||||
|
border: 1px solid rgba(24, 144, 255, 0.3);
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 14px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.add-new-btn:hover {
|
||||||
|
background-color: rgba(24, 144, 255, 0.2);
|
||||||
|
transform: translateY(-1px);
|
||||||
|
box-shadow: 0 2px 8px rgba(24, 144, 255, 0.1);
|
||||||
|
}
|
||||||
|
/* 编辑按钮样式 */
|
||||||
|
.edit-btn {
|
||||||
|
background: rgba(250, 173, 20, 0.1);
|
||||||
|
color: #FAAD14;
|
||||||
|
}
|
||||||
|
/* 编辑状态输入框样式 */
|
||||||
|
.data-table input {
|
||||||
|
width: 100%;
|
||||||
|
border: 1px solid #E8E8E8;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 4px 8px;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #333;
|
||||||
|
background-color: #fff;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
.data-table input:focus {
|
||||||
|
outline: none;
|
||||||
|
border-color: #1890FF;
|
||||||
|
box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
|
||||||
|
}
|
||||||
|
/* CSS Reset 和全局样式 */
|
||||||
|
.inspection-container {
|
||||||
|
display: flex;
|
||||||
|
min-height: 100vh;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
color: #000000;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 左侧导航菜单 */
|
||||||
|
.side-nav {
|
||||||
|
width: 160px;
|
||||||
|
background: #FFFFFF;
|
||||||
|
border-right: 1px solid #e8e8e8;
|
||||||
|
padding: 16px 0;
|
||||||
|
height: 100vh;
|
||||||
|
position: fixed;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item {
|
||||||
|
padding: 8px 16px;
|
||||||
|
margin: 4px 8px;
|
||||||
|
font-size: 14px;
|
||||||
|
height: 40px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item:hover {
|
||||||
|
background: #F5F5F5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item.active {
|
||||||
|
background: #1890FF;
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 右侧主内容区 */
|
||||||
|
.main-content {
|
||||||
|
flex: 1;
|
||||||
|
margin-left: 160px;
|
||||||
|
padding: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 表格样式 */
|
||||||
|
.table-container {
|
||||||
|
overflow-x: auto;
|
||||||
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
min-width: 800px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table th, .data-table td {
|
||||||
|
padding: 8px 16px;
|
||||||
|
text-align: left;
|
||||||
|
font-size: 14px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table th {
|
||||||
|
background-color: #F5F5F5;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table td {
|
||||||
|
font-weight: 400;
|
||||||
|
border-bottom: 1px solid #E8E8E8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table tr:hover td {
|
||||||
|
background-color: #E6F7FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 操作按钮样式 */
|
||||||
|
.action-cell {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
gap: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-btn {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
border-radius: 4px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
cursor: pointer;
|
||||||
|
margin: 0 2px;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.confirm-btn {
|
||||||
|
background: rgba(82, 196, 26, 0.1);
|
||||||
|
color: #52C41A;
|
||||||
|
}
|
||||||
|
|
||||||
|
.add-btn {
|
||||||
|
background: rgba(24, 144, 255, 0.1);
|
||||||
|
color: #1890FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
.delete-btn {
|
||||||
|
background: rgba(255, 77, 79, 0.1);
|
||||||
|
color: #FF4D4F;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-btn:hover {
|
||||||
|
transform: translateY(-1px);
|
||||||
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 页码区域 */
|
||||||
|
.pagination {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
margin-top: 16px;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-btn {
|
||||||
|
padding: 8px 16px;
|
||||||
|
margin: 0 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 14px;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-btn:hover {
|
||||||
|
background: #F5F5F5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-btn.active {
|
||||||
|
background: #1890FF;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 响应式设计 */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.side-nav {
|
||||||
|
width: 60px;
|
||||||
|
padding: 16px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item span {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-content {
|
||||||
|
margin-left: 60px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
.side-nav {
|
||||||
|
width: 50px;
|
||||||
|
padding: 16px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-content {
|
||||||
|
margin-left: 50px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 执行科室选择样式 */
|
||||||
|
.department-select {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 4px 8px;
|
||||||
|
border: 1px solid #E8E8E8;
|
||||||
|
border-radius: 4px;
|
||||||
|
color: #BFBFBF;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table select {
|
||||||
|
width: 100%;
|
||||||
|
border: 1px solid #E8E8E8;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 4px 8px;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #333;
|
||||||
|
background-color: #fff;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table select:focus {
|
||||||
|
outline: none;
|
||||||
|
border-color: #1890FF;
|
||||||
|
box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Reference in New Issue
Block a user