|
@@ -6527,7 +6527,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -6527,7 +6527,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6527
|
* @description 将设备选项挂载到节点中
|
6527
|
* @description 将设备选项挂载到节点中
|
6528
|
*/
|
6528
|
*/
|
6529
|
function mountAllDeviceToSelect() {
|
6529
|
function mountAllDeviceToSelect() {
|
6530
|
- const generateOption = UseLayUi.generateOptionTemplate({ dataSource: allDeviceOptions })
|
6530
|
+ const generateOption = UseLayUi.generateOptionTemplate({ dataSource: allDeviceOptions, alias: 'alias' })
|
6531
|
$(`#${enumActionEl.DEVICE_DATA_BODY_EL}`).find(`select[name="${enumConst.DEVICE}"]`).html(generateOption)
|
6531
|
$(`#${enumActionEl.DEVICE_DATA_BODY_EL}`).find(`select[name="${enumConst.DEVICE}"]`).html(generateOption)
|
6532
|
UseLayUi.nextTick(() => form.render('select'))
|
6532
|
UseLayUi.nextTick(() => form.render('select'))
|
6533
|
}
|
6533
|
}
|
|
@@ -6635,7 +6635,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -6635,7 +6635,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6635
|
function createAddRowListenEvent() {
|
6635
|
function createAddRowListenEvent() {
|
6636
|
$(`#${enumActionEl.ADD_ROW_EL}`).on('click', () => {
|
6636
|
$(`#${enumActionEl.ADD_ROW_EL}`).on('click', () => {
|
6637
|
addRecord()
|
6637
|
addRecord()
|
6638
|
- const generateOption = UseLayUi.generateOptionTemplate({ dataSource: allDeviceOptions })
|
6638
|
+ const generateOption = UseLayUi.generateOptionTemplate({ dataSource: allDeviceOptions, alias: 'alias' })
|
6639
|
$(`#${enumActionEl.DEVICE_DATA_BODY_EL} tr`).last().find(`select[name="${enumConst.DEVICE}"]`).html(generateOption)
|
6639
|
$(`#${enumActionEl.DEVICE_DATA_BODY_EL} tr`).last().find(`select[name="${enumConst.DEVICE}"]`).html(generateOption)
|
6640
|
form.render('select')
|
6640
|
form.render('select')
|
6641
|
})
|
6641
|
})
|
|
@@ -6645,7 +6645,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -6645,7 +6645,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6645
|
* @description 设置设备选项
|
6645
|
* @description 设置设备选项
|
6646
|
*/
|
6646
|
*/
|
6647
|
function setDeviceOptions(row) {
|
6647
|
function setDeviceOptions(row) {
|
6648
|
- const generateOption = UseLayUi.generateOptionTemplate({ dataSource: allDeviceOptions })
|
6648
|
+ const generateOption = UseLayUi.generateOptionTemplate({ dataSource: allDeviceOptions, alias: 'alias' })
|
6649
|
$(`#${enumActionEl.DEVICE_DATA_BODY_EL} tr[lay-filter="${getRowFilter(row)}"]`).find(`select[name="${enumConst.DEVICE}"]`).html(generateOption)
|
6649
|
$(`#${enumActionEl.DEVICE_DATA_BODY_EL} tr[lay-filter="${getRowFilter(row)}"]`).find(`select[name="${enumConst.DEVICE}"]`).html(generateOption)
|
6650
|
}
|
6650
|
}
|
6651
|
|
6651
|
|
|
@@ -6890,6 +6890,41 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -6890,6 +6890,41 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6890
|
COMMAND: 'command',
|
6890
|
COMMAND: 'command',
|
6891
|
|
6891
|
|
6892
|
/**
|
6892
|
/**
|
|
|
6893
|
+ * @description TCP命令
|
|
|
6894
|
+ */
|
|
|
6895
|
+ TCP_COMMAND: 'tcpCommand',
|
|
|
6896
|
+
|
|
|
6897
|
+ /**
|
|
|
6898
|
+ * @description json命令
|
|
|
6899
|
+ */
|
|
|
6900
|
+ JSON_COMMAND: 'jsonCommand',
|
|
|
6901
|
+
|
|
|
6902
|
+ /**
|
|
|
6903
|
+ * @description 命令下发方式
|
|
|
6904
|
+ */
|
|
|
6905
|
+ COMMAND_TYPE: 'commandType',
|
|
|
6906
|
+
|
|
|
6907
|
+ /**
|
|
|
6908
|
+ * @description 服务命令
|
|
|
6909
|
+ */
|
|
|
6910
|
+ SERVICE_COMMAND: 'serviceCommand',
|
|
|
6911
|
+
|
|
|
6912
|
+ /**
|
|
|
6913
|
+ * @description 服务原始配置
|
|
|
6914
|
+ */
|
|
|
6915
|
+ SERVICE_ORIGINAL_CONFIGURATION: 'serviceOriginalConfiguration',
|
|
|
6916
|
+
|
|
|
6917
|
+ /**
|
|
|
6918
|
+ * @description 服务
|
|
|
6919
|
+ */
|
|
|
6920
|
+ SERVICE: 'service',
|
|
|
6921
|
+
|
|
|
6922
|
+ /**
|
|
|
6923
|
+ * @description 传输协议
|
|
|
6924
|
+ */
|
|
|
6925
|
+ TRANSPORTTYPE: 'transportType',
|
|
|
6926
|
+
|
|
|
6927
|
+ /**
|
6893
|
* @description 属性占位符
|
6928
|
* @description 属性占位符
|
6894
|
*/
|
6929
|
*/
|
6895
|
ATTR_PLACEHOLDER: 'attrPlaceholder',
|
6930
|
ATTR_PLACEHOLDER: 'attrPlaceholder',
|
|
@@ -6919,6 +6954,11 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -6919,6 +6954,11 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6919
|
FORM_FILTER: 'formModelFilter',
|
6954
|
FORM_FILTER: 'formModelFilter',
|
6920
|
|
6955
|
|
6921
|
/**
|
6956
|
/**
|
|
|
6957
|
+ * @description 表单
|
|
|
6958
|
+ */
|
|
|
6959
|
+ FORM_EL: 'formModelEl',
|
|
|
6960
|
+
|
|
|
6961
|
+ /**
|
6922
|
* @description 动作 lay-filter
|
6962
|
* @description 动作 lay-filter
|
6923
|
*/
|
6963
|
*/
|
6924
|
ACTION_SELECT_FILTER: 'actionSelectFilter',
|
6964
|
ACTION_SELECT_FILTER: 'actionSelectFilter',
|
|
@@ -6948,7 +6988,47 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -6948,7 +6988,47 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6948
|
*/
|
6988
|
*/
|
6949
|
EDITOR: 'EDITOR',
|
6989
|
EDITOR: 'EDITOR',
|
6950
|
|
6990
|
|
6951
|
- WAY_SELECT: 'dynamicWaySelectEl'
|
6991
|
+ /**
|
|
|
6992
|
+ * @description 命令类型选择器
|
|
|
6993
|
+ */
|
|
|
6994
|
+ COMMAND_TYPE_EL: 'commandTypeEl',
|
|
|
6995
|
+
|
|
|
6996
|
+ /**
|
|
|
6997
|
+ * @description 服务选择器
|
|
|
6998
|
+ */
|
|
|
6999
|
+ SERVICE_EL: 'serviceEl',
|
|
|
7000
|
+
|
|
|
7001
|
+ /**
|
|
|
7002
|
+ * @description 命令下发输入框
|
|
|
7003
|
+ */
|
|
|
7004
|
+ COMMAND_INPUT: 'commandInput',
|
|
|
7005
|
+
|
|
|
7006
|
+ /**
|
|
|
7007
|
+ * @description TCP 命令下发输入框
|
|
|
7008
|
+ */
|
|
|
7009
|
+ TCP_COMMAND_INPUT: 'tcpCommandInput',
|
|
|
7010
|
+
|
|
|
7011
|
+ /**
|
|
|
7012
|
+ * @description 输入参数表单
|
|
|
7013
|
+ */
|
|
|
7014
|
+ INPUT_DATA_FORM: 'inputDataForm',
|
|
|
7015
|
+
|
|
|
7016
|
+ /**
|
|
|
7017
|
+ * @description 服务命令
|
|
|
7018
|
+ */
|
|
|
7019
|
+ SERVICE_COMMAND: 'serviceCommand',
|
|
|
7020
|
+
|
|
|
7021
|
+ WAY_SELECT: 'dynamicWaySelectEl',
|
|
|
7022
|
+
|
|
|
7023
|
+ /**
|
|
|
7024
|
+ * @description 输入参数表单控件
|
|
|
7025
|
+ */
|
|
|
7026
|
+ INPUT_DATA_FORM_FILTER: 'inputDataFilter'
|
|
|
7027
|
+ }
|
|
|
7028
|
+
|
|
|
7029
|
+ const COMMAND_TYPE_ENUM = {
|
|
|
7030
|
+ CUSTOM: '0',
|
|
|
7031
|
+ SERVICE: '1'
|
6952
|
}
|
7032
|
}
|
6953
|
|
7033
|
|
6954
|
/**
|
7034
|
/**
|
|
@@ -6966,9 +7046,28 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -6966,9 +7046,28 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6966
|
const val = {
|
7046
|
const val = {
|
6967
|
[enumConst.ACTION]: content.type,
|
7047
|
[enumConst.ACTION]: content.type,
|
6968
|
[enumGetValue[content.type]]: content.value,
|
7048
|
[enumGetValue[content.type]]: content.value,
|
6969
|
- [enumConst.WAY]: content[enumConst.WAY]
|
7049
|
+
|
|
|
7050
|
+ // 参数设置
|
|
|
7051
|
+ [enumConst.JSON_COMMAND]: content[enumConst.JSON_COMMAND],
|
|
|
7052
|
+ [enumConst.WAY]: content[enumConst.WAY],
|
|
|
7053
|
+ [enumConst.COMMAND_TYPE]: content[enumConst.COMMAND_TYPE],
|
|
|
7054
|
+ [enumConst.TCP_COMMAND]: content[enumConst.TCP_COMMAND],
|
|
|
7055
|
+ [enumConst.TRANSPORTTYPE]: content[enumConst.TRANSPORTTYPE],
|
|
|
7056
|
+ [enumConst.SERVICE]: content[enumConst.SERVICE],
|
|
|
7057
|
+ [enumConst.SERVICE_COMMAND]: content[enumConst.SERVICE_COMMAND],
|
|
|
7058
|
+ [enumConst.SERVICE_ORIGINAL_CONFIGURATION]: content[enumConst.SERVICE_ORIGINAL_CONFIGURATION],
|
|
|
7059
|
+ }
|
|
|
7060
|
+
|
|
|
7061
|
+
|
|
|
7062
|
+ const isTCPTransportType = content[enumConst.TRANSPORTTYPE] === 'TCP'
|
|
|
7063
|
+ const isCustom = content[enumConst.COMMAND_TYPE] === COMMAND_TYPE_ENUM.CUSTOM
|
|
|
7064
|
+
|
|
|
7065
|
+ if (content[enumConst.SERVICE] && !isCustom) {
|
|
|
7066
|
+ form.val(enumActionEl.INPUT_DATA_FORM_FILTER, content[enumConst.SERVICE_COMMAND])
|
6970
|
}
|
7067
|
}
|
6971
|
- controlFormDisplay(content.type)
|
7068
|
+
|
|
|
7069
|
+ controlFormDisplay(content.type, isTCPTransportType, isCustom)
|
|
|
7070
|
+
|
6972
|
form.val(enumActionEl.FORM_FILTER, val)
|
7071
|
form.val(enumActionEl.FORM_FILTER, val)
|
6973
|
}
|
7072
|
}
|
6974
|
|
7073
|
|
|
@@ -6976,22 +7075,40 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -6976,22 +7075,40 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6976
|
* @description 控制form
|
7075
|
* @description 控制form
|
6977
|
* @param {enumActionType} value
|
7076
|
* @param {enumActionType} value
|
6978
|
*/
|
7077
|
*/
|
6979
|
- function controlFormDisplay(value) {
|
7078
|
+ async function controlFormDisplay(value, isTCP, isCustom) {
|
6980
|
if (value === enumActionType.PAGE) {
|
7079
|
if (value === enumActionType.PAGE) {
|
6981
|
$(`#${enumActionEl.LINK_EL_ID}`).css({ display: 'none' })
|
7080
|
$(`#${enumActionEl.LINK_EL_ID}`).css({ display: 'none' })
|
6982
|
$(`#${enumActionEl.PAGE_EL_ID}`).css({ display: 'block' })
|
7081
|
$(`#${enumActionEl.PAGE_EL_ID}`).css({ display: 'block' })
|
6983
|
$(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: 'none' })
|
7082
|
$(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: 'none' })
|
6984
|
$(`#${enumActionEl.WAY_SELECT}`).css({ display: 'none' })
|
7083
|
$(`#${enumActionEl.WAY_SELECT}`).css({ display: 'none' })
|
|
|
7084
|
+ $(`#${enumActionEl.COMMAND_TYPE_EL}`).css({ display: 'none' })
|
|
|
7085
|
+
|
|
|
7086
|
+ $(`#${enumActionEl.INPUT_DATA_FORM}`).css({ display: 'none' })
|
|
|
7087
|
+ $(`#${enumActionEl.SERVICE_EL}`).css({ display: 'none' })
|
|
|
7088
|
+ $(`#${enumActionEl.TCP_COMMAND_INPUT}`).css({ display: 'none' })
|
|
|
7089
|
+ $(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: 'none' })
|
6985
|
} else if (value === enumActionType.LINK) {
|
7090
|
} else if (value === enumActionType.LINK) {
|
6986
|
$(`#${enumActionEl.PAGE_EL_ID}`).css({ display: 'none' })
|
7091
|
$(`#${enumActionEl.PAGE_EL_ID}`).css({ display: 'none' })
|
6987
|
$(`#${enumActionEl.LINK_EL_ID}`).css({ display: 'block' })
|
7092
|
$(`#${enumActionEl.LINK_EL_ID}`).css({ display: 'block' })
|
6988
|
$(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: 'none' })
|
7093
|
$(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: 'none' })
|
6989
|
$(`#${enumActionEl.WAY_SELECT}`).css({ display: 'none' })
|
7094
|
$(`#${enumActionEl.WAY_SELECT}`).css({ display: 'none' })
|
|
|
7095
|
+ $(`#${enumActionEl.COMMAND_TYPE_EL}`).css({ display: 'none' })
|
|
|
7096
|
+
|
|
|
7097
|
+ $(`#${enumActionEl.INPUT_DATA_FORM}`).css({ display: 'none' })
|
|
|
7098
|
+ $(`#${enumActionEl.SERVICE_EL}`).css({ display: 'none' })
|
|
|
7099
|
+ $(`#${enumActionEl.TCP_COMMAND_INPUT}`).css({ display: 'none' })
|
|
|
7100
|
+ $(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: 'none' })
|
6990
|
} else if (value === enumActionType.PARAMS_SETTING) {
|
7101
|
} else if (value === enumActionType.PARAMS_SETTING) {
|
6991
|
$(`#${enumActionEl.LINK_EL_ID}`).css({ display: 'none' })
|
7102
|
$(`#${enumActionEl.LINK_EL_ID}`).css({ display: 'none' })
|
6992
|
$(`#${enumActionEl.PAGE_EL_ID}`).css({ display: 'none' })
|
7103
|
$(`#${enumActionEl.PAGE_EL_ID}`).css({ display: 'none' })
|
6993
|
- $(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: 'flex' })
|
7104
|
+ // $(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: 'flex' })
|
6994
|
$(`#${enumActionEl.WAY_SELECT}`).css({ display: 'block' })
|
7105
|
$(`#${enumActionEl.WAY_SELECT}`).css({ display: 'block' })
|
|
|
7106
|
+ $(`#${enumActionEl.COMMAND_TYPE_EL}`).css({ display: 'block' })
|
|
|
7107
|
+
|
|
|
7108
|
+ $(`#${enumActionEl.INPUT_DATA_FORM}`).css({ display: isCustom ? 'none' : 'block' })
|
|
|
7109
|
+ $(`#${enumActionEl.SERVICE_EL}`).css({ display: isCustom ? 'none' : 'block' })
|
|
|
7110
|
+ $(`#${enumActionEl.TCP_COMMAND_INPUT}`).css({ display: isTCP && isCustom ? 'block' : 'none' })
|
|
|
7111
|
+ $(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: !isTCP && isCustom ? 'flex' : 'none' })
|
6995
|
}
|
7112
|
}
|
6996
|
}
|
7113
|
}
|
6997
|
|
7114
|
|
|
@@ -7012,9 +7129,42 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -7012,9 +7129,42 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
7012
|
}
|
7129
|
}
|
7013
|
|
7130
|
|
7014
|
if (isParamsSetting) {
|
7131
|
if (isParamsSetting) {
|
7015
|
- if (!isJson(formVal[enumConst.COMMAND])) {
|
|
|
7016
|
- UseLayUi.topErrorMsg('命令配置存在错误')
|
|
|
7017
|
- return
|
7132
|
+ const isTCPTransportType = formVal[enumConst.TRANSPORTTYPE] === 'TCP'
|
|
|
7133
|
+ const isCustom = formVal[enumConst.COMMAND_TYPE] === COMMAND_TYPE_ENUM.CUSTOM
|
|
|
7134
|
+ let inputData = form.val(enumActionEl.INPUT_DATA_FORM_FILTER)
|
|
|
7135
|
+
|
|
|
7136
|
+ const validateParamsSetting = () => {
|
|
|
7137
|
+ if (isCustom) {
|
|
|
7138
|
+ if (isTCPTransportType) {
|
|
|
7139
|
+ if (!formVal[enumConst.TCP_COMMAND]) {
|
|
|
7140
|
+ UseLayUi.topErrorMsg('请输入自定义下发指令')
|
|
|
7141
|
+ return false
|
|
|
7142
|
+ }
|
|
|
7143
|
+ } else {
|
|
|
7144
|
+ console.log(formVal)
|
|
|
7145
|
+ if (!isJson(formVal[enumConst.JSON_COMMAND])) {
|
|
|
7146
|
+ UseLayUi.topErrorMsg('命令配置存在错误')
|
|
|
7147
|
+ return false
|
|
|
7148
|
+ }
|
|
|
7149
|
+ }
|
|
|
7150
|
+ } else {
|
|
|
7151
|
+ if (!formVal[enumConst.SERVICE]) {
|
|
|
7152
|
+ UseLayUi.topErrorMsg('请选择服务')
|
|
|
7153
|
+ return false
|
|
|
7154
|
+ } else {
|
|
|
7155
|
+ const { flag, value } = UseLayUi.validateThingsModelInputDataForm(Utils.stringToJSON(formVal[enumConst.SERVICE_ORIGINAL_CONFIGURATION], []), inputData)
|
|
|
7156
|
+ inputData = value
|
|
|
7157
|
+ return flag
|
|
|
7158
|
+ }
|
|
|
7159
|
+ }
|
|
|
7160
|
+ return true
|
|
|
7161
|
+ }
|
|
|
7162
|
+
|
|
|
7163
|
+ if (!validateParamsSetting()) return
|
|
|
7164
|
+
|
|
|
7165
|
+ // 选择服务的方式下发命令
|
|
|
7166
|
+ if (!isCustom && formVal[enumConst.SERVICE] && !isTCPTransportType) {
|
|
|
7167
|
+ formVal[enumConst.SERVICE_COMMAND] = inputData
|
7018
|
}
|
7168
|
}
|
7019
|
}
|
7169
|
}
|
7020
|
|
7170
|
|
|
@@ -7029,8 +7179,14 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -7029,8 +7179,14 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
7029
|
type: formVal[enumConst.ACTION],
|
7179
|
type: formVal[enumConst.ACTION],
|
7030
|
value: formVal[enumGetValue[formVal[enumConst.ACTION]]],
|
7180
|
value: formVal[enumGetValue[formVal[enumConst.ACTION]]],
|
7031
|
...(isParamsSetting ? {
|
7181
|
...(isParamsSetting ? {
|
7032
|
- [enumConst.COMMAND]: formVal[enumConst.COMMAND],
|
|
|
7033
|
- [enumConst.WAY]: formVal[enumConst.WAY]
|
7182
|
+ [enumConst.JSON_COMMAND]: formVal[enumConst.JSON_COMMAND],
|
|
|
7183
|
+ [enumConst.WAY]: formVal[enumConst.WAY],
|
|
|
7184
|
+ [enumConst.COMMAND_TYPE]: formVal[enumConst.COMMAND_TYPE],
|
|
|
7185
|
+ [enumConst.TCP_COMMAND]: formVal[enumConst.TCP_COMMAND],
|
|
|
7186
|
+ [enumConst.TRANSPORTTYPE]: formVal[enumConst.TRANSPORTTYPE],
|
|
|
7187
|
+ [enumConst.SERVICE]: formVal[enumConst.SERVICE],
|
|
|
7188
|
+ [enumConst.SERVICE_COMMAND]: formVal[enumConst.SERVICE_COMMAND],
|
|
|
7189
|
+ [enumConst.SERVICE_ORIGINAL_CONFIGURATION]: formVal[enumConst.SERVICE_ORIGINAL_CONFIGURATION],
|
7034
|
} : {}),
|
7190
|
} : {}),
|
7035
|
},
|
7191
|
},
|
7036
|
}
|
7192
|
}
|
|
@@ -7057,6 +7213,18 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -7057,6 +7213,18 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
7057
|
}
|
7213
|
}
|
7058
|
|
7214
|
|
7059
|
/**
|
7215
|
/**
|
|
|
7216
|
+ * @description 生成命令类型选项
|
|
|
7217
|
+ * @returns
|
|
|
7218
|
+ */
|
|
|
7219
|
+ function generateCommandTypeOptions() {
|
|
|
7220
|
+ const options = [
|
|
|
7221
|
+ { name: '自定义命令', id: COMMAND_TYPE_ENUM.CUSTOM },
|
|
|
7222
|
+ { name: '服务调用', id: COMMAND_TYPE_ENUM.SERVICE },
|
|
|
7223
|
+ ]
|
|
|
7224
|
+ return UseLayUi.generateOptionTemplate({ dataSource: options, addPlaceholderOption: false })
|
|
|
7225
|
+ }
|
|
|
7226
|
+
|
|
|
7227
|
+ /**
|
7060
|
* @description 生产页面选项
|
7228
|
* @description 生产页面选项
|
7061
|
*/
|
7229
|
*/
|
7062
|
function generatorPageOptions() {
|
7230
|
function generatorPageOptions() {
|
|
@@ -7064,11 +7232,87 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -7064,11 +7232,87 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
7064
|
return UseLayUi.generateOptionTemplate({ dataSource: options, addPlaceholderOption: false })
|
7232
|
return UseLayUi.generateOptionTemplate({ dataSource: options, addPlaceholderOption: false })
|
7065
|
}
|
7233
|
}
|
7066
|
|
7234
|
|
7067
|
- function generatorEventListen() {
|
7235
|
+ async function generatorEventListen(data) {
|
|
|
7236
|
+ const info = getLayerBindInfo('event', event.data.type) || {}
|
|
|
7237
|
+ let originType = (info.content || {}).type
|
|
|
7238
|
+ const dataSource = getDataSourceBindValue()
|
|
|
7239
|
+ let transportType
|
|
|
7240
|
+ let deviceProfileServices = []
|
|
|
7241
|
+
|
|
|
7242
|
+ /**
|
|
|
7243
|
+ * @description 动作下拉 change event
|
|
|
7244
|
+ */
|
7068
|
form.on(`select(${enumActionEl.ACTION_SELECT_FILTER})`, (data) => {
|
7245
|
form.on(`select(${enumActionEl.ACTION_SELECT_FILTER})`, (data) => {
|
7069
|
const { value } = data
|
7246
|
const { value } = data
|
7070
|
- controlFormDisplay(value)
|
7247
|
+ if (value === enumActionType.PARAMS_SETTING && !dataSource.deviceProfileId) {
|
|
|
7248
|
+ UseLayUi.topErrorMsg('请先绑定数据源!')
|
|
|
7249
|
+ form.val(enumActionEl.FORM_FILTER, { [enumConst.ACTION]: originType })
|
|
|
7250
|
+ return
|
|
|
7251
|
+ }
|
|
|
7252
|
+ originType = value
|
|
|
7253
|
+ const isCustom = form.val(enumActionEl.ACTION_SELECT_FILTER)[enumConst.COMMAND_TYPE] === COMMAND_TYPE_ENUM.CUSTOM
|
|
|
7254
|
+ controlFormDisplay(value, transportType, isCustom)
|
|
|
7255
|
+ })
|
|
|
7256
|
+
|
|
|
7257
|
+ /**
|
|
|
7258
|
+ * @description 命令类型下拉 change event
|
|
|
7259
|
+ */
|
|
|
7260
|
+ form.on(`select(${enumActionEl.COMMAND_TYPE_EL})`, (data) => {
|
|
|
7261
|
+ const { value } = data
|
|
|
7262
|
+ const flag = value === COMMAND_TYPE_ENUM.CUSTOM
|
|
|
7263
|
+ const isTCPTransportType = transportType === 'TCP'
|
|
|
7264
|
+ $(`#${enumActionEl.INPUT_DATA_FORM}`).css({ display: flag ? 'none' : 'block' })
|
|
|
7265
|
+ $(`#${enumActionEl.SERVICE_EL}`).css({ display: flag ? 'none' : 'block' })
|
|
|
7266
|
+ $(`#${enumActionEl.TCP_COMMAND_INPUT}`).css({ display: isTCPTransportType && flag ? 'block' : 'none' })
|
|
|
7267
|
+ $(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: !isTCPTransportType && flag ? 'flex' : 'none' })
|
|
|
7268
|
+ form.val(enumActionEl.FORM_FILTER, { [enumConst.TCP_COMMAND]: '', [enumConst.SERVICE]: '', [enumConst.COMMAND]: '' })
|
|
|
7269
|
+ $(`#${enumActionEl.INPUT_DATA_FORM}`).html('')
|
|
|
7270
|
+ editorAssignValue()
|
|
|
7271
|
+ })
|
|
|
7272
|
+
|
|
|
7273
|
+ /**
|
|
|
7274
|
+ * @description 服务下拉选择change event
|
|
|
7275
|
+ */
|
|
|
7276
|
+ form.on(`select(${enumActionEl.SERVICE_EL})`, (data) => {
|
|
|
7277
|
+ const { value } = data
|
|
|
7278
|
+ const needRender = deviceProfileServices.find(item => item.identifier === value) || {}
|
|
|
7279
|
+ const isTCPTransportType = transportType === 'TCP'
|
|
|
7280
|
+
|
|
|
7281
|
+ if (!isTCPTransportType) {
|
|
|
7282
|
+ const template = UseLayUi.genThingsModelInputDataForm(needRender.functionJson?.inputData || [], 120)
|
|
|
7283
|
+ $(`#${enumActionEl.INPUT_DATA_FORM}`).html(template)
|
|
|
7284
|
+ } else {
|
|
|
7285
|
+ form.val(enumActionEl.FORM_FILTER, { [enumConst.SERVICE_COMMAND]: needRender.functionJson?.inputData?.[0]?.serviceCommand || '' })
|
|
|
7286
|
+ }
|
|
|
7287
|
+ form.val(enumActionEl.FORM_FILTER, { [enumConst.SERVICE_ORIGINAL_CONFIGURATION]: JSON.stringify(needRender.functionJson?.inputData || []) })
|
7071
|
})
|
7288
|
})
|
|
|
7289
|
+
|
|
|
7290
|
+ try {
|
|
|
7291
|
+ if (!dataSource.deviceProfileId) return
|
|
|
7292
|
+ const detail = await ConfigurationNodeApi.getDeviceProfileDetailById(dataSource.deviceProfileId)
|
|
|
7293
|
+ transportType = detail.transportType
|
|
|
7294
|
+ const { content = {} } = data
|
|
|
7295
|
+ form.val(enumActionEl.FORM_FILTER, { [enumConst.TRANSPORTTYPE]: transportType })
|
|
|
7296
|
+ const service = await ConfigurationNodeApi.getThingsModelServiceByDeviceProfileId(dataSource.deviceProfileId)
|
|
|
7297
|
+ deviceProfileServices = service || []
|
|
|
7298
|
+ const template = UseLayUi.generateOptionTemplate({ dataSource: deviceProfileServices, labelField: 'functionName', valueField: 'identifier' })
|
|
|
7299
|
+ $(`#${enumActionEl.SERVICE_EL} > .layui-input-block > select`).html(template)
|
|
|
7300
|
+ form.val(enumActionEl.FORM_FILTER, { [enumConst.SERVICE]: content[enumConst.SERVICE] })
|
|
|
7301
|
+
|
|
|
7302
|
+ // 服务有值回显表单
|
|
|
7303
|
+ if (content[enumConst.SERVICE]) {
|
|
|
7304
|
+ const needRender = deviceProfileServices.find(item => item.identifier === content[enumConst.SERVICE]) || {}
|
|
|
7305
|
+ if (transportType !== 'TCP') {
|
|
|
7306
|
+ const template = UseLayUi.genThingsModelInputDataForm(needRender.functionJson?.inputData || [], 120)
|
|
|
7307
|
+ $(`#${enumActionEl.INPUT_DATA_FORM}`).html(template)
|
|
|
7308
|
+ form.val(enumActionEl.INPUT_DATA_FORM_FILTER, content[enumConst.SERVICE_COMMAND])
|
|
|
7309
|
+ }
|
|
|
7310
|
+ }
|
|
|
7311
|
+
|
|
|
7312
|
+ form.render('select', enumActionEl.FORM_FILTER)
|
|
|
7313
|
+ } catch (error) {
|
|
|
7314
|
+ throw error
|
|
|
7315
|
+ }
|
7072
|
}
|
7316
|
}
|
7073
|
|
7317
|
|
7074
|
function isJson(string) {
|
7318
|
function isJson(string) {
|
|
@@ -7093,6 +7337,9 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -7093,6 +7337,9 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
7093
|
}
|
7337
|
}
|
7094
|
}
|
7338
|
}
|
7095
|
|
7339
|
|
|
|
7340
|
+ const editorAssignValue = (value = JSON.stringify({ [enumConst.ATTR_PLACEHOLDER]: 0 }, null, 2)) => {
|
|
|
7341
|
+ $(`#${enumActionEl.EDITOR_CONTAINER}`).parent().find(`textarea[name="${enumConst.JSON_COMMAND}"]`).val(value)
|
|
|
7342
|
+ }
|
7096
|
|
7343
|
|
7097
|
/**
|
7344
|
/**
|
7098
|
* @description 创建JSON编辑器
|
7345
|
* @description 创建JSON编辑器
|
|
@@ -7107,13 +7354,13 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -7107,13 +7354,13 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
7107
|
fontSize: 14, // 编辑器内字体大小
|
7354
|
fontSize: 14, // 编辑器内字体大小
|
7108
|
tabSize: 2, // 制表符设置为 4 个空格大小
|
7355
|
tabSize: 2, // 制表符设置为 4 个空格大小
|
7109
|
});
|
7356
|
});
|
7110
|
- if (record.content && record.content[enumConst.COMMAND]) defaultValue = jsonParse(record.content[enumConst.COMMAND])
|
7357
|
+ if (record.content && record.content[enumConst.JSON_COMMAND]) defaultValue = jsonParse(record.content[enumConst.JSON_COMMAND])
|
7111
|
const stringValue = JSON.stringify(defaultValue, null, 2)
|
7358
|
const stringValue = JSON.stringify(defaultValue, null, 2)
|
7112
|
editor.insert(stringValue)
|
7359
|
editor.insert(stringValue)
|
7113
|
- $(`#${enumActionEl.EDITOR_CONTAINER}`).parent().find(`textarea[name="${enumConst.COMMAND}"]`).val(stringValue)
|
7360
|
+ $(`#${enumActionEl.EDITOR_CONTAINER}`).parent().find(`textarea[name="${enumConst.JSON_COMMAND}"]`).val(stringValue)
|
7114
|
editor.session.setMode("ace/mode/json");
|
7361
|
editor.session.setMode("ace/mode/json");
|
7115
|
editor.getSession().on('change', (event, editor) => {
|
7362
|
editor.getSession().on('change', (event, editor) => {
|
7116
|
- $(`#${enumActionEl.EDITOR_CONTAINER}`).parent().find(`textarea[name="${enumConst.COMMAND}"]`).val(editor.getValue())
|
7363
|
+ $(`#${enumActionEl.EDITOR_CONTAINER}`).parent().find(`textarea[name="${enumConst.JSON_COMMAND}"]`).val(editor.getValue())
|
7117
|
})
|
7364
|
})
|
7118
|
}
|
7365
|
}
|
7119
|
|
7366
|
|
|
@@ -7123,48 +7370,80 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -7123,48 +7370,80 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
7123
|
function createLayerForm(type) {
|
7370
|
function createLayerForm(type) {
|
7124
|
|
7371
|
|
7125
|
const content = `
|
7372
|
const content = `
|
7126
|
- <form class="layui-form" lay-filter="${enumActionEl.FORM_FILTER}">
|
7373
|
+ <form id="${enumActionEl.FORM_EL}" class="layui-form" lay-filter="${enumActionEl.FORM_FILTER}">
|
7127
|
<div style="width: 450px">
|
7374
|
<div style="width: 450px">
|
7128
|
<div class="layui-form-item">
|
7375
|
<div class="layui-form-item">
|
7129
|
- <label class="layui-form-label">事件</label>
|
|
|
7130
|
- <div class="layui-input-block">
|
7376
|
+ <label class="layui-form-label" style="width: 120px;">事件</label>
|
|
|
7377
|
+ <div class="layui-input-block" style="margin-left: 150px;">
|
7131
|
<input type="text" name="${enumConst.EVENT}" disabled class="layui-input" value="${enumEventType[type]}">
|
7378
|
<input type="text" name="${enumConst.EVENT}" disabled class="layui-input" value="${enumEventType[type]}">
|
7132
|
</div>
|
7379
|
</div>
|
7133
|
</div>
|
7380
|
</div>
|
7134
|
<div class="layui-form-item">
|
7381
|
<div class="layui-form-item">
|
7135
|
- <label class="layui-form-label">动作</label>
|
|
|
7136
|
- <div class="layui-input-block">
|
7382
|
+ <label class="layui-form-label" style="width: 120px;">动作</label>
|
|
|
7383
|
+ <div class="layui-input-block" style="margin-left: 150px;">
|
7137
|
<select name="${enumConst.ACTION}" lay-verType="tips" lay-verify="required" lay-filter="${enumActionEl.ACTION_SELECT_FILTER}">
|
7384
|
<select name="${enumConst.ACTION}" lay-verType="tips" lay-verify="required" lay-filter="${enumActionEl.ACTION_SELECT_FILTER}">
|
7138
|
${generatorActionOptions()}
|
7385
|
${generatorActionOptions()}
|
7139
|
</select>
|
7386
|
</select>
|
7140
|
</div>
|
7387
|
</div>
|
7141
|
</div>
|
7388
|
</div>
|
7142
|
<div class="layui-form-item" id="${enumActionEl.LINK_EL_ID}">
|
7389
|
<div class="layui-form-item" id="${enumActionEl.LINK_EL_ID}">
|
7143
|
- <label class="layui-form-label">链接</label>
|
|
|
7144
|
- <div class="layui-input-block">
|
7390
|
+ <label class="layui-form-label" style="width: 120px;">链接</label>
|
|
|
7391
|
+ <div class="layui-input-block" style="margin-left: 150px;">
|
7145
|
<input type="text" lay-verType="tips" name="${enumConst.LINK_VALUE}" class="layui-input">
|
7392
|
<input type="text" lay-verType="tips" name="${enumConst.LINK_VALUE}" class="layui-input">
|
7146
|
</div>
|
7393
|
</div>
|
7147
|
</div>
|
7394
|
</div>
|
7148
|
<div class="layui-form-item" id="${enumActionEl.PAGE_EL_ID}" style="display:none">
|
7395
|
<div class="layui-form-item" id="${enumActionEl.PAGE_EL_ID}" style="display:none">
|
7149
|
- <label class="layui-form-label">页面</label>
|
|
|
7150
|
- <div class="layui-input-block">
|
7396
|
+ <label class="layui-form-label" style="width: 120px;">页面</label>
|
|
|
7397
|
+ <div class="layui-input-block" style="margin-left: 150px;">
|
7151
|
<select name="${enumConst.PAGE_VALUE}" lay-verType="tips" id="pageSelect">
|
7398
|
<select name="${enumConst.PAGE_VALUE}" lay-verType="tips" id="pageSelect">
|
7152
|
${generatorPageOptions()}
|
7399
|
${generatorPageOptions()}
|
7153
|
</select>
|
7400
|
</select>
|
7154
|
</div>
|
7401
|
</div>
|
7155
|
</div>
|
7402
|
</div>
|
7156
|
- <div class="layui-form-item" id="${enumActionEl.WAY_SELECT}" style="display:none">
|
|
|
7157
|
- <label class="layui-form-label">单向/双向 ${createHelpMessage(`单向:服务器向网关设备、直连设备发送指令。发送指令后,设备不会返回任何信息。\n
|
7403
|
+ <div class="layui-form-item" id="${enumActionEl.WAY_SELECT}" style="display:none;">
|
|
|
7404
|
+ <label class="layui-form-label" style="width: 120px;">单向/双向 ${createHelpMessage(`单向:服务器向网关设备、直连设备发送指令。发送指令后,设备不会返回任何信息。\n
|
7158
|
双向:服务器向网关设备、直连设备发送指令。发送指令后,设备返回响应信息。`, 'way')}</label>
|
7405
|
双向:服务器向网关设备、直连设备发送指令。发送指令后,设备返回响应信息。`, 'way')}</label>
|
7159
|
- <div class="layui-input-block">
|
7406
|
+ <div class="layui-input-block" style="margin-left: 150px;">
|
7160
|
<input type="radio" name="${enumConst.WAY}" value="${enumWayType.ONE_WAY}" title="单向" checked="">
|
7407
|
<input type="radio" name="${enumConst.WAY}" value="${enumWayType.ONE_WAY}" title="单向" checked="">
|
7161
|
<input type="radio" name="${enumConst.WAY}" value="${enumWayType.TWO_WAY}" title="双向">
|
7408
|
<input type="radio" name="${enumConst.WAY}" value="${enumWayType.TWO_WAY}" title="双向">
|
7162
|
</div>
|
7409
|
</div>
|
7163
|
</div>
|
7410
|
</div>
|
7164
|
- <div id="${enumActionEl.EDITOR_CONTAINER}" style="display: none;">
|
|
|
7165
|
- <div style="width: 80px; text-align: right; padding: 9px 15px;flex: 0 0 80px;">命令 ${createHelpMessage('用户预览模式下,点击参数设置后。输入的变量值将作为"attrPlaceholder"的值,并以JSON格式下发给服务器。', 'command')}</div>
|
7411
|
+ <div id="${enumActionEl.COMMAND_TYPE_EL}" class="layui-form-item" style="display: none;">
|
|
|
7412
|
+ <label class="layui-form-label" style="width: 120px;">命令下发方式</label>
|
|
|
7413
|
+ <div class="layui-input-block" style="margin-left: 150px;">
|
|
|
7414
|
+ <select name="${enumConst.COMMAND_TYPE}" lay-verType="tips" required lay-filter="${enumActionEl.COMMAND_TYPE_EL}">
|
|
|
7415
|
+ ${generateCommandTypeOptions()}
|
|
|
7416
|
+ </select>
|
|
|
7417
|
+ </div>
|
|
|
7418
|
+ </div>
|
|
|
7419
|
+ <div class="layui-form-item" id="${enumActionEl.SERVICE_EL}" style="display: none;">
|
|
|
7420
|
+ <label class="layui-form-label" style="width: 120px;">服务</label>
|
|
|
7421
|
+ <div class="layui-input-block" style="margin-left: 150px;">
|
|
|
7422
|
+ <select name="${enumConst.SERVICE}" lay-verType="tips" lay-filter="${enumActionEl.SERVICE_EL}">
|
|
|
7423
|
+ </select>
|
|
|
7424
|
+ </div>
|
|
|
7425
|
+ </div>
|
|
|
7426
|
+ <div style="display: none;">
|
|
|
7427
|
+ <input type="text" name="${enumConst.SERVICE_COMMAND}" placeholder="服务命令" />
|
|
|
7428
|
+ </div>
|
|
|
7429
|
+ <div style="display: none;">
|
|
|
7430
|
+ <input type="text" name="${enumConst.SERVICE_ORIGINAL_CONFIGURATION}" placeholder="服务命令" />
|
|
|
7431
|
+ </div>
|
|
|
7432
|
+ <div id="${enumActionEl.EDITOR_CONTAINER}" class="layui-form-item" style="display: none; margin-bottom: 15px;">
|
|
|
7433
|
+ <div style="width: 120px; text-align: right; padding: 9px 15px;flex: 0 0 120px;">命令 ${createHelpMessage('用户预览模式下,点击参数设置后。输入的变量值将作为"attrPlaceholder"的值,并以JSON格式下发给服务器。', 'command')}</div>
|
7166
|
<div id="${enumActionEl.EDITOR}" style="width: 100%; height: 100%;border: 2px solid #eee;"></div>
|
7434
|
<div id="${enumActionEl.EDITOR}" style="width: 100%; height: 100%;border: 2px solid #eee;"></div>
|
7167
|
- <textarea name="${enumConst.COMMAND}" style="display: none;" />
|
7435
|
+ <textarea name="${enumConst.JSON_COMMAND}" class="layui-textarea" style="display: none;" />
|
|
|
7436
|
+ </div>
|
|
|
7437
|
+ <div id="${enumActionEl.TCP_COMMAND_INPUT}" style="display: none;">
|
|
|
7438
|
+ <label class="layui-form-label" style="width: 120px;">命令 ${createHelpMessage('用户预览模式下,点击参数设置后。输入的变量值将作为"attrPlaceholder"的值,并以JSON格式下发给服务器。', 'command')}</label>
|
|
|
7439
|
+ <div class="layui-input-block" style="margin-left: 150px;">
|
|
|
7440
|
+ <input type="text" lay-verType="tips" name="${enumConst.TCP_COMMAND}" placeholder="请输入自定义下发命令" class="layui-input">
|
|
|
7441
|
+ </div>
|
|
|
7442
|
+ </div>
|
|
|
7443
|
+ <div style="display: none;">
|
|
|
7444
|
+ <input type="text" lay-verType="tips" name="${enumConst.TRANSPORTTYPE}" placeholder="请输入自定义下发命令" class="layui-input">
|
|
|
7445
|
+ </div>
|
|
|
7446
|
+ <div id="${enumActionEl.INPUT_DATA_FORM}" class="layui-form" lay-filter="${enumActionEl.INPUT_DATA_FORM_FILTER}">
|
7168
|
</div>
|
7447
|
</div>
|
7169
|
</div>
|
7448
|
</div>
|
7170
|
</form>
|
7449
|
</form>
|
|
@@ -7173,7 +7452,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -7173,7 +7452,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
7173
|
layer.open({
|
7452
|
layer.open({
|
7174
|
title: "创建交互",
|
7453
|
title: "创建交互",
|
7175
|
content,
|
7454
|
content,
|
7176
|
- area: ["800px", "500px"],
|
7455
|
+ area: ["800px", "650px"],
|
7177
|
btn: ["保存", "取消"],
|
7456
|
btn: ["保存", "取消"],
|
7178
|
yes(index) {
|
7457
|
yes(index) {
|
7179
|
form.on(`submit(${enumActionEl.LAYER_SUBMIT_FILTER})`, data => {
|
7458
|
form.on(`submit(${enumActionEl.LAYER_SUBMIT_FILTER})`, data => {
|
|
@@ -7191,8 +7470,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -7191,8 +7470,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
7191
|
'lay-submit': '',
|
7470
|
'lay-submit': '',
|
7192
|
'lay-filter': enumActionEl.LAYER_SUBMIT_FILTER,
|
7471
|
'lay-filter': enumActionEl.LAYER_SUBMIT_FILTER,
|
7193
|
})
|
7472
|
})
|
7194
|
- generatorEventListen()
|
|
|
7195
|
const info = getLayerBindInfo('event', type)
|
7473
|
const info = getLayerBindInfo('event', type)
|
|
|
7474
|
+ generatorEventListen(info)
|
7196
|
Object.assign(recordData, { enabled: info.enabled })
|
7475
|
Object.assign(recordData, { enabled: info.enabled })
|
7197
|
createEditor(info)
|
7476
|
createEditor(info)
|
7198
|
form.render(null, enumActionEl.FORM_FILTER)
|
7477
|
form.render(null, enumActionEl.FORM_FILTER)
|
|
@@ -7823,7 +8102,6 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
|
@@ -7823,7 +8102,6 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
7823
|
[enumDataSourceConst.DEVICE_ID]: null,
|
8102
|
[enumDataSourceConst.DEVICE_ID]: null,
|
7824
|
[enumDataSourceConst.ATTR]: null,
|
8103
|
[enumDataSourceConst.ATTR]: null,
|
7825
|
[enumDataSourceConst.ATTR_NAME]: null,
|
8104
|
[enumDataSourceConst.ATTR_NAME]: null,
|
7826
|
- [enumDataSourceConst.ORG_ID]: null
|
|
|
7827
|
})
|
8105
|
})
|
7828
|
|
8106
|
|
7829
|
currentDataSource[enumDataSourceConst.DEVICE_TYPE] = value
|
8107
|
currentDataSource[enumDataSourceConst.DEVICE_TYPE] = value
|
|
@@ -12250,6 +12528,131 @@ class UseLayUi { |
|
@@ -12250,6 +12528,131 @@ class UseLayUi { |
12250
|
|
12528
|
|
12251
|
static dynamicAttr = (attr, value) => value ? `${attr}="${value}"` : ''
|
12529
|
static dynamicAttr = (attr, value) => value ? `${attr}="${value}"` : ''
|
12252
|
|
12530
|
|
|
|
12531
|
+
|
|
|
12532
|
+ static createHelpMessage(message, className) {
|
|
|
12533
|
+ return `
|
|
|
12534
|
+ <div class="thingskit-help-message ${className}">
|
|
|
12535
|
+ <img src="${Proxy_Prefix}/images/thingskit/question.svg"/>
|
|
|
12536
|
+ <div class="thingskit-help-container">
|
|
|
12537
|
+ <div class="thingskit-help-content">${message}</div>
|
|
|
12538
|
+ <div class="thingskit-help-arrow"></div>
|
|
|
12539
|
+ </div>
|
|
|
12540
|
+ </div>
|
|
|
12541
|
+ `
|
|
|
12542
|
+ }
|
|
|
12543
|
+
|
|
|
12544
|
+ /**
|
|
|
12545
|
+ * @description 生成输入框控件
|
|
|
12546
|
+ * @param {{label: string, value: string, labelWidth: number, numberInput: boolean}} params
|
|
|
12547
|
+ * @returns
|
|
|
12548
|
+ */
|
|
|
12549
|
+ static createInputTemplate({ label, value, labelWidth = 80, required = false, type = 'TEXT' }) {
|
|
|
12550
|
+ return `
|
|
|
12551
|
+ <div class="layui-form-item" >
|
|
|
12552
|
+ <label class="layui-form-label" style="width: ${labelWidth}px">${label}</label>
|
|
|
12553
|
+ <div class="layui-input-block" style="margin-left: ${labelWidth + 30}px">
|
|
|
12554
|
+ <input type="text" name="${value}" value-type="${type}" ${required && 'required'} lay-verType="tips" lay-verify="${required && 'required'}" placeholder="请输入${label}" autocomplete="off" class="layui-input">
|
|
|
12555
|
+ </div>
|
|
|
12556
|
+ </div>
|
|
|
12557
|
+ `
|
|
|
12558
|
+ }
|
|
|
12559
|
+
|
|
|
12560
|
+ static createJSONTemplate() {
|
|
|
12561
|
+
|
|
|
12562
|
+ }
|
|
|
12563
|
+
|
|
|
12564
|
+ /**
|
|
|
12565
|
+ *
|
|
|
12566
|
+ * @param {{
|
|
|
12567
|
+ * accessMode: 'r' | 'w',
|
|
|
12568
|
+ * functionName: string,
|
|
|
12569
|
+ * id: string,
|
|
|
12570
|
+ * identifier: string,
|
|
|
12571
|
+ * dataType: {
|
|
|
12572
|
+ * type: 'TEXT' | 'INT' | 'DOUBLE' | 'STRUCT',
|
|
|
12573
|
+ * specs: { unit: {value: string, label: string},
|
|
|
12574
|
+ * unitName: string,
|
|
|
12575
|
+ * valueRange: {min: number, max: number},
|
|
|
12576
|
+ * length: number
|
|
|
12577
|
+ * }}}[]} inputData
|
|
|
12578
|
+ * @param {number} labelWidth = 80
|
|
|
12579
|
+ * @param {}
|
|
|
12580
|
+ */
|
|
|
12581
|
+ static genThingsModelInputDataForm(inputData, labelWidth = 80, formFilter = 'inputDataFilter') {
|
|
|
12582
|
+ const list = []
|
|
|
12583
|
+ inputData.forEach(item => {
|
|
|
12584
|
+ const { identifier, functionName, dataType = {} } = item
|
|
|
12585
|
+ const { type } = dataType
|
|
|
12586
|
+ list.push(UseLayUi.createInputTemplate({ label: functionName, value: identifier, labelWidth, type }))
|
|
|
12587
|
+ })
|
|
|
12588
|
+ const template = `
|
|
|
12589
|
+ <form class="layui-form" action="" lay-filter="${formFilter}">
|
|
|
12590
|
+ ${list.join('')}
|
|
|
12591
|
+ </form>`
|
|
|
12592
|
+ return template
|
|
|
12593
|
+ }
|
|
|
12594
|
+ /**
|
|
|
12595
|
+ *
|
|
|
12596
|
+ * @param {{
|
|
|
12597
|
+ * accessMode: 'r' | 'w',
|
|
|
12598
|
+ * functionName: string,
|
|
|
12599
|
+ * id: string,
|
|
|
12600
|
+ * identifier: string,
|
|
|
12601
|
+ * dataType: {
|
|
|
12602
|
+ * type: 'TEXT' | 'INT' | 'DOUBLE' | 'STRUCT',
|
|
|
12603
|
+ * specs: { unit: {value: string, label: string},
|
|
|
12604
|
+ * unitName: string,
|
|
|
12605
|
+ * valueRange: {min: number, max: number},
|
|
|
12606
|
+ * length: number
|
|
|
12607
|
+ * }}}[]} inputData
|
|
|
12608
|
+ * @param {Record<string, any>} value = 80
|
|
|
12609
|
+ */
|
|
|
12610
|
+ static validateThingsModelInputDataForm(inputData, value, needFormat = false) {
|
|
|
12611
|
+ let flag = true
|
|
|
12612
|
+ const error = (message) => {
|
|
|
12613
|
+ UseLayUi.topErrorMsg(message)
|
|
|
12614
|
+ return false
|
|
|
12615
|
+ }
|
|
|
12616
|
+
|
|
|
12617
|
+ const validate = (item) => {
|
|
|
12618
|
+ const { dataType, identifier, functionName } = item
|
|
|
12619
|
+ const { type } = dataType || {}
|
|
|
12620
|
+ const identifierValue = value[identifier]
|
|
|
12621
|
+ switch (type) {
|
|
|
12622
|
+ case UseLayUi.thingsModelType.INT:
|
|
|
12623
|
+ if (isNaN(identifierValue)) return error(`${functionName}字段需要一个数字`)
|
|
|
12624
|
+ needFormat && (value[identifier] = parseInt(identifierValue))
|
|
|
12625
|
+ break
|
|
|
12626
|
+ case UseLayUi.thingsModelType.DOUBLE:
|
|
|
12627
|
+ if (isNaN(identifierValue)) return error(`${functionName}字段需要一个数字`)
|
|
|
12628
|
+ needFormat && (value[identifier] = Number(identifierValue))
|
|
|
12629
|
+ break
|
|
|
12630
|
+ case UseLayUi.thingsModelType.STRUCT:
|
|
|
12631
|
+ if (identifierValue && !Utils.stringIsJSON(identifierValue)) return error(`${functionName}字段需要一个JSON对象`)
|
|
|
12632
|
+ needFormat && (value[identifier] = Utils.stringToJSON(identifierValue))
|
|
|
12633
|
+ break
|
|
|
12634
|
+ default:
|
|
|
12635
|
+ break
|
|
|
12636
|
+ }
|
|
|
12637
|
+ return true
|
|
|
12638
|
+ }
|
|
|
12639
|
+
|
|
|
12640
|
+ for (const item of inputData) {
|
|
|
12641
|
+ if (!validate(item)) return { flag: false, value }
|
|
|
12642
|
+
|
|
|
12643
|
+ }
|
|
|
12644
|
+
|
|
|
12645
|
+ return { flag, value }
|
|
|
12646
|
+
|
|
|
12647
|
+ }
|
|
|
12648
|
+
|
|
|
12649
|
+ static thingsModelType = {
|
|
|
12650
|
+ TEXT: 'TEXT',
|
|
|
12651
|
+ INT: 'INT',
|
|
|
12652
|
+ DOUBLE: 'DOUBLE',
|
|
|
12653
|
+ STRUCT: 'STRUCT',
|
|
|
12654
|
+ }
|
|
|
12655
|
+
|
12253
|
/**
|
12656
|
/**
|
12254
|
* @description format data source to tree structure
|
12657
|
* @description format data source to tree structure
|
12255
|
* @param {object[]} data - data source
|
12658
|
* @param {object[]} data - data source
|
|
@@ -12698,6 +13101,34 @@ class UseLayUi { |
|
@@ -12698,6 +13101,34 @@ class UseLayUi { |
12698
|
}
|
13101
|
}
|
12699
|
}
|
13102
|
}
|
12700
|
|
13103
|
|
|
|
13104
|
+class Utils {
|
|
|
13105
|
+ /**
|
|
|
13106
|
+ * @description 字符串是否能转换为对象
|
|
|
13107
|
+ * @param {string} value
|
|
|
13108
|
+ */
|
|
|
13109
|
+ static stringIsJSON(value) {
|
|
|
13110
|
+ try {
|
|
|
13111
|
+ const res = JSON.parse(value)
|
|
|
13112
|
+ if (typeof res !== 'object') return false
|
|
|
13113
|
+ return true
|
|
|
13114
|
+ } catch (error) {
|
|
|
13115
|
+ return false
|
|
|
13116
|
+ }
|
|
|
13117
|
+ }
|
|
|
13118
|
+
|
|
|
13119
|
+ /**
|
|
|
13120
|
+ * @description 字符串转对象
|
|
|
13121
|
+ * @param {string} value
|
|
|
13122
|
+ * @returns
|
|
|
13123
|
+ */
|
|
|
13124
|
+ static stringToJSON(value, defaultValue = {}) {
|
|
|
13125
|
+ try {
|
|
|
13126
|
+ return JSON.parse(value)
|
|
|
13127
|
+ } catch (error) {
|
|
|
13128
|
+ return defaultValue
|
|
|
13129
|
+ }
|
|
|
13130
|
+ }
|
|
|
13131
|
+}
|
12701
|
|
13132
|
|
12702
|
/**
|
13133
|
/**
|
12703
|
* @description use to function capture await throw error
|
13134
|
* @description use to function capture await throw error
|
|
@@ -13882,14 +14313,12 @@ class HandleDataSource { |
|
@@ -13882,14 +14313,12 @@ class HandleDataSource { |
13882
|
const realDataList = data[attr] || []
|
14313
|
const realDataList = data[attr] || []
|
13883
|
|
14314
|
|
13884
|
const action = agg === 'NONE' ? 'unshift' : 'push'
|
14315
|
const action = agg === 'NONE' ? 'unshift' : 'push'
|
13885
|
-
|
|
|
13886
|
// chart insstance 是否已经接受过一次消息推送
|
14316
|
// chart insstance 是否已经接受过一次消息推送
|
13887
|
const isActive = instance.isActive
|
14317
|
const isActive = instance.isActive
|
13888
|
if (!isActive) {
|
14318
|
if (!isActive) {
|
13889
|
instance.isActive = true
|
14319
|
instance.isActive = true
|
13890
|
const chartOption = this.getChartComponentOption(chartInstanceType, { chartType: chartInstanceType, attr, dataList: realDataList, action, nodeId: node.id, additional })
|
14320
|
const chartOption = this.getChartComponentOption(chartInstanceType, { chartType: chartInstanceType, attr, dataList: realDataList, action, nodeId: node.id, additional })
|
13891
|
instance.setOption(chartOption)
|
14321
|
instance.setOption(chartOption)
|
13892
|
-
|
|
|
13893
|
} else {
|
14322
|
} else {
|
13894
|
const oldOptions = instance.getOption()
|
14323
|
const oldOptions = instance.getOption()
|
13895
|
const options = this.getRealTimeUpdateChartOption(chartInstanceType, { oldOptions, dataList: realDataList, additional })
|
14324
|
const options = this.getRealTimeUpdateChartOption(chartInstanceType, { oldOptions, dataList: realDataList, additional })
|
|
@@ -14116,6 +14545,7 @@ class HandleDataSource { |
|
@@ -14116,6 +14545,7 @@ class HandleDataSource { |
14116
|
const { additional: { unit = '°C' } = {} } = dataSource
|
14545
|
const { additional: { unit = '°C' } = {} } = dataSource
|
14117
|
|
14546
|
|
14118
|
const [timespan, value] = dataList[0] || []
|
14547
|
const [timespan, value] = dataList[0] || []
|
|
|
14548
|
+ const { min, max } = this.getRange(value)
|
14119
|
return {
|
14549
|
return {
|
14120
|
title: {
|
14550
|
title: {
|
14121
|
text: slaveDeviceName || deviceName
|
14551
|
text: slaveDeviceName || deviceName
|
|
@@ -14127,8 +14557,8 @@ class HandleDataSource { |
|
@@ -14127,8 +14557,8 @@ class HandleDataSource { |
14127
|
radius: '100%',
|
14557
|
radius: '100%',
|
14128
|
startAngle: 200,
|
14558
|
startAngle: 200,
|
14129
|
endAngle: -20,
|
14559
|
endAngle: -20,
|
14130
|
- min: 0,
|
|
|
14131
|
- max: 100,
|
14560
|
+ min,
|
|
|
14561
|
+ max,
|
14132
|
splitNumber: 10,
|
14562
|
splitNumber: 10,
|
14133
|
itemStyle: {
|
14563
|
itemStyle: {
|
14134
|
color: '#5479c6'
|
14564
|
color: '#5479c6'
|
|
@@ -14202,9 +14632,12 @@ class HandleDataSource { |
|
@@ -14202,9 +14632,12 @@ class HandleDataSource { |
14202
|
const { dataList = [], oldOptions, additional } = params
|
14632
|
const { dataList = [], oldOptions, additional } = params
|
14203
|
const { attrName } = additional
|
14633
|
const { attrName } = additional
|
14204
|
const [timespan, value] = dataList[0] || []
|
14634
|
const [timespan, value] = dataList[0] || []
|
|
|
14635
|
+ const { min, max } = this.getRange(value)
|
14205
|
return {
|
14636
|
return {
|
14206
|
series: [
|
14637
|
series: [
|
14207
|
{
|
14638
|
{
|
|
|
14639
|
+ min,
|
|
|
14640
|
+ max,
|
14208
|
name: attrName,
|
14641
|
name: attrName,
|
14209
|
data: [
|
14642
|
data: [
|
14210
|
{
|
14643
|
{
|
|
@@ -14216,6 +14649,25 @@ class HandleDataSource { |
|
@@ -14216,6 +14649,25 @@ class HandleDataSource { |
14216
|
}
|
14649
|
}
|
14217
|
}
|
14650
|
}
|
14218
|
|
14651
|
|
|
|
14652
|
+ getRange(value) {
|
|
|
14653
|
+ if (isNaN(value)) return { min: 0, max: 100 }
|
|
|
14654
|
+
|
|
|
14655
|
+ const numberValue = Number(value)
|
|
|
14656
|
+
|
|
|
14657
|
+ let newMax = Number('1'.padEnd(parseInt(value).toString().length + 1, 0))
|
|
|
14658
|
+
|
|
|
14659
|
+ newMax = newMax < 100 ? 100 : newMax
|
|
|
14660
|
+
|
|
|
14661
|
+ let max
|
|
|
14662
|
+ if (numberValue < newMax / 2) {
|
|
|
14663
|
+ max = newMax / 2
|
|
|
14664
|
+ } else {
|
|
|
14665
|
+ max = newMax
|
|
|
14666
|
+ }
|
|
|
14667
|
+
|
|
|
14668
|
+ return { min: 0, max }
|
|
|
14669
|
+ }
|
|
|
14670
|
+
|
14219
|
/**
|
14671
|
/**
|
14220
|
* @description 获取绑定的数据
|
14672
|
* @description 获取绑定的数据
|
14221
|
* @param subscriptionId
|
14673
|
* @param subscriptionId
|
|
@@ -14473,7 +14925,7 @@ class HandleDataInteraction { |
|
@@ -14473,7 +14925,7 @@ class HandleDataInteraction { |
14473
|
sendInstruction(list = []) {
|
14925
|
sendInstruction(list = []) {
|
14474
|
const queue = []
|
14926
|
const queue = []
|
14475
|
const fn = async (way, deviceId, data) => {
|
14927
|
const fn = async (way, deviceId, data) => {
|
14476
|
- const [err, res = []] = await to(ConfigurationNodeApi.deviceIsOnLine(deviceId))
|
14928
|
+ const [err, res = []] = way === 'twoway' ? await to(ConfigurationNodeApi.deviceIsOnLine(deviceId)) : [null, [{ value: true }]]
|
14477
|
const { value } = res[0] || {}
|
14929
|
const { value } = res[0] || {}
|
14478
|
if (value) {
|
14930
|
if (value) {
|
14479
|
await to(ConfigurationNodeApi.sendInstruction(way, deviceId, data))
|
14931
|
await to(ConfigurationNodeApi.sendInstruction(way, deviceId, data))
|
|
@@ -14495,15 +14947,6 @@ class HandleDataInteraction { |
|
@@ -14495,15 +14947,6 @@ class HandleDataInteraction { |
14495
|
fn(way, deviceId, data)
|
14947
|
fn(way, deviceId, data)
|
14496
|
})
|
14948
|
})
|
14497
|
}
|
14949
|
}
|
14498
|
- // if (slaveDeviceId) {
|
|
|
14499
|
- // queue.push(() => {
|
|
|
14500
|
- // fn(way, slaveDeviceId, data)
|
|
|
14501
|
- // })
|
|
|
14502
|
- // } else if (deviceId) {
|
|
|
14503
|
- // queue.push(() => {
|
|
|
14504
|
- // fn(way, deviceId, data)
|
|
|
14505
|
- // })
|
|
|
14506
|
- // }
|
|
|
14507
|
}
|
14950
|
}
|
14508
|
|
14951
|
|
14509
|
Promise.all(queue.map(fn => fn()))
|
14952
|
Promise.all(queue.map(fn => fn()))
|
|
@@ -14554,24 +14997,151 @@ class HandleDataInteraction { |
|
@@ -14554,24 +14997,151 @@ class HandleDataInteraction { |
14554
|
const enumActionEl = {
|
14997
|
const enumActionEl = {
|
14555
|
CONTAINER: 'container',
|
14998
|
CONTAINER: 'container',
|
14556
|
EDITOR: 'editor',
|
14999
|
EDITOR: 'editor',
|
14557
|
- ISSUED_WAY_FILTER: 'wayFilter'
|
15000
|
+ ISSUED_WAY_FILTER: 'wayFilter',
|
|
|
15001
|
+
|
|
|
15002
|
+ /**
|
|
|
15003
|
+ * @description 表单filter
|
|
|
15004
|
+ */
|
|
|
15005
|
+ FORM_FILTER: 'formFilter',
|
|
|
15006
|
+
|
|
|
15007
|
+ /**
|
|
|
15008
|
+ * @description 编辑器容器
|
|
|
15009
|
+ */
|
|
|
15010
|
+ EDITOR_CONTAINER: 'editorContainer',
|
|
|
15011
|
+
|
|
|
15012
|
+ /**
|
|
|
15013
|
+ * @description 编辑器
|
|
|
15014
|
+ */
|
|
|
15015
|
+ EDITOR: 'editor',
|
|
|
15016
|
+
|
|
|
15017
|
+ /**
|
|
|
15018
|
+ * @description 自定义TCP下发命令
|
|
|
15019
|
+ */
|
|
|
15020
|
+ CUSTOM_TCP_COMMAND: 'customTCPCommand',
|
|
|
15021
|
+
|
|
|
15022
|
+ /**
|
|
|
15023
|
+ * @description 自定义JSON下发命令
|
|
|
15024
|
+ */
|
|
|
15025
|
+ CUSTOM_JSON_COMMAND: 'customJSONCommand',
|
|
|
15026
|
+
|
|
|
15027
|
+ /**
|
|
|
15028
|
+ * @description 服务TCP命令
|
|
|
15029
|
+ */
|
|
|
15030
|
+ SERVICE_TCP_COMMAND: 'serviceTCPCommand',
|
14558
|
|
15031
|
|
|
|
15032
|
+ /**
|
|
|
15033
|
+ * @description 服务JSON命令
|
|
|
15034
|
+ */
|
|
|
15035
|
+ SERVICE_JSON_COMMAND: 'serviceTCPCommand',
|
14559
|
}
|
15036
|
}
|
14560
|
|
15037
|
|
14561
|
- function createContent() {
|
15038
|
+ function createCustomTCPParams() {
|
14562
|
return `
|
15039
|
return `
|
14563
|
- <div>
|
|
|
14564
|
- <div class="layui-form" lay-filter="${enumActionEl.ISSUED_WAY_FILTER}">
|
|
|
14565
|
- <div class="layui-form-item">
|
|
|
14566
|
- <label class="layui-form-label">下发值</label>
|
|
|
14567
|
- <div class="layui-input-block">
|
|
|
14568
|
- <input type="text" name="${enumConst.VALUE}" lay-verify="required" autocomplete="off" placeholder="请输入下发值" class="layui-input">
|
15040
|
+ <div>
|
|
|
15041
|
+ <div class="layui-form" lay-filter="${enumActionEl.CUSTOM_TCP_COMMAND}">
|
|
|
15042
|
+ <div class="layui-form-item">
|
|
|
15043
|
+ <label class="layui-form-label" style="width: 120px;">自定义下发值</label>
|
|
|
15044
|
+ <div class="layui-input-block" style="margin-left: 150px;">
|
|
|
15045
|
+ <input type="text" name="${enumActionEl.CUSTOM_TCP_COMMAND}" lay-verify="required" autocomplete="off" placeholder="请输入下发值" class="layui-input">
|
|
|
15046
|
+ </div>
|
14569
|
</div>
|
15047
|
</div>
|
14570
|
</div>
|
15048
|
</div>
|
14571
|
</div>
|
15049
|
</div>
|
14572
|
- </div>`
|
15050
|
+ `
|
|
|
15051
|
+ }
|
|
|
15052
|
+
|
|
|
15053
|
+ function createEditor() {
|
|
|
15054
|
+ if (content.transportType === 'TCP' || content.commandType === '1') return
|
|
|
15055
|
+ const jsonCommand = content.jsonCommand || ''
|
|
|
15056
|
+ let defaultValue = { [enumConst.ATTR_PLACEHOLDER]: 0 }
|
|
|
15057
|
+ const editor = ace.edit(enumActionEl.EDITOR, {
|
|
|
15058
|
+ maxLines: 18, // 最大行数,超过会自动出现滚动条
|
|
|
15059
|
+ minLines: 10, // 最小行数,还未到最大行数时,编辑器会自动伸缩大小
|
|
|
15060
|
+ fontSize: 14, // 编辑器内字体大小
|
|
|
15061
|
+ tabSize: 2, // 制表符设置为 4 个空格大小
|
|
|
15062
|
+ });
|
|
|
15063
|
+ if (jsonCommand) defaultValue = jsonParse(jsonCommand)
|
|
|
15064
|
+ const stringValue = JSON.stringify(defaultValue, null, 2)
|
|
|
15065
|
+ editor.insert(stringValue)
|
|
|
15066
|
+ $(`#${enumActionEl.EDITOR_CONTAINER}`).parent().find(`textarea[name="${enumActionEl.CUSTOM_JSON_COMMAND}"]`).val(stringValue)
|
|
|
15067
|
+ editor.session.setMode("ace/mode/json");
|
|
|
15068
|
+ editor.getSession().on('change', (event, editor) => {
|
|
|
15069
|
+ $(`#${enumActionEl.EDITOR_CONTAINER}`).parent().find(`textarea[name="${enumActionEl.CUSTOM_JSON_COMMAND}"]`).val(editor.getValue())
|
|
|
15070
|
+ })
|
|
|
15071
|
+ }
|
|
|
15072
|
+
|
|
|
15073
|
+ function createCustomJSONParams() {
|
|
|
15074
|
+ return `
|
|
|
15075
|
+ <div id="${enumActionEl.EDITOR_CONTAINER}" class="layui-form-item" style="disable: flex;">
|
|
|
15076
|
+ <div style="width: 120px; text-align: right; padding: 9px 15px;flex: 0 0 120px;text-align: left;">命令</div>
|
|
|
15077
|
+ <div id="${enumActionEl.EDITOR}" style="width: 100%; height: 100%;border: 2px solid #eee;"></div>
|
|
|
15078
|
+ <textarea name="${enumActionEl.CUSTOM_JSON_COMMAND}" class="layui-textarea" style="display: none;" />
|
|
|
15079
|
+ </div>
|
|
|
15080
|
+ `
|
|
|
15081
|
+ }
|
|
|
15082
|
+
|
|
|
15083
|
+ function createServiceTCPParams() {
|
|
|
15084
|
+ return `
|
|
|
15085
|
+ <div>
|
|
|
15086
|
+ <div class="layui-form" lay-filter="${enumActionEl.SERVICE_TCP_COMMAND}">
|
|
|
15087
|
+ <div class="layui-form-item">
|
|
|
15088
|
+ <label class="layui-form-label" style="width: 120px;">自定义下发值</label>
|
|
|
15089
|
+ <div class="layui-input-block" style="margin-left: 150px;">
|
|
|
15090
|
+ <input type="text" name="${enumActionEl.SERVICE_TCP_COMMAND}" lay-verify="required" autocomplete="off" disabled placeholder="请输入下发值" class="layui-input">
|
|
|
15091
|
+ </div>
|
|
|
15092
|
+ </div>
|
|
|
15093
|
+ </div>
|
|
|
15094
|
+ </div>
|
|
|
15095
|
+ `
|
14573
|
}
|
15096
|
}
|
14574
|
|
15097
|
|
|
|
15098
|
+ function createServiceInputDataParams() {
|
|
|
15099
|
+ const inputData = jsonParse(content.serviceOriginalConfiguration)
|
|
|
15100
|
+ return UseLayUi.genThingsModelInputDataForm(inputData)
|
|
|
15101
|
+ }
|
|
|
15102
|
+
|
|
|
15103
|
+ function createContent() {
|
|
|
15104
|
+ const { commandType, tcpCommand, jsonCommand, serviceCommand, serviceOriginalConfiguration, transportType } = content
|
|
|
15105
|
+ const isCustom = commandType === '0'
|
|
|
15106
|
+ const isTCP = transportType === 'TCP'
|
|
|
15107
|
+
|
|
|
15108
|
+ let template
|
|
|
15109
|
+ if (isCustom) {
|
|
|
15110
|
+ if (isTCP) {
|
|
|
15111
|
+ template = createCustomTCPParams()
|
|
|
15112
|
+ } else {
|
|
|
15113
|
+ template = createCustomJSONParams()
|
|
|
15114
|
+ }
|
|
|
15115
|
+ } else {
|
|
|
15116
|
+ if (isTCP) {
|
|
|
15117
|
+ template = createServiceTCPParams()
|
|
|
15118
|
+ } else {
|
|
|
15119
|
+ template = createServiceInputDataParams()
|
|
|
15120
|
+ }
|
|
|
15121
|
+ }
|
|
|
15122
|
+ return `<form class="layui-form" lay-filter="${enumActionEl.FORM_FILTER}">${template}</form>`
|
|
|
15123
|
+ }
|
|
|
15124
|
+
|
|
|
15125
|
+ function echoPresetValue() {
|
|
|
15126
|
+ form.val(enumActionEl.FORM_FILTER, {
|
|
|
15127
|
+ // 如果是自定义并且不是TCP设备 回显inputData
|
|
|
15128
|
+ ...(content.commandType === '1' && content.transportType !== 'TCP' ? content.serviceCommand : {}),
|
|
|
15129
|
+ [enumActionEl.CUSTOM_JSON_COMMAND]: content.jsonCommand,
|
|
|
15130
|
+ [enumActionEl.CUSTOM_TCP_COMMAND]: content.tcpCommand,
|
|
|
15131
|
+ [enumActionEl.SERVICE_TCP_COMMAND]: content.serviceCommand,
|
|
|
15132
|
+ })
|
|
|
15133
|
+ }
|
|
|
15134
|
+
|
|
|
15135
|
+ function isJson(value) {
|
|
|
15136
|
+ try {
|
|
|
15137
|
+ JSON.parse(value)
|
|
|
15138
|
+ return true
|
|
|
15139
|
+ } catch (error) {
|
|
|
15140
|
+ return false
|
|
|
15141
|
+ }
|
|
|
15142
|
+ }
|
|
|
15143
|
+
|
|
|
15144
|
+
|
14575
|
function jsonParse(value) {
|
15145
|
function jsonParse(value) {
|
14576
|
try {
|
15146
|
try {
|
14577
|
return JSON.parse(value)
|
15147
|
return JSON.parse(value)
|
|
@@ -14580,12 +15150,49 @@ class HandleDataInteraction { |
|
@@ -14580,12 +15150,49 @@ class HandleDataInteraction { |
14580
|
}
|
15150
|
}
|
14581
|
}
|
15151
|
}
|
14582
|
|
15152
|
|
|
|
15153
|
+ const validateSwitchCommand = () => {
|
|
|
15154
|
+ const { commandType, transportType } = content
|
|
|
15155
|
+ const isCustom = commandType === '0'
|
|
|
15156
|
+ const isTCP = transportType === 'TCP'
|
|
|
15157
|
+ let { attr } = contentData.dataSources.find(item => item.nodeId === nodeId) || {}
|
|
|
15158
|
+
|
|
|
15159
|
+ let flag = false
|
|
|
15160
|
+ let value
|
|
|
15161
|
+
|
|
|
15162
|
+ if (isCustom) {
|
|
|
15163
|
+ if (isTCP) {
|
|
|
15164
|
+ value = content.tcpCommand
|
|
|
15165
|
+ if (value) flag = true
|
|
|
15166
|
+ } else {
|
|
|
15167
|
+ const replaceValue = currentNode.getAttribute(SWITCH_SEND_VALUE)
|
|
|
15168
|
+ value = jsonParse(content.jsonCommand)
|
|
|
15169
|
+ value = replaceAttrPlaceholder(value, attr, replaceValue)
|
|
|
15170
|
+ if (value) flag = true
|
|
|
15171
|
+ }
|
|
|
15172
|
+ } else {
|
|
|
15173
|
+ if (isTCP) {
|
|
|
15174
|
+ value = content.serviceCommand
|
|
|
15175
|
+ if (value) flag = true
|
|
|
15176
|
+ } else {
|
|
|
15177
|
+ value = content.serviceCommand
|
|
|
15178
|
+ const { flag: validateFlag, value: validateValue } = UseLayUi.validateThingsModelInputDataForm(Utils.stringToJSON(content.serviceOriginalConfiguration), value, true)
|
|
|
15179
|
+ if (validateFlag) {
|
|
|
15180
|
+ value = validateValue
|
|
|
15181
|
+ flag = true
|
|
|
15182
|
+ }
|
|
|
15183
|
+ }
|
|
|
15184
|
+ }
|
|
|
15185
|
+ return { flag, value }
|
|
|
15186
|
+ }
|
|
|
15187
|
+
|
14583
|
function handleSwitchComponent() {
|
15188
|
function handleSwitchComponent() {
|
14584
|
const state = currentNode.getAttribute(SWITCH_STATE)
|
15189
|
const state = currentNode.getAttribute(SWITCH_STATE)
|
14585
|
- const value = currentNode.getAttribute(SWITCH_SEND_VALUE)
|
|
|
14586
|
if (state === SWITCH_STATE_NONE) {
|
15190
|
if (state === SWITCH_STATE_NONE) {
|
14587
|
return
|
15191
|
return
|
14588
|
}
|
15192
|
}
|
|
|
15193
|
+ const { flag, value } = validateSwitchCommand()
|
|
|
15194
|
+ if (!flag) return
|
|
|
15195
|
+
|
14589
|
layer.confirm('是否确认下发命令?', async function (index) {
|
15196
|
layer.confirm('是否确认下发命令?', async function (index) {
|
14590
|
defaultHandler(value, () => layer.close(index))
|
15197
|
defaultHandler(value, () => layer.close(index))
|
14591
|
});
|
15198
|
});
|
|
@@ -14598,7 +15205,7 @@ class HandleDataInteraction { |
|
@@ -14598,7 +15205,7 @@ class HandleDataInteraction { |
14598
|
|
15205
|
|
14599
|
for (const key of Object.keys(oldValue)) {
|
15206
|
for (const key of Object.keys(oldValue)) {
|
14600
|
if (key === enumConst.ATTR_PLACEHOLDER) {
|
15207
|
if (key === enumConst.ATTR_PLACEHOLDER) {
|
14601
|
- newValue[replaceAttr] = replaceValue
|
15208
|
+ newValue[replaceAttr] = replaceValue ? replaceValue : oldValue[key]
|
14602
|
continue
|
15209
|
continue
|
14603
|
}
|
15210
|
}
|
14604
|
if (typeof oldValue[key] === 'object') {
|
15211
|
if (typeof oldValue[key] === 'object') {
|
|
@@ -14611,33 +15218,81 @@ class HandleDataInteraction { |
|
@@ -14611,33 +15218,81 @@ class HandleDataInteraction { |
14611
|
return newValue
|
15218
|
return newValue
|
14612
|
}
|
15219
|
}
|
14613
|
|
15220
|
|
|
|
15221
|
+ const validate = (data) => {
|
|
|
15222
|
+ const { commandType, transportType } = content
|
|
|
15223
|
+ let { attr } = contentData.dataSources.find(item => item.nodeId === nodeId) || {}
|
|
|
15224
|
+ let flag = false
|
|
|
15225
|
+ let value
|
|
|
15226
|
+
|
|
|
15227
|
+ const isCustom = commandType === '0'
|
|
|
15228
|
+ const isTCP = transportType === 'TCP'
|
|
|
15229
|
+
|
|
|
15230
|
+ let template
|
|
|
15231
|
+ if (isCustom) {
|
|
|
15232
|
+ if (isTCP) {
|
|
|
15233
|
+ value = data[enumActionEl.CUSTOM_TCP_COMMAND]
|
|
|
15234
|
+ const validate = new Validate([
|
|
|
15235
|
+ { value, required: true, message: '下发值是必填项' },
|
|
|
15236
|
+ ])
|
|
|
15237
|
+ if (validate.begin()) flag = true
|
|
|
15238
|
+ } else {
|
|
|
15239
|
+ value = data[enumActionEl.CUSTOM_JSON_COMMAND]
|
|
|
15240
|
+ const validate = new Validate([
|
|
|
15241
|
+ { value, required: true, message: '下发值是必填项' },
|
|
|
15242
|
+ { value, message: 'json格式校验不正确', validator: isJson },
|
|
|
15243
|
+ ])
|
|
|
15244
|
+ if (validate.begin()) {
|
|
|
15245
|
+ const replaceValue = currentNode.getAttribute(SWITCH_SEND_VALUE)
|
|
|
15246
|
+ flag = true
|
|
|
15247
|
+ value = jsonParse(value)
|
|
|
15248
|
+ value = replaceAttrPlaceholder(value, attr)
|
|
|
15249
|
+ }
|
|
|
15250
|
+ template = createCustomJSONParams()
|
|
|
15251
|
+ }
|
|
|
15252
|
+ } else {
|
|
|
15253
|
+ if (isTCP) {
|
|
|
15254
|
+ value = content.serviceCommand
|
|
|
15255
|
+ const validate = new Validate([
|
|
|
15256
|
+ { value, required: true, message: '下发值是必填项' },
|
|
|
15257
|
+ ])
|
|
|
15258
|
+ if (validate.begin()) flag = true
|
|
|
15259
|
+ } else {
|
|
|
15260
|
+ value = data
|
|
|
15261
|
+ const { flag: validateFlag, value: validateValue } = UseLayUi.validateThingsModelInputDataForm(Utils.stringToJSON(content.serviceOriginalConfiguration), value, true)
|
|
|
15262
|
+ if (validateFlag) {
|
|
|
15263
|
+ flag = true
|
|
|
15264
|
+ value = validateValue
|
|
|
15265
|
+ }
|
|
|
15266
|
+ }
|
|
|
15267
|
+ }
|
|
|
15268
|
+
|
|
|
15269
|
+ return { flag, value }
|
|
|
15270
|
+ }
|
|
|
15271
|
+
|
14614
|
const submitThrottle = this.throttle(submit)
|
15272
|
const submitThrottle = this.throttle(submit)
|
14615
|
async function submit(callback) {
|
15273
|
async function submit(callback) {
|
14616
|
- const { value } = form.val(enumActionEl.ISSUED_WAY_FILTER)
|
|
|
14617
|
- defaultHandler(value, callback)
|
15274
|
+ const value = form.val(enumActionEl.FORM_FILTER)
|
|
|
15275
|
+ const { flag, value: result } = validate(value)
|
|
|
15276
|
+ if (!flag) return
|
|
|
15277
|
+ defaultHandler(result, callback)
|
14618
|
}
|
15278
|
}
|
14619
|
|
15279
|
|
14620
|
async function defaultHandler(value, callback) {
|
15280
|
async function defaultHandler(value, callback) {
|
14621
|
let { deviceId, attr } = contentData.dataSources.find(item => item.nodeId === nodeId) || {}
|
15281
|
let { deviceId, attr } = contentData.dataSources.find(item => item.nodeId === nodeId) || {}
|
14622
|
- let { command, way } = content
|
|
|
14623
|
- const validate = new Validate([
|
|
|
14624
|
- { value, required: true, message: '下发值是必填项' },
|
|
|
14625
|
- { value: deviceId, required: true, message: '未绑定设备' },
|
|
|
14626
|
- { value: way, required: true, message: '未绑定指令下发方式(单向/双向)' },
|
|
|
14627
|
- { value: command, required: true, message: '未设置下发命令' },
|
|
|
14628
|
- { value: attr, required: true, message: '未绑定设备属性' },
|
|
|
14629
|
- ])
|
|
|
14630
|
- if (!validate.begin()) return
|
|
|
14631
|
- if (typeof command === 'string') command = jsonParse(command)
|
|
|
14632
|
- const data = replaceAttrPlaceholder(command, attr, value)
|
15282
|
+
|
|
|
15283
|
+ /**
|
|
|
15284
|
+ * @type {command: string , commandType: string, service: string, wary: string, tcpCommand: string}
|
|
|
15285
|
+ */
|
|
|
15286
|
+ let { command, way, tcpCommand } = content
|
|
|
15287
|
+
|
14633
|
const instructionData = {
|
15288
|
const instructionData = {
|
14634
|
method: "methodThingskit",
|
15289
|
method: "methodThingskit",
|
14635
|
additionalInfo: { cmdType: 'API' },
|
15290
|
additionalInfo: { cmdType: 'API' },
|
14636
|
persistent: true,
|
15291
|
persistent: true,
|
14637
|
- params: data,
|
15292
|
+ params: value,
|
14638
|
}
|
15293
|
}
|
14639
|
|
15294
|
|
14640
|
- const [err, res = []] = await to(ConfigurationNodeApi.deviceIsOnLine(deviceId))
|
15295
|
+ const [err, res = []] = way === 'twoway' ? await to(ConfigurationNodeApi.deviceIsOnLine(deviceId)) : [null, [{ value: true }]]
|
14641
|
const { value: onlineFlag } = res[0] || {}
|
15296
|
const { value: onlineFlag } = res[0] || {}
|
14642
|
if (onlineFlag) {
|
15297
|
if (onlineFlag) {
|
14643
|
const [err, res] = await to(ConfigurationNodeApi.sendInstruction(way, deviceId, instructionData))
|
15298
|
const [err, res] = await to(ConfigurationNodeApi.sendInstruction(way, deviceId, instructionData))
|
|
@@ -14645,13 +15300,15 @@ class HandleDataInteraction { |
|
@@ -14645,13 +15300,15 @@ class HandleDataInteraction { |
14645
|
UseLayUi.topSuccessMsg('操作成功')
|
15300
|
UseLayUi.topSuccessMsg('操作成功')
|
14646
|
callback && typeof callback === 'function' && callback()
|
15301
|
callback && typeof callback === 'function' && callback()
|
14647
|
}
|
15302
|
}
|
|
|
15303
|
+ if (err) {
|
|
|
15304
|
+ UseLayUi.topErrorMsg(err?.response?.data || err)
|
|
|
15305
|
+ }
|
14648
|
} else {
|
15306
|
} else {
|
14649
|
UseLayUi.topErrorMsg('设备不在线!')
|
15307
|
UseLayUi.topErrorMsg('设备不在线!')
|
14650
|
}
|
15308
|
}
|
14651
|
}
|
15309
|
}
|
14652
|
|
15310
|
|
14653
|
function createLayer() {
|
15311
|
function createLayer() {
|
14654
|
-
|
|
|
14655
|
layer.open({
|
15312
|
layer.open({
|
14656
|
title: '参数设置',
|
15313
|
title: '参数设置',
|
14657
|
content: createContent(),
|
15314
|
content: createContent(),
|
|
@@ -14665,7 +15322,9 @@ class HandleDataInteraction { |
|
@@ -14665,7 +15322,9 @@ class HandleDataInteraction { |
14665
|
but2(index, layero) {
|
15322
|
but2(index, layero) {
|
14666
|
|
15323
|
|
14667
|
},
|
15324
|
},
|
14668
|
- async success(layero, index) {
|
15325
|
+ success(layero, index) {
|
|
|
15326
|
+ createEditor()
|
|
|
15327
|
+ echoPresetValue()
|
14669
|
$('.layui-layer-setwin a').removeAttr('href')
|
15328
|
$('.layui-layer-setwin a').removeAttr('href')
|
14670
|
form.render()
|
15329
|
form.render()
|
14671
|
},
|
15330
|
},
|
|
@@ -14683,7 +15342,7 @@ class HandleDataInteraction { |
|
@@ -14683,7 +15342,7 @@ class HandleDataInteraction { |
14683
|
try {
|
15342
|
try {
|
14684
|
handle[componentType]()
|
15343
|
handle[componentType]()
|
14685
|
} catch (error) {
|
15344
|
} catch (error) {
|
14686
|
-
|
15345
|
+ throw error
|
14687
|
}
|
15346
|
}
|
14688
|
}
|
15347
|
}
|
14689
|
startProcess()
|
15348
|
startProcess()
|
|
@@ -15445,6 +16104,10 @@ class Validate { |
|
@@ -15445,6 +16104,10 @@ class Validate { |
15445
|
this.list = ruleList
|
16104
|
this.list = ruleList
|
15446
|
}
|
16105
|
}
|
15447
|
|
16106
|
|
|
|
16107
|
+ static isFunction(value) {
|
|
|
16108
|
+ return Object.prototype.toString.call(value) === '[object Function]'
|
|
|
16109
|
+ }
|
|
|
16110
|
+
|
15448
|
/**
|
16111
|
/**
|
15449
|
* @description 设置规则
|
16112
|
* @description 设置规则
|
15450
|
* @param {{value: any, message: string, required?: boolean, validator?: any}} rule
|
16113
|
* @param {{value: any, message: string, required?: boolean, validator?: any}} rule
|
|
@@ -15460,6 +16123,12 @@ class Validate { |
|
@@ -15460,6 +16123,12 @@ class Validate { |
15460
|
UseLayUi.topErrorMsg(message)
|
16123
|
UseLayUi.topErrorMsg(message)
|
15461
|
return false
|
16124
|
return false
|
15462
|
}
|
16125
|
}
|
|
|
16126
|
+
|
|
|
16127
|
+ if (validator && Validate.isFunction(validator) && !validator(value)) {
|
|
|
16128
|
+ UseLayUi.topErrorMsg(message)
|
|
|
16129
|
+ return false
|
|
|
16130
|
+ }
|
|
|
16131
|
+
|
15463
|
}
|
16132
|
}
|
15464
|
return true
|
16133
|
return true
|
15465
|
}
|
16134
|
}
|