业务编写

main
qinzhenpen 2 years ago
parent 6bce75a4d5
commit 1b859845de

Binary file not shown.

@ -1,10 +1,11 @@
import request from '@/utils/request'
// 登录方法
export function login(username, passwordEncode) {
export function login(username, passwordEncode ,TOKEN) {
const data = {
username,
passwordEncode,
TOKEN
}
return request({
url: '/api/sysUser/login',

@ -0,0 +1,9 @@
import request from '@/utils/request'
// 获取实训结束的成员列表
export const getMemberList = (data) => {
return request({
url: '/api/report/getReportDtos',
method: 'get',
params:data
})
}

@ -31,6 +31,14 @@ export const getReport = (id) => {
params: id
})
}
// 获取结束学生上传的实验报告
export const getReportById = (id) => {
return request({
url: '/api/report/getReportById',
method: 'get',
params: id
})
}
// 实验报告上传评分
export const uploadScore = (report) => {
return request({

@ -1 +1 @@
<svg t="1688354357249" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8715" data-spm-anchor-id="a313x.7781069.0.i17" width="200" height="200"><path d="M446.275089 956.340017c-3.76679 0-7.633864-0.199545-11.533684-0.649799l-273.066189-30.800493c-55.399751-6.250354-98.800213-54.667064-98.800213-110.199845l0-685.533288c0-57.300031 47.89994-101.43318 106.732883-94.132914l273.066189 33.099862c54.999638 6.650467 98.066503 55.150064 98.066503 110.400413l0 682.667008C540.741601 914.540006 499.241418 956.340017 446.275089 956.340017zM157.208485 102.540398c-15.366989 0-26.066679 10.933003-26.066679 26.616194l0 685.533288c0 20.632923 17.499559 40.033785 38.20002 42.366923l273.066189 30.800493c17.10047 1.833765 30.066783-9.533121 30.066783-26.666336L472.474798 178.523953c0-20.61655-17.400299-40.133046-38.000476-42.632983L161.408133 102.791108C159.974481 102.623285 158.574598 102.540398 157.208485 102.540398z" fill="#ffffff" p-id="8716" data-spm-anchor-id="a313x.7781069.0.i18" class="selected"></path><path d="M616.474446 956.140473c-17.133216 0-31.933293-12.867052-33.900088-30.300097-2.099824-18.733667 11.366885-35.633568 30.099529-37.749766l273.066189-30.816866c20.700461-2.333138 38.20002-21.732977 38.20002-42.366923l0-685.533288c0-8.316409-3.000334-15.550161-8.400321-20.35049-5.566786-4.916986-13.267165-7.033184-21.86703-6.01704l-273.066189 33.099862c-18.699897 2.366907-35.732829-11.067057-38.000476-29.783327-2.266623-18.699897 11.067057-35.716456 29.7997-37.983079l273.066189-33.099862c27.566846-3.499707 55.232952 4.883217 75.333756 22.683628 20.233833 17.949814 31.400151 43.316551 31.400151 71.450309l0 685.533288c0 55.533804-43.400462 103.950514-98.800213 110.199845L620.339474 955.923532C619.041922 956.073958 617.741299 956.140473 616.474446 956.140473z" fill="#ffffff" p-id="8717" data-spm-anchor-id="a313x.7781069.0.i16" class="selected"></path></svg>
<svg t="1691161359211" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2649" width="200" height="200"><path d="M175.726 934.787v-316.26c0-189.18 153.404-342.612 342.774-342.612s342.775 153.433 342.775 342.612v316.26h117.012c24.3 0 44 19.7 44 44s-19.7 44-44 44H44.747c-24.301 0-44-19.7-44-44s19.699-44 44-44h130.98z m367.588-520.804L374.237 692.332h135.221l-33.855 208.762L644.68 622.745H509.457l33.856-208.762h0.001z m259.29-305.76c15.875 9.237 21.299 29.622 12.156 45.488l-60.778 105.636-57.464-33.238 60.78-105.636c9.04-15.865 29.333-21.287 45.106-12.25h0.2zM518.4 30c19.892 0 35.966 14.962 35.966 33.539v119.693h-71.931V63.439C482.434 44.963 498.508 30 518.4 30h-0.001z m-284.003 78.223c15.773-9.138 36.065-3.716 45.208 12.05 0 0 0 0.1 0.1 0.1l60.78 105.636-57.465 33.237-60.78-105.636c-9.14-15.866-3.716-36.15 12.156-45.387h0.001zM26.44 316.985c9.041-15.867 29.334-21.39 45.208-12.252 0 0 0.1 0 0.1 0.101l105.283 61.052-33.152 57.638L38.595 362.37c-15.872-9.137-21.298-29.522-12.155-45.387z m984.12 0c9.143 15.864 3.717 36.249-12.155 45.486L893.12 423.423l-33.152-57.637 105.283-61.053c15.773-9.137 36.065-3.715 45.208 12.05 0 0.1 0.1 0.1 0.1 0.2v0.002z" fill="#FF473E" p-id="2650"></path></svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1 @@
<svg t="1691161812026" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5329" width="200" height="200"><path d="M512 0C227.555556 0 0 227.555556 0 512s227.555556 512 512 512 512-227.555556 512-512-227.555556-512-512-512z m45.511111 853.333333c-17.066667 11.377778-28.444444 17.066667-51.2 17.066667-17.066667 0-34.133333-5.688889-51.2-17.066667-17.066667-11.377778-22.755556-28.444444-22.755555-51.2s5.688889-34.133333 22.755555-51.2c11.377778-11.377778 28.444444-22.755556 51.2-22.755555s34.133333 5.688889 51.2 22.755555c11.377778 11.377778 22.755556 28.444444 22.755556 51.2s-11.377778 39.822222-22.755556 51.2z m176.355556-443.733333c-11.377778 22.755556-22.755556 39.822222-39.822223 51.2-17.066667 17.066667-39.822222 39.822222-79.644444 73.955556l-28.444444 28.444444c-5.688889 5.688889-11.377778 17.066667-17.066667 22.755556v17.066666c0 5.688889-5.688889 17.066667-5.688889 34.133334-5.688889 34.133333-22.755556 51.2-56.888889 51.2-17.066667 0-28.444444-5.688889-39.822222-17.066667-11.377778-11.377778-17.066667-28.444444-17.066667-45.511111 0-28.444444 5.688889-51.2 11.377778-68.266667 5.688889-17.066667 17.066667-34.133333 34.133333-51.2 11.377778-17.066667 34.133333-34.133333 56.888889-51.2 22.755556-17.066667 34.133333-28.444444 45.511111-39.822222s17.066667-17.066667 22.755556-28.444445c5.688889-11.377778 11.377778-22.755556 11.377778-34.133333 0-22.755556-11.377778-45.511111-28.444445-62.577778-17.066667-17.066667-45.511111-28.444444-73.955555-28.444444-45.511111-11.377778-73.955556 0-85.333334 17.066667-17.066667 17.066667-34.133333 45.511111-45.511111 79.644444-11.377778 34.133333-28.444444 51.2-62.577778 51.2-17.066667 0-34.133333-5.688889-45.511111-17.066667-11.377778-11.377778-17.066667-28.444444-17.066666-39.822222 0-28.444444 11.377778-62.577778 28.444444-91.022222s45.511111-56.888889 85.333333-79.644445c39.822222-22.755556 79.644444-28.444444 130.844445-28.444444 45.511111 0 85.333333 5.688889 119.466667 22.755556 34.133333 17.066667 62.577778 39.822222 79.644444 68.266666 22.755556 28.444444 34.133333 62.577778 34.133333 96.711111 0 28.444444-5.688889 51.2-17.066666 68.266667z" fill="#1296db" p-id="5330"></path></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

@ -0,0 +1 @@
<svg t="1691372698423" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4227" width="200" height="200"><path d="M772.245854 83.918049v860.16H80.920976V83.918049h691.324878m19.980487-79.921951H60.940488C27.87278 3.996098 0.999024 30.869854 0.999024 63.937561v900.120976c0 33.067707 26.873756 59.941463 59.941464 59.941463h731.285853c33.067707 0 59.941463-26.873756 59.941464-59.941463V63.937561c0-33.067707-26.873756-59.941463-59.941464-59.941463z" fill="" p-id="4228"></path><path d="M943.079024 221.783415v722.294634h-90.911219V221.783415h90.911219m19.980488-79.921952H832.187317c-33.067707 0-59.941463 26.873756-59.941463 59.941464v822.197073h190.813658c33.067707 0 59.941463-26.873756 59.941464-59.941463V201.802927c0-33.067707-26.873756-59.941463-59.941464-59.941464zM357.650732 223.781463v136.866342H220.78439V223.781463h136.866342m19.980488-79.921951H200.803902c-33.067707 0-59.941463 26.873756-59.941463 59.941464v176.827317c0 33.067707 26.873756 59.941463 59.941463 59.941463h176.827318c33.067707 0 59.941463-26.873756 59.941463-59.941463V203.800976c0-33.067707-26.873756-59.941463-59.941463-59.941464zM612.401951 222.782439h-98.903414c-22.078439 0-39.960976-17.882537-39.960976-39.960976s17.882537-39.960976 39.960976-39.960975h98.903414c22.078439 0 39.960976 17.882537 39.960976 39.960975s-17.882537 39.960976-39.960976 39.960976zM672.343415 439.570732H513.498537c-22.078439 0-39.960976-17.882537-39.960976-39.960976s17.882537-39.960976 39.960976-39.960976h158.844878c22.078439 0 39.960976 17.882537 39.960975 39.960976s-17.882537 39.960976-39.960975 39.960976zM542.470244 331.176585h-28.971707c-22.078439 0-39.960976-17.882537-39.960976-39.960975s17.882537-39.960976 39.960976-39.960976h28.971707c22.078439 0 39.960976 17.882537 39.960976 39.960976s-17.882537 39.960976-39.960976 39.960975zM208.296585 689.326829c-37.163707 0-67.434146-30.270439-67.434146-67.434146s30.270439-67.434146 67.434146-67.434146 67.434146 30.270439 67.434147 67.434146-30.270439 67.434146-67.434147 67.434146z m0-79.921951c-6.893268 0-12.487805 5.594537-12.487805 12.487805s5.594537 12.487805 12.487805 12.487805 12.487805-5.594537 12.487805-12.487805-5.594537-12.487805-12.487805-12.487805zM208.296585 884.136585c-37.163707 0-67.434146-30.270439-67.434146-67.434146s30.270439-67.434146 67.434146-67.434146 67.434146 30.270439 67.434147 67.434146-30.270439 67.434146-67.434147 67.434146z m0-79.921951c-6.893268 0-12.487805 5.594537-12.487805 12.487805s5.594537 12.487805 12.487805 12.487805 12.487805-5.594537 12.487805-12.487805-5.594537-12.487805-12.487805-12.487805zM671.34439 661.354146H386.622439c-22.078439 0-39.960976-17.882537-39.960976-39.960975s17.882537-39.960976 39.960976-39.960976h284.721951c22.078439 0 39.960976 17.882537 39.960976 39.960976s-17.882537 39.960976-39.960976 39.960975zM671.34439 859.160976H386.622439c-22.078439 0-39.960976-17.882537-39.960976-39.960976s17.882537-39.960976 39.960976-39.960976h284.721951c22.078439 0 39.960976 17.882537 39.960976 39.960976s-17.882537 39.960976-39.960976 39.960976z" fill="" p-id="4229"></path></svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 235 KiB

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

@ -190,10 +190,19 @@
}
},
mounted(){
const path = this.$route.path
setTimeout(() => {
//
if(path !== '/student/training/homepageage'){
localStorage.removeItem('status')
this.takeStash.memberId = this.currentId
this.getlist()
} else{
this.localStorageValue=localStorage.getItem('status')
this.takeStash.memberId = this.currentId
this.getlist()
}
}, 500);
},
@ -203,22 +212,30 @@
this.tableData = res?.data.list
this.total = res?.data.total
if(this.tableData == null || this.tableData.length == 0 || this.localStorageValue == 'FINISHED') {
clearInterval(this.timer)
if (this.timer) {
clearInterval(this.timer);
this.timer = null;
}
return
}
this.timer= setInterval(() => {
this.price(this.tableData)
if (!this.timer) {
this.timer = setInterval(() => {
this.price(this.tableData);
}, 5000);
}
})
},
price(data){
currentPosition.flashProfitAndLoss(data).then(res => {
if(res.code !== 200){
console.log(res.code , 'res.code')
clearInterval(this.timer)
this.getlist()
return
}
this.getlist()
this.tableData = res.data
})
},
modify(data){
@ -243,6 +260,8 @@
closingPosition(data){
this.list =data
this.colseDialogVisible = true
},
btn(){
currentPosition.closeTakeStash({stashId:this.list.stashId,memberId:this.list.memberId}).then(res => {
@ -250,8 +269,9 @@
if(res.code !== 200) return this.$modal.msgSuccess(res.msg);
this.$modal.msgSuccess(res.msg);
this.fatherMethodHandle()
this.getlist()
this.memberlist()
this.getlist()
})
},
},

@ -125,7 +125,20 @@ export const dynamicRoutes = [{
]
},
{
path: '/student/quotation',
component: Layout,
hidden: false,
permissions: ['system:user:edit'],
children: [
{
path: 'lowcore',
component: () => import('@/views/quotation/index.vue'),
name: 'lowcore',
meta: { title: '行情中心', icon: 'market', affix: true }
}
]
},
{
path: '/student/training',
component: Layout,
@ -136,7 +149,7 @@ export const dynamicRoutes = [{
path: 'List',
component: () => import('@/views/training/index'),
name: 'training',
meta: { title: '实训任务', icon: 'quest', affix: true }
meta: { title: '实训考核', icon: 'quest', affix: true }
},
{
path: 'homepageage',
@ -154,20 +167,7 @@ export const dynamicRoutes = [{
}
]
},
// {
// path: '/student/task',
// component: Layout,
// hidden: true,
// permissions: ['system:user:edit'],
// children: [
// {
// path: 'homepageage',
// component: () => import('@/views/task/index'),
// name: 'homepageage',
// meta: { title: '任务主页', affix: true, activeMenu: '/student/training/List' }
// }
// ]
// },
{
path: '/student/PracticeZone',
component: Layout,
@ -178,7 +178,7 @@ export const dynamicRoutes = [{
path: 'homepagege',
component: () => import('@/views/PracticeZone/index.vue'),
name: 'PracticeZone',
meta: { title: '练习专区', affix: true, icon: 'exercise' }
meta: { title: '交易中心', affix: true, icon: 'exercise' }
},
{
path: 'index',
@ -189,20 +189,7 @@ export const dynamicRoutes = [{
}
]
},
// {
// path: '/student/trade',
// component: Layout,
// hidden: true,
// permissions: ['system:user:edit'],
// children: [
// {
// path: 'index',
// component: () => import('@/views/trade/index.vue'),
// name: 'Index',
// meta: { title: '练习专区', affix: true, activeMenu: '/student/training/List' }
// }
// ]
// },
{
path: '/student/transactionRecords',
component: Layout,
@ -232,35 +219,44 @@ export const dynamicRoutes = [{
}
]
},
{
path: '/student/quotation',
path: '/student/teachingPlan',
component: Layout,
hidden: false,
permissions: ['system:user:edit'],
children: [
{
path: 'lowcore',
component: () => import('@/views/quotation/index.vue'),
name: 'lowcore',
meta: { title: '行情中心', icon: 'market', affix: true }
path: 'case',
component: () => import('@/views/teachingpan/index.vue'),
name: 'teachingPlan',
meta: { title: '实训教案', icon: 'teachingplan', affix: true }
}
]
},
// 实训结束的任务
{
path: '/student/teachingPlan',
path: '/student/trainingReport',
component: Layout,
hidden: false,
permissions: ['system:user:edit'],
children: [
{
path: 'case',
component: () => import('@/views/teachingpan/index.vue'),
name: 'teachingPlan',
meta: { title: '实训教案', icon: 'teachingplan', affix: true }
}
path: 'index',
component: () => import('@/views/tariningReport/index.vue'),
name: 'trainingReport',
meta: { title: '实验报告', icon: 'report', affix: true }
},
// 实验报告
{
path: 'repost',
component: () => import('@/views/task/report.vue'),
name: 'repost',
hidden: true,
meta: { title: '实验报告', affix: true, activeMenu: '/student/trainingReport/index' }
},
]
},
{
path: '/system/user-auth',
component: Layout,

@ -46,11 +46,13 @@ const user = {
actions: {
// 登录
Login({ commit }, userInfo) {
const username = userInfo.username
const passwordEncode = userInfo.passwordEncode
return new Promise((resolve, reject) => {
login(username, passwordEncode).then(res => {
const TOKEN = userInfo.token
return new Promise((resolve, reject) => {
login(username,passwordEncode,TOKEN).then(res => {
cookie.setToken(res.data.accessToken)
cookie.setname(res.data.name)
cookie.setschoolId(res.data.schoolId)
@ -93,6 +95,7 @@ const user = {
return new Promise((resolve, reject) => {
getMemberId(studentNumber).then(res => {
cookie.setmemberId(res.data)
// const user = res.user
commit('SET_MEMBERID', res.data)
resolve(res)
@ -126,7 +129,6 @@ const user = {
})
})
},
// 前端 登出
FedLogOut({ commit }) {
return new Promise(resolve => {
@ -143,6 +145,8 @@ const user = {
cookie.removememberId()
// 删除roleId
cookie.removeroleId()
// 删除username
cookie.removeusername()
resolve()
})
}

@ -14,9 +14,9 @@ axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: 'http://118.31.7.2:8801',
// baseURL: 'http://192.168.2.14:8801',
// baseURL:"http://192.168.2.17:8801",
baseURL: 'http://120.79.54.255:8801',
// baseURL: 'http://192.168.2.7:8801',
// baseURL:"http://192.168.2.6:8801",
// baseURL: process.env.VUE_APP_BASE_API,
// 超时
timeout: 200000

@ -1,3 +1,9 @@
export function isvalidUsername(str) {
// const valid_map = ['admin', 'test']
// return valid_map.indexOf(str.trim()) >= 0
return str.trim().length >= 3
}
/**
* @param {string} path
* @returns {Boolean}

@ -26,6 +26,7 @@
/>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
@ -65,6 +66,7 @@ export default {
<style lang='scss' scoped>
.app-container {
position: relative;
.overview-title {
position: absolute;
top: 20px;

@ -35,7 +35,7 @@
</el-form>
<el-table v-loading="loading" :data="transactionlist" style="width: 100%" >
<el-table-column prop="stuRank" label="排名" width="100" align="center" />
<el-table-column prop="trainingName" label="实训任务名称" width="100" align="center" />
<el-table-column prop="trainingName" label="实训任务名称" width="200" align="center" />
<el-table-column prop="classGrade" label="班级" width="140" align="center" />
<el-table-column prop="name" label="姓名" align="center" />
<el-table-column prop="studentNumber" label="学号" align="center" />

@ -1,5 +1,5 @@
<template>
<div class="login">
<div class="login" v-if="loadpage">
<div class="login-header">
<div class="login-centen">
<div class="logo">
@ -75,27 +75,44 @@
// import { getCodeImg } from "@/api/login";
import Cookies from "js-cookie";
import { encrypt, decrypt } from "@/utils/jsencrypt";
import { isvalidUsername } from "@/utils/validate";
import { getRouters } from "@/api/menu";
import { getroleId ,getname} from "@/utils/auth";
import { useWebSocket } from '@/utils/index'
export default {
name: "Login",
data() {
const validateUsername = (rule, value, callback) => {
if (!isvalidUsername(value)) {
callback(new Error("用户名不能为空"));
} else {
callback();
}
};
const validatePass = (rule, value, callback) => {
if (value.length < 3) {
callback(new Error("密码不能为空"));
} else {
callback();
}
};
return {
codeUrl: "",
loginForm: {
username: "",
password: "",
rememberMe: false,
token: "",
code: "",
uuid: "",
},
loadpage: true,
loginRules: {
username: [
{ required: true, trigger: "blur", message: "请输入您的账号" },
{ required: true, trigger: "blur", validator: validateUsername },
],
password: [
{ required: true, trigger: "blur", message: "请输入您的密码" },
{ required: true, trigger: "blur", validator: validatePass },
],
code: [{ required: true, trigger: "change", message: "请输入验证码" }],
},
@ -105,6 +122,7 @@ export default {
//
register: false,
redirect: undefined,
timer: null,
};
},
watch: {
@ -117,9 +135,8 @@ export default {
},
created() {
if(this.$route.query.token){
// this.register = true
this.loginForm.password = this.$route.query.token
this.loadpage = false
this.loginForm.token = this.$route.query.token
return this.handleLogin()
}
Cookies.remove("Admin-Token");
@ -128,15 +145,7 @@ export default {
this.getCookie();
},
methods: {
getCode() {
// getCodeImg().then(res => {
// this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled;
// if (this.captchaEnabled) {
// this.codeUrl = "data:image/gif;base64," + res.img;
// this.loginForm.uuid = res.uuid;
// }
// });
},
getCookie() {
const username = Cookies.get("username");
const password = Cookies.get("password");
@ -147,31 +156,21 @@ export default {
};
},
handleLogin() {
this.$refs.loginForm.validate((valid) => {
if (valid) {
this.loading = true;
if (this.loginForm.rememberMe) {
Cookies.set("username", this.loginForm.username, { expires: 30 });
Cookies.set("password", encrypt(this.loginForm.password), {
expires: 30,
});
} else {
Cookies.remove("username");
Cookies.remove("password");
}
const username = Cookies.get("username");
const password = Cookies.get("password");
const loginForm = {
username:
username === undefined ? this.loginForm.username : username,
passwordEncode:
password === undefined
? encrypt(this.loginForm.password)
: password,
username: username === undefined ? this.loginForm.username : username,
passwordEncode: password === undefined ? encrypt(this.loginForm.password): password,
token: this.loginForm.token || ''
};
this.$store
.dispatch("Login", loginForm)
.dispatch("Login",loginForm )
.then(() => {
this.timer= setInterval(() => {
this.loadpage=true
}, 3000);
// this.getRouterList();
getRouters().then((res) => {
if (res.data?.length) {
@ -191,17 +190,21 @@ export default {
.catch(() => {
console.log("dsdsdsd");
this.loading = false;
this.loadpage=true
// if (this.captchaEnabled) {
// this.getCode();
// }
});
}
});
},
createsocket() {
useWebSocket('ws://118.31.7.2:8801/webSocket/' + getname())
},
},
//
beforeDestroy() {
clearInterval(this.timer);
this.timer = null;
},
};
</script>
@ -251,7 +254,7 @@ export default {
width: 60%;
// height: 100%;
display: flex;
justify-content: end;
justify-content: flex-end;
align-content: center;
transform: translate(26px, -36px);
}

@ -1,6 +1,16 @@
<template>
<div class="quotation-container">
<div class="quotation-holding">
<div class="doubt" >
<el-popover
placement="top-start"
width="200"
trigger="hover"
content="该页面的交易数据请去练习专区查看。">
<svg-icon icon-class="doubt" slot="reference"/>
</el-popover>
</div>
<holding></holding>
</div>
<el-row>
@ -10,10 +20,10 @@
<img src="../../assets/images/dongfang.png" style="height: 110px;" alt="" @click="oepnWindow(2)">
<img src="../../assets/images/csrc.png" style="height: 110px;" alt="" @click="oepnWindow(3)">
<img src="../../assets/images/u2008.png" style="height: 110px;" alt="" @click="oepnWindow(4)">
<img src="../../assets/images/forex.jpg" style="height: 110px;" alt="" @click="oepnWindow(5)">
<img src="../../assets/images/logo-full-fff-286x95.png" style="height: 110px; background-color: #144785;" alt="" @click="oepnWindow(6)">
</div>
</el-col>
</el-row>
</div>
</template>
@ -46,6 +56,10 @@ export default {
window.open("http://www.csrc.gov.cn/");
} else if(type==4){
window.open("https://mt4-mt5.com/mt4Download");
}else if(type==5){
window.open("http://www.safe.gov.cn/");
}else if(type==6){
window.open("https://www.chinamoney.com.cn/chinese/index.html");
}
}
}
@ -53,8 +67,20 @@ export default {
</script>
<style lang='scss' scoped>
.quotation-holding{
padding: 20px;
padding: 35px 20px 20px 20px;
background: #ffff;
border-radius: 4px;
position: relative;
.doubt{
position: absolute;
top: 0px;
right: 20px;
.svg-icon{
width: 30px;
height: 30px;
fill: #3C9CF5;
}
}
}
.grid-content {
border-radius: 4px;

@ -1,6 +1,15 @@
<template>
<div class="app-Warning">
<strke></strke>
<div class="doubt" >
<el-popover
placement="top-start"
width="200"
trigger="hover"
content="该页面为练习专区系统预警功能。">
<svg-icon icon-class="doubt" slot="reference"/>
</el-popover>
</div>
</div>
</template>
<script>
@ -28,5 +37,16 @@ export default{
padding: 20px;
background: #ffff;
border-radius: 4px;
position: relative;
.doubt{
position: absolute;
top: 27px;
left: 21%;
.svg-icon{
width: 30px;
height: 30px;
fill: #3C9CF5;
}
}
}
</style>

@ -0,0 +1,130 @@
<template>
<div class="app-container">
<el-form ref="ruleForm" :inline="true" label-width="100px" class="el-form-lable" cell-style="{ display: flex;}" :model="queryParams">
<div>
<el-form-item>
<el-input v-model="queryParams.keyWord" placeholder="实训任务名称" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="gitlist"></el-button>
</el-form-item></div>
<div>
</div>
</el-form>
<!-- -->
<el-table :data="tableData" style="width:100%">
<el-table-column prop="trainingName" label="实训任务名称" align="center" width="200" />
<el-table-column prop="startTime" label="实训开始时间" align="center" >
<template slot-scope="scope">
<span> {{ parseTime(scope.row.startTime, "{y}-{m}-{d} {h}:{i}:{s}")}}</span>
</template>
</el-table-column>
<el-table-column prop="endTime" label="实训结束时间" align="center" >
<template slot-scope="scope">
<span> {{ parseTime(scope.row.endTime, "{y}-{m}-{d} {h}:{i}:{s}")}}</span>
</template>
</el-table-column>
<el-table-column prop="fileName" label="实验报告文档" align="center" >
<template slot-scope="scope">
<span style="color: #1890ff; cursor: pointer; " @click="load(scope.row.reportID)"> {{ scope.row.fileName !== null ? scope.row.fileName : '--'}}</span>
</template>
</el-table-column>
<el-table-column prop="reportScore" label="实训报告成绩" align="center" />
<el-table-column label="操作" align="center" width="300">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="down(scope.row)"></el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total"
:page.sync="queryParams.index"
:limit.sync="queryParams.size"
@pagination="gitlist" />
</div>
</template>
<script>
import{getroleId} from '@/utils/auth.js'
import * as report from '@/api/report.js'
import {getToken,getusername ,getschoolId} from '@/utils/auth.js'
export default {
name: '',
data() {
return {
dialogVisible: false,
total: 0,
queryParams:{
studentNumber: getusername(),//
schoolId:getschoolId(),//id
keyWord:'',//
index:1,
size:10 ,
},
planParams:{
name:'',
file:null
},
tableData: null ,
rulesform:{
name: [
{ required: true, message: '请输入资源名称', trigger: 'blur' }
],
},
uploadProgress: 0
}
},
computed: {},
created() {
this.gitlist()
},
methods: {
gitlist(){
report.getMemberList(this.queryParams).then(res=>{
if(res.code !== 200) return
this.tableData = res.data.list
this.total = res?.data.total
})
},
//
down(data){
console.log(data,'data');
this.$tab.openPage("实验报告", `/student/trainingReport/repost?reportID=${data.reportID}`);
},
load(id){
console.log(id,'id');
window.open(`http://118.31.7.2:8801/api/report/download?id=${id}&TOKEN=${getToken()}`)
}
}
}
</script>
<style lang='scss' scoped>
.app-container {
.el-form-lable {
.el-input {
width: calc(100vw / 3);
}
::v-deep.el-input__inner{
background: #EAEAEA !important;
}
}
.el-form{
display: flex;
justify-content: space-between;
}
.el-dialog__body{
.el-form{
display: flex;
flex-direction: column;
.el-button--medium{
margin-left: 78px;
}
}
}
}
</style>

@ -4,8 +4,10 @@
<el-button :disabled="status == 'FINISHED' || status == 'NOT_STARTED'" size="medium" @click="carryout"></el-button>
</div>
<div class="overview-title-right" v-show="activeName !== 'tabs1'">
<el-button type="primary" @click="hsbmit()" :disabled="status == 'FINISHED' || status == 'NOT_STARTED'"> </el-button>
<el-button type="warning" onclick="upload.click()" :disabled="status == 'FINISHED' || status == 'NOT_STARTED'"> </el-button>
<!-- :disabled="status == 'FINISHED' || status == 'NOT_STARTED'" -->
<el-button type="primary" @click="hsbmit()" :disabled="status == 'FINISHED' || status == 'NOT_STARTED'" > </el-button>
<!-- :disabled="status == 'FINISHED' || status == 'NOT_STARTED'" -->
<el-button type="warning" :disabled="status == 'FINISHED' || status == 'NOT_STARTED'" onclick="upload.click()"> </el-button>
<input type="file" ref="fileInput" @change="getFilePDF" name="upload" id="upload" style="display: none;" accept=" .pdf" />
</div>
<el-tabs
@ -111,6 +113,8 @@ export default {
top: 20px;
right: 42px;
height: 100%;
//
.el-button {
width: 200px;
height: 80px;

@ -121,10 +121,15 @@ export default {
// getroleId() !== "3"? this.dialogVisible = false : this.dialogVisible = true
if(getroleId() !== "3") {
this.dialogVisible = false
if(this.$route.query.reportID){
this.getReport()
}else{
this.getreportPDF()
}
}else{
this.dialogVisible = true
this.getreportPDF()
}
},
computed: {},
@ -162,6 +167,15 @@ export default {
// this.reportName
});
},
//
getReport() {
const repostId=this.$route.query.reportID
testreport.getReportById({id:repostId}).then((res) => {
if (res.code !== 200) return
this.reportdata=res.data
// this.$modal.msgSuccess("");
});
},
//
submitScore() {
if(this.scoringData.score === null) {

@ -113,14 +113,6 @@ export default {
const file = this.$refs.fileInput.files[0];
console.log("file",file.size);
// 500m
if(file.size > 500*1024){
this.$message({
message: '文件大小超过500M',
type: 'warning'
});
return;
}
if (!file) {
alert('请选择文件!');
return;

@ -20,7 +20,7 @@
</el-table-column>
<el-table-column label="保证金水平" align="center" >
<template slot-scope="scope">
<span> {{toDecimal2(scope.row.marginLevel) }}</span>
<span> {{toDecimal2(scope.row.marginLevel) }}%</span>
</template>
</el-table-column>
<el-table-column prop="warningLevel" label="保证金报警水平" align="center" />
@ -175,6 +175,9 @@ export default {
.trade-cdeposit{
background: #fff;
.record{
display: flex;
// justify-content: center;
align-items: center;
height: 60px;
line-height: 60px;
border-top: 1px solid #EAEAEA;
@ -183,6 +186,9 @@ export default {
font-weight: bold;
// margin-left: 10px;
color: #333333;
::v-deep .svg-icon{
margin-right: 10px;
}
}
}
.pagination-container {

@ -178,13 +178,20 @@ export default {
.trade-cdeposit{
background: #fff;
.record{
display: flex;
// justify-content: center;
align-items: center;
height: 60px;
line-height: 60px;
border-top: 1px solid #EAEAEA;
font-size: 18px;
font-family: Microsoft YaHei;
font-weight: bold;
// margin-left: 10px;
color: #333333;
::v-deep .svg-icon{
margin-right: 10px;
}
}
}
.pagination-container {

@ -159,13 +159,20 @@ export default {
.trade-cdeposit{
background: #fff;
.record{
display: flex;
// justify-content: center;
align-items: center;
height: 60px;
line-height: 60px;
border-top: 1px solid #EAEAEA;
font-size: 18px;
font-family: Microsoft YaHei;
font-weight: bold;
// margin-left: 10px;
color: #333333;
::v-deep .svg-icon{
margin-right: 10px;
}
}
}
.pagination-container {

@ -141,13 +141,20 @@ export default {
.trade-cdeposit{
background: #fff;
.record{
display: flex;
// justify-content: center;
align-items: center;
height: 60px;
line-height: 60px;
border-top: 1px solid #EAEAEA;
font-size: 18px;
font-family: Microsoft YaHei;
font-weight: bold;
// margin-left: 10px;
color: #333333;
::v-deep .svg-icon{
margin-right: 10px;
}
}
}
.pagination-container {

@ -1,8 +1,12 @@
<template>
<div>
<el-table :data="datalist" style="width: 100%" v-loading="loading">
<el-table :data="datalist" style="width: 100%" >
<el-table-column prop="code" label="交易品种" width="100" align="center"/>
<el-table-column prop="currency" label="名称" align="center" />
<el-table-column prop="currency" label="名称" align="center" >
<template slot-scope="scope">
<span>{{ addCurrency(scope.row.currency) }}</span>
</template>
</el-table-column>
<el-table-column label="卖价" align="center" prop="sellPic">
<template slot-scope="scope">
<span v-if="scope.row.sellPic > scope.row.openPri" style="color:red">{{scope.row.sellPic}}</span>
@ -295,6 +299,22 @@ export default {
})
})
},
//
addCurrency(currencyPair){
let index = currencyPair.indexOf("元");
if (index !== -1 && index < currencyPair.length - 1) {
let newCurrencyPair = currencyPair.slice(0, index + 1) + "/" + currencyPair.slice(index + 1);
return newCurrencyPair;
}
index = currencyPair.indexOf("镑");
if (index !== -1 && index < currencyPair.length - 1) {
let newCurrencyPair = currencyPair.slice(0, index + 1) + "/" + currencyPair.slice(index + 1);
return newCurrencyPair;
}
return currencyPair;
},
},
beforeDestroy() {

@ -420,7 +420,7 @@ export default {
}
},
mounted() {
if(this.$route.query.id == '999999999'){
if(this.$route.query.id == '999999999' || this.$route.path == '/student/systemWarning/index'){
this.tabsArr.splice(3,1)
}
}

@ -89,6 +89,7 @@ export default {
}
},
methods: {
//
getlist(){
this.loading = true
training.findTrainingList(this.recordlist).then((res)=>{
@ -100,6 +101,7 @@ export default {
}
})
},
//
progress(data) {
this.$tab.openPage("进行中", `/student/training/homepageage?id=${data.trainingId}`);
localStorage.setItem("status",data.status)
@ -144,6 +146,7 @@ export default {
.centern {
font-size: 14px;
padding: 0 20px;
color: #909399;
}
.grid-footer {
position: absolute;
@ -208,6 +211,7 @@ export default {
display: flex;
justify-content: center;
align-items: center;
color: #909399;
// height: 100vh;
}
.pagination-container{

@ -13,12 +13,22 @@
></components>
</el-tab-pane>
</el-tabs>
<div class="doubt" v-show="isShow">
<el-popover
placement="top-start"
width="200"
trigger="hover"
content="该页面为练习专区交易记录。">
<svg-icon icon-class="doubt" slot="reference"/>
</el-popover>
</div>
<el-button class="el-back" icon="el-icon-arrow-left" @click="back"></el-button>
</div>
</template>
<script>
import tabs1 from "@/components/current/index.vue";
import tabs2 from "@/components/deals/index.vue";
import {getroleId} from "@/utils/auth.js";
export default {
components:{
tabs1,
@ -37,10 +47,24 @@ export default {
{
label: "历史成交",
name: "tabs2",
},]
},],
// popover
isShow:false
}
},
created() {
if(getroleId()!== '3'){
// this.tabsArr.splice(1,1)
if(this.$route.path== '/student/transactionRecords'){
this.isShow=false
}else{
this.isShow=true
}
}else{
this.isShow=false
}
},
created() {},
computed: {},
methods: {
handleClick(tab){
@ -61,6 +85,16 @@ export default {
background: #fff;
border-radius: 6px;
padding: 24px 14px 19px 30px;
.doubt{
position: absolute;
top: 29px;
left: 244px;
.svg-icon{
width: 30px;
height: 30px;
fill: #3C9CF5;
}
}
&::v-deep .el-back {
position: absolute;
top: 29px;

@ -11,7 +11,7 @@ const TerserPlugin = require('terser-webpack-plugin');
const name = process.env.VUE_APP_TITLE || '外汇模拟交易' // 网页标题
const port = process.env.port || process.env.npm_config_port || 81 // 端口
const port = process.env.port || process.env.npm_config_port || 80// 端口
// vue.config.js 配置说明
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
@ -31,7 +31,7 @@ module.exports = {
productionSourceMap: false,
// webpack-dev-server 相关配置
devServer: {
host: '0.0.0.0',
host: 'localhost',
port: port,
open: true,
proxy: {

Loading…
Cancel
Save