element.ts 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. import VillageInfoApi, { CommonInfoModel } from "@/api/inhert/VillageInfoApi";
  2. import { useAliOssUploadCo } from "@/common/components/upload/AliOssUploadCo";
  3. import type { PickerIdFieldProps } from "@/components/dynamic/wrappers/PickerIdField";
  4. import type { FieldProps } from "@/components/form/Field.vue";
  5. import type { StepperProps } from "@/components/form/Stepper.vue";
  6. import type { UploaderFieldProps } from "@/components/form/UploaderField.vue";
  7. import type { SingleForm } from "../forms";
  8. import { villageCommonContent } from "./common";
  9. export const vilElementForm : SingleForm = [CommonInfoModel, (r) => ({
  10. formItems: [
  11. {
  12. label: '基础信息',
  13. name: 'baseInfo',
  14. type: 'flat-group',
  15. childrenColProps: { span: 24 },
  16. children: [
  17. {
  18. label: '名称',
  19. name: 'name',
  20. type: 'text',
  21. defaultValue: '',
  22. additionalProps: {
  23. placeholder: '请输入名称',
  24. },
  25. rules: [{
  26. required: true,
  27. message: '请输入名称',
  28. }]
  29. },
  30. {
  31. label: '编号',
  32. name: 'code',
  33. type: 'text',
  34. defaultValue: '',
  35. additionalProps: {
  36. placeholder: '(可选)请输入编号',
  37. },
  38. },
  39. {
  40. label: '年代',
  41. name: 'age',
  42. type: 'select-id',
  43. additionalProps: {
  44. loadData: async () =>
  45. (await VillageInfoApi.getCategoryChildList(103))
  46. .map((p) => ({
  47. value: p.id,
  48. text: p.title,
  49. }))
  50. ,
  51. } as PickerIdFieldProps,
  52. formProps: { showRightArrow: true } as FieldProps,
  53. rules: [{
  54. required: true,
  55. message: '请选择年代',
  56. }],
  57. },
  58. {
  59. label: '要素类型',
  60. name: 'elementType',
  61. type: 'select-id',
  62. additionalProps: {
  63. loadData: async () =>
  64. (await VillageInfoApi.getCategoryChildList(178))
  65. .map((p) => ({
  66. value: p.id,
  67. text: p.title,
  68. }))
  69. ,
  70. } as PickerIdFieldProps,
  71. formProps: { showRightArrow: true } as FieldProps,
  72. rules: [{
  73. required: true,
  74. message: '请选择要素类型',
  75. }],
  76. },
  77. ]
  78. },
  79. {
  80. label: '详细信息',
  81. name: 'detailInfo',
  82. type: 'flat-group',
  83. childrenColProps: { span: 24 },
  84. children: [
  85. {
  86. label: '环境特点',
  87. name: 'environment',
  88. type: 'richtext',
  89. defaultValue: '',
  90. additionalProps: {
  91. placeholder: '请输入环境特点',
  92. maxLength: 500,
  93. showWordLimit: true,
  94. } as FieldProps,
  95. rules: []
  96. },
  97. {
  98. label: '功能特点',
  99. name: 'funcFeatures',
  100. type: 'richtext',
  101. defaultValue: '',
  102. additionalProps: {
  103. placeholder: '请输入功能特点',
  104. maxLength: 300,
  105. showWordLimit: true,
  106. } as FieldProps,
  107. rules: []
  108. },
  109. {
  110. label: '保存状况',
  111. name: 'condition',
  112. type: 'richtext',
  113. defaultValue: '',
  114. additionalProps: {
  115. placeholder: '请输入保存状况',
  116. maxLength: 500,
  117. showWordLimit: true,
  118. } as FieldProps,
  119. rules: []
  120. },
  121. {
  122. label: '文化故事',
  123. name: 'story',
  124. type: 'richtext',
  125. defaultValue: '',
  126. additionalProps: {
  127. placeholder: '请输入文化故事',
  128. maxLength: 1000,
  129. showWordLimit: true,
  130. } as FieldProps,
  131. rules: []
  132. },
  133. {
  134. label: '图片',
  135. name: 'images',
  136. type: 'uploader',
  137. defaultValue: '',
  138. additionalProps: {
  139. upload: useAliOssUploadCo('xiangyuan/element'),
  140. maxFileSize: 1024 * 1024 * 20,
  141. maxUploadCount: 20,
  142. } as UploaderFieldProps,
  143. rules: []
  144. },
  145. ...villageCommonContent(r, {
  146. title: '环境要素',
  147. showContent: false,
  148. showTitle: false,
  149. }).formItems
  150. ]
  151. },
  152. {
  153. label: '位置信息',
  154. name: 'locationInfo',
  155. type: 'flat-group',
  156. childrenColProps: { span: 24 },
  157. children: [
  158. {
  159. label: '位置',
  160. name: 'position',
  161. type: 'text',
  162. defaultValue: '',
  163. additionalProps: {
  164. placeholder: '请输入位置',
  165. },
  166. rules: [{
  167. required: true,
  168. message: '请输入位置',
  169. }]
  170. },
  171. {
  172. label: '经纬度',
  173. name: 'lonlat',
  174. type: 'select-lonlat',
  175. defaultValue: '',
  176. additionalProps: {},
  177. formProps: { showRightArrow: true } as FieldProps,
  178. rules: [{
  179. required: true,
  180. message: '请输入经纬度',
  181. }]
  182. },
  183. {
  184. label: '地址',
  185. name: 'address',
  186. type: 'select-address',
  187. defaultValue: '',
  188. additionalProps: {},
  189. rules: [{
  190. required: true,
  191. message: '请输入地址',
  192. }]
  193. },
  194. {
  195. label: '方位',
  196. name: 'orientation',
  197. type: 'text',
  198. defaultValue: '',
  199. additionalProps: { placeholder: '方位' },
  200. rules: []
  201. },
  202. {
  203. label: '相对距离',
  204. name: 'distance',
  205. type: 'text',
  206. defaultValue: '',
  207. additionalProps: { placeholder: '相对距离' },
  208. rules: []
  209. },
  210. {
  211. name: '',
  212. label: '平面坐标XY',
  213. type: 'flat-simple',
  214. children: [
  215. {
  216. label: '',
  217. name: 'mapX',
  218. type: 'number',
  219. defaultValue: 0,
  220. additionalProps: {
  221. min: -250,
  222. max: 250,
  223. } as StepperProps,
  224. formProps: {
  225. labelWidth: '0rpx',
  226. labelPosition: 'left',
  227. showBottomBorder: false,
  228. },
  229. rules: [{
  230. required: true,
  231. message: '请输入X',
  232. }]
  233. },
  234. {
  235. label: '',
  236. name: 'mapY',
  237. type: 'number',
  238. defaultValue: 0,
  239. additionalProps: {
  240. min: -250,
  241. max: 250,
  242. } as StepperProps,
  243. formProps: {
  244. labelWidth: '0rpx',
  245. labelPosition: 'left',
  246. showBottomBorder: false,
  247. },
  248. rules: [{
  249. required: true,
  250. message: '请输入Y',
  251. }]
  252. },
  253. ]
  254. },
  255. ]
  256. },
  257. ]
  258. })]