TG-PlatformPlus/qml/Command.qml

655 lines
20 KiB
QML

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
}
}