Browse Source

Merge branch 'dev_0814' of http://121.42.41.42:7070/r/esua-epdc-admin into dev_0814

master
王金鹏 6 years ago
parent
commit
b211b223d6
  1. 1
      .gitignore
  2. 6
      public/index.html
  3. 6
      src/i18n/zh-CN.js
  4. 75
      src/views/main-navbar.vue
  5. 8
      src/views/modules/home.vue
  6. 144
      src/views/modules/sys/user-add-or-update.vue
  7. 69
      src/views/pages/login.vue

1
.gitignore

@ -7,6 +7,7 @@
*.jar *.jar
*.war *.war
*.ear *.ear
*.zip
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid* hs_err_pid*

6
public/index.html

@ -13,8 +13,8 @@
window.SITE_CONFIG['storeState'] = {}; // vuex本地储存初始化状态(用于不刷新页面的情况下,也能重置初始化项目中所有状态) window.SITE_CONFIG['storeState'] = {}; // vuex本地储存初始化状态(用于不刷新页面的情况下,也能重置初始化项目中所有状态)
window.SITE_CONFIG['contentTabDefault'] = { // 内容标签页默认属性对象 window.SITE_CONFIG['contentTabDefault'] = { // 内容标签页默认属性对象
'name': '', // 名称, 由 this.$route.name 自动赋值(默认,名称 === 路由名称 === 路由路径) 'name': '', // 名称, 由 this.$route.name 自动赋值(默认,名称 === 路由名称 === 路由路径)
'params': {}, // 参数, 由 this.$route.params 自动赋值 'params': {}, // 参数, 由 this.$route.params 自动赋值
'query': {}, // 查询参数, 由 this.$route.query 自动赋值 'query': {}, // 查询参数, 由 this.$route.query 自动赋值
'menuId': '', // 菜单id(用于选中侧边栏菜单,与this.$store.state.sidebarMenuActiveName进行匹配) 'menuId': '', // 菜单id(用于选中侧边栏菜单,与this.$store.state.sidebarMenuActiveName进行匹配)
'title': '', // 标题 'title': '', // 标题
'isTab': true, // 是否通过tab展示内容? 'isTab': true, // 是否通过tab展示内容?
@ -33,7 +33,7 @@
<% } %> <% } %>
<!-- 集成测试环境 --> <!-- 集成测试环境 -->
<% if (process.env.VUE_APP_NODE_ENV === 'prod:sit') { %> <% if (process.env.VUE_APP_NODE_ENV === 'prod:sit') { %>
<script>window.SITE_CONFIG['apiURL'] = 'https://epdc.elinkchina.com.cn';</script> <script>window.SITE_CONFIG['apiURL'] = 'http://localhost:8080';</script>
<% } %> <% } %>
<!-- 验收测试环境 --> <!-- 验收测试环境 -->
<% if (process.env.VUE_APP_NODE_ENV === 'prod:uat') { %> <% if (process.env.VUE_APP_NODE_ENV === 'prod:uat') { %>

6
src/i18n/zh-CN.js

@ -3,8 +3,8 @@ const t = {}
t.loading = '加载中...' t.loading = '加载中...'
t.brand = {} t.brand = {}
t.brand.lg = '人人微服务平台' t.brand.lg = '党群e家后台管理系统'
t.brand.mini = '人人' t.brand.mini = '党群'
t.add = '新增' t.add = '新增'
t.delete = '删除' t.delete = '删除'
@ -72,7 +72,7 @@ t.login.username = '用户名'
t.login.password = '密码' t.login.password = '密码'
t.login.captcha = '验证码' t.login.captcha = '验证码'
t.login.demo = '在线演示' t.login.demo = '在线演示'
t.login.copyright = '人人开源' t.login.copyright = '青岛亿联信息科技股份有限公司'
t.home = {} t.home = {}
t.home.desc = {} t.home.desc = {}

75
src/views/main-navbar.vue

@ -1,39 +1,67 @@
<template> <template>
<nav class="aui-navbar" :class="`aui-navbar--${$store.state.navbarLayoutType}`"> <nav class="aui-navbar"
:class="`aui-navbar--${$store.state.navbarLayoutType}`">
<div class="aui-navbar__header"> <div class="aui-navbar__header">
<h1 class="aui-navbar__brand" @click="$router.push({ name: 'home' })"> <h1 class="aui-navbar__brand"
<a class="aui-navbar__brand-lg" href="javascript:;">{{ $t('brand.lg') }}</a> style="text-transform: none;"
<a class="aui-navbar__brand-mini" href="javascript:;">{{ $t('brand.mini') }}</a> @click="$router.push({ name: 'home' })">
<a class="aui-navbar__brand-lg"
href="javascript:;">{{ $t('brand.lg') }}</a>
<a class="aui-navbar__brand-mini"
href="javascript:;">{{ $t('brand.mini') }}</a>
</h1> </h1>
</div> </div>
<div class="aui-navbar__body"> <div class="aui-navbar__body">
<el-menu class="aui-navbar__menu mr-auto" mode="horizontal"> <el-menu class="aui-navbar__menu mr-auto"
<el-menu-item index="1" @click="$store.state.sidebarFold = !$store.state.sidebarFold"> mode="horizontal">
<svg class="icon-svg aui-navbar__icon-menu aui-navbar__icon-menu--switch" aria-hidden="true"><use xlink:href="#icon-outdent"></use></svg> <el-menu-item index="1"
@click="$store.state.sidebarFold = !$store.state.sidebarFold">
<svg class="icon-svg aui-navbar__icon-menu aui-navbar__icon-menu--switch"
aria-hidden="true">
<use xlink:href="#icon-outdent"></use>
</svg>
</el-menu-item> </el-menu-item>
<el-menu-item index="2" @click="refresh()"> <el-menu-item index="2"
<svg class="icon-svg aui-navbar__icon-menu aui-navbar__icon-menu--refresh" aria-hidden="true"><use xlink:href="#icon-sync"></use></svg> @click="refresh()">
<svg class="icon-svg aui-navbar__icon-menu aui-navbar__icon-menu--refresh"
aria-hidden="true">
<use xlink:href="#icon-sync"></use>
</svg>
</el-menu-item> </el-menu-item>
</el-menu> </el-menu>
<el-menu class="aui-navbar__menu" mode="horizontal"> <el-menu class="aui-navbar__menu"
<el-menu-item index="1"> mode="horizontal">
<el-dropdown placement="bottom" :show-timeout="0"> <!-- <el-menu-item index="1">
<el-dropdown placement="bottom"
:show-timeout="0">
<el-button size="mini">{{ $t('_lang') }}</el-button> <el-button size="mini">{{ $t('_lang') }}</el-button>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="(val, key) in i18nMessages" :key="key" @click.native="$i18n.locale = key">{{ val._lang }}</el-dropdown-item> <el-dropdown-item v-for="(val, key) in i18nMessages"
:key="key"
@click.native="$i18n.locale = key">{{ val._lang }}</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</el-menu-item> </el-menu-item>
<el-menu-item index="2"> <el-menu-item index="2">
<a href="//www.renren.io/" target="_blank"> <a href="//www.renren.io/"
<svg class="icon-svg aui-navbar__icon-menu" aria-hidden="true"><use xlink:href="#icon-earth"></use></svg> target="_blank">
<svg class="icon-svg aui-navbar__icon-menu"
aria-hidden="true">
<use xlink:href="#icon-earth"></use>
</svg>
</a> </a>
</el-menu-item> -->
<el-menu-item index="3"
@click="fullscreenHandle()">
<svg class="icon-svg aui-navbar__icon-menu"
aria-hidden="true">
<use xlink:href="#icon-fullscreen"></use>
</svg>
</el-menu-item> </el-menu-item>
<el-menu-item index="3" @click="fullscreenHandle()"> <el-menu-item index="4"
<svg class="icon-svg aui-navbar__icon-menu" aria-hidden="true"><use xlink:href="#icon-fullscreen"></use></svg> class="aui-navbar__avatar">
</el-menu-item> <el-dropdown placement="bottom"
<el-menu-item index="4" class="aui-navbar__avatar"> :show-timeout="0">
<el-dropdown placement="bottom" :show-timeout="0">
<span class="el-dropdown-link"> <span class="el-dropdown-link">
<img src="~@/assets/img/avatar.png"> <img src="~@/assets/img/avatar.png">
<span>{{ $store.state.user.realName }}</span> <span>{{ $store.state.user.realName }}</span>
@ -48,7 +76,8 @@
</el-menu> </el-menu>
</div> </div>
<!-- 弹窗, 修改密码 --> <!-- 弹窗, 修改密码 -->
<update-password v-if="updatePassowrdVisible" ref="updatePassowrd"></update-password> <update-password v-if="updatePassowrdVisible"
ref="updatePassowrd"></update-password>
</nav> </nav>
</template> </template>
@ -100,8 +129,8 @@ export default {
} }
clearLoginInfo() clearLoginInfo()
this.$router.push({ name: 'login' }) this.$router.push({ name: 'login' })
}).catch(() => {}) }).catch(() => { })
}).catch(() => {}) }).catch(() => { })
} }
} }
} }

