qymljy 1 rok temu
rodzic
commit
03fe2b14cb

+ 16 - 6
src/HDrpManagement/dataanalysis/index.vue

@@ -1,10 +1,11 @@
 <template>
   <normalLayout>
     <template #refresh>
-      <i class="el-icon-refresh-right" @click="refresh"></i>
+<!--      <el-button icon="el-icon-refresh-right" type="text" size="small" style="color: #606266" @click="refresh" v-loading.fullscreen.lock="fullscreenLoading"></el-button>-->
+      <i class="el-icon-refresh-right" @click="refresh" v-loading.fullscreen.lock="fullscreenLoading"></i>
     </template>
     <template #content>
-      <div style="padding: 20px;">
+      <div style="padding: 20px;" >
         <div class="mt-10">
           <label  class="search__label" >范围:</label>
           <el-popover
@@ -72,6 +73,7 @@ export default {
   name: "index",
   data(){
     return {
+      fullscreenLoading: false,
       tabName: '线索',
       isDep:false,
       isPerson:false,
@@ -128,21 +130,29 @@ export default {
       this.$refs.clue.queryFollow()
     },
     refresh(){
-      this.dataParam.content.type = ''
+      this.fullscreenLoading = true;
+
+     /* this.dataParam.content.type = ''
       this.dataParam.content.dataid = ''
       this.tableParam.content.type = ''
       this.tableParam.content.dataid = ''
       this.range = ''
-      this.dataid = ''
+      this.dataid = ''*/
       this.$refs.assignment.queryList()
       this.$refs.sales.queryList()
       this.$refs.performance.queryList()
-      this.$refs.clue.$refs.quickAdd.select = '周'
+   /*   this.$refs.clue.$refs.quickAdd.select = '周'
       this.$refs.clue.$refs.quickUpd.select = '周'
-      this.$refs.clue.$refs.quickFow.select = '周'
+      this.$refs.clue.$refs.quickFow.select = '周'*/
       this.$refs.clue.queryAdd()
       this.$refs.clue.queryUpdate()
       this.$refs.clue.queryFollow()
+      setTimeout(() => {
+        this.fullscreenLoading = false;
+      }, 2000);
+      /*this.$nextTick(()=>{
+        this.fullscreenLoading = false
+      })*/
     },
     createMenu (array) {
       var that = this

+ 55 - 13
src/HDrpManagement/predictionRule/modules/edit.vue

@@ -66,13 +66,24 @@
                 <label style="font-size: 14px;margin-left: -12px">组织内指定人员:</label>
               </el-col>
               <el-col :span="21" :offset="3">
-                <el-button size="small" style="margin: 10px 0px 10px 0px">添加</el-button>
+                <el-button size="small" style="margin: 10px 0px 10px 0px" @click="visiblePerson = true">添加</el-button>
               </el-col>
               <el-col :span="21" :offset="3">
                 <label style="font-size: 14px;margin-left: -12px">角色:</label>
               </el-col>
               <el-col :span="21" :offset="3">
-                <el-button size="small" style="margin: 10px 0px 10px 0px">添加</el-button>
+                <el-tag closable v-for="item in roleName" :key="item.index" style="margin-right: 10px" @close="handleClose(item)">{{item}}</el-tag>
+                <el-popover placement="bottom"
+                            trigger="manual"
+                            v-model="roleShow">
+                  <el-checkbox-group v-model="checkRole" >
+                    <el-checkbox v-for="item in listRole" :key="item.index" :label="item.roleid" style="display: block; padding-top: 10px" >{{item.remarks}}</el-checkbox>
+                  </el-checkbox-group>
+                  <el-button size="small" type="primary" style="margin-top: 10px;float: right" @click="selectRole">确定</el-button>
+                  <el-button size="small"  style="margin-top: 10px;margin-right:10px;float: right" @click="roleShow = false">取消</el-button>
+                  <el-button slot="reference" size="small" style="margin: 10px 0px 10px 0px" @click="roleShow = !roleShow">添加</el-button>
+                </el-popover>
+
               </el-col>
 
             <el-col :span="24">
@@ -85,6 +96,11 @@
         </el-row>
       </div>
     </el-drawer>
+
+    <el-drawer title="组织内指定人员" :visible.sync="visiblePerson" size="600px" direction="rtl"
+               :show-close="false" append-to-body>
+
+    </el-drawer>
   </div>
 </template>
 
@@ -94,10 +110,18 @@ export default {
   data() {
     return {
       dialogVisible:false,
-      departmentids:['102','106'],
+      visiblePerson:false,
+      departmentids:[],
       deplist:[],
       depData:[],
+      listRole:[],
+      listPerson:[],
+      checkPerson:[],
+      roleShow:false,
       depShow:false,
+      personShow:false,
+      checkRole:[],
+      roleName:[],
       start:'',
       end:'',
       form:{
@@ -159,6 +183,7 @@ export default {
   methods:{
     /*获取已选部门数据*/
     async queryDepartment(){
+      this.departmentids = []
       const res = await this.$api.requested({
         "id": "20230705144404",
         "content": {
@@ -179,19 +204,21 @@ export default {
       console.log(this.$refs.selectdep.getFlattedNodes(),'部门所有可选数据')
       this.departmentids = this.depData.map(item=>{
         return {
-          value:item.departmentid,
+          value:item.value,
         }
       })
-      for (var i=0;i<this.$refs.selectdep.getFlattedNodes().length;i++){
-        for (var k=0;k<this.departmentids.length;k++){
-          if (this.$refs.selectdep.getFlattedNodes()[i].value === this.departmentids[k].value){
-            this.$refs.selectdep.getFlattedNodes()[i].checked = true
+      console.log(this.departmentids,'1111')
+      this.$refs.selectdep.getFlattedNodes().forEach((item,index)=>{
+        console.log(item.value,'node')
+        for (var i=0;i<this.departmentids.length;i++){
+          console.log(this.departmentids)
+          console.log(this.departmentids[i].value,'value')
+          if (item.value === this.departmentids[i].value){
+            item.checked = true
+            break
           }
         }
-      }
-      /*this.departmentids = this.$refs.selectdep.getFlattedNodes()
-
-      this.departmentids[0].checked = true*/
+      })
       console.log(this.departmentids,'departmentids')
     },
     /*获取已选组织内人员*/
@@ -291,7 +318,7 @@ export default {
         "id": "20221102090303",
         "content": {
           "pageNumber": 1,
-          "pageSize": 100,
+          "pageSize": 9999,
           "departmentids":[id],
           "containssub":1,
           "where": {
@@ -300,7 +327,9 @@ export default {
         }
       })
       console.log(res.data,'所有人员')
+      this.listPerson = res.data
     },
+    /*获取所有权限*/
     async roleList(){
       const res = await this.$api.requested({
         "id": "20221101131902",
@@ -313,6 +342,7 @@ export default {
         }
       })
       console.log(res.data,'角色')
+      this.listRole = res.data
     },
     /*选择部门*/
     selectDep(){
@@ -351,6 +381,18 @@ export default {
       }
       console.log(this.depData)
     },
+    selectRole(){
+      this.roleShow = false
+      console.log(this.checkRole)
+      this.roleName = []
+      this.listRole.forEach(item=>{
+        for (var i=0;i<this.checkRole.length;i++){
+          if (item.roleid === this.checkRole[i]){
+            this.roleName.push(item.remarks)
+          }
+        }
+      })
+    },
     onEdit(){
       this.dialogVisible = true
       this.departmentList()

+ 268 - 0
src/HDrpManagement/projectPredictionManage/details/index.vue

@@ -0,0 +1,268 @@
+<template>
+ <div>
+   <newDetails :titleText="mainData.title" :mainAreaData="mainAreaData">
+     <template #bottomLeft>
+       <div style="height: calc(100vh - 180px)">
+         <p>预测单汇总</p>
+         <el-divider></el-divider>
+         <div class="mt-10" style="float: left">
+           <label  class="search__label" >范围:</label>
+           <el-popover
+               placement="bottom"
+               v-model="visible"
+               :stretch="true"
+               trigger="click">
+             <el-tabs v-model="activeName" @tab-click="handleClick">
+               <el-tab-pane label="部门" name="部门">
+                 <el-cascader-panel ref="selectdep" :options="deplist" :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"  @change="selectDep"  clearable></el-cascader-panel>
+               </el-tab-pane>
+               <el-tab-pane label="人员" name="人员">
+                 <el-cascader-panel ref="selectPerson" :options="personnelList" :props="{label:'name',value:'userid'}"   @change="selectPerson"  clearable></el-cascader-panel>
+               </el-tab-pane>
+             </el-tabs>
+             <el-input style="width: 200px" size="small" slot="reference" v-model="range" placeholder="请选择" @input="departmentrtment" @change="onChange" clearable></el-input>
+           </el-popover>
+         </div>
+         <el-button style="float: right" size="small" type="primary" @click="updateData">更新数据</el-button>
+         <tableList :layout="tablecols" :data="list" :opwidth="200" :custom="true"  :height="tableHieght" fixedName="operation">
+           <template v-slot:customcol="scope">
+             <p >{{scope.column.data[scope.column.columnname]?scope.column.data[scope.column.columnname]:'--'}}</p>
+           </template>
+         </tableList>
+       </div>
+     </template>
+     <template #bottomRight>
+       <div style="height: calc(100vh - 1230px);padding: -16px;margin: 0">
+         <p>我的预测单</p>
+         <el-divider></el-divider>
+         <el-descriptions :column="5" size="small">
+           <el-descriptions-item label-class-name="my-label-layout" content-class-name="my-content" v-for="item in myData" :key="item.index" :label="item.label"><span :style="item.style?item.style():''">{{item.value !== ''?item.value:'--'}}</span></el-descriptions-item>
+         </el-descriptions>
+       </div>
+     </template>
+     <template #bottomTabs>
+       <div style="height: calc(100vh - 280px)"></div>
+     </template>
+   </newDetails>
+ </div>
+</template>
+
+<script>
+import newDetails from '@/components/newDetailTemp/index'
+import tableList from '@/components/table/index5'
+export default {
+  name: "index",
+  components:{newDetails,tableList},
+  data(){
+    return {
+      mainAreaData:'',
+      mainData:"",
+      myData:[],
+      tablecols:[],
+      list:[],
+      total:0,
+      currentPage:0,
+      param:{
+        "id": 20230705144804,
+        "content": {
+          "type":1,
+          "dataid":0,
+          "baseonproject":1,
+          "title":""
+        }
+      },
+      isDep:false,
+      isPerson:false,
+      activeName: '部门',
+      dataid:'',
+      range:'',
+      pointValue:'',
+      visible:false,
+      deplist:[],
+      personnelList:[],
+      depmentParam:{
+        "id": 20230620102004,
+        "content": {
+        }
+      },
+    }
+  },
+  methods:{
+    async queryMainData () {
+      const res = await this.$api.requested({
+        "id": 20230705144704,
+        "content": {
+          "sa_salesforecastbillid":this.$route.query.id
+        }
+      })
+      console.log(res.data,'1111')
+      this.mainData = res.data
+      this.changeDataStructure()
+      this.listData()
+      this.departmentrtment()
+    },
+    changeDataStructure () {
+      let that = this
+      this.mainAreaData = [
+        {
+          label:'标题',
+          value: this.mainData.title
+        },
+        {
+          label:'预测时间',
+          value: this.mainData.periodstart + '至' + this.mainData.periodend
+        },
+        {
+          label:'状态',
+          value: this.mainData.status,
+          style: ()=> {
+            let style = {}
+            switch (that.mainData.status) {
+              case '进行中':
+                style = {color:'#00B32B'}
+                break;
+              default:
+                break;
+            }
+            return style
+          }
+        },
+      ]
+      this.myData = [
+        {
+          label:'单号',
+          value: this.mainData.billnum
+        },
+        {
+          label:'预测人',
+          value: this.mainData.name
+        },
+        {
+          label:'预测金额',
+          value: this.tool.formatAmount(this.mainData.projectamount,2)
+        },
+      ]
+    },
+    async listData(){
+      this.param.content.title = this.mainData.title
+      const res = await this.$api.requested(this.param)
+      this.list = res.data.data
+    },
+    async departmentrtment() {
+      const res = await this.$api.requested(this.depmentParam)
+      this.deplist = this.createMenu(res.data.dep)
+      this.personnelList = res.data.hr
+     /* this.range = JSON.parse(window.sessionStorage.getItem('active_account')).name*/
+    },
+    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 dataDep = this.$refs.selectdep.getCheckedNodes(true)[0].data
+      this.range = dataDep.label
+      this.isDep = true
+      this.isPerson = false
+      this.dataid = val[val.length -1]
+      this.param.content.type = 1
+      this.param.content.dataid = this.dataid
+      this.visible = false
+      this.listData()
+      /*this.$refs.selectPerson.clearCheckedNodes()*/
+    },
+    selectPerson(val){
+      let dataperson = this.$refs.selectPerson.getCheckedNodes(true)[0].data
+      this.range = dataperson.name
+      this.isDep = false
+      this.isPerson = true
+
+      this.dataid = val[val.length-1]
+      this.param.content.type = 0
+      this.param.content.dataid = this.dataid
+      this.visible = false
+      this.listData()
+    },
+    handleClick(tab, event) {
+      console.log(tab, event);
+    },
+    updateData(){
+      this.param.content.type = 1
+      this.param.content.dataid = 0
+      this.range = ''
+      this.listData()
+    },
+    onChange(){
+      if (this.range == ''){
+        this.param.content.type = 1
+        this.param.content.dataid = 0
+        this.range = ''
+        this.listData()
+      }
+    }
+  },
+  mounted() {
+    this.queryMainData()
+  },
+  created() {
+    this.tablecols = this.tool.tabelCol(this.$route.name).projectManageTotal.tablecols
+  },
+}
+</script>
+
+<style scoped>
+ /deep/ .el-divider--horizontal {
+         display: block;
+         height: 1px;
+         width: 100%;
+          margin: 10px 0;
+       }
+</style>

+ 99 - 2
src/HDrpManagement/projectPredictionManage/index.vue

@@ -3,15 +3,112 @@
     <basicLayout
         style="padding-top:0 !important"
         ref="basicLayout"
+        tableName="projectManage"
+        idName="sa_salesforecastbillid"
+        :apiId="{query:20230705144604,del:''}"
+        :autoQuery="false"
     >
-
+      <template #custom>
+        <div class="mt-10">
+          <label  class="search__label">状态:</label>
+          <el-select class="inline-24" v-model="selectParam.status" placeholder="请选择状态" @change="selectChange" size="small" clearable>
+            <el-option
+                v-for="item in status"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+            </el-option>
+          </el-select>
+        </div>
+        <div class="mt-10">
+          <label class="search__label" >时间:</label>
+          <el-date-picker
+              style="margin-right: 24px !important;"
+              size="small"
+              @change="selectChange"
+              value-format="yyyy-MM-dd"
+              v-model="dateSelect"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              clearable>
+          </el-date-picker>
+        </div>
+      </template>
+      <template v-slot:tbList="scope">
+        <p v-if="scope.data.column.columnname === 'status'">
+          <span v-if="scope.data.column.data.status === '进行中'" style="color: #00B32B">
+            {{scope.data.column.data[[scope.data.column.columnname]]}}
+          </span>
+          <span v-else>
+            {{scope.data.column.data[[scope.data.column.columnname]]}}
+          </span>
+        </p>
+        <p v-else-if="scope.data.column.columnname === 'period'">
+          {{scope.data.column.data.periodstart + '至' + scope.data.column.data.periodend }}
+        </p>
+        <p v-else-if="scope.data.column.columnname === 'projectamount'">
+          {{tool.formatAmount(scope.data.column.data[[scope.data.column.columnname]],2)}}
+        </p>
+        <p v-else>
+          {{scope.data.column.data[[scope.data.column.columnname]]}}
+        </p>
+      </template>
+      <template v-slot:tbOpreation="scope">
+        <edit v-if="scope.data.data.status === '进行中'" :data="scope.data.data"></edit>
+        <detailsBtn v-else></detailsBtn>
+      </template>
     </basicLayout>
   </div>
 </template>
 
 <script>
+import edit from './modules/edit'
+import detailsBtn from './modules/details'
 export default {
-  name: "index"
+  name: "index",
+  data(){
+    return {
+      dateSelect:'',
+      status:[
+        {
+          value:'进行中',
+          label:'进行中'
+        },
+        {
+          value:'已截止',
+          label:'已截止'
+        }
+      ],
+      selectParam:{
+        status:'',
+        begindate:'',
+        enddate:''
+      }
+    }
+  },
+  components:{edit,detailsBtn},
+  methods:{
+    listData(){
+      this.$refs.basicLayout.param.content.baseonproject = 1
+      this.$refs.basicLayout.listData()
+    },
+    selectChange(){
+      if (this.dateSelect !== '' && this.dateSelect !== null){
+        this.selectParam.begindate = this.dateSelect[0]
+        this.selectParam.enddate = this.dateSelect[1]
+      }else {
+        this.selectParam.begindate = ''
+        this.selectParam.enddate = ''
+      }
+      this.$refs.basicLayout.param.content.where = this.selectParam
+      this.$refs.basicLayout.listData()
+    }
+  },
+  mounted() {
+    this.listData()
+  }
 }
 </script>
 

+ 15 - 0
src/HDrpManagement/projectPredictionManage/modules/details.vue

@@ -0,0 +1,15 @@
+<template>
+  <div>
+    <el-button size="mini" type="text">详 情</el-button>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "details"
+}
+</script>
+
+<style scoped>
+
+</style>

+ 67 - 0
src/HDrpManagement/projectPredictionManage/modules/edit.vue

@@ -0,0 +1,67 @@
+<template>
+  <div>
+    <el-button size="mini" type="text" @click="onShow">编 辑</el-button>
+
+<!--    <el-drawer
+        :visible.sync="drawer"
+        :with-header="false"
+        direction="rtl"
+        size="90%"
+        append-to-body
+        >
+      <div class="detail__panel">
+        <detailsInfo></detailsInfo>
+      </div>
+    </el-drawer>-->
+  </div>
+</template>
+
+<script>
+import detailsInfo from '../details/index'
+export default {
+  name: "edit",
+  props:['data'],
+  components:{detailsInfo},
+  data(){
+    return {
+      drawer:false,
+      mainAreaData:'',
+      mainData:""
+    }
+  },
+  methods:{
+    onShow(){
+      this.drawer = true
+      let query = {id:this.data.sa_salesforecastbillid,rowindex:this.data.rowindex}
+      this.$router.push({path:'/projectManageDetail',query:query})
+      this.$store.dispatch('changeDetailDrawer',true)
+      /*this.queryMainData()*/
+    },
+    async queryMainData () {
+      const res = await this.$api.requested({
+        "id": 20230705144704,
+        "content": {
+          "sa_salesforecastbillid":37
+        }
+      })
+      console.log(res.data,'1111')
+      this.mainData = res.data
+      this.changeDataStructure()
+    },
+    changeDataStructure () {
+      this.mainAreaData = [
+        {
+          label:'标题',
+          value: this.mainData.title
+        },
+      ]
+    }
+  },
+  mounted() {
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 16 - 5
src/HDrpManagement/workReport/modules/aside/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="aside">
     <div class="aside-header">
-      <p>{{ statusParent ? '我收到的' : '我发出的' }}</p>
+      <p>{{ statusParent ? '我收到的('+ total + ')': '我发出的(' + total + ')'}}</p>
       <div class="select-btn" v-if="statusParent">
         <div @click="selectFun('全部')"
           :style="currentStatus=='' ? 'background:#3874F6;color:#ffffff' : 'border:1px solid #cccccc'">全部</div>
@@ -11,9 +11,9 @@
           :style="currentStatus=='1' ? 'background:#3874F6;color:#ffffff' : 'border:1px solid #cccccc'">已读</div>
       </div>
     </div>
-    <div class="list" v-load="load">
+    <div class="list"  v-infinite-scroll="onLoad">
       <div v-if="list.length">
-        <div style="height: calc(100vh - 340px);overflow: auto;" >
+        <div>
           <div
               class="list-item"
               :class="item.readstatus == '未读' ? 'no-read' : ''"
@@ -37,7 +37,9 @@
           </div>
         </div>
 
-        <div class="normal-panel" style="text-align:right">
+
+
+<!--        <div class="normal-panel" style="text-align:right">
           <el-pagination
               background
               @size-change="handleSizeChange"
@@ -49,7 +51,7 @@
               layout="total, prev, pager, next"
               :total="total">
           </el-pagination>
-        </div>
+        </div>-->
       </div>
       <el-empty description="暂无数据" size="mini" v-else></el-empty>
     </div>
@@ -113,6 +115,11 @@ export default {
       const res = await this.$api.requested(this.params)
       this.list = res.data
       this.total = res.total
+      this.totalPage = res.pageTotal
+    },
+    onLoad(){
+      this.params.content.pageSize += 20
+      this.listData()
     },
     load () {
       console.log(this.params.content.pageNumber,this.totalPage);
@@ -140,6 +147,7 @@ export default {
       }
       this.params.content.where.readstatus = this.currentStatus
       this.params.content.pageNumber = 1
+      this.params.content.pageSize = 20
       this.listData()
     },
     handleSizeChange(val) {
@@ -154,6 +162,9 @@ export default {
       this.params.content.pageNumber = val
       this.listData()
     },
+  },
+  created() {
+
   }
 }
 </script>

+ 103 - 0
src/components/newDetailTemp/index.vue

@@ -0,0 +1,103 @@
+<template>
+  <div style="min-width:1200px">
+    <div style="margin:10px 10px 0 10px;border-radius:5px;position:relative" class="container normal-panel sticky" >
+      <div class="flex-align-start flex-between normal-margin" style="flex-wrap:nowrap">
+        <div>
+          <p class="main_title mt-10">{{titleText?titleText:'##'}}</p>
+        </div>
+        <div class="flex-align-center" style="flex: 1 0 auto;  justify-content: flex-end;">
+          <div>
+            <slot name="customOperation"></slot>
+          </div>
+        </div>
+      </div>
+      <div>
+        <el-descriptions :column="5" size="mini">
+          <el-descriptions-item label-class-name="my-label-layout" content-class-name="my-content" v-for="item in mainAData" :key="item.index" :label="item.label"><span :style="item.style?item.style():''">{{item.value !== ''?item.value:'--'}}</span></el-descriptions-item>
+        </el-descriptions>
+      </div>
+    </div>
+    <el-row >
+      <el-col :span="8">
+        <div style="margin:10px 5px 0 10px;border-radius:5px;position:relative" class="container normal-panel sticky" >
+          <slot name="bottomLeft"></slot>
+        </div>
+      </el-col>
+      <el-col :span="16">
+        <div style="margin:10px 10px 0 5px;border-radius:5px;position:relative" class="container normal-panel sticky" >
+          <slot name="bottomRight"></slot>
+        </div>
+        <div style="margin:10px 10px 0 5px;border-radius:5px;position:relative" class="container normal-panel sticky" >
+          <slot name="bottomTabs"></slot>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import {mapGetters} from "vuex";
+
+export default {
+  name: "index",
+  props:["titleText","mainAreaData"],
+  data(){
+    return {
+    }
+  },
+  methods:{
+  },
+  mounted() {
+  },
+  computed:{
+    mainAData () {
+      try {
+        let data = this.mainAreaData.filter(e=>{
+          if(e.label !== '备注') {
+            return e
+          }
+        })
+        return data
+      } catch (error) {
+
+      }
+
+    },
+    mainAData2 () {
+      try {
+        let data = this.mainAreaData.filter(e=>{
+          if(e.label == '备注') {
+            return e
+          }
+        })
+        return data
+      } catch (error) {
+
+      }
+
+    },
+    ...mapGetters({
+      activeApp:"activeApp",
+      svlistData:'svlistData'
+    })
+  },
+
+}
+</script>
+
+<style scoped>
+.sticky{
+  position: sticky;
+  top:0;
+  box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
+}
+.no-wrap{
+  flex-wrap:nowrap !important;
+}
+.main_title{
+  font-size:30px;
+  font-weight:300;
+  margin-right:16px;
+  line-height: 2rem;
+}
+</style>

+ 22 - 0
src/router/HDrpManagement.js

@@ -1059,6 +1059,28 @@ const HDrpManagement = [
     },
     component: () => import(/* webpackChunkName: "about" */ '@/HDrpManagement/predictionRule/index')
   },
+  {
+    path: '/projectPredictionManage',
+    name: 'projectPredictionManage',
+    meta: {
+      title: '项目成交预测管理',
+      ast_nav: true,
+      keeproute: true,
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/HDrpManagement/projectPredictionManage/index'),
+    children: [
+      {
+        path: '/projectManageDetail',
+        name: 'projectPredictionManage',
+        meta: {
+          title: '项目成交预测管理详情',
+          ast_nav: true,
+          keeproute: true,
+        },
+        component: () => import(/* webpackChunkName: "about" */ '@/HDrpManagement/projectPredictionManage/details/index'),
+      }
+    ]
+  },
 
 
 

+ 1 - 1
vue.config.js

@@ -17,7 +17,7 @@ module.exports = {
           target: 'http://61.164.207.46:8000',  // target host*/
           // target: 'http://192.168.3.9:8080',  // target host*!
           // target: 'http://192.168.3.13:8080',  // target host*!
-          // target: 'https://oms.idcgroup.com.cn:8079/',  // target host
+          /*target: 'https://oms.idcgroup.com.cn:8079/',  // target host*/
           // target: 'localhost:8080',  // target host
           ws: true,  // proxy websockets
           changeOrigin: true,  // needed for virtual hosted sites