diff --git a/package.json b/package.json
index 20ba8d10..b5cefd87 100644
--- a/package.json
+++ b/package.json
@@ -40,13 +40,16 @@
]
},
"dependencies": {
+ "@types/lodash": "^4.14.195",
"@vitejs/plugin-vue": "^4.2.3",
"@vueuse/core": "^10.1.2",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "5.1.10",
"axios": "^1.4.0",
+ "codemirror": "^5.65.13",
"echarts": "^5.2.2",
"element-plus": "^2.3.4",
+ "lodash-es": "^4.17.21",
"nprogress": "^0.2.0",
"path-browserify": "^1.0.1",
"path-to-regexp": "^6.2.0",
@@ -60,6 +63,7 @@
"@commitlint/cli": "^17.6.3",
"@commitlint/config-conventional": "^17.6.3",
"@iconify-json/ep": "^1.1.10",
+ "@types/codemirror": "^5.60.7",
"@types/nprogress": "^0.2.0",
"@types/path-browserify": "^1.0.0",
"@typescript-eslint/eslint-plugin": "^5.59.6",
@@ -98,4 +102,4 @@
"repository": "https://gitee.com/youlaiorg/vue3-element-admin.git",
"author": "有来开源组织",
"license": "MIT"
-}
+}
\ No newline at end of file
diff --git a/src/components/TagInput/index.vue b/src/components/TagInput/index.vue
new file mode 100644
index 00000000..0863728b
--- /dev/null
+++ b/src/components/TagInput/index.vue
@@ -0,0 +1,493 @@
+
+
+
+
+
+
diff --git a/src/components/TagInput/util.ts b/src/components/TagInput/util.ts
new file mode 100644
index 00000000..3328db75
--- /dev/null
+++ b/src/components/TagInput/util.ts
@@ -0,0 +1,34 @@
+/**
+ * getRePosFromStr 正则匹配字段返回位置信息
+ * */
+export function getRePosFromStr(text: any = '', re: any = /\$.+?\$/g) {
+ const lines = text.split('\n')
+ const positions: any = []
+ let m
+ for (let i = 0; i < lines.length; i++) {
+ const l = lines[i]
+ while ((m = re.exec(l)) !== null) {
+ var tag = m[0].substring(1, m[0].length - 1)
+ positions.push({
+ line: i,
+ start: m.index,
+ stop: m.index + m[0].length,
+ tag,
+ })
+ }
+ }
+ return positions
+}
+/**
+ * 输入框模式
+ */
+export enum MODE {
+ // 文本
+ TEXT = 1,
+ // 公式
+ FORMULA,
+ // 只允许选择tag
+ ONLYTAG,
+ // 日期
+ DATE
+}
\ No newline at end of file
diff --git a/src/types/auto-imports.d.ts b/src/types/auto-imports.d.ts
index eb6c8426..32fa93bb 100644
--- a/src/types/auto-imports.d.ts
+++ b/src/types/auto-imports.d.ts
@@ -1,11 +1,12 @@
-// Generated by 'unplugin-auto-import'
+/* eslint-disable */
+/* prettier-ignore */
+// @ts-nocheck
+// Generated by unplugin-auto-import
export {}
declare global {
const EffectScope: typeof import('vue')['EffectScope']
- const ElForm: typeof import('element-plus/es')['ElForm']
const ElMessage: typeof import('element-plus/es')['ElMessage']
const ElMessageBox: typeof import('element-plus/es')['ElMessageBox']
- const ElTree: typeof import('element-plus/es')['ElTree']
const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
const autoResetRef: typeof import('@vueuse/core')['autoResetRef']
const computed: typeof import('vue')['computed']
@@ -76,7 +77,6 @@ declare global {
const refThrottled: typeof import('@vueuse/core')['refThrottled']
const refWithControl: typeof import('@vueuse/core')['refWithControl']
const resolveComponent: typeof import('vue')['resolveComponent']
- const resolveDirective: typeof import('vue')['resolveDirective']
const resolveRef: typeof import('@vueuse/core')['resolveRef']
const resolveUnref: typeof import('@vueuse/core')['resolveUnref']
const shallowReactive: typeof import('vue')['shallowReactive']
@@ -91,6 +91,7 @@ declare global {
const toReactive: typeof import('@vueuse/core')['toReactive']
const toRef: typeof import('vue')['toRef']
const toRefs: typeof import('vue')['toRefs']
+ const toValue: typeof import('vue')['toValue']
const triggerRef: typeof import('vue')['triggerRef']
const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount']
const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount']
@@ -267,15 +268,18 @@ declare global {
const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter']
const whenever: typeof import('@vueuse/core')['whenever']
}
+// for type re-export
+declare global {
+ // @ts-ignore
+ export type { Component, ComponentPublicInstance, ComputedRef, InjectionKey, PropType, Ref, VNode } from 'vue'
+}
// for vue template auto import
import { UnwrapRef } from 'vue'
declare module 'vue' {
interface ComponentCustomProperties {
readonly EffectScope: UnwrapRef
- readonly ElForm: UnwrapRef
readonly ElMessage: UnwrapRef
readonly ElMessageBox: UnwrapRef
- readonly ElTree: UnwrapRef
readonly asyncComputed: UnwrapRef
readonly autoResetRef: UnwrapRef
readonly computed: UnwrapRef
@@ -346,7 +350,6 @@ declare module 'vue' {
readonly refThrottled: UnwrapRef
readonly refWithControl: UnwrapRef
readonly resolveComponent: UnwrapRef
- readonly resolveDirective: UnwrapRef
readonly resolveRef: UnwrapRef
readonly resolveUnref: UnwrapRef
readonly shallowReactive: UnwrapRef
@@ -361,6 +364,274 @@ declare module 'vue' {
readonly toReactive: UnwrapRef
readonly toRef: UnwrapRef
readonly toRefs: UnwrapRef
+ readonly toValue: UnwrapRef
+ readonly triggerRef: UnwrapRef
+ readonly tryOnBeforeMount: UnwrapRef
+ readonly tryOnBeforeUnmount: UnwrapRef
+ readonly tryOnMounted: UnwrapRef
+ readonly tryOnScopeDispose: UnwrapRef
+ readonly tryOnUnmounted: UnwrapRef
+ readonly unref: UnwrapRef
+ readonly unrefElement: UnwrapRef
+ readonly until: UnwrapRef
+ readonly useActiveElement: UnwrapRef
+ readonly useArrayEvery: UnwrapRef
+ readonly useArrayFilter: UnwrapRef
+ readonly useArrayFind: UnwrapRef
+ readonly useArrayFindIndex: UnwrapRef
+ readonly useArrayFindLast: UnwrapRef
+ readonly useArrayJoin: UnwrapRef
+ readonly useArrayMap: UnwrapRef
+ readonly useArrayReduce: UnwrapRef
+ readonly useArraySome: UnwrapRef
+ readonly useArrayUnique: UnwrapRef
+ readonly useAsyncQueue: UnwrapRef
+ readonly useAsyncState: UnwrapRef
+ readonly useAttrs: UnwrapRef
+ readonly useBase64: UnwrapRef
+ readonly useBattery: UnwrapRef
+ readonly useBluetooth: UnwrapRef
+ readonly useBreakpoints: UnwrapRef
+ readonly useBroadcastChannel: UnwrapRef
+ readonly useBrowserLocation: UnwrapRef
+ readonly useCached: UnwrapRef
+ readonly useClipboard: UnwrapRef
+ readonly useCloned: UnwrapRef
+ readonly useColorMode: UnwrapRef
+ readonly useConfirmDialog: UnwrapRef
+ readonly useCounter: UnwrapRef
+ readonly useCssModule: UnwrapRef
+ readonly useCssVar: UnwrapRef
+ readonly useCssVars: UnwrapRef
+ readonly useCurrentElement: UnwrapRef
+ readonly useCycleList: UnwrapRef
+ readonly useDark: UnwrapRef
+ readonly useDateFormat: UnwrapRef
+ readonly useDebounce: UnwrapRef
+ readonly useDebounceFn: UnwrapRef
+ readonly useDebouncedRefHistory: UnwrapRef
+ readonly useDeviceMotion: UnwrapRef
+ readonly useDeviceOrientation: UnwrapRef
+ readonly useDevicePixelRatio: UnwrapRef
+ readonly useDevicesList: UnwrapRef
+ readonly useDisplayMedia: UnwrapRef
+ readonly useDocumentVisibility: UnwrapRef
+ readonly useDraggable: UnwrapRef
+ readonly useDropZone: UnwrapRef
+ readonly useElementBounding: UnwrapRef
+ readonly useElementByPoint: UnwrapRef
+ readonly useElementHover: UnwrapRef
+ readonly useElementSize: UnwrapRef
+ readonly useElementVisibility: UnwrapRef
+ readonly useEventBus: UnwrapRef
+ readonly useEventListener: UnwrapRef
+ readonly useEventSource: UnwrapRef
+ readonly useEyeDropper: UnwrapRef
+ readonly useFavicon: UnwrapRef
+ readonly useFetch: UnwrapRef
+ readonly useFileDialog: UnwrapRef
+ readonly useFileSystemAccess: UnwrapRef
+ readonly useFocus: UnwrapRef
+ readonly useFocusWithin: UnwrapRef
+ readonly useFps: UnwrapRef
+ readonly useFullscreen: UnwrapRef
+ readonly useGamepad: UnwrapRef
+ readonly useGeolocation: UnwrapRef
+ readonly useIdle: UnwrapRef
+ readonly useImage: UnwrapRef
+ readonly useInfiniteScroll: UnwrapRef
+ readonly useIntersectionObserver: UnwrapRef
+ readonly useInterval: UnwrapRef
+ readonly useIntervalFn: UnwrapRef
+ readonly useKeyModifier: UnwrapRef
+ readonly useLastChanged: UnwrapRef
+ readonly useLocalStorage: UnwrapRef
+ readonly useMagicKeys: UnwrapRef
+ readonly useManualRefHistory: UnwrapRef
+ readonly useMediaControls: UnwrapRef
+ readonly useMediaQuery: UnwrapRef
+ readonly useMemoize: UnwrapRef
+ readonly useMemory: UnwrapRef
+ readonly useMounted: UnwrapRef
+ readonly useMouse: UnwrapRef
+ readonly useMouseInElement: UnwrapRef
+ readonly useMousePressed: UnwrapRef
+ readonly useMutationObserver: UnwrapRef
+ readonly useNavigatorLanguage: UnwrapRef
+ readonly useNetwork: UnwrapRef
+ readonly useNow: UnwrapRef
+ readonly useObjectUrl: UnwrapRef
+ readonly useOffsetPagination: UnwrapRef
+ readonly useOnline: UnwrapRef
+ readonly usePageLeave: UnwrapRef
+ readonly useParallax: UnwrapRef
+ readonly usePermission: UnwrapRef
+ readonly usePointer: UnwrapRef
+ readonly usePointerLock: UnwrapRef
+ readonly usePointerSwipe: UnwrapRef
+ readonly usePreferredColorScheme: UnwrapRef
+ readonly usePreferredContrast: UnwrapRef
+ readonly usePreferredDark: UnwrapRef
+ readonly usePreferredLanguages: UnwrapRef
+ readonly usePreferredReducedMotion: UnwrapRef
+ readonly usePrevious: UnwrapRef
+ readonly useRafFn: UnwrapRef
+ readonly useRefHistory: UnwrapRef
+ readonly useResizeObserver: UnwrapRef
+ readonly useScreenOrientation: UnwrapRef
+ readonly useScreenSafeArea: UnwrapRef
+ readonly useScriptTag: UnwrapRef
+ readonly useScroll: UnwrapRef
+ readonly useScrollLock: UnwrapRef
+ readonly useSessionStorage: UnwrapRef
+ readonly useShare: UnwrapRef
+ readonly useSlots: UnwrapRef
+ readonly useSorted: UnwrapRef
+ readonly useSpeechRecognition: UnwrapRef
+ readonly useSpeechSynthesis: UnwrapRef
+ readonly useStepper: UnwrapRef
+ readonly useStorage: UnwrapRef
+ readonly useStorageAsync: UnwrapRef
+ readonly useStyleTag: UnwrapRef
+ readonly useSupported: UnwrapRef
+ readonly useSwipe: UnwrapRef
+ readonly useTemplateRefsList: UnwrapRef
+ readonly useTextDirection: UnwrapRef
+ readonly useTextSelection: UnwrapRef
+ readonly useTextareaAutosize: UnwrapRef
+ readonly useThrottle: UnwrapRef
+ readonly useThrottleFn: UnwrapRef
+ readonly useThrottledRefHistory: UnwrapRef
+ readonly useTimeAgo: UnwrapRef
+ readonly useTimeout: UnwrapRef
+ readonly useTimeoutFn: UnwrapRef
+ readonly useTimeoutPoll: UnwrapRef
+ readonly useTimestamp: UnwrapRef
+ readonly useTitle: UnwrapRef
+ readonly useToNumber: UnwrapRef
+ readonly useToString: UnwrapRef
+ readonly useToggle: UnwrapRef
+ readonly useTransition: UnwrapRef
+ readonly useUrlSearchParams: UnwrapRef
+ readonly useUserMedia: UnwrapRef
+ readonly useVModel: UnwrapRef
+ readonly useVModels: UnwrapRef
+ readonly useVibrate: UnwrapRef
+ readonly useVirtualList: UnwrapRef
+ readonly useWakeLock: UnwrapRef
+ readonly useWebNotification: UnwrapRef
+ readonly useWebSocket: UnwrapRef
+ readonly useWebWorker: UnwrapRef
+ readonly useWebWorkerFn: UnwrapRef
+ readonly useWindowFocus: UnwrapRef
+ readonly useWindowScroll: UnwrapRef
+ readonly useWindowSize: UnwrapRef
+ readonly watch: UnwrapRef
+ readonly watchArray: UnwrapRef
+ readonly watchAtMost: UnwrapRef
+ readonly watchDebounced: UnwrapRef
+ readonly watchEffect: UnwrapRef
+ readonly watchIgnorable: UnwrapRef
+ readonly watchOnce: UnwrapRef
+ readonly watchPausable: UnwrapRef
+ readonly watchPostEffect: UnwrapRef
+ readonly watchSyncEffect: UnwrapRef
+ readonly watchThrottled: UnwrapRef
+ readonly watchTriggerable: UnwrapRef
+ readonly watchWithFilter: UnwrapRef
+ readonly whenever: UnwrapRef
+ }
+}
+declare module '@vue/runtime-core' {
+ interface ComponentCustomProperties {
+ readonly EffectScope: UnwrapRef
+ readonly ElMessage: UnwrapRef
+ readonly ElMessageBox: UnwrapRef
+ readonly asyncComputed: UnwrapRef
+ readonly autoResetRef: UnwrapRef
+ readonly computed: UnwrapRef
+ readonly computedAsync: UnwrapRef
+ readonly computedEager: UnwrapRef
+ readonly computedInject: UnwrapRef
+ readonly computedWithControl: UnwrapRef
+ readonly controlledComputed: UnwrapRef
+ readonly controlledRef: UnwrapRef
+ readonly createApp: UnwrapRef
+ readonly createEventHook: UnwrapRef
+ readonly createGlobalState: UnwrapRef
+ readonly createInjectionState: UnwrapRef
+ readonly createReactiveFn: UnwrapRef
+ readonly createSharedComposable: UnwrapRef
+ readonly createUnrefFn: UnwrapRef
+ readonly customRef: UnwrapRef
+ readonly debouncedRef: UnwrapRef
+ readonly debouncedWatch: UnwrapRef
+ readonly defineAsyncComponent: UnwrapRef
+ readonly defineComponent: UnwrapRef
+ readonly eagerComputed: UnwrapRef
+ readonly effectScope: UnwrapRef
+ readonly extendRef: UnwrapRef
+ readonly getCurrentInstance: UnwrapRef
+ readonly getCurrentScope: UnwrapRef
+ readonly h: UnwrapRef
+ readonly ignorableWatch: UnwrapRef
+ readonly inject: UnwrapRef
+ readonly isDefined: UnwrapRef
+ readonly isProxy: UnwrapRef
+ readonly isReactive: UnwrapRef
+ readonly isReadonly: UnwrapRef
+ readonly isRef: UnwrapRef
+ readonly makeDestructurable: UnwrapRef
+ readonly markRaw: UnwrapRef
+ readonly nextTick: UnwrapRef
+ readonly onActivated: UnwrapRef
+ readonly onBeforeMount: UnwrapRef
+ readonly onBeforeUnmount: UnwrapRef
+ readonly onBeforeUpdate: UnwrapRef
+ readonly onClickOutside: UnwrapRef
+ readonly onDeactivated: UnwrapRef
+ readonly onErrorCaptured: UnwrapRef
+ readonly onKeyStroke: UnwrapRef
+ readonly onLongPress: UnwrapRef
+ readonly onMounted: UnwrapRef
+ readonly onRenderTracked: UnwrapRef
+ readonly onRenderTriggered: UnwrapRef
+ readonly onScopeDispose: UnwrapRef
+ readonly onServerPrefetch: UnwrapRef
+ readonly onStartTyping: UnwrapRef
+ readonly onUnmounted: UnwrapRef
+ readonly onUpdated: UnwrapRef
+ readonly pausableWatch: UnwrapRef
+ readonly provide: UnwrapRef
+ readonly reactify: UnwrapRef
+ readonly reactifyObject: UnwrapRef