wangting
2024-08-30 f7090a3271fafbf5c3b0435697a985055aaa94a7
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/formDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,603 @@
<template>
  <el-dialog
    v-dialogDrag
    v-loading="loading"
    :visible.sync="visible"
    append-to-body="true"
    class="avue-dialog"
    title="表单"
    width="100%"
    @close="closeDialog"
  >
    <el-container>
      <div style="height: 79vh;display: flex;width: 100%;">
        <el-aside width="15%">
          <basic-container>
            <div style="height:650px;">
              <avue-tree
                :data="treeData"
                :option="treeOption"
                @node-drag-start="handleDragStart">
              </avue-tree>
            </div>
          </basic-container>
        </el-aside>
        <el-main >
          <basic-container>
            <div style="height: 645px" @drop="drop"  @dragover.prevent>
              <div style="display: flex;justify-content: center">
                <span style="display: flex;align-items: center; margin-right: 5px;">
                 <p class="tableTopLabel">名称:</p>
                 <el-input v-model="name" placeholder="请输入内容" size="mini"></el-input>
                </span>
                <span style="display: flex;align-items: center; margin-right: 5px;">
                 <p class="tableTopLabel">查询模板名称:</p>
                 <el-input v-model="name" placeholder="请输入内容" size="mini"></el-input>
                </span>
                <span style="display: flex;align-items: center; margin-right: 5px;">
                 <p class="tableTopLabel">显示列数:</p>
                 <el-input v-model="name" placeholder="请输入内容" size="mini"></el-input>
                  <el-button plain size="mini" style="margin-left: 3px" type="success">设置</el-button>
                </span>
                <span style="display: flex;align-items: center; margin-right: 5px;">
                 <p class="tableTopLabel">位置:</p>
                 <el-input v-model="name" placeholder="请输入内容" size="mini"></el-input>
                  <el-button plain size="mini" style="margin-left: 3px" type="success">调整位置</el-button>
                </span>
              </div>
              <h3>页面定义</h3>
              <el-form ref="form" :model="form" :rules="rules" label-width="100px">
                <el-row>
                  <el-col :span="columnNumber">
                    <el-tooltip v-for="(item,index) in formList" :key="index" :content="item.name" placement="top">
                      <el-form-item class="hiddenLabel" :label="item.name + ':'">
                        <el-input v-model="item.value" :splaceholder="item.name" size="mini"></el-input>
                      </el-form-item>
                    </el-tooltip>
                  </el-col>
                </el-row>
              </el-form>
            </div>
            <div style="display: flex;justify-content: center;margin-top: 15px">
              <el-button icon="el-icon-check" size="small" type="primary">保存</el-button>
              <el-button icon="el-icon-delete" plain size="small" type="danger">清空</el-button>
              <el-button icon="el-icon-el-icon-close" plain size="small" type="primary">删除组件</el-button>
              <el-button icon="el-icon-plus" plain size="small" type="primary">添加自定义组件</el-button>
              <el-button icon="el-icon-zoom-in" plain size="small" type="primary">预览</el-button>
            </div>
          </basic-container>
        </el-main>
        <el-aside width="25%">
          <basic-container>
            <div style="height: 700px; overflow-y: auto;padding-right: 10px">
              <h3>设置</h3>
              <el-form ref="form" :model="form" :rules="rules" label-position="left" label-width="85px">
                <el-row style="border-bottom: 1px solid #878585;padding-bottom: 10px">
                  <el-col :span="24">
                    <el-form-item label="使用字段">
                      <div style="display: flex">
                        <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                        <el-checkbox v-model="checked" style="margin-left: 5px; margin-right: 5px">只读</el-checkbox>
                        <el-checkbox v-model="checked" style="margin-left: 5px;margin-right: 0px">必填</el-checkbox>
                      </div>
                    </el-form-item>
                  </el-col>
                  <el-col :span="12">
                    <el-form-item label="显示名称">
                      <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                    </el-form-item>
                  </el-col>
                  <el-col :span="12">
                    <el-form-item class="rightLabel" label="显示类型">
                      <el-select v-model="form.region" placeholder="请选择活动区域" size="mini">
                        <el-option label="区域一" value="shanghai"></el-option>
                        <el-option label="区域二" value="beijing"></el-option>
                      </el-select>
                    </el-form-item>
                  </el-col>
                  <el-col :span="24">
                    <el-tooltip content="默认值表达式" placement="top">
                      <el-form-item class="hiddenLabel" label="默认值表达式">
                        <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                      </el-form-item>
                    </el-tooltip>
                  </el-col>
                  <el-col :span="24">
                    <!--                    <el-tooltip content="显示表达式" placement="top">-->
                    <el-form-item label="显示表达式">
                      <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                    </el-form-item>
                    <!--                    </el-tooltip>-->
                  </el-col>
                  <el-col :span="24">
                    <el-tooltip content="日期格式化字符串" placement="top">
                      <el-form-item class="hiddenLabel" label="日期格式化字符串:">
                        <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                      </el-form-item>
                    </el-tooltip>
                  </el-col>
                  <el-col :span="24">
                    <el-form-item label="占位方式">
                      <el-radio v-model="treeRadio" label="0">显示</el-radio>
                      <el-radio v-model="treeRadio" label="1">不显示</el-radio>
                    </el-form-item>
                  </el-col>
                  <el-col :span="24" style="height: 90px">
                    <el-form-item label="字段表达式">
                      <el-input
                        v-model="textarea2"
                        :rows="3"
                        placeholder="请输入内容"
                        resize="none"
                        type="textarea">
                      </el-input>
                    </el-form-item>
                  </el-col>
                  <el-col :span="24" style="height: 90px">
                    <el-tooltip content="只读选择条件" placement="top">
                      <el-form-item class="hiddenLabel" label="只读选择条件">
                        <el-input
                          v-model="textarea2"
                          :rows="3"
                          placeholder="请输入内容"
                          resize="none"
                          type="textarea">
                        </el-input>
                      </el-form-item>
                    </el-tooltip>
                  </el-col>
                  <el-col :span="12">
                    <el-form-item label="控制列">
                      <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                    </el-form-item>
                  </el-col>
                  <el-col :span="12">
                    <el-form-item class="rightLabel" label="显示列条件" label-width="95px">
                      <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                    </el-form-item>
                  </el-col>
                  <el-col :span="24">
                    <el-form-item label="权限控制">
                      <div style="display: flex;align-items: center">
                        <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                        <el-button plain size="mini" style="margin-left: 3px" type="success">选择</el-button>
                      </div>
                    </el-form-item>
                  </el-col>
                </el-row>
                <el-row style="margin-top: 10px;border-bottom: 1px solid #878585;padding-bottom: 10px">
                  <el-col :span="24" style="height: 90px">
                    <el-form-item label="脚本验证">
                      <el-input
                        v-model="textarea2"
                        :rows="3"
                        placeholder="请输入内容"
                        resize="none"
                        type="textarea">
                      </el-input>
                    </el-form-item>
                  </el-col>
                  <el-col :span="24" style="height: 90px">
                    <el-form-item label="提示文字">
                      <el-input
                        v-model="textarea2"
                        :rows="3"
                        placeholder="请输入内容"
                        resize="none"
                        type="textarea">
                      </el-input>
                    </el-form-item>
                  </el-col>
                  <el-col :span="24">
                    <el-form-item label="查询关联列">
                      <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                    </el-form-item>
                  </el-col>
                  <el-col :span="24">
                    <el-form-item label="自定义类">
                      <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                    </el-form-item>
                  </el-col>
                  <el-col :span="24">
                    <el-form-item label="存储路径">
                      <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                    </el-form-item>
                  </el-col>
                  <el-col :span="24">
                    <el-tooltip content="存储路径字段" placement="top">
                      <el-form-item class="hiddenLabel" label="存储路径字段">
                        <div style="display: flex">
                          <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                          <el-checkbox v-model="checked" style="margin-left: 5px">http存储</el-checkbox>
                        </div>
                      </el-form-item>
                    </el-tooltip>
                  </el-col>
                </el-row>
                <el-row style="margin-top: 10px;border-bottom: 1px solid #878585;padding-bottom: 10px">
                  <h4>选项列表</h4>
                  <el-col :span="12">
                    <el-form-item label="名称">
                      <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                    </el-form-item>
                  </el-col>
                  <el-col :span="12">
                    <el-form-item class="rightLabel" label="值" label-width="95px">
                      <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                    </el-form-item>
                  </el-col>
                  <el-col :span="24" style="height: 190px">
                    <el-form-item>
                      <div style="height: 150px; width: 100%; border: 1px solid #bdbbbb;overflow-y: auto">
                        <el-table
                          :data="optionRightData"
                          :highlight-current-row="true"
                          :show-header="false"
                          border
                          stripe
                          style="width: 100%">
                          <el-table-column
                            align="center"
                            label="名称"
                            prop="name">
                            <template slot-scope="scope">
                              <el-tag size="medium">{{ scope.row.name }}</el-tag>
                            </template>
                          </el-table-column>
                          <el-table-column
                            align="center"
                            label="值"
                            prop="value">
                            <template slot-scope="scope">
                              <el-tag size="medium">{{ scope.row.value }}</el-tag>
                            </template>
                          </el-table-column>
                        </el-table>
                      </div>
                      <div style="display: flex;align-items: center;justify-content: center;margin-top: 5px">
                        <el-button plain size="mini" style="margin-right: 5px" type="success">添加</el-button>
                        <el-button plain size="mini" style="margin-left: 5px" type="danger">删除</el-button>
                      </div>
                    </el-form-item>
                  </el-col>
                  <el-col :span="24">
                    <el-form-item label="一级参照">
                      <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                    </el-form-item>
                  </el-col>
                  <el-col :span="24">
                    <el-form-item label="二级参照">
                      <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                    </el-form-item>
                  </el-col>
                  <el-col :span="24">
                    <el-form-item label="参照值">
                      <el-input v-model="user" placeholder="请输入内容" size="mini"></el-input>
                    </el-form-item>
                  </el-col>
                </el-row>
                <el-row style="margin-top: 10px">
                  <el-col :span="24" style="height: 90px">
                    <el-form-item label="附加属性">
                      <el-input
                        v-model="textarea2"
                        :rows="3"
                        placeholder="请输入内容"
                        resize="none"
                        type="textarea">
                      </el-input>
                    </el-form-item>
                  </el-col>
                </el-row>
              </el-form>
            </div>
          </basic-container>
        </el-aside>
      </div>
    </el-container>
  </el-dialog>
