Przeglądaj źródła

Merge branch 'xiaoqin' into mergeBranch

codeMan 1 rok temu
rodzic
commit
0c039d0ada

+ 14 - 0
package-lock.json

@@ -25,6 +25,7 @@
         "increase-memory-limit": "^1.0.7",
         "js-md5": "^0.7.3",
         "less-loader": "^11.1.0",
+        "moment": "^2.29.4",
         "nprogress": "^0.2.0",
         "print-js": "^1.6.0",
         "script-loader": "^0.7.2",
@@ -10590,6 +10591,14 @@
       "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==",
       "dev": true
     },
+    "node_modules/moment": {
+      "version": "2.29.4",
+      "resolved": "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz",
+      "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/mrmime": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-1.0.0.tgz",
@@ -24460,6 +24469,11 @@
       "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==",
       "dev": true
     },
+    "moment": {
+      "version": "2.29.4",
+      "resolved": "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz",
+      "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
+    },
     "mrmime": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-1.0.0.tgz",

+ 1 - 0
package.json

@@ -26,6 +26,7 @@
     "increase-memory-limit": "^1.0.7",
     "js-md5": "^0.7.3",
     "less-loader": "^11.1.0",
+    "moment": "^2.29.4",
     "nprogress": "^0.2.0",
     "print-js": "^1.6.0",
     "script-loader": "^0.7.2",

+ 84 - 0
src/HDrpManagement/customerData/components/pageTable.vue

