This commit is contained in:
zhaoyz 2024-04-28 18:08:16 +08:00
parent 7a6a21c52b
commit 0ef6c81f36
9 changed files with 395 additions and 245 deletions

View File

@ -28,7 +28,7 @@ export function handleHttpUploadUrl(options: any, url: string | undefined) {
let formData = new FormData();
formData.append('file', options.file);
formData.append('dir', options.dir)
return new Promise((resolve, reject) => {
return new Promise((resolve) => {
try {
request({
url: url,
@ -41,7 +41,7 @@ export function handleHttpUploadUrl(options: any, url: string | undefined) {
resolve(res.data)
});
} catch (error) {
reject(error)
resolve(error)
}
})
}

View File

@ -27,6 +27,16 @@ export function addRole(role: any) {
})
}
export function updateRole(role: any) {
return new Promise(resolve => {
request.put(roleUrl, role).then(res => {
resolve(res.data);
}).catch(err => {
resolve(err);
})
})
}
export function saveRoleMenus(roleId: string, menuIds: string) {
return new Promise(resolve => {
request.put(saveRoleMenuUrl, {roleId, menuIds})
@ -48,3 +58,14 @@ export function getDetails(id: string) {
})
}
export function deleteById(ids: []) {
return new Promise(resolve => {
request.delete(roleUrl, {data: ids})
.then(res => {
resolve(res.data)
}).catch(err => {
resolve(err);
});
})
}

29
src/api/sys-message.ts Normal file
View File

@ -0,0 +1,29 @@
import request from "@/utils/request";
const saveUrl = "/admin/sysMessage/save";
const pageUrl = "/admin/sysMessage/page";
export function save(message: any, organization?: [], permissions?: []) {
return new Promise(resolve => {
request.postForm(saveUrl, message).then(res => {
resolve(res.data);
}).catch(err => {
resolve(err);
})
})
}
export function page(current: number, size: number, condition?: {category: string, message: string}) {
return new Promise(resolve => {
request.postForm(pageUrl, {
current: current,
size: size,
category: condition?.category,
message: condition?.message
}).then(res => {
resolve(res.data)
}).catch(err => {
resolve(err);
})
})
}

View File

@ -62,15 +62,19 @@ const importData = () => {
return
}
uploadRef.value.submit()
ElMessage.success('上传成功')
close()
emit('success')
// emit('error')
}
function handleUpload(options: any) {
handleHttpUploadUrl(options, props.importUrl).then((res: any) => {
console.log(res)
if (res.code == 0) {
ElMessage.success('上传成功')
close()
emit('success')
} else {
ElMessage.error(res.msg ? res.msg : "上传失败")
emit("error");
}
})
}

View File

@ -1,37 +1,38 @@
<template>
<el-form ref="formRef" :model="formData" :rules="rules" label-width="100">
<el-form-item label="消息类型" prop="type">
<el-select v-model="formData.type" placeholder="请选择消息类型">
<el-form-item label="消息类型" prop="category">
<el-select v-model="formData.category" placeholder="请选择消息类型">
<el-option v-for="item in getMessageType()" :key="item.value" :label="item.label"
:value="item.value" />
:value="item.value"/>
</el-select>
</el-form-item>
<el-form-item label="所在医院" prop="hospital">
<!-- <el-form-item label="所在医院" prop="hospital">
<el-select v-model="formData.hospital" placeholder="请选择医院">
<el-option v-for="item in hospitals" :key="item.value" :label="item.label"
:value="item.value" />
<el-option v-for="item in hospitals" :key="item.id" :label="item.name"
:value="item.id"/>
</el-select>
</el-form-item>-->
<el-form-item label="消息内容" prop="message">
<el-input v-model="formData.message" type="textarea" :rows="4" placeholder="请输入消息内容"></el-input>
</el-form-item>
<el-form-item label="消息内容" prop="content">
<el-input v-model="formData.content" type="textarea" :rows="4" placeholder="请输入消息内容"></el-input>
</el-form-item>
<el-form-item label="可见组织" prop="showDept">
<el-select v-model="formData.showDept" multiple placeholder="请选择组织">
<el-option v-for="item in hospitals" :key="item.value" :label="item.label"
:value="item.value" />
<!-- <el-form-item label="可见组织" prop="organization">
<el-select v-model="formData.organization" multiple placeholder="请选择组织">
<el-option v-for="item in hospitals" :key="item.id" :label="item.name"
:value="item.id"/>
</el-select>
</el-form-item>
<el-form-item label="组织权限" prop="permissions">
</el-form-item>-->
<!-- <el-form-item label="组织权限" prop="permissions">
<el-select v-model="formData.permissions" placeholder="请选择组织权限">
<el-option v-for="item in [{value: 'default', label: '当前组织和下一组织可见'}]" :key="item.value" :label="item.label"
:value="item.value" />
<el-option v-for="item in [{value: 'default', label: '当前组织和下一组织可见'}]" :key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>-->
<el-form-item label="跳转链接" prop="href">
<el-input v-model="formData.href" placeholder="跳转链接"></el-input>
</el-form-item>
<el-form-item label="跳转链接" prop="link">
<el-input v-model="formData.link" placeholder="跳转链接"></el-input>
</el-form-item>
<el-form-item label="是否热点" prop="isHot">
<el-switch v-model="formData.isHot" />
<el-form-item label="是否热点" prop="hotspots">
<el-switch v-model="formData.hotspots"/>
</el-form-item>
<div style="text-align: right;">
@ -42,50 +43,44 @@
</template>
<script lang='ts' setup>
import { onMounted, reactive, ref, toRefs, watch } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { getHospitalsData, getMessageType } from '@/static-data/core'
import {onMounted, reactive, ref} from 'vue'
import {ElMessage} from 'element-plus'
import {getMessageType} from '@/static-data/core'
import * as hospitalApi from "@/api/hospital";
import * as sysMessageApi from "@/api/sys-message";
const emit = defineEmits(['close'])
const props = defineProps({
type: String
})
const rules = reactive({
type: [
{ required: true, message: '请选择类型', trigger: ['blur', 'change'] },
category: [
{required: true, message: '请选择类型', trigger: ['blur', 'change']},
],
hospital: [
{ required: true, message: '请选择医院', trigger: ['blur', 'change'] },
{required: true, message: '请选择医院', trigger: ['blur', 'change']},
],
content: [
{ required: true, message: '请输入消息内容', trigger: ['blur', 'change'] },
],
showDept: [
{ required: true, message: '请选择可见组织', trigger: ['blur', 'change'] },
],
permissions: [
{ required: true, message: '请选择组织权限', trigger: ['blur', 'change'] },
message: [
{required: true, message: '请输入消息内容', trigger: ['blur', 'change']},
],
// organization: [
// {required: true, message: '', trigger: ['blur', 'change']},
// ],
// permissions: [
// {required: true, message: '', trigger: ['blur', 'change']},
// ],
})
const formRef = ref()
const formData = ref({
type: '',
category: '',
hospital: '',
content: '',
showDept: '',
message: '',
organization: '',
permissions: '',
link: '',
isHot: true,
href: '',
hotspots: false,
} as any)
const hospitals = ref([] as any)
getHospitalsData().then((res: any) => {
hospitals.value = res
// console.log(res)
})
onMounted(() => {
resetData()
@ -95,31 +90,50 @@ defineExpose({
formData,
resetData,
})
function close() {
emit('close')
}
function resetData() {
getHospitalList()
formRef.value.resetFields()
formData.value = {
type: '',
category: '',
hospital: '',
content: '',
showDept: '',
message: '',
organization: '',
permissions: '',
link: '',
isHot: true,
href: '',
hotspots: false,
}
}
const saveData = async () => {
await formRef.value.validate((valid: any, fields: any) => {
const saveData = () => {
formRef.value.validate((valid: any, fields: any) => {
if (valid) {
sysMessageApi.save(formData.value).then((res: any) => {
if (res.code == 0 && res.data) {
ElMessage.success('保存成功!')
close()
} else {
ElMessage.error(res.msg ? res.msg : "保存失败");
}
})
} else {
// console.log('error submit!', fields)
}
})
}
const getHospitalList = () => {
hospitalApi.getHospitalList().then((res: any) => {
if (res.code == 0) {
hospitals.value = res.data;
}
});
}
</script>
<style lang='scss' scoped>

View File

@ -5,7 +5,7 @@
<div class="search-cell">
<span class="label">消息类型</span>
<el-select v-model="queryParams.type" placeholder="请选择消息类型">
<el-option v-for="item in getMessageType()" :key="item.value" :label="item.label" :value="item.value" />
<el-option v-for="item in getMessageType()" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
</div>
<div class="search-cell">
@ -21,13 +21,13 @@
</div>
<div class="table-part">
<el-table ref="tableRef" v-loading="loading" :data="tableData" height="100%" border show-overflow-tooltip>
<el-table-column property="type" label="消息类型" width="120" align="center" />
<el-table-column property="content" label="消息内容" width="120" align="center" />
<el-table-column property="creator" label="创建人" width="120" align="center" />
<el-table-column property="type" label="消息类型" width="120" align="center"/>
<el-table-column property="content" label="消息内容" width="120" align="center"/>
<el-table-column property="creator" label="创建人" width="120" align="center"/>
<el-table-column label="创建时间" width="220" align="center">
<template #default="scope">{{ dateFormater('yyyy-MM-dd HH:mm:ss', scope.row.creatTime) }}</template>
</el-table-column>
<el-table-column property="editor" label="修改人" width="120" align="center" />
<el-table-column property="editor" label="修改人" width="120" align="center"/>
<el-table-column label="修改时间" width="220" align="center">
<template #default="scope">{{ dateFormater('yyyy-MM-dd HH:mm:ss', scope.row.editTime) }}</template>
</el-table-column>
@ -42,28 +42,27 @@
</el-table>
</div>
<div class="pagination-part">
<CommonPagination :total="100" @paginationChange="paginationChange" />
<CommonPagination :total="100" @paginationChange="paginationChange"/>
</div>
</div>
<el-dialog v-model="isFormDialog" :title="formDialogTitle" width="40%">
<MessageForm ref="messageFormRef" :type="formDialogTitle === '新增消息' ? 'add' : 'edit'"
@close="isFormDialog = false" />
@close="isFormDialog = false"/>
</el-dialog>
</template>
<script lang='ts' setup>
import { onMounted, reactive, ref, toRefs, watch } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { useRouter, useRoute } from 'vue-router'
import {onMounted, ref} from 'vue'
import {useRoute, useRouter} from 'vue-router'
import CommonPagination from '@/components/common-pagination.vue'
import MessageForm from './form/message-form.vue'
import { tableRemoveRow } from '@/utils/table-util'
import { getMessageType } from '@/static-data/core'
import { dateFormater } from '@/utils/date-util'
import {tableRemoveRow} from '@/utils/table-util'
import {getMessageType} from '@/static-data/core'
import {dateFormater} from '@/utils/date-util'
import * as sysMessageApi from "@/api/sys-message";
const router = useRouter()
const route = useRoute()
const tableRef = ref()
const messageFormRef = ref()
const isSearch = ref(true)
@ -72,8 +71,31 @@ const isFormDialog = ref(false)
const formDialogTitle = ref('')
const queryParams = ref({} as any)
const tableData = ref([] as any)
let current = 0;
let size = 10;
const total = ref(0);
queryData({ type: '公告', content: '测试测试测试' })
onMounted(() => {
init();
})
const init = () => {
total.value = 0;
current = 0;
tableData.value = [];
getMessageList();
}
const getMessageList = () => {
sysMessageApi.page(current, size).then((res: any) => {
if (res.code == 0) {
total.value = res.data.total
tableData.value = res.data.records
}
})
}
queryData({type: '公告', content: '测试测试测试'})
function queryData(e: any) {
loading.value = true
@ -105,6 +127,7 @@ const addData = () => {
messageFormRef.value.resetData()
}, 0)
}
const editData = (e: any) => {
isFormDialog.value = true
formDialogTitle.value = '修改'
@ -113,16 +136,20 @@ const editData = (e: any) => {
messageFormRef.value.formData = JSON.parse(JSON.stringify(e))
}, 0)
}
const removeData = (e?: any) => {
const selectRow = e || tableRef.value.getSelectionRows()
tableRemoveRow({ data: selectRow }, (res: boolean) => {
tableRemoveRow({data: selectRow}, (res: boolean) => {
if (res) {
// console.log('', selectRow)
}
})
}
const paginationChange = (page: number, size: number) => {
const paginationChange = (page: number, s: number) => {
current = page;
size = s;
getMessageList();
}
</script>
@ -132,7 +159,7 @@ const paginationChange = (page: number, size: number) => {
padding: 40px 30px;
border: 1px solid $border-color;
&>.search-cell~.search-cell {
& > .search-cell ~ .search-cell {
margin-left: 50px;
}
@ -140,7 +167,7 @@ const paginationChange = (page: number, size: number) => {
flex-grow: 1;
}
&>.el-button {
& > .el-button {
margin-left: 100px;
}
}

View File

@ -64,7 +64,8 @@
@save="doctorFormSave"/>
</el-dialog>
<ImportDialog ref="importDialogRef" title="用户导入"
templateUrl="/admin/sys-file/local/file/user.xlsx" importUrl="/admin/user/import"/>
templateUrl="/admin/sys-file/local/file/user.xlsx"
importUrl="/admin/user/import"/>
</template>
<script lang='ts' setup>

View File

@ -79,21 +79,43 @@ function close() {
emit('close')
}
function resetData() {
function resetData(form?: any) {
formRef.value.resetFields()
if (form) {
form.menuIds = [];
formData.value = form;
getRoleMenu(form.roleId);
} else {
formData.value = {
roleId: '',
roleName: '',
roleCode: '',
roleDesc: '',
dataPermissions: '',
menuIds: []
}
}
}
const getRoleMenu = (roleId: string) => {
menuApi.getRoleTree(roleId).then((res: any) => {
treeRef.value.setCheckedKeys(res.data);
})
}
const saveData = async () => {
await formRef.value.validate((valid: any, fields: any) => {
if (valid) {
const form = Object.assign({}, formData.value);
if (props.type == "edit") {
updateRole(form);
} else {
addRole(form);
}
}
})
}
const addRole = (form: any) => {
form.menuIds = form.menuIds.join(",");
roleApi.addRole(form).then((res: any) => {
if (res.code == 0) {
@ -103,8 +125,24 @@ const saveData = async () => {
ElMessage.error(res.msg ? res.msg : "保存失败");
}
});
}
const updateRole = async (form: any) => {
const menuIds = form.menuIds.join(",");
delete form.menuIds;
const res: any = await roleApi.updateRole(form);
const res1: any = await roleApi.saveRoleMenus(form.roleId, menuIds);
if (res.code == 0 && res1.code == 0) {
ElMessage.success("保存成功");
close();
} else {
if (res.code == 1) {
ElMessage.error(res.msg ? res.msg : "更新失败");
}
if (res1.code == 1) {
ElMessage.error(res.msg ? res.msg : "授权失败");
}
}
})
}
const checkChange = () => {

View File

@ -60,7 +60,8 @@
<el-dialog v-model="isFormDialog" :title="formDialogTitle" width="30%">
<RoleForm ref="RoleFormRef" :type="formDialogTitle === '添加' ? 'add' : 'edit'" @close="isFormDialog = false"/>
</el-dialog>
<ImportDialog ref="importDialogRef" title="角色导入" templateUrl="#" importUrl="#"/>
<ImportDialog ref="importDialogRef" title="角色导入" templateUrl="/admin/sys-file/local/file/role.xlsx"
importUrl="/admin/role/import" @success="importSuccessEvent"/>
<EmpowerDialog ref="empowerDialogRef"/>
</template>
@ -73,6 +74,7 @@ import RoleForm from './form/role-form.vue'
import ImportDialog from '@/components/import-dialog.vue'
import EmpowerDialog from './form/empower-dialog.vue'
import * as roleApi from "@/api/role";
import {ElMessage} from "element-plus";
const tableRef = ref()
const RoleFormRef = ref()
@ -132,10 +134,21 @@ const importData = () => {
}, 0);
}
const removeData = (e?: any) => {
const selectRow = e || tableRef.value.getSelectionRows()
const selectRow = [e] || tableRef.value.getSelectionRows();
tableRemoveRow({data: selectRow}, (res: boolean) => {
if (res) {
// console.log('', selectRow)
const ids: any = [];
selectRow.forEach((row: any) => {
ids.push(row.roleId);
})
roleApi.deleteById(ids).then((res: any) => {
if (res.code == 0) {
ElMessage.success("删除成功");
init();
} else {
ElMessage.error(res.msg ? res.msg : "删除失败");
}
})
}
})
}
@ -148,8 +161,7 @@ const editData = (e: any) => {
isFormDialog.value = true
formDialogTitle.value = '修改'
setTimeout(() => {
RoleFormRef.value.resetData()
// RoleFormRef.value.formData = JSON.parse(JSON.stringify(e))
RoleFormRef.value.resetData(JSON.parse(JSON.stringify(e)))
}, 0)
}
const tableRowClick = (row: any) => {
@ -161,6 +173,10 @@ const paginationChange = (page: number, s: number) => {
size = s
getRoleList()
}
const importSuccessEvent = () => {
init();
}
</script>
<style lang='scss' scoped>