detail.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721
  1. <template>
  2. <basic-container>
  3. <div>
  4. <el-tabs v-model="activeType" :before-leave="beforeLeave">
  5. <el-tab-pane label="项目基本信息" name="1">
  6. <div>
  7. <el-form :model="projectForm" :rules="projectRules" ref="projectForm" label-width="120px">
  8. <el-row>
  9. <el-col :span="12">
  10. <el-form-item label="项目名称" prop="projectName">
  11. <el-input v-model="projectForm.projectName"></el-input>
  12. </el-form-item>
  13. <el-form-item label="项目别名" prop="projectAlias">
  14. <el-input v-model="projectForm.projectAlias"></el-input>
  15. </el-form-item>
  16. <el-form-item label="项目编号" prop="projectNumber">
  17. <el-input v-model="projectForm.projectNumber"></el-input>
  18. </el-form-item>
  19. <el-form-item label="公路等级" prop="projectGrade">
  20. <el-select v-model="projectForm.projectGrade" placeholder="请选择" class="w-100p">
  21. <el-option v-for="item in highwayGradeList" :key="item.id" :label="item.dictValue" :value="item.dictKey"></el-option>
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="计划开工日期" prop="planStartTime">
  25. <el-date-picker v-model="projectForm.planStartTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
  26. </el-form-item>
  27. <el-form-item label="实际开工日期" prop="actualStartTime">
  28. <el-date-picker v-model="projectForm.actualStartTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
  29. </el-form-item>
  30. <el-form-item label="项目预算投资" prop="estimatedAmount">
  31. <el-input v-model="projectForm.estimatedAmount">
  32. <template slot="append">万元</template>
  33. </el-input>
  34. </el-form-item>
  35. </el-col>
  36. <el-col :span="12">
  37. <el-form-item label="项目概况" prop="projectGist">
  38. <el-input v-model="projectForm.projectGist" type="textarea" :rows="7"></el-input>
  39. </el-form-item>
  40. <el-form-item label="内置里程" prop="projectAllMileage">
  41. <el-radio-group v-model="radioType">
  42. <el-radio-button label="总里程"></el-radio-button>
  43. <el-radio-button label="路面"></el-radio-button>
  44. <el-radio-button label="路基"></el-radio-button>
  45. </el-radio-group>
  46. <el-input-number v-model="projectForm.projectAllMileage" v-show="radioType == '总里程'" :min="0" label="总里程"></el-input-number>
  47. <el-input-number v-model="projectForm.projectPavement" v-show="radioType == '路面'" :min="0" label="路面"></el-input-number>
  48. <el-input-number v-model="projectForm.projectSubgrade" v-show="radioType == '路基'" :min="0" label="路基"></el-input-number>
  49. </el-form-item>
  50. <el-form-item label="计划完工日期" prop="planEndTime">
  51. <el-date-picker v-model="projectForm.planEndTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
  52. </el-form-item>
  53. <el-form-item label="实际完工日期" prop="actualEndTime">
  54. <el-date-picker v-model="projectForm.actualEndTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
  55. </el-form-item>
  56. </el-col>
  57. </el-row>
  58. </el-form>
  59. </div>
  60. </el-tab-pane>
  61. <el-tab-pane label="分配WBS模版" name="2">
  62. <div>
  63. <div class="text-align-c">
  64. <el-radio-group v-model="templateType" @change="templateTypeChange" :disabled="selected">
  65. <el-radio :label="2">试验</el-radio>
  66. <el-radio :label="1">质检</el-radio>
  67. </el-radio-group>
  68. </div>
  69. <div class="text-align-c mg-t-20">
  70. <span class="mg-r-20">选择WBS</span>
  71. <el-select v-model="wbsId" @change="wbsChange" :disabled="selected" placeholder="请选择WBS" style="width:500px;">
  72. <el-option-group
  73. v-for="group in treeList"
  74. :key="group.label"
  75. :label="group.label">
  76. <el-option
  77. v-for="(item,index) in group.options"
  78. :key="index"
  79. :label="item.label"
  80. :value="item.value">
  81. </el-option>
  82. </el-option-group>
  83. </el-select>
  84. </div>
  85. <tree-tree :left-tree-data="leftTreeData" scrollbarStyle="height:calc(100vh - 500px)" ref="treetotree" :show-all-check="true" @onAddTree="treeChang" @onDelTree="treeChang" @onCheckAll="treeChang"></tree-tree>
  86. </div>
  87. </el-tab-pane>
  88. <el-tab-pane label="分配系统维护人员" name="3">
  89. <div>
  90. <div class="flex jc-al-c">
  91. <span class="mg-r-10">项目名称</span>
  92. <el-input v-model="projectForm.projectName" disabled style="width:300px;margin-right:30px;"></el-input>
  93. <span class="mg-r-10">合同段名称</span>
  94. <el-select v-model="cId" placeholder="请选择" @change="getUserByCondition">
  95. <el-option label="全部" value=""></el-option>
  96. <el-option v-for="item in contractList" :key="item.id" :label="item.contractName" :value="item.id"></el-option>
  97. </el-select>
  98. </div>
  99. <el-divider></el-divider>
  100. <div class="flex jc-al-c mg-b-10">
  101. <span>维护人员角色</span>
  102. <avue-input-tree :check-strictly="true" v-model="rId" placeholder="请选择" type="tree" :dic="roleList" :props="treeProps" @change="getUserByCondition"></avue-input-tree>
  103. <!-- <el-select v-model="rId" clearable placeholder="请选择" @change="getUserByCondition">
  104. <el-option v-for="item in roleList" :key="item.id" :label="item.title" :value="item.id"></el-option>
  105. </el-select> -->
  106. </div>
  107. <div>
  108. <el-table :data="contractUserList" border height="500" style="width: 100%">
  109. <el-table-column prop="name" label="姓名" align="center"></el-table-column>
  110. <el-table-column prop="postName" label="岗位" align="center"></el-table-column>
  111. <el-table-column prop="phone" label="电话" align="center"></el-table-column>
  112. <el-table-column label="操作" align="center">
  113. <template slot-scope="scope">
  114. <el-button
  115. size="mini"
  116. type="danger"
  117. @click="handleDelete(scope.$index, scope.row)">删除</el-button>
  118. </template>
  119. </el-table-column>
  120. </el-table>
  121. </div>
  122. <div class="flex jc-al-c mg-t-20">
  123. <span>添加系统内部人员</span>
  124. <el-select v-model="userId" filterable placeholder="请输入搜索">
  125. <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
  126. </el-select>
  127. <el-button type="success" @click="addUserToProject">添加</el-button>
  128. <el-button type="primary">创建新用户</el-button>
  129. <el-button type="danger" @click="handleDeletes">全部删除</el-button>
  130. </div>
  131. <el-divider></el-divider>
  132. </div>
  133. </el-tab-pane>
  134. </el-tabs>
  135. <div class="flex jc-sb">
  136. <div></div>
  137. <div>
  138. <el-button type="success" size="medium" :loading="btnLoad" @click="saveQuit">保存并退出</el-button>
  139. <el-button type="info" size="medium" :loading="btnLoad" v-if="activeType != 1" @click="saveNext('p')">保存并返回上一步</el-button>
  140. <el-button type="info" size="medium" :loading="btnLoad" v-if="activeType != 3" @click="saveNext('n')">保存并进入下一步</el-button>
  141. </div>
  142. </div>
  143. </div>
  144. </basic-container>
  145. </template>
  146. <script>
  147. import {submitProject,getProjectDeatil,findWbsTreeList,findProjectTree,
  148. submitWbsTreeInProject,getProjectDeatilWbsId} from "@/api/manager/projectinfo";
  149. import {findContractByProjectId,saveUserInfoByProject,findUserListByCondition,
  150. findUserByName,removeUsersByIds} from "@/api/manager/contractinfo";
  151. import {getRoleTree} from "@/api/system/role";
  152. import {getAlltree} from "@/api/manager/wbstree";
  153. import {getDictionary} from "@/api/system/dict";
  154. import {mapGetters} from "vuex";
  155. import treeTree from "@/components/tree-tree/main"
  156. export default {
  157. components: {
  158. treeTree
  159. },
  160. data() {
  161. var checkDate = (rule, value, callback) => {
  162. if (value && this.projectForm.planStartTime) {
  163. if(Date.parse(value) < Date.parse(this.projectForm.planStartTime)){
  164. callback(new Error('计划完工日期不能小于开工日期'));
  165. }
  166. }
  167. callback();
  168. };
  169. var checkDate2 = (rule, value, callback) => {
  170. if (value && this.projectForm.actualStartTime) {
  171. if(Date.parse(value) < Date.parse(this.projectForm.actualStartTime)){
  172. callback(new Error('实际完工日期不能小于开工日期'));
  173. }
  174. }
  175. callback();
  176. };
  177. var checkIsNumber = (rule, value, callback) => {
  178. if (value != Number(value)) {
  179. callback(new Error('金额必须是数字'));
  180. }
  181. if (value && 999999999999999999 < Number(value)) {
  182. callback(new Error('数字过大'));
  183. }
  184. callback();
  185. };
  186. var checkMileage = (rule, value, callback) => {
  187. if (this.projectForm.projectPavement || this.projectForm.projectSubgrade) {
  188. if(this.projectForm.projectPavement){
  189. if(this.projectForm.projectPavement > value){
  190. callback(new Error('总里程必须是最大的'));
  191. }
  192. }else if(this.projectForm.projectSubgrade){
  193. if(this.projectForm.projectSubgrade > value){
  194. callback(new Error('总里程必须是最大的'));
  195. }
  196. }
  197. if(this.projectForm.projectPavement && this.projectForm.projectSubgrade){
  198. if((this.projectForm.projectPavement + this.projectForm.projectSubgrade) > value){
  199. callback(new Error('总里程必须大于两项总和'));
  200. }
  201. }
  202. }
  203. callback();
  204. };
  205. return {
  206. activeType:'1',
  207. typeChang:{
  208. 1:false,
  209. 2:false,
  210. 3:false,
  211. },
  212. btnLoad:false,
  213. id:'',
  214. highwayGradeList:[],
  215. radioType:'总里程',
  216. projectForm:{
  217. estimatedAmount:0
  218. },
  219. projectRules:{
  220. projectName: [
  221. { required: true, message: '请输入项目名称', trigger: 'blur' },
  222. ],
  223. projectAlias: [
  224. { required: true, message: '请输入项目别名', trigger: 'blur' },
  225. ],
  226. planEndTime:[
  227. {validator: checkDate,trigger: 'blur'}
  228. ],
  229. actualEndTime:[
  230. {validator: checkDate2,trigger: 'blur'}
  231. ],
  232. estimatedAmount:[
  233. {validator: checkIsNumber,trigger: 'blur'}
  234. ],
  235. projectAllMileage:[
  236. {validator: checkMileage,trigger: 'blur'}
  237. ]
  238. },
  239. contractList:[],
  240. cId:'',
  241. rId:'',
  242. roleList:[],
  243. userId:'',
  244. userList:[],
  245. contractUserList:[],
  246. treeProps:{
  247. label:"title",
  248. value:"id"
  249. },
  250. templateType:1,
  251. treeList:[],
  252. wbsId:'',
  253. selected:false,
  254. leftTreeData:[],
  255. }
  256. },
  257. computed: {
  258. ...mapGetters(["userInfo"]),
  259. },
  260. watch:{
  261. projectForm:{
  262. handler: function() { // 此处注意,handler函数不能为箭头函数,this会取上下文,而不是组件里的this,此外,深度监听,必须为handler函数名,否则会无效果
  263. this.typeChang['1'] = true;
  264. },
  265. deep: true
  266. },
  267. activeType: function (newValue) {
  268. if(newValue == '3'){
  269. this.getContractList();
  270. this.getRoleList();
  271. this.getUserByCondition();
  272. this.getUserByName();
  273. }else if(newValue == '2'){
  274. this.treeInit();
  275. }
  276. }
  277. },
  278. created() {
  279. this.init();
  280. //console.log(this.userInfo)
  281. },
  282. mounted(){
  283. this.$nextTick(()=>{
  284. this.typeChang = {
  285. 1:false,
  286. 2:false,
  287. 3:false,
  288. }
  289. })
  290. },
  291. methods: {
  292. init(){
  293. this.getHighwayGradeList();
  294. this.id = this.$route.query.id;
  295. if(this.id){
  296. this.getProjectDeatil();
  297. }
  298. },
  299. beforeLeave(activeName, oldActiveName){
  300. return new Promise((resolve,reject)=>{
  301. if(oldActiveName == '1' && !this.projectForm.id){
  302. this.$message({
  303. type: "warning",
  304. message: "请先保存项目后,再进行项目的分配"
  305. });
  306. reject();
  307. }
  308. if(this.typeChang[oldActiveName]){
  309. this.$confirm('检测到新编辑内容, 是否保存?', '提示', {
  310. confirmButtonText: '确定',
  311. cancelButtonText: '不用',
  312. type: 'warning'
  313. }).then(() => {
  314. switch (oldActiveName) {
  315. case '1':
  316. this.saveProject().then((res)=>{
  317. this.projectForm.id = res.data.data.id;
  318. resolve();
  319. this.$message({
  320. type: "success",
  321. message: "保存成功!"
  322. });
  323. });
  324. break;
  325. case '2':
  326. this.saveWbsTree().then(()=>{
  327. resolve();
  328. this.$message({
  329. type: "success",
  330. message: "保存成功!"
  331. });
  332. })
  333. break;
  334. }
  335. }).catch(()=>{
  336. reject();
  337. })
  338. }else{
  339. resolve();
  340. }
  341. })
  342. },
  343. getProjectDeatil(){
  344. getProjectDeatil(this.id).then((res)=>{
  345. this.projectForm = res.data.data;
  346. if(Number(this.projectForm.estimatedAmount) < 0){
  347. this.projectForm.estimatedAmount = 0
  348. }
  349. this.$nextTick(()=>{
  350. this.typeChang['1'] = false;
  351. })
  352. let templateType = 'public';
  353. if(this.projectForm.referenceWbsTemplateType){
  354. templateType = this.projectForm.referenceWbsTemplateType;
  355. }
  356. getProjectDeatilWbsId(this.id,this.projectForm.referenceWbsTemplateId,templateType).then((res)=>{
  357. this.projectForm.wbsType = res.data.data.wbsType;
  358. })
  359. })
  360. },
  361. async saveQuit(){
  362. this.btnLoad = true;
  363. try {
  364. if(this.activeType == '1'){
  365. await this.saveProject();
  366. }else if(this.activeType == '2'){
  367. await this.saveWbsTree();
  368. }
  369. } catch (error) {
  370. this.btnLoad = false;
  371. return;
  372. }
  373. this.$message({
  374. type: "success",
  375. message: "保存成功!"
  376. });
  377. this.btnLoad = false;
  378. this.$router.go(-1);
  379. },
  380. async saveNext(type){
  381. this.btnLoad = true;
  382. try {
  383. if(this.activeType == '1'){
  384. let res = await this.saveProject();
  385. this.projectForm.id = res.data.data.id;
  386. }else if(this.activeType == '2'){
  387. await this.saveWbsTree();
  388. }
  389. } catch (error) {
  390. this.btnLoad = false;
  391. return;
  392. }
  393. this.$message({
  394. type: "success",
  395. message: "保存成功!"
  396. });
  397. this.typeChang[this.activeType] = false;
  398. let num = Number(this.activeType);
  399. if(type == 'n'){
  400. num++;
  401. }else if(type == 'p'){
  402. num--;
  403. }
  404. this.activeType = num.toString();
  405. this.btnLoad = false;
  406. },
  407. saveProject(){
  408. return new Promise((resolve, reject) => {
  409. this.$refs['projectForm'].validate((valid) => {
  410. if (valid) {
  411. resolve(submitProject(this.projectForm))
  412. }else{
  413. reject('验证失败')
  414. }
  415. })
  416. })
  417. },
  418. saveWbsTree(){
  419. let obj = {};
  420. let ids = this.$refs.treetotree.getTreeAllId('rightTree');
  421. obj = {
  422. wbsId:this.wbsId,
  423. projectId:this.projectForm.id,
  424. wbsType:this.templateType,
  425. wbsTreeIds:ids
  426. }
  427. if(this.wbsId.toString().indexOf(',') >= 0){
  428. //私有库
  429. obj.referenceType = "private";
  430. let ids = this.wbsId.toString().split(',');
  431. obj.wbsId = ids[0];
  432. obj.referencePrivateWbsProjectId = ids[1];
  433. obj.primaryKeyId = this.leftTreeData[0].primaryKeyId;
  434. }else{
  435. //公有库
  436. obj.referenceType = "public";
  437. }
  438. return submitWbsTreeInProject(obj);
  439. },
  440. addUserToProject(){
  441. if(!this.userId){
  442. this.$message({
  443. type: "warning",
  444. message: "请先选择用户再进行添加"
  445. });
  446. return;
  447. }
  448. if(!this.rId){
  449. this.$message({
  450. type: "warning",
  451. message: "请先选择维护人员角色再进行添加"
  452. });
  453. return;
  454. }
  455. let list = [{
  456. projectId:this.projectForm.id,
  457. contractId:this.cId?this.cId:undefined,
  458. userId:this.userId,
  459. roleId:this.rId
  460. }];
  461. saveUserInfoByProject(list).then(()=>{
  462. this.getUserByCondition();
  463. })
  464. },
  465. getUserByCondition(){
  466. findUserListByCondition({
  467. cId:this.cId,
  468. pId:this.projectForm.id,
  469. postId:'',
  470. rId:this.rId,
  471. }).then((res)=>{
  472. this.contractUserList = res.data.data;
  473. })
  474. },
  475. getUserByName(){
  476. findUserByName('').then((res)=>{
  477. this.userList = res.data.data;
  478. })
  479. },
  480. handleDelete(index,row){
  481. this.$confirm('是否将该用户移除出合同段', '提示', {
  482. confirmButtonText: '确定',
  483. cancelButtonText: '取消',
  484. type: 'warning'
  485. }).then(() => {
  486. removeUsersByIds(row.id).then(()=>{
  487. this.contractUserList.splice(index,1);
  488. this.$message({
  489. type: "success",
  490. message: "删除成功!"
  491. });
  492. })
  493. })
  494. },
  495. handleDeletes(){
  496. this.$confirm('是否将所有用户移除出合同段', '提示', {
  497. confirmButtonText: '确定',
  498. cancelButtonText: '取消',
  499. type: 'warning'
  500. }).then(() => {
  501. let ids = [];
  502. this.contractUserList.forEach((element)=>{
  503. ids.push(element.id);
  504. })
  505. removeUsersByIds(ids.join(',')).then(()=>{
  506. this.contractUserList = [];
  507. this.$message({
  508. type: "success",
  509. message: "删除成功!"
  510. });
  511. })
  512. })
  513. },
  514. getHighwayGradeList(){
  515. if(this.highwayGradeList.length >1){
  516. return;
  517. }
  518. getDictionary({
  519. code:'highway_grade'
  520. }).then((res)=>{
  521. // res.data.data.forEach(element => {
  522. // element.dictKey = Number(element.dictKey)
  523. // });
  524. this.highwayGradeList = res.data.data;
  525. })
  526. },
  527. getContractList(){
  528. if(this.contractList.length < 1){
  529. findContractByProjectId(this.projectForm.id).then((res)=>{
  530. this.contractList = res.data.data;
  531. })
  532. }
  533. },
  534. getRoleList(){
  535. if(this.roleList.length > 1){
  536. return;
  537. }
  538. getRoleTree().then((res)=>{
  539. this.roleList = res.data.data
  540. })
  541. },
  542. wbsChange(value){
  543. //console.log(value)
  544. if(value.toString().indexOf(',') >= 0){
  545. //私有库
  546. let ids = value.toString().split(',');
  547. findProjectTree(ids[1],ids[0]).then((res)=>{
  548. if(Array.isArray(res.data.data)){
  549. this.leftTreeData = res.data.data;
  550. }else{
  551. this.leftTreeData = [];
  552. }
  553. })
  554. }else{
  555. //公有库
  556. getAlltree(this.userInfo.tenant_id,'1',value).then((res)=>{
  557. if(Array.isArray(res.data.data)){
  558. this.leftTreeData = res.data.data;
  559. }else{
  560. this.leftTreeData = [];
  561. }
  562. })
  563. }
  564. },
  565. getTreeList(){
  566. return new Promise((resolve)=>{
  567. if(this.treeList.length){
  568. resolve();
  569. }
  570. findWbsTreeList(this.templateType).then((res)=>{
  571. let arr = [{
  572. label:'公有库',
  573. options:[],
  574. },
  575. {
  576. label:'私有库',
  577. options:[],
  578. }];
  579. let data = res.data.data;
  580. if(data.wbsInfos && data.wbsInfos.length){
  581. data.wbsInfos.forEach((element)=>{
  582. element.label = element.wbsName;
  583. element.value = element.id;
  584. })
  585. arr[0].options = data.wbsInfos;
  586. }
  587. if(data.wbsTreePrivates && data.wbsTreePrivates.length){
  588. data.wbsTreePrivates.forEach((element)=>{
  589. element.label = element.projectName;
  590. element.value = element.wbsId +','+ element.projectId;
  591. })
  592. arr[1].options = data.wbsTreePrivates;
  593. }
  594. this.treeList = arr;
  595. }).finally(()=>{
  596. resolve();
  597. })
  598. })
  599. },
  600. treeChang(){
  601. this.typeChang[2] = true;
  602. },
  603. templateTypeChange(){
  604. findWbsTreeList(this.templateType).then((res)=>{
  605. let arr = [{
  606. label:'公有库',
  607. options:[],
  608. },
  609. {
  610. label:'私有库',
  611. options:[],
  612. }];
  613. let data = res.data.data;
  614. if(data.wbsInfos && data.wbsInfos.length){
  615. data.wbsInfos.forEach((element)=>{
  616. element.label = element.wbsName;
  617. element.value = element.id;
  618. })
  619. arr[0].options = data.wbsInfos;
  620. }
  621. if(data.wbsTreePrivates && data.wbsTreePrivates.length){
  622. data.wbsTreePrivates.forEach((element)=>{
  623. element.label = element.projectName;
  624. element.value = element.wbsId +','+ element.projectId;
  625. })
  626. arr[1].options = data.wbsTreePrivates;
  627. }
  628. this.treeList = arr;
  629. })
  630. this.wbsId = '';
  631. this.leftTreeData = [];
  632. },
  633. async treeInit(){
  634. let refId = this.projectForm.referenceWbsTemplateId;
  635. if(refId && refId>0){
  636. //有引用id,回显
  637. //this.selected = true;
  638. this.templateType = this.projectForm.wbsType;
  639. await this.getTreeList();
  640. let priv={};
  641. if(this.projectForm.referenceWbsTemplateType=='private'){
  642. //私有
  643. let list = this.treeList[1].options;
  644. for (let i = 0; i < list.length; i++) {
  645. if(list[i].pkeyId == refId){
  646. this.wbsId = list[i].wbsId +','+ list[i].projectId;
  647. priv.wbsId = list[i].wbsId;
  648. priv.projectId = list[i].projectId;
  649. break;
  650. }
  651. }
  652. }else{
  653. //公有
  654. this.wbsId = refId;
  655. }
  656. let projectTree = await findProjectTree(this.projectForm.id,refId)
  657. if(Array.isArray(projectTree.data.data)){
  658. if(this.projectForm.referenceWbsTemplateType=='private'){
  659. //私有
  660. let leftData = await findProjectTree(priv.projectId,priv.wbsId)
  661. if(Array.isArray(leftData.data.data)){
  662. this.leftTreeData = leftData.data.data;
  663. }else{
  664. this.leftTreeData = [];
  665. }
  666. }else{
  667. //公有
  668. let leftData = await getAlltree(this.userInfo.tenant_id,'1',refId)
  669. if(Array.isArray(leftData.data.data)){
  670. this.leftTreeData = leftData.data.data;
  671. }else{
  672. this.leftTreeData = [];
  673. }
  674. }
  675. this.$refs.treetotree.setRightTree(projectTree.data.data);
  676. }
  677. }else{
  678. this.getTreeList();
  679. }
  680. }
  681. }
  682. };
  683. </script>
  684. <style scoped lang="scss">
  685. </style>