经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Vue.js » 查看文章
ve-plus:基于 vue3.x 桌面端UI组件库|vue3组件库
来源:cnblogs  作者:xiaoyan2017  时间:2023/3/3 8:53:30  对本文有异议

VE-Plus 自研轻量级 vue3.js 桌面pc端UI组件库

经过一个多月的筹划及开发,今天给大家带来一款全新的Vue3桌面端UI组件库VEPlus。新增了35+常用的组件,采用vue3 setup语法糖开发,在使用上和element-ui比较类似,极易快速上手。

ve-plus 致力数据驱动视图,使用最少的代码量来实现和element-ui一样的功能。极少引入外部插件,高定制化及运行速度快。

整合了之前使用vue3.js开发的两个独立插件vue3-layer弹窗vue3-scrollbar虚拟滚动条组件。

ve-plus遵循简洁直观的UI风格,设计样式、图标和文本、元素的位置等保持一致性。

◆ 安装

  1. npm install ve-plus -S
  2. cnpm install ve-plus -S
  3. yarn add ve-plus

◆ 快速引入

ve-plus 支持全局引入按需引入两种引入方式。

  1. import { createApp } from "vue"
  2. import App from "./App.vue"
  3. import VEPlus from "ve-plus"
  4. const app = createApp(App)
  5. app.use(VEPlus)
  6. app.mount("#app")
  1. import { Button, Input, Checkbox } from "ve-plus"
  2. <Button type="success" round>按钮</Button>
  3. <Input v-model="value" />
  4. <Checkbox v-model="checked" label="选中" />

