Browse Source

V1.4
1、完成了剩余的内容

apple 2 weeks ago
parent
commit
55c0955cc0

+ 100 - 0
TransmitterSwitch/Resource/QSS/dark/previewplan.qss

@@ -0,0 +1,100 @@
+QWidget
+{
+    font-size: 14px;
+    color: #D2D2D2;
+    line-height: 21px;
+    text-align: left;
+    font-style: normal;
+}
+
+QWidget#widget
+{
+    background: #464649;
+    border-radius: 8px 8px 8px 8px;
+}
+
+QWidget#widget_Top
+{
+    background: transparent;
+    border-top-left-radius: 8px;
+    border-top-right-radius: 8px;
+    border-bottom-left-radius: 0px;
+    border-bottom-right-radius: 0px;
+
+    border-bottom: 1px solid rgba(255,255,255,0.15);
+}
+
+QLabel#label_title
+{
+    font-weight: 500;
+    font-size: 18px;
+    color: #D2D2D2;
+    line-height: 24px;
+    text-align: left;
+    font-style: normal;
+    text-transform: none;
+}
+
+
+QPushButton#pBtn_close
+{
+	/* border-image: url(:/ICON/ICON/Dialog_close.png); */
+    background: transparent;
+    border-radius: 4px;
+    qproperty-icon: url(:/ICON/ICON/Close_Dark.png);
+    qproperty-iconSize: 20px 20px;
+
+    text-align: center;
+}
+
+QPushButton#pBtn_close[Hover = true]
+{	
+	/* border-image: url(:/ICON/ICON/Dialog_close2.png); */
+    background: transparent;
+    border-radius: 4px;
+    qproperty-icon: url(:/ICON/ICON/Close_pass.png);
+    qproperty-iconSize: 20px 20px;
+    text-align: center;
+    border: 1px solid #438EFF;
+}
+
+
+
+/********* 普通方框按钮三种状态效果 *********/
+QPushButton#pBtn_cancel:enabled
+{
+    text-align: center;
+    color: #EBEBEB;
+    border: 1px solid rgba(255,255,255,0.25);
+    border-radius: 16px;
+    background: transparent;
+}
+QPushButton#pBtn_cancel:hover
+{
+    text-align: center;
+    color: #EBEBEB;
+    border: 1px solid rgba(255,255,255,0.25);
+    border-radius: 16px;
+    background: rgba(0,0,0,0.15);
+}
+
+
+/********* 带有底色按钮三种状态效果 *********/
+QPushButton#pBtn_ok
+{
+	border-radius: 16px;
+	text-align: center;
+    color:white;
+    background: #438EFF;
+    border-radius: 16px;
+}
+
+QPushButton#pBtn_ok:hover
+{
+	border-radius: 16px;
+	text-align: center;
+    color:white;
+    background: #5F9EFF;
+    border-radius: 16px;
+}
+

+ 1 - 0
TransmitterSwitch/Resource/TransSwitch.qrc

@@ -27,6 +27,7 @@
         <file>QSS/dark/managerplan.qss</file>
         <file>QSS/dark/copytoother.qss</file>
         <file>QSS/dark/templatemanager.qss</file>
+        <file>QSS/dark/previewplan.qss</file>
     </qresource>
     <qresource prefix="/ICON">
         <file>Tip/Complete2x.png</file>

+ 151 - 0
TransmitterSwitch/Template/previewplan.cpp

