Showing
5 changed files
with
82 additions
and
21 deletions
@@ -3,9 +3,13 @@ | @@ -3,9 +3,13 @@ | ||
3 | import { BasicModal, useModalInner } from '/@/components/Modal'; | 3 | import { BasicModal, useModalInner } from '/@/components/Modal'; |
4 | import { FieldsEnum, schemas, ViewTypeEnum } from './config'; | 4 | import { FieldsEnum, schemas, ViewTypeEnum } from './config'; |
5 | import { DataBoardRecord } from '/@/api/dataBoard/model'; | 5 | import { DataBoardRecord } from '/@/api/dataBoard/model'; |
6 | - import { Alert } from 'ant-design-vue'; | 6 | + import { Alert, Button, Tooltip } from 'ant-design-vue'; |
7 | import { ref, unref } from 'vue'; | 7 | import { ref, unref } from 'vue'; |
8 | import { nextTick } from 'vue'; | 8 | import { nextTick } from 'vue'; |
9 | + import { ModalParamsType } from '/#/utils'; | ||
10 | + import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard'; | ||
11 | + import { useMessage } from '/@/hooks/web/useMessage'; | ||
12 | + import { computed } from 'vue'; | ||
9 | 13 | ||
10 | const props = defineProps<{ | 14 | const props = defineProps<{ |
11 | shareApi?: (...args: any[]) => Promise<any>; | 15 | shareApi?: (...args: any[]) => Promise<any>; |
@@ -13,15 +17,20 @@ | @@ -13,15 +17,20 @@ | ||
13 | 17 | ||
14 | const loading = ref(false); | 18 | const loading = ref(false); |
15 | const record = ref<DataBoardRecord>({} as unknown as DataBoardRecord); | 19 | const record = ref<DataBoardRecord>({} as unknown as DataBoardRecord); |
20 | + const link = ref(''); | ||
16 | 21 | ||
17 | - const [register, { closeModal }] = useModalInner(async (data: DataBoardRecord) => { | ||
18 | - record.value = data; | ||
19 | - await nextTick(); | ||
20 | - setFieldsValue({ | ||
21 | - [FieldsEnum.IS_SHARE]: data.viewType === ViewTypeEnum.PUBLIC_VIEW, | ||
22 | - [FieldsEnum.ACCESS_CREDENTIALS]: data.accessCredentials, | ||
23 | - }); | ||
24 | - }); | 22 | + const [register, { closeModal }] = useModalInner( |
23 | + async (data: ModalParamsType<DataBoardRecord>) => { | ||
24 | + const { record: value, href } = data; | ||
25 | + record.value = value; | ||
26 | + link.value = href; | ||
27 | + await nextTick(); | ||
28 | + setFieldsValue({ | ||
29 | + [FieldsEnum.IS_SHARE]: value.viewType === ViewTypeEnum.PUBLIC_VIEW, | ||
30 | + [FieldsEnum.ACCESS_CREDENTIALS]: value.accessCredentials, | ||
31 | + }); | ||
32 | + } | ||
33 | + ); | ||
25 | 34 | ||
26 | const [registerForm, { getFieldsValue, setFieldsValue }] = useForm({ | 35 | const [registerForm, { getFieldsValue, setFieldsValue }] = useForm({ |
27 | schemas, | 36 | schemas, |
@@ -32,6 +41,10 @@ | @@ -32,6 +41,10 @@ | ||
32 | 41 | ||
33 | const emit = defineEmits(['register', 'success']); | 42 | const emit = defineEmits(['register', 'success']); |
34 | 43 | ||
44 | + const handleOpenLink = () => { | ||
45 | + window.open(unref(link)); | ||
46 | + }; | ||
47 | + | ||
35 | const handleSubmit = async () => { | 48 | const handleSubmit = async () => { |
36 | try { | 49 | try { |
37 | loading.value = true; | 50 | loading.value = true; |
@@ -44,6 +57,19 @@ | @@ -44,6 +57,19 @@ | ||
44 | loading.value = false; | 57 | loading.value = false; |
45 | } | 58 | } |
46 | }; | 59 | }; |
60 | + | ||
61 | + const isPublicState = computed(() => { | ||
62 | + return unref(record).viewType === ViewTypeEnum.PUBLIC_VIEW; | ||
63 | + }); | ||
64 | + | ||
65 | + const { clipboardRef, isSuccessRef } = useCopyToClipboard(); | ||
66 | + const { createMessage } = useMessage(); | ||
67 | + const handleCopy = () => { | ||
68 | + clipboardRef.value = unref(link); | ||
69 | + if (unref(isSuccessRef)) { | ||
70 | + createMessage.success('复制成功~'); | ||
71 | + } | ||
72 | + }; | ||
47 | </script> | 73 | </script> |
48 | 74 | ||
49 | <template> | 75 | <template> |
@@ -54,5 +80,27 @@ | @@ -54,5 +80,27 @@ | ||
54 | message="私有视图只有项目成员可以浏览,公开视图拥有一个公开的 URL,任何人无需登录即可浏览." | 80 | message="私有视图只有项目成员可以浏览,公开视图拥有一个公开的 URL,任何人无需登录即可浏览." |
55 | /> | 81 | /> |
56 | <BasicForm @register="registerForm" /> | 82 | <BasicForm @register="registerForm" /> |
83 | + <section> | ||
84 | + <div v-if="isPublicState" class="mt-4"> | ||
85 | + <span> 设置分享后, 可通过如下 </span> | ||
86 | + <Button type="link" class="!px-1" @click="handleOpenLink"> 链接 </Button> | ||
87 | + <span>访问:</span> | ||
88 | + </div> | ||
89 | + <Tooltip v-if="isPublicState" title="点击复制链接"> | ||
90 | + <div | ||
91 | + class="px-4 py-2 my-2 bg-gray-50 font-semibold tracking-wider text-base cursor-pointer truncate" | ||
92 | + @click="handleCopy" | ||
93 | + > | ||
94 | + <span>{{ link }}</span> | ||
95 | + </div> | ||
96 | + </Tooltip> | ||
97 | + | ||
98 | + <Alert type="warning"> | ||
99 | + <template #message> | ||
100 | + <span class="font-bold mr-1">提示:</span> | ||
101 | + <span>不要忘记将相关设备 <span class="mx-1 font-bold">公开</span> 以访问其数据</span> | ||
102 | + </template> | ||
103 | + </Alert> | ||
104 | + </section> | ||
57 | </BasicModal> | 105 | </BasicModal> |
58 | </template> | 106 | </template> |
@@ -153,17 +153,20 @@ | @@ -153,17 +153,20 @@ | ||
153 | getListData(); | 153 | getListData(); |
154 | }; | 154 | }; |
155 | 155 | ||
156 | - const { clipboardRef, isSuccessRef } = useCopyToClipboard(); | ||
157 | - const handleCreateShareUrl = (record: ConfigurationCenterItemsModal) => { | ||
158 | - if (!unref(getShareFlag)) return; | ||
159 | - const { origin } = location; | 156 | + const createShareUrl = (record: ConfigurationCenterItemsModal) => { |
160 | const searchParams = new URLSearchParams(); | 157 | const searchParams = new URLSearchParams(); |
161 | isDev && searchParams.set('dev', '1'); | 158 | isDev && searchParams.set('dev', '1'); |
162 | searchParams.set('share', 'SCADA'); | 159 | searchParams.set('share', 'SCADA'); |
163 | searchParams.set('configurationId', record.id); | 160 | searchParams.set('configurationId', record.id); |
164 | searchParams.set('publicId', record.publicId || ''); | 161 | searchParams.set('publicId', record.publicId || ''); |
165 | searchParams.set('lightbox', '1'); | 162 | searchParams.set('lightbox', '1'); |
166 | - const url = `${origin}${configurationPrefix}/?${searchParams.toString()}`; | 163 | + return `${origin}${configurationPrefix}/?${searchParams.toString()}`; |
164 | + }; | ||
165 | + | ||
166 | + const { clipboardRef, isSuccessRef } = useCopyToClipboard(); | ||
167 | + const handleCreateShareUrl = (record: ConfigurationCenterItemsModal) => { | ||
168 | + if (!unref(getShareFlag)) return; | ||
169 | + const url = createShareUrl(record); | ||
167 | clipboardRef.value = url; | 170 | clipboardRef.value = url; |
168 | if (unref(isSuccessRef)) { | 171 | if (unref(isSuccessRef)) { |
169 | createMessage.success('复制成功~'); | 172 | createMessage.success('复制成功~'); |
@@ -173,7 +176,7 @@ | @@ -173,7 +176,7 @@ | ||
173 | const [registerShareModal, { openModal }] = useModal(); | 176 | const [registerShareModal, { openModal }] = useModal(); |
174 | 177 | ||
175 | const handleOpenShareModal = (record: ConfigurationCenterItemsModal) => { | 178 | const handleOpenShareModal = (record: ConfigurationCenterItemsModal) => { |
176 | - openModal(true, record); | 179 | + openModal(true, { record, href: createShareUrl(record) }); |
177 | }; | 180 | }; |
178 | 181 | ||
179 | const listEl = ref<Nullable<ComponentElRef>>(null); | 182 | const listEl = ref<Nullable<ComponentElRef>>(null); |
@@ -163,15 +163,18 @@ | @@ -163,15 +163,18 @@ | ||
163 | const getPublicApiListData = () => {}; | 163 | const getPublicApiListData = () => {}; |
164 | 164 | ||
165 | const [registerShareModal, { openModal }] = useModal(); | 165 | const [registerShareModal, { openModal }] = useModal(); |
166 | - const handleOpenShareModal = (item: BigScreenCenterItemsModel) => { | ||
167 | - openModal(true, item); | 166 | + const handleOpenShareModal = (record: BigScreenCenterItemsModel) => { |
167 | + openModal(true, { record, href: createShareUrl(record) }); | ||
168 | + }; | ||
169 | + | ||
170 | + const createShareUrl = (record: BigScreenCenterItemsModel) => { | ||
171 | + const { origin } = location; | ||
172 | + return `${origin}${largeDesignerPrefix}/#/share/preview/${record.id}/${record.publicId}`; | ||
168 | }; | 173 | }; |
169 | 174 | ||
170 | const { clipboardRef, isSuccessRef } = useCopyToClipboard(); | 175 | const { clipboardRef, isSuccessRef } = useCopyToClipboard(); |
171 | const handleCreateShareUrl = (record: BigScreenCenterItemsModel) => { | 176 | const handleCreateShareUrl = (record: BigScreenCenterItemsModel) => { |
172 | - const { origin } = location; | ||
173 | - const { largeDesignerPrefix } = useGlobSetting(); | ||
174 | - clipboardRef.value = `${origin}${largeDesignerPrefix}/#/share/preview/${record.id}/${record.publicId}`; | 177 | + clipboardRef.value = createShareUrl(record); |
175 | if (unref(isSuccessRef)) { | 178 | if (unref(isSuccessRef)) { |
176 | createMessage.success('复制成功~'); | 179 | createMessage.success('复制成功~'); |
177 | } | 180 | } |
@@ -22,6 +22,8 @@ | @@ -22,6 +22,8 @@ | ||
22 | import { useForm, BasicForm } from '/@/components/Form'; | 22 | import { useForm, BasicForm } from '/@/components/Form'; |
23 | import { formSchema } from './config/searchForm'; | 23 | import { formSchema } from './config/searchForm'; |
24 | import { ShareModal } from '/@/views/common/ShareModal'; | 24 | import { ShareModal } from '/@/views/common/ShareModal'; |
25 | + import { ModalParamsType } from '/#/utils'; | ||
26 | + import { DataActionModeEnum } from '/@/enums/toolEnum'; | ||
25 | 27 | ||
26 | const ListItem = List.Item; | 28 | const ListItem = List.Item; |
27 | const router = useRouter(); | 29 | const router = useRouter(); |
@@ -133,7 +135,11 @@ | @@ -133,7 +135,11 @@ | ||
133 | }; | 135 | }; |
134 | 136 | ||
135 | const handleOpenShareModal = (record: DataBoardRecord) => { | 137 | const handleOpenShareModal = (record: DataBoardRecord) => { |
136 | - openShareModal(true, record); | 138 | + openShareModal(true, { |
139 | + record, | ||
140 | + mode: DataActionModeEnum.READ, | ||
141 | + href: createShareUrl(record), | ||
142 | + } as ModalParamsType<DataBoardRecord>); | ||
137 | }; | 143 | }; |
138 | 144 | ||
139 | const handleMenuEvent = (event: DropMenu, record: DataBoardRecord) => { | 145 | const handleMenuEvent = (event: DropMenu, record: DataBoardRecord) => { |
@@ -8,4 +8,5 @@ export type DynamicProps<T> = { | @@ -8,4 +8,5 @@ export type DynamicProps<T> = { | ||
8 | export interface ModalParamsType<T = Recordable> { | 8 | export interface ModalParamsType<T = Recordable> { |
9 | mode: DataActionModeEnum; | 9 | mode: DataActionModeEnum; |
10 | record: T; | 10 | record: T; |
11 | + [key: string]: any; | ||
11 | } | 12 | } |