diff --git a/.kiro/specs/flutter-to-uniapp-rewrite/.config.kiro b/.kiro/specs/flutter-to-uniapp-rewrite/.config.kiro
new file mode 100644
index 0000000..2254e2b
--- /dev/null
+++ b/.kiro/specs/flutter-to-uniapp-rewrite/.config.kiro
@@ -0,0 +1 @@
+{"specId": "8912b026-4bcf-48e3-ad23-2f417cfc5c2b", "workflowType": "requirements-first", "specType": "feature"}
\ No newline at end of file
diff --git a/.kiro/specs/flutter-to-uniapp-rewrite/design.md b/.kiro/specs/flutter-to-uniapp-rewrite/design.md
new file mode 100644
index 0000000..a41ea43
--- /dev/null
+++ b/.kiro/specs/flutter-to-uniapp-rewrite/design.md
@@ -0,0 +1,734 @@
+# 技术设计文档:绥时录 — Flutter 到 UniApp 重写
+
+## 概述
+
+本设计文档描述将"绥时录"ODF 端口管理系统从 Flutter 重写为 UniApp (Vue 3) 的技术方案。应用管理公司 → 地区 → 机房 → 机架(ODF) → 端口的层级数据,支持端口状态查看、备注编辑、搜索、历史故障记录等功能。
+
+UniApp 项目基于 Vue 3 Composition API,使用条件编译兼容多端(App、H5、小程序),目标目录为 `odf-uniapp/`。
+
+### 关键设计决策
+
+1. **Vue 3 Composition API**:manifest.json 已配置 `"vueVersion": "3"`,使用 `
+
+
diff --git a/odf-uniapp/components/add-note-dialog.vue b/odf-uniapp/components/add-note-dialog.vue
new file mode 100644
index 0000000..d09b3f7
--- /dev/null
+++ b/odf-uniapp/components/add-note-dialog.vue
@@ -0,0 +1,287 @@
+
+
+
+
+ 添加备注
+
+
+
+
+ 业务名称
+
+
+
+
+
+ 设备型号
+
+
+ {{ unitTypeLabel }}
+
+
+
+
+
+
+ 业务类型
+
+
+ {{ businessTypeLabel }}
+
+
+
+
+
+
+ 端口号
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+
+
+ 提交
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odf-uniapp/components/port-edit-dialog.vue b/odf-uniapp/components/port-edit-dialog.vue
new file mode 100644
index 0000000..4d38cd1
--- /dev/null
+++ b/odf-uniapp/components/port-edit-dialog.vue
@@ -0,0 +1,564 @@
+
+
+
+
+
+ loading...
+
+
+
+
+
+
+ 位置:{{ portData.frameName }}{{ portData.name }}
+
+
+ {{ portData.status === 1 ? '已连接' : '已断开' }}
+
+
+
+
+
+
+ 备注说明
+
+
+
+
+
+ 光衰信息
+
+
+
+
+
+ 历史障碍记录
+
+
+
+
+
+
+ {{ item.faultTime || '选择日期' }}
+
+
+
+
+
+ -
+
+
+
+
+
+ 添加新记录
+
+
+
+
+
+ 光缆段信息
+
+
+
+
+
+ 改变状态
+
+
+ 连接
+
+
+ 断开
+
+
+ 断开后只清空备注说明,其他内容不影响
+
+
+
+
+
+
+ 取消
+
+
+ 提交
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odf-uniapp/components/update-dialog.vue b/odf-uniapp/components/update-dialog.vue
new file mode 100644
index 0000000..6079f57
--- /dev/null
+++ b/odf-uniapp/components/update-dialog.vue
@@ -0,0 +1,82 @@
+
+
+
+
+ 有新版本请更新
+
+ 去更新
+
+
+
+
+
+
+
+
diff --git a/odf-uniapp/index.html b/odf-uniapp/index.html
new file mode 100644
index 0000000..b5d330d
--- /dev/null
+++ b/odf-uniapp/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odf-uniapp/main.js b/odf-uniapp/main.js
new file mode 100644
index 0000000..c1caf36
--- /dev/null
+++ b/odf-uniapp/main.js
@@ -0,0 +1,22 @@
+import App from './App'
+
+// #ifndef VUE3
+import Vue from 'vue'
+import './uni.promisify.adaptor'
+Vue.config.productionTip = false
+App.mpType = 'app'
+const app = new Vue({
+ ...App
+})
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from 'vue'
+export function createApp() {
+ const app = createSSRApp(App)
+ return {
+ app
+ }
+}
+// #endif
\ No newline at end of file
diff --git a/odf-uniapp/manifest.json b/odf-uniapp/manifest.json
new file mode 100644
index 0000000..4afd19a
--- /dev/null
+++ b/odf-uniapp/manifest.json
@@ -0,0 +1,72 @@
+{
+ "name" : "odf-uniapp",
+ "appid" : "__UNI__45FFD83",
+ "description" : "",
+ "versionName" : "1.0.0",
+ "versionCode" : "100",
+ "transformPx" : false,
+ /* 5+App特有相关 */
+ "app-plus" : {
+ "usingComponents" : true,
+ "nvueStyleCompiler" : "uni-app",
+ "compilerVersion" : 3,
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ /* 模块配置 */
+ "modules" : {},
+ /* 应用发布信息 */
+ "distribute" : {
+ /* android打包配置 */
+ "android" : {
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ /* ios打包配置 */
+ "ios" : {},
+ /* SDK配置 */
+ "sdkConfigs" : {}
+ }
+ },
+ /* 快应用特有相关 */
+ "quickapp" : {},
+ /* 小程序特有相关 */
+ "mp-weixin" : {
+ "appid" : "",
+ "setting" : {
+ "urlCheck" : false
+ },
+ "usingComponents" : true
+ },
+ "mp-alipay" : {
+ "usingComponents" : true
+ },
+ "mp-baidu" : {
+ "usingComponents" : true
+ },
+ "mp-toutiao" : {
+ "usingComponents" : true
+ },
+ "uniStatistics" : {
+ "enable" : false
+ },
+ "vueVersion" : "3"
+}
diff --git a/odf-uniapp/pages.json b/odf-uniapp/pages.json
new file mode 100644
index 0000000..477bff5
--- /dev/null
+++ b/odf-uniapp/pages.json
@@ -0,0 +1,50 @@
+{
+ "pages": [
+ {
+ "path": "pages/start/index",
+ "style": { "navigationStyle": "custom", "navigationBarTitleText": "" }
+ },
+ {
+ "path": "pages/login/index",
+ "style": { "navigationStyle": "custom", "navigationBarTitleText": "" }
+ },
+ {
+ "path": "pages/home/index",
+ "style": { "navigationStyle": "custom", "navigationBarTitleText": "", "enablePullDownRefresh": true }
+ },
+ {
+ "path": "pages/region/index",
+ "style": { "navigationStyle": "custom", "navigationBarTitleText": "" }
+ },
+ {
+ "path": "pages/room/index",
+ "style": { "navigationStyle": "custom", "navigationBarTitleText": "", "enablePullDownRefresh": true }
+ },
+ {
+ "path": "pages/rack/index",
+ "style": { "navigationStyle": "custom", "navigationBarTitleText": "", "enablePullDownRefresh": true }
+ },
+ {
+ "path": "pages/rack-detail/index",
+ "style": { "navigationStyle": "custom", "navigationBarTitleText": "" }
+ },
+ {
+ "path": "pages/search/index",
+ "style": { "navigationStyle": "custom", "navigationBarTitleText": "" }
+ },
+ {
+ "path": "pages/settings/index",
+ "style": { "navigationStyle": "custom", "navigationBarTitleText": "" }
+ },
+ {
+ "path": "pages/change-password/index",
+ "style": { "navigationStyle": "custom", "navigationBarTitleText": "" }
+ }
+ ],
+ "globalStyle": {
+ "navigationBarTextStyle": "white",
+ "navigationBarTitleText": "绥时录",
+ "navigationBarBackgroundColor": "#1A73EC",
+ "backgroundColor": "#F5F5F5"
+ }
+}
diff --git a/odf-uniapp/pages/change-password/index.vue b/odf-uniapp/pages/change-password/index.vue
new file mode 100644
index 0000000..99a635b
--- /dev/null
+++ b/odf-uniapp/pages/change-password/index.vue
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+ 修改密码
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确认修改
+
+
+
+
+
+
+
+
+
diff --git a/odf-uniapp/pages/home/index.vue b/odf-uniapp/pages/home/index.vue
new file mode 100644
index 0000000..f51c12d
--- /dev/null
+++ b/odf-uniapp/pages/home/index.vue
@@ -0,0 +1,203 @@
+
+
+
+
+
+
+
+
+
+ 公司列表
+
+
+
+
+
+
+
+ 请输入要搜索的备注内容
+
+
+
+
+
+ {{ item.deptName }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odf-uniapp/pages/login/index.vue b/odf-uniapp/pages/login/index.vue
new file mode 100644
index 0000000..cc002f1
--- /dev/null
+++ b/odf-uniapp/pages/login/index.vue
@@ -0,0 +1,109 @@
+
+
+ 绥时录
+
+
+
+
+
+
+
+
+
+
+ 登录
+
+
+
+
+
+
+
diff --git a/odf-uniapp/pages/rack-detail/index.vue b/odf-uniapp/pages/rack-detail/index.vue
new file mode 100644
index 0000000..da2e372
--- /dev/null
+++ b/odf-uniapp/pages/rack-detail/index.vue
@@ -0,0 +1,327 @@
+
+
+
+
+
+
+
+
+
+ {{ rackName }}详情
+
+
+
+
+
+
+ {{ roomName }}
+
+
+
+
+
+
+ 已连接
+
+
+
+ 已断开
+
+
+
+
+
+ loading...
+
+
+
+
+
+ {{ frame.name }}
+
+
+
+ {{ row.name }}
+
+
+
+
+ {{ port.tips }}
+
+ {{ port.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odf-uniapp/pages/rack/index.vue b/odf-uniapp/pages/rack/index.vue
new file mode 100644
index 0000000..dbcee94
--- /dev/null
+++ b/odf-uniapp/pages/rack/index.vue
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+ 机房详情
+
+
+
+
+
+
+
+ {{ item.rackName }}
+
+
+
+
+
+
+
+
+
diff --git a/odf-uniapp/pages/region/index.vue b/odf-uniapp/pages/region/index.vue
new file mode 100644
index 0000000..e422dde
--- /dev/null
+++ b/odf-uniapp/pages/region/index.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+ 地区列表
+
+
+
+
+
+
+
+ {{ item.deptName }}
+
+
+
+
+
+
+
+
+
diff --git a/odf-uniapp/pages/room/index.vue b/odf-uniapp/pages/room/index.vue
new file mode 100644
index 0000000..5efee3a
--- /dev/null
+++ b/odf-uniapp/pages/room/index.vue
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+ 机房列表
+
+
+
+
+
+
+
+ {{ item.roomName }}
+ {{ item.roomAddress }}
+ ODF: {{ item.racksCount }}台
+
+
+
+
+
+
+
+
+
diff --git a/odf-uniapp/pages/search/index.vue b/odf-uniapp/pages/search/index.vue
new file mode 100644
index 0000000..b05a5c1
--- /dev/null
+++ b/odf-uniapp/pages/search/index.vue
@@ -0,0 +1,360 @@
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+
+
+
+ 机房
+
+ {{ item.roomName }}
+
+
+
+
+
+ 备注信息
+
+
+ 机房:
+ {{ item.roomName }}
+
+
+ 地址:
+ {{ item.address }}
+
+
+ ODF名称:
+ {{ item.rackName }}
+
+
+ 点位置:
+ {{ item.frameName }}{{ item.name }}
+
+
+ 备注:
+ {{ item.remarks }}
+
+
+ 光衰信息:
+ {{ item.opticalAttenuation }}
+
+
+ 历史故障:
+ {{ item.historyRemarks }}
+
+
+ 光缆段信息:
+ {{ item.opticalCableOffRemarks }}
+
+
+ 状态:
+
+
+ {{ item.status === 1 ? '已连接' : '已断开' }}
+
+
+
+
+
+
+
+ 暂无搜索结果
+
+
+
+
+
+
+
+
+
diff --git a/odf-uniapp/pages/settings/index.vue b/odf-uniapp/pages/settings/index.vue
new file mode 100644
index 0000000..b64ab81
--- /dev/null
+++ b/odf-uniapp/pages/settings/index.vue
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
+ 设置
+
+
+
+
+
+
+
+ 修改密码
+
+
+
+ 退出登录
+
+
+
+
+
+
+
+
+
diff --git a/odf-uniapp/pages/start/index.vue b/odf-uniapp/pages/start/index.vue
new file mode 100644
index 0000000..30874e9
--- /dev/null
+++ b/odf-uniapp/pages/start/index.vue
@@ -0,0 +1,47 @@
+
+
+ 绥时录
+
+
+
+
+
+
diff --git a/odf-uniapp/services/api.js b/odf-uniapp/services/api.js
new file mode 100644
index 0000000..09d398a
--- /dev/null
+++ b/odf-uniapp/services/api.js
@@ -0,0 +1,42 @@
+// services/api.js
+import store from '@/store'
+
+const BASE_URL = 'http://49.233.115.141:11082'
+const TIMEOUT = 20000
+
+/**
+ * 统一请求封装
+ * @param {string} method - GET | POST
+ * @param {string} url - 接口路径
+ * @param {object} data - 请求参数
+ * @returns {Promise<{code, msg, data}>}
+ */
+export function request(method, url, data = {}) {
+ return new Promise((resolve, reject) => {
+ const header = {
+ 'Content-Type': 'application/json',
+ 'Authorization': `Bearer ${store.token}`,
+ 'Userid': store.userId,
+ 'Username': store.userName
+ }
+ uni.request({
+ url: BASE_URL + url,
+ method,
+ data: method === 'GET' ? undefined : data,
+ // GET 参数通过 data 字段传递,UniApp 会自动拼接为 queryString
+ ...(method === 'GET' ? { data } : {}),
+ header,
+ timeout: TIMEOUT,
+ success(res) {
+ const { code, msg, data: resData } = res.data
+ resolve({ code, msg, data: resData })
+ },
+ fail(err) {
+ reject({ code: -1, msg: err.errMsg || '网络异常' })
+ }
+ })
+ })
+}
+
+export const get = (url, params) => request('GET', url, params)
+export const post = (url, data) => request('POST', url, data)
diff --git a/odf-uniapp/services/auth.js b/odf-uniapp/services/auth.js
new file mode 100644
index 0000000..43f9cc8
--- /dev/null
+++ b/odf-uniapp/services/auth.js
@@ -0,0 +1,6 @@
+import { get, post } from './api'
+
+export const appLogin = (username, password) => post('/appLogin', { username, password })
+export const checkPermission = () => get('/business/OdfPorts/odf')
+export const updatePassword = (oldPassword, newPassword) =>
+ post('/system/user/profile/updateUserPwd', { oldPassword, newPassword })
diff --git a/odf-uniapp/services/home.js b/odf-uniapp/services/home.js
new file mode 100644
index 0000000..b5b826d
--- /dev/null
+++ b/odf-uniapp/services/home.js
@@ -0,0 +1,6 @@
+import { get } from './api'
+
+export const getCompanyList = () => get('/business/OdfRooms/getcompany')
+export const getDictUnitType = () => get('/system/dict/data/type/odf_ports_unit_type')
+export const getDictBusinessType = () => get('/system/dict/data/type/odf_ports_business_type')
+export const checkAppVersion = (version) => get('/webapi/CheckAppVersion', { version })
diff --git a/odf-uniapp/services/machine.js b/odf-uniapp/services/machine.js
new file mode 100644
index 0000000..488d377
--- /dev/null
+++ b/odf-uniapp/services/machine.js
@@ -0,0 +1,10 @@
+import { get, post } from './api'
+
+export const getRegionList = (deptId) => get('/business/OdfRooms/getregion', { deptId })
+export const getRoomList = (pageNum, pageSize, deptId) =>
+ get('/business/OdfRooms/list', { pageNum, pageSize, deptId })
+export const getRackList = (pageNum, pageSize, roomId) =>
+ get('/business/OdfRacks/list', { pageNum, pageSize, roomId })
+export const getRackDetail = (RackId) => get('/business/OdfPorts/mlist', { RackId })
+export const getPortDetail = (id) => get(`/business/OdfPorts/${id}`)
+export const savePort = (data) => post('/business/OdfPorts/save', data)
diff --git a/odf-uniapp/services/search.js b/odf-uniapp/services/search.js
new file mode 100644
index 0000000..7cdc2ae
--- /dev/null
+++ b/odf-uniapp/services/search.js
@@ -0,0 +1,4 @@
+import { get } from './api'
+
+export const searchPorts = (key, pageNum, pageSize) =>
+ get('/business/OdfPorts/search2', { key, pageNum, pageSize })
diff --git a/odf-uniapp/static/images/home_bg.png b/odf-uniapp/static/images/home_bg.png
new file mode 100644
index 0000000..7248cf4
Binary files /dev/null and b/odf-uniapp/static/images/home_bg.png differ
diff --git a/odf-uniapp/static/images/ic_back.png b/odf-uniapp/static/images/ic_back.png
new file mode 100644
index 0000000..3215539
Binary files /dev/null and b/odf-uniapp/static/images/ic_back.png differ
diff --git a/odf-uniapp/static/images/ic_exit.png b/odf-uniapp/static/images/ic_exit.png
new file mode 100644
index 0000000..8150e31
Binary files /dev/null and b/odf-uniapp/static/images/ic_exit.png differ
diff --git a/odf-uniapp/static/images/ic_refresh.png b/odf-uniapp/static/images/ic_refresh.png
new file mode 100644
index 0000000..f90c82d
Binary files /dev/null and b/odf-uniapp/static/images/ic_refresh.png differ
diff --git a/odf-uniapp/static/images/ic_search.png b/odf-uniapp/static/images/ic_search.png
new file mode 100644
index 0000000..bed66b3
Binary files /dev/null and b/odf-uniapp/static/images/ic_search.png differ
diff --git a/odf-uniapp/static/images/ic_set.png b/odf-uniapp/static/images/ic_set.png
new file mode 100644
index 0000000..02ff9ee
Binary files /dev/null and b/odf-uniapp/static/images/ic_set.png differ
diff --git a/odf-uniapp/static/images/ic_update.png b/odf-uniapp/static/images/ic_update.png
new file mode 100644
index 0000000..f6479fc
Binary files /dev/null and b/odf-uniapp/static/images/ic_update.png differ
diff --git a/odf-uniapp/static/images/login_bg.png b/odf-uniapp/static/images/login_bg.png
new file mode 100644
index 0000000..1941fcd
Binary files /dev/null and b/odf-uniapp/static/images/login_bg.png differ
diff --git a/odf-uniapp/static/logo.png b/odf-uniapp/static/logo.png
new file mode 100644
index 0000000..b5771e2
Binary files /dev/null and b/odf-uniapp/static/logo.png differ
diff --git a/odf-uniapp/store/index.js b/odf-uniapp/store/index.js
new file mode 100644
index 0000000..9917879
--- /dev/null
+++ b/odf-uniapp/store/index.js
@@ -0,0 +1,37 @@
+// store/index.js
+import { reactive } from 'vue'
+
+const store = reactive({
+ // 认证信息
+ token: uni.getStorageSync('token') || '',
+ userId: uni.getStorageSync('userId') || '',
+ userName: uni.getStorageSync('userName') || '',
+ isPermission: false,
+
+ // 字典数据
+ dictUnitTypes: [], // 设备型号列表
+ dictBusinessTypes: [], // 业务类型列表
+
+ // 设置认证信息
+ setAuth(token, userId, userName) {
+ this.token = token
+ this.userId = userId
+ this.userName = userName
+ uni.setStorageSync('token', token)
+ uni.setStorageSync('userId', userId)
+ uni.setStorageSync('userName', userName)
+ },
+
+ // 清除认证信息
+ clearAuth() {
+ this.token = ''
+ this.userId = ''
+ this.userName = ''
+ this.isPermission = false
+ uni.removeStorageSync('token')
+ uni.removeStorageSync('userId')
+ uni.removeStorageSync('userName')
+ }
+})
+
+export default store
diff --git a/odf-uniapp/uni.promisify.adaptor.js b/odf-uniapp/uni.promisify.adaptor.js
new file mode 100644
index 0000000..5fec4f3
--- /dev/null
+++ b/odf-uniapp/uni.promisify.adaptor.js
@@ -0,0 +1,13 @@
+uni.addInterceptor({
+ returnValue (res) {
+ if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) {
+ return res;
+ }
+ return new Promise((resolve, reject) => {
+ res.then((res) => {
+ if (!res) return resolve(res)
+ return res[0] ? reject(res[0]) : resolve(res[1])
+ });
+ });
+ },
+});
\ No newline at end of file
diff --git a/odf-uniapp/uni.scss b/odf-uniapp/uni.scss
new file mode 100644
index 0000000..a6e0673
--- /dev/null
+++ b/odf-uniapp/uni.scss
@@ -0,0 +1,88 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+
+/* ========== 绥时录自定义变量 ========== */
+$theme-color: #1A73EC;
+$bg-color-page: #F5F5F5;
+$bg-color-card: #FFFFFF;
+$text-color-primary: #333333;
+$text-color-secondary: #666666;
+$text-color-placeholder: #999999;
+$color-connected: #4CAF50;
+$color-disconnected: #F44336;
+$border-radius-card: 12rpx;
+$spacing-page: 24rpx;
+
+/* 颜色变量 */
+
+/* 行为相关颜色 */
+$uni-color-primary: #1A73EC;
+$uni-color-success: #4cd964;
+$uni-color-warning: #f0ad4e;
+$uni-color-error: #dd524d;
+
+/* 文字基本颜色 */
+$uni-text-color:#333;//基本色
+$uni-text-color-inverse:#fff;//反色
+$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
+$uni-text-color-placeholder: #808080;
+$uni-text-color-disable:#c0c0c0;
+
+/* 背景颜色 */
+$uni-bg-color:#ffffff;
+$uni-bg-color-grey:#f8f8f8;
+$uni-bg-color-hover:#f1f1f1;//点击状态颜色
+$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color:#c8c7cc;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm:12px;
+$uni-font-size-base:14px;
+$uni-font-size-lg:16px;
+
+/* 图片尺寸 */
+$uni-img-size-sm:20px;
+$uni-img-size-base:26px;
+$uni-img-size-lg:40px;
+
+/* Border Radius */
+$uni-border-radius-sm: 2px;
+$uni-border-radius-base: 3px;
+$uni-border-radius-lg: 6px;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 5px;
+$uni-spacing-row-base: 10px;
+$uni-spacing-row-lg: 15px;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 4px;
+$uni-spacing-col-base: 8px;
+$uni-spacing-col-lg: 12px;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2C405A; // 文章标题颜色
+$uni-font-size-title:20px;
+$uni-color-subtitle: #555555; // 二级标题颜色
+$uni-font-size-subtitle:26px;
+$uni-color-paragraph: #3F536E; // 文章段落颜色
+$uni-font-size-paragraph:15px;