Commit cfc9d9f273a35b29faa9788fb80c7a5d6d257ebf

Authored by xp.Huang
2 parents a49668bf 6d061017

Merge branch 'fix/issure' into 'main_dev'

fix: 修改Teambition上的问题

See merge request yunteng/thingskit-front!1304
@@ -20,6 +20,7 @@ export enum ConfigurationPermission { @@ -20,6 +20,7 @@ export enum ConfigurationPermission {
20 // DESIGN = 'api:yt:dataview:center:get_configuration_info:design', 20 // DESIGN = 'api:yt:dataview:center:get_configuration_info:design',
21 DESIGN = 'api:yt:dataview:center:get_dataview_info:design', 21 DESIGN = 'api:yt:dataview:center:get_dataview_info:design',
22 PREVIEW = 'api:yt:dataview:center:get_configuration_info:preview', 22 PREVIEW = 'api:yt:dataview:center:get_configuration_info:preview',
  23 + DATAVIEW_PREVIEW = 'api:yt:dataview:center:get_dataview_info:preview', //大屏预览
23 PUBLISH = 'api:yt:dataview:center:publish', 24 PUBLISH = 'api:yt:dataview:center:publish',
24 // CANCEL_PUBLISH = 'api:yt:dataview:center:cancel_publish', 25 // CANCEL_PUBLISH = 'api:yt:dataview:center:cancel_publish',
25 PUBLISH_INTERFACE = 'api:yt:dataview:center:public_interface', 26 PUBLISH_INTERFACE = 'api:yt:dataview:center:public_interface',
@@ -191,6 +191,7 @@ @@ -191,6 +191,7 @@
191 <template class="ant-card-actions" #actions> 191 <template class="ant-card-actions" #actions>
192 <Tooltip title="预览"> 192 <Tooltip title="预览">
193 <AuthIcon 193 <AuthIcon
  194 + :auth="ConfigurationPermission.DATAVIEW_PREVIEW"
194 class="!text-lg" 195 class="!text-lg"
195 icon="ant-design:eye-outlined" 196 icon="ant-design:eye-outlined"
196 @click="handlePreview(item)" 197 @click="handlePreview(item)"
@@ -20,10 +20,12 @@ @@ -20,10 +20,12 @@
20 import { BasicTable, useTable } from '/@/components/Table'; 20 import { BasicTable, useTable } from '/@/components/Table';
21 import { viewDeviceColumn } from '../config'; 21 import { viewDeviceColumn } from '../config';
22 import { reportEditDetailPage } from '/@/api/report/reportManager'; 22 import { reportEditDetailPage } from '/@/api/report/reportManager';
  23 + import { getDeviceDetail } from '/@/api/device/deviceManager';
  24 + import { getAttribute } from '/@/api/ruleengine/ruleengineApi';
23 25
24 const tableData = ref([]); 26 const tableData = ref([]);
25 27
26 - const [registerTable] = useTable({ 28 + const [registerTable, { setLoading }] = useTable({
27 columns: viewDeviceColumn, 29 columns: viewDeviceColumn,
28 showIndexColumn: false, 30 showIndexColumn: false,
29 clickToRowSelect: false, 31 clickToRowSelect: false,
@@ -32,18 +34,68 @@ @@ -32,18 +34,68 @@
32 }); 34 });
33 35
34 const [register] = useModalInner((data) => { 36 const [register] = useModalInner((data) => {
  37 + setLoading(true);
  38 + tableData.value = [];
35 const getTableData = async () => { 39 const getTableData = async () => {
36 const res = (await reportEditDetailPage(data.record?.id)) as any; 40 const res = (await reportEditDetailPage(data.record?.id)) as any;
37 - const resMap = res?.data?.executeAttributes?.map((item) => ({  
38 - device: item.name,  
39 - attribute: item.attributes.join(','),  
40 - }));  
41 - tableData.value = resMap; 41 + const deviceInfo = res?.data?.executeAttributes || [];
  42 + let attributesList: Recordable[] = [];
  43 + // 处理为物模型里的标识符名
  44 + const reflectDeviceList = deviceInfo.map(async (item) => {
  45 + const { device, attributes } = item as Recordable;
  46 + if (!device) return;
  47 + const thingsModel = (await handleDeviceProfileAttributes(item.device)) as Recordable;
  48 + const { tbDeviceId, attribute } = thingsModel as Recordable;
  49 + if (!tbDeviceId) return;
  50 + if (device === tbDeviceId) {
  51 + attributesList = attributes.reduce((acc, curr) => {
  52 + attribute.forEach((item: Recordable) => {
  53 + if (item.identifier === curr) {
  54 + acc.push({
  55 + label: item.name,
  56 + value: item.identifier,
  57 + });
  58 + }
  59 + });
  60 + return [...acc];
  61 + }, []);
  62 + }
  63 + return {
  64 + device: item.name,
  65 + attribute: attributesList.map((item: Recordable) => item.label).join(','),
  66 + };
  67 + });
  68 + tableData.value = (await Promise.all(reflectDeviceList)) as any;
  69 + if (tableData.value) {
  70 + setLoading(false);
  71 + }
42 }; 72 };
43 nextTick(() => { 73 nextTick(() => {
44 getTableData(); 74 getTableData();
45 }); 75 });
46 }); 76 });
  77 +
  78 + const handleDeviceProfileAttributes = async (entityId: string) => {
  79 + const deviceDetailRes = await getDeviceDetail(entityId);
  80 + const { deviceProfileId } = deviceDetailRes;
  81 + if (!deviceProfileId) return;
  82 + const attributeRes = await getAttribute(deviceProfileId);
  83 + return handleDataFormat(deviceDetailRes, attributeRes);
  84 + };
  85 +
  86 + const handleDataFormat = (deviceDetail: any, attributes: any) => {
  87 + const { name, tbDeviceId } = deviceDetail;
  88 + const attribute = attributes.map((item: any) => ({
  89 + identifier: item.identifier,
  90 + name: item.name,
  91 + detail: item.detail,
  92 + }));
  93 + return {
  94 + name,
  95 + tbDeviceId,
  96 + attribute,
  97 + };
  98 + };
47 </script> 99 </script>
48 <style lang="less" scoped> 100 <style lang="less" scoped>
49 :deep(.ant-table-body) { 101 :deep(.ant-table-body) {
@@ -117,10 +117,12 @@ @@ -117,10 +117,12 @@
117 ); 117 );
118 }; 118 };
119 119
120 - const getChartsOption = (result: ResponsData) => { 120 + const getChartsOption = (result: ResponsData, thingsModel: Recordable) => {
  121 + const { attribute } = thingsModel;
121 const generateInfo = Object.entries(result).map((item) => { 122 const generateInfo = Object.entries(result).map((item) => {
122 const [attr, val] = item; 123 const [attr, val] = item;
123 - return { attr, val } as { attr: string; val: { ts: number; value: string }[] }; 124 + const findAttrName = attribute.find((attrItem) => attrItem.identifier === attr)?.name;
  125 + return { attr: findAttrName, val } as { attr: string; val: { ts: number; value: string }[] };
124 }); 126 });
125 const chartDataConfig = 127 const chartDataConfig =
126 generateInfo.map((item) => { 128 generateInfo.map((item) => {
@@ -216,9 +218,13 @@ @@ -216,9 +218,13 @@
216 }, 218 },
217 }; 219 };
218 220
  221 + const thingsModel = (await handleDeviceProfileAttributes(device)) as Recordable;
219 const result = await exportViewChartApi(device, sendParams); 222 const result = await exportViewChartApi(device, sendParams);
220 item.notFoundData = validateHasData(result); 223 item.notFoundData = validateHasData(result);
221 - const { xAxisData, series } = getChartsOption(result as unknown as ResponsData); 224 + const { xAxisData, series } = getChartsOption(
  225 + result as unknown as ResponsData,
  226 + thingsModel as unknown as Recordable
  227 + );
222 228
223 await nextTick(); 229 await nextTick();
224 chartsInstance[device] = echarts.init( 230 chartsInstance[device] = echarts.init(
@@ -320,7 +326,8 @@ @@ -320,7 +326,8 @@
320 const result = await exportViewChartApi(device, sendParams); 326 const result = await exportViewChartApi(device, sendParams);
321 327
322 item.notFoundData = validateHasData(result); 328 item.notFoundData = validateHasData(result);
323 - const { xAxisData, series } = getChartsOption(result as unknown as ResponsData); 329 + const thingsModel = (await handleDeviceProfileAttributes(device)) as Recordable;
  330 + const { xAxisData, series } = getChartsOption(result as unknown as ResponsData, thingsModel);
324 331
325 chartsInstance[device].setOption({ 332 chartsInstance[device].setOption({
326 series, 333 series,