</template>
<script>
export default {
  name: "formDialog",
  data() {
    return {
      formList:[],
      optionRightData: [
        {
          name: 'test',
          value: 'test'
        }
      ],
      form: {},
      rules: {},
      columnNumber: 12,
      loading: false,
      visible: false,
      treeOption: {
        menu: false,
        addBtn: false,
        draggable: true,
        allowDrop: () => {
          return false;
        },
        allowDrag: () => {
          return true;
        },
        // props: {
        //   label: 'name',
        //   value: 'id',
        //   children: 'children',
        // },
      },
      treeData: [
        {
          value: 0,
          label: '一级部门',
          children: [
            {
              value: 1,
              label: '一级部门1',
            }, {
              value: 2,
              label: '一级部门2',
            }
          ]
        }, {
          value: 3,
          label: '二级部门',
          children: [
            {
              value: 4,
              label: '二级部门1',
            }, {
              value: 5,
              label: '二级部门2',
            }
          ]
        },
        {
          value: 0,
          label: '一级部门',
          children: [
            {
              value: 1,
              label: '一级部门1',
            }, {
              value: 2,
              label: '一级部门2',
            }
          ]
        }, {
          value: 3,
          label: '二级部门',
          children: [
            {
              value: 4,
              label: '二级部门1',
            }, {
              value: 5,
              label: '二级部门2',
            }
          ]
        },
        {
          value: 0,
          label: '一级部门',
          children: [
            {
              value: 1,
              label: '一级部门1',
            }, {
              value: 2,
              label: '一级部门2',
            }
          ]
        }, {
          value: 3,
          label: '二级部门',
          children: [
            {
              value: 4,
              label: '二级部门1',
            }, {
              value: 5,
              label: '二级部门2',
            }
          ]
        },
        {
          value: 0,
          label: '一级部门',
          children: [
            {
              value: 1,
              label: '一级部门1',
            }, {
              value: 2,
              label: '一级部门2',
            }
          ]
        }, {
          value: 3,
          label: '二级部门',
          children: [
            {
              value: 4,
              label: '二级部门1',
            }, {
              value: 5,
              label: '二级部门2',
            }
          ]
        },
        {
          value: 0,
          label: '一级部门',
          children: [
            {
              value: 1,
              label: '一级部门1',
            }, {
              value: 2,
              label: '一级部门2',
            }
          ]
        }, {
          value: 3,
          label: '二级部门',
          children: [
            {
              value: 4,
              label: '二级部门1',
            }, {
              value: 5,
              label: '二级部门2',
            }
          ]
        },
        {
          value: 0,
          label: '一级部门',
          children: [
            {
              value: 1,
              label: '一级部门1',
            }, {
              value: 2,
              label: '一级部门2',
            }
          ]
        }, {
          value: 3,
          label: '二级部门',
          children: [
            {
              value: 4,
              label: '二级部门1',
            }, {
              value: 5,
              label: '二级部门2',
            }
          ]
        },
        {
          value: 0,
          label: '一级部门',
          children: [
            {
              value: 1,
              label: '一级部门1',
            }, {
              value: 2,
              label: '一级部门2',
            }
          ]
        }, {
          value: 3,
          label: '二级部门',
          children: [
            {
              value: 4,
              label: '二级部门1',
            }, {
              value: 5,
              label: '二级部门2',
            }
          ]
        }
      ]
    }
  },
  methods: {
    // å…³é—­å¯¹è¯æ¡†
    closeDialog() {
    },
    // å¼€å§‹æ‹–拽树节点事件
    handleDragStart(node, ev) {
      // ä½¿ç”¨ setData æ–¹æ³•设置数据
      ev.dataTransfer.setData('item', JSON.stringify(node.data));
    },
    // æ‹–拽到表单时
    drop(event) {
      // ä½¿ç”¨ getData æ–¹æ³•获取数据
      const data = JSON.parse(event.dataTransfer.getData('item'));
      console.log('data', data);
      const params = {
        name:data.label,
        value:'',
        type:''
      }
      this.formList.push(params)
    }
  }
}
</script>
<style lang="scss" scoped>
::v-deep {
  .hiddenLabel {
    .el-form-item__label {
      white-space: nowrap; // é˜²æ­¢æ¢è¡Œ
      overflow: hidden; //隐藏超出部分
      text-overflow: ellipsis; //显示省略号
    }
  }
  .el-col {
    margin-bottom: 0px;
    height: 40px;
  }
  .rightLabel {
    .el-form-item__label {
      text-align: right !important;
    }
  }
}
.tableTopLabel {
  display: flex;
  flex-shrink: 0 !important;
  font-size: 14px
}
</style>