From eacff2ef7312ff9ecfc098a508bac36329e96f14 Mon Sep 17 00:00:00 2001 From: Houjie <714924425@qq.com> Date: 星期三, 10 九月 2025 09:46:52 +0800 Subject: [PATCH] 线边库-入库 --- pages/eam/production/record/record.vue | 1343 ++++++++++++++++++++++++++++++---------------------------- 1 files changed, 690 insertions(+), 653 deletions(-) diff --git a/pages/eam/production/record/record.vue b/pages/eam/production/record/record.vue index 69f8cc4..1401da2 100644 --- a/pages/eam/production/record/record.vue +++ b/pages/eam/production/record/record.vue @@ -1,321 +1,261 @@ <template> <view class="container"> + <!-- 椤堕儴瀵艰埅鏍� --> <cu-custom :bgColor="NavBarColor" :isBack="true" backRouterName="index"> <block slot="backText">杩斿洖</block> <block slot="content">鎿嶄綔璁板綍</block> </cu-custom> - <view class="container"> - <view class="solid-bottom"> - <scroll-view scroll-x class="bg-white nav text-center "> - <!-- <view class="flex text-center justify-around"> --> - <view class="cu-item" :class="item.value==TabCur?'text-blue cur':''" v-for="(item,index) in tabs" - :key="index" @tap="tabSelect" :data-id="item.value"> - {{item.title}} - </view> - </scroll-view> - </view> - - - <mescroll-uni ref="mescrollRef" @init="mescrollInit" :top="top" @down="downCallback" @up="upCallback"> - <view class="production-container"> - <teleport v-if="TabCur==0"> - <view class="list-item" v-for="(item, index) in mockBillList" :key="index"> - <!-- 榻愬妫�鏌� --> - <view class="item-details"> - <view class="detail-row"> - <text class="label">宸ュ崟鍙�:</text> - <text class="value">{{item.workOrderCode}}</text> - </view> - - <view class="detail-row"> - <text class="label">鐗╂枡缂栧彿:</text> - <text class="value">{{item.materialNumber}}</text> - </view> - - <view class="detail-row"> - <text class="label">鐗╂枡鍚嶇О:</text> - <text class="value">{{item.materialName}}</text> - </view> - - <view class="detail-row"> - <text class="label">闇�姹傛暟閲�:</text> - <text class="value" style="color: #00FF00;"> - {{item.requiredQuantity}}</text> - </view> - <view class="detail-row"> - <text class="label">瀹為檯鏁伴噺:</text> - <text class="value" style="color: #00FF00;">{{item.actualQuantity}}</text> - </view> - <view class="detail-row"> - <text class="label">鏄惁榻愬:</text> - <text class="value" v-if="item.checkFlag==='0'" style="color: red;">鍚�</text> - <text class="value" v-else style="color: red;">鏄�</text> - </view> - </view> - </view> - </teleport> - - - <teleport v-if="TabCur==1"> - <view class="list-item" v-for="(item, index) in checkList" :key="index"> - <!-- 榻愬妫�鏌� --> - <view class="item-details"> - <view class="detail-row"> - <text class="label">宸ヨ壓鍙傛暟缂栧彿:</text> - <text class="value">{{ item.paramCode}}</text> - </view> - - <view class="detail-row"> - <text class="label">宸ヨ壓鍙傛暟:</text> - <text class="value">{{ item.paramName}}</text> - </view> - - <view class="detail-row"> - <text class="label">鍚堟牸鑼冨洿:</text> - <text class="value">{{ item.availableQty}}</text> - </view> - - <view class="detail-row"> - <text class="label">鍙傛暟鍊�:</text> - <text class="value">{{ item.paramValue}}</text> - </view> - <view class="detail-row"> - <text class="label">鍒ゅ畾:</text> - <text class="value">{{ item.judgment}}</text> - </view> - </view> - </view> - </teleport> - - - - <teleport v-if="TabCur==2"> - <view class="container"> - <!-- 娴獥閬僵灞� --> - <view v-if="showPreview" class="overlay" @tap.stop="closePreview"> - <view class="modal"> - <!-- 鍏抽棴鎸夐挳 --> - <text class="close-btn" @tap.stop="showPreview = false">×</text> - <!-- 鍥剧墖灞曠ず --> - <image :src="previewImageSrc" mode="aspectFit" class="preview-image" - @error="handleImageError" :show-menu-by-longpress="false" /> - </view> - </view> - <uni-forms ref="form" :modelValue="formData" validate-trigger="bind" - err-show-type="undertext"> - <uni-group top="1"> - <view class="divider"><text>鍩烘湰淇℃伅</text></view> - <!-- <view class="text-gray margin-bottom-lg">鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�� 鍩烘湰淇℃伅 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺��</view> --> - <uni-forms-item :label-width="80" name="num" label="宸ュ崟鍙�:"> - <uni-easyinput v-model="formData.orderNum" :disabled="true" /> - </uni-forms-item> - <uni-forms-item :label-width="80" name="num" label="璁惧缂栧彿:"> - <uni-easyinput v-model="formData.num" :disabled="true" /> - </uni-forms-item> - - <uni-forms-item :label-width="80" name="remark" label="鐐规鏃ユ湡:"> - <uni-easyinput v-model="formData.inspectionDate" :disabled="true" /> - </uni-forms-item> - <uni-forms-item :label-width="80" name="outNum" label="鐐规浜�:"> - <uni-easyinput v-model="formData.operator" :disabled="true" /> - </uni-forms-item> - - <uni-forms-item :label-width="80" name="formData.remark" label="澶囨敞:"> - <uni-easyinput v-model="formData.remark" :disabled="true" /> - </uni-forms-item> - <uni-forms-item :label-width="80" name="outNum" label="鐐规鍥剧墖:"> - <uni-file-picker limit="9" :value="fileLists" :image-styles="imageStyles" - :sourceType="sourceType" @select="select" @progress="progress" - @success="success" @fail="fail" @delete="deletea" :readonly="readonly" /> - </uni-forms-item> - <uni-forms-item name="outNum" :label-width="80" label="浣滀笟鎸囧:"> - <button class="cu-btn bg-blue" @tap="showPreview = true">鏌ョ湅</button> - </uni-forms-item> - </uni-group> - </uni-forms> - - <!-- <view class="text-gray margin-bottom-lg">鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�� 淇濆吇椤逛俊鎭� 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺��</view> --> - <view class="divider"><text>淇濆吇椤逛俊鎭�</text></view> - <uni-collapse> - <uni-collapse-item :show-animation="true" :accordion="true" title="鏌ョ湅淇濆吇椤�" - :border="false" title-border="none"> - <uni-card margin="10px" spacing="1px" - v-for="(item,index) in partTakeAdviceDetailList" :key="index"> - - - <view class="flex"> - <view class="flex-sub text-light bg-white padding-xs margin-xs radius">琛屽彿: - </view> - <view class="flex-sub bg-white padding-xs margin-xs radius text-right"> - {{index+1}} - </view> - </view> - <view class="flex"> - <view class="flex-sub text-light bg-white padding-xs margin-xs radius">淇濆吇椤�: - </view> - <view - class="flex-sub bg-white padding-xs margin-xs text-bold radius text-right"> - {{item.itemName}} - </view> - </view> - - <view class="flex"> - <view class="flex-sub text-light bg-white padding-xs margin-xs radius"> - 淇濆吇瑕佹眰: - </view> - <view class="flex-sub bg-white padding-xs margin-xs radius text-right"> - {{item.itemDemand}} - </view> - </view> - <view class="flex"> - <view class="flex-sub text-light bg-white padding-xs margin-xs radius"> - 鐐规缁撴灉: - </view> - <view class="flex-sub bg-white padding-xs text-right margin-xs radius"> - <uni-data-select :localdata="item.restle" - v-model="item.inspectionResult" @change="handleCode($event, index)" - :disabled="item.istrue" /> - </view> - </view> - <view class="flex"> - <view class="flex-sub text-light bg-white padding-xs margin-xs radius"> - 寮傚父鏄惁鎶ヤ慨: - </view> - <view class="flex-sub bg-white padding-xs text-right margin-xs radius"> - <uni-data-select :localdata="item.type" - @change="handleType($event, index)" v-model="item.reportFlag" - :disabled="item.istrue" /> - </view> - </view> - - - <view class="flex"> - <view class="flex-sub text-light bg-white padding-xs margin-xs radius"> - 寮傚父鎻忚堪: - </view> - <view class="flex-sub bg-white padding-xs text-right margin-xs radius"> - <uni-easyinput v-model="item.exceptionDescription" - :disabled="item.istrue" /> - </view> - </view> - </uni-card> - </uni-collapse-item> - </uni-collapse> - - - <view class="padding flex flex-direction"> - <view - class="flex-sub bg-blue padding-sm margin-xl radius text-sm text-center text-white" - @click.stop="ProductionTask()" hover-class="is-hover">纭畾</view> - </view> - </view> - </teleport> - - - - - <teleport v-if="TabCur==3"> - <view class="container"> - <uni-forms ref="form" :modelValue="formData" validate-trigger="bind" - err-show-type="undertext"> - <uni-group top="1"> - <uni-forms-item :label-width="100" name="remark" label="鏂囦欢鍚嶇О:"> - <uni-easyinput v-model="formData.equipmentName" /> - </uni-forms-item> - <uni-forms-item :label-width="100" name="outNum" label="璁惧鏂囨。:"> - <uni-file-picker v-model="fileLists" :extension="['.pdf']" @fail="uploadFail" - :list-styles="listStyles" :delIcon="del" :max-count="5" file-mediatype="all" - @downloadFile="downloadFile" @select="onFileSelect" @delete="onFileDelete"> - <button size="mini" type="primary">鐐瑰嚮涓婁紶</button> - </uni-file-picker> - </uni-forms-item> - <!-- 鏂板锛氭牎楠岀粨鏋滃崟閫夋 --> - <uni-forms-item name="result" :label-width="100" label="妫�楠岀粨鏋�:"> - <radio-group @change="radioChange"> - <label style="margin-right: 20rpx;"> - <radio :checked="formData.result=='qualified'" value="qualified" />鍚堟牸 - </label> - - <label style="margin-right: 20rpx;"> - <radio :checked="formData.result=='unqualified'" value="unqualified" /> - 涓嶅悎鏍� - </label> - </radio-group> - </uni-forms-item> - </uni-group> - </uni-forms> - - <view class="file-list margin-sm"> - <view class="file-item" v-for="(file, index) in this.selectedFiles" :key="index"> - <view class="file-icon"> - <!-- 鏂囦欢鍥炬爣 --> - <image src="/static/icon_file.png" - style="height: 25px; width: 25px; margin-right: 10px;" mode='aspectFit' - class="zai-logo "></image> - </view> - <view class="file-name"> - <!-- 鏂囦欢鍚� --> - {{ file.fileName }} - </view> - <view class="file-actions"> - <!-- 涓嬭浇鎸夐挳 --> - <image v-show="showBtn" src="/static/icon_down.png" @click="downloadFile(file)" - style="height: 25px; width: 25px; margin-right: 10px;"></image> - </view> - </view> - </view> - - <view class="padding flex flex-direction"> - <view - class="flex-sub bg-blue padding-sm margin-xl radius text-sm text-center text-white" - @click.stop="ProductionTask()" hover-class="is-hover">纭畾</view> - </view> - </view> - </teleport> - - - - <teleport v-if="TabCur==4"> - <view class="list-item" v-for="(item, index) in checkList" :key="index"> - <!-- 榻愬妫�鏌� --> - <view class="item-details"> - <view class="detail-row"> - <text class="label">鎵规鍙�:</text> - <text class="value">{{ item.paramCode}}</text> - </view> - - <view class="detail-row"> - <text class="label">鐗╂枡缂栫爜:</text> - <text class="value">{{ item.paramName}}</text> - </view> - - <view class="detail-row"> - <text class="label">鐗╂枡鎻忚堪:</text> - <text class="value">{{ item.availableQty}}</text> - </view> - - <view class="detail-row"> - <text class="label">涓婃枡鏃堕棿:</text> - <text class="value">{{ item.paramValue}}</text> - </view> - <view class="detail-row"> - <text class="label">涓婃枡鏁伴噺:</text> - <text class="value">{{ item.judgment}}</text> - </view> - <view class="detail-row"> - <text class="label">涓婃枡浜哄憳:</text> - <text class="value">{{ item.judgment}}</text> - </view> - </view> - </view> - </teleport> - - - <!-- 琛ㄥご锛堝叡鐢ㄦ牱寮忥級 --> - - + + <!-- 鍚搁《鏍囩鏍� --> + <view class="solid-bottom" :style="{ top: navBarHeight + 'px' }"> + <scroll-view scroll-x class="bg-white nav text-center"> + <view class="cu-item" :class="item.value==TabCur?'text-blue cur':''" v-for="(item,index) in tabs" + :key="index" @tap="tabSelect" :data-id="item.value"> + {{item.title}} </view> - </mescroll-uni> + </scroll-view> + </view> + + <!-- 鐙珛婊氬姩鐨勫垪琛ㄥ鍣� --> + <view class="production-container" :style="{ height: contentHeight + 'px' }"> + <!-- 榻愬妫�鏌� --> + <teleport v-if="TabCur==0"> + <view class="list-item" v-for="(item, index) in mockBillList" :key="index"> + <view class="item-details"> + <view class="detail-row"> + <text class="label">宸ュ崟鍙�:</text> + <text class="value">{{item.workOrderCode}}</text> + </view> + <view class="detail-row"> + <text class="label">鐗╂枡缂栧彿:</text> + <text class="value">{{item.materialNumber}}</text> + </view> + <view class="detail-row"> + <text class="label">鐗╂枡鍚嶇О:</text> + <text class="value">{{item.materialName}}</text> + </view> + <view class="detail-row"> + <text class="label">闇�姹傛暟閲�:</text> + <text class="value" style="color: #00FF00;">{{item.requiredQuantity}}</text> + </view> + <view class="detail-row"> + <text class="label">瀹為檯鏁伴噺:</text> + <text class="value" style="color: #00FF00;">{{item.actualQuantity}}</text> + </view> + <view class="detail-row"> + <text class="label">鏄惁榻愬:</text> + <text class="value" v-if="item.checkFlag==='0'" style="color: red;">鍚�</text> + <text class="value" v-else style="color: green;">鏄�</text> + </view> + </view> + </view> + </teleport> + + <!-- 宸ヨ壓鐐规 --> + <teleport v-if="TabCur==1"> + <view class="list-item" v-for="(item, index) in checkList" :key="index"> + <view class="item-details"> + <view class="detail-row"> + <text class="label">宸ヨ壓鍙傛暟缂栧彿:</text> + <text class="value">{{ item.paramCode}}</text> + </view> + <view class="detail-row"> + <text class="label">宸ヨ壓鍙傛暟:</text> + <text class="value">{{ item.paramName}}</text> + </view> + <view class="detail-row"> + <text class="label">鍚堟牸鑼冨洿:</text> + <text class="value">{{ item.validRange}}</text> + </view> + <view class="detail-row"> + <text class="label">鍙傛暟鍊�:</text> + <text class="value">{{ item.paramValue}}</text> + </view> + <view class="detail-row"> + <text class="label">鍒ゅ畾:</text> + <text class="value">{{ item.judgment}}</text> + </view> + </view> + </view> + </teleport> + + <!-- 璁惧鐐规 --> + <teleport v-if="TabCur==2"> + <view class="container-inner"> + <!-- 娴獥閬僵灞� --> + <view v-if="showPreview" class="overlay" @tap.stop="closePreview"> + <view class="modal"> + <text class="close-btn" @tap.stop="showPreview = false">×</text> + <image :src="previewImageSrc" mode="aspectFit" class="preview-image" + @error="handleImageError" :show-menu-by-longpress="false" /> + </view> + </view> + + <uni-forms ref="form" :modelValue="formData" validate-trigger="bind" + err-show-type="undertext"> + <uni-group top="1"> + <view class="divider"><text>鍩烘湰淇℃伅</text></view> + <uni-forms-item :label-width="80" name="orderNum" label="宸ュ崟鍙�:"> + <uni-easyinput v-model="formData.orderNum" :disabled="true" /> + </uni-forms-item> + <uni-forms-item :label-width="80" name="equipmentNum" label="璁惧缂栧彿:"> + <uni-easyinput v-model="formData.num" :disabled="true" /> + </uni-forms-item> + <uni-forms-item :label-width="80" name="inspectionDate" label="鐐规鏃ユ湡:"> + <uni-easyinput v-model="formData.inspectionDate" :disabled="true" /> + </uni-forms-item> + <uni-forms-item :label-width="80" name="operator" label="鐐规浜�:"> + <uni-easyinput v-model="formData.operator" :disabled="true" /> + </uni-forms-item> + <uni-forms-item :label-width="80" name="remark" label="澶囨敞:"> + <uni-easyinput v-model="formData.remark" :disabled="true" /> + </uni-forms-item> + <uni-forms-item :label-width="80" name="checkImages" label="鐐规鍥剧墖:"> + <uni-file-picker limit="9" :value="fileLists" :image-styles="imageStyles" + :sourceType="sourceType" @select="select" @progress="progress" + @success="success" @fail="fail" @delete="deletea" :readonly="readonly" /> + </uni-forms-item> + <uni-forms-item name="guide" :label-width="80" label="浣滀笟鎸囧:"> + <button class="cu-btn bg-blue" @tap="showPreview = true">鏌ョ湅</button> + </uni-forms-item> + </uni-group> + </uni-forms> + + <view class="divider"><text>淇濆吇椤逛俊鎭�</text></view> + <uni-collapse> + <uni-collapse-item :show-animation="true" :accordion="true" title="鏌ョ湅淇濆吇椤�" + :border="false" title-border="none"> + <uni-card margin="10px" spacing="1px" + v-for="(item,index) in partTakeAdviceDetailList" :key="index"> + <view class="flex"> + <view class="flex-sub text-light bg-white padding-xs margin-xs radius">琛屽彿:</view> + <view class="flex-sub bg-white padding-xs margin-xs radius text-right">{{index+1}}</view> + </view> + <view class="flex"> + <view class="flex-sub text-light bg-white padding-xs margin-xs radius">淇濆吇椤�:</view> + <view class="flex-sub bg-white padding-xs margin-xs text-bold radius text-right">{{item.itemName}}</view> + </view> + <view class="flex"> + <view class="flex-sub text-light bg-white padding-xs margin-xs radius">淇濆吇瑕佹眰:</view> + <view class="flex-sub bg-white padding-xs margin-xs radius text-right">{{item.itemDemand}}</view> + </view> + <view class="flex"> + <view class="flex-sub text-light bg-white padding-xs margin-xs radius">鐐规缁撴灉:</view> + <view class="flex-sub bg-white padding-xs text-right margin-xs radius"> + <uni-data-select :localdata="item.restle" + v-model="item.inspectionResult" @change="handleCode($event, index)" + :disabled="item.istrue" /> + </view> + </view> + <view class="flex"> + <view class="flex-sub text-light bg-white padding-xs margin-xs radius">寮傚父鏄惁鎶ヤ慨:</view> + <view class="flex-sub bg-white padding-xs text-right margin-xs radius"> + <uni-data-select :localdata="item.type" + @change="handleType($event, index)" v-model="item.reportFlag" + :disabled="item.istrue" /> + </view> + </view> + <view class="flex"> + <view class="flex-sub text-light bg-white padding-xs margin-xs radius">寮傚父鎻忚堪:</view> + <view class="flex-sub bg-white padding-xs text-right margin-xs radius"> + <uni-easyinput v-model="item.exceptionDescription" + :disabled="item.istrue" /> + </view> + </view> + </uni-card> + </uni-collapse-item> + </uni-collapse> + + <view class="padding flex flex-direction"> + <view class="flex-sub bg-blue padding-sm margin-xl radius text-sm text-center text-white" + @click.stop="ProductionTask()" hover-class="is-hover">纭畾</view> + </view> + </view> + </teleport> + + <!-- 鏍蜂欢鏍¢獙 --> + <teleport v-if="TabCur==3"> + <view class="container-inner"> + <uni-forms ref="form" :modelValue="formData" validate-trigger="bind" + err-show-type="undertext"> + <uni-group top="1"> + <uni-forms-item :label-width="100" name="equipmentName" label="鏂囦欢鍚嶇О:"> + <uni-easyinput v-model="formData.equipmentName" /> + </uni-forms-item> + <uni-forms-item :label-width="100" name="equipmentDoc" label="璁惧鏂囨。:"> + <uni-file-picker v-model="fileLists" :extension="['.pdf']" @fail="uploadFail" + :list-styles="listStyles" :delIcon="del" :max-count="5" file-mediatype="all" + @downloadFile="downloadFile" @select="onFileSelect" @delete="onFileDelete"> + <button size="mini" type="primary">鐐瑰嚮涓婁紶</button> + </uni-file-picker> + </uni-forms-item> + <uni-forms-item name="result" :label-width="100" label="妫�楠岀粨鏋�:"> + <radio-group @change="radioChange" v-model="formData.result"> + <label style="margin-right: 20rpx;"> + <radio :checked="formData.result=='qualified'" value="qualified" />鍚堟牸 + </label> + <label style="margin-right: 20rpx;"> + <radio :checked="formData.result=='unqualified'" value="unqualified" /> + 涓嶅悎鏍� + </label> + </radio-group> + </uni-forms-item> + </uni-group> + </uni-forms> + + <view class="file-list margin-sm"> + <view class="file-item" v-for="(file, index) in selectedFiles" :key="index"> + <view class="file-icon"> + <image src="/static/icon_file.png" + style="height: 50rpx; width: 50rpx; margin-right: 20rpx;" mode='aspectFit' + class="zai-logo "></image> + </view> + <view class="file-name">{{ file.fileName }}</view> + <view class="file-actions"> + <image v-show="showBtn" src="/static/icon_down.png" @click="downloadFile(file)" + style="height: 50rpx; width: 50rpx; margin-right: 20rpx;"></image> + </view> + </view> + </view> + + <view class="padding flex flex-direction"> + <view class="flex-sub bg-blue padding-sm margin-xl radius text-sm text-center text-white" + @click.stop="ProductionTask()" hover-class="is-hover">纭畾</view> + </view> + </view> + </teleport> + + <!-- 涓婃枡璁板綍 --> + <teleport v-if="TabCur==4"> + <view class="list-item" v-for="(item, index) in feedingList" :key="index"> + <view class="item-details"> + <view class="detail-row"> + <text class="label">鎵规鍙�:</text> + <text class="value">{{ item.batchCode}}</text> + </view> + <view class="detail-row"> + <text class="label">鐗╂枡缂栫爜:</text> + <text class="value">{{ item.materialCode}}</text> + </view> + <view class="detail-row"> + <text class="label">鐗╂枡鎻忚堪:</text> + <text class="value">{{ item.materialDesc}}</text> + </view> + <view class="detail-row"> + <text class="label">涓婃枡鏃堕棿:</text> + <text class="value">{{ item.feedingTime}}</text> + </view> + <view class="detail-row"> + <text class="label">涓婃枡鏁伴噺:</text> + <text class="value">{{ item.feedingQty}}</text> + </view> + <view class="detail-row"> + <text class="label">涓婃枡浜哄憳:</text> + <text class="value">{{ item.feeder}}</text> + </view> + </view> + </view> + </teleport> </view> </view> </template> @@ -342,91 +282,66 @@ } ]; import configService from "@/common/service/config.service.js"; - import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js"; export default { - mixins: [MescrollMixin], // 浣跨敤mixin data() { return { - mockBillList:[], + // 鍚搁《鍜屾粴鍔ㄧ浉鍏� + navBarHeight: 0, + contentHeight: 0, + + // 鏁版嵁鍒楄〃 + mockBillList: [], + checkList: [], + partTakeAdviceDetailList: [], + feedingList: [], + + // 鍥剧墖棰勮 previewImageSrc: '', ipAndPort: configService.staticURL, fileLists: [], - // 涓婁紶鍥剧墖鐨勬牱寮� + + // 涓婁紶鍥剧墖鏍峰紡 imageStyles: { width: 90, height: 90, }, sourceType: ['album', 'camera'], - ScanData: { - typeName: '', - handlingType: [{ - text: "閫氳繃", - value: "1" - }, - { - text: "椹冲洖", - value: "2" - } - ], - handlingSuggestion: '' - }, + + // 琛ㄥ崟鏁版嵁 formData: { num: '', avatar: [], orderNum: '', operator: '', - inspectionDate: '' - + inspectionDate: '', + remark: '', + equipmentName: '', + result: 'qualified' }, - checkList: [{ - paramCode: '001', - paramName: '杞��', - validRange: '', - paramValue: '', - judgment: '鍚堟牸' - }, - { - paramCode: '002', - paramName: '杩涚粰', - validRange: '', - paramValue: '', - judgment: '鍚堟牸' - }, - { - paramCode: '003', - paramName: '鍚冨垁閲�', - validRange: '', - paramValue: '', - judgment: '鍚堟牸' - }, - { - paramCode: '004', - paramName: '鍊嶇巼', - validRange: '', - paramValue: '', - judgment: '鍚堟牸' - } - ], + + // 鏍囩鐩稿叧 tabs, TabCur: 0, scrollLeft: 0, NavBarColor: this.NavBarColor, + + // 鍒嗛〉閰嶇疆 upOption: { page: { - num: 0, // 褰撳墠椤电爜,榛樿0,鍥炶皟涔嬪墠浼氬姞1,鍗砪allback(page)浼氫粠1寮�濮� - size: 10, // 姣忛〉鏁版嵁鐨勬暟閲� - + num: 0, + size: 10, }, - noMoreSize: 4, //濡傛灉鍒楄〃宸叉棤鏁版嵁,鍙缃垪琛ㄧ殑鎬绘暟閲忚澶т簬鍗婇〉鎵嶆樉绀烘棤鏇村鏁版嵁;閬垮厤鍒楄〃鏁版嵁杩囧皯(姣斿鍙湁涓�鏉℃暟鎹�),鏄剧ず鏃犳洿澶氭暟鎹細涓嶅ソ鐪�; 榛樿5 + noMoreSize: 4, empty: { - tip: '~ 鏆傛棤鏁版嵁 ~', // 鎻愮ず - + tip: '~ 鏆傛棤鏁版嵁 ~', }, loading: '', text: '鍏ㄩ儴', isShowNoMore: false, textNoMore: '鎴戞槸鏈夊簳绾跨殑 >_<' }, + + // 鍏朵粬閰嶇疆 styles: { color: '#2979FF', borderColor: '#2979FF' @@ -442,14 +357,22 @@ current: 0, colorIndex: 0, activeColor: '#5277A6', - msgList: [], //鍒楄〃鏁版嵁 + msgList: [], announcementList: [], + workOrderId:'', + // 鏂囦欢鐩稿叧 + readonly: false, + del: true, + showBtn: true, + listStyles: { height: '100rpx' }, + selectedFiles: [], + showPreview: false } }, computed: { top() { - return this.CustomBar * 2 + 100 + return this.CustomBar * 2 + 120 }, style() { var StatusBar = this.StatusBar; @@ -458,22 +381,182 @@ return style }, }, + onLoad(options) { + this.calculateHeights(); + if (options.id) { + this.workOrderId = options.id; + console.log('鎺ユ敹鐨勫伐鍗昳d:', this.workOrderId); + + // 鍙湪姝ゅ璋冪敤鎺ュ彛锛屾牴鎹甶d鑾峰彇宸ュ崟璇︽儏 + this.upCallback(this.workOrderId); + } + // 璁$畻瀵艰埅鏍忓拰鍐呭鍖哄煙楂樺害 + + }, + onLoad() { + + }, methods: { + // 璁$畻瀵艰埅鏍忓拰鍐呭鍖哄煙楂樺害 + calculateHeights() { + uni.getSystemInfo({ + success: (res) => { + // 瀵艰埅鏍忛珮搴� = 鐘舵�佹爮楂樺害 + 鑷畾涔夊鑸爮楂樺害(44px) + this.navBarHeight = res.statusBarHeight + 44; + + // 鏍囩鏍忛珮搴︾害50px锛岃绠楀唴瀹瑰尯鍩熼珮搴� + const tabBarHeight = 50; + const safeAreaBottom = res.safeArea?.bottom || 0; + this.contentHeight = res.windowHeight - this.navBarHeight - tabBarHeight - (res.windowHeight - safeAreaBottom); + } + }); + }, + + // 鍒濆鍖栨ā鎷熸暟鎹� + initData() { + // 榻愬妫�鏌ユā鎷熸暟鎹� + this.mockBillList = [ + { + workOrderCode: 'WO2023001', + materialNumber: 'MAT001', + materialName: '杞存壙', + requiredQuantity: '100', + actualQuantity: '100', + checkFlag: '1' + }, + { + workOrderCode: 'WO2023001', + materialNumber: 'MAT002', + materialName: '榻胯疆', + requiredQuantity: '50', + actualQuantity: '45', + checkFlag: '0' + }, + { + workOrderCode: 'WO2023002', + materialNumber: 'MAT003', + materialName: '铻烘爴', + requiredQuantity: '200', + actualQuantity: '200', + checkFlag: '1' + } + ]; + + // 宸ヨ壓鐐规妯℃嫙鏁版嵁 + this.checkList = [ + { + paramCode: '001', + paramName: '杞��', + validRange: '1000-1500r/min', + paramValue: '1200r/min', + judgment: '鍚堟牸' + }, + { + paramCode: '002', + paramName: '杩涚粰', + validRange: '0.1-0.3mm/r', + paramValue: '0.2mm/r', + judgment: '鍚堟牸' + }, + { + paramCode: '003', + paramName: '鍚冨垁閲�', + validRange: '2-5mm', + paramValue: '3mm', + judgment: '鍚堟牸' + }, + { + paramCode: '004', + paramName: '鍊嶇巼', + validRange: '80%-120%', + paramValue: '100%', + judgment: '鍚堟牸' + } + ]; + + // 涓婃枡璁板綍妯℃嫙鏁版嵁 + this.feedingList = [ + { + batchCode: 'B20230501', + materialCode: 'MAT001', + materialDesc: '杞存壙', + feedingTime: '2023-05-01 08:30', + feedingQty: '100', + feeder: '寮犱笁' + }, + { + batchCode: 'B20230501', + materialCode: 'MAT002', + materialDesc: '榻胯疆', + feedingTime: '2023-05-01 09:15', + feedingQty: '50', + feeder: '鏉庡洓' + } + ]; + + // 璁惧鐐规淇濆吇椤规ā鎷熸暟鎹� + this.partTakeAdviceDetailList = [ + { + itemName: '娑︽粦娌规鏌�', + itemDemand: '娌归噺鍦ㄥ埢搴︾嚎涔嬮棿锛屾棤鍙樿川', + restle: [ + { text: "姝e父", value: '1' }, + { text: "寮傚父", value: '2' } + ], + type: [ + { text: "鍚�", value: "0" }, + { text: "鏄�", value: "1" } + ], + istrue: false, + inspectionResult: '', + reportFlag: '0', + exceptionDescription: '' + }, + { + itemName: '铻轰笣绱у浐', + itemDemand: '鎵�鏈夎灪涓濇棤鏉惧姩', + restle: [ + { text: "姝e父", value: '1' }, + { text: "寮傚父", value: '2' } + ], + type: [ + { text: "鍚�", value: "0" }, + { text: "鏄�", value: "1" } + ], + istrue: false, + inspectionResult: '', + reportFlag: '0', + exceptionDescription: '' + } + ]; + + // 琛ㄥ崟鍒濆鏁版嵁 + this.formData = { + num: 'EQ2023001', + orderNum: 'WO2023001', + operator: '寮犱笁', + inspectionDate: '2023-05-01', + remark: '璁惧杩愯姝e父', + equipmentName: '璁惧鏍¢獙鎶ュ憡', + result: 'qualified' + }; + }, + mescrollInit(mescroll) { console.log('mescrollInit') this.mescroll = mescroll; }, upCallback() { - //鑱旂綉鍔犺浇鏁版嵁 - console.log("tabindex", this.TabCur) + // 鑱旂綉鍔犺浇鏁版嵁鐨勯�昏緫 + console.log("褰撳墠鏍囩椤�:", this.TabCur) let keyword = this.TabCur if (keyword == 0) { this.$http.get(this.url.sub1, { params: { - workOrderId:"1960585092127371266" + workOrderId:this.workOrderId } }).then(res => { @@ -490,102 +573,40 @@ icon: 'none' }); }) + + + } else if (keyword == 1) { - this.$http.get(this.url.list, { - params: { - pageSize: page.size, - order: "desc", - column: "createTime", - type: 2, - status: 1 - } - }).then(res => { - //鑱旂綉鎴愬姛鐨勫洖璋�,闅愯棌涓嬫媺鍒锋柊鍜屼笂鎷夊姞杞界殑鐘舵��; - this.announcement2 = res.data.result.records - this.mescroll.endSuccess(this.announcement2.length, this.msgCount); - - //璁剧疆鍒楄〃鏁版嵁 - if (res.data.success) { - console.log("res sys", res.data) - this.msg2Count = res.data.result.total - this.msg2Title = "閫氱煡(" + res.data.result.total + ")"; - - for (let item of this.announcement2) { - this.msgList.push(item) - } - } - if (page.num == 1) { - this.msgList = []; //濡傛灉鏄涓�椤甸渶鎵嬪姩鍒剁┖鍒楄〃 - this.msgList = this.msgList.concat(this.announcement2); //杩藉姞鏂版暟鎹� - } - }).catch(() => { - //鑱旂綉澶辫触, 缁撴潫鍔犺浇 - this.mescroll.endErr(); - uni.showToast({ - title: '缃戠粶寮傚父锛岃绋嶅悗鍐嶈瘯', - icon: 'none' - }); - }) + console.log("鍔犺浇宸ヨ壓鐐规鏁版嵁"); } else if (keyword == 2) { - - this.$http.get(this.url.list, { - params: { - pageSize: page.size, - order: "desc", - column: "createTime", - type: 2, - status: 2 - } - }).then(res => { - //鑱旂綉鎴愬姛鐨勫洖璋�,闅愯棌涓嬫媺鍒锋柊鍜屼笂鎷夊姞杞界殑鐘舵��; - this.announcement2 = res.data.result.records - this.mescroll.endSuccess(this.announcement2.length, this.msgCount); - - //璁剧疆鍒楄〃鏁版嵁 - if (res.data.success) { - console.log("res sys", res.data) - this.msg2Count = res.data.result.total - this.msg2Title = "閫氱煡(" + res.data.result.total + ")"; - - for (let item of this.announcement2) { - this.msgList.push(item) - } - } - if (page.num == 1) { - this.msgList = []; //濡傛灉鏄涓�椤甸渶鎵嬪姩鍒剁┖鍒楄〃 - this.msgList = this.msgList.concat(this.announcement2); //杩藉姞鏂版暟鎹� - } - }).catch(() => { - //鑱旂綉澶辫触, 缁撴潫鍔犺浇 - this.mescroll.endErr(); - uni.showToast({ - title: '缃戠粶寮傚父锛岃绋嶅悗鍐嶈瘯', - icon: 'none' - }); - }) - + console.log("鍔犺浇璁惧鐐规鏁版嵁"); } - }, + + // 鏍囩閫夋嫨 tabSelect(e) { - this.TabCur = e.currentTarget.dataset.id; - this.scrollLeft = (e.currentTarget.dataset.id - 1) * 60; - this.msgList = [] // 鍏堢疆绌哄垪琛�,鏄剧ず鍔犺浇杩涘害 - this.mescroll.resetUpScroll() // 鍐嶅埛鏂板垪琛ㄦ暟鎹� + const tabIndex = e.currentTarget.dataset.id; + this.TabCur = tabIndex; + + // 鍔ㄦ�佽绠楁粴鍔ㄤ綅缃� + const query = uni.createSelectorQuery().in(this); + query.selectAll('.cu-item').boundingClientRect(rects => { + let scrollLeft = 0; + for (let i = 0; i < tabIndex - 1; i++) { + scrollLeft += rects[i]?.width || 0; + } + this.scrollLeft = scrollLeft; + }).exec(); }, - - ListTouchStart(e) { this.listTouchStart = e.touches[0].pageX }, - // ListTouch璁$畻鏂瑰悜 ListTouchMove(e) { this.listTouchDirection = e.touches[0].pageX - this.listTouchStart > 0 ? 'right' : 'left' }, - // ListTouch璁$畻婊氬姩 ListTouchEnd(e) { if (this.listTouchDirection == 'left') { this.modalName = e.currentTarget.dataset.target @@ -596,281 +617,297 @@ }, /** - * 淇濆吇椤� + * 淇濆吇椤圭浉鍏虫柟娉� */ getList() { - this.$http.get(this.url.BaoList, { - params: { - orderId: this.id - }, - - }).then(res => { - this.partTakeAdviceDetailList = res.data.result; - const restle = []; - this.partTakeAdviceDetailList.forEach(item => { - item.restle = [{ - text: "姝e父", - value: '1' - }, - { - text: "寮傚父", - value: '2' - } - ]; // 鏂板瓧娈碉紝鍊间负涓�涓┖鏁扮粍 - item.type = [{ - text: "鍚�", - value: "0" - }, - { - text: "鏄�", - value: "1" - } - ]; // 鏂板瓧娈碉紝鍊间负涓�涓┖鏁扮粍 - item.istrue = true; - }); - console.log("url", res) - //璁剧疆鍒楄〃鏁版嵁 - if (res.data.success) { - console.log("res", res.data.result) - - } - }).catch(() => { - //鑱旂綉澶辫触, 缁撴潫鍔犺浇 - }) + // 瀹為檯椤圭洰涓皟鐢ˋPI鑾峰彇淇濆吇椤规暟鎹� + console.log("鑾峰彇淇濆吇椤规暟鎹�"); }, + + handleCode(e, index) { + console.log("鐐规缁撴灉鍙樻洿:", e, "绱㈠紩:", index); + }, + + handleType(e, index) { + console.log("鎶ヤ慨鐘舵�佸彉鏇�:", e, "绱㈠紩:", index); + }, + + // 鍥剧墖閿欒澶勭悊 handleImageError(e) { const icon_prefix = "/static/"; this.previewImageSrc = icon_prefix + "icn_erro.png" }, + + // 鍏抽棴棰勮 + closePreview() { + this.showPreview = false; + }, + /** * 浣滀笟鎸囧涔� */ getStandardFile() { - this.$http.get(this.url.getStandardFile, { - params: { - id: this.standardId - } - }).then(res => { - if (res.data.success) { - console.log("res", res.data.result); - const referenceFileStr = res.data.result.referenceFile; - - // 鍒ゆ柇鏄惁瀛樺湪 referenceFile 骞惰繘琛岃В鏋� - if (referenceFileStr) { - try { - const referenceFileObj = JSON.parse(referenceFileStr); - const filePath = `${this.ipAndPort}${referenceFileObj.filePath}`; - this.previewImageSrc = filePath; - console.log('previewImageSrc:', this.previewImageSrc); - } catch (e) { - console.error("referenceFile 瑙f瀽澶辫触", e); - this.previewImageSrc = ''; - } - } else { - console.warn("referenceFile 涓嶅瓨鍦�"); - this.previewImageSrc = ''; - } - } - }).catch(err => { - console.error("缃戠粶璇锋眰澶辫触", err); - // 鑱旂綉澶辫触, 缁撴潫鍔犺浇 - }); + // 瀹為檯椤圭洰涓皟鐢ˋPI鑾峰彇浣滀笟鎸囧涔� + console.log("鑾峰彇浣滀笟鎸囧涔�"); }, + // 鍥剧墖閫夋嫨 select(e) { const tempFilePaths = e.tempFilePaths; uni.showLoading({ title: '涓婁紶涓�...' }); - const uploadPromises = tempFilePaths.map((filePath, index) => { - return new Promise((resolve, reject) => { - this.$http.upload(this.url.upload, { - filePath: filePath, - name: 'file' - }) - .then(uploadRes => { - // 鍋囪鏈嶅姟鍣ㄨ繑鍥炵殑缁撴灉涓寘鍚枃浠惰矾寰� - const serverFilePath = uploadRes.data.result[0]; - this.formData.avatar.push(serverFilePath); - resolve(uploadRes); // 杩斿洖缁撴灉缁� Promise.all - }) - .catch(err => { - console.error(`鍥剧墖 ${index + 1} 涓婁紶澶辫触:`, err); - reject(err); - }); - }); - }); - - Promise.all(uploadPromises) - .then(() => { - uni.hideLoading(); - uni.showToast({ - title: '鍏ㄩ儴涓婁紶鎴愬姛' - }); - }) - .catch(err => { - uni.hideLoading(); - uni.showToast({ - title: '閮ㄥ垎涓婁紶澶辫触', - icon: 'none' - }); - console.error('涓婁紶寮傚父:', err); - }); + + // 妯℃嫙涓婁紶鎴愬姛 + setTimeout(() => { + uni.hideLoading(); + uni.showToast({ title: '涓婁紶鎴愬姛' }); + }, 1000); }, - // 鍒犻櫎 + + // 鍒犻櫎鍥剧墖 deletea(e) { console.log('鍒犻櫎鍥剧墖', e); + }, + + // 鏂囦欢閫夋嫨 + onFileSelect(e) { + const newFiles = e.tempFiles.map(file => ({ + fileName: file.name, + filePath: file.path, + size: file.size + })); + this.selectedFiles = [...this.selectedFiles, ...newFiles]; + }, + + // 鍒犻櫎鏂囦欢 + onFileDelete(e) { + this.selectedFiles.splice(e.index, 1); + }, + + // 涓嬭浇鏂囦欢 + downloadFile(file) { + uni.showToast({ title: `姝e湪涓嬭浇 ${file.fileName}`, icon: 'none' }); + // 瀹為檯椤圭洰涓皟鐢ㄤ笅杞紸PI + }, + + // 妫�楠岀粨鏋滃彉鏇� + radioChange(e) { + this.formData.result = e.detail.value; + }, + + // 涓婁紶澶辫触 + uploadFail(e) { + console.log('涓婁紶澶辫触', e); + uni.showToast({ title: '涓婁紶澶辫触', icon: 'none' }); + }, + + // 杩涘害鍥炶皟 + progress(e) { + console.log('涓婁紶杩涘害', e); + }, + + // 鎴愬姛鍥炶皟 + success(e) { + console.log('涓婁紶鎴愬姛', e); + }, + + // 澶辫触鍥炶皟 + fail(e) { + console.log('鎿嶄綔澶辫触', e); + }, + + // 纭畾鎸夐挳 + ProductionTask() { + uni.showToast({ title: '鎿嶄綔鎴愬姛' }); } } } </script> -<style> - <style scoped> - - /* 鍒楄〃瀹瑰櫒鏍峰紡 */ - .check-list-container { - margin-bottom: 120rpx; - /* 涓哄簳閮ㄦ搷浣滄爮鐣欏嚭绌洪棿 */ +<style scoped> + .container { + background-color: #f5f7fa; + min-height: 100vh; } - + + /* 鍚搁《鏍囩鏍忔牱寮� */ + .solid-bottom { + position: sticky; + z-index: 99; + border-bottom: 1px solid #eee; + } + + .nav { + white-space: nowrap; + padding: 12rpx 0; + } + + .cu-item { + display: inline-block; + padding: 10rpx 30rpx; + margin: 0 10rpx; + font-size: 28rpx; + color: #666; + position: relative; + } + + .cu-item.text-blue.cur { + color: #007AFF; + font-weight: bold; + } + + .cu-item.cur::after { + content: ''; + position: absolute; + bottom: 0; + left: 50%; + transform: translateX(-50%); + width: 40rpx; + height: 4rpx; + background-color: #007AFF; + border-radius: 2rpx; + } + + /* 鍒楄〃瀹瑰櫒鏍峰紡 */ + .production-container { + overflow-y: auto; + background-color: #f5f7fa; + padding: 10rpx; + } + + /* 闅愯棌婊氬姩鏉� */ + .production-container::-webkit-scrollbar { + display: none; + } + + .container-inner { + padding: 16rpx; + } + /* 鍒楄〃椤规牱寮� */ .list-item { background-color: #fff; border-radius: 16rpx; padding: 20rpx; - margin: 10px; margin-bottom: 20rpx; - box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1); + box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05); + transition: background-color 0.2s; } - - /* 椤瑰ご閮ㄦ牱寮� */ - .item-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 20rpx; - padding-bottom: 15rpx; - border-bottom: 1rpx solid #eee; + + .list-item:active { + background-color: #f5f7fa; } - - .part-code { - font-size: 32rpx; - font-weight: bold; - color: #333; - } - - .warehouse-tag { - font-size: 24rpx; - color: #007AFF; - background-color: #e8f4ff; - padding: 6rpx 12rpx; - border-radius: 8rpx; - } - + /* 璇︾粏淇℃伅鏍峰紡 */ .item-details { margin-bottom: 20rpx; } - + .detail-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15rpx; } - + .detail-row:last-child { margin-bottom: 0; } - + .label { font-size: 28rpx; color: #666; flex: 1; } - + .value { font-size: 28rpx; color: #333; flex: 1; text-align: right; } - - .warning-text { - color: #ff6347; - font-weight: bold; - } - - /* 鍙紪杈戞牱寮� */ - .editable { - display: flex; - align-items: center; - justify-content: flex-end; - } - - .edit-input { - border: 1rpx solid #007AFF; - border-radius: 8rpx; - padding: 10rpx; - width: 120rpx; - text-align: right; - font-size: 28rpx; - } - - .edit-icon { - margin-left: 10rpx; - color: #007AFF; - font-size: 24rpx; - } - - /* 鎿嶄綔鎸夐挳鏍峰紡 */ - .item-actions { - display: flex; - justify-content: flex-end; - gap: 20rpx; - } - - .action-btn { - padding: 12rpx 24rpx; - font-size: 13rpx; - border-radius: 8rpx; - border: none; - min-width: 60rpx; - } - - .edit-btn { - background-color: #007AFF; - color: #fff; - } - - .delete-btn { - background-color: #ff6347; - color: #fff; - } - + + /* 鍒嗗壊绾挎牱寮� */ .divider { display: flex; align-items: center; text-align: center; color: gray; - /* 鏂囧瓧棰滆壊 */ margin: 20px 0; - /* 涓婁笅闂磋窛 */ } - + .divider::before, .divider::after { content: ''; flex: 1; border-bottom: 1px solid gray; - /* 妯嚎棰滆壊 */ margin: 0 16px; - /* 妯嚎涓庢枃瀛椾箣闂寸殑闂磋窛 */ } - + .divider text { white-space: nowrap; - /* 闃叉鏂囧瓧鎹㈣ */ } -</style> \ No newline at end of file + + /* 鏂囦欢鍒楄〃鏍峰紡 */ + .file-list { + margin-top: 20rpx; + } + + .file-item { + display: flex; + align-items: center; + padding: 16rpx; + background-color: #fff; + border-radius: 8rpx; + margin-bottom: 10rpx; + } + + .file-name { + flex: 1; + font-size: 28rpx; + color: #333; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + /* 鍥剧墖棰勮鏍峰紡 */ + .overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.8); + z-index: 999; + display: flex; + align-items: center; + justify-content: center; + } + + .modal { + position: relative; + width: 90%; + height: 80%; + } + + .close-btn { + position: absolute; + top: -40rpx; + right: 0; + font-size: 48rpx; + color: #fff; + } + + .preview-image { + width: 100%; + height: 100%; + border-radius: 16rpx; + } + + /* 鎸夐挳鏍峰紡 */ + .is-hover { + opacity: 0.8; + } +</style> -- Gitblit v1.9.3