Browse Source

first commit

master
部署机器人 4 years ago
parent
commit
cd9e8169e7
  1. 2
      config/index.js
  2. 0
      dist/.gitkeep
  3. 9608
      package-lock.json
  4. 2
      package.json
  5. 136
      src/api/api.js
  6. 11
      src/main.js
  7. 2
      src/routes.js
  8. 326
      src/views/host/HostUser.vue
  9. 47
      src/views/host/Hosts.vue
  10. 67
      src/views/user/Users.vue
  11. 6216
      yarn.lock

2
config/index.js

@ -7,7 +7,7 @@ module.exports = {
index: path.resolve(__dirname, '../dist/index.html'),
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: '/vue-admin/',
assetsPublicPath: '/',
productionSourceMap: true,
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.

0
dist/.gitkeep

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

2
package.json

@ -71,4 +71,4 @@
"last 2 versions",
"not ie <= 8"
]
}
}

136
src/api/api.js

@ -9,22 +9,140 @@ let postFormType = {
}
}
// axios.defaults.crossDomain = true;
// axios.defaults.withCredentials = true;
function getUrlArgObject() {
var args = new Object();
var query = location.search.substring(1);//获取查询串
var pairs = query.split("&");//在逗号处断开
for (var i = 0; i < pairs.length; i++) {
var pos = pairs[i].indexOf('=');//查找name=value
if (pos == -1) {//如果没有找到就跳过
continue;
}
var argname = pairs[i].substring(0, pos);//提取name
var value = pairs[i].substring(pos + 1);//提取value
args[argname] = unescape(value);//存为属性
}
return args;//返回对象
}
function combineSsoArgs(params) {
var urlparams = getUrlArgObject();
if ("sso_uid" in urlparams) {
params.sso_uid = urlparams.sso_uid;
}
if ("sso_token" in urlparams) {
params.sso_token = urlparams.sso_token;
}
console.log(params)
}
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 => {
combineSsoArgs(params);
var res = axios.get(`${url}/jump/users`, { params: params });
res.then ( response => {
var data = response.data;
if (typeof data == "string" && data.match("<script language") != null) {
return window.location.href = "http://sso.cynking.cn/?do=login.s_login&appid=18";
}
});
return res;
};
export const removeUser = params => {
combineSsoArgs(params);
var res = axios.get(`${url}/jump/user/del`, { params: params });
res.then ( response => {
var data = response.data;
if (typeof data == "string" && data.match("<script language") != null) {
return window.location.href = "http://sso.cynking.cn/?do=login.s_login&appid=18";
}
});
return res;
};
export const batchRemoveUser = params => {
combineSsoArgs(params);
var res = axios.get(`${base}/user/batchremove`, { params: params });
res.then ( response => {
var data = response.data;
if (typeof data == "string" && data.match("<script language") != null) {
return window.location.href = "http://sso.cynking.cn/?do=login.s_login&appid=18";
}
});
return res;
};
export const getUserListPage = params => { return axios.get(`${url}/jump/users`, { params: params }, ); };
export const editUser = params => {
combineSsoArgs(params);
var res = axios.get(`${url}/jump/user/modify`, { params: params });
res.then ( response => {
var data = response.data;
if (typeof data == "string" && data.match("<script language") != null) {
return window.location.href = "http://sso.cynking.cn/?do=login.s_login&appid=18";
}
});
return res;
};
export const removeUser = params => { return axios.get(`${url}/jump/user/del`, { params: params }); };
export const addUser = params => {
combineSsoArgs(params);
var res = axios.get(`${url}/jump/user/add`, { params: params });
res.then ( response => {
var data = response.data;
if (typeof data == "string" && data.match("<script language") != null) {
return window.location.href = "http://sso.cynking.cn/?do=login.s_login&appid=18";
}
});
return res;
};
export const batchRemoveUser = params => { return axios.get(`${base}/user/batchremove`, { params: params }); };
export const getUserHostList = params => {
combineSsoArgs(params);
var res = axios.get(`${url}/jump/user/hosts`, { params: params });
res.then ( response => {
var data = response.data;
if (typeof data == "string" && data.match("<script language") != null) {
return window.location.href = "http://sso.cynking.cn/?do=login.s_login&appid=18";
}
});
return res;
};
export const editUser = params => { return axios.get(`${base}/user/edit`, { params: params }); };
export const getHostUserList = params => {
combineSsoArgs(params);
var res = axios.get(`${url}/jump/host/users`, { params: params });
res.then ( response => {
var data = response.data;
if (typeof data == "string" && data.match("<script language") != null) {
return window.location.href = "http://sso.cynking.cn/?do=login.s_login&appid=18";
}
});
return res;
};
export const addUser = params => { return axios.get(`${url}/jump/user/add`, { params: params }); };
export const getHostUserAll = params => {
combineSsoArgs(params);
var res = axios.get(`${url}/jump/hostuser`, { params: params });
res.then ( response => {
var data = response.data;
if (typeof data == "string" && data.match("<script language") != null) {
return window.location.href = "http://sso.cynking.cn/?do=login.s_login&appid=18";
}
});
return res;
};
// 获取主机列表
export const getHostList = params => { return axios.get(`${url}/jump/hosts`, { params: params }); };
export const getHostList = params => {
combineSsoArgs(params);
var res = axios.get(`${url}/jump/hosts`, { params: params });
res.then ( response => {
var data = response.data;
if (typeof data == "string" && data.match("<script language") != null) {
return window.location.href = "http://sso.cynking.cn/?do=login.s_login&appid=18";
}
});
return res;
};

