tabUser.vue 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. <template>
  2. <ion-page>
  3. <!-- <ion-header>
  4. <ion-toolbar color="secondary">
  5. <ion-title>我的</ion-title>
  6. </ion-toolbar>
  7. </ion-header>
  8. <ion-content :fullscreen="true">
  9. <ion-list>
  10. <ion-item @click="router.push('myInfo')"><ion-label>个人信息</ion-label></ion-item>
  11. <ion-item>
  12. <ion-button slot="end" size="default" fill="outline"
  13. @click="presentAlert">
  14. <ion-icon :icon="walkOutline" size="large" slot="start"></ion-icon>
  15. 退出
  16. </ion-button>
  17. </ion-item>
  18. </ion-list>
  19. </ion-content>-->
  20. <ion-content>
  21. <!-- <div class="mine-toolbar">
  22. <div class="mine-body">
  23. <div class="info-img">
  24. <img class="img-user" src="@/assets/icon/icon-user-2x.png" onerror="this.src='@/assets/icon/icon-user-2x.png'" />
  25. </div>
  26. <div class="info-text">
  27. <div class="info-text-name" style="color: #fff;">
  28. <h3>{{user?.name}}</h3>
  29. </div>
  30. </div>
  31. </div>
  32. </div>
  33. <ion-list>
  34. <ion-item class="item-menu" detail mode="md" style="&#45;&#45;border-style: none;">
  35. <img src="@/assets/icon/grxx.png" >
  36. <ion-label @click="router.push('/tabs/tabUser/myInfo')">个人信息</ion-label>
  37. </ion-item>
  38. <ion-item class="item-menu" detail mode="md" style="&#45;&#45;border-style: none;" v-if="isDev">
  39. <img src="@/assets/icon/tysz.png">
  40. <ion-label @click="router.push('/tabs/tabUser/updatePassword')">密码修改</ion-label>
  41. </ion-item>
  42. <ion-item class="item-menu" detail mode="md" style="&#45;&#45;border-style: none;">
  43. <img src="@/assets/icon/gywm.png">
  44. <ion-label>关于我们</ion-label>
  45. </ion-item>
  46. </ion-list>
  47. <div class="login-out" @click="presentAlert" v-if="isDev">
  48. 退出登录
  49. </div>-->
  50. <div class="tab-user-content">
  51. <div class="user_info">
  52. <div class="user_img">
  53. <img class="img-user" src="@/assets/icon/icon-user-2x.png" onerror="this.src='@/assets/icon/icon-user-2x.png'" />
  54. </div>
  55. <div class="user_text">
  56. <h2>{{user.name}}</h2>
  57. <p>驿站人员</p>
  58. </div>
  59. </div>
  60. <div class="user_panel">
  61. <div class="panel_title">
  62. 我的设置
  63. </div>
  64. <div class="panel_list">
  65. <ion-item class="item-menu" detail mode="md">
  66. <img src="@/assets/icon/grxx.png" >
  67. <ion-label @click="router.push('/tabs/tabUser/myInfo')">个人信息</ion-label>
  68. </ion-item>
  69. <ion-item class="item-menu" detail mode="md" v-if="isDev">
  70. <img src="@/assets/icon/tysz.png">
  71. <ion-label @click="router.push('/tabs/tabUser/updatePassword')">密码修改</ion-label>
  72. </ion-item>
  73. <ion-item class="item-menu" detail mode="md">
  74. <img src="@/assets/icon/gywm.png">
  75. <ion-label @click="router.push('/tabs/tabUser/about')">关于我们</ion-label>
  76. </ion-item>
  77. </div>
  78. </div>
  79. </div>
  80. </ion-content>
  81. </ion-page>
  82. </template>
  83. <script setup lang="ts">
  84. import { alertController } from '@ionic/vue';
  85. import { useUserStore } from '@/store/modules/user';
  86. import router from '@/router';
  87. import {getCurrentInstance, onMounted, onUpdated, ref} from "vue";
  88. import {getConfig} from "@/utils/config";
  89. const { appContext : { config: { globalProperties } } } = getCurrentInstance();
  90. const userStore = useUserStore();
  91. const user = ref(userStore.getUserInfo);
  92. const isDev = ref(false);
  93. const presentAlert = async () => {
  94. const alert = await alertController.create({
  95. header: '是否退出登陆?',
  96. buttons: [
  97. {
  98. text: '取消',
  99. role: 'cancel'
  100. },
  101. {
  102. text: '确定',
  103. role: 'confirm',
  104. handler: () => {
  105. userStore.logout().then(()=>{
  106. globalProperties.$routeActive = false;
  107. router.push("/login");
  108. });
  109. },
  110. },
  111. ],
  112. });
  113. await alert.present();
  114. }
  115. onMounted(() => {
  116. getConfig().then((res: any) => {
  117. isDev.value = res.isDev;
  118. }, () => {
  119. isDev.value = true;
  120. })
  121. })
  122. </script>
  123. <style lang="less">
  124. /*.tab-user-content{
  125. --background: #ffffff !important;
  126. .mine-toolbar {
  127. background-image: url("@/assets/icon/user-bg.png");
  128. background-repeat: no-repeat;
  129. background-size: 100% 100%;
  130. height: 220px;
  131. display: flex;
  132. //background: linear-gradient(to bottom, #39A9FF 30%, #ffffff);
  133. .mine-body {
  134. flex-wrap: wrap;
  135. flex-direction: row;
  136. width:100%;
  137. justify-content:center;
  138. div {
  139. text-align: center;
  140. color: var(--ion-color-primary-contrast);
  141. margin-top: 20px;
  142. }
  143. .info-title {
  144. color: var(--ion-color-primary-contrast);
  145. }
  146. .info-img {
  147. text-align: center;
  148. !*margin: 30px 0px;*!
  149. img {
  150. height: 60px;
  151. width: 60px;
  152. border-radius: 10px;
  153. margin-top: 10px;
  154. }
  155. }
  156. .info-text {
  157. flex-direction: column;
  158. .info-text-dp {
  159. font-size:12px;
  160. }
  161. }
  162. }
  163. }
  164. .item-menu {
  165. img {
  166. width: 24px;
  167. height: 24px;
  168. margin-left: 20px;
  169. margin-right: 10px;
  170. }
  171. }
  172. .login-out {
  173. border: 1px solid rgb(233,233,233);
  174. text-align:center;
  175. padding:12px 0px;
  176. margin-top:30px;
  177. width:100%;
  178. }
  179. ion-item::part(native) {
  180. padding: 0;
  181. }
  182. login-out {
  183. border: 1px solid rgb(233,233,233);
  184. text-align:center;
  185. padding:12px 0px;
  186. margin-top:45px;
  187. width:100%;
  188. }
  189. }*/
  190. .tab-user-content{
  191. background-image: url("../../assets/icon/user_bg.png");
  192. width: 100%;
  193. height: 100%;
  194. background-size: contain;
  195. background-repeat: no-repeat;
  196. background-color: #F7F8FC;
  197. background-attachment: local;
  198. overflow: hidden;
  199. .user_info{
  200. display: flex;
  201. align-items: center;
  202. margin: 90px 10px 10px 10px;
  203. padding: 10px;
  204. border-radius: 10px;
  205. background-color: rgba(255, 255, 255, 0.6);
  206. position: relative;
  207. z-index: 2;
  208. .user_text{
  209. padding-left: 20px;
  210. p{
  211. color: #899099;
  212. }
  213. }
  214. }
  215. .user_info::before{
  216. content: " ";
  217. position: absolute;
  218. top: 0;
  219. left: 0;
  220. width: 100%;
  221. height: 100%;
  222. z-index: -1;
  223. backdrop-filter: blur(2px);
  224. border-radius: 10px;
  225. }
  226. .user_panel{
  227. background-color: white;
  228. border-radius: 10px;
  229. padding: 10px;
  230. margin: 10px;
  231. .panel_title{
  232. font-size: 18px;
  233. padding: 15px;
  234. }
  235. .panel_list{
  236. ion-item{
  237. --inner-border-width: 0;
  238. --inner-padding-end:0px;
  239. ion-label{
  240. padding-left: 10px;
  241. }
  242. }
  243. }
  244. }
  245. }
  246. </style>