@@ -0,0 +1,151 @@
+#include "previewplan.h"
+#include "ui_previewplan.h"
+
+#include <QDebug>
+#include <QPoint>
+#include <QTableWidgetItem>
+#include <QFile>
+#include <QPainter>
+#include <QMouseEvent>
+
+#include "LHQLogAPI.h"
+#include "OneShadowEffect.h"
+#include "TransmitterSwitchInfo.h"
+#include "UIStyleManager.h"
+
+
+
+PreviewPlan::PreviewPlan(QWidget *parent) :
+    QDialog(parent),
+    ui(new Ui::PreviewPlan)
+{
+    ui->setupUi(this);
+
+    /* 设置隐藏边框 */
+    this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
+    /* 设置底层样式表 */
+    this->setAttribute(Qt::WA_TranslucentBackground);
+    /* 创建阴影 */
+    QSize size = this->size();
+    size.setWidth(size.width() - 40);
+    size.setHeight(size.height() - 40);
+
+    auto pShadow = new OneShadowEffect(this);
+    this->setGraphicsEffect(pShadow);
+
+    
+
+
+    connect(ui->pBtn_close,SIGNAL(clicked()),this,SLOT(close()));
+    connect(ui->pBtn_ok,SIGNAL(clicked()),this,SLOT(do_ok()));
+
+    /* 注册事件过滤器 */
+    ui->pBtn_close->installEventFilter(this);
+
+}
+
+PreviewPlan::~PreviewPlan()
+{
+    delete ui;
+}
+
+void PreviewPlan::do_ok()
+{
+    m_isOk = true;
+    this->close();
+}
+
+
+
+/* 设置频率信息 */
+void PreviewPlan::setFrequencyInfo(const ChannelInfo& info)
+{
+    ui->pCard->setChannelInfo(info);
+}
+
+/* 设置模版列表 */
+void PreviewPlan::setTemplateList(QList<OnePlanItemInfo> list)
+{
+    ui->pCard->setPlanList(list);
+}
+
+/* 设置QSS */
+void PreviewPlan::setQSSPath(const QString& qssPath)
+{
+    if(qssPath.isEmpty())
+    {
+        return;
+    }
+    QString qssFile = qssPath + "/previewplan.qss";
+    QFile file(qssFile);
+    if(file.open(QFile::ReadOnly))
+    {
+        QString styleSheet = file.readAll();
+        this->setStyleSheet(styleSheet);
+        file.close();
+    }else 
+    {
+        LH_WRITE_ERROR(QString("Open %1 failed").arg(qssFile));
+    }
+}
+
+
+
+
+/* 事件过滤器 */
+bool PreviewPlan::eventFilter(QObject *watched, QEvent *event)
+{
+    if(watched == ui->pBtn_close)
+    {
+        if(event->type() == QEvent::Enter)
+        {
+            ui->pBtn_close->setProperty("Hover", true);
+            ui->pBtn_close->style()->unpolish(ui->pBtn_close);
+            ui->pBtn_close->style()->polish(ui->pBtn_close);
+
+            return true;
+        }else if(event->type() == QEvent::Leave)
+        {
+            ui->pBtn_close->setProperty("Hover", false);
+            ui->pBtn_close->style()->unpolish(ui->pBtn_close);
+            ui->pBtn_close->style()->polish(ui->pBtn_close);
+
+            return true;
+        }
+    }
+    return QWidget::eventFilter(watched,event);
+}
+
+/* 鼠标点击事件 */
+void PreviewPlan::mousePressEvent(QMouseEvent *event)
+{
+    m_lastPos = event->globalPos();
+    event->accept();
+}
+
+/* 鼠标移动事件 */
+void PreviewPlan::mouseMoveEvent(QMouseEvent *event)
+{
+    // QRect rect = this->geometry();
+    // rect.setBottom(rect.top()+50);
+    auto point = ui->widget_Top->mapToGlobal(QPoint(0, 0));
+    QRect rect(point, ui->widget_Top->size());
+
+    if(!rect.contains(m_lastPos))
+    {
+        event->accept();
+        return;
+    }
+
+    int dx = event->globalX() - m_lastPos.x();
+    int dy = event->globalY() - m_lastPos.y();
+    move(x()+dx, y()+dy);
+    m_lastPos = event->globalPos();
+    event->accept();
+}
+
+/* 鼠标释放事件 */
+void PreviewPlan::mouseReleaseEvent(QMouseEvent *event)
+{
+    event->accept();
+}

+ 60 - 0
TransmitterSwitch/Template/previewplan.h

