123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915 |
- import QtQuick 2.15
- import QtQuick.Layouts 1.3
- import QtQuick.Controls 1.2
- import QtQuick.Controls.Styles 1.4
- import Qt.labs.qmlmodels 1.0
- import QtQuick.LocalStorage 2.0
- //import io.qt.DataBaseModel 1.0
- import Qt.labs.platform 1.1
- import TService 1.0
- import "selftest_db.js" as SelfDB
- Item {
- id: selftest_root
- property string title_str:"系统自测"
- property string background: "#d7e3bc"
- property string alterBackground: "white"
- property string highlight: "#e4f7d6"
- property string headerBkgnd: "#F0F0F0"
- property var allArray: []
- //property string state
- property string pressure:"0.00"
- property int pressureCnt:0
- property int current_step:0
- property int test_direction:0
- property bool bStart: false
- property real m_maxY: 0.0
- property real m_minY: 0.0
- property string report_record_str:"null"
- property string test_state_str:"未开始"
- property string test_result_str:"未知"
- //var selftest_info = new Object
- property var normalG: Gradient {
- GradientStop { position: 0.0; color: "#c7d3ac" }
- GradientStop { position: 1.0; color: "#F0F0F0" }
- }
- property var hoverG: Gradient {
- GradientStop { position: 0.0; color: "white"; }
- GradientStop { position: 1.0; color: "#d7e3bc"; }
- }
- property var pressG: Gradient {
- GradientStop { position: 0.0; color: "#d7e3bc"; }
- GradientStop { position: 1.0; color: "white"; }
- }
- function qmlProcessState(id, str1, str2){
- if(id === 0){
- test_state_str = str1
- }
- }
- function qmlProcessResult(id, str, bPassed){
- if(id === 0){
- if(bPassed){
- test_result_str = "合格"
- }else{
- test_result_str = "超标"
- }
- var selftest_info = new Object
- var jsontmp = testService.get_selftest_info()
- selftest_info.target = jsontmp.target
- selftest_info.interval = jsontmp.interval
- selftest_info.threshold = jsontmp.threshold
- selftest_info.begin = jsontmp.begin
- selftest_info.end = jsontmp.end
- selftest_info.delta = jsontmp.delta
- selftest_info.passed = jsontmp.pass
- //pagetest.show_selftestDetail(str)
- }
- }
- function qmlProcessStop(id){
- if(id === 0){
- //pagetest.selftestStop()
- startStopButton.running = false;
- database_add()
- tableview_refresh()
- //console.log("qmlProcessStop pagetest ",id )
- }
- }
- function database_add(){
- //var record = new Object
- //record.target = selftest_info.target
- //record.interval = selftest_info.interval
- //record.threshold = selftest_info.threshold
- //record.begin = selftest_info.begin
- //record.end = selftest_info.end
- //record.passed = selftest_info.passed
- var selftest_info = new Object
- var jsontmp = testService.get_selftest_info()
- selftest_info.target = jsontmp.target
- selftest_info.interval = jsontmp.interval
- selftest_info.threshold = jsontmp.threshold
- selftest_info.begin = jsontmp.begin
- selftest_info.end = jsontmp.end
- selftest_info.delta = jsontmp.delta
- selftest_info.passed = jsontmp.passed
- SelfDB.insertRecord(selftest_info)
- SelfDB.insertData(allArray)
- }
- function curveDisplay_refresh(date){
- curveDisplay.spline.clear()
- curveDisplay.scatter_clear()
- curveDisplay.setRange_X(0, 180)
- curveDisplay.setRange_Y(0, 14)
- pressureCnt =0
- current_step = 0;
- let table_name = 'data_'+date
- var records = SelfDB.readData(table_name)
- if(records){
- if(records.rows.length > 0){
- var index = 0
- while(index < records.rows.length){
- var item = records.rows.item(index)
- curveDisplay_show(item)
- index++;
- }
- }
- }else{
- console.log("tableview_refresh records is null:" )
- }
- }
- function tableview_refresh(){
- selttest_Model.clear()
- var records = SelfDB.readData("test_table")
- if(records){
- console.log("tableview_refresh records.rows.length:"+records.rows.length )
- if(records.rows.length > 0){
- var index = records.rows.length-1
- var tmp_id = 0;
- while(index >= 0){
- var item = records.rows.item(index)
- /*
- selttest_Model.append({
- "idx":tmp_id,
- "date":item.dt,
- "time":item.time,
- "target":item.target.toString(),
- "interval":item.interval.toString(),
- "threshold":item.threshold.toString(),
- "start":item.begin.toString(),
- "end":item.end.toString(),
- "delta":item.delta.toString(),
- "result":item.passed === 1? "合格":"超标" })
- */
- selttest_Model.append({
- "idx":tmp_id,
- "date":item.dt,
- "time":item.time,
- //"target":item.target,
- "interval":item.interval,
- "threshold":item.threshold,
- "start":item.begin,
- "end":item.end,
- "delta":item.delta.toFixed(2),
- //"delta":item.delta,
- "result":item.passed === 1? "合格":"超标" })
- index--
- tmp_id++
- }
- }
- }else{
- console.log("tableview_refresh records is null:" )
- }
- }
- function qmlProcessReportProgress_self(str){
- console.log("main.qml tservice qmlProcessReportProgress:", str )
- if(str === "close"){
- genreportprogress_self.exit()
- }else{
- genreportprogress_self.show(str)
- }
- }
- function qmlProcessPressure(id, map){
- //console.log("main.qml qmlProcessPressure ",id )
- //log.show2(str)
- //var textstring = ''
- //var varmap = map
- //textstring += map.pressure+":"
- //textstring += map.direction.toString()+":"
- //textstring += map.stage.toString()+":"
- //textstring += map.step.toString()+":"
- //console.log("main.qml qmlProcessPressure :",textstring.toString() )
- if(id === 0){
- pressure = map.pressure
- //pressureDisplayInput(Number(pressure_map.pressure))
- var data = new Object
- data.step = map.step
- data.pressure = Number(map.pressure)
- curveDisplay_show(data)
- allArray.push(data)
- }
- }
- function curveDisplay_show(value){
- pressureCnt++
- var number = value.pressure
- m_maxY = (m_maxY < number)? number:m_maxY
- m_minY = (m_minY > number)? number:m_minY
- curveDisplay.setRange_Y(m_minY-1.0, m_maxY+2.0)
- if(pressureCnt <= 180){
- curveDisplay.spline.append(pressureCnt-1,number)
- }
- else{
- curveDisplay.setRange_X(0, pressureCnt-1)
- curveDisplay.spline.append(pressureCnt-1,number)
- }
- if(current_step !== value.step){
- if(2 == current_step){
- curveDisplay.scatter_add(pressureCnt-1,number)
- }
- current_step = value.step
- if(2 == current_step){
- curveDisplay.scatter_add(pressureCnt-1,number)
- }
- }
- }
- function cleardata(){
- allArray = []
- curveDisplay.spline.clear()
- pressureCnt =0
- current_step=0
- curveDisplay.scatter_clear()
- curveDisplay.setRange_X(0, 180)
- curveDisplay.setRange_Y(0, 14)
- pressure = "0.00"
- test_state_str="未开始"
- test_result_str="未知"
- }
- function pad_with_zeroes(number, length) {
- var my_string = '' + number;
- while (my_string.length < length) {
- my_string = '0' + my_string;
- }
- return my_string;
- }
- function getWordSaveFileName( para){
- var date = new Date;
- var year = date.getFullYear()
- var month = pad_with_zeroes(date.getMonth()+1,2)
- var day = pad_with_zeroes(date.getDate(),2)
- var hour = pad_with_zeroes(date.getHours(),2)
- var minute = pad_with_zeroes(date.getMinutes(),2)
- var second = pad_with_zeroes(date.getSeconds(),2)
- var time = year+month+day+hour+minute+second
- return "file:///"+time+"_"+para
- }
- DynamicGroupBox{
- id:groupbox_all
- anchors.centerIn: parent
- anchors.fill: parent
- title: title_str
- Column{
- anchors.left: parent.left
- anchors.leftMargin: 3
- anchors.top: parent.top
- anchors.topMargin: 10
- spacing: 0
- FileDialog {
- id: saveWordDialog
- title: "保存为"
- //nameFilters: [ "Word files (*.doc)"]
- //nameFilters: [ "Word files (*.doc)", "Text files (*.pdf)"]
- nameFilters: ["Text files (*.pdf)"]
- fileMode: FileDialog.SaveFile
- onAccepted: {
- var fileName = "D:/tmp/selftest.jpg"
- rect_display.grabToImage(function(result) {
- result.saveToFile(fileName);
- });
- var savePath = file.toString().substring(8)
- console.log("saveWordDialog savePath:")
- console.log(savePath)
- if("null" == report_record_str){
- testService.genReport_Self(savePath, "D:/tmp/")
- }else{
- testService.genReport_Self2(report_record_str, savePath, "D:/tmp/")
- }
- //reportWord.generateBreatheValveWord(savePath,para,obj1,obj2,obj3)
- // testService.genReport(savePath, "D:/tmp/")
- }
- }
- Row{
- //x:-10
- y:-10
- //width: 900
- //height: parent.height
- Rectangle{
- id:rect_display
- //anchors.verticalCenter: parent.verticalCenter
- width: 900
- height: 460
- CurveDisplay{
- id:curveDisplay
- anchors.fill: parent
- axisxMax:180
- axisxMin:0
- axisyMax:14
- axisyMin:0
- name:"横轴时间(秒) 纵轴压力(kPa)"
- }
- }
- Item {
- id:button_root
- width: 360
- height: 460
- Column{
- id:button_column
- spacing: 10
- Rectangle{
- id:buttonWindow
- //anchors.fill: parent
- width: 350
- height: 70
- color: "white"
- radius: 6
- border.color: "black"
- Row{
- anchors.verticalCenter: parent.verticalCenter
- anchors.horizontalCenter: parent.horizontalCenter
- spacing: 50
- StartStopButton{
- id:startStopButton
- width: 50
- height: 50
- anchors.verticalCenter: parent.verticalCenter
- onRunningChanged: {
- if(running){
- //clearCurveDisplay()
- cleardata()
- bStart = testService.tstart(0, 0)
- if(!bStart){
- running=false;
- }
- }else{
- if(bStart){
- testService.tstop(0)
- bStart=false
- }
- }
- }
- }
- ReportButton{
- id:reportButton
- width: 50
- height: 50
- anchors.verticalCenter: parent.verticalCenter
- onUserClicked:{
- //database_add()
- //tableview_refresh()
- if(false == startStopButton.running){
- //var fileName = "D:/tmp/selftest.jpg"
- //rect_display.grabToImage(function(result) {
- // result.saveToFile(fileName);
- //});
- var date = new Date;
- var year = date.getFullYear()
- var month = pad_with_zeroes(date.getMonth()+1,2)
- var day = pad_with_zeroes(date.getDate(),2)
- var time = year+month+day
- saveWordDialog.currentFile = "file:///"+time+"_VRST2000"
- report_record_str = "null"
- saveWordDialog.open()
- }
- }
- }
- ReturnButton{
- id: return_button
- width: 50
- height: 50
- anchors.verticalCenter: parent.verticalCenter
- onUserClicked: {
- if(false == startStopButton.running){
- selftest_root.destroy()
- }
- }
- }
- }
- }
- Rectangle{
- id:test_selrect
- //anchors.fill: parent
- anchors.margins: 10
- width: 350
- height: 50
- color: "white"
- radius: 6
- border.color: "black"
- UserComboBox{
- id:test_comboBox
- //anchors.fill:parent
- implicitWidth:350
- implicitHeight:50
- bgColor:"#D2D5D9"
- model: ["正压系统自测","负压系统自测"]
- onCurrentTextChanged: {
- //root.standard_name = currentText
- test_direction = currentIndex
- console.log("choose test direction : "+test_direction)
- }
- }
- }
- Rectangle{
- id:pressureWindow
- //anchors.fill: parent
- anchors.margins: 10
- width: 350
- height: 100
- color: "white"
- radius: 6
- border.color: "black"
- Text {
- id: pressurekpa
- anchors.right: pressureWindow.right
- anchors.verticalCenter: parent.verticalCenter
- text: qsTr("kPa ")
- //font: 40
- font.bold: true
- font.pixelSize: 35
- }
- Rectangle{
- id:pressure_rect
- anchors.verticalCenter: parent.verticalCenter
- anchors.right: pressurekpa.left;
- width: 250
- height: 80
- LCDNumber{
- id:lcd_pressure
- anchors.centerIn: parent
- text: selftest_root.pressure
- }
- }
- }
- Rectangle{
- id:resultWindow
- //anchors.fill: parent
- anchors.margins: 5
- width: 350
- height: 80
- color: "white"
- radius: 6
- border.color: "black"
- Column{
- anchors.margins: 10
- anchors.fill: parent
- spacing: 5
- ResultDisplayText{
- id: result_title
- width: parent.width
- height: 25
- color: "white"
- //paraName_fontColor:"red"
- paraName: "自身密闭性检测:"
- paraResult:""
- paraUnit:""
- }
- ResultDisplayText{
- id:result_dis
- width: parent.width
- height: 25
- color: "#D2D5D9"
- paraName_fontColor:"green"
- paraName: "检测结果:"
- paraResult_fontColor:"#272727"
- paraResult:test_result_str
- paraUnit:""
- }
- }
- }
- Rectangle{
- id:progressWindow
- //anchors.fill: parent
- anchors.margins: 5
- width: 350
- height: 110
- color: "white"
- radius: 6
- border.color: "black"
- Column{
- anchors.margins: 10
- anchors.fill: parent
- spacing: 5
- ResultDisplayText{
- id: state_title
- width: parent.width
- height: 25
- color: "white"
- //paraName_fontColor:"red"
- paraName: "检测进度:"
- paraResult:""
- paraUnit:""
- }
- /*
- TNormalProgress {
- id:test_progress
- width: parent.width
- backgroundColor: "#D2D5D9"
- //barType: TNormalProgress.BarType.SucceedOrFailed
- percent: 100
- //NumberAnimation on percent { from: 0; to: 100; duration: 5000; running: true; loops: Animation.Infinite}
- }
- */
- ResultDisplayText{
- id:state_dis
- width: parent.width
- height: 25
- color: "#D2D5D9"
- paraName_fontColor:"green"
- paraName: "检测状态:"
- paraResult_fontColor:"#272727"
- paraResult:test_state_str
- paraUnit:""
- }
- }
- }
- }
- }
- }
- Rectangle{
- id:records_rect
- //x:-10
- width: 1250
- height: 240
- color: "white"
- radius: 6
- border.color: "black"
- Text{
- id:text_title
- anchors.top: parent.top
- anchors.topMargin: 10
- anchors.horizontalCenter: parent.horizontalCenter
- font.bold: true
- font.pixelSize: 24
- text: "系统自测历史记录"
- }
- Component{
- id:itemDelegateText
- Text {
- anchors.verticalCenter: parent.verticalCenter
- color: styleData.selected?"#1E90FF":"#000000"
- elide: styleData.elideMode
- text: styleData.value
- font.pointSize: 10
- //font.pixelSize: 24
- //font.bold: true
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- anchors.fill: parent
- }
- }
- Component{
- id:itemDelegateButton
- Row{
- anchors.fill: parent
- anchors.centerIn: parent
- spacing: 10
- Button {
- anchors.verticalCenter: parent.verticalCenter
- //color: styleData.selected?"#1E90FF":"#000000"
- //elide: styleData.elideMode
- //anchors.centerIn: parent
- text: "报告"
- width: 60
- onClicked: {
- console.log("index ==="+styleData.row);
- console.log("tableView.currentRow ==="+tableView.currentRow);
- console.log("select date:"+selttest_Model.get(styleData.row).date);
- var today = new Date(selttest_Model.get(styleData.row).date);
- var DD = String(today.getDate()).padStart(2, '0'); // 获取日
- var MM = String(today.getMonth()+1).padStart(2, '0'); //获取月份,1 月为 0
- var yyyy = today.getFullYear(); // 获取年
- let date = yyyy + MM + DD;
- curveDisplay_refresh(date)
- //var fileName = "D:/tmp/selftest.jpg"
- //rect_display.grabToImage(function(result) {
- // result.saveToFile(fileName);
- //});
- //生成测试结果 JSON 字符串
- var recordJson={}
- //recordJson.target = Number(selttest_Model.get(styleData.row).target)
- recordJson.interval = Number(selttest_Model.get(styleData.row).interval)
- recordJson.threshold = Number(selttest_Model.get(styleData.row).threshold)
- recordJson.begin = Number(selttest_Model.get(styleData.row).start)
- recordJson.end = Number(selttest_Model.get(styleData.row).end)
- recordJson.delta = Number(selttest_Model.get(styleData.row).delta)
- if("合格" === selttest_Model.get(styleData.row).result){
- recordJson.passed = 1
- }else{
- recordJson.passed = 0
- }
- report_record_str = JSON.stringify(recordJson)
- saveWordDialog.currentFile = "file:///"+date+"_VRST2000"
- saveWordDialog.open()
- }
- }
- Button {
- anchors.verticalCenter: parent.verticalCenter
- //color: styleData.selected?"#1E90FF":"#000000"
- //elide: styleData.elideMode
- //anchors.centerIn: parent
- text: "删除"
- width: 60
- onClicked: {
- //curveDisplay.spline.clear()
- // pressureCnt =0
- SelfDB.deleteRecord(selttest_Model.get(styleData.row).date)
- tableview_refresh()
- }
- }
- }
- }
- TableView{
- id:tableView
- //frameVisible: true
- width: parent.width
- focus: true
- //height: parent.height - 50
- anchors.top: text_title.bottom
- anchors.bottom: parent.bottom
- anchors.topMargin: 10
- TableViewColumn{role: "idx"; title: "ID"; width: 40;delegate: itemDelegateText}
- TableViewColumn{role: "date"; title: "自检日期"; width: 120;delegate: itemDelegateText}
- TableViewColumn{role: "time"; title: "完成时间"; width: 120;delegate: itemDelegateText}
- //TableViewColumn{role: "target"; title: "目标压力(kPa)"; width: 120;delegate: itemDelegateText}
- TableViewColumn{role: "interval"; title: "检测时间(秒)"; width: 120;delegate: itemDelegateText}
- TableViewColumn{role: "threshold"; title: "变化限值(kPa)"; width: 120;delegate: itemDelegateText}
- TableViewColumn{role: "start"; title: "开始压力(kPa)"; width: 120;delegate: itemDelegateText}
- TableViewColumn{role: "end"; title: "结束压力(kPa)"; width: 120;delegate: itemDelegateText}
- TableViewColumn{role: "delta"; title: "压力变化(kPa)"; width: 120;delegate: itemDelegateText}
- TableViewColumn{role: "result"; title: "自测结果"; width: 80;delegate: itemDelegateText}
- TableViewColumn{role: "detail"; title: "操作"; width: 130;delegate: itemDelegateButton}
- //model: modelItems
- headerDelegate: Rectangle{
- implicitWidth: 16
- implicitHeight: 24
- gradient: styleData.pressed ? selftest_root.pressG : (styleData.containsMouse ? selftest_root.hoverG: selftest_root.normalG)
- border.color: "gray"
- border.width: 1
- Text{
- anchors.verticalCenter: parent.verticalCenter
- anchors.left: parent.left
- anchors.leftMargin: 4
- anchors.right: parent.right
- anchors.rightMargin: 4
- text: styleData.value
- color: styleData.pressed ?"red" : "blue"
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- font.bold: true
- }
- }
- rowDelegate: Rectangle{
- height: 28
- //border.color: "gray"
- //color: styleData.selected?"#f0b0b0af":(styleData.alternate?"#c3c3c0":"#c0c0c3")
- color: styleData.selected ? selftest_root.highlight : selftest_root.alterBackground
- }
- itemDelegate: Rectangle {
- height: 24
- //border.color: "gray"
- color: "transparent"
- Text {
- //anchors.centerIn: parent
- //anchors.left: parent.left
- anchors.leftMargin: 6
- anchors.verticalCenter: parent.verticalCenter
- //color: styleData.textColor
- color: styleData.selected ? "red" : styleData.textColor
- text: styleData.value
- verticalAlignment: Text.AlignVCenter
- font.pointSize: 13
- }
- }
- onClicked:{
- console.log("onClicked index ==="+ row);
- console.log("select date:"+selttest_Model.get(row).date);
- var today = new Date(selttest_Model.get(row).date);
- var DD = String(today.getDate()).padStart(2, '0'); // 获取日
- var MM = String(today.getMonth()+1).padStart(2, '0'); //获取月份,1 月为 0
- var yyyy = today.getFullYear(); // 获取年
- let date = yyyy + MM + DD;
- curveDisplay_refresh(date)
- }
- model:ListModel{
- id: selttest_Model
- }
- }
- }
- }
- }
- Log{
- id:genreportprogress_self
- z:30
- width: 300
- height: 50
- //anchors.centerIn: parent
- anchors.top: parent.top
- anchors.topMargin: 100
- anchors.left: parent.left
- anchors.leftMargin: 480
- }
- Component.onCompleted: {
- testService.sigPressure.connect(qmlProcessPressure);
- testService.sigState.connect(qmlProcessState);
- //testService.sigSystemResult.connect(qmlProcessSystemResult);
- //testService.sigValveResult.connect(qmlProcessValveResult);
- testService.sigSelfTestResult.connect(qmlProcessResult);
- testService.onGenreportProgress.connect(qmlProcessReportProgress_self);
- testService.sigStop.connect(qmlProcessStop);
- SelfDB.initDatabase()
- tableview_refresh()
- }
- }
- /*##^##
- Designer {
- D{i:0;autoSize:true;height:480;width:640}
- }
- ##^##*/
|