Browse Source

合并

zhaowenkang/feature-20251028181547-行情页面
lihuilin 4 weeks ago
parent
commit
e805070c78
  1. 9
      main.js
  2. 246
      package-lock.json
  3. 3
      package.json
  4. 112
      pages.json
  5. 296
      pages/home/member.vue
  6. 86
      pages/setting/about.vue
  7. 213
      pages/setting/account.vue
  8. 85
      pages/setting/bind.vue
  9. 142
      pages/setting/email.vue
  10. 68
      pages/setting/font.vue
  11. 165
      pages/setting/general.vue
  12. 76
      pages/setting/introduce.vue
  13. 221
      pages/setting/market.vue
  14. 62
      pages/setting/message.vue
  15. 82
      pages/setting/newVersion.vue
  16. 144
      pages/setting/nextPwd.vue
  17. 171
      pages/setting/password.vue
  18. 143
      pages/setting/phone.vue
  19. 108
      pages/setting/push.vue
  20. 87
      pages/setting/server.vue
  21. 111
      pages/setting/share.vue
  22. 64
      pages/setting/theme.vue
  23. BIN
      static/my/BlackTheme.png
  24. BIN
      static/my/QRcode.png
  25. BIN
      static/my/about.png
  26. BIN
      static/my/aboutDC.png
  27. BIN
      static/my/award.png
  28. BIN
      static/my/bindedEmail.png
  29. BIN
      static/my/bindedPhone.png
  30. BIN
      static/my/changeBindPhone.png
  31. BIN
      static/my/changeEmail.png
  32. BIN
      static/my/common.png
  33. BIN
      static/my/connection.png
  34. BIN
      static/my/editName.png
  35. BIN
      static/my/greenBackground.png
  36. BIN
      static/my/greenRise.png
  37. BIN
      static/my/hideEye.png
  38. BIN
      static/my/invite.png
  39. BIN
      static/my/menu.png
  40. BIN
      static/my/myFriends.png
  41. BIN
      static/my/openEye.png
  42. BIN
      static/my/opinion.png
  43. BIN
      static/my/outline.png
  44. BIN
      static/my/polylines.png
  45. BIN
      static/my/redRise.png
  46. BIN
      static/my/security.png
  47. BIN
      static/my/setting.png
  48. BIN
      static/my/share.png
  49. BIN
      static/my/shareBackground.png
  50. BIN
      static/my/shareFriends.png
  51. BIN
      static/my/unlock.png
  52. BIN
      static/my/update.png
  53. BIN
      static/my/verification.png
  54. BIN
      static/my/whiteTheme.png
  55. BIN
      static/my/签到.png
  56. BIN
      static/my/行情设置.png
  57. BIN
      static/my/设置.png
  58. BIN
      static/my/铃铛2.png

9
main.js

@ -2,6 +2,9 @@
// #ifndef VUE3
import Vue from 'vue'
import App from './App'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
Vue.config.productionTip = false
@ -10,6 +13,10 @@ App.mpType = 'app'
const app = new Vue({
...App
})
app.use(ElementPlus)
for (const [key, component] of Object.entries(ElementPlusIconsVue{
app.component(key, component)
}
app.$mount()
// #endif
@ -32,7 +39,7 @@ function getCurrentLocale() {
return uni.getStorageSync('languageData').code;
} else {
let language = uni.getSystemInfoSync().osLanguage;
// language = 'zh_CN'
language = 'zh_CN'
if (language.indexOf('th') != -1) {
language = 'th'
uni.setStorageSync('languageData', {

246
package-lock.json

@ -1,10 +1,13 @@
{
"name": "DeepChartApp",
"name": "deepChartVueApp",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"dependencies": {
"@dcloudio/uni-ui": "^1.5.11",
"@element-plus/icons-vue": "^2.3.2",
"element-plus": "^2.11.5",
"vue-i18n": "^9.14.5"
}
},
@ -58,6 +61,55 @@
"node": ">=6.9.0"
}
},
"node_modules/@ctrl/tinycolor": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
"integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",
"license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/@dcloudio/uni-ui": {
"version": "1.5.11",
"resolved": "https://registry.npmjs.org/@dcloudio/uni-ui/-/uni-ui-1.5.11.tgz",
"integrity": "sha512-DBtk046ofmeFd82zRI7d89SoEwrAxYzUN3WVPm1DIBkpLPG5F5QDNkHMnZGu2wNrMEmGBjBpUh3vqEY1L3jaMw==",
"license": "Apache-2.0"
},
"node_modules/@element-plus/icons-vue": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz",
"integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==",
"license": "MIT",
"peerDependencies": {
"vue": "^3.2.0"
}
},
"node_modules/@floating-ui/core": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz",
"integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
"license": "MIT",
"dependencies": {
"@floating-ui/utils": "^0.2.10"
}
},
"node_modules/@floating-ui/dom": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz",
"integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==",
"license": "MIT",
"dependencies": {
"@floating-ui/core": "^1.7.3",
"@floating-ui/utils": "^0.2.10"
}
},
"node_modules/@floating-ui/utils": {
"version": "0.2.10",
"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
"integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
"license": "MIT"
},
"node_modules/@intlify/core-base": {
"version": "9.14.5",
"resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.14.5.tgz",
@ -109,6 +161,38 @@
"license": "MIT",
"peer": true
},
"node_modules/@popperjs/core": {
"name": "@sxzz/popperjs-es",
"version": "2.11.7",
"resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
"integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==",
"license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/popperjs"
}
},
"node_modules/@types/lodash": {
"version": "4.17.20",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz",
"integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==",
"license": "MIT"
},
"node_modules/@types/lodash-es": {
"version": "4.17.12",
"resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
"integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
"license": "MIT",
"dependencies": {
"@types/lodash": "*"
}
},
"node_modules/@types/web-bluetooth": {
"version": "0.0.16",
"resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
"integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==",
"license": "MIT"
},
"node_modules/@vue/compiler-core": {
"version": "3.5.22",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.22.tgz",
@ -224,6 +308,100 @@
"license": "MIT",
"peer": true
},
"node_modules/@vueuse/core": {
"version": "9.13.0",
"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz",
"integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
"license": "MIT",
"dependencies": {
"@types/web-bluetooth": "^0.0.16",
"@vueuse/metadata": "9.13.0",
"@vueuse/shared": "9.13.0",
"vue-demi": "*"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@vueuse/core/node_modules/vue-demi": {
"version": "0.14.10",
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
"integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
"vue-demi-fix": "bin/vue-demi-fix.js",
"vue-demi-switch": "bin/vue-demi-switch.js"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
},
"peerDependencies": {
"@vue/composition-api": "^1.0.0-rc.1",
"vue": "^3.0.0-0 || ^2.6.0"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
}
}
},
"node_modules/@vueuse/metadata": {
"version": "9.13.0",
"resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz",
"integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@vueuse/shared": {
"version": "9.13.0",
"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz",
"integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
"license": "MIT",
"dependencies": {
"vue-demi": "*"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@vueuse/shared/node_modules/vue-demi": {
"version": "0.14.10",
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
"integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
"vue-demi-fix": "bin/vue-demi-fix.js",
"vue-demi-switch": "bin/vue-demi-switch.js"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
},
"peerDependencies": {
"@vue/composition-api": "^1.0.0-rc.1",
"vue": "^3.0.0-0 || ^2.6.0"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
}
}
},
"node_modules/async-validator": {
"version": "4.2.5",
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
"integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==",
"license": "MIT"
},
"node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
@ -231,6 +409,37 @@
"license": "MIT",
"peer": true
},
"node_modules/dayjs": {
"version": "1.11.18",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz",
"integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==",
"license": "MIT"
},
"node_modules/element-plus": {
"version": "2.11.5",
"resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.11.5.tgz",
"integrity": "sha512-O+bIVHQCjUDm4GiIznDXRoS8ar2TpWLwfOGnN/Aam0VXf5kbuc4SxdKKJdovWNxmxeqbcwjsSZPKgtXNcqys4A==",
"license": "MIT",
"dependencies": {
"@ctrl/tinycolor": "^3.4.1",
"@element-plus/icons-vue": "^2.3.2",
"@floating-ui/dom": "^1.0.1",
"@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
"@types/lodash": "^4.17.20",
"@types/lodash-es": "^4.17.12",
"@vueuse/core": "^9.1.0",
"async-validator": "^4.2.5",
"dayjs": "^1.11.18",
"lodash": "^4.17.21",
"lodash-es": "^4.17.21",
"lodash-unified": "^1.0.3",
"memoize-one": "^6.0.0",
"normalize-wheel-es": "^1.2.0"
},
"peerDependencies": {
"vue": "^3.2.0"
}
},
"node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
@ -251,6 +460,29 @@
"license": "MIT",
"peer": true
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"license": "MIT"
},
"node_modules/lodash-es": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
"integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
"license": "MIT"
},
"node_modules/lodash-unified": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz",
"integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
"license": "MIT",
"peerDependencies": {
"@types/lodash-es": "*",
"lodash": "*",
"lodash-es": "*"
}
},
"node_modules/magic-string": {
"version": "0.30.19",
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.19.tgz",
@ -261,6 +493,12 @@
"@jridgewell/sourcemap-codec": "^1.5.5"
}
},
"node_modules/memoize-one": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
"license": "MIT"
},
"node_modules/nanoid": {
"version": "3.3.11",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
@ -280,6 +518,12 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"node_modules/normalize-wheel-es": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
"integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==",
"license": "BSD-3-Clause"
},
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",

