WRAP认证新规!价格调整

WRAP认证项目调整了其注册费用,自2023年9月1日起,小型工厂费用降低至650美元,中型工厂费用为950美元。2024年1月1日后,大型工厂费用将分别调整为1350和1550美元。审计费用由监督公司单独设定。工厂需按申请时报告的工人数量支付申请费,审核时人数不符可能影响认证资格。

【WRAP认证新规!价格调整】
WRAP简介;
WRAP是由四个英文字的缩写结合而来。原文是WORLDWIDE RESPONSIBLE ACCREDITED PRODUCTION,中文译意是「负责任的全球成衣制造」。环球服装生产社会责任原则是参与WRAP认证项目生产设施的核心标准。该项目的是独立监控和证明制造业符合这些全球性的社会责任标准,并保证产品是在合法、人性化和符合伦理的条件下生产的。
Who is WRAP?
Headquartered in Arlington, Virginia, USA, with regional offices in Hong Kong, SAR, and Dhaka, Bangladesh, full-time staff in India and Southeast Asia (Thailand and Vietnam), and for Latin America, WRAP is an independent, objective, non-profit team of global social compliance experts dedicated to promoting safe, lawful, humane, and ethical manufacturing around the world through certification and education.
WRAP最新消息!
目前,WRAP认证的注册费为1195美元。我们了解到,从2023年9月1日起,员工人数在100人及以下的工厂只需支付650美元,而员工人数在101至200人之间的工厂将支付950美元。从2024年1月1日起,员工人数在201至1000人之间的工厂将收取1350美元,而员工人数在1001人及以上的工厂将收取1550美元。
值得注意的是,审计费用不包含在新的费用结构中。个别监督公司设定,并由寻求认证的机构直接支付给它们。
WRAP问题解答
★ 如果工厂在2023年9月1日之前申请,并且员工少于200人,费用是多少?
如果工厂不出口制成品,那么仍然可以使用595美元的试点项目注册费。
如果您是一家出口企业,价格将在2023年9月1日之前为1195美元。日后价格以上方表格为准。
★ 如果工厂人数在201人以上,今年申请WRAP,需要支付多少费用?
工厂将支付当前的费用1195美元。具体上调将于2024年1月1日生效。
★ 工人人数是什么时候确定的,是在申请中还是在审核时?
申请费是根据申请时报告的工人数量支付的。但是,WRAP会将申请中报告的工人数量与审核时记录的工人数量进行比较,如果存在影响工厂费用类别的差异,WRAP保留拒绝认证的权利,直到支付正确的费用(基于审核的工人数量)。

