【澳门葡京】Dialog对话框事件用法实例分析,使用Vue的slot插槽分发父组件内容落到实处中度复用

前言

写在日前

不久前在运用element-ui框架,用到了Dialog对话框组件,大致达成的意义,跟自家在此以前本人在运动端项目里面弄的一个弹窗组件差不太多。然后就想着把那种弹窗组件的落到实处形式与大家分享一下,上边本文仲带着大家手摸手完结八个弹窗组件。

jQuery Dialog对话框事件用法实例分析,jquerydialog

正文实例讲述了jQuery
Dialog对话框事件用法。分享给大家供大家参考,具体如下:

Dialog对话框事件

对话框应用场景

对话框是最常用、最实用的机能。

1) 静态提醒类对话框,对话框的始末是一定的
2) 动态提示类对话框,对话框内容是依照事件源转变的
3) 遮罩类对话框,对话框弹出时背景变灰并且不可选

利用jQuery UI的Dialog 组件能够轻松完成地点二种意义

Dialog组件的重中之重特征是能够拖动(Draggable),能够改变大小(Resizable)。

Dialog对话框的选用也格外简单易行,选中了三个因素后,能够通过对那几个因素运用”.dialog()”让其变成1个对话框,通过传递各样options属性类修改对话框的各样表现。

平日三个对话框是贰个div成分:

<div id="divTip" title="自定义标题">
  <p>弹出层</p>
</div>

下边包车型地铁说话将利用暗中认可的options属性生成2个对话框。

jQuery("#divTip").dialog();

实施完上边的语句后,那一个div成分变成了3个能够拖动、能够拉伸的对话框。

理所当然这只是最不难易行的施用。上面通过叁个整机的实例来极快上手dialog对话框组件。

选择Dialog控件完毕两种具体的弹出框。

一种是静态弹出层,即弹出层的剧情是稳定的。

一种是动态弹出层,即弹出层的情节据说事件的触发者而分化。

除此以外一种是广阔的遮罩类弹出层,即弹出层展现后,页面上巳了弹出层以外的因素都不可能操作。

率先看一下页面上的多少个因素的HTML片段。

<!—Demo 静态提示类弹出层—>
<div class="ui-widget ui widget-contentui-corner-all" style="width:700px;padding:5px">
  <h3>Demo.共享同一个静态弹出层,弹出层内容固定:</h3>
  <div>
   显示提示  显示提示  
   显示提示   显示提示  
  </div>
  <br/>
  <br/>
<!—Demo动态显示类弹出层-->
<div class="ui-widget ui-widget-contentui-corner-all" style="width:700px; padding:5px">
  <h3>Demo.每个弹出层内容不同,弹出层内容存在事件源的元素属性中:</h3>
  <div>
   红色     
绿色    
</div>
</div>
<br />
<br />
<!—Demo.遮罩类弹出层-->
<div class="ui-widget ui-widget-contentui-corner-all" style="width:700px;padding:5px">
  <h3>Demo.弹出IFrame</h3>
  <div>
   <inputtype="button" id="bunShowIframe" name=" bunShowIframe" value="显示弹出层" />
  </div>
</div>

要素页面上展现的因素,用来触发展现弹出层的风云。

弹出层的html代码如下:

<!—提示类弹出层—>
<div id="divTip" title="自定义标题">
  <p>弹出层</p>
</div>
<!—遮罩类弹出层—>
<div id="divIframe" title="iFrame 弹出层" style="text-align:center">
  <iframesrc="http://www.hbcsdn.tk" width="480px"height="250px" frameborder="0"></iframe>
</div>

【澳门葡京】Dialog对话框事件用法实例分析,使用Vue的slot插槽分发父组件内容落到实处中度复用。弹出层便是3个个div元素。会基于供给展现或隐匿。

准备好了HTML成分,接下去正是使用jQuery
UI的Dialog控件。首先,在initializeDom中,获取稍后需求操作的页面成分。

initializeDom:function(){//初始化DOM
  this.$spanShowTip=$("span[id^=spanShowTip]");
  this.$spanShowDataTip=$("span[id^=spanShowDataTip]");
  this.$btnShowIframe=$("#btnShowIframe");
  this.$divTip=$("#divTip");
  tis.$divIframe=$("#divIframe");
}

