This commit is contained in:
liaoboping 2025-09-18 14:07:29 +08:00
parent f4e0fffe0f
commit 68ccb3d2ec
16 changed files with 7928 additions and 0 deletions

View File

@ -0,0 +1,323 @@
<template>
<page-header-wrapper>
<Grid :columns="['400px', 1]" :rows="gridRows">
<a-card
title="想定列表"
class="my-card my-card-has-title"
:bordered="false"
v-loading="xd.loading"
style="grid-row: 1 / 3"
>
<template #extra>
<a-icon type="sync" style="font-size: 30px" @click="getXdListData()" />
</template>
<a-tree
:treeData="xd.listData"
:replaceFields="{ title: 'name', key: 'id' }"
:selectedKeys.sync="xd.selectedKeys"
@select="handleChangeXdSelected"
>
</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="handleOpenAddQxhjModal">新增</a-button>
<a-icon
v-if="layoutRight === 'qxhj'"
type="fullscreen-exit"
style="font-size: 32px"
@click="layoutRight = 'auto'"
/>
<a-icon v-else type="fullscreen" style="font-size: 32px" @click="layoutRight = 'qxhj'" />
</template>
<AntQueryTable
ref="qxhj-table"
height="100%"
:queryConfig="qxhj.queryConfig"
:tableConfig="qxhj.tableConfig"
:pageConfig="qxhj.pageConfig"
:showTool="qxhj.showTool"
>
<template #tablecell-action="{ record }">
<a-button type="text-primary" icon="edit" @click="handleOpenEditQxhjModal(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="handleOpenAddDchjModal">新增</a-button>
<a-icon
v-if="layoutRight === 'dchj'"
type="fullscreen-exit"
style="font-size: 32px"
@click="layoutRight = 'auto'"
/>
<a-icon v-else type="fullscreen" style="font-size: 32px" @click="layoutRight = 'dchj'" />
</template>
<AntQueryTable
ref="dchj-table"
height="100%"
:queryConfig="dchj.queryConfig"
:tableConfig="dchj.tableConfig"
:pageConfig="dchj.pageConfig"
:showTool="dchj.showTool"
>
<template #tablecell-action="{ record }">
<a-button type="text-primary" icon="edit" @click="handleOpenEditDchjModal(record)"></a-button>
</template>
</AntQueryTable>
</a-card>
</Grid>
<AntFormModal
:visible.sync="qxhjModal.visible"
:title="qxhjModal.title"
:formItems="qxhjModal.formItems"
:formRules="qxhjModal.formRules"
:formData="qxhjModal.formData"
:onSubmit="handleSubmitQxhj"
@success="handleSubmitQxhjSuccess"
></AntFormModal>
<AntFormModal
:visible.sync="dchjModal.visible"
:title="dchjModal.title"
:formItems="dchjModal.formItems"
:formRules="dchjModal.formRules"
:formData="dchjModal.formData"
:onSubmit="handleSubmitDchj"
@success="handleSubmitDchjSuccess"
></AntFormModal>
</page-header-wrapper>
</template>
<script>
export default {
name: 'Bzhjsjk',
data() {
return {
layoutRight: 'auto',
xd: {
loading: false,
listData: [],
selectedKeys: [],
},
qxhj: {
queryConfig: false,
tableConfig: {
table: {},
immediate: false,
query: (queryParams) =>
this.$http({
url: `/environment/weather/list`,
method: 'get',
params: { id: this.xd.selectedKeys[0], ...queryParams },
}),
columns: [
{ dataIndex: 'serial' },
{ title: '区域', dataIndex: 'area' },
{ title: '日期', dataIndex: 'date' },
{ title: '天气', dataIndex: 'weather' },
{ title: '大气压', dataIndex: 'airPressure' },
{ title: '空气质量', dataIndex: 'airQuality' },
{ title: '湿度', dataIndex: 'humidity' },
{ title: '降水量', dataIndex: 'precipitation' },
{ title: '能见度', dataIndex: 'visibility' },
{ title: '风向', dataIndex: 'windDirection' },
{ title: '风力', dataIndex: 'windPower' },
{ title: '风速', dataIndex: 'windSpeed' },
{ dataIndex: 'action', width: 100 },
],
},
pageConfig: true,
showTool: false,
},
qxhjModal: {
visible: false,
title: '',
mode: '',
formItems: [
{
label: '区域',
prop: 'area',
component: 'AntOriginSelect',
options: { dataSource: () => this.$http({ url: `/system/area/getTreeSelect`, method: 'get' }) },
},
{
label: '日期',
prop: 'date',
component: 'a-date-picker',
options: { format: 'YYYY/MM/DD', valueFormat: 'YYYY/MM/DD' },
},
{ label: '天气', prop: 'weather' },
{ label: '大气压', prop: 'airPressure' },
{ label: '空气质量', prop: 'airQuality' },
{ label: '湿度', prop: 'humidity' },
{ label: '降水量', prop: 'precipitation' },
{ label: '能见度', prop: 'visibility' },
{ label: '风向', prop: 'windDirection' },
{ label: '风力', prop: 'windPower' },
{ label: '风速', prop: 'windSpeed' },
],
formRules: {},
formData: {},
},
dchj: {
queryConfig: false,
tableConfig: {
table: {},
immediate: false,
query: (queryParams) =>
this.$http({
url: `/environment/ebe/list`,
method: 'get',
params: { id: this.xd.selectedKeys[0], ...queryParams },
}),
columns: [
{ dataIndex: 'serial' },
{ title: '区域', dataIndex: 'area' },
{ title: '持续时间', dataIndex: 'duration' },
{ title: '环境变化趋势', dataIndex: 'environmentalChangeTrends' },
{ title: '环境复杂度', dataIndex: 'environmentalComplexity' },
{ title: '磁场强度', dataIndex: 'fieldStrength' },
{ title: '频率', dataIndex: 'frequency' },
{ title: '频率区间', dataIndex: 'frequencyRang' },
{ title: '干扰幅度', dataIndex: 'interferenceAmplitude' },
{ title: '干扰源', dataIndex: 'interferenceSource' },
{ title: '干扰类型', dataIndex: 'interferenceType' },
{ title: '波型', dataIndex: 'waveType' },
{ dataIndex: 'action', width: 100 },
],
},
pageConfig: true,
showTool: false,
},
dchjModal: {
visible: false,
title: '',
mode: '',
formItems: [
{
label: '区域',
prop: 'area',
component: 'AntOriginSelect',
options: { dataSource: () => this.$http({ url: `/system/area/getTreeSelect`, method: 'get' }) },
},
{ label: '持续时间', prop: 'duration' },
{ label: '环境变化趋势', prop: 'environmentalChangeTrends' },
{ label: '环境复杂度', prop: 'environmentalComplexity' },
{ label: '磁场强度', prop: 'fieldStrength' },
{ label: '频率', prop: 'frequency' },
{ label: '频率区间', prop: 'frequencyRang' },
{ label: '干扰幅度', prop: 'interferenceAmplitude' },
{ label: '干扰源', prop: 'interferenceSource' },
{ label: '干扰类型', prop: 'interferenceType' },
{ label: '波型', prop: 'waveType' },
],
formRules: {},
formData: {},
},
}
},
computed: {
gridRows() {
return {
auto: [1, 1],
qxhj: [1, '56px'],
dchj: ['56px', 1],
}[this.layoutRight]
},
},
created() {
this.getXdListData()
},
methods: {
async getXdListData() {
try {
this.xd.loading = true
const res = await this.$http({
url: `/baseData/scenario/all`,
method: 'get',
})
this.xd.listData = res.data
if (this.xd.selectedKeys.length === 0) {
this.xd.selectedKeys = [this.xd.listData[0].id]
this.handleChangeXdSelected()
}
} catch (error) {
console.log(error)
} finally {
this.xd.loading = false
}
},
handleChangeXdSelected() {
this.$refs['qxhj-table'].commitAction('query')
this.$refs['dchj-table'].commitAction('query')
},
handleOpenAddQxhjModal() {
this.qxhjModal.title = '新建气象环境'
this.qxhjModal.mode = 'add'
this.qxhjModal.formData = { sceneId: this.xd.selectedKeys[0] }
this.qxhjModal.visible = true
},
async handleOpenEditQxhjModal(record) {
try {
const res = await this.$http({
url: `/environment/weather/${record.id}`,
method: 'get',
})
this.qxhjModal.title = `编辑气象环境`
this.qxhjModal.mode = 'edit'
this.qxhjModal.formData = { ...res.data }
this.qxhjModal.visible = true
} catch (error) {
console.log(error)
}
},
handleSubmitQxhj(formData) {
return this.$http({
url: `/environment/weather/save`,
method: 'post',
data: formData,
})
},
handleSubmitQxhjSuccess() {
this.$refs['qxhj-table'].commitAction('query')
},
handleOpenAddDchjModal() {
this.dchjModal.title = '新建电磁环境'
this.dchjModal.mode = 'add'
this.dchjModal.formData = { sceneId: this.xd.selectedKeys[0] }
this.dchjModal.visible = true
},
async handleOpenEditDchjModal(record) {
try {
const res = await this.$http({
url: `/environment/ebe/${record.id}`,
method: 'get',
})
this.dchjModal.title = `编辑电磁环境`
this.dchjModal.mode = 'edit'
this.dchjModal.formData = { ...res.data }
this.dchjModal.visible = true
} catch (error) {
console.log(error)
}
},
handleSubmitDchj(formData) {
return this.$http({
url: `/environment/ebe/save`,
method: 'post',
data: formData,
})
},
handleSubmitDchjSuccess() {
this.$refs['dchj-table'].commitAction('query')
},
},
}
</script>
<style lang="less" scoped></style>