@@ -0,0 +1,60 @@
+#ifndef PREVIEWPLAN_H
+#define PREVIEWPLAN_H
+
+#include "TransmitterSwitchInfo.h"
+#include <QDialog>
+#include <QCheckBox>
+
+class OnePlanItemInfo;
+class OneTemplateInfo;
+
+namespace Ui {
+class PreviewPlan;
+}
+
+class PreviewPlan : public QDialog
+{
+    Q_OBJECT
+
+public:
+    explicit PreviewPlan(QWidget *parent = nullptr);
+    ~PreviewPlan();
+
+    
+    /* 是否点下了OK */
+    bool isOk() const { return m_isOk; }
+
+    /* 设置频率信息 */
+    void setFrequencyInfo(const ChannelInfo& info);
+    /* 设置模版列表 */
+    void setTemplateList(QList<OnePlanItemInfo> list);
+
+    /* 设置QSS */
+    void setQSSPath(const QString& qssPath);
+
+private:
+
+
+private slots:
+    void do_ok();
+
+protected:
+    /* 事件过滤器 */
+    bool eventFilter(QObject *watched, QEvent *event) override;
+    /* 鼠标点击事件 */
+    void mousePressEvent(QMouseEvent *event) override;
+    /* 鼠标移动事件 */
+    void mouseMoveEvent(QMouseEvent *event) override;
+    /* 鼠标释放事件 */
+    void mouseReleaseEvent(QMouseEvent *event) override;
+
+private:
+    Ui::PreviewPlan *ui;
+
+    bool m_isOk = false;                                /* 是否点下了OK */
+
+    QPoint m_lastPos;                                   /* 鼠标点击的位置 */
+
+};
+
+#endif // PREVIEWPLAN_H

+ 226 - 0
TransmitterSwitch/Template/previewplan.ui

@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PreviewPlan</class>
+ <widget class="QDialog" name="PreviewPlan">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>560</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</string>
+  </property>
+  <property name="styleSheet">
+   <string notr="true"/>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="spacing">
+    <number>0</number>
+   </property>
+   <property name="leftMargin">
+    <number>20</number>
+   </property>
+   <property name="topMargin">
+    <number>20</number>
+   </property>
+   <property name="rightMargin">
+    <number>20</number>
+   </property>
+   <property name="bottomMargin">
+    <number>20</number>
+   </property>
+   <item>
+    <widget class="QWidget" name="widget" native="true">
+     <property name="styleSheet">
+      <string notr="true"/>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <property name="spacing">
+       <number>0</number>
+      </property>
+      <property name="leftMargin">
+       <number>0</number>
+      </property>
+      <property name="topMargin">
+       <number>0</number>
+      </property>
+      <property name="rightMargin">
+       <number>0</number>
+      </property>
+      <property name="bottomMargin">
+       <number>32</number>
+      </property>
+      <item>
+       <widget class="QWidget" name="widget_Top" native="true">
+        <property name="minimumSize">
+         <size>
+          <width>0</width>
+          <height>63</height>
+         </size>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>16777215</width>
+          <height>63</height>
+         </size>
+        </property>
+        <layout class="QHBoxLayout" name="horizontalLayout">
+         <property name="spacing">
+          <number>0</number>
+         </property>
+         <property name="leftMargin">
+          <number>32</number>
+         </property>
+         <property name="rightMargin">
+          <number>16</number>
+         </property>
+         <item>
+          <widget class="QLabel" name="label_title">
+           <property name="minimumSize">
+            <size>
+             <width>72</width>
+             <height>24</height>
+            </size>
+           </property>
+           <property name="text">
+            <string>预览</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer name="horizontalSpacer">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>536</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <widget class="QPushButton" name="pBtn_close">
+           <property name="minimumSize">
+            <size>
+             <width>32</width>
+             <height>32</height>
+            </size>
+           </property>
+           <property name="text">
+            <string/>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
+      <item>
+       <widget class="QWidget" name="widget_content" native="true">
+        <property name="minimumSize">
+         <size>
+          <width>0</width>
+          <height>0</height>
+         </size>
+        </property>
+        <layout class="QVBoxLayout" name="verticalLayout_3">
+         <property name="spacing">
+          <number>0</number>
+         </property>
+         <property name="leftMargin">
+          <number>32</number>
+         </property>
+         <property name="topMargin">
+          <number>32</number>
+         </property>
+         <property name="rightMargin">
+          <number>32</number>
+         </property>
+         <property name="bottomMargin">
+          <number>32</number>
+         </property>
+         <item>
+          <widget class="PlanCard" name="pCard" native="true"/>
+         </item>
+        </layout>
+       </widget>
+      </item>
+      <item>
+       <widget class="QWidget" name="widget_bottom" native="true">
+        <property name="minimumSize">
+         <size>
+          <width>0</width>
+          <height>34</height>
+         </size>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>16777215</width>
+          <height>34</height>
+         </size>
+        </property>
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
+         <property name="spacing">
+          <number>8</number>
+         </property>
+         <property name="leftMargin">
+          <number>0</number>
+         </property>
+         <property name="topMargin">
+          <number>0</number>
+         </property>
+         <property name="rightMargin">
+          <number>32</number>
+         </property>
+         <property name="bottomMargin">
+          <number>0</number>
+         </property>
+         <item>
+          <spacer name="horizontalSpacer_2">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>463</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <widget class="QPushButton" name="pBtn_ok">
+           <property name="minimumSize">
+            <size>
+             <width>68</width>
+             <height>32</height>
+            </size>
+           </property>
+           <property name="text">
+            <string>确定</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>PlanCard</class>
+   <extends>QWidget</extends>
+   <header location="global">plancard.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>

