GrentOper.tsx 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. import React, { Fragment } from 'react'
  2. import { zipItemAction, sectionItemAction, judgeItemAction, transferItemAction } from './ListState'
  3. import Item from '../../components/item'
  4. import Dialog from '../../components/Dialog'
  5. import styles from './index.module.css'
  6. const JUDGEING = 1, JUGESUCCESS = 2, JUGEERR = 3
  7. const SECTIONING = 4, SECTIONSUCCESS = 5, SECTIONEERR = 6
  8. const TRANING = 7, TRANSUCCESS = 8, TRANEERR = 9
  9. const ZIPING = 10, ZIPSUCCESS = 11, ZIPEERR = 12
  10. const TRANSFERING = 13, TRANSFERSUCCESS = 14, TRANSFEREERR = 15
  11. export default function Grent({ setItemStaus, modelDispatch, referData, delHandle, api, region }: any) {
  12. let [identity, setIdentity] = ['', (dom: HTMLSelectElement) => { identity = dom.value }]
  13. let [text, setText] = ['', (dom: HTMLInputElement) => { text = dom.value }]
  14. let [min, setMin] = ['9', (dom: HTMLInputElement) => {
  15. let i = Number(dom.value)
  16. let imx = Number(max)
  17. if (isNaN(i) || (imx && i > imx) || i < 9 || i > 20) {
  18. dom.value = min
  19. } else {
  20. min = dom.value
  21. }
  22. }]
  23. let [max, setMax] = ['17', (dom: HTMLInputElement) => {
  24. let i = Number(dom.value)
  25. let imi = Number(min)
  26. if (isNaN(i) || (imi && i < imi) || i < 9 || i > 20) {
  27. dom.value = max
  28. } else {
  29. max = dom.value
  30. }
  31. }]
  32. const judge = async (model: Model) => {
  33. model = setItemStaus(model, JUDGEING)
  34. let data = await judgeItemAction(modelDispatch, api.judge + model.id + '/', model)
  35. if (data.status !== 200) {
  36. alert(data.message)
  37. setItemStaus(model, JUGEERR)
  38. } else {
  39. setItemStaus(model, JUGESUCCESS)
  40. referData()
  41. }
  42. }
  43. const zipHandle = async (model: Model) => {
  44. model = setItemStaus(model, ZIPING)
  45. let data = await zipItemAction(modelDispatch, api.zip + model.id + '/', model)
  46. if (data.status !== 200) {
  47. alert(data.message)
  48. setItemStaus(model, ZIPEERR)
  49. } else {
  50. setItemStaus(model, ZIPSUCCESS)
  51. referData()
  52. }
  53. }
  54. const section = async (model: Model) => {
  55. let param = region ? (min + '/' + max + '/') : ''
  56. model = setItemStaus(model, SECTIONING)
  57. sectionItemAction(modelDispatch, api.section + model.id + '/' + param, model)
  58. .then(data => {
  59. if (data.status !== 200) {
  60. model = setItemStaus(model, SECTIONEERR)
  61. alert(data.message)
  62. } else {
  63. model = setItemStaus(model, SECTIONSUCCESS)
  64. referData()
  65. }
  66. });
  67. }
  68. const transform = async (model: Model) => {
  69. model = setItemStaus(model, TRANING)
  70. sectionItemAction(modelDispatch, api.transform + model.id + '/', model)
  71. .then(data => {
  72. if (data.status !== 200) {
  73. model = setItemStaus(model, TRANEERR)
  74. alert(data.message)
  75. } else {
  76. model = setItemStaus(model, TRANSUCCESS)
  77. referData()
  78. }
  79. });
  80. }
  81. const transfer = async (model: Model) => {
  82. model = setItemStaus(model, TRANSFERING)
  83. transferItemAction(modelDispatch, api.transfer + model.id + '/', model, { text: text, role: identity })
  84. .then(data => {
  85. if (data.status !== 200) {
  86. model = setItemStaus(model, TRANSFEREERR)
  87. alert(data.message)
  88. } else {
  89. model = setItemStaus(model, TRANSFERSUCCESS)
  90. referData()
  91. }
  92. });
  93. }
  94. class ItemFn extends React.Component<any, any> {
  95. constructor(props: any) {
  96. super(props)
  97. this.state = {
  98. showDialog: false
  99. }
  100. }
  101. setShowDialog = (b: any) => {
  102. this.setState({showDialog: b})
  103. }
  104. render() {
  105. let {model, privItem} = this.props
  106. let Zip: any = <b onClick={() => zipHandle(model)} style={{ cursor: 'pointer', color: '#3e7cd3' }}>解压</b>
  107. let Sect: any = <b onClick={() => section(model)} style={{ cursor: 'pointer', color: '#3e7cd3' }}>切片</b>
  108. let Jude: any = <b onClick={() => judge(model)} style={{ cursor: 'pointer', color: '#3e7cd3' }}>判断</b>
  109. let Tran: any = <b onClick={() => transform(model)} style={{ cursor: 'pointer', color: '#3e7cd3' }}>转geojson</b>
  110. let Tf: any = (
  111. <Fragment>
  112. <Dialog title="服务发布" show={this.state.showDialog} stateChange={(enter: boolean) => { this.setShowDialog(false); enter && transfer(model) }}>
  113. <div className={styles.dialogitem}>
  114. <label className={styles.init}>图层名称</label>
  115. <input type="text" defaultValue={text} onChange={ev => setText(ev.target)} placeholder="图层名称" />
  116. </div>
  117. <div className={styles.dialogitem}>
  118. <label className={styles.init}>身份</label>
  119. <select defaultValue={identity} onChange={ev => setIdentity(ev.target)}>
  120. <option value="admin">admin</option>
  121. <option value="user">user</option>
  122. </select>
  123. </div>
  124. </Dialog>
  125. <b style={{ cursor: 'pointer', color: '#3e7cd3' }} onClick={() => this.setShowDialog(true)}>发布</b>
  126. </Fragment>
  127. )
  128. if (region) {
  129. Sect = (
  130. <Fragment>
  131. <Dialog title="数据切片" show={this.state.showDialog} stateChange={(enter: boolean) => { this.setShowDialog(false); enter && section(model) }}>
  132. <div className={styles.dialogitem + ' ' + styles.min}>
  133. <label>层级设置</label>
  134. <input type="text" defaultValue={min} onBlur={ev => setMin(ev.target)} placeholder="最小层级" />
  135. <input type="text" defaultValue={max} onBlur={ev => setMax(ev.target)} placeholder="最大层级" />
  136. </div>
  137. </Dialog>
  138. <b style={{ cursor: 'pointer', color: '#3e7cd3' }} onClick={() => this.setShowDialog(true)}>切片</b>
  139. </Fragment>
  140. )
  141. }
  142. Zip = model.ajaxStatue === ZIPING ? '解压中…' : model.ajaxStatue === ZIPSUCCESS ? '成功解压' : Zip
  143. Sect = model.ajaxStatue === SECTIONING ? '切片中…' : model.ajaxStatue === SECTIONSUCCESS ? '成功切片' : Sect
  144. Jude = model.ajaxStatue === JUDGEING ? '判断中…' : model.ajaxStatue === JUGESUCCESS ? '成功判断' : Jude
  145. Tran = model.ajaxStatue === TRANING ? '转换中…' : model.ajaxStatue === TRANSUCCESS ? '成功转换' : Tran
  146. Tf = model.ajaxStatue === TRANSFERING ? '发布中…' : model.ajaxStatue === TRANSFEREERR ? '成功发布' : Tf
  147. if (model.status === 9) {
  148. Jude = '判断中…'
  149. }
  150. if (model.status === 6) {
  151. Sect = '切片中…'
  152. }
  153. if (model.status === 13) {
  154. Tf = '发布中…'
  155. }
  156. return (
  157. <Item key={model.id} {...model} >
  158. {() => (
  159. <Fragment>
  160. {api.zip && (model.status === 1 && Zip)}
  161. {api.judge && ((model.status === 2 || model.status === 9) && Jude)}
  162. {api.transform && ((model.status === 3 || model.status === 7) && Tran)}
  163. {api.section && (model.status === 4 && Sect)}
  164. {api.transfer && ((model.status === 5 || model.status === 10) && Tf)}
  165. {privItem && privItem(model)}
  166. {(
  167. model.state === 9 || model.status === 6 || model.status === 13 ||
  168. model.ajaxStatue === ZIPING || model.ajaxStatue === SECTIONING ||
  169. model.ajaxStatue === JUDGEING || model.ajaxStatue === TRANING ||
  170. model.ajaxStatue === TRANSFERING) ? '' : <b onClick={() => delHandle(model)} style={{ cursor: 'pointer', color: '#f46579' }}>删除</b>
  171. }
  172. </Fragment>
  173. )}
  174. </Item>
  175. )
  176. }
  177. }
  178. return {
  179. ItemFn,
  180. text
  181. }
  182. }