8
src/views/modules/home.vue

@ -1,10 +1,8 @@
<template> <template>
<el-card shadow="never" class="aui-card--fill"> <el-card shadow="never"
class="aui-card--fill">
<div class="mod-home"> <div class="mod-home">
<h3>{{ $t('home.desc.title') }}</h3> <h1>欢迎使用党群e家后台管理系统</h1>
<ul>
<li v-for="item in $t('home.desc.list')" :key="item" v-html="item"></li>
</ul>
</div> </div>
</el-card> </el-card>
</template> </template>

144
src/views/modules/sys/user-add-or-update.vue

@ -1,52 +1,104 @@
<template> <template>
<el-dialog :visible.sync="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false"> <el-dialog :visible.sync="visible"
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" label-width="120px"> :title="!dataForm.id ? $t('add') : $t('update')"
<el-form-item prop="username" :label="$t('user.username')"> :close-on-click-modal="false"
<el-input v-model="dataForm.username" :placeholder="$t('user.username')"></el-input> :close-on-press-escape="false">
<el-form :model="dataForm"
:rules="dataRule"
ref="dataForm"
@keyup.enter.native="dataFormSubmitHandle()"
label-width="120px">
<el-form-item prop="username"
:label="$t('user.username')">
<el-input v-model="dataForm.username"
:placeholder="$t('user.username')"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="deptName" :label="$t('user.deptName')" class="dept-list"> <el-form-item prop="deptName"
<el-popover v-model="deptListVisible" ref="deptListPopover" placement="bottom-start" trigger="click"> :label="$t('user.deptName')"
<el-tree class="dept-list">
:data="deptList" <el-popover v-model="deptListVisible"
:props="{ label: 'name', children: 'children' }" ref="deptListPopover"
node-key="id" placement="bottom-start"
ref="deptListTree" trigger="click">
:highlight-current="true" <el-tree :data="deptList"
:expand-on-click-node="false" :props="{ label: 'name', children: 'children' }"
accordion node-key="id"
@current-change="deptListTreeCurrentChangeHandle"> ref="deptListTree"
:highlight-current="true"
:expand-on-click-node="false"
accordion
@current-change="deptListTreeCurrentChangeHandle">
</el-tree> </el-tree>
</el-popover> </el-popover>
<el-input v-model="dataForm.deptName" v-popover:deptListPopover :readonly="true" :placeholder="$t('user.deptName')"></el-input> <el-input v-model="dataForm.deptName"
v-popover:deptListPopover
:readonly="true"
:placeholder="$t('user.deptName')"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="password" :label="$t('user.password')" :class="{ 'is-required': !dataForm.id }"> <el-form-item label="用户类型"
<el-input v-model="dataForm.password" type="password" :placeholder="$t('user.password')"></el-input> prop="userTagKey">
<el-select v-model="dataForm.userTagKey"
placeholder="用户类型">
<el-option v-for="item in userTagDictList"
:key="item.dictValue"
:label="item.dictName"
:value="item.dictValue">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="password"
:label="$t('user.password')"
:class="{ 'is-required': !dataForm.id }">
<el-input v-model="dataForm.password"
type="password"
:placeholder="$t('user.password')"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="comfirmPassword" :label="$t('user.comfirmPassword')" :class="{ 'is-required': !dataForm.id }"> <el-form-item prop="comfirmPassword"
<el-input v-model="dataForm.comfirmPassword" type="password" :placeholder="$t('user.comfirmPassword')"></el-input> :label="$t('user.comfirmPassword')"
:class="{ 'is-required': !dataForm.id }">
<el-input v-model="dataForm.comfirmPassword"
type="password"
:placeholder="$t('user.comfirmPassword')"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="realName" :label="$t('user.realName')"> <el-form-item prop="realName"
<el-input v-model="dataForm.realName" :placeholder="$t('user.realName')"></el-input> :label="$t('user.realName')">
<el-input v-model="dataForm.realName"
:placeholder="$t('user.realName')"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="gender" :label="$t('user.gender')" size="mini"> <el-form-item prop="gender"
:label="$t('user.gender')"
size="mini">
<el-radio-group v-model="dataForm.gender"> <el-radio-group v-model="dataForm.gender">
<el-radio :label="0">{{ $t('user.gender0') }}</el-radio> <el-radio :label="0">{{ $t('user.gender0') }}</el-radio>
<el-radio :label="1">{{ $t('user.gender1') }}</el-radio> <el-radio :label="1">{{ $t('user.gender1') }}</el-radio>
<el-radio :label="2">{{ $t('user.gender2') }}</el-radio> <el-radio :label="2">{{ $t('user.gender2') }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item prop="email" :label="$t('user.email')"> <el-form-item prop="email"
<el-input v-model="dataForm.email" :placeholder="$t('user.email')"></el-input> :label="$t('user.email')">
<el-input v-model="dataForm.email"
:placeholder="$t('user.email')"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="mobile" :label="$t('user.mobile')"> <el-form-item prop="mobile"
<el-input v-model="dataForm.mobile" :placeholder="$t('user.mobile')"></el-input> :label="$t('user.mobile')">
<el-input v-model="dataForm.mobile"
:placeholder="$t('user.mobile')"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="roleIdList" :label="$t('user.roleIdList')" class="role-list"> <el-form-item prop="roleIdList"
<el-select v-model="dataForm.roleIdList" multiple :placeholder="$t('user.roleIdList')"> :label="$t('user.roleIdList')"
<el-option v-for="role in roleList" :key="role.id" :label="role.name" :value="role.id"></el-option> class="role-list">
<el-select v-model="dataForm.roleIdList"
multiple
:placeholder="$t('user.roleIdList')">
<el-option v-for="role in roleList"
:key="role.id"
:label="role.name"
:value="role.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="status" :label="$t('user.status')" size="mini"> <el-form-item prop="status"
:label="$t('user.status')"
size="mini">
<el-radio-group v-model="dataForm.status"> <el-radio-group v-model="dataForm.status">
<el-radio :label="0">{{ $t('user.status0') }}</el-radio> <el-radio :label="0">{{ $t('user.status0') }}</el-radio>
<el-radio :label="1">{{ $t('user.status1') }}</el-radio> <el-radio :label="1">{{ $t('user.status1') }}</el-radio>
@ -55,7 +107,8 @@
</el-form> </el-form>
<template slot="footer"> <template slot="footer">
<el-button @click="visible = false">{{ $t('cancel') }}</el-button> <el-button @click="visible = false">{{ $t('cancel') }}</el-button>
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> <el-button type="primary"
@click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
@ -83,8 +136,10 @@ export default {
email: '', email: '',
mobile: '', mobile: '',
roleIdList: [], roleIdList: [],
status: 1 status: 1,
} userTagKey: ''
},
userTagDictList: []
} }
}, },
computed: { computed: {
@ -139,6 +194,9 @@ export default {
mobile: [ mobile: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }, { required: true, message: this.$t('validate.required'), trigger: 'blur' },
{ validator: validateMobile, trigger: 'blur' } { validator: validateMobile, trigger: 'blur' }
],
userTagKey: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
] ]
} }
} }
@ -158,6 +216,7 @@ export default {
} }
}) })
}) })
this.getUserTagDicList()
}, },
// //
getDeptList () { getDeptList () {
@ -166,7 +225,7 @@ export default {
return this.$message.error(res.msg) return this.$message.error(res.msg)
} }
this.deptList = res.data this.deptList = res.data
}).catch(() => {}) }).catch(() => { })
}, },
// //
getRoleList () { getRoleList () {
@ -175,7 +234,16 @@ export default {
return this.$message.error(res.msg) return this.$message.error(res.msg)
} }
this.roleList = res.data this.roleList = res.data
}).catch(() => {}) }).catch(() => { })
},
//
getUserTagDicList () {
this.$http.get(`/sys/dict/listSimple/user_tag`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.userTagDictList = res.data
}).catch(() => { })
}, },
// //
getInfo () { getInfo () {
@ -197,7 +265,7 @@ export default {
} }
this.roleIdListDefault.push(res.data.roleIdList[i]) this.roleIdListDefault.push(res.data.roleIdList[i])
} }
}).catch(() => {}) }).catch(() => { })
}, },
// , // ,
deptListTreeCurrentChangeHandle (data, node) { deptListTreeCurrentChangeHandle (data, node) {
@ -230,7 +298,7 @@ export default {
this.$emit('refreshDataList') this.$emit('refreshDataList')
} }
}) })
}).catch(() => {}) }).catch(() => { })
}) })
}, 1000, { 'leading': true, 'trailing': false }) }, 1000, { 'leading': true, 'trailing': false })
} }

69
src/views/pages/login.vue

@ -3,55 +3,78 @@
<div class="aui-content__wrapper"> <div class="aui-content__wrapper">
<main class="aui-content"> <main class="aui-content">
<div class="login-header"> <div class="login-header">
<h2 class="login-brand">{{ $t('brand.lg') }}</h2> <h2 class="login-brand"
style="text-transform: none;">{{ $t('brand.lg') }}</h2>
</div> </div>
<div class="login-body"> <div class="login-body">
<h3 class="login-title">{{ $t('login.title') }}</h3> <h3 class="login-title">{{ $t('login.title') }}</h3>
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" status-icon> <el-form :model="dataForm"
<el-form-item> :rules="dataRule"
ref="dataForm"
@keyup.enter.native="dataFormSubmitHandle()"
status-icon>
<!-- <el-form-item>
<el-select v-model="$i18n.locale" class="w-percent-100"> <el-select v-model="$i18n.locale" class="w-percent-100">
<el-option v-for="(val, key) in i18nMessages" :key="key" :label="val._lang" :value="key"></el-option> <el-option v-for="(val, key) in i18nMessages" :key="key" :label="val._lang" :value="key"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item> -->
<el-form-item prop="username"> <el-form-item prop="username">
<el-input v-model="dataForm.username" :placeholder="$t('login.username')"> <el-input v-model="dataForm.username"
<span slot="prefix" class="el-input__icon"> :placeholder="$t('login.username')">
<svg class="icon-svg" aria-hidden="true"><use xlink:href="#icon-user"></use></svg> <span slot="prefix"
class="el-input__icon">
<svg class="icon-svg"
aria-hidden="true">
<use xlink:href="#icon-user"></use>
</svg>
</span> </span>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="password"> <el-form-item prop="password">
<el-input v-model="dataForm.password" type="password" :placeholder="$t('login.password')"> <el-input v-model="dataForm.password"
<span slot="prefix" class="el-input__icon"> type="password"
<svg class="icon-svg" aria-hidden="true"><use xlink:href="#icon-lock"></use></svg> :placeholder="$t('login.password')">
<span slot="prefix"
class="el-input__icon">
<svg class="icon-svg"
aria-hidden="true">
<use xlink:href="#icon-lock"></use>
</svg>
</span> </span>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="captcha"> <el-form-item prop="captcha">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="14"> <el-col :span="14">
<el-input v-model="dataForm.captcha" :placeholder="$t('login.captcha')"> <el-input v-model="dataForm.captcha"
<span slot="prefix" class="el-input__icon"> :placeholder="$t('login.captcha')">
<svg class="icon-svg" aria-hidden="true"><use xlink:href="#icon-safetycertificate"></use></svg> <span slot="prefix"
class="el-input__icon">
<svg class="icon-svg"
aria-hidden="true">
<use xlink:href="#icon-safetycertificate"></use>
</svg>
</span> </span>
</el-input> </el-input>
</el-col> </el-col>
<el-col :span="10" class="login-captcha"> <el-col :span="10"
<img :src="captchaPath" @click="getCaptcha()"> class="login-captcha">
<img :src="captchaPath"
@click="getCaptcha()">
</el-col> </el-col>
</el-row> </el-row>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="dataFormSubmitHandle()" class="w-percent-100">{{ $t('login.title') }}</el-button> <el-button type="primary"
@click="dataFormSubmitHandle()"
class="w-percent-100">{{ $t('login.title') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div class="login-footer"> <!-- <div class="login-footer">
<p> <p><a href="http://www.elinkit.com.cn/"
<a href="https://demo.cloud.renren.io/renren-cloud" target="_blank">{{ $t('login.demo') }}</a> target="_blank">{{ $t('login.copyright') }}</a>2020 © www.elinkit.com.cn</p>
</p> </div> -->
<p><a href="https://www.renren.io/" target="_blank">{{ $t('login.copyright') }}</a>2018 © renren.io</p>
</div>
</main> </main>
</div> </div>
</div> </div>
@ -112,7 +135,7 @@ export default {
} }
Cookies.set('token', res.data.token) Cookies.set('token', res.data.token)
this.$router.replace({ name: 'home' }) this.$router.replace({ name: 'home' })
}).catch(() => {}) }).catch(() => { })
}) })
}, 1000, { 'leading': true, 'trailing': false }) }, 1000, { 'leading': true, 'trailing': false })
} }

Loading…
Cancel
Save