Commit b57a5ea1880a116ff0a30c6da07f9a44ce0814fa

Authored by xp.Huang
2 parents 6b67d58d 96545af7

Merge branch 'ww' into 'main'

fix: validate priotiy will throw error

See merge request huang/thingskit-drawio!52
@@ -22,26 +22,26 @@ @@ -22,26 +22,26 @@
22 <meta name="mobile-web-app-capable" content="yes"> 22 <meta name="mobile-web-app-capable" content="yes">
23 <meta name="theme-color" content="#d89000"> 23 <meta name="theme-color" content="#d89000">
24 24
25 - <link rel="stylesheet" href="./js/plugin/layui/css/layui.css?v=1664184574262"> 25 + <link rel="stylesheet" href="./js/plugin/layui/css/layui.css?v=1670325027797">
26 26
27 <!-- load configure file --> 27 <!-- load configure file -->
28 - <script src="./js/config/config.js?v=1664184574262"></script> 28 + <script src="./js/config/config.js?v=1670325027797"></script>
29 29
30 <!-- crypto-js --> 30 <!-- crypto-js -->
31 - <script src="./js/plugin/crypto-js/crypto-js.js?v=1664184574262"></script> 31 + <script src="./js/plugin/crypto-js/crypto-js.js?v=1670325027797"></script>
32 32
33 <!-- storage persistent --> 33 <!-- storage persistent -->
34 - <script src="./js/const/persistentStorage.js?v=1664184574262"></script> 34 + <script src="./js/const/persistentStorage.js?v=1670325027797"></script>
35 <!-- Global const --> 35 <!-- Global const -->
36 - <script src="./js/const/const.js?v=1664184574262"></script> 36 + <script src="./js/const/const.js?v=1670325027797"></script>
37 37
38 <!-- Axios --> 38 <!-- Axios -->
39 - <script src="./js/plugin/axios/axios.min.js?v=1664184574262"></script>  
40 - <script src="./js/plugin/axios/DefHttp.js?v=1664184574262"></script>  
41 - <script src="./js/api/index.js?v=1664184574262"></script> 39 + <script src="./js/plugin/axios/axios.min.js?v=1670325027797"></script>
  40 + <script src="./js/plugin/axios/DefHttp.js?v=1670325027797"></script>
  41 + <script src="./js/api/index.js?v=1670325027797"></script>
42 42
43 <!-- load script --> 43 <!-- load script -->
44 - <script src="./js/config/loadScript.js?v=1664184574262"></script> 44 + <script src="./js/config/loadScript.js?v=1670325027797"></script>
45 45
46 <!-- act editor --> 46 <!-- act editor -->
47 <!-- <script src="https://oss.yuntengcloud.com/iotdocs/thingskit-scada/ace.js"></script> --> 47 <!-- <script src="https://oss.yuntengcloud.com/iotdocs/thingskit-scada/ace.js"></script> -->
@@ -54,7 +54,7 @@ @@ -54,7 +54,7 @@
54 <!-- <script src="https://vjs.zencdn.net/7.10.2/video.min.js"></script> --> 54 <!-- <script src="https://vjs.zencdn.net/7.10.2/video.min.js"></script> -->
55 <!-- <script src="https://oss.yuntengcloud.com/iotdocs/thingskit-scada/video.min.js"></script> --> 55 <!-- <script src="https://oss.yuntengcloud.com/iotdocs/thingskit-scada/video.min.js"></script> -->
56 56
57 - <script src="./js/plugin/layui/layui.js?v=1664184574262"></script> 57 + <script src="./js/plugin/layui/layui.js?v=1670325027797"></script>
58 <!-- <link rel="stylesheet" href="https://cdnjs.loli.net/ajax/libs/layui/2.6.8/css/layui.min.css" 58 <!-- <link rel="stylesheet" href="https://cdnjs.loli.net/ajax/libs/layui/2.6.8/css/layui.min.css"
59 integrity="sha512-iQBJbsNHXUcgEIgWThd2dr8tOdKPvICwqjPEZYY81z3eMya44A5MiAqfWSCh+Ee1YzNYkdrI982Qhwgr8LEYOQ==" 59 integrity="sha512-iQBJbsNHXUcgEIgWThd2dr8tOdKPvICwqjPEZYY81z3eMya44A5MiAqfWSCh+Ee1YzNYkdrI982Qhwgr8LEYOQ=="
60 crossorigin="anonymous" referrerpolicy="no-referrer" /> 60 crossorigin="anonymous" referrerpolicy="no-referrer" />
@@ -63,7 +63,7 @@ @@ -63,7 +63,7 @@
63 crossorigin="anonymous" referrerpolicy="no-referrer"></script> --> 63 crossorigin="anonymous" referrerpolicy="no-referrer"></script> -->
64 64
65 <!-- 引入修改样式 --> 65 <!-- 引入修改样式 -->
66 - <link rel="stylesheet" href="./styles/formatChange.css?v=1664184574262"> 66 + <link rel="stylesheet" href="./styles/formatChange.css?v=1670325027797">
67 67
68 <script type="text/javascript"> 68 <script type="text/javascript">
69 /** 69 /**
@@ -306,7 +306,7 @@ @@ -306,7 +306,7 @@
306 var supportedDomain = (hostName.substring(hostName.length - 8, hostName.length) === '.draw.io') || 306 var supportedDomain = (hostName.substring(hostName.length - 8, hostName.length) === '.draw.io') ||
307 (hostName.substring(hostName.length - 13, hostName.length) === '.diagrams.net'); 307 (hostName.substring(hostName.length - 13, hostName.length) === '.diagrams.net');
308 308
309 - const releaseVersion = '1664184574262' 309 + const releaseVersion = '1670325027797'
310 const appMinSrc = Enable_OSS ? `${OSS_Prefix}app.min.js?v=${releaseVersion}` : `js/app.min.js?v=${releaseVersion}` 310 const appMinSrc = Enable_OSS ? `${OSS_Prefix}app.min.js?v=${releaseVersion}` : `js/app.min.js?v=${releaseVersion}`
311 function loadAppJS() { 311 function loadAppJS() {
312 mxscript(appMinSrc, function () { 312 mxscript(appMinSrc, function () {
@@ -3,7 +3,7 @@ class ConfigurationNodeApi { @@ -3,7 +3,7 @@ class ConfigurationNodeApi {
3 /** 3 /**
4 * @description 获取用户权限 4 * @description 获取用户权限
5 */ 5 */
6 - static getUserPermissions(){ 6 + static getUserPermissions() {
7 return defHttp.get('/yt/role/me/permissions') 7 return defHttp.get('/yt/role/me/permissions')
8 } 8 }
9 9
@@ -40,7 +40,7 @@ class ConfigurationNodeApi { @@ -40,7 +40,7 @@ class ConfigurationNodeApi {
40 * @returns {Promise<*>} 40 * @returns {Promise<*>}
41 */ 41 */
42 static getDeviceUnderTheOrg(deviceType, orgId) { 42 static getDeviceUnderTheOrg(deviceType, orgId) {
43 - return defHttp.get(`/yt/device/list/${deviceType}?organizationId=${orgId}`) 43 + return defHttp.get(`/yt/device/list?deviceType=${deviceType}&organizationId=${orgId}`)
44 } 44 }
45 45
46 /** 46 /**
@@ -171,4 +171,42 @@ class ConfigurationNodeApi { @@ -171,4 +171,42 @@ class ConfigurationNodeApi {
171 static getStreamingVideoPlayUrl(id) { 171 static getStreamingVideoPlayUrl(id) {
172 return defHttp.get(`/yt/video/url/${id}`) 172 return defHttp.get(`/yt/video/url/${id}`)
173 } 173 }
  174 +
  175 + /**
  176 + * @description 获取设备物模型属性
  177 + * @param {*} deviceProfileId
  178 + * @param {*} dataType
  179 + * @returns
  180 + */
  181 + static getDeviceAttribute(deviceProfileId, dataType) {
  182 + return defHttp.get(`/yt/device/attributes/${deviceProfileId}`, { params: { dataType } })
  183 + }
  184 +
  185 + /**
  186 + * @description 获取产品
  187 + * @param {string} deviceType
  188 + * @returns
  189 + */
  190 + static getProduct(deviceType) {
  191 + return defHttp.get('/yt/device_profile/me/list', { params: { deviceType } })
  192 + }
  193 +
  194 + /**
  195 + * @description 获取满足条件的设备
  196 + * @param {{deviceLabel: string, deviceProfileId: string, deviceType: string, organizationId: string }} params
  197 + * @returns
  198 + */
  199 + static getMeetConditionsDevice(params = {}) {
  200 + const { deviceLabel, deviceProfileId, deviceType, organizationId } = params
  201 + return defHttp.get('/yt/device/list', { params: { deviceLabel, deviceProfileId, deviceType, organizationId } })
  202 + }
  203 +
  204 + /**
  205 + * @description 获取字典值
  206 + * @param {string} dictCode
  207 + * @returns
  208 + */
  209 + static getDictionaryValue(dictCode) {
  210 + return defHttp.post('/yt/dict_item/find', {dictCode})
  211 + }
174 } 212 }
@@ -33,7 +33,6 @@ const GLOBAL_PLATFORM_INFO = (() => { @@ -33,7 +33,6 @@ const GLOBAL_PLATFORM_INFO = (() => {
33 * @type {{JWT_TOKEN: {value: string}}} 33 * @type {{JWT_TOKEN: {value: string}}}
34 */ 34 */
35 const common = ls.get(GLOBAL_PLATFORM_INFO_KEY) 35 const common = ls.get(GLOBAL_PLATFORM_INFO_KEY)
36 - console.log(common)  
37 return common 36 return common
38 })() 37 })()
39 38
@@ -4230,17 +4230,19 @@ App.prototype.loadFile = function (id, sameWindow, file, success, force) { @@ -4230,17 +4230,19 @@ App.prototype.loadFile = function (id, sameWindow, file, success, force) {
4230 // } 4230 // }
4231 }) 4231 })
4232 } 4232 }
  4233 + var pageFormat = this.editor.graph.pageFormat
