1.加减分增加批量审核,拒绝可填写驳回理由
2.增加站内信列表,详情 3.年度汇总中增加 科室的总人数,考评人数,合格率等
This commit is contained in:
parent
64ed366b73
commit
34b1448fce
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,3 +4,4 @@ dist
|
|||||||
dist-ssr
|
dist-ssr
|
||||||
*.local
|
*.local
|
||||||
.idea
|
.idea
|
||||||
|
.cursorrules
|
1
components.d.ts
vendored
1
components.d.ts
vendored
@ -41,6 +41,7 @@ declare module 'vue' {
|
|||||||
LayMenuItem: typeof import('@layui/layui-vue')['LayMenuItem']
|
LayMenuItem: typeof import('@layui/layui-vue')['LayMenuItem']
|
||||||
LayPopconfirm: typeof import('@layui/layui-vue')['LayPopconfirm']
|
LayPopconfirm: typeof import('@layui/layui-vue')['LayPopconfirm']
|
||||||
LayQrcode: typeof import('@layui/layui-vue')['LayQrcode']
|
LayQrcode: typeof import('@layui/layui-vue')['LayQrcode']
|
||||||
|
LayQuote: typeof import('@layui/layui-vue')['LayQuote']
|
||||||
LayRadio: typeof import('@layui/layui-vue')['LayRadio']
|
LayRadio: typeof import('@layui/layui-vue')['LayRadio']
|
||||||
LayRadioGroup: typeof import('@layui/layui-vue')['LayRadioGroup']
|
LayRadioGroup: typeof import('@layui/layui-vue')['LayRadioGroup']
|
||||||
LayRow: typeof import('@layui/layui-vue')['LayRow']
|
LayRow: typeof import('@layui/layui-vue')['LayRow']
|
||||||
|
@ -490,6 +490,24 @@ export function getSolicitopinionsIndex(data: any) {
|
|||||||
return Http.post('/api/backend/Solicitopinions/index', data)
|
return Http.post('/api/backend/Solicitopinions/index', data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 加减分批量审核
|
||||||
|
export function getSolicitopinionsPlexamine(data: any) {
|
||||||
|
return Http.post('/api/backend/addition_and_subtraction_records/plexamine', data)
|
||||||
|
}
|
||||||
|
// 站内信列表
|
||||||
|
export function getMailDataList(data: any) {
|
||||||
|
return Http.post('/api/backend/mail/getMailData', data)
|
||||||
|
}
|
||||||
|
// 站内信列表
|
||||||
|
export function getMailUpdateMail(data: any) {
|
||||||
|
return Http.post('/api/backend/mail/updateMail', data)
|
||||||
|
}
|
||||||
|
// 统计
|
||||||
|
export function getYearEvaluationSummary(data: any) {
|
||||||
|
return Http.post('/api/backend/year/data', data)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,8 +40,10 @@
|
|||||||
</template>
|
</template>
|
||||||
<template v-slot:operator="{ row }">
|
<template v-slot:operator="{ row }">
|
||||||
<lay-space size="lg">
|
<lay-space size="lg">
|
||||||
<span v-if="row.acceptance_status == 1" style="color: #00A394;cursor: pointer" @click="addUpdate(row)">处理</span>
|
<span v-if="row.acceptance_status == 1" style="color: #00A394;cursor: pointer"
|
||||||
|
@click="addUpdate(row)">处理</span>
|
||||||
<span style="color: #00A394;cursor: pointer" @click="changeVisible11(row)">详情</span>
|
<span style="color: #00A394;cursor: pointer" @click="changeVisible11(row)">详情</span>
|
||||||
|
<span style="color: #00A394;cursor: pointer" @click="upPdf(row)">回访表</span>
|
||||||
</lay-space>
|
</lay-space>
|
||||||
</template>
|
</template>
|
||||||
</lay-table>
|
</lay-table>
|
||||||
@ -54,60 +56,82 @@
|
|||||||
<lay-form-item required label="投诉内容:" prop="politics_content">
|
<lay-form-item required label="投诉内容:" prop="politics_content">
|
||||||
<div>{{ info.politics_content }}</div>
|
<div>{{ info.politics_content }}</div>
|
||||||
<div v-if="info.politics_images != '' && info.politics_images != null" style="margin-top: 10px">
|
<div v-if="info.politics_images != '' && info.politics_images != null" style="margin-top: 10px">
|
||||||
<a :href="info.politics_images" target="_blank"><img :src="info.politics_images" style="width: 100px;"></a>
|
<a :href="info.politics_images" target="_blank"><img :src="info.politics_images"
|
||||||
|
style="width: 100px;"></a>
|
||||||
</div>
|
</div>
|
||||||
</lay-form-item>
|
</lay-form-item>
|
||||||
<lay-form-item required label="处理结果:" prop="acceptance_content">
|
<lay-form-item required label="处理结果:" prop="acceptance_content">
|
||||||
<lay-textarea placeholder="请输入处理结果" v-model="addData.acceptance_content"></lay-textarea>
|
<lay-textarea placeholder="请输入处理结果" v-model="addData.acceptance_content"></lay-textarea>
|
||||||
</lay-form-item>
|
</lay-form-item>
|
||||||
|
<lay-form-item label="附件" mode="block">
|
||||||
|
<lay-upload ref="uploadRef" :number="1" field="file" :size="1000" :headers="{ token: userStore.token }"
|
||||||
|
:url="baseURL + '/api/common/upload'" @cutdone="getCutDone" v-model="file1" :auto="true" :cut="false"
|
||||||
|
:cutOptions="cutOptions" @done="getFileDone">
|
||||||
|
<template #preview>
|
||||||
|
<a v-if="addData.politics_images" style="color: #009688" :href="addData.politics_images"
|
||||||
|
target="_blank">
|
||||||
|
{{ addData.politics_images }}
|
||||||
|
</a>
|
||||||
|
</template>
|
||||||
|
</lay-upload>
|
||||||
|
</lay-form-item>
|
||||||
</lay-form>
|
</lay-form>
|
||||||
</lay-container>
|
</lay-container>
|
||||||
</lay-layer>
|
</lay-layer>
|
||||||
<!-- 添加详情弹窗 -->
|
<!-- 添加详情弹窗 -->
|
||||||
<lay-layer v-model="detailShow" title="投诉建议详情" :type="4" :shade="true" :area="['700px', '100%']">
|
<lay-layer v-model="detailShow" title="投诉建议详情" :type="4" :shade="true" :area="['700px', '100%']">
|
||||||
<div class="detail-container">
|
<div class="detail-container">
|
||||||
<div class="detail-content">
|
<div class="detail-content">
|
||||||
<div class="detail-item">
|
<div class="detail-item">
|
||||||
<div class="detail-label">姓名:</div>
|
<div class="detail-label">姓名:</div>
|
||||||
<div class="detail-value">{{ detailInfo.user_name }}</div>
|
<div class="detail-value">{{ detailInfo.user_name }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="detail-item">
|
<div class="detail-item">
|
||||||
<div class="detail-label">科室:</div>
|
<div class="detail-label">科室:</div>
|
||||||
<div class="detail-value">{{ detailInfo.user_group_name }}</div>
|
<div class="detail-value">{{ detailInfo.user_group_name }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="detail-item">
|
<div class="detail-item">
|
||||||
<div class="detail-label">投诉时间:</div>
|
<div class="detail-label">投诉时间:</div>
|
||||||
<div class="detail-value">{{ detailInfo.createtime }}</div>
|
<div class="detail-value">{{ detailInfo.createtime }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="detail-item">
|
<div class="detail-item">
|
||||||
<div class="detail-label">处理状态:</div>
|
<div class="detail-label">处理状态:</div>
|
||||||
<div class="detail-value">
|
<div class="detail-value">
|
||||||
<lay-tag v-if="detailInfo.acceptance_status == 1" type="warm" size="sm">待处理</lay-tag>
|
<lay-tag v-if="detailInfo.acceptance_status == 1" type="warm" size="sm">待处理</lay-tag>
|
||||||
<lay-tag v-if="detailInfo.acceptance_status == 2" type="normal" size="sm">已回复</lay-tag>
|
<lay-tag v-if="detailInfo.acceptance_status == 2" type="normal" size="sm">已回复</lay-tag>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item detail-item-full">
|
|
||||||
<div class="detail-label">投诉内容:</div>
|
|
||||||
<div class="detail-value">{{ detailInfo.politics_content }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item detail-item-full" v-if="detailInfo.politics_images && detailInfo.politics_images !== ''">
|
|
||||||
<div class="detail-label">投诉图片:</div>
|
|
||||||
<div class="detail-value">
|
|
||||||
<a :href="detailInfo.politics_images" target="_blank">
|
|
||||||
<img :src="detailInfo.politics_images" class="complaint-image">
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item detail-item-full" v-if="detailInfo.acceptance_status == 2">
|
|
||||||
<div class="detail-label">处理结果:</div>
|
|
||||||
<div class="detail-value">{{ detailInfo.acceptance_content }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item" v-if="detailInfo.acceptance_status == 2">
|
|
||||||
<div class="detail-label">处理时间:</div>
|
|
||||||
<div class="detail-value">{{ detailInfo.acceptance_time }}</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="detail-item detail-item-full">
|
||||||
|
<div class="detail-label">投诉内容:</div>
|
||||||
|
<div class="detail-value">{{ detailInfo.politics_content }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item detail-item-full"
|
||||||
|
v-if="detailInfo.politics_images && detailInfo.politics_images !== ''">
|
||||||
|
<div class="detail-label">投诉图片:</div>
|
||||||
|
<div class="detail-value">
|
||||||
|
<a :href="detailInfo.politics_images" target="_blank">
|
||||||
|
<img :src="detailInfo.politics_images" class="complaint-image">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item detail-item-full" v-if="detailInfo.acceptance_status == 2">
|
||||||
|
<div class="detail-label">处理结果:</div>
|
||||||
|
<div class="detail-value">{{ detailInfo.acceptance_content }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item detail-item-full"
|
||||||
|
v-if="detailInfo.acceptance_status == 2 && detailInfo.politics_images != ''">
|
||||||
|
<div class="detail-label">附件:</div>
|
||||||
|
<div class="detail-value">
|
||||||
|
<a style="color: #009688" :href="detailInfo.politics_images" target="_blank">{{ detailInfo.politics_images
|
||||||
|
}}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item" v-if="detailInfo.acceptance_status == 2">
|
||||||
|
<div class="detail-label">处理时间:</div>
|
||||||
|
<div class="detail-value">{{ detailInfo.acceptance_time }}</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</lay-layer>
|
</lay-layer>
|
||||||
</lay-container>
|
</lay-container>
|
||||||
</template>
|
</template>
|
||||||
@ -115,15 +139,21 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive, onMounted } from 'vue'
|
import { ref, reactive, onMounted } from 'vue'
|
||||||
import {
|
import {
|
||||||
getPoliticsList,getPoliticsEdit
|
getPoliticsList, getPoliticsEdit
|
||||||
} from "@/api/module/home";
|
} from "@/api/module/home";
|
||||||
import { layer } from '@layui/layui-vue';
|
import { layer } from '@layui/layui-vue';
|
||||||
|
import { useUserStore } from '@/store/user';
|
||||||
|
const userStore = useUserStore();
|
||||||
|
import { baseURL } from '@/api/http';
|
||||||
const addData = reactive({
|
const addData = reactive({
|
||||||
acceptance_content: '',
|
acceptance_content: '',
|
||||||
id:0
|
id: 0,
|
||||||
|
politics_images: '',
|
||||||
})
|
})
|
||||||
|
const upPdf = (row: any) => {
|
||||||
|
console.log(row)
|
||||||
|
|
||||||
|
}
|
||||||
// 添加详情弹窗相关变量和方法
|
// 添加详情弹窗相关变量和方法
|
||||||
const detailShow = ref(false)
|
const detailShow = ref(false)
|
||||||
const detailInfo = ref({})
|
const detailInfo = ref({})
|
||||||
@ -131,7 +161,25 @@ const changeVisible11 = (row: any) => {
|
|||||||
detailInfo.value = row
|
detailInfo.value = row
|
||||||
detailShow.value = true
|
detailShow.value = true
|
||||||
}
|
}
|
||||||
|
const cutOptions = {
|
||||||
|
copperOption: {
|
||||||
|
center: false,
|
||||||
|
aspectRatio: 1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const cutUrl = ref("");
|
||||||
|
const uploadRef = ref(null)
|
||||||
|
const file1 = ref([]);
|
||||||
|
const getCutDone = (res) => {
|
||||||
|
console.log("getCutDone", res);
|
||||||
|
cutUrl.value = res.msg;
|
||||||
|
};
|
||||||
|
const getFileDone = (res) => {
|
||||||
|
var date = JSON.parse(res.data);
|
||||||
|
console.log("getFileDone", date);
|
||||||
|
addData.politics_images = date.data.fullurl;
|
||||||
|
//uploadRef.value.submit()
|
||||||
|
};
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getList();
|
getList();
|
||||||
})
|
})
|
||||||
@ -174,7 +222,6 @@ function toSearch() {
|
|||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
const page = reactive({ current: 1, limit: 10, total: 100 })
|
const page = reactive({ current: 1, limit: 10, total: 100 })
|
||||||
const columns = ref([
|
const columns = ref([
|
||||||
{ title: '编号', width: '90px', key: 'id', align: 'center' },
|
|
||||||
{ title: '姓名', width: '120px', key: 'user_name', align: 'center' },
|
{ title: '姓名', width: '120px', key: 'user_name', align: 'center' },
|
||||||
{ title: '投诉内容', width: '300px', key: 'politics_content', align: 'center' },
|
{ title: '投诉内容', width: '300px', key: 'politics_content', align: 'center' },
|
||||||
{ title: '科室', width: '120px', key: 'user_group_name', align: 'center' },
|
{ title: '科室', width: '120px', key: 'user_group_name', align: 'center' },
|
||||||
@ -184,7 +231,7 @@ const columns = ref([
|
|||||||
{ title: '处理时间', width: '200px', key: 'acceptance_time', align: 'center' },
|
{ title: '处理时间', width: '200px', key: 'acceptance_time', align: 'center' },
|
||||||
{
|
{
|
||||||
title: '操作',
|
title: '操作',
|
||||||
width: '150px',
|
width: '200px',
|
||||||
customSlot: 'operator',
|
customSlot: 'operator',
|
||||||
key: 'operator',
|
key: 'operator',
|
||||||
fixed: 'right',
|
fixed: 'right',
|
||||||
@ -217,7 +264,7 @@ const addButton = ref([
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "取消",
|
text: "取消",
|
||||||
callback: () => {
|
callback: () => {
|
||||||
addShow.value = false;
|
addShow.value = false;
|
||||||
@ -236,6 +283,7 @@ const addButton = ref([
|
|||||||
width: 98%;
|
width: 98%;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.detail-header {
|
.detail-header {
|
||||||
padding: 15px 20px;
|
padding: 15px 20px;
|
||||||
border-bottom: 1px solid #ebeef5;
|
border-bottom: 1px solid #ebeef5;
|
||||||
|
@ -58,8 +58,13 @@
|
|||||||
</lay-card>
|
</lay-card>
|
||||||
<lay-table v-model:selected-keys="selectedKeys" :page="page" @change="handlePageChange" height="600px"
|
<lay-table v-model:selected-keys="selectedKeys" :page="page" @change="handlePageChange" height="600px"
|
||||||
:columns="columns" :loading="loading" :data-source="dataSource">
|
:columns="columns" :loading="loading" :data-source="dataSource">
|
||||||
<template v-slot:toolbar>
|
<template v-slot:toolbar="{ data }">
|
||||||
<lay-button size="sm" type="primary" @click="exportExcel">导出Excel</lay-button>
|
<lay-button size="sm" type="primary" @click="exportExcel">导出Excel</lay-button>
|
||||||
|
<lay-popconfirm trigger="click" content="请确认你的操作,流程将结束" cancelText="审核拒绝" confirmText="审核通过"
|
||||||
|
@confirm="batchAudit(2)" @cancel="batchAudit(3)">
|
||||||
|
<lay-button size="sm" type="primary">批量审核</lay-button>
|
||||||
|
</lay-popconfirm>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:status="{ data }">
|
<template v-slot:status="{ data }">
|
||||||
<lay-tag v-if="data.status == 1" type="warm" size="sm">待审核</lay-tag>
|
<lay-tag v-if="data.status == 1" type="warm" size="sm">待审核</lay-tag>
|
||||||
@ -74,10 +79,7 @@
|
|||||||
<template v-slot:operator="{ data }">
|
<template v-slot:operator="{ data }">
|
||||||
<lay-space size="lg">
|
<lay-space size="lg">
|
||||||
<span style="color: #00A394;cursor: pointer" @click="showDetail(data, 1)">详情</span>
|
<span style="color: #00A394;cursor: pointer" @click="showDetail(data, 1)">详情</span>
|
||||||
<!-- <lay-popconfirm v-if="data.status == 1" trigger="click" content="请确认你的操作,流程将结束" cancelText="审核拒绝"
|
|
||||||
confirmText="审核通过" @confirm="confirm(data, 2)" @cancel="confirm(data, 3)">
|
|
||||||
|
|
||||||
</lay-popconfirm> -->
|
|
||||||
<span v-if="data.status == 1" style="color: #00A394;cursor: pointer"
|
<span v-if="data.status == 1" style="color: #00A394;cursor: pointer"
|
||||||
@click="showDetail(data, 2)">审核</span>
|
@click="showDetail(data, 2)">审核</span>
|
||||||
</lay-space>
|
</lay-space>
|
||||||
@ -140,7 +142,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive, onMounted } from 'vue'
|
import { ref, reactive, onMounted } from 'vue'
|
||||||
import { layer } from '@layui/layui-vue'
|
import { layer } from '@layui/layui-vue'
|
||||||
import { getAdditionIndexManage, getAdditionIndexManageExamine, getDoctorName, getUserGroupNew } from '@/api/module/home';
|
import { getAdditionIndexManage, getAdditionIndexManageExamine, getDoctorName, getSolicitopinionsPlexamine, getUserGroupNew } from '@/api/module/home';
|
||||||
import { useUserStore } from '@/store/user';
|
import { useUserStore } from '@/store/user';
|
||||||
import { baseURL } from '@/api/http';
|
import { baseURL } from '@/api/http';
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
@ -156,6 +158,57 @@ const exportExcel = () => {
|
|||||||
window.open(baseURL + '/api/backend/excel_controller/dailyexport?ids=' + ids)
|
window.open(baseURL + '/api/backend/excel_controller/dailyexport?ids=' + ids)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
const batchAudit = (type: number) => {
|
||||||
|
console.log(type);
|
||||||
|
const ids = selectedKeys.value.join(',');
|
||||||
|
console.log(ids);
|
||||||
|
if (type == 2) {
|
||||||
|
getSolicitopinionsPlexamine({ ids: ids, status: 2 }).then((res) => {
|
||||||
|
console.log(res);
|
||||||
|
if (res.code == 1) {
|
||||||
|
layer.msg(res.msg, { icon: 1 })
|
||||||
|
} else {
|
||||||
|
layer.msg(res.msg, { icon: 2 })
|
||||||
|
}
|
||||||
|
getUserList();
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
layer.prompt({
|
||||||
|
title: "输入驳回原因",
|
||||||
|
formType: "textarea",
|
||||||
|
area: ['400px', '400px'],
|
||||||
|
placeholder: "请输入驳回原因",
|
||||||
|
btn: [
|
||||||
|
{
|
||||||
|
text: "确认", callback(layero, data) {
|
||||||
|
console.log(data);
|
||||||
|
console.log(selectedKeys.value);
|
||||||
|
if (selectedKeys.value.length == 0) {
|
||||||
|
layer.msg('请选择要驳回的数据', { icon: 2 })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (data.length == '') {
|
||||||
|
layer.msg('请输入驳回原因', { icon: 2 })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
getSolicitopinionsPlexamine({ ids: ids, reason: data, status: 3 }).then((res) => {
|
||||||
|
console.log(res);
|
||||||
|
if (res.code == 1) {
|
||||||
|
layer.msg(res.msg, { icon: 1 })
|
||||||
|
} else {
|
||||||
|
layer.msg(res.msg, { icon: 2 })
|
||||||
|
}
|
||||||
|
setTimeout(() => {
|
||||||
|
layer.closeAll();
|
||||||
|
getUserList();
|
||||||
|
}, 1000)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
const reason = ref('')
|
const reason = ref('')
|
||||||
const type = ref(2)
|
const type = ref(2)
|
||||||
const isFold = ref(false)
|
const isFold = ref(false)
|
||||||
|
@ -6,17 +6,10 @@
|
|||||||
<template #title>
|
<template #title>
|
||||||
<div style="font-size: 16px; font-weight: bold;">通知公告</div>
|
<div style="font-size: 16px; font-weight: bold;">通知公告</div>
|
||||||
</template>
|
</template>
|
||||||
<lay-table
|
<lay-table :page="page" size="lg" :columns="columns" :data-source="dataSource" @change="changePage">
|
||||||
:page="page"
|
<template v-slot:content="{ data }">
|
||||||
size="lg"
|
<div v-html="data.content"></div>
|
||||||
height="600px"
|
</template>
|
||||||
:columns="columns"
|
|
||||||
:data-source="dataSource"
|
|
||||||
@change="changePage"
|
|
||||||
>
|
|
||||||
<template v-slot:content="{ data }">
|
|
||||||
<div v-html="data.content"></div>
|
|
||||||
</template>
|
|
||||||
<template #operation="{ data }">
|
<template #operation="{ data }">
|
||||||
<span style="color: #00A394;cursor: pointer" @click.stop="handleViewDetail(data)">查看详情</span>
|
<span style="color: #00A394;cursor: pointer" @click.stop="handleViewDetail(data)">查看详情</span>
|
||||||
</template>
|
</template>
|
||||||
@ -25,15 +18,39 @@
|
|||||||
</lay-col>
|
</lay-col>
|
||||||
</lay-row>
|
</lay-row>
|
||||||
|
|
||||||
|
<lay-row :space="10">
|
||||||
|
<lay-col :md="24" :sm="24" :xs="24">
|
||||||
|
<lay-card>
|
||||||
|
<template #title>
|
||||||
|
<div style="font-size: 16px; font-weight: bold;">站内信</div>
|
||||||
|
</template>
|
||||||
|
<lay-table :page="msgPage" size="lg" :columns="msgColumns" :data-source="dataMsgSource"
|
||||||
|
@change="changeMsgPage">
|
||||||
|
<template v-slot:content="{ data }">
|
||||||
|
<div v-html="data.notification_content"></div>
|
||||||
|
</template>
|
||||||
|
<template #notify_status="{ data }">
|
||||||
|
<lay-tag :type="data.notify_status == 1 ? 'warm' : 'primary'" size="sm">
|
||||||
|
{{ data.notify_status == 1 ? '未读' : '已读' }}
|
||||||
|
</lay-tag>
|
||||||
|
</template>
|
||||||
|
<template #operator="{ data }">
|
||||||
|
<span style="color: #00A394;cursor: pointer" @click.stop="handleViewMessage(data)">查看详情</span>
|
||||||
|
</template>
|
||||||
|
</lay-table>
|
||||||
|
</lay-card>
|
||||||
|
</lay-col>
|
||||||
|
</lay-row>
|
||||||
|
|
||||||
<!-- 详情弹窗 -->
|
<!-- 详情弹窗 -->
|
||||||
<lay-layer v-model="showDetail" :type="4" :title="null" :area="['700px', '100%']">
|
<lay-layer title="站内信详情" v-model="showDetail" :type="4" :area="['700px', '100%']">
|
||||||
<div class="notice-detail">
|
<div class="notice-detail" v-if="currentMessage">
|
||||||
<h2>{{ currentNotice?.title }}</h2>
|
|
||||||
<div class="notice-info">
|
<div class="notice-info">
|
||||||
<span>发布时间:{{ currentNotice?.createtime }}</span>
|
<span>发送时间:{{ currentMessage.createtime }}</span>
|
||||||
<span>发布人:{{ currentNotice?.author }}</span>
|
<span>接收人:{{ currentMessage.nickname }}</span>
|
||||||
|
<span>状态:{{ currentMessage.notify_status === 1 ? '未读' : '已读' }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="notice-content" v-html="currentNotice?.content">
|
<div class="notice-content" v-html="currentMessage.notification_content">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</lay-layer>
|
</lay-layer>
|
||||||
@ -42,7 +59,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { defineComponent, reactive, ref, onMounted } from "vue";
|
import { defineComponent, reactive, ref, onMounted } from "vue";
|
||||||
import { noticeList } from '../../api/module/home';
|
import { noticeList, getMailDataList, getMailUpdateMail } from '../../api/module/home';
|
||||||
import { layer } from '@layui/layer-vue';
|
import { layer } from '@layui/layer-vue';
|
||||||
|
|
||||||
interface Notice {
|
interface Notice {
|
||||||
@ -54,21 +71,35 @@ interface Notice {
|
|||||||
status: number;
|
status: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface Message {
|
||||||
|
id: number;
|
||||||
|
notification_content: string;
|
||||||
|
nickname: string;
|
||||||
|
createtime: string;
|
||||||
|
notify_status: number;
|
||||||
|
}
|
||||||
|
|
||||||
const page = reactive({
|
const page = reactive({
|
||||||
current: 1,
|
current: 1,
|
||||||
limit: 10,
|
limit: 10,
|
||||||
total: 1
|
total: 1
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const msgPage = reactive({
|
||||||
|
current: 1,
|
||||||
|
limit: 10,
|
||||||
|
total: 1
|
||||||
|
});
|
||||||
|
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
title: "公告标题",
|
title: "公告标题",
|
||||||
width: "180px",
|
width: "180px",
|
||||||
key: "title"
|
key: "title"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "作者",
|
title: "作者",
|
||||||
width: "120px",
|
width: "120px",
|
||||||
key: "author"
|
key: "author"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -91,13 +122,52 @@ const columns = [
|
|||||||
fixed: 'right'
|
fixed: 'right'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
// 表格列配置
|
||||||
|
const msgColumns = [
|
||||||
|
{
|
||||||
|
title: "内容",
|
||||||
|
width: "200px",
|
||||||
|
key: "notification_content",
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "接收人",
|
||||||
|
width: "120px",
|
||||||
|
key: "nickname",
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "发送时间",
|
||||||
|
width: "180px",
|
||||||
|
key: "createtime",
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "状态",
|
||||||
|
width: "100px",
|
||||||
|
customSlot: "notify_status",
|
||||||
|
key: "notify_status",
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '操作',
|
||||||
|
width: '120px',
|
||||||
|
customSlot: 'operator',
|
||||||
|
key: 'operator',
|
||||||
|
align: 'center',
|
||||||
|
fixed: 'right'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
const dataSource = ref<Notice[]>([]);
|
const dataSource = ref<Notice[]>([]);
|
||||||
|
const dataMsgSource = ref<Message[]>([]);
|
||||||
|
|
||||||
// 控制详情弹窗显示
|
// 控制详情弹窗显示
|
||||||
const showDetail = ref(false);
|
const showDetail = ref(false);
|
||||||
// 当前查看的通知
|
// 当前查看的通知
|
||||||
const currentNotice = ref<Notice | null>(null);
|
const currentNotice = ref<Notice | null>(null);
|
||||||
|
// 当前查看的站内信
|
||||||
|
const currentMessage = ref<Message | null>(null);
|
||||||
|
|
||||||
// 获取通知列表
|
// 获取通知列表
|
||||||
const getNoticeList = () => {
|
const getNoticeList = () => {
|
||||||
@ -124,8 +194,42 @@ const handleViewDetail = (row: Notice) => {
|
|||||||
showDetail.value = true;
|
showDetail.value = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 获取站内信列表
|
||||||
|
const getMessageList = () => {
|
||||||
|
getMailDataList({ page: msgPage.current, size: msgPage.limit }).then((res) => {
|
||||||
|
if (res.code == 1) {
|
||||||
|
dataMsgSource.value = res.data.data;
|
||||||
|
msgPage.total = res.data.count;
|
||||||
|
} else {
|
||||||
|
layer.msg(res.msg, { icon: 2 })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 站内信分页变化
|
||||||
|
const changeMsgPage = (ppc: { current: number; limit: number }) => {
|
||||||
|
msgPage.current = ppc.current;
|
||||||
|
msgPage.limit = ppc.limit;
|
||||||
|
getMessageList();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查看站内信详情
|
||||||
|
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(() => {
|
onMounted(() => {
|
||||||
getNoticeList();
|
getNoticeList();
|
||||||
|
getMessageList();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -237,14 +237,14 @@ const columns = [
|
|||||||
key: 'self_score',
|
key: 'self_score',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
customSlot: ({row})=>{
|
customSlot: ({row})=>{
|
||||||
return row.self_score==''||row.self_score==0?'未评分':row.self_score;
|
return row.self_score==''?'未评分':row.self_score;
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
title: '科室评分',
|
title: '科室评分',
|
||||||
key: 'department_score',
|
key: 'department_score',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
customSlot: ({row})=>{
|
customSlot: ({row})=>{
|
||||||
return row.department_score==''||row.department_score==0?'未评分':row.department_score;
|
return row.department_score==''?'未评分':row.department_score;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
|
@ -1,87 +1,143 @@
|
|||||||
<template>
|
<template>
|
||||||
<lay-container style="padding: 20px">
|
<lay-container style="padding: 20px">
|
||||||
<lay-card>
|
<lay-card>
|
||||||
<div style="padding: 10px">
|
<div style="padding: 10px">
|
||||||
<span style="font-size: 18px;vertical-align: center;margin-right: 20px">站内信通知</span>
|
<span style="font-size: 18px;vertical-align: center;margin-right: 20px">站内信通知</span>
|
||||||
|
</div>
|
||||||
|
<lay-table size="lg" height="600px" :columns="columns" :page="page" :data-source="dataSource">
|
||||||
|
<template v-slot:operator="{ data }">
|
||||||
|
<lay-space>
|
||||||
|
<span style="color: #00A394;cursor: pointer" @click="viewMessage(data)">查看</span>
|
||||||
|
</lay-space>
|
||||||
|
</template>
|
||||||
|
</lay-table>
|
||||||
|
</lay-card>
|
||||||
|
|
||||||
|
<!-- 添加查看详情弹窗 -->
|
||||||
|
<lay-layer v-model="visible" :title="'消息详情'" :type="4" :area="['500px', '100%']">
|
||||||
|
<div style="padding: 20px">
|
||||||
|
<div class="message-detail">
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">发送时间:</span>
|
||||||
|
<span>{{ currentMessage.createtime }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">接收人:</span>
|
||||||
|
<span>{{ currentMessage.nickname }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">消息内容:</span>
|
||||||
|
<div class="content">{{ currentMessage.notification_content }}</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<lay-table size="lg" :columns="columns" :data-source="dataSource">
|
</div>
|
||||||
<template v-slot:operator="{ data }">
|
</lay-layer>
|
||||||
<lay-space>
|
</lay-container>
|
||||||
<span style="color: #00A394;cursor: pointer" @click="viewMessage(data)">查看</span>
|
</template>
|
||||||
</lay-space>
|
<script setup lang="ts">
|
||||||
</template>
|
import { ref, reactive, onMounted } from 'vue'
|
||||||
</lay-table>
|
import { layer } from '@layui/layer-vue'
|
||||||
</lay-card>
|
import { getMailDataList,getMailUpdateMail } from '@/api/module/home'
|
||||||
</lay-container>
|
// 修改分页参数定义
|
||||||
</template>
|
const page = reactive({
|
||||||
<script setup lang="ts">
|
current: 1,
|
||||||
import { ref, reactive } from 'vue'
|
limit: 10,
|
||||||
import { layer } from '@layui/layer-vue'
|
total: 1,
|
||||||
|
});
|
||||||
|
// 列表数据
|
||||||
|
const dataSource = ref([])
|
||||||
|
|
||||||
// 列表数据
|
// 添加弹窗相关的响应式变量
|
||||||
const dataSource = ref([
|
const visible = ref(false)
|
||||||
{
|
const currentMessage = ref<any>({})
|
||||||
id: 1,
|
|
||||||
title: '系统维护通知',
|
|
||||||
content: '系统将于今晚22:00-23:00进行例行维护,请提前做好相关工作安排。',
|
|
||||||
sender: '系统管理员',
|
|
||||||
receiver: 1,
|
|
||||||
status: 0,
|
|
||||||
createTime: '2024-03-20 10:00:00'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 2,
|
|
||||||
title: '会议提醒',
|
|
||||||
content: '请于明天下午14:00准时参加月度工作总结会议。',
|
|
||||||
sender: '办公室',
|
|
||||||
receiver: 1,
|
|
||||||
status: 1,
|
|
||||||
createTime: '2024-03-19 15:30:00'
|
|
||||||
}
|
|
||||||
])
|
|
||||||
|
|
||||||
// 表格列配置
|
// 获取列表数据
|
||||||
const columns = [
|
onMounted(() => {
|
||||||
{
|
getMailData()
|
||||||
title: "标题",
|
})
|
||||||
width: "200px",
|
const getMailData = () => {
|
||||||
key: "title",
|
getMailDataList({
|
||||||
align: 'center'
|
page: page.current,
|
||||||
},
|
limit: page.limit
|
||||||
{
|
}).then((res) => {
|
||||||
title: "发送人",
|
console.log(res)
|
||||||
width: "120px",
|
if (res.code == 1) {
|
||||||
key: "sender",
|
dataSource.value = res.data.data
|
||||||
align: 'center'
|
page.total = res.data.count
|
||||||
},
|
} else {
|
||||||
{
|
layer.msg(res.msg, { icon: 2 })
|
||||||
title: "发送时间",
|
|
||||||
width: "180px",
|
|
||||||
key: "createTime",
|
|
||||||
align: 'center'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "状态",
|
|
||||||
width: "100px",
|
|
||||||
customSlot: 'status',
|
|
||||||
key: "status",
|
|
||||||
align: 'center'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '操作',
|
|
||||||
width: '120px',
|
|
||||||
customSlot: 'operator',
|
|
||||||
key: 'operator',
|
|
||||||
align: 'center',
|
|
||||||
fixed: 'right'
|
|
||||||
}
|
}
|
||||||
]
|
})
|
||||||
</script>
|
}
|
||||||
<style scoped>
|
// 表格列配置
|
||||||
.lay-table :deep(.layui-table-cell) {
|
const columns = [
|
||||||
white-space: nowrap;
|
{
|
||||||
overflow: hidden;
|
title: "内容",
|
||||||
text-overflow: ellipsis;
|
width: "200px",
|
||||||
|
key: "notification_content",
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "接收人",
|
||||||
|
width: "120px",
|
||||||
|
key: "nickname",
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "发送时间",
|
||||||
|
width: "180px",
|
||||||
|
key: "createtime",
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "状态",
|
||||||
|
width: "100px",
|
||||||
|
customSlot: ({ data }) => {
|
||||||
|
return data.notify_status == 1 ? '未读' : '已读'
|
||||||
|
},
|
||||||
|
key: "notify_status",
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '操作',
|
||||||
|
width: '120px',
|
||||||
|
customSlot: 'operator',
|
||||||
|
key: 'operator',
|
||||||
|
align: 'center',
|
||||||
|
fixed: 'right'
|
||||||
}
|
}
|
||||||
</style>
|
]
|
||||||
|
|
||||||
|
// 添加查看消息的方法
|
||||||
|
const viewMessage = async (data: any) => {
|
||||||
|
currentMessage.value = data
|
||||||
|
visible.value = true
|
||||||
|
|
||||||
|
// 如果消息未读,则调用更新接口将其标记为已读
|
||||||
|
await getMailUpdateMail({ id: data.id })
|
||||||
|
getMailData()
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style scoped>
|
||||||
|
:deep(.layui-table-header .layui-table-cell) {
|
||||||
|
background-color: #ECF8FA !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message-detail {
|
||||||
|
.detail-item {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
margin-top: 10px;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -56,6 +56,21 @@
|
|||||||
</lay-col>
|
</lay-col>
|
||||||
</lay-row>
|
</lay-row>
|
||||||
</lay-form>
|
</lay-form>
|
||||||
|
<lay-quote>
|
||||||
|
<div class="year-evaluation-summary">
|
||||||
|
<span>年度:{{ yearmonth }}</span>
|
||||||
|
<span>科室:{{ group_name }}</span>
|
||||||
|
<span>总人数:{{ yearData.total }}</span>
|
||||||
|
<span>已考评人数:{{ yearData.evaluated }}</span>
|
||||||
|
<span>未考评人数:{{ yearData.unevaluated }}</span>
|
||||||
|
<span>优秀人数:{{ yearData.excellent }}</span>
|
||||||
|
<span>优秀率:{{ yearData.excellent_rate }}</span>
|
||||||
|
<span>合格人数:{{ yearData.qualified }}</span>
|
||||||
|
<span>合格率:{{ yearData.qualified_rate }}</span>
|
||||||
|
<span>不合格人数:{{ yearData.unqualified }}</span>
|
||||||
|
<span>不合格率:{{ yearData.unqualified_rate }}</span>
|
||||||
|
</div>
|
||||||
|
</lay-quote>
|
||||||
</lay-card>
|
</lay-card>
|
||||||
<lay-tab v-model="tab_id" @change="openTab">
|
<lay-tab v-model="tab_id" @change="openTab">
|
||||||
<lay-tab-item v-for="item in tabList" :title="item.title" :id="item.id"></lay-tab-item>
|
<lay-tab-item v-for="item in tabList" :title="item.title" :id="item.id"></lay-tab-item>
|
||||||
@ -181,7 +196,7 @@ import {
|
|||||||
getGroupYear,
|
getGroupYear,
|
||||||
getYearUserList,
|
getYearUserList,
|
||||||
getYearListFind, getYearListUpdate,
|
getYearListFind, getYearListUpdate,
|
||||||
getAnnualFindData
|
getAnnualFindData, getYearEvaluationSummary
|
||||||
} from "@/api/module/home";
|
} from "@/api/module/home";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import { useUserStore } from '@/store/user';
|
import { useUserStore } from '@/store/user';
|
||||||
@ -190,11 +205,12 @@ const route = useRoute()
|
|||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const userId = ref();
|
const userId = ref();
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
if (route.params.id) {
|
// if (route.params.id) {
|
||||||
userId.value = parseInt(route.params.id);
|
// userId.value = parseInt(route.params.id);
|
||||||
}
|
// }
|
||||||
getLeftList();
|
getLeftList();
|
||||||
})
|
})
|
||||||
|
|
||||||
const columns6 = ref([
|
const columns6 = ref([
|
||||||
{
|
{
|
||||||
title: "考评项目",
|
title: "考评项目",
|
||||||
@ -328,21 +344,31 @@ const userShow = ref(false);
|
|||||||
const userColumns = ref([
|
const userColumns = ref([
|
||||||
{ title: '年度', width: '80px', key: 'year', align: 'center' },
|
{ title: '年度', width: '80px', key: 'year', align: 'center' },
|
||||||
{ title: '考评对象', width: '100px', key: 'user', align: 'center' },
|
{ title: '考评对象', width: '100px', key: 'user', align: 'center' },
|
||||||
{ title: '参评时间', width: '100px', key: 'createtime', align: 'center', customSlot: ({row})=>{
|
{
|
||||||
return row.createtime==''||row.createtime==null?'未参评':row.createtime;
|
title: '参评时间', width: '100px', key: 'createtime', align: 'center', customSlot: ({ row }) => {
|
||||||
} },
|
return row.createtime == '' || row.createtime == null ? '未参评' : row.createtime;
|
||||||
{ title: '自评总分', width: '100px', key: 'self_score', align: 'center', customSlot: ({row})=>{
|
}
|
||||||
return row.self_score==''||row.self_score==0?'未评分':row.self_score;
|
},
|
||||||
} },
|
{
|
||||||
{ title: '科室评分', width: '100px', key: 'department_score', align: 'center', customSlot: ({row})=>{
|
title: '自评总分', width: '100px', key: 'self_score', align: 'center', customSlot: ({ row }) => {
|
||||||
return row.department_score==''||row.department_score==0?'未评分':row.department_score;
|
return row.self_score == '' || row.self_score == 0 ? '未评分' : row.self_score;
|
||||||
} },
|
}
|
||||||
{ title: '医院评分', width: '100px', key: 'hospital_score', align: 'center', customSlot: ({row})=>{
|
},
|
||||||
return row.hospital_score==''||row.hospital_score==0?'未评分':row.hospital_score;
|
{
|
||||||
} },
|
title: '科室评分', width: '100px', key: 'department_score', align: 'center', customSlot: ({ row }) => {
|
||||||
{ title: '总得分', width: '100px', key: 'total_score', align: 'center', customSlot: ({row})=>{
|
return row.department_score == '' || row.department_score == 0 ? '未评分' : row.department_score;
|
||||||
return row.total_score==''||row.total_score==0?'未评分':row.total_score;
|
}
|
||||||
} },
|
},
|
||||||
|
{
|
||||||
|
title: '医院评分', width: '100px', key: 'hospital_score', align: 'center', customSlot: ({ row }) => {
|
||||||
|
return row.hospital_score == '' || row.hospital_score == 0 ? '未评分' : row.hospital_score;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '总得分', width: '100px', key: 'total_score', align: 'center', customSlot: ({ row }) => {
|
||||||
|
return row.total_score == '' || row.total_score == 0 ? '未评分' : row.total_score;
|
||||||
|
}
|
||||||
|
},
|
||||||
{ title: '状态', width: '100px', key: 'scoringrecord_status', customSlot: 'scoringrecord_status', align: 'center' },
|
{ title: '状态', width: '100px', key: 'scoringrecord_status', customSlot: 'scoringrecord_status', align: 'center' },
|
||||||
{ title: '操作', width: '100px', key: 'operator', customSlot: 'operator', align: 'center' },
|
{ title: '操作', width: '100px', key: 'operator', customSlot: 'operator', align: 'center' },
|
||||||
])
|
])
|
||||||
@ -493,7 +519,7 @@ const change = (d) => {
|
|||||||
}
|
}
|
||||||
const addIsInfo = ref(1);
|
const addIsInfo = ref(1);
|
||||||
const infoShow = ref(false);
|
const infoShow = ref(false);
|
||||||
const yearmonth = ref(dayjs().year());
|
const yearmonth = ref(dayjs().year());
|
||||||
const getList = () => {
|
const getList = () => {
|
||||||
getYearUserList({
|
getYearUserList({
|
||||||
'scoringrecord_status': scoringrecord_status.value,
|
'scoringrecord_status': scoringrecord_status.value,
|
||||||
@ -624,20 +650,30 @@ const getTabList = () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const group_id = ref(1);
|
const group_id = ref(0);
|
||||||
|
const group_name = ref('');
|
||||||
const getLeftList = () => {
|
const getLeftList = () => {
|
||||||
getUserGroupNew({}).then((res) => {
|
getUserGroupNew({}).then((res) => {
|
||||||
console.log(res)
|
console.log(res)
|
||||||
if (res.code == 1) {
|
if (res.code == 1) {
|
||||||
data.value = res.data;
|
data.value = res.data;
|
||||||
group_id.value = res.data[0].id;
|
group_id.value = res.data[0].id;
|
||||||
|
group_name.value = res.data[0].name;
|
||||||
getTabList();
|
getTabList();
|
||||||
getSerList();
|
getSerList();
|
||||||
|
getYearEvaluationSummaryData();
|
||||||
} else {
|
} else {
|
||||||
layer.msg(res.msg, { icon: 2 })
|
layer.msg(res.msg, { icon: 2 })
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
const yearData = ref({});
|
||||||
|
const getYearEvaluationSummaryData = () => {
|
||||||
|
getYearEvaluationSummary({ group_id: group_id.value, time: yearmonth.value }).then((res) => {
|
||||||
|
console.log(res)
|
||||||
|
yearData.value = res.data;
|
||||||
|
})
|
||||||
|
}
|
||||||
const data = ref([])
|
const data = ref([])
|
||||||
const isFold = ref(false)
|
const isFold = ref(false)
|
||||||
function toReset() {
|
function toReset() {
|
||||||
@ -650,14 +686,19 @@ function toReset() {
|
|||||||
|
|
||||||
function handleClick(node: any) {
|
function handleClick(node: any) {
|
||||||
// selectedNode.value = JSON.parse(JSON.stringify(node))
|
// selectedNode.value = JSON.parse(JSON.stringify(node))
|
||||||
|
console.log(node)
|
||||||
|
group_id.value = node.id;
|
||||||
|
group_name.value = node.name;
|
||||||
page.current = 1;
|
page.current = 1;
|
||||||
getList();
|
getList();
|
||||||
|
getYearEvaluationSummaryData();
|
||||||
// change(page)
|
// change(page)
|
||||||
}
|
}
|
||||||
|
|
||||||
function toSearch() {
|
function toSearch() {
|
||||||
page.current = 1;
|
page.current = 1;
|
||||||
getList();
|
getList();
|
||||||
|
getYearEvaluationSummaryData();
|
||||||
}
|
}
|
||||||
|
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
@ -667,24 +708,36 @@ const columns = ref([
|
|||||||
{ title: '考评对象', width: '100px', key: 'nickname', customSlot: 'nickname', align: 'center' },
|
{ title: '考评对象', width: '100px', key: 'nickname', customSlot: 'nickname', align: 'center' },
|
||||||
{ title: '工号', width: '100px', key: 'code', align: 'center' },
|
{ title: '工号', width: '100px', key: 'code', align: 'center' },
|
||||||
{ title: '部门', width: '120px', key: 'group_name', align: 'center' },
|
{ title: '部门', width: '120px', key: 'group_name', align: 'center' },
|
||||||
{ title: '自评总分', width: '100px', key: 'user_scoringrecord', align: 'center', customSlot: ({row})=>{
|
{
|
||||||
return row.user_scoringrecord==''||row.user_scoringrecord==0?'未评分':row.user_scoringrecord;
|
title: '自评总分', width: '100px', key: 'user_scoringrecord', align: 'center', customSlot: ({ row }) => {
|
||||||
} },
|
return row.user_scoringrecord == '' || row.user_scoringrecord == 0 ? '未评分' : row.user_scoringrecord;
|
||||||
{ title: '科室评分', width: '100px', key: 'department_score_scoringrecord', align: 'center', customSlot: ({row})=>{
|
}
|
||||||
return row.department_score_scoringrecord==''||row.department_score_scoringrecord==0?'未评分':row.department_score_scoringrecord;
|
},
|
||||||
} },
|
{
|
||||||
{ title: '党支部评分', width: '100px', key: 'party_score_scoringrecord', align: 'center', customSlot: ({row})=>{
|
title: '科室评分', width: '100px', key: 'department_score_scoringrecord', align: 'center', customSlot: ({ row }) => {
|
||||||
return row.party_score_scoringrecord==''||row.party_score_scoringrecord==0?'未评分':row.party_score_scoringrecord;
|
return row.department_score_scoringrecord == '' || row.department_score_scoringrecord == 0 ? '未评分' : row.department_score_scoringrecord;
|
||||||
} },
|
}
|
||||||
{ title: '党总支评分', width: '100px', key: 'overall_score_scoringrecord', align: 'center', customSlot: ({row})=>{
|
},
|
||||||
return row.overall_score_scoringrecord==''||row.overall_score_scoringrecord==0?'未评分':row.overall_score_scoringrecord;
|
{
|
||||||
} },
|
title: '党支部评分', width: '100px', key: 'party_score_scoringrecord', align: 'center', customSlot: ({ row }) => {
|
||||||
{ title: '医院评分', width: '100px', key: 'hospital_score_scoringrecord', align: 'center', customSlot: ({row})=>{
|
return row.party_score_scoringrecord == '' || row.party_score_scoringrecord == 0 ? '未评分' : row.party_score_scoringrecord;
|
||||||
return row.hospital_score_scoringrecord==''||row.hospital_score_scoringrecord==0?'未评分':row.hospital_score_scoringrecord;
|
}
|
||||||
} },
|
},
|
||||||
{ title: '总得分', width: '100px', key: 'total_score', align: 'center', customSlot: ({row})=>{
|
{
|
||||||
return row.total_score==''||row.total_score==0?'未评分':row.total_score;
|
title: '党总支评分', width: '100px', key: 'overall_score_scoringrecord', align: 'center', customSlot: ({ row }) => {
|
||||||
} },
|
return row.overall_score_scoringrecord == '' || row.overall_score_scoringrecord == 0 ? '未评分' : row.overall_score_scoringrecord;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '医院评分', width: '100px', key: 'hospital_score_scoringrecord', align: 'center', customSlot: ({ row }) => {
|
||||||
|
return row.hospital_score_scoringrecord == '' || row.hospital_score_scoringrecord == 0 ? '未评分' : row.hospital_score_scoringrecord;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '总得分', width: '100px', key: 'total_score', align: 'center', customSlot: ({ row }) => {
|
||||||
|
return row.total_score == '' || row.total_score == 0 ? '未评分' : row.total_score;
|
||||||
|
}
|
||||||
|
},
|
||||||
{ title: '自评状态', width: '100px', key: 'scoringrecord_status', customSlot: 'scoringrecord_status', align: 'center' },
|
{ title: '自评状态', width: '100px', key: 'scoringrecord_status', customSlot: 'scoringrecord_status', align: 'center' },
|
||||||
{
|
{
|
||||||
title: '操作',
|
title: '操作',
|
||||||
@ -728,28 +781,28 @@ const addButton = ref([
|
|||||||
|
|
||||||
const layerEnd = () => {
|
const layerEnd = () => {
|
||||||
columns6.value = [
|
columns6.value = [
|
||||||
{
|
{
|
||||||
title: "考评项目",
|
title: "考评项目",
|
||||||
width: "300px",
|
width: "300px",
|
||||||
key: "project_name"
|
key: "project_name"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "分值",
|
title: "分值",
|
||||||
width: "80px",
|
width: "80px",
|
||||||
align: 'center',
|
align: 'center',
|
||||||
key: "base_score",
|
key: "base_score",
|
||||||
customSlot: 'base_score',
|
customSlot: 'base_score',
|
||||||
totalRow: true
|
totalRow: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "自评分",
|
title: "自评分",
|
||||||
width: "100px",
|
width: "100px",
|
||||||
align: 'center',
|
align: 'center',
|
||||||
customSlot: 'content_score',
|
customSlot: 'content_score',
|
||||||
key: "content_score",
|
key: "content_score",
|
||||||
totalRow: true
|
totalRow: true
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
const dataSource6 = ref([])
|
const dataSource6 = ref([])
|
||||||
|
|
||||||
@ -815,4 +868,10 @@ const dataSource6 = ref([])
|
|||||||
.layui-tab-content {
|
.layui-tab-content {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
.year-evaluation-summary {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user