Commit da9fcd945573636bde8d82d111ce29aa0b05bcff
Merge branch 'sqy_dev' into 'main'
fix:修改租户管理bug,修改站内通知的问题,修改设备更改 See merge request huang/yun-teng-iot-front!42
Showing
12 changed files
with
56 additions
and
154 deletions
| ... | ... | @@ -4,7 +4,7 @@ import { Rule } from 'ant-design-vue/lib/form/interface'; |
| 4 | 4 | * |
| 5 | 5 | */ |
| 6 | 6 | |
| 7 | -// 手机号验证 | |
| 7 | +// 数字验证 | |
| 8 | 8 | export const numberRule: Rule[] = [ |
| 9 | 9 | { |
| 10 | 10 | required: true, |
| ... | ... | @@ -51,3 +51,12 @@ export const emailRule: Rule[] = [ |
| 51 | 51 | validateTrigger: 'blur', |
| 52 | 52 | }, |
| 53 | 53 | ]; |
| 54 | + | |
| 55 | +// 中文正则 | |
| 56 | +export const ChineseRegexp = /[\u4E00-\u9FA5]/g; | |
| 57 | + | |
| 58 | +// 电子邮箱正则 | |
| 59 | +export const EmailRegexp = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/; | |
| 60 | + | |
| 61 | +// 手机号正则 | |
| 62 | +export const PhoneRegexp = /^[1][3,4,5,6,7,8,9][0-9]{9}$/; | ... | ... |
| 1 | 1 | import { FormSchema } from '/@/components/Form'; |
| 2 | 2 | import { BasicColumn } from '/@/components/Table'; |
| 3 | +import { DeviceTypeEnum } from '/@/api/device/model/deviceModel'; | |
| 4 | + | |
| 3 | 5 | export const columns: BasicColumn[] = [ |
| 4 | 6 | { |
| 5 | 7 | title: '设备名称', |
| ... | ... | @@ -24,12 +26,19 @@ export const columns: BasicColumn[] = [ |
| 24 | 26 | title: '设备类型', |
| 25 | 27 | dataIndex: 'deviceType', |
| 26 | 28 | key: 'deviceType', |
| 29 | + customRender({ text }) { | |
| 30 | + return text === DeviceTypeEnum.GATEWAY | |
| 31 | + ? '网关设备' | |
| 32 | + : text == DeviceTypeEnum.DIRECT_CONNECTION | |
| 33 | + ? '直连设备' | |
| 34 | + : '网关子设备'; | |
| 35 | + }, | |
| 27 | 36 | }, |
| 28 | 37 | { |
| 29 | 38 | title: '描述', |
| 30 | - dataIndex: 'label', | |
| 39 | + dataIndex: 'description', | |
| 31 | 40 | width: 180, |
| 32 | - key: 'label', | |
| 41 | + key: 'description', | |
| 33 | 42 | }, |
| 34 | 43 | ]; |
| 35 | 44 | ... | ... |
| ... | ... | @@ -15,7 +15,7 @@ |
| 15 | 15 | ><RealTimeData |
| 16 | 16 | /></TabPane> |
| 17 | 17 | <TabPane key="3" tab="告警"><Alarm :id="deviceId" /></TabPane> |
| 18 | - <TabPane key="4" tab="子设备" v-if="deviceDetail?.deviceType === 'SENSOR'" | |
| 18 | + <TabPane key="4" tab="子设备" v-if="deviceDetail?.deviceType === 'GATEWAY'" | |
| 19 | 19 | ><ChildDevice |
| 20 | 20 | /></TabPane> |
| 21 | 21 | </Tabs> | ... | ... |
| ... | ... | @@ -57,7 +57,7 @@ |
| 57 | 57 | const DeviceStep2Ref = ref<InstanceType<typeof DeviceStep2>>(); |
| 58 | 58 | const { createMessage } = useMessage(); |
| 59 | 59 | const current = ref(0); |
| 60 | - const isUpdate = ref(true); | |
| 60 | + const isUpdate = ref<Boolean>(); | |
| 61 | 61 | const deviceInfo = ref({}); |
| 62 | 62 | const getTitle = computed(() => (!unref(isUpdate) ? '新增设备' : '编辑设备')); |
| 63 | 63 | // 所有参数 |
| ... | ... | @@ -68,17 +68,15 @@ |
| 68 | 68 | DeviceStep1Ref?.value?.parentSetFieldsValue(data.record); |
| 69 | 69 | DeviceStep1Ref?.value?.parentSetFieldsValue({ |
| 70 | 70 | profile: data.record.deviceProfile.name, |
| 71 | - remark: data.record.deviceInfo.description, | |
| 72 | 71 | profileId: data.record.profileId, |
| 73 | 72 | deviceType: data.record.deviceType, |
| 74 | 73 | }); |
| 75 | 74 | deviceInfo.value = data.record.deviceInfo; |
| 76 | 75 | } else { |
| 77 | - DeviceStep1Ref?.value?.parentResetDevicePic(); | |
| 78 | 76 | DeviceStep1Ref?.value?.parentResetPositionState(); |
| 79 | 77 | deviceInfo.value = {}; |
| 80 | 78 | } |
| 81 | - isUpdate.value = !!data?.isUpdate; | |
| 79 | + isUpdate.value = data?.isUpdate; | |
| 82 | 80 | }); |
| 83 | 81 | |
| 84 | 82 | // 上一步 |
| ... | ... | @@ -95,9 +93,11 @@ |
| 95 | 93 | stepState.value = { ...stepState, ...step2Values }; |
| 96 | 94 | } |
| 97 | 95 | function handleCancel() { |
| 96 | + if (unref(isUpdate)) { | |
| 97 | + DeviceStep1Ref?.value?.parentResetDevicePic(deviceInfo.value); | |
| 98 | + } | |
| 98 | 99 | current.value = 0; |
| 99 | 100 | DeviceStep1Ref?.value?.resetFields(); |
| 100 | - DeviceStep1Ref.value?.parentResetDevicePic(); | |
| 101 | 101 | DeviceStep2Ref?.value?.resetFields(); |
| 102 | 102 | } |
| 103 | 103 | // 提交 | ... | ... |
| ... | ... | @@ -230,8 +230,8 @@ |
| 230 | 230 | } |
| 231 | 231 | |
| 232 | 232 | // 父组件重置图片 |
| 233 | - function parentResetDevicePic() { | |
| 234 | - devicePic.value = ''; | |
| 233 | + function parentResetDevicePic(deviceInfo) { | |
| 234 | + devicePic.value = deviceInfo.avatar; | |
| 235 | 235 | } |
| 236 | 236 | // 父组件重置位置 |
| 237 | 237 | function parentResetPositionState() { | ... | ... |
| ... | ... | @@ -134,6 +134,7 @@ export const formSchema: FormSchema[] = [ |
| 134 | 134 | component: 'ApiTreeSelect', |
| 135 | 135 | required: true, |
| 136 | 136 | componentProps: { |
| 137 | + multiple: true, | |
| 137 | 138 | api: async () => { |
| 138 | 139 | const data = await getOrganizationList(); |
| 139 | 140 | copyTransFun(data as any as any[]); | ... | ... |
| ... | ... | @@ -37,126 +37,6 @@ |
| 37 | 37 | components: { BasicDrawer, BasicForm, Button }, |
| 38 | 38 | emits: ['success', 'register'], |
| 39 | 39 | setup(_, { emit }) { |
| 40 | - // const isUpdate = ref(true); | |
| 41 | - // // const pointArray = ref([] as any); | |
| 42 | - // // const isJudgeWherePoint = ref(); | |
| 43 | - // // const newArray = ref([]); | |
| 44 | - // let getId = ref(''); | |
| 45 | - // // let getOranAndDeptId = ref(null); | |
| 46 | - // // let getAllData: any = reactive({}); | |
| 47 | - // // let getAllEditData: any = reactive({}); | |
| 48 | - // // let postAllEditData: any = reactive({}); | |
| 49 | - // const [registerForm, { setFieldsValue, resetFields, validate, getFieldsValue }] = useForm({ | |
| 50 | - // labelWidth: 120, | |
| 51 | - // schemas: formSchema, | |
| 52 | - // showActionButtonGroup: false, | |
| 53 | - // }); | |
| 54 | - // const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { | |
| 55 | - // await resetFields(); | |
| 56 | - // setDrawerProps({ confirmLoading: false }); | |
| 57 | - // isUpdate.value = !!data?.isUpdate; | |
| 58 | - // //编辑 | |
| 59 | - // if (unref(isUpdate)) { | |
| 60 | - // getId.value = data.record.id; | |
| 61 | - // await setFieldsValue({ | |
| 62 | - // ...data.record, | |
| 63 | - // receiverType: data.record.receiverType === '全部' ? '0' : '1', | |
| 64 | - // organizationId: isDeptId.value, | |
| 65 | - // }); | |
| 66 | - // } | |
| 67 | - // }); | |
| 68 | - // const getTitle = computed(() => (!unref(isUpdate) ? '新增通知' : '编辑通知')); | |
| 69 | - | |
| 70 | - // watch(selectWhere, (nV) => { | |
| 71 | - // isJudgeWherePoint.value = nV; | |
| 72 | - // }); | |
| 73 | - // watch(isDeptId, (nV) => { | |
| 74 | - // getOranAndDeptId.value = nV; | |
| 75 | - // }); | |
| 76 | - // // 发布 | |
| 77 | - // async function handleSend() { | |
| 78 | - // // 直接新增通知 | |
| 79 | - // if (!unref(isUpdate)) { | |
| 80 | - // const values = await validate(); | |
| 81 | - // Object.assign(getAllData, values); | |
| 82 | - // switch (unref(isJudgeWherePoint)) { | |
| 83 | - // case '0': | |
| 84 | - // pointArray.value = []; | |
| 85 | - // break; | |
| 86 | - // case '1': | |
| 87 | - // if (pointArray.value.length === 0) { | |
| 88 | - // pointArray.value.push(getOranAndDeptId.value); | |
| 89 | - // } | |
| 90 | - // break; | |
| 91 | - // } | |
| 92 | - // getAllData.pointId = pointArray.value; | |
| 93 | - // await notifyAddLeaseApi(getAllData); | |
| 94 | - | |
| 95 | - // resetFields(); | |
| 96 | - // } else { | |
| 97 | - // const values = await validate(); | |
| 98 | - // getAllEditData = values; | |
| 99 | - // getAllEditData.id = unref(getId); | |
| 100 | - // switch (unref(isJudgeWherePoint)) { | |
| 101 | - // case '0': | |
| 102 | - // pointArray.value = []; | |
| 103 | - // break; | |
| 104 | - // case '1': | |
| 105 | - // if (pointArray.value.length === 0) { | |
| 106 | - // pointArray.value.push(getOranAndDeptId.value); | |
| 107 | - // } | |
| 108 | - // break; | |
| 109 | - // } | |
| 110 | - // getAllEditData.pointId = pointArray.value; | |
| 111 | - // Object.assign(postAllEditData, getAllEditData); | |
| 112 | - // await notifyAddLeaseApi(postAllEditData); | |
| 113 | - // } | |
| 114 | - // closeDrawer(); | |
| 115 | - // createMessage.success('发布成功'); | |
| 116 | - // emit('success'); | |
| 117 | - // } | |
| 118 | - // // 保存草稿 | |
| 119 | - // async function handleSaveDraft() { | |
| 120 | - // if (!unref(isUpdate)) { | |
| 121 | - // const values = await validate(); | |
| 122 | - // Object.assign(getAllData, values); | |
| 123 | - // switch (isJudgeWherePoint.value) { | |
| 124 | - // case '0': | |
| 125 | - // pointArray.value = []; | |
| 126 | - // break; | |
| 127 | - // case '1': | |
| 128 | - // if (pointArray.value.length === 0) { | |
| 129 | - // pointArray.value.push(getOranAndDeptId.value); | |
| 130 | - // } | |
| 131 | - // break; | |
| 132 | - // } | |
| 133 | - // getAllData.pointId = pointArray.value; | |
| 134 | - // await notifyAddDraftApi(getAllData); | |
| 135 | - | |
| 136 | - // resetFields(); | |
| 137 | - // } else { | |
| 138 | - // const values = await validate(); | |
| 139 | - // getAllEditData = values; | |
| 140 | - // getAllEditData.id = getId.value; | |
| 141 | - // switch (isJudgeWherePoint.value) { | |
| 142 | - // case '0': | |
| 143 | - // pointArray.value = []; | |
| 144 | - // break; | |
| 145 | - // case '1': | |
| 146 | - // if (pointArray.value.length === 0) { | |
| 147 | - // pointArray.value.push(getOranAndDeptId.value); | |
| 148 | - // } | |
| 149 | - // break; | |
| 150 | - // } | |
| 151 | - // getAllEditData.pointId = pointArray.value; | |
| 152 | - // Object.assign(postAllEditData, getAllEditData); | |
| 153 | - // await notifyAddDraftApi(postAllEditData); | |
| 154 | - // } | |
| 155 | - // createMessage.success('保存草稿成功'); | |
| 156 | - // closeDrawer(); | |
| 157 | - // emit('success'); | |
| 158 | - // } | |
| 159 | - // 取消 | |
| 160 | 40 | const { createMessage } = useMessage(); |
| 161 | 41 | const isUpdate = ref<Boolean>(); |
| 162 | 42 | const getTitle = computed(() => (!unref(isUpdate) ? '新增通知' : '编辑通知')); |
| ... | ... | @@ -167,22 +47,24 @@ |
| 167 | 47 | showActionButtonGroup: false, |
| 168 | 48 | }); |
| 169 | 49 | const [registerDrawer, { closeDrawer }] = useDrawerInner(async (data) => { |
| 50 | + await resetFields(); | |
| 170 | 51 | isUpdate.value = data.isUpdate; |
| 171 | 52 | //编辑 |
| 172 | - if (unref(isUpdate)) { | |
| 53 | + if (data.isUpdate) { | |
| 173 | 54 | noticeId.value = data.record.id; |
| 174 | - console.log(data.record); | |
| 175 | - await setFieldsValue({ | |
| 176 | - ...data.record, | |
| 177 | - receiverType: data.record.receiverType === '全部' ? '0' : '1', | |
| 178 | - }); | |
| 55 | + Reflect.set(data.record, 'receiverType', data.record.receiverType === '全部' ? '0' : '1'); | |
| 56 | + if (data.record.receiverType === '1') { | |
| 57 | + const organizationId = data.record.pointId.split(','); | |
| 58 | + Reflect.set(data.record, 'organizationId', organizationId); | |
| 59 | + } | |
| 60 | + setFieldsValue(data.record); | |
| 179 | 61 | } |
| 180 | 62 | }); |
| 181 | 63 | // 发布通知 |
| 182 | 64 | const handleSend = async () => { |
| 183 | 65 | await validate(); |
| 184 | 66 | const field = getFieldsValue(); |
| 185 | - const pointId = field.receiverType === '1' ? [field.organizationId] : []; | |
| 67 | + const pointId = field.receiverType === '1' ? field.organizationId + '' : null; | |
| 186 | 68 | // 新增情况 |
| 187 | 69 | if (!unref(isUpdate)) { |
| 188 | 70 | const addNotice = { |
| ... | ... | @@ -206,7 +88,7 @@ |
| 206 | 88 | const handleSaveDraft = async () => { |
| 207 | 89 | await validate(); |
| 208 | 90 | const field = getFieldsValue(); |
| 209 | - const pointId = field.receiverType === '1' ? [field.organizationId] : []; | |
| 91 | + const pointId = field.receiverType === '1' ? field.organizationId + '' : null; | |
| 210 | 92 | if (!unref(isUpdate)) { |
| 211 | 93 | const saveDraft = { |
| 212 | 94 | ...field, | ... | ... |
| ... | ... | @@ -66,9 +66,7 @@ |
| 66 | 66 | console.log(result); |
| 67 | 67 | Reflect.set(data.record, 'roleIds', result); |
| 68 | 68 | Reflect.set(data.record, 'password', '******'); |
| 69 | - setFieldsValue({ | |
| 70 | - ...data.record, | |
| 71 | - }); | |
| 69 | + setFieldsValue(data.record); | |
| 72 | 70 | }); |
| 73 | 71 | const organizationParams = new RoleOrOrganizationParam(rowId.value, false, true); |
| 74 | 72 | checkGroup.value = await findCurrentUserRelation(organizationParams); | ... | ... |
| 1 | 1 | import { getAllRoleList, isAccountExist } from '/@/api/system/system'; |
| 2 | 2 | import { BasicColumn } from '/@/components/Table'; |
| 3 | 3 | import { FormSchema } from '/@/components/Table'; |
| 4 | -import { emailRule, phoneRule } from '/@/utils/rules'; | |
| 4 | +import { emailRule, phoneRule, ChineseRegexp, EmailRegexp } from '/@/utils/rules'; | |
| 5 | 5 | |
| 6 | 6 | export const columns: BasicColumn[] = [ |
| 7 | 7 | { |
| ... | ... | @@ -68,14 +68,14 @@ export const accountFormSchema: FormSchema[] = [ |
| 68 | 68 | dynamicRules: ({ values }) => { |
| 69 | 69 | return [ |
| 70 | 70 | { |
| 71 | - message: '请输入用户名', | |
| 72 | - required: true, | |
| 73 | - }, | |
| 74 | - { | |
| 75 | 71 | validator(_, value) { |
| 76 | 72 | return new Promise((resolve, reject) => { |
| 77 | 73 | if (value == '') { |
| 78 | 74 | reject('请输入用户名'); |
| 75 | + } else if (ChineseRegexp.test(value)) { | |
| 76 | + reject('用户名不能含有中文'); | |
| 77 | + } else if (EmailRegexp.test(value)) { | |
| 78 | + reject('用户名不能为电子邮箱格式'); | |
| 79 | 79 | } else { |
| 80 | 80 | if (values.username != undefined && values.id == undefined) { |
| 81 | 81 | isAccountExist(value).then((data) => { | ... | ... |
| ... | ... | @@ -37,26 +37,26 @@ |
| 37 | 37 | }, |
| 38 | 38 | { |
| 39 | 39 | field: 'username', |
| 40 | - label: '账号:', | |
| 40 | + label: '账号', | |
| 41 | 41 | required: true, |
| 42 | 42 | component: 'Input', |
| 43 | 43 | }, |
| 44 | 44 | { |
| 45 | 45 | field: 'realName', |
| 46 | - label: '真实名字:', | |
| 46 | + label: '真实名字', | |
| 47 | 47 | required: true, |
| 48 | 48 | component: 'Input', |
| 49 | 49 | }, |
| 50 | 50 | { |
| 51 | 51 | field: 'phoneNumber', |
| 52 | - label: '电话号码:', | |
| 52 | + label: '电话号码', | |
| 53 | 53 | required: true, |
| 54 | 54 | component: 'Input', |
| 55 | 55 | rules: phoneRule, |
| 56 | 56 | }, |
| 57 | 57 | { |
| 58 | 58 | field: 'email', |
| 59 | - label: '邮件:', | |
| 59 | + label: '邮件', | |
| 60 | 60 | required: true, |
| 61 | 61 | component: 'Input', |
| 62 | 62 | rules: emailRule, |
| ... | ... | @@ -86,11 +86,14 @@ |
| 86 | 86 | await resetFields(); |
| 87 | 87 | isUpdate.value = !!data?.isUpdate; |
| 88 | 88 | tenantId.value = data?.tenantId; |
| 89 | - await updateSchema({ field: 'title', componentProps: { disabled: false } }); | |
| 89 | + | |
| 90 | 90 | if (unref(isUpdate)) { |
| 91 | + await updateSchema({ field: 'username', componentProps: { disabled: true } }); | |
| 91 | 92 | await setFieldsValue({ |
| 92 | 93 | ...data.record, |
| 93 | 94 | }); |
| 95 | + } else { | |
| 96 | + await updateSchema({ field: 'username', componentProps: { disabled: false } }); | |
| 94 | 97 | } |
| 95 | 98 | } |
| 96 | 99 | ); | ... | ... |