3
package.json

@ -1,5 +1,8 @@
{
"dependencies": {
"@dcloudio/uni-ui": "^1.5.11",
"@element-plus/icons-vue": "^2.3.2",
"element-plus": "^2.11.5",
"vue-i18n": "^9.14.5"
}
}

112
pages.json

@ -1,6 +1,8 @@
{
"pages": [
{
"easycom": {
"^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
},
"pages": [{
"path": "pages/home/home",
"style": {
"navigationStyle": "custom",
@ -68,6 +70,112 @@
"disableSwipeBack": true,
"titleNView": false,
"bounce": false
},
{
"path": "pages/setting/general",
"style": {
"navigationBarTitleText": "通用设置"
}
},
{
"path": "pages/setting/font",
"style": {
"navigationBarTitleText": "字体大小"
}
},
{
"path": "pages/setting/theme",
"style": {
"navigationBarTitleText": "主题切换"
}
},
{
"path": "pages/setting/message",
"style": {
"navigationBarTitleText": "消息推送"
}
},
{
"path": "pages/setting/push",
"style": {
"navigationBarTitleText": "推送设置"
}
},
{
"path": "pages/setting/server",
"style": {
"navigationBarTitleText": "选择服务器"
}
},
{
"path": "pages/setting/market",
"style": {
"navigationBarTitleText": "行情设置"
}
},
{
"path": "pages/setting/account",
"style": {
"navigationBarTitleText": "账号与安全"
}
},
{
"path": "pages/setting/newVersion",
"style": {
"navigationBarTitleText": "新版本更新"
}
},
{
"path": "pages/setting/about",
"style": {
"navigationBarTitleText": "关于DeepChart"
}
},
{
"path": "pages/setting/introduce",
"style": {
"navigationBarTitleText": "产品介绍"
}
},
{
"path": "pages/setting/bind",
"style": {
"navigationBarTitleText": "绑定账号"
}
},
{
"path": "pages/setting/phone",
"style": {
"navigationBarTitleText": "绑定账号"
//
}
},
{
"path": "pages/setting/email",
"style": {
"navigationBarTitleText": "绑定账号"
//
}
},
{
"path": "pages/setting/password",
"style":
{
"navigationBarTitleText": "修改密码"
}
},
{
"path" : "pages/setting/nextPwd",
"style" :
{
"navigationBarTitleText" : "修改密码"
}
},
{
"path" : "pages/setting/share",
"style" :
{
"navigationBarTitleText" : "分享领取奖励"
}
}
],

296
pages/home/member.vue

@ -1,28 +1,294 @@
<template>
<view class="main">
<!-- 顶部状态栏占位 -->
<view class="top" :style="{height:iSMT+'px'}"></view>
<view>我的</view>
<view class="top">
<view class="bell">
<image class="image-bell" src="/static/my/铃铛2.png"></image>
</view>
<view class="msg">
<view class="msg-left">
<view class="avatar"></view>
</view>
<view class="msg-center">
<view style="display: flex;">
<view class="userInfo">{{ username }}</view>
<image class="image-editName" src="/static/my/editName.png"></image>
</view>
<view class="userId">ID:{{ dccode }}</view>
</view>
<view class="msg-right">
<image class="image-attendance" src="/static/my/签到.png" />
<span style="font-size:10px;">签到</span>
</view>
</view>
<view class="settings-buttons">
<view class="setting-btn" @click="goToMarket">
<image src="/static/my/行情设置.png" class="setting-icon" />
<text>行情设置</text>
</view>
<view class="setting-btn" @click="goToGeneral">
<image src="/static/my/设置.png" class="setting-icon" />
<text>通用设置</text>
</view>
</view>
<view class="share" @click="goToShare">
<image class="img-share" src="/static/my/share.png" mode="widthFix" />
</view>
</view>
<view class="bottom">
<view class="list-item" @click="goToAccount">
<image src="/static/my/security.png" class="list-icon" />
<text>账号与安全</text>
<uni-icons type="arrowright" size="16" class="arrow" />
</view>
<view class="list-item">
<image src="/static/my/connection.png" class="list-icon" />
<text>联系我们</text>
<uni-icons type="arrowright" size="16" class="arrow" />
</view>
<view class="list-item" @click="goToNewVersion">
<image src="/static/my/update.png" class="list-icon" />
<text>新版本更新</text>
<view class="update-tip">有新版本可更新
<view class="circle"></view>
</view>
<uni-icons type="arrowright" size="16" class="arrow" />
</view>
<view class="list-item">
<image src="/static/my/opinion.png" class="list-icon" />
<text>意见反馈</text>
<uni-icons type="arrowright" size="16" class="arrow" />
</view>
<view class="list-item" @click="goToAbout">
<image src="/static/my/about.png" class="list-icon" />
<text>关于DeepChart</text>
<uni-icons type="arrowright" size="16" class="arrow" />
</view>
</view>
<footerBar class="static-footer" :type="type"></footerBar>
</view>
</template>
<script setup>
import { ref,onMounted } from 'vue'
import footerBar from '../../components/footerBar.vue'
import {
ref,
onMounted
} from 'vue'
import {
ArrowRight
} from '@element-plus/icons-vue'
import footerBar from '../../components/footerBar.vue'
const type = ref('member')
const iSMT = ref(0)
const username = ref('演示机EVA')
const dccode = ref('90047681')
const goToGeneral = () => {
uni.navigateTo({
url: '/pages/setting/general'
})
}
const goToMarket = () => {
uni.navigateTo({
url: '../setting/market'
})
}
const type = ref('member')
const iSMT = ref(0)
const goToAccount = () => {
uni.navigateTo({
url:'../setting/account'
})
}
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
})
const goToNewVersion = () =>{
uni.navigateTo({
url:'../setting/newVersion'
})
}
const goToAbout = () =>{
uni.navigateTo({
url:'../setting/about'
})
}
const goToShare = () =>{
uni.navigateTo({
url:'../setting/share'
})
}
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight
console.log('??????????????', iSMT.value)
})
</script>
<style scoped>
.static-footer {
position: fixed;
bottom: 0;
}
.static-footer {
position: fixed;
bottom: 0;
}
.top {
height: 47vh;
background-color: white;
}
.bell {
height: 9.6vh;
display: flex;
align-items: flex-end;
justify-content: flex-end;
padding-right: 50rpx;
}
.image-bell {
width: 13px;
height: 16px;
}
.msg {
height: 10.7vh;
display: flex;
margin-top: 3vh;
margin-bottom: 3vh;
}
.msg-left {
width: 33.6vw;
display: flex;
justify-content: center;
align-items: center;
}
.avatar {
width: 175rpx;
height: 175rpx;
border-radius: 50%;
background-color: black;
}
.msg-center {
width: 51.7vw;
padding-left: 2.5vh;
display: flex;
flex-direction: column;
justify-content: center;
}
.userInfo {
font-size: 20px;
}
.userId {
font-size: 14px;
margin-top: 1vh;
}
.image-editName {
width: 40rpx;
height: 40rpx;
margin-left: 2vw;
}
.msg-right {
width: 14.7vw;
display: flex;
flex-direction: column;
justify-content: center;
}
.image-attendance {
width: 43rpx;
height: 43rpx;
}
.settings-buttons {
display: flex;
justify-content: space-around;
}
.setting-btn {
width: 349rpx;
height: 135rpx;
display: flex;
align-items: center;
justify-content: center;
background-color: rgb(243, 243, 243);
border-radius: 8%;
}
.setting-icon {
width: 64.7rpx;
height: 64.7rpx;
margin-right: 25rpx;
}
.setting-btn text {
font-size: 28rpx;
font-weight: bold;
color: #333;
}
.share {
height: 12.6vh;
display: flex;
justify-content: center;
align-items: center;
}
.img-share {
width: 720rpx;
height: 160rpx;
}
.bottom {
height: 44.5vh;
margin-top: 1vh;
background-color: rgb(255, 255, 255);
}
.list-item {
width: 670rpx;
height: 7vh;
display: flex;
align-items: center;
margin: 0rpx 40rpx;
border-bottom: 1rpx solid #eee;
}
.list-item:last-child{
border-bottom: none;
}
.list-icon {
width: 42rpx;
height: 42rpx;
margin-right: 18rpx;
}
.arrow {
margin-left: auto;
}
.update-tip {
display: flex;
color: #999;
font-size: 24rpx;
align-items: center;
margin-left: 200rpx;
justify-content: center;
}
.circle {
width: 10rpx;
height: 10rpx;
border-radius: 50%;
background-color: red;
margin-left: 10rpx;
}
</style>

