detail.vue 66 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990
  1. <template>
  2. <basic-container>
  3. <div class="h-100p">
  4. <el-tabs
  5. v-model="activeType"
  6. :before-leave="beforeLeave"
  7. >
  8. <el-tab-pane
  9. label="项目基本信息"
  10. name="1"
  11. :disabled="btnLoad"
  12. >
  13. <div>
  14. <el-form
  15. :model="projectForm"
  16. :rules="projectRules"
  17. ref="projectForm"
  18. label-width="120px"
  19. >
  20. <el-row>
  21. <el-col :span="12">
  22. <el-form-item
  23. label="项目名称"
  24. prop="projectName"
  25. >
  26. <el-input v-model="projectForm.projectName"></el-input>
  27. </el-form-item>
  28. <el-form-item
  29. label="项目别名"
  30. prop="projectAlias"
  31. >
  32. <el-input v-model="projectForm.projectAlias"></el-input>
  33. </el-form-item>
  34. <el-form-item
  35. label="项目编号"
  36. prop="projectNumber"
  37. >
  38. <el-input v-model="projectForm.projectNumber"></el-input>
  39. </el-form-item>
  40. <el-form-item
  41. label="公路等级"
  42. prop="projectGrade"
  43. >
  44. <el-select
  45. v-model="projectForm.projectGrade"
  46. placeholder="请选择"
  47. class="w-100p"
  48. >
  49. <el-option
  50. v-for="item in highwayGradeList"
  51. :key="item.id"
  52. :label="item.dictValue"
  53. :value="item.dictKey"
  54. ></el-option>
  55. </el-select>
  56. </el-form-item>
  57. <el-form-item
  58. label="计划开工日期"
  59. prop="planStartTime"
  60. >
  61. <el-date-picker
  62. v-model="projectForm.planStartTime"
  63. type="date"
  64. format="yyyy 年 MM 月 dd 日"
  65. value-format="yyyy-MM-dd HH:mm:ss"
  66. placeholder="选择日期"
  67. ></el-date-picker>
  68. </el-form-item>
  69. <el-form-item
  70. label="实际开工日期"
  71. prop="actualStartTime"
  72. >
  73. <el-date-picker
  74. v-model="projectForm.actualStartTime"
  75. type="date"
  76. format="yyyy 年 MM 月 dd 日"
  77. value-format="yyyy-MM-dd HH:mm:ss"
  78. placeholder="选择日期"
  79. ></el-date-picker>
  80. </el-form-item>
  81. <el-form-item
  82. label="项目预算投资"
  83. prop="estimatedAmount"
  84. >
  85. <el-input v-model="projectForm.estimatedAmount">
  86. <template slot="append">万元</template>
  87. </el-input>
  88. </el-form-item>
  89. <el-form-item
  90. label="施工文件后缀"
  91. prop="sgSuffix"
  92. >
  93. <el-input v-model="projectForm.sgSuffix">
  94. </el-input>
  95. </el-form-item>
  96. <el-form-item
  97. label="监理文件后缀"
  98. prop="jlSuffix"
  99. >
  100. <el-input v-model="projectForm.jlSuffix">
  101. </el-input>
  102. </el-form-item>
  103. <el-form-item
  104. label="电签类别"
  105. prop="remarkType"
  106. >
  107. <el-tooltip slot="label" effect="light" content="选择本项目所要应用的电签公司" placement="top">
  108. <span>电签类别</span>
  109. </el-tooltip>
  110. <el-radio-group v-model="projectForm.remarkType">
  111. <el-radio :label="1">安心签</el-radio>
  112. <el-radio :label="2">(首讯)东方中讯</el-radio>
  113. <el-radio :label="3">东方中讯</el-radio>
  114. </el-radio-group>
  115. </el-form-item>
  116. <el-form-item
  117. label="电签方式"
  118. prop="approvalType"
  119. >
  120. <el-tooltip slot="label" effect="light" content="平行审批只作用于质检系统,计量系统默认流程审批" placement="top">
  121. <span>电签方式</span>
  122. </el-tooltip>
  123. <el-radio-group v-model="projectForm.approvalType">
  124. <el-radio :label="1">流程审批</el-radio>
  125. <el-radio :label="2">平行审批</el-radio>
  126. </el-radio-group>
  127. </el-form-item>
  128. <el-form-item
  129. label="系统计量单元"
  130. prop="projectGrade"
  131. >
  132. <el-select
  133. v-model="projectForm.meterTemplateId"
  134. placeholder="请选择"
  135. class="w-100p"
  136. clearable
  137. >
  138. <el-option
  139. v-for="item in meterTemplateOption"
  140. :key="item.id"
  141. :label="item.name"
  142. :value="item.id"
  143. ></el-option>
  144. </el-select>
  145. </el-form-item>
  146. <el-form-item
  147. label="项目状态"
  148. prop="projectStatus"
  149. >
  150. <el-select
  151. v-model="projectForm.projectStatus"
  152. placeholder="请选择"
  153. class="w-100p"
  154. clearable
  155. >
  156. <el-option
  157. v-for="item in proStatusItems"
  158. :key="item.value"
  159. :label="item.label"
  160. :value="item.value">
  161. </el-option>
  162. </el-select>
  163. </el-form-item>
  164. <el-form-item
  165. label="项目负责人"
  166. prop="projectLeader"
  167. >
  168. <el-select
  169. v-model="projectForm.projectLeader"
  170. placeholder="请选择"
  171. class="w-100p"
  172. clearable
  173. filterable
  174. >
  175. <el-option
  176. v-for="item in createUserItems"
  177. :key="item.id"
  178. :label="item.name"
  179. :value="item.id">
  180. </el-option>
  181. </el-select>
  182. </el-form-item>
  183. </el-col>
  184. <el-col :span="12">
  185. <el-form-item
  186. label="项目概况"
  187. prop="projectGist"
  188. >
  189. <el-input
  190. v-model="projectForm.projectGist"
  191. type="textarea"
  192. :rows="7"
  193. ></el-input>
  194. </el-form-item>
  195. <el-form-item
  196. label="内置里程"
  197. prop="projectAllMileage"
  198. >
  199. <el-radio-group v-model="radioType">
  200. <el-radio-button label="总里程"></el-radio-button>
  201. <el-radio-button label="路面"></el-radio-button>
  202. <el-radio-button label="路基"></el-radio-button>
  203. </el-radio-group>
  204. <el-input-number
  205. v-model="projectForm.projectAllMileage"
  206. v-show="radioType == '总里程'"
  207. :min="0"
  208. label="总里程"
  209. ></el-input-number>
  210. <el-input-number
  211. v-model="projectForm.projectPavement"
  212. v-show="radioType == '路面'"
  213. :min="0"
  214. label="路面"
  215. ></el-input-number>
  216. <el-input-number
  217. v-model="projectForm.projectSubgrade"
  218. v-show="radioType == '路基'"
  219. :min="0"
  220. label="路基"
  221. ></el-input-number>
  222. <span>公里(KM)</span>
  223. </el-form-item>
  224. <el-form-item
  225. label="计划完工日期"
  226. prop="planEndTime"
  227. >
  228. <el-date-picker
  229. v-model="projectForm.planEndTime"
  230. type="date"
  231. format="yyyy 年 MM 月 dd 日"
  232. value-format="yyyy-MM-dd HH:mm:ss"
  233. placeholder="选择日期"
  234. ></el-date-picker>
  235. </el-form-item>
  236. <el-form-item
  237. label="实际完工日期"
  238. prop="actualEndTime"
  239. >
  240. <el-date-picker
  241. v-model="projectForm.actualEndTime"
  242. type="date"
  243. format="yyyy 年 MM 月 dd 日"
  244. value-format="yyyy-MM-dd HH:mm:ss"
  245. placeholder="选择日期"
  246. ></el-date-picker>
  247. </el-form-item>
  248. <el-form-item
  249. label="开启随机数"
  250. prop="isOpenRandomNumber"
  251. >
  252. <el-tooltip slot="label" effect="light" content="开启表单右键功能随机数生成" placement="top">
  253. <span>开启随机数</span>
  254. </el-tooltip>
  255. <el-radio-group v-model="projectForm.isOpenRandomNumber">
  256. <el-radio :label="0">不开启</el-radio>
  257. <el-radio :label="1">开启</el-radio>
  258. </el-radio-group>
  259. </el-form-item>
  260. <el-form-item v-if="false"
  261. label="是否为省级模板"
  262. prop="isOpenRandomNumber"
  263. >
  264. <el-radio-group v-model="projectForm.isOpenRandomNumber" >
  265. <el-radio :label="1">是</el-radio>
  266. <el-radio :label="0">否</el-radio>
  267. </el-radio-group>
  268. </el-form-item>
  269. <el-form-item
  270. label="模板引用"
  271. prop="templateType"
  272. >
  273. <el-tooltip slot="label" effect="light" content="选择该项目引用后台项目WBS模版节点,或是让客户自行导入WBS引用底层节点" placement="top">
  274. <span>模板引用</span>
  275. </el-tooltip>
  276. <el-radio-group v-model="projectForm.templateType">
  277. <el-radio :label="1">模板节点</el-radio>
  278. <el-radio :label="2">底层节点</el-radio>
  279. </el-radio-group>
  280. </el-form-item>
  281. <el-form-item
  282. label="电签短信时效"
  283. prop="msTime"
  284. >
  285. <el-input-number v-model="projectForm.msTime" controls-position="right" style="margin-right: 4px;"></el-input-number>小时
  286. </el-form-item>
  287. </el-col>
  288. </el-row>
  289. </el-form>
  290. </div>
  291. </el-tab-pane>
  292. <el-tab-pane
  293. label="分配WBS模版"
  294. name="2"
  295. :disabled="btnLoad"
  296. >
  297. <div>
  298. <div class="text-align-c">
  299. <el-radio-group
  300. v-model="templateType"
  301. @change="templateTypeChange"
  302. >
  303. <el-radio :label="2">试验</el-radio>
  304. <el-radio :label="1">质检</el-radio>
  305. <el-radio :label="5">征拆</el-radio>
  306. <el-radio :label="3">计量</el-radio>
  307. </el-radio-group>
  308. </div>
  309. <div class="text-align-c mg-t-20" >
  310. <span class="mg-r-20">选择WBS</span>
  311. <el-select
  312. v-model="wbsId"
  313. @change='wbsChange'
  314. :disabled="iswbsselected"
  315. placeholder="请选择WBS"
  316. style="width:500px;"
  317. >
  318. <el-option-group
  319. v-for="group in treeList"
  320. :key="group.label"
  321. :label="group.label"
  322. >
  323. <el-option
  324. v-for="(item,index) in group.options"
  325. :key="index"
  326. :label="item.label"
  327. :value="item.value"
  328. >
  329. </el-option>
  330. </el-option-group>
  331. </el-select>
  332. </div>
  333. <tree-tree
  334. :left-tree-data="leftTreeData"
  335. scrollbarStyle="height:calc(100vh - 500px)"
  336. ref="treetotree"
  337. :show-all-check="true"
  338. @onAddTree="treeChang"
  339. @onDelTree="treeChang"
  340. @onCheckAll="treeChang"
  341. :leftloading="leftloading"
  342. :rightloading="rightloading"
  343. ></tree-tree>
  344. </div>
  345. </el-tab-pane>
  346. <el-tab-pane
  347. label="分配日志WBS"
  348. name="3"
  349. :disabled="btnLoad"
  350. >
  351. <div>
  352. <div class="text-align-c mg-t-20">
  353. <span class="mg-r-20">选择WBS</span>
  354. <el-select
  355. v-model="logWbsId"
  356. @change="logWbsChange"
  357. :disabled="selected"
  358. placeholder="请选择WBS"
  359. style="width:500px;"
  360. >
  361. <el-option-group
  362. v-for="group in logTreeList"
  363. :key="group.label"
  364. :label="group.label"
  365. >
  366. <el-option
  367. v-for="(item,index) in group.options"
  368. :key="index"
  369. :label="item.label"
  370. :value="item.value"
  371. >
  372. </el-option>
  373. </el-option-group>
  374. </el-select>
  375. </div>
  376. <tree-tree
  377. :left-tree-data="logLeftTreeData"
  378. ref="treetotree2"
  379. :show-all-check="true"
  380. @onAddTree="treeChang3"
  381. @onDelTree="treeChang3"
  382. @onCheckAll="treeChang3"
  383. :leftloading="logleftloading"
  384. :rightloading="logrightloading"
  385. scrollbarStyle="height:calc(100vh - 500px)"
  386. ></tree-tree>
  387. </div>
  388. </el-tab-pane>
  389. <el-tab-pane
  390. label="分配系统维护人员"
  391. name="4"
  392. :disabled="btnLoad"
  393. >
  394. <div>
  395. <div class="flex jc-al-c">
  396. <span class="mg-r-10">项目名称</span>
  397. <el-input
  398. v-model="projectForm.projectName"
  399. disabled
  400. style="width:300px;margin-right:30px;"
  401. ></el-input>
  402. <span class="mg-r-10">合同段名称</span>
  403. <el-select
  404. v-model="cId"
  405. placeholder="请选择"
  406. @change="getUserByCondition"
  407. >
  408. <el-option
  409. label="全部"
  410. value=""
  411. ></el-option>
  412. <el-option
  413. v-for="item in contractList"
  414. :key="item.id"
  415. :label="item.contractName"
  416. :value="item.id"
  417. ></el-option>
  418. </el-select>
  419. </div>
  420. <el-divider></el-divider>
  421. <div class="flex jc-al-c mg-b-10">
  422. <span>维护人员角色</span>
  423. <avue-input-tree
  424. class="marleft10"
  425. :check-strictly="true"
  426. v-model="rId"
  427. placeholder="请选择"
  428. type="tree"
  429. :dic="roleList"
  430. :props="treeProps"
  431. @change="getUserByCondition"
  432. ></avue-input-tree>
  433. <!-- <el-select v-model="rId" clearable placeholder="请选择" @change="getUserByCondition">
  434. <el-option v-for="item in roleList" :key="item.id" :label="item.title" :value="item.id"></el-option>
  435. </el-select> -->
  436. </div>
  437. <div>
  438. <el-table
  439. :data="contractUserList"
  440. border
  441. height="420"
  442. style="width: 100%"
  443. >
  444. <el-table-column
  445. prop="name"
  446. label="姓名"
  447. align="center"
  448. ></el-table-column>
  449. <el-table-column
  450. prop="contractName"
  451. label="合同段名称"
  452. align="center"
  453. ></el-table-column>
  454. <el-table-column
  455. prop="postName"
  456. label="岗位"
  457. align="center"
  458. ></el-table-column>
  459. <el-table-column
  460. prop="phone"
  461. label="电话"
  462. align="center"
  463. ></el-table-column>
  464. <el-table-column
  465. label="操作"
  466. align="center"
  467. >
  468. <template slot-scope="scope">
  469. <el-button
  470. size="mini"
  471. type="danger"
  472. @click="handleDelete(scope.$index, scope.row)"
  473. >删除</el-button>
  474. </template>
  475. </el-table-column>
  476. </el-table>
  477. </div>
  478. <div class="martop10 flexEnd">
  479. <el-pagination
  480. background
  481. @size-change="handleSizeChange"
  482. @current-change="handleCurrentChange"
  483. :current-page.sync="pageindx"
  484. :page-size="pagesize"
  485. layout="total, prev, pager, next"
  486. :total="total"
  487. >
  488. </el-pagination>
  489. </div>
  490. <div class="flex jc-al-c mg-t-20">
  491. <span>添加系统内部人员</span>
  492. <el-select
  493. class="marleft10"
  494. v-model="userId"
  495. filterable
  496. placeholder="请输入搜索"
  497. >
  498. <el-option
  499. v-for="item in userList"
  500. :key="item.id"
  501. :label="item.name"
  502. :value="item.id"
  503. ></el-option>
  504. </el-select>
  505. <el-button
  506. type="success"
  507. class="marleft10"
  508. @click="addUserToProject"
  509. >添加</el-button>
  510. <el-button
  511. type="primary"
  512. @click="rputerPush()"
  513. >创建新用户</el-button>
  514. <el-button
  515. type="danger"
  516. @click="handleDeletes"
  517. >全部删除</el-button>
  518. </div>
  519. <el-divider></el-divider>
  520. </div>
  521. </el-tab-pane>
  522. </el-tabs>
  523. <div class="flexEnd">
  524. <el-button
  525. :type="activeType != 4?'info':'success'"
  526. size="medium"
  527. :disabled="saveBtnDisabled
  528. || leftloading || logleftloading
  529. || rightloading || logrightloading"
  530. :loading="saveBtnLoad"
  531. @click="saveQuit"
  532. >保存并退出</el-button>
  533. <el-button
  534. type="info"
  535. size="medium"
  536. :disabled="saveBtnBackDisabled
  537. || leftloading || logleftloading
  538. || rightloading || logrightloading"
  539. :loading="saveBtnBackLoad"
  540. v-if="activeType != 1"
  541. @click="saveNext('p')"
  542. >保存并返回上一步</el-button>
  543. <el-button
  544. type="success"
  545. size="medium"
  546. :disabled="saveBtnNextDisabled
  547. || leftloading || logleftloading
  548. || rightloading || logrightloading"
  549. :loading="saveBtnNextLoad"
  550. v-if="activeType != 4"
  551. @click="saveNext('n')"
  552. >保存并进入下一步</el-button>
  553. </div>
  554. </div>
  555. </basic-container>
  556. </template>
  557. <script>
  558. import {
  559. submitProject, getProjectDeatil, findWbsTreeList, findProjectTree,
  560. submitWbsTreeInProject, getProjectDeatilWbsId, findLogWbsTreeList, submitLogWbsTreeInProject
  561. } from "@/api/manager/projectinfo";
  562. import {
  563. findContractByProjectId, saveUserInfoByProject, findUserListByCondition,
  564. findUserByName, removeUsersByIds
  565. } from "@/api/manager/contractinfo";
  566. import { getRoleTree } from "@/api/system/role";
  567. import { getAlltree } from "@/api/manager/wbstree";
  568. import { getDictionary } from "@/api/system/dict";
  569. import { mapGetters } from "vuex";
  570. import treeTree from "@/components/tree-tree/main"
  571. import { findUserList } from "@/api/manager/contractinfo";
  572. import { queryBusinessUserOpinionList } from "@/api/measure/template.js";
  573. import {getList} from "@/api/system/user";
  574. export default {
  575. components: {
  576. treeTree
  577. },
  578. data () {
  579. var checkDate = (rule, value, callback) => {
  580. if (value && this.projectForm.planStartTime) {
  581. if (Date.parse(value) < Date.parse(this.projectForm.planStartTime)) {
  582. callback(new Error('计划完工日期不能小于开工日期'));
  583. }
  584. }
  585. callback();
  586. };
  587. var checkDate2 = (rule, value, callback) => {
  588. if (value && this.projectForm.actualStartTime) {
  589. if (Date.parse(value) < Date.parse(this.projectForm.actualStartTime)) {
  590. callback(new Error('实际完工日期不能小于开工日期'));
  591. }
  592. }
  593. callback();
  594. };
  595. var checkIsNumber = (rule, value, callback) => {
  596. if (value != Number(value)) {
  597. callback(new Error('金额必须是数字'));
  598. }
  599. if (value && 999999999999999999 < Number(value)) {
  600. callback(new Error('数字过大'));
  601. }
  602. callback();
  603. };
  604. var checkMileage = (rule, value, callback) => {
  605. if (this.projectForm.projectPavement || this.projectForm.projectSubgrade) {
  606. if (this.projectForm.projectPavement) {
  607. if (this.projectForm.projectPavement > value) {
  608. callback(new Error('总里程必须是最大的'));
  609. }
  610. } else if (this.projectForm.projectSubgrade) {
  611. if (this.projectForm.projectSubgrade > value) {
  612. callback(new Error('总里程必须是最大的'));
  613. }
  614. }
  615. if (this.projectForm.projectPavement && this.projectForm.projectSubgrade) {
  616. if ((this.projectForm.projectPavement + this.projectForm.projectSubgrade) > value) {
  617. callback(new Error('总里程必须大于两项总和'));
  618. }
  619. }
  620. }
  621. callback();
  622. };
  623. return {
  624. //#region
  625. pageindx: 1,
  626. pagesize: 10,
  627. total: 0,
  628. //#endregion
  629. activeType: '1',
  630. typeChang: {
  631. 1: false,
  632. 2: false,
  633. 3: false,
  634. 4: false,
  635. },
  636. btnLoad: false,
  637. saveBtnLoad: false,
  638. saveBtnDisabled: false,
  639. saveBtnBackLoad: false,
  640. saveBtnBackDisabled: false,
  641. saveBtnNextLoad: false,
  642. saveBtnNextDisabled: false,
  643. id: '',
  644. highwayGradeList: [],
  645. meterTemplateOption:[],//计量单元列表
  646. radioType: '总里程',
  647. proStatusItems: [
  648. { type:'info', label: '未开始',value: 0 },
  649. { type: 'primary', label: '配置中' ,value: 1 },
  650. { type: 'warning', label: '进行中' ,value: 2 },
  651. { type: 'success', label: '已完成' ,value: 3 },
  652. ],
  653. projectForm: {
  654. estimatedAmount: 0,
  655. isOpenRandomNumber:1,
  656. approvalType:2,
  657. msTime:1
  658. },
  659. projectRules: {
  660. projectName: [
  661. { required: true, message: '请输入项目名称', trigger: 'blur' },
  662. ],
  663. projectAlias: [
  664. { required: true, message: '请输入项目别名', trigger: 'blur' },
  665. ],
  666. planStartTime: [{ required: true, message: '请选择计划开工日期', trigger: 'blur' },],
  667. planEndTime: [
  668. { validator: checkDate, trigger: 'blur' }
  669. ],
  670. actualEndTime: [
  671. { validator: checkDate2, trigger: 'blur' }
  672. ],
  673. estimatedAmount: [
  674. { validator: checkIsNumber, trigger: 'blur' }
  675. ],
  676. projectAllMileage: [
  677. { validator: checkMileage, trigger: 'blur' }
  678. ],
  679. remarkType: [
  680. { required: true, message: '请选择电签类别', trigger: 'blur' },
  681. ],
  682. templateType:[
  683. { required: true, message: '请选择是否模板引用', trigger: 'blur' },
  684. ],
  685. sgSuffix:[
  686. { required: true, message: '请输入施工文件后缀', trigger: 'blur' },
  687. ],
  688. jlSuffix:[
  689. { required: true, message: '请输入监理文件前缀', trigger: 'blur' },
  690. ],
  691. msTime:[
  692. { required: true, message: '请输入电签短信时效', trigger: 'blur' },
  693. ],
  694. },
  695. contractList: [],
  696. cId: '',
  697. rId: '',
  698. roleList: [],
  699. userId: '',
  700. userList: [],
  701. contractUserList: [],
  702. treeProps: {
  703. label: "dictValue",
  704. value: "id"
  705. },
  706. templateType: 1,
  707. treeList: [],
  708. logTreeList: [],
  709. wbsId: '',
  710. iswbsselected:true,//右边有数据禁用下拉框选择
  711. logWbsId: '',
  712. selected: false,
  713. leftTreeData: [],
  714. logLeftTreeData: [],
  715. leftloading:false,
  716. rightloading:false,
  717. logleftloading:false,
  718. logrightloading:false,
  719. selectData:{},
  720. isFirst:false,
  721. rightTreeData:[],//存储右边的试验树数据
  722. rightTreeData1:[],//存储右边的质检树数据
  723. rightTreeData2:[],//存储征拆数据
  724. rightTreeData3:[],//存储计量数据
  725. rightObj:[
  726. ],
  727. rightObj1:[
  728. ],
  729. rightObj2:[
  730. ],
  731. rightObj3:[
  732. ],
  733. nowref:{},
  734. finalWbsid:'',
  735. finalIds:'',
  736. createUserItems:[]
  737. }
  738. },
  739. computed: {
  740. ...mapGetters(["userInfo"]),
  741. },
  742. watch: {
  743. projectForm: {
  744. immediate:false,
  745. handler: function () { // 此处注意,handler函数不能为箭头函数,this会取上下文,而不是组件里的this,此外,深度监听,必须为handler函数名,否则会无效果
  746. // this.typeChang['1'] = true;
  747. if(this.isFirst===false){
  748. this.typeChang['1'] = true;
  749. }
  750. },
  751. deep: true
  752. },
  753. activeType: function (newValue) {
  754. if (newValue == '4') {
  755. this.getContractList();
  756. this.getRoleList();
  757. this.getUserByCondition();
  758. this.getUserByName();
  759. } else if (newValue == '2') {
  760. this.treeInit();
  761. } else if (newValue == '3') {
  762. this.treeLogInit();
  763. }
  764. }
  765. },
  766. created () {
  767. this.init();
  768. //console.log(this.userInfo)
  769. },
  770. mounted () {
  771. this.$nextTick(() => {
  772. this.typeChang = {
  773. 1: false,
  774. 2: false,
  775. 3: false,
  776. 4: false,
  777. }
  778. })
  779. },
  780. methods: {
  781. getCreateUserItems(){
  782. getList(
  783. 1,
  784. 1000,
  785. {},
  786. '1536982621165592577',
  787. ).then(res => {
  788. this.createUserItems = res.data.data.records;
  789. })
  790. },
  791. //#region //后加分页
  792. handleSizeChange (val) {
  793. this.pagesize = val
  794. this.getUserByCondition();
  795. },
  796. handleCurrentChange (val) {
  797. this.pageindx = val
  798. this.getUserByCondition();
  799. },
  800. rputerPush () {
  801. this.$router.push({
  802. path: '/system/user',
  803. query: { tankai: true }
  804. })
  805. },
  806. //#endregion
  807. init () {
  808. this.getCreateUserItems();
  809. this.getHighwayGradeList();
  810. this.getMeterTemplateOption()
  811. this.id = this.$route.query.id;
  812. if (this.id) {
  813. this.getProjectDeatil();
  814. }
  815. },
  816. beforeLeave (activeName, oldActiveName) {
  817. return new Promise((resolve, reject) => {
  818. if (oldActiveName == '1' && !this.projectForm.id) {
  819. this.$message({
  820. type: "warning",
  821. message: "请先保存项目后,再进行项目的分配"
  822. });
  823. // reject();
  824. }
  825. if (this.typeChang[oldActiveName]) {
  826. this.$confirm('检测到新编辑内容, 是否保存?', '提示', {
  827. confirmButtonText: '确定',
  828. cancelButtonText: '不用',
  829. type: 'warning'
  830. }).then(() => {
  831. switch (oldActiveName) {
  832. case '1':
  833. this.saveProject().then((res) => {
  834. this.projectForm.id = res.data.data.id;
  835. this.typeChang[oldActiveName] = false;
  836. resolve();
  837. this.$message({
  838. type: "success",
  839. message: "保存成功!"
  840. });
  841. });
  842. break;
  843. case '2':
  844. this.saveWbsTree().then(() => {
  845. this.typeChang[oldActiveName] = false;
  846. resolve();
  847. this.$message({
  848. type: "success",
  849. message: "保存成功!"
  850. });
  851. }).catch(() => {
  852. console.log("beforeLeave catch getRightTree")
  853. this.getRightTree();
  854. reject();
  855. })
  856. break;
  857. }
  858. }).catch(() => {
  859. this.typeChang[oldActiveName] = false;
  860. resolve();
  861. })
  862. } else {
  863. resolve();
  864. }
  865. })
  866. },
  867. getProjectDeatil () {
  868. getProjectDeatil(this.id).then((res) => {
  869. const data = res.data.data
  870. console.log(data)
  871. this.projectForm = data;
  872. this.isFirst=true;
  873. setTimeout(() => {
  874. this.isFirst=false;
  875. }, 1000);
  876. console.log(data,'data项目详情');
  877. this.selectData={
  878. referenceWbsTemplateId:data.referenceWbsTemplateId,//质检
  879. referenceWbsTemplateIdLar:data.referenceWbsTemplateIdLar,//征拆
  880. referenceWbsTemplateIdMeter:data.referenceWbsTemplateIdMeter,//计量
  881. referenceWbsTemplateIdTrial:data.referenceWbsTemplateIdTrial===-1?'':data.referenceWbsTemplateIdTrial//试验
  882. }
  883. if (Number(this.projectForm.estimatedAmount) < 0) {
  884. this.projectForm.estimatedAmount = 0
  885. }
  886. this.$nextTick(() => {
  887. this.typeChang['1'] = false;
  888. })
  889. let templateType = 'public';
  890. if (this.projectForm.referenceWbsTemplateType) {
  891. templateType = this.projectForm.referenceWbsTemplateType;
  892. }
  893. getProjectDeatilWbsId(this.id, this.projectForm.referenceWbsTemplateId, templateType).then((res) => {
  894. this.projectForm.wbsType = res.data.data.wbsType;
  895. })
  896. })
  897. },
  898. async saveQuit () {
  899. console.log('保存2',this.selectData);
  900. this.btnLoad = true;
  901. this.saveBtnLoad = true;
  902. this.saveBtnBackDisabled = true
  903. this.saveBtnNextDisabled = true
  904. try {
  905. if (this.activeType == '1') {
  906. await this.saveProject();
  907. } else if (this.activeType == '2') {
  908. await this.saveWbsTree();
  909. } else if (this.activeType == '3'){
  910. await this.saveLogWbsTree();
  911. }
  912. } catch (error) {
  913. this.btnLoad = false;
  914. this.saveBtnLoad = false;
  915. this.saveBtnBackDisabled = false
  916. this.saveBtnNextDisabled = false
  917. if(this.activeType == '2'){
  918. console.log("saveQuit getRightTree")
  919. this.getRightTree();
  920. }
  921. return;
  922. }
  923. this.$message({
  924. type: "success",
  925. message: "保存成功!"
  926. });
  927. this.btnLoad = false;
  928. this.saveBtnLoad = false;
  929. this.saveBtnBackDisabled = false
  930. this.saveBtnNextDisabled = false
  931. this.$router.go(-1);
  932. },
  933. async saveNext (type) {
  934. console.log('保存',this.activeType,this.selectData);
  935. this.btnLoad = true;
  936. if (type == 'n') {
  937. this.saveBtnNextLoad = true;
  938. this.saveBtnBackDisabled = true
  939. this.saveBtnDisabled = true
  940. } else if (type == 'p') {
  941. this.saveBtnBackLoad = true;
  942. this.saveBtnNextDisabled = true
  943. this.saveBtnDisabled = true
  944. }
  945. try {
  946. if (this.activeType == '1') {
  947. let res = await this.saveProject();
  948. this.projectForm.id = res.data.data.id;
  949. } else if (this.activeType == '2') {
  950. await this.saveWbsTree();
  951. } else if (this.activeType == '3'){
  952. await this.saveLogWbsTree();
  953. if(type == 'p'){
  954. console.log(this.wbsId,'wbsis');
  955. }
  956. }
  957. } catch (error) {
  958. this.btnLoad = false;
  959. if (type == 'n') {
  960. this.saveBtnNextLoad = false;
  961. this.saveBtnBackDisabled = false
  962. this.saveBtnDisabled = false
  963. } else if (type == 'p') {
  964. this.saveBtnBackLoad = false;
  965. this.saveBtnNextDisabled = false
  966. this.saveBtnDisabled = false
  967. }
  968. if(this.activeType == '2'){
  969. console.log("saveNext getRightTree")
  970. this.getRightTree();
  971. // this.templateType=1
  972. }
  973. return;
  974. }
  975. this.$message({
  976. type: "success",
  977. message: "保存成功!"
  978. });
  979. this.typeChang[this.activeType] = false;
  980. let num = Number(this.activeType);
  981. if (type == 'n') {
  982. num++;
  983. } else if (type == 'p') {
  984. num--;
  985. }
  986. this.activeType = num.toString();
  987. this.btnLoad = false;
  988. if (type == 'n') {
  989. this.saveBtnNextLoad = false;
  990. this.saveBtnBackDisabled = false
  991. this.saveBtnDisabled = false
  992. } else if (type == 'p') {
  993. this.saveBtnBackLoad = false;
  994. this.saveBtnNextDisabled = false
  995. this.saveBtnDisabled = false
  996. }
  997. },
  998. saveProject () {
  999. console.log('保存3',this.selectData);
  1000. return new Promise((resolve, reject) => {
  1001. this.$refs['projectForm'].validate((valid) => {
  1002. if (valid) {
  1003. resolve(submitProject(this.projectForm))
  1004. } else {
  1005. reject('验证失败')
  1006. }
  1007. })
  1008. })
  1009. },
  1010. saveLogWbsTree() {
  1011. let ids = this.$refs.treetotree2.getTreeAllId('rightTree');
  1012. let obj = {
  1013. wbsId: this.logWbsId,
  1014. projectId: this.projectForm.id,
  1015. wbsType: "4",
  1016. wbsTreeIds: ids
  1017. };
  1018. return submitLogWbsTreeInProject(obj);
  1019. },
  1020. saveWbsTree () {
  1021. let obj = {};
  1022. let ids = this.$refs.treetotree.getTreeAllId('rightTree');
  1023. // if(this.finalWbsid.length>0){
  1024. // this.wbsId=this.finalWbsid
  1025. // }
  1026. console.log(this.finalIds,'finalIds');
  1027. obj = {
  1028. wbsId: this.wbsId,
  1029. projectId: this.projectForm.id,
  1030. wbsType: this.templateType,
  1031. wbsTreeIds: ids
  1032. }
  1033. console.log(this.wbsId,'this.wbsId最终');
  1034. console.log(this.projectForm,'projectForm');
  1035. if (this.wbsId.toString().indexOf(',') >= 0) {
  1036. //私有库
  1037. obj.referenceType = "private";
  1038. let ids = this.wbsId.toString().split(',');
  1039. // obj.wbsId = this.finalWbsid;
  1040. obj.wbsId = ids[0];
  1041. obj.referencePrivateWbsProjectId = ids[1];
  1042. obj.primaryKeyId = this.leftTreeData[0].primaryKeyId;
  1043. } else {
  1044. //公有库
  1045. obj.referenceType = "public";
  1046. obj.wbsId = this.wbsId;
  1047. // obj.wbsId = this.finalWbsid;
  1048. }
  1049. return submitWbsTreeInProject(obj);
  1050. },
  1051. addUserToProject () {
  1052. if (!this.userId) {
  1053. this.$message({
  1054. type: "warning",
  1055. message: "请先选择用户再进行添加"
  1056. });
  1057. return;
  1058. }
  1059. if (!this.rId) {
  1060. this.$message({
  1061. type: "warning",
  1062. message: "请先选择维护人员角色再进行添加"
  1063. });
  1064. return;
  1065. }
  1066. let list = [{
  1067. projectId: this.projectForm.id,
  1068. contractId: this.cId ? this.cId : undefined,
  1069. userId: this.userId,
  1070. roleId: this.rId
  1071. }];
  1072. saveUserInfoByProject(list).then(() => {
  1073. this.getUserByCondition();
  1074. })
  1075. },
  1076. getUserByCondition () {
  1077. findUserListByCondition({
  1078. cId: this.cId,
  1079. pId: this.projectForm.id,
  1080. postId: '',
  1081. rId: this.rId,
  1082. size: this.pagesize,
  1083. current: this.pageindx
  1084. }).then((res) => {
  1085. this.contractUserList = res.data.data.records;
  1086. this.total = res.data.data.total
  1087. })
  1088. },
  1089. getUserByName () {
  1090. findUserList('').then((res) => {
  1091. this.userList = res.data.data;
  1092. })
  1093. },
  1094. handleDelete (index, row) {
  1095. this.$confirm('是否将该用户移除出合同段', '提示', {
  1096. confirmButtonText: '确定',
  1097. cancelButtonText: '取消',
  1098. type: 'warning'
  1099. }).then(() => {
  1100. removeUsersByIds(row.id).then(() => {
  1101. this.contractUserList.splice(index, 1);
  1102. this.$message({
  1103. type: "success",
  1104. message: "删除成功!"
  1105. });
  1106. })
  1107. })
  1108. },
  1109. handleDeletes () {
  1110. this.$confirm('是否将所有用户移除出合同段', '提示', {
  1111. confirmButtonText: '确定',
  1112. cancelButtonText: '取消',
  1113. type: 'warning'
  1114. }).then(() => {
  1115. let ids = [];
  1116. this.contractUserList.forEach((element) => {
  1117. ids.push(element.id);
  1118. })
  1119. removeUsersByIds(ids.join(',')).then(() => {
  1120. this.contractUserList = [];
  1121. this.$message({
  1122. type: "success",
  1123. message: "删除成功!"
  1124. });
  1125. })
  1126. })
  1127. },
  1128. getHighwayGradeList () {
  1129. if (this.highwayGradeList.length > 1) {
  1130. return;
  1131. }
  1132. getDictionary({
  1133. code: 'highway_grade'
  1134. }).then((res) => {
  1135. // res.data.data.forEach(element => {
  1136. // element.dictKey = Number(element.dictKey)
  1137. // });
  1138. this.highwayGradeList = res.data.data;
  1139. })
  1140. },
  1141. getMeterTemplateOption(){
  1142. queryBusinessUserOpinionList().then((res)=>{
  1143. this.meterTemplateOption=res.data.data
  1144. })
  1145. },
  1146. getContractList () {
  1147. if (this.contractList.length < 1) {
  1148. findContractByProjectId(this.projectForm.id).then((res) => {
  1149. this.contractList = res.data.data;
  1150. })
  1151. }
  1152. },
  1153. getRoleList () {
  1154. if (this.roleList.length > 1) {
  1155. return;
  1156. }
  1157. getRoleTree().then((res) => {
  1158. this.roleList = res.data.data
  1159. })
  1160. },
  1161. logWbsChange(value){
  1162. //公有库
  1163. this.logleftloading = true;
  1164. getAlltree(this.userInfo.tenant_id, '1', value).then((res) => {
  1165. if (Array.isArray(res.data.data)) {
  1166. this.logLeftTreeData = res.data.data;
  1167. } else {
  1168. this.logLeftTreeData = [];
  1169. }
  1170. this.logleftloading = false;
  1171. })
  1172. },
  1173. wbsChange (value, flag) {
  1174. console.log(value, 'WBS节点更换测试 value')
  1175. this.iswbsselected=false
  1176. if(this.templateType==1){
  1177. this.selectData.referenceWbsTemplateId=value
  1178. }else if(this.templateType==5){
  1179. this.selectData.referenceWbsTemplateIdLar=value
  1180. }
  1181. else if(this.templateType==3){
  1182. this.selectData.referenceWbsTemplateIdMeter=value
  1183. }
  1184. else{
  1185. this.selectData.referenceWbsTemplateIdTrial=value
  1186. }
  1187. this.leftloading = true;
  1188. if (value&&value.toString().indexOf(',') >= 0) {
  1189. console.log('私有库');
  1190. //私有库
  1191. if(this.templateType==1){
  1192. this.projectForm.referenceWbsTemplateType='private'
  1193. }else if(this.templateType==5){
  1194. this.projectForm.referenceWbsTemplateTypeLar='private'
  1195. }
  1196. else if(this.templateType==2){
  1197. this.projectForm.referenceWbsTemplateTypeMeter='private'
  1198. }
  1199. else{
  1200. this.projectForm.referenceWbsTemplateTypeTrial='private'
  1201. }
  1202. let ids = value.toString().split(',');
  1203. console.log(ids,'ids');
  1204. findProjectTree(ids[1], ids[0]).then((res) => {
  1205. if (Array.isArray(res.data.data)) {
  1206. this.leftTreeData = res.data.data;
  1207. } else {
  1208. this.leftTreeData = [];
  1209. }
  1210. this.leftloading = false;
  1211. })
  1212. this.getRightTree()
  1213. } else {
  1214. console.log('公有库');
  1215. //公有库
  1216. if(value&&value.length>0){
  1217. if(this.templateType==1){
  1218. this.projectForm.referenceWbsTemplateType='public'
  1219. }
  1220. else if(this.templateType==5){
  1221. this.projectForm.referenceWbsTemplateTypeLar='public'
  1222. }
  1223. else if(this.templateType==2){
  1224. this.projectForm.referenceWbsTemplateTypeMeter='public'
  1225. }
  1226. else{
  1227. this.projectForm.referenceWbsTemplateTypeTrial='public'
  1228. }
  1229. }
  1230. getAlltree(this.userInfo.tenant_id, '1', value).then((res) => {
  1231. if (Array.isArray(res.data.data)) {
  1232. this.leftTreeData = res.data.data;
  1233. console.log("this.leftTreeData", this.leftTreeData)
  1234. } else {
  1235. this.leftTreeData = [];
  1236. }
  1237. this.leftloading = false;
  1238. })
  1239. this.getRightTree()
  1240. }
  1241. if (flag === undefined) { /* 下拉框切换的时候调用 */
  1242. this.getRightTree();
  1243. }
  1244. },
  1245. getLogTreeList(){
  1246. return new Promise((resolve) => {
  1247. if (this.logTreeList.length) {
  1248. resolve();
  1249. }
  1250. findLogWbsTreeList().then((res) => {
  1251. let arr = [{
  1252. label: '公有库',
  1253. options: [],
  1254. }];
  1255. let data = res.data.data;
  1256. if (data && data.length) {
  1257. data.forEach((element) => {
  1258. element.label = element.wbsName;
  1259. element.value = element.id;
  1260. })
  1261. arr[0].options = data;
  1262. }
  1263. this.logTreeList = arr;
  1264. }).finally(() => {
  1265. resolve();
  1266. })
  1267. })
  1268. },
  1269. getTreeList () {
  1270. console.log('getTreeList');
  1271. return new Promise((resolve) => {
  1272. if (this.treeList.length) {
  1273. resolve();
  1274. }
  1275. findWbsTreeList(this.templateType).then((res) => {
  1276. let arr = [{
  1277. label: '公有库',
  1278. options: [],
  1279. },
  1280. {
  1281. label: '私有库',
  1282. options: [],
  1283. }];
  1284. let data = res.data.data;
  1285. if (data.wbsInfos && data.wbsInfos.length) {
  1286. data.wbsInfos.forEach((element) => {
  1287. element.label = element.wbsName;
  1288. element.value = element.id;
  1289. })
  1290. arr[0].options = data.wbsInfos;
  1291. }
  1292. if (data.wbsTreePrivates && data.wbsTreePrivates.length) {
  1293. data.wbsTreePrivates.forEach((element) => {
  1294. element.label = element.projectName;
  1295. element.value = element.wbsId + ',' + element.projectId;
  1296. })
  1297. arr[1].options = data.wbsTreePrivates;
  1298. }
  1299. this.treeList = arr;
  1300. // this.wbsChange(this.wbsId, true)
  1301. }).finally(() => {
  1302. resolve();
  1303. })
  1304. })
  1305. },
  1306. //格式化wbsid
  1307. formatWbsId(orid){
  1308. let refId = orid;
  1309. let WbsId=''
  1310. if ((this.templateType == 1 && this.projectForm.referenceWbsTemplateType === 'private')
  1311. || (this.templateType == 2 && this.projectForm.referenceWbsTemplateTypeTrial === 'private')
  1312. || (this.templateType == 5 && this.projectForm.referenceWbsTemplateTypeLar === 'private')
  1313. || (this.templateType == 3 && this.projectForm.referenceWbsTemplateTypeMeter === 'private')
  1314. && refId != null && refId.toString().length > 0) {
  1315. console.log(refId,'refId');
  1316. // 私有库右边树形数据是通过 pkeyId 查询的
  1317. let ids = refId.toString().split(",");
  1318. console.log(ids,'ids');
  1319. if (ids.length > 1) {
  1320. refId = ids[0]
  1321. console.log(refId,'refId');
  1322. console.log(this.treeList,'treeList');
  1323. let list = this.treeList[1].options;
  1324. refId = list.filter(e => e.projectId == ids[1])[0].pkeyId;
  1325. WbsId=refId
  1326. }
  1327. }else{
  1328. console.log(3333333);
  1329. WbsId=refId
  1330. }
  1331. return WbsId
  1332. },
  1333. treeChang () {
  1334. let recordid= this.formatWbsId(this.wbsId)
  1335. console.log(recordid,'recordid');
  1336. if (this.templateType===2) {
  1337. this.rightTreeData=this.$refs.treetotree.rightTreeData;
  1338. // this.rightObj.push({
  1339. // wbsid:this.wbsId,objdata: this.rightTreeData
  1340. // })
  1341. this.rightObj.wbsId=recordid
  1342. this.rightObj.objdata=this.rightTreeData
  1343. }else if(this.templateType===5){
  1344. this.rightTreeData2=this.$refs.treetotree.rightTreeData
  1345. this.rightObj2.wbsId=recordid
  1346. this.rightObj2.objdata=this.rightTreeData2
  1347. }
  1348. else if(this.templateType===3){//计量
  1349. this.rightTreeData3=this.$refs.treetotree.rightTreeData
  1350. this.rightObj3.wbsId=recordid
  1351. this.rightObj3.objdata=this.rightTreeData3
  1352. }
  1353. else{
  1354. this.rightTreeData1=this.$refs.treetotree.rightTreeData
  1355. // this.rightObj1.push({
  1356. // wbsid:this.wbsId,objdata: this.rightTreeData
  1357. // })
  1358. this.rightObj1.wbsId=recordid
  1359. this.rightObj1.objdata=this.rightTreeData1
  1360. }
  1361. this.typeChang[2] = true;
  1362. },
  1363. treeChang3 () {
  1364. this.typeChang[3] = true;
  1365. },
  1366. templateTypeChange () {
  1367. findWbsTreeList(this.templateType).then((res) => {
  1368. let arr = [
  1369. {label: '公有库', options: []},
  1370. {label: '私有库', options: []}
  1371. ];
  1372. let data = res.data.data;
  1373. if (data.wbsInfos && data.wbsInfos.length) {
  1374. data.wbsInfos.forEach((element) => {
  1375. element.label = element.wbsName;
  1376. element.value = element.id;
  1377. })
  1378. arr[0].options = data.wbsInfos;
  1379. }
  1380. if (data.wbsTreePrivates && data.wbsTreePrivates.length) {
  1381. data.wbsTreePrivates.forEach((element) => {
  1382. element.label = element.projectName;
  1383. element.value = element.wbsId + ',' + element.projectId;
  1384. })
  1385. arr[1].options = data.wbsTreePrivates;
  1386. }
  1387. this.treeList = arr;
  1388. this.wbsId = this.templateType == 1 ? this.selectData.referenceWbsTemplateId : this.selectData.referenceWbsTemplateIdTrial
  1389. if(this.templateType===5){
  1390. console.log('征拆选择');
  1391. this.wbsId =this.selectData.referenceWbsTemplateIdLar
  1392. }
  1393. if(this.templateType===3){
  1394. console.log('计量选择');
  1395. this.wbsId =this.selectData.referenceWbsTemplateIdMeter
  1396. }
  1397. console.log(this.wbsId===-1);
  1398. if(this.wbsId===-1){
  1399. this.wbsId=''
  1400. }
  1401. this.wbsChange(this.wbsId, true)
  1402. // if(this.treeList[0].options.length > 0){
  1403. // this.wbsId = this.treeList[0].options[0].value;
  1404. // this.wbsChange(this.wbsId)
  1405. // }else if(this.treeList[1].options.length > 0){
  1406. // this.wbsId = this.treeList[1].options[0].value;
  1407. // this.wbsChange(this.wbsId)
  1408. // }else{
  1409. // this.wbsId = '';
  1410. // this.leftTreeData = [];
  1411. // }
  1412. })
  1413. },
  1414. async treeLogInit(){
  1415. let refId = this.projectForm.referenceLogWbsTemplateId;
  1416. if(refId && refId > 0 && Number(this.projectForm.wbsType) > 0){
  1417. await this.getLogTreeList();
  1418. this.logWbsId = refId;
  1419. this.logleftloading = true;
  1420. let leftData = await getAlltree(this.userInfo.tenant_id, '1', refId);
  1421. if (Array.isArray(leftData.data.data)) {
  1422. this.logLeftTreeData = leftData.data.data;
  1423. } else {
  1424. this.logLeftTreeData = [];
  1425. }
  1426. this.logleftloading = false;
  1427. this.logrightloading = true;
  1428. let projectTree = await findProjectTree(this.projectForm.id, refId);
  1429. this.$refs.treetotree2.setRightTree(Array.isArray(projectTree.data.data)?projectTree.data.data:[]);
  1430. this.logrightloading = false;
  1431. } else {
  1432. await this.getLogTreeList();
  1433. }
  1434. },
  1435. //初始化质量
  1436. async treeInit () {
  1437. console.log('------------------- treeInit ------------------------');
  1438. let refId = this.selectData.referenceWbsTemplateId;
  1439. console.log(refId, '------------------- treeInit.refId ------------------------');
  1440. if (this.projectForm.referenceWbsTemplateType === 'private' && refId != null && refId.toString().length > 0) {
  1441. // 私有库右边树形数据是通过 pkeyId 查询的
  1442. let ids = refId.toString().split(",");
  1443. if (ids.length > 1) {
  1444. refId = ids[0]
  1445. let list = this.treeList[1].options;
  1446. refId = list.filter(e => e.projectId == ids[1])[0].pkeyId;
  1447. }
  1448. }
  1449. //引用被删会出现 wbsType -1
  1450. if (refId && refId > 0 && Number(this.projectForm.wbsType) > 0) {
  1451. console.log('------------------- treeInit if------------------------');
  1452. //有引用id,回显
  1453. //this.selected = true;
  1454. // this.templateType = this.projectForm.wbsType;
  1455. await this.getTreeList();
  1456. let priv = {};
  1457. if (this.projectForm.referenceWbsTemplateType == 'private') {
  1458. //私有
  1459. let list = this.treeList[1].options;
  1460. for (let i = 0; i < list.length; i++) {
  1461. if (list[i].pkeyId == refId) {
  1462. this.wbsId = list[i].wbsId + ',' + list[i].projectId;
  1463. priv.wbsId = list[i].wbsId;
  1464. priv.projectId = list[i].projectId;
  1465. priv.value= list[i].value
  1466. priv.pkeyId= list[i].pkeyId
  1467. break;
  1468. }
  1469. }
  1470. } else {
  1471. //公有
  1472. this.wbsId = refId;
  1473. }
  1474. if(this.templateType == 1){
  1475. this.selectData.referenceWbsTemplateId =this.wbsId
  1476. }else if(this.templateType==5){
  1477. this.selectData.referenceWbsTemplateIdLar =this.wbsId
  1478. }
  1479. else if(this.templateType==3){
  1480. this.selectData.referenceWbsTemplateIdMeter =this.wbsId
  1481. }
  1482. else{
  1483. this.selectData.referenceWbsTemplateIdTrial=this.wbsId
  1484. }
  1485. this.nowref={
  1486. value:priv.value,
  1487. id: priv.pkeyId
  1488. }
  1489. let projectTree = await findProjectTree(this.projectForm.id, refId) //查询的右边的数据
  1490. if (projectTree&&projectTree.data&&projectTree.data.data&&projectTree.data.data.length>0) {
  1491. this.iswbsselected=true
  1492. }else{
  1493. this.iswbsselected=false
  1494. }
  1495. if (Array.isArray(projectTree.data.data)) {
  1496. this.leftloading = true;
  1497. this.rightloading = true;
  1498. if (this.projectForm.referenceWbsTemplateType == 'private') {
  1499. //私有
  1500. let leftData = await findProjectTree(priv.projectId, priv.wbsId)
  1501. if (Array.isArray(leftData.data.data)) {
  1502. this.leftTreeData = leftData.data.data;
  1503. } else {
  1504. this.leftTreeData = [];
  1505. }
  1506. this.leftloading = false;
  1507. } else {
  1508. //公有
  1509. let leftData = await getAlltree(this.userInfo.tenant_id, '1', refId)
  1510. if (Array.isArray(leftData.data.data)) {
  1511. this.leftTreeData = leftData.data.data;
  1512. } else {
  1513. this.leftTreeData = [];
  1514. }
  1515. this.leftloading = false;
  1516. }
  1517. this.$refs.treetotree.setRightTree(projectTree.data.data);
  1518. console.log(projectTree.data.data,'projectTree.data.data');
  1519. this.rightloading = false;
  1520. }else{
  1521. this.wbsId = '';
  1522. }
  1523. }
  1524. else {
  1525. console.log('------------------- treeInit else------------------------');
  1526. this.getTreeList();
  1527. this.iswbsselected=false
  1528. }
  1529. console.log(this.wbsId,'this.wbsId33333');
  1530. this.treeInitTrial()
  1531. this.treeInitLar()
  1532. this.treeMeasure()
  1533. },
  1534. //初始化征拆
  1535. async treeInitLar () {
  1536. let refId = this.selectData.referenceWbsTemplateIdLar;
  1537. console.log(refId,'refId');
  1538. //引用被删会出现 wbsType -1
  1539. if (refId && refId > 0 && Number(this.projectForm.wbsType) > 0) {
  1540. //有引用id,回显
  1541. //this.selected = true;
  1542. findWbsTreeList(5).then((res) => {
  1543. let arr = [{
  1544. label: '公有库',
  1545. options: [],
  1546. },
  1547. {
  1548. label: '私有库',
  1549. options: [],
  1550. }];
  1551. let data = res.data.data;
  1552. if (data.wbsInfos && data.wbsInfos.length) {
  1553. data.wbsInfos.forEach((element) => {
  1554. element.label = element.wbsName;
  1555. element.value = element.id;
  1556. })
  1557. arr[0].options = data.wbsInfos;
  1558. }
  1559. if (data.wbsTreePrivates && data.wbsTreePrivates.length) {
  1560. data.wbsTreePrivates.forEach((element) => {
  1561. element.label = element.projectName;
  1562. element.value = element.wbsId + ',' + element.projectId;
  1563. })
  1564. arr[1].options = data.wbsTreePrivates;
  1565. }
  1566. let WbsId = 0;
  1567. if (this.projectForm.referenceWbsTemplateTypeLar == 'private') {
  1568. //私有
  1569. let list = arr[1].options;
  1570. console.log(list,'list');
  1571. for (let i = 0; i < list.length; i++) {
  1572. if (list[i].pkeyId == refId) {
  1573. WbsId = list[i].wbsId + ',' + list[i].projectId;
  1574. break;
  1575. }
  1576. }
  1577. } else {
  1578. console.log('共有',refId);
  1579. //公有
  1580. WbsId = refId;
  1581. }
  1582. this.selectData.referenceWbsTemplateIdLar = WbsId
  1583. console.log("征拆", this.selectData)
  1584. })
  1585. } else {
  1586. this.getTreeList();
  1587. }
  1588. },
  1589. //初始化计量
  1590. async treeMeasure () {
  1591. let refId = this.selectData.referenceWbsTemplateIdMeter;
  1592. console.log(refId,'refId');
  1593. //引用被删会出现 wbsType -1
  1594. if (refId && refId > 0 && Number(this.projectForm.wbsType) > 0) {
  1595. //有引用id,回显
  1596. //this.selected = true;
  1597. findWbsTreeList(3).then((res) => {
  1598. let arr = [{
  1599. label: '公有库',
  1600. options: [],
  1601. },
  1602. {
  1603. label: '私有库',
  1604. options: [],
  1605. }];
  1606. let data = res.data.data;
  1607. if (data.wbsInfos && data.wbsInfos.length) {
  1608. data.wbsInfos.forEach((element) => {
  1609. element.label = element.wbsName;
  1610. element.value = element.id;
  1611. })
  1612. arr[0].options = data.wbsInfos;
  1613. }
  1614. if (data.wbsTreePrivates && data.wbsTreePrivates.length) {
  1615. data.wbsTreePrivates.forEach((element) => {
  1616. element.label = element.projectName;
  1617. element.value = element.wbsId + ',' + element.projectId;
  1618. })
  1619. arr[1].options = data.wbsTreePrivates;
  1620. }
  1621. let WbsId = 0;
  1622. if (this.projectForm.referenceWbsTemplateTypeMeter == 'private') {
  1623. //私有
  1624. let list = arr[1].options;
  1625. console.log(list,'list');
  1626. for (let i = 0; i < list.length; i++) {
  1627. if (list[i].pkeyId == refId) {
  1628. WbsId = list[i].wbsId + ',' + list[i].projectId;
  1629. break;
  1630. }
  1631. }
  1632. } else {
  1633. console.log('共有',refId);
  1634. //公有
  1635. WbsId = refId;
  1636. }
  1637. this.selectData.referenceWbsTemplateIdMeter = WbsId
  1638. console.log("计两", this.selectData)
  1639. })
  1640. } else {
  1641. this.getTreeList();
  1642. }
  1643. },
  1644. //初始化试验
  1645. async treeInitTrial () {
  1646. console.log(this.wbsId,'wbsidshiyan');
  1647. let refId = this.selectData.referenceWbsTemplateIdTrial;
  1648. console.log(refId,'wbsidshiyan');
  1649. //引用被删会出现 wbsType -1
  1650. if (refId && refId > 0 && Number(this.projectForm.wbsType) > 0) {
  1651. //有引用id,回显
  1652. //this.selected = true;
  1653. findWbsTreeList(2).then((res) => {
  1654. let arr = [{
  1655. label: '公有库',
  1656. options: [],
  1657. },
  1658. {
  1659. label: '私有库',
  1660. options: [],
  1661. }];
  1662. let data = res.data.data;
  1663. if (data.wbsInfos && data.wbsInfos.length) {
  1664. data.wbsInfos.forEach((element) => {
  1665. element.label = element.wbsName;
  1666. element.value = element.id;
  1667. })
  1668. arr[0].options = data.wbsInfos;
  1669. }
  1670. if (data.wbsTreePrivates && data.wbsTreePrivates.length) {
  1671. data.wbsTreePrivates.forEach((element) => {
  1672. element.label = element.projectName;
  1673. element.value = element.wbsId + ',' + element.projectId;
  1674. })
  1675. arr[1].options = data.wbsTreePrivates;
  1676. }
  1677. let WbsId = 0;
  1678. if (this.projectForm.referenceWbsTemplateTypeTrial == 'private') {
  1679. //私有
  1680. let list = arr[1].options;
  1681. for (let i = 0; i < list.length; i++) {
  1682. if (list[i].pkeyId == refId) {
  1683. WbsId = list[i].wbsId + ',' + list[i].projectId;
  1684. break;
  1685. }
  1686. }
  1687. } else {
  1688. //公有
  1689. WbsId = refId;
  1690. }
  1691. this.selectData.referenceWbsTemplateIdTrial = WbsId
  1692. console.log("treeInitTrial", this.selectData)
  1693. })
  1694. } else {
  1695. this.getTreeList();
  1696. }
  1697. },
  1698. getRightTree() {
  1699. this.rightloading = true;
  1700. this.iswbsselected=true
  1701. console.log(this.nowref,'nowrefId');
  1702. let refId = this.templateType === 1? this.selectData.referenceWbsTemplateId : this.selectData.referenceWbsTemplateIdTrial;
  1703. if(this.templateType===5){
  1704. console.log(this.selectData.referenceWbsTemplateIdLar,1111111111);
  1705. refId=this.selectData.referenceWbsTemplateIdLar;
  1706. // this.$refs.treetotree.setRightTree([]);
  1707. }
  1708. if(this.templateType===3){
  1709. console.log(this.selectData.referenceWbsTemplateIdMeter,1111111111);
  1710. refId=this.selectData.referenceWbsTemplateIdMeter;
  1711. // this.$refs.treetotree.setRightTree([]);
  1712. }
  1713. console.log(refId,'refId');
  1714. if(!refId){
  1715. console.log('不存在refId');
  1716. this.$refs.treetotree.setRightTree([]);
  1717. this.iswbsselected=false
  1718. }else{
  1719. let WbsId=''
  1720. if (this.projectForm.referenceWbsTemplateType === 'private' && refId != null && refId.toString().length > 0&&this.templateType===1) {
  1721. // 私有库右边树形数据是通过 pkeyId 查询的
  1722. let ids = refId.toString().split(",");
  1723. console.log(ids,'ids111111');
  1724. this.finalIds=ids
  1725. if (ids.length > 1) {
  1726. refId = ids[0]
  1727. let list = this.treeList[1].options;
  1728. refId = list.filter(e => e.projectId == ids[1])[0].pkeyId;
  1729. console.log(refId,'refId');
  1730. }
  1731. }
  1732. if (this.projectForm.referenceWbsTemplateTypeTrial === 'private' && refId != null && refId.toString().length > 0&&this.templateType===2) {
  1733. // 私有库右边树形数据是通过 pkeyId 查询的
  1734. let ids = refId.toString().split(",");
  1735. console.log(ids,'试验');
  1736. this.finalIds=ids
  1737. if (ids.length > 1) {
  1738. refId = ids[0]
  1739. let list = this.treeList[1].options;
  1740. refId = list.filter(e => e.projectId == ids[1])[0].pkeyId;
  1741. console.log(refId,'refId');
  1742. }
  1743. }
  1744. if (
  1745. this.projectForm.referenceWbsTemplateTypeLar === 'private' && refId != null && refId.toString().length > 0 &&this.templateType===5) {
  1746. // 私有库右边树形数据是通过 pkeyId 查询的
  1747. let ids = refId.toString().split(",");
  1748. console.log(ids,'征拆');
  1749. this.finalIds=ids
  1750. if (ids.length > 1) {
  1751. refId = ids[0]
  1752. let list = this.treeList[1].options;
  1753. refId = list.filter(e => e.projectId == ids[1])[0].pkeyId;
  1754. console.log(refId,'refId');
  1755. }
  1756. }
  1757. if (
  1758. this.projectForm.referenceWbsTemplateTypeMeter === 'private' && refId != null && refId.toString().length > 0 &&this.templateType===3) {
  1759. // 私有库右边树形数据是通过 pkeyId 查询的
  1760. let ids = refId.toString().split(",");
  1761. console.log(ids,'计量');
  1762. this.finalIds=ids
  1763. if (ids.length > 1) {
  1764. refId = ids[0]
  1765. let list = this.treeList[1].options;
  1766. refId = list.filter(e => e.projectId == ids[1])[0].pkeyId;
  1767. console.log(refId,'refId');
  1768. }
  1769. }
  1770. //引用被删会出现 wbsType -1
  1771. if (refId && refId > 0) {
  1772. let priv = {};
  1773. if (this.projectForm.referenceWbsTemplateType == 'private'&&this.templateType===1
  1774. ||this.projectForm.referenceWbsTemplateTypeLar === 'private' &&this.templateType===5
  1775. ||this.projectForm.referenceWbsTemplateTypeMeter === 'private' &&this.templateType===3
  1776. ||this.projectForm.referenceWbsTemplateTypeTrial === 'private'&&this.templateType===2) {
  1777. //私有
  1778. let list = this.treeList[1].options;
  1779. for (let i = 0; i < list.length; i++) {
  1780. if (list[i].pkeyId == refId) {
  1781. refId = list[i].wbsId + ',' + list[i].projectId;
  1782. priv.wbsId = list[i].wbsId;
  1783. priv.projectId = list[i].projectId;
  1784. priv.value= list[i].value
  1785. priv.pkeyId= list[i].pkeyId
  1786. break;
  1787. }
  1788. }
  1789. } else {
  1790. //公有
  1791. WbsId = refId;
  1792. }
  1793. if(this.nowref.value===refId){
  1794. console.log(11111111111);
  1795. WbsId=this.nowref.id
  1796. }else{
  1797. if (this.projectForm.referenceWbsTemplateType == 'private'&& refId != null && refId.toString().length > 0 &&this.templateType==1) {
  1798. WbsId = priv.pkeyId
  1799. }
  1800. else if (this.projectForm.referenceWbsTemplateTypeTrial == 'private'&& refId != null && refId.toString().length > 0 &&this.templateType==2) {
  1801. WbsId =priv.pkeyId
  1802. }
  1803. else if (this.projectForm.referenceWbsTemplateTypeLar === 'private'&& refId != null && refId.toString().length > 0&&this.templateType==5) {
  1804. WbsId = priv.pkeyId
  1805. }
  1806. else if (this.projectForm.referenceWbsTemplateTypeMeter === 'private'&& refId != null && refId.toString().length > 0&&this.templateType==3) {
  1807. WbsId = priv.pkeyId
  1808. }
  1809. else {//公有
  1810. WbsId=this.templateType === 1 ?this.selectData.referenceWbsTemplateId: this.selectData.referenceWbsTemplateIdTrial
  1811. if(this.templateType===5){
  1812. WbsId=this.selectData.referenceWbsTemplateIdLar
  1813. }
  1814. if(this.templateType===3){
  1815. WbsId=this.selectData.referenceWbsTemplateIdMeter
  1816. }
  1817. }
  1818. }
  1819. this.finalWbsid=WbsId
  1820. console.log(WbsId,'WbsId');
  1821. console.log( this.finalWbsid,' this.finalWbsid=');
  1822. // findProjectTree(this.projectForm.id, this.templateType === 1 ? WbsId : this.selectData.referenceWbsTemplateIdTrial).then((res) => {
  1823. findProjectTree(this.projectForm.id, WbsId).then((res) => {
  1824. if (this.rightTreeData.length>0&&this.templateType===2&&this.rightObj.wbsId==WbsId) {
  1825. this.$refs.treetotree.setRightTree(this.rightTreeData);
  1826. }else if(this.rightTreeData1.length>0&&this.templateType===1&&this.rightObj1.wbsId==WbsId){
  1827. this.$refs.treetotree.setRightTree(this.rightTreeData1);
  1828. }else if(this.rightTreeData2.length>0&&this.templateType===5&&this.rightObj2.wbsId==WbsId){
  1829. this.$refs.treetotree.setRightTree(this.rightTreeData2);
  1830. }
  1831. else if(this.rightTreeData3.length>0&&this.templateType===3&&this.rightObj3.wbsId==WbsId){
  1832. this.$refs.treetotree.setRightTree(this.rightTreeData3);
  1833. }
  1834. else{
  1835. if (Array.isArray(res.data.data)) {
  1836. if(res.data.data.length>0){
  1837. this.iswbsselected=true
  1838. }else{
  1839. this.iswbsselected=false
  1840. }
  1841. console.log(11111111111);
  1842. this.$refs.treetotree.setRightTree(res.data.data);
  1843. } else {
  1844. this.$refs.treetotree.setRightTree([]);
  1845. this.iswbsselected=false
  1846. }
  1847. }
  1848. })
  1849. }
  1850. }
  1851. this.rightloading = false;
  1852. },
  1853. }
  1854. };
  1855. </script>
  1856. <style scoped lang="scss">
  1857. </style>