puzhibing
2023-07-28 d3a12b192afc54eb51f640a8050644d4fddd9100
后台代码
1个文件已修改
3个文件已添加
506 ■■■■■ 已修改文件
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCourseController.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/login.html 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/course/course.html 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/course/course.js 383 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCourseController.java
New file
@@ -0,0 +1,39 @@
package com.dsh.guns.modular.system.controller.code;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 * 课程管理
 * @author zhibing.pu
 * @Date 2023/7/27 15:54
 */
@Controller
@RequestMapping("/course")
public class TCourseController {
    private String PREFIX = "/system/course/";
    /**
     * 跳转到列表页
     * @return
     */
    @GetMapping("/showCourseList")
    public String showCourseList(){
        return PREFIX + "course.html";
    }
    /**
     * 跳转到添加页
     * @return
     */
    @GetMapping("/showAddCourse")
    public String showAddCourse(){
        return PREFIX + "course_add.html";
    }
}
cloud-server-management/src/main/webapp/WEB-INF/view/login.html
@@ -70,15 +70,15 @@
                <img src="${ctxPath}/img/password.png" />
                <input class="itemInput" type="password" name="password" id="password"  placeholder="请输入密码" required="" value="">
            </div>
            <div  class="item">
                <img src="${ctxPath}/img/password.png" />
                <div class="col-sm-8" style="padding-left: 0px; width: 40%">
                    <input class="form-control" type="text" name="kaptcha" placeholder="请输入验证码" required="">
                </div>
                <div class="col-sm-4" style="padding-left: 0px; padding-right: 0px;margin-left: 25%">
                    <img src="${ctxPath}/kaptcha" id="kaptcha" width="100%" height="100%"/>
                </div>
            </div>
            <!--<div  class="item">-->
                <!--<img src="${ctxPath}/img/password.png" />-->
                <!--<div class="col-sm-8" style="padding-left: 0px; width: 40%">-->
                    <!--<input class="form-control" type="text" name="kaptcha" placeholder="请输入验证码" required="">-->
                <!--</div>-->
                <!--<div class="col-sm-4" style="padding-left: 0px; padding-right: 0px;margin-left: 25%">-->
                    <!--<img src="${ctxPath}/kaptcha" id="kaptcha" width="100%" height="100%"/>-->
                <!--</div>-->
            <!--</div>-->
            <button onclick="login()" class="btn full-width m-b" style="background-color: #0573EA;color: white;">登 录</button>
            <button type="submit" id="submit" style="display: none;"></button>
            </p>
cloud-server-management/src/main/webapp/WEB-INF/view/system/course/course.html
New file
@@ -0,0 +1,66 @@
@layout("/common/_container.html"){
<link rel="stylesheet" href="${ctxPath}/static/js/layui/css/layui.css"  media="all">
<div class="row">
    <div class="col-sm-12">
        <div class="ibox float-e-margins">
            <div class="ibox-title">
                <h5>用户管理</h5>
            </div>
            <div class="ibox-content">
                <div class="row row-lg">
                    <div class="col-sm-12">
                        <div class="row">
                            <div class="col-lg-10 col-sm-9">
                                <div class="row">
                                    <div class="col-lg-4 col-sm-12">
                                        <#NameCon id="name" name="搜索" placeholder="帐号/姓名/手机号"/>
                                    </div>
                                </div>
                            </div>
                            <div class="col-lg-2 col-sm-3">
                                <div class="row">
                                    <div class="col-lg-12 col-sm-12">
                                        <#button name="搜索" icon="fa-search" clickFun="Course.search()"/>
                                        <#button name="重置" icon="fa-trash" clickFun="Course.resetSearch()" space="true"/>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="hidden-xs" id="managerTableToolbar" role="group">
                            @if(shiro.hasPermission("/course/addCourse")){
                            <#button name="添加" icon="fa-plus" clickFun="Course.addCourse()"/>
                            @}
                            @if(shiro.hasPermission("/course/editCourse")){
                            <#button name="编辑" icon="fa-edit" clickFun="Course.editCourse()" space="true"/>
                            @}
                            @if(shiro.hasPermission("/course/deleteCourse")){
                            <#button name="删除" icon="fa-remove" clickFun="Course.deleteCourse()" space="true"/>
                            @}
                            @if(shiro.hasPermission("/course/upCourse")){
                            <#button name="上架" icon="fa-refresh" clickFun="Course.upCourse()" space="true"/>
                            @}
                            @if(shiro.hasPermission("/course/downCourse")){
                            <#button name="下架" icon="fa-warning" clickFun="Course.downCourse()" space="true"/>
                            @}
                            @if(shiro.hasPermission("/course/detailsCourse")){
                            <#button name="详情" icon="fa-check-circle" clickFun="Course.detailsCourse()" space="true"/>
                            @}
                        </div>
                        <#table id="managerTable"/>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/static/modular/system/course/course.js"></script>
<script src="${ctxPath}/static/js/layui/layui.js" charset="utf-8"></script>
<script>
    laydate.render({
        elem: '#beginTime'
    });
    laydate.render({
        elem: '#endTime'
    });
</script>
@}
cloud-server-management/src/main/webapp/static/modular/system/course/course.js
New file
@@ -0,0 +1,383 @@
/**
 * 系统管理--用户管理的单例对象
 */