11
src/main.js

@ -30,11 +30,12 @@ router.beforeEach((to, from, next) => {
sessionStorage.removeItem('user');
}
let user = JSON.parse(sessionStorage.getItem('user'));
if (!user && to.path != '/login') {
next({ path: '/login' })
} else {
next()
}
// if (!user && to.path != '/login') {
// next({ path: '/login' })
// } else {
// next()
// }
next()
})
//router.afterEach(transition => {

2
src/routes.js

@ -4,6 +4,7 @@ import Home from './views/Home.vue'
// import Main from './views/Main.vue'
import Users from './views/user/Users.vue'
import Hosts from './views/host/Hosts.vue'
import HostUser from './views/host/HostUser.vue'
import Log from './views/log/Log.vue'
import echarts from './views/charts/echarts.vue'
@ -37,6 +38,7 @@ let routes = [
iconCls: 'fa fa-id-card-o',
children: [
{ path: '/hosts', component: Hosts, name: '主机列表' },
{ path: '/hostuser', component: HostUser, name: '主机用户' },
]
},
{

326
src/views/host/HostUser.vue

@ -0,0 +1,326 @@
<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="getHostUserAll">查询</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="hostuserall" 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="hostname" label="主机名" width="120" sortable>
</el-table-column>
<el-table-column prop="username" label="用户名" width="120" sortable>
</el-table-column>
<el-table-column prop="sudo" label="Sudo权限" width="120" sortable>
</el-table-column>
<el-table-column prop="ctime" label="创建时间" min-width="180" sortable>
</el-table-column>
<el-table-column label="操作" min-width="150">
<template slot-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>
<el-button size="small" @click="handleHostUsers(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="hostUsersFormVisible" :close-on-click-modal="false">
<el-table :data="hostusers" 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="username" label="用户名" width="120" sortable>
</el-table-column>
<el-table-column prop="sudo" label="Sudo权限" min-width="120" sortable>
</el-table-column>
<el-table-column prop="ctime" label="创建时间" min-width="120" sortable>
</el-table-column>
</el-table>
</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, getHostUserList, getHostUserAll } from '../../api/api';
export default {
data() {
return {
filters: {
name: ''
},
hostuserall: [],
hostusers: [],
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: ''
},
hostUsersFormVisible: false,//
hostUsersLoading: false,
//
hostUsersForm: {
},
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.getHostUserAll();
},
//
getHostUserAll() {
let para = {
//page: this.page,
//name: this.filters.name
};
this.listLoading = true;
//NProgress.start();
getHostUserAll(para).then((res) => {
this.total = res.data.total;
this.hostuserall = 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.getHostUserAll();
});
}).catch(() => {
});
},
//
handleEdit: function (index, row) {
this.editFormVisible = true;
this.editForm = Object.assign({}, row);
},
//
handleHostUsers: function (index, row) {
this.hostUsersFormVisible = true;
this.hostUsersForm = Object.assign({}, row);
let para = {
hostname: this.hostUsersForm.name
}
console.log(para)
getHostUserList(para).then((res) => {
this.hostusers = res.data;
console.log(res.data)
//NProgress.done();
});
},
//
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.getHostUserAll();
});
});
}
});
},
//
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.getHostUserAll();
});
});
}
});
},
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.getHostUserAll();
});
}).catch(() => {
});
}
},
mounted() {
this.getHostUserAll();
}
}
</script>
<style scoped>
</style>

47
src/views/host/Hosts.vue

