LSSE-front/src/views/simulationScene/database/bzllsjk.vue

417 lines
13 KiB
Vue
Raw Normal View History

2025-09-18 14:07:29 +08:00
<template>
<page-header-wrapper>
<Grid :columns="['400px', 1]" :rows="gridRows">
<a-card title="组织架构-保障力量" class="my-card my-card-has-title" :bordered="false" style="grid-row: 1 / 3">
<template #extra>
<a-button type="primary" icon="plus" shape="circle" title="新增" @click="handleOpenAddZzjgModal()"></a-button>
</template>
<a-tree
:treeData="zzjg.treeData"
:selectedKeys.sync="zzjg.selectedKeys"
:expandedKeys.sync="zzjg.expandedKeys"
@select="handleChangeZzjgSelected"
>
<template #title="{ key: id, title }">
<a-dropdown :trigger="['contextmenu']">
<span>{{ title }}</span>
<template #overlay>
<Flex class="contextmenu-zz">
<a-button
type="text-primary"
icon="edit"
title="编辑"
@click="handleOpenEditZzjgModal(id)"
></a-button>
<a-button
type="text-primary"
icon="plus"
title="新增子项"
@click="handleOpenAddZzjgModal(id)"
></a-button>
<a-button
type="text-danger"
icon="delete"
title="删除"
@click="handleDeleteZzjg(id, title)"
></a-button>
</Flex>
</template>
</a-dropdown>
</template>
</a-tree>
</a-card>
<a-card title="组织人员" class="my-card my-card-has-title" :bordered="false">
<template #extra>
<a-button type="primary" style="margin-right: 20px" @click="handleOpenAddZzryModal">新增</a-button>
<a-icon
v-if="layoutRight === 'zzry'"
type="fullscreen-exit"
style="font-size: 32px"
@click="layoutRight = 'auto'"
/>
<a-icon v-else type="fullscreen" style="font-size: 32px" @click="layoutRight = 'zzry'" />
</template>
<AntQueryTable
ref="zzry-table"
height="100%"
:queryConfig="zzry.queryConfig"
:tableConfig="zzry.tableConfig"
:pageConfig="zzry.pageConfig"
:showTool="zzry.showTool"
>
<template #tablecell-action="{ record }">
<a-button type="text-primary" icon="edit" @click="handleOpenEditZzryModal(record)"></a-button>
</template>
</AntQueryTable>
</a-card>
<a-card title="组织装备" class="my-card my-card-has-title" :bordered="false">
<template #extra>
<a-button type="primary" style="margin-right: 20px" @click="handleOpenAddZzzbModal">新增</a-button>
<a-icon
v-if="layoutRight === 'zzzb'"
type="fullscreen-exit"
style="font-size: 32px"
@click="layoutRight = 'auto'"
/>
<a-icon v-else type="fullscreen" style="font-size: 32px" @click="layoutRight = 'zzzb'" />
</template>
<AntQueryTable
ref="zzzb-table"
height="100%"
:queryConfig="zzzb.queryConfig"
:tableConfig="zzzb.tableConfig"
:pageConfig="zzzb.pageConfig"
:showTool="zzzb.showTool"
>
<template #tablecell-action="{ record }">
<a-button type="text-primary" icon="edit" @click="handleOpenEditZzzbModal(record)"></a-button>
</template>
</AntQueryTable>
</a-card>
</Grid>
<AntFormModal
:visible.sync="zzjgModal.visible"
:title="zzjgModal.title"
:formItems="zzjgModal.formItems"
:formRules="zzjgModal.formRules"
:formData="zzjgModal.formData"
:onSubmit="handleSubmitZzjg"
@success="handleSubmitZzjgSuccess"
></AntFormModal>
<AntFormModal
:visible.sync="zzryModal.visible"
:title="zzryModal.title"
:formItems="zzryModal.formItems"
:formRules="zzryModal.formRules"
:formData="zzryModal.formData"
:onSubmit="handleSubmitZzry"
@success="handleSubmitZzrySuccess"
></AntFormModal>
<AntFormModal
:visible.sync="zzzbModal.visible"
:title="zzzbModal.title"
:formItems="zzzbFormItems"
:formRules="zzzbModal.formRules"
:formData="zzzbModal.formData"
:onSubmit="handleSubmitZzzb"
@success="handleSubmitZzzbSuccess"
></AntFormModal>
</page-header-wrapper>
</template>
<script>
export default {
name: 'Bzllsjk',
data() {
return {
layoutRight: 'auto',
zzjg: {
treeData: [],
selectedKeys: [],
expandedKeys: [],
},
zzjgModal: {
visible: false,
title: '',
mode: '',
formItems: [
{
label: '上级组织',
prop: 'parentId',
component: 'AntOriginTreeSelect',
options: {
dataSource: () =>
this.$http({
url: '/tree/organization',
method: 'get',
params: { unittype: 2 },
}).then((res) => ({ data: [{ key: 0, title: '根组织' }].concat(res.data) })),
valueKey: 'key',
},
},
{
label: '标识编码',
prop: 'codeName',
},
{
label: '组织名称',
prop: 'name',
},
],
formRules: {
codeName: [{ required: true, message: '请输入标识编码!', trigger: 'blur' }],
name: [{ required: true, message: '请输入组织名称!', trigger: 'blur' }],
},
formData: {},
},
zzry: {
queryConfig: false,
tableConfig: {
table: {},
immediate: false,
query: () =>
this.$http({
url: `/baseData/fightPowerHierarchy/staff/${this.zzjg.selectedKeys[0]}`,
method: 'get',
}),
columns: [
{ dataIndex: 'serial' },
{ title: '岗位', dataIndex: 'name', width: 'auto', minWidth: 150 },
{ title: '岗位数量', dataIndex: 'number', type: 'number', width: 'auto', minWidth: 150 },
{ dataIndex: 'action' },
],
},
pageConfig: false,
showTool: false,
},
zzryModal: {
visible: false,
title: '',
mode: '',
formItems: [
{
label: '岗位名称',
prop: 'typeId',
component: 'AntOriginSelect',
options: {
dataSource: () =>
this.$http({
url: '/unit/getAll',
method: 'get',
}),
labelKey: 'name',
readonly: false,
},
},
{ label: '岗位数量', prop: 'number' },
],
formRules: {
typeId: [{ required: true, message: '请选择岗位!', trigger: 'change' }],
number: [{ required: true, message: '请输入岗位数量!', trigger: 'blur' }],
},
formData: {},
},
zzzb: {
queryConfig: false,
tableConfig: {
table: {},
immediate: false,
query: () =>
this.$http({
url: `/baseData/fightPowerHierarchy/weapon/${this.zzjg.selectedKeys[0]}`,
method: 'get',
}),
columns: [
{ dataIndex: 'serial' },
{ title: '装备名称', dataIndex: 'name', width: 'auto', minWidth: 150 },
{ title: '装备数量', dataIndex: 'number', type: 'number', width: 'auto', minWidth: 150 },
{ dataIndex: 'action' },
],
},
pageConfig: false,
showTool: false,
},
zzzbModal: {
visible: false,
title: '',
mode: '',
formItems: [
{
label: '装备名称',
prop: 'weaponId',
component: 'AntOriginTreeSelect',
options: {
dataSource: () =>
this.$http({
url: '/tree/armament',
method: 'get',
}),
readonly: false,
},
},
{ label: '装备数量', prop: 'number' },
],
formRules: {
weaponId: [{ required: true, message: '请选择装备!', trigger: 'change' }],
number: [{ required: true, message: '请输入装备数量!', trigger: 'blur' }],
},
formData: {},
},
}
},
computed: {
gridRows() {
return {
auto: [1, 1],
zzry: [1, '56px'],
zzzb: ['56px', 1],
}[this.layoutRight]
},
zzzbFormItems() {
return [
this.zzzbModal.mode === 'add'
? {
label: '装备名称',
prop: 'weaponId',
component: 'AntOriginTreeSelect',
options: {
dataSource: () =>
this.$http({
url: '/tree/armament',
method: 'get',
}),
readonly: false,
},
}
: { label: '装备名称', prop: 'name', customRender: (v) => v },
{ label: '装备数量', prop: 'number' },
]
},
},
created() {
this.getZzTree()
},
methods: {
async getZzTree() {
try {
const res = await this.$http({
url: `/tree/organization`,
method: 'get',
params: { unittype: 2 },
})
this.zzjg.treeData = res.data
this.zzjg.selectedKeys = [this.zzjg.treeData[0].key]
this.handleChangeZzjgSelected()
} catch (error) {
console.log(error)
}
},
handleChangeZzjgSelected() {
this.$refs['zzry-table'].commitAction('reload')
this.$refs['zzzb-table'].commitAction('reload')
},
handleOpenAddZzjgModal(parentId) {
this.zzjgModal.title = '新建保障力量'
this.zzjgModal.mode = 'add'
this.zzjgModal.formData = { unittype: 2, parentId }
this.zzjgModal.visible = true
},
async handleOpenEditZzjgModal(id) {
try {
const res = await this.$http({
url: `/baseData/fightPowerHierarchy/${id}`,
method: 'get',
})
this.zzjgModal.title = '编辑保障力量'
this.zzjgModal.mode = 'edit'
this.zzjgModal.formData = res.data
this.zzjgModal.visible = true
} catch (error) {
console.log(error)
this.$message.error('未知错误,请重试')
}
},
handleSubmitZzjg(formData) {
return this.$http({
url: `/baseData/fightPowerHierarchy/save`,
method: 'post',
data: formData,
})
},
handleSubmitZzjgSuccess() {
this.getZzTree()
},
async handleDeleteZzjg(id, title) {
try {
await this.$confirm({ content: `确定删除保障力量-${title}` })
await this.$http({
url: `/baseData/fightPowerHierarchy/remove/${id}`,
method: 'get',
})
this.$message.success('删除成功')
this.getZzTree()
} catch (error) {}
},
handleOpenAddZzryModal() {
this.zzryModal.title = '新建组织人员'
this.zzryModal.mode = 'add'
this.zzryModal.formData = { parentId: this.zzjg.selectedKeys[0] }
this.zzryModal.formItems[0].options.readonly = false
this.zzryModal.visible = true
},
handleOpenEditZzryModal(record) {
this.zzryModal.title = `编辑组织人员`
this.zzryModal.mode = 'edit'
this.zzryModal.formData = { ...record }
this.zzryModal.formItems[0].options.readonly = true
this.zzryModal.visible = true
},
handleSubmitZzry(formData) {
return this.$http({
url: `/baseData/fightPowerHierarchy/staff/save`,
method: 'post',
data: formData,
})
},
handleSubmitZzrySuccess() {
this.$refs['zzry-table'].commitAction('query')
},
handleOpenAddZzzbModal() {
this.zzzbModal.title = '新建组织装备'
this.zzzbModal.mode = 'add'
this.zzzbModal.formData = { parentId: this.zzjg.selectedKeys[0] }
this.zzzbModal.visible = true
},
handleOpenEditZzzbModal(record) {
this.zzzbModal.title = `编辑组织装备`
this.zzzbModal.mode = 'edit'
this.zzzbModal.formData = { ...record }
this.zzzbModal.visible = true
},
handleSubmitZzzb(formData) {
return this.$http({
url: `/baseData/fightPowerHierarchy/weapon/save`,
method: 'post',
data: formData,
})
},
handleSubmitZzzbSuccess() {
this.$refs['zzzb-table'].commitAction('query')
},
},
}
</script>
<style lang="less" scoped>
.contextmenu-zz {
padding: 5px;
background-color: #ffffff;
border-radius: 10px;
box-shadow: 0 0 5px #aaaaaa;
}
</style>