index.vue 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001
  1. <template>
  2. <div class="parkFloor">
  3. <div class="custom-tree-container">
  4. <div class="block-l">
  5. <el-card shadow="hover">
  6. <el-tag class="full space-vertical">当前所选:载体结构</el-tag>
  7. <!-- @node-click="handleDeptNodeClick" -->
  8. <el-tree
  9. ref="selectTree"
  10. :render-content="renderContent"
  11. :data="DeptTree"
  12. node-key="id"
  13. :indent="deptTreeIndent"
  14. accordion
  15. :expand-on-click-node="expandDeptClick"
  16. :default-expanded-keys="expandedDeptKey"
  17. node-click="(data, node, item) => nodeClick(data, node, item)"
  18. @node-click="getCheckedNodes"
  19. >
  20. <span slot-scope="{ node, data }" class="custom-tree-node">
  21. <span>
  22. <i v-if="data.level == 0" class="el-icon-s-home" />
  23. <i v-else-if="data.level == 1" class="el-icon-menu" />
  24. <i v-else class="el-icon-link" />
  25. {{ node.label }}
  26. </span>
  27. <span v-if="data.level == 0">
  28. <el-link class="space" type="primary" @click="() => unFoldAll()">展开</el-link>
  29. <el-link class="space" type="primary" @click="() => collapseAll()">折叠</el-link>
  30. </span>
  31. </span>
  32. </el-tree>
  33. </el-card>
  34. </div>
  35. <div class="block-r">
  36. <el-row class="handle-box" style="margin-bottom: 10px">
  37. <el-col :span="24">
  38. <el-input v-model="queryParam.groupName" size="small" placeholder="楼盘名称" class="ch-input-size" @keyup.enter.native="handleSearch()" />
  39. <el-button size="small" class="ch-button-export" style="float: right; margin-top: 4px; margin-right: 10px;" @click="batchFQImport()"><i class="el-icon-menu" />&nbsp;楼盘分期导入</el-button>
  40. <el-button size="small" class="ch-button-export" style="float: right; margin-top: 4px; margin-right: 10px;" @click="batchImport()"><i class="el-icon-menu" />&nbsp;楼盘导入</el-button>
  41. <el-button size="small" class="ch-button-add" style="float: right; margin-top: 4px; margin-right: 10px;" @click="handleAddFQ()"><i class="el-icon-menu" />&nbsp;新增分期</el-button>
  42. <el-button size="small" class="ch-button-add" style="float: right; margin-top: 4px; margin-right: 10px;" @click="handleAdd()"><i class="el-icon-menu" />&nbsp;新增楼盘</el-button>
  43. <el-button size="small" class="ch-button" style="float: right;margin-top: 4px" @click="handleSearch()"><i class="el-icon-menu" />&nbsp;查询</el-button>
  44. <el-button size="small" class="ch-button-warning" style="float: right;margin-top: 4px" @click="handleReset()"><i class="el-icon-menu" />&nbsp;重置</el-button>
  45. </el-col>
  46. </el-row>
  47. <el-row class="handle-box">
  48. <el-col :span="24">
  49. <el-table
  50. ref="singleTable"
  51. v-loading="loading"
  52. :data="AllData"
  53. @selection-change="handleSelectionChange"
  54. >
  55. <el-table-column type="selection" width="55" />
  56. <el-table-column label="编号" type="index" width="60" />
  57. <el-table-column label="楼盘/小区名称" prop="groupName" />
  58. <el-table-column label="性质" prop="natureStr" />
  59. <el-table-column label="预售许可证编号" prop="preSalesLicenseNumber" />
  60. <el-table-column label="分期名称" prop="name" />
  61. <el-table-column label="操作" header-align="center" width="160">
  62. <template scope="scope">
  63. <el-button size="mini" type="text" class="editButton" @click="handleEdit(scope.row)">编辑</el-button>
  64. <el-button size="mini" type="text" class="deleButton" @click="handleDelete(scope.row)">删除</el-button>
  65. </template>
  66. </el-table-column>
  67. </el-table>
  68. <div class="table-page">
  69. <el-pagination
  70. :current-page.sync="currentPage"
  71. :page-sizes="[10, 20, 50, 100]"
  72. :page-size="pageSize"
  73. background
  74. layout="total, sizes, prev, pager, next, jumper"
  75. :total="allpage"
  76. @size-change="handleSizeChange"
  77. @current-change="handleCurrentChange"
  78. />
  79. </div>
  80. </el-col>
  81. </el-row>
  82. </div>
  83. </div>
  84. <el-dialog
  85. :title="dialogTitle"
  86. :visible.sync="dialogVisible"
  87. width="950px"
  88. top="50px"
  89. class="statistic_base"
  90. :append-to-body="true"
  91. :modal-append-to-body="true"
  92. custom-class="tagdialog"
  93. @close="dialogClose"
  94. >
  95. <el-form ref="groupForm" :model="groupForm" style="width: 100%;padding: 5px" :rules="groupFormRules">
  96. <el-row>
  97. <el-col style="padding-bottom: 10px">
  98. <!-- <span class="card_title">基本信息</span>-->
  99. <el-card shadow="always" style="padding-top: 10px">
  100. <el-row>
  101. <el-col :span="4" class="col-txt"><span>*楼盘/小区名称</span></el-col>
  102. <el-col :span="8" class="col-input">
  103. <el-form-item prop="groupName">
  104. <el-input v-model="groupForm.groupName" />
  105. </el-form-item>
  106. </el-col>
  107. <el-col :span="4" class="col-txt"><span>*性质</span></el-col>
  108. <el-col :span="8" class="col-input">
  109. <el-form-item prop="nature">
  110. <el-select
  111. v-model="groupForm.nature"
  112. placeholder=""
  113. filterable
  114. clearable
  115. :disabled="isView"
  116. :popper-append-to-body="false"
  117. popper-class="statistic_base"
  118. >
  119. <el-option
  120. v-for="item in dc_data.GROUP_NATURE"
  121. :key="item.value"
  122. :popper-append-to-body="false"
  123. popper-class="statistic_base"
  124. :label="item.label"
  125. :value="item.value"
  126. />
  127. </el-select>
  128. </el-form-item>
  129. </el-col>
  130. </el-row>
  131. <el-row>
  132. <el-col :span="4" class="col-txt"><span>*预销售许可证编号:</span></el-col>
  133. <el-col :span="8" class="col-input">
  134. <el-form-item prop="preSalesLicenseNumber">
  135. <el-input v-model="groupForm.preSalesLicenseNumber" />
  136. </el-form-item>
  137. </el-col>
  138. <el-col :span="4" class="col-txt"><span>开发公司</span></el-col>
  139. <el-col :span="8" class="col-input">
  140. <el-form-item>
  141. <el-select
  142. v-model="groupForm.companyId"
  143. placeholder=""
  144. filterable
  145. clearable
  146. :disabled="isView"
  147. :popper-append-to-body="false"
  148. popper-class="statistic_base"
  149. >
  150. <el-option
  151. v-for="item in dc_data.COMPANY_NAME"
  152. :key="item.value"
  153. :popper-append-to-body="false"
  154. popper-class="statistic_base"
  155. :label="item.label"
  156. :value="item.value"
  157. />
  158. </el-select>
  159. </el-form-item>
  160. </el-col>
  161. </el-row>
  162. <el-row>
  163. <el-col :span="4" class="col-txt"><span>总建筑面积(㎡):</span></el-col>
  164. <el-col :span="8" class="col-input">
  165. <el-form-item prop="">
  166. <el-input v-model="groupForm.buildArea" />
  167. </el-form-item>
  168. </el-col>
  169. <el-col :span="4" class="col-txt"><span>总用地面积(㎡):</span></el-col>
  170. <el-col :span="8" class="col-input">
  171. <el-form-item prop="">
  172. <el-input v-model="groupForm.landArea" />
  173. </el-form-item>
  174. </el-col>
  175. </el-row>
  176. <el-row>
  177. <el-col :span="4" class="col-txt"><span>立项批文:</span></el-col>
  178. <el-col :span="8" class="col-input">
  179. <el-form-item prop="">
  180. <el-input v-model="groupForm.projectApprovalDocument" />
  181. </el-form-item>
  182. </el-col>
  183. <el-col :span="4" class="col-txt"><span>工程规划许可证:</span></el-col>
  184. <el-col :span="8" class="col-input">
  185. <el-form-item prop="">
  186. <el-input v-model="groupForm.engineeringPlanningPermit" />
  187. </el-form-item>
  188. </el-col>
  189. </el-row>
  190. <el-row>
  191. <el-col :span="4" class="col-txt"><span>施工许可证:</span></el-col>
  192. <el-col :span="8" class="col-input">
  193. <el-form-item prop="">
  194. <el-input v-model="groupForm.construction_permit" />
  195. </el-form-item>
  196. </el-col>
  197. <el-col :span="4" class="col-txt"><span>土地证号:</span></el-col>
  198. <el-col :span="8" class="col-input">
  199. <el-form-item prop="">
  200. <el-input v-model="groupForm.land_certificate_number" />
  201. </el-form-item>
  202. </el-col>
  203. </el-row>
  204. <el-row>
  205. <el-col :span="4" class="col-txt"><span>用地许可证号:</span></el-col>
  206. <el-col :span="8" class="col-input">
  207. <el-form-item prop="">
  208. <el-input v-model="groupForm.landUsePermitNumber" />
  209. </el-form-item>
  210. </el-col>
  211. <el-col :span="4" class="col-txt"><span>容积率%:</span></el-col>
  212. <el-col :span="8" class="col-input">
  213. <el-form-item prop="">
  214. <el-input v-model="groupForm.volumeRatio" />
  215. </el-form-item>
  216. </el-col>
  217. </el-row>
  218. <el-row>
  219. <el-col :span="4" class="col-txt"><span>绿化率%:</span></el-col>
  220. <el-col :span="8" class="col-input">
  221. <el-form-item prop="">
  222. <el-input v-model="groupForm.greenRatio" />
  223. </el-form-item>
  224. </el-col>
  225. <el-col :span="4" class="col-txt"><span>标准单价:</span></el-col>
  226. <el-col :span="8" class="col-input">
  227. <el-form-item prop="">
  228. <el-input v-model="groupForm.price" />
  229. </el-form-item>
  230. </el-col>
  231. </el-row>
  232. <el-row>
  233. <el-col :span="4" class="col-txt"><span>超标单价:</span></el-col>
  234. <el-col :span="8" class="col-input">
  235. <el-form-item prop="">
  236. <el-input v-model="groupForm.exceededPrice" />
  237. </el-form-item>
  238. </el-col>
  239. <el-col :span="4" class="col-txt"><span>楼盘面积测绘状态:</span></el-col>
  240. <el-col :span="8" class="col-input">
  241. <el-form-item prop="">
  242. <el-select
  243. v-model="groupForm.areaStatus"
  244. placeholder=""
  245. filterable
  246. clearable
  247. :popper-append-to-body="false"
  248. popper-class="statistic_base"
  249. >
  250. <el-option
  251. v-for="item in dc_data.MAPPING_STATUS"
  252. :key="item.id"
  253. :popper-append-to-body="false"
  254. popper-class="statistic_base"
  255. :label="item.label"
  256. :value="item.value"
  257. />
  258. </el-select>
  259. </el-form-item>
  260. </el-col>
  261. </el-row>
  262. <el-row>
  263. <el-col :span="4" class="col-txt"><span>楼盘销售状态:</span></el-col>
  264. <el-col :span="8" class="col-input">
  265. <el-form-item prop="">
  266. <el-select
  267. v-model="groupForm.saleStatus"
  268. placeholder=""
  269. filterable
  270. clearable
  271. :popper-append-to-body="false"
  272. popper-class="statistic_base"
  273. >
  274. <el-option
  275. v-for="item in dc_data.SALE_STATUS"
  276. :key="item.id"
  277. :popper-append-to-body="false"
  278. popper-class="statistic_base"
  279. :label="item.label"
  280. :value="item.value"
  281. />
  282. </el-select>
  283. </el-form-item>
  284. </el-col>
  285. <el-col :span="4" class="col-txt"><span>行政区划:</span></el-col>
  286. <el-col :span="8" class="col-input">
  287. <el-form-item prop="">
  288. <el-select
  289. v-model="groupForm.regionalismCode"
  290. placeholder=""
  291. filterable
  292. clearable
  293. :popper-append-to-body="false"
  294. popper-class="statistic_base"
  295. >
  296. <el-option
  297. v-for="item in dc_data.REGIONALISM_CODE"
  298. :key="item.id"
  299. :popper-append-to-body="false"
  300. popper-class="statistic_base"
  301. :label="item.label"
  302. :value="item.value"
  303. />
  304. </el-select>
  305. </el-form-item>
  306. </el-col>
  307. </el-row>
  308. <el-row>
  309. <el-col :span="4" class="col-txt"><span>详细地址</span></el-col>
  310. <el-col :span="20" class="col-input">
  311. <el-form-item prop="address">
  312. <el-input v-model="groupForm.address" type="textarea" :autosize="{ minRows: 2, maxRows: 100}" placeholder="请输入内容" />
  313. </el-form-item>
  314. </el-col>
  315. </el-row>
  316. <el-row>
  317. <el-col :span="4" class="col-txt"><span>备注</span></el-col>
  318. <el-col :span="20" class="col-input">
  319. <el-form-item prop="address">
  320. <el-input v-model="groupForm.introduction" type="textarea" :autosize="{ minRows: 2, maxRows: 100}" placeholder="请输入内容" />
  321. </el-form-item>
  322. </el-col>
  323. </el-row>
  324. </el-card>
  325. </el-col>
  326. </el-row>
  327. </el-form>
  328. <div slot="footer">
  329. <el-button @click="dialogVisible = false">关 闭</el-button>
  330. <el-button type="primary" @click="confirmSubmit()">保 存</el-button>
  331. </div>
  332. </el-dialog>
  333. <el-dialog
  334. :title="dialogTitle"
  335. :visible.sync="dialogFQVisible"
  336. width="1350px"
  337. top="50px"
  338. append-to-body
  339. class="statistic_base"
  340. :append-to-body="true"
  341. :modal-append-to-body="true"
  342. custom-class="tagdialog"
  343. >
  344. <el-form ref="commitForm" :model="formLP" style="width: 100%;padding: 5px" :rules="commitRules">
  345. <el-row>
  346. <el-col style="padding-bottom: 10px">
  347. <!-- <span class="card_title">基本信息</span>-->
  348. <el-card shadow="always" style="padding-top: 10px">
  349. <el-row>
  350. <el-col :span="4" class="col-txt"><span>楼盘/小区名称</span></el-col>
  351. <el-col :span="20" class="col-input">
  352. <el-form-item>
  353. <el-select
  354. v-model="formLP.groupId"
  355. placeholder=""
  356. filterable
  357. clearable
  358. :popper-append-to-body="false"
  359. popper-class="statistic_base"
  360. >
  361. <el-option
  362. v-for="item in groupList"
  363. :key="item.id"
  364. :popper-append-to-body="false"
  365. popper-class="statistic_base"
  366. :label="item.groupName"
  367. :value="item.id"
  368. />
  369. </el-select>
  370. </el-form-item>
  371. </el-col>
  372. </el-row>
  373. <el-row>
  374. <el-col :span="4" class="col-txt"><span>分期名称</span></el-col>
  375. <el-col :span="20" class="col-input">
  376. <el-form-item>
  377. <el-input v-model="formLP.name" />
  378. </el-form-item>
  379. </el-col>
  380. </el-row>
  381. <el-row>
  382. <el-col :span="4" class="col-txt"><span>房屋买卖单价(元/㎡)</span></el-col>
  383. <el-col :span="20" class="col-input">
  384. <el-form-item>
  385. <el-input v-model="formLP.unitPrice" />
  386. </el-form-item>
  387. </el-col>
  388. </el-row>
  389. <el-row>
  390. <el-col :span="4" class="col-txt"><span>物业费单价(元/㎡)</span></el-col>
  391. <el-col :span="20" class="col-input">
  392. <el-form-item>
  393. <el-input v-model="formLP.propertyUnitPrice" oninput="value=value.replace(/[^\d.]/g,'')" />
  394. </el-form-item>
  395. </el-col>
  396. </el-row>
  397. <el-row>
  398. <el-col :span="5" class="col-txt"><span>住宅专项维修资金(元/㎡)</span></el-col>
  399. <el-col :span="19" class="col-input">
  400. <el-form-item>
  401. <el-input v-model="formLP.maintenanceFunds" oninput="value=value.replace(/[^\d.]/g,'')" />
  402. </el-form-item>
  403. </el-col>
  404. </el-row>
  405. <el-row>
  406. <el-col :span="4" class="col-txt"><span>认购金(元)</span></el-col>
  407. <el-col :span="20" class="col-input">
  408. <el-form-item>
  409. <el-input v-model="formLP.subscriptionFunds" oninput="value=value.replace(/[^\d.]/g,'')" />
  410. </el-form-item>
  411. </el-col>
  412. </el-row>
  413. <el-row>
  414. <el-col :span="4" class="col-txt"><span>共持比例(%)</span></el-col>
  415. <el-col :span="20" class="col-input">
  416. <el-form-item>
  417. <el-input v-model="formLP.proportion" oninput="value=value.replace(/[^\d.]/g,'')" />
  418. </el-form-item>
  419. </el-col>
  420. </el-row>
  421. <!-- <el-row>-->
  422. <!-- <el-col :span="4" class="col-txt"><span>支付方式</span></el-col>-->
  423. <!-- <el-col :span="20" class="col-input">-->
  424. <!-- <el-form-item>-->
  425. <!-- <el-select-->
  426. <!-- v-model="formLP.paymentMethods"-->
  427. <!-- placeholder=""-->
  428. <!-- filterable-->
  429. <!-- clearable-->
  430. <!-- :popper-append-to-body="false"-->
  431. <!-- popper-class="statistic_base"-->
  432. <!-- >-->
  433. <!-- <el-option-->
  434. <!-- v-for="item in dc_data.PAYMENT_METHODS"-->
  435. <!-- :key="item.id"-->
  436. <!-- :label="item.label"-->
  437. <!-- :value="item.value"-->
  438. <!-- :popper-append-to-body="false"-->
  439. <!-- popper-class="statistic_base"-->
  440. <!-- />-->
  441. <!-- </el-select>-->
  442. <!-- </el-form-item>-->
  443. <!-- </el-col>-->
  444. <!-- </el-row>-->
  445. <el-row>
  446. <el-col :span="4" class="col-txt"><span>户型库</span></el-col>
  447. </el-row>
  448. <el-row>
  449. <!-- 特殊表单 -->
  450. <div v-for="(item, index) in formLP.dynamicItem" :key="index">
  451. <el-row style="margin-top: 10px">
  452. <el-col :span="2" class="col-txt"><span>户型</span></el-col>
  453. <el-col :span="4" class="col-input">
  454. <el-form-item :prop="'dynamicItem.' + index + '.name'">
  455. <el-input
  456. v-model="item.name"
  457. placeholder="请填写X室X厅"
  458. />
  459. </el-form-item>
  460. </el-col>
  461. <el-col :span="4" class="col-input">
  462. <el-form-item :prop="'dynamicItem.' + index + '.area'">
  463. <el-input
  464. v-model="item.buildArea"
  465. placeholder="请填写建筑面积"
  466. />
  467. </el-form-item>
  468. </el-col>
  469. <el-col :span="4" class="col-input">
  470. <el-form-item :prop="'dynamicItem.' + index + '.area'">
  471. <el-input
  472. v-model="item.useArea"
  473. placeholder="请填写使用面积"
  474. />
  475. </el-form-item>
  476. </el-col>
  477. <el-col :span="2" class="col-txt"><span>户型图</span></el-col>
  478. <el-col :span="6" class="col-input">
  479. <el-form-item :prop="'dynamicItem.' + index + '.fileList'">
  480. <el-upload
  481. class="upload-demo"
  482. action="/server/wx/fileController/upload"
  483. :http-request="(params)=>{uploadHouseTypeList(params,index)}"
  484. :before-remove="beforeRemove"
  485. multiple
  486. :file-list="item.fileList"
  487. >
  488. <el-button size="small" type="primary">点击上传</el-button>
  489. <div slot="file" slot-scope="{file}" class="file-row">
  490. <a :href="file.url">{{ file.name }}</a>
  491. <span class="el-upload-list__item-actions">
  492. <i class="el-icon-delete" @click="handlePictureRemove(file,item.fileList)" />
  493. </span>
  494. </div>
  495. </el-upload>
  496. </el-form-item>
  497. </el-col>
  498. <el-col :span="2" class="col-input">
  499. <el-button type="danger" size="mini" @click="deleteItem(item, index)">-</el-button>
  500. </el-col>
  501. </el-row>
  502. </div>
  503. </el-row>
  504. <el-row>
  505. <el-col :span="2" class="col-txt">
  506. <el-button size="small" type="text" @click="addItem">+继续添加</el-button>
  507. </el-col>
  508. </el-row>
  509. </el-card>
  510. </el-col>
  511. </el-row>
  512. </el-form>
  513. <div slot="footer">
  514. <el-button @click="cancelFQ">取 消</el-button>
  515. <el-button type="primary" @click="confirmFQSubmit()">确 定</el-button>
  516. </div>
  517. </el-dialog>
  518. <!-- 批量导入 -->
  519. <upload-cost
  520. v-if="importVisible"
  521. :dialog-visible="importVisible"
  522. :import-type="importType"
  523. :upload-title="uploadTitle"
  524. :import-title="importTitle"
  525. @cancelUpload="cancelImport"
  526. />
  527. </div>
  528. </template>
  529. <script>
  530. import Base from '@/views/base/base'
  531. import BaseData from '@/views/base/baseData'
  532. import BaseDept from '@/views/base/baseDept'
  533. import { upload } from '@/static/utils/channel'
  534. import uploadCost from '@/views/parkAssets/component/uploadCost.vue'
  535. // import textEdit from '../../textEdit/index'
  536. export default {
  537. name: 'User',
  538. components: { uploadCost },
  539. mixins: [Base, BaseData, BaseDept],
  540. data() {
  541. return {
  542. dc_key: ['GROUP_NATURE', 'MAPPING_STATUS', 'SALE_STATUS', 'REGIONALISM_CODE', 'PAYMENT_METHODS', 'COMPANY_NAME'],
  543. // 查询参数
  544. queryParam: {
  545. groupName: '',
  546. name: ''
  547. },
  548. formLP: this.getBaseForm(),
  549. groupForm: {},
  550. groupList: [],
  551. DeptTree: [],
  552. typeList: [
  553. ],
  554. // 字典项
  555. dc_gender: [],
  556. dc_map: {},
  557. AllData: [],
  558. loading: false,
  559. currentRow: null,
  560. dialogTitle: '新增用户',
  561. isAdd: true,
  562. LeaderData: [],
  563. groupFormRules: {
  564. groupName: [{ required: true, trigger: 'blur', message: '请输入楼盘/小区名称' }],
  565. nature: [{ required: true, trigger: 'change', message: '请选择性质' }],
  566. preSalesLicenseNumber: [{ required: true, trigger: 'blur', message: '请输入预销售许可证编号' }]
  567. },
  568. commitRules: {
  569. size: [{ required: true, trigger: 'blur', message: '请输入面积' }],
  570. address: [{ required: true, trigger: 'blur', message: '请输入地址' }]
  571. },
  572. companyOptions: [],
  573. dialogVisible: false,
  574. dialogFQVisible: false,
  575. isView: false,
  576. // 批量导入
  577. importVisible: false,
  578. importType: '',
  579. importTitle: '',
  580. uploadTitle: []
  581. }
  582. },
  583. mounted() {
  584. this.getTreeData()
  585. this.getGroupList()
  586. this.initDict(this.dc_key).then((res) => {
  587. this.getData()
  588. })
  589. },
  590. methods: {
  591. handleSearch: function() {
  592. this.getData()
  593. },
  594. handleReset: function() {
  595. this.queryParam = {}
  596. this.getData()
  597. },
  598. getGroupList: function() {
  599. const _this = this
  600. this.baseRequest('listAll', {}).then((res) => {
  601. if (res.data) {
  602. this.groupList = res.data
  603. }
  604. _this.loading = false
  605. }).catch(() => {
  606. })
  607. },
  608. getTreeData: function() {
  609. this.baseRequest('getTreeData3', {}).then((res) => {
  610. this.DeptTree = res.data.data
  611. }).catch(() => {
  612. })
  613. },
  614. getData: function() {
  615. const _this = this
  616. _this.loading = true
  617. _this.AllData = []
  618. _this.queryParam.pageNum = _this.currentPage
  619. _this.queryParam.pageSize = _this.pageSize
  620. _this.baseFQRequest('listByModel', _this.queryParam).then((res) => {
  621. if (res.data.rows) {
  622. res.data.rows.forEach(function(item) {
  623. const json = _this.getItemJson(item)
  624. _this.AllData.push(json)
  625. })
  626. _this.allpage = res.data.total
  627. }
  628. _this.loading = false
  629. }).catch(() => {
  630. })
  631. },
  632. getCheckedNodes(data, node, item) {
  633. const _this = this
  634. _this.queryParam.nodeId = node.data.id
  635. _this.queryParam.level = node.level
  636. this.getData()
  637. },
  638. handleAdd: function() {
  639. this.dialogVisible = true
  640. this.dialogTitle = '新增楼盘'
  641. },
  642. groupEdit: function(val) {
  643. this.baseRequest('/getById', { id: val.id }).then((res) => {
  644. console.log('获取详情——:', res)
  645. if (res.status == 200) {
  646. this.dialogTitle = '修改园区'
  647. this.groupForm = res.data
  648. if (res.data.areaStatus) {
  649. this.groupForm.areaStatus = res.data.areaStatus + ''
  650. }
  651. if (res.data.saleStatus) {
  652. this.groupForm.saleStatus = res.data.saleStatus + ''
  653. }
  654. this.dialogVisible = true
  655. }
  656. })
  657. },
  658. groupRemove: function(val) {
  659. console.log('删除阐述——:', val)
  660. this.$confirm('此操作将删除园区, 是否继续?', '提示', {
  661. confirmButtonText: '确定',
  662. cancelButtonText: '取消',
  663. type: 'warning'
  664. }).then(() => {
  665. this.baseRequest('delete', { id: val.data.id }).then((res) => {
  666. console.log('获取详情——:', res)
  667. if (res.data.code == 200) {
  668. this.getTreeData()
  669. this.$message({
  670. type: 'success',
  671. message: '删除成功!'
  672. })
  673. } else {
  674. this.$message({
  675. type: 'error',
  676. message: res.data.msg
  677. })
  678. }
  679. }).catch((err) => {
  680. this.$message({
  681. type: 'error',
  682. message: err
  683. })
  684. })
  685. }).catch(() => {
  686. this.$message({
  687. type: 'info',
  688. message: '已取消删除'
  689. })
  690. })
  691. },
  692. handleEdit: function(val) {
  693. this.getFQById(val)
  694. this.dialogFQVisible = true
  695. this.dialogTitle = '编辑楼盘'
  696. },
  697. handleAddFQ: function() {
  698. this.formLP = this.getBaseForm()
  699. this.dialogFQVisible = true
  700. this.dialogTitle = '新增分期'
  701. },
  702. confirmSubmit: function() {
  703. this.$refs.groupForm.validate(valid => {
  704. if (valid) {
  705. this.baseRequest('addModel', this.groupForm).then((res) => {
  706. if (res.data.code == 200) {
  707. this.dialogVisible = false
  708. this.groupForm = {}
  709. this.getData()
  710. this.getGroupList()
  711. this.getTreeData()
  712. this.$message({
  713. message: '提交成功',
  714. type: 'success'
  715. })
  716. }
  717. }).catch(() => {
  718. })
  719. } else {
  720. console.log('error submit!!')
  721. return false
  722. }
  723. })
  724. },
  725. cancelFQ() {
  726. this.dialogFQVisible = false
  727. this.getData()
  728. },
  729. confirmFQSubmit: function() {
  730. const _this = this
  731. const extraData = {
  732. houseTypeStr: JSON.stringify(_this.formLP.dynamicItem)
  733. }
  734. const postData = Object.assign({}, _this.formLP, extraData)
  735. let url
  736. if (_this.formLP.id) {
  737. url = 'edit'
  738. } else {
  739. url = 'add'
  740. }
  741. this.baseFQRequest(url, postData).then((res) => {
  742. if (res.data.code == 200) {
  743. this.dialogFQVisible = false
  744. this.getData()
  745. this.getTreeData()
  746. this.$message({
  747. message: '提交成功',
  748. type: 'success'
  749. })
  750. }
  751. }).catch(() => {
  752. })
  753. },
  754. handleSelectionChange(val) {
  755. this.selectId = ''
  756. val.forEach(element => {
  757. this.selectId += element.id + ','
  758. })
  759. this.selectId = this.selectId.substring(0, this.selectId.length - 1)
  760. },
  761. getItemJson: function(item) {
  762. item.natureStr = this.dc_map.GROUP_NATURE[item.nature]
  763. return item
  764. },
  765. getBaseForm: function() {
  766. const baseForm = {
  767. id: '',
  768. houseTypeStr: '',
  769. maintenanceFunds: '',
  770. name: '',
  771. paymentMethods: '',
  772. propertyUnitPrice: '',
  773. proportion: '',
  774. subscriptionFunds: '',
  775. unitPrice: '',
  776. dynamicItem: [
  777. {
  778. id: '',
  779. discId: '',
  780. fileList: [],
  781. name: '',
  782. buildArea: '',
  783. useArea: ''
  784. }
  785. ]
  786. }
  787. return baseForm
  788. },
  789. renderContent(h, { node, data, store }) {
  790. if (node.level != 1) {
  791. return (
  792. <span class='custom-tree-node'>
  793. <span>{node.label}</span>
  794. </span>)
  795. } else {
  796. return (
  797. <span class='custom-tree-node' style='width: 100%;'>
  798. <span>{node.label}</span>
  799. <span style='float: right;'>
  800. <el-button size='mini' type='text' on-click={ () => this.groupEdit(data) }>修改</el-button>
  801. <el-button size='mini' type='text' on-click={ () => this.groupRemove(node, data) } style='color:#EE3535'>删除</el-button>
  802. </span>
  803. </span>)
  804. }
  805. },
  806. test(val) {
  807. this.$set(this.groupForm, 'introduction', val)
  808. },
  809. dialogClose() {
  810. this.groupForm = {}
  811. },
  812. addItem(length) {
  813. this.formLP.dynamicItem.push({
  814. fileList: [],
  815. name: '',
  816. buildArea: '',
  817. useArea: ''
  818. })
  819. },
  820. // 删除方法
  821. deleteItem(item, index) {
  822. this.formLP.dynamicItem.splice(index, 1)
  823. },
  824. uploadHouseTypeList: function(param, index) {
  825. upload(param, true).then((res) => {
  826. this.formLP.dynamicItem[index].fileList.push(res)
  827. })
  828. },
  829. handlePictureRemove: function(file, fileList) {
  830. const index = fileList.indexOf(file)
  831. fileList.splice(index, 1)
  832. },
  833. // 获取分期详情
  834. getFQById(val) {
  835. const _this = this
  836. _this.baseFQRequest('getById', { id: val.id }).then((res) => {
  837. _this.formLP = res.data
  838. _this.formLP.paymentMethods = res.data.paymentMethods == null ? '' : res.data.paymentMethods + ''
  839. _this.$set(_this.formLP, 'dynamicItem', [])
  840. _this.baseHouseTypeRequest('listAll', { discId: val.id }).then((res) => {
  841. if (res.data) {
  842. res.data.forEach(item => {
  843. const data = {
  844. id: item.id,
  845. discId: item.discId,
  846. name: item.name,
  847. buildArea: item.buildArea,
  848. useArea: item.useArea,
  849. fileList: Object.values(JSON.parse(item.fileList))
  850. }
  851. _this.formLP.dynamicItem.push(data)
  852. })
  853. }
  854. })
  855. })
  856. },
  857. batchImport() {
  858. this.importVisible = true
  859. this.importType = 'groupInsert'
  860. this.importTitle = '小区批量导入'
  861. },
  862. batchFQImport() {
  863. this.importVisible = true
  864. this.importType = 'FQInsert'
  865. this.importTitle = '分期批量导入'
  866. },
  867. cancelImport(refresh) {
  868. this.importVisible = false
  869. this.importType = ''
  870. this.getTreeData()
  871. this.getData()
  872. },
  873. handleDelete(val) {
  874. this.$confirm('确认删除该数据,删除后将无法恢复,确认删除吗?', '提示', {
  875. confirmButtonText: '确定',
  876. cancelButtonText: '取消',
  877. type: 'warning'
  878. }).then(() => {
  879. this.baseFQRequest('delete', { id: val.id }).then(res => {
  880. if (res.data.code == 200) {
  881. this.getData()
  882. this.getTreeData()
  883. this.$message({
  884. type: 'success',
  885. message: '删除成功!'
  886. })
  887. } else {
  888. this.$message({
  889. type: 'error',
  890. message: res.data.msg
  891. })
  892. }
  893. }).catch((err) => {
  894. this.$message({
  895. type: 'error',
  896. message: err
  897. })
  898. })
  899. }).catch(() => {
  900. this.$message({
  901. type: 'info',
  902. message: '已取消删除'
  903. })
  904. })
  905. },
  906. // 请求封装,继承类中调用,必须存在
  907. baseRequest: function(opUrl, postData) {
  908. return this.$channel.baseRequest('ParkInfoController', opUrl, postData, '')
  909. },
  910. baseFQRequest: function(opUrl, postData) {
  911. return this.$channel.baseRequest('ParkFloorDiscController', opUrl, postData, '')
  912. },
  913. baseHouseTypeRequest: function(opUrl, postData) {
  914. return this.$channel.baseRequest('HouseTypeController', opUrl, postData, '')
  915. }
  916. }
  917. }
  918. </script>
  919. <style lang="scss">
  920. //.upload-demo{
  921. // display: flex;
  922. //
  923. //}
  924. //.file-row{
  925. // display: flex;
  926. // justify-content: space-between;
  927. //}
  928. .parkFloor{
  929. .custom-tree-node {
  930. display: flex;
  931. align-items: center;
  932. justify-content: space-between;
  933. font-size: 14px;
  934. padding-right: 8px;
  935. }
  936. .custom-tree-container{
  937. display: flex;
  938. }
  939. .custom-tree-container .block-l {
  940. /*flex-grow: 2 ;*/
  941. //float: left;
  942. width: 20%;
  943. padding: 0 8px 0 0;
  944. }
  945. .custom-tree-container .block-r {
  946. /*flex-grow: 10;*/
  947. //float: left;
  948. width: 80%;
  949. /*padding: 0 0 0 8px;*/
  950. }
  951. }
  952. </style>
  953. <style scoped>
  954. .ch-input .el-input__inner {
  955. border-color: #32323A;
  956. }
  957. .ch-input-size {
  958. width: 150px;
  959. }
  960. .ch-button {
  961. border-color: #32323A;
  962. background-color: #32323A;
  963. color: #fff;
  964. }
  965. .ch-button-warning {
  966. margin-left: 10px;
  967. border-color: #E6A23C;
  968. background-color: #E6A23C;
  969. color: #fff;
  970. }
  971. .ch-button-export {
  972. margin-left: 10px;
  973. border-color: #98CC1F;
  974. background-color: #98CC1F;
  975. color: #fff;
  976. }
  977. </style>