Showing
11 changed files
with
87 additions
and
52 deletions
@@ -5672,16 +5672,36 @@ App.prototype.save = function (name, done) { | @@ -5672,16 +5672,36 @@ App.prototype.save = function (name, done) { | ||
5672 | // const data = `${Graph.xmlDeclaration}\n${this.getFileData(true, null, null, null, true, true, null, null, null, false)}`; | 5672 | // const data = `${Graph.xmlDeclaration}\n${this.getFileData(true, null, null, null, true, true, null, null, null, false)}`; |
5673 | // this.currentFile.setData(data) | 5673 | // this.currentFile.setData(data) |
5674 | 5674 | ||
5675 | - const allCells = this.editor.graph.getModel().cells || {} | 5675 | + const graph = this.editor.graph |
5676 | + const model = graph.model | ||
5677 | + const pages = this.pages | ||
5678 | + | ||
5679 | + const currentPageContentId = this.ui.currentPage.getId() | ||
5680 | + let originalPage | ||
5681 | + const contentPageInfos = pages.map(page => { | ||
5682 | + this.ui.selectPage(page) | ||
5683 | + const cells = model.getChildCells(graph.getDefaultParent()) | ||
5684 | + const nodeIds = cells.map(cell => cell.getId()) | ||
5685 | + const contentId = this.ui.currentPage.getId() | ||
5686 | + | ||
5687 | + if (contentId === currentPageContentId) | ||
5688 | + originalPage = page | ||
5689 | + | ||
5690 | + return { | ||
5691 | + nodeIds, | ||
5692 | + contentId | ||
5693 | + } | ||
5694 | + }) | ||
5695 | + originalPage && this.ui.selectPage(originalPage) | ||
5696 | + | ||
5676 | await doSaveConfigurationContent({ | 5697 | await doSaveConfigurationContent({ |
5677 | configurationContentList: [ | 5698 | configurationContentList: [ |
5678 | { | 5699 | { |
5679 | id: currentFile.getHash(), | 5700 | id: currentFile.getHash(), |
5680 | content: this.currentFile.getData(), | 5701 | content: this.currentFile.getData(), |
5681 | - contentId: this.currentPage.getId(), | ||
5682 | type: 1, | 5702 | type: 1, |
5683 | - nodeIds: Object.keys(allCells), | ||
5684 | - name: this.currentPage.getName() | 5703 | + name: this.currentPage.getName(), |
5704 | + contentPageInfos | ||
5685 | } | 5705 | } |
5686 | ], | 5706 | ], |
5687 | configurationName: currentFile.title, | 5707 | configurationName: currentFile.title, |
@@ -167,26 +167,36 @@ LocalFile.prototype.saveFile = function (title, revision, success, error, useCur | @@ -167,26 +167,36 @@ LocalFile.prototype.saveFile = function (title, revision, success, error, useCur | ||
167 | const handleSaveContent = async () => { | 167 | const handleSaveContent = async () => { |
168 | const { doSaveConfigurationContent, configurationId } = useContentData() | 168 | const { doSaveConfigurationContent, configurationId } = useContentData() |
169 | try { | 169 | try { |
170 | - const allCells = this.ui.editor.graph.getModel().cells || {} | ||
171 | - // const allCells = this.shadowPages | ||
172 | - // .map(item => { | ||
173 | - // console.log(item) | ||
174 | - // return this.ui.editor.graph.createCellLookup([item.root]) | ||
175 | - // }) | ||
176 | - // .map(obj => Object.values(obj)) | ||
177 | - // .reduce((prev, next) => [...prev, ...next], []) | ||
178 | - | 170 | + const graph = this.ui.editor.graph |
171 | + const model = graph.model | ||
172 | + const pages = this.ui.pages | ||
173 | + | ||
174 | + const currentPageContentId = this.ui.currentPage.getId() | ||
175 | + let originalPage | ||
176 | + const contentPageInfos = pages.map(page => { | ||
177 | + this.ui.selectPage(page) | ||
178 | + const cells = model.getChildCells(graph.getDefaultParent()) | ||
179 | + const nodeIds = cells.map(cell => cell.getId()) | ||
180 | + const contentId = this.ui.currentPage.getId() | ||
181 | + | ||
182 | + if (contentId === currentPageContentId) | ||
183 | + originalPage = page | ||
184 | + | ||
185 | + return { | ||
186 | + nodeIds, | ||
187 | + contentId | ||
188 | + } | ||
189 | + }) | ||
190 | + originalPage && this.ui.selectPage(originalPage) | ||
191 | + | ||
179 | await doSaveConfigurationContent({ | 192 | await doSaveConfigurationContent({ |
180 | configurationContentList: [ | 193 | configurationContentList: [ |
181 | { | 194 | { |
182 | id: this.ui.configurationContentId, | 195 | id: this.ui.configurationContentId, |
183 | content: savedData, | 196 | content: savedData, |
184 | - // contentId: this.ui.configurationContentId, | ||
185 | - contentId: this.ui.currentPage.getId(), | ||
186 | type: 1, | 197 | type: 1, |
187 | - // nodeIds: Array.from(new Set(allCells)), | ||
188 | - nodeIds: Object.keys(allCells), | ||
189 | - name: this.ui.currentPage.getName() | 198 | + name: this.ui.currentPage.getName(), |
199 | + contentPageInfos | ||
190 | } | 200 | } |
191 | ], | 201 | ], |
192 | configurationName: this.ui.currentFile.title, | 202 | configurationName: this.ui.currentFile.title, |
@@ -25,28 +25,28 @@ export const doSaveNodeAllData = (data: SaveNodeDataParamsType) => { | @@ -25,28 +25,28 @@ export const doSaveNodeAllData = (data: SaveNodeDataParamsType) => { | ||
25 | } | 25 | } |
26 | 26 | ||
27 | export const doSaveNodeAct = (params: SaveNodeActParamsType) => { | 27 | export const doSaveNodeAct = (params: SaveNodeActParamsType) => { |
28 | - const { configurationId, contentId, id, data } = params | 28 | + const { configurationId, contentId, configurationNodeId, data } = params |
29 | return defHttp.post({ | 29 | return defHttp.post({ |
30 | url: Api.SAVE_NODE_ACT, | 30 | url: Api.SAVE_NODE_ACT, |
31 | - params: { configurationId, contentId, id }, | 31 | + params: { configurationId, contentId, configurationNodeId }, |
32 | data, | 32 | data, |
33 | }) | 33 | }) |
34 | } | 34 | } |
35 | 35 | ||
36 | export const doSaveNodeDataSource = (params: SaveNodeDataSourceParamsType) => { | 36 | export const doSaveNodeDataSource = (params: SaveNodeDataSourceParamsType) => { |
37 | - const { configurationId, contentId, id, data } = params | 37 | + const { configurationId, contentId, configurationNodeId, data } = params |
38 | return defHttp.post({ | 38 | return defHttp.post({ |
39 | url: Api.SAVE_NODE_DATASOURCE, | 39 | url: Api.SAVE_NODE_DATASOURCE, |
40 | - params: { configurationId, contentId, id }, | 40 | + params: { configurationId, contentId, configurationNodeId }, |
41 | data, | 41 | data, |
42 | }) | 42 | }) |
43 | } | 43 | } |
44 | 44 | ||
45 | export const doSaveNodeEvent = (params: SaveNodeEventParamsType) => { | 45 | export const doSaveNodeEvent = (params: SaveNodeEventParamsType) => { |
46 | - const { configurationId, contentId, id, data } = params | 46 | + const { configurationId, contentId, configurationNodeId, data } = params |
47 | return defHttp.post({ | 47 | return defHttp.post({ |
48 | url: Api.SAVE_NODE_EVENT, | 48 | url: Api.SAVE_NODE_EVENT, |
49 | - params: { configurationId, contentId, id }, | 49 | + params: { configurationId, contentId, configurationNodeId }, |
50 | data, | 50 | data, |
51 | }) | 51 | }) |
52 | } | 52 | } |
@@ -11,9 +11,10 @@ export enum DeleteNodeDataTypeEnum { | @@ -11,9 +11,10 @@ export enum DeleteNodeDataTypeEnum { | ||
11 | } | 11 | } |
12 | 12 | ||
13 | export interface BasicNodeBindType { | 13 | export interface BasicNodeBindType { |
14 | - id: string | ||
15 | contentId: string | 14 | contentId: string |
15 | + configurationNodeId: string | ||
16 | configurationId: string | 16 | configurationId: string |
17 | + id?: string | ||
17 | } | 18 | } |
18 | 19 | ||
19 | export interface SaveNodeDataParamsType extends BasicNodeBindType { | 20 | export interface SaveNodeDataParamsType extends BasicNodeBindType { |
@@ -45,6 +46,7 @@ export interface NodeDataBasicType { | @@ -45,6 +46,7 @@ export interface NodeDataBasicType { | ||
45 | enabled: boolean | 46 | enabled: boolean |
46 | tenantId: string | 47 | tenantId: string |
47 | configurationId: string | 48 | configurationId: string |
49 | + configurationNodeId: string | ||
48 | contentId: string | 50 | contentId: string |
49 | } | 51 | } |
50 | 52 |
1 | <script lang="ts" setup> | 1 | <script lang="ts" setup> |
2 | import { Button } from 'ant-design-vue' | 2 | import { Button } from 'ant-design-vue' |
3 | import { basicProps } from '../props' | 3 | import { basicProps } from '../props' |
4 | +import { useTranslation } from '@/hooks/useTranslation' | ||
4 | defineProps(basicProps) | 5 | defineProps(basicProps) |
5 | const emit = defineEmits(['ok', 'cancel']) | 6 | const emit = defineEmits(['ok', 'cancel']) |
7 | + | ||
8 | +const { t } = useTranslation() | ||
6 | function handleOk(e: Event) { | 9 | function handleOk(e: Event) { |
7 | emit('ok', e) | 10 | emit('ok', e) |
8 | } | 11 | } |
@@ -16,17 +19,11 @@ function handleCancel(e: Event) { | @@ -16,17 +19,11 @@ function handleCancel(e: Event) { | ||
16 | <div> | 19 | <div> |
17 | <slot name="insertFooter" /> | 20 | <slot name="insertFooter" /> |
18 | <Button v-if="showCancelBtn" v-bind="cancelButtonProps" @click="handleCancel"> | 21 | <Button v-if="showCancelBtn" v-bind="cancelButtonProps" @click="handleCancel"> |
19 | - {{ cancelText }} | 22 | + {{ cancelText || t('cancel') }} |
20 | </Button> | 23 | </Button> |
21 | <slot name="centerFooter" /> | 24 | <slot name="centerFooter" /> |
22 | - <Button | ||
23 | - v-if="showOkBtn" | ||
24 | - :type="okType" | ||
25 | - :loading="confirmLoading" | ||
26 | - v-bind="okButtonProps" | ||
27 | - @click="handleOk" | ||
28 | - > | ||
29 | - {{ okText }} | 25 | + <Button v-if="showOkBtn" :type="okType" :loading="confirmLoading" v-bind="okButtonProps" @click="handleOk"> |
26 | + {{ okText || t('ok') }} | ||
30 | </Button> | 27 | </Button> |
31 | <slot name="appendFooter" /> | 28 | <slot name="appendFooter" /> |
32 | </div> | 29 | </div> |
@@ -3,9 +3,7 @@ import type { ButtonProps } from 'ant-design-vue/es/button/buttonTypes' | @@ -3,9 +3,7 @@ import type { ButtonProps } from 'ant-design-vue/es/button/buttonTypes' | ||
3 | import type { ButtonType } from 'ant-design-vue/lib/button' | 3 | import type { ButtonType } from 'ant-design-vue/lib/button' |
4 | import type { VueNode } from 'ant-design-vue/es/_util/type' | 4 | import type { VueNode } from 'ant-design-vue/es/_util/type' |
5 | import type { ModalWrapperProps } from './typing' | 5 | import type { ModalWrapperProps } from './typing' |
6 | -import { useTranslation } from '@/hooks/useTranslation' | ||
7 | 6 | ||
8 | -const { t } = useTranslation() | ||
9 | export const modalProps = { | 7 | export const modalProps = { |
10 | open: { type: Boolean }, | 8 | open: { type: Boolean }, |
11 | scrollTop: { type: Boolean, default: true }, | 9 | scrollTop: { type: Boolean, default: true }, |
@@ -14,8 +12,8 @@ export const modalProps = { | @@ -14,8 +12,8 @@ export const modalProps = { | ||
14 | // open drag | 12 | // open drag |
15 | draggable: { type: Boolean, default: true }, | 13 | draggable: { type: Boolean, default: true }, |
16 | centered: { type: Boolean }, | 14 | centered: { type: Boolean }, |
17 | - cancelText: { type: String, default: t('cancel') }, | ||
18 | - okText: { type: String, default: t('ok') }, | 15 | + cancelText: { type: String }, |
16 | + okText: { type: String }, | ||
19 | 17 | ||
20 | closeFunc: Function as PropType<() => Promise<boolean>>, | 18 | closeFunc: Function as PropType<() => Promise<boolean>>, |
21 | } | 19 | } |
@@ -37,7 +37,7 @@ export const getFormSchemas = (event: EventTypeEnum): FormSchema[] => { | @@ -37,7 +37,7 @@ export const getFormSchemas = (event: EventTypeEnum): FormSchema[] => { | ||
37 | componentProps: { | 37 | componentProps: { |
38 | allowClear: false, | 38 | allowClear: false, |
39 | options: [ | 39 | options: [ |
40 | - { label: EventTypeNameEnum[event], value: EventTypeEnum[event] }, | 40 | + { label: t(EventTypeNameEnum[event]), value: EventTypeEnum[event] }, |
41 | ], | 41 | ], |
42 | }, | 42 | }, |
43 | }, | 43 | }, |
@@ -177,8 +177,8 @@ defineExpose<ComponentExposeType>({ | @@ -177,8 +177,8 @@ defineExpose<ComponentExposeType>({ | ||
177 | :validate-status="getValidateStatus(record[TableColumnFieldEnum.DEVICE_PROFILE_ID])" | 177 | :validate-status="getValidateStatus(record[TableColumnFieldEnum.DEVICE_PROFILE_ID])" |
178 | > | 178 | > |
179 | <Select | 179 | <Select |
180 | - v-model:value="record[TableColumnFieldEnum.DEVICE_PROFILE_ID]" :options="productList" :field-names="{ label: 'name', value: 'profileId' }" placeholder="请选择产品" | ||
181 | - class="w-full" | 180 | + v-model:value="record[TableColumnFieldEnum.DEVICE_PROFILE_ID]" :options="productList" |
181 | + :field-names="{ label: 'name', value: 'profileId' }" placeholder="请选择产品" class="w-full" | ||
182 | @change="(value, option) => handleSelectProduct(value, option, record as TableRecordItemType)" | 182 | @change="(value, option) => handleSelectProduct(value, option, record as TableRecordItemType)" |
183 | /> | 183 | /> |
184 | </FormItem> | 184 | </FormItem> |
@@ -189,8 +189,8 @@ defineExpose<ComponentExposeType>({ | @@ -189,8 +189,8 @@ defineExpose<ComponentExposeType>({ | ||
189 | :validate-status="getValidateStatus(record[TableColumnFieldEnum.DEVICE_ID])" | 189 | :validate-status="getValidateStatus(record[TableColumnFieldEnum.DEVICE_ID])" |
190 | > | 190 | > |
191 | <Select | 191 | <Select |
192 | - v-model:value="record[TableColumnFieldEnum.DEVICE_ID]" :options="deviceList" :placeholder="t('chooseDevice')" | ||
193 | - class="w-full" | 192 | + v-model:value="record[TableColumnFieldEnum.DEVICE_ID]" :options="deviceList" |
193 | + :placeholder="t('chooseDevice')" class="w-full" | ||
194 | @change="(value, option) => handleSelectDevice(value, option, record as TableRecordItemType)" | 194 | @change="(value, option) => handleSelectDevice(value, option, record as TableRecordItemType)" |
195 | /> | 195 | /> |
196 | </FormItem> | 196 | </FormItem> |
@@ -198,8 +198,8 @@ defineExpose<ComponentExposeType>({ | @@ -198,8 +198,8 @@ defineExpose<ComponentExposeType>({ | ||
198 | <template v-if="column.key === TableColumnFieldEnum.WAY"> | 198 | <template v-if="column.key === TableColumnFieldEnum.WAY"> |
199 | <RadioGroup | 199 | <RadioGroup |
200 | v-model:value="record[TableColumnFieldEnum.WAY]" :options="[ | 200 | v-model:value="record[TableColumnFieldEnum.WAY]" :options="[ |
201 | - { label: CommandWayNameEnum.ONE_WAY, value: CommandWayEnum.ONE_WAY }, | ||
202 | - { label: CommandWayNameEnum.TWO_WAY, value: CommandWayEnum.TWO_WAY }, | 201 | + { label: t(CommandWayNameEnum.ONE_WAY), value: CommandWayEnum.ONE_WAY }, |
202 | + { label: t(CommandWayNameEnum.TWO_WAY), value: CommandWayEnum.TWO_WAY }, | ||
203 | ]" | 203 | ]" |
204 | /> | 204 | /> |
205 | </template> | 205 | </template> |
@@ -2,6 +2,7 @@ import { isBoolean } from '@wry-smile/utils-is' | @@ -2,6 +2,7 @@ import { isBoolean } from '@wry-smile/utils-is' | ||
2 | import type { BasicContentComponentProps } from '../..' | 2 | import type { BasicContentComponentProps } from '../..' |
3 | import type { PublicFormSettingType } from '../../..' | 3 | import type { PublicFormSettingType } from '../../..' |
4 | import { DataSourceTypeEnum, EventTypeEnum, EventTypeNameEnum } from '@/enums/datasource' | 4 | import { DataSourceTypeEnum, EventTypeEnum, EventTypeNameEnum } from '@/enums/datasource' |
5 | +import { useTranslation } from '@/hooks/useTranslation' | ||
5 | 6 | ||
6 | export interface DynamicEffectItemType { | 7 | export interface DynamicEffectItemType { |
7 | label: string | 8 | label: string |
@@ -10,29 +11,31 @@ export interface DynamicEffectItemType { | @@ -10,29 +11,31 @@ export interface DynamicEffectItemType { | ||
10 | componentProps?: BasicContentComponentProps | 11 | componentProps?: BasicContentComponentProps |
11 | } | 12 | } |
12 | 13 | ||
14 | +const { t } = useTranslation() | ||
15 | + | ||
13 | export const getEventItem = (formSetting?: PublicFormSettingType): DynamicEffectItemType[] => { | 16 | export const getEventItem = (formSetting?: PublicFormSettingType): DynamicEffectItemType[] => { |
14 | const list = [ | 17 | const list = [ |
15 | { | 18 | { |
16 | - label: EventTypeNameEnum.DOWN, | 19 | + label: t(EventTypeNameEnum.DOWN), |
17 | key: EventTypeEnum.DOWN, | 20 | key: EventTypeEnum.DOWN, |
18 | component: () => import('./MouseDownOrUpSetting/index.vue'), | 21 | component: () => import('./MouseDownOrUpSetting/index.vue'), |
19 | componentProps: { event: EventTypeEnum.DOWN, type: DataSourceTypeEnum.EVENT }, | 22 | componentProps: { event: EventTypeEnum.DOWN, type: DataSourceTypeEnum.EVENT }, |
20 | }, | 23 | }, |
21 | { | 24 | { |
22 | - label: EventTypeNameEnum.UP, | 25 | + label: t(EventTypeNameEnum.UP), |
23 | key: EventTypeEnum.UP, | 26 | key: EventTypeEnum.UP, |
24 | component: () => import('./MouseDownOrUpSetting/index.vue'), | 27 | component: () => import('./MouseDownOrUpSetting/index.vue'), |
25 | componentProps: { event: EventTypeEnum.UP, type: DataSourceTypeEnum.EVENT }, | 28 | componentProps: { event: EventTypeEnum.UP, type: DataSourceTypeEnum.EVENT }, |
26 | 29 | ||
27 | }, | 30 | }, |
28 | { | 31 | { |
29 | - label: EventTypeNameEnum.SINGLE, | 32 | + label: t(EventTypeNameEnum.SINGLE), |
30 | key: EventTypeEnum.SINGLE, | 33 | key: EventTypeEnum.SINGLE, |
31 | component: () => import('./SingleClickOrDoubleClickSetting/index.vue'), | 34 | component: () => import('./SingleClickOrDoubleClickSetting/index.vue'), |
32 | componentProps: { event: EventTypeEnum.SINGLE, type: DataSourceTypeEnum.EVENT }, | 35 | componentProps: { event: EventTypeEnum.SINGLE, type: DataSourceTypeEnum.EVENT }, |
33 | }, | 36 | }, |
34 | { | 37 | { |
35 | - label: EventTypeNameEnum.DOUBLE, | 38 | + label: t(EventTypeNameEnum.DOUBLE), |
36 | key: EventTypeEnum.DOUBLE, | 39 | key: EventTypeEnum.DOUBLE, |
37 | component: () => import('./SingleClickOrDoubleClickSetting/index.vue'), | 40 | component: () => import('./SingleClickOrDoubleClickSetting/index.vue'), |
38 | componentProps: { event: EventTypeEnum.DOUBLE, type: DataSourceTypeEnum.EVENT }, | 41 | componentProps: { event: EventTypeEnum.DOUBLE, type: DataSourceTypeEnum.EVENT }, |
@@ -52,11 +52,16 @@ export function useNodeData({ cell, immediate = true }: UseNodeDataParamsType) { | @@ -52,11 +52,16 @@ export function useNodeData({ cell, immediate = true }: UseNodeDataParamsType) { | ||
52 | } | 52 | } |
53 | 53 | ||
54 | const basicNodeBindData = (type: ActionType): BasicNodeBindType => { | 54 | const basicNodeBindData = (type: ActionType): BasicNodeBindType => { |
55 | - return { | ||
56 | - id: type === ActionType.GET ? getSourceCellID () || getCellID () : getCellID(), | 55 | + const res: BasicNodeBindType = { |
56 | + configurationNodeId: type === ActionType.GET ? getSourceCellID() || getCellID() : getCellID(), | ||
57 | contentId: window.DrawApp.currentPage.getId(), | 57 | contentId: window.DrawApp.currentPage.getId(), |
58 | configurationId, | 58 | configurationId, |
59 | } | 59 | } |
60 | + | ||
61 | + if (unref(nodeData)?.id) | ||
62 | + res.id = unref(nodeData)?.id | ||
63 | + | ||
64 | + return res | ||
60 | } | 65 | } |
61 | 66 | ||
62 | const getCellInfo = computed(() => { | 67 | const getCellInfo = computed(() => { |
@@ -9,7 +9,7 @@ export function useAuth() { | @@ -9,7 +9,7 @@ export function useAuth() { | ||
9 | const result = { permissions: [] as string[], hasPreview: true, hasDesign: true } | 9 | const result = { permissions: [] as string[], hasPreview: true, hasDesign: true } |
10 | 10 | ||
11 | if (isFromEdge()) | 11 | if (isFromEdge()) |
12 | - return result | 12 | + return Object.assign(result, { hasDesignAuth: true, hasPreviewAuth: true }) |
13 | 13 | ||
14 | if (isShareMode()) return result | 14 | if (isShareMode()) return result |
15 | 15 |