+ 27 - 13
TransmitterSwitch/Template/templatemanager.cpp

@@ -1,4 +1,5 @@
 #include "templatemanager.h"
+#include "previewplan.h"
 #include "ui_templatemanager.h"
 
 #include <QDebug>
@@ -7,6 +8,7 @@
 #include <QFile>
 #include <QPainter>
 #include <QMouseEvent>
+#include <memory>
 
 #include "warning/warning.h"
 #include "LHQLogAPI.h"
@@ -17,6 +19,7 @@
 #include "managerplan.h"
 #include "FromWebAPI.h"
 #include "tipwidget.h"
+#include "previewplan.h"
 
 
 TemplateManager::TemplateManager(QWidget *parent) :
@@ -117,6 +120,7 @@ void TemplateManager::do_clickedItem(int row, int column)
     if(column == 2) 
     {
         /* 预览 */
+        previewTemplate(item);
     }
     else if(column == 3)
     {
@@ -287,12 +291,6 @@ void TemplateManager::modifyTemplate(QTableWidgetItem* item)
     }
     m_mapModifyTemplate.insert(info, newListPlan);
 
-    // if(m_fromWebAPI->modifyTemplate(info, newListPlan))
-    // {
-    //     TipWidget::display(TipWidget::OPERATOR_OK, "修改模版成功", this);
-    // }else {
-    //     TipWidget::display(TipWidget::OPERATOR_FAIL, "修改模版失败", this);
-    // }
 }
 
 /* 删除模版 */
@@ -316,13 +314,29 @@ void TemplateManager::deleteTemplate(QTableWidgetItem* item)
     /* 删除当前行 */
     ui->tableWidget->removeRow(item->row());
 
-    /* 删除模版 */
-    // if(m_fromWebAPI->deleteTemplate(info))
-    // {
-    //     TipWidget::display(TipWidget::OPERATOR_OK, "删除模版成功", this);
-    // }else {
-    //     TipWidget::display(TipWidget::OPERATOR_FAIL, "从数据库删除模版失败", this);
-    // }
+}
+
+/* 预览 */
+void TemplateManager::previewTemplate(QTableWidgetItem* item)
+{
+    /* 获取频率 */
+    OneTemplateInfo info;
+    info.templateName = item->data(m_roleTemplateName).toString();
+    /* 获取频率名称 */
+    info.channelInfo = ChnContainer.getChannel(item->data(m_roleChnID).toInt());
+    /* 获取模版中的计划 */
+    QList<OnePlanItemInfo> nowListPlan;
+    if(!m_fromWebAPI->getExecPlanData(info.channelInfo.ChannelID, nowListPlan))
+    {
+        TipWidget::display(TipWidget::OPERATOR_FAIL, "获取模版计划失败", this);
+        return;
+    }
+
+    std::shared_ptr<PreviewPlan> pp = std::make_shared<PreviewPlan>(this);
+    pp->setQSSPath(EPUIStyle.getQSSPath());
+    pp->setFrequencyInfo(info.channelInfo);
+    pp->setTemplateList(nowListPlan);
+    pp->exec();
 }
 
 

