overview.ts 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479
  1. import VillageInfoApi, { CommonInfoModel, VillageEnvInfo } from "@/api/inhert/VillageInfoApi";
  2. import { useAliOssUploadCo } from "@/common/components/upload/AliOssUploadCo";
  3. import type { IDynamicFormItem } from "@/components/dynamic";
  4. import type { CheckBoxListProps } from "@/components/dynamic/wrappers/CheckBoxList.vue";
  5. import type { PickerIdFieldProps } from "@/components/dynamic/wrappers/PickerIdField";
  6. import type { RadioIdFieldProps } from "@/components/dynamic/wrappers/RadioIdField";
  7. import type { FieldProps } from "@/components/form/Field.vue";
  8. import type { UploaderFieldProps } from "@/components/form/UploaderField.vue";
  9. import type { RowProps } from "@/components/layout/grid/Row.vue";
  10. import type { GroupForm } from "../forms";
  11. export const villageInfoOverviewForm : GroupForm = {
  12. [1]: [CommonInfoModel, (form) => ({
  13. formItems: [
  14. {
  15. label: '名称',
  16. name: 'name',
  17. type: 'text',
  18. defaultValue: '',
  19. additionalProps: {
  20. placeholder: '请输入名称,例如:后埔',
  21. },
  22. rules: [{
  23. required: true,
  24. message: '请输入名称',
  25. }]
  26. },
  27. /* {
  28. label: '编码',
  29. name: 'code',
  30. type: 'text',
  31. defaultValue: '',
  32. additionalProps: {
  33. placeholder: '请输入编码,例如330106',
  34. },
  35. rules: [{
  36. required: true,
  37. message: '请输入编码',
  38. }]
  39. }, */
  40. {
  41. label: '地址',
  42. name: 'cityAddress',
  43. type: 'select-city',
  44. defaultValue: () => [],
  45. additionalProps: {
  46. placeholder: '请点击这里选择地址或右侧者从地图选择',
  47. onSelectedTownship: (v: string, code: string) => {
  48. form.value.setValueByPath('township', v);
  49. form.value.setValueByPath('code', code);
  50. }
  51. },
  52. },
  53. {
  54. label: '所在乡镇(街道)',
  55. name: 'township',
  56. type: 'text',
  57. defaultValue: '',
  58. additionalProps: {
  59. placeholder: '请输入所在乡镇(街道)',
  60. },
  61. },
  62. {
  63. label: '类型',
  64. name: 'villageType',
  65. type: 'radio-id',
  66. additionalProps: {
  67. loadData: async () =>
  68. (await VillageInfoApi.getCategoryChildList(94))
  69. .map((p) => ({
  70. value: p.id,
  71. text: p.title,
  72. })),
  73. } as RadioIdFieldProps,
  74. },
  75. ]
  76. }), { title: '行政区划', typeName: '', order: 1 }],
  77. [5]: [CommonInfoModel, () => ({
  78. formItems: [
  79. {
  80. name: '',
  81. type: 'flat-group',
  82. childrenColProps: { span: 24 },
  83. children: [
  84. {
  85. label: '概括',
  86. name: 'overview',
  87. type: 'richtext',
  88. defaultValue: '',
  89. additionalProps: {
  90. placeholder: '请输入整体概括信息',
  91. maxLength: 300,
  92. showWordLimit: true,
  93. } as FieldProps,
  94. },
  95. {
  96. label: '突出价值',
  97. name: 'prominent',
  98. type: 'richtext',
  99. defaultValue: '',
  100. additionalProps: {
  101. placeholder: '请输入突出价值信息',
  102. maxLength: 300,
  103. showWordLimit: true,
  104. } as FieldProps,
  105. }
  106. ]
  107. },
  108. {
  109. name: '',
  110. type: 'flat-group',
  111. childrenColProps: { span: 24 },
  112. children: [
  113. {
  114. label: '相关视频(可选)',
  115. name: 'video',
  116. type: 'uploader',
  117. defaultValue: '',
  118. additionalProps: {
  119. upload: useAliOssUploadCo('xiangyuan/cultural/video'),
  120. chooseType: 'video',
  121. maxFileSize: 1024 * 1024 * 20,
  122. single: true,
  123. } as UploaderFieldProps,
  124. },
  125. ]
  126. },
  127. ]
  128. }), { title: '综述', typeName: '', order: 2 }],
  129. [2]: [VillageEnvInfo, () => ({
  130. formItems: [
  131. {
  132. label: '经纬度',
  133. name: 'lonlat',
  134. type: 'select-lonlat',
  135. defaultValue: '',
  136. additionalProps: {},
  137. formProps: { showRightArrow: true } as FieldProps,
  138. },
  139. {
  140. label: '海拔',
  141. name: 'altitude',
  142. type: 'number',
  143. defaultValue: 0,
  144. additionalProps: {
  145. placeholder: '请输入海拔',
  146. min: -1000,
  147. max: 10000,
  148. step: 10,
  149. addonAfter: 'M',
  150. },
  151. },
  152. {
  153. label: '地形地貌特征(多选)',
  154. name: 'landforms',
  155. type: 'check-box-list',
  156. additionalProps: {
  157. multiple: true,
  158. loadData: async () =>
  159. (await VillageInfoApi.getCategoryChildList(97))
  160. .map((p) => ({
  161. value: p.id,
  162. text: p.title,
  163. }))
  164. ,
  165. } as CheckBoxListProps,
  166. defaultValue: [],
  167. },
  168. {
  169. label: '地域面积',
  170. name: 'area',
  171. type: 'number',
  172. defaultValue: 0,
  173. additionalProps: {
  174. placeholder: '请输入地域面积',
  175. min: 0,
  176. max: 10000,
  177. step: 1,
  178. addonAfter: '平方公里',
  179. },
  180. },
  181. {
  182. label: '建筑占地面积',
  183. name: 'villageArea',
  184. type: 'number',
  185. defaultValue: 0,
  186. additionalProps: {
  187. placeholder: '请输入占地面积',
  188. min: 0,
  189. max: 10000,
  190. step: 1,
  191. addonAfter: '亩',
  192. },
  193. },
  194. {
  195. label: '形成年代',
  196. name: 'age',
  197. type: 'select-id',
  198. additionalProps: {
  199. loadData: async () =>
  200. (await VillageInfoApi.getCategoryChildList(103))
  201. .map((p) => ({
  202. value: p.id,
  203. text: p.title,
  204. }))
  205. ,
  206. } as PickerIdFieldProps,
  207. formProps: { showRightArrow: true } as FieldProps,
  208. },
  209. ]
  210. }), { title: '地理信息', typeName: '', order: 3 }],
  211. [3]: [CommonInfoModel, () => ({
  212. formItems: [
  213. {
  214. label: '非遗最高级别',
  215. name: 'ichLevel',
  216. type: 'select-id',
  217. defaultValue: null,
  218. additionalProps: {
  219. loadData: async () =>
  220. (await VillageInfoApi.getCategoryChildList(111))
  221. .map((p) => ({
  222. value: p.id,
  223. text: p.title,
  224. }))
  225. ,
  226. } as PickerIdFieldProps,
  227. formProps: { showRightArrow: true } as FieldProps,
  228. },
  229. {
  230. label: '传统建筑数量',
  231. name: 'traditionalBuildings',
  232. type: 'number',
  233. defaultValue: 0,
  234. additionalProps: {
  235. min: 0,
  236. max: 10000,
  237. step: 1,
  238. },
  239. },
  240. {
  241. label: '列入历史文化名村(社)级别',
  242. name: 'historyLevel',
  243. type: 'select-id',
  244. additionalProps: {
  245. loadData: async () =>
  246. (await VillageInfoApi.getCategoryChildList(151))
  247. .map((p) => ({
  248. value: p.id,
  249. text: p.title,
  250. }))
  251. ,
  252. } as PickerIdFieldProps,
  253. formProps: { showRightArrow: true } as FieldProps,
  254. },
  255. {
  256. label: '列入特色景观旅游名村(社)级别',
  257. name: 'touristLevel',
  258. type: 'select-id',
  259. additionalProps: {
  260. loadData: async () =>
  261. (await VillageInfoApi.getCategoryChildList(151))
  262. .map((p) => ({
  263. value: p.id,
  264. text: p.title,
  265. }))
  266. ,
  267. } as PickerIdFieldProps,
  268. formProps: { showRightArrow: true } as FieldProps,
  269. },
  270. {
  271. label: '列入少数民族特色村寨(社)试点示范',
  272. name: 'isFeaturedVillage',
  273. type: 'check-box-int',
  274. defaultValue: '',
  275. additionalProps: {},
  276. },
  277. {
  278. label: '其他认定级别',
  279. name: 'other',
  280. type: 'text',
  281. defaultValue: '',
  282. additionalProps: {
  283. placeholder: '(可选)输入其他认定级别',
  284. },
  285. rules: []
  286. },
  287. ]
  288. }), { title: '建设与保护', typeName: '', order: 4 }],
  289. [4]: [CommonInfoModel, () => ({
  290. formItems: [
  291. {
  292. name: 'a',
  293. label: '人口与收入',
  294. type: 'flat-group',
  295. childrenColProps: { span: 24 },
  296. children: [
  297. {
  298. label: '主要民族',
  299. name: 'nationlity',
  300. type: 'text',
  301. defaultValue: '',
  302. additionalProps: {
  303. placeholder: '请输入主要民族',
  304. },
  305. },
  306. ...[
  307. {
  308. label: '户籍人口',
  309. name: 'registeredPopulation',
  310. },
  311. {
  312. label: '常住人口',
  313. name: 'permanentPopulation',
  314. },
  315. {
  316. label: '人均年收入',
  317. name: 'personalAnnualIncome',
  318. },
  319. {
  320. label: '集体年收入',
  321. name: 'villageAnnualIncome',
  322. },
  323. ].map((it) => ({
  324. name: '',
  325. label: it.label,
  326. type: 'flat-group',
  327. rowProps: {
  328. align: 'center',
  329. } as RowProps,
  330. children: [
  331. {
  332. label: '',
  333. name: it.name + 'Year',
  334. type: 'number',
  335. defaultValue: () => new Date().getFullYear(),
  336. additionalProps: {
  337. min: 1900,
  338. max: 2100,
  339. step: 10,
  340. },
  341. formProps: {
  342. labelWidth: '0rpx',
  343. labelPosition: 'left',
  344. showBottomBorder: false,
  345. },
  346. rules: [{
  347. required: true,
  348. message: '请输入',
  349. }]
  350. },
  351. {
  352. label: '',
  353. name: 'aa',
  354. type: 'static-text',
  355. additionalProps: { text: '年' },
  356. formProps: {
  357. labelWidth: '0rpx',
  358. showBottomBorder: false,
  359. },
  360. },
  361. {
  362. label: '',
  363. name: it.name,
  364. type: 'number',
  365. defaultValue: 0,
  366. additionalProps: {
  367. min: 0,
  368. step: 10,
  369. },
  370. formProps: {
  371. labelWidth: '0rpx',
  372. labelPosition: 'left',
  373. showBottomBorder: false,
  374. },
  375. rules: [{
  376. required: true,
  377. message: '请输入人口',
  378. }]
  379. },
  380. ]
  381. } as IDynamicFormItem)),
  382. ]
  383. },
  384. {
  385. name: '',
  386. label: '主要产业',
  387. type: 'flat-group',
  388. childrenColProps: { span: 24 },
  389. children: [
  390. ...[
  391. {
  392. label: '农业',
  393. name: 'agriculture',
  394. pid: 128,
  395. },
  396. {
  397. label: '林业',
  398. name: 'forestry',
  399. pid: 194,
  400. },
  401. {
  402. label: '畜牧业',
  403. name: 'animal',
  404. pid: 200,
  405. },
  406. {
  407. label: '渔业',
  408. name: 'fishing',
  409. pid: 205,
  410. },
  411. {
  412. label: '制造业(含手工)',
  413. name: 'manufacturing',
  414. pid: 208,
  415. },
  416. {
  417. label: '建筑业',
  418. name: 'construction',
  419. pid: 227,
  420. },
  421. {
  422. label: '批发和零售业',
  423. name: 'retail',
  424. pid: 230,
  425. },
  426. {
  427. label: '服务业',
  428. name: 'service',
  429. pid: 233,
  430. },
  431. {
  432. label: '其他',
  433. name: 'otherIndustries',
  434. pid: 238,
  435. },
  436. ].map((it) => ({
  437. label: it.label,
  438. name: it.name,
  439. type: 'select-id',
  440. additionalProps: {
  441. loadData: async () =>
  442. (await VillageInfoApi.getCategoryChildList(it.pid))
  443. .map((p) => ({
  444. value: p.id,
  445. text: p.title,
  446. }))
  447. ,
  448. } as PickerIdFieldProps,
  449. formProps: { showRightArrow: true } as FieldProps,
  450. rules: [],
  451. })),
  452. {
  453. label: '其他服务业',
  454. name: 'otherService',
  455. type: 'text',
  456. defaultValue: '',
  457. additionalProps: {
  458. placeholder: '(可选)输入其他服务业',
  459. },
  460. rules: [],
  461. show: { callback: (_, m) => m.otherIndustries === 238 }
  462. },
  463. {
  464. label: '其他农业',
  465. name: 'otherAgriculture',
  466. type: 'text',
  467. defaultValue: '',
  468. additionalProps: {
  469. placeholder: '(可选)输入其他农业',
  470. },
  471. rules: [] ,
  472. show: { callback: (_, m) => m.otherIndustries === 128 }
  473. },
  474. ]
  475. },
  476. ]
  477. }), { title: '人口与经济', typeName: '', order: 5 }],
  478. }