Pārlūkot izejas kodu

添加关联问题,同时复制修改更改

luolei 5 gadi atpakaļ
vecāks
revīzija
1915223561

+ 1 - 1
src/components/preTreat/AddCombinQuestion.vue

@@ -109,7 +109,7 @@
             "itemType" :this.dataPub.region12,           //是否为主要内容
             "url":this.dataPub.region13,                  //上传图片
             'explains':this.dataPub.explains,           //症状解释
-            //"questionDetails": this.options,                //明细项
+            "questionDetails": this.options,                //明细项
             "questionMappings": this.options,      //映射关系,
           }
         };

+ 549 - 316
src/components/preTreat/PubSelect.vue

@@ -1,351 +1,584 @@
 <template>
-    <div class="single-container">
-        <el-form>
-            <div class="operation-row">
-                <el-checkbox-group size="small">
-                    <el-checkbox-button :label="0" v-if="type!=8&&type!=10" :disabled="disableBtn" @change="handlePlaceholder(0)">文字输入框占位符</el-checkbox-button>
-                </el-checkbox-group>
-                <el-checkbox-group size="small">
-                    <el-checkbox-button :label="0" v-if="type!=8&&type!=10" :disabled="disableBtn" @change="handlePlaceholder(1)">数字输入框占位符</el-checkbox-button>
-                </el-checkbox-group>
-                <el-checkbox-group size="small" v-if="type==2" v-model="checkedExc">
-                    <el-checkbox-button :label="0" @change="handleExclu">互斥项</el-checkbox-button>
-                </el-checkbox-group>
-                <el-button type="danger" size="small" class="del" @click="delRow">删除</el-button>
-
-            </div>
-            <div class="main-area" v-if="type!=3">
-                <el-col class="col-title">
-                    <span><i>*</i>填写单医生界面展示标准内容</span>
-                    <span>填写单患者界面展示通俗内容</span>
-                </el-col>
-                <!-- <p class="static-tip" v-if="type==8">默认展示有/无</p> -->
-                <el-col v-for="(it,i) in rows" :key="i">
-                    <div class="inps">
-                        <el-input v-model="rows[i].name"
-                                  v-bind:class="{select:focusOn==i}"
-                                  @focus="selectRow(i,'name')"
-                                  ref = "inputName"
-                                  @input="HandleInputName(i, rows[i].name,true)"
-                                  @blur="emitValues"></el-input>
-                        <el-input v-model="rows[i].description"
-                                  v-bind:class="{select:focusOn==i}"
-                                  @focus="selectRow(i,'description')"
-                                  ref = "inputDesc"
-                                  @input="HandleInputName(i, rows[i].description)"
-                                  @blur="emitValues"></el-input>
-                     </div>
-                    <el-tag v-if="it.exclusion" type="info" size="mini">互斥项</el-tag>
-                </el-col>
-                <el-button @click="addRow">+</el-button>
-                <div class="bottomPartMid bottomPartMidss">
-                    <p><span class="el-icon-arrow-up" @click="orderUpDown(-1)"></span></p>
-                    <p><span class="el-icon-arrow-down" @click="orderUpDown(1)"></span></p>
-                </div>
-            </div>
-            <div class="main-area sigle-row" v-if="type==3">
-                <el-col v-for="(it,i) in rows" :key="i">
-                    <div class="inps">
-                        <el-input v-model="rows[i].name"
-                                  v-bind:class="{'red':noHolder.indexOf(i)!==-1, 'select':focusOn==i}"
-                                  @focus="selectRow(i,'name')"
-                                  ref = "inputName"
-                                  @input="HandleInputName(i, rows[i].name,true)"
-                                  @blur="emitValues(i)"></el-input>
-                    </div>
-                    <el-tag v-if="it.exclusion" type="info" size="mini">互斥项</el-tag>
-                </el-col>
-                <el-button @click="addRow" class="little">+</el-button>
-                <div class="bottomPartMid bottomPartMidss">
-                    <p><span class="el-icon-arrow-up" @click="orderUpDown(-1)"></span></p>
-                    <p><span class="el-icon-arrow-down" @click="orderUpDown(1)"></span></p>
-                </div>
-            </div>
-        </el-form>
-    </div>
+  <div class="single-container">
+    <el-form>
+      <div class="operation-row">
+        <el-checkbox-group size="small" v-model="checkedCon">
+          <el-checkbox-button
+            :label="0"
+            v-if="type==1||type==2"
+            @change="handleExcluCon"
+          >添加关联</el-checkbox-button>
+        </el-checkbox-group>
+        <el-checkbox-group size="small">
+          <el-checkbox-button
+            :label="0"
+            v-if="type!=8&&type!=10"
+            :disabled="disableBtn"
+            @change="handlePlaceholder(0)"
+          >文字输入框占位符</el-checkbox-button>
+        </el-checkbox-group>
+        <el-checkbox-group size="small">
+          <el-checkbox-button
+            :label="0"
+            v-if="type!=8&&type!=10"
+            :disabled="disableBtn"
+            @change="handlePlaceholder(1)"
+          >数字输入框占位符</el-checkbox-button>
+        </el-checkbox-group>
+        <el-checkbox-group size="small" v-if="type==2" v-model="checkedExc">
+          <el-checkbox-button :label="0" @change="handleExclu">互斥项</el-checkbox-button>
+        </el-checkbox-group>
+        <el-button type="danger" size="small" class="del" @click="delRow">删除</el-button>
+      </div>
+      <div class="main-area" v-if="type!=3">
+        <el-col class="col-title">
+          <span>
+            <i>*</i>填写单医生界面展示标准内容
+          </span>
+          <span>填写单患者界面展示通俗内容</span>
+        </el-col>
+        <!-- <p class="static-tip" v-if="type==8">默认展示有/无</p> -->
+        <el-col v-for="(it,i) in rows" :key="i">
+          <div class="inps">
+            <el-input
+              v-model="rows[i].name"
+              v-bind:class="{select:focusOn==i}"
+              @focus="selectRow(i,'name')"
+              ref="inputName"
+              @input="HandleInputName(i, rows[i].name,true)"
+              @blur="emitValues"
+            ></el-input>
+            <el-input
+              v-model="rows[i].description"
+              v-bind:class="{select:focusOn==i}"
+              @focus="selectRow(i,'description')"
+              ref="inputDesc"
+              @input="HandleInputName(i, rows[i].description)"
+              @blur="emitValues"
+            ></el-input>
+          </div>
+          <el-tag v-if="it.exclusion" type="info" size="mini">互斥项</el-tag>
+          <el-tag v-if="it.exclusionCon" type="info" size="mini">已关联</el-tag>
+        </el-col>
+        <el-button @click="addRow">+</el-button>
+        <div class="bottomPartMid bottomPartMidss">
+          <p>
+            <span class="el-icon-arrow-up" @click="orderUpDown(-1)"></span>
+          </p>
+          <p>
+            <span class="el-icon-arrow-down" @click="orderUpDown(1)"></span>
+          </p>
+        </div>
+      </div>
+      <div class="main-area sigle-row" v-if="type==3">
+        <el-col v-for="(it,i) in rows" :key="i">
+          <div class="inps">
+            <el-input
+              v-model="rows[i].name"
+              v-bind:class="{'red':noHolder.indexOf(i)!==-1, 'select':focusOn==i}"
+              @focus="selectRow(i,'name')"
+              ref="inputName"
+              @input="HandleInputName(i, rows[i].name,true)"
+              @blur="emitValues(i)"
+            ></el-input>
+          </div>
+          <el-tag v-if="it.exclusion" type="info" size="mini">互斥项</el-tag>
+        </el-col>
+        <el-button @click="addRow" class="little">+</el-button>
+        <div class="bottomPartMid bottomPartMidss">
+          <p>
+            <span class="el-icon-arrow-up" @click="orderUpDown(-1)"></span>
+          </p>
+          <p>
+            <span class="el-icon-arrow-down" @click="orderUpDown(1)"></span>
+          </p>
+        </div>
+      </div>
+      <div v-if="type==1||type==2" class="bottomPartLeft">
+        <p class="poolTitle">标签池</p>
+        <div class="pool">
+          <el-input placeholder="请输入搜索内容" v-model="searchVal">
+            <i slot="prefix" class="el-input__icon el-icon-search"></i>
+          </el-input>
+          <ul class="tagList tagPool">
+            <li
+              v-for="(item, index) in leftTagsList"
+              class="tagItem"
+              :key="item.id"
+              :title="'[ '+item.tagName+' ]('+sex[item.sexType]+(item.required?'、必':'')+')'"
+              :style="getStyle(item)?styles:null"
+              @click="selectLeftTag(item, index, $event)"
+            >
+              <p class="ellipsis">
+                <span class="tagName">{{item.tagName}}</span>
+                <span>({{sex[item.sexType]}}{{item.required?'、必':''}}{{item.flag==1?'、时间':''}}{{item.flag==2?'、诱因':''}}{{item.flag==3?'、伴随':''}})</span>
+              </p>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </el-form>
+  </div>
 </template>
 <style lang="less">
