addoredit.vue 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337
  1. <!--
  2. * @Author: wf
  3. * @Date: 2020-01-13 11:35:41
  4. * @LastEditors: wf
  5. * @LastEditTime: 2021-09-16 09:50:23
  6. * @Description: 安装管理---添加安装计划
  7. -->
  8. <template>
  9. <div class="device-info_install addinstall">
  10. <div class="device_content">
  11. <div class="left_content">
  12. <div class="form_head">
  13. <p>基本信息</p>
  14. </div>
  15. <div class="form_content">
  16. <el-scrollbar class="app-list-scroll" style="height:100%">
  17. <div class="form_content_disform">
  18. <zz-form :cols="detailCols" :data='formdata' :rules="formrules" labelWidth='98' ref='detailform'>
  19. <zz-select
  20. v-model="formdata.communityId"
  21. placeholder="请选择社区名称"
  22. :options="communityNameList"
  23. slot="communityNameList"
  24. />
  25. <zz-select
  26. v-model="formdata.buildingType"
  27. placeholder="请选择楼栋类型"
  28. :options="buildingTypeList"
  29. slot="buildingTypeList"
  30. />
  31. <el-option
  32. v-for="(item, index) in communityList"
  33. :key="index"
  34. :label="item.name"
  35. :value="item.id"
  36. ></el-option>
  37. </el-select>
  38. <div slot="phone">
  39. <el-input
  40. v-model="formdata.phone"
  41. maxlength="11"
  42. v-number-input
  43. ></el-input>
  44. </div>
  45. </zz-form>
  46. </div>
  47. </el-scrollbar>
  48. </div>
  49. </div>
  50. <div class="right_content">
  51. <div class="right_content_head">
  52. <span class="head_text">创建单元户</span>
  53. <span class='close' @click='$emit("close")'>
  54. <i class='el-icon-close'></i>
  55. </span>
  56. </div>
  57. <div class="right_content_info">
  58. <!-- <tabcontent :userinfo="userinfo" :params="params" :alias="alias"></tabcontent> -->
  59. <div class="head_fr">
  60. <div class="head_content head_add">
  61. <div class="checkbox_style">
  62. <el-checkbox @change="checkedUnit" v-model="formdata.checkedUnit"></el-checkbox>
  63. </div>
  64. <div class="form_content">
  65. <zz-form :cols="unitCols" labelposition="left" :rules="unitrules" :data='formdata' labelWidth='50' ref='unitform'>
  66. <template slot="floorRule" prop="floorRule" >
  67. <div class="row_class">
  68. <el-radio-group v-model="formdata.rules.floor.type" @change="radioChange('floor',$event)">
  69. <el-radio label="Number">按数字1-20生成</el-radio>
  70. <el-radio label="Letter">按字母A-Z生成</el-radio>
  71. </el-radio-group>
  72. <el-select class="w120 wfirst" v-model="formdata.rules.floor.start" placeholder="起始楼栋">
  73. <el-option
  74. v-for="item in floorOptions"
  75. :key="item.value"
  76. :label="item.label"
  77. :value="item.value">
  78. </el-option>
  79. </el-select>
  80. <el-select class="w120 wsecond" v-model="formdata.rules.floor.end" placeholder="楼栋数">
  81. <el-option
  82. v-for="item in floorOptions"
  83. :key="item.value"
  84. :label="item.label"
  85. :value="item.value">
  86. </el-option>
  87. </el-select>
  88. <div class="last_level">
  89. <label class="label_text">每栋层数</label>
  90. <el-select class="w120" v-model="formdata.floorlevelNum" placeholder="请选择楼栋层数">
  91. <el-option
  92. v-for="item in floorlevelOptions"
  93. :key="item.value"
  94. :label="item.label"
  95. :value="item.value">
  96. </el-option>
  97. </el-select>
  98. </div>
  99. </div>
  100. </template>
  101. <template slot="unitRule" prop="unitRule">
  102. <div class="row_class">
  103. <el-radio-group :disabled="!formdata.checkedUnit" v-model="formdata.rules.unit.type" @change="radioChange('unit',$event)">
  104. <el-radio label="Number">按数字1-20生成</el-radio>
  105. <el-radio label="Letter">按字母A-Z生成</el-radio>
  106. </el-radio-group>
  107. <el-select :disabled="!formdata.checkedUnit" class="w120 wfirst" v-model="formdata.rules.unit.start" prop="floorstart" placeholder="起始单元">
  108. <el-option
  109. v-for="item in unitOptions"
  110. :key="item.value"
  111. :label="item.label"
  112. :value="item.value">
  113. </el-option>
  114. </el-select>
  115. <el-select class="w120 wsecond" :disabled="!formdata.checkedUnit" v-model="formdata.rules.unit.end" placeholder="单元数">
  116. <el-option
  117. v-for="item in unitOptions"
  118. :key="item.value"
  119. :label="item.label"
  120. :value="item.value">
  121. </el-option>
  122. </el-select>
  123. <div class="last_level">
  124. <label class="label_text">每层户数</label>
  125. <el-select class="w120" v-model="formdata.householdNum" placeholder="请选择每层户数">
  126. <el-option
  127. v-for="item in unithouseOptions"
  128. :key="item.value"
  129. :label="item.label"
  130. :value="item.value">
  131. </el-option>
  132. </el-select>
  133. </div>
  134. </div>
  135. </template>
  136. </zz-form>
  137. </div>
  138. <div class="btn_unit">
  139. <!-- {{doorData.length ? '重新' : ''}} -->
  140. <el-button type="primary" class="el-mgRight-md" @click="createDoor">{{doorData.length ? '重新' : ''}}生成单元户</el-button>
  141. <el-button @click="clearDoor">清空单元户</el-button>
  142. </div>
  143. </div>
  144. <div class="title_class">
  145. <span class="title_txt">楼栋信息</span>
  146. <el-tooltip v-if="doorData && doorData.length>0" class="item text-wrapper" effect="light" placement="right">
  147. <div slot="content">双击可对楼栋、单元名称进行自定义修改<br/>单击选中楼栋、单元、单元户信息根据选中的楼栋、单元进行展示</div>
  148. <img src="@/assets/img/menuicon/icon_tishi_zhengchang.png" alt="">
  149. </el-tooltip>
  150. </div>
  151. </div>
  152. <div class="floorinfo">
  153. <div class="door-wrap door_install">
  154. <div class="top_content">
  155. <el-scrollbar class="app-list-scroll" style="height:100%">
  156. <div class="floor_unit" v-if="doorData && doorData.length>0">
  157. <div class="box clearfix" >
  158. <div class="label_left">楼栋</div>
  159. <div class="el-fl-left tags">
  160. <el-tag
  161. :key="index1"
  162. v-for="(build,index1) in doorData"
  163. closable
  164. :disable-transitions="false"
  165. data-code="build"
  166. @close="handleClose('build', index1, doorData)"
  167. @click="buildingIndex = index1; unitIndex = 0;"
  168. :class="{active: buildingIndex === index1}"
  169. >
  170. <span class="dbclick_txt" @dblclick="showInput">{{build.name}}</span>
  171. <el-input
  172. style="display:none"
  173. v-model='build.name'
  174. @keyup.enter.native="inputConfirm($event, doorData)"
  175. @blur="inputConfirm($event, doorData)"
  176. data-code="build"
  177. maxlength="20"
  178. ></el-input>
  179. </el-tag>
  180. <el-button class="el-icon-plus button-new-tag" size="small" @click="showInput"></el-button>
  181. <el-input
  182. class="input-new-tag"
  183. style="display:none"
  184. size="small"
  185. placeholder="请输入楼栋号"
  186. v-model="inputValue.build"
  187. @keyup.enter.native="handleInputConfirm($event, doorData)"
  188. @blur="handleInputConfirm($event, doorData)"
  189. data-code="build"
  190. maxlength="20"
  191. >
  192. </el-input>
  193. </div>
  194. </div>
  195. <div class="box clearfix" v-if="formdata.enableUnit&&doorData[buildingIndex] && doorData[buildingIndex].children && doorData[buildingIndex].children.length">
  196. <div class="label_left">单元</div>
  197. <div class="el-fl-left tags">
  198. <el-tag
  199. :key="index2"
  200. v-for="(unit, index2) in doorData[buildingIndex].children"
  201. closable
  202. :disable-transitions="false"
  203. data-code="unit"
  204. @close="handleClose('unit', index2, doorData[buildingIndex].children)"
  205. @click="unitIndex = index2"
  206. :class="{active: unitIndex === index2}"
  207. >
  208. <span @dblclick="showInput">{{unit.name}}</span>
  209. <el-input
  210. style="display:none"
  211. v-model='unit.name'
  212. @keyup.enter.native="inputConfirm($event, doorData[buildingIndex].children)"
  213. @blur="inputConfirm($event, doorData[buildingIndex].children)"
  214. data-code="unit"
  215. maxlength="20"
  216. ></el-input>
  217. </el-tag>
  218. <el-button class="el-icon-plus button-new-tag" size="small" @click="showInput"></el-button>
  219. <el-input
  220. class="input-new-tag"
  221. style="display:none"
  222. size="small"
  223. placeholder="请输入单元号"
  224. v-model="inputValue.unit"
  225. @keyup.enter.native="handleInputConfirm($event, doorData[buildingIndex].children)"
  226. @blur="handleInputConfirm($event, doorData[buildingIndex].children)"
  227. data-code="unit"
  228. maxlength="20"
  229. >
  230. </el-input>
  231. </div>
  232. </div>
  233. </div>
  234. <div v-else class="empty_floor">
  235. <p>暂无相关信息</p>
  236. </div>
  237. <div class="title_class border_hr">
  238. <span class="title_txt">单元户信息</span>
  239. <el-tooltip v-if="doorData[buildingIndex] && doorData[buildingIndex].children && doorData[buildingIndex].children.length" class="item" effect="light" placement="right" :content="unitMsg">
  240. <img src="@/assets/img/menuicon/icon_tishi_zhengchang.png" alt="">
  241. </el-tooltip>
  242. </div>
  243. <div class="unit" v-if="doorData[buildingIndex] && doorData[buildingIndex].children && doorData[buildingIndex].children.length">
  244. <div class="floor" v-if="doorData[buildingIndex].children[unitIndex] && doorData[buildingIndex].children[unitIndex].children && doorData[buildingIndex].children[unitIndex].children.length">
  245. <!-- <h2>单元户<span>鼠标双击修改名称; 修改楼层名称后,请自行修改单元户的名称</span></h2> -->
  246. <div
  247. class="box clearfix"
  248. :key="index3"
  249. v-for="(floor, index3) in doorData[buildingIndex].children[unitIndex].children"
  250. >
  251. <!-- <span class="el-fl-left label">楼层:</span> -->
  252. <div class="unit_left">
  253. <el-tag
  254. closable
  255. :disable-transitions="false"
  256. data-code="floor"
  257. @close="handleClose('floor', index3, doorData[buildingIndex].children[unitIndex].children)"
  258. >
  259. <span @dblclick="showInput">{{floor.name}}</span>
  260. <el-input
  261. style="display:none"
  262. v-model='floor.name'
  263. @keyup.enter.native="inputConfirm($event, doorData[buildingIndex].children[unitIndex].children)"
  264. @blur="inputConfirm($event, doorData[buildingIndex].children[unitIndex].children)"
  265. data-code="floor"
  266. maxlength="20"
  267. ></el-input>
  268. </el-tag>
  269. <span class="unit_text">层</span>
  270. </div>
  271. <span class="el-fl-left tags">
  272. <div class="door" v-if="floor.children && floor.children.length">
  273. <el-tag
  274. :key="index4"
  275. v-for="(door, index4) in floor.children"
  276. closable
  277. :disable-transitions="false"
  278. data-code="door"
  279. @close="handleClose('door', index4, floor.children)"
  280. >
  281. <span @dblclick="showInput">{{door.name}}</span>
  282. <el-input
  283. style="display:none"
  284. v-model='door.name'
  285. @keyup.enter.native="inputConfirm($event, floor.children)"
  286. @blur="inputConfirm($event, floor.children)"
  287. data-code="door"
  288. maxlength="20"
  289. ></el-input>
  290. </el-tag>
  291. <el-button class="el-icon-plus button-new-tag" size="small" @click="showInput"></el-button>
  292. <el-input
  293. class="input-new-tag"
  294. style="display:none"
  295. size="small"
  296. placeholder="请输入户号"
  297. v-model="inputValue.door"
  298. @keyup.enter.native="handleInputConfirm($event, floor.children)"
  299. @blur="handleInputConfirm($event, floor.children)"
  300. data-code="door"
  301. maxlength="20"
  302. >
  303. </el-input>
  304. </div>
  305. </span>
  306. </div>
  307. <div class="add-floor">
  308. <el-button class="el-icon-plus button-new-tag " size="small" @click="showInput"></el-button>
  309. <el-input
  310. class="input-new-tag"
  311. style="display:none"
  312. size="small"
  313. placeholder="请输入楼层号"
  314. v-model="inputValue.floor"
  315. @keyup.enter.native="handleInputConfirm($event, doorData[buildingIndex].children[unitIndex].children)"
  316. @blur="handleInputConfirm($event, doorData[buildingIndex].children[unitIndex].children)"
  317. data-code="floor"
  318. maxlength="20"
  319. >
  320. </el-input>
  321. </div>
  322. </div>
  323. </div>
  324. <div v-else class="unit_empty">
  325. <div class="center_text">
  326. <img src="@/assets/img/menuicon/img_wuxiaoxi@2x.png" alt=""/>
  327. <span>暂无相关信息</span>
  328. </div>
  329. </div>
  330. </el-scrollbar>
  331. </div>
  332. <div class="btns footer_btn">
  333. <el-button @click="resetForm">重置</el-button>
  334. <el-button type="primary" @click='submit'>确认</el-button>
  335. </div>
  336. </div>
  337. </div>
  338. </div>
  339. </div>
  340. </div>
  341. </div>
  342. </template>
  343. <script>
  344. import list from "@/utils/list";
  345. import mapgis from "@views/system/popups/mapmarkgis"
  346. import CoordConver from '@/utils/CoordConver.js';
  347. import {initDoor, calcDoor} from './basedata';
  348. const createContinueData=(type,num)=>{
  349. //type--类型,num生成的个数
  350. let objArr=[]
  351. if(type=='Number'){
  352. [...new Array(num).keys()].map((idx) => {
  353. let obj={label:Number(idx)+1, value:Number(idx)+1}
  354. objArr.push(obj);
  355. });
  356. }
  357. else{
  358. for (let i = 0; i < num; i++) {
  359. let letter=String.fromCharCode((65 + i));
  360. let obj={label:letter, value:letter}
  361. objArr.push(obj);
  362. }
  363. }
  364. // console.log(JSON.stringify(objArr));
  365. return objArr;
  366. }
  367. const txtI18n = {
  368. build: '楼栋',
  369. unit: '单元',
  370. floor: '楼层',
  371. door: '单元户',
  372. }
  373. export default {
  374. mixins: [list,CoordConver],
  375. props:['userinfo'],
  376. components: {
  377. mapgis
  378. },
  379. data() {
  380. const _self = this;
  381. return {
  382. addressparams:{},
  383. floorMsg:`双击可对楼栋、单元名称进行自定义修改\n单击选中楼栋、单元、单元户信息根据选中的楼栋、单元进行展示`,
  384. unitMsg:'双击可对楼层、单元户名称进行更改',
  385. // imgList: [
  386. // '@/assets/img/menuicon/btn_caijiqi.png'
  387. // ],
  388. defaultProps: {
  389. value: 'id', // 唯一标识
  390. label: 'orgName', // 标签显示
  391. children: 'orgs' // 子级
  392. },
  393. formdata:{
  394. communityName:'',
  395. },
  396. unitCols:[[
  397. { label: '楼栋', slot: 'floorRule',prop:'floorRule' },
  398. { label: '单元', slot: 'unitRule',prop:'unitRule' },
  399. ]],
  400. detailCols: [[
  401. {
  402. label: '所属社区',
  403. prop: 'communityNameList',
  404. slot: 'communityNameList',
  405. placeholder: '请选择公司',
  406. // input: 'true'
  407. },{
  408. label: '楼栋名称',
  409. prop: 'buildingName',
  410. input: 'true'
  411. },{
  412. label: '楼栋编号',
  413. prop: 'buildingNumber',
  414. input: 'true'
  415. },{
  416. label: "楼栋类型",
  417. prop: "buildingTypeList",
  418. slot: "buildingTypeList",
  419. },{
  420. label: '楼栋用途',
  421. prop: 'buildingPurpose',
  422. input: 'true'
  423. },{
  424. label: '建筑结构',
  425. prop: 'buildingStructure',
  426. slot: 'buildingStructure',
  427. placeholder: '请选择部门',
  428. },{
  429. label: '建成日期',
  430. prop: 'builtDate',
  431. // slot:'communityId',
  432. // placeholder: '请选择小区',
  433. date:"true",
  434. },{
  435. label: '验收日期',
  436. prop: 'acceptanceDate',
  437. date:"true",
  438. },{
  439. label: '建筑面积',
  440. prop: 'buildingArea',
  441. input: 'true'
  442. },{
  443. label: '使用面积',
  444. prop: 'useArea',
  445. input: 'true'
  446. },{
  447. label: '备注信息',
  448. prop: 'remarks',
  449. input: 'true'
  450. }]
  451. ],
  452. detail:{},
  453. getWkidVal:'',
  454. mapInputFilter: '',
  455. inputlongitude:'',
  456. inputlatitude:'',
  457. getCityName:'',
  458. amap: null,
  459. lnglat: [],
  460. // address: '',
  461. code: '',
  462. search: '',
  463. copyformdata:{},
  464. copyrules:{},
  465. formdata: {
  466. productId : "", //
  467. // communityNameList:'',
  468. deptOrgId: "",
  469. communityId: "",
  470. acceptanceDate:'',
  471. planName: "",
  472. unit: "", // 施工单位
  473. phone:"",
  474. // address: "",
  475. principal:'',
  476. checkedUnit:false,
  477. enableUnit: 1, //勾选了复选框
  478. floorlevelNum:'1',//每栋层数
  479. householdNum:'1',//每层户数
  480. buildingNumber:'1',//楼栋数
  481. unitNumber:'2',//单元数
  482. preInstallNumber:'',//总单元户数
  483. lat:'',
  484. lng:'',
  485. rules: {
  486. floor: {
  487. type: 'Number', // Number Letter
  488. start: '1', // 1 A //楼栋的起始楼栋
  489. end:'1'
  490. },
  491. unit: {
  492. type: 'Number', // Number letter
  493. start: '1', // 1 A单元的起始单元
  494. end:'1'
  495. }
  496. },
  497. },
  498. floorOptions:createContinueData('Number',20),
  499. floorlevelOptions:createContinueData('Number',50),
  500. unitOptions:createContinueData('Number',20),
  501. unithouseOptions:createContinueData('Number',10),
  502. buildingIndex: 0,
  503. unitIndex: 0,
  504. doorData: [],
  505. formrules:{
  506. // communityNameList:[
  507. // this.$valid.inputRequired('社区名称'),
  508. // this.$valid.pattern(/^[\u4e00-\u9fa5A-Za-z0-9_]{2,30}$/)
  509. // ],
  510. productId: this.$valid.init(["null"]),
  511. communityId: this.$valid.init(["null"]),
  512. // phone:this.$valid.init(['phone'])
  513. },
  514. unitrules:{
  515. },
  516. inputValue: {
  517. build: '',
  518. unit: '',
  519. floor: '',
  520. door: '',
  521. },
  522. communityNameList:[],
  523. buildingTypeList:[{
  524. label:'高层',
  525. id:1
  526. },{
  527. label:'底层',
  528. id:2
  529. }]
  530. };
  531. },
  532. computed: {
  533. organListCompany() {
  534. let list = this.$store.getters['fileDevice/getallcompanyList'];
  535. return list;
  536. },
  537. organListdepartment() {
  538. let list = this.$store.getters['fileDevice/getalldeptList'];
  539. return list||[];
  540. },
  541. // communityList(){
  542. // let list= this.$store.getters["fileDevice/getCommunityList"];
  543. // return list;
  544. // // return [{id: '', name: '全部'}].concat(list)
  545. // },
  546. // deviceModelList(){
  547. // let list= this.$store.getters["getdeviceModelList"];
  548. // // if(list.length>0){
  549. // // list.map(item=>{
  550. // // item.label=`${item.manufacturerName}/${item.productName}/${item.productModel}`;
  551. // // return item;
  552. // // })
  553. // // }
  554. // return list;
  555. // },
  556. collapse() {
  557. return this.$store.getters['getCollapse'];
  558. },
  559. },
  560. watch: {
  561. params() {
  562. this.initParams()
  563. }
  564. },
  565. methods: {
  566. radioChange(type,val){
  567. let length=val=='Number'?'20':'26';
  568. if(val=='Letter')
  569. {
  570. if(type=='floor') {
  571. this.floorOptions=createContinueData(val,length);
  572. this.formdata.rules.floor.type='Letter'
  573. this.formdata.rules.floor.start='A'
  574. this.formdata.rules.floor.end='A'
  575. }else{
  576. this.unitOptions=createContinueData(val,length);
  577. this.formdata.rules.unit.type='Letter'
  578. this.formdata.rules.unit.start='A'
  579. this.formdata.rules.unit.end='A'
  580. }
  581. } else {
  582. if(type=='floor'){
  583. this.formdata.rules.floor=this.copyrules.floor;
  584. this.floorOptions=createContinueData(val,length);
  585. }
  586. else{
  587. this.formdata.rules.unit=this.copyrules.unit;
  588. this.unitOptions=createContinueData(val,length);
  589. }
  590. }
  591. },
  592. //深拷贝
  593. deepClone(obj) {
  594. if (typeof obj !== 'object') return;
  595. let newObj = obj instanceof Array ? [] : {};
  596. for (let key in obj) {
  597. if (obj.hasOwnProperty(key)) {
  598. newObj[key] = typeof obj[key] === 'object' ? this.deepClone(obj[key]) : obj[key];
  599. }
  600. }
  601. return newObj;
  602. },
  603. resetForm(){
  604. this.formdata={};
  605. this.formdata=this.copyformdata;
  606. this.doorData=[]
  607. this.$refs.detailform.validateField('productId');
  608. this.$refs.detailform.validateField('communityId');
  609. },
  610. showInput(e) {
  611. e.target.nextElementSibling.style.display = 'inline-block';
  612. e.target.style.display = 'none';
  613. e.target.nextElementSibling.firstElementChild.focus();
  614. },
  615. inputConfirm(e, arr) {
  616. const {value, dataset} = e.target;
  617. const querySame = () => _.filter(arr, (v) => v.name == value)
  618. if(e.target.value.length == 0) {
  619. this.$message.error(`${txtI18n[dataset.code]}名称不能为空,请重新命名`);
  620. e.target.focus();
  621. return;
  622. } else if(querySame().length > 1) {
  623. this.$message.error(`${txtI18n[dataset.code]}名称重复,请修改`);
  624. e.target.focus();
  625. return
  626. }
  627. e.target.parentElement.style.display = 'none';
  628. e.target.parentElement.previousElementSibling.style.display = 'inline-block';
  629. },
  630. handleInputConfirm(e, arr) {
  631. const {value, dataset} = e.target;
  632. if (value && dataset) {
  633. const {code} = dataset;
  634. const querySame = () => _.isEmpty(_.filter(arr, (v) => v.name == value))
  635. const generate = {
  636. build: initDoor(this.formdata).generateUnit,
  637. unit: initDoor(this.formdata).generateFloor,
  638. floor: initDoor(this.formdata).generateDoor(value)
  639. }
  640. if(querySame()) {
  641. arr.push({
  642. name: value,
  643. code: 'build',
  644. children: code != 'door' ? generate[code] : undefined
  645. });
  646. this.inputValue[code] = '';
  647. } else {
  648. this.$message.error(`${txtI18n[code]}名称重复,请重新添加`);
  649. }
  650. }
  651. e.target.parentElement.style.display = 'none';
  652. e.target.parentElement.previousElementSibling.style.display = 'inline-block';
  653. e.target.value = '';
  654. },
  655. clearDoor() {
  656. if(!this.doorData.length)return;
  657. this.__confirm('是否确认清空单元户?', '清空单元户').then(v => {
  658. this.doorData = [];
  659. }).catch(() => {})
  660. },
  661. handleClose(code, index, arr) {
  662. this.__confirm(`是否删除该${txtI18n[code]}?`, `删除${txtI18n[code]}`).then(v => {
  663. switch(code) {
  664. case 'build':
  665. if(this.buildingIndex == index) {
  666. this.buildingIndex = 0;
  667. this.unitIndex = 0;
  668. }
  669. break;
  670. case 'unit':
  671. if(arr.length == 1) {
  672. this.$message.error('请直接删除该楼栋');
  673. return;
  674. }
  675. if(this.unitIndex == index) {
  676. this.unitIndex = 0;
  677. }
  678. break;
  679. case 'floor':
  680. if(arr.length == 1) {
  681. this.$message.error('请直接删除该单元');
  682. return;
  683. }
  684. break;
  685. case 'door':
  686. if(arr.length == 1) {
  687. this.$message.error('请直接删除该楼层');
  688. return;
  689. }
  690. break;
  691. }
  692. arr.splice(index, 1);
  693. }).catch(() => {})
  694. },
  695. checkedUnit(val){
  696. if(val) {
  697. this.formdata.enableUnit = 1;
  698. }else {
  699. this.formdata.unitNumber = 1;
  700. this.formdata.enableUnit = 0;
  701. }
  702. },
  703. createDoor() {
  704. new Promise(resolve => {
  705. this.$refs.unitform.validate(resolve)
  706. }).then(v => {
  707. if(this.formdata.checkedUnit) {
  708. this.formdata.enableUnit = 1;
  709. }else {
  710. this.formdata.unitNumber = 1;
  711. this.formdata.enableUnit = 0;
  712. }
  713. let isNumberFlag=this.formdata.rules.floor.type=='Number'?true:false;
  714. let isNumberUnitFlag=this.formdata.rules.unit.type=='Number'?true:false;
  715. let checkFloor=this.formdata.rules.floor.start<=this.formdata.rules.floor.end?true:false;
  716. let checkUnit=this.formdata.rules.unit.start<=this.formdata.rules.unit.end?true:false;
  717. if(checkFloor&&isNumberFlag)
  718. {
  719. this.formdata.buildingNumber=this.formdata.rules.floor.end-this.formdata.rules.floor.start+1;
  720. }
  721. else if(!isNumberFlag&&checkFloor){
  722. this.formdata.buildingNumber=this.formdata.rules.floor.end.charCodeAt()-this.formdata.rules.floor.start.charCodeAt()+1;
  723. }
  724. else{
  725. this.formdata.buildingNumber=1;
  726. this.$message.error('楼栋起始和结束设置出错');
  727. return;
  728. }
  729. if(this.formdata.checkedUnit)
  730. {
  731. if(checkUnit&&isNumberUnitFlag)
  732. {
  733. this.formdata.unitNumber=this.formdata.rules.unit.end-this.formdata.rules.unit.start+1;
  734. }
  735. else if(!isNumberUnitFlag&&checkUnit){
  736. this.formdata.unitNumber=this.formdata.rules.unit.end.charCodeAt()-this.formdata.rules.unit.start.charCodeAt()+1;
  737. }
  738. else{
  739. this.formdata.unitNumber=1;
  740. this.$message.error('单元起始和结束设置出错');
  741. return;
  742. }
  743. }
  744. this.doorData = initDoor(this.formdata).initDoor;
  745. })
  746. },
  747. handleInputConfirm(e, arr) {
  748. const {value, dataset} = e.target;
  749. if (value && dataset) {
  750. const {code} = dataset;
  751. const querySame = () => _.isEmpty(_.filter(arr, (v) => v.name == value))
  752. const generate = {
  753. build: initDoor(this.formdata).generateUnit,
  754. unit: initDoor(this.formdata).generateFloor,
  755. floor: initDoor(this.formdata).generateDoor(value)
  756. }
  757. if(querySame()) {
  758. arr.push({
  759. name: value,
  760. code: 'build',
  761. children: code != 'door' ? generate[code] : undefined
  762. });
  763. this.inputValue[code] = '';
  764. } else {
  765. this.$message.error(`${txtI18n[code]}名称重复,请重新添加`);
  766. }
  767. }
  768. e.target.parentElement.style.display = 'none';
  769. e.target.parentElement.previousElementSibling.style.display = 'inline-block';
  770. e.target.value = '';
  771. },
  772. // 获取子级传的值
  773. getCityNameval(val) {
  774. this.getCityName = val;
  775. },
  776. getwkid(val){
  777. this.getWkidVal = val;
  778. },
  779. querySearchAsyncBtn() {
  780. if(this.mapInputFilter){
  781. this.$refs.querySearchAsyncInput.handleFocus();
  782. }else{
  783. this.$http.post('/operation-manager/track/TaskTrack/convertXY', {
  784. "moveXY": this.getmoveXYVal,
  785. "wkid": this.getWkidVal,
  786. "xy": [`${this.inputlongitude},${this.inputlatitude}`]
  787. })
  788. .then(({ status, data, msg }) => {
  789. this.handleSelect({
  790. 'XY':data.convertXY[0].split(','),
  791. 'text':''
  792. })
  793. })
  794. }
  795. },
  796. querySearchAsync(queryString, cb) {
  797. if (!queryString) return;
  798. if(this.getWkidVal===2360){
  799. this.$refs.mapInit.fuzzyQueryLocation(queryString,(res)=>{
  800. let newarr = []
  801. res.map(item=>{
  802. var itemobj = {
  803. XY:[item.feature.geometry.x,item.feature.geometry.y],
  804. address:item.feature.attributes.TEXTSTRING,
  805. id:item.feature.attributes.OBJECTID,
  806. text:item.value
  807. }
  808. newarr.push(itemobj)
  809. })
  810. cb(newarr);
  811. });
  812. }else if(this.getWkidVal===3857){
  813. this.AmapSearch(
  814. 1,
  815. queryString,
  816. (result) => {
  817. cb(result.list);
  818. },
  819. false
  820. );
  821. }
  822. },
  823. /**
  824. * 调用高德地图执行模糊查询
  825. * @param {Number} page 当前页
  826. * @param {String} inputval 关键字
  827. * @param {Function} cb 回调函数
  828. * @param {Boolean} isMark 是否在地图上标记点
  829. */
  830. AmapSearch(page, inputval, cb, isMark) {
  831. var keywords = inputval;
  832. AMap.plugin('AMap.PlaceSearch', () => {
  833. var autoOptions = {
  834. city: this.getCityName,
  835. citylimit: true,
  836. pageIndex: page
  837. };
  838. var placeSearch = new AMap.PlaceSearch(autoOptions);
  839. placeSearch.search(keywords, (status, result) => {
  840. if (status != 'complete') {
  841. return;
  842. }
  843. var datas = result.poiList;
  844. let count = datas.count;
  845. let crupage = datas.pageIndex;
  846. let arr = datas.pois;
  847. var pointData = [];
  848. var returnObjectList = [];
  849. for (let i = 0; i < arr.length; i++) {
  850. const element = arr[i];
  851. var xy = [];
  852. var x = element.location.lng; //经度
  853. var y = element.location.lat; // 纬度
  854. x = this.handle_x(x);
  855. y = this.handle_y(y);
  856. xy.push(x);
  857. xy.push(y);
  858. var returnObject = new Object();
  859. returnObject.id = element.id;
  860. returnObject.text = element.name;
  861. returnObject.address = element.address;
  862. returnObject.XY = xy;
  863. var marksData = {
  864. json: xy
  865. };
  866. pointData = pointData.concat(marksData);
  867. returnObjectList.push(returnObject);
  868. }
  869. // var symbol = new PictureMarkSymbolArgs();
  870. // symbol.url = 'images/amap_l_gray.png';
  871. // symbol.height = 36;
  872. // symbol.width = 36;
  873. // symbol.yoffset = 15;
  874. // symbol.xoffset = 3;
  875. // if (isMark) {
  876. // createMarkLayer(pointData, 'vagueQueryLyr', symbol);
  877. // }
  878. var resDatasObj = {
  879. keywords: keywords,
  880. page: crupage,
  881. count: count,
  882. list: returnObjectList
  883. };
  884. cb(resDatasObj);
  885. });
  886. });
  887. },
  888. // GCJ-02 => 墨卡托
  889. //经度转墨卡托
  890. handle_x(x) {
  891. return (x / 180.0) * 20037508.34;
  892. },
  893. //纬度转墨卡托
  894. handle_y(y) {
  895. if (y > 85.05112) {
  896. y = 85.05112;
  897. }
  898. if (y < -85.05112) {
  899. y = -85.05112;
  900. }
  901. y = (Math.PI / 180.0) * y;
  902. var tmp = Math.PI / 4.0 + y / 2.0;
  903. return (20037508.34 * Math.log(Math.tan(tmp))) / Math.PI;
  904. },
  905. oninput(value,tip) {
  906. if(!value){return}
  907. if(tip==='x'){
  908. if(value>180||value<-180){
  909. this.$message.warning('请输入正确的经度')
  910. return value.substring(0,value.length-1);
  911. }
  912. }else{
  913. if(value>90||value<-90){
  914. this.$message.warning('请输入正确的纬度')
  915. return value.substring(0,value.length-1);
  916. }
  917. }
  918. let str = value;
  919. let len1 = str.substr(0, 1);
  920. let len2 = str.substr(1, 1);
  921. //如果第一位是0,第二位不是点,就用数字把点替换掉
  922. if (str.length > 1 && len1 == 0 && len2 != ".") {
  923. str = str.substr(1, 1);
  924. }
  925. //第一位不能是.
  926. if (len1 == ".") {
  927. str = "";
  928. }
  929. if (len1 == "+") {
  930. str = "";
  931. }
  932. if (len1 == "-") {
  933. str = "";
  934. }
  935. //限制只能输入一个小数点
  936. if (str.indexOf(".") != -1) {
  937. let str_ = str.substr(str.indexOf(".") + 1);
  938. if (str_.indexOf(".") != -1) {
  939. str = str.substr(0, str.indexOf(".") + str_.indexOf(".") + 1);
  940. }
  941. }
  942. //正则替换
  943. str = str.replace(/[^\d^\.]+/g, ""); // 保留数字和小数点
  944. str = str.replace(/^\D*([0-9]\d*\.?\d{0,11})?.*$/, "$1"); // 小数点后只能输 11 位
  945. return str;
  946. },
  947. submit() {
  948. new Promise(resolve => {
  949. this.$refs.detailform.validate(resolve)
  950. }).then(v => {
  951. const {buildNumber, unitNumber, floorNumber, doorNumber} = calcDoor(this.doorData,this.formdata.checkedUnit);
  952. const txt = `请检查信息是否填写完整(包含重复名称,名称为空现象)<br>确认提交单元户信息:<br>总楼栋数:${buildNumber}${this.formdata.enableUnit ? `<br>总单元数:${unitNumber}` : ''}<br>总楼层数:${floorNumber}<br>总单元户数:${doorNumber}`
  953. this.__confirm(txt, '提交').then(v => {
  954. this.formdata.installPlanDataList = this.doorData;
  955. // this.formdata.deviceTypeIds = Array.of(this.data.deviceTypeIds);
  956. // console.log('this.data.deviceTypeIds',typeof(this.data.deviceTypeIds.join('')))
  957. this.formdata.preInstallNumber = doorNumber;
  958. // this.data.deviceTypeIds
  959. const url = '/sc-community-web/assets/building/add';
  960. console.log(this.formdata,'++++++++++++++++++++++++++++++++c')
  961. this.$http.post(url, this.formdata).then(({ msg, status }) => {
  962. this.$message({
  963. type: status === 0 ? 'success' : 'error',
  964. message: msg
  965. })
  966. if(status === 0) {
  967. this.$emit('close')
  968. this.$emit('refresh')
  969. }
  970. }).catch(() => {})
  971. let buildingAddEditData=JSON.parse(sessionStorage.getItem('buildingAddEdit'));
  972. if(buildingAddEditData.todo=="edit"){
  973. }else{
  974. }
  975. }).catch(() => {})
  976. })
  977. },
  978. getDeviceStatusName(val) {
  979. switch (val) {
  980. case 1:
  981. return "正常";
  982. case 2:
  983. return "离线";
  984. case 3:
  985. return "报警";
  986. case 4:
  987. return "未启用";
  988. default:
  989. return val;
  990. }
  991. },
  992. querySearchAsync(addressName, callback) {
  993. if(addressName) {
  994. // let self = this;
  995. AMap.plugin('AMap.Autocomplete', function(){
  996. // 实例化Autocomplete
  997. var autoOptions = {
  998. //city 限定城市,默认全国
  999. city: '全国'
  1000. }
  1001. var autoComplete= new AMap.Autocomplete(autoOptions);
  1002. autoComplete.search(addressName, (status, result) => {
  1003. // 搜索成功时,result即是对应的匹配数据
  1004. if(status === 'complete' && result.info === 'OK') {
  1005. _.each(result.tips, (v) => {
  1006. if(!v.location) return;
  1007. v.value = v.district + v.name;
  1008. v.locationArray = [v.location.lng, v.location.lat];
  1009. })
  1010. const list = result.tips || [{}];
  1011. callback(list);
  1012. } else{
  1013. // self.$message.error('地名查询失败')
  1014. callback([])
  1015. }
  1016. })
  1017. })
  1018. } else {
  1019. callback([])
  1020. }
  1021. },
  1022. handleSelect(obj) {
  1023. this.amap.clearMap();
  1024. this.amap.setCenter(obj.locationArray)
  1025. this.lnglat = obj.locationArray;
  1026. this.address = obj.value;
  1027. this.code = obj.adcode;
  1028. new AMap.Marker({
  1029. map: this.amap,
  1030. position: obj.locationArray,
  1031. content: `
  1032. <div class='map_mark_icon'></div>
  1033. `,
  1034. offset: new AMap.Pixel(-(10 * this.scale), -(28 * this.scale))
  1035. })
  1036. let infoWindow = new AMap.InfoWindow({
  1037. isCustom: true, //使用自定义窗体
  1038. content: `
  1039. <div class='map_mark_content'>`+obj.district+obj.address+`</div>
  1040. `,
  1041. offset: new AMap.Pixel(0, -(36 * this.scale))
  1042. });
  1043. this.amap.clearInfoWindow()
  1044. infoWindow.open(this.amap, obj.locationArray);
  1045. this.amap.setFitView()
  1046. },
  1047. getDetailMap(){
  1048. let deviceid=this.params.data.id
  1049. this.$api.device.getDetail(deviceid).then(({ status, msg, data }) => {
  1050. if (status === 0) {
  1051. this.detail = data;
  1052. new Promise((resolve) => {
  1053. if (data.lng && data.lat) {
  1054. resolve([data.lng, data.lat]);
  1055. } else {
  1056. AMap.plugin("AMap.Geocoder", () => {
  1057. const geocoder = new AMap.Geocoder({
  1058. // city 指定进行编码查询的城市,支持传入城市名、adcode 和 citycode
  1059. city: "全国"
  1060. });
  1061. const address =
  1062. data.address ||
  1063. data.provinceName
  1064. .concat(data.cityName)
  1065. .concat(data.regionName)
  1066. .concat(data.communityName);
  1067. if (address) {
  1068. geocoder.getLocation(address, (s, result) => {
  1069. if (s === "complete" && result.info === "OK") {
  1070. const { lng, lat } = result.geocodes[0].location;
  1071. resolve([lng, lat]);
  1072. } else {
  1073. resolve();
  1074. }
  1075. });
  1076. }
  1077. });
  1078. }
  1079. }).then((pos) => {
  1080. if (pos&&pos.length) {
  1081. /* eslint-disable */
  1082. new AMap.Marker({
  1083. map: this.amap,
  1084. position: pos,
  1085. content: '<span class="map_mark_icon"></span>',
  1086. offset: new AMap.Pixel(-23, -23)
  1087. });
  1088. this.amap.setZoomAndCenter(15, pos);
  1089. } else {
  1090. this.amap.setZoomAndCenter(7, [116.379927, 39.971675]);
  1091. }
  1092. });
  1093. if (!data.lng || !data.lat) return;
  1094. } else {
  1095. this.$message.error(msg);
  1096. }
  1097. });
  1098. },
  1099. initMap(){
  1100. this.$nextTick(() => {
  1101. this.amap = new AMap.Map("detailMap", {
  1102. resizeEnable: true,
  1103. pitch: 0, // 地图俯仰角度,有效范围 0 度- 83 度
  1104. viewMode: "3D", // 地图模式
  1105. zooms: [4, 19]
  1106. });
  1107. });
  1108. },
  1109. gobackMap(){
  1110. this.islistShow = false;
  1111. this.$emit("showMap");
  1112. },
  1113. gobackLastLevel(){
  1114. this.islistShow = true;
  1115. // this.$emit("show-map");
  1116. },
  1117. // 搜索条件重置
  1118. resetSearch() {
  1119. this.productCategoryId = [0];
  1120. this.selectedTreeId = '';
  1121. this.expandedTreeKeys = [];
  1122. this.mixins_query.deviceStatus = 0;
  1123. this.mixins_query.productCategoryId = 0;
  1124. this.$refs.times.reset()
  1125. },
  1126. exportFile(type) {
  1127. if (type == 'template') {
  1128. this.$exportExcel('/device/device/manage/downTemplate');
  1129. } else {
  1130. this.$commonExportExcel('/device/device/manage/pageList', '/device/device/manage/getDeviceListExcel', this.mixins_query, '设备')
  1131. }
  1132. },
  1133. productChange(arr) {
  1134. const len = arr.length;
  1135. if (len === 1) {
  1136. this.mixins_query.productCategoryId = arr[0]
  1137. } else if (len === 2) {
  1138. this.mixins_query.productCategoryId = arr[0]
  1139. this.mixins_query.manufacturerId = arr[1]
  1140. } else {
  1141. this.mixins_query.productCategoryId = arr[0]
  1142. this.mixins_query.manufacturerId = arr[1]
  1143. this.mixins_query.productId = arr[2]
  1144. }
  1145. this.$refs.cascader && this.$refs.cascader.toggleDropDownVisible(false)
  1146. },
  1147. // 新增
  1148. add() {
  1149. // this.$store.dispatch("openModal", {
  1150. // url: "/devices/DeviceInfo/add",
  1151. // title: "设备注册",
  1152. // height: '680px'
  1153. // });
  1154. },
  1155. // 编辑
  1156. editRow(row) {
  1157. // this.$store.dispatch("openModal", {
  1158. // url: "/devices/DeviceInfo/add",
  1159. // title: `编辑-${row.deviceNo}`,
  1160. // height: '70%',
  1161. // params: { ...row }
  1162. // });
  1163. },
  1164. // 更新日期
  1165. updateDate(key, value) {
  1166. let val
  1167. if (key === 'startDate') {
  1168. val = value ? `${value}000000` : val
  1169. } else {
  1170. val = value ? `${value}235959` : val
  1171. }
  1172. this.mixins_query[key] = val;
  1173. },
  1174. // 跳转至详情
  1175. goDetail({ id, deviceNo, productId, productCategoryName = '' }) {
  1176. this.openNewPage("/devices/DeviceInfo/detail", `${deviceNo}`, { id, deviceNo, productId, productCategoryName, isCollapse: true, backTabId: this.params.id })
  1177. },
  1178. // 删除设备
  1179. deleteRow({ productCategoryName, deviceNo, productName, id }) {
  1180. this.$msgBox(`是否删除设备“${productCategoryName}/${productName}-${deviceNo}”`).then(() => {
  1181. const params = { id }
  1182. const $loading = this.$loading()
  1183. this.$http.delete('/device/device/manage/delete', { params }).then(({ status, msg }) => {
  1184. $loading.close()
  1185. this.$message({
  1186. type: status === 0 ? 'success' : 'error',
  1187. message: msg
  1188. })
  1189. if (status === 0) {
  1190. this.mixins_search('del')
  1191. }
  1192. })
  1193. }).catch(() => {})
  1194. },
  1195. beforeImport(file) {
  1196. const size = __CONFIG.excelLimitSize;
  1197. const isExcel =
  1198. file.name.lastIndexOf(".xls") !== -1 ||
  1199. file.name.lastIndexOf(".xlsx") !== -1 ||
  1200. file.name.lastIndexOf(".xlsm") !== -1;
  1201. const isLtSize = file.size / 1024 / 1024 < size;
  1202. if (!isExcel) {
  1203. this.$message.error("导入文件只支持.xls、.xlsx或.xlsm格式的Excel!");
  1204. } else if (!isLtSize) {
  1205. this.$message.error(`上传Excel表格大小不能超过${size}Mb!`);
  1206. }
  1207. document.querySelector('#inputHidden').focus()
  1208. return isExcel && isLtSize;
  1209. },
  1210. batchImport(content) {
  1211. const formData = new FormData();
  1212. formData.append("file", content.file);
  1213. const loading = this.$loading();
  1214. this.$http.post("/zoniot-rmcp-web/device/device/manage/importExcel", formData).then(({ status, msg }) => {
  1215. loading.close();
  1216. if (status === 0) {
  1217. this.$message.success("上传成功,请稍后在导入/导出历史查看上传结果");
  1218. setTimeout(() => {
  1219. this.$store.dispatch("getMessageCount");
  1220. this.callback && this.callback();
  1221. }, 1500);
  1222. } else {
  1223. this.$message.error(msg);
  1224. }
  1225. }).catch(() => {
  1226. loading.close();
  1227. });
  1228. },
  1229. areaChange(arr) {
  1230. const { dimensionCode = "", id = "", key = '' } = _.last(arr) || {};
  1231. const keys = [
  1232. "provinceId",
  1233. "cityId",
  1234. "regionId",
  1235. "communityId",
  1236. "buildingId"
  1237. ];
  1238. keys.forEach((key1) => {
  1239. if (key1.indexOf(dimensionCode) != -1) {
  1240. this.mixins_query[key1] = id;
  1241. } else {
  1242. this.mixins_query[key1] = "";
  1243. }
  1244. });
  1245. this.selectedTreeId = key;
  1246. this.expandedTreeKeys = _.reduce(
  1247. arr,
  1248. (result, v) => {
  1249. if (v.key != key) {
  1250. result.push(v.key);
  1251. }
  1252. return result;
  1253. },
  1254. []
  1255. );
  1256. this.mixins_search();
  1257. },
  1258. communityList(){
  1259. this.communityNameList=[];
  1260. let onOption='';
  1261. this.$http.get('/assets/community/list', {}).then((res) => {
  1262. res.data.map(res=>{
  1263. onOption={
  1264. label:res.communityName,
  1265. id:res.id
  1266. }
  1267. this.communityNameList.push(onOption)
  1268. })
  1269. });
  1270. },
  1271. //加载楼栋详情展示
  1272. buildingAddEdit(){
  1273. let buildingAddEditData=JSON.parse(sessionStorage.getItem('buildingAddEdit'));
  1274. if(buildingAddEditData.todo=="edit"){
  1275. this.$http.get('/sc-community-web/assets/building/house/find', {id:buildingAddEditData.id}).then((res) => {
  1276. console.log(res)
  1277. // formdata.communityName
  1278. if(res.status==0){
  1279. this.formdata.communityName=res.data.communityId;
  1280. this.formdata.buildingName=res.data.buildingName;
  1281. this.formdata.buildingType=res.data.buildingType;
  1282. this.formdata.buildingNumber=res.data.buildingNumber;
  1283. this.formdata.buildingPurpose=res.data.buildingPurpose;
  1284. this.formdata.buildingArea=res.data.buildingArea;
  1285. this.formdata.builtDate=res.data.builtDate;
  1286. this.formdata.useArea=res.data.useArea;
  1287. this.formdata.remarks=res.data.remarks;
  1288. }else{
  1289. this.formdata.communityName='';
  1290. this.formdata.buildingName='';
  1291. this.formdata.buildingType='';
  1292. this.formdata.buildingNumber='';
  1293. this.formdata.buildingPurpose='';
  1294. this.formdata.buildingArea='';
  1295. this.formdata.builtDate='';
  1296. this.formdata.useArea='';
  1297. this.formdata.remarks='';
  1298. }
  1299. });
  1300. }else{
  1301. }
  1302. }
  1303. },
  1304. mounted() {
  1305. // this.initMap();
  1306. },
  1307. created() {
  1308. this.buildingAddEdit();
  1309. this.communityList();
  1310. this.copyformdata=this.deepClone(this.formdata);
  1311. this.copyrules=JSON.parse(JSON.stringify(this.formdata.rules))
  1312. }
  1313. };
  1314. </script>
  1315. <style lang="scss">
  1316. @import './popup.scss';
  1317. .device-info.addinstall{
  1318. padding:0;
  1319. }
  1320. </style>