feat: IAgree

This commit is contained in:
kailong321200875
2024-02-29 15:05:05 +08:00
parent ab25622b66
commit abb69064df
13 changed files with 200 additions and 12 deletions

View File

@@ -0,0 +1,4 @@
import IAgree from './src/IAgree.vue'
export type { LinkItem, IAgreeProps } from './src/types'
export { IAgree }

View File

@@ -0,0 +1,41 @@
<script lang="ts" setup>
import { ElCheckbox } from 'element-plus'
import { Highlight } from '@/components/Highlight'
import { PropType, computed } from 'vue'
import { LinkItem } from './types'
const props = defineProps({
text: {
type: String,
default: ''
},
link: {
type: Array as PropType<LinkItem[]>,
default: undefined
}
})
const modelValue = defineModel<boolean>()
const highlightKeys = computed(() => {
return props.link?.map((item) => item.text) || []
})
const keyClick = (key: string) => {
const linkItem = props.link?.find((item) => item.text === key)
if (linkItem?.url) {
window.open(linkItem.url)
return
}
if (linkItem?.onClick) {
linkItem.onClick()
}
}
</script>
<template>
<div class="flex items-center">
<ElCheckbox v-model="modelValue" class="mr-0px!" />
<Highlight class="ml-10px" :keys="highlightKeys" @click="keyClick">{{ text }}</Highlight>
</div>
</template>

View File

@@ -0,0 +1,10 @@
export interface LinkItem {
text: string
url?: string
onClick?: () => void
}
export interface IAgreeProps {
text: string
link: LinkItem[]
}