index.vue 36 KB

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