◆ 快速使用

  1. <Button type="primary">Primary</Button>
  2. <Button type="success">Success</Button>
  3. <Button type="warning" round>Warning</Button>
  4. <Button type="primary" icon="ve-icon-filetext" circle></Button>
  5.  
  6. <Input v-model="inputVal" placeholder="输入用户名" />
  7.  
  8. <Checkbox v-model="checkboxValue" label="Checkbox" />
  9.  
  10. <Select v-model="selectVal" :options="options" size="large" clearable />
  11. ...

  1. <script setup>
  2. const formRuleRef = ref()
  3. const rules = ref({
  4. name: [
  5. { required: true, message: "请输入活动名称", trigger: ["blur", "input"] },
  6. { min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" }
  7. ],
  8. region: [
  9. { required: true, message: "请选择活动区域", trigger: "change" }
  10. ],
  11. type: [
  12. { type: "array", required: true, message: "请至少选择一个活动性质", trigger: "change" }
  13. ],
  14. resource: [
  15. { required: true, message: "请选择活动资源", trigger: "change" }
  16. ],
  17. // summary: [
  18. // { required: true, message: "请填写活动详情", trigger: "blur" }
  19. // ]
  20. })
  21. const handleSubmit = () => {
  22. formRuleRef.value.validate(valid => {
  23. if(valid) {
  24. console.log("submit")
  25. }else {
  26. console.log("error...")
  27. return false
  28. }
  29. })
  30. }
  31. const handleReset = () => {
  32. formRuleRef.value.resetFields()
  33. }
  34. </script>
  35.  
  36. <template>
  37. <Form
  38. ref="formRuleRef"
  39. :model="formObj"
  40. labelWidth="80px"
  41. :rules="rules"
  42. style="width: 600px;"
  43. >
  44. <FormItem label="活动名称" prop="name">
  45. <Input v-model="formObj.name" />
  46. </FormItem>
  47. <FormItem label="活动区域" prop="region">
  48. <Select v-model="formObj.region" :options="regionOptions" clearable multiple />
  49. </FormItem>
  50. <FormItem label="即时配送" prop="delivery" required message="请勾选即时配送" trigger="change">
  51. <Switch v-model="formObj.delivery" />
  52. </FormItem>
  53. <FormItem label="活动性质" prop="type">
  54. <CheckboxGroup v-model="formObj.type">
  55. <Checkbox label="美食/餐厅线上活动" button />
  56. <Checkbox label="亲子主题" button />
  57. <Checkbox label="品牌推广" button />
  58. </CheckboxGroup>
  59. </FormItem>
  60. <FormItem label="特殊资源" prop="resource">
  61. <RadioGroup v-model="formObj.resource">
  62. <Radio label="线上品牌商赞助" button />
  63. <Radio label="线下场地免费" button />
  64. </RadioGroup>
  65. </FormItem>
  66. <FormItem label="活动详情" prop="summary" :rule="[{ required: true, message: "请填写活动详情", trigger: "blur" }]">
  67. <Input v-model="formObj.summary" type="textarea" rows={3} />
  68. </FormItem>
  69. <FormItem>
  70. <Button type="primary" @click="handleSubmit">立即创建</Button>
  71. <Button @click="handleReset">重置</Button>
  72. </FormItem>
  73. </Form>
  74. </template>

  1. <template>
  2. <Loading v-model="loaded" background="rgba(0,0,0,.75)" spinner="ve-icon-loading" fullscreen="false">
  3. <template #text><div>加载中...</div></template>
  4. </Loading>
  5.  
  6. <Loading v-model="loaded" text="Loading..." background="rgba(0,0,0,.75)" fullscreen="false" />
  7. </template>

Loading加载组件还支持loading({})函数式调用。

  1. <script setup>
  2. const handleLoading = () => {
  3. loading({
  4. // spinner: "sv-icon-loading",
  5. text: "Loading...",
  6. background: "rgba(0,0,0,.75)",
  7. size: 32,
  8. // time: 3, // 3s后关闭
  9. shadeClose: true,
  10. onOpen: () => {
  11. console.log("开启loading")
  12. },
  13. onClose: () => {
  14. console.log("关闭loading")
  15. }
  16. })
  17. // setTimeout(() => {
  18. // loading.close()
  19. // }, 3000)
  20. }
  21. </script>
  22. <template>
  23. <Button type="primary" @click="handleLoading">全屏loading</Button>
  24. </template>

支持light/dark两种主题提示,设置closable属性可关闭,支持自定义icon图标

  1. <template>
  2. <Button @click="Message.success("成功提示")">成功</Button>
  3. <Button @click="Message({title: "警告提示", type: "warning"})">警告</Button>
  4. <Button @click="Message.danger("错误提示")">错误</Button>
  5. <Button @click="Message.info("消息提示")">消息</Button>
  6. </template>

  1. <script setup>
  2. // 设置多选
  3. const tableToggleRef = ref()
  4. const toggleSelection = (value) => {
  5. tableToggleRef.value.setCurrentRow(value)
  6. }
  7. const toggleTableData = ref([...Array(5)].map((_, i) => ({
  8. date: `2023-01-${10+i}`,
  9. name: "Andy",
  10. state: "Lindon",
  11. city: "Los Ageles",
  12. address: `London Park Road no. ${i}`,
  13. zip: "CA 90036"
  14. })))
  15. const toggleTableColumns = ref([
  16. {type: "selection", width: 100, fixed: true},
  17. {prop: "date", label: "Date", width: 150, fixed: true},
  18. {prop: "name", label: "Name", align: "center", width: 120},
  19. {prop: "state", label: "State", width: 120},
  20. {prop: "city", label: "City", width: 120},
  21. {prop: "address", label: "Address", width: 600},
  22. {prop: "zip", label: "Zip", width: 120},
  23. {prop: "action", label: "Action", width: 120, fixed: "right"}
  24. ])
  25. </script>
  26. <template>
  27. <Table
  28. ref="tableToggleRef"
  29. :dataSource="toggleTableData"
  30. :columns="toggleTableColumns"
  31. highlight-current-row
  32. :highlight-multiple="true"
  33. />
  34. <Button block @click="toggleSelection([2,4])">Toggle selection status of third and five rows</Button>
  35. <Button block @click="toggleSelection()">Clear selection</Button>
  36. </template>

好了,这次分享就先到这里,感兴趣的童靴可以安装体验一下。如果有好的想法或建议,欢迎一起交流讨论哈!

后续还会基于这个ve-plus组件库开发一个全新的Vue3后台管理系统,到时也会分享出来。

 

原文链接:https://www.cnblogs.com/xiaoyan2017/p/17170454.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号