Prechádzať zdrojové kódy

出货开票预测管理,项目项目预测管理、销售预测设置调整

qymljy 2 rokov pred
rodič
commit
ee7746102b

+ 2 - 2
src/HDrpManagement/invoicePredictionManage/details/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <newDetails :titleText="mainData.title" :mainAreaData="mainAreaData" idname="sa_salesforecastbillid" :editData="mainData" :tabs="['订单','项目','客户']">
+    <newDetails ref="newDetails" :titleText="mainData.title" :mainAreaData="mainAreaData" idname="sa_salesforecastbillid" :editData="mainData" :tabs="['订单','项目','客户']">
       <template #bottomLeft>
         <div style="height: calc(100vh - 180px)">
           <div style="display: flex;justify-content: space-between;">
@@ -98,7 +98,7 @@
         </div>
       </template>
       <div slot="slot0" class=" normal-panel">
-        <orderList @onSuccess="onSuccess" :id="$route.query.id"  :isDisabled="mainData.status === '进行中'?false:true" :data="mainData"></orderList>
+        <orderList @onSuccess="onSuccess" :id="$route.query.id"  :isDisabled="mainData.status === '进行中'?false:true" :data="mainData" ></orderList>
       </div>
       <div slot="slot1" class=" normal-panel">
         <projectList @onSuccess="onSuccess" :id="$route.query.id"  :isDisabled="mainData.status === '进行中'?false:true"></projectList>

+ 15 - 2
src/HDrpManagement/invoicePredictionManage/details/modules/order.vue

@@ -61,7 +61,7 @@
       </el-pagination>
     </div>
     <!-- 产品   -->
-    <div style="margin-top: 60px;">
+    <div :style="{marginTop:'60px'}">
       <div >
         <el-button @click="delAllProduct" :type="productList.length === 0?'':'primary'" size="small" v-if="!isDisabled && tool.checkAuth($route.name,'order')" :disabled="productList.length === 0">一键删除</el-button>
         <el-button v-if="!isDisabled && tool.checkAuth($route.name,'order')" :type="productItems.length > 0?'primary':''" size="small" @click="delProducts" class="inline-16" :disabled="productItems.length === 0">删 除</el-button>
