Commit 9580973a97edb89344987cf0356d55b30e615525
Merge branch 'ft-dev' into 'main'
feat:新增租户配置的创建时间字段,fix:修复消息配置编辑控制台警告问题 See merge request huang/yun-teng-iot-front!95
Showing
9 changed files
with
140 additions
and
75 deletions
| 1 | // 时间戳转时间 | 1 | // 时间戳转时间 |
| 2 | -export const transformTime = (timestamp = +new Date()) => { | ||
| 3 | - if (timestamp) { | ||
| 4 | - const time = new Date(timestamp); | ||
| 5 | - const y = time.getFullYear(); //getFullYear方法以四位数字返回年份 | ||
| 6 | - const M = time.getMonth() + 1; // getMonth方法从 Date 对象返回月份 (0 ~ 11),返回结果需要手动加一 | ||
| 7 | - const d = time.getDate(); // getDate方法从 Date 对象返回一个月中的某一天 (1 ~ 31) | ||
| 8 | - // const h = time.getHours(); // getHours方法返回 Date 对象的小时 (0 ~ 23) | ||
| 9 | - // const m = time.getMinutes(); // getMinutes方法返回 Date 对象的分钟 (0 ~ 59) | ||
| 10 | - // const s = time.getSeconds(); // getSeconds方法返回 Date 对象的秒数 (0 ~ 59) | ||
| 11 | - // h + ':' + m + ':' + s | ||
| 12 | - return y + '-' + M + '-' + d; | ||
| 13 | - } else { | ||
| 14 | - return ''; | ||
| 15 | - } | 2 | +export const transformTime = (str) => { |
| 3 | + const n = parseInt(str); | ||
| 4 | + const D = new Date(n); | ||
| 5 | + const year = D.getFullYear(); //四位数年份 | ||
| 6 | + let month = D.getMonth() + 1; //月份(0-11),0为一月份 | ||
| 7 | + month = month < 10 ? '0' + month : month; | ||
| 8 | + let day = D.getDate(); //月的某一天(1-31) | ||
| 9 | + day = day < 10 ? '0' + day : day; | ||
| 10 | + let hours = D.getHours(); //小时(0-23) | ||
| 11 | + hours = hours < 10 ? '0' + hours : hours; | ||
| 12 | + let minutes = D.getMinutes(); //分钟(0-59) | ||
| 13 | + minutes = minutes < 10 ? '0' + minutes : minutes; | ||
| 14 | + const now_time = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes; | ||
| 15 | + return now_time; | ||
| 16 | }; | 16 | }; |
| @@ -36,12 +36,33 @@ | @@ -36,12 +36,33 @@ | ||
| 36 | setDrawerProps({ confirmLoading: false }); | 36 | setDrawerProps({ confirmLoading: false }); |
| 37 | isUpdate.value = !!data?.isUpdate; | 37 | isUpdate.value = !!data?.isUpdate; |
| 38 | if (unref(isUpdate)) { | 38 | if (unref(isUpdate)) { |
| 39 | - const config = data.record.config; | ||
| 40 | - for (const key in config) { | ||
| 41 | - Reflect.set(data.record, key + '', config[key]); | ||
| 42 | - } | 39 | + console.log(data); |
| 40 | + // const config = data.record.config; | ||
| 41 | + // for (const key in config) { | ||
| 42 | + // Reflect.set(data.record, key + '', config[key]); | ||
| 43 | + // } | ||
| 44 | + // await setFieldsValue({ | ||
| 45 | + // ...data.record, | ||
| 46 | + // }); | ||
| 43 | await setFieldsValue({ | 47 | await setFieldsValue({ |
| 44 | - ...data.record, | 48 | + accessKeyId: data.record.config.accessKeyId, |
| 49 | + accessKeySecret: data.record.config.accessKeySecret, | ||
| 50 | + platformTypeDictText: data.record.platformTypeDictText, | ||
| 51 | + messageTypeDictText: data.record.messageTypeDictText, | ||
| 52 | + messageType: data.record.messageType, | ||
| 53 | + platformType: data.record.platformType, | ||
| 54 | + configName: data.record.configName, | ||
| 55 | + createTime: data.record.createTime, | ||
| 56 | + creator: data.record.creator, | ||
| 57 | + enabled: data.record.enabled, | ||
| 58 | + id: data.record.id, | ||
| 59 | + key: data.record.key, | ||
| 60 | + pendingStatus: data.record.pendingStatus, | ||
| 61 | + remark: data.record.remark, | ||
| 62 | + status: data.record.status, | ||
| 63 | + tenantId: data.record.tenantId, | ||
| 64 | + updateTime: data.record.updateTime, | ||
| 65 | + updater: data.record.updater, | ||
| 45 | }); | 66 | }); |
| 46 | } | 67 | } |
| 47 | }); | 68 | }); |
| @@ -73,7 +73,6 @@ export const searchFormSchema: FormSchema[] = [ | @@ -73,7 +73,6 @@ export const searchFormSchema: FormSchema[] = [ | ||
| 73 | { | 73 | { |
| 74 | field: 'messageType', | 74 | field: 'messageType', |
| 75 | label: '消息类型', | 75 | label: '消息类型', |
| 76 | - required: true, | ||
| 77 | component: 'ApiSelect', | 76 | component: 'ApiSelect', |
| 78 | colProps: { | 77 | colProps: { |
| 79 | span: 6, | 78 | span: 6, |
| @@ -54,7 +54,6 @@ export const searchFormSchema: FormSchema[] = [ | @@ -54,7 +54,6 @@ export const searchFormSchema: FormSchema[] = [ | ||
| 54 | label: '发送手机', | 54 | label: '发送手机', |
| 55 | component: 'Input', | 55 | component: 'Input', |
| 56 | colProps: { span: 6 }, | 56 | colProps: { span: 6 }, |
| 57 | - rules: phoneRule, | ||
| 58 | componentProps: { | 57 | componentProps: { |
| 59 | maxLength: 36, | 58 | maxLength: 36, |
| 60 | }, | 59 | }, |
| @@ -49,26 +49,12 @@ export const searchFormSchema: FormSchema[] = [ | @@ -49,26 +49,12 @@ export const searchFormSchema: FormSchema[] = [ | ||
| 49 | maxLength: 255, | 49 | maxLength: 255, |
| 50 | placeholder: '请输入用户名', | 50 | placeholder: '请输入用户名', |
| 51 | }, | 51 | }, |
| 52 | - dynamicRules: () => { | ||
| 53 | - return [ | ||
| 54 | - { | ||
| 55 | - required: false, | ||
| 56 | - validator: (_, value) => { | ||
| 57 | - if (String(value).length > 255) { | ||
| 58 | - return Promise.reject('字数不超过255个字'); | ||
| 59 | - } | ||
| 60 | - return Promise.resolve(); | ||
| 61 | - }, | ||
| 62 | - }, | ||
| 63 | - ]; | ||
| 64 | - }, | ||
| 65 | }, | 52 | }, |
| 66 | { | 53 | { |
| 67 | field: 'realName', | 54 | field: 'realName', |
| 68 | label: '姓名', | 55 | label: '姓名', |
| 69 | component: 'Input', | 56 | component: 'Input', |
| 70 | colProps: { span: 8 }, | 57 | colProps: { span: 8 }, |
| 71 | - required: true, | ||
| 72 | componentProps: { | 58 | componentProps: { |
| 73 | maxLength: 255, | 59 | maxLength: 255, |
| 74 | placeholder: '请输入姓名', | 60 | placeholder: '请输入姓名', |
| @@ -10,6 +10,7 @@ | @@ -10,6 +10,7 @@ | ||
| 10 | <BasicForm @register="registerForm"> | 10 | <BasicForm @register="registerForm"> |
| 11 | <template #menu="{ model, field }"> | 11 | <template #menu="{ model, field }"> |
| 12 | <BasicTree | 12 | <BasicTree |
| 13 | + v-if="treeData.length > 0" | ||
| 13 | ref="tree" | 14 | ref="tree" |
| 14 | v-model:value="model[field]" | 15 | v-model:value="model[field]" |
| 15 | :treeData="treeData" | 16 | :treeData="treeData" |
| @@ -19,6 +20,7 @@ | @@ -19,6 +20,7 @@ | ||
| 19 | toolbar | 20 | toolbar |
| 20 | title="菜单分配" | 21 | title="菜单分配" |
| 21 | @check="handleCheckClick" | 22 | @check="handleCheckClick" |
| 23 | + :defaultExpandAll="true" | ||
| 22 | /> | 24 | /> |
| 23 | </template> | 25 | </template> |
| 24 | </BasicForm> | 26 | </BasicForm> |
| @@ -4,7 +4,9 @@ import { h } from 'vue'; | @@ -4,7 +4,9 @@ import { h } from 'vue'; | ||
| 4 | import { Switch } from 'ant-design-vue'; | 4 | import { Switch } from 'ant-design-vue'; |
| 5 | import { setRoleStatus } from '/@/api/system/system'; | 5 | import { setRoleStatus } from '/@/api/system/system'; |
| 6 | import { useMessage } from '/@/hooks/web/useMessage'; | 6 | import { useMessage } from '/@/hooks/web/useMessage'; |
| 7 | -import { getAllRoleList } from '/@/api/system/system'; | 7 | +import { getRoleListByPage } from '/@/api/system/system'; |
| 8 | +import { USER_INFO_KEY } from '/@/enums/cacheEnum'; | ||
| 9 | +import { getAuthCache } from '/@/utils/auth'; | ||
| 8 | 10 | ||
| 9 | export const columns: BasicColumn[] = [ | 11 | export const columns: BasicColumn[] = [ |
| 10 | { | 12 | { |
| @@ -34,9 +36,18 @@ export const columns: BasicColumn[] = [ | @@ -34,9 +36,18 @@ export const columns: BasicColumn[] = [ | ||
| 34 | record.pendingStatus = true; | 36 | record.pendingStatus = true; |
| 35 | const newStatus = checked ? 1 : 0; | 37 | const newStatus = checked ? 1 : 0; |
| 36 | const { createMessage } = useMessage(); | 38 | const { createMessage } = useMessage(); |
| 37 | - const data = await getAllRoleList(); | ||
| 38 | - const findById = data.find((f) => f.id == record.id); | ||
| 39 | - if (findById?.id) return createMessage.error(`该租户下面有此用户,无法禁用`); | 39 | + const data = await getRoleListByPage({ |
| 40 | + page: 1, | ||
| 41 | + pageSize: 100, | ||
| 42 | + // roleType: 'CUSTOMER_USER', | ||
| 43 | + }); | ||
| 44 | + const userInfo = (await getAuthCache(USER_INFO_KEY)) as unknown as any; | ||
| 45 | + const findById = data.items.find((f) => { | ||
| 46 | + if (f.id === userInfo.plainRoles[0].roleId) { | ||
| 47 | + return f.id; | ||
| 48 | + } | ||
| 49 | + }); | ||
| 50 | + if (record.id == findById?.id) return createMessage.error(`该租户下面有此客户,无法禁用`); | ||
| 40 | record.pendingStatus = true; | 51 | record.pendingStatus = true; |
| 41 | setRoleStatus(record.id, newStatus) | 52 | setRoleStatus(record.id, newStatus) |
| 42 | .then(() => { | 53 | .then(() => { |
| @@ -112,6 +123,49 @@ export const formSchema: FormSchema[] = [ | @@ -112,6 +123,49 @@ export const formSchema: FormSchema[] = [ | ||
| 112 | { label: '停用', value: 0 }, | 123 | { label: '停用', value: 0 }, |
| 113 | ], | 124 | ], |
| 114 | }, | 125 | }, |
| 126 | + // componentProps({ formModel, formActionType }) { | ||
| 127 | + // const initStatus = formModel.status; | ||
| 128 | + // const { createMessage } = useMessage(); | ||
| 129 | + // let initBoolean = false; | ||
| 130 | + // const { setFieldsValue } = formActionType; | ||
| 131 | + // if (formModel.name !== undefined) { | ||
| 132 | + // initBoolean = true; | ||
| 133 | + // } else if (formModel.name == undefined) { | ||
| 134 | + // initBoolean = false; | ||
| 135 | + // } | ||
| 136 | + // return { | ||
| 137 | + // options: [ | ||
| 138 | + // { label: '启用', value: 1 }, | ||
| 139 | + // { label: '停用', value: 0 }, | ||
| 140 | + // ], | ||
| 141 | + // async onChange(e) { | ||
| 142 | + // // const data = await getAllRoleList(); | ||
| 143 | + // // const findById = data.find((f) => f.id); | ||
| 144 | + // if (!initBoolean) { | ||
| 145 | + // setFieldsValue({ | ||
| 146 | + // status: initStatus, | ||
| 147 | + // }); | ||
| 148 | + // } else { | ||
| 149 | + // if (e == 0 && formModel.name !== undefined) { | ||
| 150 | + // createMessage.error(`该租户下面有此用户,无法停用`); | ||
| 151 | + // setFieldsValue({ | ||
| 152 | + // status: Number(1), | ||
| 153 | + // }); | ||
| 154 | + // } else { | ||
| 155 | + // setFieldsValue({ | ||
| 156 | + // status: initStatus, | ||
| 157 | + // }); | ||
| 158 | + // } | ||
| 159 | + // } | ||
| 160 | + // // if (e == 0) { | ||
| 161 | + // // if (findById?.id) return createMessage.error(`该租户下面有此用户,无法禁用`); | ||
| 162 | + // // setFieldsValue({ | ||
| 163 | + // // status: 1, | ||
| 164 | + // // }); | ||
| 165 | + // // } | ||
| 166 | + // }, | ||
| 167 | + // }; | ||
| 168 | + // }, | ||
| 115 | }, | 169 | }, |
| 116 | { | 170 | { |
| 117 | label: '备注', | 171 | label: '备注', |
| @@ -10,6 +10,7 @@ | @@ -10,6 +10,7 @@ | ||
| 10 | <BasicForm @register="registerForm"> | 10 | <BasicForm @register="registerForm"> |
| 11 | <template #menu="{ model, field }"> | 11 | <template #menu="{ model, field }"> |
| 12 | <BasicTree | 12 | <BasicTree |
| 13 | + v-if="treeData.length > 0" | ||
| 13 | v-model:value="model[field]" | 14 | v-model:value="model[field]" |
| 14 | :treeData="treeData" | 15 | :treeData="treeData" |
| 15 | :replaceFields="{ title: 'menuName' }" | 16 | :replaceFields="{ title: 'menuName' }" |
| @@ -19,6 +20,7 @@ | @@ -19,6 +20,7 @@ | ||
| 19 | ref="tree" | 20 | ref="tree" |
| 20 | title="菜单分配" | 21 | title="菜单分配" |
| 21 | @check="handleCheckClick" | 22 | @check="handleCheckClick" |
| 23 | + :defaultExpandAll="true" | ||
| 22 | /> | 24 | /> |
| 23 | </template> | 25 | </template> |
| 24 | </BasicForm> | 26 | </BasicForm> |
| @@ -35,17 +35,19 @@ | @@ -35,17 +35,19 @@ | ||
| 35 | const { proxy } = getCurrentInstance(); | 35 | const { proxy } = getCurrentInstance(); |
| 36 | const getChildData = ref(null); | 36 | const getChildData = ref(null); |
| 37 | const editGetId: any = ref(''); | 37 | const editGetId: any = ref(''); |
| 38 | - const [registerForm, { validateFields, getFieldsValue, resetFields, setFieldsValue }] = | ||
| 39 | - useForm({ | ||
| 40 | - schemas: formSchema, | ||
| 41 | - showActionButtonGroup: false, | ||
| 42 | - }); | 38 | + const [registerForm, { getFieldsValue, resetFields, setFieldsValue }] = useForm({ |
| 39 | + schemas: formSchema, | ||
| 40 | + showActionButtonGroup: false, | ||
| 41 | + }); | ||
| 43 | const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { | 42 | const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { |
| 44 | //清除表单值 | 43 | //清除表单值 |
| 45 | proxy.$refs.getChildData.funcResetFields(); | 44 | proxy.$refs.getChildData.funcResetFields(); |
| 46 | await resetFields(); | 45 | await resetFields(); |
| 47 | setDrawerProps({ confirmLoading: false }); | 46 | setDrawerProps({ confirmLoading: false }); |
| 48 | isUpdate.value = !!data?.isUpdate; | 47 | isUpdate.value = !!data?.isUpdate; |
| 48 | + if (!unref(isUpdate)) { | ||
| 49 | + editGetId.value = ''; | ||
| 50 | + } | ||
| 49 | //编辑 | 51 | //编辑 |
| 50 | if (unref(isUpdate)) { | 52 | if (unref(isUpdate)) { |
| 51 | parentSetData.value = { ...data.record.profileData.configuration }; | 53 | parentSetData.value = { ...data.record.profileData.configuration }; |
| @@ -58,44 +60,44 @@ | @@ -58,44 +60,44 @@ | ||
| 58 | }); | 60 | }); |
| 59 | const getTitle = computed(() => (!unref(isUpdate) ? '新增租户配置' : '编辑租户配置')); | 61 | const getTitle = computed(() => (!unref(isUpdate) ? '新增租户配置' : '编辑租户配置')); |
| 60 | 62 | ||
| 63 | + const getAllFieldsFunc = () => { | ||
| 64 | + getValuesFormData = getFieldsValue(); | ||
| 65 | + let getChildValues = proxy.$refs.getChildData.getAllFields(); | ||
| 66 | + let profileData1 = { | ||
| 67 | + configuration: getChildValues, | ||
| 68 | + }; | ||
| 69 | + const id: any = { | ||
| 70 | + id: unref(isUpdate) ? editGetId.value : '', | ||
| 71 | + }; | ||
| 72 | + | ||
| 73 | + const createTime = { | ||
| 74 | + createdTime: Date.now(), | ||
| 75 | + }; | ||
| 76 | + | ||
| 77 | + Object.assign( | ||
| 78 | + postAllData, | ||
| 79 | + { | ||
| 80 | + profileData: profileData1, | ||
| 81 | + }, | ||
| 82 | + getValuesFormData, | ||
| 83 | + id, | ||
| 84 | + createTime | ||
| 85 | + ); | ||
| 86 | + if (!unref(isUpdate)) { | ||
| 87 | + delete postAllData.id; | ||
| 88 | + } | ||
| 89 | + }; | ||
| 90 | + | ||
| 61 | async function handleSubmit() { | 91 | async function handleSubmit() { |
| 62 | if (!unref(isUpdate)) { | 92 | if (!unref(isUpdate)) { |
| 63 | - let res = validateFields(); | ||
| 64 | - if (!res) return; | ||
| 65 | - getValuesFormData = getFieldsValue(); | ||
| 66 | - let getChildValues = proxy.$refs.getChildData.getAllFields(); | ||
| 67 | - let profileData1 = { | ||
| 68 | - configuration: getChildValues, | ||
| 69 | - }; | ||
| 70 | - Object.assign( | ||
| 71 | - postAllData, | ||
| 72 | - { | ||
| 73 | - profileData: profileData1, | ||
| 74 | - }, | ||
| 75 | - getValuesFormData | ||
| 76 | - ); | 93 | + getAllFieldsFunc(); |
| 77 | await saveTenantProfileApi(postAllData); | 94 | await saveTenantProfileApi(postAllData); |
| 78 | createMessage.success('租户配置新增成功'); | 95 | createMessage.success('租户配置新增成功'); |
| 79 | closeDrawer(); | 96 | closeDrawer(); |
| 80 | emit('success'); | 97 | emit('success'); |
| 81 | resetFields(); | 98 | resetFields(); |
| 82 | - } | ||
| 83 | - if (unref(isUpdate)) { | ||
| 84 | - let res = validateFields(); | ||
| 85 | - if (!res) return; | ||
| 86 | - getValuesFormData = getFieldsValue(); | ||
| 87 | - getValuesFormData.id = editGetId.value; | ||
| 88 | - let getChildValues = proxy.$refs.getChildData.getAllFields(); | ||
| 89 | - let profileData1 = { | ||
| 90 | - configuration: getChildValues, | ||
| 91 | - }; | ||
| 92 | - Object.assign( | ||
| 93 | - postAllData, | ||
| 94 | - { | ||
| 95 | - profileData: profileData1, | ||
| 96 | - }, | ||
| 97 | - getValuesFormData | ||
| 98 | - ); | 99 | + } else { |
| 100 | + getAllFieldsFunc(); | ||
| 99 | await saveTenantProfileApi(postAllData); | 101 | await saveTenantProfileApi(postAllData); |
| 100 | createMessage.success('租户配置编辑成功'); | 102 | createMessage.success('租户配置编辑成功'); |
| 101 | closeDrawer(); | 103 | closeDrawer(); |