86
pages/setting/about.vue

@ -0,0 +1,86 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view style="height:1.5vh" />
<view class="top">
<img src="/static/my/aboutDC.png"></img>
</view>
<view class="bottom">
<view class="bottom-list" @click="goToIntroduce">
<text class="label">产品介绍</text>
<uni-icons type="arrowright" size="16" />
</view>
<view class="bottom-list">
<text class="label">免责声明</text>
<uni-icons type="arrowright" size="16" />
</view>
<view class="bottom-list">
<text class="label">隐私政策</text>
<uni-icons type="arrowright" size="16" />
</view>
<view class="bottom-list">
<text class="label">服务协议</text>
<uni-icons type="arrowright" size="16" />
</view>
<view class="bottom-list">
<text class="label">鼓励一下</text>
<uni-icons type="arrowright" size="16" />
</view>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
const goToIntroduce = () =>{
uni.navigateTo({
url: '../setting/introduce'
})
}
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
console.log('看看高度', iSMT.value)
})
</script>
<style>
.top {
height: 23vh;
display: flex;
justify-content: center;
align-items: center;
background-color: white;
}
.bottom {
height: 35vh;
background-color: white;
}
.bottom-list {
width: 630rpx;
height: 7vh;
display: flex;
align-items: center;
justify-content: center;
margin: 0 40rpx;
padding: 0 10rpx;
border-bottom: 1rpx solid #eee;
}
.bottom-list:last-child {
border-bottom: none;
}
.label{
flex:1;
}
</style>

213
pages/setting/account.vue

@ -0,0 +1,213 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view style="height:1.5vh;"></view>
<view class="setting-list">
<view class="setting-item">
<text class="item-label">头像</text>
<view class="item-right">
<image src="/static/avatar.png" class="avatar" mode="aspectFill"></image>
<uni-icons type="arrowright" size="16" class="arrow"></uni-icons>
</view>
</view>
<view class="setting-item">
<text class="item-label">昵称</text>
<view class="item-right">
<text class="item-text">DeepChart</text>
<uni-icons type="arrowright" size="16" class="arrow"></uni-icons>
</view>
</view>
<view class="setting-item">
<text class="item-label">ID</text>
<view class="item-right">
<text class="item-text">{{ jwcode }}</text>
<uni-icons type="arrowright" size="16" class="arrow"></uni-icons>
</view>
</view>
<view class="setting-item">
<text class="item-label">密码</text>
<view class="item-right">
<text class="item-text">qwertyuiop</text>
<uni-icons type="eye" size="16" class="eye-icon"></uni-icons>
</view>
</view>
<view class="setting-item" @click="goToPassword">
<text class="item-label">修改密码</text>
<uni-icons type="arrowright" size="16" class="arrow"></uni-icons>
</view>
<view class="setting-item">
<text class="item-label">注销账号</text>
<uni-icons type="arrowright" size="16" class="arrow"></uni-icons>
</view>
<view class="setting-item" @click="goToBind">
<text class="item-label">绑定账号</text>
<uni-icons type="arrowright" size="16" class="arrow"></uni-icons>
</view>
</view>
<view style="height:1.5vh;"></view>
<view class="logout" @click="showLogout = true">
<text>退出登录</text>
</view>
<view class="logout-confirm" v-if="showLogout">
<view class="logoutDialog">
<view class="tips">是否退出登录</view>
<view class="tips-button">
<button class="confirm-btn" @click="handleConfirmLogout">确认</button>
<button class="cancel-btn" @click="showLogout = false">取消</button>
</view>
</view>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
const jwcode = ref('90047681')
const showLogout = ref(false)
const handleConfirmLogout = () => {
showLogout.value = false
uni.showToast({
title: '退出登录成功',
icon: 'none',
})
}
const goToBind = () =>{
uni.navigateTo({
url:'../setting/bind'
})
}
const goToPassword = () =>{
uni.navigateTo({
url:'../setting/password'
})
}
onMounted(() => {
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
})
</script>
<style scoped>
.setting-list {
height: 49vh;
background-color: #fff;
}
.setting-item {
display: flex;
align-items: center;
height: 7vh;
padding: 0 40rpx;
border-bottom: 1rpx solid #eee;
}
.setting-item:last-child {
border-bottom: none;
}
.item-label {
font-size: 28rpx;
flex: 1;
}
.item-right {
display: flex;
align-items: center;
}
.avatar {
width: 60rpx;
height: 60rpx;
border-radius: 50%;
margin-right: 20rpx;
background-color: #999;
}
.item-text {
margin-right: 20rpx;
font-size: 28rpx;
}
.arrow,
.eye-icon {
color: #999;
}
.logout {
display: flex;
justify-content: center;
align-items: center;
height: 7vh;
font-size: 28rpx;
color: #f56c6c;
background-color: white;
}
.logout-confirm {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
z-index: 999;
}
.logoutDialog {
width: 500rpx;
background-color: #fff;
border-radius: 12rpx;
padding: 40rpx;
display: flex;
flex-direction: column;
align-items: center;
}
.tips {
font-size: 32rpx;
margin-bottom: 40rpx;
}
.tips-button {
display: flex;
width: 100%;
justify-content: space-between;
}
.confirm-btn,
.cancel-btn {
width: 180rpx;
height: 60rpx;
line-height: 60rpx;
border-radius: 30rpx;
font-size: 28rpx;
}
.confirm-btn {
background-color: #fff;
color: #000;
border: 1rpx solid #ddd;
}
.cancel-btn {
background-color: #000;
color: #fff;
border: none;
}
</style>

