|
@@ -30,6 +30,12 @@
|
|
|
@pressEnter="onSave(record.id)"
|
|
|
/>
|
|
|
<check-outlined class="editable-cell-icon-check" @click="onSave(record.id)" />
|
|
|
+
|
|
|
+ <CloseOutlined
|
|
|
+ class="editable-cell-icon-check"
|
|
|
+ :style="{ right: '-24px' }"
|
|
|
+ @click="onCancel(record.id)"
|
|
|
+ />
|
|
|
</div>
|
|
|
<div v-else class="editable-cell-text-wrapper">
|
|
|
{{ text || ' ' }}
|
|
@@ -54,35 +60,51 @@
|
|
|
>
|
|
|
<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" />
|
|
|
+ <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 name="id" required label="父级">
|
|
|
+ <a-form-item
|
|
|
+ name="id"
|
|
|
+ required
|
|
|
+ :label="treeSelectLabel"
|
|
|
+ :hidden="type === 'edit' ? true : false"
|
|
|
+ >
|
|
|
<a-tree-select
|
|
|
v-model:value="formState.id"
|
|
|
- :treeData="treeData"
|
|
|
+ :treeData="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>
|
|
|
</div>
|
|
|
</AModal>
|
|
|
</div>
|
|
|
</template>
|
|
|
<script lang="ts">
|
|
|
- import { computed, defineComponent, reactive, ref, toRaw, toRefs, UnwrapRef } from 'vue'
|
|
|
+ import { computed, defineComponent, 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 } from '@ant-design/icons-vue'
|
|
|
- import { sectionAddApi, sectionAllApi, sectionUpdateApi, treeResfulApi } from '/@/api/sys/tree'
|
|
|
+ import { CheckOutlined, EditOutlined, CloseOutlined } from '@ant-design/icons-vue'
|
|
|
+ import {
|
|
|
+ delSectionApi,
|
|
|
+ sectionAddApi,
|
|
|
+ sectionAllApi,
|
|
|
+ sectionUpdateApi,
|
|
|
+ treeResfulApi
|
|
|
+ } from '/@/api/sys/tree'
|
|
|
import { TreeResultModel } from '/@/api/model/tree'
|
|
|
import { TreeRow } from '/#/tree'
|
|
|
+ import { useMessage } from '/@/hooks/web/useMessage'
|
|
|
|
|
|
interface FormState {
|
|
|
id: string
|
|
|
name: string
|
|
|
+ code2: string
|
|
|
}
|
|
|
enum ModalType {
|
|
|
ADD = 'add',
|
|
@@ -99,6 +121,7 @@
|
|
|
AFormItem: Form.Item,
|
|
|
CheckOutlined,
|
|
|
EditOutlined,
|
|
|
+ CloseOutlined,
|
|
|
APopconfirm: Popconfirm
|
|
|
},
|
|
|
setup() {
|
|
@@ -116,7 +139,8 @@
|
|
|
serial: 0,
|
|
|
attribution: '',
|
|
|
contractId: '',
|
|
|
- createTime: ''
|
|
|
+ createTime: '',
|
|
|
+ code2: ''
|
|
|
})
|
|
|
const modal = reactive({
|
|
|
visible: false,
|
|
@@ -124,13 +148,27 @@
|
|
|
})
|
|
|
const formState: UnwrapRef<FormState> = reactive({
|
|
|
id: '',
|
|
|
- name: ''
|
|
|
+ name: '',
|
|
|
+ code2: ''
|
|
|
})
|
|
|
|
|
|
// 目录操作相关
|
|
|
const toggleModal = (type?: string) => {
|
|
|
// 要打开form弹窗了, 设置当前的表单值
|
|
|
if (!modal.visible) {
|
|
|
+ if (row.value.id && type) {
|
|
|
+ const unRow = unref(row)
|
|
|
+ if (type === ModalType.ADD) {
|
|
|
+ formState.id = unRow.depth === 3 ? unRow.parentId : unRow.id
|
|
|
+ } else {
|
|
|
+ formState.id = unRow.id
|
|
|
+ formState.name = unRow.name
|
|
|
+ formState.code2 = unRow.code2
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ const { createMessage } = useMessage()
|
|
|
+ return createMessage.warning('请先选择节点再进行操作')
|
|
|
+ }
|
|
|
}
|
|
|
modal.visible = !modal.visible
|
|
|
type && (modal.type = type)
|
|
@@ -148,10 +186,10 @@
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- const onConfirm = () => {
|
|
|
+ const onConfirm = async () => {
|
|
|
try {
|
|
|
- onSubmit()
|
|
|
- initData()
|
|
|
+ await onSubmit()
|
|
|
+ await initData()
|
|
|
toggleModal()
|
|
|
} catch (error) {}
|
|
|
}
|
|
@@ -194,9 +232,9 @@
|
|
|
},
|
|
|
{
|
|
|
title: '图表编码',
|
|
|
- dataIndex: 'code',
|
|
|
- key: 'code',
|
|
|
- slots: { customRender: 'code' }
|
|
|
+ dataIndex: 'code2',
|
|
|
+ key: 'code2',
|
|
|
+ slots: { customRender: 'code2' }
|
|
|
},
|
|
|
{
|
|
|
title: '操作',
|
|
@@ -220,24 +258,47 @@
|
|
|
editableData[key] = record
|
|
|
}
|
|
|
|
|
|
- const onSave = (key: string) => {
|
|
|
- delete editableData[key]
|
|
|
+ const onSave = async (key: string) => {
|
|
|
+ const { id, name, code2 } = toRaw(editableData[key])
|
|
|
+ await sectionUpdateApi({ id, name, code2 })
|
|
|
// 执行保存请求 后初始化数据
|
|
|
- // initData()
|
|
|
+ delete editableData[key]
|
|
|
+ initData()
|
|
|
}
|
|
|
|
|
|
- const onDelete = (key: string) => {
|
|
|
- // 执行删除请求 后初始化数据
|
|
|
- // initData()
|
|
|
+ const onCancel = async (key: string) => {
|
|
|
+ delete editableData[key]
|
|
|
+ }
|
|
|
+ const onDelete = async (key: string) => {
|
|
|
+ try {
|
|
|
+ await delSectionApi({ id: key })
|
|
|
+ await initData()
|
|
|
+ } catch (error) {}
|
|
|
}
|
|
|
|
|
|
const rules = {
|
|
|
name: [{ required: true, message: '请输入名称' }],
|
|
|
- id: [{ required: true, message: '请选择父节点' }]
|
|
|
+ id: [
|
|
|
+ { required: true, message: modal.type === ModalType.ADD ? '请选择父节点' : '请选择节点' }
|
|
|
+ ]
|
|
|
}
|
|
|
|
|
|
const replaceFields = { children: 'children', title: 'name', value: 'id' }
|
|
|
|
|
|
+ const treeSelectData = computed(() => {
|
|
|
+ if (modal.type === ModalType.ADD) {
|
|
|
+ return treeData.value.map(item => {
|
|
|
+ const newItem = { ...item }
|
|
|
+ if (item.children && item.children.length) {
|
|
|
+ newItem.children = item.children.map(item => ({ ...item, children: [] }))
|
|
|
+ }
|
|
|
+ return newItem
|
|
|
+ })
|
|
|
+ }
|
|
|
+ return treeData.value
|
|
|
+ })
|
|
|
+
|
|
|
+ const treeSelectLabel = computed(() => (modal.type === ModalType.ADD ? '父级目录' : '节点'))
|
|
|
return {
|
|
|
...toRefs(modal),
|
|
|
prefixCls,
|
|
@@ -257,7 +318,10 @@
|
|
|
onEdit,
|
|
|
onSave,
|
|
|
onDelete,
|
|
|
- handleTreeOpreate
|
|
|
+ handleTreeOpreate,
|
|
|
+ treeSelectData,
|
|
|
+ treeSelectLabel,
|
|
|
+ onCancel
|
|
|
}
|
|
|
}
|
|
|
})
|
|
@@ -277,6 +341,7 @@
|
|
|
}
|
|
|
.editable-cell {
|
|
|
position: relative;
|
|
|
+ width: 50%;
|
|
|
.editable-cell-input-wrapper,
|
|
|
.editable-cell-text-wrapper {
|
|
|
padding-right: 24px;
|