Explorar el Código

暂存-360图像

qymljy hace 2 años
padre
commit
30d61ca35d
Se han modificado 27 ficheros con 1352 adiciones y 147 borrados
  1. 9 9
      src/HDrpManagement/contractManage/modules/detail.vue
  2. 36 30
      src/HDrpManagement/projectChange/components/putPeople.vue
  3. 1 1
      src/HDrpManagement/projectChange/index.vue
  4. 6 2
      src/HDrpManagement/projectChange/modules/detail.vue
  5. 6 3
      src/HManagement/marketing2/saler/area/detail/index.vue
  6. 5 5
      src/HManagement/marketing2/saler/index.vue
  7. 14 2
      src/SDrpManagement/salerPrivatecustomer/detail/customerDetail.vue
  8. 3 3
      src/SDrpManagement/salerPrivatecustomer/index.vue
  9. 71 55
      src/components/mindmap/custom.vue
  10. 37 0
      src/components/mindmap/detailInfo.vue
  11. 2 2
      src/components/mindmap/index.vue
  12. 80 0
      src/components/mindmap/modules/clueCount.vue
  13. 58 0
      src/components/mindmap/modules/competitorInfo.vue
  14. 84 0
      src/components/mindmap/modules/contractCount.vue
  15. 79 0
      src/components/mindmap/modules/contractInfo.vue
  16. 64 0
      src/components/mindmap/modules/customInfo.vue
  17. 68 0
      src/components/mindmap/modules/customQuotation.vue
  18. 80 0
      src/components/mindmap/modules/customerCount.vue
  19. 75 0
      src/components/mindmap/modules/orderInfo.vue
  20. 87 0
      src/components/mindmap/modules/projectAssociation.vue
  21. 84 0
      src/components/mindmap/modules/projectInfo.vue
  22. 68 0
      src/components/mindmap/modules/projectQuotation.vue
  23. 71 0
      src/components/mindmap/modules/quotationInfo.vue
  24. 71 0
      src/components/mindmap/modules/serviceInfo.vue
  25. 86 18
      src/components/mindmap/project.vue
  26. 102 13
      src/components/mindmap/saler.vue
  27. 5 4
      src/views/message/index.vue

+ 9 - 9
src/HDrpManagement/contractManage/modules/detail.vue

@@ -16,7 +16,7 @@
       <div slot="tags">
       </div>
       <div slot="customOperation">
-        <editBtn class="inline-16" :modelList="modelList" v-if="tool.checkAuth($route.name,'update')" :disabled="mainData.status != '新建' || !isLeader" @onSuccess="queryMainData();$refs.billno && $refs.billno.listData()" :data="mainData" />
+        <editBtn class="inline-16" :modelList="modelList" v-if="tool.checkAuth($route.name,'update')" :disabled="mainData.status != '新建' || !isLeader" @onSuccess="queryMainData($route.query.id);$refs.billno && $refs.billno.listData()" :data="mainData" />
 
         <el-button
           type="primary"
@@ -25,16 +25,16 @@
           v-if="mainData.status == '审核' && ($route.query.type == '经销项目' || $route.query.type == '直销项目') && (tool.checkAuth($route.name,'changeBillMag') || tool.checkAuth($route.name,'changeBillSaler') || tool.checkAuth($route.name,'changeBillOrder'))"
         >一键转单</el-button>
 
-        <revoke class="inline-16" @onSuccess="queryMainData()" :data="mainData" v-if="tool.checkAuth($route.name,'revoke') && mainData.status === '已提交' && isLeader" ></revoke>
-        <submit-check class="inline-16"  :disabled="!isLeader" ref="submit" :data="mainData" @onSuccess="queryMainData" />
-        <reverseCheck class="inline-16" @onSuccess="queryMainData()" :data="mainData" v-if="tool.checkAuth($route.name,'reverseCheck') && mainData.status === '审核'"  />
+        <revoke class="inline-16" @onSuccess="queryMainData($route.query.id)" :data="mainData" v-if="tool.checkAuth($route.name,'revoke') && mainData.status === '已提交' && isLeader" ></revoke>
+        <submit-check class="inline-16"  :disabled="!isLeader" ref="submit" :data="mainData" @onSuccess="queryMainData($route.query.id)" />
+        <reverseCheck class="inline-16" @onSuccess="queryMainData($route.query.id)" :data="mainData" v-if="tool.checkAuth($route.name,'reverseCheck') && mainData.status === '审核'"  />
 <!--        <revoke class="inline-16" @onSuccess="queryMainData()" :data="mainData" v-if="tool.checkAuth($route.name,'revoke') && mainData.status === '已提交' && isLeader" ></revoke>-->
-        <contractOver class="inline-16" v-if="tool.checkAuth($route.name,'contractOver') && mainData.status != '已终止' && mainData.status != '审核' && isLeader" :disabled="!isLeader" :id="mainData.sa_contractid" @onSuccess="queryMainData" />
+        <contractOver class="inline-16" v-if="tool.checkAuth($route.name,'contractOver') && mainData.status != '已终止' && mainData.status != '审核' && isLeader" :disabled="!isLeader" :id="mainData.sa_contractid" @onSuccess="queryMainData($route.query.id)" />
         <Del class="inline-16" :idName="20221121202502" :id="mainData.sa_contractid" idKey="sa_contractids"  v-if="tool.checkAuth($route.name,'toVoid') && (mainData.status == '新建' || mainData.status == '已终止') && isLeader"/>
       </div>
       <div slot="slot0" >
         <!--项目产品明细折扣表-->
-        <productBillno :data="mainData" :isLeader="isLeader" ref="billno" @priceChange="queryMainData" v-if="mainData.type == '项目'">
+        <productBillno :data="mainData" :isLeader="isLeader" ref="billno" @priceChange="queryMainData($route.query.id)" v-if="mainData.type == '项目'">
           <template v-slot:edit="scope">
 <!--            <el-button
               v-if="tool.checkAuth($route.name,'productBillManage')"
@@ -48,7 +48,7 @@
           </template>
         </productBillno>
         <!--产品明细折扣表-->
-        <productDetailList :data="mainData" :isLeader="isLeader" ref="productDetailList" v-if="mainData.type == '框架'" @priceChange="queryMainData">
+        <productDetailList :data="mainData" :isLeader="isLeader" ref="productDetailList" v-if="mainData.type == '框架'" @priceChange="queryMainData($route.query.id)">
           <importFile
             v-if="tool.checkAuth($route.name,'exportProduct') && isLeader && mainData.status === '新建'"
             slot="export"
@@ -61,7 +61,7 @@
           ></importFile>
         </productDetailList>
         <!--工具清单-->
-        <toolList :data="mainData" :isLeader="isLeader" ref="toolList" v-if="mainData.type == '工具借用'" @priceChange="queryMainData">
+        <toolList :data="mainData" :isLeader="isLeader" ref="toolList" v-if="mainData.type == '工具借用'" @priceChange="queryMainData($route.query.id)">
 <!--          <addTool v-if="tool.checkAuth($route.name,'toolListManage')" :disabled="mainData.status != '新建' || !isLeader" slot="addProduct" @onSuccess="$refs.toolList.listData()"/>-->
           <template v-slot:edit="scope">
 <!--            <el-button
@@ -82,7 +82,7 @@
       </div>
       <div slot="slot1" >
         <!--产品类别折扣表-->
-        <productClassList :data="mainData" :isLeader="isLeader" ref="classList" @priceChange="queryMainData" v-if="mainData.type == '框架'">
+        <productClassList :data="mainData" :isLeader="isLeader" ref="classList" @priceChange="queryMainData($route.query.id)" v-if="mainData.type == '框架'">
           <addClass class="inline-16" v-if="tool.checkAuth($route.name,'productClassManage')" :disabled="mainData.status != '新建' || !isLeader" slot="addProduct" @onSuccess="$refs.classList.listData()"   ref="addProduct" @closeDrawer="closeDrawer"/>
           <template v-slot:edit="scope">
 <!--            <el-button

+ 36 - 30
src/HDrpManagement/projectChange/components/putPeople.vue