85
pages/setting/bind.vue

@ -0,0 +1,85 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view style="height:1.5vh;" />
<view class="top">
<view class="top-list" @click="goToBindPhone">
<text class="label">手机号</text>
<view class="right">
<text style="font-size: 28rpx;">未绑定</text>
<uni-icons type="arrowright" size="16" />
</view>
</view>
<view class="top-list" @click="goToBindEmail">
<text class="label">邮箱</text>
<view class="right">
<text style="font-size: 28rpx;">analsak@163.com</text>
<uni-icons type="arrowright" size="16" />
</view>
</view>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
const goToBindPhone = () =>{
uni.navigateTo({
url:'../setting/phone'
})
}
const goToBindEmail = () =>{
uni.navigateTo({
url:'../setting/email'
})
}
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
console.log('看看高度', iSMT.value)
})
</script>
<style>
.top {
height: 14vh;
background-color: white;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.top-list {
width: 630rpx;
height: 7vh;
margin: 0rpx 40rpx;
display: flex;
align-items: center;
border-bottom: 1rpx solid #eee;
}
.top-list:last-child {
border: none;
}
.label {
font-size: 28rpx;
flex: 1;
}
.right{
display: flex;
align-items: center;
justify-content: center;
}
</style>

142
pages/setting/email.vue

@ -0,0 +1,142 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view style="height:1.5vh;" />
<view class="top">
<view class="top-list">
<view class="left">
<img src="/static/my/bindedEmail.png" />
<text class="label">已绑邮箱{{ email }}</text>
</view>
</view>
<view class="top-list">
<view class="left">
<img src="/static/my/changeEmail.png" />
<text class="label">+86</text>
<input type="number" placeholder="请输入您的换绑邮箱" class="input" />
</view>
<view class="right">
<button class="verification" :class="{ 'disabled': gettingCode }" @click="getVerification"
:disabled="gettingCode">
{{ gettingCode ? `重新发送 ${time}s` : '获取验证码' }}
</button>
</view>
</view>
<view class="top-list">
<view class="left">
<img src="/static/my/verification.png" />
<input type="text" placeholder="请输入验证码" class="input" />
</view>
</view>
</view>
<view class="bottom">
<button class="change-btn">换绑</button>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
const email = ref('analsak@16.com')
const gettingCode = ref(false)
const time = ref(60)
const getVerification = () => {
if (gettingCode.value) return
gettingCode.value = true
time.value = 60
const timer = setInterval(() => {
time.value--
if (time.value <= 0) {
clearInterval(timer)
gettingCode.value = false
}
}, 1000)
}
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
console.log('看看高度', iSMT.value)
})
</script>
<style>
.top {
height: auto;
background-color: white;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.top-list {
width: 630rpx;
height: 7vh;
margin: 0rpx 40rpx;
display: flex;
align-items: center;
border-bottom: 1rpx solid #eee;
}
.left {
flex: 1;
display: flex;
align-items: center;
}
.label {
font-size: 28rpx;
margin-left: 10rpx;
}
.right {
display: flex;
align-items: center;
justify-content: center;
}
.input {
flex: 1;
height: 70rpx;
font-size: 29rpx;
margin-left: 20rpx;
}
.verification {
font-size: 24rpx;
border-radius: 10rpx;
background-color: rgb(230, 230, 230);
}
.bottom {
height: 22vh;
background-color: white;
display: flex;
align-items: center;
justify-content: center;
}
.change-btn {
height: 85rpx;
width: 610rpx;
padding:0 20rpx;
background-color: black;
color: white;
border-radius: 40rpx;
display: flex;
align-items: center;
justify-content: center;
}
</style>

68
pages/setting/font.vue

@ -0,0 +1,68 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view class="top">
<view class="top-list">
<text>标准</text>
<radio value="0" class="radio-btn" activeBackgroundColor="red"
:checked="selectedIndex === 0" @click="selectFont(0)" />
</view>
<view class="top-list">
<text>中号</text>
<radio value="1" class="radio-btn" activeBackgroundColor="red"
:checked="selectedIndex === 1" @click="selectFont(1)" />
</view>
<view class="top-list">
<text>大号</text>
<radio value="2" class="radio-btn" activeBackgroundColor="red"
:checked="selectedIndex === 2" @click="selectFont(2)" />
</view>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
const selectedIndex = ref(0)
const selectFont = (index) => {
selectedIndex.value = index
console.log('看看选中状态',selectedIndex.value)
}
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
console.log('看看高度', iSMT.value)
})
</script>
<style>
.top {
margin-top: 1.5vh;
height: 21vh;
background-color: white;
}
.top-list {
width: 630rpx;
height: 7vh;
display: flex;
align-items: center;
margin: 0 40rpx;
padding:0 10rpx;
border-bottom: 1rpx solid #eee;
}
.top-list:last-child {
border-bottom: none;
}
.radio-btn {
margin-left: auto;
transform: scale(0.6);
}
</style>

165
pages/setting/general.vue

@ -0,0 +1,165 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view class="top">
<view class="top-list">
<text>语言</text>
<text class="language">中文简体</text>
<uni-icons type="arrowright" size="16" class="arrow" />
</view>
<view class="top-list" @click="goToFont">
<text>字体大小</text>
<uni-icons type="arrowright" size="16" class="arrow" />
</view>
<view class="top-list" @click="goToTheme">
<text>主题切换</text>
<uni-icons type="arrowright" size="16" class="arrow" />
</view>
</view>
<view class="center">
<view class="center-list" @click="goToMessage">
<text>消息推送</text>
<uni-icons type="arrowright" size="16" class="arrow" />
</view>
</view>
<view class="bottom">
<view class="bottom-list" @click="goToServer">
<text>切换服务器</text>
<uni-icons type="arrowright" size="16" class="arrow" />
</view>
<view class="bottom-list" @click="clearCache">
<text>清理缓存</text>
<text class="cache">{{ cache }}M</text>
<uni-icons type="arrowright" size="16" class="arrow" />
</view>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
const cache = ref('45.5')
const goToFont = () => {
uni.navigateTo({
url: '/pages/setting/font'
})
}
const goToTheme = () => {
uni.navigateTo({
url: '/pages/setting/theme'
})
}
const goToMessage = () => {
uni.navigateTo({
url: '/pages/setting/message'
})
}
const goToServer = () => {
uni.navigateTo({
url: '/pages/setting/server'
})
}
const clearCache = () => {
cache.value = 0
uni.showToast({
title: '清理成功',
icon: 'success',
duration: 1500
})
}
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
console.log('看看高度', iSMT.value)
})
</script>
<style>
.top {
margin-top: 1.5vh;
height: 21vh;
background-color: white;
}
.top-list {
width: 630rpx;
height: 7vh;
display: flex;
align-items: center;
margin: 0 40rpx;
padding: 0 10rpx;
border-bottom: 1rpx solid #eee;
}
.top-list:last-child {
border-bottom: none;
}
.language {
margin-left: 55%;
font-size: 14px;
color: rgb(203, 203, 203);
}
.arrow {
margin-left: auto;
}
.center {
background-color: white;
height: 7vh;
display: flex;
align-items: center;
margin-top: 1vh;
}
.center-list {
width: 630rpx;
margin: 0rpx 40rpx;
display: flex;
padding: 0 10rpx;
}
.center-list>.arrow {
margin-right: 0;
}
.bottom {
height: 13.5vh;
background-color: white;
margin-top: 1vh;
}
.bottom-list {
width: 630rpx;
height: 7vh;
display: flex;
align-items: center;
margin: 0 40rpx;
padding: 0 10rpx;
border-bottom: 1rpx solid #eee;
}
.cache {
margin-left: 55%;
font-size: 14px;
color: rgb(203, 203, 203);
}
.bottom-list:last-child {
border-bottom: none;
}
</style>

