Browse Source

first custom made

master
部署机器人 5 years ago
parent
commit
d69b77e25b
  1. 2
      config/index.js
  2. 2
      index.html
  3. 9608
      package-lock.json
  4. 21
      src/api/api.js
  5. 4
      src/main.js
  6. 2
      src/mock/data/user.js
  7. 33
      src/routes.js
  8. 8
      src/views/Home.vue
  9. 9
      src/views/Login.vue
  10. 287
      src/views/host/Hosts.vue
  11. 4
      src/views/log/Log.vue
  12. 33
      src/views/nav2/Page4.vue
  13. 4
      src/views/nav2/Page5.vue
  14. 4
      src/views/nav3/Page6.vue
  15. 0
      src/views/user/Form.vue
  16. 56
      src/views/user/Users.vue
  17. 0
      src/views/user/user.vue

2
config/index.js

@ -23,7 +23,7 @@ module.exports = {
},
dev: {
env: require('./dev.env'),
port: 8080,
port: 8081,
autoOpenBrowser: true,
assetsSubDirectory: 'static',
assetsPublicPath: '/',

2
index.html

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<title>vueadmin</title>
<title>跳板机管理平台</title>
</head>
<body>

9608
package-lock.json
File diff suppressed because it is too large
View File

21
src/api/api.js

@ -1,17 +1,30 @@
import axios from 'axios';
let base = '';
let url = 'http://192.168.1.44:8080';
export const requestLogin = params => { return axios.post(`${base}/login`, params).then(res => res.data); };
let postFormType = {
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
}
}
// axios.defaults.crossDomain = true;
// axios.defaults.withCredentials = true;
export const requestLogin = params => { return axios.post(`${url}/login`, params, postFormType).then(res => res.data); };
export const getUserList = params => { return axios.get(`${base}/user/list`, { params: params }); };
export const getUserListPage = params => { return axios.get(`${base}/user/listpage`, { params: params }); };
export const getUserListPage = params => { return axios.get(`${url}/jump/users`, { params: params }, ); };
export const removeUser = params => { return axios.get(`${base}/user/remove`, { params: params }); };
export const removeUser = params => { return axios.get(`${url}/jump/user/del`, { params: params }); };
export const batchRemoveUser = params => { return axios.get(`${base}/user/batchremove`, { params: params }); };
export const editUser = params => { return axios.get(`${base}/user/edit`, { params: params }); };
export const addUser = params => { return axios.get(`${base}/user/add`, { params: params }); };
export const addUser = params => { return axios.get(`${url}/jump/user/add`, { params: params }); };
// 获取主机列表
export const getHostList = params => { return axios.get(`${url}/jump/hosts`, { params: params }); };

4
src/main.js

@ -10,8 +10,8 @@ import Vuex from 'vuex'
//import NProgress from 'nprogress'
//import 'nprogress/nprogress.css'
import routes from './routes'
import Mock from './mock'
Mock.bootstrap();
// import Mock from './mock'
// Mock.bootstrap();
import 'font-awesome/css/font-awesome.min.css'
Vue.use(ElementUI)

2
src/mock/data/user.js

@ -5,7 +5,7 @@ const LoginUsers = [
username: 'admin',
password: '123456',
avatar: 'https://raw.githubusercontent.com/taylorchen709/markdown-images/master/vueadmin/user.png',
name: '张某某'
name: '郭岱靖'
}
];

33
src/routes.js

