Merge branch 'develop' of https://gitee.com/siwa-team/dawa-vue into develop

This commit is contained in:
18571350067 2022-02-24 09:45:43 +08:00
commit 357753d893
10 changed files with 165 additions and 73 deletions

View File

@ -3,9 +3,9 @@
<div class="answer-card">
<a-card :bordered="false">
<div @click="handlerBack" class="answer-card-title"><a-icon type="arrow-left" style="margin-right: 6px;" />答题卡</div>
<div class="answer-cart-time">
<div v-if="data.examTime" class="answer-cart-time">
倒计时:
<b style="margin-left: 5px;"><a-statistic-countdown :value="deadline" :valueStyle="{ fontSize: '16px' }" @finish="onFinish"/></b>
<b style="margin-left: 5px;"><a-statistic-countdown :value="Date.now() + data.examTime*60*1000" :valueStyle="{ fontSize: '16px' }" @finish="onFinish"/></b>
</div>
<DbAnswerCard :data="data"></DbAnswerCard>
<div class="answer-cart-footer flex-center" style="margin-top: 20px;">
@ -89,12 +89,23 @@ export default {
},
methods: {
//
onFinish () {},
onFinish () {
this.$emit('submit', this.data)
},
handlerBack () {
this.$router.go(-1)
},
handlerSubmit () {
this.$emit('submit', this.data)
const _this = this
this.$confirm({
title: '安全培训',
content: '一但提交将不能修改,确定要现在提交吗?',
onOk () {
// change()
_this.$emit('submit', _this.data)
},
onCancel () {}
})
}
}
}

View File

@ -3,7 +3,7 @@
<div class="container">
<div class="top">
<div class="header">
<a href="/">
<a href="javascript:void(0);">
<img src="~@/assets/logo.svg" class="logo" alt="logo">
<span class="title">安全培训平台</span>
</a>

View File