愈多关于jQuery相关内容感兴趣的读者可查阅本站专题:《jQuery切换特效与技能计算》、《jQuery拖拽特效与技术总括》、《jQuery扩张技巧总计》、《jQuery常见经典特效汇总》、《jQuery动画与特作用法总括》、《jquery接纳器用法总括》及《jQuery常用插件及用法总括》

企望本文所述对大家jQuery程序设计有所支持。

Dialog对话框事件用法实例分析,jquerydialog
本文实例讲述了jQuery
Dialog对话框事件用法。分享给我们供我们参考,具体如下:
Dialog对话框…

在上一篇博文中介绍了Vue.js的常用命令,后天计算回顾一下弹窗Dialog的运用,弹窗通常被利用在有的表单的增加和删除改查啊,恐怕弹出一些提醒新闻等等,在保留当前页面状态的情形下,告知用户并承接相关操作。

事先写过一篇关于vue落成dialog会话框组件的文章//www.jb51.net/article/139218.htm

正文首要内容会波及到弹窗遮罩的贯彻, slot 插槽的利用格局, props 、
$emit
传参,具体组件代码也传上去了。若是喜欢的话能够点波赞/关心,补助一下,希望大家看完本文能够有所收获。

以前做了报表的增加和删除改查职务,其中使用了dialog弹窗,后天总计归纳一下Vue.js中二种弹窗Dialog的选择

 讲到了如何兑现二个vue对话框组件,当中提到到了父组件和子组件的通讯,那些不用多说,看本身前边的篇章就能清楚,小说最终也说到了,我们能够运用slot插槽来编排组件,slot用来散发内容到子组件中,从而落成组件的冲天复用,编写的零部件特别灵敏。

零件最后实现的功效

主导用法

抑或结合对话框的事例,使用slot来促成对话框组件

澳门葡京 1 

dialog弹出对话框

注册贰个名叫dialog-tip的大局组件

完毕步骤

澳门葡京 2澳门葡京 3

 Vue.component('dialog-tip', {
   template: '#dialog-tip',
   props:['dialogShow','message'],
   data:function(){
    return {
     content:''
    }
   },
   methods:{
   }
  });
  1. 先搭建零部件的html和css样式,遮罩层和内容层。
  2. 定制弹窗内容:弹窗组件通过 slot 插槽接受从父组件那里传过来弹窗内容。
  3. 定制弹窗样式:弹窗组件通过 props
    接收从父组件传过来的弹窗宽度,上下左右的岗位。
  4. 零件开关:通过父组件传进来的 props
    控制组件的来得与隐藏,子组件关闭时通过事件 $emit
    触发父组件改变值。
<el-button type="text" @click="dialogVisible = true">点击打开 Dialog</el-button>

<el-dialog
  title="提示"
  :visible.sync="dialogVisible"
  width="30%"
  :before-close="handleClose">
  这是一段信息

    <el-button @click="dialogVisible = false">取 消</el-button>
    <el-button type="primary" @click="dialogVisible = false">确 定</el-button>

</el-dialog>

行使templete标签来定义这几个组件

1.搭建零部件的html和css样式。

dialog弹出对话框html部分

<template id="dialog-tip">
  <div class="dialog_tip" v-if="dialogShow">
   <div class="dialog_tip--mask"></div>
   <div class="dialog_tip--content">
    <div class="dialog_tip--content__txt">
     <slot name="msg">请输入1-8000之间任意整数</slot>
    </div>
    <div class="dialog_tip--content__btns">
     <slot>
      <button class="btn">确定</button>
      <button class="btn">重新输入</button>
      <button class="btn">去注册</button>
     </slot>
    </div>
   </div>
  </div>
 </template>

<template id="dialog-tip">
  <div class="dialog_tip" v-if="dialogShow">
   <div class="dialog_tip--mask"></div>
   <div class="dialog_tip--content">
    <div class="dialog_tip--content__txt">
     <slot name="msg">请输入1-8000之间任意整数</slot>
    </div>
    <div class="dialog_tip--content__btns">
     <slot>
      <button class="btn">确定</button>
      <button class="btn">重新输入</button>
      <button class="btn">去注册</button>
     </slot>
    </div>
   </div>
  </div>
 </template>

html结构:一层遮罩层,一层内容层,内容层里面又有多个头顶title和重心内容和三个闭馆按钮。

澳门葡京 4澳门葡京 5

零件内容包涵两某些,二个是投砾引珠内容,1个是button按钮,咱们将要修改替换的内容使用slot包罗起来,
 那样父组件就可以分发内容到子组件里面了。

上边是组件中的html结构,里面有部分前面才要加进去的东西,固然看不懂的话能够先跳过,

<script>
  export default {
    data() {
      return {
        dialogVisible: false
      };
    },
    methods: {
      handleClose(done) {
        this.$confirm('确认关闭?')
          .then(_ => {
            done();
          })
          .catch(_ => {});
      }
    }
  };
</script>
<div class="dialog_tip--content__txt">
     <slot name="msg">请输入1-8000之间任意整数</slot>
    </div>
    <div class="dialog_tip--content__btns">
     <slot>
      <button class="btn">确定</button>
      <button class="btn">重新输入</button>
      <button class="btn">去注册</button>
     </slot>
    </div>
<template>
 <div class="dialog">
  <!--外层的遮罩 点击事件用来关闭弹窗,isShow控制弹窗显示 隐藏的props-->
  <div class="dialog-cover back" v-if="isShow" @click="closeMyself"></div>
  <!-- transition 这里可以加一些简单的动画效果 -->
  <transition name="drop">
   <!--style 通过props 控制内容的样式 -->
  <div class="dialog-content" :style="{top:topDistance+'%',width:widNum+'%',left:leftSite+'%'}" v-if="isShow">
   <div class="dialog_head back">
    <!--弹窗头部 title-->
    <slot name="header">提示信息</slot>
   </div>
   <div class="dialog_main" :style="{paddingTop:pdt+'px',paddingBottom:pdb+'px'}">
   <!--弹窗的内容-->
   <slot name="main">弹窗内容</slot>
   </div>
   <!--弹窗关闭按钮-->
   <div class="foot_close" @click="closeMyself">
    <div class="close_img back"></div>
   </div>
  </div>
 </transition>
 </div>
</template>

dialog弹出对话框JS部分

除却默许插槽,还足以定义具名插槽
,如若组件中有有些个部分内容须求替换,大家得以为它定义3个name,例如:

下边是组件中的主要的css样式,里面都做了尽量的表明,主要通过 z-index 和
background 达到遮罩的作用,具体内容的css可以依据本身的供给来安装。

在上头的代码当中,贰个dialog弹窗须要设置visible属性,它接收Boolean,当为true时显得
Dialog。Dialog
分为八个部分:bodyfooterfooter亟待签字为footerslottitle品质用于定义标题,它是可选的,默许值为空。最后,本例还出示了before-close的用法,before-close 仅当用户通过点击关闭图标或遮罩关闭
Dialog 时起效。若是你在 footer 具名 slot 里添加了用来关闭 Dialog
的按钮,那么能够在按钮的点击回调函数里插足 before-close 的有关逻辑。

<slot name="msg">请输入1-8000之间任意整数</slot>

<style lang="scss" scoped>
 // 最外层 设置position定位 
 .dialog {
 position: relative;
 color: #2e2c2d;
 font-size: 16px;
 }
 // 遮罩 设置背景层,z-index值要足够大确保能覆盖,高度 宽度设置满 做到全屏遮罩
 .dialog-cover {
 background: rgba(0,0,0, 0.8);
 position: fixed;
 z-index: 200;
 top: 0;
 left: 0;
 width: 100%;
 height: 100%;
 }
 // 内容层 z-index要比遮罩大,否则会被遮盖,
 .dialog-content{
 position: fixed;
 top: 35%;
 // 移动端使用felx布局 
 display: flex;
 flex-direction: column;
 justify-content: center;
 align-items: center;
 z-index: 300;
 }
</style>

自定义弹窗内容

如此那般在行使组件的时候,钦点slot的name
,就会将这一有的内容替换掉,而不会交替其余的插槽内容

  1. 经过 slot 定制弹窗内容

Dialog
组件的情节能够是即兴的,甚至足以是表格或表单,上面分别举例嵌套表单和表格

<p slot="msg">请输入正确手机号</p>

这一步,只要理解了 slot 的效果以及用法,就从未难题了。

嵌套表格

运用定义好的dialog组件

澳门葡京 ,单个插槽:

eg:

