yujialong 10 months ago
parent 57f0f4ce83
commit 8ee53be060
  1. 2
      public/index.html
  2. 2
      src/pages/achievement/info/course.vue
  3. 6
      src/pages/achievement/info/project.vue
  4. 5
      src/pages/achievement/list/course.vue
  5. 3
      src/pages/achievement/list/project.vue
  6. 2
      src/pages/activity/details/index.vue
  7. 1
      src/pages/assessment/list/index.vue
  8. 165
      src/pages/course/list/courseManagement/index.vue
  9. 2
      src/pages/match/add/step1.vue
  10. 11
      src/pages/match/add/step2.vue
  11. 1
      src/pages/match/manage/matchInfo.vue
  12. 1
      src/pages/product/show/index.vue
  13. 5
      src/pages/screen/index.vue
  14. 20
      src/pages/system/list/index.vue
  15. 304
      src/pages/system/list/staff.vue
  16. 119
      src/pages/system/list/staffSide.vue

@ -10,7 +10,7 @@
var _hmt = _hmt || [];
(function() {
var hm = document.createElement('script');
hm.src = 'https://hm.baidu.com/hm.js?72fbad6ebf1d6c705117fe8fe0686a0e';
hm.src = 'https://hm.baidu.com/hm.js?e4d7deeca2d6ea71d2bd5fa2365bc654';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(hm, s);
})();

@ -3,7 +3,7 @@
<el-card shadow="hover"
class="m-b-20 head-card">
<div class="flex-between m-b-20">
<el-page-header @back="$router.push('list?tab=tab1')"
<el-page-header @back="$router.back()"
:content="goodsName"></el-page-header>
</div>
</el-card>