@@ -62,45 +62,51 @@ export default {
       });
     },
     async onCheck(){
-      /*this.$confirm('确定进行报备审核操作吗?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(async() => {
+      console.log()
+      if (JSON.parse(sessionStorage.getItem('active_account')).siteid == 'NB'){
         const res = await this.$api.requested({
-          "id": 20221114163402,
+          "id": 20230628155602,
           "content": {
-            "sa_projectid": this.rowData.sa_projectid,
-            "type": 2 //报备中,已报备
+            "sa_projectid": this.$route.query.id,
+            "type":'pc'
           },
         })
-        this.tool.showMessage(res,()=>{
-          this.flag = 2
-          this.$emit('putSuccess',this.flag)
-        })
-      }).catch(() => {
-        this.$message({
-          type: 'info',
-          message: '已取消报备审核'
-        });
-      });*/
-      const res = await this.$api.requested({
-        "id": 20230628155602,
-        "content": {
-          "sa_projectid": this.$route.query.id,
-          "type":'pc'
-        },
-      })
-      this.url = res.data
-      if (this.url){
-        this.drawer = true
+        this.url = res.data
+        if (this.url){
+          this.drawer = true
+        }else {
+          this.$message({
+            message: '无权限操作',
+            type: 'warning'
+          });
+        }
       }else {
-        this.$message({
-          message: '无权限操作',
+        this.$confirm('确定进行报备审核操作吗?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
           type: 'warning'
+        }).then(async() => {
+          const res = await this.$api.requested({
+            "id": 20221114163402,
+            "content": {
+              "sa_projectid": this.rowData.sa_projectid,
+              "type": 2 //报备中,已报备
+            },
+          })
+          this.tool.showMessage(res,()=>{
+            this.flag = 2
+            this.$emit('putSuccess',this.flag)
+          })
+        }).catch(() => {
+          this.$message({
+            type: 'info',
+            message: '已取消报备审核'
+          });
         });
       }
 
+
+
     },
     onUnCheck(){
       this.$confirm('确定进行报备驳回(退回)操作吗?', '提示', {

+ 1 - 1
src/HDrpManagement/projectChange/index.vue

@@ -9,7 +9,7 @@
       :apiId="{query:20221020143502,del:''}"
       :autoQuery="false"
       :specialKey="[{key:'leader',value:'name'},{key:'tag_sys',value:null}]"
-      :detailPath="{path:'/projectChangeDetail',param:{tabIndex:tabIndex}}">
+      :detailPath="{path:'/projectChangeDetail',param:{tabIndex:tabIndex,portrait:''}}">
       <template #titleRight>
 <!--        <el-divider direction="vertical"></el-divider>
         <el-dropdown size="medium" @command="handleCommand">

+ 6 - 2
src/HDrpManagement/projectChange/modules/detail.vue

@@ -17,7 +17,7 @@
 <!--    <tagPanl slot="tags" :data="tagObj" ownertable="sa_project" :id="mainData.sa_projectid" @onSuccess="queryMainData"/>-->
     <div slot="customOperation">
       <!-- 此区域提供了自定义操作按钮 -->
-      <mindmap class="inline-16" :id="this.$route.query.id" name="project"></mindmap>
+      <mindmap ref="mindmap" class="inline-16" :id="this.$route.query.id" name="project"></mindmap>
       <putPeople style=" display: inline-block !important;" @putSuccess="putSuccess" v-if="flagTag !== ''" :rowData="mainData" :flagTag="flagTag" :disabled="mainData.disabled" @onClose="onSuccess"/>
       <projectRecovery class="inline-16" :data="mainData" v-if="tool.checkAuth($route.name,'recovery')  && mainData.status === '已失败'" :disabled="mainData.disabled" @onRecovery="onSuccess"></projectRecovery>
       <duplicatesProject class="inline-16" :data="mainData" v-if="tool.checkAuth($route.name,'queryDuplicates') " :disabled="mainData.disabled" @dialogClose="dialogClose"></duplicatesProject>
@@ -244,11 +244,14 @@ export default {
       this.getProjectAddres()
       this.projectStage()
       this.tagData()
+      if (this.$route.query.portrait !== ''){
+        this.$refs.mindmap.onShow()
+      }
     },
     // 监听切换数据,上一页,下一页
     pageChange (id,rowindex) {
       this.flag = 0
-      this.$router.replace({path:'/projectChangeDetail',query:{id:id,rowindex:rowindex}})
+      this.$router.replace({path:'/projectChangeDetail',query:{id:id,rowindex:rowindex,portrait:''}})
       this.queryMainData(id)
     },
     // 获取标签数据
@@ -476,6 +479,7 @@ export default {
         },
         {label:'领域',value:this.mainData.tradefield ? this.mainData.tradefield : '--'},
       ]
+
     },
     /*获取项目阶段*/
     async projectStage(){

+ 6 - 3
src/HManagement/marketing2/saler/area/detail/index.vue

@@ -16,7 +16,7 @@
       <div slot="tags">
       </div>
       <div slot="customOperation" >
-        <mindmap class="inline-16" :id="mainData.hrid" name="saler"></mindmap>
+        <mindmap class="inline-16" ref="mindmap" :id="mainData.hrid" name="saler"></mindmap>
         <el-button class="inline-16" v-if="tool.checkAuth($route.name,'delete')" type="primary" size="mini" @click="deleteSaler">删 除</el-button>
       </div>
       <div slot="slot0" >
@@ -80,11 +80,14 @@ export default {
       this.mainData = res.data
       console.log(this.mainData);
       this.$refs['details'].param.content.sa_saleareaid = this.mainData.sa_saleareaid
+      if (this.$route.query.portrait !== ''){
+        this.$refs.mindmap.onShow()
+      }
       this.changeDataStructure()
     },
     // 监听切换数据,上一页,下一页
     pageChange (id,rowindex) {
-      this.$router.replace({path:'/saler_detail',query:{id:id,rowindex:rowindex}})
+      this.$router.replace({path:'/saler_detail',query:{id:id,rowindex:rowindex,portrait:''}})
       this.queryMainData(id)
     },
     changeDataStructure () {
@@ -138,4 +141,4 @@ export default {
 
 </script>
 <style>
-</style>
+</style>

+ 5 - 5
src/HManagement/marketing2/saler/index.vue

@@ -4,16 +4,16 @@
     <areaTree ref="arealist" style="width:250px;flex:0 1 auto" @onClick="onClick">
     </areaTree>
     <div class="hm-info-panel">
-      <basicLayout 
-        ref="basicLayout" 
+      <basicLayout
+        ref="basicLayout"
         formPath="marketing2/saler"
-        tableName="salerTable" 
+        tableName="salerTable"
         :idName="['sa_saleareaid','sa_salearea_hrid','hrid']"
         :apiId="{query:20221011144603,del:20221011144803}"
         :autoQuery="false"
         :options="options"
         :detailPath="{
-          path:'/saler_detail'
+          path:'/saler_detail',param:{portrait:''}
         }">
         <div slot="custom"></div>
         <template v-slot:tbList="scope">
@@ -89,4 +89,4 @@ export default {
   height:calc(100vh - 100px);
   overflow-y:scroll
 }
-</style>
+</style>

+ 14 - 2
src/SDrpManagement/salerPrivatecustomer/detail/customerDetail.vue

@@ -20,7 +20,7 @@
       </div>
       <div slot="customOperation" >
         <!-- 此区域提供了自定义操作按钮 -->
-        <mindmap class="inline-16" :id="this.$route.query.id" name="custom"></mindmap>
+        <mindmap class="inline-16" ref="mindmap" :id="this.$route.query.id" name="custom"></mindmap>
         <statusChange class="inline-16" v-if="tool.checkAuth($route.name,'statusChange')" :disabled="mainData.disabled" :id="mainData.sa_customersid"  @statusChangeSuccess="statusChangeSuccess"></statusChange>
         <share class="inline-16" v-if="tool.checkAuth($route.name,'share') && mainData.sourcepoolname === ''" :disabled="mainData.disabled" :id="mainData.sa_customersid" @onshow="onSuccess" @shareSuccess="onSuccess"></share>
         <toBack class="inline-16" v-if="tool.checkAuth($route.name,'back') && mainData.sa_customerpoolid_source !== 0" :disabled="mainData.disabled" :data="mainData" @backSuccess="onSuccess"></toBack>
@@ -133,6 +133,14 @@ export default {
     mindmap
   },
   watch:{
+    /*$route (val) {
+      if (val.path == '/customerDetail') {
+        console.log(val,'rouer111')
+       /!* this.getFileList()
+        this.$refs.add.dialogVisible = false*!/
+      }
+
+    },*/
    async mainData(val) {
       const res = await this.$api.requested({
         "id": 20220930103501,
@@ -177,6 +185,7 @@ export default {
   methods:{
     async queryMainData(id) {
       console.log('触发');
+      console.log(this.$route,'$route')
       const res = await this.$api.requested({
         "id": 20221012164302,
         "content": {
@@ -278,12 +287,15 @@ export default {
           value:this.mainData.agentname
         },
       ]
+      if (this.$route.query.portrait !== ''){
+        this.$refs.mindmap.onShow()
+      }
     },
     // 监听切换数据,上一页,下一页
     pageChange (id,rowindex,tabIndex) {
       this.flag = false
       tabIndex = this.$route.query.tabIndex
-      this.$router.replace({path:'/customerDetail',query:{id:id,rowindex:rowindex,tabIndex:tabIndex}})
+      this.$router.replace({path:'/customerDetail',query:{id:id,rowindex:rowindex,tabIndex:tabIndex,portrait:''}})
       this.queryMainData(id)
     },
     onSuccess(){

+ 3 - 3
src/SDrpManagement/salerPrivatecustomer/index.vue

@@ -9,7 +9,7 @@
       :autoQuery="false"
       :isExport="false"
       :specialKey="[{key:'leader',value:'name'},{key:'tag_sys',value:null},{key:'industry',value:null}]"
-      :detailPath="{path:'/customerDetail',param:{tabIndex:tabIndex}}"
+      :detailPath="{path:'/customerDetail',param:{tabIndex:tabIndex,portrait:''}}"
      >
       <template #titleRight>
         <el-button type="primary" size="small" @click="onExport" plain>导 出</el-button>
@@ -361,7 +361,7 @@ export default {
         this.selectParam.enddate = ''
       }
       this.$refs.list.param.content.type = this.tabIndex
-      this.$refs.list.param.content.where = Object.assign({},this.$refs.list.param.content.where,this.selectParam) 
+      this.$refs.list.param.content.where = Object.assign({},this.$refs.list.param.content.where,this.selectParam)
       this.$refs.list.param.content.phonenumber = 1
       this.$refs['list'].listData()
     },
@@ -443,4 +443,4 @@ export default {
 .s_panel {
   margin-bottom:10px
 }
-</style>
+</style>

+ 71 - 55
src/components/mindmap/custom.vue

@@ -7,36 +7,24 @@
     <el-drawer
         :visible.sync="drawer"
         append-to-body
-        size="600px"
+        size="900px"
         :with-header="false">
-      <p style="padding: 10px 0px 0px 10px">合同列表</p>
+      <p style="padding: 10px 0px 0px 10px">{{title}}</p>
 <!--      <el-divider></el-divider>-->
-      <div style="padding: 10px 0px 0px 10px">
-        <el-table
-            :data="tableData"
-            border
-            style="width: 100%">
-          <el-table-column
-              prop="title"
-              label="合同名称"
-              width="0">
-          </el-table-column>
-          <el-table-column
-              prop="operation"
-              width="100"
-              label="操作">
-            <template slot-scope="scope">
-<!--              <el-input v-model="scope.row.remarks" placeholder="输入订单备注" size="mini" @change="rowChange(scope.row,scope.$index)"></el-input>-->
-              <el-button size="mini" type="text" @click="rowChange(scope.row)">详 情</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </div>
+      <contractInfo v-if="title == '合同列表'" :data="tableData"></contractInfo>
+      <projectInfo v-if="title == '项目列表'" :data="tableData"></projectInfo>
+      <orderInfo v-if="title == '订单列表'" :data="tableData"></orderInfo>
+      <serviceInfo v-if="title == '服务列表'" :data="tableData"></serviceInfo>
     </el-drawer>
   </div>
 </template>
 
 <script>
+import detailsInfo from './detailInfo.vue'
+import contractInfo from "@/components/mindmap/modules/contractInfo";
+import projectInfo from "@/components/mindmap/modules/projectInfo";
+import orderInfo from "@/components/mindmap/modules/orderInfo";
+import serviceInfo from "@/components/mindmap/modules/serviceInfo";
 import G6 from '@antv/g6';
 let graph;
 
@@ -65,17 +53,17 @@ const ERROR_COLOR = 'red';
 const getNodeConfig = (node) => {
   if (node.nodeUrl) {
     return {
-      basicColor: ERROR_COLOR,
-      fontColor: '#FFF',
-      borderColor: ERROR_COLOR,
-      bgColor: '#ff5722',
+      basicColor: node.color,
+      fontColor: '#333',
+      borderColor: node.color,
+      bgColor: node.color,
     };
   }
   let config = {
-    basicColor: '#fff',
+    basicColor: node.color,
     fontColor: '#333',
-    borderColor: '#fff',
-    bgColor: '#fff',
+    borderColor:  node.color,
+    bgColor: node.color,
   };
   switch (node.type) {
     case 'root': {
@@ -394,9 +382,11 @@ export default {
     return {
       fullscreen:false,
       drawer:false,
+      title:'',
       tableData: []
     }
   },
+  components:{detailsInfo,contractInfo,projectInfo,orderInfo,serviceInfo},
   mounted () {
     // this.getData()
     document.addEventListener('fullscreenchange', this.handleFullscreenChange);
@@ -408,18 +398,19 @@ export default {
     createMenu (array) {
       var that = this
       let arr = []
-      const HASLINKS = ['有效项目','合同','服务工单数']
+      const HASLINKS = ['项目','合同','服务工单数','订单','服务']
       function convertToElementTree(node) {
         // 新节点
         var elNode = {
-          id: node['name'],
+          id:node['name'],
           nodeid:node['id'],
           info:node['info']?node['info']:{},
           infoSize:node['infoSize']?node['infoSize']:1,
           value:node['labor']?node['labor'] !== node['name']?node['labor']:'-':'-',
           data:node['data'],
           children: [],
-          nodeUrl:HASLINKS.includes(node['name'])?'123':null
+          nodeUrl:HASLINKS.includes(node['name'])?'123':null,
+          color:node['color'],
         }
 
         if (node.children && node.children.length > 0) {
@@ -437,6 +428,7 @@ export default {
       return arr
     },
     async getData () {
+      var that = this
       const res = await this.$api.requested({
         "id": 20230620143204,
         "content": {
@@ -467,7 +459,7 @@ export default {
           type: 'dendrogram',
           direction: 'RL',
           nodeSep: 100,
-          rankSep: 350,
+          rankSep: 500,
           radial: true,
         },
       });
@@ -485,9 +477,14 @@ export default {
 
       graph.on('node:click', evt => {
         const item = evt.item;
-        this.drawer = true
+
         console.log(item._cfg.model,'点击列表')
         this.tableData = item._cfg.model.data
+        console.log(this.tableData,'表格订单')
+        this.title = item._cfg.model.label + '列表'
+        if (item._cfg.model.label == '合同' || item._cfg.model.label == '项目' || item._cfg.model.label == '订单' || item._cfg.model.label == '服务'){
+          this.drawer = true
+        }
       })
       if (typeof window !== 'undefined')
         window.onresize = () => {
@@ -495,6 +492,44 @@ export default {
           if (!container || !container.scrollWidth || !container.scrollHeight) return;
           graph.changeSize(container.scrollWidth, container.scrollHeight);
         };
+      if (this.$route.query.portrait === 'ht'){
+        res.data.children.forEach(item=>{
+          if (item.name === '合同'){
+            this.tableData = item.data
+            this.title = '合同列表'
+          }
+        })
+        this.drawer = true
+        this.$route.query.portrait = ''
+      }else if (this.$route.query.portrait === 'xm'){
+        res.data.children.forEach(item=>{
+          if (item.name === '项目'){
+            this.tableData = item.data
+            this.title = '项目列表'
+          }
+        })
+        this.drawer = true
+        this.$route.query.portrait = ''
+      }else if (this.$route.query.portrait === 'dd'){
+        res.data.children.forEach(item=>{
+          if (item.name === '订单'){
+            this.tableData = item.data
+            this.title = '订单列表'
+          }
+        })
+        this.drawer = true
+        this.$route.query.portrait = ''
+      }else if (this.$route.query.portrait === 'fw'){
+        res.data.children.forEach(item=>{
+          if (item.name === '服务'){
+            this.tableData = item.data
+            this.title = '服务列表'
+          }
+        })
+        this.drawer = true
+        this.$route.query.portrait = ''
+      }
+
     },
     enterFullscreen () {
       /* 获取(<html>)元素以全屏显示页面 */
@@ -536,26 +571,7 @@ export default {
         document.msExitFullscreen();
       }
     },
-    rowChange(data){
-        this.$store.dispatch('changeDetailDrawer',false)
-        setTimeout(()=>{
-          let route = this.$route
-          console.log(route,'route')
-          if (route.path !== '/contractDetail') {
-            this.oldRoute = {path:route.path,query:route.query}
-            this.$store.dispatch('setHistoryRouter',this.oldRoute)
-          }
-          this.$router.replace({
-            path:'/contractDetail',
-            query:{
-              id:data.sa_contractid,
-              rowindex:data.rowindex,
-              portrait:'1'
-            }
-          })
-          this.$store.dispatch('changeDetailDrawer',true)
-        },500)
-    }
+
   },
 
 

+ 37 - 0
src/components/mindmap/detailInfo.vue

@@ -0,0 +1,37 @@
+<template>
+  <div>
+    <el-button size="mini" type="text" @click="onDetail">详 情</el-button>
+    <el-drawer
+        :visible.sync="drawer"
+        append-to-body
+        size="70%"
+        :with-header="false">
+      <contractDetail ref="contract"></contractDetail>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import contractDetail from '@/HDrpManagement/contractManage/modules/detail'
+export default {
+  name: "detailsInfo",
+  props:['row'],
+  components:{contractDetail},
+  data(){
+    return {
+      drawer:false
+    }
+  },
+  methods:{
+    onDetail(){
+      console.log(this.row,'rows')
+      this.drawer = true
+      this.$refs.contract.queryMainData(this.row.sa_contractid)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 2 - 2
src/components/mindmap/index.vue

@@ -7,8 +7,8 @@
       size="90%"
       :with-header="false">
       <custom :contentStyle="{height:'100vh',width:'100vw'}" ref="custom" v-if="name === 'custom'" :id="id"/>
-      <project :contentStyle="{height:'100vh',width:'60vw'}" ref="project" v-else-if="name === 'project'" :id="id"/>
-      <saler :contentStyle="{height:'100vh',width:'60vw'}" ref="saler" v-else :id="id"/>
+      <project :contentStyle="{height:'100vh',width:'100vw'}" ref="project" v-else-if="name === 'project'" :id="id"/>
+      <saler :contentStyle="{height:'100vh',width:'100vw'}" ref="saler" v-else :id="id"/>
     </el-drawer>
 
   </div>

+ 80 - 0
src/components/mindmap/modules/clueCount.vue

@@ -0,0 +1,80 @@
+<template>
+  <div style="padding: 10px 0px 0px 10px">
+      <el-table
+          :data="data"
+          border
+          height="calc(100vh - 60px)"
+          style="width: 100%">
+        <el-table-column
+            prop="enterprisename"
+            label="客户名称"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="projectname"
+            label="项目名称"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="status"
+            label="跟进状态"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            label="省市县"
+            width="0">
+          <template slot-scope="scope">
+            <span>{{scope.row.province + '-' + scope.row.city + '-' + scope.row.county}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+            prop="address"
+            label="地址"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="operation"
+            width="100"
+            label="操作">
+          <template slot-scope="scope">
+            <!--              <el-input v-model="scope.row.remarks" placeholder="输入订单备注" size="mini" @change="rowChange(scope.row,scope.$index)"></el-input>-->
+            <el-button size="mini" type="text" @click="rowChange(scope.row)">详 情</el-button>
+            <!--              <detailsInfo :row="scope.row"></detailsInfo>-->
+          </template>
+        </el-table-column>
+      </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "contractInfo",
+  props:['data'],
+  methods:{
+    rowChange(data){
+      this.$store.dispatch('changeDetailDrawer',false)
+      setTimeout(()=>{
+        let route = this.$route
+        route.query.portrait = 'xstj'
+        console.log(route,'route')
+        if (route.path !== '/orderclue_detail') {
+          this.oldRoute = {path:route.path,query:route.query}
+          this.$store.dispatch('setHistoryRouter',this.oldRoute)
+        }
+        this.$router.replace({
+          path:'/orderclue_detail',
+          query:{
+            id:data.sat_orderclueid,
+            rowindex:data.rowindex,
+          }
+        })
+        this.$store.dispatch('changeDetailDrawer',true)
+      },500)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 58 - 0
src/components/mindmap/modules/competitorInfo.vue

@@ -0,0 +1,58 @@
+<template>
+  <div style="padding: 10px 0px 0px 10px">
+      <el-table
+          :data="data"
+          border
+          height="calc(100vh - 60px)"
+          style="width: 100%">
+        <el-table-column
+            prop="brandname"
+            label="品牌"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="operation"
+            width="100"
+            label="操作">
+          <template slot-scope="scope">
+            <!--              <el-input v-model="scope.row.remarks" placeholder="输入订单备注" size="mini" @change="rowChange(scope.row,scope.$index)"></el-input>-->
+            <el-button size="mini" type="text" @click="rowChange(scope.row)">详 情</el-button>
+            <!--              <detailsInfo :row="scope.row"></detailsInfo>-->
+          </template>
+        </el-table-column>
+      </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "contractInfo",
+  props:['data'],
+  methods:{
+    rowChange(data){
+      this.$store.dispatch('changeDetailDrawer',false)
+      setTimeout(()=>{
+        let route = this.$route
+        route.query.portrait = 'jzds'
+        console.log(route,'route')
+        if (route.path !== '/competitorDetail') {
+          this.oldRoute = {path:route.path,query:route.query}
+          this.$store.dispatch('setHistoryRouter',this.oldRoute)
+        }
+        this.$router.replace({
+          path:'/competitorDetail',
+          query:{
+            id:data.sa_competitorid,
+            rowindex:data.rowindex,
+          }
+        })
+        this.$store.dispatch('changeDetailDrawer',true)
+      },500)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 84 - 0
src/components/mindmap/modules/contractCount.vue

@@ -0,0 +1,84 @@
+<template>
+  <div style="padding: 10px 0px 0px 10px">
+      <el-table
+          :data="data"
+          border
+          height="calc(100vh - 60px)"
+          style="width: 100%">
+        <el-table-column
+            prop="title"
+            label="合同名称"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="status"
+            label="状态"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="signamount"
+            label="合同金额"
+            width="0">
+            <template slot-scope="scope">
+              <span>{{tool.formatAmount(scope.row.signamount,2)}}</span>
+            </template>
+        </el-table-column>
+        <el-table-column
+            prop="discountrate"
+            label="折扣"
+            width="0">
+          <template slot-scope="scope">
+            <span >{{tool.formatAmount(scope.row.discountrate * 100,2)}}%</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+            prop="signdate"
+            label="签约日期"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="operation"
+            width="100"
+            label="操作">
+          <template slot-scope="scope">
+            <!--              <el-input v-model="scope.row.remarks" placeholder="输入订单备注" size="mini" @change="rowChange(scope.row,scope.$index)"></el-input>-->
+            <el-button size="mini" type="text" @click="rowChange(scope.row)">详 情</el-button>
+            <!--              <detailsInfo :row="scope.row"></detailsInfo>-->
+          </template>
+        </el-table-column>
+      </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "contractInfo",
+  props:['data'],
+  methods:{
+    rowChange(data){
+      this.$store.dispatch('changeDetailDrawer',false)
+      setTimeout(()=>{
+        let route = this.$route
+        route.query.portrait = 'yxht'
+        console.log(route,'route')
+        if (route.path !== '/contractDetail') {
+          this.oldRoute = {path:route.path,query:route.query}
+          this.$store.dispatch('setHistoryRouter',this.oldRoute)
+        }
+        this.$router.replace({
+          path:'/contractDetail',
+          query:{
+            id:data.sa_contractid,
+            rowindex:data.rowindex,
+          }
+        })
+        this.$store.dispatch('changeDetailDrawer',true)
+      },500)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 79 - 0
src/components/mindmap/modules/contractInfo.vue

@@ -0,0 +1,79 @@
+<template>
+  <div style="padding: 10px 0px 0px 10px">
+      <el-table
+          :data="data"
+          border
+          height="calc(100vh - 60px)"
+          style="width: 100%">
+        <el-table-column
+            prop="title"
+            label="合同名称"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="status"
+            label="状态"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="signamount"
+            label="合同金额"
+            width="0">
+            <template slot-scope="scope">
+              <span>{{tool.formatAmount(scope.row.signamount,2)}}</span>
+            </template>
+        </el-table-column>
+        <el-table-column
+            prop="discountrate"
+            label="折扣"
+            width="0">
+          <template slot-scope="scope">
+            <span >{{tool.formatAmount(scope.row.discountrate * 100,2)}}%</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+            prop="operation"
+            width="100"
+            label="操作">
+          <template slot-scope="scope">
+            <!--              <el-input v-model="scope.row.remarks" placeholder="输入订单备注" size="mini" @change="rowChange(scope.row,scope.$index)"></el-input>-->
+            <el-button size="mini" type="text" @click="rowChange(scope.row)">详 情</el-button>
+            <!--              <detailsInfo :row="scope.row"></detailsInfo>-->
+          </template>
+        </el-table-column>
+      </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "contractInfo",
+  props:['data'],
+  methods:{
+    rowChange(data){
+      this.$store.dispatch('changeDetailDrawer',false)
+      setTimeout(()=>{
+        let route = this.$route
+        route.query.portrait = 'ht'
+        console.log(route,'route')
+        if (route.path !== '/contractDetail') {
+          this.oldRoute = {path:route.path,query:route.query}
+          this.$store.dispatch('setHistoryRouter',this.oldRoute)
+        }
+        this.$router.replace({
+          path:'/contractDetail',
+          query:{
+            id:data.sa_contractid,
+            rowindex:data.rowindex,
+          }
+        })
+        this.$store.dispatch('changeDetailDrawer',true)
+      },500)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 64 - 0
src/components/mindmap/modules/customInfo.vue

@@ -0,0 +1,64 @@
+<template>
+  <div style="padding: 10px 0px 0px 10px">
+      <el-table
+          :data="data"
+          border
+          height="calc(100vh - 60px)"
+          style="width: 100%">
+        <el-table-column
+            prop="enterprisename"
+            label="客户名称"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="type"
+            label="项目角色"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="operation"
+            width="100"
+            label="操作">
+          <template slot-scope="scope">
+            <!--              <el-input v-model="scope.row.remarks" placeholder="输入订单备注" size="mini" @change="rowChange(scope.row,scope.$index)"></el-input>-->
+            <el-button size="mini" type="text" @click="rowChange(scope.row)">详 情</el-button>
+            <!--              <detailsInfo :row="scope.row"></detailsInfo>-->
+          </template>
+        </el-table-column>
+      </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "contractInfo",
+  props:['data'],
+  methods:{
+    rowChange(data){
+      this.$store.dispatch('changeDetailDrawer',false)
+      setTimeout(()=>{
+        let route = this.$route
+        route.query.portrait = 'glkh'
+        console.log(route,'route')
+        if (route.path !== '/customerDetail') {
+          this.oldRoute = {path:route.path,query:route.query}
+          this.$store.dispatch('setHistoryRouter',this.oldRoute)
+        }
+        this.$router.replace({
+          path:'/customerDetail',
+          query:{
+            id:data.sa_customersid,
+            rowindex:data.rowindex,
+            portrait:'',
+          }
+        })
+        this.$store.dispatch('changeDetailDrawer',true)
+      },500)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 68 - 0
src/components/mindmap/modules/customQuotation.vue

@@ -0,0 +1,68 @@
+<template>
+  <div style="padding: 10px 0px 0px 10px">
+      <el-table
+          :data="data"
+          border
+          height="calc(100vh - 60px)"
+          style="width: 100%">
+        <el-table-column
+            prop="billno"
+            label="报价单号"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="enterprisename"
+            label="报价客户"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="submitdate"
+            label="报价日期"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="operation"
+            width="100"
+            label="操作">
+          <template slot-scope="scope">
+            <!--              <el-input v-model="scope.row.remarks" placeholder="输入订单备注" size="mini" @change="rowChange(scope.row,scope.$index)"></el-input>-->
+            <el-button size="mini" type="text" @click="rowChange(scope.row)">详 情</el-button>
+            <!--              <detailsInfo :row="scope.row"></detailsInfo>-->
+          </template>
+        </el-table-column>
+      </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "contractInfo",
+  props:['data'],
+  methods:{
+    rowChange(data){
+      this.$store.dispatch('changeDetailDrawer',false)
+      setTimeout(()=>{
+        let route = this.$route
+        route.query.portrait = 'khbj'
+        console.log(route,'route')
+        if (route.path !== '/quotedPriceDetail') {
+          this.oldRoute = {path:route.path,query:route.query}
+          this.$store.dispatch('setHistoryRouter',this.oldRoute)
+        }
+        this.$router.replace({
+          path:'/quotedPriceDetail',
+          query:{
+            id:data.sa_quotedpriceid,
+            rowindex:data.rowindex,
+          }
+        })
+        this.$store.dispatch('changeDetailDrawer',true)
+      },500)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 80 - 0
src/components/mindmap/modules/customerCount.vue

@@ -0,0 +1,80 @@
+<template>
+  <div style="padding: 10px 0px 0px 10px">
+      <el-table
+          :data="data"
+          border
+          height="calc(100vh - 60px)"
+          style="width: 100%">
+        <el-table-column
+            prop="enterprisename"
+            label="客户名称"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="type"
+            label="客户类型"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="status"
+            label="合作状态"
+            width="0">
+<!--            <template slot-scope="scope">
+              <span>{{tool.formatAmount(scope.row.signamount,2)}}</span>
+            </template>-->
+        </el-table-column>
+        <el-table-column
+            prop="tradingstatus"
+            label="成交状态"
+            width="0">
+          <!--            <template slot-scope="scope">
+                        <span>{{tool.formatAmount(scope.row.signamount,2)}}</span>
+                      </template>-->
+        </el-table-column>
+        <el-table-column
+            prop="operation"
+            width="100"
+            label="操作">
+          <template slot-scope="scope">
+            <!--              <el-input v-model="scope.row.remarks" placeholder="输入订单备注" size="mini" @change="rowChange(scope.row,scope.$index)"></el-input>-->
+            <el-button size="mini" type="text" @click="rowChange(scope.row)">详 情</el-button>
+            <!--              <detailsInfo :row="scope.row"></detailsInfo>-->
+          </template>
+        </el-table-column>
+      </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "contractInfo",
+  props:['data'],
+  methods:{
+    rowChange(data){
+      this.$store.dispatch('changeDetailDrawer',false)
+      setTimeout(()=>{
+        let route = this.$route
+        route.query.portrait = 'khtj'
+        console.log(route,'route')
+        if (route.path !== '/customerDetail') {
+          this.oldRoute = {path:route.path,query:route.query}
+          this.$store.dispatch('setHistoryRouter',this.oldRoute)
+        }
+        this.$router.replace({
+          path:'/customerDetail',
+          query:{
+            id:data.sa_customersid,
+            rowindex:data.rowindex,
+            portrait:''
+          }
+        })
+        this.$store.dispatch('changeDetailDrawer',true)
+      },500)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 75 - 0
src/components/mindmap/modules/orderInfo.vue

@@ -0,0 +1,75 @@
+<template>
+  <div style="padding: 10px 0px 0px 10px">
+      <el-table
+          :data="data"
+          border
+          height="calc(100vh - 60px)"
+          style="width: 100%">
+        <el-table-column
+            prop="sonum"
+            label="订单号"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="amount"
+            label="订单金额"
+            width="0">
+            <template slot-scope="scope">
+              <span>{{tool.formatAmount(scope.row.amount,2)}}</span>
+            </template>
+        </el-table-column>
+        <el-table-column
+            prop="checkdate"
+            label="审核日期"
+            width="0">
+<!--            <template slot-scope="scope">
+              <span>{{tool.formatAmount(scope.row.signamount,2)}}</span>
+            </template>-->
+        </el-table-column>
+        <el-table-column
+            prop="operation"
+            width="100"
+            label="操作">
+          <template slot-scope="scope">
+            <!--              <el-input v-model="scope.row.remarks" placeholder="输入订单备注" size="mini" @change="rowChange(scope.row,scope.$index)"></el-input>-->
+            <el-button size="mini" type="text" @click="rowChange(scope.row)">详 情</el-button>
+            <!--              <detailsInfo :row="scope.row"></detailsInfo>-->
+          </template>
+        </el-table-column>
+      </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "contractInfo",
+  props:['data'],
+  methods:{
+    rowChange(data){
+      console.log(data)
+      this.$store.dispatch('changeDetailDrawer',false)
+      setTimeout(()=>{
+        let route = this.$route
+        route.query.portrait = 'dd'
+        console.log(route,'route')
+        if (route.path !== '/orderdetail') {
+          this.oldRoute = {path:route.path,query:route.query}
+          this.$store.dispatch('setHistoryRouter',this.oldRoute)
+        }
+        this.$router.replace({
+          path:'/orderdetail',
+          query:{
+            id:data.sa_orderid,
+            rowindex:data.rowindex,
+          }
+        })
+        this.$store.dispatch('changeDetailDrawer',true)
+      },500)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 87 - 0
src/components/mindmap/modules/projectAssociation.vue

@@ -0,0 +1,87 @@
+<template>
+  <div style="padding: 10px 0px 0px 10px">
+      <el-table
+          :data="data"
+          border
+          height="calc(100vh - 60px)"
+          style="width: 100%">
+        <el-table-column
+            prop="projectname"
+            label="项目名称"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="projecttype"
+            label="项目类型"
+            width="0">
+<!--            <template slot-scope="scope">
+              <span>{{tool.formatAmount(scope.row.signamount,2)}}</span>
+            </template>-->
+        </el-table-column>
+        <el-table-column
+            prop="address"
+            label="项目地址"
+            width="0">
+<!--          <template slot-scope="scope">
+            <span >{{tool.formatAmount(scope.row.discountrate * 100,2)}}%</span>
+          </template>-->
+        </el-table-column>
+        <el-table-column
+            prop="signamount_due"
+            label="预计签约金额"
+            width="100">
+          <template slot-scope="scope">
+            <span >{{scope.row.signamount_due?tool.formatAmount(scope.row.signamount_due,2): ''}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+            prop="scale"
+            label="项目规模"
+            width="100">
+        </el-table-column>
+        <el-table-column
+            prop="operation"
+            width="100"
+            label="操作">
+          <template slot-scope="scope">
+            <!--              <el-input v-model="scope.row.remarks" placeholder="输入订单备注" size="mini" @change="rowChange(scope.row,scope.$index)"></el-input>-->
+            <el-button size="mini" type="text" @click="rowChange(scope.row)">详 情</el-button>
+            <!--              <detailsInfo :row="scope.row"></detailsInfo>-->
+          </template>
+        </el-table-column>
+      </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "contractInfo",
+  props:['data'],
+  methods:{
+    rowChange(data){
+      this.$store.dispatch('changeDetailDrawer',false)
+      setTimeout(()=>{
+        let route = this.$route
+        route.query.portrait = 'xmtj'
+        console.log(route,'route')
+        if (route.path !== '/projectChangeDetail') {
+          this.oldRoute = {path:route.path,query:route.query}
+          this.$store.dispatch('setHistoryRouter',this.oldRoute)
+        }
+        this.$router.replace({
+          path:'/projectChangeDetail',
+          query:{
+            id:data.sa_projectid,
+            rowindex:data.rowindex,
+          }
+        })
+        this.$store.dispatch('changeDetailDrawer',true)
+      },500)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 84 - 0
src/components/mindmap/modules/projectInfo.vue

@@ -0,0 +1,84 @@
+<template>
+  <div style="padding: 10px 0px 0px 10px">
+      <el-table
+          :data="data"
+          border
+          height="calc(100vh - 60px)"
+          style="width: 100%">
+        <el-table-column
+            prop="projectname"
+            label="项目名称"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="name"
+            label="负责人"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="projecttype"
+            label="项目类型"
+            width="0">
+<!--            <template slot-scope="scope">
+              <span>{{tool.formatAmount(scope.row.signamount,2)}}</span>
+            </template>-->
+        </el-table-column>
+        <el-table-column
+            prop="stagename"
+            label="项目阶段"
+            width="0">
+<!--          <template slot-scope="scope">
+            <span >{{tool.formatAmount(scope.row.discountrate * 100,2)}}%</span>
+          </template>-->
+        </el-table-column>
+        <el-table-column
+            prop="status"
+            label="项目状态"
+            width="100">
+        </el-table-column>
+        <el-table-column
+            prop="operation"
+            width="100"
+            label="操作">
+          <template slot-scope="scope">
+            <!--              <el-input v-model="scope.row.remarks" placeholder="输入订单备注" size="mini" @change="rowChange(scope.row,scope.$index)"></el-input>-->
+            <el-button size="mini" type="text" @click="rowChange(scope.row)">详 情</el-button>
+            <!--              <detailsInfo :row="scope.row"></detailsInfo>-->
+          </template>
+        </el-table-column>
+      </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "contractInfo",
+  props:['data'],
+  methods:{
+    rowChange(data){
+      this.$store.dispatch('changeDetailDrawer',false)
+      setTimeout(()=>{
+        let route = this.$route
+        route.query.portrait = 'xm'
+        console.log(route,'route')
+        if (route.path !== '/projectChangeDetail') {
+          this.oldRoute = {path:route.path,query:route.query}
+          this.$store.dispatch('setHistoryRouter',this.oldRoute)
+        }
+        this.$router.replace({
+          path:'/projectChangeDetail',
+          query:{
+            id:data.sa_projectid,
+            rowindex:data.rowindex,
+          }
+        })
+        this.$store.dispatch('changeDetailDrawer',true)
+      },500)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 68 - 0
src/components/mindmap/modules/projectQuotation.vue

@@ -0,0 +1,68 @@
+<template>
+  <div style="padding: 10px 0px 0px 10px">
+      <el-table
+          :data="data"
+          border
+          height="calc(100vh - 60px)"
+          style="width: 100%">
+        <el-table-column
+            prop="billno"
+            label="报价单号"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="projectname"
+            label="报价项目"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="submitdate"
+            label="报价日期"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="operation"
+            width="100"
+            label="操作">
+          <template slot-scope="scope">
+            <!--              <el-input v-model="scope.row.remarks" placeholder="输入订单备注" size="mini" @change="rowChange(scope.row,scope.$index)"></el-input>-->
+            <el-button size="mini" type="text" @click="rowChange(scope.row)">详 情</el-button>
+            <!--              <detailsInfo :row="scope.row"></detailsInfo>-->
+          </template>
+        </el-table-column>
+      </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "contractInfo",
+  props:['data'],
+  methods:{
+    rowChange(data){
+      this.$store.dispatch('changeDetailDrawer',false)
+      setTimeout(()=>{
+        let route = this.$route
+        route.query.portrait = 'xmbj'
+        console.log(route,'route')
+        if (route.path !== '/quotedPriceDetail') {
+          this.oldRoute = {path:route.path,query:route.query}
+          this.$store.dispatch('setHistoryRouter',this.oldRoute)
+        }
+        this.$router.replace({
+          path:'/quotedPriceDetail',
+          query:{
+            id:data.sa_quotedpriceid,
+            rowindex:data.rowindex,
+          }
+        })
+        this.$store.dispatch('changeDetailDrawer',true)
+      },500)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 71 - 0
src/components/mindmap/modules/quotationInfo.vue

@@ -0,0 +1,71 @@
+<template>
+  <div style="padding: 10px 0px 0px 10px">
+      <el-table
+          :data="data"
+          border
+          height="calc(100vh - 60px)"
+          style="width: 100%">
+        <el-table-column
+            prop="billno"
+            label="报价单号"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="sumamount"
+            label="报价金额"
+            width="0">
+            <template slot-scope="scope">
+              <span>{{tool.formatAmount(scope.row.sumamount,2)}}</span>
+            </template>
+        </el-table-column>
+        <el-table-column
+            prop="submitby"
+            label="报价人"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="operation"
+            width="100"
+            label="操作">
+          <template slot-scope="scope">
+            <!--              <el-input v-model="scope.row.remarks" placeholder="输入订单备注" size="mini" @change="rowChange(scope.row,scope.$index)"></el-input>-->
+            <el-button size="mini" type="text" @click="rowChange(scope.row)">详 情</el-button>
+            <!--              <detailsInfo :row="scope.row"></detailsInfo>-->
+          </template>
+        </el-table-column>
+      </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "contractInfo",
+  props:['data'],
+  methods:{
+    rowChange(data){
+      this.$store.dispatch('changeDetailDrawer',false)
+      setTimeout(()=>{
+        let route = this.$route
+        route.query.portrait = 'bj'
+        console.log(route,'route')
+        if (route.path !== '/quotedPriceDetail') {
+          this.oldRoute = {path:route.path,query:route.query}
+          this.$store.dispatch('setHistoryRouter',this.oldRoute)
+        }
+        this.$router.replace({
+          path:'/quotedPriceDetail',
+          query:{
+            id:data.sa_quotedpriceid,
+            rowindex:data.rowindex,
+          }
+        })
+        this.$store.dispatch('changeDetailDrawer',true)
+      },500)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 71 - 0
src/components/mindmap/modules/serviceInfo.vue

@@ -0,0 +1,71 @@
+<template>
+  <div style="padding: 10px 0px 0px 10px">
+      <el-table
+          :data="data"
+          border
+          height="calc(100vh - 60px)"
+          style="width: 100%">
+        <el-table-column
+            prop="workbillno"
+            label="工单号"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="address"
+            label="地址"
+            width="0">
+        </el-table-column>
+        <el-table-column
+            prop="status"
+            label="状态"
+            width="0">
+<!--            <template slot-scope="scope">
+              <span>{{tool.formatAmount(scope.row.signamount,2)}}</span>
+            </template>-->
+        </el-table-column>
+        <el-table-column
+            prop="operation"
+            width="100"
+            label="操作">
+          <template slot-scope="scope">
+            <!--              <el-input v-model="scope.row.remarks" placeholder="输入订单备注" size="mini" @change="rowChange(scope.row,scope.$index)"></el-input>-->
+            <el-button size="mini" type="text" @click="rowChange(scope.row)">详 情</el-button>
+            <!--              <detailsInfo :row="scope.row"></detailsInfo>-->
+          </template>
+        </el-table-column>
+      </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "contractInfo",
+  props:['data'],
+  methods:{
+    rowChange(data){
+      this.$store.dispatch('changeDetailDrawer',false)
+      setTimeout(()=>{
+        let route = this.$route
+        route.query.portrait = 'fw'
+        console.log(route,'route')
+        if (route.path !== '/workorderDetail') {
+          this.oldRoute = {path:route.path,query:route.query}
+          this.$store.dispatch('setHistoryRouter',this.oldRoute)
+        }
+        this.$router.replace({
+          path:'/workorderDetail',
+          query:{
+            id:data.sa_workorderid,
+            rowindex:data.rowindex,
+          }
+        })
+        this.$store.dispatch('changeDetailDrawer',true)
+      },500)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 86 - 18
src/components/mindmap/project.vue

@@ -1,12 +1,27 @@
 <template>
-  <div style="background:#f1f2f3" id="full">
+  <div style="background:#f1f2f3" id="full" :style="contentStyle">
     <img style="width: 25px; height: 25px;float: right" v-if="!fullscreen" @click="enterFullscreen" src="@/assets/icons/amplify.svg" title="全屏">
     <img style="width: 25px; height: 25px;float: right" @click="backFullscreen" v-if="fullscreen" src="@/assets/icons/reduce.svg" title="还原">
     <div id="container"></div>
+    <el-drawer
+        :visible.sync="drawer"
+        append-to-body
+        size="900px"
+        :with-header="false">
+      <p style="padding: 10px 0px 0px 10px">{{title}}</p>
+      <competitorInfo v-if="title == '竞争对手列表'" :data="tableData"></competitorInfo>
+      <customInfo v-if="title == '关联客户列表'" :data="tableData"></customInfo>
+      <contractInfo v-if="title == '合同列表'" :data="tableData"></contractInfo>
+      <quotationInfo v-if="title == '报价列表'" :data="tableData"></quotationInfo>
+    </el-drawer>
   </div>
 </template>
 
 <script>
+import competitorInfo from "@/components/mindmap/modules/competitorInfo";
+import customInfo from "@/components/mindmap/modules/customInfo";
+import contractInfo from "@/components/mindmap/modules/contractInfo";
+import quotationInfo from "@/components/mindmap/modules/quotationInfo";
 import G6 from '@antv/g6';
 import axios from 'axios'
 let graph;
@@ -35,25 +50,25 @@ const ERROR_COLOR = 'red';
 const getNodeConfig = (node) => {
   if (node.nodeUrl) {
     return {
-      basicColor: ERROR_COLOR,
-      fontColor: '#FFF',
-      borderColor: ERROR_COLOR,
-      bgColor: '#ff5722',
+      basicColor: node.color,
+      fontColor: '#333',
+      borderColor: node.color,
+      bgColor: '#fff',
     };
   }
   let config = {
-    basicColor: '#fff',
+    basicColor: node.color,
     fontColor: '#333',
-    borderColor: '#fff',
-    bgColor: '#fff',
+    borderColor:  node.color,
+    bgColor: node.color,
   };
   switch (node.type) {
     case 'root': {
       config = {
-        basicColor: '#E3E6E8',
+        basicColor: node.color,
         fontColor: 'rgba(0,0,0,0.85)',
         borderColor: '#E3E6E8',
-        bgColor: '#5b8ff9',
+        bgColor: node.color,
       };
       break;
     }
@@ -85,11 +100,14 @@ const EXPAND_ICON = function EXPAND_ICON(x, y, r) {
 };
 const nodeBasicMethod = {
   createNodeBox: (group, config, w, h, isRoot) => {
+    console.log(config,'--')
     /* 最外面的大矩形 */
     const container = group.addShape('rect', {
       attrs: {
         x: 0,
         y: 0,
+        fill: config.bgColor,
+        stroke: config.borderColor,
         width: w,
         height: h,
       },
@@ -116,7 +134,7 @@ const nodeBasicMethod = {
         y: 0,
         width: w - 19,
         height: h,
-        fill: config.bgColor,
+        fill: config.basicColor,
         stroke: config.borderColor,
         radius: 2,
         cursor: 'pointer',
@@ -358,10 +376,14 @@ G6.registerNode('card-node', {
   setState: nodeBasicMethod.setState,
 });
 export default {
-  props:['id'],
+  props:['id','contentStyle'],
+  components:{competitorInfo,customInfo,contractInfo,quotationInfo},
   data () {
     return {
-      fullscreen:false
+      fullscreen:false,
+      drawer:false,
+      title:'',
+      tableData: []
     }
   },
   mounted () {
@@ -375,7 +397,7 @@ export default {
     createMenu (array) {
       var that = this
       let arr = []
-      const HASLINKS = ['关联客户','竞争对手','报价单有效数','合同有效数']
+      const HASLINKS = ['关联客户','竞争对手','报价单有效数','合同有效数','报价','合同']
       function convertToElementTree(node) {
         // 新节点
         var elNode = {
@@ -384,6 +406,8 @@ export default {
           info:node['info']?node['info']:{},
           infoSize:node['infoSize']?node['infoSize']:1,
           value:node['labor']?node['labor'] !== node['name']?node['labor']:'-':'-',
+          data:node['data'],
+          color:node['color'],
           children: [],
           nodeUrl:HASLINKS.includes(node['name'])?'123':null
         }
@@ -409,9 +433,10 @@ export default {
           "sa_projectid": this.id
         }
       })
+
       const container = document.getElementById('container');
       const width = container.scrollWidth;
-      const height = container.scrollHeight || 500;
+      const height = container.scrollHeight - 100 || 500;
       const graph = new G6.TreeGraph({
         container: 'container',
         width,
@@ -432,7 +457,7 @@ export default {
           type: 'dendrogram',
           direction: 'RL',
           nodeSep: 100,
-          rankSep: 250,
+          rankSep: 500,
           radial: true,
         },
       });
@@ -448,7 +473,12 @@ export default {
       graph.fitView();
       graph.on('node:click', evt => {
         const item = evt.item;
-        console.log(item)
+        console.log(item._cfg.model,'点击列表')
+        this.tableData = item._cfg.model.data
+        this.title = item._cfg.model.label + '列表'
+        if (item._cfg.model.label == '竞争对手' || item._cfg.model.label == '关联客户' || item._cfg.model.label == '报价' || item._cfg.model.label == '合同'){
+          this.drawer = true
+        }
       })
       if (typeof window !== 'undefined')
         window.onresize = () => {
@@ -456,6 +486,44 @@ export default {
           if (!container || !container.scrollWidth || !container.scrollHeight) return;
           graph.changeSize(container.scrollWidth, container.scrollHeight);
         };
+
+      if (this.$route.query.portrait === 'jzds'){
+        res.data.children.forEach(item=>{
+          if (item.name === '竞争对手'){
+            this.tableData = item.data
+            this.title = '竞争对手列表'
+          }
+        })
+        this.drawer = true
+        this.$route.query.portrait = ''
+      }else if (this.$route.query.portrait === 'glkh'){
+        res.data.children.forEach(item=>{
+          if (item.name === '关联客户'){
+            this.tableData = item.data
+            this.title = '关联客户列表'
+          }
+        })
+        this.drawer = true
+        this.$route.query.portrait = ''
+      }else if (this.$route.query.portrait === 'bj'){
+        res.data.children.forEach(item=>{
+          if (item.name === '报价'){
+            this.tableData = item.data
+            this.title = '报价列表'
+          }
+        })
+        this.drawer = true
+        this.$route.query.portrait = ''
+      }else if (this.$route.query.portrait === 'ht'){
+        res.data.children.forEach(item=>{
+          if (item.name === '合同'){
+            this.tableData = item.data
+            this.title = '合同列表'
+          }
+        })
+        this.drawer = true
+        this.$route.query.portrait = ''
+      }
     },
     enterFullscreen () {
       /* 获取(<html>)元素以全屏显示页面 */
@@ -503,7 +571,7 @@ export default {
 </script>
 <style>
 #container{
-  height: 100vh;
+  height: calc(100vh - 200px);
   width: 100vw;
 }
 </style>

+ 102 - 13
src/components/mindmap/saler.vue

@@ -1,12 +1,32 @@
 <template>
-  <div style="background:#f1f2f3" id="full">
+  <div style="background:#f1f2f3" id="full" :style="contentStyle">
     <img style="width: 25px; height: 25px;float: right" v-if="!fullscreen" @click="enterFullscreen" src="@/assets/icons/amplify.svg" title="全屏">
     <img style="width: 25px; height: 25px;float: right" @click="backFullscreen" v-if="fullscreen" src="@/assets/icons/reduce.svg" title="还原">
     <div id="container"></div>
+    <el-drawer
+        :visible.sync="drawer"
+        append-to-body
+        size="900px"
+        :with-header="false">
+      <p style="padding: 10px 0px 0px 10px">{{title}}</p>
+      <customerCount v-if="title == '客户统计列表'" :data="tableData"></customerCount>
+      <contractCount v-if="title == '有效合同数列表'" :data="tableData"></contractCount>
+      <clueCount v-if="title == '线索统计列表'" :data="tableData"></clueCount>
+      <projectQuotation v-if="title == '项目有效报价单数列表'" :data="tableData"></projectQuotation>
+      <customQuotation v-if="title == '客户报价单数列表'" :data="tableData"></customQuotation>
+      <projectAssociation v-if="title == '项目统计列表'" :data="tableData"></projectAssociation>
+      <!--      <el-divider></el-divider>-->
+    </el-drawer>
   </div>
 </template>
 
 <script>
+import customerCount from "@/components/mindmap/modules/customerCount";
+import contractCount from "@/components/mindmap/modules/contractCount";
+import clueCount from "@/components/mindmap/modules/clueCount";
+import projectQuotation from "@/components/mindmap/modules/projectQuotation";
+import customQuotation from "@/components/mindmap/modules/customQuotation";
+import projectAssociation from "@/components/mindmap/modules/projectAssociation";
 import G6 from '@antv/g6';
 import axios from 'axios'
 let graph;
@@ -35,16 +55,16 @@ const ERROR_COLOR = 'red';
 const getNodeConfig = (node) => {
   if (node.nodeUrl) {
     return {
-      basicColor: ERROR_COLOR,
-      fontColor: '#FFF',
-      borderColor: ERROR_COLOR,
-      bgColor: '#ff5722',
+      basicColor: node.color,
+      fontColor: '#333',
+      borderColor: node.color,
+      bgColor: '#fff',
     };
   }
   let config = {
-    basicColor: '#fff',
+    basicColor: node.color,
     fontColor: '#333',
-    borderColor: '#fff',
+    borderColor:  node.color,
     bgColor: '#fff',
   };
   switch (node.type) {
@@ -303,7 +323,7 @@ G6.registerNode('card-node', {
     /* the description text */
     group.addShape('text', {
       attrs: {
-        text: fittingString(cfg.value, 243 - 50, 14),
+        text: fittingString(String(cfg.value), 243 - 50, 14),
         x: 19,
         y: 45,
         fontSize: 14,
@@ -358,10 +378,14 @@ G6.registerNode('card-node', {
   setState: nodeBasicMethod.setState,
 });
 export default {
-  props:['id'],
+  props:['id','contentStyle'],
+  components:{customerCount,contractCount,clueCount,projectQuotation,customQuotation,projectAssociation},
   data () {
     return {
-      fullscreen:false
+      fullscreen:false,
+      drawer:false,
+      title:'',
+      tableData: []
     }
   },
   mounted () {
@@ -375,7 +399,7 @@ export default {
     createMenu (array) {
       var that = this
       let arr = []
-      const HASLINKS = ['有效线索数','有效项目数']
+      const HASLINKS = ['线索统计','项目统计','客户统计','有效合同数','项目有效报价单数','客户报价单数']
       function convertToElementTree(node) {
         // 新节点
         var elNode = {
@@ -384,7 +408,9 @@ export default {
           info:node['info']?node['info']:{},
           infoSize:node['infoSize']?node['infoSize']:1,
           value:node['labor']?node['labor'] !== node['name']?node['labor']:'-':'-',
+          data:node['data'],
           children: [],
+          color:node['color'],
           nodeUrl:HASLINKS.includes(node['name'])?'123':null
         }
 
@@ -432,7 +458,7 @@ export default {
           type: 'dendrogram',
           direction: 'RL',
           nodeSep: 100,
-          rankSep: 250,
+          rankSep: 550,
           radial: true,
         },
       });
@@ -448,7 +474,15 @@ export default {
       graph.fitView();
       graph.on('node:click', evt => {
         const item = evt.item;
-        console.log(item)
+
+        console.log(item._cfg.model,'点击列表')
+        this.tableData = item._cfg.model.data
+        console.log(this.tableData,'表格订单')
+        this.title = item._cfg.model.label + '列表'
+        if (item._cfg.model.label == '客户统计' || item._cfg.model.label == '项目统计' || item._cfg.model.label == '线索统计' || item._cfg.model.label == '有效合同数'
+            || item._cfg.model.label == '项目有效报价单数' || item._cfg.model.label == '客户报价单数'){
+          this.drawer = true
+        }
       })
       if (typeof window !== 'undefined')
         window.onresize = () => {
@@ -456,6 +490,61 @@ export default {
           if (!container || !container.scrollWidth || !container.scrollHeight) return;
           graph.changeSize(container.scrollWidth, container.scrollHeight);
         };
+      if (this.$route.query.portrait === 'khtj'){
+        res.data.children.forEach(item=>{
+          if (item.name === '客户统计'){
+            this.tableData = item.data
+            this.title = '客户统计列表'
+          }
+        })
+        this.drawer = true
+        this.$route.query.portrait = ''
+      }else if (this.$route.query.portrait === 'xmtj'){
+        res.data.children.forEach(item=>{
+          if (item.name === '项目统计'){
+            this.tableData = item.data
+            this.title = '项目统计列表'
+          }
+        })
+        this.drawer = true
+        this.$route.query.portrait = ''
+      }else if (this.$route.query.portrait === 'xstj'){
+        res.data.children.forEach(item=>{
+          if (item.name === '线索统计'){
+            this.tableData = item.data
+            this.title = '线索统计列表'
+          }
+        })
+        this.drawer = true
+        this.$route.query.portrait = ''
+      }else if (this.$route.query.portrait === 'yxht'){
+        res.data.children.forEach(item=>{
+          if (item.name === '有效合同数'){
+            this.tableData = item.data
+            this.title = '有效合同数列表'
+          }
+        })
+        this.drawer = true
+        this.$route.query.portrait = ''
+      }else if (this.$route.query.portrait === 'xmbj'){
+        res.data.children.forEach(item=>{
+          if (item.name === '项目有效报价单数'){
+            this.tableData = item.data
+            this.title = '项目有效报价单数列表'
+          }
+        })
+        this.drawer = true
+        this.$route.query.portrait = ''
+      }else if (this.$route.query.portrait === 'khbj'){
+        res.data.children.forEach(item=>{
+          if (item.name === '客户报价单数'){
+            this.tableData = item.data
+            this.title = '客户报价单数列表'
+          }
+        })
+        this.drawer = true
+        this.$route.query.portrait = ''
+      }
     },
     enterFullscreen () {
       /* 获取(<html>)元素以全屏显示页面 */

+ 5 - 4
src/views/message/index.vue

@@ -81,9 +81,9 @@ export default {
         this.isCategory(item)
       })
       this.list = res.data
-      
+
       console.log(this.list);
-      
+
       if(this.list[0]) this.messageItemClick(this.list[0])
       this.total = res.total
     },
@@ -142,12 +142,13 @@ export default {
           this.$router.push({
             path:this.message.link.detail,
             query:{
-              id:this.message.objectid
+              id:this.message.objectid,
+              portrait:''
             }
           })
         })
       }
-      
+
     },
     isCategory(data) {
       JSON.parse(sessionStorage.getItem('module_info')).forEach(item1 => {