From 09a4dffa44acc386ab66b4e01af473068586e4fb Mon Sep 17 00:00:00 2001
From: Mr.Shi <1878285526@qq.com>
Date: 星期一, 04 九月 2023 10:38:55 +0800
Subject: [PATCH] 小程序

---
 minipro_standard/store/index.js                                           |    8 
 minipro_standard/pages.json                                               |   14 
 minipro_standard/util/api/index.js                                        |   12 
 minipro_standard/pages_adjust/components/user.vue                         |  127 ++++
 minipro_standard/util/request/index.js                                    |    2 
 minipro_standard/util/request/requestInterceptors.js                      |   22 
 minipro_standard/util/request/responseInterceptors.js                     |   47 +
 minipro_standard/pages/workbench/workbench.vue                            |   17 
 minipro_standard/pages_adjust/pages/processPlan/processPlan.vue           |  404 +++++++++++++
 minipro_standard/common/config.js                                         |    3 
 minipro_standard/pages/login/login.vue                                    |   57 +
 minipro_standard/pages_adjust/pages/reportingForWork/reportingForWork.vue | 1071 +++++++++++++++++++++++++++++++++++
 12 files changed, 1,728 insertions(+), 56 deletions(-)

diff --git a/minipro_standard/common/config.js b/minipro_standard/common/config.js
index d0ead09..7c8d271 100644
--- a/minipro_standard/common/config.js
+++ b/minipro_standard/common/config.js
@@ -1,7 +1,8 @@
 module.exports = {
 	// baseUrl: 'http://106.14.20.42/test_hfznzz/',
 	// baseUrl: 'https://hefei.dtkey.cn/test_hfznzz/',
-	baseUrl: 'https://dmtest.ahapp.net/doumeeplant_api',
+	baseUrl: 'http://192.168.0.15:10021/',
+	// baseUrl: 'https://dmtest.ahapp.net/doumeeplant_api',
 	phoneRegular: /^1[3456789]\d{9}$/,
 	mailboxRegular: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
 	positiveInteger: /^[0-9]*[1-9][0-9]*$/,
diff --git a/minipro_standard/pages.json b/minipro_standard/pages.json
index 2b2d939..5fa16be 100644
--- a/minipro_standard/pages.json
+++ b/minipro_standard/pages.json
@@ -202,6 +202,20 @@
 						"navigationBarTitleText": "搴撳瓨閲忔煡璇�",
 						"enablePullDownRefresh": false
 					}
+				},
+				{
+					"path": "pages/reportingForWork/reportingForWork",
+					"style": {
+						"navigationBarTitleText": "涓�閿姤宸�",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "pages/processPlan/processPlan",
+					"style": {
+						"navigationBarTitleText": "閫夋嫨宸ュ簭璁″垝",
+						"enablePullDownRefresh": false
+					}
 				}
 			]
 		},
diff --git a/minipro_standard/pages/login/login.vue b/minipro_standard/pages/login/login.vue
index 1632dbc..8446015 100644
--- a/minipro_standard/pages/login/login.vue
+++ b/minipro_standard/pages/login/login.vue
@@ -7,50 +7,77 @@
 		</view>
 		<view class="bg_w rd8 ptb30 pl40 bbox com-input flex input-height">
 			<image src="@/static/login_ic_code@2x.png" mode="" class="img40 mr25"></image>
-			<u--input placeholder="浼佷笟浠g爜" border="none" v-model="loginForm.companyId"></u--input>
+			<u--input placeholder="浼佷笟浠g爜" border="none" v-model="from.companyId"></u--input>
 		</view>
 		<view class="bg_w rd8 ptb30 pl40 bbox mt40 flex input-height">
 			<image src="@/static/login_ic_phone@2x.png" mode="" class="img40 mr25"></image>
-			<u--input placeholder="鎵嬫満鍙�" border="none" v-model="loginForm.username"></u--input>
+			<u--input placeholder="鎵嬫満鍙�" border="none" v-model="from.username"></u--input>
 		</view>
 		<view class="bg_w rd8 ptb30 pl40 bbox mt40 flex input-height">
 			<image src="@/static/login_ic_password@2x.png" mode="" class="img40 mr25"></image>
-			<u--input placeholder="瀵嗙爜" border="none" v-model="loginForm.password"></u--input>
+			<u--input placeholder="瀵嗙爜" border="none" v-model="from.password"></u--input>
 		</view>
 		<view class="login-btn mt80" @click="loginAction">绔嬪嵆鐧诲綍</view>
 	</view>
 </template>
 
 <script>
