部分纠正

dev
lion 1 year ago
parent 46345fd214
commit 7294304fa4

@ -55,6 +55,7 @@ export function destroy(params) {
})
}
// 批量更新
export function updateStatus(data) {
return request({
method: "post",

@ -53,3 +53,14 @@ export function destroy(params) {
params
})
}
export function getQrCode(params,isLoading = false) {
return request({
method: "get",
url: "/api/admin/courses/qrcode",
params,
paramsSerializer: customParamsSerializer,
isLoading
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

@ -33,14 +33,14 @@
let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
const first = matched[0]
if (!this.isDashboard(first)) {
matched = [{
path: '/dashboard',
meta: {
title: '系统首页'
}
}].concat(matched)
}
// if (!this.isDashboard(first)) {
// matched = [{
// path: '/dashboard',
// meta: {
// title: ''
// }
// }].concat(matched)
// }
this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
},

@ -1,12 +1,12 @@
<template>
<div class="sidebar-logo-container" :class="{'collapse':collapse}">
<transition name="sidebarLogoFade">
<router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
<router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/dashboard">
<img src="../../../assets/logo-mini.png?v=1" class="sidebar-logo">
<img style="width:32px;height:32px;" src="../../../assets/logo-mini.png?v=1" class="sidebar-logo">
</router-link>
<router-link v-else key="expand" class="sidebar-logo-link" to="/">
<img src="../../../assets/logo-mini.png?v=1" class="sidebar-logo">
<router-link v-else key="expand" class="sidebar-logo-link" to="/dashboard">
<img src="../../../assets/logo-mini.png?v=1" class="sidebar-logo">
<img src="../../../assets/logo.png?v=2" class="sidebar-name-logo" />
</router-link>
</transition>

@ -18,21 +18,25 @@ export default {
type: 'success'
}, {
id: 2,
value: '驳回',
value: '审核不通过',
type: 'warning'
}],
fee_status_list: [{
id: 0,
value: '待缴费'
value: '待缴费',
type:''
}, {
id: 3,
value: '待确认'
value: '待确认',
type:'info'
}, {
id: 1,
value: '缴费成功'
value: '缴费成功',
type:'success'
}, {
id: 2,
value: '缴费失败'
value: '缴费失败',
type:'warning'
}],
// 课程
course_type: [{
@ -115,10 +119,12 @@ export default {
value:'全部'
},{
id:1,
value:'正常'
value:'正常',
type:'success'
},{
id:0,
value:'缺勤'
value:'缺勤',
type:'warning'
}],
// 自定义表单的 固定字段
defaultFormList: [{

@ -60,20 +60,20 @@ export const constantRoutes = [{
hidden: true
},
{
path: '/',
component: Layout,
redirect: '/dashboard',
children: [{
path: 'dashboard',
name: '系统首页',
component: () => import('@/views/dashboard/index'),
meta: {
title: '系统首页',
icon: 'dashboard'
}
}]
},
// {
// path: '/',
// component: Layout,
// redirect: '/dashboard',
// children: [{
// path: 'dashboard',
// name: '系统首页',
// component: () => import('@/views/dashboard/index'),
// meta: {
// title: '系统首页',
// icon: 'dashboard'
// }
// }]
// },
{
path: '/course/txl',
component: Layout,

@ -46,7 +46,7 @@
<template v-slot:btns>
<el-table-column align='center' fixed="right" label="操作" width="80" header-align="center">
<template slot-scope="scope">
<el-button type="primary" v-if="scope.row.status===0" size="small" @click="showDetail('check',scope.row.user_id)"></el-button>
<el-button type="primary" v-if="scope.row.status===0" size="small" @click="showDetail('check',scope.row)"></el-button>
</template>
</el-table-column>
</template>
@ -164,10 +164,10 @@
this.list = res.data
this.total = res.total
},
showDetail(type, id) {
console.log(type,id)
showDetail(type, row) {
this.$refs.studentDetail.subjectObj = this.subjectObj
this.$refs.studentDetail.id = id
this.$refs.studentDetail.id = row.user_id
this.$refs.studentDetail.row = row
this.$refs.studentDetail.type = type
this.$refs.studentDetail.isShow = true
},

@ -51,8 +51,8 @@
<template v-slot:user_nosign_total>
<el-table-column align='center' label="缺勤人数" width="120" header-align="center">
<template slot-scope="scope">
<div @click="showAttendance(scope.row,0)" v-if="scope.row.user_nosign_total && scope.row.user_nosign_total>0" style="cursor: pointer;color:blue;text-decoration:underline">
{{scope.row.user_nosign_total}}
<div @click="showAttendance(scope.row,0)" v-if="scope.row.course_keeps_count>0 && scope.row.user_sign_total>0" style="cursor: pointer;color:blue;text-decoration:underline">
{{scope.row.course_keeps_count - scope.row.user_sign_total}}
</div>
<div v-else>0</div>
</template>
@ -69,7 +69,7 @@
</xy-table>
</div>
<showAttendance ref="showAttendance"></showAttendance>
<imports ref="imports" :table-name="'course_keeps'"></imports>
<imports ref="imports" :table-name="'course_keeps'" @refresh="getList"></imports>
</div>
</template>
@ -142,7 +142,7 @@
},
methods: {
showAttendance(row,state) {
this.$refs.showAttendance.setRow(row,)
this.$refs.showAttendance.setRow(row,state)
this.$refs.showAttendance.isShow = true
},
//

@ -104,7 +104,7 @@
<template v-slot:image_id v-if="active===0">
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold;">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>课程封面750*400
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>课程封面680*380
</div>
<div class="xy-table-item-content">
<el-upload :action="action" class='upload-demo' :on-exceed="onExceed" :limit="1" list-type="picture-card"

@ -7,9 +7,9 @@
<div class="xy-table-item-label" style="font-weight: bold;width:0;padding:0">
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>
</div>
<div class="xy-table-item-content" style="flex-grow:1;text-align:center">
<div>
<img style="height:300px" src="../../../assets/logo-mini.png" alt="">
<div class="xy-table-item-content" style="flex-grow:1;text-align:center" v-if="row.fee_files && row.fee_files.length>0">
<div v-for="item in row.fee_files">
<img style="height:300px" :src="item.url" alt="">
</div>
<div>
<el-button type="primary" style='margin:15px;' @click="updateFee(1)"></el-button>
@ -29,7 +29,7 @@
</template>
<script>
import {updateFeeStatus} from "@/api/apply/index"
import {save} from "@/api/apply/index"
export default {
components: {
@ -38,7 +38,8 @@
return {
isShow: false,
type: 'add',
id: '',
id: '',
row:{},
type_options: [{
id: 1,
value: '已缴'
@ -54,11 +55,12 @@
created() {},
methods: {
updateFee(status){
updateFeeStatus({
ids:this.id,
console.log("status",status)
save({
id:this.row.id,
fee_status:status,
}).then(res => {
Message({
this.$message({
type: 'success',
message: '核对成功'
})
@ -72,8 +74,7 @@
if (newVal) {
} else {
this.id = ''
this.$refs['dialog'].reset()
this.row = {}
}
},
}

@ -9,31 +9,40 @@
<div class="xy-table-item-content" style="flex-grow: 1;">
<div class="txl">
<div>
<div>时名称管理思维</div>
<div>授课教师王教授</div>
<div>授课教室功能教室1</div>
<div>考勤日期2023.3.2</div>
</div>
<div style="display: flex;align-items: center;margin-bottom:15px">
<div style="margin-right: 10px;">
<el-input v-model="select.name" placeholder="请输入学员姓名"></el-input>
</div>
<div style="margin-right: 10px;">
<el-select v-model="select.type" placeholder="请选择状态" clearable>
<el-option v-for="item in keep_options" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div style="margin-right: 10px;">
<el-button type="primary" size="small">查询</el-button>
</div>
</div>
<div>
<div>程主题{{keepsObj.theme}}</div>
<div>授课教师{{keepsObj.teacher?keepsObj.teacher.name:''}}</div>
<div>授课教室{{keepsObj.address}}</div>
<div>考勤日期{{keepsObj.date}}</div>
</div>
<div style="display: flex;align-items: center;margin-bottom:15px">
<div style="margin-right: 10px;">
<el-input v-model="select.name" placeholder="请输入学员姓名"></el-input>
</div>
<div style="margin-right: 10px;">
<el-select v-model="select.status" placeholder="请选择状态" clearable>
<el-option v-for="item in keep_options" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
<div style="margin-right: 10px;">
<el-button type="primary" size="small" @click="getList"></el-button>
</div>
</div>
<div>
<xy-table :list="list" :table-item="table_item" :isPage="false">
<template v-slot:btns>
<div></div>
</template>
</xy-table>
<template v-slot:status>
<el-table-column align='center' label="状态" header-align="center">
<template slot-scope="scope">
<div v-for="item in keep_options">
<el-tag :type="item.type" v-if="scope.row.status===item.id">{{item.value}}</el-tag>
</div>
</template>
</el-table-column>
</template>
<template v-slot:btns>
<div></div>
</template>
</xy-table>
</div>
</div>
</div>
@ -50,11 +59,13 @@
</div>
</template>
<script>
import {index} from "@/api/course/courseKeeps.js"
import myMixins from "@/mixin/selectMixin.js";
export default {
mixins: [myMixins],
<script>
import {
index
} from "@/api/course/courseKeeps.js"
import myMixins from "@/mixin/selectMixin.js";
export default {
mixins: [myMixins],
components: {
},
@ -62,65 +73,57 @@
return {
isShow: false,
type: 'add',
id: '',
select:{
status:'',
page:1,
page_size:999
},
id: '',
select: {
status: '',
page: 1,
page_size: 999
},
form: {
settings: '',
},
list:[],
table_item:[{
},
list: [],
table_item: [{
prop: 'name',
label: '学员姓名',
align: 'center'
},{
prop: 'date',
}, {
prop: 'time',
label: '考勤时间',
align: 'center'
},{
}, {
prop: 'status',
label: '状态',
align: 'center',
customFn: (cell) => {
return ( <div style = {{color: cell.status=='1'?"blue":"red"}}
>
{
cell.status?cell.status:''
} </div> )
}
align: 'center',
}]
}
},
created() {},
methods: {
setRow(row,status){
this.keepsObj = row
this.select.status = status
this.getList()
setRow(row, status) {
this.keepsObj = row
this.select.status = status
this.getList()
},
async getList() {
const res = index({
page:this.select.page,
page_size:this.select.page_size,
filter:[{
key:'course_content_id',
op:'eq',
value:this.keepsObj.id
},{
key:'status',
op:'eq',
value:this.select.status
},{
key:'date',
op:'eq',
value:this.keepsObj.date
}],
})
const res = await index({
page: this.select.page,
page_size: this.select.page_size,
show_relations:['user'],
filter: [{
key: 'course_content_id',
op: 'eq',
value: this.keepsObj.id
}, {
key: 'status',
op: 'eq',
value: this.select.status
}],
})
console.log("res",res.data)
this.list = res.data
}
},
watch: {
@ -140,5 +143,4 @@
::v-deep .settings {
flex-basis: 100%;
}
</style>

@ -1,6 +1,6 @@
<template>
<div>
<xy-dialog ref="dialog" :width="70" :is-show.sync="isShow" :type="'form'" :title="'二维码'" :form="form"
<xy-dialog ref="dialog" :width="50" :is-show.sync="isShow" :type="'form'" :title="'二维码'" :form="form"
:rules='rules'>
<template v-slot:settings>
<div class="xy-table-item">
@ -10,14 +10,14 @@
<div class="xy-table-item-content" style="flex-grow: 1;">
<div class="txl">
<div>
<div>课程名称第六期高级科创人才研修班</div>
<div>开课日期2024.3.1-----2024.9.1</div>
<div>类别正常课程</div>
<div>课程名称{{row.name}}</div>
<div>开课日期{{row.start_date}}{{row.end_date}}</div>
<div>类别{{row.type_value}}</div>
</div>
</div>
<div class="code">
<img src="../../../assets/logo-mini.png"></img>
<div class="code" v-if="imgSrc">
<img :src="imgSrc"></img>
</div>
</div>
</div>
@ -33,7 +33,8 @@
</div>
</template>
<script>
<script>
import {getQrCode} from "@/api/course"
export default {
components: {
@ -41,35 +42,31 @@
data() {
return {
isShow: false,
type: 'add',
id: '',
form: {
settings: '',
},
rules: {}
},
row:{},
rules: {},
imgSrc:''
}
},
created() {},
methods: {
getDetail() {
show({
id: this.id,
table_name: 'new_plans',
}).then(res => {
})
async getCode() {
const res = await getQrCode({
id: this.row.id,
})
this.imgSrc = res.msg
}
},
watch: {
isShow(newVal) {
if (newVal) {
if (this.type === 'editor') {
// this.getDetail()
}
} else {
this.id = ''
this.$refs['dialog'].reset()
if (newVal) {
this.getCode()
} else {
this.row = {}
this.imgSrc = ''
}
},
}

@ -86,7 +86,7 @@
</el-popconfirm>
<el-button type="primary" size="small" @click="toTxl(scope.row)"></el-button>
<el-button type="primary" size="small" v-if="scope.row.is_fee===1" @click="toPay(scope.row)"></el-button>
<el-button type="primary" size="small" @click="showQrCode"></el-button>
<el-button type="primary" size="small" @click="showQrCode(scope.row)"></el-button>
</template>
</el-table-column>
</template>
@ -206,7 +206,17 @@
this.$refs.addCourse.type = type
this.$refs.addCourse.isShow = true
},
showQrCode() {
showQrCode(row) {
let value = ''
this.course_type.map(item=>{
if(item.id==row.type){
value = item.value
}
})
this.$refs.showCode.row = {
type_value:value,
...row
}
this.$refs.showCode.isShow = true
},
toTxl(row) {

@ -50,21 +50,33 @@
<el-table-column align='center' label="状态" width="120" header-align="center">
<template slot-scope="scope">
<div v-for="item in fee_status_list">
<div v-if="scope.row.fee_status===item.id">{{item.value}}</div>
<el-tag :type="item.type" v-if="scope.row.fee_status===item.id">{{item.value}}</el-tag>
</div>
</template>
</el-table-column>
</template>
<template v-slot:img>
<el-table-column align='center' label="缴费截图" width="120" header-align="center">
<template slot-scope="scope">
<div v-for="item in scope.row.fee_files">
<el-image style="width:'40px',height:'40px'" :src="item.url" :preview-src-list="scope.row.fee_files"
></el-image>
</div>
</template>
</el-table-column>
</template>
<template v-slot:btns>
<el-table-column v-if="url_type=='pay'" align='center' fixed="right" label="操作" width="80" header-align="center">
<template slot-scope="scope">
<el-button type="primary" size="small" v-if="scope.row.fee_status===3" @click="showCheckPay"></el-button>
<template slot-scope="scope">
<!-- -->
<el-button type="primary" size="small" v-if="scope.row.fee_status===3" @click="showCheckPay(scope.row)"></el-button>
</template>
</el-table-column>
<div v-else></div>
</template>
</xy-table>
</div>
</div>
<checkPay ref="checkPay" @refresh="getList"></checkPay>
<sendMessage ref="sendMessage" @refresh="getList"></sendMessage>
</div>
@ -74,10 +86,8 @@
import checkPay from './components/checkPay.vue';
import sendMessage from './components/sendMessage.vue';
import myMixins from "@/mixin/selectMixin.js";
import {
indexStudy
} from '@/api/student/index.js'
import {updateFeeStatus} from "@/api/apply/index"
import {updateFeeStatus,index as indexStudy} from "@/api/apply/index"
export default {
@ -91,55 +101,53 @@
subjectObj:{},
url_type:'pay',
select: {
name: '',
date: '',
fee_status:'',
name:'',
page: 1,
page_size: 10,
},
selectids:[],
showImg:false,
srcList:[],
list: [{
name: '王同学',
company: '**股份公司',
zw: '总经理',
mobile: '13812345671',
date: '2024.2.4 10:21',
status: '未缴',
fee_status:3,
img: 'http://suzhoukeji-test.ali251.langye.net/admin/static/img/logo-mini.e480d6fa.png'
},{
name: '王同学',
company: '**股份公司',
zw: '总经理',
mobile: '13812345671',
date: '2024.2.4 10:21',
status: '未缴',
img: ''
}],
list: [],
total: 0,
table_item: [{
type: 'selection',
width: 50
}, {
prop: 'name',
prop: 'user.name',
label: '姓名',
align: 'center',
width: 120
}, {
prop: 'company_name',
label: '公司',
align: 'left'
align: 'left',
}, {
prop: 'company_position',
label: '职务',
align: 'center',
width: 160,
width: 120,
}, {
prop: 'mobile',
prop: 'user.mobile',
label: '联系电话',
align: 'center',
width: 120,
}, {
prop: 'company_type',
label: '企业性质',
align: 'center',
width: 180,
}, {
prop: 'company_industry',
label: '所属行业',
align: 'center',
width: 120,
}, {
prop: 'company_area',
label: '所属区域',
align: 'center',
width: 120,
}, {
prop: 'date',
label: '报名时间',
@ -154,21 +162,7 @@
prop: 'img',
label: '缴费截图',
align: 'center',
width: 120,
customFn: (cell) => {
return ( cell.img?<el-image style={{width:'40px',height:'40px'}} src={cell.img} preview-src-list={this.srcList}
on = {
{
['click']: (e) => {
if(cell.img){
this.srcList = []
this.srcList.push(cell.img)
}
}
}
}
></el-image>:'' )
}
width: 120
}]
}
@ -177,7 +171,7 @@
this.url_type = this.$route.query.type?this.$route.query.type:'pay'
this.subjectObj = this.$route.query
this.select.course_id = this.subjectObj.id
// this.getList()
this.getList()
},
methods: {
pageIndexChange(e){
@ -201,14 +195,18 @@
key: 'fee_status',
op: 'eq',
value: this.select.fee_status
},{
key: 'course_id',
op: 'eq',
value: this.select.course_id
}]
})
this.list = res.data
this.total = res.total
},
//
showCheckPay(type, id){
this.$refs.checkPay.id = id
showCheckPay(row){
this.$refs.checkPay.row = row
this.$refs.checkPay.isShow = true
},
//

@ -0,0 +1,251 @@
<template>
<div class="login-container">
<vue-particles color="#ffffff" :particleOpacity="0.7" :particlesNumber="80" shapeType="circle" :particleSize="4"
linesColor="#ffffff" :linesWidth="1" :lineLinked="true" :lineOpacity="0.4" :linesDistance="150" :moveSpeed="3"
:hoverEffect="true" hoverMode="grab" :clickEffect="true" clickMode="push"> </vue-particles>
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on"
label-position="left">
<div class="title-container">
<h3 class="title">{{title}}</h3>
</div>
<el-form-item prop="username">
<span class="svg-container">
<svg-icon icon-class="user" />
</span>
<el-input ref="username" v-model="loginForm.username" placeholder="请输入登录名" name="username" type="text"
tabindex="1" auto-complete="on" />
</el-form-item>
<el-form-item prop="password">
<span class="svg-container">
<svg-icon icon-class="password" />
</span>
<el-input :key="passwordType" ref="password" v-model="loginForm.password" :type="passwordType"
placeholder="请输入密码" name="password" tabindex="2" auto-complete="on" @keyup.enter.native="handleLogin" />
<span class="show-pwd" @click="showPwd">
<svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
</span>
</el-form-item>
<el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;"
@click.native.prevent="handleLogin">登录</el-button>
</el-form>
</div>
</template>
<script>
import {
validUsername
} from '@/utils/validate'
const defaultSettings = require('../../../src/settings.js')
export default {
name: 'Login',
data() {
const validateUsername = (rule, value, callback) => {
if (!validUsername(value)) {
callback(new Error('请正确输入登录名'))
} else {
callback()
}
}
const validatePassword = (rule, value, callback) => {
if (value.length < 6) {
callback(new Error('密码输入错误'))
} else {
callback()
}
}
return {
title: "",
loginForm: {
username: '',
password: ''
},
loginRules: {
username: [{
required: true,
trigger: 'blur',
validator: validateUsername
}],
password: [{
required: true,
trigger: 'blur',
validator: validatePassword
}]
},
loading: false,
passwordType: 'password',
redirect: undefined
}
},
watch: {
$route: {
handler: function(route) {
this.redirect = route.query && route.query.redirect
},
immediate: true
}
},
created() {
this.title = defaultSettings.title;
},
methods: {
showPwd() {
if (this.passwordType === 'password') {
this.passwordType = ''
} else {
this.passwordType = 'password'
}
this.$nextTick(() => {
this.$refs.password.focus()
})
},
//
handleLogin() {
this.$refs.loginForm.validate(valid => {
if (valid) {
this.loading = true
this.$store.dispatch('user/login', this.loginForm).then(() => {
this.$router.push({
path: this.redirect || '/'
})
this.loading = false
}).catch(() => {
this.loading = false
})
} else {
console.log('error submit!!')
return false
}
})
}
}
}
</script>
<style lang="scss">
#particles-js {
width: 100%;
height: 99%;
position: absolute;
}
/* 修复input 背景不协调 和光标变色 */
/* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */
$bg:#122583;
$light_gray:#122583;
$cursor: #122583;
@supports (-webkit-mask: none) and (not (cater-color: $cursor)) {
.login-container .el-input input {
color: $cursor;
}
}
/* reset element-ui css */
.login-container {
.el-input {
display: inline-block;
height: 47px;
width: 85%;
input {
background: transparent;
border: 0px;
-webkit-appearance: none;
border-radius: 0px;
padding: 12px 5px 12px 15px;
color: $light_gray;
height: 47px;
caret-color: $cursor;
&:-webkit-autofill {
//box-shadow: 0 0 0px 1000px $bg inset !important;
//-webkit-text-fill-color: $cursor !important;
}
}
}
.el-form-item {
border: 1px solid rgba(255, 255, 255, 0.1);
background: rgba(0, 0, 0, 0.1);
border-radius: 5px;
color: #454545;
}
}
</style>
<style lang="scss" scoped>
$bg:#122583;
$dark_gray:#122583;
$light_gray:#122583;
.login-container {
min-height: 100%;
width: 100%;
//background-color: $bg;
background: url("../../assets/bg.jpg") no-repeat;
overflow: hidden;
.login-form {
position: relative;
width: 520px;
max-width: 100%;
padding: 20px 35px 0;
margin: 160px auto;
overflow: hidden;
background-color: #fff;
}
.tips {
font-size: 14px;
color: #fff;
margin-bottom: 10px;
span {
&:first-of-type {
margin-right: 16px;
}
}
}
.svg-container {
padding: 6px 5px 6px 15px;
color: $dark_gray;
vertical-align: middle;
width: 30px;
display: inline-block;
}
.title-container {
position: relative;
.title {
font-size: 26px;
color: $light_gray;
margin: 0px auto 40px auto;
text-align: center;
font-weight: bold;
}
}
.show-pwd {
position: absolute;
right: 10px;
top: 7px;
font-size: 16px;
color: $dark_gray;
cursor: pointer;
user-select: none;
}
}
</style>

@ -1,41 +1,58 @@
<template>
<div class="login-container">
<div class="login-logo">
<img src="../../assets/login_logo.png" alt="">
</div>
<div class="login-wrap">
<div class="login-logo1">
<img src="../../assets/login_logo2.png" alt="">
</div>
<div class="login-form1">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="" auto-complete="on"
label-position="left">
<div class="title-container">
<h3 class="title">欢迎登录</h3>
<div class="title-change">
<span @click="changeLogin=false" :class="{color:!changeLogin}">账号登录</span>
<span @click="changeLogin=true" :class="{color:changeLogin}">短信登录</span>
</div>
</div>
<template v-if="!changeLogin">
<el-form-item prop="username">
<el-input ref="username" v-model="loginForm.username" placeholder="手机号/邮箱" name="username" type="text"
tabindex="1" auto-complete="on" />
</el-form-item>
<el-form-item prop="password">
<el-input :key="passwordType" ref="password" v-model="loginForm.password" :type="passwordType"
placeholder="密码" name="password" tabindex="2" auto-complete="on" @keyup.enter.native="handleLogin" />
<span class="show-pwd" @click="showPwd">
<svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
</span>
</el-form-item>
</template>
<template v-else>
<el-form-item prop="username">
<el-input ref="username" v-model="loginForm.username" placeholder="手机号" name="username" type="text"
tabindex="1" auto-complete="on" />
</el-form-item>
<el-form-item prop="code" class="send_item">
<el-input ref="code" v-model="loginForm.code" placeholder="验证码" name="code" type="text" tabindex="1"
auto-complete="on">
</el-input>
<span class="senndCode">发送验证码</span>
</el-form-item>
</template>
<vue-particles color="#ffffff" :particleOpacity="0.7" :particlesNumber="80" shapeType="circle" :particleSize="4"
linesColor="#ffffff" :linesWidth="1" :lineLinked="true" :lineOpacity="0.4" :linesDistance="150" :moveSpeed="3"
:hoverEffect="true" hoverMode="grab" :clickEffect="true" clickMode="push"> </vue-particles>
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on"
label-position="left">
<div class="title-container">
<h3 class="title">{{title}}</h3>
<el-button :loading="loading" type="primary" class="loginBtn"
@click.native.prevent="handleLogin">登录</el-button>
</el-form>
</div>
</div>
<el-form-item prop="username">
<span class="svg-container">
<svg-icon icon-class="user" />
</span>
<el-input ref="username" v-model="loginForm.username" placeholder="请输入登录名" name="username" type="text"
tabindex="1" auto-complete="on" />
</el-form-item>
<el-form-item prop="password">
<span class="svg-container">
<svg-icon icon-class="password" />
</span>
<el-input :key="passwordType" ref="password" v-model="loginForm.password" :type="passwordType"
placeholder="请输入密码" name="password" tabindex="2" auto-complete="on" @keyup.enter.native="handleLogin" />
<span class="show-pwd" @click="showPwd">
<svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
</span>
</el-form-item>
<el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;"
@click.native.prevent="handleLogin">登录</el-button>
</el-form>
<div class="login-footer">版权所有苏州未来科技产业发展有限公司</div>
</div>
</template>
@ -64,6 +81,7 @@
}
return {
title: "",
changeLogin: false,
loginForm: {
username: '',
password: ''
@ -97,6 +115,9 @@
this.title = defaultSettings.title;
},
methods: {
// changeLogin(type){
// if(){}
// },
showPwd() {
if (this.passwordType === 'password') {
this.passwordType = ''
@ -106,7 +127,7 @@
this.$nextTick(() => {
this.$refs.password.focus()
})
},
},
//
handleLogin() {
this.$refs.loginForm.validate(valid => {
@ -115,7 +136,7 @@
this.$store.dispatch('user/login', this.loginForm).then(() => {
this.$router.push({
path: this.redirect || '/'
path: this.redirect || '/dashboard'
})
this.loading = false
}).catch(() => {
@ -141,13 +162,13 @@
/* 修复input 背景不协调 和光标变色 */
/* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */
$bg:#122583;
$light_gray:#122583;
$bg: #122583;
$light_gray: #122583;
$cursor: #122583;
@supports (-webkit-mask: none) and (not (cater-color: $cursor)) {
.login-container .el-input input {
color: $cursor;
// color: $cursor;
}
}
@ -176,34 +197,134 @@
}
.el-form-item {
border: 1px solid rgba(255, 255, 255, 0.1);
background: rgba(0, 0, 0, 0.1);
border: 1px solid #cdcdcd;
background: #f4f4f4;
border-radius: 5px;
color: #454545;
margin-bottom: 30px;
}
}
</style>
<style lang="scss" scoped>
$bg:#122583;
$dark_gray:#122583;
$light_gray:#122583;
$bg: #122583;
$dark_gray: #122583;
$light_gray: #122583;
.login-container {
min-height: 100%;
width: 100%;
//background-color: $bg;
background: url("../../assets/bg.jpg") no-repeat;
height: 100vh;
width: 100vw;
background: url("../../assets/login_bg.png") no-repeat;
overflow: hidden;
background-size: 100% 100%;
position: relative;
.login-footer{
text-align: center;
position: absolute;
bottom:20px;
left:0;
width:100%;
color:#274999;
}
.login-logo {
// width: 20vw;
width: 383px;
margin: 0 auto;
margin-top: 9vh;
.login-form {
position: relative;
width: 520px;
max-width: 100%;
padding: 20px 35px 0;
margin: 160px auto;
overflow: hidden;
background-color: #fff;
img {
width: 100%;
}
}
.login-wrap {
margin-top: 11vh;
margin-left: 20vw;
margin-right: 15vw;
display: flex;
justify-content: space-between;
align-items: end;
.login-logo1 {
// width: 16.5vw;
width: 270px;
img {
width: 100%;
}
}
.login-form1 {
width: 30vw;
// height: 49vh;
// width: 593px;
// height: 530px;
background: url('../../assets/login_form_bg.png') no-repeat;
background-size: 100% 100%;
padding: 45px;
padding-bottom: 90px;
padding-top: 35px;
// margin: 0 auto;
.title-container {
margin-bottom: 35px;
.title {
text-align: center;
font-size: 28px;
color: #274999;
text-align: center;
}
.title-change {
font-size: 18px;
display: flex;
justify-content: space-between;
padding-bottom: 10px;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
span {
cursor: pointer;
}
span.color {
color: #c69c6d;
}
}
}
.send_item {
.el-input {
width: 70%;
}
.senndCode {
background-color: #c69c6d;
display: inline-block;
width: 30%;
text-align: center;
color: #fff;
height: 47px;
line-height: 47px;
border-radius: 0 5px 5px 0;
}
}
.loginBtn {
width: 100%;
background: linear-gradient(to right, #284a99, #c69c6d);
border: none;
height: 47px;
line-height: 47px;
padding: 0;
font-size: 18px;
}
}
}
.tips {
@ -218,26 +339,6 @@
}
}
.svg-container {
padding: 6px 5px 6px 15px;
color: $dark_gray;
vertical-align: middle;
width: 30px;
display: inline-block;
}
.title-container {
position: relative;
.title {
font-size: 26px;
color: $light_gray;
margin: 0px auto 40px auto;
text-align: center;
font-weight: bold;
}
}
.show-pwd {
position: absolute;
right: 10px;
@ -248,4 +349,149 @@
user-select: none;
}
}
@media (max-width:492px) {
.login-container {
.login-logo{
width:100%;
}
.login-wrap {
margin-left: 0px;
margin-right: 0px;
.login-logo1 {
display: none;
}
.login-form1 {
width: 100%;
margin: 0 auto // height: 530px;
}
}
}
}
@media (min-width:493px) {
.login-container {
.login-wrap {
margin-left: 0px;
margin-right: 0px;
.login-logo1 {
display: none;
}
.login-form1 {
width: 493px;
margin: 0 auto // height: 530px;
}
}
}
}
@media (min-width:768px) {
.login-container {
.login-wrap {
margin-left: 100px;
margin-right: 50px;
.login-logo1 {
display: none;
}
.login-form1 {
width: 493px;
margin: 0 auto // height: 530px;
}
}
}
}
@media (min-width:992px) {
.login-container {
.login-wrap {
margin-left: 100px;
margin-right: 50px;
.login-logo1 {
display: block;
width: 217
}
.login-form1 {
width: 493px;
margin: 0;
// height: 530px;
}
}
}
}
@media (min-width:1220px) {
.login-container {
.login-wrap {
margin-left: 150px;
margin-right: 100px;
.login-logo1 {
display: block;
}
.login-form1 {
margin: 0
}
}
}
}
@media (min-width:1320px) {
.login-container {
.login-wrap {
margin-left: 15vw;
margin-right: 10vw;
.login-logo1 {
display: block;
}
.login-form1 {
margin: 0
}
}
}
}
@media (min-width:1440px) {
.login-container {
.login-wrap {
margin-left: 20vw;
margin-right: 10vw;
.login-logo1 {
display: block;
}
.login-form1 {
margin: 0
}
}
}
}
// @media (min-width:992px) {
// .login-container {
// .login-wrap {
// margin-left: 200px;
// margin-right: 150px;
// .login-logo1 {
// display: block;
// }
// // .login-form1 {
// // width: 593px;
// // // height: 530px;
// // }
// }
// }
// }
</style>

@ -209,9 +209,9 @@
import {
show
} from '@/api/student/index.js'
// import {
// show
// } from '@/api/student/index.js'
import {
save
} from '@/api/apply/index.js'
import myMixins from "@/mixin/selectMixin.js";
export default {
mixins: [myMixins],
@ -224,7 +224,8 @@
type: 'show',
id: '',
subjectObj:{},
student_info: {},
student_info: {},
row:{},
form: {
show: '',
status:'',
@ -239,10 +240,12 @@
if (this.id) {
this.form.id = this.id
}
save({
...this.form
save({
...this.row,
status:this.form.status,
remark:this.form.remark
}).then(res => {
Message({
this.$message({
type: 'success',
message: '审核成功'
})
@ -263,7 +266,8 @@
isShow(newVal) {
if (newVal) {
if (this.type === 'show' || this.type === 'check') {
this.getDetail()
this.getDetail()
console.log("row",this.row)
}
} else {
this.id = ''

Loading…
Cancel
Save