Commit 5eb64b6c authored by 黄奎's avatar 黄奎
parents 3ea1a4dc 9689f7ff
......@@ -12,7 +12,7 @@ export default {
<style>
@import url('~assets/css/font.css');
@import url('//at.alicdn.com/t/font_2077629_7449myoskyf.css');
@import url('//at.alicdn.com/t/font_2077629_q2oo9gmf1qr.css');
html,
body,
......
......@@ -66,4 +66,61 @@ export function auditTeacher(data) {
method: 'post',
data
})
}
/**
*
* @param {TId} data
*/
export function deleteTeacher(data) {
return request({
url: '/user/RemoveTeacher',
method: 'post',
data
})
}
/**
* 获取助教分页数据
*/
export function getAssistPage(data) {
return request({
url: '/user/GetAssistPageList',
method: 'post',
data
})
}
/**
* 保存教师信息
*/
export function saveAssist(data) {
return request({
url: '/user/SetAssist',
method: 'post',
data
})
}
/**
* 教师审核
*/
export function auditAssist(data) {
return request({
url: '/user/AuditAssist',
method: 'post',
data
})
}
/**
* 助教删除
* @param {AId} data
*/
export function deleteAssist(data) {
return request({
url: '/user/RemoveAssist',
method: 'post',
data
})
}
\ No newline at end of file
......@@ -58,4 +58,32 @@
box-shadow: rgba(0, 0, 0, 0.05) 2px 0px 0px
td.none-shadow
box-shadow: none
\ No newline at end of file
box-shadow: none
.sticky-right-column-table
max-width: 100%
thead
background: rgb(245, 246, 247)
thead tr:first-child
height: 40px
line-height: 14px
thead tr:first-child th
font-size: 12px
font-weight: 400
color: rgb(168, 168, 179)
thead tr:first-child th:last-child
background-color: rgb(245, 246, 247)
td:last-child
background-color: #fff
th:last-child,
td:last-child
position: sticky
right: 0
z-index: 1
box-shadow: rgba(0, 0, 0, 0.05) -2px 0px 0px
\ No newline at end of file
<template>
<q-dialog v-model="persistent" content-class="bg-grey-1" persistent transition-show="scale" transition-hide="scale">
<q-card style="width: 800px;max-width:900px;">
<q-card-section>
<div class="text-h6">{{objOption.AId==0?'新增助教信息':'修改助教信息'}}</div>
</q-card-section>
<q-card-section class="q-pt-none scroll" style="max-height: 70vh">
<div class="text-caption q-mb-md q-px-xs text-grey-6">基本资料</div>
<div class="row wrap">
<q-input filled stack-label maxlength="20" :dense="false" v-model="objOption.AssistName" ref="AssistName" class="col-6 q-pr-lg q-pb-lg" label="助教名称" :rules="[val => !!val || '请填写助教姓名']" />
<q-select filled stack-label option-value="SId" option-label="SName" v-model="objOption.School_Id" ref="School_Id" :options="schoolList" label="所属校区" :dense="false" class="col-6 q-pb-lg" :rules="[val => !!val || '请选择所属校区']" />
<q-input type="tel" filled stack-label maxlength="100" :dense="false" v-model="objOption.AssistTel" ref="AssistTel" class="col-6 q-pr-lg q-pb-lg" label="联系电话" :rules="[val => !!val || '请填写助教联系电话']" />
<div class="col-6 q-pb-lg upload-assiatant-box">
<q-uploader flat @uploaded="uploadSuccess" hide-upload-btn max-files="1" @rejected="onRejected" label="助教头像" :max-file-size="512*1024" accept=".jpg, image/*" auto-upload :url="action" />
</div>
</div>
<div class="text-caption q-my-md q-px-xs text-grey-6">讲师介绍</div>
<q-editor :toolbar="toolbar" :fonts="fonts" v-model="objOption.AssistIntro" class="col-12" :definitions="{bold: {label: 'Bold', icon: null, tip: 'My bold tooltip'}}" />
</q-card-section>
<q-separator />
<q-card-actions align="right" class="bg-white">
<q-btn label="取消" color="dark" style="font-weight:400 !important" @click="closeSaveForm" />
<q-btn label="立即提交" color="accent" class="q-px-md" style="font-weight:400 !important" :loading="saveLoading" @click="saveTeacher" />
</q-card-actions>
</q-card>
</q-dialog>
</template>
<script>
import {
getSchoolDropdown,
saveAssist
} from '../../../api/school/index'
export default {
props: {
saveObj: {
type: Object,
default: null
}
},
data() {
return {
persistent: true,
objOption: {},
optionTitle: "",
schoolList: [],
saveLoading: false,
imgDomain: "http://imgfile.oytour.com",
action: "http://upload.oytour.com/Upload?filePath=" + encodeURIComponent('/assistTel/teacher/'),
toolbar: [],
fonts: {
arial: 'Arial',
arial_black: 'Arial Black',
comic_sans: 'Comic Sans MS',
courier_new: 'Courier New',
impact: 'Impact',
lucida_grande: 'Lucida Grande',
times_new_roman: 'Times New Roman',
verdana: 'Verdana'
}
}
},
mounted() {
this.getSchool()
this.initObj()
this.initToolBar()
},
methods: {
initToolBar() {
this.toolbar = [
[{
label: '对齐',
icon: this.$q.iconSet.editor.align,
fixedLabel: true,
list: 'only-icons',
options: ['left', 'center', 'right', 'justify']
}],
['bold', 'italic', 'strike', 'underline', 'subscript', 'superscript'],
[{
label: '格式',
icon: this.$q.iconSet.editor.formatting,
list: 'no-icons',
fixedLabel: true,
fixedIcon: true,
options: [
'p',
'h1',
'h2',
'h3',
'h4',
'h5',
'h6',
'code'
]
},
{
label: '字号',
icon: this.$q.iconSet.editor.fontSize,
fixedLabel: true,
fixedIcon: true,
list: 'no-icons',
options: [
'size-1',
'size-2',
'size-3',
'size-4',
'size-5',
'size-6',
'size-7'
]
},
{
label: '字体',
icon: this.$q.iconSet.editor.font,
fixedLabel: true,
fixedIcon: true,
list: 'no-icons',
options: [
'default_font',
'arial',
'arial_black',
'comic_sans',
'courier_new',
'impact',
'lucida_grande',
'times_new_roman',
'verdana'
]
},
'removeFormat'
],
['ordered', 'outdent', 'indent'],
]
},
initObj() {
if (this.saveObj) {
this.optionTitle = "修改助教信息"
this.objOption = this.saveObj
} else {
this.optionTitle = "新增助教"
this.objOption = {
AId: 0,
School_Id: '',
AssistName: "",
AssistTel: '',
AssistIcon: '',
AssistIntro: ''
}
}
},
removeTag(i) {
this.tags.splice(i, 1)
},
getSchool() {
getSchoolDropdown({}).then(res => {
this.schoolList = res.Data
if (this.objOption.School_Id != '') {
console.log(this.objOption)
this.objOption.School_Id = this.schoolList.filter(x => {
if (this.objOption.School_Id == x.SId) {
return x
}
})[0]
console.log(this.objOption)
}
})
},
onRejected(rejectedEntries) {
this.this.$q.notify({
type: 'negative',
position: "top",
message: `文件验证失败,请重新上传`
})
},
uploadSuccess(info) {
if (info.xhr.status == '200') {
let res = JSON.parse(info.xhr.response)
this.objOption.AssistIcon = this.imgDomain + res.FilePath
}
},
closeSaveForm() {
this.$emit('close')
this.persistent = false
},
createTag() {
if (this.tagText.length > 0) {
this.tags.push(this.tagText)
this.tagText = ''
}
},
saveTeacher() {
this.saveLoading = true
this.$refs.School_Id.validate()
this.$refs.AssistName.validate()
this.$refs.AssistTel.validate()
let tempSchool = null
if (
!this.$refs.School_Id.hasError &&
!this.$refs.AssistName.hasError &&
!this.$refs.AssistTel.hasError
) {
let err_msg = ""
if (this.objOption.AssistIcon == '') {
err_msg = "请上传助教头像"
}
if (err_msg == "") {
tempSchool = this.objOption.School_Id
this.objOption.School_Id = this.objOption.School_Id.SId
saveAssist(this.objOption).then(res => {
this.saveLoading = false
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '数据保存成功!',
position: 'top'
})
this.$emit("success")
this.closeSaveForm()
}).catch(() => {
this.saveLoading = false
this.objOption.School_Id = tempSchool
})
} else {
this.$q.notify({
type: 'negative',
position: "top",
message: err_msg
})
this.saveLoading = false
}
} else {
this.saveLoading = false
}
},
},
}
</script>
<style>
.tag-input {
border: 1px solid #777;
outline: none;
width: 140px;
padding: 5px;
border-radius: 4px;
}
.upload-assiatant-box .q-uploader__list {
display: none;
}
.upload-assiatant-box .q-uploader {
width: auto;
}
</style>
<template>
<q-dialog v-model="persistent" maximized full-height seamless position="right" @hide="closeShenheForm">
<q-card style="margin-top:61px;width:600px" class="no-border-radius q-px-lg">
<q-toolbar class="q-my-md q-pa-none">
<q-icon name="iconfont icon-11zaixianshenpixitong" size="30px" color="warning" />
<q-toolbar-title class="micfont">教师审核</q-toolbar-title>
</q-toolbar>
<div class="row">
<div class="col-6">
<q-field :value="text" label="教师照片" borderless>
<template v-slot:control>
<q-avatar class="q-mt-xs" v-if="showObj.AssistIcon">
<img :src="showObj.AssistIcon">
</q-avatar>
<q-avatar size="md" color="teal-10" text-color="white" v-if="!showObj.AssistIcon">{{showObj.AssistName.substring(0,1)}}</q-avatar>
</template>
</q-field>
</div>
<div class="col-6">
<q-field :value="text" label="教师姓名" borderless>
<template v-slot:control>
<div class="self-center full-width no-outline text-body1" tabindex="0">{{showObj.AssistName}}</div>
</template>
</q-field>
</div>
</div>
<div class="row q-my-md">
<div class="col-6">
<q-field :value="text" label="申请时间" borderless>
<template v-slot:control>
<div class="self-center full-width no-outline text-body2" tabindex="0">{{showObj.CreateTimeStr}}</div>
</template>
</q-field>
</div>
<div class="col-6">
<q-field :value="text" label="联系电话" borderless>
<template v-slot:control>
<div class="self-center full-width no-outline text-body2" tabindex="0">{{showObj.AssistTel}}</div>
</template>
</q-field>
</div>
</div>
<div>
<q-field filled label="申请备注" :value="text" borderless disable>
<template v-slot:control>
<div class="self-center full-width no-outline q-mt-xs" style="min-height:100px;"></div>
</template>
</q-field>
</div>
<q-separator class="q-my-md" />
<div class="q-mb-md">
<q-input square filled v-model="reason" borderless label="审批意见" ref="reason" type="textarea" counter :rules="[val => !!val || '请填写审批意见']" maxlength="100" />
</div>
<div style="text-align:right">
<q-btn size="xs" @click="saveReuslt(2)" icon="iconfont icon-chenggong" color="primary" style="font-weight:400" class="q-mr-md" label="通过" :loading="saveLoading &&saveType==2" :disable="saveLoading &&saveType!=2" />
<q-btn size="xs" @click="saveReuslt(3)" icon="iconfont icon-jujue" color="negative" style="font-weight:400" label="拒绝" :loading="saveLoading &&saveType==3" :disable="saveLoading &&saveType!=3" />
</div>
</q-card>
<div class="dialog-out-close" @click="closeShenheForm" style="height:40px !important;border-top-left-radius: 4px !important;border-bottom-left-radius: 4px !important;">
<q-icon name="iconfont icon-jujue1" size="26px" />
</div>
</q-dialog>
</template>
<script>
import {
auditAssist
} from '../../../api/school/index'
export default {
props: {
showObj: {
type: Object,
default: null
}
},
data() {
return {
persistent: true,
text: 'Field content',
reason: '',
saveLoading: false,
saveType: 0
}
},
methods: {
closeShenheForm() {
this.$emit('close')
},
saveReuslt(status) {
this.saveType = status
this.$refs.reason.validate()
if (!this.$refs.reason.hasError) {
this.saveLoading = true
auditAssist({
AuditStatus: this.saveType,
AuditRemark: this.reason,
AId: this.showObj.AId
}).then(res => {
this.saveLoading = false
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '审核完成!',
position: 'top'
})
this.$emit("success")
this.closeShenheForm()
}).catch(() => {
this.saveLoading = false
})
}
}
},
}
</script>
<style>
</style>
This diff is collapsed.
......@@ -37,7 +37,7 @@
</div>
</div>
<div class="page-content">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat class="sticky-tow-column-table" separator="none" title="教师信息" :data="data" :columns="columns" row-key="name">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat class="sticky-right-column-table sticky-tow-column-table" separator="none" title="教师信息" :data="data" :columns="columns" row-key="name">
<template v-slot:body-cell-IsShow="props">
<q-td :props="props">
<q-badge :color="props.value==0?'negative':'primary'" :label="props.value==0?'隐藏':'显示'" />
......@@ -92,9 +92,12 @@
</template>
<template v-slot:body-cell-optioned="props">
<q-td :props="props">
<q-btn flat size="xs" icon="iconfont icon-shenhe" color="info" style="font-weight:400" class="q-mr-xs" label="审核" @click="showExamine(props.row)" />
<q-btn flat size="xs" icon="iconfont icon-ziyuan" color="negative" style="font-weight:400" class="q-mr-xs" label="重置密码" @click="resetPw(props.row.TId)" />
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="编辑" @click="addObj(props.row)" />
<div style="min-width:190px;width:100%">
<q-btn v-if="props.row.AuditStatus==1" flat size="xs" icon="iconfont icon-shenhe" color="info" style="font-weight:400" class="q-mr-xs" label="审核" @click="showExamine(props.row)" />
<q-btn v-if="props.row.AuditStatus==2" flat size="xs" icon="iconfont icon-ziyuan" color="warning" style="font-weight:400" class="q-mr-xs" label="重置密码" @click="resetPw(props.row.TId)" />
<q-btn v-if="props.row.AuditStatus==3" flat size="xs" icon="iconfont icon-shanchu" color="negative" style="font-weight:400" class="q-mr-xs" label="删除" @click="deleteUser(props.row.TId)" />
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="编辑" @click="addObj(props.row)" />
</div>
</q-td>
</template>
</q-table>
......@@ -107,7 +110,8 @@
<script>
import {
getTeacherPage,
getSchoolDropdown
getSchoolDropdown,
deleteTeacher
} from '../../api/school/index'
import {
resetPassword
......@@ -251,7 +255,8 @@ export default {
objOption: null,
schoolList: [],
schoolTemp: null,
persistentExamine: false
persistentExamine: false,
resetLoading: false
}
},
mounted() {
......@@ -279,28 +284,66 @@ export default {
persistent: true,
cancel: {
label: "取消",
flat: true,
class: "micfont"
flat: true
},
ok: {
label: "确认重置",
flat: true,
focus: true,
class: "micfont"
focus: true
}
}).onOk(() => {
that.resetLoading = true
resetPassword({
AccountType: 2,
AccountId: id
}).then(res => {
that.resetLoading = false
that.$q.dialog({
title: "密码重置成功",
message: res.Message,
persistent: true
persistent: true,
ok: {
label: "确认",
flat: true,
focus: true
}
})
}).catch(() => {
that.resetLoading = false
});
});
},
deleteUser(id) {
let that = this
this.$q.dialog({
title: "删除教师",
message: "你正在进行删除教师行为,一旦执行无法找回,是否确认执行?",
persistent: true,
cancel: {
label: "取消",
flat: true
},
ok: {
label: "确认",
flat: true,
focus: true
}
}).onOk(() => {
that.resetLoading = true
deleteTeacher({
TId: id
}).then(res => {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '数据删除成功!',
position: 'top'
})
this.getTeacher()
})
});
},
changePage(val) {
this.msg.Status = this.StatusTemp ? this.StatusTemp.value : '-1'
this.msg.pageIndex = 1
......
const routes = [{
path: "/",
component: () =>
import("pages/user/login.vue")
},
{
path: "/login",
component: () =>
import("pages/user/login.vue")
},
{
path: "/home",
component: () =>
import("layouts/MainLayout.vue"),
children: [{
path: "",
path: "/",
component: () =>
import("pages/Index.vue")
},
{
path: "/school/manager",
import ("pages/user/login.vue")
},
{
path: "/login",
component: () =>
import("pages/school/manager.vue")
},
{
path: "/school/teacher",
import ("pages/user/login.vue")
},
{
path: "/home",
component: () =>
import("pages/school/teacher.vue")
},
{
path: "/system/menu", //菜单管理
component: () =>
import("pages/system/menu.vue")
},
{
path: "/system/role", //角色管理
component: () =>
import("pages/system/role.vue")
},
{
path: "/course/catagory", //课程分类
component: () =>
import("pages/course/catagory.vue")
},
{
path: "/test",//API测试
component: () =>
import("pages/test.vue")
},
]
},
import ("layouts/MainLayout.vue"),
children: [{
path: "",
component: () =>
import ("pages/Index.vue")
},
{
path: "/school/manager",
component: () =>
import ("pages/school/manager.vue")
},
{
path: "/school/teacher",
component: () =>
import ("pages/school/teacher.vue")
},
{
path: "/school/assistant",
component: () =>
import ("pages/school/assistant.vue")
},
{
path: "/system/menu", //菜单管理
component: () =>
import ("pages/system/menu.vue")
},
{
path: "/system/role", //角色管理
component: () =>
import ("pages/system/role.vue")
},
{
path: "/course/catagory", //课程分类
component: () =>
import ("pages/course/catagory.vue")
},
{
path: "/test", //API测试
component: () =>
import ("pages/test.vue")
},
]
},
// Always leave this as last one,
// but you can also remove it
{
path: "*",
component: () =>
import("pages/Error404.vue")
}
// Always leave this as last one,
// but you can also remove it
{
path: "*",
component: () =>
import ("pages/Error404.vue")
}
];
export default routes;
export default routes;
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment