bob
2020-08-13 801770456ae3750a44e0989b0025a98ccbad24e6
src/components/popup/newProject.vue
@@ -5,14 +5,39 @@
       <el-step title="方案设计" description="确立方案"></el-step>
       <el-step title="预览" description=""></el-step>
     </el-steps>
     <div style="height: 45vh; padding:0px; box-sizing:boder-box; overflow: auto;">
     <div style="height: 400px; padding:0px; box-sizing:boder-box; overflow: auto;">
       <div v-if="add_Step == 0" style="width: 100%; height: 100%;" align="center">
        <div style="padding-top: 5%; box-sizing:boder-box">
               <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
                 <el-form-item label="项目名称:" prop="name" style="width: 50%;">
                   <el-input v-model="ruleForm.name"></el-input>
               <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="120px" class="demo-ruleForm">
                  <el-form-item label="项目号:" prop="code" style="width: 50%;">
                    <el-input v-model="ruleForm.code"></el-input>
                  </el-form-item>
                 <el-form-item label="项目名称:" style="width: 50%;">
                   <el-input v-model="ruleForm.name" disabled></el-input>
                 </el-form-item>
                 <el-form-item label="研究目的:" prop="objective" style="width: 50%;">
                  <el-form-item label="研究类型分类:" prop="type_array" style="width: 50%;">
                     <el-select @change="typeArrayChange_" multiple  v-model="ruleForm.type_array" style="width: 100%;">
                        <el-option
                           v-for="(item,k) in options_type"
                           :key="k"
                           :label="item"
                           :value="item"
                        ></el-option>
                     </el-select>
                  </el-form-item>
                  <el-form-item label="研究目的分类:" prop="order_type_array" style="width: 50%;">
                     <el-select @change="order_typeArrayChange_" multiple  v-model="ruleForm.order_type_array" style="width: 100%;">
                        <el-option
                           v-for="(item,k) in options_order_type"
                           :key="k"
                           :label="item"
                           :value="item"
                        ></el-option>
                     </el-select>
                  </el-form-item>
                 <!-- <el-form-item label="研究目的:" prop="objective" style="width: 50%;">
                   <el-select v-model="ruleForm.objective" placeholder="请选择" style="width: 100%;">
                     <el-option
                        v-for="item in options_objectives"
@@ -21,9 +46,10 @@
                        :value="item.value"
                     ></el-option>
                   </el-select>
                 </el-form-item>
                 </el-form-item> -->
                  
                 <el-form-item label="起止时间:" prop="items" style="width: 50%;">
                        <!-- :picker-options="pickerOptions01" -->
                     <el-date-picker
                        v-model="ruleForm.items"
                        type="daterange"
@@ -35,9 +61,41 @@
                     </el-date-picker>
                 </el-form-item>
                  
                 <el-form-item label="项目描述:" prop="desp" style="width: 50%;">
                   <el-input type="textarea" v-model="ruleForm.desp"></el-input>
                 <el-form-item label="项目引进人:" prop="leadUserList" style="width: 50%;">
                     <el-cascader
                           style="width: 100%;"
                         :options="options_leadUserId"
                         :props="props_"
                           @change="leadUserIdChange"
                           v-model="ruleForm.leadUserList"
                         clearable>
                     </el-cascader>
                 </el-form-item>
                  <el-form-item label="项目负责人:" style="width: 50%;">
                     <el-cascader
                        style="width: 100%;"
                        :options="options_charge"
                        @change="chargeArrayChange_"
                        :props="{ expandTrigger: 'hover' }"
                        v-model="ruleForm.charge_id_array"
                        placeholder="请选择负责人"
                        >
                     </el-cascader>
                     <!-- <el-select @change="chargeArrayChange_" v-model="ruleForm.charge_id_array" style="width: 100%;">
                        <el-option
                           v-for="(item,k) in options_charge"
                           :key="k"
                           :label="item.label"
                           :value="item.value"
                        ></el-option>
                     </el-select> -->
                  </el-form-item>
                  <el-form-item label="项目描述:" prop="desc" style="width: 50%;">
                    <el-input type="textarea" v-model="ruleForm.desc"></el-input>
                  </el-form-item>
               </el-form>
        </div>
      </div>
