header.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <style>
  2. #_header .el-header {
  3. position: relative;
  4. height: 64px;
  5. }
  6. .main-container {
  7. position: absolute;
  8. top: 50%;
  9. right: 50px;
  10. transform: translateY(-50%);
  11. cursor: pointer;
  12. }
  13. </style>
  14. <template id="mall-header">
  15. <div>
  16. <header class="el-header">
  17. <div class="main-container" flex="box:last cross:center">
  18. <el-dropdown @command="handleCommand">
  19. <span class="el-dropdown-link">
  20. <span style="font-size: 16px;"><i class="el-icon-user-solid" style="margin-right: 6px"></i>{{user.identity.username}}</span>
  21. <i class="el-icon-arrow-down el-icon--right"></i>
  22. </span>
  23. <el-dropdown-menu slot="dropdown">
  24. <el-dropdown-item v-if="user.identity.admin_type == 1 || user.identity.admin_type == 2" command="updatePassword" style="text-align: center">
  25. 修改密码
  26. </el-dropdown-item>
  27. <el-dropdown-item command="logout" style="text-align: center">退出登陆</el-dropdown-item>
  28. </el-dropdown-menu>
  29. </el-dropdown>
  30. </div>
  31. </header>
  32. <!-- 超级管理员 修复密码-->
  33. <el-dialog title="修改密码" :close-on-click-modal="false" :visible.sync="dialogFormVisible" width="35%">
  34. <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm">
  35. <el-form-item label="密码" prop="pass">
  36. <el-input type="password" v-model="ruleForm.pass" autocomplete="off"></el-input>
  37. </el-form-item>
  38. <el-form-item label="确认密码" prop="checkPass">
  39. <el-input type="password" v-model="ruleForm.checkPass" autocomplete="off"></el-input>
  40. </el-form-item>
  41. </el-form>
  42. <div slot="footer">
  43. <el-button @click="dialogFormVisible = false">取 消</el-button>
  44. <el-button :loading="btnLoading" type="primary" @click="updatePasswordSubmit('ruleForm')">确 定
  45. </el-button>
  46. </div>
  47. </el-dialog>
  48. </div>
  49. </template>
  50. <script>
  51. Vue.component('mall-header', {
  52. template: '#mall-header',
  53. data() {
  54. var validatePass = (rule, value, callback) => {
  55. if (value === '') {
  56. callback(new Error('请输入密码'));
  57. } else {
  58. if (this.ruleForm.checkPass !== '') {
  59. this.$refs.ruleForm.validateField('checkPass');
  60. }
  61. callback();
  62. }
  63. };
  64. var validatePass2 = (rule, value, callback) => {
  65. if (value === '') {
  66. callback(new Error('请再次输入密码'));
  67. } else if (value !== this.ruleForm.pass) {
  68. callback(new Error('两次输入密码不一致!'));
  69. } else {
  70. callback();
  71. }
  72. };
  73. return {
  74. user: { //用户信息
  75. identity: {
  76. admin_type: 1,
  77. id: 1,
  78. mall_num: -1,
  79. mch_id: 0,
  80. username: "",
  81. },
  82. },
  83. navs: [],
  84. mall: null,
  85. dialogFormVisible: false,
  86. ruleForm: {
  87. pass: '',
  88. checkPass: '',
  89. },
  90. btnLoading: false,
  91. rules: {
  92. pass: [{
  93. required: true,
  94. message: '请输入密码',
  95. trigger: 'blur'
  96. },
  97. {
  98. validator: validatePass,
  99. trigger: 'blur'
  100. },
  101. ],
  102. checkPass: [{
  103. required: true,
  104. message: '请输入确认密码',
  105. trigger: 'blur'
  106. },
  107. {
  108. validator: validatePass2,
  109. trigger: 'blur'
  110. }
  111. ]
  112. },
  113. updatePasswordStatus: 0,
  114. courseMenu: {
  115. children: [],
  116. },
  117. };
  118. },
  119. created() {
  120. let user_key = localStorage.getItem('user_key');
  121. console.log(user_key)
  122. let userData = JSON.parse(user_key)
  123. this.user = userData;
  124. this.checkCookie()
  125. let headerData = localStorage.getItem('_MALL_HEADER_DATA');
  126. if (headerData) {
  127. try {
  128. headerData = JSON.parse(headerData);
  129. this.user = headerData.user;
  130. this.navs = headerData.navs;
  131. this.mall = headerData.mall;
  132. this.updatePasswordStatus = headerData.update_password_status;
  133. _aside.mall = headerData.mall;
  134. } catch (e) {
  135. headerData = false;
  136. }
  137. }
  138. },
  139. methods: {
  140. handleOpen() {},
  141. handleClose() {},
  142. // 设置cookie
  143. setCookie: function(cname, cvalue, times) {
  144. var d = new Date();
  145. d.setTime(d.getTime() + times);
  146. var expires = "expires=" + d.toUTCString();
  147. document.cookie = cname + "=" + cvalue + "; " + expires;
  148. },
  149. //获取cookie
  150. getCookie: function(cname) {
  151. var name = cname + "=";
  152. var ca = document.cookie.split(';');
  153. for (var i = 0; i < ca.length; i++) {
  154. var c = ca[i];
  155. while (c.charAt(0) == ' ') c = c.substring(1);
  156. if (c.indexOf(name) != -1) {
  157. return c.substring(name.length, c.length);
  158. }
  159. }
  160. return "";
  161. },
  162. // 检查cookie
  163. checkCookie: function() {
  164. var value = this.getCookie("REQUEST");
  165. // if (!value) {
  166. var times = 60 * 60 * 1000
  167. this.setCookie("REQUEST", 'get-user', times);
  168. this.getUser();
  169. // }
  170. },
  171. // 获取用户信息
  172. getUser() {
  173. let self = this;
  174. self.btnLoading = true;
  175. request({
  176. params: {r: 'admin/account/user'},
  177. method: 'get',
  178. data: {}
  179. }).then(e => {
  180. self.btnLoading = false;
  181. this.user = e.data.data.data;
  182. localStorage.setItem('user_key', JSON.stringify(this.user));
  183. }).catch(e => {
  184. console.log(e);
  185. });
  186. },
  187. logout() {
  188. let self = this;
  189. this.$request({
  190. params: {r: 'admin/auth/logout'},
  191. method: 'get',
  192. data: {}
  193. }).then(e => {
  194. localStorage.setItem('user_key', '');
  195. localStorage.setItem('admin_menus', '');
  196. localStorage.setItem('mall_header_data', '');
  197. localStorage.setItem('mall_menus', '');
  198. localStorage.setItem('mall_info', '');
  199. // 在当前页面打开
  200. // self.$navigate({r: 'admin/user/me'});
  201. }).catch(e => {
  202. console.log(e);
  203. });
  204. },
  205. updatePassword() {
  206. this.dialogFormVisible = true;
  207. },
  208. handleCommand(command) {
  209. let self = this;
  210. if (command === 'logout') {
  211. request({
  212. params: {
  213. r: 'admin/auth/logout'
  214. },
  215. method: 'post',
  216. data: {}
  217. }).then(e => {
  218. // 在当前页面打开
  219. /* localStorage.setItem('user_key', '');
  220. localStorage.setItem('admin_menus', '');
  221. localStorage.setItem('mall_header_data', '');
  222. localStorage.setItem('mall_menus', '');
  223. localStorage.setItem('mall_info', ''); */
  224. for (const key in localStorage) {
  225. localStorage.setItem(key, '');
  226. }
  227. window.location.href=e.data.data.url;
  228. }).catch(e => {
  229. console.log(e);
  230. });
  231. }
  232. if (command === 'updatePassword') {
  233. this.dialogFormVisible = true;
  234. }
  235. },
  236. updatePasswordSubmit(formName) {
  237. this.$refs[formName].validate((valid) => {
  238. if (valid) {
  239. let self = this;
  240. self.btnLoading = true;
  241. request({
  242. params: {
  243. r: 'admin/account/update-password'
  244. },
  245. method: 'post',
  246. data: {
  247. password: self.ruleForm.checkPass,
  248. }
  249. }).then(e => {
  250. self.$message.success(e.data.msg);
  251. self.btnLoading = false;
  252. self.dialogFormVisible = false;
  253. if (e.data.code == 0) window.location.href = e.data.data;
  254. }).catch(e => {
  255. console.log(e);
  256. });
  257. } else {
  258. console.log('error submit!!');
  259. return false;
  260. }
  261. });
  262. }
  263. },
  264. });
  265. </script>