-	import { wxAccountLogin, getUserInfo } from '@/util/api/index.js'
+	import { wxLogin, wxAccountLogin, getUserInfo, wxProgramLogin } from '@/util/api/index.js';
 	export default {
 		data() {
 			return {
-				loginForm: {
+				from: {
+					openid: '',
+					unionid: '',
 					companyId: '',
 					username: '',
 					password: ''
 				}
 			};
 		},
+		onLoad() {
+			var that = this
+			uni.login({
+				provider: 'weixin',
+				success: function (loginRes) {
+					wxProgramLogin({ code: loginRes.code })
+						.then(async (res) => {
+							if (res.code === 200) {
+								// 鍏嶇櫥褰曪紝鐩存帴璺抽椤�
+								if (res.data.loginStatus == 0) {
+									that.$store.commit('SETSESSION', res.data.session)
+									let info = await getUserInfo()
+									if (info.code === 200) {
+										await that.$store.commit('setEntrance', 'WX')
+										await that.$store.commit('setUserInfo', info.data)
+										await that.$store.dispatch('getMenuList', 2)
+										uni.switchTab({
+											url: '/pages/workbench/workbench'
+										});
+									}
+								} else {
+									that.from.openid = res.data.openid
+									that.from.unionid = res.data.unionid
+								}
+							}
+						})
+				}
+			});
+		},
 		methods: {
 			async loginAction() {
-				if (!this.loginForm.companyId) return uni.showToast({ title: '浼佷笟浠g爜涓嶈兘涓虹┖', icon:"error", duration: 2000 });
-				if (!this.loginForm.username) return uni.showToast({ title: '鎵嬫満鍙蜂笉鑳戒负绌�', icon:"error", duration: 2000 });
-				if (!this.loginForm.password) return uni.showToast({ title: '瀵嗙爜涓嶈兘涓虹┖', icon:"error", duration: 2000 });
-				let res = await wxAccountLogin({
-					companyId: this.loginForm.companyId,
-					username: this.loginForm.username,
-					password: this.loginForm.password
-				})
+				if (!this.from.companyId) return uni.showToast({ title: '浼佷笟浠g爜涓嶈兘涓虹┖', icon:"error", duration: 2000 });
+				if (!this.from.username) return uni.showToast({ title: '鎵嬫満鍙蜂笉鑳戒负绌�', icon:"error", duration: 2000 });
+				if (!this.from.password) return uni.showToast({ title: '瀵嗙爜涓嶈兘涓虹┖', icon:"error", duration: 2000 });
+				let res = await wxAccountLogin(this.from)
 				if (res.code === 200) {
 					let user = await getUserInfo({})
 					if (user.code === 200) {
 						await this.$store.commit('SETUSERINFO', user.data)
 						await this.$store.dispatch('getMenuList', 2)
-						uni.reLaunch({
+						uni.switchTab({
 							url: '/pages/workbench/workbench'
-						})
+						});
 					}
 				}
 			}
diff --git a/minipro_standard/pages/workbench/workbench.vue b/minipro_standard/pages/workbench/workbench.vue
index 01a623e..089312b 100644
--- a/minipro_standard/pages/workbench/workbench.vue
+++ b/minipro_standard/pages/workbench/workbench.vue
@@ -1,12 +1,12 @@
 <template>
 	<view class="index">
 		<view class="menu">
-			<view class="menu_list" v-for="(row, i) in 3" :key="i">
+			<!-- <view class="menu_list" v-for="(row, i) in Menu" :key="i">
 				<view class="menu_list_head">
-					<span>甯哥敤鍔熻兘</span>
+					<span>{{row.label}}</span>
 				</view>
 				<div class="menu_list_list">
-					<view class="menu_list_item" v-for="item in list" :key="item.id" @click="jump(item)">
+					<view class="menu_list_item" v-for="item in row.children" :key="item.id" @click="jump(item)">
 						<image :src="item.icon" mode="widthFix" />
 						<span>{{item.label}}</span>
 					</view>
@@ -14,19 +14,26 @@
 					<view class="menu_list_zw"></view>
 					<view class="menu_list_zw"></view>
 				</div>
-			</view>
+			</view> -->
 		</view>
 		<myTabbar :index="1" />
 	</view>
 </template>
 
 <script>
-	import myTabbar from "@/components/myTabber.vue"
+	import myTabbar from "@/components/myTabber.vue"
+	import { mapState } from 'vuex'
 	
 	export default {
 		components: {
 			myTabbar
 		},
+		computed: mapState([
+			'Menu'
+		]),
+		onReady() {
+			console.log(this.Menu)
+		},
 		data() {
 			return {
 				list: [
diff --git a/minipro_standard/pages_adjust/components/user.vue b/minipro_standard/pages_adjust/components/user.vue
new file mode 100644
index 0000000..ad496c9
--- /dev/null
+++ b/minipro_standard/pages_adjust/components/user.vue
@@ -0,0 +1,127 @@
+<template>
+	<u-popup :show="show" mode="bottom" :closeable="true" :round="10" @open="open" @close="close">
+		<view class="title">
+			<text>閫夋嫨鐢熶骇浜哄憳</text>
+		</view>
+		<view class="content">
+			<view class="content_search">
+				<u-search :showAction="false" placeholder="鎼滅储濮撳悕" v-model="keyword"></u-search>
+			</view>
+			<div class="content_total">鍏眥{total}}鏉℃暟鎹�</div>
+			<scroll-view class="content_list" scroll-y>
+				<div class="content_list_item" v-for="(item, index) in indexList" :key="index" @click="getVal(item)">
+					<div class="content_list_item_name">
+						<span>{{item.name}}</span>
+					</div>
+				</div>
+			</scroll-view>
+		</view>
+	</u-popup>
+</template>
+
+<script>
+	export default {
+		props: {
+			show: Boolean
+		},
+		data() {
+			return {
+				keyword: '',
+				total: 0,
+				indexList: []
+			};
+		},
+		methods: {
+			getVal(item) {
+				this.$emit('value', item)
+			},
+			open() {
+				this.indexList = []
+				this.loadmore()
+			},
+			scrolltolower() {
+				this.loadmore()
+			},
+			loadmore() {
+				for (let i = 0; i < 20; i++) {
+					this.indexList.push({
+						id: i,
+						name: `鏉庝紵锝滅敓浜ч儴锝�${i}`
+					})
+				}
+			},
+			close() {
+				this.$emit('close')
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.title {
+        width: 100%;
+		height: 85rpx;
+		line-height: 85rpx;
+		text-align: center;
+		text {
+			font-size: 30rpx;
+			font-family: PingFangSC-Medium, PingFang SC;
+			font-weight: 500;
+			color: #222222;
+		}
+    }
+	.content {
+		width: 100%;
+		.content_search {
+			width: 100%;
+			padding: 0 30rpx 30rpx 30rpx;
+			background: white;
+			position: sticky;
+			top: 85rpx;
+			z-index: 9;
+			box-sizing: border-box;
+		}
+		.content_total {
+			padding: 24rpx 30rpx;
+			background: #F7F7F7;
+			font-size: 24rpx;
+			font-weight: 400;
+			color: #666666;
+		}
+		.content_list {
+			width: 100%;
+			height: 800rpx;
+			display: flex;
+			flex-direction: column;
+			.content_list_item {
+				padding: 30rpx;
+				display: flex;
+				border-bottom: 1rpx solid #ececec;
+				.serious {
+					color: $nav-stateColor4 !important;
+				}
+				.success {
+					color: $nav-stateColor2 !important;
+				}
+				.warning {
+					color: $nav-stateColor5 !important;
+				}
+				.content_list_item_status {
+					font-size: 28rpx;
+					margin-right: 10rpx;
+				}
+				.content_list_item_name {
+					width: 100%;
+					display: flex;
+					align-items: center;
+					span {
+						font-size: 30rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #222222;
+					}
+				}
+			}
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/minipro_standard/pages_adjust/pages/processPlan/processPlan.vue b/minipro_standard/pages_adjust/pages/processPlan/processPlan.vue
new file mode 100644
index 0000000..66b5a4c
--- /dev/null
+++ b/minipro_standard/pages_adjust/pages/processPlan/processPlan.vue
@@ -0,0 +1,404 @@
+<template>
+	<view class="content">
+		<view class="content_search">
+			<Search @searchInput="searchInput" @submit="submit" placeholder="鎼滅储鐗╂枡鍚嶇О/缂栫爜/宸ュ簭鍚嶇О" />
+		</view>
+		<view class="content_list">
+			<scroll-view @scrolltolower="getLists" scroll-y :style="{height: height}">
+				<view class="content_list_item" v-for="(item, i) in listData" :key="i" @click="clickItem(item)">
+					<view class="content_list_item_title">
+						<text>{{item.materialName}}锝渰{item.produceName}}</text>
+						<view class="content_list_item_title_tips" v-if="item.urgent">浼樺厛{{ item.urgent }}</view>
+					</view>
+					<view class="content_list_item_nr">
+						<view class="content_list_item_nr_box">
+							<view class="label">鐗╂枡缂栫爜锛�</view>
+							<view class="cr">{{item.materialName}}涓▄{item.materialCode}}</view>
+						</view>
+						<view class="content_list_item_nr_box">
+							<view class="label">璁″垝鏁伴噺锛�</view>
+							<view class="cr">{{item.num}}{{item.umodel.name}}</view>
+						</view>
+						<view class="content_list_item_nr_box">
+							<view class="label">璁″垝鏃ユ湡锛�</view>
+							<view class="cr">{{item.workPlanStartDate}} ~ {{item.workPlanEndDate}}</view>
+						</view>
+						<view class="content_list_item_nr_box">
+							<view class="label">璁″垝鍛橈細</view>
+							<view class="cr">{{item.planUserName}}</view>
+						</view>
+						<view class="content_list_item_nr_box">
+							<view class="label">鐢熶骇鎵规锛�</view>
+							<view class="cr">{{item.batch}}</view>
+						</view>
+						<view class="content_list_item_nr_box" v-if="item.salesOrder">
+							<view class="label">閿�鍞鍗曪細</view>
+							<view class="cr">{{ item.salesOrder }}</view>
+						</view>
+					</view>
+				</view>
+			</scroll-view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import Search from '@/components/Search.vue'
+	export default {
+		components: {
+			Search
+		},
+		data() {
+			return {
+				pageData: {
+					capacity: 10,
+					page: 0,
+					total: 0,
+					name: ''
+				},
+				loading: false,
+				finished: false,
+				refreshing: false,
+				height: '',
+				listData: []
+			};
+		},
+		onReady() {
+			var that = this
+			this.$nextTick(() => {
+				uni.createSelectorQuery().in(this).select('.content_search').boundingClientRect((rect) => {
+					that.height = `calc(100vh - ${rect.height}px)`
+				}).exec()
+			})
+		},
+		methods: {
+			clickItem(obj) {
+				uni.navigateBack({ delta: 1 });
+			},
+			// 鑾峰彇澶撮儴缁勪欢楂樺害
+			getHeight(height) {
+				this.height = height
+			},
+			// 鎼滅储
+			searchInput(val) {
+				this.listData.mixParam = val
+				this.listData.page = 0
+				this.finished = false
+				this.lists = []
+				this.getLists()
+			},
+			// 鐐瑰嚮鏍囩鎼滅储
+			clickTag(ids) {
+				this.listData.cateIds = ids
+				this.listData.page = 0
+				this.finished = false
+				this.lists = []
+				// this.getLists()
+			},
+			// 鑾峰彇鍒楄〃缁熻
+			pageCounts() {
+				pageCount({
+					factoryId: this.listData.departIds,
+					procedureIdList: this.listData.procedureIds ? this.listData.procedureIds : [],
+					startDate: this.listData.startDate,
+					endDate: this.listData.endDate,
+					statusList: this.listData.cateIds
+				}).then(res => {
+					if (res.code === 200 && res.data) {
+						this.tagList[0].num = res.data.allNum.toString()
+						this.tagList[1].num = res.data.startNum.toString()
+						this.tagList[2].num = res.data.ingNum.toString()
+						this.tagList[3].num = res.data.endNum.toString()
+					}
+				})
+			},
+			// 鑾峰彇宸ュ巶鏁版嵁
+			getOrganizations() {
+				getOrganization({
+					type: 1
+				}).then(res => {
+					if (res.code === 200 && res.data && res.data.length !== 0) {
+						res.data.forEach((item, i) => {
+							item.isActive = i === 0;
+						})
+						if (res.data.length > 0) {
+							this.factoryList = res.data
+							this.listData.departIds = this.factoryList[0].id
+							this.listData.procedureIds = ''
+							this.finished = false
+							this.getWorkingProcedures(this.factoryList[0].id)
+							this.getLists()
+							this.pageCounts()
+						}
+					}
+				})
+			},
+			// 鑾峰彇宸ュ簭鏁版嵁
+			getWorkingProcedures(orgId) {
+				this.data = []
+				getWorkingProcedure({
+						orgId
+					})
+					.then(res => {
+						if (res.code === 200 && res.data && res.data.length !== 0) {
+							res.data.forEach((item, i) => {
+								item.isActive = false;
+							})
+							this.data = res.data
+						}
+					})
+			},
+			// 鎼滅储寮规鎻愪氦
+			submit() {
+				let pmodelOrgId = []
+				this.data.forEach((item) => {
+					if (item.isActive) {
+						pmodelOrgId.push(item.id)
+					}
+				})
+				this.listData.procedureIds = pmodelOrgId
+				this.listData.page = 0
+				this.finished = false
+				this.lists = []
+				// this.getLists()
+				// this.pageCounts()
+			},
+			// 鑾峰彇璁″垝鍒楄〃鏁版嵁
+			getLists() {
+				console.log('getLists')
+				if (!this.finished) {
+					this.pageData.page = this.pageData.page + 1
+					this.loading = true
+					getList({
+						capacity: this.pageData.capacity,
+						page: this.pageData.page,
+						model: {
+							mixParam: this.pageData.name,
+							statusList: [1, 4],
+							paused: 0
+						},
+						sorts: [
+							{ direction: 'DESC', property: 'CREATE_TIME' }
+						]
+					}).then(res => {
+						if (this.refreshing) {
+							this.listData = []
+							this.refreshing = false;
+						}
+						this.loading = false
+						if (res.code === 200 && res.data.records && res.data.records.length !== 0) {
+							this.pageData.total = res.data.total
+							this.listData.push(...res.data.records)
+						} else {
+							this.finished = true
+						}
+					}).catch(err => {
+						this.loading = false
+						this.finished = true
+						if (this.refreshing) {
+							this.listData = []
+							this.refreshing = false;
+						}
+					})
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.content {
+		.content_search {
+			width: 100%;
+			padding: 30rpx;
+			background: white;
+			position: sticky;
+			top: 0;
+			z-index: 999;
+			box-sizing: border-box;
+
+			.Search_item {
+				margin-bottom: 40rpx;
+
+				.Search_item_label {
+					font-size: 30rpx;
+					font-weight: 500;
+					color: #222222;
+				}
+
+				.Search_item_content {
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					margin-top: 30rpx;
+
+					.tag {
+						display: flex;
+						flex-wrap: wrap;
+						align-items: center;
+
+						.tag_active {
+							background: $nav-color !important;
+							color: #ffffff !important;
+						}
+
+						.tag_item {
+							padding: 22rpx 26rpx;
+							box-sizing: border-box;
+							background: #F2F2F2;
+							border-radius: 8rpx;
+							font-size: 26rpx;
+							font-weight: 400;
+							color: #333333;
+							display: flex;
+							align-items: center;
+							justify-content: center;
+							margin-right: 22rpx;
+							margin-bottom: 22rpx;
+						}
+					}
+
+					text {
+						font-size: 26rpx;
+						font-weight: 400;
+						color: #333333;
+						margin: 0 30rpx;
+					}
+
+					.Search_item_content_a {
+						padding: 20rpx 0;
+						flex: 1;
+						background: #F7F7F7;
+						border-radius: 8rpx;
+						border: 1rpx solid #EEEEEE;
+						font-size: 26rpx;
+						font-weight: 400;
+						color: #B2B2B2;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+					}
+				}
+			}
+
+			.content_search_x {
+				height: 24rpx;
+			}
+		}
+
+		.content_list {
+			width: 100%;
+			display: flex;
+			flex-direction: column;
+
+			.content_list_item {
+				width: 100%;
+				box-sizing: border-box;
+				padding: 30rpx;
+				background: #ffffff;
+				margin-bottom: 20rpx;
+				&:last-child {
+					margin-bottom: 0 !important;
+				}
+				.content_list_item_title {
+					display: flex;
+					align-items: center;
+					.content_list_item_title_tips {
+						padding: 4rpx 8rpx;
+						box-sizing: border-box;
+						background: #DE5243;
+						border-radius: 8rpx;
+						font-size: 22rpx;
+						font-family: PingFangSC-Regular, PingFang SC;
+						font-weight: 400;
+						color: #FFFFFF;
+						margin-left: 16rpx;
+					}
+					.warning {
+						color: $nav-stateColor1 !important;
+					}
+					.green {
+						color: $nav-stateColor6 !important;
+					}
+					text {
+						font-size: 32rpx;
+						font-family: PingFangSC-Medium, PingFang SC;
+						font-weight: 500;
+						color: #333333;
+					}
+				}
+				.content_list_item_nr {
+					padding: 24rpx 30rpx;
+					background: #F7F7F7;
+					border-radius: 16rpx;
+					margin-top: 30rpx;
+					display: flex;
+					justify-content: space-between;
+					flex-wrap: wrap;
+					.content_list_item_nr_boxs {
+						width: 45%;
+						display: flex;
+						margin-top: 24rpx;
+						&:nth-child(1) {
+							margin-top: 0;
+						}
+						&:nth-child(2) {
+							margin-top: 0;
+						}
+						.warning {
+							color: $nav-stateColor4 !important;
+						}
+						.label {
+							flex-shrink: 0;
+							font-size: 24rpx;
+							font-weight: 400;
+							color: #666666;
+						}
+						.cr {
+							flex: 1;
+							font-size: 24rpx;
+							font-weight: 400;
+							color: #222222;
+							overflow: hidden;
+							white-space: nowrap;
+							text-overflow: ellipsis;
+							-o-text-overflow:ellipsis;
+						}
+					}
+					.content_list_item_nr_box {
+						width: 100%;
+						display: flex;
+						margin-top: 24rpx;
+						&:nth-child(1) {
+							margin-top: 0;
+						}
+						.label {
+							font-size: 24rpx;
+							font-weight: 400;
+							color: #666666;
+							flex-shrink: 0;
+						}
+						.cr {
+							font-size: 24rpx;
+							font-weight: 400;
+							color: #222222;
+						}
+					}
+				}
+			}
+		}
+
+		.content_total {
+			width: 100%;
+			height: 80rpx;
+			padding: 24rpx 30rpx;
+			background: #F7F7F7;
+			font-size: 24rpx;
+			font-weight: 400;
+			box-sizing: border-box;
+			color: #666666;
+			position: sticky;
+			z-index: 99;
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/minipro_standard/pages_adjust/pages/reportingForWork/reportingForWork.vue b/minipro_standard/pages_adjust/pages/reportingForWork/reportingForWork.vue
new file mode 100644
index 0000000..b2445d8
--- /dev/null
+++ b/minipro_standard/pages_adjust/pages/reportingForWork/reportingForWork.vue
@@ -0,0 +1,1071 @@
+<template>
+	<view class="bg">
+		<view class="bg_plan" @click="selectPlan">
+			<view class="bg_plan_label" v-if="!from.processPlan">
+				<text><b>*</b>宸ュ簭鐢熶骇璁″垝</text>
+			</view>
+			<view class="bg_plan_nr" v-else>
+				<text>{{ from.processPlan.materialName }} | {{ from.processPlan.materialCode }} | {{ from.processPlan.produceName }}</text>
+				<text>{{ from.processPlan.batch }}{{ from.processPlan.salesOrder ? ` / ${from.processPlan.salesOrder}` : '' }}</text>
+				<text>璁″垝鏃堕棿锛歿{ from.processPlan.workPlanStartDate }} ~ {{ from.processPlan.workPlanEndDate }}</text>
+				<text>璁″垝杩涘害锛歿{from.processPlan.num}}/{{from.processPlan.workorderDistributNum}}{{ from.processPlan.unitName }}</text>
+			</view>
+			<view class="bg_plan_label_val">
+				<text v-if="!from.processPlan">璇烽�夋嫨</text>
+				<image src="@/static/ic_ar@2x.png" alt="" />
+			</view>
+		</view>
+		<view class="bg_list">
+			<view class="bg_list_item">
+				<view class="bg_list_item_top">
+					<view class="bg_list_item_top_left">
+						<view class="bg_list_item_top_left_x"></view>
+						<text>鐢熶骇淇℃伅</text>
+					</view>
+				</view>
+				<view class="bg_list_item_h">
+					<view class="bg_list_item_num" @click="openDev">
+						<view class="bg_list_item_num_item">
+							<text>鐢熶骇璁惧</text>
+							<view class="bg_list_item_num_item_sr">
+								<text :style="{color: from.deviceName ? '#333' : ''}">{{from.deviceName ? from.deviceName : '璇烽�夋嫨'}}</text>
+								<image src="@/static/ic_ar@2x.png" alt="" />
+							</view>
+						</view>
+					</view>
+					<view class="bg_list_item_num" @click="userShow = true">
+						<view class="bg_list_item_num_item">
+							<text>鐢熶骇浜哄憳</text>
+							<view class="bg_list_item_num_item_sr">
+								<text :style="{color: from.userName ? '#333' : ''}">{{from.userName ? from.userName : '璇烽�夋嫨'}}</text>
+								<image src="@/static/ic_ar@2x.png" alt="" />
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="bg_list_item">
+				<view class="bg_list_item_top">
+					<view class="bg_list_item_top_left">
+						<view class="bg_list_item_top_left_x"></view>
+						<text>鐢熶骇鎶曟枡</text>
+					</view>
+					<view class="bg_list_item_top_right" @click="openMaterial" v-if="(hasBom == 1 && bomType != 1) || hasBom == 0">
+						<image src="@/static/gongdan_ic_shoudong@2x.png" alt="" />
+						<text>鏂板鎶曟枡</text>
+					</view>
+				</view>
+				<template v-if="wuList.length > 0 && !(hasBom == 1 && bomType == 1)">
+					<van-swipe-cell v-for="(item, index) in wuList" :key="index">
+						<view class="bg_list_item_h">
+							<view class="bg_list_item_num">
+								<view class="bg_list_item_num_item">
+									<view class="bg_list_item_num_item_wl">
+										<text>{{ item.materialName }}{{ item.procedureName ? ` | ${item.procedureName}` : '' }}</text>
+										<view class="bg_list_item_num_item_wl_lx">
+											<text class="green" v-if="item.qualityType == 0">鍚堟牸&nbsp;/&nbsp;</text>
+											<text class="yellow" v-if="item.qualityType == 1">涓嶈壇&nbsp;/&nbsp;</text>
+											<text class="red" v-if="item.qualityType == 2">鎶ュ簾&nbsp;/&nbsp;</text>
+											<text>{{ item.locationName }}&nbsp;/&nbsp;</text>
+											<text>{{ item.batch }}</text>
+										</view>
+									</view>
+									<view class="bg_list_item_num_item_sr">
+										<u--input
+										    placeholder="璇疯緭鍏�"
+										    border="surround"
+											type="number"
+											:customStyle="{width: '180rpx'}"
+										    v-model="item.num"
+											@input="inputwl(index)"
+										  ></u--input>
+										<!-- <input type="number" v-model="item.num" @input="inputwl(index)" /> -->
+										<text>{{ item.unitName }}</text>
+									</view>
+								</view>
+							</view>
+						</view>
+						<template #right>
+							<van-button style="height: 100%;" @click="deleItem(index)" square text="鍒犻櫎" type="danger" />
+						</template>
+					</van-swipe-cell>
+				</template>
+				<template v-else-if="wuList.length == 0 && !(hasBom == 1 && bomType == 1)">
+					<view class="kong">
+						<text>鏆傛棤鏁版嵁</text>
+					</view>
+				</template>
+				<view class="kong" v-if="hasBom == 1 && bomType == 1">
+					<text>褰撳墠宸ュ簭鏃犻渶鎶曟枡</text>
+				</view>
+			</view>
+			<view class="bg_list_item bottomval">
+				<view class="bg_list_item_top">
+					<view class="bg_list_item_top_left">
+						<view class="bg_list_item_top_left_x"></view>
+						<text>浜у嚭鏄庣粏</text>
+					</view>
+				</view>
+				<view class="bg_list_item_h">
+					<view class="bg_list_item_num">
+						<view class="bg_list_item_num_item">
+							<text><b>*</b>鑹搧鏁�</text>
+							<view class="bg_list_item_num_item_sr">
+								<u--input
+								    placeholder="璇疯緭鍏�"
+								    border="surround"
+									type="number"
+									:customStyle="{width: '180rpx'}"
+								    v-model="from.qualified"
+									@input="changeNum(1)"
+								  ></u--input>
+								<!-- <input type="number" v-model="from.qualified" @input="changeNum(1)" placeholder="璇疯緭鍏�" /> -->
+								<text v-if="from.processPlan">{{from.processPlan.unitName}}</text>
+							</view>
+						</view>
+					</view>
+					<view class="bg_list_item_num">
+						<view class="bg_list_item_num_item">
+							<text>涓嶈壇鏁�</text>
+							<view class="bg_list_item_num_item_sr">
+								<u--input
+								    placeholder="璇疯緭鍏�"
+								    border="surround"
+									type="number"
+									:customStyle="{width: '180rpx'}"
+								    v-model="from.undesirable"
+									@input="changeNum(2)"
+								  ></u--input>
+								<!-- <input type="number" v-model="from.undesirable" @input="changeNum(2)" placeholder="璇疯緭鍏�" /> -->
+								<text v-if="from.processPlan">{{from.processPlan.unitName}}</text>
+							</view>
+						</view>
+					</view>
+					<view class="bg_list_item_num" v-if="from.undesirable > 0">
+						<view class="bg_list_item_num_item" @click="openBL">
+							<text><b>*</b>涓嶈壇椤�</text>
+							<view class="bg_list_item_num_item_sr">
+								<text class="wulll" :style="{color: from.defectiveName ? '#305ED5' : ''}">{{from.defectiveName ? from.defectiveName : '璁剧疆'}}</text>
+								<image src="@/static/ic_ar@2x.png" alt="" />
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="bg_plan" @click="TimeShow = true">
+				<view class="bg_plan_label">
+					<text>鎶ュ伐鏃堕暱</text>
+				</view>
+				<view class="bg_plan_label_val">
+					<text :style="{color: from.durationName ? '#333' : ''}">{{from.durationName ? from.durationName : '璇烽�夋嫨'}}</text>
+					<image src="@/static/ic_ar@2x.png" alt="" />
+				</view>
+			</view>
+			<view class="bg_list_item" v-if="arrType && arrType.length > 0">
+				<view class="bg_list_item_top">
+					<view class="bg_list_item_top_left">
+						<view class="bg_list_item_top_left_x"></view>
+						<text>宸ヨ祫缁╂晥</text>
+					</view>
+				</view>
+				<view class="bg_list_item_h">
+					<view class="bg_list_item_num">
+						<view class="bg_list_item_num_item">
+							<text>璁′欢鏂瑰紡</text>
+							<view class="bg_list_item_num_item_list">
+								<view :class="item.active ? 'bg_list_item_num_item_list_item active' : 'bg_list_item_num_item_list_item'" v-for="(item, index) in arrType" :key="index" @click="clickPerformanceType(index)">{{ item.name }}</view>
+							</view>
+						</view>
+					</view>
+					<view class="bg_list_item_num">
+						<view class="bg_list_item_num_item">
+							<text>宸ヨ祫鍗曚环</text>
+							<view class="bg_list_item_num_item_sr">
+								<text class="color1">{{(arrType[from.index].salary / 10 / 10).toFixed(2)}}鍏�/{{arrType[from.index].type == 0 ? '浠�' : '鏃�'}}</text>
+							</view>
+						</view>
+					</view>
+					<view class="bg_list_item_num">
+						<view class="bg_list_item_num_item">
+							<text>棰勮宸ヨ祫</text>
+							<view class="bg_list_item_num_item_sr">
+								<text class="color1">{{expectedSalary}}鍏�</text>
+							</view>
+						</view>
+					</view>
+					<view class="bg_list_item_num">
+						<view class="bg_list_item_num_item">
+							<text>杈炬爣鐜�</text>
+							<view class="bg_list_item_num_item_sr">
+								<text class="color1">{{complianceRate}}%</text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!--  鎶ュ伐鎸夐挳  -->
+		<view class="bh_zw"></view>
+		<view class="bg_footer">
+			<view class="bg_footer_submit1" @click="continueSubmit">缁х画鎶ュ伐</view>
+			<view class="bg_footer_submit" @click="submit">鎻愪氦</view>
+		</view>
+		<!-- 鐢熶骇浜哄憳 -->
+		<user :show="userShow" @close="userShow = false" @value="onConfirm1" />
+		<!-- 鐢熶骇璁惧 -->
+		<u-picker :show="deviceShow" :columns="deviceList" keyName="name" @confirm="onConfirm" @cancel="onCancel"></u-picker>
+		<!-- 鏃堕棿 -->
+		<u-picker :show="TimeShow" :columns="columns" @confirm="onConfirm2" @cancel="TimeShow = false"></u-picker>
+		<!-- 鐗╂枡 -->
+		<selectMaterial ref="selectMaterial" @selectAction="getValue" />
+		<!-- 涓嶈壇椤� -->
+		<u-popup :show="show" @close="show = false" :round="8" closeable zIndex="20000">
+			<view class="rp p40 contanir">
+				<view class="c2 b tc">涓嶈壇椤�</view>
+				<view class="content bl_list">
+					<div class="bl_list_item" v-for="(item, i) in cateList" :key="i" @click="changeChecked(i)">
+						<div class="bl_list_item_left">
+							<u-checkbox-group>
+								<u-checkbox :checked="item.active" :label="item.name" :name="item.name"></u-checkbox>
+							</u-checkbox-group>
+						</div>
+						<div class="bl_list_item_right">
+							<input type="number" @click.stop v-model="item.num" placeholder="0" />
+						</div>
+					</div>
+				</view>
+				<view class="flex ap tc bottom-view">
+					<view class="fx1 ml20 ptb20 sbtn_green" @click="onConfirm3">纭畾</view>
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import user from '../../components/user.vue'
+	import selectMaterial from '@/components/selectMaterial.vue'
+	export default {
+		components: {
+			user,
+			selectMaterial
+		},
+		data() {
+			return {
+				from: {
+					processPlan: null,
+					deviceId: '',
+					deviceName: '',
+					// userId: store.state.userInfo.id,
+					userId: '',
+					// userName: store.state.userInfo.companyUser.name,
+					userName: '',
+					qualified: '',  // 鑹搧鏁�
+					undesirable: '', // 涓嶈壇鏁�
+					duration: '',
+					durationName: '0灏忔椂0鍒嗛挓',
+					time: '',
+					defective: [],
+					defectiveName: '',
+					type: '',    // 缁╂晥绫诲瀷
+					index: 0
+				},
+				columns: [],
+				arrType: [],
+				bomType: '',
+				hasBom : '',
+				deviceShow: false,
+				userShow: false,
+				wuList: [],
+				deviceList: [],
+				cateList: [
+					{
+						active: false,
+						num: '',
+						name: '鏈夌憰鐤�'
+					}
+				],
+				total: 0,	// 鍙姇鏁伴噺
+				ids: '',
+				plansId: '',
+				deviceId: '',
+				TimeShow: '',
+				show1: '',
+				show: false
+			};
+		},
+		computed: {
+			// 棰勮宸ヨ祫
+			expectedSalary() {
+				if (this.arrType.length === 0) return 0;
+				if (this.arrType[from.index].type == 0) {
+					if (!this.from.qualified) return 0
+					if (this.arrType[from.index].unqualified == 1) {   // 鏄惁璁″叆涓嶈壇鍝�
+						let total = Number(this.from.qualified) + Number(this.from.undesirable)
+						return (total * (this.arrType[from.index].salary / 10 / 10)).toFixed(2)
+					} else {
+						return (Number(this.from.qualified) * (this.arrType[from.index].salary / 10 / 10)).toFixed(2)
+					}
+				} else {
+					if (!this.from.duration) return 0;
+					let h = (this.from.duration / 60 / 60).toFixed(2)
+					return (Number(h) * (this.arrType[from.index].salary / 10 / 10)).toFixed(2)
+				}
+			},
+			// 杈炬爣鐜�
+			complianceRate() {
+				if (this.arrType.length === 0) return 0;
+				if (!this.from.qualified && !this.from.undesirable) return 0;
+				if (!this.from.duration) return 0;
+				if (!this.arrType[from.index].num) return 0;
+				if (this.arrType[from.index].unqualified == 1) {   // 鏄惁璁″叆涓嶈壇鍝�
+					let a = ((Number(this.from.qualified) + Number(this.from.undesirable)) / (this.from.duration / 3600)).toFixed(2)
+					let b = (this.arrType[from.index].num / (this.arrType[from.index].times / 3600)).toFixed(2)
+					return ((Number(a) / Number(b)) * 100).toFixed(2)
+				} else {
+					let a = (this.from.qualified / (this.from.duration / 3600)).toFixed(2)
+					let b = (this.arrType[from.index].num / (this.arrType[from.index].times / 3600)).toFixed(2)
+					return ((Number(a) / Number(b)) * 100).toFixed(2)
+				}
+			}
+		},
+		onLoad() {
+			let arr = []
+			for(let i = 0; i < 60; i++) {
+				arr.push(i)
+			}
+			this.columns = [arr, arr]
+		},
+		methods: {
+			// 鍒囨崲缁╂晥绫诲瀷
+			clickPerformanceType(i) {
+				this.from.index = i
+				this.arrType.forEach((item, index) => {
+					if (i === index) {
+						from.type = item.id
+					}
+					item.active = index === i
+				})
+			},
+			// 閫夋嫨鐗╂枡
+			getValue(val) {
+				let obj = JSON.parse(JSON.stringify(val))
+				obj.total = val.num
+				this.wuList.unshift(obj)
+				let arr = this.wuList.map(item => item.id)
+				this.ids = arr.join(',')
+			},
+			// 鑾峰彇涓嶈壇椤圭洰
+			getData() {
+				categoryExtList({
+					cateType: "3"
+				}).then(res => {
+					if (res.code === 200) {
+						res.data.forEach(item => {
+							item.active = false
+							item.num = ''
+						})
+						this.cateList = res.data
+					}
+				})
+			},
+			// 閫夋嫨璁惧
+			onConfirm(e) {
+				this.from.deviceId = e.id
+				this.from.deviceName = e.name
+				this.deviceId = e.id
+				this.from.userId = ''
+				this.from.userName = ''
+				// getFindAll({
+				//     deviceId: e.id,
+				//     planId: from.processPlan.id
+				// }).then(res => {
+				//     if (res.code === 200) {
+				//         res.data.forEach((item: any) => {
+				//             item.name = item.umodel.name + '-' + item.tmodel.name
+				//         })
+				//         userList.value = res.data
+				//     }
+				// })
+				this.deviceShow = false
+			},
+			// 閫夋嫨涓嶈壇椤�
+			onConfirm3() {
+				let isOpen = false
+				this.cateList.forEach((item, index) => {
+					if (item.active) {
+						isOpen = true
+					}
+				})
+				if (!isOpen) return uni.showToast({ title: '璇烽�夋嫨涓嶈壇椤�', icon: 'none', duration: 2000 });
+				let arr = []
+				let total = 0
+				let name = ''
+				for (let i = 0; i < this.cateList.length; i++) {
+					if (this.cateList[i].active) {
+						if (this.cateList[i].num <= 0) {
+							return uni.showToast({ title: '涓嶈壇鏁伴噺蹇呴』澶т簬0', icon: 'none', duration: 2000 });
+						}
+						total = total += this.cateList[i].num
+						arr.push(this.cateList[i])
+						name += this.cateList[i].name + this.cateList[i].num + '锛�'
+					}
+				}
+				if (total !== this.from.undesirable) return uni.showToast({ title: '涓嶈壇鏁板繀椤荤瓑浜庝骇鍑轰笉鑹暟', icon: 'none', duration: 2000 });
+				this.from.defective = arr
+				this.from.defectiveName = name
+				this.show = false
+			},
+			changeChecked(i) {
+				this.cateList[i].active = !this.cateList[i].active
+			},
+			onConfirm2(e) {
+				let h = e.value[0]
+				let m = e.value[1]
+				let s = 0
+				if (h > 0) {
+					s += h * 60 * 60
+				}
+				if (m > 0) {
+					s += m * 60
+				}
+				this.from.duration = s
+				this.from.durationName = `${h}灏忔椂${m}鍒嗛挓`
+				this.TimeShow = false
+			},
+			onConfirm1(e) {
+				this.from.userId = e.userId
+				this.from.userName = e.name
+				this.userShow = false
+			},
+			selectPlan() {
+				uni.navigateTo({
+					url: '/pages_adjust/pages/processPlan/processPlan'
+				});
+			},
+			openDev() {
+				if (!this.from.processPlan) return uni.showToast({ title: '璇峰厛閫夋嫨宸ュ簭鐢熶骇璁″垝', icon: 'none', duration: 2000 });
+				this.deviceShow = true
+			},
+			openMaterial() {
+				if (!this.plansId) return uni.showToast({ title: '璇峰厛閫夋嫨宸ュ簭鐢熶骇璁″垝', icon: 'none', duration: 2000 });
+				if (!this.deviceId) return uni.showToast({ title: '璇峰厛閫夋嫨鐢熶骇璁惧', icon: 'none', duration: 2000 });
+				this.$refs.selectMaterial.open({})
+			},
+			inputwl(i) {
+				if (this.wuList[i].num > this.wuList[i].total) {
+					this.wuList[i].num = ''
+					uni.showToast({ title: '鎶曟枡鏁伴噺涓嶈兘澶т簬搴撳瓨鏁伴噺', icon: 'none', duration: 2000 });
+				}
+			},
+			deleItem(index) {
+				if (this.wuList.length === 1) return uni.showToast({ title: '鑷冲皯淇濈暀涓�椤瑰唴瀹�', icon: 'none', duration: 2000 });
+				this.wuList.splice(index, 1)
+			},
+			// 浜у嚭鏁伴噺楠岃瘉
+			changeNum(type) {
+				let num = this.total - (Number(this.from.qualified) + Number(this.from.undesirable))
+				if (type == 2) {
+					this.from.defective = []
+					this.from.defectiveName = ''
+				}
+				if (num < 0) {
+					uni.showToast({ title: '浜у嚭鏁伴噺涓嶈兘澶т簬鍙骇鍑烘暟閲忥紒', icon: 'none', duration: 2000 });
+					if (type == 1) {
+						this.from.qualified = ''
+					} else {
+						this.from.undesirable = ''
+					}
+				}
+			},
+			openBL() {
+				this.cateList.forEach(item => {
+					if (!item.active) {
+						item.num = ''
+					}
+					if (item.active && item.num <= 0) {
+						item.active = false
+					}
+				})
+				this.show = true
+			},
+			// 缁х画鎶ュ伐
+			continueSubmit() {
+				if (!this.from.processPlan) return uni.showToast({ title: '璁″垝涓嶈兘涓虹┖', icon: 'none', duration: 2000 });
+				if (!this.from.deviceId) return uni.showToast({ title: '璁惧涓嶈兘涓虹┖', icon: 'none', duration: 2000 });
+				if (!this.from.userId) return uni.showToast({ title: '鐢熶骇浜哄憳涓嶈兘涓虹┖', icon: 'none', duration: 2000 });
+				if (this.hasBom == 1 && this.bomType == 1) {
+					console.log('涓嶉渶瑕佹姇鏂�')
+				} else {
+					if (!this.wuList.length === 0) return uni.showToast({ title: '鎶曟枡涓嶈兘涓虹┖', icon: 'none', duration: 2000 });
+				}
+				if (!this.from.qualified && !this.from.undesirable) {
+					return uni.showToast({ title: '鑹搧鏁颁笌涓嶈壇鏁颁笉鑳藉悓鏃朵负绌�', icon: 'none', duration: 2000 });
+				}
+				if (this.from.qualified && this.from.qualified <= 0) {
+					return uni.showToast({ title: '鑹搧鏁板繀椤诲ぇ浜�0', icon: 'none', duration: 2000 });
+				}
+				if (this.from.undesirable && this.from.undesirable <= 0) {
+					return uni.showToast({ title: '涓嶈壇鍝佹暟蹇呴』澶т簬0', icon: 'none', duration: 2000 });
+				}
+				// 鏈変笉鑹暟
+				if (this.from.undesirable > 0) {
+					if (this.from.defective.length === 0) return uni.showToast({ title: '涓嶈壇椤逛笉鑳戒负绌�', icon: 'none', duration: 2000 });
+				}
+				let type = ''
+				this.arrType.forEach(item => {
+					if (item.active) {
+						type = item.id
+					}
+				})
+				autoWorkReport({
+					createWorkorderRecordDTO: {
+						type,
+						duration: this.from.duration,
+						qualifiedNum: this.from.qualified ? this.from.qualified : 0,
+						unQualifiedNum: this.from.undesirable ? this.from.undesirable : 0
+					},
+					plansId: this.from.processPlan.id,
+					proGroupId: this.deviceId,
+					proUserList: [this.from.userId],
+					recordList: this.wuList.map(item => {
+						return {
+							wstockId: item.id,
+							num: item.num
+						}
+					}),
+					createUnqualifiedDTOList: this.from.defective.map(item => {
+						return {
+							categoryId: item.id,
+							unQualifiedNum: item.num
+						}
+					})
+				}).then(res => {
+					if (res.code === 200) {
+						uni.showToast({ title: '鎶ュ伐鎴愬姛锛�', icon: 'success', duration: 2000 });
+						this.from.processPlan = null
+						this.from.deviceId = ''
+						this.from.deviceName = ''
+						this.from.userId = ''
+						this.from.userName = ''
+						this.from.qualified = ''
+						this.from.undesirable = ''
+						this.from.duration = ''
+						this.from.durationName = '0灏忔椂0鍒嗛挓'
+						this.from.time = ''
+						this.from.defective = []
+						this.from.defectiveName = ''
+						this.wuList = []
+						this.deviceId = ''
+						this.plansId = ''
+						this.ids = ''
+						this.total = ''
+					}
+				})
+			},
+			// 鎶ュ伐
+			submit() {
+				if (!this.from.processPlan) return uni.showToast({ title: '璁″垝涓嶈兘涓虹┖', icon: 'none', duration: 2000 });
+				if (!this.from.deviceId) return uni.showToast({ title: '璁惧涓嶈兘涓虹┖', icon: 'none', duration: 2000 });
+				if (!this.from.userId) return uni.showToast({ title: '鐢熶骇浜哄憳涓嶈兘涓虹┖', icon: 'none', duration: 2000 });
+				if (this.hasBom == 1 && this.bomType == 1) {
+					console.log('涓嶉渶瑕佹姇鏂�')
+				} else {
+					if (!this.wuList.length === 0) return uni.showToast({ title: '鎶曟枡涓嶈兘涓虹┖', icon: 'none', duration: 2000 });
+				}
+				if (!this.from.qualified && !this.from.undesirable) {
+					return uni.showToast({ title: '鑹搧鏁颁笌涓嶈壇鏁颁笉鑳藉悓鏃朵负绌�', icon: 'none', duration: 2000 });
+				}
+				// 鏈変笉鑹暟
+				if (this.from.undesirable > 0) {
+					if (this.from.defective.length === 0) return uni.showToast({ title: '涓嶈壇椤逛笉鑳戒负绌�', icon: 'none', duration: 2000 });
+				}
+				let type = ''
+				this.arrType.forEach(item => {
+					if (item.active) {
+						type = item.id
+					}
+				})
+				autoWorkReport({
+					createWorkorderRecordDTO: {
+						type,
+						duration: this.from.duration,
+						qualifiedNum: this.from.qualified ? this.from.qualified : 0,
+						unQualifiedNum: this.from.undesirable ? this.from.undesirable : 0
+					},
+					plansId: this.from.processPlan.id,
+					proGroupId: this.deviceId,
+					proUserList: [this.from.userId],
+					recordList: this.wuList.map(item => {
+						return {
+							wstockId: item.id,
+							num: item.num
+						}
+					}),
+					createUnqualifiedDTOList: this.from.defective.map(item => {
+						return {
+							categoryId: item.id,
+							unQualifiedNum: item.num
+						}
+					})
+				}).then(res => {
+					if (res.code === 200) {
+						uni.showToast({ title: '鎶ュ伐鎴愬姛锛�', icon: 'success', duration: 2000 });
+						setTimeout(() => {
+							uni.navigateBack({ delta: 1 });
+						}, 2000);
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.bg {
+		width: 100%;
+		position: absolute;
+		background: #F7F7F7;
+		.contanir {
+			height: calc(env(safe-area-inset-bottom) + 720rpx);
+			.content {
+				margin-top: 20rpx;
+				.type-style {
+					width: 325rpx;
+					margin-bottom: 20rpx;
+				}
+			}
+		}
+		.bg_plan {
+			width: 100%;
+			// height: 98rpx;
+			padding: 30rpx;
+			box-sizing: border-box;
+			background: #FFFFFF;
+			margin-bottom: 40rpx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			text {
+				font-size: 30rpx;
+				font-family: PingFangSC-Regular, PingFang SC;
+				font-weight: 400;
+				color: #222222;
+				b {
+					color: red;
+				}
+			}
+			.bg_plan_nr {
+				display: flex;
+				flex-direction: column;
+				text {
+					font-size: 24rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #666666;
+					margin-top: 20rpx;
+					&:first-child {
+						font-size: 32rpx;
+						font-family: PingFangSC-Medium, PingFang SC;
+						font-weight: 500;
+						color: #333333;
+						margin-top: 0 !important;
+					}
+				}
+			}
+			.bg_plan_label_val {
+				display: flex;
+				align-items: center;
+				text {
+					font-size: 28rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #999999;
+				}
+				image {
+					width: 12rpx;
+					height: 24rpx;
+					margin-left: 20rpx;
+				}
+			}
+		}
+		.bg_list {
+			width: 100%;
+			display: flex;
+			flex-direction: column;
+			.bottomval {
+				margin-bottom: 20rpx !important;
+			}
+			.bg_list_item {
+				display: flex;
+				flex-direction: column;
+				margin-bottom: 40rpx;
+				.kong {
+					text-align: center;
+					padding: 30rpx 0;
+					background: #ffffff;
+					font-size: 25rpx;
+					text {
+						color: #474747;
+					}
+				}
+				.bg_list_item_top {
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					padding-left: 30rpx;
+					padding-right: 30rpx;
+					margin-bottom: 30rpx;
+					.bg_list_item_top_left {
+						display: flex;
+						align-items: center;
+						.left {
+							margin-left: 12rpx;
+							font-size: 28rpx;
+						}
+						.warning {
+							width: 8rpx;
+							height: 30rpx;
+							border-radius: 2rpx;
+							margin-right: 12rpx;
+							background: $nav-stateColor5 !important;
+						}
+						.error {
+							width: 8rpx;
+							height: 30rpx;
+							border-radius: 2rpx;
+							margin-right: 12rpx;
+							background: $nav-stateColor4 !important;
+						}
+						.bg_list_item_top_left_x {
+							width: 8rpx;
+							height: 30rpx;
+							background: $nav-color;
+							border-radius: 2rpx;
+							margin-right: 12rpx;
+						}
+						text {
+							font-size: 32rpx;
+							font-weight: 500;
+							color: #222222;
+							display: flex;
+							align-items: center;
+						}
+					}
+					.bg_list_item_top_right {
+						display: flex;
+						align-items: center;
+						image {
+							width: 28rpx;
+							height: 28rpx;
+							margin-right: 12rpx;
+						}
+						text {
+							font-size: 28rpx;
+							font-weight: 400;
+							color: $nav-color;
+						}
+					}
+				}
+				.top {
+					margin-top: 20rpx !important;
+				}
+				.bg_list_item_h {
+					width: 100%;
+					padding: 0 30rpx;
+					box-sizing: border-box;
+					background: white;
+					.bg_list_item_num {
+						width: 100%;
+						min-height: 98rpx;
+						background: white;
+						display: flex;
+						justify-content: center;
+						align-items: center;
+						border-bottom: 1rpx solid #E5E5E5;
+						&:last-child {
+							border: none !important;
+						}
+						.kong {
+							text-align: center;
+							font-size: 25rpx;
+							padding: 30rpx 0;
+							background: #ffffff;
+						}
+						.bg_list_item_num_item {
+							width: 100%;
+							height: 100%;
+							display: flex;
+							align-items: center;
+							// height: 118rpx;
+							padding: 15rpx 0;
+							box-sizing: border-box;
+							justify-content: space-between;
+							border-bottom: 1rpx solid #E5E5E5;
+							&:last-child {
+								border: none;
+							}
+							.bg_list_item_num_item_list {
+								display: flex;
+								align-items: center;
+								.active {
+									background: #305ED5 !important;
+									color: #FFFFFF !important;
+								}
+								.bg_list_item_num_item_list_item {
+									width: 116rpx;
+									height: 62rpx;
+									line-height: 62rpx;
+									text-align: center;
+									background: #F2F2F2;
+									border-radius: 8rpx;
+									font-size: 26rpx;
+									font-family: PingFangSC-Regular, PingFang SC;
+									font-weight: 400;
+									color: #333333;
+									margin-right: 20rpx;
+									&:last-child {
+										margin: 0 !important;
+									}
+								}
+							}
+							.bg_list_item_num_item_wl {
+								flex-shrink: 0;
+								display: flex;
+								flex-direction: column;
+								text {
+									font-size: 34rpx;
+									color: #222222;
+								}
+								.bg_list_item_num_item_wl_lx {
+									margin-top: 10rpx;
+									text {
+										color: #222222;
+										font-size: 28rpx;
+									}
+								}
+							}
+							.warning {
+								color: $nav-stateColor5 !important;
+							}
+							.err {
+								color: $nav-stateColor4 !important;
+							}
+							image {
+								width: 12rpx;
+								height: 24rpx;
+								margin-left: 20rpx;
+							}
+							text {
+								flex-shrink: 0;
+								overflow: hidden;
+								text-overflow: ellipsis;
+								white-space: nowrap;
+								b {
+									font-size: 30rpx;
+									color: red;
+									margin-right: 5rpx;
+								}
+								.warning {
+									color: $nav-stateColor5 !important;
+									margin-right: 5rpx;
+								}
+								.err {
+									color: $nav-stateColor4 !important;
+									margin-right: 5rpx;
+								}
+								&:nth-child(1) {
+									font-size: 30rpx;
+									font-weight: 400;
+									color: #222222;
+								}
+								&:nth-child(2) {
+									font-size: 28rpx;
+									font-weight: 400;
+									color: #333333;
+									flex-shrink: 0;
+								}
+							}
+							.bg_list_item_num_item_sr {
+								// flex: 1;
+								display: flex;
+								align-items: center;
+								justify-content: flex-end;
+								.color1 {
+									font-size: 28rpx;
+									font-family: PingFangSC-Regular, PingFang SC;
+									font-weight: 400;
+									color: #333333;
+								}
+								input::-webkit-input-placeholder {
+									font-size: 28rpx;
+								}
+								input {
+									text-align: right;
+									width: 180rpx;
+									height: 60rpx;
+									border-radius: 8rpx;
+									border: 1rpx solid #E5E5E5;
+									margin-right: 20rpx;
+									font-size: 28rpx;
+									font-weight: 400;
+									color: #333333;
+									padding: 0 30rpx;
+								}
+								.wulll {
+									width: 400rpx;
+									text-align: right;
+									overflow: hidden;
+									white-space: nowrap;
+									text-overflow: ellipsis;
+								}
+								text {
+									font-size: 28rpx;
+									font-family: PingFangSC-Regular, PingFang SC;
+									font-weight: 400;
+									color: #999999;
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		.bh_zw {
+			height: 160rpx;
+		}
+		.bg_footer {
+			position: fixed;
+			bottom: 0;
+			left: 0;
+			width: 100%;
+			z-index: 9;
+			padding: 0 30rpx 60rpx 30rpx;
+			box-sizing: border-box;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			.bg_footer_submit1 {
+				width: 334rpx;
+				height: 88rpx;
+				line-height: 88rpx;
+				text-align: center;
+				background: #FFFFFF;
+				box-shadow: 0rpx 0rpx 12rpx 0rpx rgba(0,0,0,0.08);
+				border-radius: 8rpx;
+				font-size: 30rpx;
+				font-family: PingFangSC-Medium, PingFang SC;
+				font-weight: 500;
+				color: #305ED5;
+			}
+			.bg_footer_submit {
+				width: 334rpx;
+				height: 88rpx;
+				background: $nav-color;
+				box-shadow: 0 0 12rpx 0 rgba(0, 0, 0, 0.08);
+				border-radius: 8rpx;
+				font-size: 30rpx;
+				font-weight: 500;
+				color: #FFFFFF;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+			}
+		}
+		.bl {
+			width: 100%;
+			height: 800rpx;
+			padding: 30rpx;
+			box-sizing: border-box;
+			display: flex;
+			flex-direction: column;
+			.bl_head {
+				width: 100%;
+				height: 50rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				text {
+					font-size: 28rpx;
+					color: #222222;
+					&:nth-child(2) {
+						font-size: 32rpx !important;
+					}
+				}
+				image {
+					width: 28rpx;
+					height: 28rpx;
+				}
+			}
+			.bl_footer {
+				width: 100%;
+				height: 88rpx;
+				line-height: 88rpx;
+				text-align: center;
+				background: #305ED5;
+				border-radius: 8rpx;
+				font-size: 32rpx;
+				font-family: PingFangSC-Medium, PingFang SC;
+				font-weight: 500;
+				color: #FFFFFF;
+				margin-top: 30rpx;
+			}
+			.bl_list {
+				width: 100%;
+				height: calc(100% - 168rpx);
+				overflow-y: scroll;
+				margin-top: 30rpx;
+				.bl_list_item {
+					width: 100%;
+					height: 96rpx;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					border-bottom: 1rpx solid #E5E5E5;
+					&:last-child {
+						border: none !important;
+					}
+					.bl_list_item_left {
+						flex: 1;
+						display: flex;
+						align-items: center;
+						input {
+							width: 30rpx;
+							height: 30rpx;
+							border: 1rpx solid #CCCCCC;
+							margin: 0 !important;
+						}
+						text {
+							font-size: 30rpx;
+							color: #222222;
+							margin-left: 10rpx;
+						}
+					}
+					.bl_list_item_right {
+						flex: 1;
+						height: 50rpx;
+						text-align: right;
+						input {
+							padding-left: 5rpx;
+							width: 160rpx;
+							height: 100%;
+							padding: 0 30rpx;
+							box-sizing: border-box;
+							text-align: right;
+							font-size: 28rpx;
+							color: #333333;
+							border-radius: 10rpx;
+							border: 1rpx solid #CCCCCC;
+							&::-webkit-input-placeholder {
+								font-size: 28rpx;
+								font-family: PingFangSC-Regular, PingFang SC;
+								font-weight: 400;
+								color: #999999;
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+</style>
diff --git a/minipro_standard/store/index.js b/minipro_standard/store/index.js
index 0b3342b..c5561c5 100644
--- a/minipro_standard/store/index.js
+++ b/minipro_standard/store/index.js
@@ -9,7 +9,8 @@
 const menuButtonWidth = uni.getStorageSync('menuButtonWidth');
 const token = uni.getStorageSync('token');
 const userInfo = uni.getStorageSync('userInfo');
-const Menu = uni.getStorageSync('MenuList');
+const Menu = uni.getStorageSync('MenuList');
+const session = uni.getStorageSync('session');
 
 
 // Vuex.Store 鏋勯�犲櫒閫夐」
@@ -22,6 +23,7 @@
 		menuButtonWidth: menuButtonWidth || '0',
 		statusbarHeight: statusbarHeight || '0',
 		navHeight: navHeight || '0',
+		session: session ? session : '',
 		// 鑿滃崟鏉冮檺
 		Menu: Menu ? Menu : [],
 		// 寰呭姙鏁伴噺
@@ -54,6 +56,10 @@
 		SETMENU (state, data) {
 			state.Menu = data
 			uni.setStorageSync('MenuList', JSON.stringify(data));
+		},
+		SETSESSION (state, data) {
+			state.session = data;
+			uni.setStorageSync('session', data);
 		}
 	},
 	actions: {
diff --git a/minipro_standard/util/api/index.js b/minipro_standard/util/api/index.js
index d2e0fbc..a41a10f 100644
--- a/minipro_standard/util/api/index.js
+++ b/minipro_standard/util/api/index.js
@@ -24,7 +24,7 @@
 	return http.get(`/wechat/logout`)
 }
 
-// 鐧诲綍
+// 寰俊鍏紬鍙风櫥褰�
 export function wxAccountLogin(data) {
 	return http.post('/system/wxAccountLogin', data)
 }
@@ -32,4 +32,14 @@
 // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛淇℃伅
 export function getUserInfo(params) {
 	return http.get('/system/getUserInfo', {params})
+}
+
+// 鑾峰彇寰俊openId
+export function wxLogin(params) {
+	return http.get('/system/wxLogin', {params})
+}
+
+// 寰俊灏忕▼搴忕櫥褰�
+export function wxProgramLogin(params) {
+	return http.get('/system/wxProgramLogin', {params})
 }
\ No newline at end of file
diff --git a/minipro_standard/util/request/index.js b/minipro_standard/util/request/index.js
index eb2f57a..9bd5596 100644
--- a/minipro_standard/util/request/index.js
+++ b/minipro_standard/util/request/index.js
@@ -5,7 +5,7 @@
     /* defaultConfig 涓洪粯璁ゅ叏灞�閰嶇疆 */
     defaultConfig.baseURL = baseUrl /* 鏍瑰煙鍚� */
 		defaultConfig.header = {
-			'content-type': 'application/x-www-form-urlencoded;charset=utf-8',
+			'content-type': 'application/json;charset=utf-8',
 		}
 		defaultConfig.dataType = 'json'
     return defaultConfig
diff --git a/minipro_standard/util/request/requestInterceptors.js b/minipro_standard/util/request/requestInterceptors.js
index bc693ee..8f37f89 100644
--- a/minipro_standard/util/request/requestInterceptors.js
+++ b/minipro_standard/util/request/requestInterceptors.js
@@ -2,20 +2,12 @@
  * 璇锋眰鎷︽埅
  * @param {Object} http
  */
-module.exports = (vm) => {
-	// console.log(vm)
+module.exports = (vm) => {
 	uni.$u.http.interceptors.request.use((config) => { // 鍙娇鐢╝sync await 鍋氬紓姝ユ搷浣�
-			// 鍒濆鍖栬姹傛嫤鎴櫒鏃讹紝浼氭墽琛屾鏂规硶锛屾鏃禿ata涓簎ndefined锛岃祴浜堥粯璁}
-			console.log('璇锋眰鎷︽埅');
-			config.data = config.data || {}
-			const token = vm.$store.state.token
-			if (token) {
-				config.header.token = token
-			} 
-			// 鍙互鍦ㄦ閫氳繃vm寮曠敤vuex涓殑鍙橀噺锛屽叿浣撳�煎湪vm.$store.state涓�
-			// console.log(vm.$store.state);
-
-			return config
-		}, (config) => // 鍙娇鐢╝sync await 鍋氬紓姝ユ搷浣�
-		Promise.reject(config))
+		console.log(config)
+		config.header['Cookie'] = 'eva-auth-token=' + vm.$store.state.session
+		uni.showLoading({ title: '璇锋眰涓�' });
+		config.data = config.data || {}
+		return config
+	}, (config) => Promise.reject(config)) // 鍙娇鐢╝sync await 鍋氬紓姝ユ搷浣�
 }
diff --git a/minipro_standard/util/request/responseInterceptors.js b/minipro_standard/util/request/responseInterceptors.js
index a88ed54..16f08d8 100644
--- a/minipro_standard/util/request/responseInterceptors.js
+++ b/minipro_standard/util/request/responseInterceptors.js
@@ -4,25 +4,38 @@
  */
 module.exports = (vm) => {
 	uni.$u.http.interceptors.response.use((response) => {
-		/* 瀵瑰搷搴旀垚鍔熷仛鐐逛粈涔� 鍙娇鐢╝sync await 鍋氬紓姝ユ搷浣�*/
+		uni.hideLoading();
 		const data = response.data
-		// 鑷畾涔夊弬鏁�
-		// const custom = response.config?.custom
-		// if (data.code !== 200) { // 鏈嶅姟绔繑鍥炵殑鐘舵�佺爜涓嶇瓑浜�200锛屽垯reject()
-		// 	uni.$u.toast(data.message)
-		// 	if (data.code === 401) {
-		// 		// console.log('鏈櫥褰曘�佺櫥褰曞け鏁�');
-		// 		// 鏈櫥褰曘�佺櫥褰曞け鏁�
-		// 		uni.reLaunch({
-		// 			url: '/pages/login/login'
-		// 		})
-		// 	}
-		// 	return Promise.reject(data)
-		// }
-		// console.log(data.data);
-		return data.data || {}
+		if (response.data.code === 401) {     // 澶勭悊鐧诲綍杩囨湡
+			uni.showToast({ title: '鐧诲綍杩囨湡锛屽噯澶囪嚜鍔ㄩ噸鏂扮櫥褰�', icon: 'none', duration: 2000, mask: true });
+			setTimeout(() => {
+				uni.reLaunch({ url: '/pages/login/login' });
+			}, 2000)
+			return
+		}
+		if (response.data.code !== 200) {     // 璇锋眰鎶ラ敊
+			uni.showToast({ title: response.data.message, icon: 'none', duration: 2000 });
+		}
+		return data || {}
 	}, (response) => {
-		/*  瀵瑰搷搴旈敊璇仛鐐逛粈涔� 锛坰tatusCode !== 200锛�*/
+		uni.hideLoading();
+		let code;
+		if (error.code === "ECONNABORTED") {
+			code = 999
+		} else {
+			code = error.response.status
+		}
+		switch (code) {
+			case 404:
+				uni.showToast({ title: '璇锋眰璧勬簮涓嶅瓨鍦�', icon: 'none', duration: 2000 });
+				break;
+			case 500:
+				uni.showToast({ title: '鏈嶅姟鍣ㄨ祫婧愰敊璇�', icon: 'none', duration: 2000 });
+				break;
+			case 999:
+				uni.showToast({ title: '璇锋眰瓒呮椂', icon: 'none', duration: 2000 });
+				break;
+		}
 		return Promise.reject(response)
 	})
 }

--
Gitblit v1.9.3