@ -320,7 +320,8 @@ export default {
pageActivation: 1,
pageSizeActivation: 10,
totalActivation: 0,
loadIns: null
loadIns: null,
scores: {}
};
},
components: {
@ -378,6 +379,7 @@ export default {
this.errorAnalysis = res.errorAnalysis || {}
this.max = res.highestErrorRate || {}
this.min = res.minimumErrorRate || {}
this.scores = res.getFractionalSegmentNum
this.getChart()
this.errorChart()
} catch (e) {
@ -531,7 +533,7 @@ export default {
getChart () { // 线
const xData = Array.from({ length: 101 }, (v, k) => k)
const yData = Array.from({ length: 101 }, (v, k) => 0)
const list = this.listDataAll
const list = this.listData
list.map(n => {
yData[n.score]++
})

@ -166,7 +166,8 @@ export default {
path: 'list',
query: {
...this.$route.query,
keyword: val
keyword: val,
page: 1
}
})
this.initData();
@ -182,7 +183,7 @@ export default {
async getCourse () {
const { data } = await this.$get(this.api.getSchoolEffectiveCourse)
this.curs = data
this.initData();
this.getData();
},
//
curChange (id) {

@ -232,7 +232,8 @@ export default {
path: 'list',
query: {
...this.$route.query,
keyword: val
keyword: val,
page: 1
}
})
this.initData();

@ -447,7 +447,7 @@ export default {
.tool {
z-index: 100;
position: sticky;
top: 64px;
top: 0;
margin-bottom: 20px;
background-color: #fff;
}

@ -291,6 +291,7 @@ export default {
month: "",
},
mallId: '',
pageNum: +this.$route.query.page || 1, //
pageSize: 10, // 10
total: 0, //

@ -2,74 +2,131 @@
<!-- 课程管理 -->
<div style="padding-top: 24px">
<div class="tool">
<ul class="filter" style="align-items: flex-start">
<ul class="filter"
style="align-items: flex-start">
<li>
<label>课程分类</label>
<el-select v-model="categoryId" clearable placeholder="请选择课程分类" @change="initData">
<el-option label="不限" value=""></el-option>
<el-option v-for="(item,index) in classificationList" :key="index" :label="item.classificationName" :value="item.id"></el-option>
<el-select v-model="categoryId"
clearable
placeholder="请选择课程分类"
@change="initData">
<el-option label="不限"
value=""></el-option>
<el-option v-for="(item,index) in classificationList"
:key="index"
:label="item.classificationName"
:value="item.id"></el-option>
</el-select>
</li>
<li>
<label>搜索</label>
<el-input placeholder="请输入课程名称/创建人" suffix-icon="el-icon-search" v-model="keyword" clearable size="small"></el-input>
<el-input placeholder="请输入课程名称/创建人"
suffix-icon="el-icon-search"
v-model="keyword"
clearable
size="small"></el-input>
</li>
</ul>
<div>
<el-button v-auth="'课程管理:新增'" type="info" round @click="addCourse">新增</el-button>
<el-button v-auth="'课程管理:批量删除'" type="primary" round @click="delAllData">批量删除</el-button>
<el-button v-auth="'课程管理:新增'"
type="info"
round
@click="addCourse">新增</el-button>
<el-button v-auth="'课程管理:批量删除'"
type="primary"
round
@click="delAllData">批量删除</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="80" align="center" :reserve-selection="true"></el-table-column>
<el-table-column type="index" width="100" label="序号" align="center">
<el-table :data="list"
class="table"
ref="table"
stripe
header-align="center"
@selection-change="handleSelectionChange"
row-key="id">
<el-table-column type="selection"
width="80"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column type="index"
width="100"
label="序号"
align="center">
<template slot-scope="scope">
{{ scope.$index + (page - 1) * pageSize + 1 }}
</template>
</el-table-column>
<el-table-column prop="courseName" label="课程名称" align="center">
<el-table-column prop="courseName"
label="课程名称"
align="center">
</el-table-column>
<el-table-column prop="courseClassification" label="课程分类" align="center" show-overflow-tooltip>
<el-table-column prop="courseClassification"
label="课程分类"
align="center"
show-overflow-tooltip>
</el-table-column>
<el-table-column label="可见范围" align="center">
<el-table-column label="可见范围"
align="center">
<template slot-scope="scope">
{{ regionName[scope.row.visibleRange] }}
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间" align="center">
<el-table-column prop="createTime"
label="创建时间"
align="center">
</el-table-column>
<el-table-column prop="founder" label="创建人" align="center">
<el-table-column prop="founder"
label="创建人"
align="center">
</el-table-column>
<el-table-column label="操作" align="center" width="250">
<el-table-column label="操作"
align="center"
width="250">
<template slot-scope="scope">
<el-button v-auth="'课程管理:编辑信息'" type="text" @click="editCourse(scope.row)">编辑信息</el-button>
<el-divider v-auth="'课程管理:编辑信息'" direction="vertical"></el-divider>
<el-button v-auth="'课程管理:内容设置'" type="text" @click="config(scope.row)">内容设置</el-button>
<el-divider v-auth="'课程管理:内容设置'" direction="vertical"></el-divider>
<el-button v-auth="'课程管理:预览'" type="text" @click="preview(scope.row)">预览</el-button>
<el-divider v-auth="'课程管理:预览'" direction="vertical"></el-divider>
<el-button v-auth="'课程管理:删除'" type="text" @click="handleDelete(scope.row)">删除</el-button>
<el-button v-auth="'课程管理:编辑信息'"
type="text"
@click="editCourse(scope.row)">编辑信息</el-button>
<el-divider v-auth="'课程管理:编辑信息'"
direction="vertical"></el-divider>
<el-button v-auth="'课程管理:内容设置'"
type="text"
@click="config(scope.row)">内容设置</el-button>
<el-divider v-auth="'课程管理:内容设置'"
direction="vertical"></el-divider>
<el-button v-auth="'课程管理:预览'"
type="text"
@click="preview(scope.row)">预览</el-button>
<el-divider v-auth="'课程管理:预览'"
direction="vertical"></el-divider>
<el-button v-auth="'课程管理:删除'"
type="text"
@click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
<el-table-column label="可授权状态" align="center" width="120">
<el-table-column label="可授权状态"
align="center"
width="120">
<template slot-scope="scope">
<!-- 列表展示中台的禁启用依据zt_open展示职站的禁启用依据is_open展示 -->
<!-- 中台禁用了这个学校发布的学校这边还能看到但是学校这边不能启用 -->
<el-switch
v-auth="'课程管理:禁用'"
<el-switch v-auth="'课程管理:禁用'"
v-model="scope.row.isOpen"
:active-value="0"
:inactive-value="1"
style="margin: 0 10px 0 5px"
:active-text="scope.row.isOpen ? '关' : '开'"
@change="switchOff($event,scope.row,scope.$index)"
></el-switch>
@change="switchOff($event,scope.row,scope.$index)"></el-switch>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background layout="total, prev, pager, next" :total="total" @current-change="handleCurrentChange" :current-page="page">
<el-pagination background
layout="total, prev, pager, next"
:total="total"
@current-change="handleCurrentChange"
:current-page="page">
</el-pagination>
</div>
</div>
@ -80,7 +137,7 @@ import util from "@/libs/util";
import Setting from '@/setting'
export default {
name: "courseManagement",
data() {
data () {
return {
regionName: ['本校内', '全平台可见', '指定院校区域'],
timer: null,
@ -95,22 +152,22 @@ export default {
};
},
watch: {
keyword: function(val) {
keyword: function (val) {
clearTimeout(this.searchTimer);
this.searchTimer = setTimeout(() => {
this.initData();
}, 500);
}
},
mounted() {
mounted () {
this.getClassification();
this.getData();
this.$once('hook:beforeDestroy', function() {
this.$once('hook:beforeDestroy', function () {
clearInterval(this.timer)
})
},
methods: {
getList() {
getList () {
this.$post(this.api.listTheoreticalCourse, {
pageNum: this.page,
pageSize: this.pageSize,
@ -136,44 +193,44 @@ export default {
});
},
// redis
getRedis() {
getRedis () {
this.$post(this.api.getRedisCache).then(({ data }) => {
data && this.getList()
}).catch(res => {})
}).catch(res => { })
},
getData() {
getData () {
this.getList()
if (!Setting.isDev) {
clearInterval(this.timer)
this.timer = setInterval(this.getRedis, 1000)
}
// if (!Setting.isDev) {
// clearInterval(this.timer)
// this.timer = setInterval(this.getRedis, 1000)
// }
},
initData() {
initData () {
this.page = 1;
this.getData();
},
getClassification() {
getClassification () {
this.$post(this.api.listClassification, {
pageNum: 1,
pageSize: 1000,
platformSource: Setting.platformSource
}).then(({ page }) => {
this.classificationList = page.records
}).catch(res => {})
}).catch(res => { })
},
preview(row) {
preview (row) {
this.$router.push(`/course/preview?id=${row.id}`);
},
config(row) {
config (row) {
this.$router.push(`/course/contentSettings?id=${row.id}`);
},
addCourse() {
addCourse () {
this.$router.push("/course/add");
},
editCourse(row) {
editCourse (row) {
this.$router.push(`/course/add?id=${row.id}`);
},
handleDelete(row) {
handleDelete (row) {
this.$confirm("此删除操作不可逆,是否确认删除选中项?", "提示", {
type: "warning"
})
@ -187,10 +244,10 @@ export default {
.catch(() => {
});
},
handleSelectionChange(val) {
handleSelectionChange (val) {
this.multipleSelection = val;
},
delAllData() {
delAllData () {
const list = this.multipleSelection
if (list.length != "") {
this.$confirm(`确定要删除吗?`, "提示", {
@ -213,19 +270,19 @@ export default {
util.errorMsg("请先选择数据 !");
}
},
handleCurrentChange(val) {
handleCurrentChange (val) {
this.page = val;
this.$router.push(`list?page=${val}`)
this.getData();
},
switchOff(val, row) {
switchOff (val, row) {
this.$post(this.api.disabledTheoreticalCourse, {
courseId: row.id,
isOpen: val,
type: 1 // (01)
}).then(res => {
val == 1 ? util.warningMsg('禁用成功') : util.successMsg('启用成功')
}).catch(err => {})
}).catch(err => { })
}
}
};

@ -696,7 +696,7 @@ export default {
this.$parent.showLoad()
delete form.publishStatus
if (status === 1) form.publishStatus = 1
form.isOpen = status ? 0 : 1 //
form.ztOpen = status ? 0 : 1 //
form.releaseType = releaseType
form.id = this.$route.query.id

@ -80,8 +80,7 @@
<span class="req">*</span>
团队参赛人数限制
<el-radio v-model="item.teamNumLimitOpt"
:label="0"
@change="item.teamNumLimit = 0">不限制</el-radio>
:label="0">不限制</el-radio>
<el-radio v-model="item.teamNumLimitOpt"
:label="1">自定义</el-radio>
<el-input v-model.number="item.teamNumLimit"
@ -449,7 +448,7 @@ export default {
}
e.resultAnnouncementTime = +e.resultAnnouncementTime
}
if (e.teamNumLimit) teamNumLimit += e.teamNumLimit //
if (e.teamNumLimitOpt && e.teamNumLimit) teamNumLimit += e.teamNumLimit //
}
if (invalid) return
if (form.teamLimit && competitionType) {
@ -461,9 +460,9 @@ export default {
} else { // 稿
form.competitionStageList = form.competitionStageList.filter(e => e.stageName)
}
for (const e of form.competitionStageList) {
if (!e.teamNumLimitOpt) e.teamNumLimit = 0
}
// for (const e of form.competitionStageList) {
// if (!e.teamNumLimitOpt) e.teamNumLimit = 0
// }
this.$parent.showLoad()
this.pass = 1
if (form.ruleId) {

@ -435,7 +435,6 @@ export default {
status = 5;
}
this.status = status
console.log("🚀 ~ file: matchInfo.vue:350 ~ handleStatus ~ status", status)
},
//
edit (showMsg) {

@ -533,6 +533,7 @@ export default {
margin-bottom: 15px;
color: #333;
font-size: 14px;
font-weight: 600;
}
.sectionName {
position: relative;

@ -772,7 +772,7 @@ export default {
sort: 0,
isShelves: 0,
hotTag: 1,
purchaseStatus: 1
purchaseStatus: this.token ? 1 : ''
})
if (cousrseRes) {
const courseList = cousrseRes.page.records
@ -1063,6 +1063,8 @@ export default {
}],
yAxis: [{
type: 'value',
minInterval: 1,
min: 0,
axisTick: {
show: false
},
@ -1072,6 +1074,7 @@ export default {
}
},
axisLabel: {
// interval: 5,
margin: 10,
textStyle: {
fontSize: 12,

@ -1,7 +1,12 @@
<template>
<div class="page" style="padding: 0">
<div class="page"
style="padding: 0">
<div class="tabs">
<a class="item" v-for="(item,index) in tabs" :key="index" :class="{active: index == active}" @click="tabChange(index)">{{ item }}</a>
<a class="item"
v-for="(item,index) in tabs"
:key="index"
:class="{active: index == active}"
@click="tabChange(index)">{{ item }}</a>
</div>
<staff v-if="active == 'staff'"></staff>
@ -17,11 +22,11 @@ import staff from "./staff";
import role from "./role";
import logo from "./logo";
export default {
data() {
data () {
return {
active: "staff",
tabs: {
staff: "员工管理",
staff: "教师管理",
role: "角色权限",
logo: "系统logo设置",
}
@ -37,14 +42,14 @@ export default {
role,
logo
},
created() {
created () {
Setting.dynamicRoute && this.initTabs()
},
methods: {
tabChange(index) {
tabChange (index) {
this.active = index
},
initTabs() {
initTabs () {
const { btns } = this
const tab1 = btns.includes('/system/list:员工管理')
const tab2 = btns.includes('/system/list:角色权限')
@ -58,5 +63,4 @@ export default {
</script>
<style lang="scss" scoped>
</style>

@ -1,7 +1,9 @@
<template>
<div class="wrap">
<div class="side">
<org ref="org" @getSingle="getSingle" @getCheck="getCheck"></org>
<org ref="org"
@getSingle="getSingle"
@getCheck="getCheck"></org>
</div>
<div class="right">
@ -9,91 +11,171 @@
<div class="tool">
<ul class="filter">
<li>
<el-input placeholder="请输入员工姓名/工号" prefix-icon="el-icon-search" v-model.trim="keyword" clearable></el-input>
<el-input placeholder="请输入教师姓名/工号"
prefix-icon="el-icon-search"
v-model.trim="keyword"
clearable></el-input>
</li>
</ul>
<div>
<el-button v-auth="'员工管理:新增员工'" type="info" round @click="addTeacher">新增员工</el-button>
<el-button v-auth="'员工管理:批量导入'" type="primary" round @click="batchImport">批量导入</el-button>
<el-button v-auth="'员工管理:批量删除'" type="primary" round @click="delAllSelection">批量删除</el-button>
<el-button v-auth="'员工管理:新增员工'"
type="info"
round
@click="addTeacher">新增教师</el-button>
<el-button v-auth="'员工管理:批量导入'"
type="primary"
round
@click="batchImport">批量导入</el-button>
<el-button v-auth="'员工管理:批量删除'"
type="primary"
round
@click="delAllSelection">批量删除</el-button>
</div>
</div>
<el-table :data="listData" class="table" ref="table" stripe header-align="center" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center"></el-table-column>
<el-table-column type="index" label="序号" width="55" align="center"></el-table-column>
<el-table-column prop="userName" label="职工姓名" align="center"></el-table-column>
<el-table-column prop="workNumber" label="职工工号" align="center"></el-table-column>
<el-table-column prop="dept" label="部门" align="center"></el-table-column>
<el-table-column prop="roleName" label="账号角色" align="center"></el-table-column>
<el-table-column prop="logInNumber" label="登录次数" align="center"></el-table-column>
<el-table-column prop="lastLoginTime" label="上次登录时间" align="center"></el-table-column>
<el-table-column label="操作" width="200" align="center">
<el-table :data="listData"
class="table"
ref="table"
stripe
header-align="center"
@selection-change="handleSelectionChange">
<el-table-column type="selection"
width="55"
align="center"></el-table-column>
<el-table-column type="index"
label="序号"
width="55"
align="center"></el-table-column>
<el-table-column prop="userName"
label="教师姓名"
align="center"></el-table-column>
<el-table-column prop="workNumber"
label="教师工号"
align="center"></el-table-column>
<el-table-column prop="dept"
label="部门"
align="center"></el-table-column>
<el-table-column prop="roleName"
label="账号角色"
align="center"></el-table-column>
<el-table-column prop="logInNumber"
label="登录次数"
align="center"></el-table-column>
<el-table-column prop="lastLoginTime"
label="上次登录时间"
align="center"></el-table-column>
<el-table-column label="操作"
width="200"
align="center">
<template slot-scope="scope">
<el-button v-auth="'员工管理:员工查看'" type="text" @click="showTeacher(scope.row)">查看</el-button>
<el-button v-auth="'员工管理:员工编辑'" type="text" @click="editTeacher(scope.row)">编辑</el-button>
<el-button v-auth="'员工管理:重置密码'" type="text" @click="resetPassword(scope.row)">重置密码</el-button>
<el-button v-auth="'员工管理:员工删除'" type="text" @click="delTeacher(scope.row)">删除</el-button>
<el-button v-auth="'员工管理:员工查看'"
type="text"
@click="showTeacher(scope.row)">查看</el-button>
<el-button v-auth="'员工管理:员工编辑'"
type="text"
@click="editTeacher(scope.row)">编辑</el-button>
<el-button v-auth="'员工管理:重置密码'"
type="text"
@click="resetPassword(scope.row)">重置密码</el-button>
<el-button v-auth="'员工管理:员工删除'"
type="text"
@click="delTeacher(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background layout="total, prev, pager, next" :current-page="page" @current-change="handleCurrentChange" :total="total"></el-pagination>
<el-pagination background
layout="total, prev, pager, next"
:current-page="page"
@current-change="handleCurrentChange"
:total="total"></el-pagination>
</div>
</div>
<el-dialog :title="isDetail ? '查看员工' : (isAdd ? '新增员工' : '编辑员工')" :visible.sync="teacherVisible"
width="30%" @close="closeTeacher" class="dialog" :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="150px" :disabled="isDetail" style='margin-right: 80px;'>
<el-form-item prop="workNumber" label="工号">
<el-input v-model.trim="form.workNumber" placeholder="请输入职工工号" @blur="workNumberChange"></el-input>
<el-dialog :title="isDetail ? '查看教师' : (isAdd ? '新增教师' : '编辑教师')"
:visible.sync="teacherVisible"
width="30%"
@close="closeTeacher"
class="dialog"
:close-on-click-modal="false">
<el-form ref="form"
:model="form"
:rules="rules"
label-width="150px"
:disabled="isDetail"
style='margin-right: 80px;'>
<el-form-item prop="workNumber"
label="工号">
<el-input v-model.trim="form.workNumber"
placeholder="请输入教师工号"
@blur="workNumberChange"></el-input>
</el-form-item>
<el-form-item prop="userName" label="用户姓名">
<el-input v-model.trim="form.userName" placeholder="请输入员工姓名"></el-input>
<el-form-item prop="userName"
label="用户姓名">
<el-input v-model.trim="form.userName"
placeholder="请输入教师姓名"></el-input>
</el-form-item>
<el-form-item prop="roleValue" label="账号角色">
<el-select v-model="form.roleValue" @change="roleChange" @remove-tag="roleRemove" multiple style="width: 100%;height: 32px">
<el-option
v-for="item in roleList"
<el-form-item prop="roleValue"
label="账号角色">
<el-select v-model="form.roleValue"
@change="roleChange"
@remove-tag="roleRemove"
multiple
style="width: 100%;height: 32px">
<el-option v-for="item in roleList"
:key="item.id"
:label="item.roleName"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="uniqueIdentification" label="唯一标识">
<el-input disabled v-model.trim="form.uniqueIdentification" placeholder="请输入职工工号获取唯一标识"></el-input>
<el-form-item prop="uniqueIdentification"
label="唯一标识">
<el-input disabled
v-model.trim="form.uniqueIdentification"
placeholder="请输入教师工号获取唯一标识"></el-input>
</el-form-item>
<el-form-item v-for="item in form.roleAndDeptList" :label="`${item.roleName}所属部门`" :rules="{
<el-form-item v-for="item in form.roleAndDeptList"
:label="`${item.roleName}所属部门`"
:rules="{
required: true, message: '请选择', trigger: 'change'
}">
<el-cascader
v-model="item.cascaderValue"
<el-cascader v-model="item.cascaderValue"
:options="orgList"
:props="casProps"
style="width: 100%"
></el-cascader>
style="width: 100%"></el-cascader>
</el-form-item>
<el-form-item prop="phone" label="手机号">
<el-input v-model.trim="form.phone" placeholder="请输入手机号" maxlength="11"></el-input>
<el-form-item prop="phone"
label="手机号">
<el-input v-model.trim="form.phone"
placeholder="请输入手机号"
maxlength="11"></el-input>
</el-form-item>
<el-form-item prop="email" label="邮箱">
<el-input v-model.trim="form.email" placeholder="请输入邮箱"></el-input>
<el-form-item prop="email"
label="邮箱">
<el-input v-model.trim="form.email"
placeholder="请输入邮箱"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer" v-if="!isDetail">
<span slot="footer"
class="dialog-footer"
v-if="!isDetail">
<el-button @click="closeTeacher"> </el-button>
<el-button type="primary" @click="saveSure('form')"> </el-button>
<el-button type="primary"
@click="saveSure('form')"> </el-button>
</span>
</el-dialog>
<el-dialog title="批量导入" :visible.sync="importVisible" width="24%" :close-on-click-modal="false">
<el-dialog title="批量导入"
:visible.sync="importVisible"
width="24%"
:close-on-click-modal="false">
<div style="text-align: center">
<div style="margin-bottom: 10px;">
<el-button type="primary" @click="downLoad">模板下载<i class="el-icon-download el-icon--right"></i></el-button>
<el-button type="primary"
@click="downLoad">模板下载<i class="el-icon-download el-icon--right"></i></el-button>
</div>
<el-upload
name="file"
<el-upload name="file"
accept=".xls,.xlsx"
:on-remove="handleRemove"
:on-error="uploadError"
@ -103,15 +185,19 @@
:on-exceed="handleExceed"
:action="this.api.importStaff"
:file-list="uploadList"
:headers="headers"
>
<el-button type="primary" class="ml20">上传文件<i class="el-icon-upload2 el-icon--right"></i></el-button>
:headers="headers">
<el-button type="primary"
class="ml20">上传文件<i class="el-icon-upload2 el-icon--right"></i></el-button>
</el-upload>
<el-link v-if="uploadFaild" type="primary" @click="showFaild">部分数据导入失败查看失败原因</el-link>
<el-link v-if="uploadFaild"
type="primary"
@click="showFaild">部分数据导入失败查看失败原因</el-link>
</div>
<span slot="footer" class="dialog-footer">
<span slot="footer"
class="dialog-footer">
<el-button @click="importVisible = false"> </el-button>
<el-button type="primary" @click="uploadSure"> </el-button>
<el-button type="primary"
@click="uploadSure"> </el-button>
</span>
</el-dialog>
</div>
@ -122,7 +208,7 @@ import util from "@/libs/util";
import org from "./staffSide"
import { mapState } from "vuex";
export default {
data() {
data () {
return {
exportCode: "",
headers: {
@ -159,7 +245,7 @@ export default {
{ required: true, message: "请输入工号", trigger: 'blur' },
{
pattern: /^[A-Za-z0-9]*$/,
message: "职工工号必须为数字或英文",
message: "教师工号必须为数字或英文",
trigger: "blur"
}
],
@ -167,7 +253,7 @@ export default {
// { required: true, message: '', trigger: 'blur' },
],
phone: [
{ pattern: /^1[3456789]\d{9}$/, message: "请输入正确的手机号", trigger: "blur"}
{ pattern: /^1[3456789]\d{9}$/, message: "请输入正确的手机号", trigger: "blur" }
],
email: [
{
@ -206,25 +292,25 @@ export default {
])
},
watch: {
keyword: function(val) {
keyword: function (val) {
clearTimeout(this.searchTimer);
this.searchTimer = setTimeout(() => {
this.initData();
}, 500);
}
},
mounted() {
mounted () {
this.originForm = JSON.parse(JSON.stringify(this.form))
this.getRoleData()
this.getData()
},
methods: {
getSingle(data) {
getSingle (data) {
this.staffArchitectureId = data.gradeId ? '' : data.staffArchitectureId
this.gradeId = data.gradeId || ''
this.initData()
},
getCheck(data) {
getCheck (data) {
const marjorIds = []
const depIds = []
data.forEach(e => {
@ -234,12 +320,12 @@ export default {
this.gradeId = depIds.toString()
this.initData()
},
initData() {
initData () {
this.$refs.table.clearSelection()
this.page = 1
this.getData()
},
getData() { //
getData () { //
let data = {
keyWord: this.keyword,
pageNum: this.page,
@ -250,22 +336,22 @@ export default {
this.$post(this.api.staffList, data).then(res => {
this.listData = res.page.records;
this.total = res.page.total;
}).catch(res => {});
}).catch(res => { });
},
getRoleData() { //
this.roleList =[];
getRoleData () { //
this.roleList = [];
this.$get(`${this.api.roleList}?page=1&size=100&name=&platformId=1&port=0`).then(res => {
for(var i=0;i<res.rolePage.records.length;i++){
if (res.rolePage.records[i].roleName == '超级管理员'){
for (var i = 0; i < res.rolePage.records.length; i++) {
if (res.rolePage.records[i].roleName == '超级管理员') {
}else{
} else {
this.roleList.push(res.rolePage.records[i])
}
}
// this.roleList = res.rolePage.records;
}).catch(res => {});
}).catch(res => { });
},
closeTeacher() { // /
closeTeacher () { // /
this.form = {
accountId: "",
account: "",
@ -280,13 +366,13 @@ export default {
this.$refs.form.clearValidate();
this.teacherVisible = false;
},
addTeacher() { //
addTeacher () { //
this.isDetail = false;
this.isAdd = true;
this.teacherVisible = true;
this.orgList = this.$refs.org.orgList;
},
getStaffDetail(accountId) { //
getStaffDetail (accountId) { //
this.$get(`${this.api.staffDetail}?accountId=${accountId}`).then(res => {
let { data } = res;
this.form = data;
@ -296,9 +382,9 @@ export default {
return i;
});
console.log(22, this.form)
}).catch(res => {});
}).catch(res => { });
},
resetPassword(row) { //
resetPassword (row) { //
this.$confirm(`重置后的密码为:${Setting.initialPassword},确定重置?`, "提示", { type: "warning" }).then(() => {
this.$get(`${this.api.resetPassword}?userId=${row.userId}&newPwd=1122aa`).then(res => {
util.successMsg("重置成功");
@ -307,14 +393,14 @@ export default {
}).catch(() => {
});
},
editTeacher(row) { //
editTeacher (row) { //
this.isDetail = false;
this.isAdd = false;
this.teacherVisible = true;
this.orgList = this.$refs.org.orgList;
this.getStaffDetail(row.accountId);
},
showTeacher(row) { //
showTeacher (row) { //
this.isDetail = true;
this.isAdd = false;
this.teacherVisible = true;
@ -322,12 +408,12 @@ export default {
this.getStaffDetail(row.accountId);
},
//
renderAccount() {
renderAccount () {
const form = this.form
// id-id-schoolId-workNumber
form.account = `${Setting.platformId}-0-${this.schoolId}-${form.workNumber}`
},
workNumberChange() { //
workNumberChange () { //
const form = this.form
const { workNumber, accountId } = form
if (workNumber) {
@ -336,14 +422,14 @@ export default {
this.workNumberReapeat = false
this.renderAccount()
}
}).catch( err => {
}).catch(err => {
this.workNumberReapeat = true
})
} else {
this.renderAccount()
}
},
phoneChange() { //
phoneChange () { //
let regex = /^1[3456789]\d{9}$/;
if (regex.test(this.form.phone)) {
let url = "";
@ -356,12 +442,12 @@ export default {
if (res.status === 200) {
this.phoneRepeat = false;
}
}).catch( err => {
}).catch(err => {
this.phoneRepeat = true;
});
}
},
emailChange() { //
emailChange () { //
let regex = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/;
if (regex.test(this.form.email)) {
let url = "";
@ -374,12 +460,12 @@ export default {
if (res.status === 200) {
this.emailRepeat = false;
}
}).catch( err => {
}).catch(err => {
this.emailRepeat = true;
});
}
},
roleChange(value) { //
roleChange (value) { //
console.log(this.form.roleValue)
if (value.length) {
let ids = this.form.roleAndDeptList.map(e => e.roleId);
@ -400,18 +486,18 @@ export default {
this.form.roleAndDeptList.splice(0);
}
},
roleRemove(value) { //
roleRemove (value) { //
let list = [];
for(var i=0;i<this.form.roleAndDeptList.length;i++){
if (this.form.roleAndDeptList[i].roleId == value){
for (var i = 0; i < this.form.roleAndDeptList.length; i++) {
if (this.form.roleAndDeptList[i].roleId == value) {
}else{
} else {
list.push(this.form.roleAndDeptList[i])
}
}
this.form.roleAndDeptList = list
},
async saveSure(form) {
async saveSure (form) {
this.$refs[form].validate((valid) => {
if (valid) {
if (this.submiting) return false
@ -428,7 +514,7 @@ export default {
phone: this.form.phone,
email: this.form.email
};
if (this.form.roleAndDeptList.length){
if (this.form.roleAndDeptList.length) {
for (let i = 0; i < this.form.roleAndDeptList.length; i++) {
if (this.form.roleAndDeptList[i].cascaderValue.length < 2) {
util.warningMsg(`请选择${this.form.roleAndDeptList[i].roleName}所属部门`)
@ -468,20 +554,20 @@ export default {
}
});
},
delTeacher(row) {
delTeacher (row) {
this.$confirm("确定要删除吗?", "提示", {
type: "warning"
}).then(() => {
this.$post(`${this.api.delStaff}?accountIds=${row.accountId}`).then(res => {
util.successMsg("删除成功");
this.getData();
}).catch(res => {});
}).catch(() => {});
}).catch(res => { });
}).catch(() => { });
},
handleSelectionChange(val) {
handleSelectionChange (val) {
this.multipleSelection = val;
},
delAllSelection() {
delAllSelection () {
if (this.multipleSelection.length) {
//
this.$confirm("确定要删除吗?", "提示", {
@ -500,35 +586,35 @@ export default {
}).catch(() => {
});
} else {
util.errorMsg("请先选择员工 !");
util.errorMsg("请先选择教师 !");
}
},
batchImport() {
batchImport () {
this.importVisible = true;
this.uploadList = [];
this.uploadFaild = false;
},
searchTeacher() {
searchTeacher () {
this.page = 1;
this.getData();
},
handleCurrentChange(val) {
handleCurrentChange (val) {
this.page = val;
this.getData();
},
downLoad() {
downLoad () {
location.href = this.api.staffTemplate;
},
showFaild() {
showFaild () {
location.href = `${this.api.exportFailureStaff}?exportCode=${this.exportCode}`;
},
//
handleExceed(files, fileList) {
handleExceed (files, fileList) {
util.warningMsg(
`当前限制选择 1 个文件,如需更换,请删除上一个文件再重新选择!`
);
},
uploadSuccess(res, file, fileList) {
uploadSuccess (res, file, fileList) {
console.log(res);
this.uploadFaild = false;
if (res.status === 200) {
@ -541,21 +627,21 @@ export default {
res.message ? util.errorMsg(res.message) : util.errorMsg("上传失败,请检查数据");
}
},
uploadError(err, file, fileList) {
uploadError (err, file, fileList) {
this.$message({
message: "上传出错,请重试!",
type: "error",
center: true
});
},
beforeRemove(file, fileList) {
beforeRemove (file, fileList) {
return this.$confirm(`确定移除 ${file.name}`);
},
handleRemove(file, fileList) {
handleRemove (file, fileList) {
this.uploadList = fileList;
this.uploadFaild = false;
},
uploadSure() {
uploadSure () {
this.importVisible = false;
this.page = 1;
this.keyword = "";
@ -579,7 +665,7 @@ export default {
padding: 24px;
}
}
.el-input__inner{
.el-input__inner {
height: 32px;
}
</style>

@ -2,11 +2,13 @@
<div>
<div>
<div class="flex-between m-b-20">
<h6 class="p-title" style="margin-bottom: 0">员工组织架构</h6>
<el-button type="text" @click="addMajor" v-auth="'员工管理:新增专业'">添加</el-button>
<h6 class="p-title"
style="margin-bottom: 0">教师组织架构</h6>
<el-button type="text"
@click="addMajor"
v-auth="'员工管理:新增专业'">添加</el-button>
</div>
<org-tree
:data="orgList"
<org-tree :data="orgList"
show-checkbox
default-expand-all
ref="orgTree"
@ -15,26 +17,23 @@
:expand-on-click-node="false"
@node-click="getSingle"
@check="getCheck"
:props="{children: 'children', label: 'label', isLeaf: 'leaf'}"
>
<span class="custom-tree-node" slot-scope="{ node, data }">
:props="{children: 'children', label: 'label', isLeaf: 'leaf'}">
<span class="custom-tree-node"
slot-scope="{ node, data }">
<span style="display: inline-block; margin-right: 20px">{{ node.label }}</span>
<span>
<el-button
v-auth="'员工管理:新增专业'"
<el-button v-auth="'员工管理:新增专业'"
type="text"
icon="el-icon-edit-outline"
@click="() => handleEdit(node, data)">
</el-button>
<el-button
v-auth="'员工管理:编辑专业'"
<el-button v-auth="'员工管理:编辑专业'"
v-if="node.level === 1"
type="text"
icon="el-icon-circle-plus-outline"
@click="() => handleAdd(node, data)">
</el-button>
<el-button
v-auth="'员工管理:删除专业'"
<el-button v-auth="'员工管理:删除专业'"
type="text"
icon="el-icon-delete"
@click="() => handleDel(node, data)">
@ -44,27 +43,47 @@
</org-tree>
</div>
<el-dialog :title="Form.staffArchitectureId ? '编辑部门' : '新增部门'" :visible.sync="majorVisible" width="24%" center @close="closeAdd" :close-on-click-modal="false">
<el-form ref="Form" :model="Form" :rules="rules">
<el-dialog :title="Form.staffArchitectureId ? '编辑部门' : '新增部门'"
:visible.sync="majorVisible"
width="24%"
center
@close="closeAdd"
:close-on-click-modal="false">
<el-form ref="Form"
:model="Form"
:rules="rules">
<el-form-item prop="staffArchitectureName">
<el-input placeholder="请输入部门名称" v-model="Form.staffArchitectureName"></el-input>
<el-input placeholder="请输入部门名称"
v-model="Form.staffArchitectureName"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<span slot="footer"
class="dialog-footer">
<el-button @click="majorVisible = false"> </el-button>
<el-button type="primary" @click="sure('Form')"> </el-button>
<el-button type="primary"
@click="sure('Form')"> </el-button>
</span>
</el-dialog>
<el-dialog :title="Form.gradeId ? '编辑部门' : '新增部门'" :visible.sync="depVisible" width="24%" center @close="closeAdd" :close-on-click-modal="false">
<el-form ref="Form1" :model="Form" :rules="rules">
<el-dialog :title="Form.gradeId ? '编辑部门' : '新增部门'"
:visible.sync="depVisible"
width="24%"
center
@close="closeAdd"
:close-on-click-modal="false">
<el-form ref="Form1"
:model="Form"
:rules="rules">
<el-form-item prop="gradeName">
<el-input placeholder="请输入部门名称" v-model="Form.gradeName"></el-input>
<el-input placeholder="请输入部门名称"
v-model="Form.gradeName"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<span slot="footer"
class="dialog-footer">
<el-button @click="depVisible = false"> </el-button>
<el-button type="primary" @click="sureDepartment('Form1')"> </el-button>
<el-button type="primary"
@click="sureDepartment('Form1')"> </el-button>
</span>
</el-dialog>
</div>
@ -74,7 +93,7 @@ import util from "@/libs/util";
import OrgTree from "@/components/org-tree/src/tree";
export default {
props: ["Data"],
data() {
data () {
return {
orgList: [],
firactive: 0,
@ -102,11 +121,11 @@ export default {
components: {
OrgTree
},
mounted() {
mounted () {
this.getStaff()
},
methods: {
getStaff() {
getStaff () {
this.$get(this.api.professionalList).then(res => {
if (res.data && res.data.length) {
res.data.map(e => {
@ -119,30 +138,30 @@ export default {
(e.ischeck = false), (e.label = e.gradeName), (e.id = e.gradeId)
})
e.children = res.data
}).catch(res => {})
}).catch(res => { })
});
}
setTimeout(() => {
this.orgList = res.data;
}, 500)
}).catch(res => {})
}).catch(res => { })
},
closeAdd() {
closeAdd () {
this.$refs.Form.resetFields()
},
getSingle(data) {
getSingle (data) {
this.$emit('getSingle', data)
},
getCheck(data, checked) {
getCheck (data, checked) {
this.$emit('getCheck', checked.checkedNodes)
},
//
addMajor() {
addMajor () {
this.Form.staffArchitectureId = ''
this.Form.staffArchitectureName = ''
this.majorVisible = true
},
sure(Form) { // /
sure (Form) { // /
this.$refs[Form].validate((valid) => {
if (valid) {
let data = {
@ -186,13 +205,13 @@ export default {
}
});
},
handleAdd(node, data) { //
handleAdd (node, data) { //
this.Form.gradeId = ''
this.Form.gradeName = ''
this.depVisible = true
this.Form.staffArchitectureId = data.staffArchitectureId
},
handleEdit(node, data) { //
handleEdit (node, data) { //
if (node.level === 1) {
this.Form.staffArchitectureId = data.staffArchitectureId
this.Form.staffArchitectureName = data.staffArchitectureName
@ -210,7 +229,7 @@ export default {
}
}
},
sureDepartment(Form) { //
sureDepartment (Form) { //
this.$refs[Form].validate((valid) => {
if (valid) {
let data = {
@ -259,10 +278,10 @@ export default {
}
});
},
handleDel(node, data) {
handleDel (node, data) {
node.level === 1 ? this.delMajor(data) : this.delDepartment(data)
},
delMajor(item) {
delMajor (item) {
this.$confirm("确定要删除该专业吗?该操作将会删除该组织下的用户账号。", "提示", {
type: "warning"
}).then(() => {
@ -270,10 +289,10 @@ export default {
util.successMsg("删除成功")
this.$emit("getData")
this.getStaff()
}).catch(res => {})
}).catch(() => {})
}).catch(res => { })
}).catch(() => { })
},
delDepartment(item) {
delDepartment (item) {
this.$confirm("确定要删除该部门吗?该操作将会删除该组织下的用户账号。", "提示", {
type: "warning"
}).then(() => {
@ -282,8 +301,8 @@ export default {
this.getStaff()
this.$emit("delDep", item, this.orgList)
this.$emit("getData")
}).catch(res => {})
}).catch(() => {})
}).catch(res => { })
}).catch(() => { })
}
}
};
@ -302,7 +321,7 @@ export default {
.side_icon i {
cursor: pointer;
font-size: 20px;
color: #9278FF;
color: #9278ff;
}
.side_tree {
@ -312,7 +331,7 @@ export default {
}
.side_tree i {
color: #9278FF;
color: #9278ff;
margin-left: 10px;
}
@ -339,7 +358,7 @@ export default {
}
.two_active {
color: #9278FF;
color: #9278ff;
}
/* .two_active:hover{
@ -348,7 +367,7 @@ export default {
} */
.two_back:hover {
cursor: pointer;
color: #9278FF;
color: #9278ff;
}
.mar_top {
@ -382,11 +401,13 @@ export default {
transform: rotate(180deg);
}
.list-enter-active, .list-leave-active {
.list-enter-active,
.list-leave-active {
transition: all 1s;
}
.list-enter, .list-leave-to {
.list-enter,
.list-leave-to {
opacity: 0;
transform: translateY(-30px);
}

Loading…
Cancel
Save