代码片段Vue+js

<template>
    <div>
        <h3>我的授课课程</h3>
        <!--面包屑导航区域-->
        <el-breadcrumb separator-class="el-icon-arrow-right">
            <el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
            <el-breadcrumb-item>课程管理</el-breadcrumb-item>
            <el-breadcrumb-item>授课课程</el-breadcrumb-item>
        </el-breadcrumb>
        <!-- 卡片视图区域 -->
        <el-card>
            <!-- 搜索与添加区域 -->
            <!-- :gutter="20"两个row之间的距离 -->
            <el-row :gutter="20">
                <!-- 总共是24份,:span="7"是占据7份 -->
                <el-col :span="8">
                    <!-- 查询条件 -->
                    <el-input placeholder="请输入内容"  v-model="queryInfo.condition"  clearable  @clear="getUserList">
                        <template #append>
                            <!-- 查询用户 -->
                            <el-button icon="el-icon-search" @click="getUserList"></el-button>
                        </template>
                    </el-input>
                </el-col>
                <!-- 占据4份 -->
                <el-col :span="4">
                    <!-- 添加用户按钮-->
                    <el-button type="primary" @click="addDialogVisible = true">添加课程</el-button>
                </el-col>
            </el-row>

            <!-- 用户列表区域 -->
            <!-- :data="userlist"设置数据源 border添加边框线 stripe隔行变色 -->
            <el-table :data="courselist" border stripe>
                <!-- type="index"表示本行是索引列 -->
                <el-table-column type="index"></el-table-column>
                         <!-- 每一列的数据 prop是设置数据源的字段-->
                <el-table-column label="课程ID" prop="课程ID"></el-table-column>
                <el-table-column label="教学班级" prop="教学班级"></el-table-column>
                <el-table-column label="课程名" prop="课程名"></el-table-column>
                <el-table-column label="授课教师" prop="授课教师"></el-table-column>
                <el-table-column label="课程状态">
                    <!-- 如果同时给这一行指定了作用域插槽,那么这一行的prop="mg_state"就会被覆盖,所以就可以删了 -->
                    <template v-slot="slotProps">
                        <!-- slotProps.row就是当前这一行的数据 -->
                        <!-- 这里不用父组件对子组件的内容进行加工,所以不用在子组件中写<slot :info='item'>我是默认内容</slot> -->
                        <el-switch v-model="slotProps.row.开课状态==1" @change="userStageChanged(slotProps.row)"></el-switch>
                    </template>
                </el-table-column>
                <el-table-column label="操作" width="180px">
                    <template v-slot="slotProps">
                        {{slotProps.row.mg_state ? "" : ""}}
                        <!-- 修改按钮 -->
                        <el-button type="primary" icon="el-icon-edit" size="mini" @click="showEditDialog(slotProps.row)"></el-button>
                        <!-- 删除按钮 -->
                        <el-button type="danger" icon="el-icon-delete" size="mini" @click="removeCourseById(slotProps.row.课程ID)"></el-button>
                        <!-- 分配角色按钮 -->
                        <!-- effect="dark"设置的没有效果,不知道为啥,以后解决!!!!!!!!!! -->
                        <!-- :enterable="false"设置鼠标进入的时候也会自动隐藏,否则鼠标放上去会一直显示 -->
                        <el-tooltip effect="dark" content="发起签到" placement="top" :enterable="false">
                            <el-button type="warning" icon="el-icon-setting" size="mini" @click="setRole(slotProps.row)"></el-button>
                        </el-tooltip>
                    </template>
                </el-table-column>
            </el-table>

            <!-- 分页区域 -->
            <el-pagination
                    @size-change="handleSizeChange"
                    @current-change="handleCurrentChange"
                    :current-page="queryInfo.pagenum"
                    :page-sizes="[1, 2, 5, 10]"
                    :page-size="queryInfo.pagesize"
                    layout="total, sizes, prev, pager, next, jumper"
                    :total="total">
            </el-pagination>
        </el-card>

        <!-- 添加用户的对话框 -->
        <el-dialog title="添加课程" :visible.sync="addDialogVisible" width="50%" @close="addDialogClosed">
            <!-- 内容主体区域表单 -->
            <el-form :model="addForm" :rules="addFormRules" ref="addFormRef" label-width="70px">
                <!-- 通过prop="username"指定具体的校验规则 -->
                <el-form-item label="课程名" prop="coursename">
                    <el-input v-model="addForm.coursename"></el-input>
                </el-form-item>
                <el-form-item label="授课教师">
                    <el-input v-model="addForm.teacher" readonly="readonly" ></el-input>
                </el-form-item>
                <el-col :span="12">
                    <el-form-item label="教学班级">
                        <el-select v-model="addForm.class" clearable placeholder="请选择班级">
                            <el-option v-for="(item,index) in classlist" :key="index" :label="item.班级" :value="item.班级"></el-option>
                        </el-select>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="开课状态">
                        <el-select v-model="addForm.isopenstu" clearable placeholder="请选择班级状态">
                            <el-option label="暂不开课" :value="0"></el-option>
                            <el-option label="立即开课" :value="1"></el-option>
                        </el-select>
                    </el-form-item>
                </el-col>
            </el-form>
            <!-- 底部区域 -->
            <template #footer>
                <span class="dialog-footer">
                  <el-button @click="addDialogVisible = false">取 消</el-button>
                  <el-button type="primary" @click="addCourse">确 定</el-button>
                </span>
            </template>
        </el-dialog>

        <!-- 修改课程的对话框 -->
        <el-dialog title="修改课程" :visible.sync="editDialogVisible" width="50%" @close="editDialogClosed">
            <!-- 内容主体区域表单 -->
            <el-form :model="editForm" :rules="editFormRules" ref="editFormRef" label-width="70px">
                <el-form-item label="课程ID" >
                    <el-input v-model="editForm.classid" disabled></el-input>
                </el-form-item>
                <el-form-item label="课程名"  prop="coursename">
                    <el-input v-model="editForm.coursename" ></el-input>
                </el-form-item>
                <el-form-item label="授课教师">
                    <el-input v-model="editForm.teacher" disabled></el-input>
                </el-form-item>
