提交 61ba965e authored 作者: 王诒正's avatar 王诒正

Merge branch 'v3.1' into 'master'

V3.1 See merge request wangyizheng/x-operation-web!1
import httpRequest from '@/utils/axios'
// 获取案例成绩记录
export function caseRankRecords(params = {}) {
var headers = {
'Content-Type': 'application/json'
}
return httpRequest.get('/api/opera/v3/admin/training/case-rank-records', { params }, { headers })
}
// 获取案例训练排行榜
export function caseRanks(params = {}) {
var headers = {
'Content-Type': 'application/json'
}
return httpRequest.get('/api/opera/v3/admin/training/rank/case-training', { params }, { headers })
}
// 同步案例排行榜中用户的数据
export function syncCaseRankRecords(data = {}) {
var headers = {
'Content-Type': 'application/json'
}
return httpRequest.put('/api/opera/v3/admin/training/rank/sync/case-rank-records', data, { headers })
}
// 刷新排行榜
export function refreshCaseRank(data = {}) {
var headers = {
'Content-Type': 'application/json'
}
return httpRequest.post('/api/opera/v3/admin/training/refresh-case-rank', data, { headers })
}
...@@ -49,6 +49,23 @@ export default { ...@@ -49,6 +49,23 @@ export default {
title: '用户使用配置管理', title: '用户使用配置管理',
icon: '', icon: '',
path: '/training/useruseconfigs' path: '/training/useruseconfigs'
},
{
title: '统计管理',
icon: '',
path: '/training/statistics',
children: [
{
title: '成绩记录',
icon: '',
path: '/training/case-rank-records'
},
{
title: '成绩排行榜',
icon: '',
path: '/training/case-ranks'
}
]
} }
// { // {
// title: '案例背景编辑[一期]', // title: '案例背景编辑[一期]',
......
...@@ -143,6 +143,12 @@ ...@@ -143,6 +143,12 @@
<div> <div>
<span><strong>产品信息:</strong></span><span>{{ production.name }}</span> <span><strong>产品信息:</strong></span><span>{{ production.name }}</span>
</div> </div>
<div>
<span><strong>类型:</strong></span><span>{{ production.show_type }}</span>
</div>
<div>
<span><strong>输入提示:</strong></span><span>{{ production.show_info }}</span>
</div>
<div class="bottom clearfix"> <div class="bottom clearfix">
<span><strong>关键词配置</strong></span> <span><strong>关键词配置</strong></span>
<div v-if="production.keywords" v-for="(keyword, i) in production.keywords" :key="i"> <div v-if="production.keywords" v-for="(keyword, i) in production.keywords" :key="i">
...@@ -161,6 +167,12 @@ ...@@ -161,6 +167,12 @@
<div> <div>
<span><strong>产品信息:</strong></span><span>{{ production.name }}</span> <span><strong>产品信息:</strong></span><span>{{ production.name }}</span>
</div> </div>
<div>
<span><strong>类型:</strong></span><span>{{ production.show_type }}</span>
</div>
<div>
<span><strong>输入提示:</strong></span><span>{{ production.show_info }}</span>
</div>
<div class="bottom clearfix"> <div class="bottom clearfix">
<span><strong>关键词配置</strong></span> <span><strong>关键词配置</strong></span>
<div v-if="production.keywords" v-for="(keyword, i) in production.keywords" :key="i"> <div v-if="production.keywords" v-for="(keyword, i) in production.keywords" :key="i">
...@@ -179,6 +191,12 @@ ...@@ -179,6 +191,12 @@
<div> <div>
<span><strong>产品信息:</strong></span><span>{{ production.name }}</span> <span><strong>产品信息:</strong></span><span>{{ production.name }}</span>
</div> </div>
<div>
<span><strong>类型:</strong></span><span>{{ production.show_type }}</span>
</div>
<div>
<span><strong>输入提示:</strong></span><span>{{ production.show_info }}</span>
</div>
<div class="bottom clearfix"> <div class="bottom clearfix">
<span><strong>关键词配置</strong></span> <span><strong>关键词配置</strong></span>
<div v-if="production.keywords" v-for="(keyword, i) in production.keywords" :key="i"> <div v-if="production.keywords" v-for="(keyword, i) in production.keywords" :key="i">
...@@ -268,6 +286,25 @@ ...@@ -268,6 +286,25 @@
<el-input size="mini" v-model="item.name" placeholder="请输入内容" style="width: 50%"></el-input> <el-input size="mini" v-model="item.name" placeholder="请输入内容" style="width: 50%"></el-input>
</span> </span>
</div> </div>
<div style="margin-left: 5%; margin-top: 2%; margin-right: 5%">
<span>
类别:
<el-select size="mini" v-model="item.show_type" placeholder="请选择">
<el-option
v-for="(showTypeItem, showTypeItemIndex) in show_types"
:key="'show_type_' + showTypeItemIndex"
:label="showTypeItem"
:value="showTypeItem">
</el-option>
</el-select>
</span>
</div>
<div style=" margin-top: 2%; margin-right: 5%">
<span>
输入提示:
<el-input size="mini" v-model="item.show_info" placeholder="请输入内容" style="width: 50%"></el-input>
</span>
</div>
<div v-for="(keywrod, index1) in item.keywords" :key="'production-'+index1" style="margin-top: 2%"> <div v-for="(keywrod, index1) in item.keywords" :key="'production-'+index1" style="margin-top: 2%">
<el-card> <el-card>
<span> <span>
...@@ -297,6 +334,25 @@ ...@@ -297,6 +334,25 @@
<el-input size="mini" v-model="fundItem.name" placeholder="请输入内容" style="width: 50%"></el-input> <el-input size="mini" v-model="fundItem.name" placeholder="请输入内容" style="width: 50%"></el-input>
</span> </span>
</div> </div>
<div style="margin-left: 5%; margin-top: 2%; margin-right: 5%">
<span>
类别:
<el-select size="mini" v-model="fundItem.show_type" placeholder="请选择">
<el-option
v-for="(showTypeItem, showTypeItemIndex) in show_types"
:key="'show_type_' + showTypeItemIndex"
:label="showTypeItem"
:value="showTypeItem">
</el-option>
</el-select>
</span>
</div>
<div style=" margin-top: 2%; margin-right: 5%">
<span>
输入提示:
<el-input size="mini" v-model="fundItem.show_info" placeholder="请输入内容" style="width: 50%"></el-input>
</span>
</div>
<div v-for="(fundKeywrod, fundIndex1) in fundItem.keywords" :key="'fund-'+fundIndex1" style="margin-top: 2%"> <div v-for="(fundKeywrod, fundIndex1) in fundItem.keywords" :key="'fund-'+fundIndex1" style="margin-top: 2%">
<el-card> <el-card>
<span> <span>
...@@ -326,6 +382,25 @@ ...@@ -326,6 +382,25 @@
<el-input size="mini" v-model="investItem.name" placeholder="请输入内容" style="width: 50%"></el-input> <el-input size="mini" v-model="investItem.name" placeholder="请输入内容" style="width: 50%"></el-input>
</span> </span>
</div> </div>
<div style="margin-left: 5%; margin-top: 2%; margin-right: 5%">
<span>
类别:
<el-select size="mini" v-model="investItem.show_type" placeholder="请选择">
<el-option
v-for="(showTypeItem, showTypeItemIndex) in show_types"
:key="'show_type_' + showTypeItemIndex"
:label="showTypeItem"
:value="showTypeItem">
</el-option>
</el-select>
</span>
</div>
<div style=" margin-top: 2%; margin-right: 5%">
<span>
输入提示:
<el-input size="mini" v-model="investItem.show_info" placeholder="请输入内容" style="width: 50%"></el-input>
</span>
</div>
<div v-for="(investKeyword, investIndex1) in investItem.keywords" :key="'invest-'+investIndex1" style="margin-top: 2%"> <div v-for="(investKeyword, investIndex1) in investItem.keywords" :key="'invest-'+investIndex1" style="margin-top: 2%">
<el-card> <el-card>
<span> <span>
...@@ -390,6 +465,7 @@ export default { ...@@ -390,6 +465,7 @@ export default {
investDialogFormVisible: false, investDialogFormVisible: false,
drawer: false, drawer: false,
direction: 'rtl', direction: 'rtl',
show_types: ['input', 'textarea'],
addForm: { addForm: {
name: '', name: '',
level: '', level: '',
...@@ -399,6 +475,8 @@ export default { ...@@ -399,6 +475,8 @@ export default {
production_detail: [ production_detail: [
{ {
name: '', name: '',
show_type: 'input',
show_info: '',
keywords: [ keywords: [
{ {
name: '', name: '',
...@@ -410,6 +488,8 @@ export default { ...@@ -410,6 +488,8 @@ export default {
fund_detail: [ fund_detail: [
{ {
name: '', name: '',
show_type: 'input',
show_info: '',
keywords: [ keywords: [
{ {
name: '', name: '',
...@@ -421,6 +501,8 @@ export default { ...@@ -421,6 +501,8 @@ export default {
invest_detail: [ invest_detail: [
{ {
name: '', name: '',
show_type: 'input',
show_info: '',
keywords: [ keywords: [
{ {
name: '', name: '',
...@@ -552,6 +634,8 @@ export default { ...@@ -552,6 +634,8 @@ export default {
production_detail: [ production_detail: [
{ {
name: '', name: '',
show_type: 'input',
show_info: '',
keywords: [ keywords: [
{ {
name: '', name: '',
...@@ -563,6 +647,8 @@ export default { ...@@ -563,6 +647,8 @@ export default {
fund_detail: [ fund_detail: [
{ {
name: '', name: '',
show_type: 'input',
show_info: '',
keywords: [ keywords: [
{ {
name: '', name: '',
...@@ -574,6 +660,8 @@ export default { ...@@ -574,6 +660,8 @@ export default {
invest_detail: [ invest_detail: [
{ {
name: '', name: '',
show_type: 'input',
show_info: '',
keywords: [ keywords: [
{ {
name: '', name: '',
...@@ -703,13 +791,13 @@ export default { ...@@ -703,13 +791,13 @@ export default {
addNames(detailName, index) { addNames(detailName, index) {
switch (detailName) { switch (detailName) {
case 'production_detail': case 'production_detail':
this.addForm.production_detail.push({ name: '', keywords: [{ name: '', score: 0 }] }) this.addForm.production_detail.push({ name: '', show_type: 'input', show_info: '', keywords: [{ name: '', score: 0 }] })
break break
case 'fund_detail': case 'fund_detail':
this.addForm.fund_detail.push({ name: '', keywords: [{ name: '', score: 0 }] }) this.addForm.fund_detail.push({ name: '', show_type: 'input', show_info: '', keywords: [{ name: '', score: 0 }] })
break break
case 'invest_detail': case 'invest_detail':
this.addForm.invest_detail.push({ name: '', keywords: [{ name: '', score: 0 }] }) this.addForm.invest_detail.push({ name: '', show_type: 'input', show_info: '', keywords: [{ name: '', score: 0 }] })
break break
} }
}, },
......
...@@ -85,6 +85,23 @@ ...@@ -85,6 +85,23 @@
<span> <span>
二级标题: 二级标题:
<el-input size="mini" v-model="item.name" placeholder="请输入内容" style="width: 50%"></el-input> <el-input size="mini" v-model="item.name" placeholder="请输入内容" style="width: 50%"></el-input>
<span style="margin-left: 2%">
类别:
<el-select size="mini" v-model="item.show_type" placeholder="请选择">
<el-option
v-for="(showTypeItem, showTypeItemIndex) in show_types"
:key="'show_type_' + showTypeItemIndex"
:label="showTypeItem"
:value="showTypeItem">
</el-option>
</el-select>
</span>
</span>
</div>
<div style="margin-top: 2%; margin-right: 5%">
<span>
输入提示:
<el-input size="mini" v-model="item.show_info" placeholder="请输入内容" style="width: 80%"></el-input>
</span> </span>
</div> </div>
<div v-for="(keywrod, index1) in item.keywords" :key="'production-'+index1" style="margin-top: 2%"> <div v-for="(keywrod, index1) in item.keywords" :key="'production-'+index1" style="margin-top: 2%">
...@@ -115,6 +132,23 @@ ...@@ -115,6 +132,23 @@
二级标题: 二级标题:
<el-input size="mini" v-model="fundItem.name" placeholder="请输入内容" style="width: 50%"></el-input> <el-input size="mini" v-model="fundItem.name" placeholder="请输入内容" style="width: 50%"></el-input>
</span> </span>
<span style="margin-left: 2%">
类别:
<el-select size="mini" v-model="fundItem.show_type" placeholder="请选择">
<el-option
v-for="(showTypeItem, showTypeItemIndex) in show_types"
:key="'show_type_' + showTypeItemIndex"
:label="showTypeItem"
:value="showTypeItem">
</el-option>
</el-select>
</span>
</div>
<div style="margin-top: 2%; margin-right: 5%">
<span>
输入提示:
<el-input size="mini" v-model="fundItem.show_info" placeholder="请输入内容" style="width: 80%"></el-input>
</span>
</div> </div>
<div v-for="(fundKeywrod, fundIndex1) in fundItem.keywords" :key="'fund-'+fundIndex1" style="margin-top: 2%"> <div v-for="(fundKeywrod, fundIndex1) in fundItem.keywords" :key="'fund-'+fundIndex1" style="margin-top: 2%">
<el-card> <el-card>
...@@ -143,6 +177,23 @@ ...@@ -143,6 +177,23 @@
<span> <span>
二级标题: 二级标题:
<el-input size="mini" v-model="investItem.name" placeholder="请输入内容" style="width: 50%"></el-input> <el-input size="mini" v-model="investItem.name" placeholder="请输入内容" style="width: 50%"></el-input>
<span style="margin-left: 2%">
类别:
<el-select size="mini" v-model="investItem.show_type" placeholder="请选择">
<el-option
v-for="(showTypeItem, showTypeItemIndex) in show_types"
:key="'show_type_' + showTypeItemIndex"
:label="showTypeItem"
:value="showTypeItem">
</el-option>
</el-select>
</span>
</span>
</div>
<div style="margin-top: 2%; margin-right: 5%">
<span>
输入提示:
<el-input size="mini" v-model="investItem.show_info" placeholder="请输入内容" style="width: 80%"></el-input>
</span> </span>
</div> </div>
<div v-for="(investKeyword, investIndex1) in investItem.keywords" :key="'invest-'+investIndex1" style="margin-top: 2%"> <div v-for="(investKeyword, investIndex1) in investItem.keywords" :key="'invest-'+investIndex1" style="margin-top: 2%">
...@@ -186,6 +237,7 @@ export default { ...@@ -186,6 +237,7 @@ export default {
visible: false, visible: false,
accessoryFiles: [], accessoryFiles: [],
urlFiles: [], urlFiles: [],
show_types: ['input', 'textarea'],
updateForm: { updateForm: {
name: '', name: '',
level: '', level: '',
...@@ -195,6 +247,8 @@ export default { ...@@ -195,6 +247,8 @@ export default {
production_detail: [ production_detail: [
{ {
name: '', name: '',
show_type: 'input',
show_info: '',
keywords: [ keywords: [
{ {
name: '', name: '',
...@@ -206,6 +260,8 @@ export default { ...@@ -206,6 +260,8 @@ export default {
fund_detail: [ fund_detail: [
{ {
name: '', name: '',
show_type: 'input',
show_info: '',
keywords: [ keywords: [
{ {
name: '', name: '',
...@@ -217,6 +273,8 @@ export default { ...@@ -217,6 +273,8 @@ export default {
invest_detail: [ invest_detail: [
{ {
name: '', name: '',
show_type: 'input',
show_info: '',
keywords: [ keywords: [
{ {
name: '', name: '',
...@@ -366,13 +424,13 @@ export default { ...@@ -366,13 +424,13 @@ export default {
addNames(detailName, index) { addNames(detailName, index) {
switch (detailName) { switch (detailName) {
case 'production_detail': case 'production_detail':
this.updateForm.production_detail.push({ name: '', keywords: [{ name: '', score: 0 }] }) this.updateForm.production_detail.push({ name: '', show_type: 'input', show_info: '', keywords: [{ name: '', score: 0 }] })
break break
case 'fund_detail': case 'fund_detail':
this.updateForm.fund_detail.push({ name: '', keywords: [{ name: '', score: 0 }] }) this.updateForm.fund_detail.push({ name: '', show_type: 'input', show_info: '', keywords: [{ name: '', score: 0 }] })
break break
case 'invest_detail': case 'invest_detail':
this.updateForm.invest_detail.push({ name: '', keywords: [{ name: '', score: 0 }] }) this.updateForm.invest_detail.push({ name: '', show_type: 'input', show_info: '', keywords: [{ name: '', score: 0 }] })
break break
} }
}, },
......
<template>
<div>
<div>
<el-card class="box-card">
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>成绩记录</el-breadcrumb-item>
</el-breadcrumb>
</el-card>
</div>
<div>
<el-card class="box-card">
<div>
<el-input placeholder="请输入sso_Id" prefix-icon="el-icon-search" v-model="sso_id" size="mini" style="width: 20%"></el-input>
<el-input placeholder="请输入用户真实姓名" prefix-icon="el-icon-search" v-model="username" size="mini" style="width: 20%"></el-input>
<el-input placeholder="请输入学校" prefix-icon="el-icon-search" v-model="school" size="mini" style="width: 20%"></el-input>
<el-input placeholder="请输入案例id" prefix-icon="el-icon-search" v-model="case_id" size="mini" style="width: 20%"></el-input>
<el-date-picker
size="mini"
v-model="date"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd HH:mm:ss"
>
</el-date-picker>
<el-button size="mini" icon="el-icon-search" @click="list({ page: currentPage, limit: limit })" style="margin-left: 2%">搜 索</el-button>
<el-button type="primary" size="mini" icon="el-icon-refresh" @click="refresh">刷 新</el-button>
<el-button type="primary" size="mini" icon="el-icon-refresh" @click="dialogFormVisible = true">同步学员记录</el-button>
</div>
</el-card>
</div>
<div>
<el-card class="box-card">
<el-table
:data="tableData"
border
stripe
size="mini"
class="table-list"
style="width: 100%">
<el-table-column
fixed
prop="id"
label="ID">
</el-table-column>
<el-table-column
prop="sso_id"
label="sso_id">
</el-table-column>
<el-table-column
prop="username"
label="用户真实姓名">
</el-table-column>
<el-table-column
prop="school"
label="学校">
</el-table-column>
<el-table-column
prop="case_id"
label="案例id">
</el-table-column>
<el-table-column
prop="score"
label="分数">
</el-table-column>
<el-table-column label="创建时间">
<template slot-scope="scope">
<i class="el-icon-time"></i>
<span style="margin-left: 10px">{{ scope.row.created_at }}</span>
</template>
</el-table-column>
<el-table-column label="更新时间">
<template slot-scope="scope">
<i class="el-icon-time"></i>
<span style="margin-left: 10px">{{ scope.row.updated_at }}</span>
</template>
</el-table-column>
</el-table>
<div class="block">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 30, 50, 100]"
:page-size="limit"
layout="total, sizes, prev, pager, next, jumper"
:total="totalPage">
</el-pagination>
</div>
</el-card>
</div>
<div>
<el-dialog title="同步同步学员记录" :visible.sync="dialogFormVisible">
<el-form size="mini" :model="refreshFromData">
<el-form-item label="sso_id" :label-width="formLabelWidth">
<el-input v-model="refreshFromData.sso_id" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="用户真实姓名" :label-width="formLabelWidth">
<el-input v-model="refreshFromData.realname" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="学校" :label-width="formLabelWidth">
<el-input v-model="refreshFromData.school" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="dialogFormVisible = false">取 消</el-button>
<el-button size="mini" type="primary" @click="refreshMemberRecord">确 定</el-button>
</div>
</el-dialog>
</div>
</div>
</template>
<script>
import * as statisticsApi from '@/api/statistics-v3'
export default {
name: 'case_rank_records',
data() {
return {
currentPage: 1,
totalPage: 0,
limit: 10,
sso_id: '',
username: '',
school: '',
case_id: '',
date: [],
tableData: [],
dialogFormVisible: false,
formLabelWidth: '100px',
refreshFromData: {
sso_id: '',
school: '',
realname: ''
}
}
},
mounted() {
this.list()
},
methods: {
handleSizeChange(val) {
this.list({ page: this.currentPage, limit: val })
},
handleCurrentChange(val) {
this.list({ page: val, limit: this.limit })
},
list(params = { page: this.currentPage, limit: this.limit }) {
var quryData = {}
if (this.date.length > 0) {
quryData.start_time = this.date[0]
quryData.end_time = this.date[1]
}
if (this.sso_id) {
quryData.sso_id = this.sso_id
}
if (this.case_id) {
quryData.case_id = this.case_id
}
if (this.username) {
quryData.username = this.username
}
if (this.school) {
quryData.school = this.school
}
quryData.page = params.page
quryData.limit = params.limit
statisticsApi.caseRankRecords(quryData).then(res => {
const rLoading = this.openLoading('.table-list')
if (res.code !== 0) {
this.$message.error(res.message)
rLoading.close()
return false
}
this.tableData = res.data.data
this.currentPage = res.data.current_page
this.totalPage = res.data.total
rLoading.close()
return true
})
},
refresh() {
this.sso_id = ''
this.case_id = ''
this.username = ''
this.school = ''
this.date = []
this.list({ page: 1, limit: this.limit })
},
refreshMemberRecord() {
statisticsApi.syncCaseRankRecords(this.refreshFromData).then(res => {
if (res.code !== 0) {
this.$message.error(res.message)
return false
}
this.dialogFormVisible = false
this.$message.success(res.message)
this.list({ page: this.currentPage, limit: this.limit })
return true
})
}
}
}
</script>
<style>
</style>
<template>
<div>
<div>
<el-card class="box-card">
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>排行榜</el-breadcrumb-item>
</el-breadcrumb>
</el-card>
</div>
<div>
<el-card class="box-card">
<el-select size="mini" v-model="type" @change="checkType" placeholder="请选择分类">
<el-option
v-for="typeItem in typeList"
:key="typeItem.key"
:label="typeItem.label"
:value="typeItem.key"
>
</el-option>
</el-select>
<el-input v-if="schoolHidden === false" placeholder="请输入学校" prefix-icon="el-icon-search" v-model="school" size="mini" style="width: 20%"></el-input>
<el-input v-if="ssoIdHidden === false" placeholder="请输入sso_id" prefix-icon="el-icon-search" v-model="sso_id" size="mini" style="width: 20%"></el-input>
<el-button size="mini" icon="el-icon-search" @click="list({ start, stop })" style="margin-left: 2%">搜 索</el-button>
<el-button type="primary" size="mini" icon="el-icon-refresh" @click="refresh">刷 新</el-button>
<el-button type="primary" size="mini" icon="el-icon-refresh" @click="refreshCaseRank()">同步全局排行榜数据</el-button>
</el-card>
</div>
<div>
<el-card class="box-card">
<el-table
:data="tableData"
border
stripe
size="mini"
class="table-list"
style="width: 100%">
<el-table-column
fixed
prop="rank"
label="排名">
</el-table-column>
<el-table-column
prop="sso_id"
label="sso_id">
</el-table-column>
<el-table-column
prop="username"
label="用户真实姓名">
</el-table-column>
<el-table-column label="学校" v-if="type === 10 || type === 11 || type === 20 || type === 21">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.school }}</span>
</template>
</el-table-column>
<el-table-column label="分数" v-if="type === 10 || type === 20 || type === 30">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.score }}</span>
</template>
</el-table-column>
<el-table-column label="次数" v-if="type === 11 || type === 21 || type === 31">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.times }}</span>
</template>
</el-table-column>
<el-table-column label="日期" v-if="type === 10 || type === 11 || type === 20 || type === 21 || type === 30">
<template slot-scope="scope">
<i class="el-icon-time"></i>
<span style="margin-left: 10px">{{ scope.row.created_at }}</span>
</template>
</el-table-column>
<el-table-column label="日期" v-if="type === 31">
<template slot-scope="scope">
<i class="el-icon-time"></i>
<span style="margin-left: 10px">{{ formateDataIndex(scope.row.date_index) }}</span>
</template>
</el-table-column>
</el-table>
</el-card>
</div>
</div>
</template>
<script>
import * as statisticsApi from '@/api/statistics-v3'
import * as common from '@/utils/common'
export default {
name: 'case_ranks',
data() {
return {
type: 10,
school: '',
sso_id: '',
typeList: [
{ key: 10, label: '全局-分数排行榜' },
{ key: 11, label: '全局-次数排行榜' },
{ key: 20, label: '校内-分数排行榜' },
{ key: 21, label: '校内-次数排行榜' },
{ key: 30, label: '个人-分数排行榜' },
{ key: 31, label: '个人-次数排行榜' }
],
schoolHidden: true,
ssoIdHidden: true,
start: 0,
stop: 9,
tableData: []
}
},
mounted() {
this.list({ start: this.start, stop: this.stop })
},
methods: {
checkType(val) {
this.tableData = []
if (val === 10 || val === 11) {
this.ssoIdHidden = true
this.schoolHidden = true
this.sso_id = ''
this.school = ''
}
if (val === 20 || val === 21) {
this.schoolHidden = false
this.ssoIdHidden = true
this.sso_id = ''
}
if (val === 30 || val === 31) {
this.ssoIdHidden = false
this.schoolHidden = true
this.school = ''
}
},
list(params = { start: this.start, stop: this.stop }) {
var queryData = {}
queryData.type = this.type
queryData.start = params.start
queryData.stop = params.stop
if (this.type === 20 || this.type === 21) {
queryData.school = this.school
}
if (this.type === 30 || this.type === 31) {
queryData.sso_id = this.sso_id
}
statisticsApi.caseRanks(queryData).then(res => {
const rLoading = this.openLoading('.table-list')
if (res.code !== 0) {
this.$message.error(res.message)
rLoading.close()
return false
}
if (!(res.data instanceof Array)) {
this.tableData = []
rLoading.close()
return true
}
this.tableData = res.data
rLoading.close()
return true
})
},
formateDataIndex(dateIndex) {
return common.timestampToTime(dateIndex)
},
refresh() {
this.type = 10
this.tableData = []
this.sso_id = ''
this.school = ''
this.ssoIdHidden = true
this.schoolHidden = true
this.list({ start: this.start, stop: this.stop })
},
refreshCaseRank() {
statisticsApi.refreshCaseRank().then(res => {
if (res.code !== 0) {
this.$message.error(res.message)
return false
}
this.$message.success('同步全局排行榜数据成功')
this.refresh()
return true
})
}
}
}
</script>
<style>
</style>
...@@ -24,7 +24,10 @@ const userGroup = [ ...@@ -24,7 +24,10 @@ const userGroup = [
{ path: '/training/reachschemes', name: 'reach_schemes', component: () => import('@/pages/v2/reachschemes/index') }, { path: '/training/reachschemes', name: 'reach_schemes', component: () => import('@/pages/v2/reachschemes/index') },
{ path: '/training/reachschemes/update', name: 'reach_schemes_update', component: () => import('@/pages/v2/reachschemes/update') }, { path: '/training/reachschemes/update', name: 'reach_schemes_update', component: () => import('@/pages/v2/reachschemes/update') },
{ path: '/training/useruseconfigs', name: 'useruseconfigs', component: () => import('@/pages/v2/useruseconfigs/index') }, { path: '/training/useruseconfigs', name: 'useruseconfigs', component: () => import('@/pages/v2/useruseconfigs/index') },
{ path: '/training/useruseconfigs/update', name: 'useruseconfigs_update', component: () => import('@/pages/v2/useruseconfigs/update') } { path: '/training/useruseconfigs/update', name: 'useruseconfigs_update', component: () => import('@/pages/v2/useruseconfigs/update') },
/* v3.1 */
{ path: '/training/case-rank-records', name: 'case_rank_records', component: () => import('@/pages/v3/statistics/case_rank_records') },
{ path: '/training/case-ranks', name: 'case_rank', component: () => import('@/pages/v3/statistics/case_ranks') }
] ]
export default [ export default [
......
export function timestampToTime(timestamp) {
var date = new Date(timestamp * 1000)
var Y = date.getFullYear() + '-'
var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'
var D = date.getDate() + ' '
var h = ''
if (date.getHours() < 10) {
h = '0' + date.getHours() + ':'
} else {
h = date.getHours() + ':'
}
var m = ''
if (date.getMinutes() < 10) {
m = '0' + date.getMinutes() + ':'
} else {
m = date.getMinutes() + ':'
}
var s = ''
if (date.getSeconds() < 10) {
s = '0' + date.getSeconds()
} else {
s = date.getSeconds()
}
return Y + M + D + h + m + s
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论