Personalcenter.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652
  1. <template>
  2. <!-- 个人中心 -->
  3. <div class="Personalcenter">
  4. <div class="Nav">
  5. <Header />
  6. </div>
  7. <div class="main">
  8. <div class="content">
  9. <div class="left">
  10. <!-- 头像 -->
  11. <div class="headPortrait" v-if="userMessage">
  12. <div class="shade">
  13. <div class="photo">
  14. <div>
  15. <img
  16. :src="
  17. userMessage.image_url
  18. ? userMessage.image_url
  19. : require('../assets/login/Group3214.png')
  20. "
  21. alt=""
  22. />
  23. <img
  24. class="edit-avator"
  25. src="../assets/Personalcenter/edit-avator.png"
  26. @click="toggleShow"
  27. />
  28. </div>
  29. </div>
  30. <div class="name">
  31. <p>{{ userMessage.user_real_name }}</p>
  32. </div>
  33. </div>
  34. </div>
  35. <!-- 导航 -->
  36. <div class="navList">
  37. <div
  38. :class="SeleNavId == item.id ? 'select' : ''"
  39. v-for="(item, i) in navList"
  40. :key="i"
  41. @click="selectNav(item.id)"
  42. >
  43. <img
  44. v-if="SeleNavId != item.id"
  45. :src="
  46. require('../assets/Personalcenter/' + item.imgSrc + '.png')
  47. "
  48. alt=""
  49. />
  50. <img
  51. v-else
  52. :src="
  53. require('../assets/Personalcenter/' + item.selectSrc + '.png')
  54. "
  55. alt=""
  56. />
  57. <span>{{ item.name }}</span>
  58. </div>
  59. </div>
  60. </div>
  61. <div class="right" v-if="islangs">
  62. <Mymessage v-if="SeleNavId == 0" />
  63. <Mytextbook v-if="SeleNavId == 1" />
  64. <Teachcourse
  65. v-if="SeleNavId == 2"
  66. :userType="userMessage.user_type"
  67. />
  68. <Traincourse v-if="SeleNavId == 3" />
  69. <TeachMaterial v-if="SeleNavId == 4" />
  70. <OrderManage v-if="SeleNavId == 5" />
  71. <Mycollect v-if="SeleNavId == 6" :userType="userMessage.user_type" />
  72. <AccountSet v-if="SeleNavId == 7" />
  73. </div>
  74. </div>
  75. </div>
  76. <my-upload
  77. field="img"
  78. @crop-success="cropSuccess"
  79. @crop-upload-success="cropUploadSuccess"
  80. @crop-upload-fail="cropUploadFail"
  81. v-model="show"
  82. :width="100"
  83. :height="100"
  84. :url="url"
  85. img-format="png"
  86. :noCircle="true"
  87. :noSquare="true"
  88. :noRotate="true"
  89. ></my-upload>
  90. </div>
  91. </template>
  92. <script>
  93. import Header from "@/components/common/Header";
  94. //import Uploadavator from "@/components/common/Uploadavator"; //上传头像
  95. import Mymessage from "@/components/Personalcenter/Mymessage"; //通知消息
  96. import Mytextbook from "@/components/Personalcenter/Mytextbook"; //我的教材
  97. import Teachcourse from "@/components/Personalcenter/Teachcourse"; //教学课程
  98. import Traincourse from "@/components/Personalcenter/Traincourse"; //教培课程
  99. import TeachMaterial from "@/components/Personalcenter/TeachMaterial"; //教研资料
  100. import OrderManage from "@/components/Personalcenter/OrderManage"; //订单管理
  101. import Mycollect from "@/components/Personalcenter/Mycollect"; //我的收藏
  102. import AccountSet from "@/components/Personalcenter/AccountSet"; //账户设置
  103. import { getToken, setToken } from "@/utils/auth";
  104. import "babel-polyfill"; // es6 shim
  105. import myUpload from "@/components/vue-image-crop-upload/upload-2.vue";
  106. import { getContent, getLearnWebContent } from "@/api/ajax";
  107. import { updateWordPack } from "@/utils/i18n";
  108. export default {
  109. name: "Personalcenter",
  110. components: {
  111. Header,
  112. Mymessage,
  113. Mytextbook,
  114. Teachcourse,
  115. Traincourse,
  116. TeachMaterial,
  117. OrderManage,
  118. Mycollect,
  119. AccountSet,
  120. "my-upload": myUpload,
  121. },
  122. props: {},
  123. data() {
  124. //这里存放数据
  125. return {
  126. islangs: false,
  127. userInfor: null,
  128. userMessage: null, //登录信息
  129. SeleNavId: 0,
  130. navList: [],
  131. teachList: [
  132. {
  133. id: 0,
  134. name: "系统通知",
  135. imgSrc: "nav1",
  136. selectSrc: "nav1-1",
  137. },
  138. {
  139. id: 1,
  140. name: "我的教材",
  141. imgSrc: "nav2",
  142. selectSrc: "nav2-1",
  143. },
  144. {
  145. id: 2,
  146. name: "教学课程",
  147. imgSrc: "nav3",
  148. selectSrc: "nav3-1",
  149. },
  150. {
  151. id: 3,
  152. name: "教培课程",
  153. imgSrc: "nav4",
  154. selectSrc: "nav4-1",
  155. },
  156. {
  157. id: 4,
  158. name: "教研材料",
  159. imgSrc: "nav5",
  160. selectSrc: "nav5-1",
  161. },
  162. {
  163. id: 5,
  164. name: "订单管理",
  165. imgSrc: "nav6",
  166. selectSrc: "nav6-1",
  167. },
  168. {
  169. id: 6,
  170. name: "我的收藏",
  171. imgSrc: "nav7",
  172. selectSrc: "nav7-1",
  173. },
  174. {
  175. id: 7,
  176. name: "账户设置",
  177. imgSrc: "nav8",
  178. selectSrc: "nav8-1",
  179. },
  180. ],
  181. stuList: [
  182. {
  183. id: 0,
  184. name: "系统通知",
  185. imgSrc: "nav1",
  186. selectSrc: "nav1-1",
  187. },
  188. {
  189. id: 1,
  190. name: "我的教材",
  191. imgSrc: "nav2",
  192. selectSrc: "nav2-1",
  193. },
  194. {
  195. id: 2,
  196. name: "教学课程",
  197. imgSrc: "nav3",
  198. selectSrc: "nav3-1",
  199. },
  200. {
  201. id: 5,
  202. name: "订单管理",
  203. imgSrc: "nav6",
  204. selectSrc: "nav6-1",
  205. },
  206. {
  207. id: 6,
  208. name: "我的收藏",
  209. imgSrc: "nav7",
  210. selectSrc: "nav7-1",
  211. },
  212. {
  213. id: 7,
  214. name: "账户设置",
  215. imgSrc: "nav8",
  216. selectSrc: "nav8-1",
  217. },
  218. ],
  219. show: false,
  220. params: {
  221. token: "123456798",
  222. name: "avatar",
  223. },
  224. headers: {
  225. smail: "*_~",
  226. },
  227. imgDataUrl: "",
  228. };
  229. },
  230. //计算属性 类似于data概念
  231. computed: {
  232. url() {
  233. let UserCode = "",
  234. UserType = "",
  235. SessionID = "";
  236. if (this.userMessage) {
  237. UserCode = this.userMessage.user_code;
  238. UserType = this.userMessage.user_type;
  239. SessionID = this.userMessage.session_id;
  240. }
  241. return (
  242. process.env.VUE_APP_BASE_API +
  243. "/GCLSFileServer/WebFileUpload?UserCode=" +
  244. UserCode +
  245. "&UserType=" +
  246. UserType +
  247. "&SessionID=" +
  248. SessionID +
  249. "&SecurityLevel=Mid"
  250. );
  251. },
  252. },
  253. //监控data中数据变化
  254. watch: {},
  255. //方法集合
  256. methods: {
  257. //得到我的用户信息
  258. GetMyUserInfo() {
  259. let _this = this;
  260. let MethodName = "user_manager-GetMyUserInfo";
  261. let data = {};
  262. getContent(MethodName, data).then((res) => {
  263. this.userInfor = res;
  264. });
  265. },
  266. // 选择导航
  267. selectNav(index) {
  268. this.SeleNavId = index;
  269. this.backtop();
  270. },
  271. backtop() {
  272. var timer = setInterval(function () {
  273. let osTop =
  274. document.documentElement.scrollTop || document.body.scrollTop;
  275. let ispeed = Math.floor(-osTop / 3);
  276. document.documentElement.scrollTop = document.body.scrollTop =
  277. osTop + ispeed;
  278. this.isTop = true;
  279. if (osTop === 0) {
  280. clearInterval(timer);
  281. }
  282. }, 30);
  283. },
  284. toggleShow() {
  285. this.show = !this.show;
  286. },
  287. /**
  288. * crop success
  289. *
  290. * [param] imgDataUrl
  291. * [param] field
  292. */
  293. cropSuccess(imgDataUrl, field) {
  294. this.imgDataUrl = imgDataUrl;
  295. },
  296. /**
  297. * upload success
  298. *
  299. * [param] jsonData 服务器返回数据,已进行json转码
  300. * [param] field
  301. */
  302. cropUploadSuccess(jsonData, field) {
  303. this.show = false;
  304. if (jsonData) {
  305. let image_id = jsonData.file_info_list[0].file_id;
  306. this.uploadAvator(image_id);
  307. } else {
  308. this.$message.warning("上传失败");
  309. }
  310. },
  311. /**
  312. * upload fail
  313. *
  314. * [param] status server api return error status, like 500
  315. * [param] field
  316. */
  317. cropUploadFail(status, field) {
  318. this.$message.warning("上传失败,请重新上传");
  319. },
  320. uploadAvator(image_id) {
  321. let MethodName = "user_manager-UpdateMyUserImage";
  322. let data = {
  323. image_id: image_id,
  324. };
  325. getContent(MethodName, data).then((res) => {
  326. this.$message.success("上传成功");
  327. this.userMessage.image_id = image_id;
  328. this.userMessage.image_url = res.image_url;
  329. console.log(this.userMessage);
  330. setToken(JSON.stringify(this.userMessage));
  331. setTimeout(() => {
  332. this.$router.go(0);
  333. }, 100);
  334. });
  335. },
  336. },
  337. //生命周期 - 创建完成(可以访问当前this实例)
  338. async created() {
  339. let userInfor = getToken();
  340. if (this.$route.query.SeleNavId) {
  341. this.SeleNavId = this.$route.query.SeleNavId;
  342. }
  343. if (userInfor) {
  344. let user = JSON.parse(getToken());
  345. this.userMessage = user;
  346. await updateWordPack({
  347. word_key_list: [
  348. "Key14",
  349. "Key25",
  350. "Key26",
  351. "Key27",
  352. "Key28",
  353. "Key29",
  354. "Key30",
  355. "Key31",
  356. "Key32",
  357. "Key33",
  358. "Key34",
  359. "Key35",
  360. "Key36",
  361. "Key37",
  362. "Key42",
  363. "Key44",
  364. "Key52",
  365. "Key53",
  366. "Key54",
  367. "Key55",
  368. "Key58",
  369. "Key60",
  370. "Key61",
  371. "Key62",
  372. "Key63",
  373. "Key64",
  374. "Key65",
  375. "Key66",
  376. "Key67",
  377. "Key68",
  378. "Key69",
  379. "Key70",
  380. "Key71",
  381. "Key72",
  382. "Key73",
  383. "Key74",
  384. "Key75",
  385. "Key77",
  386. "Key76",
  387. "Key78",
  388. "Key79",
  389. "Key80",
  390. "Key83",
  391. "Key82",
  392. "Key84",
  393. "Key85",
  394. "Key86",
  395. "Key87",
  396. "Key88",
  397. "Key89",
  398. "Key90",
  399. "Key91",
  400. "Key92",
  401. "Key93",
  402. "Key94",
  403. "Key95",
  404. "Key96",
  405. "Key97",
  406. "Key98",
  407. "Key99",
  408. "Key100",
  409. "Key101",
  410. "Key102",
  411. "Key103",
  412. "Key104",
  413. "Key105",
  414. "Key106",
  415. "Key107",
  416. "Key108",
  417. "Key109",
  418. "Key110",
  419. "Key111",
  420. "Key112",
  421. "Key113",
  422. "Key114",
  423. "Key117",
  424. "Key121",
  425. "Key122",
  426. "Key123",
  427. "Key210",
  428. "Key211",
  429. "Key232",
  430. "Key172",
  431. ],
  432. });
  433. this.islangs = true;
  434. this.teachList = [
  435. {
  436. id: 0,
  437. name: this.$t("Key60"),
  438. imgSrc: "nav1",
  439. selectSrc: "nav1-1",
  440. },
  441. {
  442. id: 1,
  443. name: this.$t("Key61"),
  444. imgSrc: "nav2",
  445. selectSrc: "nav2-1",
  446. },
  447. {
  448. id: 2,
  449. name: this.$t("Key62"), //"教学课程",
  450. imgSrc: "nav3",
  451. selectSrc: "nav3-1",
  452. },
  453. {
  454. id: 3,
  455. name: this.$t("Key63"), //"教培课程",
  456. imgSrc: "nav4",
  457. selectSrc: "nav4-1",
  458. },
  459. {
  460. id: 4,
  461. name: this.$t("Key64"), //"教研材料",
  462. imgSrc: "nav5",
  463. selectSrc: "nav5-1",
  464. },
  465. {
  466. id: 5,
  467. name: this.$t("Key65"), //"订单管理",
  468. imgSrc: "nav6",
  469. selectSrc: "nav6-1",
  470. },
  471. {
  472. id: 6,
  473. name: this.$t("Key66"), //"我的收藏",
  474. imgSrc: "nav7",
  475. selectSrc: "nav7-1",
  476. },
  477. {
  478. id: 7,
  479. name: this.$t("Key67"), //"账户设置",
  480. imgSrc: "nav8",
  481. selectSrc: "nav8-1",
  482. },
  483. ];
  484. this.stuList = [
  485. {
  486. id: 0,
  487. name: this.$t("Key60"),
  488. imgSrc: "nav1",
  489. selectSrc: "nav1-1",
  490. },
  491. {
  492. id: 1,
  493. name: this.$t("Key61"), //"我的教材",
  494. imgSrc: "nav2",
  495. selectSrc: "nav2-1",
  496. },
  497. {
  498. id: 2,
  499. name: this.$t("Key62"), //"教学课程",
  500. imgSrc: "nav3",
  501. selectSrc: "nav3-1",
  502. },
  503. {
  504. id: 5,
  505. name: this.$t("Key65"), //"订单管理",
  506. imgSrc: "nav6",
  507. selectSrc: "nav6-1",
  508. },
  509. {
  510. id: 6,
  511. name: this.$t("Key66"), // "我的收藏",
  512. imgSrc: "nav7",
  513. selectSrc: "nav7-1",
  514. },
  515. {
  516. id: 7,
  517. name: this.$t("Key67"), //"账户设置",
  518. imgSrc: "nav8",
  519. selectSrc: "nav8-1",
  520. },
  521. ];
  522. if (user.user_type == "TEACHER") {
  523. this.navList = this.teachList;
  524. } else {
  525. this.navList = this.stuList;
  526. }
  527. }
  528. },
  529. //生命周期 - 挂载完成(可以访问DOM元素)
  530. mounted() {
  531. //this.GetMyUserInfo();
  532. },
  533. //生命周期-创建之前
  534. beforeCreated() {},
  535. //生命周期-挂载之前
  536. beforeMount() {},
  537. //生命周期-更新之前
  538. beforUpdate() {},
  539. //生命周期-更新之后
  540. updated() {},
  541. //生命周期-销毁之前
  542. beforeDestory() {},
  543. //生命周期-销毁完成
  544. destoryed() {},
  545. //如果页面有keep-alive缓存功能,这个函数会触发
  546. activated() {},
  547. };
  548. </script>
  549. <style lang="scss" scoped>
  550. /* @import url(); 引入css类 */
  551. .Personalcenter {
  552. .main {
  553. background: #e5e5e5;
  554. padding-top: 24px;
  555. padding-bottom: 60px;
  556. .content {
  557. width: 1200px;
  558. margin: 0 auto;
  559. display: flex;
  560. .left {
  561. width: 240px;
  562. height: 900px;
  563. background: #ffffff;
  564. .headPortrait {
  565. width: 240px;
  566. height: 240px;
  567. background: url("../assets/Personalcenter/headbg.png");
  568. background-size: 100% 100%;
  569. position: relative;
  570. .shade {
  571. position: absolute;
  572. width: 100%;
  573. height: 100%;
  574. background: rgba(0, 0, 0, 0.25);
  575. padding-top: 46px;
  576. }
  577. .photo {
  578. text-align: center;
  579. > div {
  580. margin: 0 auto;
  581. width: 110px;
  582. height: 110px;
  583. background: rgba(#c4c4c4, 0.3);
  584. display: flex;
  585. justify-content: center;
  586. align-items: center;
  587. border-radius: 50%;
  588. position: relative;
  589. }
  590. img {
  591. width: 100px;
  592. height: 100px;
  593. border-radius: 50%;
  594. }
  595. .edit-avator {
  596. width: 24px;
  597. height: 24px;
  598. position: absolute;
  599. right: 0px;
  600. bottom: 0px;
  601. cursor: pointer;
  602. }
  603. }
  604. .name {
  605. margin-top: 8px;
  606. text-align: center;
  607. p {
  608. margin: 0;
  609. font-weight: 600;
  610. font-size: 20px;
  611. color: #ffffff;
  612. }
  613. }
  614. }
  615. .navList {
  616. margin-top: 8px;
  617. > div {
  618. margin-top: 8px;
  619. height: 46px;
  620. display: flex;
  621. align-items: center;
  622. img {
  623. width: 24px;
  624. margin-left: 18px;
  625. margin-right: 16px;
  626. }
  627. cursor: pointer;
  628. }
  629. .select {
  630. background: #ff9900;
  631. color: white;
  632. }
  633. }
  634. }
  635. .right {
  636. width: 944px;
  637. min-height: 900px;
  638. margin-left: 16px;
  639. background: #ffffff;
  640. box-sizing: border-box;
  641. padding-bottom: 20px;
  642. }
  643. }
  644. }
  645. }
  646. </style>