Browse Source

Merge branch 'ren' into dev

dev
renguanyu111 4 years ago
parent
commit
86986a22b9
  1. 11
      web/src/api/user.js
  2. 3
      web/src/router/index.js
  3. 38
      web/src/store/module/router.js
  4. 151
      web/src/store/module/user copy.js
  5. 33
      web/src/store/module/user.js
  6. 6
      web/src/view/layout/index.vue
  7. 203
      web/src/view/login/index copy.vue
  8. 10
      web/src/view/login/userLogin.vue
  9. 46
      web/src/view/performance/dataEntry/beAssessed.vue
  10. 17
      web/src/view/performance/dataEntry/category.vue
  11. 4
      web/src/view/process/guanli/layout.vue

11
web/src/api/user.js

@ -11,6 +11,17 @@ export const login = (data) => {
data: data
})
}
// @Summary 用户端登录
// @Produce application/json
// @Param data body {username:"string",password:"string"}
// @Router /base/login [post]
export const mylogin = (data) => {
return service({
url: '/base/mylogin',
method: 'post',
data: data
})
}
// @Summary 获取验证码
// @Produce application/json

3
web/src/router/index.js

@ -18,7 +18,8 @@ const routes = [{
path: '/userlogin',
name: 'Userlogin',
component: () => import('@/view/login/userLogin.vue')
}
},
]
const router = createRouter({

38
web/src/store/module/router.js

@ -52,6 +52,44 @@ export const router = {
actions: {
// 从后台获取动态路由
async SetAsyncRouter({ commit }) {
console.log("从后台获取动态路由")
const baseRouter = [{
path: '/layout',
name: 'layout',
component: 'view/layout/index.vue',
meta: {
title: '底层layout'
},
children: []
}]
const asyncRouterRes = await asyncMenu()
const asyncRouter = asyncRouterRes.data.menus
asyncRouter.push({
path: '404',
name: '404',
hidden: true,
meta: {
title: '迷路了*。*',
},
component: 'view/error/index.vue'
})
formatRouter(asyncRouter)
baseRouter[0].children = asyncRouter
baseRouter.push({
path: '/:catchAll(.*)',
redirect: '/layout/404'
})
asyncRouterHandle(baseRouter)
KeepAliveFilter(asyncRouter)
commit('setAsyncRouter', baseRouter)
commit('setRouterList', routerList)
commit('setKeepAliveRouters', keepAliveRouters)
return true
},
// 跳转路由
async goLayout({ commit }) {
console.log("从后台获取动态路由")
const baseRouter = [{
path: '/layout',
name: 'layout',

151
web/src/store/module/user copy.js

@ -0,0 +1,151 @@
import { login, getUserInfo, setUserInfo,mylogin } from '@/api/user'
import { jsonInBlacklist } from '@/api/jwt'
import router from '@/router/index'
import { ElMessage } from 'element-plus'
export const user = {
namespaced: true,
state: {
userInfo: {
uuid: '',
nickName: '',
headerImg: '',
authority: {},
sideMode: 'dark',
activeColor: '#4D70FF',
baseColor: '#fff'
},
token: '',
},
mutations: {
setUserInfo(state, userInfo) {
// 这里的 `state` 对象是模块的局部状态
state.userInfo = userInfo
},
setToken(state, token) {
// 这里的 `state` 对象是模块的局部状态
state.token = token
},
NeedInit(state) {
state.userInfo = {}
state.token = ''
sessionStorage.clear()
router.push({ name: 'Init', replace: true })
},
LoginOut(state) {
state.userInfo = {}
state.token = ''
sessionStorage.clear()
router.push({ name: 'Login', replace: true })
window.location.reload()
},
ResetUserInfo(state, userInfo = {}) {
state.userInfo = { ...state.userInfo,
...userInfo
}
},
ChangeSideMode: (state, val) => {
state.userInfo.sideMode = val
},
},
actions: {
async GetUserInfo({ commit }) {
const res = await getUserInfo()
if (res.code === 0) {
commit('setUserInfo', res.data.userInfo)
}
return res
},
async LoginIn({ commit, dispatch, rootGetters, getters }, loginInfo) {
const res = await login(loginInfo)
if (res.code === 0) {
commit('setUserInfo', res.data.user)
commit('setToken', res.data.token)
await dispatch('router/SetAsyncRouter', {}, { root: true })
const asyncRouters = rootGetters['router/asyncRouters']
asyncRouters.forEach(asyncRouter => {
router.addRoute(asyncRouter)
})
// const redirect = router.history.current.query.redirect
// console.log(redirect)
// if (redirect) {
// router.push({ path: redirect })
// } else {
router.push({ name: getters['userInfo'].authority.defaultRouter })
// }
return true
}
},
async myLoginIn({ commit, dispatch, rootGetters, getters }, loginInfo) {
const res = await mylogin(loginInfo)
if (res.code === 0) {
commit('setUserInfo', res.data.user)
commit('setToken', res.data.token)
await dispatch('router/SetAsyncRouter', {}, { root: true })
const asyncRouters = rootGetters['router/asyncRouters']
asyncRouters.forEach(asyncRouter => {
router.addRoute(asyncRouter)
})
// const redirect = router.history.current.query.redirect
// console.log(redirect)
// if (redirect) {
// router.push({ path: redirect })
// } else {
router.push({ name: getters['userInfo'].authority.defaultRouter })
// }
return true
}
},
async LoginOut({ commit }) {
const res = await jsonInBlacklist()
if (res.code === 0) {
commit('LoginOut')
}
},
async changeSideMode({ commit, state }, data) {
const res = await setUserInfo({ sideMode: data, ID: state.userInfo.ID })
if (res.code === 0) {
commit('ChangeSideMode', data)
ElMessage({
type: 'success',
message: '设置成功'
})
}
},
},
getters: {
userInfo(state) {
return state.userInfo
},
token(state) {
return state.token
},
mode(state) {
return state.userInfo.sideMode
},
sideMode(state) {
if (state.userInfo.sideMode === 'dark') {
return '#191a23'
} else if (state.userInfo.sideMode === 'light') {
return '#fff'
} else {
return state.userInfo.sideMode
}
},
baseColor(state) {
if (state.userInfo.sideMode === 'dark') {
return '#fff'
} else if (state.userInfo.sideMode === 'light') {
return '#191a23'
} else {
return state.userInfo.baseColor
}
},
activeColor(state) {
if (state.userInfo.sideMode === 'dark' || state.userInfo.sideMode === 'light') {
return '#4D70FF'
}
return state.userInfo.activeColor
}
}
}

33
web/src/store/module/user.js

@ -1,4 +1,4 @@
import { login, getUserInfo, setUserInfo } from '@/api/user'
import { login, getUserInfo, setUserInfo,mylogin } from '@/api/user'
import { jsonInBlacklist } from '@/api/jwt'
import router from '@/router/index'
import { ElMessage } from 'element-plus'
@ -7,6 +7,7 @@ export const user = {
namespaced: true,
state: {
userInfo: {
key:'',
uuid: '',
nickName: '',
headerImg: '',
@ -22,6 +23,10 @@ export const user = {
// 这里的 `state` 对象是模块的局部状态
state.userInfo = userInfo
},
setKey(state, key) {
// 这里的 `state` 对象是模块的局部状态
state.key = key
},
setToken(state, token) {
// 这里的 `state` 对象是模块的局部状态
state.token = token
@ -76,6 +81,32 @@ export const user = {
return true
}
},
async myLoginIn({ commit, dispatch, rootGetters, getters }, loginInfo) {
const res = await mylogin(loginInfo)
if (res.code === 0) {
commit('setUserInfo', res.data.userinfo)
commit('setToken', res.data.token)
commit('setKey', res.data.key)
await dispatch('router/SetAsyncRouter', {}, { root: true })
const asyncRouters = rootGetters['router/asyncRouters']
asyncRouters.forEach(asyncRouter => {
router.addRoute(asyncRouter)
})
// await dispatch('router/SetAsyncRouter', {}, { root: true })
// const asyncRouters = rootGetters['router/asyncRouters']
// asyncRouters.forEach(asyncRouter => {
// router.addRoute(asyncRouter)
// })
// const redirect = router.history.current.query.redirect
// console.log(redirect)
// if (redirect) {
// router.push({ path: redirect })
// } else {
router.push({ name: getters['userInfo'] })
// }
return true
}
},
async LoginOut({ commit }) {
const res = await jsonInBlacklist()
if (res.code === 0) {

6
web/src/view/layout/index.vue

@ -155,6 +155,12 @@ export default {
}
},
created() {
console.log("-----------------------------------------layout-------------------------------------------")
console.log("-----------------------------------------layout-------------------------------------------")
console.log("-----------------------------------------layout-------------------------------------------")
console.log("-----------------------------------------layout-------------------------------------------")
console.log("-----------------------------------------layout-------------------------------------------")
console.log("-----------------------------------------layout-------------------------------------------")
const screenWidth = document.body.clientWidth
if (screenWidth < 1000) {
this.isMobile = true

203
web/src/view/login/index copy.vue

@ -0,0 +1,203 @@
<template>
<div id="userLayout">
<div class="login_panle">
<div class="login_panle_form">
<div class="login_panle_form_title">
<!-- <img
class="login_panle_form_title_logo"
:src="$GIN_VUE_ADMIN.appLogo"
alt
/> -->
<p class="login_panle_form_title_p">{{ $GIN_VUE_ADMIN.appName }}后台管理系统</p>
</div>
<el-form
ref="loginForm"
:model="loginForm"
:rules="rules"
@keyup.enter="submitForm"
>
<el-form-item prop="username">
<el-input v-model="loginForm.username" placeholder="请输入用户名">
<template #suffix>
<i class="el-input__icon el-icon-user" />
</template>
</el-input>
</el-form-item>
<el-form-item prop="password">
<el-input
v-model="loginForm.password"
:type="lock === 'lock' ? 'password' : 'text'"
placeholder="请输入密码"
>
<template #suffix>
<i
:class="'el-input__icon el-icon-' + lock"
@click="changeLock"
/>
</template>
</el-input>
</el-form-item>
<el-form-item style="position: relative" prop="captcha">
<el-input
v-model="loginForm.captcha"
name="logVerify"
placeholder="请输入验证码"
style="width: 60%"
/>
<div class="vPic">
<img
v-if="picPath"
:src="picPath"
alt="请输入验证码"
@click="loginVerify()"
/>
</div>
</el-form-item>
<el-form-item>
<!-- <el-button type="primary" style="width: 46%" @click="checkInit"
>前往初始化</el-button
> -->
<!-- <el-button type="primary" style="width: 46%" @click="goUser"
>前往用户端登录</el-button
> -->
<el-button
type="primary"
style="width: 46%; margin-left: 25%"
@click="submitForm"
> </el-button
>
</el-form-item>
</el-form>
</div>
<div class="login_panle_right" />
<!-- <div class="login_panle_foot">
<div class="links">
<a href="http://doc.henrongyi.top/">
<img src="@/assets/docs.png" class="link-icon" />
</a>
<a href="https://www.yuque.com/flipped-aurora/">
<img src="@/assets/yuque.png" class="link-icon" />
</a>
<a href="https://github.com/flipped-aurora/gin-vue-admin">
<img src="@/assets/github.png" class="link-icon" />
</a>
<a href="https://space.bilibili.com/322210472">
<img src="@/assets/video.png" class="link-icon" />
</a>
</div>
<div class="copyright">
Copyright &copy; {{ curYear }} 💖 flipped-aurora
</div>
</div> -->
</div>
</div>
</template>
<script>
import { mapActions } from 'vuex'
import { captcha } from '@/api/user'
import { checkDB } from '@/api/initdb'
export default {
name: 'Login',
data() {
const checkUsername = (rule, value, callback) => {
if (value.length < 5) {
return callback(new Error('请输入正确的用户名'))
} else {
callback()
}
}
const checkPassword = (rule, value, callback) => {
if (value.length < 6) {
return callback(new Error('请输入正确的密码'))
} else {
callback()
}
}
return {
curYear: 0,
lock: 'lock',
loginForm: {
username: 'admin',
password: '123456',
captcha: '',
captchaId: ''
},
rules: {
username: [{ validator: checkUsername, trigger: 'blur' }],
password: [{ validator: checkPassword, trigger: 'blur' }],
captcha: [{ required: true, message: '请输入验证码', trigger: 'blur' },
{
min: 5,
max: 6,
message: '验证码格式不正确',
trigger: 'blur',
}]
},
logVerify: '',
picPath: ''
}
},
created() {
this.loginVerify()
this.curYear = new Date().getFullYear()
},
methods: {
...mapActions('user', ['LoginIn']),
goUser(){
this.$router.push({ name: 'Userlogin' })
},
async checkInit() {
const res = await checkDB()
if (res.code === 0) {
if (res.data?.needInit) {
this.$store.commit('user/NeedInit')
this.$router.push({ name: 'Init' })
} else {
this.$message({
type: 'info',
message: '已配置数据库信息,无法初始化'
})
}
}
},
async login() {
return await this.LoginIn(this.loginForm)
},
async submitForm() {
this.$refs.loginForm.validate(async(v) => {
if (v) {
const flag = await this.login()
if (!flag) {
this.loginVerify()
}
} else {
this.$message({
type: 'error',
message: '请正确填写登录信息',
showClose: true
})
this.loginVerify()
return false
}
})
},
changeLock() {
this.lock = this.lock === 'lock' ? 'unlock' : 'lock'
},
loginVerify() {
captcha({}).then((ele) => {
this.picPath = ele.data.picPath
this.loginForm.captchaId = ele.data.captchaId
})
}
}
}
</script>
<style lang="scss" scoped>
@import "@/style/newLogin.scss";
</style>

10
web/src/view/login/userLogin.vue

@ -95,13 +95,13 @@ export default {
curYear: 0,
lock: 'lock',
loginForm: {
username: 'admin',
password: '123456',
username: '',
password: '',
captcha: '',
captchaId: ''
},
rules: {
username: [{ validator: checkUsername, trigger: 'blur' }],
username: [{ required: true, message: '请输入工号',trigger: 'blur' }],
password: [{ validator: checkPassword, trigger: 'blur' }],
captcha: [{ required: true, message: '请输入验证码', trigger: 'blur' },
{
@ -120,7 +120,7 @@ export default {
this.curYear = new Date().getFullYear()
},
methods: {
...mapActions('user', ['LoginIn']),
...mapActions('user', ['myLoginIn']),
async checkInit() {
const res = await checkDB()
if (res.code === 0) {
@ -136,7 +136,7 @@ export default {
}
},
async login() {
return await this.LoginIn(this.loginForm)
return await this.myLoginIn(this.loginForm)
},
async submitForm() {
this.$refs.loginForm.validate(async(v) => {

46
web/src/view/performance/dataEntry/beAssessed.vue

@ -44,7 +44,11 @@
/>
</template>
</el-table-column>
<el-table-column align="left" label="分值" prop="rescore"/>
<el-table-column align="left" label="分值" prop="rescore">
<template #default="scope">
{{scope.row.rescore/10}}
</template>
</el-table-column>
<el-table-column align="left" fixed="right" label="操作" width="200">
<template #default="scope">
<el-button
@ -77,9 +81,7 @@
</div>
<!-- 添加 -->
<el-dialog v-model="dialogFormVisible" :before-close="closeDialog" :title="dialogTitle" width="30%">
<el-form ref="apiForm" :model="form" :rules="rules" label-width="150px">
<el-form-item label="所属考核项目">
<span>
<el-tag v-if="addChildInfo.title!=''">{{addChildInfo.title}}</el-tag>
@ -131,7 +133,7 @@
<script>
// mixins getTableData this.searchInfo
import { toRaw } from '@vue/reactivity';
import {
specdutylist,
adddepartdutyinfo,
@ -181,6 +183,7 @@ export default {
data() {
return {
editForm:{
score:Number
},
editDialogFormVisible:false,
addChildInfo:{
@ -248,9 +251,14 @@ export default {
async editInfo(){
// this.editform.userid=this.editform.userid.toString();
// delete this.editform.id
this.editForm.score=parseInt(this.editForm.rescore);
this.editForm.dutyId=this.editForm.dutyId.toString();
this.editForm.parentId=this.editForm.parentId.toString();
console.log(toRaw(this.editForm).rescore)
toRaw(this.editForm).score=toRaw(this.editForm).rescore*10;
console.log("this.editForm.score")
console.log(toRaw(this.editForm).score)
toRaw(this.editForm).dutyId=this.editForm.dutyId.toString();
toRaw(this.editForm).parentId=this.editForm.parentId.toString();
console.log("提交")
console.log(this.editForm)
const res = await eitedepartdutyinfo(this.editForm)
if (res.code === 0) {
this.$message({
@ -393,9 +401,11 @@ export default {
},
initForm() {
this.$refs.apiForm.resetFields()
this.addChildInfo= {
title:'',
outid:''
}
this.form = {
parentId:'',
dutyId:'',
}
},
editInitForm (){
@ -438,19 +448,17 @@ export default {
// },
async editApi(row) {
this.editFrom.outid=row.outId
const res = await getspecdutyinfo(this.editFrom)
this.editChildInfo.title=res.data.duryTitle
this.editForm = res.data
this.editForm.score=res.data.rescore
// this.editForm.rescore=this.editForm.rescore.toString();
this.editForm.parentId=parseInt(this.editForm.parentId);
console.log("editForm")
console.log(this.editForm)
console.log(this.editChildInfo)
this.editForm =res.data ;
// this.editForm =toRaw(this.editForm)
toRaw(this.editForm).rescore=toRaw(this.editForm).rescore/10
toRaw(this.editForm).parentId=parseInt(toRaw(this.editForm).parentId);
this.editDialogFormVisible=true
console.log(res.data)
console.log(toRaw(this.editForm))
},
//
async deleteOperate(row) {
@ -484,7 +492,7 @@ export default {
console.log(this.addChildInfo)
this.form.dutyId=this.addChildInfo.outId
this.form.parentId=this.form.parentId.toString()
this.form.score=parseInt(this.form.score);
this.form.score=parseInt(this.form.score)*10;
const res = await adddepartdutyinfo(this.form)
if (res.code === 0) {
this.$message({

17
web/src/view/performance/dataEntry/category.vue

@ -1,16 +1,16 @@
<template>
<!-- 考核类别录入 -->
<!-- 考核维度录入 -->
<div>
<div class="gva-search-box">
<el-form ref="searchForm" :inline="true" :model="searchInfo">
<el-form-item label="考核类别名称">
<el-form-item label="考核维度名称">
<el-input
placeholder="请输入名称"
v-model="searchInfo.title"
clearable>
</el-input>
</el-form-item>
<el-form-item label="考核类别状态">
<el-form-item label="考核维度状态">
<el-select v-model="searchInfo.state" clearable placeholder="请选择状态">
<el-option :value=1 label="正常">正常</el-option>
<el-option :value=2 label="禁止">禁止</el-option>
@ -41,9 +41,9 @@
type="selection"
width="55"
/> -->
<el-table-column align="left" label="考核类别ID" prop="outId"/>
<el-table-column align="left" label="考核类别名称" prop="title"/>
<el-table-column align="left" label="考核类别状态">
<el-table-column align="left" label="考核维度ID" prop="outId"/>
<el-table-column align="left" label="考核维度名称" prop="title"/>
<el-table-column align="left" label="考核维度状态">
<template #default="scope">
<el-switch
inline-prompt
@ -92,7 +92,7 @@
<el-dialog v-model="dialogFormVisible" :before-close="closeDialog" :title="dialogTitle" width="20%">
<el-form ref="apiForm" :model="form" :rules="rules" label-width="150px">
<el-form-item label="考核类别名称" prop="title">
<el-form-item label="考核维度名称" prop="title">
<el-input v-model="form.title" autocomplete="off" />
</el-form-item>
</el-form>
@ -172,7 +172,7 @@ export default {
methodOptions: methodOptions,
type: '',
rules: {
title: [{ required: true, message: '考核类别名称', trigger: 'blur' }],
title: [{ required: true, message: '考核维度名称', trigger: 'blur' }],
}
}
@ -284,6 +284,7 @@ export default {
this.editFrom.outid=row.outId
const res = await getdutyclassinfo(this.editFrom)
this.form = res.data
console.log(this.form)
this.openDialog('edit')
},
//

4
web/src/view/process/guanli/layout.vue

@ -20,9 +20,7 @@
</div>
</div>
<el-dialog title="请使用手机扫码预览" :visible.sync="viewCode" width="300px" :close-on-click-modal="false" center>
<img src="../assets/image/code.png" width="250" height="250">
</el-dialog>
<div class="layout-body">
<transition name="router-fade" mode="out-in">

Loading…
Cancel
Save