1
This commit is contained in:
parent
f618ccb65c
commit
0ef0ffbaf9
16
.vscode/launch.json
vendored
Normal file
16
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
// 使用 IntelliSense 了解相关属性。
|
||||
// 悬停以查看现有属性的描述。
|
||||
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
|
||||
{
|
||||
"type": "node-terminal",
|
||||
"name": "运行脚本: dev",
|
||||
"request": "launch",
|
||||
"command": "npm run dev",
|
||||
"cwd": "${workspaceFolder}"
|
||||
}
|
||||
]
|
||||
}
|
4
components.d.ts
vendored
4
components.d.ts
vendored
@ -20,6 +20,8 @@ declare module 'vue' {
|
||||
LayContainer: typeof import('@layui/layui-vue')['LayContainer']
|
||||
LayCountUp: typeof import('@layui/layui-vue')['LayCountUp']
|
||||
LayDatePicker: typeof import('@layui/layui-vue')['LayDatePicker']
|
||||
LayDescriptions: typeof import('@layui/layui-vue')['LayDescriptions']
|
||||
LayDescriptionsItem: typeof import('@layui/layui-vue')['LayDescriptionsItem']
|
||||
LayDropdown: typeof import('@layui/layui-vue')['LayDropdown']
|
||||
LayDropdownMenu: typeof import('@layui/layui-vue')['LayDropdownMenu']
|
||||
LayDropdownMenuItem: typeof import('@layui/layui-vue')['LayDropdownMenuItem']
|
||||
@ -40,6 +42,8 @@ declare module 'vue' {
|
||||
LayMenuItem: typeof import('@layui/layui-vue')['LayMenuItem']
|
||||
LayPopconfirm: typeof import('@layui/layui-vue')['LayPopconfirm']
|
||||
LayProgress: typeof import('@layui/layui-vue')['LayProgress']
|
||||
LayRadio: typeof import('@layui/layui-vue')['LayRadio']
|
||||
LayRadioGroup: typeof import('@layui/layui-vue')['LayRadioGroup']
|
||||
LayRow: typeof import('@layui/layui-vue')['LayRow']
|
||||
LaySelect: typeof import('@layui/layui-vue')['LaySelect']
|
||||
LaySelectOption: typeof import('@layui/layui-vue')['LaySelectOption']
|
||||
|
@ -7,7 +7,7 @@ type TAxiosOption = {
|
||||
timeout: number;
|
||||
baseURL: string;
|
||||
}
|
||||
|
||||
//记得修改上传路径
|
||||
//const baseURL = 'http://yfyd.hschool.com.cn' // 设置基础URL前缀
|
||||
const baseURL="/api";
|
||||
|
||||
|
@ -280,6 +280,51 @@ export const getYearListUpdate= function(date: any) {
|
||||
return Http.post('/api/backend/Year/getMonthlyListUpdate', date)
|
||||
}
|
||||
|
||||
//拒收红包列表
|
||||
export const getRejectRedEnvelopes= function(date: any) {
|
||||
return Http.post('/api/backend/reject_red_envelopes/index', date)
|
||||
}
|
||||
//拒收红包列表(新增)
|
||||
export const rejectRedEnvelopesCreate= function(date: any) {
|
||||
return Http.post('/api/backend/reject_red_envelopes/create', date)
|
||||
}
|
||||
//拒收红包列表(编辑)
|
||||
export const rejectRedEnvelopesUpdate= function(date: any) {
|
||||
return Http.post('/api/backend/reject_red_envelopes/examine', date)
|
||||
}
|
||||
//所有用户
|
||||
export const getDoctorName= function(date: any) {
|
||||
return Http.post('/api/backend/user/getDoctorName', date)
|
||||
}
|
||||
//加分减分记录
|
||||
export const getAddition= function(date: any) {
|
||||
return Http.post('/api/backend/addition_and_subtraction_records/index', date)
|
||||
}
|
||||
//加分减分记录(新增)
|
||||
export const getAdditionCreate= function(date: any) {
|
||||
return Http.post('/api/backend/addition_and_subtraction_records/create', date)
|
||||
}
|
||||
//加分减分记录(编辑)
|
||||
export const getAdditionUpdate= function(date: any) {
|
||||
return Http.post('/api/backend/addition_and_subtraction_records/update', date)
|
||||
}
|
||||
//加分减分记录(删除)
|
||||
export const getAdditionDelete= function(date: any) {
|
||||
return Http.post('/api/backend/addition_and_subtraction_records/delete', date)
|
||||
}
|
||||
|
||||
//加分减分管理
|
||||
export const getAdditionIndexManage= function(date: any) {
|
||||
return Http.post('/api/backend/addition_and_subtraction_records/index_manage', date)
|
||||
}
|
||||
//加分减分审核
|
||||
export const getAdditionIndexManageExamine= function(date: any) {
|
||||
return Http.post('/api/backend/addition_and_subtraction_records/examine', date)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -209,7 +209,7 @@ export default [
|
||||
{
|
||||
path: '/census/index',
|
||||
name: 'censusIndex',
|
||||
component: () => import('../../views/day_evaluation/index.vue'),
|
||||
component: () => import('../../views/census/red.vue'),
|
||||
meta: {title: '拒收红包报表统计', requireAuth: true, closable: true},
|
||||
},{
|
||||
path: '/census/day',
|
||||
|
@ -6,8 +6,8 @@
|
||||
<lay-form style="margin-top: 20px">
|
||||
<lay-row>
|
||||
<lay-col :md="5">
|
||||
<lay-form-item label="月度:" label-width="80">
|
||||
<lay-date-picker type="yearmonth" v-model="yearmonth" placeholder="月度" />
|
||||
<lay-form-item label="日期:" label-width="80">
|
||||
<lay-date-picker v-model="date" placeholder="选择日期" />
|
||||
</lay-form-item>
|
||||
</lay-col>
|
||||
<lay-col :md="4">
|
||||
@ -23,7 +23,7 @@
|
||||
<lay-col :md="24">
|
||||
<lay-card>
|
||||
<template #title>
|
||||
<div style="font-size: 20px;font-weight: 600;color: #333;">月度考评填报 - 分数统计</div>
|
||||
<div style="font-size: 20px;font-weight: 600;color: #333;">日常考评填报 - 分数统计</div>
|
||||
</template>
|
||||
<div id="main" ref="mainRef"></div>
|
||||
</lay-card>
|
||||
@ -31,7 +31,7 @@
|
||||
<lay-col :md="24">
|
||||
<lay-card>
|
||||
<template #title>
|
||||
<div style="font-size: 20px;font-weight: 600;color: #333;">月度考评报表 - 已参评人数统计</div>
|
||||
<div style="font-size: 20px;font-weight: 600;color: #333;">日常考评报表 - 已参评人数统计</div>
|
||||
</template>
|
||||
<div id="barChart" ref="barChartRef"></div>
|
||||
</lay-card>
|
||||
@ -46,19 +46,19 @@ import * as echarts from 'echarts'
|
||||
|
||||
const mainRef = ref()
|
||||
const barChartRef = ref()
|
||||
const yearmonth = ref('')
|
||||
const date = ref('')
|
||||
|
||||
// 查询方法
|
||||
const toSearch = () => {
|
||||
console.log('查询月度:', yearmonth.value)
|
||||
// TODO: 这里可以根据月度重新获取数据并刷新图表
|
||||
console.log('查询日期:', date.value)
|
||||
// TODO: 这里可以根据日期重新获取数据并刷新图表
|
||||
initChart()
|
||||
initBarChart()
|
||||
}
|
||||
|
||||
// 重置方法
|
||||
const toReset = () => {
|
||||
yearmonth.value = ''
|
||||
date.value = ''
|
||||
// TODO: 重置后可以重新加载默认数据
|
||||
initChart()
|
||||
initBarChart()
|
||||
@ -71,54 +71,54 @@ const initChart = () => {
|
||||
const myChart = echarts.init(chartDom)
|
||||
|
||||
const color = [
|
||||
'#0090FF',
|
||||
'#36CE9E',
|
||||
'#FFC005',
|
||||
'#FF515A',
|
||||
'#8B5CFF',
|
||||
'#00CA69'
|
||||
'#6236FF', // 高贵紫
|
||||
'#02C2E4', // 湖蓝
|
||||
'#FFB100', // 明黄
|
||||
'#1CC6A1', // 翡翠绿
|
||||
'#7B61FF', // 淡紫
|
||||
'#00B4D8' // 天蓝
|
||||
]
|
||||
|
||||
const echartData = [
|
||||
{
|
||||
name: '内科',
|
||||
value1: 94,
|
||||
value2: 91
|
||||
value1: 88,
|
||||
value2: 85
|
||||
},
|
||||
{
|
||||
name: '外科',
|
||||
value1: 93,
|
||||
value2: 90
|
||||
value1: 87,
|
||||
value2: 84
|
||||
},
|
||||
{
|
||||
name: '儿科',
|
||||
value1: 95,
|
||||
value2: 92
|
||||
value1: 89,
|
||||
value2: 86
|
||||
},
|
||||
{
|
||||
name: '妇产科',
|
||||
value1: 92,
|
||||
value2: 89
|
||||
value1: 86,
|
||||
value2: 83
|
||||
},
|
||||
{
|
||||
name: '急诊科',
|
||||
value1: 91,
|
||||
value2: 88
|
||||
value1: 85,
|
||||
value2: 82
|
||||
},
|
||||
{
|
||||
name: '骨科',
|
||||
value1: 93,
|
||||
value2: 91
|
||||
value1: 87,
|
||||
value2: 85
|
||||
},
|
||||
{
|
||||
name: '眼科',
|
||||
value1: 94,
|
||||
value2: 90
|
||||
value1: 88,
|
||||
value2: 84
|
||||
},
|
||||
{
|
||||
name: '口腔科',
|
||||
value1: 92,
|
||||
value2: 89
|
||||
value1: 86,
|
||||
value2: 83
|
||||
}
|
||||
]
|
||||
|
||||
@ -200,8 +200,8 @@ const initChart = () => {
|
||||
yAxis: [
|
||||
{
|
||||
type: 'value',
|
||||
min: 80,
|
||||
max: 100,
|
||||
min: 70,
|
||||
max: 90,
|
||||
axisLabel: {
|
||||
textStyle: {
|
||||
color: '#666'
|
||||
@ -318,14 +318,14 @@ const initBarChart = () => {
|
||||
const myChart = echarts.init(chartDom)
|
||||
|
||||
const barData = [
|
||||
{ name: '内科', value: 45 },
|
||||
{ name: '外科', value: 38 },
|
||||
{ name: '儿科', value: 25 },
|
||||
{ name: '妇产科', value: 32 },
|
||||
{ name: '急诊科', value: 28 },
|
||||
{ name: '骨科', value: 22 },
|
||||
{ name: '眼科', value: 18 },
|
||||
{ name: '口腔科', value: 20 }
|
||||
{ name: '内科', value: 25 },
|
||||
{ name: '外科', value: 22 },
|
||||
{ name: '儿科', value: 18 },
|
||||
{ name: '妇产科', value: 20 },
|
||||
{ name: '急诊科', value: 15 },
|
||||
{ name: '骨科', value: 12 },
|
||||
{ name: '眼科', value: 10 },
|
||||
{ name: '口腔科', value: 13 }
|
||||
]
|
||||
|
||||
const option = {
|
||||
@ -379,17 +379,17 @@ const initBarChart = () => {
|
||||
data: barData.map(item => item.value),
|
||||
itemStyle: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{ offset: 0, color: '#83bff6' },
|
||||
{ offset: 0.5, color: '#188df0' },
|
||||
{ offset: 1, color: '#188df0' }
|
||||
{ offset: 0, color: '#6236FF' }, // 顶部渐变色
|
||||
{ offset: 0.5, color: '#02C2E4' }, // 中间渐变色
|
||||
{ offset: 1, color: '#1CC6A1' } // 底部渐变色
|
||||
])
|
||||
},
|
||||
emphasis: {
|
||||
itemStyle: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{ offset: 0, color: '#2378f7' },
|
||||
{ offset: 0.7, color: '#2378f7' },
|
||||
{ offset: 1, color: '#83bff6' }
|
||||
{ offset: 0, color: '#5020E0' }, // 高亮时顶部色
|
||||
{ offset: 0.7, color: '#00A3C4' }, // 高亮时中间色
|
||||
{ offset: 1, color: '#15A589' } // 高亮时底部色
|
||||
])
|
||||
}
|
||||
}
|
||||
|
347
src/views/census/red.vue
Normal file
347
src/views/census/red.vue
Normal file
@ -0,0 +1,347 @@
|
||||
<template>
|
||||
<lay-container :fluid="true" style="padding: 20px">
|
||||
<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="80">
|
||||
<lay-date-picker type="yearmonth" v-model="yearmonth" placeholder="月度" />
|
||||
</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" style="margin-left: 10px">重置</lay-button>
|
||||
</lay-form-item>
|
||||
</lay-col>
|
||||
</lay-row>
|
||||
</lay-form>
|
||||
</lay-card>
|
||||
</lay-col>
|
||||
<lay-col :md="24">
|
||||
<lay-card>
|
||||
<template #title>
|
||||
<div style="font-size: 20px;font-weight: 600;color: #333;">拒收红包金额统计</div>
|
||||
</template>
|
||||
<div id="main" ref="mainRef"></div>
|
||||
</lay-card>
|
||||
</lay-col>
|
||||
<lay-col :md="24">
|
||||
<lay-card>
|
||||
<template #title>
|
||||
<div style="font-size: 20px;font-weight: 600;color: #333;">拒收红包次数统计</div>
|
||||
</template>
|
||||
<div id="barChart" ref="barChartRef"></div>
|
||||
</lay-card>
|
||||
</lay-col>
|
||||
</lay-row>
|
||||
</lay-container>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted } from 'vue'
|
||||
import * as echarts from 'echarts'
|
||||
|
||||
const mainRef = ref()
|
||||
const barChartRef = ref()
|
||||
const yearmonth = ref('')
|
||||
|
||||
// 查询方法
|
||||
const toSearch = () => {
|
||||
console.log('查询月度:', yearmonth.value)
|
||||
// TODO: 这里可以根据月度重新获取数据并刷新图表
|
||||
initChart()
|
||||
initBarChart()
|
||||
}
|
||||
|
||||
// 重置方法
|
||||
const toReset = () => {
|
||||
yearmonth.value = ''
|
||||
// TODO: 重置后可以重新加载默认数据
|
||||
initChart()
|
||||
initBarChart()
|
||||
}
|
||||
|
||||
// 初始化图表
|
||||
const initChart = () => {
|
||||
const chartDom = mainRef.value
|
||||
// @ts-ignore
|
||||
const myChart = echarts.init(chartDom)
|
||||
|
||||
const color = ['#FF515A', '#FFC005']
|
||||
|
||||
const echartData = [
|
||||
{
|
||||
name: '内科',
|
||||
value1: 2800,
|
||||
value2: 2400
|
||||
},
|
||||
{
|
||||
name: '外科',
|
||||
value1: 3200,
|
||||
value2: 2900
|
||||
},
|
||||
{
|
||||
name: '儿科',
|
||||
value1: 1500,
|
||||
value2: 1200
|
||||
},
|
||||
{
|
||||
name: '妇产科',
|
||||
value1: 2000,
|
||||
value2: 1800
|
||||
},
|
||||
{
|
||||
name: '急诊科',
|
||||
value1: 1800,
|
||||
value2: 1500
|
||||
},
|
||||
{
|
||||
name: '骨科',
|
||||
value1: 2500,
|
||||
value2: 2200
|
||||
},
|
||||
{
|
||||
name: '眼科',
|
||||
value1: 1200,
|
||||
value2: 1000
|
||||
},
|
||||
{
|
||||
name: '口腔科',
|
||||
value1: 1600,
|
||||
value2: 1400
|
||||
}
|
||||
]
|
||||
|
||||
const xAxisData = echartData.map((v) => v.name)
|
||||
const yAxisData1 = echartData.map((v) => v.value1)
|
||||
const yAxisData2 = echartData.map((v) => v.value2)
|
||||
|
||||
const hexToRgba = (hex: string, opacity: number) => {
|
||||
let rgbaColor = ''
|
||||
let reg = /^#[\da-f]{6}$/i
|
||||
if (reg.test(hex)) {
|
||||
rgbaColor = `rgba(${parseInt('0x' + hex.slice(1, 3))},${parseInt(
|
||||
'0x' + hex.slice(3, 5)
|
||||
)},${parseInt('0x' + hex.slice(5, 7))},${opacity})`
|
||||
}
|
||||
return rgbaColor
|
||||
}
|
||||
|
||||
const option = {
|
||||
color: color,
|
||||
legend: {
|
||||
right: 10,
|
||||
top: 10,
|
||||
data: ['拒收总金额', '已上交金额']
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
formatter: function (params: any) {
|
||||
return `<div style="font-weight: 600;font-size: 14px;color: #333;margin-bottom: 8px">
|
||||
${params[0].name}
|
||||
</div>
|
||||
<div style="color: #666;font-size: 13px;line-height: 24px">
|
||||
<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${color[0]};"></span>
|
||||
拒收总金额:
|
||||
<span style="color:${color[0]};font-weight:700;font-size: 14px">${params[0].value}</span>
|
||||
元
|
||||
</div>
|
||||
<div style="color: #666;font-size: 13px;line-height: 24px">
|
||||
<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${color[1]};"></span>
|
||||
已上交金额:
|
||||
<span style="color:${color[1]};font-weight:700;font-size: 14px">${params[1].value}</span>
|
||||
元
|
||||
</div>`
|
||||
},
|
||||
extraCssText: 'background: #fff; border-radius: 4px; padding: 8px 12px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);color: #333;',
|
||||
axisPointer: {
|
||||
type: 'line',
|
||||
lineStyle: {
|
||||
color: '#ccc',
|
||||
width: 1,
|
||||
type: 'dashed'
|
||||
}
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
x: '50px',
|
||||
y: '50px',
|
||||
x2: '50px',
|
||||
y2: '50px'
|
||||
},
|
||||
xAxis: [
|
||||
{
|
||||
type: 'category',
|
||||
boundaryGap: true,
|
||||
axisLabel: {
|
||||
formatter: '{value}',
|
||||
textStyle: {
|
||||
color: '#333'
|
||||
}
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#D9D9D9'
|
||||
}
|
||||
},
|
||||
data: xAxisData
|
||||
}
|
||||
],
|
||||
yAxis: [
|
||||
{
|
||||
type: 'value',
|
||||
name: '金额 (元)',
|
||||
min: 0,
|
||||
axisLabel: {
|
||||
textStyle: {
|
||||
color: '#666'
|
||||
}
|
||||
},
|
||||
nameTextStyle: {
|
||||
color: '#666',
|
||||
fontSize: 12,
|
||||
lineHeight: 40
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
type: 'dashed',
|
||||
color: '#E9E9E9'
|
||||
}
|
||||
},
|
||||
axisLine: {
|
||||
show: false
|
||||
},
|
||||
axisTick: {
|
||||
show: false
|
||||
}
|
||||
}
|
||||
],
|
||||
series: [
|
||||
{
|
||||
name: '拒收总金额',
|
||||
type: 'bar',
|
||||
barWidth: '20%',
|
||||
data: yAxisData1,
|
||||
itemStyle: {
|
||||
color: color[0]
|
||||
}
|
||||
},
|
||||
{
|
||||
name: '已上交金额',
|
||||
type: 'bar',
|
||||
barWidth: '20%',
|
||||
data: yAxisData2,
|
||||
itemStyle: {
|
||||
color: color[1]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
option && myChart.setOption(option)
|
||||
}
|
||||
|
||||
// 初始化柱状图
|
||||
const initBarChart = () => {
|
||||
const chartDom = barChartRef.value
|
||||
// @ts-ignore
|
||||
const myChart = echarts.init(chartDom)
|
||||
|
||||
const barData = [
|
||||
{ name: '内科', value: 15 },
|
||||
{ name: '外科', value: 18 },
|
||||
{ name: '儿科', value: 8 },
|
||||
{ name: '妇产科', value: 12 },
|
||||
{ name: '急诊科', value: 10 },
|
||||
{ name: '骨科', value: 14 },
|
||||
{ name: '眼科', value: 6 },
|
||||
{ name: '口腔科', value: 9 }
|
||||
]
|
||||
|
||||
const option = {
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: {
|
||||
type: 'shadow'
|
||||
},
|
||||
formatter: function(params: any) {
|
||||
return `${params[0].name}<br/>拒收次数:${params[0].value}次`
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
left: '3%',
|
||||
right: '4%',
|
||||
bottom: '3%',
|
||||
containLabel: true
|
||||
},
|
||||
xAxis: [
|
||||
{
|
||||
type: 'category',
|
||||
data: barData.map(item => item.name),
|
||||
axisTick: {
|
||||
alignWithLabel: true
|
||||
},
|
||||
axisLabel: {
|
||||
color: '#333'
|
||||
}
|
||||
}
|
||||
],
|
||||
yAxis: [
|
||||
{
|
||||
type: 'value',
|
||||
name: '次数',
|
||||
axisLabel: {
|
||||
color: '#333'
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
type: 'dashed',
|
||||
color: '#E9E9E9'
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
series: [
|
||||
{
|
||||
name: '拒收次数',
|
||||
type: 'bar',
|
||||
barWidth: '60%',
|
||||
data: barData.map(item => item.value),
|
||||
itemStyle: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{ offset: 0, color: '#ff7875' },
|
||||
{ offset: 0.5, color: '#ff4d4f' },
|
||||
{ offset: 1, color: '#f5222d' }
|
||||
])
|
||||
},
|
||||
emphasis: {
|
||||
itemStyle: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{ offset: 0, color: '#ff4d4f' },
|
||||
{ offset: 0.7, color: '#ff4d4f' },
|
||||
{ offset: 1, color: '#ff7875' }
|
||||
])
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
option && myChart.setOption(option)
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
initChart()
|
||||
initBarChart()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
#main, #barChart {
|
||||
width: 100%;
|
||||
height: 400px;
|
||||
}
|
||||
</style>
|
@ -82,12 +82,12 @@ const initChart = () => {
|
||||
const myChart = echarts.init(chartDom)
|
||||
|
||||
const color = [
|
||||
'#0090FF',
|
||||
'#36CE9E',
|
||||
'#FFC005',
|
||||
'#FF515A',
|
||||
'#8B5CFF',
|
||||
'#00CA69'
|
||||
'#FF6B6B', // 红色系
|
||||
'#4ECDC4', // 青色系
|
||||
'#45B7D1', // 蓝色系
|
||||
'#96CEB4', // 绿色系
|
||||
'#FFEEAD', // 黄色系
|
||||
'#D4A5A5' // 粉色系
|
||||
]
|
||||
|
||||
const echartData = [
|
||||
@ -390,17 +390,17 @@ const initBarChart = () => {
|
||||
data: barData.map(item => item.value),
|
||||
itemStyle: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{ offset: 0, color: '#83bff6' },
|
||||
{ offset: 0.5, color: '#188df0' },
|
||||
{ offset: 1, color: '#188df0' }
|
||||
{ offset: 0, color: '#FF6B6B' }, // 顶部颜色
|
||||
{ offset: 0.5, color: '#FF8787' }, // 中间颜色
|
||||
{ offset: 1, color: '#FFA5A5' } // 底部颜色
|
||||
])
|
||||
},
|
||||
emphasis: {
|
||||
itemStyle: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{ offset: 0, color: '#2378f7' },
|
||||
{ offset: 0.7, color: '#2378f7' },
|
||||
{ offset: 1, color: '#83bff6' }
|
||||
{ offset: 0, color: '#FF5252' }, // 高亮时顶部颜色
|
||||
{ offset: 0.7, color: '#FF6B6B' }, // 高亮时中间颜色
|
||||
{ offset: 1, color: '#FF8787' } // 高亮时底部颜色
|
||||
])
|
||||
}
|
||||
}
|
||||
|
@ -71,12 +71,12 @@ const initChart = () => {
|
||||
const myChart = echarts.init(chartDom)
|
||||
|
||||
const color = [
|
||||
'#0090FF',
|
||||
'#36CE9E',
|
||||
'#FFC005',
|
||||
'#FF515A',
|
||||
'#8B5CFF',
|
||||
'#00CA69'
|
||||
'#5470c6', // 典雅蓝
|
||||
'#91cc75', // 清新绿
|
||||
'#fac858', // 明亮黄
|
||||
'#ee6666', // 温暖红
|
||||
'#73c0de', // 浅天蓝
|
||||
'#3ba272' // 翠绿
|
||||
]
|
||||
|
||||
const echartData = [
|
||||
@ -379,17 +379,17 @@ const initBarChart = () => {
|
||||
data: barData.map(item => item.value),
|
||||
itemStyle: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{ offset: 0, color: '#83bff6' },
|
||||
{ offset: 0.5, color: '#188df0' },
|
||||
{ offset: 1, color: '#188df0' }
|
||||
{ offset: 0, color: '#5470c6' }, // 顶部颜色
|
||||
{ offset: 0.5, color: '#7b9eee' }, // 中间颜色
|
||||
{ offset: 1, color: '#a8c1ff' } // 底部颜色
|
||||
])
|
||||
},
|
||||
emphasis: {
|
||||
itemStyle: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{ offset: 0, color: '#2378f7' },
|
||||
{ offset: 0.7, color: '#2378f7' },
|
||||
{ offset: 1, color: '#83bff6' }
|
||||
{ offset: 0, color: '#3a56b0' }, // 高亮时顶部颜色
|
||||
{ offset: 0.7, color: '#5470c6' }, // 高亮时中间颜色
|
||||
{ offset: 1, color: '#7b9eee' } // 高亮时底部颜色
|
||||
])
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,7 @@
|
||||
<lay-row>
|
||||
<lay-col :md="5">
|
||||
<lay-form-item label="患者姓名:" label-width="80">
|
||||
<lay-input style="width: 220px" v-model="searchQuery.patientName" placeholder="请输入患者姓名"
|
||||
<lay-input v-model="searchQuery.patientName" placeholder="请输入患者姓名"
|
||||
:allow-clear="true">
|
||||
</lay-input>
|
||||
</lay-form-item>
|
||||
|
@ -11,11 +11,11 @@
|
||||
<lay-tag v-if="data.score_type==1" type="normal">加分</lay-tag>
|
||||
<lay-tag v-if="data.score_type==2" type="danger">减分</lay-tag>
|
||||
</template>
|
||||
<template v-slot:scoring_category="{data}">
|
||||
<!-- <template v-slot:scoring_category="{data}">
|
||||
<span v-if="data.scoring_category==1">年度</span>
|
||||
<span v-if="data.scoring_category==2">季度</span>
|
||||
<span v-if="data.scoring_category==3">院外评分</span>
|
||||
</template>
|
||||
</template> -->
|
||||
<template v-slot:operator="{data}">
|
||||
<lay-space size="lg">
|
||||
<span style="color: #00A394;cursor: pointer" @click="editShowMsd(data)">编辑</span>
|
||||
@ -44,24 +44,24 @@
|
||||
<lay-form-item required label-width="150px" label="项目名称" prop="project_name">
|
||||
<lay-textarea placeholder="请输入项目名称" v-model="addData.project_name"></lay-textarea>
|
||||
</lay-form-item>
|
||||
<lay-form-item required label-width="150px" label="项目代码" prop="project_code">
|
||||
<!-- <lay-form-item required label-width="150px" label="项目代码" prop="project_code">
|
||||
<lay-input v-model="addData.project_code" placeholder="请输入项目代码"></lay-input>
|
||||
</lay-form-item>
|
||||
<lay-form-item required label-width="150px" label="评分类型" prop="scoring_category">
|
||||
</lay-form-item> -->
|
||||
<!-- <lay-form-item required label-width="150px" label="评分类型" prop="scoring_category">
|
||||
<lay-select v-model="addData.scoring_category" 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-form-item required label-width="150px" label="所属考评项目" prop="related_evaluation_project">
|
||||
</lay-form-item> -->
|
||||
<!-- <lay-form-item required label-width="150px" label="所属考评项目" prop="related_evaluation_project">
|
||||
<lay-select v-model="addData.related_evaluation_project" placeholder="请选择">
|
||||
<lay-select-option v-for="item in categoryList" :value="item.id" :label="item.project_name"></lay-select-option>
|
||||
</lay-select>
|
||||
</lay-form-item>
|
||||
<lay-form-item required label-width="150px" label="每次填报次数上限" prop="annual_submission_limit">
|
||||
</lay-form-item> -->
|
||||
<!-- <lay-form-item required label-width="150px" label="每次填报次数上限" prop="annual_submission_limit">
|
||||
<lay-input-number v-model="addData.annual_submission_limit"></lay-input-number>
|
||||
</lay-form-item>
|
||||
</lay-form-item> -->
|
||||
<lay-form-item required label-width="150px" label="评分标准" prop="scoring_criteria">
|
||||
<lay-textarea placeholder="请输入" v-model="addData.scoring_criteria"></lay-textarea>
|
||||
</lay-form-item>
|
||||
@ -163,11 +163,6 @@ const columns6 = [
|
||||
customSlot: 'score_type',
|
||||
key: "score_type"
|
||||
},
|
||||
{
|
||||
title: "项目代码",
|
||||
width: "90px",
|
||||
key: "project_code"
|
||||
},
|
||||
{
|
||||
title: "项目名称",
|
||||
width: "100px",
|
||||
@ -184,23 +179,6 @@ const columns6 = [
|
||||
width: "100px",
|
||||
key: "single_score_min"
|
||||
},
|
||||
{
|
||||
title: "所属考评项目",
|
||||
width: "100px",
|
||||
key: "name",
|
||||
ellipsisTooltip:true,
|
||||
},
|
||||
{
|
||||
title: "评分类型",
|
||||
width: "100px",
|
||||
customSlot: 'scoring_category',
|
||||
key: "scoring_category"
|
||||
},
|
||||
{
|
||||
title: "每次填报上限",
|
||||
width: "100px",
|
||||
key: "annual_submission_limit"
|
||||
},
|
||||
{
|
||||
title: "评分标准",
|
||||
width: "100px",
|
||||
@ -223,27 +201,23 @@ const addButton = ref([
|
||||
console.log(addData);
|
||||
if (addData.project_name == '') {
|
||||
layer.msg('项目名称不能为空!', {icon: 2})
|
||||
}
|
||||
if (addData.project_code == '') {
|
||||
layer.msg('项目代码不能为空!', {icon: 2})
|
||||
return;
|
||||
}
|
||||
if (addData.score_type == null || addData.score_type == '') {
|
||||
layer.msg('加减分类型不能为空!', {icon: 2, time: 1000})
|
||||
return;
|
||||
}
|
||||
if (addData.single_score_max <=0) {
|
||||
layer.msg('单次评分上限不能为0!', {icon: 2, time: 1000})
|
||||
return;
|
||||
}
|
||||
if (addData.single_score_min <=0) {
|
||||
layer.msg('单次评分下限不能为0!', {icon: 2, time: 1000})
|
||||
}
|
||||
if (addData.scoring_category ==null) {
|
||||
layer.msg('评分类型不能为空!', {icon: 2, time: 1000})
|
||||
}
|
||||
if (addData.related_evaluation_project ==null) {
|
||||
layer.msg('所属考评项目不能为空!', {icon: 2, time: 1000})
|
||||
return;
|
||||
}
|
||||
if (addData.project_name =='') {
|
||||
layer.msg('评分标准不能为空!', {icon: 2, time: 1000})
|
||||
return;
|
||||
}
|
||||
if(addIsEdit.value==1){
|
||||
var res = await scoringGetHierarchicalDataCreate(addData);
|
||||
|
@ -4,29 +4,13 @@
|
||||
<div :style="{ width: isFold ? `0px` : `300px` }" class="left-tree">
|
||||
<!-- tree -->
|
||||
<div v-show="!isFold">
|
||||
<lay-button type="normal" size="sm" @click="toAdd">
|
||||
<lay-icon type="layui-icon-addition"></lay-icon>新建
|
||||
</lay-button>
|
||||
<lay-button type="warm" size="sm" @click="toEdit">
|
||||
<lay-icon type="layui-icon-edit"></lay-icon>修改
|
||||
</lay-button>
|
||||
<lay-button type="danger" size="sm" @click="toDelete">
|
||||
<lay-icon type="layui-icon-delete"></lay-icon>删除
|
||||
</lay-button>
|
||||
科室列表
|
||||
</div>
|
||||
|
||||
<lay-tree
|
||||
v-show="!isFold"
|
||||
style="margin-top: 10px"
|
||||
:data="data"
|
||||
v-model:selectedKey="selectedKey"
|
||||
:showLine="showLine"
|
||||
:expandKeys="[1, 3, 4]"
|
||||
@node-click="handleClick"
|
||||
>
|
||||
<lay-tree v-show="!isFold" style="margin-top: 10px" :data="data" v-model:selectedKey="leftId" :showLine="false"
|
||||
@node-click="handleClick">
|
||||
<template #title="{ data }">
|
||||
<span :class="selectedKey == data.id ? 'isChecked' : ''">
|
||||
{{ data.title }} {{ data.id }}
|
||||
<span :class="leftId == data.id ? 'isChecked' : ''">
|
||||
{{ data.name }}
|
||||
</span>
|
||||
</template>
|
||||
</lay-tree>
|
||||
@ -38,609 +22,276 @@
|
||||
<div style="flex: 1; padding: 10px; over-flow: auto">
|
||||
<!-- table -->
|
||||
<lay-card>
|
||||
<lay-form>
|
||||
<lay-row>
|
||||
<lay-col :md="5">
|
||||
<lay-form-item label="用户账号" label-width="80">
|
||||
<lay-input
|
||||
v-model="searchQuery.userAccount"
|
||||
placeholder="请输入"
|
||||
size="sm"
|
||||
:allow-clear="true"
|
||||
style="width: 98%"
|
||||
></lay-input>
|
||||
</lay-form-item>
|
||||
</lay-col>
|
||||
<lay-col :md="5">
|
||||
<lay-form-item label="用户名" label-width="80">
|
||||
<lay-input
|
||||
v-model="searchQuery.userName"
|
||||
placeholder="请输入"
|
||||
size="sm"
|
||||
:allow-clear="true"
|
||||
style="width: 98%"
|
||||
></lay-input>
|
||||
</lay-form-item>
|
||||
</lay-col>
|
||||
<lay-col :md="5">
|
||||
<lay-form-item label="性别" label-width="80">
|
||||
<lay-select
|
||||
class="search-input"
|
||||
size="sm"
|
||||
v-model="searchQuery.sex"
|
||||
:allow-clear="true"
|
||||
placeholder="请选择"
|
||||
>
|
||||
<lay-select-option
|
||||
value="man"
|
||||
label="男"
|
||||
></lay-select-option>
|
||||
<lay-select-option
|
||||
value="woman"
|
||||
label="女"
|
||||
></lay-select-option>
|
||||
</lay-select>
|
||||
</lay-form-item>
|
||||
</lay-col>
|
||||
<lay-col :md="5">
|
||||
<lay-form-item label-width="20">
|
||||
<lay-button
|
||||
style="margin-left: 20px"
|
||||
type="normal"
|
||||
size="sm"
|
||||
@click="toSearch"
|
||||
>
|
||||
查询
|
||||
</lay-button>
|
||||
<lay-button size="sm" @click="toReset"> 重置 </lay-button>
|
||||
</lay-form-item>
|
||||
</lay-col>
|
||||
</lay-row>
|
||||
</lay-form>
|
||||
<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" >
|
||||
<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-table
|
||||
:page="page"
|
||||
:height="'100%'"
|
||||
:columns="columns"
|
||||
:loading="loading"
|
||||
:default-toolbar="true"
|
||||
: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>
|
||||
<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>
|
||||
</template>
|
||||
<template #role="{ row }">
|
||||
<lay-tag color="#165DFF" variant="light">{{ row.role }}</lay-tag>
|
||||
<template v-slot:assessment_type="{ data }">
|
||||
<lay-tag :type="data.assessment_type == 1 ? 'primary' : 'danger'">
|
||||
{{ data.assessment_type == 1 ? '加分' : '减分' }}
|
||||
</lay-tag>
|
||||
</template>
|
||||
|
||||
<template v-slot:toolbar>
|
||||
<lay-button
|
||||
size="sm"
|
||||
type="primary"
|
||||
@click="changeVisible11('新增', null)"
|
||||
>新增</lay-button
|
||||
>
|
||||
<lay-button size="sm" @click="toRemove">删除</lay-button>
|
||||
</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>
|
||||
<template v-slot:operator="{ data }">
|
||||
<lay-space size="lg">
|
||||
<span style="color: #00A394;cursor: pointer" @click="showDetail(data)">详情</span>
|
||||
<lay-popconfirm v-if="data.status == 1" trigger="click" content="请确认你的操作,流程将结束" cancelText="审核拒绝" confirmText="审核通过" @confirm="confirm(data, 2)"
|
||||
@cancel="confirm(data, 3)">
|
||||
<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', '450px']">
|
||||
<lay-layer v-model="detailVisible" :type="4" title="详情查看" :area="['950px', '100%']" :shade="true">
|
||||
<div style="padding: 20px">
|
||||
<lay-form :model="model11" ref="layFormRef11" required>
|
||||
<lay-form-item label="用户账号" prop="account">
|
||||
<lay-input v-model="model11.account"></lay-input>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="用户名" prop="name">
|
||||
<lay-input v-model="model11.name"></lay-input>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="性别" prop="sex">
|
||||
<lay-select v-model="model11.sex" style="width: 100%">
|
||||
<lay-select-option value="男" label="男"></lay-select-option>
|
||||
<lay-select-option value="女" label="女"></lay-select-option>
|
||||
</lay-select>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="角色" prop="role">
|
||||
<lay-input v-model="model11.role"></lay-input>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="状态" prop="status">
|
||||
<lay-switch :model-value="model11.status"></lay-switch>
|
||||
</lay-form-item>
|
||||
</lay-form>
|
||||
<div style="width: 100%; text-align: center">
|
||||
<lay-button size="sm" type="primary" @click="toSubmit"
|
||||
>保存</lay-button
|
||||
>
|
||||
<lay-button size="sm" @click="toCancel">取消</lay-button>
|
||||
</div>
|
||||
</div>
|
||||
</lay-layer>
|
||||
|
||||
<lay-layer v-model="visible22" :title="title22" :area="['700px', '400px']">
|
||||
<div style="padding: 20px">
|
||||
<lay-form :model="model22" ref="layFormRef11" required>
|
||||
<lay-row>
|
||||
<lay-col md="12">
|
||||
<lay-form-item label="上级机构" prop="organization">
|
||||
<lay-select v-model="model22.organization" style="width: 100%">
|
||||
<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-option value="4" label="市场部">
|
||||
</lay-select-option>
|
||||
<lay-select-option value="5" label="运维部">
|
||||
</lay-select-option>
|
||||
</lay-select>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="机构名称" prop="name">
|
||||
<lay-input v-model="model22.name"></lay-input>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="机构全称" prop="fullName">
|
||||
<lay-input v-model="model22.fullName"></lay-input>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="机构代码" prop="code">
|
||||
<lay-input v-model="model22.code"></lay-input>
|
||||
</lay-form-item>
|
||||
</lay-col>
|
||||
<lay-col md="12">
|
||||
<lay-form-item label="机构类型" prop="type">
|
||||
<lay-select v-model="model22.type" style="width: 100%">
|
||||
<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-option value="4" label="小组"></lay-select-option>
|
||||
</lay-select>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="排序号" prop="sort">
|
||||
<lay-input-number
|
||||
style="width: 100%"
|
||||
v-model="model22.sort"
|
||||
position="right"
|
||||
></lay-input-number>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="备注" prop="remark">
|
||||
<lay-textarea
|
||||
placeholder="请输入备注"
|
||||
v-model="model22.remark"
|
||||
:rows="4"
|
||||
></lay-textarea>
|
||||
</lay-form-item>
|
||||
</lay-col>
|
||||
</lay-row>
|
||||
</lay-form>
|
||||
<div style="width: 100%; text-align: center">
|
||||
<lay-button size="sm" type="primary" @click="toSubmit"
|
||||
>保存</lay-button
|
||||
>
|
||||
<lay-button size="sm" @click="toCancel">取消</lay-button>
|
||||
<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.assessment_type }}
|
||||
</lay-descriptions-item>
|
||||
<lay-descriptions-item label="考评项目">
|
||||
{{ detailForm.project_name }}
|
||||
</lay-descriptions-item>
|
||||
<lay-descriptions-item label="分值">
|
||||
{{ detailForm.score_value }}
|
||||
</lay-descriptions-item>
|
||||
<lay-descriptions-item label="状态">
|
||||
{{ detailForm.status == 1 ? '待审核' : detailForm.status == 2 ? '审核通过' : '已驳回' }}
|
||||
</lay-descriptions-item>
|
||||
<lay-descriptions-item label="备注" :span="2">
|
||||
{{ detailForm.notes || '暂无备注' }}
|
||||
</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>
|
||||
<div style="text-align: center; margin-top: 20px;">
|
||||
<lay-button @click="detailVisible = false">关闭</lay-button>
|
||||
</div>
|
||||
</div>
|
||||
</lay-layer>
|
||||
</lay-container>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive } from 'vue'
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { layer } from '@layui/layui-vue'
|
||||
|
||||
const data = ref([
|
||||
{
|
||||
title: 'xxxx公司',
|
||||
id: 1,
|
||||
checked: true,
|
||||
children: [
|
||||
{
|
||||
title: '研发部',
|
||||
id: 2,
|
||||
children: [
|
||||
{
|
||||
title: '研发一部',
|
||||
id: 3
|
||||
},
|
||||
{
|
||||
title: '研发二部',
|
||||
id: 4
|
||||
},
|
||||
{
|
||||
title: '研发三部',
|
||||
id: 5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '测试部',
|
||||
id: 6,
|
||||
children: [
|
||||
{
|
||||
title: '测试一部',
|
||||
id: 7,
|
||||
disabled: true
|
||||
},
|
||||
{
|
||||
title: '测试二部',
|
||||
id: 8
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '设计部',
|
||||
id: 9
|
||||
},
|
||||
{
|
||||
title: '市场部',
|
||||
id: 10
|
||||
}
|
||||
]
|
||||
}
|
||||
])
|
||||
const showLine = ref(false)
|
||||
const selectedKey = ref('')
|
||||
const selectedNode = ref({
|
||||
id: 0,
|
||||
title: ''
|
||||
import { getAdditionIndexManage, getAdditionIndexManageExamine, getDoctorName, userGroupData } from '@/api/module/home';
|
||||
import { useUserStore } from '@/store/user';
|
||||
const userStore = useUserStore()
|
||||
onMounted(() => {
|
||||
getLeftList();
|
||||
getUserAllList();
|
||||
})
|
||||
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
|
||||
const userList = ref([]);
|
||||
const getUserAllList = () => {
|
||||
getDoctorName({}).then((res) => {
|
||||
if (res.code === 1) {
|
||||
userList.value = res.data;
|
||||
}
|
||||
})
|
||||
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)
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
)
|
||||
}
|
||||
const leftId = ref(0);
|
||||
const data = ref()
|
||||
const getLeftList = () => {
|
||||
userGroupData({}).then((res) => {
|
||||
console.log(res)
|
||||
if (res.code == 1) {
|
||||
data.value = res.data;
|
||||
leftId.value = res.data[0].id;
|
||||
getUserList();
|
||||
|
||||
function toSearch() {
|
||||
page.current = 1
|
||||
change(page)
|
||||
} else {
|
||||
layer.msg(res.msg, { icon: 2 })
|
||||
}
|
||||
})
|
||||
}
|
||||
const getUserList = () => {
|
||||
getAdditionIndexManage({ page: page.current, size: page.limit, group_id: leftId.value, ...searchForm.value }).then((res) => {
|
||||
if (res.code == 1) {
|
||||
dataSource.value = res.data.data;
|
||||
page.total = res.data.count;
|
||||
} else {
|
||||
layer.msg(res.msg, { icon: 2 })
|
||||
}
|
||||
})
|
||||
}
|
||||
// 搜索方法
|
||||
const toSearch = () => {
|
||||
page.current = 1
|
||||
dataSource.value = []
|
||||
getUserList()
|
||||
}
|
||||
// 添加分页变化处理方法
|
||||
const handlePageChange = (d) => {
|
||||
console.log(d);
|
||||
getUserList()
|
||||
}
|
||||
// 重置方法
|
||||
const toReset = () => {
|
||||
searchForm.value = {
|
||||
fsdate: '',
|
||||
user_id: '',
|
||||
status: ''
|
||||
}
|
||||
page.current = 1
|
||||
dataSource.value = []
|
||||
getUserList()
|
||||
}
|
||||
|
||||
const loading = ref(false)
|
||||
const selectedKeys = ref()
|
||||
const page = reactive({ current: 1, limit: 10, total: 100 })
|
||||
const page = reactive({ current: 1, limit: 10, total: 1 })
|
||||
const columns = ref([
|
||||
{ title: '选项', width: '55px', type: 'checkbox', fixed: 'left' },
|
||||
{ title: '编号', width: '80px', key: 'id', fixed: 'left', sort: 'id' },
|
||||
{ title: '用户账号', width: '80px', key: 'account', sort: 'account' },
|
||||
{ title: '用户名', width: '80px', key: 'name', sort: 'name' },
|
||||
{ title: '性别', width: '80px', key: 'sex', sort: 'sex' },
|
||||
{ title: '角色', width: '120px', key: 'role', customSlot: 'role' },
|
||||
{
|
||||
title: '创建时间',
|
||||
width: '120px',
|
||||
key: 'joinTime'
|
||||
title: "序号",
|
||||
width: "80px",
|
||||
key: "id",
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: "发生时间",
|
||||
width: "160px",
|
||||
key: "fsdate",
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: "考评对象",
|
||||
width: "120px",
|
||||
key: "nickname",
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: "考评类型",
|
||||
width: "100px",
|
||||
key: "assessment_type",
|
||||
customSlot: 'assessment_type',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: "考评项",
|
||||
width: "150px",
|
||||
key: "project_name",
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: "分值",
|
||||
width: "80px",
|
||||
key: "score_value",
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: "记录状态",
|
||||
width: "100px",
|
||||
customSlot: 'status',
|
||||
key: "status",
|
||||
align: 'center'
|
||||
},
|
||||
{ title: '状态', width: '120px', key: 'status', sort: 'status' },
|
||||
|
||||
{
|
||||
title: '操作',
|
||||
width: '150px',
|
||||
width: '180px',
|
||||
customSlot: 'operator',
|
||||
key: 'operator',
|
||||
align: 'center',
|
||||
fixed: 'right'
|
||||
}
|
||||
])
|
||||
const change = (page: any) => {
|
||||
loading.value = true
|
||||
setTimeout(() => {
|
||||
dataSource.value = loadDataSource(page.current, page.limit)
|
||||
loading.value = false
|
||||
}, 1000)
|
||||
}
|
||||
const sortChange = (key: any, sort: number) => {
|
||||
layer.msg(`字段${key} - 排序${sort}, 你可以利用 sort-change 实现服务端排序`)
|
||||
}
|
||||
const dataSource = ref([
|
||||
{
|
||||
id: '1',
|
||||
name: '管理员',
|
||||
sex: '男',
|
||||
role: '管理员',
|
||||
account: 'admin',
|
||||
joinTime: '2022-02-09 18:34:56',
|
||||
status: true
|
||||
},
|
||||
{
|
||||
id: '2',
|
||||
name: '张三2',
|
||||
sex: '男',
|
||||
role: '普通用户',
|
||||
account: '用户2',
|
||||
joinTime: '2022-02-09 18:34:56',
|
||||
status: true
|
||||
},
|
||||
{
|
||||
id: '3',
|
||||
name: '李四3',
|
||||
sex: '男',
|
||||
role: '普通用户',
|
||||
account: '用户3',
|
||||
joinTime: '2022-02-09 18:34:56',
|
||||
status: true
|
||||
},
|
||||
{
|
||||
id: '4',
|
||||
name: '用户4',
|
||||
sex: '男',
|
||||
role: '普通用户',
|
||||
account: '用户4',
|
||||
joinTime: '2022-02-09 18:34:56',
|
||||
status: true
|
||||
},
|
||||
{
|
||||
id: '5',
|
||||
name: '王五5',
|
||||
sex: '男',
|
||||
role: '普通用户',
|
||||
account: '用户5',
|
||||
joinTime: '2022-02-09 18:34:56',
|
||||
status: true
|
||||
},
|
||||
{
|
||||
id: '6',
|
||||
name: '赵六6',
|
||||
sex: '男',
|
||||
role: '普通用户',
|
||||
account: '用户6',
|
||||
joinTime: '2022-02-09 18:34:56',
|
||||
status: true
|
||||
},
|
||||
{
|
||||
id: '7',
|
||||
name: '黄齐7',
|
||||
sex: '男',
|
||||
role: '普通用户',
|
||||
account: '用户7',
|
||||
joinTime: '2022-02-09 18:34:56',
|
||||
status: true
|
||||
},
|
||||
{
|
||||
id: '8',
|
||||
name: '用户8',
|
||||
sex: '男',
|
||||
role: '普通用户',
|
||||
account: '用户8',
|
||||
joinTime: '2022-02-09 18:34:56',
|
||||
status: true
|
||||
},
|
||||
{
|
||||
id: '9',
|
||||
name: '游客9',
|
||||
sex: '男',
|
||||
role: '游客',
|
||||
account: '游客9',
|
||||
joinTime: '用户22-02-09 18:34:56',
|
||||
status: true
|
||||
},
|
||||
{
|
||||
id: '10',
|
||||
name: '用户10',
|
||||
sex: '女',
|
||||
role: '普通用户',
|
||||
account: 'user10',
|
||||
joinTime: '2022-02-09 18:34:56 18:34:56',
|
||||
status: true
|
||||
}
|
||||
])
|
||||
const changeStatus = (isChecked: boolean, row: any) => {
|
||||
dataSource.value.forEach((item) => {
|
||||
if (item.id === row.id) {
|
||||
layer.msg('Success', { icon: 1 }, () => {
|
||||
item.status = isChecked
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
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
|
||||
for (var i = startIndex; i <= endIndex; i++) {
|
||||
response.push({
|
||||
id: `${i}`,
|
||||
account: `user${i}`,
|
||||
sex: '男',
|
||||
name: `用户${i}`,
|
||||
joinTime: '2022-02-09 18:34:56',
|
||||
role: '普通用户',
|
||||
status: true
|
||||
})
|
||||
}
|
||||
return response
|
||||
}
|
||||
const model11 = ref({
|
||||
name: '',
|
||||
role: '',
|
||||
sex: '',
|
||||
status: '',
|
||||
account: ''
|
||||
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 searchForm = ref({
|
||||
fsdate: '',
|
||||
user_id: '',
|
||||
status: ''
|
||||
})
|
||||
const layFormRef11 = ref()
|
||||
const visible11 = ref(false)
|
||||
const title = ref('新增')
|
||||
const changeVisible11 = (text: any, row: any) => {
|
||||
title.value = text
|
||||
if (row != null) {
|
||||
let info = JSON.parse(JSON.stringify(row))
|
||||
model11.value = info
|
||||
} else {
|
||||
model11.value = {
|
||||
name: '',
|
||||
role: '',
|
||||
sex: '',
|
||||
status: '',
|
||||
account: ''
|
||||
}
|
||||
}
|
||||
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
|
||||
}
|
||||
function toCancel() {
|
||||
visible11.value = false
|
||||
visible22.value = false
|
||||
}
|
||||
function confirm() {
|
||||
layer.msg('您已成功删除')
|
||||
}
|
||||
function cancel() {
|
||||
layer.msg('您已取消操作')
|
||||
}
|
||||
|
||||
const model22 = ref({
|
||||
organization: '',
|
||||
name: '',
|
||||
fullName: '',
|
||||
code: '',
|
||||
type: '',
|
||||
sort: 0,
|
||||
remark: ''
|
||||
})
|
||||
const layFormRef22 = ref()
|
||||
const visible22 = ref(false)
|
||||
const title22 = ref('新建')
|
||||
// 显示详情方法
|
||||
const showDetail = (row: any) => {
|
||||
detailForm.value = row
|
||||
detailVisible.value = true
|
||||
}
|
||||
const confirm = (data: any, status: number) => {
|
||||
console.log(data, status)
|
||||
getAdditionIndexManageExamine({ id: data.id, status: status }).then((res) => {
|
||||
if (res.code == 1) {
|
||||
layer.msg(res.msg, { icon: 1 })
|
||||
} else {
|
||||
layer.msg(res.msg, { icon: 2 })
|
||||
}
|
||||
getUserList();
|
||||
})
|
||||
}
|
||||
// 修改点击科室树节点的处理方法
|
||||
const handleClick = (node: any) => {
|
||||
leftId.value = node.id
|
||||
page.current = 1
|
||||
dataSource.value = []
|
||||
getUserList();
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
@ -652,6 +303,7 @@ const title22 = ref('新建')
|
||||
background-color: #fff;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.left-tree {
|
||||
display: inline-block;
|
||||
padding: 20px 15px 0 5px;
|
||||
@ -660,6 +312,7 @@ const title22 = ref('新建')
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* todo layui-tree-entry 设置无效 */
|
||||
.layui-tree-entry {
|
||||
position: relative;
|
||||
@ -668,6 +321,7 @@ const title22 = ref('新建')
|
||||
line-height: 20px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.isFold {
|
||||
position: absolute;
|
||||
top: 36%;
|
||||
@ -680,6 +334,7 @@ const title22 = ref('新建')
|
||||
border: 1px solid #e6e6e6;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.search-input {
|
||||
display: inline-block;
|
||||
width: 98%;
|
||||
|
@ -4,24 +4,27 @@
|
||||
<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="80">
|
||||
<lay-select 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>
|
||||
</lay-form-item>
|
||||
</lay-col>
|
||||
<lay-col :md="4">
|
||||
<lay-form-item label-width="0">
|
||||
<lay-button type="primary" @click="search">查询</lay-button>
|
||||
<lay-button @click="resetSearch" style="margin-left: 10px">重置</lay-button>
|
||||
</lay-form-item>
|
||||
</lay-col>
|
||||
</lay-row>
|
||||
</lay-form>
|
||||
<div class="search-form-wrapper">
|
||||
<lay-form style="margin-top: 20px">
|
||||
<lay-row style="min-width: 1400px">
|
||||
<lay-col :md="5">
|
||||
<lay-form-item label="记录状态:">
|
||||
<lay-select v-model="searchForm.status" placeholder="请选择状态" style="width: 180px;">
|
||||
<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="6">
|
||||
<lay-form-item label-width="0">
|
||||
<lay-button type="primary" @click="search">查询</lay-button>
|
||||
<lay-button @click="resetSearch" style="margin-left: 10px">重置</lay-button>
|
||||
</lay-form-item>
|
||||
</lay-col>
|
||||
</lay-row>
|
||||
</lay-form>
|
||||
</div>
|
||||
</lay-card>
|
||||
</lay-col>
|
||||
<!-- 列表区域 -->
|
||||
@ -31,18 +34,24 @@
|
||||
<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 size="lg" :columns="columns" :data-source="dataSource" :page="page" @change="change">
|
||||
<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>
|
||||
</template>
|
||||
<template v-slot:assessment_type="{ data }">
|
||||
<lay-tag :type="data.assessment_type == 1 ? 'primary' : 'danger'">
|
||||
{{ data.assessment_type == 1 ? '加分' : '减分' }}
|
||||
</lay-tag>
|
||||
</template>
|
||||
<template v-slot:operator="{ data }">
|
||||
<lay-space size="lg">
|
||||
<span style="color: #00A394;cursor: pointer" @click="showDetail(data)">详情</span>
|
||||
<span style="color: #00A394;cursor: pointer" @click="editRecord(data)">编辑</span>
|
||||
<lay-popconfirm trigger="click" content="确定要删除吗?" @confirm="deleteRecord(data)">
|
||||
<span v-if="data.status == 1" style="color: #00A394;cursor: pointer" @click="editRecord(data)">编辑</span>
|
||||
<!-- <lay-popconfirm trigger="click" content="确定要删除吗?" @confirm="deleteRecord(data)">
|
||||
<span style="color: #00A394;cursor: pointer">删除</span>
|
||||
</lay-popconfirm>
|
||||
</lay-popconfirm> -->
|
||||
</lay-space>
|
||||
</template>
|
||||
</lay-table>
|
||||
@ -52,149 +61,378 @@
|
||||
:btn="formButtons">
|
||||
<lay-container fluid="true" style="padding: 20px">
|
||||
<lay-form :model="formData">
|
||||
<lay-form-item required label="考评对象" prop="targetPerson">
|
||||
<lay-input v-model="formData.targetPerson" placeholder="请输入考评对象"></lay-input>
|
||||
<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>
|
||||
</lay-select>
|
||||
</lay-form-item>
|
||||
<lay-form-item required label="考评类型" prop="evaluationType">
|
||||
<lay-select v-model="formData.evaluationType" placeholder="请选择">
|
||||
<lay-form-item required label="考评类型" prop="assessment_type">
|
||||
<lay-select v-model="formData.assessment_type" placeholder="请选择">
|
||||
<lay-select-option :value="1" label="加分"></lay-select-option>
|
||||
<lay-select-option :value="2" label="减分"></lay-select-option>
|
||||
</lay-select>
|
||||
</lay-form-item>
|
||||
<lay-form-item required label="考评项目" prop="evaluationItem">
|
||||
<lay-select v-model="formData.evaluationItem" placeholder="请选择">
|
||||
<lay-select-option v-for="item in evaluationItems" :key="item.value" :value="item.value"
|
||||
:label="item.label"></lay-select-option>
|
||||
<lay-form-item required label="考评项目" prop="assessment_project" :tips="selectedItemTips">
|
||||
<lay-select v-model="formData.assessment_project" placeholder="请选择" :show-search="true"
|
||||
@change="handleItemChange">
|
||||
<lay-select-option v-for="item in evaluationItems" :key="item.id" :value="item.id"
|
||||
:label="item.project_name"></lay-select-option>
|
||||
</lay-select>
|
||||
</lay-form-item>
|
||||
<lay-form-item required label="分值" prop="score">
|
||||
<lay-input-number v-model="formData.score" placeholder="请输入分值"></lay-input-number>
|
||||
<lay-form-item required label="分值" prop="score_value">
|
||||
<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="occurTime">
|
||||
<lay-date-picker v-model="formData.occurTime" type="datetime"></lay-date-picker>
|
||||
<lay-form-item required label="发生时间" prop="fsdate">
|
||||
<lay-date-picker v-model="formData.fsdate" placeholder="发生时间" type="datetime"></lay-date-picker>
|
||||
</lay-form-item>
|
||||
<lay-form-item required label="证明人" prop="witness">
|
||||
<lay-select v-model="formData.witness" placeholder="请选择">
|
||||
<lay-select-option v-for="person in witnessList" :key="person.value" :value="person.value"
|
||||
:label="person.label"></lay-select-option>
|
||||
<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>
|
||||
</lay-select>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="附件" prop="attachment">
|
||||
<lay-upload v-model="formData.attachment" :auto="true"></lay-upload>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="备注" prop="remark">
|
||||
<lay-textarea v-model="formData.remark" placeholder="请输入备注"></lay-textarea>
|
||||
<lay-form-item label="附件" mode="block">
|
||||
<lay-upload ref="uploadRef" :number="1" field="file" :size="1000"
|
||||
:headers="{ token: userStore.token }" url="/api/api/common/upload" @cutdone="getCutDone"
|
||||
v-model="file1" :auto="true" :cut="false" :cutOptions="cutOptions" @done="getFileDone">
|
||||
<template #preview>
|
||||
<a v-if="formData.fj_url!=''" style="color: #009688" :href="formData.fj_url" target="_blank">
|
||||
{{ formData.fj_url }}
|
||||
</a>
|
||||
</template>
|
||||
</lay-upload>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="备注" prop="notes">
|
||||
<lay-textarea v-model="formData.notes" placeholder="请输入备注"></lay-textarea>
|
||||
</lay-form-item>
|
||||
</lay-form>
|
||||
</lay-container>
|
||||
</lay-layer>
|
||||
<lay-layer v-model="showDetailDialog" title="记录详情" :area="['950px', '100%']" :shade="true" :type="4">
|
||||
<div style="padding: 20px">
|
||||
<lay-descriptions title="基本信息" :column="2" border>
|
||||
<lay-descriptions-item label="考评对象">
|
||||
{{ detailData.nickname }}
|
||||
</lay-descriptions-item>
|
||||
<lay-descriptions-item label="考评类型">
|
||||
{{ detailData.assessment_type == 1 ? '加分' : '减分' }}
|
||||
</lay-descriptions-item>
|
||||
<lay-descriptions-item label="考评项目">
|
||||
{{ detailData.project_name }}
|
||||
</lay-descriptions-item>
|
||||
<lay-descriptions-item label="分值">
|
||||
{{ detailData.score_value }}
|
||||
</lay-descriptions-item>
|
||||
<lay-descriptions-item label="发生时间">
|
||||
{{ detailData.fsdate }}
|
||||
</lay-descriptions-item>
|
||||
<lay-descriptions-item label="证明人">
|
||||
{{ detailData.zm_nickname }}
|
||||
</lay-descriptions-item>
|
||||
</lay-descriptions>
|
||||
|
||||
<lay-descriptions title="其他信息" :column="2" border style="margin-top: 20px">
|
||||
<lay-descriptions-item label="状态">
|
||||
<lay-tag size="sm" type="primary">
|
||||
{{ detailData.status == 1 ? '待审核' : '审核通过' }}
|
||||
</lay-tag>
|
||||
</lay-descriptions-item>
|
||||
<lay-descriptions-item label="备注" :span="2">
|
||||
{{ detailData.notes || '暂无备注' }}
|
||||
</lay-descriptions-item>
|
||||
</lay-descriptions>
|
||||
|
||||
<lay-descriptions v-if="detailData.fj_url" title="附件信息" :column="1" border style="margin-top: 20px">
|
||||
<lay-descriptions-item label="附件">
|
||||
<a style="color: #009688" :href="detailData.fj_url" target="_blank">查看附件</a>
|
||||
</lay-descriptions-item>
|
||||
</lay-descriptions>
|
||||
|
||||
<div style="text-align: center; margin-top: 20px;">
|
||||
<lay-button type="primary" @click="showDetailDialog = false">关闭</lay-button>
|
||||
</div>
|
||||
</div>
|
||||
</lay-layer>
|
||||
</lay-row>
|
||||
</lay-container>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive } from 'vue'
|
||||
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'
|
||||
|
||||
interface EvaluationItem {
|
||||
id: number
|
||||
project_name: string
|
||||
scoring_criteria: string
|
||||
single_score_max: number
|
||||
single_score_min: number
|
||||
}
|
||||
|
||||
// 定义用户接口
|
||||
interface User {
|
||||
id: number
|
||||
nickname: string
|
||||
}
|
||||
|
||||
// 修改 userList 的类型定义
|
||||
const userList = ref<User[]>([])
|
||||
|
||||
|
||||
const detailData = ref<DetailData>({
|
||||
nickname: '',
|
||||
assessment_type: 1,
|
||||
project_name: '',
|
||||
score_value: 0,
|
||||
fsdate: '',
|
||||
zm_nickname: '',
|
||||
fj_url: '',
|
||||
notes: '',
|
||||
status: 1,
|
||||
create_time: ''
|
||||
})
|
||||
|
||||
const formData = reactive<FormData>({
|
||||
id: 0,
|
||||
user_id: '',
|
||||
assessment_type: 1,
|
||||
assessment_project: '',
|
||||
score_value: 0,
|
||||
fsdate: '',
|
||||
zm_user_id: '',
|
||||
fj_url: '',
|
||||
notes: ''
|
||||
})
|
||||
|
||||
// 修改文件上传相关的类型
|
||||
interface UploadResponse {
|
||||
data: string
|
||||
msg: string
|
||||
}
|
||||
|
||||
const getCutDone = (res: UploadResponse) => {
|
||||
console.log("getCutDone", res)
|
||||
cutUrl.value = res.msg
|
||||
}
|
||||
|
||||
const getFileDone = (res: UploadResponse) => {
|
||||
const date = JSON.parse(res.data)
|
||||
console.log("getFileDone", date)
|
||||
formData.fj_url = date.data.fullurl
|
||||
}
|
||||
|
||||
// 修改 handleItemChange 的实现
|
||||
const handleItemChange = (value: string | number | object) => {
|
||||
const selectedItem = evaluationItems.value.find(item => item.id === Number(value))
|
||||
if (selectedItem) {
|
||||
maxInput.single_score_max = selectedItem.single_score_max
|
||||
maxInput.single_score_min = selectedItem.single_score_min
|
||||
selectedItemTips.value = selectedItem.scoring_criteria || ''
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getAdditionList()
|
||||
getHierarchicalData()
|
||||
getUserList()
|
||||
})
|
||||
// 添加搜索表单数据
|
||||
const searchForm = reactive({
|
||||
status: ''
|
||||
})
|
||||
const cutOptions = {
|
||||
copperOption: {
|
||||
center: false,
|
||||
aspectRatio: 1,
|
||||
}
|
||||
}
|
||||
const cutUrl = ref("");
|
||||
const uploadRef = ref(null)
|
||||
const file1 = ref([]);
|
||||
// 分页配置
|
||||
const page = reactive({
|
||||
total: 1, // 总条数
|
||||
current: 1, // 当前页
|
||||
limit: 10, // 每页条数
|
||||
showRefresh: true, // 显示刷新按钮
|
||||
showLimit: true // 显示条数选择器
|
||||
})
|
||||
|
||||
const getAdditionList = () => {
|
||||
const params = {
|
||||
page: page.current,
|
||||
size: page.limit,
|
||||
...searchForm
|
||||
}
|
||||
getAddition(params).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 evaluationItems = ref<EvaluationItem[]>([])
|
||||
const selectedItemTips = ref('')
|
||||
|
||||
const getHierarchicalData = () => {
|
||||
scoringGetHierarchicalData({}).then((res) => {
|
||||
console.log(res)
|
||||
if (res.code == 1) {
|
||||
evaluationItems.value = res.data;
|
||||
} else {
|
||||
layer.msg(res.msg, { icon: 2 })
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 列表数据
|
||||
const dataSource = ref([
|
||||
{
|
||||
id: 1,
|
||||
occurTime: '2024-03-15 14:30',
|
||||
targetPerson: '张三',
|
||||
evaluationType: 1,
|
||||
evaluationItem: '工作表现优异',
|
||||
score: 5,
|
||||
reporter: '李四',
|
||||
status: 1
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
occurTime: '2024-03-14 09:15',
|
||||
targetPerson: '王五',
|
||||
evaluationType: 2,
|
||||
evaluationItem: '迟到',
|
||||
score: -2,
|
||||
reporter: '李四',
|
||||
status: 2
|
||||
}
|
||||
])
|
||||
const dataSource = ref()
|
||||
|
||||
// 表单显示控制
|
||||
const showForm = ref(false)
|
||||
const isEdit = ref(false)
|
||||
const showDetailDialog = ref(false)
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: 0,
|
||||
targetPerson: '',
|
||||
evaluationType: 1,
|
||||
evaluationItem: '',
|
||||
score: 0,
|
||||
occurTime: '',
|
||||
witness: '',
|
||||
attachment: [],
|
||||
remark: ''
|
||||
})
|
||||
// 表单按钮定义
|
||||
const formButtons = ref([
|
||||
{
|
||||
text: "确认",
|
||||
callback: async () => {
|
||||
// 分开检查必填字段是否为空
|
||||
if (!formData.user_id) {
|
||||
layer.msg('考评对象不能为空!', { icon: 2 });
|
||||
return;
|
||||
}
|
||||
if (!formData.assessment_project) {
|
||||
layer.msg('考评项目不能为空!', { icon: 2 });
|
||||
return;
|
||||
}
|
||||
if (!formData.score_value) {
|
||||
layer.msg('分值不能为空!', { icon: 2 });
|
||||
return;
|
||||
}
|
||||
if (!formData.fsdate) {
|
||||
layer.msg('发生时间不能为空!', { icon: 2 });
|
||||
return;
|
||||
}
|
||||
if (!formData.zm_user_id) {
|
||||
layer.msg('证明人不能为空!', { icon: 2 });
|
||||
return;
|
||||
}
|
||||
formData.tb_user_id = userStore.userInfo.id;
|
||||
formData.group_id = userStore.userInfo.group_id;
|
||||
try {
|
||||
if (isEdit.value) {
|
||||
// 调用编辑接口
|
||||
await getAdditionUpdate(formData);
|
||||
layer.msg('编辑成功!', { icon: 1 });
|
||||
} else {
|
||||
// 调用新增接口
|
||||
await getAdditionCreate(formData);
|
||||
layer.msg('新增成功!', { icon: 1 });
|
||||
}
|
||||
showForm.value = false;
|
||||
getAdditionList();
|
||||
} catch (error) {
|
||||
layer.msg('操作失败!', { icon: 2 });
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
text: "取消",
|
||||
callback: () => {
|
||||
showForm.value = false
|
||||
}
|
||||
}
|
||||
])
|
||||
|
||||
// 考评项目列表
|
||||
const evaluationItems = [
|
||||
{ value: 1, label: '工作表现优异' },
|
||||
{ value: 2, label: '迟到' },
|
||||
{ value: 3, label: '加班' },
|
||||
{ value: 4, label: '工作失误' }
|
||||
]
|
||||
// 添加搜索方法
|
||||
const search = () => {
|
||||
page.current = 1;
|
||||
dataSource.value = [];
|
||||
getAdditionList()
|
||||
}
|
||||
|
||||
// 证明人列表
|
||||
const witnessList = [
|
||||
{ value: 1, label: '张主任' },
|
||||
{ value: 2, label: '王经理' },
|
||||
{ value: 3, label: '李组长' }
|
||||
]
|
||||
// 重置搜索
|
||||
const resetSearch = () => {
|
||||
searchForm.status = '';
|
||||
// 重新获取所有数据
|
||||
getAdditionList()
|
||||
}
|
||||
|
||||
|
||||
// 分页变化处理
|
||||
const change = ({ current, limit }: { current: number, limit: number }) => {
|
||||
page.current = current
|
||||
page.limit = limit
|
||||
// getListData() // 重新获取数据
|
||||
}
|
||||
|
||||
|
||||
const maxInput = reactive({
|
||||
single_score_max:10,
|
||||
single_score_min:0,
|
||||
});
|
||||
|
||||
const getUserList = () => {
|
||||
getDoctorName({}).then((res) => {
|
||||
if (res.code === 1) {
|
||||
userList.value = res.data;
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 表格列定义
|
||||
const columns = [
|
||||
{
|
||||
title: "序号",
|
||||
width: "80px",
|
||||
key: "id"
|
||||
key: "id",
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: "发生时间",
|
||||
width: "160px",
|
||||
key: "occurTime"
|
||||
key: "fsdate",
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: "考评对象",
|
||||
width: "120px",
|
||||
key: "targetPerson"
|
||||
key: "nickname",
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: "考评类型",
|
||||
width: "100px",
|
||||
key: "evaluationType",
|
||||
render: (data: any) => data.evaluationType === 1 ? '加分' : '减分'
|
||||
key: "assessment_type",
|
||||
align: 'center',
|
||||
customSlot: 'assessment_type'
|
||||
},
|
||||
{
|
||||
title: "考评项",
|
||||
width: "150px",
|
||||
key: "evaluationItem"
|
||||
key: "project_name",
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: "分值",
|
||||
width: "80px",
|
||||
key: "score"
|
||||
},
|
||||
{
|
||||
title: "填报人",
|
||||
width: "100px",
|
||||
key: "reporter"
|
||||
key: "score_value",
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: "记录状态",
|
||||
width: "100px",
|
||||
customSlot: 'status',
|
||||
key: "status"
|
||||
key: "status",
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
@ -214,125 +452,46 @@ const openNew = () => {
|
||||
}
|
||||
|
||||
const editRecord = (data: any) => {
|
||||
isEdit.value = true
|
||||
Object.assign(formData, data)
|
||||
showForm.value = true
|
||||
isEdit.value = true; // 设置为编辑状态
|
||||
formData.id = data.id; // 复制记录的 ID
|
||||
formData.user_id = data.user_id; // 复制考评对象
|
||||
formData.assessment_type = data.assessment_type; // 复制考评类型
|
||||
formData.assessment_project = data.assessment_project; // 复制考评项目
|
||||
formData.score_value = data.score_value; // 复制分值
|
||||
formData.fsdate = data.fsdate; // 复制发生时间
|
||||
formData.zm_user_id = data.zm_user_id; // 复制证明人
|
||||
formData.fj_url = data.fj_url; // 复制附件 URL
|
||||
formData.notes = data.notes; // 复制备注
|
||||
showForm.value = true; // 显示表单
|
||||
}
|
||||
|
||||
const showDetail = (data: any) => {
|
||||
layer.msg('查看详情:' + JSON.stringify(data))
|
||||
detailData.value = data
|
||||
showDetailDialog.value = true
|
||||
}
|
||||
|
||||
const deleteRecord = async (data: any) => {
|
||||
layer.msg('删除成功!', { icon: 1 })
|
||||
// 实际项目中这里需要调用删除API
|
||||
try {
|
||||
await getAdditionDelete({id: data.id}); // 调用删除接口
|
||||
layer.msg('删除成功!', { icon: 1 });
|
||||
} catch (error) {
|
||||
layer.msg('删除失败!', { icon: 2 });
|
||||
}
|
||||
getAdditionList()
|
||||
}
|
||||
|
||||
const resetForm = () => {
|
||||
formData.id = 0
|
||||
formData.targetPerson = ''
|
||||
formData.evaluationType = 1
|
||||
formData.evaluationItem = ''
|
||||
formData.score = 0
|
||||
formData.occurTime = ''
|
||||
formData.witness = ''
|
||||
formData.attachment = []
|
||||
formData.remark = ''
|
||||
}
|
||||
|
||||
// 表单按钮定义
|
||||
const formButtons = ref([
|
||||
{
|
||||
text: "确认",
|
||||
callback: async () => {
|
||||
if (!formData.targetPerson) {
|
||||
layer.msg('考评对象不能为空!', { icon: 2 })
|
||||
return
|
||||
}
|
||||
// 实际项目中这里需要调用保存API
|
||||
layer.msg('提交成功!', { icon: 1 })
|
||||
showForm.value = false
|
||||
}
|
||||
},
|
||||
{
|
||||
text: "取消",
|
||||
callback: () => {
|
||||
showForm.value = false
|
||||
}
|
||||
}
|
||||
])
|
||||
|
||||
// 添加搜索表单数据
|
||||
const searchForm = reactive({
|
||||
status: undefined as number | undefined
|
||||
})
|
||||
|
||||
// 添加搜索方法
|
||||
const search = () => {
|
||||
// 实际项目中这里需要调用搜索API
|
||||
console.log('搜索条件:', searchForm)
|
||||
// 模拟搜索效果
|
||||
if (searchForm.status) {
|
||||
dataSource.value = dataSource.value.filter(item => item.status === searchForm.status)
|
||||
} else {
|
||||
// 重新获取所有数据
|
||||
getListData()
|
||||
}
|
||||
}
|
||||
|
||||
// 重置搜索
|
||||
const resetSearch = () => {
|
||||
searchForm.status = undefined
|
||||
// 重新获取所有数据
|
||||
getListData()
|
||||
}
|
||||
|
||||
// 分页配置
|
||||
const page = reactive({
|
||||
total: 100, // 总条数
|
||||
current: 1, // 当前页
|
||||
limit: 10, // 每页条数
|
||||
showRefresh: true, // 显示刷新按钮
|
||||
showLimit: true // 显示条数选择器
|
||||
})
|
||||
|
||||
// 分页变化处理
|
||||
const change = ({ current, limit }: { current: number, limit: number }) => {
|
||||
page.current = current
|
||||
page.limit = limit
|
||||
getListData() // 重新获取数据
|
||||
}
|
||||
|
||||
// 修改 getListData 方法
|
||||
const getListData = () => {
|
||||
// 实际项目中这里需要调用API并传入分页参数
|
||||
// 例如: { page: page.current, limit: page.limit }
|
||||
|
||||
// 模拟数据
|
||||
dataSource.value = [
|
||||
{
|
||||
id: 1,
|
||||
occurTime: '2024-03-15 14:30',
|
||||
targetPerson: '张三',
|
||||
evaluationType: 1,
|
||||
evaluationItem: '工作表现优异',
|
||||
score: 5,
|
||||
reporter: '李四',
|
||||
status: 1
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
occurTime: '2024-03-14 09:15',
|
||||
targetPerson: '王五',
|
||||
evaluationType: 2,
|
||||
evaluationItem: '迟到',
|
||||
score: -2,
|
||||
reporter: '李四',
|
||||
status: 2
|
||||
}
|
||||
]
|
||||
page.total = 100 // 设置总条数
|
||||
formData.user_id = ''
|
||||
formData.assessment_type = 1
|
||||
formData.assessment_project = ''
|
||||
formData.score_value = 0
|
||||
formData.fsdate = ''
|
||||
formData.zm_user_id = ''
|
||||
formData.fj_url = ''
|
||||
formData.notes = ''
|
||||
}
|
||||
const userStore = useUserStore();
|
||||
</script>
|
||||
|
||||
<style>
|
||||
@ -344,4 +503,22 @@ const getListData = () => {
|
||||
.layui-inline {
|
||||
margin-right: 15px;
|
||||
}
|
||||
</style>
|
||||
|
||||
.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>
|
@ -1,102 +1,168 @@
|
||||
<template>
|
||||
<lay-container fluid="true" style="padding: 20px">
|
||||
<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" v-model="searchForm.year" placeholder="请选择"
|
||||
allow-clear></lay-date-picker>
|
||||
</lay-form-item>
|
||||
</lay-col>
|
||||
<lay-col :md="5">
|
||||
<lay-form-item label="发生时间:" label-width="80">
|
||||
<lay-date-picker v-model="searchForm.occurDate" placeholder="请选择"
|
||||
allow-clear></lay-date-picker>
|
||||
</lay-form-item>
|
||||
</lay-col>
|
||||
<lay-col :md="5">
|
||||
<lay-form-item label="考评对象:" label-width="80">
|
||||
<lay-input v-model="searchForm.evaluateObject" placeholder="请输入"></lay-input>
|
||||
</lay-form-item>
|
||||
</lay-col>
|
||||
<lay-col :md="5">
|
||||
<lay-form-item label="审核状态:" label-width="80">
|
||||
<lay-select 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 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>
|
||||
<lay-button type="primary" size="sm" @click="openAdd">新增</lay-button>
|
||||
<lay-button type="primary" size="sm">导出Excel</lay-button>
|
||||
</div>
|
||||
<lay-table :columns="columns" :dataSource="dataSource" :even="true" height="500px" size="md">
|
||||
<template v-slot:checkbox="{ data }">
|
||||
<lay-checkbox v-model="data.checked"></lay-checkbox>
|
||||
</template>
|
||||
</lay-table>
|
||||
</lay-card>
|
||||
</lay-col>
|
||||
</lay-row>
|
||||
<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">
|
||||
<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>
|
||||
<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">
|
||||
<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">待审核</lay-tag>
|
||||
<lay-tag v-if="data.status == 2" type="primary">已通过</lay-tag>
|
||||
<lay-tag v-if="data.status == 3" type="danger">已驳回</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>
|
||||
</template>
|
||||
</lay-table>
|
||||
</lay-card>
|
||||
</lay-col>
|
||||
</lay-row>
|
||||
</div>
|
||||
</div>
|
||||
</lay-container>
|
||||
|
||||
<!-- 新增/编辑弹窗 -->
|
||||
<lay-layer v-model="visible" :title="formTitle" :area="['600px', '80%']" :shade="true">
|
||||
<lay-layer v-model="visible" :title="formTitle" :type="4" :area="['950px', '100%']" :shade="true">
|
||||
<div style="padding: 20px">
|
||||
<lay-form :model="form">
|
||||
<lay-form :model="form" mode="inline">
|
||||
<lay-form-item label="考评对象" required>
|
||||
<lay-input v-model="form.evaluateObject"></lay-input>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="人员编号" required>
|
||||
<lay-input v-model="form.staffNo"></lay-input>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="科室" required>
|
||||
<lay-input v-model="form.department"></lay-input>
|
||||
<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">
|
||||
</lay-select-option>
|
||||
</lay-select>
|
||||
</lay-form-item>
|
||||
<!-- <lay-form-item label="科室" required>
|
||||
<lay-cascader v-model="form.group_id" :options="ksOptions" placeholder="请选择科室"
|
||||
:checkStrictly="false" search :replaceFields="replaceFields">
|
||||
</lay-cascader>
|
||||
</lay-form-item> -->
|
||||
<lay-form-item label="发生日期" required>
|
||||
<lay-date-picker v-model="form.occurDate"></lay-date-picker>
|
||||
<lay-date-picker v-model="form.fsdate" placeholder="请选择发生日期"></lay-date-picker>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="证明人" required>
|
||||
<lay-input v-model="form.witness"></lay-input>
|
||||
<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-input style="width: 220px" v-model="form.bq_name" placeholder="请输入病区名称"></lay-input>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="患者姓名" required>
|
||||
<lay-input v-model="form.patientName"></lay-input>
|
||||
<lay-input style="width: 220px" v-model="form.hz_name" placeholder="请输入患者姓名"></lay-input>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="退还金额" required>
|
||||
<lay-input-number v-model="form.refundAmount"></lay-input-number>
|
||||
<lay-input-number style="width: 220px" v-model="form.refunding_amount"
|
||||
placeholder="请输入退还金额"></lay-input-number>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="退还日期" required>
|
||||
<lay-date-picker v-model="form.refundDate"></lay-date-picker>
|
||||
<lay-date-picker v-model="form.thdate" placeholder="请选择退还日期"></lay-date-picker>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="退还方式" required>
|
||||
<lay-select v-model="form.refundType">
|
||||
<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>
|
||||
</lay-select>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="附件">
|
||||
<lay-upload></lay-upload>
|
||||
<lay-form-item label="附件" mode="block">
|
||||
<lay-upload ref="uploadRef" :number="1" field="file" :size="1000"
|
||||
:headers="{ token: userStore.token }" url="/api/api/common/upload" @cutdone="getCutDone"
|
||||
v-model="file1" :auto="true" :cut="false" :cutOptions="cutOptions" @done="getFileDone">
|
||||
<template #preview>
|
||||
<a v-if="form.fj_url" style="color: #009688" :href="form.fj_url" target="_blank">
|
||||
{{ form.fj_url }}
|
||||
</a>
|
||||
</template>
|
||||
</lay-upload>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="备注">
|
||||
<lay-textarea v-model="form.remark"></lay-textarea>
|
||||
<lay-form-item label="备注" mode="block">
|
||||
<lay-textarea v-model="form.notes" placeholder="请输入备注信息"></lay-textarea>
|
||||
</lay-form-item>
|
||||
</lay-form>
|
||||
<div style="text-align: center; margin-top: 20px;">
|
||||
@ -105,137 +171,494 @@
|
||||
</div>
|
||||
</div>
|
||||
</lay-layer>
|
||||
|
||||
<!-- 修改详情弹窗内容 -->
|
||||
<lay-layer v-model="detailVisible" title="详情查看" :type="4" :area="['950px', '100%']" :shade="true">
|
||||
<div style="padding: 20px">
|
||||
<lay-descriptions title="基本信息" :column="2" border>
|
||||
<lay-descriptions-item label="考评对象">
|
||||
<lay-tag size="small" type="primary">{{ detailForm.nickname }}</lay-tag>
|
||||
</lay-descriptions-item>
|
||||
<lay-descriptions-item label="科室">
|
||||
<lay-tag size="small" type="normal">{{ detailForm.group_name }}</lay-tag>
|
||||
</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>
|
||||
</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="退还金额">
|
||||
<lay-tag size="small" type="danger">¥{{ detailForm.refunding_amount }}</lay-tag>
|
||||
</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>
|
||||
</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>
|
||||
|
||||
<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>
|
||||
|
||||
<div style="text-align: center; margin-top: 20px;">
|
||||
<lay-button @click="detailVisible = false">关闭</lay-button>
|
||||
</div>
|
||||
</div>
|
||||
</lay-layer>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
import { onMounted, reactive, ref } from 'vue'
|
||||
import dayjs from "dayjs";
|
||||
|
||||
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({
|
||||
year: dayjs().year(),
|
||||
occurDate: '',
|
||||
evaluateObject: '',
|
||||
fsdate: '',
|
||||
user_id: '',
|
||||
status: ''
|
||||
})
|
||||
|
||||
// 表格列配置
|
||||
// 修改分页参数的定义方式
|
||||
const page = reactive({
|
||||
current: 1,
|
||||
limit: 10,
|
||||
total: 1
|
||||
})
|
||||
const cutOptions = {
|
||||
copperOption: {
|
||||
center: false,
|
||||
aspectRatio: 1,
|
||||
}
|
||||
}
|
||||
const cutUrl = ref("");
|
||||
const uploadRef = ref(null)
|
||||
const file1 = ref([]);
|
||||
const getCutDone = (res) => {
|
||||
console.log("getCutDone", res);
|
||||
cutUrl.value = res.msg;
|
||||
};
|
||||
const getFileDone = (res) => {
|
||||
var date = JSON.parse(res.data);
|
||||
console.log("getFileDone", date);
|
||||
form.value.fj_url = date.data.fullurl;
|
||||
//uploadRef.value.submit()
|
||||
};
|
||||
// 添加级联选择器所需的数据结构
|
||||
const ksOptions = ref([])
|
||||
const replaceFields = {
|
||||
label: 'name',
|
||||
value: 'id',
|
||||
children: 'children'
|
||||
}
|
||||
// 修改获取用户列表方法为懒加载方法
|
||||
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: '50px',
|
||||
customSlot: 'checkbox'
|
||||
},
|
||||
{
|
||||
title: '序号',
|
||||
width: '80px',
|
||||
key: 'index'
|
||||
width: '90px',
|
||||
key: 'id',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '发生日期',
|
||||
width: '120px',
|
||||
key: 'occurDate'
|
||||
key: 'fsdate',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '考评对象',
|
||||
width: '120px',
|
||||
key: 'evaluateObject'
|
||||
},
|
||||
{
|
||||
title: '工号',
|
||||
width: '100px',
|
||||
key: 'staffNo'
|
||||
key: 'nickname',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '科室',
|
||||
width: '120px',
|
||||
key: 'department'
|
||||
key: 'group_name',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '病区',
|
||||
width: '120px',
|
||||
key: 'bq_name',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '患者姓名',
|
||||
width: '120px',
|
||||
key: 'patientName'
|
||||
key: 'hz_name',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '退还金额',
|
||||
width: '100px',
|
||||
key: 'refundAmount'
|
||||
width: '120px',
|
||||
key: 'refunding_amount',
|
||||
align: 'center',
|
||||
customSlot: 'refundAmount'
|
||||
},
|
||||
{
|
||||
title: '退还日期',
|
||||
width: '120px',
|
||||
key: 'refundDate'
|
||||
key: 'thdate',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
title: '退还方式',
|
||||
width: '100px',
|
||||
key: 'refundType'
|
||||
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 dataSource = ref([])
|
||||
|
||||
// 弹窗控制
|
||||
const visible = ref(false)
|
||||
const formTitle = ref('新增拒收红包')
|
||||
|
||||
// 表单数据
|
||||
// 修改表单数据定义
|
||||
const form = ref({
|
||||
evaluateObject: '',
|
||||
staffNo: '',
|
||||
department: '',
|
||||
occurDate: '',
|
||||
witness: '',
|
||||
patientName: '',
|
||||
refundAmount: 0,
|
||||
refundDate: '',
|
||||
refundType: '',
|
||||
remark: ''
|
||||
user_id: '',
|
||||
group_id: [] as (string | number)[],
|
||||
fsdate: '',
|
||||
zm_user_id: '',
|
||||
hz_name: '',
|
||||
bq_name: '',
|
||||
refunding_amount: 0,
|
||||
thdate: '',
|
||||
refunding_type: '',
|
||||
fj_url: '',
|
||||
notes: ''
|
||||
})
|
||||
|
||||
// 添加编辑状态标识
|
||||
const isEdit = ref(false)
|
||||
const editId = ref('')
|
||||
|
||||
// 搜索方法
|
||||
const toSearch = () => {
|
||||
// TODO: 实现搜索逻辑
|
||||
page.current = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
// 重置方法
|
||||
const toReset = () => {
|
||||
searchForm.value = {
|
||||
year: dayjs().year(),
|
||||
occurDate: '',
|
||||
evaluateObject: '',
|
||||
fsdate: '',
|
||||
user_id: '',
|
||||
status: ''
|
||||
}
|
||||
page.current = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
// 打开新增弹窗
|
||||
const openAdd = () => {
|
||||
console.log(userStore.userInfo);
|
||||
formTitle.value = '新增拒收红包'
|
||||
isEdit.value = false
|
||||
editId.value = ''
|
||||
form.value = {
|
||||
evaluateObject: '',
|
||||
staffNo: '',
|
||||
department: '',
|
||||
occurDate: '',
|
||||
witness: '',
|
||||
patientName: '',
|
||||
refundAmount: 0,
|
||||
refundDate: '',
|
||||
refundType: '',
|
||||
remark: ''
|
||||
user_id: userStore.userInfo.id,
|
||||
group_id: '',
|
||||
fsdate: '',
|
||||
zm_user_id: '',
|
||||
hz_name: '',
|
||||
bq_name: '',
|
||||
refunding_amount: 0,
|
||||
thdate: '',
|
||||
refunding_type: '',
|
||||
fj_url: '',
|
||||
notes: ''
|
||||
}
|
||||
visible.value = true
|
||||
}
|
||||
|
||||
// 提交表单
|
||||
// 修改提交表单方法
|
||||
const submitForm = () => {
|
||||
// TODO: 实现表单提交逻辑
|
||||
visible.value = false
|
||||
if (!form.value.user_id) {
|
||||
layer.msg('请选择考评对象', { icon: 2 })
|
||||
return
|
||||
}
|
||||
if (!form.value.fsdate) {
|
||||
layer.msg('请选择发生日期', { icon: 2 })
|
||||
return
|
||||
}
|
||||
if (!form.value.zm_user_id) {
|
||||
layer.msg('请选择证明人', { icon: 2 })
|
||||
return
|
||||
}
|
||||
if (!form.value.hz_name) {
|
||||
layer.msg('请输入患者姓名', { icon: 2 })
|
||||
return
|
||||
}
|
||||
if (!form.value.refunding_amount) {
|
||||
layer.msg('请输入退还金额', { icon: 2 })
|
||||
return
|
||||
}
|
||||
if (!form.value.thdate) {
|
||||
layer.msg('请选择退还日期', { icon: 2 })
|
||||
return
|
||||
}
|
||||
if (!form.value.refunding_type) {
|
||||
layer.msg('请选择退还方式', { icon: 2 })
|
||||
return
|
||||
}
|
||||
|
||||
const params = {
|
||||
...form.value,
|
||||
// 获取级联选择器最后一个选中值
|
||||
group_id: userStore.userInfo.group_id
|
||||
}
|
||||
|
||||
const submitRequest = rejectRedEnvelopesCreate(params);
|
||||
|
||||
submitRequest.then(res => {
|
||||
if (res.code === 1) {
|
||||
layer.msg('新增成功', { icon: 1 })
|
||||
visible.value = false
|
||||
getList()
|
||||
} else {
|
||||
layer.msg(res.msg, { icon: 2 })
|
||||
}
|
||||
})
|
||||
}
|
||||
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
|
||||
getList()
|
||||
}
|
||||
|
||||
// 添加每页条数变化处理方法
|
||||
const handleLimitChange = (limit: number) => {
|
||||
page.current = 1
|
||||
page.limit = limit
|
||||
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({
|
||||
nickname: '',
|
||||
group_name: '',
|
||||
fsdate: '',
|
||||
zm_user_name: '',
|
||||
bq_name: '',
|
||||
hz_name: '',
|
||||
refunding_amount: '',
|
||||
thdate: '',
|
||||
refunding_type: '',
|
||||
status: '',
|
||||
fj_url: '',
|
||||
notes: ''
|
||||
})
|
||||
|
||||
// 打开详情弹窗
|
||||
const openDetail = (data: any) => {
|
||||
detailForm.value = { ...data }
|
||||
detailVisible.value = true
|
||||
}
|
||||
|
||||
// 添加获取左侧科室列表的方法
|
||||
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();
|
||||
})
|
||||
</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>
|
||||
|
@ -77,9 +77,13 @@ const openNew = () => {
|
||||
}
|
||||
const getHierarchicalData = async () => {
|
||||
// 调用接口获取数据
|
||||
// const res = await api.getList(page.current, page.limit)
|
||||
// dataSource6.value = res.data.list
|
||||
// page.total = res.data.total
|
||||
userGroupData({}).then((res) => {
|
||||
if (res.code === 1) {
|
||||
dataSource6.value = res.data;
|
||||
} else {
|
||||
layer.msg(res.msg, { icon: 2 })
|
||||
}
|
||||
})
|
||||
}
|
||||
const addShowMsd = (data, pid) => {
|
||||
console.log(data);
|
||||
|
@ -47,6 +47,11 @@
|
||||
<template v-slot:password="{ data }">
|
||||
{{ data.password }}
|
||||
</template>
|
||||
<template v-slot:level="{ data }">
|
||||
<span :style="{ color: data.level == 1 ? '#1E9FFF' : '#FF5722' }">
|
||||
{{ data.level == 1 ? '有审核权限' : '没有审核权限' }}
|
||||
</span>
|
||||
</template>
|
||||
<template v-slot:operator="{ data }">
|
||||
<lay-space>
|
||||
<span v-if="data.id!=1" style="color: #00A394;cursor: pointer" @click="editDo(data)">编辑</span>
|
||||
@ -71,6 +76,12 @@
|
||||
<lay-form-item label="角色描述" prop="desc">
|
||||
<lay-textarea placeholder="请输入角色描述" v-model="addData.describe"></lay-textarea>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="审核权限" prop="level">
|
||||
<lay-radio-group v-model="addData.level">
|
||||
<lay-radio value="1">有审核权限</lay-radio>
|
||||
<lay-radio value="2">没有审核权限</lay-radio>
|
||||
</lay-radio-group>
|
||||
</lay-form-item>
|
||||
<lay-form-item label="角色权限" prop="desc">
|
||||
<lay-tree
|
||||
:default-expand-all="true"
|
||||
@ -82,6 +93,7 @@
|
||||
:replaceFields="replaceFields">
|
||||
</lay-tree>
|
||||
</lay-form-item>
|
||||
|
||||
</lay-form>
|
||||
</lay-container>
|
||||
</lay-layer>
|
||||
@ -101,7 +113,9 @@ import {
|
||||
const addData = reactive({
|
||||
name: '',
|
||||
describe: '',
|
||||
rules: []
|
||||
rules: [],
|
||||
level: 2,
|
||||
id: 0
|
||||
})
|
||||
const addIsEdit = ref(1)
|
||||
onMounted(() => {
|
||||
@ -114,6 +128,7 @@ const openAdd = () => {
|
||||
addData.name = '';
|
||||
addData.describe = '';
|
||||
addData.rules = [];
|
||||
addData.level = 2;
|
||||
}
|
||||
const editDo = (data) => {
|
||||
console.log(data);
|
||||
@ -122,6 +137,7 @@ const editDo = (data) => {
|
||||
addData.describe = data.describe;
|
||||
addData.rules = data.rules.split(',').map(Number);
|
||||
addData.id = data.id;
|
||||
addData.level = data.level;
|
||||
console.log(addData.rules)
|
||||
addIsEdit.value = 2;
|
||||
}
|
||||
@ -224,6 +240,13 @@ const columns = [
|
||||
width: '150px',
|
||||
key: 'describe'
|
||||
},
|
||||
{
|
||||
title: '审核权限',
|
||||
width: '100px',
|
||||
customSlot: 'level',
|
||||
align: 'center',
|
||||
key: 'level'
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
width: '180px',
|
||||
|
@ -2,6 +2,7 @@
|
||||
<lay-container fluid="true" class="organization-box">
|
||||
<div style="display: flex">
|
||||
<div :style="{ width: isFold ? `0px` : `230px` }" class="left-tree">
|
||||
<div v-if="!isFold">科室列表</div>
|
||||
<lay-tree v-show="!isFold" style="margin-top: 10px" :data="data" v-model:selectedKey="group_id"
|
||||
:showLine="false" @node-click="handleClick">
|
||||
<template #title="{ data }">
|
||||
|
@ -20,7 +20,7 @@ export default defineConfig({
|
||||
server: {
|
||||
proxy: {
|
||||
'/api': {
|
||||
target: 'http://192.168.10.124/',
|
||||
target: 'http://192.168.10.140/',
|
||||
changeOrigin: true,
|
||||
rewrite: (path) => path.replace(/^\/api/, '')
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user