Files
intc-vue3/src/views/health/person/index.vue
2025-01-09 17:26:08 +08:00

316 lines
11 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="app-container">
<div class="search-con">
<div class="title">查询条件</div>
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="姓名" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入姓名" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="昵称" prop="nickName">
<el-input v-model="queryParams.nickName" placeholder="请输入昵称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="类型" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择类型" clearable>
<el-option v-for="dict in person_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-form>
<div class="search-btn-con">
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button type="info" icon="Refresh" @click="resetQuery">重置</el-button>
</div>
</div>
<div class="main-con">
<div class="title-con">
<div class="title">基本信息</div>
<div class="operate-btn-con">
<el-button @click="handleAdd" icon="Plus" v-hasPermi="['health:person:add']">新增</el-button>
<el-button :disabled="multiple" icon="Delete" @click="handleDelete" v-hasPermi="['health:person:remove']">删除</el-button>
<!-- <el-button @click="handleExport" icon="Download" v-hasPermi="['health:person:export']">导出</el-button> -->
</div>
</div>
<div class="content-con" v-loading="loading" height="calc(100% - 0.65rem)">
<el-table v-loading="loading" :data="personList" @selection-change="handleSelectionChange" height="calc(100% - 0.65rem)">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="姓名" align="center" prop="name" />
<el-table-column label="昵称" align="center" prop="nickName" />
<el-table-column label="类型" align="center" prop="type">
<template #default="scope">
<dict-tag :options="person_type" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column label="性别" align="center" prop="sex">
<template #default="scope">
<dict-tag :options="sys_user_sex" :value="scope.row.sex" />
</template>
</el-table-column>
<el-table-column label="生日" align="center" prop="birthday" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.birthday, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="年龄" align="center" prop="age" />
<el-table-column label="身高CM" align="center" prop="height" />
<el-table-column label="体重KG" align="center" prop="weight" />
<el-table-column label="排序" align="center" prop="ranking" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template v-slot="scope">
<div class="ctrl-btn d-flex">
<el-tooltip v-for="item in operateList" :key="item.id" class="item" effect="dark" :content="item.title" placement="top">
<el-button :icon="item.icon" v-hasPermi="item.hasPermi" circle @click="handleOperate(item.id, scope.row)"></el-button>
</el-tooltip>
</div>
</template>
</el-table-column>
</el-table>
<el-pagination small background layout="total, prev, pager, next" :total="total" @current-change="handleCurrentChange" />
</div>
</div>
<!-- 添加或修改成员管理对话框 -->
<el-dialog :title="title" v-model="open" width="860px" append-to-body>
<el-form ref="personRef" :model="form" :inline="true" :rules="rules" label-width="100px">
<el-form-item label="姓名" prop="name">
<el-input v-model="form.name" placeholder="请输入姓名" />
</el-form-item>
<el-form-item label="昵称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入昵称" />
</el-form-item>
<el-form-item label="类型" prop="type">
<el-select v-model="form.type" placeholder="请选择类型">
<el-option v-for="dict in person_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="生日" prop="birthday">
<el-date-picker clearable v-model="form.birthday" type="date" value-format="YYYY-MM-DD" placeholder="请选择生日"> </el-date-picker>
</el-form-item>
<el-form-item label="性别" prop="sex">
<el-select v-model="form.sex" placeholder="请选择性别">
<el-option v-for="dict in sys_user_sex" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="身份证" prop="identityCard">
<el-input v-model="form.identityCard" placeholder="请输入身份证" />
</el-form-item>
<el-form-item label="身高" prop="height">
<el-input v-model="form.height" type="number" placeholder="请输入身高">
<template #suffix>CM</template>
</el-input>
</el-form-item>
<el-form-item label="体重" prop="weight">
<el-input v-model="form.weight" type="number" placeholder="请输入体重">
<template #suffix>KG</template>
</el-input>
</el-form-item>
<el-form-item label="排序" style="width: 360px" prop="ranking">
<el-input-number style="width: 360px" v-model="form.ranking" placeholder="排序" />
</el-form-item>
<el-form-item label="备注" style="width: 752px" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<template v-if="title !== '查看成员管理'" #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="Person">
import { listPerson, getPerson, delPerson, addPerson, updatePerson } from '@/api/health/person'
// eslint-disable-next-line no-unused-vars
import { require } from '@/utils/require'
const { proxy } = getCurrentInstance()
const { person_type, sys_user_sex } = proxy.useDict('person_type', 'sys_user_sex')
const personList = ref([])
const open = ref(false)
const loading = ref(true)
const showSearch = ref(true)
const ids = ref([])
const single = ref(true)
const multiple = ref(true)
const total = ref(0)
const title = ref('')
const operateList = ref([
{ id: 'view', icon: 'View', title: '查看', hasPermi: ['health:person:query'] },
{ id: 'edit', icon: 'Edit', title: '修改', hasPermi: ['health:person:edit'] },
{ id: 'delete', icon: 'Delete', title: '删除', hasPermi: ['health:person:remove'] }
])
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
name: null,
type: null,
nickName: null
},
rules: {
name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
type: [{ required: true, message: '类型不能为空', trigger: 'change' }],
sex: [{ required: true, message: '性别不能为空', trigger: 'change' }],
birthday: [{ required: true, message: '生日不能为空', trigger: 'blur' }],
nickName: [{ required: true, message: '昵称不能为空', trigger: 'blur' }]
}
})
const handleOperate = (operate, row) => {
switch (operate) {
case 'view':
handleView(row)
break
case 'edit':
handleUpdate(row)
break
case 'delete':
handleDelete(row)
break
default:
break
}
}
const { queryParams, form, rules } = toRefs(data)
/** 查询成员管理列表 */
function getList() {
loading.value = true
listPerson(queryParams.value).then((response) => {
personList.value = response.rows
total.value = response.total
loading.value = false
})
}
// 取消按钮
function cancel() {
open.value = false
reset()
}
// 表单重置
function reset() {
form.value = {
id: null,
name: null,
type: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
delFlag: null,
remark: null,
birthday: null,
nickName: null,
height: null,
weight: null,
ranking: 0
}
proxy.resetForm('personRef')
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1
getList()
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm('queryRef')
handleQuery()
}
// 分页
const handleCurrentChange = (val) => {
queryParams.value.pageNum = val
getList()
}
// 多选框选中数据
function handleSelectionChange(selection) {
ids.value = selection.map((item) => item.id)
single.value = selection.length !== 1
multiple.value = !selection.length
}
// 查看
const handleView = (row) => {
title.value = '查看成员管理'
form.value = row
open.value = true
}
/** 新增按钮操作 */
function handleAdd() {
reset()
open.value = true
title.value = '添加成员管理'
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset()
const _id = row.id || ids.value
getPerson(_id).then((response) => {
form.value = response.data
open.value = true
title.value = '修改成员管理'
})
}
/** 提交按钮 */
function submitForm() {
proxy.$refs.personRef.validate((valid) => {
if (valid) {
if (form.value.id != null) {
updatePerson(form.value).then((response) => {
proxy.$modal.msgSuccess('修改成功')
open.value = false
getList()
})
} else {
addPerson(form.value).then((response) => {
proxy.$modal.msgSuccess('新增成功')
open.value = false
getList()
})
}
}
})
}
/** 删除按钮操作 */
function handleDelete(row) {
const _ids = row.id || ids.value
proxy.$modal
.confirm('是否确认删除选中的数据项?')
.then(function () {
return delPerson(_ids)
})
.then(() => {
getList()
proxy.$modal.msgSuccess('删除成功')
})
.catch(() => {})
}
/** 导出按钮操作 */
function handleExport() {
proxy.download(
'health/person/export',
{
...queryParams.value
},
`person_${new Date().getTime()}.xlsx`
)
}
getList()
</script>