@@ -263,7 +263,8 @@ export default {
       productItems:[],
       selectProduct:[],
       selectOrder:[],
-      unoutamountOrder:0
+      unoutamountOrder:0,
+      widthNew:0
     }
   },
   methods:{
@@ -666,6 +667,18 @@ export default {
   },
   mounted() {
     this.listData()
+    this.widthNew = window.innerWidth
+  },
+  watch: {
+    width(newWidth) {
+      console.log('浏览器宽度变化为订单:', newWidth)
+    },
+    immediate: true,
+    handler() {
+      window.addEventListener('resize', () => {
+        this.widthNew = window.innerWidth
+      })
+    }
   },
   created() {
     this.tablecolsAdd = this.tool.tabelCol(this.$route.name).orderAddTable.tablecols

+ 10 - 9
src/HDrpManagement/invoiceapp/detail/tab/blueInvoice/index.vue

@@ -17,8 +17,8 @@
       <el-row :gutter="20">
         <el-form :model="form" :rules="rules" ref="form" label-width="90px" label-position="right" size="mini">
           <el-col :span="24">
-            <el-form-item label="单号" prop="billinfono">
-              <el-input v-model="form.billinfono" placeholder="单号"></el-input>
+            <el-form-item label="单号" prop="invoiceserialnum">
+              <el-input v-model="form.invoiceserialnum" placeholder="单号"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="24">
@@ -51,13 +51,13 @@ export default {
       sa_invoicebillid:0,
       selectData:[],
       form: {
-        "sa_invoicebillids":[],
-        "billinfono":"",
+        "sa_invoicebillid":'',
+        "invoiceserialnum":"",
         "remarks":""
       },
       dialogFormVisible:false,
       rules:{
-        billinfono:[
+        invoiceserialnum:[
           { required: true, message: '请输入单号', trigger: 'blur'},
         ],
       }
@@ -133,11 +133,12 @@ export default {
     },
     // 红冲蓝字发票
     async blueInvioceToRed () {
-      this.form.sa_invoicebillids = this.selectData.map(e=>{
+      this.form.sa_invoicebillid = this.selectData[0].sa_invoicebillid
+      /*this.form.sa_invoicebillids = this.selectData.map(e=>{
         return e.sa_invoicebillid
-      })
+      })*/
       const res = await this.$api.requested({
-        "id": "20221226091503",
+        "id": "20231114143603",
         "content": this.form
       })
       this.tool.showMessage(res,()=>{
@@ -153,4 +154,4 @@ export default {
 
 </script>
 <style>
-</style>
+</style>

+ 8 - 5
src/HDrpManagement/predictionRule/index.vue

@@ -3,10 +3,11 @@
     <basicLayout
         style="padding-top:0 !important"
         ref="basicLayout"
-        formPath="predictionRule"
         tableName="predictionRuleTable"
         idName="sa_salesforecastmodelid"
         :apiId="{query:20230705144004,del:''}"
+        :oldFormPath="{add:'HDrpManagement/predictionRule/modules'}"
+        :isExport="false"
     >
       <template v-slot:tbList="scope">
         <p v-if="scope.data.column.columnname === 'periodpoint'">
@@ -35,10 +36,11 @@
         </p>
       </template>
       <template v-slot:tbOpreation="scope">
-        <editWeek class="inline-16" :data="scope.data.data" v-if="scope.data.data.periodtype == '周'" @onEdit="onEdit" title="周预测设置"></editWeek>
-        <editMonth class="inline-16" :data="scope.data.data" v-if="scope.data.data.periodtype == '月'" @onEdit="onEdit" title="月预测设置"></editMonth>
+<!--        <editWeek class="inline-16" :data="scope.data.data" v-if="scope.data.data.periodtype == '周'" @onEdit="onEdit" title="周预测设置"></editWeek>
+        <editMonth class="inline-16" :data="scope.data.data" v-if="scope.data.data.periodtype == '月'" @onEdit="onEdit" title="月预测设置"></editMonth>-->
+        <edit class="inline-16" :data="scope.data.data" @onSuccess="onEdit" v-if="tool.checkAuth($route.name,'update')"></edit>
         <details_wm class="inline-16" :data="scope.data.data" ></details_wm>
-        <el-button size="mini" type="text" @click="onChange(scope.data.data)">{{scope.data.data.status === '开启'?'关闭':'开启'}}</el-button>
+        <el-button size="mini" type="text" @click="onChange(scope.data.data)" v-if="tool.checkAuth($route.name,'update')">{{scope.data.data.status === '开启'?'关闭':'开启'}}</el-button>
       </template>
     </basicLayout>
   </div>
@@ -48,9 +50,10 @@
 import editWeek from './modules/editWeek'
 import editMonth from "@/HDrpManagement/predictionRule/modules/editMonth";
 import details_wm from './modules/details'
+import edit from './modules/edit'
 export default {
   name: "index",
-  components:{editWeek,editMonth,details_wm},
+  components:{editWeek,editMonth,details_wm,edit},
   data(){
     return {
 

+ 621 - 0
src/HDrpManagement/predictionRule/modules/add.vue

@@ -0,0 +1,621 @@
+<template>
+  <div>
+    <el-button size="small" type="primary" @click="onShow">新 建</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="periodtype">
+                <el-radio v-model="form.periodtype" label="周" @change="selectType">周预测</el-radio>
+                <el-radio v-model="form.periodtype" label="月" @change="selectType">月预测</el-radio>
+              </el-form-item>
+            </el-col>
+            <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.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="end">
+                <el-select v-model="form.end" placeholder="请选择" style="width: 100%" clearable >
+                  <el-option
+                      v-for="item in selectDay"
+                      :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="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="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="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="status" 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: "addRule",
+  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": 0,
+        "remarks": "",
+        "periodpoint": [],
+        "taskdays":[],
+        "sales":[],
+        "roles":[],
+        "departments":[],
+        "status":"关闭",
+        "start":'',
+        "end":'',
+        "periodtype":'周'
+      },
+      rules:{
+        end:[
+          { required: true, validator:endtTime, trigger: 'change'},
+        ],
+        periodpoint:[
+          { required: true, message: '请选择预测周期', trigger: 'change'},
+        ],
+        start:[
+          { required: true, validator:startTime, trigger: 'change'},
+        ],
+        periodtype:[
+          { required: true, message: '请选择预测类型', trigger: 'change'},
+        ],
+        status:[
+          { required: true, message: '请选择预测状态', 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:{
+    onShow(){
+      this.dialogVisible = true
+      this.departmentList()
+      this.roleList()
+    },
+    /*获取已选部门数据*/
+    async queryDepartment(){
+      this.departmentids = []
+      const res = await this.$api.requested({
+        "id": "20230705144404",
+        "content": {
+          "sa_salesforecastmodelid":0,
+          "where":{
+            "condition":""
+          }
+        }
+      })
+      this.depData = res.data
+      this.form.departments = this.depData.map(item=>item.departmentid)
+    },
+    /*获取已选组织内人员*/
+    async queryPerson(){
+      this.hrids = []
+      const res = await this.$api.requested({
+        "id": "20230705144204",
+        "content": {
+          "sa_salesforecastmodelid":0,
+          "where":{
+            "condition":""
+          }
+        }
+      })
+      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":0,
+          "where":{
+            "condition":""
+          }
+        }
+      })
+      this.form.roles = res.data.map(item=>item.roleid)
+    },
+    /*获取所有部门*/
+    async departmentList(){
+      const res = await this.$api.requested({
+        "classname": "webmanage.department.department",
+        "method": "querydepartment",
+        "content": {
+        }
+      })
+      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": ""
+          }
+        }
+      })
+      this.listPerson = res.data
+    },
+    /*获取所有权限*/
+    async roleList(){
+      const res = await this.$api.requested({
+        "id": "20221101131902",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 100,
+          "where": {
+            "condition": ""
+          }
+        }
+      })
+      this.listRole = res.data
+    },
+    /* 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
+           }
+         }
+       }
+     },*/
+    daySet(){
+      for (var i=0;i<=30;i++){
+        this.selectDay[i] = i + 1
+      }
+    },
+    async queryData(){
+      this.param.content.sa_salesforecastmodelid = 0
+      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]
+    },
+    selectDepartmentFun(val){
+      let addDep = []
+      addDep[0] = val.departmentid
+      this.form.departments = this.form.departments.concat(addDep)
+      this.depData = this.depData.concat(val)
+    },
+    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)
+          this.depData.splice(i,1)
+        }
+
+      }
+    },
+    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)
+          this.personData.splice(i,1)
+          break
+        }
+      }
+    },
+    selectPeople(val){
+      console.log(val)
+      let addPerson = []
+      addPerson = val.map(item=>item.hrid)
+      this.form.sales = this.form.sales.concat(addPerson)
+      this.personData = this.personData.concat(val)
+    },
+    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('onSuccess')
+        })
+
+      })
+
+    },
+    onClose(){
+      this.dialogVisible = false
+      this.$refs.form.resetFields()
+      this.form = {
+        "sa_salesforecastmodelid": 0,
+        "remarks": "",
+        "periodpoint": [],
+        "taskdays":[],
+        "sales":[],
+        "roles":[],
+        "departments":[],
+        "status":"关闭",
+        "start":'',
+        "end":'',
+        "periodtype":'周'
+      }
+      this.depData = []
+      this.personData = []
+    },
+    /*选择类型*/
+    selectType(){
+      this.form.start = ''
+      this.form.end = ''
+      this.form.periodpoint = []
+      if (this.form.periodtype === '月'){
+        for (var i=0;i<=30;i++){
+          this.selectDay[i] = {
+            value:i + 1,
+            label:i + 1
+          }
+        }
+        this.selectCycle=[
+          {
+            value:'本月',
+            label:'本月'
+          },
+          {
+            value:'次月',
+            label:'次月'
+          },
+          {
+            value:'次次月',
+            label:'次次月'
+          },
+          {
+            value:'下半月',
+            label:'下半月'
+          },
+          {
+            value:'下下半月',
+            label:'下下半月'
+          },
+        ]
+      }else {
+        this.selectDay=[
+          {
+            value:1,
+            label:'周一'
+          },
+          {
+            value:2,
+            label:'周二'
+          },
+          {
+            value:3,
+            label:'周三'
+          },
+          {
+            value:4,
+            label:'周四'
+          },
+          {
+            value:5,
+            label:'周五'
+          },
+          {
+            value:6,
+            label:'周六'
+          },
+          {
+            value:7,
+            label:'周日'
+          },
+        ]
+        this.selectCycle=[
+          {
+            value:'本周',
+            label:'本周'
+          },
+          {
+            value:'次周',
+            label:'次周'
+          },
+          {
+            value:'次次周',
+            label:'次次周'
+          },
+        ]
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 613 - 4
src/HDrpManagement/predictionRule/modules/details.vue

@@ -1,25 +1,633 @@
 <template>
   <div>
     <el-button size="mini" type="text"  @click="onShow">详 情</el-button>
-    <editWeek :data="data" ref="editWeek" v-if="data.periodtype == '周'" :isDetail="true" title="周预测详情"></editWeek>
-    <editMonth :data="data" ref="editWeek" v-if="data.periodtype == '月'" :isDetail="true" title="月预测详情"></editMonth>
+    <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="periodtype">
+                <el-radio v-model="form.periodtype" label="周" @change="selectType" :disabled="true">周预测</el-radio>
+                <el-radio v-model="form.periodtype" label="月" @change="selectType" :disabled="true">月预测</el-radio>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="开始时间:" prop="start">
+                <el-select v-model="form.start" placeholder="请选择" style="width: 100%" clearable :disabled="true">
+                  <el-option
+                      v-for="item in selectDay"
+                      :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="end">
+                <el-select v-model="form.end" placeholder="请选择" style="width: 100%" clearable :disabled="true">
+                  <el-option
+                      v-for="item in selectDay"
+                      :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="periodpoint">
+                <el-select v-model="form.periodpoint" placeholder="请选择" style="width: 100%" multiple clearable :disabled="true">
+                  <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 v-if="false"  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="pardepname"
+                    label="上级部门">
+                </el-table-column>
+                <el-table-column
+                    label="操作">
+                  <template slot-scope="scope">
+                    <el-button type="text" size="mini" @click="delDepartment(scope.row)" :disabled="true">删 除</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 v-if="false" :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)" :disabled="true">删 除</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 :disabled="true">
+                  <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="status" style="margin: 10px 0px 0px 0px">
+                <el-radio v-model="form.status" label="开启" :disabled="true">开启</el-radio>
+                <el-radio v-model="form.status" label="关闭" :disabled="true">关闭</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 editWeek from './editWeek'
 import editMonth from './editMonth'
+import addDepartment from './addDepartment'
+import addPeople from './addPeople'
 export default {
   name: "details_wm",
   props:['data'],
-  components:{editWeek,editMonth},
+  components:{editWeek,editMonth,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": 0,
+        "remarks": "",
+        "periodpoint": [],
+        "taskdays":[],
+        "sales":[],
+        "roles":[],
+        "departments":[],
+        "status":"开启",
+        "start":'',
+        "end":'',
+        "periodtype":'周'
+      },
+      rules:{
+        end:[
+          { required: true, validator:endtTime, trigger: 'change'},
+        ],
+        periodpoint:[
+          { required: true, message: '请选择预测周期', trigger: 'change'},
+        ],
+        start:[
+          { required: true, validator:startTime, trigger: 'change'},
+        ],
+        periodtype:[
+          { required: true, message: '请选择预测类型', trigger: 'change'},
+        ],
+        status:[
+          { required: true, message: '请选择预测状态', 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:{
     onShow(){
-      this.$refs.editWeek.onEdit()
+      this.dialogVisible = true
+      this.departmentList()
+      this.roleList()
+      this.queryData()
+      this.queryDepartment()
+      this.queryPerson()
+      this.queryRole()
+    },
+    /*获取已选部门数据*/
+    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
+      if (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":""
+          }
+        }
+      })
+      this.personData = res.data
+      if (this.personData){
+        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":""
+          }
+        }
+      })
+      if (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": {
+        }
+      })
+      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": ""
+          }
+        }
+      })
+      this.listPerson = res.data
+    },
+    /*获取所有权限*/
+    async roleList(){
+      const res = await this.$api.requested({
+        "id": "20221101131902",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 100,
+          "where": {
+            "condition": ""
+          }
+        }
+      })
+      this.listRole = res.data
+    },
+    /* 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
+           }
+         }
+       }
+     },*/
+    daySet(){
+      for (var i=0;i<=30;i++){
+        this.selectDay[i] = i + 1
+      }
+    },
+    async queryData(){
+      console.log(this.data,'data')
+      /*const res = await this.$api.requested(this.param)*/
+      this.form = Object.assign({},this.form,this.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]
+    },
+    selectDepartmentFun(val){
+      console.log(val,'部门')
+      let addDep = []
+      addDep[0] = val.departmentid
+      this.form.departments = this.form.departments.concat(addDep)
+      this.depData = this.depData.concat(val)
+      /*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)
+          this.depData.splice(i,1)
+        }
+
+      }
+    },
+    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)
+          this.personData.splice(i,1)
+          break
+        }
+      }
+    },
+    selectPeople(val){
+      console.log(val)
+      let addPerson = []
+      addPerson = val.map(item=>item.hrid)
+      this.form.sales = this.form.sales.concat(addPerson)
+      this.personData = this.personData.concat(val)
+    },
+    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('onSuccess')
+        })
+
+      })
+
+    },
+    onClose(){
+      this.dialogVisible = false
+      this.$refs.form.resetFields()
+    },
+    /*选择类型*/
+    selectType(){
+      console.log(this.form.periodtype)
+      if (this.form.periodtype === '月'){
+        for (var i=0;i<=30;i++){
+          this.selectDay[i] = {
+            value:i + 1,
+            label:i + 1
+          }
+        }
+        this.selectCycle=[
+          {
+            value:'本月',
+            label:'本月'
+          },
+          {
+            value:'次月',
+            label:'次月'
+          },
+          {
+            value:'次次月',
+            label:'次次月'
+          },
+          {
+            value:'下半月',
+            label:'下半月'
+          },
+          {
+            value:'下下半月',
+            label:'下下半月'
+          },
+        ]
+      }else {
+        this.selectDay=[
+          {
+            value:1,
+            label:'周一'
+          },
+          {
+            value:2,
+            label:'周二'
+          },
+          {
+            value:3,
+            label:'周三'
+          },
+          {
+            value:4,
+            label:'周四'
+          },
+          {
+            value:5,
+            label:'周五'
+          },
+          {
+            value:6,
+            label:'周六'
+          },
+          {
+            value:7,
+            label:'周日'
+          },
+        ]
+        this.selectCycle=[
+          {
+            value:'本周',
+            label:'本周'
+          },
+          {
+            value:'次周',
+            label:'次周'
+          },
+          {
+            value:'次次周',
+            label:'次次周'
+          },
+        ]
+      }
     }
   }
 }
