From 7ce43060beafb90e81262c28ea86ac8e8fda1508 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Tue, 26 Nov 2024 14:37:12 +0800 Subject: [PATCH] update --- uappbase/bean/dbtype/user_role_enum.cpp | 6 +- uappbase/bean/dbtype/user_role_enum.hpp | 4 +- usrc/db/dao/user_dao.cpp | 11 ++- usrc/uicontroler/base/page_processer.cpp | 26 ++++--- .../inputfield_content_change_event_processer.cpp | 2 +- ...eld_content_selected_change_event_processer.cpp | 2 +- usrc/uicontroler/page/mupage/muUsrMgr_page.cpp | 27 +++++--- usrc/uicontroler/tjc/tjc_base_type.h | 76 +-------------------- usrc/uicontroler/tjc/tjc_constant.cpp | 2 + usrc/uicontroler/tjc/ui_event.h | 79 ++++++++++++++++++++++ usrc/uicontroler/ui_controler.cpp | 3 +- usrc/uicontroler/ui_controler.hpp | 21 ++++-- 12 files changed, 154 insertions(+), 105 deletions(-) create mode 100644 usrc/uicontroler/tjc/ui_event.h diff --git a/uappbase/bean/dbtype/user_role_enum.cpp b/uappbase/bean/dbtype/user_role_enum.cpp index 6d0732b..f97c20a 100644 --- a/uappbase/bean/dbtype/user_role_enum.cpp +++ b/uappbase/bean/dbtype/user_role_enum.cpp @@ -6,7 +6,9 @@ const UserRole UserRole::admin = UserRole(kadmin, "admin", " const UserRole UserRole::storekeeper = UserRole(kstorekeeper, "storekeeper", "仓库管理员"); const UserRole UserRole::user = UserRole(kuser, "user", "用户"); -const UserRole* UserRole::table[3] = {&admin, &storekeeper, &user}; -const int UserRole::tableNum = 3; +const UserRole* UserRole::table[4] = {&admin, &storekeeper, &user, nullptr}; +const char* UserRole::chNametable[4] = {"管理员", "仓库管理员", "用户", nullptr}; + +const int UserRole::tableNum = 3; } // namespace iflytop diff --git a/uappbase/bean/dbtype/user_role_enum.hpp b/uappbase/bean/dbtype/user_role_enum.hpp index a285766..8172330 100644 --- a/uappbase/bean/dbtype/user_role_enum.hpp +++ b/uappbase/bean/dbtype/user_role_enum.hpp @@ -8,6 +8,7 @@ typedef enum { kadmin, // 管理员 kstorekeeper, // 仓库管理员 kuser, // 用户 + kuser_role_max } user_role_t; class UserRole : public ZEnum { @@ -20,7 +21,8 @@ class UserRole : public ZEnum { const static UserRole storekeeper; const static UserRole user; - const static UserRole* table[3]; + const static UserRole* table[4]; + const static char* chNametable[4]; const static int tableNum; static const UserRole* of(int val) { diff --git a/usrc/db/dao/user_dao.cpp b/usrc/db/dao/user_dao.cpp index 75b14fc..012bdc7 100644 --- a/usrc/db/dao/user_dao.cpp +++ b/usrc/db/dao/user_dao.cpp @@ -224,10 +224,15 @@ void UserDao::updateUser(uint8_t userId, const char* name, const char* passwd, u ZLOGE(TAG, "user %d not exist", userId); return; } - strcpy(user->name, name); - strcpy(user->passwd, passwd); - user->role = role; + if (name != nullptr) strcpy(user->name, name); + if (passwd != nullptr) strcpy(user->passwd, passwd); + if (user->role < 0 || user->role >= kuser_role_max) { + ZLOGE(TAG, "role %d not exist", role); + return; + } + + user->role = role; sortUsr(); storgeTableData(); } diff --git a/usrc/uicontroler/base/page_processer.cpp b/usrc/uicontroler/base/page_processer.cpp index 698629a..8e792bd 100644 --- a/usrc/uicontroler/base/page_processer.cpp +++ b/usrc/uicontroler/base/page_processer.cpp @@ -29,18 +29,28 @@ void IPageProcesser::initialize() { if (pageId != event->d.uiEvent.pid) { return; } + // uint8_t bid = event->d.uiEvent.bid; + UIEvent* uiEvent = &event->d.uiEvent; - if (event->d.uiEvent.eventId == kpt_sys_event_page_id) { + if (uiEvent->eventId == kpt_sys_event_page_id) { OnPageLoadContext cxt = {0}; + ZLOGI(TAG, "page %s(%d)-%d load", pageName, pageId, uiEvent->bid); onPageLoad(&cxt); - } else if (event->d.uiEvent.eventId == kpt_button_event) { - onClickRelease(event->d.uiEvent.bid, event->d.uiEvent.val, event->d.uiEvent.text); - } else if (event->d.uiEvent.eventId == kpt_usr_def_clik_release_event) { - onClickRelease(event->d.uiEvent.bid, event->d.uiEvent.val, event->d.uiEvent.text); - } else if (event->d.uiEvent.eventId == kpt_page_back_event) { + } else if (uiEvent->eventId == kpt_button_event) { + ZLOGI(TAG, "page %s(%d)-%d onClickRelease,val %d text %s", pageName, pageId, uiEvent->bid, uiEvent->val, uiEvent->text); + onClickRelease(uiEvent->bid, uiEvent->val, uiEvent->text); + } else if (uiEvent->eventId == kpt_usr_def_clik_release_event) { + ZLOGI(TAG, "page %s(%d)-%d onClickRelease,val %d text %s", pageName, pageId, uiEvent->bid, uiEvent->val, uiEvent->text); + onClickRelease(uiEvent->bid, uiEvent->val, uiEvent->text); + } else if (uiEvent->eventId == kpt_page_back_event) { + ZLOGI(TAG, "page %s(%d)-%d onBackKey", pageName, pageId, uiEvent->bid); onBackKey(); - } else if (event->d.uiEvent.eventId == kpt_inputfield_content_change_event) { - onInputFieldContentChange(event->d.uiEvent.bid, event->d.uiEvent.val, event->d.uiEvent.text); + } else if (uiEvent->eventId == kpt_inputfield_content_selected_change_event) { + ZLOGI(TAG, "page %s(%d)-%d onInputFieldContentChange val %d text %s", pageName, pageId, uiEvent->bid, uiEvent->val, uiEvent->text); + onInputFieldContentChange(uiEvent->bid, uiEvent->val, uiEvent->text); + } else if (uiEvent->eventId == kpt_inputfield_content_change_event) { + ZLOGI(TAG, "page %s(%d)-%d onInputFieldContentChange val %d text %s", pageName, pageId, uiEvent->bid, uiEvent->val, uiEvent->text); + onInputFieldContentChange(uiEvent->bid, uiEvent->val, uiEvent->text); } // } else { diff --git a/usrc/uicontroler/event_proceesser/inputfield_content_change_event_processer.cpp b/usrc/uicontroler/event_proceesser/inputfield_content_change_event_processer.cpp index 5a1e2e4..53d9cc4 100644 --- a/usrc/uicontroler/event_proceesser/inputfield_content_change_event_processer.cpp +++ b/usrc/uicontroler/event_proceesser/inputfield_content_change_event_processer.cpp @@ -19,7 +19,7 @@ void InputFieldContentChangeEventProcesser::process(uint8_t* indata, size_t len, result->pid = indata[1]; result->bid = indata[2]; const char* strbegin = (const char*)&indata[3]; - strbegin = TJCStrUtils::cpystr(result->text, strbegin, sizeof(*result->text)); + strbegin = TJCStrUtils::cpystr(result->text, strbegin, sizeof(result->text)); result->butEventType = kbutton_release; } diff --git a/usrc/uicontroler/event_proceesser/inputfield_content_selected_change_event_processer.cpp b/usrc/uicontroler/event_proceesser/inputfield_content_selected_change_event_processer.cpp index 70feee5..9a0d391 100644 --- a/usrc/uicontroler/event_proceesser/inputfield_content_selected_change_event_processer.cpp +++ b/usrc/uicontroler/event_proceesser/inputfield_content_selected_change_event_processer.cpp @@ -21,6 +21,6 @@ void InputfieldContentSelectedChangeEventProcesser::process(uint8_t* indata, siz result->bid = indata[2]; result->val = indata[3]; const char* strbegin = (const char*)&indata[4]; - strbegin = TJCStrUtils::cpystr(result->text, strbegin, sizeof(*result->text)); + strbegin = TJCStrUtils::cpystr(result->text, strbegin, sizeof(result->text)); result->butEventType = kbutton_release; } diff --git a/usrc/uicontroler/page/mupage/muUsrMgr_page.cpp b/usrc/uicontroler/page/mupage/muUsrMgr_page.cpp index 6c91794..61184ab 100644 --- a/usrc/uicontroler/page/mupage/muUsrMgr_page.cpp +++ b/usrc/uicontroler/page/mupage/muUsrMgr_page.cpp @@ -130,13 +130,10 @@ class MuUsrMgr : public IPageProcesser { */ if (bid == ob_muUsrMgr_roleVal) { // 修改用户角色 - UserRole::of(val); - m_editContext.role = &UserRole::admin; - m_editContext.editDirty = true; - syncEditContext(); - } else if (bid == ob_muUsrMgr_usrName) { + UIControler::ins()->popSelcKeyBoard(pg_muUsrMgr, ob_muUsrMgr_roleVal, m_editContext.role->val, UserRole::chNametable); + } else if (bid == ob_muUsrMgr_usrNameVal) { // 修改用户名 - popFullKeyBoard(ob_muUsrMgr_usrName, 20, m_editContext.name); + popFullKeyBoard(ob_muUsrMgr_usrNameVal, 20, m_editContext.name); } else if (bid == ob_muUsrMgr_passwdRest) { // 重置密码 m_editContext.resetPasswd = !m_editContext.resetPasswd; @@ -157,8 +154,14 @@ class MuUsrMgr : public IPageProcesser { } virtual void onInputFieldContentChange(uint8_t bid, uint8_t slecId, const char* text) { - if (bid == ob_muUsrMgr_usrName) { + if (bid == ob_muUsrMgr_usrNameVal) { if (strlen(text) == 0) { + ZLOGW(TAG, "用户名为空"); + return; + } + + if (strlen(text) > sizeof(m_editContext.name)) { + UIControler::ins()->popWarningWin("用户名过长"); return; } @@ -167,6 +170,13 @@ class MuUsrMgr : public IPageProcesser { m_editContext.editDirty = true; syncEditContext(); } + + if (bid == ob_muUsrMgr_roleVal) { + m_editContext.role = UserRole::of(slecId); + ZASSERT(m_editContext.role != nullptr); + m_editContext.editDirty = true; + syncEditContext(); + } }; /*********************************************************************************************************************** @@ -235,6 +245,7 @@ class MuUsrMgr : public IPageProcesser { } if (m_editContext.resetPasswd) { + ZLOGI(TAG, "reset passwd"); UserDao::updateUser(user->id, m_editContext.name, DEFAULT_PASSWD, (user_role_t)m_editContext.role->val); } else { UserDao::updateUser(user->id, m_editContext.name, NULL, (user_role_t)m_editContext.role->val); @@ -264,7 +275,7 @@ class MuUsrMgr : public IPageProcesser { resetUiUsrTable(); for (int i = 0; i < numUser; i++) { user_t* user = &users[i]; - ZLOGI(TAG, "fill index:%d user(%d) %s", i, user->id, user->name); + ZLOGI(TAG, "fill index:%d user(%d) name:%s role:%d passwd:%s", i, user->id, user->name, user->role, user->passwd); strcpy(m_uiUsrTable[i].userName, user->name); m_uiUsrTable[i].role = UserRole::of(user->role); diff --git a/usrc/uicontroler/tjc/tjc_base_type.h b/usrc/uicontroler/tjc/tjc_base_type.h index 47f0e65..2a3bca0 100644 --- a/usrc/uicontroler/tjc/tjc_base_type.h +++ b/usrc/uicontroler/tjc/tjc_base_type.h @@ -1,5 +1,6 @@ #pragma once #include + /** * @brief * @@ -23,83 +24,10 @@ * */ -#define MAX_USR_PASSWD_LENGTH (6) -#define ELEMENT_ID_MAX_SIZE 14 -#define TJC_MAX_PACKET_SIZE 256 - -typedef enum { - /** - * @brief 错误码 - */ - kpt_sys_ecode_invalid = 0x00, - kpt_sys_ecode_suc = 0x01, - kpt_sys_ecode_invalid_control_id = 0x02, - kpt_sys_ecode_invalid_page_id = 0x03, - kpt_sys_ecode_invalid_image_id = 0x04, - kpt_sys_ecode_invalid_font_id = 0x05, - kpt_sys_ecode_file_op_failed = 0x06, - kpt_sys_ecode_crc_failed = 0x09, - kpt_sys_ecode_invalid_baudrate = 0x11, - kpt_sys_ecode_invalid_curve_id = 0x12, - kpt_sys_ecode_invalid_var_name = 0x1A, - kpt_sys_ecode_invalid_var_op = 0x1B, - kpt_sys_ecode_var_op_failed = 0x1C, - kpt_sys_ecode_flash_op_failed = 0x1D, - kpt_sys_ecode_invalid_param_num = 0x1E, - kpt_sys_ecode_io_op_failed = 0x1F, - kpt_sys_ecode_escape_char_failed = 0x20, - kpt_sys_ecode_var_name_too_long = 0x23, - kpt_sys_ecode_serial_buf_overflow = 0x24, - /** - * @brief 事件 - */ - kpt_button_event = 0x65, // 普通按键 - kpt_sys_event_page_id = 0x66, // 页面变化事件 - kpt_sys_event_touch_data = 0x67, - kpt_sys_event_sleep_touch = 0x68, - kpt_sys_event_string_var = 0x70, - kpt_sys_event_number_var = 0x71, - kpt_sys_event_sleep_mode = 0x86, - kpt_sys_event_auto_wakeup = 0x87, - kpt_sys_event_sys_start = 0x88, - kpt_sys_event_sd_upgrade = 0x89, - kpt_sys_event_passthrough_finish = 0xFD, - kpt_sys_event_passthrough_ready = 0xFE, - - /** - * @brief 用户消息回执 - */ - kpt_ack = 0xAA, - // - kpt_inputfield_content_change_event = 0xAC, // 跨页面键盘输入事件 - kpt_inputfield_content_selected_change_event = 0xAD, // 跨页面多选框输入事件 - - kpt_page_back_event = 0xB0, // 回退按键事件 - kpt_usr_def_clik_release_event = 0xB1, // 用户自定义按键释放事件 -} tjc_packet_type_t; - -typedef enum { - kbutton_release = 0, - kbutton_press = 1, -} button_event_t; - -typedef enum { - k_button_release_event = 1, - k_input_confirm_event = 2, -} usr_event_type_t; /*********************************************************************************************************************** * event * ***********************************************************************************************************************/ +#include "ui_event.h" -typedef struct { - int32_t eventId; - uint8_t pid; - uint8_t bid; - - // content - button_event_t butEventType; // 按键事件类型 - uint8_t val; // 数值相关 - char text[TJC_MAX_PACKET_SIZE]; // 文本相关 -} UIEvent; \ No newline at end of file diff --git a/usrc/uicontroler/tjc/tjc_constant.cpp b/usrc/uicontroler/tjc/tjc_constant.cpp index f60bf6c..a8d0a0a 100644 --- a/usrc/uicontroler/tjc/tjc_constant.cpp +++ b/usrc/uicontroler/tjc/tjc_constant.cpp @@ -42,8 +42,10 @@ const char* pt2str(uint8_t type) { PT_ENUM(kpt_sys_event_passthrough_ready) PT_ENUM(kpt_ack) PT_ENUM(kpt_inputfield_content_change_event) + PT_ENUM(kpt_inputfield_content_selected_change_event) PT_ENUM(kpt_page_back_event) PT_ENUM(kpt_usr_def_clik_release_event) + default: return "unkown_event"; break; diff --git a/usrc/uicontroler/tjc/ui_event.h b/usrc/uicontroler/tjc/ui_event.h new file mode 100644 index 0000000..6a36589 --- /dev/null +++ b/usrc/uicontroler/tjc/ui_event.h @@ -0,0 +1,79 @@ +#pragma once +#include + +#define MAX_USR_PASSWD_LENGTH (6) +#define ELEMENT_ID_MAX_SIZE 14 +#define TJC_MAX_PACKET_SIZE 256 + +typedef enum { + /** + * @brief 错误码 + */ + kpt_sys_ecode_invalid = 0x00, + kpt_sys_ecode_suc = 0x01, + kpt_sys_ecode_invalid_control_id = 0x02, + kpt_sys_ecode_invalid_page_id = 0x03, + kpt_sys_ecode_invalid_image_id = 0x04, + kpt_sys_ecode_invalid_font_id = 0x05, + kpt_sys_ecode_file_op_failed = 0x06, + kpt_sys_ecode_crc_failed = 0x09, + kpt_sys_ecode_invalid_baudrate = 0x11, + kpt_sys_ecode_invalid_curve_id = 0x12, + kpt_sys_ecode_invalid_var_name = 0x1A, + kpt_sys_ecode_invalid_var_op = 0x1B, + kpt_sys_ecode_var_op_failed = 0x1C, + kpt_sys_ecode_flash_op_failed = 0x1D, + kpt_sys_ecode_invalid_param_num = 0x1E, + kpt_sys_ecode_io_op_failed = 0x1F, + kpt_sys_ecode_escape_char_failed = 0x20, + kpt_sys_ecode_var_name_too_long = 0x23, + kpt_sys_ecode_serial_buf_overflow = 0x24, + /** + * @brief 事件 + */ + kpt_button_event = 0x65, // 普通按键 + kpt_sys_event_page_id = 0x66, // 页面变化事件 + kpt_sys_event_touch_data = 0x67, + kpt_sys_event_sleep_touch = 0x68, + kpt_sys_event_string_var = 0x70, + kpt_sys_event_number_var = 0x71, + kpt_sys_event_sleep_mode = 0x86, + kpt_sys_event_auto_wakeup = 0x87, + kpt_sys_event_sys_start = 0x88, + kpt_sys_event_sd_upgrade = 0x89, + kpt_sys_event_passthrough_finish = 0xFD, + kpt_sys_event_passthrough_ready = 0xFE, + + /** + * @brief 用户消息回执 + */ + kpt_ack = 0xAA, + // + kpt_inputfield_content_change_event = 0xAC, // 跨页面键盘输入事件 + kpt_inputfield_content_selected_change_event = 0xAD, // 跨页面多选框输入事件 + + kpt_page_back_event = 0xB0, // 回退按键事件 + kpt_usr_def_clik_release_event = 0xB1, // 用户自定义按键释放事件 + +} tjc_packet_type_t; + +typedef enum { + kbutton_release = 0, + kbutton_press = 1, +} button_event_t; + +typedef enum { + k_button_release_event = 1, + k_input_confirm_event = 2, +} usr_event_type_t; + +typedef struct { + int32_t eventId; + uint8_t pid; + uint8_t bid; + + // content + button_event_t butEventType; // 按键事件类型 + uint8_t val; // 数值相关 + char text[TJC_MAX_PACKET_SIZE]; // 文本相关 +} UIEvent; \ No newline at end of file diff --git a/usrc/uicontroler/ui_controler.cpp b/usrc/uicontroler/ui_controler.cpp index f1c5edf..a4e0ca5 100644 --- a/usrc/uicontroler/ui_controler.cpp +++ b/usrc/uicontroler/ui_controler.cpp @@ -104,11 +104,12 @@ void UIControler::startSchedule() { tjc_packet_type_t packetType = (tjc_packet_type_t)packet.data[0]; auto* processer = TJCEventProcesserMgr::findProcesser((tjc_packet_type_t)packetType); + ZLOGI(TAG, "[eventprocess-thread]: rx_event:%s(%d)", tjc::pt2str(packetType), packetType); + if (processer != nullptr) { processer->process(packet.data, packet.datalen, &event_cache); } else { event_cache.eventId = packet.data[0]; - ZLOGI(TAG, "[eventprocess-thread]: rx_event:%s", tjc::pt2str(packetType)); } callUsrEventCb(&event_cache); } diff --git a/usrc/uicontroler/ui_controler.hpp b/usrc/uicontroler/ui_controler.hpp index 6f6daa6..02dc657 100644 --- a/usrc/uicontroler/ui_controler.hpp +++ b/usrc/uicontroler/ui_controler.hpp @@ -107,16 +107,25 @@ class UIControler { chpage(pg_keybdB); } - void popSelcKeyBoard(uint8_t fromPid, uint8_t fromBid, int numselect, const char * selectvals[], int selectvalindex) { - sendcmd("p[%d].b[%d].val=%d", pg_keybMutiSel, ob_keybMutiSel_loadpageid, fromPid); - sendcmd("p[%d].b[%d].val=%d", pg_keybMutiSel, ob_keybMutiSel_loadcmpid, fromBid); - sendcmd("p[%d].b[%d].val=%d", pg_keybMutiSel, ob_keybMutiSel_ctent, selectvalindex); + void popSelcKeyBoard(uint8_t fromPid, uint8_t fromBid, int selectvalindex, const char** selectvals) { static char contentbus[128]; - for (int i = 0; i < numselect; i++) { + for (int i = 0;; i++) { // \r\n 拼接字符串数组 + if (selectvals[i] == nullptr) break; + if (i == 0) { + sprintf(contentbus, "%s", selectvals[i]); + continue; + } sprintf(contentbus, "%s\r\n%s", contentbus, selectvals[i]); } - sendcmd("p[%d].b[%d].path=%s", pg_keybMutiSel, ob_keybMutiSel_ctent, contentbus); + popSelcKeyBoard(fromPid, fromBid, selectvalindex, contentbus); + } + + void popSelcKeyBoard(uint8_t fromPid, uint8_t fromBid, int selectvalindex, const char* selectvals) { + sendcmd("p[%d].b[%d].val=%d", pg_keybMutiSel, ob_keybMutiSel_loadpageid, fromPid); + sendcmd("p[%d].b[%d].val=%d", pg_keybMutiSel, ob_keybMutiSel_loadcmpid, fromBid); + sendcmd("p[%d].b[%d].val=%d", pg_keybMutiSel, ob_keybMutiSel_ctent, selectvalindex); + sendcmd("p[%d].b[%d].path=\"%s\"", pg_keybMutiSel, ob_keybMutiSel_ctent, selectvals); chpage(pg_keybMutiSel); }