xiaoxin 3 سال پیش
والد
کامیت
c587751f53

+ 18 - 0
pages.json

@@ -179,6 +179,24 @@
 					"navigationBarTitleText": "报修详情",
 					"enablePullDownRefresh": false
 				}
+			}, {
+				"path": "offer/offer",
+				"style": {
+					"navigationBarTitleText": "报价",
+					"enablePullDownRefresh": false
+				}
+			}, {
+				"path": "addGoods/addGoods",
+				"style": {
+					"navigationBarTitleText": "关联耗材",
+					"enablePullDownRefresh": false
+				}
+			}, {
+				"path": "repairRecord/repairRecord",
+				"style": {
+					"navigationBarTitleText": "维修记录",
+					"enablePullDownRefresh": false
+				}
 			}]
 		},
 		{

+ 194 - 0
pagesRepairs/addGoods/addGoods.vue

@@ -0,0 +1,194 @@
+<template>
+	<view class="container">
+		<!-- 输入框区域 -->
+		<view class="search">
+			<img src="../../static/images/repairsImg/search.png" />
+
+			<input type="text" placeholder="请输入搜索内容" />
+		</view>
+
+		<!-- 耗材区域 -->
+		<view class="body">
+			<view class="body_left">
+				<view class="left_item" :class="{ active: activeIndex === index }" v-for="(item, index) in list" :key="index" @click="handleChange(index)">{{ item }}</view>
+			</view>
+			<view class="body_right">
+				<view class="right_item" :class="{ active: activeIndex2 === index2 }" v-for="(ele, index2) in List2" :key="index2" @click="handleChange2(index2)">{{ ele }}</view>
+			</view>
+		</view>
+
+		<!-- 备注区域 -->
+		<view class="notes" v-if="activeIndex === 4">
+			<view class="notes_title">备注</view>
+			<view class="notes_textarea">
+				<textarea placeholder-style="color:#CCCCCC" placeholder="请输入您的备注" maxlength="150" @input="handleInput"></textarea>
+
+				<view class="notes_num">{{ textLength }}/150</view>
+			</view>
+		</view>
+		<view class="notes2" v-else></view>
+
+		<view class="btn">确认</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			textLength: 0,
+			activeIndex: 0,
+			activeIndex2: 0,
+			list: ['水电', '木工类', '行政楼', '泥工类', '其他'],
+			List2: ['下水道', '安全指示牌', '消费应急灯', '排水管道', '吊顶', '风扇', '没电']
+		}
+	},
+	methods: {
+		handleChange(index) {
+			this.activeIndex = index
+		},
+		handleChange2(index) {
+			this.activeIndex2 = index
+		},
+		handleInput(e) {
+			// console.log(e.detail.value.length)
+			this.textLength = e.detail.value.length
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.container {
+	display: flex;
+	flex-direction: column;
+	width: 100vw;
+	overflow-y: auto;
+
+	.search {
+		display: flex;
+		align-items: center;
+		margin: 30rpx auto 30rpx;
+		width: 690rpx;
+		height: 80rpx;
+		border-radius: 4rpx;
+		background-color: #f2f2f2;
+
+		img {
+			margin: 0 20rpx;
+			width: 40rpx;
+			height: 40rpx;
+		}
+
+		input {
+			flex: 1;
+			padding: 10rpx;
+		}
+	}
+
+	.body {
+		display: flex;
+		height: 686rpx;
+		border-top: 1rpx solid #e5e5e5;
+
+		.body_left {
+			box-sizing: border-box;
+			padding: 30rpx;
+			width: 199rpx;
+			border-right: 1rpx solid #cccccc;
+			overflow-y: auto;
+
+			.left_item {
+				height: 80rpx;
+				font-size: 28rpx;
+				font-weight: bold;
+			}
+
+			.active {
+				color: #6fb6b8;
+			}
+		}
+
+		.body_right {
+			flex: 1;
+			box-sizing: border-box;
+			padding: 35rpx 30rpx;
+			overflow-y: auto;
+
+			.right_item {
+				float: left;
+				box-sizing: border-box;
+				padding: 10rpx 30rpx;
+				margin: 0 20rpx 37rpx 0;
+				height: 50rpx;
+				line-height: 30rpx;
+				text-align: center;
+				color: #808080;
+				font-size: 28rpx;
+				border-radius: 53rpx;
+				background-color: #e6e6e6;
+				overflow: hidden;
+				white-space: nowrap;
+				text-overflow: ellipsis;
+			}
+
+			.active {
+				color: #fff;
+				background-color: #6fb6b8;
+			}
+		}
+	}
+
+	.notes {
+		box-sizing: border-box;
+		padding: 0 30rpx;
+		border-top: 1rpx solid #e5e5e5;
+
+		.notes_title {
+			display: flex;
+			align-items: center;
+			height: 88rpx;
+			font-size: 32rpx;
+			font-weight: bold;
+		}
+
+		.notes_textarea {
+			position: relative;
+			height: 284rpx;
+			border: 1rpx solid #e5e5e5;
+
+			textarea {
+				box-sizing: border-box;
+				padding: 16rpx 20rpx 75rpx;
+				width: 100%;
+				font-size: 32rpx;
+			}
+
+			.notes_num {
+				position: absolute;
+				right: 20rpx;
+				bottom: 14rpx;
+				color: #a6a6a6;
+				font-size: 32rpx;
+			}
+		}
+	}
+
+	.notes2 {
+		height: 150rpx;
+	}
+
+	.btn {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		margin: 55rpx auto 65rpx;
+		width: 690rpx;
+		height: 100rpx;
+		color: #fff;
+		font-size: 32rpx;
+		border-radius: 12rpx;
+		background-color: #6fb6b8;
+	}
+}
+</style>

+ 19 - 11
pagesRepairs/box/box.vue

@@ -45,7 +45,7 @@ export default {
 		Tabbar
 	},
 	mounted() {
-		this.list = this.userList
+		this.list = this.workerList
 		this.show = this.list[0].show
 		uni.setNavigationBarTitle({
 			title: this.list[0].text
@@ -74,24 +74,32 @@ export default {
 			workerList: [
 				{
 					text: '首页',
-					icon: 'home',
+					imgUrl: '../../static/images/repairsImg/home.png',
+					imgUrlActive: '../../static/images/repairsImg/home-active.png',
 					show: 'home'
 				},
 				{
 					text: '工单管理',
-					icon: 'list-dot',
+					imgUrl: '../../static/images/repairsImg/management.png',
+					imgUrlActive: '../../static/images/repairsImg/management-active.png',
 					show: 'management'
 				},
 				{
-					text: '待分配单',
-					icon: 'clock',
-					show: 'waitAllot'
-				},
-				{
-					text: '接单池',
-					icon: 'order',
-					show: 'order'
+					text: '待处理池',
+					imgUrl: '../../static/images/repairsImg/myRepairs.png',
+					imgUrlActive: '../../static/images/repairsImg/myRepairs-active.png',
+					show: 'pending'
 				}
+				// {
+				// 	text: '待分配单',
+				// 	icon: 'clock',
+				// 	show: 'waitAllot'
+				// },
+				// {
+				// 	text: '接单池',
+				// 	icon: 'order',
+				// 	show: 'order'
+				// }
 			],
 			// 后勤路由
 			logisticsList: [

+ 189 - 31
pagesRepairs/home/home.vue

@@ -1,11 +1,36 @@
 <template>
 	<view class="container">
-		<view class="">首页</view>
-		<view class="charts">
-			<qiun-data-charts type="bar" :opts="opts" :chartData="chartData" />
+		<view class="top_bg"></view>
+
+		<!-- 状态统计区域 -->
+		<view class="top_types">
+			<view class="types_box">
+				<view class="box_num">100</view>
+				<view class="box_info">工单数</view>
+			</view>
+
+			<view class="types_box">
+				<view class="box_num">10</view>
+				<view class="box_info">处理中</view>
+			</view>
+			<view class="types_box">
+				<view class="box_num">50</view>
+				<view class="box_info">已完成</view>
+			</view>
+			<view class="types_box">
+				<view class="box_num">60</view>
+				<view class="box_info">已超时</view>
+			</view>
 		</view>
-		<view class="table">
-			<uni-table border stripe emptyText="暂无更多数据">
+
+		<!-- 排班区域 -->
+		<view class="watch">
+			<view class="watch_title">
+				<img src="../../static/images/repairsImg/watch.png" />
+				排班
+			</view>
+			<!-- 表格区域 -->
+			<uni-table stripe emptyText="暂无更多数据">
 				<!-- 表头行 -->
 				<uni-tr>
 					<uni-th width="50" align="center">姓名</uni-th>
@@ -15,40 +40,50 @@
 				</uni-tr>
 				<!-- 表格数据行 -->
 				<uni-tr v-for="(item, index) in tableData" :key="index">
-					<uni-td>{{ item.name }}</uni-td>
-					<uni-td>{{ item.type }}</uni-td>
-					<uni-td>{{ item.status }}</uni-td>
-					<uni-td>{{ item.work }}</uni-td>
+					<uni-td align="center">{{ item.name }}</uni-td>
+					<uni-td align="center">{{ item.type }}</uni-td>
+					<uni-td align="center">{{ item.status }}</uni-td>
+					<uni-td align="center">{{ item.work }}</uni-td>
 				</uni-tr>
 			</uni-table>
 		</view>
 
-		<view class="more"></view>
+		<!-- 排行榜区域 -->
+		<view class="rank">
+			<view class="rank_title">
+				<img src="../../static/images/repairsImg/rank.png" />
+				工单完成排行榜
+			</view>
+			<!-- 排行榜柱状图 -->
+			<view class="rank_charts">
+				<qiun-data-charts type="bar" :opts="opts" :chartData="chartData" />
+			</view>
+		</view>
 
 		<!-- 悬浮按钮区域 -->
-		<FloatButton />
+		<view class="fixed">
+			<img src="../../static/images/repairsImg/add.png" />
+			<uni-badge :offset="[5, 5]" absolute="rightTop" text="8">
+				<img class="img" src="../../static/images/repairsImg/message.png" @click="handleGoMsg" />
+			</uni-badge>
+		</view>
 	</view>
 </template>
 
 <script>
-import FloatButton from '../components/floatButton.vue'
-
 export default {
-	components: {
-		FloatButton
-	},
 	data() {
 		return {
 			chartData: {
-				categories: ['张三', '李四', '王五', '老六', '刘八', '钱七'],
+				categories: ['张三', '李四', '王五', '老六', '刘八'],
 				series: [
 					{
 						name: '好评数',
-						data: [35, 36, 31, 33, 13, 34]
+						data: [35, 36, 31, 33, 13]
 					},
 					{
 						name: '完成数',
-						data: [18, 27, 21, 24, 6, 28]
+						data: [18, 27, 21, 24, 6]
 					}
 				]
 			},
@@ -68,7 +103,7 @@ export default {
 				extra: {
 					bar: {
 						type: 'group',
-						width: 30,
+						width: 15,
 						meterBorde: 1,
 						meterFillColor: '#FFFFFF',
 						activeBgColor: '#000000',
@@ -92,12 +127,42 @@ export default {
 					type: '泥工',
 					status: 0,
 					work: 0
+				},
+				{
+					name: '张三',
+					type: '电工',
+					status: 0,
+					work: 0
+				},
+				{
+					name: '张三三',
+					type: '泥工',
+					status: 0,
+					work: 0
+				},
+				{
+					name: '张三',
+					type: '电工',
+					status: 0,
+					work: 0
+				},
+				{
+					name: '张三三',
+					type: '泥工',
+					status: 0,
+					work: 0
 				}
 			]
 		}
 	},
 	mounted() {},
-	methods: {}
+	methods: {
+		handleGoMsg() {
+			uni.navigateTo({
+				url: '/pagesRepairs/message/message'
+			})
+		}
+	}
 }
 </script>
 
@@ -105,21 +170,114 @@ export default {
 .container {
 	width: 100vw;
 	height: calc(100vh - 102rpx);
-	background-color: salmon;
+	overflow-y: auto;
 
-	.charts {
-		width: 100%;
-		height: 600rpx;
+	.top_bg {
+		height: 165rpx;
+		background-color: #6fb6b8;
 	}
-	.table {
+
+	.top_types {
+		display: flex;
+		justify-content: space-evenly;
 		margin: auto;
-		width: 90%;
-		color: #000;
+		margin-top: -100rpx;
+		width: 690rpx;
+		height: 188rpx;
+		border-radius: 10rpx;
+		box-shadow: 0px 0px 4rpx rgba(0, 0, 0, 0.25);
+		background-color: #fff;
+
+		.types_box {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
+			.box_num {
+				font-size: 46rpx;
+				color: #ff5733;
+			}
+			.box_info {
+				margin-top: 10rpx;
+				font-size: 34rpx;
+			}
+		}
+	}
+
+	.watch {
+		box-sizing: border-box;
+		margin: 20rpx auto;
+		padding: 0 30rpx;
+		width: 690rpx;
+		border-radius: 10rpx;
+		box-shadow: 0px 0px 4rpx rgba(0, 0, 0, 0.25);
+
+		.watch_title {
+			display: flex;
+			align-items: center;
+			height: 95rpx;
+			font-size: 36rpx;
+			border-bottom: 1rpx solid #e6e6e6;
+
+			img {
+				margin-right: 14rpx;
+				width: 44rpx;
+				height: 44rpx;
+			}
+		}
 	}
 
-	.more {
-		height: 600rpx;
-		background-color: skyblue;
+	.rank {
+		box-sizing: border-box;
+		margin: 0 auto 100rpx;
+		padding: 0 30rpx;
+		width: 690rpx;
+		border-radius: 10rpx;
+		box-shadow: 0px 0px 4rpx rgba(0, 0, 0, 0.25);
+
+		.rank_title {
+			display: flex;
+			align-items: center;
+			height: 95rpx;
+			font-size: 36rpx;
+			border-bottom: 1rpx solid #e6e6e6;
+
+			img {
+				margin-right: 14rpx;
+				width: 41rpx;
+				height: 41rpx;
+			}
+		}
+
+		.rank_charts {
+			height: 650rpx;
+		}
+	}
+
+	.fixed {
+		z-index: 2;
+		position: fixed;
+		right: 0;
+		bottom: 155rpx;
+		display: flex;
+		justify-content: space-evenly;
+		align-items: center;
+		width: 252rpx;
+		height: 123rpx;
+		border-radius: 150rpx 0 0 150rpx;
+		box-shadow: 0px 0px 7rpx rgba(0, 0, 0, 0.15);
+		background-color: #fff;
+
+		img {
+			width: 76rpx;
+			height: 76rpx;
+		}
+
+		.img {
+			width: 88rpx;
+			height: 88rpx;
+		}
 	}
 }
 </style>

+ 471 - 8
pagesRepairs/management/management.vue

@@ -1,18 +1,224 @@
 <template>
 	<view class="container">
-		<view class="">工单管理</view>
-		<Recording />
+		<view class="top_bg"></view>
+
+		<!-- 状态统计区域 -->
+		<view class="top_types">
+			<view class="types_box">
+				<view class="box_num">100</view>
+				<view class="box_info">待接单</view>
+			</view>
+
+			<view class="types_box">
+				<view class="box_num">10</view>
+				<view class="box_info">维修中</view>
+			</view>
+			<view class="types_box">
+				<view class="box_num">50</view>
+				<view class="box_info">已超时</view>
+			</view>
+			<view class="types_box">
+				<view class="box_num">60</view>
+				<view class="box_info">待审核</view>
+			</view>
+		</view>
+
+		<!-- 订单列表区域 -->
+		<view class="body">
+			<!-- 每一个订单区域 -->
+			<view class="body_item" v-for="item in dataList" :key="item.id">
+				<!-- 工单编号 -->
+				<view class="item_title">
+					<img src="../../static/images/repairsImg/order.png" />
+					<view class="title_info">工单编号:{{ item.order }}</view>
+					<view class="title_type" v-if="item.overtime">超时未接</view>
+				</view>
+				<!-- 报修时间 -->
+				<view class="item_time">
+					<view class="time_msg">
+						报修时间:
+						<text>{{ item.time }}</text>
+					</view>
+					<view class="time_type" v-if="item.type === 1">待接单</view>
+					<view class="time_type color_type" v-if="item.type === 2">维修中</view>
+
+					<view class="time_type color_type2" v-if="item.type === 3">待审核</view>
+				</view>
+
+				<!-- 报修姓名 -->
+				<view class="item_box">
+					<view class="box_key">报修姓名:</view>
+					<view class="box_value">{{ item.name }}</view>
+				</view>
+
+				<!-- 报修电话 -->
+				<view class="item_box">
+					<view class="box_key">报修电话:</view>
+					<view class="box_value phone">
+						{{ item.phone }}
+						<img src="../../static/images/repairsImg/phone.png" />
+					</view>
+				</view>
+
+				<!-- 报修区域 -->
+				<view class="item_box">
+					<view class="box_key">报修区域:</view>
+					<view class="box_value">{{ item.area }}</view>
+				</view>
+
+				<!-- 详细地址 -->
+				<view class="item_box">
+					<view class="box_key">详细地址:</view>
+					<view class="box_value">{{ item.address }}</view>
+				</view>
+
+				<!-- 报修物品 -->
+				<view class="item_box">
+					<view class="box_key">报修物品:</view>
+					<view class="box_value">{{ item.goods }}</view>
+				</view>
+
+				<!-- 故障描述 -->
+				<view class="item_box">
+					<view class="box_key">故障描述:</view>
+					<view class="box_value">{{ item.description }}</view>
+				</view>
+
+				<!-- 上传图片 -->
+				<view class="item_img">
+					<view class="img_key">上传图片:</view>
+					<view class="img_value"></view>
+				</view>
+
+				<!-- 维修师傅 -->
+				<view class="item_time" v-if="item.type === 2 || item.type === 3">
+					<view class="time_msg">
+						维修师傅:
+						<text>{{ item.workerName }}</text>
+					</view>
+				</view>
+
+				<!-- 师傅电话 -->
+				<view class="item_box" v-if="item.type === 2 || item.type === 3">
+					<view class="box_key">师傅电话:</view>
+					<view class="box_value phone">
+						{{ item.workerPhone }}
+						<img src="../../static/images/repairsImg/phone.png" />
+					</view>
+				</view>
+
+				<!-- 维修费用 -->
+				<view class="item_box" v-if="item.type === 3">
+					<view class="box_key">维修费用:</view>
+					<view class="box_value2 phone" @click="checkFeeDetail">
+						{{ item.money }}元
+						<img src="../../static/images/repairsImg/eye.png" />
+					</view>
+				</view>
+
+				<!-- 按钮区域 -->
+				<view class="item_btn" v-if="item.type !== 3">
+					<img v-if="item.type !== 3" src="../../static/images/repairsImg/close.png" @click="handleClose" />
+					<img class="img" src="../../static/images/repairsImg/help.png" v-if="item.type === 1" />
+					<view class="btn_box type" v-if="item.type === 1">接单</view>
+					<view class="btn_box type2" v-if="item.type === 1">转单</view>
+					<view class="btn_box type" v-if="item.type === 2" @click="handleOffer">报价</view>
+					<view class="btn_box type2" v-if="item.type === 2" @click="handleFinish">维修完成</view>
+				</view>
+				<view class="item_btn2" v-else></view>
+
+				<!-- 关闭按钮弹窗 -->
+				<uni-popup ref="popup_close" :is-mask-click="false">
+					<view class="popup_close">
+						<view :class="{ active: activeIndex === 1 }" class="close_box radius" @click="handleChangeItem(1)">重复报单</view>
+						<view :class="{ active: activeIndex === 2 }" class="close_box" @click="handleChangeItem(2)">不属于维修范围</view>
+						<view :class="{ active: activeIndex === 3 }" class="close_box" @click="handleChangeItem(3)">已维修完成</view>
+						<view class="close_btn">
+							<view class="btn_box cancel" @click="$refs.popup_close[0].close()">取消</view>
+							<view class="btn_box confirm" @click="$refs.popup_close[0].close()">确定</view>
+						</view>
+					</view>
+				</uni-popup>
+			</view>
+		</view>
 	</view>
 </template>
 
 <script>
-import Recording from '../components/recording.vue'
 export default {
-	components: {
-		Recording
-	},
 	data() {
-		return {}
+		return {
+			activeIndex: 1,
+			// type为 1 是 待接单,type为 2 是维修中,
+			// type为 3 是 待审核
+			dataList: [
+				{
+					id: 1,
+					order: '656262219626262',
+					overtime: true,
+					time: '2023.07.05  09:25:26',
+					type: 1,
+					name: '张三',
+					phone: '13659585689',
+					area: '行政楼',
+					address: '3楼309',
+					goods: '电脑',
+					description: '水龙头坏了',
+					img: ''
+				},
+				{
+					id: 2,
+					order: '956262219626262',
+					overtime: false,
+					time: '2023.07.05  09:25:26',
+					type: 2,
+					name: '李四',
+					phone: '13659585689',
+					area: '行政楼',
+					address: '3楼309',
+					goods: '电脑',
+					description: '电脑坏了',
+					img: '',
+					workerName: '老张',
+					workerPhone: '13659585689'
+				},
+				{
+					id: 3,
+					order: '956262219626262',
+					overtime: false,
+					time: '2023.07.05  09:25:26',
+					type: 3,
+					name: '李四',
+					phone: '13659585689',
+					area: '行政楼',
+					address: '3楼309',
+					goods: '电脑',
+					description: '电脑坏了',
+					img: '',
+					workerName: '老张',
+					workerPhone: '13659585689',
+					money: 50
+				}
+			]
+		}
+	},
+	methods: {
+		handleClose() {
+			this.$refs.popup_close[0].open('center')
+		},
+		handleChangeItem(val) {
+			this.activeIndex = val
+		},
+		handleOffer() {
+			uni.navigateTo({
+				url: '/pagesRepairs/offer/offer'
+			})
+		},
+		handleFinish() {
+			uni.navigateTo({
+				url: '/pagesRepairs/repairRecord/repairRecord'
+			})
+		}
 	}
 }
 </script>
@@ -21,6 +227,263 @@ export default {
 .container {
 	width: 100vw;
 	height: calc(100vh - 102rpx);
-	background-color: salmon;
+
+	.top_bg {
+		height: 165rpx;
+		background-color: #6fb6b8;
+	}
+
+	.top_types {
+		display: flex;
+		justify-content: space-evenly;
+		margin: auto;
+		margin-top: -100rpx;
+		width: 690rpx;
+		height: 188rpx;
+		border-radius: 10rpx;
+		box-shadow: 0px 0px 4rpx rgba(0, 0, 0, 0.25);
+		background-color: #fff;
+
+		.types_box {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
+			.box_num {
+				font-size: 46rpx;
+				color: #ff5733;
+			}
+			.box_info {
+				margin-top: 10rpx;
+				font-size: 34rpx;
+			}
+		}
+	}
+
+	.body {
+		box-sizing: border-box;
+		padding: 0 30rpx 30rpx 30rpx;
+		height: calc(100vh - 355rpx);
+		overflow-y: auto;
+
+		.body_item {
+			margin-top: 20rpx;
+			border-radius: 11rpx;
+			box-shadow: 0 0 8rpx #d9d9d9;
+
+			.item_title {
+				display: flex;
+				align-items: center;
+				padding: 0 30rpx;
+				height: 87rpx;
+				border-bottom: 1rpx solid #e6e6e6;
+
+				img {
+					width: 30rpx;
+					height: 30rpx;
+				}
+
+				.title_info {
+					margin: 0 21rpx 0 13rpx;
+					font-size: 28rpx;
+				}
+
+				.title_type {
+					width: 137rpx;
+					height: 47rpx;
+					line-height: 47rpx;
+					text-align: center;
+					border-radius: 136rpx;
+					color: #ff5733;
+					font-size: 24rpx;
+					border: 1rpx solid #ff5733;
+				}
+			}
+
+			.item_time {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				padding: 0 30rpx;
+				height: 79rpx;
+
+				.time_msg {
+					font-size: 28rpx;
+					color: #808080;
+
+					text {
+						color: #000000;
+					}
+				}
+
+				.time_type {
+					font-size: 32rpx;
+					color: #ff5733;
+				}
+
+				.color_type {
+					color: #1e7dfb;
+				}
+				.color_type2 {
+					color: #d43030;
+				}
+			}
+
+			.item_box {
+				display: flex;
+				padding: 0 30rpx;
+				height: 60rpx;
+				font-size: 28rpx;
+
+				.box_key {
+					color: #808080;
+				}
+
+				.box_value {
+					display: flex;
+
+					img {
+						margin-top: 5rpx;
+						margin-left: 10rpx;
+						width: 28rpx;
+						height: 28rpx;
+					}
+				}
+
+				.box_value2 {
+					display: flex;
+
+					img {
+						margin-top: -2rpx;
+						margin-left: 14rpx;
+						width: 46rpx;
+						height: 46rpx;
+					}
+				}
+
+				.phone {
+					color: #6fb6b8;
+				}
+			}
+
+			.item_img {
+				display: flex;
+				align-items: center;
+				padding: 0 30rpx;
+				height: 120rpx;
+				color: #808080;
+				font-size: 28rpx;
+
+				.img_key {
+				}
+
+				.img_value {
+					width: 120rpx;
+					height: 120rpx;
+					border-radius: 14rpx;
+					background-color: salmon;
+				}
+			}
+
+			.item_btn {
+				display: flex;
+				align-items: center;
+				justify-content: flex-end;
+				padding: 0 30rpx;
+				height: 153rpx;
+
+				img {
+					margin-right: auto;
+					width: 56rpx;
+					height: 56rpx;
+				}
+
+				.img {
+					margin-right: auto;
+					margin-left: -55rpx;
+					width: 62rpx;
+					height: 62rpx;
+				}
+
+				.btn_box {
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					margin-left: 16rpx;
+					width: 174rpx;
+					height: 68rpx;
+					font-size: 28rpx;
+					border-radius: 11rpx;
+				}
+
+				.type {
+					color: #fff;
+					background-color: #6fb6b8;
+				}
+
+				.type2 {
+					color: #6fb6b8;
+					background-color: #fff;
+					border: 1rpx solid #6fb6b8;
+				}
+			}
+
+			.item_btn2 {
+				height: 50rpx;
+			}
+
+			.popup_close {
+				width: 690rpx;
+				border-radius: 19rpx;
+				background-color: #fff;
+
+				.close_box {
+					height: 100rpx;
+					line-height: 100rpx;
+					text-align: center;
+					font-size: 32rpx;
+					border: 1rpx solid #e6e6e6;
+				}
+
+				.radius {
+					border-radius: 19rpx 19rpx 0 0;
+				}
+
+				.active {
+					color: #fff;
+					background-color: #6fb6b8;
+				}
+
+				.close_btn {
+					display: flex;
+					align-items: center;
+					justify-content: space-evenly;
+					margin-top: 100rpx;
+					height: 121rpx;
+
+					.btn_box {
+						display: flex;
+						justify-content: center;
+						align-items: center;
+						width: 203rpx;
+						height: 72rpx;
+						border-radius: 9rpx;
+						font-size: 32rpx;
+					}
+
+					.cancel {
+						background-color: #e5e5e5;
+						color: #6fb6b8;
+					}
+
+					.confirm {
+						background-color: #6fb6b8;
+						color: #fff;
+					}
+				}
+			}
+		}
+	}
 }
 </style>

+ 4 - 3
pagesRepairs/myRepairs/myRepairs.vue

@@ -10,7 +10,7 @@
 			<!-- 每一个记录区域 -->
 			<view class="body_item" v-for="item in list" :key="item.id">
 				<!-- 工单编号 -->
-				<view class="item_title" @click="handleLookDetail">
+				<view class="item_title" @click="handleLookDetail(item)">
 					<img src="../../static/images/repairsImg/order.png" />
 					<view class="title_info">工单编号:{{ item.order }}</view>
 					<view class="title_type" v-if="item.overtime">超时未接</view>
@@ -279,9 +279,10 @@ export default {
 				url: '/pagesRepairs/evaluate/evaluate'
 			})
 		},
-		handleLookDetail() {
+		handleLookDetail(item) {
+			const detailInfo = JSON.stringify(item)
 			uni.navigateTo({
-				url: '/pagesRepairs/repairDetails/repairDetails'
+				url: `/pagesRepairs/repairDetails/repairDetails?detailInfo=${detailInfo}`
 			})
 		}
 	}

+ 179 - 0
pagesRepairs/offer/offer.vue

@@ -0,0 +1,179 @@
+<template>
+	<view class="container">
+		<view class="title">关联耗材</view>
+
+		<!-- 每一个耗材盒子区域 -->
+		<view class="detail_box">
+			<view class="detail_box_item">
+				<view class="item_key">耗材名称</view>
+				<view class="item_value">螺丝钉</view>
+			</view>
+			<view class="detail_box_item">
+				<view class="item_key">耗材数量</view>
+				<view class="item_value">
+					<uni-number-box v-model="count" :min="0" @change="bindChange"></uni-number-box>
+				</view>
+			</view>
+			<view class="detail_box_item">
+				<view class="item_key">耗材单价</view>
+				<view class="item_value">0.5</view>
+			</view>
+		</view>
+
+		<!-- 添加耗材区域 -->
+		<view class="add" @click="handleAdd">
+			<text>+</text>
+			添加耗材
+		</view>
+
+		<!-- 合计费用区域 -->
+		<view class="total">
+			<view>合计费用</view>
+			<view>10元</view>
+		</view>
+
+		<view class="title">维修师傅</view>
+
+		<view class="box">
+			<img src="../../static/images/repairsImg/people.png" />
+			张三
+		</view>
+
+		<view class="title2">手机</view>
+
+		<view class="box">
+			<img src="../../static/images/repairsImg/phone2.png" />
+			13659854589
+		</view>
+
+		<view class="btn">确认提交</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			count: 3
+		}
+	},
+	methods: {
+		bindChange(val) {
+			console.log(val)
+		},
+		handleAdd() {
+			uni.navigateTo({
+				url: '/pagesRepairs/addGoods/addGoods'
+			})
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.container {
+	box-sizing: border-box;
+	padding: 0 30rpx;
+	width: 100vw;
+	height: 100vh;
+	overflow-y: auto;
+
+	.title {
+		height: 109rpx;
+		line-height: 109rpx;
+		font-size: 36rpx;
+		font-weight: bold;
+	}
+
+	.detail_box {
+		box-sizing: border-box;
+		margin-bottom: 46rpx;
+		padding: 5rpx 30rpx 0;
+		width: 690rpx;
+		height: 284rpx;
+		border-radius: 9rpx;
+		box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.25);
+
+		.detail_box_item {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			height: 92rpx;
+			font-size: 32rpx;
+			border-bottom: 1rpx solid #e5e5e5;
+
+			.item_key {
+				width: 150rpx;
+				color: #808080;
+			}
+
+			.item_value {
+				font-weight: bold;
+			}
+		}
+	}
+
+	.add {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		width: 690rpx;
+		height: 90rpx;
+		color: #6fb6b8;
+		font-size: 32rpx;
+		border-radius: 9rpx;
+		background-color: #ebf2f2;
+
+		text {
+			margin-right: 10rpx;
+			font-size: 48rpx;
+		}
+	}
+
+	.total {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		margin: auto;
+		width: 622rpx;
+		height: 100rpx;
+		font-size: 32rpx;
+		font-weight: bold;
+		border-bottom: 1rpx solid #e5e5e5;
+	}
+
+	.box {
+		display: flex;
+		align-items: center;
+		height: 94rpx;
+		font-size: 32rpx;
+		border-radius: 10rpx;
+		border: 1rpx solid #cccccc;
+
+		img {
+			margin: 0 14rpx 0 30rpx;
+			width: 40rpx;
+			height: 40rpx;
+		}
+	}
+
+	.title2 {
+		height: 126rpx;
+		line-height: 126rpx;
+		font-size: 36rpx;
+		font-weight: bold;
+	}
+
+	.btn {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		margin: 194rpx 0 60rpx;
+		height: 100rpx;
+		color: #fff;
+		font-size: 32rpx;
+		border-radius: 12rpx;
+		background-color: #6fb6b8;
+	}
+}
+</style>

+ 19 - 14
pagesRepairs/repairDetails/repairDetails.vue

@@ -3,47 +3,47 @@
 		<view class="title">工单信息</view>
 		<view class="box">
 			<view class="box_key">工单编号:</view>
-			<view class="box_value">656262219626262</view>
+			<view class="box_value">{{ detailInfo.order }}</view>
 		</view>
 		<view class="box_time">
 			<view class="time_msg">
 				报修时间:
-				<text>2023.07.05 09:25:26</text>
+				<text>{{ detailInfo.time }}</text>
 			</view>
-			<!-- v-if="item.type === 1" -->
-			<view class="time_type">待接单</view>
-			<!-- <view class="time_type color_type" v-if="item.type === 2">维修中</view>
-			<view class="time_type" v-if="item.type === 3">待确认</view>
-			<view class="time_type color_type2" v-if="item.type === 4">已完成</view>
-			<view class="time_type" v-if="item.type === 5">已取消</view> -->
+
+			<view class="time_type" v-if="detailInfo.type === 1">待接单</view>
+			<view class="time_type color_type" v-if="detailInfo.type === 2">维修中</view>
+			<view class="time_type" v-if="detailInfo.type === 3">待确认</view>
+			<view class="time_type color_type2" v-if="detailInfo.type === 4">已完成</view>
+			<view class="time_type" v-if="detailInfo.type === 5">已取消</view>
 		</view>
 
 		<view class="box">
 			<view class="box_key">报修姓名:</view>
-			<view class="box_value">张三</view>
+			<view class="box_value">{{ detailInfo.name }}</view>
 		</view>
 		<view class="box">
 			<view class="box_key">报修电话:</view>
 			<view class="box_value phone">
-				13659585689
+				{{ detailInfo.phone }}
 				<img src="../../static/images/repairsImg/phone.png" />
 			</view>
 		</view>
 		<view class="box">
 			<view class="box_key">报修区域:</view>
-			<view class="box_value">行政楼</view>
+			<view class="box_value">{{ detailInfo.area }}</view>
 		</view>
 		<view class="box">
 			<view class="box_key">详细地址:</view>
-			<view class="box_value">3楼309</view>
+			<view class="box_value">{{ detailInfo.address }}</view>
 		</view>
 		<view class="box">
 			<view class="box_key">报修物品:</view>
-			<view class="box_value">电脑</view>
+			<view class="box_value">{{ detailInfo.goods }}</view>
 		</view>
 		<view class="box">
 			<view class="box_key">故障描述:</view>
-			<view class="box_value">水龙头坏了</view>
+			<view class="box_value">{{ detailInfo.description }}</view>
 		</view>
 
 		<view class="box_img">
@@ -72,6 +72,7 @@
 export default {
 	data() {
 		return {
+			detailInfo: {},
 			customStyle: {
 				marginBottom: '5px'
 			},
@@ -108,6 +109,10 @@ export default {
 				}
 			]
 		}
+	},
+	onLoad(options) {
+		this.detailInfo = JSON.parse(options.detailInfo)
+		// console.log(this.detailInfo)
 	}
 }
 </script>

+ 182 - 0
pagesRepairs/repairRecord/repairRecord.vue

@@ -0,0 +1,182 @@
+<template>
+	<view class="container">
+		<view class="title">维修日期</view>
+		<uni-datetime-picker placeholder="请选择日期" type="date" v-model="single" />
+		<view class="title">维修内容</view>
+		<view class="textarea">
+			<textarea placeholder-style="color:#CCCCCC" placeholder="请输入维修内容"></textarea>
+		</view>
+		<view class="title">维修结果</view>
+
+		<!-- 录音区域 -->
+		<view class="voice">
+			<view class="voice_box">
+				<img src="../../static/images/repairsImg/voice.png" />
+			</view>
+			点击录音
+		</view>
+
+		<view class="title">关联耗材</view>
+
+		<!-- 每一个耗材盒子区域 -->
+		<view class="detail_box">
+			<view class="detail_box_item">
+				<view class="item_key">耗材名称</view>
+				<view class="item_value">螺丝钉</view>
+			</view>
+			<view class="detail_box_item">
+				<view class="item_key">耗材数量</view>
+				<view class="item_value">
+					<uni-number-box v-model="count" :min="0" @change="bindChange"></uni-number-box>
+				</view>
+			</view>
+			<view class="detail_box_item">
+				<view class="item_key">耗材单价</view>
+				<view class="item_value">0.5</view>
+			</view>
+		</view>
+
+		<!-- 添加耗材区域 -->
+		<view class="add" @click="handleAdd">
+			<text>+</text>
+			添加耗材
+		</view>
+
+		<!-- 合计费用区域 -->
+		<view class="total">
+			<view>合计费用</view>
+			<view>10元</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			single: '',
+			count: 6
+		}
+	},
+	methods: {
+		bindChange() {},
+		handleAdd() {
+			uni.navigateTo({
+				url: '/pagesRepairs/addGoods/addGoods'
+			})
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.container {
+	box-sizing: border-box;
+	padding: 0 30rpx;
+	overflow-y: auto;
+
+	.title {
+		display: flex;
+		align-items: center;
+		height: 107rpx;
+		font-size: 36rpx;
+		font-weight: bold;
+	}
+
+	.textarea {
+		height: 310rpx;
+		border-radius: 10rpx;
+		border: 1rpx solid #cccccc;
+
+		textarea {
+			box-sizing: border-box;
+			padding: 25rpx 35rpx;
+			width: 100%;
+			font-size: 32rpx;
+		}
+	}
+
+	.voice {
+		display: flex;
+		align-items: center;
+		height: 94rpx;
+		font-size: 32rpx;
+		color: #cccccc;
+		border-radius: 10rpx;
+		border: 1rpx solid #cccccc;
+
+		.voice_box {
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			margin: 0 38rpx 0 33rpx;
+			width: 101rpx;
+			height: 47rpx;
+			border-radius: 33rpx;
+			box-shadow: 0px 0px 4rpx rgba(0, 0, 0, 0.25);
+
+			img {
+				width: 33rpx;
+				height: 33rpx;
+			}
+		}
+	}
+
+	.detail_box {
+		box-sizing: border-box;
+		margin-bottom: 46rpx;
+		padding: 5rpx 30rpx 0;
+		width: 690rpx;
+		height: 284rpx;
+		border-radius: 9rpx;
+		box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.25);
+
+		.detail_box_item {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			height: 92rpx;
+			font-size: 32rpx;
+			border-bottom: 1rpx solid #e5e5e5;
+
+			.item_key {
+				width: 150rpx;
+				color: #808080;
+			}
+
+			.item_value {
+				font-weight: bold;
+			}
+		}
+	}
+
+	.add {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		width: 690rpx;
+		height: 90rpx;
+		color: #6fb6b8;
+		font-size: 32rpx;
+		border-radius: 9rpx;
+		background-color: #ebf2f2;
+
+		text {
+			margin-right: 10rpx;
+			font-size: 48rpx;
+		}
+	}
+
+	.total {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		margin: auto;
+		width: 622rpx;
+		height: 100rpx;
+		font-size: 32rpx;
+		font-weight: bold;
+		border-bottom: 1rpx solid #e5e5e5;
+	}
+}
+</style>

BIN
static/images/repairsImg/add.png


BIN
static/images/repairsImg/close.png


BIN
static/images/repairsImg/help.png


BIN
static/images/repairsImg/home-active.png


BIN
static/images/repairsImg/home.png


BIN
static/images/repairsImg/management-active.png


BIN
static/images/repairsImg/management.png


BIN
static/images/repairsImg/message.png


BIN
static/images/repairsImg/people.png


BIN
static/images/repairsImg/phone2.png


BIN
static/images/repairsImg/rank.png


BIN
static/images/repairsImg/search.png


BIN
static/images/repairsImg/watch.png


+ 29 - 0
uni_modules/uni-number-box/changelog.md

@@ -0,0 +1,29 @@
+## 1.2.3(2023-05-23)
+更新示例工程
+## 1.2.2(2023-05-08)
+- 修复 change 事件执行顺序错误的问题
+## 1.2.1(2021-11-22)
+- 修复 vue3中某些scss变量无法找到的问题
+## 1.2.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-number-box](https://uniapp.dcloud.io/component/uniui/uni-number-box)
+## 1.1.2(2021-11-09) 
+- 新增 提供组件设计资源,组件样式调整
+## 1.1.1(2021-07-30)
+- 优化 vue3下事件警告的问题
+## 1.1.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.0.7(2021-05-12)
+- 新增 组件示例地址
+## 1.0.6(2021-04-20)
+- 修复 uni-number-box 浮点数运算不精确的 bug
+- 修复 uni-number-box change 事件触发不正确的 bug
+- 新增 uni-number-box v-model 双向绑定
+## 1.0.5(2021-02-05)
+- 调整为uni_modules目录规范
+
+## 1.0.7(2021-02-05)
+- 调整为uni_modules目录规范
+- 新增 支持 v-model
+- 新增 支持 focus、blur 事件
+- 新增 支持 PC 端

+ 221 - 0
uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue

@@ -0,0 +1,221 @@
+<template>
+	<view class="uni-numbox">
+		<view @click="_calcValue('minus')" class="uni-numbox__minus uni-numbox-btns" :style="{background}">
+			<text class="uni-numbox--text" :class="{ 'uni-numbox--disabled': inputValue <= min || disabled }" :style="{color}">-</text>
+		</view>
+		<input :disabled="disabled" @focus="_onFocus" @blur="_onBlur" class="uni-numbox__value" type="number"
+			v-model="inputValue" :style="{background, color}" />
+		<view @click="_calcValue('plus')" class="uni-numbox__plus uni-numbox-btns" :style="{background}">
+			<text class="uni-numbox--text" :class="{ 'uni-numbox--disabled': inputValue >= max || disabled }" :style="{color}">+</text>
+		</view>
+	</view>
+</template>
+<script>
+	/**
+	 * NumberBox 数字输入框
+	 * @description 带加减按钮的数字输入框
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=31
+	 * @property {Number} value 输入框当前值
+	 * @property {Number} min 最小值
+	 * @property {Number} max 最大值
+	 * @property {Number} step 每次点击改变的间隔大小
+	 * @property {String} background 背景色
+	 * @property {String} color 字体颜色(前景色)
+	 * @property {Boolean} disabled = [true|false] 是否为禁用状态
+	 * @event {Function} change 输入框值改变时触发的事件,参数为输入框当前的 value
+	 * @event {Function} focus 输入框聚焦时触发的事件,参数为 event 对象
+	 * @event {Function} blur 输入框失焦时触发的事件,参数为 event 对象
+	 */
+
+	export default {
+		name: "UniNumberBox",
+		emits: ['change', 'input', 'update:modelValue', 'blur', 'focus'],
+		props: {
+			value: {
+				type: [Number, String],
+				default: 1
+			},
+			modelValue: {
+				type: [Number, String],
+				default: 1
+			},
+			min: {
+				type: Number,
+				default: 0
+			},
+			max: {
+				type: Number,
+				default: 100
+			},
+			step: {
+				type: Number,
+				default: 1
+			},
+			background: {
+				type: String,
+				default: '#f5f5f5'
+			},
+			color: {
+				type: String,
+				default: '#333'
+			},
+			disabled: {
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+				inputValue: 0
+			};
+		},
+		watch: {
+			value(val) {
+				this.inputValue = +val;
+			},
+			modelValue(val) {
+				this.inputValue = +val;
+			}
+		},
+		created() {
+			if (this.value === 1) {
+				this.inputValue = +this.modelValue;
+			}
+			if (this.modelValue === 1) {
+				this.inputValue = +this.value;
+			}
+		},
+		methods: {
+			_calcValue(type) {
+				if (this.disabled) {
+					return;
+				}
+				const scale = this._getDecimalScale();
+				let value = this.inputValue * scale;
+				let step = this.step * scale;
+				if (type === "minus") {
+					value -= step;
+					if (value < (this.min * scale)) {
+						return;
+					}
+					if (value > (this.max * scale)) {
+						value = this.max * scale
+					}
+				}
+
+				if (type === "plus") {
+					value += step;
+					if (value > (this.max * scale)) {
+						return;
+					}
+					if (value < (this.min * scale)) {
+						value = this.min * scale
+					}
+				}
+
+				this.inputValue = (value / scale).toFixed(String(scale).length - 1);
+				// TODO vue2 兼容
+				this.$emit("input", +this.inputValue);
+				// TODO vue3 兼容
+				this.$emit("update:modelValue", +this.inputValue);
+				this.$emit("change", +this.inputValue);
+			},
+			_getDecimalScale() {
+
+				let scale = 1;
+				// 浮点型
+				if (~~this.step !== this.step) {
+					scale = Math.pow(10, String(this.step).split(".")[1].length);
+				}
+				return scale;
+			},
+			_onBlur(event) {
+				this.$emit('blur', event)
+				let value = event.detail.value;
+				if (isNaN(value)) {
+					this.inputValue = this.min;
+					return;
+				}
+				value = +value;
+				if (value > this.max) {
+					value = this.max;
+				} else if (value < this.min) {
+					value = this.min;
+				}
+				const scale = this._getDecimalScale();
+				this.inputValue = value.toFixed(String(scale).length - 1);
+				this.$emit("input", +this.inputValue);
+				this.$emit("update:modelValue", +this.inputValue);
+				this.$emit("change", +this.inputValue);
+			},
+			_onFocus(event) {
+				this.$emit('focus', event)
+			}
+		}
+	};
+</script>
+<style lang="scss" >
+	$box-height: 26px;
+	$bg: #f5f5f5;
+	$br: 2px;
+	$color: #333;
+
+	.uni-numbox {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+	}
+
+	.uni-numbox-btns {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		align-items: center;
+		justify-content: center;
+		padding: 0 8px;
+		background-color: $bg;
+		/* #ifdef H5 */
+		cursor: pointer;
+		/* #endif */
+	}
+
+	.uni-numbox__value {
+		margin: 0 2px;
+		background-color: $bg;
+		width: 40px;
+		height: $box-height;
+		text-align: center;
+		font-size: 14px;
+		border-left-width: 0;
+		border-right-width: 0;
+		color: $color;
+	}
+
+	.uni-numbox__minus {
+		border-top-left-radius: $br;
+		border-bottom-left-radius: $br;
+	}
+
+	.uni-numbox__plus {
+		border-top-right-radius: $br;
+		border-bottom-right-radius: $br;
+	}
+
+	.uni-numbox--text {
+		// fix nvue
+		line-height: 20px;
+
+		font-size: 20px;
+		font-weight: 300;
+		color: $color;
+	}
+
+	.uni-numbox .uni-numbox--disabled {
+		color: #c0c0c0 !important;
+		/* #ifdef H5 */
+		cursor: not-allowed;
+		/* #endif */
+	}
+</style>

+ 82 - 0
uni_modules/uni-number-box/package.json

@@ -0,0 +1,82 @@
+{
+  "id": "uni-number-box",
+  "displayName": "uni-number-box 数字输入框",
+  "version": "1.2.3",
+  "description": "NumberBox 带加减按钮的数字输入框组件,用户可以控制每次点击增加的数值,支持小数。",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "数字输入框"
+],
+  "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"
+      },
+      "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"
+        }
+      }
+    }
+  }
+}

+ 13 - 0
uni_modules/uni-number-box/readme.md

@@ -0,0 +1,13 @@
+
+
+## NumberBox 数字输入框
+> **组件名:uni-number-box**
+> 代码块: `uNumberBox`
+
+
+带加减按钮的数字输入框。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-number-box)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
+
+