vue中,表单增加一行删除一行上移一行下移一行

vue中,表单增加一行删除一行上移一行下移一行

效果

在这里插入图片描述

代码

index.vue

<div class="SubjectToDeclareBox">
  <p class="SubjectToDeclareMust">课题承担部门(单位)</p>
  <p class="SubjectToDeclareCon" v-for="(box, index) in formDetails.depts">
    <el-input type="text" v-model="box.orggName"></el-input>
    <el-select v-model="box.deptType" @change="inDeptType(index)">
      <el-option value="0" label="核心专业部门"></el-option>
      <el-option value="1" label="协同专业部门"></el-option>
    </el-select>
    <span class="declareOperation" @click="removeSponsor(index)">X</span>
    <span class="declareOperation" @click="upOrg(index)">↑</span>
    <span class="declareOperation" @click="downOrg(index)">↓</span>
  </p>
  <p class="SubjectToDeclareHit">{{ deptsHit }}</p>
</div>


<script>
export default {
  data() {
      return {
          formDetails: {
              depts: [{ orggId: "", orggName: "", deptType: "" }]
          } 
      }
  },
    methods:{
      inDeptType(index) {
      var message = this.verification.checkParam("课题承担部门信息", this.formDetails.depts[index].deptType, true, 0);
      if (message != null && message != "") {
        this.deptsHit = message;
        return true;
      } else {
        this.deptsHit = "";
        return false;
      }
    },
        /********************课题************************/
    // 增加课题承担部门
    addSponsor() {
      this.formDetails.depts.push({ orggId: "", orggName: "", deptType: "" })
    },
    // 移除课题承担部门
    removeSponsor(index) {
      if (this.formDetails.depts.length > 1) {
        this.formDetails.depts.splice(index, 1);
      } else {
        this.$message.error("承担方至少有一轮")
      }
    },
    // 课题承担部门上移
    upOrg(index) {
      if (index == 0) {
        this.$message.error('当前已在最顶部,无需上移!')
      } else {
        this.swapArray(this.formDetails.depts, index - 1, index);
      }
    },
    // 课题承担部门下移
    downOrg(index) {
      if (index == this.formDetails.depts.length - 1) {
        this.$message.error('当前已在最底部,无需下移!')
      } else {
        this.swapArray(this.formDetails.depts, index, index + 1);
      }
    },
   // 数据替换
   swapArray(arr, index1, index2) {
      arr[index1] = arr.splice(index2, 1, arr[index1])[0];
      return arr;
    },
    }  
}
</script>
<style lang="scss">
    .SubjectToDeclareBox {
      width: 100%;
      position: relative;

      .SubjectToDeclareHit {
        position: absolute;
        margin-top: 0;
        color: #DE5647;
        font-size: 12px;
      }

      p {
        margin-top: 20px;
        font-size: 14px;
        color: #595959;
      }

      .fileUpload {
        margin-top: 20px;
      }

      .SubjectToDeclareCon {
        width: 100%;
        position: relative;

        .prospectus_Vail {
          position: absolute;
          top: 16px;
          left: 115px;

          p {
            margin-top: 0;
            color: #999;
            font-size: 12px;
            line-height: 20px;
          }
        }

        .el-input {
          width: 400px;
        }

        .declareCompany {
          width: 32px;
          height: 33px;
          display: inline-block;
          background: #4385F4;
          color: #fff;
          text-align: center;
          line-height: 26px;
          margin-left: 0px;
          margin-right: 10px;
          vertical-align: middle;
          cursor: pointer;
        }

        .declareOperation {
          color: #4385f4;
          font-size: 12px;
          line-height: 40px;
          margin: 0 8px;
          cursor: pointer;
        }
      }

      .SubjectToDeclareMust:before {
        content: '*';
        color: #DE5347;
      }
    }
      .SubjectToDeclareMust {
        font-size: 14px;
        color: #595959;
      }

      .SubjectToDeclareMust:before {
        content: '*';
        color: #DE5347;
      }
</style>

src\components\verification.js

