GeoList.tsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import React, { useState } from 'react'
  2. import GrentReducer from './grent'
  3. import Upload from '../components/Upload'
  4. import { Link } from 'react-router-dom'
  5. import styles from './index.module.css'
  6. const infos = ['x平移米数', 'y平移米数', 'z平移米数', 'rx旋转米数', 'ry旋转米数', 'rz旋转米数', 's缩放',]
  7. export default function GeoList({ className }: any) {
  8. const { referData, Element, models } = GrentReducer({
  9. delUrl: '/vector/delete/',
  10. getUrl: '/vector/list/',
  11. zipUrl: '/vector/unzip/',
  12. sectionUrl: '/vector/command/slice/',
  13. transferUrl: '/vector/move/',
  14. transformUrl: '/vector/command/geojson/',
  15. judgeUrl: '/vector/command/judge/coord/',
  16. ItemFn (model: Model) {
  17. if (model.status === 8) {
  18. return <Link to={"/style/" + model.id}>编辑样式</Link>
  19. }
  20. }
  21. })
  22. let [dir, setDir] = useState('')
  23. let [coor, setCoor] = useState('')
  24. let [info, setInfo] = useState('')
  25. for (let i = 0; i < models.length; i++) {
  26. let model = models[i] as Model
  27. if (model.status !== 9) continue
  28. setTimeout(() => referData(), 1000)
  29. break;
  30. }
  31. const changeInput = (ev: React.ChangeEvent<HTMLInputElement>) => {
  32. let val = (ev.target.value as string)
  33. let args = val.split(',')
  34. let i = 0
  35. if (args.length > 7) {
  36. return setInfo('参数超过限制')
  37. }
  38. if (!args[args.length - 1]) {
  39. setInfo('正在输入' + infos[args.length - 1])
  40. } else {
  41. for (; i < args.length; i++) {
  42. if (!args[i] || isNaN(Number(args[i]))) break;
  43. }
  44. if (i !== args.length) {
  45. return setInfo(infos[i] + '格式不正确')
  46. } else {
  47. setInfo('正在输入' + infos[args.length - 1])
  48. }
  49. }
  50. setCoor(ev.target.value)
  51. }
  52. return (
  53. <div className={className}>
  54. {Element}
  55. <div className={styles.uplayer + ' ' + styles.inuplayer} >
  56. <div className={styles.tip}>
  57. 输入坐标:<input value={coor} placeholder="输入对应坐标" onChange={changeInput} onFocus={changeInput} onBlur={() => setInfo('')} />
  58. <div style={{ display: info ? 'block' : 'none' }}>
  59. <p>{info}</p>
  60. <p>以,(英文符号)结束输入,并输入下一个参数如0,0,0</p>
  61. </div>
  62. </div>
  63. <div>
  64. 输入目录:<input value={dir} placeholder="输入对应文件夹" onChange={ev => setDir(ev.target.value)} />
  65. </div>
  66. <Upload api={'/vector/uploadMult/' + dir + '/'} body={{ coord: coor || null }} upHandle={referData} multiple />
  67. </div>
  68. </div>
  69. )
  70. }