76
pages/setting/introduce.vue

@ -0,0 +1,76 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view style="height:1.5vh" />
<view class="top">
<img src="/static/my/aboutDC.png"></img>
</view>
<view class="bottom">
<view class="title">1.产品定位</view>
<view class="main-text">DeepChart全球最懂机构行为的AI你的AI投资伙伴强化"深度分析"
的品牌标签DeepChart=全球最懂机构行为的AI主打"深度解读机构行为"的APP</view>
<view class="title">2.产品介绍</view>
<view class="main-text">DeepChart是一款以"Al智能体为决策核心的智能投资分析平台
专注于深度研究机构行为专为全球散户投资者量身打造它重新定义了人与投资工具之间的关系
是一个真正懂投资懂市场更懂用户的AI投资伙伴</view>
<view class="title">3.产品理念</view>
<view class="main-text">人找信息AI智能体替你思考和管理</view>
<view class="title">4.功能定位全景AI决策体系</view>
<view class="main-text">黄其振是大笨蛋</view>
<view class="main-text">李建霖是大笨蛋</view>
<view class="main-text">double是大笨蛋</view>
<view class="main-text">张鲁平是大笨蛋</view>
<view style="height:1.5vh;background-color: white;" />
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
console.log('看看高度', iSMT.value)
})
</script>
<style>
.top {
height: 26vh;
display: flex;
justify-content: center;
align-items: center;
background-color: white;
}
.bottom {
height: 35vh;
padding: 0 60rpx;
background-color: white;
height: auto;
}
.title {
font-size: 30rpx;
font-weight: bold;
margin-bottom: 20rpx;
}
.main-text {
font-size: 27rpx;
margin-bottom: 20rpx;
color: rgb(122, 122, 122);
text-align: justify;
text-justify: inter-character;/* 两端对齐哈哈哈哈 */
}
</style>

221
pages/setting/market.vue

@ -0,0 +1,221 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view class="time-share-title">
<text>分时设计</text>
</view>
<view style="height:57.5vh;background-color: white;">
<view class="title">A股竞价</view>
<view class="top-options">
<view class="option-btn" :class="{ 'active': aStockBid === 0 }" @click="aStockBid = 0">
<text>智能开启</text>
<view class="active-dot" v-if="aStockBid === 0"></view>
</view>
<view class="option-btn" :class="{ 'active': aStockBid === 1 }" @click="aStockBid = 1">
<text>保持开启</text>
<view class="active-dot" v-if="aStockBid === 1"></view>
</view>
<view class="option-btn" :class="{ 'active': aStockBid === 2 }" @click="aStockBid = 2">
<text>保持关闭</text>
<view class="active-dot" v-if="aStockBid === 2"></view>
</view>
</view>
<view class="title">K线样式</view>
<view class="top-options">
<view class="option-btn" :class="{ 'active': kStyle === 0 }" @click="kStyle = 0">
<img src="/static/my/common.png" class="kline-icon" />
<text>普通</text>
<view class="active-dot" v-if="kStyle === 0"></view>
</view>
<view class="option-btn" :class="{ 'active': kStyle === 1 }" @click="kStyle = 1">
<img src="/static/my/outline.png" class="kline-icon" />
<text>轮廓图</text>
<view class="active-dot" v-if="kStyle === 1"></view>
</view>
<view class="option-btn" :class="{ 'active': kStyle === 2 }" @click="kStyle = 2">
<img src="/static/my/polylines.png" class="kline-icon" />
<text>折线图</text>
<view class="active-dot" v-if="kStyle === 2"></view>
</view>
</view>
<view class="title">除权类型</view>
<view class="top-options">
<view class="option-btn" :class="{ 'active': exRights === 0 }" @click="exRights = 0">
<text>除权</text>
<view class="active-dot" v-if="exRights === 0"></view>
</view>
<view class="option-btn" :class="{ 'active': exRights === 1 }" @click="exRights = 1">
<text>普通</text>
<view class="active-dot" v-if="exRights === 1"></view>
</view>
<view class="option-btn" :class="{ 'active': exRights === 2 }" @click="exRights = 2">
<text>加权</text>
<view class="active-dot" v-if="exRights === 2"></view>
</view>
</view>
<view class="title">涨跌颜色</view>
<view class="top-options">
<view class="option-btn" :class="{ 'active': rfColor === 0 }" @click="rfColor = 0">
<view class="color-icon">
<img src="/static/my/greenRise.png" class="kline-icon" />
</view>
<text>绿涨红跌</text>
<view class="active-dot" v-if="rfColor === 0"></view>
</view>
<view class="option-btn" :class="{ 'active': rfColor === 1 }" @click="rfColor = 1">
<view class="color-icon">
<img src="/static/my/redRise.png" class="kline-icon" />
</view>
<text>红涨绿跌</text>
<view class="active-dot" v-if="rfColor === 1"></view>
</view>
</view>
<view class="title">副图指标个数</view>
<view class="top-options">
<view class="option-btn" :class="{ 'active': indexCount === 0 }" @click="indexCount = 0">
<text>1</text>
</view>
<view class="option-btn" :class="{ 'active': indexCount === 1 }" @click="indexCount = 1">
<text>2</text>
</view>
<view class="option-btn" :class="{ 'active': indexCount === 2 }" @click="indexCount = 2">
<text>3</text>
</view>
</view>
</view>
<view class="indicator-title">
<text>指标设置</text>
</view>
<view class="indicator-list">
<view class="indicator-item" v-for="(item, index) in indicatorList" :key="index">
<text class="indicator-text">{{ item }}</text>
<view class="indicator-icons">
<img src="/static/my/setting.png" class="icon" />
<img src="/static/my/menu.png" class="icon" />
</view>
</view>
<view style="height:10vh;background-color: white;"></view>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
const aStockBid = ref(0) // Stock bidding
const kStyle = ref(0) // k线
const exRights = ref(0) // Ex-rights
const rfColor = ref(0) // rise-fall
const indexCount = ref(0) //
const indicatorList = ref(['K线', '均线', '成交量', 'KDJ', 'MACD', 'RSI'])
onMounted(() => {
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
})
</script>
<style scoped>
.time-share-title {
height: 4.5vh;
padding: 0 40rpx;
display: flex;
align-items: center;
}
.title {
height: 5.5vh;
padding: 0 40rpx;
display: flex;
align-items: center;
font-size: 26rpx;
color: #666;
}
.top-options {
height: 5.5vh;
display: flex;
padding: 0 40rpx;
}
.option-btn {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
border: 1rpx solid #ddd;
border-radius: 8rpx;
margin: 0 10rpx;
padding: 15rpx 0;
font-size: 28rpx;
}
.option-btn.active {
border-color: red;
}
.active-dot {
width: 16rpx;
height: 16rpx;
background-color: red;
border-radius: 50%;
margin-left: 10rpx;
}
.kline-icon {
margin-right: 10rpx;
font-size: 32rpx;
}
.color-icon {
margin-right: 10rpx;
display: flex;
gap: 4rpx;
}
.indicator-title {
height: 6vh;
padding: 0 40rpx;
display: flex;
align-items: center;
}
.indicator-list {
display: flex;
flex-direction: column;
justify-content: center;
padding: 0 40rpx;
background-color: white;
}
.indicator-item {
display: flex;
align-items: center;
height: 7.5vh;
border-bottom: 1rpx solid #eee;
}
.indicator-text {
font-size: 28rpx;
}
.indicator-icons {
display: flex;
gap: 100rpx;
margin-left: auto;
}
.icon {
width: 28rpx;
height: 28rpx;
}
</style>

62
pages/setting/message.vue

@ -0,0 +1,62 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view class="top">
<view class="top-list" @click="goToPush">
<text>语言</text>
<text class="message" v-if="isMessage">通知已开启</text>
<text class="message" v-if="!isMessage">通知未开启</text>
<uni-icons type="arrowright" size="16" class="arrow" />
</view>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
const isMessage = ref(true)
const goToPush = () =>{
uni.navigateTo({
url: '/pages/setting/push'
})
}
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
console.log('看看高度', iSMT.value)
})
</script>
<style>
.top {
margin-top: 1.5vh;
height: 7vh;
background-color: white;
display: flex;
justify-content: center;
}
.top-list {
width: 630rpx;
height: 7vh;
display: flex;
align-items: center;
margin: 0rpx 40rpx;
}
.message {
margin-left: 60%;
font-size: 14px;
color: rgb(203, 203, 203);
}
.arrow {
margin-left: auto;
}
</style>

82
pages/setting/newVersion.vue

@ -0,0 +1,82 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view style="height:1.5vh;" />
<view class="top">
<view class="top-list">
<text v-if="hasNew === true" class="label">已有新版本</text>
<text v-if="hasNew === false" class="label">已是最新版本</text>
<view class="right">
<text style="font-size: 28rpx;">{{ version }}</text>
</view>
</view>
</view>
<view style="height:1vh;" />
<view class="bottom">
<button v-if="hasNew === true" class="bottom-btn">立即更新</button>
<button v-if="hasNew === false" class="bottom-btn" disabled
style="background-color: rgb(204,204,204);color:white;">暂无更新</button>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
const hasNew = ref(true)
const version = ref('2.0')
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
console.log('看看高度', iSMT.value)
})
</script>
<style>
.top {
height: 7vh;
background-color: white;
display: flex;
justify-content: center;
}
.top-list {
width: 630rpx;
height: 7vh;
display: flex;
align-items: center;
margin: 0rpx 40rpx;
}
.label {
font-size: 28rpx;
flex: 1;
}
.bottom {
height: 11vh;
background-color: white;
padding: 0 50rpx;
display: flex;
justify-content: center;
align-items: center;
}
.bottom-btn {
width: 670rpx;
height: 84rpx;
border-radius: 40rpx;
background-color: #000;
color: #fff;
font-size: 28rpx;
display: flex;
align-items: center;
justify-content: center;
}
</style>

144
pages/setting/nextPwd.vue

@ -0,0 +1,144 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view style="height:1.5vh;" />
<view class="title">
<text class="label">确认新密码</text>
</view>
<view class="top">
<view class="top-list">
<view class="left">
<img src="/static/my/unlock.png" />
<input type="password" :type="pwdType" placeholder="请输入新密码" class="input" />
<img :src="pwdType === 1 ? '/static/my/hideEye.png' : '/static/my/openEye.png'"
@click="changeEye(1)" />
</view>
</view>
<view class="top-list">
<view class="left">
<img src="/static/my/unlock.png" />
<input type="password" :type="pwdType2" placeholder="再次确认" class="input" />
<img :src="pwdType === 1 ? '/static/my/hideEye.png' : '/static/my/openEye.png'"
@click="changeEye(2)" />
</view>
</view>
<text class="tips">密码最少8位数</text>
</view>
<view class="bottom">
<button class="change-btn">确认</button>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
const pwdType = ref('password')
const pwdType2 = ref('password')
const changeEye = (type) => {
if (type === 1) {
pwdType.value = pwdType.value === 'password' ? 'text' : 'password'
} else {
pwdType2.value = pwdType2.value === 'password' ? 'text' : 'password'
}
}
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
console.log('看看高度', iSMT.value)
})
</script>
<style>
.title {
height: 8.5vh;
background-color: white;
}
.label {
height: 8.5vh;
font-size: 40rpx;
font-weight: bold;
display: flex;
align-items: center;
padding: 0 60rpx;
}
.top {
height: auto;
background-color: white;
display: flex;
flex-direction: column;
align-items: center;
}
.top-list {
width: 630rpx;
height: 7vh;
margin: 0rpx 40rpx;
display: flex;
align-items: center;
border-bottom: 1rpx solid #eee;
}
.left {
flex: 1;
display: flex;
align-items: center;
}
.input {
flex: 1;
height: 70rpx;
font-size: 29rpx;
margin-left: 20rpx;
}
.bottom {
height: 22vh;
background-color: white;
display: flex;
align-items: center;
justify-content: center;
}
.change-btn {
height: 85rpx;
width: 610rpx;
padding: 0 20rpx;
background-color: black;
color: white;
border-radius: 40rpx;
display: flex;
align-items: center;
justify-content: center;
}
.img {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
}
.tips {
font-size: 24rpx;
color: #999;
margin-top: 20rpx;
margin-left: 60rpx;
align-self: flex-start;
/* 这是左对齐 */
}
</style>

171
pages/setting/password.vue

@ -0,0 +1,171 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view class="tab">
<view class="tab-item" :class="{active: activeTab === 'email'}" @click="activeTab = 'email'">邮箱</view>
<view class="tab-item" :class="{active: activeTab === 'phone'}" @click="activeTab = 'phone'">手机号</view>
</view>
<view class="switch-tab">
<view class="input-list" v-if="activeTab === 'email'">
<image src="/static/my/changeEmail.png" mode="aspectFit"></image>
<input type="text" placeholder="请输入邮箱" class="input" />
<button class="code-btn" :class="{disabled: gettingCode}" @click="getCode" :disabled="gettingCode">
{{ gettingCode ? `重新发送 ${time}s` : '获取验证码' }}
</button>
</view>
<view class="input-list" v-else>
<image src="/static/my/changeBindPhone.png" mode="aspectFit"></image>
<input type="number" placeholder="请输入手机号" class="input" />
<button class="code-btn" :class="{disabled: gettingCode}" @click="getCode" :disabled="gettingCode">
{{ gettingCode ? `重新发送 ${time}s` : '获取验证码' }}
</button>
</view>
<view class="input-list">
<image src="/static/my/verification.png" mode="aspectFit"></image>
<input type="text" placeholder="请输入验证码" class="input" />
</view>
</view>
<view class="btn-area">
<button class="next-btn" @click="goToPwdNext">下一步</button>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
const activeTab = ref('email')
const gettingCode = ref(false)
const time = ref(60)
const getCode = () => {
if (gettingCode.value) return
gettingCode.value = true
time.value = 60
const timer = setInterval(() => {
time.value--
if (time.value <= 0) {
clearInterval(timer)
gettingCode.value = false
time.value = 60
}
}, 1000)
}
const goToPwdNext = () =>{
uni.navigateTo({
url:'../setting/nextPwd'
})
}
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
})
</script>
<style>
.tab {
display: flex;
height: 8vh;
background-color: #fff;
border-bottom: 1rpx solid #eee;
}
.tab-item {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
font-size: 32rpx;
position: relative;
}
.tab-item.active {
color: #000;
font-weight: bold;
}
.tab-item.active::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 40rpx;
height: 6rpx;
background-color: #000;/* ????? */
}
.switch-tab {
background-color: #fff;
padding: 0 60rpx;
}
.input-list {
display: flex;
align-items: center;
justify-content: center;
height: 7vh;
border-bottom: 1rpx solid #eee;
}
.input-list image {
width: 40rpx;
height: 40rpx;
margin-right: 20rpx;
}
.input {
flex: 1;
height: 14vh;
font-size: 28rpx;
}
.code-btn {
width: 200rpx;
height: 60rpx;
font-size: 24rpx;
border-radius: 10rpx;
background-color: #eee;
color: #666;
display: flex;
align-items: center;
justify-content: center;
}
.code-btn.disabled {
background-color: #ccc;
color: #999;
}
.btn-area{
height:8vh;
background-color: white;
padding-top: 120rpx;
}
.next-btn {
width: 610rpx;
height: 85rpx;
background-color: #000;
color: #fff;
font-size: 30rpx;
border-radius: 40rpx;
display: flex;
align-items: center;
justify-content: center;
}
</style>

143
pages/setting/phone.vue

@ -0,0 +1,143 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view style="height:1.5vh;" />
<view class="top">
<view class="top-list">
<view class="left">
<img src="/static/my/bindedPhone.png" />
<text class="label">已绑手机号{{ phone }}</text>
</view>
</view>
<view class="top-list">
<view class="left">
<img src="/static/my/changeBindPhone.png" />
<text class="label">+86</text>
<input type="number" placeholder="请输入您的换绑手机号" class="input" />
</view>
<view class="right">
<button class="verification" :class="{ 'disabled': gettingCode }" @click="getVerification"
:disabled="gettingCode">
{{ gettingCode ? `重新发送 ${time}s` : '获取验证码' }}
</button>
</view>
</view>
<view class="top-list">
<view class="left">
<img src="/static/my/verification.png" />
<input type="text" placeholder="请输入验证码" class="input" />
</view>
</view>
</view>
<view class="bottom">
<button class="change-btn">换绑</button>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
const phone = ref('15105421566')
const gettingCode = ref(false)
const time = ref(60)
const getVerification = () => {
if (gettingCode.value) return
gettingCode.value = true
time.value = 60
const timer = setInterval(() => {
time.value--
if (time.value <= 0) {
clearInterval(timer)
gettingCode.value = false
}
}, 1000)
}
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
console.log('看看高度', iSMT.value)
})
</script>
<style>
.top {
height: auto;
background-color: white;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.top-list {
width: 630rpx;
height: 7vh;
margin: 0rpx 40rpx;
display: flex;
align-items: center;
border-bottom: 1rpx solid #eee;
}
.left {
flex: 1;
display: flex;
align-items: center;
}
.label {
font-size: 28rpx;
margin-left: 10rpx;
}
.right {
display: flex;
align-items: center;
justify-content: center;
}
.input {
flex: 1;
height: 70rpx;
font-size: 29rpx;
margin-left: 20rpx;
}
.verification {
font-size: 24rpx;
border-radius: 10rpx;
background-color: rgb(230, 230, 230);
}
.bottom {
height: 22vh;
background-color: white;
display: flex;
align-items: center;
justify-content: center;
}
.change-btn {
height: 85rpx;
width: 610rpx;
padding:0 20rpx;
background-color: black;
color: white;
border-radius: 40rpx;
display: flex;
align-items: center;
justify-content: center;
}
</style>

108
pages/setting/push.vue

@ -0,0 +1,108 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view class="top">
<view class="top-list">
<text style="width:180rpx;">公共消息</text>
<text class="public">重大咨询财经要闻等系统提醒</text>
<switch class="arrow switch-btn" />
</view>
<view class="top-list">
<text>字体大小</text>
<switch class="arrow switch-btn" />
</view>
</view>
<view class="bottom">
<view class="bottom-list">
<text>盯盘预警</text>
<uni-icons type="arrowright" size="16" class="arrow" />
</view>
<view class="bottom-list">
<text>订阅服务</text>
<text class="cache">45.5M</text>
<uni-icons type="arrowright" size="16" class="arrow" />
</view>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
console.log('看看高度', iSMT.value)
})
</script>
<style>
.top {
margin-top: 1.5vh;
height: 14vh;
background-color: white;
}
.top-list {
width: 630rpx;
height: 7vh;
display: flex;
align-items: center;
justify-content: center;
margin: 0 40rpx;
padding: 0 10rpx;
border-bottom: 1rpx solid #eee;
}
.top-list:last-child {
border-bottom: none;
}
.switch-btn {
width: 100rpx;
transform: scale(0.6);
transform-origin: center right;
}
.public {
width: 450rpx;
margin-left: auto;
font-size: 10px;
color: rgb(203, 203, 203);
}
.arrow {
margin-left: auto;
}
.bottom {
height: 13.5vh;
background-color: white;
margin-top: 1vh;
}
.bottom-list {
width: 630rpx;
height: 7vh;
display: flex;
align-items: center;
margin: 0 40rpx;
padding: 0 10rpx;
border-bottom: 1rpx solid #eee;
}
.cache {
margin-left: 55%;
font-size: 14px;
color: rgb(203, 203, 203);
}
.bottom-list:last-child {
border-bottom: none;
}
</style>

87
pages/setting/server.vue

@ -0,0 +1,87 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view class="top">
<view class="top-list">
<text>自动选择</text>
<radio value="0" class="radio-btn" activeBackgroundColor="red"
:checked="selectedIndex === 0" @click="selectFont(0)" />
</view>
<view class="top-list">
<text>新加坡服务器</text>
<radio value="1" class="radio-btn" activeBackgroundColor="red"
:checked="selectedIndex === 1" @click="selectFont(1)" />
</view>
<view class="top-list">
<text>香港服务器</text>
<radio value="2" class="radio-btn" activeBackgroundColor="red"
:checked="selectedIndex === 2" @click="selectFont(2)" />
</view>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
const selectedIndex = ref(0)
const selectFont = (index) => {
selectedIndex.value = index
console.log('看看选中状态',selectedIndex.value)
}
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
console.log('看看高度', iSMT.value)
})
</script>
<style>
.top {
margin-top: 1.5vh;
height: 21vh;
background-color: white;
}
.top-list {
width: 630rpx;
height: 7vh;
display: flex;
align-items: center;
justify-content: center;
margin: 0 40rpx;
padding: 0 10rpx;
border-bottom: 1rpx solid #eee;
}
.top-list:last-child {
border-bottom: none;
}
.switch-btn {
width: 100rpx;
transform: scale(0.6);
transform-origin: center right;
}
.public {
width: 450rpx;
margin-left: auto;
font-size: 10px;
color: rgb(203, 203, 203);
}
.arrow {
margin-left: auto;
}
.radio-btn {
margin-left: auto;
transform: scale(0.6);
}
</style>

