Source/UBCS-WEB/src/api/user.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Source/UBCS-WEB/src/page/index/logo.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Source/UBCS-WEB/src/page/login/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Source/UBCS-WEB/src/page/login/userlogin.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Source/UBCS-WEB/src/router/router.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Source/UBCS-WEB/src/store/modules/user.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Source/UBCS-WEB/src/views/wel/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Source/UBCS-WEB/src/api/user.js
@@ -116,5 +116,12 @@ url: '/api/blade-system/tenant/tenant-map', method: 'get', }); // 提醒时间 export const check = (userid) => request({ url: '/api/blade-user/tenant/check-renexpr', method: 'post', params:{ userid } }) Source/UBCS-WEB/src/page/index/logo.vue
@@ -2,9 +2,8 @@ <div class="avue-logo"> <transition name="fade"> <span v-if="keyCollapse" class="avue-logo_subtitle" key="0"> {{ website.logo }} <img src="favicon.png" class="logimg"> </span> </transition> <transition-group name="fade"> @@ -94,4 +93,9 @@ top: 15px; left: 37px; } .logimg{ position: absolute; top: 20px; left: 12px; } </style> Source/UBCS-WEB/src/page/login/index.vue
@@ -8,7 +8,7 @@ <div class="login-time"> {{time}} </div> <p class="title">{{ $t('login.info') }}</p> <p class="title">UBCS 统一业务协同平台</p> <div style="font-size: 15px"> <span>----------------------------------------------</span> <br> Source/UBCS-WEB/src/page/login/userlogin.vue
@@ -1,10 +1,11 @@ <template> <el-form class="login-form" status-icon :rules="loginRules" ref="loginForm" <div> <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" label-width="0" status-icon > <el-form-item prop="selectInput"> @@ -19,51 +20,86 @@ </el-select> </el-form-item> <el-form-item prop="username"> <el-input size="small" @keyup.enter.native="handleLogin" v-model="loginForm.username" <el-input v-model="loginForm.username" :placeholder="$t('login.username')" auto-complete="off" :placeholder="$t('login.username')"> size="small" @keyup.enter.native="handleLogin"> <i slot="prefix" class="icon-yonghu"/> </el-input> </el-form-item> <el-form-item prop="password"> <el-input size="small" @keyup.enter.native="handleLogin" <el-input v-model="loginForm.password" :placeholder="$t('login.password')" :type="passwordType" v-model="loginForm.password" auto-complete="off" :placeholder="$t('login.password')"> <i class="el-icon-view el-input__icon" slot="suffix" @click="showPassword"/> size="small" @keyup.enter.native="handleLogin"> <i slot="suffix" class="el-icon-view el-input__icon" @click="showPassword"/> <i slot="prefix" class="icon-mima"/> </el-input> </el-form-item> <el-form-item> <el-button type="primary" <el-button class="login-submit" size="small" @click.native.prevent="handleLogin" class="login-submit">{{$t('login.submit')}} type="primary" @click.native.prevent="handleLogin">{{ $t('login.submit') }} </el-button> </el-form-item> <!--密码修改弹出框--> </el-form> <el-dialog title="修改密码" :visible.sync="dialogFormVisible" append-to-body > <el-form :model="form" :rules="rules"> <el-form-item label="原密码" :label-width="formLabelWidth" prop="oldname"> <el-input v-model="form.oldPassword" autocomplete="off"></el-input> </el-form-item> <el-form-item label="新密码" :label-width="formLabelWidth" prop="newname"> <el-input v-model="form.newPassword" autocomplete="off"></el-input> </el-form-item> <el-form-item label="确认密码" :label-width="formLabelWidth" prop="newname1"> <el-input v-model="form.newPassword1" autocomplete="off"></el-input> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="dialogFormVisible = false">取 消</el-button> <el-button type="primary" @click="addok">确 定</el-button> </div> </el-dialog> </div> </template> <script> import {mapGetters} from "vuex"; import {info} from "@/api/system/tenant"; import {getTopUrl} from "@/util/util"; import {updatePassword} from "@/api/system/user.js" import md5 from "js-md5"; export default { name: "userlogin", data() { return { tenantMode: this.website.tenantMode, ButtonList:[], dialogFormVisible:false, form: { oldPassword: '', newPassword: '', newPassword1: '', }, rules: { oldname: [ { required: true, message: '请输入原密码', trigger: 'blur' } ], newname:[ { required: true, message: '请输入新密码', trigger: 'blur' } ], newname1:[ { required: true, message: '请输确认密码', trigger: 'blur' } ] }, loginForm: { //租户ID tenantId: "000000", @@ -106,6 +142,7 @@ deptId: '', roleId: '' }, userinfo: [] }; }, created() { @@ -144,6 +181,19 @@ }, props: [], methods: { addok(){ this.dialogFormVisible = false updatePassword(md5(this.form.oldPassword), this.form.newPassword, this.form.newPassword1).then(res=>{ if(res.data.code==200){ this.$message({ type:"success", message:"修改成功!" }) this.$router.push({path: this.tagWel.value}) } }) }, // 绑定下拉菜单动态ID selectchange(value) { this.loginForm.tenantId=value @@ -163,8 +213,10 @@ } this.handleLogin(); done(); }, handleLogin() { handleLogin: function () { this.userInfo = this.$store.state.upadatastatus this.$refs.loginForm.validate(valid => { if (valid) { const loading = this.$loading({ @@ -173,6 +225,7 @@ spinner: "el-icon-loading" }); this.$store.dispatch("LoginByUsername", this.loginForm).then(() => { if (this.userInfo.strategyUpdateStatus != 0) { if (this.website.switchMode) { const deptId = this.userInfo.dept_id; const roleId = this.userInfo.role_id; @@ -183,10 +236,21 @@ this.$store.dispatch("LogOut").then(() => { loading.close(); }); return false; } return false } this.$router.push({path: this.tagWel.value}); } else { this.$message({ type: "warning", message: "密码策略已被修改,请重新修改密码!" }) setTimeout(()=>{ this.dialogFormVisible=true },1500) } console.log(this.userInfo) loading.close(); }).catch(() => { loading.close(); Source/UBCS-WEB/src/router/router.js
@@ -35,7 +35,7 @@ router: Router, store: Store, i18n: i18n, keepAlive: false, }); } export default Router Source/UBCS-WEB/src/store/modules/user.js
@@ -43,6 +43,7 @@ menuAll: getStore({name: 'menuAll'}) || [], token: getStore({name: 'token'}) || '', refreshToken: getStore({name: 'refreshToken'}) || '', upadatastatus:[] }, actions: { //根据用户名登录 @@ -263,6 +264,8 @@ setStore({name: 'tenantId', content: state.tenantId}) }, SET_USER_INFO: (state, userInfo) => { console.log('hahahha',userInfo) state.upadatastatus=userInfo if (validatenull(userInfo.avatar)) { userInfo.avatar = "/img/bg/img-logo.png"; } Source/UBCS-WEB/src/views/wel/index.vue
@@ -25,117 +25,21 @@ </el-row> <el-row> <el-col :span="16"> <basic-container> <el-collapse v-model="activeNames" @change="handleChange"> <el-collapse-item title="欢迎使用Saber" name="1"> <div>1.Saber是BladeX前端UI系统</div> <div>2.对现有的avue2.0、element-ui库进行二次封装</div> <div>3.100%兼容原生element-ui库</div> <div>4.基于json驱动的模块配置,打造最好用的vuejs中后台脚手架</div> <div>5.使用Saber可以大幅度提升开发效率,不再为重复工作发愁</div> <basic-container class="aaa"> <el-collapse v-model="activeNames" @change="handleChange" class="fontcoll"> <el-collapse-item title="欢迎使用UBCS" name="1"> <div style="font-size: 16px">1.UBCS是一款精心设计的微服务架构,提供 SpringCloud 全套解决方案,完美集成 SpringCloud Alibaba 系列组件</div> <div style="font-size: 16px">2.UBCS是为企业提供统一业务协同系统平台</div> <div style="font-size: 16px">3.UBCS追求企业开发更加高效,部署更加方便,生产更加稳定</div> <div style="font-size: 16px">4.系统实现一套代码兼容MySql、Oracle、PostgreSQL、SqlServer、达梦,适应企业各种不同场景的需求</div> <div style="font-size: 16px">5.集成了很多企业急切所需的例如多租户、Oauth2授权认证、工作流、分布式事务等等功能</div> <div style="font-size: 16px">5.系统深度定制了Flowable工作流,完美支持SpringCloud分布式服务的场景,以远程调用的方式进行操作</div> </el-collapse-item> <el-collapse-item title="什么是BladeX" name="2"> <div>1.BladeX是一款精心设计的微服务架构,提供 SpringCloud 全套解决方案</div> <div>2.开源中国首批完美集成 SpringCloud Alibaba 系列组件的微服务架构</div> <div>3.基于稳定生产的商业项目升级优化而来,更加贴近企业级的需求</div> <div>4.追求企业开发更加高效,部署更加方便,生产更加稳定</div> <div>5.GVP-码云最有价值开源项目</div> <div>6.BladeX授权地址:<a target="_blank" href="https://bladex.vip/#/vip">点击授权</a></div> </el-collapse-item> <el-collapse-item title="为何需要BladeX" name="3"> <div>1.经历过较长的线上生产,积累了很多企业痛点的解决方案</div> <div>2.一套代码兼容MySql、Oracle、PostgreSQL、SqlServer、达梦,适应企业各种不同场景的需求</div> <div>3.集成了很多企业急切所需的例如多租户、Oauth2授权认证、工作流、分布式事务等等功能</div> <div>4.深度定制了Flowable工作流,完美支持SpringCloud分布式服务的场景,以远程调用的方式进行操作</div> <div>5.升级了核心驱动,新功能完全可以开箱即用,而开源版需要自己再花时间进行集成,需要花掉更多的时间成本</div> <div>6.拥抱微服务时代,很多企业由于项目转型或升级,传统的技术已然不能满足,反而会花更多成本,而BladeX就是为此而生</div> <div>7.同时提供SpringCloud版本和SpringBoot版本,两个版本的api可以与Sword和Saber无缝对接,为小型项目至大型项目保驾护航</div> <div>8.授权购买即永久,源码没有混淆,完全开放,后续升级完全免费。企业只需花很少的钱即可获得一整套成熟的解决方案,你还在等什么?</div> </el-collapse-item> <el-collapse-item title="拥有的核心功能" name="4"> <div>1.前后端分离-采用前后端分离模式,前端提供两套架构,Sword基于React,Saber基于Vue</div> <div>2. 分布式单体式后端架构-提供两套后端架构,基于SpringCloud的分布式架构以及基于SpringBoot的单体式架构</div> <div>3.API完全兼容-两套后端架构与两套前端架构,共四套架构可以任意组合,所有API完全兼容</div> <div>4.前后端代码生成-定制针对两套前端与后端的代码生成模板,轻松生成整个模块的前后端代码,减少重复工作量</div> <div>5.组件化、插件化架构-针对功能深度定制各个starter,引入开箱即用,为整个架构解耦,提升效率</div> <div>6.Nacos-集成阿里巴巴的Nacos完成统一的服务注册与配置</div> <div>7.Sentinel-集成Sentinel从流量控制、熔断降级、系统负载等多个维度保护服务的稳定性</div> <div>8.Dubbo-完美集成Dubbo最新版,支持远程RPC调用</div> <div>9.多租户系统-完整的SaaS多租户架构</div> <div>10.Oauth2-集成Oauth2协议,完美支持多终端的接入与认证授权</div> <div>11.工作流-深度定制SpringCloud分布式场景的Flowable工作流,为复杂流程保驾护航。同时提供SpringBoot集成版本</div> <div>12.独立流程设计器-提供独立的完全汉化的流程设计器,轻松定制流程模型</div> <div>13.动态网关-集成基于Nacos的轻量级、高拓展性动态网关</div> <div>14.动态聚合文档-实现基于Nacos的Swagger SpringCloud聚合文档</div> <div>15.分布式文件服务-集成minio、qiniu、alioss等优秀的第三方,提供便捷的文件上传与管理</div> <div>16.多租户对象存储系统-在SaaS系统中,各租户可自行配置文件上传至自己的私有OSS</div> <div>17.权限管理-精心设计的权限管理方案,角色权限精确到按钮</div> <div>18.动态数据权限-高度灵活的动态数据权限,提供注解+Web可视化两种配置方式,Web配置无需重启直接生效</div> <div>19.动态接口权限-高度灵活的动态接口权限,提供注解+Web可视化两种配置方式,Web配置无需重启直接生效</div> <div>20.多租户顶部菜单配置-提供给每个租户独立的顶部菜单配置模块,可以自定义顶部菜单切换</div> <div>21.主流数据库兼容-一套代码完全兼容Mysql、Postgresql、Oracle三大主流数据库</div> <div>22.动态网关鉴权-基于Nacos的动态网关鉴权,可在线配置,实时生效</div> <div>23.全能代码生成器-支持自定义模型、模版 、业务建模,支持多种模板引擎,在线配置。大幅度提升开发效率,不再为重复工作发愁</div> <div>24.Seata分布式事务-定制集成Seata,支持分布式事务,无代码侵入,不失灵活与简洁</div> <div>25.未完待续...</div> </el-collapse-item> <el-collapse-item title="软件定制开发合作" name="5"> <div>1.接BladeX系列架构的定制服务</div> <div>2.接3个月以内工期的react、vue、springboot、springcloud、app、小程序等软件定制服务</div> <div>3.有意向请联系唯一指定QQ:1272154962</div> </el-collapse-item> </el-collapse> </basic-container> </el-col> <el-col :span="8"> <el-row> <basic-container> <div class="el-font-size"> <span>产品名称</span> <el-divider direction="vertical"/> <span><el-tag>BladeX企业级微服务开发平台</el-tag></span> <el-divider content-position="right"><i class="el-icon-star-off"/></el-divider> <span>账号密码</span> <el-divider direction="vertical"/> <el-tag type="info" effect="plain">人事(hr)</el-tag> <el-divider direction="vertical"/> <el-tag type="success" effect="plain">经理(manager)</el-tag> <el-divider direction="vertical"/> <el-tag type="warning" effect="plain">老板(boss)</el-tag> <el-divider content-position="right"><i class="el-icon-star-off"/></el-divider> <span>官网地址</span> <el-divider direction="vertical"/> <span><el-link href="https://bladex.vip" target="_blank" type="primary">https://bladex.vip</el-link></span> <el-divider content-position="right"><i class="el-icon-star-off"/></el-divider> <span>社区地址</span> <el-divider direction="vertical"/> <span><el-link href="https://sns.bladex.vip" target="_blank" type="primary">https://sns.bladex.vip</el-link></span> <el-divider content-position="right"><i class="el-icon-star-off"/></el-divider> <span>获取文档</span> <el-divider direction="vertical"/> <span class="tag-group"> <el-tag type="success" style="cursor: pointer" onclick="window.open('https://sns.bladex.vip/note/view/1.html')">免费版</el-tag> <el-divider direction="vertical"/> <el-tooltip class="item" effect="dark" content="前往商业群文件免费下载,每份授权有一个名额入群" placement="top"> <el-tag type="danger" style="cursor: pointer">收费版</el-tag> </el-tooltip> </span> <el-divider content-position="right"><i class="el-icon-star-off"/></el-divider> <span>获取源码</span> <el-divider direction="vertical"/> <span class="tag-group"> <el-tag type="success" effect="dark" style="cursor: pointer" onclick="window.open('https://gitee.com/smallc/SpringBlade')">开源版</el-tag> <el-divider direction="vertical"/> <el-tag type="danger" effect="dark" style="cursor: pointer" onclick="window.open('https://bladex.vip/#/vip')">商业版</el-tag> </span> </div> </basic-container> </el-row> <el-row> <basic-container> <el-collapse v-model="logActiveNames" @change="handleChange"> @@ -771,8 +675,13 @@ data() { return { activeNames: ['1', '2', '3', '5'], logActiveNames: ['28'] logActiveNames: ['28'], aaa:[] }; }, created() { this.aaa=this.$store.state.upadatastatus console.log(this.aaa) }, computed: { ...mapGetters(["userInfo"]), @@ -789,5 +698,6 @@ .el-font-size { font-size: 14px; } </style>