From d07500fef337fc0366d5c51723ddb3ba2071f33d Mon Sep 17 00:00:00 2001
From: 小小儁爺 <1694218219@qq.com>
Date: 星期五, 01 八月 2025 10:33:37 +0800
Subject: [PATCH] 1.计时工资功能开发
---
pages/wwgl/wxsl.vue | 632 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 631 insertions(+), 1 deletions(-)
diff --git a/pages/wwgl/wxsl.vue b/pages/wwgl/wxsl.vue
index 02409e3..a3aaf06 100644
--- a/pages/wwgl/wxsl.vue
+++ b/pages/wwgl/wxsl.vue
@@ -1,8 +1,638 @@
<template>
+ <view>
+ <page-nav title="澶栧崗鏀舵枡"></page-nav>
+
+
+ <view class="flex_center" style="margin: 20rpx;">
+
+ <!-- #ifdef H5 -->
+ <u--input prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" :placeholder="placeholder"
+ style="width:100%;background-color: #fff;border-radius: 40rpx;" border="surround" suffixIcon="scan"
+ suffixIconStyle="color: #909399;font-size: 22px;" v-model="inputBoxValue"
+ @change="confirmInputBoxValue">
+ <template slot="suffix">
+ <u-icon name="scan" color="#909399" size="24" @click="scanClick"></u-icon>
+ </template>
+ </u--input>
+ <!-- #endif -->
+
+ <!-- #ifdef APP-PLUS -->
+ <u-input prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" :placeholder="placeholder"
+ style="width:100%;background-color: #fff;border-radius: 40rpx;" border="surround" suffixIcon="scan"
+ suffixIconStyle="color: #909399;font-size: 22px;" v-model="inputBoxValue"
+ @change="confirmInputBoxValue">
+ <template slot="suffix">
+ <u-icon name="scan" color="#909399" size="24" @click="scanClick"></u-icon>
+ </template>
+ </u-input>
+ <!-- #endif -->
+
+ <view class="flex_center marginLeft20" @click="popupShow=true">
+ <u--text size='16' color='#909399' text="绛涢��"></u--text>
+ <u--image :showLoading="true" src="../../static/img/sift.png" width="20px" height="20px"></u--image>
+ </view>
+ </view>
+
+
+ <u-alert :title="alertTitle" type="info"></u-alert>
+
+
+ <!-- 鎶樺彔闈㈡澘 -->
+ <!-- <u-collapse @change="change" @close="close" @open="open"> -->
+ <!-- @change="collapseChange" -->
+ <u-collapse style="max-height: 590px;overflow: auto;">
+ <!-- :value='parseFloat(item.ordergoodqty)+"/"+parseFloat(item.orderqty)' -->
+ <u-collapse-item style="position: relative;" :title="item.ordercode" :name='item.ordercode'
+ :value='parseFloat(item.ordergoodqty)+"/"+parseFloat(item.orderqty)'
+ :label="item.children.length===0?'鏈淳鍙�':''" :disabled='item.children.length===0'
+ v-for="item in collapseArr" :key="item.ordercode">
+
+
+ <view style="position: absolute;width: 200rpx;left: 30rpx;top:34px;font-size: 24rpx;color: #999;">
+ {{item.partname}} {{item.partspec}}
+ </view>
+
+ <!-- <view style="position: absolute;width: 26%;left: 44%;top:16px;"> -->
+ <view style="position: absolute;width: 120px;left: 44%;top:16px;color:#0659ff"
+ @click="progressClick(item.ordercode)">
+ <!-- {{item.partname}}{{item.partspec}} -->
+ <u-line-progress :percentage="parseFloat((item.ordergoodqty*100/item.orderqty).toFixed(2))"
+ inactiveColor="#d1d6f5" height="10" activeColor="#0659ff"></u-line-progress>
+ </view>
+
+ <!-- <view style="position: absolute;width: 100px;right: 33px; top:13px; ">
+ <view class="" style="display: flex;justify-content: flex-end;">
+ <view style="color: #0659ff;">
+ {{parseFloat(item.ordergoodqty)}}
+ </view>
+ <view>
+ /{{ parseFloat(item.orderqty)}}
+ </view>
+ </view>
+ </view>
+ -->
+
+
+ <view v-if="radiovalue==='鐢熶骇宸ュ崟'" style="margin:0 0 5px">
+ <view class="flex_column">
+ <view style="display:flex">
+ <view class="titleFont" style="font-size: 14px;">浜у搧缂栫爜锛�</view>
+ <view class="contentFont" style="font-size: 14px;">{{item.partcode}}</view>
+ </view>
+ <view style="display:flex">
+ <view class="titleFont" style="font-size: 14px;">浜у搧鍚嶇О锛�</view>
+ <view class="contentFont" style="font-size: 14px;">{{item.partname}}</view>
+ </view>
+ <view style="display:flex">
+ <view class="titleFont" style="font-size: 14px;">浜у搧瑙勬牸锛�</view>
+ <view class="contentFont" style="font-size: 14px;">{{item.partspec?item.partspec:'/'}}
+ </view>
+ </view>
+ </view>
+ </view>
+
+
+ <!-- {{item.children}} -->
+ <!-- <u--text class="u-collapse-content"> -->
+ <u-steps :current="-1" inactiveColor='#0659FF' direction="column">
+ <view v-for="(it,ind) in item.children" :key="item.ordercode+it.name+ind"
+ @click="gotoPage(item.ordercode,it.code)" style="display: flex;align-items: center;">
+
+ <u-steps-item :title="it.code+'/'+it.name+it.spec"></u-steps-item>
+ <view class="" style="width: 100px;">
+ <u-line-progress :percentage="parseFloat((it.goodqty*100/it.planqty).toFixed(2))"
+ inactiveColor="#d1d6f5" height="10" activeColor="#0659ff"></u-line-progress>
+ </view>
+ <view style="width: 30%;text-align: right;">
+ <view class="" style="display: flex;justify-content: flex-end;">
+ <view style="color: #0659ff;">
+ {{parseFloat(it.goodqty)}}
+ </view>
+ <view>
+ /{{ parseFloat(it.planqty)}}
+ </view>
+ </view>
+ </view>
+ </view>
+
+ </u-steps>
+ <!-- </u--text> -->
+
+
+ </u-collapse-item>
+
+ </u-collapse>
+
+
+ <!-- 寮瑰嚭灞� -->
+ <!-- closeIconPos='top-left' closeOnClickOverlay closeable='true' -->
+ <u-popup :show="popupShow" mode="right" @close="popupClose" @open="popupOpen">
+ <view style="margin: 120px 10px 20px;" class="flex_column">
+
+ <!-- <view style="display: flex;">
+ <view>
+ 鍗曟嵁绫诲瀷锛�
+ </view>
+
+ <u-radio-group v-model="radiovalue" placement="column" @change="groupChange"
+ style="margin-top: 4px;">
+ <u-radio :customStyle="{marginBottom: '8px'}" v-for="(item, index) in radiolist"
+ :key="index+item.name" :label="item.name" iconSize='16' labelSize='16' :name="item.name">
+
+ </u-radio>
+ </u-radio-group>
+ </view> -->
+
+ <view style="margin-top: 20px;display: flex;align-items: center;">
+
+ <view class="">
+ 浜у搧淇℃伅锛�
+ </view>
+ <view class="">
+ <u-button :hairline="true" shape="circle" icon="map" :plain="true"
+ style="width: 100px;height: 26px;" type="primary" text="閫夋嫨浜у搧" @click="chosePart"></u-button>
+ </view>
+
+ </view>
+
+ <view style="display: flex;flex-wrap: wrap;">
+ <u-tag style="width:220rpx;" :text="item.name" v-for="item in tagArr" :key="item.code"
+ :closable="true" :show="item.close" @close="tagClose(item)"></u-tag>
+ </view>
+
+
+
+ <view class="head" style="margin-top: 10px;">
+ <view class="head_block" style="height: 80rpx; display: flex;justify-content: space-around;">
+ <u-button :plain='today' style="width: 70px;height: 25px;" @click="dateChange('today')"
+ type="primary" shape="circle" text="浠婃棩">
+ </u-button>
+ <u-button :plain='month' style="width: 70px;height: 25px;" @click="dateChange('month')"
+ type="primary" shape="circle" text="鏈湀">
+ </u-button>
+ <u-button :plain='custom' style="width: 70px;height: 25px;" @click="dateChange('custom')"
+ type="primary" shape="circle" text="鑷畾涔�"></u-button>
+ </view>
+ </view>
+
+ <view v-if="!custom" class="flex_column"
+ style="display: flex;justify-content: space-around;width: 100%;">
+ <view class="" style="display: flex;justify-content: space-evenly;width: 100%;">
+ <view class="titleFont">寮�濮嬫棩鏈�</view>
+ <view class="titleFont">~</view>
+ <view class="titleFont">缁撴潫鏃ユ湡</view>
+ </view>
+
+ <u-button type="info" icon='calendar' iconColor="#0659FF" size="" @click="calendarClick"
+ :text="calendarRange">
+ </u-button>
+ </view>
+
+ <uni-calendar ref="calendar" :range='true' :insert="false" @confirm="calendarConfirm" />
+
+ </view>
+ </u-popup>
+
+
+ <!-- <scan-code></scan-code> -->
+
+
+ <!-- 鎮诞鐞� -->
+ <view @click="scan2">
+ <drag-ball :x='300' :y="600"></drag-ball>
+ </view>
+ </view>
</template>
+
<script>
+ import {
+ ProductionScheduleKanban
+ } from '../../config/api.js';
+ export default {
+ onLoad(option) {
+ const _this = this
+ uni.$off('scancodedate') // 姣忔杩涙潵鍏� 绉婚櫎鍏ㄥ眬鑷畾涔変簨浠剁洃鍚櫒
+ uni.$on('scancodedate', function(content) {
+ console.log("鎵弿鍒扮殑鍐呭涓�:", content)
+ _this.getCheckScanDeviceQrCodeData(content)
+ })
+
+
+ console.log(option, 8)
+ },
+
+ onPullDownRefresh() {
+ setTimeout(() => {
+ this.init(() => {
+ uni.stopPullDownRefresh();
+ })
+ }, 1000);
+ },
+
+ data() {
+ return {
+ topRightMessageCount: '',
+ inputBoxValue: '',
+ alertTitle: '',
+ popupShow: false, //寮瑰嚭灞傛槸鍚︽樉绀�
+ collapseArr: [ //鎶樺彔闈㈡澘鏁版嵁
+ ],
+ collapseArrAll: [], //鎵�鏈�
+ placeholder: '璇疯緭鍏ュ伐鍗曚俊鎭�',
+ radiovalue: '鐢熶骇宸ュ崟', //鍗曟嵁绫诲瀷
+ // SO锛氶攢鍞鍗� MO锛氱敓浜ц鍗� PO锛氱敓浜у伐鍗�
+ radiolist: [{
+ name: '閿�鍞鍗�'
+ },
+ {
+ name: '鐢熶骇璁㈠崟'
+ },
+ {
+ name: '鐢熶骇宸ュ崟'
+ },
+ ],
+
+ today: true,
+ month: false,
+ custom: true,
+
+ // calendarRange: new Date().toISOString().slice(0, 10) + '~' + new Date().toISOString().slice(0,
+ // 10), //绯荤粺褰撳墠鏃ユ湡
+ calendarRange: new Date().getFullYear() + '-' + (new Date().getMonth() + 1).toString().padStart(
+ 2, '0') + '-01' + '~' + new Date().toISOString().slice(0, 10), //褰撴湀鏃ユ湡
+
+
+
+ tagArr: [
+ // {
+ // close: true,
+ // name: '鐢垫睜鍖�',
+ // code: '1002'
+ // }, {
+ // close: true,
+ // name: '鐢佃剳',
+ // code: '1003'
+ // }, {
+ // close: true,
+ // name: '8054鍏夋満',
+ // code: '1004'
+ // }, {
+ // close: true,
+ // name: 'G71674鍐查攱鏋�',
+ // code: '1005'
+ // }, {
+ // close: true,
+ // name: '8051鍏夋満',
+ // code: '1006'
+ // },
+ ], //宸查�変腑鐨勪骇鍝佹爣绛�
+
+
+ }
+ },
+ created() {
+
+ },
+ mounted() {
+ this.init()
+
+ this.getProductionScheduleKanban()
+ },
+ methods: {
+ init() {
+ uni.stopPullDownRefresh();
+ },
+ gotoPage(p1, p2) {
+ let orderstep = null
+ if (p1) {
+ orderstep = p1 + ';' + p2
+ } else {
+ orderstep = ''
+ }
+
+
+ uni.navigateTo({
+ url: './wxsl2?orderstep=' + orderstep
+ })
+ },
+
+ scan2() {
+ let that = this;
+
+ uni.scanCode({
+ onlyFromCamera: true,
+ // scanType: ['barCode', 'qrCode'],
+ scanType: ['qrCode'],
+ success: function(res) {
+ console.log('鏉$爜绫诲瀷锛�' + res.scanType);
+ console.log('鏉$爜鍐呭锛�' + res.result);
+ // that.scanContent = res.result;
+
+ uni.navigateTo({
+ url: './wxsl2?orderstep=' + res.result
+ })
+
+ },
+ complete: function(res) {
+
+ },
+ fail: function(res) {
+ console.log('鏉$爜绫诲瀷锛�' + res.scanType);
+ console.log('鏉$爜鍐呭锛�' + res.result);
+ }
+
+ });
+ },
+
+ getCheckboxValue(val) {
+ this.tagArr = []
+ val.forEach(i => {
+ this.tagArr.push({
+ close: true,
+ name: i.split('/')[1].trim(),
+ code: i.split('/')[0].trim()
+ })
+ })
+ },
+
+ // 鎺ュ彛鑾峰彇
+ async getProductionScheduleKanban() {
+ let ordertype = '' // SO锛氶攢鍞鍗� MO锛氱敓浜ц鍗� PO锛氱敓浜у伐鍗�
+ switch (this.radiovalue) {
+ case '鐢熶骇宸ュ崟':
+ this.alertTitle = '宸ュ崟鏁伴噺锛堝叡/涓級'
+ this.placeholder = '璇疯緭鍏ュ伐鍗曚俊鎭�'
+ ordertype = 'PO'
+ break
+ case '鐢熶骇璁㈠崟':
+ this.alertTitle = '鐢熶骇璁㈠崟鏁伴噺锛堝叡/涓級'
+ this.placeholder = '璇疯緭鍏ョ敓浜ц鍗曚俊鎭�'
+ ordertype = 'MO'
+ break
+ case '閿�鍞鍗�':
+ this.alertTitle = '閿�鍞鍗曟暟閲忥紙鍏�/涓級'
+ this.placeholder = '璇疯緭鍏ラ攢鍞鍗曚俊鎭�'
+ ordertype = 'SO'
+ break
+ }
+
+
+ const data = {
+ ordertype,
+ partcode: this.tagArr.map(i => i.code).join(','),
+ Ratetime: this.calendarRange,
+
+ }
+ const {
+ data: res
+ } = await ProductionScheduleKanban(data)
+
+ this.collapseArr = res
+ this.collapseArrAll = res
+ this.alertTitle = this.alertTitle.split('/')[0] + this.collapseArr.length + this.alertTitle.split('/')[
+ 1]
+
+ },
+
+
+ //杈撳叆妗嗗洖杞︾‘璁や簨浠�
+ confirmInputBoxValue(val) {
+ this.collapseArr = this.collapseArrAll.filter((p) => {
+ return p.ordercode.indexOf(val) !== -1
+ })
+
+
+ switch (this.radiovalue) {
+ case '鐢熶骇宸ュ崟':
+ this.alertTitle = '宸ュ崟鏁伴噺锛堝叡/涓級'
+ break
+ case '鐢熶骇璁㈠崟':
+ this.alertTitle = '鐢熶骇璁㈠崟鏁伴噺锛堝叡/涓級'
+ break
+ case '閿�鍞鍗�':
+ this.alertTitle = '閿�鍞鍗曟暟閲忥紙鍏�/涓級'
+ break
+ }
+ this.alertTitle = this.alertTitle.split('/')[0] + this.collapseArr.length + this.alertTitle.split('/')[
+ 1]
+
+ },
+
+ // 鐐瑰嚮鎵爜
+ scanClick() {
+ this.topScanClick()
+ },
+
+ // 鎵爜妗嗙偣鍑�
+ topScanClick() {
+ let that = this;
+
+ uni.scanCode({
+ onlyFromCamera: true,
+ // scanType: ['barCode', 'qrCode'],
+ scanType: ['qrCode'],
+ success: function(res) {
+ console.log('鏉$爜绫诲瀷锛�' + res.scanType);
+ console.log('鏉$爜鍐呭锛�' + res.result);
+ that.scanContent = res.result;
+
+ that.getCheckScanDeviceQrCodeData(that.scanContent);
+ },
+ complete: function(res) {
+
+ },
+ fail: function(res) {
+ console.log('鏉$爜绫诲瀷锛�' + res.scanType);
+ console.log('鏉$爜鍐呭锛�' + res.result);
+ }
+
+ });
+ },
+
+ getCheckScanDeviceQrCodeData(code) {
+ this.inputBoxValue = code
+ this.confirmInputBoxValue(this.inputBoxValue)
+ },
+
+
+ // 寮瑰嚭灞傛敹璧�
+ popupClose() {
+ this.getProductionScheduleKanban()
+ this.popupShow = false
+ },
+
+ // 寮瑰嚭灞傚脊鍑�
+ popupOpen() {
+
+ },
+
+ // 閫夋嫨浜у搧
+ chosePart() {
+ let arr = []
+ this.tagArr.forEach(i => {
+ arr.push(i.code + '/' + i.name)
+ })
+ uni.navigateTo({
+ url: '../znfx/chda?param=' + JSON.stringify(arr)
+ });
+ },
+
+ // tag鏍囩鍏抽棴
+ tagClose(val) {
+ this.tagArr.forEach((i, j) => {
+ if (i.code === val.code) {
+ i.close = false
+ this.tagArr.splice(j, 1)
+ }
+ })
+ },
+
+ // 鏃堕棿鑼冨洿鍒囨崲
+ dateChange(val) {
+ if (val === 'today') {
+ this.today = false
+ this.month = true
+ this.custom = true
+ this.calendarRange = new Date().toISOString().slice(0, 10) + '~' + new Date().toISOString().slice(0,
+ 10)
+ } else if (val === 'month') {
+ this.today = true
+ this.month = false
+ this.custom = true
+
+ this.calendarRange = new Date().getFullYear() + '-' + (new Date().getMonth() + 1).toString().padStart(
+ 2, '0') + '-01' + '~' + new Date().toISOString().slice(0, 10)
+
+ } else if (val === 'custom') {
+ this.today = true
+ this.month = true
+ this.custom = false
+ this.calendarRange = new Date().getFullYear() + '-' + (new Date().getMonth() + 1).toString().padStart(
+ 2, '0') + '-01' + '~' + new Date().toISOString().slice(0, 10)
+ }
+ },
+
+ // 鏃ュ巻鏃堕棿鐐瑰嚮
+ calendarClick() {
+ this.$refs.calendar.open();
+ },
+
+ // 鏃ュ巻纭畾浜嬩欢鐐瑰嚮
+ calendarConfirm(val) {
+ if (val.range.before < val.range.after) {
+ this.calendarRange = val.range.before + '~' + val.range.after
+ } else {
+ this.calendarRange = val.range.after + '~' + val.range.before
+ }
+
+ if (val.range.before === '') {
+ this.calendarRange = new Date().toISOString().slice(0, 10) + '~' + val.range.after
+ }
+ if (val.range.after === '') {
+ this.calendarRange = val.range.before + '~' + new Date().toISOString().slice(0, 10)
+ }
+ if (val.range.before === '' && val.range.after === '') {
+ this.calendarRange = new Date().toISOString().slice(0, 10) + '~' + new Date().toISOString().slice(0,
+ 10)
+ }
+ // this.getData()
+ },
+
+
+ // 鍗曢�夋寜閽垏鎹�
+ groupChange(val) {
+ console.log(val)
+ },
+
+
+
+
+
+
+
+
+
+
+ }
+ }
</script>
-<style>
+<style lang="scss" scoped>
+ @import url('@/style/global.css');
+
+ ::v-deep .uicon-arrow-left>span {
+ display: block;
+ }
+
+ ::v-deep .u-alert__text--info--light {
+ margin-bottom: 0;
+ font-size: 32rpx !important;
+ padding-left: 10rpx;
+ color: #212121 !important;
+ font-weight: lighter;
+ }
+
+ ::v-deep .u-alert--info--light {
+ background-color: rgba(255, 255, 255, 0.7);
+ }
+
+ ::v-deep .u-steps-item__wrapper {
+ background-color: #eee;
+ }
+
+ ::v-deep .u-steps-item__line--column {
+ display: none;
+ }
+
+ ::v-deep .u-slide-right-enter-active {
+ width: 70%;
+ }
+
+ ::v-deep .uicon-calendar {
+ font-size: 36rpx !important;
+ }
+
+ ::v-deep .u-cell__title-text {
+ font-size: 28rpx;
+ color: #212121;
+ }
+
+ ::v-deep .u-cell__value {
+ font-size: 28rpx;
+ // color: transparent;
+ color: #212121;
+
+ }
+
+ ::v-deep .u-cell__label {
+ margin-top: 0;
+ line-height: 12px;
+ }
+
+ ::v-deep .uicon-arrow-right {
+ font-size: 14px !important;
+ color: #212121 !important;
+ }
+
+ ::v-deep .u-line-progress__text {
+ // margin-right: -20px;
+ // color: #212121;
+ // width: 100px;
+ // margin-top: 10px;
+ display: none;
+
+ }
+
+ ::v-deep .u-text__value--content {
+ font-size: 12px !important;
+ }
+
+ ::v-deep .u-tag__close {
+ background: #436df5 !important;
+ }
+
+ ::v-deep .u-cell__body {
+ padding-bottom: 40rpx;
+ }
</style>
\ No newline at end of file
--
Gitblit v1.9.3