Browse Source

增加首页

leaf 5 months ago
parent
commit
10aa91387a
33 changed files with 2040 additions and 71 deletions
  1. 4 2
      App.vue
  2. 53 0
      components/pub-list-scroll/pub-list-scroll.vue
  3. 76 0
      components/pub-loading-view/pub-loading-view.vue
  4. 158 0
      pages/index/CfStatus.vue
  5. 109 0
      pages/index/TopCard.vue
  6. 107 34
      pages/index/index.vue
  7. BIN
      static/image/head.png
  8. BIN
      static/image/no-data.png
  9. 150 0
      static/style/base.scss
  10. 102 35
      uni.scss
  11. 25 0
      uni_modules/uni-load-more/changelog.md
  12. 5 0
      uni_modules/uni-load-more/components/uni-load-more/i18n/en.json
  13. 8 0
      uni_modules/uni-load-more/components/uni-load-more/i18n/index.js
  14. 5 0
      uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json
  15. 5 0
      uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json
  16. 404 0
      uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue
  17. 84 0
      uni_modules/uni-load-more/package.json
  18. 14 0
      uni_modules/uni-load-more/readme.md
  19. 8 0
      uni_modules/uni-scss/changelog.md
  20. 1 0
      uni_modules/uni-scss/index.scss
  21. 82 0
      uni_modules/uni-scss/package.json
  22. 4 0
      uni_modules/uni-scss/readme.md
  23. 7 0
      uni_modules/uni-scss/styles/index.scss
  24. 3 0
      uni_modules/uni-scss/styles/setting/_border.scss
  25. 66 0
      uni_modules/uni-scss/styles/setting/_color.scss
  26. 55 0
      uni_modules/uni-scss/styles/setting/_radius.scss
  27. 56 0
      uni_modules/uni-scss/styles/setting/_space.scss
  28. 167 0
      uni_modules/uni-scss/styles/setting/_styles.scss
  29. 24 0
      uni_modules/uni-scss/styles/setting/_text.scss
  30. 146 0
      uni_modules/uni-scss/styles/setting/_variables.scss
  31. 19 0
      uni_modules/uni-scss/styles/tools/functions.scss
  32. 31 0
      uni_modules/uni-scss/theme.scss
  33. 62 0
      uni_modules/uni-scss/variables.scss

+ 4 - 2
App.vue

@@ -12,6 +12,8 @@
 	}
 </script>
 
-<style>
+<style lang="scss">
 	/*每个页面公共css */
-</style>
+	@import "uni.scss";
+	@import "static/style/base.scss";
+</style>

+ 53 - 0
components/pub-list-scroll/pub-list-scroll.vue

@@ -0,0 +1,53 @@
+<template>
+	<scroll-view class="scroll-view" @scrolltolower="onScrollTolower" scroll-y>
+		<slot />
+		<uni-load-more v-if="(loaded&&status!='noMore')||(!loaded && status=='noMore')" :status="status"
+			:content-text="contentText" />
+		<view class="blank"></view>
+	</scroll-view>
+</template>
+<script setup>
+	import {
+		ref,
+		computed
+	} from 'vue';
+	const emit = defineEmits(['next'])
+	const props = defineProps({
+		loaded: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: "loading"
+		},
+		text: {
+			type: String,
+			default: "数据加载中..."
+		}
+	})
+
+	const contentText = computed(() => {
+		let _text = {
+			contentdown: props.text,
+			contentrefresh: props.text,
+			contentnomore: '没有更多数据了',
+		}
+		return _text;
+	})
+
+	//顶部tab点击
+	const onScrollTolower = () => {
+		emit('next')
+	}
+</script>
+
+
+<style lang="scss" scoped>
+	.scroll-view {
+		.blank {
+			height: 1rpx;
+			width: 100%;
+		}
+	}
+</style>

+ 76 - 0
components/pub-loading-view/pub-loading-view.vue

@@ -0,0 +1,76 @@
+<template>
+	<view class="pub-loading">
+		<view v-if="loaded" class="load-view" :style="`height: ${height};width: ${width};`">
+			<uni-load-more :status="status" :content-text="contentText" :showText="showText" />
+		</view>
+		<view v-else>
+			<slot />
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		components: {},
+		name: 'PubLoadingView',
+		computed: {
+			contentText() {
+				let _text = {
+					contentdown: this.text,
+					contentrefresh: this.text,
+					contentnomore: '没有更多数据了',
+				}
+				return _text;
+			}
+		},
+		props: {
+			loaded: {
+				type: Boolean,
+				default: false
+			},
+			status: {
+				type: String,
+				default: "loading"
+			},
+			text: {
+				type: String,
+				default: "数据加载中..."
+			},
+			height: {
+				type: String,
+				default: "100vh"
+			},
+			width: {
+				type: String,
+				default: "100%"
+			},
+			showText: {
+				type: Boolean,
+				default: true
+			},
+		},
+		data() {
+			return {
+
+			}
+		},
+	}
+</script>
+<style lang="scss" scoped>
+	.pub-loading {
+		// height: 100%;
+
+		.load-view {
+			width: 100%;
+			// height: 400rpx;
+			// display: flex;
+			// justify-content: center;
+			// align-items: center;
+			@include flex-center;
+		}
+
+		.full-height {
+			height: 100vh;
+		}
+	}
+</style>

+ 158 - 0
pages/index/CfStatus.vue

