|
|
@@ -1,243 +1,243 @@
|
|
|
-import { PropType, defineComponent, ref } from 'vue'
|
|
|
-import { LoadingOutlined, ReloadOutlined, CopyTwoTone, EditOutlined } from '@ant-design/icons-vue'
|
|
|
-import { useCopy } from '@/hooks/dom'
|
|
|
-import { Input, Space, Button } from 'ant-design-vue'
|
|
|
-
|
|
|
-/* 此代码导出一个名为“ReloadIconTsx”的 Vue
|
|
|
-组件,该组件显示一个用于重新加载内容的图标。该组件有两个道具:`loading`(一个布尔值,指示内容当前是否正在加载)和`reload`(单击重新加载图标时调用的函数)。该组件使用 Vue
|
|
|
-中的“defineComponent”函数来定义其行为,并使用“@ant-design/icons-vue”库中的“LoadingOutlined”和“ReloadOutlined”图标来显示适当的图标。该组件还使用
|
|
|
-Ant Design Vue 库中的“a-tooltip”组件在用户将鼠标悬停在图标上时显示工具提示。 */
|
|
|
-
|
|
|
-export const ReloadIconTsx = defineComponent({
|
|
|
- name: 'reload-icon-tsx',
|
|
|
- props: {
|
|
|
- loading: {
|
|
|
- type: Boolean,
|
|
|
- default: false
|
|
|
- },
|
|
|
- reload: {
|
|
|
- type: Function,
|
|
|
- default: () => {}
|
|
|
- }
|
|
|
- },
|
|
|
- setup (props, context) {
|
|
|
- return () => (
|
|
|
- <a-tooltip
|
|
|
- title="刷新"
|
|
|
- >
|
|
|
- { props.loading ? <LoadingOutlined /> : <ReloadOutlined onClick={() => props.reload()} /> }
|
|
|
- </a-tooltip>
|
|
|
- )
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-/**
|
|
|
- * 这是一个 TypeScript React 组件,用于呈现带有可自定义内容和操作插槽的警报。
|
|
|
- * @param props - 包含两个属性的对象:
|
|
|
- * @param context - `setup` 函数中的 `context`
|
|
|
- * 参数是一个对象,它提供对当前组件实例的属性和方法的访问。它包括“attrs”、“emit”、“slots”和“refs”等属性。在此特定代码中,“slots”属性用于访问
|
|
|
- * @returns 呈现具有两列的行的功能组件。第一列的内容由 valueSlot 槽确定,第二列的内容由 operaSlot
|
|
|
- * 槽确定。该组件还接受字符串类型的“value”属性和对象类型的“operaSlot”属性。
|
|
|
- */
|
|
|
-export const AlertTsx = defineComponent({
|
|
|
- props: {
|
|
|
- value: {
|
|
|
- type: String,
|
|
|
- default: ''
|
|
|
- }
|
|
|
- },
|
|
|
- setup (props, context) {
|
|
|
- const { slots } = context
|
|
|
-
|
|
|
- return () => (
|
|
|
- <a-row
|
|
|
- justify='space-between'
|
|
|
- align="middle"
|
|
|
- style={{
|
|
|
- backgroundColor: '#e6f7ff',
|
|
|
- border: '1px solid #91d5ff',
|
|
|
- minHeight: '40px',
|
|
|
- padding: '0px 20px '
|
|
|
- }}
|
|
|
- >
|
|
|
- <a-col>{ props.value ? props.value : slots.valueSlot!()}</a-col>
|
|
|
- <a-col>{slots.operaSlot!()}</a-col>
|
|
|
- </a-row>
|
|
|
- )
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-/**
|
|
|
- * @description iconfont矢量库 使用的svg的格式 svg导入在public下的index.html里
|
|
|
- */
|
|
|
-export const IconTsx = defineComponent({
|
|
|
- props: {
|
|
|
- name: {
|
|
|
- type: String,
|
|
|
- required: true
|
|
|
- }
|
|
|
- },
|
|
|
- setup (props, ctx) {
|
|
|
- return () => (
|
|
|
- <svg class="icon" aria-hidden="true" style={{ fill: '#fff' }} >
|
|
|
- <use style={{ fill: '#fff' }} xlinkHref={`#icon-${props.name}`}></use>
|
|
|
- </svg>
|
|
|
- )
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-export const SelectTsx = defineComponent({
|
|
|
- name: 'select-tsx',
|
|
|
- props: {
|
|
|
- modelValue: {
|
|
|
- type: Object,
|
|
|
- required: true,
|
|
|
- default: () => ({})
|
|
|
- },
|
|
|
- request: {
|
|
|
- type: Function,
|
|
|
- default: () => {}
|
|
|
- },
|
|
|
- keys: {
|
|
|
- type: Object as PropType<{key: string, name: string, value: string}>,
|
|
|
- default: () => {}
|
|
|
- },
|
|
|
- styles: {
|
|
|
- type: Object,
|
|
|
- default: () => {}
|
|
|
- }
|
|
|
- },
|
|
|
- emits: ['update:value'],
|
|
|
- setup (props, context) {
|
|
|
- const list = ref<{
|
|
|
- name: string,
|
|
|
- value: any,
|
|
|
- key: string
|
|
|
- }[]>([])
|
|
|
-
|
|
|
- props.request().then((r: {
|
|
|
- name: string,
|
|
|
- value: any,
|
|
|
- key: string
|
|
|
- }[]) => {
|
|
|
- list.value = r
|
|
|
- })
|
|
|
-
|
|
|
- const onInput = (value: string) => context.emit('update:value', value)
|
|
|
-
|
|
|
- return () => (
|
|
|
- <a-select style={{ width: '170px', ...props.styles }} value={props.modelValue} allowClear onChange={(value: string) => onInput(value)}>
|
|
|
- {
|
|
|
- list.value.map(item => <a-select-option key={item[props.keys.key]} value={item[props.keys.value]}>{item[props.keys.name]}</a-select-option>)
|
|
|
- }
|
|
|
- </a-select>
|
|
|
- )
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-export const InputTsx = defineComponent({
|
|
|
- name: 'input-tsx',
|
|
|
- props: {
|
|
|
- modelValue: {
|
|
|
- type: String,
|
|
|
- required: true,
|
|
|
- default: ''
|
|
|
- },
|
|
|
- placeholder: {
|
|
|
- type: String,
|
|
|
- default: '输入点什么...'
|
|
|
- },
|
|
|
- mode: {
|
|
|
- type: String as PropType<'normal' | 'edit'>,
|
|
|
- default: 'normal'
|
|
|
- },
|
|
|
- value: {
|
|
|
- type: String,
|
|
|
- required: true,
|
|
|
- default: ''
|
|
|
- },
|
|
|
- styles: {
|
|
|
- type: Object,
|
|
|
- default: () => {}
|
|
|
- }
|
|
|
- },
|
|
|
- emits: ['update:value', 'submit'],
|
|
|
- setup (props, ctx) {
|
|
|
- console.log('props.modelValue:', props.value)
|
|
|
-
|
|
|
- const editing = ref<boolean>(false)
|
|
|
-
|
|
|
- const onInput = (value: string) => ctx.emit('update:value', value)
|
|
|
-
|
|
|
- const submitUpdate = () => {
|
|
|
- ctx.emit('submit')
|
|
|
- editing.value = false
|
|
|
- }
|
|
|
-
|
|
|
- return () => (
|
|
|
- <span>
|
|
|
- {
|
|
|
-
|
|
|
- props.mode === 'normal'
|
|
|
- ? <Input style={{ minWidth: '170px', ...props.styles }} value={props.value} placeholder={props.placeholder} onChange={(e) => onInput(e.target.value!)} />
|
|
|
- : <>
|
|
|
- <Space>
|
|
|
- {
|
|
|
- editing.value ? <Input style={{ minWidth: '170px' }} placeholder={props.placeholder} value={props.modelValue} onChange={(e) => onInput(e.target.value!)} /> : <div style={{ minWidth: '170px' }} >{props.modelValue}</div>
|
|
|
- }
|
|
|
- {
|
|
|
- editing.value ? <EditOutlined style={{ cursor: 'pointer' }} onClick={() => editing.value = !editing.value} /> : null
|
|
|
- }
|
|
|
-
|
|
|
- </Space>
|
|
|
- {
|
|
|
- editing.value
|
|
|
- ? <Space>
|
|
|
- <Button type="primary" onClick={() => submitUpdate()}>确定</Button>
|
|
|
- <Button onClick={() => editing.value = false}>取消</Button>
|
|
|
- </Space>
|
|
|
- : null
|
|
|
- }
|
|
|
- </>
|
|
|
- }
|
|
|
-
|
|
|
- </span>
|
|
|
-
|
|
|
- )
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-/**
|
|
|
- * @description 文字copy按钮
|
|
|
- */
|
|
|
-export const CopyTsx = defineComponent({
|
|
|
- name: 'copy-tsx',
|
|
|
- props: {
|
|
|
- text: {
|
|
|
- type: String,
|
|
|
- required: true
|
|
|
- }
|
|
|
- },
|
|
|
- emits: ['success'],
|
|
|
- setup (props, ctx) {
|
|
|
- if (!props.text) {
|
|
|
- console.warn('缺少必备的参数 text')
|
|
|
- }
|
|
|
-
|
|
|
- const onCopy = () => {
|
|
|
- useCopy(props.text)
|
|
|
- }
|
|
|
-
|
|
|
- return () => (
|
|
|
- <a-tooltip
|
|
|
- title='复制'
|
|
|
- >
|
|
|
- <CopyTwoTone style="font-size: 18px;" onClick={onCopy}/>
|
|
|
- </a-tooltip>
|
|
|
- )
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- */
|
|
|
+import { PropType, defineComponent, ref } from 'vue'
|
|
|
+import { LoadingOutlined, ReloadOutlined, CopyTwoTone, EditOutlined } from '@ant-design/icons-vue'
|
|
|
+import { useCopy } from '@/hooks/dom'
|
|
|
+import { Input, Space, Button } from 'ant-design-vue'
|
|
|
+
|
|
|
+/* 此代码导出一个名为“ReloadIconTsx”的 Vue
|
|
|
+组件,该组件显示一个用于重新加载内容的图标。该组件有两个道具:`loading`(一个布尔值,指示内容当前是否正在加载)和`reload`(单击重新加载图标时调用的函数)。该组件使用 Vue
|
|
|
+中的“defineComponent”函数来定义其行为,并使用“@ant-design/icons-vue”库中的“LoadingOutlined”和“ReloadOutlined”图标来显示适当的图标。该组件还使用
|
|
|
+Ant Design Vue 库中的“a-tooltip”组件在用户将鼠标悬停在图标上时显示工具提示。 */
|
|
|
+
|
|
|
+export const ReloadIconTsx = defineComponent({
|
|
|
+ name: 'reload-icon-tsx',
|
|
|
+ props: {
|
|
|
+ loading: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false
|
|
|
+ },
|
|
|
+ reload: {
|
|
|
+ type: Function,
|
|
|
+ default: () => {}
|
|
|
+ }
|
|
|
+ },
|
|
|
+ setup (props, context) {
|
|
|
+ return () => (
|
|
|
+ <a-tooltip
|
|
|
+ title="刷新"
|
|
|
+ >
|
|
|
+ { props.loading ? <LoadingOutlined /> : <ReloadOutlined onClick={() => props.reload()} /> }
|
|
|
+ </a-tooltip>
|
|
|
+ )
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+/**
|
|
|
+ * 这是一个 TypeScript React 组件,用于呈现带有可自定义内容和操作插槽的警报。
|
|
|
+ * @param props - 包含两个属性的对象:
|
|
|
+ * @param context - `setup` 函数中的 `context`
|
|
|
+ * 参数是一个对象,它提供对当前组件实例的属性和方法的访问。它包括“attrs”、“emit”、“slots”和“refs”等属性。在此特定代码中,“slots”属性用于访问
|
|
|
+ * @returns 呈现具有两列的行的功能组件。第一列的内容由 valueSlot 槽确定,第二列的内容由 operaSlot
|
|
|
+ * 槽确定。该组件还接受字符串类型的“value”属性和对象类型的“operaSlot”属性。
|
|
|
+ */
|
|
|
+export const AlertTsx = defineComponent({
|
|
|
+ props: {
|
|
|
+ value: {
|
|
|
+ type: String,
|
|
|
+ default: ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ setup (props, context) {
|
|
|
+ const { slots } = context
|
|
|
+
|
|
|
+ return () => (
|
|
|
+ <a-row
|
|
|
+ justify='space-between'
|
|
|
+ align="middle"
|
|
|
+ style={{
|
|
|
+ backgroundColor: '#e6f7ff',
|
|
|
+ border: '1px solid #91d5ff',
|
|
|
+ minHeight: '40px',
|
|
|
+ padding: '0px 20px '
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <a-col>{ props.value ? props.value : slots.valueSlot!()}</a-col>
|
|
|
+ <a-col>{slots.operaSlot!()}</a-col>
|
|
|
+ </a-row>
|
|
|
+ )
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+/**
|
|
|
+ * @description iconfont矢量库 使用的svg的格式 svg导入在public下的index.html里
|
|
|
+ */
|
|
|
+export const IconTsx = defineComponent({
|
|
|
+ props: {
|
|
|
+ name: {
|
|
|
+ type: String,
|
|
|
+ required: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ setup (props, ctx) {
|
|
|
+ return () => (
|
|
|
+ <svg class="icon" aria-hidden="true" style={{ fill: '#fff' }} >
|
|
|
+ <use style={{ fill: '#fff' }} xlinkHref={`#icon-${props.name}`}></use>
|
|
|
+ </svg>
|
|
|
+ )
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+export const SelectTsx = defineComponent({
|
|
|
+ name: 'select-tsx',
|
|
|
+ props: {
|
|
|
+ modelValue: {
|
|
|
+ type: Object,
|
|
|
+ required: true,
|
|
|
+ default: () => ({})
|
|
|
+ },
|
|
|
+ request: {
|
|
|
+ type: Function,
|
|
|
+ default: () => {}
|
|
|
+ },
|
|
|
+ keys: {
|
|
|
+ type: Object as PropType<{key: string, name: string, value: string}>,
|
|
|
+ default: () => {}
|
|
|
+ },
|
|
|
+ styles: {
|
|
|
+ type: Object,
|
|
|
+ default: () => {}
|
|
|
+ }
|
|
|
+ },
|
|
|
+ emits: ['update:value'],
|
|
|
+ setup (props, context) {
|
|
|
+ const list = ref<{
|
|
|
+ name: string,
|
|
|
+ value: any,
|
|
|
+ key: string
|
|
|
+ }[]>([])
|
|
|
+
|
|
|
+ props.request().then((r: {
|
|
|
+ name: string,
|
|
|
+ value: any,
|
|
|
+ key: string
|
|
|
+ }[]) => {
|
|
|
+ list.value = r
|
|
|
+ })
|
|
|
+
|
|
|
+ const onInput = (value: string) => context.emit('update:value', value)
|
|
|
+
|
|
|
+ return () => (
|
|
|
+ <a-select style={{ width: '170px', ...props.styles }} value={props.modelValue} allowClear onChange={(value: string) => onInput(value)}>
|
|
|
+ {
|
|
|
+ list.value.map(item => <a-select-option key={item[props.keys.key]} value={item[props.keys.value]}>{item[props.keys.name]}</a-select-option>)
|
|
|
+ }
|
|
|
+ </a-select>
|
|
|
+ )
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+export const InputTsx = defineComponent({
|
|
|
+ name: 'input-tsx',
|
|
|
+ props: {
|
|
|
+ modelValue: {
|
|
|
+ type: String,
|
|
|
+ required: true,
|
|
|
+ default: ''
|
|
|
+ },
|
|
|
+ placeholder: {
|
|
|
+ type: String,
|
|
|
+ default: '输入点什么...'
|
|
|
+ },
|
|
|
+ mode: {
|
|
|
+ type: String as PropType<'normal' | 'edit'>,
|
|
|
+ default: 'normal'
|
|
|
+ },
|
|
|
+ value: {
|
|
|
+ type: String,
|
|
|
+ required: true,
|
|
|
+ default: ''
|
|
|
+ },
|
|
|
+ styles: {
|
|
|
+ type: Object,
|
|
|
+ default: () => {}
|
|
|
+ }
|
|
|
+ },
|
|
|
+ emits: ['update:value', 'submit'],
|
|
|
+ setup (props, ctx) {
|
|
|
+ console.log('props.modelValue:', props.value)
|
|
|
+
|
|
|
+ const editing = ref<boolean>(false)
|
|
|
+
|
|
|
+ const onInput = (value: string) => ctx.emit('update:value', value)
|
|
|
+
|
|
|
+ const submitUpdate = () => {
|
|
|
+ ctx.emit('submit')
|
|
|
+ editing.value = false
|
|
|
+ }
|
|
|
+
|
|
|
+ return () => (
|
|
|
+ <span>
|
|
|
+ {
|
|
|
+
|
|
|
+ props.mode === 'normal'
|
|
|
+ ? <Input style={{ minWidth: '170px', ...props.styles }} value={props.value} placeholder={props.placeholder} onChange={(e) => onInput(e.target.value!)} />
|
|
|
+ : <>
|
|
|
+ <Space>
|
|
|
+ {
|
|
|
+ editing.value ? <Input style={{ minWidth: '170px' }} placeholder={props.placeholder} value={props.modelValue} onChange={(e) => onInput(e.target.value!)} /> : <div style={{ minWidth: '170px' }} >{props.modelValue}</div>
|
|
|
+ }
|
|
|
+ {
|
|
|
+ editing.value ? <EditOutlined style={{ cursor: 'pointer' }} onClick={() => editing.value = !editing.value} /> : null
|
|
|
+ }
|
|
|
+
|
|
|
+ </Space>
|
|
|
+ {
|
|
|
+ editing.value
|
|
|
+ ? <Space>
|
|
|
+ <Button type="primary" onClick={() => submitUpdate()}>确定</Button>
|
|
|
+ <Button onClick={() => editing.value = false}>取消</Button>
|
|
|
+ </Space>
|
|
|
+ : null
|
|
|
+ }
|
|
|
+ </>
|
|
|
+ }
|
|
|
+
|
|
|
+ </span>
|
|
|
+
|
|
|
+ )
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+/**
|
|
|
+ * @description 文字copy按钮
|
|
|
+ */
|
|
|
+export const CopyTsx = defineComponent({
|
|
|
+ name: 'copy-tsx',
|
|
|
+ props: {
|
|
|
+ text: {
|
|
|
+ type: String,
|
|
|
+ required: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ emits: ['success'],
|
|
|
+ setup (props, ctx) {
|
|
|
+ if (!props.text) {
|
|
|
+ console.warn('缺少必备的参数 text')
|
|
|
+ }
|
|
|
+
|
|
|
+ const onCopy = () => {
|
|
|
+ useCopy(props.text)
|
|
|
+ }
|
|
|
+
|
|
|
+ return () => (
|
|
|
+ <a-tooltip
|
|
|
+ title='复制'
|
|
|
+ >
|
|
|
+ <CopyTwoTone style="font-size: 18px;" onClick={onCopy}/>
|
|
|
+ </a-tooltip>
|
|
|
+ )
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ */
|