3.11
This commit is contained in:
		
							parent
							
								
									a0070aa65d
								
							
						
					
					
						commit
						fce1e1b5f4
					
				
							
								
								
									
										6
									
								
								components.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								components.d.ts
									
									
									
									
										vendored
									
									
								
							@ -7,7 +7,6 @@ export {}
 | 
				
			|||||||
/* prettier-ignore */
 | 
					/* prettier-ignore */
 | 
				
			||||||
declare module 'vue' {
 | 
					declare module 'vue' {
 | 
				
			||||||
  export interface GlobalComponents {
 | 
					  export interface GlobalComponents {
 | 
				
			||||||
    LayBadge: typeof import('@layui/layui-vue')['LayBadge']
 | 
					 | 
				
			||||||
    LayBody: typeof import('@layui/layui-vue')['LayBody']
 | 
					    LayBody: typeof import('@layui/layui-vue')['LayBody']
 | 
				
			||||||
    LayBreadcrumb: typeof import('@layui/layui-vue')['LayBreadcrumb']
 | 
					    LayBreadcrumb: typeof import('@layui/layui-vue')['LayBreadcrumb']
 | 
				
			||||||
    LayBreadcrumbItem: typeof import('@layui/layui-vue')['LayBreadcrumbItem']
 | 
					    LayBreadcrumbItem: typeof import('@layui/layui-vue')['LayBreadcrumbItem']
 | 
				