-    @import "../../less/common.less";
-    .main-area{
-        position: relative;
-        .bottomPartMid{
-            position: absolute;
-            top:29px;
-            right: -50px;
-        }
-    }
-    .main-area .static-tip{
-        border:1px solid #dcdfe6;
-        height: 38px;
-        width: 130px;
-        position: absolute;
-        top:29px;
-        left: -130px;
-        line-height: 38px;
-        text-align: center;
-    }
-    .main-area .el-col .el-input.red .el-input__inner{
-        border-color: red;
+@import "../../less/common.less";
+.main-area {
+  position: relative;
+  .bottomPartMid {
+    position: absolute;
+    top: 29px;
+    right: -50px;
+  }
+}
+.main-area .static-tip {
+  border: 1px solid #dcdfe6;
+  height: 38px;
+  width: 130px;
+  position: absolute;
+  top: 29px;
+  left: -130px;
+  line-height: 38px;
+  text-align: center;
+}
+.main-area .el-col .el-input.red .el-input__inner {
+  border-color: red;
+}
+.el-checkbox-button--small .el-checkbox-button__inner {
+  font-size: 14px;
+}
+.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner {
+  border-color: @disableColor;
+  border-left-color: @disableColor;
+  color: @disableColor;
+}
+.el-checkbox-button:last-child .el-checkbox-button__inner {
+  border-radius: 3px;
+  border-color: @adminBase;
+  color: @adminBase;
+  margin-right: 15px;
+}
+.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner {
+  background-color: @adminBase;
+  border-left-color: @adminBase;
+  color: #fff;
+}
+.el-checkbox-group {
+  display: inline-block;
+}
+.operation-row {
+  margin-left: 150px;
+  /*text-align: right;*/
+  .del {
+    margin-left: 150px;
+  }
+  .tip {
+    color: #48c5d7;
+  }
+}
+.main-area {
+  width: 80%;
+  min-width: 400px;
+  margin: 20px 150px 20px 124px;
+  &.sigle-row {
+    width: 60%;
+    margin: 20px 150px 20px 30%;
+    .bottomPartMid {
+      top: 0;
+      right: 40%;
     }
-    .el-checkbox-button--small .el-checkbox-button__inner{
-        font-size: 14px;
+  }
+  .inps {
+    display: inline-block;
+    width: calc(100% - 60px);
+  }
+  .el-tag {
+    margin-left: 10px;
+  }
+  .col-title {
+    margin-bottom: 10px;
+    span {
+      display: inline-block;
+      width: calc(50% - 30px);
+      font-size: 12px;
+      i {
+        color: #f56c6c;
+        margin-right: 3px;
+      }
     }
-    .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{
-        border-color: @disableColor;
-        border-left-color: @disableColor;
-        color: @disableColor;
+  }
+  .el-col .el-input {
+    width: 50%;
+    display: inline-block;
+    .el-input__inner {
+      border-radius: 0;
     }
-    .el-checkbox-button:last-child .el-checkbox-button__inner{
-        border-radius: 3px;
+    &.select {
+      input {
         border-color: @adminBase;
-        color: @adminBase;
-        margin-right: 15px;
-    }
-    .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{
-        background-color:@adminBase;
-        border-left-color:@adminBase;
-        color:#fff;
-    }
-    .el-checkbox-group{
-        display: inline-block;
-    }
-    .operation-row{
-        margin-left:150px;
-        /*text-align: right;*/
-    .del{
-        margin-left: 150px;
-    }
-    .tip {
-        color: #48C5D7;
-    }
-    }
-    .main-area{
-        width: 80%;
-        min-width: 400px;
-        margin:20px 150px 20px 124px;
-        &.sigle-row{
-             width: 60%;
-             margin:20px 150px 20px 30%;
-             .bottomPartMid{
-                 top: 0;
-                 right: 40%;
-             }
-         }
-    .inps{
-        display: inline-block;
-        width: calc(100% - 60px);
-    }
-    .el-tag{
-        margin-left: 10px;
-    }
-    .col-title{
-        margin-bottom:10px;
-        span{
-            display: inline-block;
-            width: calc(50% - 30px);
-            font-size:12px;
-            i{
-                color: #f56c6c;
-                margin-right: 3px;
-            }
-        }
-    }
-    .el-col .el-input {
-        width: 50%;
-        display: inline-block;
-        .el-input__inner{
-            border-radius: 0;
-        }
-        &.select{
-        input{
-            border-color: @adminBase;
-        }
       }
     }
+  }
 
-    .el-button{
-        width: calc(100% - 60px);
-        border-radius: 0;
-    &.little{
-         width: calc(50% - 30px);
-     }
-    }
+  .el-button {
+    width: calc(100% - 60px);
+    border-radius: 0;
+    &.little {
+      width: calc(50% - 30px);
     }
+  }
+}
 </style>
 <script>
-  import utils from '@api/utils.js';
-  import Vue from 'vue';
+import utils from "@api/utils.js";
+import api from "@api/preTreat.js";
+import Vue from "vue";
 
-  //单行数据
-  const initRow = {orderNo:0,name:'',description:'',exclusion:0};
-  const initRows = utils.getInitRow(initRow,4);
-  export default {
-    props:['type','options','ascription','sexType'],
-    data(){
-      return {
-        rows:[...initRows],
-        checkedExc:false,
-        focusOn:-1,         //聚焦的行index
-        focusName:'name',        //是否聚焦医生界面输入框
-        disableBtn:false,       //占位符是否禁用
-        noHolder:'',            //是否有占位符-仅多列使用
-        msgTimer:null,          //占位符必填提示延时
+//单行数据
+const initRow = { orderNo: 0, name: "", description: "", exclusion: 0 };
+const initRows = utils.getInitRow(initRow, 4);
+export default {
+  props: ["type", "options", "ascription", "sexType"],
+  data() {
+    return {
+      rows: [...initRows],
+      checkedExc: false,
+      checkedCon: false,
+      focusOn: -1, //聚焦的行index
+      focusName: "name", //是否聚焦医生界面输入框
+      disableBtn: false, //占位符是否禁用
+      noHolder: "", //是否有占位符-仅多列使用
+      msgTimer: null, //占位符必填提示延时
+      searchVal: "",
+      leftTagsList: [],
+      selectLeftTagsList:[],
+      styles: {
+        background: "#eae7e7"
+      },
+      sex: {
+        1: "男",
+        2: "女",
+        3: "通"
       }
+    };
+  },
+  mounted() {
+    const { options } = this.$props;
+    if (options) {
+      const arr = options.filter(it => {
+        if(it.subQuestion){
+          it.exclusionCon = 1
+        }
+        return it.name;
+      });
+      this.rows = arr.length == 0 ? utils.getInitRow(initRow, 4) : arr;
+      this.$emit("pushValues", arr);
+    } else {
+      this.initData();
+    }
+    if(this.type==1||this.type==2){
+      this.searchTagList();
+    }
+  },
+  watch: {
+    searchVal(newVal, preVal) {
+      this.searchTagList();
     },
-    mounted(){
-      const {options} = this.$props;
-      if(options){
-        const arr = options.filter((it)=>{
-          return it.name;
-        });
-        this.rows = arr.length==0?utils.getInitRow(initRow,4):arr;
-        this.$emit('pushValues',arr);
-      }else{
-        this.initData();
-      }
+    focusOn(newVal) {
+      this.checkedExc = this.rows[newVal].exclusion === 1;
+      this.checkedCon = this.rows[newVal].exclusionCon === 1;
     },
-    watch: {
-      focusOn(newVal){
-        this.checkedExc = this.rows[newVal].exclusion===1;
-      },
-      /*type() {
+    /*type() {
         this.initData();
       },*/
-      sexType() {
-        this.initData();
-      },
+    sexType() {
+      this.initData();
+    }
+  },
+  methods: {
+    selectLeftTag(tag) {
+      const hasTag = this.isHasTag(tag, this.selectLeftTagsList);
+      if (hasTag) {
+        this.selectLeftTagsList = this.selectLeftTagsList.filter(
+          item => item.id !== tag.id
+        );
+      } else {
+        this.selectLeftTagsList.push(tag);
+      }
     },
-    methods:{
-      initData(){
-        this.rows = [...utils.getInitRow(initRow,4)];
-      },
-      addRow(){
-        this.rows.push(Object.assign({},initRow,{orderNo:this.rows.length}));
-      },
-      selectRow(index,name){
-        this.focusOn = index;
-        this.focusName = name;
-        const placeReg = /(\$\{number_\S*?\})|(\$\{input_\S*?\})/g;
-        if(placeReg.test(this.rows[index][name])){
-          this.disableBtn = true;
-          return;
-        }
-        this.disableBtn = false;
-      },
-      orderUpDown(i){
-        const item = this.rows[this.focusOn];       //要调整位置的行
-        const inx = this.focusOn;
-        if(inx===-1||(inx===0&&i===-1)||(inx===this.rows.length-1&&i===1)){
-          return ;
-        }
-        this.focusOn = inx+i;
-        this.rows.splice(inx,1);
-        this.rows.splice(inx+i,0,item);
-      },
-      handlePlaceholder(type){          //占位符类型,type=0文本输入框,type=1数字输入框
-        const i = this.focusOn;
-        clearTimeout(this.msgTimer);
-        if(i==-1){
-          this.$message({
-            message: '请先选中要操作的行',
-            type: 'warning',
-            showClose: true,
-          });
-          return ;
+    isHasTag(item, arr) {
+      for (let i = 0; i < arr.length; i++) {
+        if (arr[i].id === item.id) {
+          return true;
         }
-        const maps = {0:'${input_其他(点击输入)}',1:'${number_其他(点击输入)}'};
-        const key = this.focusName;
-        this.noHolder = this.noHolder.replace(','+i,'');
-        this.rows[i].name = this.rows[i].name+maps[type];
-        if(this.type!='3'){
-          this.rows[i].description = this.rows[i].description+maps[type];
+      }
+      return false;
+    },
+    getStyle(item) {
+      //左侧选中状态
+      return this.isHasTag(item, this.selectLeftTagsList);
+    },
+    searchTagList() {
+      let param = {
+        tagName: this.searchVal.trim(),
+        type: this.ascription,
+        notIds: [],
+        notControlType: [], //组合填写单或非诊疗情况模版不能添加图片上传
+        sexType: this.sexType,
+        tagType: ["1"] //qaType=2:组合填写单,qaType=3模板
+      };
+      api.questionSearch(param).then(res => {
+        if (res.data.code === "0") {
+          this.leftTagsList = res.data.data;
+          this.selectLeftTagsList = [];
+          // this.selectRightTagsList = [];
         }
+      });
+    },
+    initData() {
+      this.rows = [...utils.getInitRow(initRow, 4)];
+    },
+    addRow() {
+      this.rows.push(Object.assign({}, initRow, { orderNo: this.rows.length }));
+    },
+    selectRow(index, name) {
+      this.focusOn = index;
+      this.focusName = name;
+      const placeReg = /(\$\{number_\S*?\})|(\$\{input_\S*?\})/g;
+      if (placeReg.test(this.rows[index][name])) {
         this.disableBtn = true;
-      },
-      handleExclu(){
-        const i = this.focusOn;
-        if(i==-1){
-          this.$message({
-            message: '请先选中要操作的行',
-            type: 'warning',
-            showClose: true,
-          });
-          return ;
-        }
-        if(this.rows[i].exclusion===1){
-          this.rows[i].exclusion=0;
-          return ;
-        }
-        this.rows.map((it,x)=>{
-          if(x===i){
-            it.exclusion = 1;
-          }
-          // else{
-          //   it.exclusion = 0;
-          // }
+        return;
+      }
+      this.disableBtn = false;
+    },
+    orderUpDown(i) {
+      const item = this.rows[this.focusOn]; //要调整位置的行
+      const inx = this.focusOn;
+      if (
+        inx === -1 ||
+        (inx === 0 && i === -1) ||
+        (inx === this.rows.length - 1 && i === 1)
+      ) {
+        return;
+      }
+      this.focusOn = inx + i;
+      this.rows.splice(inx, 1);
+      this.rows.splice(inx + i, 0, item);
+    },
+    handlePlaceholder(type) {
+      //占位符类型,type=0文本输入框,type=1数字输入框,type=2关联问题
+      const i = this.focusOn;
+      clearTimeout(this.msgTimer);
+      if (i == -1) {
+        this.$message({
+          message: "请先选中要操作的行",
+          type: "warning",
+          showClose: true
         });
-      },
-      emitValues(i){
-        if(typeof i ==='number'){
-          const reg = /(\$\{number_\S*?\})|(\$\{input_\S*?\})/g;
-          const name = this.rows[i].name;
-          if(name&&!reg.test(name)){
-            this.noHolder = this.noHolder.indexOf(i)!=-1?this.noHolder:this.noHolder+","+i;
-            const that = this;
-            this.msgTimer = setTimeout(function(){
-              that.$message({
-                message: '请添加数字输入框或者文本输入框',
-                type: 'warning',
-                showClose: true,
-              });
-            },500);
+        return;
+      }
+      const maps = {
+        0: "${input_其他(点击输入)}",
+        1: "${number_其他(点击输入)}"
+      };
+      const key = this.focusName;
+      this.noHolder = this.noHolder.replace("," + i, "");
+      this.rows[i].name = this.rows[i].name + maps[type];
+      if (this.type != "3") {
+        this.rows[i].description = this.rows[i].description + maps[type];
+      }
+      this.disableBtn = true;
+    },
+    handleExcluCon(){
+      const i = this.focusOn;
+      if (i == -1) {
+        this.$message({
+          message: "请先选中要操作的行",
+          type: "warning",
+          showClose: true
+        });
+        return;
+      }
+      if(this.selectLeftTagsList.length==0&&this.rows[i].exclusionCon!=1){
+        this.$message({
+          message: "请选择标签池选项",
+          type: "warning",
+          showClose: true
+        });
+        return;
+      }
+      if (this.rows[i].exclusionCon&&this.rows[i].exclusionCon === 1) {
+        this.rows[i].exclusionCon = 0;
+        this.rows[i].subQuestion = '';
+        return;
+      }
+      this.rows.map((it, x) => {
+        if (x === i) {
+          let ids = []
+          this.selectLeftTagsList.map((part)=>{
+            ids.push(part.id)
+          })
+          this.selectLeftTagsList = [];
+          it.exclusionCon = 1;
+          it.subQuestion = ids.join(',');
+        }
+      });
 
-            this.$emit('pushValues',this.rows);
-            return;
-          }
-          this.noHolder = this.noHolder.replace(','+i,'');
+    },
+    handleExclu() {
+      const i = this.focusOn;
+      if (i == -1) {
+        this.$message({
+          message: "请先选中要操作的行",
+          type: "warning",
+          showClose: true
+        });
+        return;
+      }
+      if (this.rows[i].exclusion === 1) {
+        this.rows[i].exclusion = 0;
+        return;
+      }
+      this.rows.map((it, x) => {
+        if (x === i) {
+          it.exclusion = 1;
         }
-        const items = this.rows;
-        this.$emit('pushValues',items);
-      },
-      HandleInputName(i, name, isName) {
+        // else{
+        //   it.exclusion = 0;
+        // }
+      });
+    },
+    emitValues(i) {
+      if (typeof i === "number") {
         const reg = /(\$\{number_\S*?\})|(\$\{input_\S*?\})/g;
-        const pureName=name.replace(reg,'');
-        const hasPlace = reg.test(name);
-        if(hasPlace&&this.disableBtn==false){
-          this.disableBtn = true;
-        }else if(!hasPlace&&this.disableBtn==true){
-          this.rows[i][isName?'description':'name'] = this.rows[i][isName?'description':'name'].replace(reg,'');
-          this.disableBtn = false;
-        }
-        if(pureName.length > 30) {
-          this.$message({
-            message: '最多输入30个字',
-            type: 'warning',
-            showClose: true,
-          });
-          return;
-        }
+        const name = this.rows[i].name;
+        if (name && !reg.test(name)) {
+          this.noHolder =
+            this.noHolder.indexOf(i) != -1
+              ? this.noHolder
+              : this.noHolder + "," + i;
+          const that = this;
+          this.msgTimer = setTimeout(function() {
+            that.$message({
+              message: "请添加数字输入框或者文本输入框",
+              type: "warning",
+              showClose: true
+            });
+          }, 500);
 
-      },
-      delRow(){
-        if(this.focusOn==-1){
-          this.$message({
-            message: '请先选择要删除的行',
-            type: 'warning',
-            showClose: true,
-          });
+          this.$emit("pushValues", this.rows);
           return;
         }
-        this.$alert('确定要删除该行吗?', '提示', {
-          confirmButtonText: '确定',
-          type: 'warning'
-        }).then(() => {
-          this.rows.splice(this.focusOn,1);
+        this.noHolder = this.noHolder.replace("," + i, "");
+      }
+      const items = this.rows;
+      this.$emit("pushValues", items);
+    },
+    HandleInputName(i, name, isName) {
+      const reg = /(\$\{number_\S*?\})|(\$\{input_\S*?\})/g;
+      const pureName = name.replace(reg, "");
+      const hasPlace = reg.test(name);
+      if (hasPlace && this.disableBtn == false) {
+        this.disableBtn = true;
+      } else if (!hasPlace && this.disableBtn == true) {
+        this.rows[i][isName ? "description" : "name"] = this.rows[i][
+          isName ? "description" : "name"
+        ].replace(reg, "");
+        this.disableBtn = false;
+      }
+      if (pureName.length > 30) {
+        this.$message({
+          message: "最多输入30个字",
+          type: "warning",
+          showClose: true
+        });
+        return;
+      }
+    },
+    delRow() {
+      if (this.focusOn == -1) {
+        this.$message({
+          message: "请先选择要删除的行",
+          type: "warning",
+          showClose: true
+        });
+        return;
+      }
+      this.$alert("确定要删除该行吗?", "提示", {
+        confirmButtonText: "确定",
+        type: "warning"
+      })
+        .then(() => {
+          this.rows.splice(this.focusOn, 1);
           this.focusOn = -1;
           this.emitValues();
-        }).catch(() => {});
-      }
+        })
+        .catch(() => {});
     }
   }
+};
 </script>
+<style lang="less" scoped>
+.attributeBox {
+  position: absolute;
+  right: -100px;
+  top: 2px;
+}
+.tagItem {
+  position: relative;
+  line-height: 30px;
+  cursor: pointer;
+  padding: 0 10px;
+}
+.operationPool {
+  position: relative;
+  width: 60%;
+  min-height: 300px;
+  padding: 10px 0;
+}
+.tagName {
+  margin-right: 10px;
+}
+.tagName:before {
+  content: "[";
+}
+.tagName::after {
+  content: "]";
+}
+.bottomPartLeft {
+  width: 50%;
+  box-sizing: border-box;
+  margin: 20px 150px 20px 124px;
+}
+
+.poolTitle {
+  // border-bottom: 1px solid @icssBorder;
+  box-sizing: border-box;
+  margin-bottom: 20px;
+}
+.pool {
+  // border:1px solid @icssBorder;
+}
+.search {
+  width: 100%;
+  border-bottom: 1px solid #c0c4cc;
+  box-sizing: border-box;
+  height: 30px;
+}
+.tagList {
+  border: 1px solid #c0c4cc;
+}
+.tagPool {
+  height: 300px;
+  overflow-y: auto;
+}
+.NoiseTemplateWrapper .btn {
+  margin-top: 250px !important;
+}
+.bottomPartLeft {
+  min-height: 250px;
+}
+
+.main-area .inps,.main-area .el-button {
+  width:calc(100% - 120px)
+}
+</style>