Detail.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. <template>
  2. <div class="xm-detal">
  3. <div class="left_tree">
  4. <ul class="tree_box">
  5. <li v-for="(item,index) in treeData" :key="index">
  6. <div class="tree_item">
  7. <span :class="{ tree_title: true, active: cActive === `${index}` }" @click="handleNodeClick(item, index)">{{ item['label'] }}</span>
  8. <span :class="{ icon: true, expand: cExpand === index }" @click="onExpandHandle(index)">
  9. <svg v-if="item['children'].length > 0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><path fill="currentColor" d="M384 192v640l384-320.064z"></path></svg>
  10. </span>
  11. </div>
  12. <template v-if="item['children'].length > 0">
  13. <ul class="child_tree_box" v-show="cExpand === index">
  14. <li v-for="(cItem,cIndex) in item['children']" :key="cIndex">
  15. <span :class="{ tree_title: true, active: cActive === `${index}${cIndex}` }" @click="handleNodeClick(cItem, index, cIndex)">{{ cItem['label'] }}</span>
  16. </li>
  17. </ul>
  18. </template>
  19. </li>
  20. </ul>
  21. </div>
  22. <div class="right_detail">
  23. <div class="tables detail_1" v-if="detailType === '1'">
  24. <table>
  25. <tr>
  26. <th>批次索引</th>
  27. <td colspan="3">
  28. <el-input
  29. v-model="detailData.pcbh"
  30. placeholder="请输入批次索引"
  31. clearable
  32. :disabled="!jbxxEdit"
  33. />
  34. </td>
  35. </tr>
  36. <tr>
  37. <th>批次名称</th>
  38. <td colspan="3">
  39. <el-input
  40. v-model="detailData.pch"
  41. placeholder="请输入批次名称"
  42. clearable
  43. :disabled="!jbxxEdit"
  44. />
  45. </td>
  46. </tr>
  47. <tr>
  48. <th>类型</th>
  49. <td colspan="3">
  50. <el-select v-model="detailData.lx" :disabled="!jbxxEdit" style="width: 100%;">
  51. <el-option value="单独选址" label="单独选址" />
  52. <el-option value="批次用地" label="批次用地" />
  53. </el-select>
  54. </td>
  55. </tr>
  56. <tr>
  57. <th>批准文号</th>
  58. <td colspan="3">
  59. <el-input
  60. v-model="detailData.pwh"
  61. placeholder="请输入批准文号"
  62. clearable
  63. :disabled="!jbxxEdit"
  64. />
  65. </td>
  66. </tr>
  67. <tr>
  68. <th>批准日期</th>
  69. <td colspan="3">
  70. <el-input
  71. v-model="detailData.pzrq"
  72. placeholder="请输入批准日期"
  73. clearable
  74. :disabled="!jbxxEdit"
  75. />
  76. </td>
  77. </tr>
  78. <tr>
  79. <th>批次总面积(公顷)</th>
  80. <td colspan="3">
  81. <el-input
  82. v-model="detailData.pzMj"
  83. placeholder="请输入批次总面积(公顷)"
  84. clearable
  85. :disabled="!jbxxEdit"
  86. />
  87. </td>
  88. </tr>
  89. <tr>
  90. <th>是否农民建房</th>
  91. <td colspan="3">
  92. <el-select v-model="detailData.nmjf" :disabled="!jbxxEdit">
  93. <el-option value="是" label="是" />
  94. <el-option value="否" label="否" />
  95. </el-select>
  96. </td>
  97. </tr>
  98. </table>
  99. <div class="btn-group">
  100. <el-button type="primary" @click="onSavePcHandle">保存</el-button>
  101. </div>
  102. </div>
  103. <div class="detail_2" v-else>
  104. <el-tabs type="border-card" v-model="currentTab" @tab-click="handleTabClick">
  105. <el-tab-pane label="项目信息" name="tab1">
  106. <div class="tables">
  107. <table>
  108. <tr>
  109. <th>批次索引</th>
  110. <td colspan="3">
  111. <el-input
  112. v-model="projectDetail.pcbh"
  113. placeholder="请输入批次索引"
  114. clearable
  115. disabled="true"
  116. />
  117. </td>
  118. </tr>
  119. <tr>
  120. <th>项目编号</th>
  121. <td colspan="3">
  122. <el-input
  123. v-model="projectDetail.dkBh"
  124. placeholder="请输入项目编号"
  125. clearable
  126. :disabled="!xmxxEdit"
  127. />
  128. </td>
  129. </tr>
  130. <tr>
  131. <th>项目名称</th>
  132. <td colspan="3">
  133. <el-input
  134. v-model="projectDetail.dkMc"
  135. placeholder="请输入项目名称"
  136. clearable
  137. :disabled="!xmxxEdit"
  138. />
  139. </td>
  140. </tr>
  141. <tr>
  142. <th>乡镇街道</th>
  143. <td colspan="3">
  144. <el-input
  145. v-model="projectDetail.xzz"
  146. placeholder="请输入乡镇街道"
  147. clearable
  148. :disabled="!xmxxEdit"
  149. />
  150. </td>
  151. </tr>
  152. <tr>
  153. <th>土地用途</th>
  154. <td colspan="3">
  155. <el-input
  156. v-model="projectDetail.dkYt"
  157. placeholder="请输入土地用途"
  158. clearable
  159. :disabled="!xmxxEdit"
  160. />
  161. </td>
  162. </tr>
  163. <tr>
  164. <th>土地坐落</th>
  165. <td colspan="3">
  166. <el-input
  167. v-model="projectDetail.tdZl"
  168. placeholder="请输入土地坐落"
  169. clearable
  170. :disabled="!xmxxEdit"
  171. />
  172. </td>
  173. </tr>
  174. <tr>
  175. <th>项目面积(公顷)</th>
  176. <td colspan="3">
  177. <el-input
  178. v-model="projectDetail.dkMj"
  179. placeholder="请输入项目面积(公顷)"
  180. clearable
  181. :disabled="!xmxxEdit"
  182. />
  183. </td>
  184. </tr>
  185. <tr>
  186. <th>用地主体</th>
  187. <td colspan="3">
  188. <el-input
  189. v-model="projectDetail.dkQs"
  190. placeholder="请输入用地主体"
  191. clearable
  192. :disabled="!xmxxEdit"
  193. />
  194. </td>
  195. </tr>
  196. <tr>
  197. <th>备注</th>
  198. <td colspan="3">
  199. <el-input
  200. v-model="projectDetail.bz"
  201. placeholder="请输入备注"
  202. clearable
  203. :disabled="!xmxxEdit"
  204. />
  205. </td>
  206. </tr>
  207. </table>
  208. <div class="btn-group">
  209. <el-button type="primary" @click="onSaveXmHandle">保存</el-button>
  210. </div>
  211. </div>
  212. </el-tab-pane>
  213. <el-tab-pane label="查看地图" name="tab2">
  214. <div class="map_box">
  215. <base-map ref="baseMap" v-if="detailType && currentTab === 'tab2'" :enableLocation="false" :overlayShow="true" @drawShapeJson="drawShapeJsonEvent" :visibleLayerIds="visibleLayerId"/>
  216. </div>
  217. </el-tab-pane>
  218. </el-tabs>
  219. </div>
  220. </div>
  221. </div>
  222. </template>
  223. <script>
  224. import BaseMap from "../../../components/common/BaseMap";
  225. export default {
  226. name: "Detail",
  227. components: { BaseMap },
  228. data() {
  229. return {
  230. user: JSON.parse(window.sessionStorage.getItem("yzt-user")),
  231. currentTab: 'tab1',
  232. visibleLayerId: ['YHYZT_NZYDK_NEW'],
  233. cExpand: 0,
  234. cActive: '0',
  235. detailType: '1', //1 农转用批次信息 2 农转用项目信息
  236. detailData: {
  237. pcbh: '',
  238. pch: '',
  239. lx: '',
  240. pwh: '',
  241. pzrqStart: '',
  242. pzrqEnd: '',
  243. pzMj: '',
  244. nmjf: '',
  245. },
  246. projectDetail: {
  247. pcbh: '',
  248. dkBh: '',
  249. dkMc: '',
  250. xzz: '',
  251. dkYt: '',
  252. tdZl: '',
  253. dkMj: '',
  254. dkQs: '',
  255. bz: '',
  256. objectid:null,
  257. },
  258. jbxxEdit: true,
  259. xmxxEdit: true,
  260. treeData: [{
  261. label: '基本信息',
  262. children: []
  263. }, {
  264. label: '项目信息',
  265. children: []
  266. }],
  267. defaultProps: {
  268. children: 'children',
  269. label: 'label'
  270. }
  271. };
  272. },
  273. props: {
  274. contentWidth: Number,
  275. contentHeight: Number
  276. },
  277. watch: {
  278. },
  279. methods: {
  280. initDetailData (row, isEditor = false) {
  281. this.cActive = '0'
  282. this.detailType = '1'
  283. this.currentTab = 'tab1'
  284. this.detailData = row
  285. this.jbxxEdit = this.xmxxEdit = isEditor
  286. this.getNzydkList(row['pch'])
  287. },
  288. onExpandHandle (index) {
  289. if (this.cExpand === index) {
  290. this.cExpand = -1
  291. return;
  292. }
  293. this.cExpand = index
  294. },
  295. handleNodeClick (data, index, cIndex = null) {
  296. if (cIndex !== null) {
  297. this.currentTab = 'tab1'
  298. this.cActive = `${index}${cIndex}`
  299. this.detailType = '2'
  300. this.projectDetail = this.treeData[index]['children'][cIndex]
  301. } else {
  302. this.cActive = `${index}`
  303. this.detailType = '1'
  304. }
  305. },
  306. getNzydkList (pch) {
  307. const params = {
  308. pch: pch
  309. }
  310. this.$ajax.get('/api/stnzy/getNzydk', params, this, true).then(res => {
  311. if (res) {
  312. this.treeData[1]['children'] = res.map((item) => {
  313. return {
  314. label: item['dkMc'],
  315. ...item
  316. }
  317. })
  318. }
  319. })
  320. },
  321. onSaveXmHandle () {
  322. const sendData = {
  323. ...this.projectDetail
  324. }
  325. delete sendData['shape']
  326. this.$ajax.postJson('/api/stnzy/update', sendData, this, true).then(res => {
  327. if (res.data) {
  328. this.$Message.success('更新成功!')
  329. this.$emit('init')
  330. }
  331. })
  332. },
  333. onSavePcHandle () {
  334. const sendData = {
  335. ...this.detailData
  336. }
  337. const formData = new FormData()
  338. const keys = Object.keys(sendData)
  339. keys.forEach((key) => {
  340. formData.append(key, sendData[key])
  341. })
  342. this.$ajax.post('/api/stnzy/updateByPcbh', formData, this, true).then(res => {
  343. if (res.data) {
  344. this.$Message.success('更新成功!')
  345. this.$emit('init')
  346. }
  347. })
  348. },
  349. handleTabClick(tab) {
  350. if (tab.name === 'tab2') {
  351. // 切换到地图tab时,调用地块定位,使用objectid
  352. if (this.projectDetail && this.projectDetail.objectid) {
  353. this.locationDk(null, { objectid: this.projectDetail.objectid });
  354. }
  355. }
  356. },
  357. locationDk(index, row) {
  358. if (row.objectid) {
  359. this.detailShow = false;
  360. let arr = [`'${row.objectid}'`];
  361. this.$nextTick(()=>{
  362. this.$refs.baseMap.locationGlobal(this.visibleLayerId[0],`objectid in (${arr.join()})`);
  363. },500);
  364. }
  365. },
  366. drawShapeJsonEvent(json){
  367. if(json){
  368. this.drawShapeJson = json;
  369. this.getBpxmList();
  370. this.$message.success("绘制结束");
  371. }
  372. },
  373. }
  374. };
  375. </script>
  376. <style scoped lang="scss">
  377. .xm-detal {
  378. width: 100%;
  379. display: flex;
  380. align-items: flex-start;
  381. >div {
  382. max-height: 580px;
  383. .btn-group {
  384. margin-top: 20px;
  385. text-align: right;
  386. }
  387. &.left_tree {
  388. width: 260px;
  389. >.tree_box {
  390. background: #f4f6f8;
  391. font-family: AlibabaPuHuiTiM;
  392. li {
  393. font-size: 15px;
  394. cursor: pointer;
  395. user-select: none;
  396. .tree_title {
  397. width: 100%;
  398. display: block;
  399. padding: 8px 15px;
  400. &:hover, &.active {
  401. background: #e5edfe;
  402. }
  403. }
  404. }
  405. >li {
  406. >.tree_item {
  407. font-weight: normal;
  408. color: #1f2f47;
  409. font-size: 16px;
  410. position: relative;
  411. >.icon {
  412. display: inline-block;
  413. width: 1rem;
  414. height: 1rem;
  415. position: absolute;
  416. top: 0px;
  417. bottom: 0px;
  418. right: 10px;
  419. margin: auto;
  420. >svg {
  421. width: 1rem;
  422. height: 1rem;
  423. }
  424. &.expand {
  425. transform: rotateZ(90deg);
  426. }
  427. }
  428. }
  429. >.child_tree_box {
  430. margin-left: 20px;
  431. max-height: 480px;
  432. overflow-y: auto;
  433. >li {
  434. >span {
  435. color: #606266;
  436. padding: 5px 15px;
  437. }
  438. }
  439. }
  440. }
  441. }
  442. }
  443. &.right_detail {
  444. flex: 1;
  445. margin-left: 20px;
  446. }
  447. }
  448. .map_box {
  449. height: 510px;
  450. }
  451. .tables {
  452. width: 100%;
  453. overflow-y: auto;
  454. table {
  455. width: 100%;
  456. border-collapse: collapse;
  457. tr,
  458. th,
  459. td {
  460. border: 1px solid #d6d6d6;
  461. height: 40px;
  462. font-size: 14px;
  463. color: #1f2f47;
  464. }
  465. th {
  466. width: 180px;
  467. background: #f4f6f8;
  468. font-family: AlibabaPuHuiTiM;
  469. font-weight: normal;
  470. }
  471. td {
  472. padding: 0px 5px;
  473. }
  474. }
  475. ::v-deep {
  476. .el-input__inner {
  477. //border:1px solid #fff;
  478. border-radius: 0px;
  479. border-color: transparent;
  480. }
  481. }
  482. }
  483. }
  484. </style>