Merge branch 'dev' of github.com:jetlinks/jetlinks-ui-vue into dev

This commit is contained in:
JiangQiming 2023-03-28 17:52:26 +08:00
commit 7da4678231
12 changed files with 254 additions and 156 deletions

View File

@ -166,6 +166,7 @@ const columns = [
dataIndex: 'registerTime',
search: {
type: 'date',
rename: 'registryTime'
},
width: 200,
scopedSlots: true,
@ -290,7 +291,19 @@ watch(
* @param params
*/
const handleSearch = (e: any) => {
params.value = e;
const newParams = (e?.terms as any[])?.map(item1 => {
item1.terms = item1.terms.map((item2: any) => {
if (item2.column === 'version') {
return {
column: 'id$dev-firmware',
value: [item2]
}
}
return item2
})
return item1
})
params.value = { terms: newParams || []}
};
</script>

View File

@ -1019,6 +1019,9 @@ watchEffect(() => {
nextTick(() => {
getData();
});
watch(()=>productStore.current,()=>{
getData()
})
</script>
<style lang="less" scoped>
:deep(

View File

@ -185,7 +185,8 @@ export default [
},
],
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true
supportDataAccess: true,
assetType: 'notifyConfig'
},
{
code: 'notice/Template',
@ -306,6 +307,7 @@ export default [
},
],
accessSupport: { text: "支持", value: "support" },
assetType: 'notifyTemplate',
supportDataAccess: true
},
],
@ -969,8 +971,9 @@ export default [
],
},
],
accessSupport: { text: "不支持", value: "unsupported" },
supportDataAccess: false
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true,
assetType: 'deviceGateway'
},
{
code: 'link/Protocol',
@ -1041,8 +1044,9 @@ export default [
],
},
],
accessSupport: { text: "不支持", value: "unsupported" },
supportDataAccess: false
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true,
assetType: 'protocol'
},
{
code: 'Log',
@ -1143,8 +1147,9 @@ export default [
],
},
],
accessSupport: { text: "不支持", value: "unsupported" },
supportDataAccess: false
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true,
assetType: 'network'
},
{
code: 'link/Certificate',
@ -1200,7 +1205,8 @@ export default [
},
],
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true
supportDataAccess: true,
assetType: 'certificate'
},
{
code: 'media/Stream',
@ -1546,7 +1552,8 @@ export default [
},
],
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true
supportDataAccess: true,
assetType: 'dataCollectChannel'
},
{
code: 'DataCollect/Collector',
@ -1679,7 +1686,8 @@ export default [
},
],
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true
supportDataAccess: true,
assetType: 'ataCollectCollector'
},
],
},
@ -1850,7 +1858,8 @@ export default [
},
],
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true
supportDataAccess: true,
assetType: 'alarmConfig'
},
{
code: 'rule-engine/Alarm/Log',
@ -1994,8 +2003,9 @@ export default [
],
},
],
accessSupport: { text: "不支持", value: "unsupported" },
supportDataAccess: false
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true,
assetType: 'dueros'
},
{
code: 'Northbound/AliCloud',
@ -2233,7 +2243,8 @@ export default [
},
],
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true
supportDataAccess: true,
assetType: 'ruleInstance'
},
{
code: 'rule-engine/Scene',
@ -2385,7 +2396,8 @@ export default [
},
],
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true
supportDataAccess: true,
assetType: 'scene'
},
],
},
@ -2906,7 +2918,8 @@ export default [
},
],
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true
supportDataAccess: true,
assetType: 'gbCascade'
},
],
},
@ -3051,7 +3064,8 @@ export default [
},
],
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true
supportDataAccess: true,
assetType: 'user'
},
{
code: 'system/Department',
@ -3249,7 +3263,8 @@ export default [
},
],
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true
supportDataAccess: true,
assetType: 'organization'
},
{
code: 'system/Role',
@ -3326,7 +3341,8 @@ export default [
},
],
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true
supportDataAccess: true,
assetType: 'role'
},
{
code: 'system/Menu',
@ -3640,7 +3656,8 @@ export default [
},
],
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true
supportDataAccess: true,
assetType: 'datasource'
},
{
code: 'system/Platforms/Setting',
@ -4042,8 +4059,9 @@ export default [
],
},
],
accessSupport: { text: "不支持", value: "unsupported" },
supportDataAccess: false
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true,
assetType: 'networkCard'
},
{
path: '5Hpl-ZjAG',
@ -4160,8 +4178,9 @@ export default [
],
},
],
accessSupport: { text: "不支持", value: "unsupported" },
supportDataAccess: false
accessSupport: { text: "支持", value: "support" },
supportDataAccess: true,
assetType: 'networkCardPlatform'
},
{
path: '5Hpl-cL34',

View File

@ -1,132 +1,146 @@
<!-- 绑定设备 -->
<template>
<j-modal :maskClosable="false" width="1100px" :visible="true" title="选择设备" okText="确定" cancelText="取消" @ok="handleOk"
@cancel="handleCancel" :confirmLoading="btnLoading">
<div style="margin-top: 10px">
<pro-search :columns="columns" target="iot-card-bind-device" @search="handleSearch" type="simple" />
<j-pro-table ref="bindDeviceRef" :columns="columns" :request="queryUnbounded" model="TABLE" :defaultParams="{
sorts: [{ name: 'createTime', order: 'desc' }],
}" :rowSelection="{
type: 'radio',
selectedRowKeys: _selectedRowKeys,
onSelect: onSelectChange,
}" @cancelSelect="cancelSelect" :params="params">
<template #registryTime="slotProps">
{{
slotProps.registryTime
? moment(slotProps.registryTime).format(
'YYYY-MM-DD HH:mm:ss',
)
: ''
}}
</template>
<template #state="slotProps">
<j-badge :text="slotProps.state.text" :status="statusMap.get(slotProps.state.value)" />
</template>
</j-pro-table>
</div>
</j-modal>
<j-modal :maskClosable='false' width='1100px' :visible='true' title='选择设备' okText='确定' cancelText='取消' @ok='handleOk'
@cancel='handleCancel' :confirmLoading='btnLoading'>
<div style='margin-top: 10px'>
<pro-search :columns='columns' target='iot-card-bind-device' @search='handleSearch' type='simple' />
<j-pro-table
ref='bindDeviceRef'
:columns='columns'
:request='queryUnbounded'
model='TABLE'
:defaultParams="{
pageSize: 10,
sorts: [{ name: 'createTime', order: 'desc' }],
}"
:pagination="{
showSizeChanger: true,
pageSizeOptions: ['10', '20', '50', '100'],
}"
:rowSelection="{
type: 'radio',
selectedRowKeys: _selectedRowKeys,
onSelect: onSelectChange,
}"
@cancelSelect='cancelSelect'
:params='params'
>
<template #registryTime='slotProps'>
{{
slotProps.registryTime
? moment(slotProps.registryTime).format(
'YYYY-MM-DD HH:mm:ss'
)
: ''
}}
</template>
<template #state='slotProps'>
<j-badge :text='slotProps.state.text' :status='statusMap.get(slotProps.state.value)' />
</template>
</j-pro-table>
</div>
</j-modal>
</template>
<script setup lang="ts">
import { queryUnbounded, bind } from '@/api/iot-card/cardManagement';
import moment from 'moment';
import { message } from 'jetlinks-ui-components';
<script setup lang='ts'>
import { queryUnbounded, bind } from '@/api/iot-card/cardManagement'
import moment from 'moment'
import { message } from 'jetlinks-ui-components'
const emit = defineEmits(['change']);
const emit = defineEmits(['change'])
const props = defineProps({
cardId: {
type: String,
},
});
cardId: {
type: String
}
})
const bindDeviceRef = ref<Record<string, any>>({});
const params = ref<Record<string, any>>({});
const _selectedRowKeys = ref<string[]>([]);
const btnLoading = ref<boolean>(false);
const bindDeviceRef = ref<Record<string, any>>({})
const params = ref<Record<string, any>>({})
const _selectedRowKeys = ref<string[]>([])
const btnLoading = ref<boolean>(false)
const statusMap = new Map();
statusMap.set('online', 'processing');
statusMap.set('offline', 'error');
statusMap.set('notActive', 'warning');
const statusMap = new Map()
statusMap.set('online', 'processing')
statusMap.set('offline', 'error')
statusMap.set('notActive', 'warning')
const columns = [
{
title: 'ID',
dataIndex: 'id',
key: 'id',
ellipsis: true,
fixed: 'left',
search: {
type: 'string',
},
},
{
title: '设备名称',
dataIndex: 'name',
key: 'name',
ellipsis: true,
search: {
type: 'string',
},
},
{
title: '注册时间',
dataIndex: 'registryTime',
key: 'registryTime',
scopedSlots: true,
search: {
type: 'date',
},
// sorter: true,
},
{
title: '状态',
dataIndex: 'state',
key: 'state',
scopedSlots: true,
search: {
type: 'select',
options: [
{ label: '禁用', value: 'notActive' },
{ label: '离线', value: 'offline' },
{ label: '在线', value: 'online' },
],
},
// filterMultiple: false,
},
];
{
title: 'ID',
dataIndex: 'id',
key: 'id',
ellipsis: true,
fixed: 'left',
search: {
type: 'string'
}
},
{
title: '设备名称',
dataIndex: 'name',
key: 'name',
ellipsis: true,
search: {
type: 'string'
}
},
{
title: '注册时间',
dataIndex: 'registryTime',
key: 'registryTime',
scopedSlots: true,
search: {
type: 'date'
}
// sorter: true,
},
{
title: '状态',
dataIndex: 'state',
key: 'state',
scopedSlots: true,
search: {
type: 'select',
options: [
{ label: '禁用', value: 'notActive' },
{ label: '离线', value: 'offline' },
{ label: '在线', value: 'online' }
]
}
// filterMultiple: false,
}
]
const handleSearch = (e: any) => {
params.value = e;
};
params.value = e
}
const onSelectChange = (record: any) => {
_selectedRowKeys.value = [record.id];
};
_selectedRowKeys.value = [record.id]
}
const cancelSelect = () => {
_selectedRowKeys.value = [];
};
_selectedRowKeys.value = []
}
const handleOk = () => {
btnLoading.value = true;
bind(props.cardId, _selectedRowKeys.value[0])
.then((resp: any) => {
if (resp.status === 200) {
message.success('操作成功')
emit('change', true);
}
})
.finally(() => {
btnLoading.value = false;
});
};
btnLoading.value = true
bind(props.cardId, _selectedRowKeys.value[0])
.then((resp: any) => {
if (resp.status === 200) {
message.success('操作成功')
emit('change', true)
}
})
.finally(() => {
btnLoading.value = false
})
}
const handleCancel = () => {
emit('change', false);
};
emit('change', false)
}
</script>
<style scoped lang="less"></style>
<style scoped lang='less'></style>

View File

@ -42,7 +42,6 @@
<TimeSelect
key="flow-static"
:type="'week'"
@change="initQueryTime"
/>
</template>
@ -483,7 +482,11 @@ const selectChange = () => {
],
};
state.ranking = res.result
?.filter((item: any) => item.group === 'alarmRank')
?.filter(
(item: any) =>
item.group === 'alarmRank' &&
item.data?.value?.count !== 0,
)
.map((d: { data: { value: any } }) => d.data?.value)
.sort(
(a: { count: number }, b: { count: number }) =>

View File

@ -242,10 +242,30 @@ const handleOptionsColumnsValue = (termsColumns: any[], _options: any) => {
}
const columnSelect = (e: any) => {
paramsValue.termType = 'eq'
paramsValue.value = {
source: tabsOptions.value[0].key,
value: undefined
const dataType = e.type
const hasTypeChange = dataType !== tabsOptions.value[0].component
let termTypeChange = false
//
const termTypes = e.termTypes
if (!termTypes.some((item: {id: string}) => paramsValue.termType === item.id)) { //
termTypeChange = true
paramsValue.termType = termTypes?.length ? termTypes[0].id : 'eq'
}
if (hasTypeChange) {
paramsValue.termType = termTypes?.length ? termTypes[0].id : 'eq'
paramsValue.value = {
source: tabsOptions.value[0].key,
value: undefined
}
} else if (termTypeChange) {
const oldValue = isArray(paramsValue.value!.value) ? paramsValue.value!.value[0] : paramsValue.value!.value
const value = arrayParamsKey.includes(e.key) ? [ oldValue, undefined ] : oldValue
paramsValue.value = {
source: paramsValue.value?.source || tabsOptions.value[0].key,
value: value
}
}
const columns = e.metadata === true ? [e.column] : []
@ -266,7 +286,7 @@ const termsTypeSelect = (e: { key: string, name: string }) => {
const oldValue = isArray(paramsValue.value!.value) ? paramsValue.value!.value[0] : paramsValue.value!.value
const value = arrayParamsKey.includes(e.key) ? [ oldValue, undefined ] : oldValue
paramsValue.value = {
source: tabsOptions.value[0].key,
source: paramsValue.value?.source || tabsOptions.value[0].key,
value: value
}
emit('update:value', { ...paramsValue })

View File

@ -48,7 +48,7 @@ const label: Record<number, any> = {
const emit = defineEmits<Emit>()
const myValue = ref<ValueType>(props.value)
const myValue = ref<ValueType>(props.value || [undefined, undefined] as any)
const mySource = ref<string>(props.source)
const onSelect = (v: any, _label: string, index: number) => {

View File

@ -100,7 +100,7 @@ type Emit = {
}
const props = defineProps({
...defaultSetting
...defaultSetting,
})
const emit = defineEmits<Emit>()

View File

@ -14,7 +14,7 @@ export type TabsOption = {
key: string;
component: string
}
type ValueArrayType = [string, number]
type ValueArrayType = [string, number, undefined]
export type ValueType = string | number | undefined | ValueArrayType
export const defaultSetting = {

View File

@ -133,7 +133,7 @@ const props = defineProps({
type: '',
termType: 'eq',
value: {
source: 'fixed',
source: 'manual',
value: undefined
}
})
@ -216,12 +216,20 @@ watch(() => [columnOptions.value, paramsValue.column], () => {
const showDouble = computed(() => {
const isRange = paramsValue.termType ? arrayParamsKey.includes(paramsValue.termType) : false
const isSourceMetric = paramsValue.value?.source === 'metric'
if (metricsCacheOption.value.length) {
metricOption.value = metricsCacheOption.value.filter(item => isRange ? item.range : !item.range)
} else {
metricOption.value = []
}
return isRange && !isMetric.value
if (isRange) {
if (isMetric.value) {
return !isSourceMetric
}
return true
}
return false
})
const mouseover = () => {
@ -237,11 +245,29 @@ const mouseout = () => {
}
const columnSelect = (option: any) => {
const dataType = option.dataType
const hasTypeChange = dataType !== tabsOptions.value[0].component
let termTypeChange = false
//
const termTypes = option.termTypes
paramsValue.termType = termTypes?.length ? termTypes[0].id : 'eq'
paramsValue.value = {
source: tabsOptions.value[0].key,
value: undefined
if (!termTypes.some((item: {id: string}) => paramsValue.termType === item.id)) { //
termTypeChange = true
paramsValue.termType = termTypes?.length ? termTypes[0].id : 'eq'
}
if (hasTypeChange) { //
paramsValue.termType = termTypes?.length ? termTypes[0].id : 'eq'
paramsValue.value = {
source: tabsOptions.value[0].key,
value: undefined
}
} else if (termTypeChange) {
const oldValue = isArray(paramsValue.value!.value) ? paramsValue.value!.value[0] : paramsValue.value!.value
const value = arrayParamsKey.includes(paramsValue.termType as string) ? [ oldValue, undefined ] : oldValue
paramsValue.value = {
source: paramsValue.value?.source || tabsOptions.value[0].key,
value: value
}
}
handOptionByColumn(option)
emit('update:value', { ...paramsValue })
@ -254,7 +280,7 @@ const termsTypeSelect = (e: { key: string, name: string }) => {
const oldValue = isArray(paramsValue.value!.value) ? paramsValue.value!.value[0] : paramsValue.value!.value
const value = arrayParamsKey.includes(e.key) ? [ oldValue, undefined ] : oldValue
paramsValue.value = {
source: tabsOptions.value[0].key,
source: paramsValue.value?.source || tabsOptions.value[0].key,
value: value
}
emit('update:value', { ...paramsValue })
@ -263,7 +289,7 @@ const termsTypeSelect = (e: { key: string, name: string }) => {
}
const valueSelect = (_: any, label: string, labelObj: Record<number, any>) => {
const valueSelect = (v: any, label: string, labelObj: Record<number, any>) => {
emit('update:value', { ...paramsValue })
formItemContext.onFieldChange()
formModel.value.options!.when[props.branchName].terms[props.whenName].terms[props.name][2] = labelObj
@ -278,7 +304,7 @@ const termAdd = () => {
const terms = {
column: undefined,
value: {
source: 'fixed',
source: 'manual',
value: undefined
},
termType: undefined,

View File

@ -97,7 +97,7 @@ const addWhen = () => {
{
column: undefined,
value: {
source: 'fixed',
source: 'manual',
value: undefined
},
termType: undefined,

View File

@ -3700,8 +3700,8 @@ jetlinks-store@^0.0.3:
jetlinks-ui-components@^1.0.5:
version "1.0.5"
resolved "http://47.108.170.157:9013/jetlinks-ui-components/-/jetlinks-ui-components-1.0.5.tgz#531a7cd5cc4069dc299f0efcc92411a4eee369e7"
integrity sha512-7VHsz5lVG9PlFkHoJvEown4QARuVuasR+jDa9NNQ+pJSHAtHAeiIO1bpVTQKfE5WCyhCKPnN8yIerJLLzmQ1fA==
resolved "http://47.108.170.157:9013/jetlinks-ui-components/-/jetlinks-ui-components-1.0.5.tgz#031a300df4df31a353d738cacee8b4ff630ae2d0"
integrity sha512-SfucQ7LzlE13VdyZsDhrhzwF9Le/NOke5F6UY3bNN1OJiRD/bZMJecGQxWBQGv567lKcV60SOPCMT8ExiZxUgw==
dependencies:
"@vueuse/core" "^9.12.0"
ant-design-vue "^3.2.15"