@@ -0,0 +1,158 @@
+<template>
+	<view class="cf-status">
+		<pub-loading-view :loaded="loaded" height="100%">
+			<view class="status-item" :class="item.isCur?'is-current':''" v-for="item in statusList" :key="item.id">
+				<view class="status-item-left">
+					<view class="icon">
+						<text class="iconfont">&#xe602;</text>
+					</view>
+					<view class="line"></view>
+				</view>
+				<view class="status-item-right">
+					<view class="status-item-title">{{item.title}}</view>
+					<view>{{item.time}}</view>
+				</view>
+			</view>
+		</pub-loading-view>
+	</view>
+</template>
+<script lang="ts" setup>
+	import { ref, PropType, onMounted } from 'vue'
+	// defineProps({
+	// 	info: {
+	// 		type: Object as PropType<any>,
+	// 		default: () => ({}),
+	// 	},
+	// })
+	const loaded = ref(false)
+	const statusList = ref([{
+		icon: '',
+		title: '已签收',
+		time: '2024/04/22  12:24',
+		isCur: true,
+	}, {
+		icon: '',
+		title: '已快递',
+		time: '2024/04/22  12:24',
+		isCur: false,
+	}, {
+		icon: '',
+		title: '已打包',
+		time: '2024/04/22  12:24',
+		isCur: false,
+	}, {
+		icon: '',
+		title: '已煎煮',
+		time: '2024/04/22  12:24',
+		isCur: false,
+	}, {
+		icon: '',
+		title: '已浸泡',
+		time: '2024/04/22  12:24',
+		isCur: false,
+	}, {
+		icon: '',
+		title: '已调剂',
+		time: '2024/04/22  12:24',
+		isCur: false,
+	}, {
+		icon: '',
+		title: '已确认',
+		time: '2024/04/22  12:24',
+		isCur: false,
+	}, {
+		icon: '',
+		title: '已接收',
+		time: '2024/04/22  12:24',
+		isCur: false,
+	}])
+
+	const getInfo = async () => {
+		loaded.value = true;
+		// todo
+		loaded.value = false;
+	}
+
+	onMounted(() => {
+		getInfo()
+	})
+</script>
+
+<style lang="scss" scoped>
+	.cf-status {
+		background: #fff;
+		padding: $uni-spacing-col-s3 $page-row-spacing;
+		height: 100%;
+		box-sizing: border-box;
+		overflow-y: auto;
+
+		.status-item {
+			color: $uni-text-color-grey;
+			display: flex;
+			height: 140rpx;
+
+			.status-item-left {
+				@include flex;
+				flex-direction: column;
+				margin-right: 24rpx;
+
+				.icon {
+					width: 64rpx;
+					height: 64rpx;
+					background: $uni-bg-icon;
+					border-radius: 50%;
+					@include flex-center;
+
+
+					.iconfont {
+						background: linear-gradient(180deg, #46ACFF 0%, #1E92F0 100%);
+						background-clip: text;
+						text-fill-color: transparent;
+						-webkit-background-clip: text;
+						-webkit-text-fill-color: transparent;
+					}
+				}
+
+				.line {
+					flex: 1;
+					// width: 1px;
+					border-left: 1px solid $uni-border-color;
+					margin: 12rpx 0;
+				}
+			}
+
+			.status-item-right {
+				.status-item-title {
+					font-size: $uni-font-size-lg;
+					line-height: $uni-line-height-lg;
+					margin-bottom: 8rpx;
+				}
+			}
+
+			&.is-current {
+				.status-item-left {
+					.line {
+						border-left: 1px dashed $uni-color-primary;
+					}
+				}
+
+				.status-item-right {
+					color: $uni-text-color;
+
+					.status-item-title {
+						font-size: 32rpx;
+						font-weight: 800;
+					}
+				}
+			}
+
+			&:last-child {
+				.status-item-left {
+					.line {
+						display: none;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 109 - 0
pages/index/TopCard.vue

@@ -0,0 +1,109 @@
+<template>
+	<view class="top-card" v-if="info">
+		<view class="card-top">
+			<image mode="heightFix" src="/static/image/head.png" />
+			<view class="card-top-right">
+				<view class="card-top-right-name">{{info.name}}<text class="iconfont">&#xe602;</text></view>
+				<view>{{info.addr}}<text class="iconfont">&#xe602;</text></view>
+				<view class="card-top-right-sex">{{info.sex}} | {{info.text}}</view>
+			</view>
+		</view>
+		<view class="card-bottom">
+			<view>
+				<view class="label">证件号码</view>
+				<view>{{info.idCard}}</view>
+			</view>
+			<view class="second">
+				<view class="label">最近就诊</view>
+				<view>{{info.date}}</view>
+			</view>
+		</view>
+	</view>
+</template>
+<script lang="ts" setup>
+	import { PropType } from 'vue'
+	defineProps({
+		info: {
+			type: Object as PropType<any>,
+			default: () => ({}),
+		},
+	})
+</script>
+
+<style lang="scss" scoped>
+	.top-card {
+		border-radius: 0px 0px $uni-spacing-row-s2 $uni-spacing-row-s2;
+		background: $uni-color-primary;
+		padding: $uni-spacing-col-s2 $page-row-spacing $uni-spacing-col-s4;
+		border: 1px solid $uni-border-color;
+
+		.card-top {
+			@include flex;
+			margin-bottom: $uni-spacing-col-s4;
+			color: #fff;
+
+			image {
+				width: 140rpx;
+				height: 140rpx;
+				display: block;
+				margin-right: $uni-spacing-row-s4;
+			}
+
+			.card-top-right {
+				flex: 1;
+				line-height: $uni-line-height-base;
+
+				.iconfont {
+					margin-left: 8rpx;
+				}
+
+				.card-top-right-name {
+					font-size: $uni-font-size-xxxl;
+					line-height: $uni-line-height-xxxl;
+				}
+
+				.card-top-right-sex {
+					font-size: $uni-font-size-sm;
+					line-height: $uni-line-height-sm;
+				}
+			}
+		}
+
+		.card-bottom {
+			background-color: #fff;
+			color: $uni-text-color;
+			border-radius: $uni-spacing-row-s2;
+			padding: $uni-spacing-row-s4;
+			line-height: $uni-line-height-base;
+			@include flex;
+
+			>view {
+				flex: 1;
+				@include flex;
+				flex-direction: column;
+			}
+
+			.label {
+				color: $uni-text-color-grey;
+				margin-bottom: 24rpx;
+			}
+
+			.second {
+				position: relative;
+
+				&::before {
+					content: '';
+					position: absolute;
+					left: 0;
+					background: $uni-border-color;
+					width: 1px;
+					height: 80rpx;
+					-webkit-transform: scaleX(0.5);
+					transform: scaleX(0.5);
+					-webkit-transform-origin: 0 0;
+					transform-origin: 0 0;
+				}
+			}
+		}
+	}
+</style>

+ 107 - 34
pages/index/index.vue

@@ -1,51 +1,124 @@
 <template>
-	<view class="content">
-		<view class="text-area">
-			<text class="title">{{title}}</text>
+	<view class="home">
+		<TopCard :info="info" />
+		<!-- tab导航栏 -->
+		<view class="tabs">
+			<view v-for="(item, index) in navList" :key="index" class="tab" :class="{'is-active': tabCurId === item.id}"
+				@click="tabClick(index)">
+				{{item.text}}
+			</view>
 		</view>
+		<swiper :current="tabCurId" class="swiper-box" duration="300" @change="onChangeTab">
+			<swiper-item class="tab-content" v-for="(_tabItem,tabIndex) in navList" :key="tabIndex">
+				<!-- <pub-list-scroll :loaded="loaded" :text="loadText" :status="status"> -->
+				<CfStatus v-if="tabCurId==0" />
+
+				<!-- </pub-list-scroll> -->
+			</swiper-item>
+		</swiper>
 	</view>
 </template>
 
-<script>
-	export default {
-		data() {
-			return {
-				title: 'Hello'
-			}
-		},
-		onLoad() {
+<script lang="ts" setup>
+	import { ref, nextTick, onMounted } from 'vue'
+	import TopCard from './TopCard.vue'
+	import CfStatus from './CfStatus.vue'
 
-		},
-		methods: {
+	const topCardRef = ref()
+	const info = ref({
+		name: '陈*丽',
+		addr: '成都市大竹林街道*************',
+		sex: '女',
+		text: '近三个月就诊记录',
+		idCard: '************** 9253',
+		date: '2024-04-22'
+	})
+	const tabCurId = ref(0)//当前tab选中Id
+	// const loaded = ref(false)
+	// const status = ref('loading')
+	// const loadText = ref('数据加载中...')
+	const navList = ref([{
+		id: 0,
+		text: '处方状态',
+	},
+	{
+		id: 1,
+		text: '物流信息',
+	},
+	{
+		id: 2,
+		text: '处方内容',
+	},
+	{
+		id: 3,
+		text: '处方评价',
+	}
+	])
 
-		}
+	const swiperBoxStyle = () => {
+		let _h = `calc(100% - 72rpx - ${topCardRef.value?.offsetHeight})`;
+		console.log("_h", _h)
+		return {
+			height: '200px',
+		};
+	};
+
+	//顶部tab点击
+	const tabClick = (idx : number) => {
+		tabCurId.value = idx;
 	}
+	//滑动标签页
+	const onChangeTab = (e) => {
+		let _inx = e.detail.current;
+		tabClick(_inx);
+	}
+
+	onMounted(() => {
+	})
 </script>
 
-<style>
-	.content {
+<style lang="scss" scoped>
+	.home {
 		display: flex;
 		flex-direction: column;
-		align-items: center;
-		justify-content: center;
-	}
+		height: 100%;
 
-	.logo {
-		height: 200rpx;
-		width: 200rpx;
-		margin-top: 200rpx;
-		margin-left: auto;
-		margin-right: auto;
-		margin-bottom: 50rpx;
-	}
+		.tabs {
+			margin: $uni-spacing-row-s4 0 $uni-spacing-row-s3;
+			height: 88rpx;
+			background-color: #fff;
+			padding: 0 24rpx;
+			@include flex-between;
 
-	.text-area {
-		display: flex;
-		justify-content: center;
-	}
+			.tab {
+				height: 100%;
+				@include flex-center;
+
+				&.is-active {
+					color: $uni-color-primary;
+					position: relative;
 
-	.title {
-		font-size: 36rpx;
-		color: #8f8f94;
+					&::after {
+						content: '';
+						position: absolute;
+						bottom: 0;
+						left: 0;
+						background: $uni-color-primary;
+						width: 100%;
+						height: 4rpx;
+					}
+				}
+			}
+		}
+
+		.swiper-box {
+			flex: 1;
+
+			.tab-content {
+				:deep(.pub-loading) {
+					height: 100%;
+				}
+			}
+		}
 	}
 </style>

BIN
static/image/head.png


BIN
static/image/no-data.png


+ 150 - 0
static/style/base.scss

@@ -0,0 +1,150 @@
+
+@font-face {
+  font-family: 'iconfont';  /* Project id 1702958 */
+  src: url('https://at.alicdn.com/t/c/font_1702958_8sqv1klrrkm.woff2?t=1701676243273') format('woff2'),
+       url('https://at.alicdn.com/t/c/font_1702958_8sqv1klrrkm.woff?t=1701676243273') format('woff'),
+       url('https://at.alicdn.com/t/c/font_1702958_8sqv1klrrkm.ttf?t=1701676243273') format('truetype');
+}
+
+.iconfont{
+	font-family: iconfont;
+	font-size: 28rpx;
+}
+
+page {
+	background-color: $uni-bg-color-grey;
+	height: 100%;
+	font-size: $uni-font-size-base;
+	line-height: $uni-line-height-base;
+	font-family: PingFangSC-Medium, PingFang SC,SF UI Text,Roboto;
+	color: $uni-text-color;
+}
+
+//分割线
+.b-b{		
+	position: relative;	
+	&::after {
+		content: '';
+		position: absolute;
+		bottom: 0;
+		left: 0;
+		background: $uni-border-color;
+		width: 100%;
+		height: 1px;
+		-webkit-transform: scaleY(0.5);
+		transform: scaleY(0.5);
+		-webkit-transform-origin: 0 0;
+		transform-origin: 0 0;
+	}
+}
+.b-t{
+	position: relative;	
+	&::before {
+		content: '';
+		position: absolute;
+		top: 0;
+		left: 0;
+		background: $uni-border-color;
+		width: 100%;
+		height: 1px;
+		-webkit-transform: scaleY(0.5);
+		transform: scaleY(0.5);
+		-webkit-transform-origin: 0 0;
+		transform-origin: 0 0;
+	}
+}
+
+	
+//按钮
+.pub-button {
+	min-width: 120rpx;
+	height: 72rpx;
+	font-size: 32rpx;
+	border-radius: 36rpx;
+	padding: 0 32rpx;
+	@include flex-center;
+	color: $uni-color-primary;
+	border: 1px solid $uni-color-primary;
+	.iconfont{
+		font-size: 24rpx;
+		margin-right: 8rpx;
+	}		
+	&:hover{
+		border: 1px solid $uni-color-primary-deep;
+		color: $uni-color-primary-deep;
+	}
+	&.disabled{
+		color: #fff;
+		background-color: $uni-text-color-disable;
+		border-color: $uni-text-color-disable;
+	}		
+	//带背景
+	&.is-bg{
+		background-color: $uni-color-primary;
+		color: #FFFFFF;
+		border: none;
+		&:hover{
+			background-color: $uni-color-primary-deep;
+		}
+		&.disabled{
+			background-color: $uni-color-primary-light;
+		}		
+	}
+	&.is-grey{
+		color: $uni-text-color-grey;
+		border: 1px solid $uni-text-color-grey;
+		&:hover{
+			border: 1px solid $uni-text-color;
+			color: $uni-text-color;
+		}
+		&.disabled{
+			color: #fff;
+			background-color: $uni-text-color-disable;
+			border-color: $uni-text-color-disable;
+		}
+	}
+
+	&.is-square{
+		border-radius: 0;
+	}
+	&.large{
+		/*大按钮*/
+		min-width: 160rpx;
+		height: 96rpx;
+		font-size: 36rpx;
+		color: #fff;
+		border-radius: 48rpx;
+		/* padding: 0 32rpx;*/
+		margin: 16rpx 32rpx;
+		.iconfont{
+			font-size: 36rpx;
+			margin-right: 16rpx;
+		}
+	}
+	&.small{
+		/* 小按钮*/
+		min-width: 88rpx;
+		height: 56rpx;
+		font-size: 28rpx;
+		color: #fff;
+		border-radius: 28rpx;
+		padding: 0 16rpx;
+	}	
+	&+.pub-button{
+		margin-left: 16rpx;
+	}
+}
+
+/*tab页*/
+.pub-tabs{
+	height: 88rpx;	
+	padding: 0 24rpx;
+	@include flex;
+	.pub-tab{
+		flex : 1;
+	}
+}
+
+.flex-1{
+	flex:1;
+}

+ 102 - 35
uni.scss

@@ -14,63 +14,130 @@
 
 /* 颜色变量 */
 
+/* 辅助色颜色 */
+$uni-color-primary: #1E92F0;/*#007aff;*/
+$uni-color-primary-light: #D9EEFF;
+$uni-color-primary-deep: #0A508C;
+$uni-color-orange: #FD9F48;
+$uni-color-green: #00B578;
+$uni-color-blue: #4384F3;
+$uni-color-blue-light: #30DFF3;
 /* 行为相关颜色 */
-$uni-color-primary: #007aff;
-$uni-color-success: #4cd964;
-$uni-color-warning: #f0ad4e;
-$uni-color-error: #dd524d;
+$uni-color-success: #00B578;/*4cd964;*/
+$uni-color-warning :#FF9624;/* #f0ad4e;*/
+$uni-color-error: #E63633;/*#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-text-color:#363A44;/*#333;基本色,文本颜色、行动点图标与文字*/
+/* $uni-text-color-inverse:#fff;//反色*/
+$uni-text-color-grey:#686B73;/*#999;//弱化文本*/
+$uni-text-color-light:#B3B5B9;/*水印文本*/
+/* $uni-text-color-placeholder: #808080;*/
+$uni-text-color-disable:#B9BCBF;/*#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-bg-color-grey:#F6F7F8;/*#f8f8f8;*/
+/* $uni-bg-color-hover:#f1f1f1;点击状态颜色*/
+$uni-bg-color-mask:rgba(0, 0, 0, 0.5);/*遮罩颜色*/
+$uni-bg-icon:#F5F8FD;/*遮罩颜色*/
 
 /* 边框颜色 */
-$uni-border-color:#c8c7cc;
+$uni-border-color:#E8E9EC;/*#c8c7cc;*/
 
 /* 尺寸变量 */
 
 /* 文字尺寸 */
-$uni-font-size-sm:12px;
-$uni-font-size-base:14px;
-$uni-font-size-lg:16px;
+$uni-font-size-ss:20rpx;/*备注*/
+$uni-font-size-sm:24rpx;/*水印文本\辅助说明*/
+$uni-font-size-base:28rpx;/*正文*/
+$uni-font-size-lg:32rpx;/*标题 小\TAB Title*/
+$uni-font-size-xl:36rpx;/*标题 中*/
+$uni-font-size-xxl:40rpx;/*标题 大*/
+$uni-font-size-xxxl:48rpx;/*主标题/页面强调内容*/
+$uni-font-size-xxxxl:72rpx;/*用于最大数据文字/卡片标题文字*/
+
+/* 行高 一般为字号的1.4倍*/
+$uni-line-height-ss:28rpx;/*备注*/
+$uni-line-height-sm:34rpx;/*水印文本\辅助说明*/
+$uni-line-height-base:40rpx;/*正文*/
+$uni-line-height-lg:44rpx;/*标题 小\TAB Title*/
+$uni-line-height-xl:50rpx;/*标题 中*/
+$uni-line-height-xxl:56rpx;/*标题 大*/
+$uni-line-height-xxxl:67rpx;/*主标题/页面强调内容*/
+
 
 /* 图片尺寸 */
-$uni-img-size-sm:20px;
-$uni-img-size-base:26px;
-$uni-img-size-lg:40px;
+/* $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-r1: 4rpx;
+$uni-border-radius-r2: 8rpx;
+$uni-border-radius-r3: 12rpx;
+$uni-border-radius-r4: 16rpx;
 $uni-border-radius-circle: 50%;
 
 /* 水平间距 */
-$uni-spacing-row-sm: 5px;
-$uni-spacing-row-base: 10px;
-$uni-spacing-row-lg: 15px;
+$uni-spacing-row-s1: 8rpx;
+$uni-spacing-row-s2: 16rpx;
+$uni-spacing-row-s3: 24rpx;
+$uni-spacing-row-s4: 32rpx;
+$page-row-spacing: 32rpx;
 
 /* 垂直间距 */
-$uni-spacing-col-sm: 4px;
-$uni-spacing-col-base: 8px;
-$uni-spacing-col-lg: 12px;
+$uni-spacing-col-s1: 8rpx;
+$uni-spacing-col-s2: 16rpx;
+$uni-spacing-col-s3: 24rpx;
+$uni-spacing-col-s4: 32rpx;
+
 
 /* 透明度 */
-$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+/**/ $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;
+/* $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;*/
+
+/* 公共样式 */
+@mixin flex {
+	display: flex;
+	align-items: center;
+}
+//居中
+@mixin flex-center {
+	display: flex;
+	justify-content: center;
+	align-items: center;
+}
+
+@mixin flex-between {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+
+@mixin text-ellipsis {
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;	
+}
+@mixin text-ellipsis-2 {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: -webkit-box;
+	-webkit-line-clamp: 2;
+	-webkit-box-orient: vertical;		
+}
+@mixin text-ellipsis-3 {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: -webkit-box;
+	-webkit-line-clamp: 3;
+	-webkit-box-orient: vertical;
+}

+ 25 - 0
uni_modules/uni-load-more/changelog.md

@@ -0,0 +1,25 @@
+## 1.3.6(2024-10-15)
+- 修复 微信小程序中的getSystemInfo警告
+## 1.3.5(2024-10-12)
+- 修复 微信小程序中的getSystemInfo警告
+## 1.3.4(2024-10-12)
+- 修复 微信小程序中的getSystemInfo警告
+## 1.3.3(2022-01-20)
+- 新增 showText属性 ,是否显示文本
+## 1.3.2(2022-01-19)
+- 修复 nvue 平台下不显示文本的bug
+## 1.3.1(2022-01-19)
+- 修复 微信小程序平台样式选择器报警告的问题
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+## 1.2.1(2021-08-24)
+- 新增 支持国际化
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.8(2021-05-12)
+- 新增 组件示例地址
+## 1.1.7(2021-03-30)
+- 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug
+## 1.1.6(2021-02-05)
+- 调整为uni_modules目录规范

+ 5 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/en.json

@@ -0,0 +1,5 @@
+{
+	"uni-load-more.contentdown": "Pull up to show more",
+	"uni-load-more.contentrefresh": "loading...",
+	"uni-load-more.contentnomore": "No more data"
+}

+ 8 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/index.js

@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+	en,
+	'zh-Hans': zhHans,
+	'zh-Hant': zhHant
+}

+ 5 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json

@@ -0,0 +1,5 @@
+{
+	"uni-load-more.contentdown": "上拉显示更多",
+	"uni-load-more.contentrefresh": "正在加载...",
+	"uni-load-more.contentnomore": "没有更多数据了"
+}

+ 5 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json

@@ -0,0 +1,5 @@
+{
+	"uni-load-more.contentdown": "上拉顯示更多",
+	"uni-load-more.contentrefresh": "正在加載...",
+	"uni-load-more.contentnomore": "沒有更多數據了"
+}

File diff suppressed because it is too large
+ 404 - 0
uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue


+ 84 - 0
uni_modules/uni-load-more/package.json

@@ -0,0 +1,84 @@
+{
+  "id": "uni-load-more",
+  "displayName": "uni-load-more 加载更多",
+  "version": "1.3.6",
+  "description": "LoadMore 组件,常用在列表里面,做滚动加载使用。",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "加载更多",
+    "load-more"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": ""
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-scss"],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y",
+        "alipay": "n"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 14 - 0
uni_modules/uni-load-more/readme.md

@@ -0,0 +1,14 @@
+
+
+### LoadMore 加载更多
+> **组件名:uni-load-more**
+> 代码块: `uLoadMore`
+
+
+用于列表中,做滚动加载使用,展示 loading 的各种状态。
+
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
+
+

+ 8 - 0
uni_modules/uni-scss/changelog.md

@@ -0,0 +1,8 @@
+## 1.0.3(2022-01-21)
+- 优化 组件示例
+## 1.0.2(2021-11-22)
+- 修复 / 符号在 vue 不同版本兼容问题引起的报错问题
+## 1.0.1(2021-11-22)
+- 修复 vue3中scss语法兼容问题
+## 1.0.0(2021-11-18)
+- init

+ 1 - 0
uni_modules/uni-scss/index.scss

@@ -0,0 +1 @@
+@import './styles/index.scss';

+ 82 - 0
uni_modules/uni-scss/package.json

@@ -0,0 +1,82 @@
+{
+  "id": "uni-scss",
+  "displayName": "uni-scss 辅助样式",
+  "version": "1.0.3",
+  "description": "uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。",
+  "keywords": [
+    "uni-scss",
+    "uni-ui",
+    "辅助样式"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": "^3.1.0"
+  },
+  "dcloudext": {
+    "category": [
+        "JS SDK",
+        "通用 SDK"
+    ],
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+  },
+  "uni_modules": {
+    "dependencies": [],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "u"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "n",
+          "联盟": "n"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 4 - 0
uni_modules/uni-scss/readme.md

@@ -0,0 +1,4 @@
+`uni-sass` 是 `uni-ui`提供的一套全局样式 ,通过一些简单的类名和`sass`变量,实现简单的页面布局操作,比如颜色、边距、圆角等。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-sass)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 7 - 0
uni_modules/uni-scss/styles/index.scss

@@ -0,0 +1,7 @@
+@import './setting/_variables.scss';
+@import './setting/_border.scss';
+@import './setting/_color.scss';
+@import './setting/_space.scss';
+@import './setting/_radius.scss';
+@import './setting/_text.scss';
+@import './setting/_styles.scss';

+ 3 - 0
uni_modules/uni-scss/styles/setting/_border.scss

@@ -0,0 +1,3 @@
+.uni-border {
+	border: 1px $uni-border-1 solid;
+}

+ 66 - 0
uni_modules/uni-scss/styles/setting/_color.scss

@@ -0,0 +1,66 @@
+
+// TODO 暂时不需要 class ,需要用户使用变量实现 ,如果使用类名其实并不推荐
+// @mixin get-styles($k,$c) {
+// 	@if $k == size or $k == weight{
+// 		font-#{$k}:#{$c}
+// 	}@else{
+// 		#{$k}:#{$c}
+// 	}
+// }
+$uni-ui-color:(
+	// 主色
+	primary: $uni-primary,
+	primary-disable: $uni-primary-disable,
+	primary-light: $uni-primary-light,
+	// 辅助色
+	success: $uni-success,
+	success-disable: $uni-success-disable,
+	success-light: $uni-success-light,
+	warning: $uni-warning,
+	warning-disable: $uni-warning-disable,
+	warning-light: $uni-warning-light,
+	error: $uni-error,
+	error-disable: $uni-error-disable,
+	error-light: $uni-error-light,
+	info: $uni-info,
+	info-disable: $uni-info-disable,
+	info-light: $uni-info-light,
+	// 中性色
+	main-color: $uni-main-color,
+	base-color: $uni-base-color,
+	secondary-color: $uni-secondary-color,
+	extra-color: $uni-extra-color,
+	// 背景色
+	bg-color: $uni-bg-color,
+	// 边框颜色
+	border-1: $uni-border-1,
+	border-2: $uni-border-2,
+	border-3: $uni-border-3,
+	border-4: $uni-border-4,
+	// 黑色
+	black:$uni-black,
+	// 白色
+	white:$uni-white,
+	// 透明
+	transparent:$uni-transparent
+) !default;
+@each $key, $child in $uni-ui-color {
+	.uni-#{"" + $key} {
+		color: $child;
+	}
+	.uni-#{"" + $key}-bg {
+		background-color: $child;
+	}
+}
+.uni-shadow-sm {
+	box-shadow: $uni-shadow-sm;
+}
+.uni-shadow-base {
+	box-shadow: $uni-shadow-base;
+}
+.uni-shadow-lg {
+	box-shadow: $uni-shadow-lg;
+}
+.uni-mask {
+	background-color:$uni-mask;
+}

+ 55 - 0
uni_modules/uni-scss/styles/setting/_radius.scss

@@ -0,0 +1,55 @@
+@mixin radius($r,$d:null ,$important: false){
+  $radius-value:map-get($uni-radius, $r) if($important, !important, null);
+  // Key exists within the $uni-radius variable
+  @if (map-has-key($uni-radius, $r) and  $d){
+		@if $d == t {
+				border-top-left-radius:$radius-value;
+				border-top-right-radius:$radius-value;
+		}@else if $d == r {
+				border-top-right-radius:$radius-value;
+				border-bottom-right-radius:$radius-value;
+		}@else if $d == b {
+				border-bottom-left-radius:$radius-value;
+				border-bottom-right-radius:$radius-value;
+		}@else if $d == l {
+				border-top-left-radius:$radius-value;
+				border-bottom-left-radius:$radius-value;
+		}@else if $d == tl {
+				border-top-left-radius:$radius-value;
+		}@else if $d == tr {
+				border-top-right-radius:$radius-value;
+		}@else if $d == br {
+				border-bottom-right-radius:$radius-value;
+		}@else if $d == bl {
+				border-bottom-left-radius:$radius-value;
+		}
+  }@else{
+		border-radius:$radius-value;
+  }
+}
+
+@each $key, $child in $uni-radius {
+	@if($key){
+		.uni-radius-#{"" + $key} {
+				@include radius($key)
+		}
+	}@else{
+		.uni-radius {
+				@include radius($key)
+		}
+	}
+}
+
+@each $direction in t, r, b, l,tl, tr, br, bl {
+	@each $key, $child in $uni-radius {
+		@if($key){
+			.uni-radius-#{"" + $direction}-#{"" + $key} {
+				@include radius($key,$direction,false)
+			}
+		}@else{
+			.uni-radius-#{$direction} {
+				@include radius($key,$direction,false)
+			}
+		}
+	}
+}

+ 56 - 0
uni_modules/uni-scss/styles/setting/_space.scss

@@ -0,0 +1,56 @@
+
+@mixin fn($space,$direction,$size,$n) {
+	@if $n {
+		#{$space}-#{$direction}: #{$size*$uni-space-root}px
+	} @else {
+		 #{$space}-#{$direction}: #{-$size*$uni-space-root}px
+	}
+}
+@mixin get-styles($direction,$i,$space,$n){
+	@if $direction == t {
+		@include fn($space, top,$i,$n);
+	} 
+	@if $direction == r {
+		@include fn($space, right,$i,$n);
+	} 
+	@if $direction == b {
+		@include fn($space, bottom,$i,$n);
+	} 
+	@if $direction == l {
+	 @include fn($space, left,$i,$n);
+	} 
+	@if $direction == x {
+		@include fn($space, left,$i,$n);
+		@include fn($space, right,$i,$n);
+	} 
+	@if $direction == y {
+		@include fn($space, top,$i,$n);
+		@include fn($space, bottom,$i,$n);
+	} 
+	@if $direction == a {
+		@if $n {
+			#{$space}:#{$i*$uni-space-root}px;
+		} @else {
+			#{$space}:#{-$i*$uni-space-root}px;
+		}
+	} 
+}
+
+@each $orientation in m,p {
+	$space: margin;
+	@if $orientation == m {
+		$space: margin;
+	} @else {
+		$space: padding;
+	}
+	@for $i from 0 through 16 {
+		@each $direction in t, r, b, l, x, y, a {
+			.uni-#{$orientation}#{$direction}-#{$i} { 
+				@include  get-styles($direction,$i,$space,true);
+			} 
+			.uni-#{$orientation}#{$direction}-n#{$i} { 
+				@include  get-styles($direction,$i,$space,false);
+			}
+		}
+	}
+}

+ 167 - 0
uni_modules/uni-scss/styles/setting/_styles.scss

@@ -0,0 +1,167 @@
+/* #ifndef APP-NVUE */
+
+$-color-white:#fff;
+$-color-black:#000;
+@mixin base-style($color) {
+	color: #fff;
+	background-color: $color;
+	border-color: mix($-color-black, $color, 8%);
+	&:not([hover-class]):active {
+		background: mix($-color-black, $color, 10%);
+		border-color: mix($-color-black, $color, 20%);
+		color: $-color-white;
+		outline: none;
+	}
+}
+@mixin is-color($color) {
+	@include base-style($color);
+	&[loading] {
+		@include base-style($color);
+		&::before {
+			margin-right:5px;
+		}
+	}
+	&[disabled] {
+	  &,
+		&[loading],
+	  &:not([hover-class]):active {
+	    color: $-color-white;
+			border-color: mix(darken($color,10%), $-color-white);
+	    background-color: mix($color, $-color-white);
+	  }
+	}
+
+}
+@mixin base-plain-style($color) {
+	color:$color;
+	background-color: mix($-color-white, $color, 90%);
+	border-color: mix($-color-white, $color, 70%);
+	&:not([hover-class]):active {
+	  background: mix($-color-white, $color, 80%);
+	  color: $color;
+	  outline: none;
+		border-color: mix($-color-white, $color, 50%);
+	}
+}
+@mixin is-plain($color){
+	&[plain] {
+		@include base-plain-style($color);
+		&[loading] {
+			@include base-plain-style($color);
+			&::before {
+				margin-right:5px;
+			}
+		}
+		&[disabled] {
+		  &,
+		  &:active {
+		    color: mix($-color-white, $color, 40%);
+		    background-color: mix($-color-white, $color, 90%);
+				border-color: mix($-color-white, $color, 80%);
+		  }
+		}
+	}
+}
+
+
+.uni-btn {
+	margin: 5px;
+	color: #393939;
+	border:1px solid #ccc;
+	font-size: 16px;
+	font-weight: 200;
+	background-color: #F9F9F9;
+	// TODO 暂时处理边框隐藏一边的问题
+	overflow: visible;
+	&::after{
+		border: none;
+	}
+
+	&:not([type]),&[type=default] {
+		color: #999;
+		&[loading] {
+			background: none;
+			&::before {
+				margin-right:5px;
+			}
+		}
+
+
+
+		&[disabled]{
+			color: mix($-color-white, #999, 60%);
+		  &,
+			&[loading],
+		  &:active {
+				color: mix($-color-white, #999, 60%);
+		    background-color: mix($-color-white,$-color-black , 98%);
+				border-color: mix($-color-white,  #999, 85%);
+		  }
+		}
+
+		&[plain] {
+			color: #999;
+			background: none;
+			border-color: $uni-border-1;
+			&:not([hover-class]):active {
+				background: none;
+			  color: mix($-color-white, $-color-black, 80%);
+				border-color: mix($-color-white, $-color-black, 90%);
+			  outline: none;
+			}
+			&[disabled]{
+			  &,
+				&[loading],
+			  &:active {
+			    background: none;
+					color: mix($-color-white, #999, 60%);
+					border-color: mix($-color-white,  #999, 85%);
+			  }
+			}
+		}
+	}
+
+	&:not([hover-class]):active {
+	  color: mix($-color-white, $-color-black, 50%);
+	}
+
+	&[size=mini] {
+		font-size: 16px;
+		font-weight: 200;
+		border-radius: 8px;
+	}
+
+
+
+	&.uni-btn-small {
+		font-size: 14px;
+	}
+	&.uni-btn-mini {
+		font-size: 12px;
+	}
+
+	&.uni-btn-radius {
+		border-radius: 999px;
+	}
+	&[type=primary] {
+		@include is-color($uni-primary);
+		@include is-plain($uni-primary)
+	}
+	&[type=success] {
+		@include is-color($uni-success);
+		@include is-plain($uni-success)
+	}
+	&[type=error] {
+		@include is-color($uni-error);
+		@include is-plain($uni-error)
+	}
+	&[type=warning] {
+		@include is-color($uni-warning);
+		@include is-plain($uni-warning)
+	}
+	&[type=info] {
+		@include is-color($uni-info);
+		@include is-plain($uni-info)
+	}
+}
+/* #endif */

+ 24 - 0
uni_modules/uni-scss/styles/setting/_text.scss

@@ -0,0 +1,24 @@
+@mixin get-styles($k,$c) {
+	@if $k == size or $k == weight{
+		font-#{$k}:#{$c}
+	}@else{
+		#{$k}:#{$c}
+	}
+}
+
+@each $key, $child in $uni-headings {
+	/* #ifndef APP-NVUE */
+	.uni-#{$key} {
+		@each $k, $c in $child {
+			@include get-styles($k,$c)
+		}
+	}
+	/* #endif */
+	/* #ifdef APP-NVUE */
+	.container .uni-#{$key} {
+		@each $k, $c in $child {
+			@include get-styles($k,$c)
+		}
+	}
+	/* #endif */
+}

+ 146 - 0
uni_modules/uni-scss/styles/setting/_variables.scss

@@ -0,0 +1,146 @@
+// @use "sass:math";
+@import  '../tools/functions.scss';
+// 间距基础倍数
+$uni-space-root: 2 !default;
+// 边框半径默认值
+$uni-radius-root:5px !default;
+$uni-radius: () !default;
+// 边框半径断点
+$uni-radius: map-deep-merge(
+  (
+    0: 0,
+		// TODO 当前版本暂时不支持 sm 属性
+    // 'sm': math.div($uni-radius-root, 2),
+    null: $uni-radius-root,
+    'lg': $uni-radius-root * 2,
+    'xl': $uni-radius-root * 6,
+    'pill': 9999px,
+    'circle': 50%
+  ),
+  $uni-radius
+);
+// 字体家族
+$body-font-family: 'Roboto', sans-serif !default;
+// 文本
+$heading-font-family: $body-font-family !default;
+$uni-headings: () !default;
+$letterSpacing: -0.01562em;
+$uni-headings: map-deep-merge(
+  (
+    'h1': (
+      size: 32px,
+			weight: 300,
+			line-height: 50px,
+			// letter-spacing:-0.01562em
+    ),
+    'h2': (
+      size: 28px,
+      weight: 300,
+      line-height: 40px,
+      // letter-spacing: -0.00833em
+    ),
+    'h3': (
+      size: 24px,
+      weight: 400,
+      line-height: 32px,
+      // letter-spacing: normal
+    ),
+    'h4': (
+      size: 20px,
+      weight: 400,
+      line-height: 30px,
+      // letter-spacing: 0.00735em
+    ),
+    'h5': (
+      size: 16px,
+      weight: 400,
+      line-height: 24px,
+      // letter-spacing: normal
+    ),
+    'h6': (
+      size: 14px,
+      weight: 500,
+      line-height: 18px,
+      // letter-spacing: 0.0125em
+    ),
+    'subtitle': (
+      size: 12px,
+      weight: 400,
+      line-height: 20px,
+      // letter-spacing: 0.00937em
+    ),
+    'body': (
+      font-size: 14px,
+			font-weight: 400,
+			line-height: 22px,
+			// letter-spacing: 0.03125em
+    ),
+    'caption': (
+      'size': 12px,
+      'weight': 400,
+      'line-height': 20px,
+      // 'letter-spacing': 0.03333em,
+      // 'text-transform': false
+    )
+  ),
+  $uni-headings
+);
+
+
+
+// 主色
+$uni-primary: #2979ff !default;
+$uni-primary-disable:lighten($uni-primary,20%) !default;
+$uni-primary-light: lighten($uni-primary,25%) !default;
+
+// 辅助色
+// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。
+$uni-success: #18bc37 !default;
+$uni-success-disable:lighten($uni-success,20%) !default;
+$uni-success-light: lighten($uni-success,25%) !default;
+
+$uni-warning: #f3a73f !default;
+$uni-warning-disable:lighten($uni-warning,20%) !default;
+$uni-warning-light: lighten($uni-warning,25%) !default;
+
+$uni-error: #e43d33 !default;
+$uni-error-disable:lighten($uni-error,20%) !default;
+$uni-error-light: lighten($uni-error,25%) !default;
+
+$uni-info: #8f939c !default;
+$uni-info-disable:lighten($uni-info,20%) !default;
+$uni-info-light: lighten($uni-info,25%) !default;
+
+// 中性色
+// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。
+$uni-main-color: #3a3a3a !default; 			// 主要文字
+$uni-base-color: #6a6a6a !default;			// 常规文字
+$uni-secondary-color: #909399 !default;	// 次要文字
+$uni-extra-color: #c7c7c7 !default;			// 辅助说明
+
+// 边框颜色
+$uni-border-1: #F0F0F0 !default;
+$uni-border-2: #EDEDED !default;
+$uni-border-3: #DCDCDC !default;
+$uni-border-4: #B9B9B9 !default;
+
+// 常规色
+$uni-black: #000000 !default;
+$uni-white: #ffffff !default;
+$uni-transparent: rgba($color: #000000, $alpha: 0) !default;
+
+// 背景色
+$uni-bg-color: #f7f7f7 !default;
+
+/* 水平间距 */
+$uni-spacing-sm: 8px !default;
+$uni-spacing-base: 15px !default;
+$uni-spacing-lg: 30px !default;
+
+// 阴影
+$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default;
+$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default;
+$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default;
+
+// 蒙版
+$uni-mask: rgba($color: #000000, $alpha: 0.4) !default;

+ 19 - 0
uni_modules/uni-scss/styles/tools/functions.scss

@@ -0,0 +1,19 @@
+// 合并 map
+@function map-deep-merge($parent-map, $child-map){
+	$result: $parent-map;
+	@each $key, $child in $child-map {
+		$parent-has-key: map-has-key($result, $key);
+		$parent-value: map-get($result, $key);
+		$parent-type: type-of($parent-value);
+		$child-type: type-of($child);
+		$parent-is-map: $parent-type == map;
+		$child-is-map: $child-type == map;
+			
+		@if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map)){
+			$result: map-merge($result, ( $key: $child ));
+		}@else {
+			$result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) ));
+		}
+	}
+	@return $result;
+};

+ 31 - 0
uni_modules/uni-scss/theme.scss

@@ -0,0 +1,31 @@
+// 间距基础倍数
+$uni-space-root: 2;
+// 边框半径默认值
+$uni-radius-root:5px;
+// 主色
+$uni-primary: #2979ff;
+// 辅助色
+$uni-success: #4cd964;
+// 警告色
+$uni-warning: #f0ad4e;
+// 错误色
+$uni-error: #dd524d;
+// 描述色
+$uni-info: #909399;
+// 中性色
+$uni-main-color: #303133;
+$uni-base-color: #606266;
+$uni-secondary-color: #909399;
+$uni-extra-color: #C0C4CC;
+// 背景色
+$uni-bg-color: #f5f5f5;
+// 边框颜色
+$uni-border-1: #DCDFE6;
+$uni-border-2: #E4E7ED;
+$uni-border-3: #EBEEF5;
+$uni-border-4: #F2F6FC;
+
+// 常规色
+$uni-black: #000000;
+$uni-white: #ffffff;
+$uni-transparent: rgba($color: #000000, $alpha: 0);

+ 62 - 0
uni_modules/uni-scss/variables.scss

@@ -0,0 +1,62 @@
+@import './styles/setting/_variables.scss';
+// 间距基础倍数
+$uni-space-root: 2;
+// 边框半径默认值
+$uni-radius-root:5px;
+
+// 主色
+$uni-primary: #2979ff;
+$uni-primary-disable:mix(#fff,$uni-primary,50%);
+$uni-primary-light: mix(#fff,$uni-primary,80%);
+
+// 辅助色
+// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。
+$uni-success: #18bc37;
+$uni-success-disable:mix(#fff,$uni-success,50%);
+$uni-success-light: mix(#fff,$uni-success,80%);
+
+$uni-warning: #f3a73f;
+$uni-warning-disable:mix(#fff,$uni-warning,50%);
+$uni-warning-light: mix(#fff,$uni-warning,80%);
+
+$uni-error: #e43d33;
+$uni-error-disable:mix(#fff,$uni-error,50%);
+$uni-error-light: mix(#fff,$uni-error,80%);
+
+$uni-info: #8f939c;
+$uni-info-disable:mix(#fff,$uni-info,50%);
+$uni-info-light: mix(#fff,$uni-info,80%);
+
+// 中性色
+// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。
+$uni-main-color: #3a3a3a; 			// 主要文字
+$uni-base-color: #6a6a6a;			// 常规文字
+$uni-secondary-color: #909399;	// 次要文字
+$uni-extra-color: #c7c7c7;			// 辅助说明
+
+// 边框颜色
+$uni-border-1: #F0F0F0;
+$uni-border-2: #EDEDED;
+$uni-border-3: #DCDCDC;
+$uni-border-4: #B9B9B9;
+
+// 常规色
+$uni-black: #000000;
+$uni-white: #ffffff;
+$uni-transparent: rgba($color: #000000, $alpha: 0);
+
+// 背景色
+$uni-bg-color: #f7f7f7;
+
+/* 水平间距 */
+$uni-spacing-sm: 8px;
+$uni-spacing-base: 15px;
+$uni-spacing-lg: 30px;
+
+// 阴影
+$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5);
+$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2);
+$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5);
+
+// 蒙版
+$uni-mask: rgba($color: #000000, $alpha: 0.4);