@@ -28,3 +636,4 @@ export default {
 <style scoped>
 
 </style>
+

+ 621 - 0
src/HDrpManagement/predictionRule/modules/edit.vue

@@ -0,0 +1,621 @@
+<template>
+  <div>
+    <el-button  size="small" type="text" @click="onShow" :disabled="data.status === '开启'">编 辑</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="periodtype">
+                <el-radio v-model="form.periodtype" label="周" @change="selectType">周预测</el-radio>
+                <el-radio v-model="form.periodtype" label="月" @change="selectType">月预测</el-radio>
+              </el-form-item>
+            </el-col>
+            <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.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="end">
+                <el-select v-model="form.end" placeholder="请选择" style="width: 100%" clearable >
+                  <el-option
+                      v-for="item in selectDay"
+                      :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="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="pardepname"
+                    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="roles">
+                <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="status" 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: "editRule",
+  props:["data","isDetail"],
+  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": 0,
+        "remarks": "",
+        "periodpoint": [],
+        "taskdays":[],
+        "sales":[],
+        "roles":[],
+        "departments":[],
+        "status":"开启",
+        "start":'',
+        "end":'',
+        "periodtype":'周'
+      },
+      rules:{
+        end:[
+          { required: true, validator:endtTime, trigger: 'change'},
+        ],
+        periodpoint:[
+          { required: true, message: '请选择预测周期', trigger: 'change'},
+        ],
+        start:[
+          { required: true, validator:startTime, trigger: 'change'},
+        ],
+        periodtype:[
+          { required: true, message: '请选择预测类型', trigger: 'change'},
+        ],
+        status:[
+          { required: true, message: '请选择预测状态', 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:{
+    onShow(){
+      this.dialogVisible = true
+      this.departmentList()
+      this.queryData()
+      this.queryDepartment()
+      this.queryPerson()
+      this.queryRole()
+      this.roleList()
+    },
+    /*获取已选部门数据*/
+    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
+      if (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":""
+          }
+        }
+      })
+      this.personData = res.data
+      if (this.personData){
+        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":""
+          }
+        }
+      })
+      if (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": {
+        }
+      })
+      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": ""
+          }
+        }
+      })
+      this.listPerson = res.data
+    },
+    /*获取所有权限*/
+    async roleList(){
+      const res = await this.$api.requested({
+        "id": "20221101131902",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 100,
+          "where": {
+            "condition": ""
+          }
+        }
+      })
+      this.listRole = res.data
+    },
+    /* 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
+           }
+         }
+       }
+     },*/
+    daySet(){
+      for (var i=0;i<=30;i++){
+        this.selectDay[i] = i + 1
+      }
+    },
+    async queryData(){
+      /*const res = await this.$api.requested(this.param)*/
+      this.form = Object.assign({},this.form,this.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]
+    },
+    selectDepartmentFun(val){
+      let addDep = []
+      addDep[0] = val.departmentid
+      this.form.departments = this.form.departments.concat(addDep)
+      this.depData = this.depData.concat(val)
+    },
+    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)
+          this.depData.splice(i,1)
+        }
+
+      }
+    },
+    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)
+          this.personData.splice(i,1)
+          break
+        }
+      }
+    },
+    selectPeople(val){
+      let addPerson = []
+      addPerson = val.map(item=>item.hrid)
+      this.form.sales = this.form.sales.concat(addPerson)
+      this.personData = this.personData.concat(val)
+    },
+    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('onSuccess')
+        })
+
+      })
+
+    },
+    onClose(){
+      this.dialogVisible = false
+      this.$refs.form.resetFields()
+      /*this.form = []
+      this.form.sa_salesforecastmodelid = 0
+      this.depData = []
+      this.personData = []*/
+    },
+    /*选择类型*/
+    selectType(){
+      this.form.start = ''
+      this.form.end = ''
+      this.form.periodpoint = []
+      if (this.form.periodtype === '月'){
+        for (var i=0;i<=30;i++){
+          this.selectDay[i] = {
+            value:i + 1,
+            label:i + 1
+          }
+        }
+        this.selectCycle=[
+          {
+            value:'本月',
+            label:'本月'
+          },
+          {
+            value:'次月',
+            label:'次月'
+          },
+          {
+            value:'次次月',
+            label:'次次月'
+          },
+          {
+            value:'下半月',
+            label:'下半月'
+          },
+          {
+            value:'下下半月',
+            label:'下下半月'
+          },
+        ]
+      }else {
+        this.selectDay=[
+          {
+            value:1,
+            label:'周一'
+          },
+          {
+            value:2,
+            label:'周二'
+          },
+          {
+            value:3,
+            label:'周三'
+          },
+          {
+            value:4,
+            label:'周四'
+          },
+          {
+            value:5,
+            label:'周五'
+          },
+          {
+            value:6,
+            label:'周六'
+          },
+          {
+            value:7,
+            label:'周日'
+          },
+        ]
+        this.selectCycle=[
+          {
+            value:'本周',
+            label:'本周'
+          },
+          {
+            value:'次周',
+            label:'次周'
+          },
+          {
+            value:'次次周',
+            label:'次次周'
+          },
+        ]
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

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

@@ -1,5 +1,5 @@
 <template>
-  <div style="min-width:1460px">
+  <div style="min-width:1272px">
     <div style="margin:10px 10px 0 10px;border-radius:5px;position:relative" class="container normal-panel sticky" >
       <div class="flex-align-start flex-between normal-margin" style="flex-wrap:nowrap">
         <div>
@@ -18,12 +18,12 @@
       </div>
     </div>
     <el-row >
-      <el-col :span="8">
+      <el-col :span="multipleSize>1512?8:9">
         <div style="margin:10px 5px 0 10px;border-radius:5px;position:relative;" class="container normal-panel sticky" >
           <slot name="bottomLeft"></slot>
         </div>
       </el-col>
-      <el-col :span="16">
+      <el-col :span="multipleSize>1512?16:15">
         <div  >
           <div style="margin:10px 10px 0 5px;border-radius:5px;" class="container normal-panel sticky" >
             <slot name="bottomRight"></slot>
@@ -53,7 +53,6 @@ export default {
     return {
       screenWidth: 0, // 存储当前屏幕的宽度
       multipleSize: 0, // 根据屏幕宽度计算得出的值
-      width:0
     }
   },
   methods:{
@@ -70,24 +69,14 @@ export default {
     window.addEventListener("resize", this.handleResize);
     // 初始化屏幕宽度
     this.screenWidth = window.innerWidth;
-    this.width = window.innerWidth
     console.log(this.screenWidth,'屏幕宽度')
-    console.log(this.width,'浏览器宽度')
   },
   watch: {
     screenWidth(newWidth) {
       // 根据新的屏幕宽度计算 multipleSize 属性的值
       this.multipleSize = newWidth / 3;
+      console.log(this.multipleSize)
     },
-    width(newWidth) {
-      console.log('浏览器宽度变化为:', newWidth)
-    },
-    immediate: true,
-    handler() {
-      window.addEventListener('resize', () => {
-        this.width = window.innerWidth
-      })
-    }
   },
 
   computed:{

+ 11 - 9
src/components/normal-basic-layout/index.vue

@@ -51,20 +51,22 @@
              <template v-slot:temp="scope">
               <slot name="tempChild" :data="scope.data"></slot>
             </template>
-            
+
             <template v-slot:customcol="scope">
               <slot :data="scope" name="tbList"></slot>
             </template>
 
             <template v-slot:opreation="scope">
+
               <drawerTemp class="inline-16" v-if="detailPath && checkRowStatus(scope.data.status)" :data="scope.data" :detailPath="detailPath" :idName="idName" @onSuccess="listData"></drawerTemp>
+              <slot :data="scope" name="tbOpreation"></slot>
               <!--systemappid != 163 排除报表应用-->
               <reportCenter class="inline-16"  size="mini" :data="reportCenterLsit.filter(item => item.type == 'printinfo')" v-if="reportCenterLsit.filter(item => item.type == 'printinfo').length > 0 && systemappid != 163">
                 <template v-slot:print="scope2">
                   <el-button @click="printBtn(scope.data,scope2.data)" type="text" size="mini">打 印</el-button>
                 </template>
               </reportCenter>
-              <slot :data="scope" name="tbOpreation"></slot>
+
             </template>
           </tableTemp>
           <div style="display:flex;align-items:center;flex-direction:row-reverse;justify-content:space-between">
@@ -82,7 +84,7 @@
             </div>
             <slot name="footerLeft"></slot>
           </div>
-          
+
         </div>
       </div>
     </div>
@@ -216,12 +218,12 @@ export default {
           this.listData()
         })
       }).catch((err) => {
-        
+
         console.log(err)
         this.$message({
           type: 'info',
           message: '已取消删除'
-        });          
+        });
       });
     },
     onFixedClick (right,left) {
@@ -259,7 +261,7 @@ export default {
       } else {
         return true
       }
-			
+
 		},
     onHeaderSearch (key,val) {
       this.param.content.pageNumber = 1
@@ -289,7 +291,7 @@ export default {
         }
       })
       this.tool.showMessage(res,() => {
-        window.open(this.tool.getBaseUrl() + res.data + `&${this.idName}=${data[this.idName]}`)  
+        window.open(this.tool.getBaseUrl() + res.data + `&${this.idName}=${data[this.idName]}`)
       })
     },
     clearSearchValue () {
@@ -314,7 +316,7 @@ export default {
     } catch (error) {
       console.log(error)
     }
-   
+
   }
 }
 
@@ -348,4 +350,4 @@ export default {
 .flex-wrap {
   flex-wrap: wrap;
 }
-</style>
+</style>