From f5339844c377876f5eb0e08678d6e0ddb376e64e Mon Sep 17 00:00:00 2001
From: bqy_fe <1743369777@qq.com>
Date: Sun, 4 Jul 2021 17:04:10 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20:sparkles:=E6=B7=BB=E5=8A=A0=E7=BB=84?=
=?UTF-8?q?=E4=BB=B6=E4=BA=8B=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.env.development | 3 +
.env.production | 3 +
README.EN.md | 30 +-
README.md | 46 ++-
components.d.ts | 33 +-
index.html | 2 +-
package.json | 34 +-
preview/views/preview.vue | 6 +-
preview/views/slot-item.vue | 52 ++-
src/packages/base-widgets/button/index.tsx | 4 +
src/packages/base-widgets/checkbox/index.tsx | 50 ++-
.../base-widgets/datetimePicker/index.tsx | 12 +-
src/packages/base-widgets/image/index.tsx | 9 +-
.../base-widgets/input/createFieldProps.ts | 7 +-
src/packages/base-widgets/input/index.tsx | 13 +-
src/packages/base-widgets/nav-bar/index.tsx | 6 +-
.../base-widgets/notice-bar/index.tsx | 7 +-
src/packages/base-widgets/picker/index.tsx | 64 ++--
src/packages/base-widgets/process/index.tsx | 2 +-
src/packages/base-widgets/radio/index.tsx | 34 +-
src/packages/base-widgets/rate/index.tsx | 6 +-
src/packages/base-widgets/slider/index.tsx | 6 +-
src/packages/base-widgets/stepper/index.tsx | 8 +-
src/packages/base-widgets/swipe/index.tsx | 3 +-
src/packages/base-widgets/switch/index.tsx | 12 +-
.../container-component/form/compProps.ts | 32 +-
.../container-component/form/index.tsx | 12 +
src/style/common.scss | 9 +
.../components/base-widgets/index.module.scss | 31 +-
.../components/data-source/data-fetch.vue | 19 +-
.../components/data-source/data-model.vue | 1 -
.../components/data-source/utils.tsx | 4 +-
.../left-aside/components/page-tree/index.vue | 50 ++-
.../components/left-aside/tabs.ts | 2 +-
.../components/attr-editor/AttrEditor.tsx | 55 ++-
.../cross-sortable-options-editor.tsx | 135 +++++--
.../components/event-action/index.tsx | 307 ++++++++++++++-
.../right-attribute-panel/index.tsx | 2 +-
.../simulator-editor/simulator-editor.vue | 4 +-
src/visual-editor/hooks/useVisualData.ts | 8 +-
src/visual-editor/types/index.d.ts | 20 +-
src/visual-editor/visual-editor.props.tsx | 30 +-
src/visual-editor/visual-editor.utils.ts | 29 +-
vite.config.ts | 22 +-
yarn.lock | 352 ++++++++++++------
45 files changed, 1164 insertions(+), 412 deletions(-)
diff --git a/.env.development b/.env.development
index cfe99b3..d61b120 100644
--- a/.env.development
+++ b/.env.development
@@ -1,5 +1,8 @@
# 只在开发模式中被载入
+# 网站标题
+VITE_APP_TITLE = H5低代码
+
# 网站前缀
VITE_BASE_URL = /
diff --git a/.env.production b/.env.production
index beb3671..a8c4045 100644
--- a/.env.production
+++ b/.env.production
@@ -1,5 +1,8 @@
# 只在生产模式中被载入
+# 网站标题
+VITE_APP_TITLE = H5低代码
+
# 网站前缀
VITE_BASE_URL = /vite-vue3-lowcode/
diff --git a/README.EN.md b/README.EN.md
index d4b9649..93ee768 100644
--- a/README.EN.md
+++ b/README.EN.md
@@ -49,20 +49,22 @@ let propObj = {
boolean: (config) => `createEditorSwitchProp(${JSON.stringify(config)})`
}
-$$('#props + table tr').reduce((prev, curr) => {
- const children = curr.children
- const key = children[0].textContent.replace(/-([a-z])/g, (all, i) => i.toUpperCase())
- const child3Text = children[3].textContent
- const defaultValue = ['true', 'false'].includes(child3Text)
- ? child3Text
- : `'${child3Text == '-' ? '' : child3Text}'`
- const value = (propObj[children[2].textContent] ?? propObj['string'])({
- label: `'${children[1].textContent}'`,
- defaultValue
- }).replaceAll('"', '')
- prev[key] = value
- return prev
-}, {})
+JSON.stringify(
+ $$('#props + table tbody tr').reduce((prev, curr) => {
+ const children = curr.children
+ const key = children[0].textContent.replace(/-([a-z])/g, (all, i) => i.toUpperCase())
+ const child3Text = children[3].textContent
+ const defaultValue = ['true', 'false'].includes(child3Text)
+ ? child3Text
+ : `'${child3Text == '-' ? '' : child3Text}'`
+ const value = (propObj[children[2].textContent] ?? propObj['string'])({
+ label: `'${children[1].textContent}'`,
+ defaultValue
+ }).replaceAll('"', '')
+ prev[key] = value
+ return prev
+ }, {})
+).replaceAll('"', '')
```
## Browser support
diff --git a/README.md b/README.md
index 323409e..959c6ba 100644
--- a/README.md
+++ b/README.md
@@ -56,20 +56,38 @@ let propObj = {
boolean: (config) => `createEditorSwitchProp(${JSON.stringify(config)})`
}
-$$('#props + table tr').reduce((prev, curr) => {
- const children = curr.children
- const key = children[0].textContent.replace(/-([a-z])/g, (all, i) => i.toUpperCase())
- const child3Text = children[3].textContent
- const defaultValue = ['true', 'false'].includes(child3Text)
- ? child3Text
- : `'${child3Text == '-' ? '' : child3Text}'`
- const value = (propObj[children[2].textContent] ?? propObj['string'])({
- label: `'${children[1].textContent}'`,
- defaultValue
- }).replaceAll('"', '')
- prev[key] = value
- return prev
-}, {})
+JSON.stringify(
+ $$('#props + table tbody tr').reduce((prev, curr) => {
+ const children = curr.children
+ const key = children[0].textContent.replace(/-([a-z])/g, (all, i) => i.toUpperCase())
+ const child3Text = children[3].textContent
+ const defaultValue = ['true', 'false'].includes(child3Text)
+ ? child3Text
+ : `'${child3Text == '-' ? '' : child3Text}'`
+ const value = (propObj[children[2].textContent] ?? propObj['string'])({
+ label: `'${children[1].textContent}'`,
+ defaultValue
+ }).replaceAll('"', '')
+ prev[key] = value
+ return prev
+ }, {})
+).replaceAll('"', '')
+```
+
+```javascript
+// 在vant文档中 chrome控制台输入以下代码,快速生成组件事件
+JSON.stringify(
+ $$('#events + table tbody tr').reduce((prev, curr) => {
+ const children = curr.children
+ const event = {
+ label: children[1].textContent,
+ value: children[0].textContent
+ }
+ return prev.concat([event])
+ }, [])
+)
+ .replaceAll(/(?
-
Vite App
+ H5低代码
diff --git a/package.json b/package.json
index b710ff0..acb29d5 100644
--- a/package.json
+++ b/package.json
@@ -27,15 +27,15 @@
"axios": "^0.21.1",
"dayjs": "^1.10.5",
"dexie": "^3.0.3",
- "element-plus": "1.0.2-beta.52",
+ "element-plus": "1.0.2-beta.54",
"lodash": "^4.17.21",
"monaco-editor": "^0.25.2",
"normalize.css": "^8.0.1",
"nprogress": "^1.0.0-1",
"qrcode": "^1.4.4",
"qs": "^6.10.1",
- "vant": "^3.1.0",
- "vue": "3.1.2",
+ "vant": "^3.1.2",
+ "vue": "3.1.4",
"vue-router": "^4.0.10",
"vuedraggable": "^4.0.3",
"vuex": "^4.0.2"
@@ -43,24 +43,24 @@
"devDependencies": {
"@commitlint/cli": "^12.1.4",
"@commitlint/config-conventional": "^12.1.4",
- "@types/node": "^15.12.4",
- "@typescript-eslint/eslint-plugin": "^4.28.0",
- "@typescript-eslint/parser": "^4.28.0",
- "@vitejs/plugin-legacy": "^1.4.2",
- "@vitejs/plugin-vue": "^1.2.3",
- "@vitejs/plugin-vue-jsx": "^1.1.5",
- "@vue/compiler-sfc": "3.1.2",
+ "@types/node": "^16.0.0",
+ "@typescript-eslint/eslint-plugin": "^4.28.1",
+ "@typescript-eslint/parser": "^4.28.1",
+ "@vitejs/plugin-legacy": "^1.4.3",
+ "@vitejs/plugin-vue": "^1.2.4",
+ "@vitejs/plugin-vue-jsx": "^1.1.6",
+ "@vue/compiler-sfc": "3.1.4",
"commitizen": "^4.2.4",
"cross-env": "^7.0.3",
"cz-conventional-changelog": "^3.3.0",
"cz-customizable": "^6.3.0",
- "eslint": "^7.29.0",
+ "eslint": "^7.30.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.23.4",
"eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-vue": "^7.12.1",
"gh-pages": "^3.2.3",
- "husky": "^6.0.0",
+ "husky": "^7.0.0",
"lint-staged": "^11.0.0",
"prettier": "^2.3.2",
"pretty-quick": "^3.1.1",
@@ -69,14 +69,14 @@
"stylelint-config-prettier": "^8.0.2",
"stylelint-config-standard": "^22.0.0",
"stylelint-order": "^4.1.0",
- "typescript": "^4.3.4",
+ "typescript": "^4.3.5",
"vite": "2.3.8",
- "vite-plugin-components": "^0.11.2",
+ "vite-plugin-components": "^0.12.0",
"vite-plugin-style-import": "^1.0.1",
- "vite-plugin-windicss": "^1.1.1",
- "vue-eslint-parser": "^7.6.0",
+ "vite-plugin-windicss": "^1.2.0",
+ "vue-eslint-parser": "^7.7.2",
"vue-tsc": "^0.2.0",
- "windicss": "^3.1.3"
+ "windicss": "^3.1.4"
},
"repository": {
"type": "git",
diff --git a/preview/views/preview.vue b/preview/views/preview.vue
index 2203e32..f5fd4d1 100644
--- a/preview/views/preview.vue
+++ b/preview/views/preview.vue
@@ -1,14 +1,14 @@
-
+
@@ -69,6 +69,8 @@ export default defineComponent({
return {
...toRefs(state),
+ actions: jsonData.actions,
+ models: jsonData.models,
visualConfig
}
}
diff --git a/preview/views/slot-item.vue b/preview/views/slot-item.vue
index e583951..33b3cfd 100644
--- a/preview/views/slot-item.vue
+++ b/preview/views/slot-item.vue
@@ -1,17 +1,17 @@
-
+
-
+
@@ -22,7 +22,14 @@
import { defineComponent, onMounted, PropType } from 'vue'
import CompRender from './comp-render'
import { useAnimate } from '@/hooks/useAnimate'
-import type { VisualEditorBlockData } from '@/visual-editor/visual-editor.utils'
+import type {
+ VisualEditorBlockData,
+ VisualEditorActions,
+ VisualEditorModel,
+ FetchApiItem
+} from '@/visual-editor/visual-editor.utils'
+import request from '../utils/http/request'
+import { ContentTypeEnum } from '../utils/http/httpEnum'
export default defineComponent({
name: 'SlotItem',
@@ -32,12 +39,45 @@ export default defineComponent({
type: [Object] as PropType,
default: () => ({})
},
+ actions: {
+ type: Object as PropType,
+ default: () => ({})
+ },
+ models: {
+ type: Object as PropType,
+ default: () => ({})
+ },
config: {
type: Object,
default: () => ({})
}
},
setup(props) {
+ // 生成组件事件
+ const events = props.element.actions.reduce((prev, curr) => {
+ prev[curr.event] = async () => {
+ for (const handle of curr.handle) {
+ const [scopeType, actionType, handleKey] = handle.link
+ if (scopeType == 'global') {
+ const apis: FetchApiItem[] = props.actions[actionType].apis
+ const { data, options } = apis.find((item) => item.key == handleKey)!
+ await request({
+ ...options,
+ headers: {
+ 'Content-Type': ContentTypeEnum[options.contentType]
+ },
+ data: {
+ username: 'admin',
+ password: '123456'
+ }
+ })
+ } else if (scopeType == 'component') {
+ }
+ }
+ }
+ return prev
+ }, {})
+
onMounted(() => {
const animations = props.element.animations
if (animations?.length) {
@@ -53,7 +93,9 @@ export default defineComponent({
}
})
- return {}
+ return {
+ events
+ }
}
})
diff --git a/src/packages/base-widgets/button/index.tsx b/src/packages/base-widgets/button/index.tsx
index 76ad758..5042e67 100644
--- a/src/packages/base-widgets/button/index.tsx
+++ b/src/packages/base-widgets/button/index.tsx
@@ -30,6 +30,10 @@ export default {
height: true,
width: true
},
+ events: [
+ { label: '点击按钮,且按钮状态不为加载或禁用时触发', value: 'click' },
+ { label: '开始触摸按钮时触发', value: 'touchstart' }
+ ],
props: {
text: createEditorInputProp({ label: '按钮文字', defaultValue: '按钮' }),
type: createEditorSelectProp({
diff --git a/src/packages/base-widgets/checkbox/index.tsx b/src/packages/base-widgets/checkbox/index.tsx
index 10cf7ef..4e5d11c 100644
--- a/src/packages/base-widgets/checkbox/index.tsx
+++ b/src/packages/base-widgets/checkbox/index.tsx
@@ -1,3 +1,12 @@
+/*
+ * @Author: 卜启缘
+ * @Date: 2021-06-01 09:45:21
+ * @LastEditTime: 2021-07-04 16:50:19
+ * @LastEditors: 卜启缘
+ * @Description: 表单项类型 - 复选框
+ * @FilePath: \vite-vue3-lowcode\src\packages\base-widgets\checkbox\index.tsx
+ */
+import { reactive } from 'vue'
import { Field, Checkbox, CheckboxGroup } from 'vant'
import type { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
import { createFieldProps } from './createFieldProps'
@@ -5,7 +14,8 @@ import { useGlobalProperties } from '@/hooks/useGlobalProperties'
import {
createEditorInputProp,
createEditorSelectProp,
- createEditorTableProp
+ createEditorCrossSortableProp,
+ createEditorModelBindProp
} from '@/visual-editor/visual-editor.props'
export default {
@@ -25,6 +35,11 @@ export default {
render: ({ size, block, props }) => {
const { registerRef } = useGlobalProperties()
+ const state = reactive({
+ checkList:
+ typeof props.modelValue === 'string' ? props.modelValue.split(',') : props.modelValue
+ })
+
return (
(
registerRef(el, block._vid)}
{...props}
- v-model={props.modelValue}
+ v-model={state.checkList}
>
{props.options?.map((item) => (
@@ -51,30 +67,20 @@ export default {
)
},
props: {
- modelValue: createEditorSelectProp({
+ modelValue: createEditorInputProp({
label: '默认值',
- options: [
- { label: '萝卜', value: 'radish' },
- { label: '青菜', value: 'greens' }
- ],
- multiple: true,
defaultValue: []
}),
- name: createEditorInputProp({ label: '字段名', defaultValue: 'checkbox' }),
+ name: createEditorModelBindProp({ label: '字段绑定', defaultValue: '' }),
label: createEditorInputProp({ label: '输入框左侧文本', defaultValue: '复选框' }),
- options: createEditorTableProp({
+ options: createEditorCrossSortableProp({
label: '默认选项',
- option: {
- options: [
- { label: '显示值', field: 'label' },
- { label: '绑定值', field: 'value' },
- { label: '备注', field: 'comments' }
- ],
- showKey: 'label'
- },
+ labelPosition: 'top',
+ multiple: true,
defaultValue: [
- { label: '萝卜', value: 'radish' },
- { label: '青菜', value: 'greens' }
+ { label: '胡萝卜', value: 'carrot' },
+ { label: '白菜', value: 'cabbage' },
+ { label: '猪', value: 'pig' }
]
}),
direction: createEditorSelectProp({
@@ -93,6 +99,10 @@ export default {
}),
...createFieldProps()
},
+ events: [
+ { label: '当绑定值变化时触发的事件', value: 'change' },
+ { label: '点击复选框时触发', value: 'click' }
+ ],
resize: {
width: true
},
diff --git a/src/packages/base-widgets/datetimePicker/index.tsx b/src/packages/base-widgets/datetimePicker/index.tsx
index ec2c8a7..c6ea154 100644
--- a/src/packages/base-widgets/datetimePicker/index.tsx
+++ b/src/packages/base-widgets/datetimePicker/index.tsx
@@ -5,6 +5,7 @@ import { useGlobalProperties } from '@/hooks/useGlobalProperties'
import {
createEditorInputNumberProp,
createEditorInputProp,
+ createEditorModelBindProp,
createEditorSelectProp,
createEditorSwitchProp
} from '@/visual-editor/visual-editor.props'
@@ -52,6 +53,7 @@ export default {
style={{
width: size.width ? `${size.width}px` : null
}}
+ name={Array.isArray(props.name) ? [...props.name].pop() : props.name}
v-slots={{
input: () =>
state.text?.trim() == '' ? (
@@ -77,10 +79,7 @@ export default {
},
props: {
modelValue: createEditorInputProp({ label: '默认值' }),
- name: createEditorInputProp({
- label: '字段名',
- defaultValue: 'datetimePicker'
- }),
+ name: createEditorModelBindProp({ label: '字段绑定', defaultValue: '' }),
label: createEditorInputProp({ label: '输入框左侧文本', defaultValue: '时间选择器' }),
title: createEditorInputProp({ label: '顶部栏标题', defaultValue: '选择时间' }),
type: createEditorSelectProp({
@@ -133,6 +132,11 @@ export default {
placeholder: createEditorInputProp({ label: '占位符', defaultValue: '请选择' }),
...createFieldProps()
},
+ events: [
+ { label: '当值变化时触发的事件', value: 'change' },
+ { label: '点击完成按钮时触发的事件', value: 'confirm' },
+ { label: '点击取消按钮时触发的事件', value: 'cancel' }
+ ],
resize: {
width: true
},
diff --git a/src/packages/base-widgets/image/index.tsx b/src/packages/base-widgets/image/index.tsx
index 057d19b..01d613c 100644
--- a/src/packages/base-widgets/image/index.tsx
+++ b/src/packages/base-widgets/image/index.tsx
@@ -1,7 +1,7 @@
/*
* @Author: 卜启缘
* @Date: 2021-06-01 09:45:21
- * @LastEditTime: 2021-06-25 08:53:12
+ * @LastEditTime: 2021-07-04 16:53:22
* @LastEditors: 卜启缘
* @Description: 图片组件
* @FilePath: \vite-vue3-lowcode\src\packages\base-widgets\image\index.tsx
@@ -84,5 +84,10 @@ export default {
'show-error': createEditorSwitchProp({ label: '是否展示图片加载失败提示' }),
'show-loading': createEditorSwitchProp({ label: '是否展示图片加载中提示' }),
alt: createEditorInputProp({ label: '替代文本' })
- }
+ },
+ events: [
+ { label: '点击图片时触发', value: 'click' },
+ { label: '图片加载完毕时触发', value: 'load' },
+ { label: '图片加载失败时触发', value: 'error' }
+ ]
} as VisualEditorComponent
diff --git a/src/packages/base-widgets/input/createFieldProps.ts b/src/packages/base-widgets/input/createFieldProps.ts
index a6f207b..fa98a82 100644
--- a/src/packages/base-widgets/input/createFieldProps.ts
+++ b/src/packages/base-widgets/input/createFieldProps.ts
@@ -1,7 +1,8 @@
import {
createEditorInputProp,
createEditorSelectProp,
- createEditorSwitchProp
+ createEditorSwitchProp,
+ createEditorModelBindProp
} from '@/visual-editor/visual-editor.props'
/**
@@ -16,7 +17,7 @@ export const createFieldProps = () => ({
label: '默认值',
defaultValue: ''
}),
- name: createEditorInputProp({ label: '字段名', defaultValue: 'input' }),
+ name: createEditorModelBindProp({ label: '字段绑定', defaultValue: '' }),
label: createEditorInputProp({ label: '输入框左侧文本', defaultValue: '输入框' }),
type: createEditorSelectProp({
label: '输入框类型',
@@ -132,7 +133,7 @@ export const createFieldProps = () => ({
defaultValue: 'left'
}),
'label-width': createEditorInputProp({ label: '左侧文本宽度' }),
- maxlength: createEditorInputProp({ label: '输入的最大字符数' }),
+ maxlength: createEditorInputProp({ label: '输入的最大字符数', defaultValue: 500 }),
'show-word-limit': createEditorSwitchProp({
label: '是否显示字数统计',
tips: '需要设置 maxlength 属性'
diff --git a/src/packages/base-widgets/input/index.tsx b/src/packages/base-widgets/input/index.tsx
index b5480f4..e2407ec 100644
--- a/src/packages/base-widgets/input/index.tsx
+++ b/src/packages/base-widgets/input/index.tsx
@@ -1,7 +1,7 @@
/*
* @Author: 卜启缘
* @Date: 2021-05-04 05:36:58
- * @LastEditTime: 2021-06-25 08:49:50
+ * @LastEditTime: 2021-07-03 09:45:56
* @LastEditors: 卜启缘
* @Description: 表单项类型 - 输入框
* @FilePath: \vite-vue3-lowcode\src\packages\base-widgets\input\index.tsx
@@ -33,6 +33,7 @@ export default {
{...props}
{...model.default}
v-model={props.modelValue}
+ name={Array.isArray(props.name) ? [...props.name].pop() : props.name}
rules={rules}
style={{
width: size.width ? `${size.width}px` : null
@@ -40,6 +41,16 @@ export default {
/>
)
},
+ events: [
+ { label: '输入框内容变化时触发', value: 'update:model-value' },
+ { label: '输入框获得焦点时触发', value: 'focus' },
+ { label: '输入框失去焦点时触发', value: 'blur' },
+ { label: '点击清除按钮时触发', value: 'clear' },
+ { label: '点击组件时触发', value: 'click' },
+ { label: '点击输入区域时触发', value: 'click-input' },
+ { label: '点击左侧图标时触发', value: 'click-left-icon' },
+ { label: '点击右侧图标时触发', value: 'click-right-icon' }
+ ],
props: createFieldProps(),
resize: {
width: true
diff --git a/src/packages/base-widgets/nav-bar/index.tsx b/src/packages/base-widgets/nav-bar/index.tsx
index 37381f1..9f40a34 100644
--- a/src/packages/base-widgets/nav-bar/index.tsx
+++ b/src/packages/base-widgets/nav-bar/index.tsx
@@ -1,7 +1,7 @@
/*
* @Author: 卜启缘
* @Date: 2021-05-04 05:36:58
- * @LastEditTime: 2021-06-25 08:49:41
+ * @LastEditTime: 2021-07-04 16:54:00
* @LastEditors: 卜启缘
* @Description: 导航栏
* @FilePath: \vite-vue3-lowcode\src\packages\base-widgets\nav-bar\index.tsx
@@ -48,6 +48,10 @@ export default {
rightText: createEditorInputProp({ label: '右侧文案', defaultValue: '按钮' }),
leftArrow: createEditorSwitchProp({ label: '是否显示左侧箭头', defaultValue: true })
},
+ events: [
+ { label: '点击左侧按钮时触发', value: 'click-left' },
+ { label: '点击右侧按钮时触发', value: 'click-right' }
+ ],
resize: {
width: true
}
diff --git a/src/packages/base-widgets/notice-bar/index.tsx b/src/packages/base-widgets/notice-bar/index.tsx
index 883942b..7655b22 100644
--- a/src/packages/base-widgets/notice-bar/index.tsx
+++ b/src/packages/base-widgets/notice-bar/index.tsx
@@ -1,7 +1,7 @@
/*
* @Author: 卜启缘
* @Date: 2021-06-14 12:24:12
- * @LastEditTime: 2021-06-25 08:53:22
+ * @LastEditTime: 2021-07-04 16:54:32
* @LastEditors: 卜启缘
* @Description:
* @FilePath: \vite-vue3-lowcode\src\packages\base-widgets\notice-bar\index.tsx
@@ -27,6 +27,11 @@ export default {
return registerRef(el, block._vid)} {...props} />
},
+ events: [
+ { label: '点击通知栏时触发', value: 'click' },
+ { label: '关闭通知栏时触发', value: 'close' },
+ { label: '每当滚动栏重新开始滚动时触发', value: 'replay' }
+ ],
props: createFieldProps(),
resize: {
width: true
diff --git a/src/packages/base-widgets/picker/index.tsx b/src/packages/base-widgets/picker/index.tsx
index c11f7ab..32802a4 100644
--- a/src/packages/base-widgets/picker/index.tsx
+++ b/src/packages/base-widgets/picker/index.tsx
@@ -1,8 +1,20 @@
+/*
+ * @Author: 卜启缘
+ * @Date: 2021-06-01 09:45:21
+ * @LastEditTime: 2021-07-04 16:58:50
+ * @LastEditors: 卜启缘
+ * @Description: 表单项类型 - 选择器
+ * @FilePath: \vite-vue3-lowcode\src\packages\base-widgets\picker\index.tsx
+ */
import { Field, Popup, Picker } from 'vant'
import type { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
import { createFieldProps } from './createFieldProps'
import { useGlobalProperties } from '@/hooks/useGlobalProperties'
-import { createEditorInputProp, createEditorTableProp } from '@/visual-editor/visual-editor.props'
+import {
+ createEditorCrossSortableProp,
+ createEditorInputProp,
+ createEditorModelBindProp
+} from '@/visual-editor/visual-editor.props'
import { reactive } from 'vue'
export default {
@@ -14,13 +26,19 @@ export default {
const { registerRef } = useGlobalProperties()
const state = reactive({
showPicker: false,
- text: ''
+ text: '',
+ defaultIndex: 0
})
const customFieldName = {
text: 'label',
value: 'value'
}
+ if (props.modelValue) {
+ state.defaultIndex = props.columns?.findIndex((item) => item.value == props.modelValue)
+ state.text = props.columns[state.defaultIndex]?.label
+ }
+
const onConfirm = (value) => {
props.modelValue = value.value
state.text = value[props.valueKey || 'text']
@@ -39,6 +57,7 @@ export default {
style={{
width: size.width ? `${size.width}px` : null
}}
+ name={Array.isArray(props.name) ? [...props.name].pop() : props.name}
>
{{
input: () =>
@@ -53,6 +72,7 @@ export default {
registerRef(el, block._vid)}
{...props}
+ defaultIndex={state.defaultIndex}
columnsFieldNames={customFieldName}
onConfirm={onConfirm}
onCancel={() => (state.showPicker = false)}
@@ -65,42 +85,26 @@ export default {
},
props: {
modelValue: createEditorInputProp({ label: '默认值' }),
- name: createEditorInputProp({ label: '字段名', defaultValue: 'picker' }),
+ name: createEditorModelBindProp({ label: '字段绑定', defaultValue: '' }),
label: createEditorInputProp({ label: '输入框左侧文本', defaultValue: '选择器' }),
- columns: createEditorTableProp({
- label: '数据项',
- option: {
- options: [
- {
- label: '显示值',
- field: 'label'
- },
- {
- label: '绑定值',
- field: 'value'
- },
- {
- label: '备注',
- field: 'comments'
- }
- ],
- showKey: 'label'
- },
+ columns: createEditorCrossSortableProp({
+ label: '默认选项',
+ labelPosition: 'top',
+ multiple: false,
defaultValue: [
- {
- label: '杭州',
- value: 'hangzhou'
- },
- {
- label: '上海',
- value: 'shanghai'
- }
+ { label: '杭州', value: 'hangzhou' },
+ { label: '上海', value: 'shanghai' }
]
}),
valueKey: createEditorInputProp({ label: '选项对象的键名', defaultValue: 'label' }),
placeholder: createEditorInputProp({ label: '占位符', defaultValue: '请选择' }),
...createFieldProps()
},
+ events: [
+ { label: '点击完成按钮时触发', value: 'confirm' },
+ { label: '点击取消按钮时触发', value: 'cancel' },
+ { label: '选项改变时触发', value: 'change' }
+ ],
resize: {
width: true
},
diff --git a/src/packages/base-widgets/process/index.tsx b/src/packages/base-widgets/process/index.tsx
index b24da8c..fbafa0c 100644
--- a/src/packages/base-widgets/process/index.tsx
+++ b/src/packages/base-widgets/process/index.tsx
@@ -1,7 +1,7 @@
/*
* @Author: 卜启缘
* @Date: 2021-06-12 22:18:48
- * @LastEditTime: 2021-06-25 08:50:11
+ * @LastEditTime: 2021-07-04 17:00:12
* @LastEditors: 卜启缘
* @Description: 进度条
* @FilePath: \vite-vue3-lowcode\src\packages\base-widgets\process\index.tsx
diff --git a/src/packages/base-widgets/radio/index.tsx b/src/packages/base-widgets/radio/index.tsx
index 6e8d33a..7317cdc 100644
--- a/src/packages/base-widgets/radio/index.tsx
+++ b/src/packages/base-widgets/radio/index.tsx
@@ -1,11 +1,20 @@
+/*
+ * @Author: 卜启缘
+ * @Date: 2021-06-01 09:45:21
+ * @LastEditTime: 2021-07-04 17:00:24
+ * @LastEditors: 卜启缘
+ * @Description: 表单项类型 - 单选框
+ * @FilePath: \vite-vue3-lowcode\src\packages\base-widgets\radio\index.tsx
+ */
import { Field, Radio, RadioGroup } from 'vant'
import type { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
import { createFieldProps } from './createFieldProps'
import { useGlobalProperties } from '@/hooks/useGlobalProperties'
import {
+ createEditorCrossSortableProp,
createEditorInputProp,
- createEditorSelectProp,
- createEditorTableProp
+ createEditorModelBindProp,
+ createEditorSelectProp
} from '@/visual-editor/visual-editor.props'
export default {
@@ -28,6 +37,7 @@ export default {
style={{
width: size.width ? `${size.width}px` : null
}}
+ name={Array.isArray(props.name) ? [...props.name].pop() : props.name}
v-slots={{
input: () => (
(
(
(
(
{
label-width="100px"
size={'mini'}
rules={rules}
- class="demo-ruleForm"
>
@@ -190,6 +189,22 @@ const showModelMoal = () => {
options={models.value}
>
+
+
+
),
onConfirm: () => {
diff --git a/src/visual-editor/components/left-aside/components/data-source/data-model.vue b/src/visual-editor/components/left-aside/components/data-source/data-model.vue
index fcbc3b6..b22dd12 100644
--- a/src/visual-editor/components/left-aside/components/data-source/data-model.vue
+++ b/src/visual-editor/components/left-aside/components/data-source/data-model.vue
@@ -147,7 +147,6 @@ const showModelMoal = () => {
ref={(el) => el && (state.ruleFormRef = el)}
label-width="100px"
size={'mini'}
- class="demo-ruleForm"
>
{
return {
showImportSwaggerJsonModal: () =>
useModal({
- title: '导入swagger JSON (导入swagger: 2.0)',
+ title: '导入swagger JSON (支持swagger: 2.0)',
props: {
width: 760
},
diff --git a/src/visual-editor/components/left-aside/components/page-tree/index.vue b/src/visual-editor/components/left-aside/components/page-tree/index.vue
index b2c37db..04862c2 100644
--- a/src/visual-editor/components/left-aside/components/page-tree/index.vue
+++ b/src/visual-editor/components/left-aside/components/page-tree/index.vue
@@ -52,11 +52,11 @@
width="380px"
:title="operatePageData ? '编辑页面' : '新增页面'"
>
-
-
+
+
-
+
@@ -75,6 +75,11 @@ import { useVisualData, createNewPage } from '@/visual-editor/hooks/useVisualDat
import { useRouter, useRoute } from 'vue-router'
import { ElMessage } from 'element-plus'
+const rules = {
+ title: [{ required: true, message: '请输入页面标题', trigger: 'blur' }],
+ path: [{ required: true, message: '请输入页面路径', trigger: 'blur' }]
+}
+
export default defineComponent({
name: 'PageTree',
setup() {
@@ -84,6 +89,7 @@ export default defineComponent({
const { jsonData, setCurrentPage, deletePage, updatePage, incrementPage } = useVisualData()
const state = reactive({
+ ruleForm: null as any,
defaultProps: {
children: 'children',
label: 'title'
@@ -141,24 +147,36 @@ export default defineComponent({
}
// 新增或编辑页面
- const onSubmit = async () => {
- const { title, path } = state.form
- if (title.trim() == '' || path.trim() == '') {
- return ElMessage.error('标题或路径不能为空!')
- }
- if (state.operatePageData) {
- updatePage({ newPath: path, oldPath: state.operatePageData.path || path, page: { title } })
- await router.replace(path)
- state.currentNodeKey = path
- } else {
- incrementPage(path, createNewPage({ title }))
- }
- state.dialogFormVisible = false
+ const onSubmit = () => {
+ state.ruleForm?.validate(async (valid) => {
+ if (valid) {
+ const { title, path } = state.form
+ if (title.trim() == '' || path.trim() == '') {
+ return ElMessage.error('标题或路径不能为空!')
+ }
+ if (state.operatePageData) {
+ updatePage({
+ newPath: path,
+ oldPath: state.operatePageData.path || path,
+ page: { title }
+ })
+ await router.replace(path)
+ state.currentNodeKey = path
+ } else {
+ incrementPage(path, createNewPage({ title }))
+ }
+ state.dialogFormVisible = false
+ } else {
+ console.log('error submit!!')
+ return false
+ }
+ })
}
return {
...toRefs(state),
pages,
+ rules,
setCurrentPage,
onSubmit,
setDefaultPage,
diff --git a/src/visual-editor/components/left-aside/tabs.ts b/src/visual-editor/components/left-aside/tabs.ts
index 9b20f71..16efa48 100644
--- a/src/visual-editor/components/left-aside/tabs.ts
+++ b/src/visual-editor/components/left-aside/tabs.ts
@@ -1,7 +1,7 @@
/*
* @Author: 卜启缘
* @Date: 2021-06-01 09:39:52
- * @LastEditTime: 2021-06-24 18:50:16
+ * @LastEditTime: 2021-06-28 17:25:30
* @LastEditors: 卜启缘
* @Description:
* @FilePath: \vite-vue3-lowcode\src\visual-editor\components\left-aside\tabs.ts
diff --git a/src/visual-editor/components/right-attribute-panel/components/attr-editor/AttrEditor.tsx b/src/visual-editor/components/right-attribute-panel/components/attr-editor/AttrEditor.tsx
index 1276a0d..c3c60e8 100644
--- a/src/visual-editor/components/right-attribute-panel/components/attr-editor/AttrEditor.tsx
+++ b/src/visual-editor/components/right-attribute-panel/components/attr-editor/AttrEditor.tsx
@@ -1,12 +1,12 @@
/*
* @Author: 卜启缘
* @Date: 2021-06-10 16:23:06
- * @LastEditTime: 2021-06-24 18:32:04
+ * @LastEditTime: 2021-07-02 22:02:53
* @LastEditors: 卜启缘
* @Description: 组件属性编辑器
* @FilePath: \vite-vue3-lowcode\src\visual-editor\components\right-attribute-panel\components\attr-editor\AttrEditor.tsx
*/
-import { defineComponent } from 'vue'
+import { defineComponent, computed } from 'vue'
import {
ElColorPicker,
ElForm,
@@ -16,16 +16,22 @@ import {
ElOption,
ElSelect,
ElSwitch,
- ElPopover
+ ElPopover,
+ ElCascader
} from 'element-plus'
import { VisualEditorProps, VisualEditorPropsType } from '@/visual-editor/visual-editor.props'
import { TablePropEditor, CrossSortableOptionsEditor } from './components'
import { useDotProp } from '@/visual-editor/hooks/useDotProp'
import { useVisualData } from '@/visual-editor/hooks/useVisualData'
+import { cloneDeep } from 'lodash'
export const AttrEditor = defineComponent({
setup() {
- const { visualConfig, currentBlock } = useVisualData()
+ const { visualConfig, currentBlock, jsonData } = useVisualData()
+ /**
+ * @description 模型集合
+ */
+ const models = computed(() => cloneDeep(jsonData.models))
const renderEditor = (propName: string, propConfig: VisualEditorProps) => {
const { propObj, prop } = useDotProp(currentBlock.value.props, propName)
@@ -33,14 +39,19 @@ export const AttrEditor = defineComponent({
propObj[prop] ??= propConfig.defaultValue
return {
- [VisualEditorPropsType.input]: () => (
-
- ),
+ [VisualEditorPropsType.input]: () => {
+ if (!Object.is(propObj[prop], undefined) && !Object.is(propObj[prop], null)) {
+ propObj[prop] = `${propObj[prop]}`
+ }
+ return (
+
+ )
+ },
[VisualEditorPropsType.inputNumber]: () => ,
[VisualEditorPropsType.switch]: () => ,
[VisualEditorPropsType.color]: () => ,
[VisualEditorPropsType.crossSortable]: () => (
-
+
),
[VisualEditorPropsType.select]: () => (
@@ -51,6 +62,21 @@ export const AttrEditor = defineComponent({
),
[VisualEditorPropsType.table]: () => (
+ ),
+ [VisualEditorPropsType.modelBind]: () => (
+
)
}[propConfig.type]()
}
@@ -58,18 +84,7 @@ export const AttrEditor = defineComponent({
// 表单项
const FormEditor = () => {
const content: JSX.Element[] = []
- if (!currentBlock.value) {
- content.push(
- <>
-
-
-
-
-
-
- >
- )
- } else {
+ if (currentBlock.value) {
const { componentKey } = currentBlock.value
const component = visualConfig.componentMap[componentKey]
console.log('props.block:', currentBlock.value)
diff --git a/src/visual-editor/components/right-attribute-panel/components/attr-editor/components/cross-sortable-options-editor/cross-sortable-options-editor.tsx b/src/visual-editor/components/right-attribute-panel/components/attr-editor/components/cross-sortable-options-editor/cross-sortable-options-editor.tsx
index 1d85b93..64d92c4 100644
--- a/src/visual-editor/components/right-attribute-panel/components/attr-editor/components/cross-sortable-options-editor/cross-sortable-options-editor.tsx
+++ b/src/visual-editor/components/right-attribute-panel/components/attr-editor/components/cross-sortable-options-editor/cross-sortable-options-editor.tsx
@@ -1,30 +1,45 @@
/*
* @Author: 卜启缘
* @Date: 2021-06-14 15:00:45
- * @LastEditTime: 2021-06-24 18:28:07
+ * @LastEditTime: 2021-07-03 10:00:59
* @LastEditors: 卜启缘
* @Description: 可以拖拽排序的选项列表
- * @FilePath: \vite-vue3-lowcode\src\visual-editor\components\right-attribute-panel\components\cross-sortable-options-editor\cross-sortable-options-editor.tsx
+ * @FilePath: \vite-vue3-lowcode\src\visual-editor\components\right-attribute-panel\components\attr-editor\components\cross-sortable-options-editor\cross-sortable-options-editor.tsx
*/
import { defineComponent, reactive, computed, PropType } from 'vue'
import Draggable from 'vuedraggable'
-import { ElInput } from 'element-plus'
+import { ElInput, ElCheckboxGroup, ElCheckbox } from 'element-plus'
import { useVModel } from '@vueuse/core'
+import { isObject } from '@/visual-editor/utils/is'
+import { useVisualData } from '@/visual-editor/hooks/useVisualData'
export const CrossSortableOptionsEditor = defineComponent({
props: {
modelValue: {
- type: Array as PropType,
+ type: Array as PropType<(string | LabelValue)[]>,
default: () => []
- }
+ },
+ multiple: Boolean // 是否多选
},
setup(props, { emit }) {
+ const { currentBlock } = useVisualData()
+
const state = reactive({
list: useVModel(props, 'modelValue', emit),
drag: false
})
+ const checkList = computed({
+ get: () => {
+ const value = currentBlock.value.props.modelValue
+ return Array.isArray(value) ? value : [...new Set(value?.split(','))]
+ },
+ set(value) {
+ currentBlock.value.props.modelValue = value
+ }
+ })
+
const dragOptions = computed(() => {
return {
animation: 200,
@@ -34,39 +49,89 @@ export const CrossSortableOptionsEditor = defineComponent({
}
})
+ const onChange = (val) => {
+ val = val.filter((item) => item !== '')
+ val = props.multiple
+ ? val
+ : val.filter((n) => !currentBlock.value.props.modelValue?.includes(n))
+ currentBlock.value.props.modelValue = val.join(',')
+ }
+
+ const incrementOption = (index) => {
+ const newItem = state.list.some((item) => isObject(item))
+ ? {
+ label: '',
+ value: ''
+ }
+ : ''
+ state.list.splice(index + 1, 0, newItem)
+ }
+
return () => (
- (state.drag = true)}
- onEnd={() => (state.drag = false)}
+
- {{
- item: ({ element, index }) => (
-
-
-
-
-
state.list.push('')}>
-
state.list.splice(index, 1)}>
+
(state.drag = true)}
+ onEnd={() => (state.drag = false)}
+ >
+ {{
+ item: ({ element, index }) => (
+
+
+ {isObject(element) ? (
+ <>
+
+ {''}
+
+ label:
+
+ value:
+
+ >
+ ) : (
+
+ )}
+
+ incrementOption(index)}
+ >
+ state.list.splice(index, 1)}
+ >
+
-
- )
- }}
-
+ )
+ }}
+
+
)
}
})
diff --git a/src/visual-editor/components/right-attribute-panel/components/event-action/index.tsx b/src/visual-editor/components/right-attribute-panel/components/event-action/index.tsx
index 6f3c418..91a7a5e 100644
--- a/src/visual-editor/components/right-attribute-panel/components/event-action/index.tsx
+++ b/src/visual-editor/components/right-attribute-panel/components/event-action/index.tsx
@@ -1,18 +1,319 @@
/*
* @Author: 卜启缘
* @Date: 2021-06-24 11:01:45
- * @LastEditTime: 2021-06-24 11:12:56
+ * @LastEditTime: 2021-06-28 18:49:18
* @LastEditors: 卜启缘
* @Description: 事件-动作
* @FilePath: \vite-vue3-lowcode\src\visual-editor\components\right-attribute-panel\components\event-action\index.tsx
*/
-import { defineComponent } from 'vue'
+import { computed, defineComponent, reactive } from 'vue'
+import { useVisualData } from '@/visual-editor/hooks/useVisualData'
+import {
+ ElForm,
+ ElFormItem,
+ ElInput,
+ ElSelect,
+ ElOption,
+ ElCard,
+ ElButton,
+ ElCascader,
+ ElCollapse,
+ ElCollapseItem,
+ ElMessage
+} from 'element-plus'
+import type { Action, ActionHandle } from '@/visual-editor/visual-editor.utils'
+import { generateUUID } from '@/visual-editor/utils/'
+import { useModal } from '@/visual-editor/hooks/useModal'
+import { cloneDeep } from 'lodash'
+
+interface IState {
+ ruleFormRef: NonNullable
+ activeNames: string[]
+ ruleForm: Action
+}
+/**
+ * @description 创建一个空的动作处理对象
+ */
+const createEmptyActionHandle = () => ({
+ key: generateUUID(),
+ name: '',
+ link: ''
+})
+
+/**
+ * @description 新增一个空的事件
+ */
+const createEmptyAction = (): Action => ({
+ key: generateUUID(),
+ name: '',
+ event: '',
+ handle: [createEmptyActionHandle()]
+})
export const EventAction = defineComponent({
setup() {
+ const { currentBlock, currentPage, jsonData } = useVisualData()
+ /**
+ * @description 是否处于编辑状态
+ */
+ const isEdit = computed(() =>
+ currentBlock.value.actions.some((item) => item.key === state.ruleForm.key)
+ )
+
+ const state = reactive({
+ ruleFormRef: null,
+ activeNames: [],
+ ruleForm: createEmptyAction()
+ })
+
+ /**
+ * @description 可绑定的动作
+ */
+ const actionOptions = computed(() => [
+ {
+ label: '全局',
+ value: 'global',
+ children: Object.keys(jsonData.actions).map((actionKey) => {
+ const item = cloneDeep(jsonData.actions[actionKey])
+ item.value = actionKey
+ item.label = item.name
+ const arrKey = Object.keys(item).find((key) => Array.isArray(item[key]))
+ item.children = (item[arrKey] || []).map((item: any) => {
+ item.label = item.name
+ item.value = item.key
+ return item
+ })
+ return item
+ })
+ },
+ {
+ label: '组件',
+ value: 'component',
+ children: cloneDeep(currentPage.value.blocks)
+ .filter((item) => item.actions?.length)
+ .map((item) => {
+ item.value = item._vid
+ item.label = item.label
+ item.children = (item.actions || []).map((item: any) => {
+ item.label = item.name
+ item.value = item.key
+ return item
+ })
+ return item
+ })
+ }
+ ])
+
+ /**
+ *
+ */
+ const getActionPath = (link: string[]) => {
+ let result = ''
+ const maxLength = link.length - 1
+ link.reduce((prev, curr, index) => {
+ const target = prev.find((item) => item.value == curr)
+ const append = maxLength !== index ? ' => ' : ''
+ result += target?.label + append
+ return target?.children
+ }, actionOptions.value)
+ return result
+ }
+
+ /**
+ * @description 删除某个动作
+ */
+ const deleteActionItem = (index: number) => {
+ currentBlock.value.actions.splice(index, 1)
+ }
+ /**
+ * @description 删除事件的某个动作
+ */
+ const deleteActionHandleItem = (index: number) => {
+ state.ruleForm.handle.splice(index, 1)
+ }
+
+ /**
+ * @description 给组件新增一个事件模型
+ */
+ const addActionItem = () => {
+ state.ruleForm = createEmptyAction()
+ showOperateModal()
+ }
+
+ /**
+ * @description 给事件新增一个空的动作
+ */
+ const addActionHanleItem = () => {
+ state.ruleForm.handle.push(createEmptyActionHandle())
+ }
+
+ /**
+ * @description 编辑事件
+ */
+ const showEditActionModal = (action: Action) => {
+ state.ruleForm = cloneDeep(action)
+ showOperateModal()
+ }
+
+ /**
+ * @description 显示操作动作的模态框
+ */
+ const showOperateModal = () => {
+ const operateType = isEdit.value ? '编辑' : '新增'
+ useModal({
+ title: `${operateType}动作`,
+ props: { width: 600 },
+ content: () => (
+ el && (state.ruleFormRef = el)}
+ label-width="100px"
+ size={'mini'}
+ >
+
+
+ {currentBlock.value.events.map((eventItem) => (
+
+ ))}
+
+
+
+
+
+ {!state.ruleForm.handle?.length && (
+
+
+ 添加动作
+
+
+ )}
+ {state.ruleForm.handle.map((handleItem, index) => (
+ (
+
+
+
+
+
+ deleteActionHandleItem(index)}
+ type={'danger'}
+ size={'mini'}
+ >
+ 删除
+
+
+ 添加
+
+
+
+ )
+ }}
+ >
+
+
+
+
+ ))}
+
+ ),
+ onConfirm: () => {
+ return new Promise((resolve, reject) => {
+ state.ruleFormRef.validate((valid) => {
+ if (valid) {
+ const index = currentBlock.value.actions.findIndex(
+ (item) => item.key == state.ruleForm.key
+ )
+ if (index === -1) {
+ currentBlock.value.actions.push(state.ruleForm)
+ } else {
+ currentBlock.value.actions.splice(index, 1, state.ruleForm)
+ }
+ state.ruleForm = createEmptyAction()
+ resolve('submit!')
+ } else {
+ reject()
+ console.log('error submit!!')
+ return false
+ }
+ })
+ })
+ },
+ onCancel: () => (state.ruleForm = createEmptyAction())
+ })
+ }
+
return () => (
<>
- 事件流
+
+ 添加事件
+
+
+ {currentBlock.value.actions?.map((actionItem, index) => (
+ (
+
+ {actionItem.name}
+
+ deleteActionItem(index)} type={'danger'} size={'mini'}>
+ 删除
+
+ showEditActionModal(actionItem)}
+ type={'primary'}
+ size={'mini'}
+ >
+ 编辑
+
+
+
+ )
+ }}
+ >
+
+ {actionItem.handle.map((item, index) => (
+
+ {{
+ default: () => 动作路径:{getActionPath(item.link)}
+ }}
+
+ ))}
+
+
+ ))}
>
)
}
diff --git a/src/visual-editor/components/right-attribute-panel/index.tsx b/src/visual-editor/components/right-attribute-panel/index.tsx
index 70ac556..93fd3ba 100644
--- a/src/visual-editor/components/right-attribute-panel/index.tsx
+++ b/src/visual-editor/components/right-attribute-panel/index.tsx
@@ -1,7 +1,7 @@
/*
* @Author: 卜启缘
* @Date: 2021-06-01 13:22:14
- * @LastEditTime: 2021-06-24 11:21:35
+ * @LastEditTime: 2021-06-28 09:25:06
* @LastEditors: 卜启缘
* @Description: 属性编辑器
* @FilePath: \vite-vue3-lowcode\src\visual-editor\components\right-attribute-panel\index.tsx
diff --git a/src/visual-editor/components/simulator-editor/simulator-editor.vue b/src/visual-editor/components/simulator-editor/simulator-editor.vue
index b6e12f9..10af514 100644
--- a/src/visual-editor/components/simulator-editor/simulator-editor.vue
+++ b/src/visual-editor/components/simulator-editor/simulator-editor.vue
@@ -229,11 +229,11 @@ export default defineComponent({
display: flex;
width: 100%;
height: 100%;
- padding-right: 240px;
+ padding-right: 380px;
align-items: center;
justify-content: center;
- @media (max-width: 1314px) {
+ @media (max-width: 1114px) {
padding-right: 0;
}
}
diff --git a/src/visual-editor/hooks/useVisualData.ts b/src/visual-editor/hooks/useVisualData.ts
index 87ff2d8..2595064 100644
--- a/src/visual-editor/hooks/useVisualData.ts
+++ b/src/visual-editor/hooks/useVisualData.ts
@@ -50,14 +50,14 @@ const defaultValue: VisualEditorModelValue = {
},
models: [], // 模型实体集合
actions: {
- // 动作
+ // 动作集合
fetch: {
name: '接口请求',
apis: []
},
dialog: {
name: '对话框',
- handles: []
+ handlers: []
}
}
}
@@ -219,7 +219,7 @@ export const initVisualData = () => {
}
return {
- visualConfig,
+ visualConfig: visualConfig,
jsonData: readonly(state.jsonData), // 保护JSONData避免直接修改
currentPage: computed(() => state.currentPage),
currentBlock: computed(() => state.currentBlock),
@@ -239,7 +239,7 @@ export const initVisualData = () => {
}
}
-export const useVisualData = () => inject>(injectKey)!
+export const useVisualData = () => inject>(injectKey)!
/**
* 实体的字段数据类型
diff --git a/src/visual-editor/types/index.d.ts b/src/visual-editor/types/index.d.ts
index 43253b7..1f4866c 100644
--- a/src/visual-editor/types/index.d.ts
+++ b/src/visual-editor/types/index.d.ts
@@ -1,11 +1,15 @@
-/**
- * @name: index.d
- * @author: 卜启缘
- * @date: 2021/5/30 10:40
- * @description:index.d
- * @update: 2021/5/30 10:40
+/*
+ * @Author: 卜启缘
+ * @Date: 2021-06-01 09:45:21
+ * @LastEditTime: 2021-07-02 20:25:58
+ * @LastEditors: 卜启缘
+ * @Description: 全局声明文件
+ * @FilePath: \vite-vue3-lowcode\src\visual-editor\types\index.d.ts
*/
-declare type LabelValueOptions = {
+
+declare type LabelValue = {
label: string
value: any
-}[]
+}
+
+declare type LabelValueOptions = OptionItem[]
diff --git a/src/visual-editor/visual-editor.props.tsx b/src/visual-editor/visual-editor.props.tsx
index d584d3d..d84d49f 100644
--- a/src/visual-editor/visual-editor.props.tsx
+++ b/src/visual-editor/visual-editor.props.tsx
@@ -5,7 +5,8 @@ export enum VisualEditorPropsType {
select = 'select',
table = 'table',
switch = 'switch',
- crossSortable = 'crossSortable'
+ modelBind = 'ModelBind',
+ crossSortable = 'CrossSortable'
}
export type VisualEditorProps = {
@@ -21,6 +22,26 @@ export type VisualEditorProps = {
table?: VisualEditorTableOption
}
+/*---------------------------------------modelBind-------------------------------------------*/
+interface EditorModelBindProp {
+ label: string
+ defaultValue?: any
+ tips?: string
+}
+
+export function createEditorModelBindProp({
+ label = '字段绑定',
+ defaultValue,
+ tips
+}: EditorModelBindProp): VisualEditorProps {
+ return {
+ type: VisualEditorPropsType.modelBind,
+ label,
+ tips,
+ defaultValue
+ }
+}
+
/*---------------------------------------switch-------------------------------------------*/
interface EditorSwitchProp {
label: string
@@ -162,18 +183,21 @@ export function createEditorTableProp({
interface EditorCrossSortableProp {
label: string
- labelPosition: string
- defaultValue?: string[]
+ labelPosition: 'top' | ''
+ multiple?: boolean
+ defaultValue?: string[] | VisualEditorSelectOptions
}
export function createEditorCrossSortableProp({
label,
labelPosition,
+ multiple,
defaultValue
}: EditorCrossSortableProp): VisualEditorProps {
return {
type: VisualEditorPropsType.crossSortable,
label,
+ multiple,
labelPosition,
defaultValue
}
diff --git a/src/visual-editor/visual-editor.utils.ts b/src/visual-editor/visual-editor.utils.ts
index 94ac992..b861da9 100644
--- a/src/visual-editor/visual-editor.utils.ts
+++ b/src/visual-editor/visual-editor.utils.ts
@@ -23,8 +23,32 @@ export interface VisualEditorBlockData {
model: Record // 绑定的字段
slotName?: string // 组件唯一标识
animations?: Animation[] // 动画集
+ actions: Action[] // 组件动作集合
+ events: { label: string; value: string }[] // 组件事件集合
[prop: string]: any
}
+/**
+ * @description 组件动作事件处理
+ */
+export interface ActionHandle {
+ key: string
+ name: string
+ link: string
+ data?: {
+ bind?: string
+ recv?: string
+ }
+}
+/**
+ * @description 组件动作
+ */
+export interface Action {
+ key: string
+ name: string
+ event: string
+ handle: ActionHandle[]
+}
+
/**
* @description 页面配置
*/
@@ -93,7 +117,7 @@ export interface VisualEditorActions {
}
dialog: {
name: '对话框'
- handles: []
+ handlers: []
}
}
/**
@@ -133,6 +157,7 @@ export interface VisualEditorComponent {
}) => JSX.Element
props?: Record
animations?: Animation[] // 动画集
+ events?: { label: string; value: string }[] // 组件事件集合
resize?: { width?: boolean; height?: boolean }
}
@@ -173,6 +198,8 @@ export function createNewBlock({
return prev
}, {}),
animations: [], // 动画集
+ actions: [], // 动作集合
+ events: component.events || [], // 事件集合
model: {}
}
}
diff --git a/vite.config.ts b/vite.config.ts
index bc935e7..b00718d 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -16,6 +16,7 @@ export default ({ mode }: ConfigEnv): UserConfig => {
// 环境变量
const { VITE_BASE_URL } = loadEnv(mode, CWD)
return {
+ base: VITE_BASE_URL, // 设置打包路径
css: {
modules: {
localsConvention: 'camelCase' // 默认只支持驼峰,修改为同时支持横线和驼峰
@@ -58,7 +59,6 @@ export default ({ mode }: ConfigEnv): UserConfig => {
'@': resolve(__dirname, 'src') // 设置 `@` 指向 `src` 目录
}
},
- base: VITE_BASE_URL, // 设置打包路径
build: {
rollupOptions: {
input: {
@@ -91,17 +91,17 @@ export default ({ mode }: ConfigEnv): UserConfig => {
server: {
port: 10086, // 设置服务启动端口号
open: false, // 设置服务启动时是否自动打开浏览器
- cors: true // 允许跨域
+ cors: true, // 允许跨域
- // 设置代理,根据我们项目实际情况配置
- // proxy: {
- // '/api': {
- // target: 'http://xxx.xxx.xxx.xxx:x000',
- // changeOrigin: true,
- // secure: false,
- // rewrite: (path) => path.replace('/api/', '/')
- // }
- // },
+ // 设置代理,根据项目实际情况配置
+ proxy: {
+ '/api': {
+ target: 'http://29135jo738.zicp.vip/api/v1',
+ changeOrigin: true,
+ secure: false,
+ rewrite: (path) => path.replace('/api/', '/')
+ }
+ }
}
}
}
diff --git a/yarn.lock b/yarn.lock
index 1f2192f..ddc5290 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -28,7 +28,7 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08"
integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==
-"@babel/core@>=7.9.0", "@babel/core@^7.12.10":
+"@babel/core@>=7.9.0", "@babel/core@^7.14.6":
version "7.14.6"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab"
integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==
@@ -228,7 +228,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-typescript@^7.12.1":
+"@babel/plugin-transform-typescript@^7.14.6":
version "7.14.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz#6e9c2d98da2507ebe0a883b100cde3c7279df36c"
integrity sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==
@@ -237,7 +237,7 @@
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-typescript" "^7.14.5"
-"@babel/standalone@^7.14.6":
+"@babel/standalone@^7.14.7":
version "7.14.7"
resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.14.7.tgz#68635da005d6a34a0259599e0720d2e73133ecc3"
integrity sha512-7RlfMPR4604SbYpj5zvs2ZK587hVhixgU9Pd9Vs8lB8KYtT3U0apXSf0vZXhy8XRh549eUmJOHXhWKTO3ObzOQ==
@@ -445,6 +445,20 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
+"@humanwhocodes/config-array@^0.5.0":
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
+ integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==
+ dependencies:
+ "@humanwhocodes/object-schema" "^1.2.0"
+ debug "^4.1.1"
+ minimatch "^3.0.4"
+
+"@humanwhocodes/object-schema@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf"
+ integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==
+
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -667,11 +681,16 @@
resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256"
integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==
-"@types/node@*", "@types/node@^15.12.4":
+"@types/node@*":
version "15.12.4"
resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.4.tgz#e1cf817d70a1e118e81922c4ff6683ce9d422e26"
integrity sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA==
+"@types/node@^16.0.0":
+ version "16.0.0"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.0.0.tgz#067a6c49dc7a5c2412a505628e26902ae967bf6f"
+ integrity sha512-TmCW5HoZ2o2/z2EYi109jLqIaPIi9y/lc2LmDCWzuCi35bcaQ+OtUh6nwBiFK7SOu25FAU5+YKdqFZUwtqGSdg==
+
"@types/normalize-package-data@^2.4.0":
version "2.4.0"
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
@@ -708,73 +727,73 @@
"@types/unist" "*"
"@types/vfile-message" "*"
-"@typescript-eslint/eslint-plugin@^4.28.0":
- version "4.28.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.0.tgz#1a66f03b264844387beb7dc85e1f1d403bd1803f"
- integrity sha512-KcF6p3zWhf1f8xO84tuBailV5cN92vhS+VT7UJsPzGBm9VnQqfI9AsiMUFUCYHTYPg1uCCo+HyiDnpDuvkAMfQ==
+"@typescript-eslint/eslint-plugin@^4.28.1":
+ version "4.28.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.1.tgz#c045e440196ae45464e08e20c38aff5c3a825947"
+ integrity sha512-9yfcNpDaNGQ6/LQOX/KhUFTR1sCKH+PBr234k6hI9XJ0VP5UqGxap0AnNwBnWFk1MNyWBylJH9ZkzBXC+5akZQ==
dependencies:
- "@typescript-eslint/experimental-utils" "4.28.0"
- "@typescript-eslint/scope-manager" "4.28.0"
+ "@typescript-eslint/experimental-utils" "4.28.1"
+ "@typescript-eslint/scope-manager" "4.28.1"
debug "^4.3.1"
functional-red-black-tree "^1.0.1"
regexpp "^3.1.0"
semver "^7.3.5"
tsutils "^3.21.0"
-"@typescript-eslint/experimental-utils@4.28.0":
- version "4.28.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.0.tgz#13167ed991320684bdc23588135ae62115b30ee0"
- integrity sha512-9XD9s7mt3QWMk82GoyUpc/Ji03vz4T5AYlHF9DcoFNfJ/y3UAclRsfGiE2gLfXtyC+JRA3trR7cR296TEb1oiQ==
+"@typescript-eslint/experimental-utils@4.28.1":
+ version "4.28.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.1.tgz#3869489dcca3c18523c46018b8996e15948dbadc"
+ integrity sha512-n8/ggadrZ+uyrfrSEchx3jgODdmcx7MzVM2sI3cTpI/YlfSm0+9HEUaWw3aQn2urL2KYlWYMDgn45iLfjDYB+Q==
dependencies:
"@types/json-schema" "^7.0.7"
- "@typescript-eslint/scope-manager" "4.28.0"
- "@typescript-eslint/types" "4.28.0"
- "@typescript-eslint/typescript-estree" "4.28.0"
+ "@typescript-eslint/scope-manager" "4.28.1"
+ "@typescript-eslint/types" "4.28.1"
+ "@typescript-eslint/typescript-estree" "4.28.1"
eslint-scope "^5.1.1"
eslint-utils "^3.0.0"
-"@typescript-eslint/parser@^4.28.0":
- version "4.28.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.0.tgz#2404c16751a28616ef3abab77c8e51d680a12caa"
- integrity sha512-7x4D22oPY8fDaOCvkuXtYYTQ6mTMmkivwEzS+7iml9F9VkHGbbZ3x4fHRwxAb5KeuSkLqfnYjs46tGx2Nour4A==
+"@typescript-eslint/parser@^4.28.1":
+ version "4.28.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.1.tgz#5181b81658414f47291452c15bf6cd44a32f85bd"
+ integrity sha512-UjrMsgnhQIIK82hXGaD+MCN8IfORS1CbMdu7VlZbYa8LCZtbZjJA26De4IPQB7XYZbL8gJ99KWNj0l6WD0guJg==
dependencies:
- "@typescript-eslint/scope-manager" "4.28.0"
- "@typescript-eslint/types" "4.28.0"
- "@typescript-eslint/typescript-estree" "4.28.0"
+ "@typescript-eslint/scope-manager" "4.28.1"
+ "@typescript-eslint/types" "4.28.1"
+ "@typescript-eslint/typescript-estree" "4.28.1"
debug "^4.3.1"
-"@typescript-eslint/scope-manager@4.28.0":
- version "4.28.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.0.tgz#6a3009d2ab64a30fc8a1e257a1a320067f36a0ce"
- integrity sha512-eCALCeScs5P/EYjwo6se9bdjtrh8ByWjtHzOkC4Tia6QQWtQr3PHovxh3TdYTuFcurkYI4rmFsRFpucADIkseg==
+"@typescript-eslint/scope-manager@4.28.1":
+ version "4.28.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.1.tgz#fd3c20627cdc12933f6d98b386940d8d0ce8a991"
+ integrity sha512-o95bvGKfss6705x7jFGDyS7trAORTy57lwJ+VsYwil/lOUxKQ9tA7Suuq+ciMhJc/1qPwB3XE2DKh9wubW8YYA==
dependencies:
- "@typescript-eslint/types" "4.28.0"
- "@typescript-eslint/visitor-keys" "4.28.0"
+ "@typescript-eslint/types" "4.28.1"
+ "@typescript-eslint/visitor-keys" "4.28.1"
-"@typescript-eslint/types@4.28.0":
- version "4.28.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.0.tgz#a33504e1ce7ac51fc39035f5fe6f15079d4dafb0"
- integrity sha512-p16xMNKKoiJCVZY5PW/AfILw2xe1LfruTcfAKBj3a+wgNYP5I9ZEKNDOItoRt53p4EiPV6iRSICy8EPanG9ZVA==
+"@typescript-eslint/types@4.28.1":
+ version "4.28.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.1.tgz#d0f2ecbef3684634db357b9bbfc97b94b828f83f"
+ integrity sha512-4z+knEihcyX7blAGi7O3Fm3O6YRCP+r56NJFMNGsmtdw+NCdpG5SgNz427LS9nQkRVTswZLhz484hakQwB8RRg==
-"@typescript-eslint/typescript-estree@4.28.0":
- version "4.28.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.0.tgz#e66d4e5aa2ede66fec8af434898fe61af10c71cf"
- integrity sha512-m19UQTRtxMzKAm8QxfKpvh6OwQSXaW1CdZPoCaQuLwAq7VZMNuhJmZR4g5281s2ECt658sldnJfdpSZZaxUGMQ==
+"@typescript-eslint/typescript-estree@4.28.1":
+ version "4.28.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.1.tgz#af882ae41740d1f268e38b4d0fad21e7e8d86a81"
+ integrity sha512-GhKxmC4sHXxHGJv8e8egAZeTZ6HI4mLU6S7FUzvFOtsk7ZIDN1ksA9r9DyOgNqowA9yAtZXV0Uiap61bIO81FQ==
dependencies:
- "@typescript-eslint/types" "4.28.0"
- "@typescript-eslint/visitor-keys" "4.28.0"
+ "@typescript-eslint/types" "4.28.1"
+ "@typescript-eslint/visitor-keys" "4.28.1"
debug "^4.3.1"
globby "^11.0.3"
is-glob "^4.0.1"
semver "^7.3.5"
tsutils "^3.21.0"
-"@typescript-eslint/visitor-keys@4.28.0":
- version "4.28.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.0.tgz#255c67c966ec294104169a6939d96f91c8a89434"
- integrity sha512-PjJyTWwrlrvM5jazxYF5ZPs/nl0kHDZMVbuIcbpawVXaDPelp3+S9zpOz5RmVUfS/fD5l5+ZXNKnWhNYjPzCvw==
+"@typescript-eslint/visitor-keys@4.28.1":
+ version "4.28.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.1.tgz#162a515ee255f18a6068edc26df793cdc1ec9157"
+ integrity sha512-K4HMrdFqr9PFquPu178SaSb92CaWe2yErXyPumc8cYWxFmhgJsNY9eSePmO05j0JhBvf2Cdhptd6E6Yv9HVHcg==
dependencies:
- "@typescript-eslint/types" "4.28.0"
+ "@typescript-eslint/types" "4.28.1"
eslint-visitor-keys "^2.0.0"
"@vant/icons@^1.6.0":
@@ -804,33 +823,33 @@
resolved "https://registry.yarnpkg.com/@vant/use/-/use-1.1.2.tgz#d35265e05df88a47b04196a308efb5e89e44ca10"
integrity sha512-s4YO6zqJ3NlGeAZ104exb0c/KvlXB908pOhWhCyhfedVBn1eBnKH401ildK0sttazmq0CH8jme6mnw2ZzZvutw==
-"@vitejs/plugin-legacy@^1.4.2":
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/@vitejs/plugin-legacy/-/plugin-legacy-1.4.2.tgz#219e7b86a9febe62b85a66b68127a89954ed93e5"
- integrity sha512-D2ADBSpImP0QT8w9Eo+8KKOLg3I8OQhFwuBXGM8WQCRrEs55E3bCf9PTkL8S+tgliyLbJM+gjemxpRuoTTwphA==
+"@vitejs/plugin-legacy@^1.4.3":
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/@vitejs/plugin-legacy/-/plugin-legacy-1.4.3.tgz#d022275d08e6f1f777891fb405816a9dd41a9f1f"
+ integrity sha512-lxZUJaMWYMQuqvZM1wPzDP6KABQgA/drVL5fnaygEPcz9adc2OHhfFNN/SvvHQ1V0rP8gybIc7uA+iI1gAdkVQ==
dependencies:
- "@babel/standalone" "^7.14.6"
- core-js "^3.14.0"
+ "@babel/standalone" "^7.14.7"
+ core-js "^3.15.1"
magic-string "^0.25.7"
regenerator-runtime "^0.13.7"
systemjs "^6.10.1"
-"@vitejs/plugin-vue-jsx@^1.1.5":
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-1.1.5.tgz#e856ef42f59048e59c85f8714dc8397e15f81738"
- integrity sha512-YujG7IgbZR8zWGY/hZFxYKrAUdO+9OV4t3pqqQrvbtP/ESwvTY8vb0Zpw1VMO8zLWNGqf8jSbjBaCjN49diplw==
+"@vitejs/plugin-vue-jsx@^1.1.6":
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-1.1.6.tgz#c9e7b63d1ebf537a24a0b4b3b31f4beb8055cef6"
+ integrity sha512-1vKGALnBFt7hUIOgkC4ZAhTRgENpSgGBsdltJn3fPNcqrbrvR/HaRS5VThjCCoN69d0d+VlDXOTlWcfUpE3pfQ==
dependencies:
- "@babel/core" "^7.12.10"
+ "@babel/core" "^7.14.6"
"@babel/plugin-syntax-import-meta" "^7.10.4"
- "@babel/plugin-transform-typescript" "^7.12.1"
+ "@babel/plugin-transform-typescript" "^7.14.6"
"@rollup/pluginutils" "^4.1.0"
- "@vue/babel-plugin-jsx" "^1.0.3"
+ "@vue/babel-plugin-jsx" "^1.0.6"
hash-sum "^2.0.0"
-"@vitejs/plugin-vue@^1.2.3":
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.2.3.tgz#2e8e008b1cc3a6ad1dfbec75743c7ffd9b4872a6"
- integrity sha512-LlnLpObkGKZ+b7dcpL4T24l13nPSHLjo+6Oc7MbZiKz5PMAUzADfNJ3EKfYIQ0l0969nxf2jp/9vsfnuJ7h6fw==
+"@vitejs/plugin-vue@^1.2.4":
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.2.4.tgz#a7aa6e6a31c556a8b781de730316deeecf7f56f2"
+ integrity sha512-D/3H9plevPQGgQGwmV6eecvOnooLTecPR63HPffVVWPEhbfvmtYLWgznzs456NBb2DItiRTCIa1yWxvGqC+I8A==
"@volar/code-gen@^0.25.22":
version "0.25.22"
@@ -877,7 +896,7 @@
resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz#9b9c691cd06fc855221a2475c3cc831d774bc7dc"
integrity sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==
-"@vue/babel-plugin-jsx@^1.0.3":
+"@vue/babel-plugin-jsx@^1.0.6":
version "1.0.6"
resolved "https://registry.yarnpkg.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.0.6.tgz#184bf3541ab6efdbe5079ab8b20c19e2af100bfb"
integrity sha512-RzYsvBhzKUmY2YG6LoV+W5PnlnkInq0thh1AzCmewwctAgGN6e9UFon6ZrQQV1CO5G5PeME7MqpB+/vvGg0h4g==
@@ -903,6 +922,17 @@
estree-walker "^2.0.1"
source-map "^0.6.1"
+"@vue/compiler-core@3.1.4":
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.1.4.tgz#a3a74cf52e8f01af386d364ac8a099cbeb260424"
+ integrity sha512-TnUz+1z0y74O/A4YKAbzsdUfamyHV73MihrEfvettWpm9bQKVoZd1nEmR1cGN9LsXWlwAvVQBetBlWdOjmQO5Q==
+ dependencies:
+ "@babel/parser" "^7.12.0"
+ "@babel/types" "^7.12.0"
+ "@vue/shared" "3.1.4"
+ estree-walker "^2.0.1"
+ source-map "^0.6.1"
+
"@vue/compiler-dom@3.1.2", "@vue/compiler-dom@^3.0.11":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.1.2.tgz#75a7731bcc5d9718183a3c56c18e992f7c13e7b1"
@@ -911,7 +941,38 @@
"@vue/compiler-core" "3.1.2"
"@vue/shared" "3.1.2"
-"@vue/compiler-sfc@3.1.2", "@vue/compiler-sfc@^3.0.11":
+"@vue/compiler-dom@3.1.4":
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.1.4.tgz#bf3795e1449f32c965d38c4ea6d808ca05fdfc97"
+ integrity sha512-3tG2ScHkghhUBuFwl9KgyZhrS8CPFZsO7hUDekJgIp5b1OMkROr4AvxHu6rRMl4WkyvYkvidFNBS2VfOnwa6Kw==
+ dependencies:
+ "@vue/compiler-core" "3.1.4"
+ "@vue/shared" "3.1.4"
+
+"@vue/compiler-sfc@3.1.4":
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.1.4.tgz#93e87db950e0711339c18baa7bb7d28d3522d7bc"
+ integrity sha512-4KDQg60Khy3SgnF+V/TB2NZqzmM4TyGRmzsxqG1SebGdMSecCweFDSlI/F1vDYk6dKiCHgmpoT9A1sLxswkJ0A==
+ dependencies:
+ "@babel/parser" "^7.13.9"
+ "@babel/types" "^7.13.0"
+ "@types/estree" "^0.0.48"
+ "@vue/compiler-core" "3.1.4"
+ "@vue/compiler-dom" "3.1.4"
+ "@vue/compiler-ssr" "3.1.4"
+ "@vue/shared" "3.1.4"
+ consolidate "^0.16.0"
+ estree-walker "^2.0.1"
+ hash-sum "^2.0.0"
+ lru-cache "^5.1.1"
+ magic-string "^0.25.7"
+ merge-source-map "^1.1.0"
+ postcss "^8.1.10"
+ postcss-modules "^4.0.0"
+ postcss-selector-parser "^6.0.4"
+ source-map "^0.6.1"
+
+"@vue/compiler-sfc@^3.0.11":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.1.2.tgz#23ff1e366d887b964899568bffcb11e3d0511fc4"
integrity sha512-SeG/2+DvwejQ7oAiSx8BrDh5qOdqCYHGClPiTvVIHTfSIHiS2JjMbCANdDCjHkTOh/O7WZzo2JhdKm98bRBxTw==
@@ -942,33 +1003,48 @@
"@vue/compiler-dom" "3.1.2"
"@vue/shared" "3.1.2"
+"@vue/compiler-ssr@3.1.4":
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.1.4.tgz#7f6eaac5b1851fc15c82c083e8179eb1216b303c"
+ integrity sha512-Box8fCuCFPp0FuimIswjDkjwiSDCBkHvt/xVALyFkYCiIMWv2eR53fIjmlsnEHhcBuZ+VgRC+UanCTcKvSA1gA==
+ dependencies:
+ "@vue/compiler-dom" "3.1.4"
+ "@vue/shared" "3.1.4"
+
"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.0.0-beta.14":
version "6.0.0-beta.14"
resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.0.0-beta.14.tgz#6ed2d6f8d66a9256c9ad04bfff08309ba87b9723"
integrity sha512-44fPrrN1cqcs6bFkT0C+yxTM6PZXLbR+ESh1U1j8UD22yO04gXvxH62HApMjLbS3WqJO/iCNC+CYT+evPQh2EQ==
-"@vue/reactivity@3.1.2", "@vue/reactivity@^3.0.11":
+"@vue/reactivity@3.1.4":
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.1.4.tgz#d926ed46fb0d48582ccf8665b062d37b5d35ba99"
+ integrity sha512-YDlgii2Cr9yAoKVZFzgY4j0mYlVT73986X3e5SPp6ifqckSEoFSUWXZK2Tb53TB/9qO29BEEbspnKD3m3wAwkA==
+ dependencies:
+ "@vue/shared" "3.1.4"
+
+"@vue/reactivity@^3.0.11":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.1.2.tgz#66fa530dd726d2fef285ae55d02106a727db463b"
integrity sha512-glJzJoN2xE7I2lRvwKM5u1BHRPTd1yc8iaf//Lai/78/uYAvE5DXp5HzWRFOwMlbRvMGJHIQjOqoxj87cDAaag==
dependencies:
"@vue/shared" "3.1.2"
-"@vue/runtime-core@3.1.2":
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.1.2.tgz#f4dbc503cfc9a02ab5f1ebe002c3322512064a54"
- integrity sha512-gsPZG4dRIkixuuKmoj4P9IHgfT0yaFLcqWOM5F/bCk0nxQn1XtxH8oUehWuET726KhbukvDoJfe9G2CKviy80w==
+"@vue/runtime-core@3.1.4":
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.1.4.tgz#3e30ae6ecbfff06df5adc9414491143191a375ba"
+ integrity sha512-qmVJgJuFxfT7M4qHQ4M6KqhKC66fjuswK+aBivE8dWiZ2rtIGl9gtJGpwqwjQEcKEBTOfvvrtrwBncYArJUO8Q==
dependencies:
- "@vue/reactivity" "3.1.2"
- "@vue/shared" "3.1.2"
+ "@vue/reactivity" "3.1.4"
+ "@vue/shared" "3.1.4"
-"@vue/runtime-dom@3.1.2":
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.1.2.tgz#0fd8724f14bc7ba64b6c954d874a8d8a4fcb5fe9"
- integrity sha512-QvINxjLucEZFzp5f0NVu7JqWYCv5TKQfkH2FDs/N6QNE4iKcYtKrWdT0HKfABnVXG28Znqv6rIH0dH4ZAOwxpA==
+"@vue/runtime-dom@3.1.4":
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.1.4.tgz#acfeee200d5c45fc2cbdf7058cda1498f9b45849"
+ integrity sha512-vbmwgTxku1BU87Kw7r29adv0OIrDXCW0PslOPQT0O/9R5SqcXgS94Yj6zsztDjvghegenwIAPNLlDR1Auh5s+w==
dependencies:
- "@vue/runtime-core" "3.1.2"
- "@vue/shared" "3.1.2"
+ "@vue/runtime-core" "3.1.4"
+ "@vue/shared" "3.1.4"
csstype "^2.6.8"
"@vue/shared@3.1.2", "@vue/shared@^3.0.11":
@@ -976,6 +1052,11 @@
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.1.2.tgz#1069c0bc7d6f4bd15ccf3a5f3be29450aca368f9"
integrity sha512-EmH/poaDWBPJaPILXNI/1fvUbArJQmmTyVCwvvyDYDFnkPoTclAbHRAtyIvqfez7jybTDn077HTNILpxlsoWhg==
+"@vue/shared@3.1.4":
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.1.4.tgz#c14c461ec42ea2c1556e86f60b0354341d91adc3"
+ integrity sha512-6O45kZAmkLvzGLToBxEz4lR2W6kXohCtebV2UxjH9GXjd8X9AhEn68FN9eNanFtWNzvgw1hqd6HkPRVQalqf7Q==
+
"@vueuse/core@^5.0.3":
version "5.0.3"
resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-5.0.3.tgz#8f3170e2a51ae62fb1725c84d4cc02a7552aad0b"
@@ -1006,10 +1087,10 @@
dependencies:
vue-demi "*"
-"@windicss/plugin-utils@1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@windicss/plugin-utils/-/plugin-utils-1.1.1.tgz#7f70952adc8d33f607706e434a153e2cdff52b64"
- integrity sha512-niKEDyUpOfCGemFHopI9fxdWPpJQIZ/jmaU4spQXsGc1oEts164P8LUJPQmXc8C6vjKwkrH7KA+lxYNG5LmlDA==
+"@windicss/plugin-utils@1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@windicss/plugin-utils/-/plugin-utils-1.2.0.tgz#f9c657f981d7696dfa6b8e8069b311161a2ac9b4"
+ integrity sha512-6OAsyz2yI0VKNHACT35FjWWzMZlMEF7Z0pIiNUd9+R9jc73+qJcK1DRCZ3YxnjuGk0G76b542uXQEJgv2jL3vA==
dependencies:
"@antfu/utils" "^0.2.3"
debug "^4.3.2"
@@ -1543,7 +1624,7 @@ chardet@^0.7.0:
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
-"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.1:
+"chokidar@>=3.0.0 <4.0.0":
version "3.5.2"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75"
integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==
@@ -1812,7 +1893,7 @@ cookie@^0.4.0:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1"
integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==
-core-js@^3.14.0:
+core-js@^3.15.1:
version "3.15.1"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.15.1.tgz#6c08ab88abdf56545045ccf5fd81f47f407e7f1a"
integrity sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg==
@@ -2153,10 +2234,10 @@ electron-to-chromium@^1.3.723:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.755.tgz#4b6101f13de910cf3f0a1789ddc57328133b9332"
integrity sha512-BJ1s/kuUuOeo1bF/EM2E4yqW9te0Hpof3wgwBx40AWJE18zsD1Tqo0kr7ijnOc+lRsrlrqKPauJAHqaxOItoUA==
-element-plus@1.0.2-beta.52:
- version "1.0.2-beta.52"
- resolved "https://registry.yarnpkg.com/element-plus/-/element-plus-1.0.2-beta.52.tgz#c7ed94d498e390658478aa2438bc35247325b2d0"
- integrity sha512-oAuJHwXyvM4dsuOz7HSDPIBVPqRJ1KEzFzGqYdqbBjQ/aw79uCJxvS9Q4q9/XrPMfPire09+bPTypiIaHkNBhA==
+element-plus@1.0.2-beta.54:
+ version "1.0.2-beta.54"
+ resolved "https://registry.yarnpkg.com/element-plus/-/element-plus-1.0.2-beta.54.tgz#70eda3fc0ef4c28a1cdc6bffec8f9c34ef83cc16"
+ integrity sha512-XXgZMnVt2ECtLyxJLVMq+faTxcYKNy9ZTaQ4cgbITgR/iGF5iXPHHjn1J1DWNLIKJ0XQRo8atAM1fyOpJsyJzw==
dependencies:
"@popperjs/core" "^2.4.4"
"@types/lodash" "^4.14.161"
@@ -2385,13 +2466,14 @@ eslint-visitor-keys@^2.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
-eslint@^7.29.0:
- version "7.29.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.29.0.tgz#ee2a7648f2e729485e4d0bd6383ec1deabc8b3c0"
- integrity sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==
+eslint@^7.30.0:
+ version "7.30.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.30.0.tgz#6d34ab51aaa56112fd97166226c9a97f505474f8"
+ integrity sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==
dependencies:
"@babel/code-frame" "7.12.11"
"@eslint/eslintrc" "^0.4.2"
+ "@humanwhocodes/config-array" "^0.5.0"
ajv "^6.10.0"
chalk "^4.0.0"
cross-spawn "^7.0.2"
@@ -2580,6 +2662,17 @@ fast-glob@^3.1.1, fast-glob@^3.2.5:
micromatch "^4.0.2"
picomatch "^2.2.1"
+fast-glob@^3.2.6:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.6.tgz#434dd9529845176ea049acc9343e8282765c6e1a"
+ integrity sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
fast-json-stable-stringify@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@@ -3191,10 +3284,10 @@ human-signals@^2.1.0:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
-husky@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/husky/-/husky-6.0.0.tgz#810f11869adf51604c32ea577edbc377d7f9319e"
- integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==
+husky@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.0.tgz#3dbd5d28e76234689ee29bb41e048f28e3e46616"
+ integrity sha512-xK7lO0EtSzfFPiw+oQncQVy/XqV7UVVjxBByc+Iv5iK3yhW9boDoWgvZy3OGo48QKg/hUtZkzz0hi2HXa0kn7w==
iconv-lite@^0.4.24:
version "0.4.24"
@@ -5982,10 +6075,10 @@ typescript-vscode-sh-plugin@^0.6.14:
resolved "https://registry.yarnpkg.com/typescript-vscode-sh-plugin/-/typescript-vscode-sh-plugin-0.6.14.tgz#a81031b502f6346a26ea49ce082438c3e353bb38"
integrity sha512-AkNlRBbI6K7gk29O92qthNSvc6jjmNQ6isVXoYxkFwPa8D04tIv2SOPd+sd+mNpso4tNdL2gy7nVtrd5yFqvlA==
-typescript@^4.3.4:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc"
- integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==
+typescript@^4.3.5:
+ version "4.3.5"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4"
+ integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==
unbox-primitive@^1.0.1:
version "1.0.1"
@@ -6233,10 +6326,10 @@ validate-npm-package-license@^3.0.1:
spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0"
-vant@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/vant/-/vant-3.1.0.tgz#d8a734caed4df4fb2babe4c3f8930c728151d5ac"
- integrity sha512-P4Ko8YXThjOiu3aBbTE9SId9r8VvFPNyABkl5+EabT1nn4UzdultcNMCyEjRiKes00QH5p+kXBi+e+wSDxZEyQ==
+vant@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/vant/-/vant-3.1.2.tgz#8777290f38c4b042d22612343e72dcab95b044ed"
+ integrity sha512-uw+ZKZTD44L2YojenZjRuF/rETR28rnuI7cQ4tFtEJBLKc1TNxsxl3PYmoGbYt7jd5rMrHYST8SkBsbB5i4kNA==
dependencies:
"@vant/icons" "^1.6.0"
"@vant/lazyload" "^1.2.0"
@@ -6320,14 +6413,13 @@ vfile@^4.0.0, vfile@^4.0.1:
unist-util-stringify-position "^2.0.0"
vfile-message "^2.0.0"
-vite-plugin-components@^0.11.2:
- version "0.11.2"
- resolved "https://registry.yarnpkg.com/vite-plugin-components/-/vite-plugin-components-0.11.2.tgz#83cd0ebf3388329464ccaf6e259a416492a728a3"
- integrity sha512-FfW88iOmOHx1GlGJ2KT3r51Oyu7pntgkMxv7X7WxwPS69lOCWzmDO0n2+TWiWYPDpboDLJsPKBDeSBN1BhTtXQ==
+vite-plugin-components@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/vite-plugin-components/-/vite-plugin-components-0.12.0.tgz#7a20ba88be63625f759902d670c1310cf7cd9d0b"
+ integrity sha512-LJAn25KFLFw97mNQw74fsWvGAaaFXbDNGkReFpITPtIrmdRrwWowieg23INXAniPaGJVIhspLk0ippMPi/q0qA==
dependencies:
- chokidar "^3.5.1"
debug "^4.3.2"
- fast-glob "^3.2.5"
+ fast-glob "^3.2.6"
magic-string "^0.25.7"
minimatch "^3.0.4"
@@ -6342,12 +6434,12 @@ vite-plugin-style-import@^1.0.1:
es-module-lexer "^0.6.0"
magic-string "^0.25.7"
-vite-plugin-windicss@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/vite-plugin-windicss/-/vite-plugin-windicss-1.1.1.tgz#c13d4c2d9fec4afae2eea5058f426c693255d02f"
- integrity sha512-J1n3DoSg8BkQ42HDNzh+FqPhvBgCRgQ0Nvp2HLvb5FVl8FKEPw26Frc/oLaC1g9ypSlvkSM8011gHi+c+pxsRQ==
+vite-plugin-windicss@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/vite-plugin-windicss/-/vite-plugin-windicss-1.2.0.tgz#6b21e76f3aae1cd2f71c548c4bfe8d87b4328ad0"
+ integrity sha512-3teAmQHCDDDcy7On5fOj1sYTRVo8zAwJJd4SOapeGI7EuEzO2fHy6oDS6sPXVUnstbfoPbvrng1xvc3VAqI+sg==
dependencies:
- "@windicss/plugin-utils" "1.1.1"
+ "@windicss/plugin-utils" "1.2.0"
chalk "^4.1.1"
debug "^4.3.2"
windicss "^3.1.3"
@@ -6538,6 +6630,19 @@ vue-eslint-parser@^7.6.0:
esquery "^1.4.0"
lodash "^4.17.15"
+vue-eslint-parser@^7.7.2:
+ version "7.7.2"
+ resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.7.2.tgz#a723080b29c27fa0b3737bedceaeebe30fd0f359"
+ integrity sha512-zkfxSttpwBW9SQEa+rLR+j6sFHGGhanVH3VuzHQwybCQWJsg/Yi1W619gXOW01U/zekN4D+J4/S4Zufd1sClZg==
+ dependencies:
+ debug "^4.1.1"
+ eslint-scope "^5.1.1"
+ eslint-visitor-keys "^1.1.0"
+ espree "^6.2.1"
+ esquery "^1.4.0"
+ lodash "^4.17.21"
+ semver "^6.3.0"
+
vue-router@^4.0.10:
version "4.0.10"
resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.10.tgz#ec8fda032949b2a31d3273170f8f376e86eb52ac"
@@ -6552,14 +6657,14 @@ vue-tsc@^0.2.0:
dependencies:
vscode-vue-languageservice "^0.25.22"
-vue@3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/vue/-/vue-3.1.2.tgz#647f8e3949a3d600771dca25d50225dc3e594c64"
- integrity sha512-q/rbKpb7aofax4ugqu2k/uj7BYuNPcd6Z5/qJtfkJQsE0NkwVoCyeSh7IZGH61hChwYn3CEkh4bHolvUPxlQ+w==
+vue@3.1.4:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/vue/-/vue-3.1.4.tgz#120d6818c51eaa35d0879e5bc1cff60135bc69fd"
+ integrity sha512-p8dcdyeCgmaAiZsbLyDkmOLcFGZb/jEVdCLW65V68LRCXTNX8jKsgah2F7OZ/v/Ai2V0Fb1MNO0vz/GFqsPVMA==
dependencies:
- "@vue/compiler-dom" "3.1.2"
- "@vue/runtime-dom" "3.1.2"
- "@vue/shared" "3.1.2"
+ "@vue/compiler-dom" "3.1.4"
+ "@vue/runtime-dom" "3.1.4"
+ "@vue/shared" "3.1.4"
vuedraggable@^4.0.3:
version "4.0.3"
@@ -6617,6 +6722,11 @@ windicss@^3.1.3:
resolved "https://registry.yarnpkg.com/windicss/-/windicss-3.1.3.tgz#a4b80af48bdd5d4be13520f700b497af455df700"
integrity sha512-l7fpoba2LY9AYRy4UgcuOpbPsed8UsbpEQYUVWRR1wdAwiKxK6bGIMfpiKJtjPAPdh0GOGUqr6KJar0EDZSxzg==
+windicss@^3.1.4:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/windicss/-/windicss-3.1.4.tgz#557eaf8e3c08064a309ccb5d887c82c4bce25069"
+ integrity sha512-3RBcANxdOy/n4dLVT8+0X409sGI+piO06ARbQ8RncxGuYgdw5Ip3hrhGIYajH67lV+tHc7xNVGxj73amOC9N0g==
+
with@^7.0.0:
version "7.0.2"
resolved "https://registry.yarnpkg.com/with/-/with-7.0.2.tgz#ccee3ad542d25538a7a7a80aad212b9828495bac"