@ -33,10 +33,11 @@
</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-table-column label="操作" min-width="150">
<template slot-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>
<el-button size="small" @click="handleHostUsers(scope.$index, scope.row)">用户列表</el-button>
</template>
</el-table-column>
</el-table>
@ -70,6 +71,24 @@
</div>
</el-dialog>
<!--主机用户列表-->
<el-dialog title="主机用户列表" v-model="hostUsersFormVisible" :close-on-click-modal="false">
<el-table :data="hostusers" 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="username" label="用户名" width="120" sortable>
</el-table-column>
<el-table-column prop="sudo" label="Sudo权限" min-width="120" sortable>
</el-table-column>
<el-table-column prop="ctime" label="创建时间" min-width="120" sortable>
</el-table-column>
</el-table>
</el-dialog>
<!--新增界面-->
<el-dialog title="新增" v-model="addFormVisible" :close-on-click-modal="false">
<el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm">
@ -91,7 +110,7 @@
<script>
import util from '../../common/js/util'
//import NProgress from 'nprogress'
import { getHostList, getUserListPage, removeUser, batchRemoveUser, editUser, addUser } from '../../api/api';
import { getHostList, getUserListPage, removeUser, batchRemoveUser, editUser, addUser, getHostUserList } from '../../api/api';
export default {
data() {
@ -100,6 +119,7 @@
name: ''
},
hosts: [],
hostusers: [],
total: 0,
page: 1,
listLoading: false,
@ -122,6 +142,12 @@
addr: ''
},
hostUsersFormVisible: false,//
hostUsersLoading: false,
//
hostUsersForm: {
},
addFormVisible: false,//
addLoading: false,
addFormRules: {
@ -191,6 +217,21 @@
this.editFormVisible = true;
this.editForm = Object.assign({}, row);
},
//
handleHostUsers: function (index, row) {
this.hostUsersFormVisible = true;
this.hostUsersForm = Object.assign({}, row);
let para = {
hostname: this.hostUsersForm.name
}
console.log(para)
getHostUserList(para).then((res) => {
this.hostusers = res.data;
console.log(res.data)
//NProgress.done();
});
},
//
handleAdd: function () {
this.addFormVisible = true;

67
src/views/user/Users.vue

@ -29,12 +29,13 @@
</el-table-column>
<el-table-column prop="desc" label="描述" width="120" sortable>
</el-table-column>
<el-table-column prop="ctime" label="创建时间" min-width="180" sortable>
<el-table-column prop="ctime" label="创建时间" min-width="120" sortable>
</el-table-column>
<el-table-column label="操作" width="150">
<template scope="scope">
<el-table-column label="操作" min-width="150">
<template slot-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>
<el-button size="small" @click="handleUserHosts(scope.$index, scope.row)">主机列表</el-button>
</template>
</el-table-column>
</el-table>
@ -67,7 +68,27 @@
<el-button type="primary" @click.native="editSubmit" :loading="editLoading">提交</el-button>
</div>
</el-dialog>
<!--用户主机列表-->
<el-dialog title="用户主机列表" v-model="userHostsFormVisible" :close-on-click-modal="false" width="100%">
<el-table :model="userHostsForm" :data="userhosts" 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>
</el-dialog>
<!--新增界面-->
<el-dialog title="新增" v-model="addFormVisible" :close-on-click-modal="false">
<el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm">
@ -89,7 +110,7 @@
<script>
import util from '../../common/js/util'
//import NProgress from 'nprogress'
import { getUserListPage, removeUser, batchRemoveUser, editUser, addUser } from '../../api/api';
import { getUserListPage, removeUser, batchRemoveUser, editUser, addUser, getUserHostList } from '../../api/api';
export default {
data() {
@ -98,6 +119,7 @@
name: ''
},
users: [],
userhosts: [],
total: 0,
page: 1,
listLoading: false,
@ -120,6 +142,18 @@
addr: ''
},
userHostsFormVisible: false,//
userHostsLoading: false,
//
userHostsForm: {
id: 0,
name: '',
sex: -1,
age: 0,
birth: '',
addr: ''
},
addFormVisible: false,//
addLoading: false,
addFormRules: {
@ -189,6 +223,20 @@
this.editFormVisible = true;
this.editForm = Object.assign({}, row);
},
//
handleUserHosts: function (index, row) {
this.userHostsFormVisible = true;
this.userHostsForm = Object.assign({}, row);
let para = {
username: this.userHostsForm.name
}
getUserHostList(para).then((res) => {
this.userhosts = res.data;
console.log(res.data)
//NProgress.done();
});
},
//
handleAdd: function () {
this.addFormVisible = true;
@ -207,8 +255,13 @@
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');
let obj = Object.assign({}, this.editForm);
let para = {
username: obj.name,
sudo: obj.sudo,
desc: obj.desc,
};
console.log(obj, para);
editUser(para).then((res) => {
this.editLoading = false;
//NProgress.done();

6216
yarn.lock
File diff suppressed because it is too large
View File

Loading…
Cancel
Save