View File

@ -0,0 +1,416 @@
<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>

View File

@ -0,0 +1,24 @@
<template>
<Grid
:columns="[5, 3, 2]"
:rows="[2, 3, 5]"
gap="0px"
:style="{ width: size, height: size, cursor: 'pointer' }"
title="修改军标"
v-on="$listeners"
>
<a-icon type="picture" :style="{ fontSize: `calc(${size} * 8 / 10)`, gridColumn: '1 / 3', gridRow: '2 / 4' }" />
<a-icon type="setting" :style="{ fontSize: `calc(${size} * 5 / 10)`, gridColumn: '2 / 4', gridRow: '1 / 3' }" />
</Grid>
</template>
<script>
export default {
props: {
size: { type: String, default: '30px' },
},
}
</script>
<style lang="less" scoped>
</style>

View File

@ -0,0 +1,207 @@
<template>
<page-header-wrapper>
<Grid :columns="[1, 1, 1]">
<a-card title="想定列表" class="my-card my-card-has-title" :bordered="false" v-loading="xd.loading">
<template #extra>
<a-icon type="sync" style="font-size: 30px" @click="getXdListData()" />
</template>
<a-tree
:treeData="xd.listData"
:replaceFields="{ title: 'name', key: 'id' }"
:selectedKeys.sync="xd.selectedKeys"
@select="handleChangeXdSelected"
>
</a-tree>
</a-card>
<a-card title="作战/保障力量" class="my-card my-card-has-title" :bordered="false" v-loading="zzbzll.loading">
<template #extra>
<a-icon type="sync" style="font-size: 30px" @click="getZzbzllTreeData()" />
</template>
<a-tree
:treeData="zzbzll.treeData"
:replaceFields="{ title: 'name', key: 'id' }"
:selectedKeys.sync="zzbzll.selectedKeys"
:expandedKeys.sync="zzbzll.expandedKeys"
@select="handleChangeZzbzllSelected"
>
</a-tree>
</a-card>
<a-card title="兵力编组信息" class="my-card my-card-has-title" :bordered="false" v-loading="blbz.loading">
<template #extra>
<a-icon type="sync" style="font-size: 30px" @click="getBlbzTreeData()" />
</template>
<a-tree
:treeData="blbz.treeData"
:selectedKeys.sync="blbz.selectedKeys"
:expandedKeys.sync="blbz.expandedKeys"
@select="handleChangeBlbzSelected"
>
</a-tree>
</a-card>
</Grid>
<a-modal v-model="blbzModal.visible" :width="920" :maskClosable="false" :destroyOnClose="true" :footer="null">
<template #title>
<a-radio-group v-model="blbzModal.type" button-style="solid" @change="handleChangeBlbzModalType">
<a-radio-button value="staff">人员</a-radio-button>
<a-radio-button value="weapon">装备</a-radio-button>
</a-radio-group>
</template>
<AntQueryTable
height="600px"
ref="blbz-table"
:queryConfig="blbzModal.queryConfig"
:tableConfig="tableConfig"
:pageConfig="blbzModal.pageConfig"
:showTool="blbzModal.showTool"
></AntQueryTable>
</a-modal>
</page-header-wrapper>
</template>
<script>
export default {
name: 'Fasjk',
data() {
return {
xd: {
loading: false,
listData: [],
selectedKeys: [],
},
zzbzll: {
loading: false,
treeData: [],
selectedKeys: [],
expandedKeys: [],
},
blbz: {
loading: false,
treeData: [],
selectedKeys: [],
expandedKeys: [],
},
blbzModal: {
visible: false,
type: 'staff',
queryConfig: false,
pageConfig: false,
showTool: false,
},
}
},
computed: {
tableConfig() {
return {
query: () =>
this.$http({
url: `/baseData/fightPowerHierarchy/${this.blbzModal.type}/${this.blbz.selectedKeys[0]}`,
method: 'get',
}),
immediate: false,
table: {},
columns: {
staff: [
{ dataIndex: 'serial' },
{ title: '岗位', dataIndex: 'name', width: 'auto', minWidth: 150 },
{ title: '岗位数量', dataIndex: 'number', type: 'number', width: 'auto', minWidth: 150 },
{ dataIndex: 'action' },
],
weapon: [
{ dataIndex: 'serial' },
{ title: '装备名称', dataIndex: 'name', width: 'auto', minWidth: 150 },
{ title: '装备数量', dataIndex: 'number', type: 'number', width: 'auto', minWidth: 150 },
{ dataIndex: 'action' },
],
}[this.blbzModal.type],
}
},
},
created() {
this.getXdListData()
},
methods: {
async getXdListData() {
try {
this.xd.loading = true
const res = await this.$http({
url: `/baseData/scenario/all`,
method: 'get',
})
this.xd.listData = res.data
} catch (error) {
console.log(error)
} finally {
this.xd.loading = false
}
},
handleChangeXdSelected() {
this.getZzbzllTreeData()
},
async getZzbzllTreeData() {
try {
this.zzbzll.loading = true
const res = await this.$http({
url: `/scenario/power/${this.xd.selectedKeys[0]}`,
method: 'get',
})
this.zzbzll.treeData = [
{
id: '1',
name: '红方',
selectable: false,
children: [
{ id: '1-1', name: '作战力量', selectable: false, children: res.data.red.fight },
{ id: '1-2', name: '保障力量', selectable: false, children: res.data.red.guarantee },
{ id: '1-3', name: '指挥力量', selectable: false, children: res.data.red.command },
],
},
{
id: '2',
name: '蓝方',
selectable: false,
children: [
{ id: '2-1', name: '作战力量', selectable: false, children: res.data.blue.fight },
{ id: '2-2', name: '保障力量', selectable: false, children: res.data.blue.guarantee },
{ id: '2-3', name: '指挥力量', selectable: false, children: res.data.blue.command },
],
},
]
this.zzbzll.expandedKeys = ['1', '1-1', '1-2', '1-3', '2', '2-1', '2-2', '2-3']
} catch (error) {
console.log(error)
} finally {
this.zzbzll.loading = false
}
},
handleChangeZzbzllSelected() {
this.getBlbzTreeData()
},
async getBlbzTreeData() {
try {
this.blbz.loading = true
const res = await this.$http({
url: `/blbz/${this.zzbzll.selectedKeys[0]}`,
method: 'get',
})
this.blbz.treeData = res.data
} catch (error) {
console.log(error)
this.blbz.treeData = [{ title: '123', key: '123' }]
} finally {
this.blbz.loading = false
}
},
handleChangeBlbzSelected() {
this.blbzModal.visible = true
this.$nextTick(() => {
this.$refs['blbz-table'].commitAction('query')
})
},
handleChangeBlbzModalType() {
this.$refs['blbz-table'].commitAction('query')
},
},
}
</script>
<style lang="less" scoped></style>

