Commit cda77963a7c40093ad2b191232c137f1d802c8c2

Authored by fengtao
1 parent 5e5c176e

fix:修复设备配置点击默认新增返回400问题,fix:修改通知管理status为0,1,和添加按钮权限

... ... @@ -6,6 +6,7 @@
6 6 v-bind="$attrs"
7 7 @register="registerModal"
8 8 @ok="handleSubmit"
  9 + :draggable="false"
9 10 >
10 11 <div
11 12 style="
... ...
... ... @@ -53,9 +53,9 @@ export const columns: BasicColumn[] = [
53 53 .then(() => {
54 54 record.status = newStatus;
55 55 if (record.status == 1) {
56   - createMessage.success(`配置成功`);
  56 + createMessage.success(`已配置`);
57 57 } else {
58   - createMessage.error('未配置成功');
  58 + createMessage.error('未配置');
59 59 }
60 60 })
61 61 .finally(() => {
... ... @@ -131,7 +131,7 @@ export const formSchema: FormSchema[] = [
131 131 field: 'organizationId',
132 132 label: '所属组织',
133 133 component: 'ApiTreeSelect',
134   - // required: true,
  134 + required: true,
135 135 componentProps: {
136 136 api: async () => {
137 137 const data = await getOrganizationList();
... ...
... ... @@ -77,7 +77,7 @@
77 77 let transportTypeObj = reactive({
78 78 transportType: '',
79 79 });
80   - const profileDataObj = reactive({
  80 + let profileDataObj = reactive({
81 81 profileData: null,
82 82 });
83 83
... ... @@ -142,7 +142,8 @@
142 142 let getPic = null;
143 143 getStepTwoData = await proxy.$refs.DeviceProfileStep2Ref?.getStep2DataFunc();
144 144 profileDataObj.profileData = getStepTwoData;
145   - transportTypeObj.transportType = getStepTwoData.transportConfiguration.type;
  145 + transportTypeObj.transportType = getStepTwoData?.transportConfiguration?.transportType;
  146 + delete profileDataObj?.profileData?.transportConfiguration?.transportType;
146 147 //没有点击下一步
147 148 if (!isNextStatus.value) {
148 149 const getStep1Obj = await proxy.$refs.DeviceProfileStep1Ref?.getStep1Func();
... ... @@ -153,6 +154,10 @@
153 154 };
154 155 }
155 156 const id = isUpdate.value == 1 ? '' : postEditId.value;
  157 +
  158 + if (Object.keys(getStepTwoData?.transportConfiguration).length == 0) {
  159 + profileDataObj.profileData = null;
  160 + }
156 161 postDeviceConfogData = {
157 162 ...getStepOneData,
158 163 ...profileDataObj,
... ... @@ -162,6 +167,7 @@
162 167 if (isUpdate.value == 1) {
163 168 delete postDeviceConfogData.id;
164 169 }
  170 +
165 171 await deviceConfigAddOrEdit(postDeviceConfogData);
166 172 createMessage.success(isUpdate.value == 1 ? '新增' + '成功' : '编辑' + '成功');
167 173 closeModal();
... ...
... ... @@ -81,7 +81,7 @@
81 81 async function customResetFunc() {
82 82 emit('prev');
83 83 }
84   - watch(isChangeType, async (v) => {
  84 + watch(isChangeType, (v) => {
85 85 isMqttType.value = v;
86 86 });
87 87 const getStep2DataFunc = async () => {
... ... @@ -92,6 +92,7 @@
92 92 step2Data.transportConfiguration = {
93 93 ...getMqttVal,
94 94 ...getCoapVal,
  95 + ...val,
95 96 };
96 97 return step2Data;
97 98 };
... ...
... ... @@ -254,3 +254,51 @@ export const CoapSchemas: FormSchema[] = [
254 254 isProtobuf(values.transportPayloadType) && !isEfentoNb(values.coapDeviceType),
255 255 },
256 256 ];
  257 +
  258 +export const deviceTelemetryProtoSchemaData = `
  259 +syntax ="proto3";
  260 +package telemetry;
  261 +
  262 +message SensorDataReading {
  263 + optional double temperature = 1;
  264 + optional double humidity = 2;
  265 + InnerObject innerObject = 3;
  266 + message InnerObject {
  267 + optional string key1 = 1;
  268 + optional bool key2 = 2;
  269 + optional double key3 = 3;
  270 + optional int32 key4 = 4;
  271 + optional string key5 = 5;
  272 + }
  273 +}
  274 +`;
  275 +
  276 +export const deviceAttributesProtoSchemaData = `
  277 +syntax ="proto3";
  278 +package attributes;
  279 +
  280 +message SensorConfiguration {
  281 + optional string firmwareVersion = 1;
  282 + optional string serialNumber = 2;
  283 +}
  284 +`;
  285 +
  286 +export const deviceRpcRequestProtoSchemaData = `
  287 +syntax ="proto3";
  288 +package rpc;
  289 +
  290 +message RpcRequestMsg {
  291 + optional string method = 1;
  292 + optional int32 requestId = 2;
  293 + optional string params = 3;
  294 +}
  295 +`;
  296 +
  297 +export const deviceRpcResponseProtoSchemaData = `
  298 +syntax ="proto3";
  299 +package rpc;
  300 +
  301 +message RpcResponseMsg {
  302 + optional string payload = 1;
  303 +}
  304 +`;
... ...
... ... @@ -16,7 +16,13 @@
16 16 <script lang="ts">
17 17 import { defineComponent, reactive } from 'vue';
18 18 import { BasicForm, useForm } from '/@/components/Form';
19   - import { CoapSchemas } from './Coap';
  19 + import {
  20 + CoapSchemas,
  21 + deviceTelemetryProtoSchemaData,
  22 + deviceAttributesProtoSchemaData,
  23 + deviceRpcRequestProtoSchemaData,
  24 + deviceRpcResponseProtoSchemaData,
  25 + } from './Coap';
20 26 import { Alert, Divider, Descriptions } from 'ant-design-vue';
21 27
22 28 export default defineComponent({
... ... @@ -69,16 +75,28 @@
69 75 pagingTransmissionWindow: v.clientSettings?.pagingTransmissionWindow,
70 76 deviceTelemetryProtoSchema:
71 77 v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration
72   - ?.deviceTelemetryProtoSchema,
  78 + ?.deviceTelemetryProtoSchema == null
  79 + ? deviceTelemetryProtoSchemaData
  80 + : v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration
  81 + ?.deviceTelemetryProtoSchema,
73 82 deviceAttributesProtoSchema:
74 83 v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration
75   - ?.deviceAttributesProtoSchema,
  84 + ?.deviceAttributesProtoSchema == null
  85 + ? deviceAttributesProtoSchemaData
  86 + : v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration
  87 + ?.deviceAttributesProtoSchema,
76 88 deviceRpcRequestProtoSchema:
77 89 v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration
78   - ?.deviceRpcRequestProtoSchema,
  90 + ?.deviceRpcRequestProtoSchema == null
  91 + ? deviceRpcRequestProtoSchemaData
  92 + : v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration
  93 + ?.deviceRpcRequestProtoSchema,
79 94 deviceRpcResponseProtoSchema:
80 95 v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration
81   - ?.deviceRpcResponseProtoSchema,
  96 + ?.deviceRpcResponseProtoSchema == null
  97 + ? deviceRpcResponseProtoSchemaData
  98 + : v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration
  99 + ?.deviceRpcResponseProtoSchema,
82 100 });
83 101 };
84 102 const customClearStepTwoValueFunc = () => {
... ...
... ... @@ -57,7 +57,7 @@ export const MqttSchemas: FormSchema[] = [
57 57 {
58 58 field: 'transportPayloadType',
59 59 component: 'Select',
60   - label: '设备Payload',
  60 + label: '设备信息',
61 61 defaultValue: 'JSON',
62 62 componentProps: {
63 63 options: [
... ... @@ -180,3 +180,51 @@ export const MqttSchemas: FormSchema[] = [
180 180 ifShow: ({ values }) => isProtobuf(values.transportPayloadType),
181 181 },
182 182 ];
  183 +
  184 +export const deviceTelemetryProtoSchemaData = `
  185 +syntax ="proto3";
  186 +package telemetry;
  187 +
  188 +message SensorDataReading {
  189 + optional double temperature = 1;
  190 + optional double humidity = 2;
  191 + InnerObject innerObject = 3;
  192 + message InnerObject {
  193 + optional string key1 = 1;
  194 + optional bool key2 = 2;
  195 + optional double key3 = 3;
  196 + optional int32 key4 = 4;
  197 + optional string key5 = 5;
  198 + }
  199 +}
  200 +`;
  201 +
  202 +export const deviceAttributesProtoSchemaData = `
  203 +syntax ="proto3";
  204 +package attributes;
  205 +
  206 +message SensorConfiguration {
  207 + optional string firmwareVersion = 1;
  208 + optional string serialNumber = 2;
  209 +}
  210 +`;
  211 +
  212 +export const deviceRpcRequestProtoSchemaData = `
  213 +syntax ="proto3";
  214 +package rpc;
  215 +
  216 +message RpcRequestMsg {
  217 + optional string method = 1;
  218 + optional int32 requestId = 2;
  219 + optional string params = 3;
  220 +}
  221 +`;
  222 +
  223 +export const deviceRpcResponseProtoSchemaData = `
  224 +syntax ="proto3";
  225 +package rpc;
  226 +
  227 +message RpcResponseMsg {
  228 + optional string payload = 1;
  229 +}
  230 +`;
... ...
... ... @@ -16,7 +16,13 @@
16 16 <script lang="ts">
17 17 import { defineComponent, reactive } from 'vue';
18 18 import { BasicForm, useForm } from '/@/components/Form';
19   - import { MqttSchemas } from './Mqtt';
  19 + import {
  20 + MqttSchemas,
  21 + deviceTelemetryProtoSchemaData,
  22 + deviceAttributesProtoSchemaData,
  23 + deviceRpcRequestProtoSchemaData,
  24 + deviceRpcResponseProtoSchemaData,
  25 + } from './Mqtt';
20 26 import { Alert, Divider, Descriptions } from 'ant-design-vue';
21 27
22 28 export default defineComponent({
... ... @@ -56,13 +62,21 @@
56 62 setFieldsValue({
57 63 transportPayloadType: v?.transportPayloadTypeConfiguration?.transportPayloadType,
58 64 deviceTelemetryProtoSchema:
59   - v?.transportPayloadTypeConfiguration?.deviceTelemetryProtoSchema,
  65 + v?.transportPayloadTypeConfiguration?.deviceTelemetryProtoSchema == null
  66 + ? deviceTelemetryProtoSchemaData
  67 + : v?.transportPayloadTypeConfiguration?.deviceTelemetryProtoSchema,
60 68 deviceAttributesProtoSchema:
61   - v?.transportPayloadTypeConfiguration?.deviceAttributesProtoSchema,
  69 + v?.transportPayloadTypeConfiguration?.deviceAttributesProtoSchema == null
  70 + ? deviceAttributesProtoSchemaData
  71 + : v?.transportPayloadTypeConfiguration?.deviceAttributesProtoSchema,
62 72 deviceRpcRequestProtoSchema:
63   - v?.transportPayloadTypeConfiguration?.deviceRpcRequestProtoSchema,
  73 + v?.transportPayloadTypeConfiguration?.deviceRpcRequestProtoSchema == null
  74 + ? deviceRpcRequestProtoSchemaData
  75 + : v?.transportPayloadTypeConfiguration?.deviceRpcRequestProtoSchema,
64 76 deviceRpcResponseProtoSchema:
65   - v?.transportPayloadTypeConfiguration?.deviceRpcResponseProtoSchema,
  77 + v?.transportPayloadTypeConfiguration?.deviceRpcResponseProtoSchema == null
  78 + ? deviceRpcResponseProtoSchemaData
  79 + : v?.transportPayloadTypeConfiguration?.deviceRpcResponseProtoSchema,
66 80 enableCompatibilityWithJsonPayloadFormat:
67 81 v?.transportPayloadTypeConfiguration?.enableCompatibilityWithJsonPayloadFormat,
68 82 useJsonPayloadFormatForDefaultDownlinkTopics:
... ...
... ... @@ -6,7 +6,7 @@ import { copyTransFun } from '/@/utils/fnUtils';
6 6 import { Tag } from 'ant-design-vue';
7 7
8 8 export enum IsOrgEnum {
9   - IS_ORG_ENUM = '1',
  9 + IS_ORG_ENUM = 1,
10 10 }
11 11 export const isOrg = (type: string) => {
12 12 return type === IsOrgEnum.IS_ORG_ENUM;
... ... @@ -46,7 +46,7 @@ export const columns: BasicColumn[] = [
46 46 width: 200,
47 47 customRender: ({ record }) => {
48 48 const status = record.status;
49   - const enable = status === '已发布' ? '已发布' : status === '草稿' ? '草稿' : '其他';
  49 + const enable = status === 0 ? '已发布' : status === 1 ? '草稿' : '其他';
50 50 const color = enable === '已发布' ? 'green' : enable === '草稿' ? 'yellow' : 'red';
51 51 const text = enable === '已发布' ? '已发布' : enable === '草稿' ? '草稿' : '其他';
52 52 return h(Tag, { color }, () => text);
... ... @@ -113,8 +113,8 @@ export const formSchema: FormSchema[] = [
113 113 componentProps: {
114 114 placeholder: '接收者',
115 115 options: [
116   - { label: '全部', value: '0' },
117   - { label: '组织', value: '1' },
  116 + { label: '全部', value: 0 },
  117 + { label: '组织', value: 1 },
118 118 ],
119 119 },
120 120 },
... ...
... ... @@ -15,21 +15,23 @@
15 15 icon: 'ant-design:eye-outlined',
16 16 onClick: handleView.bind(null, record),
17 17 ifShow: (_action) => {
18   - return record.status === '已发布';
  18 + return record.status === 1 && rolePermission == 'CUSTOMER_USER';
19 19 },
20 20 },
21 21 {
22 22 label: '编辑',
23 23 icon: 'clarity:note-edit-line',
24 24 onClick: handleEdit.bind(null, record),
  25 + // auth: 'isTenant' || 'isCustomer',
25 26 ifShow: (_action) => {
26   - return record.status === '草稿';
  27 + return record.status === 0 && record.creator == userId;
27 28 },
28 29 },
29 30 {
30 31 label: '删除',
31 32 icon: 'ant-design:delete-outlined',
32 33 color: 'error',
  34 + ifShow: record.creator == userId || record.tenantId == tenantId,
33 35 popConfirm: {
34 36 title: '是否确认删除',
35 37 confirm: handleDeleteOrBatchDelete.bind(null, record),
... ... @@ -48,7 +50,7 @@
48 50 </div>
49 51 </template>
50 52 <script lang="ts">
51   - import { defineComponent, ref } from 'vue';
  53 + import { defineComponent, ref, computed } from 'vue';
52 54 import { BasicTable, useTable, TableAction } from '/@/components/Table';
53 55 import { useDrawer } from '/@/components/Drawer';
54 56 import NotifyManagerDrawer from './useDrawer.vue';
... ... @@ -56,13 +58,26 @@
56 58 import { columns, searchFormSchema } from './config.d';
57 59 import { notifyGetTableApi, notifyDeleteApi } from '/@/api/stationnotification/stationnotifyApi';
58 60 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
  61 + import { USER_INFO_KEY } from '/@/enums/cacheEnum';
  62 + import { getAuthCache } from '/@/utils/auth';
  63 + import { RoleEnum } from '/@/enums/roleEnum';
  64 + import { usePermission } from '/@/hooks/web/usePermission';
  65 + import { useUserStore } from '/@/store/modules/user';
  66 +
59 67 export default defineComponent({
60 68 name: 'Notificationmannager',
61 69 components: { BasicTable, NotifyManagerDrawer, TableAction, tableViewChild },
62 70 setup() {
  71 + const { hasPermission } = usePermission();
  72 + const userStore = useUserStore();
  73 + const isTenant = computed(() => userStore.getRoleList.includes(RoleEnum.TENANT_ADMIN));
  74 + const isCustomer = computed(() => userStore.getRoleList.includes(RoleEnum.CUSTOMER_USER));
  75 + const userInfo: any = getAuthCache(USER_INFO_KEY);
  76 + const userId = userInfo.userId;
  77 + const tenantId = userInfo.tenantId;
  78 + const rolePermission: string = userInfo.roles[0];
63 79 const [registerDrawer, { openDrawer }] = useDrawer();
64 80 const [registerAdd, { openDrawer: openDrawerAdd }] = useDrawer();
65   -
66 81 // 批量删除
67 82 const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions } = useBatchDelete(
68 83 notifyDeleteApi,
... ... @@ -123,6 +138,12 @@
123 138 handleSuccess,
124 139 handleDeleteOrBatchDelete,
125 140 NotifyManagerDrawerRef,
  141 + rolePermission,
  142 + userId,
  143 + tenantId,
  144 + hasPermission,
  145 + isTenant,
  146 + isCustomer,
126 147 };
127 148 },
128 149 });
... ...
... ... @@ -46,8 +46,8 @@
46 46 //编辑
47 47 if (data.isUpdate) {
48 48 noticeId.value = data.record.id;
49   - Reflect.set(data.record, 'receiverType', data.record.receiverType === '全部' ? '0' : '1');
50   - if (data.record.receiverType === '1') {
  49 + Reflect.set(data.record, 'receiverType', data.record.receiverType === '全部' ? 0 : 1);
  50 + if (data.record.receiverType === 1) {
51 51 if (!data.record.pointId.length) return;
52 52 const organizationId = data.record.pointId.split(',');
53 53 Reflect.set(data.record, 'organizationId', organizationId);
... ... @@ -60,7 +60,7 @@
60 60 const valid = await validate();
61 61 if (!valid) return;
62 62 const field = getFieldsValue();
63   - const pointId = field.receiverType === '1' ? field.organizationId + '' : null;
  63 + const pointId = field.receiverType === 1 ? field.organizationId + '' : null;
64 64 // 新增情况
65 65 try {
66 66 const editNotice = {
... ... @@ -78,7 +78,7 @@
78 78 const handleSaveDraft = async () => {
79 79 await validate();
80 80 const field = getFieldsValue();
81   - const pointId = field.receiverType === '1' ? field.organizationId + '' : null;
  81 + const pointId = field.receiverType === 1 ? field.organizationId + '' : null;
82 82 if (!unref(isUpdate)) {
83 83 const saveDraft = {
84 84 ...field,
... ...