Personalcenter.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464
  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 :src="userMessage.image_url" alt="" />
  16. <img
  17. class="edit-avator"
  18. src="../assets/Personalcenter/edit-avator.png"
  19. @click="toggleShow"
  20. />
  21. </div>
  22. </div>
  23. <div class="name">
  24. <p>{{ userMessage.user_real_name }}</p>
  25. </div>
  26. </div>
  27. </div>
  28. <!-- 导航 -->
  29. <div class="navList">
  30. <div
  31. :class="SeleNavId == item.id ? 'select' : ''"
  32. v-for="(item, i) in navList"
  33. :key="i"
  34. @click="selectNav(item.id)"
  35. >
  36. <img
  37. v-if="SeleNavId != item.id"
  38. :src="
  39. require('../assets/Personalcenter/' + item.imgSrc + '.png')
  40. "
  41. alt=""
  42. />
  43. <img
  44. v-else
  45. :src="
  46. require('../assets/Personalcenter/' + item.selectSrc + '.png')
  47. "
  48. alt=""
  49. />
  50. <span>{{ item.name }}</span>
  51. </div>
  52. </div>
  53. </div>
  54. <div class="right">
  55. <Mymessage v-if="SeleNavId == 0" />
  56. <Mytextbook v-if="SeleNavId == 1" />
  57. <Teachcourse v-if="SeleNavId == 2" :userType="userMessage.user_type" />
  58. <Traincourse v-if="SeleNavId == 3" />
  59. <TeachMaterial v-if="SeleNavId == 4" />
  60. <OrderManage v-if="SeleNavId == 5" />
  61. <Mycollect v-if="SeleNavId == 6" :userType="userMessage.user_type" />
  62. <AccountSet v-if="SeleNavId == 7" />
  63. </div>
  64. </div>
  65. </div>
  66. <my-upload
  67. field="img"
  68. @crop-success="cropSuccess"
  69. @crop-upload-success="cropUploadSuccess"
  70. @crop-upload-fail="cropUploadFail"
  71. v-model="show"
  72. :width="100"
  73. :height="100"
  74. :url="url"
  75. img-format="png"
  76. :noCircle="true"
  77. :noSquare="true"
  78. :noRotate="true"
  79. ></my-upload>
  80. </div>
  81. </template>
  82. <script>
  83. import Header from "@/components/common/Header";
  84. //import Uploadavator from "@/components/common/Uploadavator"; //上传头像
  85. import Mymessage from "@/components/Personalcenter/Mymessage"; //通知消息
  86. import Mytextbook from "@/components/Personalcenter/Mytextbook"; //我的教材
  87. import Teachcourse from "@/components/Personalcenter/Teachcourse"; //教学课程
  88. import Traincourse from "@/components/Personalcenter/Traincourse"; //教培课程
  89. import TeachMaterial from "@/components/Personalcenter/TeachMaterial"; //教研资料
  90. import OrderManage from "@/components/Personalcenter/OrderManage"; //订单管理
  91. import Mycollect from "@/components/Personalcenter/Mycollect"; //我的收藏
  92. import AccountSet from "@/components/Personalcenter/AccountSet"; //账户设置
  93. import { getToken, setToken } from "@/utils/auth";
  94. import "babel-polyfill"; // es6 shim
  95. import myUpload from "@/components/vue-image-crop-upload/upload-2.vue";
  96. import { getContent, getLearnWebContent } from "@/api/ajax";
  97. export default {
  98. name: "Personalcenter",
  99. components: {
  100. Header,
  101. Mymessage,
  102. Mytextbook,
  103. Teachcourse,
  104. Traincourse,
  105. TeachMaterial,
  106. OrderManage,
  107. Mycollect,
  108. AccountSet,
  109. "my-upload": myUpload,
  110. },
  111. props: {},
  112. data() {
  113. //这里存放数据
  114. return {
  115. userInfor: null,
  116. userMessage: null, //登录信息
  117. SeleNavId: 0,
  118. navList: [],
  119. teachList: [
  120. {
  121. id: 0,
  122. name: "系统通知",
  123. imgSrc: "nav1",
  124. selectSrc: "nav1-1",
  125. },
  126. {
  127. id: 1,
  128. name: "我的教材",
  129. imgSrc: "nav2",
  130. selectSrc: "nav2-1",
  131. },
  132. {
  133. id: 2,
  134. name: "教学课程",
  135. imgSrc: "nav3",
  136. selectSrc: "nav3-1",
  137. },
  138. {
  139. id: 3,
  140. name: "教培课程",
  141. imgSrc: "nav4",
  142. selectSrc: "nav4-1",
  143. },
  144. {
  145. id: 4,
  146. name: "教研材料",
  147. imgSrc: "nav5",
  148. selectSrc: "nav5-1",
  149. },
  150. {
  151. id: 5,
  152. name: "订单管理",
  153. imgSrc: "nav6",
  154. selectSrc: "nav6-1",
  155. },
  156. {
  157. id: 6,
  158. name: "我的收藏",
  159. imgSrc: "nav7",
  160. selectSrc: "nav7-1",
  161. },
  162. {
  163. id: 7,
  164. name: "账户设置",
  165. imgSrc: "nav8",
  166. selectSrc: "nav8-1",
  167. },
  168. ],
  169. stuList: [
  170. {
  171. id: 0,
  172. name: "系统通知",
  173. imgSrc: "nav1",
  174. selectSrc: "nav1-1",
  175. },
  176. {
  177. id: 1,
  178. name: "我的教材",
  179. imgSrc: "nav2",
  180. selectSrc: "nav2-1",
  181. },
  182. {
  183. id: 2,
  184. name: "教学课程",
  185. imgSrc: "nav3",
  186. selectSrc: "nav3-1",
  187. },
  188. {
  189. id: 5,
  190. name: "订单管理",
  191. imgSrc: "nav6",
  192. selectSrc: "nav6-1",
  193. },
  194. {
  195. id: 6,
  196. name: "我的收藏",
  197. imgSrc: "nav7",
  198. selectSrc: "nav7-1",
  199. },
  200. {
  201. id: 7,
  202. name: "账户设置",
  203. imgSrc: "nav8",
  204. selectSrc: "nav8-1",
  205. },
  206. ],
  207. show: false,
  208. params: {
  209. token: "123456798",
  210. name: "avatar",
  211. },
  212. headers: {
  213. smail: "*_~",
  214. },
  215. imgDataUrl: "",
  216. };
  217. },
  218. //计算属性 类似于data概念
  219. computed: {
  220. url() {
  221. let UserCode = "",
  222. UserType = "",
  223. SessionID = "";
  224. if (this.userMessage) {
  225. UserCode = this.userMessage.user_code;
  226. UserType = this.userMessage.user_type;
  227. SessionID = this.userMessage.session_id;
  228. }
  229. return (
  230. process.env.VUE_APP_BASE_API +
  231. "/GCLSFileServer/WebFileUpload?UserCode=" +
  232. UserCode +
  233. "&UserType=" +
  234. UserType +
  235. "&SessionID=" +
  236. SessionID +
  237. "&SecurityLevel=Mid"
  238. );
  239. },
  240. },
  241. //监控data中数据变化
  242. watch: {},
  243. //方法集合
  244. methods: {
  245. //得到我的用户信息
  246. GetMyUserInfo() {
  247. let _this = this;
  248. let MethodName = "user_manager-GetMyUserInfo";
  249. let data = {};
  250. getContent(MethodName, data).then((res) => {
  251. this.userInfor = res;
  252. });
  253. },
  254. // 选择导航
  255. selectNav(index) {
  256. this.SeleNavId = index;
  257. this.backtop();
  258. },
  259. backtop() {
  260. var timer = setInterval(function () {
  261. let osTop =
  262. document.documentElement.scrollTop || document.body.scrollTop;
  263. let ispeed = Math.floor(-osTop / 3);
  264. document.documentElement.scrollTop = document.body.scrollTop =
  265. osTop + ispeed;
  266. this.isTop = true;
  267. if (osTop === 0) {
  268. clearInterval(timer);
  269. }
  270. }, 30);
  271. },
  272. toggleShow() {
  273. this.show = !this.show;
  274. },
  275. /**
  276. * crop success
  277. *
  278. * [param] imgDataUrl
  279. * [param] field
  280. */
  281. cropSuccess(imgDataUrl, field) {
  282. this.imgDataUrl = imgDataUrl;
  283. },
  284. /**
  285. * upload success
  286. *
  287. * [param] jsonData 服务器返回数据,已进行json转码
  288. * [param] field
  289. */
  290. cropUploadSuccess(jsonData, field) {
  291. this.show = false;
  292. if (jsonData) {
  293. let image_id = jsonData.file_info_list[0].file_id;
  294. this.uploadAvator(image_id);
  295. } else {
  296. this.$message.warning("上传失败");
  297. }
  298. },
  299. /**
  300. * upload fail
  301. *
  302. * [param] status server api return error status, like 500
  303. * [param] field
  304. */
  305. cropUploadFail(status, field) {
  306. this.$message.warning("上传失败,请重新上传");
  307. },
  308. uploadAvator(image_id) {
  309. let MethodName = "user_manager-UpdateMyUserImage";
  310. let data = {
  311. image_id: image_id,
  312. };
  313. getContent(MethodName, data).then((res) => {
  314. this.$message.success("上传成功");
  315. this.userMessage.image_id = image_id;
  316. this.userMessage.image_url = res.image_url;
  317. console.log(this.userMessage);
  318. setToken(JSON.stringify(this.userMessage));
  319. setTimeout(() => {
  320. this.$router.go(0);
  321. }, 100);
  322. });
  323. },
  324. },
  325. //生命周期 - 创建完成(可以访问当前this实例)
  326. created() {
  327. let userInfor = getToken();
  328. if (userInfor) {
  329. let user = JSON.parse(getToken());
  330. this.userMessage = user;
  331. if (user.user_type == "TEACHER") {
  332. this.navList = this.teachList;
  333. } else {
  334. this.navList = this.stuList;
  335. }
  336. }
  337. if(this.$route.query.SeleNavId){
  338. this.SeleNavId = this.$route.query.SeleNavId
  339. }
  340. },
  341. //生命周期 - 挂载完成(可以访问DOM元素)
  342. mounted() {
  343. //this.GetMyUserInfo();
  344. },
  345. //生命周期-创建之前
  346. beforeCreated() {},
  347. //生命周期-挂载之前
  348. beforeMount() {},
  349. //生命周期-更新之前
  350. beforUpdate() {},
  351. //生命周期-更新之后
  352. updated() {},
  353. //生命周期-销毁之前
  354. beforeDestory() {},
  355. //生命周期-销毁完成
  356. destoryed() {},
  357. //如果页面有keep-alive缓存功能,这个函数会触发
  358. activated() {},
  359. };
  360. </script>
  361. <style lang="scss" scoped>
  362. /* @import url(); 引入css类 */
  363. .Personalcenter {
  364. .main {
  365. background: #e5e5e5;
  366. padding-top: 24px;
  367. padding-bottom: 60px;
  368. .content {
  369. width: 1200px;
  370. margin: 0 auto;
  371. display: flex;
  372. .left {
  373. width: 240px;
  374. height: 900px;
  375. background: #ffffff;
  376. .headPortrait {
  377. width: 240px;
  378. height: 240px;
  379. background: url("../assets/Personalcenter/headbg.png");
  380. background-size: 100% 100%;
  381. position: relative;
  382. .shade {
  383. position: absolute;
  384. width: 100%;
  385. height: 100%;
  386. background: rgba(0, 0, 0, 0.25);
  387. padding-top: 46px;
  388. }
  389. .photo {
  390. text-align: center;
  391. > div {
  392. margin: 0 auto;
  393. width: 110px;
  394. height: 110px;
  395. background: rgba(#c4c4c4, 0.3);
  396. display: flex;
  397. justify-content: center;
  398. align-items: center;
  399. border-radius: 50%;
  400. position: relative;
  401. }
  402. img {
  403. width: 100px;
  404. height: 100px;
  405. border-radius: 50%;
  406. }
  407. .edit-avator {
  408. width: 24px;
  409. height: 24px;
  410. position: absolute;
  411. right: 0px;
  412. bottom: 0px;
  413. cursor: pointer;
  414. }
  415. }
  416. .name {
  417. margin-top: 8px;
  418. text-align: center;
  419. p {
  420. margin: 0;
  421. font-weight: 600;
  422. font-size: 20px;
  423. color: #ffffff;
  424. }
  425. }
  426. }
  427. .navList {
  428. margin-top: 8px;
  429. > div {
  430. margin-top: 8px;
  431. height: 46px;
  432. display: flex;
  433. align-items: center;
  434. img {
  435. width: 24px;
  436. margin-left: 18px;
  437. margin-right: 16px;
  438. }
  439. cursor: pointer;
  440. }
  441. .select {
  442. background: #ff9900;
  443. color: white;
  444. }
  445. }
  446. }
  447. .right {
  448. width: 944px;
  449. min-height: 900px;
  450. margin-left: 16px;
  451. background: #ffffff;
  452. box-sizing: border-box;
  453. padding-bottom: 20px;
  454. }
  455. }
  456. }
  457. }
  458. </style>