View File

@ -0,0 +1,120 @@
<template>
<page-header-wrapper>
<Grid>
<a-card class="my-card">
<AntQueryTable
height="100%"
ref="fd-table"
:queryConfig="fdTable.queryConfig"
:tableConfig="fdTable.tableConfig"
:pageConfig="fdTable.pageConfig"
:showTool="fdTable.showTool"
>
<template #toolbar-left>
<a-button type="primary" icon="plus" @click="handleOpenAddModal()">新增</a-button>
</template>
<template #tablecell-action="{ record }">
<a-button type="text-primary" icon="edit" @click="handleOpenEditModal(record)"></a-button>
<a-button type="text-danger" icon="delete" @click="handleDelete(record)"></a-button>
</template>
</AntQueryTable>
</a-card>
</Grid>
<AntFormModal
:visible.sync="AEModal.visible"
:title="AEModal.title"
width="900px"
:formConfig="{ labelCol: { span: 3 }, wrapperCol: { span: 19 } }"
:formItems="AEModal.formItems"
:formRules="AEModal.formRules"
:formData="AEModal.formData"
:onSubmit="handleSubmitAE"
@success="handleSubmitAESuccess"
></AntFormModal>
</page-header-wrapper>
</template>
<script>
import { getAction, postAction } from '@/api/manage'
export default {
data() {
return {
fdTable: {
queryConfig: false,
tableConfig: {
query: () => getAction('/team/list'),
columns: [
{ dataIndex: 'serial' },
{ dataIndex: 'name', title: '分队名称', width: 'auto', minWidth: 160 },
{
dataIndex: 'type',
title: '分队类型',
width: 'auto',
minWidth: 160,
align: 'center',
customRender: (text) => ['作战分队', '保障分队'][text],
},
{ dataIndex: 'action' },
],
},
pageConfig: true,
showTool: true,
},
AEModal: {
visible: false,
title: '',
formItems: [
{ label: '分队名称', prop: 'name' },
{
label: '分队类型',
prop: 'type',
component: 'AntOriginSelect',
options: {
dataSource: () => ({
data: [
{ title: '作战分队', id: 0 },
{ title: '保障分队', id: 1 },
],
}),
},
},
{ label: '分队军标', prop: 'iconId', component: 'IconSelector' },
],
formRules: {},
formData: {},
},
}
},
methods: {
handleOpenAddModal() {
this.AEModal.title = '新增分队'
this.AEModal.formData = {}
this.AEModal.visible = true
},
handleOpenEditModal(record) {
this.AEModal.title = '编辑分队'
this.AEModal.formData = { ...record }
this.AEModal.visible = true
},
handleSubmitAE(formData) {
return postAction('/team/save', formData)
},
handleSubmitAESuccess() {
this.$refs['fd-table'].commitAction('query')
},
async handleDelete(record) {
try {
await this.$confirm({ title: '温馨提示', content: '确定要删除该分队吗?' })
const res = await getAction('/team/remove/' + record.id)
this.$message.success(res.message)
this.$refs['fd-table'].commitAction('query')
} catch (error) {
console.log(error)
}
},
},
}
</script>
<style lang="less" scoped></style>

View File

@ -0,0 +1,132 @@
<template>
<Grid class="database-page" :rows="[1, 1]">
<ModuleWrapper title="保障实体类数据库">
<Grid class="normal bzstlsjk" :columns="bzstlsjkColumns">
<div v-for="(item, index) in bzstlsjk" :key="index" class="sjk-item" @click="$router.push(item.path)">
<img :src="item.image" alt="" />
<div class="title">{{ item.title }}</div>
</div>
</Grid>
</ModuleWrapper>
<ModuleWrapper title="业务应用类数据库">
<Grid class="normal ywyylsjk" :columns="ywyylsjkColumns">
<div v-for="(item, index) in ywyylsjk" :key="index" class="sjk-item" @click="$router.push(item.path)">
<img :src="item.image" alt="" />
<div class="title">{{ item.title }}</div>
</div>
</Grid>
</ModuleWrapper>
</Grid>
</template>
<script>
export default {
name: 'SimulationSceneDatabase',
data() {
return {
bzstlsjk: [
{
title: '作战力量数据库',
image: require('@/assets/images/simulation-scene/database/zzllsjk.png'),
path: '/databaseSystem/zzllsjk',
},
{
title: '保障力量数据库',
image: require('@/assets/images/simulation-scene/database/bzllsjk.png'),
path: '/databaseSystem/bzllsjk',
},
{
title: '保障环境数据库',
image: require('@/assets/images/simulation-scene/database/bzhjsjk.png'),
path: '/databaseSystem/bzhjsjk',
},
{
title: '装备数据库',
image: require('@/assets/images/simulation-scene/database/bzhjsjk.png'),
path: '/databaseSystem/zbsjk',
},
],
ywyylsjk: [
{
title: '想定数据库',
image: require('@/assets/images/simulation-scene/database/xdsjk.png'),
path: '/databaseSystem/xdsjk',
},
{
title: '方案数据库',
image: require('@/assets/images/simulation-scene/database/fasjk.png'),
path: '/databaseSystem/fasjk',
},
{
title: '进程数据库',
image: require('@/assets/images/simulation-scene/database/jcsjk.png'),
path: '/databaseSystem/jcsjk',
},
{
title: '图形数据库',
image: require('@/assets/images/simulation-scene/database/txsjk.png'),
path: '/databaseSystem/txsjk',
},
{
title: '运行记录数据库',
image: require('@/assets/images/simulation-scene/database/yxjlsjk.png'),
path: '/databaseSystem/yxjlsjk',
},
],
}
},
computed: {
bzstlsjkColumns() {
return new Array(this.bzstlsjk.length).fill(1)
},
ywyylsjkColumns() {
return new Array(this.ywyylsjk.length).fill(1)
},
},
}
</script>
<style lang="less" scoped>
.database-page {
padding: 20px;
}
img {
width: 100%;
height: 100%;
object-fit: cover;
border: 1px solid #06445f;
}
.sjk-item {
position: relative;
cursor: pointer;
.title {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
background-color: #02223466;
border: 1px solid #17759e;
padding: 20px 0;
font-size: 24px;
line-height: 1;
letter-spacing: 2px;
white-space: nowrap;
text-align: center;
}
}
.sjk-item:hover {
.title {
background-color: #17759e99;
}
}
.bzstlsjk {
.title {
width: 252px;
}
}
.ywyylsjk {
.title {
width: 222px;
}
}
</style>