<dialog-tip message="hello" :dialog-show="dialogShow.tip3">
   <p slot="msg">请输入正确手机号</p>
   <button class="btn" @click="closeDialogTip('tip3')">确定</button>
  </dialog-tip>
  <dialog-tip message="hello" :dialog-show="dialogShow.tip4">
   <p slot="msg">抱歉,没有此用户,请核实后输入</p>
   <button class="btn" @click="closeDialogTip('tip4')">重新输入</button>
   <button class="btn" @click="reg">去注册</button>
  </dialog-tip>

<slot>那是在未曾slot传进来的时候,才显示的弹窗内容</slot>
地方是单个插槽也叫默许插槽,在父组件中动用插槽的不利姿势:

澳门葡京 6澳门葡京 7

万一不内定slot的名目,暗中认可dialog-tip标签里面包车型地铁始末会替换子组件中利用slot包涵的内容部分,例如以上

<my-component>
 <!--在my-component里面的所有内容片段都将插入到slot所在的DOM位置,并且会替换掉slot标签-->
 <!--这两个p标签,将替换整个slot标签里面的内容-->
 <p>这是一些初始内容</p>
 <p>这是更多的初始内容</p>
</my-component>
<el-button type="text" @click="dialogTableVisible = true">打开嵌套表格的 Dialog</el-button>

<el-dialog title="球员信息" :visible.sync="dialogTableVisible">
  <el-table :data="gridData">
    <el-table-column property="number" label="球衣号码" width="150"></el-table-column>
    <el-table-column property="name" label="姓名" width="200"></el-table-column>
    <el-table-column property="position" label="所打位置"></el-table-column>
  </el-table>
</el-dialog>

动用slot钦定了它的名目来替换子组件中的对应的slot部分,而从不使用slot内定名称的始末会暗中同意将子组件中
 没有概念具名插槽的局地剧情替换掉。

ps:倘使实组件里面富含 slot 插槽,那么地方的p标签的内容将会被打消。

dialog弹窗嵌套表格html部分

急需注意的是,假设dialog-tip标签里没有定义须要分发的内容,那么子组件中会展现私下认可的插槽内容

签名插槽:

澳门葡京 8澳门葡京 9

有关愈来愈多的slot用法,请移步

所谓的署名插槽,即为 slot 标签赋二个 name
属性,具名插槽能够父组件中分化的内容片段放到子组件的例内地方,具名插槽照旧得以拥有二个暗中同意插槽。下边能够看一下弹窗组件插槽的应用方法:

<script>
  export default {
    data() {
      return {
        gridData: [{
          number: '23',
          name: 'lebron',
          position:'SF'
        }, {
          number: '3',
          name: 'wade',
          position:'SG'
        }, {
          number: '3',
          name: 'paul',
          position:'PG'
        }, {
          number: '7',
          name: 'anthony',
          position:'SF'
        }],
        dialogTableVisible: false,
      };
    }
  };
</script>

最后

<div class="dialog_head back ">
 <!--弹窗头部 title-->
 <slot name="header">提示信息</slot>
 </div>
 <div class="dialog_main " :style="{paddingTop:pdt+'px',paddingBottom:pdb+'px'}">
 <!--弹窗的内容-->
 <slot name="main">弹窗内容</slot>
 </div>

dialog弹窗嵌套表格JS部分

效果图

在父组件中的使用办法:

嵌套表单

澳门葡京 10

将弹窗组件引入要选择的零件中,并透过 components 注册成为组件。
父组件中弹窗组件插槽的运用方法如下。

eg:

总结

<dialogComponent>

 <div slot="header">插入到name为header的slot标签里面</div>
  <div class="dialog_publish_main" slot="main">
  这里是内容插入到子组件的slot的name为main里面,可以在父组件中添加class定义样式,事件类型等各种操作
  </div>
</dialogComponent>

澳门葡京 11澳门葡京 12

以上所述是笔者给我们介绍的应用Vue的slot插槽分发父组件内容落到实处中度复用、特别灵敏的零部件,希望对我们持有协理,借使我们有其余难题欢迎给自家留言,小编会及时还原大家的!

有关组件中用到的插槽的介绍就到此处了,插槽在弹窗组件中的应用是1个超级的栗子,能够看出插槽效用十三分强大,而插槽本人的运用并简单,同学们爱上插槽了没有?

