• liang's avatar
    init · dad95e78
    liang authored
    dad95e78
dynamic.vue 4.19 KB
<template>
  <div>
    <template v-if="data.children && data.children.type !== 'form'">
      <el-form-item label="对齐方式">
        <el-select
          v-model="data.children.align"
          placeholder="对齐方式"
          clearable
        >
          <el-option label="居左" value="left"></el-option>
          <el-option label="居中" value="center"></el-option>
          <el-option label="居右" value="right"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="头部对齐方式" label-width="110px">
        <el-select
          v-model="data.children.headerAlign"
          placeholder="对齐方式"
          clearable
        >
          <el-option label="居左" value="left"></el-option>
          <el-option label="居中" value="center"></el-option>
          <el-option label="居右" value="right"></el-option>
        </el-select>
      </el-form-item>
    </template>
    <template v-if="data.children">
      <el-form-item label="表单格式">
        <el-select
          v-model="data.children.type"
          placeholder="表单格式"
          clearable
        >
          <el-option label="表格" value=""></el-option>
          <el-option label="表单" value="form"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="序号" v-if="data.children.type == 'form'">
        <el-switch v-model="data.children.index"></el-switch>
      </el-form-item>
      <el-form-item label="添加按钮">
        <el-switch v-model="data.children.addBtn"></el-switch>
      </el-form-item>
      <el-form-item label="删除按钮">
        <el-switch v-model="data.children.delBtn"></el-switch>
      </el-form-item>
    </template>

    <el-form-item label="是否只读">
      <el-switch v-model="data.readonly"></el-switch>
    </el-form-item>
    <el-form-item label="是否禁用">
      <el-switch v-model="data.disabled"></el-switch>
    </el-form-item>
    <el-form-item label="是否可见">
      <el-switch v-model="data.display"></el-switch>
    </el-form-item>
    <div class=" el-form-item--small el-form--label-top" style="padding: 13px">
      <strong class="el-form-item__label" style="padding: 0">初始化数据:</strong>
      <div class="el-form-item__content">
        <draggable
          tag="ul"
          :list="data.dynamicData"
          :group="{ name: 'dynamic' }"
          ghost-class="ghost"
          handle=".drag-item"
        >
          <li v-for="(item, index) in data.dynamicData" :key="index">
            <i class="drag-item el-icon-s-operation"></i>
            <el-input
              style="margin-right: 5px"
              size="mini"
              clearable
              v-model="data.dynamicData[index][column.prop]"
              :placeholder="column.label"
              v-for="(column,columnIndex) in columns"
              :key="columnIndex"
            ></el-input>
            <el-button
              @click="handleRemoveFields(index)"
              circle
              plain
              type="danger"
              size="mini"
              icon="el-icon-minus"
              class="del-btn"
            ></el-button>
          </li>
        </draggable>
        <div style="margin-left: 22px">
          <el-button type="text" @click="handleAddFields">添加列 </el-button>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import Draggable from "vuedraggable"
export default {
  name: "config-dynamic",
  props: {
    data: Object,
  },
  components: { Draggable },
  methods: {
    handleRemoveFields(index) {
      this.data.dynamicData.splice(index, 1)
    },
    handleAddFields() {
      if (!this.data.dynamicData) {
        this.$set(this.data, "dynamicData", [])
      }
      this.data.dynamicData.push({})
    },
  },

  computed: {
    columns() {
      return this.data.children.column
    },
  },
}
</script>
<style lang="scss" scoped>
ul > li {
  flex-wrap: wrap;
  padding: 0 20px;
  position: relative;
  .drag-item {
    position: absolute;
    left: 0;
    top: 10px;
    font-size: 16px;
    cursor: move;
    margin-right: 5px;
  }
  .del-btn {
    position: absolute;
    right: 0;
    top: 6px;
    padding: 4px;
    margin-left: 5px;
  }
  .el-input {
    width: 30%;
  }
}
</style>