4233 4234
4234 // 调用API,获取保存的内容 4235 // 调用API,获取保存的内容
4235 function getSaveContent() { 4236 function getSaveContent() {
4236 defHttp.get('/yt/configuration/center/get_configuration_info/' + Editor.configurationId) 4237 defHttp.get('/yt/configuration/center/get_configuration_info/' + Editor.configurationId)
4237 .then(function (response) { 4238 .then(function (response) {
4238 getUserPermission() 4239 getUserPermission()
4239 -  
4240 const { platform } = response || {} 4240 const { platform } = response || {}
4241 const pageSizeControl = PageSetupDialog.getFormats 4241 const pageSizeControl = PageSetupDialog.getFormats
4242 PageSetupDialog.getFormats = function () { 4242 PageSetupDialog.getFormats = function () {
4243 if (platform === 'phone') { 4243 if (platform === 'phone') {
  4244 + pageFormat.width = 415
  4245 + pageFormat.height = 737
4244 return [ 4246 return [
4245 { key: 'iPhone 8', title: 'iPhone 8', format: new mxRectangle(0, 0, 375, 667) }, 4247 { key: 'iPhone 8', title: 'iPhone 8', format: new mxRectangle(0, 0, 375, 667) },
4246 { key: 'iPhone 8 Plus', title: 'iPhone 8 Plus', format: new mxRectangle(0, 0, 415, 737) }, 4248 { key: 'iPhone 8 Plus', title: 'iPhone 8 Plus', format: new mxRectangle(0, 0, 415, 737) },
@@ -4258,6 +4260,8 @@ App.prototype.loadFile = function (id, sameWindow, file, success, force) { @@ -4258,6 +4260,8 @@ App.prototype.loadFile = function (id, sameWindow, file, success, force) {
4258 { key: 'custom', title: mxResources.get('custom'), format: null } 4260 { key: 'custom', title: mxResources.get('custom'), format: null }
4259 ] 4261 ]
4260 } 4262 }
  4263 + pageFormat.width = 1920
  4264 + pageFormat.height = 1080
4261 return pageSizeControl.apply(this, arguments) 4265 return pageSizeControl.apply(this, arguments)
4262 } 4266 }
4263 Editor.configurationName = response.configurationName + ".drawio"; 4267 Editor.configurationName = response.configurationName + ".drawio";
@@ -5049,7 +5053,7 @@ App.prototype.updateButtonContainer = function () { @@ -5049,7 +5053,7 @@ App.prototype.updateButtonContainer = function () {
5049 this.currentFile.ui.actions.get('open').funct() 5053 this.currentFile.ui.actions.get('open').funct()
5050 console.log(this) 5054 console.log(this)
5051 })); 5055 }));
5052 - this.leftContainer.appendChild(this.importButton); 5056 + // this.leftContainer.appendChild(this.importButton);
5053 5057
5054 // TODO thingsKit 导出案例 5058 // TODO thingsKit 导出案例
5055 this.exportButton = document.createElement('div'); 5059 this.exportButton = document.createElement('div');
@@ -5079,7 +5083,7 @@ App.prototype.updateButtonContainer = function () { @@ -5079,7 +5083,7 @@ App.prototype.updateButtonContainer = function () {
5079 5083
5080 savefiles(this.currentFile.data, '未命名.xml') 5084 savefiles(this.currentFile.data, '未命名.xml')
5081 })); 5085 }));
5082 - this.leftContainer.appendChild(this.exportButton); 5086 + // this.leftContainer.appendChild(this.exportButton);
5083 5087
5084 // TODO thingsKit 锁定 / 解锁 按钮 5088 // TODO thingsKit 锁定 / 解锁 按钮
5085 this.lockButton = document.createElement('div'); 5089 this.lockButton = document.createElement('div');
@@ -174,10 +174,15 @@ @@ -174,10 +174,15 @@
174 if (!chartDom) return 174 if (!chartDom) return
175 chartDom.style.width = `${width}px` 175 chartDom.style.width = `${width}px`
176 chartDom.style.height = `${height}px` 176 chartDom.style.height = `${height}px`
177 - const myChart = echarts.init(chartDom);  
178 - const option = chartOptionMapping[chartType] ? chartOptionMapping[chartType]() : {}  
179 - option && myChart.setOption(option);  
180 - chartsInstanceMapping.set(id, myChart) 177 + try {
  178 + const myChart = echarts.init(chartDom);
  179 + const option = chartOptionMapping[chartType] ? chartOptionMapping[chartType]() : {}
  180 + option && myChart.setOption(option);
  181 + chartsInstanceMapping.set(id, myChart)
  182 + } catch (error) {
  183 +
  184 + }
  185 +
181 } 186 }
182 187
183 /** 188 /**
@@ -4952,12 +4952,6 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -4952,12 +4952,6 @@ DataFormatPanel.prototype.addDataFont = function (container) {
4952 let treeList = [] 4952 let treeList = []
4953 4953
4954 /** 4954 /**
4955 - * @description 当前选中的组织树节点  
4956 - * @type {null | string}  
4957 - */  
4958 - let currentCheckedOrgNode = null  
4959 -  
4960 - /**  
4961 * @description 当前节点绑定数据 4955 * @description 当前节点绑定数据
4962 * @type {null | {act: [], event: [], dataSources: []}} 4956 * @type {null | {act: [], event: [], dataSources: []}}
4963 */ 4957 */
@@ -5067,7 +5061,9 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5067,7 +5061,9 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5067 SLAVE_DEVICE_ID: 'slaveDeviceId', 5061 SLAVE_DEVICE_ID: 'slaveDeviceId',
5068 ATTR: 'attr', 5062 ATTR: 'attr',
5069 GATEWAY: 'GATEWAY', 5063 GATEWAY: 'GATEWAY',
5070 - ADDITIONAL: 'additional' 5064 + ADDITIONAL: 'additional',
  5065 + DEVICE_PROFILE_ID: 'deviceProfileId',
  5066 + DEVICE_TYPE: 'deviceType'
