From 73a7f6d6cab2f684467cd5cc4616d57a4f86516f Mon Sep 17 00:00:00 2001 From: jiangpeng Date: Fri, 15 May 2026 15:16:16 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix=EF=BC=9A=E9=A1=B9=E7=9B=AE=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=8E=A8=E9=80=81CRM=E5=A4=84=E7=90=86=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sip/controller/DataProcessController.java | 15 +++++++-------- .../ruoyi/sip/service/IDataProcessService.java | 2 ++ .../sip/service/impl/DataProcessServiceImpl.java | 8 ++++++++ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/DataProcessController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/DataProcessController.java index d6d772e3..3e6cfd5b 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/DataProcessController.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/DataProcessController.java @@ -2,17 +2,10 @@ package com.ruoyi.sip.controller; import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.StringUtils; import com.ruoyi.sip.dto.ProjectTransferRequest; import com.ruoyi.sip.service.IDataProcessService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * 数据处理控制器 @@ -43,4 +36,10 @@ public class DataProcessController { dataProcessService.generateServiceBillsWhenAllDelivered(orderCode); } + @Anonymous + @GetMapping("/projectPushCRM") + public void projectSendCRM(@RequestParam("projectId") Long projectId) { + dataProcessService.projectSendCRM(projectId); + } + } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IDataProcessService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IDataProcessService.java index eefdd88a..dde36e0c 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IDataProcessService.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IDataProcessService.java @@ -11,4 +11,6 @@ public interface IDataProcessService { void generateServiceBillsWhenAllDelivered(String orderCode); + void projectSendCRM(Long projectId); + } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DataProcessServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DataProcessServiceImpl.java index ce9e7c98..baa29331 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DataProcessServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DataProcessServiceImpl.java @@ -54,6 +54,9 @@ public class DataProcessServiceImpl implements IDataProcessService { @Resource private IOmsPayableBillService payableBillService; + @Resource + private IProjectInfoService projectInfoService; + @Resource private IVendorInfoService vendorInfoService; @@ -165,5 +168,10 @@ public class DataProcessServiceImpl implements IDataProcessService { bindShiroUser(1L, "admin", "平台管理员"); inventoryDeliveryService.generateServiceBillsWhenAllDelivered(orderCode); } + + @Override + public void projectSendCRM(Long projectId) { + projectInfoService.scheduleOpportunityUpdateByProjectId(projectId); + } } From 475229295a500900627ea489f31a039c145fa6fc Mon Sep 17 00:00:00 2001 From: jiangpeng Date: Thu, 21 May 2026 02:18:33 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix=EF=BC=9A=E6=B5=8B=E8=AF=95=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E6=95=B0=E6=8D=AE=E5=BA=93=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/resources/application-dev.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 7fa3c976..449df373 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -10,9 +10,9 @@ spring: druid: # 主库数据源 master: - url: jdbc:mysql://121.199.168.157:3306/unis_pms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true + url: jdbc:mysql://192.168.124.202:3307/oms_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true username: root - password: unis@db + password: Unis@123 # 从库数据源 slave: # 从数据源开关/默认关闭 From 98b9097ff2bccda84d1ef81abb320a320a5d9dad Mon Sep 17 00:00:00 2001 From: jiangpeng Date: Thu, 21 May 2026 05:31:47 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix=EF=BC=9A=E5=BC=BA=E5=88=B6=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=BD=BF=E7=94=A8=E5=BC=BA=E5=AF=86=E7=A0=81=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E9=82=AE=E7=AE=B1=E9=AA=8C=E8=AF=81=E7=A0=81=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oms_web/oms_vue/src/api/login.js | 41 ++++ oms_web/oms_vue/src/store/modules/user.js | 21 +- oms_web/oms_vue/src/utils/request.js | 2 + oms_web/oms_vue/src/views/login.vue | 164 +++++++++++++++- .../controller/system/SysLoginController.java | 141 +++++++++++++- .../src/main/resources/application.yml | 2 +- .../main/resources/ehcache/ehcache-shiro.xml | 180 +++++++++--------- .../resources/static/i18n/messages.properties | 4 +- .../ruoyi/common/constant/UserConstants.java | 6 +- .../ruoyi/framework/config/ShiroConfig.java | 2 + .../shiro/service/SysPasswordService.java | 9 + 11 files changed, 460 insertions(+), 112 deletions(-) diff --git a/oms_web/oms_vue/src/api/login.js b/oms_web/oms_vue/src/api/login.js index 186420d9..59a829a2 100644 --- a/oms_web/oms_vue/src/api/login.js +++ b/oms_web/oms_vue/src/api/login.js @@ -1,5 +1,11 @@ import request from '@/utils/request' +function createLoginFormData(data) { + const formData = new FormData() + Object.keys(data).forEach(key => formData.append(key, data[key])) + return formData +} + // 登录方法 - 基于 Session 认证,使用 FormData 格式 export function login(username, password, code, rememberMe) { const formData = new FormData() @@ -9,6 +15,41 @@ export function login(username, password, code, rememberMe) { formData.append('rememberMe', rememberMe || false) return request({ url: '/login', + headers: { + isToken: false, + 'Content-Type': 'multipart/form-data', + repeatSubmit: false, + allowWarning: true + }, + method: 'post', + data: formData + }) +} + +export function resetLoginPwd(data) { + const formData = createLoginFormData({ + username: data.username, + oldPassword: data.oldPassword, + newPassword: data.newPassword, + confirmPassword: data.confirmPassword, + emailCode: data.emailCode + }) + return request({ + url: '/login/resetPwd', + headers: { + isToken: false, + 'Content-Type': 'multipart/form-data', + repeatSubmit: false + }, + method: 'post', + data: formData + }) +} + +export function sendResetPwdEmailCode(username) { + const formData = createLoginFormData({ username }) + return request({ + url: '/login/sendResetPwdEmailCode', headers: { isToken: false, 'Content-Type': 'multipart/form-data', diff --git a/oms_web/oms_vue/src/store/modules/user.js b/oms_web/oms_vue/src/store/modules/user.js index 71852f98..f4cb14c3 100644 --- a/oms_web/oms_vue/src/store/modules/user.js +++ b/oms_web/oms_vue/src/store/modules/user.js @@ -52,7 +52,7 @@ const user = { const rememberMe = userInfo.rememberMe return new Promise((resolve, reject) => { login(username, password, code, rememberMe).then(res => { - resolve() + resolve(res) }).catch(error => { reject(error) }) @@ -60,17 +60,16 @@ const user = { }, // 获取用户信息 - GetInfo({ commit, state }) { + GetInfo({ commit }) { return new Promise((resolve, reject) => { getInfo().then(res => { - // 后端返回的数据在 res.data 中 const data = res.data || res const user = data.user - let avatar = user.avatar? '/common/download/resource?resource='+encodeURIComponent(user.avatar) : "" + let avatar = user.avatar ? '/common/download/resource?resource=' + encodeURIComponent(user.avatar) : "" if (!isHttp(avatar)) { avatar = (isEmpty(avatar)) ? defAva : process.env.VUE_APP_BASE_API + avatar } - if (data.roles && data.roles.length > 0) { // 验证返回的roles是否是一个非空数组 + if (data.roles && data.roles.length > 0) { commit('SET_ROLES', data.roles) commit('SET_PERMISSIONS', data.permissions) } else { @@ -82,15 +81,13 @@ const user = { commit('SET_NAME', user.loginName) commit('SET_NICK_NAME', user.userName) commit('SET_AVATAR', avatar) - /* 初始密码提示 */ - if(data.isDefaultModifyPwd) { - MessageBox.confirm('您的密码还是初始密码,请修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { + if (data.isDefaultModifyPwd) { + MessageBox.confirm('您的密码还是初始密码,请修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } }) }).catch(() => {}) } - /* 过期密码提示 */ - if(!data.isDefaultModifyPwd && data.isPasswordExpired) { - MessageBox.confirm('您的密码已过期,请尽快修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { + if (!data.isDefaultModifyPwd && data.isPasswordExpired) { + MessageBox.confirm('您的密码已过期,请尽快修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } }) }).catch(() => {}) } @@ -102,7 +99,7 @@ const user = { }, // 退出系统 - 基于 Session 认证 - LogOut({ commit, state }) { + LogOut({ commit }) { return new Promise((resolve, reject) => { logout().then(() => { commit('SET_ROLES', []) diff --git a/oms_web/oms_vue/src/utils/request.js b/oms_web/oms_vue/src/utils/request.js index e8d13767..3d3e027e 100644 --- a/oms_web/oms_vue/src/utils/request.js +++ b/oms_web/oms_vue/src/utils/request.js @@ -110,6 +110,8 @@ service.interceptors.response.use(res => { } else if (code === 601) { Message({ message: msg, type: 'warning' }) return Promise.reject('error') + } else if (code === 301 && res.config.headers && res.config.headers.allowWarning) { + return res.data } else if (code !== 200) { Notification.error({ title: msg }) return Promise.reject('error') diff --git a/oms_web/oms_vue/src/views/login.vue b/oms_web/oms_vue/src/views/login.vue index 6b2f50ba..a08f16d8 100644 --- a/oms_web/oms_vue/src/views/login.vue +++ b/oms_web/oms_vue/src/views/login.vue @@ -54,6 +54,37 @@ + + + + + + + + + + + + + + + {{ emailCodeCountdown > 0 ? emailCodeCountdown + '秒后重发' : '发送验证码' }} + + +
密码长度8-20位,需包含大小写字母、数字、特殊字符
+
+ +