<el-dialog:visible="dialogVisi...">
最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • ElementUI 组件封装之 el-dialog

    正文概述 掘金(dolt)   2021-04-07   903

    效果

    ElementUI 组件封装之 el-dialog

    组件

    <template>
      <div class="RegDialog" v-if="visible">
        <el-dialog
          :visible="dialogVisible"
          v-bind="$attrs"
          v-on="$listeners"
          :
          width="600px"
          @close="close"
        >
          <template slot="title">
            <slot name="title"></slot>
          </template>
          <slot>
            <el-form
              :model="formData"
              ref="formRef"
              :rules="rules"
              class="form-style-overlay"
            >
              <el-form-item label="服务进程" prop="server" v-if="list.length !== 0">
                <el-select v-model="formData.server" placeholder="请选择服务进程">
                  <el-option
                    v-for="item in list"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  >
                  </el-option>
                </el-select>
              </el-form-item>
              <el-form-item label="服务进程" prop="server" v-if="treeList.length !== 0">
                <el-select
                  ref="selectRef"
                  v-model="formData.server"
                  placeholder="请选择服务进程"
                  popper-class="regdialog"
                >
                  <template slot="empty">
                    <el-tree
                      :data="treeList"
                      :props="defaultProps"
                      @node-click="handleNodeClick"
                    ></el-tree>
                  </template>
                </el-select>
              </el-form-item>
              <el-form-item label="完成日期" prop="data">
                <el-date-picker
                  v-model="formData.data"
                  type="date"
                  placeholder="请选择完成日期"
                >
                </el-date-picker>
              </el-form-item>
    
              <el-form-item label="经办人" prop="name">
                <el-input
                  v-model.trim="formData.name"
                  maxlength="50"
                  placeholder="请输入经办人"
                ></el-input>
              </el-form-item>
              <el-form-item class="whole-line" label="备注" prop="remark">
                <el-input
                  type="textarea"
                  placeholder="请输入备注"
                  v-model="formData.remark"
                  maxlength="1000"
                  show-word-limit
                  :autosize="{ minRows: 6, maxRows: 6 }"
                ></el-input>
              </el-form-item>
            </el-form>
          </slot>
          <template slot="footer">
            <slot name="footer">
              <my-button @click.native="save" checked>保存</my-button>
              <my-button @click.native="cancel">取消</my-button>
            </slot>
          </template>
        </el-dialog>
      </div>
    </template>
    
    <script>
    import MyButton from "@/components/ProjectStaging/MyButton.vue";
    
    export default {
      inheritAttrs: false,
      name: "RegDialog",
      components: {
        MyButton,
      },
      props: {
        visible: {
          type: Boolean,
          required: true,
        },
        list: {
          type: Array,
          default: () => {
            return []
          },
        },
        treeList: {
          type: Array,
          default: () => {
            return []
          },
        },
        operator: {
          type: String,
          default: ''
        }
      },
      data() {
        return {
         
          defaultProps: {
            children: "children",
            label: "label",
          },
          dialogVisible: false,
          formData: {
            server: "",
            data: "",
            name: this.operator,
            remark: "",
          },
          currentId:'',
          rules: {
            server: [
              {
                required: true,
                message: "请选择服务进程",
                trigger: "blur",
              },
            ],
            data: [
              {
                required: true,
                message: "请选择完成日期",
                trigger: "blur",
              },
            ],
            name: [
              {
                required: true,
                message: "请输入经办人",
                trigger: "blur",
              },
            ],
          },
        };
      },
      watch: {
        visible(val) {
          // this.dialogVisible = this.visible;
          // console.log(val)
          // console.log(this.visible)
          this.dialogVisible = val;
        },
      },
      methods: {
        handleNodeClick(data, node) {
          console.log(data,node)
          if (!data.children) {
            this.currentId = data.id
            this.$refs.selectRef.blur();
            this.formData.server = data.label;
            let serveName = [];
            function joinName(node) {
              if (!node.parent) return;
              serveName.unshift(node.data.label);
              joinName(node.parent);
            }
            joinName(node);
            this.formData.server = serveName.join(" - ")
          }
        },
        save() {
          typeof this.$refs.formRef.validate === "function" &&
            this.$refs.formRef.validate((valid) => {
              console.log(valid);
              if (valid) {
                console.log(this.formData);
                if(this.list.length === 0){
                  this.formData.server = this.currentId
                }
                let formData = { ...this.formData };
                this.$emit("getFormData", formData);
                this.dialogVisible = false;
              }
            });
        },
        cancel() {
          this.dialogVisible = false;
        },
        close() {
          this.$emit("update:visible", false);
          typeof this.$refs.formRef.resetFields === "function" &&
            this.$refs.formRef.resetFields();
        },
      },
    };
    </script>
    
    <style lang="scss" scoped>
    .RegDialog {
      /deep/.el-select-dropdown {
        max-height: 230px !important;
        overflow: auto !important;
      }
      .form-style-overlay .el-form-item {
        width: 100%;
        padding-right: 0;
        /deep/ .el-form-item__content {
          margin-right: 0 !important;
          margin-left: 0 !important;
        }
      }
      /deep/.my-button .el-button {
        width: 80px;
      }
      /deep/.el-select-approval {
        .el-select-dropdown {
          min-width: initial;
          width: 50% !important;
          left: 0 !important;
          border-top: 1px solid #d6d6d6;
          border-bottom: 1px solid #d6d6d6;
        }
        .el-select-dropdown__item {
          padding: 0;
          border-radius: 6px;
          .el-tree {
            padding: 6px 0;
          }
          .el-tree--highlight-current
            .el-tree-node.is-current
            > .el-tree-node__content {
            color: #4260db !important;
          }
          .el-tree-node__label {
            font-size: 14px;
            text-overflow: ellipsis;
            overflow: hidden;
            white-space: nowrap;
            padding-right: 10px;
          }
        }
        .el-select-dropdown__item.hover,
        .el-select-dropdown__item:hover {
          background: #eaeaea;
        }
      }
    }
    </style>
    
    

    使用

     <RegDialog
            :visible.sync="dialogVisible"
            :list="list"
            :treeList="treeList"
            
            operator="xxx"
            @getFormData="getFormData"
          ></RegDialog>
    

    说明

    组件说明

    属性

    属性名说明类型默认值
    title弹框左上角文字String办理登记visible.sync弹窗打开关闭的变量Booleanfalselist普通下拉Array[]treeList树形下拉Array[]operator经办人String""

    示例

    list: [
      // {
      //   value: 2,
      //   label: "展示的名字",
      // },
      // {
      //   value: 3,
      //   label: "展示的名字3",
      // },
    ],
    treeList: [
      {
        label: "一级 1",
        children: [
          {
            label: "二级 1-1",
            children: [
              {
                label: "三级 1-1-1",
                id: 111,
              },
            ],
          },
        ],
      },
    ],
    

    事件

    方法名说明参数
    getFormData获取表单数据(点击保存执行的回调){}

    参数示例

    formData: {
        server: "", // 服务进程
        data: "", // 完成日期
        name: "", // 经办人
        remark: "", // 备注
    },
    

    起源地下载网 » ElementUI 组件封装之 el-dialog

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元