PageStyle.tsx 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import React, { useEffect, useState } from "react";
  2. import CustomColorPicker from "@/components/CustomColorPicker";
  3. import { Checkbox, InputNumber, Select, Input, Divider } from "antd";
  4. import { useModel } from "umi";
  5. import { ColumnHeightOutlined, ColumnWidthOutlined } from "@ant-design/icons";
  6. export default function PageStyle() {
  7. const { mindProjectInfo, setMindProjectInfo } = useModel("mindMapModel");
  8. const pageSetting = mindProjectInfo?.pageSetting;
  9. const [watermark, setWatermark] = useState(pageSetting?.watermark);
  10. const handleSetPageSetting = (key: string, value: any) => {
  11. if (pageSetting) {
  12. setMindProjectInfo({
  13. ...mindProjectInfo,
  14. pageSetting: {
  15. ...pageSetting,
  16. [key]: value,
  17. },
  18. });
  19. }
  20. };
  21. return (
  22. <div>
  23. <section className="px-16px">
  24. <div className="flex-1 font-bold">背景样式</div>
  25. <div className="flex items-center justify-between px-0px py-8px gap-16px">
  26. <Select
  27. className="flex-1"
  28. options={[
  29. { label: "纯色", value: "color" },
  30. { label: "图片", value: "image" },
  31. ]}
  32. value={pageSetting?.fillType}
  33. onChange={(value) => handleSetPageSetting("fillType", value)}
  34. />
  35. <CustomColorPicker
  36. disabled={pageSetting?.fillType !== "color"}
  37. color={pageSetting?.fill}
  38. onChange={(color) => handleSetPageSetting("fill", color)}
  39. />
  40. </div>
  41. {pageSetting?.fillType === "image" && (
  42. <div className="flex justify-between items-center gap-16px">
  43. <span>图片地址</span>
  44. <Input
  45. className="flex-1"
  46. placeholder="请输入图片地址"
  47. value={pageSetting?.fillImageUrl}
  48. onChange={(e) =>
  49. handleSetPageSetting("fillImageUrl", e.target.value)
  50. }
  51. />
  52. </div>
  53. )}
  54. <Divider className="my-8px" />
  55. <div className="flex-1 font-bold">主题间距</div>
  56. <div className="text-12px color-#6c7d8f my-4px">分支主题</div>
  57. <div className="flex justify-between gap-8px">
  58. <InputNumber
  59. className="flex-1"
  60. suffix={<ColumnHeightOutlined />}
  61. step={1}
  62. min={10}
  63. max={200}
  64. formatter={(val) => `${val}px`}
  65. value={pageSetting?.branchY}
  66. onChange={(val) => handleSetPageSetting("branchY", val)}
  67. />
  68. <InputNumber
  69. className="flex-1"
  70. suffix={<ColumnWidthOutlined />}
  71. step={1}
  72. min={20}
  73. max={200}
  74. formatter={(val) => `${val}px`}
  75. value={pageSetting?.branchX}
  76. onChange={(val) => handleSetPageSetting("branchX", val)}
  77. />
  78. </div>
  79. {/* <div className="text-12px color-#6c7d8f my-4px">子主题</div>
  80. <div className="flex justify-between gap-8px">
  81. <InputNumber
  82. className="flex-1"
  83. suffix={<ColumnHeightOutlined />}
  84. step={1}
  85. min={5}
  86. max={100}
  87. formatter={(val) => `${val}px`}
  88. value={pageSetting?.subTopicY}
  89. onChange={(val) => handleSetPageSetting("subTopicY", val)}
  90. />
  91. <InputNumber
  92. className="flex-1"
  93. suffix={<ColumnWidthOutlined />}
  94. step={1}
  95. min={20}
  96. max={100}
  97. formatter={(val) => `${val}px`}
  98. value={pageSetting?.subTopicX}
  99. onChange={(val) => handleSetPageSetting("subTopicX", val)}
  100. />
  101. </div> */}
  102. </section>
  103. <section className="px-16px my-8px">
  104. <div>
  105. <Checkbox
  106. checked={pageSetting?.alignSameTopic}
  107. onChange={(e) =>
  108. handleSetPageSetting("alignSameTopic", e.target.checked)
  109. }
  110. >
  111. <span className="font-bold">同级主题对齐</span>
  112. </Checkbox>
  113. </div>
  114. </section>
  115. <Divider className="my-8px" />
  116. <section className="px-16px">
  117. <Checkbox
  118. className="mb-8px"
  119. checked={pageSetting?.showWatermark}
  120. onChange={(e) =>
  121. handleSetPageSetting("showWatermark", e.target.checked)
  122. }
  123. >
  124. <span className="font-bold">显示水印</span>
  125. </Checkbox>
  126. <Input
  127. placeholder="不超过15字,回车保存"
  128. maxLength={15}
  129. value={watermark}
  130. onChange={(e) => setWatermark(e.target.value)}
  131. onPressEnter={() => handleSetPageSetting("watermark", watermark)}
  132. onBlur={() => handleSetPageSetting("watermark", watermark)}
  133. />
  134. </section>
  135. </div>
  136. );
  137. }