@ -1,13 +1,10 @@
import Login from './views/Login.vue'
import NotFound from './views/404.vue'
import Home from './views/Home.vue'
import Main from './views/Main.vue'
import Table from './views/nav1/Table.vue'
import Form from './views/nav1/Form.vue'
import user from './views/nav1/user.vue'
import Page4 from './views/nav2/Page4.vue'
import Page5 from './views/nav2/Page5.vue'
import Page6 from './views/nav3/Page6.vue'
// import Main from './views/Main.vue'
import Users from './views/user/Users.vue'
import Hosts from './views/host/Hosts.vue'
import Log from './views/log/Log.vue'
import echarts from './views/charts/echarts.vue'
let routes = [
@ -23,37 +20,33 @@ let routes = [
name: '',
hidden: true
},
//{ path: '/main', component: Main },
{
path: '/',
component: Home,
name: '导航一',
iconCls: 'el-icon-message',//图标样式class
name: '用户管理',
iconCls: 'fa fa-address-card',//图标样式class
children: [
{ path: '/main', component: Main, name: '主页', hidden: true },
{ path: '/table', component: Table, name: 'Table' },
{ path: '/form', component: Form, name: 'Form' },
{ path: '/user', component: user, name: '列表' },
// { path: '/main', component: Main, name: '主页', hidden: true },
{ path: '/users', component: Users, name: '用户列表' },
]
},
{
path: '/',
component: Home,
name: '导航二',
name: '主机管理',
iconCls: 'fa fa-id-card-o',
children: [
{ path: '/page4', component: Page4, name: '页面4' },
{ path: '/page5', component: Page5, name: '页面5' }
{ path: '/hosts', component: Hosts, name: '主机列表' },
]
},
{
path: '/',
component: Home,
name: '',
iconCls: 'fa fa-address-card',
name: '日志',
iconCls: 'el-icon-message', //el-icon-message
leaf: true,//只有一个节点
children: [
{ path: '/page6', component: Page6, name: '导航三' }
{ path: '/log', component: Log, name: '日志' }
]
},
{

8
src/views/Home.vue

@ -75,7 +75,7 @@
export default {
data() {
return {
sysName:'VUEADMIN',
sysName:'跳板机管理平台',
collapsed:false,
sysUserName: '',
sysUserAvatar: '',
@ -127,12 +127,14 @@
},
mounted() {
var user = sessionStorage.getItem('user');
console.log("home user:", user)
if (user) {
user = JSON.parse(user);
this.sysUserName = user.name || '';
this.sysUserAvatar = user.avatar || '';
this.sysUserAvatar = user.avatar || 'https://tva1.sinaimg.cn/large/00831rSTgy1gdnbps46azj30b40b43yr.jpg';
}
console.log("home name:", this.sysUserName)
console.log("home tar:", this.sysUserAvatar)
}
}

9
src/views/Login.vue

@ -47,14 +47,16 @@
var _this = this;
this.$refs.ruleForm2.validate((valid) => {
if (valid) {
//_this.$router.replace('/table');
//_this.$router.replace('/users');
this.logining = true;
//NProgress.start();
var loginParams = { username: this.ruleForm2.account, password: this.ruleForm2.checkPass };
console.log(loginParams)
requestLogin(loginParams).then(data => {
this.logining = false;
//NProgress.done();
let { msg, code, user } = data;
let { msg, code, user, sessionkey } = data;
console.log(msg, code, user, sessionkey)
if (code !== 200) {
this.$message({
message: msg,
@ -62,7 +64,8 @@
});
} else {
sessionStorage.setItem('user', JSON.stringify(user));
this.$router.push({ path: '/table' });
sessionStorage.setItem('cookie', sessionkey);
this.$router.push({ path: '/users' });
}
});
} else {

287
src/views/host/Hosts.vue

@ -0,0 +1,287 @@
<template>
<section>
<!--工具条-->
<el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
<el-form :inline="true" :model="filters">
<el-form-item>
<el-input v-model="filters.name" placeholder="姓名"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" v-on:click="getHosts">查询</el-button>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleAdd">新增</el-button>
</el-form-item>
</el-form>
</el-col>
<!--列表-->
<el-table :data="hosts" highlight-current-row v-loading="listLoading" @selection-change="selsChange" style="width: 100%;">
<el-table-column type="selection" width="55">
</el-table-column>
<el-table-column type="index" width="60">
</el-table-column>
<el-table-column prop="id" label="ID" width="120" sortable>
</el-table-column>
<el-table-column prop="name" label="主机名" width="120" sortable>
</el-table-column>
<el-table-column prop="ip" label="IP" width="120" sortable>
</el-table-column>
<el-table-column prop="port" label="端口" width="120" sortable>
</el-table-column>
<el-table-column prop="desc" label="描述" min-width="180" sortable>
</el-table-column>
<el-table-column prop="ctime" label="创建时间" min-width="180" sortable>
</el-table-column>
<el-table-column label="操作" width="150">
<template scope="scope">
<el-button size="small" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
<el-button type="danger" size="small" @click="handleDel(scope.$index, scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<!--工具条-->
<el-col :span="24" class="toolbar">
<el-button type="danger" @click="batchRemove" :disabled="this.sels.length===0">批量删除</el-button>
<el-pagination layout="prev, pager, next" @current-change="handleCurrentChange" :page-size="20" :total="total" style="float:right;">
</el-pagination>
</el-col>
<!--编辑界面-->
<el-dialog title="编辑" v-model="editFormVisible" :close-on-click-modal="false">
<el-form :model="editForm" label-width="80px" :rules="editFormRules" ref="editForm">
<el-form-item label="用户名(不可更改)" prop="name">
<el-input v-model="editForm.name" :readonly=true></el-input>
</el-form-item>
<el-form-item label="Sudo权限">
<el-radio-group v-model="editForm.sudo">
<el-radio class="radio" :label="0">unsudo</el-radio>
<el-radio class="radio" :label="1">sudo</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="描述">
<el-input v-model="editForm.desc" auto-complete="I'm foolish"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click.native="editFormVisible = false">取消</el-button>
<el-button type="primary" @click.native="editSubmit" :loading="editLoading">提交</el-button>
</div>
</el-dialog>
<!--新增界面-->
<el-dialog title="新增" v-model="addFormVisible" :close-on-click-modal="false">
<el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm">
<el-form-item label="用户名" prop="name">
<el-input v-model="addForm.name" auto-complete="off"></el-input>
</el-form-item>
<el-form-item label="desc">
<el-input v-model="addForm.desc" auto-complete="I'm foolish"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click.native="addFormVisible = false">取消</el-button>
<el-button type="primary" @click.native="addSubmit" :loading="addLoading">提交</el-button>
</div>
</el-dialog>
</section>
</template>
<script>
import util from '../../common/js/util'
//import NProgress from 'nprogress'
import { getHostList, getUserListPage, removeUser, batchRemoveUser, editUser, addUser } from '../../api/api';
export default {
data() {
return {
filters: {
name: ''
},
hosts: [],
total: 0,
page: 1,
listLoading: false,
sels: [],//
editFormVisible: false,//
editLoading: false,
editFormRules: {
name: [
{ required: true, message: '请输入姓名', trigger: 'blur' }
]
},
//
editForm: {
id: 0,
name: '',
sex: -1,
age: 0,
birth: '',
addr: ''
},
addFormVisible: false,//
addLoading: false,
addFormRules: {
name: [
{ required: true, message: '请输入姓名', trigger: 'blur' }
]
},
//
addForm: {
name: '',
sex: -1,
age: 0,
birth: '',
addr: ''
}
}
},
methods: {
//
formatSex: function (row, column) {
return row.sex == 1 ? '男' : row.sex == 0 ? '女' : '未知';
},
handleCurrentChange(val) {
this.page = val;
this.getHosts();
},
//
getHosts() {
let para = {
page: this.page,
name: this.filters.name
};
this.listLoading = true;
//NProgress.start();
getHostList(para).then((res) => {
this.total = res.data.total;
this.hosts = res.data;
this.listLoading = false;
console.log(res.data)
//NProgress.done();
});
},
//TODO
handleDel: function (index, row) {
this.$confirm('确认删除该记录吗?', '提示', {
type: 'warning'
}).then(() => {
this.listLoading = true;
//NProgress.start();
let para = { name: row.name };
removeUser(para).then((res) => {
this.listLoading = false;
//NProgress.done();
this.$message({
message: '删除成功',
type: 'success'
});
this.getHosts();
});
}).catch(() => {
});
},
//
handleEdit: function (index, row) {
this.editFormVisible = true;
this.editForm = Object.assign({}, row);
},
//
handleAdd: function () {
this.addFormVisible = true;
this.addForm = {
name: '',
sex: -1,
age: 0,
birth: '',
addr: ''
};
},
//
editSubmit: function () {
this.$refs.editForm.validate((valid) => {
if (valid) {
this.$confirm('确认提交吗?', '提示', {}).then(() => {
this.editLoading = true;
//NProgress.start();
let para = Object.assign({}, this.editForm);
para.birth = (!para.birth || para.birth == '') ? '' : util.formatDate.format(new Date(para.birth), 'yyyy-MM-dd');
editUser(para).then((res) => {
this.editLoading = false;
//NProgress.done();
this.$message({
message: '提交成功',
type: 'success'
});
this.$refs['editForm'].resetFields();
this.editFormVisible = false;
this.getHosts();
});
});
}
});
},
//
addSubmit: function () {
this.$refs.addForm.validate((valid) => {
if (valid) {
this.$confirm('确认提交吗?', '提示', {}).then(() => {
this.addLoading = true;
//NProgress.start();
let para = Object.assign({}, this.addForm);
addUser(para).then((res) => {
this.addLoading = false;
//NProgress.done();
this.$message({
message: '提交成功',
type: 'success'
});
this.$refs['addForm'].resetFields();
this.addFormVisible = false;
this.getHosts();
});
});
}
});
},
selsChange: function (sels) {
this.sels = sels;
},
//
batchRemove: function () {
var ids = this.sels.map(item => item.id).toString();
this.$confirm('确认删除选中记录吗?', '提示', {
type: 'warning'
}).then(() => {
this.listLoading = true;
//NProgress.start();
let para = { ids: ids };
batchRemoveUser(para).then((res) => {
this.listLoading = false;
//NProgress.done();
this.$message({
message: '删除成功',
type: 'success'
});
this.getHosts();
});
}).catch(() => {
});
}
},
mounted() {
this.getHosts();
}
}
</script>
<style scoped>
</style>

4
src/views/log/Log.vue

@ -0,0 +1,4 @@
<template>
<section>
</section>
</template>

33
src/views/nav2/Page4.vue

@ -1,33 +0,0 @@
<template>
<div>
<h1>vuex 测试</h1>
Clicked: {{ getCount }} times
<button @click="increment">+</button>
<button @click="decrement">-</button>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { mapActions } from 'vuex'
export default {
computed: {
// 使 getters computed
...mapGetters([
'getCount'
// ...
])
},
methods: {
...mapActions([
'increment', // this.increment() this.$store.dispatch('increment')
'decrement'
])
//...mapActions({
// add: 'increment' // this.add() this.$store.dispatch('increment')
//})
}
}
</script>

4
src/views/nav2/Page5.vue

@ -1,4 +0,0 @@
<template>
<section>page5...
</section>
</template>

4
src/views/nav3/Page6.vue

@ -1,4 +0,0 @@
<template>
<section>page6...
</section>
</template>

0
src/views/nav1/Form.vue → src/views/user/Form.vue

56
src/views/nav1/Table.vue → src/views/user/Users.vue

@ -21,15 +21,15 @@
</el-table-column>
<el-table-column type="index" width="60">
</el-table-column>
<el-table-column prop="name" label="姓名" width="120" sortable>
<el-table-column prop="id" label="ID" width="120" sortable>
</el-table-column>
<el-table-column prop="sex" label="性别" width="100" :formatter="formatSex" sortable>
<el-table-column prop="name" label="用户名" width="120" sortable>
</el-table-column>
<el-table-column prop="age" label="年龄" width="100" sortable>
<el-table-column prop="sudo" label="Sudo权限" width="120" sortable>
</el-table-column>
<el-table-column prop="birth" label="生日" width="120" sortable>
<el-table-column prop="desc" label="描述" width="120" sortable>
</el-table-column>
<el-table-column prop="addr" label="地址" min-width="180" sortable>
<el-table-column prop="ctime" label="创建时间" min-width="180" sortable>
</el-table-column>
<el-table-column label="操作" width="150">
<template scope="scope">
@ -49,23 +49,17 @@
<!--编辑界面-->
<el-dialog title="编辑" v-model="editFormVisible" :close-on-click-modal="false">
<el-form :model="editForm" label-width="80px" :rules="editFormRules" ref="editForm">
<el-form-item label="姓名" prop="name">
<el-input v-model="editForm.name" auto-complete="off"></el-input>
<el-form-item label="用户名(不可更改)" prop="name">
<el-input v-model="editForm.name" :readonly=true></el-input>
</el-form-item>
<el-form-item label="性别">
<el-radio-group v-model="editForm.sex">
<el-radio class="radio" :label="1"></el-radio>
<el-radio class="radio" :label="0"></el-radio>
<el-form-item label="Sudo权限">
<el-radio-group v-model="editForm.sudo">
<el-radio class="radio" :label="0">unsudo</el-radio>
<el-radio class="radio" :label="1">sudo</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="年龄">
<el-input-number v-model="editForm.age" :min="0" :max="200"></el-input-number>
</el-form-item>
<el-form-item label="生日">
<el-date-picker type="date" placeholder="选择日期" v-model="editForm.birth"></el-date-picker>
</el-form-item>
<el-form-item label="地址">
<el-input type="textarea" v-model="editForm.addr"></el-input>
<el-form-item label="描述">
<el-input v-model="editForm.desc" auto-complete="I'm foolish"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -77,23 +71,11 @@
<!--新增界面-->
<el-dialog title="新增" v-model="addFormVisible" :close-on-click-modal="false">
<el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm">
<el-form-item label="名" prop="name">
<el-form-item label="用户名" prop="name">
<el-input v-model="addForm.name" auto-complete="off"></el-input>
</el-form-item>
<el-form-item label="性别">
<el-radio-group v-model="addForm.sex">
<el-radio class="radio" :label="1"></el-radio>
<el-radio class="radio" :label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="年龄">
<el-input-number v-model="addForm.age" :min="0" :max="200"></el-input-number>
</el-form-item>
<el-form-item label="生日">
<el-date-picker type="date" placeholder="选择日期" v-model="addForm.birth"></el-date-picker>
</el-form-item>
<el-form-item label="地址">
<el-input type="textarea" v-model="addForm.addr"></el-input>
<el-form-item label="desc">
<el-input v-model="addForm.desc" auto-complete="I'm foolish"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -175,8 +157,9 @@
//NProgress.start();
getUserListPage(para).then((res) => {
this.total = res.data.total;
this.users = res.data.users;
this.users = res.data;
this.listLoading = false;
console.log(res.data)
//NProgress.done();
});
},
@ -187,7 +170,7 @@
}).then(() => {
this.listLoading = true;
//NProgress.start();
let para = { id: row.id };
let para = { name: row.name };
removeUser(para).then((res) => {
this.listLoading = false;
//NProgress.done();
@ -249,7 +232,6 @@
this.addLoading = true;
//NProgress.start();
let para = Object.assign({}, this.addForm);
para.birth = (!para.birth || para.birth == '') ? '' : util.formatDate.format(new Date(para.birth), 'yyyy-MM-dd');
addUser(para).then((res) => {
this.addLoading = false;
//NProgress.done();

0
src/views/nav1/user.vue → src/views/user/user.vue

Loading…
Cancel
Save