Element-plus入门

<template>
  <el-button type="primary">Hello Element Plus</el-button>
  <el-button type="success" size="small">成功按钮(小尺寸)</el-button>
  <el-button type="danger" disabled>禁用按钮</el-button>
  <el-button icon="Search">带图标按钮</el-button>

  <el-input v-model="username" placeholder="请输入用户名" :disable="isDisabled" clearable prefix-icon="User"></el-input>
  <!--  垂直容器布局-->
  <el-container style="height: 300px;border: 1px solid #2c3e50"> <!-- 布局容器 -->
    <el-header style="background-color: #409EFF;color: white;">头部</el-header>
    <el-container>
      <el-aside width="200px" style="background-color: #F5F5F5;">侧边栏</el-aside>
      <el-main>
        24栅格布局
        <el-row :gutter="20"> <!-- gutter:列间距 -->
          <el-col :span="8"> 列1(占8、24)</el-col>
          <el-col :span="8"> 列2(占8、24)</el-col>
          <el-col :span="8"> 列3(占8、24)</el-col>
        </el-row>
      </el-main>
    </el-container>
  </el-container>

  <!--  表单容器:model绑定表单数据,rules绑定验证规则-->
  <el-form :model="form" :rules="formRules" ref="formRef" label-width="100px">
    表单项:label 标签文本
    <el-form-item label="用户名" prop="username">
      <el-input v-model="form.username" placeholder="请输入用户名"></el-input>
    </el-form-item>
    <el-form-item label="用户名" prop="password">
      <el-input v-model="form.password" placeholder="请输入密码"></el-input>
    </el-form-item>
    <el-form-item label="性别">
      <el-radio-group v-model="form.gender">
        <el-radio label="male">男</el-radio>
        <el-radio label="female">女</el-radio>
      </el-radio-group>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm">提交</el-button>
      <el-button @click="resetForm">重置</el-button>
    </el-form-item>
  </el-form>

<!--  表格:data绑定数据源,border显示边框,stripe斑马纹-->
  <el-table :data="tableData" border stripe style="width: 100%">
<!--    表格列表:label列标题,prop对应数据的key-->
    <el-table-column label="ID" prop="id" width="80"></el-table-column>
    <el-table-column label="姓名" prop="name"></el-table-column>
    <el-table-column label="年龄" prop="age"></el-table-column>
    <el-table-column label="操作">
<!--      自定义列内容-->
      <template #default="scope">
          <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button>
          <el-button type="text" color="red" @click="handleDelete(scope.row)">删除</el-button>
      </template>
    </el-table-column>
  </el-table>
<!--  分页组件:@size-change 每页条数变化,@current-change页码变化-->
  <el-pagination @size-change="handleSizeChange"
    @current-change="handleCurrentChange"
    :current-page="currentPage"
    :page-sizes="[10,20,30,40]"
    :page-size="pageSize"
    layot = "total,sizes,prev,pager,next,jumper"
    :total="total"
    style = "margin-top:20px;text-align: right;"
  >
  </el-pagination>

  <el-button type="primary" @click="openDialog">打开弹窗</el-button>
<!--  弹窗:v-model控制显示和隐藏;title标题,width宽度-->
  <el-dialog v-model="isDialogOpen" title="编辑用户" width="50%">
    <el-form :model="editForm" label-width="80px">
    <el-form-item label="姓名">
       <el-input v-model="editForm.name"></el-input>
    </el-form-item>

      <el-form-item label="年龄">
        <el-input v-model="editForm.age"></el-input>
      </el-form-item>

    </el-form>
<!--    弹窗底部按钮(通过footer插槽自定义)-->
    <template #footer>
      <el-button @click="isDialogOpen = false">取消</el-button>
      <el-button type="primary" @click="saveEdit">保存</el-button>
    </template>
  </el-dialog>
  <hr>
  <!-- 渲染后的按钮(不管用) -->
  <button class="el-button el-button--primary">
    按钮文字
  </button>
  <el-button type="primary" @click="showMessage">显示消息提示</el-button>
  <el-button type="danger" @click="showConfirm">显示确认弹窗</el-button>

  <el-button :size="buttonSize">响应式按钮</el-button>
  <el-input :size="inputSize" placeholder="响应式输入框">响应式输入框</el-input>
