setting.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <route lang="yaml">
  2. name: personalSetting
  3. meta:
  4. title: 个人设置
  5. cache: personal-edit.password
  6. </route>
  7. <script lang="ts" setup name="PersonalSetting">
  8. import type { UploadProps } from 'element-plus'
  9. import { ElMessage } from 'element-plus'
  10. const router = useRouter()
  11. const form = ref({
  12. headimg: '',
  13. mobile: '',
  14. name: '',
  15. qq: '',
  16. wechat: '',
  17. })
  18. const handleSuccess: UploadProps['onSuccess'] = (res) => {
  19. if (res.error === '') {
  20. form.value.headimg = res.data.path
  21. }
  22. else {
  23. ElMessage.warning(res.error)
  24. }
  25. }
  26. const editPassword = () => {
  27. router.push({
  28. name: 'personalEditPassword',
  29. })
  30. }
  31. </script>
  32. <template>
  33. <div>
  34. <page-main>
  35. <el-tabs tab-position="left" style="height: 600px;">
  36. <el-tab-pane label="基本设置" class="basic">
  37. <h2>基本设置</h2>
  38. <el-row :gutter="20">
  39. <el-col :span="16">
  40. <el-form ref="formRef" :model="form" label-width="120px" label-suffix=":">
  41. <el-form-item label="名 称">
  42. <el-input v-model="form.name" placeholder="请输入你的名称" />
  43. </el-form-item>
  44. <el-form-item label="手机号">
  45. <el-input v-model="form.mobile" placeholder="请输入你的手机号" />
  46. </el-form-item>
  47. <el-form-item label="QQ 号">
  48. <el-input v-model="form.qq" placeholder="请输入你的 QQ 号" />
  49. </el-form-item>
  50. <el-form-item label="微信号">
  51. <el-input v-model="form.wechat" placeholder="请输入你的微信号" />
  52. </el-form-item>
  53. <el-form-item>
  54. <el-button type="primary">
  55. 保存
  56. </el-button>
  57. </el-form-item>
  58. </el-form>
  59. </el-col>
  60. <el-col :span="8">
  61. <image-upload v-model:url="form.headimg" action="http://scrm.1daas.com/api/upload/upload" name="image" :data="{ token: 'TKD628431923530324' }" notip class="headimg-upload" @on-success="handleSuccess" />
  62. </el-col>
  63. </el-row>
  64. </el-tab-pane>
  65. <el-tab-pane label="安全设置" class="security">
  66. <h2>安全设置</h2>
  67. <div class="setting-list">
  68. <div class="item">
  69. <div class="content">
  70. <div class="title">
  71. 账户密码
  72. </div>
  73. <div class="desc">
  74. 当前密码强度:强
  75. </div>
  76. </div>
  77. <div class="action">
  78. <el-button type="primary" text @click="editPassword">
  79. 修改
  80. </el-button>
  81. </div>
  82. </div>
  83. <div class="item">
  84. <div class="content">
  85. <div class="title">
  86. 密保手机
  87. </div>
  88. <div class="desc">
  89. 已绑定手机:187****3441
  90. </div>
  91. </div>
  92. <div class="action">
  93. <el-button type="primary" text>
  94. 修改
  95. </el-button>
  96. </div>
  97. </div>
  98. <div class="item">
  99. <div class="content">
  100. <div class="title">
  101. 备用邮箱
  102. </div>
  103. <div class="desc">
  104. 当前未绑定备用邮箱
  105. </div>
  106. </div>
  107. <div class="action">
  108. <el-button type="primary" text>
  109. 绑定
  110. </el-button>
  111. </div>
  112. </div>
  113. </div>
  114. </el-tab-pane>
  115. </el-tabs>
  116. </page-main>
  117. </div>
  118. </template>
  119. <style lang="scss" scoped>
  120. :deep(.el-tabs) {
  121. .el-tabs__header .el-tabs__nav {
  122. .el-tabs__active-bar {
  123. z-index: 0;
  124. width: 100%;
  125. background-color: var(--el-color-primary-light-9);
  126. border-right: 2px solid var(--el-color-primary);
  127. transition: transform 0.3s, background-color 0.3s, var(--el-transition-border);
  128. }
  129. .el-tabs__item {
  130. text-align: left;
  131. padding-right: 100px;
  132. }
  133. }
  134. .el-tab-pane {
  135. padding: 0 20px 0 30px;
  136. }
  137. }
  138. h2 {
  139. margin: 0;
  140. margin-bottom: 30px;
  141. font-weight: normal;
  142. }
  143. .basic {
  144. :deep(.headimg-upload) {
  145. text-align: center;
  146. .el-upload-dragger {
  147. border-radius: 50%;
  148. }
  149. }
  150. }
  151. .security {
  152. .setting-list {
  153. .item {
  154. display: flex;
  155. align-items: center;
  156. justify-content: space-between;
  157. padding: 10px 0;
  158. border-bottom: 1px solid var(--el-border-color-lighter);
  159. transition: var(--el-transition-border);
  160. .content {
  161. .title {
  162. margin-bottom: 5px;
  163. color: var(--el-text-color-primary);
  164. transition: var(--el-transition-color);
  165. }
  166. .desc {
  167. font-size: 14px;
  168. color: var(--el-text-color-secondary);
  169. transition: var(--el-transition-color);
  170. }
  171. }
  172. &:last-child {
  173. border-bottom: 0;
  174. }
  175. }
  176. }
  177. }
  178. </style>