uploadRoom2.jsx 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728
  1. import Taro, { Component } from '@tarojs/taro'
  2. import { View } from '@tarojs/components'
  3. import { AtTextarea } from 'taro-ui'
  4. import LFormGroup from '@/c/lform/formGroup'
  5. const HLKEY = '654mca0l38b489d9'
  6. const CJ = require('crypto-js')
  7. import './uploadRoom2.scss'
  8. import { TaroCropper } from 'taro-cropper'
  9. class Index extends Component {
  10. onShareAppMessage() {
  11. return {
  12. title: `自助上传房源`,
  13. }
  14. }
  15. onShareTimeline () {
  16. return {
  17. title: `自助上传房源`,
  18. }
  19. }
  20. constructor (props) {
  21. super(props)
  22. this.state = {
  23. addr1: '',
  24. addr2: '',
  25. addr3: '',
  26. hType1: '',
  27. hType2: '',
  28. hType3: '',
  29. sRate1: '',
  30. sRate2: '',
  31. formObj: {
  32. hide_status: '1',
  33. },
  34. imgArr: [],
  35. cutImgTempUrl: '',
  36. cutImgShow: false,
  37. }
  38. }
  39. config = {
  40. navigationBarTitleText: '上传房源',
  41. }
  42. componentWillMount () {
  43. Taro.$AHU(this)
  44. }
  45. componentDidMount() {
  46. const {id} = this.$router.params
  47. if (id) {
  48. Taro.api.room.apieshousedetail({id}).then(res => {
  49. let cObj = res || {}
  50. // console.log(cObj)
  51. const addr = cObj.house_no ? cObj.house_no.split('-') : []
  52. const hType = cObj.house_type ? cObj.house_type.split('-') : []
  53. const sRate = cObj.stairs_rate ? cObj.stairs_rate.split('-') : []
  54. Taro.setNavigationBarTitle({
  55. title: cObj.sale_user.sale_name + '-编辑房源'
  56. })
  57. this.setState({
  58. formObj: {
  59. id: cObj.id,
  60. hide_status: cObj.hide_status || '1',
  61. estate_id: cObj.estate_id || '',
  62. estate_name: cObj.estate_name || '',
  63. title: cObj.title || '',
  64. house_no: cObj.house_no || '',
  65. delivery_at: cObj.delivery_at || '',
  66. price: cObj.price || '',
  67. area: cObj.area || '',
  68. full_year: cObj.full_year || '',
  69. floor: cObj.floor || '',
  70. storeys: cObj.storeys || '',
  71. is_dec: cObj.is_dec || '',
  72. is_elevator: cObj.is_elevator || '',
  73. owner: cObj.owner || '',
  74. custom_tag: cObj.custom_tag || '',
  75. owner_phone: cObj.owner_phone || '',
  76. introduce: cObj.introduce || '',
  77. remarked: cObj.remarked || '',
  78. pri_image: cObj.pri_image || '',
  79. house_img: cObj.house_img || '',
  80. position: cObj.position || '',
  81. floor_price: cObj.floor_price || '',
  82. },
  83. imgArr: (cObj.images && cObj.images.length > 0) ? cObj.images.split(',') : [],
  84. addr1: addr[0],
  85. addr2: addr[1],
  86. addr3: addr[2],
  87. hType1: hType[0],
  88. hType2: hType[1],
  89. hType3: hType[2],
  90. sRate1: sRate[0],
  91. sRate2: sRate[1],
  92. })
  93. })
  94. }
  95. }
  96. saveHandle () {
  97. const { formObj, imgArr, addr1, addr2, addr3, hType1, hType2, hType3, sRate1, sRate2 } = this.state
  98. let house_no = ''
  99. if (addr1 && addr2 && addr3) {
  100. house_no = `${addr1}-${addr2}-${addr3}`
  101. } else {
  102. Taro.$msg('请输入楼栋单号房间号')
  103. return
  104. }
  105. let house_type = ''
  106. if (hType1 && hType2 && hType3) {
  107. house_type = `${hType1}-${hType2}-${hType3}`
  108. }
  109. let stairs_rate = ''
  110. if (sRate1 && sRate2) {
  111. stairs_rate = `${sRate1}-${sRate1}`
  112. }
  113. // console.log(formObj.estate_id, formObj.title, formObj.pri_image)
  114. let apiStr = 'apieshouseadd'
  115. let params = {
  116. estate_id: formObj.estate_id,
  117. title: formObj.title,
  118. house_no,
  119. delivery_at: formObj.delivery_at,
  120. house_type,
  121. stairs_rate,
  122. price: formObj.price,
  123. area: formObj.area,
  124. full_year: formObj.full_year,
  125. floor: formObj.floor,
  126. storeys: formObj.storeys,
  127. is_dec: formObj.is_dec,
  128. is_elevator: formObj.is_elevator,
  129. owner: formObj.owner,
  130. custom_tag: formObj.custom_tag,
  131. owner_phone: formObj.owner_phone,
  132. introduce: formObj.introduce,
  133. remarked: formObj.remarked,
  134. hide_status: formObj.hide_status,
  135. pri_image: formObj.pri_image,
  136. house_img: formObj.house_img,
  137. position: formObj.position,
  138. floor_price: formObj.floor_price,
  139. images: imgArr.join(','),
  140. }
  141. if (formObj.id) {
  142. apiStr = 'apieshouseedit'
  143. params.id = formObj.id
  144. }
  145. if (formObj.estate_id && formObj.title && formObj.pri_image) {
  146. Taro.api.room[apiStr](params).then(res => {
  147. Taro.$msgConfirm('操作成功', () => {
  148. Taro.navigateBack({
  149. delta: 1
  150. })
  151. }, () => {
  152. Taro.navigateBack({
  153. delta: 1
  154. })
  155. })
  156. })
  157. } else {
  158. if (!formObj.estate_id) Taro.$msg('楼盘必填')
  159. if (!formObj.title) Taro.$msg('标题必填')
  160. if (!formObj.pri_image) Taro.$msg('封面图必填')
  161. }
  162. }
  163. baseFormChange (key, val) {
  164. let { formObj } = this.state
  165. formObj[key] = val
  166. this.setState({
  167. formObj
  168. })
  169. }
  170. dealImgHandle (key, moreStr) {
  171. this.uploadComImg((val) => {
  172. let { formObj } = this.state
  173. formObj[key] = val
  174. this.setState({
  175. formObj
  176. })
  177. }, 1, moreStr)
  178. }
  179. addImg () {
  180. this.uploadComImg((arr) => {
  181. let { imgArr } = this.state
  182. imgArr = [...imgArr, ...arr]
  183. this.setState({
  184. imgArr
  185. })
  186. }, 9)
  187. }
  188. uploadComImg (bc, count, moreStr) {
  189. const that = this
  190. Taro.chooseImage({
  191. count: count ? count : 1, // 默认9
  192. sizeType: ['compressed'], // original
  193. sourceType: ['album', 'camera'],
  194. success: function (res) {
  195. const tempFilePaths = res.tempFilePaths
  196. if (tempFilePaths.length > 0) {
  197. let imgBcArr = []
  198. tempFilePaths.forEach((p, i) => {
  199. that.diyUploadFile(p, moreStr).then(url => {
  200. imgBcArr.push(url)
  201. if (bc && imgBcArr.length === tempFilePaths.length) {
  202. bc(imgBcArr)
  203. }
  204. })
  205. })
  206. }
  207. }
  208. })
  209. }
  210. diyUploadFile (filePath, moreStr) {
  211. return new Promise((resolve, reject) => {
  212. let token = Taro.getStorageSync('APP_token')
  213. let url = `https://api.honglouplus.com/api/upload/cloudpir`
  214. if (moreStr === 'noSign') url = `https://api.honglouplus.com/api/upload/cloud`
  215. Taro.uploadFile({
  216. url,
  217. filePath,
  218. name: 'upload',
  219. formData: {
  220. 'token': token
  221. },
  222. success (res){
  223. const msg = res.data || ''
  224. const key = CJ.enc.Utf8.parse(HLKEY)
  225. const bytes = CJ.AES.decrypt(msg, key, {
  226. mode: CJ.mode.ECB,
  227. padding: CJ.pad.Pkcs7
  228. })
  229. const originalText = bytes.toString(CJ.enc.Utf8)
  230. const cData = JSON.parse(originalText)
  231. const curImg = cData.data.url || ''
  232. resolve(curImg)
  233. }
  234. })
  235. })
  236. }
  237. delImg (index) {
  238. let { imgArr } = this.state
  239. imgArr.splice(index, 1)
  240. this.setState({
  241. imgArr
  242. })
  243. }
  244. previewImageHandle (current, arr) {
  245. const { imgArr } = this.state
  246. let nArr = imgArr.map(item => {
  247. return item + '_plus'
  248. })
  249. Taro.previewImage({
  250. current,
  251. urls: nArr
  252. })
  253. }
  254. renderAddr () {
  255. const { addr1, addr2, addr3 } = this.state
  256. return (
  257. <View className="scoped-addr-box">
  258. <Input type="number" value={addr1} onInput={this.changeAddrInput.bind(this, 'addr1')} className="i" placeholder="__" />
  259. <View className='t'>栋座</View>
  260. <Input type="number" value={addr2} onInput={this.changeAddrInput.bind(this, 'addr2')} className="i" placeholder="__" />
  261. <View className='t'>单元</View>
  262. <Input type="number" value={addr3} onInput={this.changeAddrInput.bind(this, 'addr3')} className="i" placeholder="__" />
  263. <View className='t'>室号</View>
  264. </View>
  265. )
  266. }
  267. renderHouseType () {
  268. const { hType1, hType2, hType3 } = this.state
  269. return (
  270. <View className="scoped-addr-box">
  271. <Input type="number" value={hType1} onInput={this.changeAddrInput.bind(this, 'hType1')} className="i" placeholder="__" />
  272. <View className='t'>室</View>
  273. <Input type="number" value={hType2} onInput={this.changeAddrInput.bind(this, 'hType2')} className="i" placeholder="__" />
  274. <View className='t'>厅</View>
  275. <Input type="number" value={hType3} onInput={this.changeAddrInput.bind(this, 'hType3')} className="i" placeholder="__" />
  276. <View className='t'>卫</View>
  277. </View>
  278. )
  279. }
  280. changeAddrInput (str, e) {
  281. this.setState({
  282. [str]: e.detail.value
  283. })
  284. }
  285. renderStairsRate () {
  286. const { sRate1, sRate2 } = this.state
  287. return (
  288. <View className='scoped-floor-height-box'>
  289. <Input type="number" value={sRate1} onInput={this.changeAddrInput.bind(this, 'sRate1')} className="i" placeholder="__" />
  290. <View className='t'>梯</View>
  291. <Input type="number" value={sRate2} onInput={this.changeAddrInput.bind(this, 'sRate2')} className="i" placeholder="__" />
  292. <View className='t'>户</View>
  293. </View>
  294. )
  295. }
  296. renderFloorHeight () {
  297. const { formObj } = this.state
  298. return (
  299. <View className='scoped-floor-height-box'>
  300. <Input type="number" value={formObj.floor} onInput={this.changeFormObjInput.bind(this, 'floor')} className="i" placeholder="所在楼层" />
  301. <View className='t'>/</View>
  302. <Input type="number" value={formObj.storeys} onInput={this.changeFormObjInput.bind(this, 'storeys')} className="i" placeholder="总楼层" />
  303. <View className='t'>层</View>
  304. </View>
  305. )
  306. }
  307. changeFormObjInput (str, e) {
  308. let { formObj } = this.state
  309. formObj[str] = e.detail.value
  310. this.setState({
  311. formObj
  312. })
  313. }
  314. renderCutImg () {
  315. const { cutImgTempUrl } = this.state
  316. const { cutImgShow } = this.state
  317. return (
  318. <View className={cutImgShow ? 'scoped-ci-popup show' : 'scoped-ci-popup'}>
  319. <TaroCropper
  320. src={cutImgTempUrl}
  321. cropperWidth={375}
  322. cropperHeight={250}
  323. fullScreen
  324. onCut={this.cutHandle.bind(this)}
  325. />
  326. </View>
  327. )
  328. }
  329. cutHandle (filePath) {
  330. let { formObj } = this.state
  331. let token = Taro.getStorageSync('APP_token')
  332. const that = this
  333. Taro.uploadFile({
  334. url: `https://api.honglouplus.com/api/upload/cloudpir`,
  335. filePath,
  336. name: 'upload',
  337. formData: {
  338. 'token': token
  339. },
  340. success (res){
  341. const msg = res.data || ''
  342. const key = CJ.enc.Utf8.parse(HLKEY)
  343. const bytes = CJ.AES.decrypt(msg, key, {
  344. mode: CJ.mode.ECB,
  345. padding: CJ.pad.Pkcs7
  346. })
  347. const originalText = bytes.toString(CJ.enc.Utf8)
  348. const cData = JSON.parse(originalText)
  349. formObj.pri_image = cData.data.url || ''
  350. that.setState({
  351. cutImgShow: false,
  352. formObj,
  353. })
  354. }
  355. })
  356. }
  357. openCutImg () {
  358. Taro.chooseImage({
  359. count: 1,
  360. sizeType: ['compressed'],
  361. sourceType: ['album', 'camera'],
  362. }).then(res => {
  363. this.setState({
  364. cutImgTempUrl: res.tempFilePaths[0],
  365. cutImgShow: true,
  366. })
  367. })
  368. }
  369. render () {
  370. const { formObj, imgArr } = this.state
  371. const dictData = Taro.getStorageSync('dictData')
  372. const roomDecMoreOptions = {arr: dictData.room_dec}
  373. const houseRoomYearMoreOptions = {arr: dictData.house_room_year}
  374. const yesnoMoreOptions = {arr: [...dictData.sys_yesno]}
  375. const hideStatusoMoreOptions = {arr: [...dictData.hide_status]}
  376. const roomPositionMoreOptions = {arr: [...dictData.room_position]}
  377. const addIcon = require('@img/icon_upload_img.png')
  378. const closeIcon = require('@img/icon_g_close.png')
  379. const imgItems = imgArr.map((src, index) => {
  380. return (
  381. <View className="si-op" key={index}>
  382. <Image src={src + '_plus'} className="img" onClick={this.previewImageHandle.bind(this, src + '_plus')} />
  383. <Image src={closeIcon} className="i" onClick={this.delImg.bind(this, index)}/>
  384. </View>
  385. )
  386. })
  387. let moreEstateOptions = {
  388. api: 'house.admestatelist',
  389. opKey: 'estate_name',
  390. opVal: 'id',
  391. skey: 'estate_name',
  392. }
  393. return (
  394. <View className="l-box">
  395. {/* {this.renderCutImg()} */}
  396. {
  397. formObj.estate_name
  398. ?
  399. <View className="l-floor-pos2">
  400. <Navigator url={`/pagesHouse/indexDtl?id=${formObj.estate_id}`} className='scoped-estate-name'>{formObj.estate_name}{'>'}</Navigator>
  401. <LFormGroup
  402. val={formObj.estate_id}
  403. valStr="estate_id"
  404. keyStr="当前楼盘"
  405. />
  406. </View>
  407. :
  408. <LFormGroup
  409. val={formObj.estate_id}
  410. valStr="estate_id"
  411. keyStr="选楼盘(必填)"
  412. keyStr2="请选择"
  413. typeStr="radio"
  414. moreOptions={moreEstateOptions}
  415. bc={this.baseFormChange.bind(this)}
  416. />
  417. }
  418. {/* <View className="l-floor-pos2">
  419. {
  420. formObj.estate_name
  421. ?
  422. <View className='scoped-estate-name'>{formObj.estate_name}[{formObj.estate_id}]</View>
  423. : ''
  424. }
  425. <LFormGroup
  426. val={formObj.estate_id}
  427. valStr="estate_id"
  428. keyStr="选楼盘(必填)"
  429. keyStr2="请选择"
  430. typeStr="radio"
  431. moreOptions={moreEstateOptions}
  432. bc={this.baseFormChange.bind(this)}
  433. />
  434. </View> */}
  435. <View className="l-floor-pos2">
  436. <LFormGroup
  437. val={formObj.title}
  438. valStr="title"
  439. keyStr="标题(必填)"
  440. keyStr2="请总结概括该房源特色"
  441. bc={this.baseFormChange.bind(this)}
  442. />
  443. </View>
  444. <View className="l-floor-pos2">
  445. <LFormGroup
  446. val={formObj.house_no}
  447. valStr="house_no"
  448. keyStr="地址(必填)"
  449. />
  450. {this.renderAddr()}
  451. </View>
  452. <View className="l-floor-pos2">
  453. <LFormGroup
  454. val={formObj.house_type}
  455. valStr="house_type"
  456. keyStr="户型"
  457. />
  458. {this.renderHouseType()}
  459. </View>
  460. <View className="l-floor-pos2">
  461. <LFormGroup
  462. val={formObj.floor}
  463. valStr="floor"
  464. keyStr="楼层"
  465. />
  466. {this.renderFloorHeight()}
  467. </View>
  468. <View className="l-floor-pos2">
  469. <LFormGroup
  470. val={formObj.stairs_rate}
  471. valStr="stairs_rate"
  472. keyStr="梯户比"
  473. />
  474. {this.renderStairsRate()}
  475. </View>
  476. <View className="l-floor-pos2">
  477. <LFormGroup
  478. val={formObj.area}
  479. valStr="area"
  480. keyStr="房屋面积"
  481. keyStr2="请输入"
  482. typeStr="inputFont"
  483. inputFont="㎡"
  484. bc={this.baseFormChange.bind(this)}
  485. />
  486. </View>
  487. <View className="l-floor-pos2">
  488. <LFormGroup
  489. val={formObj.price}
  490. valStr="price"
  491. keyStr="房屋总价"
  492. keyStr2="请输入"
  493. typeStr="inputFont"
  494. inputFont="万"
  495. bc={this.baseFormChange.bind(this)}
  496. />
  497. </View>
  498. <View className="l-floor-pos2">
  499. <LFormGroup
  500. val={formObj.floor_price}
  501. valStr="floor_price"
  502. keyStr="实际底价"
  503. keyStr2="请输入"
  504. typeStr="inputFont"
  505. inputFont="万"
  506. bc={this.baseFormChange.bind(this)}
  507. />
  508. </View>
  509. <View className="l-floor-pos2">
  510. <LFormGroup
  511. val={formObj.owner}
  512. valStr="owner"
  513. keyStr="业主姓名"
  514. keyStr2="请输入"
  515. bc={this.baseFormChange.bind(this)}
  516. />
  517. </View>
  518. <View className="l-floor-pos2">
  519. <LFormGroup
  520. val={formObj.owner_phone}
  521. valStr="owner_phone"
  522. keyStr="业主电话"
  523. keyStr2="请输入"
  524. bc={this.baseFormChange.bind(this)}
  525. />
  526. </View>
  527. <View className="l-floor-pos2">
  528. <LFormGroup
  529. val={formObj.is_dec}
  530. valStr="is_dec"
  531. keyStr="装修情况"
  532. keyStr2="请选择"
  533. typeStr="select"
  534. moreOptions={roomDecMoreOptions}
  535. bc={this.baseFormChange.bind(this)}
  536. />
  537. </View>
  538. <View className="l-floor-pos2">
  539. <LFormGroup
  540. val={formObj.full_year}
  541. valStr="full_year"
  542. keyStr="满几年"
  543. keyStr2="请选择"
  544. typeStr="select"
  545. moreOptions={houseRoomYearMoreOptions}
  546. bc={this.baseFormChange.bind(this)}
  547. />
  548. </View>
  549. <View className="l-floor-pos2">
  550. <LFormGroup
  551. val={formObj.is_elevator}
  552. valStr="is_elevator"
  553. keyStr="有电梯"
  554. keyStr2="请选择"
  555. typeStr="select"
  556. moreOptions={yesnoMoreOptions}
  557. bc={this.baseFormChange.bind(this)}
  558. />
  559. </View>
  560. <View className="l-floor-pos2">
  561. <LFormGroup
  562. val={formObj.delivery_at}
  563. valStr="delivery_at"
  564. keyStr="交房时间"
  565. keyStr2="请选择"
  566. dateFields="month"
  567. typeStr="date"
  568. bc={this.baseFormChange.bind(this)}
  569. />
  570. </View>
  571. <View className="l-floor-pos2">
  572. <LFormGroup
  573. val={formObj.hide_status}
  574. valStr="hide_status"
  575. keyStr="显示隐藏"
  576. keyStr2="请选择"
  577. typeStr="select"
  578. moreOptions={hideStatusoMoreOptions}
  579. bc={this.baseFormChange.bind(this)}
  580. />
  581. </View>
  582. <View className="l-floor-pos2">
  583. <LFormGroup
  584. val={formObj.position}
  585. valStr="position"
  586. keyStr="户型方位"
  587. keyStr2="请选择"
  588. typeStr="select"
  589. moreOptions={roomPositionMoreOptions}
  590. bc={this.baseFormChange.bind(this)}
  591. />
  592. </View>
  593. <View className="l-floor-pos2">
  594. <LFormGroup
  595. val={formObj.custom_tag}
  596. valStr="custom_tag"
  597. keyStr="定义标签"
  598. keyStr2="请输入"
  599. bc={this.baseFormChange.bind(this)}
  600. />
  601. </View>
  602. <View className='scoped-has-right'>
  603. <View className="scoped-box">
  604. <View className="sb-title">封面主图片(必填)</View>
  605. <View className="scoped-img">
  606. {
  607. formObj.pri_image
  608. ?
  609. <View className="si-op" onClick={this.dealImgHandle.bind(this, 'pri_image')}>
  610. <Image src={formObj.pri_image + '_plus'} className="img"/>
  611. </View>
  612. :
  613. <View className="si-op" onClick={this.dealImgHandle.bind(this, 'pri_image')}>
  614. <Image src={addIcon} className="img"/>
  615. </View>
  616. }
  617. {/* {
  618. formObj.pri_image
  619. ?
  620. <View className="si-op" onClick={this.openCutImg.bind(this)}>
  621. <Image src={formObj.pri_image + '_plus'} className="img"/>
  622. </View>
  623. :
  624. <View className="si-op" onClick={this.openCutImg.bind(this)}>
  625. <Image src={addIcon} className="img"/>
  626. </View>
  627. } */}
  628. </View>
  629. </View>
  630. <View className="scoped-box shr-r">
  631. <View className="sb-title">户型图</View>
  632. <View className="scoped-img">
  633. {
  634. formObj.house_img
  635. ?
  636. <View className="si-op" onClick={this.dealImgHandle.bind(this, 'house_img', 'noSign')}>
  637. <Image src={formObj.house_img} className="img"/>
  638. </View>
  639. :
  640. <View className="si-op" onClick={this.dealImgHandle.bind(this, 'house_img', 'noSign')}>
  641. <Image src={addIcon} className="img"/>
  642. </View>
  643. }
  644. </View>
  645. </View>
  646. </View>
  647. <View className="scoped-box">
  648. <View className="sb-title">房源图片
  649. <View className="s">(最多9张)</View>
  650. </View>
  651. <View className="scoped-img">
  652. {imgItems}
  653. {
  654. imgArr.length < 9
  655. &&
  656. <View className="si-op" onClick={this.addImg.bind(this)}>
  657. <Image src={addIcon} className="img"/>
  658. </View>
  659. }
  660. </View>
  661. </View>
  662. <View className="scoped-box">
  663. <View className="sb-title">更多对外描述</View>
  664. <AtTextarea
  665. value={formObj.introduce}
  666. onChange={this.baseFormChange.bind(this, 'introduce')}
  667. maxLength={300}
  668. height={200}
  669. placeholder='更多需要补充的描述,对外公开(300字以内)'
  670. />
  671. </View>
  672. <View className="scoped-box">
  673. <View className="sb-title">内部备注</View>
  674. <AtTextarea
  675. value={formObj.remarked}
  676. onChange={this.baseFormChange.bind(this, 'remarked')}
  677. maxLength={300}
  678. height={200}
  679. placeholder='仅编辑查看,房源内部备注信息(300字以内)'
  680. />
  681. </View>
  682. <View className="l-floor-footer t2">
  683. <View className="lff-flex">
  684. <View className="lff-btn full" onClick={this.saveHandle.bind(this)}>提交</View>
  685. </View>
  686. </View>
  687. </View>
  688. )
  689. }
  690. }
  691. export default Index