<el-button type="text" @click="dialogFormVisible = true">打开嵌套表单的 Dialog</el-button>

<el-dialog title="增加球员" :visible.sync="dialogFormVisible">
  <el-form :model="form">
    <el-form-item label="球员名称" :label-width="formLabelWidth">
      <el-input v-model="form.name" auto-complete="off"></el-input>
    </el-form-item>
    <el-form-item label="球员位置" :label-width="formLabelWidth">
      <el-select v-model="form.number" placeholder="请选择球员位置">
        <el-option label="组织后卫" value="PG"></el-option>
        <el-option label="得分后卫" value="SG"></el-option>
        <el-option label="小前锋" value="SF"></el-option>
        <el-option label="大前锋" value="PF"></el-option>
        <el-option label="中锋" value="C"></el-option>
      </el-select>
    </el-form-item>
  </el-form>
  <div slot="footer" class="dialog-footer">
    <el-button @click="dialogFormVisible = false">取 消</el-button>
    <el-button type="primary" @click="dialogFormVisible = false">确 定</el-button>
  </div>
</el-dialog>

你恐怕感兴趣的稿子:

  • React为 Vue
    引入容器组件和展现组件的教程详解
  • Vue表单类的父子组件数据传递示例
  • Vue SSKoleos 组件加载难点
  • vue中的模态对话框组件完结进程
  • Vue波纹按钮组件制作
  • Vue完成PopupWindow组件详解
  • vue弹窗组件使用办法
  • 学习Vue组件实例
  • vue弹窗音讯组件的利用办法
  • 详解vue组件基础

3.经过 props 控制弹窗显隐&&定制弹窗style

dialog弹窗嵌套表单HTML部分

psops
是Vue中父组件向子组件传递数据的一种形式,不熟稔的小伙伴们得以看一下
props文书档案 。

澳门葡京 13澳门葡京 14

因为弹窗组件都以引到别的组件里面去用的,为了顺应分化组件场景中的弹窗,所以弹窗组件必须具备一定的可定制性,不然那样的零部件将毫无意义,上边介绍一下props的施用办法,以弹窗组件为例:

<script>
  export default {
    data() {
      return {
        dialogFormVisible: false,
        form: {
          name: '',
          region: '',
        },
        formLabelWidth: '120px'
      };
    }
  };
</script>

先是供给在被流传的机件中定义props的部分个性,验证之类的。
接下来在父组件中绑定props数据。

dialog弹窗嵌套表单JS部分

<script>
export default {
 props: {
 isShow: { 
 //弹窗组件是否显示 默认不显示
  type: Boolean,
  default: false,
  required:true, //必须
 },
 //下面这些属性会绑定到div上面 详情参照上面的html结构
 // 如: :style="{top:topDistance+'%',width:widNum+'%'}"
 widNum:{ 
 //内容宽度
  type: Number,
  default:86.5
 },
 leftSite:{
  // 左定位
  type: Number,
  default:6.5
 },
 topDistance: {
  //top上边距
  type: Number,
  default:35
 },
 pdt:{
  //上padding
  type: Number,
  default:22
 },
 pdb:{
  //下padding
  type: Number,
  default:47
 }
 },
}
</script>

嵌套的Dialog

父组件中应用情势:

假定急需在三个Dialog内部嵌套此外叁个Dialog,则需求采取”append-to-body”属性

<dialogComponent :is-show="status.isShowPublish" :top-distance="status.topNum">
</dialogComponent>

eg:

ps:props传递数据不是双向绑定的,而是 单向数据流
,父组件的数目变化时,也会传送到子组件中,那就奇怪着大家不该在子组件中修改props。所以大家在闭馆弹窗的时候就
要求经过 $emit 来修改父组件的数据 ,然后数据会自动传到子组件中。

澳门葡京 15澳门葡京 16

近年来基本上弹窗组件都已兑现的差不离了,还差3个弹窗的闭馆事件,那里就事关到子组件往父组件传参了。

<template>
  <el-button type="text" @click="outerVisible = true">点击打开外层 Dialog</el-button>

  <el-dialog title="外层 Dialog" :visible.sync="outerVisible">
    <el-dialog
      width="30%"
      title="内层 Dialog"
      :visible.sync="innerVisible"
      append-to-body>
    </el-dialog>
    <div slot="footer" class="dialog-footer">
      <el-button @click="outerVisible = false">取 消</el-button>
      <el-button type="primary" @click="innerVisible = true">打开内层 Dialog</el-button>
    </div>
  </el-dialog>
