header-mall.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. <?php
  2. $mchId = Yii::$app->user->identity->mch_id;
  3. ?>
  4. <style>
  5. .mall-header {
  6. margin-left: 30px;
  7. /*background-color: #24303c;*/
  8. background-color: #313131;
  9. /*background-color: #FFFFFF;*/
  10. }
  11. .mall-header .mall-name {
  12. max-width: 120px;
  13. display: inline-block;
  14. overflow: hidden;
  15. text-overflow: ellipsis;
  16. }
  17. .mall-header .el-menu.el-menu--horizontal {
  18. border-bottom: 0;
  19. }
  20. .mall-header-menu .el-menu--popup {
  21. min-width: 1px;
  22. }
  23. .mall-header-menu .el-menu--popup .is-disabled {
  24. opacity: .65;
  25. cursor: default;
  26. }
  27. .el-menu--horizontal.el-menu {
  28. /*background-color: #24303c;*/
  29. background-color: #313131;
  30. }
  31. .el-menu--horizontal>.el-menu-item,
  32. .el-menu--horizontal>.el-submenu .el-submenu__title,
  33. .el-submenu__title i {
  34. color: #FFFFFF;
  35. }
  36. .lianxikefu:hover>.lianxikefu2 {
  37. color: #333 !important;
  38. }
  39. </style>
  40. <template id="mall-header">
  41. <div>
  42. <header class="mall-header" flex="box:last">
  43. <el-menu class="el-menu-demo" mode="horizontal" menu-trigger="click">
  44. <!-- <el-menu-item v-for="(nav, index) in navs" :key="index" :index="'' + index" @click="$navigate(nav.url, nav.new_window?true:false)">{{nav.name}}
  45. </el-menu-item> -->
  46. </el-menu>
  47. <el-menu mode="horizontal" menu-trigger="click">
  48. <!-- <el-menu-item v-if="mch_id == 0" index="4" class="lianxikefu">-->
  49. <!-- <a :href="services_url" target="_blank" class="lianxikefu2" style="color: #fff;text-decoration: none;height: 56px;line-height: 56px;">联系客服</a>-->
  50. <!-- </el-menu-item>-->
  51. <el-menu-item v-if="mch_id == 0" index="4" class="lianxikefu">
  52. <a :href="course_url ? course_url : 'javascript:void(0)'" class="lianxikefu2" style="color: #fff;text-decoration: none;height: 56px;line-height: 56px;">教程中心</a>
  53. </el-menu-item>
  54. <el-menu-item v-if="mch_id == 0" index="5" class="lianxikefu">
  55. <a :href="question_url" class="lianxikefu2" style="color: #fff;text-decoration: none;height: 56px;line-height: 56px;">常见问题</a>
  56. </el-menu-item>
  57. <!-- <el-menu-item v-if="mch_id == 0" @click="navigateClick({r: 'admin/cache/clean', '_layout': 'mall'})" index="3">缓存-->
  58. </el-menu-item>
  59. <el-submenu v-if="mch_id == 0 && courseMenu.children && courseMenu.children.length > 0" index="3" v-if="courseMenu" popper-class="mall-header-menu">
  60. <template slot="title">
  61. <span :title="courseMenu.name" class="mall-name">{{courseMenu.name}}</span>
  62. </template>
  63. <el-menu-item @click="navigateClick({r: item.route})" v-for="(item, index) in courseMenu.children" :key="index" :index="'1-' + index">
  64. {{item.name}}
  65. </el-menu-item>
  66. </el-submenu>
  67. <!-- <el-menu-item index="1">消息中心</el-menu-item>-->
  68. <el-submenu index="2" v-if="mall && user" popper-class="mall-header-menu">
  69. <template slot="title">
  70. <span :title="mall.name" class="mall-name">{{mall.name}}</span>
  71. </template>
  72. <el-menu-item index="1-1" :disabled="true">{{mall.name}}</el-menu-item>
  73. <el-menu-item index="1-2" :disabled="true">{{user.username}}</el-menu-item>
  74. <el-menu-item v-if="(user.admin_type == 1 || user.admin_type == 2) && user.mch_id == 0" index="2-1" @click="goBackToSystem">返回系统
  75. </el-menu-item>
  76. <el-menu-item v-if="(user.admin_type == 2 || user.admin_type == 3) && updatePasswordStatus" index="2-3" @click="updatePassword">修改密码
  77. </el-menu-item>
  78. <el-menu-item v-if="user.admin_type == 3 || user.mch_id" index="2-2" @click="logout">注销
  79. </el-menu-item>
  80. </el-submenu>
  81. </el-menu>
  82. </header>
  83. <el-dialog title="修改密码" :visible.sync="dialogFormVisible" width="30%">
  84. <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px">
  85. <el-form-item label="旧密码" prop="old_pass">
  86. <el-input type="password" v-model="ruleForm.old_pass" placeholder="请输入旧密码" auto-complete="off" required></el-input>
  87. </el-form-item>
  88. <el-form-item label="新密码" prop="new_pass">
  89. <el-input type="password" v-model="ruleForm.new_pass" placeholder="请输入新密码" auto-complete="off" required></el-input>
  90. </el-form-item>
  91. <el-form-item label="确认密码" prop="check_pass">
  92. <el-input type="password" v-model="ruleForm.check_pass" placeholder="请输入确认密码" auto-complete="off" required></el-input>
  93. </el-form-item>
  94. </el-form>
  95. <div slot="footer" class="dialog-footer">
  96. <el-button @click="dialogFormVisible = false">取 消</el-button>
  97. <el-button :loading="btnLoading" type="primary" @click="updatePasswordSubmit('ruleForm')">确 定
  98. </el-button>
  99. </div>
  100. </el-dialog>
  101. </div>
  102. </template>
  103. <script>
  104. Vue.component('mall-header', {
  105. template: '#mall-header',
  106. data() {
  107. var validatePass = (rule, value, callback) => {
  108. if (value === '') {
  109. callback(new Error('请再次输入密码'));
  110. } else if (value !== this.ruleForm.new_pass) {
  111. callback(new Error('两次输入密码不一致!'));
  112. } else {
  113. callback();
  114. }
  115. };
  116. return {
  117. user: null,
  118. navs: [],
  119. mall: null,
  120. dialogFormVisible: false,
  121. ruleForm: {
  122. pass: '',
  123. checkPass: '',
  124. },
  125. loading: false, //默认不在请求中
  126. services_url: '', //默认客服链接为'',question_url
  127. course_url:'',//教程中心链接
  128. question_url:'',//常见链接
  129. is_services_show: false, //默认没有客服链接
  130. btnLoading: false,
  131. rules: {
  132. old_pass: [{
  133. required: true,
  134. message: '请输入旧密码',
  135. trigger: 'blur'
  136. },
  137. ],
  138. new_pass: [{
  139. required: true,
  140. message: '请输入新密码',
  141. trigger: 'blur'
  142. },
  143. ],
  144. check_pass: [{
  145. required: true,
  146. message: '请输入确认密码',
  147. trigger: 'blur'
  148. },
  149. {
  150. validator: validatePass,
  151. trigger: 'blur'
  152. }
  153. ]
  154. },
  155. updatePasswordStatus: 1,
  156. courseMenu: {
  157. children: [],
  158. },
  159. mch_id: <?= $mchId ?>,
  160. };
  161. },
  162. created() {
  163. const cacheKey = '_MALL_MENUS';
  164. let data = localStorage.getItem(cacheKey);
  165. if (data) {
  166. try {
  167. data = JSON.parse(data);
  168. this.courseMenu = data.courseMenu;
  169. } catch (e) {
  170. data = false;
  171. }
  172. }
  173. this.loadData();
  174. let headerData = localStorage.getItem('mall_header_data');
  175. // console.log(headerData)
  176. if (headerData) {
  177. try {
  178. headerData = JSON.parse(headerData);
  179. this.user = headerData.user;
  180. this.navs = headerData.navs;
  181. this.mall = headerData.mall;
  182. // this.updatePasswordStatus = headerData.update_password_status;
  183. _aside.mall = headerData.mall;
  184. } catch (e) {
  185. headerData = false;
  186. }
  187. }
  188. },
  189. methods: {
  190. // 0.1 跳转客服
  191. toServices() {
  192. window.location.href = this.services_url;
  193. },
  194. handleOpen() {},
  195. handleClose() {},
  196. getUser() {
  197. let self = this;
  198. self.btnLoading = true;
  199. request({
  200. params: {
  201. r: 'admin/index/user'
  202. },
  203. method: 'get',
  204. data: {}
  205. }).then(e => {
  206. self.btnLoading = false;
  207. self.user = e.data.data.admin_info;
  208. }).catch(e => {
  209. console.log(e);
  210. });
  211. },
  212. getMenus() {
  213. const cacheKey = '_ADMIN_MENUS';
  214. let data = localStorage.getItem(cacheKey);
  215. if (data) {
  216. try {
  217. data = JSON.parse(data);
  218. } catch (e) {
  219. data = false;
  220. }
  221. }
  222. if (data && data.menus) {
  223. this.menus = data.menus;
  224. this.currentRouteInfo = data.currentRouteInfo;
  225. this.setActiveMenu();
  226. }
  227. },
  228. setActiveMenu() {
  229. if (!this.activeMenuId) this.activeMenuId = localStorage.getItem('_ADMIN_LAST_ACTIVE_MENU_ID');
  230. if (!this.activeSubMenuId) this.activeSubMenuId = localStorage.getItem('_ADMIN_LAST_ACTIVE_SUB_MENU_ID');
  231. if (!this.activeMenuId || !this.activeSubMenuId) return;
  232. for (let i in this.menus) {
  233. if (this.menus[i].id == this.activeMenuId) {
  234. this.subMenus = this.menus[i].children;
  235. for (let j in this.subMenus) {
  236. if (this.subMenus[j].id == this.activeSubMenuId) this.subMenus[j].active = true;
  237. }
  238. }
  239. }
  240. },
  241. loadData() {
  242. let data = localStorage.getItem('mall_header_data');
  243. if (data) {
  244. try {
  245. data = JSON.parse(data);
  246. } catch (e) {
  247. data = false;
  248. }
  249. }
  250. if (data && data.user && data.navs && data.mall){
  251. this.user = data.user;
  252. this.navs = data.navs;
  253. this.mall = data.mall;
  254. // this.updatePasswordStatus = data.update_password_status;
  255. _aside.mall = data.mall;
  256. if (data.services.length != 0) {
  257. this.services_url = decodeURIComponent(data.services.web_service_url.value);
  258. this.course_url = data.services.course_url ? decodeURIComponent(data.services.course_url) : '';
  259. this.question_url = decodeURIComponent(data.services.question_url);
  260. this.is_services_show = true;
  261. }
  262. }else{
  263. this.$request({
  264. params: {r: 'mall/overview/mall-header'},
  265. method: 'get',
  266. }).then(e => {
  267. localStorage.setItem('mall_header_data', JSON.stringify(e.data.data));
  268. this.user = e.data.data.user;
  269. this.navs = e.data.data.navs;
  270. this.mall = e.data.data.mall;
  271. // this.updatePasswordStatus = e.data.data.update_password_status;
  272. _aside.mall = e.data.data.mall;
  273. var data = e.data.data;
  274. if (data.services.length != 0) {
  275. //console.log(data.services);
  276. this.services_url = decodeURIComponent(data.services.web_service_url.value);
  277. this.course_url = decodeURIComponent(data.services.course_url);
  278. this.question_url = decodeURIComponent(data.services.question_url);
  279. this.is_services_show = true;
  280. }
  281. }).catch(e => {
  282. console.log(e);
  283. });
  284. }
  285. },
  286. logout() {
  287. let self = this;
  288. this.$request({
  289. params: {
  290. r: 'admin/auth/logout'
  291. },
  292. method: 'get',
  293. data: {}
  294. }).then(e => {
  295. // 在当前页面打开
  296. localStorage.setItem('user_key', '');
  297. localStorage.setItem('admin_menus', '');
  298. localStorage.setItem('mall_header_data', '');
  299. localStorage.setItem('mall_menus', '');
  300. localStorage.setItem('mall_info', '');
  301. window.location.href=e.data.data.url;
  302. }).catch(e => {
  303. console.log(e);
  304. });
  305. },
  306. goBackToSystem() {
  307. if (_isWe7 == true) {
  308. this.$navigate({
  309. r: 'admin/account/info'
  310. });
  311. } else { //返回商城列表
  312. this.$navigate({
  313. r: 'admin/mall/index'
  314. });
  315. }
  316. },
  317. updatePassword() {
  318. this.dialogFormVisible = true;
  319. },
  320. updatePasswordSubmit(formName) {
  321. this.$refs[formName].validate((valid) => {
  322. if (valid) {
  323. this.btnLoading = true;
  324. this.$request({
  325. params: {
  326. r: 'mall/overview/update-password'
  327. },
  328. method: 'post',
  329. data: {
  330. old_pass: this.ruleForm.old_pass,
  331. new_pass: this.ruleForm.new_pass,
  332. check_pass: this.ruleForm.check_pass,
  333. }
  334. }).then(e => {
  335. this.btnLoading = false;
  336. if (e.data.code == 0) {
  337. this.dialogFormVisible = false;
  338. this.$message.success(e.data.msg);
  339. window.location.reload();
  340. } else {
  341. this.$message.error(e.data.msg);
  342. }
  343. }).catch(e => {
  344. console.log(e);
  345. });
  346. } else {
  347. console.log('error submit!!');
  348. return false;
  349. }
  350. });
  351. },
  352. navigateClick(params) {
  353. this.clearMenuStorage();
  354. this.$navigate(params);
  355. },
  356. clearMenuStorage() {
  357. localStorage.removeItem('open_menu_1_id');
  358. localStorage.removeItem('open_menu_2_id');
  359. localStorage.removeItem('open_menu_3_id');
  360. localStorage.removeItem('unfold_id_1');
  361. localStorage.removeItem('unfold_id_2');
  362. },
  363. },
  364. });
  365. </script>