前端vue+typeScritp+elementPlus基础页面实现:

效果:

前端代码:

index.vue:

<template><el-container><el-main><el-card class="search-card" shadow="never"><transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"><el-form :inline="true" class="demo-form-inline"><el-form-item label="专科名称:"><el-select v-model="queryParams.zhuanKeMingCheng" placeholder="请选择专科名称" filterable clearable><el-option v-for="item in zhuanKeNameList" :key="item" :label="item" :value="item" /></el-select></el-form-item><el-form-item><el-button type="primary" icon="Search" @click="onSearch">搜索</el-button></el-form-item><el-form-item><el-button type="warning" icon="Plus" @click="showAddDialog">新增</el-button></el-form-item></el-form></transition></el-card><el-card class="table-card" shadow="never"><el-table :data="tableData" border style="width: 100%"><el-table-column prop="nianFen" label="年份" width="100"></el-table-column><el-table-column prop="yiYuanMingCheng" label="医院名称" width="180"></el-table-column><el-table-column prop="zhuanKeMingCheng" label="专科名称" width="180"></el-table-column><el-table-column prop="zhuanKeLeiBie" label="专科类别" width="180"></el-table-column><el-table-column prop="neiWaiKe" label="内外科" width="180"></el-table-column><el-table-column prop="zhuanKeDaiMa" label="专科代码" width="180"></el-table-column><el-table-column label="状态" width="120"><template #default="scope"><div v-if="scope.row.zhuangTai === '1'">未开始</div><div v-else-if="scope.row.zhuangTai === '2'">进行中</div><div v-else-if="scope.row.zhuangTai === '3'">已完成</div></template></el-table-column><el-table-column align="center" label="操作"><template #default="scope"><el-button size="small" plain type="primary" :disabled="scope.row.zhuangTai!=='1'" @click="handleProcess(scope.$index, scope.row)">开始申报</el-button><el-button size="small" plain type="danger" :disabled="scope.row.zhuangTai!=='1'" @click="handleDelete(scope.$index, scope.row)">删除</el-button></template></el-table-column></el-table><pagination v-show="total>0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="fetchData" /></el-card></el-main><!-- 新增对话框 --><el-dialog v-model="addDialogVisible" title="新增申报" width="30%"><el-form :model="addForm" ref="addFormRef" :rules="rules" label-width="100px"><el-form-item required label="年份" prop="nianFen"><el-date-picker  v-model="addForm.nianFen" type="year" placeholder="选择年" format="YYYY" value-format="YYYY" ></el-date-picker></el-form-item><el-form-item required label="专科名称" prop="zhuanKeName"><el-select v-model="addForm.zhuanKeName" placeholder="请选择专科名称"><el-option v-for="item in zhuanKeNameList" :key="item" :label="item" :value="item" /></el-select></el-form-item><el-form-item required label="专科类别" prop="zhuanKeLeiBie"><el-select v-model="addForm.zhuanKeLeiBie" style="width: 150px" clearable><el-option v-for="item in zhuan_ke_type" :value="item.value" :label="item.label" /></el-select></el-form-item></el-form><template #footer><span class="dialog-footer"><el-button @click="addDialogVisible = false">取消</el-button><el-button type="primary" @click="submitAddForm">提交</el-button></span></template></el-dialog></el-container>
</template><script setup lang="ts">
import {ref, onMounted, toRefs, getCurrentInstance} from 'vue';
import {addZhuanKeShenBao,getZhuanKeNameList,getZhuanKeShenBaoList,deleteZhuanKeShenBao, startShenBao
} from '@/api/keyspecialty/zhuanKeShenBao';
import {zhuankeShenBaoVo} from "@/api/keyspecialty/zhuanKeShenBao/types";
import {ElMessage} from 'element-plus';
const queryParams = ref({pageNum: 1,pageSize: 10,zhuanKeName: "",hospName: "",
})
const {proxy} = getCurrentInstance() as ComponentInternalInstance;
const {zhuan_ke_type} = toRefs<any>(proxy?.useDict("zhuan_ke_type"));//专科名称列表
const zhuanKeNameList = ref([]);
// 表格数据
const tableData = ref<zhuankeShenBaoVo[]>([]);
const total = ref(0);
// 获取数据的函数
const fetchData = async () => {try {const response = await getZhuanKeShenBaoList(queryParams.value);tableData.value = response.rows;total.value = response.total;} catch (error) {console.error('Error fetching data:', error);}
};// 页面加载时获取数据
onMounted(() => {fetchData();getZhuanKeNameListData();
});// 查询按钮点击事件
const onSearch = () => {fetchData();console.log('查询');
};// 显示新增对话框
const addDialogVisible = ref(false);
const showAddDialog = () => {//重置表单数据addForm.value = {zhuanKeName: '',zhuanKeLeiBie: '',nianFen:'',};addDialogVisible.value = true;
};
// 新增表单数据
const addForm = ref({zhuanKeName: '',zhuanKeLeiBie: '',nianFen:'',
});
// 表单ref
const addFormRef = ref();
// 提交新增表单
const submitAddForm = () => {addFormRef.value?.validate((valid: boolean) => {if (valid) {console.log('提交新增表单', addForm.value);addZhuanKeShenBao(addForm.value.zhuanKeName, addForm.value.zhuanKeLeiBie, addForm.value.nianFen).then((res) => {if (res.code === 200) {ElMessage.success('申报成功');fetchData();addDialogVisible.value = false;} else {ElMessage.error('申报失败');ElMessage.error(res.msg);}});} else {ElMessage.error('请填写完整信息');}});
};
const rules = {nianFen: [{ required: true, message: '请选择年份', trigger: 'change' }],zhuanKeName: [{ required: true, message: '请选择专科名称', trigger: 'change' }],zhuanKeLeiBie: [{ required: true, message: '请选择专科类别', trigger: 'change' }]
};
//获取专科名称列表
const getZhuanKeNameListData = async () => {try {const response = await getZhuanKeNameList();zhuanKeNameList.value = response.data;console.log('专科名称列表', zhuanKeNameList.value);} catch (error) {console.error('Error fetching data:', error);}
}
// 申报流程按钮点击事件
const handleProcess = (index: number, row: any) => {startShenBao(row.id).then((res) => {if (res.code == 200) {ElMessage.success('申报流程开始');fetchData();} else {ElMessage.error('申报流程开始失败');fetchData();}})
};// 删除按钮点击事件
const handleDelete = (index: number, row: any) => {ElMessageBox.confirm('确认删除?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning',}).then(() => {deleteZhuanKeShenBao(row.id).then((res) => {if (res.code === 200) {ElMessage.success('删除成功');fetchData();} else {ElMessage.error('删除失败');fetchData();return;}});})
};
</script>
<style scoped lang="scss">
.el-main {padding: 20px;.search-card {margin-bottom: 20px;}.table-card {padding: 10px;}
}
</style>

