From 7aaff69bb11a4d75882d25bd1bc8e9748c2bd609 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期四, 29 五月 2025 16:57:41 +0800
Subject: [PATCH] 完成报工前端页面,除库存接收外

---
 pages/product/report/index0.vue |  489 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 489 insertions(+), 0 deletions(-)

diff --git a/pages/product/report/index0.vue b/pages/product/report/index0.vue
new file mode 100644
index 0000000..45e05be
--- /dev/null
+++ b/pages/product/report/index0.vue
@@ -0,0 +1,489 @@
+<template>
+	<view class="body">
+		<view class="top_code">
+			<u-icon class="product-number-icon"></u-icon>缂栧彿锛�
+			<text selectable>{{ dutyNo }}</text>
+			<view class="top_code_edit">
+				<u-icon class="product-edit-icon" @click="edit" v-show="true"></u-icon>
+			</view>
+		</view>
+		<view class="main_view">
+			<h3 class="main_top_title">宸ヤ綔鍙�</h3>
+			<view class="main_item" @click="goPage(0)">
+				<span style="color:#4F4F4F">宸ヤ綔绔�</span>
+				<view>
+					<span style="color:#333333;margin-right: 20rpx;">{{ query.workstationName }}</span>
+					<u-icon v-if="isShowButton" name="arrow-right" color="#687792" size="28"></u-icon>
+				</view>
+			</view>
+			<view class="main_item" @click="goPage(1)">
+				<span style="color:#4F4F4F">宸ュ簭</span>
+				<view>
+					<span style="color:#333333;margin-right: 20rpx;">{{ query.operationName }}</span>
+					<u-icon v-if="isShowButton" name="arrow-right" color="#687792" size="28"></u-icon>
+				</view>
+			</view>
+			<view class="main_item" @click="goPage(2)">
+				<span style="color:#4F4F4F">鏃ユ湡</span>
+				<view>
+					<span style="color:#333333;margin-right: 20rpx;">{{ query.updateTime }}</span>
+					<u-icon v-if="isShowButton" name="arrow-right" color="#687792" size="28"></u-icon>
+				</view>
+			</view>
+			<view class="main_item" @click="goPage(3)">
+				<span style="color:#4F4F4F">鐝</span>
+				<view>
+					<span style="color:#333333;margin-right: 20rpx;">{{ query.clazzType }}</span>
+					<u-icon v-if="isShowButton" name="arrow-right" color="#687792" size="28"></u-icon>
+				</view>
+			</view>
+			<view class="main_item" @click="goPage(4)">
+				<span style="color:#4F4F4F;width: 118rpx;">鐢熶骇浜哄憳</span>
+				<view class="value2">
+					<span style="color:#333333;margin-right: 20rpx;">{{ staffNameJoin }}</span>
+				</view>
+				<u-icon v-if="isShowButton" name="arrow-right" color="#687792" size="28"></u-icon>
+			</view>
+			<view class="main_item">
+				<span style="color:#4F4F4F">鍒涘缓浜�</span>
+				<view>
+					<span style="color:#333333;">{{ query.createUser }}</span>
+				</view>
+			</view>
+			<view class="btns">
+				<u-button :custom-style="customStyle" @click="goPage(9)">鏉傚伐</u-button>
+				<u-button :custom-style="customStyle" style="width: 150rpx;" @click="goPage(6)">
+					<u-icon class="icon_history" size="26rpx" />
+					<span style="line-height: 40rpx;">鍘嗗彶</span>
+				</u-button>
+				<u-button v-if="isShowButton" @click="submit" :custom-style="customStyle"
+					style="background: #30AFFF;color: #fff;border: 0;width: 150rpx;">
+					<u-icon class="icon_save" size="26rpx" />
+					<span style="line-height: 40rpx;">淇濆瓨</span>
+				</u-button>
+				<u-button :custom-style="customStyle" style="background: #214DED;color: #fff;border: 0;width: 150rpx;"
+					@click="goPage(8)">
+					<u-icon class="icon_right" size="26rpx" />
+					<span style="line-height: 40rpx;">鎶ュ伐</span></u-button>
+			</view>
+		</view>
+		<u-calendar v-model="calendarShow" :mode="mode" @change="changeCalendar"></u-calendar>
+		<!--宸ュ簭涓嬫媺妗�-->
+		<u-select :default-value="[operationIndex]" v-model="selectShowOperation" :list="operationList"
+			@confirm="confirmOperation"></u-select>
+		<u-select v-model="selectShowClazzType" :list="clazzTypeList" @confirm="confirmClazzType"></u-select>
+		<u-toast ref="uToast" />
+	</view>
+</template>
+
+<script>
+import {
+	dateFormat
+} from "@/utils/date.js";
+import UIcon from "../../../uview-ui/components/u-icon/u-icon.vue";
+export default {
+	components: {
+		UIcon
+	},
+	data() {
+		return {
+			customStyle: {
+				'background': '#FFFFFF',
+				'border-radius': '8rpx',
+				'border': '1px solid #D2D2D2',
+				'width': '121rpx',
+				'height': '65rpx',
+				'font-weight': 500,
+				'font-size': '28rpx',
+				'color': '#333333',
+				'pading': '0 30rpx'
+			},
+			calendarShow: false,
+			selectShowOperation: false,
+			selectShowClazzType: false,
+			mode: 'date',
+			id: '',
+			dutyNo: '', // 缂栧彿
+			query: {
+				updateTime: dateFormat(
+					new Date(), 'yyyy-MM-dd'),
+				workstationName: '', // 宸ヤ綔绔欏悕绉�
+				workstationId: '', // 宸ヤ綔绔檌d
+				clazzType: '', // 鐝
+				productionUser: '',
+				operationId: '', // 宸ュ簭id
+				operationName: '', // 宸ュ簭鍚嶇О
+				userList: [],
+				createUser: ''
+			},
+			toId: '',
+			operationList: [],
+			clazzTypeList: [{
+				label: '鐧界彮'
+			},
+			{
+				label: '鏅氱彮'
+			},
+			],
+			workstation: '',
+			staffNameJoin: '',
+			operationIndex: '',
+			isEdit: false, // 鏄惁淇敼
+			isShowButton: false,
+			workCenter: '',
+			addOrEdit: '',
+			info: {},
+			firstOperationId: null,
+			lastOperationId: null,
+		}
+	},
+	onShow() {
+		// this.getLastDutyRecordFun()
+	},
+	onLoad() {
+		uni.$on('dailyListInfo', (info) => {
+			this.dutyNo = info.dutyNo
+			this.id = info.id
+			this.query.createUser = this.vuex_username
+			this.query.clazzType = info.clazzType
+			this.query.workstationId = info.workstationId
+			this.query.workstationName = info.workstationName
+			this.query.productionUser = info.productionUser.split(',').reverse()
+			this.query.userList = info.productionUserList.split(',')
+			this.query.operationId = info.operationId
+			this.getOperation()
+		})
+
+		uni.$on('returnData', (data) => {
+			// 涓存椂瀛樺偍宸ヤ綔绔欑殑鏁版嵁
+			this.workstation = data
+			// 缁欓〉闈㈠伐浣滅珯璧嬪��
+			this.query.workstationName = '(' + data.workCenter + ')' + data.name
+			this.query.workstationId = data.id
+			// 娓呯┖宸ュ簭閫夐」
+			this.query.operationName = ''
+			this.query.operationId = ''
+			this.operationIndex = 0
+			this.getOperationTaskFun(data.workCenter)
+		})
+		uni.$on('checkedList', (data) => {
+			let staffNameList = []
+			let staffNoList = []
+			data.forEach(i => {
+				staffNameList.push(i.staffName)
+				staffNoList.push(i.staffNo)
+			})
+			this.query.productionUser = staffNameList
+			this.query.userList = staffNoList
+		});
+	},
+	onReady() {
+		// 棣栨杩涘叆椤甸潰鑾峰彇褰撳墠鐧诲綍浜烘渶鍚庝竴娆℃彁浜ょ殑鏃ユ姤
+		this.getLastDutyRecordFun()
+	},
+	methods: {
+		isNotOperationName(workCenter, operationName, workCenterTwo) {
+			// 鍒ゆ柇鏄惁涓鸿宸ヤ綔绔�
+			if (workCenter.includes(workCenterTwo)) {
+				// 鍒ゆ柇鏄惁鍖呭惈宸ュ簭鍚嶇О
+				if (!operationName.includes(this.query.operationName)) {
+					return true
+				} else {
+					return false
+				}
+			} else {
+				return false
+			}
+		},
+		// 鍒ゆ柇宸ュ崟鏄惁绛変簬,鍚屾椂鍒ゆ柇鏄惁涓虹涓�閬撳伐搴�
+		isFirstOperationId(workCenter, workCenterTwo) {
+			if (workCenter.includes(workCenterTwo)) {
+				// 鍒ゆ柇鏄惁涓嶄负绗竴閬撳伐搴�
+				if (this.query.operationId !== this.firstOperationId) {
+					return true
+				} else {
+					return false
+				}
+			} else {
+				return false
+			}
+		},
+		// 棣栨杩涘叆椤甸潰鑾峰彇褰撳墠鐧诲綍浜烘渶鍚庝竴娆℃彁浜ょ殑鏃ユ姤
+		getLastDutyRecordFun() {
+			this.$u.api.dailyPaper.getLastDutyRecord().then(res => {
+				if (res.code === 0) {
+					this.dutyNo = res.data.dutyNo
+					this.id = res.data.id
+					this.query.createUser = this.vuex_username
+					this.query.clazzType = res.data.clazzType
+					this.query.workstationId = res.data.workstationId
+					this.query.workstationName = res.data.workstationName
+					this.query.productionUser = res.data.productionUser.split(',').reverse()
+					this.query.userList = res.data.productionUserList.split(',')
+					this.query.operationId = res.data.operationId
+					this.getOperation()
+				} else {
+					this.$u.toast(res.msg)
+				}
+			})
+		},
+		// 娓呯┖閫昏緫
+		onNavigationBarButtonTap(e) {
+			this.isEdit = true
+			this.isShowButton = true
+			this.addOrEdit = 'add'
+			this.query.productionUser = ''
+			this.query.productionUserList = []
+			this.staffNameJoin = ''
+			this.query.updateTime = ''
+		},
+		edit() {
+			this.isEdit = !this.isEdit
+			this.isShowButton = this.isEdit
+			this.addOrEdit = 'edit'
+		},
+		goPage(index) {
+			switch (index) {
+				// 璺宠浆鍒板巻鍙查〉闈�
+				case 6:
+					uni.navigateTo({
+						url: '/pages/daily/daily/daily-list'
+					})
+					break;
+				// 璺宠浆鍒版姤宸ラ〉闈�
+				case 8:
+					if (this.isEdit) {
+						this.$refs.uToast.show({
+							title: '璇峰厛淇濆瓨淇敼',
+							type: 'warning '
+						})
+						return
+					}
+
+					let workCenter = this.query.workstationName.split(')')[0].substring(1)
+					let operation = this.query.workstationName.split(')')[1]
+					console.log(workCenter, operation, this.firstOperationId, this.query.operationId, this.query)
+					if (workCenter == "TM-01" || workCenter == "JG-01" || workCenter == "YB-04" || this.isFirstOperationId('DY-01,GY-01,YB-01,YB-02', workCenter) || this.isNotOperationName('ZZ-02', '浜岃,娉ㄦ补', workCenter)) {
+						let item = {
+							workstationId: this.query.workstationId,
+							clazzType: this.query.clazzType,
+							dutyNo: this.dutyNo,
+							userStaffNo: this.query.userList,
+							workstationName: this.query.workstationName,
+							staffNameJoin: this.staffNameJoin,
+							workCenter: workCenter,
+							operationId: this.query.operationId,
+							firstOperationId: this.firstOperationId,
+							lastOperationId: this.lastOperationId
+						}
+						uni.navigateTo({
+							url: '/pages/daily/common/work-reporting?info=' + encodeURIComponent(JSON
+								.stringify(item))
+						})
+					} else if (this.query.workstationName.includes("TX-02") && !this.query.operationName.includes("鍙犺")) {
+						let item = {
+							workstationId: this.query.workstationId,
+							clazzType: this.query.clazzType,
+							dutyNo: this.dutyNo,
+							userStaffNo: this.query.userList,
+							workstationName: this.query.workstationName,
+							staffNameJoin: this.staffNameJoin,
+							workCenter: "TX-02",
+							operationId: this.query.operationId,
+							firstOperationId: this.firstOperationId,
+							lastOperationId: this.lastOperationId
+						}
+						uni.navigateTo({
+							url: '/pages/daily/common/work-reporting?info=' + encodeURIComponent(JSON
+								.stringify(item))
+						})
+					} else {
+						uni.navigateTo({
+							url: `/pages/daily/common/work-order-list?workstationId=${this.query.workstationId}&toId=${this.toId}&clazzType=${this.query.clazzType}&dutyNo=${this.dutyNo}&userStaffNo=${this.query.userList}&workstationName=${this.query.workstationName}&staffNameJoin=${this.staffNameJoin}`
+						})
+					}
+					break;
+				// 璺宠浆鍒版潅宸ラ〉闈�
+				case 9:
+					if (this.isEdit) {
+						this.$refs.uToast.show({
+							title: '璇峰厛淇濆瓨淇敼',
+							type: 'warning '
+						})
+						return
+					}
+					uni.navigateTo({
+						url: `/pages/daily/handyman/handyman?dutyNo=${this.query.dutyNo}&updateTime=${this.query.updateTime}&userList=${this.query.productionUser}&staffList=${this.query.userList}`
+					})
+					break;
+			}
+			if (!this.isEdit) {
+				return
+			} else {
+				switch (index) {
+					case 0:
+						uni.navigateTo({
+							url: '/pages/daily/workstation/index'
+						})
+						break;
+					case 1:
+						if (!this.query.workstationName) {
+							this.$refs.uToast.show({
+								title: '璇峰厛閫夋嫨宸ヤ綔绔�',
+								type: 'warning '
+							})
+						} else {
+							this.selectShowOperation = true;
+						}
+						break;
+					case 2:
+						this.calendarShow = true;
+						break;
+					case 3:
+						this.selectShowClazzType = true;
+						break;
+					case 4:
+						let staffList = this.query.productionUser
+						let staffNoList = this.query.userList
+						const list = []
+						for (const i in staffList) {
+							const obj = {
+								staffName: staffList[i],
+								staffNo: staffNoList[i]
+							}
+							list.push(obj)
+						}
+						uni.navigateTo({
+							url: '/pages/daily/production-person/production-person?list=' + encodeURIComponent(
+								JSON.stringify(list))
+						})
+						break;
+				}
+			}
+		},
+		// 鎻愪氦鏃ユ姤淇敼
+		submit() {
+			if (!this.query.workstationId) {
+				this.$u.toast('璇烽�夋嫨宸ヤ綔绔�')
+				return
+			} else if (!this.query.operationId) {
+				this.$u.toast('璇烽�夋嫨宸ュ簭')
+				return
+			} else if (!this.query.clazzType) {
+				this.$u.toast('璇烽�夋嫨鐝')
+				return
+			} else if (!this.query.productionUser) {
+				this.$u.toast('璇烽�夋嫨鐢熶骇浜哄憳')
+				return
+			} else if (!this.query.updateTime) {
+				this.$u.toast('璇烽�夋嫨鏃堕棿')
+				return
+			}
+
+			let params = JSON.parse(JSON.stringify(this.query))
+			this.$delete(params, 'productionUser')
+			this.$delete(params, 'productionUserList')
+			params.updateTime = params.updateTime + ' 00:00:00'
+			params.id = null
+			if (this.addOrEdit === 'add') {
+				this.$u.api.dailyPaper.addDailyPaper(params).then(res => {
+					if (res.code === 0) {
+						// this.getLastDutyRecordFun()
+						this.query.createUser = this.vuex_username
+						this.$u.toast('淇濆瓨鎴愬姛')
+						this.isShowButton = false
+						this.getLastDutyRecordFun()
+					}
+				})
+			} else {
+				params.id = this.id
+				this.$u.api.dailyPaper.editDailyPaper(params).then(res => {
+					if (res.code === 0) {
+						// this.getLastDutyRecordFun()
+						this.$u.toast('淇敼鎴愬姛')
+						this.isShowButton = false
+					}
+				})
+			}
+			this.isEdit = false
+		},
+		changeCalendar(e) {
+			this.query.updateTime = e.result;
+		},
+		confirmOperation(e) {
+			this.query.operationName = e[0].label
+			this.query.operationId = e[0].value
+			const index = this.operationList.findIndex(item => item.value === this.query.operationId)
+			if (index > -1) {
+				this.operationIndex = index
+				this.toId = this.operationList[index].value
+			}
+		},
+		confirmClazzType(e) {
+			this.query.clazzType = e[0].label
+		},
+		// 鏌ヨ宸ヤ綔绔�
+		getOperation() {
+			this.$u.api.dailyPaper.getWorkstation().then(res => {
+				if (res.code === 0) {
+					const index = res.data.findIndex(item => item.name === this.query.workstationName)
+					if (index > -1) {
+						this.workCenter = res.data[index].workCenter
+					}
+					this.query.workstationName = '(' + this.workCenter + ')' + this.query.workstationName
+					this.getOperationTaskFun(this.workCenter, this.query.operationId)
+				}
+			})
+		},
+		getOperationTaskFun(id, operationId) {
+			this.operationList = []
+			const params = {
+				workCenter: id,
+				current: 1,
+				size: -1
+			}
+			// 鏌ヨ宸ュ簭鍒楄〃
+			this.$u.api.dailyPaper.getOperation(params).then(res => {
+				if (res.code === 0) {
+					if (res.data.records.length > 0) {
+						res.data.records.forEach(i => {
+							const obj = Object.assign({
+								label: i.name,
+								value: i.id,
+							})
+							this.operationList.push(obj)
+						})
+						if (operationId) {
+							const index = this.operationList.findIndex(item => item.value === operationId)
+							if (index > -1) {
+								this.operationIndex = index
+								this.query.operationName = this.operationList[index].label
+								this.toId = this.operationList[index].value
+							}
+						}
+						this.firstOperationId = this.operationList[0].value
+						this.lastOperationId = this.operationList[this.operationList.length - 1].value
+					}
+				}
+			})
+		}
+	},
+	watch: {
+		'query.productionUser': {
+			handler(newName, oldName) {
+				if (this.query.productionUser.length > 0) {
+					this.staffNameJoin = this.query.productionUser.join()
+				} else {
+					this.staffNameJoin = ''
+				}
+			},
+			immediate: true,
+			deep: true
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+@import 'index0.scss';
+</style>
\ No newline at end of file

--
Gitblit v1.9.3