添加websocket(赛事、创业、模型)

Branch_d40a2540
yujialong 2 years ago
parent 4def1d805f
commit 559a044844
  1. 1
      src/api/index.js
  2. 52
      src/layouts/header/index.vue
  3. 18
      src/pages/activity/list/index.vue
  4. 37
      src/pages/activity/manage/list/index.vue
  5. 178
      src/pages/assessment/list/index.vue
  6. 26
      src/pages/expSystem/backstage/model.vue
  7. 33
      src/pages/expSystem/backstage/sourceModel.vue
  8. 24
      src/pages/match/list/index.vue
  9. 151
      src/pages/match/preview/index.vue
  10. 68
      src/pages/product/show/index.vue
  11. 2
      src/pages/station/preview/index.vue
  12. 289
      src/pages/student/list/index.vue
  13. 2
      src/setting.js

@ -12,6 +12,7 @@ export default {
getUserAllRoleByToken : `users/users/role/getUserAllRoleByToken`,
getSchoolIdByToken : `users/users/data/user/getSchoolIdByToken`,
deleteProfile : `users/users/userInfo/deleteProfile`,
refreshPageNotification : `nakadai/message/refreshPageNotification`,
platformLogList: `nakadai/nakadai/log/platformLogList`,
logNotification: `nakadai/nakadai/log/logNotification`,

@ -74,6 +74,7 @@
import { mapState, mapMutations, mapActions } from "vuex";
import util from "@/libs/util";
import Setting from "@/setting";
import Bus from '@/libs/bus'
export default {
data () {
return {
@ -119,24 +120,65 @@ export default {
}
}).catch(res => { })
},
// socket
open () {
console.log("socket连接成功");
},
// socket
error () {
console.log("连接错误");
},
//
getMessage (msg) {
console.log("==websocket接收数据==");
console.log(JSON.parse(msg.data));
const { content } = JSON.parse(msg.data)
// 1234-id
if (content == 1) {
Bus.$emit('matchSocket')
} else if (content == 2) {
Bus.$emit('activitySocket')
} else if (content == 4) {
Bus.$emit('modelSocket')
} else {
this.getNotice()
}
},
// socket
close () {
console.log("socket已经关闭");
},
initSocket ({ id, account }) {
// socket
// this.socket = new WebSocket(`ws://${Setting.isDev ? '192.168.31.51' : location.host}:9100/nakadai/websocket/${id}/${account}`)
this.socket = new WebSocket(`ws://121.37.12.51:9100/nakadai/websocket/${id}/${account}`)
// socket
this.socket.onopen = this.open;
// socket
this.socket.onerror = this.error;
// socket
this.socket.onmessage = this.getMessage;
},
//
getNotice () {
if (!Setting.isDev) {
this.noticeTimer = setInterval(() => {
this.$get(this.api.messageNotificationList, {
type: 2
}).then(res => {
this.notices = res.notificationList
}).catch(res => { });
}, 5000)
}
},
//
toComment (item) {
async toComment (item) {
await this.$post(`${this.api.noticeRead}?isRead=1&notifyId=${item.notifyId}`) //
this.$router.push(`/station/preview?courseId=${item.cid}&commentId=${item.commentId}&notifyId=${item.notifyId}`)
},
getUserDetail () { //
this.$get(this.api.queryUserInfoDetails).then(res => {
this.initSocket(res.result.userAccount)
let { hrUserInfo } = res.result
if (hrUserInfo) {
const { userAvatars, userName, userId } = hrUserInfo

@ -141,11 +141,11 @@ import { mapState, mapMutations } from "vuex";
import { Loading } from "element-ui";
import Setting from "@/setting"
import util from "@/libs/util"
import Bus from '@/libs/bus'
export default {
data () {
return {
timer: null,
redisTimer: null,
token: util.local.get(Setting.tokenKey),
statusList: ["待报名", "取消报名", "马上报名", "报名截止", "已结束"],
endList: ["报名开始", "报名截止", "报名截止", "项目开始", "项目结束"],
@ -200,14 +200,18 @@ export default {
}
},
mounted () {
// websocket
Bus.$on('activitySocket', () => {
this.getData()
})
this.getData()
this.$once('hook:beforeDestroy', function () {
this.clearTimer()
clearInterval(this.redisTimer)
})
},
methods: {
getList () {
getData () {
this.clearTimer()
const { form } = this
const data = {
@ -278,14 +282,6 @@ export default {
})
this.timerList = []
},
getData () {
// this.loadIns = Loading.service()
this.getList()
if (!Setting.isDev) {
clearInterval(this.redisTimer)
this.redisTimer = setInterval(this.getRedis, 1000)
}
},
initData () {
this.page = 1
this.getData()

@ -179,6 +179,7 @@ import util from "@/libs/util";
import Setting from "@/setting";
import { mapMutations } from "vuex";
import { Loading } from 'element-ui'
import Bus from '@/libs/bus'
export default {
data () {
return {
@ -249,7 +250,6 @@ export default {
playingStages: []
},
timer: null,
redisTimer: null,
pickerOptions: {
shortcuts: [{
text: '此刻',
@ -287,17 +287,21 @@ export default {
}
},
mounted () {
// websocket
Bus.$on('activitySocket', () => {
this.getData()
})
this.getData()
this.$once('hook:beforeDestroy', function () {
clearInterval(this.timer)
clearInterval(this.redisTimer)
})
},
methods: {
...mapMutations('activity', [
'setPage'
]),
getList () {
getData () {
// const load = Loading.service()
const { form } = this
this.$post(this.api.activityList, {
@ -318,33 +322,12 @@ export default {
this.page--
this.getData()
}
}).catch(res => {
// load.close()
})
},
getData () {
this.getList()
}).catch(res => { })
},
initData () {
this.page = 1;
this.getData();
},
// redis
getRedis () {
this.$post(this.api.getRedisCacheActivity).then(({ data }) => {
if (data) {
localStorage.getItem('activityTimestamp') !== data && this.getList() // redis
localStorage.setItem('activityTimestamp', data)
}
}).catch(res => { })
},
getData () {
this.getList()
// if (!Setting.isDev) {
clearInterval(this.redisTimer)
this.redisTimer = setInterval(this.getRedis, 1000)
// }
},
add () {
this.$router.push("add");
},
@ -397,7 +380,7 @@ export default {
if (date == "0000-00-00 00:00:00") return "---";
return date;
},
switchOff (val, row) {
async switchOff (val, row) {
this.$post(this.api.disabledEventsActivity, {
activityId: row.id,
isOpen: val,
@ -405,6 +388,8 @@ export default {
}).then(res => { }).catch(err => {
row.schoolOpen = val ? 0 : 1
})
await this.$post(`${this.api.refreshPageNotification}?content=2`)
},
}
};

@ -5,33 +5,60 @@
<ul class="filter">
<li>
<label>创建时间</label>
<el-radio-group v-model="form.month" @change="initData">
<el-radio v-for="(item,index) in dateList" :key="index" :label="item.id" border>{{ item.name }}</el-radio>
<el-radio-group v-model="form.month"
@change="initData">
<el-radio v-for="(item,index) in dateList"
:key="index"
:label="item.id"
border>{{ item.name }}</el-radio>
</el-radio-group>
<el-date-picker v-model="date" @blur='pickerInput' align="right" unlink-panels type="daterange" style="width: 300px;margin-left: 10px;" start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy-MM-dd" value-format="yyyy-MM-dd" clearable></el-date-picker>
<el-date-picker v-model="date"
@blur='pickerInput'
align="right"
unlink-panels
type="daterange"
style="width: 300px;margin-left: 10px;"
start-placeholder="开始日期"
end-placeholder="结束日期"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
clearable></el-date-picker>
</li>
<li>
<label>发布类型</label>
<el-select v-model="form.type" clearable placeholder="请选择发布类型" @change="initData">
<el-option v-for="(item,index) in typeList" :key="index" :label="item.name" :value="item.value"></el-option>
<el-select v-model="form.type"
clearable
placeholder="请选择发布类型"
@change="initData">
<el-option v-for="(item,index) in typeList"
:key="index"
:label="item.name"
:value="item.value"></el-option>
</el-select>
</li>
<li>
<label>实验状态</label>
<el-select v-model="form.status" clearable placeholder="请选择实验状态" @change="initData">
<el-option v-for="(item,index) in statusList" :key="index" :label="item.name" :value="item.value"></el-option>
<el-select v-model="form.status"
clearable
placeholder="请选择实验状态"
@change="initData">
<el-option v-for="(item,index) in statusList"
:key="index"
:label="item.name"
:value="item.value"></el-option>
</el-select>
</li>
<li>
<label>课程</label>
<el-select v-model="curriculumId" placeholder="请选择" @change="initData">
<el-option label="不限" value=""></el-option>
<el-option
v-for="item in curriculumList"
<el-select v-model="curriculumId"
placeholder="请选择"
@change="initData">
<el-option label="不限"
value=""></el-option>
<el-option v-for="item in curriculumList"
:key="item.cid"
:label="item.curriculumName"
:value="item.cid"
></el-option>
:value="item.cid"></el-option>
</el-select>
</li>
</ul>
@ -39,81 +66,153 @@
<div class="tool mul">
<ul class="filter">
<li>
<el-input placeholder="请输入实验班级/项目名称/考核名称" prefix-icon="el-icon-search" v-model.trim="keyWord" clearable style="width: 300px"></el-input>
<el-input placeholder="请输入实验班级/项目名称/考核名称"
prefix-icon="el-icon-search"
v-model.trim="keyWord"
clearable
style="width: 300px"></el-input>
</li>
</ul>
<div>
<div>
<el-button v-auth type="info" round @click="add" >创建考核</el-button>
<el-button v-auth type="primary" round @click="delAllData">批量删除</el-button>
<el-button v-auth
type="info"
round
@click="add">创建考核</el-button>
<el-button v-auth
type="primary"
round
@click="delAllData">批量删除</el-button>
</div>
</div>
</div>
<el-table v-loading="listLoading" ref="table" :data="listData" class="table" stripe header-align="center" @selection-change="handleSelectionChange" row-key="id">
<el-table-column type="selection" :selectable="row => row.status !== 1" width="50" align="center" :reserve-selection="true"></el-table-column>
<el-table-column type="index" width="60" label="序号" align="center">
<el-table v-loading="listLoading"
ref="table"
:data="listData"
class="table"
stripe
header-align="center"
@selection-change="handleSelectionChange"
row-key="id">
<el-table-column type="selection"
:selectable="row => row.status !== 1"
width="50"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column type="index"
width="60"
label="序号"
align="center">
<template slot-scope="scope">
{{ scope.$index + (pageNum - 1) * pageSize + 1 }}
</template>
</el-table-column>
<el-table-column prop="className" label="实验班级" align="center" min-width="120px" show-overflow-tooltip></el-table-column>
<el-table-column prop="experimentalName" label="考核名称" align="center" min-width="120px" show-overflow-tooltip></el-table-column>
<el-table-column prop="projectName" label="项目名称" min-width="200" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="experimenterNum" label="实验人数" align="center"></el-table-column>
<el-table-column prop="experimentDuration" label="实验时长" align="center"></el-table-column>
<el-table-column label="邀请码" align="center">
<el-table-column prop="className"
label="实验班级"
align="center"
min-width="120px"
show-overflow-tooltip></el-table-column>
<el-table-column prop="experimentalName"
label="考核名称"
align="center"
min-width="120px"
show-overflow-tooltip></el-table-column>
<el-table-column prop="projectName"
label="项目名称"
min-width="200"
show-overflow-tooltip
align="center"></el-table-column>
<el-table-column prop="experimenterNum"
label="实验人数"
align="center"></el-table-column>
<el-table-column prop="experimentDuration"
label="实验时长"
align="center"></el-table-column>
<el-table-column label="邀请码"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.isEnableCode == 1 ? scope.row.invitationCode : "" }}</span>
</template>
</el-table-column>
<el-table-column prop="type" label="发布类型" align="center">
<el-table-column prop="type"
label="发布类型"
align="center">
<template slot-scope="scope">
<span>{{ types[scope.row.type] }}</span>
</template>
</el-table-column>
<el-table-column prop="createTime" width="150" label="创建时间" align="center">
<el-table-column prop="createTime"
width="150"
label="创建时间"
align="center">
</el-table-column>
<el-table-column prop="startTime" width="150" label="起始时间" align="center">
<el-table-column prop="startTime"
width="150"
label="起始时间"
align="center">
<template slot-scope="scope">
<span>{{ transferTime(scope.row.startTime) }}</span>
</template>
</el-table-column>
<el-table-column prop="stopTime" width="150" label="结束时间" align="center">
<el-table-column prop="stopTime"
width="150"
label="结束时间"
align="center">
<template slot-scope="scope">
<span>{{ transferTime(scope.row.stopTime) }}</span>
</template>
</el-table-column>
<el-table-column label="倒计时" align="center">
<el-table-column label="倒计时"
align="center">
<template slot-scope="scope">
<span>{{ timeFilter(scope.row) }}</span>
</template>
</el-table-column>
<el-table-column label="实验状态" align="center">
<el-table-column label="实验状态"
align="center">
<template slot-scope="scope">
<span>
{{ status[scope.row.status] }}
</span>
</template>
</el-table-column>
<el-table-column label="操作" width="170" align="center">
<el-table-column label="操作"
width="170"
align="center">
<template slot-scope="scope">
<template v-if="scope.row.status == 0 && (roleName.includes('超级') || roleName === scope.row.roleName || (roleName === '管理员' && !scope.row.roleName.includes('超级')))">
<el-button v-auth v-if="scope.row.type == 1" type="text" @click="start(scope.row)">启动</el-button>
<el-button v-auth type="text" @click="edit(scope.row)">修改</el-button>
<el-button v-auth
v-if="scope.row.type == 1"
type="text"
@click="start(scope.row)">启动</el-button>
<el-button v-auth
type="text"
@click="edit(scope.row)">修改</el-button>
</template>
<template v-else-if="scope.row.status == 1 && (roleName.includes('超级') || roleName === scope.row.roleName || (roleName === '管理员' && !scope.row.roleName.includes('超级')))">
<el-button v-auth type="text" @click="finish(scope.row)">提前结束</el-button>
<el-button v-auth
type="text"
@click="finish(scope.row)">提前结束</el-button>
</template>
<template v-else-if="scope.row.status == 2">
<el-button v-auth type="text" @click="show(scope.row)">查看成绩</el-button>
<el-button v-auth
type="text"
@click="show(scope.row)">查看成绩</el-button>
</template>
<el-button v-auth v-if="(scope.row.status == 0 || scope.row.status == 2) && (roleName.includes('超级') || roleName === scope.row.roleName || (roleName === '管理员' && !scope.row.roleName.includes('超级')))" type="text" @click="delData(scope.row)">删除</el-button>
<el-button v-auth
v-if="(scope.row.status == 0 || scope.row.status == 2) && (roleName.includes('超级') || roleName === scope.row.roleName || (roleName === '管理员' && !scope.row.roleName.includes('超级')))"
type="text"
@click="delData(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background layout="total, prev, pager, next" :total="total" @current-change="handleCurrentChange" :current-page="pageNum"></el-pagination>
<el-pagination background
layout="total, prev, pager, next"
:total="total"
@current-change="handleCurrentChange"
:current-page="pageNum"></el-pagination>
</div>
</div>
</template>
@ -346,9 +445,10 @@ export default {
endTime: util.formatDate("yyyy-MM-dd hh:mm:ss", new Date()),
status: 2
};
this.$post(`${this.api.collectPaper}?id=${row.id}`).then(res => {
this.$post(`${this.api.collectPaper}?id=${row.id}`).then(async res => {
util.successMsg("提前结束成功!");
this.getData();
// await this.$post(`${this.api.refreshPageNotification}?content=3-${row.id}`)
}).catch(err => {
console.log(err);
});

@ -120,6 +120,7 @@
<script>
import org from "./modelType"
import Setting from '@/setting'
import Bus from '@/libs/bus'
export default {
data () {
return {
@ -136,7 +137,6 @@ export default {
schoolModels: [],
systemModels: [],
submiting: false,
timer: null
};
},
components: {
@ -151,13 +151,15 @@ export default {
}
},
mounted () {
this.$once('hook:beforeDestroy', function () {
clearInterval(this.timer)
// websocket
Bus.$on('modelSocket', () => {
this.getData()
})
},
methods: {
getList () {
getData () {
const curNode = this.$refs.tree.$refs.tree.getCurrentNode() //
console.log("🚀 ~ file: model.vue:162 ~ getData ~ this.$refs.tree:", this.$refs.tree)
if (curNode) {
this.isTopLevel = !curNode.level
//
@ -186,22 +188,6 @@ export default {
}
}
},
getData () {
clearInterval(this.timer)
this.getList()
if (!Setting.isDev) {
this.timer = setInterval(this.getRedis, 1000)
}
},
// redis
getRedis () {
this.$post(this.api.modelRedis).then(({ data }) => {
if (data) {
localStorage.getItem('modelAdmin') !== data && this.getList() // redis
localStorage.setItem('modelAdmin', data)
}
}).catch(res => { })
},
initData () {
this.page = 1
this.getData()

@ -129,6 +129,7 @@
<script>
import org from "./sourceType"
import Setting from '@/setting'
import Bus from '@/libs/bus'
export default {
data () {
return {
@ -141,7 +142,6 @@ export default {
total: 0,
multipleSelection: [],
isSystem: 0, //
timer: null
};
},
components: {
@ -156,13 +156,14 @@ export default {
}
},
mounted () {
this.$once('hook:beforeDestroy', function () {
clearInterval(this.timer)
// websocket
Bus.$on('modelSocket', () => {
this.getData()
})
},
methods: {
//
async getList () {
async getData () {
const curNode = this.$refs.tree.$refs.tree.getCurrentNode() || {}//
this.isTopLevel = !curNode.level
let res
@ -174,7 +175,6 @@ export default {
founder: 0
}
if (curNode.level) data.categoryId = curNode.id
console.log("🚀 ~ file: sourceModel.vue:177 ~ getList ~ this.isSystem:", this.isSystem)
//
if (this.isSystem) {
//
@ -191,22 +191,6 @@ export default {
this.listData = res.data.records
this.total = res.data.total
},
getData () {
clearInterval(this.timer)
this.getList()
if (!Setting.isDev) {
this.timer = setInterval(this.getRedis, 1000)
}
},
// redis
getRedis () {
this.$post(this.api.modelRedis).then(({ data }) => {
if (data) {
localStorage.getItem('modelAdmin') !== data && this.getList() // redis
localStorage.setItem('modelAdmin', data)
}
}).catch(res => { })
},
//
catetoryClick (school) {
this.isSystem = school
@ -272,7 +256,8 @@ export default {
type: "warning"
}).then(() => {
//
this.$post(this.api[isSystem ? (off ? 'demoHiddenOpen' : 'demoHiddenClose') : 'disableModelDemo'], list).then(res => {
this.$post(this.api[isSystem ? (off ? 'demoHiddenOpen' : 'demoHiddenClose') : 'disableModelDemo'], list).then(async res => {
await this.$post(`${this.api.refreshPageNotification}?content=4`)
this.$refs.table.clearSelection()
this.$message.success(`${off ? '启用' : '禁用'}成功`)
this.getData()
@ -285,7 +270,7 @@ export default {
}
},
//
switchOff (val, row) {
async switchOff (val, row) {
this.$post(this.api.disableModelDemo, [{
isOpen: val,
modelId: row.id,
@ -295,6 +280,8 @@ export default {
}).catch(res => {
this.getList()
})
await this.$post(`${this.api.refreshPageNotification}?content=4`)
},
//
switchOffSystem (val, row) {

@ -209,7 +209,7 @@ import util from "@/libs/util";
import Setting from "@/setting";
import { mapMutations } from "vuex";
import { Loading } from 'element-ui'
import Bus from '@/libs/bus'
export default {
name: "match",
data () {
@ -266,7 +266,6 @@ export default {
playingStages: []
},
timer: null,
redisTimer: null,
pickerOptions: {
shortcuts: [{
text: '此刻',
@ -304,17 +303,20 @@ export default {
}
},
mounted () {
// websocket
Bus.$on('matchSocket', () => {
this.getData()
})
this.getData()
this.$once('hook:beforeDestroy', function () {
clearInterval(this.timer)
clearInterval(this.redisTimer)
})
},
methods: {
...mapMutations('match', [
'setPage'
]),
getList () {
getData () {
// const load = Loading.service()
const { form } = this
this.$post(this.api.competitionPageConditionQueryByOccupationlab, {
@ -366,9 +368,6 @@ export default {
// load.close()
})
},
getData () {
this.getList()
},
initData () {
this.page = 1;
this.getData();
@ -379,13 +378,6 @@ export default {
data && this.getList()
}).catch(res => { })
},
getData () {
this.getList()
if (!Setting.isDev) {
clearInterval(this.redisTimer)
this.redisTimer = setInterval(this.getRedis, 1000)
}
},
add () {
this.$router.push("/match/add");
},
@ -466,7 +458,7 @@ export default {
if (date == "0000-00-00 00:00:00") return "---";
return date;
},
switchOff (val, row) {
async switchOff (val, row) {
this.$post(this.api.disabledEventsCompetition, {
competitionId: row.id,
isOpen: val,
@ -474,6 +466,8 @@ export default {
}).then(res => {
util.successMsg(val == 1 ? '禁用成功' : '启用成功')
}).catch(err => { })
await this.$post(`${this.api.refreshPageNotification}?content=1`)
},
}
};

@ -1,12 +1,19 @@
<template>
<div class="match">
<div class="banner" :style="{backgroundImage: 'url(' + (form.carouselUrl || 'https://huoran.oss-cn-shenzhen.aliyuncs.com/20220613/png/1536269450851409920.png') + ')'}"></div>
<div class="banner"
:style="{backgroundImage: 'url(' + (form.carouselUrl || 'https://huoran.oss-cn-shenzhen.aliyuncs.com/20220613/png/1536269450851409920.png') + ')'}"></div>
<div class="center">
<breadcrumb ref="breadcrumb" :data="'全部赛事/' + form.name" route="matchPreview"></breadcrumb>
<breadcrumb ref="breadcrumb"
:data="'全部赛事/' + form.name"
route="list"></breadcrumb>
<div class="match-inner">
<div class="flex-between">
<el-tabs v-model="curType" @tab-click="typeChange">
<el-tab-pane v-for="(item, index) in typeList" :key="index" :label="item.name" :name="item.id"></el-tab-pane>
<el-tabs v-model="curType"
@tab-click="typeChange">
<el-tab-pane v-for="(item, index) in typeList"
:key="index"
:label="item.name"
:name="item.id"></el-tab-pane>
</el-tabs>
<div class="status wait">等待报名</div>
</div>
@ -15,31 +22,46 @@
<div class="meta">最近编辑时间{{ form.updateTime }}</div>
</div>
<div class="l-title" id="part1"><img src="@/assets/img/label.png" alt=""> 竞赛信息</div>
<div v-if="form.description" class="texts ql-editor" v-html="form.description"></div>
<div class="l-title"
id="part1"><img src="@/assets/img/label.png"
alt=""> 竞赛信息</div>
<div v-if="form.description"
class="texts ql-editor"
v-html="form.description"></div>
<template v-if="form.competitionAnnexList && form.competitionAnnexList.length">
<h6 class="p-title">附件下载</h6>
<ul class="files">
<li v-for="(item, i) in form.competitionAnnexList" :key="i">
<el-link v-if="item.canPreview" class="m-r-10" type="primary" @click="previewFile(item)">{{ item.fileName }}</el-link>
<span v-else class="file-name">{{ item.fileName }}</span>
<el-link type="primary" :underline="false" @click="download(item)">下载</el-link>
<li v-for="(item, i) in form.competitionAnnexList"
:key="i">
<el-link v-if="item.canPreview"
class="m-r-10"
type="primary"
@click="previewFile(item)">{{ item.fileName }}</el-link>
<span v-else
class="file-name">{{ item.fileName }}</span>
<el-link type="primary"
:underline="false"
@click="download(item)">下载</el-link>
</li>
</ul>
</template>
<template v-if="!form.description && (!form.competitionAnnexList || !form.competitionAnnexList.length )">
<div class="empty">
<div>
<img src="@/assets/img/none.png" alt="">
<img src="@/assets/img/none.png"
alt="">
<p>暂无数据</p>
</div>
</div>
</template>
<template v-if="form.releaseType && form.competitionStage.length">
<div class="l-title"><img src="@/assets/img/label.png" alt=""> 赛程规则与内容</div>
<div class="l-title"><img src="@/assets/img/label.png"
alt=""> 赛程规则与内容</div>
<h6 class="rule-title">{{ form.competitionStage.length }}个竞赛阶段同一个团队每个成员只能参加一个阶段赛项</h6>
<div v-for="(rule, i) in form.competitionStage" :key="i" class="rule">
<div v-for="(rule, i) in form.competitionStage"
:key="i"
class="rule">
<p style="font-size: 16px;color: #333;">{{ rule.stageName }}</p>
<p>比赛时间{{ rule.startTime && rule.startTime + ' ~ ' + rule.endTime }}</p>
<p>比赛方式{{ methods.find(e => e.id == rule.method) && methods.find(e => e.id == rule.method).name }}</p>
@ -57,7 +79,8 @@
<p>团队成绩计算方式{{ teamCalculationMethods.find(e => e.id == rule.teamCalculationMethod) && teamCalculationMethods.find(e => e.id == rule.teamCalculationMethod).name }}</p>
</template>
<p>阶段比赛结束后{{ rule.resultAnnouncementTime }}小时公布阶段比赛成绩</p>
<div v-if="form.rule === 1" class="flex">
<div v-if="form.rule === 1"
class="flex">
<p>晋级规则</p>
<div>
<p v-if="rule.peopleLimit">本阶段成绩排名前{{ rule.peopleLimit }}可晋级下一阶段比赛</p>
@ -69,37 +92,52 @@
</template>
<!-- 进展 -->
<div class="l-title" id="part2"><img src="@/assets/img/label.png" alt=""> 竞赛进展</div>
<ul class="progress" v-if="progress.length">
<li v-for="(item,index) in progress" :key="index" :class="item.status == 0 ? 'not' : (item.status == 1 ? 'ing' : 'done')">
<div class="l-title"
id="part2"><img src="@/assets/img/label.png"
alt=""> 竞赛进展</div>
<ul class="progress"
v-if="progress.length">
<li v-for="(item,index) in progress"
:key="index"
:class="item.status == 0 ? 'not' : (item.status == 1 ? 'ing' : 'done')">
<i class="dot"></i>
<p class="name">{{item.title}}</p>
<p class="desc">{{item.description}}</p>
</li>
<img class="rocket" src="@/assets/img/rocket.png" alt="">
<img class="rocket"
src="@/assets/img/rocket.png"
alt="">
</ul>
<template v-else>
<div class="empty">
<div>
<img src="@/assets/img/none.png" alt="">
<img src="@/assets/img/none.png"
alt="">
<p>暂无数据</p>
</div>
</div>
</template>
<!-- 公告 -->
<div class="l-title" id="part3"><img src="@/assets/img/label.png" alt=""> 通知公告</div>
<ul class="notice-list" v-if="notices.length">
<li v-for="(item, i) in notices" :key="i" @click="toNotice(item)">
<div class="l-title"
id="part3"><img src="@/assets/img/label.png"
alt=""> 通知公告</div>
<ul class="notice-list"
v-if="notices.length">
<li v-for="(item, i) in notices"
:key="i"
@click="toNotice(item)">
<h6>{{ item.announcementTitle }}</h6>
<p class="meta">{{ item.updateTime }}</p>
<div class="des" v-html="item.announcementText"></div>
<div class="des"
v-html="item.announcementText"></div>
</li>
</ul>
<template v-else>
<div class="empty">
<div>
<img src="@/assets/img/none.png" alt="">
<img src="@/assets/img/none.png"
alt="">
<p>暂无通知公告</p>
</div>
</div>
@ -198,9 +236,12 @@ export default {
</script>
<style lang="scss" scoped>
/deep/.breadcrumb .el-breadcrumb__item .is-link {
color: #007eff;
}
.match {
padding-bottom: 20px;
background-color: #F3F6FA;
background-color: #f3f6fa;
.banner {
width: 100%;
height: 350px;
@ -220,15 +261,16 @@ export default {
box-sizing: border-box;
}
/deep/.el-tabs {
.el-tabs__item.is-active, .el-tabs__item:hover {
color: #007EFF;
.el-tabs__item.is-active,
.el-tabs__item:hover {
color: #007eff;
}
.el-tabs__active-bar {
background-color: #007EFF;
background-color: #007eff;
}
}
.p-title {
border-left-color: #007EFF;
border-left-color: #007eff;
}
.l-title {
display: flex;
@ -246,17 +288,17 @@ export default {
line-height: 34px;
font-size: 14px;
color: #fff;
background-color: #52C41A;
background-color: #52c41a;
border-radius: 4px;
cursor: pointer;
&.wait {
background-color: #FAAD14;
background-color: #faad14;
}
&.signing {
background-color: #007EFF;
background-color: #007eff;
}
&.signed {
background-color: #52C41A;
background-color: #52c41a;
}
&.finish {
background-color: #ccc;
@ -267,7 +309,7 @@ export default {
margin: 0 auto;
font-size: 28px;
text-align: center;
color: #0B1D30;
color: #0b1d30;
}
.info .meta {
padding: 16px 0;
@ -298,9 +340,9 @@ export default {
}
}
.el-link.el-link--primary {
color: #007EFF !important;
color: #007eff !important;
&:after {
border-color: #007EFF;
border-color: #007eff;
}
}
}
@ -317,7 +359,7 @@ export default {
left: 50%;
width: 2px;
height: 100%;
background-color: #E1E6F2;
background-color: #e1e6f2;
}
&:after {
content: '';
@ -325,7 +367,7 @@ export default {
top: -10px;
left: 430px;
border: 8px solid transparent;
border-bottom-color: #E1E6F2;
border-bottom-color: #e1e6f2;
}
.rocket {
position: absolute;
@ -342,7 +384,7 @@ export default {
left: 431px;
width: 15px;
height: 15px;
background-color: #DCDCDC;
background-color: #dcdcdc;
border-radius: 50%;
}
.name {
@ -354,27 +396,28 @@ export default {
font-size: 16px;
color: #fff;
border-radius: 20px;
background-color: #C4C4C4;
background-color: #c4c4c4;
}
.desc {
position: relative;
color: #333;
font-size: 14px;
}
&.ing, &.done {
&.ing,
&.done {
.dot {
top: 8px;
background-color: #007EFF;
background-color: #007eff;
}
.name {
background-color: #007EFF;
background-color: #007eff;
}
}
&.ing {
.dot {
width: 27px;
height: 27px;
border: 6px solid #E2F1FB;
border: 6px solid #e2f1fb;
}
}
&:nth-child(odd) {
@ -395,16 +438,17 @@ export default {
border: 18px solid transparent;
border-top-width: 6px;
border-bottom-width: 6px;
border-left-color: #C4C4C4;
border-left-color: #c4c4c4;
}
}
.desc {
text-align: right;
}
&.ing, &.done {
&.ing,
&.done {
.name {
&:before {
border-left-color: #007EFF;
border-left-color: #007eff;
}
}
}
@ -430,7 +474,7 @@ export default {
border: 18px solid transparent;
border-top-width: 6px;
border-bottom-width: 6px;
border-right-color: #C4C4C4;
border-right-color: #c4c4c4;
}
}
.desc {
@ -444,14 +488,15 @@ export default {
left: auto;
right: -18px;
border: 9px solid transparent;
border-left-color: #E6E6E6;
border-left-color: #e6e6e6;
}
}
&.ing, &.done {
&.ing,
&.done {
.name {
&:after {
border-right-color: #007EFF;
border-right-color: #007eff;
}
}
}
@ -478,9 +523,9 @@ export default {
h6 {
font-size: 20px;
font-weight: 500;
color: #0B1D30;
color: #0b1d30;
&:hover {
color: #007EFF;
color: #007eff;
}
}
.meta {

@ -37,20 +37,51 @@
<div class="des"
v-html="form.mall.productIntroduction"></div>
<div class="fields">
<div class="field"><img src="@/assets/img/product/1.png"
alt=""> 适用专业{{ form.goodsRes.professionalName }}</div>
<div class="field">
<img src="@/assets/img/product/1.png"
alt=""> 适用专业
<el-tooltip class="text"
effect="dark"
:visible-arrow="false"
:content="form.goodsRes.professionalName"
placement="bottom">
<div>
{{ form.goodsRes.professionalName }}
</div>
</el-tooltip>
</div>
<div v-if="form.mall.applicationScenario"
class="field"><span class="label"><img src="@/assets/img/product/2.png"
alt=""> 适用场景</span>{{ form.mall.applicationScenario }}</div>
class="field">
<img src="@/assets/img/product/2.png"
alt=""> 适用场景
<div class="text">{{ form.mall.applicationScenario }}</div>
</div>
<div v-if="form.mall.matchingCourse"
class="field"><span class="label"><img src="@/assets/img/product/3.png"
alt=""> 匹配课程</span>{{ form.mall.matchingCourse }}</div>
class="field">
<img src="@/assets/img/product/3.png"
alt=""> 匹配课程
<el-tooltip class="text"
effect="dark"
:visible-arrow="false"
:content="form.mall.matchingCourse"
placement="bottom">
<div class="text">
{{ form.mall.matchingCourse }}
</div>
</el-tooltip>
</div>
<div v-if="form.mall.courseHours"
class="field"><span class="label"><img src="@/assets/img/product/4.png"
alt=""> 预计课时</span>{{ form.mall.courseHours }}</div>
class="field">
<img src="@/assets/img/product/4.png"
alt=""> 预计课时
<div class="text">{{ form.mall.courseHours }}</div>
</div>
<div v-if="form.goodsRes.typeName"
class="field"><span class="label"><img src="@/assets/img/product/5.png"
alt=""> 产品类型</span>{{ form.goodsRes.typeName }}</div>
class="field">
<img src="@/assets/img/product/5.png"
alt=""> 产品类型
<div class="text">{{ form.goodsRes.typeName }}</div>
</div>
</div>
<button v-if="!form.goodsRes.logoOfOurSchool"
class="btn"
@ -391,11 +422,24 @@ export default {
@include mul-ellipsis(3);
}
.field {
display: inline-flex;
align-items: center;
margin: 0 20px 10px 0;
font-size: 14px;
color: #2e2d31;
&:last-child {
margin-right: 0;
}
.label {
color: #333;
}
.text {
max-width: 160px;
@include ellipsis;
}
img {
margin-right: 5px;
}
}
.fields {
display: flex;
@ -404,10 +448,6 @@ export default {
height: 60px;
margin: 10px 0 10px;
overflow: hidden;
.field {
margin-right: 40px;
margin-bottom: 10px;
}
}
.btn {
width: 119px;

@ -681,7 +681,6 @@ export default {
this.active = 4
const el = document.getElementById('comment' + this.commentId)
el && el.scrollIntoView(false)
await this.$post(`${this.api.noticeRead}?isRead=1&notifyId=${this.notifyId}`) //
this.commentId = ''
}
})
@ -951,6 +950,7 @@ export default {
util.cookies.set('curriculumName', escape(this.curriculumName))
util.cookies.set('systemId', id)
util.cookies.set('fromManager', 1)
util.cookies.set('isSubmit', '', -1)
// 8pythoncookiesystemId
location.href = process.env.NODE_ENV === 'development' ?
`http://${location.hostname}:8085/#/` :

@ -1,9 +1,11 @@
<template>
<div class="flex">
<div class="page" style="width: 320px">
<div class="page"
style="width: 320px">
<div class="m-b-20">
<h6 class="p-title">学生</h6>
<el-radio-group v-model="studentType" @change="changeStudentType">
<el-radio-group v-model="studentType"
@change="changeStudentType">
<div class="m-b-20">
<el-radio :label="1">所有学生</el-radio>
</div>
@ -15,13 +17,15 @@
<el-divider></el-divider>
<div>
<div class="flex-between m-b-20">
<h6 class="p-title" style="margin-bottom: 0">学生组织架构</h6>
<el-button v-auth="'学生组织架构添加'" type="text" @click="handleAdd">添加</el-button>
<h6 class="p-title"
style="margin-bottom: 0">学生组织架构</h6>
<el-button v-auth="'学生组织架构添加'"
type="text"
@click="handleAdd">添加</el-button>
</div>
<div style="height: 504px; max-height: 504px; overflow: auto">
<org-tree
v-if="treeVisible"
<org-tree v-if="treeVisible"
default-expand-all
ref="orgTree"
node-key="id"
@ -31,19 +35,18 @@
:expand-on-click-node="false"
@node-click="handleNodeClick"
:current-node-key="architectureId"
:props="{children: 'children', label: 'organizationName', isLeaf: 'leaf'}"
>
<span class="custom-tree-node" slot-scope="{ node, data }">
<span class="name" :title="node.label">{{ node.label }}</span>
:props="{children: 'children', label: 'organizationName', isLeaf: 'leaf'}">
<span class="custom-tree-node"
slot-scope="{ node, data }">
<span class="name"
:title="node.label">{{ 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 < 3"
type="text"
icon="el-icon-circle-plus-outline"
@ -55,34 +58,42 @@
</div>
</div>
<el-dialog
:title="orgTitle"
<el-dialog :title="orgTitle"
:visible.sync="orgVisible"
:close-on-click-modal="false"
width="50%"
@close="handleClose"
>
<el-form v-if="orgVisible" ref="orgForm" :model="orgForm" :rules="rules" label-width="100px">
<el-form-item :label="labelName" prop="organizationName">
<el-input v-model.trim="orgForm.organizationName" placeholder="请输入"></el-input>
@close="handleClose">
<el-form v-if="orgVisible"
ref="orgForm"
:model="orgForm"
:rules="rules"
label-width="100px">
<el-form-item :label="labelName"
prop="organizationName">
<el-input v-model.trim="orgForm.organizationName"
placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="上级部门">
<el-cascader
v-if="showCascader"
<el-cascader v-if="showCascader"
v-model="cascaderValue"
:props="cascaderProps"
@change="handleChangeCascader"
clearable
style="width: 100%"
>
style="width: 100%">
</el-cascader>
<span v-else>{{ orgForm.parentName }}</span>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button v-if="isAddOrg" @click="handleClose"> </el-button>
<el-button v-if="!isAddOrg" type="danger" plain @click="handleDel">删除</el-button>
<el-button type="primary" @click="orgSubmit"> </el-button>
<span slot="footer"
class="dialog-footer">
<el-button v-if="isAddOrg"
@click="handleClose"> </el-button>
<el-button v-if="!isAddOrg"
type="danger"
plain
@click="handleDel">删除</el-button>
<el-button type="primary"
@click="orgSubmit"> </el-button>
</span>
</el-dialog>
@ -92,91 +103,160 @@
<div class="tool">
<ul class="filter">
<li>
<el-input style="width: 250px;" placeholder="请输入学生姓名/学号" prefix-icon="el-icon-search" v-model="keyWord" clearable></el-input>
<el-input style="width: 250px;"
placeholder="请输入学生姓名/学号"
prefix-icon="el-icon-search"
v-model="keyWord"
clearable></el-input>
</li>
</ul>
<div>
<el-button type="info" v-auth @click="addStudent">新增学生</el-button>
<el-button type="primary" v-auth @click="batchImport">批量导入</el-button>
<el-button type="primary" v-auth @click="delAllSelection">批量删除</el-button>
<el-button type="info"
v-auth
@click="addStudent">新增学生</el-button>
<el-button type="primary"
v-auth
@click="batchImport">批量导入</el-button>
<el-button type="primary"
v-auth
@click="delAllSelection">批量删除</el-button>
</div>
</div>
<el-table :data="listData" class="table" ref="table" stripe header-align="center" @selection-change="handleSelectionChange" :row-key="getRowKeys">
<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="workNumber" label="学生学号" align="center" min-width="100"></el-table-column>
<el-table-column prop="className" label="班级" align="center" min-width="200" show-overflow-tooltip></el-table-column>
<el-table-column prop="countries" label="账号角色" align="center" width="100">
<el-table :data="listData"
class="table"
ref="table"
stripe
header-align="center"
@selection-change="handleSelectionChange"
:row-key="getRowKeys">
<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="workNumber"
label="学生学号"
align="center"
min-width="100"></el-table-column>
<el-table-column prop="className"
label="班级"
align="center"
min-width="200"
show-overflow-tooltip></el-table-column>
<el-table-column prop="countries"
label="账号角色"
align="center"
width="100">
<template slot-scope="scope">学生</template>
</el-table-column>
<el-table-column prop="loginNumber" label="登录次数" align="center" width="100"></el-table-column>
<el-table-column prop="lastLoginTime" label="上次登录时间" align="center" width="180"></el-table-column>
<el-table-column label="操作" align="center" width="300">
<el-table-column prop="loginNumber"
label="登录次数"
align="center"
width="100"></el-table-column>
<el-table-column prop="lastLoginTime"
label="上次登录时间"
align="center"
width="180"></el-table-column>
<el-table-column label="操作"
align="center"
width="300">
<template slot-scope="scope">
<el-button v-auth v-if="isRemove" type="text" @click="removeStudent(scope.row)">移除</el-button>
<el-button v-auth type="text" @click="editStudent(scope.row,true)">查看</el-button>
<el-button v-auth type="text" @click="editStudent(scope.row,false)">编辑</el-button>
<el-button v-auth type="text" @click="resetPassword(scope.row)">重置密码</el-button>
<el-button v-auth type="text" @click="handleDelete(scope.row)">删除</el-button>
<el-switch
v-auth="'禁用'"
<el-button v-auth
v-if="isRemove"
type="text"
@click="removeStudent(scope.row)">移除</el-button>
<el-button v-auth
type="text"
@click="editStudent(scope.row,true)">查看</el-button>
<el-button v-auth
type="text"
@click="editStudent(scope.row,false)">编辑</el-button>
<el-button v-auth
type="text"
@click="resetPassword(scope.row)">重置密码</el-button>
<el-button v-auth
type="text"
@click="handleDelete(scope.row)">删除</el-button>
<el-switch v-auth="'禁用'"
v-model="scope.row.isEnable"
:active-value="1"
:inactive-value="0"
style="margin: 0 5px"
@change="switchOff(scope.row)"
></el-switch>
@change="switchOff(scope.row)"></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>
<el-pagination background
@current-change="currentChange"
:current-page="page"
layout="total, prev, pager, next"
:total="total"></el-pagination>
</div>
<el-dialog
class="dialog"
<el-dialog class="dialog"
width="60%"
:title="isDetail ? '查看学生' : (isAdd ? '新增学生' : '编辑学生')"
:visible.sync="studentVisible"
:close-on-click-modal="false"
@close="closeStudent"
>
<el-form ref="form" :model="form" :rules="rules" :disabled="isDetail" label-width="100px">
@close="closeStudent">
<el-form ref="form"
:model="form"
:rules="rules"
:disabled="isDetail"
label-width="100px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="workNumber" label="学生学号">
<el-input v-model="form.workNumber" placeholder="学生学号" @blur="workNumberChange"></el-input>
<el-form-item prop="workNumber"
label="学生学号">
<el-input v-model="form.workNumber"
placeholder="学生学号"
@blur="workNumberChange"></el-input>
</el-form-item>
<el-form-item prop="userName" label="学生姓名">
<el-input v-model="form.userName" placeholder="请输入学生姓名"></el-input>
<el-form-item prop="userName"
label="学生姓名">
<el-input v-model="form.userName"
placeholder="请输入学生姓名"></el-input>
</el-form-item>
<el-form-item prop="roleId" label="账号角色">
<el-form-item prop="roleId"
label="账号角色">
学生
</el-form-item>
<el-form-item prop="phone" label="手机号">
<el-input v-model="form.phone" placeholder="可用于登录平台,以及找回密码" maxlength="11"></el-input>
<el-form-item prop="phone"
label="手机号">
<el-input v-model="form.phone"
placeholder="可用于登录平台,以及找回密码"
maxlength="11"></el-input>
</el-form-item>
<el-form-item prop="email" label="邮箱">
<el-input v-model="form.email" placeholder="可用于登录平台,以及找回密码"></el-input>
<el-form-item prop="email"
label="邮箱">
<el-input v-model="form.email"
placeholder="可用于登录平台,以及找回密码"></el-input>
</el-form-item>
<el-form-item prop="uniqueIdentification" label="唯一标识">
<el-input disabled v-model="form.uniqueIdentification"></el-input>
<el-form-item prop="uniqueIdentification"
label="唯一标识">
<el-input disabled
v-model="form.uniqueIdentification"></el-input>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item prop="classId" label="所在班级">
<el-input
placeholder="输入关键字进行过滤"
<el-form-item prop="classId"
label="所在班级">
<el-input placeholder="输入关键字进行过滤"
v-model="filterText"
style="margin-bottom: 10px"
>
style="margin-bottom: 10px">
</el-input>
<div style="max-height: 245px; border: 1px solid #DCDFE6; border-radius: 4px; padding: 10px 10px 10px 0px; overflow: auto">
<org-tree
v-if="showTree && treeVisible"
<org-tree v-if="showTree && treeVisible"
ref="classTree"
show-checkbox
node-key="id"
@ -186,13 +266,12 @@
:load="loadClassTree"
:default-checked-keys="defaultCheckedKeys"
:filter-node-method="filterNode"
:props="{children: 'children', label: 'organizationName', isLeaf: 'leaf'}"
>
<span class="custom-tree-node" slot-scope="{ node, data }">
:props="{children: 'children', label: 'organizationName', 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="'学生组织架构添加'"
v-if="node.level < 3"
type="text"
icon="el-icon-circle-plus-outline"
@ -207,20 +286,31 @@
</el-col>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer" v-if="!isDetail">
<el-button type="primary" :disabled="disableds" @click="saveData(0)">保存</el-button>
<el-button v-if="isAdd" type="primary" :disabled="disableds" @click="saveData(1)">保存并继续添加</el-button>
<el-button size="small" @click="closeStudent">取消</el-button>
<span slot="footer"
class="dialog-footer"
v-if="!isDetail">
<el-button type="primary"
:disabled="disableds"
@click="saveData(0)">保存</el-button>
<el-button v-if="isAdd"
type="primary"
:disabled="disableds"
@click="saveData(1)">保存并继续添加</el-button>
<el-button size="small"
@click="closeStudent">取消</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"
@ -230,15 +320,21 @@
:on-exceed="handleExceed"
:action="this.api.importStudent"
: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">
<el-button size="small" @click="importVisible = false"> </el-button>
<el-button size="small" type="primary" @click="uploadSure"> </el-button>
<span slot="footer"
class="dialog-footer">
<el-button size="small"
@click="importVisible = false"> </el-button>
<el-button size="small"
type="primary"
@click="uploadSure"> </el-button>
</span>
</el-dialog>
</div>
@ -609,6 +705,7 @@ export default {
this.multipleSelection = val;
},
changeStudentType () {
this.$refs.orgTree.setCurrentKey(null)
this.isRemove = false;
this.initData();
},

@ -26,7 +26,7 @@ if (isPro) {
uploadURL = `http://121.37.12.51/`
host = "http://121.37.12.51/"; // 中台测试服
// host = 'https://www.occupationlab.com/' // 正式服
host = "http://192.168.31.152:9000/"; // 榕
// host = "http://192.168.31.152:9000/"; // 榕
// host = 'http://192.168.31.51:9000/'; // 赓
}

Loading…
Cancel
Save