import QtQuick import Qt.labs.settings import "./js/global.js" as GL CommandForm { id: self anchors.fill: parent property var curCmdId: "" property var cmdSets: [] property var cmdSortStr: "" property var cmdSorts: [] property var searchType: "全部" property var showEnd: true property var maxLogCount: 1000 Settings { property alias _cmdSortStr: self.cmdSortStr } Component.onCompleted: { cmdSorts = cmdSortStr.split(",") } // 连接新的信号 Connections { target: backend_proxy function onReal_time_logs_signal(result) { var result_obj = JSON.parse(result) logModel.append({'time': result_obj.data.time, 'conetxt': result_obj.data.result}) if(logModel.count > maxLogCount) logModel.remove(0) if(showEnd) { _logTableView.positionViewAtRow(logModel.count -1, ListView.End) } } } Connections { target:self function onLogTabViewDoubleClick() { showEnd = !showEnd if(showEnd) { _logTableView.positionViewAtRow(logModel.count -1, ListView.End) } } function onCopyCmdClick(row) { var cmdId = cmdModel.get(row).id var obj = get_cmd_set(cmdId) if(!!obj) { obj.name = obj.name + " 副本" var result = backend_proxy.add_cmd_set(JSON.stringify(obj)) if(result.code === 200) { obj = result.data mapCmdModel[obj.id] = obj cmdModel.insert(row+1, obj) insertArr(cmdSorts, cmdId, obj.id) } else { alert.show(result.msg) } } } function onUpdateSorts() { if(searchType == "全部") { cmdSorts = [] for(var i = 0; i < cmdModel.count; ++i) { cmdSorts.push(cmdModel.get(i).id) } cmdSortStr = cmdSorts.toString() } } function onChangeType(type) { searchType = type get_cmd_sets_forType(searchType) } function onLogCleanClick() { logModel.clear() } function onLogExplorerClick() { var result = backend_proxy.open_log_folder() } function onJsBtnClick() { jsText = codedialog.showEditor(jsText) var regExp = /\t/g; jsText = jsText.replace(regExp, ' '); } function onCreateLstClick() // 菜单插入 { cmdSets = [] for(var i = 0 ; i < cmdModel.count; ++i) { if(cmdModel.get(i).checked) { cmdSets.push({"id":cmdModel.get(i).id,"delay":"0","loop":"1"} ) } } _createLstDialog.visible = true } function onDeleteCmdClick(row) { var cmdId = cmdModel.get(row).id var result = backend_proxy.delete_cmd_set(cmdId) if(result.code !== 200) { alert.show(result.msg) return } delete mapCmdModel[cmdId] cmdModel.remove(row) removeArr(cmdSorts, cmdId) } function onDeleteLstClick(cmdLstId) { var result = backend_proxy.del_queue(cmdLstId) if(result.code !== 200) { alert.show(result.msg) } get_queues() } function onSignalInserLstClick(cmdId) { var cmd_sets = [] cmd_sets.push({"id":cmdId,"delay":"0","loop":"1"} ) var cmdobj = get_cmd_set(cmdId) if(!!cmdobj) { _editlst.cmdLstmodel.append({'name':cmdobj.name, 'loop': '1', 'cmdId': cmdId.toString(), 'delay': '0'}) } } function onInserLstClick() { var cmd_sets = [] for(var i = 0 ; i < cmdModel.count; ++i) { if(cmdModel.get(i).checked) { var cmdId = cmdModel.get(i).id.toString() cmd_sets.push({"id":cmdId,"delay":"0","loop":"1"} ) var cmdobj = get_cmd_set(cmdId) if(!!cmdobj) { _editlst.cmdLstmodel.append({'name':cmdobj.name, 'loop': '1', 'cmdId': cmdId, 'delay': '0'}) } } } if( _cbCmdSelectAll.checked) _cbCmdSelectAll.checked= false else checkSelectAll(false) } function onCmdLstCreateClick() // 按钮创建 { cmdSets = [] _createLstDialog.visible = true } function onCreateLstDialogAcceptClick() { var queue = { 'name': _tfLstName.text, 'operator': g_session.id, 'remark': _tfLstRemark.text, 'cmd_sets': JSON.stringify(cmdSets) } cmdSets = [] var result = backend_proxy.create_queue(JSON.stringify(queue)) if(result.code !== 200) { alert.show(result.msg) return } _tfLstName.text = "" _tfLstRemark.text = "" get_queues() } function onCmdLstBackClick() { editingLst = false } function onCmdLstEditClick(model) { if(lstRunning) return _editlst._tfLstName.text = model.name _editlst._tfLstLoop.text = model.repeat_nums _editlst._tfLstDelay.text = model.queue_delay _editlst._tfLstRemark.text = model.remark var cmd_sets = JSON.parse(model.cmd_sets) _editlst.cmdLstmodel.clear() for(var i = 0 ; i < cmd_sets.length; ++i) { var cmdSet = cmd_sets[i] var cmdId = cmdSet.id.toString() var cmdobj = get_cmd_set(cmdId) if(!!cmdobj) { _editlst.cmdLstmodel.append({"name":cmdobj.name, "loop": !!cmdSet.loop ? cmdSet.loop : 1, "cmdId": cmdId, "delay": !!cmdSet.delay ? cmdSet.delay: 0}) } } } function onCmdLstSaveClick(cmdLstId) { var cmd_sets = [] for(var i = 0; i < _editlst.cmdLstmodel.count; ++i) { var item = _editlst.cmdLstmodel.get(i) cmd_sets.push({"id":item.cmdId, "delay": item.delay, "loop": item.loop}) } var queue = { 'id':cmdLstId, 'name': _editlst._tfLstName.text, 'repeat_nums': _editlst._tfLstLoop.text, 'queue_delay':_editlst._tfLstDelay.text, 'operator': g_session.id, 'remark': _editlst._tfLstRemark.text, 'cmd_sets': JSON.stringify(cmd_sets) } var result = backend_proxy.update_queue(JSON.stringify(queue)) if(result.code !== 200) { alert.show(result.msg) return } editingLst = false get_queues() } function onCmdCreateClick() { _cbCmdInstrument.currentIndex = 0 _cbCmdModule.currentIndex = 0 _cbCmdType.currentIndex = 0 _cbEncode.currentIndex = 0 _cbDecode.currentIndex = 0 _sendCheck.currentIndex = 0 _receiveCheck.currentIndex = 0 curCmdId = "" _tfCmdName.text = "" _tfCmdWord.text = "" _teCmdData._te.text = "" _tfYdcd.text = "0" _tfCs.text = "1000" _tfYmsm.text = "" jsText = Qt.atob(GL.aJsText) _createCmdDialog.title = "创建指令" _createCmdDialog.visible = true } function onRunCmdClick(cmdId) { if(!comIsOpen ) { alert.show("请打开串口") return } if(lstRunning) { alert.show("队列正在运行") return } var result = backend_proxy.send_cmd_set(cmdId, g_curPro.id, g_session.id, "") if(result.code !== 200) { alert.show(result.msg) } } function onRunLstCmdClick(row) { if(!comIsOpen ) { alert.show("请打开串口") return } if(lstRunning) { alert.show("队列正在运行") return } var result = backend_proxy.send_queue(cmdLstModel.get( row ).id, g_curPro.id, g_session.id) if(result.code !== 200) { lstRunning = false alert.show(result.msg) } else { lstRunning = true cmdLstModel.get( row ).status = "1" } } function onRunStopLstCmdClick(row) { if(!comIsOpen) return var model = cmdLstModel.get( row ) var result = backend_proxy.stop_queue(model.id, g_curPro.id, g_session.id) if(result.code !== 200) { lstRunning = true alert.show(result.msg) } else { lstRunning = false cmdLstModel.get( row ).status = "0" } } function onCmdEditClick(cmdId) { if(lstRunning) return var model = get_cmd_set(cmdId) _cbCmdInstrument.currentIndex = !!model['instrument'] ? _cbCmdInstrument.find(model['instrument']) : 0 _cbCmdModule.currentIndex = !!model['module'] ? _cbCmdModule.find(model['module']) : 0 _cbCmdType.currentIndex = !!model['type'] ? _cbCmdType.find(model['type']) : 0 var _cbEncodeText = !!model['data_encode'] ? model['data_encode'] : "" _cbEncode.currentIndex = getIndex(codec_lists, _cbEncodeText) var _cbDecodeText = !!model['rsp_decode'] ? model['rsp_decode'] : "" _cbDecode.currentIndex = getIndex(codec_lists, _cbDecodeText) var _sendCheckText = !!model['data_check'] ? model['data_check'] : "" _sendCheck.currentIndex = getIndex(check_lists, _sendCheckText) var _receiveCheckText = !!model['rsp_check'] ? model['rsp_check'] : "" _receiveCheck.currentIndex = getIndex(check_lists, _receiveCheckText) curCmdId = !!model['id'] ? model['id'] : "" _tfCmdName.text = !!model['name'] ? model['name'] : "" _tfCmdWord.text = !!model['cmd'] ? model['cmd'] : "" _teCmdData._te.text = !!model['data'] ? model['data'] : "" _tfYdcd.text = !!model['rsp_len'] ? model['rsp_len'] : "" _tfCs.text = !!model['rsp_timeout'] ? model['rsp_timeout'] : "" _tfYmsm.text = !!model['remark'] ? model['remark'] : "" var aJsText = !!model['script'] ? model['script'] : GL.aJsText jsText = Qt.atob(aJsText) _createCmdDialog.title = "编辑指令" _createCmdDialog.visible = true } function onCreateCmdDialogAcceptClick() { var obj = { 'instrument':_cbCmdInstrument.currentText, 'module': _cbCmdModule.currentText, 'type': _cbCmdType.currentText, 'name': _tfCmdName.text, 'cmd': _tfCmdWord.text, 'data': _teCmdData._te.text, 'rsp_len': _tfYdcd.text, 'rsp_timeout': _tfCs.text, 'data_encode': codec_lists[_cbEncode.currentIndex], 'rsp_decode': codec_lists[_cbDecode.currentIndex], 'data_check': check_lists[_sendCheck.currentIndex], 'rsp_check': check_lists[_receiveCheck.currentIndex], 'script': Qt.btoa(jsText), 'remark': _tfYmsm.text } var result = "" if(_createCmdDialog.title == "编辑指令") { obj.id = curCmdId result = backend_proxy.update_cmd_set(JSON.stringify(obj)) if(result.code === 200) { cmdModel.set(_cmdTableView.currentRow , obj) mapCmdModel[obj.id] = obj } else { alert.show(result.msg) } return } result = backend_proxy.add_cmd_set(JSON.stringify(obj)) if(result.code === 200) { obj = result.data mapCmdModel[obj.id] = obj cmdModel.append(obj) cmdSorts.push(obj.id) } else { alert.show(result.msg) } } } function refreshData() { get_cmd_sets() get_queues() } function clearCmdDlgData() { _cbCmdInstrument.currentIndex = 0 _cbCmdModule.currentIndex = 0 _cbCmdType.currentIndex = 0 _cbEncode.currentIndex = 0 _cbDecode.currentIndex = 0 _sendCheck.currentIndex = 0 _receiveCheck.currentIndex = 0 curCmdId = "" _tfCmdName.text = "" _tfCmdWord.text = "" _teCmdData._te.text = "" _tfYdcd.text = "" _tfCs.text = "" _tfYmsm.text = "" _createCmdDialog.title = "" } function get_queues() { var result = backend_proxy.get_queues() if(result.code === 200) { cmdLstModel.clear() result.data.forEach(function(item){ if(item.name.indexOf(planFirstName) === -1) { item.status = "0" item.date = "" item.operator_name = "" item.repeat_nums = !!item.repeat_nums ? item.repeat_nums.toString() : "1" item.queue_delay = !!item.queue_delay ? item.queue_delay.toString() : "0" cmdLstModel.append(item) } }) _cmdLstTableView.currentRow = _cmdLstTableView.currentRow } else { alert.show(result.msg) } } function get_cmd_sets_forType(type) { cmdModel.clear() cmdSorts.forEach(function(id){ if(!!mapCmdModel[id]) { if(type === "全部") { cmdModel.append(mapCmdModel[id]) } else { if(mapCmdModel[id].type === type) cmdModel.append(mapCmdModel[id]) } } }) } function insertArr(arr, oldId, newId) { for(var i = 0; i < arr.length; ++i) { if(arr[i] === oldId) { arr.splice(i+1,0, newId) return } } } function removeArr(arr, cmdId) { for(var i = 0; i < arr.length; ++i) { if(arr[i] == cmdId) { arr.splice(i,1) return } } } property var mapCmdModel: ({}) function get_cmd_sets() { var result = backend_proxy.get_cmd_sets() if(result.code === 200) { cmdModel.clear() mapCmdModel = {} if(result.data.length-1 === cmdSorts.length) // 排除id=1001 必须-1 { result.data.forEach(function(item){ item.checked = false if(item.id != planCmdId) { var obj = {} obj.checked = item.checked obj.id = !!item.id ? item.id : "" obj.type = !!item.type ? item.type : "" obj.name = !!item.name ? item.name : "" obj.remark = !!item.remark ? item.remark : "" mapCmdModel[obj.id] = obj // 存入map 用于筛选和排序 } }) cmdSorts.forEach(function(id){ if(!!mapCmdModel[id]) cmdModel.append(mapCmdModel[id]) }) } else { result.data.forEach(function(item){ item.checked = false if(item.id != planCmdId) { var obj = {} obj.checked = item.checked obj.id = !!item.id ? item.id : "" obj.type = !!item.type ? item.type : "" obj.name = !!item.name ? item.name : "" obj.remark = !!item.remark ? item.remark : "" mapCmdModel[obj.id] = obj // 存入map 用于筛选和排序 cmdModel.append(obj) } }) updateSorts() } if( _cmdTableView.currentRow > -1) _cmdTableView.currentRow = _cmdTableView.currentRow } else { alert.show(result.msg) } } // 退出时关闭队列 function stopLstCmd() { if(!comIsOpen) return var row = _cmdLstTableView.currentRow var model = cmdLstModel.get(row) var result = backend_proxy.stop_queue(model.id, g_curPro.id, g_session.id) if(result.code !== 200) { lstRunning = true alert.show(result.msg) } else { lstRunning = false cmdLstModel.get( row ).status = "0" } } function get_cmd_set(cmdId) { var result = backend_proxy.get_cmd_set(cmdId) if(result.code === 200) { return result.data } else { alert.show(result.msg) } return null } // 格式化日对象 function getNowDate () { var date = new Date(); var sign2 = ":"; var year = date.getFullYear() // 年 var month = date.getMonth() + 1; // 月 var day = date.getDate(); // 日 var hour = date.getHours(); // 时 var minutes = date.getMinutes(); // 分 var seconds = date.getSeconds() //秒 var weekArr = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天']; var week = weekArr[date.getDay()]; // 给一位数的数据前面加 “0” if (month >= 1 && month <= 9) { month = "0" + month; } if (day >= 0 && day <= 9) { day = "0" + day; } if (hour >= 0 && hour <= 9) { hour = "0" + hour; } if (minutes >= 0 && minutes <= 9) { minutes = "0" + minutes; } if (seconds >= 0 && seconds <= 9) { seconds = "0" + seconds; } return year + "-" + month + "-" + day + " " + hour + sign2 + minutes + sign2 + seconds; } function hasCheck() { for(var i = 0 ; i < cmdModel.count; ++i) { if ( cmdModel.get(i).checked ) return true } return false } }