5071 } 5067 }
5072 5068
5073 /** 5069 /**
@@ -5078,7 +5074,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5078,7 +5074,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5078 5074
5079 /** 5075 /**
5080 * @description 用于在其他位置获取数据源绑定的数据,在生成数据源面板中进行了改写 5076 * @description 用于在其他位置获取数据源绑定的数据,在生成数据源面板中进行了改写
5081 - * @return {{orgId: string, attr: string, deviceId: string, slaveDeviceId: string}} 5077 + * @return {{orgId: string, attr: string, deviceId: string, deviceType: string, deviceProfileId: string}}
5082 */ 5078 */
5083 function getDataSourceBindValue() { 5079 function getDataSourceBindValue() {
5084 5080
@@ -5236,7 +5232,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5236,7 +5232,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5236 5232
5237 5233
5238 async function mount() { 5234 async function mount() {
5239 - const { component, echoDataSource, getValue } = generateDataSourceComponent({ validate: false }) 5235 + const { component, echoDataSource, getValue } = generateDataSourceComponent({ validate: true })
5240 $(fragment).append(title).append(component) 5236 $(fragment).append(title).append(component)
5241 $(container).append(fragment) 5237 $(container).append(fragment)
5242 5238
@@ -5938,7 +5934,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5938,7 +5934,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5938 const type = graph.getAttributeForCell(cell, basicAttr.COMPONENT_TYPE) 5934 const type = graph.getAttributeForCell(cell, basicAttr.COMPONENT_TYPE)
5939 return renderMapping[type]?.(field) || {} 5935 return renderMapping[type]?.(field) || {}
5940 5936
5941 - function getSubmitValue(field) { 5937 + function getSubmitValue(field) {
5942 const ENABLED_FLAG = 'on' 5938 const ENABLED_FLAG = 'on'
5943 const additionalKey = HandleDataSource.enumConst 5939 const additionalKey = HandleDataSource.enumConst
5944 const value = { 5940 const value = {
@@ -5950,7 +5946,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5950,7 +5946,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5950 [enumCategory.DATA_SOURCE]: { 5946 [enumCategory.DATA_SOURCE]: {
5951 [enumDataSourceConst.ORG_ID]: field[enumDataSourceConst.ORG_ID], 5947 [enumDataSourceConst.ORG_ID]: field[enumDataSourceConst.ORG_ID],
5952 [enumDataSourceConst.DEVICE_ID]: field[enumDataSourceConst.DEVICE_ID], 5948 [enumDataSourceConst.DEVICE_ID]: field[enumDataSourceConst.DEVICE_ID],
5953 - [enumDataSourceConst.SLAVE_DEVICE_ID]: field[enumDataSourceConst.SLAVE_DEVICE_ID] ? field[enumDataSourceConst.SLAVE_DEVICE_ID] : '', 5949 + [enumDataSourceConst.DEVICE_TYPE]: field[enumDataSourceConst.DEVICE_TYPE],
  5950 + [enumDataSourceConst.DEVICE_PROFILE_ID]: field[enumDataSourceConst.DEVICE_PROFILE_ID],
5954 [enumDataSourceConst.ATTR]: field[enumDataSourceConst.ATTR], 5951 [enumDataSourceConst.ATTR]: field[enumDataSourceConst.ATTR],
5955 [enumDataSourceConst.ADDITIONAL]: field[additionalKey.DATA_TYPE] ? { 5952 [enumDataSourceConst.ADDITIONAL]: field[additionalKey.DATA_TYPE] ? {
5956 [additionalKey.AGG]: field[additionalKey.AGG], 5953 [additionalKey.AGG]: field[additionalKey.AGG],
@@ -5994,7 +5991,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5994,7 +5991,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5994 [enumCategory.DATA_SOURCE]: { 5991 [enumCategory.DATA_SOURCE]: {
5995 [enumDataSourceConst.ORG_ID]: field[enumDataSourceConst.ORG_ID], 5992 [enumDataSourceConst.ORG_ID]: field[enumDataSourceConst.ORG_ID],
5996 [enumDataSourceConst.DEVICE_ID]: field[enumDataSourceConst.DEVICE_ID], 5993 [enumDataSourceConst.DEVICE_ID]: field[enumDataSourceConst.DEVICE_ID],
5997 - [enumDataSourceConst.SLAVE_DEVICE_ID]: field[enumDataSourceConst.SLAVE_DEVICE_ID] ? field[enumDataSourceConst.SLAVE_DEVICE_ID] : '', 5994 + [enumDataSourceConst.DEVICE_TYPE]: field[enumDataSourceConst.DEVICE_TYPE],
  5995 + [enumDataSourceConst.DEVICE_PROFILE_ID]: field[enumDataSourceConst.DEVICE_PROFILE_ID],
5998 [enumDataSourceConst.ATTR]: field[enumDataSourceConst.ATTR], 5996 [enumDataSourceConst.ATTR]: field[enumDataSourceConst.ATTR],
5999 [enumDataSourceConst.ADDITIONAL]: { 5997 [enumDataSourceConst.ADDITIONAL]: {
6000 [additionalKey.ORG_NAME]: field[additionalKey.ORG_NAME], 5998 [additionalKey.ORG_NAME]: field[additionalKey.ORG_NAME],
@@ -7765,27 +7763,27 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7765,27 +7763,27 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7765 7763
7766 const enumDataSourceConst = { 7764 const enumDataSourceConst = {
7767 ORG_ID: 'orgId', 7765 ORG_ID: 'orgId',
  7766 + DEVICE_TYPE: 'deviceType',
  7767 + DEVICE_PROFILE_ID: 'deviceProfileId',
7768 DEVICE_ID: 'deviceId', 7768 DEVICE_ID: 'deviceId',
7769 - SLAVE_DEVICE_ID: 'slaveDeviceId',  
7770 ATTR: 'attr', 7769 ATTR: 'attr',
7771 GATEWAY: 'GATEWAY', 7770 GATEWAY: 'GATEWAY',
7772 ORG_NAME: 'orgName', 7771 ORG_NAME: 'orgName',
7773 DEVICE_NAME: 'deviceName', 7772 DEVICE_NAME: 'deviceName',
7774 - SLAVE_DEVICE_NAME: 'slaveDeviceName',  
7775 ATTR_NAME: 'attrName' 7773 ATTR_NAME: 'attrName'
7776 } 7774 }
7777 7775
7778 /** 7776 /**
7779 * @description 7777 * @description
7780 - * @type {{id: string, deviceType: string, name: string}[]} 7778 + * @type {{id: string, deviceType: string, name: string, deviceProfileId: string}[]}
7781 */ 7779 */
7782 let deviceList = [] 7780 let deviceList = []
7783 7781
7784 /** 7782 /**
7785 - * @description  
7786 - * @type {{id: string, deviceType: string, name: string}[]}  
7787 - */  
7788 - let slaveDeviceList = [] 7783 + * @descrition
  7784 + * @type {{deviceProfileId: string, id: string, organizationId: string, deviceType: string}}
  7785 + */
  7786 + let currentDataSource = {}
7789 7787
7790 const component = document.createElement('div') 7788 const component = document.createElement('div')
7791 7789
@@ -7799,13 +7797,66 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7799,13 +7797,66 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7799 init() 7797 init()
7800 7798
7801 function init() { 7799 function init() {
7802 - generatorOrgTres() 7800 + generateDeviceTypeSelect()
  7801 + generateProductSelect()
  7802 + generatorOrgTrees()
7803 generatorDeviceSelect() 7803 generatorDeviceSelect()
7804 - generatorSlaveDevice()  
7805 generatorAttrSelect() 7804 generatorAttrSelect()
7806 generateDeviceNameInput() 7805 generateDeviceNameInput()
7807 } 7806 }
7808 7807
  7808 + function generateDeviceTypeSelect() {
  7809 + getDeviceType()
  7810 +
  7811 + const deviceType = UseLayUi.createSelect({
  7812 + label: '设备类型',
  7813 + bindValueFiled: enumDataSourceConst.DEVICE_TYPE,
  7814 + layFilter: `${componentFilter}--${enumDataSourceConst.DEVICE_TYPE}`,
  7815 + className: 'data-source__component-select',
  7816 + ...validateRule,
  7817 + onClick(data) {
  7818 + const { value } = data
  7819 + form.val(componentFilter, {
  7820 + [enumDataSourceConst.DEVICE_PROFILE_ID]: null,
  7821 + [enumDataSourceConst.DEVICE_ID]: null,
  7822 + [enumDataSourceConst.DEVICE_NAME]: null,
  7823 + [enumDataSourceConst.DEVICE_ID]: null,
  7824 + [enumDataSourceConst.ATTR]: null,
  7825 + [enumDataSourceConst.ATTR_NAME]: null,
  7826 + [enumDataSourceConst.ORG_ID]: null
  7827 + })
  7828 +
  7829 + currentDataSource[enumDataSourceConst.DEVICE_TYPE] = value
  7830 + getMeetConditionsDevice(currentDataSource)
  7831 + getProduct(value)
  7832 + },
  7833 + })
  7834 + $(component).append(deviceType)
  7835 + }
  7836 +
  7837 + function generateProductSelect() {
  7838 + const productSelect = UseLayUi.createSelect({
  7839 + label: '产品',
  7840 + bindValueFiled: enumDataSourceConst.DEVICE_PROFILE_ID,
  7841 + layFilter: `${componentFilter}--${enumDataSourceConst.DEVICE_PROFILE_ID}`,
  7842 + className: 'data-source__component-select',
  7843 + ...validateRule,
  7844 + onClick(data) {
  7845 + const { value } = data
  7846 + form.val(componentFilter, {
  7847 + [enumDataSourceConst.DEVICE_NAME]: null,
  7848 + [enumDataSourceConst.DEVICE_ID]: null,
  7849 + [enumDataSourceConst.ATTR]: null,
  7850 + [enumDataSourceConst.ATTR_NAME]: null,
  7851 + })
  7852 + currentDataSource[enumDataSourceConst.DEVICE_PROFILE_ID] = value
  7853 + getMeetConditionsDevice(currentDataSource)
  7854 + getAttrByDeviceId(value)
  7855 + },
  7856 + })
  7857 + $(component).append(productSelect)
  7858 + }
  7859 +
7809 async function generateDeviceNameInput() { 7860 async function generateDeviceNameInput() {
7810 const template = ` 7861 const template = `
7811 <div class="layui-form-item" style="margin-bottom: 0"> 7862 <div class="layui-form-item" style="margin-bottom: 0">
@@ -7815,45 +7866,42 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7815,45 +7866,42 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7815 <input style="display: none" type="text" name="${enumDataSourceConst.DEVICE_NAME}" class="layui-input"> 7866 <input style="display: none" type="text" name="${enumDataSourceConst.DEVICE_NAME}" class="layui-input">
7816 </div> 7867 </div>
7817 <div class="layui-form-item" style="margin-bottom: 0"> 7868 <div class="layui-form-item" style="margin-bottom: 0">
7818 - <input style="display: none" type="text" name="${enumDataSourceConst.SLAVE_DEVICE_NAME}" class="layui-input">  
7819 - </div>  
7820 - <div class="layui-form-item" style="margin-bottom: 0">  
7821 <input style="display: none" type="text" name="${enumDataSourceConst.ATTR_NAME}" class="layui-input"> 7869 <input style="display: none" type="text" name="${enumDataSourceConst.ATTR_NAME}" class="layui-input">
7822 </div> 7870 </div>
7823 ` 7871 `
7824 $(component).append(template) 7872 $(component).append(template)
7825 } 7873 }
7826 7874
  7875 + async function getDeviceType() {
  7876 + const items = await ConfigurationNodeApi.getDictionaryValue('device_type')
  7877 + $(`#${componentId} `).find(`select[name="${enumDataSourceConst.DEVICE_TYPE}"]`).html(UseLayUi.generateOptionTemplate({ dataSource: items, labelField: 'itemText', valueField: 'itemValue' }))
  7878 + form.render('select', componentFilter)
  7879 + }
7827 7880
7828 - /**  
7829 - * @description 根据组织ID获取设备  
7830 - */  
7831 - async function getDevicesByOrgId(organizationId) {  
7832 - if (organizationId) {  
7833 - const items = deviceList = await ConfigurationNodeApi.getMasterDevice(organizationId);  
7834 - $(`#${componentId} `).find(`select[name="${enumDataSourceConst.DEVICE_ID}"]`).html(UseLayUi.generateOptionTemplate({ dataSource: items }))  
7835 - form.render('select', componentFilter)  
7836 - } 7881 + async function getProduct(deviceType) {
  7882 + const items = productList = await ConfigurationNodeApi.getProduct(deviceType)
  7883 + $(`#${componentId} `).find(`select[name="${enumDataSourceConst.DEVICE_PROFILE_ID}"]`).html(UseLayUi.generateOptionTemplate({ dataSource: items, labelField: 'name', valueField: 'id', alias: 'alias' }))
  7884 + form.render('select', componentFilter)
7837 } 7885 }
7838 7886
7839 /** 7887 /**
7840 - * @description 通过主设备ID获取从设备 7888 + * @description 根据组织ID获取设备
7841 */ 7889 */
7842 - async function getSlaveDeviceByMasterDeviceId(orgId, deviceId) {  
7843 - if (deviceId && currentCheckedOrgNode) {  
7844 - const items = slaveDeviceList = await ConfigurationNodeApi.getSlaveDevice(orgId, deviceId);  
7845 - $(`#${componentId} `).find(`select[name="${enumDataSourceConst.SLAVE_DEVICE_ID}"]`).html(UseLayUi.generateOptionTemplate({ dataSource: items }))  
7846 - form.render('select', componentFilter)  
7847 - } 7890 + async function getMeetConditionsDevice(params) {
  7891 + if (!params.organizationId) return
  7892 + const items = await ConfigurationNodeApi.getMeetConditionsDevice(params);
  7893 + $(`#${componentId} `).find(`select[name="${enumDataSourceConst.DEVICE_ID}"]`).html(UseLayUi.generateOptionTemplate({ dataSource: items, valueField: 'tbDeviceId', labelField: 'name', alias: 'alias' }))
  7894 + form.render('select', componentFilter)
7848 } 7895 }
7849 7896
  7897 +
7850 /** 7898 /**
7851 * @description 根据设备ID获取属性 7899 * @description 根据设备ID获取属性
7852 */ 7900 */
7853 - async function getAttrByDeviceId(tbDeviceId) {  
7854 - if (tbDeviceId) {  
7855 - const [err, res] = await to(ConfigurationNodeApi.getDeviceAttr(tbDeviceId))  
7856 - $(`#${componentId} `).find(`select[name="${enumDataSourceConst.ATTR}"]`).html(UseLayUi.generateOptionTemplate({ dataSource: res })) 7901 + async function getAttrByDeviceId(deviceProfileId) {
  7902 + if (deviceProfileId) {
  7903 + const [err, res] = await to(ConfigurationNodeApi.getDeviceAttribute(deviceProfileId))
  7904 + $(`#${componentId} `).find(`select[name="${enumDataSourceConst.ATTR}"]`).html(UseLayUi.generateOptionTemplate({ dataSource: Array.isArray(res) ? res : [], labelField: 'name', valueField: 'identifier' }))
7857 form.render('select', componentFilter) 7905 form.render('select', componentFilter)
7858 } 7906 }
7859 } 7907 }
@@ -7862,7 +7910,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7862,7 +7910,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7862 /** 7910 /**
7863 * @description 生成组织选择 7911 * @description 生成组织选择
7864 */ 7912 */
7865 - async function generatorOrgTres() { 7913 + async function generatorOrgTrees() {
7866 const orgContainerId = `data-source__component--org-${Date.now()}` 7914 const orgContainerId = `data-source__component--org-${Date.now()}`
7867 const orgContainer = `<div id="${orgContainerId}"></div>` 7915 const orgContainer = `<div id="${orgContainerId}"></div>`
7868 $(component).append(orgContainer) 7916 $(component).append(orgContainer)
@@ -7881,18 +7929,15 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7881,18 +7929,15 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7881 treeProps: { 7929 treeProps: {
7882 data: treeList, 7930 data: treeList,
7883 onlyIconControl: true, 7931 onlyIconControl: true,
7884 - click(node) {  
7885 - currentCheckedOrgNode = node.data.id 7932 +
  7933 + click(node) {
7886 form.val(componentFilter, { 7934 form.val(componentFilter, {
7887 - [enumDataSourceConst.ORG_NAME]: node.data.title, 7935 + [enumDataSourceConst.ORG_NAME]: node?.data?.title,
7888 [enumDataSourceConst.DEVICE_ID]: null, 7936 [enumDataSourceConst.DEVICE_ID]: null,
7889 - [enumDataSourceConst.SLAVE_DEVICE_ID]: null,  
7890 - [enumDataSourceConst.ATTR]: null,  
7891 [enumDataSourceConst.DEVICE_NAME]: null, 7937 [enumDataSourceConst.DEVICE_NAME]: null,
7892 - [enumDataSourceConst.SLAVE_DEVICE_NAME]: null,  
7893 - [enumDataSourceConst.ATTR_NAME]: null,  
7894 }) 7938 })
7895 - getDevicesByOrgId(node.data.id) 7939 + currentDataSource.organizationId = node?.data?.id
  7940 + getMeetConditionsDevice(currentDataSource)
7896 }, 7941 },
7897 }, 7942 },
7898 }) 7943 })
@@ -7911,52 +7956,18 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7911,52 +7956,18 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7911 onClick(data) { 7956 onClick(data) {
7912 const { value } = data 7957 const { value } = data
7913 const selected = deviceList.find(item => item.id === value) 7958 const selected = deviceList.find(item => item.id === value)
  7959 + if (!selected) return
7914 form.val(componentFilter, { 7960 form.val(componentFilter, {
7915 - [enumDataSourceConst.DEVICE_NAME]: selected.name,  
7916 - [enumDataSourceConst.SLAVE_DEVICE_ID]: null, 7961 + [enumDataSourceConst.DEVICE_NAME]: selected?.name,
7917 [enumDataSourceConst.ATTR]: null, 7962 [enumDataSourceConst.ATTR]: null,
7918 - [enumDataSourceConst.SLAVE_DEVICE_NAME]: null,  
7919 [enumDataSourceConst.ATTR_NAME]: null, 7963 [enumDataSourceConst.ATTR_NAME]: null,
7920 }) 7964 })
7921 - if (!selected) return  
7922 - if (selected.deviceType === enumDataSourceConst.GATEWAY) {  
7923 - $(`#${componentId}`).find(`select[name="${enumDataSourceConst.SLAVE_DEVICE_ID}"]`)  
7924 - .attr('lay-verify', 'required').attr('lay-verType', 'tips')  
7925 - .parentsUntil(`#${componentId}`).show()  
7926 - getSlaveDeviceByMasterDeviceId(currentCheckedOrgNode, selected.id)  
7927 - } else {  
7928 - $(`#${componentId}`).find(`select[name="${enumDataSourceConst.SLAVE_DEVICE_ID}"]`)  
7929 - .attr('lay-verify', '').attr('lay-verType', 'tips')  
7930 - .parentsUntil(`#${componentId}`).hide()  
7931 - getAttrByDeviceId(selected.id)  
7932 - }  
7933 }, 7965 },
7934 }) 7966 })
7935 $(component).append(deviceSelect) 7967 $(component).append(deviceSelect)
7936 } 7968 }
7937 7969
7938 - /**  
7939 - * @description 生成从设备选择器  
7940 - */  
7941 - function generatorSlaveDevice() {  
7942 - const slaveDeviceSelect = UseLayUi.createSelect({  
7943 - label: '子设备',  
7944 - bindValueFiled: enumDataSourceConst.SLAVE_DEVICE_ID,  
7945 - layFilter: `${componentFilter}--${enumDataSourceConst.SLAVE_DEVICE_ID}`,  
7946 - className: 'data-source__component-select',  
7947 - onClick(data) {  
7948 - const { value } = data  
7949 - const selected = slaveDeviceList.find(item => item.id === value)  
7950 - form.val(componentFilter, {  
7951 - [enumDataSourceConst.SLAVE_DEVICE_NAME]: selected.name,  
7952 - [enumDataSourceConst.ATTR]: null,  
7953 - [enumDataSourceConst.ATTR_NAME]: null,  
7954 - })  
7955 - getAttrByDeviceId(value)  
7956 - },  
7957 - })  
7958 - $(component).append(slaveDeviceSelect)  
7959 - } 7970 +
7960 7971
7961 /** 7972 /**
7962 * @description 生成属性选择器 7973 * @description 生成属性选择器
@@ -7983,36 +7994,32 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7983,36 +7994,32 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7983 * @param {{orgId: string, deviceId: string, slaveDeviceId?: string, attr: string}} dataSource 7994 * @param {{orgId: string, deviceId: string, slaveDeviceId?: string, attr: string}} dataSource
7984 */ 7995 */
7985 function echoDataSource(dataSource = {}) { 7996 function echoDataSource(dataSource = {}) {
7986 - const { orgId, deviceId, slaveDeviceId, attr } = dataSource 7997 + const { orgId, deviceId, deviceProfileId, deviceType, attr } = dataSource
7987 const queue = [] 7998 const queue = []
7988 - if (orgId) {  
7989 - currentCheckedOrgNode = orgId  
7990 - queue.push(getDevicesByOrgId(orgId))  
7991 - }  
7992 - if (slaveDeviceId) {  
7993 - queue.push(getSlaveDeviceByMasterDeviceId(orgId, deviceId))  
7994 - $(`#${componentId}`).find(`select[name="${enumDataSourceConst.SLAVE_DEVICE_ID}"]`).parentsUntil(`#${componentId}`).show()  
7995 - queue.push(getAttrByDeviceId(slaveDeviceId))  
7996 - } else {  
7997 - $(`#${componentId}`).find(`select[name="${enumDataSourceConst.SLAVE_DEVICE_ID}"]`).parentsUntil(`#${componentId}`).hide()  
7998 - queue.push(getAttrByDeviceId(deviceId))  
7999 - } 7999 + currentDataSource = { organizationId: orgId, deviceProfileId, deviceType }
  8000 + queue.push(getProduct(deviceType))
  8001 + queue.push(getMeetConditionsDevice({ organizationId: orgId, deviceProfileId, deviceType }))
  8002 + queue.push(getAttrByDeviceId(deviceProfileId))
8000 Promise.all(queue) 8003 Promise.all(queue)
8001 .finally(() => { 8004 .finally(() => {
8002 - const orgNode = UseLayUi.findTreeObjectByField(treeList, currentCheckedOrgNode)  
8003 - $(`#${componentId} input[name="${enumDataSourceConst.ORG_ID}"]`).parent().find('span').html(orgNode?.name) 8005 + const orgNode = UseLayUi.findTreeObjectByField(treeList, orgId)
  8006 +
  8007 + $(`#${componentId} input[name="${enumDataSourceConst.ORG_ID}"]`).val(orgNode?.id).parent().find('span').html(orgNode?.name)
  8008 +
8004 form.val(componentFilter, { 8009 form.val(componentFilter, {
8005 orgId, 8010 orgId,
8006 deviceId, 8011 deviceId,
8007 - slaveDeviceId, 8012 + deviceProfileId,
  8013 + deviceType,
8008 attr, 8014 attr,
8009 }) 8015 })
  8016 +
8010 }) 8017 })
8011 } 8018 }
8012 8019
8013 /** 8020 /**
8014 * 8021 *
8015 - * @returns {{orgId: string, attr: string, deviceId: string, slaveDeviceId: string}} 8022 + * @returns {{orgId: string, attr: string, deviceId: string, devi}}
8016 */ 8023 */
8017 function getValue() { 8024 function getValue() {
8018 return form.val(componentFilter) 8025 return form.val(componentFilter)
@@ -8444,13 +8451,14 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -8444,13 +8451,14 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8444 function proxyFn(fn) { 8451 function proxyFn(fn) {
8445 return (...args) => { 8452 return (...args) => {
8446 const currentDataSource = getDataSourceBindValue() || {} 8453 const currentDataSource = getDataSourceBindValue() || {}
8447 -  
8448 - to(ConfigurationNodeApi.updateNodeInfo({  
8449 - configurationId,  
8450 - contentId: currentPageId.id,  
8451 - nodeId: graphId,  
8452 - [enumCategory.DATA_SOURCE]: currentDataSource  
8453 - })) 8454 + if (currentDataSource.deviceProfileId && currentDataSource.deviceType && currentDataSource.orgId) {
  8455 + to(ConfigurationNodeApi.updateNodeInfo({
  8456 + configurationId,
  8457 + contentId: currentPageId.id,
  8458 + nodeId: graphId,
  8459 + [enumCategory.DATA_SOURCE]: currentDataSource
  8460 + }))
  8461 + }
8454 fn.apply(null, args) 8462 fn.apply(null, args)
8455 } 8463 }
8456 } 8464 }
@@ -12302,14 +12310,15 @@ class UseLayUi { @@ -12302,14 +12310,15 @@ class UseLayUi {
12302 * @param {boolean} [addPlaceholderOption = true] options.addPlaceholderOption 12310 * @param {boolean} [addPlaceholderOption = true] options.addPlaceholderOption
12303 * @param {string} [labelField = 'name'] options.labelField 12311 * @param {string} [labelField = 'name'] options.labelField
12304 * @param {string} [valueField = 'name'] options.valueField 12312 * @param {string} [valueField = 'name'] options.valueField
  12313 + * @param {string} [alias] options.alias
12305 * @returns {*} 12314 * @returns {*}
12306 */ 12315 */
12307 static generateOptionTemplate(options) { 12316 static generateOptionTemplate(options) {
12308 - const { dataSource = [], addPlaceholderOption = true, labelField = 'name', valueField = 'id' } = options 12317 + const { dataSource = [], addPlaceholderOption = true, labelField = 'name', valueField = 'id', alias } = options
12309 let { renderFn } = options 12318 let { renderFn } = options
12310 renderFn = renderFn || ((record) => { 12319 renderFn = renderFn || ((record) => {
12311 if (typeof record === 'object') { 12320 if (typeof record === 'object') {
12312 - return `<option value="${record[valueField]}" ${record.disabled ? 'disabled=""' : ''}>${record[labelField]}</option>` 12321 + return `<option value="${record[valueField]}" ${record.disabled ? 'disabled=""' : ''}>${alias && record[alias] ? record[alias] : record[labelField]}</option>`
12313 } else { 12322 } else {
12314 return `<option value="${record}">${record}</option>` 12323 return `<option value="${record}">${record}</option>`
12315 } 12324 }
@@ -12455,6 +12464,7 @@ class UseLayUi { @@ -12455,6 +12464,7 @@ class UseLayUi {
12455 * @param {boolean} [options.autoFormatDataSource = true] options.autoFormatDataSource 12464 * @param {boolean} [options.autoFormatDataSource = true] options.autoFormatDataSource
12456 * @param {string} [options.layVerify] options.layVerify 12465 * @param {string} [options.layVerify] options.layVerify
12457 * @param {string} [options.layVerType] options.layVerType 12466 * @param {string} [options.layVerType] options.layVerType
  12467 + * @param {boolean} [options.addPlaceholderOption] options.addPlaceholderOption
12458 * @param {Function} [options.treeProps.onReady] options.treeProps.onReady 12468 * @param {Function} [options.treeProps.onReady] options.treeProps.onReady
12459 */ 12469 */
12460 static createTreeSelect(options) { 12470 static createTreeSelect(options) {
@@ -12476,6 +12486,7 @@ class UseLayUi { @@ -12476,6 +12486,7 @@ class UseLayUi {
12476 childrenField = 'children', 12486 childrenField = 'children',
12477 layVerify, 12487 layVerify,
12478 layVerType, 12488 layVerType,
  12489 + addPlaceholderOption
12479 } = options 12490 } = options
12480 12491
12481 let { data = [], click, onReady } = treeProps 12492 let { data = [], click, onReady } = treeProps
@@ -12517,12 +12528,12 @@ class UseLayUi { @@ -12517,12 +12528,12 @@ class UseLayUi {
12517 function mount() { 12528 function mount() {
12518 // mount select container 12529 // mount select container
12519 $(elem).html(template) 12530 $(elem).html(template)
12520 -  
12521 - // mount tree  
12522 - // UseLayUi.nextTick(() => { 12531 + const treeData = UseLayUi.formatTreeDataSource(data, customSetTree, valueField, labelField, childrenField)
  12532 + if (addPlaceholderOption) treeData.unshift({ title: '请选择', id: undefined })
  12533 + // mount tree
12523 tree.render({ 12534 tree.render({
12524 ...treeProps, 12535 ...treeProps,
12525 - ...(autoFormatDataSource ? { data: UseLayUi.formatTreeDataSource(data, customSetTree, valueField, labelField, childrenField) } : {}), 12536 + ...(autoFormatDataSource ? { data: treeData } : {}),
12526 elem: $(elem).find('.tree-select__tree-mount'), 12537 elem: $(elem).find('.tree-select__tree-mount'),
12527 click(node) { 12538 click(node) {
12528 setValue(node.data) 12539 setValue(node.data)
@@ -12544,22 +12555,10 @@ class UseLayUi { @@ -12544,22 +12555,10 @@ class UseLayUi {
12544 layui.stope(e); 12555 layui.stope(e);
12545 }) 12556 })
12546 12557
12547 - // blur  
12548 - // $(document)  
12549 - // .on("click", function (e) {  
12550 - // const target = e.target  
12551 - // const parentNode = $(`.${CLASS_NAME} .tree-select__tree-mount`)  
12552 - // if (!parentNode) return  
12553 - // console.log($.contains(parentNode, target))  
12554 - // // const showClose = UseLayUi.isInNode(parentNode, target, true)  
12555 - // // if (showClose) return  
12556 - // // $(`.${ SELECT_CLS }`).removeClass("layui-form-selected")  
12557 - // });  
12558 -  
12559 if (UseLayUi.isFunction(onReady)) { 12558 if (UseLayUi.isFunction(onReady)) {
12560 onReady(setValue) 12559 onReady(setValue)
12561 } 12560 }
12562 - // }) 12561 +
12563 form.render() 12562 form.render()
12564 } 12563 }
12565 12564
@@ -13033,18 +13032,56 @@ function previewAction(editorUi, currentPage) { @@ -13033,18 +13032,56 @@ function previewAction(editorUi, currentPage) {
13033 class DispatchCenter { 13032 class DispatchCenter {
13034 13033
13035 /** 13034 /**
13036 - * @description 节点映射  
13037 - * @type {Map<string, Map<string, object>>}  
13038 - */  
13039 - nodeMapping  
13040 -  
13041 - /**  
13042 * @description cmd ID 与 node 映射关系 13035 * @description cmd ID 与 node 映射关系
13043 * @type {Map<number, string>} 13036 * @type {Map<number, string>}
13044 */ 13037 */
13045 cmdIdMapping = new Map() 13038 cmdIdMapping = new Map()
13046 13039
13047 /** 13040 /**
  13041 + * @type { Map<string, {
  13042 + * deviceId: string,
  13043 + * dataOrigin: 'dataSources' | 'act',
  13044 + * slaveDeviceId: string,
  13045 + * nodeId: string,
  13046 + * attr: string
  13047 + * condition?: { max?: number, min?: number },
  13048 + * additional?: {
  13049 + * agg?: string,
  13050 + * attrName?: string,
  13051 + * dataType?: 'tsSubCmds' | 'historyCmds',
  13052 + * deviceName?: string,
  13053 + * effectScope?: string,
  13054 + * interval?: string,
  13055 + * orgName?: string,
  13056 + * slaveDeviceName?: string
  13057 + * }
  13058 + * }[]>}
  13059 + */
  13060 + deviceIdMapping = new Map()
  13061 +
  13062 + /**
  13063 + * @type {Map<number, {
  13064 + * deviceId: string,
  13065 + * slaveDeviceId: string,
  13066 + * nodeId: string,
  13067 + * attr: string
  13068 + * dataOrigin: 'dataSources' | 'act',
  13069 + * condition?: { max?: number, min?: number },
  13070 + * additional?: {
  13071 + * agg?: string,
  13072 + * attrName?: string,
  13073 + * dataType?: 'tsSubCmds' | 'historyCmds',
  13074 + * deviceName?: string,
  13075 + * effectScope?: string,
  13076 + * interval?: string,
  13077 + * orgName?: string,
  13078 + * slaveDeviceName?: string
  13079 + * }
  13080 + * }[]>}
  13081 + */
  13082 + subscribeIdMapping = new Map()
  13083 +
  13084 + /**
13048 * @description 13085 * @description
13049 */ 13086 */
13050 editorUi 13087 editorUi
@@ -13150,7 +13187,6 @@ class DispatchCenter { @@ -13150,7 +13187,6 @@ class DispatchCenter {
13150 13187
13151 13188
13152 constructor(editorUi, currentPage) { 13189 constructor(editorUi, currentPage) {
13153 - this.nodeMapping = new Map()  
13154 this.editorUi = editorUi 13190 this.editorUi = editorUi
13155 this.init(editorUi, currentPage) 13191 this.init(editorUi, currentPage)
13156 } 13192 }
@@ -13169,6 +13205,7 @@ class DispatchCenter { @@ -13169,6 +13205,7 @@ class DispatchCenter {
13169 this.dataInteractionInstance = new HandleDataInteraction(this) 13205 this.dataInteractionInstance = new HandleDataInteraction(this)
13170 this.dynamicEffectInstance = new HandleDynamicEffect(this) 13206 this.dynamicEffectInstance = new HandleDynamicEffect(this)
13171 this.updateQueueInstance = new UpdateQueue(this) 13207 this.updateQueueInstance = new UpdateQueue(this)
  13208 + this.sendSubscribeMessage()
13172 } 13209 }
13173 13210
13174 /** 13211 /**
@@ -13176,7 +13213,7 @@ class DispatchCenter { @@ -13176,7 +13213,7 @@ class DispatchCenter {
13176 */ 13213 */
13177 connectSocket() { 13214 connectSocket() {
13178 Ws.instance?.destroy?.() 13215 Ws.instance?.destroy?.()
13179 - this.socket = Ws.getInstance({ url: GLOBAL_WS_URL(), onmessageCallback: this.socketOnmessage }) 13216 + this.socket = Ws.getInstance({ url: GLOBAL_WS_URL(), onmessageCallback: this.socketOnMessage.bind(this) })
13180 } 13217 }
13181 13218
13182 /** 13219 /**
@@ -13185,9 +13222,35 @@ class DispatchCenter { @@ -13185,9 +13222,35 @@ class DispatchCenter {
13185 * @param event 13222 * @param event
13186 * @param ws 13223 * @param ws
13187 */ 13224 */
13188 - socketOnmessage(message, event, ws) {  
13189 - const { subscriptionId, data } = message  
13190 - DispatchCenter.instance.publishEvent(subscriptionId, data, message, event, ws) 13225 + socketOnMessage(message, event, ws) {
  13226 + const { subscriptionId, errorMsg } = message
  13227 + if (errorMsg) return
  13228 + const subList = this.subscribeIdMapping.get(subscriptionId)
  13229 + subList.forEach(item => {
  13230 + const { dataOrigin, additional } = item
  13231 + if (dataOrigin === 'dataSources') {
  13232 + if (additional) {
  13233 + const { dataType } = additional || {}
  13234 + if (dataType === HandleDataSource.enumDataBindType.REAL) {
  13235 + this.dataSourceHandlerInstance.updateRealTimeDataSource(message, item)
  13236 + } else if (dataType === HandleDataSource.enumDataBindType.HISTORY) {
  13237 + this.dataSourceHandlerInstance.updateHistoryDataSource(message, item)
  13238 + }
  13239 + }
  13240 + else
  13241 + this.dataSourceHandlerInstance.updateCommonDataSource(message, item)
  13242 + }
  13243 + if (dataOrigin === 'act') {
  13244 + const { type } = item
  13245 + // this.dynamicEffectInstance.videoPlay()
  13246 + const handleFunction = this.dynamicEffectInstance.dispatch.call(this.dynamicEffectInstance, type)
  13247 + handleFunction(message, item)
  13248 + }
  13249 + })
  13250 + // this.subscribeEvent(cmdId, this.updateCommonDataSource.bind(this))
  13251 + return
  13252 + // const { subscriptionId, data } = message
  13253 + // DispatchCenter.instance.publishEvent(subscriptionId, data, message, event, ws)
13191 } 13254 }
13192 13255
13193 /** 13256 /**
@@ -13220,6 +13283,177 @@ class DispatchCenter { @@ -13220,6 +13283,177 @@ class DispatchCenter {
13220 this.contentData = res 13283 this.contentData = res
13221 } 13284 }
13222 13285
  13286 + sendSubscribeMessage() {
  13287 + const message = this.generateSubscribeMessage()
  13288 + this.socket.send(JSON.stringify(message))
  13289 + }
  13290 +
  13291 + /**
  13292 + * @description 创建订阅消息
  13293 + */
  13294 + generateSubscribeMessage() {
  13295 +
  13296 + /**
  13297 + * @type {{dataSources: [], act: [], event: [], enabled: boolean}}
  13298 + */
  13299 + const data = JSON.parse(JSON.stringify(this.contentData))
  13300 + delete data.enabled
  13301 +
  13302 + /**
  13303 + *
  13304 + * @param {'dataSources' | 'act'} key
  13305 + * @param {{
  13306 + * id: string,
  13307 + * enabled: boolean,
  13308 + * deviceId: string,
  13309 + * slaveDeviceId: string,
  13310 + * nodeId: string,
  13311 + * attr: string
  13312 + * condition?: { max?: number, min?: number },
  13313 + * additional?: {
  13314 + * agg?: string,
  13315 + * attrName?: string,
  13316 + * dataType?: 'tsSubCmds' | 'historyCmds',
  13317 + * deviceName?: string,
  13318 + * effectScope?: string,
  13319 + * interval?: string,
  13320 + * orgName?: string,
  13321 + * slaveDeviceName?: string
  13322 + * }
  13323 + * }} record
  13324 + */
  13325 + const setDeviceMapping = (record) => {
  13326 + const { deviceId, slaveDeviceId } = record
  13327 + if (this.deviceIdMapping.has(slaveDeviceId || deviceId)) {
  13328 + const group = this.deviceIdMapping.get(slaveDeviceId || deviceId)
  13329 + group.push(record)
  13330 + } else {
  13331 + this.deviceIdMapping.set(slaveDeviceId || deviceId, [record])
  13332 + }
  13333 + }
  13334 +
  13335 + Object.keys(data).forEach(key => {
  13336 + /**
  13337 + * @type {{
  13338 + * id: string,
  13339 + * nodeId: string,
  13340 + * deviceId: string,
  13341 + * slaveDeviceId: string,
  13342 + * attr: string,
  13343 + * enabled: boolean,
  13344 + * additional: object,
  13345 + * condition: object
  13346 + * }[]}
  13347 + */
  13348 + const list = data[key]
  13349 + if (key === 'dataSources') {
  13350 + for (const item of list) {
  13351 + setDeviceMapping({ dataOrigin: key, ...item })
  13352 + }
  13353 + }
  13354 + if (key === 'act') {
  13355 + for (const item of list) {
  13356 + const { enabled } = item
  13357 + if (!enabled) continue
  13358 + setDeviceMapping({ dataOrigin: key, ...item })
  13359 + }
  13360 + }
  13361 + })
  13362 +
  13363 + /**
  13364 + * @param {{
  13365 + * entityId: string,
  13366 + * cmdId: number,
  13367 + * keys: string,
  13368 + * agg?: string,
  13369 + * interval?: number,
  13370 + * startTs?: number,
  13371 + * endTs?: number
  13372 + * }} params
  13373 + * @returns {{ entityType: string, entityId: string, scope: string, cmdId: number, keys: string }}
  13374 + */
  13375 + const generateMessage = (params) => {
  13376 + const getDynamicAttr = (attr) => params[attr] ? { [attr]: params[attr] } : {}
  13377 + return {
  13378 + entityType: 'DEVICE',
  13379 + entityId: params.entityId,
  13380 + cmdId: params.cmdId,
  13381 + keys: params.keys,
  13382 +
  13383 + ... (params.interval ? {} : { scope: 'LATEST_TELEMETRY' }),
  13384 + ...getDynamicAttr('agg'),
  13385 + ...getDynamicAttr('interval'),
  13386 + ...getDynamicAttr('startTs'),
  13387 + ...getDynamicAttr('endTs'),
  13388 + }
  13389 + }
  13390 +
  13391 + const generateGroupMessage = () => {
  13392 + /**
  13393 + * @type {{
  13394 + * historyCmds: {
  13395 + * entityType: 'DEVICE',
  13396 + * entityId: string,
  13397 + * scope?: 'LATEST_TELEMETRY',
  13398 + * cmdId: number,
  13399 + * keys: string,
  13400 + * startTs?: number
  13401 + * endTs?: number
  13402 + * }[],
  13403 + * tsSubCmds: {
  13404 + * entityType: 'DEVICE',
  13405 + * entityId: string,
  13406 + * scope?: 'LATEST_TELEMETRY',
  13407 + * cmdId: number,
  13408 + * keys: string,
  13409 + * startTs?: number
  13410 + * endTs?: number
  13411 + * }[]}}
  13412 + */
  13413 + const messageList = { tsSubCmds: [], historyCmds: [] }
  13414 + let cmdId = 0
  13415 +
  13416 + const getKeys = (list) => Array.from(new Set(list)).join(',')
  13417 +
  13418 + const toNumber = (string, defaultValue = 0) => isNaN(string) ? defaultValue : Number(string)
  13419 +
  13420 + const setSubscribeMapping = (cmdId, record) => this.subscribeIdMapping.set(cmdId, record)
  13421 +
  13422 + this.deviceIdMapping.forEach((value, key) => {
  13423 + const basicRecord = value.filter(item => !item.additional)
  13424 + const moreFilterRecord = value.filter(item => item.additional)
  13425 +
  13426 + const message = basicRecord.length ? generateMessage({ entityId: key, cmdId, keys: getKeys(basicRecord.map(item => item.attr)) }) : null
  13427 + basicRecord.length && setSubscribeMapping(cmdId, basicRecord)
  13428 + cmdId++
  13429 +
  13430 + // 图表控件订阅
  13431 + moreFilterRecord.forEach(item => {
  13432 + const { additional = {} } = item
  13433 + const { dataType = 'tsSubCmds', interval, effectScope, agg } = additional
  13434 + const message = generateMessage({
  13435 + entityId: key,
  13436 + cmdId,
  13437 + agg,
  13438 + keys: getKeys(moreFilterRecord.map(item => item.attr)),
  13439 + interval: toNumber(interval, 1000),
  13440 + startTs: Date.now() - toNumber(effectScope),
  13441 + ...(dataType === HandleDataSource.enumDataBindType.REAL ? {} : { endTs: Date.now() })
  13442 + })
  13443 + setSubscribeMapping(cmdId, [item])
  13444 + messageList[dataType].push(message)
  13445 + cmdId++
  13446 + })
  13447 +
  13448 + message && messageList.tsSubCmds.push(message)
  13449 + })
  13450 +
  13451 + return messageList
  13452 + }
  13453 +
  13454 + return generateGroupMessage()
  13455 + }
  13456 +
13223 /** 13457 /**
13224 * @description 发送消息去获取实时数据 13458 * @description 发送消息去获取实时数据
13225 */ 13459 */
@@ -13242,7 +13476,7 @@ class DispatchCenter { @@ -13242,7 +13476,7 @@ class DispatchCenter {
13242 /** 13476 /**
13243 * @description 生成节点映射表 13477 * @description 生成节点映射表
13244 * @param dataSources 13478 * @param dataSources
13245 - * @return {{cmdId: number, entityType: string, keys: *, scope: string, entityId: *}[]} 13479 + * @return {{cmdId: number, entityType: string, keys: string, scope: string, entityId: string}[]}
13246 */ 13480 */
13247 generatorDataSourceMapping(dataSources = []) { 13481 generatorDataSourceMapping(dataSources = []) {
13248 return dataSources.map((datum) => { 13482 return dataSources.map((datum) => {
@@ -13264,12 +13498,7 @@ class DispatchCenter { @@ -13264,12 +13498,7 @@ class DispatchCenter {
13264 * @description 分发事件 13498 * @description 分发事件
13265 */ 13499 */
13266 publishEvent(eventName, data, message, event, ws) { 13500 publishEvent(eventName, data, message, event, ws) {
13267 - // data = data ? data : {}  
13268 this.eventBus.emit(eventName, message, event, ws) 13501 this.eventBus.emit(eventName, message, event, ws)
13269 - // console.log(arguments)  
13270 - // Object.keys(data).forEach(() => {  
13271 - // this.eventBus.emit(eventName, message, event, ws)  
13272 - // })  
13273 } 13502 }
13274 13503
13275 /** 13504 /**
@@ -13414,8 +13643,8 @@ class HandleDataSource { @@ -13414,8 +13643,8 @@ class HandleDataSource {
13414 13643
13415 constructor(DispatchInstance) { 13644 constructor(DispatchInstance) {
13416 this.DispatchInstance = DispatchInstance 13645 this.DispatchInstance = DispatchInstance
13417 - this.generatorCommonDataSourceMapping()  
13418 - this.generatorChartDataSourceMapping() 13646 + // this.generatorCommonDataSourceMapping()
  13647 + // this.generatorChartDataSourceMapping()
13419 } 13648 }
13420 13649
13421 get graph() { 13650 get graph() {
@@ -13536,29 +13765,30 @@ class HandleDataSource { @@ -13536,29 +13765,30 @@ class HandleDataSource {
13536 * @description 更新变量值 13765 * @description 更新变量值
13537 * @param {} message 13766 * @param {} message
13538 */ 13767 */
13539 - updateCommonDataSource(message) {  
13540 - const { subscriptionId } = message  
13541 - const node = this.getNodeByCmdId(subscriptionId)  
13542 - const { attr } = this.getBindData(subscriptionId) 13768 + updateCommonDataSource(message, record) {
  13769 + const { nodeId, attr } = record
  13770 + const node = this.getNodeByCmdId(nodeId)
  13771 +
13543 node && this.updatePage(() => { 13772 node && this.updatePage(() => {
13544 const { data } = message 13773 const { data } = message
13545 const type = this.getComponentType(node) 13774 const type = this.getComponentType(node)
13546 if (type === this.componentType.SWITCH) { 13775 if (type === this.componentType.SWITCH) {
13547 - this.handleSwitchComponent(message) 13776 + this.handleSwitchComponent(message, record)
13548 return 13777 return
13549 } 13778 }
13550 13779
13551 if (type === this.componentType.PARAMS_SETTING_BUTTON) { 13780 if (type === this.componentType.PARAMS_SETTING_BUTTON) {
13552 - this.handleParamSettingButton(message) 13781 + this.handleParamSettingButton(message, record)
13553 return 13782 return
13554 } 13783 }
13555 13784
13556 if (type === this.componentType.IMAGE) { 13785 if (type === this.componentType.IMAGE) {
13557 - this.handleImageComponent(message) 13786 + this.handleImageComponent(message, record)
13558 return 13787 return
13559 } 13788 }
13560 13789
13561 - if (!data) return 13790 + if (!data || !data[attr]) return
  13791 +
13562 const [[timespan, value]] = data[attr] 13792 const [[timespan, value]] = data[attr]
13563 node.setValue(value) 13793 node.setValue(value)
13564 }, node) 13794 }, node)
@@ -13568,11 +13798,11 @@ class HandleDataSource { @@ -13568,11 +13798,11 @@ class HandleDataSource {
13568 * @description 处理switch 组件 13798 * @description 处理switch 组件
13569 * @param {} message 13799 * @param {} message
13570 */ 13800 */
13571 - handleSwitchComponent(message) {  
13572 - const { subscriptionId, data = {} } = message  
13573 - const node = this.getNodeByCmdId(subscriptionId)  
13574 - const { nodeId, attr } = this.getBindData(subscriptionId)  
13575 - const [[timespan, receiveValue] = []] = data[attr] || [] 13801 + handleSwitchComponent(message, record) {
  13802 + const { data = {} } = message
  13803 + const { nodeId, attr } = record
  13804 + const node = this.getNodeByCmdId(nodeId)
  13805 + const [[_timespan, receiveValue] = []] = data[attr] || []
13576 const switchConfig = this.DispatchInstance.contentData.act.find(item => item.id === nodeId && item.type === 'SWITCH') 13806 const switchConfig = this.DispatchInstance.contentData.act.find(item => item.id === nodeId && item.type === 'SWITCH')
13577 const { condition = [] } = switchConfig || {} 13807 const { condition = [] } = switchConfig || {}
13578 let reg = /image=[^;]+/g 13808 let reg = /image=[^;]+/g
@@ -13589,6 +13819,7 @@ class HandleDataSource { @@ -13589,6 +13819,7 @@ class HandleDataSource {
13589 flag = true 13819 flag = true
13590 this.updatePage(() => { 13820 this.updatePage(() => {
13591 const style = node.getStyle() 13821 const style = node.getStyle()
  13822 + if ((style || '').includes(imagePath)) return
13592 const sendValue = getSendValue(type) 13823 const sendValue = getSendValue(type)
13593 node.setStyle(style.replace(reg, `image=${imagePath}`)) 13824 node.setStyle(style.replace(reg, `image=${imagePath}`))
13594 node.setAttribute('label', '') 13825 node.setAttribute('label', '')
@@ -13611,22 +13842,22 @@ class HandleDataSource { @@ -13611,22 +13842,22 @@ class HandleDataSource {
13611 13842
13612 } 13843 }
13613 13844
13614 - handleParamSettingButton(message) {  
13615 - const { subscriptionId, data = {} } = message 13845 + handleParamSettingButton(message, record) {
  13846 + const { data = {} } = message
13616 if (!data) return 13847 if (!data) return
13617 - const node = this.getNodeByCmdId(subscriptionId)  
13618 - const { attr } = this.getBindData(subscriptionId)  
13619 - const [[timespan, receiveValue] = []] = data[attr] || [] 13848 + const { nodeId, attr } = record
  13849 + const node = this.getNodeByCmdId(nodeId)
  13850 + const [[_timespan, receiveValue] = []] = data[attr] || []
13620 this.updatePage(() => { 13851 this.updatePage(() => {
13621 node.setAttribute('label', `<button class="param-setting-button">${receiveValue}</button>`) 13852 node.setAttribute('label', `<button class="param-setting-button">${receiveValue}</button>`)
13622 }, node) 13853 }, node)
13623 } 13854 }
13624 13855
13625 - handleImageComponent(message) {  
13626 - const { subscriptionId, data = {} } = message  
13627 - const node = this.getNodeByCmdId(subscriptionId)  
13628 - const { attr } = this.getBindData(subscriptionId)  
13629 - const [[timespan, receiveValue] = []] = data[attr] || [] 13856 + handleImageComponent(message, record) {
  13857 + const { data = {} } = message
  13858 + const { nodeId, attr } = record
  13859 + const node = this.getNodeByCmdId(nodeId)
  13860 + const [[_timespan, receiveValue] = []] = data[attr] || []
13630 this.updatePage(() => { 13861 this.updatePage(() => {
13631 node.setAttribute('label', `<img class="basic-component__image" alt="图片" src="${receiveValue}" />`) 13862 node.setAttribute('label', `<img class="basic-component__image" alt="图片" src="${receiveValue}" />`)
13632 }, node) 13863 }, node)
@@ -13635,18 +13866,19 @@ class HandleDataSource { @@ -13635,18 +13866,19 @@ class HandleDataSource {
13635 /** 13866 /**
13636 * @description 更新实时数据 13867 * @description 更新实时数据
13637 * @param {} message 13868 * @param {} message
13638 - * @param {} agg 聚合方式 13869 + * @param {} record 聚合方式
13639 */ 13870 */
13640 - updateRealTimeDataSource(message, agg) {  
13641 - const { data = {}, subscriptionId } = message  
13642 - const node = this.getNodeByCmdId(subscriptionId) 13871 + updateRealTimeDataSource(message, record) {
  13872 + const { data = {} } = message
  13873 + const { nodeId, attr, additional = {} } = record
  13874 + const { agg } = additional
  13875 + const node = this.getNodeByCmdId(nodeId)
13643 if (!node) return 13876 if (!node) return
13644 const enumConst = Sidebar.prototype.enumCellBasicAttribute 13877 const enumConst = Sidebar.prototype.enumCellBasicAttribute
13645 const chartInstanceMap = Sidebar.prototype.chartsInstanceMapping 13878 const chartInstanceMap = Sidebar.prototype.chartsInstanceMapping
13646 const chartInstanceId = node.getAttribute(enumConst.CHART_INSTANCE_ID) 13879 const chartInstanceId = node.getAttribute(enumConst.CHART_INSTANCE_ID)
13647 const chartInstanceType = node.getAttribute(enumConst.COMPONENT_TYPE) 13880 const chartInstanceType = node.getAttribute(enumConst.COMPONENT_TYPE)
13648 const instance = chartInstanceMap.get(chartInstanceId) 13881 const instance = chartInstanceMap.get(chartInstanceId)
13649 - const { attr = [[]], additional } = this.getBindData(subscriptionId)  
13650 const realDataList = data[attr] || [] 13882 const realDataList = data[attr] || []
13651 13883
13652 const action = agg === 'NONE' ? 'unshift' : 'push' 13884 const action = agg === 'NONE' ? 'unshift' : 'push'
@@ -13655,12 +13887,12 @@ class HandleDataSource { @@ -13655,12 +13887,12 @@ class HandleDataSource {
13655 const isActive = instance.isActive 13887 const isActive = instance.isActive
13656 if (!isActive) { 13888 if (!isActive) {
13657 instance.isActive = true 13889 instance.isActive = true
13658 - const chartOption = this.getChartComponentOption(chartInstanceType, { chartType: chartInstanceType, attr, dataList: realDataList, action, nodeId: node.id , additional}) 13890 + const chartOption = this.getChartComponentOption(chartInstanceType, { chartType: chartInstanceType, attr, dataList: realDataList, action, nodeId: node.id, additional })
13659 instance.setOption(chartOption) 13891 instance.setOption(chartOption)
13660 13892
13661 } else { 13893 } else {
13662 const oldOptions = instance.getOption() 13894 const oldOptions = instance.getOption()
13663 - const options = this.getRealTimeUpdateChartOption(chartInstanceType, { oldOptions, dataList: realDataList , additional}) 13895 + const options = this.getRealTimeUpdateChartOption(chartInstanceType, { oldOptions, dataList: realDataList, additional })
13664 if (!instance) clearInterval(interval) 13896 if (!instance) clearInterval(interval)
13665 instance && instance.setOption(options) 13897 instance && instance.setOption(options)
13666 } 13898 }
@@ -13669,16 +13901,17 @@ class HandleDataSource { @@ -13669,16 +13901,17 @@ class HandleDataSource {
13669 /** 13901 /**
13670 * @description 更新历史数据 13902 * @description 更新历史数据
13671 */ 13903 */
13672 - updateHistoryDataSource(message, agg) {  
13673 - const { data = {}, subscriptionId } = message  
13674 - const node = this.getNodeByCmdId(subscriptionId) 13904 + updateHistoryDataSource(message, record) {
  13905 + const { data = {} } = message
  13906 + const { nodeId, attr, additional = {} } = record
  13907 + const { agg } = additional
  13908 + const node = this.getNodeByCmdId(nodeId)
13675 if (!node) return 13909 if (!node) return
13676 const enumConst = Sidebar.prototype.enumCellBasicAttribute 13910 const enumConst = Sidebar.prototype.enumCellBasicAttribute
13677 const chartInstanceMap = Sidebar.prototype.chartsInstanceMapping 13911 const chartInstanceMap = Sidebar.prototype.chartsInstanceMapping
13678 const chartInstanceId = node.getAttribute(enumConst.CHART_INSTANCE_ID) 13912 const chartInstanceId = node.getAttribute(enumConst.CHART_INSTANCE_ID)
13679 const chartInstanceType = node.getAttribute(enumConst.COMPONENT_TYPE) 13913 const chartInstanceType = node.getAttribute(enumConst.COMPONENT_TYPE)
13680 const instance = chartInstanceMap.get(chartInstanceId) 13914 const instance = chartInstanceMap.get(chartInstanceId)
13681 - const { attr = [[]], additional } = this.getBindData(subscriptionId)  
13682 const historyDataList = data[attr] || [] 13915 const historyDataList = data[attr] || []
13683 const showNumberOf = 4 13916 const showNumberOf = 4
13684 const action = agg === 'NONE' ? 'unshift' : 'push' 13917 const action = agg === 'NONE' ? 'unshift' : 'push'
@@ -13965,11 +14198,10 @@ class HandleDataSource { @@ -13965,11 +14198,10 @@ class HandleDataSource {
13965 /** 14198 /**
13966 * @description 获取仪表盘配置 14199 * @description 获取仪表盘配置
13967 */ 14200 */
13968 - getRealTimeUpdateDashboardChartOption(params = { dataList: [] , additional: {}}) { 14201 + getRealTimeUpdateDashboardChartOption(params = { dataList: [], additional: {} }) {
13969 const { dataList = [], oldOptions, additional } = params 14202 const { dataList = [], oldOptions, additional } = params
13970 const { attrName } = additional 14203 const { attrName } = additional
13971 const [timespan, value] = dataList[0] || [] 14204 const [timespan, value] = dataList[0] || []
13972 - console.log(value)  
13973 return { 14205 return {
13974 series: [ 14206 series: [
13975 { 14207 {
@@ -13990,8 +14222,7 @@ class HandleDataSource { @@ -13990,8 +14222,7 @@ class HandleDataSource {
13990 * @param actionType 14222 * @param actionType
13991 * @return {{attr: string, additional: { agg: string, dataType: string, effectScope: string, interval: string, unit: string, orgName: string, deviceName: string, slaveDeviceName: string, attrName: string }}} 14223 * @return {{attr: string, additional: { agg: string, dataType: string, effectScope: string, interval: string, unit: string, orgName: string, deviceName: string, slaveDeviceName: string, attrName: string }}}
13992 */ 14224 */
13993 - getBindData(subscriptionId) {  
13994 - const nodeId = this.getNodeIdByCmdId(subscriptionId) 14225 + getBindData(nodeId) {
13995 const temp = this.dataSourceNodeMapping.get(nodeId) || {} 14226 const temp = this.dataSourceNodeMapping.get(nodeId) || {}
13996 return temp 14227 return temp
13997 } 14228 }
@@ -14011,7 +14242,8 @@ class HandleDataSource { @@ -14011,7 +14242,8 @@ class HandleDataSource {
14011 * @return {string} 14242 * @return {string}
14012 */ 14243 */
14013 getNodeIdByCmdId(subscriptionId) { 14244 getNodeIdByCmdId(subscriptionId) {
14014 - return this.DispatchInstance.cmdIdMapping.get(subscriptionId) 14245 + // return this.DispatchInstance.cmdIdMapping.get(subscriptionId)
  14246 + return this.DispatchInstance.subscribeIdMapping.get(subscriptionId)
14015 } 14247 }
14016 14248
14017 /** 14249 /**
@@ -14019,8 +14251,8 @@ class HandleDataSource { @@ -14019,8 +14251,8 @@ class HandleDataSource {
14019 * @param subscriptionId 14251 * @param subscriptionId
14020 * @return {*} 14252 * @return {*}
14021 */ 14253 */
14022 - getNodeByCmdId(subscriptionId) {  
14023 - const nodeId = this.getNodeIdByCmdId(subscriptionId) 14254 + getNodeByCmdId(nodeId) {
  14255 + // const nodeId = this.getNodeIdByCmdId(subscriptionId)
14024 return this.contentAllCell.find(item => item.id === nodeId) 14256 return this.contentAllCell.find(item => item.id === nodeId)
14025 } 14257 }
14026 14258
@@ -14634,7 +14866,7 @@ class HandleDynamicEffect { @@ -14634,7 +14866,7 @@ class HandleDynamicEffect {
14634 */ 14866 */
14635 generatorMappingRelation() { 14867 generatorMappingRelation() {
14636 this.videoPlay() 14868 this.videoPlay()
14637 - const tsSubCmds = [] 14869 + // const tsSubCmds = []
14638 this.enableActList.forEach(each => { 14870 this.enableActList.forEach(each => {
14639 const { id, type, attr, deviceId, slaveDeviceId } = each 14871 const { id, type, attr, deviceId, slaveDeviceId } = each
14640 14872
@@ -14642,13 +14874,13 @@ class HandleDynamicEffect { @@ -14642,13 +14874,13 @@ class HandleDynamicEffect {
14642 const temp = this.actNodeMapping.get(id) 14874 const temp = this.actNodeMapping.get(id)
14643 temp.value.set(type, each) 14875 temp.value.set(type, each)
14644 14876
14645 - const cmdId = this.DispatchInstance.getCmdId(id) 14877 + // const cmdId = this.DispatchInstance.getCmdId(id)
14646 14878
14647 - tsSubCmds.push(this.generatorMessage(slaveDeviceId ? slaveDeviceId : deviceId, cmdId, attr)) 14879 + // tsSubCmds.push(this.generatorMessage(slaveDeviceId ? slaveDeviceId : deviceId, cmdId, attr))
14648 14880
14649 - this.subscribeEvent(cmdId, this.dispatch(type)) 14881 + // this.subscribeEvent(cmdId, this.dispatch(type))
14650 }) 14882 })
14651 - if (tsSubCmds.length) this.sendMsg({ tsSubCmds }) 14883 + // if (tsSubCmds.length) this.sendMsg({ tsSubCmds })
14652 } 14884 }
14653 14885
14654 /** 14886 /**
@@ -14718,15 +14950,16 @@ class HandleDynamicEffect { @@ -14718,15 +14950,16 @@ class HandleDynamicEffect {
14718 * @param message 14950 * @param message
14719 * @param attr 14951 * @param attr
14720 */ 14952 */
14721 - rotate(message) {  
14722 - const { subscriptionId, data } = message  
14723 - const node = this.getNodeByCmdId(subscriptionId) 14953 + rotate(message, record) {
  14954 + const { data } = message
  14955 + const { id } = record
  14956 + const node = this.getNodeByCmdId(id)
14724 const key = node.id + DispatchCenter.enumDynamicEffectType.ROTATE 14957 const key = node.id + DispatchCenter.enumDynamicEffectType.ROTATE
14725 if (!this.validatePriority(node.id)) { 14958 if (!this.validatePriority(node.id)) {
14726 this.delUpdateFn(key) 14959 this.delUpdateFn(key)
14727 return 14960 return
14728 } 14961 }
14729 - const { flag } = this.validate(subscriptionId, DispatchCenter.enumDynamicEffectType.ROTATE, data) 14962 + const { flag } = this.validate(record, DispatchCenter.enumDynamicEffectType.ROTATE, data)
14730 let deg = 0 14963 let deg = 0
14731 const updateFn = () => { 14964 const updateFn = () => {
14732 if (deg === 360) deg = 0 14965 if (deg === 360) deg = 0
@@ -14750,11 +14983,12 @@ class HandleDynamicEffect { @@ -14750,11 +14983,12 @@ class HandleDynamicEffect {
14750 * @param message 14983 * @param message
14751 * @param attr 14984 * @param attr
14752 */ 14985 */
14753 - display(message) {  
14754 - const { subscriptionId, data = {} } = message  
14755 - const { flag, condition } = this.validate(subscriptionId, HandleDynamicEffect.enumActType.DISPLAY, data) 14986 + display(message, record) {
  14987 + const { data = {} } = message
  14988 + const { id } = record
  14989 + const { flag, condition } = this.validate(record, HandleDynamicEffect.enumActType.DISPLAY, data)
14756 if (!flag) return 14990 if (!flag) return
14757 - const node = this.getNodeByCmdId(subscriptionId) 14991 + const node = this.getNodeByCmdId(id)
14758 let isShow = false 14992 let isShow = false
14759 if (condition.type === HandleDynamicEffect.enumDisplayType.SHOW) { 14993 if (condition.type === HandleDynamicEffect.enumDisplayType.SHOW) {
14760 isShow = true 14994 isShow = true
@@ -14784,15 +15018,16 @@ class HandleDynamicEffect { @@ -14784,15 +15018,16 @@ class HandleDynamicEffect {
14784 * @param message 15018 * @param message
14785 * @param attr 15019 * @param attr
14786 */ 15020 */
14787 - flash(message) {  
14788 - const { subscriptionId, data } = message  
14789 - const node = this.getNodeByCmdId(subscriptionId) 15021 + flash(message, record) {
  15022 + const { data } = message
  15023 + const { id } = record
  15024 + const node = this.getNodeByCmdId(id)
14790 const key = node.id + DispatchCenter.enumDynamicEffectType.FLASH 15025 const key = node.id + DispatchCenter.enumDynamicEffectType.FLASH
14791 - if (!this.validatePriority(node.id)) { 15026 + if (!this.validatePriority(id)) {
14792 this.delUpdateFn(key) 15027 this.delUpdateFn(key)
14793 return 15028 return
14794 } 15029 }
14795 - const { flag, condition } = this.validate(subscriptionId, HandleDynamicEffect.enumActType.FLASH, data) 15030 + const { flag } = this.validate(record, HandleDynamicEffect.enumActType.FLASH, data)
14796 let flashFlag = false 15031 let flashFlag = false
14797 const updateFn = () => { 15032 const updateFn = () => {
14798 node.setVisible(flashFlag) 15033 node.setVisible(flashFlag)
@@ -14810,10 +15045,11 @@ class HandleDynamicEffect { @@ -14810,10 +15045,11 @@ class HandleDynamicEffect {
14810 /** 15045 /**
14811 * @description 处理变量图片 15046 * @description 处理变量图片
14812 */ 15047 */
14813 - varImage(message) {  
14814 - const { subscriptionId, data } = message  
14815 - const node = this.getNodeByCmdId(subscriptionId)  
14816 - const { flag, condition } = this.validate(subscriptionId, HandleDynamicEffect.enumActType.IMAGE, data) 15048 + varImage(message, record) {
  15049 + const { data } = message
  15050 + const { id } = record
  15051 + const node = this.getNodeByCmdId(id)
  15052 + const { flag, condition } = this.validate(record, HandleDynamicEffect.enumActType.IMAGE, data)
14817 if (flag && node) { 15053 if (flag && node) {
14818 const { imagePath } = condition 15054 const { imagePath } = condition
14819 this.insertOnceUpdateFn( 15055 this.insertOnceUpdateFn(
@@ -14822,7 +15058,7 @@ class HandleDynamicEffect { @@ -14822,7 +15058,7 @@ class HandleDynamicEffect {
14822 node.setStyle(`image;image=${imagePath};imageAspect=0;`) 15058 node.setStyle(`image;image=${imagePath};imageAspect=0;`)
14823 }) 15059 })
14824 } else if (!flag && node) { 15060 } else if (!flag && node) {
14825 - const { condition = [], attr } = this.getBindData(subscriptionId, HandleDynamicEffect.enumActType.IMAGE) 15061 + const { condition = [], attr } = record
14826 const flag = HandleDynamicEffect.enumVarImageConst.DEFAULT_IMAGE_FLAG 15062 const flag = HandleDynamicEffect.enumVarImageConst.DEFAULT_IMAGE_FLAG
14827 const defaultBindData = condition.find(item => item[flag]) 15063 const defaultBindData = condition.find(item => item[flag])
14828 if (defaultBindData) { 15064 if (defaultBindData) {
@@ -14837,11 +15073,12 @@ class HandleDynamicEffect { @@ -14837,11 +15073,12 @@ class HandleDynamicEffect {
14837 } 15073 }
14838 } 15074 }
14839 15075
14840 - running(message) {  
14841 - const { subscriptionId, data = {} } = message  
14842 - const { flag, condition } = this.validate(subscriptionId, HandleDynamicEffect.enumActType.RUNNING, data) 15076 + running(message, record) {
  15077 + const { id } = record
  15078 + const { data = {} } = message
  15079 + const { flag, condition } = this.validate(record, HandleDynamicEffect.enumActType.RUNNING, data)
14843 if (!flag) return 15080 if (!flag) return
14844 - const node = this.getNodeByCmdId(subscriptionId) 15081 + const node = this.getNodeByCmdId(id)
14845 let isRun = false 15082 let isRun = false
14846 if (condition.type === HandleDynamicEffect.enumRunningType.RUN) { 15083 if (condition.type === HandleDynamicEffect.enumRunningType.RUN) {
14847 isRun = true 15084 isRun = true
@@ -14897,7 +15134,7 @@ class HandleDynamicEffect { @@ -14897,7 +15134,7 @@ class HandleDynamicEffect {
14897 const { geometry = {} } = cell 15134 const { geometry = {} } = cell
14898 const { width, height } = geometry 15135 const { width, height } = geometry
14899 const idEl = getIdEl() 15136 const idEl = getIdEl()
14900 - graph.getModel().beginUpdate() 15137 + graph.getModel().beginUpdate()
14901 try { 15138 try {
14902 let type 15139 let type
14903 if (videoUrl.replace(reg, '') === 'm3u8') type = 'application/x-mpegURL' 15140 if (videoUrl.replace(reg, '') === 'm3u8') type = 'application/x-mpegURL'
@@ -14939,14 +15176,15 @@ class HandleDynamicEffect { @@ -14939,14 +15176,15 @@ class HandleDynamicEffect {
14939 15176
14940 /** 15177 /**
14941 * @description 验证是否满足条件列表中的任意一条 15178 * @description 验证是否满足条件列表中的任意一条
14942 - * @param subscriptionId 15179 + * @param record
14943 * @param type 15180 * @param type
14944 * @param value 15181 * @param value
14945 * @return {{flag: boolean, condition: {}}} 15182 * @return {{flag: boolean, condition: {}}}
14946 */ 15183 */
14947 - validate(subscriptionId, type, value) {  
14948 - const { condition = [], attr } = this.getBindData(subscriptionId, type) 15184 + validate(record, type, value) {
  15185 + const { condition = [], attr } = record
14949 const result = { condition: {}, flag: false } 15186 const result = { condition: {}, flag: false }
  15187 + if (!value[attr]) return result
14950 for (let i = 0; i < condition.length; i++) { 15188 for (let i = 0; i < condition.length; i++) {
14951 const { min, max } = condition[i] 15189 const { min, max } = condition[i]
14952 const [timespan, realValue] = value[attr][0] 15190 const [timespan, realValue] = value[attr][0]
@@ -14996,8 +15234,7 @@ class HandleDynamicEffect { @@ -14996,8 +15234,7 @@ class HandleDynamicEffect {
14996 * @param subscriptionId 15234 * @param subscriptionId
14997 * @return {*} 15235 * @return {*}
14998 */ 15236 */
14999 - getNodeByCmdId(subscriptionId) {  
15000 - const nodeId = this.getNodeIdByCmdId(subscriptionId) 15237 + getNodeByCmdId(nodeId) {
15001 return this.contentAllCell.find(item => item.id === nodeId) 15238 return this.contentAllCell.find(item => item.id === nodeId)
15002 } 15239 }
15003 15240