+ 2 - 0
TransmitterSwitch/Template/templatemanager.h

@@ -47,6 +47,8 @@ private:
     void modifyTemplate(QTableWidgetItem* item);
     /* 删除模版 */
     void deleteTemplate(QTableWidgetItem* item);
+    /* 预览 */
+    void previewTemplate(QTableWidgetItem* item);
 
 private slots:
     /* 点击了OK */

+ 41 - 19
TransmitterSwitch/WebAPI/FromWebAPI.cpp

@@ -7,6 +7,7 @@
 
 #include "LHQLogAPI.h"
 #include "TransmitterSwitchInfo.h"
+#include "lhhttpapi.h"
 
 
 FromWebAPI::FromWebAPI()
@@ -909,30 +910,51 @@ bool FromWebAPI::saveTemplateList(const QMap<OneTemplateInfo, QList<OnePlanItemI
         LH_WRITE_ERROR("WebAPI is nullptr");
         return false;
     }
+    
     nJson json0 = nJson::array();
-    for(auto& list : mapTemplate)
+    try
     {
-        for(const auto& item : list)
+        for(auto list = mapTemplate.begin(), end = mapTemplate.end(); list != end; list++)
         {
-            nJson json1;
-            json1["opName"] = "TMS_InsertToExecPlanTemplate";
-            json1["Key"] = QUuid::createUuid().toString().toStdString();
-            nJson json2;
-
-            json2["templateName"] = item.templateName.toStdString();
-            json2["channelID"] = item.ChannelID;
-            json2["channelName"] = item.ChannelName.toStdString();
-            json2["onWeekDay"] = item.onWeekDay;
-            json2["onDate"] = item.onDateTime.date().toString("yyyy-MM-dd").toStdString();
-            json2["onTime"] = item.onDateTime.time().toString("hh:mm:ss").toStdString();
-            json2["offWeekDay"] = item.offWeekDay;
-            json2["offDate"] = item.offDateTime.date().toString("yyyy-MM-dd").toStdString();
-            json2["offTime"] = item.offDateTime.time().toString("hh:mm:ss").toStdString();
-
-            json1["paramList"] = json2;
-            json0.push_back(json1);
+            for(auto& item : *list)
+            {
+                nJson json1;
+                json1["opName"] = "TMS_InsertToExecPlanTemplate";
+                json1["Key"] = QUuid::createUuid().toString().toStdString();
+                nJson json2;
+
+                json2["templateName"] = list.key().templateName.toStdString();
+                json2["channelID"] = item.ChannelID;
+                json2["channelName"] = item.ChannelName.toStdString();
+                json2["onWeekDay"] = item.onWeekDay;
+                json2["onDate"] = item.onDateTime.date().toString("yyyy-MM-dd").toStdString();
+                json2["onTime"] = item.onDateTime.time().toString("hh:mm:ss").toStdString();
+                json2["offWeekDay"] = item.offWeekDay;
+                json2["offDate"] = item.offDateTime.date().toString("yyyy-MM-dd").toStdString();
+                json2["offTime"] = item.offDateTime.time().toString("hh:mm:ss").toStdString();
+
+                json1["paramList"] = json2;
+                json0.push_back(json1);
+            }
         }
     }
+    catch(...)
+    {
+        LH_WRITE_ERROR("生成json数据失败");
+        return false;
+    }
+    /* 写入EQM数据库 */
+    QString strCmd = QString::fromStdString(json0.dump());
+    QString strRet;
+    auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
+    if(ret != 0)
+    {
+        LH_WRITE_ERROR(QString("保存到模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
+        return false;
+    }
+    // LH_WRITE_LOG("保存到模板成功,模板名称:" + templateName + ", 计划数目:" + QString::number(list.size()));
+
+    return true;
 }