tree.vue 71 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467
  1. <template>
  2. <basic-container>
  3. <el-row :gutter="20">
  4. <el-col :span="10">
  5. <div class="box">
  6. <p>工程节点信息</p>
  7. <div class="flex">
  8. <el-input
  9. placeholder="输入关键字进行过滤"
  10. v-model="filterText"
  11. @input="filterChange"
  12. clearable
  13. ></el-input>
  14. <!-- <el-button type="info" class="mg-l-20">导入划分</el-button> -->
  15. </div>
  16. <el-scrollbar>
  17. <div v-loading="treeLoad">
  18. <el-tree
  19. v-show="!filterText"
  20. class="filter-tree"
  21. lazy
  22. :data="treeData"
  23. :load="loadNode"
  24. @node-click="getNodeDetail"
  25. :props="defaultProps"
  26. :expand-on-click-node="false"
  27. highlight-current
  28. node-key="id"
  29. ref="tree"
  30. >
  31. <span
  32. class="custom-tree-node"
  33. :class="data.moreShow?'show':''"
  34. slot-scope="{ node, data }"
  35. >
  36. <!--@mouseover="mouseover(data)" @mouseleave="mouseout(data)"-->
  37. <span class="pd-r-20">
  38. {{ node.label }}
  39. <el-dropdown
  40. @click="command=>{setLeftType(command,data)}"
  41. @visible-change="visiblechange($event,data)"
  42. >
  43. <el-button
  44. type="text"
  45. icon="el-icon-more"
  46. class="normal-black"
  47. >
  48. </el-button>
  49. <el-dropdown-menu slot="dropdown">
  50. <el-dropdown-item
  51. @click.native="setLeftType(1,data,node)"
  52. icon="el-icon-circle-plus-outline"
  53. v-if="data.deptCategory != 6 && data.isExistForm != 1"
  54. >新增子级</el-dropdown-item>
  55. <el-dropdown-item
  56. @click.native="setLeftType(2,data,node)"
  57. icon="el-icon-edit"
  58. >编辑节点</el-dropdown-item>
  59. <el-dropdown-item
  60. @click.native="setLeftType(3,data,node)"
  61. icon="el-icon-document-copy"
  62. >复制节点</el-dropdown-item>
  63. <el-dropdown-item
  64. @click.native="deleNode(data,node)"
  65. icon="el-icon-close"
  66. v-if="node.level !=1"
  67. >删除节点</el-dropdown-item>
  68. <el-dropdown-item
  69. @click.native="setLeftType(4,data,node)"
  70. icon="iconfont hcicon-danganziliao-biaogetianxie"
  71. class="font-s-12"
  72. >元素公式</el-dropdown-item>
  73. <el-dropdown-item
  74. @click.native="setLeftType(5,data,node)"
  75. icon="el-icon-coin"
  76. >元素设置</el-dropdown-item>
  77. <el-dropdown-item
  78. @click.native="nodeInfo(data,node)"
  79. icon="el-icon-help"
  80. >节点参数</el-dropdown-item>
  81. <el-dropdown-item
  82. @click.native="importTemplate(data,node)"
  83. v-if="node.level == 2"
  84. icon="el-icon-upload"
  85. >导入划分</el-dropdown-item>
  86. <el-dropdown-item
  87. v-if="data.parentId!=0"
  88. @click.native="sortpai(data,node)"
  89. icon="el-icon-sort"
  90. >调整排序</el-dropdown-item>
  91. </el-dropdown-menu>
  92. </el-dropdown>
  93. </span>
  94. </span>
  95. </el-tree>
  96. <el-tree
  97. v-show="filterText"
  98. class="filter-tree"
  99. :data="treeData"
  100. @node-click="getNodeDetail"
  101. :props="defaultProps"
  102. :expand-on-click-node="false"
  103. highlight-current
  104. node-key="id"
  105. :filter-node-method="filterNode"
  106. ref="treeall"
  107. >
  108. <span
  109. class="custom-tree-node"
  110. slot-scope="{ node, data }"
  111. :class="data.moreShow?'show':''"
  112. >
  113. <span class="pd-r-20">
  114. {{ node.label }}
  115. <el-dropdown
  116. @click="command=>{setLeftType(command,data)}"
  117. @visible-change="visiblechange($event,data)"
  118. >
  119. <el-button
  120. type="text"
  121. icon="el-icon-more"
  122. class="normal-black"
  123. >
  124. </el-button>
  125. <el-dropdown-menu slot="dropdown">
  126. <el-dropdown-item
  127. @click.native="setLeftType(1,data,node)"
  128. icon="el-icon-circle-plus-outline"
  129. v-if="data.deptCategory != 6 && data.isExistForm != 1"
  130. >新增子级</el-dropdown-item>
  131. <el-dropdown-item
  132. @click.native="setLeftType(2,data,node)"
  133. icon="el-icon-edit"
  134. >编辑节点</el-dropdown-item>
  135. <el-dropdown-item
  136. @click.native="setLeftType(3,data,node)"
  137. icon="el-icon-document-copy"
  138. >复制节点</el-dropdown-item>
  139. <el-dropdown-item
  140. @click.native="deleNode(data,node)"
  141. icon="el-icon-close"
  142. v-if="node.level !=1"
  143. >删除节点</el-dropdown-item>
  144. <el-dropdown-item
  145. @click.native="setLeftType(4,data,node)"
  146. icon="iconfont hcicon-danganziliao-biaogetianxie"
  147. class="font-s-12"
  148. >元素公式</el-dropdown-item>
  149. <el-dropdown-item
  150. @click.native="setLeftType(5,data,node)"
  151. icon="el-icon-coin"
  152. >元素设置</el-dropdown-item>
  153. <el-dropdown-item
  154. @click.native="nodeInfo(data)"
  155. icon="el-icon-help"
  156. >节点参数</el-dropdown-item>
  157. <el-dropdown-item
  158. @click.native="importTemplate(data,node)"
  159. v-if="node.level == 2"
  160. icon="el-icon-upload"
  161. >导入划分</el-dropdown-item>
  162. </el-dropdown-menu>
  163. </el-dropdown>
  164. </span>
  165. </span>
  166. </el-tree>
  167. </div>
  168. </el-scrollbar>
  169. </div>
  170. </el-col>
  171. <el-col :span="14">
  172. <template v-if="leftType==5">
  173. <p>节点信息</p>
  174. <el-table
  175. :data="tableData"
  176. border
  177. style="width: 100%"
  178. >
  179. <el-table-column
  180. align="center"
  181. prop="deptName"
  182. label="当前节点"
  183. ></el-table-column>
  184. <el-table-column
  185. align="center"
  186. prop="deptCategory"
  187. :formatter="formatCat"
  188. label="节点类型"
  189. width="180"
  190. ></el-table-column>
  191. <el-table-column
  192. align="center"
  193. prop="parentName"
  194. label="上级节点"
  195. ></el-table-column>
  196. </el-table>
  197. <p>
  198. <span>当前项目信息表</span>
  199. <!-- <el-button
  200. @click="showFormElement"
  201. type="text"
  202. icon="el-icon-circle-plus-outline"
  203. class="text-icon mg-l-10"
  204. ></el-button>
  205. <el-button
  206. type="text"
  207. icon="el-icon-document-copy"
  208. class="text-icon"
  209. ></el-button> -->
  210. <i
  211. class="el-icon-edit-outline marleft10"
  212. size="26"
  213. style="color:#409EFF;cursor: pointer;"
  214. @click="editEditElementForm()"
  215. ></i>
  216. </p>
  217. <el-table
  218. :data="formData"
  219. border
  220. style="width: 100%"
  221. >
  222. <el-table-column
  223. align="center"
  224. prop="tableName"
  225. label="表单名称"
  226. ></el-table-column>
  227. <el-table-column
  228. align="center"
  229. prop="elementTotal"
  230. label="字段总量"
  231. ></el-table-column>
  232. <el-table-column
  233. align="center"
  234. prop="tableType"
  235. :formatter="formatTableType"
  236. label="表单类型"
  237. ></el-table-column>
  238. <el-table-column
  239. align="center"
  240. prop="tableOwner"
  241. :formatter="formatOwner"
  242. label="所属方"
  243. ></el-table-column>
  244. <el-table-column label="操作">
  245. <template slot-scope="scope">
  246. <el-button
  247. size="mini"
  248. @click="handleEdit(scope.$index, scope.row)"
  249. >编辑</el-button>
  250. <el-button
  251. size="mini"
  252. type="danger"
  253. @click="handleDelete(scope.$index, scope.row)"
  254. >删除</el-button>
  255. </template>
  256. </el-table-column>
  257. </el-table>
  258. </template>
  259. <template v-if="leftType==4">
  260. <el-table
  261. :data="formData"
  262. border
  263. style="width: 100%"
  264. >
  265. <el-table-column
  266. align="center"
  267. prop="tableName"
  268. label="表单名称"
  269. ></el-table-column>
  270. <el-table-column
  271. align="center"
  272. prop="tableType"
  273. :formatter="formatTableType"
  274. label="表单类型"
  275. ></el-table-column>
  276. <el-table-column
  277. label="是否关联清表"
  278. width="130"
  279. prop="isLinkTable"
  280. align="center"
  281. >
  282. <template slot-scope="scope">
  283. <span v-if="scope.row.isLinkTable == 2">是</span>
  284. <span v-else>否</span>
  285. </template>
  286. </el-table-column>
  287. <el-table-column
  288. align="center"
  289. prop="tableOwner"
  290. :formatter="formatOwner"
  291. label="所属方"
  292. ></el-table-column>
  293. <el-table-column
  294. label="操作"
  295. width="350"
  296. align="center"
  297. >
  298. <template slot-scope="scope">
  299. <el-link
  300. type="primary"
  301. :disabled='scope.row.isLinkTable==-1'
  302. @click="rightClick(scope.row.pkeyId,scope.row.excelId,scope.row.id,scope.row.initTableName)"
  303. >编辑元素</el-link>
  304. <el-link
  305. class="mg-l-10"
  306. type="primary"
  307. @click="Associationlist(scope)"
  308. >关联清表</el-link>
  309. <el-link
  310. class="mg-l-10"
  311. type="primary"
  312. :disabled='scope.row.isLinkTable!=2'
  313. @click="adjustExcel(scope.row.pkeyId,scope.row.excelId)"
  314. >调整表单</el-link>
  315. <el-link
  316. class="mg-l-10"
  317. type="danger"
  318. @click="handleDelete(scope.$index, scope.row)"
  319. >删除表单</el-link>
  320. <!-- <el-button
  321. size="mini"
  322. @click="handleEditFormula(scope.$index, scope.row)">编辑元素公式</el-button> -->
  323. </template>
  324. </el-table-column>
  325. </el-table>
  326. </template>
  327. </el-col>
  328. </el-row>
  329. <!-- 编辑元素表单信息 -->
  330. <el-dialog
  331. title="编辑元素表单信息"
  332. :visible="editElementFormTag"
  333. width="60%"
  334. :modal-append-to-body="false"
  335. >
  336. <div>
  337. <el-table
  338. :data="formDatass"
  339. border
  340. style="width: 100%"
  341. >
  342. <el-table-column
  343. prop="tableName"
  344. label="表名"
  345. >
  346. <template slot-scope="scope">
  347. <el-input
  348. v-model="scope.row.tableName"
  349. placeholder="请输入表名称"
  350. ></el-input>
  351. </template>
  352. </el-table-column>
  353. <el-table-column
  354. prop="tableType"
  355. label="表类型"
  356. >
  357. <template slot-scope="scope">
  358. <el-select
  359. v-model="scope.row.tableType"
  360. placeholder="请选择"
  361. >
  362. <el-option
  363. v-for="(item,key) in tableTypelist"
  364. :key="key"
  365. :label="item.dictValue"
  366. :value="item.dictKey"
  367. >
  368. </el-option>
  369. </el-select>
  370. </template>
  371. </el-table-column>
  372. <el-table-column
  373. prop="tableOwner"
  374. label="所属方"
  375. >
  376. <template slot-scope="scope">
  377. <el-select
  378. v-model="scope.row.tableOwner"
  379. placeholder="请选择"
  380. >
  381. <el-option
  382. v-for="(item,key) in ownerTypeList"
  383. :key="key"
  384. :label="item.dictValue"
  385. :value="item.dictKey"
  386. >
  387. </el-option>
  388. </el-select>
  389. </template>
  390. </el-table-column>
  391. </el-table>
  392. </div>
  393. <span
  394. slot="footer"
  395. class="dialog-footer"
  396. >
  397. <el-button @click="editElementFormTag = false">取 消</el-button>
  398. <el-button
  399. type="primary"
  400. @click="editeditElementFormMF()"
  401. >确 定</el-button>
  402. </span>
  403. </el-dialog>
  404. <!-- 调整表单模板 -->
  405. <div
  406. v-if="excelHtml"
  407. class="excelHtml"
  408. >
  409. <dynamicExcel
  410. @remove="removeExcel"
  411. v-if="excelHtml"
  412. :pkeyId='GLExcelFrom.id'
  413. />
  414. </div>
  415. <!-- 私有wbs树排序弹框 -->
  416. <el-dialog
  417. title="调整排序"
  418. :visible="sortTag"
  419. width="50%"
  420. append-to-body
  421. >
  422. <ManualSorting
  423. v-if="sortTag2"
  424. @bianhua='bianhua()'
  425. :sort='sort'
  426. />
  427. <span
  428. slot="footer"
  429. class="dialog-footer"
  430. >
  431. <el-button @click="sortTag=false,sortTag2=false">取 消</el-button>
  432. <el-button
  433. type="primary"
  434. @click="editSort()"
  435. >确 定</el-button>
  436. </span>
  437. </el-dialog>
  438. <!-- 关联清表 -->
  439. <el-dialog
  440. title="关联清表"
  441. class="excelBox"
  442. :visible.sync="GLExcel"
  443. width="500px"
  444. modal-append-to-body
  445. append-to-body
  446. @close="GLExcelMD"
  447. >
  448. <div>
  449. <el-select
  450. style="width:400px;"
  451. v-model="GLExcelFrom.name"
  452. placeholder="请选择"
  453. @change="changetherr()"
  454. >
  455. <el-option
  456. v-for="(item,key) in GLExcelData"
  457. :key="key"
  458. :label="item.name"
  459. :value="item.id"
  460. >
  461. </el-option>
  462. </el-select>
  463. <el-scrollbar style="margin-top:20px;height:50vh;">
  464. <el-input
  465. style="width:400px;"
  466. v-model.trim="GLExcelFrom.search"
  467. placeholder="请输入需要选择的内容"
  468. ></el-input>
  469. <el-tree
  470. :filter-node-method="filterNode222"
  471. ref="tree"
  472. class="filter-tree"
  473. style="margin-top:10px;"
  474. :props="GLExcelProps"
  475. :data="exceldata"
  476. node-key="id"
  477. accordion
  478. show-checkbox
  479. @check="checkchange"
  480. >
  481. </el-tree>
  482. </el-scrollbar>
  483. </div>
  484. <span
  485. slot="footer"
  486. class="dialog-footer"
  487. style="display: flex;justify-content: center;align-items: center;"
  488. >
  489. <el-button @click="GLExcelMD()">取 消</el-button>
  490. <el-button
  491. style="margin-left:30px;"
  492. type="primary"
  493. @click="saveLinkTab()"
  494. >确 定</el-button>
  495. </span>
  496. </el-dialog>
  497. <el-dialog
  498. :title="dialogTitle"
  499. :visible.sync="dialogVisible"
  500. width="50%"
  501. append-to-body
  502. :close-on-click-modal="false"
  503. >
  504. <el-form
  505. ref="nodeDetail"
  506. :model="nodeDetail"
  507. :rules="rules"
  508. label-width="110px"
  509. >
  510. <el-form-item
  511. label="节点名称"
  512. prop="deptName"
  513. >
  514. <el-input v-model="nodeDetail.deptName"></el-input>
  515. </el-form-item>
  516. <el-form-item label="上级节点">
  517. <el-input
  518. v-model="nodeDetail.parentName"
  519. disabled
  520. ></el-input>
  521. </el-form-item>
  522. <el-form-item
  523. label="节点类型"
  524. prop="deptCategory"
  525. >
  526. <el-select
  527. v-model="nodeDetail.deptCategory"
  528. placeholder="请选择"
  529. class="w-100p"
  530. >
  531. <el-option
  532. v-for="item in deptCategorylist"
  533. :key="item.id"
  534. :label="item.dictValue"
  535. :value="item.dictKey"
  536. ></el-option>
  537. </el-select>
  538. </el-form-item>
  539. <el-form-item label="划分编号">
  540. <el-input v-model="nodeDetail.partitionCode"></el-input>
  541. </el-form-item>
  542. <el-form-item label="唯一编码">
  543. <el-input v-model="nodeDetail.uniqueCode"></el-input>
  544. </el-form-item>
  545. <template v-if="nodeDetail.deptCategory == 6">
  546. <el-form-item label="是否有混凝土">
  547. <el-radio-group
  548. v-model="nodeDetail.isConcrete"
  549. size="small"
  550. >
  551. <el-radio
  552. :label="0"
  553. border
  554. >无</el-radio>
  555. <el-radio
  556. :label="1"
  557. border
  558. >有</el-radio>
  559. </el-radio-group>
  560. </el-form-item>
  561. <el-form-item label="是否试验节点">
  562. <el-radio-group
  563. v-model="nodeDetail.isExpernode"
  564. size="small"
  565. >
  566. <el-radio
  567. :label="0"
  568. border
  569. >否</el-radio>
  570. <el-radio
  571. :label="1"
  572. border
  573. >是</el-radio>
  574. </el-radio-group>
  575. </el-form-item>
  576. </template>
  577. <el-form-item label="内业资料类型">
  578. <el-select
  579. v-model="nodeDetail.majorDataType"
  580. placeholder="请选择"
  581. class="w-100p"
  582. >
  583. <el-option
  584. v-for="item in majorDataTypeList"
  585. :key="item.id"
  586. :label="item.dictValue"
  587. :value="item.dictKey"
  588. ></el-option>
  589. </el-select>
  590. </el-form-item>
  591. </el-form>
  592. <span
  593. slot="footer"
  594. class="dialog-footer"
  595. >
  596. <el-button @click="dialogVisible = false">取 消</el-button>
  597. <el-button
  598. type="primary"
  599. @click="saveNode"
  600. :loading="saveNodeLoading"
  601. >确 定</el-button>
  602. </span>
  603. </el-dialog>
  604. <el-dialog
  605. title="创建新的元素表"
  606. :visible.sync="eleVisible"
  607. width="80%"
  608. append-to-body
  609. :close-on-click-modal="false"
  610. >
  611. <el-form
  612. ref="eleDialog"
  613. :model="eleForm"
  614. :rules="eleRules"
  615. label-width="110px"
  616. >
  617. <el-form-item
  618. label="表名"
  619. prop="deptName"
  620. >
  621. <el-input v-model="eleForm.deptName"></el-input>
  622. </el-form-item>
  623. <el-row>
  624. <el-col :span="12">
  625. <el-form-item
  626. label="表类型"
  627. prop="tableType"
  628. >
  629. <el-select
  630. v-model="eleForm.tableType"
  631. placeholder="请选择"
  632. class="w-100p"
  633. >
  634. <el-option
  635. v-for="item in tableTypelist"
  636. :key="item.id"
  637. :label="item.dictValue"
  638. :value="item.dictKey"
  639. ></el-option>
  640. </el-select>
  641. </el-form-item>
  642. </el-col>
  643. <el-col :span="12">
  644. <el-form-item
  645. label="所属方"
  646. prop="tableOwner"
  647. >
  648. <el-select
  649. v-model="eleForm.tableOwner"
  650. placeholder="请选择"
  651. class="w-100p"
  652. >
  653. <el-option
  654. v-for="item in ownerTypeList"
  655. :key="item.id"
  656. :label="item.dictValue"
  657. :value="item.dictKey"
  658. ></el-option>
  659. </el-select>
  660. </el-form-item>
  661. </el-col>
  662. </el-row>
  663. </el-form>
  664. <div class="flex jc-sb">
  665. <div></div>
  666. <div>
  667. <el-link
  668. type="primary"
  669. @click="importVisible = true"
  670. >快捷导入</el-link>
  671. <el-link
  672. type="primary"
  673. class="mg-l-20"
  674. @click="downloadTmp"
  675. >下载导入模版</el-link>
  676. </div>
  677. </div>
  678. <div class="border-grey">
  679. <p class="font-c-warning">编辑元素信息(请谨慎操作)</p>
  680. <el-table
  681. :data="eleForm.elementList"
  682. border
  683. style="width: 100%"
  684. height="400px"
  685. >
  686. <el-table-column
  687. align="center"
  688. type="index"
  689. width="50"
  690. ></el-table-column>
  691. <el-table-column
  692. align="center"
  693. prop="eName"
  694. label="字段名称"
  695. >
  696. <template slot-scope="scope">
  697. <el-input
  698. v-model="scope.row.eName"
  699. size="small"
  700. placeholder="请输入内容"
  701. ></el-input>
  702. </template>
  703. </el-table-column>
  704. <el-table-column
  705. align="center"
  706. prop="eType"
  707. label="数据类型"
  708. width="120"
  709. >
  710. <template slot-scope="scope">
  711. <el-select
  712. v-model="scope.row.eType"
  713. size="small"
  714. placeholder="请选择"
  715. >
  716. <el-option
  717. v-for="item in dataTypeList"
  718. :key="item.id"
  719. :label="item.dictValue"
  720. :value="item.dictKey"
  721. ></el-option>
  722. </el-select>
  723. </template>
  724. </el-table-column>
  725. <el-table-column
  726. align="center"
  727. prop="eLength"
  728. label="长度"
  729. width="120"
  730. >
  731. <template slot-scope="scope">
  732. <el-input
  733. v-model="scope.row.eLength"
  734. size="small"
  735. placeholder="请输入内容"
  736. :disabled="scope.row.eType == 4"
  737. ></el-input>
  738. </template>
  739. </el-table-column>
  740. <el-table-column
  741. align="center"
  742. prop="eAllowDeviation"
  743. label="允许偏差值"
  744. >
  745. <template slot-scope="scope">
  746. <div class="flex">
  747. <el-select
  748. v-model="scope.row.allow"
  749. size="small"
  750. placeholder="请选择"
  751. style="width:120px"
  752. >
  753. <el-option
  754. :key="1"
  755. label="≥"
  756. value="≥"
  757. ></el-option>
  758. <el-option
  759. :key="2"
  760. label="≤"
  761. value="≤"
  762. ></el-option>
  763. <el-option
  764. :key="3"
  765. label="±"
  766. value="±"
  767. ></el-option>
  768. <el-option
  769. :key="4"
  770. label="【】"
  771. value="【】"
  772. ></el-option>
  773. </el-select>
  774. <el-input
  775. v-model="scope.row.deviation"
  776. size="small"
  777. placeholder="请输入内容"
  778. ></el-input>
  779. </div>
  780. </template>
  781. </el-table-column>
  782. <el-table-column
  783. align="center"
  784. prop="eInspectionMethod"
  785. label="检查方法和频率"
  786. >
  787. <template slot-scope="scope">
  788. <el-input
  789. v-model="scope.row.eInspectionMethod"
  790. size="small"
  791. placeholder="请输入内容"
  792. ></el-input>
  793. </template>
  794. </el-table-column>
  795. <el-table-column
  796. align="center"
  797. label="操作"
  798. width="80"
  799. >
  800. <template slot="header">
  801. <el-button
  802. @click="addEleRow(eleForm.elementList)"
  803. type="text"
  804. icon="el-icon-circle-plus-outline"
  805. class="text-icon"
  806. ></el-button>
  807. </template>
  808. <template slot-scope="scope">
  809. <el-button
  810. icon="el-icon-remove-outline"
  811. type="text"
  812. @click="delEleRow(scope.$index,eleForm.elementList)"
  813. class="text-icon text-icon-danger"
  814. ></el-button>
  815. </template>
  816. </el-table-column>
  817. </el-table>
  818. </div>
  819. <span
  820. slot="footer"
  821. class="dialog-footer"
  822. >
  823. <el-button @click="eleVisible = false">取 消</el-button>
  824. <el-button
  825. type="primary"
  826. @click="saveFormAndElementHandle"
  827. >保 存</el-button>
  828. </span>
  829. </el-dialog>
  830. <el-dialog
  831. title="模版导入"
  832. :visible.sync="importVisible"
  833. width="50%"
  834. append-to-body
  835. :close-on-click-modal="false"
  836. >
  837. <p>提示:必须按照系统要求的模版格式上传,否则系统识别无效 <el-link
  838. type="primary"
  839. @click="downloadTmp"
  840. >下载导入模版</el-link>
  841. </p>
  842. <div>
  843. <el-button
  844. size="small"
  845. type="primary"
  846. @click="fileClick2"
  847. >本地上传</el-button>
  848. <input
  849. @change="tmpImport"
  850. type="file"
  851. hidden
  852. ref="file2"
  853. accept=".xls, .xlsx"
  854. >
  855. </div>
  856. <el-table
  857. :data="tempList"
  858. border
  859. style="width: 100%"
  860. >
  861. <el-table-column
  862. align="center"
  863. prop="eName"
  864. label="字段信息"
  865. >
  866. </el-table-column>
  867. <el-table-column
  868. align="center"
  869. prop="eType"
  870. label="数据类型"
  871. width="120"
  872. >
  873. </el-table-column>
  874. <el-table-column
  875. align="center"
  876. prop="eLength"
  877. label="长度"
  878. width="120"
  879. >
  880. </el-table-column>
  881. <el-table-column
  882. align="center"
  883. prop="eAllowDeviation"
  884. label="允许偏差值"
  885. >
  886. </el-table-column>
  887. <el-table-column
  888. align="center"
  889. prop="eInspectionMethod"
  890. label="检查方法和频率"
  891. >
  892. </el-table-column>
  893. </el-table>
  894. <span
  895. slot="footer"
  896. class="dialog-footer"
  897. >
  898. <el-button @click="importVisible = false">取 消</el-button>
  899. <el-button
  900. type="primary"
  901. @click="importHandle"
  902. >确 定</el-button>
  903. </span>
  904. </el-dialog>
  905. <el-dialog
  906. :title="(curEleTable.tableName?curEleTable.tableName:'')+' 元素编辑'"
  907. :visible.sync="editEleVisible"
  908. width="80%"
  909. append-to-body
  910. :close-on-click-modal="false"
  911. >
  912. <p class="font-c-warning">编辑元素信息(请谨慎操作)</p>
  913. <el-table
  914. :data="editEleList"
  915. border
  916. style="width: 100%"
  917. height="400px"
  918. >
  919. <el-table-column
  920. align="center"
  921. type="index"
  922. width="50"
  923. ></el-table-column>
  924. <el-table-column
  925. align="center"
  926. prop="eName"
  927. label="字段信息"
  928. >
  929. <template slot-scope="scope">
  930. <el-input
  931. v-model="scope.row.eName"
  932. size="small"
  933. placeholder="请输入内容"
  934. ></el-input>
  935. </template>
  936. </el-table-column>
  937. <el-table-column
  938. align="center"
  939. prop="eType"
  940. label="数据类型"
  941. width="120"
  942. >
  943. <template slot-scope="scope">
  944. <el-select
  945. v-model="scope.row.eType"
  946. size="small"
  947. placeholder="请选择"
  948. >
  949. <el-option
  950. v-for="item in dataTypeList"
  951. :key="item.id"
  952. :label="item.dictValue"
  953. :value="item.dictKey"
  954. ></el-option>
  955. </el-select>
  956. </template>
  957. </el-table-column>
  958. <el-table-column
  959. align="center"
  960. prop="eLength"
  961. label="长度"
  962. width="120"
  963. >
  964. <template slot-scope="scope">
  965. <el-input
  966. v-model="scope.row.eLength"
  967. size="small"
  968. placeholder="请输入内容"
  969. :disabled="scope.row.eType == 4"
  970. ></el-input>
  971. </template>
  972. </el-table-column>
  973. <el-table-column
  974. align="center"
  975. prop="eAllowDeviation"
  976. label="允许偏差值"
  977. >
  978. <template slot-scope="scope">
  979. <div class="flex">
  980. <el-select
  981. v-model="scope.row.allow"
  982. size="small"
  983. placeholder="请选择"
  984. style="width:120px"
  985. >
  986. <el-option
  987. :key="1"
  988. label="≥"
  989. value="≥"
  990. ></el-option>
  991. <el-option
  992. :key="2"
  993. label="≤"
  994. value="≤"
  995. ></el-option>
  996. <el-option
  997. :key="3"
  998. label="±"
  999. value="±"
  1000. ></el-option>
  1001. <el-option
  1002. :key="4"
  1003. label="【】"
  1004. value="【】"
  1005. ></el-option>
  1006. </el-select>
  1007. <el-input
  1008. v-model="scope.row.deviation"
  1009. size="small"
  1010. placeholder="请输入内容"
  1011. ></el-input>
  1012. </div>
  1013. </template>
  1014. </el-table-column>
  1015. <el-table-column
  1016. align="center"
  1017. prop="eInspectionMethod"
  1018. label="检查方法和频率"
  1019. >
  1020. <template slot-scope="scope">
  1021. <el-input
  1022. v-model="scope.row.eInspectionMethod"
  1023. size="small"
  1024. placeholder="请输入内容"
  1025. ></el-input>
  1026. </template>
  1027. </el-table-column>
  1028. <el-table-column
  1029. align="center"
  1030. label="操作"
  1031. width="120"
  1032. >
  1033. <template slot="header">
  1034. <el-button
  1035. @click="addEleRow(editEleList)"
  1036. type="text"
  1037. icon="el-icon-circle-plus-outline"
  1038. class="text-icon"
  1039. ></el-button>
  1040. </template>
  1041. <template slot-scope="scope">
  1042. <el-button
  1043. v-if="scope.row.id"
  1044. icon="el-icon-remove-outline"
  1045. type="text"
  1046. @click="delEleRowHandle(scope.$index,editEleList)"
  1047. class="text-icon text-icon-danger"
  1048. ></el-button>
  1049. <div
  1050. class="flex"
  1051. v-else
  1052. >
  1053. <el-button
  1054. @click="saveNewEle(scope.row)"
  1055. type="mini"
  1056. >保存</el-button>
  1057. <el-button
  1058. icon="el-icon-remove-outline"
  1059. type="text"
  1060. @click="delEleRowHandle(scope.$index,editEleList)"
  1061. class="text-icon text-icon-danger"
  1062. ></el-button>
  1063. </div>
  1064. </template>
  1065. </el-table-column>
  1066. </el-table>
  1067. <span
  1068. slot="footer"
  1069. class="dialog-footer"
  1070. >
  1071. <el-button @click="editEleVisible = false">取 消</el-button>
  1072. <el-button
  1073. type="primary"
  1074. @click="saveEles"
  1075. >确 定</el-button>
  1076. </span>
  1077. </el-dialog>
  1078. <el-dialog
  1079. title="元素公式"
  1080. :visible.sync="editEleFormulaVisible"
  1081. width="800px"
  1082. append-to-body
  1083. :close-on-click-modal="false"
  1084. >
  1085. <div class="flex mg-b-10">
  1086. <el-input
  1087. v-model="formulaInput"
  1088. placeholder="请输入内容"
  1089. size="samll"
  1090. ></el-input>
  1091. <el-button type="info">保存</el-button>
  1092. </div>
  1093. <el-table
  1094. :data="editEleList"
  1095. border
  1096. style="width: 100%"
  1097. height="400px"
  1098. >
  1099. <el-table-column
  1100. align="center"
  1101. prop="eName"
  1102. label="字段信息"
  1103. >
  1104. </el-table-column>
  1105. <el-table-column
  1106. align="center"
  1107. label="操作"
  1108. width="200"
  1109. >
  1110. <template slot-scope="scope">
  1111. <el-link type="primary">公式配置</el-link>
  1112. <el-link
  1113. class="mg-l-10"
  1114. type="danger"
  1115. @click="delEleRowHandle(scope.$index,editEleList)"
  1116. >删除</el-link>
  1117. </template>
  1118. </el-table-column>
  1119. </el-table>
  1120. </el-dialog>
  1121. <el-dialog
  1122. title="导入划分"
  1123. :visible.sync="importTemplateVisible"
  1124. width="800px"
  1125. append-to-body
  1126. :close-on-click-modal="false"
  1127. >
  1128. <div v-loading="importLoading">
  1129. <div>
  1130. <el-link
  1131. type="primary"
  1132. @click="handleDownload"
  1133. >下载导入模版</el-link>
  1134. </div>
  1135. <div class="mg-t-20">
  1136. <el-button
  1137. type="primary"
  1138. @click="fileClick"
  1139. >选择文件</el-button>
  1140. <span
  1141. v-if="upFile"
  1142. class="mg-l-20"
  1143. >{{upFile.name}}</span>
  1144. <input
  1145. @change="fileChange"
  1146. type="file"
  1147. hidden
  1148. ref="file"
  1149. accept=".xls, .xlsx"
  1150. >
  1151. </div>
  1152. <div v-if="!upFile">当前还未选择文件,请选择需要导入的文件</div>
  1153. </div>
  1154. <span
  1155. slot="footer"
  1156. class="dialog-footer"
  1157. >
  1158. <el-button @click="importTemplateVisible = false">取 消</el-button>
  1159. <el-button
  1160. type="primary"
  1161. @click="importTemplateHandle"
  1162. :loading="importLoading"
  1163. >导 入</el-button>
  1164. </span>
  1165. </el-dialog>
  1166. <el-dialog
  1167. title="节点参数"
  1168. :visible.sync="nodeInfoVisible"
  1169. width="800px"
  1170. append-to-body
  1171. class="jiedian"
  1172. :close-on-click-modal="false"
  1173. :show-close="false"
  1174. >
  1175. <div>
  1176. <el-button
  1177. type="text"
  1178. icon="el-icon-s-operation"
  1179. class="right-btn"
  1180. @click="setNodeParameters()"
  1181. ></el-button>
  1182. <div class="flexEnd">
  1183. <i
  1184. class="el-icon-circle-plus marbottom10"
  1185. @click="addNodeInfoTable()"
  1186. style="font-size:24px;color:rgb(37, 193, 99);cursor: pointer;"
  1187. ></i>
  1188. </div>
  1189. <el-table
  1190. :data="nodeInfoTable"
  1191. border
  1192. style="width: 100%"
  1193. height="400"
  1194. >
  1195. <el-table-column
  1196. align="center"
  1197. prop="name"
  1198. label="参数名称"
  1199. >
  1200. <template slot-scope="scope">
  1201. <el-select
  1202. v-model="scope.row.k"
  1203. placeholder="请选择"
  1204. class="w-100p"
  1205. >
  1206. <el-option
  1207. v-for="item in namelist"
  1208. :key="item.k"
  1209. :label="item.name"
  1210. :value="item.k"
  1211. ></el-option>
  1212. </el-select>
  1213. </template>
  1214. </el-table-column>
  1215. <el-table-column
  1216. align="center"
  1217. prop="value"
  1218. label="参数值设置"
  1219. >
  1220. <template slot-scope="scope">
  1221. <el-input v-model="scope.row.v"></el-input>
  1222. </template>
  1223. </el-table-column>
  1224. <el-table-column
  1225. align="center"
  1226. prop="describe"
  1227. label="描述"
  1228. >
  1229. <template slot-scope="scope">
  1230. <el-input v-model="scope.row.remark"></el-input>
  1231. </template>
  1232. </el-table-column>
  1233. <el-table-column
  1234. label="操作"
  1235. width="120"
  1236. align="center"
  1237. >
  1238. <template slot-scope="scope">
  1239. <el-button
  1240. type="text"
  1241. size="small"
  1242. class="text-icon-danger"
  1243. @click="delNodeInfoss(scope.$index)"
  1244. >删除</el-button>
  1245. </template>
  1246. </el-table-column>
  1247. </el-table>
  1248. </div>
  1249. <span
  1250. slot="footer"
  1251. class="dialog-footer"
  1252. >
  1253. <el-button @click="nodeInfoVisible = false">取 消</el-button>
  1254. <el-button
  1255. type="primary"
  1256. @click="nodeInfoSave()"
  1257. >保 存</el-button>
  1258. </span>
  1259. </el-dialog>
  1260. <!-- 设置参数名称 -->
  1261. <el-dialog
  1262. title="设置参数名称"
  1263. :visible.sync="infoNameVisible"
  1264. width="800px"
  1265. append-to-body
  1266. class="jiedian"
  1267. :close-on-click-modal="false"
  1268. >
  1269. <div>
  1270. <div class="flexEnd">
  1271. <i
  1272. class="el-icon-circle-plus marbottom10"
  1273. @click="setParameterName()"
  1274. style="font-size:24px;color:rgb(37, 193, 99);cursor: pointer;"
  1275. ></i>
  1276. </div>
  1277. <el-table
  1278. :data="namelists"
  1279. border
  1280. style="width: 100%"
  1281. height="400"
  1282. >
  1283. <el-table-column
  1284. align="center"
  1285. prop="name"
  1286. label="参数名称"
  1287. >
  1288. <template slot-scope="scope">
  1289. <el-input v-model="scope.row.name"></el-input>
  1290. </template>
  1291. </el-table-column>
  1292. <el-table-column
  1293. align="center"
  1294. prop="key"
  1295. label="参数值KEY"
  1296. >
  1297. <template slot-scope="scope">
  1298. <el-input v-model="scope.row.k"></el-input>
  1299. </template>
  1300. </el-table-column>
  1301. <el-table-column
  1302. align="center"
  1303. prop="describe"
  1304. label="描述"
  1305. >
  1306. <template slot-scope="scope">
  1307. <el-input v-model="scope.row.remark"></el-input>
  1308. </template>
  1309. </el-table-column>
  1310. <el-table-column
  1311. label="操作"
  1312. width="120"
  1313. align="center"
  1314. >
  1315. <template slot-scope="scope">
  1316. <el-button
  1317. type="text"
  1318. size="small"
  1319. class="text-icon-danger"
  1320. @click="delNodeInfo(scope.$index)"
  1321. >删除</el-button>
  1322. </template>
  1323. </el-table-column>
  1324. </el-table>
  1325. </div>
  1326. <span
  1327. slot="footer"
  1328. class="dialog-footer"
  1329. >
  1330. <el-button @click="addParameterName()">保 存</el-button>
  1331. <el-button @click="closeParameter()">关 闭</el-button>
  1332. </span>
  1333. </el-dialog>
  1334. </basic-container>
  1335. </template>
  1336. <script>
  1337. import ManualSorting from '@/components/WbsTree/ManualSorting'
  1338. import dynamicExcel from "./treeTemplate/dynamicExcel.vue";
  1339. import {
  1340. saveFormAndElement, selectFormElements,
  1341. importWbsTree, findWbsTreePrivateSameLevel, wbsTreePrivateSort, parameters, saveOrUpdateBatch, keymap, updateBatchNodeTableInfo2
  1342. } from "@/api/manager/wbstree";
  1343. import {
  1344. saveElement, remove as removeElement, updateBatchElements, getTemplate,
  1345. importWbsElement
  1346. } from "@/api/manager/wbsformelement";
  1347. import { getLazytree, getDetail, update, findNodeTableByCondition as selectByNodeTable, removeTableByCondition as removeTableById ,removePrivateTreeNode} from "@/api/manager/wbsprivate";
  1348. import { findProjectTree as getAlltree } from "@/api/manager/projectinfo";
  1349. import { getList as getAttchFromOriginalName } from "@/api/resource/attach";
  1350. import { getDictionary } from "@/api/system/dict";
  1351. import { mapGetters } from "vuex";
  1352. import { getList, tabLazytreeAll, saveLinkTab, getExcelHtml } from '@/api/exctab/excelmodel'
  1353. export default {
  1354. data () {
  1355. return {
  1356. formDatass: [],
  1357. editElementFormTag: false,
  1358. jiedianId: '',
  1359. //#region
  1360. sortTag: false,
  1361. sortTag2: false,
  1362. sortArray: [],
  1363. //#endregion
  1364. //#region 关联清表
  1365. loading: false,
  1366. GLExcel: false,
  1367. GLExcelFrom: {
  1368. id: "",
  1369. name: '',
  1370. search: '',//搜素框舒服的值
  1371. ids: '',
  1372. excelId: '',
  1373. initTableName: '',
  1374. },
  1375. GLExcelData: [],//
  1376. GLExcelProps: {
  1377. label: 'name',
  1378. children: 'children',
  1379. disabled: 'hasChildren',
  1380. // isLeaf: !'hasChildren',
  1381. },
  1382. exceldata: [],//清表模板
  1383. //#endregion
  1384. //#region 调整表单
  1385. adjustmentExcel: '',
  1386. excelHtml: false,
  1387. //#endregion
  1388. //#region
  1389. id: '',
  1390. projectid: '',
  1391. filterText: '',
  1392. treeData: [],
  1393. treeLoad: false,
  1394. menuShow: false,
  1395. defaultProps: {
  1396. children: 'children',
  1397. label: 'title',
  1398. isLeaf: function (data) {
  1399. return !data.hasChildren;
  1400. }
  1401. },
  1402. leftType: 5,
  1403. curTreeData: {},
  1404. tableData: [],
  1405. nodeDetail: {},
  1406. formData: [],
  1407. editType: 1,
  1408. dialogVisible: false,
  1409. saveNodeLoading: false,
  1410. deptCategorylist: [],
  1411. majorDataTypeList: [],
  1412. rules: {
  1413. deptName: [
  1414. { required: true, message: '请输入节点名称', trigger: 'blur' },
  1415. ],
  1416. deptCategory: [
  1417. { required: true, message: '请选择节点类型', trigger: 'change' }
  1418. ]
  1419. },
  1420. eleVisible: false,
  1421. tableTypelist: [],
  1422. dataTypeList: [],
  1423. ownerTypeList: [],
  1424. eleForm: {
  1425. elementList: [],
  1426. },
  1427. eleRules: {
  1428. deptName: [
  1429. { required: true, message: '请输入表名称', trigger: 'blur' },
  1430. ],
  1431. tableType: [
  1432. { required: true, message: '请选择表类型', trigger: 'change' }
  1433. ],
  1434. tableOwner: [
  1435. { required: true, message: '请选择所属方', trigger: 'change' }
  1436. ],
  1437. },
  1438. importVisible: false,
  1439. tempList: [],
  1440. curEleTable: {},
  1441. editEleVisible: false,
  1442. editEleList: [],
  1443. eleReg: /(≥|≤|±|【】)?([^≥≤±【】]*)/,
  1444. editEleFormulaVisible: false,
  1445. formulaInput: '',
  1446. importTemplateVisible: false,
  1447. fileUrl: '',
  1448. upFile: null,
  1449. importLoading: false,
  1450. nodeInfoVisible: false,
  1451. nodeInfoTable: [],
  1452. namelist: [],
  1453. namelists: [],
  1454. infoNameVisible: false,
  1455. //#endregion
  1456. };
  1457. },
  1458. computed: {
  1459. ...mapGetters(["userInfo"]),
  1460. dialogTitle: function () {
  1461. let text = '节点';
  1462. if (this.leftType == 1) {
  1463. text = '新增' + text;
  1464. } else if (this.leftType == 2) {
  1465. text = '编辑' + text;
  1466. }
  1467. return text;
  1468. },
  1469. },
  1470. created () {
  1471. this.init();
  1472. //console.log(this.userInfo)
  1473. },
  1474. methods: {
  1475. //#region
  1476. init () {
  1477. this.id = this.$route.query.wbsid;
  1478. this.projectid = this.$route.query.pid;
  1479. this.getDeptCategorylist();
  1480. this.getTableTypelist();
  1481. this.getDataTypelist();
  1482. this.getOwnerTypelist();
  1483. },
  1484. loadNode (node, resolve) {
  1485. let pid = 0;
  1486. if (node.level != 0) {
  1487. pid = node.data.id
  1488. }
  1489. getLazytree(this.id, pid, this.userInfo.tenant_id, this.projectid).then((res) => {
  1490. let arr = [];
  1491. if (Array.isArray(res.data.data)) {
  1492. arr = res.data.data;
  1493. }
  1494. return resolve(arr);
  1495. })
  1496. },
  1497. getNodeDetail (data, node) {
  1498. console.log(111);
  1499. let parentName = '';
  1500. if (node.parent.data) {
  1501. parentName = node.parent.data.title;
  1502. }
  1503. this.curTreeData = data;
  1504. this.curTreeData.parentName = parentName;
  1505. getDetail(data.id, this.id, this.projectid).then((res) => {
  1506. res.data.data.parentName = parentName;
  1507. this.tableData = [res.data.data];
  1508. this.nodeDetail = Object.assign({}, res.data.data);
  1509. })
  1510. this.updateNodeTable();
  1511. },
  1512. saveNode () {
  1513. this.$refs['nodeDetail'].validate((valid) => {
  1514. if (valid) {
  1515. if (this.editType == 1) {
  1516. this.addNode();
  1517. } else if (this.editType == 2) {
  1518. this.updateNode();
  1519. }
  1520. } else {
  1521. console.log('error submit!!');
  1522. return false;
  1523. }
  1524. });
  1525. },
  1526. addNode () {
  1527. this.saveNodeLoading = true;
  1528. update(this.nodeDetail).then(() => {
  1529. this.updateTreeNewNode();
  1530. this.dialogVisible = false;
  1531. this.$message({
  1532. type: "success",
  1533. message: "新增成功!"
  1534. });
  1535. this.$nextTick(() => {
  1536. this.saveNodeLoading = false;
  1537. })
  1538. })
  1539. },
  1540. updateNode () {
  1541. update(this.nodeDetail).then(() => {
  1542. let node = this.tableData[0];
  1543. node.deptName = this.nodeDetail.deptName;
  1544. node.deptCategory = this.nodeDetail.deptCategory;
  1545. this.curTreeData.title = this.nodeDetail.deptName;
  1546. this.dialogVisible = false;
  1547. this.$message({
  1548. type: "success",
  1549. message: "修改成功!"
  1550. });
  1551. })
  1552. },
  1553. setLeftType (type, data, node) {
  1554. this.jiedianId = data.id
  1555. if (type == 4 || type == 5) {
  1556. this.leftType = type;
  1557. }
  1558. this.curTreeData = data;
  1559. this.$refs.tree.setCurrentKey(data.id);
  1560. if (type == 1 || type == 2) {
  1561. this.getMajorDataTypeList();
  1562. this.dialogVisible = true;
  1563. this.editType = type;
  1564. }
  1565. getDetail(data.id, this.id, this.projectid).then((res) => {
  1566. let parentName = '';
  1567. if (node.parent.data) {
  1568. parentName = node.parent.data.title;
  1569. }
  1570. res.data.data.parentName = parentName;
  1571. this.tableData = [res.data.data];
  1572. if (type == 1) {
  1573. this.nodeDetail = {
  1574. parentId: res.data.data.id,
  1575. parentName: parentName,
  1576. projectId: res.data.data.projectId
  1577. };
  1578. } else {
  1579. this.nodeDetail = Object.assign({}, res.data.data);
  1580. }
  1581. this.nodeDetail.type = 1;// '1'节点 '2'表单
  1582. this.nodeDetail.wbsId = this.id;
  1583. this.nodeDetail.tenantId = this.userInfo.tenant_id
  1584. })
  1585. if (this.leftType == 4) {
  1586. selectByNodeTable(data.id, this.projectid, this.id).then((res) => {
  1587. if (res.data.data.length) {
  1588. this.formData = res.data.data;
  1589. } else {
  1590. this.formData = [];
  1591. }
  1592. })
  1593. }
  1594. },
  1595. showFormElement () {
  1596. if (!this.nodeDetail.id) {
  1597. this.$message({
  1598. type: "warning",
  1599. message: "请先选择在哪个节点下创建表"
  1600. });
  1601. return;
  1602. }
  1603. this.eleVisible = true;
  1604. },
  1605. addEleRow (list) {
  1606. list.push({});
  1607. },
  1608. delEleRow (index, list) {
  1609. list.splice(index, 1);
  1610. },
  1611. saveFormAndElementHandle () {
  1612. this.$refs['eleDialog'].validate((valid) => {
  1613. if (valid) {
  1614. this.eleForm.wbsId = this.id;
  1615. this.eleForm.tenantId = this.userInfo.tenant_id;
  1616. this.eleForm.deptCategory = -1;
  1617. this.eleForm.type = 2;// '1'节点 '2'表单
  1618. this.eleForm.parentId = this.nodeDetail.id;
  1619. this.eleForm.elementList.forEach((element) => {
  1620. element.eAllowDeviation = (element.allow ? element.allow : '') + (element.deviation ? element.deviation : '');
  1621. if (element.eType == 4) {
  1622. element.eLength = 0;
  1623. }
  1624. })
  1625. saveFormAndElement(this.eleForm).then(() => {
  1626. //console.log(res)
  1627. this.updateTreeNewNode();
  1628. this.updateNodeTable();
  1629. this.eleVisible = false;
  1630. this.$message({
  1631. type: "success",
  1632. message: "新增成功!"
  1633. });
  1634. })
  1635. } else {
  1636. console.log('error submit!!');
  1637. return false;
  1638. }
  1639. });
  1640. },
  1641. updateTreeNewNode () {
  1642. getLazytree(this.id, this.nodeDetail.parentId, this.userInfo.tenant_id, this.projectid).then((res) => {
  1643. this.$refs.tree.updateKeyChildren(this.nodeDetail.parentId, res.data.data)
  1644. })
  1645. },
  1646. updateNodeTable () {
  1647. selectByNodeTable(this.curTreeData.id, this.projectid, this.id).then((res) => {
  1648. if (res.data.data.length) {
  1649. this.formData = res.data.data;
  1650. } else {
  1651. this.formData = [];
  1652. }
  1653. })
  1654. },
  1655. deleNode (data, node) {
  1656. this.$confirm('此操作将删除节点【' + data.title + '】, 是否继续?', '提示', {
  1657. confirmButtonText: '确定',
  1658. cancelButtonText: '取消',
  1659. type: 'warning'
  1660. }).then(() => {
  1661. removePrivateTreeNode(data.primaryKeyId).then(() => {
  1662. this.$refs.tree.remove(node);
  1663. this.$message({
  1664. type: "success",
  1665. message: "删除成功!"
  1666. });
  1667. })
  1668. }).catch(() => {
  1669. });
  1670. },
  1671. importHandle () {
  1672. },
  1673. handleEdit (index, row) {
  1674. this.curEleTable = row;
  1675. selectFormElements(this.curEleTable.id).then((res) => {
  1676. res.data.data.forEach((element) => {
  1677. this.eleReg.exec(element.eAllowDeviation);
  1678. // console.log(RegExp.$1)
  1679. // console.log(RegExp.$2)
  1680. element.allow = RegExp.$1 ? RegExp.$1 : '';
  1681. element.deviation = RegExp.$2 ? RegExp.$2 : '';
  1682. })
  1683. this.editEleList = res.data.data;
  1684. })
  1685. this.editEleVisible = true;
  1686. },
  1687. handleDelete (index, row) {
  1688. this.$confirm('是否删除 ' + row.tableName + ' ?', '删除元素表', {
  1689. distinguishCancelAndClose: true,
  1690. confirmButtonText: '删除',
  1691. cancelButtonText: '取消'
  1692. }).then(() => {
  1693. removeTableById(row.id, this.projectid, this.id).then(() => {
  1694. this.formData.splice(index, 1);
  1695. this.$message({
  1696. type: "success",
  1697. message: "删除成功!"
  1698. });
  1699. })
  1700. })
  1701. },
  1702. handleEditFormula (index, row) {
  1703. this.curEleTable = row;
  1704. selectFormElements(this.curEleTable.id).then((res) => {
  1705. this.editEleList = res.data.data;
  1706. })
  1707. this.editEleFormulaVisible = true;
  1708. },
  1709. saveNewEle (row) {
  1710. row.eAllowDeviation = (row.allow ? row.allow : '') + (row.deviation ? row.deviation : '');
  1711. row.fId = this.curEleTable.id;
  1712. row.initTableName = this.curEleTable.initTableName;
  1713. if (row.eType == 4) {
  1714. row.eLength = 0;
  1715. }
  1716. saveElement(row).then((res) => {
  1717. if (res.data.data) {
  1718. this.$set(row, 'id', res.data.data.id);
  1719. this.$set(row, 'ekey', res.data.data.ekey);
  1720. this.$message({
  1721. type: "success",
  1722. message: "保存成功!"
  1723. });
  1724. }
  1725. })
  1726. },
  1727. delEleRowHandle (index, list) {
  1728. let row = list[index];
  1729. if (row.id) {
  1730. //有id需要请求删除
  1731. this.$confirm('是否确认删除?', '删除元素', {
  1732. distinguishCancelAndClose: true,
  1733. confirmButtonText: '删除',
  1734. cancelButtonText: '取消'
  1735. }).then(() => {
  1736. removeElement(row.id, this.curEleTable.initTableName, row.ekey).then(() => {
  1737. list.splice(index, 1);
  1738. })
  1739. })
  1740. } else {
  1741. list.splice(index, 1);
  1742. }
  1743. },
  1744. saveEles () {
  1745. for (let i = 0; i < this.editEleList.length; i++) {
  1746. if (!this.editEleList[i].id) {
  1747. this.$message({
  1748. type: "warning",
  1749. message: "请先将新增的元素点击保存"
  1750. });
  1751. return;
  1752. }
  1753. }
  1754. if (this.editEleList.length > 0) {
  1755. this.editEleList.forEach((element) => {
  1756. element.eAllowDeviation = (element.allow ? element.allow : '') + (element.deviation ? element.deviation : '');
  1757. if (element.eType == 4) {
  1758. element.eLength = 0;
  1759. }
  1760. })
  1761. updateBatchElements(this.editEleList, this.curEleTable.initTableName).then(() => {
  1762. this.editEleVisible = false;
  1763. this.updateNodeTable();
  1764. this.$message({
  1765. type: "success",
  1766. message: "保存成功!"
  1767. });
  1768. })
  1769. } else {
  1770. this.editEleVisible = false;
  1771. this.updateNodeTable();
  1772. this.$message({
  1773. type: "success",
  1774. message: "保存成功!"
  1775. });
  1776. }
  1777. },
  1778. filterChange () {
  1779. //console.log(this.$refs)
  1780. //debugger
  1781. if (this.treeData.length > 0) {
  1782. this.$refs.treeall.filter(this.filterText);
  1783. return;
  1784. }
  1785. this.treeLoad = true;
  1786. getAlltree(this.projectid, this.id).then((res) => {
  1787. this.treeLoad = false;
  1788. this.treeData = res.data.data;
  1789. this.$nextTick(() => {
  1790. this.$refs.treeall.filter(this.filterText);
  1791. })
  1792. })
  1793. },
  1794. importTemplate (data) {
  1795. this.importTemplateVisible = true;
  1796. this.curTreeData = data;
  1797. if (!this.fileUrl) {
  1798. getAttchFromOriginalName(1, 20, {
  1799. originalName: 'WBS划分模板.xls'
  1800. }).then((res) => {
  1801. if (res.data.data.records.length) {
  1802. this.fileUrl = res.data.data.records[0].link;
  1803. } else {
  1804. this.fileUrl = '';
  1805. }
  1806. })
  1807. }
  1808. },
  1809. importTemplateHandle () {
  1810. if (!this.upFile) {
  1811. this.$message({
  1812. type: "warning",
  1813. message: "请先选择文件再进行导入"
  1814. });
  1815. }
  1816. let forms = new FormData();
  1817. forms.append('excelFile', this.upFile);
  1818. let wbsTreeFu = {
  1819. wbsId: this.id,
  1820. parentId: this.curTreeData.id,
  1821. // ancestors:'0,'+this.curTreeData.id,
  1822. }
  1823. let json = JSON.stringify(wbsTreeFu);
  1824. let blob = new Blob([json], { type: 'application/json' })
  1825. forms.append('wbsTreeFu', blob);
  1826. this.importLoading = true;
  1827. importWbsTree(forms).then(() => {
  1828. //this.$router.go(0)
  1829. let node = this.$refs.tree.getNode(this.curTreeData.id);
  1830. node.isLeaf = false;
  1831. this.importTemplateVisible = false;
  1832. this.upFile = null;
  1833. }).finally(() => {
  1834. this.importLoading = false;
  1835. })
  1836. },
  1837. handleDownload () {
  1838. if (this.fileUrl) {
  1839. window.open(this.fileUrl);
  1840. } else {
  1841. this.$message({
  1842. type: "warning",
  1843. message: "请先在附件管理上传【WBS划分模板.xls】文件"
  1844. });
  1845. }
  1846. },
  1847. fileClick () {
  1848. this.$refs.file.click();
  1849. },
  1850. fileChange (e) {
  1851. const file = e.target.files[0]
  1852. if (!file) {
  1853. // 如果用户没有选择图片,只是点了文件上传这个按钮
  1854. return
  1855. }
  1856. //console.log(file)
  1857. this.upFile = file;
  1858. },
  1859. editNodeInfo (index, row) {
  1860. this.$set(row, 'isEdit', true);
  1861. },
  1862. saveNodeInfoHandle (index, row) {
  1863. row.isEdit = false;
  1864. },
  1865. downloadTmp () {
  1866. getTemplate().then((res) => {
  1867. //console.log(res)
  1868. let blob = new Blob([res.data], {
  1869. type: 'application/vnd.ms-excel'
  1870. });
  1871. //console.log(blob)
  1872. let filename = Date.parse(new Date()) + '.xls';
  1873. if (window.navigator.msSaveOrOpenBlob) {
  1874. // 兼容IE10
  1875. window.navigator.msSaveBlob(blob, filename);
  1876. } else {
  1877. // 兼容chrome/firefox
  1878. let aTag = document.createElement('a');
  1879. aTag.download = Date.parse(new Date()) + '.xls';
  1880. aTag.href = window.URL.createObjectURL(blob);
  1881. aTag.click();
  1882. URL.revokeObjectURL(aTag.href);
  1883. }
  1884. })
  1885. },
  1886. fileClick2 () {
  1887. this.$refs.file2.click();
  1888. },
  1889. tmpImport (e) {
  1890. const file = e.target.files[0];
  1891. const formData = new FormData();
  1892. formData.append('file', file);
  1893. //console.log(file.name)
  1894. importWbsElement(formData).then((res) => {
  1895. res.data.data.forEach((element) => {
  1896. element.eName = element.elementName;
  1897. element.eLength = element.elementLength;
  1898. element.eType = Number(element.elementType);
  1899. element.eAllowDeviation = element.elementAllowDeviation;
  1900. element.eInspectionMethod = element.elementInspectionMethod;
  1901. this.eleReg.exec(element.eAllowDeviation);
  1902. // console.log(RegExp.$1)
  1903. // console.log(RegExp.$2)
  1904. element.allow = RegExp.$1 ? RegExp.$1 : '';
  1905. element.deviation = RegExp.$2 ? RegExp.$2 : '';
  1906. })
  1907. this.eleForm.elementList = res.data.data;
  1908. this.importVisible = false;
  1909. }).finally(() => {
  1910. e.target.value = '';
  1911. })
  1912. },
  1913. visiblechange (value, data) {
  1914. this.$set(data, 'moreShow', value)
  1915. },
  1916. getDeptCategorylist () {
  1917. if (this.deptCategorylist.length > 1) {
  1918. return;
  1919. }
  1920. getDictionary({
  1921. code: 'wbs_node_type'
  1922. }).then((res) => {
  1923. res.data.data.forEach(element => {
  1924. element.dictKey = Number(element.dictKey)
  1925. });
  1926. this.deptCategorylist = res.data.data;
  1927. })
  1928. },
  1929. getMajorDataTypeList () {
  1930. if (this.majorDataTypeList.length > 1) {
  1931. return;
  1932. }
  1933. getDictionary({
  1934. code: 'major_data_type'
  1935. }).then((res) => {
  1936. res.data.data.forEach(element => {
  1937. element.dictKey = Number(element.dictKey)
  1938. });
  1939. this.majorDataTypeList = res.data.data;
  1940. })
  1941. },
  1942. getTableTypelist () {
  1943. if (this.tableTypelist.length > 1) {
  1944. return;
  1945. }
  1946. getDictionary({
  1947. code: 'table_type'
  1948. }).then((res) => {
  1949. res.data.data.forEach(element => {
  1950. element.dictKey = Number(element.dictKey)
  1951. });
  1952. this.tableTypelist = res.data.data;
  1953. })
  1954. },
  1955. getDataTypelist () {
  1956. if (this.dataTypeList.length > 1) {
  1957. return;
  1958. }
  1959. getDictionary({
  1960. code: 'data_type'
  1961. }).then((res) => {
  1962. res.data.data.forEach(element => {
  1963. element.dictKey = Number(element.dictKey)
  1964. });
  1965. this.dataTypeList = res.data.data;
  1966. })
  1967. },
  1968. getOwnerTypelist () {
  1969. if (this.ownerTypeList.length > 1) {
  1970. return;
  1971. }
  1972. getDictionary({
  1973. code: 'owner_type'
  1974. }).then((res) => {
  1975. res.data.data.forEach(element => {
  1976. element.dictKey = Number(element.dictKey)
  1977. });
  1978. this.ownerTypeList = res.data.data;
  1979. })
  1980. },
  1981. formatCat (row, column, cellValue) {
  1982. for (let i = 0; i < this.deptCategorylist.length; i++) {
  1983. if (this.deptCategorylist[i].dictKey == cellValue) {
  1984. return this.deptCategorylist[i].dictValue
  1985. }
  1986. }
  1987. return cellValue;
  1988. //console.log(cellValue)
  1989. },
  1990. formatTableType (row, column, cellValue) {
  1991. for (let i = 0; i < this.tableTypelist.length; i++) {
  1992. if (this.tableTypelist[i].dictKey == cellValue) {
  1993. return this.tableTypelist[i].dictValue
  1994. }
  1995. }
  1996. return cellValue;
  1997. //console.log(cellValue)
  1998. },
  1999. formatOwner (row, column, cellValue) {
  2000. for (let i = 0; i < this.ownerTypeList.length; i++) {
  2001. if (this.ownerTypeList[i].dictKey == cellValue) {
  2002. return this.ownerTypeList[i].dictValue
  2003. }
  2004. }
  2005. return cellValue;
  2006. //console.log(cellValue)
  2007. },
  2008. formatdataType (row, column, cellValue) {
  2009. for (let i = 0; i < this.dataTypeList.length; i++) {
  2010. if (this.dataTypeList[i].dictKey == cellValue) {
  2011. return this.dataTypeList[i].dictValue
  2012. }
  2013. }
  2014. return cellValue;
  2015. },
  2016. filterNode (value, data) {
  2017. if (!value) return true;
  2018. return data.title.indexOf(value) !== -1;
  2019. },
  2020. //#endregion
  2021. //#region wbs私有树排序
  2022. async sortpai (data) {
  2023. console.log(data);
  2024. await this.findWbsTreePrivateSameLevel({
  2025. parentId: data.parentId,
  2026. projectId: this.projectid,
  2027. wbsId: this.id
  2028. })
  2029. this.sortTag = true
  2030. this.sortTag2 = true
  2031. },
  2032. editSort () {
  2033. this.wbsTreePrivateSort()
  2034. },
  2035. bianhua () {
  2036. this.sortTag2 = false
  2037. this.$nextTick(() => {
  2038. this.sortTag2 = true
  2039. })
  2040. },
  2041. async wbsTreePrivateSort () {//wbs私有树节点手动排序
  2042. const { data: res } = await wbsTreePrivateSort(this.sort)
  2043. console.log(res);
  2044. if (res.code == 200) {
  2045. this.sortTag = false
  2046. this.sortTag2 = false
  2047. this.getLazytreessss()
  2048. }
  2049. },
  2050. async findWbsTreePrivateSameLevel (da) {//wbs私有树同级节点接口
  2051. const { data: res } = await findWbsTreePrivateSameLevel(da)
  2052. console.log(res);
  2053. if (res.code == 200) {
  2054. this.sort = res.data
  2055. }
  2056. },
  2057. async getLazytreessss () {
  2058. const { data: res } = await getLazytree(this.id, 0, this.userInfo.tenant_id, this.projectid)
  2059. console.log(res);
  2060. if (res.code == 200) {
  2061. this.treeData = res.data
  2062. }
  2063. },
  2064. //#endregion
  2065. //#region 关联清表
  2066. async getList (da) {//获取清表模板信息
  2067. const { data: res } = await getList(da)
  2068. console.log(res);
  2069. if (res.code === 200 && res.msg === '操作成功') {
  2070. this.GLExcelData = res.data.records
  2071. }
  2072. },
  2073. async tabLazytreeAll () {//清表树信息
  2074. const { data: res } = await tabLazytreeAll({
  2075. modeId: this.GLExcelFrom.name,
  2076. name: this.GLExcelFrom.search,
  2077. })
  2078. console.log(res);
  2079. if (res.code === 200 && res.msg === '操作成功') {
  2080. this.exceldata = res.data
  2081. }
  2082. },
  2083. Associationlist (scope) {//关联清表点击事件
  2084. console.log(scope.row);
  2085. this.GLExcel = true
  2086. this.getList({
  2087. current: 1,
  2088. size: 100000,
  2089. parentId: 0,
  2090. })
  2091. this.GLExcelFrom.name = scope.row.modeId
  2092. setTimeout(() => {
  2093. this.$refs.tree.setCheckedKeys([scope.row.excelId])
  2094. }, 2000)
  2095. this.GLExcelFrom.id = scope.row.pkeyId
  2096. this.GLExcelFrom.excelId = scope.row.excelId
  2097. this.GLExcelFrom.ids = scope.row.id
  2098. this.GLExcelFrom.initTableName = scope.row.initTableName
  2099. },
  2100. changetherr () {//清表类型选择框change事件
  2101. if (this.GLExcelFrom.name != "") {
  2102. this.GLExcelFrom.search = ''
  2103. this.tabLazytreeAll()
  2104. }
  2105. },
  2106. GLExcelMD () {//弹框关闭事件
  2107. this.GLExcelFrom.name = ""
  2108. this.GLExcelFrom.search = ''
  2109. this.GLExcelFrom.id = ''
  2110. this.exceldata = []
  2111. this.$refs.tree.setCheckedKeys([])
  2112. this.GLExcel = false
  2113. },
  2114. checkchange (data) {//节点选中回调
  2115. if (this.$refs.tree.getCheckedNodes().length === 0) {
  2116. this.$refs.tree.setCheckedKeys([])
  2117. } else if (this.$refs.tree.getCheckedNodes().length >= 1) {
  2118. this.$refs.tree.setCheckedKeys([data.id])
  2119. }
  2120. },
  2121. async saveLinkTab () {//保存按钮
  2122. if (this.$refs.tree.getCheckedNodes().length > 0) {
  2123. const { data: res } = await saveLinkTab({
  2124. exceTabId: this.$refs.tree.getCheckedNodes()[this.$refs.tree.getCheckedNodes().length - 1].id,
  2125. tabId: this.GLExcelFrom.id,
  2126. })
  2127. console.log(res);
  2128. if (res.code === 200) {
  2129. this.$message({
  2130. type: 'success',
  2131. message: '关联清表成功',
  2132. })
  2133. this.GLExcel = false
  2134. this.rightClick(this.GLExcelFrom.id, this.GLExcelFrom.excelId, this.GLExcelFrom.ids, this.GLExcelFrom.initTableName,)
  2135. }
  2136. } else {
  2137. this.$message({
  2138. type: 'success',
  2139. message: '请先设置清表',
  2140. })
  2141. }
  2142. },
  2143. filterNode222 (value, data) {
  2144. if (!value) return true;
  2145. return data.name.indexOf(value) !== -1;
  2146. },
  2147. //#endregion
  2148. //#region 节点参数
  2149. nodeInfo (data) {//节点参数按钮
  2150. this.keymap()
  2151. this.jiedianId = data.primaryKeyId
  2152. this.parameters(data.primaryKeyId)
  2153. this.nodeInfoVisible = true;
  2154. },
  2155. addNodeInfoTable () {//添加节点参数数据
  2156. this.nodeInfoTable.unshift({ k: '', v: '', remark: '', wbsId: this.jiedianId })
  2157. },
  2158. delNodeInfo (key) {//设置参数名称中的删除按钮
  2159. this.namelists.splice(key, 1)
  2160. },
  2161. delNodeInfoss (key) {//节点参数
  2162. this.nodeInfoTable.splice(key, 1)
  2163. },
  2164. setNodeParameters () {//打开设置节点参数弹框按钮
  2165. this.infoNameVisible = true
  2166. this.namelists = [...this.namelist]
  2167. },
  2168. async setParameterName () {//设置参数名称中添加节点参数按钮
  2169. // wbsId: this.jiedianId
  2170. this.namelists.unshift({ name: '', remark: '', k: '', type: 0, })
  2171. },
  2172. async nodeInfoSave () {//节点参数弹框保存按钮
  2173. if (this.nodeInfoTable) {
  2174. let tag = true
  2175. this.nodeInfoTable.forEach(val => {
  2176. if (!val.k | !val.v) {
  2177. return tag = false
  2178. }
  2179. })
  2180. if (tag) {
  2181. await this.saveOrUpdateBatch(this.nodeInfoTable)
  2182. this.nodeInfoVisible = false
  2183. this.$message({
  2184. type: "success",
  2185. message: "设置参数节点成功!"
  2186. })
  2187. } else {
  2188. this.$message({
  2189. type: "error",
  2190. message: "请填写所有的参数名称和参数值!"
  2191. })
  2192. }
  2193. } else {
  2194. this.$message({
  2195. type: "error",
  2196. message: "请先设置参数节点!"
  2197. })
  2198. }
  2199. },
  2200. async addParameterName () {//设置参数名称中的保存按钮
  2201. if (this.namelists) {
  2202. let tag = true
  2203. this.namelists.forEach(val => {
  2204. if (!val.name || !val.k) {
  2205. return tag = false
  2206. }
  2207. })
  2208. if (tag) {
  2209. await this.saveOrUpdateBatch(this.namelists) //保存设置参数
  2210. this.infoNameVisible = false
  2211. this.keymap()
  2212. } else {
  2213. this.$message({
  2214. type: "error",
  2215. message: "请填写所有的参数名称和参数值KEY!"
  2216. })
  2217. }
  2218. } else {
  2219. this.$message({
  2220. type: "error",
  2221. message: "请设置参数"
  2222. })
  2223. }
  2224. },
  2225. closeParameter () {//设置参数名称,关闭按钮
  2226. this.namelists = []
  2227. this.infoNameVisible = false
  2228. },
  2229. async parameters (wbsId) {//获取接待你参数列表
  2230. const { data: res } = await parameters({ wbsId })
  2231. console.log(res);
  2232. if (res.code == 200) {
  2233. this.nodeInfoTable = res.data
  2234. }
  2235. },
  2236. async saveOrUpdateBatch (da) {//保存
  2237. const { data: res } = await saveOrUpdateBatch(da)
  2238. console.log(res);
  2239. },
  2240. async keymap () {//节点参数枚举
  2241. const { data: res } = await keymap()
  2242. console.log(res);
  2243. if (res.code = 200) {
  2244. this.namelist = res.data
  2245. }
  2246. },
  2247. //#endregion
  2248. //#region 调整表单
  2249. adjustExcel (pkeyId, excelId) {//调整表单
  2250. this.GLExcelFrom.id = pkeyId
  2251. this.getExcelHtml(excelId)
  2252. },
  2253. async getExcelHtml (excelId) {
  2254. const { data: res } = await getExcelHtml({ excelId })
  2255. console.log(res);
  2256. if (res.code === 200) {
  2257. localStorage.setItem('excelHtml', res.data)
  2258. this.adjustmentExcel = res.data
  2259. this.excelHtml = true
  2260. }
  2261. },
  2262. removeExcel () {
  2263. this.excelHtml = false
  2264. },
  2265. //#endregion
  2266. //#region 编辑元素
  2267. async rightClick (pkeyId, excelId, id, initTableName) {
  2268. await this.getExcelHtml2(excelId)
  2269. this.$router.push({
  2270. path: '/project/editElement',
  2271. query: {
  2272. pkeyId: pkeyId,
  2273. excelId: excelId,
  2274. id: id,
  2275. initTableName
  2276. }
  2277. })
  2278. },
  2279. async getExcelHtml2 (excelId) {
  2280. const { data: res } = await getExcelHtml({ excelId })
  2281. console.log(res);
  2282. if (res.code === 200) {
  2283. localStorage.setItem('editElement', res.data)
  2284. }
  2285. },
  2286. //#endregion
  2287. //#region 元素表单信息
  2288. editEditElementForm () {//标记元素
  2289. if (this.formData.length) {
  2290. let da = []
  2291. this.formDatass = [...this.formData]
  2292. this.formDatass.forEach(val => {
  2293. da.push({
  2294. tableType: val.tableType - 0,
  2295. tableOwner: val.tableOwner - 0,
  2296. pkeyId: val.pkeyId,
  2297. tableName: val.tableName,
  2298. })
  2299. })
  2300. this.formDatass = da
  2301. this.editElementFormTag = true
  2302. }
  2303. },
  2304. editeditElementFormMF () {//保存按钮
  2305. let da = []
  2306. let tag = true
  2307. this.formDatass.forEach(val => {
  2308. if (!val.tableName || !val.tableType || !val.tableOwner) {
  2309. tag = false
  2310. return
  2311. } else {
  2312. da.push({
  2313. pkeyId: val.pkeyId,
  2314. deptName: val.tableName,
  2315. tableType: val.tableType,
  2316. tableOwner: val.tableOwner,
  2317. })
  2318. }
  2319. })
  2320. if (tag) {
  2321. this.updateBatchNodeTableInfo2(da)
  2322. } else {
  2323. this.$message({
  2324. type: 'success',
  2325. message: '请填写完整元素表单的所有信息!',
  2326. })
  2327. }
  2328. },
  2329. async updateBatchNodeTableInfo2 (da) {//共有编辑元素
  2330. const { data: res } = await updateBatchNodeTableInfo2(da)
  2331. console.log(res);
  2332. if (res.code == 200) {
  2333. this.editElementFormTag = false
  2334. this.updateNodeTable()
  2335. }
  2336. },
  2337. //#endregion
  2338. },
  2339. watch: {
  2340. 'GLExcelFrom.search' (val) {
  2341. console.log(val);
  2342. if (this.exceldata) {
  2343. this.$refs.tree.filter(val);
  2344. }
  2345. }
  2346. },
  2347. components: {
  2348. dynamicExcel,
  2349. ManualSorting,
  2350. },
  2351. };
  2352. </script>
  2353. <style scoped lang="scss">
  2354. .font-s-12 /deep/ .iconfont {
  2355. font-size: 12px;
  2356. }
  2357. .el-popper[x-placement^="bottom"] {
  2358. margin-top: -6px;
  2359. }
  2360. .right-btn {
  2361. position: absolute;
  2362. right: 20px;
  2363. top: 10px;
  2364. font-size: 20px;
  2365. }
  2366. .custom-tree-node {
  2367. .normal-black {
  2368. display: none;
  2369. }
  2370. &:hover {
  2371. .normal-black {
  2372. display: block;
  2373. }
  2374. }
  2375. &.show .normal-black {
  2376. display: block;
  2377. }
  2378. }
  2379. .excelBox {
  2380. /deep/.el-dialog__body {
  2381. padding: 20px;
  2382. }
  2383. }
  2384. //调整表单样式
  2385. .excelHtml {
  2386. position: absolute;
  2387. z-index: 999999;
  2388. top: 50px;
  2389. left: 0px;
  2390. width: 100%;
  2391. height: 100%;
  2392. }
  2393. .jiedian {
  2394. /deep/.el-dialog__body {
  2395. padding: 10px 20px !important;
  2396. }
  2397. }
  2398. .filter-tree {
  2399. min-width: 100%;
  2400. display: inline-block;
  2401. }
  2402. </style>