1.去除无用字段和按钮

2.新增修改密码功能
3.修复拒收红包审核详情
4.修复加减分审核缺失驳回原因
5.修复所有页面考评对象增加工号
6.修复所有日期选择限制当前时间
7.修复月度,季度,年度评价查询问题
This commit is contained in:
Air 2025-04-02 17:38:30 +08:00
parent 1e6b3310c9
commit c0399f38f2
30 changed files with 272 additions and 222 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']
}

3
components.d.ts vendored
View File

@ -48,10 +48,7 @@ declare module 'vue' {
LaySelect: typeof import('@layui/layui-vue')['LaySelect']
LaySelectOption: typeof import('@layui/layui-vue')['LaySelectOption']
LaySide: typeof import('@layui/layui-vue')['LaySide']
LaySkeleton: typeof import('@layui/layui-vue')['LaySkeleton']
LaySpace: typeof import('@layui/layui-vue')['LaySpace']
LayStep: typeof import('@layui/layui-vue')['LayStep']
LayStepItem: typeof import('@layui/layui-vue')['LayStepItem']
LaySubMenu: typeof import('@layui/layui-vue')['LaySubMenu']
LaySwitch: typeof import('@layui/layui-vue')['LaySwitch']
LayTab: typeof import('@layui/layui-vue')['LayTab']

View File

@ -506,6 +506,15 @@ export function getMailUpdateMail(data: any) {
export function getYearEvaluationSummary(data: any) {
return Http.post('/api/backend/year/data', data)
}
// 密码修改
export function updatePassword(data: any) {
return Http.post('/api/backend/user/updatePassword', data)
}
// 自动公示
export function automaticPublicity(data: any) {
return Http.post('/api/backend/automatic_publicity/index', data)
}

View File

@ -152,7 +152,7 @@
</template>
<script lang="ts">
import { computed, onMounted, ref } from 'vue'
import { computed, onMounted, reactive, ref } from 'vue'
import { useAppStore } from '../store/app'
import { useUserStore } from '../store/user'
import GlobalSetup from './global/GlobalSetup.vue'
@ -166,7 +166,9 @@ import { useRouter } from 'vue-router'
import { useMenu } from './composable/useMenu'
import zh_CN from '../lang/zh_CN'
import en_US from '../lang/en_US'
import { updatePassword } from '@/api/module/home'
import { layer } from '@layui/layui-vue'
//const userStore = useUserStore()
export default {
components: {
GlobalSetup,
@ -254,10 +256,11 @@ export default {
flag.value = !flag.value
}
const model = ref({
const model = reactive({
old_password: '',
new_password: '',
confirm_password: ''
confirm_password: '',
id: 0,
})
const showPassword = ref(false)
function changePassword() {
@ -267,7 +270,15 @@ export default {
{
text: "确认",
callback: async () => {
console.log(123)
const userInfoStore = useUserStore()
model.id = userInfoStore.userInfo.id;
var res = await updatePassword(model);
if (res.code == 1) {
layer.msg('修改成功!', { icon: 1 })
showPassword.value = false;
} else {
layer.msg(res.msg, { icon: 2 })
}
}
},
{

View File

@ -231,25 +231,26 @@ export default [
// }
// ]
// },
{
path: '/outside_evaluation',
redirect: '/outside_evaluation/index',
component: BasicLayout,
meta: { title: '院外考评' },
children: [
{
path: '/outside_evaluation/index',
name: 'outsideEvaluationIndex',
component: () => import('../../views/day_evaluation/index.vue'),
meta: { title: '我的院外考评', requireAuth: true, closable: true },
}, {
path: '/outside_evaluation/examine',
name: 'outsideEvaluationExamine',
component: () => import('../../views/day_evaluation/examine.vue'),
meta: { title: '院外考评管理', requireAuth: true, closable: true },
}
]
}, {
// {
// path: '/outside_evaluation',
// redirect: '/outside_evaluation/index',
// component: BasicLayout,
// meta: { title: '院外考评' },
// children: [
// {
// path: '/outside_evaluation/index',
// name: 'outsideEvaluationIndex',
// component: () => import('../../views/day_evaluation/index.vue'),
// meta: { title: '我的院外考评', requireAuth: true, closable: true },
// }, {
// path: '/outside_evaluation/examine',
// name: 'outsideEvaluationExamine',
// component: () => import('../../views/day_evaluation/examine.vue'),
// meta: { title: '院外考评管理', requireAuth: true, closable: true },
// }
// ]
// },
,{
path: '/year_evaluation',
redirect: '/year_evaluation/index',
component: BasicLayout,
@ -321,12 +322,13 @@ export default [
name: 'yearEvaluationSummaryExamine',
component: () => import('../../views/year_evaluation_summary/examine.vue'),
meta: { title: '考评汇总', requireAuth: true, closable: true },
}, {
path: '/year_evaluation_summary/statistics',
name: 'yearEvaluationSummaryStatistics',
component: () => import('../../views/year_evaluation_summary/statistics.vue'),
meta: { title: '统计分析', requireAuth: true, closable: true },
}
},
// {
// path: '/year_evaluation_summary/statistics',
// name: 'yearEvaluationSummaryStatistics',
// component: () => import('../../views/year_evaluation_summary/statistics.vue'),
// meta: { title: '统计分析', requireAuth: true, closable: true },
// }
]
}, {
path: '/census',

View File

@ -3,6 +3,7 @@ import { defineStore } from 'pinia'
import menu from "../mockjs/user";
import {getMenu} from "@/api/module/home";
import router from '@/router';
interface Tab {
id: string
@ -24,7 +25,12 @@ export const useUserStore = defineStore({
actions: {
async loadMenus(){
const data = await getMenu({});
this.menus = data.data;
if(data.code == 1){
this.menus = data.data;
}else{
this.menus = [];
router.push('/login')
}
console.log(data);
},
async loadPermissions(){

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">

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="addShow=true;addData.pid=0;addData.id=0;addIsEdit=1;">新增</lay-button>
<lay-button size="sm" type="primary" @click="addShow=true;addData.pid=0;addData.id=0;addIsEdit=1;">新增</lay-button>
</div>
<lay-table size="lg" ref="tableRef6" children-column-name="children" :columns="columns6"
:data-source="dataSource6">

View File

@ -22,7 +22,7 @@
<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>
<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">

View File

@ -26,14 +26,14 @@
<lay-row style="min-width: 1200px">
<lay-col :md="5">
<lay-form-item label="发生时间:">
<lay-date-picker style="width: 100%" v-model="searchForm.fsdate" placeholder="发生时间"
<lay-date-picker style="width: 100%" :max="dayjs().format('YYYY-MM-DD')" v-model="searchForm.fsdate" placeholder="发生时间"
allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
<lay-col :md="6">
<lay-form-item label="考评对象:">
<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 v-for="user in userList" :key="user.id" :value="user.id" :label="user.nickname+'('+user.code+')'">
</lay-select-option>
</lay-select>
</lay-form-item>
@ -90,7 +90,7 @@
<lay-layer v-model="detailVisible" :type="4" title="详情查看" :area="['950px', '100%']"
:btn="showType == 1 ? '' : addButton">
<div style="padding: 20px">
<lay-descriptions title="考评信息" :column="2" border>
<lay-descriptions title="审核信息" :column="2" border>
<lay-descriptions-item label="考评人">
{{ detailForm.nickname }}
</lay-descriptions-item>
@ -124,6 +124,11 @@
<a style="color: #009688" :href="detailForm.fj_url" target="_blank">附件下载</a>
</lay-descriptions-item>
</lay-descriptions>
<lay-descriptions v-if="detailForm.status == 3 " title="驳回原因" :column="1" border style="margin-top: 20px">
<lay-descriptions-item label="驳回原因">
{{ detailForm.content }}
</lay-descriptions-item>
</lay-descriptions>
<lay-descriptions v-if="showType == 2" title="审核" :column="1" border style="margin-top: 20px">
<lay-descriptions-item label="状态">
<lay-radio-group name="action" v-model="type">
@ -145,7 +150,9 @@ import { layer } from '@layui/layui-vue'
import { getAdditionIndexManage, getAdditionIndexManageExamine, getDoctorName, getSolicitopinionsPlexamine, getUserGroupNew } from '@/api/module/home';
import { useUserStore } from '@/store/user';
import { baseURL } from '@/api/http';
import dayjs from 'dayjs'
const userStore = useUserStore()
const exportExcel = () => {
if (selectedKeys.value.length == 0) {
layer.msg('请选择要导出的数据', { icon: 2 })
@ -191,7 +198,7 @@ const batchAudit = (type: number) => {
layer.msg('请输入驳回原因', { icon: 2 })
return
}
getSolicitopinionsPlexamine({ ids: ids, reason: data, status: 3 }).then((res) => {
getSolicitopinionsPlexamine({ ids: ids, content: data, status: 3 }).then((res) => {
console.log(res);
if (res.code == 1) {
layer.msg(res.msg, { icon: 1 })
@ -331,18 +338,7 @@ const columns = ref([
])
const dataSource = ref()
const detailVisible = ref(false)
const detailForm = ref({
nickname: '',
group_name: '',
fsdate: '',
zm_nickname: '',
assessment_type: '',
project_name: '',
score_value: '',
notes: '',
status: 1,
fj_url: ''
})
const detailForm = ref({})
//
const searchForm = ref({
fsdate: '',
@ -354,6 +350,7 @@ const searchForm = ref({
const showType = ref(1)
//
const showDetail = (row: any, type: number) => {
console.log(row);
detailForm.value = row
detailVisible.value = true;
showType.value = type;
@ -364,7 +361,7 @@ const addButton = ref([
{
text: "确认",
callback: async () => {
getAdditionIndexManageExamine({ id: isId.value, status: type.value }).then((res) => {
getAdditionIndexManageExamine({ id: isId.value, status: type.value, content: reason.value }).then((res) => {
if (res.code == 1) {
layer.msg(res.msg, { icon: 1 })
} else {

View File

@ -63,7 +63,7 @@
<lay-form :model="formData">
<lay-form-item required label="考评对象" prop="user_id">
<lay-select v-model="formData.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 v-for="user in userList" :key="user.id" :value="user.id" :label="user.nickname+'('+user.code+')'">
</lay-select-option>
</lay-select>
</lay-form-item>
@ -84,11 +84,11 @@
<lay-input-number :max="maxInput.single_score_max" :min="maxInput.single_score_min" v-model="formData.score_value" placeholder="请输入分值"></lay-input-number>
</lay-form-item>
<lay-form-item required label="发生时间" prop="fsdate">
<lay-date-picker v-model="formData.fsdate" placeholder="发生时间" type="datetime"></lay-date-picker>
<lay-date-picker v-model="formData.fsdate" :max="dayjs().format('YYYY-MM-DD')" placeholder="发生时间" type="datetime"></lay-date-picker>
</lay-form-item>
<lay-form-item required label="证明人" prop="zm_user_id">
<lay-select v-model="formData.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 v-for="user in userList" :key="user.id" :value="user.id" :label="user.nickname+'('+user.code+')'">
</lay-select-option>
</lay-select>
</lay-form-item>
@ -163,6 +163,7 @@ import { ref, reactive, onMounted } from 'vue'
import { layer } from '@layui/layer-vue'
import { scoringGetHierarchicalData, getDoctorName, getAddition, getAdditionCreate, getAdditionUpdate, getAdditionDelete } from '@/api/module/home'
import { useUserStore } from '@/store/user'
import dayjs from 'dayjs'
interface EvaluationItem {
id: number

View File

@ -26,7 +26,7 @@
<lay-row style="min-width: 1200px">
<lay-col :md="5">
<lay-form-item label="月份:" :label-width="100">
<lay-date-picker type="yearmonth" style="width: 100%" v-model="searchForm.month"
<lay-date-picker :max="dayjs().format('YYYY-MM')" type="yearmonth" style="width: 100%" v-model="searchForm.month"
placeholder="发生时间" allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>

View File

@ -7,8 +7,8 @@
<lay-row>
<lay-col :md="5">
<lay-form-item label="年度:" label-width="50">
<lay-date-picker type="year" v-model="searchAccount" placeholder="请选择"
allow-clear></lay-date-picker>
<lay-date-picker type="year" :max="dayjs().format('YYYY')" v-model="searchAccount"
placeholder="请选择" allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
<lay-col :md="4">
@ -27,10 +27,9 @@
<span style="font-size: 18px;vertical-align: center;margin-right: 20px">月度评价填报</span>
<lay-button type="primary" @click="addShow = true" size="sm">新增自我评价</lay-button>
</div>
<lay-table :columns="columns" :dataSource="dataSource" :even="true" height="500px"
size="lg">
<lay-table :columns="columns" :dataSource="dataSource" :even="true" height="500px" size="lg">
<template #group_evaluation="scope">
<span>{{ scope.row.group_evaluation? scope.row.group_evaluation : '未评价'}}</span>
<span>{{ scope.row.group_evaluation ? scope.row.group_evaluation : '未评价' }}</span>
</template>
<template #operator="scope">
<span style="cursor: pointer;color: #009688" @click="toDetail(scope.row)">详情</span>
@ -58,7 +57,8 @@
<div style="margin-bottom: 20px">评价时间{{ infoData.selftime }}</div>
<div style="margin-bottom: 20px">我的评价{{ infoData.self_evaluation }}</div>
<div style="margin-bottom: 20px">科室{{ infoData.group_name }}</div>
<div style="margin-bottom: 20px">科室评价{{ infoData.group_evaluation? infoData.group_evaluation : '未评价' }}</div>
<div style="margin-bottom: 20px">科室评价{{ infoData.group_evaluation ? infoData.group_evaluation : '未评价' }}
</div>
</lay-container>
</lay-layer>
</lay-container>
@ -92,10 +92,12 @@ onMounted(() => {
//getMonthlyContent();
})
const getMonthlyEvaluation = () => {
monthlyEvaluation({ 'type': 1 }).then((res) => {
monthlyEvaluation({ 'type': 1, 'time': searchAccount.value }).then((res) => {
console.log(res)
if (res.code == 1) {
dataSource.value = res.data;
} else {
dataSource.value = [];
}
})
}
@ -103,6 +105,10 @@ const searchAccount = ref(dayjs().year())
function toReset() {
searchAccount.value = dayjs().year()
getMonthlyEvaluation();
}
const toSearch = () => {
getMonthlyEvaluation();
}
const columns = [
{
@ -128,7 +134,7 @@ const columns = [
key: 'self_evaluation',
ellipsisTooltip: true,
align: 'center',
},{
}, {
title: '科室',
key: 'group_name',
align: 'center',

View File

@ -16,21 +16,22 @@
<lay-icon v-else class="layui-icon-right"></lay-icon>
</div>
</div>
<div style="flex: 1; padding: 10px; over-flow: auto">
<div style="flex: 1; padding: 10px; overflow: auto">
<!-- table -->
<lay-card>
<lay-form>
<lay-row>
<lay-col :md="5">
<lay-form-item label="月度" label-width="80">
<lay-date-picker type="yearmonth" v-model="yearmonth" placeholder="月度" allow-clear></lay-date-picker>
<lay-date-picker type="yearmonth" :max="dayjs().format('YYYY-MM')" v-model="yearmonth"
placeholder="月度" allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
<lay-col :md="6">
<lay-form-item label="考评对象" label-width="120">
<lay-select v-model="userId" :show-search="true" placeholder="请选择" :allowClear="true">
<lay-select-option v-for="item in dataSerSource" :value="item.id"
:label="item.nickname"></lay-select-option>
:label="item.nickname + '(' + item.code + ')'"></lay-select-option>
</lay-select>
</lay-form-item>
</lay-col>
@ -106,8 +107,8 @@
</template>
<template v-slot:department_score="{ row, rowIndex }">
<div v-if="row.pid == 0">已评分{{ row.department_score ? row.department_score : 0 }}</div>
<lay-input-number :disabled="addIsInfo==1" @change="inputKsChange(row)" v-if="row.pid != 0" :min="0" :max="row.base_score" v-model="row.department_score"
position="right"></lay-input-number>
<lay-input-number :disabled="addIsInfo == 1" @change="inputKsChange(row)" v-if="row.pid != 0" :min="0"
:max="row.base_score" v-model="row.department_score" position="right"></lay-input-number>
</template>
<!-- <template v-slot:yyinput="{ data, rowIndex }">
<template v-if="userStore.userInfo.level == 3 || thisInfo.scoringrecord_status == 4">
@ -242,15 +243,21 @@ 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', 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: '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' },
@ -325,7 +332,7 @@ const infoShow = ref(false);
const yearmonth = ref();
const getList = () => {
getMonthlyUserList({
'user_id': userId.value,
'user_id':userId.value,
'group_id': group_id.value,
'time': yearmonth.value,
'evaluation_schedule_id': tab_id.value,
@ -347,7 +354,7 @@ const getSerList = () => {
'group_id': group_id.value,
'evaluation_schedule_id': tab_id.value,
page: 1,
size: 999
size: 9999
}).then((res) => {
console.log(res)
if (res.code == 1) {
@ -357,6 +364,12 @@ const getSerList = () => {
}
})
}
const handleClick = (d) => {
console.log(d);
group_id.value = d.id;
getList();
getSerList();
}
const thisInfo = ref();
const getInfo = (row, type) => {
infoShow.value = true;
@ -452,12 +465,16 @@ 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', 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: '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

@ -7,7 +7,7 @@
<lay-row>
<lay-col :md="5">
<lay-form-item label="年度:" label-width="50">
<lay-date-picker type="year" v-model="searchAccount" placeholder="请选择" allow-clear></lay-date-picker>
<lay-date-picker type="year" :max="dayjs().format('YYYY')" v-model="searchAccount" placeholder="请选择" allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
<lay-col :md="4">
@ -24,7 +24,7 @@
<lay-card>
<div style="padding: 10px">
<span style="font-size: 18px;vertical-align: center;margin-right: 20px">月度自评列表</span>
<lay-button type="primary" size="sm">导出Excel</lay-button>
<!-- <lay-button type="primary" size="sm">导出Excel</lay-button> -->
</div>
<lay-tab v-model="current1" @change="openTab">
<lay-tab-item v-for="item in tabList" :title="item.title" :id="item.id">

View File

@ -30,7 +30,7 @@
<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>
placeholder="发生时间" :max="dayjs().format('YYYY-MM-DD')" allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
<lay-col :md="6" v-if="userStore.userInfo.level == 1">
@ -38,7 +38,7 @@
<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">
:value="user.id" :label="user.nickname + '(' + user.code + ')'">
</lay-select-option>
</lay-select>
</lay-form-item>
@ -156,7 +156,7 @@
<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 v-if="detailForm.status == 1 && addIsInfo == 2" 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>
@ -177,6 +177,7 @@ import { getDoctorName, getRejectRedEnvelopes, rejectRedEnvelopesCreate, rejectR
import { layer } from '@layui/layui-vue';
import { useUserStore } from '@/store/user';
import { baseURL } from '@/api/http';
import dayjs from 'dayjs';
const userStore = useUserStore()
//
const searchForm = ref({

View File

@ -11,7 +11,7 @@
<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>
placeholder="发生时间" :max="dayjs().format('YYYY-MM-DD')" allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
<lay-col :md="6" v-if="userStore.userInfo.level == 1">
@ -19,7 +19,7 @@
<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">
:value="user.id" :label="user.nickname+'('+user.code+')'">
</lay-select-option>
</lay-select>
</lay-form-item>
@ -86,7 +86,7 @@
<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">
:label="user.nickname+'('+user.code+')'">
</lay-select-option>
</lay-select>
</lay-form-item>
@ -96,12 +96,12 @@
</lay-cascader>
</lay-form-item> -->
<lay-form-item label="发生日期" required prop="fsdate">
<lay-date-picker v-model="form.fsdate" placeholder="请选择发生日期"></lay-date-picker>
<lay-date-picker v-model="form.fsdate" :max="dayjs().format('YYYY-MM-DD')" placeholder="请选择发生日期"></lay-date-picker>
</lay-form-item>
<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">
:label="user.nickname+'('+user.code+')'">
</lay-select-option>
</lay-select>
</lay-form-item>
@ -116,7 +116,7 @@
placeholder="请输入退还金额"></lay-input-number>
</lay-form-item>
<lay-form-item label="退还日期" required prop="thdate">
<lay-date-picker v-model="form.thdate" placeholder="请选择退还日期"></lay-date-picker>
<lay-date-picker v-model="form.thdate" :max="dayjs().format('YYYY-MM-DD')" placeholder="请选择退还日期"></lay-date-picker>
</lay-form-item>
<lay-form-item label="退还方式" required prop="refunding_type" >
<lay-select v-model="form.refunding_type" placeholder="请选择退还方式">

View File

@ -7,7 +7,7 @@
<lay-row>
<lay-col :md="5">
<lay-form-item label="年度:" label-width="50">
<lay-date-picker type="year" v-model="searchAccount" placeholder="请选择"
<lay-date-picker type="year" :max="dayjs().format('YYYY')" v-model="searchAccount" placeholder="请选择"
allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
@ -98,11 +98,16 @@ onMounted(() => {
getMonthlyEvaluation();
//getMonthlyContent();
})
const toSearch = () => {
getMonthlyEvaluation();
}
const getMonthlyEvaluation = () => {
monthlyEvaluation({ 'type': 2 }).then((res) => {
monthlyEvaluation({ 'type': 2, 'time': searchAccount.value }).then((res) => {
console.log(res)
if (res.code == 1) {
dataSource.value = res.data;
} else {
dataSource.value = [];
}
})
}
@ -110,6 +115,7 @@ const searchAccount = ref(dayjs().year())
function toReset() {
searchAccount.value = dayjs().year()
getMonthlyEvaluation();
}
const columns = [
{

View File

@ -16,7 +16,7 @@
<lay-icon v-else class="layui-icon-right"></lay-icon>
</div>
</div>
<div style="flex: 1; padding: 10px; over-flow: auto">
<div style="flex: 1; padding: 10px; overflow: auto">
<!-- table -->
<lay-card>
<lay-form>
@ -39,7 +39,7 @@
<lay-col :md="6">
<lay-form-item label="考评对象" label-width="80px">
<lay-select v-model="userId" :show-search="true" placeholder="请选择" :allowClear="true">
<lay-select-option v-for="item in dataSerSource" :value="item.id" :label="item.nickname"></lay-select-option>
<lay-select-option v-for="item in dataSerSource" :value="item.id" :label="item.nickname+'('+item.code+')'"></lay-select-option>
</lay-select>
</lay-form-item>
</lay-col>
@ -415,12 +415,17 @@ function toReset() {
evaluateTarget: '',
status: ''
}
userId.value = '';
getList();
getSserList();
}
function handleClick(node: any) {
// selectedNode.value = JSON.parse(JSON.stringify(node))
page.current = 1;
group_id.value = node.id;
getList();
getSserList();
// change(page)
}

View File

@ -7,7 +7,7 @@
<lay-row>
<lay-col :md="5">
<lay-form-item label="年度:" label-width="50">
<lay-date-picker type="year" v-model="searchAccount" placeholder="请选择" allow-clear></lay-date-picker>
<lay-date-picker type="year" :max="dayjs().format('YYYY')" v-model="searchAccount" placeholder="请选择" allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
<lay-col :md="4">
@ -24,12 +24,11 @@
<lay-card>
<div style="padding: 10px">
<span style="font-size: 18px;vertical-align: center;margin-right: 20px">季度自评列表</span>
<lay-button type="primary" size="sm">导出Excel</lay-button>
<!-- <lay-button type="primary" size="sm">导出Excel</lay-button> -->
</div>
<lay-tab v-model="current1" @change="openTab">
<lay-tab-item v-for="item in tabList" :title="item.title" :id="item.id"></lay-tab-item>
</lay-tab>
<lay-table :columns="columns" :dataSource="dataSource" :even="true" height="500px" size="lg">
<lay-tab-item v-for="item in tabList" :title="item.title" :id="item.id">
<lay-table :columns="columns" :dataSource="dataSource" :even="true" height="500px" size="lg">
<template v-slot:id="{ data }">
{{ data.id }}
</template>
@ -47,6 +46,9 @@
<span style="color: #00A394;cursor: pointer" v-if="data.if == 1" @click="insZp(data)">开始自评</span>
</template>
</lay-table>
</lay-tab-item>
</lay-tab>
</lay-card>
</lay-col>
</lay-row>

View File

@ -87,7 +87,7 @@
<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"
:headers="{ token: userStore.token }" :url="baseURL+'/api/common/upload'"
@cutdone="getCutDone2" v-model="file2" :auto="true" acceptMime="images" :cut="false"
:cutOptions="cutOptions" @done="getFileDone2">
<template #preview>
@ -135,7 +135,7 @@
</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"
:headers="{ token: userStore.token }" :url="baseURL+'/api/common/upload'"
@cutdone="getCutDone" v-model="file1" :auto="true" acceptMime="images" :cut="false"
:cutOptions="cutOptions" @done="getFileDone">
<template #preview>
@ -193,6 +193,7 @@ import {
userGroupData
} from "@/api/module/home";
import { useUserStore } from "@/store/user";
import { baseURL } from "@/api/http";
const cutUrl = ref("");
const uploadRef = ref(null)

View File

@ -7,7 +7,7 @@
<lay-row>
<lay-col :md="5">
<lay-form-item label="年度:" label-width="50">
<lay-date-picker type="year" v-model="searchAccount" placeholder="请选择"
<lay-date-picker type="year" :max="dayjs().format('YYYY')" v-model="searchAccount" placeholder="请选择"
allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
@ -94,11 +94,16 @@ onMounted(() => {
getMonthlyEvaluation();
//getMonthlyContent();
})
const toSearch = () => {
getMonthlyEvaluation();
}
const getMonthlyEvaluation = () => {
monthlyEvaluation({ 'type': 3 }).then((res) => {
monthlyEvaluation({ 'type': 3, 'time': searchAccount.value }).then((res) => {
console.log(res)
if (res.code == 1) {
dataSource.value = res.data;
} else {
dataSource.value = [];
}
})
}
@ -106,6 +111,7 @@ const searchAccount = ref(dayjs().year())
function toReset() {
searchAccount.value = dayjs().year()
getMonthlyEvaluation();
}
const columns = [
{

View File

@ -23,14 +23,14 @@
<lay-row>
<lay-col :md="5">
<lay-form-item label="年度" label-width="80px">
<lay-date-picker type="year" v-model="yearmonth" placeholder="年度" allow-clear></lay-date-picker>
<lay-date-picker type="year" :max="dayjs().format('YYYY')" v-model="yearmonth" placeholder="年度" allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
<lay-col :md="6">
<lay-form-item label="考评对象" label-width="80px">
<lay-select v-model="userId" :show-search="true" placeholder="请选择" :allowClear="true">
<lay-select-option v-for="item in dataSerSource" :value="item.id"
:label="item.nickname"></lay-select-option>
:label="item.nickname + '(' + item.code + ')'"></lay-select-option>
</lay-select>
</lay-form-item>
</lay-col>

View File

@ -23,14 +23,14 @@
<lay-row>
<lay-col :md="5">
<lay-form-item label="年度" label-width="80px">
<lay-date-picker type="year" v-model="yearmonth" placeholder="年度" allow-clear></lay-date-picker>
<lay-date-picker type="year" :max="dayjs().format('YYYY')" v-model="yearmonth" placeholder="年度" allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
<lay-col :md="6">
<lay-form-item label="考评对象" label-width="80px">
<lay-select v-model="userId" :show-search="true" placeholder="请选择" :allowClear="true">
<lay-select-option v-for="item in dataSerSource" :value="item.id"
:label="item.nickname"></lay-select-option>
:label="item.nickname + '(' + item.code + ')'"></lay-select-option>
</lay-select>
</lay-form-item>
</lay-col>

View File

@ -23,14 +23,14 @@
<lay-row>
<lay-col :md="5">
<lay-form-item label="年度" label-width="80px">
<lay-date-picker type="year" v-model="yearmonth" placeholder="年度" allow-clear></lay-date-picker>
<lay-date-picker type="year" :max="dayjs().format('YYYY')" v-model="yearmonth" placeholder="年度" allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
<lay-col :md="6">
<lay-form-item label="考评对象" label-width="80px">
<lay-select v-model="userId" :show-search="true" placeholder="请选择" :allowClear="true">
<lay-select-option v-for="item in dataSerSource" :value="item.id"
:label="item.nickname"></lay-select-option>
:label="item.nickname + '(' + item.code + ')'"></lay-select-option>
</lay-select>
</lay-form-item>
</lay-col>

View File

@ -7,7 +7,7 @@
<lay-row>
<lay-col :md="5">
<lay-form-item label="年度:" label-width="50">
<lay-date-picker type="year" v-model="searchAccount" placeholder="请选择" allow-clear></lay-date-picker>
<lay-date-picker type="year" :max="dayjs().format('YYYY')" v-model="searchAccount" placeholder="请选择" allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
<lay-col :md="4">
@ -24,7 +24,7 @@
<lay-card>
<div style="padding: 10px">
<span style="font-size: 18px;vertical-align: center;margin-right: 20px">年度自评列表</span>
<lay-button type="primary" size="sm">导出Excel</lay-button>
<lay-button @click="exportExcel" type="primary" size="sm">导出考评表</lay-button>
</div>
<lay-tab v-model="current1" @change="openTab">
<lay-tab-item v-for="item in tabList" :title="item.title" :id="item.id">
@ -83,6 +83,7 @@ import {
} from '../../api/module/home'
import { useUserStore } from "@/store/user";
import dayjs from "dayjs";
import { baseURL } from '@/api/http'
const current1 = ref(1);
const tabList = ref([]);
const userStore = useUserStore()
@ -94,6 +95,11 @@ const addIsInfo = ref(1);
const yearName = ref('');
const exportExcel = () => {
var id=userStore.userInfo.id;
window.open(`${baseURL}/api/backend/pdf/personalProfile?id=${id}&time=${searchAccount.value}`)
}
onMounted(() => {
//getYearList();
//getYearContent();

View File

@ -32,7 +32,7 @@
</lay-col>
<lay-col :md="5">
<lay-form-item label="时间" label-width="80">
<lay-date-picker type="year" v-model="yearmonth" placeholder="年"
<lay-date-picker type="year" :max="dayjs().format('YYYY')" v-model="yearmonth" placeholder="年"
allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>

View File

@ -23,14 +23,14 @@
<lay-row>
<lay-col :md="5">
<lay-form-item label="年度" label-width="80px">
<lay-date-picker type="year" v-model="yearmonth" placeholder="年度" allow-clear></lay-date-picker>
<lay-date-picker type="year" :max="dayjs().format('YYYY')" v-model="yearmonth" placeholder="年度" allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
<lay-col :md="6">
<lay-form-item label="考评对象" label-width="80px">
<lay-select v-model="userId" :show-search="true" placeholder="请选择" :allowClear="true">
<lay-select-option v-for="item in dataSerSource" :value="item.id"
:label="item.nickname"></lay-select-option>
:label="item.nickname + '(' + item.code + ')'"></lay-select-option>
</lay-select>
</lay-form-item>
</lay-col>

View File

@ -23,14 +23,14 @@
<lay-row>
<lay-col :md="5">
<lay-form-item label="年度" label-width="80px">
<lay-date-picker type="year" v-model="yearmonth" placeholder="年度" allow-clear></lay-date-picker>
<lay-date-picker type="year" :max="dayjs().format('YYYY')" v-model="yearmonth" placeholder="年度" allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
<lay-col :md="6">
<lay-form-item label="考评对象" label-width="80px">
<lay-select v-model="userId" :show-search="true" placeholder="请选择" :allowClear="true">
<lay-select-option v-for="item in dataSerSource" :value="item.id"
:label="item.nickname"></lay-select-option>
:label="item.nickname + '(' + item.code + ')'"></lay-select-option>
</lay-select>
</lay-form-item>
</lay-col>

View File

@ -1,62 +1,69 @@
<template>
<lay-container style="padding: 20px">
<lay-card>
<lay-row :space="10">
<lay-col :md="24">
<lay-card>
<lay-form style="margin-top: 20px">
<lay-row>
<lay-col :md="5">
<lay-form-item label="年度:" label-width="50">
<lay-date-picker type="year" :max="dayjs().format('YYYY')" v-model="searchAccount" placeholder="请选择"
allow-clear></lay-date-picker>
</lay-form-item>
</lay-col>
<lay-col :md="4">
<lay-form-item label-width="0">
<lay-button 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>
<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 }">
: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>
<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-card>
</lay-col>
</lay-row>
</lay-container>
</template>
<script setup lang="ts">
import {
educationList,
userYearData,
automaticPublicity
} 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();
}
import dayjs from "dayjs";
const searchAccount = ref()
//
const dataSource = ref([]);
//
interface EducationData {
id: number;
party_style_name: string;
party_style_countent: string;
status?: number; //
}
//
const page = reactive({
current: 1,
@ -67,84 +74,54 @@ const page = reactive({
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 })
}
automaticPublicity({}).then((res: any) => {
if (res.code == 1) {
dataSource.value = res.data;
} else {
layer.msg(res.msg, { icon: 2 })
}
})
}
const columns = [
{
title: "年度",
width: "180px",
key: "party_style_name",
align: 'center'
title: "年度",
width: "180px",
key: "niandu",
align: 'center'
},
{
title: "考评人数",
width: "180px",
key: "createtime",
align: 'center'
title: "考评项目",
width: "180px",
key: "title",
align: 'center'
},
{
title: "考评人数",
width: "180px",
key: "createtime",
align: 'center'
title: "考评人数",
width: "180px",
key: "kaopingrenshu",
align: 'center'
},
{
title: '操作',
width: '120px',
customSlot: 'operator',
key: 'operator',
align: 'center',
fixed: 'right'
title: "已考评人数",
width: "180px",
key: "yikaopingrenshu",
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) {