parent
b831b14302
commit
812f1c916a
10 changed files with 124 additions and 1111 deletions
@ -0,0 +1,28 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<iframe :src="url" frameborder="0" width="100%"></iframe> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import Util from '@/libs/util' |
||||||
|
export default { |
||||||
|
data () { |
||||||
|
return { |
||||||
|
url: `http://192.168.31.125:8098/#/quesBankType?token=${sessionStorage.getItem('token')}` |
||||||
|
}; |
||||||
|
}, |
||||||
|
mounted () { |
||||||
|
|
||||||
|
}, |
||||||
|
methods: { |
||||||
|
|
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
iframe { |
||||||
|
height: calc(100vh - 173px); |
||||||
|
} |
||||||
|
</style> |
@ -1,488 +0,0 @@ |
|||||||
<template> |
|
||||||
<div class="page"> |
|
||||||
<div class="side"> |
|
||||||
<div class="m-b-20"> |
|
||||||
<h6 class="p-title">知识点</h6> |
|
||||||
<el-radio-group v-model="studentType" @change="changeType"> |
|
||||||
<div class="m-b-20"> |
|
||||||
<el-radio :label="1">所有知识点</el-radio> |
|
||||||
</div> |
|
||||||
<div> |
|
||||||
<el-radio :label="2">未加入分类的知识点</el-radio> |
|
||||||
</div> |
|
||||||
</el-radio-group> |
|
||||||
</div> |
|
||||||
<el-divider></el-divider> |
|
||||||
<div> |
|
||||||
<div class="flex-between"> |
|
||||||
<h6 class="p-title" style="margin-bottom: 0">知识点分类</h6> |
|
||||||
<el-button type="text" @click="addOrg">添加</el-button> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div style="overflow: auto"> |
|
||||||
<el-tree :data="orgList" default-expand-all ref="orgTree" node-key="id" highlight-current |
|
||||||
:expand-on-click-node="false" @node-click="handleNodeClick" |
|
||||||
:props="{ children: 'children', label: 'organizationName', isLeaf: 'leaf' }"> |
|
||||||
<span class="custom-tree-node" slot-scope="{ node, data }"> |
|
||||||
<span class="org-name">{{ node.label }}</span> |
|
||||||
<span> |
|
||||||
<el-button type="text" icon="el-icon-circle-plus-outline" @click="() => addOrg(node, data)"> |
|
||||||
</el-button> |
|
||||||
<el-button type="text" icon="el-icon-edit-outline" @click="() => editOrg(node, data)"> |
|
||||||
</el-button> |
|
||||||
<el-button type="text" icon="el-icon-delete" @click="() => delOrg(node, data)"> |
|
||||||
</el-button> |
|
||||||
</span> |
|
||||||
</span> |
|
||||||
</el-tree> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<el-dialog :title="orgForm.id ? '编辑' : '新增' + '知识点分类'" :visible.sync="orgVisible" :close-on-click-modal="false" |
|
||||||
width="50%"> |
|
||||||
<el-form v-if="orgVisible" ref="orgForm" :model="orgForm" :rules="orgRules" label-width="100px"> |
|
||||||
<el-form-item label="知识点分类名称" prop="organizationName"> |
|
||||||
<el-input v-model.trim="orgForm.organizationName" placeholder="请输入"></el-input> |
|
||||||
</el-form-item> |
|
||||||
<el-form-item label="设置上一级"> |
|
||||||
<span v-if="orgForm.parentName">{{ orgForm.parentName }}</span> |
|
||||||
<el-cascader v-else :options="orgListDia" v-model="cascaderValue" :props="cascaderProps" clearable |
|
||||||
style="width: 100%"> |
|
||||||
</el-cascader> |
|
||||||
</el-form-item> |
|
||||||
</el-form> |
|
||||||
<span slot="footer" class="dialog-footer"> |
|
||||||
<el-button @click="closeOrg">取 消</el-button> |
|
||||||
<el-button type="primary" @click="orgSubmit">确 定</el-button> |
|
||||||
</span> |
|
||||||
</el-dialog> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="right"> |
|
||||||
<h6 class="p-title">筛选</h6> |
|
||||||
<div class="tool"> |
|
||||||
<ul class="filter"> |
|
||||||
<li> |
|
||||||
<el-input style="width: 250px;" placeholder="请输入知识点名称" prefix-icon="el-icon-search" v-model="keyWord" |
|
||||||
clearable></el-input> |
|
||||||
</li> |
|
||||||
</ul> |
|
||||||
<div> |
|
||||||
<el-button type="primary" @click="add">新增知识点</el-button> |
|
||||||
<el-button type="primary" @click="delAllSelection">批量删除</el-button> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<el-table :data="list" class="table" ref="table" stripe header-align="center" |
|
||||||
@selection-change="handleSelectionChange" row-key="accountId"> |
|
||||||
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column> |
|
||||||
<el-table-column type="index" width="60" label="序号" align="center"></el-table-column> |
|
||||||
<el-table-column prop="userName" label="知识点名称" align="center" min-width="100"></el-table-column> |
|
||||||
<el-table-column prop="account" label="知识点分类" align="center" min-width="100"></el-table-column> |
|
||||||
<el-table-column prop="phone" label="已关联试题" align="center" width="120"></el-table-column> |
|
||||||
<el-table-column prop="phone" label="创建时间" align="center" width="120"></el-table-column> |
|
||||||
<el-table-column prop="phone" label="创建人" align="center" width="120"></el-table-column> |
|
||||||
<el-table-column label="操作" align="center" width="300"> |
|
||||||
<template slot-scope="scope"> |
|
||||||
<el-button type="text" v-auth="'/system:后台账号:编辑'" @click="queryStaff(scope.row, false)">编辑</el-button> |
|
||||||
<el-button type="text" v-auth="'/system:后台账号:重置密码'" @click="resetPassword(scope.row)">转移</el-button> |
|
||||||
<el-button type="text" v-auth="'/system:后台账号:删除'" @click="delStaff(scope.row)">删除</el-button> |
|
||||||
</template> |
|
||||||
</el-table-column> |
|
||||||
</el-table> |
|
||||||
<div class="pagination"> |
|
||||||
<el-pagination background @current-change="currentChange" :current-page="page" layout="total, prev, pager, next" |
|
||||||
:total="total"></el-pagination> |
|
||||||
</div> |
|
||||||
|
|
||||||
<el-dialog :title="!form.id ? '添加知识点' : '编辑知识点'" :visible.sync="knowledgeVisible" width="400px" |
|
||||||
:close-on-click-modal="false"> |
|
||||||
<el-form label-width="100px"> |
|
||||||
<el-form-item prop="userName" label="知识点分类"> |
|
||||||
<el-select style="width: 100%" v-model="form.provinceId" placeholder="请选择知识点分类"> |
|
||||||
<el-option v-for="(item, i) in types" :key="i" :label="item.provinceName" |
|
||||||
:value="item.provinceId"></el-option> |
|
||||||
</el-select> |
|
||||||
</el-form-item> |
|
||||||
<el-form-item prop="userName" label="知识点名称"> |
|
||||||
<el-input placeholder="请输入知识点名称" v-model="form.name" maxlength="20"></el-input> |
|
||||||
</el-form-item> |
|
||||||
</el-form> |
|
||||||
<span slot="footer" class="dialog-footer"> |
|
||||||
<el-button @click="knowledgeVisible = false">取 消</el-button> |
|
||||||
<el-button type="primary" @click="knowledgeSubmit">确 定</el-button> |
|
||||||
</span> |
|
||||||
</el-dialog> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</template> |
|
||||||
|
|
||||||
<script> |
|
||||||
import util from "@/libs/util"; |
|
||||||
import Setting from "@/setting"; |
|
||||||
import OrgTree from "@/components/org-tree/src/tree"; |
|
||||||
export default { |
|
||||||
components: { OrgTree }, |
|
||||||
data () { |
|
||||||
return { |
|
||||||
orgList: [], |
|
||||||
orgListDia: [], |
|
||||||
studentType: 1, //类型:必填一个(1.所有员工 2.未加入班级员工) |
|
||||||
orgVisible: false, // 员工组织架对话框 |
|
||||||
orgForm: { |
|
||||||
id: '', |
|
||||||
organizationName: '' |
|
||||||
}, |
|
||||||
cascaderValue: [], // 上级部门 |
|
||||||
cascaderProps: { |
|
||||||
checkStrictly: true, |
|
||||||
label: "organizationName", |
|
||||||
value: "id" |
|
||||||
}, |
|
||||||
treeVisible: true, |
|
||||||
treeNode: {}, |
|
||||||
treeResolve: [], |
|
||||||
isDetail: false, |
|
||||||
keyWord: '', |
|
||||||
types: [], |
|
||||||
form: { |
|
||||||
accountId: '', |
|
||||||
userName: '', |
|
||||||
phone: '', |
|
||||||
roleList: [], |
|
||||||
uniqueIdentification: '', |
|
||||||
workNumber: '', |
|
||||||
email: '', |
|
||||||
account: '', |
|
||||||
staffArchitectureId: [] |
|
||||||
}, |
|
||||||
orgRules: { |
|
||||||
organizationName: [ |
|
||||||
{ required: true, message: "请输入部门名称", trigger: "blur" } |
|
||||||
] |
|
||||||
}, |
|
||||||
rules: { |
|
||||||
account: [ |
|
||||||
{ required: true, message: "请输入部门名称", trigger: "blur" } |
|
||||||
], |
|
||||||
}, |
|
||||||
list: [], |
|
||||||
page: 1, |
|
||||||
pageSize: 10, |
|
||||||
total: 0, |
|
||||||
multipleSelection: [], |
|
||||||
|
|
||||||
knowledgeVisible: false, |
|
||||||
submiting: false // 新增编辑防抖标识 |
|
||||||
}; |
|
||||||
}, |
|
||||||
watch: { |
|
||||||
keyWord: function (val) { |
|
||||||
clearTimeout(this.searchTimer); |
|
||||||
this.searchTimer = setTimeout(this.getList, 500); |
|
||||||
} |
|
||||||
}, |
|
||||||
mounted () { |
|
||||||
this.getOrg() |
|
||||||
}, |
|
||||||
methods: { |
|
||||||
// 获取组织 |
|
||||||
async getOrg () { |
|
||||||
const res = await this.$post(this.api.treeListArch) |
|
||||||
const list = res.treeList |
|
||||||
this.orgList = list |
|
||||||
this.getList() |
|
||||||
}, |
|
||||||
// 组织类别筛选回调 |
|
||||||
changeType () { |
|
||||||
this.$refs.orgTree.setCurrentKey(null) |
|
||||||
this.initData() |
|
||||||
}, |
|
||||||
// 添加部门 |
|
||||||
addOrg (node, data) { |
|
||||||
const list = JSON.parse(JSON.stringify(this.orgList)) |
|
||||||
this.handleOrg(list) |
|
||||||
this.orgListDia = list |
|
||||||
this.orgForm = { |
|
||||||
id: '', |
|
||||||
parentId: data ? data.id : 1, |
|
||||||
level: data ? data.level + 1 : 1, |
|
||||||
parentName: data ? data.organizationName : '', |
|
||||||
organizationName: '' |
|
||||||
} |
|
||||||
this.orgVisible = true |
|
||||||
}, |
|
||||||
// 编辑部门 |
|
||||||
editOrg (node, data) { |
|
||||||
const list = JSON.parse(JSON.stringify(this.orgList)) |
|
||||||
this.handleOrg(list, data.id, 0) |
|
||||||
this.orgListDia = list |
|
||||||
this.orgForm = { |
|
||||||
id: data.id, |
|
||||||
organizationName: data.organizationName |
|
||||||
} |
|
||||||
this.orgVisible = true |
|
||||||
const ids = data.ids |
|
||||||
ids.splice(ids.length - 1, 1) |
|
||||||
this.cascaderValue = ids |
|
||||||
}, |
|
||||||
// 处理更换部门的禁选 |
|
||||||
handleOrg (list, id, disabled) { |
|
||||||
list.forEach(e => { |
|
||||||
// 如果是已经找到了要禁选的层级,则直接改变disabled,并递归 |
|
||||||
if (disabled) { |
|
||||||
e.disabled = true |
|
||||||
e.children && this.handleOrg(e.children, id, 1) |
|
||||||
} else { |
|
||||||
if (e.id === id) { |
|
||||||
e.disabled = true |
|
||||||
e.children && this.handleOrg(e.children, id, 1) |
|
||||||
} else { |
|
||||||
e.children && this.handleOrg(e.children, id, 0) |
|
||||||
} |
|
||||||
} |
|
||||||
}) |
|
||||||
}, |
|
||||||
// 删除部门 |
|
||||||
delOrg (node, data) { |
|
||||||
this.$confirm("确定要删除吗?", "提示", { |
|
||||||
type: "warning" |
|
||||||
}).then(() => { |
|
||||||
this.$post(`${this.api.deleteArch}?id=${data.id}`).then(res => { |
|
||||||
util.successMsg("删除成功") |
|
||||||
this.getOrg() |
|
||||||
}).catch(res => { }) |
|
||||||
}).catch(() => { }) |
|
||||||
}, |
|
||||||
// 提交组织架构新增/编辑 |
|
||||||
orgSubmit () { |
|
||||||
this.$refs.orgForm.validate((valid) => { |
|
||||||
if (valid) { |
|
||||||
const form = this.orgForm |
|
||||||
const cas = this.cascaderValue |
|
||||||
const len = cas.length |
|
||||||
if (cas && len) { |
|
||||||
this.orgForm.parentId = cas[len - 1] |
|
||||||
this.orgForm.level = len + 1 |
|
||||||
} |
|
||||||
if (!form.id) { |
|
||||||
// 添加 |
|
||||||
this.$post(this.api.saveArch, form).then(res => { |
|
||||||
util.successMsg("新增成功!") |
|
||||||
this.closeOrg() |
|
||||||
}).catch(err => { }) |
|
||||||
} else { |
|
||||||
// 编辑 |
|
||||||
this.$post(this.api.updateArch, form).then(res => { |
|
||||||
util.successMsg("编辑成功!") |
|
||||||
this.closeOrg() |
|
||||||
}).catch(err => { }) |
|
||||||
} |
|
||||||
} |
|
||||||
}); |
|
||||||
}, |
|
||||||
// 点击树节点查询列表数据 |
|
||||||
handleNodeClick (data) { |
|
||||||
this.$refs.table.clearSelection() |
|
||||||
this.studentType = null |
|
||||||
this.getList() |
|
||||||
}, |
|
||||||
// 关闭组织新增编辑弹框 |
|
||||||
closeOrg () { |
|
||||||
this.orgVisible = false |
|
||||||
this.cascaderValue = [] |
|
||||||
this.getOrg() |
|
||||||
}, |
|
||||||
// 列表 |
|
||||||
getList () { |
|
||||||
this.$post(this.api.staffList, { |
|
||||||
type: this.studentType || 1, |
|
||||||
staffArchitectureId: this.$refs.orgTree.getCurrentKey() || '', |
|
||||||
keyWord: this.keyWord, |
|
||||||
pageNum: this.page, |
|
||||||
pageSize: this.pageSize |
|
||||||
}).then(res => { |
|
||||||
this.list = res.page.records |
|
||||||
this.total = res.page.total |
|
||||||
}).catch(err => { }) |
|
||||||
}, |
|
||||||
// 切换页码 |
|
||||||
currentChange (val) { |
|
||||||
this.page = val |
|
||||||
this.getList() |
|
||||||
}, |
|
||||||
handleSelectionChange (val) { // 多选 |
|
||||||
this.multipleSelection = val |
|
||||||
}, |
|
||||||
initData () { |
|
||||||
this.$refs.table.clearSelection() |
|
||||||
this.page = 1 |
|
||||||
this.getList() |
|
||||||
}, |
|
||||||
// 删除 |
|
||||||
delStaff (row) { |
|
||||||
this.$confirm("确定要删除吗?", "提示", { |
|
||||||
type: "warning" |
|
||||||
}).then(() => { |
|
||||||
this.$post(`${this.api.delStaff}?accountIds=${row.accountId}`).then(res => { |
|
||||||
util.successMsg("删除成功") |
|
||||||
this.getList() |
|
||||||
}).catch(res => { }) |
|
||||||
}).catch(() => { }) |
|
||||||
}, |
|
||||||
// 重置密码 |
|
||||||
resetPassword (row) { |
|
||||||
const newPwd = Setting.initialPassword |
|
||||||
this.$confirm(`重置后的密码为:${newPwd},确定重置?`, "提示", { type: "warning" }).then(() => { |
|
||||||
this.$get(`${this.api.resetPwd}?userId=${row.userId}&newPwd=${newPwd}`).then(res => { |
|
||||||
util.successMsg("重置成功") |
|
||||||
}).catch(res => { }) |
|
||||||
}).catch(() => { }) |
|
||||||
}, |
|
||||||
// 添加员工 |
|
||||||
add () { |
|
||||||
this.knowledgeVisible = true |
|
||||||
this.$nextTick(() => { |
|
||||||
this.$refs.form.clearValidate() |
|
||||||
}) |
|
||||||
}, |
|
||||||
// 编辑/查看 |
|
||||||
queryStaff (row, isDetail) { |
|
||||||
const archId = [] |
|
||||||
// 处理部门id |
|
||||||
const handleArchId = (list, ids, parentId = []) => { |
|
||||||
list.map(e => { |
|
||||||
// 把部门id分割成二维数组,[[1, 2], [3, 4]],每个层级的id都要放进去,后端返回的是最后一级的id,无法回显 |
|
||||||
if (ids.includes(e.id)) { |
|
||||||
archId.push([...parentId, e.id]) |
|
||||||
} else { |
|
||||||
e.children && handleArchId(e.children, ids, [...parentId, e.id]) |
|
||||||
} |
|
||||||
}) |
|
||||||
} |
|
||||||
this.isDetail = isDetail |
|
||||||
this.staffVisible = true |
|
||||||
this.$get(`${this.api.staffDetail}?accountId=${row.accountId}`).then(res => { |
|
||||||
const { data } = res |
|
||||||
const { staffArchitectureId, roleId } = data |
|
||||||
if (roleId) { |
|
||||||
const roleList = roleId.split(',').map(e => Number(e)) |
|
||||||
const list = this.roleList |
|
||||||
if (roleList.length) { |
|
||||||
let has = false // 是否在角色列表里有已选择的角色,全部都被删除了,则提示 |
|
||||||
for (const i in roleList) { |
|
||||||
if (list.find(n => n.id === roleList[i])) { |
|
||||||
has = true |
|
||||||
break |
|
||||||
} |
|
||||||
} |
|
||||||
if (!has) { |
|
||||||
util.warningMsg('角色被删请重新选择') |
|
||||||
data.roleList = [] |
|
||||||
} else { |
|
||||||
data.roleList = roleList |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
if (staffArchitectureId) { |
|
||||||
handleArchId(this.orgList, staffArchitectureId.split(',').map(e => Number(e))) |
|
||||||
data.staffArchitectureId = archId |
|
||||||
} |
|
||||||
this.form = data |
|
||||||
this.originAccount = data.account |
|
||||||
this.originWorkNumber = data.workNumber |
|
||||||
}).catch(res => { }) |
|
||||||
}, |
|
||||||
// 知识点提交 |
|
||||||
knowledgeSubmit () { |
|
||||||
this.$refs.form.validate((valid) => { |
|
||||||
if (valid) { |
|
||||||
if (this.submiting) return false |
|
||||||
this.submiting = true |
|
||||||
const form = JSON.parse(JSON.stringify(this.form)) |
|
||||||
const ids = form.staffArchitectureId |
|
||||||
if (ids) form.staffArchitectureId = ids.map(e => e[e.length - 1]) |
|
||||||
if (form.accountId) { |
|
||||||
this.$post(this.api.modifyStaff, form).then(res => { |
|
||||||
util.successMsg("编辑成功!") |
|
||||||
this.staffVisible = false |
|
||||||
setTimeout(() => { |
|
||||||
this.submiting = false |
|
||||||
}, 2000) |
|
||||||
}).catch(res => { |
|
||||||
setTimeout(() => { |
|
||||||
this.submiting = false |
|
||||||
}, 2000) |
|
||||||
}) |
|
||||||
} else { |
|
||||||
form.uniqueIdentification = new Date().getTime() |
|
||||||
this.$post(this.api.saveStaff, form).then(res => { |
|
||||||
util.successMsg("新增成功!") |
|
||||||
this.staffVisible = false |
|
||||||
setTimeout(() => { |
|
||||||
this.submiting = false |
|
||||||
}, 2000) |
|
||||||
}).catch(res => { |
|
||||||
setTimeout(() => { |
|
||||||
this.submiting = false |
|
||||||
}, 2000) |
|
||||||
}) |
|
||||||
} |
|
||||||
} |
|
||||||
}) |
|
||||||
}, |
|
||||||
delAllSelection () { |
|
||||||
const list = this.multipleSelection |
|
||||||
if (list.length) { |
|
||||||
// 批量删除 |
|
||||||
this.$confirm("确定要删除吗?", "提示", { |
|
||||||
type: "warning" |
|
||||||
}).then(() => { |
|
||||||
this.$post(this.api.orderDelete, { ids: list }).then(res => { |
|
||||||
const { orderData } = this |
|
||||||
this.$message.success("删除成功"); |
|
||||||
this.$refs.table.clearSelection() |
|
||||||
this.getData(); |
|
||||||
}).catch(err => { |
|
||||||
}); |
|
||||||
}).catch(err => { |
|
||||||
}); |
|
||||||
} else { |
|
||||||
this.$message.error("请先选择数据 !"); |
|
||||||
} |
|
||||||
}, |
|
||||||
} |
|
||||||
}; |
|
||||||
</script> |
|
||||||
|
|
||||||
<style lang="scss" scoped> |
|
||||||
.m-b-20 { |
|
||||||
margin-bottom: 20px; |
|
||||||
} |
|
||||||
|
|
||||||
.org-name { |
|
||||||
margin-right: 20px; |
|
||||||
} |
|
||||||
|
|
||||||
.w-100 { |
|
||||||
width: 100%; |
|
||||||
} |
|
||||||
|
|
||||||
.page { |
|
||||||
display: flex; |
|
||||||
min-height: 100%; |
|
||||||
padding: 0 24px; |
|
||||||
|
|
||||||
.side { |
|
||||||
width: 300px; |
|
||||||
padding: 24px 10px 24px 0; |
|
||||||
margin-right: 24px; |
|
||||||
border-right: 1px solid rgba(0, 0, 0, 0.06); |
|
||||||
} |
|
||||||
|
|
||||||
.right { |
|
||||||
width: calc(100% - 374px); |
|
||||||
padding: 24px 0; |
|
||||||
} |
|
||||||
} |
|
||||||
</style> |
|
@ -1,357 +0,0 @@ |
|||||||
<template> |
|
||||||
<div class="page"> |
|
||||||
<div class="side"> |
|
||||||
<div class="m-b-20"> |
|
||||||
<h6 class="p-title">题库分类</h6> |
|
||||||
<el-radio-group v-model="type" @change="typeChange"> |
|
||||||
<div class="m-b-20"> |
|
||||||
<el-radio :label="1">所有题库</el-radio> |
|
||||||
</div> |
|
||||||
<div> |
|
||||||
<el-radio :label="2">未加入分类的题库</el-radio> |
|
||||||
</div> |
|
||||||
</el-radio-group> |
|
||||||
</div> |
|
||||||
<el-divider></el-divider> |
|
||||||
<div> |
|
||||||
|
|
||||||
<el-input class="m-b-10" placeholder="请输入题库分类" prefix-icon="el-icon-search" size="small" clearable></el-input> |
|
||||||
<div style="height: 504px; max-height: 504px; overflow: auto"> |
|
||||||
<el-tree :data="orgList" default-expand-all ref="orgTree" node-key="id" highlight-current |
|
||||||
:expand-on-click-node="false" @node-click="handleNodeClick" |
|
||||||
:props="{ children: 'children', label: 'partnerClassificationName', isLeaf: 'leaf' }"></el-tree> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="right"> |
|
||||||
<h6 class="p-title">筛选</h6> |
|
||||||
<div class="tool"> |
|
||||||
<ul class="filter"> |
|
||||||
<li> |
|
||||||
<label>状态</label> |
|
||||||
<el-select v-model="filter.status" clearable placeholder="请选择状态" @change="getList"> |
|
||||||
<el-option v-for="(item, i) in status" :key="i" :label="item.name" :value="item.id"></el-option> |
|
||||||
</el-select> |
|
||||||
</li> |
|
||||||
<li> |
|
||||||
<label>搜索</label> |
|
||||||
<el-input style="width: 250px;" placeholder="请输入题库名称" prefix-icon="el-icon-search" v-model="filter.keyWord" |
|
||||||
clearable></el-input> |
|
||||||
</li> |
|
||||||
</ul> |
|
||||||
<div> |
|
||||||
<el-button type="primary" @click="add">创建题库</el-button> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<el-table :data="list" class="table" ref="table" stripe header-align="center" |
|
||||||
@selection-change="handleSelectionChange" row-key="id"> |
|
||||||
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column> |
|
||||||
<el-table-column type="index" width="60" label="序号" align="center"></el-table-column> |
|
||||||
<el-table-column prop="userName" label="题库名称" align="center" min-width="100"></el-table-column> |
|
||||||
<el-table-column prop="account" label="描述" align="center" min-width="100"></el-table-column> |
|
||||||
<el-table-column prop="phone" label="题库分类" align="center" min-width="120"></el-table-column> |
|
||||||
<el-table-column prop="invitationAccount" label="题目数量" align="center" min-width="120"></el-table-column> |
|
||||||
<el-table-column prop="loginNumber" label="创建时间" align="center" width="120"></el-table-column> |
|
||||||
<el-table-column prop="lastLoginTime" label="创建人" align="center" width="120"></el-table-column> |
|
||||||
<el-table-column label="操作" align="center" width="300"> |
|
||||||
<template slot-scope="scope"> |
|
||||||
<el-button type="text" @click="edit(scope.row)">试题管理</el-button> |
|
||||||
<el-button type="text" @click="edit(scope.row)">编辑</el-button> |
|
||||||
<el-button type="text" @click="del(scope.row)">复制</el-button> |
|
||||||
<el-button type="text" @click="del(scope.row)">删除</el-button> |
|
||||||
<el-switch v-model="scope.row.ztOpen" :active-value="0" :inactive-value="1" style="margin: 0 10px 0 5px" |
|
||||||
:active-text="scope.row.ztOpen ? '关' : '开'" |
|
||||||
@change="switchOff($event, scope.row, scope.$index)"></el-switch> |
|
||||||
</template> |
|
||||||
</el-table-column> |
|
||||||
</el-table> |
|
||||||
<div class="pagination"> |
|
||||||
<el-pagination background @current-change="currentChange" :current-page="page" layout="total, prev, pager, next" |
|
||||||
:total="total"></el-pagination> |
|
||||||
</div> |
|
||||||
|
|
||||||
<el-dialog :title="!form.id ? '创建题库' : '编辑题库'" :visible.sync="quesBankVisible" width="400px" |
|
||||||
:close-on-click-modal="false"> |
|
||||||
<el-form label-width="80px"> |
|
||||||
<el-form-item prop="userName" label="分类"> |
|
||||||
<el-select style="width: 100%" v-model="form.provinceId" placeholder="请选择题库分类"> |
|
||||||
<el-option v-for="(item, i) in types" :key="i" :label="item.provinceName" |
|
||||||
:value="item.provinceId"></el-option> |
|
||||||
</el-select> |
|
||||||
</el-form-item> |
|
||||||
<el-form-item prop="userName" label="题库名称"> |
|
||||||
<el-input placeholder="请输入题库名称" v-model="form.name"></el-input> |
|
||||||
</el-form-item> |
|
||||||
<el-form-item prop="userName" label="题库描述"> |
|
||||||
<el-input placeholder="请输入题库描述" type="textarea" :rows="3" v-model="form.name"></el-input> |
|
||||||
</el-form-item> |
|
||||||
</el-form> |
|
||||||
<span slot="footer" class="dialog-footer"> |
|
||||||
<el-button @click="quesBankVisible = false">取 消</el-button> |
|
||||||
<el-button type="primary" @click="quesBankSubmit">确 定</el-button> |
|
||||||
</span> |
|
||||||
</el-dialog> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</template> |
|
||||||
|
|
||||||
<script> |
|
||||||
import Util from "@/libs/util"; |
|
||||||
import Setting from "@/setting"; |
|
||||||
import OrgTree from "@/components/org-tree/src/tree"; |
|
||||||
export default { |
|
||||||
components: { OrgTree }, |
|
||||||
data () { |
|
||||||
return { |
|
||||||
type: 1, |
|
||||||
orgList: [], |
|
||||||
status: [ |
|
||||||
{ |
|
||||||
id: 1, |
|
||||||
name: '启用' |
|
||||||
}, |
|
||||||
{ |
|
||||||
id: 2, |
|
||||||
name: '禁用' |
|
||||||
}, |
|
||||||
], |
|
||||||
filter: { |
|
||||||
status: '', |
|
||||||
keyWord: '', |
|
||||||
}, |
|
||||||
list: [], |
|
||||||
page: 1, |
|
||||||
pageSize: 10, |
|
||||||
total: 0, |
|
||||||
multipleSelection: [], |
|
||||||
|
|
||||||
types: [], |
|
||||||
form: { |
|
||||||
userName: '', |
|
||||||
provinceId: '', |
|
||||||
cityId: '', |
|
||||||
roleList: [] |
|
||||||
}, |
|
||||||
rules: { |
|
||||||
userName: [ |
|
||||||
{ required: true, message: "请输入姓名", trigger: "blur" } |
|
||||||
], |
|
||||||
provinceId: [ |
|
||||||
{ required: true, message: '请选择省份', trigger: "change" } |
|
||||||
], |
|
||||||
cityId: [ |
|
||||||
{ required: true, message: '请选择城市', trigger: "change" } |
|
||||||
], |
|
||||||
roleList: [ |
|
||||||
{ required: true, message: '请选择角色', trigger: "change" } |
|
||||||
], |
|
||||||
}, |
|
||||||
quesBankVisible: false, |
|
||||||
|
|
||||||
|
|
||||||
submiting: false, // 新增编辑防抖标识 |
|
||||||
setKey: '', |
|
||||||
transferVisible: false, |
|
||||||
chooseVisible: false, |
|
||||||
members: [], |
|
||||||
choosePartnerId: '', |
|
||||||
curRow: '', |
|
||||||
provinces: [], |
|
||||||
cities: [], |
|
||||||
editVisible: false |
|
||||||
}; |
|
||||||
}, |
|
||||||
watch: { |
|
||||||
keyWord: function (val) { |
|
||||||
clearTimeout(this.searchTimer); |
|
||||||
this.searchTimer = setTimeout(this.initData, 500); |
|
||||||
} |
|
||||||
}, |
|
||||||
mounted () { |
|
||||||
this.getOrg() |
|
||||||
}, |
|
||||||
methods: { |
|
||||||
// 获取组织 |
|
||||||
async getOrg () { |
|
||||||
const res = await this.$post(this.api.listParner) |
|
||||||
const list = res.treeList |
|
||||||
// 没有子级,删除children属性 |
|
||||||
const handleLeaf = (list, ids) => { |
|
||||||
list.map(e => { |
|
||||||
e.ids = ids ? [...ids, e.id] : [e.id] |
|
||||||
if (e.children.length) { |
|
||||||
if (e.isTeam) { |
|
||||||
delete e.children |
|
||||||
} else { |
|
||||||
handleLeaf(e.children, e.ids) |
|
||||||
} |
|
||||||
} else { |
|
||||||
delete e.children |
|
||||||
} |
|
||||||
}) |
|
||||||
} |
|
||||||
handleLeaf(list) |
|
||||||
this.orgList = list |
|
||||||
// 如果刚编辑完,则选中刚编辑的分类 |
|
||||||
this.setKey && this.$nextTick(() => { |
|
||||||
this.$refs.orgTree.setCurrentKey(this.setKey) |
|
||||||
}) |
|
||||||
this.getList() |
|
||||||
}, |
|
||||||
// 类型回调 |
|
||||||
typeChange () { |
|
||||||
this.$refs.orgTree.setCurrentKey(null) |
|
||||||
this.curTeamId = '' |
|
||||||
this.initData() |
|
||||||
}, |
|
||||||
// 获得点击层级里的第一个城市合伙人id |
|
||||||
getTeamId (list) { |
|
||||||
for (const i in list) { |
|
||||||
const e = list[i] |
|
||||||
if (e.isTeam && !this.curTeamId) { |
|
||||||
this.curTeamId = e.id |
|
||||||
break |
|
||||||
} else { |
|
||||||
this.getTeamId(e.children) |
|
||||||
} |
|
||||||
} |
|
||||||
}, |
|
||||||
// 点击树节点查询列表数据 |
|
||||||
handleNodeClick (data) { |
|
||||||
this.type = '' |
|
||||||
this.curTeamId = '' |
|
||||||
if (data.isTeam) { |
|
||||||
this.curTeamId = data.id |
|
||||||
} else { |
|
||||||
// this.getTeamId(data.children) |
|
||||||
} |
|
||||||
if (!this.curTeamId) this.curTeamId = data.id |
|
||||||
this.initData() |
|
||||||
this.$refs.table.clearSelection() |
|
||||||
}, |
|
||||||
// 查询全部 |
|
||||||
getAll () { |
|
||||||
this.curTeamId = '' |
|
||||||
this.getList() |
|
||||||
}, |
|
||||||
// 员工列表 |
|
||||||
getList () { |
|
||||||
this.$post(this.api[this.type ? 'partnerAccountMergeList' : 'partnerAccountList'], { |
|
||||||
type: this.type || 1, |
|
||||||
partnerClassificationId: this.curTeamId, |
|
||||||
pageNum: this.page, |
|
||||||
pageSize: this.pageSize |
|
||||||
}).then(({ pageList }) => { |
|
||||||
pageList.records.forEach((e, i) => { |
|
||||||
e.id = i |
|
||||||
}) |
|
||||||
this.list = pageList.records |
|
||||||
this.total = pageList.total |
|
||||||
}).catch(err => { }) |
|
||||||
}, |
|
||||||
// 切换页码 |
|
||||||
currentChange (val) { |
|
||||||
this.page = val |
|
||||||
this.getList() |
|
||||||
}, |
|
||||||
handleSelectionChange (val) { // 多选 |
|
||||||
this.multipleSelection = val |
|
||||||
}, |
|
||||||
initData () { |
|
||||||
this.$refs.table.clearSelection() |
|
||||||
this.page = 1 |
|
||||||
this.getList() |
|
||||||
}, |
|
||||||
// 删除 |
|
||||||
del (row) { |
|
||||||
this.$confirm("确定要删除吗?", "提示", { |
|
||||||
type: "warning" |
|
||||||
}).then(() => { |
|
||||||
this.$post(`${this.api.delPartnerAccount}?accountId=${row.accountId}`).then(res => { |
|
||||||
Util.successMsg("删除成功") |
|
||||||
this.getList() |
|
||||||
}).catch(res => { }) |
|
||||||
}).catch(() => { }) |
|
||||||
}, |
|
||||||
async switchOff (val, row) { |
|
||||||
this.$post(this.api.disabledEventsCompetition, { |
|
||||||
competitionId: row.id, |
|
||||||
isOpen: val, |
|
||||||
type: 0 // 禁用平台来源(0中台,1职站) |
|
||||||
}).then(res => { |
|
||||||
Util.successMsg(val == 1 ? '禁用成功' : '启用成功') |
|
||||||
}).catch(err => { }) |
|
||||||
|
|
||||||
await this.$post(`${this.api.refreshPageNotification}?content=1`) |
|
||||||
}, |
|
||||||
// 编辑 |
|
||||||
edit (row) { |
|
||||||
if (!row.provinceId) row.provinceId = '' |
|
||||||
if (!row.cityId) row.cityId = '' |
|
||||||
row.roleList = row.roleId.split(',').map(e => +e) |
|
||||||
this.editVisible = true |
|
||||||
this.form = JSON.parse(JSON.stringify(row)) |
|
||||||
}, |
|
||||||
// 编辑提交 |
|
||||||
submitEdit () { |
|
||||||
this.$refs.form.validate((valid) => { |
|
||||||
if (valid) { |
|
||||||
if (this.submiting) return false |
|
||||||
this.submiting = true |
|
||||||
const form = JSON.parse(JSON.stringify(this.form)) |
|
||||||
form.classificationId = form.partnerClassificationId |
|
||||||
this.$post(this.api.editProvinceCity, form).then(res => { |
|
||||||
this.getList() |
|
||||||
Util.successMsg("编辑成功!") |
|
||||||
this.editVisible = false |
|
||||||
setTimeout(() => { |
|
||||||
this.submiting = false |
|
||||||
}, 2000) |
|
||||||
}).catch(res => { |
|
||||||
setTimeout(() => { |
|
||||||
this.submiting = false |
|
||||||
}, 2000) |
|
||||||
}) |
|
||||||
} |
|
||||||
}) |
|
||||||
}, |
|
||||||
// 添加 |
|
||||||
add () { |
|
||||||
this.quesBankVisible = true |
|
||||||
}, |
|
||||||
// 题库提交 |
|
||||||
quesBankSubmit () { |
|
||||||
|
|
||||||
}, |
|
||||||
} |
|
||||||
}; |
|
||||||
</script> |
|
||||||
|
|
||||||
<style lang="scss" scoped> |
|
||||||
.org-name { |
|
||||||
margin-right: 20px; |
|
||||||
} |
|
||||||
|
|
||||||
.w-100 { |
|
||||||
width: 100%; |
|
||||||
} |
|
||||||
|
|
||||||
.page { |
|
||||||
display: flex; |
|
||||||
padding: 0 24px; |
|
||||||
|
|
||||||
.side { |
|
||||||
width: 300px; |
|
||||||
padding: 24px 10px 24px 0; |
|
||||||
margin-right: 24px; |
|
||||||
border-right: 1px solid rgba(0, 0, 0, 0.06); |
|
||||||
} |
|
||||||
|
|
||||||
.right { |
|
||||||
width: calc(100% - 324px); |
|
||||||
padding: 24px 0; |
|
||||||
} |
|
||||||
} |
|
||||||
</style> |
|
@ -1,194 +0,0 @@ |
|||||||
<template> |
|
||||||
<div class="page"> |
|
||||||
<div class="tool"> |
|
||||||
<ul class="filter"> |
|
||||||
<li> |
|
||||||
<label>状态</label> |
|
||||||
<el-select v-model="filter.status" clearable placeholder="请选择状态" @change="getData"> |
|
||||||
<el-option v-for="(item, i) in status" :key="i" :label="item.name" :value="item.id"></el-option> |
|
||||||
</el-select> |
|
||||||
</li> |
|
||||||
<li> |
|
||||||
<label>搜索</label> |
|
||||||
<el-input style="width: 250px;" placeholder="请输入题库分类名称" prefix-icon="el-icon-search" v-model="filter.keyWord" |
|
||||||
clearable></el-input> |
|
||||||
</li> |
|
||||||
</ul> |
|
||||||
<div> |
|
||||||
<el-button type="primary" @click="add">新增</el-button> |
|
||||||
<el-button type="primary" @click="delAllSelection">批量删除</el-button> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<el-table v-loading="loading" :data="list" class="table" ref="table" stripe header-align="center" row-key="id" |
|
||||||
default-expand-all :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"> |
|
||||||
<el-table-column type="index" width="100" label="序号" align="center"></el-table-column> |
|
||||||
<el-table-column prop="curriculumName" label="题库分类名称" align="center"></el-table-column> |
|
||||||
<el-table-column prop="curriculumType" label="已关联题库" align="center"></el-table-column> |
|
||||||
<el-table-column prop="userName" label="创建时间" align="center"></el-table-column> |
|
||||||
<el-table-column prop="orderVolume" label="创建人" align="center"></el-table-column> |
|
||||||
<el-table-column label="操作" align="center" width="300"> |
|
||||||
<template slot-scope="scope"> |
|
||||||
<el-button type="text" @click="edit(scope.row)">新增下级</el-button> |
|
||||||
<el-button type="text" @click="edit(scope.row)">编辑</el-button> |
|
||||||
<el-button type="text" @click="del(scope.row)">删除</el-button> |
|
||||||
<el-switch v-model="scope.row.ztOpen" :active-value="0" :inactive-value="1" style="margin: 0 10px 0 5px" |
|
||||||
:active-text="scope.row.ztOpen ? '关' : '开'" |
|
||||||
@change="switchOff($event, scope.row, scope.$index)"></el-switch> |
|
||||||
</template> |
|
||||||
</el-table-column> |
|
||||||
</el-table> |
|
||||||
<div class="pagination"> |
|
||||||
<el-pagination background @current-change="handleCurrentChange" :current-page="page" |
|
||||||
layout="total, prev, pager, next" :total="total"></el-pagination> |
|
||||||
</div> |
|
||||||
|
|
||||||
|
|
||||||
<el-dialog :title="(!form.id ? '新增' : '编辑') + '题库分类'" :visible.sync="typeVisible" width="400px" |
|
||||||
:close-on-click-modal="false"> |
|
||||||
<el-form label-width="100px"> |
|
||||||
<el-form-item prop="userName" label="题库分类名称"> |
|
||||||
<el-input placeholder="请输入分类名称" v-model="form.name" maxlength="20"></el-input> |
|
||||||
</el-form-item> |
|
||||||
<el-form-item prop="userName" label="设置上一级"> |
|
||||||
<el-select style="width: 100%" v-model="form.provinceId" placeholder="请选择"> |
|
||||||
<el-option v-for="(item, i) in types" :key="i" :label="item.provinceName" |
|
||||||
:value="item.provinceId"></el-option> |
|
||||||
</el-select> |
|
||||||
</el-form-item> |
|
||||||
</el-form> |
|
||||||
<span slot="footer" class="dialog-footer"> |
|
||||||
<el-button @click="knowledgeVisible = false">取 消</el-button> |
|
||||||
<el-button type="primary" @click="knowledgeSubmit">确 定</el-button> |
|
||||||
</span> |
|
||||||
</el-dialog> |
|
||||||
</div> |
|
||||||
</template> |
|
||||||
|
|
||||||
<script> |
|
||||||
import qs from 'qs' |
|
||||||
export default { |
|
||||||
data () { |
|
||||||
return { |
|
||||||
status: [ |
|
||||||
{ |
|
||||||
id: 1, |
|
||||||
name: '启用' |
|
||||||
}, |
|
||||||
{ |
|
||||||
id: 2, |
|
||||||
name: '禁用' |
|
||||||
}, |
|
||||||
], |
|
||||||
filter: { |
|
||||||
status: '', |
|
||||||
keyWord: '', |
|
||||||
}, |
|
||||||
list: [], |
|
||||||
types: [], |
|
||||||
form: { |
|
||||||
curriculumName: '' |
|
||||||
}, |
|
||||||
typeVisible: false, |
|
||||||
page: +this.$route.query.page || 1, |
|
||||||
pageSize: 10, |
|
||||||
total: 0, |
|
||||||
loading: false, |
|
||||||
searchTimer: null |
|
||||||
}; |
|
||||||
}, |
|
||||||
watch: { |
|
||||||
"form.curriculumName": function (val) { |
|
||||||
clearTimeout(this.searchTimer); |
|
||||||
this.searchTimer = setTimeout(() => { |
|
||||||
this.initData(); |
|
||||||
}, 500); |
|
||||||
} |
|
||||||
}, |
|
||||||
mounted () { |
|
||||||
this.getData() |
|
||||||
}, |
|
||||||
methods: { |
|
||||||
// 获取列表数据 |
|
||||||
getData () { |
|
||||||
const sid = this.$store.state.dataPer.find(e => e.permissionName === '课程管理') |
|
||||||
let data = { |
|
||||||
...this.form, |
|
||||||
pageNum: this.page, |
|
||||||
pageSize: this.pageSize, |
|
||||||
supplierId: sid ? sid.supplierId : '' |
|
||||||
}; |
|
||||||
this.$post(this.api.curriculumList, data).then(res => { |
|
||||||
this.list = res.page.records |
|
||||||
this.total = res.page.total |
|
||||||
this.loading = false |
|
||||||
}).catch(err => { }) |
|
||||||
}, |
|
||||||
initData () { |
|
||||||
this.page = 1 |
|
||||||
this.getData() |
|
||||||
}, |
|
||||||
// 新建 |
|
||||||
add () { |
|
||||||
this.typeVisible = true |
|
||||||
}, |
|
||||||
// 编辑 |
|
||||||
edit (row) { |
|
||||||
this.$router.push(`/addcurriculum?cid=${row.cid}`); |
|
||||||
}, |
|
||||||
// 删除 |
|
||||||
del (row) { |
|
||||||
this.$post(`${this.api.deleteCoursePrompt}?cids=${row.cid}`).then(({ status }) => { |
|
||||||
if (status === 200) { |
|
||||||
this.$confirm("确定要删除吗?", "提示", { |
|
||||||
type: "warning" |
|
||||||
}).then(() => { |
|
||||||
this.$post(`${this.api.delCourse}?cids=${row.cid}`).then(res => { |
|
||||||
this.getData(); |
|
||||||
this.$message.success("删除成功"); |
|
||||||
}).catch(err => { }) |
|
||||||
}).catch(() => { |
|
||||||
}); |
|
||||||
} |
|
||||||
}).catch(err => { }) |
|
||||||
}, |
|
||||||
// 批量删除 |
|
||||||
delAllSelection () { |
|
||||||
if (this.multipleSelection.length) { |
|
||||||
let cids = [] |
|
||||||
this.multipleSelection.forEach(i => { |
|
||||||
cids.push('cids=' + i.cid) |
|
||||||
}); |
|
||||||
this.$post(`${this.api.deleteCoursePrompt}?${cids.join('&')}`).then(({ status }) => { |
|
||||||
if (status === 200) { |
|
||||||
this.$confirm("确定要删除吗?", "提示", { |
|
||||||
type: "warning" |
|
||||||
}).then(() => { |
|
||||||
let ids = this.multipleSelection.map(i => i.cid); |
|
||||||
this.$post(`${this.api.delCourse}?cids=${ids.toString()}`).then(res => { |
|
||||||
if (ids.length == this.list.length) { |
|
||||||
if (this.page > 1) { |
|
||||||
this.page = this.page - 1 |
|
||||||
} |
|
||||||
} |
|
||||||
this.getData(); |
|
||||||
this.$message.success("删除成功"); |
|
||||||
this.$refs.table.clearSelection() |
|
||||||
}).catch(err => { }) |
|
||||||
}).catch(() => { }) |
|
||||||
} |
|
||||||
}).catch(err => { }) |
|
||||||
} else { |
|
||||||
this.$message.warning("请先选择课程 !"); |
|
||||||
} |
|
||||||
}, |
|
||||||
// 处理页码切换 |
|
||||||
handleCurrentChange (val) { |
|
||||||
this.page = val; |
|
||||||
this.$router.push(`/curriculum?page=${val}`) |
|
||||||
this.getData(); |
|
||||||
}, |
|
||||||
} |
|
||||||
}; |
|
||||||
</script> |
|
||||||
|
|
||||||
<style scoped></style> |
|
Loading…
Reference in new issue