1.人员信息编辑,科室名称如果过长会被遮盖

2.手机号正则验证
3.人员管理密码正则验证
4.上传图片,附件提示信息优化
5.后台和登陆页字眼修改
6.后台左上角导航遮挡问题
7.系统管理-人员管理,查询问题
8.登陆日志显示问题
9.首页公告查看详情问题
10.数据导出问题处理
11.二维码扫描问题
This commit is contained in:
王创世 2025-04-07 18:54:35 +08:00
parent 93e3eab6bf
commit 9df40c01c7
16 changed files with 130 additions and 54 deletions

BIN
dist.zip Normal file

Binary file not shown.

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>医风医德考评系统</title>
<title>医风医德管理系统</title>
<style>
body {
margin: 0;

View File

@ -10,7 +10,7 @@
<div v-if="!appStore.collapse" class="layui-layer-shade hidden-sm-and-up" @click="collapse"></div>
<!-- 核心菜单 -->
<lay-side :width="sideWidth" :class="appStore.sideTheme == 'dark' ? 'dark changeBgc' : 'light'">
<lay-logo v-if="appStore.logo">医风医德考评系统</lay-logo>
<lay-logo v-if="appStore.logo && !appStore.collapse">医风医德考评系统</lay-logo>
<div class="side-menu-wrapper">
<div class="side-menu1" v-if="appStore.subfield && appStore.subfieldPosition == 'side'">
<global-main-menu :collapse="true" :menus="mainMenus" :selectedKey="mainSelectedKey"
@ -219,6 +219,8 @@ export default {
const currentIndex = ref('1')
const collapse = () => {
console.log(appStore.collapse);
appStore.collapse = !appStore.collapse
}

View File

@ -63,8 +63,8 @@
<lay-form-item required label="处理结果:" prop="acceptance_content">
<lay-textarea placeholder="请输入处理结果" v-model="addData.acceptance_content"></lay-textarea>
</lay-form-item>
<lay-form-item label="附件" mode="block">
<lay-upload ref="uploadRef" :number="1" field="file" :size="1000" :headers="{ token: userStore.token }"
<lay-form-item label="附件" mode="block" tips="大小限制1M">
<lay-upload ref="uploadRef" :beforeUpload="beforeUpload" :number="1" field="file" :headers="{ token: userStore.token }"
:url="baseURL + '/api/common/upload'" @cutdone="getCutDone" v-model="file1" :auto="true" :cut="false"
:cutOptions="cutOptions" @done="getFileDone">
<template #preview>
@ -152,7 +152,7 @@ const addData = reactive({
})
// 访
const upPdf = (row: any) => {
window.open(baseURL + '/api/backend/pdf/exportPdf?id=' + row.id, '_blank')
window.open(baseURL + '/api/backend/pdf/exportPdf?id=' + row.id + '&token=' + userStore.token, '_blank')
}
//
const detailShow = ref(false)
@ -174,6 +174,15 @@ const getCutDone = (res) => {
console.log("getCutDone", res);
cutUrl.value = res.msg;
};
const beforeUpload = (file) => {
var isOver = true;
console.log(file);
if(file.size > 1048576) {
isOver = false;
layer.msg(`文件最大上传为: 1MB`, { icon: 2,time: 2000})
}
return new Promise((resolver) => resolver(isOver));
}
const getFileDone = (res) => {
var date = JSON.parse(res.data);
console.log("getFileDone", date);

View File

@ -67,7 +67,7 @@ const columns = [
{
title: "工号",
width: "120px",
key: "work_number"
key: "code"
},
{
title: "登录IP",

View File

@ -40,8 +40,8 @@
</div>
<lay-layer v-model="showQrCode" title="二维码" :area="['400px', '400px']">
<div style="text-align: center">
<lay-qrcode :text="baseURL+'/h5/pages/index/hospital'" :width="300" v-if="qeCode == 1"></lay-qrcode>
<lay-qrcode :text="baseURL+'/h5/pages/index/hospital_nei'" :width="300" v-if="qeCode == 2"></lay-qrcode>
<lay-qrcode :text="baseURL+'/h5/#/pages/index/hospital'" :width="300" v-if="qeCode == 1"></lay-qrcode>
<lay-qrcode :text="baseURL+'/h5/#/pages/index/hospital_nei'" :width="300" v-if="qeCode == 2"></lay-qrcode>
</div>
</lay-layer>
<lay-layer v-model="showInfo" title="意见详情" :type="4" :area="['600px', '100%']">

View File

@ -378,10 +378,10 @@ const addButton = ref([
layer.msg('请选择考评类型!', {icon: 2, time: 1000})
return;
}
if (addData.time <= 0) {
layer.msg('请填写时间(天)!', {icon: 2, time: 1000})
return;
}
// if (addData.time <= 0) {
// layer.msg('', {icon: 2, time: 1000})
// return;
// }
if (addData.evaluation_start_type == null) {
layer.msg('请选择考评开始类型!', {icon: 2, time: 1000})
return;

View File

@ -162,7 +162,7 @@ const exportExcel = () => {
const ids = selectedKeys.value.join(',');
console.log(ids);
//Excel
window.open(baseURL + '/api/backend/excel_controller/dailyexport?ids=' + ids)
window.open(baseURL + '/api/backend/excel_controller/dailyexport?ids=' + ids + '&token=' + userStore.token)
}
const batchAudit = (type: number) => {

View File

@ -92,8 +92,8 @@
</lay-select-option>
</lay-select>
</lay-form-item>
<lay-form-item label="附件" mode="block">
<lay-upload ref="uploadRef" :number="1" field="file" :size="1000"
<lay-form-item label="附件" mode="block" tips="大小限制1M">
<lay-upload ref="uploadRef" :beforeUpload="beforeUpload" :number="1" field="file"
:headers="{ token: userStore.token }" url="/api/common/upload" @cutdone="getCutDone"
v-model="file1" :auto="true" :cut="false" :cutOptions="cutOptions" @done="getFileDone">
<template #preview>
@ -134,8 +134,14 @@
<lay-descriptions title="其他信息" :column="2" border style="margin-top: 20px">
<lay-descriptions-item label="状态">
<lay-tag size="sm" type="primary">
{{ detailData.status == 1 ? '待审核' : '审核通过' }}
<lay-tag size="sm" type="warm" v-if="detailData.status == 1">
待审核
</lay-tag>
<lay-tag size="sm" type="primary" v-if="detailData.status == 2">
审核通过
</lay-tag>
<lay-tag size="sm" type="danger" v-if="detailData.status == 3">
已驳回
</lay-tag>
</lay-descriptions-item>
<lay-descriptions-item label="备注" :span="2">
@ -237,7 +243,15 @@ const handleItemChange = (value: string | number | object) => {
selectedItemTipsScore.value = selectedItem.single_score_max + '分,最低' + selectedItem.single_score_min + '分';
}
}
const beforeUpload = (file) => {
var isOver = true;
console.log(file);
if(file.size > 1048576) {
isOver = false;
layer.msg(`文件最大上传为: 1MB`, { icon: 2,time: 2000})
}
return new Promise((resolver) => resolver(isOver));
}
onMounted(() => {
getAdditionList()
getHierarchicalData()

View File

@ -89,7 +89,7 @@ const exportExcel = () => {
console.log(ids);
console.log(searchForm.value.month)
//Excel
window.open(baseURL+`/api/backend/excel_controller/groupIndexrecordsex?ids=${ids}&month=${searchForm.value.month}`)
window.open(baseURL+`/api/backend/excel_controller/groupIndexrecordsex?ids=${ids}&month=${searchForm.value.month}&token=${userStore.token}`)
}
const selectedKeys = ref()
const isFold = ref(false)

View File

@ -245,7 +245,7 @@
</lay-card>
<lay-layer v-model="showQrCode" title="二维码" :area="['400px', '400px']">
<div style="text-align: center">
<lay-qrcode :text="baseURL+'/h5/pages/index/user_license?id='+userInfo.id" :width="300"></lay-qrcode>
<lay-qrcode :text="baseURL+'/h5/#/pages/index/user_license?id='+userInfo.id" :width="300"></lay-qrcode>
</div>
</lay-layer>
</div>

View File

@ -17,7 +17,15 @@
</lay-card>
</lay-col>
</lay-row>
<lay-layer title="通知公告详情" v-model="showInfoDetail" :type="4" :area="['700px', '100%']">
<div class="notice-detail">
<div class="notice-info">
<span>时间{{ currentNotice.createtime }}</span>
</div>
<div class="notice-content" v-html="currentNotice.content">
</div>
</div>
</lay-layer>
<lay-row :space="10">
<lay-col :md="24" :sm="24" :xs="24">
<lay-card>
@ -158,6 +166,7 @@ const msgColumns = [
fixed: 'right'
}
]
const showInfoDetail = ref(false);
const dataSource = ref<Notice[]>([]);
const dataMsgSource = ref<Message[]>([]);
@ -190,8 +199,9 @@ const changePage = (ppc) => {
//
const handleViewDetail = (row: Notice) => {
console.log(row);
currentNotice.value = row;
showDetail.value = true;
showInfoDetail.value = true;
};
//
@ -218,13 +228,11 @@ const handleViewMessage = (row: Message) => {
currentMessage.value = row;
showDetail.value = true;
//
if (row.notify_status === 1) {
getMailUpdateMail({ id: row.id }).then((res) => {
if (res.code == 1) {
getMessageList(); //
}
});
}
};
onMounted(() => {

View File

@ -9,10 +9,10 @@
<div class="login-container">
<div class="login-side">
<div class="login-bg-title">
<h1> </h1>
<h1> </h1>
<h3 style="margin: 20px auto">
</h3>
</div>
</div>

View File

@ -124,8 +124,8 @@
<lay-select-option :value="2" label="转账"></lay-select-option>
</lay-select>
</lay-form-item>
<lay-form-item label="附件" mode="block">
<lay-upload ref="uploadRef" :number="1" field="file" :size="1000"
<lay-form-item label="附件" mode="block" tips="大小限制1M">
<lay-upload :beforeUpload="beforeUpload" ref="uploadRef" :number="1" field="file"
:headers="{ token: userStore.token }" url="/api/common/upload" @cutdone="getCutDone"
v-model="file1" :auto="true" :cut="false" :cutOptions="cutOptions" @done="getFileDone">
<template #preview>
@ -213,6 +213,15 @@ const searchForm = ref({
user_id: '',
status: ''
})
const beforeUpload = (file) => {
var isOver = true;
console.log(file);
if(file.size > 1048576) {
isOver = false;
layer.msg(`文件最大上传为: 1MB`, { icon: 2,time: 2000})
}
return new Promise((resolver) => resolver(isOver));
}
//
const page = reactive({

View File

@ -19,7 +19,7 @@
<lay-icon v-else class="layui-icon-right"></lay-icon>
</div>
</div>
<div style="flex: 1; padding: 10px; over-flow: auto">
<div style="flex: 1; padding: 10px; overflow: auto">
<!-- table -->
<lay-card>
<lay-form>
@ -36,16 +36,6 @@
style="width: 98%"></lay-input>
</lay-form-item>
</lay-col>
<lay-col :md="5">
<lay-form-item label="性别" label-width="80">
<lay-select class="search-input" size="sm" v-model="searchQuery.gender" :allow-clear="true"
placeholder="请选择">
<lay-select-option :value="0" label="未知"></lay-select-option>
<lay-select-option :value="1" label="男"></lay-select-option>
<lay-select-option :value="2" label="女"></lay-select-option>
</lay-select>
</lay-form-item>
</lay-col>
<lay-col :md="5">
<lay-form-item label-width="20">
<lay-button style="margin-left: 20px" type="normal" size="sm" @click="toSearch">
@ -82,11 +72,11 @@
</lay-table>
</div>
</div>
<lay-layer v-model="addShow" :title="title" :area="['750px', '100%']" :type="4" :shade="true" :btn="addButton">
<lay-layer v-model="addShow" :title="title" :area="['850px', '100%']" :type="4" :shade="true" :btn="addButton">
<div style="padding: 20px">
<lay-form :model="model11" ref="layFormRef11" mode="inline">
<lay-form-item label="证件照" prop="username">
<lay-upload style="width:180px;" ref="uploadRefA" :number="1" field="file" :size="1000"
<lay-form-item label="证件照" prop="username" tips="大小限制1MB">
<lay-upload :beforeUpload="beforeUpload" style="width:180px;" ref="uploadRefA" :number="1" field="file"
:headers="{ token: userStore.token }" :url="baseURL+'/api/common/upload'"
@cutdone="getCutDone2" v-model="file2" :auto="true" acceptMime="images" :cut="false"
:cutOptions="cutOptions" @done="getFileDone2">
@ -101,13 +91,13 @@
<lay-input v-model="model11.code" size="lg" placeholder="请输入工号"></lay-input>
</lay-form-item>
<lay-form-item label="密码" prop="password" required>
<lay-input v-model="model11.password" size="lg" placeholder="请输入密码"></lay-input>
<lay-input v-model="model11.password" @change="inputPassword" size="lg" placeholder="请输入密码"></lay-input>
</lay-form-item>
<lay-form-item label="姓名" prop="nickname" required>
<lay-input v-model="model11.nickname" size="lg" placeholder="请输入姓名"></lay-input>
</lay-form-item>
<lay-form-item label="手机号" prop="mobile" required>
<lay-input v-model="model11.mobile" size="lg" placeholder="请输入手机号"></lay-input>
<lay-input v-model="model11.mobile" @change="inputMobile" size="lg" placeholder="请输入手机号"></lay-input>
</lay-form-item>
<lay-form-item label="身份证号" prop="member_code" required>
<lay-input v-model="model11.member_code" size="lg" placeholder="请输入身份证号"></lay-input>
@ -133,11 +123,11 @@
<lay-form-item label="业务性质" prop="business_nature">
<lay-input v-model="model11.business_nature" size="lg" placeholder="请输入业务性质"></lay-input>
</lay-form-item>
<lay-form-item label="资格证图片" prop="username">
<lay-upload style="width:180px;" ref="uploadRef" :number="1" field="file" :size="1000"
<lay-form-item label="资格证图片" prop="username" tips="大小限制1MB">
<lay-upload style="width:180px;" ref="uploadRef" :number="1" field="file"
:headers="{ token: userStore.token }" :url="baseURL+'/api/common/upload'"
@cutdone="getCutDone" v-model="file1" :auto="true" acceptMime="images" :cut="false"
:cutOptions="cutOptions" @done="getFileDone">
:cutOptions="cutOptions" :beforeUpload="beforeUpload" @done="getFileDone" @error="getFileError">
<template #preview>
<div class="easy-wrap" v-if="model11.license_image">
<img :src="model11.license_image" style="width: 100px;" />
@ -156,7 +146,7 @@
</lay-form-item>
<!-- 新增字段结束 -->
<lay-form-item label="科室" prop="group_id" required>
<lay-cascader :checkStrictly="false" size="lg" style="width:180px;" :options="data" search
<lay-cascader :checkStrictly="false" size="lg" style="width:180px;" :options="data" search
:replaceFields="replaceFields" v-model="model11.group_id" placeholder="选择科室" allow-clear></lay-cascader>
</lay-form-item>
<lay-form-item label="党支部" prop="party_id">
@ -222,6 +212,16 @@ const getFileDone2 = (res) => {
//uploadRef.value.submit()
};
const beforeUpload = (file) => {
var isOver = true;
console.log(file);
if(file.size > 1048576) {
isOver = false;
layer.msg(`文件最大上传为: 1MB`, { icon: 2,time: 2000})
}
return new Promise((resolver) => resolver(isOver));
}
const file1 = ref([]);
const getCutDone = (res) => {
@ -234,6 +234,9 @@ const getFileDone = (res) => {
model11.license_image = date.data.fullurl;
//uploadRef.value.submit()
};
const getFileError = (res) => {
console.log("getFileError", res);
}
onMounted(() => {
//getUserList();
getLeftList();
@ -243,7 +246,7 @@ onMounted(() => {
const dataSource = ref([])
const getUserList = () => {
userData({ group_id: leftId.value, size: page.limit, page: page.current }).then((res) => {
userData({ group_id: leftId.value, size: page.limit, page: page.current, ...searchQuery.value }).then((res) => {
console.log(res)
if (res.code == 1) {
dataSource.value = res.data.data;
@ -305,15 +308,14 @@ const isFold = ref(false)
const searchQuery = ref({
nickname: '',
mobile: '',
gender: 0
})
function toReset() {
searchQuery.value = {
nickname: '',
mobile: '',
gender: 0
}
getUserList();
}
function handleClick(node: any) {
@ -398,6 +400,32 @@ const changeAddShow = () => {
addShow.value = true;
}
//
const inputPassword = (value) => {
console.log(value);
if(value.length < 6) {
layer.msg('密码长度不能小于6位', { icon: 2 });
model11.password = '';
return;
}
//
const reg = /^[0-9a-zA-Z]+$/;
if(!reg.test(value)) {
layer.msg('密码只能包含数字和英文字母!', { icon: 2 });
model11.password = '';
return;
}
}
//
const inputMobile = (value) => {
console.log(value);
if(!/^\d{11}$/.test(value)) {
layer.msg('手机号格式不正确!', { icon: 2 });
model11.mobile = '';
return;
}
}
const addIsEdit = ref(1)
const addButton = ref([
{
@ -483,7 +511,7 @@ const addButton = ref([
//
const toSearch = () => {
page.current = 1;
change(page);
getUserList();
}
//
@ -532,7 +560,7 @@ const edit = (row: any) => {
</script>
<style scoped>
<style>
.organization-box {
width: calc(100vw - 240px);
height: calc(100vh - 110px);
@ -584,4 +612,10 @@ const edit = (row: any) => {
background-color: #e8f1ff;
color: red;
}
::v-deep .layui-cascader-panel-list {
max-width: 300px !important;
}
::v-deep .layui-cascader-panel-item{
padding: 8px 10px 8px 16px!important;
}
</style>

View File

@ -46,7 +46,7 @@ const dataSource = ref([]);
const viewDetail = (data: any) => {
console.log(data)
window.open(baseURL+"/api/backend/automatic_publicity/dailyexport?id="+data.id, '_blank')
window.open(baseURL+"/api/backend/automatic_publicity/dailyexport?id="+data.id + '&token=' + userStore.token, '_blank')
}
//