diff --git a/src/api/config.ts b/src/api/config.ts index 31d19779..b1d863f5 100644 --- a/src/api/config.ts +++ b/src/api/config.ts @@ -132,6 +132,9 @@ export const addSubscriptions = (data: SubscriptionsData) => { export const deleteSubscription = (data: SubscriptionData) => { return http.delete('/subscribe', { data }) } +export const updateSubscription = (data: SubscriptionData) => { + return http.put('/subscribe', data) +} export const querySubscription = async (node: string): Promise> => { try { diff --git a/src/composables/config/useSubscription.ts b/src/composables/config/useSubscription.ts index 21709bb6..9a35defe 100644 --- a/src/composables/config/useSubscription.ts +++ b/src/composables/config/useSubscription.ts @@ -1,4 +1,11 @@ -import { addSubscription, addSubscriptions, deleteSubscription, queryGroupList, querySubscription } from '@/api/config' +import { + addSubscription, + addSubscriptions, + deleteSubscription, + updateSubscription, + queryGroupList, + querySubscription, +} from '@/api/config' import type { GroupData, SubscriptionData, SubscriptionsData, SubscriptionDataForm } from '@/types/config' import type { Ref } from 'vue' import { ref, computed, nextTick } from 'vue' @@ -10,6 +17,7 @@ import useSouthDriver from './useSouthDriver' import { createCommonErrorMessage, OmitArrayFields } from '@/utils/utils' import { EN_NUMBER_REGEX } from '@/utils/regexps' import { useDriverInfo } from '@/composables/config/useDriver' +import { cloneDeep, omit } from 'lodash' interface SubscriptionDataInTable extends SubscriptionData { checked: boolean @@ -21,6 +29,20 @@ export const useSubscriptionList = () => { const isListLoading = ref(false) const subscriptionList: Ref> = ref([]) + + const isEditGroup = ref(false) + const showEditGroupDailog = ref(false) + const isSubmitting = ref(false) + const editGroupForm: Ref = ref({ + app: '', + driver: '', + group: '', + params: { + topic: '', + productKey: '', + }, + }) + const node = computed(() => route.params.node.toString()) const allChecked = computed({ @@ -77,6 +99,32 @@ export const useSubscriptionList = () => { const batchUnsubscribeGroups = () => unsubscribe(t('config.unsubscribeInBulkConfirm'), subCheckedList.value) + const showEditGroupDialog = (group: SubscriptionDataInTable) => { + const groupData = cloneDeep(group) + isEditGroup.value = true + showEditGroupDailog.value = true + editGroupForm.value = omit(groupData, ['checked']) + } + const updateGroup = async (data: SubscriptionData) => { + try { + isSubmitting.value = true + const params = { + ...data, + app: node.value, + } + showEditGroupDailog.value = false + + EmqxMessage.success(t('common.submitSuccess')) + + await updateSubscription(params) + getSubscriptionList() + } catch (error) { + console.error(error) + } finally { + isSubmitting.value = false + } + } + getSubscriptionList() return { @@ -90,6 +138,13 @@ export const useSubscriptionList = () => { unsubscribeGroup, clearSubscription, batchUnsubscribeGroups, + + isEditGroup, + showEditGroupDailog, + showEditGroupDialog, + editGroupForm, + updateGroup, + isSubmitting, } } @@ -98,31 +153,8 @@ type AddSubscriptionProps = Readonly<{ currentNode: string }> -export const useAddSubscription = (props: AddSubscriptionProps) => { +export const useSubscriptionGroup = () => { const { t } = useI18n() - const { isMQTTPugin, isGewuPugin, isSupportBatchSub } = useDriverInfo() - - const createRawSubscriptionForm = (): SubscriptionDataForm => ({ - app: null, - driver: '', - group: '', - driverGroups: {}, - topic: '', - productKey: '', - }) - - const formCom = ref() - - const topicWarning = computed(() => { - let warningContent = '' - const { topic } = subscriptionForm.value - if (topic) { - const isContainWildcard = topic.includes('#') || topic.includes('+') - warningContent = isContainWildcard ? t('config.topicContainWildcard') : '' - } - return warningContent - }) - const checkDriverGroups = async (rule: unknown, value: string, callback: any) => { const keys = Object.keys(value) const values = Object.values(value) @@ -152,13 +184,49 @@ export const useAddSubscription = (props: AddSubscriptionProps) => { { required: true, message: createCommonErrorMessage('select', t('config.subscribeSouthDriverData')) }, { validator: checkDriverGroups, trigger: ['blur'] }, ], + 'params.topic': [{ required: true, message: createCommonErrorMessage('input', t('config.topic')) }], topic: [{ required: true, message: createCommonErrorMessage('input', t('config.topic')) }], + + 'params.productKey': [ + { required: true, message: createCommonErrorMessage('input', ' productKey') }, + { validator: checkProductKey, trigger: ['blur'] }, + ], productKey: [ { required: true, message: createCommonErrorMessage('input', ' productKey') }, { validator: checkProductKey, trigger: ['blur'] }, ], } }) + return { + rules, + } +} +export const useAddSubscription = (props: AddSubscriptionProps) => { + const { t } = useI18n() + const { isMQTTPugin, isGewuPugin, isSupportBatchSub } = useDriverInfo() + + const createRawSubscriptionForm = (): SubscriptionDataForm => ({ + app: null, + driver: '', + group: '', + driverGroups: {}, + topic: '', + productKey: '', + }) + + const formCom = ref() + + const topicWarning = computed(() => { + let warningContent = '' + const { topic } = subscriptionForm.value + if (topic) { + const isContainWildcard = topic.includes('#') || topic.includes('+') + warningContent = isContainWildcard ? t('config.topicContainWildcard') : '' + } + return warningContent + }) + + const { rules } = useSubscriptionGroup() const subscriptionForm: Ref = ref(createRawSubscriptionForm()) const isSubmitting = ref(false) diff --git a/src/composables/data/useWriteDataCheckNParse.ts b/src/composables/data/useWriteDataCheckNParse.ts index ffd010e1..2212eead 100644 --- a/src/composables/data/useWriteDataCheckNParse.ts +++ b/src/composables/data/useWriteDataCheckNParse.ts @@ -79,7 +79,6 @@ export default (isWriteValue = true) => { try { await isJSONData(value) const arrValue = JSON.parse(value) - console.log('arrValue', arrValue) if (!Array.isArray(arrValue)) { return Promise.reject(new Error(WriteDataErrorCode.FormattingError.toString())) } diff --git a/src/types/config.d.ts b/src/types/config.d.ts index 0a33f3bf..c55adc06 100644 --- a/src/types/config.d.ts +++ b/src/types/config.d.ts @@ -50,8 +50,8 @@ export interface SubscriptionData extends SubscriptionDataForm { driver: string group: string params?: { - topic?: string - productKey?: string + topic?: string | null + productKey?: string | null } } diff --git a/src/views/config/components/DriverListSelector.vue b/src/views/config/components/DriverListSelector.vue new file mode 100644 index 00000000..c32f2cee --- /dev/null +++ b/src/views/config/components/DriverListSelector.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/views/config/components/GroupListSelector.vue b/src/views/config/components/GroupListSelector.vue new file mode 100644 index 00000000..0f8e95c8 --- /dev/null +++ b/src/views/config/components/GroupListSelector.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/src/views/config/northDriver/Group.vue b/src/views/config/northDriver/Group.vue index f80008ed..7f8a4f84 100644 --- a/src/views/config/northDriver/Group.vue +++ b/src/views/config/northDriver/Group.vue @@ -47,6 +47,9 @@