vue2.0 element Table 校验方法

445 阅读1分钟

未标题-1.png template

      <el-form-item label="标准库表"  prop="tableName">
        <el-input v-model="data.tableName"   style="width:300px" placeholder="请输入标准库表"></el-input>
      </el-form-item> 
      <el-form-item label="表描述">
        <el-input 
          style="width:100%"  
          v-model="data.tableComment"
          placeholder="请输入表描述"
          type="textarea"
        />  
      </el-form-item>
      <el-form-item label="表字段"> 
        <div class="transform-table" >
          <div class="button-tools"> 
            <el-button type="primary" icon="el-icon-plus"  @click="addDwd">添加字段</el-button>
            <el-button icon="el-icon-minus" @click="delDwd" >删除字段</el-button>
          </div> 
          <el-table
            border
            :data="data.columns"
            class="table2" 
            ref="dwdsMultipleTable"
            @selection-change="handleSelectionDwdsChange"
            row-key="id"
            height="450" 
            align="left">
            <el-table-column
              type="selection"
              width="48">
            </el-table-column> 
            <el-table-column label="序号"  fixed  type="index"/> 
            <el-table-column
                width="100px"
                label="表字段">
                <template slot-scope="scope">
                  <el-form-item :prop="'columns.' + scope.$index + '.columnName'" :rules='rules.columnName'>
                    <el-input v-model="scope.row.columnName"  placeholder="请输入表字段"></el-input>
                  </el-form-item>
                </template>
            </el-table-column>
            <el-table-column label="字段类型" prop="columnType" >
              <template slot-scope="scope">
                <el-form-item :prop="'columns.' + scope.$index + '.columnType'" :rules='rules.columnType'>
                  <el-select v-model="scope.row.columnType" clearable   placeholder="请选择字段类型">
                    <el-option
                      v-for="item in columnOptions"
                      :key="item"
                      :label="item"
                      :value="item">
                    </el-option>
                  </el-select> 
                </el-form-item> 
              </template>
            </el-table-column> 
            <el-table-column label="字段描述" >
              <template slot-scope="scope">
                <el-form-item :prop="'columns.' + scope.$index + '.columnComment'"  > 
                  <el-input v-model="scope.row.columnComment"   placeholder="请输入字段描述"></el-input>
                </el-form-item>
              </template>
            </el-table-column> 
            <el-table-column label="是否主键" width="80"  >
              <template slot-scope="scope">
                <el-form-item :prop="'columns.' + scope.$index + '.isPk'"  > 
                  <el-checkbox v-model="scope.row.isPk" true-label="1" false-label="0" ></el-checkbox> 
                </el-form-item>
              </template>
            </el-table-column> 
            <el-table-column label="是否必填"  width="80">
              <template slot-scope="scope">
                <el-form-item :prop="'columns.' + scope.$index + '.isRequired'"  > 
                  <el-checkbox v-model="scope.row.isRequired" true-label="1" false-label="0"  ></el-checkbox> 
                </el-form-item>
              </template>
            </el-table-column>
            <el-table-column
              prop="mapping"
              label="是否禁用" > 
              <template slot-scope="scope">
                <el-form-item :prop="'columns.' + scope.$index + '.mapping'"  > 
                  <el-checkbox v-model="scope.row.mapping"    ></el-checkbox>  
                </el-form-item>
              </template> 
            </el-table-column> 
            <el-table-column label="操作" align="center"  width="120" >
              <template slot-scope="scope">
                <el-form-item>
                  <el-button type="primary" class="move" icon="el-icon-rank"></el-button>
                  <el-button type="primary"  icon="el-icon-minus" @click="delDwdRow(scope.row)"></el-button>
                </el-form-item>
              </template>
            </el-table-column> 
          </el-table>
        </div> 
      </el-form-item> 
    <el-form-item> 
      <el-button type="primary" @click="confirm">保存</el-button> 
    </el-form-item> 
    </el-form>

script


import Sortable from 'sortablejs';
import { v4 as uuidv4 } from "uuid";  
export default { 
  data() {
    return { 
      dwdDisabled:false,
      data:{
        tableName:'',
        tableComment:'',
        columns:[]
      },
      sortable:{}, 
      loading:false,
      selectiontableData: [],
      dwdSelectTable:[], 
      columnOptions:[
        'int8',
        'int2',
        'int4',
        'varchar(1024)',
        'varchar(2048)',
        'timestamptz(6)',
        'date',
        'numeric',
        'float4',
        'text',
        'bytea' 
      ],  
      rules:{
        tableName: [
          { required: true, message: '请选请输入表名', trigger: 'blur' }
        ], 
        columnName: [{
          required: true,
          message: '请输入表字段',
          trigger: 'blur'
        }],
        columnType : [{
          required: true,
          message: '请选择字段类型',
          trigger: 'blur'
        }],
      },
    }
  }, 
 
  watch: {
    data: {
      handler(newV, oldV) { 
        console.log('data',{newV, oldV})
        // this.$emit("update:data", newV);
      },
      immediate: true,
      deep: true
    },
    selectiontableData: {
      handler(newV, oldV) { 
        console.log('selectiontableData',{newV, oldV})
        // this.$emit("update:data", newV);
      },
      immediate: true,
      deep: true
    }, 
  },
  mounted () {
    this.init()
  },
  methods: {  
    init(){     
  
      let that = this
      this.$nextTick(() => { 
        that.rowDrop()
      })
      
    }, 
    confirm(){  
      this.$refs["viewData"].validate((valid)=>{ 
        if(valid ){
          let { tableName,tableComment,tableId = null ,columns} = this.data
          let params = {  
            tableComment, 
            tableName, 
            createTime: null,
            params: {},
            remark: null,
            syncTime: null, 
            tableId,
            columns
          } 
          console.log({params})
        } 
      }) 
    }, 
    handleSelectionDwdsChange(val){
      this.dwdSelectTable = val 
    },
    addDwd(){ 
      let col = {
        columnComment: "",
        columnDefault: "",
        columnId:null,
        columnName: "",
        columnType: "varchar(1024)",
        createBy: "",
        isRequired: '0',
        isPk:'0',
        params: {},
        tableId: 0,
        updateBy: "",
        id: uuidv4(),
        foreignColumnId:null,
        foreignTableId:null,
        dwdDisabled : false
      } 
      
      if( this.data.columns){
        this.$set(this.data.columns, this.data.columns.length,col) 
      }else{
        this.data.columns = []
        this.$set(this.data.columns, 0 ,col) 
      } 
      console.log( this.data.columns)
    },
    delDwd(){
      if(this.dwdSelectTable.length>0){
        let arr = [...this.data.columns].filter(x => [...this.dwdSelectTable].every(y => y.id !== x.id)); 
        this.data.columns = arr
      } 
    }, 
    delDwdRow(row){ 
      console.log(row.id ,this.data.columns)
      this.data.columns = this.data.columns.filter(item=>item.id!==row.id )
    },
      //行拖拽
    rowDrop() {
      const el = this.$refs.dwdsMultipleTable.$el.querySelectorAll(
        ".el-table__body-wrapper > table > tbody"
      )[0]; 
      const _this = this
      _this.sortable = Sortable.create(el, {
        onEnd({ newIndex, oldIndex }) {
        
          const currRow = _this.data.columns.splice(oldIndex, 1)[0]
          _this.data.columns.splice(newIndex, 0, currRow)
          console.log({currRow}) 
        }
      }) 
    }
  }
}
</script>