<!--                <el-col :span="12">-->
<!--                    <el-form-item label="教学班级">-->
<!--                        <el-select v-model="editForm.class" clearable placeholder="请选择班级">-->
<!--                            <el-option v-for="(item,index) in classlist" :key="index" :label="item.班级" :value="item.班级"></el-option>-->
<!--                        </el-select>-->
<!--                    </el-form-item>-->
<!--                </el-col>-->
                <el-form-item label="教学班级">
                    <el-input v-model="editForm.class" disabled></el-input>
                </el-form-item>
                <el-col :span="12">
                    <el-form-item label="开课状态">
                        <el-select v-model="editForm.isopenstu" clearable placeholder="请选择班级状态">
                            <el-option label="暂不开课" :value="0"></el-option>
                            <el-option label="立即开课" :value="1"></el-option>
                        </el-select>
                    </el-form-item>
                </el-col>
            </el-form>
            <!-- 底部区域 -->
            <template #footer>
                <span class="dialog-footer">
                  <el-button @click="editDialogVisible = false">取 消</el-button>
                  <el-button type="primary" @click="editCourseInfo">确 定</el-button>
                </span>
            </template>
        </el-dialog>
    </div>
</template>

<script>
    export default {
        data() {

            return {
                // 获取用户列表的参数对象
                queryInfo: {
                    condition: '',
                    // 当前的页数
                    pagenum: 1,
                    // 当前页显示多少条
                    pagesize: 5
                },
                // 课程列表
                courselist: [],
                user:"",
                // 总条数
                total: 0,
                // 班级列表
                classlist: [],
                // 添加用户对话框的显示和隐藏
                addDialogVisible: false,
                // 添加用户的表单数据对象
                addForm: {
                    coursename: '',
                    teacher: '',
                    class: '',
                    isopenstu: 1
                },
                // 添加用户表单的验证规则对象
                addFormRules: {
                    coursename: [
                        { required: true, message: '请输入课程名', trigger: 'blur' },
                        { min: 3, max: 10, message: '课程名的长度在3-10个字符之间', trigger: 'blur' }
                    ],
                    isopenstu: [
                        { required: true, message: '请选择课程状态', trigger: 'blur' },
                        { min: 0, max: 1, message: '必须选择一个', trigger: 'blur' }
                    ],
                    // mobile: [
                    //     { required: true, message: '请输入手机', trigger: 'blur' },
                    //     { validator: checkMobile, trigger: 'blur' }
                    // ]
                },
                // 修改用户对话框的显示和隐藏
                editDialogVisible: false,
                // 修改用户的表单数据对象
                editForm: {
                    classid:null,
                    coursename: '',
                    teacher: '',
                    class: '',
                    isopenstu: 1
                },
                // 修改用户表单的验证规则对象
                editFormRules: {
                    coursename: [
                        { required: true, message: '请输入课程名', trigger: 'blur' },
                        { min: 3, max: 10, message: '课程名的长度在3-10个字符之间', trigger: 'blur' }
                    ],
                    // mobile: [
                    //     { required: true, message: '请输入手机', trigger: 'blur' },
                    //     { validator: checkMobile, trigger: 'blur' }
                    // ]
                },
            }
        },
        created() {
            this.getUserList()
            this.user=window.sessionStorage.getItem('user');
            this.addForm.teacher=window.sessionStorage.getItem('user');
        },
        computed:{
            thiscondition:function () {
                var s = this.queryInfo.condition;
                console.log(s)
                if (s==""){
                    this.getUserList()
                }
                return s;
            }
        },
        methods:{
            //获取授课课程
            async getUserList() {
                var nam=window.sessionStorage.getItem('user')
                const { data: res } = await this.$http.get('StuUser/Mycourse',
                        {params:{name:nam,pagenum:this.queryInfo.pagenum,
                                pagesize:this.queryInfo.pagesize,condition:this.queryInfo.condition}})
                const { data: cla } = await this.$http.get('StuUser/class')
                if (res.code !== 200) return this.$message.error('暂无符合条件的课程')
                if (cla.code !== 200) return this.$message.error('班级搜索失败')
                this.courselist = res.data;
                this.classlist = cla.class;
                this.total = res.total; //条数
                console.log(cla.class)
            },
            // 监听分页size改变的事件
            handleSizeChange(newSize) {
                this.queryInfo.pagesize = newSize   // 当前页显示多少条
                // 重新请求数据
                this.getUserList()
            },
            // 监听页码值改变
            handleCurrentChange(newPage) {
                this.queryInfo.pagenum = newPage   // 当前的页数
                // 重新请求数据
                this.getUserList()
            },
            // 监听课程状态的改变
            async userStageChanged(userInfo) {
                console.log(userInfo)
                userInfo.开课状态 = (userInfo.开课状态==1)?0:1;
                const { data: res } = await this.$http.put(`StuUser/${userInfo.课程ID}`,{"status":userInfo.开课状态});
                console.log(res)
                if (res.code !== 200) {
                    userInfo.开课状态 = (userInfo.开课状态===1)?0:1;
                    return this.$message.error('课程状态更新失败')
                }
                this.$message.success('课程状态更新成功')
            },
            // 监听添加课程对话框关闭事件
            addDialogClosed() {
                // 重置对话框
                this.$refs.addFormRef.resetFields()
            },
            // 点击按钮,添加用户
            addCourse() {
                this.$refs.addFormRef.validate(async valid => {
                    // 校验成功
                    if (valid) {
                        console.log(this.addForm.coursename)
                        const { data: res } = await this.$http.post('StuUser/addCourse',this.addForm);
                        console.log(res)
                        if (res.code !== 200) {
                            this.$message.error('添加课程失败')
                        }
                        this.$message.success('添加课程成功')
                        // 隐藏对话框
                        this.addDialogVisible = false
                        // 刷新
                        this.getUserList()
                    }
                })
            },
            // 展示修改用户信息的对话框
            async showEditDialog(data) {
                console.log(data)
                this.editForm['classid']=data['课程ID']
                this.editForm['coursename']=data['课程名']
                this.editForm['teacher']=data['授课教师']
                this.editForm['class']=data['教学班级']
                this.editForm['isopenstu']=data['开课状态']
                console.log(this.editForm)
                this.$message.success('请修改课程信息')
                this.editDialogVisible = true
            },
            // 编辑对话框的关闭操作
            editDialogClosed() {
                this.$refs.editFormRef.resetFields()
            },
            // 修改课程信息提交
            editCourseInfo() {
                this.$refs.editFormRef.validate(async valid => {
                    // console.log(valid)
                    if (valid) {
                        // 发起修改用户信息的请求
                        console.log(this.editForm.isopenstu)
                        const { data: res } = await this.$http.put(`StuUser/upCourse/${this.editForm.classid}`,
                                    {"status":this.editForm.isopenstu,"coursename":this.editForm.coursename});
                        // const { data: res } = await this.$http.get('Cuser/upCourse',{params:this.editForm})
                        if (res.code !== 200) {
                            return this.$message.error('更新课程信息失败')
                        }
                        this.editDialogVisible = false
                        this.getUserList()
                        this.$message.success('更新课程信息成功')
                    }
                })
            },
            // 根据id删除用户信息
            async removeCourseById(id) {
                // console.log(id)
                // 需要挂载ElMessageBox.confirm才可以这样使用
                const confirmResult = await this.$confirm('此操作将永久删除该用户, 是否继续?', '提示', {
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    type: 'warning'
                }).catch(err => err)
                // 如果删除成功,则返回字符串confirm,如果取消了,则一定要捕获错误,然后取消之后返回字符串cancel
                // console.log(confirmResult)
                if (confirmResult !== 'confirm') {
                    return this.$message.info('已经取消了删除')
                }
                // const { data: res } = await this.$http.post('/StuUser?id=' + id)
                // const { data: res } = await this.$http.post('/StuUser/' + id)
                const { data: res } = await this.$http.delete('/StuUser/' + id)
                console.log(res)
                if (res.code !== 200) {
                    return this.$message.err('删除课程失败')
                }
                this.$message.success('删除课程成功')
                this.getUserList()
            },
        }
}
</script>

