前后端项目-part03
文章目录
- 5.4.4 机构名称
- 5.4.4.1 创建实体类Company
- 5.4.4.2 创建实体类CompanyMapper
- 5.4.4.3 创建实体类CompanyService
- 5.4.4.4 创建实体类CompanyController
- 5.4.4.5 后端测试
- 5.4.4.6 修改basic.js
- 5.4.4.7 修改course.vue
- 5.4.4.8 测试
- 5.4.5 课程标签
- 5.4.5.1 效果
- 5.4.5.2 修改course.vue
- 5.4.6 课程图片上传
- 5.4.6.1 前端开发
- 5.4.6.2 后端开发
- 5.4.6.3 测试
- 6 分页查课程信息
- 6.1 后台开发
- 6.1.1 修改实体类course
- 6.1.2 修改CourseController
- 6.1.3 准备启动类
- 6.1.4 准备配置文件
- 6.1.5 准备配置类
- 6.1.6 测试
- 6.2 前台开发
- 6.2.1 修改course.js
- 6.2.2 修改course.vue
- 6.2.3 测试
- 6.2.1 修改course.js
- 6.2.1 修改course.js
5.4.4 机构名称
5.4.4.1 创建实体类Company
package com.zx.system.entity;import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;import java.util.Date;@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Accessors(chain = true)
@TableName("tb_company")
public class Company {private Integer id;private String name;//名称private String orgType;//c机构 p个人private String phone;//联系方式private String linkname;//联系人名称private String handPhotos;//手持证件照private String address;//机构地址private String logo;//机构logoprivate String email;//邮箱private String promiseLetter;//承诺书private String trademarkPic;//商标注册证private String intro;//简介private String briefIntro;private String mainCategory;//主营类目private String identityPic;//身份证照片private String workType;//工具性质private String businessPic;//营业执照private Date businessTerm;//营业执照有效期private String businessRegistNo;//营业执照注册号private String eduCertImg;//教育资质/学历证书照片private String eduCertTerm;//教育资质证书有效期private String eduCertNo;//教育资质/学历编号private String approvalStatus;//审核状态private String approvalComment;//审批意见private String approvalPeople;//审批人private Date approvalDate;//审批日期private Integer approvalNums;//审核次数private String remark;//备注private Date createDate;private Date changeDate;private Integer tenantId;//租户IDprivate String idCard;//身份证号private String teacherCertImg;//教师资格证照片private String teacherCertNo;//教师资格证号码private Integer status;//状态private String majorCertImg;//专业证件照片private String majorCertNo;//专业证件号码private String workExperience;//教学工作经历private String workResults;//教学工作成果private String title;//机构名称
}
5.4.4.2 创建实体类CompanyMapper
package com.zx.system.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zx.system.entity.Company;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface CompanyMapper extends BaseMapper<Company> {
}
5.4.4.3 创建实体类CompanyService
package com.zx.system.service;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zx.system.entity.Company;
import com.zx.system.mapper.CompanyMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class CompanyService extends ServiceImpl<CompanyMapper, Company> {@Autowiredprivate CompanyMapper companyMapper;public List<Company> selectAll(){QueryWrapper qw = new QueryWrapper();qw.select("id","name","org_type","phone","linkname");//查询指定列qw.eq("status",1);//1正常0停用qw.orderByDesc("create_date");//倒序return companyMapper.selectList(qw);}}
5.4.4.4 创建实体类CompanyController
package com.zx.system.controller;import com.zx.system.entity.Company;
import com.zx.system.service.CompanyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@CrossOrigin
@RequestMapping("/system/company")
public class CompanyController {@Autowiredprivate CompanyService companyService;@GetMapping("/selectAll")public List<Company> selectAll(){return companyService.selectAll();}
}
5.4.4.5 后端测试
5.4.4.6 修改basic.js
// 课程管理CRUD
import axios from '../axios.js'//获取分类信息
const zx_basic = 'http://localhost:9999/basic'//去后台,获取所有分类的三级树
export const AllCategory = async ()=>{const res = await axios.get(zx_basic+"/category/getTree")return res
}//去后台,获取一级分类
export const Level1Category = async ()=>{const res = await axios.get(zx_basic+"/category/level1Category")return res
}//根据字典编号,获取字典信息
export const GetDict = async (code)=>{const res = await axios.get(zx_basic+"/dictionary/getDicItems/"+code)return res
}//去后台//获取所有机构信息
const zx_system = 'http://localhost:8888/system'
export const GetCompany = async ()=>{const res = await axios.get(zx_system+"/company/selectAll")return res
}
5.4.4.7 修改course.vue
<template><el-card shadow="always"><h3><el-icon><ElementPlus /></el-icon>课程管理</h3><el-row style="padding:10px;" gutter="3"><el-col span="8"><el-button type="primary" size="small" @click="toAdd"><el-icon><CirclePlus /></el-icon> 新增</el-button><el-button v-if="multipleSelection.length" type="danger" size="small" @click="handlerMuchDel">删除多条</el-button></el-col><el-col span="16"><el-input size="small" v-model="searchName" placeholder="按课程名称搜索"><template #append><el-icon><Search/></el-icon></template></el-input></el-col></el-row><el-table :data="filterData" @selection-change="handleSelectionChange" border><el-table-column prop="id" type="selection" width="55"></el-table-column><el-table-column prop="planNum" label="计划数量" heder-align="center"></el-table-column><el-table-column prop="companyName" label="公司名称" heder-align="center" ></el-table-column><el-table-column prop="name" label="课程名称" heder-align="center"></el-table-column><el-table-column prop="tags" label="课程标签" heder-align="center" ></el-table-column><el-table-column prop="mtName" label="大分类名称" heder-align="center" ></el-table-column><el-table-column prop="stName" label="小分类名称" heder-align="center" ></el-table-column><el-table-column prop="grade" label="课程等级" heder-align="center" ></el-table-column><el-table-column prop="teachmode" label="教学模式" heder-align="center" ></el-table-column><el-table-column prop="auditStatus" label="审核状态" heder-align="center" ></el-table-column><el-table-column prop="coursePubId" label="发布标识" heder-align="center" ></el-table-column><el-table-column prop="price" label="课程单价" heder-align="center" ></el-table-column><el-table-column prop="createDate" label="创建时间" :formatter="formatDate" align="center"/><el-table-column prop="auditDate" label="审核时间" :formatter="formatDate" align="center"/><el-table-column label="操作" align="center"><template #default="scope"><el-button @click="toEdit(scope.$index)" type="success" size="small"><el-icon><EditPen/></el-icon>修改</el-button><el-button @click="handleDel(scope.row.id)" type="danger" size="small"><el-icon><Delete/></el-icon>删除</el-button><el-button @click="handlePub(scope.row.id)" type="danger" size="small"><el-icon><Delete/></el-icon>发布</el-button><el-button @click="handleDown(scope.row.id)" type="danger" size="small"><el-icon><Delete/></el-icon>下架</el-button></template></el-table-column></el-table><!-- 分页条 --><div style=""><el-pagination :current-page="page.pageNum" :page-size="page.pageSize" :page-sizes="[5,10,50,100]"layout="total,sizes,prev,pager,next,jumper" :total="page.total" @size-change="handleSizeChange" @current-change="handleCurrentChange"></el-pagination></div></el-card><!-- 设置对话框 --><el-dialog v-model="dialogVisible" draggable><template #header><h4><el-icon><Brush/></el-icon> {{dialogType==='add'?'新增':'修改'}}课程管理</h4></template><el-form :model="form.data" label-position="left" label-width="120px"><el-form-item label="机构名称"><el-select v-model="form.data.companyId" placeholder="请选择"><el-option v-for="item in companyOptions" :key="item.id" :label="item.name" :value="item.id"></el-option></el-select></el-form-item><el-form-item label="课程名称"><el-input v-model="form.data.name" show-word-limit maxlength="100"></el-input></el-form-item><el-form-item label="适用人群"><el-input v-model="form.data.users" type="textarea"show-word-limit maxlength="500" :autosize="{minRows:2,maxRows:4}"></el-input></el-form-item><el-form-item label="课程标签"><el-input v-model="form.data.tags"></el-input></el-form-item><!-- 4个下拉框 --><el-form-item label="一级分类"><el-select v-model="form.data.mt" placeholder="请选择"><el-option v-for="item in mtOptions" :key="item.id" :label="item.name" :value="item.id"></el-option></el-select></el-form-item><el-form-item label="二级分类"><!-- 二级分类树 --><el-select v-model="form.data.st" placeholder="请选择"><el-option :value="selectValue" :label="selectValue" style="height: 200px;overflow: auto;" ><el-tree :data="stOptions" @node-click="handleNodeClick"></el-tree></el-option></el-select></el-form-item><el-form-item label="课程等级"><el-select v-model="form.data.grade" placeholder="请选择"><!-- 遍历gradeOptions :key遍历的id :label要展示的数据 :value根据key获取到的value--><el-option v-for="item in gradeOptions" :key="item.code" :label="item.desc" :value="item.code"></el-option></el-select></el-form-item><el-form-item label="教学模式"><el-select v-model="form.data.teachmode" placeholder="请选择"><el-option v-for="item in teachmodeOptions" :key="item.code" :label="item.desc" :value="item.code"></el-option></el-select></el-form-item><el-form-item label="课程介绍"><el-input v-model="form.data.description" type="textarea"show-word-limit maxlength="1000" :autosize="{minRows:4,maxRows:10}"></el-input></el-form-item><el-form-item label="课程图片"><el-input v-model="form.data.pic"></el-input></el-form-item><el-form-item label="课程单价"><el-input v-model="form.data.price">(元)</el-input></el-form-item></el-form><div style=""><el-button @click="dialogSave" type="success">保存</el-button><el-button @click="dialogCancle" type="primary">取消</el-button></div></el-dialog>
</template><script setup>// 一级分类:::: 1.引入jsimport {GetCompany,Level1Category,AllCategory,GetDict} from '../../api/basic.js'import { ref, reactive } from 'vue'import {ElMessageBox} from 'element-plus'//导入消息提示框import {toast} from '../../tools/utils.js'import {CoursePage,CourseDel,CourseSave} from '../../api/course.js'const dialogVisible = ref(false)//对话框是否展示const dialogType = ref('add')//对话框新增还是修改const searchName = ref('')//按照课程名称查询//查后台数据,准备4个下拉框的值,value值是要传给后台的,label的值是要在页面展示的//:::: 一级分类:::: 2.使用1.引入js的结果,利用axios获取数据let mtOptions = ref([]) //一级分类//响应式声明变量Level1Category().then(res=>{// console.log(res)mtOptions.value = res //给响应式变量赋值要用value属性}).catch(err=>{})//:::: 二级分类:::: let stOptions = ref([]) AllCategory().then(res=>{stOptions=resconsole.log(res+'-'+stOptions)}).catch(err=>{console.log(err)})const selectValue=ref()const handleNodeClick=(e,node)=>{selectValue.value=e.value+'->'+e.labelform.data.st=selectValue.value}let gradeOptions = ref([]) //课程等级204,课程模式200GetDict(204).then((res=>{// console.log(res)gradeOptions.value=res})).catch(err=>{console.log(err)})let teachmodeOptions = ref([]) //教学模式GetDict(200).then(res=>{teachmodeOptions=res}).catch(err=>{console.log(err)})//===============机构名称let companyOptions = ref([]) GetCompany().then(res=>{companyOptions.value=res}).catch(err=>{console.log(err)})//多选const multipleSelection = ref([])//临时存放选中的数据,实际上就是多个rowconst handleSelectionChange=(val)=>{//当点击多选按钮时就会触发multipleSelection.value = val}//准备表格数据,const state = reactive({tableDate:[]})//空数组const handleDel=(id)=>{ElMessageBox.confirm('您是否确认删除此记录?','提示',{confirmButtonText:'确认',cancelButtonText:'取消',type:'warning'}).then(()=>{CourseDel(id).then(res=>{toast('删除记录成功!')loadingData(1,page.pageSize)//重新查询,默认展示第一页}).catch(err=>{console.log(err)})}).catch(()=>{})}//删除多条const handlerMuchDel=()=>{ElMessageBox.confirm('您是否确认删除此记录?','提示',{confirmButtonText:'确认',cancelButtonText
相关文章:

前后端项目-part03
文章目录 5.4.4 机构名称5.4.4.1 创建实体类Company5.4.4.2 创建实体类CompanyMapper5.4.4.3 创建实体类CompanyService5.4.4.4 创建实体类CompanyController5.4.4.5 后端测试5.4.4.6 修改basic.js5.4.4.7 修改course.vue5.4.4.8 测试5.4.5 课程标签5.4.5.1 效果5.4.5.2 修改co…...

Java 1.8 docker 镜像制作
文章目录 一、下载文件二、精简JRE三、Dockerfile四、构建镜像五、容器测试 一、下载文件 glibc 下载地址 glibc-2.33-r0.apk glibc-bin-2.33-r0.apk glibc-i18n-2.33-r0.apk rsa sgerrand.rsa.pub jre 1.8 jre-8u201-linux-x64.tar.gz 二、精简JRE 解压 tar -zxvf jre-8…...

python中自定义报错
class MyError(Exception):def __init__(self,num):#录入的数Exception.__init__(self)self.numnumdef __str__(self):return 这是我定义的第%d个异常 %(self.num)使用 try:raise MyError(4) except MyError as e:print(e)raise 其作用是指定抛出的异常名称,以及异常…...
part1:sora技术
1.Sora能力边界探索 从sora的视频合集里看到了多段视频,假如我不知道这是sora视频合计,估计我第一反应并不是AI生成了这些视频,可以说在我这里通过了图灵测试😊。 在视频合集里还有同一场景的多角度/镜头的生成能力,让…...

RK3568平台开发系列讲解(基础篇)文件私有数据
🚀返回专栏总目录 文章目录 一、文件私有数据二、文件私有数据实验沉淀、分享、成长,让自己和他人都能有所收获!😄 一、文件私有数据 Linux 中并没有明确规定要使用文件私有数据,但是在 linux 驱动源码中,广泛使用了文件私有数据,这是 Linux 驱动遵循的“潜规则”,实…...

跨时钟信号处理方法
1. 背景 现在的芯片(比如SOC,片上系统)集成度和复杂度越来越高,通常一颗芯片上会有许多不同的信号工作在不同的时钟频率下。比如SOC芯片中的CPU通常会工作在一个频率上,总线信号(比如DRAM BUS)会…...

OD(13)之Mermaid饼图和象限图
OD(13)之Mermaid饼图和象限图使用详解 Author: Once Day Date: 2024年2月29日 漫漫长路才刚刚开始… 全系列文章可参考专栏: Mermaid使用指南_Once_day的博客-CSDN博客 参考文章: 关于 Mermaid | Mermaid 中文网 (nodejs.cn)Mermaid | Diagramming and charting tool…...

基于springboot+vue的智能无人仓库管理系统
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 主要内容:毕业设计(Javaweb项目|小程序|Pyt…...

图神经网络实战——图论
图神经网络实战——图论 0. 前言1. 图属性1.1 有向图和无向图1.2 加权图与非加权图1.3 连通图非连通图1.4 其它图类型 2. 图概念2.1 基本对象2.2 图的度量指标2.2 邻接矩阵表示法 3. 图算法3.1 广度优先搜索3.2 深度优先搜索 小结系列链接 0. 前言 图论 (Graph theory) 是数学…...
【PHP进阶】Rabbitmq的实际使用
RabbitMQ是一个流行的消息队列中间件,它提供了可靠的消息传递机制。在使用RabbitMQ时,有几个重要的概念需要了解: 消息队列(Message Queue):RabbitMQ中的核心概念之一。它是消息的缓冲区,用于存…...

如何解决机器视觉高速图像处理软件的加密需求?
高速图像处理在机器视觉中的应用重要性 在机器视觉行业中,高速图像处理软件的作用至关重要,它使得机器能够迅速分析和处理成千上万的图像数据。这种能力在制造业、安防系统、交通监控等多个领域发挥着核心作用,如在制造业中,高速…...

Linux的条件变量
条件变量 条件变量本身不是锁,但是它可以造成线程阻塞。通常于互斥锁配合使用。给多线程提供一个会和的场合。 使用互斥量保护共享数据使用条件变量可以造成线程阻塞,等待某个条件的发生,当条件满足的时候解除阻塞。 条件变量的两个动作&a…...

【Python笔记-设计模式】状态模式
一、说明 状态模式是一种行为设计模式,用于解决对象在不同状态下具有不同行为 (一) 解决问题 在对象行为根据对象状态而改变时,规避使用大量的条件语句来判断对象的状态,提高系统可维护性 (二) 使用场景 当对象的行为取决于其状态&#…...
Pytorch 复习总结 5
Pytorch 复习总结,仅供笔者使用,参考教材: 《动手学深度学习》Stanford University: Practical Machine Learning 本文主要内容为:Pytorch 卷积神经网络。 本文先介绍了 Pytorch 语法汇总: Pytorch 张量的常见运算、…...

Codeforces Round 930 (Div. 2)
Codeforces Round 930 (Div. 2) Codeforces Round 930 (Div. 2) A. Shuffle Party 题意: 给出长度为n的整数数组a, a i a_i ai i,对于k>2的下标进行运算,设d为k除本身外最大的除数, 操作为交换( a k a_k ak…...
c语言求平方与倒数序列的部分和
本题要求对两个正整数m和n(m≤n)编写程序,计算序列和m21/m(m1)21/(m1)⋯n21/n。 输入格式: 输入在一行中给出两个正整数m和n(m≤n),其间以空格分开。 输出格式: 在一行中按照“sum S”的格式输出部分和…...

Vue-4
自定义创建项目 目标:基于 VueCli 自定义创建项目架子 大致步骤: 安装脚手架创建项目 vue create 项目名称选择自定义 选择 Manually select features 这一项 step-1:按下空格 : 选择/取消--勾选请选择:Babel、Router、CSS、Linterstep-2…...

【Acwing】差分矩阵
图1:a和b数组映射表 由于a是b的前缀和数组,因此改变b[ x1][ y1]之后,受到影响的a中元素如右半图所示 图2:求b数组的前缀和 #include<bits/stdc.h> using namespace std;int n,m,q; int a[1010][1010]; int b[1010][1010]…...

Linux系统加固:如何有效管理系统账号
Linux系统加固:如何有效管理系统账号 1.1 口令重复次数限制1.2 避免系统存在uid相同的账号1.3 空密码的帐户1.4 口令复杂度1.5 口令生存期1.6 登录失败次数锁定策略 💖The Begin💖点点关注,收藏不迷路💖 在Linux系统中…...

在Windows中安装PyTorch
文章目录 1. 创建虚拟环境2. 检查显卡版本和CUDA3. 下载链接4. 下载5. 等待6. 检测 1. 创建虚拟环境 具体查看我之前写的 《在Windows中利用Python的venv和virtualenv创建虚拟环境》 2. 检查显卡版本和CUDA 这种情况是需要电脑上有单独的英伟达的显卡、或者英伟达的显卡和集显…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...