1.增加发布党风廉政教育

2.增加发布党风廉政教育问卷,添加问题,编辑问题,删除
3.增加党风廉政教育查看详情
4增加党风廉政教育问卷填写
5.增加拒收红包审核页面,并增加驳回原因
6.增加考评级别管理,增加,编辑删除
7.优化所有页面元素保持统一主题
This commit is contained in:
王创世 2025-03-26 17:52:42 +08:00
parent abeb61831a
commit 5dfab9315b
31 changed files with 1675 additions and 565 deletions

2
auto-imports.d.ts vendored
View File

@ -1,5 +1,5 @@
// Generated by 'unplugin-auto-import'
export {}
declare global {
const layer: typeof import('@layui/layer-vue')['layer']
}

1
components.d.ts vendored
View File

@ -14,6 +14,7 @@ declare module 'vue' {
LayCard: typeof import('@layui/layui-vue')['LayCard']
LayCascader: typeof import('@layui/layui-vue')['LayCascader']
LayCheckbox: typeof import('@layui/layui-vue')['LayCheckbox']
LayCheckboxGroup: typeof import('@layui/layui-vue')['LayCheckboxGroup']
LayCol: typeof import('@layui/layui-vue')['LayCol']
LayConfigProvider: typeof import('@layui/layui-vue')['LayConfigProvider']
LayContainer: typeof import('@layui/layui-vue')['LayContainer']

View File

@ -462,6 +462,27 @@ export function getQuestionnaireDelete(data: any) {
export function getQuestionnaireAdd(data: any) {
return Http.post('/api/backend/questionnaire/topicAdd', data)
}
// 问卷填写
export function getQuestionnaireFill(data: any) {
return Http.post('/api/backend/questionnaire/appAdd', data)
}
// 考评级别
export function getEvaluationlevelData(data: any) {
return Http.post('/api/backend/Evaluationlevel/geEvaluationlevelData', data)
}
// 考评级别新增
export function getEvaluationlevelCreate(data: any) {
return Http.post('/api/backend/Evaluationlevel/create', data)
}
// 考评级别编辑
export function getEvaluationlevelUpdate(data: any) {
return Http.post('/api/backend/Evaluationlevel/update', data)
}
// 考评级别删除
export function getEvaluationlevelDelete(data: any) {
return Http.post('/api/backend/Evaluationlevel/delete', data)
}

View File

@ -168,7 +168,7 @@ export default {
? '60px'
: appStore.subfield && appStore.subfieldPosition == 'side'
? '280px'
: '220px'
: '250px'
)
const router = useRouter()

View File

@ -89,12 +89,18 @@ export default [
path: '/packet',
redirect: '/packet/index',
component: BasicLayout,
meta: { title: '拒收红包管理' },
children: [
{
path: '/packet/index',
name: 'Packet',
component: () => import('../../views/packet/index.vue'),
meta: { title: '拒收红包', requireAuth: true, closable: true },
}, {
path: '/packet/examine',
name: 'PacketExamine',
component: () => import('../../views/packet/examine.vue'),
meta: { title: '拒收红包审核', requireAuth: true, closable: true },
},
]
}, {
@ -409,6 +415,16 @@ export default [
name: 'educationQuestion',
component: () => import('../../views/education/question.vue'),
meta: { title: '问卷发布', requireAuth: true, closable: true },
}, {
path: '/education/list',
name: 'educationList',
component: () => import('../../views/education/list.vue'),
meta: { title: '党风廉政教育', requireAuth: true, closable: true },
}, {
path: '/education/question_list',
name: 'educationQuestionList',
component: () => import('../../views/education/question_list.vue'),
meta: { title: '党风廉政教育问卷', requireAuth: true, closable: true },
}
]
}, {

View File

@ -35,8 +35,8 @@
</div>
<lay-table height="600px" :columns="columns" :data-source="dataSource" :page="page" @change="change">
<template #status="{ row }">
<span v-if="row.acceptance_status == 1" style="color: #FFB800">待处理</span>
<span v-if="row.acceptance_status == 2" style="color: #00CC66">已回复</span>
<lay-tag v-if="row.acceptance_status == 1" type="warm" size="sm">待处理</lay-tag>
<lay-tag v-if="row.acceptance_status == 2" type="normal" size="sm">已回复</lay-tag>
</template>
<template v-slot:operator="{ row }">
<lay-space size="lg">
@ -82,8 +82,8 @@
<div class="detail-item">
<div class="detail-label">处理状态</div>
<div class="detail-value">
<span v-if="detailInfo.acceptance_status == 1" class="status-pending">待处理</span>
<span v-if="detailInfo.acceptance_status == 2" class="status-replied">已回复</span>
<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>
</div>
</div>
<div class="detail-item detail-item-full">

View File

@ -8,8 +8,8 @@
<lay-table size="lg" ref="tableRef6" children-column-name="children" :columns="columns6"
:data-source="dataSource6">
<template v-slot:score_type="{data}">
<lay-tag v-if="data.score_type==1" type="normal">加分</lay-tag>
<lay-tag v-if="data.score_type==2" type="danger">减分</lay-tag>
<lay-tag size="sm" v-if="data.score_type==1" type="normal">加分</lay-tag>
<lay-tag size="sm" v-if="data.score_type==2" type="danger">减分</lay-tag>
</template>
<!-- <template v-slot:scoring_category="{data}">
<span v-if="data.scoring_category==1">年度</span>
@ -152,38 +152,38 @@ const delShowMsd = async (data) => {
}
}
const columns6 = [
{
title: "序号",
width: "60px",
key: "id"
},
{
title: "加减分类型",
width: "90px",
customSlot: 'score_type',
key: "score_type"
key: "score_type",
align: 'center'
},
{
title: "项目名称",
width: "100px",
key: "project_name",
ellipsisTooltip:true,
align: 'center'
},
{
title: "单次评分上限",
width: "100px",
key: "single_score_max"
key: "single_score_max",
align: 'center'
},
{
title: "单次评分下限",
width: "100px",
key: "single_score_min"
key: "single_score_min",
align: 'center'
},
{
title: "评分标准",
width: "100px",
key: "scoring_criteria",
ellipsisTooltip:true,
align: 'center'
},
{
title: '操作',

View File

@ -19,14 +19,13 @@
<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;">
<div style="padding: 10px">
<span style="font-size: 18px;vertical-align: center;margin-right: 20px">个人记录列表</span>
<lay-button type="primary" @click="openNew()" size="sm">新增记录</lay-button>
</div>
<lay-table :page="page" :height="'100%'" :columns="columns" :loading="loading"
:data-source="dataSource" v-model:selected-keys="selectedKeys" @change="change"
@sortChange="sortChange">
<span style="font-size: 18px;vertical-align: center;margin-right: 20px">考评级别设置</span>
<lay-button type="primary" @click="openNew()" size="sm">新增记录</lay-button>
</div>
<lay-table :page="page" :height="'100%'" :columns="columns" :loading="loading" :data-source="dataSource"
v-model:selected-keys="selectedKeys" @change="change" @sortChange="sortChange">
<template #status="{ row }">
<lay-switch :model-value="row.status" @change="changeStatus($event, row)"></lay-switch>
</template>
@ -34,23 +33,24 @@
<lay-tag color="#165DFF" variant="light">{{ row.role }}</lay-tag>
</template>
<template v-slot:operator="{ row }">
<lay-button size="xs" border="green" border-style="dashed"
@click="changeVisible11('编辑', row)">编辑</lay-button>
<lay-popconfirm content="确定要删除此用户吗?" @confirm="confirm" @cancel="cancel">
<lay-button size="xs" border="red" border-style="dashed">删除</lay-button>
</lay-popconfirm>
<lay-space size="lg">
<span style="color: #00A394;cursor: pointer" @click="changeVisible11('编辑', row)">编辑</span>
<lay-popconfirm trigger="click" content="确定要删除吗?" @confirm="confirm(row.id)" @cancel="cancel">
<span style="color: #00A394;cursor: pointer">删除</span>
</lay-popconfirm>
</lay-space>
</template>
</lay-table>
</div>
</div>
<lay-layer v-model="visible11" :title="title" :area="['500px', '400px']">
<lay-layer v-model="visible11" :type="4" :title="title" :area="['700px', '100%']">
<div style="padding: 20px">
<lay-form :model="model11" ref="layFormRef11" required>
<lay-form-item label="所属科室" prop="department">
<lay-input v-model="model11.department" disabled></lay-input>
</lay-form-item>
<lay-form-item label="级别名称" prop="levelName">
<lay-input v-model="model11.levelName"></lay-input>
<lay-input v-model="model11.levelName" placeholder="请输入级别名称"></lay-input>
</lay-form-item>
<lay-form-item label="名额" prop="quota">
<lay-input-number v-model="model11.quota" :min="0"></lay-input-number>
@ -58,6 +58,9 @@
<lay-form-item label="最高评分" prop="maxScore">
<lay-input-number v-model="model11.maxScore" :min="0" :max="100"></lay-input-number>
</lay-form-item>
<lay-form-item label="最低评分" prop="minScore">
<lay-input-number v-model="model11.minScore" :min="0" :max="100"></lay-input-number>
</lay-form-item>
</lay-form>
<div style="width: 100%; text-align: center">
<lay-button size="sm" type="primary" @click="toSubmit">保存</lay-button>
@ -70,10 +73,13 @@
<script setup lang="ts">
import { ref, reactive, onMounted } from 'vue'
import { layer } from '@layui/layui-vue'
import { getUserGroupNew } from '@/api/module/home';
import { getUserGroupNew, getEvaluationlevelData, getEvaluationlevelCreate, getEvaluationlevelUpdate, getEvaluationlevelDelete } from '@/api/module/home';
onMounted(() => {
getLeftList();
})
const leftId = ref(0);
const data = ref()
const getLeftList = () => {
@ -82,83 +88,27 @@ const getLeftList = () => {
if (res.code == 1) {
data.value = res.data;
leftId.value = res.data[0].id;
if (res.data && res.data.length > 0) {
selectedNode.value = {
id: res.data[0].id,
name: res.data[0].name
};
}
change(page)
} else {
layer.msg(res.msg, { icon: 2 })
}
})
}
const showLine = ref(false)
const selectedKey = ref('')
const selectedNode = ref({
id: 0,
title: ''
name: ''
})
const isFold = ref(false)
const searchQuery = ref({
userAccount: '',
userName: '',
sex: ''
})
function toReset() {
searchQuery.value = {
userAccount: '',
userName: '',
sex: ''
}
}
function handleClick(node: any) {
selectedNode.value = JSON.parse(JSON.stringify(node))
page.current = selectedNode.value.id
change(page)
}
function toAdd() {
visible22.value = true
}
function toEdit() {
model22.value = {
organization: '1',
name: '研发部',
fullName: 'xxxx公司-研发部',
code: '001',
type: '1',
sort: 1,
remark: '备注'
}
visible22.value = true
}
function toDelete() {
if (selectedKey.value == '') {
layer.msg('您未选择组织机构,请先选择要删除的组织机构', {
icon: 3,
time: 2000
})
return
}
layer.confirm(
'您将删除所选中的组织机构 [ ' + selectedNode.value.title + ' ] ',
{
title: '提示',
btn: [
{
text: '确定',
callback: (id: any) => {
layer.msg('您已成功删除')
layer.close(id)
}
},
{
text: '取消',
callback: (id: any) => {
layer.msg('您已取消操作')
layer.close(id)
}
}
]
}
)
}
function toSearch() {
leftId.value = selectedNode.value.id
page.current = 1
change(page)
}
@ -167,102 +117,58 @@ const loading = ref(false)
const selectedKeys = ref()
const page = reactive({ current: 1, limit: 10, total: 100 })
const columns = ref([
{ title: '选项', width: '55px', type: 'checkbox', fixed: 'left' },
{ title: '编号', width: '80px', key: 'id', fixed: 'left' },
{ title: '所属科室', width: '120px', key: 'department' },
{ title: '级别名称', width: '120px', key: 'levelName' },
{ title: '名额', width: '80px', key: 'quota' },
{ title: '最高评分', width: '100px', key: 'maxScore' },
{ title: '所属科室', width: '120px', key: 'department', align: 'center' },
{ title: '级别名称', width: '120px', key: 'levelName', align: 'center' },
{ title: '名额', width: '80px', key: 'quota', align: 'center' },
{ title: '最高评分', width: '100px', key: 'maxScore', align: 'center' },
{ title: '最低评分', width: '100px', key: 'minScore', align: 'center' },
{
title: '操作',
width: '150px',
customSlot: 'operator',
key: 'operator',
fixed: 'right'
fixed: 'right',
align: 'center'
}
])
const change = (page: any) => {
loading.value = true
setTimeout(() => {
dataSource.value = loadDataSource(page.current, page.limit)
loading.value = false
}, 1000)
//
const params = {
page: page.current,
limit: page.limit,
group_id: leftId.value
};
// API
getEvaluationlevelData(params).then(res => {
if (res.code === 1) {
// API
dataSource.value = res.data.data.map((item: any) => ({
id: item.id,
department: selectedNode.value.name || '',
levelName: item.level,
quota: Number(item.minge),
maxScore: Number(item.highest_score),
minScore: Number(item.lowest_score),
status: true // trueAPI
}));
page.total = res.data.count || 0;
} else {
layer.msg(res.msg || '获取数据失败', { icon: 2 });
dataSource.value = [];
}
loading.value = false;
}).catch(() => {
loading.value = false;
dataSource.value = [];
});
}
const sortChange = (key: any, sort: number) => {
layer.msg(`字段${key} - 排序${sort}, 你可以利用 sort-change 实现服务端排序`)
}
const dataSource = ref([
{
id: '1',
department: '呼吸内科',
levelName: 'A级',
quota: 3,
maxScore: 95
},
{
id: '2',
department: '呼吸内科',
levelName: 'B级',
quota: 5,
maxScore: 90
},
{
id: '3',
department: '心血管内科',
levelName: 'A级',
quota: 2,
maxScore: 95
},
{
id: '4',
department: '心血管内科',
levelName: 'B级',
quota: 4,
maxScore: 90
},
{
id: '5',
department: '消化内科',
levelName: 'A级',
quota: 3,
maxScore: 95
},
{
id: '6',
department: '消化内科',
levelName: 'B级',
quota: 5,
maxScore: 90
},
{
id: '7',
department: '普通外科',
levelName: 'A级',
quota: 2,
maxScore: 95
},
{
id: '8',
department: '普通外科',
levelName: 'B级',
quota: 4,
maxScore: 90
},
{
id: '9',
department: '骨科',
levelName: 'A级',
quota: 2,
maxScore: 95
},
{
id: '10',
department: '骨科',
levelName: 'B级',
quota: 3,
maxScore: 90
}
])
const dataSource = ref([])
const changeStatus = (isChecked: boolean, row: any) => {
dataSource.value.forEach((item) => {
if (item.id === row.id) {
@ -272,30 +178,13 @@ const changeStatus = (isChecked: boolean, row: any) => {
}
})
}
const remove = () => {
layer.msg(selectedKeys.value, { area: '50%' })
}
const loadDataSource = (page: number, pageSize: number) => {
var response = []
var startIndex = (page - 1) * pageSize + 1
var endIndex = page * pageSize
const levels = ['A级', 'B级', 'C级']
for (var i = startIndex; i <= endIndex; i++) {
response.push({
id: `${i}`,
department: selectedNode.value.title || '呼吸内科',
levelName: levels[i % 3],
quota: Math.floor(Math.random() * 5) + 1, // 1-5
maxScore: 90 + (i % 3) * 5 // 90, 95, 100
})
}
return response
}
const model11 = ref({
department: '',
levelName: '',
quota: 0,
maxScore: 0
maxScore: 0,
minScore: 0,
status: true
})
const layFormRef11 = ref()
const visible11 = ref(false)
@ -310,77 +199,62 @@ const changeVisible11 = (text: any, row: any) => {
department: '',
levelName: '',
quota: 0,
maxScore: 0
maxScore: 0,
minScore: 0,
status: true
}
}
visible11.value = !visible11.value
}
const submit11 = function () {
layFormRef11.value.validate((isValidate: any, model: any, errors: any) => {
layer.open({
type: 1,
title: '表单提交结果',
content: `<div style="padding: 10px"><p>是否通过 : ${isValidate}</p> <p>表单数据 : ${JSON.stringify(
model
)} </p> <p>错误信息 : ${JSON.stringify(errors)}</p></div>`,
shade: false,
isHtmlFragment: true,
btn: [
{
text: '确认',
callback(index: any) {
layer.close(index)
}
}
],
area: '500px'
})
})
}
//
const clearValidate11 = function () {
layFormRef11.value.clearValidate()
}
//
const reset11 = function () {
layFormRef11.value.reset()
}
function toRemove() {
if (selectedKeys.value.length == 0) {
layer.msg('您未选择数据,请先选择要删除的数据', { icon: 3, time: 2000 })
return
}
layer.confirm('您将删除所有选中的数据?', {
title: '提示',
btn: [
{
text: '确定',
callback: (id: any) => {
layer.msg('您已成功删除')
layer.close(id)
}
},
{
text: '取消',
callback: (id: any) => {
layer.msg('您已取消操作')
layer.close(id)
}
}
]
})
}
function toSubmit() {
layer.msg('保存成功!', { icon: 1, time: 1000 })
visible11.value = false
visible22.value = false
layFormRef11.value.validate((isValidate: boolean, model: any) => {
if (!isValidate) {
return;
}
//
const submitData = {
id: model11.value.id || '',
group_id: leftId.value,
level: model11.value.levelName,
minge: model11.value.quota,
highest_score: model11.value.maxScore,
lowest_score: model11.value.minScore
};
// API
const apiFunction = title.value === '新增'
? getEvaluationlevelCreate
: getEvaluationlevelUpdate;
apiFunction(submitData).then(res => {
if (res.code === 1) {
layer.msg('保存成功!', { icon: 1, time: 1000 });
visible11.value = false;
//
change(page);
} else {
layer.msg(res.msg || '操作失败', { icon: 2 });
}
});
});
}
function toCancel() {
visible11.value = false
visible22.value = false
}
function confirm() {
layer.msg('您已成功删除')
function confirm(id) {
// ID
getEvaluationlevelDelete({ id }).then(res => {
if (res.code === 1) {
layer.msg('您已成功删除', { icon: 1 });
//
change(page);
} else {
layer.msg(res.msg || '删除失败', { icon: 2 });
}
});
}
function cancel() {
layer.msg('您已取消操作')
@ -398,6 +272,19 @@ const model22 = ref({
const layFormRef22 = ref()
const visible22 = ref(false)
const title22 = ref('新建')
const openNew = () => {
model11.value = {
department: selectedNode.value.name || data.value?.[0]?.name || '',
levelName: '',
quota: 0,
maxScore: 0,
minScore: 0,
status: true
}
title.value = '新增'
visible11.value = true
}
</script>
<style scoped>

View File

@ -3,7 +3,7 @@
<lay-card>
<div style="padding: 10px">
<span style="font-size: 18px;vertical-align: center;margin-right: 20px">考评时间列表</span>
<lay-button size="sm" border="green" @click="addShowMsd()">新增</lay-button>
<lay-button size="sm" type="primary" @click="addShowMsd()">新增</lay-button>
</div>
<lay-table size="lg" ref="tableRef6" children-column-name="children" :columns="columns6"
:data-source="dataSource6">
@ -314,13 +314,15 @@ const columns6 = [
{
title: "考评标题",
width: "150px",
key: "title"
key: "title",
align: 'center'
},
{
title: "考评类型",
width: "90px",
customSlot: 'evaluation_type',
key: "evaluation_type"
key: "evaluation_type",
align: 'center'
},
// {
// title: "",
@ -338,17 +340,19 @@ const columns6 = [
width: "100px",
key: "rule_description",
ellipsisTooltip: true,
align: 'center'
},
{
title: "考评开始时间",
width: "100px",
key: "start_time"
key: "start_time",
align: 'center'
},
{
title: "考评结束时间",
width: "100px",
key: "end_time",
align: 'center'
},
{
title: '操作',

View File

@ -62,12 +62,12 @@
</lay-card>
<lay-table :page="page" @change="handlePageChange" height="600px" :columns="columns" :loading="loading" :data-source="dataSource">
<template v-slot:status="{ data }">
<span v-if="data.status == 1" style="color: #1E9FFF">待审核</span>
<span v-if="data.status == 2" style="color: #009688">审核通过</span>
<span v-if="data.status == 3" style="color: #009688">已驳回</span>
<lay-tag v-if="data.status == 1" type="warm" size="sm">待审核</lay-tag>
<lay-tag v-if="data.status == 2" type="normal" size="sm">已通过</lay-tag>
<lay-tag v-if="data.status == 3" type="danger" size="sm">已驳回</lay-tag>
</template>
<template v-slot:assessment_type="{ data }">
<lay-tag :type="data.assessment_type == 1 ? 'primary' : 'danger'">
<lay-tag :type="data.assessment_type == 1 ? 'primary' : 'danger'" size="sm">
{{ data.assessment_type == 1 ? '加分' : '减分' }}
</lay-tag>
</template>

View File

@ -36,12 +36,12 @@
</div>
<lay-table size="lg" height="500px" :columns="columns" :data-source="dataSource" :page="page" @change="change">
<template v-slot:status="{ data }">
<span v-if="data.status == 1" style="color: #1E9FFF">待审核</span>
<span v-if="data.status == 2" style="color: #009688">审核通过</span>
<span v-if="data.status == 3" style="color: #009688">已驳回</span>
<lay-tag v-if="data.status == 1" type="primary" size="sm">待审核</lay-tag>
<lay-tag v-if="data.status == 2" type="success" size="sm">审核通过</lay-tag>
<lay-tag v-if="data.status == 3" type="danger" size="sm">已驳回</lay-tag>
</template>
<template v-slot:assessment_type="{ data }">
<lay-tag :type="data.assessment_type == 1 ? 'primary' : 'danger'">
<lay-tag :type="data.assessment_type == 1 ? 'primary' : 'danger'" size="sm">
{{ data.assessment_type == 1 ? '加分' : '减分' }}
</lay-tag>
</template>

View File

@ -3,7 +3,7 @@
<lay-card>
<div style="padding: 10px">
<span style="font-size: 18px;vertical-align: center;margin-right: 20px">党风廉政教育</span>
<lay-button v-if="userStore.userInfo.level == 4" type="primary" @click="openNew()" size="sm">新增内容</lay-button>
<lay-button type="primary" @click="openNew()" size="sm">新增内容</lay-button>
</div>
<lay-table :page="page" height="600px" size="lg" @change="changePage" :columns="columns" :data-source="dataSource">
<!-- <template v-slot:content="{ data }">
@ -359,12 +359,14 @@
{
title: "内容标题",
width: "180px",
key: "party_style_name"
key: "party_style_name",
align: 'center'
},
{
title: "发布时间",
width: "180px",
key: "createtime"
key: "createtime",
align: 'center'
},
{
title: '操作',

View File

@ -0,0 +1,184 @@
<template>
<lay-container style="padding: 20px">
<lay-card>
<div style="padding: 10px">
<span style="font-size: 18px;vertical-align: center;margin-right: 20px">党风廉政教育</span>
</div>
<lay-table :page="page" height="600px" size="lg" @change="changePage" :columns="columns"
:data-source="dataSource">
<!-- <template v-slot:content="{ data }">
<div v-html="data.content"></div>
</template> -->
<template v-slot:status="{ data }">
<span v-if="data.status == 1">已发布</span>
<span v-if="data.status == 0">已隐藏</span>
</template>
<template v-slot:operator="{ data }">
<lay-space size="lg">
<span style="color: #00A394;cursor: pointer" @click="viewDetail(data)">查看学习</span>
</lay-space>
</template>
</lay-table>
</lay-card>
<lay-layer v-model="detailShow" title="党风廉政教育详情" :type="4" :shade="true" :area="['650px', '100%']"
:btn="detailButton">
<lay-container fluid="true" style="padding: 20px">
<h2 style="text-align: center; margin-bottom: 20px;">{{ detailData.party_style_name }}</h2>
<div class="detail-content" v-html="detailData.party_style_countent"></div>
</lay-container>
</lay-layer>
</lay-container>
</template>
<script setup lang="ts">
import {
educationList,
} from '../../api/module/home'
import { ref, onMounted, reactive, watch, toRaw } from 'vue'
import { layer } from '@layui/layer-vue'
import { useUserStore } from '@/store/user'
const userStore = useUserStore()
//
const changePage = (ppc: { current: number; limit: number }) => {
page.current = ppc.current;
page.limit = ppc.limit;
getNoticeList();
}
//
const dataSource = ref([]);
//
interface EducationData {
id: number;
party_style_name: string;
party_style_countent: string;
status?: number; //
}
//
const page = reactive({
current: 1,
limit: 10,
total: 1
});
onMounted(() => {
getNoticeList()
// Wait for editor to be mounted and initialized
// nextTick(() => {
// // Add null check before accessing editor
// if (editorRef.value && editorRef.value.getQuill()) {
// // Initialize title tooltips
// initTitle()
// // Add paste event listener
// const editor = editorRef.value.getQuill()
// editor.root.addEventListener('paste', customPaste, false)
// }
// })
});
const getNoticeList = () => {
educationList({ page: page.current, size: page.limit }).then((res: any) => {
if (res.code == 1) {
dataSource.value = res.data.data;
page.total = res.data.count;
} else {
layer.msg(res.msg, { icon: 2 })
}
})
}
const columns = [
{
title: "内容标题",
width: "180px",
key: "party_style_name",
align: 'center'
},
{
title: "发布时间",
width: "180px",
key: "createtime",
align: 'center'
},
{
title: '操作',
width: '120px',
customSlot: 'operator',
key: 'operator',
align: 'center',
fixed: 'right'
}
]
//
const detailShow = ref(false);
const detailData = reactive<EducationData>({
id: 0,
party_style_name: '',
party_style_countent: ''
});
const viewDetail = (data: EducationData) => {
detailShow.value = true;
detailData.id = data.id;
detailData.party_style_name = data.party_style_name;
detailData.party_style_countent = data.party_style_countent;
}
const detailButton = ref([
{
text: "关闭",
callback: () => {
detailShow.value = false;
}
}
])
</script>
<style scoped>
:deep(.w-e-text-container) {
min-height: 400px !important;
}
:deep(.w-e-toolbar) {
border: 1px solid #ddd !important;
border-bottom: none !important;
}
:deep(.w-e-text-container) {
border: 1px solid #ddd !important;
border-top: none !important;
}
:deep(.ql-editor) {
height: 300px;
width: 100%;
}
:deep(.layui-input-block) {
max-width: 85%;
}
:deep(.detail-content) {
padding: 10px;
max-height: calc(100vh - 200px);
overflow-y: auto;
}
/* 添加视频自适应样式 */
:deep(.detail-content video) {
max-width: 100%;
height: auto;
}
:deep(.detail-content iframe) {
max-width: 100%;
width: 100%;
aspect-ratio: 16 / 9;
}
</style>

View File

@ -7,13 +7,6 @@
</div>
<lay-table @change="changePage" :page="page" size="lg" ref="tableRef6" children-column-name="children"
:columns="columns6" :data-source="dataSource6">
<template v-slot:status="{ data }">
<span v-if="data.status == '1'">启用</span>
<span v-if="data.status == '0'">禁用</span>
</template>
<template v-slot:weigh="{ data }">
<lay-input v-model="data.weigh" type="number" @input="weighUpdate(data)" />
</template>
<template v-slot:operator="{ data }">
<lay-space size="lg">
<span style="color: #00A394;cursor: pointer" @click="addShowMsd(data, data.id)">新增题目</span>
@ -62,25 +55,24 @@
<lay-form-item :label="op.name" v-for="(op, opi) in item.option" :key="opi" v-if="item.type != 3">
<div style="display: flex;align-items: center;">
<lay-input v-model="op.val" placeholder="请输入选项答案"></lay-input>
<lay-button type="primary" size="sm" @click="delOptionItem(index, opi)"><lay-icon
<lay-button style="margin-left: 10px" type="primary" size="sm" @click="delOptionItem(index, opi)"><lay-icon
type="layui-icon-delete"></lay-icon></lay-button>
</div>
</lay-form-item>
<div style="text-align: center" v-if="item.type != 3">
<lay-button @click="addOption(index)" type="primary">添加一个选项</lay-button>
<lay-button @click="addOption(index)" type="primary" size="sm">添加一个选项</lay-button>
</div>
<div style="position: absolute; right: 20px; top: 20px">
<lay-button @click="delOptionTop(index)" type="danger" size="sm">删除题目</lay-button>
</div>
</lay-card>
<div style="text-align: center; margin-top: 30px">
<lay-button @click="addQuestionnaire()" type="warm">添加一个题目</lay-button>
<lay-button @click="addQuestionnaire()" type="warm" size="sm">添加一个题目</lay-button>
</div>
</lay-form>
</lay-container>
</lay-layer>
<lay-layer header="编辑题目" v-model="questionnaireUpdateMode" :type="4" :shade="true" :area="['800px', '100%']"
:btn="questionnaireButtonEdit">
<lay-layer title="编辑题目" v-model="questionnaireUpdateMode" :type="4" :shade="true" :area="['800px', '100%']">
<lay-form>
<lay-card v-for="(item, index) in questionnaire" style="margin-bottom: 10px;position: relative;">
<lay-form-item label="类型">
@ -99,12 +91,12 @@
<lay-form-item v-for="(op, opi) in item.option" :label="op.name" v-if="item.type != 3">
<div style="display: flex;align-items: center;">
<lay-input v-model="op.val" placeholder="请输入选项答案"></lay-input>
<lay-button type="primary" size="sm" @click="delUpdateOptionItem(index, opi)"><lay-icon
<lay-button style="margin-left: 10px" type="primary" size="sm" @click="delUpdateOptionItem(index, opi)"><lay-icon
type="layui-icon-delete"></lay-icon></lay-button>
</div>
</lay-form-item>
<div style="text-align: center" v-if="item.type != 3">
<lay-button @click="addOption(index)" type="warm">添加一个选项</lay-button>
<lay-button @click="addUpdateOption(index)" type="warm" size="sm">添加一个选项</lay-button>
</div>
<div style="position:absolute;right: 20px;top: 20px">
<lay-popconfirm content="确认删除吗" @confirm="delUpdateOptionTop(index, item)">
@ -112,7 +104,7 @@
</lay-popconfirm>
</div>
<div style="text-align: center;margin-top: 20px">
<lay-button @click="updateOption(item)" type="primary">保存</lay-button>
<lay-button @click="updateOption(item)" type="primary" size="sm">保存</lay-button>
</div>
</lay-card>
</lay-form>
@ -131,7 +123,9 @@ import {
getQuestionnaireInfoEdit,
getQuestionnaireInfoFind,
getQuestionnaireDelete,
getQuestionnaireAdd
getQuestionnaireAdd,
getQuestionnaireEdit,
getQuestionnaireInfoDelete
} from '../../api/module/home' // API
import { ref, watch, onMounted, reactive } from 'vue'
import { layer } from '@layui/layer-vue'
@ -163,8 +157,8 @@ const initQuestionItem = () => {
wight: 0,
title: "",
option: [
{ name: "选项A", val: "" },
{ name: "选项B", val: "" }
{ name: "A", val: "" },
{ name: "B", val: "" }
]
}
}
@ -196,7 +190,16 @@ const addOption = (index) => {
val: ""
})
}
const addUpdateOption = (index) => {
const optionLength = questionnaire.value[index].option.length
const lastOption = questionnaire.value[index].option[optionLength - 1]
const lastChar = lastOption.name.charAt(lastOption.name.length - 1)
const nextChar = String.fromCharCode(lastChar.charCodeAt(0) + 1)
questionnaire.value[index].option.push({
name: `${nextChar}`,
val: ""
})
}
//
const delOptionItem = (index, opi) => {
if (questionnaireData.value[index].option.length <= 2) {
@ -210,14 +213,6 @@ const delOptionItem = (index, opi) => {
const delOptionTop = (index) => {
questionnaireData.value.splice(index, 1)
}
//
const openQuestionnaireAdd = (data) => {
questionnaireAddMode.value = true
currentQuestionnaireId.value = data.id
questionnaireData.value = [initQuestionItem()]
}
const delUpdateOptionTop = (index, item) => {
console.log(item);
if (questionnaire.value.length <= 1) {
@ -262,7 +257,7 @@ const submitQuestionnaire = async () => {
try {
//API
const res = await getQuestionnaireAdd({
id: currentQuestionnaireId.value,
questionnaire_id: currentQuestionnaireId.value,
topic: jsonString
})
if (res.code == 1) {
@ -277,7 +272,16 @@ const submitQuestionnaire = async () => {
layer.msg('保存失败', { icon: 2 })
}
}
const delUpdateOptionItem = (index, opIndex) => {
if (questionnaire.value[index].option.length <= 2) {
layer.msg('至少保留两个选项', { icon: 2 });
return;
}
questionnaire.value[index].option.splice(opIndex, 1);
questionnaire.value[index].option.forEach((item, index) => {
item.name = String.fromCharCode(65 + index);
});
}
//
const questionnaireButton = ref([
{
@ -294,26 +298,27 @@ const questionnaireButton = ref([
// addShowMsd使
const addShowMsd = (data, pid) => {
console.log(data);
//
questionnaireAddMode.value = true;
currentQuestionnaireId.value = data.id;
questionnaireData.value=[{
type: 1, title: '', wight: 0, option: [{ name: 'A', val: "" }, { name: 'B', val: "" }]
}];
}
const columns6 = [
{
title: "问卷标题",
width: "200px",
key: "title"
key: "title",
align: 'center'
},
{
title: "发布时间",
width: "100px",
key: "releasetime"
},
{
title: "填写人数",
width: "300px",
key: "url"
key: "releasetime",
align: 'center'
},
{
title: '操作',
@ -365,16 +370,43 @@ const editShowMsd = (data) => {
}
const delShowMsd = async (data) => {
var res = await menuDataDel({ id: data.id });
var res = await getQuestionnaireInfoDelete({ id: data.id });
console.log(res)
if (res.code == 1) {
layer.msg('删除成功!', { icon: 1 })
getHierarchicalData();
getHierarchicalData()
} else {
layer.msg(res.msg, { icon: 2 })
}
}
const updateOption = (d) => {
var option = d.option;
console.log(d);
const transformedArray = [];
for (const key in option) {
transformedArray.push({
name: key,
val: option[key].name, // `key`1111
});
}
let jsonString = d;
getQuestionnaireEdit({
topic: JSON.stringify(jsonString),
id: d.id,
})
.then((res) => {
console.log(res);
if (res.code == 1) {
layer.msg('保存成功', { icon: 1 });
} else {
layer.msg(res.msg, { icon: 2 });
}
editShowQuestMsd(d.questionnaire_id);
})
.catch((e) => {
console.log(e);
});
}
const addButton = ref([
{
text: "确认",

View File

@ -0,0 +1,258 @@
<template>
<lay-container style="padding: 20px">
<lay-card>
<div style="padding: 10px">
<span style="font-size: 18px;vertical-align: center;margin-right: 20px">党风廉政教育</span>
</div>
<lay-table :page="page" height="650px" size="lg" @change="changePage" :columns="columns"
:data-source="dataSource">
<!-- <template v-slot:content="{ data }">
<div v-html="data.content"></div>
</template> -->
<template v-slot:type="{ data }">
<lay-tag v-if="data.type == '已填写'" color="#00A394" size="sm">已填写</lay-tag>
<lay-tag v-if="data.type == '未填写'" color="#FF5722" size="sm">未填写</lay-tag>
</template>
<template v-slot:operator="{ data }">
<lay-space size="lg">
<span style="color: #00A394;cursor: pointer" @click="viewDetail(data)">查看填写</span>
</lay-space>
</template>
</lay-table>
</lay-card>
<lay-layer v-model="detailShow" title="党风廉政教育问卷填写" :type="4" :shade="true" :area="['650px', '100%']"
:btn="addButton">
<lay-container fluid="true" style="padding: 20px">
<lay-card>
<div v-for="(item, index) in questionnaireList" :key="index">
<!-- 多选题 -->
<div v-if="item.type == 2" style="margin-bottom: 20px;">
<div style="margin: 10px 0px;">{{ (index + 1) + '、' + item.title + '(多选题)' }}</div>
<lay-checkbox-group v-model="questionnaireList[index].topic">
<lay-checkbox size="lg" v-for="(op, opi) in item.option" :name="op.name" skin="primary"
:value="op.name">{{ op.name }}{{ op.val }}</lay-checkbox>
</lay-checkbox-group>
</div>
<!-- 单选题 -->
<div v-if="item.type == 1" style="margin-bottom: 20px;">
<div style="margin: 10px 0px;">{{ (index + 1) + '、' + item.title + '(单选题)' }}</div>
<lay-radio-group name="action" v-model="questionnaireList[index].topic">
<lay-radio size="lg" v-for="(op, opi) in item.option" :value="op.name"> {{ op.name }}{{
op.val
}}</lay-radio>
</lay-radio-group>
</div>
<!-- 问答题 -->
<div v-if="item.type == 3" style="margin-bottom: 20px;">
<div style="margin: 10px 0px;">{{ (index + 1) + '、' + item.title + '(问答题)' }}</div>
<lay-textarea v-model="questionnaireList[index].topic" placeholder="请填写答案"></lay-textarea>
</div>
</div>
</lay-card>
</lay-container>
</lay-layer>
</lay-container>
</template>
<script setup lang="ts">
import {
educationList,
getQuestionnaireIndex,
getQuestionnaireInfoFind,
getQuestionnaireInfoEdit,
getQuestionnaireFill
} from '../../api/module/home'
import { ref, onMounted, reactive, watch, toRaw } from 'vue'
import { layer } from '@layui/layer-vue'
import { useUserStore } from '@/store/user'
const userStore = useUserStore()
const detailShow = ref(false);
//
const questionnaireList = ref([]);
//
interface QuestionItem {
id: string | number;
title: string;
status: number;
releasetime: string;
[key: string]: any;
}
const viewDetail = (data: QuestionItem) => {
detailShow.value = true;
getQuestionnaireInfoFind({ id: data.id }).then((res) => {
console.log(res);
if (res.code === 1) {
questionnaireList.value = res.data.map((item: any) => ({
...item,
topic: item.topic || ''
}));
}
}).catch(err => {
console.error(err);
layer.msg('网络错误,请稍后重试', { icon: 2 });
});
}
//
const changePage = (ppc: { current: number; limit: number }) => {
page.current = ppc.current;
page.limit = ppc.limit;
getHierarchicalData();
}
//
const dataSource = ref([]);
//
const page = reactive({
current: 1,
limit: 10,
total: 1
});
onMounted(() => {
getHierarchicalData()
});
const getHierarchicalData = () => {
getQuestionnaireIndex({ page: page.current, size: page.limit }).then((res) => {
console.log(res)
if (res.code == 1) {
dataSource.value = res.data.data;
page.total = res.data.count;
} else {
layer.msg(res.msg, { icon: 2 })
}
})
}
const columns = [
{
title: "内容标题",
width: "180px",
key: "title",
align: 'center'
},
{
title: "发布时间",
width: "180px",
key: "releasetime",
align: 'center'
},
{
title: "状态",
width: "180px",
key: "type",
customSlot: 'type',
align: 'center'
},
{
title: '操作',
width: '120px',
customSlot: 'operator',
key: 'operator',
align: 'center',
fixed: 'right'
}
]
const addButton = ref([
{
text: "确认",
callback: async () => {
console.log(questionnaireList.value);
var key = questionnaireList.value.map((item, index) => {
if (!('topic' in item)) {
return '';
} else {
return {
questionnaire_id: item.questionnaire_id,
topic_id: item.id,
option: Array.isArray(item.topic) ? item.topic.join(',') : item.topic,
}
}
});
for (var i = 0; i < key.length; i++) {
if (key[i] == '') {
layer.msg('请填写第[' + (i + 1) + ']个问题', { icon: 2 });
return;
}
}
var key = JSON.stringify(key);
console.log(key);
getQuestionnaireFill({ option: key }).then((res) => {
console.log(res);
if (res.code == 1) {
layer.msg(res.msg);
} else {
layer.msg(res.msg, { icon: 2 });
}
detailShow.value = false;
getHierarchicalData();
})
}
},
{
text: "取消",
callback: () => {
detailShow.value = false;
}
}
])
</script>
<style scoped>
:deep(.w-e-text-container) {
min-height: 400px !important;
}
:deep(.w-e-toolbar) {
border: 1px solid #ddd !important;
border-bottom: none !important;
}
:deep(.w-e-text-container) {
border: 1px solid #ddd !important;
border-top: none !important;
}
:deep(.ql-editor) {
height: 300px;
width: 100%;
}
:deep(.layui-input-block) {
max-width: 85%;
}
:deep(.detail-content) {
padding: 10px;
max-height: calc(100vh - 200px);
overflow-y: auto;
}
/* 添加视频自适应样式 */
:deep(.detail-content video) {
max-width: 100%;
height: auto;
}
:deep(.detail-content iframe) {
max-width: 100%;
width: 100%;
aspect-ratio: 16 / 9;
}
:deep(.layui-radio) {
display: block;
}
:deep(.layui-checkbox) {
display: block;
margin-bottom: 10px;
}
</style>

View File

@ -30,12 +30,12 @@
style="width: 98%"></lay-input>
</lay-form-item>
</lay-col>
<lay-col :md="5">
<!-- <lay-col :md="5">
<lay-form-item label="手机号" label-width="80px">
<lay-input v-model="searchQuery.mobile" placeholder="请输入" :allow-clear="true"
style="width: 98%"></lay-input>
</lay-form-item>
</lay-col>
</lay-col> -->
<lay-col :md="5">
<lay-form-item label-width="20">
<lay-button style="margin-left: 20px" type="normal" size="sm" @click="toSearch">
@ -55,9 +55,8 @@
<span v-if="row.gender == 2"></span>
</template>
<template v-slot:operator="{ row }">
<lay-button size="xs" border="green" border-style="dashed" @click="getInfo(row)">
员工档案
</lay-button>
<span style="color: #00A394;cursor: pointer"
@click="getInfo(row)">员工档案</span>
</template>
</lay-table>
</div>
@ -117,13 +116,11 @@ const data = ref([])
const isFold = ref(false)
const searchQuery = ref({
nickname: '',
mobile: '',
})
function toReset() {
searchQuery.value = {
nickname: '',
mobile: '',
}
}
@ -133,7 +130,7 @@ function handleClick(node: any) {
getUserList();
}
const page = reactive({ current: 1, limit: 10, total: 1 })
const page = reactive({ current: 1, limit: 15, total: 1 })
const columns = ref([
{ title: '编号', width: '80px', key: 'id', align: 'center' },
{ title: '工号/帐号', width: '100px', key: 'code', align: 'center' },
@ -141,7 +138,7 @@ const columns = ref([
{ title: '手机号', width: '120px', key: 'mobile', align: 'center' },
{ title: '性别', width: '80px', key: 'gender', customSlot: 'gender', align: 'center' },
{ title: '身份证号', width: '180px', key: 'member_code', align: 'center' },
{ title: '状态', width: '100px', key: 'status', customSlot: 'status', align: 'center' },
// { title: '', width: '100px', key: 'status', customSlot: 'status', align: 'center' },
{ title: '操作', width: '250px', customSlot: 'operator', key: 'operator', fixed: 'right', align: 'center' }
])

View File

@ -51,11 +51,11 @@
<div class="info-grid">
<div class="info-item">
<span class="label">科室</span>
<span class="value">{{ groupName || '暂无' }}</span>
<span class="value">{{ userInfo.gorup_name || '暂无' }}</span>
</div>
<div class="info-item">
<span class="label">党支部</span>
<span class="value">{{ partyName || '暂无' }}</span>
<span class="value">{{ userInfo.party_name || '暂无' }}</span>
</div>
<div class="info-item">
<span class="label">岗位名称</span>
@ -181,12 +181,19 @@
</tr>
</thead>
<tbody>
<template v-for="item in jiaList">
<tr v-if="item.assessment_type == 1">
<td>{{ item.score_value }}</td>
<td>{{ item.project_name }}</td>
<td>{{ item.notes }}</td>
<td>{{ item.createtime }}</td>
<template v-if="jiaList.length > 0">
<template v-for="item in jiaList">
<tr v-if="item.assessment_type == 1">
<td>{{ item.score_value }}</td>
<td>{{ item.project_name }}</td>
<td>{{ item.notes }}</td>
<td>{{ item.createtime }}</td>
</tr>
</template>
</template>
<template v-else>
<tr style="text-align: center;height: 100px;">
<td colspan="4">暂无加分情况</td>
</tr>
</template>
</tbody>
@ -209,12 +216,19 @@
</tr>
</thead>
<tbody>
<template v-for="item in jiaList">
<tr v-if="item.assessment_type == 2">
<td>{{ item.score_value }}</td>
<td>{{ item.project_name }}</td>
<td>{{ item.notes }}</td>
<td>{{ item.createtime }}</td>
<template v-if="jiaList.length > 0">
<template v-for="item in jiaList">
<tr v-if="item.assessment_type == 2">
<td>{{ item.score_value }}</td>
<td>{{ item.project_name }}</td>
<td>{{ item.notes }}</td>
<td>{{ item.createtime }}</td>
</tr>
</template>
</template>
<template v-else>
<tr style="text-align: center;height: 100px;">
<td colspan="4">暂无扣分情况</td>
</tr>
</template>
</tbody>

View File

@ -67,9 +67,9 @@
<lay-table :page="page" height="600px" :columns="columns" :loading="loading" :data-source="dataSource"
@change="change">
<template v-slot:scoringrecord_status="{ row }">
<lay-tag v-if="row.scoringrecord_status == 1" type="primary">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 1" type="primary" size="sm">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2" size="sm">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm" size="sm">科室已评</lay-tag>
<!-- <lay-tag v-if="row.scoringrecord_status == 4" type="danger">医院已评</lay-tag> -->
</template>
<template v-slot:nickname="{ row }">
@ -151,9 +151,9 @@
</lay-tab>
<lay-table :default-expand-all="true" :columns="userColumns" :data-source="userDataSource">
<template v-slot:scoringrecord_status="{ row }">
<lay-tag v-if="row.scoringrecord_status == 1" type="primary">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 1" type="primary" size="sm">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2" size="sm">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm" size="sm">科室已评</lay-tag>
</template>
<template v-slot:operator="{ row }">
<span v-if="row.if == 2" style="color: #00A394;cursor: pointer"
@ -242,9 +242,15 @@ const userShow = ref(false);
const userColumns = ref([
{ title: '月度', width: '80px', key: 'month', align: 'center' },
{ title: '考评对象', width: '100px', key: 'user', align: 'center' },
{ title: '参评时间', width: '100px', key: 'createtime', align: 'center' },
{ title: '自评总分', width: '100px', key: 'self_score', align: 'center' },
{ title: '科室评分', width: '100px', key: 'department_score', align: 'center' },
{ 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})=>{
return row.department_score==''||row.department_score==0?'未评分':row.department_score;
} },
// { title: '', width: '100px', key: 'hospital_score', align: 'center' },
{ title: '状态', width: '100px', key: 'scoringrecord_status', customSlot: 'scoringrecord_status', align: 'center' },
{ title: '操作', width: '100px', key: 'operator', customSlot: 'operator', align: 'center' },
@ -446,8 +452,12 @@ const columns = ref([
{ title: '工号', width: '100px', key: 'code', align: 'center' },
{ title: '部门', width: '120px', key: 'group_name', align: 'center' },
// { title: '', width: '100px', key: 'hospital_score_scoringrecord', align: 'center' },
{ title: '自评总分', width: '100px', key: 'user_scoringrecord', align: 'center' },
{ title: '科室评分', width: '100px', key: 'department_score_scoringrecord', 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: '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: 'scoringrecord_status', customSlot: 'scoringrecord_status', align: 'center' },
{
title: '操作',

View File

@ -32,9 +32,6 @@
<template v-slot:id="{ data }">
{{ data.id }}
</template>
<template v-slot:department_score="{ data }">
{{ data.department_score == 0 ? '-' : data.department_score }}
</template>
<template v-slot:username="{ data }">
{{ data.username }}
</template>
@ -230,22 +227,33 @@ const columns = [
title: '参评时间',
width: '250px',
align: 'center',
key: 'createtime'
key: 'createtime',
customSlot: ({row})=>{
return row.createtime==''||row.createtime==null?'未参评':row.createtime;
},
},
{
title: '自评总分',
key: 'self_score',
align: 'center',
customSlot: ({row})=>{
return row.self_score==''||row.self_score==0?'未评分':row.self_score;
},
}, {
title: '科室评分',
key: 'department_score',
customSlot: 'department_score',
align: 'center',
customSlot: ({row})=>{
return row.department_score==''||row.department_score==0?'未评分':row.department_score;
},
},
// {
// title: '',
// key: 'hospital_score',
// align: 'center',
// customSlot: ({row})=>{
// return row.hospital_score==''||row.hospital_score==0?'':row.hospital_score;
// },
// },
{
title: '操作',

View File

@ -0,0 +1,484 @@
<template>
<lay-container fluid="true" class="organization-box">
<div style="display: flex">
<!-- 添加左侧科室列表 -->
<div v-if="userStore.userInfo.level == 1" :style="{ width: isFold ? `0px` : `200px` }" class="left-tree">
<div v-show="!isFold">
科室列表
</div>
<lay-tree v-show="!isFold" style="margin-top: 10px" :data="data" v-model:selectedKey="leftId"
:showLine="false" :default-expand-all="false" @node-click="handleClick">
<template #title="{ data }">
<span :class="leftId == data.id ? 'isChecked' : ''">
{{ data.name }}
</span>
</template>
</lay-tree>
<div class="isFold" @click="isFold = !isFold">
&nbsp;<lay-icon v-if="!isFold" class="layui-icon-left"></lay-icon>
<lay-icon v-else class="layui-icon-right"></lay-icon>
</div>
</div>
<!-- 将原有内容包装在右侧容器中 -->
<div style="flex: 1; padding: 10px;">
<lay-row :space="10">
<lay-col :md="24">
<lay-card>
<lay-form style="margin-top: 20px">
<lay-row style="min-width: 1200px">
<lay-col :md="5">
<lay-form-item label="发生时间:" :label-width="100">
<lay-date-picker style="width: 100%" v-model="searchForm.fsdate"
placeholder="发生时间" allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
<lay-col :md="6" v-if="userStore.userInfo.level == 1">
<lay-form-item label="考评对象:" :label-width="100">
<lay-select v-model="searchForm.user_id" placeholder="请选择考评对象"
:show-search="true">
<lay-select-option v-for="user in userList" :key="user.id"
:value="user.id" :label="user.nickname">
</lay-select-option>
</lay-select>
</lay-form-item>
</lay-col>
<lay-col :md="4">
<lay-form-item label="审核状态:" :label-width="100">
<lay-select style="width: 100%" v-model="searchForm.status"
placeholder="审核状态">
<lay-select-option :value="1" label="待审核"></lay-select-option>
<lay-select-option :value="2" label="已通过"></lay-select-option>
<lay-select-option :value="3" label="已驳回"></lay-select-option>
</lay-select>
</lay-form-item>
</lay-col>
<lay-col :md="4">
<lay-form-item :label-width="0">
<lay-button style="margin-left: 20px" type="primary"
@click="toSearch">查询</lay-button>
<lay-button @click="toReset">重置</lay-button>
</lay-form-item>
</lay-col>
</lay-row>
</lay-form>
</lay-card>
</lay-col>
<lay-col :md="24">
<lay-card>
<div style="padding: 10px">
<span style="font-size: 18px;vertical-align: center;margin-right: 20px">拒收红包审核</span>
</div>
<lay-table @change="handlePageChange" :columns="columns" :dataSource="dataSource"
:even="true" height="500px" size="lg" :page="page">
<template v-slot:checkbox="{ data }">
<lay-checkbox v-model="data.checked" :value="data.checked"></lay-checkbox>
</template>
<template v-slot:refundAmount="{ data }">
¥{{ data.refunding_amount }}
</template>
<template v-slot:refundType="{ data }">
{{ formatRefundType(data.refunding_type) }}
</template>
<template v-slot:status="{ data }">
<lay-tag v-if="data.status == 1" type="warm" size="sm">待审核</lay-tag>
<lay-tag v-if="data.status == 2" type="primary" size="sm">已通过</lay-tag>
<lay-tag v-if="data.status == 3" type="danger" size="sm">已驳回</lay-tag>
</template>
<template v-slot:operation="{ data }">
<lay-space>
<span style="color: #00A394;cursor: pointer" v-if="data.status == 1"
@click="openDetail(data, 2)">审核</span>
<span style="color: #00A394;cursor: pointer"
@click="openDetail(data, 1)">详情</span>
</lay-space>
</template>
</lay-table>
</lay-card>
</lay-col>
</lay-row>
</div>
</div>
</lay-container>
<!-- 修改详情弹窗内容 -->
<lay-layer v-model="detailVisible" :title="addIsInfo == 1 ? '详情查看' : '审核'" :type="4" :area="['950px', '100%']"
:shade="true" :btn="addIsInfo == 1 ? '' : addButton">
<div style="padding: 20px">
<lay-descriptions title="基本信息" :column="2" border>
<lay-descriptions-item label="考评对象">
{{ detailForm.nickname }}
</lay-descriptions-item>
<lay-descriptions-item label="科室">
{{ detailForm.group_name }}
</lay-descriptions-item>
<lay-descriptions-item label="发生日期">
{{ detailForm.fsdate }}
</lay-descriptions-item>
<lay-descriptions-item label="证明人">
{{ detailForm.zm_nickname }}
</lay-descriptions-item>
<lay-descriptions-item label="病区名称">
{{ detailForm.bq_name }}
</lay-descriptions-item>
<lay-descriptions-item label="患者姓名">
{{ detailForm.hz_name }}
</lay-descriptions-item>
</lay-descriptions>
<lay-descriptions title="退还信息" :column="2" border style="margin-top: 20px">
<lay-descriptions-item label="退还金额">
¥{{ detailForm.refunding_amount }}
</lay-descriptions-item>
<lay-descriptions-item label="退还日期">
{{ detailForm.thdate }}
</lay-descriptions-item>
<lay-descriptions-item label="退还方式">
{{ formatRefundType(detailForm.refunding_type) }}
</lay-descriptions-item>
<lay-descriptions-item label="状态">
{{ formatStatus(detailForm.status) }}
</lay-descriptions-item>
<lay-descriptions-item label="备注" :span="2">
{{ detailForm.notes || '暂无备注' }}
</lay-descriptions-item>
<lay-descriptions-item label="驳回原因" :span="2" v-if="detailForm.status == 3">
{{ detailForm.reason || '暂无驳回原因' }}
</lay-descriptions-item>
</lay-descriptions>
<lay-descriptions v-if="detailForm.fj_url" title="附件信息" :column="1" border style="margin-top: 20px">
<lay-descriptions-item label="附件">
<a style="color: #009688" :href="detailForm.fj_url" target="_blank">附件下载</a>
</lay-descriptions-item>
</lay-descriptions>
<lay-descriptions v-if="detailForm.status == 1" title="审核" :column="1" border style="margin-top: 20px">
<lay-descriptions-item label="状态">
<lay-radio-group name="action" v-model="type">
<lay-radio :value="2">通过</lay-radio>
<lay-radio :value="3">驳回</lay-radio>
</lay-radio-group>
</lay-descriptions-item>
<lay-descriptions-item label="驳回原因" v-if="type == 3">
<lay-textarea v-model="reason" placeholder="请输入驳回原因"></lay-textarea>
</lay-descriptions-item>
</lay-descriptions>
</div>
</lay-layer>
</template>
<script setup lang="ts">
import { onMounted, reactive, ref } from 'vue'
import { getDoctorName, getRejectRedEnvelopes, rejectRedEnvelopesCreate, rejectRedEnvelopesUpdate, userGroupData } from '@/api/module/home';
import { layer } from '@layui/layui-vue';
import { useUserStore } from '@/store/user';
const userStore = useUserStore()
//
const searchForm = ref({
fsdate: '',
user_id: '',
status: ''
})
//
const page = reactive({
current: 1,
limit: 10,
total: 1
})
const type = ref(1)
const id = ref(0)
const reason = ref('')
//
const ksOptions = ref([])
//
const getGroupList = () => {
userGroupData({}).then((res) => {
if (res.code === 1) {
ksOptions.value = res.data;
} else {
layer.msg(res.msg, { icon: 2 })
}
})
}
const userList = ref([]);
const getUserList = () => {
getDoctorName({}).then((res) => {
if (res.code === 1) {
userList.value = res.data;
}
})
}
//
const dataSource = ref([])
//
const data = ref([])
const leftId = ref('')
const isFold = ref(false)
// id
const getList = () => {
const params = {
page: page.current,
size: page.limit,
group_id: leftId.value, // id
...searchForm.value
}
getRejectRedEnvelopes(params).then((res) => {
if (res.code === 1) {
dataSource.value = res.data.data;
page.total = res.data.count;
} else {
layer.msg(res.msg, { icon: 2 })
}
})
}
// 退
const formatRefundType = (type) => {
return type == 1 ? '现金' : '转账'
}
//
const columns = [
{
title: '发生日期',
width: '120px',
key: 'fsdate',
align: 'center'
},
{
title: '考评对象',
width: '120px',
key: 'nickname',
align: 'center'
},
{
title: '科室',
width: '120px',
key: 'group_name',
align: 'center'
},
{
title: '病区',
width: '120px',
key: 'bq_name',
align: 'center'
},
{
title: '患者姓名',
width: '120px',
key: 'hz_name',
align: 'center'
},
{
title: '退还金额',
width: '100px',
key: 'refunding_amount',
align: 'center',
customSlot: 'refundAmount'
},
{
title: '退还日期',
width: '120px',
key: 'thdate',
align: 'center'
},
{
title: '退还方式',
width: '120px',
key: 'refunding_type',
align: 'center',
customSlot: 'refundType'
},
{
title: '状态',
width: '130px',
key: 'status',
align: 'center',
customSlot: 'status'
},
{
title: '操作',
width: '150px',
key: 'operation',
align: 'center',
fixed: 'right',
customSlot: 'operation'
}
]
//
//
const toSearch = () => {
page.current = 1
getList()
}
//
const toReset = () => {
searchForm.value = {
fsdate: '',
user_id: '',
status: ''
}
page.current = 1
getList()
}
//
const handlePageChange = (current: number) => {
page.current = current
getList()
}
//
const formatStatus = (status: number) => {
switch (status) {
case 1:
return '待审核'
case 2:
return '已通过'
case 3:
return '已驳回'
default:
return '未知'
}
}
//
const detailVisible = ref(false)
const detailForm = ref()
const addIsInfo = ref(1);
//
const openDetail = (data, type) => {
id.value = data.id
detailForm.value = { ...data }
detailVisible.value = true
addIsInfo.value = type
reason.value = ''
}
//
const getLeftList = () => {
userGroupData({}).then((res) => {
if (res.code === 1) {
data.value = res.data;
if (userStore.userInfo.level == 1) {
leftId.value = res.data[0].id;
} else {
leftId.value = userStore.userInfo.group_id;
}
getList(); //
} else {
layer.msg(res.msg, { icon: 2 })
}
})
}
//
function handleClick(node: any) {
leftId.value = node.id
getList();
}
onMounted(() => {
getLeftList(); // getList()
getUserList();
getGroupList();
})
const addButton = ref([
{
text: "确认",
callback: async () => {
const submitRequest = rejectRedEnvelopesUpdate({ status: type.value, id: id.value, reason: reason.value });
submitRequest.then(res => {
if (res.code === 1) {
layer.msg('审核成功', { icon: 1 })
getList()
} else {
layer.msg(res.msg, { icon: 2 })
}
})
detailVisible.value = false;
}
},
{
text: "取消",
callback: () => {
detailVisible.value = false;
}
}
])
</script>
<style>
.layui-table-header .layui-table-cell {
background-color: #ECF8FA !important;
}
.search-form-wrapper {
width: 100%;
overflow-x: auto;
}
.search-form-wrapper::-webkit-scrollbar {
height: 8px;
}
.search-form-wrapper::-webkit-scrollbar-thumb {
background-color: #e0e0e0;
border-radius: 4px;
}
.search-form-wrapper::-webkit-scrollbar-track {
background-color: #f5f5f5;
}
</style>
<style scoped>
/* 添加左侧树的样式 */
.organization-box {
width: calc(100vw - 240px);
height: calc(100vh - 110px);
margin-top: 10px;
box-sizing: border-box;
background-color: #fff;
overflow: hidden;
}
.left-tree {
display: inline-block;
padding: 20px 15px 0 5px;
height: 1200px;
border-right: 1px solid #e6e6e6;
box-sizing: border-box;
position: relative;
}
.isFold {
position: absolute;
top: 36%;
right: -10px;
width: 26px;
height: 26px;
line-height: 26px;
border-radius: 13px;
background-color: #fff;
border: 1px solid #e6e6e6;
cursor: pointer;
}
.isChecked {
display: inline-block;
background-color: #e8f1ff;
color: red;
}
</style>

View File

@ -1,25 +1,6 @@
<template>
<lay-container fluid="true" class="organization-box">
<div style="display: flex">
<!-- 添加左侧科室列表 -->
<div v-if="userStore.userInfo.level == 1" :style="{ width: isFold ? `0px` : `200px` }" class="left-tree">
<div v-show="!isFold">
科室列表
</div>
<lay-tree v-show="!isFold" style="margin-top: 10px" :data="data" v-model:selectedKey="leftId"
:showLine="false" :default-expand-all="false" @node-click="handleClick">
<template #title="{ data }">
<span :class="leftId == data.id ? 'isChecked' : ''">
{{ data.name }}
</span>
</template>
</lay-tree>
<div class="isFold" @click="isFold = !isFold">
&nbsp;<lay-icon v-if="!isFold" class="layui-icon-left"></lay-icon>
<lay-icon v-else class="layui-icon-right"></lay-icon>
</div>
</div>
<!-- 将原有内容包装在右侧容器中 -->
<div style="flex: 1; padding: 10px;">
<lay-row :space="10">
@ -69,7 +50,6 @@
<div style="padding: 10px">
<span style="font-size: 18px;vertical-align: center;margin-right: 20px">拒收红包列表</span>
<lay-button type="primary" size="sm" @click="openAdd">新增</lay-button>
<lay-button type="primary" size="sm">导出Excel</lay-button>
</div>
<lay-table @change="handlePageChange" :columns="columns" :dataSource="dataSource" :even="true" height="500px" size="lg"
:page="page">
@ -83,19 +63,13 @@
{{ formatRefundType(data.refunding_type) }}
</template>
<template v-slot:status="{ data }">
<lay-tag v-if="data.status == 1" type="warm">待审核</lay-tag>
<lay-tag v-if="data.status == 2" type="primary">已通过</lay-tag>
<lay-tag v-if="data.status == 3" type="danger">已驳回</lay-tag>
<lay-tag v-if="data.status == 1" type="warm" size="sm">待审核</lay-tag>
<lay-tag v-if="data.status == 2" type="primary" size="sm">已通过</lay-tag>
<lay-tag v-if="data.status == 3" type="danger" size="sm">已驳回</lay-tag>
</template>
<template v-slot:operation="{ data }">
<lay-popconfirm v-if="data.status == 1 && data.level == 1" content="请确认你的操作,流程将结束"
trigger="click" cancelText="审核拒绝" confirmText="审核通过" @confirm="confirm(data, 2)"
@cancel="confirm(data, 3)">
<lay-button v-if="data.status == 1 && data.level == 1" type="primary" size="sm"
style="margin-left: 8px">审核</lay-button>
</lay-popconfirm>
<lay-button type="normal" size="sm" style="margin-left: 8px"
@click="openDetail(data)">详情</lay-button>
<span style="color: #00A394;cursor: pointer"
@click="openDetail(data)">详情</span>
</template>
</lay-table>
</lay-card>
@ -109,7 +83,7 @@
<lay-layer v-model="visible" :title="formTitle" :type="4" :area="['950px', '100%']" :shade="true">
<div style="padding: 20px">
<lay-form :model="form" mode="inline">
<lay-form-item label="考评对象" required>
<lay-form-item label="考评对象" required prop="user_id">
<lay-select disabled v-model="form.user_id" placeholder="请选择考评对象" :show-search="true">
<lay-select-option v-for="user in userList" :key="user.id" :value="user.id"
:label="user.nickname">
@ -121,30 +95,30 @@
:checkStrictly="false" search :replaceFields="replaceFields">
</lay-cascader>
</lay-form-item> -->
<lay-form-item label="发生日期" required>
<lay-form-item label="发生日期" required prop="fsdate">
<lay-date-picker v-model="form.fsdate" placeholder="请选择发生日期"></lay-date-picker>
</lay-form-item>
<lay-form-item label="证明人" required>
<lay-form-item label="证明人" required prop="zm_user_id">
<lay-select v-model="form.zm_user_id" placeholder="请选择证明人" :show-search="true">
<lay-select-option v-for="user in userList" :key="user.id" :value="user.id"
:label="user.nickname">
</lay-select-option>
</lay-select>
</lay-form-item>
<lay-form-item label="病区名称" required>
<lay-form-item label="病区名称" required prop="bq_name">
<lay-input style="width: 220px" v-model="form.bq_name" placeholder="请输入病区名称"></lay-input>
</lay-form-item>
<lay-form-item label="患者姓名" required>
<lay-form-item label="患者姓名" required prop="hz_name">
<lay-input style="width: 220px" v-model="form.hz_name" placeholder="请输入患者姓名"></lay-input>
</lay-form-item>
<lay-form-item label="退还金额" required>
<lay-form-item label="退还金额" required prop="refunding_amount">
<lay-input-number style="width: 220px" v-model="form.refunding_amount"
placeholder="请输入退还金额"></lay-input-number>
</lay-form-item>
<lay-form-item label="退还日期" required>
<lay-form-item label="退还日期" required prop="thdate">
<lay-date-picker v-model="form.thdate" placeholder="请选择退还日期"></lay-date-picker>
</lay-form-item>
<lay-form-item label="退还方式" required>
<lay-form-item label="退还方式" required prop="refunding_type" >
<lay-select v-model="form.refunding_type" placeholder="请选择退还方式">
<lay-select-option :value="1" label="现金"></lay-select-option>
<lay-select-option :value="2" label="转账"></lay-select-option>
@ -177,16 +151,16 @@
<div style="padding: 20px">
<lay-descriptions title="基本信息" :column="2" border>
<lay-descriptions-item label="考评对象">
<lay-tag size="small" type="primary">{{ detailForm.nickname }}</lay-tag>
{{ detailForm.nickname }}
</lay-descriptions-item>
<lay-descriptions-item label="科室">
<lay-tag size="small" type="normal">{{ detailForm.group_name }}</lay-tag>
{{ detailForm.group_name }}
</lay-descriptions-item>
<lay-descriptions-item label="发生日期">
{{ detailForm.fsdate }}
</lay-descriptions-item>
<lay-descriptions-item label="证明人">
<lay-tag size="small" type="warm">{{ detailForm.zm_nickname }}</lay-tag>
{{ detailForm.zm_nickname }}
</lay-descriptions-item>
<lay-descriptions-item label="病区名称">
{{ detailForm.bq_name }}
@ -198,23 +172,23 @@
<lay-descriptions title="退还信息" :column="2" border style="margin-top: 20px">
<lay-descriptions-item label="退还金额">
<lay-tag size="small" type="danger">¥{{ detailForm.refunding_amount }}</lay-tag>
¥{{ detailForm.refunding_amount }}
</lay-descriptions-item>
<lay-descriptions-item label="退还日期">
{{ detailForm.thdate }}
</lay-descriptions-item>
<lay-descriptions-item label="退还方式">
<lay-tag size="small" type="normal">{{ formatRefundType(detailForm.refunding_type) }}</lay-tag>
{{ formatRefundType(detailForm.refunding_type) }}
</lay-descriptions-item>
<lay-descriptions-item label="状态">
<lay-tag size="small"
:type="detailForm.status == 2 ? 'primary' : detailForm.status == 3 ? 'danger' : 'warm'">
{{ formatStatus(detailForm.status) }}
</lay-tag>
</lay-descriptions-item>
<lay-descriptions-item label="备注" :span="2">
{{ detailForm.notes || '暂无备注' }}
</lay-descriptions-item>
<lay-descriptions-item label="驳回原因" :span="2" v-if="detailForm.status == 3">
{{ detailForm.reason || '暂无驳回原因' }}
</lay-descriptions-item>
</lay-descriptions>
<lay-descriptions v-if="detailForm.fj_url" title="附件信息" :column="1" border style="margin-top: 20px">
@ -222,10 +196,6 @@
<a style="color: #009688" :href="detailForm.fj_url" target="_blank">附件下载</a>
</lay-descriptions-item>
</lay-descriptions>
<div style="text-align: center; margin-top: 20px;">
<lay-button @click="detailVisible = false">关闭</lay-button>
</div>
</div>
</lay-layer>
</template>
@ -510,15 +480,7 @@ const submitForm = () => {
}
})
}
const confirm = (data: any, type: number) => {
const submitRequest = rejectRedEnvelopesUpdate({ status: type, id: data.id });
submitRequest.then(res => {
if (res.code === 1) {
layer.msg('审核成功', { icon: 1 })
getList()
}
})
}
//
const handlePageChange = (current: number) => {
page.current = current

View File

@ -60,10 +60,10 @@
<lay-table :page="page" height="600px" :columns="columns" :loading="loading" :data-source="dataSource"
@change="pageChange">
<template v-slot:scoringrecord_status="{ row }">
<lay-tag v-if="row.scoringrecord_status == 1" type="primary">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="danger">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 1" type="primary" size="sm">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2" size="sm">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm" size="sm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="danger" size="sm">医院已评</lay-tag>
</template>
<template v-slot:nickname="{ row }">
<div style="color: #00A394;cursor: pointer" @click="openUserListShow(row)">{{ row.nickname }}</div>
@ -135,10 +135,10 @@
<lay-table height="400px" :default-expand-all="true" :columns="userColumns"
:data-source="userDataSource">
<template v-slot:scoringrecord_status="{ row }">
<lay-tag v-if="row.scoringrecord_status == 1" type="primary">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="danger">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 1" type="primary" size="sm">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2" size="sm">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm" size="sm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="danger" size="sm">医院已评</lay-tag>
</template>
<template v-slot:operator="{ row }">
<span v-if="row.if == 2" style="color: #00A394;cursor: pointer"
@ -181,10 +181,16 @@ const userShow = ref(false);
const userColumns = ref([
{ title: '季度', width: '80px', key: 'quarter', align: 'center' },
{ title: '考评对象', width: '100px', key: 'user', align: 'center' },
{ title: '参评时间', width: '100px', key: 'createtime', align: 'center' },
{ title: '自评总分', width: '100px', key: 'self_score', align: 'center' },
{ title: '科室评分', width: '100px', key: 'department_score', align: 'center' },
{ title: '医院评分', width: '100px', key: 'hospital_score', align: 'center' },
{ 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})=>{
return row.department_score==''||row.department_score==0?'未评分':row.department_score;
} },
// { title: '', width: '100px', key: 'hospital_score', align: 'center' },
{ title: '状态', width: '100px', key: 'scoringrecord_status', customSlot: 'scoringrecord_status', align: 'center' },
{ title: '操作', width: '100px', key: 'operator', customSlot: 'operator', align: 'center' },
])
@ -195,6 +201,7 @@ const searchAccountUser = ref(dayjs().year());
const openUserListShow = (row) => {
userInfo.value = row;
userShow.value = true;
userDataSource.value = [];
getUserListInfo();
}
const inputChange = (row) => {
@ -432,9 +439,13 @@ const columns = ref([
{ title: '考评对象', width: '100px', key: 'nickname', customSlot: 'nickname', align: 'center' },
{ title: '工号', width: '100px', key: 'code', align: 'center' },
{ title: '部门', width: '120px', key: 'group_name', align: 'center' },
{ title: '医院评分', width: '100px', key: 'hospital_score_scoringrecord', align: 'center' },
{ title: '科室评分', width: '100px', key: 'department_score_scoringrecord', align: 'center' },
{ title: '自评总分', width: '100px', key: 'user_scoringrecord', align: 'center' },
// { title: '', width: '100px', key: 'hospital_score_scoringrecord', align: 'center' },
{ 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: 'user_scoringrecord', align: 'center', customSlot: ({row})=>{
return row.user_scoringrecord==''||row.user_scoringrecord==0?'未评分':row.user_scoringrecord;
} },
{ title: '自评状态', width: '100px', key: 'scoringrecord_status', customSlot: 'scoringrecord_status', align: 'center' },
{
title: '操作',

View File

@ -219,17 +219,26 @@ const columns = [
title: '参评时间',
width: '250px',
align: 'center',
key: 'createtime'
key: 'createtime',
customSlot: ({row})=>{
return row.createtime==''||row.createtime==null?'未参评':row.createtime;
},
},
{
title: '自评总分',
key: 'self_score',
align: 'center',
customSlot: ({row})=>{
return row.self_score==''||row.self_score==0?'未评分':row.self_score;
},
}, {
title: '科室评分',
key: 'department_score',
customSlot: 'department_score',
align: 'center',
customSlot: ({row})=>{
return row.department_score==''||row.department_score==0?'未评分':row.department_score;
},
},
// {
// title: '',

View File

@ -72,12 +72,12 @@
<lay-button size="sm" type="primary" @click="changeAddShow()">新增</lay-button>
</template>
<template v-slot:operator="{ row }">
<lay-button size="xs" border="green" border-style="dashed" @click="edit(row)">
编辑
</lay-button>
<lay-popconfirm trigger="click" content="确定要删除此用户吗?" @confirm="del(row)">
<lay-button size="xs" border="red" border-style="dashed">删除</lay-button>
</lay-popconfirm>
<lay-space size="lg">
<span style="color: #00A394;cursor: pointer" @click="edit(row)">编辑</span>
<lay-popconfirm trigger="click" content="确定要删除吗?" @confirm="del(row)">
<span style="color: #00A394;cursor: pointer">删除</span>
</lay-popconfirm>
</lay-space>
</template>
</lay-table>
</div>
@ -86,9 +86,10 @@
<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" :headers="{ token: userStore.token }"
url="http://yfyd.hschool.com.cn/api/common/upload" @cutdone="getCutDone2" v-model="file2" :auto="true" acceptMime="images"
:cut="false" :cutOptions="cutOptions" @done="getFileDone2">
<lay-upload style="width:180px;" ref="uploadRefA" :number="1" field="file" :size="1000"
:headers="{ token: userStore.token }" url="http://yfyd.hschool.com.cn/api/common/upload"
@cutdone="getCutDone2" v-model="file2" :auto="true" acceptMime="images" :cut="false"
:cutOptions="cutOptions" @done="getFileDone2">
<template #preview>
<div class="easy-wrap" v-if="model11.avatar">
<img :src="model11.avatar" style="width: 100px;" />
@ -133,9 +134,10 @@
<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" :headers="{ token: userStore.token }"
url="http://yfyd.hschool.com.cn/api/common/upload" @cutdone="getCutDone" v-model="file1" :auto="true" acceptMime="images"
:cut="false" :cutOptions="cutOptions" @done="getFileDone">
<lay-upload style="width:180px;" ref="uploadRef" :number="1" field="file" :size="1000"
:headers="{ token: userStore.token }" url="http://yfyd.hschool.com.cn/api/common/upload"
@cutdone="getCutDone" v-model="file1" :auto="true" acceptMime="images" :cut="false"
:cutOptions="cutOptions" @done="getFileDone">
<template #preview>
<div class="easy-wrap" v-if="model11.license_image">
<img :src="model11.license_image" style="width: 100px;" />
@ -157,12 +159,10 @@
<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">
<lay-cascader size="lg" style="width:180px;" :options="partyList" search
:replaceFields="replaceFields"
v-model="model11.party_id"
placeholder="选择党支部" allow-clear></lay-cascader>
</lay-form-item> -->
<lay-form-item label="党支部" prop="party_id">
<lay-cascader size="lg" style="width:180px;" :options="partyList" search :replaceFields="replaceFields"
v-model="model11.party_id" placeholder="选择党支部" allow-clear></lay-cascader>
</lay-form-item>
<lay-form-item label="角色组" prop="auth_group_id" required>
<lay-select v-model="model11.auth_group_id" style="width:180px;" placeholder="选择角色组">
<lay-select-option size="lg" v-for="item in authList" :value="item.id"
@ -330,7 +330,7 @@ const columns = ref([
{ title: '手机号', width: '120px', key: 'mobile', align: 'center' },
{ title: '性别', width: '80px', key: 'gender', customSlot: 'gender', align: 'center' },
{ title: '身份证号', width: '180px', key: 'member_code', align: 'center' },
{ title: '状态', width: '100px', key: 'status', customSlot: 'status', align: 'center' },
// { title: '', width: '100px', key: 'status', customSlot: 'status', align: 'center' },
{ title: '操作', width: '150px', customSlot: 'operator', key: 'operator', fixed: 'right', align: 'center' }
])
const change = (page: any) => {
@ -351,7 +351,7 @@ const model11 = reactive({
group_id: [],
party_id: [],
avatar: '',
license_image:'',
license_image: '',
birthday: '',
group_level: '',
party_level: '',
@ -374,7 +374,7 @@ const changeAddShow = () => {
mobile: '',
email: '',
member_code: '',
license_image:'',
license_image: '',
code: '',
gender: 0,
id: 0,

View File

@ -5,7 +5,8 @@
<span style="font-size: 18px;vertical-align: center;margin-right: 20px">通知公告</span>
<lay-button type="primary" @click="openNew()" size="sm">新增公告</lay-button>
</div>
<lay-table :page="page" height="600px" size="lg" @change="changePage" :columns="columns" :data-source="dataSource">
<lay-table :page="page" height="600px" size="lg" @change="changePage" :columns="columns"
:data-source="dataSource">
<!-- <template v-slot:content="{ data }">
<div v-html="data.content"></div>
</template> -->
@ -15,6 +16,7 @@
</template>
<template v-slot:operator="{ data }">
<lay-space size="lg">
<span @click="handleViewDetail(data)" style="color: #00A394;cursor: pointer">查看详情</span>
<span style="color: #00A394;cursor: pointer" @click="editShowMsd(data)">编辑</span>
<lay-popconfirm trigger="click" content="确定要删除吗?" @confirm="delShowMsd(data)">
<span style="color: #00A394;cursor: pointer">删除</span>
@ -23,6 +25,18 @@
</template>
</lay-table>
</lay-card>
<!-- 详情弹窗 -->
<lay-layer v-model="showDetail" :type="4" :title="null" :area="['700px', '100%']">
<div class="notice-detail">
<h2>{{ currentNotice?.title }}</h2>
<div class="notice-info">
<span>发布时间{{ currentNotice?.createtime }}</span>
<span>发布人{{ currentNotice?.author }}</span>
</div>
<div class="notice-content" v-html="currentNotice?.content">
</div>
</div>
</lay-layer>
<lay-layer v-model="addShow" :title="addIsEdit == 1 ? '新增公告' : '编辑公告'" :type="4" :shade="true"
:area="['950px', '100%']" :btn="addButton">
<lay-container fluid="true" style="padding: 20px">
@ -67,7 +81,13 @@ import { baseURL } from '@/api/http'
//
import { Quill, QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css'
//
const showDetail = ref(false)
const currentNotice = ref()
const handleViewDetail = (row) => {
currentNotice.value = row;
showDetail.value = true;
};
const content = ref('')
const editorRef = ref<any>(null)
// imageHandler options
@ -333,12 +353,6 @@ const columns = [
width: "120px",
key: "author"
},
{
title: "公告内容",
width: "280px",
key: "content",
ellipsisTooltip: true
},
{
title: "发布时间",
width: "180px",
@ -419,7 +433,78 @@ const addButton = ref([
height: 300px;
width: 100%;
}
:deep(.layui-input-block){
:deep(.layui-input-block) {
max-width: 85%;
}
#main {
width: 100%;
height: 410px;
}
.leaving-messages {
li {
position: relative;
padding: 10px 0;
border-bottom: 1px solid #eee;
h3 {
padding-bottom: 5px;
font-weight: 700;
}
p {
font-size: 14px;
padding-bottom: 10px;
}
>span {
color: #999;
}
}
}
.target {
width: 100%;
height: 440px;
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
}
.target-title {
margin: 20px;
}
.statistics {
font-size: 24px !important;
}
.statistics-body {
padding: 14px 0;
}
.notice-detail {
padding: 20px;
h2 {
text-align: center;
margin-bottom: 20px;
}
.notice-info {
display: flex;
justify-content: space-between;
color: #666;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 1px solid #eee;
}
.notice-content {
line-height: 1.8;
text-align: justify;
}
}
</style>

View File

@ -52,12 +52,12 @@
v-model:selected-keys="selectedKeys" @change="change">
<template v-slot:scoringrecord_status="{ row }">
<!-- 1.已自评 2.未自评 3.科室已评 4.医院已评 5.支部已评 6.总党支已评 -->
<lay-tag v-if="row.scoringrecord_status == 1" type="primary">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033">总党支已评 </lay-tag>
<lay-tag v-if="row.scoringrecord_status == 1" type="primary" size="sm">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2" size="sm">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm" size="sm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal" size="sm">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue" size="sm">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033" size="sm">总党支已评</lay-tag>
</template>
<template v-slot:nickname="{ row }">
<div style="color: #00A394;cursor: pointer" @click="openUserListShow(row)">{{ row.nickname }}</div>
@ -167,12 +167,12 @@
</lay-tab>
<lay-table height="400px" :default-expand-all="true" :columns="userColumns" :data-source="userDataSource">
<template v-slot:scoringrecord_status="{ row }">
<lay-tag v-if="row.scoringrecord_status == 1" type="primary">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033">总党支已评 </lay-tag>
<lay-tag v-if="row.scoringrecord_status == 1" type="primary" size="sm">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2" size="sm">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm" size="sm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal" size="sm">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue" size="sm">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033" size="sm">总党支已评 </lay-tag>
</template>
<template v-slot:operator="{ row }">
<span v-if="row.if == 2" style="color: #00A394;cursor: pointer"
@ -341,13 +341,27 @@
const userColumns = ref([
{ title: '年度', width: '80px', key: 'year', align: 'center' },
{ title: '考评对象', width: '100px', key: 'user', align: 'center' },
{ title: '参评时间', width: '100px', key: 'createtime', align: 'center' },
{ title: '自评总分', width: '100px', key: 'self_score', align: 'center' },
{ title: '科室评分', width: '100px', key: 'department_score', align: 'center' },
{ title: '支部评分', width: '100px', key: 'party_branch_score', align: 'center' },
{ title: '总党支评分', width: '100px', key: 'overall_party_score', align: 'center' },
{ title: '医院评分', width: '100px', key: 'hospital_score', align: 'center' },
{ title: '总得分', width: '100px', key: 'total_score', align: 'center' },
{ 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})=>{
return row.department_score==''||row.department_score==0?'未评分':row.department_score;
} },
{ title: '支部评分', width: '100px', key: 'party_branch_score', align: 'center', customSlot: ({row})=>{
return row.party_branch_score==''||row.party_branch_score==0?'未评分':row.party_branch_score;
} },
{ title: '总党支评分', width: '100px', key: 'overall_party_score', align: 'center', customSlot: ({row})=>{
return row.overall_party_score==''||row.overall_party_score==0?'未评分':row.overall_party_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: 'operator', customSlot: 'operator', align: 'center' },
])
@ -716,12 +730,24 @@
{ title: '考评对象', width: '100px', key: 'nickname', customSlot: 'nickname', align: 'center' },
{ title: '工号', width: '100px', key: 'code', align: 'center' },
{ title: '部门', width: '120px', key: 'group_name', align: 'center' },
{ title: '自评总分', width: '100px', key: 'user_scoringrecord', align: 'center' },
{ title: '科室评分', width: '100px', key: 'department_score_scoringrecord', align: 'center' },
{ title: '党支部评分', width: '100px', key: 'party_score_scoringrecord', align: 'center' },
{ title: '党总支评分', width: '100px', key: 'overall_score_scoringrecord', align: 'center' },
{ title: '医院评分', width: '100px', key: 'hospital_score_scoringrecord', align: 'center' },
{ title: '总得分', width: '100px', key: 'total_score', 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: '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})=>{
return row.party_score_scoringrecord==''||row.party_score_scoringrecord==0?'未评分':row.party_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: '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: '操作',

View File

@ -52,12 +52,12 @@
v-model:selected-keys="selectedKeys" @change="change">
<template v-slot:scoringrecord_status="{ row }">
<!-- 1.已自评 2.未自评 3.科室已评 4.医院已评 5.支部已评 6.总党支已评 -->
<lay-tag v-if="row.scoringrecord_status == 1" type="primary">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033">总党支已评 </lay-tag>
<lay-tag v-if="row.scoringrecord_status == 1" type="primary" size="sm">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2" size="sm">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm" size="sm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal" size="sm">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue" size="sm">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033" size="sm">总党支已评</lay-tag>
</template>
<template v-slot:nickname="{ row }">
<div style="color: #00A394;cursor: pointer" @click="openUserListShow(row)">{{ row.nickname }}</div>
@ -167,12 +167,12 @@
</lay-tab>
<lay-table height="400px" :default-expand-all="true" :columns="userColumns" :data-source="userDataSource">
<template v-slot:scoringrecord_status="{ row }">
<lay-tag v-if="row.scoringrecord_status == 1" type="primary">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033">总党支已评 </lay-tag>
<lay-tag v-if="row.scoringrecord_status == 1" type="primary" size="sm">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2" size="sm">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm" size="sm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal" size="sm">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue" size="sm">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033" size="sm">总党支已评</lay-tag>
</template>
<template v-slot:operator="{ row }">
<span v-if="row.if == 2" style="color: #00A394;cursor: pointer"
@ -341,13 +341,27 @@
const userColumns = ref([
{ title: '年度', width: '80px', key: 'year', align: 'center' },
{ title: '考评对象', width: '100px', key: 'user', align: 'center' },
{ title: '参评时间', width: '100px', key: 'createtime', align: 'center' },
{ title: '自评总分', width: '100px', key: 'self_score', align: 'center' },
{ title: '科室评分', width: '100px', key: 'department_score', align: 'center' },
{ title: '支部评分', width: '100px', key: 'party_branch_score', align: 'center' },
{ title: '总党支评分', width: '100px', key: 'overall_party_score', align: 'center' },
{ title: '医院评分', width: '100px', key: 'hospital_score', align: 'center' },
{ title: '总得分', width: '100px', key: 'total_score', align: 'center' },
{ 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})=>{
return row.department_score==''||row.department_score==0?'未评分':row.department_score;
} },
{ title: '支部评分', width: '100px', key: 'party_branch_score', align: 'center', customSlot: ({row})=>{
return row.party_branch_score==''||row.party_branch_score==0?'未评分':row.party_branch_score;
} },
{ title: '总党支评分', width: '100px', key: 'overall_party_score', align: 'center', customSlot: ({row})=>{
return row.overall_party_score==''||row.overall_party_score==0?'未评分':row.overall_party_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: 'operator', customSlot: 'operator', align: 'center' },
])
@ -716,12 +730,24 @@
{ title: '考评对象', width: '100px', key: 'nickname', customSlot: 'nickname', align: 'center' },
{ title: '工号', width: '100px', key: 'code', align: 'center' },
{ title: '部门', width: '120px', key: 'group_name', align: 'center' },
{ title: '自评总分', width: '100px', key: 'user_scoringrecord', align: 'center' },
{ title: '科室评分', width: '100px', key: 'department_score_scoringrecord', align: 'center' },
{ title: '党支部评分', width: '100px', key: 'party_score_scoringrecord', align: 'center' },
{ title: '党总支评分', width: '100px', key: 'overall_score_scoringrecord', align: 'center' },
{ title: '医院评分', width: '100px', key: 'hospital_score_scoringrecord', align: 'center' },
{ title: '总得分', width: '100px', key: 'total_score', 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: '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})=>{
return row.party_score_scoringrecord==''||row.party_score_scoringrecord==0?'未评分':row.party_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: '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: '操作',

View File

@ -52,12 +52,12 @@
v-model:selected-keys="selectedKeys" @change="change">
<template v-slot:scoringrecord_status="{ row }">
<!-- 1.已自评 2.未自评 3.科室已评 4.医院已评 5.支部已评 6.总党支已评 -->
<lay-tag v-if="row.scoringrecord_status == 1" type="primary">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033">总党支已评 </lay-tag>
<lay-tag v-if="row.scoringrecord_status == 1" type="primary" size="sm">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2" size="sm">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm" size="sm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal" size="sm">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue" size="sm">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033" size="sm">总党支已评 </lay-tag>
</template>
<template v-slot:nickname="{ row }">
<div style="color: #00A394;cursor: pointer" @click="openUserListShow(row)">{{ row.nickname }}</div>
@ -167,12 +167,12 @@
</lay-tab>
<lay-table height="400px" :default-expand-all="true" :columns="userColumns" :data-source="userDataSource">
<template v-slot:scoringrecord_status="{ row }">
<lay-tag v-if="row.scoringrecord_status == 1" type="primary">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033">总党支已评 </lay-tag>
<lay-tag v-if="row.scoringrecord_status == 1" type="primary" size="sm">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2" size="sm">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm" size="sm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal" size="sm">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue" size="sm">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033" size="sm">总党支已评 </lay-tag>
</template>
<template v-slot:operator="{ row }">
<span v-if="row.if == 2" style="color: #00A394;cursor: pointer"
@ -341,11 +341,21 @@
const userColumns = ref([
{ title: '年度', width: '80px', key: 'year', align: 'center' },
{ title: '考评对象', width: '100px', key: 'user', align: 'center' },
{ title: '参评时间', width: '100px', key: 'createtime', align: 'center' },
{ title: '自评总分', width: '100px', key: 'self_score', align: 'center' },
{ title: '科室评分', width: '100px', key: 'department_score', align: 'center' },
{ title: '医院评分', width: '100px', key: 'hospital_score', align: 'center' },
{ title: '总得分', width: '100px', key: 'total_score', align: 'center' },
{ 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})=>{
return row.department_score==''||row.department_score==0?'未评分':row.department_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: 'operator', customSlot: 'operator', align: 'center' },
])
@ -714,12 +724,24 @@
{ title: '考评对象', width: '100px', key: 'nickname', customSlot: 'nickname', align: 'center' },
{ title: '工号', width: '100px', key: 'code', align: 'center' },
{ title: '部门', width: '120px', key: 'group_name', align: 'center' },
{ title: '自评总分', width: '100px', key: 'user_scoringrecord', align: 'center' },
{ title: '科室评分', width: '100px', key: 'department_score_scoringrecord', align: 'center' },
{ title: '党支部评分', width: '100px', key: 'party_score_scoringrecord', align: 'center' },
{ title: '党总支评分', width: '100px', key: 'overall_score_scoringrecord', align: 'center' },
{ title: '医院评分', width: '100px', key: 'hospital_score_scoringrecord', align: 'center' },
{ title: '总得分', width: '100px', key: 'total_score', 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: '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})=>{
return row.party_score_scoringrecord==''||row.party_score_scoringrecord==0?'未评分':row.party_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: '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: '操作',

View File

@ -226,29 +226,54 @@ const columns = [
title: '参评时间',
width: '250px',
align: 'center',
key: 'createtime'
key: 'createtime',
customSlot: ({row})=>{
return row.createtime==''||row.createtime==null?'未参评':row.createtime;
},
},
{
title: '自评总分',
key: 'self_score',
align: 'center',
customSlot: ({row})=>{
return row.self_score==''||row.self_score==0?'未参评':row.self_score;
},
}, {
title: '科室评分',
key: 'department_score',
align: 'center',
customSlot: ({row})=>{
return row.department_score==''||row.department_score==0?'未评分':row.department_score;
},
}, {
title: '党支部评分',
key: 'department_score',
align: 'center',
customSlot: ({row})=>{
return row.department_score==''||row.department_score==0?'未评分':row.department_score;
},
}, {
title: '总党支评分',
key: 'department_score',
align: 'center',
customSlot: ({row})=>{
return row.total_score==''||row.total_score==0?'未评分':row.total_score;
},
}
, {
title: '医院评分',
key: 'hospital_score',
align: 'center',
customSlot: ({row})=>{
return row.hospital_score==''||row.hospital_score==0?'未评分':row.hospital_score;
},
}, {
title: '总得分',
key: 'total_score',
align: 'center',
customSlot: ({row})=>{
return row.total_score==''||row.total_score==0?'未评分':row.total_score;
},
},
{
title: '操作',

View File

@ -53,11 +53,11 @@
</lay-form>
</lay-card>
<lay-table :page="page" height="600px" :columns="columns" :loading="loading" :data-source="dataSource"
@change="change">
@change="change" size="lg">
<template v-slot:type="{ row }">
<lay-tag v-if="row.type == 1" type="primary">月度</lay-tag>
<lay-tag v-if="row.type == 2" type="warm">季度</lay-tag>
<lay-tag v-if="row.type == 3" type="danger">年度</lay-tag>
<lay-tag v-if="row.type == 1" type="primary" size="sm">月度</lay-tag>
<lay-tag v-if="row.type == 2" type="warm" size="sm">季度</lay-tag>
<lay-tag v-if="row.type == 3" type="danger" size="sm">年度</lay-tag>
<!-- <lay-tag v-if="row.scoringrecord_status == 4" type="danger">医院已评</lay-tag> -->
</template>
<template v-slot:group_evaluation="{ row }">
@ -72,7 +72,7 @@
</lay-table>
</div>
</div>
<lay-layer v-model="addShow" title="月度评价填报" :shade="true" :area="['500px', '500px']" :btn="addButton">
<lay-layer v-model="addShow" title="月度评价填报" :shade="true" :area="['600px', '600px']" :btn="addButton">
<lay-container fluid="true" style="padding: 20px">
<div style="margin-bottom: 20px">填报月份{{ addModel.term }}</div>
<div style="margin-bottom: 20px">评价对象{{ addModel.nickname }}</div>

View File

@ -52,12 +52,12 @@
v-model:selected-keys="selectedKeys" @change="change">
<template v-slot:scoringrecord_status="{ row }">
<!-- 1.已自评 2.未自评 3.科室已评 4.医院已评 5.支部已评 6.总党支已评 -->
<lay-tag v-if="row.scoringrecord_status == 1" type="primary">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033">总党支已评 </lay-tag>
<lay-tag v-if="row.scoringrecord_status == 1" type="primary" size="sm">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2" size="sm">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm" size="sm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal" size="sm">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue" size="sm">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033" size="sm">总党支已评 </lay-tag>
</template>
<template v-slot:nickname="{ row }">
<div style="color: #00A394;cursor: pointer" @click="openUserListShow(row)">{{ row.nickname }}</div>
@ -167,12 +167,12 @@
</lay-tab>
<lay-table height="400px" :default-expand-all="true" :columns="userColumns" :data-source="userDataSource">
<template v-slot:scoringrecord_status="{ row }">
<lay-tag v-if="row.scoringrecord_status == 1" type="primary">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033">总党支已评 </lay-tag>
<lay-tag v-if="row.scoringrecord_status == 1" type="primary" size="sm">已自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 2" size="sm">未自评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 3" type="warm" size="sm">科室已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 4" type="normal" size="sm">医院已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 5" color="blue" size="sm">支部已评</lay-tag>
<lay-tag v-if="row.scoringrecord_status == 6" color="#000033" size="sm">总党支已评 </lay-tag>
</template>
<template v-slot:operator="{ row }">
<span v-if="row.if == 2" style="color: #00A394;cursor: pointer"
@ -341,13 +341,27 @@
const userColumns = ref([
{ title: '年度', width: '80px', key: 'year', align: 'center' },
{ title: '考评对象', width: '100px', key: 'user', align: 'center' },
{ title: '参评时间', width: '100px', key: 'createtime', align: 'center' },
{ title: '自评总分', width: '100px', key: 'self_score', align: 'center' },
{ title: '科室评分', width: '100px', key: 'department_score', align: 'center' },
{ title: '支部评分', width: '100px', key: 'party_branch_score', align: 'center' },
{ title: '总党支评分', width: '100px', key: 'overall_party_score', align: 'center' },
{ title: '医院评分', width: '100px', key: 'hospital_score', align: 'center' },
{ title: '总得分', width: '100px', key: 'total_score', align: 'center' },
{ 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})=>{
return row.department_score==''||row.department_score==0?'未评分':row.department_score;
} },
{ title: '支部评分', width: '100px', key: 'party_branch_score', align: 'center', customSlot: ({row})=>{
return row.party_branch_score==''||row.party_branch_score==0?'未评分':row.party_branch_score;
} },
{ title: '总党支评分', width: '100px', key: 'overall_party_score', align: 'center', customSlot: ({row})=>{
return row.overall_party_score==''||row.overall_party_score==0?'未评分':row.overall_party_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: 'operator', customSlot: 'operator', align: 'center' },
])
@ -716,12 +730,24 @@
{ title: '考评对象', width: '100px', key: 'nickname', customSlot: 'nickname', align: 'center' },
{ title: '工号', width: '100px', key: 'code', align: 'center' },
{ title: '部门', width: '120px', key: 'group_name', align: 'center' },
{ title: '自评总分', width: '100px', key: 'user_scoringrecord', align: 'center' },
{ title: '科室评分', width: '100px', key: 'department_score_scoringrecord', align: 'center' },
{ title: '党支部评分', width: '100px', key: 'party_score_scoringrecord', align: 'center' },
{ title: '党总支评分', width: '100px', key: 'overall_score_scoringrecord', align: 'center' },
{ title: '医院评分', width: '100px', key: 'hospital_score_scoringrecord', align: 'center' },
{ title: '总得分', width: '100px', key: 'total_score', 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: '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})=>{
return row.party_score_scoringrecord==''||row.party_score_scoringrecord==0?'未评分':row.party_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: '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: '操作',