codeMan 2 yıl önce
ebeveyn
işleme
c485d90388

BIN
WPS Office.lnk


+ 150 - 82
src/HDrpManagement/customerPortrait/index.vue

@@ -1,76 +1,94 @@
 <template>
-  <normalLayout>
-    <template #content>
-      <div style="padding: 20px 20px 5px 20px;">
+  <div>
+    <basicLayout 
+    ref="list" 
+    tableName="publicCustomerTable" 
+    idName="sa_accountclassid" 
+    :apiId="{query:20230713132804}" 
+    :options="options"
+    :isExport="false"
+    @listCreate="listCreate"
+    >
+      <div slot="custom" style="display:flex">
         <div class="mt-10">
-          <label  class="search__label" >范围:</label>
-          <el-select class="inline-16" v-model="value" size="small" placeholder="请选择范围" clearable @change="selectChange">
+          <label  class="search__label" >部门:</label>
+          <el-select class="inline-16" v-model="dep" size="small" placeholder="请选择部门" clearable @change="depChange">
             <el-option
-                v-for="item in editableTabs"
-                :key="item.index"
-                :label="item.templetname"
-                :value="item.templetid"
+                v-for="item in selectList.dep"
+                :key="item.departmentid"
+                :label="item.depname"
+                :value="item.departmentid"
             ></el-option>
           </el-select>
         </div>
-      </div>
-      <el-scrollbar>
-      <div style="min-width: 1500px;padding: 10px 20px 5px 20px;height:calc(100vh - 300px)">
-        <div style="width: 20%;float: left" >
-          <el-table border :data="list" ref="table" highlight-current-row  @row-click="rowClick">
-            <el-table-column
-                prop="enterprisename"
-                label="客户名称"
-                width="180">
-            </el-table-column>
-            <el-table-column
-                prop="type"
-                label="类型"
-                width="180">
-            </el-table-column>
-            <el-table-column
-                label="负责人">
-              <template slot-scope="scope">
-                {{scope.row.leader[0].name}}
-              </template>
-            </el-table-column>
-          </el-table>
-          <div style="width: 100%">
-            <el-pagination
-                background
-                @size-change="handleSizeChange"
-                @current-change="handleCurrentChange"
-                :current-page="param.content.pageNumber"
-                :page-sizes="[20, 50, 100, 200]"
-                :page-size="20"
-                layout="total, prev, pager, next, jumper"
-                :total="total">
-            </el-pagination>
-          </div>
 
+        <div class="mt-10">
+          <label  class="search__label" >人员:</label>
+          <el-select class="inline-16" v-model="people" size="small" placeholder="请选择部门" clearable @change="peopleChange">
+            <el-option
+                v-for="item in selectList.hr"
+                :key="item.userid"
+                :label="item.name"
+                :value="item.userid"
+            ></el-option>
+          </el-select>
         </div>
-        <div style="width: 79.5%;height:100%;float: right;overflow: hidden" v-if="flag">
-          <mindmap :contentStyle="{height:'75vh',width:'66vw'}" :divStyle="{height:'76.5vh',width:'100%'}" ref="custom" class="inline-16" :id="sa_customersid" :show="show" :isList="1"></mindmap>
+
+        <div class="mt-10" style="margin-right:10px">
+          <label  class="search__label" >范围:</label>
+          <el-date-picker
+              size="small"
+              @change="timeChange"
+              value-format="yyyy-MM-dd"
+              v-model="dateSelect"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              clearable>
+          </el-date-picker>
         </div>
+
+        
       </div>
-      </el-scrollbar>
-    </template>
-  </normalLayout>
+      <template v-slot:tbList="scope">
+        <div v-if="scope.data.column.columnname === 'sys_tag'">
+          <el-tag v-for="(item,index) in scope.data.column.data.sys_tag" size="mini" style="margin-right:10px" :key="index">{{ item }}</el-tag>
+        </div>
+        <div v-else-if="scope.data.column.columnname === 'industry'">
+          <el-tag v-for="(item,index) in scope.data.column.data.industry" size="mini" style="margin-right:10px" :key="index">{{ item }}</el-tag>
+        </div>
+        <div v-else-if="scope.data.column.columnname === 'grade'">
+          {{ grade(scope.data.column.data.grade) }}
+        </div>
+        <div v-else-if="scope.data.column.columnname === 'leader'">
+          {{ scope.data.column.data.leader[0] && scope.data.column.data.leader[0].name }}
+        </div>
+        <div v-else>
+          {{scope.data.column.data[[scope.data.column.columnname]]}}
+        </div>
+      </template>
+      <template v-slot:tbOpreation="scope">
+        <el-button type="text" size="small" @click="goDetail(scope.data.data)">详 情</el-button>
+      </template>
+    </basicLayout>
+
+    <Detail ref="Detail" v-if="Object.keys(detail).length" :data="detail"></Detail>
+
+  </div>
 </template>
 
 <script>
