Browse Source

提交课程PC

Lijy 4 days ago
parent
commit
e1e2530a2a

+ 26 - 0
fhKeeper/formulahousekeeper/course-pc/src/common/js/fixedData.js

@@ -0,0 +1,26 @@
+export const fixedDataGender = [
+  { label: "女", value: "0" },
+  { label: "男", value: "1" },
+];
+
+export const fixedDataCertificateType = [
+  { label: "身份证", value: "0" },
+  { label: "港澳通行证", value: "1" },
+  { label: "护照", value: "2" },
+  { label: "台胞证", value: "3" },
+];
+
+export const fixedDataOrNot = [
+  { label: "否", value: "0" },
+  { label: "是", value: "1" },
+];
+
+export const fixedDataInvoiceSubject = [
+  { label: "个人", value: "0" },
+  { label: "单位", value: "1" },
+];
+
+export const fixedDatainvoiceType = [
+  { label: "专票", value: "0" },
+  { label: "普票", value: "1" },
+];

+ 23 - 12
fhKeeper/formulahousekeeper/course-pc/src/routes.js

@@ -9,16 +9,27 @@ import PdfView from './views/pdf/pdfview';
 //课程管理
 import courselist from './views/coursemanagement/list';
 import lecturerList from './views/lecturerManagement/index.vue'
-import offlineTraining from './views/offlineTraining/offlineTraining.vue'
 import gcpCertification from './views/gcpCertification/gcpCertification.vue'
-import offlineRegistration from './views/offlineRegistration/registration.vue'
 import hotTopicCarousel from './views/hotTopicCarousel/hotTopicCarousel.vue'
-import myMessage from './views/myMessage/myMessage.vue'
-import customerServiceCenter from './views/customerServiceCenter/customerServiceCenter.vue'
 
 // 考试管理
 import examCertification from './views/examinationManagement/examCertification.vue' // 考试拿证流程介绍
 import examinationInformation from './views/examinationManagement/examinationInformation.vue' // 考试信息管理
+import examRegistrationReview from './views/examinationManagement/examRegistrationReview.vue' // 考试报名审核
+import examResults from './views/examinationManagement/examResults.vue' // 考试结果
+import certificates from './views/examinationManagement/certificates.vue' // 证书管理
+
+// 研修班管理
+import offlineTraining from './views/trainingClassManagement/offlineTraining.vue' // 线下研修班介绍
+import offlineRegistration from './views/trainingClassManagement/registration.vue' // 线下研修班
+import student from './views/trainingClassManagement/student.vue' // 学员姓名
+import studentPayment from './views/trainingClassManagement/studentPayment.vue' // 学员缴费
+
+// 用户与消息管理
+import myMessage from './views/userAndMessageManagement/myMessage.vue' // 我的消息
+import customerServiceCenter from './views/userAndMessageManagement/customerServiceCenter.vue' // 客服中心
+import userManagement from './views/userAndMessageManagement/userManagement.vue' // 用户管理
+
 
 Vue.use(Router)
 
