diff --git a/uappbase/bean/appevent.hpp b/uappbase/bean/appevent.hpp index 8923ce2..0f783ee 100644 --- a/uappbase/bean/appevent.hpp +++ b/uappbase/bean/appevent.hpp @@ -4,26 +4,7 @@ #include #include "uicontroler/tjc/tjc_base_type.h" - -typedef enum { - KAE_callOnAppEventBusLoop, - - kAE_RunModeChangeEvent, // 运行模式改变 - - kAppEvent_StateDisplayInfo, - kAppEvent_AcidChCfgChangeEvent, - - // UI_EVENT - KAE_UIEvent, - kAE_LoginEvent, - kAE_unLoginEvent, - KAE_PageChangeEvent, - - kAE_AcidStatChangeEvent, // 统计数据变化事件 - kAE_RemoterConnectedEvent, // 遥控器连接成功 - kAE_RemoterDisConnectedEvent, // 遥控器断开连接 - -} AppEventType_t; +#include "appevent_type.hpp" /** * @@ -37,7 +18,7 @@ typedef enum { class AppEvent { public: AppEventType_t type; - union { + union val { uint32_t placeholder; char bleName[20]; char stateDisplayInfo[30]; diff --git a/uappbase/bean/appevent_type.hpp b/uappbase/bean/appevent_type.hpp new file mode 100644 index 0000000..f4b822f --- /dev/null +++ b/uappbase/bean/appevent_type.hpp @@ -0,0 +1,21 @@ +#pragma once +#include +enum AppEventType { + KAE_callOnAppEventBusLoop, + + kAE_RunModeChangeEvent, // 运行模式改变 + + kAppEvent_StateDisplayInfo, + kAppEvent_AcidChCfgChangeEvent, + + // UI_EVENT + KAE_UIEvent, + kAE_LoginEvent, + kAE_unLoginEvent, + KAE_PageChangeEvent, + + kAE_AcidStatChangeEvent, // 统计数据变化事件 + kAE_RemoterConnectedEvent, // 遥控器连接成功 + kAE_RemoterDisConnectedEvent, // 遥控器断开连接 +}; +typedef enum AppEventType AppEventType_t; diff --git a/usrc/db/dao/acid_distrubt_record_dao.cpp b/usrc/db/dao/acid_distrubt_record_dao.cpp index 0ffb26f..8eaabe0 100644 --- a/usrc/db/dao/acid_distrubt_record_dao.cpp +++ b/usrc/db/dao/acid_distrubt_record_dao.cpp @@ -70,6 +70,7 @@ void AcidDistrubtRecordDao::addRecord(const acid_distrubt_record_t& record) { storgeItem(recordNum); } + acid_distrubt_record_table_t* AcidDistrubtRecordDao::getRecordTable() { ZASSERT_INFO(module_inited, "%s not inited", TABLE_NAME); return acid_distrubt_record_table; diff --git a/usrc/db/dao/acid_distrubt_record_dao.hpp b/usrc/db/dao/acid_distrubt_record_dao.hpp index 6c93e0e..ff6199d 100644 --- a/usrc/db/dao/acid_distrubt_record_dao.hpp +++ b/usrc/db/dao/acid_distrubt_record_dao.hpp @@ -31,7 +31,6 @@ class AcidDistrubtRecordDao { static acid_distrubt_record_table_t* getRecordTable(); static void addRecord(const acid_distrubt_record_t& record); - static void sync(); static void getRecord(int pageNum, AcidDistrubtRcordPage* page); static bool isAlmostFull(); static bool isFull(); diff --git a/usrc/uicontroler/base/ui_state.cpp b/usrc/uicontroler/base/ui_state.cpp index 32319d8..215e4e5 100644 --- a/usrc/uicontroler/base/ui_state.cpp +++ b/usrc/uicontroler/base/ui_state.cpp @@ -42,5 +42,7 @@ bool UIPublicState::popUIPopInfoBlock(UIPopInfo_t* info) { int UIPublicState::getPopInfoNum() { return popInfoNum; } -bool UIPublicState::setLoadingState(bool state) { loadingState = state; } +bool UIPublicState::setLoadingState(bool state) { loadingState = state; + return true; +} bool UIPublicState::getLoadingState() { return loadingState; } diff --git a/usrc/uicontroler/page/home_page.cpp b/usrc/uicontroler/page/home_page.cpp index 4d6d4ae..dff2174 100644 --- a/usrc/uicontroler/page/home_page.cpp +++ b/usrc/uicontroler/page/home_page.cpp @@ -3,8 +3,11 @@ #include "uappbase/apphal/apphal.hpp" #include "ui/ui.h" #include "uicontroler/base/page_processer.hpp" + // #include "db/dao/acid_ch_cfg_dao.hpp" +#include "db/dao/acid_distrubt_record_dao.hpp" +#include "db/dao/acid_use_record_dao.hpp" #include "db/dao/device_setting_dao.hpp" // #include "service/pump_ctrl_service.hpp" @@ -12,6 +15,14 @@ namespace iflytop { using namespace std; #define TAG "HomePage" +static const char* fmt(const char* txt, ...) { + static char buf[128]; + va_list args; + va_start(args, txt); + vsnprintf(buf, sizeof(buf), txt, args); + va_end(args); + return buf; +} class HomePage : public IPageProcesser { private: @@ -32,6 +43,29 @@ class HomePage : public IPageProcesser { ZLOGI(TAG, "OnPageLoad"); syncState(); } + + virtual void onChangePageEvent() { + if (UIStateMgr::ins()->lastPage == pg_login) { + // 检查酸液分发记录表是否满 + if (AcidDistrubtRecordDao::isFull()) { + UIS->popInfoWin(fmt("酸液分发记录表已满(%d/%d),请及时清理", // + AcidDistrubtRecordDao::getRecordTable()->recordNum, ACID_DISTRUBT_RECORD_NUM)); + } else if (AcidDistrubtRecordDao::isAlmostFull()) { + UIS->popInfoWin(fmt("酸液分发记录表即将满(%d/%d),请及时清理", // + AcidDistrubtRecordDao::getRecordTable()->recordNum, ACID_DISTRUBT_RECORD_NUM)); + } + + // 检查酸液使用记录表是否满 + if (AcidUseRecordDao::isFull()) { + UIS->popInfoWin(fmt("酸液使用记录表已满(%d/%d),请及时清理", // + AcidUseRecordDao::getRecordTable()->recordNum, ACIDUSERCORD_RECORD_NUM)); + } else if (AcidUseRecordDao::isAlmostFull()) { + UIS->popInfoWin(fmt("酸液使用记录表即将满(%d/%d),请及时清理", // + AcidUseRecordDao::getRecordTable()->recordNum, ACIDUSERCORD_RECORD_NUM)); + } + } + }; + virtual void onBackKey() override {} virtual void onInputFieldContentChange(uint8_t bid, uint8_t slecId, const char* text) override { if (bid == ob_home_acideval0) { @@ -65,7 +99,7 @@ class HomePage : public IPageProcesser { } else if (bid == ob_home_SelCH3) { setPumpSelectState(3, !GStateMgr::ins()->getPumpSelectState(3)); } else if (bid == ob_home_MenuButton) { - UIS->chpage(pg_navi,true); + UIS->chpage(pg_navi, true); } } virtual void onAppEvent(AppEvent* event) override { diff --git a/usrc/uicontroler/page/login_page.cpp b/usrc/uicontroler/page/login_page.cpp index 0f18d47..084c0d4 100644 --- a/usrc/uicontroler/page/login_page.cpp +++ b/usrc/uicontroler/page/login_page.cpp @@ -2,10 +2,15 @@ #include "db/dao/user_dao.hpp" #include "ui/ui.h" #include "uicontroler/base/page_processer.hpp" +// +#include "db/dao/acid_distrubt_record_dao.hpp" +#include "db/dao/acid_use_record_dao.hpp" namespace iflytop { using namespace std; #define TAG "LoginPage" + + class LoginPage : public IPageProcesser { private: char userName[20] = {0}; @@ -21,6 +26,11 @@ class LoginPage : public IPageProcesser { private: virtual void onPageLoad(OnPageLoadContext* cxt) override {} + virtual void onChangePageEvent() { + resetPage(); + return; + }; + virtual void onBackKey() override {} virtual void onInputFieldContentChange(uint8_t bid, uint8_t slecId, const char* text) override { if (bid == ob_login_uName) { @@ -36,6 +46,12 @@ class LoginPage : public IPageProcesser { } } virtual void onClickRelease(uint8_t bid, uint8_t val, const char* text) override { + if (bid == ob_login_uName) { + UIS->popFullKeyBoard(thisPage, ob_login_uName, 20, userName); + } else if (bid == ob_login_pwd) { + UIS->popPasswdKeyBoard(thisPage, ob_login_pwd, 6); + } + if (bid == ob_login_blogin) { user_t* user = UserDao::getUserByName(userName); if (user == nullptr) { @@ -48,12 +64,9 @@ class LoginPage : public IPageProcesser { return; } - ZLOGI(TAG, "login %s(%d) role:%d", userName, user->id, user->role); + - GStateMgr::ins()->setLogin(user->id, userName, (user_role_t)user->role); - AppEventBus::ins()->pushSimpleEvent(kAE_LoginEvent); - UIControler::ins()->chpage(pg_home, true); - resetPage(); + login(user); } } virtual void onAppEvent(AppEvent* event) override {} @@ -65,6 +78,14 @@ class LoginPage : public IPageProcesser { UIS->setTxt(thisPage, ob_login_pwd, ""); // 密码 UIS->setTxt(thisPage, ob_login_pwdEMsg, ""); // 密码错误信息 } + + void login(user_t* user) { + ZLOGI(TAG, "login %s(%d) role:%d", userName, user->id, user->role); + GStateMgr::ins()->setLogin(user->id, userName, (user_role_t)user->role); + AppEventBus::ins()->pushSimpleEvent(kAE_LoginEvent); + UIControler::ins()->chpage(pg_home, true); + + } }; // 实例化LoginPage, 使其自动注册 diff --git a/usrc/uicontroler/page/mupage/muAcidTakeMgr_page.cpp b/usrc/uicontroler/page/mupage/MuAcidDistMgrPage.cpp similarity index 93% rename from usrc/uicontroler/page/mupage/muAcidTakeMgr_page.cpp rename to usrc/uicontroler/page/mupage/MuAcidDistMgrPage.cpp index 681e74a..9c1fc4d 100644 --- a/usrc/uicontroler/page/mupage/muAcidTakeMgr_page.cpp +++ b/usrc/uicontroler/page/mupage/MuAcidDistMgrPage.cpp @@ -128,8 +128,7 @@ class MuAcidDistMgrPage : public IPageProcesser { UIControler::ins()->popConfirmWin("您确定要清空领酸记录?", [this](bool isOk) { if (isOk) { UILoadingCxt loadingCxt; - AcidUseRecordDao::clearRecord(); - AcidUseRecordDao::sync(); + AcidDistrubtRecordDao::clearRecord(); UIControler::ins()->chpage(thisPage, true); } }); @@ -167,6 +166,13 @@ class MuAcidDistMgrPage : public IPageProcesser { void updateTableVolume() { // set val + + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 5; j++) { + UIControler::ins()->setEffect(thisPage, cfgbid_table[i + 1].val[j], ktjc_effet_bottom_fly_in); + } + } + UIControler::ins()->chpage(thisPage, false); AcidDistrubtRcordPage page; @@ -175,7 +181,7 @@ class MuAcidDistMgrPage : public IPageProcesser { setText(cfgbid_table[i + 1].val[0], "%d/%d/%d %02d:%02d:%02d", page.record[i]->date.year, page.record[i]->date.month, page.record[i]->date.day, page.record[i]->date.hours, page.record[i]->date.minutes, page.record[i]->date.seconds); setText(cfgbid_table[i + 1].val[1], "%s", UserDao::getUserByIdNotNull(page.record[i]->distrubtAcidUsrid)->name); setText(cfgbid_table[i + 1].val[2], "%s", UserDao::getUserByIdNotNull(page.record[i]->takeAcidUsrid)->name); - setText(cfgbid_table[i + 1].val[3], "%s", AcidChCfgDao::getCfg(page.record[i]->distribuCh)->acidChooseName); + setText(cfgbid_table[i + 1].val[3], "%s(%d)", AcidChCfgDao::getCfg(page.record[i]->distribuCh)->acidChooseName, page.record[i]->distribuCh); setText(cfgbid_table[i + 1].val[4], "%d", page.record[i]->distribuVolume); } @@ -186,6 +192,11 @@ class MuAcidDistMgrPage : public IPageProcesser { setText(cfgbid_table[i + 1].val[3], ""); setText(cfgbid_table[i + 1].val[4], ""); } + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 5; j++) { + UIControler::ins()->setEffect(thisPage, cfgbid_table[i + 1].val[j], ktjc_effet_immediately); + } + } } void resetForm() { diff --git a/usrc/uicontroler/tjc/tjc.hpp b/usrc/uicontroler/tjc/tjc.hpp index 61e3df7..f958bdb 100644 --- a/usrc/uicontroler/tjc/tjc.hpp +++ b/usrc/uicontroler/tjc/tjc.hpp @@ -1,3 +1,19 @@ #pragma once #include "tjc_constant.hpp" -#include "ui\ui.h" \ No newline at end of file +#include "ui\ui.h" + + +typedef enum { + // 0-立即加载;1-上边飞入;2-下边飞入;3-左边飞入;4-右边飞入;5-左上角飞入;6-右上角飞入;7-左下角飞入;8-右下角飞入;9-淡入渐变;10-中间放大 + ktjc_effet_immediately = 0, + ktjc_effet_top_fly_in, + ktjc_effet_bottom_fly_in, + ktjc_effet_left_fly_in, + ktjc_effet_right_fly_in, + ktjc_effet_left_top_fly_in, + ktjc_effet_right_top_fly_in, + ktjc_effet_left_bottom_fly_in, + ktjc_effet_right_bottom_fly_in, + ktjc_effet_fade_in, + ktjc_effet_center_zoom_in, +} tjc_effet_t; diff --git a/usrc/uicontroler/ui_controler.hpp b/usrc/uicontroler/ui_controler.hpp index b90db68..8ab7185 100644 --- a/usrc/uicontroler/ui_controler.hpp +++ b/usrc/uicontroler/ui_controler.hpp @@ -16,6 +16,7 @@ typedef struct { uint16_t datalen; } tjc_rx_packet_t; + #define UIS UIControler::ins() class UIControler { ZThread m_thread; @@ -65,6 +66,10 @@ class UIControler { void sendcmd(const char* format, ...); void sendcmd(const char* format, va_list args); + void setEffect(uint8_t pid, uint8_t bid, tjc_effet_t effect) { + zlock_guard lg(m_cmdlock); + sendcmd("p[%d].b[%d].effect=%d", pid, bid, effect); + } /*********************************************************************************************************************** * READ * @@ -99,7 +104,7 @@ class UIControler { void popKeyBMutSel(uint8_t fromPid, uint8_t fromBid, int selectvalindex, const char** selectvals); void popKeyBMutSel(uint8_t fromPid, uint8_t fromBid, int selectvalindex, const char* selectvals); - void popKeyBMutSelFix(uint8_t fromPid, uint8_t fromBid, int selectvalindex, const char* keyboardName,const char** selectvals); + void popKeyBMutSelFix(uint8_t fromPid, uint8_t fromBid, int selectvalindex, const char* keyboardName, const char** selectvals); /*********************************************************************************************************************** * UTILS *