mirror of
https://github.com/jumpserver/lina.git
synced 2025-09-15 23:01:11 +00:00
[Update] 完善代码
This commit is contained in:
@@ -73,9 +73,6 @@ export default {
|
||||
return this.moreActionsTitle || this.$t('common.MoreActions')
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
console.log(this.moreActionsType)
|
||||
},
|
||||
methods: {
|
||||
handleClick(item) {
|
||||
const action = this.totalNamedActions[item]
|
||||
|
@@ -1,9 +1,15 @@
|
||||
<template>
|
||||
<DataZTree ref="dataztree" :setting="treeSetting">
|
||||
<slot slot="rMenu">
|
||||
<li id="m_create" class="rmenu" tabindex="-1" @click="addTreeNode"><a><i class="fa fa-plus-square-o" /> {{ this.$t('tree.AddNode') }} </a></li>
|
||||
<li id="m_edit" class="rmenu" tabindex="-1" @click="editTreeNode"><a><i class="fa fa-pencil-square-o" /> {{ this.$t('tree.RenameNode') }} </a></li>
|
||||
<li id="m_del" class="rmenu" tabindex="-1" @click="removeTreeNode"><a><i class="fa fa-minus-square" /> {{ this.$t('tree.DeleteNode') }} </a></li>
|
||||
<li id="m_create" class="rmenu" tabindex="-1" @click="addTreeNode">
|
||||
<i class="fa fa-plus-square-o" />{{ this.$t('tree.AddNode') }}
|
||||
</li>
|
||||
<li id="m_edit" class="rmenu" tabindex="-1" @click="editTreeNode">
|
||||
<i class="fa fa-pencil-square-o" />{{ this.$t('tree.RenameNode') }}
|
||||
</li>
|
||||
<li id="m_del" class="rmenu" tabindex="-1" @click="removeTreeNode">
|
||||
<i class="fa fa-minus-square" />{{ this.$t('tree.DeleteNode') }}
|
||||
</li>
|
||||
<slot name="rMenu" />
|
||||
</slot>
|
||||
</DataZTree>
|
||||
@@ -12,6 +18,7 @@
|
||||
<script>
|
||||
import DataZTree from '../DataZTree'
|
||||
import $ from '@/utils/jquery-vendor'
|
||||
|
||||
export default {
|
||||
name: 'AutoDataZTree',
|
||||
components: {
|
||||
@@ -20,7 +27,8 @@ export default {
|
||||
props: {
|
||||
setting: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
default: () => {
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
@@ -62,30 +70,9 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
setUrlParam: function(url, name, value) {
|
||||
var urlArray = url.split('?')
|
||||
if (urlArray.length === 1) {
|
||||
url += '?' + name + '=' + value
|
||||
} else {
|
||||
var oriParam = urlArray[1].split('&')
|
||||
var oriParamMap = {}
|
||||
$.each(oriParam, function(index, value) {
|
||||
var v = value.split('=')
|
||||
oriParamMap[v[0]] = v[1]
|
||||
})
|
||||
oriParamMap[name] = value
|
||||
url = urlArray[0] + '?'
|
||||
var newParam = []
|
||||
$.each(oriParamMap, function(index, value) {
|
||||
newParam.push(index + '=' + value)
|
||||
})
|
||||
url += newParam.join('&')
|
||||
}
|
||||
return url
|
||||
},
|
||||
editTreeNode: function() {
|
||||
this.hideRMenu()
|
||||
var currentNode = this.zTree.getSelectedNodes()[0]
|
||||
const currentNode = this.zTree.getSelectedNodes()[0]
|
||||
if (!currentNode) {
|
||||
return
|
||||
}
|
||||
@@ -99,7 +86,6 @@ export default {
|
||||
$('body').unbind('mousedown', this.onBodyMouseDown)
|
||||
},
|
||||
// Request URL: http://localhost/api/v1/assets/assets/?node_id=d8212328-538d-41a6-bcfd-1e8cc7e3aed4&show_current_asset=null&draw=2&limit=15&offset=0&_=1587022917769
|
||||
|
||||
onSelected: function(event, treeNode) {
|
||||
if (treeNode.meta.type === 'node') {
|
||||
this.currentNode = treeNode
|
||||
@@ -111,18 +97,18 @@ export default {
|
||||
},
|
||||
removeTreeNode: function() {
|
||||
this.hideRMenu()
|
||||
var currentNode = this.zTree.getSelectedNodes()[0]
|
||||
const currentNode = this.zTree.getSelectedNodes()[0]
|
||||
if (!currentNode) {
|
||||
return
|
||||
}
|
||||
this.$axios.delete(
|
||||
`${this.treeSetting.nodeUrl}${currentNode.meta.node.id}/`,
|
||||
`${this.treeSetting.nodeUrl}${currentNode.meta.node.id}/`
|
||||
).then(
|
||||
this.zTree.removeNode(currentNode)
|
||||
)
|
||||
},
|
||||
onRename: function(event, treeId, treeNode, isCancel) {
|
||||
var url = `${this.treeSetting.nodeUrl}${this.currentNodeId}/`
|
||||
const url = `${this.treeSetting.nodeUrl}${this.currentNodeId}/`
|
||||
if (isCancel) {
|
||||
return
|
||||
}
|
||||
@@ -130,7 +116,7 @@ export default {
|
||||
url,
|
||||
{ 'value': treeNode.name }
|
||||
).then(res => {
|
||||
var assets_amount = treeNode.meta.node.assets_amount
|
||||
let assets_amount = treeNode.meta.node.assets_amount
|
||||
if (!assets_amount) {
|
||||
assets_amount = 0
|
||||
}
|
||||
@@ -144,8 +130,8 @@ export default {
|
||||
}
|
||||
},
|
||||
showRMenu: function(type, x, y) {
|
||||
var offset = $('#ztree').offset()
|
||||
var scrollTop = document.querySelector('.treebox').scrollTop
|
||||
const offset = $('#ztree').offset()
|
||||
const scrollTop = document.querySelector('.treebox').scrollTop
|
||||
x -= offset.left
|
||||
y -= offset.top + scrollTop
|
||||
x += document.body.scrollLeft
|
||||
@@ -167,22 +153,22 @@ export default {
|
||||
}
|
||||
},
|
||||
beforeDrop: function(treeId, treeNodes, targetNode, moveType) {
|
||||
var treeNodesNames = []
|
||||
const treeNodesNames = []
|
||||
$.each(treeNodes, function(index, value) {
|
||||
treeNodesNames.push(value.name)
|
||||
})
|
||||
|
||||
// TODO 修改默认确认框
|
||||
var msg = '你想移动节点: `' + treeNodesNames.join(',') + '` 到 `' + targetNode.name + '` 下吗?'
|
||||
const msg = '你想移动节点: `' + treeNodesNames.join(',') + '` 到 `' + targetNode.name + '` 下吗?'
|
||||
return confirm(msg)
|
||||
},
|
||||
onDrop: function(event, treeId, treeNodes, targetNode, moveType) {
|
||||
var treeNodesIds = []
|
||||
const treeNodesIds = []
|
||||
$.each(treeNodes, function(index, value) {
|
||||
console.log(value)
|
||||
treeNodesIds.push(value.meta.node.id)
|
||||
})
|
||||
var the_url = `${this.treeSetting.nodeUrl}${targetNode.meta.node.id}/children/add/`
|
||||
const the_url = `${this.treeSetting.nodeUrl}${targetNode.meta.node.id}/children/add/`
|
||||
this.$axios.put(
|
||||
the_url, {
|
||||
nodes: treeNodesIds
|
||||
@@ -193,16 +179,16 @@ export default {
|
||||
},
|
||||
addTreeNode: function() {
|
||||
this.hideRMenu()
|
||||
var parentNode = this.zTree.getSelectedNodes()[0]
|
||||
const parentNode = this.zTree.getSelectedNodes()[0]
|
||||
if (!parentNode) {
|
||||
return
|
||||
}
|
||||
// http://localhost/api/v1/assets/nodes/85aa4ee2-0bd9-41db-9079-aa3646448d0c/children/
|
||||
var url = `${this.treeSetting.nodeUrl}${parentNode.meta.node.id}/children/`
|
||||
const url = `${this.treeSetting.nodeUrl}${parentNode.meta.node.id}/children/`
|
||||
this.$axios.post(
|
||||
url, {}
|
||||
).then(data => {
|
||||
var newNode = {
|
||||
const newNode = {
|
||||
id: data['key'],
|
||||
name: data['value'],
|
||||
pId: parentNode.id,
|
||||
@@ -212,7 +198,7 @@ export default {
|
||||
}
|
||||
newNode.checked = this.zTree.getSelectedNodes()[0].checked
|
||||
this.zTree.addNodes(parentNode, 0, newNode)
|
||||
var node = this.zTree.getNodeByParam('id', newNode.id, parentNode)
|
||||
const node = this.zTree.getNodeByParam('id', newNode.id, parentNode)
|
||||
this.zTree.editName(node)
|
||||
})
|
||||
},
|
||||
@@ -227,7 +213,7 @@ export default {
|
||||
</script>
|
||||
|
||||
<style lang='less' scoped>
|
||||
.rmenu > a {
|
||||
.rmenu > a {
|
||||
border-radius: 3px;
|
||||
color: inherit;
|
||||
line-height: 25px;
|
||||
@@ -239,7 +225,8 @@ export default {
|
||||
clear: both;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.rmenu>a:hover, .dropdown-menu>a:focus {
|
||||
|
||||
.rmenu > a:hover, .dropdown-menu > a:focus {
|
||||
color: #262626;
|
||||
text-decoration: none;
|
||||
background-color: #f5f5f5;
|
||||
|
@@ -2,9 +2,7 @@
|
||||
<div>
|
||||
<div class="treebox">
|
||||
<ul id="ztree" class="ztree">
|
||||
<div>
|
||||
{{ this.$t('common.tree.Loading') }}...
|
||||
</div>
|
||||
{{ this.$t('common.tree.Loading') }}...
|
||||
</ul>
|
||||
</div>
|
||||
<div id="rMenu">
|
||||
@@ -78,20 +76,27 @@ export default {
|
||||
},
|
||||
rootNodeAddDom: function(ztree, callback) {
|
||||
const vm = this
|
||||
var refreshIcon = "<a id='tree-refresh'><i class='fa fa-refresh'></i></a>"
|
||||
var rootNode = ztree.getNodes()[0]
|
||||
const refreshIcon = "<a id='tree-refresh'><i class='fa fa-refresh'></i></a>"
|
||||
const rootNode = ztree.getNodes()[0]
|
||||
let $rootNodeRef
|
||||
if (rootNode) {
|
||||
var $rootNodeRef = $('#' + rootNode.tId + '_a')
|
||||
$rootNodeRef = $('#' + rootNode.tId + '_a')
|
||||
$rootNodeRef.after(refreshIcon)
|
||||
} else {
|
||||
$rootNodeRef = $('#' + ztree.setting.treeId)
|
||||
$rootNodeRef.html(refreshIcon)
|
||||
}
|
||||
var refreshIconRef = $('#tree-refresh')
|
||||
const refreshIconRef = $('#tree-refresh')
|
||||
refreshIconRef.bind('click', function() {
|
||||
ztree.destroy()
|
||||
callback()
|
||||
vm.initTree()
|
||||
const result = callback()
|
||||
if (result && result.then) {
|
||||
result.finally(() => {
|
||||
vm.initTree()
|
||||
})
|
||||
} else {
|
||||
vm.initTree()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@@ -3,7 +3,7 @@
|
||||
</template>
|
||||
|
||||
<script type="text/jsx">
|
||||
import { DetailFormatter } from '@/components/ListTable/formatters'
|
||||
import { DetailFormatter, SystemUserFormatter } from '@/components/ListTable/formatters'
|
||||
import TreeTable from '../TreeTable'
|
||||
|
||||
export default {
|
||||
@@ -34,8 +34,9 @@ export default {
|
||||
},
|
||||
getShowUrl: {
|
||||
type: Function,
|
||||
default(assetId, vm) {
|
||||
return ''
|
||||
default({ row, col }) {
|
||||
console.log(this.tableUrl)
|
||||
return this.tableUrl.replace('/assets/', `/assets/${row.id}/system-users/?cache_policy=1`)
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -50,7 +51,8 @@ export default {
|
||||
// ?assets=0不显示资产. =1显示资产
|
||||
treeUrl: this.treeUrl,
|
||||
callback: {
|
||||
onSelected: (event, node) => vm.onSelected(node, vm)
|
||||
onSelected: (event, node) => vm.onSelected(node, vm),
|
||||
refresh: vm.refreshObjectAssetPermission
|
||||
}
|
||||
},
|
||||
tableConfig: {
|
||||
@@ -73,17 +75,8 @@ export default {
|
||||
prop: 'systemUsers',
|
||||
label: this.$t('assets.SystemUsers'),
|
||||
align: 'center',
|
||||
formatter: (row, col, value) => {
|
||||
const data = { title: this.$t('common.Show') }
|
||||
// Todo: 显示真正的系统用户
|
||||
const show = function() {
|
||||
data.title = 'Hello world'
|
||||
console.log(this)
|
||||
console.log(data)
|
||||
console.log('hello: ', value)
|
||||
}
|
||||
return <el-link type='success' onClick={show}> {data.title} </el-link>
|
||||
},
|
||||
formatter: SystemUserFormatter,
|
||||
getUrl: this.getShowUrl.bind(this),
|
||||
width: '200px'
|
||||
}
|
||||
]
|
||||
@@ -96,7 +89,13 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
refreshObjectAssetPermission() {
|
||||
const url = this.tableUrl.replace('/assets/', '/asset-permissions/cache/')
|
||||
if (url.indexOf('user-groups')) {
|
||||
return false
|
||||
}
|
||||
return this.$axios.delete(url)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
@@ -0,0 +1,32 @@
|
||||
<template>
|
||||
<span v-if="!systemUsers"><a style="color: #1c84c6;" @click="showSystemUser">{{ this.$t('common.Show') }}</a></span>
|
||||
<span v-else>{{ systemUsers.toString() }}</span>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import BaseFormatter from './base'
|
||||
export default {
|
||||
name: 'GrantedSystemUsersShowFormatter',
|
||||
extends: BaseFormatter,
|
||||
props: {
|
||||
getUrl: {
|
||||
type: Function,
|
||||
default: () => this.col.getUrl
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
systemUsers: null
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async showSystemUser() {
|
||||
const url = this.col.getUrl({ row: this.row, col: this.col })
|
||||
const data = await this.$axios.get(url)
|
||||
this.systemUsers = data.map((item) => item.name)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
</style>
|
@@ -1,33 +0,0 @@
|
||||
<template>
|
||||
<span v-if="systemuser.length===0"><a style="color: #1c84c6;" @click="showSystemUser">{{ this.$t('common.Show') }}</a></span>
|
||||
<span v-else>{{ systemuser.toString() }}</span>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import BaseFormatter from './base'
|
||||
export default {
|
||||
name: 'SystemUserFormatter',
|
||||
extends: BaseFormatter,
|
||||
data() {
|
||||
return {
|
||||
systemuser: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
showSystemUser() {
|
||||
const id = (this.row.id)
|
||||
this.$axios.get(
|
||||
`/api/v1/perms/users/assets/${id}/system-users/?cache_policy=1`
|
||||
).then(res => {
|
||||
res.forEach((v, i) => {
|
||||
this.systemuser.push(v.name)
|
||||
})
|
||||
console.log(this.systemuser)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
</style>
|
@@ -12,7 +12,7 @@ import CustomActionsFormatter from './CustomActionsFormatter'
|
||||
import DeleteActionFormatter from './DeleteActionFormatter'
|
||||
import DateFormatter from './DateFormatter'
|
||||
import ConnectFormatter from './ConnectFormatter'
|
||||
import SystemUserFormatter from './SystemUserFormatter'
|
||||
import SystemUserFormatter from './GrantedSystemUsersShowFormatter'
|
||||
import ShowKeyFormatter from '@/components/ListTable/formatters/ShowKeyFormatter'
|
||||
|
||||
export default {
|
||||
|
@@ -59,7 +59,6 @@ export default {
|
||||
methods: {
|
||||
handleUrlChange(_url) {
|
||||
this.$set(this.iTableConfig, 'url', _url)
|
||||
console.log(this.iTableConfig)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -183,7 +183,7 @@
|
||||
"AdminPage": "管理员页面",
|
||||
"Docs": "文档",
|
||||
"Help": "帮助",
|
||||
"Logout": "退出",
|
||||
"Logout": "退出登录",
|
||||
"Profile": "个人信息",
|
||||
"Support": "支持",
|
||||
"UserPage": "用户页面"
|
||||
@@ -618,12 +618,12 @@
|
||||
"quickUpdate": {
|
||||
"resetMFA": "重置MFA",
|
||||
"resetMFAWarningMsg": "你确定要重置用户的 MFA 吗?",
|
||||
"resetMFAdSuccessMsg": "重置MFA成功",
|
||||
"resetMFAdSuccessMsg": "重置MFA成功, 用户可以重新设置MFA了",
|
||||
"resetPassword": "重置密码",
|
||||
"resetPasswordSuccessMsg": "发送邮件任务已提交",
|
||||
"resetPasswordSuccessMsg": "发送邮件任务已提交, 用户稍后会收到重置密码邮件",
|
||||
"resetPasswordWarningMsg": "你确定要发送重置用户密码的邮件吗",
|
||||
"resetSSHKey": "重置SSH密钥",
|
||||
"resetSSHKeySuccessMsg": "发送邮件任务已提交",
|
||||
"resetSSHKeySuccessMsg": "发送邮件任务已提交, 用户稍后会收到重置密钥邮件",
|
||||
"resetSSHKeyWarningMsg": "你确定要发送重置用户的SSH Key的邮件吗?",
|
||||
"send": "发送",
|
||||
"unblock": "解锁",
|
||||
|
@@ -1,18 +1,30 @@
|
||||
<template>
|
||||
<el-dropdown trigger="click">
|
||||
<el-dropdown trigger="click" @command="handleCommand">
|
||||
<span class="el-dropdown-link">
|
||||
{{ $t('common.nav.Help') }}<i class="el-icon-arrow-down el-icon--right" />
|
||||
</span>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item icon="el-icon-plus">{{ $t('common.nav.Docs') }}</el-dropdown-item>
|
||||
<el-dropdown-item icon="el-icon-circle-plus">{{ $t('common.nav.Support') }}</el-dropdown-item>
|
||||
<el-dropdown-item icon="el-icon-plus" command="docs">{{ $t('common.nav.Docs') }}</el-dropdown-item>
|
||||
<el-dropdown-item icon="el-icon-circle-plus" command="support">{{ $t('common.nav.Support') }}</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'Help'
|
||||
name: 'Help',
|
||||
methods: {
|
||||
handleCommand(command) {
|
||||
switch (command) {
|
||||
case 'support':
|
||||
window.open('https://jinshuju.net/f/sQ91MK', '_blank')
|
||||
break
|
||||
default:
|
||||
window.open('http://docs.jumpserver.org', '_blank')
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
<div>
|
||||
<el-tabs v-if="submenu.length > 0" slot="submenu" v-model="iActiveMenu" class="page-submenu" @tab-click="handleTabClick">
|
||||
<el-tab-pane v-for="item in submenu" :key="item.name" :label="item.title" :name="item.name" />
|
||||
<el-tab-pane v-for="item in submenu" :key="item.name" :label="item.title" :label-content="item.labelContent" :name="item.name" />
|
||||
</el-tabs>
|
||||
<transition name="fade-transform" mode="out-in">
|
||||
<slot />
|
||||
|
@@ -19,6 +19,17 @@
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
.nest-menu .el-submenu__title {
|
||||
height: 32px;
|
||||
line-height: 2;
|
||||
padding: 0 52px;
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
.nest-menu li.is-opened, .nest-menu li.is-active {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.el-menu-item, .el-submenu__title {
|
||||
height: 46px;
|
||||
line-height: 46px;
|
||||
@@ -60,6 +71,7 @@ li.is-opened, li.is-active {
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
//.el-menu {
|
||||
// border: 0px !important;
|
||||
|
@@ -50,21 +50,21 @@ export default {
|
||||
prop: 'SystemUsers',
|
||||
align: 'center',
|
||||
formatter: SystemUserFormatter,
|
||||
label: this.$t('assets.SystemUsers')
|
||||
},
|
||||
{
|
||||
prop: 'comment',
|
||||
align: 'center',
|
||||
label: this.$t('assets.Comment')
|
||||
label: this.$t('assets.SystemUsers'),
|
||||
width: '200px',
|
||||
getUrl: ({ row }) => {
|
||||
return `/api/v1/perms/users/assets/${row.id}/system-users/?cache_policy=1`
|
||||
}
|
||||
},
|
||||
{
|
||||
prop: 'id',
|
||||
align: 'center',
|
||||
formatter: ConnectFormatter,
|
||||
width: '200px',
|
||||
width: '100px',
|
||||
label: this.$t('common.action'),
|
||||
actions: {
|
||||
onDelete: function({ row, col, cellValue, reload }) {
|
||||
// Todo: 对接api
|
||||
alert('接口错误:获取不到对应的资产状态')
|
||||
},
|
||||
onUpdate: function({ row, col, cellValue, reload }) {
|
||||
|
@@ -246,9 +246,6 @@ export default {
|
||||
this.relationConfig.hasObjectsId = iNew.users
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
console.log('Object is', this.object)
|
||||
},
|
||||
methods: {
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user