var Course = {
    id: "managerTable",//表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1,
    deptid:0
};
var language =$("#language").val()
/**
 * 初始化表格的列
 */
Course.initColumn = function () {
    var columns = [
        {field: 'selectItem', radio: true,
            formatter: function (value, row) {
                if (row.id == 1)
                    return {
                        disabled : true,//设置是否可用
                    };
                return "";
            }
        },
        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title:  language==1?'账号':(language==2?'Account number':'Nomor akun'), field: 'account', align: 'center', valign: 'middle', sortable: true},
        {title:  language==1?'姓名':(language==2?'name':'Nama Lengkap'), field: 'name', align: 'center', valign: 'middle', sortable: true},
        {title: language==1?'性别':(language==2?'Gender':'Jenis kelamin'), field: 'sexName', align: 'center', valign: 'middle', sortable: true,
            formatter:function (data) {
                if(language==1){
                    if(data==1){
                        return '男'
                    }else {
                        return '女'
                    }
                }else if(language==2){
                    if(data==1){
                        return 'man'
                    }else {
                        return 'woman'
                    }
                }else {
                    if(data==1){
                        return 'laki-laki'
                    }else {
                        return 'wanita'
                    }
                }
            }
        },
        {title: language==1?'角色':(language==2?'role':'peran'), field: 'roleName', visible: true, align: 'center', valign: 'middle', sortable: true,
            formatter: function (value, row) {
                var btn = "";
                if(row.roleName != '' && row.roleName != null) {
                    var labelStr = "";
                    var labelStrs = "";
                    var labelArray = row.roleName.split(",");
                    for(var i=0;i<labelArray.length;i++){
                        labelStr += labelArray[i] +"<br>";
                        labelStrs += labelArray[i] + "&#10;";
                    }
                    labelStr = labelStr.substring(0,labelStr.length-4);
                    labelStrs = labelStrs.substring(0,labelStrs.length-5);
                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + labelStrs + '" onfocus="AppCar.tooltip()">' + labelStr + '</p>']
                }
                return btn;
            }
        },
        {title: language==1?'部门':(language==2?'department':'departemen'), field: 'deptName', align: 'center', valign: 'middle', sortable: true},
        {title: language==1?'邮箱':(language==2?'email':'email'), field: 'email', align: 'center', valign: 'middle', sortable: true},
        {title: language==1?'电话':(language==2?'phone':'Telepon'), field: 'phone', align: 'center', valign: 'middle', sortable: true},
        {title:language==1?'创建时间':(language==2?'Creation time':'Waktu penciptaan'), field: 'createtime', visible: true, align: 'center', valign: 'middle', sortable: true,
            formatter: function (value, row) {
                var btn = "";
                if(row.createtime1 != '' && row.createtime1 != null) {
                    var time = row.createtime1.replace(" ",'<br>');
                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.createtime1 + '" onfocus="AppCar.tooltip()">' + time + '</p>']
                }
                return btn;
            }
        },
        {title: language==1?'状态':(language==2?'State':'Status'), field: 'statusName', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row) {
                var btn = "";
                if(row.statusName != '' && row.statusName != null) {
                    if(language==1){
                        if (row.statusName == "2"){
                            btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color: red;" title="' + `冻结` + '" onfocus="AppUserInfo.tooltip()">' + 冻结 + '</p>']
                        }else{
                            btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + `启用` + '" onfocus="AppUserInfo.tooltip()">' + 启用 + '</p>']
                        }
                    }else if(language==2){
                        if (row.statusName == "2"){
                            btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color: red;" title="' + `freeze` + '" onfocus="AppUserInfo.tooltip()">' + `freeze` + '</p>']
                        }else{
                            btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + `enable` + '" onfocus="AppUserInfo.tooltip()">' + `enable` + '</p>']
                        }
                    }else {
                        if (row.statusName == "2"){
                            btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color: red;" title="' + `Membekukan` + '" onfocus="AppUserInfo.tooltip()">' + 'Membekukan' + '</p>']
                        }else{
                            btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + `aktifkan` + '" onfocus="AppUserInfo.tooltip()">' + 'aktifkan' + '</p>']
                        }
                    }
                }
                return btn;
            }
        }
    ];
    return columns;
};
/**
 * 检查是否选中
 */
