hi 4 days ago
parent
commit
572e60653f

+ 85 - 0
components/error-pop/error-pop.vue

@@ -0,0 +1,85 @@
+<template>
+	<view>
+		<u-popup :show="errorShow" :closeOnClickOverlay="false" @close="closeClick" mode="center" :round="10">
+			<view class="error-box">
+				<view class="flex_box flex_row_center">
+					<u-image src="@/static/image/error-img.png" width="112rpx" height="112rpx"></u-image>
+				</view>
+				<view class="tips-value">{{content}}</view>
+				<view class="btn-box">
+					<u-button class="no-btn" type="primary" :plain="true" text="否" @click="closeClick"></u-button>
+					<u-button class="yes-btn" type="primary" text="是" @click="confirmClick"></u-button>
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	export default{
+		props:{
+			value:{
+				type:Boolean,
+				default:false
+			},
+			content: {
+				type:String,
+				default:''
+			}
+		},
+		watch:{
+			value: {
+				handler(val) {
+					this.errorShow = val
+				},
+				immediate:true
+			}
+		},
+		data() {
+			return {
+				errorShow:false
+			}
+		},
+		methods:{
+			closeClick() {
+				this.$emit('close')
+			},
+			confirmClick() {
+				this.$emit('confirm')
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.error-box {
+	width: 580rpx;
+	padding: 48rpx 36rpx 48rpx;
+	.tips-value {
+		color: #1D212A;
+		font-family: "PingFang SC";
+		font-size: 32rpx;
+		font-style: normal;
+		font-weight: bold;
+		margin-top: 32rpx;
+	}
+	.btn-box {
+		display: flex;
+		justify-content: space-between;
+		margin-top: 60rpx;
+		.no-btn {
+			width: 244rpx;
+			border-radius: 16rpx;
+			border: 1px solid #BFC8DB;
+			color: #86909C;
+			font-size: 32rpx;
+		}
+		.yes-btn {
+			width: 244rpx;
+			border-radius: 16rpx;
+			background: #0256FF;
+			font-size: 32rpx;
+		}
+	}
+}
+</style>

+ 6 - 1
components/good-item/good-item.vue

@@ -1,5 +1,5 @@
 <template>
-	<view class="good-item">
+	<view class="good-item" @click="toDetail">
 		<view class="good-msg">
 			<u-image
 				:src="item.src"
@@ -53,6 +53,11 @@
 			return {
 				
 			}
+		},
+		methods:{
+			toDetail() {
+				this.$emit('toDetail')
+			}
 		}
 	}
 </script>

+ 276 - 0
components/goods-pop/goods-pop.vue

@@ -0,0 +1,276 @@
+<template>
+	<view>
+		<u-popup :show="goodsShow"  @close="closeClick" :round="10">
+			<view class="goods-box">
+				<view class="goods-head">
+					<view class="goods-type" @click="typeClick">
+						<view class="goods-type-text">{{typeName}}</view>
+						<u-icon name="arrow-down-fill" color="#999999" size="10"></u-icon>
+					</view>
+					<view class="search-box">
+						<u-search placeholder="分类/条码/名称查找" shape="square" v-model="searchKey" :showAction="false"></u-search>
+						<view class="scan-icon flex_box flex_row_center">
+							<image src="@/static/image/scan-icon-2.png" mode=""></image>
+						</view>
+					</view>
+				</view>
+				<view class="goods-cont">
+					<view class="goods-cont-left">
+						<scroll-view class="goods-scroll" scroll-y>
+							<view 
+								class="type-item" 
+								:class="item.id == typeId ? 'active-item':''" 
+								v-for="(item,i) in typeList" 
+								:key="i"
+								@click="chooseType(item)"
+							>
+								{{item.name}}
+							</view>
+						</scroll-view>
+					</view>
+					<view class="goods-cont-right">
+						<scroll-view class="goods-scroll" scroll-y>
+							<block v-for="(item,i) in goodsList" :key="i">
+								<good-item :item="item">
+									<view class="num-box">
+										<view class="num-box-text" v-if="type == 'caigou'">入库数量</view>
+										<view class="num-box-text" v-else>出库数量</view>
+										<u-number-box v-model="item.numberVal">
+											<view slot="minus" class="minus">
+												<u-icon name="minus" color="#0256FF" size="12"></u-icon>
+											</view>
+											<text slot="input" class="input">{{item.numberVal}}</text>
+											<view slot="plus" class="plus">
+												<u-icon name="plus" color="#FFFFFF" size="12"></u-icon>
+											</view>
+										</u-number-box>
+									</view>
+								</good-item>
+							</block>
+						</scroll-view>
+					</view>
+				</view>
+			</view>
+		</u-popup>
+		<u-picker class="picler-class" :show="typeShow" :defaultIndex="defaultIndex" :columns="columnsList" @confirm="pickerConfirm" @cancel="typeShow= false"></u-picker>
+	</view>
+</template>
+
+<script>
+	import goodItem from '@/components/good-item/good-item.vue'
+	export default{
+		components:{
+			goodItem
+		},
+		props:{
+			value:{
+				type:Boolean,
+				default:false
+			},
+			type:{
+				type:String,
+				default:''
+			}
+		},
+		data() {
+			return {
+				searchKey:'',
+				goodsShow:false,
+				defaultIndex:[],
+				typeName:'按分类展示',
+				columnsList:[
+					['按分类展示','按库位展示']
+				],
+				typeId:0,
+				typeList:[
+					{
+						name:'全部',
+						id:0
+					},
+					{
+						name:'饮料',
+						id:1
+					},
+					{
+						name:'食品',
+						id:2
+					}
+				],
+				goodsList: [
+					{
+						src: '',
+						name: '大童专用氨基酸洗发水',
+						numberVal:1,
+					}, {
+						src: '',
+						name: '大童专用氨基酸洗发水',
+						numberVal:4,
+					},{
+						src: '',
+						name: '大童专用氨基酸洗发水',
+						numberVal:0,
+					}
+				],
+				typeShow:false,
+			}
+		},
+		watch:{
+			value: {
+				handler(val) {
+					this.goodsShow = val
+				},
+				immediate:true
+			}
+		},
+		methods:{
+			closeClick() {
+				this.$emit('close')
+			},
+			confirmClick() {
+				this.$emit('confirm')
+			},
+			typeClick() {
+				let index = this.columnsList[0].findIndex(item=>item == this.typeName)
+				this.defaultIndex = [index]
+				this.typeShow = true
+			},
+			tabClick() {
+			
+			},
+			pickerConfirm(val) {
+				this.typeName = val.value[0]
+				this.typeShow = false
+			},
+			chooseType(item) {
+				this.typeId = item.id
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.goods-box {
+		margin-top: 24rpx;
+		.goods-head {
+			display: flex;
+			align-items: center;
+			.goods-type {
+				display: flex;
+				align-items: center;
+				padding-left: 24rpx;
+				height: 102rpx;
+				background-color: #fff;
+				flex-shrink: 0;
+				&-text {
+					color: #0256FF;
+					font-size: 28rpx;
+					font-weight: bold;
+					margin-right: 10rpx;
+				}
+			}
+		
+			.search-box {
+				background-color: rgba(191, 200, 219, 0.2);
+				margin: 0 32rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				border-radius: 8rpx;
+			
+				::v-deep .u-search__content {
+					background-color: transparent !important;
+			
+					.u-search__content__input {
+						background-color: transparent !important;
+					}
+				}
+			
+				.scan-icon {
+					width: 100rpx;
+					height: 100%;
+			
+					image {
+						width: 40rpx;
+						height: 40rpx;
+					}
+				}
+			}
+		}
+		
+	
+		.goods-cont {
+			display: flex;
+			.goods-cont-left {
+				width: 160rpx;
+				background-color: #F0F6FB;
+				.type-item {
+					width: 100%;
+					height: 84rpx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					color: #666;
+					font-family: "PingFang SC";
+					font-size: 28rpx;
+					font-weight: 400;
+				}
+				.active-item {
+					background-color: #fff;
+					color: #333;
+					font-weight: bold;
+				}
+			}
+			.goods-cont-right {
+				flex: 1;
+				background-color: #fff;
+			}
+			.goods-scroll {
+				height: 75vh;
+			}
+		}
+		.num-box {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			padding: 0 48rpx 0 26rpx;
+			.num-box-text {
+				color: #666;
+				font-family: "PingFang SC";
+				font-size: 28rpx;
+				font-weight: 400;
+			}
+			.input {
+				width: 112rpx;
+				text-align: center;
+				border-bottom: 1px solid #0256FF;
+				margin: 0 8rpx;
+			}
+			.minus {
+				width: 40rpx;
+				height: 40rpx;
+				border-radius: 8rpx;
+				border: 1px solid #0256FF;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+			}
+			.plus {
+				width: 40rpx;
+				height: 40rpx;
+				border-radius: 8rpx;
+				background-color: #0256FF;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+			}
+		}
+	}
+	.picler-class {
+		::v-deep .u-fade-enter-active {
+			z-index: 10098!important;
+		}
+		::v-deep  .u-slide-up-enter-active {
+			z-index: 10099!important;
+		}
+	}
+</style>

+ 125 - 0
components/scaned-pop/scaned-pop.vue

@@ -0,0 +1,125 @@
+<template>
+	<view>
+		<u-popup :show="scanedShow" :closeOnClickOverlay="false" @close="closeClick" mode="center" :round="10">
+			<view class="error-box">
+				<view class="flex_box flex_row_center">
+					<u-image src="@/static/image/error-img.png" width="112rpx" height="112rpx"></u-image>
+				</view>
+				<view class="tips-value">请确认该商品出库数量</view>
+				<view class="num-box">
+						<u-number-box v-model="numberVal">
+							<view slot="minus" class="minus">
+								<u-icon name="minus" color="#0256FF" size="12"></u-icon>
+							</view>
+							<text slot="input" class="input">{{numberVal}}</text>
+							<view slot="plus" class="plus">
+								<u-icon name="plus" color="#FFFFFF" size="12"></u-icon>
+							</view>
+						</u-number-box>
+					</view>
+				</good-item>
+				<view class="btn-box">
+					<u-button class="no-btn" type="primary" :plain="true" text="取消" @click="closeClick"></u-button>
+					<u-button class="yes-btn" type="primary" text="确认" @click="confirmClick"></u-button>
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	export default{
+		props:{
+			value:{
+				type:Boolean,
+				default:false
+			}
+		},
+		watch:{
+			value: {
+				handler(val) {
+					this.scanedShow = val
+				},
+				immediate:true
+			}
+		},
+		data() {
+			return {
+				scanedShow:false,
+				numberVal:0
+			}
+		},
+		methods:{
+			closeClick() {
+				this.$emit('close')
+			},
+			confirmClick() {
+				this.$emit('confirm')
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.error-box {
+	width: 580rpx;
+	padding: 48rpx 36rpx 48rpx;
+	.tips-value {
+		color: #1D212A;
+		font-family: "PingFang SC";
+		font-size: 32rpx;
+		font-style: normal;
+		font-weight: bold;
+		margin-top: 30rpx;
+		text-align: center;
+	}
+	.btn-box {
+		display: flex;
+		justify-content: space-between;
+		margin-top: 40rpx;
+		.no-btn {
+			width: 244rpx;
+			border-radius: 16rpx;
+			border: 1px solid #BFC8DB;
+			color: #86909C;
+			font-size: 32rpx;
+		}
+		.yes-btn {
+			width: 244rpx;
+			border-radius: 16rpx;
+			background: #0256FF;
+			font-size: 32rpx;
+		}
+	}
+	.num-box {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		margin-top: 30rpx;
+		.input {
+			width: 112rpx;
+			text-align: center;
+			border-bottom: 1px solid #0256FF;
+			margin: 0 8rpx;
+		}
+		.minus {
+			width: 40rpx;
+			height: 40rpx;
+			border-radius: 8rpx;
+			border: 1px solid #0256FF;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+		}
+		.plus {
+			width: 40rpx;
+			height: 40rpx;
+			border-radius: 8rpx;
+			background-color: #0256FF;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+		}
+	}
+}
+</style>

+ 76 - 0
components/success-pop/success-pop.vue

@@ -0,0 +1,76 @@
+<template>
+	<view>
+		<u-popup :show="successShow" closeable :closeOnClickOverlay="false" @close="closeClick" mode="center" :round="10">
+			<view class="error-box">
+				<view class="flex_box flex_row_center">
+					<u-image src="@/static/image/success-img.png" width="240rpx" height="240rpx"></u-image>
+				</view>
+				<view class="tips-value">{{content}}</view>
+				<view class="btn-box">
+					<u-button class="yes-btn" type="primary" text="返回" @click="backClick"></u-button>
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	export default{
+		props:{
+			value:{
+				type:Boolean,
+				default:false
+			},
+			content: {
+				type:String,
+				default:''
+			}
+		},
+		watch:{
+			value: {
+				handler(val) {
+					this.successShow = val
+				},
+				immediate:true
+			}
+		},
+		data() {
+			return {
+				successShow:false
+			}
+		},
+		methods:{
+			closeClick() {
+				this.$emit('close')
+			},
+			backClick() {
+				this.$emit('backClick')
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.error-box {
+	width: 580rpx;
+	padding: 48rpx 36rpx 48rpx;
+	.tips-value {
+		color: #1D212A;
+		font-family: "PingFang SC";
+		font-size: 32rpx;
+		font-style: normal;
+		font-weight: bold;
+		margin-top: 30rpx;
+		text-align: center;
+	}
+	.btn-box {
+		display: flex;
+		margin-top: 40rpx;
+		.yes-btn {
+			border-radius: 16rpx;
+			background: #0256FF;
+			font-size: 32rpx;
+		}
+	}
+}
+</style>

+ 34 - 7
components/task-item/task-item.vue

@@ -2,11 +2,22 @@
 	<view class="task-item">
 		<view class="task-head">
 			<view class="sn-box">单据编号:CGDD00000000692</view>
-			<view class="tips tips-red">待拣货</view>
+			<view v-if="type == 'caigou'">
+				<view class="tips tips-red" v-if="item.type == 0">待入库</view>
+				<view class="tips tips-greed" v-if="item.type == 1">已入库</view>
+			</view>
+			<view v-else>
+				<view class="tips tips-red" v-if="item.type == 0">待拣货</view>
+				<view class="tips tips-greed" v-if="item.type == 1">已拣货</view>
+			</view>
 		</view>
-		<view class="task-line">
-			<view>客户名称:</view>
-			<view>快马阳光便利店</view>
+		<view class="task-line" v-if="type == 'caigou'">
+			<view>供应商:</view>
+			<view>张三贸易有限公司</view>
+		</view>
+		<view class="task-line" v-else>
+		<view>客户名称:</view>
+		<view>快马阳光便利店</view>
 		</view>
 		<view class="task-line">
 			<view>单据日期:</view>
@@ -23,8 +34,14 @@
 			</view>
 		</view>
 		<view class="task-bottom">
-			<view class="btn btn-1" @click="toStorage">去出库</view>
-			<!-- <view class="btn btn-2">详情</view> -->
+			<view v-if="type == 'caigou'">
+				<view class="btn btn-1" v-if="item.type == 0" @click="toStorage">去入库</view>
+				<view class="btn btn-2" v-if="item.type == 1" @click="toDetail">详情</view>
+			</view>
+			<view v-else>
+				<view class="btn btn-1" v-if="item.type == 0" @click="toStorage">去出库</view>
+				<view class="btn btn-2" v-if="item.type == 1" @click="toDetail">详情</view>
+			</view>
 		</view>
 	</view>
 </template>
@@ -35,6 +52,10 @@
 			item:{
 				type:Object,
 				default:()=>{}
+			},
+			type: {
+				type:String,
+				default:''
 			}
 		},
 		data() {
@@ -45,6 +66,9 @@
 		methods:{
 			toStorage() {
 				this.$emit('toStorage')
+			},
+			toDetail() {
+				this.$emit('toDetail',this.item)
 			}
 		}
 	}
@@ -80,9 +104,12 @@
 			}
 			.tips-red {
 				color: #FF3B1D;
-				background-color: #fff;
 				background: rgba(255, 59, 29, 0.20);
 			}
+			.tips-greed {
+				color: #00B97B;
+				background: rgba(0, 185, 123, 0.20);
+			}
 		}
 	
 		.task-line {

+ 30 - 0
pages.json

@@ -38,6 +38,12 @@
 			}
 		},
 		{
+			"path": "pages/picking-task/detail",
+			"style": {
+				"navigationBarTitleText": ""
+			}
+		},
+		{
 			"path": "pages/index/notice-page",
 			"style": {
 				"navigationBarTitleText": ""
@@ -48,6 +54,30 @@
 			"style": {
 				"navigationBarTitleText": ""
 			}
+		},
+		{
+			"path": "pages/goods/detail",
+			"style": {
+				"navigationBarTitleText": ""
+			}
+		},
+		{
+			"path": "pages/purchase/index",
+			"style": {
+				"navigationBarTitleText": ""
+			}
+		},
+		{
+			"path": "pages/purchase/put-storage",
+			"style": {
+				"navigationBarTitleText": ""
+			}
+		},
+		{
+			"path": "pages/check/index",
+			"style": {
+				"navigationBarTitleText": ""
+			}
 		}
 	],
 	/* 分包预载配置 */

+ 156 - 0
pages/check/components/check-item.vue

@@ -0,0 +1,156 @@
+<template>
+	<view class="check-item">
+		<view class="header-box">
+			<view class="header-box-l">
+				<view class="header-box-name">2025年中心仓第三季度食品盘点</view>
+				<view>盘点单号:2024202244</view>
+			</view>
+			<view>
+				<view class="tips-box tips-red">待盘点</view>
+				<!-- <view class="tips-box tips-green">已盘点</view>
+				<view class="tips-box tips-hui">已取消</view>
+				<view class="tips-box tips-yellow">盘点中</view> -->
+			</view>
+		</view>
+		<view class="cont-box">
+			<view class="cont-item">
+				<view class="item-label">盘点仓库</view>
+				<view class="item-val">中心仓</view>
+			</view>
+			<view class="cont-item">
+				<view class="item-label">创建人</view>
+				<view class="item-val">刘双美</view>
+			</view>
+			<view class="cont-item">
+				<view class="item-label">盘点负责人</view>
+				<view class="item-val">刘双美</view>
+			</view>
+			<view class="cont-item">
+				<view class="item-label">货物种类</view>
+				<view class="item-val">20</view>
+			</view>
+			<view class="cont-item">
+				<view class="item-label">货物总量</view>
+				<view class="item-val">80件</view>
+			</view>
+			<view class="cont-item">
+				<view class="item-label">库位范围</view>
+				<view class="item-val">A区-B区</view>
+			</view>
+			<view class="cont-item">
+				<view class="item-label">创建时间</view>
+				<view class="item-val">2025-04-03</view>
+			</view>
+			<view class="cont-item">
+				<view class="item-label">盘点时间</view>
+				<view class="item-val">2025-04-03</view>
+			</view>
+			<view class="cont-item">
+				<view class="item-label">盘点人</view>
+				<view class="item-val">刘双美</view>
+			</view>
+		</view>
+	
+		<view class="btn-box">
+			<!-- <u-button class="detail-btn" type="primary" text="详情"></u-button> -->
+			<u-button class="detail-btn" type="primary" text="去提交"></u-button>
+			<u-button class="detail-btn ss-m-l-24" type="primary" text="去盘点"></u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		props:{
+			
+		},
+		data() {
+			return {
+				
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.check-item {
+		padding: 24rpx 24rpx 0 24rpx;
+		// border-radius: 16px;
+		background: #FFF;
+		border-bottom: 4rpx solid #F0F6FB;
+		.header-box {
+			display: flex;
+			justify-content: space-between;
+			.header-box-l {
+				color: #999;
+				font-size: 28rpx;
+				font-weight: 400;
+				.header-box-name {
+					color: #333;
+					font-size: 28rpx;
+					font-weight: 500;
+				}
+			}
+			.tips-box {
+				width: 120rpx;
+				height: 44rpx;
+				font-size: 22rpx;
+				text-align: center;
+				line-height: 44rpx;
+				border-radius: 8rpx;
+			}
+			.tips-red {
+				color: #FF3B1D;
+				background: rgba(255, 59, 29, 0.20);
+			}
+			.tips-green {
+				color: #00B97B;
+				background: rgba(0, 185, 123, 0.20);
+			}
+			.tips-hui {
+				color: #BFC8DB;
+				background: rgba(173, 181, 189, 0.26);
+			}
+			.tips-yellow {
+				color: #F59701;
+				background: rgba(245, 151, 1, 0.20);
+			}
+		}
+		.cont-box {
+			border-radius: 16rpx;
+			background: #F6F8FA;
+			margin-top: 16rpx;
+			padding: 24rpx;
+			display: grid;
+			grid-template-columns: 33.3% 33.3% 33.3%;
+			.cont-item {
+				margin-bottom: 20rpx;
+				.item-label {
+					color: #999;
+					font-size: 24rpx;
+					font-weight: 400;
+					margin-bottom: 6rpx;
+				}
+				.item-val {
+					color: #000;
+					font-size: 28rpx;
+					font-weight: 400;
+				}
+			}
+		}
+		.btn-box {
+			display: flex;
+			align-items: center;
+			justify-content: flex-end;
+			padding: 16rpx 0 24rpx;
+			.detail-btn {
+				width: 144rpx;
+				height: 56rpx;
+				border-radius: 28rpx;
+				background: #0256FF;
+				font-size: 32rpx;
+				border-radius: 8rpx;
+			}
+		}
+	}
+</style>

+ 113 - 0
pages/check/index.vue

@@ -0,0 +1,113 @@
+<template>
+	<view class="check-page">
+		<u-navbar height="40px" title="盘点" bgColor="#fff" autoBack placeholder>
+		</u-navbar>
+		<view class="container_main">
+			<u-sticky :offsetTop="offsetTop" bgColor="#fff">
+				<view class="search-box">
+					<u-search placeholder="请输入单据编号或名称" shape="square" v-model="searchKey" :showAction="false"></u-search>
+				</view>
+				<view class="type-box">
+					<u-tabs 
+						:list="tabList" 
+						:inactiveStyle="{color:'#000',fontSize:'24rpx'}"
+						:activeStyle="{color:'#000',fontSize:'24rpx'}" 
+						lineColor="#0256FF" 
+						lineWidth="66rpx" 
+						:scrollable="false"
+						@click="tabClick"
+						>
+					</u-tabs>
+				</view>
+			</u-sticky>
+			<view class="content-box">
+				<view class="content-box-val">
+					<check-item v-for="item in 6" :key="item"></check-item>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import checkItem from './components/check-item.vue'
+	export default{
+		components:{
+			checkItem
+		},
+		data() {
+			return {
+				offsetTop:0,
+				tabList: [{
+						index: 0,
+						name: '全部任务'
+					},
+					{
+						index: 1,
+						name: '待盘点'
+					},
+					{
+						index: 2,
+						name: '盘点中'
+					},
+					{
+						index: 3,
+						name: '已盘点'
+					},
+					{
+						index: 4,
+						name: '已取消'
+					}
+				],
+			}
+		},
+		onLoad() {
+			let systemInfo = uni.getSystemInfoSync();
+			let statusBarHeight = systemInfo.statusBarHeight;
+			this.offsetTop = statusBarHeight + 40
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.check-page {
+		min-height: 100vh;
+		background-color: #F0F6FB;
+		.container_main {
+			.search-box {
+				background-color: rgba(191, 200, 219, 0.2);
+				margin: 0 32rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				border-radius: 8rpx;
+			
+				::v-deep .u-search__content {
+					background-color: transparent !important;
+			
+					.u-search__content__input {
+						background-color: transparent !important;
+					}
+				}
+			
+				.scan-icon {
+					width: 100rpx;
+					height: 100%;
+			
+					image {
+						width: 40rpx;
+						height: 40rpx;
+					}
+				}
+			}
+		
+			.content-box {
+				padding: 24rpx;
+				&-val {
+					border-radius: 16rpx 16rpx 0 0;
+					overflow: hidden;
+				}
+			}
+		}
+	}
+</style>

+ 265 - 0
pages/goods/detail.vue

@@ -0,0 +1,265 @@
+<template>
+	<view class="detail-page">
+		<u-navbar height="40px" :title="navTitle" bgColor="#0256FF" :titleStyle="{color:'#fff'}" leftIconColor="#fff" autoBack
+			placeholder>
+		</u-navbar>
+		<view class="container_main">
+			<view class="info-box">
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>货物名称</text>
+					</view>
+					<view class="info-line-value">
+						娃哈哈AD钙
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>货物条码</text>
+					</view>
+					<view class="info-line-value">
+						9787540146481
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>货物图片</text>
+					</view>
+					<view class="info-line-value ss-p-y-24">
+						<u-image src="" width="120rpx" height="120rpx"></u-image>
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>规格</text>
+					</view>
+					<view class="info-line-value">
+						250ml
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>批次号</text>
+					</view>
+					<view class="info-line-value">
+						12345678966
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>生产日期</text>
+					</view>
+					<view class="info-line-value">
+						2025-04-03
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>库存</text>
+					</view>
+					<view class="info-line-value">
+						20瓶
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>库位</text>
+					</view>
+					<view class="info-line-value">
+						A区3-1-1
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>创建时间</text>
+					</view>
+					<view class="info-line-value">
+						2025-04-03 16:44
+					</view>
+				</view>
+			</view>
+			<view class="crk-box" @click="crkShow = true">
+				<u-image src="@/static/image/cgrk-icon.png" width="48rpx" height="48rpx"></u-image>
+				<view class="crk-msg">
+					<view class="crk-msg-name">出入库明细</view>
+					<view>查看最近的出入库记录</view>
+				</view>
+				<u-icon name="arrow-right" color="rgba(173, 181, 189, 0.50)" size="14"></u-icon>
+			</view>
+		</view>
+		<!-- 出入库明细 -->
+		<u-popup :show="crkShow" @close="crkShow = false" round="18" closeable :closeOnClickOverlay="false">
+			<view class="crk-cont">
+				<view class="crk-cont-title">出入库明细</view>
+				<view class="crk-cont-tab">
+					<view class="tab-item" :class="currentCrkId == item.id ? 'tab-item-active' : ''" v-for="(item,i) in crkList" :key="i" @click="tabClick(item)">
+						{{item.name}}
+					</view>
+				</view>
+				<scroll-view scroll-y class="scroll-y">
+					<view class="crk-item" v-for="item in 6" :key="item">
+						<view class="crk-item-title">娃哈哈AD钙</view>
+						<view class="crk-item-line">出库仓库:我的仓库</view>
+						<view class="crk-item-line">货物规格:500ml</view>
+						<view class="crk-item-line">出库时间:2025-04-03 16:44</view>
+						<view class="crk-item-line">出库数量:25件</view>
+						<view class="img-box">
+							<u-image v-if="currentCrkId == 0" src="@/static/image/yck-img.png" width="132rpx" height="132rpx"></u-image>
+							<u-image v-if="currentCrkId == 1" src="@/static/image/yrk-img.png" width="132rpx" height="132rpx"></u-image>
+						</view>
+					</view>
+					<u-divider text="仅展示最近10条记录" :dashed="true"></u-divider>
+					<view style="height: 40rpx;"></view>
+				</scroll-view>
+			
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	export default{
+		data() {
+			return {
+				navTitle:'哇哈哈AD盖',
+				crkShow: false,
+				currentCrkId:0,
+				crkList:[
+					{
+						name:'出库',
+						id:0
+					},
+					{
+						name:'入库',
+						id:1
+					}
+				]
+			}
+		},
+		methods:{
+			tabClick(item) {
+				this.currentCrkId = item.id
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.detail-page {
+		min-height: 100vh;
+		background-color: #F0F6FB;
+		padding: 24rpx;
+		.container_main {
+			.info-box {
+				background-color: #fff;
+				border-radius: 16rpx 16rpx 0 0;
+				padding: 24rpx;
+			
+				.info-line {
+					border-bottom: 1px solid #F4F4F4;
+					min-height: 92rpx;
+					color: #333;
+					font-family: "PingFang SC";
+					font-size: 28rpx;
+					font-weight: 400;
+					display: flex;
+					align-items: center;
+			
+					&-label {
+						width: 162rpx;
+					}
+			
+					.must-box {
+						color: #FF3B1D;
+					}
+				}
+			}
+			
+			.crk-box {
+				border-radius: 16rpx;
+				background: #FFF;
+				padding: 32rpx 24rpx;
+				margin-top: 24rpx;
+				display: flex;
+				align-items: center;
+				.crk-msg {
+					flex: 1;
+					margin-left: 24rpx;
+					color: #666;
+					font-size: 28rpx;
+					font-weight: 400;
+					.crk-msg-name {
+						color: #333;
+						font-size: 32rpx;
+						font-weight: bold;
+					}
+				}
+			}
+		}
+		
+		.crk-cont {
+			height: 75vh;
+			&-title {
+				height: 80rpx;
+				line-height: 80rpx;
+				text-align: center;
+				color: #1F1F39;
+				font-size: 36rpx;
+				font-weight: bold;
+			}
+			&-tab {
+				height: 100rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				.tab-item {
+					width: 160rpx;
+					height: 56rpx;
+					border-radius: 40rpx;
+					border: 1px solid rgba(173, 181, 189, 0.50);
+					color: #666;
+					text-align: center;
+					font-size: 28rpx;
+					font-weight: 500;
+					line-height: 56rpx;
+					margin-right: 24rpx;
+				}
+				.tab-item-active {
+					background: #0256FF;
+					border: 1px solid #0256FF;
+					color: #FFF;
+				}
+			}
+			.scroll-y {
+				height: calc(75vh - 80rpx - 100rpx);
+				padding: 0 24rpx;
+				.crk-item {
+					border-radius: 16rpx;
+					background: #F6F8FA;
+					padding: 24rpx;
+					font-family: "PingFang SC";
+					margin-bottom: 24rpx;
+					position: relative;
+					&-title {
+						color: #000;
+						font-size: 28rpx;
+						font-weight: 500;
+						margin-bottom: 16rpx;
+					}
+					&-line {
+						color: #666;
+						font-size: 28rpx;
+						font-weight: 400;
+						margin-bottom: 8rpx;
+					}
+				
+					.img-box {
+						position: absolute;
+						top: 24rpx;
+						right: 24rpx;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 2 - 2
pages/index/index.vue

@@ -54,7 +54,7 @@
 						src:require('@/static/image/home/icon-cgrk.png'),
 						text:'采购入库',
 						num:5,
-						url:''
+						url:'/pages/purchase/index'
 					},
 					{
 						src:require('@/static/image/home/icon-chcx.png'),
@@ -66,7 +66,7 @@
 						src:require('@/static/image/home/icon-pdrw.png'),
 						text:'盘点任务',
 						num:0,
-						url:''
+						url:'/pages/check/index'
 					}
 				],
 				meunShow:false,

+ 53 - 10
pages/picking-task/delivery.vue

@@ -78,7 +78,7 @@
 						<text>连续扫描</text>
 					</view>
 				</view>
-				<view class="scan-box-r">
+				<view class="scan-box-r" @click="manualClick">
 					<u-image width="120rpx" height="120rpx" src="@/static/image/shoudong-saoma-img.png"></u-image>
 					<view class="tips-text">手动选择</view>
 				</view>
@@ -90,7 +90,7 @@
 					<view class="cargo-list-title-tips">(轻触货物查看详情)</view>
 				</view>
 				<block v-for="(item,i) in goodsList" :key="i">
-					<good-item :item="item">
+					<good-item :item="item" @toDetail="toDetail">
 						<view class="num-box">
 							<view class="num-box-text">已确认拣货数量</view>
 							<u-number-box v-model="value">
@@ -117,35 +117,78 @@
 			  提交
 			</button>
 		</view>
+		<error-pop v-model="errorShow" @close="errorShow = false" @confirm="confirm" :content="popText.errorText"></error-pop>
+		<success-pop v-model="successShow" @close="successShow = false" @backClick="backClick" :content="popText.success"></success-pop>
+		<!-- 扫码之后弹窗 -->
+		<scaned-pop v-model="scanedShow" @close="scanedShow = false" @confirm="scanConfirm"></scaned-pop>
+		
+		<goods-pop v-model="goodsShow" @close="goodsShow = false"></goods-pop>
 	</view>
 </template>
 
 <script>
 	import goodItem from '@/components/good-item/good-item.vue'
+	import errorPop from '@/components/error-pop/error-pop.vue'
+	import successPop from '@/components/success-pop/success-pop.vue'
+	import scanedPop from '@/components/scaned-pop/scaned-pop.vue'
+	import goodsPop from '@/components/goods-pop/goods-pop.vue'
 	export default {
 		components: {
-			goodItem
+			goodItem,
+			errorPop,
+			successPop,
+			scanedPop,
+			goodsPop
 		},
 		data() {
 			return {
+				popText:{
+					errorText:'实际出库数量与应出库数量有差异,是否确认提交?',
+					successText:'出库成功!'
+				},
+				goodsShow:false,
+				scanedShow:false,
+				errorShow:false,
+				successShow:false,
 				value:0,
 				isUnfold: true, //是否展开
 				info: {
 					mark: '',
 					url: ''
 				},
-				goodsList: [{
-					src: '',
-					name: '大童专用氨基酸洗发水',
-				}, {
-					src: '',
-					name: '大童专用氨基酸洗发水',
-				}]
+				goodsList: [
+					{
+						src: '',
+						name: '大童专用氨基酸洗发水',
+					}, {
+						src: '',
+						name: '大童专用氨基酸洗发水',
+					},
+				]
 			}
 		},
 		methods:{
 			submitClick() {
 				
+			},
+			confirm() {
+				console.log('确定')
+				this.errorShow = false
+			},
+			backClick() {
+				
+			},
+			// 扫码确认
+			scanConfirm() {
+				
+			},
+			manualClick() {
+				this.goodsShow = true
+			},
+			toDetail() {
+				uni.navigateTo({
+					url:'/pages/goods/detail'
+				})
 			}
 		}
 	}

+ 346 - 0
pages/picking-task/detail.vue

@@ -0,0 +1,346 @@
+<template>
+	<view class="deliver-page">
+		<u-navbar height="40px" title="拣货任务详情" bgColor="#0256FF" :titleStyle="{color:'#fff'}" leftIconColor="#fff" autoBack
+			placeholder>
+		</u-navbar>
+		<view class="container_main">
+			<view class="info-box" :class="isUnfold ? '':'min-height'">
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>出库单号</text>
+					</view>
+					<view class="info-line-value">
+						RK-20250403164422
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>发出仓库</text>
+					</view>
+					<view class="info-line-value">
+						我的仓库
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>出库数量</text>
+					</view>
+					<view class="info-line-value">
+						1
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>出库种类</text>
+					</view>
+					<view class="info-line-value">
+						1
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>制单日期</text>
+					</view>
+					<view class="info-line-value">
+						2025-04-03
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>制单人</text>
+					</view>
+					<view class="info-line-value">
+						刘双强
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>出库类型</text>
+					</view>
+					<view class="info-line-value">
+						销售出库
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>出库人</text>
+					</view>
+					<view class="info-line-value">
+						刘双美
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>备注信息</text>
+					</view>
+					<view class="info-line-value">
+						备注备注备注备注备注
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>出库时间</text>
+					</view>
+					<view class="info-line-value">
+						2025-04-03 16:44
+					</view>
+				</view>
+				
+				
+			</view>
+			<view class="btn-box">
+				<view class="btn-cont" @click="isUnfold = !isUnfold">
+					<text>{{isUnfold ? '收起' : '展开'}}</text>
+					<u-icon :name="isUnfold?'arrow-up':'arrow-down'"></u-icon>
+				</view>
+			</view>
+
+			<!-- 货物清单 -->
+			<view class="cargo-list">
+				<view class="cargo-list-title">
+					<view>出库货物清单</view>
+					<view class="cargo-list-title-tips">(轻触货物查看详情)</view>
+				</view>
+				<block v-for="(item,i) in goodsList" :key="i">
+					<good-item :item="item" @toDetail="toDetail">
+						<view class="num-box">
+							<view class="num-box-text">已确认出库数量</view>
+							<u-number-box v-model="value" disabled>
+								<view slot="minus" class="minus">
+									<u-icon name="minus" color="#DADADA" size="12"></u-icon>
+								</view>
+								<text slot="input" class="input">{{value}}</text>
+								<view slot="plus" class="plus">
+									<u-icon name="plus" color="#FFFFFF" size="12"></u-icon>
+								</view>
+							</u-number-box>
+						</view>
+					</good-item>
+				</block>
+			</view>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	import goodItem from '@/components/good-item/good-item.vue'
+	export default {
+		components: {
+			goodItem,
+		},
+		data() {
+			return {
+				errorShow:false,
+				successShow:false,
+				value:0,
+				isUnfold: true, //是否展开
+				info: {
+					mark: '',
+					url: ''
+				},
+				goodsList: [
+					{
+						src: '',
+						name: '大童专用氨基酸洗发水',
+					}, {
+						src: '',
+						name: '大童专用氨基酸洗发水',
+					},
+				]
+			}
+		},
+		methods:{
+			submitClick() {
+				
+			},
+			confirm() {
+				console.log('确定')
+				this.errorShow = false
+			},
+			backClick() {
+				
+			},
+			// 扫码确认
+			scanConfirm() {
+				
+			},
+			manualClick() {
+				this.goodsShow = true
+			},
+			toDetail() {
+				uni.navigateTo({
+					url:'/pages/goods/detail'
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.deliver-page {
+		min-height: 100vh;
+		background-color: #F0F6FB;
+		padding-bottom: 130rpx;
+
+		.container_main {
+			padding: 24rpx;
+
+			.info-box {
+				background-color: #fff;
+				border-radius: 16rpx 16rpx 0 0;
+				padding: 24rpx 24rpx 0 24rpx;
+
+				.info-line {
+					border-bottom: 1px solid #F4F4F4;
+					min-height: 92rpx;
+					color: #333;
+					font-family: "PingFang SC";
+					font-size: 28rpx;
+					font-weight: 400;
+					display: flex;
+					align-items: center;
+
+					&-label {
+						width: 162rpx;
+					}
+
+					.must-box {
+						color: #FF3B1D;
+					}
+				}
+			}
+
+			.min-height {
+				height: 300rpx;
+				overflow: hidden;
+			}
+
+			.btn-box {
+				height: 112rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				background-color: #fff;
+				border-radius: 0 0 16rpx 16rpx;
+
+				.btn-cont {
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					width: 154rpx;
+					height: 56rpx;
+					border-radius: 120rpx;
+					border: 1px solid #D9D9D9;
+					color: #666;
+					font-family: "PingFang SC";
+					font-size: 28rpx;
+					font-weight: 400;
+				}
+			}
+
+			.cargo-list {
+				padding: 24rpx 0;
+				background-color: #fff;
+				margin-top: 24rpx;
+				border-radius: 16rpx;
+
+				.cargo-list-title {
+					font-family: "PingFang SC";
+					font-size: 32rpx;
+					font-style: normal;
+					font-weight: bold;
+					display: flex;
+					align-items: center;
+					position: relative;
+					padding-left: 50rpx;
+
+					&::after {
+						content: '';
+						display: block;
+						width: 6rpx;
+						height: 30rpx;
+						border-radius: 100px;
+						background: #0256FF;
+						position: absolute;
+						top: 50%;
+						left: 24rpx;
+						transform: translateY(-50%);
+					}
+
+					.cargo-list-title-tips {
+						color: #0256FF;
+						font-size: 24rpx;
+						font-weight: 400;
+					}
+				}
+
+				.num-box {
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					padding: 0 48rpx 0 26rpx;
+					.num-box-text {
+						color: #666;
+						font-family: "PingFang SC";
+						font-size: 28rpx;
+						font-weight: 400;
+					}
+					.input {
+						width: 112rpx;
+						text-align: center;
+						border-bottom: 1px solid #DADADA;
+						margin: 0 8rpx;
+					}
+					.minus {
+						width: 40rpx;
+						height: 40rpx;
+						border-radius: 8rpx;
+						border: 1px solid #DADADA;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+					}
+					.plus {
+						width: 40rpx;
+						height: 40rpx;
+						border-radius: 8rpx;
+						background-color: #DADADA;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+					}
+				}
+			}
+		}
+		
+		.footer-box {
+			background-color: #fff;
+			height: 126rpx;
+			position: fixed;
+			bottom: 0;
+			left: 0;
+			right: 0;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			padding: 0 40rpx 0 60rpx;
+			.footer-box-l {
+				color: #666;
+				font-family: "PingFang SC";
+				font-size: 28rpx;
+				font-weight: 400;
+			}
+			.submitBtn {
+				width: 362rpx;
+				height: 76rpx;
+				border-radius: 16rpx;
+				background: #0256FF;
+				color: #FFF;
+				font-size: 28rpx;
+				font-weight: 500;
+				margin: 0;
+			}
+		}
+	}
+</style>

+ 15 - 2
pages/picking-task/index.vue

@@ -29,8 +29,8 @@
 				</view>
 			</u-sticky>
 			<view class="task-cont">
-				<block v-for="item in 10" :key="">
-					<task-item @toStorage="toStorage"></task-item>
+				<block v-for="(item,i) in taskList" :key="i">
+					<task-item :item="item" @toStorage="toStorage" @toDetail="toDetail"></task-item>
 				</block>
 			</view>
 		</view>
@@ -60,6 +60,14 @@
 				],
 				defaultIndex:[],
 				pickType:0,//1.中心仓
+				taskList:[
+					{
+						type:0
+					},
+					{
+						type:1
+					}
+				]
 			}
 		},
 		onLoad() {
@@ -92,6 +100,11 @@
 				uni.navigateTo({
 					url:'/pages/picking-task/delivery'
 				})
+			},
+			toDetail(val) {
+				uni.navigateTo({
+					url:'/pages/picking-task/detail'
+				})
 			}
 		}
 	}

+ 179 - 0
pages/purchase/index.vue

@@ -0,0 +1,179 @@
+<template>
+	<view class="picking-task-page">
+		<u-navbar height="40px" title="采购入库" bgColor="#F0F6FB" autoBack placeholder>
+			<view class="u-nav-slot btn-right" slot="right" @click="stashClick">
+				<view class="cang-name">{{cangName}}</view>
+				<u-icon name="arrow-down-fill" color="#999999" size="12"></u-icon>
+			</view>
+		</u-navbar>
+		<view class="container_main">
+			<u-sticky :offsetTop="offsetTop" bgColor="#F0F6FB">
+				<view class="search-box">
+					<u-search placeholder="请输入单据编号" bgColor="#fff" shape="square" v-model="searchKey" :showAction="false"></u-search>
+					<view class="flex_box">
+						<view class="scan-text">扫描单据二维码</view>
+						<view class="scan-icon">
+							<image src="@/static/image/scan-icon.png" mode=""></image>
+						</view>
+					</view>
+				</view>
+				<view class="type-box flex_box">
+					<view class="type-item">
+						<view class="type-val">{{type1}}</view>
+						<u-icon name="arrow-down-fill" color="#999999" size="12"></u-icon>
+					</view>
+					<view class="type-item">
+						<view class="type-val">{{type2}}</view>
+						<u-icon name="arrow-down-fill" color="#999999" size="12"></u-icon>
+					</view>
+				</view>
+			</u-sticky>
+			<view class="task-cont">
+				<block v-for="(item,i) in taskList" :key="i">
+					<task-item :item="item" @toStorage="toStorage" @toDetail="toDetail" type="caigou"></task-item>
+				</block>
+			</view>
+		</view>
+		<!-- 中心仓弹窗 -->
+		<u-picker :show="stashShow" :defaultIndex="defaultIndex" :columns="columnsList" @confirm="pickerConfirm" @cancel="stashShow= false"></u-picker>
+
+	</view>
+</template>
+
+<script>
+	import taskItem from '@/components/task-item/task-item.vue'
+	export default{
+		components:{
+			taskItem
+		},
+		data() {
+			return {
+				offsetTop:0,
+				cangName:'鹏越中心仓',
+				searchKey:'',
+				type1:'全部',
+				type2:'月份',
+				stashShow:false,
+				columnsList:[],
+				stashColumns:[
+					['鹏越中心仓','美团中心仓']
+				],
+				defaultIndex:[],
+				pickType:0,//1.中心仓
+				taskList:[
+					{
+						type:0
+					},
+					{
+						type:1
+					}
+				]
+			}
+		},
+		onLoad() {
+			let systemInfo = uni.getSystemInfoSync();
+			let statusBarHeight = systemInfo.statusBarHeight;
+			this.offsetTop = statusBarHeight + 40
+		},
+		methods:{
+			stashClick() {
+				this.pickType = 1
+				this.columnsList = this.stashColumns
+				this.defaultIndex = this.getDefaultIndex(this.cangName)
+				this.stashShow = true
+			},
+			pickerConfirm(val) {
+				if(this.pickType == 1) {
+					this.cangName = val.value[0]
+				}
+				this.stashShow = false
+			},
+			// 获取picker默认index
+			getDefaultIndex(val) {
+				let arr = []
+				let index = this.columnsList[0].findIndex(item=>item == val)
+				arr = [index]
+				return arr
+			},
+			// 入库
+			toStorage(val) {
+				uni.navigateTo({
+					url:'/pages/purchase/put-storage'
+				})
+			},
+			toDetail(val) {
+				uni.navigateTo({
+					url:'/pages/picking-task/detail'
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.btn-right {
+		display: flex;
+		align-items: center;
+		.cang-name {
+			color: #0256FF;
+			text-align: center;
+			font-family: "PingFang SC";
+			font-size: 28rpx;
+			font-weight: 600;
+			margin-right: 10rpx;
+		}
+	}
+	.picking-task-page {
+		min-height: 100vh;
+		background: #F0F6FB;
+		.container_main {
+			.search-box {
+				display: flex;
+				align-items: center;
+				padding: 0 32rpx;
+				.scan-text {
+					color: #333;
+					font-family: "PingFang SC";
+					font-size: 24rpx;
+					font-weight: 400;
+					margin-right: 20rpx;
+					margin-left: 30rpx;
+				}
+				.scan-icon {
+					width: 36rpx;
+					height: 36rpx;
+					background-color: #fff;
+					border-radius: 50%;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					image {
+						width: 24rpx;
+						height: 24rpx;
+					}
+				}
+			}
+		
+			.type-box {
+				.type-item {
+					width: 50%;
+					height: 88rpx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					.type-val {
+						color: #000;
+						font-family: "PingFang SC";
+						font-size: 28rpx;
+						font-weight: 400;
+						margin-right: 10rpx;
+					}
+				}
+			}
+			
+			.task-cont {
+				padding: 0 24rpx;
+			}
+		}
+	}
+</style>

+ 413 - 0
pages/purchase/put-storage.vue

@@ -0,0 +1,413 @@
+<template>
+	<view class="deliver-page">
+		<u-navbar height="40px" title="采购入库" bgColor="#0256FF" :titleStyle="{color:'#fff'}" leftIconColor="#fff" autoBack
+			placeholder>
+		</u-navbar>
+		<view class="container_main">
+			<view class="info-box" :class="isUnfold ? '':'min-height'">
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>收入仓库</text>
+					</view>
+					<view class="info-line-value">
+						鹏越中心仓
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>供应商</text>
+					</view>
+					<view class="info-line-value">
+						哇哈哈哈
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>入库类型</text>
+					</view>
+					<view class="info-line-value">
+						采购入库
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>入库日期</text>
+					</view>
+					<view class="info-line-value">
+						2025-04-03
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>上传凭证</text>
+					</view>
+					<view class="info-line-value ss-p-y-24">
+						<upload-image v-model="info.url" width="196rpx" height="196rpx"></upload-image>
+					</view>
+				</view>
+				<view class="info-line">
+					<view class="info-line-label">
+						<text>备注信息</text>
+					</view>
+					<view class="info-line-value">
+						<u-input v-model="info.mark" placeholder="请输入备注信息" border="none"></u-input>
+					</view>
+				</view>
+			</view>
+			<view class="btn-box">
+				<view class="btn-cont" @click="isUnfold = !isUnfold">
+					<text>{{isUnfold ? '收起' : '展开'}}</text>
+					<u-icon :name="isUnfold?'arrow-up':'arrow-down'"></u-icon>
+				</view>
+			</view>
+
+			<view class="scan-box">
+				<view class="scan-box-l">
+					<u-image width="120rpx" height="120rpx" src="@/static/image/zidong-saoma-img.png"></u-image>
+					<view class="tips-text">扫描快速识别货物</view>
+					<view class="tips-text2">
+						<view class="radio-box"></view>
+						<text>连续扫描</text>
+					</view>
+				</view>
+				<view class="scan-box-r" @click="manualClick">
+					<u-image width="120rpx" height="120rpx" src="@/static/image/shoudong-saoma-img.png"></u-image>
+					<view class="tips-text">手动选择</view>
+				</view>
+			</view>
+			<!-- 货物清单 -->
+			<view class="cargo-list">
+				<view class="cargo-list-title">
+					<view>出库货物清单</view>
+					<view class="cargo-list-title-tips">(轻触货物查看详情)</view>
+				</view>
+				<block v-for="(item,i) in goodsList" :key="i">
+					<good-item :item="item" @toDetail="toDetail">
+						<view class="num-box">
+							<view class="num-box-text">已确认入库数量</view>
+							<u-number-box v-model="value">
+								<view slot="minus" class="minus">
+									<u-icon name="minus" color="#0256FF" size="12"></u-icon>
+								</view>
+								<text slot="input" class="input">{{value}}</text>
+								<view slot="plus" class="plus">
+									<u-icon name="plus" color="#FFFFFF" size="12"></u-icon>
+								</view>
+							</u-number-box>
+						</view>
+					</good-item>
+				</block>
+			</view>
+		</view>
+		
+		<view class="footer-box">
+			<view class="footer-box-l">
+				<view>货物种类:5种</view>
+				<view>货物种数:25件</view>
+			</view>
+			<button class="submitBtn" @tap="submitClick">
+			  提交
+			</button>
+		</view>
+		<error-pop v-model="errorShow" @close="errorShow = false" @confirm="confirm" :content="popText.errorText"></error-pop>
+		<success-pop v-model="successShow" @close="successShow = false" @backClick="backClick" :content="popText.success"></success-pop>
+		<!-- 扫码之后弹窗 -->
+		<scaned-pop v-model="scanedShow" @close="scanedShow = false" @confirm="scanConfirm"></scaned-pop>
+		
+		<goods-pop v-model="goodsShow" @close="goodsShow = false" type="caigou"></goods-pop>
+	</view>
+</template>
+
+<script>
+	import goodItem from '@/components/good-item/good-item.vue'
+	import errorPop from '@/components/error-pop/error-pop.vue'
+	import successPop from '@/components/success-pop/success-pop.vue'
+	import scanedPop from '@/components/scaned-pop/scaned-pop.vue'
+	import goodsPop from '@/components/goods-pop/goods-pop.vue'
+	export default {
+		components: {
+			goodItem,
+			errorPop,
+			successPop,
+			scanedPop,
+			goodsPop
+		},
+		data() {
+			return {
+				popText:{
+					errorText:'实际入库数量与应入库数量有差异,是否确认提交?',
+					successText:'入库成功!'
+				},
+				goodsShow:false,
+				scanedShow:false,
+				errorShow:false,
+				successShow:false,
+				value:0,
+				isUnfold: true, //是否展开
+				info: {
+					mark: '',
+					url: ''
+				},
+				goodsList: [
+					{
+						src: '',
+						name: '大童专用氨基酸洗发水',
+					}, {
+						src: '',
+						name: '大童专用氨基酸洗发水',
+					},
+				]
+			}
+		},
+		methods:{
+			submitClick() {
+				
+			},
+			confirm() {
+				console.log('确定')
+				this.errorShow = false
+			},
+			backClick() {
+				
+			},
+			// 扫码确认
+			scanConfirm() {
+				
+			},
+			manualClick() {
+				this.goodsShow = true
+			},
+			toDetail() {
+				uni.navigateTo({
+					url:'/pages/goods/detail'
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.deliver-page {
+		min-height: 100vh;
+		background-color: #F0F6FB;
+		padding-bottom: 130rpx;
+
+		.container_main {
+			padding: 24rpx;
+
+			.info-box {
+				background-color: #fff;
+				border-radius: 16rpx 16rpx 0 0;
+				padding: 24rpx 24rpx 0 24rpx;
+
+				.info-line {
+					border-bottom: 1px solid #F4F4F4;
+					min-height: 92rpx;
+					color: #333;
+					font-family: "PingFang SC";
+					font-size: 28rpx;
+					font-weight: 400;
+					display: flex;
+					align-items: center;
+
+					&-label {
+						width: 162rpx;
+					}
+
+					.must-box {
+						color: #FF3B1D;
+					}
+				}
+			}
+
+			.min-height {
+				height: 300rpx;
+				overflow: hidden;
+			}
+
+			.btn-box {
+				height: 112rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				background-color: #fff;
+				border-radius: 0 0 16rpx 16rpx;
+
+				.btn-cont {
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					width: 154rpx;
+					height: 56rpx;
+					border-radius: 120rpx;
+					border: 1px solid #D9D9D9;
+					color: #666;
+					font-family: "PingFang SC";
+					font-size: 28rpx;
+					font-weight: 400;
+				}
+			}
+
+			.scan-box {
+				margin-top: 24rpx;
+				padding: 24rpx 0;
+				border-radius: 16rpx;
+				background: #FFF;
+				display: flex;
+
+				.tips-text {
+					color: #333;
+					font-size: 28rpx;
+					font-weight: 400;
+					line-height: 48rpx;
+				}
+
+				.tips-text2 {
+					color: #0256FF;
+					font-size: 24rpx;
+					font-weight: 400;
+					display: flex;
+					align-items: center;
+
+					.radio-box {
+						width: 32rpx;
+						height: 32rpx;
+						border-radius: 50%;
+						border: 1px solid #D9D9D9;
+						margin-right: 16rpx;
+					}
+				}
+
+				.scan-box-l {
+					width: 50%;
+					display: flex;
+					flex-direction: column;
+					align-items: center;
+					position: relative;
+
+					&::after {
+						content: '';
+						display: block;
+						width: 1px;
+						height: 138rpx;
+						background-color: #F4F4F4;
+						position: absolute;
+						top: 50%;
+						right: 0;
+						transform: translateY(-50%);
+					}
+				}
+
+				.scan-box-r {
+					width: 50%;
+					display: flex;
+					flex-direction: column;
+					align-items: center;
+				}
+			}
+
+			.cargo-list {
+				padding: 24rpx 0;
+				background-color: #fff;
+				margin-top: 24rpx;
+				border-radius: 16rpx;
+
+				.cargo-list-title {
+					font-family: "PingFang SC";
+					font-size: 32rpx;
+					font-style: normal;
+					font-weight: bold;
+					display: flex;
+					align-items: center;
+					position: relative;
+					padding-left: 50rpx;
+
+					&::after {
+						content: '';
+						display: block;
+						width: 6rpx;
+						height: 30rpx;
+						border-radius: 100px;
+						background: #0256FF;
+						position: absolute;
+						top: 50%;
+						left: 24rpx;
+						transform: translateY(-50%);
+					}
+
+					.cargo-list-title-tips {
+						color: #0256FF;
+						font-size: 24rpx;
+						font-weight: 400;
+					}
+				}
+
+				.num-box {
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					padding: 0 48rpx 0 26rpx;
+					.num-box-text {
+						color: #666;
+						font-family: "PingFang SC";
+						font-size: 28rpx;
+						font-weight: 400;
+					}
+					.input {
+						width: 112rpx;
+						text-align: center;
+						border-bottom: 1px solid #0256FF;
+						margin: 0 8rpx;
+					}
+					.minus {
+						width: 40rpx;
+						height: 40rpx;
+						border-radius: 8rpx;
+						border: 1px solid #0256FF;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+					}
+					.plus {
+						width: 40rpx;
+						height: 40rpx;
+						border-radius: 8rpx;
+						background-color: #0256FF;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+					}
+				}
+			}
+		}
+		
+		.footer-box {
+			background-color: #fff;
+			height: 126rpx;
+			position: fixed;
+			bottom: 0;
+			left: 0;
+			right: 0;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			padding: 0 40rpx 0 60rpx;
+			.footer-box-l {
+				color: #666;
+				font-family: "PingFang SC";
+				font-size: 28rpx;
+				font-weight: 400;
+			}
+			.submitBtn {
+				width: 362rpx;
+				height: 76rpx;
+				border-radius: 16rpx;
+				background: #0256FF;
+				color: #FFF;
+				font-size: 28rpx;
+				font-weight: 500;
+				margin: 0;
+			}
+		}
+	}
+</style>

BIN
static/image/cgrk-icon.png


BIN
static/image/error-img.png


BIN
static/image/success-img.png


BIN
static/image/yck-img.png


BIN
static/image/yrk-img.png