部署机器人
5 years ago
17 changed files with 9964 additions and 113 deletions
-
2config/index.js
-
2index.html
-
9608package-lock.json
-
21src/api/api.js
-
4src/main.js
-
2src/mock/data/user.js
-
33src/routes.js
-
8src/views/Home.vue
-
9src/views/Login.vue
-
287src/views/host/Hosts.vue
-
4src/views/log/Log.vue
-
33src/views/nav2/Page4.vue
-
4src/views/nav2/Page5.vue
-
4src/views/nav3/Page6.vue
-
0src/views/user/Form.vue
-
56src/views/user/Users.vue
-
0src/views/user/user.vue
9608
package-lock.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -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 }); }; |
@ -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> |
@ -0,0 +1,4 @@ |
|||
<template> |
|||
<section> |
|||
</section> |
|||
</template> |
@ -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> |
@ -1,4 +0,0 @@ |
|||
<template> |
|||
<section>page5... |
|||
</section> |
|||
</template> |
@ -1,4 +0,0 @@ |
|||
<template> |
|||
<section>page6... |
|||
</section> |
|||
</template> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue