chartFormItemsMap.ts 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221
  1. import { IFormItem } from "../../cusForm";
  2. import { colorPreset } from "./index";
  3. import { get } from "lodash-es";
  4. /**
  5. * 用于快速配置图表配置项
  6. *
  7. * prop: 图表option的路径
  8. * format:转换数据
  9. *
  10. * */
  11. export const chartFormItemsMap: Record<string, IFormItem> = {
  12. /* 标题 */
  13. title: {
  14. label: "标题",
  15. prop: "title",
  16. type: "group",
  17. children: [
  18. {
  19. label: " ",
  20. prop: "title.show",
  21. type: "checkboxGroup",
  22. fieldProps: {
  23. options: [{ label: "标题可见", value: true }],
  24. },
  25. defaultValue: [],
  26. format: (formatModel, value) => {
  27. formatModel.value["title.show"] = value?.length ? true : false;
  28. },
  29. valueToForm: (value) => {
  30. return value ? [true] : [];
  31. }
  32. },
  33. {
  34. type: "dependency",
  35. label: "",
  36. prop: "",
  37. name: ["title.show"],
  38. children: (model) => {
  39. return model["title.show"].length
  40. ? [
  41. {
  42. label: "文本",
  43. prop: "title.text",
  44. type: "input",
  45. defaultValue: "图表标题",
  46. },
  47. {
  48. label: "位置",
  49. prop: "title.left",
  50. type: "position",
  51. defaultValue: "center",
  52. },
  53. {
  54. label: "样式",
  55. prop: "title.textStyle",
  56. type: "fontStyle",
  57. defaultValue: {
  58. color: "#ffffffff",
  59. size: 18,
  60. bold: true,
  61. italic: false,
  62. },
  63. format: (formatModel, value) => {
  64. formatModel.value["title.textStyle"] = {
  65. color: value.color,
  66. fontSize: value.size,
  67. fontWeight: value.bold ? "bold" : "normal",
  68. fontStyle: value.italic ? "italic" : "normal",
  69. };
  70. },
  71. valueToForm: (_, model) => {
  72. return {
  73. color: get(model, 'title.textStyle.color', '#FFFFFF'),
  74. size: get(model, 'title.textStyle.size', 16),
  75. bold: get(model, 'title.textStyle.fontWeight') === 'bold',
  76. italic: get(model, 'title.textStyle.fontStyle') === 'italic',
  77. }
  78. }
  79. },
  80. {
  81. label: "背景",
  82. prop: "",
  83. type: "divider",
  84. },
  85. {
  86. label: "填充",
  87. prop: "title.backgroundColor",
  88. type: "backgroundSelect",
  89. fieldProps: {
  90. filterOptions: ["image"],
  91. },
  92. defaultValue: {
  93. type: "color",
  94. color: "#FFFFFF00",
  95. },
  96. format: (formatModel, value) => {
  97. formatModel.value["title.backgroundColor"] = value?.type === 'color' ? value.color : 'none';
  98. },
  99. valueToForm: (value) => {
  100. return !value || value === 'none'
  101. ? {
  102. type: 'none',
  103. color: '#000000ff'
  104. }
  105. : {
  106. type: "color",
  107. color: value.color,
  108. };
  109. },
  110. },
  111. {
  112. label: "圆角",
  113. prop: "title.borderRadius",
  114. type: "inputNumber",
  115. fieldProps: {
  116. addonAfter: "px",
  117. },
  118. defaultValue: 0,
  119. },
  120. ]
  121. : [];
  122. },
  123. },
  124. ],
  125. },
  126. /* 图例 */
  127. legend: {
  128. label: "图例",
  129. prop: "legend",
  130. type: "group",
  131. children: [
  132. {
  133. label: " ",
  134. prop: "legend.show",
  135. type: "checkboxGroup",
  136. fieldProps: {
  137. options: [{ label: "图例可见", value: true }],
  138. },
  139. defaultValue: [true],
  140. format: (formatModel, value) => {
  141. formatModel.value["legend.show"] = value?.length ? true : false;
  142. },
  143. valueToForm: (value) => {
  144. return value ? [true] : [];
  145. },
  146. },
  147. {
  148. type: "dependency",
  149. label: "",
  150. prop: "",
  151. name: ["legend.show"],
  152. children: (model) => {
  153. return model["legend.show"].length
  154. ? [
  155. {
  156. label: "位置",
  157. prop: "legend.position",
  158. type: "position",
  159. fieldProps: {
  160. type: "round",
  161. },
  162. defaultValue: "top",
  163. format: (formatModel, value) => {
  164. if(['left', 'right'].includes(value)) {
  165. formatModel.value["legend.orient"] = 'vertical';
  166. } else {
  167. formatModel.value["legend.orient"] = 'horizontal';
  168. }
  169. switch(value) {
  170. case 'bottom':
  171. formatModel.value["legend.top"] = 'auto';
  172. formatModel.value["legend.right"] = 'auto';
  173. formatModel.value["legend.bottom"] = 8;
  174. formatModel.value["legend.left"] = 'center';
  175. break;
  176. case 'left':
  177. formatModel.value["legend.bottom"] = 'auto';
  178. formatModel.value["legend.right"] = 'auto';
  179. formatModel.value["legend.left"] = 8;
  180. formatModel.value["legend.top"] = 'center';
  181. break;
  182. case 'right':
  183. formatModel.value["legend.bottom"] = 'auto';
  184. formatModel.value["legend.left"] = 'auto';
  185. formatModel.value["legend.right"] = 8;
  186. formatModel.value["legend.top"] = 'center';
  187. break;
  188. default:
  189. formatModel.value["legend.bottom"] = 'auto';
  190. formatModel.value["legend.right"] = 'auto';
  191. formatModel.value["legend.top"] = 32;
  192. formatModel.value["legend.left"] = 'center';
  193. }
  194. },
  195. valueToForm: (value, model) => {
  196. if(get(model, 'legend.orient') === 'vertical') {
  197. return value === 'top' ? 'top' : value === 'bottom' ? 'bottom' : 'left';
  198. }
  199. if(get(model, 'legend.bottom') === 8 && get(model, 'legend.left') === 'center') {
  200. return 'bottom';
  201. }
  202. return 'top';
  203. },
  204. },
  205. {
  206. label: "样式",
  207. prop: "legend.textStyle",
  208. type: "fontStyle",
  209. defaultValue: {
  210. color: "#000000ff",
  211. size: 12,
  212. bold: false,
  213. italic: false,
  214. },
  215. format: (formatModel, value) => {
  216. formatModel.value["legend.textStyle"] = {
  217. color: value.color,
  218. fontSize: value.size,
  219. fontWeight: value.bold ? "bold" : "normal",
  220. fontStyle: value.italic ? "italic" : "normal",
  221. };
  222. },
  223. valueToForm: (_, model) => {
  224. return {
  225. color: get(model, 'legend.textStyle.color', '#000000ff'),
  226. size: get(model, 'legend.textStyle.fontSize', 12),
  227. bold: get(model, 'legend.textStyle.fontWeight') === 'bold',
  228. italic: get(model, 'legend.textStyle.fontStyle') === 'italic',
  229. }
  230. }
  231. },
  232. {
  233. label: "边框",
  234. prop: "",
  235. type: "divider",
  236. },
  237. {
  238. label: "线宽",
  239. prop: "legend.borderWidth",
  240. type: "inputNumber",
  241. fieldProps: {
  242. addonAfter: "px",
  243. },
  244. defaultValue: 0,
  245. },
  246. {
  247. label: "颜色",
  248. prop: "legend.borderColor",
  249. type: "colorSelect",
  250. defaultValue: "#ccc",
  251. fieldProps: {
  252. gradient: false
  253. }
  254. },
  255. {
  256. label: "圆角",
  257. prop: "legend.borderRadius",
  258. type: "inputNumber",
  259. fieldProps: {
  260. addonAfter: "px",
  261. },
  262. defaultValue: 0,
  263. },
  264. {
  265. label: "背景",
  266. prop: "",
  267. type: "divider",
  268. },
  269. {
  270. label: "背景",
  271. prop: "legend.backgroundColor",
  272. type: "backgroundSelect",
  273. fieldProps: {
  274. filterOptions: ["image"],
  275. },
  276. defaultValue: {
  277. type: "color",
  278. color: "#fff",
  279. },
  280. format: (formatModel, value) => {
  281. formatModel.value["legend.backgroundColor"] = value?.type === 'color' ? value.color : 'none';
  282. },
  283. valueToForm: (value) => {
  284. return !value || value === 'none'
  285. ? {
  286. type: 'none'
  287. }
  288. : {
  289. type: "color",
  290. color: value.color,
  291. };
  292. },
  293. },
  294. {
  295. label: "阴影",
  296. prop: "legend.shadowBlur",
  297. type: "radioGroup",
  298. fieldProps: {
  299. options: [
  300. { label: "开启", value: true },
  301. { label: "关闭", value: false },
  302. ],
  303. },
  304. defaultValue: false,
  305. format: (formatModel, value) => {
  306. if(value) {
  307. formatModel.value["legend.shadowBlur"] = 10;
  308. formatModel.value["legend.shadowColor"] = formatModel.value['legend.backgroundColor'] || '#000000ff';
  309. formatModel.value["legend.shadowOffsetX"] = 3;
  310. formatModel.value["legend.shadowOffsetY"] = 3;
  311. } else {
  312. formatModel.value["legend.shadowBlur"] = 0;
  313. formatModel.value["legend.shadowColor"] = "transparent";
  314. formatModel.value["legend.shadowOffsetX"] = 0;
  315. formatModel.value["legend.shadowOffsetY"] = 0;
  316. }
  317. },
  318. valueToForm: (value) => {
  319. return value ? true : false;
  320. },
  321. },
  322. ]
  323. : [];
  324. },
  325. },
  326. ],
  327. },
  328. /* 系列 */
  329. series: {
  330. label: "系列",
  331. prop: "series",
  332. type: "group",
  333. children: [
  334. {
  335. label: "配色",
  336. prop: "color",
  337. type: "colorScheme",
  338. defaultValue: colorPreset[0].color,
  339. },
  340. ],
  341. },
  342. /* X轴 */
  343. xAxis: {
  344. label: "X 轴",
  345. prop: "xAxis",
  346. type: "group",
  347. children: [
  348. {
  349. label: "类型",
  350. prop: "xAxis.type",
  351. type: "select",
  352. fieldProps: {
  353. options: [
  354. { label: "类目坐标轴", value: "category" },
  355. { label: "数值坐标轴", value: "value" },
  356. { label: "时间坐标轴", value: "time" },
  357. ],
  358. },
  359. defaultValue: "category",
  360. },
  361. {
  362. label: " ",
  363. prop: "xAxis.showName",
  364. type: "checkboxGroup",
  365. fieldProps: {
  366. options: [{ label: "显示轴标题", value: true }],
  367. },
  368. defaultValue: [true],
  369. format: (formatModel, value) => {
  370. if(value?.length) {
  371. formatModel.value["xAxis.showName"] = true;
  372. formatModel.value["xAxis.name"] = 'X轴标题';
  373. formatModel.value["xAxis.nameGap"] = 25;
  374. } else {
  375. formatModel.value["xAxis.showName"] = false;
  376. formatModel.value["xAxis.name"] = "";
  377. formatModel.value["xAxis.nameGap"] = 15;
  378. formatModel.value["xAxis.nameGap"] = 15;
  379. }
  380. },
  381. valueToForm: (value) => {
  382. return value ? [true] : [];
  383. },
  384. },
  385. {
  386. label: "",
  387. prop: "",
  388. type: "dependency",
  389. name: ["xAxis.showName"],
  390. children: (model) => {
  391. return model["xAxis.showName"].length
  392. ? [
  393. {
  394. label: "标题内容",
  395. prop: "xAxis.name",
  396. type: "input",
  397. defaultValue: "X 轴标题",
  398. format: (formatModel, value) => {
  399. if (formatModel.value["xAxis.showName"]) {
  400. formatModel.value["xAxis.name"] = value;
  401. formatModel.value["xAxis.nameGap"] = 25;
  402. }
  403. },
  404. valueToForm: (value) => {
  405. return value || "X 轴标题";
  406. }
  407. },
  408. {
  409. label: "标题位置",
  410. prop: "xAxis.nameLocation",
  411. type: "position",
  412. defaultValue: "center",
  413. format: (formatModel, value: "left" | "center" | "right") => {
  414. const p = {
  415. left: "start",
  416. center: "middle",
  417. right: "end",
  418. };
  419. formatModel.value["xAxis.nameLocation"] = value
  420. ? p[value]
  421. : "middle";
  422. },
  423. valueToForm: (value: 'start' | 'middle' | 'end') => {
  424. const p = {
  425. start: "left",
  426. middle: "center",
  427. end: "right",
  428. };
  429. return p[value] || "center";
  430. },
  431. },
  432. {
  433. label: "标题样式",
  434. prop: "xAxis.nameTextStyle",
  435. type: "fontStyle",
  436. defaultValue: {
  437. color: "#000000ff",
  438. size: 12,
  439. bold: false,
  440. italic: false,
  441. },
  442. format: (formatModel, value) => {
  443. formatModel.value["xAxis.nameTextStyle"] = {
  444. color: value.color,
  445. fontSize: value.size,
  446. fontWeight: value.bold ? "bold" : "normal",
  447. fontStyle: value.italic ? "italic" : "normal",
  448. };
  449. },
  450. valueToForm: (value) => {
  451. return {
  452. color: value?.color || '#000000ff',
  453. size: value?.fontSize || 12,
  454. bold: value?.fontWeight === 'bold' || false,
  455. italic: value?.fontStyle === 'italic' || false,
  456. }
  457. }
  458. },
  459. ]
  460. : [];
  461. },
  462. },
  463. {
  464. label: "轴线",
  465. prop: "",
  466. type: "divider",
  467. },
  468. {
  469. label: "线宽",
  470. prop: "xAxis.axisLine.lineStyle.width",
  471. type: "inputNumber",
  472. fieldProps: {
  473. addonAfter: "px",
  474. },
  475. defaultValue: 1,
  476. },
  477. {
  478. label: "颜色",
  479. prop: "xAxis.axisLine.lineStyle.color",
  480. type: "colorSelect",
  481. defaultValue: "#ccc",
  482. fieldProps: {
  483. gradient: false
  484. }
  485. },
  486. {
  487. label: "刻度",
  488. prop: "",
  489. type: "divider",
  490. },
  491. {
  492. label: " ",
  493. prop: "xAxis.axisTick.show",
  494. type: "checkboxGroup",
  495. fieldProps: {
  496. options: [{ label: "显示刻度", value: true }],
  497. },
  498. defaultValue: [true],
  499. format: (formatModel, value) => {
  500. formatModel.value["xAxis.axisTick.show"] = value?.length
  501. ? true
  502. : false;
  503. },
  504. valueToForm: (value) => {
  505. return value ? [true] : [];
  506. },
  507. },
  508. {
  509. label: "",
  510. prop: "",
  511. type: "dependency",
  512. name: ["xAxis.axisTick.show"],
  513. children: (model) => {
  514. return model["xAxis.axisTick.show"].length
  515. ? [
  516. {
  517. label: "刻度宽度",
  518. prop: "xAxis.axisTick.lineStyle.width",
  519. type: "inputNumber",
  520. fieldProps: {
  521. addonAfter: "px",
  522. },
  523. defaultValue: 5,
  524. },
  525. {
  526. label: "刻度颜色",
  527. prop: "xAxis.axisTick.lineStyle.color",
  528. type: "colorSelect",
  529. defaultValue: "#ccc",
  530. fieldProps: {
  531. gradient: false
  532. }
  533. },
  534. ]
  535. : [];
  536. },
  537. },
  538. {
  539. label: "标签",
  540. prop: "",
  541. type: "divider",
  542. },
  543. {
  544. label: " ",
  545. prop: "xAxis.axisLabel.show",
  546. type: "checkboxGroup",
  547. fieldProps: {
  548. options: [{ label: "显示标签", value: true }],
  549. },
  550. defaultValue: [true],
  551. format: (formatModel, value) => {
  552. formatModel.value["xAxis.axisLabel.show"] = value?.length
  553. ? true
  554. : false;
  555. },
  556. valueToForm: (value) => {
  557. return value ? [true] : [];
  558. },
  559. },
  560. {
  561. label: "",
  562. prop: "",
  563. type: "dependency",
  564. name: ["xAxis.axisLabel.show"],
  565. children: (model) => {
  566. return model["xAxis.axisLabel.show"].length
  567. ? [
  568. {
  569. label: "样式",
  570. prop: "xAxis.axisLabel",
  571. type: "fontStyle",
  572. defaultValue: {
  573. color: "#000000ff",
  574. size: 12,
  575. bold: false,
  576. italic: false,
  577. },
  578. format: (formatModel, value) => {
  579. formatModel.value["xAxis.axisLabel.color"] = value?.color;
  580. formatModel.value["xAxis.axisLabel.fontSize"] = value.size;
  581. formatModel.value["xAxis.axisLabel.fontWeight"] = value.bold
  582. ? "bold"
  583. : "normal";
  584. formatModel.value["xAxis.axisLabel.fontStyle"] =
  585. value.italic ? "italic" : "normal";
  586. },
  587. valueToForm: (_, model) => {
  588. return {
  589. color: get(model, 'xAxis.axisLabel.color', '#000000ff'),
  590. size: get(model, 'xAxis.axisLabel.fontSize', 12),
  591. bold: get(model, 'xAxis.axisLabel.fontWeight') === 'bold',
  592. italic: get(model, 'xAxis.axisLabel.fontStyle') === 'italic',
  593. }
  594. }
  595. },
  596. ]
  597. : [];
  598. },
  599. },
  600. ],
  601. },
  602. /* Y 轴 */
  603. yAxis: {
  604. label: "Y 轴",
  605. prop: "yAxis",
  606. type: "group",
  607. children: [
  608. {
  609. label: " ",
  610. prop: "yAxis.showName",
  611. type: "checkboxGroup",
  612. fieldProps: {
  613. options: [{ label: "显示轴标题", value: true }],
  614. },
  615. defaultValue: [],
  616. format: (formatModel, value) => {
  617. if(value?.length) {
  618. formatModel.value["yAxis.showName"] = true;
  619. formatModel.value["yAxis.name"] = 'Y轴标题';
  620. formatModel.value["yAxis.nameGap"] = 25;
  621. } else {
  622. formatModel.value["yAxis.showName"] = false;
  623. formatModel.value["yAxis.name"] = "";
  624. formatModel.value["yAxis.nameGap"] = 15;
  625. }
  626. },
  627. valueToForm: (value) => {
  628. return value ? [true] : [];
  629. },
  630. },
  631. {
  632. label: "",
  633. prop: "",
  634. type: "dependency",
  635. name: ["yAxis.showName"],
  636. children: (model) => {
  637. return model["yAxis.showName"].length
  638. ? [
  639. {
  640. label: "标题内容",
  641. prop: "yAxis.name",
  642. type: "input",
  643. defaultValue: "Y 轴标题",
  644. format: (formatModel, value) => {
  645. if (formatModel.value["yAxis.showName"]) {
  646. formatModel.value["yAxis.name"] = value;
  647. formatModel.value["yAxis.nameGap"] = 25;
  648. } else {
  649. formatModel.value["yAxis.name"] = "";
  650. formatModel.value["yAxis.nameGap"] = 15;
  651. }
  652. },
  653. valueToForm: (value) => {
  654. return value || "Y 轴标题";
  655. }
  656. },
  657. {
  658. label: "标题位置",
  659. prop: "yAxis.nameLocation",
  660. type: "position",
  661. defaultValue: "center",
  662. format: (formatModel, value: "left" | "center" | "right") => {
  663. const p = {
  664. left: "start",
  665. center: "middle",
  666. right: "end",
  667. };
  668. formatModel.value["yAxis.nameLocation"] = value
  669. ? p[value]
  670. : "middle";
  671. },
  672. valueToForm: (value: "start" | "middle" | "end") => {
  673. const p = {
  674. start: "left",
  675. middle: "center",
  676. end: "right",
  677. };
  678. return p[value] || 'center ';
  679. },
  680. },
  681. {
  682. label: "标题样式",
  683. prop: "yAxis.nameTextStyle",
  684. type: "fontStyle",
  685. defaultValue: {
  686. color: "#FFFFFFFF",
  687. size: 12,
  688. bold: false,
  689. italic: false,
  690. },
  691. format: (formatModel, value) => {
  692. formatModel.value["yAxis.nameTextStyle"] = {
  693. color: value.color,
  694. fontSize: value.size,
  695. fontWeight: value.bold ? "bold" : "normal",
  696. fontStyle: value.italic ? "italic" : "normal",
  697. };
  698. },
  699. valueToForm: (value) => {
  700. return {
  701. color: value?.color || '#000000ff',
  702. size: value?.fontSize || 12,
  703. bold: value?.fontWeight === 'bold' || false,
  704. italic: value?.fontStyle === 'italic' || false,
  705. }
  706. }
  707. },
  708. ]
  709. : [];
  710. },
  711. },
  712. {
  713. label: "轴线",
  714. prop: "",
  715. type: "divider",
  716. },
  717. {
  718. label: " ",
  719. prop: "yAxis.axisLine.show",
  720. type: "checkboxGroup",
  721. fieldProps: {
  722. options: [{ label: "显示轴线", value: true }],
  723. },
  724. defaultValue: [true],
  725. format: (formatModel, value) => {
  726. formatModel.value["yAxis.axisLine.show"] = value?.length
  727. ? true
  728. : false;
  729. },
  730. valueToForm: (value) => {
  731. return value ? [true] : [];
  732. }
  733. },
  734. {
  735. label: "",
  736. prop: "",
  737. type: "dependency",
  738. name: ["yAxis.axisLine.show"],
  739. children: (model) => {
  740. return model["yAxis.axisLine.show"].length
  741. ? [
  742. {
  743. label: "线宽",
  744. prop: "yAxis.axisLine.lineStyle.width",
  745. type: "inputNumber",
  746. fieldProps: {
  747. addonAfter: "px",
  748. },
  749. defaultValue: 1,
  750. },
  751. {
  752. label: "颜色",
  753. prop: "yAxis.axisLine.lineStyle.color",
  754. type: "colorSelect",
  755. defaultValue: "#ccc",
  756. fieldProps: {
  757. gradient: false
  758. }
  759. },
  760. ]
  761. : [];
  762. }
  763. },
  764. {
  765. label: "刻度",
  766. prop: "",
  767. type: "divider",
  768. },
  769. {
  770. label: " ",
  771. prop: "yAxis.axisTick.show",
  772. type: "checkboxGroup",
  773. fieldProps: {
  774. options: [{ label: "显示刻度", value: true }],
  775. },
  776. defaultValue: [true],
  777. format: (formatModel, value) => {
  778. formatModel.value["yAxis.axisTick.show"] = value?.length
  779. ? true
  780. : false;
  781. },
  782. valueToForm: (value) => {
  783. return value ? [true] : [];
  784. }
  785. },
  786. {
  787. label: "",
  788. prop: "",
  789. type: "dependency",
  790. name: ["yAxis.axisTick.show"],
  791. children: (model) => {
  792. return model["yAxis.axisTick.show"].length
  793. ? [
  794. {
  795. label: "刻度长度",
  796. prop: "yAxis.axisTick.lineStyle.width",
  797. type: "inputNumber",
  798. fieldProps: {
  799. addonAfter: "px",
  800. },
  801. defaultValue: 5,
  802. },
  803. {
  804. label: "刻度颜色",
  805. prop: "yAxis.axisTick.lineStyle.color",
  806. type: "colorSelect",
  807. defaultValue: "#ccc",
  808. fieldProps: {
  809. gradient: false
  810. }
  811. },
  812. ]
  813. : [];
  814. },
  815. },
  816. {
  817. label: "标签",
  818. prop: "",
  819. type: "divider",
  820. },
  821. {
  822. label: " ",
  823. prop: "yAxis.axisLabel.show",
  824. type: "checkboxGroup",
  825. fieldProps: {
  826. options: [{ label: "显示标签", value: true }],
  827. },
  828. defaultValue: [true],
  829. format: (formatModel, value) => {
  830. formatModel.value["yAxis.axisLabel.show"] = value?.length
  831. ? true
  832. : false;
  833. },
  834. valueToForm: (value) => {
  835. return value ? [true] : [];
  836. }
  837. },
  838. {
  839. label: "",
  840. prop: "",
  841. type: "dependency",
  842. name: ["yAxis.axisLabel.show"],
  843. children: (model) => {
  844. return model["yAxis.axisLabel.show"].length
  845. ? [
  846. {
  847. label: "样式",
  848. prop: "yAxis.axisLabel",
  849. type: "fontStyle",
  850. defaultValue: {
  851. color: "#000000ff",
  852. size: 12,
  853. bold: false,
  854. italic: false,
  855. },
  856. format: (formatModel, value) => {
  857. formatModel.value["yAxis.axisLabel.color"] = value?.color;
  858. formatModel.value["yAxis.axisLabel.fontSize"] = value.size;
  859. formatModel.value["yAxis.axisLabel.fontWeight"] = value.bold
  860. ? "bold"
  861. : "normal";
  862. formatModel.value["yAxis.axisLabel.fontStyle"] =
  863. value.italic ? "italic" : "normal";
  864. },
  865. valueToForm: (_, model) => {
  866. return {
  867. color: get(model, 'yAxis.axisLabel.color', '#000000ff'),
  868. size: get(model, 'yAxis.axisLabel.fontSize', 12),
  869. bold: get(model, 'yAxis.axisLabel.fontWeight') === 'bold',
  870. italic: get(model, 'yAxis.axisLabel.fontStyle') === 'italic',
  871. }
  872. }
  873. },
  874. {
  875. label: '旋转角度',
  876. prop: "yAxis.axisLabel.rotate",
  877. type: "inputNumber",
  878. fieldProps: {
  879. addonAfter: "°",
  880. min: -90,
  881. max: 90,
  882. step: 1
  883. },
  884. }
  885. ]
  886. : [];
  887. },
  888. },
  889. ],
  890. },
  891. /* 提示 */
  892. tooltip: {
  893. label: "提示",
  894. prop: "tooltip",
  895. type: "group",
  896. children: [
  897. {
  898. label: " ",
  899. prop: "tooltip.show",
  900. type: "checkboxGroup",
  901. fieldProps: {
  902. options: [{ label: "提示可见", value: true }],
  903. },
  904. defaultValue: [true],
  905. format: (formatModel, value) => {
  906. formatModel.value["tooltip.show"] = value?.length ? true : false;
  907. },
  908. valueToForm: (value) => {
  909. return value ? [true] : [];
  910. }
  911. },
  912. {
  913. label: "",
  914. prop: "",
  915. type: "dependency",
  916. name: ["tooltip.show"],
  917. children: (model) => {
  918. return model["tooltip.show"].length
  919. ? [
  920. {
  921. label: "文本",
  922. prop: "tooltip.formatter",
  923. type: "checkboxGroup",
  924. fieldProps: {
  925. options: [
  926. { label: "分类名", value: "b" },
  927. { label: "系列名", value: "a" },
  928. { label: "数值", value: "c" },
  929. ],
  930. },
  931. defaultValue: ["b"],
  932. format: (formatModel, list) => {
  933. formatModel.value["tooltip.formatter"] = list.map((item: any) => `{${item}}`).join(" ");
  934. },
  935. valueToForm: (_, model) => {
  936. return get(model, 'tooltip.formatter')?.replace(/\{|\}/g, "")?.split(" ");
  937. }
  938. },
  939. // {
  940. // label: "格式化",
  941. // prop: "tooltip.valueFormatter",
  942. // type: "input",
  943. // tip: "支持字符串模板和回调函数",
  944. // defaultValue: "(value, dataIndex) => value",
  945. // },
  946. {
  947. label: "样式",
  948. prop: "tooltip.textStyle",
  949. type: "fontStyle",
  950. defaultValue: {
  951. color: "#000000ff",
  952. size: 12,
  953. bold: false,
  954. italic: false,
  955. },
  956. format: (formatModel, value) => {
  957. formatModel.value["tooltip.textStyle"] = {
  958. color: value.color,
  959. fontSize: value.size,
  960. fontWeight: value.bold ? "bold" : "normal",
  961. fontStyle: value.italic ? "italic" : "normal",
  962. };
  963. },
  964. valueToForm: (_, model) => {
  965. return {
  966. color: get(model, 'tooltip.textStyle.color', '#000000ff'),
  967. size: get(model, 'tooltip.textStyle.fontSize', 12),
  968. bold: get(model, 'tooltip.textStyle.fontWeight') === 'bold',
  969. italic: get(model, 'tooltip.textStyle.fontStyle') === 'italic',
  970. }
  971. }
  972. },
  973. {
  974. label: "边框",
  975. prop: "",
  976. type: "divider",
  977. },
  978. {
  979. label: "线宽",
  980. prop: "tooltip.borderWidth",
  981. type: "inputNumber",
  982. fieldProps: {
  983. addonAfter: "px",
  984. },
  985. defaultValue: 1,
  986. },
  987. {
  988. label: "颜色",
  989. prop: "tooltip.borderColor",
  990. type: "colorSelect",
  991. defaultValue: "#ccc",
  992. fieldProps: {
  993. gradient: false
  994. }
  995. },
  996. {
  997. label: "圆角",
  998. prop: "tooltip.borderRadius",
  999. type: "inputNumber",
  1000. fieldProps: {
  1001. addonAfter: "px",
  1002. },
  1003. defaultValue: 4,
  1004. },
  1005. {
  1006. label: "背景",
  1007. prop: "",
  1008. type: "divider",
  1009. },
  1010. {
  1011. label: "填充",
  1012. prop: "tooltip.backgroundColor",
  1013. type: "backgroundSelect",
  1014. fieldProps: {
  1015. filterOptions: ["image"],
  1016. },
  1017. defaultValue: {
  1018. type: "color",
  1019. color: "#fff",
  1020. },
  1021. format: (formatModel, value) => {
  1022. formatModel.value["tooltip.backgroundColor"] = value?.type === 'color' ? value.color : 'none';
  1023. },
  1024. valueToForm: (value) => {
  1025. return !value || value === 'none'
  1026. ? {
  1027. type: 'none'
  1028. }
  1029. : {
  1030. type: "color",
  1031. color: value,
  1032. };
  1033. },
  1034. },
  1035. {
  1036. label: "阴影",
  1037. prop: "tooltip.extraCssText",
  1038. type: "radioGroup",
  1039. fieldProps: {
  1040. options: [
  1041. { label: "开启", value: true },
  1042. { label: "关闭", value: false },
  1043. ],
  1044. },
  1045. defaultValue: false,
  1046. format: (formatModel, value) => {
  1047. formatModel.value["tooltip.extraCssText"] = value
  1048. ? "box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);"
  1049. : "";
  1050. },
  1051. valueToForm: (_, model) => {
  1052. return get(model, 'tooltip.extraCssText') ? true : false;
  1053. }
  1054. },
  1055. ]
  1056. : [];
  1057. },
  1058. },
  1059. ],
  1060. },
  1061. /* 标签 */
  1062. label: {
  1063. label: "标签",
  1064. prop: "label",
  1065. type: "group",
  1066. children: [
  1067. {
  1068. label: " ",
  1069. prop: "label.show",
  1070. type: "checkboxGroup",
  1071. fieldProps: {
  1072. options: [{ label: "标签可见", value: true }],
  1073. },
  1074. defaultValue: [],
  1075. format: (formatModel, value) => {
  1076. formatModel.value["label.show"] = value?.length ? true : false;
  1077. },
  1078. valueToForm: (value) => {
  1079. return value ? [true] : [];
  1080. }
  1081. },
  1082. {
  1083. label: "",
  1084. prop: "",
  1085. type: "dependency",
  1086. name: ["label.show"],
  1087. children: (model) => {
  1088. return model["label.show"].length
  1089. ? [
  1090. {
  1091. label: "文本",
  1092. prop: "label.formatter",
  1093. type: "checkboxGroup",
  1094. fieldProps: {
  1095. options: [
  1096. { label: "分类名", value: "b" },
  1097. { label: "系列名", value: "a" },
  1098. { label: "数值", value: "c" },
  1099. // { label: "百分比", value: "percent" },
  1100. ],
  1101. },
  1102. defaultValue: ["a"],
  1103. format: (formatModel, value) => {
  1104. formatModel.value["label.formatter"] = `{${value}}`;
  1105. },
  1106. valueToForm: (_, model) => {
  1107. return get(model, 'label.formatter')?.replace(/\{|\}/g, "")?.split(" ");
  1108. }
  1109. },
  1110. {
  1111. label: "样式",
  1112. prop: "label.fontStyle",
  1113. type: "fontStyle",
  1114. defaultValue: {
  1115. color: "#000000ff",
  1116. size: 12,
  1117. bold: false,
  1118. italic: false,
  1119. },
  1120. format: (formatModel, value) => {
  1121. formatModel.value["label.color"] = value?.color;
  1122. formatModel.value["label.fontSize"] = value.size;
  1123. formatModel.value["label.fontWeight"] = value.bold
  1124. ? "bold"
  1125. : "normal";
  1126. formatModel.value["label.fontStyle"] = value.italic
  1127. ? "italic"
  1128. : "normal";
  1129. },
  1130. valueToForm: (_, model) => {
  1131. return {
  1132. color: get(model, 'label.color', '#000000ff'),
  1133. size: get(model, 'label.fontSize', 12),
  1134. bold: get(model, 'label.fontWeight') === 'bold',
  1135. italic: get(model, 'label.fontStyle') === 'italic',
  1136. }
  1137. }
  1138. },
  1139. {
  1140. label: "布局",
  1141. prop: "",
  1142. type: "divider",
  1143. },
  1144. {
  1145. label: "位置",
  1146. prop: "label.position",
  1147. type: "radioGroup",
  1148. fieldProps: {
  1149. options: [
  1150. { label: "顶部", value: "top" },
  1151. { label: "左侧", value: "left" },
  1152. { label: "右侧", value: "right" },
  1153. { label: "底部", value: "bottom" },
  1154. { label: "内部", value: "inside" },
  1155. { label: "内部左侧", value: "insideLeft" },
  1156. { label: "内部右侧", value: "insideRight" },
  1157. { label: "内部顶部", value: "insideTop" },
  1158. { label: "内部底部", value: "insideBottom" },
  1159. ],
  1160. },
  1161. defaultValue: "top",
  1162. },
  1163. {
  1164. label: "文本方向",
  1165. prop: "label.rotate",
  1166. type: "radioGroup",
  1167. fieldProps: {
  1168. options: [
  1169. { label: "水平", value: "horizontal" },
  1170. { label: "垂直", value: "vertical" },
  1171. ],
  1172. },
  1173. defaultValue: "horizontal",
  1174. format: (formatModel, value) => {
  1175. formatModel.value["label.rotate"] =
  1176. value === "horizontal" ? 0 : 90;
  1177. },
  1178. valueToForm: (value) => {
  1179. return value === 0 ? "horizontal" : "vertical";
  1180. },
  1181. },
  1182. {
  1183. label: "边框",
  1184. prop: "",
  1185. type: "divider",
  1186. },
  1187. {
  1188. label: "线宽",
  1189. prop: "label.borderWidth",
  1190. type: "inputNumber",
  1191. fieldProps: {
  1192. addonAfter: "px",
  1193. },
  1194. defaultValue: 0,
  1195. },
  1196. {
  1197. label: "颜色",
  1198. prop: "label.borderColor",
  1199. type: "colorSelect",
  1200. defaultValue: "#ccc",
  1201. fieldProps: {
  1202. gradient: false
  1203. }
  1204. },
  1205. {
  1206. label: "圆角",
  1207. prop: "label.borderRadius",
  1208. type: "inputNumber",
  1209. fieldProps: {
  1210. addonAfter: "px",
  1211. },
  1212. defaultValue: 0,
  1213. },
  1214. ]
  1215. : [];
  1216. },
  1217. },
  1218. ],
  1219. },
  1220. };