qymljy há 1 ano atrás
pai
commit
b9a1c1620d

+ 113 - 0
src/HDrpManagement/invoicePredictionManage/index.vue

@@ -0,0 +1,113 @@
+<template>
+  <div>
+    <basicLayout
+        style="padding-top:0 !important"
+        ref="basicLayout"
+        tableName="invoiceManage"
+        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">
+
+      </template>
+    </basicLayout>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "index",
+  data(){
+    return {
+      dateSelect:'',
+      status:[
+        {
+          value:'进行中',
+          label:'进行中'
+        },
+        {
+          value:'已截止',
+          label:'已截止'
+        }
+      ],
+      selectParam:{
+        status:'',
+        begindate:'',
+        enddate:''
+      }
+    }
+  },
+  methods:{
+    listData(){
+      this.$refs.basicLayout.param.content.baseonproject = 0
+      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>
+
+<style scoped>
+
+</style>

+ 15 - 3
src/HDrpManagement/predictionRule/index.vue

@@ -28,17 +28,29 @@
         </p>
       </template>
       <template v-slot:tbOpreation="scope">
-        <edit></edit>
+        <editWeek :data="scope.data.data" v-if="scope.data.data.periodtype == '周'" @onEdit="onEdit"></editWeek>
+        <editMonth :data="scope.data.data" v-if="scope.data.data.periodtype == '月'" @onEdit="onEdit"></editMonth>
       </template>
     </basicLayout>
   </div>
 </template>
 
 <script>
-import edit from './modules/edit'
+import editWeek from './modules/editWeek'
+import editMonth from "@/HDrpManagement/predictionRule/modules/editMonth";
 export default {
   name: "index",
-  components:{edit}
+  components:{editWeek,editMonth},
+  data(){
+    return {
+
+    }
+  },
+  methods:{
+    onEdit(){
+      this.$refs.basicLayout.listData()
+    }
+  }
 }
 </script>
 

+ 141 - 0
src/HDrpManagement/predictionRule/modules/addDepartment.vue

@@ -0,0 +1,141 @@
+<template>
+  <div>
+    <el-popover
+        placement="bottom"
+        width="400"
+        trigger="click"
+        v-model="visible">
+      <el-tree
+          :data="deplist"
+          node-key="id"
+          default-expand-all
+          highlight-current
+          :expand-on-click-node="false"
+          @node-click="nodeClick"
+      >
+                  <span class="custom-tree-node" slot-scope="{ node, data }">
+                    <span>{{ node.label }}</span>
+                    <span>
+                      <el-button size="small" type="text" @click="selectDep(data,visible=false)" v-if="data.departmentid === pointValue" style="color: #FFFFFF">选 择</el-button>
+                      <el-button size="small" type="text" @click="selectDep(data,visible=false)" v-else >选 择</el-button>
+                    </span>
+                  </span>
+      </el-tree>
+<!--      <el-input slot="reference" v-model="form.depname" readonly placeholder="请选择" autocomplete="off"></el-input>-->
+      <el-button slot="reference" size="mini" type="primary" @click="addBtn">添 加</el-button>
+    </el-popover>
+  </div>
+</template>
+
+<script>
+import {mapGetters} from 'vuex'
+import selectTable from '@/components/selectTable/index'
+export default {
+  name: "addDepartment",
+  props:['data'],
+  components:{selectTable},
+  data(){
+    return {
+      visible:false,
+      deplist:[],
+      pointValue:'',
+      list:[],
+      tablecols:[],
+      result:[],
+      params: {
+        "id": "20230619103402",
+        "content": {
+          "sys_workreportmodelid": '',
+          "pageNumber": 1,
+          "pageSize": 20,
+          "where": {
+            "condition": ""
+          }
+        },
+      },
+      total:0,
+    }
+  },
+  methods:{
+    selectDep  (data) {
+      console.log(data,'选择数据')
+      /*let obj = {
+        depname:data.label,
+        departmentid:data.departmentid
+      }
+      this.form = Object.assign({},this.form,obj)*/
+      this.showTree = !this.showTree
+      this.$emit('selectDepartment',data)
+    },
+    nodeClick(val){
+      this.pointValue = val.departmentid
+    },
+    addBtn () {
+      this.department()
+      console.log(this.deplist,'数据111')
+
+      /*this.dialog = true
+      this.listData()*/
+    },
+    async department () {
+      const res = await this.$api.requested({
+        "classname": "webmanage.department.department",
+        "method": "querydepartment",
+        "content": {
+        }
+      })
+      // 数据格式转换成elementui-tree所需的格式
+      this.responseData = res.data
+      console.log(this.responseData,'部门数据')
+      this.deplist = this.createMenu(res.data)
+      // this.$store.dispatch('setDeplistData',this.deplist)
+
+      /*this.$emit('onClick',{data:this.deplist[0],parent:[]})
+      callback?callback():''*/
+      // 如果存在默认组织数据就执行
+    },
+    createMenu (array) {
+      var that = this
+      let arr = []
+      function convertToElementTree(node) {
+        // 新节点
+        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
+    },
+
+
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 122 - 0
src/HDrpManagement/predictionRule/modules/addPeople.vue

@@ -0,0 +1,122 @@
+<template>
+  <div>
+    <el-button size="mini" type="primary" @click="addBtn">添 加</el-button>
+    <el-drawer title="添加人员" append-to-body :show-close="false" :visible.sync="dialog" size="1000px">
+      <div slot="title" style="font-size: 15px">
+        添加人员
+      </div>
+      <div class="drawer__panel">
+        <el-input
+          class="inline-16"
+          style="margin-bottom:10px;width:200px"
+          size="small"
+          suffix-icon="el-icon-search"
+          placeholder="搜索"
+          v-model="params.content.where.condition"
+          @keyup.enter.native="params.content.pageNumber=1;listData()"
+          @clear="params.content.pageNumber=1;listData()" clearable></el-input>
+        <el-button class="inline-16" type="primary" size="mini" @click="allData">一键全选</el-button>
+        <selectTable @selectChange="selectChange" v-if="dialog" idName="hrid" ref="table" v-model="result" :layout="tablecols" :data="list" :custom="true" @upDateData="upDateData">
+           <template v-slot:customcol="scope">
+              <div>{{scope.column.data[scope.column.columnname]}}</div>
+            </template>
+        </selectTable>
+        <div style="margin-top:16px;text-align:right">
+          <el-pagination
+            background
+            small
+            @current-change="handleCurrentChange"
+            :current-page="params.content.pageNumber"
+            :page-size="params.content.pageSize"
+            layout="total, prev, pager, next, jumper"
+            :total="total">
+          </el-pagination>
+        </div>
+      </div>
+      <div class="fixed__btn__panel">
+        <el-button size="small" @click="dialog = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="primary" @click="onSubmit" class="normal-btn-width">确 定</el-button>
+      </div>
+    </el-drawer>
+
+  </div>
+</template>
+
+<script>
+import selectTable from '@/components/selectTable/index'
+export default {
+  name: "add",
+  props:['data','hrids'],
+  components:{selectTable},
+  data(){
+    return {
+      dialog:false,
+      list:[],
+      tablecols:[],
+      result:[],
+      params: {
+        "id": 20230710164104,
+        "content": {
+          "hrids":[],
+          "pageNumber": 1,
+          "pageSize": 20,
+          "where": {
+            "condition": ""
+          }
+        }
+      },
+      total:0,
+    }
+  },
+  methods:{
+    addBtn () {
+      this.dialog = true
+      this.listData()
+    },
+    async listData () {
+      this.params.content.hrids = this.hrids
+      let res = await this.$api.requested(this.params)
+      this.list = res.data
+      this.total = res.total
+      console.log(this.list);
+    },
+    onSubmit(){
+      this.$emit('selectPeople',this.selectPeople)
+      this.dialog = false
+    },
+    async allData () {
+      this.params.content.hrids = this.hrids
+      let param = JSON.parse(JSON.stringify(this.params))
+      param.content.pageSize = 9999999
+      let res = await this.$api.requested(param)
+      this.$confirm(`总共有${res.total}位员工,是否选中`,'提示',{
+        confirmButtonText:'确定',
+        cancelButtonText:'取消',
+        type:'warning'
+      }).then(() => {
+        if (res.data.length) this.$emit('selectPeople',res.data)
+        this.dialog = false
+      })
+    },
+    selectChange (data) {
+      this.selectPeople = data
+    },
+    upDateData (data) {
+      this.selectPeople = data
+    },
+    handleCurrentChange (val) {
+      this.params.content.pageNumber = val
+      this.listData()
+    }
+
+  },
+  created () {
+    this.listData()
+    this.tablecols = this.tool.tabelCol(this.$route.name).reportPeopleTable.tablecols.splice(0,3)
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 71 - 50
src/HDrpManagement/predictionRule/modules/edit.vue → src/HDrpManagement/predictionRule/modules/editCopy.vue

@@ -46,46 +46,42 @@
               <el-form-item label="预测人员:" prop="enterprisename">
               </el-form-item>
             </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-tag closable v-for="item in depData" :key="item.index" style="margin-right: 10px" @close="handleClose(item)">{{item.label}}</el-tag>
-                <el-popover
-                    placement="bottom"
-                    trigger="manual"
-                    v-model="depShow">
-                  <el-cascader-panel  ref="selectdep"  :options="deplist" :props="{checkStrictly:false,multiple:true,expandTrigger:'hover',label:'label',value:'departmentid',children:'children'}" clearable></el-cascader-panel>
-                  <el-button size="small" type="primary" style="margin-top: 10px;float: right" @click="selectDep">确定</el-button>
-                  <el-button size="small"  style="margin-top: 10px;margin-right:10px;float: right" @click="depShow = false">取消</el-button>
-                  <el-button slot="reference" size="small" style="margin: 10px 0px 10px 0px" @click="depShow = !depShow">添加</el-button>
-                </el-popover>
-              </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" @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-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">
+              <div class="report-people" >
+                <div class="report-people_header">
+                  <div class="normal-title" style="font-size:14px;margin-right:10px">部门</div>
+                  <addDepartment @selectDepartment="selectDepartmentFun" v-model="form.hrids"></addDepartment>
+                </div>
+                <el-form-item label-width="20px" prop="hrids">
+                  <el-table
+                      ref="table"
+                      :data="selectDepartment"
+                      style="width: 100%"
+                      size="mini"
+                      v-model="form.hrids"
+                      border>
+                    <el-table-column
+                        prop="depno"
+                        label="编号">
+                    </el-table-column>
+                    <el-table-column
+                        prop="label"
+                        label="部门">
+                    </el-table-column>
+                    <el-table-column
+                        prop="parentname"
+                        label="上级部门">
+                    </el-table-column>
+                    <el-table-column
+                        label="操作">
+                      <template slot-scope="scope">
+                        <el-button type="text" size="mini" @click="delSelecrDepartment(scope.row)">删 除</el-button>
+                      </template>
+                    </el-table-column>
+                  </el-table>
+                </el-form-item>
+              </div>
+            </el-col>
             <el-col :span="24">
               <el-form-item label="状态:" prop="enterprisename" style="margin: 10px 0px 0px 0px">
                 <el-radio v-model="form.status" label="开启">开启</el-radio>
@@ -105,8 +101,11 @@
 </template>
 
 <script>
+import addDepartment from './addDepartment'
 export default {
   name: "edit",
+  props:["data"],
+  components:{addDepartment},
   data() {
     return {
       dialogVisible:false,
@@ -128,39 +127,39 @@ export default {
         "sa_salesforecastmodelid": 2,
         "remarks": "测试",
         "periodpoint": [],
-        "taskdays":[1,4],
-        "sales":[456],
+        "taskdays":[],
+        "sales":[],
         "roles":[],
         "departments":[],
         "status":"开启"
       },
       selectDay:[
         {
-          value:'1',
+          value:1,
           label:'周一'
         },
         {
-          value:'2',
+          value:2,
           label:'周二'
         },
         {
-          value:'3',
+          value:3,
           label:'周三'
         },
         {
-          value:'4',
+          value:4,
           label:'周四'
         },
         {
-          value:'5',
+          value:5,
           label:'周五'
         },
         {
-          value:'6',
+          value:6,
           label:'周六'
         },
         {
-          value:'7',
+          value:7,
           label:'周日'
         },
       ],
@@ -177,7 +176,13 @@ export default {
           value:'次次周',
           label:'次次周'
         },
-      ]
+      ],
+      param:{
+        "id": "20230705144104",
+        "content": {
+          "sa_salesforecastmodelid":''
+        }
+      }
     }
   },
   methods:{
@@ -394,12 +399,28 @@ export default {
       })
     },
     onEdit(){
+      console.log(this.data,'数据')
       this.dialogVisible = true
+      this.queryData()
       this.departmentList()
       this.roleList()
       this.queryDepartment()
       this.queryPerson()
       this.queryRole()
+    },
+    async queryData(){
+      this.param.content.sa_salesforecastmodelid = this.data.sa_salesforecastmodelid
+      const res = await this.$api.requested(this.param)
+      this.form = Object.assign({},this.form,res.data)
+      this.form.periodpoint = JSON.parse(this.form.periodpoint)
+      this.form.taskdays = JSON.parse(this.form.taskdays)
+      this.start = this.form.taskdays[0]
+      this.end = this.form.taskdays[1]
+      console.log(this.form,'form表单数据')
+    },
+    selectDepartmentFun(val){
+      console.log(val)
+      
     }
   },
   mounted() {

+ 514 - 0
src/HDrpManagement/predictionRule/modules/editMonth.vue

@@ -0,0 +1,514 @@
+<template>
+  <div>
+    <el-button size="mini" type="text" @click="onEdit">编 辑</el-button>
+    <el-drawer title="月预测设置" :visible.sync="dialogVisible" size="600px" direction="rtl"
+               :show-close="false" append-to-body @close="onClose">
+      <div class="drawer__panel">
+        <el-row :gutter="20">
+          <el-form :model="form" :rules="rules" ref="form" label-width="120px" label-position="right" size="mini">
+            <el-col :span="24">
+              <el-form-item label="开始时间:" prop="start">
+                <el-select v-model="form.start" placeholder="请选择" style="width: 100%" clearable>
+                  <el-option
+                      v-for="item in selectDay"
+                      :key="item"
+                      :label="item"
+                      :value="item">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="结束时间:" prop="end">
+                <el-select v-model="form.end" placeholder="请选择" style="width: 100%" clearable>
+                  <el-option
+                      v-for="item in selectDay"
+                      :key="item"
+                      :label="item"
+                      :value="item">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="预测周期:" prop="periodpoint">
+                <el-select v-model="form.periodpoint" placeholder="请选择" style="width: 100%" multiple clearable>
+                  <el-option
+                      v-for="item in selectCycle"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="预测人员:" prop="enterprisename">
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" :offset="2">
+              <div class="normal-title inline-16" style="font-size:14px;margin-right:10px" >部门</div>
+              <addDepartment class="inline-16" style="margin-bottom: 10px" @selectDepartment="selectDepartmentFun" ></addDepartment>
+            </el-col>
+            <el-col :span="24" :offset="2">
+                  <el-table
+                      ref="table"
+                      :data="depData"
+                      style="width: 90%"
+                      height="200px"
+                      size="mini"
+                      border>
+                    <el-table-column
+                        prop="depno"
+                        label="编号">
+                    </el-table-column>
+                    <el-table-column
+                        prop="depname"
+                        label="部门">
+                    </el-table-column>
+                    <el-table-column
+                        prop="parentname"
+                        label="上级部门">
+                    </el-table-column>
+                    <el-table-column
+                        label="操作">
+                      <template slot-scope="scope">
+                        <el-button type="text" size="mini" @click="delDepartment(scope.row)">删 除</el-button>
+                      </template>
+                    </el-table-column>
+                  </el-table>
+            </el-col>
+            <el-col :span="24" :offset="2" style="margin-top: 20px">
+              <div class="normal-title inline-16" style="font-size:14px;margin-right:10px" >组织内指定人员</div>
+              <addPeople :hrids="form.sales" class="inline-16" style="margin-bottom: 10px" @selectPeople="selectPeople" ></addPeople>
+            </el-col>
+            <el-col :span="24" :offset="2">
+              <el-table
+                  ref="table"
+                  :data="personData"
+                  style="width: 90%"
+                  height="200px"
+                  size="mini"
+                  border>
+                <el-table-column
+                    prop="hrcode"
+                    label="编号">
+                </el-table-column>
+                <el-table-column
+                    prop="name"
+                    label="姓名">
+                </el-table-column>
+                <el-table-column
+                    prop="depname"
+                    label="部门">
+                </el-table-column>
+                <el-table-column
+                    prop="position"
+                    label="职位">
+                </el-table-column>
+                <el-table-column
+                    label="操作">
+                  <template slot-scope="scope">
+                    <el-button type="text" size="mini" @click="delPerson(scope.row)">删 除</el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+            </el-col>
+            <el-col :span="24" style="margin-top: 20px">
+              <el-form-item label="角色:" prop="enterprisename">
+                <el-select v-model="form.roles" placeholder="请选择" style="width: 100%" multiple clearable>
+                  <el-option
+                      v-for="item in listRole"
+                      :key="item.roleid"
+                      :label="item.remarks"
+                      :value="item.roleid">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="状态:" prop="enterprisename" style="margin: 10px 0px 0px 0px">
+                <el-radio v-model="form.status" label="开启">开启</el-radio>
+                <el-radio v-model="form.status" label="关闭">关闭</el-radio>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div class="fixed__btn__panel">
+        <el-button  size="small" @click="onClose" class="normal-btn-width inline-16">取 消</el-button>
+        <el-button size="small" type="primary"  @click="onsubmit" class="normal-btn-width">确 定</el-button>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import addDepartment from './addDepartment'
+import addPeople from './addPeople'
+export default {
+  name: "edit",
+  props:["data"],
+  components:{addDepartment,addPeople},
+  data() {
+    var startTime = (rule,value,callback) => {
+      if (value === ''){
+        callback(new Error('请选择开始时间'))
+      }else {
+        if (this.form.end !== ''){
+          if (this.form.start > this.form.end){
+            callback(new Error('开始时间不能大于结束时间'))
+          }else {
+            callback()
+          }
+        }else {
+          callback()
+        }
+      }
+    }
+    var endtTime = (rule,value,callback) => {
+      if (value === ''){
+        callback(new Error('请选择开始时间'))
+      }else {
+        if (this.form.start !== ''){
+          if (this.form.start > this.form.end){
+            callback(new Error('结束时间不能小于开始时间'))
+          }else {
+            callback()
+          }
+        }else {
+          callback()
+        }
+      }
+    }
+    return {
+      dialogVisible:false,
+      visiblePerson:false,
+      departmentids:[],
+      deplist:[],
+      depData:[],
+      personData:[],
+      listRole:[],
+      listPerson:[],
+      checkPerson:[],
+      roleShow:false,
+      depShow:false,
+      personShow:false,
+      checkRole:[],
+      roleName:[],
+      form:{
+        "sa_salesforecastmodelid": '',
+        "remarks": "",
+        "periodpoint": [],
+        "taskdays":[],
+        "sales":[],
+        "roles":[],
+        "departments":[],
+        "status":"",
+        "start":'',
+        "end":'',
+      },
+      rules:{
+        end:[
+          { required: true, validator:endtTime, trigger: 'change'},
+        ],
+        periodpoint:[
+          { required: true, message: '请选择预测周期', trigger: 'change'},
+        ],
+        start:[
+          { required: true, validator:startTime, trigger: 'change'},
+        ],
+      },
+      selectDay:[],
+      selectCycle:[
+        {
+          value:'本月',
+          label:'本月'
+        },
+        {
+          value:'次月',
+          label:'次月'
+        },
+        {
+          value:'次次月',
+          label:'次次月'
+        },
+      ],
+      param:{
+        "id": "20230705144104",
+        "content": {
+          "sa_salesforecastmodelid":''
+        }
+      }
+    }
+  },
+  methods:{
+    /*获取已选部门数据*/
+    async queryDepartment(){
+      this.departmentids = []
+      const res = await this.$api.requested({
+        "id": "20230705144404",
+        "content": {
+          "sa_salesforecastmodelid":this.data.sa_salesforecastmodelid,
+          "where":{
+            "condition":""
+          }
+        }
+      })
+      this.depData = res.data
+      console.log(this.depData,'已选部门')
+      this.form.departments = this.depData.map(item=>item.departmentid)
+    },
+    /*获取已选组织内人员*/
+    async queryPerson(){
+      this.hrids = []
+      const res = await this.$api.requested({
+        "id": "20230705144204",
+        "content": {
+          "sa_salesforecastmodelid":this.data.sa_salesforecastmodelid,
+          "where":{
+            "condition":""
+          }
+        }
+      })
+      console.log(res.data,'人员')
+      this.personData = res.data
+      this.form.sales = res.data.map(item=>item.hrid)
+    },
+    /*获取已选角色*/
+    async queryRole(){
+      const res = await this.$api.requested({
+        "id": "20230705144304",
+        "content": {
+          "sa_salesforecastmodelid":this.data.sa_salesforecastmodelid,
+          "where":{
+            "condition":""
+          }
+        }
+      })
+      console.log(res.data,'角色')
+      this.form.roles = res.data.map(item=>item.roleid)
+    },
+    /*获取所有部门*/
+    async departmentList(){
+      const res = await this.$api.requested({
+        "classname": "webmanage.department.department",
+        "method": "querydepartment",
+        "content": {
+        }
+      })
+      console.log(res.data,'所有部门')
+      this.personList(res.data[0].departmentid)
+      this.deplist = this.createMenu(res.data)
+    },
+    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
+    },
+    /*获取所有人员*/
+    async personList(id){
+      const res = await this.$api.requested({
+        "id": "20221102090303",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 9999,
+          "departmentids":[id],
+          "containssub":1,
+          "where": {
+            "condition": ""
+          }
+        }
+      })
+      console.log(res.data,'所有人员')
+      this.listPerson = res.data
+    },
+    /*获取所有权限*/
+    async roleList(){
+      const res = await this.$api.requested({
+        "id": "20221101131902",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 100,
+          "where": {
+            "condition": ""
+          }
+        }
+      })
+      console.log(res.data,'角色')
+      this.listRole = res.data
+    },
+    onEdit(){
+      console.log(this.data,'数据')
+      this.dialogVisible = true
+      this.daySet()
+      this.queryData()
+      this.departmentList()
+      this.roleList()
+      this.queryDepartment()
+      this.queryPerson()
+      this.queryRole()
+    },
+    daySet(){
+      let date = new Date()
+      let month = date.getMonth() + 1
+      this.selectDay = []
+      if (month === 1 || month === 3 || month === 5 || month === 7 || month === 8 || month === 10 || month === 12){
+        for (var i=0;i<30;i++){
+          this.selectDay[i] = i + 1
+        }
+      }else if (month === 4 || month === 6 || month === 9 || month === 11 ){
+        for (var i=0;i<29;i++){
+          this.selectDay[i] = i + 1
+        }
+      }else if (month === 2){
+        let year = date.getFullYear()
+        if ((year % 4 === 0 && year % 100 !==0) || (year % 100 === 0 && year % 400 === 0)){
+          for (var i=0;i<28;i++){
+            this.selectDay[i] = i + 1
+          }
+        }else {
+          for (var i=0;i<27;i++){
+            this.selectDay[i] = i + 1
+          }
+        }
+      }
+    },
+    async queryData(){
+      this.param.content.sa_salesforecastmodelid = this.data.sa_salesforecastmodelid
+      const res = await this.$api.requested(this.param)
+      this.form = Object.assign({},this.form,res.data)
+      this.form.periodpoint = JSON.parse(this.form.periodpoint)
+      this.form.taskdays = JSON.parse(this.form.taskdays)
+      this.form.start = this.form.taskdays[0]
+      this.form.end = this.form.taskdays[1]
+      console.log(this.form,'form表单数据')
+    },
+    selectDepartmentFun(val){
+      console.log(val)
+      let addDep = []
+      addDep = val.map(item=>item.departmentid)
+      this.form.departments = this.form.departments.concat(addDep)
+      console.log(this.form)
+      this.onList(2)
+    },
+    delDepartment(row){
+      for (var i=0;i<this.form.departments.length;i++){
+        if (this.form.departments[i] === row.departmentid){
+          this.form.departments.splice(i,1)
+          break
+        }
+      }
+      this.onList(2)
+    },
+    delPerson(row){
+      for (var i=0;i<this.form.sales.length;i++){
+        if (this.form.sales[i] === row.hrid){
+          this.form.sales.splice(i,1)
+          break
+        }
+      }
+      this.onList(1)
+    },
+    selectPeople(val){
+      console.log(val,'需要添加的人员')
+      let addPerson = []
+      addPerson = val.map(item=>item.hrid)
+      this.form.sales = this.form.sales.concat(addPerson)
+      console.log(this.form.sales,'人员信息112')
+      this.onList(1)
+    },
+    onList(id){
+      this.form.taskdays = [this.form.start,this.form.end]
+      this.$refs.form.validate(async (valid)=>{
+        if (!valid) return false
+        const res = await this.$api.requested({
+          "id": 20230705143904,
+          "content": this.form
+        })
+        if (id === 1){
+          this.queryPerson()
+        }else {
+          this.queryDepartment()
+        }
+
+      })
+    },
+    async onsubmit(){
+      this.form.taskdays = [this.form.start,this.form.end]
+      this.$refs.form.validate(async (valid)=>{
+        if (!valid) return false
+        const res = await this.$api.requested({
+          "id": 20230705143904,
+          "content": this.form
+        })
+        this.tool.showMessage(res,()=>{
+          this.dialogVisible = false
+          this.$emit('onEdit')
+        })
+
+      })
+
+    },
+    onClose(){
+      this.dialogVisible = false
+      this.$emit('onEdit')
+    }
+  },
+  mounted() {
+
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 518 - 0
src/HDrpManagement/predictionRule/modules/editWeek.vue

@@ -0,0 +1,518 @@
+<template>
+  <div>
+    <el-button size="mini" type="text" @click="onEdit">编 辑</el-button>
+    <el-drawer title="周预测设置" :visible.sync="dialogVisible" size="600px" direction="rtl"
+               :show-close="false" append-to-body @close="onClose">
+      <div class="drawer__panel">
+        <el-row :gutter="20">
+          <el-form :model="form" :rules="rules" ref="form" label-width="120px" label-position="right" size="mini">
+            <el-col :span="24">
+              <el-form-item label="开始时间:" prop="start">
+                <el-select v-model="form.start" placeholder="请选择" style="width: 100%" clearable>
+                  <el-option
+                      v-for="item in selectDay"
+                      :key="item"
+                      :label="item"
+                      :value="item">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="结束时间:" prop="end">
+                <el-select v-model="form.end" placeholder="请选择" style="width: 100%" clearable>
+                  <el-option
+                      v-for="item in selectDay"
+                      :key="item"
+                      :label="item"
+                      :value="item">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="预测周期:" prop="enterprisename">
+                <el-select v-model="form.periodpoint" placeholder="请选择" style="width: 100%" multiple clearable>
+                  <el-option
+                      v-for="item in selectCycle"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="预测人员:" prop="enterprisename">
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" :offset="2">
+              <div class="normal-title inline-16" style="font-size:14px;margin-right:10px" >部门</div>
+              <addDepartment class="inline-16" style="margin-bottom: 10px" @selectDepartment="selectDepartmentFun" ></addDepartment>
+            </el-col>
+            <el-col :span="24" :offset="2">
+                  <el-table
+                      ref="table"
+                      :data="depData"
+                      style="width: 90%"
+                      size="mini"
+                      height="200px"
+                      border>
+                    <el-table-column
+                        prop="depno"
+                        label="编号">
+                    </el-table-column>
+                    <el-table-column
+                        prop="depname"
+                        label="部门">
+                    </el-table-column>
+                    <el-table-column
+                        prop="parentname"
+                        label="上级部门">
+                    </el-table-column>
+                    <el-table-column
+                        label="操作">
+                      <template slot-scope="scope">
+                        <el-button type="text" size="mini" @click="delDepartment(scope.row)">删 除</el-button>
+                      </template>
+                    </el-table-column>
+                  </el-table>
+            </el-col>
+            <el-col :span="24" :offset="2" style="margin-top: 20px">
+              <div class="normal-title inline-16" style="font-size:14px;margin-right:10px" >组织内指定人员</div>
+              <addPeople :hrids="form.sales" class="inline-16" style="margin-bottom: 10px" @selectPeople="selectPeople" ></addPeople>
+            </el-col>
+            <el-col :span="24" :offset="2">
+              <el-table
+                  ref="table"
+                  :data="personData"
+                  style="width: 90%"
+                  height="200px"
+                  size="mini"
+                  border>
+                <el-table-column
+                    prop="hrcode"
+                    label="编号">
+                </el-table-column>
+                <el-table-column
+                    prop="name"
+                    label="姓名">
+                </el-table-column>
+                <el-table-column
+                    prop="depname"
+                    label="部门">
+                </el-table-column>
+                <el-table-column
+                    prop="position"
+                    label="职位">
+                </el-table-column>
+                <el-table-column
+                    label="操作">
+                  <template slot-scope="scope">
+                    <el-button type="text" size="mini" @click="delPerson(scope.row)">删 除</el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="角色:" prop="enterprisename">
+                <el-select v-model="form.roles" placeholder="请选择" style="width: 100%" multiple clearable>
+                  <el-option
+                      v-for="item in listRole"
+                      :key="item.roleid"
+                      :label="item.remarks"
+                      :value="item.roleid">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="状态:" prop="enterprisename" style="margin: 10px 0px 0px 0px">
+                <el-radio v-model="form.status" label="开启">开启</el-radio>
+                <el-radio v-model="form.status" label="关闭">关闭</el-radio>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div class="fixed__btn__panel">
+        <el-button  size="small" @click="onClose" class="normal-btn-width inline-16">取 消</el-button>
+        <el-button size="small" type="primary"  @click="onsubmit" class="normal-btn-width">确 定</el-button>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import addDepartment from './addDepartment'
+import addPeople from './addPeople'
+export default {
+  name: "edit",
+  props:["data"],
+  components:{addDepartment,addPeople},
+  data() {
+    var startTime = (rule,value,callback) => {
+      if (value === ''){
+        callback(new Error('请选择开始时间'))
+      }else {
+        if (this.form.end !== ''){
+          if (this.form.start > this.form.end){
+            callback(new Error('开始时间不能大于结束时间'))
+          }else {
+            callback()
+          }
+        }else {
+          callback()
+        }
+      }
+    }
+    var endtTime = (rule,value,callback) => {
+      if (value === ''){
+        callback(new Error('请选择开始时间'))
+      }else {
+        if (this.form.start !== ''){
+          if (this.form.start > this.form.end){
+            callback(new Error('结束时间不能小于开始时间'))
+          }else {
+            callback()
+          }
+        }else {
+          callback()
+        }
+      }
+    }
+    return {
+      dialogVisible:false,
+      visiblePerson:false,
+      departmentids:[],
+      deplist:[],
+      depData:[],
+      listRole:[],
+      listPerson:[],
+      checkPerson:[],
+      roleShow:false,
+      depShow:false,
+      personShow:false,
+      checkRole:[],
+      roleName:[],
+      start:'',
+      end:'',
+      form:{
+        "sa_salesforecastmodelid": 2,
+        "remarks": "测试",
+        "periodpoint": [],
+        "taskdays":[],
+        "sales":[],
+        "roles":[],
+        "departments":[],
+        "status":"开启",
+        "start":'',
+        "end":'',
+      },
+      rules:{
+        end:[
+          { required: true, validator:endtTime, trigger: 'change'},
+        ],
+        periodpoint:[
+          { required: true, message: '请选择预测周期', trigger: 'change'},
+        ],
+        start:[
+          { required: true, validator:startTime, trigger: 'change'},
+        ],
+      },
+      selectDay:[
+        {
+          value:1,
+          label:'周一'
+        },
+        {
+          value:2,
+          label:'周二'
+        },
+        {
+          value:3,
+          label:'周三'
+        },
+        {
+          value:4,
+          label:'周四'
+        },
+        {
+          value:5,
+          label:'周五'
+        },
+        {
+          value:6,
+          label:'周六'
+        },
+        {
+          value:7,
+          label:'周日'
+        },
+      ],
+      selectCycle:[
+        {
+          value:'本周',
+          label:'本周'
+        },
+        {
+          value:'次周',
+          label:'次周'
+        },
+        {
+          value:'次次周',
+          label:'次次周'
+        },
+      ],
+      param:{
+        "id": "20230705144104",
+        "content": {
+          "sa_salesforecastmodelid":''
+        }
+      }
+    }
+  },
+  methods:{
+    /*获取已选部门数据*/
+    async queryDepartment(){
+      this.departmentids = []
+      const res = await this.$api.requested({
+        "id": "20230705144404",
+        "content": {
+          "sa_salesforecastmodelid":this.data.sa_salesforecastmodelid,
+          "where":{
+            "condition":""
+          }
+        }
+      })
+      this.depData = res.data
+      console.log(this.depData,'已选部门')
+      this.form.departments = this.depData.map(item=>item.departmentid)
+    },
+    /*获取已选组织内人员*/
+    async queryPerson(){
+      const res = await this.$api.requested({
+        "id": "20230705144204",
+        "content": {
+          "sa_salesforecastmodelid":this.data.sa_salesforecastmodelid,
+          "where":{
+            "condition":""
+          }
+        }
+      })
+      console.log(res.data,'人员')
+      this.personData = res.data
+      this.form.sales = res.data.map(item=>item.hrid)
+    },
+    /*获取已选角色*/
+    async queryRole(){
+      const res = await this.$api.requested({
+        "id": "20230705144304",
+        "content": {
+          "sa_salesforecastmodelid":this.data.sa_salesforecastmodelid,
+          "where":{
+            "condition":""
+          }
+        }
+      })
+      console.log(res.data,'角色')
+      this.form.roles = res.data.map(item=>item.roleid)
+    },
+    /*获取所有部门*/
+    async departmentList(){
+      const res = await this.$api.requested({
+        "classname": "webmanage.department.department",
+        "method": "querydepartment",
+        "content": {
+        }
+      })
+      console.log(res.data,'所有部门')
+      this.personList(res.data[0].departmentid)
+      this.deplist = this.createMenu(res.data)
+    },
+    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
+    },
+    /*获取所有人员*/
+    async personList(id){
+      const res = await this.$api.requested({
+        "id": "20221102090303",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 9999,
+          "departmentids":[id],
+          "containssub":1,
+          "where": {
+            "condition": ""
+          }
+        }
+      })
+      console.log(res.data,'所有人员')
+      this.listPerson = res.data
+    },
+    /*获取所有权限*/
+    async roleList(){
+      const res = await this.$api.requested({
+        "id": "20221101131902",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 100,
+          "where": {
+            "condition": ""
+          }
+        }
+      })
+      console.log(res.data,'角色')
+      this.listRole = res.data
+    },
+    onEdit(){
+      console.log(this.data,'数据')
+      this.dialogVisible = true
+      this.queryData()
+      this.departmentList()
+      this.roleList()
+      this.queryDepartment()
+      this.queryPerson()
+      this.queryRole()
+    },
+    async queryData(){
+      this.param.content.sa_salesforecastmodelid = this.data.sa_salesforecastmodelid
+      const res = await this.$api.requested(this.param)
+      this.form = Object.assign({},this.form,res.data)
+      this.form.periodpoint = JSON.parse(this.form.periodpoint)
+      this.form.taskdays = JSON.parse(this.form.taskdays)
+      this.form.start = this.form.taskdays[0]
+      this.form.end = this.form.taskdays[1]
+      console.log(this.form,'form表单数据')
+    },
+    selectDepartmentFun(val){
+      console.log(val)
+      let addDep = []
+      addDep = val.map(item=>item.departmentid)
+      this.form.departments = this.form.departments.concat(addDep)
+      console.log(this.form)
+      this.onList(2)
+    },
+    delDepartment(row){
+      for (var i=0;i<this.form.departments.length;i++){
+        if (this.form.departments[i] === row.departmentid){
+          this.form.departments.splice(i,1)
+          break
+        }
+      }
+      this.onList(2)
+    },
+    delPerson(row){
+      for (var i=0;i<this.form.sales.length;i++){
+        if (this.form.sales[i] === row.hrid){
+          this.form.sales.splice(i,1)
+          break
+        }
+      }
+      this.onList(1)
+    },
+    selectPeople(val){
+
+      console.log(val,'需要添加的人员')
+      let addPerson = []
+      addPerson = val.map(item=>item.hrid)
+      this.form.sales = this.form.sales.concat(addPerson)
+      console.log(this.form.sales,'人员信息112')
+      this.onList(1)
+    },
+    onList(id){
+      this.form.taskdays = [this.form.start,this.form.end]
+      this.$refs.form.validate(async (valid)=>{
+        if (!valid) return false
+        const res = await this.$api.requested({
+          "id": 20230705143904,
+          "content": this.form
+        })
+        if (id === 1){
+          this.queryPerson()
+        }else {
+          this.queryDepartment()
+        }
+
+      })
+    },
+    async onsubmit(){
+      this.form.taskdays = [this.form.start,this.form.end]
+      this.$refs.form.validate(async (valid)=>{
+        if (!valid) return false
+        const res = await this.$api.requested({
+          "id": 20230705143904,
+          "content": this.form
+        })
+        this.tool.showMessage(res,()=>{
+          this.dialogVisible = false
+          this.$emit('onEdit')
+        })
+
+      })
+
+    },
+    onClose(){
+      this.dialogVisible = false
+      this.$emit('onEdit')
+    }
+  },
+  mounted() {
+
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 94 - 32
src/HDrpManagement/projectPredictionManage/details/index.vue

@@ -1,48 +1,82 @@
 <template>
  <div>
-   <newDetails :titleText="mainData.title" :mainAreaData="mainAreaData">
+   <newDetails :titleText="mainData.title" :mainAreaData="mainAreaData" idname="sa_salesforecastbillid" :editData="mainData" :tabs="['项目产品清单']" >
      <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>
+         <el-row>
+           <el-col :span="24">
+             <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>
+           </el-col>
+         </el-row>
+         <el-row>
+           <el-col :span="24">
+             <div class="totalData">
+               <el-row>
+                 <el-col :offset="1" :span="12">
+                   <span class="title">预测人数:</span>
+                   <span class="num">{{allhr}}</span>
+                 </el-col>
+                 <el-col :span="11">
+                   <span class="title">预测总金额:</span>
+                   <span class="amount">¥{{tool.formatAmount(allprojectamount,2)}}</span>
+                 </el-col>
+               </el-row>
+             </div>
+           </el-col>
+         </el-row>
+         <el-row>
+           <el-row :span="24">
+             <tableList :loading="loading" :layout="tablecols" :data="list" :opwidth="200" :custom="true"  :height="tableHieght" fixedName="operation">
+               <template v-slot:customcol="scope">
+                 <div v-if="scope.column.columnname === 'operation'">
+                   <span>{{scope.column.data[scope.column.columnname]}}</span>
+                 </div>
+                 <p v-else>{{scope.column.data[scope.column.columnname]?scope.column.data[scope.column.columnname]:'--'}}</p>
+               </template>
+               <template v-slot:opreation="scope">
+                 <el-button size="mini" type="text" v-if="scope.data.sa_salesforecastbillid">详 情</el-button>
+               </template>
+             </tableList>
+           </el-row>
+         </el-row>
+
        </div>
      </template>
      <template #bottomRight>
-       <div style="height: calc(100vh - 1230px);padding: -16px;margin: 0">
+       <div style="height:60px;padding: -16px;margin: 0">
          <p>我的预测单</p>
          <el-divider></el-divider>
-         <el-descriptions :column="5" size="small">
+         <el-descriptions :column="4" 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>
+<!--     <template #bottomTabs>
        <div style="height: calc(100vh - 280px)"></div>
-     </template>
+     </template>-->
+     <div slot="slot0" class=" normal-panel">
+       <projectList></projectList>
+     </div>
    </newDetails>
  </div>
 </template>
@@ -50,16 +84,20 @@
 <script>
 import newDetails from '@/components/newDetailTemp/index'
 import tableList from '@/components/table/index5'
+import projectList from './modules/projectList'
 export default {
   name: "index",
-  components:{newDetails,tableList},
+  components:{newDetails,tableList,projectList},
   data(){
     return {
       mainAreaData:'',
+      loading:'',
       mainData:"",
       myData:[],
       tablecols:[],
       list:[],
+      allhr:"",
+      allprojectamount:"",
       total:0,
       currentPage:0,
       param:{
@@ -147,6 +185,9 @@ export default {
       this.param.content.title = this.mainData.title
       const res = await this.$api.requested(this.param)
       this.list = res.data.data
+      this.allhr = res.data.allhr
+      this.allprojectamount = res.data.allprojectamount
+      this.loading = false
     },
     async departmentrtment() {
       const res = await this.$api.requested(this.depmentParam)
@@ -235,9 +276,10 @@ export default {
       console.log(tab, event);
     },
     updateData(){
-      this.param.content.type = 1
+     /* this.param.content.type = 1
       this.param.content.dataid = 0
-      this.range = ''
+      this.range = ''*/
+      this.loading = true
       this.listData()
     },
     onChange(){
@@ -265,4 +307,24 @@ export default {
          width: 100%;
           margin: 10px 0;
        }
+  .totalData{
+    height: 50px;
+    width: 100%;
+    background: #f5f5f5;
+    margin-bottom: 10px;
+    vertical-align: auto;
+    line-height: 50px;
+  }
+  .totalData .title{
+    color:#888;
+    font-size: 12px
+  }
+  .totalData .num{
+    color: #333;
+    font-size: 16px;
+  }
+  .totalData .amount{
+    color: #E13333;
+    font-size: 16px;
+  }
 </style>

+ 287 - 0
src/HDrpManagement/projectPredictionManage/details/modules/projectList.vue

@@ -0,0 +1,287 @@
+<template>
+  <div>
+    <addProject ref="addProject" :param="paramProject" class="inline-16" @add="addProject" @adds="addProjects"></addProject>
+    <el-button :type="items.length > 0?'primary':''" size="small" @click="delProjects" :disabled="items.length === 0">删 除</el-button>
+    <tableList style="margin-top: 10px" :checkbox="true" :loading="loading" :layout="projectCols" :data="list" :opwidth="200" :custom="true"  fixedName="operation" @selectionChange="selectionChange">
+      <template v-slot:customcol="scope">
+        <div v-if="scope.column.columnname === 'operation'">
+          <span>{{scope.column.data[scope.column.columnname]}}</span>
+        </div>
+        <p v-else>{{scope.column.data[scope.column.columnname]?scope.column.data[scope.column.columnname]:'--'}}</p>
+      </template>
+      <template v-slot:opreation="scope">
+        <el-button type="text" size="mini" @click="onProduct(scope.data)">添加产品</el-button>
+        <el-button size="mini" type="text" @click="delProject(scope.data)">删 除</el-button>
+      </template>
+    </tableList>
+    <tableList style="margin-top: 10px" :checkbox="true" :loading="loading" :layout="productCols" :data="productList" :opwidth="200" :custom="true"  fixedName="operation">
+      <template v-slot:customcol="scope">
+        <div v-if="scope.column.columnname === 'operation'">
+          <span>{{scope.column.data[scope.column.columnname]}}</span>
+        </div>
+        <p v-else>{{scope.column.data[scope.column.columnname]?scope.column.data[scope.column.columnname]:'--'}}</p>
+      </template>
+      <template v-slot:opreation="scope">
+        <el-button size="mini" type="text" @click="delProduct(scope.data)">删 除</el-button>
+      </template>
+    </tableList>
+    <el-drawer
+        title="添加商品"
+        :visible.sync="dialogVisible"
+        size="90%"
+        direction="rtl"
+        :show-close="false"
+        append-to-body
+        >
+      <addProduct ref="productRef" :params="paramProduct" :tablecolsAdd="tablecolsAdd" :querySa_brandid="brandid"
+                  :tradefield="tradefield" :discountrate="discountrate"  @addProduct="addProduct" @addSuccess="addProducts"></addProduct>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import tableList from '@/components/table/index5'
+import addProject from '@/template/prediction/addProjectTemp'
+import addProduct from '@/template/prediction/addProductTemp'
+export default {
+  name: "projectList",
+  components:{tableList,addProject,addProduct},
+  data(){
+    return {
+      dialogVisible:false,
+      brandid:'',
+      tradefield:'',
+      sa_brandid:'',
+      discountrate:'',
+      projectCols:[],
+      productCols:[],
+      tablecolsAdd:[],
+      list:[],
+      productList:[],
+      loading:false,
+      items:[],
+      selectProject:'',
+      projectParam:{
+        "id": 20230705144904,
+        "content": {
+          "sa_salesforecastbillid":this.$route.query.id,
+          "where":{
+            "condition":""
+          }
+        }
+      },
+      productParam:{
+        "id": 20230705145004,
+        "content": {
+          "sa_salesforecastprojectid": '',
+          "where":{
+            "condition":""
+          }
+        }
+      },
+      paramProject:{
+        "id": 20230705145604,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+          "sa_salesforecastbillid":this.$route.query.id,
+          "where": {
+            "condition": ""
+          }
+        }
+      },
+      paramProduct:{
+        "id": 20230705145704,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+          "sa_salesforecastbillid":this.$route.query.id,
+          "sa_salesforecastprojectid":'',
+          "sa_projectid":"",
+          "where": {
+            "condition": ""
+          }
+        }
+      }
+    }
+  },
+  methods:{
+    /*项目列表*/
+    async listData(){
+      const res = await this.$api.requested(this.projectParam)
+      this.list = res.data
+      this.selectProject = res.data[0].sa_salesforecastprojectid
+      this.productData(res.data[0].sa_salesforecastprojectid)
+    },
+    /*产品列表*/
+    async productData(id){
+      this.productParam.content.sa_salesforecastprojectid = id
+      const res = await this.$api.requested(this.productParam)
+      this.productList = res.data
+    },
+    /*添加项目*/
+    async addProject(id){
+      const res = await this.$api.requested({
+        "id": 20230705145104,
+        "content": {
+          "sa_salesforecastbillid": this.$route.query.id,
+          "ownertable": "sa_project",
+          "salesforecastproject": [
+            {
+              "sa_salesforecastprojectid": 0,
+              "ownerid": id,
+              "discountrate": 0.1
+            }
+          ]
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.projectParam.content.pageNumber = 1
+        this.listData()
+      })
+    },
+    /*批量添加项目*/
+    async addProjects(ids){
+      const res = await this.$api.requested({
+        "id": 20230705145104,
+        "content": {
+          "sa_salesforecastbillid": this.$route.query.id,
+          "ownertable": "sa_project",
+          "salesforecastproject": ids
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.projectParam.content.pageNumber = 1
+        this.listData()
+      })
+    },
+    /*删除项目*/
+    async delProject(val){
+      const res = await this.$api.requested({
+        "id": 20230705145304,
+        "content": {
+          "sa_salesforecastbillid":this.$route.query.id,
+          "sa_salesforecastprojectids":[val.sa_salesforecastprojectid]
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.projectParam.content.pageNumber = 1
+        this.listData()
+      })
+
+    },
+    /*批量删除项目*/
+    async delProjects(){
+      console.log(this.items)
+      let ids = []
+      ids = this.items.map(item=>item.sa_salesforecastprojectid)
+      console.log(ids)
+      const res = await this.$api.requested({
+        "id": 20230705145304,
+        "content": {
+          "sa_salesforecastbillid":this.$route.query.id,
+          "sa_salesforecastprojectids":ids
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.items = []
+        this.projectParam.content.pageNumber = 1
+        this.listData()
+      })
+    },
+    /*勾选的项目*/
+    selectionChange(val){
+      this.items = val
+    },
+    /*添加产品*/
+    onProduct(val){
+      console.log(val,'项目信息')
+      this.paramProduct.content.sa_salesforecastprojectid = val.sa_salesforecastprojectid
+      this.paramProduct.content.sa_projectid = val.sa_projectid
+      this.tradefield = val.tradefield
+      this.sa_brandid = val.sa_brandid
+      this.discountrate = val.discountrate
+      this.dialogVisible = true
+      this.$nextTick(()=>{
+        this.$refs.productRef.onShow()
+      })
+
+    },
+    async addProduct(val){
+      console.log(val,'需要添加的产品')
+      const res = await this.$api.requested({
+        "id": 20230705145204,
+        "content": {
+          "sa_salesforecastbillid": this.$route.query.id,
+          "sa_salesforecastprojectid": this.paramProduct.content.sa_salesforecastprojectid,
+          "salesforecast": [
+            {
+              "itemid": val.itemid,
+              "orderqty": val.qty,
+              "orderamount": val.orderamount,
+              "price": val.price,
+              "sa_salesforecastid":0
+            }
+          ]
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.dialogVisible = false
+        this.productData(this.selectProject)
+      })
+    },
+    async addProducts(val){
+      console.log(val,'需要添加的产品')
+      let items = []
+      items = val.map(item=>{
+        return {
+          "itemid": item.itemid,
+          "orderqty": item.qty,
+          "orderamount": (item.marketprice * this.discountrate)*item.qty,
+          "price": item.marketprice * this.discountrate,
+          "sa_salesforecastid":0
+        }
+      })
+      console.log(items,'item')
+      const res = await this.$api.requested({
+        "id": 20230705145204,
+        "content": {
+          "sa_salesforecastbillid": this.$route.query.id,
+          "sa_salesforecastprojectid": this.paramProduct.content.sa_salesforecastprojectid,
+          "salesforecast": items
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.dialogVisible = false
+        this.productData(this.selectProject)
+      })
+    },
+    /*删除商品*/
+    async delProduct(val){
+      console.log(val)
+      const res = await this.$api.requested({
+        "id": 20230705145404,
+        "content": {
+          "sa_salesforecastbillid":this.$route.query.id,
+          "sa_salesforecastids":[val.sa_salesforecastid]
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.productData(this.selectProject)
+      })
+    }
+  },
+  mounted() {
+    this.listData()
+  },
+  created() {
+    this.productCols = this.tool.tabelCol(this.$route.name).productList.tablecols
+    this.projectCols = this.tool.tabelCol(this.$route.name).projectList.tablecols
+    this.tablecolsAdd = this.tool.tabelCol(this.$route.name).addProductTable.tablecols
+  },
+}
+</script>
+
+<style scoped>
+
+</style>

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

@@ -0,0 +1,15 @@
+<template>
+  <div>
+
+  </div>
+</template>
+
+<script>
+export default {
+  name: "subordinate"
+}
+</script>
+
+<style scoped>
+
+</style>

+ 3 - 3
src/HManagement/accountManage/bak/index copy.vue

@@ -27,7 +27,7 @@
 import list from './list.vue'
 import add from '../add.vue'
 import accountDel from '../account_delete.vue'
-import accountEdit from '../edit.vue'
+import accountEdit from '../editWeek.vue'
 import accountUse from '../useAccdount.vue'
 import accountUnuse from '../unuseAccount.vue'
 
@@ -58,7 +58,7 @@ export default {
       console.log(arr)
       this.accounts = arr
     },
-    
+
   }
 }
 
@@ -69,4 +69,4 @@ export default {
 .borderRight{
   border-right: 1px solid #ccc;
 }
-</style>
+</style>

+ 6 - 6
src/HManagement/siteManage/systemRemind/components/edit.vue

@@ -24,7 +24,7 @@
                 <el-option label="邮件" value="邮件"></el-option>
                 <el-option label="弹框" value="弹框"></el-option>
                 <el-option label="微信公众号" value="微信公众号" v-if="data.cansendbywechatservice"></el-option>
-                
+                <el-option label="企业微信" value="企业微信"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
@@ -103,7 +103,7 @@
                   </el-input>
                   <el-button v-else class="button-new-tag" size="small" @click="showInput">+ 添 加</el-button>
                 </div>
-                
+
                 <!-- <el-input type="text" readonly slot="input" v-model="form.username" @focus="$refs.user.drawer=true;$refs.user.normalSetId()"></el-input> -->
               </multiplePeople>
             </el-form-item>
@@ -124,8 +124,8 @@
 </template>
 
 <script>
-import multipleRole from '@/template/multipleRole/index' 
-import multiplePeople from '@/template/multiplePeople/index' 
+import multipleRole from '@/template/multipleRole/index'
+import multiplePeople from '@/template/multiplePeople/index'
 export default {
   name: "add",
   props:['data'],
@@ -266,7 +266,7 @@ export default {
       //   })
       // })
     }
-  } 
+  }
 }
 </script>
 
@@ -274,4 +274,4 @@ export default {
 .dialog-footer {
   margin-top: 0;
 }
-</style>
+</style>

+ 114 - 0
src/SDrpManagement/invoicePrediction/index.vue

@@ -0,0 +1,114 @@
+<template>
+  <div>
+    <basicLayout
+        style="padding-top:0 !important"
+        ref="basicLayout"
+        tableName="invoicePrediction"
+        idName="sa_salesforecastbillid"
+        :apiId="{query:20230706092304,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>
+export default {
+  name: "index",
+  data(){
+    return {
+      dateSelect:'',
+      status:[
+        {
+          value:'进行中',
+          label:'进行中'
+        },
+        {
+          value:'已截止',
+          label:'已截止'
+        }
+      ],
+      selectParam:{
+        status:'',
+        begindate:'',
+        enddate:''
+      }
+    }
+  },
+  methods:{
+    listData(){
+      this.$refs.basicLayout.param.content.baseonproject = 0
+      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>
+
+<style scoped>
+
+</style>

+ 113 - 0
src/SDrpManagement/projectPrediction/index.vue

@@ -0,0 +1,113 @@
+<template>
+  <div>
+    <basicLayout
+        style="padding-top:0 !important"
+        ref="basicLayout"
+        tableName="projectPrediction"
+        idName="sa_salesforecastbillid"
+        :apiId="{query:20230706092304,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">
+
+      </template>
+    </basicLayout>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "index",
+  data(){
+    return {
+      dateSelect:'',
+      status:[
+        {
+          value:'进行中',
+          label:'进行中'
+        },
+        {
+          value:'已截止',
+          label:'已截止'
+        }
+      ],
+      selectParam:{
+        status:'',
+        begindate:'',
+        enddate:''
+      }
+    }
+  },
+  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>
+
+<style scoped>
+
+</style>

+ 14 - 4
src/components/newDetailTemp/index.vue

@@ -12,7 +12,7 @@
         </div>
       </div>
       <div>
-        <el-descriptions :column="5" size="mini">
+        <el-descriptions :column="3" 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>
@@ -28,7 +28,12 @@
           <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>
+<!--          <slot name="bottomTabs"></slot>-->
+          <tabTemp :tabs="tabs" :editData="editData" :idname="idname" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" @onTabClick="onTabClick">
+            <div :slot="'slot' + index" v-for="(tab,index) in tabs" :key="tab.index">
+              <slot :name="'slot' + index"></slot>
+            </div>
+          </tabTemp>
         </div>
       </el-col>
     </el-row>
@@ -37,17 +42,22 @@
 
 <script>
 import {mapGetters} from "vuex";
-
+import tabTemp from '@/components/normal-basic-layout/details/modules/tabs/tab'
 export default {
   name: "index",
-  props:["titleText","mainAreaData"],
+  props:["titleText","mainAreaData",'tabs','editData','idname','ownertable'],
+  components:{tabTemp},
   data(){
     return {
     }
   },
   methods:{
+    onTabClick () {
+      this.$emit('onTabClick')
+    },
   },
   mounted() {
+
   },
   computed:{
     mainAData () {

+ 94 - 0
src/components/newDetailTemp/modules/tabs/tab.vue

@@ -0,0 +1,94 @@
+<template>
+  <div class="normal-panel tab__panel">
+    <div>
+      <el-tabs v-model="activeName"  @tab-click="handleClick">
+        <el-tab-pane v-for="(tab,index) in tabs" :key="index" :label="tab" :name="'tab' + index"></el-tab-pane>
+        <el-tab-pane label="附件" name="file"></el-tab-pane>
+        <el-tab-pane label="操作记录" name="log"></el-tab-pane>
+      </el-tabs>
+    </div>
+
+    <div v-show="'tab'+index === activeName" v-for="(item,index) in tabs" :key="index">
+      <slot v-if="'tab'+index === activeName"  :name="'slot' + index"></slot>
+    </div>
+    <div v-show="activeName === 'file'">
+      <attachmentList v-if="activeName === 'file'" :attinfos="attinfo_attachment" @onSuccess="queryAttments" @cancelEdit="queryAttments">
+        <upload slot="upload" :folderid="folderid"
+          :bindData="{ ownertable: ownertable, ownerid: editData[idname], usetype: 'default' }"
+          @onSuccess="queryAttments" :hidemediastock="hidemediastock"></upload>
+      </attachmentList>
+    </div>
+    <div v-show="activeName === 'log'">
+      <datalog v-if="activeName === 'log'" :editData="editData" :idname="idname" :ownertable="ownertable"></datalog>
+    </div>
+  </div>
+</template>
+
+<script>
+import attachmentList from '@/components/attachment_list/index.vue'
+import upload from '@/components/upload/hw_obs_upload.vue'
+import datalog from '../datalog/index.vue'
+
+export default {
+  props:['tabs','editData','ownertable','idname'],
+  components:{
+    attachmentList,
+    upload,
+    datalog
+  },
+  data () {
+    return {
+      activeName:'tab0',
+      attinfo_attachment:[],
+      folderid:JSON.parse(sessionStorage.getItem('folderid')).appfolderid,
+      hidemediastock:!JSON.parse(sessionStorage.getItem('activeApp')).selectfileinattachment,
+    }
+  },
+  methods:{
+    async queryAttments () {
+      console.log(this.idname,'---')
+      const res = await this.$api.requested({
+        "classname": "system.attachment.Attachment",
+        "method": "queryFileLink",
+        "content": {
+          "ownertable": this.ownertable,
+          "ownerid": this.editData[this.idname],
+          "usetype":""
+        }
+      })
+      this.attinfo_attachment = res.data
+    },
+    handleClick(){
+      console.log(this.activeName)
+      this.$emit('onTabClick')
+    }
+  },
+  mounted () {
+    setTimeout(() => {
+      if (!this.tabs) {this.activeName = 'file'} else {
+        this.activeName = 'tab0'
+      }
+    }, 1000);
+  },
+  watch: {
+    activeName (val) {
+      val === 'file'?this.queryAttments():''
+    }
+  },
+}
+
+</script>
+<style>
+.tab__panel .el-tabs__item{
+  color:#999
+}
+.tab__panel  .el-tabs__item.is-active {
+  color:#3874f6
+}
+</style>
+<style scoped>
+.tab__panel{
+  padding:0 10px 10px 10px;
+  border-radius:5px;
+}
+</style>

+ 4 - 4
src/components/table/index5.vue

@@ -1,8 +1,8 @@
 <template>
   <div>
     <!-- :header-cell-style="{background:'#EEEEEE',color:'#333'}" -->
-    <el-table ref="table" :row-class-name="tableClassName" highlight-current-row :data="data"  size="mini"  :height="data.length <= 4?'260px':data.length <= 20?'':'calc(100vh - 420px)'" @row-click="rowClick" style="width:100%;min-height:260px;max-height: calc(100vh - 420px)" :header-cell-style="{height:'40px',color:'#606266',fontWeight:'400',fontSize:'14px'}"
-              :cell-style="{height:'40px',color:'#666666',fontWeight:'400'}" border @selection-change="selectionChange">
+    <el-table ref="table" :row-class-name="tableClassName" highlight-current-row :data="data"  size="mini"  :height="data.length <= 4?'260px':data.length <= 20?'':'calc(100vh - 420px)'"  @row-click="rowClick" style="width:100%;min-height:260px;max-height: calc(100vh - 420px)" :header-cell-style="{height:'40px',color:'#606266',fontWeight:'400',fontSize:'14px'}"
+              :cell-style="{height:'40px',color:'#666666',fontWeight:'400'}" border @selection-change="selectionChange" v-loading="loading">
       <el-table-column
           type="selection"
           width="35" fixed v-if="checkbox">
@@ -32,7 +32,7 @@ export default {
     custom:是否启用自定义结构;
     opwidth:操作列宽度
   */
-  props:['layout','data','custom','height','fixedName','width','checkbox'],
+  props:['layout','data','custom','height','fixedName','width','checkbox','loading'],
   data () {
     return {
       list:[],
@@ -62,4 +62,4 @@ export default {
 
 </script>
 <style>
-</style>
+</style>

+ 11 - 0
src/router/HDrpManagement.js

@@ -1081,6 +1081,17 @@ const HDrpManagement = [
       }
     ]
   },
+  {
+    path: '/invoicePredictionManage',
+    name: 'invoicePredictionManage',
+    meta: {
+      title: '出货开票预测管理',
+      ast_nav: true,
+      keeproute: true,
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/HDrpManagement/invoicePredictionManage/index'),
+
+  },
 
 
 

+ 22 - 2
src/router/SDrpManagement.js

@@ -166,7 +166,7 @@ const SDrpManagement = [
       ast_nav: true,
       keeproute: true,
     },
-    
+
     component: sinvoiceapp,
     children: [
       {
@@ -287,5 +287,25 @@ const SDrpManagement = [
     },
     component: () => import(/* webpackChunkName: "about" */ '@/SDrpManagement/myaccountclass/index')
   },
+  {
+    path: '/projectPrediction',
+    name:'projectPrediction',
+    meta: {
+      title: '项目成交预测',
+      ast_nav: true,
+      keeproute: true,
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/SDrpManagement/projectPrediction/index')
+  },
+  {
+    path: '/invoicePrediction',
+    name:'invoicePrediction',
+    meta: {
+      title: '出货开票预测',
+      ast_nav: true,
+      keeproute: true,
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/SDrpManagement/invoicePrediction/index')
+  },
 ]
-export default SDrpManagement
+export default SDrpManagement

+ 325 - 0
src/template/prediction/addProductTemp.vue

@@ -0,0 +1,325 @@
+<template>
+  <div>
+<!--    <el-drawer
+        title="添加商品"
+        :visible.sync="dialogFormVisible"
+        size="90%"
+        direction="rtl"
+        :show-close="false"
+        append-to-body
+        @close="onClose">-->
+      <div class="drawer__panel">
+        <div class="flex-between">
+          <el-select v-model="sa_brandid" placeholder="选择品牌" size="small"  clearable class="inline-24" @change="brandChange" :disabled="querySa_brandid > 0">
+            <el-option
+                v-for="item in options.brands"
+                :key="item.sa_brandid"
+                :label="item.brandname"
+                :value="item.sa_brandid">
+            </el-option>
+          </el-select>
+          <el-cascader
+              placeholder="选择分类" size="small"
+              v-model="itemclassid"
+              :options="options.itemclass"
+              :props="{ checkStrictly: true,children:'subdep',label:'itemclassname',value:'itemclassid' }"
+              clearable @change="classChange"></el-cascader>
+        </div>
+        <div class="top-margin">
+          <uploadAllData
+              class="inline-16"
+              :total="total"
+              @handlePullApi="handlePullApi"
+              @handleUploadApi="handleUploadApi"
+              @onSuccess="onSuccess"
+          ></uploadAllData>
+          <el-button :disabled="items.length === 0" :type="items.length > 0?'primary':''" size="small" class="inline-24 bottom-margin" @click="batchAdd">添加选中商品</el-button>
+          <el-input  style="width:200px;" placeholder="商品名称/编码/品号" :suffix-icon="params.content.where.condition?params.content.where.condition.length > 0?'':'':'el-icon-search'" v-model="params.content.where.condition" @keyup.native.enter="listData(params.content.pageNumber = 1)" @clear="listData(params.content.pageNumber = 1)" size="small" class="input-with-select inline-24 layout_search__panel bottom-margin" clearable>
+          </el-input>
+          <el-select v-model="itemstandard" placeholder="选择标准" size="small" clearable class="inline-24 bottom-margin" @change="queryChange">
+            <el-option
+                v-for="item in options.itemstandards"
+                :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>
+          <el-select v-model="itemmaterial" placeholder="选择材质" size="small" clearable class="inline-24 bottom-margin" @change="queryChange">
+            <el-option
+                v-for="item in options.itemmaterials"
+                :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>
+          <el-input  style="width:200px;" placeholder="型号" :suffix-icon="params.content.where.model?params.content.where.model.length > 0?'':'':'el-icon-search'" v-model="params.content.where.model" @keyup.native.enter="listData(params.content.pageNumber = 1)" @clear="listData(params.content.pageNumber = 1)" size="small" class="bottom-margin input-with-select inline-24 layout_search__panel" clearable>
+          </el-input>
+          <el-input  style="width:200px;" placeholder="规格" :suffix-icon="params.content.where.spec?params.content.where.spec.length > 0?'':'':'el-icon-search'" v-model="params.content.where.spec" @keyup.native.enter="listData(params.content.pageNumber = 1)" @clear="listData(params.content.pageNumber = 1)" size="small" class="bottom-margin input-with-select inline-24 layout_search__panel" clearable>
+          </el-input>
+        </div>
+        <div >
+          <tableTemp ref="tableTemp" :data="list" :layout="tablecolsAdd" :opwidth="200" :custom="true" height="calc(100vh - 370px)" @checkboxCallBack="checkboxCallBack" fixedName="operation">
+            <template v-slot:customcol="scope">
+              <p v-if="scope.column.columnname === 'cover'">
+                <previewImage v-if="scope.column.data.attinfos[0]" class="image" :image="scope.column.data.attinfos[0]" :list="scope.column.data.attinfos" :deletebtn="false"></previewImage>
+              </p>
+              <p v-else>{{scope.column.data[scope.column.columnname]}}</p>
+            </template>
+            <template v-slot:opreation="scope">
+              <el-button type="text" size="mini" @click="addProduct(scope)">添 加</el-button>
+            </template>
+          </tableTemp>
+          <div  class="container normal-panel" style="text-align:right">
+            <el-pagination
+                background
+                @size-change="handleSizeChange"
+                @current-change="handleCurrentChange"
+                :current-page="params.content.pageNumber"
+                :page-sizes="[20, 50, 100, 200]"
+                :page-size="100"
+                layout="total,sizes, prev, pager, next, jumper"
+                :total="total">
+            </el-pagination>
+          </div>
+        </div>
+      </div>
+<!--    </el-drawer>-->
+  </div>
+</template>
+
+<script>
+import tableTemp from './table'
+import uploadAllData from '@/components/uploadAllData/index'
+import previewImage from '@/components/previewImage/index'
+export default {
+  name: "index",
+  props:["data","tradefield","discountrate","params","title","tablecolsAdd","sa_projectid","querySa_brandid"],
+  components:{tableTemp,uploadAllData,previewImage},
+  data(){
+    return {
+      dialogFormVisible:false,
+      sa_brandid:'',
+      itemclassid:'',
+      itemstandard:'',
+      itemmaterial:'',
+      list:[],
+      total:0,
+      options:{
+        brands:[],
+        itemclass:[],
+        itemstandards:[],
+        itemmaterials:[]
+      },
+      items:[]
+    }
+  },
+  methods:{
+    onShow(){
+      /*this.dialogFormVisible = true*/
+      this.$store.dispatch('optiontypeselect','itemstandards').then(res=>{
+        this.options.itemstandards = res.data
+      })
+      this.$store.dispatch('optiontypeselect','itemmaterial').then(res=>{
+        this.options.itemmaterials = res.data
+      })
+      this.querySa_brandid !== '' ?this.sa_brandid = this.querySa_brandid : this.sa_brandid = ''
+      this.queryBrands()
+      this.queryClass()
+      this.listData()
+    },
+    /*可添加商品*/
+    async listData(){
+      console.log(this.tradefield,'领域')
+      if (this.data){
+        switch (this.data.type) {
+          case '标准订单':
+            this.params.id = 20221109153502
+            break;
+          case '项目订单':
+            this.params.id = 20230103155002
+            break;
+          case '促销订单':
+            this.params.id = 20230107182302
+            break;
+          case '工具订单':
+            this.params.id = 20221109153502
+            break;
+          default:
+            this.params.id = 20221109153502
+            break;
+        }
+      }
+
+      this.params.content.where.tradefield = this.tradefield
+      const res = await this.$api.requested(this.params)
+      this.list = res.data
+      this.total = res.total
+      this.$refs.tableTemp.$refs.table.doLayout()
+    },
+    /*获取品牌*/
+    async queryBrands () {
+      const res = await this.$api.requested({
+        "id": "20220924163702",
+        "content": {
+          "pageSize":1000,
+          "where":{
+            "condition":""
+          }
+        }
+      })
+      this.options.brands = res.data
+      console.log("获取品牌",res.data)
+      this.sa_brandid = res.data[0].sa_brandid
+      this.queryClass()
+    },
+    brandChange(){
+      this.params.content.where.sa_brandid = this.sa_brandid
+      this.listData()
+      this.queryClass()
+    },
+    /*获取分类*/
+    async queryClass () {
+      const res = await this.$api.requested({
+        "id":"20220922110403",
+        "content":{
+          "sa_brandid":this.sa_brandid !== '' ? this.sa_brandid : 0
+        }
+      })
+      let arr = []
+      function converTree(node) {
+        var elNode = {
+          isdeep:node["isdeep"],
+          ishide:node["ishide"],
+          istool:node["istool"],
+          itemclassfullname:node["itemclassfullname"],
+          itemclassfullnum:node["itemclassfullnum"],
+          itemclassid:node["itemclassid"],
+          itemclassname:node["itemclassname"],
+          itemclassnum:node["itemclassnum"],
+          num:node["num"],
+          parentid:node["parentid"],
+          rowindex:node["rowindex"],
+          subdep:[]
+        }
+        if (node.subdep.length > 0) {
+          // 如果存在子节点
+          for (var index = 0; index < node.subdep.length; index++) {
+            // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
+            elNode.subdep.push(converTree(node.subdep[index]));
+          }
+        }else {
+          elNode = {
+            isdeep:node["isdeep"],
+            ishide:node["ishide"],
+            istool:node["istool"],
+            itemclassfullname:node["itemclassfullname"],
+            itemclassfullnum:node["itemclassfullnum"],
+            itemclassid:node["itemclassid"],
+            itemclassname:node["itemclassname"],
+            itemclassnum:node["itemclassnum"],
+            num:node["num"],
+            parentid:node["parentid"],
+            rowindex:node["rowindex"],
+          }
+        }
+        return elNode;
+      }
+      // this.options.itemclass = arr
+      res.data[0].ttemclass.forEach(e=>{
+        arr.push(converTree(e))
+      });
+
+      this.options.itemclass = arr
+      return arr
+    },
+    classChange(){
+      this.params.content.where.itemclassid = this.itemclassid[this.itemclassid.length -1]
+      this.listData()
+    },
+    queryChange(){
+      this.params.content.where.standards = this.itemstandard
+      this.params.content.where.material = this.itemmaterial
+      this.listData()
+    },
+    /*拉取数据*/
+    handlePullApi (pullApi) {
+      pullApi.content = JSON.parse(JSON.stringify(this.params.content))
+      pullApi.id = this.params.id
+      /*pullApi.content.sa_projectid = this.$route.query.id*/
+    },
+    /*上传数据*/
+    handleUploadApi (uploadApi,data) {
+      this.$emit('uploadData',uploadApi,data)
+    },
+    /*勾选*/
+    checkboxCallBack(val){
+      this.items = val
+    },
+    /*批量添加*/
+    batchAdd(){
+      console.log(this.items,'item')
+      this.$emit('addSuccess',this.items)
+    },
+    /*添加商品*/
+    addProduct(val){
+      console.log(val,'添加商品')
+      this.items = val
+      this.$emit('addProduct',this.items.data)
+    },
+    onSuccess () {
+      console.log('成功')
+      this.listData()
+    },
+    onClose(){
+      this.dialogFormVisible = false
+      this.sa_brandid = ''
+      this.itemclassid = ''
+      this.itemstandard = ''
+      this.itemmaterial = ''
+      this.$emit("closeDrawer")
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.params.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.params.content.pageNumber = val
+      this.listData()
+    },
+  },
+  mounted() {
+  },
+  created() {
+
+  }
+}
+</script>
+
+<style scoped>
+  .image{
+  height: 38px;
+  width: 38px;
+  margin-top:0;
+  }
+  .top-margin{
+    margin-top: 20px;
+  }
+  .bottom-margin{
+    margin-bottom: 20px;
+  }
+ /deep/ input::-webkit-input-placeholder {
+    color: #58585d;
+  }
+  /deep/ input::-moz-input-placeholder {
+    color: #58585d;
+  }
+  /deep/ input::-ms-input-placeholder {
+    color: #58585d;
+  }
+</style>

+ 105 - 0
src/template/prediction/addProjectTemp.vue

@@ -0,0 +1,105 @@
+<template>
+  <div>
+    <el-button type="primary" size="small" @click="onShow">添加项目</el-button>
+    <el-drawer
+        title="选择项目"
+        :visible.sync="dialogVisible"
+        size="900px"
+        direction="rtl"
+        :show-close="false"
+        append-to-body
+        >
+      <div class="drawer__panel">
+        <div style="margin-bottom: 20px">
+          <el-button type="primary" size="small" class="inline-16" @click="adds">批量添加</el-button>
+
+          <el-input  style="width:200px;" placeholder="搜索" :suffix-icon="param.content.where.condition?param.content.where.condition.length > 0?'':'':'el-icon-search'" v-model="param.content.where.condition" @keyup.native.enter="listData(param.content.pageNumber = 1)" @clear="listData(param.content.pageNumber = 1)" size="small" class="input-with-select inline-16 layout_search__panel" clearable>
+          </el-input>
+        </div>
+
+        <el-row>
+          <el-col :span="24">
+            <tableList :checkbox="true" :data="list" :layout="tablecols" :opwidth="200" :custom="true" fixedName="operation" @selectionChange="checkboxCallBack">
+              <template v-slot:customcol="scope">
+                <div v-if="scope.column.columnname === 'operation'">
+                  <span>{{scope.column.data[scope.column.columnname]}}</span>
+                </div>
+                <div v-else-if="scope.column.columnname === 'tag'">
+                  <div v-for="item in scope.column.data.tag_sys" :key="item.index"  style="float: left;margin-left: 5px;margin-bottom: 5px">
+                    <el-tag  color="#3874F6" size="mini" type="primary" effect="dark">
+                      <span>{{item}}</span>
+                    </el-tag>
+                  </div>
+                  <div v-for="item in scope.column.data.tag" :key="item.index"  style="float: left;margin-left: 5px;margin-bottom: 5px">
+                    <el-tag color="#FA8C16" size="mini" type="warning" effect="dark">
+                      <span>{{item}}</span>
+                    </el-tag>
+                  </div>
+                </div>
+                <p v-else>{{scope.column.data[scope.column.columnname]?scope.column.data[scope.column.columnname]:'--'}}</p>
+              </template>
+              <template v-slot:opreation="scope">
+                <el-button size="mini" type="text" @click="add(scope.data)">添 加</el-button>
+              </template>
+            </tableList>
+          </el-col>
+        </el-row>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import tableList from '@/components/table/index5'
+import uploadAllData from '@/components/uploadAllData/index'
+export default {
+  name: "addProjectTemp",
+  props:['param'],
+  components:{tableList,uploadAllData},
+  data() {
+    return {
+      dialogVisible:false,
+      tablecols:[],
+      list:[],
+      items:[]
+    }
+  },
+  methods:{
+    onShow(){
+      this.dialogVisible = true
+      this.listData()
+    },
+    async listData(){
+      const res = await this.$api.requested(this.param)
+      this.list = res.data
+    },
+    add(val){
+      this.dialogVisible = false
+      this.$emit('add',val.sa_projectid)
+    },
+    checkboxCallBack(val){
+      console.log(val)
+      this.items = val
+    },
+    adds(){
+      let addItems = []
+      addItems = this.items.map(item=>{
+        return {
+          "sa_salesforecastprojectid": 0,
+          "ownerid": item.sa_projectid,
+          "discountrate": 0.1
+        }
+      })
+      this.dialogVisible = false
+      this.$emit('adds',addItems)
+    }
+  },
+  created() {
+    this.tablecols = this.tool.tabelCol(this.$route.name).addProject.tablecols
+  },
+}
+</script>
+
+<style scoped>
+
+</style>

+ 72 - 0
src/template/prediction/table.vue

@@ -0,0 +1,72 @@
+<template>
+  <div>
+    <el-table ref="table" @selection-change="selectionChange" :header-cell-style="{height:'40px','color':'#333333'}" :row-class-name="tableClassName" highlight-current-row :data="data"  size="mini" :height="height" @row-click="rowClick" style="width:100%;min-height:300px;"  border >
+      <el-table-column
+          type="selection"
+          width="55"  fixed>
+      </el-table-column>
+      <el-table-column v-for="col in layout" :key="col.tablecolid" :prop="col.columnname" :label="col.title" :width="width && col.width === 0 ? 150 : col.width" :fixed="fixedName ? fixedName.indexOf(col.columnname)!= -1?'right':false : false">
+        <template slot-scope="scope">
+          <div class="table-panel" style="color: #333333">
+            <!-- 自定义表格显示内容 -->
+            <slot v-if="custom" name="customcol" :column="{data:scope.row,columnname:col.columnname}"></slot>
+            <!-- 否则就是默认 -->
+            <span v-else>{{scope.row[col.columnname]}}</span>
+            <!-- 操作结构内容 -->
+            <slot v-if="col.columnname === 'operation'" name="opreation" :data="scope.row"></slot>
+          </div>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+import {mapGetters} from "vuex"
+export default {
+  /*
+    layout:表结构数据;
+    data:表渲染数据;
+    custom:是否启用自定义结构;
+    opwidth:操作列宽度
+  */
+  props:['layout','data','custom','height','checkbox','height','fixedName','width'],
+  data () {
+    return {
+      list:[],
+    }
+  },
+  computed:{
+    ...mapGetters({
+      loading:'loading'
+    })
+  },
+  methods:{
+    rowClick (row) {
+      console.log(row,'勾选')
+      this.$emit('rowClick',row)
+    },
+    tableClassName ({row,rowIndex}) {
+      row.index = rowIndex
+    },
+    selectionChange(val) {
+      this.$emit('checkboxCallBack',val)
+    },
+    isCheck(row,rowIndex) {
+      if (!row.status) return true
+      if(row.status == '待跟进' || row.status == '跟进中' || row.projectnum) {
+        return true
+      } else {
+        return false
+      }
+    },
+
+  },
+  mounted () {
+    // this.listData()
+  }
+}
+
+</script>
+<style>
+</style>

+ 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