|
@@ -16,20 +16,22 @@
|
|
|
:data-source="treeData"
|
|
|
:columns="columns"
|
|
|
size="small"
|
|
|
+ :bordered="true"
|
|
|
row-key="id"
|
|
|
:pagination="false"
|
|
|
- :defaultExpandAllRows="true"
|
|
|
+ :default-expand-all-rows="true"
|
|
|
:custom-row="customRow"
|
|
|
:row-class-name="rowClassName"
|
|
|
+ :scroll="{ y: scrollY }"
|
|
|
>
|
|
|
<template #name="{ text, record }">
|
|
|
<div class="editable-cell">
|
|
|
<div v-if="editableData[record.id]" class="editable-cell-input-wrapper">
|
|
|
- <a-input
|
|
|
+ <AInput
|
|
|
v-model:value="editableData[record.id].name"
|
|
|
@pressEnter="onSave(record.id)"
|
|
|
/>
|
|
|
- <check-outlined class="editable-cell-icon-check" @click="onSave(record.id)" />
|
|
|
+ <CheckOutlined class="editable-cell-icon-check" @click="onSave(record.id)" />
|
|
|
|
|
|
<CloseOutlined
|
|
|
class="editable-cell-icon-check"
|
|
@@ -39,14 +41,14 @@
|
|
|
</div>
|
|
|
<div v-else class="editable-cell-text-wrapper">
|
|
|
{{ text || ' ' }}
|
|
|
- <edit-outlined class="editable-cell-icon" @click="onEdit(record.id, record)" />
|
|
|
+ <EditOutlined class="editable-cell-icon" @click="onEdit(record.id, record)" />
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
<template #operation="{ record }">
|
|
|
- <a-popconfirm v-if="treeData.length" title="确认删除?" @confirm="onDelete(record.id)">
|
|
|
+ <APopconfirm v-if="treeData.length" title="确认删除?" @confirm="onDelete(record.id)">
|
|
|
<a>删除</a>
|
|
|
- </a-popconfirm>
|
|
|
+ </APopconfirm>
|
|
|
</template>
|
|
|
</ATable>
|
|
|
</section>
|
|
@@ -59,34 +61,45 @@
|
|
|
:cancel-button-props="{ size: 'small' }"
|
|
|
>
|
|
|
<div class="p-3">
|
|
|
- <a-form :model="formState" :rules="rules" layout="vertical" ref="formRef">
|
|
|
- <a-form-item name="name" required label="名称">
|
|
|
- <a-input v-model:value="formState.name" autocomplete="off" class="w-6" />
|
|
|
- </a-form-item>
|
|
|
- <a-form-item
|
|
|
+ <AForm :model="formState" :rules="rules" layout="vertical" ref="formRef">
|
|
|
+ <AFormItem name="name" required label="名称">
|
|
|
+ <AInput v-model:value="formState.name" autocomplete="off" class="w-6" />
|
|
|
+ </AFormItem>
|
|
|
+ <AFormItem
|
|
|
name="id"
|
|
|
required
|
|
|
:label="treeSelectLabel"
|
|
|
:hidden="type === 'edit' ? true : false"
|
|
|
>
|
|
|
- <a-tree-select
|
|
|
+ <ATreeSelect
|
|
|
v-model:value="formState.id"
|
|
|
- :treeData="treeSelectData"
|
|
|
+ :tree-data="treeSelectData"
|
|
|
:replace-fields="replaceFields"
|
|
|
:tree-default-expand-all="true"
|
|
|
:dropdown-style="{ height: '20rem' }"
|
|
|
/>
|
|
|
- </a-form-item>
|
|
|
- <a-form-item name="code2" label="图标编码">
|
|
|
- <a-input v-model:value="formState.code2" autocomplete="off" />
|
|
|
- </a-form-item>
|
|
|
- </a-form>
|
|
|
+ </AFormItem>
|
|
|
+ <AFormItem name="code2" label="图标编码">
|
|
|
+ <AInput v-model:value="formState.code2" autocomplete="off" />
|
|
|
+ </AFormItem>
|
|
|
+ </AForm>
|
|
|
</div>
|
|
|
</AModal>
|
|
|
</div>
|
|
|
</template>
|
|
|
<script lang="ts">
|
|
|
- import { computed, defineComponent, reactive, ref, toRaw, toRefs, unref, UnwrapRef } from 'vue'
|
|
|
+ import {
|
|
|
+ computed,
|
|
|
+ defineComponent,
|
|
|
+ onMounted,
|
|
|
+ onUnmounted,
|
|
|
+ reactive,
|
|
|
+ ref,
|
|
|
+ toRaw,
|
|
|
+ toRefs,
|
|
|
+ unref,
|
|
|
+ UnwrapRef
|
|
|
+ } from 'vue'
|
|
|
import { useDesign } from '/@/hooks/web/useDesign'
|
|
|
import { Table, Modal, Form, Input, TreeSelect, Popconfirm, message } from 'ant-design-vue'
|
|
|
import { CheckOutlined, EditOutlined, CloseOutlined } from '@ant-design/icons-vue'
|
|
@@ -100,6 +113,7 @@
|
|
|
import { TreeResultModel } from '/@/api/model/tree'
|
|
|
import { TreeRow } from '/#/tree'
|
|
|
import { useMessage } from '/@/hooks/web/useMessage'
|
|
|
+ import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn'
|
|
|
|
|
|
interface FormState {
|
|
|
id: string
|
|
@@ -129,7 +143,16 @@
|
|
|
const { prefixCls } = useDesign('management')
|
|
|
const treeData = ref<TreeResultModel[]>([])
|
|
|
const editableData: UnwrapRef<Record<string, TreeRow>> = reactive({})
|
|
|
-
|
|
|
+ const scrollY = ref<number | null>(null)
|
|
|
+ function autoTableScroll() {
|
|
|
+ const bodyFontSize =
|
|
|
+ parseInt(window.getComputedStyle(document.body).fontSize.replace('px', '')) * 1.25 * 2
|
|
|
+ scrollY.value =
|
|
|
+ document.body.clientHeight - 48 - 29 - 48 - 39 - bodyFontSize - bodyFontSize * 0.75 * 2
|
|
|
+ }
|
|
|
+ useWindowSizeFn(autoTableScroll, 150, { immediate: true })
|
|
|
+ // onMounted(() => start())
|
|
|
+ // onUnmounted(() => stop())
|
|
|
const row = ref<TreeRow>({
|
|
|
name: '',
|
|
|
code: '',
|
|
@@ -160,6 +183,8 @@
|
|
|
const unRow = unref(row)
|
|
|
if (type === ModalType.ADD) {
|
|
|
formState.id = unRow.depth === 3 ? unRow.parentId : unRow.id
|
|
|
+ formState.name = ''
|
|
|
+ formState.code2 = ''
|
|
|
} else {
|
|
|
formState.id = unRow.id
|
|
|
formState.name = unRow.name
|
|
@@ -228,17 +253,20 @@
|
|
|
title: '名称',
|
|
|
dataIndex: 'name',
|
|
|
key: 'name',
|
|
|
+ width: '60%',
|
|
|
slots: { customRender: 'name' }
|
|
|
},
|
|
|
{
|
|
|
title: '图表编码',
|
|
|
dataIndex: 'code2',
|
|
|
key: 'code2',
|
|
|
+ width: '30%',
|
|
|
slots: { customRender: 'code2' }
|
|
|
},
|
|
|
{
|
|
|
title: '操作',
|
|
|
dataIndex: 'operation',
|
|
|
+ width: '10%',
|
|
|
slots: { customRender: 'operation' }
|
|
|
}
|
|
|
]
|
|
@@ -321,7 +349,8 @@
|
|
|
handleTreeOpreate,
|
|
|
treeSelectData,
|
|
|
treeSelectLabel,
|
|
|
- onCancel
|
|
|
+ onCancel,
|
|
|
+ scrollY
|
|
|
}
|
|
|
}
|
|
|
})
|