mirror of
https://github.com/vbenjs/gf-vben-admin.git
synced 2025-01-23 11:50:20 +08:00
feat: multi-language component
This commit is contained in:
parent
e5f8ce3fd8
commit
dc09de1e05
@ -14,6 +14,8 @@
|
|||||||
### 🎫 Chores
|
### 🎫 Chores
|
||||||
|
|
||||||
- 更新 antdv 到`2.0.0-rc.2`
|
- 更新 antdv 到`2.0.0-rc.2`
|
||||||
|
- 更新 vue 到`3.0.3`
|
||||||
|
- 更新 vite 到`1.0.0.rc10`
|
||||||
- 暂时删除 `@vueuse/core`.等稳定后在集成。目前不太稳定。
|
- 暂时删除 `@vueuse/core`.等稳定后在集成。目前不太稳定。
|
||||||
|
|
||||||
## 2.0.0-rc.11 (2020-11-18)
|
## 2.0.0-rc.11 (2020-11-18)
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
"qrcode": "^1.4.4",
|
"qrcode": "^1.4.4",
|
||||||
"sortablejs": "^1.12.0",
|
"sortablejs": "^1.12.0",
|
||||||
"vditor": "^3.6.6",
|
"vditor": "^3.6.6",
|
||||||
"vue": "^3.0.2",
|
"vue": "^3.0.3",
|
||||||
"vue-i18n": "^9.0.0-beta.8",
|
"vue-i18n": "^9.0.0-beta.8",
|
||||||
"vue-router": "^4.0.0-rc.5",
|
"vue-router": "^4.0.0-rc.5",
|
||||||
"vuex": "^4.0.0-rc.1",
|
"vuex": "^4.0.0-rc.1",
|
||||||
@ -63,7 +63,7 @@
|
|||||||
"@types/zxcvbn": "^4.4.0",
|
"@types/zxcvbn": "^4.4.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^4.8.2",
|
"@typescript-eslint/eslint-plugin": "^4.8.2",
|
||||||
"@typescript-eslint/parser": "^4.8.2",
|
"@typescript-eslint/parser": "^4.8.2",
|
||||||
"@vue/compiler-sfc": "^3.0.2",
|
"@vue/compiler-sfc": "^3.0.3",
|
||||||
"@vuedx/typecheck": "^0.2.4-0",
|
"@vuedx/typecheck": "^0.2.4-0",
|
||||||
"@vuedx/typescript-plugin-vue": "^0.2.4-0",
|
"@vuedx/typescript-plugin-vue": "^0.2.4-0",
|
||||||
"autoprefixer": "^9.8.6",
|
"autoprefixer": "^9.8.6",
|
||||||
@ -96,7 +96,7 @@
|
|||||||
"tasksfile": "^5.1.1",
|
"tasksfile": "^5.1.1",
|
||||||
"ts-node": "^9.0.0",
|
"ts-node": "^9.0.0",
|
||||||
"typescript": "^4.1.2",
|
"typescript": "^4.1.2",
|
||||||
"vite": "^1.0.0-rc.9",
|
"vite": "^1.0.0-rc.10",
|
||||||
"vite-plugin-html": "^1.0.0-beta.2",
|
"vite-plugin-html": "^1.0.0-beta.2",
|
||||||
"vite-plugin-mock": "^1.0.6",
|
"vite-plugin-mock": "^1.0.6",
|
||||||
"vite-plugin-purge-icons": "^0.4.5",
|
"vite-plugin-purge-icons": "^0.4.5",
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import './index.less';
|
||||||
|
|
||||||
import type { DrawerInstance, DrawerProps } from './types';
|
import type { DrawerInstance, DrawerProps } from './types';
|
||||||
|
|
||||||
import { defineComponent, ref, computed, watchEffect, watch, unref, nextTick, toRaw } from 'vue';
|
import { defineComponent, ref, computed, watchEffect, watch, unref, nextTick, toRaw } from 'vue';
|
||||||
@ -13,8 +15,7 @@ import { getSlot } from '/@/utils/helper/tsxHelper';
|
|||||||
import { isFunction, isNumber } from '/@/utils/is';
|
import { isFunction, isNumber } from '/@/utils/is';
|
||||||
import { buildUUID } from '/@/utils/uuid';
|
import { buildUUID } from '/@/utils/uuid';
|
||||||
import { deepMerge } from '/@/utils';
|
import { deepMerge } from '/@/utils';
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
import './index.less';
|
|
||||||
|
|
||||||
const prefixCls = 'basic-drawer';
|
const prefixCls = 'basic-drawer';
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
@ -27,6 +28,8 @@ export default defineComponent({
|
|||||||
const visibleRef = ref(false);
|
const visibleRef = ref(false);
|
||||||
const propsRef = ref<Partial<DrawerProps> | null>(null);
|
const propsRef = ref<Partial<DrawerProps> | null>(null);
|
||||||
|
|
||||||
|
const { t } = useI18n('component.drawer');
|
||||||
|
|
||||||
const getMergeProps = computed((): any => {
|
const getMergeProps = computed((): any => {
|
||||||
return deepMerge(toRaw(props), unref(propsRef));
|
return deepMerge(toRaw(props), unref(propsRef));
|
||||||
});
|
});
|
||||||
@ -208,7 +211,7 @@ export default defineComponent({
|
|||||||
>
|
>
|
||||||
<FullLoading
|
<FullLoading
|
||||||
absolute
|
absolute
|
||||||
tip="加载中..."
|
tip={t('loadingText')}
|
||||||
class={[!unref(getProps).loading ? 'hidden' : '']}
|
class={[!unref(getProps).loading ? 'hidden' : '']}
|
||||||
/>
|
/>
|
||||||
{getSlot(slots, 'default')}
|
{getSlot(slots, 'default')}
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
import type { PropType } from 'vue';
|
import type { PropType } from 'vue';
|
||||||
|
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
const { t } = useI18n('component.drawer');
|
||||||
|
|
||||||
export const footerProps = {
|
export const footerProps = {
|
||||||
confirmLoading: Boolean as PropType<boolean>,
|
confirmLoading: Boolean as PropType<boolean>,
|
||||||
/**
|
/**
|
||||||
@ -11,7 +15,7 @@ export const footerProps = {
|
|||||||
cancelButtonProps: Object as PropType<any>,
|
cancelButtonProps: Object as PropType<any>,
|
||||||
cancelText: {
|
cancelText: {
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '关闭',
|
default: t('cancelText'),
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* @description: Show confirmation button
|
* @description: Show confirmation button
|
||||||
@ -23,7 +27,7 @@ export const footerProps = {
|
|||||||
okButtonProps: Object as PropType<any>,
|
okButtonProps: Object as PropType<any>,
|
||||||
okText: {
|
okText: {
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '确认',
|
default: t('okText'),
|
||||||
},
|
},
|
||||||
okType: {
|
okType: {
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<BasicModal v-bind="$attrs" title="导出数据" @ok="handleOk" @register="registerModal">
|
<BasicModal
|
||||||
|
v-bind="$attrs"
|
||||||
|
:title="t('exportModalTitle')"
|
||||||
|
@ok="handleOk"
|
||||||
|
@register="registerModal"
|
||||||
|
>
|
||||||
<BasicForm
|
<BasicForm
|
||||||
:labelWidth="100"
|
:labelWidth="100"
|
||||||
:schemas="schemas"
|
:schemas="schemas"
|
||||||
@ -9,22 +14,26 @@
|
|||||||
</BasicModal>
|
</BasicModal>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import type { ExportModalResult } from './types';
|
||||||
import { defineComponent } from 'vue';
|
import { defineComponent } from 'vue';
|
||||||
import { BasicModal, useModalInner } from '/@/components/Modal';
|
import { BasicModal, useModalInner } from '/@/components/Modal';
|
||||||
import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
|
import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
|
||||||
import { ExportModalResult } from './types';
|
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
|
||||||
|
const { t } = useI18n('component.excel');
|
||||||
|
|
||||||
const schemas: FormSchema[] = [
|
const schemas: FormSchema[] = [
|
||||||
{
|
{
|
||||||
field: 'filename',
|
field: 'filename',
|
||||||
component: 'Input',
|
component: 'Input',
|
||||||
label: '文件名',
|
label: t('fileName'),
|
||||||
rules: [{ required: true }],
|
rules: [{ required: true }],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'bookType',
|
field: 'bookType',
|
||||||
component: 'Select',
|
component: 'Select',
|
||||||
label: '文件类型',
|
label: t('fileType'),
|
||||||
defaultValue: 'xlsx',
|
defaultValue: 'xlsx',
|
||||||
rules: [{ required: true }],
|
rules: [{ required: true }],
|
||||||
componentProps: {
|
componentProps: {
|
||||||
@ -76,6 +85,7 @@
|
|||||||
handleOk,
|
handleOk,
|
||||||
registerForm,
|
registerForm,
|
||||||
registerModal,
|
registerModal,
|
||||||
|
t,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -79,7 +79,7 @@
|
|||||||
/* DO SOMETHING WITH workbook HERE */
|
/* DO SOMETHING WITH workbook HERE */
|
||||||
const excelData = getExcelData(workbook);
|
const excelData = getExcelData(workbook);
|
||||||
emit('success', excelData);
|
emit('success', excelData);
|
||||||
resolve();
|
resolve('');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
reject(error);
|
reject(error);
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -6,6 +6,9 @@ import Button from '/@/components/Button/index.vue';
|
|||||||
import { BasicArrow } from '/@/components/Basic/index';
|
import { BasicArrow } from '/@/components/Basic/index';
|
||||||
|
|
||||||
import { getSlot } from '/@/utils/helper/tsxHelper';
|
import { getSlot } from '/@/utils/helper/tsxHelper';
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
|
||||||
|
const { t } = useI18n('component.form');
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'BasicFormAction',
|
name: 'BasicFormAction',
|
||||||
@ -55,14 +58,14 @@ export default defineComponent({
|
|||||||
setup(props, { slots, emit }) {
|
setup(props, { slots, emit }) {
|
||||||
const getResetBtnOptionsRef = computed(() => {
|
const getResetBtnOptionsRef = computed(() => {
|
||||||
return {
|
return {
|
||||||
text: '重置',
|
text: t('resetButton'),
|
||||||
...props.resetButtonOptions,
|
...props.resetButtonOptions,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
const getSubmitBtnOptionsRef = computed(() => {
|
const getSubmitBtnOptionsRef = computed(() => {
|
||||||
return {
|
return {
|
||||||
text: '查询',
|
text: t('submitButton'),
|
||||||
// htmlType: 'submit',
|
// htmlType: 'submit',
|
||||||
...props.submitButtonOptions,
|
...props.submitButtonOptions,
|
||||||
};
|
};
|
||||||
@ -108,7 +111,7 @@ export default defineComponent({
|
|||||||
<Button type="default" class="mr-2" onClick={toggleAdvanced}>
|
<Button type="default" class="mr-2" onClick={toggleAdvanced}>
|
||||||
{() => (
|
{() => (
|
||||||
<>
|
<>
|
||||||
{isAdvanced ? '收起' : '展开'}
|
{isAdvanced ? t('putAway') : t('unfold')}
|
||||||
<BasicArrow expand={!isAdvanced} />
|
<BasicArrow expand={!isAdvanced} />
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
@ -1,14 +1,17 @@
|
|||||||
import type { ComponentType } from './types/index';
|
import type { ComponentType } from './types/index';
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
|
||||||
|
const { t } = useI18n('component.form');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: 生成placeholder
|
* @description: 生成placeholder
|
||||||
*/
|
*/
|
||||||
export function createPlaceholderMessage(component: ComponentType) {
|
export function createPlaceholderMessage(component: ComponentType) {
|
||||||
if (component.includes('Input') || component.includes('Complete')) {
|
if (component.includes('Input') || component.includes('Complete')) {
|
||||||
return '请输入';
|
return t('input');
|
||||||
}
|
}
|
||||||
if (component.includes('Picker')) {
|
if (component.includes('Picker')) {
|
||||||
return '请选择';
|
return t('choose');
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
component.includes('Select') ||
|
component.includes('Select') ||
|
||||||
@ -18,7 +21,7 @@ export function createPlaceholderMessage(component: ComponentType) {
|
|||||||
component.includes('Switch')
|
component.includes('Switch')
|
||||||
) {
|
) {
|
||||||
// return `请选择${label}`;
|
// return `请选择${label}`;
|
||||||
return '请选择';
|
return t('choose');
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<section class="menu-search-input" @Click="handleClick" :class="searchClass">
|
<section class="menu-search-input" @Click="handleClick" :class="searchClass">
|
||||||
<a-input-search
|
<a-input-search
|
||||||
placeholder="菜单搜索"
|
:placeholder="t('search')"
|
||||||
class="menu-search-input__search"
|
class="menu-search-input__search"
|
||||||
allowClear
|
allowClear
|
||||||
@change="handleChange"
|
@change="handleChange"
|
||||||
@ -12,9 +12,9 @@
|
|||||||
import type { PropType } from 'vue';
|
import type { PropType } from 'vue';
|
||||||
import { defineComponent, computed } from 'vue';
|
import { defineComponent, computed } from 'vue';
|
||||||
import { ThemeEnum } from '/@/enums/appEnum';
|
import { ThemeEnum } from '/@/enums/appEnum';
|
||||||
|
|
||||||
// hook
|
// hook
|
||||||
import { useDebounce } from '/@/hooks/core/useDebounce';
|
import { useDebounce } from '/@/hooks/core/useDebounce';
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
//
|
//
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'BasicMenuSearchInput',
|
name: 'BasicMenuSearchInput',
|
||||||
@ -29,6 +29,8 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
|
const { t } = useI18n('component.menu');
|
||||||
|
|
||||||
const [debounceEmitChange] = useDebounce(emitChange, 200);
|
const [debounceEmitChange] = useDebounce(emitChange, 200);
|
||||||
|
|
||||||
function emitChange(value?: string): void {
|
function emitChange(value?: string): void {
|
||||||
@ -52,7 +54,7 @@
|
|||||||
return cls;
|
return cls;
|
||||||
});
|
});
|
||||||
|
|
||||||
return { handleClick, searchClass, handleChange };
|
return { handleClick, searchClass, handleChange, t };
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
|
import { ComputedRef } from 'vue';
|
||||||
import { ThemeEnum } from '/@/enums/appEnum';
|
import { ThemeEnum } from '/@/enums/appEnum';
|
||||||
|
import { MenuModeEnum } from '/@/enums/menuEnum';
|
||||||
export interface MenuState {
|
export interface MenuState {
|
||||||
// 默认选中的列表
|
// 默认选中的列表
|
||||||
defaultSelectedKeys: string[];
|
defaultSelectedKeys: string[];
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
import type { PropType } from 'vue';
|
import type { PropType } from 'vue';
|
||||||
import { ButtonProps } from 'ant-design-vue/es/button/buttonTypes';
|
import { ButtonProps } from 'ant-design-vue/es/button/buttonTypes';
|
||||||
|
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
const { t } = useI18n('component.modal');
|
||||||
|
|
||||||
export const modalProps = {
|
export const modalProps = {
|
||||||
visible: Boolean as PropType<boolean>,
|
visible: Boolean as PropType<boolean>,
|
||||||
// open drag
|
// open drag
|
||||||
@ -13,11 +17,11 @@ export const modalProps = {
|
|||||||
},
|
},
|
||||||
cancelText: {
|
cancelText: {
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '关闭',
|
default: t('cancelText'),
|
||||||
},
|
},
|
||||||
okText: {
|
okText: {
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '确认',
|
default: t('okText'),
|
||||||
},
|
},
|
||||||
closeFunc: Function as PropType<() => Promise<boolean>>,
|
closeFunc: Function as PropType<() => Promise<boolean>>,
|
||||||
};
|
};
|
||||||
|
@ -4,27 +4,27 @@
|
|||||||
|
|
||||||
<Tooltip placement="top" v-if="getSetting.redo">
|
<Tooltip placement="top" v-if="getSetting.redo">
|
||||||
<template #title>
|
<template #title>
|
||||||
<span>刷新</span>
|
<span>{{ t('settingRedo') }}</span>
|
||||||
</template>
|
</template>
|
||||||
<RedoOutlined @click="redo" />
|
<RedoOutlined @click="redo" />
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
|
||||||
<Tooltip placement="top" v-if="getSetting.size">
|
<Tooltip placement="top" v-if="getSetting.size">
|
||||||
<template #title>
|
<template #title>
|
||||||
<span>密度</span>
|
<span>{{ t('settingDens') }}</span>
|
||||||
</template>
|
</template>
|
||||||
<Dropdown placement="bottomCenter" :trigger="['click']">
|
<Dropdown placement="bottomCenter" :trigger="['click']">
|
||||||
<ColumnHeightOutlined />
|
<ColumnHeightOutlined />
|
||||||
<template #overlay>
|
<template #overlay>
|
||||||
<Menu @click="handleTitleClick" selectable v-model:selectedKeys="selectedKeysRef">
|
<Menu @click="handleTitleClick" selectable v-model:selectedKeys="selectedKeysRef">
|
||||||
<MenuItem key="default">
|
<MenuItem key="default">
|
||||||
<span>默认</span>
|
<span>{{ t('settingDensDefault') }}</span>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem key="middle">
|
<MenuItem key="middle">
|
||||||
<span>中等</span>
|
<span>{{ t('settingDensMiddle') }}</span>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem key="small">
|
<MenuItem key="small">
|
||||||
<span>紧凑</span>
|
<span>{{ t('settingDensSmall') }}</span>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
</Menu>
|
</Menu>
|
||||||
</template>
|
</template>
|
||||||
@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
<Tooltip placement="top" v-if="getSetting.setting">
|
<Tooltip placement="top" v-if="getSetting.setting">
|
||||||
<template #title>
|
<template #title>
|
||||||
<span>列设置</span>
|
<span>{{ t('settingColumn') }}</span>
|
||||||
</template>
|
</template>
|
||||||
<Popover
|
<Popover
|
||||||
placement="bottomLeft"
|
placement="bottomLeft"
|
||||||
@ -58,9 +58,9 @@
|
|||||||
v-model:checked="checkAll"
|
v-model:checked="checkAll"
|
||||||
@change="onCheckAllChange"
|
@change="onCheckAllChange"
|
||||||
>
|
>
|
||||||
列展示
|
{{ t('settingColumnShow') }}
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
<a-button size="small" type="link" @click="reset">重置</a-button>
|
<a-button size="small" type="link" @click="reset"> {{ t('settingReset') }}</a-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<SettingOutlined />
|
<SettingOutlined />
|
||||||
@ -69,7 +69,7 @@
|
|||||||
|
|
||||||
<Tooltip placement="top" v-if="getSetting.fullScreen">
|
<Tooltip placement="top" v-if="getSetting.fullScreen">
|
||||||
<template #title>
|
<template #title>
|
||||||
<span>全屏</span>
|
<span>{{ t('settingFullScreen') }}</span>
|
||||||
</template>
|
</template>
|
||||||
<FullscreenOutlined @click="handleFullScreen" v-if="!isFullscreenRef" />
|
<FullscreenOutlined @click="handleFullScreen" v-if="!isFullscreenRef" />
|
||||||
<FullscreenExitOutlined @click="handleFullScreen" v-else />
|
<FullscreenExitOutlined @click="handleFullScreen" v-else />
|
||||||
@ -90,6 +90,7 @@
|
|||||||
import { useFullscreen } from '/@/hooks/web/useFullScreen';
|
import { useFullscreen } from '/@/hooks/web/useFullScreen';
|
||||||
|
|
||||||
import type { SizeType, TableSetting } from '../types/table';
|
import type { SizeType, TableSetting } from '../types/table';
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
|
||||||
interface Options {
|
interface Options {
|
||||||
label: string;
|
label: string;
|
||||||
@ -139,6 +140,8 @@
|
|||||||
defaultCheckList: [],
|
defaultCheckList: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const { t } = useI18n('component.table');
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
let ret: Options[] = [];
|
let ret: Options[] = [];
|
||||||
table.getColumns({ ignoreIndex: true, ignoreAction: true }).forEach((item) => {
|
table.getColumns({ ignoreIndex: true, ignoreAction: true }).forEach((item) => {
|
||||||
@ -217,6 +220,7 @@
|
|||||||
reset,
|
reset,
|
||||||
getSetting,
|
getSetting,
|
||||||
...toRefs(state),
|
...toRefs(state),
|
||||||
|
t,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -4,7 +4,9 @@ import { unref, ComputedRef, Ref, computed, watchEffect, ref, toRaw } from 'vue'
|
|||||||
import { isBoolean, isArray, isObject } from '/@/utils/is';
|
import { isBoolean, isArray, isObject } from '/@/utils/is';
|
||||||
import { PAGE_SIZE } from '../const';
|
import { PAGE_SIZE } from '../const';
|
||||||
import { useProps } from './useProps';
|
import { useProps } from './useProps';
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
|
||||||
|
const { t } = useI18n('component.table');
|
||||||
export function useColumns(
|
export function useColumns(
|
||||||
refProps: ComputedRef<BasicTableProps>,
|
refProps: ComputedRef<BasicTableProps>,
|
||||||
getPaginationRef: ComputedRef<false | PaginationProps>
|
getPaginationRef: ComputedRef<false | PaginationProps>
|
||||||
@ -42,7 +44,7 @@ export function useColumns(
|
|||||||
columns.unshift({
|
columns.unshift({
|
||||||
flag: 'INDEX',
|
flag: 'INDEX',
|
||||||
width: 50,
|
width: 50,
|
||||||
title: '序号',
|
title: t('index'),
|
||||||
align: 'center',
|
align: 'center',
|
||||||
customRender: ({ index }) => {
|
customRender: ({ index }) => {
|
||||||
const getPagination = unref(getPaginationRef);
|
const getPagination = unref(getPaginationRef);
|
||||||
|
@ -8,6 +8,9 @@ import { isBoolean } from '/@/utils/is';
|
|||||||
|
|
||||||
import { PAGE_SIZE, PAGE_SIZE_OPTIONS } from '../const';
|
import { PAGE_SIZE, PAGE_SIZE_OPTIONS } from '../const';
|
||||||
import { useProps } from './useProps';
|
import { useProps } from './useProps';
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
|
||||||
|
const { t } = useI18n('component.table');
|
||||||
export function usePagination(refProps: ComputedRef<BasicTableProps>) {
|
export function usePagination(refProps: ComputedRef<BasicTableProps>) {
|
||||||
const configRef = ref<PaginationProps>({});
|
const configRef = ref<PaginationProps>({});
|
||||||
const { propsRef } = useProps(refProps);
|
const { propsRef } = useProps(refProps);
|
||||||
@ -22,7 +25,7 @@ export function usePagination(refProps: ComputedRef<BasicTableProps>) {
|
|||||||
pageSize: PAGE_SIZE,
|
pageSize: PAGE_SIZE,
|
||||||
size: 'small',
|
size: 'small',
|
||||||
defaultPageSize: PAGE_SIZE,
|
defaultPageSize: PAGE_SIZE,
|
||||||
showTotal: (total) => `共 ${total} 条数据`,
|
showTotal: (total) => t('total', { total }),
|
||||||
showSizeChanger: true,
|
showSizeChanger: true,
|
||||||
pageSizeOptions: PAGE_SIZE_OPTIONS,
|
pageSizeOptions: PAGE_SIZE_OPTIONS,
|
||||||
itemRender: ({ page, type, originalElement }) => {
|
itemRender: ({ page, type, originalElement }) => {
|
||||||
|
@ -13,7 +13,7 @@ const lineHeight = function (tinymce: any) {
|
|||||||
|
|
||||||
t.ui.registry.addMenuButton('lineheight', {
|
t.ui.registry.addMenuButton('lineheight', {
|
||||||
icon: 'lineheight',
|
icon: 'lineheight',
|
||||||
tooltip: '设置行高',
|
tooltip: 'Line Height',
|
||||||
// fetch: function (callback: Fn) {
|
// fetch: function (callback: Fn) {
|
||||||
// var dom = t.dom;
|
// var dom = t.dom;
|
||||||
// var blocks = t.selection.getSelectedBlocks();
|
// var blocks = t.selection.getSelectedBlocks();
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
<div>
|
<div>
|
||||||
<a-button-group>
|
<a-button-group>
|
||||||
<a-button type="primary" @click="openUploadModal" preIcon="ant-design:cloud-upload-outlined">
|
<a-button type="primary" @click="openUploadModal" preIcon="ant-design:cloud-upload-outlined">
|
||||||
上传
|
{{ t('upload') }}
|
||||||
</a-button>
|
</a-button>
|
||||||
<Tooltip placement="bottom" v-if="showPreview">
|
<Tooltip placement="bottom" v-if="showPreview">
|
||||||
<template #title>
|
<template #title>
|
||||||
已上传
|
{{ t('uploaded') }}
|
||||||
<template v-if="fileListRef.length">{{ fileListRef.length }}</template>
|
<template v-if="fileListRef.length">{{ fileListRef.length }}</template>
|
||||||
</template>
|
</template>
|
||||||
<a-button @click="openPreviewModal">
|
<a-button @click="openPreviewModal">
|
||||||
@ -39,12 +39,14 @@
|
|||||||
|
|
||||||
import { uploadContainerProps } from './props';
|
import { uploadContainerProps } from './props';
|
||||||
import { omit } from 'lodash-es';
|
import { omit } from 'lodash-es';
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'BasicUpload',
|
name: 'BasicUpload',
|
||||||
components: { UploadModal, UploadPreviewModal, Icon, Tooltip },
|
components: { UploadModal, UploadPreviewModal, Icon, Tooltip },
|
||||||
props: uploadContainerProps,
|
props: uploadContainerProps,
|
||||||
setup(props, { emit, attrs }) {
|
setup(props, { emit, attrs }) {
|
||||||
|
const { t } = useI18n('component.upload');
|
||||||
// 上传modal
|
// 上传modal
|
||||||
const [registerUploadModal, { openModal: openUploadModal }] = useModal();
|
const [registerUploadModal, { openModal: openUploadModal }] = useModal();
|
||||||
|
|
||||||
@ -94,6 +96,7 @@
|
|||||||
fileListRef,
|
fileListRef,
|
||||||
showPreview,
|
showPreview,
|
||||||
bindValue,
|
bindValue,
|
||||||
|
t,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<BasicModal
|
<BasicModal
|
||||||
width="800px"
|
width="800px"
|
||||||
title="上传"
|
:title="t('upload')"
|
||||||
okText="保存"
|
:okText="t('save')"
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
@register="register"
|
@register="register"
|
||||||
@ok="handleOk"
|
@ok="handleOk"
|
||||||
@ -31,7 +31,7 @@
|
|||||||
:before-upload="beforeUpload"
|
:before-upload="beforeUpload"
|
||||||
class="upload-modal-toolbar__btn"
|
class="upload-modal-toolbar__btn"
|
||||||
>
|
>
|
||||||
<a-button type="primary"> 选择文件 </a-button>
|
<a-button type="primary"> {{ t('choose') }} </a-button>
|
||||||
</Upload>
|
</Upload>
|
||||||
</div>
|
</div>
|
||||||
<FileList :dataSource="fileListRef" :columns="columns" :actionColumn="actionColumn" />
|
<FileList :dataSource="fileListRef" :columns="columns" :actionColumn="actionColumn" />
|
||||||
@ -57,11 +57,15 @@
|
|||||||
import { isFunction } from '/@/utils/is';
|
import { isFunction } from '/@/utils/is';
|
||||||
import { warn } from '/@/utils/log';
|
import { warn } from '/@/utils/log';
|
||||||
import FileList from './FileList';
|
import FileList from './FileList';
|
||||||
|
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: { BasicModal, Upload, Alert, FileList },
|
components: { BasicModal, Upload, Alert, FileList },
|
||||||
props: basicProps,
|
props: basicProps,
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
// 是否正在上传
|
// 是否正在上传
|
||||||
|
const { t } = useI18n('component.upload');
|
||||||
|
|
||||||
const isUploadingRef = ref(false);
|
const isUploadingRef = ref(false);
|
||||||
const fileListRef = ref<FileItem[]>([]);
|
const fileListRef = ref<FileItem[]>([]);
|
||||||
const state = reactive<{ fileList: FileItem[] }>({
|
const state = reactive<{ fileList: FileItem[] }>({
|
||||||
@ -100,7 +104,11 @@
|
|||||||
const someError = fileListRef.value.some(
|
const someError = fileListRef.value.some(
|
||||||
(item) => item.status === UploadResultStatus.ERROR
|
(item) => item.status === UploadResultStatus.ERROR
|
||||||
);
|
);
|
||||||
return isUploadingRef.value ? '上传中' : someError ? '重新上传失败文件' : '开始上传';
|
return isUploadingRef.value
|
||||||
|
? t('uploading')
|
||||||
|
: someError
|
||||||
|
? t('reUploadFailed')
|
||||||
|
: t('startUpload');
|
||||||
});
|
});
|
||||||
|
|
||||||
// 上传前校验
|
// 上传前校验
|
||||||
@ -111,13 +119,13 @@
|
|||||||
|
|
||||||
// 设置最大值,则判断
|
// 设置最大值,则判断
|
||||||
if (maxSize && file.size / 1024 / 1024 >= maxSize) {
|
if (maxSize && file.size / 1024 / 1024 >= maxSize) {
|
||||||
createMessage.error(`只能上传不超过${maxSize}MB的文件!`);
|
createMessage.error(t('maxSizeMultiple', [maxSize]));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置类型,则判断
|
// 设置类型,则判断
|
||||||
if (accept.length > 0 && !checkFileType(file, accept)) {
|
if (accept.length > 0 && !checkFileType(file, accept)) {
|
||||||
createMessage.error!(`只能上传${accept.join(',')}格式文件`);
|
createMessage.error!(t('acceptUpload', [accept.join(',')]));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const commonItem = {
|
const commonItem = {
|
||||||
@ -198,7 +206,7 @@
|
|||||||
async function handleStartUpload() {
|
async function handleStartUpload() {
|
||||||
const { maxNumber } = props;
|
const { maxNumber } = props;
|
||||||
if (fileListRef.value.length > maxNumber) {
|
if (fileListRef.value.length > maxNumber) {
|
||||||
return createMessage.warning(`最多只能上传${maxNumber}个文件`);
|
return createMessage.warning(t('maxNumber', [maxNumber]));
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
isUploadingRef.value = true;
|
isUploadingRef.value = true;
|
||||||
@ -225,10 +233,10 @@
|
|||||||
const { maxNumber } = props;
|
const { maxNumber } = props;
|
||||||
|
|
||||||
if (fileListRef.value.length > maxNumber) {
|
if (fileListRef.value.length > maxNumber) {
|
||||||
return createMessage.warning(`最多只能上传${maxNumber}个文件`);
|
return createMessage.warning(t('maxNumber', [maxNumber]));
|
||||||
}
|
}
|
||||||
if (isUploadingRef.value) {
|
if (isUploadingRef.value) {
|
||||||
return createMessage.warning('请等待文件上传后,保存');
|
return createMessage.warning(t('saveWarn'));
|
||||||
}
|
}
|
||||||
const fileList: string[] = [];
|
const fileList: string[] = [];
|
||||||
|
|
||||||
@ -240,7 +248,7 @@
|
|||||||
}
|
}
|
||||||
// 存在一个上传成功的即可保存
|
// 存在一个上传成功的即可保存
|
||||||
if (fileList.length <= 0) {
|
if (fileList.length <= 0) {
|
||||||
return createMessage.warning('没有上传成功的文件,无法保存');
|
return createMessage.warning(t('saveError'));
|
||||||
}
|
}
|
||||||
fileListRef.value = [];
|
fileListRef.value = [];
|
||||||
closeModal();
|
closeModal();
|
||||||
@ -253,7 +261,7 @@
|
|||||||
fileListRef.value = [];
|
fileListRef.value = [];
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
createMessage.warning('请等待文件上传结束后操作');
|
createMessage.warning(t('uploadWait'));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -285,6 +293,7 @@
|
|||||||
handleCloseFunc,
|
handleCloseFunc,
|
||||||
getIsSelectFile,
|
getIsSelectFile,
|
||||||
getUploadBtnText,
|
getUploadBtnText,
|
||||||
|
t,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<BasicModal
|
<BasicModal
|
||||||
width="800px"
|
width="800px"
|
||||||
title="预览"
|
:title="t('preview')"
|
||||||
wrapClassName="upload-preview-modal"
|
wrapClassName="upload-preview-modal"
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
@register="register"
|
@register="register"
|
||||||
@ -23,11 +23,15 @@
|
|||||||
import { downloadByUrl } from '/@/utils/file/download';
|
import { downloadByUrl } from '/@/utils/file/download';
|
||||||
|
|
||||||
import { createPreviewColumns, createPreviewActionColumn } from './data';
|
import { createPreviewColumns, createPreviewActionColumn } from './data';
|
||||||
|
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: { BasicModal, FileList },
|
components: { BasicModal, FileList },
|
||||||
props: previewProps,
|
props: previewProps,
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
const [register, { closeModal }] = useModalInner();
|
const [register, { closeModal }] = useModalInner();
|
||||||
|
const { t } = useI18n('component.upload');
|
||||||
|
|
||||||
const fileListRef = ref<PreviewFileItem[]>([]);
|
const fileListRef = ref<PreviewFileItem[]>([]);
|
||||||
watch(
|
watch(
|
||||||
() => props.value,
|
() => props.value,
|
||||||
@ -74,6 +78,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
t,
|
||||||
register,
|
register,
|
||||||
closeModal,
|
closeModal,
|
||||||
fileListRef,
|
fileListRef,
|
||||||
|
@ -6,12 +6,15 @@ import { Progress, Tag } from 'ant-design-vue';
|
|||||||
|
|
||||||
import TableAction from '/@/components/Table/src/components/TableAction';
|
import TableAction from '/@/components/Table/src/components/TableAction';
|
||||||
|
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
const { t } = useI18n('component.upload');
|
||||||
|
|
||||||
// 文件上传列表
|
// 文件上传列表
|
||||||
export function createTableColumns(): BasicColumn[] {
|
export function createTableColumns(): BasicColumn[] {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
dataIndex: 'thumbUrl',
|
dataIndex: 'thumbUrl',
|
||||||
title: '图例',
|
title: t('legend'),
|
||||||
width: 100,
|
width: 100,
|
||||||
customRender: ({ record }) => {
|
customRender: ({ record }) => {
|
||||||
const { thumbUrl, type } = (record as FileItem) || {};
|
const { thumbUrl, type } = (record as FileItem) || {};
|
||||||
@ -20,7 +23,7 @@ export function createTableColumns(): BasicColumn[] {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
dataIndex: 'name',
|
dataIndex: 'name',
|
||||||
title: '文件名',
|
title: t('fileName'),
|
||||||
align: 'left',
|
align: 'left',
|
||||||
customRender: ({ text, record }) => {
|
customRender: ({ text, record }) => {
|
||||||
const { percent, status: uploadStatus } = (record as FileItem) || {};
|
const { percent, status: uploadStatus } = (record as FileItem) || {};
|
||||||
@ -44,7 +47,7 @@ export function createTableColumns(): BasicColumn[] {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
dataIndex: 'size',
|
dataIndex: 'size',
|
||||||
title: '文件大小',
|
title: t('fileSize'),
|
||||||
width: 100,
|
width: 100,
|
||||||
customRender: ({ text = 0 }) => {
|
customRender: ({ text = 0 }) => {
|
||||||
return text && (text / 1024).toFixed(2) + 'KB';
|
return text && (text / 1024).toFixed(2) + 'KB';
|
||||||
@ -57,15 +60,15 @@ export function createTableColumns(): BasicColumn[] {
|
|||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
dataIndex: 'status',
|
dataIndex: 'status',
|
||||||
title: '状态',
|
title: t('fileStatue'),
|
||||||
width: 100,
|
width: 100,
|
||||||
customRender: ({ text }) => {
|
customRender: ({ text }) => {
|
||||||
if (text === UploadResultStatus.SUCCESS) {
|
if (text === UploadResultStatus.SUCCESS) {
|
||||||
return <Tag color="green">{() => '上传成功'}</Tag>;
|
return <Tag color="green">{() => t('uploadSuccess')}</Tag>;
|
||||||
} else if (text === UploadResultStatus.ERROR) {
|
} else if (text === UploadResultStatus.ERROR) {
|
||||||
return <Tag color="red">{() => '上传失败'}</Tag>;
|
return <Tag color="red">{() => t('uploadError')}</Tag>;
|
||||||
} else if (text === UploadResultStatus.UPLOADING) {
|
} else if (text === UploadResultStatus.UPLOADING) {
|
||||||
return <Tag color="blue">{() => '上传中'}</Tag>;
|
return <Tag color="blue">{() => t('uploading')}</Tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
return text;
|
return text;
|
||||||
@ -76,20 +79,20 @@ export function createTableColumns(): BasicColumn[] {
|
|||||||
export function createActionColumn(handleRemove: Function, handlePreview: Function): BasicColumn {
|
export function createActionColumn(handleRemove: Function, handlePreview: Function): BasicColumn {
|
||||||
return {
|
return {
|
||||||
width: 120,
|
width: 120,
|
||||||
title: '操作',
|
title: t('operating'),
|
||||||
dataIndex: 'action',
|
dataIndex: 'action',
|
||||||
fixed: false,
|
fixed: false,
|
||||||
customRender: ({ record }) => {
|
customRender: ({ record }) => {
|
||||||
const actions: ActionItem[] = [
|
const actions: ActionItem[] = [
|
||||||
{
|
{
|
||||||
label: '删除',
|
label: t('del'),
|
||||||
color: 'error',
|
color: 'error',
|
||||||
onClick: handleRemove.bind(null, record),
|
onClick: handleRemove.bind(null, record),
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
if (checkImgType(record)) {
|
if (checkImgType(record)) {
|
||||||
actions.unshift({
|
actions.unshift({
|
||||||
label: '预览',
|
label: t('preview'),
|
||||||
onClick: handlePreview.bind(null, record),
|
onClick: handlePreview.bind(null, record),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -102,7 +105,7 @@ export function createPreviewColumns(): BasicColumn[] {
|
|||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
dataIndex: 'url',
|
dataIndex: 'url',
|
||||||
title: '图例',
|
title: t('legend'),
|
||||||
width: 100,
|
width: 100,
|
||||||
customRender: ({ record }) => {
|
customRender: ({ record }) => {
|
||||||
const { url, type } = (record as PreviewFileItem) || {};
|
const { url, type } = (record as PreviewFileItem) || {};
|
||||||
@ -113,7 +116,7 @@ export function createPreviewColumns(): BasicColumn[] {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
dataIndex: 'name',
|
dataIndex: 'name',
|
||||||
title: '文件名',
|
title: t('fileName'),
|
||||||
align: 'left',
|
align: 'left',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
@ -130,7 +133,7 @@ export function createPreviewActionColumn({
|
|||||||
}): BasicColumn {
|
}): BasicColumn {
|
||||||
return {
|
return {
|
||||||
width: 160,
|
width: 160,
|
||||||
title: '操作',
|
title: t('operating'),
|
||||||
dataIndex: 'action',
|
dataIndex: 'action',
|
||||||
fixed: false,
|
fixed: false,
|
||||||
customRender: ({ record }) => {
|
customRender: ({ record }) => {
|
||||||
@ -138,18 +141,18 @@ export function createPreviewActionColumn({
|
|||||||
|
|
||||||
const actions: ActionItem[] = [
|
const actions: ActionItem[] = [
|
||||||
{
|
{
|
||||||
label: '删除',
|
label: t('del'),
|
||||||
color: 'error',
|
color: 'error',
|
||||||
onClick: handleRemove.bind(null, record),
|
onClick: handleRemove.bind(null, record),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '下载',
|
label: t('download'),
|
||||||
onClick: handleDownload.bind(null, record),
|
onClick: handleDownload.bind(null, record),
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
if (isImgTypeByName(url)) {
|
if (isImgTypeByName(url)) {
|
||||||
actions.unshift({
|
actions.unshift({
|
||||||
label: '预览',
|
label: t('preview'),
|
||||||
onClick: handlePreview.bind(null, record),
|
onClick: handlePreview.bind(null, record),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { Ref, unref, computed } from 'vue';
|
import { Ref, unref, computed } from 'vue';
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
const { t } = useI18n('component.upload');
|
||||||
export function useUploadType({
|
export function useUploadType({
|
||||||
acceptRef,
|
acceptRef,
|
||||||
// uploadTypeRef,
|
// uploadTypeRef,
|
||||||
@ -37,17 +38,17 @@ export function useUploadType({
|
|||||||
|
|
||||||
const accept = unref(acceptRef);
|
const accept = unref(acceptRef);
|
||||||
if (accept.length > 0) {
|
if (accept.length > 0) {
|
||||||
helpTexts.push(`支持${accept.join(',')}格式`);
|
helpTexts.push(t('accept', [accept.join(',')]));
|
||||||
}
|
}
|
||||||
|
|
||||||
const maxSize = unref(maxSizeRef);
|
const maxSize = unref(maxSizeRef);
|
||||||
if (maxSize) {
|
if (maxSize) {
|
||||||
helpTexts.push(`单个文件不超过${maxSize}MB`);
|
helpTexts.push(t('maxSize', [maxSize]));
|
||||||
}
|
}
|
||||||
|
|
||||||
const maxNumber = unref(maxNumberRef);
|
const maxNumber = unref(maxNumberRef);
|
||||||
if (maxNumber && maxNumber !== Infinity) {
|
if (maxNumber && maxNumber !== Infinity) {
|
||||||
helpTexts.push(`最多只能上传${maxNumber}个文件`);
|
helpTexts.push(t('maxNumber', [maxNumber]));
|
||||||
}
|
}
|
||||||
return helpTexts.join(',');
|
return helpTexts.join(',');
|
||||||
});
|
});
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import './ImgRotate.less';
|
||||||
|
|
||||||
import type { MoveData, DragVerifyActionType } from './types';
|
import type { MoveData, DragVerifyActionType } from './types';
|
||||||
|
|
||||||
import { defineComponent, computed, unref, reactive, watch, ref, getCurrentInstance } from 'vue';
|
import { defineComponent, computed, unref, reactive, watch, ref, getCurrentInstance } from 'vue';
|
||||||
@ -8,7 +10,8 @@ import BasicDragVerify from './DragVerify';
|
|||||||
import { hackCss } from '/@/utils/domUtils';
|
import { hackCss } from '/@/utils/domUtils';
|
||||||
|
|
||||||
import { rotateProps } from './props';
|
import { rotateProps } from './props';
|
||||||
import './ImgRotate.less';
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'ImgRotateDargVerify',
|
name: 'ImgRotateDargVerify',
|
||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
@ -27,6 +30,7 @@ export default defineComponent({
|
|||||||
endTime: 0,
|
endTime: 0,
|
||||||
draged: false,
|
draged: false,
|
||||||
});
|
});
|
||||||
|
const { t } = useI18n('component.verify');
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => state.isPassing,
|
() => state.isPassing,
|
||||||
@ -142,11 +146,11 @@ export default defineComponent({
|
|||||||
/>
|
/>
|
||||||
{state.showTip && (
|
{state.showTip && (
|
||||||
<span class={[`ir-dv-img__tip`, state.isPassing ? 'success' : 'error']}>
|
<span class={[`ir-dv-img__tip`, state.isPassing ? 'success' : 'error']}>
|
||||||
{state.isPassing ? `校验成功,耗时${time.toFixed(1)}秒!` : '验证失败!'}
|
{state.isPassing ? t('time', { time: time.toFixed(1) }) : t('error')}
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
{!state.showTip && !state.draged && (
|
{!state.showTip && !state.draged && (
|
||||||
<span class={[`ir-dv-img__tip`, 'normal']}>点击图片可刷新</span>
|
<span class={[`ir-dv-img__tip`, 'normal']}>t('redoTip')</span>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<BasicDragVerify
|
<BasicDragVerify
|
||||||
|
@ -1,44 +0,0 @@
|
|||||||
<script lang="tsx">
|
|
||||||
import { defineComponent, ref, unref } from 'vue';
|
|
||||||
import { BasicModal } from '/@/components/Modal/index';
|
|
||||||
import { useTimeoutFn } from '/@/hooks/core/useTimeout';
|
|
||||||
|
|
||||||
import { RotateDragVerify, DragVerifyActionType } from '/@/components/Verify/index';
|
|
||||||
export default defineComponent({
|
|
||||||
name: 'VerifyModal',
|
|
||||||
|
|
||||||
setup(_, { attrs, emit }) {
|
|
||||||
const dragRef = ref<DragVerifyActionType | null>(null);
|
|
||||||
|
|
||||||
function handleSuccess() {
|
|
||||||
useTimeoutFn(() => {
|
|
||||||
emit('success');
|
|
||||||
const dragEl = unref(dragRef);
|
|
||||||
if (dragEl) {
|
|
||||||
dragEl.resume();
|
|
||||||
}
|
|
||||||
}, 500);
|
|
||||||
}
|
|
||||||
return () => (
|
|
||||||
<BasicModal
|
|
||||||
{...attrs}
|
|
||||||
title="安全校验"
|
|
||||||
keyboard={false}
|
|
||||||
maskClosable={false}
|
|
||||||
canFullscreen={false}
|
|
||||||
footer={null}
|
|
||||||
wrapperFooterOffset={60}
|
|
||||||
destroyOnClose={true}
|
|
||||||
>
|
|
||||||
<RotateDragVerify
|
|
||||||
imgWidth={210}
|
|
||||||
ref={dragRef}
|
|
||||||
text="请拖动滑块将图片摆正"
|
|
||||||
{...attrs}
|
|
||||||
onSuccess={handleSuccess}
|
|
||||||
/>
|
|
||||||
</BasicModal>
|
|
||||||
);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
|
@ -1,5 +1,7 @@
|
|||||||
import type { PropType } from 'vue';
|
import type { PropType } from 'vue';
|
||||||
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
|
||||||
|
const { t } = useI18n('component.verify');
|
||||||
export const basicProps = {
|
export const basicProps = {
|
||||||
value: {
|
value: {
|
||||||
type: Boolean as PropType<boolean>,
|
type: Boolean as PropType<boolean>,
|
||||||
@ -13,11 +15,11 @@ export const basicProps = {
|
|||||||
|
|
||||||
text: {
|
text: {
|
||||||
type: [String] as PropType<string>,
|
type: [String] as PropType<string>,
|
||||||
default: '请按住滑块拖动',
|
default: t('dragText'),
|
||||||
},
|
},
|
||||||
successText: {
|
successText: {
|
||||||
type: [String] as PropType<string>,
|
type: [String] as PropType<string>,
|
||||||
default: '验证通过',
|
default: t('successText'),
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: [Number, String] as PropType<number | string>,
|
type: [Number, String] as PropType<number | string>,
|
||||||
|
5
src/locales/lang/en/component/drawer.ts
Normal file
5
src/locales/lang/en/component/drawer.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
loadingText: 'Loading...',
|
||||||
|
cancelText: 'Close',
|
||||||
|
okText: 'Confirm',
|
||||||
|
};
|
5
src/locales/lang/en/component/excel.ts
Normal file
5
src/locales/lang/en/component/excel.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
exportModalTitle: 'Export data',
|
||||||
|
fileType: 'File type',
|
||||||
|
fileName: 'File name',
|
||||||
|
};
|
9
src/locales/lang/en/component/form.ts
Normal file
9
src/locales/lang/en/component/form.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
export default {
|
||||||
|
resetButton: 'Reset',
|
||||||
|
submitButton: 'Search',
|
||||||
|
putAway: 'Put away',
|
||||||
|
unfold: 'Unfold',
|
||||||
|
|
||||||
|
input: 'Please Input',
|
||||||
|
choose: 'Please Choose',
|
||||||
|
};
|
3
src/locales/lang/en/component/menu.ts
Normal file
3
src/locales/lang/en/component/menu.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export default {
|
||||||
|
search: 'Menu search',
|
||||||
|
};
|
4
src/locales/lang/en/component/modal.ts
Normal file
4
src/locales/lang/en/component/modal.ts
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export default {
|
||||||
|
cancelText: 'Close',
|
||||||
|
okText: 'Confirm',
|
||||||
|
};
|
15
src/locales/lang/en/component/table.ts
Normal file
15
src/locales/lang/en/component/table.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
export default {
|
||||||
|
settingRedo: 'Refresh',
|
||||||
|
settingDens: 'Density',
|
||||||
|
settingDensDefault: 'Default',
|
||||||
|
settingDensMiddle: 'Middle',
|
||||||
|
settingDensSmall: 'Compact',
|
||||||
|
settingColumn: 'Column settings',
|
||||||
|
settingColumnShow: 'Column display',
|
||||||
|
settingReset: 'Reset',
|
||||||
|
settingFullScreen: 'Full Screen',
|
||||||
|
|
||||||
|
index: 'Index',
|
||||||
|
|
||||||
|
total: 'total of {total}',
|
||||||
|
};
|
32
src/locales/lang/en/component/upload.ts
Normal file
32
src/locales/lang/en/component/upload.ts
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
export default {
|
||||||
|
save: 'Save',
|
||||||
|
upload: 'Upload',
|
||||||
|
uploaded: 'Uploaded',
|
||||||
|
|
||||||
|
operating: 'Operating',
|
||||||
|
del: 'Delete',
|
||||||
|
download: 'download',
|
||||||
|
saveWarn: 'Please wait for the file to upload and save!',
|
||||||
|
saveError: 'There is no file successfully uploaded and cannot be saved!',
|
||||||
|
|
||||||
|
preview: 'Preview',
|
||||||
|
choose: 'Select the file',
|
||||||
|
|
||||||
|
accept: 'Support {0} format',
|
||||||
|
acceptUpload: 'Only upload files in {0} format',
|
||||||
|
maxSize: 'A single file does not exceed {0}MB ',
|
||||||
|
maxSizeMultiple: 'Only upload files up to {0}MB!',
|
||||||
|
maxNumber: 'Only upload up to {0} files',
|
||||||
|
|
||||||
|
legend: 'Legend',
|
||||||
|
fileName: 'File name',
|
||||||
|
fileSize: 'File size',
|
||||||
|
fileStatue: 'File status',
|
||||||
|
|
||||||
|
startUpload: 'Start upload',
|
||||||
|
uploadSuccess: 'Upload successfully',
|
||||||
|
uploadError: 'Upload failed',
|
||||||
|
uploading: 'Uploading',
|
||||||
|
uploadWait: 'Please wait for the file upload to finish',
|
||||||
|
reUploadFailed: 'Re-upload failed files',
|
||||||
|
};
|
9
src/locales/lang/en/component/verify.ts
Normal file
9
src/locales/lang/en/component/verify.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
export default {
|
||||||
|
error: 'verification failed!',
|
||||||
|
time: 'The verification is successful and it takes {time} seconds!',
|
||||||
|
|
||||||
|
redoTip: 'Click the picture to refresh',
|
||||||
|
|
||||||
|
dragText: 'Hold down the slider and drag',
|
||||||
|
successText: 'Verified',
|
||||||
|
};
|
5
src/locales/lang/zh_CN/component/drawer.ts
Normal file
5
src/locales/lang/zh_CN/component/drawer.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
loadingText: '加载中...',
|
||||||
|
cancelText: '关闭',
|
||||||
|
okText: '确认',
|
||||||
|
};
|
5
src/locales/lang/zh_CN/component/excel.ts
Normal file
5
src/locales/lang/zh_CN/component/excel.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
exportModalTitle: '导出数据',
|
||||||
|
fileType: '文件类型',
|
||||||
|
fileName: '文件名',
|
||||||
|
};
|
9
src/locales/lang/zh_CN/component/form.ts
Normal file
9
src/locales/lang/zh_CN/component/form.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
export default {
|
||||||
|
resetButton: '重置',
|
||||||
|
submitButton: '查询',
|
||||||
|
putAway: '收起',
|
||||||
|
unfold: '展开',
|
||||||
|
|
||||||
|
input: '请输入',
|
||||||
|
choose: '请选择',
|
||||||
|
};
|
3
src/locales/lang/zh_CN/component/menu.ts
Normal file
3
src/locales/lang/zh_CN/component/menu.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export default {
|
||||||
|
search: '菜单搜索',
|
||||||
|
};
|
5
src/locales/lang/zh_CN/component/modal.ts
Normal file
5
src/locales/lang/zh_CN/component/modal.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
loadingText: '加载中...',
|
||||||
|
cancelText: '关闭',
|
||||||
|
okText: '确认',
|
||||||
|
};
|
15
src/locales/lang/zh_CN/component/table.ts
Normal file
15
src/locales/lang/zh_CN/component/table.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
export default {
|
||||||
|
settingRedo: '刷新',
|
||||||
|
settingDens: '密度',
|
||||||
|
settingDensDefault: '默认',
|
||||||
|
settingDensMiddle: '中等',
|
||||||
|
settingDensSmall: '紧凑',
|
||||||
|
settingColumn: '列设置',
|
||||||
|
settingColumnShow: '列展示',
|
||||||
|
settingReset: '重置',
|
||||||
|
settingFullScreen: '全屏',
|
||||||
|
|
||||||
|
index: '序号',
|
||||||
|
|
||||||
|
total: '共 {total} 条数据',
|
||||||
|
};
|
32
src/locales/lang/zh_CN/component/upload.ts
Normal file
32
src/locales/lang/zh_CN/component/upload.ts
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
export default {
|
||||||
|
save: '保存',
|
||||||
|
upload: '上传',
|
||||||
|
uploaded: '已上传',
|
||||||
|
|
||||||
|
operating: '操作',
|
||||||
|
del: '删除',
|
||||||
|
download: '下载',
|
||||||
|
saveWarn: '请等待文件上传后,保存!',
|
||||||
|
saveError: '没有上传成功的文件,无法保存!',
|
||||||
|
|
||||||
|
preview: '预览',
|
||||||
|
choose: '选择文件',
|
||||||
|
|
||||||
|
accept: '支持{0}格式',
|
||||||
|
acceptUpload: '只能上传{0}格式文件',
|
||||||
|
maxSize: '单个文件不超过{0}MB',
|
||||||
|
maxSizeMultiple: '只能上传不超过{0}MB的文件!',
|
||||||
|
maxNumber: '最多只能上传{0}个文件',
|
||||||
|
|
||||||
|
legend: '图例',
|
||||||
|
fileName: '文件名',
|
||||||
|
fileSize: '文件大小',
|
||||||
|
fileStatue: '状态',
|
||||||
|
|
||||||
|
startUpload: '开始上传',
|
||||||
|
uploadSuccess: '上传成功',
|
||||||
|
uploadError: '上传失败',
|
||||||
|
uploading: '上传中',
|
||||||
|
uploadWait: '请等待文件上传结束后操作',
|
||||||
|
reUploadFailed: '重新上传失败文件',
|
||||||
|
};
|
9
src/locales/lang/zh_CN/component/verify.ts
Normal file
9
src/locales/lang/zh_CN/component/verify.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
export default {
|
||||||
|
error: '验证失败!',
|
||||||
|
time: '验证校验成功,耗时{time}秒!',
|
||||||
|
|
||||||
|
redoTip: '点击图片可刷新',
|
||||||
|
|
||||||
|
dragText: '请按住滑块拖动',
|
||||||
|
successText: '验证通过',
|
||||||
|
};
|
182
yarn.lock
182
yarn.lock
@ -292,6 +292,11 @@
|
|||||||
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz#b4af32ddd473c0bfa643bd7ff0728b8e71b81ea0"
|
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz#b4af32ddd473c0bfa643bd7ff0728b8e71b81ea0"
|
||||||
integrity sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==
|
integrity sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==
|
||||||
|
|
||||||
|
"@babel/parser@^7.12.7":
|
||||||
|
version "7.12.7"
|
||||||
|
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056"
|
||||||
|
integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==
|
||||||
|
|
||||||
"@babel/plugin-proposal-async-generator-functions@^7.12.1":
|
"@babel/plugin-proposal-async-generator-functions@^7.12.1":
|
||||||
version "7.12.1"
|
version "7.12.1"
|
||||||
resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e"
|
resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e"
|
||||||
@ -1136,10 +1141,10 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@iconify/iconify" ">=2.0.0-rc.1"
|
"@iconify/iconify" ">=2.0.0-rc.1"
|
||||||
|
|
||||||
"@rollup/plugin-commonjs@^15.1.0":
|
"@rollup/plugin-commonjs@^16.0.0":
|
||||||
version "15.1.0"
|
version "16.0.0"
|
||||||
resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-15.1.0.tgz#1e7d076c4f1b2abf7e65248570e555defc37c238"
|
resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-16.0.0.tgz#169004d56cd0f0a1d0f35915d31a036b0efe281f"
|
||||||
integrity sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ==
|
integrity sha512-LuNyypCP3msCGVQJ7ki8PqYdpjfEkE/xtFa5DqlF+7IBD0JsfMZ87C58heSwIMint58sAUZbt3ITqOmdQv/dXw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@rollup/pluginutils" "^3.1.0"
|
"@rollup/pluginutils" "^3.1.0"
|
||||||
commondir "^1.0.1"
|
commondir "^1.0.1"
|
||||||
@ -1156,6 +1161,18 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@rollup/pluginutils" "^3.0.8"
|
"@rollup/pluginutils" "^3.0.8"
|
||||||
|
|
||||||
|
"@rollup/plugin-node-resolve@^10.0.0":
|
||||||
|
version "10.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-10.0.0.tgz#44064a2b98df7530e66acf8941ff262fc9b4ead8"
|
||||||
|
integrity sha512-sNijGta8fqzwA1VwUEtTvWCx2E7qC70NMsDh4ZG13byAXYigBNZMxALhKUSycBks5gupJdq0lFrKumFrRZ8H3A==
|
||||||
|
dependencies:
|
||||||
|
"@rollup/pluginutils" "^3.1.0"
|
||||||
|
"@types/resolve" "1.17.1"
|
||||||
|
builtin-modules "^3.1.0"
|
||||||
|
deepmerge "^4.2.2"
|
||||||
|
is-module "^1.0.0"
|
||||||
|
resolve "^1.17.0"
|
||||||
|
|
||||||
"@rollup/plugin-node-resolve@^7.1.1":
|
"@rollup/plugin-node-resolve@^7.1.1":
|
||||||
version "7.1.3"
|
version "7.1.3"
|
||||||
resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca"
|
resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca"
|
||||||
@ -1209,7 +1226,7 @@
|
|||||||
estree-walker "^1.0.1"
|
estree-walker "^1.0.1"
|
||||||
picomatch "^2.2.2"
|
picomatch "^2.2.2"
|
||||||
|
|
||||||
"@rollup/pluginutils@^4.0.0":
|
"@rollup/pluginutils@^4.0.0", "@rollup/pluginutils@^4.1.0":
|
||||||
version "4.1.0"
|
version "4.1.0"
|
||||||
resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz#0dcc61c780e39257554feb7f77207dceca13c838"
|
resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz#0dcc61c780e39257554feb7f77207dceca13c838"
|
||||||
integrity sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==
|
integrity sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==
|
||||||
@ -1608,7 +1625,18 @@
|
|||||||
estree-walker "^2.0.1"
|
estree-walker "^2.0.1"
|
||||||
source-map "^0.6.1"
|
source-map "^0.6.1"
|
||||||
|
|
||||||
"@vue/compiler-dom@3.0.2", "@vue/compiler-dom@^3.0.2":
|
"@vue/compiler-core@3.0.3":
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.0.3.tgz#dbb4d5eb91f294038f0bed170a1c25f59f7dc74f"
|
||||||
|
integrity sha512-iWlRT8RYLmz7zkg84pTOriNUzjH7XACWN++ImFkskWXWeev29IKi7p76T9jKDaMZoPiGcUZ0k9wayuASWVxOwg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/parser" "^7.12.0"
|
||||||
|
"@babel/types" "^7.12.0"
|
||||||
|
"@vue/shared" "3.0.3"
|
||||||
|
estree-walker "^2.0.1"
|
||||||
|
source-map "^0.6.1"
|
||||||
|
|
||||||
|
"@vue/compiler-dom@3.0.2":
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.0.2.tgz#1d40de04bcdf9aabb79fb6a802dd70a2f3c2992a"
|
resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.0.2.tgz#1d40de04bcdf9aabb79fb6a802dd70a2f3c2992a"
|
||||||
integrity sha512-jvaL4QF2yXBJVD+JLbM2YA3e5fNfflJnfQ+GtfYk46ENGsEetqbkZqcX7fO+RHdG8tZBo7LCNBvgD0QLr+V4sg==
|
integrity sha512-jvaL4QF2yXBJVD+JLbM2YA3e5fNfflJnfQ+GtfYk46ENGsEetqbkZqcX7fO+RHdG8tZBo7LCNBvgD0QLr+V4sg==
|
||||||
@ -1616,7 +1644,15 @@
|
|||||||
"@vue/compiler-core" "3.0.2"
|
"@vue/compiler-core" "3.0.2"
|
||||||
"@vue/shared" "3.0.2"
|
"@vue/shared" "3.0.2"
|
||||||
|
|
||||||
"@vue/compiler-sfc@*", "@vue/compiler-sfc@^3.0.0-rc.5", "@vue/compiler-sfc@^3.0.2":
|
"@vue/compiler-dom@3.0.3", "@vue/compiler-dom@^3.0.3":
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.0.3.tgz#582ba30bc82da8409868bc1153ff0e0e2be617e5"
|
||||||
|
integrity sha512-6GdUbDPjsc0MDZGAgpi4lox+d+aW9/brscwBOLOFfy9wcI9b6yLPmBbjdIsJq3pYdJWbdvACdJ77avBBdHEP8A==
|
||||||
|
dependencies:
|
||||||
|
"@vue/compiler-core" "3.0.3"
|
||||||
|
"@vue/shared" "3.0.3"
|
||||||
|
|
||||||
|
"@vue/compiler-sfc@*", "@vue/compiler-sfc@^3.0.0-rc.5":
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.0.2.tgz#22c70fed72c347a4d5fa2db2e80594b3193dce57"
|
resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.0.2.tgz#22c70fed72c347a4d5fa2db2e80594b3193dce57"
|
||||||
integrity sha512-viYjT5ehDSLM3v0jQ9hbTs4I5e/7lSlYsDOp7TQ1qcwHRvzoTQMTkFpY/Iae+LFKM124Ld17tBfXgfrZl9dt+g==
|
integrity sha512-viYjT5ehDSLM3v0jQ9hbTs4I5e/7lSlYsDOp7TQ1qcwHRvzoTQMTkFpY/Iae+LFKM124Ld17tBfXgfrZl9dt+g==
|
||||||
@ -1638,6 +1674,28 @@
|
|||||||
postcss-selector-parser "^6.0.4"
|
postcss-selector-parser "^6.0.4"
|
||||||
source-map "^0.6.1"
|
source-map "^0.6.1"
|
||||||
|
|
||||||
|
"@vue/compiler-sfc@^3.0.3":
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.0.3.tgz#7fad9d40e139dd717713c0db701e1eb776f8349f"
|
||||||
|
integrity sha512-YocHSirye85kRVC4lU0+SE6uhrwGJzbhwkrqG4g6kmsAUopZ0qUjbICMlej5bYx2+AUz9yBIM7hpK8nIKFVFjg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/parser" "^7.12.0"
|
||||||
|
"@babel/types" "^7.12.0"
|
||||||
|
"@vue/compiler-core" "3.0.3"
|
||||||
|
"@vue/compiler-dom" "3.0.3"
|
||||||
|
"@vue/compiler-ssr" "3.0.3"
|
||||||
|
"@vue/shared" "3.0.3"
|
||||||
|
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 "^7.0.32"
|
||||||
|
postcss-modules "^3.2.2"
|
||||||
|
postcss-selector-parser "^6.0.4"
|
||||||
|
source-map "^0.6.1"
|
||||||
|
|
||||||
"@vue/compiler-ssr@3.0.2":
|
"@vue/compiler-ssr@3.0.2":
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.0.2.tgz#73af4d274a79bfcc72a996a9b45f1072e7deaa26"
|
resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.0.2.tgz#73af4d274a79bfcc72a996a9b45f1072e7deaa26"
|
||||||
@ -1646,6 +1704,14 @@
|
|||||||
"@vue/compiler-dom" "3.0.2"
|
"@vue/compiler-dom" "3.0.2"
|
||||||
"@vue/shared" "3.0.2"
|
"@vue/shared" "3.0.2"
|
||||||
|
|
||||||
|
"@vue/compiler-ssr@3.0.3":
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.0.3.tgz#7d9e5c1b8c71d69865ac6c48d2e6eb2eecb68501"
|
||||||
|
integrity sha512-IjJMoHCiDk939Ix7Q5wrex59TVJr6JFQ95gf36f4G4UrVau0GGY/3HudnWT/6eyWJ7267+odqQs1uCZgDfL/Ww==
|
||||||
|
dependencies:
|
||||||
|
"@vue/compiler-dom" "3.0.3"
|
||||||
|
"@vue/shared" "3.0.3"
|
||||||
|
|
||||||
"@vue/reactivity@3.0.2":
|
"@vue/reactivity@3.0.2":
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.0.2.tgz#42ed5af6025b494a5e69b05169fcddf04eebfe77"
|
resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.0.2.tgz#42ed5af6025b494a5e69b05169fcddf04eebfe77"
|
||||||
@ -1653,6 +1719,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@vue/shared" "3.0.2"
|
"@vue/shared" "3.0.2"
|
||||||
|
|
||||||
|
"@vue/reactivity@3.0.3":
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.0.3.tgz#681ee01ceff9219bc4da6bbb7d9c97d452e44d1d"
|
||||||
|
integrity sha512-t39Qmc42MX7wJtf8L6tHlu17eP9Rc5w4aRnxpLHNWoaRxddv/7FBhWqusJ2Bwkk8ixFHOQeejcLMt5G469WYJw==
|
||||||
|
dependencies:
|
||||||
|
"@vue/shared" "3.0.3"
|
||||||
|
|
||||||
"@vue/runtime-core@3.0.2":
|
"@vue/runtime-core@3.0.2":
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.0.2.tgz#d7ed462af1cb0bf9836668e4e6fab3f2f4b1bc00"
|
resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.0.2.tgz#d7ed462af1cb0bf9836668e4e6fab3f2f4b1bc00"
|
||||||
@ -1661,7 +1734,24 @@
|
|||||||
"@vue/reactivity" "3.0.2"
|
"@vue/reactivity" "3.0.2"
|
||||||
"@vue/shared" "3.0.2"
|
"@vue/shared" "3.0.2"
|
||||||
|
|
||||||
"@vue/runtime-dom@3.0.2", "@vue/runtime-dom@^3.0.0":
|
"@vue/runtime-core@3.0.3":
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.0.3.tgz#edab3c9ad122cf8afd034b174cd20c073fbf950a"
|
||||||
|
integrity sha512-Fd1JVnYI6at0W/2ERwJuTSq4S22gNt8bKEbICcvCAac7hJUZ1rylThlrhsvrgA+DVkWU01r0niNZQ4UddlNw7g==
|
||||||
|
dependencies:
|
||||||
|
"@vue/reactivity" "3.0.3"
|
||||||
|
"@vue/shared" "3.0.3"
|
||||||
|
|
||||||
|
"@vue/runtime-dom@3.0.3":
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.0.3.tgz#5e3e5e5418b9defcac988d2be0cf65596fa2cc03"
|
||||||
|
integrity sha512-ytTvSlRaEYvLQUkkpruIBizWIwuIeHER0Ch/evO6kUaPLjZjX3NerVxA40cqJx8rRjb9keQso21U2Jcpk8GsTg==
|
||||||
|
dependencies:
|
||||||
|
"@vue/runtime-core" "3.0.3"
|
||||||
|
"@vue/shared" "3.0.3"
|
||||||
|
csstype "^2.6.8"
|
||||||
|
|
||||||
|
"@vue/runtime-dom@^3.0.0":
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.0.2.tgz#9d166d03225558025d3d80f5039b646e0051b71c"
|
resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.0.2.tgz#9d166d03225558025d3d80f5039b646e0051b71c"
|
||||||
integrity sha512-vqC1KK1yWthTw1FKzajT0gYQaEqAq7bpeeXQC473nllGC5YHbJhNAJLSmrDun1tjXqGF0UNCWYljYm+++BJv6w==
|
integrity sha512-vqC1KK1yWthTw1FKzajT0gYQaEqAq7bpeeXQC473nllGC5YHbJhNAJLSmrDun1tjXqGF0UNCWYljYm+++BJv6w==
|
||||||
@ -1675,6 +1765,11 @@
|
|||||||
resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.0.2.tgz#419bd85a2ebdbd4f42963e98c5a1b103452176d9"
|
resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.0.2.tgz#419bd85a2ebdbd4f42963e98c5a1b103452176d9"
|
||||||
integrity sha512-Zx869zlNoujFOclKIoYmkh8ES2RcS/+Jn546yOiPyZ+3+Ejivnr+fb8l+DdXUEFjo+iVDNR3KyLzg03aBFfZ4Q==
|
integrity sha512-Zx869zlNoujFOclKIoYmkh8ES2RcS/+Jn546yOiPyZ+3+Ejivnr+fb8l+DdXUEFjo+iVDNR3KyLzg03aBFfZ4Q==
|
||||||
|
|
||||||
|
"@vue/shared@3.0.3":
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.0.3.tgz#ef12ebff93a446df281e8a0fd765b5aea8e7745b"
|
||||||
|
integrity sha512-yGgkF7u4W0Dmwri9XdeY50kOowN4UIX7aBQ///jbxx37itpzVjK7QzvD3ltQtPfWaJDGBfssGL0wpAgwX9OJpQ==
|
||||||
|
|
||||||
"@vuedx/analyze@0.2.4-0":
|
"@vuedx/analyze@0.2.4-0":
|
||||||
version "0.2.4-0"
|
version "0.2.4-0"
|
||||||
resolved "https://registry.npmjs.org/@vuedx/analyze/-/analyze-0.2.4-0.tgz#52766a6dcd2867320409fe517540fd0bf0394d48"
|
resolved "https://registry.npmjs.org/@vuedx/analyze/-/analyze-0.2.4-0.tgz#52766a6dcd2867320409fe517540fd0bf0394d48"
|
||||||
@ -2213,6 +2308,11 @@ bytes@3.1.0:
|
|||||||
resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
|
resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
|
||||||
integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
|
integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
|
||||||
|
|
||||||
|
cac@^6.6.1:
|
||||||
|
version "6.6.1"
|
||||||
|
resolved "https://registry.npmjs.org/cac/-/cac-6.6.1.tgz#3dde3f6943f45d42a56729ea3573c08b3e7b6a6d"
|
||||||
|
integrity sha512-uhki4T3Ax68hw7Dufi0bATVAF8ayBSwOKUEJHjObPrUN4tlQ8Lf7oljpTje/mArLxYN0D743c2zJt4C1bVTCqg==
|
||||||
|
|
||||||
cache-base@^1.0.1:
|
cache-base@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
|
resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
|
||||||
@ -3012,6 +3112,13 @@ debug@^4.3.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms "2.1.2"
|
ms "2.1.2"
|
||||||
|
|
||||||
|
debug@^4.3.1:
|
||||||
|
version "4.3.1"
|
||||||
|
resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
|
||||||
|
integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
|
||||||
|
dependencies:
|
||||||
|
ms "2.1.2"
|
||||||
|
|
||||||
debug@~3.1.0:
|
debug@~3.1.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
||||||
@ -3344,11 +3451,16 @@ esbuild-register@^1.1.0:
|
|||||||
source-map-support "^0.5.19"
|
source-map-support "^0.5.19"
|
||||||
strip-json-comments "^3.1.1"
|
strip-json-comments "^3.1.1"
|
||||||
|
|
||||||
esbuild@^0.7.17, esbuild@^0.7.19, esbuild@^0.7.21:
|
esbuild@^0.7.17, esbuild@^0.7.19:
|
||||||
version "0.7.22"
|
version "0.7.22"
|
||||||
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.7.22.tgz#9149b903f8128b7c45a754046c24199d76bbe08e"
|
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.7.22.tgz#9149b903f8128b7c45a754046c24199d76bbe08e"
|
||||||
integrity sha512-B43SYg8LGWYTCv9Gs0RnuLNwjzpuWOoCaZHTWEDEf5AfrnuDMerPVMdCEu7xOdhFvQ+UqfP2MGU9lxEy0JzccA==
|
integrity sha512-B43SYg8LGWYTCv9Gs0RnuLNwjzpuWOoCaZHTWEDEf5AfrnuDMerPVMdCEu7xOdhFvQ+UqfP2MGU9lxEy0JzccA==
|
||||||
|
|
||||||
|
esbuild@^0.8.12:
|
||||||
|
version "0.8.15"
|
||||||
|
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.8.15.tgz#cbc4d82a7fc4571d455233456e6fba83fd0364f1"
|
||||||
|
integrity sha512-mSaLo9t/oYtQE6FRUEdO47Pr8PisSPzHtgr+LcihIcjBEhbYwjT6WLCQ7noDoTBfIatBCw229rtmIwl9u9UQwg==
|
||||||
|
|
||||||
escalade@^3.1.1:
|
escalade@^3.1.1:
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
|
resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
|
||||||
@ -6871,10 +6983,10 @@ rollup-plugin-visualizer@^4.1.2:
|
|||||||
source-map "^0.7.3"
|
source-map "^0.7.3"
|
||||||
yargs "^16.0.3"
|
yargs "^16.0.3"
|
||||||
|
|
||||||
rollup-plugin-vue@^6.0.0-beta.10:
|
rollup-plugin-vue@^6.0.0:
|
||||||
version "6.0.0-beta.11"
|
version "6.0.0"
|
||||||
resolved "https://registry.npmjs.org/rollup-plugin-vue/-/rollup-plugin-vue-6.0.0-beta.11.tgz#fdbc6b7484a361ef8c5e8009cef4a6bd45435013"
|
resolved "https://registry.npmjs.org/rollup-plugin-vue/-/rollup-plugin-vue-6.0.0.tgz#e379e93e5ae9a8648522f698be2e452e8672aaf2"
|
||||||
integrity sha512-osqLkFc7N76TOI0CeW0BOujlMFsMIoytyTRVUivaeYSMponNfk1iSuqyoeciUB3EjFqyL/dTTFPi+7rhaAm73w==
|
integrity sha512-oVvUd84d5u73M2HYM3XsMDLtZRIA/tw2U0dmHlXU2UWP5JARYHzh/U9vcxaN/x/9MrepY7VH3pHFeOhrWpxs/Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
debug "^4.1.1"
|
debug "^4.1.1"
|
||||||
hash-sum "^2.0.0"
|
hash-sum "^2.0.0"
|
||||||
@ -8104,30 +8216,31 @@ vite-plugin-pwa@^0.1.5:
|
|||||||
fast-glob "^3.2.4"
|
fast-glob "^3.2.4"
|
||||||
rollup-plugin-workbox "^5.2.1"
|
rollup-plugin-workbox "^5.2.1"
|
||||||
|
|
||||||
vite@^1.0.0-rc.9:
|
vite@^1.0.0-rc.10:
|
||||||
version "1.0.0-rc.9"
|
version "1.0.0-rc.10"
|
||||||
resolved "https://registry.npmjs.org/vite/-/vite-1.0.0-rc.9.tgz#63621a39cf36fe9a6dccafdb11360a5ebbdb2663"
|
resolved "https://registry.npmjs.org/vite/-/vite-1.0.0-rc.10.tgz#d8d139dc640fa073e4a1b8abdb037a131fa364cc"
|
||||||
integrity sha512-u0PT2sKMes2RtE5rZsLY0nFm6kEmce7IhVRWKFXmrsjn0MBOCNEi+S6iNnJDmsj1nzvU2dMZ5MHhFyXIqTgjzA==
|
integrity sha512-Kh2lq2zpsbyYRlI/uXHEyEMLzOSBXmza23k69LB6imIeH8HddvSoi+AqOTbSK/CQhfw3lvoPgb3h+tIbK5zymg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/parser" "^7.12.3"
|
"@babel/parser" "^7.12.7"
|
||||||
"@koa/cors" "^3.1.0"
|
"@koa/cors" "^3.1.0"
|
||||||
"@rollup/plugin-commonjs" "^15.1.0"
|
"@rollup/plugin-commonjs" "^16.0.0"
|
||||||
"@rollup/plugin-json" "^4.1.0"
|
"@rollup/plugin-json" "^4.1.0"
|
||||||
"@rollup/plugin-node-resolve" "^9.0.0"
|
"@rollup/plugin-node-resolve" "^10.0.0"
|
||||||
"@rollup/pluginutils" "^4.0.0"
|
"@rollup/pluginutils" "^4.1.0"
|
||||||
"@types/koa" "^2.11.4"
|
"@types/koa" "^2.11.4"
|
||||||
"@types/lru-cache" "^5.1.0"
|
"@types/lru-cache" "^5.1.0"
|
||||||
"@vue/compiler-dom" "^3.0.2"
|
"@vue/compiler-dom" "^3.0.3"
|
||||||
"@vue/compiler-sfc" "^3.0.2"
|
"@vue/compiler-sfc" "^3.0.3"
|
||||||
brotli-size "^4.0.0"
|
brotli-size "^4.0.0"
|
||||||
|
cac "^6.6.1"
|
||||||
chalk "^4.1.0"
|
chalk "^4.1.0"
|
||||||
chokidar "^3.4.2"
|
chokidar "^3.4.2"
|
||||||
clean-css "^4.2.3"
|
clean-css "^4.2.3"
|
||||||
debug "^4.1.1"
|
debug "^4.3.1"
|
||||||
dotenv "^8.2.0"
|
dotenv "^8.2.0"
|
||||||
dotenv-expand "^5.1.0"
|
dotenv-expand "^5.1.0"
|
||||||
es-module-lexer "^0.3.25"
|
es-module-lexer "^0.3.25"
|
||||||
esbuild "^0.7.21"
|
esbuild "^0.8.12"
|
||||||
etag "^1.8.1"
|
etag "^1.8.1"
|
||||||
execa "^4.0.3"
|
execa "^4.0.3"
|
||||||
fs-extra "^9.0.1"
|
fs-extra "^9.0.1"
|
||||||
@ -8155,11 +8268,12 @@ vite@^1.0.0-rc.9:
|
|||||||
rollup "^2.32.1"
|
rollup "^2.32.1"
|
||||||
rollup-plugin-dynamic-import-variables "^1.1.0"
|
rollup-plugin-dynamic-import-variables "^1.1.0"
|
||||||
rollup-plugin-terser "^7.0.2"
|
rollup-plugin-terser "^7.0.2"
|
||||||
rollup-plugin-vue "^6.0.0-beta.10"
|
rollup-plugin-vue "^6.0.0"
|
||||||
rollup-plugin-web-worker-loader "^1.3.1"
|
rollup-plugin-web-worker-loader "^1.3.1"
|
||||||
selfsigned "^1.10.8"
|
selfsigned "^1.10.8"
|
||||||
slash "^3.0.0"
|
slash "^3.0.0"
|
||||||
vue "^3.0.2"
|
source-map "^0.7.3"
|
||||||
|
vue "^3.0.3"
|
||||||
ws "^7.3.1"
|
ws "^7.3.1"
|
||||||
|
|
||||||
vscode-languageserver-textdocument@^1.0.1:
|
vscode-languageserver-textdocument@^1.0.1:
|
||||||
@ -8203,14 +8317,14 @@ vue-types@^3.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
is-plain-object "3.0.1"
|
is-plain-object "3.0.1"
|
||||||
|
|
||||||
vue@^3.0.2:
|
vue@^3.0.3:
|
||||||
version "3.0.2"
|
version "3.0.3"
|
||||||
resolved "https://registry.npmjs.org/vue/-/vue-3.0.2.tgz#9d5b7b2983f35e64a34d13c7c9d6831239feca3c"
|
resolved "https://registry.npmjs.org/vue/-/vue-3.0.3.tgz#ad94a475e6ebbf3904673b6a0ae46e47b957bd72"
|
||||||
integrity sha512-ciKFjutKRs+2Vbvgrist1oDd5wZQqtOel/K//ku54zLbf8tcTV+XbyAfanTHcTkML9CUj09vnC+y+5uaOz2/9g==
|
integrity sha512-BZG5meD5vLWdvfnRL5WqfDy+cnXO1X/SweModGUna78bdFPZW6+ZO1tU9p0acrskX3DKFcfSp2s4SZnMjABx6w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@vue/compiler-dom" "3.0.2"
|
"@vue/compiler-dom" "3.0.3"
|
||||||
"@vue/runtime-dom" "3.0.2"
|
"@vue/runtime-dom" "3.0.3"
|
||||||
"@vue/shared" "3.0.2"
|
"@vue/shared" "3.0.3"
|
||||||
|
|
||||||
vuex-module-decorators@^1.0.1:
|
vuex-module-decorators@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
|
Loading…
Reference in New Issue
Block a user