-import mindmap from "@/components/mindmap/custom.vue";
+import Detail from './modules/detail'
 export default {
   name: "index",
-  components:{mindmap},
+  components:{Detail},
   data() {
     return {
-      value:1,
+      options:[],
       list:[],
+      detail:{},
       total:0,
-      flag:false,
-      sa_customersid:'',
-      show:'1',
       editableTabs:[
         {
           templetname:'我负责的',
@@ -101,40 +119,90 @@ export default {
           "type":'',
           "deleted": 0,
           "isExport": false,
-          "isend": 0
+          "isend": 0,
+          where:{
+            a:''
+          }
         }
+      },
+      dep:'',
+      people:'',
+      selectList:[],
+      dateSelect:[]
+    }
+  },
+  computed: {
+    grade () {
+      return (n) => {
+        let result
+        switch (n) {
+          case 0:
+            result = '无'
+            break;
+          case 1:
+            result = '等级一'
+            break;
+          case 2:
+            result = '等级二'
+            break;
+          case 3:
+            result = '等级三'
+            break;
+          case 4:
+            result = '等级四'
+            break;
+          case 5:
+            result = '等级一五'
+            break;
+        }
+        return result
       }
     }
   },
   methods:{
-    selectChange(){
-      console.log(this.value,'value')
-      this.listData()
+    listCreate (param) {
+      console.log(param);
+      param.content.type = ''
+      param.content.dataid = ''
     },
-    async listData(){
-      this.$store.dispatch('changeDetailDrawer',false)
-      this.param.content.type = this.value
-      const res = await this.$api.requested(this.param)
-      this.list = res.data
-      this.total = res.total
-
-      this.sa_customersid = res.data[0].sa_customersid
-      this.flag = true
-      this.$refs.table.setCurrentRow(this.list[0])
-    /*  this.$nextTick(()=>{
-        this.$refs.custom.getData()
-
-      })*/
-
+    goDetail (data) {
+      this.detail= {}
+      this.$router.push({
+        path:'customerportrait',
+        query: {
+          id:data.sa_customersid
+        }
+      })
+      setTimeout(() => {
+        this.detail = data
+        this.$nextTick(() => {
+          this.$refs.Detail.dialogFormVisible=true
+        })
+      })
     },
-    rowClick(val){
-      this.flag = false
-      this.sa_customersid = val.sa_customersid
-      this.$nextTick(()=>{
-        this.flag = true
-
+    async getDepAndpeople () {
+      let res = await this.$api.requested({
+        "id": 20230620102004,
+        "content": {
+        }
       })
-     /* this.queryData()*/
+      this.selectList = res.data
+      console.log(this.selectList,'范围选择数据');
+    },
+    timeChange () {
+      this.$refs.list.param.content.where.begindate = this.dateSelect[0]
+      this.$refs.list.param.content.where.enddate = this.dateSelect[1]
+      this.$refs.list.listData()
+    },
+    depChange(){
+      this.$refs.list.param.content.type = 1
+      this.$refs.list.param.content.dataid = this.dep
+      this.$refs.list.listData()
+    },
+    peopleChange(){
+      this.$refs.list.param.content.type = 0
+      this.$refs.list.param.content.dataid = this.people
+      this.$refs.list.listData()
     },
     handleSizeChange(val) {
       // console.log(`每页 ${val} 条`);
@@ -147,8 +215,8 @@ export default {
       this.listData()
     },
   },
-  mounted() {
-    this.listData()
+  created () {
+    this.getDepAndpeople()
   }
 }
 </script>

+ 158 - 0
src/HDrpManagement/customerPortrait/index2.vue

@@ -0,0 +1,158 @@
+<template>
+  <normalLayout>
+    <template #content>
+      <div style="padding: 20px 20px 5px 20px;">
+        <div class="mt-10">
+          <label  class="search__label" >范围:</label>
+          <el-select class="inline-16" v-model="value" size="small" placeholder="请选择范围" clearable @change="selectChange">
+            <el-option
+                v-for="item in editableTabs"
+                :key="item.index"
+                :label="item.templetname"
+                :value="item.templetid"
+            ></el-option>
+          </el-select>
+        </div>
+      </div>
+      <el-scrollbar>
+      <div style="min-width: 1500px;padding: 10px 20px 5px 20px;height:calc(100vh - 300px)">
+        <div style="width: 20%;float: left" >
+          <el-table border :data="list" ref="table" highlight-current-row  @row-click="rowClick">
+            <el-table-column
+                prop="enterprisename"
+                label="客户名称"
+                width="180">
+            </el-table-column>
+            <el-table-column
+                prop="type"
+                label="类型"
+                width="180">
+            </el-table-column>
+            <el-table-column
+                label="负责人">
+              <template slot-scope="scope">
+                {{scope.row.leader[0].name}}
+              </template>
+            </el-table-column>
+          </el-table>
+          <div style="width: 100%">
+            <el-pagination
+                background
+                @size-change="handleSizeChange"
+                @current-change="handleCurrentChange"
+                :current-page="param.content.pageNumber"
+                :page-sizes="[20, 50, 100, 200]"
+                :page-size="20"
+                layout="total, prev, pager, next, jumper"
+                :total="total">
+            </el-pagination>
+          </div>
+
+        </div>
+        <div style="width: 79.5%;height:100%;float: right;overflow: hidden" v-if="flag">
+          <mindmap :contentStyle="{height:'75vh',width:'66vw'}" :divStyle="{height:'76.5vh',width:'100%'}" ref="custom" class="inline-16" :id="sa_customersid" :show="show" :isList="1"></mindmap>
+        </div>
+      </div>
+      </el-scrollbar>
+    </template>
+  </normalLayout>
+</template>
+
+<script>
+import mindmap from "@/components/mindmap/custom.vue";
+export default {
+  name: "index",
+  components:{mindmap},
+  data() {
+    return {
+      value:1,
+      list:[],
+      total:0,
+      flag:false,
+      sa_customersid:'',
+      show:'1',
+      editableTabs:[
+        {
+          templetname:'我负责的',
+          templetid:1
+        },
+        {
+          templetname:'我参与的',
+          templetid:2
+        },
+        {
+          templetname:'我下属负责的',
+          templetid:3
+        },
+        {
+          templetname:'我下属参与的',
+          templetid:4
+        },
+        {
+          templetname:'我创建的',
+          templetid:5
+        }
+      ],
+      param:{
+        "id":20221012164402,
+        "content":{
+          "pageNumber": 1,
+          "pageSize": 20,
+          "type":'',
+          "deleted": 0,
+          "isExport": false,
+          "isend": 0
+        }
+      }
+    }
+  },
+  methods:{
+    selectChange(){
+      console.log(this.value,'value')
+      this.listData()
+    },
+    async listData(){
+      this.$store.dispatch('changeDetailDrawer',false)
+      this.param.content.type = this.value
+      const res = await this.$api.requested(this.param)
+      this.list = res.data
+      this.total = res.total
+
+      this.sa_customersid = res.data[0].sa_customersid
+      this.flag = true
+      this.$refs.table.setCurrentRow(this.list[0])
+    /*  this.$nextTick(()=>{
+        this.$refs.custom.getData()
+
+      })*/
+
+    },
+    rowClick(val){
+      this.flag = false
+      this.sa_customersid = val.sa_customersid
+      this.$nextTick(()=>{
+        this.flag = true
+
+      })
+     /* this.queryData()*/
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.param.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.param.content.pageNumber = val
+      this.listData()
+    },
+  },
+  mounted() {
+    this.listData()
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 13 - 0
src/HDrpManagement/customerPortrait/modules/avatarInfo.vue

@@ -0,0 +1,13 @@
+<template>
+    
+</template>
+
+<script>
+export default {
+  
+}
+</script>
+
+<style scoped>
+
+</style>

+ 637 - 0
src/HDrpManagement/customerPortrait/modules/detail.vue

@@ -0,0 +1,637 @@
+<template>
+  <el-drawer append-to-body :visible.sync="dialogFormVisible" size="90%">
+    <div class="Mcontainer">
+      <div style="background:#ffffff;padding:10px" v-if="Object.keys(baseInfo).length">
+        <div class="Mcontainer-header">
+          <div class="Mcontainer-header__left">
+            <div style="width:60px;height: 60px;background: blue;"></div>
+            <div class="account">
+              <p class="normal-title">
+                <el-tooltip class="item" effect="dark" :content="baseInfo.enterprisename" placement="top">
+                  <p class="nowrap">{{ baseInfo.enterprisename }}</p>
+                </el-tooltip>
+              </p>
+              <div class="Mtag">
+                <el-tag size="small" v-for="(item,index) in baseInfo.sys_tag" :key="index">{{ item }}</el-tag>
+              </div>
+            </div>
+          </div>
+          <div class="Mcontainer-header__right">
+            <el-descriptions class="margin-top">
+              <el-descriptions-item label="客户类型">{{ baseInfo.type }}</el-descriptions-item>
+              <el-descriptions-item label="客户等级">{{ baseInfo.grade }}</el-descriptions-item>
+              <el-descriptions-item label=" 合作状态">{{ baseInfo.status }}</el-descriptions-item>
+              <el-descriptions-item label="客户行业"> {{ baseInfo.industry }}</el-descriptions-item>
+              <el-descriptions-item label="客户分类"> {{ baseInfo.customergrade }}</el-descriptions-item>
+              <el-descriptions-item label="成交状态"> {{ baseInfo.tradingstatus }}</el-descriptions-item>
+              <el-descriptions-item label="负责人"> {{ baseInfo.team.length && baseInfo.team.filter(item =>item.isleader = 1)[0].name }}</el-descriptions-item>
+              <el-descriptions-item label="注册地址">{{ `${baseInfo.province}${baseInfo.city}${baseInfo.county}${baseInfo.address}` }} </el-descriptions-item>
+            </el-descriptions>
+          </div>
+        </div>
+        <div class="MaccountInfo">
+          <showIsNone title="工商信息">
+            <el-descriptions :column="2" border>
+              <el-descriptions-item label="法定代表人" label-class-name="my-label">{{ baseInfo2.legalPerson }}</el-descriptions-item>
+              <el-descriptions-item label="注册资本">{{ baseInfo2.registerCapital }}</el-descriptions-item>
+              <el-descriptions-item label="统一社会信用代码">{{ baseInfo2.taxNum }}</el-descriptions-item>
+              <el-descriptions-item label="工商注册号">{{ baseInfo2.ocid }}</el-descriptions-item>
+              <el-descriptions-item label="纳税人识别号">{{ baseInfo2.socialCreditCode }}</el-descriptions-item>
+              <el-descriptions-item label="行业大类">{{ baseInfo2.industryOne }}</el-descriptions-item>
+              <el-descriptions-item label="人员规模">{{ baseInfo2.staffSize }}</el-descriptions-item>
+              <el-descriptions-item label="经营期限至">{{ baseInfo2.registerDate }}</el-descriptions-item>
+              <el-descriptions-item label="注册地址">
+                <div class="nowrap" style="width: 300px;">
+                  <el-tooltip class="item" effect="dark" :content="baseInfo2.address" placement="top">
+                    <p class="nowrap">{{ baseInfo2.address }}</p>
+                  </el-tooltip>
+                </div>
+              </el-descriptions-item>
+              <el-descriptions-item label="经营范围">
+                <div class="nowrap" style="width: 300px;">
+                  <el-tooltip class="item" effect="dark" :content="baseInfo2.opScope" placement="top">
+                    <p class="nowrap">{{ baseInfo2.opScope }}</p>
+                  </el-tooltip>
+                </div>
+              </el-descriptions-item>
+            </el-descriptions>
+          </showIsNone>
+        </div>
+      </div>
+      <div v-if="data" style="padding: 0 10px;">
+        <!--跟进记录-->
+        <div class="Mfollow">
+          <el-card class="box-card">
+            <div slot="header">
+              <span style="margin-right: 10px;font-size: 14px;font-weight: bold;">跟进记录</span>
+              <el-radio-group v-model="param1.content.isAll" @input="refreshTable('param1','fllow')">
+                <el-radio :label="1">全部</el-radio>
+                <el-radio :label="0">本年</el-radio>
+              </el-radio-group>
+            </div>
+            <myCard 
+              :list="
+              [
+                {title:'跟进次数',value:$refs.fllow && $refs.fllow.list.length,bg:'#F3F9FC',color:'#8DCFFC'},
+                {title:'最近跟进人',value:$refs.fllow && $refs.fllow.list[0] && $refs.fllow.list[0].name,bg:'#E8F7EC',color:'#78B32B'},
+                {title:'最近跟进时间',value:$refs.fllow && $refs.fllow.list[0] && $refs.fllow.list[0].createdate,bg:'#F9F2E5',color:'#FF9795'},
+              ]"
+            ></myCard>
+            <showIsNone title="客户跟进记录明细">
+            <pageTable 
+              ref="fllow"
+              :tablecols="tool.tabelCol($route.name).clueFollow.tablecols"
+              :param="param1"
+            ></pageTable>
+            </showIsNone>
+          </el-card>
+        </div>
+
+        <!--项目-->
+        <div class="Mproject" style="margin-top:10px">
+          <el-card class="box-card">
+            <div slot="header">
+              <span style="margin-right: 10px;font-size: 14px;font-weight: bold;">项目</span>
+              <el-radio-group v-model="param2.content.isAll" @input="refreshTable('param2','project')">
+                <el-radio :label="1">全部</el-radio>
+                <el-radio :label="0">本年</el-radio>
+              </el-radio-group>
+
+              <el-select style="margin-left:10px" v-model="param2.content.where.stagename" clearable size="mini" placeholder="请选择项目阶段" @change="typeChange('param2','project')">
+                <el-option label="全部" value=""></el-option>
+                <el-option
+                  v-for="item in stageList"
+                  :key="item.stagename"
+                  :label="item.stagename"
+                  :value="item.stagename">
+                </el-option>
+              </el-select>
+            </div>
+            <myCard 
+              :list="
+              [
+                {title:'项目数',value:$refs.project && $refs.project.list && $refs.project.list.length,bg:'#F3F9FC',color:'#8DCFFC'},
+                {title:'项目成交率',value:$refs.project && $refs.project.list && $refs.project.list[0] && $refs.project.list[0].cjl,bg:'#E8F7EC',color:'#78B32B'},
+                {title:'总预计签约金额',value:$refs.project && $refs.project.list && $refs.project.list[0] && $refs.project.list[0].allSignamount_due,bg:'#F9F2E5',color:'#FF9795'},
+                {title:'参与项目数',value:$refs.project && $refs.project.list && $refs.project.list[0] && $refs.project.list[0].joinProjectQty,bg:'#FDF3F3',color:'#E899CC'},
+              ]"
+            ></myCard>
+            <showIsNone title="项目明细">
+            <pageTable 
+              ref="project"
+              :tablecols="tool.tabelCol($route.name).competeProjectsTable.tablecols"
+              :param="param2"
+            ></pageTable>
+            </showIsNone>
+          </el-card>
+        </div>
+
+        <!--报价单-->
+        <div class="Mproject" style="margin-top:10px">
+          <el-card class="box-card">
+            <div slot="header">
+              <span style="margin-right: 10px;font-size: 14px;font-weight: bold;">报价单</span>
+              <el-radio-group v-model="param3.content.isAll" @input="refreshTable('param3','baojiadan')">
+                <el-radio :label="1">全部</el-radio>
+                <el-radio :label="0">本年</el-radio>
+              </el-radio-group>
+            </div>
+            <myCard 
+              :list="
+              [
+                {title:'报价次数',value:$refs.baojiadan && $refs.baojiadan.list && $refs.baojiadan.list.length,bg:'#F3F9FC',color:'#8DCFFC'},
+                {title:'最近报价金额',value:$refs.baojiadan && $refs.baojiadan.list && $refs.baojiadan.list[0] && $refs.baojiadan.list[0].sumamount,bg:'#E8F7EC',color:'#78B32B'},
+                {title:'最近报价时间',value:$refs.baojiadan && $refs.baojiadan.list && $refs.baojiadan.list[0] && $refs.baojiadan.list[0].submitdate,bg:'#F9F2E5',color:'#FF9795'},
+              ]"
+            ></myCard>
+            <showIsNone title="报价单明细">
+            <pageTable 
+              ref="baojiadan"
+              :tablecols="tool.tabelCol($route.name).quotedPriceTable.tablecols"
+              :param="param3"
+            ></pageTable>
+            </showIsNone>
+          </el-card>
+        </div>
+
+        <!--合同-->
+        <div class="Mproject" style="margin-top:10px">
+          <el-card class="box-card">
+            <div slot="header">
+              <span style="margin-right: 10px;font-size: 14px;font-weight: bold;">合同</span>
+              <el-radio-group v-model="param4.content.isAll" @input="refreshTable('param4','hetong')">
+                <el-radio :label="1">全部</el-radio>
+                <el-radio :label="0">本年</el-radio>
+              </el-radio-group>
+              <el-select style="margin-left:10px" v-model="param4.content.where.type" clearable size="mini" placeholder="请选择订单类型" @change="typeChange('param4','hetong')">
+                <el-option label="全部" value=""></el-option>
+                <el-option :label="item.value" :value="item.value" v-for="(item,index) in contractTypeList" :key="index"></el-option>
+              </el-select>
+            </div>
+            <myCard 
+              :list="
+              [
+                {title:'项目合同总数',value:$refs.hetong && $refs.hetong.list && $refs.hetong.list[0] && $refs.hetong.list[0].allQty,bg:'#F3F9FC',color:'#8DCFFC'},
+                {title:'项目合同总金额',value:$refs.hetong && $refs.hetong.list && $refs.hetong.list[0] && $refs.hetong.list[0].sumSignAmount,bg:'#E8F7EC',color:'#78B32B'},
+                {title:'进行中项目总数',value:$refs.hetong && $refs.hetong.list && $refs.hetong.list[0] && $refs.hetong.list[0].inProgressQty,bg:'#F9F2E5',color:'#FF9795'},
+                {title:'进行中项目金额',value:$refs.hetong && $refs.hetong.list && $refs.hetong.list[0] && $refs.hetong.list[0].inProgressAmount,bg:'#F9F2E5',color:'#FF9795'},
+                {title:'到期项目合同数',value:$refs.hetong && $refs.hetong.list && $refs.hetong.list[0] && $refs.hetong.list[0].expireQty,bg:'#F9F2E5',color:'#FF9795'},
+                {title:'到期项目合同金额',value:$refs.hetong && $refs.hetong.list && $refs.hetong.list[0] && $refs.hetong.list[0].expireAmount,bg:'#F9F2E5',color:'#FF9795'},
+              ]"
+            ></myCard>
+            <showIsNone title="合同明细">
+            <pageTable 
+              ref="hetong"
+              :tablecols="tool.tabelCol($route.name).contractTable.tablecols"
+              :param="param4"
+            ></pageTable>
+            </showIsNone>
+          </el-card>
+        </div>
+
+        <!--订单-->
+        <div class="Mproject" style="margin-top:10px">
+          <el-card class="box-card">
+            <div slot="header">
+              <span style="margin-right: 10px;font-size: 14px;font-weight: bold;">订单</span>
+              <el-radio-group v-model="param5.content.isAll" @input="refreshTable('param5','dingdan')">
+                <el-radio :label="1">全部</el-radio>
+                <el-radio :label="0">本年</el-radio>
+              </el-radio-group>
+              <el-select style="margin-left:10px" v-model="param5.content.where.type" clearable size="mini" placeholder="请选择订单类型" @change="typeChange($event,'param5','type','dingdan')">
+                <el-option label="全部" value=""></el-option>
+                <el-option :label="item.value" :value="item.value" v-for="(item,index) in orderTypeList" :key="index"></el-option>
+              </el-select>
+            </div>
+            <myCard 
+              :list="
+              [
+                {title:'订单数量',value:$refs.dingdan && $refs.dingdan.list && $refs.dingdan.list[0] && $refs.dingdan.list[0].allOrderQty,bg:'#F3F9FC',color:'#8DCFFC'},
+                {title:'订单总金额',value:$refs.dingdan && $refs.dingdan.list && $refs.dingdan.list[0] && $refs.dingdan.list[0].allAmount,bg:'#E8F7EC',color:'#78B32B'},
+                {title:'回款金额',value:$refs.dingdan && $refs.dingdan.list && $refs.dingdan.list[0] && $refs.dingdan.list[0].cashbillAmount,bg:'#F9F2E5',color:'#FF9795'},
+                {title:'未出货金额',value:$refs.dingdan && $refs.dingdan.list && $refs.dingdan.list[0] && $refs.dingdan.list[0].allunAmount,bg:'#F9F2E5',color:'#FF9795'},
+                {title:'参与项目订单金额',value:$refs.dingdan && $refs.dingdan.list && $refs.dingdan.list[0] && $refs.dingdan.list[0].joinOrderAmount,bg:'#F9F2E5',color:'#FF9795'},
+              ]"
+            ></myCard>
+            <showIsNone title="订单明细">
+            <pageTable 
+              ref="dingdan"
+              :tablecols="tool.tabelCol($route.name).orderTable.tablecols"
+              :param="param5"
+            ></pageTable>
+            </showIsNone>
+          </el-card>
+        </div>
+
+        <!--服务-->
+        <div class="Mproject" style="margin-top:10px">
+          <el-card class="box-card">
+            <div slot="header">
+              <span style="margin-right: 10px;font-size: 14px;font-weight: bold;">服务</span>
+              <el-radio-group v-model="param6.content.isAll" @input="refreshTable('param6','fuwu')">
+                <el-radio :label="1">全部</el-radio>
+                <el-radio :label="0">本年</el-radio>
+              </el-radio-group>
+            </div>
+            <myCard 
+              :list="
+              [
+                {title:'服务申请次数',value:$refs.fuwu && $refs.fuwu.list && $refs.fuwu.list[0] && $refs.fuwu.list[0].serviceOrderQty,bg:'#F3F9FC',color:'#8DCFFC'},
+                {title:'服务工单次数',value:$refs.fuwu && $refs.fuwu.list && $refs.fuwu.list[0] && $refs.fuwu.list[0].workOrderQty,bg:'#E8F7EC',color:'#78B32B'},
+                {title:'完工工单次数',value:$refs.fuwu && $refs.fuwu.list && $refs.fuwu.list[0] && $refs.fuwu.list[0].okWorkOrderQty,bg:'#F9F2E5',color:'#FF9795'},
+                {title:'最近服务时间',value:$refs.fuwu && $refs.fuwu.list && $refs.fuwu.list[0] && $refs.fuwu.list[0].createdate,bg:'#F9F2E5',color:'#FF9795'},
+              ]"
+            ></myCard>
+            <showIsNone title="服务工单明细">
+            <pageTable 
+              ref="fuwu"
+              :tablecols="tool.tabelCol($route.name).serveOrderTable.tablecols"
+              :param="param6"
+            ></pageTable>
+            </showIsNone>
+          </el-card>
+        </div>
+
+        <div class="peopleInfo" v-if="Object.keys(baseInfo).length">
+          <el-row>
+            <el-col :span="12">
+              <el-card class="box-card" style="margin-right:10px">
+                <div slot="header">
+                  <span style="margin-right: 10px;font-size: 14px;font-weight: bold;">团队</span>
+                </div>
+                <div class="peopleInfo-content">
+                  <div class="leader">
+                    <p class="title" style="margin-bottom:10px">负责人</p>
+                    <div class="content">
+                      <div class="item" v-for="(item,index) in baseInfo.team.filter(item => item.isleader == 1)" :key="index">
+                        <div class="avatar">{{ item.name.substr(0,1) }}</div>
+                        <div class="Info">
+                          <div>
+                            <p class="title">{{ item.name }}</p>
+                            <p class="descript">账号:<span>{{ item.accountno }}</span></p>
+                          </div>
+                          <div>
+                            <p class="descript">部门:<span>{{ item.depname }}</span></p>  
+                            <p class="descript">职位:<span>{{ item.position }}</span></p>  
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                  <div class="people">
+                    <p class="title" style="margin-bottom:10px">参与人</p>
+                    <div class="content">
+                      <div class="avatar">张</div>
+                      <div class="Info">
+                        <div>
+                          <p class="title">张三</p>
+                          <p class="descript">账号:<span>xxxxxxxx</span></p>
+                        </div>
+                        <div>
+                          <p class="descript">部门:<span>销售部</span></p>  
+                          <p class="descript">职位:<span>总监</span></p>  
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              </el-card>
+            </el-col>
+            <el-col :span="12">
+              <el-card class="box-card">
+                <div slot="header">
+                  <span style="margin-right: 10px;font-size: 14px;font-weight: bold;">联系人</span>
+                </div>
+                <div class="peopleInfo-content">
+                  <div class="leader">
+                    <div class="content" v-if="baseInfo.contacts.length">
+                      <div class="item" v-for="(item,index) in baseInfo.contacts" :key="index">
+                        <div class="avatar">{{ item.name.substr(0,1) }}</div>
+                        <div class="Info">
+                          <div>
+                            <p class="title">{{ item.name }}</p>
+                            <p class="descript">账号:<span>{{ item.accountno }}</span></p>
+                          </div>
+                          <div>
+                            <p class="descript">部门:<span>{{ item.depname }}</span></p>  
+                            <p class="descript">职位:<span>{{ item.position }}</span></p>  
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                    <el-empty :image-size="100" description="暂无数据" v-else></el-empty>
+                  </div>
+                </div>
+              </el-card>
+            </el-col>
+          </el-row>
+        </div>
+      </div>
+      
+    </div>
+  </el-drawer>
+</template>
+
+<script>
+import pageTable from './pageTable'
+import showIsNone from './showIsNone'
+import myCard from './myCrad.vue'
+export default {
+  name: "index",
+  components:{showIsNone,pageTable,myCard},
+  props:['data'],
+  data() {
+    return {
+      dialogFormVisible:false,
+      baseInfo:{},//基本信息
+      baseInfo2:{},//工商信息
+      //跟进记录
+      param1: {
+        "id": 20230713103904,
+        "content": {
+            "pageNumber": 1,
+            "pageSize": 20,
+            "isAll":1,
+            "sa_customersid":this.$route.query.id
+        }
+      },
+      //关联项目
+      param2: {
+        "id": 20230713104004,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+          "isAll":1,
+          "sa_customersid":this.$route.query.id,
+          "where":{
+              "stagename":""
+          }
+        }
+      },
+      //关联报价单
+      param3: {
+        "id": 20230713104104,
+        "content": {
+            "pageNumber": 1,
+            "pageSize": 20,
+            "isAll":1,
+            "sa_customersid":this.$route.query.id
+        }
+      },
+      //关联合同
+      param4: {
+        "id": 20230713104204,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+          "isAll":1,
+          "sa_customersid":this.$route.query.id,
+          "where":{
+              "type":""
+          }
+        }
+      },
+      //关联订单
+      param5: {
+        "id": 20230713104304,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+          "isAll":1,
+          "sa_customersid":this.$route.query.id,
+          "where":{
+              "type":""
+          }
+        }
+      },
+      //服务工单
+      param6: {
+        "id": 20230713104404,
+        "content": {
+            "pageNumber": 1,
+            "pageSize": 20,
+            "isAll":1,
+            "sa_customersid":this.$route.query.id
+        }
+      },
+      contractTypeList:[],
+      orderTypeList:[],
+      stageList:[]
+    }
+  },
+  methods:{
+    async getbaseInfo () {
+      let res = await this.$api.requested({
+        "id": 20230713103804,
+        "content": {
+            "sa_customersid":this.data.sa_customersid
+        }
+      })
+      this.baseInfo = res.data
+      console.log(this.baseInfo,'基本信息');
+
+      let res2 = await this.$api.requested({
+        "id": 20221208103601,
+        "content": {
+            "keyword":this.baseInfo.enterprisename,
+            "pageNumber":1,
+            "pageSize":1
+        }
+      })
+      this.baseInfo2 = res2.data[0]
+      console.log(this.baseInfo2,'工商信息');
+    },
+    async getSelectList () {
+      const res = await this.$store.dispatch('optiontypeselect','contracttype')
+      this.contractTypeList = res.data
+      console.log(this.orderTypeList,'合同类型');
+
+      const res2 = await this.$store.dispatch('optiontypeselect','ordertype')
+      this.orderTypeList = res2.data
+      console.log(this.orderTypeList,'订单类型');
+
+      /*获取阶段*/
+      const res3 = await this.$api.requested({
+        "id": 20221128143604,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 9999,
+          "where": {
+            "condition": "",
+            "allprojecttype":"",
+            "projecttype":""
+          }
+        }
+      })
+      this.stageList = res3.data
+    },
+    refreshTable (param,el) {
+      this[param].content.pageNumber = 1
+      this.$refs[el] && this.$refs[el].listData()
+    },
+    typeChange(param,el) {
+      this[param].content.pageNumber = 1
+      this.$refs[el] && this.$refs[el].listData()
+    }
+  },
+  mounted() {
+    this.getbaseInfo()
+    this.getSelectList()
+  }
+}
+</script>
+
+<style scoped>
+*{
+  box-sizing: border-box;
+}
+.my-label {
+  background: rgba(235, 245, 253, 1);
+}
+.nowrap {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  flex: 100;
+}
+
+/deep/.el-drawer {
+  background:#F5F5F5 !important; 
+}
+/deep/.el-drawer__header{
+  display: none !important;
+}
+
+/deep/.el-descriptions-item__cell {
+  padding: 8px !important;
+}
+
+/deep/.el-card__header,/deep/.el-card__body {
+  padding: 10px !important;
+}
+.Mcontainer .Mcontainer-header {
+  display: flex;
+  align-items: center;
+}
+.Mcontainer .Mcontainer-header .Mcontainer-header__left {
+  display: flex;
+  width: 300px;
+  align-items: center;
+}
+.Mcontainer .Mcontainer-header .Mcontainer-header__right {
+  flex: 100;
+  border-left: 1px solid #cccccc;
+  padding-left: 20px;
+}
+.Mcontainer .Mcontainer-header .Mcontainer-header__left .account{
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  margin-left: 10px;
+  overflow: hidden;
+}
+.Mcontainer .Mcontainer-header .Mcontainer-header__left .account .Mtag{
+  margin-top: 5px;
+}
+
+.Mcontainer .Mfollow{
+  margin-top: 10px;
+}
+
+.Mcontainer .peopleInfo {
+  margin-top: 10px;
+  padding-bottom: 10px;
+}
+.peopleInfo-content {
+  display: flex;
+  flex-direction: column;
+}
+.peopleInfo-content .leader {
+  margin-bottom: 10px;
+  display: flex;
+  flex-direction: column;
+}
+.peopleInfo-content .leader .title {
+  font-size: 14px;
+}
+.peopleInfo-content .leader .content {
+  display: flex;
+  flex-wrap: wrap;
+}
+.peopleInfo-content .leader .content .item {
+  display: flex;
+  align-items: center;
+  margin: 0 20px 10px 0;
+}
+.peopleInfo-content .leader .content .avatar {
+  width: 50px;
+  height: 50px;
+  border-radius: 50%;
+  text-align: center;
+  line-height: 50px;
+  background: blue;
+  margin-right: 10px;
+  color: #ffffff;
+}
+.peopleInfo-content .leader .content .Info {
+  display: flex;
+  flex-direction: column;
+}
+.peopleInfo-content .leader .content .Info div {
+  display: flex;
+  align-items: center;
+  font-size: 12px;
+  color: #cccccc;
+}
+
+
+.peopleInfo-content .people {
+  margin-bottom: 10px;
+  display: flex;
+  flex-direction: column;
+}
+.peopleInfo-content .people .title {
+  font-size: 14px;
+}
+.peopleInfo-content .people .content {
+  display: flex;
+}
+.peopleInfo-content .people .content .item {
+  display: flex;
+  align-items: center;
+  margin: 0 20px 10px 0;
+}
+.peopleInfo-content .people .content .avatar {
+  width: 50px;
+  height: 50px;
+  border-radius: 50%;
+  text-align: center;
+  line-height: 50px;
+  background: blue;
+  margin-right: 10px;
+  color: #ffffff;
+}
+.peopleInfo-content .people .content .Info {
+  display: flex;
+  flex-direction: column;
+}
+.peopleInfo-content .people .content .Info div {
+  display: flex;
+  align-items: center;
+  font-size: 12px;
+  color: #cccccc;
+}
+
+.peopleInfo-content .people {}
+
+.descript {
+  font-size: 12px;
+  color: #cccccc;
+  margin-right: 20px;
+}
+.title {
+  font-size: 14px;
+  color: #000000;
+  margin-right: 10px;
+}
+</style>

+ 29 - 0
src/HDrpManagement/customerPortrait/modules/myCrad.vue

@@ -0,0 +1,29 @@
+<template>
+  <div class="dataInfo" style="display: flex;">
+    <div :style="[{'background': item.bg},{'width': '260px'},{'padding': '10px 10px'},{'margin-right': '10px'}]" v-for="(item,index) in list">
+      <p :style="[{'font-size': '14px'}]">{{ item.title }}</p>
+      <p :style="[{'font-weight': 'bold'},{'color':item.color}]">{{ item.value || '--' }}</p>
+    </div>
+  </div>
+</template>
+<script>
+ export default {
+  name:'myCard',
+  props:{
+    list: {
+      type:Array,
+      default:() => []
+    },
+  },
+  data () {
+    return {
+
+    }
+  }
+ }
+</script>
+
+<style scoped>
+</style>
+
+

+ 68 - 0
src/HDrpManagement/customerPortrait/modules/pageTable.vue

@@ -0,0 +1,68 @@
+
+<template>
+  <div>
+    <div>
+      <tableLayout :layout="tablecols" :data="list" :opwidth="200"  :custom="true" :width="false" fixedName="operation">
+        <template v-slot:customcol="scope">
+          <div v-if="scope.column.columnname == 'stagecount'">
+            <el-tag size="small" v-for="(item,index) in scope.column.data.stagecount" :key="index">{{ item.stagename }}</el-tag>
+          </div>
+          <div v-else>
+            {{ scope.column.data[scope.column.columnname] }}
+          </div>
+        </template>
+      </tableLayout>
+    </div>
+    <div style="margin-top:16px;text-align:right">
+      <el-pagination
+          background
+          small
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="param.content.pageNumber"
+          :page-size="param.content.pageSize"
+          layout="total, prev, pager, next, jumper"
+          :total="total">
+      </el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  props:["tablecols",'param'],
+  data () {
+    return {
+      list:[],
+      total:0,
+      options:[
+      ],
+    }
+  },
+  methods:{
+    async listData(){
+      const res = await this.$api.requested(this.param)
+      this.list = res.data[0].isEmpty ? [] : res.data
+      this.total = res.total
+      console.log(this.list)
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.param.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.param.content.pageNumber = val
+      this.listData()
+    },
+  },
+  created() {
+    this.listData()
+  }
+}
+
+</script>
+<style scoped>
+
+</style>

+ 41 - 0
src/HDrpManagement/customerPortrait/modules/showIsNone.vue

@@ -0,0 +1,41 @@
+<template>
+  <div class="header">
+    <div class="handle">
+      <div style="font-weight: bold;">
+        <i class="el-icon-d-arrow-right" style="font-weight: bold;"></i>
+        {{ title }}
+      </div>
+      <div 
+        style="display: flex;align-items: center;margin-left: 30px;color: #3874f6;cursor: pointer;"
+        @click="isTop = !isTop"
+      >
+        <span style="margin-right: 10px;">收起</span>
+        <i :class="isTop ? 'el-icon-arrow-up' : 'el-icon-arrow-down'"></i>
+      </div>
+    </div>
+    <slot v-if="!isTop"></slot>
+  </div>
+</template>
+
+<script>
+export default {
+  name:'normalTable',
+  props:['title'],
+  data () {
+    return {
+      isTop:false
+    }
+  }
+}
+</script>
+
+<style scoped>
+.header {
+  margin: 20px 0;
+}
+.handle{
+  display: flex;
+  font-size: 14px;
+  margin-bottom: 20px;
+}
+</style>

+ 1 - 1
src/HDrpManagement/toolBorrowingMag/detail/index.vue

@@ -319,7 +319,7 @@ export default {
     },
   },
   mounted () {
-    this.queryMainData(this.$route.query.id)
+    // this.queryMainData(this.$route.query.id)
   },
   created() {
   }