View File

@ -0,0 +1,98 @@
<template>
<page-header-wrapper>
<Grid :columns="['400px', 1]">
<a-card title="想定列表" class="my-card my-card-has-title" :bordered="false" v-loading="xd.loading">
<template #extra>
<a-icon type="sync" style="font-size: 30px" @click="getXdListData()" />
</template>
<a-tree
:treeData="xd.listData"
:replaceFields="{ title: 'name', key: 'id' }"
:selectedKeys.sync="xd.selectedKeys"
@select="handleChangeXdSelected"
>
</a-tree>
</a-card>
<a-card title="进程列表" class="my-card my-card-has-title" :bordered="false">
<template #extra>
<a-icon type="sync" style="font-size: 30px" @click="() => {}" />
</template>
<AntQueryTable
ref="jc-table"
height="100%"
:queryConfig="jc.queryConfig"
:tableConfig="jc.tableConfig"
:pageConfig="jc.pageConfig"
:showTool="jc.showTool"
>
</AntQueryTable>
</a-card>
</Grid>
</page-header-wrapper>
</template>
<script>
export default {
name: 'Jcsjk',
data() {
return {
xd: {
loading: false,
listData: [],
selectedKeys: [],
},
jc: {
queryConfig: false,
tableConfig: {
table: {},
immediate: false,
query: () =>
this.$http({
url: '/baseData/scenario/taskList',
method: 'get',
params: { id: this.xd.selectedKeys[0] },
}).then((res) => ({
data: res.data.map(([a, b, c], index) => ({ id: index, 0: a, 1: b, 2: c })),
})),
columns: [
{ dataIndex: 'serial' },
{ title: '任务进程名称', dataIndex: '0', width: 'auto', minWidth: 150 },
{ title: '开始时间', dataIndex: '1', width: 'auto', minWidth: 150 },
{ title: '失效时间', dataIndex: '2', width: 'auto', minWidth: 150 },
],
},
pageConfig: false,
showTool: false,
},
}
},
created() {
this.getXdListData()
},
methods: {
async getXdListData() {
try {
this.xd.loading = true
const res = await this.$http({
url: `/baseData/scenario/all`,
method: 'get',
})
this.xd.listData = res.data
if (this.xd.selectedKeys.length === 0) {
this.xd.selectedKeys = [this.xd.listData[0].id]
this.handleChangeXdSelected()
}
} catch (error) {
console.log(error)
} finally {
this.xd.loading = false
}
},
handleChangeXdSelected() {
this.$refs['jc-table'].commitAction('query')
},
},
}
</script>
<style lang="less" scoped></style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,154 @@
<template>
<a-modal
:visible="visible"
:mask-closable="false"
title="详情"
:width="848"
:footer="null"
destroyOnClose
@cancel="close">
<a-table :columns="populationColumn" :dataSource="populationList" :pagination="false" :scroll="{x:true}" bordered>
<template slot="serial" slot-scope="text, record, index0">
{{ index0 + 1 }}
</template>
<template slot="valuetype" slot-scope="text, record">
<!-- 公共ID展示 -->
<template v-if="record.translate == '#DBID'">
{{ record.value }}
</template>
<!-- 判断展示类型为详情 -->
<template v-if="text == 'combobox'">
<template v-if="record.fieldname == 'Type'">
{{ record.value }}
</template>
<template v-if="record.fieldname == 'Category'">
{{ record.value }}
</template>
</template>
<template v-else-if="text == 'combostr'">
<span v-for="(item1,index1) in record.value.split(',')" :key="index1">
<span v-for="(item2,index2) in dicData.operatorcountry" :key="index2">
<span v-if="item2.id == item1">
<span style="margin-right:5px;">{{ item2.description }}</span>
</span>
</span>
</span>
</template>
<template v-else-if="text == 'combotree'">
<span v-for="(item1,index1) in treeData" :key="index1">
<span v-if="item1.key == record.value">
{{ item1.title }}
</span>
<span v-for="(item2,index2) in item1.children" :key="index2">
<span v-if="item2.key == record.value">
{{ item2.title }}
</span>
<span v-for="(item3,index3) in item2.children" :key="index3">
<span v-if="item3.key == record.value">
{{ item3.title }}
</span>
</span>
</span>
</span>
</template>
<template v-else-if="text == 'checkbox'">
<span v-if="record.value == 1"></span>
<span v-if="record.value == 0"></span>
</template>
<template v-else>
<template v-if="record.translate != '#DBID'">
{{ record.value }}
</template>
</template>
</template>
</a-table>
</a-modal>
</template>
<script>
import { getAction } from '@/api/manage'
export default {
data () {
return {
populationList: [],
populationColumn: [
{
title: '',
scopedSlots: {
customRender: 'serial'
}
},
{
title: '参数',
key: 'translate',
dataIndex: 'translate',
scopedSlots: {
customRender: 'translate'
}
},
{
title: '类型',
key: 'valuetype',
dataIndex: 'valuetype',
scopedSlots: {
customRender: 'valuetype'
}
}
],
}
},
props: {
visible: {
type: Boolean,
default: false
},
entityType: {
type: String,
default: ''
},
guid: {
type: String,
default: ''
},
id: {
type: String,
default: ''
},//id
},
watch: {
visible (val) {
if (val) {
this.getData()
console.log(this.id, 'id888')
}
}
},
methods: {
getData () {
const entityType1 = this.entityType.toLowerCase()
getAction('/dbdata/aircraft/getInfoList',{
tableName: 'Data' + this.entityType
}).then((res) => {
if (res.code == 200) {
getAction('/basedata/' + entityType1 + '/getInfo?id=' + this.id, {}).then((res2) => {
for(const i in res.data) {
for(const j in res2.data) {
if(j == res.data[i].fieldname) {
console.log(res.data[i],'res.data[i]')
res.data[i].value = res2.data[j]
}
}
}
this.populationList = res.data
console.log(this.populationList,'this.populationList')
})
}
})
},
close () {
this.populationList = []
this.$emit('closeModal')
}
}
}
</script>

View File

@ -0,0 +1,731 @@
// 配置列表要显示的列信息
export var listGridInfo = {
'Aircraft':{
cols:[
{
title: '#DBID',
key: 'id',
dataIndex: 'id',
scopedSlots: {
customRender: 'id'
}
},
{
title: '名称',
key: 'name',
dataIndex: 'name',
scopedSlots: {
customRender: 'name'
}
},
{
title: '类型',
key: 'type',
dataIndex: 'type',
scopedSlots: {
customRender: 'type'
}
},
{
title: '国家',
key: 'operatorCountry',
dataIndex: 'operatorCountry',
scopedSlots: {
customRender: 'operatorCountry'
}
},
{
title: '军种',
key: 'operatorService',
dataIndex: 'operatorService',
scopedSlots: {
customRender: 'operatorService'
}
},
{
title: '造价(百万,¥)',
key: 'cost',
dataIndex: 'cost',
scopedSlots: {
customRender: 'cost'
}
},
{
title: '服役年',
key: 'yearCommissioned',
dataIndex: 'yearCommissioned',
scopedSlots: {
customRender: 'yearCommissioned'
}
},
{
title: '退役年',
key: 'yearDecommissioned',
dataIndex: 'yearDecommissioned',
scopedSlots: {
customRender: 'yearDecommissioned'
}
}
]
},
'Ship':{
cols:[
{
title: '#DBID',
key: 'id',
dataIndex: 'id',
scopedSlots: {
customRender: 'id'
}
},
{
title: '名称',
key: 'name',
dataIndex: 'name',
scopedSlots: {
customRender: 'name'
}
},{
title: '类别',
key: 'category',
dataIndex: 'category',
scopedSlots: {
customRender: 'category'
}
},{
title: '所属国',
key: 'operatorCountry',
dataIndex: 'operatorCountry',
scopedSlots: {
customRender: 'operatorCountry'
}
},{
title: '所属军种',
key: 'operatorService',
dataIndex: 'operatorService',
scopedSlots: {
customRender: 'operatorService'
}
},{
title: '造价(百万,¥)',
key: 'cost',
dataIndex: 'cost',
scopedSlots: {
customRender: 'cost'
}
},{
title: '服役年',
key: 'yearCommissioned',
dataIndex: 'yearCommissioned',
scopedSlots: {
customRender: 'yearCommissioned'
}
},
{
title: '退役年',
key: 'yearDecommissioned',
dataIndex: 'yearDecommissioned',
scopedSlots: {
customRender: 'yearDecommissioned'
}
},{
title: '注释',
key: 'comments',
dataIndex: 'comments',
scopedSlots: {
customRender: 'comments'
}
},
{
title: '类型',
key: 'type',
dataIndex: 'type',
scopedSlots: {
customRender: 'type'
}
}
]
},
'Submarine':{
cols:[
{
title: '#DBID',
key: 'id',
dataIndex: 'id',
scopedSlots: {
customRender: 'id'
}
},{
title: '名称',
key: 'name',
dataIndex: 'name',
scopedSlots: {
customRender: 'name'
}
},{
title: '类别',
key: 'category',
dataIndex: 'category',
scopedSlots: {
customRender: 'category'
}
},{
title: '所属国',
key: 'operatorCountry',
dataIndex: 'operatorCountry',
scopedSlots: {
customRender: 'operatorCountry'
}
},{
title: '所属军种',
key: 'operatorService',
dataIndex: 'operatorService',
scopedSlots: {
customRender: 'operatorService'
}
},{
title: '造价(百万,¥)',
key: 'cost',
dataIndex: 'cost',
scopedSlots: {
customRender: 'cost'
}
},{
title: '服役年',
key: 'yearCommissioned',
dataIndex: 'yearCommissioned',
scopedSlots: {
customRender: 'yearCommissioned'
}
},
{
title: '退役年',
key: 'yearDecommissioned',
dataIndex: 'yearDecommissioned',
scopedSlots: {
customRender: 'yearDecommissioned'
}
},{
title: '注释',
key: 'comments',
dataIndex: 'comments',
scopedSlots: {
customRender: 'comments'
}
},
{
title: '类型',
key: 'type',
dataIndex: 'type',
scopedSlots: {
customRender: 'type'
}
}
]
},
'Weapon':{
cols:[
{
title: '#DBID',
key: 'id',
dataIndex: 'id',
scopedSlots: {
customRender: 'id'
}
},
{
title: '名称',
key: 'name',
dataIndex: 'name',
scopedSlots: {
customRender: 'name'
}
},{
title: '生产年代',
key: 'generation',
dataIndex: 'generation',
scopedSlots: {
customRender: 'generation'
}
},{
title: '所属国',
key: 'operatorCountry',
dataIndex: 'operatorCountry',
scopedSlots: {
customRender: 'operatorCountry'
}
},{
title: '造价(百万,¥)',
key: 'cost',
dataIndex: 'cost',
scopedSlots: {
customRender: 'cost'
}
},{
title: '注释',
key: 'comments',
dataIndex: 'comments',
scopedSlots: {
customRender: 'comments'
}
},
{
title: '类型',
key: 'type',
dataIndex: 'type',
scopedSlots: {
customRender: 'type'
}
}
]
},
'Facility':{
cols:[
{
title: '#DBID',
key: 'id',
dataIndex: 'id',
scopedSlots: {
customRender: 'id'
}
},
{
title: '名称',
key: 'name',
dataIndex: 'name',
scopedSlots: {
customRender: 'name'
}
},{
title: '类别',
key: 'category',
dataIndex: 'category',
scopedSlots: {
customRender: 'category'
}
},{
title: '所属国',
key: 'operatorCountry',
dataIndex: 'operatorCountry',
scopedSlots: {
customRender: 'operatorCountry'
}
},{
title: '所属军种',
key: 'operatorService',
dataIndex: 'operatorService',
scopedSlots: {
customRender: 'operatorService'
}
},{
title: '造价(百万,¥)',
key: 'cost',
dataIndex: 'cost',
scopedSlots: {
customRender: 'cost'
}
},{
title: '服役年',
key: 'yearCommissioned',
dataIndex: 'yearCommissioned',
scopedSlots: {
customRender: 'yearCommissioned'
}
},
{
title: '退役年',
key: 'yearDecommissioned',
dataIndex: 'yearDecommissioned',
scopedSlots: {
customRender: 'yearDecommissioned'
}
},{
title: '注释',
key: 'comments',
dataIndex: 'comments',
scopedSlots: {
customRender: 'comments'
}
},
{
title: '类型',
key: 'type',
dataIndex: 'type',
scopedSlots: {
customRender: 'type'
}
}
]
},
'Satellite':{
cols:[
{
title: '#DBID',
key: 'id',
dataIndex: 'id',
scopedSlots: {
customRender: 'id'
}
},
{
title: '名称',
key: 'name',
dataIndex: 'name',
scopedSlots: {
customRender: 'name'
}
},{
title: '类别',
key: 'category',
dataIndex: 'category',
scopedSlots: {
customRender: 'category'
}
},{
title: '所属国',
key: 'operatorCountry',
dataIndex: 'operatorCountry',
scopedSlots: {
customRender: 'operatorCountry'
}
},{
title: '所属军种',
key: 'operatorService',
dataIndex: 'operatorService',
scopedSlots: {
customRender: 'operatorService'
}
},{
title: '造价(百万,¥)',
key: 'cost',
dataIndex: 'cost',
scopedSlots: {
customRender: 'cost'
}
},{
title: '服役年',
key: 'yearCommissioned',
dataIndex: 'yearCommissioned',
scopedSlots: {
customRender: 'yearCommissioned'
}
},
{
title: '退役年',
key: 'yearDecommissioned',
dataIndex: 'yearDecommissioned',
scopedSlots: {
customRender: 'yearDecommissioned'
}
},{
title: '注释',
key: 'comments',
dataIndex: 'comments',
scopedSlots: {
customRender: 'comments'
}
},
{
title: '类型',
key: 'type',
dataIndex: 'type',
scopedSlots: {
customRender: 'type'
}
}
]
},
'Comm':{
cols:[
{
title: '#DBID',
key: 'id',
dataIndex: 'id',
scopedSlots: {
customRender: 'id'
}
},
{
title: '名称',
key: 'name',
dataIndex: 'name',
scopedSlots: {
customRender: 'name'
}
},{
title: '类型',
key: 'type',
dataIndex: 'type',
scopedSlots: {
customRender: 'type'
}
},{
title: '注释',
key: 'comments',
dataIndex: 'comments',
scopedSlots: {
customRender: 'comments'
}
}
]
},
'Sensor':{
cols:[
{
title: '#DBID',
key: 'id',
dataIndex: 'id',
scopedSlots: {
customRender: 'id'
}
},
{
title: '名称',
key: 'name',
dataIndex: 'name',
scopedSlots: {
customRender: 'name'
}
},{
title: '类型',
key: 'type',
dataIndex: 'type',
scopedSlots: {
customRender: 'type'
}
},{
title: '注释',
key: 'comments',
dataIndex: 'comments',
scopedSlots: {
customRender: 'comments'
}
},{
title: '最大作用距离(公里)',
key: 'rangeMax',
dataIndex: 'rangeMax',
scopedSlots: {
customRender: 'rangeMax'
}
}
]
},
'Loadout':{
cols:[
{
title: '#DBID',
key: 'id',
dataIndex: 'id',
scopedSlots: {
customRender: 'id'
}
},
{
title: '名称',
key: 'name',
dataIndex: 'name',
scopedSlots: {
customRender: 'name'
}
},{
title: '挂载方案的作用',
key: 'loadoutRole',
dataIndex: 'loadoutRole',
scopedSlots: {
customRender: 'loadoutRole'
}
},{
title: '注释',
key: 'comments',
dataIndex: 'comments',
scopedSlots: {
customRender: 'comments'
}
}
]
},
'Magazine':{
cols:[
{
title: '#DBID',
key: 'id',
dataIndex: 'id',
scopedSlots: {
customRender: 'id'
}
},
{
title: '名称',
key: 'name',
dataIndex: 'name',
scopedSlots: {
customRender: 'name'
}
},{
title: '装甲',
key: 'armorGeneral',
dataIndex: 'armorGeneral',
scopedSlots: {
customRender: 'armorGeneral'
}
},{
title: '补给间隔时间(秒)',
key: 'rof',
dataIndex: 'rof',
scopedSlots: {
customRender: 'rof'
}
},{
title: '容量',
key: 'capacity',
dataIndex: 'capacity',
scopedSlots: {
customRender: 'capacity'
}
},{
title: '注释',
key: 'comments',
dataIndex: 'comments',
scopedSlots: {
customRender: 'comments'
}
}
]
},
'Mount':{
cols:[
{
title: '#DBID',
key: 'id',
dataIndex: 'id',
scopedSlots: {
customRender: 'id'
}
},
{
title: '名称',
key: 'name',
dataIndex: 'name',
scopedSlots: {
customRender: 'name'
}
},{
title: '注释',
key: 'comments',
dataIndex: 'comments',
scopedSlots: {
customRender: 'comments'
}
}
]
},
'Propulsion':{
cols:[
{
title: '#DBID',
key: 'id',
dataIndex: 'id',
scopedSlots: {
customRender: 'id'
}
},
{
title: '名称',
key: 'name',
dataIndex: 'name',
scopedSlots: {
customRender: 'name'
}
},{
title: '类型',
key: 'type',
dataIndex: 'type',
scopedSlots: {
customRender: 'type'
}
},{
title: '注释',
key: 'comments',
dataIndex: 'comments',
scopedSlots: {
customRender: 'comments'
}
}
]
},
'Warhead':{
cols:[
{
title: '#DBID',
key: 'id',
dataIndex: 'id',
scopedSlots: {
customRender: 'id'
}
},
{
title: '名称',
key: 'name',
dataIndex: 'name',
scopedSlots: {
customRender: 'name'
}
},{
title: '炸药类型',
key: 'explosivesType',
dataIndex: 'explosivesType',
scopedSlots: {
customRender: 'explosivesType'
}
},{
title: '类型',
key: 'type',
dataIndex: 'type',
scopedSlots: {
customRender: 'type'
}
},{
title: '注释',
key: 'comments',
dataIndex: 'comments',
scopedSlots: {
customRender: 'comments'
}
}
]
},
Laser: {
cols:[
{
title: '#DBID',
key: 'id',
dataIndex: 'id',
scopedSlots: {
customRender: 'id'
}
},
{
title: '名称',
key: 'name',
dataIndex: 'name',
scopedSlots: {
customRender: 'name'
}
},{
title: '类型',
key: 'type',
dataIndex: 'type',
scopedSlots: {
customRender: 'type'
}
},{
title: '所属国',
key: 'operatorCountry',
dataIndex: 'operatorCountry',
scopedSlots: {
customRender: 'operatorCountry'
}
}
]
}
}

View File

@ -0,0 +1,110 @@
<template>
<page-header-wrapper>
<Grid>
<a-card class="my-card">
<AntQueryTable
height="100%"
ref="tx-table"
:queryConfig="txTable.queryConfig"
:tableConfig="txTable.tableConfig"
:pageConfig="txTable.pageConfig"
:showTool="txTable.showTool"
>
<template #toolbar-left>
<a-button type="primary" icon="plus" @click="handleOpenAddModal">新增</a-button>
</template>
<template #tablecell-iconBase64="{ text }">
<img :src="text" alt="" style="width: 100px; height: 70px; object-fit: contain" />
</template>
<template #tablecell-action="{ record }">
<a-button type="text-primary" icon="edit" @click="handleOpenEditModal(record)"></a-button>
<a-button type="text-danger" icon="delete" @click="handleDelete(record)"></a-button>
</template>
</AntQueryTable>
</a-card>
</Grid>
<AntFormModal
:visible.sync="AEModal.visible"
:title="AEModal.title"
width="900px"
:formConfig="{ labelCol: { span: 3 }, wrapperCol: { span: 19 } }"
:formItems="AEModal.formItems"
:formRules="AEModal.formRules"
:formData="AEModal.formData"
:onSubmit="handleSubmitAE"
@success="handleSubmitAESuccess"
></AntFormModal>
</page-header-wrapper>
</template>
<script>
import { deleteAction, getAction, postAction, putAction } from '@/api/manage'
export default {
name: 'Txsjk',
data() {
return {
txTable: {
queryConfig: false,
tableConfig: {
query: () => getAction('/icon/list'),
columns: [
{ dataIndex: 'serial' },
{ dataIndex: 'iconName', title: '军标名称', width: 'auto', align: 'center' },
{ dataIndex: 'iconBase64', title: '军标图片', width: 'auto', align: 'center' },
{ dataIndex: 'action' },
],
},
pageConfig: true,
showTool: true,
},
AEModal: {
visible: false,
title: '新增图形',
formItems: [
{ label: '军标名称', prop: 'iconName' },
{ label: '军标图片', prop: 'iconBase64', component: 'Image2Base64' },
],
formRules: {},
formData: {},
},
}
},
methods: {
handleOpenAddModal() {
this.AEModal.formData = {}
this.AEModal.visible = true
},
async handleOpenEditModal(record) {
try {
const res = await getAction(`/icon/${record.id}`)
this.AEModal.formData = res.data
this.AEModal.visible = true
} catch (error) {
console.log(error)
}
},
handleSubmitAE(formData) {
return this.$http({
url: '/icon/save',
method: 'post',
data: formData,
})
},
handleSubmitAESuccess() {
this.$refs['tx-table'].commitAction('query')
},
async handleDelete(record) {
try {
await this.$confirm({ title: '温馨提示', content: '确定要删除该军标吗?' })
const res = await getAction('/icon/remove/' + record.id)
this.$message.success(res.message)
this.$refs['tx-table'].commitAction('query')
} catch (error) {
console.log(error)
}
},
},
}
</script>
<style lang="less" scoped></style>

View File

