detail.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689
  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="contractForm" :rules="contractRules" ref="contractForm" label-width="120px">
  8. <el-form-item label="项目名称">
  9. <el-input v-model="projectInfo.projectName" disabled></el-input>
  10. </el-form-item>
  11. <el-row>
  12. <el-col :span="12">
  13. <el-form-item label="合同段类型" prop="contractType">
  14. <el-select v-model="contractForm.contractType" placeholder="请选择" class="w-100p">
  15. <el-option v-for="item in contractTypeList" :key="item.id" :label="item.dictValue" :value="item.dictKey"></el-option>
  16. </el-select>
  17. </el-form-item>
  18. </el-col>
  19. <el-col :span="12">
  20. <el-form-item label="合同段编号" prop="contractNumber">
  21. <el-input v-model="contractForm.contractNumber"></el-input>
  22. </el-form-item>
  23. </el-col>
  24. </el-row>
  25. <el-row>
  26. <el-col :span="12">
  27. <el-form-item label="合同段名称" prop="contractName">
  28. <el-input v-model="contractForm.contractName"></el-input>
  29. </el-form-item>
  30. </el-col>
  31. <el-col :span="12">
  32. <el-form-item label="参与方进场日期" prop="contractorJoinTime">
  33. <el-date-picker v-model="contractForm.contractorJoinTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
  34. </el-form-item>
  35. </el-col>
  36. </el-row>
  37. <el-row>
  38. <el-col :span="12">
  39. <el-form-item label="计划开工日期" prop="planStartTime">
  40. <el-date-picker v-model="contractForm.planStartTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
  41. </el-form-item>
  42. </el-col>
  43. <el-col :span="12">
  44. <el-form-item label="计划完工日期" prop="planEndTime">
  45. <el-date-picker v-model="contractForm.planEndTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
  46. </el-form-item>
  47. </el-col>
  48. </el-row>
  49. <el-row>
  50. <el-col :span="12">
  51. <el-form-item label="实际开工日期" prop="actualStartTime">
  52. <el-date-picker v-model="contractForm.actualStartTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
  53. </el-form-item>
  54. </el-col>
  55. <el-col :span="12">
  56. <el-form-item label="实际完工日期" prop="actualEndTime">
  57. <el-date-picker v-model="contractForm.actualEndTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
  58. </el-form-item>
  59. </el-col>
  60. </el-row>
  61. <el-row>
  62. <el-col :span="12">
  63. <el-form-item label="业主单位名称" prop="contractorUnitName">
  64. <el-input v-model="contractForm.contractorUnitName"></el-input>
  65. </el-form-item>
  66. </el-col>
  67. <el-col :span="12">
  68. <el-form-item label="合同金额" prop="contractAmount">
  69. <el-input v-model="contractForm.contractAmount">
  70. <template slot="append">万元</template>
  71. </el-input>
  72. </el-form-item>
  73. </el-col>
  74. </el-row>
  75. <el-row>
  76. <el-col :span="12">
  77. <el-form-item label="施工单位名称" prop="constructionUnitName">
  78. <el-input v-model="contractForm.constructionUnitName"></el-input>
  79. </el-form-item>
  80. </el-col>
  81. <el-col :span="12">
  82. <el-form-item label="上传开工令" prop="startFileUrl">
  83. <template v-if="isBackShow">
  84. <el-link type="primary" @click="downloadFile">开工令</el-link>
  85. <el-button @click="delFile" class="mg-l-10" style="color:red" type="text" icon="el-icon-circle-close"></el-button>
  86. </template>
  87. <template v-else>
  88. <el-upload
  89. action="/api/blade-resource/oss/endpoint/put-file-attach"
  90. :on-remove="handleRemove"
  91. :limit="1" :headers=headers
  92. :on-exceed="handleExceed"
  93. :on-success="handleSuccess"
  94. :file-list="fileList">
  95. <el-button size="small" type="primary">点击上传</el-button>
  96. </el-upload>
  97. </template>
  98. </el-form-item>
  99. </el-col>
  100. </el-row>
  101. <el-row>
  102. <el-col :span="12">
  103. <el-form-item label="监理单位名称" prop="supervisionUnitName">
  104. <el-input v-model="contractForm.supervisionUnitName"></el-input>
  105. </el-form-item>
  106. </el-col>
  107. <el-col :span="12">
  108. </el-col>
  109. </el-row>
  110. </el-form>
  111. <el-divider></el-divider>
  112. <el-row :gutter="20">
  113. <el-col :span="12">
  114. <div>组卷归档默认信息</div>
  115. <el-form label-width="90px">
  116. <el-row>
  117. <el-col :span="12">
  118. <el-form-item label="立卷人" prop="filer">
  119. <el-input v-model="contractForm.filer"></el-input>
  120. </el-form-item>
  121. </el-col>
  122. <el-col :span="12">
  123. <el-form-item label="保管期限" prop="storagePeriod">
  124. <el-select v-model="contractForm.storagePeriod" placeholder="请选择" class="w-100p">
  125. <el-option label="10年" value="10年"></el-option>
  126. <el-option label="30年" value="30年"></el-option>
  127. <el-option label="永久" value="永久"></el-option>
  128. </el-select>
  129. </el-form-item>
  130. </el-col>
  131. </el-row>
  132. <el-row>
  133. <el-col :span="12">
  134. <el-form-item label="审核人" prop="reviewer">
  135. <el-input v-model="contractForm.reviewer"></el-input>
  136. </el-form-item>
  137. </el-col>
  138. <el-col :span="12">
  139. <el-form-item label="保管密级" prop="securityLevel">
  140. <el-select v-model="contractForm.securityLevel" placeholder="请选择" class="w-100p">
  141. <el-option label="机密" value="机密"></el-option>
  142. <el-option label="绝密" value="绝密"></el-option>
  143. <el-option label="秘密" value="秘密"></el-option>
  144. <el-option label="公开" value="公开"></el-option>
  145. </el-select>
  146. </el-form-item>
  147. </el-col>
  148. </el-row>
  149. <el-row>
  150. <el-col :span="12">
  151. <el-form-item label="档案前缀" prop="prefix">
  152. <el-input v-model="contractForm.prefix"></el-input>
  153. </el-form-item>
  154. </el-col>
  155. <el-col :span="12">
  156. </el-col>
  157. </el-row>
  158. </el-form>
  159. </el-col>
  160. <el-col :span="12">
  161. <div>附加信息</div>
  162. <el-form label-width="90px">
  163. <el-form-item label="项目地址" prop="projectPlace">
  164. <!-- <el-input v-model="contractForm.projectPlace" placeholder="点击后面地图选取地址">
  165. <el-button slot="append" icon="el-icon-map-location" @click="mapDialogVisible = true"></el-button>
  166. </el-input> -->
  167. <avue-input-map :params="params" placeholder="请选择地图" v-model="flageData" ></avue-input-map>
  168. </el-form-item>
  169. <el-form-item label="起始桩号" prop="startStation">
  170. <el-input v-model="contractForm.startStation"></el-input>
  171. </el-form-item>
  172. <el-form-item label="结束桩号" prop="endStation">
  173. <el-input v-model="contractForm.endStation"></el-input>
  174. </el-form-item>
  175. </el-form>
  176. </el-col>
  177. </el-row>
  178. </div>
  179. </el-tab-pane>
  180. <el-tab-pane label="分配WBS" name="2">
  181. <div>
  182. <div class="text-align-c">
  183. <span class="mg-r-20">选择WBS</span>
  184. <el-select v-model="wbsId" @change="wbsChange" placeholder="请选择WBS" style="width:500px;">
  185. <el-option v-for="item in wbsList" :key="item.id" :label="item.wbsName" :value="item.id"></el-option>
  186. </el-select>
  187. </div>
  188. <tree-tree :left-tree-data="leftTreeData"></tree-tree>
  189. </div>
  190. </el-tab-pane>
  191. <el-tab-pane label="分配项目人员" name="3">
  192. <div>
  193. <div class="flex jc-al-c">
  194. <span class="mg-r-10">项目名称</span>
  195. <el-input v-model="projectInfo.projectName" disabled style="width:300px;margin-right:30px;"></el-input>
  196. <span class="mg-r-10">合同段名称</span>
  197. <el-input v-model="contractForm.contractName" disabled style="width:300px;"></el-input>
  198. </div>
  199. <el-divider></el-divider>
  200. <div class="flex jc-al-c mg-b-10">
  201. <div>
  202. <span class="mg-r-10">角色方</span>
  203. <el-radio-group v-model="rId">
  204. <el-radio-button v-for="(item) in roleList" :label="item.id" :key="item.key">{{item.title}}</el-radio-button>
  205. </el-radio-group>
  206. </div>
  207. <div>
  208. <span class="mg-r-10 mg-l-20">请选择岗位</span>
  209. <el-select v-model="postId" filterable placeholder="请输入搜索">
  210. <el-option v-for="item in postList" :key="item.id" :label="item.postName" :value="item.id"></el-option>
  211. </el-select>
  212. </div>
  213. </div>
  214. <div>
  215. <el-table :data="contractUserList" border height="500" style="width: 100%">
  216. <el-table-column prop="name" label="姓名" align="center"></el-table-column>
  217. <el-table-column prop="account" label="登录账号" align="center"></el-table-column>
  218. <el-table-column prop="password" label="密码" align="center"></el-table-column>
  219. <el-table-column label="操作" align="center">
  220. <template slot-scope="scope">
  221. <el-link class="mg-r-20" type="primary" @click="copyAccPas(scope.row)">复制</el-link>
  222. <el-link class="mg-r-20" type="primary" @click="resetPassword(scope.row)">重置密码</el-link>
  223. <el-link type="danger" @click="handleDelete(scope.$index, scope.row)">删除</el-link>
  224. </template>
  225. </el-table-column>
  226. </el-table>
  227. <el-input v-model="copyText" ref="copyInput" type="textarea" style='opacity: 0;position: absolute;height:1px;overflow:hidden;'></el-input>
  228. </div>
  229. <div class="flex jc-al-c mg-t-20">
  230. <span>添加项目人员</span>
  231. <el-select v-model="userId" filterable placeholder="请输入搜索">
  232. <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
  233. </el-select>
  234. <el-button type="success" @click="addUserToProject">添加</el-button>
  235. <el-button type="primary">创建新用户</el-button>
  236. <el-button type="danger" @click="handleDeletes">全部删除</el-button>
  237. </div>
  238. <el-divider></el-divider>
  239. </div>
  240. </el-tab-pane>
  241. </el-tabs>
  242. <div class="flex jc-sb">
  243. <div></div>
  244. <div>
  245. <el-button type="success" size="medium" @click="saveQuit">保存并退出</el-button>
  246. <el-button type="info" size="medium" v-if="activeType != 1" @click="saveNext('p')">保存并返回上一步</el-button>
  247. <el-button type="info" size="medium" v-if="activeType != 3" @click="saveNext('n')">保存并进入下一步</el-button>
  248. </div>
  249. </div>
  250. </div>
  251. </basic-container>
  252. </template>
  253. <script>
  254. import {getProjectDeatil} from "@/api/manager/projectinfo";
  255. import {submitContractInfo,getContractInfo,delFileFromUrl,
  256. findJobByRoleId,findAllUserByCondition,findUserByName,
  257. saveUserInfoByProject,removeUsersByIds,resetPasswordByUserId} from "@/api/manager/contractinfo";
  258. import {getRoleTree} from "@/api/system/role";
  259. import {getList as getwbsList} from "@/api/manager/wbsinfo";
  260. import {getAlltree} from "@/api/manager/wbstree";
  261. import {getDictionary} from "@/api/system/dict";
  262. import {remove as removeFile} from "@/api/resource/attach";
  263. import website from '@/config/website';
  264. import {Base64} from 'js-base64';
  265. import {getToken} from '@/util/auth';
  266. import {mapGetters} from "vuex";
  267. import treeTree from "@/components/tree-tree/main"
  268. export default {
  269. components: {
  270. treeTree
  271. },
  272. data() {
  273. return {
  274. activeType:'1',
  275. typeChang:{
  276. 1:false,
  277. 2:false,
  278. 3:false,
  279. },
  280. pid:'',
  281. cid:'',
  282. projectInfo:{},
  283. contractTypeList:[],
  284. fileList:[],
  285. headers:{},
  286. isBackShow:false,
  287. contractForm:{},
  288. contractRules:{
  289. contractName: [
  290. { required: true, message: '请输入合同段名称', trigger: 'blur' },
  291. ],
  292. },
  293. mapDialogVisible:false,
  294. params:{
  295. zoom: 10,
  296. // zoomEnable: false,
  297. // dragEnable: false,
  298. },
  299. flageData:[],
  300. rId:'',
  301. roleList:[],
  302. postId:'',
  303. postList:[],
  304. contractUserList:[],
  305. userId:'',
  306. userList:[],
  307. copyText:'',
  308. wbsId:'',
  309. wbsList:[],
  310. leftTreeData:[],
  311. }
  312. },
  313. computed: {
  314. ...mapGetters(["userInfo"]),
  315. },
  316. watch:{
  317. contractForm:{
  318. handler: function() { // 此处注意,handler函数不能为箭头函数,this会取上下文,而不是组件里的this,此外,深度监听,必须为handler函数名,否则会无效果
  319. this.typeChang['1'] = true;
  320. },
  321. deep: true
  322. },
  323. activeType: function (newValue) {
  324. if(newValue == '3'){
  325. this.getRoleList();
  326. this.getUserByName();
  327. }else if(newValue == '2'){
  328. this.getWBSList();
  329. }
  330. },
  331. rId:function(newValue){
  332. findJobByRoleId(newValue).then((res)=>{
  333. this.postList = res.data.data;
  334. }).catch(()=>{
  335. this.postList = [];
  336. }).finally(()=>{
  337. this.postId = '';
  338. })
  339. },
  340. postId:function(newValue){
  341. if(newValue){
  342. this.findAllUserByCondition();
  343. }else{
  344. this.contractUserList = [];
  345. }
  346. }
  347. },
  348. created() {
  349. this.init();
  350. //console.log(this.userInfo)
  351. },
  352. mounted(){
  353. this.$nextTick(()=>{
  354. this.typeChang = {
  355. 1:false,
  356. 2:false,
  357. 3:false,
  358. }
  359. })
  360. },
  361. methods: {
  362. init(){
  363. this.pid = this.$route.query.pid;
  364. this.cid = this.$route.query.cid;
  365. if(!this.cid){
  366. this.contractForm.pid = this.pid;
  367. }else{
  368. this.getContractInfo();
  369. }
  370. if(this.$route.query.type){
  371. this.activeType = this.$route.query.type;
  372. }
  373. this.getContractTypeList();
  374. this.getProjectDeatil();
  375. this.setHeaders();
  376. },
  377. beforeLeave(activeName, oldActiveName){
  378. if(oldActiveName == '1' && !this.contractForm.id){
  379. this.$message({
  380. type: "warning",
  381. message: "请先保存合同段后,再进行合同段的分配"
  382. });
  383. return false;
  384. }
  385. if(this.typeChang[oldActiveName]){
  386. this.$confirm('检测到新编辑内容, 是否保存?', '提示', {
  387. confirmButtonText: '确定',
  388. cancelButtonText: '不用',
  389. type: 'warning'
  390. }).then(() => {
  391. switch (oldActiveName) {
  392. case '1':
  393. this.savecontract().then((res)=>{
  394. this.contractForm.id = res.data.data.id;
  395. this.$message({
  396. type: "success",
  397. message: "保存成功!"
  398. });
  399. });
  400. break;
  401. }
  402. })
  403. }
  404. },
  405. getProjectDeatil(){
  406. getProjectDeatil(this.pid).then((res)=>{
  407. this.projectInfo = res.data.data;
  408. })
  409. },
  410. getContractInfo(){
  411. getContractInfo(this.cid).then((res)=>{
  412. this.contractForm = res.data.data;
  413. if(this.contractForm.startFileUrl){
  414. this.isBackShow = true;
  415. }
  416. if(this.contractForm.projectPlace){
  417. this.flageData = ['','',this.contractForm.projectPlace]
  418. }
  419. this.$nextTick(()=>{
  420. this.typeChang['1'] = false;
  421. })
  422. })
  423. },
  424. async saveQuit(){
  425. if(this.activeType == '1'){
  426. await this.savecontract();
  427. }
  428. this.$message({
  429. type: "success",
  430. message: "保存成功!"
  431. });
  432. this.$router.go(-1);
  433. },
  434. async saveNext(type){
  435. if(this.activeType == '1'){
  436. let res = await this.savecontract();
  437. this.contractForm.id = res.data.data.id;
  438. }
  439. this.$message({
  440. type: "success",
  441. message: "保存成功!"
  442. });
  443. this.typeChang[this.activeType] = false;
  444. let num = Number(this.activeType);
  445. if(type == 'n'){
  446. num++;
  447. }else if(type == 'p'){
  448. num--;
  449. }
  450. this.activeType = num.toString();
  451. },
  452. savecontract(){
  453. return new Promise((resolve, reject) => {
  454. this.$refs['contractForm'].validate((valid) => {
  455. if (valid) {
  456. if(this.flageData.length ==3){
  457. this.contractForm.projectPlace = this.flageData[2];
  458. }
  459. resolve(submitContractInfo(this.contractForm))
  460. }else{
  461. reject('验证失败')
  462. }
  463. })
  464. })
  465. },
  466. handleRemove(file) {
  467. //console.log(file, fileList);
  468. removeFile(file.response.data.attachId).then(()=>{
  469. this.contractForm.startFileUrl = '';
  470. })
  471. },
  472. handleExceed() {
  473. this.$message.warning(`当前限制选择 1 个文件,请先移除后,再次上传`);
  474. },
  475. handleSuccess(res){
  476. this.contractForm.startFileUrl = res.data.link;
  477. },
  478. setHeaders(){
  479. this.headers['Authorization'] = `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`;
  480. this.headers[website.tokenHeader] = 'bearer ' + getToken()
  481. },
  482. downloadFile(){
  483. window.open(this.contractForm.startFileUrl);
  484. },
  485. delFile(){
  486. this.$confirm('是否删除该文件?', '删除开工令', {
  487. distinguishCancelAndClose: true,
  488. confirmButtonText: '删除',
  489. cancelButtonText: '取消'
  490. }).then(() => {
  491. delFileFromUrl(this.contractForm.startFileUrl).then(()=>{
  492. this.isBackShow = false;
  493. this.contractForm.startFileUrl = '';
  494. })
  495. })
  496. },
  497. addUserToProject(){
  498. if(!this.userId){
  499. this.$message({
  500. type: "warning",
  501. message: "请先选择用户再进行添加"
  502. });
  503. return;
  504. }
  505. if(!this.postId){
  506. this.$message({
  507. type: "warning",
  508. message: "请先选择岗位再进行添加"
  509. });
  510. return;
  511. }
  512. if(!this.rId){
  513. this.$message({
  514. type: "warning",
  515. message: "请先选择角色再进行添加"
  516. });
  517. return;
  518. }
  519. let list = [{
  520. projectId:this.pid,
  521. contractId:this.contractForm.id,
  522. userId:this.userId,
  523. postId:this.postId,
  524. roleId:this.rId
  525. }];
  526. saveUserInfoByProject(list).then(()=>{
  527. this.findAllUserByCondition();
  528. })
  529. },
  530. findAllUserByCondition(){
  531. findAllUserByCondition({
  532. "cId": this.contractForm.id,
  533. "pId": this.pid,
  534. "postId": this.postId,
  535. "rId": this.rId
  536. }).then((res)=>{
  537. this.contractUserList = res.data.data;
  538. })
  539. },
  540. handleDelete(index,row){
  541. this.$confirm('是否将该用户移除出合同段', '提示', {
  542. confirmButtonText: '确定',
  543. cancelButtonText: '取消',
  544. type: 'warning'
  545. }).then(() => {
  546. removeUsersByIds(row.id).then(()=>{
  547. this.contractUserList.splice(index,1);
  548. this.$message({
  549. type: "success",
  550. message: "删除成功!"
  551. });
  552. })
  553. })
  554. },
  555. handleDeletes(){
  556. this.$confirm('是否将所有用户移除出合同段', '提示', {
  557. confirmButtonText: '确定',
  558. cancelButtonText: '取消',
  559. type: 'warning'
  560. }).then(() => {
  561. let ids = [];
  562. this.contractUserList.forEach((element)=>{
  563. ids.push(element.id);
  564. })
  565. removeUsersByIds(ids.join(',')).then(()=>{
  566. this.contractUserList = [];
  567. this.$message({
  568. type: "success",
  569. message: "删除成功!"
  570. });
  571. })
  572. })
  573. },
  574. copyAccPas(row){
  575. this.copyText = `姓名:${row.name}
  576. 账号:${row.account}
  577. 密码:${row.password}`;
  578. this.$nextTick(()=>{
  579. this.$refs.copyInput.select()
  580. document.execCommand('copy')
  581. this.$message({
  582. type: "success",
  583. message: "成功复制在剪贴板!"
  584. });
  585. })
  586. },
  587. resetPassword(row){
  588. this.$confirm('是否将用户【'+row.name+'】密码重置为123456', '提示', {
  589. confirmButtonText: '确定',
  590. cancelButtonText: '取消',
  591. type: 'warning'
  592. }).then(() => {
  593. resetPasswordByUserId(row.uId).then(()=>{
  594. row.password = '123456';
  595. this.$message({
  596. type: "success",
  597. message: "重置成功!"
  598. });
  599. })
  600. })
  601. },
  602. getContractTypeList(){
  603. if(this.contractTypeList.length >1){
  604. return;
  605. }
  606. getDictionary({
  607. code:'contract_type'
  608. }).then((res)=>{
  609. res.data.data.forEach(element => {
  610. element.dictKey = Number(element.dictKey)
  611. });
  612. this.contractTypeList = res.data.data;
  613. })
  614. },
  615. getRoleList(){
  616. if(this.roleList.length > 1){
  617. return;
  618. }
  619. getRoleTree().then((res)=>{
  620. let list = [];
  621. res.data.data.forEach((element)=>{
  622. if(element.title == '监理方'||
  623. element.title == '业主方'){
  624. list.push(element);
  625. }else if(element.title == '施工方'){
  626. //给个默认
  627. this.rId = element.id;
  628. list.push(element);
  629. }
  630. })
  631. this.roleList = list;
  632. })
  633. },
  634. getUserByName(){
  635. findUserByName('').then((res)=>{
  636. this.userList = res.data.data;
  637. })
  638. },
  639. getWBSList(){
  640. getwbsList().then((res)=>{
  641. this.wbsList = res.data.data.records;
  642. })
  643. },
  644. wbsChange(wbsid){
  645. getAlltree(this.userInfo.tenant_id,'',wbsid).then((res)=>{
  646. this.leftTreeData = res.data.data;
  647. })
  648. },
  649. }
  650. };
  651. </script>
  652. <style scoped lang="scss">
  653. .bm-view {
  654. width: 100%;
  655. height: 300px;
  656. }
  657. </style>