export default {
  /**
   * Created by zhangxiaodong on 2018/11/30.
   */
  /**
   * 【描 述】:验证非法字符、长度、必填项
   *
   * @param title 字段标题
   * @param value 字段内容
   * @param isRequire 是否必填(true:必填项,false:非必填项)
   * @param length 字段限制长度(为0时无限制)
   * @param isRule 是否特殊字符校验(true:是,false:否)
   * @since  2018年11月30日 v1.0
   */
  checkParam(title, value, isRequire, length, isRule){
    const isWang = title.endsWith('wang')
    if(isWang){
      title = title.slice(0,title.length-'wang'.length)
    }
    // var reg = new RegExp("[\\\\`$^*:'\"\\<>=]");
    var reg = new RegExp("[\\\\~!@#%$^&*()+\\|}{\\[\\]\"?></'\\=\\`]"); // 测试版
    const isTitle = title.endsWith('sc')
    if(isTitle){
      title = title.slice(0,title.length-'sc'.length)
      reg = new RegExp("[\\\\~!@#%$^&*+\\|}{\"?></'\\=\\`]"); // 申请表字段名称特殊字符版
    }
    // var reg = new RegExp("[\\\\~!@#%$^&*()_+\\|}{\\[\\]\":?><,./;'\\=\\-`]");
    // var reg = new RegExp("[\\\\!@#$%^&*()_+|}{\":?><,\./;'=\\-`~!¥……()——}{“”:?》《,。、;‘【】’·]");
    // var reg = new RegExp("[\\\\!#$%^&*()+|}{\":?><,/;'=\\`~¥}{·]");
    var reg1 = /^\s|\s$/;
    var reg2 = /\s/;
    if (isRequire && (!value || value.length == 0)) {//如果为必填项且内容长度为0
      return title + "不能为空!";
    }else if(value && value.length>0){
      var regEng = value.trim().toLowerCase();
      if(value.trim().length==0){
        return title+"不应只输入空格";
      }else
      //   if(reg1.test(value)){
      //   return title+"首尾不应输入空格";
      // }else
      //   if(reg2.test(value.replace(/(^\s*)|(\s*$)/g,''))){
      //   return title+"中间内容不可包含空格";
      // }else
        if (length > 0 && value && value.length > length) {
        return title + "最多" + length + "个字符!";
      } else if ((isRule == undefined || isRule) && value && value.length > 0) {
        if (reg.test(value) && !isWang) {
          return title + "不能包含特殊字符!";
        } else if(regEng == 'null'){
          return title + "不能输入null!";
        }
      }
    }
    return null;
  },
  checkSpecial(title,val,len){
    // var reg = new RegExp("[\\\\`$^*:'\"\\<>=]");
    var reg = new RegExp("[\\\\!#$%^&*()+|}{\":?><,/;'=\\`~¥}{·]");
    if(val.length>len){
      return  {title:val.slice(0,len),check:title+"最多" + len + "个字符!"}
    }
    return {title:val.replace(reg,""),check:""};
  },
  checkSearch(title, value, isRequire, length, isRule){
    // var reg = new RegExp("[\\\\%`$^*:_'\"\\<>=]");
    // var reg = new RegExp("[\\\\~!@#%$^&*()+\\|}{\":?><,./;'\\=\\-`]");
    // var reg = new RegExp("[\\\\!@#$%^&*()_+|}{\":?><,./;'=\\-`~!¥……()——}{“”:?》《,。、;‘【】’·]");
    var reg = new RegExp("[\\\\!#$%^&*()+|}{\":?><,/;'=\\`~¥}{·]");
    var reg1 = /^\s|\s$/;
    if (isRequire && (!value || value.length == 0)) {//如果为必填项且内容长度为0
      return title + "不能为空!";
    }else if(value && value.length>0){
      var regEng = value.toLowerCase();
      if(value.trim().length==0){
        return title+"不应只输入空格";
      }else if(reg1.test(value)){
        return title+"首尾不应输入空格";
      }else if (length > 0 && value && value.length > length) {
        return title + "最多" + length + "个字符!";
      }
      else if ((isRule == undefined || isRule) && value && value.length > 0) {
        if (reg.test(value)) {
          return title + "不能包含特殊字符!";
        }else if(value == 'null' || value == 'NULL'){
          return title + "不能输入null!";
        }
      }
    }
    return null;
  },
  // var message = this.verification.checkParam('发送消息',this.messageContent,true,3);
  // if (message != null) {
  //   this.$message.error(message)
  //   return false
  // } else {
  //   return true
  // }
//身份证校验
  identityCode(title,code) {
    var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北 ",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏 ",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外 "};
    // return code;
    var tip = "";
    var pass= true;
    if(code){
      if(!code || !/^\d{6}(18|19|20|30)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)){
        tip = title + "格式错误";
        pass = false;
      }else if(!city[code.substr(0,2)]){
        tip = title + "地址编码错误";
        pass = false;
      }else{
        //18位身份证需要验证最后一位校验位if(code.length == 18){
        code = code.split('');
        //∑(ai×Wi)(mod 11)//加权因子
        var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
        //校验位
        var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
        var sum = 0;
        var ai = 0;
        var wi = 0;
        for (var i = 0; i < 17; i++){
          ai = code[i];
          wi = factor[i];
          sum += ai * wi;
        }
        var last = parity[sum % 11];
        if(parity[sum % 11] != code[17]){
          tip = title + "校验位错误";
          pass =false;
        }
      }
    }else{
      tip = title + "不能为空!";
      pass = false;
    }
    if(!pass) return tip;
  }
}
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值