detail.vue 57 KB

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