<style scoped>

</style>
function errorReturn(msg){
    var m = "网络异常,请重新尝试";
    if(msg){
        m = msg;
    }
    //弹出消息 2秒后关闭
    layer.msg(m,{
        time:2000
    },function(){
        //关闭当前窗体
        parent.layer.close(parent.layer.getFrameIndex(window.name));
    })
}

var form;  //全局存放一个叫form的组件
$(document).ready(function(){
    form = layui.form;

    /**
     * 初始化数据设置
     */
    var load = layer.load(2); // 2号样式
    $.ajax({
        url:config.url + "/back/adminType/getAdminTypeData",
        data:{
            key:"typeId"
        },
        async:false,
        success:function(res){
            console.log(res);
            //请求成功
            if(res.state == 'ok'){
                var list = res.data;
                $.each(list,function(index,item){
                    $("[name='typeId']").append("<option value='"+item.typeId+"'>"+item.roleName+"</option>");
                    form.render("select");  //手动刷新渲染
                })
            }else if(res.state == 'fail'){
                //请求失败
                errorReturn(res.msg);
            }
        },error:function(){
            //网络错误 关闭当前窗体
            errorReturn();
        }
    })

    $.ajax({
        url:config.url + "/statedata/getStateDataByKey",
        data:{
            key:"adminStatus"
        },
        async:false,
        success:function(res){
            // console.log(res);
            //请求成功
            if(res.state == 'ok'){
                var list = res.data;
                for(var i=0;i<list.length;i++){
                    $(".adminStatus").append("<input type='radio' name='adminStatus' value='"+list[i].valueId+"' title='"+list[i].value+"' />");
                    $("[name='adminStatus']:first").prop("checked",true)
                    form.render("radio");  //手动刷新渲染
                }
                layer.close(load); //关闭加载框
            }else if(res.state == 'fail'){
                //请求失败
                errorReturn(res.msg);
            }
        },error:function(){
            //网络错误 关闭当前窗体
            errorReturn();
        }
    })

    // 性别
    $.ajax({
        url:config.url + "/statedata/getStateDataByKey",
        data:{
            key:"sex"
        },
        async:false,
        success:function(res){
            // console.log(res);
            //请求成功
            if(res.state == 'ok'){
                var list  = res.data;
                for(var i=0;i<list.length;i++){
                    $("[name='sex']").append("<option value='"+list[i].valueId+"'>"+list[i].value+"</option>")
                    }
                    form.render("select")
                layer.close(load); //关闭加载框
            }else if(res.state == 'fail'){
                //请求失败
                errorReturn(res.msg);
            }
        },error:function(){
            //网络错误 关闭当前窗体
            errorReturn();
        }
    })
    

    /**
     * 校验功能设置
     */
    form.verify({
        adminName:function(value){
            if(value.length >12 || value.length <4){
                return "用户名长度需在4-12位之间";
            }
            //TODO 用户名重复性校验
            var load = layer.load(2); // 2号加在样式
            var flag = false;
            var msg = "";
            $.ajax({
                url:config.url + "/back/admin/checkAdminName",
                data:{
                    adminName:value
                },
                async:false,
                success:function(res){
                    layer.close(load); //关闭加载框
                    // console.log(res);
                    //请求成功
                    if(res.state == 'ok'){
                    	
                    }else if(res.state == 'fail'){
                    	flag = true;
                    	msg = res.msg;
                    }
                },error:function(){
                    //网络错误 关闭当前窗体
                    errorReturn();
                }
            });
            if(flag){
            	return msg;
            }
            
        },
        pwd:function(value){
            if(value.length >12 || value.length <4){
                return "密码长度需在4-12位之间";
            }
            var pwd = $("[name='pwd']").val();
            var pwdAgain = $("[name='pwdAgain']").val();
            if(pwd != pwdAgain){
                return "两次密码输入不一致";
            }
        }
    })

        /**
     * 提交功能
     */
    form.on("submit(add)",function(obj){
        console.log(obj);
        //TODO adjax里关闭窗体
        //TODO 提交obj.field即可
        var load = layer.load(2); // 2号加在样式
        $.ajax({
            url:config.url + "/back/admin/add",
            data:obj.field,
            async:false,
            success:function(res){

                //请求成功
                if(res.state == 'ok'){
                	layer.msg(res.msg,{
                		time:1500
                	},function(){
                		 //关闭当前窗体
                		parent.layer.close(parent.layer.getFrameIndex(window.name));
                		//TODO 调用表格刷新
                		parent.table.reload("list");
                	})
                	
                }else if(res.state == 'fail'){
                	layer.msg(res.msg);
                	layer.close(load);
                }
            },error:function(){
                //网络错误 关闭当前窗体
                errorReturn();
            }
        });
        return false;
    })

})
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel='stylesheet' href='../../lib/layui/css/layui.css'>
</head>
<body style="padding: 20px 40px 0 0">
	<form class="layui-form" action="">
		<div class="layui-form-item">
			<label class="layui-form-label"><span style="color: red;">*</span> 用户名</label>
			<div class="layui-input-block">
			  <input type="text" name="adminName" required  lay-verify="required|adminName" placeholder="请输入用户名" autocomplete="off" class="layui-input">
			</div>
		</div>
		
		<div class="layui-form-item">
			<label class="layui-form-label"><span style="color: red;">*</span> 身份证号</label>
			<div class="layui-input-block">
			  <input type="text" name="idCard" required  lay-verify="required|idCard|identity" placeholder="请输入身份证号" autocomplete="off" class="layui-input">
			</div>
		</div>
		<div class="layui-form-item">
			<label class="layui-form-label"><span style="color: red;">*</span> 手机号</label>
			<div class="layui-input-block">
			  <input type="text" name="phone" required  lay-verify="required|phone" placeholder="请输入手机号" autocomplete="off" class="layui-input">
			</div>
		</div>
		<div class="layui-form-item">
			<label class="layui-form-label"><span style="color: red;">*</span> 邮箱</label>
			<div class="layui-input-block">
			  <input type="text" name="email" required  lay-verify="required|email" placeholder="请输入邮箱" autocomplete="off" class="layui-input">
			</div>
		</div>

		<div class="layui-form-item">
			<label class="layui-form-label"><span style="color: red;">*</span> 密码</label>
			<div class="layui-input-block">
			  <input type="password" name="pwd" required  lay-verify="required|pwd" placeholder="请输入密码" autocomplete="off" class="layui-input">
			</div>
		</div>
		<div class="layui-form-item">
			<label class="layui-form-label"><span style="color: red;">*</span> 确认密码</label>
			<div class="layui-input-block">
			  <input type="password" name="pwdAgain" required  lay-verify="required|pwd" placeholder="请再次密码" autocomplete="off" class="layui-input">
			</div>
		</div>
		
		<div class="layui-form-item">
			<label class="layui-form-label"><span style="color: red;">*</span> 状态</label>
			<div class="layui-input-block adminStatus">
			</div>
		</div>
		<div class="layui-form-item">
			<label class="layui-form-label"><span style="color: red;">*</span> 性别</label>
			<div class="layui-input-block">
				<select name="sex" lay-verify="required" >
					<option value="">未选择</option>
				  </select>
			</div>
		</div>
		<div class="layui-form-item">
			<label class="layui-form-label"><span style="color: red;">*</span> 权限</label>
			<div class="layui-input-block">
				<select name="typeId" lay-verify="required" >
					<option value="">未选择</option>
				  </select>
			</div>
		</div>
		<div class="layui-form-item layui-form-text">
			<label class="layui-form-label">备注</label>
			<div class="layui-input-block">
			  <textarea class="layui-textarea" name="mark" placeholder="请输入备注" lay-verify="mark"></textarea>
			</div>
		</div>
		
		<div class="layui-form-item" style="display:none">
			<label class="layui-form-label">isdel</label>
			<div class="layui-input-block">
				<!-- <input style="display:none" type="text" name="announcementId"> -->
				<input disabled   type="number" name="isdel" value="0">
			</div>
		</div>
		
		<div class="layui-form-item">
			<div class="layui-input-block">
			  <button class="layui-btn" lay-submit lay-filter="add">提交</button>
			  <button type="reset" class="layui-btn layui-btn-primary">重置</button>
			</div>
		</div>
	</form>
</body>
<script src="../config.js"></script>
<script src='../../lib/jquery.js'></script>
<script src='../../lib/layui/layui.js'></script>
<script src='js/add.js'></script>
</html>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值