Course.check = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if (selected.length == 0) {
        if(language==1){
            Feng.info("请先选中表格中的某一记录!");
        }else if(language==2){
            Feng.info("Please select a record in the table first!");
        }else {
            Feng.info("Pilih catatan di tabel terlebih dahulu!");
        }
        return false;
    } else {
        Course.seItem = selected[0];
        return true;
    }
};
/**
 * 点击添加管理员
 */
Course.addCourse = function () {
    var index = layer.open({
        type: 2,
        title: '添加',
        area: ['800px', '560px'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/course/showAddCourse'
    });
    this.layerIndex = index;
};
/**
 * 点击修改按钮时
 * @param userId 管理员id
 */
Course.openChangeUser = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title: language==1?'编辑':(language==2?'Edit':'Edit'),
            area: ['800px', '450px'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/mgr/user_edit/' + this.seItem.id
        });
        this.layerIndex = index;
    }
};
/**
 * 点击角色分配
 * @param
 */
Course.roleAssign = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title: language==1?'角色分配':(language==2?'role assignment':'tugas peran'),
            area: ['300px', '400px'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/mgr/role_assign/' + this.seItem.id
        });
        this.layerIndex = index;
    }
};
/**
 * 删除用户
 */
Course.delCourse = function () {
    if (this.check()) {
        var operation = function(){
            var userId = Course.seItem.id;
            var ajax = new $ax(Feng.ctxPath + "/mgr/delete", function () {
                if(language==1){
                    Feng.success("删除成功!");
                }else if(language==2){
                    Feng.success("Delete succeeded!");
                }else {
                    Feng.success("Hapus berhasil!");
                }
                Course.table.refresh();
            }, function (data) {
                if(language==1){
                    Feng.error("删除失败!" + data.responseJSON.message + "!");
                }else if(language==2){
                    Feng.error("Delete failed!" + data.responseJSON.message + "!");
                }else {
                    Feng.error("Hapus gagal!" + data.responseJSON.message + "!");
                }
            });
            ajax.set("userId", userId);
            ajax.start();
        };
        if(language==1){
            Feng.confirm("是否删除用户" + Course.seItem.account + "?",operation);
        }else if(language==2){
            Feng.confirm("Whether to delete a user" + Course.seItem.account + "?",operation);
        }else {
            Feng.confirm("Apakah menghapus pengguna" + Course.seItem.account + "?",operation);
        }
    }
};
/**
 * 冻结用户账户
 * @param userId
 */