			||||||
@ -18,8 +17,6 @@ declare module 'vue' {
 | 
				
			|||||||
    LayCol: typeof import('@layui/layui-vue')['LayCol']
 | 
					    LayCol: typeof import('@layui/layui-vue')['LayCol']
 | 
				
			||||||
    LayConfigProvider: typeof import('@layui/layui-vue')['LayConfigProvider']
 | 
					    LayConfigProvider: typeof import('@layui/layui-vue')['LayConfigProvider']
 | 
				
			||||||
    LayContainer: typeof import('@layui/layui-vue')['LayContainer']
 | 
					    LayContainer: typeof import('@layui/layui-vue')['LayContainer']
 | 
				
			||||||
    LayCountUp: typeof import('@layui/layui-vue')['LayCountUp']
 | 
					 | 
				
			||||||
    LayDate: typeof import('@layui/layui-vue')['LayDate']
 | 
					 | 
				
			||||||
    LayDatePicker: typeof import('@layui/layui-vue')['LayDatePicker']
 | 
					    LayDatePicker: typeof import('@layui/layui-vue')['LayDatePicker']
 | 
				
			||||||
    LayDescriptions: typeof import('@layui/layui-vue')['LayDescriptions']
 | 
					    LayDescriptions: typeof import('@layui/layui-vue')['LayDescriptions']
 | 
				
			||||||
    LayDescriptionsItem: typeof import('@layui/layui-vue')['LayDescriptionsItem']
 | 
					    LayDescriptionsItem: typeof import('@layui/layui-vue')['LayDescriptionsItem']
 | 
				
			||||||
@ -41,9 +38,7 @@ declare module 'vue' {
 | 
				
			|||||||
    LayLogo: typeof import('@layui/layui-vue')['LayLogo']
 | 
					    LayLogo: typeof import('@layui/layui-vue')['LayLogo']
 | 
				
			||||||
    LayMenu: typeof import('@layui/layui-vue')['LayMenu']
 | 
					    LayMenu: typeof import('@layui/layui-vue')['LayMenu']
 | 
				
			||||||
    LayMenuItem: typeof import('@layui/layui-vue')['LayMenuItem']
 | 
					    LayMenuItem: typeof import('@layui/layui-vue')['LayMenuItem']
 | 
				
			||||||
    LayPage: typeof import('@layui/layui-vue')['LayPage']
 | 
					 | 
				
			||||||
    LayPopconfirm: typeof import('@layui/layui-vue')['LayPopconfirm']
 | 
					    LayPopconfirm: typeof import('@layui/layui-vue')['LayPopconfirm']
 | 
				
			||||||
    LayProgress: typeof import('@layui/layui-vue')['LayProgress']
 | 
					 | 
				
			||||||
    LayRadio: typeof import('@layui/layui-vue')['LayRadio']
 | 
					    LayRadio: typeof import('@layui/layui-vue')['LayRadio']
 | 
				
			||||||
    LayRadioGroup: typeof import('@layui/layui-vue')['LayRadioGroup']
 | 
					    LayRadioGroup: typeof import('@layui/layui-vue')['LayRadioGroup']
 | 
				
			||||||
    LayRow: typeof import('@layui/layui-vue')['LayRow']
 | 
					    LayRow: typeof import('@layui/layui-vue')['LayRow']
 | 
				
			||||||
@ -64,6 +59,5 @@ declare module 'vue' {
 | 
				
			|||||||
    LayUpload: typeof import('@layui/layui-vue')['LayUpload']
 | 
					    LayUpload: typeof import('@layui/layui-vue')['LayUpload']
 | 
				
			||||||
    RouterLink: typeof import('vue-router')['RouterLink']
 | 
					    RouterLink: typeof import('vue-router')['RouterLink']
 | 
				
			||||||
    RouterView: typeof import('vue-router')['RouterView']
 | 
					    RouterView: typeof import('vue-router')['RouterView']
 | 
				
			||||||
    WangEditor: typeof import('./src/components/WangEditor/index.vue')['default']
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -9,8 +9,8 @@ type TAxiosOption = {
 | 
				
			|||||||
    headers: object;
 | 
					    headers: object;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
//记得修改上传路径/api/common/upload
 | 
					//记得修改上传路径/api/common/upload
 | 
				
			||||||
//const baseURL = 'http://yfyd.hschool.com.cn'  // 设置基础URL前缀
 | 
					const baseURL = 'http://yfyd.hschool.com.cn'  // 设置基础URL前缀
 | 
				
			||||||
const baseURL="/api";
 | 
					//const baseURL="http://127.0.0.1";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 导出baseURL,使其可以在其他页面使用
 | 
					// 导出baseURL,使其可以在其他页面使用
 | 
				
			||||||
export { baseURL };
 | 
					export { baseURL };
 | 
				
			||||||
 | 
				
			|||||||
@ -347,6 +347,26 @@ export function uploadImage(data: any) {
 | 
				
			|||||||
    return Http.post('/api/common/upload', data)
 | 
					    return Http.post('/api/common/upload', data)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 日志列表
 | 
				
			||||||
 | 
					export function logList(data: any) {
 | 
				
			||||||
 | 
					    return Http.post('/api/backend/Logrecording/index', data)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查询某一个用户所有的月度考评
 | 
				
			||||||
 | 
					export function getMonthlyFindData(data: any) {
 | 
				
			||||||
 | 
					    return Http.post('/api/backend/Monthly/getMonthlyFindData', data)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					// 查询某一个用户所有的季度考评
 | 
				
			||||||
 | 
					export function getQuarterlyFindData(data: any) {
 | 
				
			||||||
 | 
					    return Http.post('/api/backend/Quarter/getQuarterlyFindData', data)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					// 查询某一个用户所有的年度考评
 | 
				
			||||||
 | 
					export function getAnnualFindData(data: any) {
 | 
				
			||||||
 | 
					    return Http.post('/api/backend/Year/getAnnualFindData', data)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
      <div style="padding: 10px">
 | 
					      <div style="padding: 10px">
 | 
				
			||||||
        <span style="font-size: 18px;vertical-align: center;margin-right: 20px">登录日志列表</span>
 | 
					        <span style="font-size: 18px;vertical-align: center;margin-right: 20px">登录日志列表</span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <lay-table size="lg" ref="tableRef" :columns="columns" :data-source="dataSource">
 | 
					      <lay-table  height="600px"  @change="changePage" :page="page" size="lg" ref="tableRef" :columns="columns" :data-source="dataSource">
 | 
				
			||||||
        <template v-slot:event_type="{ data }">
 | 
					        <template v-slot:event_type="{ data }">
 | 
				
			||||||
          <span :style="{ color: data.event_type === '登录' ? '#67C23A' : '#409EFF' }">
 | 
					          <span :style="{ color: data.event_type === '登录' ? '#67C23A' : '#409EFF' }">
 | 
				
			||||||
            {{ data.event_type }}
 | 
					            {{ data.event_type }}
 | 
				
			||||||
@ -16,22 +16,44 @@
 | 
				
			|||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script setup lang="ts">
 | 
					<script setup lang="ts">
 | 
				
			||||||
import { ref, onMounted } from 'vue'
 | 
					import { ref, onMounted, reactive } from 'vue'
 | 
				
			||||||
import { layer } from '@layui/layer-vue'
 | 
					import { layer } from '@layui/layer-vue'
 | 
				
			||||||
 | 
					import { logList } from '@/api/module/home';
 | 
				
			||||||
 | 
					const page = reactive({
 | 
				
			||||||
 | 
					  current: 1,
 | 
				
			||||||
 | 
					  limit: 10,
 | 
				
			||||||
 | 
					  total: 1
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
// 定义接口类型
 | 
					// 定义接口类型
 | 
				
			||||||
interface LoginLog {
 | 
					interface LoginLog {
 | 
				
			||||||
  id: number
 | 
					  id: number
 | 
				
			||||||
  department: string      // 科室
 | 
					  user_id: number
 | 
				
			||||||
  record_time: string    // 记录时间
 | 
					  ip_code: string        // 登录IP
 | 
				
			||||||
  login_name: string     // 登录名
 | 
					  createtime: string     // 记录时间
 | 
				
			||||||
  username: string       // 用户名
 | 
					  content: string        // 事件内容
 | 
				
			||||||
  ip_address: string     // 登录IP
 | 
					  nickname: string       // 用户姓名
 | 
				
			||||||
  event_type: string     // 事件类型(登录/登出)
 | 
					  work_number: string    // 工号
 | 
				
			||||||
  event_content: string  // 事件内容
 | 
					  name: string          // 科室
 | 
				
			||||||
  device_info: string    // 设备信息
 | 
					}
 | 
				
			||||||
 | 
					onMounted(() => {
 | 
				
			||||||
 | 
					  getLogList();
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					// 分页变化
 | 
				
			||||||
 | 
					const changePage = (ppc) => {
 | 
				
			||||||
 | 
					  page.current = ppc.current;
 | 
				
			||||||
 | 
					  page.limit = ppc.limit;
 | 
				
			||||||
 | 
					  getLogList();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					const getLogList = () => {
 | 
				
			||||||
 | 
					  logList({ page: page.current, size: page.limit }).then((res) => {
 | 
				
			||||||
 | 
					    if (res.code === 1) {
 | 
				
			||||||
 | 
					      dataSource.value = res.data.data;
 | 
				
			||||||
 | 
					      page.total = res.data.count;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      layer.msg(res.msg, { icon: 2 })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
// 列表数据
 | 
					// 列表数据
 | 
				
			||||||
const dataSource = ref<LoginLog[]>([])
 | 
					const dataSource = ref<LoginLog[]>([])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -40,44 +62,33 @@ const columns = [
 | 
				
			|||||||
  {
 | 
					  {
 | 
				
			||||||
    title: "科室",
 | 
					    title: "科室",
 | 
				
			||||||
    width: "120px",
 | 
					    width: "120px",
 | 
				
			||||||
    key: "department"
 | 
					    key: "name"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    title: "记录时间",
 | 
					    title: "工号",
 | 
				
			||||||
    width: "180px",
 | 
					 | 
				
			||||||
    key: "record_time"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    title: "登录名",
 | 
					 | 
				
			||||||
    width: "120px",
 | 
					    width: "120px",
 | 
				
			||||||
    key: "login_name"
 | 
					    key: "work_number"
 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    title: "用户名",
 | 
					 | 
				
			||||||
    width: "120px",
 | 
					 | 
				
			||||||
    key: "username"
 | 
					 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    title: "登录IP",
 | 
					    title: "登录IP",
 | 
				
			||||||
    width: "150px",
 | 
					    width: "150px",
 | 
				
			||||||
    key: "ip_address"
 | 
					    key: "ip_code"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    title: "事件类型",
 | 
					    title: "用户姓名",
 | 
				
			||||||
    width: "100px",
 | 
					    width: "120px",
 | 
				
			||||||
    key: "event_type",
 | 
					    key: "nickname"
 | 
				
			||||||
    customSlot: 'event_type'
 | 
					 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    title: "事件内容",
 | 
					    title: "事件内容",
 | 
				
			||||||
    width: "200px",
 | 
					    width: "200px",
 | 
				
			||||||
    key: "event_content"
 | 
					    key: "content"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    title: "设备信息",
 | 
					    title: "记录时间",
 | 
				
			||||||
    width: "250px",
 | 
					    width: "180px",
 | 
				
			||||||
    key: "device_info"
 | 
					    key: "createtime"
 | 
				
			||||||
  }
 | 
					  },
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
onMounted(() => {
 | 
					onMounted(() => {
 | 
				
			||||||
@ -99,14 +110,13 @@ const getLoginLogs = () => {
 | 
				
			|||||||
  dataSource.value = [
 | 
					  dataSource.value = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      id: 1,
 | 
					      id: 1,
 | 
				
			||||||
      department: '内科',
 | 
					      user_id: 10,
 | 
				
			||||||
      record_time: '2024-03-20 10:30:45',
 | 
					      ip_code: '192.168.1.100',
 | 
				
			||||||
      login_name: 'admin',
 | 
					      createtime: '2024-03-20 10:30:45',
 | 
				
			||||||
      username: '管理员',
 | 
					      content: '用户登录成功',
 | 
				
			||||||
      ip_address: '192.168.1.100',
 | 
					      nickname: '张三',
 | 
				
			||||||
      event_type: '登录',
 | 
					      work_number: '111111',
 | 
				
			||||||
      event_content: '用户登录成功',
 | 
					      name: '大腿骨折2'
 | 
				
			||||||
      device_info: 'Chrome 122.0.0.0 / Windows 10'
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      id: 2,
 | 
					      id: 2,
 | 
				
			||||||
 | 
				
			|||||||
@ -12,7 +12,7 @@
 | 
				
			|||||||
            height="600px" 
 | 
					            height="600px" 
 | 
				
			||||||
            :columns="columns" 
 | 
					            :columns="columns" 
 | 
				
			||||||
            :data-source="dataSource" 
 | 
					            :data-source="dataSource" 
 | 
				
			||||||
            @page-change="changePage"
 | 
					            @change="changePage"
 | 
				
			||||||
          >
 | 
					          >
 | 
				
			||||||
          <template v-slot:content="{ data }">
 | 
					          <template v-slot:content="{ data }">
 | 
				
			||||||
         <div v-html="data.content"></div>
 | 
					         <div v-html="data.content"></div>
 | 
				
			||||||
@ -75,7 +75,6 @@ const columns = [
 | 
				
			|||||||
    title: "公告内容",
 | 
					    title: "公告内容",
 | 
				
			||||||
    width: "280px",
 | 
					    width: "280px",
 | 
				
			||||||
    key: "content",
 | 
					    key: "content",
 | 
				
			||||||
    customSlot: 'content',
 | 
					 | 
				
			||||||
    ellipsisTooltip: true
 | 
					    ellipsisTooltip: true
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
@ -113,8 +112,9 @@ const getNoticeList = () => {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 分页变化
 | 
					// 分页变化
 | 
				
			||||||
const changePage = (currentPage: number) => {
 | 
					const changePage = (ppc) => {
 | 
				
			||||||
  page.current = currentPage;
 | 
					  page.current = ppc.current;
 | 
				
			||||||
 | 
					  page.limit = ppc.limit;
 | 
				
			||||||
  getNoticeList();
 | 
					  getNoticeList();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -22,8 +22,7 @@
 | 
				
			|||||||
            <lay-row>
 | 
					            <lay-row>
 | 
				
			||||||
              <lay-col :md="5">
 | 
					              <lay-col :md="5">
 | 
				
			||||||
                <lay-form-item label="月度" label-width="80">
 | 
					                <lay-form-item label="月度" label-width="80">
 | 
				
			||||||
                  <lay-date-picker type="yearmonth" v-model="yearmonth" placeholder="月度"
 | 
					                  <lay-date-picker type="yearmonth" v-model="yearmonth" placeholder="月度" allow-clear></lay-date-picker>
 | 
				
			||||||
                                   allow-clear></lay-date-picker>
 | 
					 | 
				
			||||||
                </lay-form-item>
 | 
					                </lay-form-item>
 | 
				
			||||||
              </lay-col>
 | 
					              </lay-col>
 | 
				
			||||||
              <!--              <lay-col :md="5">-->
 | 
					              <!--              <lay-col :md="5">-->
 | 
				
			||||||
@ -55,18 +54,24 @@
 | 
				
			|||||||
        </lay-card>
 | 
					        </lay-card>
 | 
				
			||||||
        <lay-tab v-model="tab_id" type="brief" @change="openTab">
 | 
					        <lay-tab v-model="tab_id" type="brief" @change="openTab">
 | 
				
			||||||
          <lay-tab-item v-for="item in tabList" :title="item.title" :id="item.id">
 | 
					          <lay-tab-item v-for="item in tabList" :title="item.title" :id="item.id">
 | 
				
			||||||
            <lay-table :page="page" height="600px" :columns="columns" :loading="loading"
 | 
					            <lay-table :page="page" height="600px" :columns="columns" :loading="loading" :data-source="dataSource"
 | 
				
			||||||
                       :data-source="dataSource" v-model:selected-keys="selectedKeys" @change="change">
 | 
					              v-model:selected-keys="selectedKeys" @change="change">
 | 
				
			||||||
              <template v-slot:scoringrecord_status="{row}">
 | 
					              <template v-slot:scoringrecord_status="{ row }">
 | 
				
			||||||
                <lay-tag v-if="row.scoringrecord_status==1" type="primary">已自评</lay-tag>
 | 
					                <lay-tag v-if="row.scoringrecord_status == 1" type="primary">已自评</lay-tag>
 | 
				
			||||||
                <lay-tag v-if="row.scoringrecord_status==2">未自评</lay-tag>
 | 
					                <lay-tag v-if="row.scoringrecord_status == 2">未自评</lay-tag>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
 | 
					              <template v-slot:nickname="{ row }">
 | 
				
			||||||
 | 
					                <div style="color: #00A394;cursor: pointer" @click="openUserListShow(row)">{{ row.nickname }}</div>
 | 
				
			||||||
              </template>
 | 
					              </template>
 | 
				
			||||||
              <template v-slot:operator="{ row }">
 | 
					              <template v-slot:operator="{ row }">
 | 
				
			||||||
                <span style="color: #00A394;cursor: pointer" v-if="row.department_score_scoringrecord==0 && row.scoringrecord_status==1"
 | 
					                <span style="color: #00A394;cursor: pointer"
 | 
				
			||||||
                      @click="getInfo(row,1)">科室评分</span>
 | 
					                  v-if="row.department_score_scoringrecord == 0 && row.scoringrecord_status == 1"
 | 
				
			||||||
                <span style="color: #00A394;cursor: pointer" v-if="row.department_score_scoringrecord!=0 && row.scoringrecord_status==1"
 | 
					                  @click="getInfo(row, 1)">科室评分</span>
 | 
				
			||||||
                      @click="getInfo(row,2)">考评详情</span>
 | 
					                <span style="color: #00A394;cursor: pointer"
 | 
				
			||||||
                <span style="color: #999999;cursor: not-allowed" v-if="row.department_score_scoringrecord==0 && row.scoringrecord_status==2">考评详情</span>
 | 
					                  v-if="row.department_score_scoringrecord != 0 && row.scoringrecord_status == 1"
 | 
				
			||||||
 | 
					                  @click="getInfo(row, 2)">考评详情</span>
 | 
				
			||||||
 | 
					                <span style="color: #999999;cursor: not-allowed"
 | 
				
			||||||
 | 
					                  v-if="row.department_score_scoringrecord == 0 && row.scoringrecord_status == 2">未自评</span>
 | 
				
			||||||
              </template>
 | 
					              </template>
 | 
				
			||||||
            </lay-table>
 | 
					            </lay-table>
 | 
				
			||||||
          </lay-tab-item>
 | 
					          </lay-tab-item>
 | 
				
			||||||
@ -74,45 +79,135 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <lay-layer v-model="infoShow" title="自评详情" :type="4" :shade="true" :area="['950px','100%']"
 | 
					    <lay-layer v-model="infoShow" title="自评详情" :type="4" :shade="true" :area="['950px', '100%']"
 | 
				
			||||||
               :btn="addIsInfo==1?addButton:''">
 | 
					      :btn="addIsInfo == 1 ? addButton : ''">
 | 
				
			||||||
      <lay-container fluid="true" style="padding: 20px">
 | 
					      <lay-container fluid="true" style="padding: 20px">
 | 
				
			||||||
        <lay-table :default-expand-all="true" ref="tableRef6" children-column-name="children" :columns="columns6"
 | 
					        <lay-table :default-expand-all="true" ref="tableRef6" children-column-name="children" :columns="columns6"
 | 
				
			||||||
          :data-source="dataSource6">
 | 
					          :data-source="dataSource6">
 | 
				
			||||||
          <template v-slot:input="{ data,rowIndex}">
 | 
					          <template v-slot:input="{ data, rowIndex }">
 | 
				
			||||||
            <lay-input-number v-if="data.pid==0" :disabled="true" :min="0" :max="data.base_score"
 | 
					            <lay-input-number v-if="data.pid == 0" :disabled="true" :min="0" :max="data.base_score"
 | 
				
			||||||
              v-model="data.base_score" position="right"></lay-input-number>
 | 
					              v-model="data.base_score" position="right"></lay-input-number>
 | 
				
			||||||
            <lay-input-number v-if="data.pid!=0" :disabled="addIsInfo==2" :min="0" :max="data.base_score"
 | 
					            <lay-input-number v-if="data.pid != 0" :disabled="addIsInfo == 2" :min="0" :max="data.base_score"
 | 
				
			||||||
                              v-model="data.content_score"
 | 
					              v-model="data.content_score" position="right"></lay-input-number>
 | 
				
			||||||
                              position="right"></lay-input-number>
 | 
					 | 
				
			||||||
          </template>
 | 
					          </template>
 | 
				
			||||||
          <template v-slot:ksinput="{ data,rowIndex}">
 | 
					          <template v-slot:ksinput="{ data, rowIndex }">
 | 
				
			||||||
            <lay-input-number v-if="data.pid==0" :disabled="true" :min="0" :max="data.base_score"
 | 
					            <lay-input-number v-if="data.pid == 0" :disabled="true" :min="0" :max="data.base_score"
 | 
				
			||||||
              v-model="data.base_score" position="right"></lay-input-number>
 | 
					              v-model="data.base_score" position="right"></lay-input-number>
 | 
				
			||||||
            <lay-input-number v-if="data.pid!=0" :disabled="addIsInfo==2" :min="0" :max="data.base_score"
 | 
					            <lay-input-number v-if="data.pid != 0" :disabled="addIsInfo == 2" :min="0" :max="data.base_score"
 | 
				
			||||||
                              v-model="data.department_score"
 | 
					              v-model="data.department_score" position="right"></lay-input-number>
 | 
				
			||||||
                              position="right"></lay-input-number>
 | 
					 | 
				
			||||||
          </template>
 | 
					          </template>
 | 
				
			||||||
        </lay-table>
 | 
					        </lay-table>
 | 
				
			||||||
      </lay-container>
 | 
					      </lay-container>
 | 
				
			||||||
    </lay-layer>
 | 
					    </lay-layer>
 | 
				
			||||||
 | 
					    <lay-layer v-model="userShow" title="月度自评列表" :shade="true" :area="['90%', '90%']">
 | 
				
			||||||
 | 
					      <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="searchAccountUser" placeholder="请选择"
 | 
				
			||||||
 | 
					                        allow-clear></lay-date-picker>
 | 
				
			||||||
 | 
					                    </lay-form-item>
 | 
				
			||||||
 | 
					                  </lay-col>
 | 
				
			||||||
 | 
					                  <lay-col :md="4">
 | 
				
			||||||
 | 
					                    <lay-form-item label-width="0">
 | 
				
			||||||
 | 
					                      <lay-button type="primary" @click="toUserSearch">查询</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-tab v-model="userTabId" type="brief" @change="openUserTab">
 | 
				
			||||||
 | 
					              <lay-tab-item v-for="item in tabList" :title="item.title" :id="item.id">
 | 
				
			||||||
 | 
					                <lay-table  :default-expand-all="true" :columns="userColumns"
 | 
				
			||||||
 | 
					                  :data-source="userDataSource">
 | 
				
			||||||
 | 
					                  <template v-slot:operator="{ row }">
 | 
				
			||||||
 | 
					                    <span  v-if="row.if ==2" style="color: #00A394;cursor: pointer"
 | 
				
			||||||
 | 
					                      @click="getMonthlyInfo(row)">考评详情</span>
 | 
				
			||||||
 | 
					                      <span style="color: #999999;cursor: not-allowed"
 | 
				
			||||||
 | 
					                      v-if="row.if ==1">未自评</span>
 | 
				
			||||||
 | 
					                  </template>
 | 
				
			||||||
 | 
					                </lay-table>
 | 
				
			||||||
 | 
					              </lay-tab-item>
 | 
				
			||||||
 | 
					            </lay-tab>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          </lay-col>
 | 
				
			||||||
 | 
					        </lay-row>
 | 
				
			||||||
 | 
					      </lay-container>
 | 
				
			||||||
 | 
					    </lay-layer>
 | 
				
			||||||
  </lay-container>
 | 
					  </lay-container>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
<script setup lang="ts">
 | 
					<script setup lang="ts">
 | 
				
			||||||
import {ref, reactive, onMounted} from 'vue'
 | 
					import { ref, reactive, onMounted } from 'vue'
 | 
				
			||||||
import {layer} from '@layui/layui-vue'
 | 
					import { layer } from '@layui/layui-vue'
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  getUserGroupNew,
 | 
					  getUserGroupNew,
 | 
				
			||||||
  getGroupEvaluation,
 | 
					  getGroupEvaluation,
 | 
				
			||||||
  getMonthlyUserList,
 | 
					  getMonthlyUserList,
 | 
				
			||||||
  MonthlyCreate,
 | 
					  MonthlyCreate,
 | 
				
			||||||
  getMonthlyListFind, getMonthlyListUpdate
 | 
					  getMonthlyListFind, getMonthlyListUpdate, getMonthlyFindData,
 | 
				
			||||||
 | 
					  MonthlyInfo
 | 
				
			||||||
} from "@/api/module/home";
 | 
					} from "@/api/module/home";
 | 
				
			||||||
import dayjs from "dayjs";
 | 
					import dayjs from "dayjs";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
onMounted(() => {
 | 
					onMounted(() => {
 | 
				
			||||||
  getLeftList();
 | 
					  getLeftList();
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					const userShow = ref(false);
 | 
				
			||||||
 | 
					const userColumns = ref([
 | 
				
			||||||
 | 
					  { title: '月度', width: '80px', key: 'month', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '考评对象', width: '100px', key: 'user', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '参评时间', width: '100px', key: 'createtime', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '自评总分', width: '100px', key: 'self_score', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '科室评分', width: '100px', key: 'department_score', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '医院评分', width: '100px', key: 'hospital_score', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '操作', width: '100px', key: 'operator', customSlot: 'operator', align: 'center' },
 | 
				
			||||||
 | 
					])
 | 
				
			||||||
 | 
					const userDataSource = ref([]);
 | 
				
			||||||
 | 
					const userTabId = ref(0);
 | 
				
			||||||
 | 
					const userInfo = ref({});
 | 
				
			||||||
 | 
					const searchAccountUser = ref(dayjs().year());
 | 
				
			||||||
 | 
					const openUserListShow = (row) => {
 | 
				
			||||||
 | 
					  userInfo.value = row;
 | 
				
			||||||
 | 
					  userShow.value = true;
 | 
				
			||||||
 | 
					  getUserListInfo();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					const getUserListInfo = () => {
 | 
				
			||||||
 | 
					  getMonthlyFindData({
 | 
				
			||||||
 | 
					    'user_id': userInfo.value.id,
 | 
				
			||||||
 | 
					    'evaluation_id': userTabId.value,
 | 
				
			||||||
 | 
					    'time': searchAccountUser.value
 | 
				
			||||||
 | 
					  }).then((res) => {
 | 
				
			||||||
 | 
					    console.log(res)
 | 
				
			||||||
 | 
					    if(res.code==1){
 | 
				
			||||||
 | 
					      userDataSource.value = res.data;
 | 
				
			||||||
 | 
					    }else{
 | 
				
			||||||
 | 
					      userDataSource.value = [];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					const openUserTab = (d) => {
 | 
				
			||||||
 | 
					  console.log(d)
 | 
				
			||||||
 | 
					  userTabId.value = d;
 | 
				
			||||||
 | 
					  userDataSource.value = [];
 | 
				
			||||||
 | 
					  getUserListInfo();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					const getMonthlyInfo = (item) => {
 | 
				
			||||||
 | 
					  addIsInfo.value=2;
 | 
				
			||||||
 | 
					  infoShow.value = true;
 | 
				
			||||||
 | 
					  console.log(item);
 | 
				
			||||||
 | 
					  item.time=item.month;
 | 
				
			||||||
 | 
					  getInfoMode(item);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					const toUserSearch = () => {
 | 
				
			||||||
 | 
					  getUserListInfo();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
const openTab = (d) => {
 | 
					const openTab = (d) => {
 | 
				
			||||||
  console.log(d)
 | 
					  console.log(d)
 | 
				
			||||||
  tab_id.value = d;
 | 
					  tab_id.value = d;
 | 
				
			||||||
@ -120,7 +215,7 @@ const openTab = (d) => {
 | 
				
			|||||||
  page.current = 1;
 | 
					  page.current = 1;
 | 
				
			||||||
  getList();
 | 
					  getList();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const page = reactive({current: 1, limit: 10, total: 1})
 | 
					const page = reactive({ current: 1, limit: 10, total: 1 })
 | 
				
			||||||
const change = (d) => {
 | 
					const change = (d) => {
 | 
				
			||||||
  console.log(d);
 | 
					  console.log(d);
 | 
				
			||||||
  page.current = d.current;
 | 
					  page.current = d.current;
 | 
				
			||||||
@ -143,7 +238,7 @@ const getList = () => {
 | 
				
			|||||||
      dataSource.value = res.data.result;
 | 
					      dataSource.value = res.data.result;
 | 
				
			||||||
      page.total = res.data.count;
 | 
					      page.total = res.data.count;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      layer.msg(res.msg, {icon: 2})
 | 
					      layer.msg(res.msg, { icon: 2 })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -165,21 +260,22 @@ const getInfoMode = (row) => {
 | 
				
			|||||||
    if (res.code == 1) {
 | 
					    if (res.code == 1) {
 | 
				
			||||||
      dataSource6.value = res.data;
 | 
					      dataSource6.value = res.data;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      layer.msg(res.msg, {icon: 2})
 | 
					      layer.msg(res.msg, { icon: 2 })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const tabList = ref([]);
 | 
					const tabList = ref([]);
 | 
				
			||||||
const tab_id = ref(0);
 | 
					const tab_id = ref(0);
 | 
				
			||||||
const getTabList = () => {
 | 
					const getTabList = () => {
 | 
				
			||||||
  getGroupEvaluation({'group_id': group_id.value}).then((res) => {
 | 
					  getGroupEvaluation({ 'group_id': group_id.value }).then((res) => {
 | 
				
			||||||
    console.log(res)
 | 
					    console.log(res)
 | 
				
			||||||
    if (res.code == 1) {
 | 
					    if (res.code == 1) {
 | 
				
			||||||
      tabList.value = res.data;
 | 
					      tabList.value = res.data;
 | 
				
			||||||
      tab_id.value = res.data[0].id;
 | 
					      tab_id.value = res.data[0].id;
 | 
				
			||||||
 | 
					      userTabId.value = res.data[0].id;
 | 
				
			||||||
      getList();
 | 
					      getList();
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      layer.msg(res.msg, {icon: 2})
 | 
					      layer.msg(res.msg, { icon: 2 })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -192,7 +288,7 @@ const getLeftList = () => {
 | 
				
			|||||||
      group_id.value = res.data[0].id;
 | 
					      group_id.value = res.data[0].id;
 | 
				
			||||||
      getTabList();
 | 
					      getTabList();
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      layer.msg(res.msg, {icon: 2})
 | 
					      layer.msg(res.msg, { icon: 2 })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -227,16 +323,16 @@ function toSearch() {
 | 
				
			|||||||
const loading = ref(false)
 | 
					const loading = ref(false)
 | 
				
			||||||
const selectedKeys = ref()
 | 
					const selectedKeys = ref()
 | 
				
			||||||
const columns = ref([
 | 
					const columns = ref([
 | 
				
			||||||
  {title: '选项', width: '55px', type: 'checkbox', align: 'center'},
 | 
					  { title: '选项', width: '55px', type: 'checkbox', align: 'center' },
 | 
				
			||||||
  {title: '序号', width: '60px', key: 'id', align: 'center'},
 | 
					  { title: '序号', width: '60px', key: 'id', align: 'center' },
 | 
				
			||||||
  {title: '月度', width: '80px', key: 'time', align: 'center'},
 | 
					  { title: '月度', width: '80px', key: 'time', align: 'center' },
 | 
				
			||||||
  {title: '考评对象', width: '100px', key: 'nickname', align: 'center'},
 | 
					  { title: '考评对象', width: '100px', key: 'nickname', customSlot: 'nickname', align: 'center' },
 | 
				
			||||||
  {title: '工号', width: '100px', key: 'work_number', align: 'center'},
 | 
					  { title: '工号', width: '100px', key: 'work_number', align: 'center' },
 | 
				
			||||||
  {title: '部门', width: '120px', key: 'group_name', align: 'center'},
 | 
					  { title: '部门', width: '120px', key: 'group_name', align: 'center' },
 | 
				
			||||||
  {title: '季度总加分', width: '100px', key: 'zongjiafen', align: 'center'},
 | 
					  { title: '医院评分', width: '100px', key: 'hospital_score', align: 'center' },
 | 
				
			||||||
  {title: '科室评分', width: '100px', key: 'department_score_scoringrecord', align: 'center'},
 | 
					  { title: '科室评分', width: '100px', key: 'department_score_scoringrecord', align: 'center' },
 | 
				
			||||||
  {title: '自评总分', width: '100px', key: 'user_scoringrecord', align: 'center'},
 | 
					  { title: '自评总分', width: '100px', key: 'user_scoringrecord', align: 'center' },
 | 
				
			||||||
  {title: '自评状态', width: '100px', key: 'scoringrecord_status', customSlot: 'scoringrecord_status', align: 'center'},
 | 
					  { title: '自评状态', width: '100px', key: 'scoringrecord_status', customSlot: 'scoringrecord_status', align: 'center' },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    title: '操作',
 | 
					    title: '操作',
 | 
				
			||||||
    width: '180px',
 | 
					    width: '180px',
 | 
				
			||||||
@ -259,12 +355,12 @@ const addButton = ref([
 | 
				
			|||||||
      });
 | 
					      });
 | 
				
			||||||
      console.log(res)
 | 
					      console.log(res)
 | 
				
			||||||
      if (res.code == 1) {
 | 
					      if (res.code == 1) {
 | 
				
			||||||
        layer.msg('提交成功!', {icon: 1})
 | 
					        layer.msg('提交成功!', { icon: 1 })
 | 
				
			||||||
        thisInfo.value = {};
 | 
					        thisInfo.value = {};
 | 
				
			||||||
        infoShow.value = false;
 | 
					        infoShow.value = false;
 | 
				
			||||||
        getList();
 | 
					        getList();
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        layer.msg(res.msg, {icon: 2})
 | 
					        layer.msg(res.msg, { icon: 2 })
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
@ -361,5 +457,4 @@ const dataSource6 = ref([])
 | 
				
			|||||||
  background-color: #e8f1ff;
 | 
					  background-color: #e8f1ff;
 | 
				
			||||||
  color: red;
 | 
					  color: red;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
 | 
				
			|||||||
@ -209,16 +209,6 @@ const columns = [
 | 
				
			|||||||
    align: 'center',
 | 
					    align: 'center',
 | 
				
			||||||
    key: 'createtime'
 | 
					    key: 'createtime'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    title: '加分',
 | 
					 | 
				
			||||||
    key: 'remark',
 | 
					 | 
				
			||||||
    align: 'center',
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    title: '扣分',
 | 
					 | 
				
			||||||
    key: 'remark',
 | 
					 | 
				
			||||||
    align: 'center',
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    title: '自评总分',
 | 
					    title: '自评总分',
 | 
				
			||||||
    key: 'self_score',
 | 
					    key: 'self_score',
 | 
				
			||||||
@ -229,6 +219,11 @@ const columns = [
 | 
				
			|||||||
    customSlot: 'department_score',
 | 
					    customSlot: 'department_score',
 | 
				
			||||||
    align: 'center',
 | 
					    align: 'center',
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    title: '医院评分',
 | 
				
			||||||
 | 
					    key: 'hospital_score',
 | 
				
			||||||
 | 
					    align: 'center',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    title: '操作',
 | 
					    title: '操作',
 | 
				
			||||||
    width: '180px',
 | 
					    width: '180px',
 | 
				
			||||||
 | 
				
			|||||||
@ -55,12 +55,15 @@
 | 
				
			|||||||
                <lay-tag v-if="row.scoringrecord_status==1" type="primary">已自评</lay-tag>
 | 
					                <lay-tag v-if="row.scoringrecord_status==1" type="primary">已自评</lay-tag>
 | 
				
			||||||
                <lay-tag v-if="row.scoringrecord_status==2">未自评</lay-tag>
 | 
					                <lay-tag v-if="row.scoringrecord_status==2">未自评</lay-tag>
 | 
				
			||||||
              </template>
 | 
					              </template>
 | 
				
			||||||
 | 
					              <template v-slot:nickname="{ row }">
 | 
				
			||||||
 | 
					                <div style="color: #00A394;cursor: pointer" @click="openUserListShow(row)">{{ row.nickname }}</div>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
              <template v-slot:operator="{ row }">
 | 
					              <template v-slot:operator="{ row }">
 | 
				
			||||||
                <span style="color: #00A394;cursor: pointer" v-if="row.department_score_scoringrecord==0 && row.scoringrecord_status==1"
 | 
					                <span style="color: #00A394;cursor: pointer" v-if="row.department_score_scoringrecord==0 && row.scoringrecord_status==1"
 | 
				
			||||||
                      @click="getInfo(row,1)">科室评分</span>
 | 
					                      @click="getInfo(row,1)">科室评分</span>
 | 
				
			||||||
                <span style="color: #00A394;cursor: pointer" v-if="row.department_score_scoringrecord!=0 && row.scoringrecord_status==1"
 | 
					                <span style="color: #00A394;cursor: pointer" v-if="row.department_score_scoringrecord!=0 && row.scoringrecord_status==1"
 | 
				
			||||||
                      @click="getInfo(row,2)">考评详情</span>
 | 
					                      @click="getInfo(row,2)">考评详情</span>
 | 
				
			||||||
                <span style="color: #999999;cursor: not-allowed" v-if="row.department_score_scoringrecord==0 && row.scoringrecord_status==2">考评详情</span>
 | 
					                <span style="color: #999999;cursor: not-allowed" v-if="row.department_score_scoringrecord==0 && row.scoringrecord_status==2">未自评</span>
 | 
				
			||||||
              </template>
 | 
					              </template>
 | 
				
			||||||
            </lay-table>
 | 
					            </lay-table>
 | 
				
			||||||
          </lay-tab-item>
 | 
					          </lay-tab-item>
 | 
				
			||||||
@ -90,6 +93,48 @@
 | 
				
			|||||||
        </lay-table>
 | 
					        </lay-table>
 | 
				
			||||||
      </lay-container>
 | 
					      </lay-container>
 | 
				
			||||||
    </lay-layer>
 | 
					    </lay-layer>
 | 
				
			||||||
 | 
					    <lay-layer v-model="userShow" title="季度自评列表" :shade="true" :area="['90%', '90%']">
 | 
				
			||||||
 | 
					      <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="searchAccountUser" placeholder="请选择"
 | 
				
			||||||
 | 
					                        allow-clear></lay-date-picker>
 | 
				
			||||||
 | 
					                    </lay-form-item>
 | 
				
			||||||
 | 
					                  </lay-col>
 | 
				
			||||||
 | 
					                  <lay-col :md="4">
 | 
				
			||||||
 | 
					                    <lay-form-item label-width="0">
 | 
				
			||||||
 | 
					                      <lay-button type="primary" @click="toUserSearch">查询</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-tab v-model="userTabId" type="brief" @change="openUserTab">
 | 
				
			||||||
 | 
					              <lay-tab-item v-for="item in tabList" :title="item.title" :id="item.id">
 | 
				
			||||||
 | 
					                <lay-table height="400px" :default-expand-all="true" :columns="userColumns"
 | 
				
			||||||
 | 
					                  :data-source="userDataSource">
 | 
				
			||||||
 | 
					                  <template v-slot:operator="{ row }">
 | 
				
			||||||
 | 
					                    <span  v-if="row.if ==2" style="color: #00A394;cursor: pointer"
 | 
				
			||||||
 | 
					                      @click="getMonthlyInfo(row)">考评详情</span>
 | 
				
			||||||
 | 
					                      <span style="color: #999999;cursor: not-allowed"
 | 
				
			||||||
 | 
					                      v-if="row.if ==1">未自评</span>
 | 
				
			||||||
 | 
					                  </template>
 | 
				
			||||||
 | 
					                </lay-table>
 | 
				
			||||||
 | 
					              </lay-tab-item>
 | 
				
			||||||
 | 
					            </lay-tab>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          </lay-col>
 | 
				
			||||||
 | 
					        </lay-row>
 | 
				
			||||||
 | 
					      </lay-container>
 | 
				
			||||||
 | 
					    </lay-layer>
 | 
				
			||||||
  </lay-container>
 | 
					  </lay-container>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
<script setup lang="ts">
 | 
					<script setup lang="ts">
 | 
				
			||||||
@ -100,13 +145,63 @@ import {
 | 
				
			|||||||
  getGroupQuarter,
 | 
					  getGroupQuarter,
 | 
				
			||||||
  getQuarterUserList,
 | 
					  getQuarterUserList,
 | 
				
			||||||
  getQuarterListFind,
 | 
					  getQuarterListFind,
 | 
				
			||||||
  getQuarterListUpdate
 | 
					  getQuarterListUpdate,
 | 
				
			||||||
 | 
					  getQuarterlyFindData
 | 
				
			||||||
} from "@/api/module/home";
 | 
					} from "@/api/module/home";
 | 
				
			||||||
import dayjs from "dayjs";
 | 
					import dayjs from "dayjs";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
onMounted(() => {
 | 
					onMounted(() => {
 | 
				
			||||||
  getLeftList();
 | 
					  getLeftList();
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					const userShow = ref(false);
 | 
				
			||||||
 | 
					const userColumns = ref([
 | 
				
			||||||
 | 
					  { title: '季度', width: '80px', key: 'quarter', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '考评对象', width: '100px', key: 'user', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '参评时间', width: '100px', key: 'createtime', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '自评总分', width: '100px', key: 'self_score', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '科室评分', width: '100px', key: 'department_score', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '医院评分', width: '100px', key: 'hospital_score', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '操作', width: '100px', key: 'operator', customSlot: 'operator', align: 'center' },
 | 
				
			||||||
 | 
					])
 | 
				
			||||||
 | 
					const userDataSource = ref([]);
 | 
				
			||||||
 | 
					const userTabId = ref(0);
 | 
				
			||||||
 | 
					const userInfo = ref({});
 | 
				
			||||||
 | 
					const searchAccountUser = ref(dayjs().year());
 | 
				
			||||||
 | 
					const openUserListShow = (row) => {
 | 
				
			||||||
 | 
					  userInfo.value = row;
 | 
				
			||||||
 | 
					  userShow.value = true;
 | 
				
			||||||
 | 
					  getUserListInfo();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					const getUserListInfo = () => {
 | 
				
			||||||
 | 
					  getQuarterlyFindData({
 | 
				
			||||||
 | 
					    'user_id': userInfo.value.id,
 | 
				
			||||||
 | 
					    'evaluation_id': userTabId.value,
 | 
				
			||||||
 | 
					    'time': searchAccountUser.value
 | 
				
			||||||
 | 
					  }).then((res) => {
 | 
				
			||||||
 | 
					    console.log(res)
 | 
				
			||||||
 | 
					    if(res.code==1){
 | 
				
			||||||
 | 
					      userDataSource.value = res.data;
 | 
				
			||||||
 | 
					    }else{
 | 
				
			||||||
 | 
					      userDataSource.value = [];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					const openUserTab = (d) => {
 | 
				
			||||||
 | 
					  console.log(d)
 | 
				
			||||||
 | 
					  userTabId.value = d;
 | 
				
			||||||
 | 
					  userDataSource.value = [];
 | 
				
			||||||
 | 
					  getUserListInfo();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					const getMonthlyInfo = (item) => {
 | 
				
			||||||
 | 
					  addIsInfo.value=2;
 | 
				
			||||||
 | 
					  infoShow.value = true;
 | 
				
			||||||
 | 
					  console.log(item);
 | 
				
			||||||
 | 
					  item.time=item.quarter;
 | 
				
			||||||
 | 
					  getInfoMode(item);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					const toUserSearch = () => {
 | 
				
			||||||
 | 
					  getUserListInfo();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
const openTab = (d) => {
 | 
					const openTab = (d) => {
 | 
				
			||||||
  console.log(d)
 | 
					  console.log(d)
 | 
				
			||||||
  tab_id.value = d;
 | 
					  tab_id.value = d;
 | 
				
			||||||
@ -146,8 +241,9 @@ const getList = () => {
 | 
				
			|||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const thisInfo = ref();
 | 
					const thisInfo = ref();
 | 
				
			||||||
const getInfo = (row) => {
 | 
					const getInfo = (row,type) => {
 | 
				
			||||||
  infoShow.value = true;
 | 
					  infoShow.value = true;
 | 
				
			||||||
 | 
					  addIsInfo.value = type;
 | 
				
			||||||
  console.log(row);
 | 
					  console.log(row);
 | 
				
			||||||
  thisInfo.value = row;
 | 
					  thisInfo.value = row;
 | 
				
			||||||
  getInfoMode(row);
 | 
					  getInfoMode(row);
 | 
				
			||||||
@ -174,6 +270,7 @@ const getTabList = () => {
 | 
				
			|||||||
    if (res.code == 1) {
 | 
					    if (res.code == 1) {
 | 
				
			||||||
      tabList.value = res.data;
 | 
					      tabList.value = res.data;
 | 
				
			||||||
      tab_id.value = res.data[0].id;
 | 
					      tab_id.value = res.data[0].id;
 | 
				
			||||||
 | 
					      userTabId.value = res.data[0].id;
 | 
				
			||||||
      getList();
 | 
					      getList();
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      layer.msg(res.msg, {icon: 2})
 | 
					      layer.msg(res.msg, {icon: 2})
 | 
				
			||||||
@ -228,10 +325,10 @@ const columns = ref([
 | 
				
			|||||||
  {title: '选项', width: '55px', type: 'checkbox', align: 'center'},
 | 
					  {title: '选项', width: '55px', type: 'checkbox', align: 'center'},
 | 
				
			||||||
  {title: '序号', width: '60px', key: 'id', align: 'center'},
 | 
					  {title: '序号', width: '60px', key: 'id', align: 'center'},
 | 
				
			||||||
  {title: '季度', width: '80px', key: 'time', align: 'center'},
 | 
					  {title: '季度', width: '80px', key: 'time', align: 'center'},
 | 
				
			||||||
  {title: '考评对象', width: '100px', key: 'nickname', align: 'center'},
 | 
					  {title: '考评对象', width: '100px', key: 'nickname',customSlot:'nickname', align: 'center'},
 | 
				
			||||||
  {title: '工号', width: '100px', key: 'work_number', align: 'center'},
 | 
					  {title: '工号', width: '100px', key: 'work_number', align: 'center'},
 | 
				
			||||||
  {title: '部门', width: '120px', key: 'group_name', align: 'center'},
 | 
					  {title: '部门', width: '120px', key: 'group_name', align: 'center'},
 | 
				
			||||||
  {title: '季度总加分', width: '100px', key: 'zongjiafen', align: 'center'},
 | 
					  {title: '医院评分', width: '100px', key: 'hospital_score', align: 'center'},
 | 
				
			||||||
  {title: '科室评分', width: '100px', key: 'department_score_scoringrecord', align: 'center'},
 | 
					  {title: '科室评分', width: '100px', key: 'department_score_scoringrecord', align: 'center'},
 | 
				
			||||||
  {title: '自评总分', width: '100px', key: 'user_scoringrecord', align: 'center'},
 | 
					  {title: '自评总分', width: '100px', key: 'user_scoringrecord', align: 'center'},
 | 
				
			||||||
  {title: '自评状态', width: '100px', key: 'scoringrecord_status',   customSlot: 'scoringrecord_status',align: 'center'},
 | 
					  {title: '自评状态', width: '100px', key: 'scoringrecord_status',   customSlot: 'scoringrecord_status',align: 'center'},
 | 
				
			||||||
 | 
				
			|||||||
@ -50,8 +50,8 @@
 | 
				
			|||||||
              {{ data.password }}
 | 
					              {{ data.password }}
 | 
				
			||||||
            </template>
 | 
					            </template>
 | 
				
			||||||
            <template v-slot:operator="{ data }">
 | 
					            <template v-slot:operator="{ data }">
 | 
				
			||||||
              <span style="color: #00A394;cursor: pointer" v-if="data.if_period==1" @click="getMonthlyInfo(data)">详情</span>
 | 
					              <span style="color: #00A394;cursor: pointer" v-if="data.if==2" @click="getMonthlyInfo(data)">详情</span>
 | 
				
			||||||
              <span style="color: #00A394;cursor: pointer" v-if="data.if_period==2"
 | 
					              <span style="color: #00A394;cursor: pointer" v-if="data.if==1"
 | 
				
			||||||
                    @click="insZp(data)">开始自评</span>
 | 
					                    @click="insZp(data)">开始自评</span>
 | 
				
			||||||
            </template>
 | 
					            </template>
 | 
				
			||||||
          </lay-table>
 | 
					          </lay-table>
 | 
				
			||||||
@ -59,7 +59,7 @@
 | 
				
			|||||||
      </lay-col>
 | 
					      </lay-col>
 | 
				
			||||||
    </lay-row>
 | 
					    </lay-row>
 | 
				
			||||||
  </lay-container>
 | 
					  </lay-container>
 | 
				
			||||||
  <lay-layer v-model="visible11" title="季度自评详情" :type="4" :shade="true" :area="['950px','100%']" :btn="addIsInfo==1?addButton:''">
 | 
					  <lay-layer v-model="visible11" title="季度自评" :type="4" :shade="true" :area="['950px','100%']" :btn="addIsInfo==1?addButton:''">
 | 
				
			||||||
    <lay-container fluid="true" style="padding: 20px">
 | 
					    <lay-container fluid="true" style="padding: 20px">
 | 
				
			||||||
      <lay-card shadow="always">
 | 
					      <lay-card shadow="always">
 | 
				
			||||||
        <div style="height: 70px;width: 100%;">
 | 
					        <div style="height: 70px;width: 100%;">
 | 
				
			||||||
@ -217,16 +217,6 @@ const columns = [
 | 
				
			|||||||
    align: 'center',
 | 
					    align: 'center',
 | 
				
			||||||
    key: 'createtime'
 | 
					    key: 'createtime'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    title: '加分',
 | 
					 | 
				
			||||||
    key: 'remark',
 | 
					 | 
				
			||||||
    align: 'center',
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    title: '扣分',
 | 
					 | 
				
			||||||
    key: 'remark',
 | 
					 | 
				
			||||||
    align: 'center',
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    title: '自评总分',
 | 
					    title: '自评总分',
 | 
				
			||||||
    key: 'self_score',
 | 
					    key: 'self_score',
 | 
				
			||||||
@ -236,6 +226,10 @@ const columns = [
 | 
				
			|||||||
    key: 'department_score',
 | 
					    key: 'department_score',
 | 
				
			||||||
    customSlot: 'department_score',
 | 
					    customSlot: 'department_score',
 | 
				
			||||||
    align: 'center',
 | 
					    align: 'center',
 | 
				
			||||||
 | 
					  }, {
 | 
				
			||||||
 | 
					    title: '医院评分',
 | 
				
			||||||
 | 
					    key: 'hospital_score',
 | 
				
			||||||
 | 
					    align: 'center',
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    title: '操作',
 | 
					    title: '操作',
 | 
				
			||||||
 | 
				
			|||||||
@ -57,8 +57,8 @@
 | 
				
			|||||||
            </lay-row>
 | 
					            </lay-row>
 | 
				
			||||||
          </lay-form>
 | 
					          </lay-form>
 | 
				
			||||||
        </lay-card>
 | 
					        </lay-card>
 | 
				
			||||||
        <lay-table :page="page" height="600px" :columns="columns" :loading="loading" :default-toolbar="true"
 | 
					        <lay-table :page="page" height="600px" :columns="columns" :loading="loading" :default-toolbar="false"
 | 
				
			||||||
                   :data-source="dataSource">
 | 
					                   :data-source="dataSource"   @change="changePage">
 | 
				
			||||||
          <template #status="{ row }">
 | 
					          <template #status="{ row }">
 | 
				
			||||||
            <lay-tag type="danger" v-if="row.status == 0">已禁用</lay-tag>
 | 
					            <lay-tag type="danger" v-if="row.status == 0">已禁用</lay-tag>
 | 
				
			||||||
            <lay-tag type="primary" v-if="row.status == 1">正常</lay-tag>
 | 
					            <lay-tag type="primary" v-if="row.status == 1">正常</lay-tag>
 | 
				
			||||||
@ -208,12 +208,18 @@ const getUserList = () => {
 | 
				
			|||||||
  userData({group_id: leftId.value, size: page.limit, page: page.current}).then((res) => {
 | 
					  userData({group_id: leftId.value, size: page.limit, page: page.current}).then((res) => {
 | 
				
			||||||
    console.log(res)
 | 
					    console.log(res)
 | 
				
			||||||
    if (res.code == 1) {
 | 
					    if (res.code == 1) {
 | 
				
			||||||
      dataSource.value = res.data;
 | 
					      dataSource.value = res.data.data;
 | 
				
			||||||
 | 
					      page.total = res.data.count;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      layer.msg(res.msg, {icon: 2})
 | 
					      layer.msg(res.msg, {icon: 2})
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					const changePage = (ppc) => {
 | 
				
			||||||
 | 
					  page.current = ppc.current;
 | 
				
			||||||
 | 
					  page.limit = ppc.limit;
 | 
				
			||||||
 | 
					  getUserList();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
const partyList = ref([])
 | 
					const partyList = ref([])
 | 
				
			||||||
const getPartyList = () => {
 | 
					const getPartyList = () => {
 | 
				
			||||||
  partyGroupData({}).then((res) => {
 | 
					  partyGroupData({}).then((res) => {
 | 
				
			||||||
 | 
				
			|||||||
@ -5,10 +5,10 @@
 | 
				
			|||||||
        <span style="font-size: 18px;vertical-align: center;margin-right: 20px">通知公告</span>
 | 
					        <span style="font-size: 18px;vertical-align: center;margin-right: 20px">通知公告</span>
 | 
				
			||||||
        <lay-button type="primary" @click="openNew()" size="sm">新增公告</lay-button>
 | 
					        <lay-button type="primary" @click="openNew()" size="sm">新增公告</lay-button>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <lay-table :page="page" height="600px" size="lg" :columns="columns" :data-source="dataSource">
 | 
					      <lay-table :page="page" height="600px" size="lg" @change="changePage" :columns="columns" :data-source="dataSource">
 | 
				
			||||||
        <template v-slot:content="{ data }">
 | 
					        <!-- <template v-slot:content="{ data }">
 | 
				
			||||||
          <div v-html="data.content"></div>
 | 
					          <div v-html="data.content"></div>
 | 
				
			||||||
        </template>
 | 
					        </template> -->
 | 
				
			||||||
        <template v-slot:status="{ data }">
 | 
					        <template v-slot:status="{ data }">
 | 
				
			||||||
          <span v-if="data.status == 1">已发布</span>
 | 
					          <span v-if="data.status == 1">已发布</span>
 | 
				
			||||||
          <span v-if="data.status == 0">已隐藏</span>
 | 
					          <span v-if="data.status == 0">已隐藏</span>
 | 
				
			||||||
@ -229,7 +229,12 @@ interface NoticeData {
 | 
				
			|||||||
  content: string;
 | 
					  content: string;
 | 
				
			||||||
  status: number;
 | 
					  status: number;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					// 分页变化
 | 
				
			||||||
 | 
					const changePage = (ppc) => {
 | 
				
			||||||
 | 
					  page.current = ppc.current;
 | 
				
			||||||
 | 
					  page.limit = ppc.limit;
 | 
				
			||||||
 | 
					  getNoticeList();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
// 列表数据
 | 
					// 列表数据
 | 
				
			||||||
const dataSource = ref<NoticeData[]>([]);
 | 
					const dataSource = ref<NoticeData[]>([]);
 | 
				
			||||||
const addShow = ref(false);
 | 
					const addShow = ref(false);
 | 
				
			||||||
@ -317,11 +322,6 @@ const delShowMsd = async (data: NoticeData) => {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const changePage = (currentPage: number) => {
 | 
					 | 
				
			||||||
  page.current = currentPage;
 | 
					 | 
				
			||||||
  getNoticeList();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const columns = [
 | 
					const columns = [
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    title: "公告标题",
 | 
					    title: "公告标题",
 | 
				
			||||||
@ -337,7 +337,6 @@ const columns = [
 | 
				
			|||||||
    title: "公告内容",
 | 
					    title: "公告内容",
 | 
				
			||||||
    width: "280px",
 | 
					    width: "280px",
 | 
				
			||||||
    key: "content",
 | 
					    key: "content",
 | 
				
			||||||
    customSlot: 'content',
 | 
					 | 
				
			||||||
    ellipsisTooltip: true
 | 
					    ellipsisTooltip: true
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
				
			|||||||
@ -188,7 +188,9 @@ const action11 = ref([
 | 
				
			|||||||
        layer.msg('请选择菜单!', {icon: 2})
 | 
					        layer.msg('请选择菜单!', {icon: 2})
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					      if(typeof addData.rules != 'string'){
 | 
				
			||||||
        addData.rules = addData.rules.join(',');
 | 
					        addData.rules = addData.rules.join(',');
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
      if (addIsEdit.value == 1) {
 | 
					      if (addIsEdit.value == 1) {
 | 
				
			||||||
        var res = await authGroupDataAdd(addData);
 | 
					        var res = await authGroupDataAdd(addData);
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
 | 
				
			|||||||
@ -46,12 +46,17 @@
 | 
				
			|||||||
                <lay-tag v-if="row.scoringrecord_status==1" type="primary">已自评</lay-tag>
 | 
					                <lay-tag v-if="row.scoringrecord_status==1" type="primary">已自评</lay-tag>
 | 
				
			||||||
                <lay-tag v-if="row.scoringrecord_status==2">未自评</lay-tag>
 | 
					                <lay-tag v-if="row.scoringrecord_status==2">未自评</lay-tag>
 | 
				
			||||||
              </template>
 | 
					              </template>
 | 
				
			||||||
 | 
					              <template v-slot:nickname="{ row }">
 | 
				
			||||||
 | 
					                <div style="color: #00A394;cursor: pointer" @click="openUserListShow(row)">{{ row.nickname }}</div>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
              <template v-slot:operator="{ row }">
 | 
					              <template v-slot:operator="{ row }">
 | 
				
			||||||
 | 
					                <span style="color: #00A394;cursor: pointer;padding-right: 10px;" v-if="row.department_score_scoringrecord!=0 && row.scoringrecord_status==1"
 | 
				
			||||||
 | 
					                      @click="getInfo(row,1)">医院评分</span>
 | 
				
			||||||
                <span style="color: #00A394;cursor: pointer" v-if="row.department_score_scoringrecord==0 && row.scoringrecord_status==1"
 | 
					                <span style="color: #00A394;cursor: pointer" v-if="row.department_score_scoringrecord==0 && row.scoringrecord_status==1"
 | 
				
			||||||
                      @click="getInfo(row,1)">科室评分</span>
 | 
					                      @click="getInfo(row,1)">科室评分</span>
 | 
				
			||||||
                <span style="color: #00A394;cursor: pointer" v-if="row.department_score_scoringrecord!=0 && row.scoringrecord_status==1"
 | 
					                <span style="color: #00A394;cursor: pointer" v-if="row.department_score_scoringrecord!=0 && row.scoringrecord_status==1"
 | 
				
			||||||
                      @click="getInfo(row,2)">考评详情</span>
 | 
					                      @click="getInfo(row,2)">考评详情</span>
 | 
				
			||||||
                <span style="color: #999999;cursor: not-allowed" v-if="row.department_score_scoringrecord==0 && row.scoringrecord_status==2">考评详情</span>
 | 
					                <span style="color: #999999;cursor: not-allowed" v-if="row.department_score_scoringrecord==0 && row.scoringrecord_status==2">未自评</span>
 | 
				
			||||||
              </template>
 | 
					              </template>
 | 
				
			||||||
            </lay-table>
 | 
					            </lay-table>
 | 
				
			||||||
          </lay-tab-item>
 | 
					          </lay-tab-item>
 | 
				
			||||||
@ -81,6 +86,48 @@
 | 
				
			|||||||
        </lay-table>
 | 
					        </lay-table>
 | 
				
			||||||
      </lay-container>
 | 
					      </lay-container>
 | 
				
			||||||
    </lay-layer>
 | 
					    </lay-layer>
 | 
				
			||||||
 | 
					    <lay-layer v-model="userShow" title="季度自评列表" :shade="true" :area="['90%', '90%']">
 | 
				
			||||||
 | 
					      <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="searchAccountUser" placeholder="请选择"
 | 
				
			||||||
 | 
					                        allow-clear></lay-date-picker>
 | 
				
			||||||
 | 
					                    </lay-form-item>
 | 
				
			||||||
 | 
					                  </lay-col>
 | 
				
			||||||
 | 
					                  <lay-col :md="4">
 | 
				
			||||||
 | 
					                    <lay-form-item label-width="0">
 | 
				
			||||||
 | 
					                      <lay-button type="primary" @click="toUserSearch">查询</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-tab v-model="userTabId" type="brief" @change="openUserTab">
 | 
				
			||||||
 | 
					              <lay-tab-item v-for="item in tabList" :title="item.title" :id="item.id">
 | 
				
			||||||
 | 
					                <lay-table height="400px" :default-expand-all="true" :columns="userColumns"
 | 
				
			||||||
 | 
					                  :data-source="userDataSource">
 | 
				
			||||||
 | 
					                  <template v-slot:operator="{ row }">
 | 
				
			||||||
 | 
					                    <span  v-if="row.if ==2" style="color: #00A394;cursor: pointer"
 | 
				
			||||||
 | 
					                      @click="getMonthlyInfo(row)">考评详情</span>
 | 
				
			||||||
 | 
					                      <span style="color: #999999;cursor: not-allowed"
 | 
				
			||||||
 | 
					                      v-if="row.if ==1">未自评</span>
 | 
				
			||||||
 | 
					                  </template>
 | 
				
			||||||
 | 
					                </lay-table>
 | 
				
			||||||
 | 
					              </lay-tab-item>
 | 
				
			||||||
 | 
					            </lay-tab>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          </lay-col>
 | 
				
			||||||
 | 
					        </lay-row>
 | 
				
			||||||
 | 
					      </lay-container>
 | 
				
			||||||
 | 
					    </lay-layer>
 | 
				
			||||||
  </lay-container>
 | 
					  </lay-container>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
<script setup lang="ts">
 | 
					<script setup lang="ts">
 | 
				
			||||||
@ -90,13 +137,64 @@ import {
 | 
				
			|||||||
  getUserGroupNew,
 | 
					  getUserGroupNew,
 | 
				
			||||||
  getGroupYear,
 | 
					  getGroupYear,
 | 
				
			||||||
  getYearUserList,
 | 
					  getYearUserList,
 | 
				
			||||||
  getYearListFind, getYearListUpdate
 | 
					  getYearListFind, getYearListUpdate,
 | 
				
			||||||
 | 
					  getAnnualFindData
 | 
				
			||||||
} from "@/api/module/home";
 | 
					} from "@/api/module/home";
 | 
				
			||||||
import dayjs from "dayjs";
 | 
					import dayjs from "dayjs";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
onMounted(() => {
 | 
					onMounted(() => {
 | 
				
			||||||
  getLeftList();
 | 
					  getLeftList();
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const userShow = ref(false);
 | 
				
			||||||
 | 
					const userColumns = ref([
 | 
				
			||||||
 | 
					  { title: '年度', width: '80px', key: 'year', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '考评对象', width: '100px', key: 'user', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '参评时间', width: '100px', key: 'createtime', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '自评总分', width: '100px', key: 'self_score', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '科室评分', width: '100px', key: 'department_score', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '医院评分', width: '100px', key: 'hospital_score', align: 'center' },
 | 
				
			||||||
 | 
					  { title: '操作', width: '100px', key: 'operator', customSlot: 'operator', align: 'center' },
 | 
				
			||||||
 | 
					])
 | 
				
			||||||
 | 
					const userDataSource = ref([]);
 | 
				
			||||||
 | 
					const userTabId = ref(0);
 | 
				
			||||||
 | 
					const userInfo = ref({});
 | 
				
			||||||
 | 
					const searchAccountUser = ref(dayjs().year());
 | 
				
			||||||
 | 
					const openUserListShow = (row) => {
 | 
				
			||||||
 | 
					  userInfo.value = row;
 | 
				
			||||||
 | 
					  userShow.value = true;
 | 
				
			||||||
 | 
					  getUserListInfo();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					const getUserListInfo = () => {
 | 
				
			||||||
 | 
					  getAnnualFindData({
 | 
				
			||||||
 | 
					    'user_id': userInfo.value.id,
 | 
				
			||||||
 | 
					    'evaluation_id': userTabId.value,
 | 
				
			||||||
 | 
					    'time': searchAccountUser.value
 | 
				
			||||||
 | 
					  }).then((res) => {
 | 
				
			||||||
 | 
					    console.log(res)
 | 
				
			||||||
 | 
					    if(res.code==1){
 | 
				
			||||||
 | 
					      userDataSource.value = res.data;
 | 
				
			||||||
 | 
					    }else{
 | 
				
			||||||
 | 
					      userDataSource.value = [];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					const openUserTab = (d) => {
 | 
				
			||||||
 | 
					  console.log(d)
 | 
				
			||||||
 | 
					  userTabId.value = d;
 | 
				
			||||||
 | 
					  userDataSource.value = [];
 | 
				
			||||||
 | 
					  getUserListInfo();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					const getMonthlyInfo = (item) => {
 | 
				
			||||||
 | 
					  addIsInfo.value=2;
 | 
				
			||||||
 | 
					  infoShow.value = true;
 | 
				
			||||||
 | 
					  console.log(item);
 | 
				
			||||||
 | 
					  item.time=item.year;
 | 
				
			||||||
 | 
					  getInfoMode(item);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					const toUserSearch = () => {
 | 
				
			||||||
 | 
					  getUserListInfo();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
const openTab = (d) => {
 | 
					const openTab = (d) => {
 | 
				
			||||||
  console.log(d)
 | 
					  console.log(d)
 | 
				
			||||||
  tab_id.value = d;
 | 
					  tab_id.value = d;
 | 
				
			||||||
@ -161,6 +259,7 @@ const getTabList = () => {
 | 
				
			|||||||
    if (res.code == 1) {
 | 
					    if (res.code == 1) {
 | 
				
			||||||
      tabList.value = res.data;
 | 
					      tabList.value = res.data;
 | 
				
			||||||
      tab_id.value = res.data[0].id;
 | 
					      tab_id.value = res.data[0].id;
 | 
				
			||||||
 | 
					      userTabId.value = res.data[0].id;
 | 
				
			||||||
      getList();
 | 
					      getList();
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      layer.msg(res.msg, {icon: 2})
 | 
					      layer.msg(res.msg, {icon: 2})
 | 
				
			||||||
@ -214,10 +313,10 @@ const columns = ref([
 | 
				
			|||||||
  {title: '选项', width: '55px', type: 'checkbox', align: 'center'},
 | 
					  {title: '选项', width: '55px', type: 'checkbox', align: 'center'},
 | 
				
			||||||
  {title: '序号', width: '60px', key: 'id', align: 'center'},
 | 
					  {title: '序号', width: '60px', key: 'id', align: 'center'},
 | 
				
			||||||
  {title: '年度', width: '80px', key: 'time', align: 'center'},
 | 
					  {title: '年度', width: '80px', key: 'time', align: 'center'},
 | 
				
			||||||
  {title: '考评对象', width: '100px', key: 'nickname', align: 'center'},
 | 
					  {title: '考评对象', width: '100px', key: 'nickname', customSlot: 'nickname', align: 'center'},
 | 
				
			||||||
  {title: '工号', width: '100px', key: 'work_number', align: 'center'},
 | 
					  {title: '工号', width: '100px', key: 'work_number', align: 'center'},
 | 
				
			||||||
  {title: '部门', width: '120px', key: 'group_name', align: 'center'},
 | 
					  {title: '部门', width: '120px', key: 'group_name', align: 'center'},
 | 
				
			||||||
  {title: '年度总加分', width: '100px', key: 'zongjiafen', align: 'center'},
 | 
					  {title: '医院评分', width: '100px', key: 'hospital_score', align: 'center'},
 | 
				
			||||||
  {title: '科室评分', width: '100px', key: 'department_score_scoringrecord', align: 'center'},
 | 
					  {title: '科室评分', width: '100px', key: 'department_score_scoringrecord', align: 'center'},
 | 
				
			||||||
  {title: '自评总分', width: '100px', key: 'user_scoringrecord', align: 'center'},
 | 
					  {title: '自评总分', width: '100px', key: 'user_scoringrecord', align: 'center'},
 | 
				
			||||||
  {title: '自评状态', width: '100px', key: 'scoringrecord_status', customSlot: 'scoringrecord_status', align: 'center'},
 | 
					  {title: '自评状态', width: '100px', key: 'scoringrecord_status', customSlot: 'scoringrecord_status', align: 'center'},
 | 
				
			||||||
 | 
				
			|||||||
@ -221,16 +221,6 @@ const columns = [
 | 
				
			|||||||
    align: 'center',
 | 
					    align: 'center',
 | 
				
			||||||
    key: 'createtime'
 | 
					    key: 'createtime'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    title: '加分',
 | 
					 | 
				
			||||||
    key: 'remark',
 | 
					 | 
				
			||||||
    align: 'center',
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    title: '扣分',
 | 
					 | 
				
			||||||
    key: 'remark',
 | 
					 | 
				
			||||||
    align: 'center',
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    title: '自评总分',
 | 
					    title: '自评总分',
 | 
				
			||||||
    key: 'self_score',
 | 
					    key: 'self_score',
 | 
				
			||||||
@ -240,6 +230,10 @@ const columns = [
 | 
				
			|||||||
    key: 'department_score',
 | 
					    key: 'department_score',
 | 
				
			||||||
    customSlot: 'department_score',
 | 
					    customSlot: 'department_score',
 | 
				
			||||||
    align: 'center',
 | 
					    align: 'center',
 | 
				
			||||||
 | 
					  }, {
 | 
				
			||||||
 | 
					    title: '医院评分',
 | 
				
			||||||
 | 
					    key: 'hospital_score',
 | 
				
			||||||
 | 
					    align: 'center',
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    title: '操作',
 | 
					    title: '操作',
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ export default defineConfig({
 | 
				
			|||||||
  server: {
 | 
					  server: {
 | 
				
			||||||
    proxy: {
 | 
					    proxy: {
 | 
				
			||||||
      '/api': {
 | 
					      '/api': {
 | 
				
			||||||
        target: 'http://192.168.10.140/',
 | 
					        target: 'http://127.0.0.1/',
 | 
				
			||||||
        changeOrigin: true,
 | 
					        changeOrigin: true,
 | 
				
			||||||
        rewrite: (path) => path.replace(/^\/api/, '')
 | 
					        rewrite: (path) => path.replace(/^\/api/, '')
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user