diff --git a/plugin/jetlinks.ts b/plugin/jetlinks.ts index 6edf3d95..47286c81 100644 --- a/plugin/jetlinks.ts +++ b/plugin/jetlinks.ts @@ -100,7 +100,7 @@ const matchComponents: IMatcher[] = [ }, { pattern: /^TimePicker|^TimeRangePicker/, - styleDir: 'TimeTicker' + styleDir: 'TimePicker' }, { pattern: /^Radio/, diff --git a/src/api/account/center.ts b/src/api/account/center.ts index 4946c123..2d86af80 100644 --- a/src/api/account/center.ts +++ b/src/api/account/center.ts @@ -15,7 +15,7 @@ export const unBind_api = (appId: string) => server.post(`/application/sso/${app * @param type 类型 * @param name 值 */ -export const validateField_api = (type: 'username' | 'password', name: string) => server.post(`/user/${type}/_validate`,name,{ +export const validateField_api = (type: 'username' | 'password', name: string) => server.post(`/user/${type}/_validate`,name,{},{ headers: { 'Content-Type': 'text/plain' } @@ -24,7 +24,7 @@ export const validateField_api = (type: 'username' | 'password', name: string) * 校验旧密码是否正确 * @param password 旧密码 */ -export const checkOldPassword_api = (password:string) => server.post(`/user/me/password/_validate`,password,{ +export const checkOldPassword_api = (password:string) => server.post(`/user/me/password/_validate`,password,{},{ headers: { 'Content-Type': 'text/plain' } diff --git a/src/api/account/notificationRecord.ts b/src/api/account/notificationRecord.ts index 18217d85..58cb612f 100644 --- a/src/api/account/notificationRecord.ts +++ b/src/api/account/notificationRecord.ts @@ -1,7 +1,7 @@ import server from '@/utils/request' // 获取记录列表 -export const getList_api = (data:object): any =>server.get(`/notifications/_query`,encodeParams(data)) +export const getList_api = (data:object): any =>server.post(`/notifications/_query`,data) // 修改记录状态 export const changeStatus_api = (type:'_read'|'_unread',data:string[]): any =>server.post(`/notifications/${type}`,data) diff --git a/src/api/device/instance.ts b/src/api/device/instance.ts index db7583ec..25208fec 100644 --- a/src/api/device/instance.ts +++ b/src/api/device/instance.ts @@ -85,7 +85,7 @@ export const batchDeleteDevice = (data: string[]) => server.put(`/device-instanc */ export const deviceTemplateDownload = (productId: string, type: string) => `${BASE_API_PATH}/device-instance/${productId}/template.${type}` -export const templateDownload = (productId: string, type: string) => server.get(`/device-instance/${productId}/template.${type}`,{},{responseType: 'blob'}) +export const templateDownload = (productId: string, type: string) => server.get(`/device-instance/${productId}/template.${type}`, {}, { responseType: 'blob' }) /** * 设备导入 * @param productId 产品id @@ -100,7 +100,7 @@ export const deviceImport = (productId: string, fileUrl: string, autoDeploy: boo * @param type 文件类型 * @returns */ -export const deviceExport = (productId: string, type: string) => `${BASE_API_PATH}/device-instance${!!productId ? '/' + productId : ''}/export.${type}` +export const deviceExport = (productId: string, type: string) => `${BASE_API_PATH}/device-instance${!!productId ? `/${productId}` : ''}/export.${type}` /** * 验证设备ID是否重复 @@ -245,6 +245,22 @@ export const unbindBatchDevice = (deviceId: string, data: Record) = */ export const bindDevice = (deviceId: string, data: Record) => server.post(`/device/gateway/${deviceId}/bind`, data) +/** + * 获取产品列表 + * @param data + */ +export const getProductListNoPage = (data: any) => server.post('/device/product/_query/no-paging?paging=false', data) + +/** + * 修改设备 + */ +export const editDevice = (parmas: any) => server.patch('/device-instance', parmas) + +/** + * 新增设备 + */ +export const addDevice = (params: any) => server.post("/device-instance", params) + /** * 设备接入网关状态 * @param id 设备接入网关id @@ -504,14 +520,14 @@ export const productCode = (productId: string) => server.get(`/device/transparen * @param productId * @returns */ -export const saveProductCode = (productId: string,data: Record) => server.post(`/device/transparent-codec/${productId}`,data) +export const saveProductCode = (productId: string, data: Record) => server.post(`/device/transparent-codec/${productId}`, data) /** * 获取设备解析规则 * @param productId * @param deviceId * @returns */ -export const deviceCode = (productId: string,deviceId:string) => server.get(`device/transparent-codec/${productId}/${deviceId}`) +export const deviceCode = (productId: string, deviceId: string) => server.get(`device/transparent-codec/${productId}/${deviceId}`) /** * 保存设备解析规则 * @param productId @@ -520,13 +536,13 @@ export const deviceCode = (productId: string,deviceId:string) => server.get(`dev * @param data * @returns */ -export const saveDeviceCode = (productId: string,deviceId:string,data: Record) => server.post(`/device/transparent-codec/${productId}/${deviceId}`,data) +export const saveDeviceCode = (productId: string, deviceId: string, data: Record) => server.post(`/device/transparent-codec/${productId}/${deviceId}`, data) /** * 编码测试 * @param data * @returns */ -export const testCode = (data: Record) => server.post(`/device/transparent-codec/decode-test`,data) +export const testCode = (data: Record) => server.post(`/device/transparent-codec/decode-test`, data) /** * 删除设备解析规则 * @param productId diff --git a/src/api/media/channel.ts b/src/api/media/channel.ts index b603cd03..e7b53af3 100644 --- a/src/api/media/channel.ts +++ b/src/api/media/channel.ts @@ -16,6 +16,9 @@ export default { // 删除 del: (id: string) => server.remove(`/media/channel/${id}`), + // 查询树形数据 + queryTree: (id: string, data?: any) => server.post(`/media/device/${id}/catalog/_query/tree`, data), + // ========== 视频播放 ========== // 开始直播 ptzStart: (deviceId: string, channelId: string, type: string) => diff --git a/src/api/system/user.ts b/src/api/system/user.ts index 68c690ac..9b6a01c3 100644 --- a/src/api/system/user.ts +++ b/src/api/system/user.ts @@ -7,7 +7,7 @@ export const getUserType_api = () => server.get(`/user/detail/types`); export const getUserList_api = (data: object) => server.post(`/user/detail/_query`, data); // 校验字段合法性 -export const validateField_api = (type: 'username' | 'password', name: string) => server.post(`/user/${type}/_validate`, name, { +export const validateField_api = (type: 'username' | 'password', name: string) => server.post(`/user/${type}/_validate`, name,{}, { headers: { 'Content-Type': 'text/plain' } @@ -25,7 +25,7 @@ export const addUser_api = (data: object) => server.post(`/user/detail/_create`, // 更新用户 export const updateUser_api = (data: any) => server.put(`/user/detail/${data.id}/_update`, data); // 更新密码 -export const updatePassword_api = (data: { id: string, password: string }) => server.post(`/user/${data.id}/password/_reset`, data.password, { +export const updatePassword_api = (data: { id: string, password: string }) => server.post(`/user/${data.id}/password/_reset`, data.password,{}, { headers: { 'Content-Type': 'text/plain' } diff --git a/src/components/AIcon/index.tsx b/src/components/AIcon/index.tsx index e480afc3..390fe993 100644 --- a/src/components/AIcon/index.tsx +++ b/src/components/AIcon/index.tsx @@ -77,6 +77,7 @@ const iconKeys = [ 'CloudDownloadOutlined', 'PauseCircleOutlined',, 'FormOutlined', + 'EyeInvisibleOutlined', ] const Icon = (props: {type: string}) => { diff --git a/src/components/FRuleEditor/Debug/index.vue b/src/components/FRuleEditor/Debug/index.vue index 14257edb..0cc843e0 100644 --- a/src/components/FRuleEditor/Debug/index.vue +++ b/src/components/FRuleEditor/Debug/index.vue @@ -15,7 +15,7 @@ - - - - - + + + - + - - {{ item.productName - }} - - - - + + + +

产品映射

- - - - - + + - - {{ i.productName - }} - - - - - + +
+ + - - {{ i.name - }} - - -
- - - - - - + + + + + + + + + + + 添加 - - - - + + + - - - - - + + + +
- - + + - - - + + + @@ -384,7 +379,7 @@ import { queryProductList, } from '@/api/northbound/alicloud'; import _ from 'lodash'; -import { message } from 'ant-design-vue'; +import { message } from 'jetlinks-ui-components'; const router = useRouter(); const route = useRoute(); @@ -430,10 +425,6 @@ const loading = ref(false); const type = ref<'edit' | 'view'>('edit'); const activeKey = ref(['0']); -const filterOption = (input: string, option: any) => { - return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0; -}; - const queryRegionsList = async () => { const resp = await getRegionsList(); if (resp.status === 200) { @@ -503,8 +494,9 @@ const saveBtn = () => { ); data.bridgeProductName = product?.productName || ''; loading.value = true; - const resp = await savePatch({...toRaw(modelRef), ...data}); - loading.value = false; + const resp = await savePatch({...toRaw(modelRef), ...data}).finally(() => { + loading.value = false; + }) if (resp.status === 200) { message.success('操作成功!'); formRef.value.resetFields(); diff --git a/src/views/Northbound/AliCloud/index.vue b/src/views/Northbound/AliCloud/index.vue index caa41df8..b78b88a1 100644 --- a/src/views/Northbound/AliCloud/index.vue +++ b/src/views/Northbound/AliCloud/index.vue @@ -1,11 +1,11 @@ - + - + \ No newline at end of file + + + \ No newline at end of file diff --git a/src/views/Northbound/DuerOS/Detail/index.vue b/src/views/Northbound/DuerOS/Detail/index.vue index f9273b01..36894c24 100644 --- a/src/views/Northbound/DuerOS/Detail/index.vue +++ b/src/views/Northbound/DuerOS/Detail/index.vue @@ -51,7 +51,6 @@ placeholder="请选择产品" v-model:value="modelRef.id" show-search - :filter-option="filterOption" @change="productChange" > + + + {{ i.name }} + + + { actionActiveKey.value = _key; }; -const filterOption = (input: string, option: any) => { - return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0; -}; - const addItem = () => { actionActiveKey.value.push(String(modelRef.actionMappings.length)); modelRef.actionMappings.push({ @@ -636,8 +624,9 @@ const saveBtn = async () => { .then(async (data: any) => { if (tasks.every((item) => item) && data) { loading.value = true; - const resp = await savePatch(data); - loading.value = false; + const resp = await savePatch(data).finally(() => { + loading.value = false; + }) if (resp.status === 200) { message.success('操作成功!'); formRef.value.resetFields(); diff --git a/src/views/account/Center/components/EditInfoDialog.vue b/src/views/account/Center/components/EditInfoDialog.vue index fbbbd69d..dc39e839 100644 --- a/src/views/account/Center/components/EditInfoDialog.vue +++ b/src/views/account/Center/components/EditInfoDialog.vue @@ -5,6 +5,7 @@ @ok="handleOk" width="770px" @cancel="emits('update:visible', false)" + :confirmLoading="loading" > @@ -12,7 +13,10 @@ - + - + (); +const loading = ref(false) const form = ref(props.data); const formRef = ref(); const handleOk = () => { formRef.value?.validate().then(() => { + loading.value = true updateMeInfo_api(form.value).then((resp) => { if (resp.status === 200) { message.success('保存成功'); emits('ok'); emits('update:visible', false); } - }); + }).finally(()=>loading.value = false) }); }; diff --git a/src/views/account/Center/components/EditPasswordDialog.vue b/src/views/account/Center/components/EditPasswordDialog.vue index 768d3521..566f2bf0 100644 --- a/src/views/account/Center/components/EditPasswordDialog.vue +++ b/src/views/account/Center/components/EditPasswordDialog.vue @@ -4,6 +4,7 @@ title="重置密码" @ok="handleOk" width="520px" + :confirmLoading="loading" @cancel="emits('update:visible', false)" > @@ -11,7 +12,7 @@ label="旧密码" name="oldPassword" :rules="[ - { required: true }, + { required: true, message: '请输入密码' }, { validator: checkMothods.old, trigger: 'blur' }, ]" > @@ -24,7 +25,7 @@ label="密码" name="newPassword" :rules="[ - { required: true }, + { required: true,message:'请输入密码' }, { validator: checkMothods.new, trigger: 'blur' }, ]" > @@ -37,7 +38,7 @@ label="确认密码" name="confirmPassword" :rules="[ - { required: true }, + { required: true, message: '请输入确认密码' }, { validator: checkMothods.confirm, trigger: 'blur' }, ]" > @@ -63,6 +64,7 @@ const emits = defineEmits(['ok', 'update:visible']); const props = defineProps<{ visible: boolean; }>(); +const loading = ref(false) const formRef = ref(); const form = ref({ oldPassword: '', @@ -72,7 +74,7 @@ const form = ref({ const checkMothods = { old: async (_rule: Rule, value: string) => { - if (!value) return Promise.reject('请输入密码'); + if (!value) return Promise.reject(); try { const resp: any = await checkOldPassword_api(value); if (resp.status === 200 && !resp.result.passed) @@ -83,7 +85,7 @@ const checkMothods = { } }, new: async (_rule: Rule, value: string) => { - if (!value) return Promise.reject('请输入密码'); + if (!value) return Promise.reject(); else if ( form.value.confirmPassword && value !== form.value.confirmPassword @@ -99,7 +101,7 @@ const checkMothods = { } }, confirm: async (_rule: Rule, value: string) => { - if (!value) return Promise.reject('请输入确认密码'); + if (!value) return Promise.reject(); try { const resp: any = await validateField_api('password', value); @@ -114,6 +116,7 @@ const checkMothods = { const handleOk = () => { formRef.value?.validate().then(() => { + loading.value = true const params = { oldPassword: form.value.oldPassword, newPassword: form.value.newPassword, @@ -124,7 +127,7 @@ const handleOk = () => { emits('ok'); emits('update:visible', false); } - }); + }).finally(()=>loading.value = false) }); }; console.clear(); diff --git a/src/views/account/Center/index.vue b/src/views/account/Center/index.vue index 9d0a09ff..f3b392d0 100644 --- a/src/views/account/Center/index.vue +++ b/src/views/account/Center/index.vue @@ -8,10 +8,15 @@ style="width: 350px; justify-content: center" > +
+ +
+
@@ -51,11 +57,17 @@

注册时间

-

{{ moment(userInfo.createTime).format('YYYY-MM-DD HH:mm:ss') }}

+

+ {{ + moment(userInfo.createTime).format( + 'YYYY-MM-DD HH:mm:ss', + ) + }} +

电话

-

{{ userInfo.telephone }}

+

{{ userInfo.telephone || '-' }}

姓名

@@ -117,7 +129,7 @@ type="link" @click="editPasswordVisible = true" > - +
@@ -205,7 +217,7 @@ { + const imageTypes = ['jpg', 'png', 'jfif', 'pjp', 'pjpeg', 'jpeg']; + const typeBool = + imageTypes.filter((typeStr) => type.includes(typeStr)).length > 0; + const sizeBool = size < 4 * 1024 * 1024; + + (typeBool && sizeBool) || message.error('请上传正确格式的图片'); + return typeBool && sizeBool; + }, }); // 首页视图 const isApiUser = ref(); @@ -346,7 +367,7 @@ function getViews() { background-color: #f0f2f5; min-height: 100vh; .card { - margin: 24px; + margin: 16px 0; padding: 24px; background-color: #fff; position: relative; @@ -370,6 +391,18 @@ function getViews() { flex-wrap: wrap; .content-item { margin-right: 24px; + + .default-avatar { + background-color: #ccc; + color: #fff; + border-radius: 50%; + font-size: 70px; + width: 140px; + height: 140px; + display: flex; + justify-content: center; + align-items: center; + } .info-card { width: 25%; diff --git a/src/views/account/NotificationRecord/index.vue b/src/views/account/NotificationRecord/index.vue index 84790dbc..a6d380d3 100644 --- a/src/views/account/NotificationRecord/index.vue +++ b/src/views/account/NotificationRecord/index.vue @@ -1,14 +1,17 @@ diff --git a/src/views/notice/Config/Debug/index.vue b/src/views/notice/Config/Debug/index.vue index 3a74c7fc..7a7141ee 100644 --- a/src/views/notice/Config/Debug/index.vue +++ b/src/views/notice/Config/Debug/index.vue @@ -1,5 +1,5 @@ -
- - - + + + + - + diff --git a/src/views/notice/Template/Detail/index.vue b/src/views/notice/Template/Detail/index.vue index 0d31a97d..36cb7882 100644 --- a/src/views/notice/Template/Detail/index.vue +++ b/src/views/notice/Template/Detail/index.vue @@ -1,36 +1,36 @@ - - - - - + + + + - - - - - + + + 被叫显号 - - + - - - + + - - - + - - + - - - - + + - - - + + 保存 - - - - - + + + + + - - - + + + @@ -840,7 +840,8 @@ const resetPublicFiles = () => { formData.value.template.templateType = 'tts'; formData.value.template.templateCode = ''; formData.value.template.ttsCode = ''; - formData.value.template.message = ''; + // formData.value.template.message = ''; + formData.value.template.ttsmessage = ''; formData.value.template.playTimes = 1; formData.value.template.calledShowNumbers = ''; formData.value.template.calledNumber = ''; @@ -910,26 +911,29 @@ const formRules = ref({ // 阿里云语音 'template.templateType': [{ required: true, message: '请选择类型' }], 'template.templateCode': [{ required: true, message: '请输入模板ID' }], + 'template.calledShowNumbers': [ + { + trigger: 'change', + validator(_rule: Rule, value: string) { + if (!value) return Promise.resolve(); + if (!phoneRegEx(value)) return Promise.reject('请输入有效号码'); + return Promise.resolve(); + }, + }, + ], // 短信 'template.code': [{ required: true, message: '请选择模板' }], 'template.signName': [{ required: true, message: '请输入签名' }], // webhook description: [{ max: 200, message: '最多可输入200个字符' }], 'template.message': [ - { required: true, message: '请输入' }, + { + required: true, + message: '请输入', + }, { max: 500, message: '最多可输入500个字符' }, ], - 'template.calledShowNumbers': [ - { - trigger: 'blur', - validator(_rule: Rule, value: string) { - if (!phoneRegEx(value)) { - return Promise.reject('请输入有效号码'); - } - return Promise.resolve(); - }, - }, - ], + 'template.ttsmessage': [{ max: 500, message: '最多可输入500个字符' }], }); const { resetFields, validate, validateInfos, clearValidate } = useForm( @@ -1033,6 +1037,7 @@ const variableReg = () => { * 钉钉机器人 消息类型选择改变 */ const handleMessageTypeChange = () => { + if (formData.value.type !== 'dingTalk') return; delete formData.value.template.markdown; delete formData.value.template.link; delete formData.value.template.text; @@ -1159,6 +1164,13 @@ const getSignsList = async () => { */ const btnLoading = ref(false); const handleSubmit = () => { + // 变量列表存在, 且存在空值 + if ( + formData.value.variableDefinitions.length && + formData.value.variableDefinitions.some((s: any) => !s.name) + ) + return; + // 邮件没有配置字段 if (formData.value.type === 'email') delete formData.value.configId; if (formData.value.template.messageType === 'markdown') delete formData.value.template.link; @@ -1169,9 +1181,16 @@ const handleSubmit = () => { setTimeout(() => { validate() .then(async () => { - if (formData.value.provider === 'ttsCode') + if (formData.value.provider === 'aliyun') { formData.value.template.ttsCode = formData.value.template.templateCode; + // 语音message字段与其他类型的message字段重名, 但语音不需要必填验证 + // 取别名ttsmessage, 验证通过之后, 赋值回message字段, 并删除别名字段 + formData.value.template.message = + formData.value.template.ttsmessage; + delete formData.value.template.ttsmessage; + } + btnLoading.value = true; let res; if (!formData.value.id) { diff --git a/src/views/notice/Template/Log/index.vue b/src/views/notice/Template/Log/index.vue index ee4c4576..053dd407 100644 --- a/src/views/notice/Template/Log/index.vue +++ b/src/views/notice/Template/Log/index.vue @@ -1,9 +1,8 @@ - + \ No newline at end of file diff --git a/src/views/rule-engine/Scene/Save/action/Device/Product.vue b/src/views/rule-engine/Scene/Save/action/Device/Product.vue index b2dab80d..9f88a95d 100644 --- a/src/views/rule-engine/Scene/Save/action/Device/Product.vue +++ b/src/views/rule-engine/Scene/Save/action/Device/Product.vue @@ -1,261 +1,278 @@ + + p.sorts = sorts; + return queryProductList(p); +}; + +const handleClick = (detail: any) => { + emit('update:rowKey', detail.id); + emit('update:detail', detail); + emit('change', detail); +}; + \ No newline at end of file +} + \ No newline at end of file diff --git a/src/views/rule-engine/Scene/Save/action/Device/actions/EditTable.vue b/src/views/rule-engine/Scene/Save/action/Device/actions/EditTable.vue new file mode 100644 index 00000000..e0774a9b --- /dev/null +++ b/src/views/rule-engine/Scene/Save/action/Device/actions/EditTable.vue @@ -0,0 +1,111 @@ + + + \ No newline at end of file diff --git a/src/views/rule-engine/Scene/Save/action/Device/actions/WriteProperty.vue b/src/views/rule-engine/Scene/Save/action/Device/actions/WriteProperty.vue new file mode 100644 index 00000000..b1ed87ed --- /dev/null +++ b/src/views/rule-engine/Scene/Save/action/Device/actions/WriteProperty.vue @@ -0,0 +1,140 @@ + + + \ No newline at end of file diff --git a/src/views/rule-engine/Scene/Save/action/Device/actions/index.vue b/src/views/rule-engine/Scene/Save/action/Device/actions/index.vue new file mode 100644 index 00000000..5697da00 --- /dev/null +++ b/src/views/rule-engine/Scene/Save/action/Device/actions/index.vue @@ -0,0 +1,239 @@ + + + \ No newline at end of file diff --git a/src/views/rule-engine/Scene/Save/action/Device/device/Device.vue b/src/views/rule-engine/Scene/Save/action/Device/device/Device.vue new file mode 100644 index 00000000..0dd67d5a --- /dev/null +++ b/src/views/rule-engine/Scene/Save/action/Device/device/Device.vue @@ -0,0 +1,186 @@ + + + + + \ No newline at end of file diff --git a/src/views/rule-engine/Scene/Save/action/Device/device/Tag.vue b/src/views/rule-engine/Scene/Save/action/Device/device/Tag.vue new file mode 100644 index 00000000..4d4c245a --- /dev/null +++ b/src/views/rule-engine/Scene/Save/action/Device/device/Tag.vue @@ -0,0 +1,206 @@ + + + + + \ No newline at end of file diff --git a/src/views/rule-engine/Scene/Save/action/Device/device/TopCard.vue b/src/views/rule-engine/Scene/Save/action/Device/device/TopCard.vue new file mode 100644 index 00000000..34e7f304 --- /dev/null +++ b/src/views/rule-engine/Scene/Save/action/Device/device/TopCard.vue @@ -0,0 +1,149 @@ + + + + + \ No newline at end of file diff --git a/src/views/rule-engine/Scene/Save/action/Device/device/index.vue b/src/views/rule-engine/Scene/Save/action/Device/device/index.vue index 89582ec0..3b6f6e72 100644 --- a/src/views/rule-engine/Scene/Save/action/Device/device/index.vue +++ b/src/views/rule-engine/Scene/Save/action/Device/device/index.vue @@ -1,14 +1,355 @@ - \ No newline at end of file diff --git a/src/views/rule-engine/Scene/Save/action/Device/index.vue b/src/views/rule-engine/Scene/Save/action/Device/index.vue index 91f0afd6..b5f87a40 100644 --- a/src/views/rule-engine/Scene/Save/action/Device/index.vue +++ b/src/views/rule-engine/Scene/Save/action/Device/index.vue @@ -1,6 +1,13 @@ + \ No newline at end of file diff --git a/src/views/rule-engine/Scene/Save/action/Device/typings.d.ts b/src/views/rule-engine/Scene/Save/action/Device/typings.d.ts index eeed8153..83e28ec0 100644 --- a/src/views/rule-engine/Scene/Save/action/Device/typings.d.ts +++ b/src/views/rule-engine/Scene/Save/action/Device/typings.d.ts @@ -2,12 +2,12 @@ import { ProductItem } from '@/views/device/Product/typings'; import { ActionsDeviceProps } from '../../../typings'; type DeviceModelType = { - steps: { - key: string; - title: string; - content: React.ReactNode; - }[]; - current: number; + // steps: { + // key: string; + // title: string; + // content: React.ReactNode; + // }[]; + // current: number; productId: string; deviceId: string; productDetail: ProductItem | any; diff --git a/src/views/rule-engine/Scene/Save/action/Modal/ActionTypeComponent.vue b/src/views/rule-engine/Scene/Save/action/Modal/ActionTypeComponent.vue index 545bcf04..48708ad5 100644 --- a/src/views/rule-engine/Scene/Save/action/Modal/ActionTypeComponent.vue +++ b/src/views/rule-engine/Scene/Save/action/Modal/ActionTypeComponent.vue @@ -1,7 +1,7 @@ diff --git a/src/views/system/Platforms/Api/typing.d.ts b/src/views/system/Platforms/Api/typing.d.ts index 0fb45159..7fccdd1f 100644 --- a/src/views/system/Platforms/Api/typing.d.ts +++ b/src/views/system/Platforms/Api/typing.d.ts @@ -22,6 +22,7 @@ export type apiDetailsType = { parameters: any[]; requestBody?: any; responses:object; + description?:string; } export type modeType = 'api'| 'appManger' | 'home' \ No newline at end of file diff --git a/src/views/system/Platforms/Setting/index.vue b/src/views/system/Platforms/Setting/index.vue new file mode 100644 index 00000000..a7ce19ac --- /dev/null +++ b/src/views/system/Platforms/Setting/index.vue @@ -0,0 +1,28 @@ + + + + + \ No newline at end of file diff --git a/src/views/system/Platforms/index.vue b/src/views/system/Platforms/index.vue index 3b3ea430..23458944 100644 --- a/src/views/system/Platforms/index.vue +++ b/src/views/system/Platforms/index.vue @@ -16,5 +16,3 @@ - - diff --git a/src/views/system/User/components/EditUserDialog.vue b/src/views/system/User/components/EditUserDialog.vue index eee7aaf4..01a7491e 100644 --- a/src/views/system/User/components/EditUserDialog.vue +++ b/src/views/system/User/components/EditUserDialog.vue @@ -16,13 +16,7 @@ @@ -91,7 +85,6 @@ - @@ -104,9 +97,8 @@ > @@ -128,9 +120,10 @@ @@ -235,7 +228,6 @@ const form = reactive({ rules: { checkUserName: (_rule: Rule, value: string): Promise => new Promise((resolve, reject) => { - console.log(_rule); if (props.type === 'edit') return resolve(''); if (!value) return reject('请输入用户名'); @@ -248,7 +240,7 @@ const form = reactive({ }), checkPassword: (_rule: Rule, value: string): Promise => new Promise((resolve, reject) => { - if (!value) return reject('请输入8~64位的密码'); + if (!value) return reject('请输入密码'); else if (value.length > 64) return reject('最多可输入64个字符'); else if (value.length < 8) return reject('密码不能少于8位'); validateField_api('password', value).then((resp: any) => { @@ -258,7 +250,7 @@ const form = reactive({ }); }), checkAgainPassword: (_rule: Rule, value: string): Promise => { - if (!value) return Promise.reject(''); + if (!value) return Promise.reject('请输入8~64位的密码'); return value === form.data.password ? Promise.resolve() : Promise.reject('两次密码输入不一致'); @@ -386,6 +378,15 @@ type optionType = { .ant-select { flex: 1; } + .ant-tooltip-disabled-compatible-wrapper { + .ant-btn { + color: rgba(0, 0, 0, 0.25); + border-color: #d9d9d9; + background: #f5f5f5; + text-shadow: none; + box-shadow: none; + } + } .ant-btn { width: 32px; height: 32px; diff --git a/src/views/system/User/index.vue b/src/views/system/User/index.vue index d9170f59..5aeb5edb 100644 --- a/src/views/system/User/index.vue +++ b/src/views/system/User/index.vue @@ -1,7 +1,10 @@