@@ -45,7 +103,8 @@
            <substep ref="substep_zj" v-bind:xmId="xmId" v-bind:totalItems="totalItems"></substep>
      </div>
      <div v-if="add_Step == 2" style="width: 100%; height: 100%;" align="center">
        <substepReadOnly v-bind:form_objs="form_objs" v-bind:showData_="showData_"></substepReadOnly>
        <!-- <substepReadOnly v-bind:form_objs="form_objs" v-bind:showData_="showData_"></substepReadOnly> -->
        <substepReadOnly v-bind:xmId="xmId"></substepReadOnly>
      </div>
    </div>
       
@@ -74,7 +133,70 @@
      substepReadOnly
   },
  data () {
      var validateTtems = (rule, value, callback) => {
               if (value && value.length > 1) {
                  let a1 = new Date(value[0]);
                  let a2 = new Date(this.ruleForm.items[1]);
                  if (this.rowData.beginDate && !this.rowData.endDate) {
                     let bb0 = new Date(this.rowData.beginDate);
                     let bb0str = this.$moment(bb0).format('YYYY-MM-DD');
                     if (a1 > bb0) {
                        callback(new Error('开始时间应小于' + bb0str));
                     }
                     else if (a2 < bb0) {
                        callback(new Error('结束时间应大于' + bb0str));
                     }
                  }
                  else if (this.rowData.beginDate && this.rowData.endDate) {
                     let bb0 = new Date(this.rowData.beginDate);
                     let bb1 = new Date(this.rowData.endDate);
                     let bb0str = this.$moment(bb0).format('YYYY-MM-DD');
                     let bb1str = this.$moment(bb1).format('YYYY-MM-DD');
                     if (a1 > bb0) {
                        callback(new Error('开始时间应小于' + bb0str));
                     }
                     else if (a2 < bb1) {
                        callback(new Error('结束时间应大于' + bb1str));
                     }
                  }
                  callback();
               }
               else {
                  callback(new Error('选择开始时间和结束时间'));
               }
        };
      var validateOrder_type_array = (rule, value, callback) => {
         if (this.isRules) {
            if (value && value.length > 0) {
               callback();
            }
            else {
               callback(new Error('不能为空'));
            }
         }
         else {
            callback();
         }
      };
      var validateType_array = (rule, value, callback) => {
         if (this.isRules) {
            if (value && value.length > 0) {
               callback();
            }
            else {
               callback(new Error('不能为空'));
            }
         }
         else {
            callback();
         }
      };
    return {
      props_: {multiple: true},
      userId: undefined,
      assign: undefined,
      add_Step: 0,
@@ -83,11 +205,36 @@
         loading_cancel: false,
         cancelName: "关 闭",
         
         //disabled_code: true,
         ruleForm: {},
         xmId: null,
         totalItems: null,
         showData_: null,
         form_objs: null,
         parttimeLists: null,
         options_leadUserId: [],
         options_charge: [],
         options_type:[
            "Health technology assessment (HTA)",
            "Clinical practice guideline (CPG)",
            "Evidence mapping",
            "Overview of review",
            "Scoping review",
            "Rapid review",
            "Systematic review",
            "Rapid review",
            "Randomised controlled trial (RCT)",
            "Other"
         ],
         options_order_type: [
            "治疗",
            "预防",
            "诊断与鉴别诊断",
            "预后",
            "病因",
            "疾病筛查"
         ],
         options_objectives: [
           {
             value: "干预性系统评价",
@@ -106,11 +253,35 @@
              label: "相关性系统评价"
            }
         ],
         isRules: false,
         rules: {
            code: [
              {
                required: true,
                message: "不能为空",
                trigger: ["change", "blur"]
              }
            ],
            name: [
              {
                required: true,
                message: "不能为空",
                trigger: ["change", "blur"]
              }
            ],
            type_array: [
              {
                required: true,
                //message: "不能为空",
                  validator: validateType_array,
                trigger: ["change", "blur"]
              }
            ],
            order_type_array: [
              {
                required: true,
                //message: "不能为空",
                  validator: validateOrder_type_array,
                trigger: ["change", "blur"]
              }
            ],
@@ -124,9 +295,10 @@
            items: [
               {
                  type: "array",
                  validator: validateTtems,
                  required: true,
                  message: "不能为空",
                  trigger: ["change", "blur"]
                  //message: "不能为空",
                  trigger: ["change"]
               }
            ]
            
@@ -134,15 +306,133 @@
         
      }
  },
   created() {
     this.getUsers();
      this.getUserCharge();
   },
mounted() {
   if(this.rowData.id) {
      this.ruleForm = this.rowData;
      this.xmId = this.rowData.id;
      let url = "/api/scheme/get/" + this.rowData.id;
      this.$axios.get(url).then(data_ => {
         window.console.log(data_);
         let selected_ = data_.data.data;
         if (selected_) {
            this.ruleForm = {
               id:selected_.id,
               desc:selected_.desc,
               name: selected_.name,
               beginDate: selected_.beginDate,
               endDate: selected_.endDate,
               objective:selected_.reseachType,
               leadUserId: selected_.leadUserId,
               leadUserList: selected_.leadUserList,
               code: selected_.code,
               type: selected_.type,
               orderType: selected_.orderType,
               chargeId: selected_.chargeId,
               charge_id_array: selected_.chargeId ? selected_.chargeId.split(";") : [],
               type_array: selected_.type ? selected_.type.split(";") : [],
               order_type_array: selected_.orderType ? selected_.orderType.split(";") : [],
               items:[this.$moment(selected_.startTime).format('YYYY-MM-DD'),this.$moment(selected_.endTime).format('YYYY-MM-DD')]
            }
         }
         //this.$refs.ruleForm.clearValidate();
      }).catch(error =>{
      })
   }
   this.userId = localStorage.getItem('userId');
   this.assign = localStorage.getItem('assign');
   else {
      this.ruleForm = this.rowData;
   }
   //this.userId = localStorage.getItem('userId');
   //this.assign = localStorage.getItem('assign');
   this.userId = this.$cookies.get('userId');
   this.assign = this.$cookies.get('assign');
},
  methods:{
      getUsers() {
        let me = this;
        let url = "/api/sysRoleMapping/all";
        this.$axios.get(url)
        .then(data_ => {
          let list = data_.data.data;
          let parId = "";
          let obj = {};
          let result = [];
          list.map(el => {
              obj[el.id] = el;
          })
          for(let i=0, len = list.length; i < len; i++) {
              let id = list[i].roleName;
              //设置显示字段
              list[i].value = list[i].id;
              list[i].label = list[i].name;
              if(id == parId || !id) {
                  if(!obj[list[i].id].children) {
                    obj[list[i].id].children = [];
                  }
                  result.push(list[i]);
                  continue;
              }
              if(obj[id].children) {
                  obj[id].children.push(list[i]);
              } else {
                  obj[id].children = [list[i]];
              }
          }
          me.options_leadUserId = result;
        }).catch(error =>{
        })
      },
      //options_charge
      getUserCharge() {
         let me = this;
         let url = "/api/sysRoleMapping/detail";
         this.$axios.get(url)
         .then(data_ => {
            let list = data_.data.data;
            let parId = "";
            let obj = {};
            let result = [];
            list.map(el => {
                  obj[el.id] = el;
            })
            for(let i=0, len = list.length; i < len; i++) {
                  let id = list[i].roleName;
                  //设置显示字段
                  list[i].value = list[i].id;
                  list[i].label = list[i].name;
                  if(id == parId || !id) {
                        if(!obj[list[i].id].children) {
                           obj[list[i].id].children = [];
                        }
                        result.push(list[i]);
                        continue;
                  }
                  if(obj[id].children) {
                        obj[id].children.push(list[i]);
                  } else {
                        obj[id].children = [list[i]];
                  }
            }
            me.options_charge = result;
         }).catch(error =>{
         })
      },
      Cancel() {
         this.add_Step = 0;
         this.nextStepName = "下一步";
@@ -164,6 +454,7 @@
      
      NextStep() {
         if (this.add_Step == 0) {
            this.isRules = true;
            let is_null1 = false;
            this.$refs['ruleForm'].validate((valid) => {
              if (valid) {
@@ -173,8 +464,9 @@
              }
            });
            if(is_null1) {
               this.isRules = false;
              this.loading_nextStep = true;
               this.saveStep1();
              this.loading_save = true;
            }
            
         //   this.xmId = "c3b7f55c800e4726b53fdc18dd994603";
@@ -191,39 +483,103 @@
      },
      
      saveStep1() {
         let me = this;
         //me.disabled_code = true;
         let ruleForm_ = this.ruleForm;
         var items1 = this.$moment(ruleForm_.items[0]).format('YYYY-MM-DD');
         var items2 = this.$moment(ruleForm_.items[1]).format('YYYY-MM-DD');
         //let items1 = new Date(ruleForm_.items[0]).Format("yyyy-MM-dd").toLocaleString();
      //   let items2 = new Date(ruleForm_.items[1]).Format("yyyy-MM-dd").toLocaleString();
         let listId = "";
         let params_ = {
            reseachType: ruleForm_.objective,
            code: ruleForm_.code,
            name: ruleForm_.name,
            startTime: items1,
            endTime: items2,
            id: me.xmId,
            desc:ruleForm_.desc,
            userId: me.userId,
            leadUserId: ruleForm_.leadUserId,
            type: ruleForm_.type,
            orderType: ruleForm_.orderType,
            chargeId: ruleForm_.chargeId
         };
         
         let url = "/api/scheme/addOrUpdate";
         let me = this;
         this.$axios.get(url,{
           params: {
             reseachType: ruleForm_.objective,
             name: ruleForm_.name,
               startTime: items1,
               endTime: items2,
               id: me.xmId,
               desp:ruleForm_.desp,
               userId: me.userId
           }
         }).then(data_ => {
            me.xmId = data_.data.data;
            me.totalItems = ruleForm_.items;
            me.add_Step = 1;
         }).catch(error =>{
         })
         if (this.rowData.parentid) {
            listId = this.rowData.parentid;
         }
         if (!me.xmId && this.rowData.parentid) {
            let url_ = "/api/scheme/addOrUpdate";
            this.$axios.post(url_,
              params_
            ).then(data_ => {
               if(data_.data.success) {
                  me.xmId = data_.data.data;
                  me.totalItems = ruleForm_.items;
                  let url = "/api/topic/exam/" + listId;
                  me.$axios.get(url,{
                     params: {
                        projectId: me.xmId
                     }
                  }).then(data_1 => {
                     if(data_1.data.success) {
                        me.loading_nextStep = false;
                        me.add_Step = 1;
                     }else {
                        me.$message({message:'创建项目失败', type: 'warning'});
                     }
                  }).catch(error => {
                  })
               }
               else {
                  me.loading_nextStep = false;
                  if (data_.data.status == "2004") {
                     //me.disabled_code = false;
                     me.$message({message:"项目号已存在", type: 'warning'});
                  }
                  else {
                     me.$message({message:data_.data.message, type: 'warning'});
                  }
               }
            }).catch(error =>{
            })
         }
         else {
            let url_ = "/api/scheme/addOrUpdate";
            this.$axios.post(url_,
              params_
            ).then(data_ => {
               if(data_.data.success) {
                  me.xmId = data_.data.data;
                  me.totalItems = ruleForm_.items;
                  me.add_Step = 1;
                  me.loading_nextStep = false;
               }
               else {
                  me.loading_nextStep = false;
                  if (data_.data.status == "2004") {
                     me.$message({message:"项目号已存在", type: 'warning'});
                  }
                  else {
                     me.$message({message:data_.data.message, type: 'warning'});
                  }
               }
            }).catch(error =>{
            })
         }
      },
      
      saveStep2() {
         this.showData_ = this.$refs.substep_zj.showData;
         this.form_objs = this.$refs.substep_zj.form_;
         this.parttimeLists = this.$refs.substep_zj.parttimeList_;
         
         let form_array = [];
         let is_null1 = true;
         let me = this;
         for (let itm_k in this.showData_) {
            let ref_k = "ref_" + itm_k;
            this.$refs.substep_zj.$refs[ref_k].validate((valid) => {
@@ -250,6 +606,27 @@
               form_obj.endTime = this.$moment(form_obj.endTime).format('YYYY-MM-DD');
            //   form_obj.endTime = new Date(form_obj.endTime).Format("yyyy-MM-dd").toLocaleString();
            }
            if (form_obj.createTime) {
               form_obj.createTime = this.$moment(form_obj.createTime).format('YYYY-MM-DD');
            }
            /* if (form_obj.parttimeUser && form_obj.parttimeUser.length>0) {
               let parttimeUser_ = "";
               for (let i = 0; i<form_obj.parttimeUser.length; i++) {
                  if (parttimeUser_ == "") {
                     parttimeUser_ = form_obj.parttimeUser[i];
                  }
                  else {
                     parttimeUser_ = parttimeUser_ + ";" + form_obj.parttimeUser[i];
                  }
               }
               form_obj.parttimeUser = parttimeUser_;
            } */
            //form_obj.parttimeList = this.parttimeLists[itm_k];
            if (form_obj.userIds) {
               let leng = form_obj.userIds.length;
               
@@ -264,15 +641,26 @@
         }
         
         if (is_null1) {
            let datas = "?datas=" + encodeURI(JSON.stringify(form_array));
            this.loading_nextStep = true;
         //   let datas = "?datas=" + encodeURI(JSON.stringify(form_array));
            let url = "/api/detail/updates";
            this.$axios.get(url + datas).then(data_ => {
               console.log(data_);
               this.add_Step = 2;
               this.nextStepName = "完 成";
            this.$axios.post(url,
            {
               schemeId: me.xmId,
               datas: form_array
            }).then(data_ => {
               window.console.log(data_);
               me.loading_nextStep = false;
               if (data_.data.success) {
                  me.add_Step = 2;
                  me.nextStepName = "完 成";
               }
               else {
                  me.$message.error(data_.data.message);
               }
            }).catch(error =>{
                  console.log(error);
               me.$message.error("接口错误");
               me.loading_nextStep = false;
            })
         }
      },
@@ -287,9 +675,73 @@
               this.$message({message:'项目启动失败', type: 'warning'});
            }
         }).catch(error =>{
               console.log(error);
         })
      },
      leadUserIdChange(val) {
         let aa = val;
         let s_ = "";
         for (let i=0; i<val.length; i++) {
            if (i == 0) {
               let val_ = val[i];
               s_ = val_[val_.length - 1];
            }
            else {
               let val_ = val[i];
               s_ = s_ + ";" + val_[val_.length - 1];
            }
         }
         this.ruleForm.leadUserId = s_;
      },
      typeArrayChange_(val) {
         if (val.length > 0) {
           for (let i = 0; i< val.length; i++) {
               if (i == 0) {
                 this.ruleForm.type = val[i];
               }
               else {
                  this.ruleForm.type += ";" + val[i];
               }
           }
         }
         else {
            this.ruleForm.type = "";
         }
      },
      order_typeArrayChange_(val) {
         if (val.length > 0) {
           for (let i = 0; i< val.length; i++) {
               if (i == 0) {
                 this.ruleForm.orderType = val[i];
               }
               else {
                  this.ruleForm.orderType += ";" + val[i];
               }
           }
         }
         else {
            this.ruleForm.orderType = "";
         }
      },
      chargeArrayChange_(val) {
         if (val.length > 0) {
           for (let i = 0; i< val.length; i++) {
               if (i == 0) {
                 this.ruleForm.chargeId = val[i];
               }
               else {
                  this.ruleForm.chargeId += ";" + val[i];
               }
           }
         }
         else {
            this.ruleForm.chargeId = "";
         }
      },
  }
}
</script>