</template>
  1. $emit 触发父组件事件修改数据,关闭弹窗

嵌套Dialog之HTML部分

Vue中在子组件往父组件传参,很多都以透过 $emit
来触发父组件的事件来修改数据。

澳门葡京 17澳门葡京 18

在子组件中,在点击关闭,大概遮罩层的时候接触上面这些艺术:

<script>
  export default {
    data() {
      return {
        outerVisible: false,
        innerVisible: false
      };
    }
  }
</script>
methods: {
 closeMyself() {
  this.$emit("on-close"); 
  //如果需要传参的话,可以在"on-close"后面再加参数,然后在父组件的函数里接收就可以了。
 }
 }

嵌套Dialog之JS部分

父组件中的写法:

常规状态下,不建议选用嵌套的
Dialog,假若供给在页面上同时出示多个Dialog,能够将它们平级放置。对于真正供给嵌套 Dialog
的风貌,使用append-to-body个性。如上代码示例,将内层 Dialog
的该属性设置为 true,它就会插入至 body 成分上,从而确认保障内外层 Dialog
和遮罩层级关系的正确。

<dialogComponent :is-show="status.isShowPublish" :top-distance="status.topNum" @on-close="closeDialog"> 
 </dialogComponent>
 //"on-close是监听子组件的时间有没有触发,触发的时候执行closeDialog函数
methods:{
 closeDialog(){
 // this.status.isShowPublish=false;
 //把绑定的弹窗数组 设为false即可关闭弹窗
 },
}

居中布局

能够用弹窗组件达成下列那种音信突显,大概事件交互:

标题和底部可水平居中

澳门葡京 19 

eg:

弹窗组件代码

澳门葡京 20澳门葡京 21

上边是把弹窗的每一个步骤拆分开来,一步步剖析的,每一步都说的相比清楚了,具体连起来的话,能够看看
代码 ,再组成小说就能理的很清楚了。

<el-button type="text" @click="centerDialogVisible = true">点击打开 Dialog</el-button>

<el-dialog
  title="提示"
  :visible.sync="centerDialogVisible"
  width="30%"
  center>
  需要注意的是内容是默认不居中的

    <el-button @click="centerDialogVisible = false">取 消</el-button>
    <el-button type="primary" @click="centerDialogVisible = false">确 定</el-button>

</el-dialog>

总结

dialog弹窗居中布局HTML部分

如上所述是小编给大家介绍的选用Vue组件完毕一个大约弹窗效果,希望对我们全数匡助,假若大家有别的疑问请给我留言,作者会及时回复大家的。在此也非凡多谢我们对台本之家网站的支撑!

澳门葡京 22澳门葡京 23

你或者感兴趣的文章:

  • vue弹窗音信组件的施用形式
  • vue.extend达成alert模态框弹窗组件
  • VUE2完毕事件驱动弹窗示例
  • 很棒的vue弹窗组件
  • 关于vue.js弹窗组件的知识点总计
  • vue弹窗组件使用情势
<script>
  export default {
    data() {
      return {
        centerDialogVisible: false
      };
    }
  };
</script>

dialog弹窗居中布局JS部分

Dialog
的剧情是懒渲染的,即在率先次被打开事先,传入的暗许 slot 不会被渲染到 DOM
上。由此,如若必要执行 DOM
操作,或透过 ref 获取相应组件,请在 open 事件回调中展开。

如果 visible 属性绑定的变量位于 Vuex 的
store
内,那么 .sync 不会健康办事。此时急需去除 .sync 修饰符,同时监听
Dialog 的 open 和 close 事件,在事件回调中实践 Vuex 中对应的
mutation 更新 visible 属性绑定的变量的值。

dialog弹窗(Attributes)**脾气总结**

澳门葡京 24

Dialog弹窗(伊夫nts)事件下结论

 澳门葡京 25

Dialog弹窗(slot)插槽计算(插槽决定将所指引的始末,插入到钦点的某些地方,从而使模板分块,具有模块化的特质和更大的重用性)

 澳门葡京 26

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website