Browse Source

新增项目管理、服务配置优化

李顺 2 years ago
parent
commit
2bb821664d

+ 22 - 9
src/api/APIs.ts

@@ -132,6 +132,22 @@ export const putPrjList_api = (data) => {
     data: data,
   });
 };
+//区域总部
+export const getOrglist_api = (data) => {
+  return request({
+    method: "get",
+    url: "/tofly-sxgk/org/page",
+    params: data,
+  });
+};
+//区域绑定
+export const getOrgPrj_api = (data) => {
+  return request({
+    method: "post",
+    url: "/tofly-sxgk/orgprj",
+    data: data,
+  });
+};
 
 //修改项目信息管理列表的子列表
 export const putPrjSubList_api = (data) => {
@@ -385,7 +401,7 @@ export const getScanStatistics_api = (data) => {
 export const getBaseCodePage_api = (data) => {
   return request({
     method: "get",
-    url: "/tofly-base/code/page",
+    url: "/base/code/page",
     params: data,
   });
 };
@@ -776,7 +792,7 @@ const TdGroupAdd_api = (type, data) => {
   });
 };
 // 项目管理表格数据
-const AreacompanyPage_api = (data) => {
+export const AreacompanyPage_api = (data) => {
   return request({
     method: "get",
     url: "/tofly-sxgk/areacompany/page",
@@ -785,18 +801,18 @@ const AreacompanyPage_api = (data) => {
 };
 
 // 项目管理表格数据详情
-const BasePrjsourceListSourceById_api = (data) => {
+export const BasePrjsourceListSourceById_api = (data) => {
   return request({
     method: "get",
-    url: "/tofly-base/prjsource/listSourceById",
+    url: "/base/prjsource/listSourceById",
     params: data,
   });
 };
 // 项目管理表格数据更改详情
-const BasePrjsourceUpdate_api = (data) => {
+export const BasePrjsourceUpdate_api = (data) => {
   return request({
     method: "put",
-    url: "/tofly-base/prjsource/update",
+    url: "/base/prjsource/update",
     data: data,
   });
 };
@@ -1218,10 +1234,7 @@ export default {
   TdtechPage_api,
   ProcedurenewPage_api,
   TdfieldsPage_api,
-  AreacompanyPage_api,
   BasePrjsourceUpdate_api,
-  BasePrjsourceListSourceById_api,
-  getBaseCodePage_api,
   Code_api,
   CodeRemoveByIds_api,
   RoleManagementRole_api,

+ 1 - 0
src/router/_import.ts

@@ -10,6 +10,7 @@ const map = {
   // facilityEvaluation: () => import('@/views/facilityEvaluation/index.vue'), // 设施评价
   // funMap: () => import('@/views/currentSystem/map/funCom/index'),
   // 系统权限
+  projectManage:()=>import('@/views/currentSystem/authorityManagement/projectManage/index.vue'),
   userManage: () => import('@/views/currentSystem/authorityManagement/userRights/index.vue'), // 用户管理
   roleManage: () => import('@/views/currentSystem/authorityManagement/rolePermission/index.vue'), // 角色管理
   journalManage: () => import('@/views/currentSystem/authorityManagement/journal/index.vue'), // 日志管理

+ 36 - 2
src/store/modules/cesiumMap.ts

@@ -1,4 +1,5 @@
 import AppX from '@/config/configure'
+import APIs from '@/api/APIs'
 const getDefaultState = () => {
     return {
         tdttoken: '75293e320524bb2be0a5f14fa887e46f',
@@ -57,8 +58,41 @@ const actions = {
                 AppX.appConfig.infowindow.remove();
                 AppX.appConfig.infowindow = null;
             }
-            commit('SET_GISSOURCE', AppX);
-            resolve(AppX);
+            if (AppX.appConfig.online) {
+                APIs.GetUserInitData({ platform: 1 }).then((result) => {
+                    const resData = result.data.result;
+                    if (resData) {
+                        AppX.appConfig.initPosition = JSON.parse(resData.position);
+                        for (var pro in AppX.appConfig.gisResource) {
+                            AppX.appConfig.gisResource[pro].config = {};
+                            if (resData.progisresource && resData.progisresource.length > 0) {
+                                for (
+                                    var index = 0;
+                                    index < resData.progisresource.length;
+                                    index++
+                                ) {
+                                    if (resData.progisresource[index].code == pro) {
+                                        // var configs = (AppX.appConfig.gisResource[pro].config =
+                                        //   resData.progisresource[index].config);
+                                        var configs = resData.progisresource[index].config;
+                                        for (var i = 0; i < configs.length; i++) {
+                                            AppX.appConfig.gisResource[pro].config[configs[i].key] = configs[i];
+                                        }
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                        commit('SET_GISSOURCE', AppX);
+                        resolve(AppX);
+                    }
+                }).catch((err) => {
+                    reject(err);
+                })
+            } else {
+                commit('SET_GISSOURCE', AppX);
+                resolve(AppX);
+            }
         })
     }
 }

+ 175 - 71
src/views/OnlineImport/widgets/DataImport/widget.vue

@@ -36,31 +36,31 @@
       <el-form :inline="true" class="toolbar" size="mini">
         <el-form-item label="所属区域">
           <el-select v-model="areaName" filterable clearable placeholder="请选择" size="mini">
-            <el-option v-for="item in prjOptions" :key="item.code" :label="item.name" :value="item.name">
+            <el-option v-for="item in prjOptions" :key="item.code" :label="item.name" :value="item.value">
             </el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="项目">
           <el-select v-model="selectPrjId" filterable clearable placeholder="请选择" size="mini">
-            <el-option v-for="item in optionsoffter" :key="item.key" :label="item.name" :value="item.vule">
+            <el-option v-for="item in optionsoffter" :key="item.key" :label="item.name" :value="item.value">
             </el-option>
           </el-select>
         </el-form-item>
         <el-form-item>
           <el-input v-model="queryPara" clearable placeholder="支持数据名称,上传单位">
-            <el-button slot="append" size="mini" icon="el-icon-search"></el-button>
-
+            <el-button type="primary" slot="append" size="mini" icon="el-icon-search" @click="getlist"></el-button>
           </el-input>
+          <!-- <el-button type="primary" size="mini" icon="el-icon-search" @click="getlist"></el-button> -->
         </el-form-item>
         <el-form-item label="提交状态">
-          <el-radio-group v-model="radio">
+          <el-radio-group v-model="radio" @change="getlist">
             <el-radio label="">全部</el-radio>
             <el-radio label="1">未提交</el-radio>
-            <el-radio label="2">已提交</el-radio>
+            <el-radio label="0">已提交</el-radio>
           </el-radio-group>
         </el-form-item>
         <el-form-item>
-          <el-radio-group v-model="radio2">
+          <el-radio-group v-model="radio2" @change="getlist">
             <el-radio label="">全部</el-radio>
             <el-radio label="2">设计</el-radio>
             <el-radio label="1">普查</el-radio>
@@ -69,10 +69,30 @@
         </el-form-item>
       </el-form>
       <!-- 弹出框表单 -->
-      <div style="height:410px">
-        <tf-table @page-change="onPageChange" :columns="tableColumns" :data="onlineRecords" :pagination="pagination">
+      <div class="content-body" style="height:410px;">
+        <tf-table @page-change="onPageChange" :data="onlineRecords" :pagination="pagination">
+          <template slot="empty">
+            <img src="@/assets/icon/null.png" alt="暂无数据" />
+          </template>
+          <el-table-column prop="id" label="ID" width="100"></el-table-column>
+          <el-table-column prop="areaName" label="所属区域"></el-table-column>
+          <el-table-column prop="fullName" label="项目"></el-table-column>
+          <el-table-column prop="division" label="片区"></el-table-column>
+          <el-table-column prop="batchName" label="数据名称" :show-overflow-tooltip="true"></el-table-column>
+          <el-table-column prop="dataSource" label="数据阶段"></el-table-column>
+          <el-table-column prop="submitStatus" label="提交状态"></el-table-column>
+          <el-table-column prop="detectionUnit" label="上传单位" :show-overflow-tooltip="true"></el-table-column>
+          <el-table-column prop="updateTime" label="上传时间" width="150px"></el-table-column>
+          <el-table-column label="下载" width="50">
+            <template slot-scope="scope">
+              <el-button type="text" icon="el-icon-download" @click="downLoadFile(scope.row)"></el-button>
+            </template>
+          </el-table-column>
         </tf-table>
       </div>
+      <!-- <div class="content-footer">
+        <el-pagination class="pagination" @size-change="onPageChange" @current-change="onPageChange" :current-page="pagination.current" :page-sizes="pageSizes" :page-size="pagination.size" layout="total, sizes, prev, pager, next, jumper" :total="pagination.total"></el-pagination>
+      </div> -->
     </tf-dialog>
   </div>
 </template>
@@ -83,10 +103,12 @@
  *@author lishun <876330731@qq.com>
  */
 import { Vue, Prop, Watch, Component } from 'vue-property-decorator'
-import request from '@/utils/request'
+import request, { IP } from '@/utils/request'
 import PbsTree from './components/PbsTree.vue'
 import { getDefaultPagination } from '@/utils/constant'
+import { pageSizes } from '@/utils/constant'
 import { IPagination } from '@/api/common'
+import { result } from 'lodash'
 @Component({
   name: 'DataImport',
   components: { PbsTree }
@@ -100,6 +122,7 @@ export default class DataImport extends Vue {
     paperPerson: '',
     origin: ''
   }
+  pageSizes = pageSizes
   addRules = {
     prjName: [{ required: true, message: '请选择单位工程', trigger: 'blur' }],
     stage: [{ required: true, message: '请选择数据阶段', trigger: 'change' }],
@@ -110,7 +133,7 @@ export default class DataImport extends Vue {
   /**
    * PBS结构树层级ID
    */
-  selectProjID=null;
+  selectProjID = null
   /**
   在线获取弹窗开关
    */
@@ -122,8 +145,7 @@ export default class DataImport extends Vue {
   queryPara = ''
   prjOptions = []
   optionsoffter = [
-    { name: '暂无', vule: '', key: '1' },
-    { name: '全部', vule: '', key: '2' }
+    { name: '全部', value: '', key: '2' }
   ]
   pagination: IPagination = getDefaultPagination()
   tableColumns = [
@@ -136,7 +158,7 @@ export default class DataImport extends Vue {
       label: '所属区域'
     },
     {
-      prop: 'proName',
+      prop: 'fullName',
       label: '项目'
     },
     {
@@ -145,7 +167,8 @@ export default class DataImport extends Vue {
     },
     {
       prop: 'batchName',
-      label: '数据名称'
+      label: '数据名称',
+      showOverflowTooltip: true
     },
     {
       prop: 'dataSource',
@@ -157,7 +180,8 @@ export default class DataImport extends Vue {
     },
     {
       prop: 'detectionUnit',
-      label: '上传单位'
+      label: '上传单位',
+      showOverflowTooltip: true
     },
     {
       prop: 'proName',
@@ -165,10 +189,12 @@ export default class DataImport extends Vue {
     },
     {
       prop: 'updateTime',
-      label: '上传时间'
+      label: '上传时间',
+      minWidth: '150px'
     },
     {
-      slot: 'DownloadBtn'
+      slot: 'DownloadBtn',
+      width: '50px'
     }
   ]
   /**
@@ -226,9 +252,9 @@ export default class DataImport extends Vue {
       `当前限制选择 2 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`
     )
   }
-  treeNodeClick(info){
-    if(!info) return;
-    this.selectProjID=info.id;
+  treeNodeClick(info) {
+    if (!info) return
+    this.selectProjID = info.id
   }
   /**
   导入excel表,创建二三维数据集  
@@ -238,26 +264,26 @@ export default class DataImport extends Vue {
       this.$message.warning('请上传管网数据表')
       return
     }
-    if(!this.selectProjID){
-      this.$message.warning('请选择导入层级');
-      return;
+    if (!this.selectProjID) {
+      this.$message.warning('请选择导入层级')
+      return
     }
     const formdata = new FormData()
     this.files.forEach((item) => {
       formdata.append('files', item)
     })
-    formdata.append('importType', '0');
-    formdata.append('id', ''+this.selectProjID);
-    
+    formdata.append('importType', '0')
+    formdata.append('id', '' + this.selectProjID)
+
     request({
-      url: '/tofly-lzd-data/data/import/'+this.selectProjID,
+      url: '/tofly-lzd-data/data/import/' + this.selectProjID,
       method: 'POST',
       data: formdata
     })
       .then((result) => {
-        if(result.code===1){
-          this.$message.success("生成数据集成功");
-          this.buildNetwork();
+        if (result.code === 1) {
+          this.$message.success('生成数据集成功')
+          this.buildNetwork()
         }
       })
       .catch((err) => {
@@ -273,25 +299,25 @@ export default class DataImport extends Vue {
       this.$message.warning('请上传管网数据表')
       return
     }
-    if(!this.selectProjID){
-      this.$message.warning('请选择导入层级');
-      return;
+    if (!this.selectProjID) {
+      this.$message.warning('请选择导入层级')
+      return
     }
     const formdata = new FormData()
     this.files.forEach((item) => {
       formdata.append('files', item)
     })
-    formdata.append('importType', '1');
-    formdata.append('id', ''+this.selectProjID);
-    
+    formdata.append('importType', '1')
+    formdata.append('id', '' + this.selectProjID)
+
     request({
-      url: '/tofly-lzd-data/data/import/'+this.selectProjID,
+      url: '/tofly-lzd-data/data/import/' + this.selectProjID,
       method: 'POST',
       data: formdata
     })
       .then((result) => {
-        this.$message.success("生成数据集成功");
-        this.buildNetwork();
+        this.$message.success('生成数据集成功')
+        this.buildNetwork()
       })
       .catch((err) => {
         this.$message.error('导入excel出错')
@@ -307,10 +333,10 @@ export default class DataImport extends Vue {
       method: 'POST'
     })
       .then((result) => {
-        console.log(result);
+        console.log(result)
         if (result.code === 1) {
-          this.$message.success('三维网络生成成功');
-          this.buildModelTiles();
+          this.$message.success('三维网络生成成功')
+          this.buildModelTiles()
         }
       })
       .catch((err) => {
@@ -327,10 +353,10 @@ export default class DataImport extends Vue {
       method: 'POST'
     })
       .then((result) => {
-        console.log(result);
+        console.log(result)
         if (result.code === 1) {
           this.$message.success('三维网络生成成功')
-          this.zsbuildModelTiles();
+          this.zsbuildModelTiles()
         }
       })
       .catch((err) => {
@@ -349,7 +375,7 @@ export default class DataImport extends Vue {
       .then((result) => {
         if (result.code === 1) {
           this.$message.success('场景缓存生成成功')
-          this.publishService();
+          this.publishService()
         }
       })
       .catch((err) => {
@@ -368,8 +394,8 @@ export default class DataImport extends Vue {
       .then((result) => {
         console.log(result)
         if (result.code === 1) {
-          this.$message.success('场景缓存生成成功');
-          this.zspublishService();
+          this.$message.success('场景缓存生成成功')
+          this.zspublishService()
         }
       })
       .catch((err) => {
@@ -389,9 +415,9 @@ export default class DataImport extends Vue {
         console.log(result)
         if (result.code === 1) {
           this.$message.success('服务发布成功')
-          this.addScene(result.result+"/realspace").then(layers=>{
-            this.$message.success('三维管线模型加载完成');
-          });
+          this.addScene(result.result + '/realspace').then((layers) => {
+            this.$message.success('三维管线模型加载完成')
+          })
         }
       })
       .catch((err) => {
@@ -411,8 +437,8 @@ export default class DataImport extends Vue {
         console.log(result)
         if (result.code === 1) {
           this.$message.success('服务发布成功')
-          this.addScene(result.result+"/realspace").then(layers=>{
-            this.$message.success('三维管线模型加载完成');
+          this.addScene(result.result + '/realspace').then((layers) => {
+            this.$message.success('三维管线模型加载完成')
           })
         }
       })
@@ -421,29 +447,28 @@ export default class DataImport extends Vue {
         console.log(err)
       })
   }
-  addScene(url){
+  addScene(url) {
     //@ts-ignore
-    const viewer=window.viewer;
-    return viewer.scene.open(url,undefined, {
-      autoSetView: false,
-    });
-
+    const viewer = window.viewer
+    return viewer.scene.open(url, undefined, {
+      autoSetView: false
+    })
   }
   /**
    * 根据工程id删除数据
    */
-  deleteData(){
-    if(!this.selectProjID){
-      this.$message.success('请选择PBS结构树层级');
-      return;
+  deleteData() {
+    if (!this.selectProjID) {
+      this.$message.success('请选择PBS结构树层级')
+      return
     }
     request({
-      url: '/tofly-lzd-data/data/deleteData/'+this.selectProjID+'?importType=1&id='+this.selectProjID,
+      url: '/tofly-lzd-data/data/deleteData/' + this.selectProjID + '?importType=1&id=' + this.selectProjID,
       method: 'POST'
     })
       .then((result) => {
         if (result.code === 1) {
-          this.$message.success('数据删除成功');
+          this.$message.success('数据删除成功')
         }
       })
       .catch((err) => {
@@ -453,15 +478,71 @@ export default class DataImport extends Vue {
   }
   OnlineAccess() {
     this.dialogVisible = true
-    this.getlist()
+    this.getlist();
+    this.getAreaInfo();
     // const obj = await this.$PortApi.getAreaInfo_api();//公司名称
     // this.prjOptions = obj.data.result;
     // console.log(this.prjOptions, '公司名称');
   }
+  /**
+   * 在线获取-项目公司列表信息
+   */
+  getAreaInfo(){
+    request({
+      url:"/tofly-sxgk/outpiper/getAreaInfo",
+      method:'GET',
+      params:{}
+    }).then(result=>{
+      if(result.code!==1){
+        return;
+      }
+      const list=[{name:"全部",value:""}];
+      result.result.forEach(item=>{
+        list.push({name:item.name,value:item.name});
+      })
+      this.prjOptions=list;
+    })
+  }
   onPageChange(pagination) {
     this.pagination = { ...this.pagination, ...pagination }
     this.getlist()
   }
+  /**
+   * 在线获取- 文件下载
+   */
+  downLoadFile(row) {
+    let filename = row.files[0].fileSourceName
+    let fileurl
+    if (row.files[0].localFileUrl != null) {
+      fileurl = row.files[0].localFileUrl
+      let url =
+        IP+'/base/file/downloadFile?remotePath=' + fileurl + '&fileName=' + filename + '&access_token=' + this.$store.getters.token
+      window.open(url,'_parent');
+      
+    } else {
+      let id = row.files[0].id.toString()
+      request({
+        url: '/tofly-sxgk/pipepr/downloadRemote',
+        method: 'GET',
+        params: { fileIdsStr: id }
+      }).then((result) => {
+        if (result.code !== 1) return
+        if (result) {
+          fileurl = result.result[0].url
+          let url =
+            IP +
+            '/base/file/downloadFile?remotePath=' +
+            fileurl +
+            '&fileName=' +
+            filename +
+            '&access_token=' +
+            this.$store.getters.token;
+            window.open(url,'_parent');
+          
+        }
+      })
+    }
+  }
   /**
    * 获取图纸在线表单
    */
@@ -480,13 +561,12 @@ export default class DataImport extends Vue {
       url: '/tofly-sxgk/outpiper/page',
       params: params
     }).then((res) => {
-      console.log(res.data, '在线获取图纸名称')
       //      pagesizes: [10, 25, 50, 100],
       // pagesize: 10,
       // currentPage: 1,
       // totalNum: 0,
       const { records, size, total, current } = res.result
-      this.onlineRecords = records
+      //this.onlineRecords = records
       this.pagination.size = size
       this.pagination.current = current
       this.pagination.total = total
@@ -495,11 +575,16 @@ export default class DataImport extends Vue {
         1: '普查',
         3: '竣工'
       }
-      this.onlineRecords = res.data.result.records.map((item) => {
+      const status = {
+        0: '已提交',
+        1: '未提交'
+      }
+      this.onlineRecords = records.map((item) => {
         Object.keys(item).forEach((val) => (item[val] = item[val] || '暂无'))
         return {
           ...item,
-          dataSource: obj[item.dataSource]
+          dataSource: obj[item.dataSource],
+          submitStatus: status[item.submitStatus]
         }
       })
     })
@@ -511,8 +596,27 @@ export default class DataImport extends Vue {
 .eluploadcontainer {
   >>> .el-upload-list {
     height: 100px;
-    border: 1px solid #DCDFE6;
+    border: 1px solid #dcdfe6;
     margin-top: 10px;
   }
 }
+.content-body {
+  .el-table {
+    >>> th > .cell {
+      white-space: pre-line;
+    }
+    >>> .el-table__body {
+      td.el-table__cell {
+        padding: 0 !important;
+        height: 34px;
+      }
+    }
+  }
+}
+.content-footer {
+  width: 100%;
+  height: 55px;
+  line-height: 35px;
+  padding: 10px 20px;
+}
 </style>

+ 763 - 0
src/views/currentSystem/authorityManagement/projectManage/index.vue

@@ -0,0 +1,763 @@
+<template>
+  <div id="ProssBox">
+    <!-- 查询 -->
+    <div class="searchBox">
+      <el-row :gutter="10">
+        <el-col :span="16">
+          <div>
+            <span>项目名称:</span>
+            <el-input placeholder="请输入项目名称" size="mini" v-model="boGroup" style="width: 204px" clearable>
+            </el-input>
+            <el-button style="margin-left:10px" type="primary" size="mini" @click="getlistdata()">查询</el-button>
+            <!-- <el-button type="primary" size="mini" @click="newopen()">新建项目</el-button>
+            <el-button type="primary" size="mini" @click="deleteProject()">删除项目</el-button> -->
+            <!-- <el-button type="primary" size="mini" @click="syncProject()">项目同步</el-button>
+            <el-button type="primary" size="mini" @click="syncContract()">合同同步</el-button> -->
+            <el-button type="primary" size="mini" @click="initialPosition()">初始位置</el-button>
+            <el-button type="primary" size="mini" @click="processConfig()">工艺配置</el-button>
+            <el-button type="primary" size="mini" @click="orgprj()">区域绑定</el-button>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+    <!-- 项目详情 -->
+    <div class="projectBox">
+      <el-row :gutter="20" style=" height:100%;margin:0px">
+        <el-col :span="12" style=" height:100%;">
+          <!-- 主项目 -->
+          <div class="grid-content bg-purple">
+            <tf-table ref="prjTb" highlight-current-row :data="tableData" @selection-change="handleSelectionChange" @row-click="details">
+              <el-table-column type="selection" width="55"> </el-table-column>
+              <el-table-column prop="name" label="项目名称(项目编号)" style="width: 100%">
+                <template slot-scope="scope">{{ scope.row.name }}({{ scope.row.code }})</template>
+              </el-table-column>
+            </tf-table>
+            <!-- <el-table ref="multipleTable"  highlight-current-row
+            :stripe="true"
+            :data="tableData" 
+            tooltip-effect="dark" 
+            height="100%" 
+            align="center" 
+            style="width: 100%" 
+            :header-cell-style="headerStyle"
+            @selection-change="handleSelectionChange" 
+            @row-click="details">
+              <el-table-column type="selection" width="55"> </el-table-column>
+              <el-table-column prop="name" label="项目名称(项目编号)" style="width: 100%">
+                <template slot-scope="scope">{{ scope.row.name }}({{ scope.row.code }})</template>
+              </el-table-column>
+            </el-table> -->
+          </div>
+        </el-col>
+        <el-col :span="12" style="height: 100%">
+          <!-- 项目详情 -->
+          <div class="grid-content test-5" style="height: calc(100% - 98px);">
+            <span style="display:block;margin-bottom:10px;">资源配置:</span>
+            <el-tree style="height:calc(100% - 30px);border:1px solid #dbe4ff;" v-if="data" :data="data" show-checkbox default-expand-all node-key="id" ref="tree" highlight-current :props="defaultProps" :default-checked-keys="treeSelectKeys" @node-contextmenu="setServeIndex">
+            </el-tree>
+          </div>
+          <div class="buttons">
+            <el-checkbox v-model="isShowServeIndex" label="显示服务序号" border size="mini" :disabled="data.length==0" @change="showServeIndex()"></el-checkbox>
+            <el-button type="primary" @click="getCheckedKeys" size="mini">资源配置保存</el-button>
+            <!-- <el-button @click="setCheckedKeys">通过 key 设置</el-button> -->
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+    <el-dialog title="新增项目" :visible.sync="dialogFormVisible">
+      <el-form :model="form">
+        <el-form-item label="项目编码" :label-width="formLabelWidth" :rules="[
+     { required: true, message: '请输入项目编码', trigger: 'blur' },
+    ]">
+          <el-input v-model="form.code" placeholder="请输入项目编码" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="项目全称" :label-width="formLabelWidth" :rules="[
+     { required: true, message: '请输入项目全称', trigger: 'blur' },
+    ]">
+          <el-input v-model="form.name" autocomplete="off" placeholder="请输入项目全称"></el-input>
+        </el-form-item>
+
+        <el-form-item label="工程范围" :label-width="formLabelWidth">
+          <el-input v-model="form.gcfw" autocomplete="off" placeholder="请输入工程范围"></el-input>
+        </el-form-item>
+        <el-form-item label="建设单位" :label-width="formLabelWidth">
+          <el-input v-model="form.unit" autocomplete="off" placeholder="请输入建设单位"></el-input>
+        </el-form-item>
+        <el-form-item label="项目投资" :label-width="formLabelWidth">
+          <el-input v-model="form.xmtz" autocomplete="off" placeholder="请输入项目投资"></el-input>
+        </el-form-item>
+        <el-form-item label="项目工期" :label-width="formLabelWidth">
+          <el-input v-model="form.xmzq" autocomplete="off" placeholder="请输入项目工期"></el-input>
+        </el-form-item>
+        <el-form-item label="项目介绍" :label-width="formLabelWidth">
+          <el-input type="textarea" v-model="form.xmjs" autocomplete="off" placeholder="请输入项目介绍" :autosize="{ minRows: 5}"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false">取 消</el-button>
+        <el-button type="primary" @click="addProject() ">确 定</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog title="初始位置" :visible.sync="dialogFormVisible2">
+      <el-form :model="form2">
+        <el-form-item label="经度" :label-width="formLabelWidth" :rules="[
+     { required: true, message: '请输入经度', trigger: 'blur' },
+    ]">
+          <el-input v-model="form2.lon" placeholder="请输入经度" autocomplete="off"></el-input>
+        </el-form-item>
+
+        <el-form-item label="纬度" :label-width="formLabelWidth" :rules="[
+     { required: true, message: '请输入纬度', trigger: 'blur' },
+    ]">
+          <el-input v-model="form2.lat" autocomplete="off" placeholder="请输入项目全称"></el-input>
+        </el-form-item>
+        <el-form-item label="相机高度" :label-width="formLabelWidth" :rules="[
+     { required: true, message: '请输入相机高度', trigger: 'blur' },
+    ]">
+          <el-input v-model="form2.height" autocomplete="off" placeholder="请输入相机高度"></el-input>
+        </el-form-item>
+        <el-form-item label="空间数据库" :label-width="formLabelWidth">
+          <el-input v-model="form2.dataUser" autocomplete="off" placeholder="请输入空间数据库"></el-input>
+        </el-form-item>
+        <el-form-item label="坐标参考系" :label-width="formLabelWidth">
+          <el-input v-model="form2.wkid" autocomplete="off" placeholder="请输入坐标参考系"></el-input>
+        </el-form-item>
+        <el-form-item label="PBS编码模板" :label-width="formLabelWidth">
+          <el-input v-model="form2.pbsModel" autocomplete="off" placeholder="请输入PBS编码模板"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible2 = false">取 消</el-button>
+        <el-button type="primary" @click="putInitial() ">确 定</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog title="工艺配置" :visible.sync="dialogFormVisible3" width="25%">
+      <el-form :model="form3">
+        <el-form-item label="项目名称:" :label-width="formLabelWidth">
+          <el-input v-model="form3.name" placeholder="请输入项目全称" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="工艺分组:" :label-width="formLabelWidth">
+          <el-select v-model="processValue" placeholder="请选择" style="width:100%" @change="processChange($event)">
+            <el-option v-for="item in processOptions" :key="item.id" :label="item.value" :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="选择工艺:" :label-width="formLabelWidth" v-show="checkItems.length!=0">
+          <el-checkbox-group v-model="checkedConfig">
+            <el-checkbox v-for="item in checkItems" :key="item.id" :label="item.id">{{item.name}}</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="closeProcessConfig()">取 消</el-button>
+        <el-button @click="submitConfig()" type="primary">确 定</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog title="服务顺序配置" :visible.sync="dialogFormVisible4" width="25%">
+      <el-form :model="form4">
+        <el-form-item label="服务名称:" :label-width="formLabelWidth">
+          <el-input v-model="form4.name" placeholder="请输入项目全称" autocomplete="off" disabled></el-input>
+        </el-form-item>
+        <el-form-item label="服务序号:" :label-width="formLabelWidth" :rules="[
+     { required: true, message: '请输入服务序号', trigger: 'blur' },
+    ]">
+          <el-input v-model="form4.sort" placeholder="请输入序号" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="分组名称:" :label-width="formLabelWidth" :rules="[
+     { required: true, message: '请输入分组名称', trigger: 'blur' },
+    ]">
+          <el-input v-model.trim="form4.groupname" placeholder="请输入分组名称" autocomplete="off"></el-input>
+        </el-form-item>
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible4 = false">取 消</el-button>
+        <el-button @click="setServiceSort()" type="primary">确 定</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog title="区域绑定" :visible.sync="dialogOrgFormVisible" width="25%">
+      <el-form :model="formOrg">
+        <el-form-item label="区域总部:" :label-width="formLabelWidth">
+          <el-select v-model="formOrg.orgId" placeholder="请选择" style="width:100%">
+            <el-option v-for="item in orgOptions" :key="item.id" :label="item.orgName" :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogOrgFormVisible = false">取 消</el-button>
+        <el-button @click="setOrgPrj()" type="primary">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import axios from 'axios'
+import {
+  postPrjSubList_api,
+  syncProject_api,
+  syncContract_api,
+  putPrjList_api,
+  deleteProject_api,
+  getBaseCodePage_api,
+  batchByTdIds_api,
+  updateSort_api,
+  AreacompanyPage_api,
+  BasePrjsourceListSourceById_api,
+  BasePrjsourceUpdate_api,
+  getOrglist_api,
+  getOrgPrj_api
+} from '@/api/APIs'
+export default {
+  name: 'ProjectResource',
+  data() {
+    return {
+      boGroup: '',
+      tableData: [],
+      headerStyle: {
+        textAlign: 'center'
+      },
+      multipleSelection: [],
+      dialogFormVisible: false,
+      dialogFormVisible2: false,
+      data: [],
+      treeData: [],
+      defaultProps: {
+        children: 'funs',
+        label: 'name'
+      },
+      detailsurl: '/base/prjsource/listSourceById', //详情同飞数据库
+      detailsPutUrl: '/base/prjsource/update', //详情更改同飞数据库
+      treeSelectKeys: [],
+      treeClickRow: null,
+      ids: '', //详情id
+      // 新增
+      form: {
+        code: '',
+        gcfw: '',
+        name: '',
+        unit: '',
+        xmtz: '',
+        xmzq: '',
+        xmjs: ''
+      },
+      form2: {
+        lon: '',
+        id: '',
+        lat: '',
+        height: '',
+        dataUser:'',
+        wkid:'',
+        pbsModel:null
+      },
+      formLabelWidth: '120px',
+      dialogFormVisible3: false,
+      dialogOrgFormVisible:false,
+      form3: {
+        name: ''
+      },
+      processValue: '',
+      processOptions: [],
+      checkItems: [],
+      checkedConfig: [],
+      maps: ['maps', 'img', 'theme'],
+      isShowServeIndex: false,
+      dialogFormVisible4: false,
+      form4: {
+        name: '',
+        sort: '',
+        groupname: '',
+        id: ''
+      },
+      formOrg:{
+        orgId:''
+      },
+      orgOptions:[]
+    }
+  },
+
+  methods: {
+    newopen() {
+      this.dialogFormVisible = true
+    },
+    // 获取表格
+    async getlistdata() {
+      let params = {
+        name: this.boGroup,
+        current: 1,
+        size: 10000
+      }
+      let res = await AreacompanyPage_api(params)
+      let { code, result } = res
+      if (code === 1) {
+        this.tableData = result.records
+        this.$nextTick(()=>{
+          if(this.tableData.length>0){//默认选择第一行
+            this.details(this.tableData[0]);
+            console.log(this.$refs.prjTb);
+            this.$refs.prjTb.$refs.table.setCurrentRow(this.tableData[0]);
+          }
+          
+        })
+      }
+    },
+    //更改详情
+    async getCheckedKeys() {
+      console.log(this.$refs.tree.getCheckedKeys())
+      let data = {
+        prjId: this.ids.toString(),
+        sourceIds: this.$refs.tree.getCheckedKeys().join(','),
+        type: 'Source'
+      }
+      let res = await BasePrjsourceUpdate_api(data)
+      let { code, message } = res
+      if (code == 1) {
+        this.$message({
+          message: '资源配置成功!',
+          type: 'success'
+        })
+      } else {
+        this.$message.error(message)
+      }
+    },
+    // 获取详情
+    async details(row) {
+      this.treeClickRow = row
+      this.treeSelectKeys = []
+      this.ids = row.id
+      let params = {
+        id: row.id,
+        current: 1,
+        size: 10000
+      }
+      let res = await BasePrjsourceListSourceById_api(params)
+      let { code, result } = res
+      console.log({ 资源: result })
+      if (code === 1) {
+        this.treeData = result
+        this.data = result.map((item) => {
+          // console.log("item", item);
+          let selectData = item.funs.filter((dt) => dt.isExists == 'true')
+          let drs = selectData.map((dt) => dt.id)
+          this.treeSelectKeys.push(...drs)
+          if (this.isShowServeIndex) {
+            return {
+              ...item,
+              funs: this.fileName(item, this.isShowServeIndex)
+            }
+          } else {
+            return {
+              ...item
+              // children: item.funs,
+            }
+          }
+        })
+      }
+    },
+    // 新增项目
+    addProject() {
+      let data = {
+        code: this.form.code,
+        gcfw: this.form.gcfw,
+        name: this.form.name,
+        unit: this.form.unit,
+        xmtz: this.form.xmtz,
+        xmzq: this.form.xmzq,
+        xmjs: this.form.xmjs
+      }
+      postPrjSubList_api(data)
+        .then((res) => {
+          console.log(res.data, '成功数据')
+          let { code, message } = res
+
+          if (code == 1) {
+            this.$message({
+              message: '新增成功!',
+              type: 'success'
+            })
+            this.dialogFormVisible = false
+            this.getlistdata()
+          } else {
+            this.$message.error(message)
+          }
+        })
+        .catch((err) => {
+          console.log(err)
+        })
+    },
+    // 项目同步
+    syncProject() {
+      this.$message({
+        message: '项目同步时间较长,请稍后查看!',
+        type: 'warning'
+      })
+      syncProject_api({})
+        .then((res) => {
+          console.log(res.data, '成功数据')
+          let { code, result } = res
+          if (code === 1) {
+            this.$message({
+              message: '项目同步成功!',
+              type: 'success'
+            })
+          }
+        })
+        .catch((err) => {
+          console.log(err)
+        })
+    },
+    //  勾选框
+    handleSelectionChange(val) {
+      debugger;
+      if (val.length != 0) {
+        this.form2.id = val[0].id
+        this.multipleSelection = val
+      } else {
+        this.multipleSelection = []
+      }
+    },
+    // 初始位置
+    initialPosition() {
+      if (this.multipleSelection.length == 1) {
+        this.dialogFormVisible2 = true
+        const china = {
+          lon: 116.435314,
+          lat: 40.960521,
+          height: 10000000.0
+        }
+        const project=this.multipleSelection[0];
+        const position = project['geo_info']
+        if (!position) {
+          this.form2.lon = china.lon
+          this.form2.lat = china.lat
+          this.form2.height = china.height
+        } else if (position) {
+          try {
+            const initposition = JSON.parse(position)
+            this.form2.lon = initposition.lon
+            this.form2.lat = initposition.lat
+            this.form2.height = initposition.height
+          } catch (error) {
+            this.form2.lon = china.lon
+            this.form2.lat = china.lat
+            this.form2.height = china.height
+          }
+          this.form2.dataUser=project.dataUser;
+          this.form2.wkid=project.wkid;
+          this.form2.pbsModel=project.pbsModel;
+        }
+      } else {
+        this.$message('请勾选一个项目!')
+      }
+    },
+    //更改初始位置
+    putInitial() {
+      const lon = this.form2.lon
+      const lat = this.form2.lat
+      const height = this.form2.height
+      if (isNaN(lon) || isNaN(lat) || isNaN(height)) {
+        this.$message('请填写坐标信息')
+        return
+      }
+      const data = {
+        id: this.form2.id,
+        geo_info: JSON.stringify({
+          lon: lon,
+          lat: lat,
+          height: height
+        }),
+        dataUser:this.form2.dataUser,
+        wkid:this.form2.wkid,
+        pbsModel:this.form2.pbsModel
+      }
+      putPrjList_api(data)
+        .then((res) => {
+          const e = res
+          if (e.code !== -1) {
+            this.dialogFormVisible2 = false
+            this.$message.success('保存成功')
+          } else {
+            this.$message.error('保存失败')
+          }
+        })
+        .catch((err) => {
+          console.log(err)
+        })
+    },
+    //合同同步
+    syncContract() {
+      this.$message({
+        message: '同步进行中,时间较长请稍后查看',
+        type: 'warning'
+      })
+      syncContract_api({})
+        .then((res) => {
+          const e = res
+          if (e.code === -1) {
+            this.$message.error('合同同步失败')
+          } else {
+            this.$message.success('合同同步成功')
+          }
+        })
+        .catch((err) => {
+          console.log(err)
+        })
+    },
+    //删除项目
+    deleteProject() {
+      if (this.multipleSelection.length < 1) {
+        this.$message('请选择至少一位项目进行删除!')
+        return
+      }
+      let deleteInfo = { ids: [] }
+      for (var id in this.multipleSelection) {
+        deleteInfo.ids.push(id)
+      }
+      deleteProject_api(deleteInfo)
+        .then((res) => {
+          const results = res
+          if (results.code != 1) {
+            console.error(results.message)
+          } else {
+            this.$message.success('项目删除成功')
+          }
+        })
+        .catch((err) => {
+          console.log(err)
+        })
+    },
+    //工艺配置
+    processConfig() {
+      if (this.multipleSelection.length == 0) {
+        this.$message('请选择一行数据进行工艺配置')
+        return
+      }
+      if (this.multipleSelection.length > 1) {
+        this.$message('最多选择一行数据进行工艺配置')
+        return
+      }
+      this.processOptions = []
+      this.checkedConfig = []
+      let datas = this.multipleSelection[0]
+      this.form3.name = datas.name
+      //分组查询
+      let data2 = {
+        key: 'td_tech_group',
+        ulevel: '2',
+        size: 999
+      }
+      getBaseCodePage_api(data2)
+        .then((res) => {
+          const results = res
+          this.processOptions = results.result.records
+          this.dialogFormVisible3 = true
+        })
+        .catch((err) => {
+          console.log(err)
+        })
+    },
+    processChange(data) {
+      this.checkItems = []
+      this.checkedConfig = []
+      this.$PortApi
+        .TdtechPage_api({ tdGroupId: data })
+        .then((res) => {
+          const results = res.data
+          if (results.result.records.length == 0) {
+            return
+          }
+          results.result.records.forEach((item) => {
+            this.checkItems.push({ name: item.name, id: item.id })
+          })
+        })
+        .catch((err) => {
+          console.log(err)
+        })
+    },
+    /**
+     * 项目绑定区域
+     */
+    orgprj(){
+      if (this.multipleSelection.length == 0) {
+        this.$message('请选择一行数据进行区域绑定')
+        return
+      }
+      if (this.multipleSelection.length > 1) {
+        this.$message('最多选择一行数据进行区域绑定')
+        return
+      }
+      this.processOptions = []
+      this.checkedConfig = []
+      let datas = this.multipleSelection[0]
+     
+      getOrglist_api({})
+        .then((res) => {
+          const results = res
+          this.orgOptions = results.result.records
+          this.dialogOrgFormVisible = true
+        })
+        .catch((err) => {
+          console.log(err)
+        })
+    },
+    setOrgPrj(){
+      const prjid=this.form2.id;
+      const orgid=this.formOrg.orgId;
+      const data={
+        prjId: prjid,
+        orgId: orgid
+      }
+      getOrgPrj_api(data).then(result=>{
+        if(result.code===1){
+          this.$message.success('区域绑定成功');
+          this.dialogOrgFormVisible=false;
+        }
+      }).catch((err) => {
+        this.$message.error('区域绑定失败');
+        console.log(err)
+      })
+    },
+    submitConfig() {
+      let checkString = []
+      this.checkedConfig.forEach((item) => {
+        checkString.push(item)
+      })
+      let setData = {
+        prjId: this.multipleSelection[0].id,
+        tdIds: checkString.join(',')
+      }
+      batchByTdIds_api(setData)
+        .then((res) => {
+          const results = res
+          if (results.code != 1) {
+            this.$message.error('工艺配置失败')
+          } else {
+            this.$message.success('工艺配置成功')
+            this.closeProcessConfig()
+          }
+        })
+        .catch((err) => {
+          console.log(err)
+        })
+    },
+    closeProcessConfig() {
+      this.dialogFormVisible3 = false
+      this.processOptions = []
+      this.checkedConfig = []
+    },
+    showServeIndex() {
+      let that = this
+      if (this.isShowServeIndex) {
+        this.data = this.treeData.map((item) => {
+          return {
+            ...item,
+            funs: this.fileName(item, this.isShowServeIndex)
+          }
+        })
+      } else {
+        this.data = this.treeData.map((item) => {
+          return {
+            ...item,
+            funs: this.fileName(item, this.isShowServeIndex)
+          }
+        })
+      }
+    },
+    fileName(item, checked) {
+      let node = item.funs
+      node.forEach((element) => {
+        if (this.maps.indexOf(item.code) > -1) {
+          if (checked) {
+            const sort = element.sort ? element.sort : '/'
+            element.name = element.name + ' ( ' + sort + ' ) '
+          } else {
+            element.name = element.name.substring(0, element.name.indexOf(' ( '))
+          }
+        }
+      })
+      return node
+    },
+    setServeIndex(e, data, node) {
+      if (data !== null && this.maps.indexOf(node.parent.data.code) > -1) {
+        this.form4.name = data.name
+        this.form4.sort = data.sort
+        this.form4.groupname = data.sourceGroup
+        this.form4.id = data.id
+        this.dialogFormVisible4 = true
+      }
+    },
+    setServiceSort() {
+      const sort = this.form4.sort
+      const groupName = this.form4.groupname
+      const prjId = this.treeClickRow.id
+      const sourceId = this.form4.id
+      if (isNaN(sort)) {
+        this.$message('请填写序号')
+        return
+      }
+      const data = [
+        {
+          prjId: prjId,
+          sort: sort,
+          sourceGroup: groupName,
+          sourceId: sourceId
+        }
+      ]
+      axios.defaults.baseURL = '/api'
+      axios({
+        headers: {
+          'Content-Type': 'application/json;charset=UTF-8'
+        },
+        method: 'post',
+        url: '/tofly-base/prjsource/updateSort',
+        data: JSON.stringify(data)
+      })
+        .then((res) => {
+          const e = res.data
+          if (e.code !== -1) {
+            this.dialogFormVisible4 = false
+            this.$message.success('保存成功')
+          } else {
+            this.$message.error('保存失败')
+          }
+        })
+        .catch((err) => {
+          console.log(err)
+        })
+    }
+  },
+  created() {
+    this.getlistdata()
+  }
+}
+</script>
+<style lang="scss" scoped>
+#ProssBox {
+  width: 100%;
+  height: 100%;
+  position: absolute;
+  .searchBox {
+    padding: 10px;
+  }
+  .projectBox {
+    height: calc(100% - 48px);
+    .el-row {
+      height: 100%;
+    }
+  }
+}
+.buttons {
+  margin: 10px 0 0 0;
+  .el-button {
+    margin-left: 10px;
+  }
+}
+.bg-purple {
+  border: 1px solid #dbe4ff;
+  padding: 10px;
+  overflow-y: auto;
+  height: calc(100% - 60px);
+}
+</style>

+ 19 - 1
src/views/currentSystem/authorityManagement/serviceConfig/index.vue

@@ -184,6 +184,21 @@
           <el-form-item prop="cval" label="资源值:">
             <el-input v-model="sourceInfo.cval" size="small" placeholder="请输入资源值" />
           </el-form-item>
+          <el-form-item prop="visible" label="默认加载:">
+            <el-select v-model="sourceInfo.visible" size="small">
+              <el-option value="0" label="否"></el-option>
+              <el-option value="1" label="是"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="第三方调用:">
+            <el-input size="small" v-model="sourceInfo.thirdSys" placeholder="第三方系统调用服务需填写" />
+          </el-form-item>
+          <el-form-item label="第三方默认加载:">
+            <el-select size="small" v-model="sourceInfo.thirdSysAutoLoad">
+              <el-option value="0" label="否"></el-option>
+              <el-option value="1" label="是"></el-option>
+            </el-select>
+          </el-form-item>
         </el-form>
       </template>
       <template slot="footer">
@@ -273,7 +288,10 @@ export default class ServiceConfig extends Vue {
     name: undefined,
     cval: undefined,
     pid: undefined,
-    id: undefined
+    id: undefined,
+    visible:"0",
+    thirdSys:'',
+    thirdSysAutoLoad:"0"
   }
   currDialog = 'service' // 弹窗当前为左侧服务
   serviceChoosing = []