<template> <view class="uni-container"> <view class="uni-container-order-detail-pipe"> <view class="order-content-item"> <view class="cu-detail-item title-wrap" @click="isExpandPipe = !isExpandPipe"> <text class="item-title">小票明细</text> <!-- 折叠/展开图标:根据 isExpandPipe 切换 --> <text class="fold-icon">{{ isExpandPipe ? '▲' : '▼' }}</text> </view> <view v-show="isExpandPipe" class="content-wrap"> <view class="list-container"> <cu-list-row :data-source="pipeList" :rows="pipeRows"></cu-list-row> </view> </view> </view> </view> <view class="uni-container-order-detail-part"> <view class="order-content-item"> <view class="cu-detail-item title-wrap" @click="isExpandPart = !isExpandPart"> <text class="item-title">零件明细</text> <!-- 折叠/展开图标:根据 isExpandPipe 切换 --> <text class="fold-icon">{{ isExpandPart ? '▲' : '▼' }}</text> </view> <view v-show="isExpandPart" class="content-wrap"> <view class="list-container"> <cu-list-row :data-source="pipePartList" :rows="partRows"></cu-list-row> </view> </view> </view> </view> <view class="uni-container-order-detail-weld"> <view class="order-content-item"> <view class="cu-detail-item title-wrap" @click="isExpandWeld = !isExpandWeld"> <text class="item-title">焊缝明细</text> <!-- 折叠/展开图标:根据 isExpandPipe 切换 --> <text class="fold-icon">{{ isExpandWeld ? '▲' : '▼' }}</text> </view> <view v-show="isExpandWeld" class="content-wrap"> <view class="list-container"> <cu-list-row :data-source="pipeWeldList" :rows="weldRows"></cu-list-row> </view> </view> </view> </view> <uni-popup ref="popup" type="bottom" @mask-click="handlePopupClose"> <view class="popup-content"> <uni-search-bar v-model="tempSearchKeyword" placeholder="输入搜索关键词" clear-button="always" cancel-button="none" @confirm="handleSearchConfirm" @input="handleSearchInput" @clear="handleClearSearch" > </uni-search-bar> <scroll-view scroll-y style="max-height: 400rpx"> <view v-for="(item, idx) in popupDataList" :key="idx" class="popup-item" @click="selectItem(item)" > <text>{{ item }}</text> </view> <view v-if="popupDataList.length === 0" class="popup-placeholder"> <text class="placeholder-text">暂无数据</text> </view> </scroll-view> </view> </uni-popup> </view> </template> <script setup> import {ref, onMounted,onActivated} from 'vue' import {useRoute, useRouter} from 'vue-router' import * as serve from '@/api/modules/piping' import {findBatchDropList, findHeatDropList} from "@/api/modules/piping/pre/prePipeFeedBack"; const router = useRouter() const route = useRoute() const isExpandPipe = ref(true) const isExpandWeld = ref(true) const isExpandPart = ref(true) const popup = ref(null) const popupType = ref('') const currentItemIndex = ref(null) const currentWeldingItemIndex = ref(null) const tempSearchKeyword = ref('') let searchTimeout = null const popupDataList = ref([]) const isSelected = ref(false) const drawClick = (item) => { uni.navigateTo({ url: '/pages/piping/pre/pipePdfView?drawFilePath=' + (item || '') }) } const pipeRows = ref([ { title: '管号', dataIndex: 'pipeNo', options: { isTitle: true } }, { title: '项目号', dataIndex: 'projectNo' }, { title: '版本号', dataIndex: 'pipeVersion' }, { title: '是否最新版', dataIndex: 'isTopVersion' }, { title: '是否删除', dataIndex: 'isDelete' }, { title: '是否暂停', dataIndex: 'isPause' }, { title: '暂停原因', dataIndex: 'pauseReason' }, { title: '暂停预计解除时间', dataIndex: 'preResumeDate', customRender: (text) => formatDate(text) // 日期格式化 }, // 技术规格列 { title: '材质', dataIndex: 'matDefinition' }, { title: '图号', dataIndex: 'drawNo', action: { name: '查看图纸', type: 'tag', onClick: (item, record) => drawClick(record.drawFilePath) } }, { title: '页号', dataIndex: 'pageNo' }, { title: '管径壁厚', dataIndex: 'pipeDiaThickness' }, { title: '长度', dataIndex: 'length' }, { title: '重量', dataIndex: 'weight' }, { title: '内表面积', dataIndex: 'inSurface' }, { title: '外表面积', dataIndex: 'outSurface' }, { title: '分段', dataIndex: 'block' }, { title: '是否裸管', dataIndex: 'isBarePipe' }, { title: '寸口数', dataIndex: 'inch' }, { title: '内场寸口数', dataIndex: 'inInch' }, { title: '外场寸口数', dataIndex: 'outInch' }, { title: '安装三维坐标X', dataIndex: 'instLocationx' }, { title: '安装三维坐标Y', dataIndex: 'instLocationy' }, { title: '安装三维坐标Z', dataIndex: 'instLocationz' }, { title: '是否继承', dataIndex: 'isInherit' }, // 生产信息列 { title: '预制备注', dataIndex: 'preRemark' }, { title: '下料人', dataIndex: 'cutUserNo' }, { title: '下料完成时间', dataIndex: 'cutFinishDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '装配人', dataIndex: 'assyUserNo' }, { title: '装配完成时间', dataIndex: 'assyFinishDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '焊接人', dataIndex: 'weldingUserNo' }, { title: '焊接完成时间', dataIndex: 'weldingFinishDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '焊前报验时间', dataIndex: 'weldingPreFinishDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '焊后报验时间', dataIndex: 'weldingPostFinishDate', customRender: (text) => formatDate(text) // 日期格式化 }, // 区域与交付列 { title: '生产大区域', dataIndex: 'bigAreaNo' }, { title: '生产中区域', dataIndex: 'middleAreaNo' }, { title: '生产小区域', dataIndex: 'smallAreaNo' }, { title: '安装完成时间', dataIndex: 'instFinishDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '吊装完成时间', dataIndex: 'liftingDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '表面处理方式', dataIndex: 'treatment' }, { title: '内场交出时间', dataIndex: 'infieldHandoverDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '涂装交出时间', dataIndex: 'paintHandoverDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '涂装返回时间', dataIndex: 'paintBackHandoverReceiveDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '装筐时间', dataIndex: 'inTaryDate', customRender: (text) => formatDate(text) // 日期格式化 } ]) const weldRows = ref([ { title: '焊缝编号', dataIndex: 'weldNo', width: 150, fixed: 'left' }, { title: '焊缝长度(mm)', dataIndex: 'weldLength', customRender: (value) => (value ? `${value} mm` : '-') }, // 连接部件信息 { title: '部件1管号', dataIndex: 'p1PipeNo' }, { title: '部件1零件号', dataIndex: 'p1PartNo' }, { title: '部件2管号', dataIndex: 'p2PipeNo' }, { title: '部件2零件号', dataIndex: 'p2PartNo' }, // 焊接规格信息 { title: '连接类型', dataIndex: 'weldConnTypeShort' }, { title: '车间/现场标记', dataIndex: 'shopFieldFlag' }, { title: '口径(mm)', dataIndex: 'caliber', customRender: (value) => (value ? `${value} mm` : '-') }, { title: '壁厚(mm)', dataIndex: 'thickness', customRender: (value) => (value ? `${value} mm` : '-') }, { title: '寸口数', dataIndex: 'weldInchQty' }, { title: '部件1材质', dataIndex: 'p1Material' }, { title: '部件2材质', dataIndex: 'p2Material' }, { title: '是否为管焊缝', dataIndex: 'isPipeWeld', customRender: (value) => (value !== null ? (value ? '是' : '否') : '-') }, { title: '船体分类', dataIndex: 'hullClass' }, // 工艺与认证信息 { title: 'WPS编号', dataIndex: 'wpsNo', action: { name: '修改WPS编号', type: 'tag', onClick: (item, record) => wpsNoClick(item, record.index, record.id) } }, { title: '焊材规格', dataIndex: 'weldingMatSpec' }, { title: '批号', dataIndex: 'batchNo' }, { title: '证书号', dataIndex: 'certNo' }, // 人员与时间信息 { title: '装配人工号', dataIndex: 'assyUserNo' }, { title: '装配人姓名', dataIndex: 'assyUserName' }, { title: '装配完成日期', dataIndex: 'assyFinishDate', customRender: (text) => formatDate(text) }, { title: '焊工工号', dataIndex: 'weldingUserNo' }, { title: '焊工姓名', dataIndex: 'weldingUserName' }, { title: '焊接完成日期', dataIndex: 'weldingFinishDate', customRender: (text) => formatDate(text) } ]) const batchNoClick = (type, row, index) => { popupType.value = type currentItemIndex.value = index tempSearchKeyword.value = '' // 清空临时搜索词 popupDataList.value = [] isSelected.value = true // 初始加载全部数据,不进行搜索 queryHeatOrBatchList('') popup.value.open() } const wpsNoClick = (type, index, id) => { currentWeldingItemIndex.value = index uni.navigateTo({ url: '/pages/piping/pre/selectWpsNo?weldId=' + id }) } const handleSearchInput = () => { clearTimeout(searchTimeout) searchTimeout = setTimeout(() => { // 实时搜索(防抖) searchData() }, 300) } const handleSearchConfirm = () => { searchData() } // 搜索数据 const searchData = async () => { await queryHeatOrBatchList(tempSearchKeyword.value) } const queryHeatOrBatchList = async (keyword) => { const matNo = pipePartList.value[currentItemIndex.value].matNo const heatNo = pipePartList.value[currentItemIndex.value].heatNo try { let res if (popupType.value === 'heatNo') { res = await findHeatDropList({ matNo, heatNo: keyword || '' // 使用传入的关键词 }) } else if (popupType.value === 'batchNo') { res = await findBatchDropList({ matNo, heatNo, batchNo: keyword || '' // 使用传入的关键词 }) } popupDataList.value = res.data || [] } catch (e) { console.error('搜索失败:', e) uni.showToast({title: '搜索失败', icon: 'none'}) } } const partRows = ref([ { title: '零件编号', dataIndex: 'partNo' }, { title: '零件长度(mm)', dataIndex: 'length', customRender: (value) => `${value} mm` // 添加单位 }, { title: '零件类型', dataIndex: 'partType' }, { title: '材料名称', dataIndex: 'material' }, { title: '零件尺寸规格', dataIndex: 'partSize' }, { title: '物资编码', dataIndex: 'matNo' }, { title: '零件重量', dataIndex: 'weight', customRender: (value) => (value ? `${value} kg` : '-') // 重量带单位 }, { title: '是否弯管', dataIndex: 'isBending', customRender: (value) => (value ? '是' : '否') // 布尔值转中文 }, { title: '坡口数量', dataIndex: 'grooveQty' }, { title: '槽数', dataIndex: 'slotQty' }, { title: '螺纹数量', dataIndex: 'screwQty' }, { title: '壁厚', dataIndex: 'thickness' }, { title: '管径', dataIndex: 'pipeDia' }, { title: '部件类型', dataIndex: 'accessoryClass' }, { title: '涂装代码', dataIndex: 'paintNo' }, { title: '下料备注', dataIndex: 'cutRemark' }, { title: '车间标记', dataIndex: 'inShopFlag', customRender: (value) => (value ? '已标记' : '未标记') // 布尔值转中文 }, { title: '领料单号', dataIndex: 'shopMatOrderNo' }, { title: '炉号', dataIndex: 'heatNo', action: { name: '修改批号', type: 'tag', onClick: (item, record) => batchNoClick("heatNo", item, record.index) } }, { title: '批号', dataIndex: 'batchNo', action: { name: '修改批号', type: 'tag', onClick: (item, record) => batchNoClick("heatNo", item, record.index) } }, { title: '证书号', dataIndex: 'certNo' } ]) const pipeList = ref([]) const pipeWeldList = ref([]) const pipePartList = ref([]) const handlePreSelectedWpsNo = (data) => { if (Array.isArray(data) && data.length > 0 && currentWeldingItemIndex.value !== null) { const currentIndex = currentWeldingItemIndex.value if (currentIndex >= 0 && currentIndex < pipeWeldList.value.length) { pipeWeldList.value[currentIndex].wpsNo = data[0].wpsNo pipeWeldList.value[currentIndex].weldProcess = data[0].process pipeWeldList.value[currentIndex].weldingMatSpec = data[0].type pipeWeldList.value[currentIndex].rootGrade = data[0].rootGrade pipeWeldList.value[currentIndex].fillGrade = data[0].fillGrade } } } onActivated(() => { const params = { pipeNo: route.query.pipeNo, projectNo: route.query.projectNo, pipeVersion: route.query.pipeVersion } serve.getPipeInfo(params).then((res) => { pipeList.value = [res.data] pipeWeldList.value = res.data.pipeWeldList.map((item, index) => { item.index = index return item; }); pipePartList.value = res.data.pipePartList.map((item, index) => { item.index = index return item; }); if (res.data.length > 0) { uni.showToast({ title: '查询成功', icon: 'none', duration: 3000 }) } else { uni.showToast({ title: '未查询到小票', icon: 'none', duration: 3000 }) } }) uni.$on('preSelectedWpsNo', handlePreSelectedWpsNo) }) const selectItem = (value) => { if (popupType.value === 'heatNo') { pipePartList.value[currentItemIndex.value].heatNo = value handleHeatNoChange(value, pipePartList.value[currentItemIndex.value]) batchNoClick("batchNo", pipePartList.value[currentItemIndex.value], currentItemIndex.value) } else { pipePartList.value[currentItemIndex.value].batchNo = value handleBatchNoChange(value, pipePartList.value[currentItemIndex.value]) // 关闭弹窗前清空临时搜索词 tempSearchKeyword.value = '' popup.value.close() isSelected.value = false } } const handleHeatNoChange = (val, item) => { item.heatNo = val console.log('炉号变化:', item) } const handleBatchNoChange = (val, item) => { item.batchNo = val console.log('批号变化:', item) } // 日期格式化函数 function formatDate(date) { if (!date) return '' // 处理 Date 对象或时间戳 const d = date instanceof Date ? date : new Date(date) const year = d.getFullYear() const month = String(d.getMonth() + 1).padStart(2, '0') const day = String(d.getDate()).padStart(2, '0') return `${year}-${month}-${day}` } </script> <style lang="scss" scoped> .cu-dropdown-content { padding: 5px 0; text-align: center; } .item-title { font-size: 36rpx; font-weight: 600; color: #2563eb; margin-bottom: 15rpx; border-left: 4rpx solid #2563eb; padding-left: 10rpx; margin-top: 10rpx; } .uni-container { height: calc(100vh - 100rpx - 1.35rem - env(safe-area-inset-bottom)); background-color: #f8fafc; overflow: hidden; overflow-y: scroll; } .uni-container-order-detail { margin-top: 20px; width: calc(100% - 20px); min-height: 90rpx; border-radius: 8px; background: #fff; box-shadow: 0 0 3px 0px #0000004a; padding: 10px; display: flex; flex-direction: column; } .title-wrap { display: flex; justify-content: space-between; align-items: center; cursor: pointer; } .fold-icon { font-size: 28rpx; color: #2563eb; margin-left: 10rpx; } .content-wrap { margin-top: 10rpx; } .uni-container-order-detail-pipe { margin-top: 20px; width: calc(100% - 20px); min-height: 90rpx; border-radius: 8px; background: #fff; box-shadow: 0 0 3px 0px #0000004a; padding: 10px; display: flex; flex-direction: column; } .uni-container-order-detail-weld { margin-top: 20px; width: calc(100% - 20px); min-height: 90rpx; border-radius: 8px; background: #fff; box-shadow: 0 0 3px 0px #0000004a; padding: 10px; display: flex; flex-direction: column; } .uni-container-order-detail-part { margin-top: 20px; width: calc(100% - 20px); min-height: 90rpx; border-radius: 8px; background: #fff; box-shadow: 0 0 3px 0px #0000004a; padding: 10px; display: flex; flex-direction: column; } .popup-content { padding: 30rpx; background: #fff; max-height: 70vh; border-top-left-radius: 20rpx; border-top-right-radius: 20rpx; } .popup-item { padding: 24rpx; border-bottom: 1rpx solid #f0f0f0; font-size: 28rpx; &:active { background-color: #f8f8f8; } } .list-placeholder, .popup-placeholder { display: flex; justify-content: center; align-items: center; padding: 60rpx 0; } .placeholder-text { font-size: 28rpx; color: #999; } .uni-easyinput { width: 100%; } /* 响应式调整 */ @media (max-height: 600px) { .content-section { margin-bottom: 100rpx; } .data-list { max-height: 60vh; } } </style> uni.$on(‘preSelectedWpsNo’, handlePreSelectedWpsNo)处理完后,赋值一闪而过,到最后消失没赋值上
12-13
<template> <view class="uni-container"> <view class="uni-container-order-detail-pipe"> <view class="order-content-item"> <view class="cu-detail-item title-wrap" @click="isExpandPipe = !isExpandPipe"> <text class="item-title">小票明细</text> <!-- 折叠/展开图标:根据 isExpandPipe 切换 --> <text class="fold-icon">{{ isExpandPipe ? '▲' : '▼' }}</text> </view> <view v-show="isExpandPipe" class="content-wrap"> <view class="list-container"> <cu-list-col :data-source="pipeList" :rows="pipeRows"> </cu-list-col> </view> </view> </view> </view> <view class="uni-container-order-detail-part"> <view class="order-content-item"> <view class="cu-detail-item title-wrap" @click="isExpandPart = !isExpandPart"> <text class="item-title">零件明细</text> <!-- 折叠/展开图标:根据 isExpandPipe 切换 --> <text class="fold-icon">{{ isExpandPart ? '▲' : '▼' }}</text> </view> <view v-show="isExpandPart" class="content-wrap"> <view class="list-container"> <cu-list-row :data-source="pipePartList" :rows="partRows"></cu-list-row> </view> </view> </view> </view> <view class="uni-container-order-detail-weld"> <view class="order-content-item"> <view class="cu-detail-item title-wrap" @click="isExpandWeld = !isExpandWeld"> <text class="item-title">焊缝明细</text> <!-- 折叠/展开图标:根据 isExpandPipe 切换 --> <text class="fold-icon">{{ isExpandWeld ? '▲' : '▼' }}</text> </view> <view v-show="isExpandWeld" class="content-wrap"> <view class="list-container"> <cu-list-col :data-source="pipeWeldList" :rows="weldRows"> </cu-list-col> </view> </view> </view> </view> <uni-popup ref="popup" type="bottom" @mask-click="handlePopupClose"> <view class="popup-content"> <uni-search-bar v-model="tempSearchKeyword" placeholder="输入搜索关键词" clear-button="always" cancel-button="none" @confirm="handleSearchConfirm" @input="handleSearchInput" @clear="handleClearSearch" > </uni-search-bar> <scroll-view scroll-y style="max-height: 400rpx"> <view v-for="(item, idx) in popupDataList" :key="idx" class="popup-item" @click="selectItem(item)" > <text>{{ item }}</text> </view> <view v-if="popupDataList.length === 0" class="popup-placeholder"> <text class="placeholder-text">暂无数据</text> </view> </scroll-view> </view> </uni-popup> </view> </template> <script setup> import { ref, onMounted } from 'vue' import { useRoute } from 'vue-router' import * as serve from '@/api/modules/piping' import {findBatchDropList, findHeatDropList} from "@/api/modules/piping/pre/prePipeFeedBack"; const route = useRoute() const isExpandPipe = ref(true) const isExpandWeld = ref(true) const isExpandPart = ref(true) const popup = ref(null) const popupType = ref('') const currentItemIndex = ref(null) const tempSearchKeyword = ref('') let searchTimeout = null const popupDataList = ref([]) const isSelected = ref(false) const pipeRows = ref([ { title: '管号', dataIndex: 'pipeNo', options: { isTitle: true } }, { title: '项目号', dataIndex: 'projectNo' }, { title: '版本号', dataIndex: 'pipeVersion' }, { title: '是否最新版', dataIndex: 'isTopVersion' }, { title: '是否删除', dataIndex: 'isDelete' }, { title: '是否暂停', dataIndex: 'isPause' }, { title: '暂停原因', dataIndex: 'pauseReason' }, { title: '暂停预计解除时间', dataIndex: 'preResumeDate', customRender: (text) => formatDate(text) // 日期格式化 }, // 技术规格列 { title: '材质', dataIndex: 'matDefinition' }, { title: '图号', dataIndex: 'drawNo' }, { title: '页号', dataIndex: 'pageNo' }, { title: '管径壁厚', dataIndex: 'pipeDiaThickness' }, { title: '长度', dataIndex: 'length' }, { title: '重量', dataIndex: 'weight' }, { title: '内表面积', dataIndex: 'inSurface' }, { title: '外表面积', dataIndex: 'outSurface' }, { title: '分段', dataIndex: 'block' }, { title: '是否裸管', dataIndex: 'isBarePipe' }, { title: '寸口数', dataIndex: 'inch' }, { title: '内场寸口数', dataIndex: 'inInch' }, { title: '外场寸口数', dataIndex: 'outInch' }, { title: '安装三维坐标X', dataIndex: 'instLocationx' }, { title: '安装三维坐标Y', dataIndex: 'instLocationy' }, { title: '安装三维坐标Z', dataIndex: 'instLocationz' }, { title: '是否继承', dataIndex: 'isInherit' }, // 生产信息列 { title: '预制备注', dataIndex: 'preRemark' }, { title: '下料人', dataIndex: 'cutUserNo' }, { title: '下料完成时间', dataIndex: 'cutFinishDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '装配人', dataIndex: 'assyUserNo' }, { title: '装配完成时间', dataIndex: 'assyFinishDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '焊接人', dataIndex: 'weldingUserNo' }, { title: '焊接完成时间', dataIndex: 'weldingFinishDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '焊前报验时间', dataIndex: 'weldingPreFinishDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '焊后报验时间', dataIndex: 'weldingPostFinishDate', customRender: (text) => formatDate(text) // 日期格式化 }, // 区域与交付列 { title: '生产大区域', dataIndex: 'bigAreaNo' }, { title: '生产中区域', dataIndex: 'middleAreaNo' }, { title: '生产小区域', dataIndex: 'smallAreaNo' }, { title: '安装完成时间', dataIndex: 'instFinishDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '吊装完成时间', dataIndex: 'liftingDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '表面处理方式', dataIndex: 'treatment' }, { title: '内场交出时间', dataIndex: 'infieldHandoverDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '涂装交出时间', dataIndex: 'paintHandoverDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '涂装返回时间', dataIndex: 'paintBackHandoverReceiveDate', customRender: (text) => formatDate(text) // 日期格式化 }, { title: '装筐时间', dataIndex: 'inTaryDate', customRender: (text) => formatDate(text) // 日期格式化 } ]) const weldRows = ref([ { title: '焊缝编号', dataIndex: 'weldNo', width: 150, fixed: 'left' }, { title: '焊缝长度(mm)', dataIndex: 'weldLength', customRender: (value) => (value ? `${value} mm` : '-') }, // 连接部件信息 { title: '部件1管号', dataIndex: 'p1PipeNo' }, { title: '部件1零件号', dataIndex: 'p1PartNo' }, { title: '部件2管号', dataIndex: 'p2PipeNo' }, { title: '部件2零件号', dataIndex: 'p2PartNo' }, // 焊接规格信息 { title: '连接类型', dataIndex: 'weldConnTypeShort' }, { title: '车间/现场标记', dataIndex: 'shopFieldFlag' }, { title: '口径(mm)', dataIndex: 'caliber', customRender: (value) => (value ? `${value} mm` : '-') }, { title: '壁厚(mm)', dataIndex: 'thickness', customRender: (value) => (value ? `${value} mm` : '-') }, { title: '寸口数', dataIndex: 'weldInchQty' }, { title: '部件1材质', dataIndex: 'p1Material' }, { title: '部件2材质', dataIndex: 'p2Material' }, { title: '是否为管焊缝', dataIndex: 'isPipeWeld', customRender: (value) => (value !== null ? (value ? '是' : '否') : '-') }, { title: '船体分类', dataIndex: 'hullClass' }, // 工艺与认证信息 { title: 'WPS编号', dataIndex: 'wpsNo' }, { title: '焊材规格', dataIndex: 'weldingMatSpec' }, { title: '批号', dataIndex: 'batchNo' }, { title: '证书号', dataIndex: 'certNo' }, // 人员与时间信息 { title: '装配人工号', dataIndex: 'assyUserNo' }, { title: '装配人姓名', dataIndex: 'assyUserName' }, { title: '装配完成日期', dataIndex: 'assyFinishDate', customRender: (text) => formatDate(text) }, { title: '焊工工号', dataIndex: 'weldingUserNo' }, { title: '焊工姓名', dataIndex: 'weldingUserName' }, { title: '焊接完成日期', dataIndex: 'weldingFinishDate', customRender: (text) => formatDate(text) } ]) const batchNoClick = (row) => { popupType.value = "heatNo" currentItemIndex.value = tempSearchKeyword.value = '' // 清空临时搜索词 popupDataList.value = [] isSelected.value = true // 初始加载全部数据,不进行搜索 queryHeatOrBatchList('') popup.value.open() } const handleSearchInput = () => { clearTimeout(searchTimeout) searchTimeout = setTimeout(() => { // 实时搜索(防抖) searchData() }, 300) } const queryHeatOrBatchList = async (keyword) => { debugger const matNo = pipePartList.value[currentItemIndex.value].matNo const heatNo = pipePartList.value[currentItemIndex.value].heatNo try { let res if (popupType.value === 'heatNo') { res = await findHeatDropList({ matNo, heatNo: keyword || '' // 使用传入的关键词 }) } else if (popupType.value === 'batchNo') { res = await findBatchDropList({ matNo, heatNo, batchNo: keyword || '' // 使用传入的关键词 }) } popupDataList.value = res.data || [] } catch (e) { console.error('搜索失败:', e) uni.showToast({ title: '搜索失败', icon: 'none' }) } } const partRows = ref([ { title: '零件编号', dataIndex: 'partNo' }, { title: '零件长度(mm)', dataIndex: 'length', customRender: (value) => `${value} mm` // 添加单位 }, { title: '零件类型', dataIndex: 'partType' }, { title: '材料名称', dataIndex: 'material' }, { title: '零件尺寸规格', dataIndex: 'partSize' }, { title: '物资编码', dataIndex: 'matNo' }, { title: '零件重量', dataIndex: 'weight', customRender: (value) => (value ? `${value} kg` : '-') // 重量带单位 }, { title: '是否弯管', dataIndex: 'isBending', customRender: (value) => (value ? '是' : '否') // 布尔值转中文 }, { title: '坡口数量', dataIndex: 'grooveQty' }, { title: '槽数', dataIndex: 'slotQty' }, { title: '螺纹数量', dataIndex: 'screwQty' }, { title: '壁厚', dataIndex: 'thickness' }, { title: '管径', dataIndex: 'pipeDia' }, { title: '部件类型', dataIndex: 'accessoryClass' }, { title: '涂装代码', dataIndex: 'paintNo' }, { title: '下料备注', dataIndex: 'cutRemark' }, { title: '车间标记', dataIndex: 'inShopFlag', customRender: (value) => (value ? '已标记' : '未标记') // 布尔值转中文 }, { title: '领料单号', dataIndex: 'shopMatOrderNo' }, { title: '炉号', dataIndex: 'heatNo', action: { name: '修改批号', type: 'tag', onClick: batchNoClick} }, { title: '批号', dataIndex: 'batchNo', action: { name: '修改批号', type: 'tag', onClick: batchNoClick} }, { title: '证书号', dataIndex: 'certNo' } ]) const pipeList = ref([]) const pipeWeldList = ref([]) const pipePartList = ref([]) onMounted(() => { const params = { pipeNo: route.query.pipeNo, projectNo: route.query.projectNo, pipeVersion: route.query.pipeVersion } serve.getPipeInfo(params).then((res) => { pipeList.value = [res.data] pipeWeldList.value = res.data.pipeWeldList pipePartList.value = res.data.pipePartList.map((item, index) => { item.index = index return item; }); console.log('res', res) if (res.data.length > 0) { uni.showToast({ title: '查询成功', icon: 'none', duration: 3000 }) } else { uni.showToast({ title: '未查询到小票', icon: 'none', duration: 3000 }) } }) }) // 日期格式化函数 function formatDate(date) { if (!date) return '' // 处理 Date 对象或时间戳 const d = date instanceof Date ? date : new Date(date) const year = d.getFullYear() const month = String(d.getMonth() + 1).padStart(2, '0') const day = String(d.getDate()).padStart(2, '0') return `${year}-${month}-${day}` } </script> <style lang="scss" scoped> .cu-dropdown-content { padding: 5px 0; text-align: center; } .item-title { font-size: 36rpx; font-weight: 600; color: #2563eb; margin-bottom: 15rpx; border-left: 4rpx solid #2563eb; padding-left: 10rpx; margin-top: 10rpx; } .uni-container { height: calc(100vh - 100rpx - 1.35rem - env(safe-area-inset-bottom)); background-color: #f8fafc; overflow: hidden; overflow-y: scroll; } .uni-container-order-detail { margin-top: 20px; width: calc(100% - 20px); min-height: 90rpx; border-radius: 8px; background: #fff; box-shadow: 0 0 3px 0px #0000004a; padding: 10px; display: flex; flex-direction: column; } .title-wrap { display: flex; justify-content: space-between; align-items: center; cursor: pointer; } .fold-icon { font-size: 28rpx; color: #2563eb; margin-left: 10rpx; } .content-wrap { margin-top: 10rpx; } .uni-container-order-detail-pipe { margin-top: 20px; width: calc(100% - 20px); min-height: 90rpx; border-radius: 8px; background: #fff; box-shadow: 0 0 3px 0px #0000004a; padding: 10px; display: flex; flex-direction: column; } .uni-container-order-detail-weld { margin-top: 20px; width: calc(100% - 20px); min-height: 90rpx; border-radius: 8px; background: #fff; box-shadow: 0 0 3px 0px #0000004a; padding: 10px; display: flex; flex-direction: column; } .uni-container-order-detail-part { margin-top: 20px; width: calc(100% - 20px); min-height: 90rpx; border-radius: 8px; background: #fff; box-shadow: 0 0 3px 0px #0000004a; padding: 10px; display: flex; flex-direction: column; } .popup-content { padding: 30rpx; background: #fff; max-height: 70vh; border-top-left-radius: 20rpx; border-top-right-radius: 20rpx; } .popup-item { padding: 24rpx; border-bottom: 1rpx solid #f0f0f0; font-size: 28rpx; &:active { background-color: #f8f8f8; } } .list-placeholder, .popup-placeholder { display: flex; justify-content: center; align-items: center; padding: 60rpx 0; } .placeholder-text { font-size: 28rpx; color: #999; } .uni-easyinput { width: 100%; } /* 响应式调整 */ @media (max-height: 600px) { .content-section { margin-bottom: 100rpx; } .data-list { max-height: 60vh; } } </style> 其中const batchNoClick = (row) => { popupType.value = "heatNo" currentItemIndex.value = tempSearchKeyword.value = '' // 清空临时搜索词 popupDataList.value = [] isSelected.value = true // 初始加载全部数据,不进行搜索 queryHeatOrBatchList('') popup.value.open() } 中的currentItemIndex.value =要获取当前part的index,现在的row是{ "title": "炉号", "dataIndex": "heatNo", "action": { "name": "修改批号", "type": "tag" } },所以不能用
12-13
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值