@ -0,0 +1,133 @@
<template>
<page-header-wrapper>
<Grid>
<a-card class="my-card">
<AntQueryTable
height="100%"
ref="xd-table"
:queryConfig="xdTable.queryConfig"
:tableConfig="xdTable.tableConfig"
:pageConfig="xdTable.pageConfig"
:showTool="xdTable.showTool"
>
<template #toolbar-left>
<a-button type="primary" icon="plus" @click="handleOpenAddModal">新增</a-button>
</template>
<template #tablecell-action="{ record }">
<a-button type="text-primary" icon="form" @click="handleOpenEditModal(record)"></a-button>
<a-divider type="vertical" />
<a-popconfirm
title="确定要删除该想定吗?"
ok-text="确定"
cancel-text="取消"
@confirm="handleDelete(record)"
>
<a-button type="text-primary" icon="delete"></a-button>
</a-popconfirm>
</template>
</AntQueryTable>
</a-card>
</Grid>
<AntFormModal
:visible.sync="AEModal.visible"
:title="AEModal.title"
:formItems="AEModal.formItems"
:formRules="AEModal.formRules"
:formData="AEModal.formData"
:onSubmit="handleSubmitAE"
@success="handleSubmitAESuccess"
></AntFormModal>
</page-header-wrapper>
</template>
<script>
export default {
name: 'Xdsjk',
data() {
return {
xdTable: {
queryConfig: {
items: [{ label: '想定名称', prop: 'name' }],
},
tableConfig: {
query: (params) =>
this.$http({
url: '/baseData/scenario/list',
method: 'get',
params: params,
}),
columns: [
{ dataIndex: 'serial' },
{ title: '想定名称', align: 'left', dataIndex: 'name', ellipsis: true, width: 'auto' },
{ title: '作者', dataIndex: 'author', align: 'left', width: 'auto' },
{
title: '创建时间',
dataIndex: 'createTime',
customRender: (t) => t?.replace('T', ' '),
align: 'left',
width: 'auto',
},
{ dataIndex: 'action' },
],
},
pageConfig: true,
showTool: true,
},
AEModal: {
visible: false,
title: '新增想定',
formItems: [{ label: '想定名称', prop: 'name' }],
formRules: {
name: [{ required: true, message: '请输入想定名称!', trigger: 'blur' }],
},
formData: {},
},
}
},
methods: {
handleOpenAddModal() {
this.AEModal.formData = {}
this.AEModal.title = '新增想定'
this.AEModal.visible = true
},
async handleOpenEditModal(record) {
try {
const res = await this.$http({
url: `/baseData/scenario/${record.id}`,
method: 'get',
})
this.AEModal.formData = res.data
this.AEModal.title = '编辑想定'
this.AEModal.visible = true
} catch (error) {
console.log(error)
}
},
handleSubmitAE(formData) {
return this.$http({
url: `/baseData/scenario/save`,
method: 'post',
data: formData,
})
},
handleSubmitAESuccess() {
this.$refs['xd-table'].commitAction('query')
},
async handleDelete(record) {
try {
await this.$http({
url: `/baseData/scenario/remove/${record.id}`,
method: 'get',
})
this.$message.success('删除想定成功')
this.$refs['xd-table'].commitAction('query')
} catch (error) {
console.log(error)
this.$message.error('删除想定失败')
}
},
},
}
</script>
<style lang="less" scoped></style>

View File

@ -0,0 +1,68 @@
<template>
<page-header-wrapper>
<Grid>
<a-card class="my-card">
<AntQueryTable
height="100%"
ref="xd-table"
:queryConfig="yxjlTable.queryConfig"
:tableConfig="yxjlTable.tableConfig"
:pageConfig="yxjlTable.pageConfig"
:showTool="yxjlTable.showTool"
>
</AntQueryTable>
</a-card>
</Grid>
</page-header-wrapper>
</template>
<script>
export default {
name: 'Yxjlsjk',
data() {
return {
yxjlTable: {
queryConfig: {
items: [{ label: '想定名称', prop: 'name' }],
},
tableConfig: {
query: (params) =>
this.$http({
url: '/scenarioHistory/list',
method: 'get',
params: params,
}),
columns: [
{ dataIndex: 'serial' },
{ title: '#', align: 'center', dataIndex: 'id', width: 80 },
{ title: '想定名称', align: 'left', dataIndex: 'name', ellipsis: true, width: 'auto' },
{ title: '作者', dataIndex: 'author', align: 'left', width: 'auto' },
{
title: '运行状态',
dataIndex: 'finalStatus',
customRender: (t) => ({ 1: '中止', 2: '推演结束' }[t]),
align: 'center',
},
{
title: '开始时间',
dataIndex: 'scenarioStartRunTime',
customRender: (t) => t?.replace('T', ' '),
align: 'center',
},
{
title: '结束时间',
dataIndex: 'scenarioEndRunTime',
customRender: (t) => t?.replace('T', ' '),
align: 'center',
},
],
},
pageConfig: true,
showTool: false,
},
}
},
}
</script>
<style lang="less" scoped></style>

View File

