You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

413 lines
16 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. <template>
  2. <div>
  3. <el-dropdown class="avatar-container right-menu-item hidden-sm-and-down" trigger="click" @command="handleCommand" @click.native="onDropdownClick">
  4. <div class="avatar-wrapper">
  5. <img v-if="userInfo && userInfo.headimgurl" class="user-avatar" :src="userInfo.headimgurl">
  6. <img v-else class="user-avatar" src="../../../assets/image/user_img.gif">
  7. <span class="username">{{getTimeStatus}}<b>{{userInfo.username}}</b></span>
  8. <i class="el-icon-caret-bottom"></i>
  9. </div>
  10. <el-dropdown-menu slot="dropdown" style="width:460px;">
  11. <div class="dropdown">
  12. <div class="topBox">
  13. <div class="topBox_logo" v-if="userInfo.memType!=='0'">
  14. <img v-if="!branchUsersCount || !branchUsersCount.imgUrl" src="../../../assets/image/image_not_found_small.jpg" alt="">
  15. <img v-else :src="branchUsersCount.imgUrl" alt="">
  16. </div>
  17. <div class="topBox_logo" v-else>
  18. <img v-if="userInfo && userInfo.headimgurl" class="user-avatar" :src="userInfo.headimgurl">
  19. <img v-else class="user-avatar" src="../../../assets/image/user_img.gif">
  20. </div>
  21. <div class="topBox_desc">
  22. <p class="topBox_branch">{{userInfo.branchName?userInfo.branchName:''}}</p>
  23. <div class="topBox_version">
  24. <span>账户类型 /
  25. <b class="version" v-if="userInfo.memType==='0' && userInfo.atype==='1'"> 个人主账户 </b>
  26. <b class="version" v-else-if="userInfo.memType==='0' && userInfo.atype==='0'"> 个人子账户 </b>
  27. <b class="version" v-else-if="userInfo.memType==='1'"> 企业管理员账户 </b>
  28. <b class="version" v-else-if="userInfo.memType==='2'"> 企业员工账户 </b>
  29. </span>
  30. <span class="level" v-if="userInfo.memType==='0'" @click="upgradeToBranchAccount">
  31. <i class="el-icon-upload2"></i>
  32. <span @click="upgradeToBranchAccount">升级</span>
  33. </span>
  34. </div>
  35. <div class="topBox_num">
  36. <span @click="getBranchInterestsDetail">账号数量 <span v-if="branchUsersCount && branchUsersCount.branchId">( {{branchUsersCount.currUsers }} / {{branchUsersCount.maxUsers}} )个</span> <i class="el-icon-refresh-right"></i></span>
  37. </div>
  38. </div>
  39. </div>
  40. <div class="middleBox">
  41. <p class="middleBox_username">用户名称<b>{{userInfo.username}}</b> </p>
  42. <div class="middleBox_role">
  43. <span>我的角色</span>
  44. <span class="middleBox_role_name">
  45. <a> {{getMyRoleNames()}} </a>
  46. </span>
  47. </div>
  48. <div class="middleBox_role">
  49. <span>会员等级</span>
  50. <span class="middleBox_role_name">
  51. <a v-if="!userInfo.ilvlId || userInfo.ilvlId=='1'"> {{userInfo.ilvlName?userInfo.ilvlName:'普通会员'}} </a>
  52. <a v-else-if="userInfo.ilvlId=='2'"> {{userInfo.ilvlName?userInfo.ilvlName:'青铜会员'}} </a>
  53. <a v-else-if="userInfo.ilvlId=='3'"> {{userInfo.ilvlName?userInfo.ilvlName:'白银会员'}} </a>
  54. <a v-else-if="userInfo.ilvlId=='4'"> {{userInfo.ilvlName?userInfo.ilvlName:'黄金会员'}} </a>
  55. <a v-else-if="userInfo.ilvlId=='5'"> {{userInfo.ilvlName?userInfo.ilvlName:'紫金会员'}} </a>
  56. <a v-else-if="userInfo.ilvlId=='6'"> {{userInfo.ilvlName?userInfo.ilvlName:'皇冠会员'}} </a>
  57. </span>
  58. </div>
  59. <div class="middleBox_role">
  60. <span>能力等级</span>
  61. <span class="middleBox_role_name">
  62. <a v-if="!userInfo.gradeId || userInfo.gradeId=='1'"> {{userInfo.ilvlName?userInfo.ilvlName:'普通会员'}} </a>
  63. <a v-else-if="userInfo.ilvlId=='2'"> {{userInfo.ilvlName?userInfo.ilvlName:'青铜会员'}} </a>
  64. <a v-else-if="userInfo.ilvlId=='3'"> {{userInfo.ilvlName?userInfo.ilvlName:'白银会员'}} </a>
  65. <a v-else-if="userInfo.ilvlId=='4'"> {{userInfo.ilvlName?userInfo.ilvlName:'黄金会员'}} </a>
  66. <a v-else-if="userInfo.ilvlId=='5'"> {{userInfo.ilvlName?userInfo.ilvlName:'紫金会员'}} </a>
  67. <a v-else-if="userInfo.ilvlId=='6'"> {{userInfo.ilvlName?userInfo.ilvlName:'皇冠会员'}} </a>
  68. </span>
  69. </div>
  70. </div>
  71. <div class="bottomBox2">
  72. <!--<p class="el-icon-menu" @click="handleCommand('myWork')">我的工作台</p> -->
  73. <p class="el-icon-user" @click="switchUser">切换账户</p>
  74. <p class="el-icon-edit" @click="handleCommand('updateUserInfo')">账户明细</p>
  75. <p class="el-icon-user-solid" @click="handleCommand('branchSet')">团队管理</p>
  76. <p @click="logout" class="el-icon-switch-button">退出登录</p>
  77. </div>
  78. </div>
  79. </el-dropdown-menu>
  80. </el-dropdown>
  81. <el-dialog
  82. title="请选择一个账户进行登录"
  83. :visible.sync="phonenoUsersVisible"
  84. width="600" append-to-body>
  85. <el-table :data="phonenoUsers">
  86. <el-table-column prop="displayUserid" label="登录账号">
  87. </el-table-column>
  88. <el-table-column prop="username" label="姓名">
  89. </el-table-column>
  90. <el-table-column prop="branchName" label="企业">
  91. </el-table-column>
  92. <el-table-column label="操作">
  93. <template slot-scope="scope">
  94. <el-button type="primary" @click="toLogin(scope.row)">登录222</el-button>
  95. </template>
  96. </el-table-column>
  97. </el-table>
  98. </el-dialog>
  99. <el-dialog
  100. title="新增机构"
  101. :visible.sync="branchAddVisible"
  102. width="60%"
  103. append-to-body
  104. top="20px"
  105. :close-on-click-modal="false"
  106. >
  107. <branch-add
  108. :branch="{id:userInfo.branchId,branchName:'',admUserid:userInfo.branchId,admUsername:userInfo.username,luserid:userInfo.userid,lusername:userInfo.username}"
  109. op-type="add"
  110. :visible="branchAddVisible"
  111. @cancel="branchAddVisible=false"
  112. @submit="afterAddSubmit"
  113. ></branch-add>
  114. </el-dialog>
  115. </div>
  116. </template>
  117. <script>
  118. import NProgress from 'nprogress' // progress bar
  119. import config from '../../../common/config';
  120. import { setToken,removeCacheUserInfo} from '@/utils/auth'
  121. import { mapGetters } from 'vuex'
  122. import dayjs from 'dayjs'
  123. import md5 from 'js-md5';
  124. import { queryMyUsers,switchUser } from '@/api/login';
  125. import { getBranchInterestsDetail } from '@/api/branch';
  126. import BranchAdd from "@/views/mdp/sys/branch/BranchEdit";
  127. export default {
  128. data() {
  129. return {
  130. branchAddVisible:false,
  131. phonenoUsers:[],
  132. phonenoUsersVisible:false,
  133. branchUsersCount:{
  134. branchId:'',
  135. currUsers:1,
  136. maxUsers:100,
  137. imgUrl:'',
  138. defalut:1,
  139. }
  140. }
  141. },
  142. computed: {
  143. ...mapGetters([
  144. 'userInfo',
  145. 'roles',
  146. 'myPosts'
  147. ]),
  148. getTimeStatus() {
  149. let hour = dayjs().hour();
  150. let msg = '早上好';
  151. if(hour >= 13 || hour <= 18) {
  152. msg = '下午好';
  153. }else if (hour >= 19 || hour <= 24){
  154. msg = '晚上好';
  155. }
  156. return msg;
  157. }
  158. },
  159. methods: {
  160. onDropdownClick(){
  161. if( this.branchUsersCount.defalut||this.branchUsersCount.branchId!=this.userInfo.branchId){
  162. this.getBranchInterestsDetail();
  163. }
  164. },
  165. getBranchInterestsDetail(){
  166. getBranchInterestsDetail().then(res=>this.branchUsersCount=res.data.data||this.branchUsersCount)
  167. },
  168. getMyRoleNames(){
  169. if(this.roles && this.roles.length>0){
  170. var myRoles=this.roles.filter(i=>i.roleid.indexOf('SCOPE')<0);
  171. return myRoles.map(i=>i.rolename).join(",")
  172. }
  173. },
  174. switchUser(){
  175. queryMyUsers().then(res0=>{
  176. if(res0.data.tips.isOk){
  177. this.phonenoUsers=res0.data.data;
  178. if(res0.data.data.length<=1){
  179. this.$notify.warning("当前没有关联的账户,无须切换");
  180. }else{
  181. this.phonenoUsersVisible=true;
  182. }
  183. }else{
  184. this.$notify.error(res0.data.tips.msg);
  185. }
  186. })
  187. },
  188. handleCommand(command){
  189. if(process.env.CONTEXT=='sys'){
  190. if(command=='updateUserInfo'){
  191. this.$router.push({path:'/my/work/updateUserInfo'})
  192. }
  193. if(command=='myWork'){
  194. this.$router.push({path:'/my/work/index'})
  195. }
  196. if(command=='branchSet'){
  197. this.$router.push({path:'/mdp/sys/branch/branchSet'})
  198. }
  199. }else{
  200. var prefixUrl=config.getBaseDomainUrl()+'/sys/'+process.env.VERSION+'/#/'
  201. if(command=='updateUserInfo'){
  202. window.open(prefixUrl+'my/work/updateUserInfo')
  203. NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it
  204. }
  205. if(command=='myWork'){
  206. this.$router.push({path:'/my/work/index'})
  207. }
  208. if(command=='branchSet'){
  209. window.open(prefixUrl+'mdp/sys/branch/branchSet')
  210. NProgress.done()
  211. }
  212. }
  213. },
  214. upgradeToBranchAccount(){
  215. //跳转到购买模块页面
  216. this.branchAddVisible=true;
  217. },
  218. afterAddSubmit(){
  219. },
  220. toLogin(user) {
  221. debugger;
  222. this.$prompt('请输入密码', '提示', {
  223. confirmButtonText: '确定',
  224. cancelButtonText: '取消',
  225. }).then(({ value }) => {
  226. let params={
  227. password:md5(value),
  228. userloginid:user.userid,
  229. authType:'password_display_userid' ,
  230. grantType:"password"
  231. }
  232. debugger;
  233. //userloginid, password,grantType,authType,deptid,userid
  234. switchUser(params.userloginid,params.password,params.grantType,params.authType,'',params.userloginid).then(res => {
  235. this.phonenoUsersVisible=false;
  236. if(res.data.tips.isOk==true){
  237. setToken( res.data.data.accessToken.tokenValue)
  238. removeCacheUserInfo();
  239. this.$store.dispatch('GetUserInfo').then((res2)=>{
  240. this.$router.push({ path: '/' });
  241. }).catch(err=>{
  242. });
  243. }else{
  244. this.$notify.error(res.data.tips.msg);
  245. }
  246. }).catch((e) => {
  247. })
  248. }).catch(() => {
  249. this.phonenoUsersVisible=false;
  250. });
  251. },
  252. logout() {
  253. this.$store.dispatch('LogOut').then(() => {
  254. location.replace('/'+process.env.CONTEXT+'/'+process.env.VERSION+'/');
  255. })
  256. },
  257. },
  258. components:{
  259. BranchAdd
  260. },
  261. mounted() {
  262. }
  263. }
  264. </script>
  265. <style lang="scss" scoped>
  266. .avatar-container {
  267. height: 50px;
  268. display: flex;
  269. align-items: center;
  270. .avatar-wrapper {
  271. cursor: pointer;
  272. display: flex;
  273. flex-direction: row;
  274. align-items: center;
  275. .user-avatar {
  276. height: 34px;
  277. width: 34px;
  278. border-radius: 50%;
  279. margin-right: 12px;
  280. }
  281. .username{
  282. color: #7D7D7D;
  283. font-size: 18px;
  284. margin-right: 2px;
  285. }
  286. .el-icon-caret-bottom {
  287. font-size: 22px;
  288. }
  289. }
  290. }
  291. .dropdown {
  292. padding: 0 20px 0 20px;
  293. .topBox {
  294. height: 100px;
  295. display: flex;
  296. flex-direction: row;
  297. border-bottom: 1px solid #f6f6f6;
  298. .topBox_logo {
  299. display: flex;
  300. justify-content: center;
  301. align-items: center;
  302. img {
  303. width: 52px;
  304. height: 52px;
  305. }
  306. }
  307. .topBox_desc {
  308. display: flex;
  309. flex-direction: column;
  310. margin-left: 20px;
  311. width: 100%;
  312. justify-content: center;
  313. .topBox_branch {
  314. font-size: 18px;
  315. margin-bottom: 8px;
  316. }
  317. .topBox_version {
  318. display: flex;
  319. flex-direction: row;
  320. margin-bottom: 8px;
  321. font-size: 14px;
  322. .version {
  323. display: inline-block;
  324. font-weight: normal;
  325. color: rgb(69, 196, 186);
  326. margin-top: 4px;
  327. }
  328. .level {
  329. background: rgb(64, 158, 255);
  330. margin-left: 10px;
  331. padding: 4px 11px 4px 8px;
  332. border-radius: 2px;
  333. color: #fff;
  334. cursor: pointer;
  335. }
  336. }
  337. .topBox_num {
  338. font-size: 14px;
  339. cursor: pointer;
  340. }
  341. }
  342. }
  343. .middleBox {
  344. min-height: 60px;
  345. border-bottom: 1px solid #f6f6f6;
  346. padding: 12px 0;
  347. .middleBox_username {
  348. margin-bottom: 6px;
  349. b {
  350. font-weight: normal;
  351. color: #606060;
  352. }
  353. }
  354. .middleBox_role {
  355. display: flex;
  356. flex-direction: row;
  357. flex-wrap: wrap;
  358. line-height: 28px;
  359. .middleBox_role_name {
  360. color: #606060;
  361. }
  362. }
  363. }
  364. .bottomBox2 {
  365. height: 120px;
  366. display: flex;
  367. flex-direction: column;
  368. justify-content: center;
  369. align-items: center;
  370. p {
  371. display: flex;
  372. cursor: pointer;
  373. width: 100%;
  374. height: 40px;
  375. text-align: left;
  376. align-items: center;
  377. }
  378. p:hover {
  379. background: rgb(243, 243, 243);
  380. }
  381. }
  382. }
  383. </style>