</template>

<script setup>
import {ref,onMounted,onUnmounted} from 'vue'
import {ElMessage,ElMessageBox} from "element-plus";

const username = ref('') //绑定输入值
const isDisabled = ref(false) //是否禁用

//表单数据
const form = ref({
  username: '',
  password: '',
  gender: 'male'
})
//表单验证规则(required:必填,message:错误提示,trigger:触发验证的时机)
const formRules = ref({
  username: [
    {required: true, message: '请输入用户名', trigger: 'blur'},
    {min: 3, max: 10, message: '用户名长度在3-10之间', trigger: 'blur'}
  ],
  password: [
    {required: true, message: '请输入密码', trigger: 'blur'},
    {min: 6, message: '密码至少6位', trigger: 'blur'}
  ]
})
//表单引用(用于调用表单方法)
const formRef = ref(null)

//提交表单:调用表单验证
const submitForm = () => {
  formRef.value.validate((isValid) => {
    if (isValid) {
      console.log('表单验证通过,提交数据:', form.value)
      //这里写接口请求逻辑
    } else {
      console.log('表单验证失败')
      return false
    }
  })
}
//重置表单
const resetForm = () => {
  // eslint-disable-next-line no-undef
  formRef.value.resetFields() //重置表单字段和验证状态
}

//表格数据(模拟接口返回)
const tableData = ref([
  {id:1,name:'张三',age:25},
  {id:2,name:'李四',age:24},
  {id:3,name:'qq',age:20},
])
//分页参数
const currentPage=ref(1) // 当前页码
const pageSize = ref(10) //每页条数
const total = ref(100) //总条数

//编辑操作
const handleEdit = (row) =>{
  console.log('编辑数据:',row)
}
//删除操作
const handleDelete = (row)=>{
  console.log("删除数据:",row)
}
//每页条数变化
const handleSizeChange =(val) =>{
  pageSize.value = val
  //这里写重新请求接口的逻辑(携带新的pageSize和currentPage)
}
//页码变化
const handleCurrentChange = (val) =>{
  currentPage.value = val
  //这里写重新请求接口的逻辑
}


//控制弹窗显示/隐藏
const isDialogOpen = ref(false)
//编辑表单数据
const editForm = ref({
  name:'',
  age:''
})
//打开弹窗
const openDialog = ()=>{
  editForm.value = {name:'张三',age:25} //模拟回显数据
  isDialogOpen.value = true
}
//保存逻辑
const saveEdit = ()=>{
  console.log('保存编辑:',editForm.value)
  isDialogOpen.value = false //关闭
}
//无需手动import,AutoImport自动导入
const showMessage = ()=>{
  ElMessage.success('操作成功') //成功消息
  // ElMessage.warning('警告显示')
  // ElMessage.error('错误显示')
}
const showConfirm = ()=>{
  ElMessageBox.confirm(
      '确定要删除这条数据吗?',
      '确认提示',
      {
        confirmButtonText:'确定',
        cancelButtonText:'取消',
        type:'warning'
      }
  ).then(()=>{
    ElMessage.success('删除成功!')
  }).catch(()=>{
    ElMessage.info('已取消删除')
  })
}
//初始化组件尺寸
const buttonSize = ref('default')
const inputSize = ref('default')
//窗口大小变化
const handleResize = ()=>{
  const width = window.innerWidth
  if (width < 768){
    buttonSize.value = 'mini'
    inputSize.value = 'mini'
  }else if (width<1200){
    buttonSize.value = 'small'
    inputSize.value = 'small'
  }else {
    buttonSize.value = 'default'
    inputSize.value = 'default'
  }
}
//挂载时监听,卸载时移除监听
onMounted(()=>{
  handleResize() //初始化
  window.addEventListener('resize',handleResize())
})
onUnmounted(()=>{
  window.removeEventListener('resize',handleResize())
})
</script>

<style scoped>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
/** 修改按钮的背景色和文字色 (不生效)**/
:deep(.el-button--primary){
  background-color: #67c23a !important;
  border-color: #67c23a !important;
}
:deep(.el-button--primary:hover){
  background-color: red !important;
  border-color: red !important;
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值