mirror of
https://github.com/jumpserver/lina.git
synced 2025-11-21 10:17:55 +00:00
Compare commits
12 Commits
pr@dev@k8s
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3dd199ef01 | ||
|
|
20e1c833a6 | ||
|
|
f2c7a6bc71 | ||
|
|
6063e03d89 | ||
|
|
e2d9eb5bae | ||
|
|
84caf35f67 | ||
|
|
1d7a1bfff1 | ||
|
|
9039f572ac | ||
|
|
7798324a4b | ||
|
|
8e69206cfb | ||
|
|
338706247a | ||
|
|
2ae3e06484 |
@@ -107,6 +107,10 @@ export default {
|
|||||||
this.$emit('add', true)
|
this.$emit('add', true)
|
||||||
}
|
}
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
|
if (error?.response?.data?.code === 'no_valid_assets') {
|
||||||
|
this.$message.error(error?.response?.data?.detail)
|
||||||
|
return
|
||||||
|
}
|
||||||
this.iVisible = true
|
this.iVisible = true
|
||||||
this.handleResult(null, error)
|
this.handleResult(null, error)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -223,9 +223,21 @@ export default {
|
|||||||
const mapped = {}
|
const mapped = {}
|
||||||
Object.entries(errors || {}).forEach(([k, v]) => {
|
Object.entries(errors || {}).forEach(([k, v]) => {
|
||||||
let msg = v
|
let msg = v
|
||||||
|
console.log(k, v)
|
||||||
// v是数组并且数组都是字符串,则拼接为字符串
|
// v是数组并且数组都是字符串,则拼接为字符串
|
||||||
if (Array.isArray(v) && v.every(item => typeof item === 'string')) msg = v.join('; ')
|
if (Array.isArray(v) && v.every(item => typeof item === 'string')) msg = v.join('; ')
|
||||||
else if (typeof v === 'object' && v !== null) msg = JSON.stringify(v)
|
// 处理 [{"port":["请确保该值小于或者等于 65535。"]},{},{}] 这种情况
|
||||||
|
else if (Array.isArray(v) && v.every(item => _.isPlainObject(item))) {
|
||||||
|
const subMsg = []
|
||||||
|
v.forEach((subItem) => {
|
||||||
|
Object.values(subItem).forEach((subMsgArr) => {
|
||||||
|
if (Array.isArray(subMsgArr)) {
|
||||||
|
subMsg.push(...subMsgArr)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
msg = subMsg.join(' ')
|
||||||
|
} else if (typeof v === 'object' && v !== null) msg = JSON.stringify(v)
|
||||||
mapped[k] = String(msg || '')
|
mapped[k] = String(msg || '')
|
||||||
})
|
})
|
||||||
this.serverErrors = mapped
|
this.serverErrors = mapped
|
||||||
|
|||||||
@@ -65,6 +65,17 @@ export default {
|
|||||||
'usingOrgs',
|
'usingOrgs',
|
||||||
'currentViewRoute'
|
'currentViewRoute'
|
||||||
]),
|
]),
|
||||||
|
currentOrgDisplayName() {
|
||||||
|
const currentOrgId = this.currentOrg?.id
|
||||||
|
if (!currentOrgId) {
|
||||||
|
return this.$tc('Select')
|
||||||
|
}
|
||||||
|
const matchedOrg = this.usingOrgs.find(item => item.id === currentOrgId)
|
||||||
|
if (matchedOrg?.name) {
|
||||||
|
return matchedOrg.name
|
||||||
|
}
|
||||||
|
return this.currentOrg.name || this.$tc('Select')
|
||||||
|
},
|
||||||
orgActionsGroup() {
|
orgActionsGroup() {
|
||||||
const orgActions = {
|
const orgActions = {
|
||||||
label: this.$t('OrganizationList'),
|
label: this.$t('OrganizationList'),
|
||||||
@@ -110,11 +121,8 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
currentOrg: {
|
currentOrgDisplayName() {
|
||||||
handler() {
|
this.updateWidth()
|
||||||
this.updateWidth()
|
|
||||||
},
|
|
||||||
deep: true
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -133,8 +141,9 @@ export default {
|
|||||||
tempSpan.style.fontWeight = 'normal'
|
tempSpan.style.fontWeight = 'normal'
|
||||||
tempSpan.style.letterSpacing = 'normal'
|
tempSpan.style.letterSpacing = 'normal'
|
||||||
|
|
||||||
// 获取当前组织名称
|
// 获取当前组织显示名称
|
||||||
const orgName = this.currentOrg.name || this.$tc('Select')
|
const orgName = this.currentOrgDisplayName
|
||||||
|
|
||||||
tempSpan.textContent = orgName
|
tempSpan.textContent = orgName
|
||||||
document.body.appendChild(tempSpan)
|
document.body.appendChild(tempSpan)
|
||||||
|
|
||||||
|
|||||||
@@ -167,8 +167,7 @@ export default {
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang='scss' scoped>
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
.page.no-title {
|
.page.no-title {
|
||||||
::v-deep {
|
::v-deep {
|
||||||
.page-submenu .el-tabs__header {
|
.page-submenu .el-tabs__header {
|
||||||
@@ -199,6 +198,14 @@ export default {
|
|||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.is-disabled {
|
||||||
|
cursor: not-allowed;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #c0c4cc;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-tabs__nav-next {
|
.el-tabs__nav-next {
|
||||||
|
|||||||
@@ -149,6 +149,11 @@ export function getErrorResponseMsg(error) {
|
|||||||
.join('; ')
|
.join('; ')
|
||||||
} else if (typeof data === 'string') {
|
} else if (typeof data === 'string') {
|
||||||
return data
|
return data
|
||||||
|
} else if (_.isPlainObject(data)) {
|
||||||
|
return Object.values(data)
|
||||||
|
.map(item => getErrorResponseMsg(item))
|
||||||
|
.filter(i => i)
|
||||||
|
.join('; ')
|
||||||
} else {
|
} else {
|
||||||
msg = error.toString()
|
msg = error.toString()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -144,11 +144,6 @@ export default {
|
|||||||
deep: true
|
deep: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
|
||||||
if (!this.$store.getters.hasValidLicense) {
|
|
||||||
delete this.fields[3]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
handleAfterGetRemoteMeta(meta) {
|
handleAfterGetRemoteMeta(meta) {
|
||||||
const needSetOptionFields = [
|
const needSetOptionFields = [
|
||||||
|
|||||||
@@ -43,7 +43,9 @@ export default {
|
|||||||
asset: ''
|
asset: ''
|
||||||
},
|
},
|
||||||
treeSetting: {
|
treeSetting: {
|
||||||
showMenu: true,
|
showMenu: (node) => {
|
||||||
|
return node?.meta?.type === 'asset'
|
||||||
|
},
|
||||||
showRefresh: true,
|
showRefresh: true,
|
||||||
showSearch: true,
|
showSearch: true,
|
||||||
showAssets: true,
|
showAssets: true,
|
||||||
@@ -55,7 +57,7 @@ export default {
|
|||||||
menu: [
|
menu: [
|
||||||
{
|
{
|
||||||
id: 'check',
|
id: 'check',
|
||||||
name: this.$t('Check'),
|
name: this.$t('RiskDetection'),
|
||||||
icon: 'scan',
|
icon: 'scan',
|
||||||
callback: (node) => {
|
callback: (node) => {
|
||||||
vm.detectDialog.asset = node.id
|
vm.detectDialog.asset = node.id
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
class="risk-review-drawer"
|
class="risk-review-drawer"
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
direction="rtl"
|
direction="rtl"
|
||||||
style="z-index: 999"
|
|
||||||
>
|
>
|
||||||
<div class="drawer-container">
|
<div class="drawer-container">
|
||||||
<div class="drawer-body">
|
<div class="drawer-body">
|
||||||
|
|||||||
@@ -515,6 +515,8 @@ export default {
|
|||||||
this.setBtn()
|
this.setBtn()
|
||||||
this.selectAssets = assets
|
this.selectAssets = assets
|
||||||
this.selectNodes = nodes
|
this.selectNodes = nodes
|
||||||
|
}).catch(() => {
|
||||||
|
this.lastRequestPayload = null
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
viewConfirmRunAssets() {
|
viewConfirmRunAssets() {
|
||||||
@@ -525,8 +527,8 @@ export default {
|
|||||||
.then(() => {
|
.then(() => {
|
||||||
this.xterm.write(
|
this.xterm.write(
|
||||||
'\x1b[31m' +
|
'\x1b[31m' +
|
||||||
this.$tc('StopLogOutput').replace('currentTaskId', this.currentTaskId) +
|
this.$tc('StopLogOutput').replace('currentTaskId', this.currentTaskId) +
|
||||||
'\x1b[0m'
|
'\x1b[0m'
|
||||||
)
|
)
|
||||||
this.xterm.write(this.wrapperError(''))
|
this.xterm.write(this.wrapperError(''))
|
||||||
this.getTaskStatus()
|
this.getTaskStatus()
|
||||||
|
|||||||
@@ -408,7 +408,6 @@ export default {
|
|||||||
createJob(data).then(res => {
|
createJob(data).then(res => {
|
||||||
this.progressLength = 0
|
this.progressLength = 0
|
||||||
this.executionInfo.timeCost = 0
|
this.executionInfo.timeCost = 0
|
||||||
this.showProgress = true
|
|
||||||
this.speedText = ''
|
this.speedText = ''
|
||||||
const form = new FormData()
|
const form = new FormData()
|
||||||
const start = Date.now()
|
const start = Date.now()
|
||||||
@@ -436,13 +435,13 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
|
this.showProgress = true
|
||||||
this.executionInfo.status = 'running'
|
this.executionInfo.status = 'running'
|
||||||
this.currentTaskId = res.task_id
|
this.currentTaskId = res.task_id
|
||||||
this.xtermConfig = { taskId: this.currentTaskId, type: 'shortcut_cmd' }
|
this.xtermConfig = { taskId: this.currentTaskId, type: 'shortcut_cmd' }
|
||||||
this.setCostTimeInterval()
|
this.setCostTimeInterval()
|
||||||
this.writeExecutionOutput()
|
this.writeExecutionOutput()
|
||||||
}).catch((error) => {
|
}).catch(() => {
|
||||||
this.$message.error(this.$tc('Error'), error)
|
|
||||||
this.execute_stop()
|
this.execute_stop()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -224,11 +224,12 @@ export default {
|
|||||||
title: this.$t('ExecuteAfterSaving'),
|
title: this.$t('ExecuteAfterSaving'),
|
||||||
callback: (value, form, btn) => {
|
callback: (value, form, btn) => {
|
||||||
form.value.run_after_save = true
|
form.value.run_after_save = true
|
||||||
const parameters = form.value.variable.reduce((acc, item) => {
|
if (form.value?.variable) {
|
||||||
acc[item.var_name] = item.default_value || ''
|
form.value['parameters'] = form.value.variable.reduce((acc, item) => {
|
||||||
return acc
|
acc[item.var_name] = item.default_value || ''
|
||||||
}, {})
|
return acc
|
||||||
form.value['parameters'] = parameters
|
}, {})
|
||||||
|
}
|
||||||
this.submitForm(form, btn)
|
this.submitForm(form, btn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,22 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
computed: {
|
||||||
|
passwordMenuDisabled() {
|
||||||
|
return this.$store.state.users.profile.source.value !== 'local'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
passwordMenuDisabled: {
|
||||||
|
immediate: true,
|
||||||
|
handler(disabled) {
|
||||||
|
this.config.submenu = this.getSubmenu()
|
||||||
|
if (disabled && this.config.activeMenu === 'Password') {
|
||||||
|
this.config.activeMenu = 'SSHKeyList'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getSubmenu() {
|
getSubmenu() {
|
||||||
return [
|
return [
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ export default {
|
|||||||
this.loading = true
|
this.loading = true
|
||||||
const url = `/api/v1/tickets/comments/?ticket_id=${this.object.id}`
|
const url = `/api/v1/tickets/comments/?ticket_id=${this.object.id}`
|
||||||
this.$axios.get(url).then(res => {
|
this.$axios.get(url).then(res => {
|
||||||
this.comments = res.results
|
this.comments = res
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
this.$message.error(err)
|
this.$message.error(err)
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
|
|||||||
@@ -161,8 +161,7 @@ module.exports = {
|
|||||||
target: process.env.VUE_APP_CORE_HOST || 'http://127.0.0.1:8080',
|
target: process.env.VUE_APP_CORE_HOST || 'http://127.0.0.1:8080',
|
||||||
changeOrigin: true
|
changeOrigin: true
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
after: require('./mock/mock-server.js')
|
|
||||||
},
|
},
|
||||||
css: {},
|
css: {},
|
||||||
configureWebpack: {
|
configureWebpack: {
|
||||||
|
|||||||
Reference in New Issue
Block a user