Home.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <template>
  2. <el-container>
  3. <el-header style="padding: 0"
  4. ><el-menu class="el-menu-demo" mode="horizontal">
  5. <el-menu-item index="1">
  6. <router-link to="/home/overview"> 云平台 </router-link></el-menu-item
  7. >
  8. <el-submenu index="2" style="float: right" class="fr">
  9. <template slot="title">{{ user.rootOrgName }}</template>
  10. <el-menu-item index="2-1" style="width: 100px">
  11. <a href="javascript:void(0)" @click="openUserDialog">
  12. {{ user.displayName }}
  13. </a></el-menu-item
  14. >
  15. <el-menu-item index="2-2" style="width: 100px"
  16. ><a href="javascript:void(0)" @click="logout">
  17. <span>退出</span>
  18. </a></el-menu-item
  19. >
  20. </el-submenu>
  21. </el-menu>
  22. </el-header>
  23. <el-container>
  24. <HomeSide :key="$route.path" />
  25. <el-container>
  26. <router-view></router-view>
  27. <el-footer>&copy; 启明泰和 2018</el-footer>
  28. </el-container>
  29. </el-container>
  30. <!-- 添加用户信息弹出框 -->
  31. <el-dialog title="个人信息" :visible.sync="userDialog">
  32. <el-tabs>
  33. <el-tab-pane label="用户权限" name="first">
  34. <el-form :inline="true" label-position="right" label-width="90px">
  35. <el-row :gutter="10">
  36. <el-col>
  37. <el-tag
  38. v-for="role in user.roleList"
  39. :key="role.roleId"
  40. type="primary"
  41. style="margin-left:10px;margin-top:10px;"
  42. >
  43. {{ role.roleName }}
  44. </el-tag>
  45. </el-col>
  46. </el-row>
  47. </el-form>
  48. </el-tab-pane>
  49. <el-tab-pane label="修改密码" name="second">
  50. <el-form
  51. :inline="true"
  52. :model="passForm"
  53. ref="passForm"
  54. :rules="passRules"
  55. label-position="right"
  56. label-width="90px"
  57. >
  58. <el-row>
  59. <el-form-item label="密码" label-width="120px" prop="pass">
  60. <el-input
  61. type="password"
  62. class="pull_length"
  63. v-model="passForm.pass"
  64. auto-complete="off"
  65. placeholder="请输入密码"
  66. ></el-input>
  67. </el-form-item>
  68. </el-row>
  69. <el-row>
  70. <el-form-item
  71. label="确认密码"
  72. label-width="120px"
  73. prop="checkPass"
  74. >
  75. <el-input
  76. type="password"
  77. class="pull_length"
  78. v-model="passForm.checkPass"
  79. auto-complete="off"
  80. placeholder="请输入确认密码"
  81. ></el-input>
  82. </el-form-item>
  83. </el-row>
  84. <el-row style="margin-left:100px">
  85. <el-button type="primary" @click="submitForm">保 存</el-button>
  86. <el-button @click="userDialog = false;">取 消</el-button>
  87. </el-row>
  88. </el-form>
  89. </el-tab-pane>
  90. </el-tabs>
  91. </el-dialog>
  92. </el-container>
  93. </template>
  94. <script>
  95. import { mapActions, mapState } from "vuex";
  96. import { USER_SIGNOUT } from "../../store/user";
  97. import { core_api } from "../../constants/constants";
  98. import HomeSide from "./HomeSide.vue";
  99. export default {
  100. name: "Home",
  101. data() {
  102. var validatePass = (rule, value, callback) => {
  103. if (value === "") {
  104. callback(new Error("请输入密码"));
  105. } else {
  106. if (this.passForm.checkPass !== "") {
  107. this.$refs.passForm.validateField("checkPass");
  108. }
  109. callback();
  110. }
  111. };
  112. var validatePass2 = (rule, value, callback) => {
  113. if (value === "") {
  114. callback(new Error("请输入确认密码"));
  115. } else if (value !== this.passForm.pass) {
  116. callback(new Error("两次输入密码不一致!"));
  117. } else {
  118. callback();
  119. }
  120. };
  121. return {
  122. userDialog: false,
  123. passForm: { pass: "", checkPass: "" },
  124. passRules: {
  125. pass: [{ validator: validatePass, trigger: "blur" }],
  126. checkPass: [{ validator: validatePass2, trigger: "blur" }]
  127. }
  128. };
  129. },
  130. components: { HomeSide },
  131. computed: {
  132. ...mapState({ user: state => state.user })
  133. },
  134. methods: {
  135. ...mapActions([USER_SIGNOUT]),
  136. openUserDialog() {
  137. this.passForm = { pass: "", checkPass: "" };
  138. this.userDialog = true;
  139. },
  140. //保存密码
  141. submitForm() {
  142. this.$refs.passForm.validate(valid => {
  143. if (valid) {
  144. var userId = this.user.userId;
  145. var password = encodeURIComponent(this.passForm.pass);
  146. var url =
  147. core_api +
  148. "/user/password?userId=" +
  149. userId +
  150. "&password=" +
  151. password;
  152. this.$http.put(url).then(() => {
  153. this.$notify({
  154. type: "success",
  155. message: "修改密码成功!"
  156. });
  157. this.resetForm();
  158. this.userDialog = false;
  159. });
  160. } else {
  161. console.log("error submit!");
  162. return false;
  163. }
  164. });
  165. },
  166. //重置
  167. resetForm() {
  168. this.$refs.passForm.resetFields();
  169. },
  170. isSuperAdmin() {
  171. if (!this.user.roleList) {
  172. return false;
  173. }
  174. for (let role of this.user.roleList) {
  175. if (role.roleCode == "SUPER_ADMIN") {
  176. return true;
  177. }
  178. }
  179. return false;
  180. },
  181. logout() {
  182. this.$http
  183. .post(core_api + "/auth/logout")
  184. .then(() => {
  185. const orgId = this.user.rootOrgId;
  186. this.USER_SIGNOUT();
  187. window.name = "";
  188. this.$router.replace({
  189. path: "/login" + "?orgId=" + orgId
  190. });
  191. })
  192. .catch(response => {
  193. const orgId = this.user.rootOrgId;
  194. if (response.status == 500) {
  195. this.$notify({
  196. showClose: true,
  197. message: response.data.desc,
  198. type: "error"
  199. });
  200. }
  201. this.USER_SIGNOUT();
  202. window.name = "";
  203. this.$router.replace({
  204. path: "/login" + "?orgId=" + orgId
  205. });
  206. });
  207. }
  208. }
  209. };
  210. </script>
  211. <style lang="css" scoped>
  212. .fr {
  213. float: right;
  214. }
  215. .el-header, .el-footer {
  216. background-color: #B3C0D1;
  217. color: #333;
  218. text-align: center;
  219. line-height: 60px;
  220. }
  221. body > .el-container {
  222. margin-bottom: 40px;
  223. }
  224. </style>