data.ts 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. import { BasicColumn } from '/@/components/Table';
  2. import { FormSchema } from '/@/components/Form/index';
  3. import { h } from 'vue';
  4. import Input from './customComponents/Input.vue';
  5. import InputTextArea from './customComponents/InputTextArea.vue';
  6. import InputNumber from './customComponents/InputNumber.vue';
  7. import ArrayCom from './customComponents/ArrayCom.vue';
  8. import Select from './customComponents/Select.vue';
  9. import Checkbox from './customComponents/Checkbox.vue';
  10. import Radio from './customComponents/Radio.vue';
  11. import DatePicker from './customComponents/DatePicker.vue';
  12. import TimePicker from './customComponents/TimePicker.vue';
  13. import Switch from './customComponents/Switch.vue';
  14. export const columns: BasicColumn[] = [
  15. {
  16. title: '变量标题',
  17. align: 'left',
  18. dataIndex: 'title',
  19. width: 100,
  20. },
  21. {
  22. title: '变量值',
  23. align: 'left',
  24. dataIndex: 'value',
  25. width: 300,
  26. customRender: ({ record }) => {
  27. switch (record.type) {
  28. case 'Input':
  29. const onchange = (val) => {
  30. console.log(val);
  31. record.value = val;
  32. };
  33. return h(Input, {
  34. value: record.value,
  35. tip: record.tip,
  36. errMsg: record.errMsg || '',
  37. rules: record.rules || [],
  38. style: { width: '100%' },
  39. onChange: onchange,
  40. });
  41. case 'InputNumber':
  42. const onNumberChange = (val) => {
  43. record.value = val;
  44. };
  45. return h(InputNumber, {
  46. value: record.value,
  47. tip: record.tip,
  48. errMsg: record.errMsg || '',
  49. rules: record.rules || [],
  50. style: { width: '100%' },
  51. onChange: onNumberChange,
  52. });
  53. case 'Select':
  54. const onSelectChange = (val) => {
  55. record.value = val;
  56. };
  57. return h(Select, {
  58. value: record.value,
  59. options: record.option,
  60. tip: record.tip,
  61. mode: 'SECRET_COMBOBOX_MODE_DO_NOT_USE',
  62. placeholder: '没有选中任何项',
  63. onChange: onSelectChange,
  64. });
  65. case 'MultipleSelect':
  66. const onMultipleChange = (val) => {
  67. record.value = val;
  68. };
  69. return h(Select, {
  70. value: record.value,
  71. mode: 'multiple',
  72. options: record.option,
  73. tip: record.tip,
  74. placeholder: '没有选中任何项',
  75. onChange: onMultipleChange,
  76. });
  77. case 'DatePicker':
  78. const onDatePickerChange = (val) => {
  79. record.value = val;
  80. };
  81. return h(DatePicker, {
  82. placeholder: '没有选择日期',
  83. value: record.value,
  84. tip: record.tip,
  85. onChange: onDatePickerChange,
  86. });
  87. case 'TimePicker':
  88. const onTimePickerChange = (val) => {
  89. record.value = val;
  90. };
  91. return h(TimePicker, {
  92. placeholder: '没有选择时间',
  93. value: record.value,
  94. tip: record.tip,
  95. onChange: onTimePickerChange,
  96. });
  97. case 'InputTextArea':
  98. const onTextAreaChange = (val) => {
  99. console.log(val);
  100. record.value = val;
  101. };
  102. return h(InputTextArea, {
  103. value: record.value,
  104. tip: record.tip,
  105. errMsg: record.errMsg || '',
  106. rules: record.rules || [],
  107. style: { width: '100%' },
  108. onChange: onTextAreaChange,
  109. });
  110. case 'Switch':
  111. const onSwitchChange = (val) => {
  112. record.value = val;
  113. };
  114. return h(Switch, {
  115. checked: record.value,
  116. tip: record.tip,
  117. onChange: onSwitchChange,
  118. });
  119. case 'Checkbox':
  120. const onCheckboxChange = (val) => {
  121. console.log(val);
  122. record.value = val;
  123. };
  124. return h(Checkbox, {
  125. value: record.value,
  126. options: record.option,
  127. tip: record.tip,
  128. onChange: onCheckboxChange,
  129. });
  130. case 'Radio':
  131. const onRadioChange = (val) => {
  132. record.value = val;
  133. };
  134. return h(Radio, {
  135. value: record.value,
  136. options: record.option,
  137. tip: record.tip,
  138. onChange: onRadioChange,
  139. });
  140. case 'ArrayCom':
  141. // const onRadioChange = (evt) => {
  142. // record.value = evt.target.value;
  143. // };
  144. return h(ArrayCom, {
  145. // value: record.value,
  146. // options: record.option,
  147. // style: { width: '65%' },
  148. // onChange: onRadioChange,
  149. });
  150. }
  151. },
  152. },
  153. {
  154. title: '变量名',
  155. align: 'left',
  156. dataIndex: 'name',
  157. width: 150,
  158. },
  159. ];
  160. export const schemas: FormSchema[] = [
  161. {
  162. field: 'type',
  163. component: 'Select',
  164. label: '类型',
  165. colProps: {
  166. span: 20,
  167. },
  168. defaultValue: '1',
  169. componentProps: {
  170. options: [
  171. {
  172. label: '字符',
  173. value: '1',
  174. key: '1',
  175. },
  176. {
  177. label: '数字',
  178. value: '2',
  179. key: '2',
  180. },
  181. ],
  182. },
  183. },
  184. {
  185. field: 'group',
  186. component: 'Select',
  187. label: '分组',
  188. colProps: {
  189. span: 20,
  190. },
  191. defaultValue: '1',
  192. componentProps: {
  193. options: [
  194. {
  195. label: '基础配置',
  196. value: '1',
  197. key: '1',
  198. },
  199. {
  200. label: '邮件配置',
  201. value: '2',
  202. key: '2',
  203. },
  204. ],
  205. },
  206. },
  207. {
  208. field: 'name',
  209. component: 'Input',
  210. label: '变量名',
  211. colProps: {
  212. span: 20,
  213. },
  214. required: true,
  215. },
  216. {
  217. field: 'title',
  218. component: 'Input',
  219. label: '变量标题',
  220. colProps: {
  221. span: 20,
  222. },
  223. rules: [{ required: true, type: 'email', trigger: 'blur' }],
  224. },
  225. {
  226. field: 'value',
  227. component: 'Input',
  228. label: '变量值',
  229. colProps: {
  230. span: 20,
  231. },
  232. },
  233. {
  234. field: 'tip',
  235. component: 'Input',
  236. label: '提示信息',
  237. colProps: {
  238. span: 20,
  239. },
  240. },
  241. {
  242. field: 'rule',
  243. component: 'Select',
  244. label: '校验规则',
  245. colProps: {
  246. span: 20,
  247. },
  248. componentProps: {
  249. mode: 'multiple',
  250. options: [
  251. {
  252. label: '必选(required)',
  253. value: 'required',
  254. key: 'required',
  255. },
  256. {
  257. label: '数字(digits)',
  258. value: 'digits',
  259. key: 'digits',
  260. },
  261. {
  262. label: '字母(letters)',
  263. value: 'letters',
  264. key: 'letters',
  265. },
  266. {
  267. label: '日期(time)',
  268. value: 'time',
  269. key: 'time',
  270. },
  271. {
  272. label: '邮箱(email)',
  273. value: 'email',
  274. key: 'email',
  275. },
  276. {
  277. label: '网址(url)',
  278. value: 'url',
  279. key: 'url',
  280. },
  281. {
  282. label: 'QQ号(qq)',
  283. value: 'qq',
  284. key: 'qq',
  285. },
  286. {
  287. label: '身份证(IDcard)',
  288. value: 'IDcard',
  289. key: 'IDcard',
  290. },
  291. {
  292. label: '座机电话(tel)',
  293. value: 'tel',
  294. key: 'tel',
  295. },
  296. {
  297. label: '手机(mobile)',
  298. value: 'mobile',
  299. key: 'mobile',
  300. },
  301. {
  302. label: '邮编(zipcode)',
  303. value: 'zipcode',
  304. key: 'zipcode',
  305. },
  306. {
  307. label: '中文(chinese)',
  308. value: 'chinese',
  309. key: 'chinese',
  310. },
  311. {
  312. label: '用户名(username)',
  313. value: 'username',
  314. key: 'username',
  315. },
  316. {
  317. label: '密码(password)',
  318. value: 'password',
  319. key: 'password',
  320. },
  321. ],
  322. },
  323. },
  324. {
  325. field: 'extra',
  326. component: 'InputTextArea',
  327. label: '扩展属性',
  328. colProps: {
  329. span: 20,
  330. },
  331. },
  332. ];