@@ -90,9 +101,9 @@ export const allRouters = [
         children: [
             { path: '/exam-certification', component: examCertification, name: '考试拿证流程介绍' },
             { path: '/examination-information', component: examinationInformation, name: '考试信息管理' },
-            { path: '/exam-certification', component: examCertification, name: '考试报名审核' },
-            { path: '/exam-certification', component: examCertification, name: '考试结果管理' },
-            { path: '/exam-certification', component: examCertification, name: '证书管理' },
+            { path: '/exam-registrationReview', component: examRegistrationReview, name: '考试报名审核' },
+            { path: '/exam-results', component: examResults, name: '考试结果管理' },
+            { path: '/certificates', component: certificates, name: '证书管理' },
         ]
     },
     {
@@ -104,8 +115,8 @@ export const allRouters = [
         children: [
             { path: '/offline-training', component: offlineTraining, name: '线下研修班' },
             { path: '/offline-registration', component: offlineRegistration, name: '线下研修班报名' },
-            { path: '/offline-registration', component: offlineRegistration, name: '学员名单表格' },
-            { path: '/offline-registration', component: offlineRegistration, name: '学员缴费情况表' },
+            { path: '/student', component: student, name: '学员名单表格' },
+            { path: '/student-payment', component: studentPayment, name: '学员缴费情况表' },
         ]
     },
     {
@@ -117,7 +128,7 @@ export const allRouters = [
         children: [
             { path: '/my-message', component: myMessage, name: '我的消息' },
             { path: '/customer-service-center', component: customerServiceCenter, name: '客服中心' },
-            { path: '/my-message', component: myMessage, name: '用户管理' },
+            { path: '/user-management', component: userManagement, name: '用户管理' },
         ]
     },
     {
@@ -127,8 +138,8 @@ export const allRouters = [
         iconCls: 'iconfont firerock-iconsetting',
         leaf: false,//只有一个节点
         children: [
-            { path: '/my-message', component: myMessage, name: '订单管理' },
-            { path: '/customer-service-center', component: customerServiceCenter, name: '电子发票登记表' },
+            { path: '/qqqq', component: myMessage, name: '订单管理' },
+            { path: '/wwwwww', component: customerServiceCenter, name: '电子发票登记表' },
         ]
     },
     {

+ 1 - 1
fhKeeper/formulahousekeeper/course-pc/src/views/Home.vue

@@ -34,7 +34,7 @@
             <aside :class="collapsed?'menu-collapsed':'menu-expanded'">
                 <el-scrollbar style="height:100%">
                 <!--导航菜单-->
-                <el-menu :default-active="$route.path" class="el-menu-vertical-demo" unique-opened router v-if="!collapsed">
+                <el-menu :default-active="$route.path" class="el-menu-vertical-demo" unique-opened router v-if="!collapsed" active-text-color="#57A8D1">
                     <template v-for="(item,index) in $router.options.routes" v-if="!item.hidden">
                         <el-submenu :index="index+''" v-if="!item.leaf">
                             <template slot="title">

+ 119 - 0
fhKeeper/formulahousekeeper/course-pc/src/views/examinationManagement/certificates.vue

@@ -0,0 +1,119 @@
+<template>
+    <section>
+        <!--搜索栏-->
+        <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
+            <el-form :inline="true" @submit.native.prevent>
+                <el-form-item label="姓名">
+                    <el-input v-model="keyword" placeholder="请输入" clearable @change="searchList"
+                        size="small"></el-input>
+                </el-form-item>
+                <el-form-item label="课程名称">
+                    <el-input v-model="courseName" placeholder="请输入" clearable @change="searchList"
+                        size="small"></el-input>
+                </el-form-item>
+            </el-form>
+        </el-col>
+
+        <!--表格-->
+        <el-table :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
+            <el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
+            <el-table-column prop="name" label="姓名" min-width="120" align="center"></el-table-column>
+            <el-table-column prop="phone" label="手机号" min-width="160" align="center"></el-table-column>
+            <el-table-column prop="certificate" label="证书" min-width="180" align="center"></el-table-column>
+            <el-table-column prop="dateOfIssue" label="发证日期" min-width="120" align="center"></el-table-column>
+            <el-table-column label="操作" min-width="150" align="center">
+              <template slot-scope="scope">
+                <el-button size="small">上传证书</el-button>
+                <el-button size="small">邮寄</el-button>
+              </template>
+            </el-table-column>
+        </el-table>
+
+        <!--分页-->
+        <el-col :span="24" class="toolbar">
+            <el-pagination
+                @size-change="handleSizeChange"
+                @current-change="handleCurrentChange"
+                :page-sizes="[10, 20, 50, 100]"
+                :page-size="size"
+                layout="total, sizes, prev, pager, next"
+                :total="total"
+                style="float:right;"
+            ></el-pagination>
+        </el-col>
+    </section>
+</template>
+
+<script>
+export default {
+    data() {
+        return {
+            // 搜索条件
+            keyword: null,
+            courseName: null,
+
+            // 表格相关
+            tableHeight: 0,
+            listLoading: false,
+            total: 0,
+            page: 1,
+            size: 20,
+            list: []
+        }
+    },
+    methods: {
+        // 搜索考试信息
+        searchList() {
+            this.page = 1;
+            this.getList();
+        },
+
+        // 获取考试信息列表
+        getList() {
+            // 待接口联调
+            return
+            this.listLoading = true;
+            this.http.post('/exam-info/pageList', {
+                name: this.keyword,
+                courseName: this.courseName,
+                page: this.page,
+                size: this.size
+            }, res => {
+                this.list = res.data.records;
+                this.total = res.data.total;
+                this.listLoading = false;
+            }, () => {
+                this.listLoading = false;
+            })
+        },
+
+        // 分页相关
+        handleCurrentChange(val) {
+            this.page = val;
+            this.getList();
+        },
+        handleSizeChange(val) {
+            this.page = 1;
+            this.size = val;
+            this.getList();
+        }
+    },
+    created() {
+        let height = window.innerHeight;
+        this.tableHeight = height - 195;
+        const that = this;
+        window.onresize = function temp() {
+            that.tableHeight = window.innerHeight - 195;
+        };
+    },
+    mounted() {
+        this.getList();
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.toolbar {
+    padding-bottom: 10px;
+}
+</style>

+ 241 - 0
fhKeeper/formulahousekeeper/course-pc/src/views/examinationManagement/examRegistrationReview.vue

@@ -0,0 +1,241 @@
+<template>
+    <section>
+        <!--工具条-->
+        <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
+            <el-form :inline="true" @submit.native.prevent>
+                <el-form-item label="报名时间">
+                    <el-date-picker v-model="dateRange" type="daterange" range-separator="至" start-placeholder="开始日期"
+                        end-placeholder="结束日期" size="small">
+                    </el-date-picker>
+                </el-form-item>
+                <el-form-item label="姓名">
+                    <el-input v-model="nameKeyword" placeholder="请输入姓名" clearable size="small"></el-input>
+                </el-form-item>
+                <el-form-item label="课程">
+                    <el-input v-model="courseKeyword" placeholder="请输入课程名称" clearable size="small"></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" @click="searchList" size="small">搜索</el-button>
+                </el-form-item>
+            </el-form>
+        </el-col>
+
+        <!--列表-->
+        <el-table :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;"
+            @selection-change="handleSelectionChange">
+            <el-table-column type="selection" width="55" align="center"></el-table-column>
+            <el-table-column prop="parentCourseName" label="考试课程" min-width="240"></el-table-column>
+            <el-table-column prop="name" label="姓名" width="100" align="center"></el-table-column>
+            <el-table-column prop="sex" label="性别" width="80" align="center"></el-table-column>
+            <el-table-column prop="school" label="工作单位" min-width="150" align="center"></el-table-column>
+            <el-table-column prop="phone" label="手机号码" width="120" align="center"></el-table-column>
+            <el-table-column prop="idType" label="证件类型" width="100" align="center"></el-table-column>
+            <el-table-column prop="idNumber" label="证件号码" width="180" align="center"></el-table-column>
+            <el-table-column prop="email" label="邮箱" width="180" align="center"></el-table-column>
+            <el-table-column prop="invoiceType" label="发票类型" width="140" align="center"></el-table-column>
+            <el-table-column prop="isIndivdual" label="开票主体" width="140" align="center"></el-table-column>
+            <el-table-column prop="invoiceHeader" label="开票名称" width="140" align="center"></el-table-column>
+            <el-table-column prop="invoiceDate" label="开票日期" width="120" align="center"></el-table-column>
+            <el-table-column prop="taxCode" label="税号" width="150" align="center"></el-table-column>
+            <el-table-column prop="address" label="联系地址" min-width="340"></el-table-column>
+            <el-table-column label="证件照" width="120" align="center" fixed="right">
+                <template slot-scope="scope">
+                    <img v-if="scope.row.portraitUrl" :src="scope.row.portraitUrl" class="id-photo"
+                        @click="previewImage(scope.row.portraitUrl)" />
+                    <span v-else>无照片</span>
+                </template>
+            </el-table-column>
+            <el-table-column label="操作" width="180" class-name="btns" header-align="center" fixed="right">
+                <template slot-scope="scope">
+                    <el-button size="small" type="success" @click="approve(scope.row)">通过</el-button>
+                    <el-button size="small" type="danger" @click="reject(scope.row)">驳回</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+
+        <!--工具条-->
+        <el-col :span="24" class="toolbar">
+            <el-button type="success" @click="batchApprove" :disabled="selectedIds.length === 0"
+                size="small">全部通过</el-button>
+            <el-button type="danger" @click="batchReject" :disabled="selectedIds.length === 0"
+                size="small">全部驳回</el-button>
+            <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
+                :page-sizes="[10, 20, 50, 100]" :page-size="size" layout="total, sizes, prev, pager, next"
+                :total="total" style="float:right;"></el-pagination>
+        </el-col>
+    </section>
+</template>
+
+<script>
+import { post, checkAndAddUpload } from '../../api'
+import { fixedDataGender, fixedDataCertificateType, fixedDataOrNot, fixedDataInvoiceSubject, fixedDatainvoiceType } from '../../common/js/fixedData'
+export default {
+    data() {
+        return {
+            // 搜索条件
+            dateRange: [],
+            nameKeyword: '',
+            courseKeyword: '',
+
+            // 表格相关
+            tableHeight: 0,
+            listLoading: false,
+            total: 0,
+            page: 1,
+            size: 20,
+            list: [],
+            selectedIds: [],
+        }
+    },
+    methods: {
+        // 搜索列表
+        searchList() {
+            this.page = 1;
+            this.getList();
+        },
+        // 图片预览
+        previewImage(url) {
+            this.$viewerApi({
+                images: [url],
+                options: {
+                    initialViewIndex: 0,
+                    toolbar: {
+                        zoomIn: 1,
+                        zoomOut: 1,
+                        oneToOne: 1,
+                        reset: 1,
+                        prev: 1,
+                        next: 1,
+                        rotateLeft: 1,
+                        rotateRight: 1,
+                        flipHorizontal: 1,
+                        flipVertical: 1
+                    }
+                }
+            })
+        },
+        // 获取列表
+        getList() {
+            this.listLoading = true;
+            post(`/exam-check/getAuditList`, { pageSize: this.size, pageIndex: this.page }).then(res => {
+                const { records = [], total = 0 } = res.data
+                this.total = total
+                this.list = records.map(item => {
+                    const { courseId, courseName, id, examStatus, isOnlineCourse } = item
+                    const { sex, idType, invoiceType, isIndivdual } = item.userExamInfo || {}
+                    return {
+                        ...item.userExamInfo,
+                        parenCourseId: courseId,
+                        parentCourseName: courseName,
+                        parentId: id,
+                        parentExamStatus: examStatus,
+                        parentIsOnlineCourse: isOnlineCourse,
+                        sex: fixedDataGender.find(val => val.value == (sex ? 1 : 0)).label,
+                        idType: fixedDataCertificateType.find(val => val.value == idType).label,
+                        invoiceType: fixedDatainvoiceType.find(val => val.value == invoiceType).label,
+                        isIndivdual: fixedDataInvoiceSubject.find(val => val.value == (isIndivdual ? 1 : 0)).label,
+                    }
+                })
+            }).finally(() => {
+                this.listLoading = false;
+            })
+        },
+
+        // 分页相关
+        handleCurrentChange(val) {
+            this.page = val;
+            this.getList();
+        },
+        handleSizeChange(val) {
+            this.page = 1;
+            this.size = val;
+            this.getList();
+        },
+
+        // 选择变化
+        handleSelectionChange(val) {
+            this.selectedIds = val.map(item => item.id);
+        },
+
+        // 通过单个
+        approve(row) {
+            this.$confirm('确认通过该报名申请?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                console.log('通过:', row.id);
+            });
+        },
+
+        // 驳回单个
+        reject(row) {
+            this.$confirm('确认驳回该报名申请?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                console.log('驳回:', row.id);
+            });
+        },
+
+        // 批量通过
+        batchApprove() {
+            if (this.selectedIds.length === 0) return;
+
+            this.$confirm(`确认通过选中的${this.selectedIds.length}条报名申请?`, '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                console.log('批量通过:', this.selectedIds);
+            });
+        },
+
+        // 批量驳回
+        batchReject() {
+            if (this.selectedIds.length === 0) return;
+
+            this.$confirm(`确认驳回选中的${this.selectedIds.length}条报名申请?`, '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                console.log('批量驳回:', this.selectedIds);
+            });
+        }
+    },
+
+    created() {
+        let height = window.innerHeight;
+        this.tableHeight = height - 195;
+        const that = this;
+        window.onresize = function temp() {
+            that.tableHeight = window.innerHeight - 195;
+        };
+    },
+
+    mounted() {
+        this.getList();
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.toolbar {
+    padding-bottom: 10px;
+}
+
+.btns .el-button {
+    margin-left: 10px;
+    margin-bottom: 5px;
+}
+
+.id-photo {
+    width: 40px;
+    height: 40px;
+    object-fit: cover;
+    border-radius: 10px;
+    cursor: pointer;
+}
+</style>

+ 113 - 0
fhKeeper/formulahousekeeper/course-pc/src/views/examinationManagement/examResults.vue

@@ -0,0 +1,113 @@
+<template>
+    <section>
+        <!--搜索栏-->
+        <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
+            <el-form :inline="true" @submit.native.prevent>
+                <el-form-item label="姓名">
+                    <el-input v-model="keyword" placeholder="请输入" clearable @change="searchList"
+                        size="small"></el-input>
+                </el-form-item>
+                <el-form-item label="课程名称">
+                    <el-input v-model="courseName" placeholder="请输入" clearable @change="searchList"
+                        size="small"></el-input>
+                </el-form-item>
+            </el-form>
+        </el-col>
+
+        <!--表格-->
+        <el-table :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
+            <el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
+            <el-table-column prop="course" label="姓名" min-width="120" align="center"></el-table-column>
+            <el-table-column prop="course" label="考试课程" min-width="180" align="center"></el-table-column>
+            <el-table-column prop="name" label="考试结果" min-width="120" align="center"></el-table-column>
+            <el-table-column prop="account" label="考试分数" min-width="150" align="center"></el-table-column>
+        </el-table>
+
+        <!--分页-->
+        <el-col :span="24" class="toolbar">
+            <el-pagination
+                @size-change="handleSizeChange"
+                @current-change="handleCurrentChange"
+                :page-sizes="[10, 20, 50, 100]"
+                :page-size="size"
+                layout="total, sizes, prev, pager, next"
+                :total="total"
+                style="float:right;"
+            ></el-pagination>
+        </el-col>
+    </section>
+</template>
+
+<script>
+export default {
+    data() {
+        return {
+            // 搜索条件
+            keyword: null,
+            courseName: null,
+
+            // 表格相关
+            tableHeight: 0,
+            listLoading: false,
+            total: 0,
+            page: 1,
+            size: 20,
+            list: []
+        }
+    },
+    methods: {
+        // 搜索考试信息
+        searchList() {
+            this.page = 1;
+            this.getList();
+        },
+
+        // 获取考试信息列表
+        getList() {
+            // 待接口联调
+            return
+            this.listLoading = true;
+            this.http.post('/exam-info/pageList', {
+                name: this.keyword,
+                courseName: this.courseName,
+                page: this.page,
+                size: this.size
+            }, res => {
+                this.list = res.data.records;
+                this.total = res.data.total;
+                this.listLoading = false;
+            }, () => {
+                this.listLoading = false;
+            })
+        },
+
+        // 分页相关
+        handleCurrentChange(val) {
+            this.page = val;
+            this.getList();
+        },
+        handleSizeChange(val) {
+            this.page = 1;
+            this.size = val;
+            this.getList();
+        }
+    },
+    created() {
+        let height = window.innerHeight;
+        this.tableHeight = height - 195;
+        const that = this;
+        window.onresize = function temp() {
+            that.tableHeight = window.innerHeight - 195;
+        };
+    },
+    mounted() {
+        this.getList();
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.toolbar {
+    padding-bottom: 10px;
+}
+</style>

+ 98 - 17
fhKeeper/formulahousekeeper/course-pc/src/views/examinationManagement/examinationInformation.vue

@@ -1,26 +1,107 @@
 <template>
-  <div>
-    考试信息管理
-  </div>
+    <section>
+        <!--搜索栏-->
+        <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
+            <el-form :inline="true" @submit.native.prevent>
+                <el-form-item label="姓名">
+                    <el-input v-model="keyword" placeholder="请输入姓名" clearable @change="searchList"
+                        size="small"></el-input>
+                </el-form-item>
+            </el-form>
+        </el-col>
+
+        <!--表格-->
+        <el-table :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
+            <el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
+            <el-table-column prop="course" label="考试课程" min-width="180" align="center"></el-table-column>
+            <el-table-column prop="name" label="姓名" min-width="120" align="center"></el-table-column>
+            <el-table-column prop="account" label="账号" min-width="150" align="center"></el-table-column>
+            <el-table-column prop="password" label="密码" min-width="150" align="center"></el-table-column>
+        </el-table>
+
+        <!--分页-->
+        <el-col :span="24" class="toolbar">
+            <el-pagination
+                @size-change="handleSizeChange"
+                @current-change="handleCurrentChange"
+                :page-sizes="[10, 20, 50, 100]"
+                :page-size="size"
+                layout="total, sizes, prev, pager, next"
+                :total="total"
+                style="float:right;"
+            ></el-pagination>
+        </el-col>
+    </section>
 </template>
 
 <script>
 export default {
-  props: {},
-  components: {},
-  data() {
-    return {
+    data() {
+        return {
+            // 搜索条件
+            keyword: null,
 
-    };
-  },
-  computed: {},
-  watch: {},
-  created() {},
-  mounted() {},
-  methods: {},
-};
-</script>
+            // 表格相关
+            tableHeight: 0,
+            listLoading: false,
+            total: 0,
+            page: 1,
+            size: 20,
+            list: []
+        }
+    },
+    methods: {
+        // 搜索考试信息
+        searchList() {
+            this.page = 1;
+            this.getList();
+        },
 
-<style scoped lang="scss">
+        // 获取考试信息列表
+        getList() {
+            // 待接口联调
+            return
+            this.listLoading = true;
+            this.http.post('/exam-info/pageList', {
+                name: this.keyword,
+                page: this.page,
+                size: this.size
+            }, res => {
+                this.list = res.data.records;
+                this.total = res.data.total;
+                this.listLoading = false;
+            }, () => {
+                this.listLoading = false;
+            })
+        },
+
+        // 分页相关
+        handleCurrentChange(val) {
+            this.page = val;
+            this.getList();
+        },
+        handleSizeChange(val) {
+            this.page = 1;
+            this.size = val;
+            this.getList();
+        }
+    },
+    created() {
+        let height = window.innerHeight;
+        this.tableHeight = height - 195;
+        const that = this;
+        window.onresize = function temp() {
+            that.tableHeight = window.innerHeight - 195;
+        };
+    },
+    mounted() {
+        this.getList();
+    }
+}
+</script>
 
+<style lang="scss" scoped>
+.toolbar {
+    padding-bottom: 10px;
+}
 </style>

fhKeeper/formulahousekeeper/course-pc/src/views/offlineTraining/offlineTraining.vue → fhKeeper/formulahousekeeper/course-pc/src/views/trainingClassManagement/offlineTraining.vue


fhKeeper/formulahousekeeper/course-pc/src/views/offlineRegistration/registration.vue → fhKeeper/formulahousekeeper/course-pc/src/views/trainingClassManagement/registration.vue


+ 122 - 0
fhKeeper/formulahousekeeper/course-pc/src/views/trainingClassManagement/student.vue

@@ -0,0 +1,122 @@
+<template>
+  <section>
+    <!--搜索栏-->
+    <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
+      <el-form :inline="true" @submit.native.prevent>
+        <el-form-item label="姓名">
+          <el-input v-model="keyword" placeholder="请输入" clearable @change="searchList" size="small"></el-input>
+        </el-form-item>
+        <el-form-item label="课程名称">
+          <el-input v-model="courseName" placeholder="请输入" clearable @change="searchList" size="small"></el-input>
+        </el-form-item>
+
+        <el-button type="primary" size="small" style="float: right;">导出</el-button>
+      </el-form>
+    </el-col>
+
+    <!--表格-->
+    <el-table :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
+      <el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
+      <el-table-column prop="name" label="姓名" min-width="120" align="center"></el-table-column>
+      <el-table-column prop="gender" label="性别" min-width="120" align="center"></el-table-column>
+      <el-table-column prop="id_type" label="证件类型" min-width="120" align="center"></el-table-column>
+      <el-table-column prop="id_number" label="证件号码" min-width="180" align="center"></el-table-column>
+      <el-table-column prop="phone" label="手机号码" min-width="150" align="center"></el-table-column>
+      <el-table-column prop="work_unit" label="工作单位" min-width="150" align="center"></el-table-column>
+      <el-table-column prop="address" label="联系地址" min-width="180" align="center"></el-table-column>
+      <el-table-column prop="project_name" label="项目名称" min-width="180" align="center"></el-table-column>
+      <el-table-column prop="project_level" label="项目等级" min-width="120" align="center"></el-table-column>
+      <el-table-column prop="start_date" label="培训开始日期" min-width="150" align="center"></el-table-column>
+      <el-table-column prop="end_date" label="培训结束日期" min-width="150" align="center"></el-table-column>
+      <el-table-column prop="study_hours" label="培训学时" min-width="120" align="center"></el-table-column>
+      <el-table-column prop="score" label="评定成绩" min-width="120" align="center"></el-table-column>
+      <el-table-column prop="certificate_date" label="证书日期" min-width="150" align="center"></el-table-column>
+      <el-table-column prop="photo" label="照片" min-width="100" align="center">
+        <template slot-scope="scope">
+          <img :src="scope.row.photo" alt="photo" style="width: 50px; height: 50px; border-radius: 50%;" />
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!--分页-->
+    <el-col :span="24" class="toolbar">
+      <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
+        :page-sizes="[10, 20, 50, 100]" :page-size="size" layout="total, sizes, prev, pager, next" :total="total"
+        style="float:right;"></el-pagination>
+    </el-col>
+  </section>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      // 搜索条件
+      keyword: null,
+      courseName: null,
+
+      // 表格相关
+      tableHeight: 0,
+      listLoading: false,
+      total: 0,
+      page: 1,
+      size: 20,
+      list: []
+    }
+  },
+  methods: {
+    // 搜索考试信息
+    searchList() {
+      this.page = 1;
+      this.getList();
+    },
+
+    // 获取考试信息列表
+    getList() {
+      // 待接口联调
+      return
+      this.listLoading = true;
+      this.http.post('/exam-info/pageList', {
+        name: this.keyword,
+        courseName: this.courseName,
+        page: this.page,
+        size: this.size
+      }, res => {
+        this.list = res.data.records;
+        this.total = res.data.total;
+        this.listLoading = false;
+      }, () => {
+        this.listLoading = false;
+      })
+    },
+
+    // 分页相关
+    handleCurrentChange(val) {
+      this.page = val;
+      this.getList();
+    },
+    handleSizeChange(val) {
+      this.page = 1;
+      this.size = val;
+      this.getList();
+    }
+  },
+  created() {
+    let height = window.innerHeight;
+    this.tableHeight = height - 195;
+    const that = this;
+    window.onresize = function temp() {
+      that.tableHeight = window.innerHeight - 195;
+    };
+  },
+  mounted() {
+    this.getList();
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.toolbar {
+  padding-bottom: 10px;
+}
+</style>

+ 114 - 0
fhKeeper/formulahousekeeper/course-pc/src/views/trainingClassManagement/studentPayment.vue

@@ -0,0 +1,114 @@
+<template>
+  <section>
+    <!--搜索栏-->
+    <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
+      <el-form :inline="true" @submit.native.prevent>
+        <el-form-item label="姓名">
+          <el-input v-model="keyword" placeholder="请输入" clearable @change="searchList" size="small"></el-input>
+        </el-form-item>
+        <el-form-item label="课程名称">
+          <el-input v-model="courseName" placeholder="请输入" clearable @change="searchList" size="small"></el-input>
+        </el-form-item>
+
+        <el-button type="primary" size="small" style="float: right;">导出</el-button>
+      </el-form>
+    </el-col>
+
+    <!--表格-->
+    <el-table :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
+      <el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
+      <el-table-column prop="name" label="学员姓名" min-width="120" align="center"></el-table-column>
+      <el-table-column prop="id_number" label="证件号码" min-width="180" align="center"></el-table-column>
+      <el-table-column prop="training_fee" label="培训费/认证费" min-width="150" align="center"></el-table-column>
+      <el-table-column prop="data_fee" label="资料费" min-width="120" align="center"></el-table-column>
+      <el-table-column prop="other_fee_1" label="其他费用1" min-width="120" align="center"></el-table-column>
+      <el-table-column prop="other_fee_2" label="其他费用2" min-width="120" align="center"></el-table-column>
+      <el-table-column prop="payment_date" label="打款日期" min-width="150" align="center"></el-table-column>
+      <el-table-column prop="remitter_name" label="汇款方名称" min-width="180" align="center"></el-table-column>
+      <el-table-column prop="recipient_unit" label="收款单位" min-width="150" align="center"></el-table-column>
+      <el-table-column prop="payment_method" label="打款方式" min-width="150" align="center"></el-table-column>
+      <el-table-column prop="invoice_date" label="开票日期" min-width="150" align="center"></el-table-column>
+    </el-table>
+
+    <!--分页-->
+    <el-col :span="24" class="toolbar">
+      <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
+        :page-sizes="[10, 20, 50, 100]" :page-size="size" layout="total, sizes, prev, pager, next" :total="total"
+        style="float:right;"></el-pagination>
+    </el-col>
+  </section>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      // 搜索条件
+      keyword: null,
+      courseName: null,
+
+      // 表格相关
+      tableHeight: 0,
+      listLoading: false,
+      total: 0,
+      page: 1,
+      size: 20,
+      list: []
+    }
+  },
+  methods: {
+    // 搜索考试信息
+    searchList() {
+      this.page = 1;
+      this.getList();
+    },
+
+    // 获取考试信息列表
+    getList() {
+      // 待接口联调
+      return
+      this.listLoading = true;
+      this.http.post('/exam-info/pageList', {
+        name: this.keyword,
+        courseName: this.courseName,
+        page: this.page,
+        size: this.size
+      }, res => {
+        this.list = res.data.records;
+        this.total = res.data.total;
+        this.listLoading = false;
+      }, () => {
+        this.listLoading = false;
+      })
+    },
+
+    // 分页相关
+    handleCurrentChange(val) {
+      this.page = val;
+      this.getList();
+    },
+    handleSizeChange(val) {
+      this.page = 1;
+      this.size = val;
+      this.getList();
+    }
+  },
+  created() {
+    let height = window.innerHeight;
+    this.tableHeight = height - 195;
+    const that = this;
+    window.onresize = function temp() {
+      that.tableHeight = window.innerHeight - 195;
+    };
+  },
+  mounted() {
+    this.getList();
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.toolbar {
+  padding-bottom: 10px;
+}
+</style>

fhKeeper/formulahousekeeper/course-pc/src/views/customerServiceCenter/customerServiceCenter.vue → fhKeeper/formulahousekeeper/course-pc/src/views/userAndMessageManagement/customerServiceCenter.vue


fhKeeper/formulahousekeeper/course-pc/src/views/myMessage/myMessage.vue → fhKeeper/formulahousekeeper/course-pc/src/views/userAndMessageManagement/myMessage.vue


+ 158 - 0
fhKeeper/formulahousekeeper/course-pc/src/views/userAndMessageManagement/userManagement.vue

@@ -0,0 +1,158 @@
+<template>
+    <section>
+        <!--工具条-->
+        <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
+            <el-form :inline="true" @submit.native.prevent>
+                <el-form-item label="注册时间">
+                    <el-date-picker
+                        v-model="dateRange"
+                        type="daterange"
+                        range-separator="至"
+                        start-placeholder="开始日期"
+                        end-placeholder="结束日期"
+                        size="small"
+                        @change="searchList">
+                    </el-date-picker>
+                </el-form-item>
+                <el-form-item label="姓名">
+                    <el-input v-model="nameKeyword" placeholder="请输入姓名" clearable size="small" @change="searchList"></el-input>
+                </el-form-item>
+            </el-form>
+        </el-col>
+
+        <!--列表-->
+        <el-table 
+            :data="list" 
+            highlight-current-row 
+            v-loading="listLoading" 
+            :height="tableHeight" 
+            style="width: 100%;" >
+            <el-table-column prop="courseName" label="用户名" min-width="120" align="center"></el-table-column>
+            <el-table-column prop="name" label="手机号" width="100" align="center"></el-table-column>
+            <el-table-column prop="company" label="注册时间" min-width="150" align="center"></el-table-column>
+            <el-table-column label="操作" width="180" class-name="btns" header-align="center" fixed="right">
+                <template slot-scope="scope">
+                    <el-button size="small" type="success">重置密码</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+
+        <!--工具条-->
+        <el-col :span="24" class="toolbar">
+            <el-pagination
+                @size-change="handleSizeChange"
+                @current-change="handleCurrentChange"
+                :page-sizes="[10, 20, 50, 100]"
+                :page-size="size"
+                layout="total, sizes, prev, pager, next"
+                :total="total"
+                style="float:right;"
+            ></el-pagination>
+        </el-col>
+    </section>
+</template>
+
+<script>
+export default {
+    data() {
+        return {
+            // 搜索条件
+            dateRange: [],
+            nameKeyword: '',
+            courseKeyword: '',
+
+            // 表格相关
+            tableHeight: 0,
+            listLoading: false,
+            total: 0,
+            page: 1,
+            size: 20,
+            list: [],
+            selectedIds: [],
+        }
+    },
+    methods: {
+        // 搜索列表
+        searchList() {
+            this.page = 1;
+            this.getList();
+        },
+
+        // 获取列表
+        getList() {
+            this.listLoading = true;
+            // 模拟数据
+            setTimeout(() => {
+                this.list = [
+                    {
+                        id: 1,
+                        courseName: 'GCP认证考试',
+                        name: '张三',
+                        gender: '男',
+                        company: '某某医院',
+                        phone: '13800138000',
+                        idType: '身份证',
+                        idNumber: '110101199003072345',
+                        address: '北京市朝阳区某某路1号',
+                        email: 'zhangsan@example.com',
+                        invoiceType: '增值税普通发票',
+                        invoiceName: '某某医院',
+                        invoiceDate: '2025-07-01',
+                        taxNumber: '123456789012345',
+                        idPhoto: ''
+                    }
+                ];
+                this.total = 1;
+                this.listLoading = false;
+            }, 500);
+        },
+
+        // 分页相关
+        handleCurrentChange(val) {
+            this.page = val;
+            this.getList();
+        },
+        handleSizeChange(val) {
+            this.page = 1;
+            this.size = val;
+            this.getList();
+        },
+
+        // 选择变化
+        handleSelectionChange(val) {
+            this.selectedIds = val.map(item => item.id);
+        },
+    },
+
+    created() {
+        let height = window.innerHeight;
+        this.tableHeight = height - 195;
+        const that = this;
+        window.onresize = function temp() {
+            that.tableHeight = window.innerHeight - 195;
+        };
+    },
+
+    mounted() {
+        this.getList();
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.toolbar {
+    padding-bottom: 10px;
+}
+
+.btns .el-button {
+    margin-left: 10px;
+    margin-bottom: 5px;
+}
+
+.id-photo {
+    width: 80px;
+    height: 80px;
+    object-fit: cover;
+    border-radius: 10px;
+}
+</style>