@@ -0,0 +1,84 @@
+
+<template>
+  <div>
+    <div>
+      <tableLayout height="400px" :layout="tablecols" :data="list2" :opwidth="200"  :custom="true" :width="false" fixedName="operation" :customHeader="true">
+        <template v-slot:header="data">
+          <div v-if="data.data.label == '综合折扣'" style="display:flex;align-items:center">
+            <span>{{ data.data.label }}</span>
+            <el-tooltip class="item" effect="dark" content="综合折扣=(产品明细平均折扣+产品类别平均折扣)÷2×100%" placement="top">
+              <i class="el-icon-warning-outline" style="margin-left:10px;cursor: pointer;"></i>
+            </el-tooltip>
+          </div>
+          <div v-else>
+            <span>{{ data.data.label }}</span>
+          </div>
+        </template>
+        <template v-slot:customcol="scope">
+          <slot v-if="custom" name="custom" :data="scope.column"></slot>
+          <div v-else>
+            <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>
+          </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-sizes="[20, 50, 100, 200]"
+          layout="total,sizes, prev, pager, next, jumper"
+          :total="total">
+      </el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  props:["tablecols",'param','custom'],
+  data () {
+    return {
+      list:[],
+      list2:[],
+      total:0,
+      options:[
+      ],
+    }
+  },
+  methods:{
+    async listData(){
+      const res = await this.$api.requested(this.param)
+      this.list = res.data
+      this.list2 = res.data.length && res.data[0].isEmpty ? [] : res.data
+      this.total = res.data.length && res.data[0].isEmpty ? 0 : 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>

+ 1701 - 0
src/HDrpManagement/customerData/index.vue

@@ -0,0 +1,1701 @@
+
+<template>
+  <normalLayout>
+    <template #refresh>
+      <div style="margin-right:15px">
+        <el-button type="text" size="small" @click="$refs.scroll.wrap.scrollTop=0">返回顶部</el-button>
+      </div>
+      <!-- <i class="el-icon-refresh-right" @click="refresh" v-loading.fullscreen.lock="fullscreenLoading"></i> -->
+    </template>
+    <template #content>
+      <div style="padding: 20rem;">
+        <el-scrollbar ref="scroll">
+          <div style="height:calc(100vh);padding:5rem">
+            <div class="mt-10 inline-16">
+              <label  class="search__label" >部门:</label>
+              <el-cascader 
+                ref="selectdep" 
+                size="small" 
+                v-model="depment" 
+                :options="deplist" 
+                :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  
+                @change="selectDep" 
+                clearable
+              ></el-cascader>
+            </div>
+            <div class="data-all">
+              <div>客户</div>
+              <div class="data-all-wrapper">
+                <div class="data-left">
+                  <div class="data-item">
+                    <p>{{ tool.formatAmount(dataAll.total) }}</p>
+                    <p>客户总数</p>
+                  </div>
+                  <div class="data-item">
+                    <p>{{ tool.formatAmount(dataAll.tradedCustomers)}}</p>
+                    <p>
+                      成交客户数
+                      <el-tooltip class="item" effect="dark" content="成交客户:已成交状态的客户数量" placement="top">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                    </p>
+                  </div>
+                  <div class="data-item">
+                    <p>{{ tool.formatAmount(dataAll.participateProject) }}</p>
+                    <p>
+                      参与项目客户数
+                      <el-tooltip class="item" effect="dark" content="参与项目客户数:参与有下订单的项目的关联客户数" placement="top">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                    </p>
+                  </div>
+                </div>
+                <div class="data-right">
+                  <div class="data-item" v-for="item in dataAll.data" :key="item.rowindex">
+                    <p>{{ tool.formatAmount(item.qty) }}</p>
+                    <p>
+                      {{ item.value}}
+                      <el-tooltip class="item" effect="dark" content="无分类客户数:统计没有客户分类信息的客户数量" placement="top" v-if="item.value == '无分类客户'">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                      <el-tooltip class="item" effect="dark" content="A核心客户:客户分类为A核心客户的数量" placement="top" v-else-if="item.value == 'A核心客户'">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                      <el-tooltip class="item" effect="dark" content="B重要客户:客户分类为B重要客户的数量" placement="top" v-else-if="item.value == 'B重要客户'">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                      <el-tooltip class="item" effect="dark" content="C普通客户:客户分类为C普通客户的数量" placement="top" v-else-if="item.value == 'C普通客户'">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                      <el-tooltip class="item" effect="dark" content="D一般客户:客户分类为D一般客户的数量" placement="top" v-else-if="item.value == 'D一般客户'">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                    </p>
+                  </div>
+                </div>
+              </div>
+              
+            </div>
+
+            <!--12月客户新增-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">近12月客户新增分析</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="chartParam1.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {chartParam1.content.type=1;chartParam1.content.dataid=$event[$event.length - 1];chartParam1.content.username='';chart1Fun()} else {chartParam1.content.dataid='';chartParam1.content.type='';chartParam1.content.username='';chart1Fun()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="chartParam1.content.username" filterable placeholder="请选择" size="small" 
+                      @change="$event => {if($event) {chartParam1.content.type=0;chartParam1.content.dataid=$event;chartParam1.content.depname='';chart1Fun()} else {chartParam1.content.dataid='';chartParam1.content.type='';chartParam1.content.depname='';chart1Fun()}}"
+                      clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >分析日期:</label>
+                    <el-date-picker
+                        v-model="chartParam1.content.enddate"
+                        format="yyyy-MM-dd"
+                        value-format="yyyy-MM-dd"
+                        type="date"
+                        size="small"
+                        placeholder="选择日期"
+                        @change="chart1Fun()">
+                    </el-date-picker>
+                  </div>
+                </div>
+              </div>
+              <div ref="chart1" style="height:400px"></div>
+            </div>
+            <!--客户类型-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">客户类型情况统计</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="typeTableParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {typeMapParam.content.type=1;typeMapParam.content.dataid=$event[$event.length - 1];typeTableParam.content.type=1;typeTableParam.content.dataid=$event[$event.length - 1];typeTableParam.content.username='';$refs.customerTypeTable.listData();customerTypeInit()} else {typeMapParam.content.type='';typeMapParam.content.dataid='';typeTableParam.content.dataid='';typeTableParam.content.type='';typeTableParam.content.username='';$refs.customerTypeTable.listData();customerTypeInit()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="typeTableParam.content.username" filterable placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {typeMapParam.content.type=0;typeMapParam.content.dataid=$event;typeTableParam.content.type=0;typeTableParam.content.dataid=$event;typeTableParam.content.depname='';$refs.customerTypeTable.listData();customerTypeInit()} else {typeMapParam.content.type='';typeMapParam.content.dataid='';typeTableParam.content.dataid='';typeTableParam.content.type='';typeTableParam.content.depname='';$refs.customerTypeTable.listData();customerTypeInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                </div>
+              </div>
+              <div class="panel-content">
+                <div ref="customerTypeEl" style="width:430rem"></div>
+                <div class="panel-table" style="width:1151rem">
+                  <pageTable
+                    ref="customerTypeTable"
+                    :tablecols="tool.tabelCol($route.name).typeTable.tablecols"
+                    :param="typeTableParam"
+                    :custom="true"
+                  >
+                    <template v-slot:custom="scope">
+                      <div v-if="scope.data.columnname == 'sys_tag'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'operation'">
+                        <el-button type="text" size="small" @click="goDetail(scope.data.data)">详情</el-button>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'industry'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'tradingstatus'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'status'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '潜在'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '合作中'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已终止'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'scale'">
+                        {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
+                      </div>
+                      <div v-else>
+                        {{ scope.data.data[scope.data.columnname] }}
+                      </div>
+                    </template>
+                  </pageTable>
+                </div>
+              </div>
+            </div>
+
+            <!--客户等级-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">客户等级情况统计</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="gradTableParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {gradMapParam.content.type=1;gradMapParam.content.dataid=$event[$event.length - 1];gradTableParam.content.type=1;gradTableParam.content.dataid=$event[$event.length - 1];gradTableParam.content.username='';$refs.customerGradTable.listData();customerGradInit()} else {gradMapParam.content.type='';gradMapParam.content.dataid='';gradTableParam.content.dataid='';gradTableParam.content.type='';gradTableParam.content.username='';$refs.customerGradTable.listData();customerGradInit()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="gradTableParam.content.username" filterable placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {gradMapParam.content.type=0;gradMapParam.content.dataid=$event;gradTableParam.content.type=0;gradTableParam.content.dataid=$event;gradTableParam.content.depname='';$refs.customerGradTable.listData();customerGradInit()} else {gradMapParam.content.type='';gradMapParam.content.dataid='';gradTableParam.content.dataid='';gradTableParam.content.type='';gradTableParam.content.depname='';$refs.customerGradTable.listData();customerGradInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                </div>
+              </div>
+              <div class="panel-content">
+                <div ref="customerGradEl" style="width:430rem"></div>
+                <div class="panel-table" style="width:1151rem">
+                  <pageTable
+                    ref="customerGradTable"
+                    :tablecols="tool.tabelCol($route.name).typeTable.tablecols"
+                    :param="gradTableParam"
+                    :custom="true"
+                  >
+                    <template v-slot:custom="scope">
+                      <div v-if="scope.data.columnname == 'sys_tag'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'operation'">
+                        <el-button type="text" size="small" @click="goDetail(scope.data.data)">详情</el-button>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'industry'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'tradingstatus'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'status'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '潜在'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '合作中'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已终止'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else>
+                        {{ scope.data.data[scope.data.columnname] }}
+                      </div>
+                    </template>
+                  </pageTable>
+                </div>
+              </div>
+            </div>
+
+            <!--客户联系人-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">客户联系人情况统计</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="contactTableParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {contactMapParam.content.type=1;contactMapParam.content.dataid=$event[$event.length - 1];contactTableParam.content.type=1;contactTableParam.content.dataid=$event[$event.length - 1];contactTableParam.content.username='';$refs.customerContactTable.listData();customerContactInit()} else {contactMapParam.content.type='';contactMapParam.content.dataid='';contactTableParam.content.dataid='';contactTableParam.content.type='';contactTableParam.content.username='';$refs.customerContactTable.listData();customerContactInit()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="contactTableParam.content.username" filterable placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {contactMapParam.content.type=0;contactMapParam.content.dataid=$event;contactTableParam.content.type=0;contactTableParam.content.dataid=$event;contactTableParam.content.depname='';$refs.customerContactTable.listData();customerContactInit()} else {contactMapParam.content.type='';contactMapParam.content.dataid='';contactTableParam.content.dataid='';contactTableParam.content.type='';contactTableParam.content.depname='';$refs.customerContactTable.listData();customerContactInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                </div>
+              </div>
+              <div class="panel-content">
+                <div ref="customerContactEl" style="width:430rem"></div>
+                <div class="panel-table" style="width:1151rem">
+                  <pageTable
+                    ref="customerContactTable"
+                    :tablecols="tool.tabelCol($route.name).typeTable.tablecols"
+                    :param="contactTableParam"
+                    :custom="true"
+                  >
+                    <template v-slot:custom="scope">
+                      <div v-if="scope.data.columnname == 'sys_tag'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'operation'">
+                        <el-button type="text" size="small" @click="goDetail(scope.data.data)">详情</el-button>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'industry'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'tradingstatus'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'status'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '潜在'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '合作中'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已终止'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else>
+                        {{ scope.data.data[scope.data.columnname] }}
+                      </div>
+                    </template>
+                  </pageTable>
+                </div>
+              </div>
+            </div>
+            <!--客户关联项目-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">客户关联项目情况统计</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="projectTableParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {projectMapParam.content.type=1;projectMapParam.content.dataid=$event[$event.length - 1];projectTableParam.content.type=1;projectTableParam.content.dataid=$event[$event.length - 1];projectTableParam.content.username='';$refs.customerProjectTable.listData();customerFllowInit()} else {projectMapParam.content.type='';projectMapParam.content.dataid='';projectTableParam.content.dataid='';projectTableParam.content.type='';projectTableParam.content.username='';$refs.customerProjectTable.listData();customerFllowInit()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="projectTableParam.content.username" filterable placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {projectMapParam.content.type=0;projectMapParam.content.dataid=$event;projectTableParam.content.type=0;projectTableParam.content.dataid=$event;projectTableParam.content.depname='';$refs.customerProjectTable.listData();customerFllowInit()} else {projectMapParam.content.type='';projectMapParam.content.dataid='';projectTableParam.content.dataid='';projectTableParam.content.type='';projectTableParam.content.depname='';$refs.customerProjectTable.listData();customerFllowInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                </div>
+              </div>
+              <div class="panel-content">
+                <div ref="customerProjectEl" style="width:430rem"></div>
+                <div class="panel-table" style="width:1151rem">
+                  <pageTable
+                    ref="customerProjectTable"
+                    :tablecols="tool.tabelCol($route.name).typeTable.tablecols"
+                    :param="projectTableParam"
+                    :custom="true"
+                  >
+                    <template v-slot:custom="scope">
+                      <div v-if="scope.data.columnname == 'sys_tag'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'operation'">
+                        <el-button type="text" size="small" @click="goDetail(scope.data.data)">详情</el-button>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'industry'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'tradingstatus'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'status'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '潜在'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '合作中'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已终止'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else>
+                        {{ scope.data.data[scope.data.columnname] }}
+                      </div>
+                    </template>
+                  </pageTable>
+                </div>
+              </div>
+            </div>
+            <!--客户跟进情况-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">客户跟进情况统计</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="fllowTableParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {fllowMapParam.content.type=1;fllowMapParam.content.dataid=$event[$event.length - 1];fllowTableParam.content.type=1;fllowTableParam.content.dataid=$event[$event.length - 1];fllowTableParam.content.username='';$refs.customerFllowTable.listData();customerFllowInit()} else {fllowMapParam.content.type='';fllowMapParam.content.dataid='';fllowTableParam.content.dataid='';fllowTableParam.content.type='';fllowTableParam.content.username='';$refs.customerFllowTable.listData();customerFllowInit()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="fllowTableParam.content.username" filterable placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {fllowMapParam.content.type=0;fllowMapParam.content.dataid=$event;fllowTableParam.content.type=0;fllowTableParam.content.dataid=$event;fllowTableParam.content.depname='';$refs.customerFllowTable.listData();customerFllowInit()} else {fllowMapParam.content.type='';fllowMapParam.content.dataid='';fllowTableParam.content.dataid='';fllowTableParam.content.type='';fllowTableParam.content.depname='';$refs.customerFllowTable.listData();customerFllowInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                </div>
+              </div>
+              <div class="panel-content">
+                <div ref="customerFllowEl" style="width:430rem"></div>
+                <div class="panel-table" style="width:1151rem">
+                  <pageTable
+                    ref="customerFllowTable"
+                    :tablecols="tool.tabelCol($route.name).typeTable.tablecols"
+                    :param="fllowTableParam"
+                    :custom="true"
+                  >
+                    <template v-slot:custom="scope">
+                      <div v-if="scope.data.columnname == 'sys_tag'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'operation'">
+                        <el-button type="text" size="small" @click="goDetail(scope.data.data)">详情</el-button>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'industry'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'tradingstatus'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'status'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '潜在'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '合作中'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已终止'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else>
+                        {{ scope.data.data[scope.data.columnname] }}
+                      </div>
+                    </template>
+                  </pageTable>
+                </div>
+              </div>
+            </div>
+            <!--12月客户跟进分析-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">近12月客户跟进分析</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="chartParam2.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {chartParam2.content.type=1;chartParam2.content.dataid=$event[$event.length - 1];chartParam2.content.username='';chart2Fun()} else {chartParam2.content.dataid='';chartParam2.content.type='';chartParam2.content.username='';chart2Fun()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="chartParam2.content.username" filterable placeholder="请选择" size="small" 
+                      @change="$event => {if($event) {chartParam2.content.type=0;chartParam2.content.dataid=$event;chartParam2.content.depname='';chart2Fun()} else {chartParam2.content.dataid='';chartParam2.content.type='';chartParam2.content.depname='';chart2Fun()}}"
+                      clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >分析日期:</label>
+                    <el-date-picker
+                        v-model="chartParam2.content.enddate"
+                        format="yyyy-MM-dd"
+                        value-format="yyyy-MM-dd"
+                        type="date"
+                        size="small"
+                        placeholder="选择日期"
+                        @change="chart2Fun()">
+                    </el-date-picker>
+                  </div>
+                </div>
+              </div>
+              <div ref="chart2" style="height:400px"></div>
+            </div>
+            <!--有效客户未跟进情况-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">有效客户未跟进天数分析</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="unfllowTableParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {unfllowMapParam.content.type=1;unfllowMapParam.content.dataid=$event[$event.length - 1];unfllowTableParam.content.type=1;unfllowTableParam.content.dataid=$event[$event.length - 1];unfllowTableParam.content.username='';$refs.customerUnfllowTable.listData();customerUnfllowInit()} else {unfllowMapParam.content.type='';unfllowMapParam.content.dataid='';unfllowTableParam.content.dataid='';unfllowTableParam.content.type='';unfllowTableParam.content.username='';$refs.customerUnfllowTable.listData();customerUnfllowInit()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="unfllowTableParam.content.username" filterable placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {unfllowMapParam.content.type=0;unfllowMapParam.content.dataid=$event;unfllowTableParam.content.type=0;unfllowTableParam.content.dataid=$event;unfllowTableParam.content.depname='';$refs.customerUnfllowTable.listData();customerUnfllowInit()} else {unfllowMapParam.content.type='';unfllowMapParam.content.dataid='';unfllowTableParam.content.dataid='';unfllowTableParam.content.type='';unfllowTableParam.content.depname='';$refs.customerUnfllowTable.listData();customerUnfllowInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >客户类型:</label>
+                    <el-select v-model="unfllowTableParam.content.where.type" placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {unfllowMapParam.content.where.type=$event;$refs.customerUnfllowTable.listData();customerUnfllowInit()} else {unfllowMapParam.content.where.type='';$refs.customerUnfllowTable.listData();customerUnfllowInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in customerTypeList"
+                          :key="item.rowindex"
+                          :label="item.value"
+                          :value="item.value">
+                      </el-option>
+                    </el-select>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >客户等级:</label>
+                    <el-select v-model="unfllowTableParam.content.where.grade" placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {unfllowMapParam.content.where.grade=$event;$refs.customerUnfllowTable.listData();customerUnfllowInit()} else {unfllowMapParam.content.where.grade='';$refs.customerUnfllowTable.listData();customerUnfllowInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in customerGrade"
+                          :key="item.rowindex"
+                          :label="item.value"
+                          :value="item.value">
+                      </el-option>
+                    </el-select>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >成交状态:</label>
+                    <el-select v-model="unfllowTableParam.content.where.tradingstatus" placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {unfllowMapParam.content.where.tradingstatus=$event;$refs.customerUnfllowTable.listData();customerUnfllowInit()} else {unfllowMapParam.content.where.tradingstatus='';$refs.customerUnfllowTable.listData();customerUnfllowInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in tradingstatus"
+                          :key="item.rowindex"
+                          :label="item.value"
+                          :value="item.value">
+                      </el-option>
+                    </el-select>
+                  </div>
+                </div>
+              </div>
+              <div>
+                <div ref="customerUnfllowEl"></div>
+                <div style="margin-top:10px">
+                  <pageTable
+                    ref="customerUnfllowTable"
+                    :tablecols="tool.tabelCol($route.name).typeTable1.tablecols.splice(0,tool.tabelCol($route.name).typeTable1.tablecols.length - 1)"
+                    :param="unfllowTableParam"
+                    :custom="true"
+                  >
+                    <template v-slot:custom="scope">
+                      <div v-if="scope.data.columnname == 'sys_tag'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'operation'">
+                        <el-button type="text" size="small" @click="goDetail(scope.data.data)">详情</el-button>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'industry'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'tradingstatus'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'status'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '潜在'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '合作中'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已终止'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else>
+                        {{ scope.data.data[scope.data.columnname] }}
+                      </div>
+                    </template>
+                  </pageTable>
+                </div>
+              </div>
+            </div>
+            <!--12月客户报价分析-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">近12月客户报价分析</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="projectParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {projectParam.content.type=1;projectParam.content.dataid=$event[$event.length - 1];projectParam.content.username='';chart3Fun()} else {projectParam.content.dataid='';projectParam.content.type='';projectParam.content.username='';chart3Fun()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="projectParam.content.username" filterable placeholder="请选择" size="small" 
+                      @change="$event => {if($event) {projectParam.content.type=0;projectParam.content.dataid=$event;projectParam.content.depname='';chart3Fun()} else {projectParam.content.dataid='';projectParam.content.type='';projectParam.content.depname='';chart3Fun()}}"
+                      clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >分析日期:</label>
+                    <el-date-picker
+                        v-model="projectParam.content.enddate"
+                        format="yyyy-MM-dd"
+                        value-format="yyyy-MM-dd"
+                        type="date"
+                        size="small"
+                        placeholder="选择日期"
+                        @change="chart3Fun()">
+                    </el-date-picker>
+                  </div>
+                </div>
+              </div>
+              <div ref="chart3" style="height:400px"></div>
+            </div>
+          </div>
+        </el-scrollbar>
+      </div>
+
+    </template>
+  </normalLayout>
+</template>
+
+<script>
+import { DualAxes,Pie,measureTextWidth,Column,Line  } from '@antv/g2plot'
+import pageTable from './components/pageTable.vue'
+import borderTemp from '@/HDrpManagement/dataanalysis/components/border.vue'
+export default {
+  components:{borderTemp,pageTable},
+  data () {
+    return {
+      deplist:[],
+      personnelList:[],
+      depmentParam:{
+        "id": 20230620102004,
+        "content": {
+        }
+      },
+      customerLead:[],
+      depment:'',
+      dataAll:{
+        data:{}
+      },
+      person:'',
+      dualAxes:'',
+      customerTypeMap:'',
+      uvBillData:[],
+      transformData:[],
+      tradingstatus:[
+        {
+          value:'未成交'
+        },
+        {
+          value:'已成交'
+        },
+        {
+          value:'多次成交'
+        }
+      ],
+      customerTypeList:[],
+      customerGrade:[],
+
+      //近12月客户新增
+      chartParam1: {
+        "id": 20231015123304,
+        "content": {
+            "depname":'',
+            "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+            "type": '',
+            "dataid": '',
+            "enddate": `${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`
+        }
+      },
+      //近12月跟进分析
+      chartMap:'',
+      chartMapData:[],
+      chartParam2: {
+        "id": 20231017152704,
+        "content": {
+            "depname":'',
+            "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+            "type": '',
+            "dataid": '',
+            "enddate": `${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`
+        }
+      },
+      //近12月客户报价
+      projectMap:'',
+      projectMapData:[],
+      projectParam: {
+        "id": 20231018131604,
+        "content": {
+            "depname":'',
+            "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+            "type": '',
+            "dataid": '',
+            "enddate": `${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`
+        }
+      },
+      //客户类型
+      typeMapParam: {
+        "id": 20231015203704,
+        "content": {
+          "depname":'',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "type": '',
+          "dataid": ''
+        }
+      },
+      typeTableParam:{
+        "id": 20231018164504,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "pageSize":20,
+          "pageNumber":1,
+          "where": {
+              "customerstype":""// 客户各种类型 以及 无类型  ------ 客户类型情况统计列表使用该字段
+          }
+        }
+      },
+      customerTypeData:{
+        map:[],
+        table:[]
+      },
+      //客户等级
+      customerGradMap:'',
+      gradMapParam: {
+        "id": 20231017140904,
+        "content": {
+          "depname":'',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "type": '',
+          "dataid": ''
+        }
+      },
+      gradTableParam:{
+        "id": 20231018164504,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "pageSize":20,
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "pageNumber":1,
+          "where": {
+              "grade": "", // 1 2 3 4 5 无等级  ------客户等级统计列表使用该字段
+          }
+        }
+      },
+      customerGradData:{
+        map:[],
+        table:[]
+      },
+      //客户联系人
+      customerContactMap:'',
+      contactMapParam: {
+        "id": 20231017141904,
+        "content": {
+          "depname":'',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "type": '',
+          "dataid": ''
+        }
+      },
+      contactTableParam:{
+        "id": 20231018164504,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "pageSize":20,
+          "pageNumber":1,
+          "where": {
+              "iscontacts": "", //无联系人 有联系人  ------客户联系人情况统计列表使用该字段
+          }
+        }
+      },
+      customerContactData:{
+        map:[],
+        table:[]
+      },
+      //客户关联项目
+      customerProjectMap:'',
+      projectMapParam: {
+        "id": 20231017143504,
+        "content": {
+          "depname":'',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "type": '',
+          "dataid": ''
+        }
+      },
+      projectTableParam:{
+        "id": 20231018164504,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "pageSize":20,
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "pageNumber":1,
+          "where": {
+              "isproject": "", //无关联项目 有关联项目  ------客户关联项目情况统计列表使用该字段
+          }
+        }
+      },
+      customerProjectData:{
+        map:[],
+        table:[]
+      },
+      //客户跟进情况
+      customerFllowMap:'',
+      fllowMapParam: {
+        "id": 20231017151304,
+        "content": {
+          "depname":'',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "type": '',
+          "dataid": ''
+        }
+      },
+      fllowTableParam:{
+        "id": 20231018164504,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "pageSize":20,
+          "pageNumber":1,
+          "where": {
+              "isfollowup": "", // 有跟进 无跟进------客户跟进情况统计列表使用该字段
+          }
+        }
+      },
+      customerFllowData:{
+        map:[],
+        table:[]
+      },
+      //未跟进情况
+      customerUnfllowMap:'',
+      unfllowMapParam: {
+        "id": 20231017162504,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "dataType":"",// 默认为 客户类型 
+          "where": {
+              "tradingstatus": "",//成交状态 
+              "type": "",//客户类型 
+              "grade": ""//客户等级 
+          }
+        }
+      },
+      unfllowTableParam:{
+        "id": 20231018093704,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "pageSize":20,
+          "pageNumber":1,
+          "where": {
+            "tradingstatus": "",//成交状态
+            "type": "",//客户类型
+            "grade": "",//客户等级
+            "dateType": ""// 时间阶段
+          }
+        }
+      },
+      customerUnfllowData:{
+        map:[],
+        table:[]
+      },
+    }
+  },
+  methods:{
+    goDetail (data) {
+      this.$router.push({
+        path:'/customerDetail',
+        query:{
+          id:data.sa_customersid,
+        }
+      })
+      this.$store.dispatch('changeDetailDrawer',true)
+    },
+    //获取数据总览
+    async getdataAll () {
+      let res = await this.$api.requested({
+        id:20231015170504,
+        content:{}
+      })
+      this.dataAll = res.data
+      console.log(this.dataAll,'数据总览');
+    },
+    async departmentrtment() {
+      const res = await this.$api.requested(this.depmentParam)
+      this.deplist = this.createMenu(res.data.dep)
+      this.personnelList = res.data.hr
+    },
+    //12月新增初始化
+    async chart1Fun (init) {
+      console.log(this.chartParam1);
+      let res = await this.$api.requested(this.chartParam1)
+      this.uvBillData = res.data.histogram
+      res.data.lineChart.forEach(item => item[`同比增长率(%)`] = item.value)
+      this.transformData = res.data.lineChart
+      if (init) {
+        this.dualAxes = new DualAxes(this.$refs.chart1, {
+          data: [this.uvBillData,this.transformData],
+          xField: 'date',
+          yField: ['value', '同比增长率(%)'],
+          geometryOptions: [
+            {
+              geometry: 'column',
+              isGroup: true,
+              seriesField: 'type',
+            },
+            {
+              geometry: 'line',
+              lineStyle: {
+                lineWidth: 2,
+              },
+            },
+          ],
+        });
+        this.dualAxes.render()
+      } else {
+        this.dualAxes.changeData([this.uvBillData,this.transformData])
+      }
+    },
+    //12月跟进初始化
+    async chart2Fun (init) {
+      let res = await this.$api.requested(this.chartParam2)
+      console.log(res.data,'近12月跟进');
+      this.chartMapData = res.data
+      if (init) {
+        this.chartMap = new DualAxes(this.$refs.chart2, {
+          data: [this.chartMapData.followup, this.chartMapData.tbzzl],
+          xField: 'date',
+          yField: ['value', 'value'],
+          geometryOptions: [
+            {
+              geometry: 'line',
+              seriesField:'key',
+              color: '#5B8FF9',
+            },
+            {
+              geometry: 'line',
+              seriesField:'key',
+              color: '#5AD8A6',
+            },
+          ],
+        });
+
+        this.chartMap.render();
+      } else {
+        this.chartMap.changeData([this.chartMapData.followup, this.chartMapData.tbzzl])
+      }
+    },
+    //客户类型图初始化
+    async customerTypeInit (init) {
+      let res = await this.$api.requested(this.typeMapParam)
+      this.customerTypeData.map = res.data
+      console.log(this.customerTypeData,'客户数据');
+      if (init) {
+        this.customerTypeMap = new Pie(this.$refs.customerTypeEl, {
+          appendPadding: 10,
+          data:this.customerTypeData.map,
+          angleField: 'value',
+          colorField: 'key',
+          radius: 1,
+          innerRadius: 0.64,
+          label:{
+            formatter: (datum) => `${datum.ratio * 100}%`
+          },
+          statistic: {
+            title: {
+              offsetY: -4,
+              customHtml: (container, view, datum) => {
+                const { width, height } = container.getBoundingClientRect();
+                const d = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(height / 2, 2));
+                const text = datum ? `${datum.key}` : '客户总数';
+                return this.renderStatistic(d, text, { fontSize: 28 });
+              },
+            },
+            content: {
+              offsetY: 4,
+              style: {
+                fontSize: '32px',
+              },
+              customHtml: (container, view, datum, data) => {
+                const { width } = container.getBoundingClientRect();
+                const text = datum ? `${datum.value}` : data[0] ? data[0].totalqty : 0;
+                return this.renderStatistic(width, text, { fontSize: 32 });
+              },
+            },
+          },
+          legend: {
+            position:'left'
+          },
+          // 添加 中心统计文本 交互
+          interactions: [{ type: 'element-single-selected' },{ type: 'element-active' },{ type: 'element-click' }],
+        });
+        this.customerTypeMap.on('element:click',(v) => {
+          if (v.data.data.key != this.typeTableParam.content.where.customerstype) {
+            this.typeTableParam.content.where.customerstype = v.data.data.key
+            this.$refs.customerTypeTable.listData()
+          } else {
+            this.typeTableParam.content.where.customerstype = ''
+            this.$refs.customerTypeTable.listData()
+          }
+        })
+        this.customerTypeMap.render();
+      } else {
+        this.customerTypeMap.changeData(this.customerTypeData.map)
+      }
+      
+    },
+    //客户等级图初始化
+    async customerGradInit (init) {
+      let res = await this.$api.requested(this.gradMapParam)
+      this.customerGradData.map = res.data
+      console.log(this.customerGradData,'客户数据');
+      if (init) {
+        this.customerGradMap = new Pie(this.$refs.customerGradEl, {
+          appendPadding: 10,
+          data:this.customerGradData.map,
+          angleField: 'value',
+          colorField: 'key',
+          radius: 1,
+          innerRadius: 0.64,
+          meta: {
+            value: {
+              formatter: (v) => `${v} ¥`,
+            },
+          },
+          label:{
+            formatter: (datum) => `${datum.ratio * 100}%`
+          },
+          statistic: {
+            title: {
+              offsetY: -4,
+              customHtml: (container, view, datum) => {
+                const { width, height } = container.getBoundingClientRect();
+                const d = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(height / 2, 2));
+                const text = datum ? `${datum.key}` : '客户总数';
+                return this.renderStatistic(d, text, { fontSize: 28 });
+              },
+            },
+            content: {
+              offsetY: 4,
+              style: {
+                fontSize: '32px',
+              },
+              customHtml: (container, view, datum, data) => {
+                const { width } = container.getBoundingClientRect();
+                const text = datum ? `${datum.value}` : data[0].totalqty;
+                return this.renderStatistic(width, text, { fontSize: 32 });
+              },
+            },
+          },
+          legend: {
+            position:'left'
+          },
+          // 添加 中心统计文本 交互
+          interactions: [{ type: 'element-single-selected' }, { type: 'element-active' }, { type: 'pie-statistic-active' }],
+        });
+        this.customerGradMap.on('element:click',(v) => {
+          if (v.data.data.key != this.gradTableParam.content.where.grade) {
+            this.gradTableParam.content.where.grade = v.data.data.key
+            this.$refs.customerGradTable.listData()
+          } else {
+            this.gradTableParam.content.where.grade = ''
+            this.$refs.customerGradTable.listData()
+          }
+        })
+        this.customerGradMap.render();
+      } else {
+        this.customerGradMap.changeData(this.customerGradData.map)
+      }
+      
+    },
+    //客户联系人图初始化
+    async customerContactInit (init) {
+      let res = await this.$api.requested(this.contactMapParam)
+      this.customerContactData.map = res.data
+      console.log(this.customerContactData,'客户数据');
+      if (init) {
+        this.customerContactMap = new Pie(this.$refs.customerContactEl, {
+          appendPadding: 10,
+          data:this.customerContactData.map,
+          angleField: 'value',
+          colorField: 'key',
+          radius: 1,
+          innerRadius: 0.64,
+          meta: {
+            value: {
+              formatter: (v) => `${v} ¥`,
+            },
+          },
+          label:{
+            formatter: (datum) => `${datum.ratio * 100}%`
+          },
+          statistic: {
+            title: {
+              offsetY: -4,
+              customHtml: (container, view, datum) => {
+                const { width, height } = container.getBoundingClientRect();
+                const d = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(height / 2, 2));
+                const text = datum ? `${datum.key}` : '客户总数';
+                return this.renderStatistic(d, text, { fontSize: 28 });
+              },
+            },
+            content: {
+              offsetY: 4,
+              style: {
+                fontSize: '32px',
+              },
+              customHtml: (container, view, datum, data) => {
+                const { width } = container.getBoundingClientRect();
+                const text = datum ? `${datum.value}` : data[0].totalqty;
+                return this.renderStatistic(width, text, { fontSize: 32 });
+              },
+            },
+          },
+          legend: {
+            position:'left'
+          },
+          // 添加 中心统计文本 交互
+          interactions: [{ type: 'element-single-selected' }, { type: 'element-active' }, { type: 'pie-statistic-active' }],
+        });
+        this.customerContactMap.on('element:click',(v) => {
+          if (v.data.data.key != this.contactTableParam.content.where.iscontacts) {
+            this.contactTableParam.content.where.iscontacts = v.data.data.key
+            this.$refs.customerContactTable.listData()
+          } else {
+            this.contactTableParam.content.where.iscontacts = ''
+            this.$refs.customerContactTable.listData()
+          }
+        })
+        this.customerContactMap.render();
+      } else {
+        this.customerContactMap.changeData(this.customerContactData.map)
+      }
+      
+    },
+    //客户关联项目图初始化
+    async customerProjectInit (init) {
+      let res = await this.$api.requested(this.projectMapParam)
+      this.customerProjectData.map = res.data
+      console.log(this.customerProjectData,'关联项目数据');
+      if (init) {
+        this.customerProjectMap = new Pie(this.$refs.customerProjectEl, {
+          appendPadding: 10,
+          data:this.customerProjectData.map,
+          angleField: 'value',
+          colorField: 'key',
+          radius: 1,
+          innerRadius: 0.64,
+          meta: {
+            value: {
+              formatter: (v) => `${v} ¥`,
+            },
+          },
+          label:{
+            formatter: (datum) => `${datum.ratio * 100}%`
+          },
+          statistic: {
+            title: {
+              offsetY: -4,
+              customHtml: (container, view, datum) => {
+                const { width, height } = container.getBoundingClientRect();
+                const d = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(height / 2, 2));
+                const text = datum ? `${datum.key}` : '客户总数';
+                return this.renderStatistic(d, text, { fontSize: 28 });
+              },
+            },
+            content: {
+              offsetY: 4,
+              style: {
+                fontSize: '32px',
+              },
+              customHtml: (container, view, datum, data) => {
+                const { width } = container.getBoundingClientRect();
+                const text = datum ? `${datum.value}` : data[0].totalqty;
+                return this.renderStatistic(width, text, { fontSize: 32 });
+              },
+            },
+          },
+          legend: {
+            position:'left'
+          },
+          // 添加 中心统计文本 交互
+          interactions: [{ type: 'element-single-selected' }, { type: 'element-active' }, { type: 'pie-statistic-active' }],
+        });
+        this.customerProjectMap.on('element:click',(v) => {
+          if (v.data.data.key != this.projectTableParam.content.where.isproject) {
+            this.projectTableParam.content.where.isproject = v.data.data.key
+            this.$refs.customerProjectTable.listData()
+          } else {
+            this.projectTableParam.content.where.isproject = ''
+            this.$refs.customerProjectTable.listData()
+          }
+        })
+        this.customerProjectMap.render();
+      } else {
+        this.customerProjectMap.changeData(this.customerProjectData.map)
+      }
+      
+    },
+    //客户跟进情况图初始化
+    async customerFllowInit (init) {
+      let res = await this.$api.requested(this.fllowMapParam)
+      this.customerFllowData.map = res.data
+      console.log(this.customerFllowData,'关联项目数据');
+      if (init) {
+        this.customerFllowMap = new Pie(this.$refs.customerFllowEl, {
+          appendPadding: 10,
+          data:this.customerFllowData.map,
+          angleField: 'value',
+          colorField: 'key',
+          radius: 1,
+          innerRadius: 0.64,
+          meta: {
+            value: {
+              formatter: (v) => `${v} ¥`,
+            },
+          },
+          label:{
+            formatter: (datum) => `${datum.ratio * 100}%`
+          },
+          statistic: {
+            title: {
+              offsetY: -4,
+              customHtml: (container, view, datum) => {
+                const { width, height } = container.getBoundingClientRect();
+                const d = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(height / 2, 2));
+                const text = datum ? `${datum.key}` : '客户总数';
+                return this.renderStatistic(d, text, { fontSize: 28 });
+              },
+            },
+            content: {
+              offsetY: 4,
+              style: {
+                fontSize: '32px',
+              },
+              customHtml: (container, view, datum, data) => {
+                const { width } = container.getBoundingClientRect();
+                console.log(data,'总数',datum,'当前');
+                const text = datum ? `${datum.value}` : data[0].totalqty;
+                return this.renderStatistic(width, text, { fontSize: 32 });
+              },
+            },
+          },
+          legend: {
+            position:'left'
+          },
+          // 添加 中心统计文本 交互
+          interactions: [{ type: 'element-single-selected' }, { type: 'element-active' }, { type: 'pie-statistic-active' }],
+        });
+        this.customerFllowMap.on('element:click',(v) => {
+          if (v.data.data.key != this.fllowTableParam.content.where.isfollowup) {
+            this.fllowTableParam.content.where.isfollowup = v.data.data.key
+            this.$refs.customerFllowTable.listData()
+          } else {
+            this.fllowTableParam.content.where.isfollowup = ''
+            this.$refs.customerFllowTable.listData()
+          }
+        })
+        this.customerFllowMap.render();
+      } else {
+        this.customerFllowMap.changeData(this.customerFllowData.map)
+      }
+      
+    },
+    //客户未跟进情况图初始化
+    async customerUnfllowInit (init) {
+      let res = await this.$api.requested(this.unfllowMapParam)
+      this.customerUnfllowData.map = res.data
+      console.log(this.customerUnfllowData,'未跟进数据');
+      if (init) {
+        this.customerUnfllowMap = new Column(this.$refs.customerUnfllowEl, {
+          data:this.customerUnfllowData.map,
+          isGroup: true,
+          xField: 'datetype',
+          yField: 'value',
+          seriesField: 'key',
+          /** 设置颜色 */
+          //color: ['#1ca9e6', '#f88c24'],
+          /** 设置间距 */
+          // marginRatio: 0.1,
+          label: {
+            // 可手动配置 label 数据标签位置
+            position: 'middle', // 'top', 'middle', 'bottom'
+            // 可配置附加的布局方法
+            layout: [
+              // 柱形图数据标签位置自动调整
+              { type: 'interval-adjust-position' },
+              // 数据标签防遮挡
+              { type: 'interval-hide-overlap' },
+              // 数据标签文颜色自动调整
+              { type: 'adjust-color' },
+            ],
+          },
+        });
+        this.customerUnfllowMap.render()
+      } else {
+        this.customerUnfllowMap.changeData(this.customerUnfllowData.map)
+      }
+      
+    },
+    //客户报价情况图初始化
+    async chart3Fun (init) {
+      let res = await this.$api.requested(this.projectParam)
+      console.log(res.data,'近12月报价');
+      this.projectMapData = res.data
+      if (init) {
+        this.projectMap = new Line(this.$refs.chart3, {
+          data:this.projectMapData,
+          xField: 'date',
+          yField: 'value',
+          seriesField: 'key',
+          xAxis: {
+            type: 'time',
+          },
+          yAxis: {
+            // label: {
+            //   // 数值格式化为千分位
+            //   formatter: (v) => `${v}`.replace(/\d{1,3}(?=(\d{3})+$)/g, (s) => `${s},`),
+            // },
+          },
+        });
+
+        this.projectMap.render()
+      } else {
+        this.projectMap.changeData(this.projectMapData)
+      }
+    },
+    renderStatistic(containerWidth, text, style) {
+      const textWidth = measureTextWidth(text, style);
+      const textHeight = style.lineHeight || style.fontSize
+      const R = containerWidth / 2;
+      // r^2 = (w / 2)^2 + (h - offsetY)^2
+      let scale = 1;
+      if (containerWidth < textWidth) {
+        scale = Math.min(Math.sqrt(Math.abs(Math.pow(R, 2) / (Math.pow(textWidth / 2, 2) + Math.pow(textHeight, 2)))), 1);
+      }
+      const textStyleStr = `width:${containerWidth}px;`;
+      return `<div style="${textStyleStr};font-size:${scale}em;line-height:${scale < 1 ? 1 : 'inherit'};">${text}</div>`;
+    },
+    createMenu (array) {
+      var that = this
+      let arr = []
+      function convertToElementTree(node) {
+        // 新节点
+        if (node.subdep.length === 0){
+          var elNode = {
+            label: node["depname"],
+            parentid:node['parentid'],
+            parentname:node['parentname'],
+            departmentid:node["departmentid"],
+            value:node["departmentid"],
+            remarks:node["remarks"],
+            isused:node["isused"],
+            changedate:node['changedate'],
+            changeby:node['changeby'],
+            createdate:node['createdate'],
+            createby:node['createby'],
+            depno:node['depno'],
+            disabled:that.pageOnlyRead,
+          }
+        }else {
+          var elNode = {
+            label: node["depname"],
+            parentid:node['parentid'],
+            parentname:node['parentname'],
+            departmentid:node["departmentid"],
+            value:node["departmentid"],
+            remarks:node["remarks"],
+            isused:node["isused"],
+            changedate:node['changedate'],
+            changeby:node['changeby'],
+            createdate:node['createdate'],
+            createby:node['createby'],
+            depno:node['depno'],
+            disabled:that.pageOnlyRead,
+            children: []
+          }
+        }
+        if (node.subdep && node.subdep.length > 0) {
+          // 如果存在子节点
+          for (var index = 0; index < node.subdep.length; index++) {
+            // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
+            elNode.children.push(convertToElementTree(node.subdep[index]));
+          }
+        }
+        return elNode;
+      }
+      array.forEach((element) => {
+        arr.push(convertToElementTree(element))
+      });
+      return arr
+    },
+    selectDep (val) {
+      let id = val[val.length - 1]
+      if (val.length) {
+        this.chartParam1.content.dataid = id
+        this.chartParam1.content.type = 1
+        this.chartParam1.content.username = ''
+        this.chartParam1.content.depname = ''
+        this.chart1Fun()
+
+        this.chartParam2.content.dataid = id
+        this.chartParam2.content.type = 1
+        this.chartParam2.content.username = ''
+        this.chart2Fun()
+
+        this.projectParam.content.dataid = id
+        this.projectParam.content.type = 1
+        this.projectParam.content.username = ''
+        this.chart3Fun()
+
+        this.typeMapParam.content.dataid = id
+        this.typeMapParam.content.type = 1
+        this.customerTypeInit()
+        this.typeTableParam.content.dataid = id
+        this.typeTableParam.content.type = 1
+        this.typeTableParam.content.username = ''
+        this.$refs.customerTypeTable.listData()
+
+        this.gradMapParam.content.dataid = id
+        this.gradMapParam.content.type = 1
+        this.customerGradInit()
+        this.gradTableParam.content.dataid = id
+        this.gradTableParam.content.type = 1
+        this.gradTableParam.content.username = ''
+        this.$refs.customerGradTable.listData()
+
+
+        this.contactMapParam.content.dataid = id
+        this.contactMapParam.content.type = 1
+        this.customerContactInit()
+        this.contactTableParam.content.dataid = id
+        this.contactTableParam.content.type = 1
+        this.contactTableParam.content.username = ''
+        this.$refs.customerContactTable.listData()
+
+        this.projectMapParam.content.dataid = id
+        this.projectMapParam.content.type = 1
+        this.customerProjectInit()
+        this.projectTableParam.content.dataid = id
+        this.projectTableParam.content.type = 1
+        this.projectTableParam.content.username = ''
+        this.$refs.customerProjectTable.listData()
+
+        this.fllowMapParam.content.dataid = id
+        this.fllowMapParam.content.type = 1
+        this.customerFllowInit()
+        this.fllowTableParam.content.dataid = id
+        this.fllowTableParam.content.type = 1
+        this.fllowTableParam.content.username = ''
+        this.$refs.customerFllowTable.listData()
+
+        this.unfllowMapParam.content.dataid = id
+        this.unfllowMapParam.content.type = 1
+        this.customerUnfllowInit()
+        this.unfllowTableParam.content.dataid = id
+        this.unfllowTableParam.content.type = 1
+        this.unfllowTableParam.content.username = ''
+        this.$refs.customerUnfllowTable.listData()
+      } else {
+        this.chartParam1.content.dataid = ''
+        this.chartParam1.content.type =''
+        this.chartParam1.content.username = ''
+        this.chartParam1.content.depname = ''
+        this.chart1Fun()
+
+        this.chartParam2.content.dataid = ''
+        this.chartParam2.content.type =''
+        this.chartParam2.content.username = ''
+        this.chart2Fun()
+
+        this.projectParam.content.dataid = ''
+        this.projectParam.content.type =''
+        this.projectParam.content.username = ''
+        this.chart3Fun()
+
+        this.typeMapParam.content.dataid = ''
+        this.typeMapParam.content.type =''
+        this.customerTypeInit()
+        this.typeTableParam.content.dataid = ''
+        this.typeTableParam.content.type =''
+        this.typeTableParam.content.username = ''
+        this.$refs.customerTypeTable.listData()
+
+        this.gradMapParam.content.dataid = ''
+        this.gradMapParam.content.type =''
+        this.customerGradInit()
+        this.gradTableParam.content.dataid = ''
+        this.gradTableParam.content.type =''
+        this.gradTableParam.content.username = ''
+        this.$refs.customerGradTable.listData()
+
+
+        this.contactMapParam.content.dataid = ''
+        this.contactMapParam.content.type =''
+        this.customerContactInit()
+        this.contactTableParam.content.dataid = ''
+        this.contactTableParam.content.type =''
+        this.contactTableParam.content.username = ''
+        this.$refs.customerContactTable.listData()
+
+        this.projectMapParam.content.dataid = ''
+        this.projectMapParam.content.type =''
+        this.customerProjectInit()
+        this.projectTableParam.content.dataid = ''
+        this.projectTableParam.content.type =''
+        this.projectTableParam.content.username = ''
+        this.$refs.customerProjectTable.listData()
+
+        this.fllowMapParam.content.dataid = ''
+        this.fllowMapParam.content.type =''
+        this.customerFllowInit()
+        this.fllowTableParam.content.dataid = ''
+        this.fllowTableParam.content.type =''
+        this.fllowTableParam.content.username = ''
+        this.$refs.customerFllowTable.listData()
+
+        this.unfllowMapParam.content.dataid = ''
+        this.unfllowMapParam.content.type =''
+        this.customerUnfllowInit()
+        this.unfllowTableParam.content.dataid = ''
+        this.unfllowTableParam.content.type =''
+        this.unfllowTableParam.content.username = ''
+        this.$refs.customerUnfllowTable.listData()
+      }
+    },
+    async getCustomerType () {
+      const siteid = JSON.parse(sessionStorage.getItem('active_account')).siteid
+      const res = await this.$api.requested({
+        "classname": "sysmanage.develop.optiontype.optiontype",
+        "method": "optiontypeselect",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+          "typename": "customertypemx",
+          "parameter": {
+            "siteid": siteid
+          }
+        }
+      })
+      this.customerTypeList = res.data
+      console.log(this.customerTypeList,'客户类型');
+
+      this.$store.dispatch('optiontypeselect','agentgrade').then(res=>{
+        this.customerGrade = res.data
+      })
+    }
+  },
+  async mounted () {
+    this.departmentrtment()
+    this.getdataAll()
+    this.chart1Fun(true)
+    this.chart2Fun(true)
+    this.customerTypeInit(true)
+    this.customerGradInit(true)
+    this.customerContactInit(true)
+    this.customerProjectInit(true)
+    this.customerFllowInit(true)
+    this.customerUnfllowInit(true)
+    this.chart3Fun(true)
+    this.getCustomerType()
+    let baseWidth = 1920
+    document.querySelector('html').style.fontSize = `${100 / baseWidth}vw`
+
+    /* 获取客户等级 */
+    let res2 = await this.$store.dispatch('optiontypeselect','customergrade')
+    this.customerLead = res2.data
+    console.log(this.customerLead,'客户等级');
+
+    console.log(`${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`);
+  }
+}
+
+</script>
+<style>
+.basic__layout__panel {
+  height: 100% !important;
+}
+</style>
+<style scoped>
+
+*{
+  box-sizing: border-box;
+}
+.data-all {
+  padding: 24rem 20rem;
+  width: 100%;
+  border-radius: 5rem;
+  height: 148rem;
+  border: 1rem;
+  box-shadow: rgb(136, 136, 136) 0rem 0rem 5rem 0rem;
+  margin-top: 10rem;
+}
+.data-all .data-left {
+  border-right: 1rem solid rgb(136,136,146);
+}
+.data-all .data-right {
+  padding-left: 50rem;
+}
+.data-all .data-left,.data-right {
+  display: flex;
+}
+.data-all .data-item {
+  width: 186rem;
+}
+.data-all .data-item p:nth-child(1) {
+  font-size: 26rem;
+  font-weight: bold;
+}
+.data-all .data-item p:nth-child(2) {
+  font-size: 16rem;
+}
+.data-all .data-all-wrapper {
+  display: flex;
+}
+.data-panel {
+  margin-top: 40px;
+}
+.data-panel .panel-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 10px;
+}
+.title {
+  min-width: 220px;
+}
+.title::before {
+  content:'';
+  border-left: 4px #3874f6 solid;
+  padding-right: 10px;
+}
+.panel-content {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+.panel-content div:first-child { 
+  padding: 0 5px;
+}
+.search__label {
+  margin-right: 5px !important;
+}
+.mt-10 {
+  margin-right: 15px !important;
+}
+</style>

+ 84 - 0
src/HDrpManagement/projectData/components/pageTable.vue

@@ -0,0 +1,84 @@
+
+<template>
+  <div style="width:100%">
+    <div>
+      <tableLayout height="400px" :layout="tablecols" v-bind="$attrs" :data="list2" :opwidth="200"  :custom="true" :width="false" fixedName="operation" :customHeader="true">
+        <template v-slot:header="data">
+          <div v-if="data.data.label == '综合折扣'" style="display:flex;align-items:center">
+            <span>{{ data.data.label }}</span>
+            <el-tooltip class="item" effect="dark" content="综合折扣=(产品明细平均折扣+产品类别平均折扣)÷2×100%" placement="top">
+              <i class="el-icon-warning-outline" style="margin-left:10px;cursor: pointer;"></i>
+            </el-tooltip>
+          </div>
+          <div v-else>
+            <span>{{ data.data.label }}</span>
+          </div>
+        </template>
+        <template v-slot:customcol="scope">
+          <slot v-if="custom" name="custom" :data="scope.column"></slot>
+          <div v-else>
+            <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>
+          </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-sizes="[20, 50, 100, 200]"
+          layout="total,sizes, prev, pager, next, jumper"
+          :total="total">
+      </el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  props:["tablecols",'param','custom'],
+  data () {
+    return {
+      list:[],
+      list2:[],
+      total:0,
+      options:[
+      ],
+    }
+  },
+  methods:{
+    async listData(){
+      const res = await this.$api.requested(this.param)
+      this.list = res.data
+      this.list2 = res.data.length && res.data[0].isEmpty ? [] : res.data
+      this.total = res.data.length && res.data[0].isEmpty ? 0 : 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>

+ 151 - 0
src/HDrpManagement/projectData/components/selectProject.vue

@@ -0,0 +1,151 @@
+<template>
+  <div style="display:inline-block"> 
+    <el-dialog :visible.sync="visible" append-to-body width="70%">
+      <div class="normal-margin">
+        <slot name="operation"></slot>
+        <div class="mt-10 inline-16">
+          <el-input size="small" style="width:200px" clearable suffix-icon="el-icon-search" v-model="params.content.where.condition" placeholder="项目名称,编号" @keyup.enter.native="listData(params.content.pageNumber = 1)" @clear="listData(params.content.pageNumber = 1)" clearable></el-input>&nbsp;
+        </div>
+        <div class="mt-10 inline-16">
+          <label  class="search__label">项目类型:</label>
+          <el-select v-model="params.content.where.projecttype" placeholder="请选择项目类型" @change="$refs.table.listData()" size="small" clearable>
+            <el-option
+                v-for="item in projectType"
+                :key="item.value"
+                :label="item.value"
+                :value="item.value">
+              <span style="float: left">{{ item.value }}</span>
+              <span style="float: right; color: #8492a6; font-size: 12px">{{ item.remarks?item.remarks:'暂无描述' }}</span>
+            </el-option>
+          </el-select>
+        </div>
+        <div class="mt-10 inline-16">
+          <label  class="search__label">项目等级:</label>
+          <el-select v-model="params.content.where.grade" placeholder="请选择项目等级" @change="$refs.table.listData()" size="small" clearable>
+            <el-option
+                v-for="item in projectLead"
+                :key="item.value"
+                :label="item.value"
+                :value="item.value">
+              <span style="float: left">{{ item.value }}</span>
+              <span style="float: right; color: #8492a6; font-size: 12px">{{ item.remarks?item.remarks:'暂无描述' }}</span>
+            </el-option>
+          </el-select>
+        </div>
+        <div class="mt-10 inline-16">
+          <label  class="search__label">领域:</label>
+          <el-select v-model="params.content.where.tradefield" placeholder="请选择领域" @change="$refs.table.listData()" size="small" clearable>
+            <el-option
+                v-for="item in tradefieldSelect"
+                :key="item.value"
+                :label="item.value"
+                :value="item.value">
+              <span style="float: left">{{ item.value }}</span>
+              <span style="float: right; color: #8492a6; font-size: 12px">{{ item.remarks?item.remarks:'暂无描述' }}</span>
+            </el-option>
+          </el-select>
+        </div>
+      </div>
+      <div class="produtMag-panel">
+        <pageTable
+          ref="table"
+          :tablecols="tool.tabelCol($route.name).projectTable.tablecols"
+          :param="params"
+          :custom="true"
+          fixedName="operation"
+        >
+          <template v-slot:custom="scope">
+            <div v-if="scope.data.columnname == 'sys_tag'">
+              <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+            </div>
+            <div v-else-if="scope.data.columnname == 'operation'">
+              <el-button size="small" type="text" @click="selectRow(scope.data.data)">选择</el-button>
+            </div>
+            <div v-else-if="scope.data.columnname == 'signamount_due'">
+              {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
+            </div>
+            <div v-else-if="scope.data.columnname === 'industry'">
+              <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+            </div>
+            <div v-else-if="scope.data.columnname === 'tradingstatus'">
+              <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+              <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+              <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+            </div>
+            <div v-else-if="scope.data.columnname === 'status'">
+              <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+              <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
+              <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
+            </div>
+            <div v-else-if="scope.data.columnname == 'scale'">
+              {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
+            </div>
+            <div v-else>
+              {{ scope.data.data[scope.data.columnname] }}
+            </div>
+          </template>
+        </pageTable>
+      </div>
+    </el-dialog>
+    <slot name="input"></slot>
+  </div>
+  </template>
+  
+  <script>
+  import pageTable from './pageTable.vue'
+  
+  export default {
+    props:['projectType','projectLead','tradefieldSelect'],
+    data () {
+      return {
+        params:{
+          "id": 20230715111604,
+          "content": {
+            "dataid":'',
+            "type":'',
+            "pageNumber": 1,
+            "pageSize": 20,
+            "where": {
+              "condition": "",
+              "tag": "",
+              "status": "",
+              "projecttype": "",
+              "stagename": "",
+              "tradefield":"",
+              "begindate": "",
+              "enddate": ""
+            }
+          }
+        },
+        visible:false
+      }
+    },
+    components:{
+      pageTable
+    },
+    methods:{
+      selectRow (data) {
+        this.$emit('selectRow',data)
+        this.visible = false
+      }
+    },
+  }
+  
+  </script>
+  <style>
+  </style>
+  <style scoped>
+  .produtMag-panel{
+    /* margin: 30px; */
+    padding:0 10px 10px 10px;
+    background: #fff;
+    border-radius:5px;
+    overflow: hidden;
+    border:1px solid rgb(0 0 0 / 5%)
+    /* box-shadow: 0 5px 5px rgb(0 0 0 / 10%);
+    transform: translate3d(0,-2px,0); */
+  }
+  .image {
+    width:40px;height:40px;margin:0px auto;
+  }
+  </style>

+ 2301 - 0
src/HDrpManagement/projectData/index.vue

@@ -0,0 +1,2301 @@
+
+<template>
+  <normalLayout>
+    <template #refresh>
+      <div style="margin-right:15px">
+        <el-button type="text" size="small" @click="$refs.scroll.wrap.scrollTop=0">返回顶部</el-button>
+      </div>
+      <!-- <i class="el-icon-refresh-right" @click="refresh" v-loading.fullscreen.lock="fullscreenLoading"></i> -->
+    </template>
+    <template #content>
+      
+      <div style="padding: 20rem;">
+        <el-scrollbar ref="scroll">
+          <div style="height:calc(100vh);padding:5rem">
+            
+            <div class="mt-10 inline-16">
+              <label  class="search__label" >部门:</label>
+              <el-cascader 
+                ref="selectdep" 
+                size="small" 
+                v-model="depment" 
+                :options="deplist" 
+                :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  
+                @change="selectDep" 
+                clearable
+              ></el-cascader>
+            </div>
+            <div class="data-all">
+              <div>客户</div>
+              <div class="data-all-wrapper">
+                <div class="data-left">
+                  <div class="data-item">
+                    <p>{{ tool.formatAmount(dataAll.dealProject) }}</p>
+                    <p>项目总数</p>
+                  </div>
+                  <div class="data-item">
+                    <p>{{ tool.formatAmount(dataAll.reportProject)}}</p>
+                    <p>
+                      报备项目数
+                      <el-tooltip class="item" effect="dark" content="报备项目数:统计已报备的项目数量" placement="top">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                    </p>
+                  </div>
+                  <div class="data-item">
+                    <p>{{ tool.formatAmount(dataAll.startproject) }}</p>
+                    <p>
+                      进行中项目数
+                      <el-tooltip class="item" effect="dark" content="参与项目客户数:参与有下订单的项目的关联客户数" placement="top">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                    </p>
+                  </div>
+                  <div class="data-item">
+                    <p>{{ tool.formatAmount(dataAll.totalqty) }}</p>
+                    <p>
+                      项目成交数
+                      <el-tooltip class="item" effect="dark" content="项目成交数:统计有关联审核过的订单的项目数量" placement="top">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                    </p>
+                  </div>
+                  <div class="data-item">
+                    <p>{{ dataAll.cjl * 100 }}%</p>
+                    <p>
+                      项目成交率
+                      <el-tooltip class="item" effect="dark" content="项目成交率=有关联审核订单的项目数÷项目总数×100%" placement="top">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                    </p>
+                  </div>
+                </div>
+                <div class="data-right">
+                  <div class="data-item" v-for="item in dataAll.projecttype" :key="item.rowindex">
+                    <p>{{ tool.formatAmount(item.qty) }}</p>
+                    <p>
+                      {{ item.value }}
+                      <el-tooltip class="item" effect="dark" content="无分类客户数:统计没有客户分类信息的客户数量" placement="top" v-if="item.value == '无分类客户'">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                      <el-tooltip class="item" effect="dark" content="A核心客户:客户分类为A核心客户的数量" placement="top" v-else-if="item.value == 'A核心客户'">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                      <el-tooltip class="item" effect="dark" content="B重要客户:客户分类为B重要客户的数量" placement="top" v-else-if="item.value == 'B重要客户'">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                      <el-tooltip class="item" effect="dark" content="C普通客户:客户分类为C普通客户的数量" placement="top" v-else-if="item.value == 'C普通客户'">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                      <el-tooltip class="item" effect="dark" content="D一般客户:客户分类为D一般客户的数量" placement="top" v-else-if="item.value == 'D一般客户'">
+                        <i class="el-icon-warning-outline"></i>
+                      </el-tooltip>
+                    </p>
+                  </div>
+                </div>
+              </div>
+              
+            </div>
+            <!--项目类型-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">项目类型分析</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="typeTableParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {typeMapParam.content.type=1;typeMapParam.content.dataid=$event[$event.length - 1];typeTableParam.content.type=1;typeTableParam.content.dataid=$event[$event.length - 1];typeTableParam.content.username='';$refs.typeTable.listData();typeInit()} else {typeMapParam.content.type='';typeMapParam.content.dataid='';typeTableParam.content.dataid='';typeTableParam.content.type='';typeTableParam.content.username='';$refs.typeTable.listData();typeInit()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="typeTableParam.content.username" filterable placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {typeMapParam.content.type=0;typeMapParam.content.dataid=$event;typeTableParam.content.type=0;typeTableParam.content.dataid=$event;typeTableParam.content.depname='';$refs.typeTable.listData();typeInit()} else {typeMapParam.content.type='';typeMapParam.content.dataid='';typeTableParam.content.dataid='';typeTableParam.content.type='';typeTableParam.content.depname='';$refs.typeTable.listData();typeInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                </div>
+              </div>
+              <div class="panel-content">
+                <div ref="typeEl" style="width:430rem"></div>
+                <div class="panel-table" style="width:1151rem;">
+                  <pageTable
+                    ref="typeTable"
+                    :tablecols="tool.tabelCol($route.name).projectTable.tablecols"
+                    :param="typeTableParam"
+                    :custom="true"
+                    fixedName="operation"
+                  >
+                    <template v-slot:custom="scope">
+                      <div v-if="scope.data.columnname == 'sys_tag'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'operation'">
+                        <el-button type="text" size="small" @click="goDetail(scope.data.data)">详情</el-button>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'signamount_due'">
+                        {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'industry'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'tradingstatus'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'status'">
+                        <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'scale'">
+                        {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
+                      </div>
+                      <div v-else>
+                        {{ scope.data.data[scope.data.columnname] }}
+                      </div>
+                    </template>
+                  </pageTable>
+                </div>
+              </div>
+            </div>
+            <!--项目等级分析-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">项目等级分析</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="gradTableParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {gradMapParam.content.type=1;gradMapParam.content.dataid=$event[$event.length - 1];gradTableParam.content.type=1;gradTableParam.content.dataid=$event[$event.length - 1];gradTableParam.content.username='';$refs.gradTable.listData();gradInit()} else {gradMapParam.content.type='';gradMapParam.content.dataid='';gradTableParam.content.dataid='';gradTableParam.content.type='';gradTableParam.content.username='';$refs.gradTable.listData();gradInit()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="gradTableParam.content.username" filterable placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {gradMapParam.content.type=0;gradMapParam.content.dataid=$event;gradTableParam.content.type=0;gradTableParam.content.dataid=$event;gradTableParam.content.depname='';$refs.gradTable.listData();gradInit()} else {gradMapParam.content.type='';gradMapParam.content.dataid='';gradTableParam.content.dataid='';gradTableParam.content.type='';gradTableParam.content.depname='';$refs.gradTable.listData();gradInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                </div>
+              </div>
+              <div class="panel-content">
+                <div ref="gradEl" style="width:430rem"></div>
+                <div class="panel-table" style="width:1151rem">
+                  <pageTable
+                    ref="gradTable"
+                    :tablecols="tool.tabelCol($route.name).projectTable.tablecols"
+                    :param="gradTableParam"
+                    :custom="true"
+                    fixedName="operation"
+                  >
+                    <template v-slot:custom="scope">
+                      <div v-if="scope.data.columnname == 'sys_tag'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'operation'">
+                        <el-button type="text" size="small" @click="goDetail(scope.data.data)">详情</el-button>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'signamount_due'">
+                        {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'industry'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'tradingstatus'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'status'">
+                        <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'scale'">
+                        {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
+                      </div>
+                      <div v-else>
+                        {{ scope.data.data[scope.data.columnname] }}
+                      </div>
+                    </template>
+                  </pageTable>
+                </div>
+              </div>
+            </div>
+            <!--项目评估分析-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">项目评估分析</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="scoreTableParam1.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {scoreMapParam1.content.type=1;scoreMapParam1.content.dataid=$event[$event.length - 1];scoreTableParam1.content.type=1;scoreTableParam1.content.dataid=$event[$event.length - 1];scoreTableParam1.content.username='';$refs.scoreTable.listData();scoreInit()} else {scoreMapParam1.content.type='';scoreMapParam1.content.dataid='';scoreTableParam1.content.dataid='';scoreTableParam1.content.type='';scoreTableParam1.content.username='';$refs.scoreTable.listData();scoreInit()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="scoreTableParam1.content.username" filterable placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {scoreMapParam1.content.type=0;scoreMapParam1.content.dataid=$event;scoreTableParam1.content.type=0;scoreTableParam1.content.dataid=$event;scoreTableParam1.content.depname='';$refs.scoreTable.listData();scoreInit()} else {scoreMapParam1.content.type='';gradMapParam.content.dataid='';scoreTableParam1.content.dataid='';scoreTableParam1.content.type='';scoreTableParam1.content.depname='';$refs.scoreTable.listData();scoreInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                </div>
+              </div>
+              <div>
+                <div ref="scoreEl" style="max-height:400px;min-height:100px"></div>
+                <div class="panel-table">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >评估分档位:</label>
+                    <el-select v-model="scoreTableParam1.content.where.taskType" filterable placeholder="请选择" size="small" 
+                    @change="$refs.scoreTable.listData()"
+                    clearable>
+                      <el-option label="全部" value="" />
+                      <el-option label="高分档" value="高分档" />
+                      <el-option label="中分档" value="中分档" />
+                      <el-option label="低分档" value="低分档" />
+                    </el-select>
+                  </div>
+                  <pageTable
+                    ref="scoreTable"
+                    :tablecols="tool.tabelCol($route.name).projectTable2.tablecols.splice(0,tool.tabelCol($route.name).projectTable2.tablecols.length - 1)"
+                    :param="scoreTableParam1"
+                    :custom="true"
+                    fixedName="operation"
+                  >
+                    <template v-slot:custom="scope">
+                      <div v-if="scope.data.columnname == 'sys_tag'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'operation'">
+                        <el-button type="text" size="small" @click="goDetail(scope.data.data)">详情</el-button>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'signamount_due'">
+                        {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'dealamount'">
+                        {{ tool.formatAmount(scope.data.data.dealamount,2,'¥') }}
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'industry'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'tradingstatus'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'status'">
+                        <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'scale'">
+                        {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
+                      </div>
+                      <div v-else>
+                        {{ scope.data.data[scope.data.columnname] }}
+                      </div>
+                    </template>
+                  </pageTable>
+                </div>
+              </div>
+            </div>
+            <!--12月项目新增-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">近12月项目新增分析</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="addParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {addParam.content.type=1;addParam.content.dataid=$event[$event.length - 1];addParam.content.username='';addFun()} else {addParam.content.dataid='';addParam.content.type='';addParam.content.username='';addFun()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="addParam.content.username" filterable placeholder="请选择" size="small" 
+                      @change="$event => {if($event) {addParam.content.type=0;addParam.content.dataid=$event;addParam.content.depname='';addFun()} else {addParam.content.dataid='';addParam.content.type='';addParam.content.depname='';addFun()}}"
+                      clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >分析日期:</label>
+                    <el-date-picker
+                        v-model="addParam.content.enddate"
+                        format="yyyy-MM-dd"
+                        value-format="yyyy-MM-dd"
+                        type="date"
+                        size="small"
+                        placeholder="选择日期"
+                        @change="addFun()">
+                    </el-date-picker>
+                  </div>
+                </div>
+              </div>
+              <div ref="addEl" style="height:400px"></div>
+            </div>
+            <!--12月项目报备-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">近12月项目报备分析</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="baobeiParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {baobeiParam.content.type=1;baobeiParam.content.dataid=$event[$event.length - 1];baobeiParam.content.username='';baobeiFun()} else {baobeiParam.content.dataid='';baobeiParam.content.type='';baobeiParam.content.username='';baobeiFun()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="baobeiParam.content.username" filterable placeholder="请选择" size="small" 
+                      @change="$event => {if($event) {baobeiParam.content.type=0;baobeiParam.content.dataid=$event;baobeiParam.content.depname='';baobeiFun()} else {baobeiParam.content.dataid='';baobeiParam.content.type='';baobeiParam.content.depname='';baobeiFun()}}"
+                      clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >分析日期:</label>
+                    <el-date-picker
+                        v-model="baobeiParam.content.enddate"
+                        format="yyyy-MM-dd"
+                        value-format="yyyy-MM-dd"
+                        type="date"
+                        size="small"
+                        placeholder="选择日期"
+                        @change="baobeiFun()">
+                    </el-date-picker>
+                  </div>
+                </div>
+              </div>
+              <div ref="baobeiEl" style="height:400px"></div>
+            </div>
+            <!--12月项目报价-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">近12月项目报价分析</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="baojiaParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {baojiaParam.content.type=1;baojiaParam.content.dataid=$event[$event.length - 1];baojiaParam.content.username='';baojiaFun()} else {baojiaParam.content.dataid='';baojiaParam.content.type='';baojiaParam.content.username='';baojiaFun()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="baojiaParam.content.username" filterable placeholder="请选择" size="small" 
+                      @change="$event => {if($event) {baojiaParam.content.type=0;baojiaParam.content.dataid=$event;baojiaParam.content.depname='';baojiaFun()} else {baojiaParam.content.dataid='';baojiaParam.content.type='';baojiaParam.content.depname='';baojiaFun()}}"
+                      clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >分析日期:</label>
+                    <el-date-picker
+                        v-model="baojiaParam.content.enddate"
+                        format="yyyy-MM-dd"
+                        value-format="yyyy-MM-dd"
+                        type="date"
+                        size="small"
+                        placeholder="选择日期"
+                        @change="baojiaFun()">
+                    </el-date-picker>
+                  </div>
+                </div>
+              </div>
+              <div ref="baojiaEl" style="height:400px"></div>
+            </div>
+            <!--12月项目跟进-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">近12月项目跟进分析</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="fllowParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {fllowParam.content.type=1;fllowParam.content.dataid=$event[$event.length - 1];fllowParam.content.username='';fllowFun()} else {fllowParam.content.dataid='';fllowParam.content.type='';fllowParam.content.username='';fllowFun()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="fllowParam.content.username" filterable placeholder="请选择" size="small" 
+                      @change="$event => {if($event) {fllowParam.content.type=0;fllowParam.content.dataid=$event;fllowParam.content.depname='';fllowFun()} else {fllowParam.content.dataid='';fllowParam.content.type='';fllowParam.content.depname='';fllowFun()}}"
+                      clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >分析日期:</label>
+                    <el-date-picker
+                        v-model="fllowParam.content.enddate"
+                        format="yyyy-MM-dd"
+                        value-format="yyyy-MM-dd"
+                        type="date"
+                        size="small"
+                        placeholder="选择日期"
+                        @change="fllowFun()">
+                    </el-date-picker>
+                  </div>
+                </div>
+              </div>
+              <div ref="fllowEl" style="height:400px"></div>
+            </div>
+            <!--项目跟进情况-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">项目跟进情况统计</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="fllowTableParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {fllowMapParam.content.type=1;fllowMapParam.content.dataid=$event[$event.length - 1];fllowTableParam.content.type=1;fllowTableParam.content.dataid=$event[$event.length - 1];fllowTableParam.content.username='';$refs.projectFllowTable.listData();fllowInit()} else {fllowMapParam.content.type='';fllowMapParam.content.dataid='';fllowTableParam.content.dataid='';fllowTableParam.content.type='';fllowTableParam.content.username='';$refs.projectFllowTable.listData();fllowInit()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="fllowTableParam.content.username" filterable placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {fllowMapParam.content.type=0;fllowMapParam.content.dataid=$event;fllowTableParam.content.type=0;fllowTableParam.content.dataid=$event;fllowTableParam.content.depname='';$refs.projectFllowTable.listData();fllowInit()} else {fllowMapParam.content.type='';fllowMapParam.content.dataid='';fllowTableParam.content.dataid='';fllowTableParam.content.type='';fllowTableParam.content.depname='';$refs.projectFllowTable.listData();fllowInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                </div>
+              </div>
+              <div class="panel-content">
+                <div ref="projectFllowEl" style="width:430rem"></div>
+                <div class="panel-table" style="width:1151rem">
+                  <pageTable
+                    ref="projectFllowTable"
+                    :tablecols="tool.tabelCol($route.name).projectTable.tablecols"
+                    :param="fllowTableParam"
+                    :custom="true"
+                    fixedName="operation"
+                  >
+                    <template v-slot:custom="scope">
+                      <div v-if="scope.data.columnname == 'sys_tag'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'operation'">
+                        <el-button type="text" size="small" @click="goDetail(scope.data.data)">详情</el-button>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'signamount_due'">
+                        {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'industry'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'tradingstatus'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'status'">
+                        <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'scale'">
+                        {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
+                      </div>
+                      <div v-else>
+                        {{ scope.data.data[scope.data.columnname] }}
+                      </div>
+                    </template>
+                  </pageTable>
+                </div>
+              </div>
+            </div>
+            <!--项目联系人情况-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">项目联系人情况统计</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="contactTableParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {contactMapParam.content.type=1;contactMapParam.content.dataid=$event[$event.length - 1];contactTableParam.content.type=1;contactTableParam.content.dataid=$event[$event.length - 1];contactTableParam.content.username='';$refs.projectContactTable.listData();contactInit()} else {contactMapParam.content.type='';contactMapParam.content.dataid='';contactTableParam.content.dataid='';contactTableParam.content.type='';contactTableParam.content.username='';$refs.projectContactTable.listData();contactInit()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="contactTableParam.content.username" filterable placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {contactMapParam.content.type=0;contactMapParam.content.dataid=$event;contactTableParam.content.type=0;contactTableParam.content.dataid=$event;contactTableParam.content.depname='';$refs.projectContactTable.listData();contactInit()} else {contactMapParam.content.type='';contactMapParam.content.dataid='';contactTableParam.content.dataid='';contactTableParam.content.type='';contactTableParam.content.depname='';$refs.projectContactTable.listData();contactInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                </div>
+              </div>
+              <div class="panel-content">
+                <div ref="projectContactEl" style="width:430rem"></div>
+                <div class="panel-table" style="width:1151rem">
+                  <pageTable
+                    ref="projectContactTable"
+                    :tablecols="tool.tabelCol($route.name).projectTable.tablecols"
+                    :param="contactTableParam"
+                    :custom="true"
+                    fixedName="operation"
+                  >
+                    <template v-slot:custom="scope">
+                      <div v-if="scope.data.columnname == 'sys_tag'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'operation'">
+                        <el-button type="text" size="small" @click="goDetail(scope.data.data)">详情</el-button>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'signamount_due'">
+                        {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'industry'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'tradingstatus'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'status'">
+                        <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'scale'">
+                        {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
+                      </div>
+                      <div v-else>
+                        {{ scope.data.data[scope.data.columnname] }}
+                      </div>
+                    </template>
+                  </pageTable>
+                </div>
+              </div>
+            </div>
+            <!--项目关联客户情况-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">项目关联客户情况统计</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="customerTableParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {customerMapParam.content.type=1;customerMapParam.content.dataid=$event[$event.length - 1];customerTableParam.content.type=1;customerTableParam.content.dataid=$event[$event.length - 1];customerTableParam.content.username='';$refs.projectCustomerTable.listData();customerInit()} else {customerMapParam.content.type='';customerMapParam.content.dataid='';customerTableParam.content.dataid='';customerTableParam.content.type='';customerTableParam.content.username='';$refs.projectCustomerTable.listData();customerInit()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="customerTableParam.content.username" filterable placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {customerMapParam.content.type=0;customerMapParam.content.dataid=$event;customerTableParam.content.type=0;customerTableParam.content.dataid=$event;customerTableParam.content.depname='';$refs.projectCustomerTable.listData();customerInit()} else {customerMapParam.content.type='';customerMapParam.content.dataid='';customerTableParam.content.dataid='';customerTableParam.content.type='';customerTableParam.content.depname='';$refs.projectCustomerTable.listData();customerInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                </div>
+              </div>
+              <div class="panel-content">
+                <div ref="projectCustomerEl" style="width:430rem"></div>
+                <div class="panel-table" style="width:1151rem">
+                  <pageTable
+                    ref="projectCustomerTable"
+                    :tablecols="tool.tabelCol($route.name).projectTable.tablecols"
+                    :param="customerTableParam"
+                    :custom="true"
+                    fixedName="operation"
+                  >
+                    <template v-slot:custom="scope">
+                      <div v-if="scope.data.columnname == 'sys_tag'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'operation'">
+                        <el-button type="text" size="small" @click="goDetail(scope.data.data)">详情</el-button>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'signamount_due'">
+                        {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'industry'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'tradingstatus'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'status'">
+                        <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'scale'">
+                        {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
+                      </div>
+                      <div v-else>
+                        {{ scope.data.data[scope.data.columnname] }}
+                      </div>
+                    </template>
+                  </pageTable>
+                </div>
+              </div>
+            </div>
+            <!--项目评估情况-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">项目评估情况统计</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="scoreTableParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {scoreMapParam.content.type=1;scoreMapParam.content.dataid=$event[$event.length - 1];scoreTableParam.content.type=1;scoreTableParam.content.dataid=$event[$event.length - 1];scoreTableParam.content.username='';$refs.projectScoreTable.listData();projectScoreInit()} else {scoreMapParam.content.type='';scoreMapParam.content.dataid='';scoreTableParam.content.dataid='';scoreTableParam.content.type='';scoreTableParam.content.username='';$refs.projectScoreTable.listData();projectScoreInit()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="scoreTableParam.content.username" filterable placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {scoreMapParam.content.type=0;scoreMapParam.content.dataid=$event;scoreTableParam.content.type=0;scoreTableParam.content.dataid=$event;scoreTableParam.content.depname='';$refs.projectScoreTable.listData();projectScoreInit()} else {scoreMapParam.content.type='';scoreMapParam.content.dataid='';scoreTableParam.content.dataid='';scoreTableParam.content.type='';scoreTableParam.content.depname='';$refs.projectScoreTable.listData();projectScoreInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                </div>
+              </div>
+              <div class="panel-content">
+                <div ref="projectScoreEl" style="width:430rem"></div>
+                <div class="panel-table" style="width:1151rem">
+                  <pageTable
+                    ref="projectScoreTable"
+                    :tablecols="tool.tabelCol($route.name).projectTable.tablecols"
+                    :param="scoreTableParam"
+                    :custom="true"
+                    fixedName="operation"
+                  >
+                    <template v-slot:custom="scope">
+                      <div v-if="scope.data.columnname == 'sys_tag'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'operation'">
+                        <el-button type="text" size="small" @click="goDetail(scope.data.data)">详情</el-button>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'signamount_due'">
+                        {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'industry'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'tradingstatus'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'status'">
+                        <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'scale'">
+                        {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
+                      </div>
+                      <div v-else>
+                        {{ scope.data.data[scope.data.columnname] }}
+                      </div>
+                    </template>
+                  </pageTable>
+                </div>
+              </div>
+            </div>
+            <!--有效项目未跟进情况-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">有效项目未跟进天数分析</div>
+                <div class="panel-select">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="unfllowTableParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {unfllowMapParam.content.type=1;unfllowMapParam.content.dataid=$event[$event.length - 1];unfllowTableParam.content.type=1;unfllowTableParam.content.dataid=$event[$event.length - 1];unfllowTableParam.content.username='';$refs.customerUnfllowTable.listData();customerUnfllowInit()} else {unfllowMapParam.content.type='';unfllowMapParam.content.dataid='';unfllowTableParam.content.dataid='';unfllowTableParam.content.type='';unfllowTableParam.content.username='';$refs.customerUnfllowTable.listData();customerUnfllowInit()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >业务员:</label>
+                    <el-select v-model="unfllowTableParam.content.username" filterable placeholder="请选择" size="small" 
+                    @change="$event => {if($event) {unfllowMapParam.content.type=0;unfllowMapParam.content.dataid=$event;unfllowTableParam.content.type=0;unfllowTableParam.content.dataid=$event;unfllowTableParam.content.depname='';$refs.customerUnfllowTable.listData();customerUnfllowInit()} else {unfllowMapParam.content.type='';unfllowMapParam.content.dataid='';unfllowTableParam.content.dataid='';unfllowTableParam.content.type='';unfllowTableParam.content.depname='';$refs.customerUnfllowTable.listData();customerUnfllowInit()}}"
+                    clearable>
+                      <el-option
+                          v-for="item in personnelList"
+                          :key="item.index"
+                          :label="item.name"
+                          :value="item.userid">
+                      </el-option>
+                    </el-select>
+                  </div>
+                </div>
+              </div>
+              <div>
+                <div ref="customerUnfllowEl" style="height:400px"></div>
+                <div style="margin-top:25px">
+                  <pageTable
+                    ref="customerUnfllowTable"
+                    :tablecols="tool.tabelCol($route.name).projectTable1.tablecols.splice(0,tool.tabelCol($route.name).projectTable1.tablecols.length - 1)"
+                    :param="unfllowTableParam"
+                    :custom="true"
+                  >
+                    <template v-slot:custom="scope">
+                      <div v-if="scope.data.columnname == 'sys_tag'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'operation'">
+                        <el-button type="text" size="small" @click="goDetail(scope.data.data)">详情</el-button>
+                      </div>
+                      <div v-else-if="scope.data.columnname == 'signamount_due'">
+                        {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'industry'">
+                        <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'tradingstatus'">
+                        <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else-if="scope.data.columnname === 'status'">
+                        <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                        <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
+                      </div>
+                      <div v-else>
+                        {{ scope.data.data[scope.data.columnname] }}
+                      </div>
+                    </template>
+                  </pageTable>
+                </div>
+              </div>
+            </div>
+            <!--项目生命周期分析-->
+            <div class="data-panel">
+              <div class="panel-header">
+                <div class="title">项目生命周期分析</div>
+              </div>
+              <div class="progress">
+                  <div class="progress-item" :style="[{'--bg':colorArr[index]},{'--width':item.avg}]" v-for="(item,index) in dateList" :key="index">
+                    <div class="day">平均周期:{{ item.dateavg.toFixed(2) }}</div>
+                    <div class="start" v-if="index == 0">
+                      <span>{{ item.start }}</span>
+                      <span v-if="item.end == '立项'">项目立项</span>
+                      <span v-else-if="item.end == '报备'">项目报备审核</span>
+                      <span v-else-if="item.end == '报价'">项目报价审核</span>
+                      <span v-else-if="item.end == '合同'">项目合同审核</span>
+                      <span v-else-if="item.end == '订单'">项目订单审核</span>
+                      <span v-else-if="item.end == '结案'">项目结案</span>
+                    </div>
+                    <div class="end">
+                      <span>{{ item.end }}</span>
+                      <span v-if="item.end == '立项'">项目立项</span>
+                      <span v-else-if="item.end == '报备'">项目报备审核</span>
+                      <span v-else-if="item.end == '报价'">项目报价审核</span>
+                      <span v-else-if="item.end == '合同'">项目合同审核</span>
+                      <span v-else-if="item.end == '订单'">项目订单审核</span>
+                      <span v-else-if="item.end == '结案'">项目结案</span>
+                    </div>
+                  </div>
+                  <div></div>
+              </div>
+              <div class="panel-select" style="margin-top:90px">
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label" >部门:</label>
+                    <el-cascader 
+                      ref="selectdep" 
+                      size="small" 
+                      v-model="dateParam.content.dataid" 
+                      :options="deplist" 
+                      :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  clearable
+                      @change="$event => {if($event.length) {[$event.length - 1];dateParam.content.type=1;dateParam.content.dataid=$event[$event.length - 1];dateParam.content.username='';getDate()} else {dateParam.content.dataid='';dateParam.content.type='';dateParam.content.username='';getDate()}}"></el-cascader>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label">项目类型:</label>
+                    <el-select v-model="dateParam.content.where.projecttype" placeholder="请选择项目类型" @change="getDate" size="small" clearable>
+                      <el-option
+                          v-for="item in projectType"
+                          :key="item.value"
+                          :label="item.value"
+                          :value="item.value">
+                        <span style="float: left">{{ item.value }}</span>
+                        <span style="float: right; color: #8492a6; font-size: 12px">{{ item.remarks?item.remarks:'暂无描述' }}</span>
+                      </el-option>
+                    </el-select>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label">项目等级:</label>
+                    <el-select v-model="dateParam.content.where.grade" placeholder="请选择项目等级" @change="getDate" size="small" clearable>
+                      <el-option
+                          v-for="item in projectLead"
+                          :key="item.value"
+                          :label="item.value"
+                          :value="item.value">
+                        <span style="float: left">{{ item.value }}</span>
+                        <span style="float: right; color: #8492a6; font-size: 12px">{{ item.remarks?item.remarks:'暂无描述' }}</span>
+                      </el-option>
+                    </el-select>
+                  </div>
+                  <div class="mt-10 inline-16">
+                    <label  class="search__label">领域:</label>
+                    <el-select v-model="dateParam.content.where.tradefield" placeholder="请选择领域" @change="getDate" size="small" clearable>
+                      <el-option
+                          v-for="item in tradefieldSelect"
+                          :key="item.value"
+                          :label="item.value"
+                          :value="item.value">
+                        <span style="float: left">{{ item.value }}</span>
+                        <span style="float: right; color: #8492a6; font-size: 12px">{{ item.remarks?item.remarks:'暂无描述' }}</span>
+                      </el-option>
+                    </el-select>
+                  </div>
+              </div>
+              <div class="mt-10 inline-16" style="margin-top:10px">
+                <label  class="search__label" >项目名称:</label>
+                <selectProject :projectType="projectType" :projectLead="projectLead" :tradefieldSelect="tradefieldSelect"  @selectRow="selectRow" ref="selectProject">
+                  <div slot="input" style="display:flex;align-items:center">
+                    <el-input v-model="projectname" style="width:300px" size="small" placeholder="请选择项目" @focus="$refs.selectProject.visible=true"></el-input>
+                    <el-button @click="projectname='';dateParam.content.where.sa_projectid='';getDate()" size="mini" type="text" v-if="dateParam.content.where.sa_projectid">清空</el-button>
+                  </div>
+                </selectProject>
+              </div>
+              <div style="margin-top:10px">
+                <div class="mt-10 inline-16">
+                  <label  class="search__label">开始节点:</label>
+                  <el-select v-model="dateParam.content.begnode" placeholder="开始节点" @change="getDate" size="small" clearable>
+                    <el-option label="立项" value="立项"></el-option>
+                    <el-option label="报备" value="报备"></el-option>
+                    <el-option label="报价" value="报价"></el-option>
+                    <el-option label="合同" value="合同"></el-option>
+                    <el-option label="订单" value="订单"></el-option>
+                    <el-option label="结案" value="结案"></el-option>
+                  </el-select>
+                </div>
+                <span style="margin:0 25px">至</span>
+                <div class="mt-10 inline-16">
+                  <label  class="search__label">结束节点:</label>
+                  <el-select v-model="dateParam.content.endnode" placeholder="结束节点" @change="getDate" size="small" clearable>
+                    <el-option label="立项" value="立项"></el-option>
+                    <el-option label="报备" value="报备"></el-option>
+                    <el-option label="报价" value="报价"></el-option>
+                    <el-option label="合同" value="合同"></el-option>
+                    <el-option label="订单" value="订单"></el-option>
+                    <el-option label="结案" value="结案"></el-option>
+                  </el-select>
+                </div>
+              </div>
+            </div>
+          </div>
+        </el-scrollbar>
+      </div>
+
+    </template>
+  </normalLayout>
+</template>
+
+<script>
+import { DualAxes,Pie,measureTextWidth,Column,Line,Bar  } from '@antv/g2plot'
+import pageTable from './components/pageTable.vue'
+import selectProject from './components/selectProject.vue'
+import borderTemp from '@/HDrpManagement/dataanalysis/components/border.vue'
+export default {
+  components:{borderTemp,pageTable,selectProject},
+  data () {
+    return {
+      colorArr:['#3874f6','#00b32b','#ffae02','#f53f3f','#f2f2f2'],
+      deplist:[],
+      personnelList:[],
+      depmentParam:{
+        "id": 20230620102004,
+        "content": {
+        }
+      },
+      projectType:[],
+      projectLead:[],
+      tradefieldSelect:[],
+      projectname:'',
+      depment:'',
+      dataAll:{
+        data:{}
+      },
+      person:'',
+      //项目类型分析
+      typeMap:'',
+      typeMapParam: {
+        "id": 20231018140404,
+        "content": {
+          "type": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "dataid": '',
+          "where":{
+              "projecttype":""
+          }
+        }
+      },
+      typeTableParam:{
+        "id": 20231019090104,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "where": {
+              // "isfollowup": "", // 有跟进 无跟进 ------项目跟进情况统计列表使用该字段
+              // "grade": "", //  项目等级统计列表使用该字段
+              // "iscontacts": "", //无联系人 有联系人  ------项目联系人情况统计列表使用该字段
+              // "iscustomers": "", //无关联客户 有关联客户  ------项目关联客户情况统计列表使用该字段
+              // "istask":"",// 有评估记录 无评估记录  ------ 项目评估情况统计列表使用该字段
+              "projecttype":""//   项目类型分析统计列表使用该最低端
+          }
+        }
+      },
+      typeData:{
+        map:[],
+      },
+      //项目等级分析
+      gradMap:'',
+      gradMapParam: {
+        "id": 20231018141804,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "where":{
+              "grade":""
+          }
+        }
+      },
+      gradTableParam:{
+        "id": 20231019090104,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "where": {
+              "grade": "", //  项目等级统计列表使用该字段
+          }
+        }
+      },
+      gradData:{
+        map:[],
+      },
+      //项目评估分析
+      scoreMap:'',
+      scoreMapParam1: {
+        "id": 20231024103104,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+        }
+      },
+      scoreTableParam1:{
+        "id": 20231024112004,
+        "content": {
+          "type": "",
+          "dataid": "",
+          "occupancyratio":"",
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "where":{
+              "taskType":""
+          },
+          "pageSize":20,
+          "pageNumber":1
+        }
+      },
+      scoreData:{
+        map:[],
+      },
+      //项目12月新增分析
+      addMap:'',
+      addParam: {
+        "id": 20231018155804,
+        "content": {
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "type": '',
+          "dataid": '',
+          "enddate":`${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`
+        }
+      },
+      addData: {
+        arr1:[],
+        arr2:[]
+      },
+      //项目12月报备分析
+      baobeiMap:'',
+      baobeiParam: {
+        "id": 20231018160504,
+        "content": {
+          "type": '',
+          "enddate":`${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`,
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "dataid": '',
+        }
+      },
+      baobeiData: {
+        arr1:[],
+        arr2:[]
+      },
+      //项目12月跟进分析
+      fllowMap:'',
+      fllowParam: {
+        "id": 20231018163004,
+        "content": {
+          "type": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "enddate":`${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`,
+          "dataid": '',
+        }
+      },
+      fllowData: {
+      },
+      //项目12月报价分析
+      baojiaMap:'',
+      baojiaParam: {
+        "id": 20231018161604,
+        "content": {
+          "type": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "enddate":`${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`,
+          "dataid": '',
+        }
+      },
+      baojiaData: {
+      },
+      //项目跟进分析
+      projectFllowMap:'',
+      fllowMapParam: {
+        "id": 20231019085304,
+        "content": {
+          "type": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "dataid": '',
+          "enddate":`${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`,
+          "where":{
+              "grade":""
+          }
+        }
+      },
+      fllowTableParam:{
+        "id": 20231019090104,
+        "content": {
+          "type": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "dataid": '',
+          "where": {
+              "isfollowup": "", // 有跟进 无跟进 ------项目跟进情况统计列表使用该字段
+          }
+        }
+      },
+      projectFllowData:{
+        map:[],
+      },
+      //项目联系人分析
+      projectFllowMap:'',
+      contactMapParam: {
+        "id": 20231019085404,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "where":{
+              "grade":""
+          }
+        }
+      },
+      contactTableParam:{
+        "id": 20231019090104,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "where": {
+              "iscontacts": "", //无联系人 有联系人  ------项目联系人情况统计列表使用该字段
+          }
+        }
+      },
+      projectContactData:{
+        map:[],
+      },
+      //项目关联客户分析
+      projectCustomerMap:'',
+      customerMapParam: {
+        "id": 20231019085504,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "where":{
+              "iscustomers":""
+          }
+        }
+      },
+      customerTableParam:{
+        "id": 20231019090104,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "where": {
+              "iscustomers": "", //无关联客户 有关联客户  ------项目关联客户情况统计列表使用该字段
+          }
+        }
+      },
+      projectCustomerData:{
+        map:[],
+      },
+      //项目评估分析
+      projectScoreMap:'',
+      scoreMapParam: {
+        "id": 20231019085604,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "where":{
+              "istask":""
+          }
+        }
+      },
+      scoreTableParam:{
+        "id": 20231019090104,
+        "content": {
+          "type": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "dataid": '',
+          "where": {
+              "istask":"",// 有评估记录 无评估记录  ------ 项目评估情况统计列表使用该字段
+          }
+        }
+      },
+      projectScoreData:{
+        map:[],
+      },
+      //未跟进情况
+      customerUnfllowMap:'',
+      unfllowMapParam: {
+        "id": 20231019095804,
+        "content": {
+            "type": '',
+            "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+            "dataid": '',
+            "where": {
+                "projecttype":""
+            }
+        }
+      },
+      unfllowTableParam:{
+        "id": 20231019095904,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "where": {
+              "projecttype":"",
+              "dateType":""
+          }
+        }
+      },
+      customerUnfllowData:{
+        map:[],
+      },
+      //项目周期分析
+      dateParam: {
+        "id": 20231023092304,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
+          "begnode":"",//开始节点
+          "endnode":"",//结束节点
+          "where": {
+            "projecttype": "",//项目类型
+            "grade":"",//项目等级
+            "tradefield":"",//领域
+            "sa_projectid":""//项目id
+          }
+        }
+      },
+      dateList:{}
+    }
+  },
+  methods:{
+    goDetail (data) {
+      this.$router.push({
+        path:'/projectChangeDetail',
+        query:{
+          id:data.sa_projectid,
+        }
+      })
+      this.$store.dispatch('changeDetailDrawer',true)
+    },
+    //获取数据总览
+    async getdataAll () {
+      let res = await this.$api.requested({
+        id:20231018110404,
+        content:{}
+      })
+      this.dataAll = res.data
+      console.log(this.dataAll,'数据总览');
+    },
+    async departmentrtment() {
+      const res = await this.$api.requested(this.depmentParam)
+      this.deplist = this.createMenu(res.data.dep)
+      this.personnelList = res.data.hr
+    },
+    //12月跟进初始化
+    async chart2Fun (init) {
+      let res = await this.$api.requested(this.chartParam2)
+      console.log(res.data,'近12月跟进');
+      this.chartMapData = res.data
+      if (init) {
+        this.chartMap = new DualAxes(this.$refs.chart2, {
+          data: [this.chartMapData.followup, this.chartMapData.tbzzl],
+          xField: 'date',
+          yField: ['value', 'value'],
+          geometryOptions: [
+            {
+              geometry: 'line',
+              seriesField:'key',
+              color: '#5B8FF9',
+            },
+            {
+              geometry: 'line',
+              seriesField:'key',
+              color: '#5AD8A6',
+            },
+          ],
+        });
+
+        this.chartMap.render();
+      } else {
+        this.chartMap.changeData([this.chartMapData.followup, this.chartMapData.tbzzl])
+      }
+    },
+    //项目类型图初始化
+    async typeInit (init) {
+      let res = await this.$api.requested(this.typeMapParam)
+      this.typeData.map = res.data
+      console.log(this.typeData.map,'项目类型数据');
+      if (init) {
+        this.typeMap = new Pie(this.$refs.typeEl, {
+          appendPadding: 10,
+          data:this.typeData.map,
+          angleField: 'qty',
+          colorField: 'key',
+          radius: 1,
+          innerRadius: 0.64,
+          label:{
+            formatter: (datum) => `${(datum.ratio * 100).toFixed(2)}%`
+          },
+          statistic: {
+            title: {
+              offsetY: -4,
+              customHtml: (container, view, datum) => {
+                const { width, height } = container.getBoundingClientRect();
+                const d = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(height / 2, 2));
+                const text = datum ? `${datum.key}` : '项目总数'
+                return this.renderStatistic(d, text, { fontSize: 28 });
+              },
+            },
+            content: {
+              offsetY: 4,
+              style: {
+                fontSize: '32px',
+              },
+              customHtml: (container, view, datum, data) => {
+                const { width } = container.getBoundingClientRect();
+                const text = datum ? `${datum.qty}` : data[0] ? data[0].qty : 0;
+                return this.renderStatistic(width, text, { fontSize: 32 });
+              },
+            },
+          },
+          legend: {
+            position:'left'
+          },
+          // 添加 中心统计文本 交互
+          interactions: [{ type: 'element-single-selected' },{ type: 'element-active' },{ type: 'element-click' }],
+        });
+        this.typeMap.on('element:click',(v) => {
+          if (v.data.data.value != this.typeTableParam.content.where.projecttype) {
+            this.typeTableParam.content.where.projecttype = v.data.data.value
+            this.$refs.typeTable.listData()
+          } else {
+            this.typeTableParam.content.where.projecttype = ''
+            this.$refs.typeTable.listData()
+          }
+        })
+        this.typeMap.render();
+      } else {
+        this.typeMap.changeData(this.typeData.map)
+      }
+      
+    },
+    //项目等级图初始化
+    async gradInit (init) {
+      let res = await this.$api.requested(this.gradMapParam)
+      this.gradData.map = res.data
+      console.log(this.gradData.map,'项目等级数据');
+      if (init) {
+        this.gradMap = new Pie(this.$refs.gradEl, {
+          appendPadding: 10,
+          data:this.gradData.map,
+          angleField: 'qty',
+          colorField: 'key',
+          radius: 1,
+          innerRadius: 0.64,
+          label:{
+            formatter: (datum) => `${(datum.ratio * 100).toFixed(2)}%`
+          },
+          statistic: {
+            title: {
+              offsetY: -4,
+              customHtml: (container, view, datum) => {
+                const { width, height } = container.getBoundingClientRect();
+                const d = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(height / 2, 2));
+                const text = datum ? `${datum.key}` : '项目总数'
+                return this.renderStatistic(d, text, { fontSize: 28 });
+              },
+            },
+            content: {
+              offsetY: 4,
+              style: {
+                fontSize: '32px',
+              },
+              customHtml: (container, view, datum, data) => {
+                const { width } = container.getBoundingClientRect();
+                const text = datum ? `${datum.qty}` : data[0] ? data[0].qty : 0;
+                return this.renderStatistic(width, text, { fontSize: 32 });
+              },
+            },
+          },
+          legend: {
+            position:'left'
+          },
+          // 添加 中心统计文本 交互
+          interactions: [{ type: 'element-selected' },{ type: 'element-active' },{ type: 'element-click' }],
+        });
+        this.gradMap.on('element:click',(v) => {
+          if (v.data.data.key != this.gradTableParam.content.where.grade) {
+            this.gradTableParam.content.where.grade = v.data.data.key
+            this.$refs.gradTable.listData()
+          } else {
+            this.gradTableParam.content.where.grade = ''
+            this.$refs.gradTable.listData()
+          }
+        })
+        this.gradMap.render();
+      } else {
+        this.gradMap.changeData(this.gradData.map)
+      }
+      
+    },
+    //项目评估图初始化
+    async scoreInit (init) {
+      let res = await this.$api.requested(this.scoreMapParam1)
+      this.scoreData.map = res.data
+      console.log(this.scoreData.map,'项目评估数据');
+      if (init) {
+        this.scoreMap = new Bar(this.$refs.scoreEl, {
+          data:this.scoreData.map,
+          xField: 'value',
+          yField: 'key',
+          seriesField: 'key',
+          minBarWidth: 20,
+          maxBarWidth: 40,
+          legend: {
+            position: 'top-left',
+          },
+        });
+        this.scoreMap.render();
+      } else {
+        this.scoreMap.changeData(this.scoreData.map)
+      }
+      
+    },
+    //12月新增初始化
+    async addFun (init) {
+      let res = await this.$api.requested(this.addParam)
+      this.addData.arr1 = res.data.histogram
+      res.data.lineChart.forEach(item => item[`同比增长率(%)`] = item.value)
+      this.addData.arr2 = res.data.lineChart
+      if (init) {
+        this.addMap = new DualAxes(this.$refs.addEl, {
+          data: [this.addData.arr1,this.addData.arr2],
+          xField: 'date',
+          yField: ['value', '同比增长率(%)'],
+          geometryOptions: [
+            {
+              geometry: 'column',
+              isGroup: true,
+              seriesField: 'key',
+            },
+            {
+              geometry: 'line',
+              lineStyle: {
+                lineWidth: 2,
+              },
+            },
+          ],
+        });
+        this.addMap.render()
+      } else {
+        this.addMap.changeData([this.addData.arr1,this.addData.arr2])
+      }
+    },
+    //12月报备初始化
+    async baobeiFun (init) {
+      let res = await this.$api.requested(this.baobeiParam)
+      this.baobeiData.arr1 = res.data.histogram
+      res.data.lineChart.forEach(item => item[`同比增长率(%)`] = item.value)
+      this.baobeiData.arr2 = res.data.lineChart
+      if (init) {
+        this.baobeiMap = new DualAxes(this.$refs.baobeiEl, {
+          data: [this.baobeiData.arr1,this.baobeiData.arr2],
+          xField: 'date',
+          yField: ['value', '同比增长率(%)'],
+          geometryOptions: [
+            {
+              geometry: 'column',
+              isGroup: true,
+              seriesField: 'key',
+            },
+            {
+              geometry: 'line',
+              lineStyle: {
+                lineWidth: 2,
+              },
+            },
+          ],
+        });
+        this.baobeiMap.render()
+      } else {
+        this.baobeiMap.changeData([this.baobeiData.arr1,this.baobeiData.arr2])
+      }
+    },
+    //12月跟进初始化
+    async fllowFun (init) {
+      let res = await this.$api.requested(this.fllowParam)
+      this.fllowData = res.data
+      console.log(res.data,'跟进数据');
+      if (init) {
+        this.fllowMap = new DualAxes(this.$refs.fllowEl, {
+          data: [this.fllowData.followup, this.fllowData.tbzzl],
+          xField: 'date',
+          yField: ['value', 'value'],
+          geometryOptions: [
+            {
+              geometry: 'line',
+              seriesField:'key',
+              color: '#5B8FF9',
+            },
+            {
+              geometry: 'line',
+              seriesField:'key',
+              color: '#5AD8A6',
+            },
+          ],
+        })
+        this.fllowMap.render()
+      } else {
+        this.fllowMap.changeData([this.fllowData.followup, this.fllowData.tbzzl])
+      }
+    },
+    //12月报价初始化
+    async baojiaFun (init) {
+      let res = await this.$api.requested(this.baojiaParam)
+      this.baojiaData = res.data
+      console.log(res.data,'报价数据');
+      if (init) {
+        this.baojiaMap = new Line(this.$refs.baojiaEl, {
+          data:this.baojiaData,
+          xField: 'date',
+          yField: 'value',
+          seriesField: 'key',
+          xAxis: {
+            type: 'time',
+          },
+          yAxis: {
+            // label: {
+            //   // 数值格式化为千分位
+            //   formatter: (v) => `${v}`.replace(/\d{1,3}(?=(\d{3})+$)/g, (s) => `${s},`),
+            // },
+          },
+        })
+        this.baojiaMap.render()
+      } else {
+        this.baojiaMap.changeData(this.baojiaData)
+      }
+    },
+    //项目跟进图初始化
+    async fllowInit (init) {
+      let res = await this.$api.requested(this.fllowMapParam)
+      this.projectFllowData.map = res.data
+      console.log(this.projectFllowData.map,'项目跟进数据');
+      if (init) {
+        this.projectFllowMap = new Pie(this.$refs.projectFllowEl, {
+          appendPadding: 10,
+          data:this.projectFllowData.map,
+          angleField: 'value',
+          colorField: 'key',
+          radius: 1,
+          innerRadius: 0.64,
+          label:{
+            formatter: (datum) => `${(datum.ratio * 100).toFixed(2)}%`
+          },
+          statistic: {
+            title: {
+              offsetY: -4,
+              customHtml: (container, view, datum) => {
+                const { width, height } = container.getBoundingClientRect();
+                const d = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(height / 2, 2));
+                const text = datum ? `${datum.key}` : '项目总数'
+                return this.renderStatistic(d, text, { fontSize: 28 });
+              },
+            },
+            content: {
+              offsetY: 4,
+              style: {
+                fontSize: '32px',
+              },
+              customHtml: (container, view, datum, data) => {
+                const { width } = container.getBoundingClientRect();
+                const text = datum ? `${datum.value}` : data[0] ? data[0].totalqty : 0;
+                return this.renderStatistic(width, text, { fontSize: 32 });
+              },
+            },
+          },
+          legend: {
+            position:'left'
+          },
+          // 添加 中心统计文本 交互
+          interactions: [{ type: 'element-selected' },{ type: 'element-active' },{ type: 'element-click' }],
+        });
+        this.projectFllowMap.on('element:click',(v) => {
+          if (v.data.data.value != this.fllowTableParam.content.where.isfollowup) {
+            this.fllowTableParam.content.where.isfollowup = v.data.data.value
+            this.$refs.projectFllowTable.listData()
+          } else {
+            this.fllowTableParam.content.where.isfollowup = ''
+            this.$refs.projectFllowTable.listData()
+          }
+        })
+        this.projectFllowMap.render();
+      } else {
+        this.projectFllowMap.changeData(this.projectFllowData.map)
+      }
+      
+    },
+    //项目联系人图初始化
+    async contactInit (init) {
+      let res = await this.$api.requested(this.contactMapParam)
+      this.projectContactData.map = res.data
+      console.log(this.projectContactData.map,'项目联系人数据');
+      if (init) {
+        this.projectContactMap = new Pie(this.$refs.projectContactEl, {
+          appendPadding: 10,
+          data:this.projectContactData.map,
+          angleField: 'value',
+          colorField: 'key',
+          radius: 1,
+          innerRadius: 0.64,
+          label:{
+            formatter: (datum) => `${(datum.ratio * 100).toFixed(2)}%`
+          },
+          statistic: {
+            title: {
+              offsetY: -4,
+              customHtml: (container, view, datum) => {
+                const { width, height } = container.getBoundingClientRect();
+                const d = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(height / 2, 2));
+                const text = datum ? `${datum.key}` : '项目总数'
+                return this.renderStatistic(d, text, { fontSize: 28 });
+              },
+            },
+            content: {
+              offsetY: 4,
+              style: {
+                fontSize: '32px',
+              },
+              customHtml: (container, view, datum, data) => {
+                const { width } = container.getBoundingClientRect();
+                const text = datum ? `${datum.value}` : data[0] ? data[0].totalqty : 0;
+                return this.renderStatistic(width, text, { fontSize: 32 });
+              },
+            },
+          },
+          legend: {
+            position:'left'
+          },
+          // 添加 中心统计文本 交互
+          interactions: [{ type: 'element-selected' },{ type: 'element-active' },{ type: 'element-click' }],
+        });
+        this.projectContactMap.on('element:click',(v) => {
+          if (v.data.data.key != this.contactTableParam.content.where.iscontacts) {
+            this.contactTableParam.content.where.iscontacts = v.data.data.key
+            this.$refs.projectContactTable.listData()
+          } else {
+            this.contactTableParam.content.where.iscontacts = ''
+            this.$refs.projectContactTable.listData()
+          }
+        })
+        this.projectContactMap.render();
+      } else {
+        this.projectContactMap.changeData(this.projectContactData.map)
+      }
+      
+    },
+    //项目关联客户图初始化
+    async customerInit (init) {
+      let res = await this.$api.requested(this.customerMapParam)
+      this.projectCustomerData.map = res.data
+      console.log(this.projectCustomerData.map,'项目关联客户数据');
+      if (init) {
+        this.projectCustomerMap = new Pie(this.$refs.projectCustomerEl, {
+          appendPadding: 10,
+          data:this.projectCustomerData.map,
+          angleField: 'value',
+          colorField: 'key',
+          radius: 1,
+          innerRadius: 0.64,
+          label:{
+            formatter: (datum) => `${(datum.ratio * 100).toFixed(2)}%`
+          },
+          statistic: {
+            title: {
+              offsetY: -4,
+              customHtml: (container, view, datum) => {
+                const { width, height } = container.getBoundingClientRect();
+                const d = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(height / 2, 2));
+                const text = datum ? `${datum.key}` : '项目总数'
+                return this.renderStatistic(d, text, { fontSize: 28 });
+              },
+            },
+            content: {
+              offsetY: 4,
+              style: {
+                fontSize: '32px',
+              },
+              customHtml: (container, view, datum, data) => {
+                const { width } = container.getBoundingClientRect();
+                const text = datum ? `${datum.value}` : data[0] ? data[0].totalqty : 0;
+                return this.renderStatistic(width, text, { fontSize: 32 });
+              },
+            },
+          },
+          legend: {
+            position:'left'
+          },
+          // 添加 中心统计文本 交互
+          interactions: [{ type: 'element-selected' },{ type: 'element-active' },{ type: 'element-click' }],
+        });
+        this.projectCustomerMap.on('element:click',(v) => {
+          if (v.data.data.key != this.customerTableParam.content.where.iscustomers) {
+            this.customerTableParam.content.where.iscustomers = v.data.data.key
+            this.$refs.projectCustomerTable.listData()
+          } else {
+            this.customerTableParam.content.where.iscustomers = ''
+            this.$refs.projectCustomerTable.listData()
+          }
+        })
+        this.projectCustomerMap.render();
+      } else {
+        this.projectCustomerMap.changeData(this.projectCustomerData.map)
+      }
+      
+    },
+    //项目评估图初始化
+    async projectScoreInit (init) {
+      let res = await this.$api.requested(this.scoreMapParam)
+      this.projectScoreData.map = res.data
+      console.log(this.projectScoreData.map,'项目评估数据');
+      if (init) {
+        this.projectScoreMap = new Pie(this.$refs.projectScoreEl, {
+          appendPadding: 10,
+          data:this.projectScoreData.map,
+          angleField: 'value',
+          colorField: 'key',
+          radius: 1,
+          innerRadius: 0.64,
+          label:{
+            formatter: (datum) => `${(datum.ratio * 100).toFixed(2)}%`
+          },
+          statistic: {
+            title: {
+              offsetY: -4,
+              customHtml: (container, view, datum) => {
+                const { width, height } = container.getBoundingClientRect();
+                const d = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(height / 2, 2));
+                const text = datum ? `${datum.key}` : '项目总数'
+                return this.renderStatistic(d, text, { fontSize: 28 });
+              },
+            },
+            content: {
+              offsetY: 4,
+              style: {
+                fontSize: '32px',
+              },
+              customHtml: (container, view, datum, data) => {
+                const { width } = container.getBoundingClientRect();
+                const text = datum ? `${datum.value}` : data[0] ? data[0].totalqty : 0;
+                return this.renderStatistic(width, text, { fontSize: 32 });
+              },
+            },
+          },
+          legend: {
+            position:'left'
+          },
+          // 添加 中心统计文本 交互
+          interactions: [{ type: 'element-selected' },{ type: 'element-active' },{ type: 'element-click' }],
+        });
+        this.projectScoreMap.on('element:click',(v) => {
+          if (v.data.data.key != this.scoreTableParam.content.where.istask) {
+            this.scoreTableParam.content.where.istask = v.data.data.key
+            this.$refs.projectScoreTable.listData()
+          } else {
+            this.scoreTableParam.content.where.istask = ''
+            this.$refs.projectScoreTable.listData()
+          }
+        })
+        this.projectScoreMap.render();
+      } else {
+        this.projectScoreMap.changeData(this.projectScoreData.map)
+      }
+      
+    },
+    async getDate () {
+      let res = await this.$api.requested(this.dateParam)
+      this.dateList = res.data
+      console.log(this.dateList,'周期数据');
+    },
+    //项目未跟进情况图初始化
+    async customerUnfllowInit (init) {
+      let res = await this.$api.requested(this.unfllowMapParam)
+      this.customerUnfllowData.map = res.data
+      console.log(this.customerUnfllowData,'未跟进数据');
+      if (init) {
+        this.customerUnfllowMap = new Column(this.$refs.customerUnfllowEl, {
+          data:this.customerUnfllowData.map,
+          isGroup: true,
+          xField: 'datetype',
+          yField: 'value',
+          seriesField: 'key',
+          /** 设置颜色 */
+          //color: ['#1ca9e6', '#f88c24'],
+          /** 设置间距 */
+          // marginRatio: 0.1,
+          label: {
+            // 可手动配置 label 数据标签位置
+            position: 'middle', // 'top', 'middle', 'bottom'
+            // 可配置附加的布局方法
+            layout: [
+              // 柱形图数据标签位置自动调整
+              { type: 'interval-adjust-position' },
+              // 数据标签防遮挡
+              { type: 'interval-hide-overlap' },
+              // 数据标签文颜色自动调整
+              { type: 'adjust-color' },
+            ],
+          },
+        });
+        this.customerUnfllowMap.render()
+      } else {
+        this.customerUnfllowMap.changeData(this.customerUnfllowData.map)
+      }
+      
+    },
+    renderStatistic(containerWidth, text, style) {
+      const textWidth = measureTextWidth(text, style);
+      const textHeight = style.lineHeight || style.fontSize
+      const R = containerWidth / 2;
+      // r^2 = (w / 2)^2 + (h - offsetY)^2
+      let scale = 1;
+      if (containerWidth < textWidth) {
+        scale = Math.min(Math.sqrt(Math.abs(Math.pow(R, 2) / (Math.pow(textWidth / 2, 2) + Math.pow(textHeight, 2)))), 1);
+      }
+      const textStyleStr = `width:${containerWidth}px;`;
+      return `<div style="${textStyleStr};font-size:${scale}em;line-height:${scale < 1 ? 1 : 'inherit'};">${text}</div>`;
+    },
+    createMenu (array) {
+      var that = this
+      let arr = []
+      function convertToElementTree(node) {
+        // 新节点
+        if (node.subdep.length === 0){
+          var elNode = {
+            label: node["depname"],
+            parentid:node['parentid'],
+            parentname:node['parentname'],
+            departmentid:node["departmentid"],
+            value:node["departmentid"],
+            remarks:node["remarks"],
+            isused:node["isused"],
+            changedate:node['changedate'],
+            changeby:node['changeby'],
+            createdate:node['createdate'],
+            createby:node['createby'],
+            depno:node['depno'],
+            disabled:that.pageOnlyRead,
+          }
+        }else {
+          var elNode = {
+            label: node["depname"],
+            parentid:node['parentid'],
+            parentname:node['parentname'],
+            departmentid:node["departmentid"],
+            value:node["departmentid"],
+            remarks:node["remarks"],
+            isused:node["isused"],
+            changedate:node['changedate'],
+            changeby:node['changeby'],
+            createdate:node['createdate'],
+            createby:node['createby'],
+            depno:node['depno'],
+            disabled:that.pageOnlyRead,
+            children: []
+          }
+        }
+        if (node.subdep && node.subdep.length > 0) {
+          // 如果存在子节点
+          for (var index = 0; index < node.subdep.length; index++) {
+            // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
+            elNode.children.push(convertToElementTree(node.subdep[index]));
+          }
+        }
+        return elNode;
+      }
+      array.forEach((element) => {
+        arr.push(convertToElementTree(element))
+      });
+      return arr
+    },
+    selectDep (val) {
+      let id = val[val.length - 1]
+      if (val.length) {
+        this.typeMapParam.content.dataid = id
+        this.typeMapParam.content.type = 1
+        this.typeInit()
+        this.typeTableParam.content.dataid = id
+        this.typeTableParam.content.type = 1
+        this.typeTableParam.content.username = ''
+        this.$refs.typeTable.listData()
+
+        this.gradMapParam.content.dataid = id
+        this.gradMapParam.content.type = 1
+        this.gradInit()
+        this.gradTableParam.content.dataid = id
+        this.gradTableParam.content.type = 1
+        this.gradTableParam.content.username = ''
+        this.$refs.gradTable.listData()
+
+        this.scoreMapParam1.content.dataid = id
+        this.scoreMapParam1.content.type = 1
+        this.scoreInit()
+        this.scoreTableParam1.content.dataid = id
+        this.scoreTableParam1.content.type = 1
+        this.scoreTableParam1.content.username = ''
+        this.$refs.scoreTable.listData()
+
+        this.addParam.content.dataid = id
+        this.addParam.content.type = 1
+        this.addFun()
+
+        this.baobeiParam.content.dataid = id
+        this.baobeiParam.content.type = 1
+        this.baojiaFun()
+
+        this.fllowParam.content.dataid = id
+        this.fllowParam.content.type = 1
+        this.fllowFun()
+
+        this.baojiaParam.content.dataid = id
+        this.baojiaParam.content.type = 1
+        this.baojiaFun()
+
+        this.fllowMapParam.content.dataid = id
+        this.fllowMapParam.content.type = 1
+        this.fllowInit()
+        this.fllowTableParam.content.dataid = id
+        this.fllowTableParam.content.type = 1
+        this.fllowTableParam.content.username = ''
+        this.$refs.projectFllowTable.listData()
+
+        this.contactMapParam.content.dataid = id
+        this.contactMapParam.content.type = 1
+        this.contactInit()
+        this.contactTableParam.content.dataid = id
+        this.contactTableParam.content.type = 1
+        this.contactTableParam.content.username = ''
+        this.$refs.projectContactTable.listData()
+
+        this.customerMapParam.content.dataid = id
+        this.customerMapParam.content.type = 1
+        this.customerInit()
+        this.customerTableParam.content.dataid = id
+        this.customerTableParam.content.type = 1
+        this.customerTableParam.content.username = ''
+        this.$refs.projectCustomerTable.listData()
+
+        this.scoreMapParam.content.dataid = id
+        this.scoreMapParam.content.type = 1
+        this.scoreInit()
+        this.scoreTableParam.content.dataid = id
+        this.scoreTableParam.content.type = 1
+        this.scoreTableParam.content.username = ''
+        this.$refs.projectScoreTable.listData()
+
+        this.unfllowMapParam.content.dataid = id
+        this.unfllowMapParam.content.type = 1
+        this.customerUnfllowInit()
+        this.unfllowTableParam.content.dataid = id
+        this.unfllowTableParam.content.type = 1
+        this.unfllowTableParam.content.username = ''
+        this.$refs.customerUnfllowTable.listData()
+      } else {
+        this.typeMapParam.content.dataid = ''
+        this.typeMapParam.content.type = ''
+        this.typeInit()
+        this.typeTableParam.content.dataid = ''
+        this.typeTableParam.content.type = ''
+        this.typeTableParam.content.username = ''
+        this.$refs.typeTable.listData()
+
+        this.gradMapParam.content.dataid = ''
+        this.gradMapParam.content.type = ''
+        this.gradInit()
+        this.gradTableParam.content.dataid = ''
+        this.gradTableParam.content.type = ''
+        this.gradTableParam.content.username = ''
+        this.$refs.gradTable.listData()
+
+        this.scoreMapParam1.content.dataid = ''
+        this.scoreMapParam1.content.type = ''
+        this.scoreInit()
+        this.scoreTableParam1.content.dataid = ''
+        this.scoreTableParam1.content.type = ''
+        this.scoreTableParam1.content.username = ''
+        this.$refs.scoreTable.listData()
+
+        this.addParam.content.dataid = ''
+        this.addParam.content.type = ''
+        this.addFun()
+
+        this.baobeiParam.content.dataid = ''
+        this.baobeiParam.content.type = ''
+        this.baojiaFun()
+
+        this.fllowParam.content.dataid = ''
+        this.fllowParam.content.type = ''
+        this.fllowFun()
+
+        this.baojiaParam.content.dataid = ''
+        this.baojiaParam.content.type = ''
+        this.baojiaFun()
+
+        this.fllowMapParam.content.dataid = ''
+        this.fllowMapParam.content.type = ''
+        this.fllowInit()
+        this.fllowTableParam.content.dataid = ''
+        this.fllowTableParam.content.type = ''
+        this.fllowTableParam.content.username = ''
+        this.$refs.projectFllowTable.listData()
+
+        this.contactMapParam.content.dataid = ''
+        this.contactMapParam.content.type = ''
+        this.contactInit()
+        this.contactTableParam.content.dataid = ''
+        this.contactTableParam.content.type = ''
+        this.contactTableParam.content.username = ''
+        this.$refs.projectContactTable.listData()
+
+        this.customerMapParam.content.dataid = ''
+        this.customerMapParam.content.type = ''
+        this.customerInit()
+        this.customerTableParam.content.dataid = ''
+        this.customerTableParam.content.type = ''
+        this.customerTableParam.content.username = ''
+        this.$refs.projectCustomerTable.listData()
+
+        this.scoreMapParam.content.dataid = ''
+        this.scoreMapParam.content.type = ''
+        this.scoreInit()
+        this.scoreTableParam.content.dataid = ''
+        this.scoreTableParam.content.type = ''
+        this.scoreTableParam.content.username = ''
+        this.$refs.projectScoreTable.listData()
+
+        this.unfllowMapParam.content.dataid = ''
+        this.unfllowMapParam.content.type = ''
+        this.customerUnfllowInit()
+        this.unfllowTableParam.content.dataid = ''
+        this.unfllowTableParam.content.type = ''
+        this.unfllowTableParam.content.username = ''
+        this.$refs.customerUnfllowTable.listData()
+      }
+    },
+    selectRow (data) {
+      this.projectname = data.projectname
+      this.dateParam.content.where.sa_projectid = data.sa_projectid
+      this.getDate()
+    }
+  },
+  async mounted () {
+    this.departmentrtment()
+    this.getdataAll()
+    this.typeInit(true)
+    this.gradInit(true)
+    this.scoreInit(true)
+    this.addFun(true)
+    this.baobeiFun(true)
+    this.fllowFun(true)
+    this.baojiaFun(true)
+    this.fllowInit(true)
+    this.contactInit(true)
+    this.projectScoreInit(true)
+    this.customerInit(true)
+    this.customerUnfllowInit(true)
+    this.getDate()
+    let baseWidth = 1920
+    document.querySelector('html').style.fontSize = `${100 / baseWidth}vw`
+
+
+    /* 获取项目类型 */
+    let res = await this.$store.dispatch('optiontypeselect','projecttype')
+    this.projectType = res.data
+    /* 获取项目等级 */
+    let res2 = await this.$store.dispatch('optiontypeselect','projectgrade')
+    this.projectLead = res2.data
+    let res3 = await this.$store.dispatch('optiontypeselect','tradefield')
+    this.tradefieldSelect = res3.data
+  }
+}
+
+</script>
+<style>
+.basic__layout__panel {
+  height: 100% !important;
+}
+</style>
+<style scoped>
+
+*{
+  box-sizing: border-box;
+}
+.data-all {
+  padding: 24rem 20rem;
+  width: 100%;
+  border-radius: 5rem;
+  border: 1rem;
+  box-shadow: rgb(136, 136, 136) 0rem 0rem 5rem 0rem;
+  margin-top: 10rem;
+}
+.data-all .data-left {
+  border-right: 1rem solid rgb(136,136,146);
+  display: flex;
+  flex-wrap: wrap;
+}
+.data-all .data-right {
+  padding-left: 50rem;
+  display: flex;
+  flex-wrap: wrap;
+}
+.data-all .data-left,.data-right {
+  display: flex;
+}
+.data-all .data-item {
+  width: 186rem;
+}
+.data-all .data-item p:nth-child(1) {
+  font-size: 26rem;
+  font-weight: bold;
+}
+.data-all .data-item p:nth-child(2) {
+  font-size: 16rem;
+}
+.data-all .data-all-wrapper {
+  display: flex;
+}
+.data-panel {
+  margin-top: 40px;
+}
+.data-panel .panel-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 10px;
+}
+.title {
+  min-width: 220px;
+}
+.title::before {
+  content:'';
+  border-left: 4px #3874f6 solid;
+  padding-right: 10px;
+}
+.panel-content {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+.panel-content div:first-child { 
+  padding: 0 5px;
+}
+.progress {
+  display: flex;
+  width: 100%;
+  padding: 40rem 100rem;
+  height: 50rem;
+  margin-bottom: 60rem;
+}
+.progress .progress-item {
+  flex:var(--width);
+  min-width: 150rem;
+  height: 50rem;
+  position: relative;
+  background:var(--bg);
+}
+.progress .progress-item .day {
+  position: absolute;
+  top: -40rem;
+  left: 50%;
+  font-size: 14rem;
+  transform: translateX(-50%);
+  white-space: nowrap;
+}
+.progress .progress-item .start {
+  position: absolute;
+  left: 0;
+  bottom:-50rem;
+  transform: translateX(-50%);
+}
+.progress .progress-item .end {
+  position: absolute;
+  right:0;
+  bottom:-50rem;
+  transform: translateX(50%);
+}
+.progress .progress-item .start,.end {
+  display: flex;
+  flex-direction: column;
+}
+.progress .progress-item .start,.end span {
+  text-align: center;
+}
+.progress .progress-item .start span:first-child,.end span:first-child {
+  font-size: 14rem;
+}
+.progress .progress-item .start span:last-child,.end span:last-child {
+  margin-top: 10rem;
+  color: #aaaaaa;
+  font-size: 12rem;
+}
+.search__label {
+  margin-right: 5px !important;
+}
+.mt-10 {
+  margin-right: 16px !important;
+}
+</style>

+ 110 - 0
src/HManagement/siteManage/securityConfig/components/projectTarget/add.vue

@@ -0,0 +1,110 @@
+<template>
+  <div>
+    <el-button size="small" type="primary" @click="onShow" style="margin-bottom:10px">新 建</el-button>
+    <el-dialog title="新增" :visible.sync="drawer" width="800px" append-to-body>
+      <div class="drawer__panel">
+        <el-row :gutter="10">
+          <el-form :model="form" ref="ruleForm" :rules="rules" label-width="120px" class="demo-ruleForm"
+                 label-position="right" size="small">
+            <el-col :span="24">
+              <el-form-item label="分类名称:" prop="name">
+                <el-input v-model="form.name"  placeholder="请填写分类名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="分类描述:" prop="remarks">
+                <el-input v-model="form.remarks"  placeholder="请填写分类描述"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="比例(%):" prop="value">
+                <el-input v-model="form.value"  placeholder="请填写比例"></el-input>
+              </el-form-item>
+            </el-col>
+
+          </el-form>
+        </el-row>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button size="small" @click="drawer = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="primary" @click="onSubmit" class="normal-btn-width">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  props:['data'],
+  data () {
+    let checkNumber = (rule, value, callback) => {
+      if (isNaN(+value)) {
+        return callback(new Error('请填写数字'));
+      } else if (+value > 100 || +value < 0) {
+        return callback(new Error('范围1-100'));
+      }
+      callback()
+    }
+    return {
+      tablecols:[],
+      drawer:false,
+      form: {
+        "name": "",
+        "value": "",
+        "remarks": ""
+      },
+      rules: {
+        name:[
+          {required:true,message:'请填写分类名称',trigger:'blur'}
+        ],
+        value:[
+          {required:true,message:'请填写比例',trigger:'blur'},
+          { validator: checkNumber, trigger: 'blur'}
+        ],
+      },
+      
+    }
+  },
+  watch: {
+    drawer (val) {
+      !val && this.$refs.ruleForm.resetFields()
+    }
+  },
+  methods: {
+    onShow () {
+      this.drawer = true
+    },
+    onSubmit () {
+      this.$refs['ruleForm'].validate(async (valid) => {
+        if (!valid) return false
+        let temp = this.data || []
+        this.form.value = this.form.value / 100
+        temp.push(this.form)
+        const res = await this.$api.requested({
+          "classname": "webmanage.site.site",
+          "method": "updateSite_Parameter",
+          "content": {
+              "project_occupancy_ratio": temp
+          },
+        })
+        this.tool.showMessage(res,()=>{
+          this.$emit('onSuccess')
+          this.$refs['ruleForm'].resetFields();
+          this.drawer = false
+        })
+      })
+    }
+  },
+
+}
+
+</script>
+<style scoped>
+.dialog-footer {
+  margin-top: 32px;
+  text-align: center;
+}
+/deep/.el-cascader {
+  width: 100%;
+}
+</style>

+ 117 - 0
src/HManagement/siteManage/securityConfig/components/projectTarget/edit.vue

@@ -0,0 +1,117 @@
+<template>
+  <div>
+    <el-button size="small" type="text" @click="editBtn" style="margin-bottom:10px">编辑</el-button>
+    <el-dialog title="新增" :visible.sync="drawer" width="800px" append-to-body>
+      <div class="drawer__panel">
+        <el-row :gutter="10">
+          <el-form :model="form" ref="ruleForm" :rules="rules" label-width="120px" class="demo-ruleForm"
+                 label-position="right" size="small">
+            <el-col :span="24">
+              <el-form-item label="分类名称:" prop="name">
+                <el-input v-model="form.name"  placeholder="请填写分类名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="分类描述:" prop="remarks">
+                <el-input v-model="form.remarks"  placeholder="请填写分类描述"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="比例(%):" prop="value">
+                <el-input v-model="form.value"  placeholder="请填写比例"></el-input>
+              </el-form-item>
+            </el-col>
+
+          </el-form>
+        </el-row>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button size="small" @click="drawer = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="primary" @click="onSubmit" class="normal-btn-width">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  props:['data','allData'],
+  data () {
+    let checkNumber = (rule, value, callback) => {
+      if (isNaN(+value)) {
+        return callback(new Error('请填写数字'));
+      } else if (+value > 100 || +value < 0) {
+        return callback(new Error('范围1-100'));
+      }
+      callback()
+    }
+    return {
+      tablecols:[],
+      drawer:false,
+      form: {
+        "name": "",
+        "value": "",
+        "remarks": ""
+      },
+      rules: {
+        name:[
+          {required:true,message:'请填写分类名称',trigger:'blur'}
+        ],
+        value:[
+          {required:true,message:'请填写比例',trigger:'blur'},
+          { validator: checkNumber, trigger: 'blur'}
+        ],
+      },
+      index:''
+    }
+  },
+  watch: {
+    drawer (val) {
+      !val && this.$refs.ruleForm.resetFields()
+    }
+  },
+  methods: {
+    editBtn () {
+      for (let index = 0; index < this.allData.length; index++) {
+        if (this.allData[index] == this.data) {
+          this.index = index
+        }
+      }
+      this.form = Object.assign({},this.form,this.data)
+      this.form.value = this.form.value * 100
+      this.drawer = true
+    },
+    onSubmit () {
+      this.$refs['ruleForm'].validate(async (valid) => {
+        if (!valid) return false
+        let temp = this.allData
+        this.form.value = this.form.value / 100
+        temp[this.index] = this.form
+        const res = await this.$api.requested({
+          "classname": "webmanage.site.site",
+          "method": "updateSite_Parameter",
+          "content": {
+              "project_occupancy_ratio": temp
+          },
+        })
+        this.tool.showMessage(res,()=>{
+          this.$emit('onSuccess')
+          this.$refs['ruleForm'].resetFields();
+          this.drawer = false
+        })
+      })
+    }
+  },
+
+}
+
+</script>
+<style scoped>
+.dialog-footer {
+  margin-top: 32px;
+  text-align: center;
+}
+/deep/.el-cascader {
+  width: 100%;
+}
+</style>

+ 104 - 0
src/HManagement/siteManage/securityConfig/components/projectTarget/index.vue

@@ -0,0 +1,104 @@
+<template>
+  <div style="display:inline">
+    <el-button size="small" style="width:120px" type="primary" @click="onShow">设 置</el-button>
+    <el-drawer class="auth-container" title="授权报表列表" append-to-body :visible.sync="dialogTableVisible" size="50%">
+      <div class="container">
+      <Add @onSuccess="addOnsuccess" :data="data"></Add>
+      <el-row>
+        <el-col :span="24">
+          <el-table
+            :header-cell-style="{background:'#EEEEEE',color:'#333'}"
+            :data="data"
+            stripe
+            size="mini"
+            style="width: 100%"
+            border>
+            <el-table-column
+              prop="name"
+              label="分类名称">
+            </el-table-column>
+            <el-table-column
+              prop="remarks"
+              label="分类描述">
+            </el-table-column>
+            <el-table-column
+              prop="value"
+              label="比例">
+              <template slot-scope="scope">
+                {{ scope.row.value * 100 }}%
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="操作">
+              <template slot-scope="scope">
+                <Edit class="inline-16" :allData="data" :data="scope.row" @onSuccess="addOnsuccess"></Edit>
+                <el-button type="text" size="mini" @click="deleteRow(scope.row)">删 除</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-col>
+      </el-row>
+      </div>
+    </el-drawer>
+
+  </div>
+</template>
+
+<script>
+import Add from './add.vue'
+import Edit from './edit.vue'
+export default {
+  props:['data'],
+  components:{Add,Edit},
+  data () {
+    return {
+      dialogTableVisible:false,
+      list:[],
+      total:0,
+      value:'',
+    }
+  },
+  created () {
+
+  },
+  methods:{
+    addOnsuccess () {
+      this.$emit('onSuccess')
+    },
+    onShow () {
+      this.dialogTableVisible = true
+    },
+    async deleteRow (data) {
+      this.$confirm('确认删除当前设置吗?','提示',{
+        confirmButtonText:'确定',
+        cancelButtonText:'取消',
+        type:'warning'
+      }).then(async () => {
+        let temp = this.data.filter(item => {
+          return item.name != data.name
+        })
+        let res = await this.$api.requested({
+          "classname": "webmanage.site.site",
+          "method": "updateSite_Parameter",
+          "content": {
+              "project_occupancy_ratio": temp ? temp : []
+          },
+        })
+        this.tool.showMessage(res,() => {
+          this.$emit('onSuccess')
+        })
+        console.log(temp);
+      })
+    }
+  }
+}
+
+</script>
+<style>
+.auth-container .el-tabs--border-card{
+  box-shadow: none !important;
+}
+.auth-container .el-tabs--border-card>.el-tabs__content{
+  padding: 0;
+}
+</style>

+ 26 - 2
src/HManagement/siteManage/securityConfig/index.vue

@@ -133,6 +133,24 @@
         <projectReportRule v-if="tool.checkAuth($route.name,'projectReportRule')"  @queryRule="queryRule"></projectReportRule>
       </div>
     </div>
+    <div class="panel" style="margin-bottom:16px">
+      <div class="flex-align-center flex-between">
+        <div class="flex-align-stretch">
+          <img width="72" height="72" src="../../../assets/icons/projectTarget.svg" alt="">
+          <div class="text-panel">
+            <p class="explain-title">项目指标分类比例设置</p>
+            <p class="explain-tips">当前设置:
+              <span v-for="(item,index) in project_occupancy_ratio">
+                <span>{{ item.name }}:</span>
+                <span>{{ item.value }}</span>
+                <span v-if="index != item.length">,</span>
+              </span>
+            </p>
+          </div>
+        </div>
+        <projectTarget v-if="tool.checkAuth($route.name,'projectTarget')" @onSuccess="querySite_Parameter" :data="project_occupancy_ratio"></projectTarget>
+      </div>
+    </div>
     <div class="container normal-panel" style="display:flex;justify-content:space-around;border-bottom:none">
       <el-descriptions title="广告位管理"></el-descriptions>
     </div>
@@ -160,6 +178,7 @@ import advertisementMag from '../advertisement_mag/index'
 import customerCheckRule from "@/HManagement/siteManage/securityConfig/modules/customerCheckRule";
 import projectCheckRule from "@/HManagement/siteManage/securityConfig/modules/projectCheckRule";
 import projectReportRule from "@/HManagement/siteManage/securityConfig/modules/projectReportRule";
+import projectTarget from './components/projectTarget/index'
 import {log} from "@antv/g2plot/lib/utils";
 
 export default {
@@ -174,7 +193,8 @@ export default {
     advertisementMag,
     customerCheckRule,
     projectCheckRule,
-    projectReportRule
+    projectReportRule,
+    projectTarget
   },
   data () {
     return {
@@ -185,6 +205,7 @@ export default {
       customerRule:{},
       projectRule:{},
       projectReportRule:{},
+      project_occupancy_ratio:[],
       projectprotectionperiod:'',
       setData:''
     }
@@ -225,6 +246,8 @@ export default {
         loginmode_phonenumber:res.data.loginmode_phonenumber,
         loginmode_wechat:res.data.loginmode_wechat
       }
+      this.project_occupancy_ratio = res.data.project_occupancy_ratio
+      console.log(res.data,'数据2');
       /*this.setData = res.data*/
       this.$refs.messageTips.form = Object.assign({},this.$refs.messageTips.form,res.data)
       this.$refs.changeSite.form = Object.assign({},this.$refs.changeSite.form,res.data)
@@ -274,9 +297,10 @@ export default {
       this.projectRule = res.data.projectcheckrule
       this.projectprotectionperiod = res.data.projectprotectionperiod
       this.projectReportRule = res.data.projectcheckfields
+      console.log(res.data,'数据');
     }
   },
-  mounted () {
+  async mounted () {
     this.infoData()
     this.querySite_Parameter()
     this.queryEnterpriseWatermark()

Plik diff jest za duży
+ 0 - 0
src/assets/icons/projectTarget.svg


+ 20 - 0
src/router/HDrpManagement.js

@@ -1133,6 +1133,26 @@ const HDrpManagement = [
       }
     ]
   },
+  {
+    path: '/customerData',
+    name: 'customerData',
+    meta: {
+      title: '客户数据',
+      ast_nav: true,
+      keeproute: true,
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/HDrpManagement/customerData/index'),
+  },
+  {
+    path: '/projectData',
+    name: 'projectData',
+    meta: {
+      title: '项目数据',
+      ast_nav: true,
+      keeproute: true,
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/HDrpManagement/projectData/index'),
+  },
 
 
 

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików