style(theme): 统一应用主题样式并更新组件样式变量

- 在多个页面组件中添加动态主题样式绑定
- 将硬编码的颜色值替换为CSS变量和主题配置
- 引入主题样式计算逻辑到各个页面
- 更新优惠券、地址、订单等页面的主题适配
- 替换线性渐变背景为动态主题颜色
- 移除uni_modules组件中的$set方法调用以优化性能
- 更新README中主题色管理状态为已完成
This commit is contained in:
pikachu1995@126.com
2026-10-09 16:02:11 +08:00
parent 74d186ff36
commit a32f6d2313
58 changed files with 519 additions and 301 deletions

View File

@@ -1,5 +1,5 @@
<template>
<view class="feedBack">
<view class="feedBack" :style="themeStyle">
<view class="feedBack-box">
<view class="box-title">猜你想问</view>
<view
@@ -54,11 +54,15 @@
</template>
<script setup lang="ts">
import { ref, reactive, getCurrentInstance } from 'vue'
import { ref, reactive, computed, getCurrentInstance } from 'vue'
import { feedBack as submitFeedBackApi } from '@/api/members.js'
import { handleUploadAfterRead } from '@/utils/uploadHelper.js'
import { useStore } from '@/store'
import { getThemeStyle } from '@/utils/theme'
const { proxy } = getCurrentInstance()!
const store = useStore()
const themeStyle = computed(() => getThemeStyle(store.state.theme))
const feedbackForm = reactive({
type: 'FUNCTION',

View File

@@ -1,5 +1,5 @@
<template>
<view class="person-msg">
<view :style="themeStyle" class="person-msg">
<view class="head" @click="changeFace">
<image :src="form.face || '/static/missing-face.png'" mode="aspectFill"></image>
<view>点击修改头像</view>
@@ -87,6 +87,7 @@ import { saveUserInfo } from '@/api/members.js'
import { upload } from '@/api/common.js'
import storage from '@/utils/storage.js'
import MCity from '@/components/m-city/m-city.vue'
import { getThemeStyle } from '@/utils/theme'
function parseBirthdayTimestamp(str?: string) {
if (!str) return Date.now()
@@ -103,6 +104,7 @@ function formatBirthday(timestamp: number) {
}
const store = useStore()
const themeStyle = computed(() => getThemeStyle(store.state.theme))
const lightColor = computed(() => store.getters.lightColor)
const userInfo = storage.getUserInfo() || {}

View File

@@ -1,5 +1,5 @@
<template>
<view class="box">
<view :style="themeStyle" class="box">
<view class="box-tips">
<h2 class="h2">绑定手机号码</h2>
<view class="verification"></view>
@@ -44,15 +44,17 @@
</template>
<script setup lang="ts">
import { ref, reactive, watch, getCurrentInstance } from 'vue'
import { ref, reactive, watch, getCurrentInstance, computed } from 'vue'
import { onLoad, onReady } from '@dcloudio/uni-app'
import { useStore } from '@/store'
import { sendMobile, bindMobile } from '@/api/login'
import { getUserInfo } from '@/api/members.js'
import storage from '@/utils/storage.js'
import MyVerification from '@/components/verification/verification.vue'
import { getThemeStyle } from '@/utils/theme'
const store = useStore()
const themeStyle = computed(() => getThemeStyle(store.state.theme))
const { proxy } = getCurrentInstance()!
const phoneVerified = ref(false)

View File

@@ -1,5 +1,5 @@
<template>
<view class="box">
<view :style="themeStyle" class="box">
<view class="box-tips">
<h2 class="h2">{{ verificationTitle.title }}</h2>
<view class="verification">{{ verificationTitle.desc }}</view>
@@ -30,9 +30,13 @@
</template>
<script setup lang="ts">
import { ref, reactive } from 'vue'
import { ref, reactive, computed } from 'vue'
import { modifyPass } from '@/api/login'
import { md5 } from '@/utils/md5.js'
import { useStore } from '@/store'
import { getThemeStyle } from '@/utils/theme'
const store = useStore()
const themeStyle = computed(() => getThemeStyle(store.state.theme))
const verificationTitle = {
title: '修改密码',

View File

@@ -1,5 +1,5 @@
<template>
<view class="box">
<view :style="themeStyle" class="box">
<view class="box-tips">
<h2 class="h2">{{ verificationTitle[phoneVerified ? 1 : 0].title }}</h2>
<view class="verification">{{ verificationTitle[step].desc }}</view>
@@ -55,15 +55,17 @@
</template>
<script setup lang="ts">
import { ref, reactive, watch, getCurrentInstance } from 'vue'
import { ref, reactive, watch, getCurrentInstance, computed } from 'vue'
import { onReady } from '@dcloudio/uni-app'
import { useStore } from '@/store'
import { isLogin } from '@/utils/filters.js'
import { sendMobile, resetByMobile, resetPassword } from '@/api/login'
import { md5 } from '@/utils/md5.js'
import MyVerification from '@/components/verification/verification.vue'
import MyVerification from '@/components/verification/verification.vue'
import { getThemeStyle } from '@/utils/theme'
const store = useStore()
const store = useStore()
const themeStyle = computed(() => getThemeStyle(store.state.theme))
const { proxy } = getCurrentInstance()!
const phoneVerified = ref(false)

View File

@@ -1,5 +1,5 @@
<template>
<view class="set-up">
<view :style="themeStyle" class="set-up">
<view class="person" @click="checkUserInfo()">
<u-image
width="140rpx"
@@ -39,10 +39,14 @@
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { ref, computed } from 'vue'
import { onShow } from '@dcloudio/uni-app'
import config from '@/config/config'
import { isLogin, tipsToLogin, quiteLoginOut, logoff } from '@/utils/filters.js'
import { isLogin, tipsToLogin, quiteLoginOut, logoff } from '@/utils/filters.js'
import { useStore } from '@/store'
import { getThemeStyle } from '@/utils/theme'
const store = useStore()
const themeStyle = computed(() => getThemeStyle(store.state.theme))
const userImage = config.defaultUserPhoto
const userInfo = ref<Record<string, any>>({})