index.ts:

import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import {zhuankeShenBaoQuery, zhuankeShenBaoVo} from "@/api/keyspecialty/zhuanKeShenBao/types";/*** 新增专科申报* @param data*/
export const addZhuanKeShenBao = (zhuanKeName: string, zhuanKeLeiBie: string) => {return request({url: 'zhuanKeShenBao/addZhuanKeShenBao/' + zhuanKeName + '/' + zhuanKeLeiBie,method: 'post',});
};
//获取专科名称列表
export const getZhuanKeNameList = () => {return request({url: 'zhuanKeShenBao/getZhuankeNameList',method: 'get',});
};
//分页查询专科申报列表
export const getZhuanKeShenBaoList = (params: zhuankeShenBaoQuery) : AxiosPromise<zhuankeShenBaoVo[]>=> {return request({url: '/zhuanKeShenBao/getZhuanKeShenBaoList',method: 'get',params,});
}

type.ts

export interface zhuankeShenBaoQuery extends PageQuery{hospName:string,zhuanKeName:string
}
export interface zhuankeShenBaoVo{yiYuanId:number,yiYuanMingCheng:string,zhuanKeDaiMa:string,zhuanKeMingCheng:string,zhuanKeLeiBie:string,zhuangTai:string,isTuiJian:string,neiWaiKe:string
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/77629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微电网与分布式能源:智能配电技术的场景化落地

安科瑞顾强 随着数字化转型与能源革命的加速推进&#xff0c;电力系统正经历从传统模式向智能化、网络化方向的深刻变革。用户侧的智能配电与智能用电技术作为这一变革的核心驱动力&#xff0c;正在重塑电力行业的生态格局。本文将从技术架构、应用场景及未来趋势等维度&#…

绿幕抠图直播软件-蓝松抠图插件--使用相机直播,灯光需要怎么打?

使用SONY相机进行绿幕抠图直播时&#xff0c;灯光布置是关键&#xff0c;直接影响抠图效果和直播画质。以下是详细的灯光方案和注意事项&#xff1a; 一、绿幕灯光布置核心原则 均匀照明&#xff1a;绿幕表面光线需均匀&#xff0c;避免阴影和反光&#xff08;亮度差控制在0.5…

Linux Privilege Escalation: LD_PRELOAD

声明&#xff1a;本文所有操作需在授权环境下进行&#xff0c;严禁非法使用&#xff01; 0x01 什么是 LD_PRELOAD&#xff1f; LD_PRELOAD 是 Linux 系统中一个特殊的环境变量&#xff0c;它允许用户在程序启动时优先加载自定义的动态链接库&#xff08;.so 文件&#xff09;&…

程序性能(1)嵌入式基准测试工具

程序性能(1)嵌入式基准测试工具 Author&#xff1a;Once Day date: 2025年4月19日 漫漫长路&#xff0c;才刚刚开始… 全系列文档查看&#xff1a;Perf性能分析_Once-Day的博客-CSDN博客 参考文档: CPU Benchmark – MCU Benchmark – CoreMark – EEMBC Embedded Micropr…

ArrayList的subList的数据仍是集合

ArrayList的subList结果不可强转成ArrayList&#xff0c;否则会抛出 ClassCastException异常 • 级别&#xff1a; 【CRITICAL】 • 规约类型&#xff1a;BUG • 最坏影响&#xff1a; 程序错误&#xff0c;抛出异常 说明&#xff1a;subList 返回的是ArrayList的内部类SubL…

Notepad++中将文档格式从Windows(CR LF)转换为Unix(LF)

在Windows中用记事本写了一个.sh的Linux运行脚本&#xff0c;是无法直接在Linux中执行&#xff0c;需要首先把文本编码格式转换为Unix的&#xff0c;特别是换行符这些&#xff0c;转换步骤如下&#xff1a; 1、打开文档 在Notepad中打开需要转换的文件。 2、进入文档格式转换…

使用Ingress发布应用程序

使用Ingress发布应用程序 文章目录 使用Ingress发布应用程序[toc]一、什么是Ingress二、定义Ingress三、什么是Ingress控制器四、部署nginx Ingress控制器1.了解nginx Ingress控制器的部署方式2.安装nginx Ingress控制器3.本地实际测试 五、使用Ingress对外发布应用程序1.使用D…

【网络编程】TCP数据流套接字编程

目录 一. TCP API 二. TCP回显服务器-客户端 1. 服务器 2. 客户端 3. 服务端-客户端工作流程 4. 服务器优化 TCP数据流套接字编程是一种基于有连接协议的网络通信方式 一. TCP API 在TCP编程中&#xff0c;主要使用两个核心类ServerSocket 和 Socket ServerSocket Ser…

力扣刷题Day 21:两数之和(1)

1.题目描述 2.思路 暴力解法虽然不超时间限制&#xff0c;但是题解实在太妙了&#xff0c;哈希大法好&#xff01; 3.代码&#xff08;Python3&#xff09; class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:hash_table dict()for i, num i…

关于UE5的抗锯齿和TAA

关于闪烁和不稳定现象的详细解释 当您关闭抗锯齿技术时&#xff0c;场景中会出现严重的闪烁和不稳定现象&#xff0c;尤其在有细节纹理和小物体的场景中。这种现象的技术原因如下&#xff1a; 像素采样问题 在3D渲染中&#xff0c;每个像素只能表示一个颜色值&#xff0c;但…

【MySQL】MySQL建立索引不知道注意什么?

基本原则&#xff1a; 1.选择性原则&#xff1a; 选择高选择性的列建立索引(该列有大量不同的值) 2.适度原则&#xff1a;不是越多越好&#xff0c;每个索引都会增加写入开销 列选择注意事项&#xff1a; 1.常用查询条件列&#xff1a;WHERE字句中频繁使用的列 2.连接操作列…

Vue3 + TypeScript中provide和inject的用法示例

基础写法&#xff08;类型安全&#xff09; typescript // parent.component.vue import { provide, ref } from vue import type { InjectionKey } from vue// 1. 定义类型化的 InjectionKey const COUNTER_KEY Symbol() as InjectionKey<number> const USER_KEY Sy…

树莓派超全系列教程文档--(33)树莓派启动选项

树莓派启动选项 启动选项start_file &#xff0c;fixup_filecmdlinekernelarm_64bitramfsfileramfsaddrinitramfsauto_initramfsdisable_poe_fandisable_splashenable_uartforce_eeprom_reados_prefixotg_mode &#xff08;仅限Raspberry Pi 4&#xff09;overlay_prefix配置属…

java怎么找bug?Arthas原理与实战指南

Arthas原理与实战指南 1. Arthas简介 Arthas是阿里巴巴开源的Java诊断工具&#xff0c;其名字取自《魔兽世界》的人物阿尔萨斯。它面向线上问题定位&#xff0c;被广泛应用于性能分析、定位问题、安全审计等场景。Arthas的核心价值在于它能够在不修改应用代码、不重启Java进程…

Python自学第1天:变量,打印,类型转化

突然想学Python了。经过Deepseek的推荐&#xff0c;下载了一个Python3.12安装。安装过程请自行搜索。 乖乖从最基础的学起来&#xff0c;废话不说了&#xff0c;上链接&#xff0c;呃&#xff0c;打错了&#xff0c;上知识点。 变量的定义 # 定义一个整数类型的变量 age 10#…

基于STM32中断讲解

基于STM32中断讲解 一、NVIC讲解 简介&#xff1a;当一个中断请求到达时&#xff0c;NVIC会确定其优先级并决定是否应该中断当前执行的程序&#xff0c;以便及时响应和处理该中断请求。这种设计有助于提高系统的响应速度和可靠性&#xff0c;特别是在需要处理大量中断请求的实…

游戏盾和高防ip有什么区别

游戏盾和高防IP都是针对网络攻击的防护方案&#xff0c;但​​核心目标、技术侧重点和应用场景存在显著差异​​。以下是两者的详细对比分析&#xff1a; ​​一、核心定位与目标​​ ​​维度​​​​高防IP​​​​游戏盾​​​​核心目标​​抵御大流量网络攻击&#xff08…

Spark-SQL3

Spark-SQL 一.Spark-SQL核心编程&#xff08;四&#xff09; 1.数据加载与保存&#xff1a; 1&#xff09;通用方式&#xff1a; SparkSQL 提供了通用的保存数据和数据加载的方式。这里的通用指的是使用相同的API&#xff0c;根据不同的参数读取和保存不同格式的数据&#…

DeepSeek与Napkin:信息可视化领域的创新利器

摘要 在数字化信息爆炸的时代&#xff0c;如何高效地组织思路并将其转化为直观、清晰的可视化图表&#xff0c;成为众多领域面临的关键问题。本文深入剖析了DeepSeek与Napkin这两款工具&#xff0c;详细探讨它们在信息处理与可视化过程中的功能特性、协同工作机制、应用场景、…

conda 创建、激活、退出、删除环境命令

参考博客&#xff1a;Anaconda创建环境、删除环境、激活环境、退出环境 使用起来觉得有些不方便可以改进&#xff0c;故写此文。 1. 创建环境 使用 -y 跳过确认 conda create -n 你的环境名 -y 也可以直接选择特定版本 python 安装&#xff0c;以 3.10 为例&#xff1a; co…