@ -39,7 +39,7 @@ const user = {
actions: {
// 登录
Login({ commit }, userInfo) {
Login ({ commit }, userInfo) {
return new Promise((resolve, reject) => {
login(userInfo).then(response => {
storage.set(ACCESS_TOKEN, response.token, 24 * 60 * 60 * 1000)
@ -52,7 +52,7 @@ const user = {
},
// 获取用户信息
GetInfo({ commit, state }) {
GetInfo ({ commit, state }) {
return new Promise((resolve, reject) => {
getLoginUser().then(response => {
if (response.code === 200) {
@ -76,18 +76,25 @@ const user = {
},
// 登出
Logout({ commit, state }) {
Logout ({ commit, state }) {
return new Promise((resolve) => {
logout().then(() => {
resolve()
}).catch(() => {
resolve()
}).finally(() => {
const clear = function () {
commit('SET_TOKEN', '')
commit('SET_ROLES', [])
commit('SET_BUTTONS', [])
commit('SET_ROUTERS', [])
storage.remove(ACCESS_TOKEN)
}
logout().then(() => {
clear()
setTimeout(() => {
resolve()
}, 300)
resolve()
}).catch(() => {
resolve()
}).finally(() => {
clear()
})
})
}

View File

@ -163,10 +163,14 @@ export default {
methods: {
//
goback() {
this.$router.push({
path: '/course/CoursewareList',
query: { id: this.$route.query.courseId, type: this.$route.query.types },
})
if(this.$route.query.isOther){
this.$router.go(-1)
}else{
this.$router.push({
path: '/course/CoursewareList',
query: { id: this.$route.query.courseId, type: this.$route.query.types },
})
}
},
///

View File

@ -26,7 +26,7 @@
<a-card :bordered="false">
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="48">
<!-- <a-row :gutter="48">
<a-col :md="6" :sm="24">
<a-form-item label="部门名称"><a-input v-model="queryParam.orgName" placeholder="请输入部门名称" @pressEnter="loadData1" /></a-form-item>
</a-col>
@ -34,7 +34,7 @@
<a-button type="primary" @click="$refs.table1.refresh(true)">查询</a-button>
<a-button style="margin-left: 8px" @click="() => {queryParam = {}, this.loadData1()}">重置</a-button>
</a-col>
</a-row>
</a-row> -->
</a-form>
</div>
<s-table
@ -74,7 +74,7 @@
<a-card :bordered="false">
<div class="table-page-search-wrapper" >
<a-form layout="inline">
<a-row :gutter="48">
<!-- <a-row :gutter="48">
<a-col :md="6" :sm="24">
<a-form-item label="部门名称"><a-input v-model="queryParam.orgName" placeholder="请输入部门名称" @pressEnter="loadData2" /></a-form-item>
</a-col>
@ -82,9 +82,13 @@
<a-button type="primary" @click="$refs.table2.refresh(true)">查询</a-button>
<a-button style="margin-left: 8px" @click="() => {queryParam = {}, this.loadData2()}">重置</a-button>
</a-col>
</a-row>
</a-row> -->
</a-form>
</div>
<div class="table-operator">
<a-button @click="changeSort(1)" ref="toFocus">按累计学时排序</a-button>
<a-button @click="changeSort(2)">按年度学时排序</a-button>
</div>
<s-table
ref="table2"
@ -100,7 +104,7 @@
<a-divider>前十统计排名</a-divider>
<div class="table-operator">
<a-button @click="changeTopType(1)" ref="toFocus">公司排名年度学时前十统计</a-button>
<a-button @click="changeTopType(1)">公司排名年度学时前十统计</a-button>
<a-button @click="changeTopType(2)">公司累计学时学时前十统计</a-button>
</div>
<s-table
@ -141,7 +145,7 @@
data () {
return {
//
queryParam: { orgId: undefined, orgName: '' },
queryParam: { orgId: undefined, orgName: '', asc: 1, type: 1 },
// 1
columns1: [
{
@ -150,7 +154,7 @@
},
{
title: '学员数量',
dataIndex: 'studentCount'
dataIndex: 'personCount'
},
{
title: '培训人数',
@ -175,6 +179,10 @@
],
loadData1: parameter => {
return dataOrgStatistics(Object.assign(parameter, this.queryParam)).then((res) => {
const data = res.rows
data.forEach(function(val){
val.trainRate = val.trainRate + '%'
})
return res
})
},
@ -200,10 +208,6 @@
title: '累计学时',
dataIndex: 'sumClassHour'
},
{
title: '人均学时',
dataIndex: 'avgClassHour'
}
],
loadData2: parameter => {
return dataPersonalStatistics(Object.assign(parameter, this.queryParam)).then((res) => {
@ -241,7 +245,7 @@
}
],
loadDataTop1: parameter => {
return dataClassHourTop(Object.assign(parameter, {type : 1})).then((res) => {
return dataClassHourTop(Object.assign(parameter, this.queryParam)).then((res) => {
return res.data
})
},
@ -276,7 +280,7 @@
}
],
loadDataTop2: parameter => {
return dataClassHourTop(Object.assign(parameter, {type : 2})).then((res) => {
return dataClassHourTop(Object.assign(parameter, this.queryParam)).then((res) => {
return res.data
})
},
@ -347,10 +351,27 @@
}
if (this.keyType === '2') {
this.$refs.table2.refresh(true)
if (this.topType === 1) {
this.$refs.tableTop1.refresh(true)
}
if (this.topType === 2) {
this.$refs.tableTop2.refresh(true)
}
}
},
changeTopType (type) {
this.topType = type
this.queryParam.type = type
if (this.topType === 1) {
this.$refs.tableTop1.refresh(true)
}
if (this.topType === 2) {
this.$refs.tableTop2.refresh(true)
}
},
changeSort (type) {
this.queryParam.asc = type
this.$refs.table2.refresh(true)
}
}
}

View File

@ -19,10 +19,12 @@ export default {
data () {
return {
examData: {},
query: {}
query: {},
startTime: 0
}
},
mounted () {
this.startTime = Date.now()
this.query = this.$route.query
this.$nextTick(() => {
this.initData()
@ -134,7 +136,7 @@ export default {
const params = {
projectId: query.projectId,
courseId: query.courseId,
answerTime: 0,
answerTime: Number.parseInt((Date.now() - this.startTime) / 1000),
type: query.practiceType,
questionList: this.formatSubmit(result)
}
@ -149,7 +151,7 @@ export default {
const params = {
projectId: query.projectId,
courseId: query.courseId,
answerTime: 0,
answerTime: Number.parseInt((Date.now() - this.startTime) / 1000),
type: query.practiceType,
questionList: this.formatSubmit(result)
}
@ -164,7 +166,7 @@ export default {
const params = {
projectId: query.projectId,
courseId: query.courseId,
answerTime: 0,
answerTime: Number.parseInt((Date.now() - this.startTime) / 1000),
type: query.practiceType,
examType: query.type === 'test' ? 1 : (query.type === 'operation' ? 3 : 2),
questionList: this.formatSubmit(result)

View File

@ -7,21 +7,42 @@
@search="handleRefresh"
@reset="
() => {
queryParam = {}
handleRefresh()
queryParam = {};
handleRefresh();
}
"></SearchCom>
"
></SearchCom>
</div>
<template v-if="dataList && dataList.length>0">
<template v-if="dataList && dataList.length > 0">
<a-card v-for="(item, index) in dataList" :key="index" style="margin-bottom: 15px;">
<div class="flex-center" >
<div class="flex-center">
<div style="flex: 1;">
<h3>{{ item.name }}</h3>
<div><span style="margin-right: 20px;">下载次数{{ item.rightQuestions }}</span><span>预览次数{{ item.submitTime }}</span></div>
<div>
<span style="margin-right: 20px;">下载次数{{ item.downCount || 0 }}</span>
<span>预览次数{{ item.viewCount }}</span>
</div>
</div>
<div style="flex: 0 0 200px; text-align: right;">
<div @click="handlerDown(item)" :span="24" style="margin-bottom: 10px;"><a-button type="primary" size="small" >下载</a-button></div>
<div @click="handlerPreview(item)" :span="24"><a-button type="danger" size="small">预览</a-button></div>
<!-- <div @click="handlerDown(item)" :span="24" style="margin-bottom: 10px;"><a-button type="primary" size="small" >下载</a-button></div> -->
<a-popover title="资源下载">
<template slot="content">
<a
style="display: block;margin-bottom:15px"
v-for="j in item.videoList"
:href="j.path"
:key="j.id"
>
{{ j.name }}
</a>
</template>
<div :span="24" style="margin-bottom: 10px;">
<a-button type="primary" size="small">下载</a-button>
</div>
</a-popover>
<div @click="handlerPreview(item)" :span="24">
<a-button type="danger" size="small">预览</a-button>
</div>
</div>
</div>
</a-card>
@ -32,7 +53,6 @@
<template v-else>
<a-empty style="margin: 30px 0;" />
</template>
</a-card>
</template>
@ -54,24 +74,27 @@ export default {
pageNum: 1
},
queryParam: {
name: '', //
trainWay: ''
classify: ''
},
queryOptions: [
{ type: 'select-dic-tree', placeholder: '课程类别', key: 'trainWay', options: [] }
{ type: 'select-dic-tree', placeholder: '课件类别', key: 'classify', options: [] }
]
}
},
created () {
this.dictionaryDropDown()
},
mounted () {
this.dictionaryDropDown()
this.getList()
},
methods: {
//
dictionaryDropDown () {
dictionaryDropDown({ dictionaryCode: '0009' }).then(res => {
this.queryOptions[0].options = dictToTree(res.data, [], 0)
this.loading = false
})
},
getList () {
gerMyresource(this.params).then(res => {
console.log('>>>>>>', res)
gerMyresource({ ...this.params, ...this.queryParam }).then(res => {
this.dataList = res.rows
this.total = res.total
})
@ -83,24 +106,18 @@ export default {
this.getList()
})
},
handlerDown () {
handlerDown () {},
handlerPreview (data) {
this.$router.push({
path: '/course/CoursewarePreview',
query: { coursewareId: data.id, courseId: data.courseId, types: 'self', isOther: 1 }
})
},
handlerPreview () {},
handleRefresh () {
this.getList()
},
//
dictionaryDropDown () {
dictionaryDropDown({ dictionaryCode: '0006' }).then((res) => {
this.queryOptions[1].options = dictToTree(res.data, [], 0)
this.loading = false
})
}
}
}
</script>
<style lang="less">
</style>
<style lang="less"></style>

View File

@ -32,14 +32,23 @@
</a-radio-group>
</a-form-model-item>
</a-col>
</a-row>
<a-row :gutter="16">
<a-col :span="12">
<a-form-model-item ref="isCalculate" label="是否计算学时" prop="isCalculate">
<a-radio-group v-model="form.isCalculate">
<a-radio :value="1"></a-radio>
<a-radio :value="0"></a-radio>
<a-radio :value="1" @click="isCalculateFunc(1)"></a-radio>
<a-radio :value="0" @click="isCalculateFunc(0)"></a-radio>
</a-radio-group>
</a-form-model-item>
</a-col>
<div v-if="classHourShow">
<a-col :span="12" >
<a-form-model-item ref="classHour" label="学时" prop="classHour" >
<a-input v-model="form.classHour" />
</a-form-model-item>
</a-col>
</div>
</a-row>
<a-row :gutter="16">
<a-col :span="12">
@ -136,7 +145,8 @@ export default {
rangeId: 0,
rangeName: '',
isTop: 0,
isCalculate: 0,
isCalculate: 1,
classHour: 0,
isNowPublish: false,
publishTime: '',
type: 1,
@ -144,11 +154,13 @@ export default {
},
fileList: [],
timeShow: true,
classHourShow: true,
rules: {
title: [{ required: true, message: '请输入公告标题', trigger: 'blur' }],
rangeName: [{ required: true, message: '请选择发布范围', trigger: 'blur' }],
isTop: [{ required: true, message: '请选择是否置顶', trigger: 'change' }],
isCalculate: [{ required: true, message: '请选择是否计算学时', trigger: 'change' }],
classHour: [{ required: true, message: '请填写学时', trigger: 'change' }],
isNowPublish: [{ required: true, message: '请选择即时发布', trigger: 'change' }],
publishTime: [{ required: true, message: '请选择发布时间', trigger: 'change' }],
type: [{ required: true, message: '请选择发布类型', trigger: 'change' }],
@ -209,6 +221,9 @@ export default {
},
onChangeNow(checked) {
this.timeShow = !checked
},
isCalculateFunc(type) {
this.classHourShow = type === 1
}
}
}

View File

@ -177,6 +177,20 @@
</a-form>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :md="12" :sm="24">
<a-form :form="form">
<a-form-item
label="年度计划学时"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
has-feedback
>
<a-input placeholder="请输入年度计划学时" v-decorator="['planClassHour']" />
</a-form-item>
</a-form>
</a-col>
</a-row>
<a-divider orientation="left">上传身份证</a-divider>
<a-row :gutter="24">
@ -330,7 +344,8 @@
workType: data.workType ? parseInt(data.workType) : undefined,
degreeId: data.degreeId,
orgId: data.orgId,
orgName: data.orgName
orgName: data.orgName,
planClassHour: data.planClassHour
}
)
//

View File

@ -27,7 +27,7 @@
<a-button type="primary" icon="search" @click="$refs.table.refresh(true)">查询</a-button>
<a-button icon="redo" @click="() => (queryParam = {})">重置</a-button>
</a-space>
<br/>
<a-space class="table-operator" direction="horizontal">
<a-button v-if="hasPerm(power.add)" type="primary" icon="plus" @click="handledCreate">新增项目</a-button>
</a-space>