You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
2.2 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. import { memo } from 'react'
  2. import { MenuItem } from '@/global'
  3. import { Popconfirm, Space, TreeDataNode } from 'antd'
  4. import { FormInstance } from 'antd/lib'
  5. import { useTranslation } from '@/i18n.ts'
  6. import { useStyle } from '../style.ts'
  7. import { useAtomValue, useSetAtom } from 'jotai'
  8. import { defaultMenu, deleteMenuAtom, selectedMenuAtom } from '@/store/menu.ts'
  9. import { PlusOutlined } from '@ant-design/icons'
  10. import ActionIcon, { DeleteAction } from '@/components/icon/action'
  11. export const TreeNodeRender = memo(({ node, form }: { node: MenuItem & TreeDataNode, form: FormInstance }) => {
  12. const { title } = node
  13. const { t } = useTranslation()
  14. const { styles } = useStyle()
  15. const { mutate } = useAtomValue(deleteMenuAtom)
  16. const setMenuData = useSetAtom(selectedMenuAtom)
  17. return (
  18. <div className={styles.treeNode}>
  19. <span>{title as any}</span>
  20. <span className={'actions'}>
  21. <Space size={'middle'}>
  22. <ActionIcon
  23. size={12}
  24. icon={<PlusOutlined/>}
  25. title={t('actions.add', '添加')}
  26. onClick={(e) => {
  27. // console.log('add')
  28. e.stopPropagation()
  29. e.preventDefault()
  30. const menu = {
  31. ...defaultMenu,
  32. parent_id: node.id,
  33. }
  34. setMenuData(menu)
  35. form.setFieldsValue(menu)
  36. }}/>
  37. <Popconfirm
  38. title={t('message.deleteConfirm', '确定要删除吗?')}
  39. onConfirm={() => {
  40. mutate([ (node as any).id ])
  41. }}
  42. >
  43. <DeleteAction
  44. size={12}
  45. onClick={(e) => {
  46. e.stopPropagation()
  47. e.stopPropagation()
  48. }}/>
  49. </Popconfirm>
  50. </Space>
  51. </span>
  52. </div>
  53. )
  54. })