19
App.vue
@@ -7,13 +7,18 @@
|
||||
<style lang="scss">
|
||||
:root {
|
||||
/* 主色 */
|
||||
--primary: #0A84FF;
|
||||
--primary-light: #5AC8FA;
|
||||
--primary-dark: #0066CC;
|
||||
--primary: #55ab5c;
|
||||
--primary-light: #8bc98f;
|
||||
--primary-dark: #3f8f47;
|
||||
--up-primary: #55ab5c;
|
||||
--up-primary-light: #eaf6ec;
|
||||
--up-primary-dark: #3f8f47;
|
||||
|
||||
/* 辅助色 */
|
||||
--success: #30D158;
|
||||
--success-light: rgba(48, 209, 88, 0.12);
|
||||
--success: #55ab5c;
|
||||
--success-light: rgba(85, 171, 92, 0.12);
|
||||
--up-success: #55ab5c;
|
||||
--up-success-light: #eaf6ec;
|
||||
--warning: #FF9F0A;
|
||||
--warning-light: rgba(255, 159, 10, 0.12);
|
||||
--danger: #FF453A;
|
||||
@@ -235,7 +240,7 @@
|
||||
}
|
||||
|
||||
&.tag-primary {
|
||||
background: rgba(10, 132, 255, 0.12);
|
||||
background: rgba(85, 171, 92, 0.12);
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
@@ -289,7 +294,7 @@
|
||||
}
|
||||
|
||||
&.btn-success {
|
||||
background: var(--success);
|
||||
background: var(--primary);
|
||||
color: var(--text-inverse);
|
||||
}
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
|
||||
.service-btn {
|
||||
padding: 16rpx 32rpx;
|
||||
background: linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%);
|
||||
background: #55ab5c;
|
||||
color: #fff;
|
||||
font-size: 26rpx;
|
||||
font-weight: 600;
|
||||
|
||||
@@ -1,11 +1,5 @@
|
||||
<template>
|
||||
<view class="card function-card">
|
||||
<view class="card-header">
|
||||
<view class="title">功能菜单</view>
|
||||
<!-- <view class="header-actions">
|
||||
<button class="btn-apple btn-primary" @tap="$emit('sync')">运营数据同步</button>
|
||||
</view> -->
|
||||
</view>
|
||||
<view class="function-grid">
|
||||
<view class="function-item interactive card-interactive" @tap="$emit('enter', 'authentication')"
|
||||
role="button" tabindex="0">
|
||||
@@ -176,8 +170,8 @@
|
||||
|
||||
.function-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 16rpx;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
gap: 12rpx;
|
||||
width: 100%;
|
||||
|
||||
.function-item {
|
||||
@@ -185,11 +179,11 @@
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 20rpx;
|
||||
padding: 16rpx 8rpx;
|
||||
|
||||
.function-icon {
|
||||
width: 120rpx;
|
||||
height: 120rpx;
|
||||
width: 104rpx;
|
||||
height: 104rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
@@ -217,11 +211,11 @@
|
||||
}
|
||||
|
||||
.function-name {
|
||||
font-size: 28rpx;
|
||||
font-size: 24rpx;
|
||||
font-weight: 500;
|
||||
color: var(--text-primary);
|
||||
text-align: center;
|
||||
margin-top: 15rpx;
|
||||
margin-top: 12rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -378,7 +378,7 @@
|
||||
|
||||
.package-summary {
|
||||
padding: 40rpx 30rpx 30rpx;
|
||||
background: linear-gradient(135deg, rgba(0, 122, 255, 0.05) 0%, rgba(0, 122, 255, 0.02) 100%);
|
||||
background: linear-gradient(135deg, rgba(85, 171, 92, 0.05) 0%, rgba(85, 171, 92, 0.02) 100%);
|
||||
border-bottom: 1rpx solid var(--border-light);
|
||||
text-align: center;
|
||||
}
|
||||
@@ -414,7 +414,7 @@
|
||||
|
||||
&.active {
|
||||
border-color: var(--primary);
|
||||
background: rgba(0, 122, 255, 0.05);
|
||||
background: rgba(85, 171, 92, 0.05);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
<view class="card-header flex-row-sb">
|
||||
<view class="title">WiFi配置</view>
|
||||
<view class="btn-group">
|
||||
<button class="btn-apple btn-primary btn-mini" @tap="$emit('modify')">修改</button>
|
||||
<button class="btn-apple btn-primary btn-mini" @tap="copyConfig">复制配置</button>
|
||||
<button class="btn-apple btn-primary btn-mini" @tap="$emit('modify')">修改配置</button>
|
||||
</view>
|
||||
</view>
|
||||
<view class="wifi-info flex-col-g16 mt-30">
|
||||
@@ -12,25 +13,27 @@
|
||||
<view class="caption">网络名称</view>
|
||||
<view class="subtitle">{{ deviceInfo.ssidName }}</view>
|
||||
</view>
|
||||
<button class="btn-apple btn-primary btn-mini" @tap="$emit('copy', deviceInfo.ssidName)">复制</button>
|
||||
</view>
|
||||
<view class="wifi-item flex-row-sb">
|
||||
<view class="wifi-details flex-col-g8">
|
||||
<view class="caption">连接密码</view>
|
||||
<view class="subtitle">{{ deviceInfo.ssidPwd }}</view>
|
||||
</view>
|
||||
<button class="btn-apple btn-primary btn-mini" @tap="$emit('copy', deviceInfo.ssidPwd)">复制</button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
defineProps({
|
||||
const props = defineProps({
|
||||
deviceInfo: { type: Object, default: () => ({}) }
|
||||
});
|
||||
|
||||
defineEmits(['modify', 'copy']);
|
||||
const emit = defineEmits(['modify', 'copy-config']);
|
||||
|
||||
const copyConfig = () => {
|
||||
emit('copy-config', `网络名称: ${props.deviceInfo.ssidName || ''} 连接密码: ${props.deviceInfo.ssidPwd || ''}`);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
min-height: 100vh;
|
||||
box-sizing: border-box;
|
||||
padding: 28rpx 24rpx 48rpx;
|
||||
background: linear-gradient(180deg, #eaf4ff 0%, var(--bg-secondary) 42%);
|
||||
background: linear-gradient(180deg, #eaf6ec 0%, var(--bg-secondary) 42%);
|
||||
}
|
||||
|
||||
.pay-content {
|
||||
@@ -108,8 +108,8 @@
|
||||
background: var(--bg-primary);
|
||||
border-radius: 28rpx;
|
||||
padding: 32rpx;
|
||||
box-shadow: 0 16rpx 40rpx rgba(10, 132, 255, 0.08);
|
||||
border: 1rpx solid rgba(10, 132, 255, 0.08);
|
||||
box-shadow: 0 16rpx 40rpx rgba(85, 171, 92, 0.08);
|
||||
border: 1rpx solid rgba(85, 171, 92, 0.08);
|
||||
}
|
||||
|
||||
.qr-desc {
|
||||
@@ -144,7 +144,7 @@
|
||||
.browser-tip {
|
||||
padding: 22rpx 24rpx;
|
||||
border-radius: 18rpx;
|
||||
background: rgba(10, 132, 255, 0.08);
|
||||
background: rgba(85, 171, 92, 0.08);
|
||||
color: var(--primary);
|
||||
font-size: 28rpx;
|
||||
font-weight: 600;
|
||||
@@ -167,7 +167,7 @@
|
||||
padding: 28rpx;
|
||||
border-radius: 24rpx;
|
||||
background: #fff;
|
||||
border: 1rpx dashed rgba(10, 132, 255, 0.24);
|
||||
border: 1rpx dashed rgba(85, 171, 92, 0.24);
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@@ -15,15 +15,16 @@
|
||||
<!-- <WhitelistCard v-if="!userInfo.isDevice" :whitelistData="whitelistData" @refresh="refreshWhitelist"
|
||||
@add="showAddWhitelistDialog" @showSms="showSmsCodeDialog" /> -->
|
||||
|
||||
<WifiCard v-if="userInfo.isDevice" :deviceInfo="deviceInfo" @modify="modifyWifi" @copy="copy" />
|
||||
<WifiCard v-if="userInfo.isDevice" :deviceInfo="deviceInfo" @modify="modifyWifi"
|
||||
@copy-config="copyWifiConfig" />
|
||||
|
||||
<FunctionCard :realNameStatus="realNameStatus" :alreadyBindPhone="alreadyBindPhone"
|
||||
:isDevice="userInfo.isDevice" :walletBalance="deviceInfo.walletBalance" :unreadCount="notificationUnreadCount"
|
||||
@enter="enterDetail" @sync="onSync">
|
||||
<!-- 修改WIFI弹窗 -->
|
||||
<!-- 修改配置弹窗 -->
|
||||
<up-popup :show="showModifyWifi" mode="center" @close="showModifyWifi=false">
|
||||
<view class="wifi-popup">
|
||||
<view class="title mb-md">修改WIFI</view>
|
||||
<view class="title mb-md">修改配置</view>
|
||||
<view class="flex-col-g20">
|
||||
<view class="flex-col-g8">
|
||||
<label class="caption">名称:</label>
|
||||
@@ -509,16 +510,6 @@
|
||||
restartShow.value = false;
|
||||
};
|
||||
|
||||
const copy = (content) => {
|
||||
uni.setClipboardData({
|
||||
data: content,
|
||||
success: () => uni.showToast({
|
||||
title: '复制成功',
|
||||
icon: 'none'
|
||||
})
|
||||
});
|
||||
};
|
||||
|
||||
const YesRecover = async () => {
|
||||
try {
|
||||
await deviceApi.factoryReset(userStore.state.identifier);
|
||||
@@ -840,6 +831,13 @@
|
||||
}
|
||||
};
|
||||
|
||||
const copyWifiConfig = (content) => {
|
||||
uni.setClipboardData({
|
||||
data: content,
|
||||
success: () => uni.showToast({ title: '配置已复制', icon: 'none' })
|
||||
});
|
||||
};
|
||||
|
||||
const getNotificationPriority = (item) => {
|
||||
const severityRank = { info: 10, warning: 20, error: 30, critical: 40 };
|
||||
const remainingDays = Number(item?.days_until_expiry ?? item?.days_remaining ?? item?.remaining_days);
|
||||
|
||||
@@ -368,7 +368,7 @@
|
||||
.input-wrap.focus {
|
||||
background: var(--bg-primary);
|
||||
border-color: var(--primary);
|
||||
box-shadow: 0 0 0 4rpx rgba(10, 132, 255, 0.1);
|
||||
box-shadow: 0 0 0 4rpx rgba(85, 171, 92, 0.1);
|
||||
}
|
||||
|
||||
.input {
|
||||
@@ -419,7 +419,7 @@
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 4rpx 12rpx rgba(10, 132, 255, 0.2);
|
||||
box-shadow: 0 4rpx 12rpx rgba(85, 171, 92, 0.2);
|
||||
}
|
||||
|
||||
.btn-login.disabled {
|
||||
@@ -430,7 +430,7 @@
|
||||
|
||||
.btn-login:active:not(.disabled) {
|
||||
transform: translateY(2rpx);
|
||||
box-shadow: 0 2rpx 8rpx rgba(10, 132, 255, 0.2);
|
||||
box-shadow: 0 2rpx 8rpx rgba(85, 171, 92, 0.2);
|
||||
}
|
||||
|
||||
.btn-scan {
|
||||
@@ -451,7 +451,7 @@
|
||||
}
|
||||
|
||||
.btn-scan:active {
|
||||
background: rgba(10, 132, 255, 0.05);
|
||||
background: rgba(85, 171, 92, 0.05);
|
||||
}
|
||||
|
||||
.scan-icon {
|
||||
|
||||
@@ -1009,7 +1009,7 @@
|
||||
|
||||
&.active {
|
||||
border-color: var(--primary);
|
||||
background: rgba(0, 122, 255, 0.05);
|
||||
background: rgba(85, 171, 92, 0.05);
|
||||
|
||||
.amount-value {
|
||||
color: var(--primary);
|
||||
@@ -1054,7 +1054,7 @@
|
||||
|
||||
&.active {
|
||||
border-color: var(--primary);
|
||||
background: rgba(0, 122, 255, 0.05);
|
||||
background: rgba(85, 171, 92, 0.05);
|
||||
}
|
||||
|
||||
.method-left {
|
||||
|
||||
@@ -446,7 +446,7 @@
|
||||
|
||||
&.tag-success {
|
||||
background: #e6f7ff;
|
||||
color: #1890ff;
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
&.tag-secondary {
|
||||
|
||||
@@ -607,7 +607,7 @@
|
||||
.package-validity {
|
||||
padding: 8rpx 12rpx;
|
||||
border-radius: var(--radius-small);
|
||||
background: rgba(10, 132, 255, 0.1);
|
||||
background: rgba(85, 171, 92, 0.1);
|
||||
color: var(--primary-dark);
|
||||
font-size: 22rpx;
|
||||
font-weight: 600;
|
||||
@@ -622,8 +622,8 @@
|
||||
gap: 24rpx;
|
||||
padding: 24rpx;
|
||||
margin-bottom: 24rpx;
|
||||
background: linear-gradient(135deg, rgba(10, 132, 255, 0.08), rgba(10, 132, 255, 0.02));
|
||||
border: 1rpx solid rgba(10, 132, 255, 0.1);
|
||||
background: linear-gradient(135deg, rgba(85, 171, 92, 0.08), rgba(85, 171, 92, 0.02));
|
||||
border: 1rpx solid rgba(85, 171, 92, 0.1);
|
||||
border-radius: 18rpx;
|
||||
|
||||
.data-block {
|
||||
@@ -651,7 +651,7 @@
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding-left: 24rpx;
|
||||
border-left: 1rpx solid rgba(10, 132, 255, 0.18);
|
||||
border-left: 1rpx solid rgba(85, 171, 92, 0.18);
|
||||
color: var(--primary-dark);
|
||||
white-space: nowrap;
|
||||
|
||||
@@ -765,7 +765,7 @@
|
||||
min-width: 0;
|
||||
padding: 10rpx 16rpx;
|
||||
border-radius: 28rpx;
|
||||
background: rgba(10, 132, 255, 0.08);
|
||||
background: rgba(85, 171, 92, 0.08);
|
||||
color: var(--primary-dark);
|
||||
font-size: 24rpx;
|
||||
line-height: 1.2;
|
||||
@@ -858,7 +858,7 @@
|
||||
|
||||
.package-summary {
|
||||
padding: 40rpx 30rpx 30rpx;
|
||||
background: linear-gradient(135deg, rgba(0, 122, 255, 0.05) 0%, rgba(0, 122, 255, 0.02) 100%);
|
||||
background: linear-gradient(135deg, rgba(85, 171, 92, 0.05) 0%, rgba(85, 171, 92, 0.02) 100%);
|
||||
border-bottom: 1rpx solid var(--border-light);
|
||||
text-align: center;
|
||||
|
||||
@@ -884,7 +884,7 @@
|
||||
justify-content: center;
|
||||
gap: 24rpx;
|
||||
padding-top: 20rpx;
|
||||
border-top: 1rpx solid rgba(0, 122, 255, 0.1);
|
||||
border-top: 1rpx solid rgba(85, 171, 92, 0.1);
|
||||
|
||||
.detail-item {
|
||||
display: flex;
|
||||
@@ -932,7 +932,7 @@
|
||||
|
||||
&.active {
|
||||
border-color: var(--primary);
|
||||
background: rgba(0, 122, 255, 0.05);
|
||||
background: rgba(85, 171, 92, 0.05);
|
||||
}
|
||||
|
||||
.method-left {
|
||||
|
||||
BIN
static/shop.png
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 6.9 KiB |
BIN
static/中国广电.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
static/中国电信.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
static/中国移动.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
static/中国联通.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
static/卡槽1.png
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
static/卡槽2.png
Normal file
|
After Width: | Height: | Size: 1.8 MiB |
BIN
static/卡槽3.png
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
9
uni.scss
@@ -13,10 +13,15 @@
|
||||
*/
|
||||
|
||||
/* 颜色变量 */
|
||||
$u-primary: #55ab5c;
|
||||
$u-primary-light: #eaf6ec;
|
||||
$u-primary-dark: #3f8f47;
|
||||
$u-success: #55ab5c;
|
||||
$u-success-light: #eaf6ec;
|
||||
@import 'uview-plus/theme.scss';
|
||||
/* 行为相关颜色 */
|
||||
$uni-color-primary: #007aff;
|
||||
$uni-color-success: #4cd964;
|
||||
$uni-color-primary: #55ab5c;
|
||||
$uni-color-success: #55ab5c;
|
||||
$uni-color-warning: #f0ad4e;
|
||||
$uni-color-error: #dd524d;
|
||||
|
||||
|
||||