@ -0,0 +1,507 @@
<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 / 4">
<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>
<!-- 组织物资卡片 -->
<a-card title="组织物资" class="my-card my-card-has-title" :bordered="false">
<template #extra>
<a-button type="primary" style="margin-right: 20px" @click="handleOpenAddZzwzModal">新增</a-button>
<a-icon
v-if="layoutRight === 'zzwz'"
type="fullscreen-exit"
style="font-size: 32px"
@click="layoutRight = 'auto'" />
<a-icon v-else type="fullscreen" style="font-size: 32px" @click="layoutRight = 'zzwz'" />
</template>
<AntQueryTable
ref="zzwz-table"
height="100%"
:queryConfig="zzwz.queryConfig"
:tableConfig="zzwz.tableConfig"
:pageConfig="zzwz.pageConfig" :showTool="zzwz.showTool">
<template #tablecell-action="{ record }">
<a-button type="text-primary" icon="edit" @click="handleOpenEditZzwzModal(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>
<!-- 组织物资模态框 -->
<AntFormModal
:visible.sync="zzwzModal.visible"
:title="zzwzModal.title"
:formItems="zzwzFormItems"
:formRules="zzwzModal.formRules" :formData="zzwzModal.formData" :onSubmit="handleSubmitZzwz"
@success="handleSubmitZzwzSuccess"></AntFormModal>
</page-header-wrapper>
</template>
<script>
export default {
name: 'Zzllsjk',
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: 1 },
}).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: {},
},
zzwz: {
queryConfig: false,
tableConfig: {
table: {},
immediate: false,
query: () =>
this.$http({
url: `baseData/fightPowerHierarchy/supplier/getByOrgId?id=${this.zzjg.selectedKeys[0]}`, // material
method: 'get',
}),
columns: [
{ dataIndex: 'serial' },
{ title: '物资名称', dataIndex: 'name', width: 'auto', minWidth: 150 }, //
{ title: '物资数量', dataIndex: 'account', type: 'account', width: 'auto', minWidth: 150 }, //
{ dataIndex: 'action' },
],
},
pageConfig: false,
showTool: false,
},
zzwzModal: {
visible: false,
title: '',
mode: '',
formItems: [
{
label: '物资名称', //
prop: 'supplierId', //
component: 'AntOriginTreeSelect',
options: {
dataSource: () =>
this.$http({
url: '/suppliesDict/tree',
method: 'get',
}),
readonly: false,
},
},
{ label: '物资数量', prop: 'total' }, //
],
formRules: {
supplierId: [{ required: true, message: '请选择物资!', trigger: 'change' }], //
total: [{ required: true, message: '请输入物资数量!', trigger: 'blur' }], //
},
formData: {},
},
}
},
computed: {
gridRows() {
return {
auto: [1, 1, 1],
zzry: [1, '56px', '56px'],
zzzb: ['56px', 1, '56px'],
zzwz: ['56px', '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' },
]
},
zzwzFormItems() {
return [
this.zzwzModal.mode === 'add'
? {
label: '物资名称',
prop: 'supplierId',
component: 'AntOriginTreeSelect',
options: {
dataSource: () =>
this.$http({
url: '/suppliesDict/tree',
method: 'get',
}),
valueKey: 'key',
readonly: false,
},
}
: { label: '物资名称', prop: 'name', customRender: (v) => v },
{ label: '物资数量', prop: 'account' },
]
},
},
created() {
this.getZzTree()
},
methods: {
async getZzTree() {
try {
const res = await this.$http({
url: `/tree/organization`,
method: 'get',
params: { unittype: 1 },
})
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')
this.$refs['zzwz-table'].commitAction('reload')
},
handleOpenAddZzjgModal(parentId) {
this.zzjgModal.title = '新建作战力量'
this.zzjgModal.mode = 'add'
this.zzjgModal.formData = { unittype: 1, 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')
},
handleOpenAddZzwzModal() {
this.zzwzModal.title = '新建组织物资' //
this.zzwzModal.mode = 'add'
this.zzwzModal.formData = { orgId: this.zzjg.selectedKeys[0] }
this.zzwzModal.visible = true
},
handleOpenEditZzwzModal(record) {
this.zzwzModal.title = `编辑组织物资` //
this.zzwzModal.mode = 'edit'
this.zzwzModal.formData = { ...record }
this.zzwzModal.visible = true
},
handleSubmitZzwz(formData) {
return this.$http({
url: `/baseData/fightPowerHierarchy/supplier/save`, // material
method: 'post',
data: formData,
})
},
handleSubmitZzwzSuccess() {
this.$refs['zzwz-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>

View File

@ -0,0 +1,267 @@
<template>
<page-header-wrapper>
<a-card :bordered="false">
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="48">
<a-col :xl="8" :lg="8">
<span class="table-page-search-submitButtons">
<a-button type="primary" @click="getList">查询</a-button>
<a-button style="margin-left: 8px" @click="resetList">重置</a-button>
</span>
</a-col>
<a-col :xl="8" :lg="8"> </a-col>
<a-col :xl="8" :lg="8">
<a-button type="primary" icon="plus" style="float: right" @click="handleAdd">新建</a-button>
</a-col>
</a-row>
</a-form>
</div>
<a-table
bordered
rowKey="key"
size="small"
:columns="columns"
:dataSource="loadData"
:pagination="false"
:loading="loadingTable"
>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)"> <a-icon type="form" /></a>
<a-divider type="vertical" />
<a-popconfirm title="确定要删除该组织吗?" ok-text="确定" cancel-text="取消" @confirm="handleDelete(record)">
<a href="javascript:;"><a-icon type="delete" /></a>
</a-popconfirm>
</span>
</a-table>
</a-card>
<h-modal
:title="AEModal.title"
:width="640"
:visible="AEModal.visible"
:destroyOnClose="true"
@cancel="() => this.handleClose()"
@ok="() => this.handleOk()"
switch-fullscreen
:fullscreen.sync="AEModal.fullscreen"
>
<a-spin :spinning="AEModal.spinning">
<a-form-model
ref="form"
:model="AEModal.form"
:rules="AEModal.rules"
:label-col="AEModal.labelCol"
:wrapper-col="AEModal.wrapperCol"
>
<a-form-model-item v-for="item in AEModal.formItems.concat(unittypeFormItem)" :key="item.prop" v-bind="item">
<span v-if="item.customRender">{{ item.customRender(AEModal.form[item.prop]) }}</span>
<component
v-else
:is="item.component || 'a-input'"
v-model="AEModal.form[item.prop]"
v-bind="item.options"
v-on="item.listeners"
/>
</a-form-model-item>
</a-form-model>
</a-spin>
</h-modal>
</page-header-wrapper>
</template>
<script>
export default {
name: 'Zzsjk',
data() {
return {
queryParam: {}, //
columns: [
{
title: '#',
dataIndex: 'key',
align: 'left',
width: 200,
},
{
title: '组织名称',
align: 'left',
dataIndex: 'title',
ellipsis: true,
},
{
title: '组织类型',
align: 'left',
dataIndex: 'unittype',
customRender: (v, record) => {
return { 1: '作战力量', 2: '保障力量' }[record.data.unittype]
},
},
{
title: '操作',
width: 140,
dataIndex: 'action',
align: 'center',
scopedSlots: { customRender: 'action' },
},
],
loadData: [], // Promise
loadingTable: false,
AEModal: {
title: '',
visible: false,
editStatus: false,
fullscreen: false,
spinning: false,
form: {},
formItems: [
{
label: '上级组织',
prop: 'parentId',
component: 'AntOriginTreeSelect',
options: {
dataSource: () =>
this.$http({
url: '/tree/organization',
method: 'get',
}).then((res) => ({ data: [{ key: 0, title: '根组织' }].concat(res.data) })),
valueKey: 'key',
},
listeners: {
change: (v, t, record) => {
if (v === 0) {
this.$set(this.AEModal.form, 'unittype', '')
} else {
this.$set(this.AEModal.form, 'unittype', record.data.unittype)
}
},
},
},
{
label: '标识编码',
prop: 'codeName',
},
{
label: '组织名称',
prop: 'name',
},
],
rules: {
codeName: [{ required: true, message: '请输入标识编码!', trigger: 'blur' }],
name: [{ required: true, message: '请输入组织名称!', trigger: 'blur' }],
unittype: [{ required: true, message: '请选择组织类型!', trigger: 'blur' }],
},
labelCol: { xs: { span: 24 }, sm: { span: 7 } },
wrapperCol: { xs: { span: 24 }, sm: { span: 13 } },
},
}
},
computed: {
unittypeFormItem() {
return this.AEModal.form.parentId === 0
? [
{
label: '组织类型',
prop: 'unittype',
component: 'a-radio-group',
options: {
options: [
{ label: '作战力量', value: 1 },
{ label: '保障力量', value: 2 },
],
},
},
]
: [
{
label: '组织类型',
prop: 'unittype',
customRender: (v) => ({ 1: '作战力量', 2: '保障力量' }[v]),
},
]
},
},
created() {
this.getList()
},
methods: {
resetList() {
this.queryParam = {}
this.getList()
},
async getList(parameter = {}) {
try {
this.loadingTable = true
const res = await this.$http({
url: '/tree/organization',
method: 'get',
params: { ...parameter, ...this.queryParam },
})
this.loadData = res.data
} catch (error) {
console.log(error)
} finally {
this.loadingTable = false
}
},
handleAdd() {
this.AEModal.form = { parentId: 0 }
this.AEModal.title = '添加组织'
this.AEModal.editStatus = false
this.AEModal.visible = true
},
async handleEdit(record) {
try {
const res = await this.$http({
url: `/baseData/fightPowerHierarchy/${record.key}`,
method: 'get',
})
this.AEModal.form = res.data
this.AEModal.title = '编辑组织'
this.AEModal.editStatus = true
this.AEModal.visible = true
} catch (error) {
console.log(error)
this.$message.error('未知错误,请重试')
}
},
handleClose() {
this.AEModal.visible = false
this.AEModal.form = {}
},
async handleOk() {
try {
await this.$refs.form.validate()
const params = { ...this.AEModal.form }
await this.$http({
url: `/baseData/fightPowerHierarchy/save`,
method: 'post',
data: params,
})
this.$message.success(`${this.AEModal.title}成功`)
this.getList()
this.handleClose()
} catch (error) {
console.log(error)
}
},
async handleDelete(record) {
try {
await this.$http({
url: `/baseData/fightPowerHierarchy/remove/${record.key}`,
method: 'get',
})
this.$message.success('删除组织成功')
this.getList()
} catch (error) {
console.log(error)
this.$message.error('删除组织失败')
}
},
},
}
</script>
<style lang="less" scoped></style>