componentPropsConfig.ts 25 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148
  1. import { IBaseFormAttrs } from './formItemPropsConfig';
  2. interface IBaseComponentProps {
  3. [key: string]: IBaseFormAttrs[];
  4. }
  5. type BaseFormAttrs = Omit<IBaseFormAttrs, 'tag'>;
  6. export const baseComponentControlAttrs: Omit<IBaseFormAttrs, 'tag'>[] = [
  7. {
  8. // 没有disabled属性的控件不能作为form控件
  9. name: 'disabled',
  10. label: '禁用',
  11. },
  12. {
  13. // 没有disabled属性的控件不能作为form控件
  14. name: 'autofocus',
  15. label: '自动获取焦点',
  16. includes: [
  17. 'Input',
  18. 'Select',
  19. 'InputTextArea',
  20. 'InputNumber',
  21. 'DatePicker',
  22. 'RangePicker',
  23. 'MonthPicker',
  24. 'TimePicker',
  25. 'Cascader',
  26. 'TreeSelect',
  27. 'Switch',
  28. 'AutoComplete',
  29. 'Slider',
  30. ],
  31. },
  32. {
  33. name: 'allowClear',
  34. label: '可清除',
  35. includes: [
  36. 'Input',
  37. 'Select',
  38. 'InputTextArea',
  39. 'InputNumber',
  40. 'DatePicker',
  41. 'RangePicker',
  42. 'MonthPicker',
  43. 'TimePicker',
  44. 'Cascader',
  45. 'TreeSelect',
  46. 'AutoComplete',
  47. ],
  48. },
  49. { name: 'fullscreen', label: '全屏', includes: ['Calendar'] },
  50. {
  51. name: 'showSearch',
  52. label: '可搜索',
  53. includes: ['Select', 'TreeSelect', 'Cascader', 'Transfer'],
  54. },
  55. {
  56. name: 'showTime',
  57. label: '显示时间',
  58. includes: ['DatePicker', 'RangePicker', 'MonthPicker'],
  59. },
  60. {
  61. name: 'range',
  62. label: '双向滑动',
  63. includes: [],
  64. },
  65. {
  66. name: 'allowHalf',
  67. label: '允许半选',
  68. includes: ['Rate'],
  69. },
  70. {
  71. name: 'multiple',
  72. label: '多选',
  73. includes: ['Select', 'TreeSelect', 'Upload'],
  74. },
  75. {
  76. name: 'directory',
  77. label: '文件夹',
  78. includes: ['Upload'],
  79. },
  80. {
  81. name: 'withCredentials',
  82. label: '携带cookie',
  83. includes: ['Upload'],
  84. },
  85. {
  86. name: 'bordered',
  87. label: '是否有边框',
  88. includes: ['Select', 'Input'],
  89. },
  90. {
  91. name: 'defaultActiveFirstOption',
  92. label: '高亮第一个选项',
  93. component: 'Checkbox',
  94. includes: ['Select', 'AutoComplete'],
  95. },
  96. {
  97. name: 'dropdownMatchSelectWidth',
  98. label: '下拉菜单和选择器同宽',
  99. component: 'Checkbox',
  100. includes: ['Select', 'TreeSelect', 'AutoComplete'],
  101. },
  102. ];
  103. //共用属性
  104. export const baseComponentCommonAttrs: Omit<IBaseFormAttrs, 'tag'>[] = [
  105. {
  106. name: 'size',
  107. label: '尺寸',
  108. component: 'RadioGroup',
  109. componentProps: {
  110. options: [
  111. {
  112. label: '默认',
  113. value: 'default',
  114. },
  115. {
  116. label: '大',
  117. value: 'large',
  118. },
  119. {
  120. label: '小',
  121. value: 'small',
  122. },
  123. ],
  124. },
  125. includes: ['InputNumber', 'Input', 'Cascader', 'Button'],
  126. },
  127. {
  128. name: 'placeholder',
  129. label: '占位符',
  130. component: 'Input',
  131. componentProps: {
  132. placeholder: '请输入占位符',
  133. },
  134. includes: [
  135. 'AutoComplete',
  136. 'InputTextArea',
  137. 'InputNumber',
  138. 'Input',
  139. 'InputTextArea',
  140. 'Select',
  141. 'DatePicker',
  142. 'MonthPicker',
  143. 'TimePicker',
  144. 'TreeSelect',
  145. 'Cascader',
  146. ],
  147. },
  148. {
  149. name: 'style',
  150. label: '样式',
  151. component: 'Input',
  152. componentProps: {
  153. placeholder: '请输入样式',
  154. },
  155. },
  156. {
  157. name: 'open',
  158. label: '一直展开下拉菜单',
  159. component: 'RadioGroup',
  160. componentProps: {
  161. options: [
  162. {
  163. label: '默认',
  164. value: undefined,
  165. },
  166. {
  167. label: '是',
  168. value: true,
  169. },
  170. {
  171. label: '否',
  172. value: false,
  173. },
  174. ],
  175. },
  176. includes: ['Select', 'AutoComplete'],
  177. },
  178. ];
  179. const componentAttrs: IBaseComponentProps = {
  180. AutoComplete: [
  181. {
  182. name: 'backfill',
  183. label: '自动回填',
  184. component: 'Switch',
  185. componentProps: {
  186. span: 8,
  187. },
  188. },
  189. {
  190. name: 'defaultOpen',
  191. label: '是否默认展开下拉菜单',
  192. component: 'Checkbox',
  193. },
  194. ],
  195. IconPicker: [
  196. {
  197. name: 'mode',
  198. label: '模式',
  199. component: 'RadioGroup',
  200. componentProps: {
  201. options: [
  202. { label: 'ICONIFY', value: null },
  203. { label: 'SVG', value: 'svg' },
  204. // { label: '组合', value: 'combobox' },
  205. ],
  206. },
  207. },
  208. ],
  209. // https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input#%3Cinput%3E_types
  210. Input: [
  211. {
  212. name: 'type',
  213. label: '类型',
  214. component: 'Select',
  215. componentProps: {
  216. options: [
  217. { value: 'text', label: '文本' },
  218. { value: 'search', label: '搜索' },
  219. { value: 'number', label: '数字' },
  220. { value: 'range', label: '数字范围' },
  221. { value: 'password', label: '密码' },
  222. { value: 'date', label: '日期' },
  223. { value: 'datetime-local', label: '日期-无时区' },
  224. { value: 'time', label: '时间' },
  225. { value: 'month', label: '年月' },
  226. { value: 'week', label: '星期' },
  227. { value: 'email', label: '邮箱' },
  228. { value: 'url', label: 'URL' },
  229. { value: 'tel', label: '电话号码' },
  230. { value: 'file', label: '文件' },
  231. { value: 'button', label: '按钮' },
  232. { value: 'submit', label: '提交按钮' },
  233. { value: 'reset', label: '重置按钮' },
  234. { value: 'radio', label: '单选按钮' },
  235. { value: 'checkbox', label: '复选框' },
  236. { value: 'color', label: '颜色' },
  237. { value: 'image', label: '图像' },
  238. { value: 'hidden', label: '隐藏' },
  239. ],
  240. },
  241. },
  242. {
  243. name: 'defaultValue',
  244. label: '默认值',
  245. component: 'Input',
  246. componentProps: {
  247. type: 'text',
  248. placeholder: '请输入默认值',
  249. },
  250. },
  251. {
  252. name: 'prefix',
  253. label: '前缀',
  254. component: 'Input',
  255. componentProps: {
  256. type: 'text',
  257. placeholder: '请输入前缀',
  258. },
  259. },
  260. {
  261. name: 'suffix',
  262. label: '后缀',
  263. component: 'Input',
  264. componentProps: {
  265. type: 'text',
  266. placeholder: '请输入后缀',
  267. },
  268. },
  269. {
  270. name: 'addonBefore',
  271. label: '前置标签',
  272. component: 'Input',
  273. componentProps: {
  274. type: 'text',
  275. placeholder: '请输入前置标签',
  276. },
  277. },
  278. {
  279. name: 'addonAfter',
  280. label: '后置标签',
  281. component: 'Input',
  282. componentProps: {
  283. type: 'text',
  284. placeholder: '请输入后置标签',
  285. },
  286. },
  287. {
  288. name: 'maxLength',
  289. label: '最大长度',
  290. component: 'InputNumber',
  291. componentProps: {
  292. type: 'text',
  293. placeholder: '请输入最大长度',
  294. },
  295. },
  296. ],
  297. InputNumber: [
  298. {
  299. name: 'defaultValue',
  300. label: '默认值',
  301. component: 'InputNumber',
  302. componentProps: {
  303. placeholder: '请输入默认值',
  304. },
  305. },
  306. {
  307. name: 'min',
  308. label: '最小值',
  309. component: 'InputNumber',
  310. componentProps: {
  311. type: 'text',
  312. placeholder: '请输入最小值',
  313. },
  314. },
  315. {
  316. name: 'max',
  317. label: '最大值',
  318. component: 'InputNumber',
  319. componentProps: {
  320. type: 'text',
  321. placeholder: '请输入最大值',
  322. },
  323. },
  324. {
  325. name: 'precision',
  326. label: '数值精度',
  327. component: 'InputNumber',
  328. componentProps: {
  329. type: 'text',
  330. placeholder: '请输入最大值',
  331. },
  332. },
  333. {
  334. name: 'step',
  335. label: '步长',
  336. component: 'InputNumber',
  337. componentProps: {
  338. type: 'text',
  339. placeholder: '请输入步长',
  340. },
  341. },
  342. {
  343. name: 'decimalSeparator',
  344. label: '小数点',
  345. component: 'Input',
  346. componentProps: { type: 'text', placeholder: '请输入小数点' },
  347. },
  348. {
  349. name: 'addonBefore',
  350. label: '前置标签',
  351. component: 'Input',
  352. componentProps: {
  353. type: 'text',
  354. placeholder: '请输入前置标签',
  355. },
  356. },
  357. {
  358. name: 'addonAfter',
  359. label: '后置标签',
  360. component: 'Input',
  361. componentProps: {
  362. type: 'text',
  363. placeholder: '请输入后置标签',
  364. },
  365. },
  366. {
  367. name: 'controls',
  368. label: '是否显示增减按钮',
  369. component: 'Checkbox',
  370. },
  371. {
  372. name: 'keyboard',
  373. label: '是否启用键盘快捷行为',
  374. component: 'Checkbox',
  375. },
  376. {
  377. name: 'stringMode',
  378. label: '字符值模式',
  379. component: 'Checkbox',
  380. },
  381. {
  382. name: 'bordered',
  383. label: '是否有边框',
  384. component: 'Checkbox',
  385. },
  386. ],
  387. InputTextArea: [
  388. {
  389. name: 'defaultValue',
  390. label: '默认值',
  391. component: 'Input',
  392. componentProps: {
  393. type: 'text',
  394. placeholder: '请输入默认值',
  395. },
  396. },
  397. {
  398. name: 'maxlength',
  399. label: '最大长度',
  400. component: 'InputNumber',
  401. componentProps: {
  402. placeholder: '请输入最大长度',
  403. },
  404. },
  405. {
  406. name: 'minlength',
  407. label: '最小长度',
  408. component: 'InputNumber',
  409. componentProps: {
  410. placeholder: '请输入最小长度',
  411. },
  412. },
  413. {
  414. name: 'cols',
  415. label: '可见列数',
  416. component: 'InputNumber',
  417. componentProps: {
  418. placeholder: '请输入可见列数',
  419. min: 0,
  420. },
  421. },
  422. {
  423. name: 'rows',
  424. label: '可见行数',
  425. component: 'InputNumber',
  426. componentProps: {
  427. placeholder: '请输入可见行数',
  428. min: 0,
  429. },
  430. },
  431. {
  432. name: 'minlength',
  433. label: '最小长度',
  434. component: 'InputNumber',
  435. componentProps: {
  436. placeholder: '请输入最小长度',
  437. },
  438. },
  439. {
  440. name: 'autosize',
  441. label: '自适应内容高度',
  442. component: 'Checkbox',
  443. },
  444. {
  445. name: 'showCount',
  446. label: '是否展示字数',
  447. component: 'Checkbox',
  448. },
  449. {
  450. name: 'readonly',
  451. label: '是否只读',
  452. component: 'Checkbox',
  453. },
  454. {
  455. name: 'spellcheck',
  456. label: '读写检查',
  457. component: 'Checkbox',
  458. },
  459. {
  460. name: 'autocomplete',
  461. label: '是否自动完成',
  462. component: 'RadioGroup',
  463. componentProps: {
  464. options: [
  465. { label: '正常', value: null },
  466. { label: '开', value: 'on' },
  467. { label: '关', value: 'off' },
  468. ],
  469. },
  470. },
  471. {
  472. name: 'autocorrect',
  473. label: '是否自动纠错',
  474. component: 'RadioGroup',
  475. componentProps: {
  476. options: [
  477. { label: '正常', value: null },
  478. { label: '开', value: 'on' },
  479. { label: '关', value: 'off' },
  480. ],
  481. },
  482. },
  483. ],
  484. Select: [
  485. {
  486. name: 'mode',
  487. label: '选择模式(默认单选)',
  488. component: 'RadioGroup',
  489. componentProps: {
  490. options: [
  491. { label: '单选', value: null },
  492. { label: '多选', value: 'multiple' },
  493. { label: '标签', value: 'tags' },
  494. // { label: '组合', value: 'combobox' },
  495. ],
  496. },
  497. },
  498. {
  499. name: 'autoClearSearchValue',
  500. label: '是否在选中项后清空搜索框',
  501. component: 'Checkbox',
  502. },
  503. {
  504. name: 'labelInValue',
  505. label: '选项的label包装到value中',
  506. component: 'Checkbox',
  507. },
  508. {
  509. name: 'showArrow',
  510. label: '显示下拉小箭头',
  511. component: 'Checkbox',
  512. },
  513. {
  514. name: 'defaultOpen',
  515. label: '默认展开下拉菜单',
  516. component: 'Checkbox',
  517. },
  518. ],
  519. Checkbox: [
  520. {
  521. name: 'indeterminate',
  522. label: '设置indeterminate状态',
  523. component: 'Checkbox',
  524. },
  525. ],
  526. CheckboxGroup: [],
  527. RadioGroup: [
  528. {
  529. name: 'defaultValue',
  530. label: '默认值',
  531. component: 'Input',
  532. componentProps: {
  533. placeholder: '请输入默认值',
  534. },
  535. },
  536. {
  537. name: 'buttonStyle',
  538. label: 'RadioButton的风格样式',
  539. component: 'RadioGroup',
  540. componentProps: {
  541. options: [
  542. {
  543. label: 'outline',
  544. value: 'outline',
  545. },
  546. {
  547. label: 'solid',
  548. value: 'solid',
  549. },
  550. ],
  551. },
  552. },
  553. {
  554. name: 'optionType',
  555. label: 'options类型',
  556. component: 'RadioGroup',
  557. componentProps: {
  558. options: [
  559. {
  560. label: '默认',
  561. value: 'default',
  562. },
  563. {
  564. label: '按钮',
  565. value: 'button',
  566. },
  567. ],
  568. //根据其它选项的值更新自身控件配置值
  569. //compProp当前组件的属性,
  570. //configProps,当且组件的所有配置选项
  571. //self,当前配置的componentProps属性
  572. //返回真值进行更新
  573. // _propsFunc: (compProp, configProps, self) => {
  574. // console.log("i'm called");
  575. // console.log(compProp, configProps, self);
  576. // if (compProp['buttonStyle'] && compProp['buttonStyle'] == 'outline') {
  577. // if (!self['disabled']) {
  578. // self['disabled'] = true;
  579. // return 1;
  580. // }
  581. // } else {
  582. // if (self['disabled']) {
  583. // self['disabled'] = false;
  584. // return 1;
  585. // }
  586. // }
  587. // // return prop.optionType == 'button';
  588. // },
  589. },
  590. },
  591. {
  592. name: 'size',
  593. label: '尺寸',
  594. component: 'RadioGroup',
  595. componentProps: {
  596. options: [
  597. {
  598. label: '默认',
  599. value: 'default',
  600. },
  601. {
  602. label: '大',
  603. value: 'large',
  604. },
  605. {
  606. label: '小',
  607. value: 'small',
  608. },
  609. ],
  610. },
  611. },
  612. ],
  613. DatePicker: [
  614. {
  615. name: 'format',
  616. label: '展示格式(format)',
  617. component: 'Input',
  618. componentProps: {
  619. placeholder: 'YYYY-MM-DD',
  620. },
  621. },
  622. {
  623. name: 'valueFormat',
  624. label: '绑定值格式(valueFormat)',
  625. component: 'Input',
  626. componentProps: {
  627. placeholder: 'YYYY-MM-DD',
  628. },
  629. },
  630. ],
  631. RangePicker: [
  632. {
  633. name: 'placeholder',
  634. label: '占位符',
  635. children: [
  636. {
  637. name: '',
  638. label: '',
  639. component: 'Input',
  640. },
  641. {
  642. name: '',
  643. label: '',
  644. component: 'Input',
  645. },
  646. ],
  647. },
  648. {
  649. name: 'format',
  650. label: '展示格式(format)',
  651. component: 'Input',
  652. componentProps: {
  653. placeholder: 'YYYY-MM-DD HH:mm:ss',
  654. },
  655. },
  656. {
  657. name: 'valueFormat',
  658. label: '绑定值格式(valueFormat)',
  659. component: 'Input',
  660. componentProps: {
  661. placeholder: 'YYYY-MM-DD',
  662. },
  663. },
  664. ],
  665. MonthPicker: [
  666. {
  667. name: 'format',
  668. label: '展示格式(format)',
  669. component: 'Input',
  670. componentProps: {
  671. placeholder: 'YYYY-MM',
  672. },
  673. },
  674. {
  675. name: 'valueFormat',
  676. label: '绑定值格式(valueFormat)',
  677. component: 'Input',
  678. componentProps: {
  679. placeholder: 'YYYY-MM',
  680. },
  681. },
  682. ],
  683. TimePicker: [
  684. {
  685. name: 'format',
  686. label: '展示格式(format)',
  687. component: 'Input',
  688. componentProps: {
  689. placeholder: 'YYYY-MM',
  690. },
  691. },
  692. {
  693. name: 'valueFormat',
  694. label: '绑定值格式(valueFormat)',
  695. component: 'Input',
  696. componentProps: {
  697. placeholder: 'YYYY-MM',
  698. },
  699. },
  700. ],
  701. Slider: [
  702. {
  703. name: 'defaultValue',
  704. label: '默认值',
  705. component: 'InputNumber',
  706. componentProps: {
  707. placeholder: '请输入默认值',
  708. },
  709. },
  710. {
  711. name: 'min',
  712. label: '最小值',
  713. component: 'InputNumber',
  714. componentProps: {
  715. placeholder: '请输入最小值',
  716. },
  717. },
  718. {
  719. name: 'max',
  720. label: '最大值',
  721. component: 'InputNumber',
  722. componentProps: {
  723. placeholder: '请输入最大值',
  724. },
  725. },
  726. {
  727. name: 'step',
  728. label: '步长',
  729. component: 'InputNumber',
  730. componentProps: {
  731. placeholder: '请输入步长',
  732. },
  733. },
  734. {
  735. name: 'tooltipPlacement',
  736. label: 'Tooltip 展示位置',
  737. component: 'Select',
  738. componentProps: {
  739. options: [
  740. { value: 'top', label: '上' },
  741. { value: 'left', label: '左' },
  742. { value: 'right', label: '右' },
  743. { value: 'bottom', label: '下' },
  744. { value: 'topLeft', label: '上右' },
  745. { value: 'topRight', label: '上左' },
  746. { value: 'bottomLeft', label: '右下' },
  747. { value: 'bottomRight', label: '左下' },
  748. { value: 'leftTop', label: '左下' },
  749. { value: 'leftBottom', label: '左上' },
  750. { value: 'rightTop', label: '右下' },
  751. { value: 'rightBottom', label: '右上' },
  752. ],
  753. },
  754. },
  755. {
  756. name: 'tooltipVisible',
  757. label: '始终显示Tooltip',
  758. component: 'Checkbox',
  759. },
  760. {
  761. name: 'dots',
  762. label: '只能拖拽到刻度上',
  763. component: 'Checkbox',
  764. },
  765. {
  766. name: 'range',
  767. label: '双滑块模式',
  768. component: 'Checkbox',
  769. },
  770. {
  771. name: 'reverse',
  772. label: '反向坐标轴',
  773. component: 'Checkbox',
  774. },
  775. {
  776. name: 'vertical',
  777. label: '垂直方向',
  778. component: 'Checkbox',
  779. },
  780. {
  781. name: 'included',
  782. label: '值为包含关系',
  783. component: 'Checkbox',
  784. },
  785. ],
  786. Rate: [
  787. {
  788. name: 'defaultValue',
  789. label: '默认值',
  790. component: 'InputNumber',
  791. componentProps: {
  792. placeholder: '请输入默认值',
  793. },
  794. },
  795. {
  796. name: 'character',
  797. label: '自定义字符',
  798. component: 'Input',
  799. componentProps: {
  800. placeholder: '请输入自定义字符',
  801. },
  802. },
  803. {
  804. name: 'count',
  805. label: 'start 总数',
  806. component: 'InputNumber',
  807. componentProps: {
  808. placeholder: '请输入自定义字符',
  809. },
  810. },
  811. ],
  812. Switch: [
  813. {
  814. name: 'checkedChildren',
  815. label: '选中时的内容',
  816. component: 'Input',
  817. componentProps: {
  818. placeholder: '请输入选中时的内容',
  819. },
  820. },
  821. {
  822. name: 'checkedValue',
  823. label: '选中时的值',
  824. component: 'Input',
  825. componentProps: {
  826. placeholder: '请输入选中时的值',
  827. },
  828. },
  829. {
  830. name: 'unCheckedChildren',
  831. label: '非选中时的内容',
  832. component: 'Input',
  833. componentProps: {
  834. placeholder: '请输入非选中时的内容',
  835. },
  836. },
  837. {
  838. name: 'unCheckedValue',
  839. label: '非选中时的值',
  840. component: 'Input',
  841. componentProps: {
  842. placeholder: '请输入非选中时的值',
  843. },
  844. },
  845. {
  846. name: 'loading',
  847. label: '加载中的开关',
  848. component: 'Checkbox',
  849. },
  850. {
  851. name: 'size',
  852. label: '尺寸',
  853. component: 'RadioGroup',
  854. componentProps: {
  855. options: [
  856. {
  857. label: '默认',
  858. value: 'default',
  859. },
  860. {
  861. label: '小',
  862. value: 'small',
  863. },
  864. ],
  865. },
  866. },
  867. ],
  868. TreeSelect: [
  869. {
  870. name: 'defaultValue',
  871. label: '默认值',
  872. component: 'Input',
  873. componentProps: {
  874. placeholder: '请输入默认值',
  875. },
  876. },
  877. {
  878. name: 'searchPlaceholder',
  879. label: '搜索框默认文字',
  880. component: 'Input',
  881. componentProps: {
  882. placeholder: '请输入搜索框默认文字',
  883. },
  884. },
  885. {
  886. name: 'treeNodeFilterProp',
  887. label: '输入项过滤对应的 treeNode 属性',
  888. component: 'Input',
  889. componentProps: {
  890. defaultValue: 'value',
  891. },
  892. },
  893. {
  894. name: 'treeNodeLabelProp',
  895. label: '作为显示的 prop 设置',
  896. component: 'Input',
  897. componentProps: {
  898. defaultValue: 'title',
  899. },
  900. },
  901. {
  902. name: 'dropdownClassName',
  903. label: '下拉菜单的 className 属性',
  904. component: 'Input',
  905. componentProps: {
  906. placeholder: '请输入下拉菜单的 className 属性',
  907. },
  908. },
  909. {
  910. name: 'labelInValue',
  911. label: '选项的label包装到value中',
  912. component: 'Checkbox',
  913. },
  914. {
  915. name: 'treeIcon',
  916. label: '展示TreeNode title前的图标',
  917. component: 'Checkbox',
  918. },
  919. {
  920. name: 'treeCheckable',
  921. label: '选项可勾选',
  922. component: 'Checkbox',
  923. },
  924. {
  925. name: 'treeCheckStrictly',
  926. label: '节点选择完全受控',
  927. component: 'Checkbox',
  928. },
  929. {
  930. name: 'treeDefaultExpandAll',
  931. label: '默认展开所有',
  932. component: 'Checkbox',
  933. },
  934. {
  935. name: 'treeLine',
  936. label: '是否展示线条样式',
  937. component: 'Checkbox',
  938. },
  939. {
  940. name: 'maxTagCount',
  941. label: '最多显示多少个 tag',
  942. component: 'InputNumber',
  943. componentProps: {
  944. placeholder: '最多显示多少个 tag',
  945. },
  946. },
  947. {
  948. name: 'size',
  949. label: '尺寸',
  950. component: 'RadioGroup',
  951. componentProps: {
  952. options: [
  953. {
  954. label: '默认',
  955. value: 'default',
  956. },
  957. {
  958. label: '小',
  959. value: 'small',
  960. },
  961. ],
  962. },
  963. },
  964. ],
  965. Cascader: [
  966. {
  967. name: 'expandTrigger',
  968. label: '次级展开方式(默认click)',
  969. component: 'RadioGroup',
  970. componentProps: {
  971. options: [
  972. {
  973. label: 'click',
  974. value: 'click',
  975. },
  976. {
  977. label: 'hover',
  978. value: 'hover',
  979. },
  980. ],
  981. },
  982. },
  983. ],
  984. Button: [
  985. {
  986. name: 'type',
  987. label: '类型',
  988. component: 'RadioGroup',
  989. componentProps: {
  990. options: [
  991. {
  992. label: 'default',
  993. value: 'default',
  994. },
  995. {
  996. label: 'primary',
  997. value: 'primary',
  998. },
  999. {
  1000. label: 'danger',
  1001. value: 'danger',
  1002. },
  1003. {
  1004. label: 'dashed',
  1005. value: 'dashed',
  1006. },
  1007. ],
  1008. },
  1009. },
  1010. {
  1011. name: 'handle',
  1012. label: '操作',
  1013. component: 'RadioGroup',
  1014. componentProps: {
  1015. options: [
  1016. {
  1017. label: '提交',
  1018. value: 'submit',
  1019. },
  1020. {
  1021. label: '重置',
  1022. value: 'reset',
  1023. },
  1024. ],
  1025. },
  1026. },
  1027. ],
  1028. Upload: [
  1029. {
  1030. name: 'action',
  1031. label: '上传地址',
  1032. component: 'Input',
  1033. },
  1034. {
  1035. name: 'name',
  1036. label: '附件参数名(name)',
  1037. component: 'Input',
  1038. },
  1039. ],
  1040. // ColorPicker: [
  1041. // {
  1042. // name: 'defaultValue',
  1043. // label: '默认值',
  1044. // component: 'AColorPicker',
  1045. // },
  1046. // ],
  1047. slot: [
  1048. {
  1049. name: 'slotName',
  1050. label: '插槽名称',
  1051. component: 'Input',
  1052. },
  1053. ],
  1054. Transfer: [
  1055. // {
  1056. // name: 'operations',
  1057. // label: '操作文案集合,顺序从上至下',
  1058. // component: 'Input',
  1059. // componentProps: {
  1060. // type: 'text',
  1061. // // defaultValue: ['>', '<'],
  1062. // },
  1063. // },
  1064. // {
  1065. // name: 'titles',
  1066. // label: '标题集合,顺序从左至右',
  1067. // component: 'Input',
  1068. // componentProps: {
  1069. // type: 'text',
  1070. // // defaultValue: ['', ''],
  1071. // },
  1072. // },
  1073. {
  1074. name: 'oneWay',
  1075. label: '展示为单向样式',
  1076. component: 'Checkbox',
  1077. },
  1078. {
  1079. name: 'pagination',
  1080. label: '使用分页样式',
  1081. component: 'Checkbox',
  1082. },
  1083. {
  1084. name: 'showSelectAll',
  1085. label: '展示全选勾选框',
  1086. component: 'Checkbox',
  1087. },
  1088. ],
  1089. };
  1090. function deleteProps(list: Omit<IBaseFormAttrs, 'tag'>[], key: string) {
  1091. list.forEach((element, index) => {
  1092. if (element.name == key) {
  1093. list.splice(index, 1);
  1094. }
  1095. });
  1096. }
  1097. componentAttrs['StrengthMeter'] = componentAttrs['Input'];
  1098. componentAttrs['StrengthMeter'].push({
  1099. name: 'visibilityToggle',
  1100. label: '是否显示切换按钮',
  1101. component: 'Checkbox',
  1102. });
  1103. deleteProps(componentAttrs['StrengthMeter'], 'type');
  1104. deleteProps(componentAttrs['StrengthMeter'], 'prefix');
  1105. deleteProps(componentAttrs['StrengthMeter'], 'defaultValue');
  1106. deleteProps(componentAttrs['StrengthMeter'], 'suffix');
  1107. //组件属性
  1108. // name 控件的属性
  1109. export const baseComponentAttrs: IBaseComponentProps = componentAttrs;
  1110. //在所有的选项中查找需要配置项
  1111. const findCompoentProps = (props, name) => {
  1112. const idx = props.findIndex((value: BaseFormAttrs, _index) => {
  1113. return value.name == name;
  1114. });
  1115. if (idx) {
  1116. if (props[idx].componentProps) {
  1117. return props[idx].componentProps;
  1118. }
  1119. }
  1120. };
  1121. // 根据其它选项的值更新自身控件配置值
  1122. export const componentPropsFuncs = {
  1123. RadioGroup: (compProp, options: BaseFormAttrs[]) => {
  1124. const props = findCompoentProps(options, 'size');
  1125. if (props) {
  1126. if (compProp['optionType'] && compProp['optionType'] != 'button') {
  1127. props['disabled'] = true;
  1128. compProp['size'] = null;
  1129. } else {
  1130. props['disabled'] = false;
  1131. }
  1132. }
  1133. },
  1134. };