Course.freezeAccount = function () {
    if (this.check()) {
        var userId = this.seItem.id;
        var ajax = new $ax(Feng.ctxPath + "/mgr/freeze", function (data) {
            if(language==1){
                Feng.success("冻结成功!");
            }else if(language==2){
                Feng.success("Success!");
            }else {
                Feng.success("Success!");
            }
            Course.table.refresh();
        }, function (data) {
            if(language==1){
                Feng.error("冻结失败!" + data.responseJSON.message + "!");
            }else if(language==2){
                Feng.error("Fail!" + data.responseJSON.message + "!");
            }else {
                Feng.error("Gagal!" + data.responseJSON.message + "!");
            }
        });
        ajax.set("userId", userId);
        ajax.start();
    }
};
/**
 * 解除冻结用户账户
 * @param userId
 */
Course.unfreeze = function () {
    if (this.check()) {
        var userId = this.seItem.id;
        var ajax = new $ax(Feng.ctxPath + "/mgr/unfreeze", function (data) {
            if(language==1){
                Feng.success("解除冻结成功!");
            }else if(language==2){
                Feng.success("Success!");
            }else {
                Feng.success("Success!");
            }
            Course.table.refresh();
        }, function (data) {
            if(language==1){
                Feng.error("解除冻结失败!");
            }else if(language==2){
                Feng.error("Fail!");
            }else {
                Feng.error("Gagal!");
            }
        });
        ajax.set("userId", userId);
        ajax.start();
    }
}
/**
 * 重置密码
 */
Course.resetPwd = function () {
    if (this.check()) {
        var userId = this.seItem.id;
        if(language==1){
            parent.layer.confirm('是否重置密码为111111?', {
                btn: ['确定', '取消'],
                shade: false //不显示遮罩
            }, function () {
                var ajax = new $ax(Feng.ctxPath + "/mgr/reset", function (data) {
                    Feng.success("重置密码成功!");
                }, function (data) {
                    Feng.error("重置密码失败!");
                });
                ajax.set("userId", userId);
                ajax.start();
            });
        }else if(language==2){
            parent.layer.confirm('Whether to reset the password to 111111?', {
                btn: ['Yes', 'No'],
                shade: false //不显示遮罩
            }, function () {
                var ajax = new $ax(Feng.ctxPath + "/mgr/reset", function (data) {
                    Feng.success("Success!");
                }, function (data) {
                    Feng.error("Fail!");
                });
                ajax.set("userId", userId);
                ajax.start();
            });
        }else {
            parent.layer.confirm('Apakah untuk reset kata sandi ke 111111?', {
                btn: ['Ya', 'batalkan'],
                shade: false //不显示遮罩
            }, function () {
                var ajax = new $ax(Feng.ctxPath + "/mgr/reset", function (data) {
                    Feng.success("Success!");
                }, function (data) {
                    Feng.error("Gagal!");
                });
                ajax.set("userId", userId);
                ajax.start();
            });
        }
    }
};
Course.resetSearch = function () {
    $("#name").val("");
    $("#createTime").val("");
    Course.search();
}
Course.search = function () {
    var queryData = {};
    queryData['deptid'] = Course.deptid;
    queryData['name'] = $("#name").val();
    queryData['createTime'] = $("#createTime").val();
    Course.table.refresh({query: queryData});
}
Course.onClickDept = function (e, treeId, treeNode) {
    Course.deptid = treeNode.id;
    Course.search();
};
$(function () {
    var defaultColunms = Course.initColumn();
    var table = new BSTable(Course.id, "/mgr/list", defaultColunms);
    // 设置物理分页server(逻辑分页client)
    table.setPaginationType("server");
    // 表单提交参数
    var queryData = {};
    queryData['deptid'] = Course.deptid;
    queryData['name'] = $("#name").val();
    queryData['createTime'] = $("#createTime").val();
    table.setQueryParams(queryData);
    Course.table = table.init();
    /*var defaultColunms = Course.initColumn();
    var table = new BSTable("managerTable", "/mgr/list", defaultColunms);
    table.setPaginationType("client");
    Course.table = table.init();*/
    var ztree = new $ZTree("deptTree", "/dept/tree");
    ztree.bindOnClick(Course.onClickDept);
    ztree.init();
});