111
pages/setting/share.vue

@ -0,0 +1,111 @@
<template>
<view class="all">
<img class="img-share" src="/static/my/shareBackground.png" />
<img class="img-greenBack" src="/static/my/greenBackground.png" />
<img class="img-QRcode" src="/static/my/QRcode.png" />
<img class="img-award" src="/static/my/award.png" />
<img class="img-myFriends" src="/static/my/myFriends.png" />
<img class="img-friends" src="/static/my/shareFriends.png" />
<text class="jwcode">{{ jwcode }}</text>
<button class="invite">立即邀请</button>
</view>
</template>
<script setup>
import {
ref
} from 'vue'
const jwcode = ref('90047681')
</script>
<style>
.all {
position: relative;
width: 750rpx;
height: auto;
}
.img-share {
width: 750rpx;
height: 2118rpx;
position: absolute;
top: 0;
left: 0;
z-index: 1;
}
.img-QRcode{
width:320rpx;
height:320rpx;
position:absolute;
top:26vh;
left:215rpx;
z-index: 3;
}
.img-greenBack {
width: 670rpx;
height: 1740rpx;
position: absolute;
top: 16vh;
/* 为什么要用这个替代 margin-top */
left: 40rpx;
/* 还有 padding-left */
z-index: 2;
}
.img-friends {
width: 602rpx;
height: 840rpx;
position: absolute;
top: 68vh;
left: 74rpx;
z-index: 3;
}
.img-award {
width: 300rpx;
height: 120rpx;
position: absolute;
top: 61vh;
left: 75rpx;
z-index: 3;
}
.img-myFriends {
width: 300rpx;
height: 88rpx;
position: absolute;
top: 61vh;
right: 75rpx;
z-index: 3;
}
.jwcode {
width: 320rpx;
height: 38rpx;
display: flex;
justify-content: center;
align-items: center;
position: absolute;
top: 19vh;
left: 212rpx;
z-index: 999;
}
.invite {
width: 320rpx;
height: 80rpx;
border-radius: 40rpx;
background-color: black;
color:white;
display: flex;
justify-content: center;
align-items: center;
position: absolute;
top: 50.7vh;
left: 212rpx;
z-index: 999;
}
</style>

64
pages/setting/theme.vue

@ -0,0 +1,64 @@
<template>
<view class="main">
<view :style="{height:iSMT+'px'}"></view>
<view class="theme">
<view class="left">
<image class="img-theme" src="/static/my/whiteTheme.png" mode="widthFix" />
<radio value="0" class="radio-btn" activeBackgroundColor="red" :checked="selectedIndex === 0"
@click="selectFont(0)" />
</view>
<view class="left">
<image class="img-theme" src="/static/my/blackTheme.png" mode="widthFix" />
<radio value="1" class="radio-btn" activeBackgroundColor="red" :checked="selectedIndex === 1"
@click="selectFont(1)" />
</view>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
const iSMT = ref(0)
const selectedIndex = ref(0)
const selectFont = (index) => {
selectedIndex.value = index
console.log('看看选中状态', selectedIndex.value)
}
onMounted(() => {
//
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
console.log('看看高度', iSMT.value)
})
</script>
<style>
.theme {
margin-top: 1.5vh;
height: 34vh;
background-color: white;
display: flex;
justify-content: space-around;
}
.img-theme {
width: 316rpx;
height: 362rpx;
}
.left {
width: 350rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.radio-btn {
margin-top: 36rpx;
transform: scale(0.8);
}
</style>

BIN
static/my/BlackTheme.png

After

Width: 158  |  Height: 181  |  Size: 3.4 KiB

BIN
static/my/QRcode.png

After

Width: 160  |  Height: 160  |  Size: 17 KiB

BIN
static/my/about.png

After

Width: 21  |  Height: 19  |  Size: 636 B

BIN
static/my/aboutDC.png

After

Width: 167  |  Height: 155  |  Size: 8.7 KiB

BIN
static/my/award.png

After

Width: 150  |  Height: 60  |  Size: 2.8 KiB

BIN
static/my/bindedEmail.png

After

Width: 20  |  Height: 20  |  Size: 380 B

BIN
static/my/bindedPhone.png

After

Width: 20  |  Height: 20  |  Size: 337 B

BIN
static/my/changeBindPhone.png

After

Width: 20  |  Height: 20  |  Size: 351 B

BIN
static/my/changeEmail.png

After

Width: 20  |  Height: 20  |  Size: 413 B

BIN
static/my/common.png

After

Width: 31  |  Height: 23  |  Size: 237 B

BIN
static/my/connection.png

After

Width: 20  |  Height: 20  |  Size: 748 B

BIN
static/my/editName.png

After

Width: 15  |  Height: 15  |  Size: 424 B

BIN
static/my/greenBackground.png

After

Width: 335  |  Height: 870  |  Size: 11 KiB

BIN
static/my/greenRise.png

After

Width: 26  |  Height: 25  |  Size: 993 B

BIN
static/my/hideEye.png

After

Width: 20  |  Height: 9  |  Size: 429 B

BIN
static/my/invite.png

After

Width: 375  |  Height: 1059  |  Size: 454 KiB

BIN
static/my/menu.png

After

Width: 14  |  Height: 14  |  Size: 228 B

BIN
static/my/myFriends.png

After

Width: 150  |  Height: 44  |  Size: 2.1 KiB

BIN
static/my/openEye.png

After

Width: 20  |  Height: 12  |  Size: 660 B

BIN
static/my/opinion.png

After

Width: 21  |  Height: 20  |  Size: 551 B

BIN
static/my/outline.png

After

Width: 31  |  Height: 25  |  Size: 1.3 KiB

BIN
static/my/polylines.png

After

Width: 31  |  Height: 23  |  Size: 1.3 KiB

BIN
static/my/redRise.png

After

Width: 26  |  Height: 25  |  Size: 966 B

BIN
static/my/security.png

After

Width: 23  |  Height: 23  |  Size: 669 B

BIN
static/my/setting.png

After

Width: 28  |  Height: 28  |  Size: 1.4 KiB

BIN
static/my/share.png

After

Width: 360  |  Height: 80  |  Size: 28 KiB

BIN
static/my/shareBackground.png

After

Width: 375  |  Height: 1059  |  Size: 456 KiB

BIN
static/my/shareFriends.png

After

Width: 301  |  Height: 397  |  Size: 50 KiB

BIN
static/my/unlock.png

After

Width: 20  |  Height: 20  |  Size: 488 B

BIN
static/my/update.png

After

Width: 21  |  Height: 17  |  Size: 488 B

BIN
static/my/verification.png

After

Width: 20  |  Height: 20  |  Size: 526 B

BIN
static/my/whiteTheme.png

After

Width: 158  |  Height: 181  |  Size: 3.4 KiB

BIN
static/my/签到.png

After

Width: 22  |  Height: 22  |  Size: 614 B

BIN
static/my/行情设置.png

After

Width: 33  |  Height: 33  |  Size: 687 B

BIN
static/my/设置.png

After

Width: 27  |  Height: 27  |  Size: 1.2 KiB

BIN
static/my/铃铛2.png

After

Width: 13  |  Height: 16  |  Size: 358 B

Loading…
Cancel
Save