huangxw 1 vecka sedan
förälder
incheckning
bd889e0faf

+ 3 - 1
src/plant/packaging/batch-link/index.vue

@@ -264,7 +264,9 @@ const batchLinkCodes = async () => {
             title: '关联成功',
             icon: 'success',
         });
-        onRefresh();
+        uni.$emit('refreshPackTaskList');
+        uni.$emit('refreshPackTaskDetail');
+    
     } catch (error) {
         console.error('批量关联失败:', error);
         uni.hideLoading();

+ 5 - 1
src/plant/packaging/detail/index.vue

@@ -5,17 +5,21 @@
     <template v-if="viewMode == 'print'">
         <PrintInfoPage v-if="form" :packId="did" :form="form" :dict="{ pt_pack_ref_type, pt_code_export_type }" @changeTebs="changeTebs"></PrintInfoPage>
     </template>
+    <template v-if="viewMode == 'relate'">
+        <RelateInfoPage v-if="form" :packId="did" :form="form" :dict="{ pt_pack_ref_type }" @changeTebs="changeTebs"></RelateInfoPage>
+    </template>
 </template>
 <script setup lang="ts">
 import { useClientRequest } from '@/utils/request';
 import { getUrlParams, recursiveDecodeURIComponent } from '@/utils/ruoyi';
 import PackTestInfo from './models/pack-test-info.vue';
 import PrintInfoPage from './models/print-info-page.vue';
+import RelateInfoPage from './models/relate-info-page.vue';
 const viewMode = ref('print'); // print relate
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { pt_pack_ref_type, pt_code_export_type, pt_code_export_format, pt_code_export_layout_type } = toRefs<any>(proxy?.useDict('pt_pack_ref_type', 'pt_code_export_type', 'pt_code_export_format', 'pt_code_export_layout_type'));
 const form = ref<any>(null);
-const did = ref('');
+const did = ref('relate');
 // 获取详情(GAP获评信息)
 const getDetailById = async (id: string) => {
     const res = await useClientRequest.get(`/plt-api/app/packTask/${id}`);

+ 2 - 0
src/plant/packaging/detail/models/pack-test-info.vue

@@ -65,6 +65,8 @@ const emit = defineEmits(['changeTebs']);
 const changeTebs = () => {
     if (props?.form?.refType == '2') {
         emit('changeTebs', 'print');
+    } else {
+        emit('changeTebs', 'relate');
     }
     
 };

+ 231 - 0
src/plant/packaging/detail/models/relate-info-page.vue

@@ -0,0 +1,231 @@
+<template>
+    <z-paging ref="paging" bgcolor="#F7F7F7" v-model="list" @query="query" safe-area-inset-bottom scroll-with-animation>
+        <template #top>
+            <ut-navbar title="包装任务详情" :fixed="false" border></ut-navbar>
+        </template>
+        <view class="d-flex a-c pd3-30-24-0 f-s-30 f-w-5">
+            <view class="pd2-20-36 card-item-box mr-10 active">{{ form?.refType == '2' ? '打印详情' : '关联详情' }}</view>
+            <view @click="changeTebs" class="pd2-20-36 card-item-box">包装任务信息</view>
+        </view>
+        <view class="bg-fff pd-24">
+            <view class="detail-info-card p-rtv mb-40">
+                <pack-card :item="form" :dict="dict">
+                    <view class="pd-20"></view>
+                </pack-card>
+                <view class="btn-card-wrapper d-flex a-c j-c">
+                    <view class="btn-bottom-bt pm-style" @click="goPrint({ packId: form?.id, autoRelationId: form?.autoRelationId, unit: form?.unit, printedCount: form?.actualCount - form?.printCount }, '/plant/export-print/export/index')">
+                        <image class="w-32 h-32 mr-8" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/print-codes/btn_plgl_icon.png" mode="widthFix" />
+                        <span>批量关联</span>
+                    </view>
+                </view>
+            </view>
+            <view class="d-flex a-c pd2-10-0 j-ed" @click="$u.route({ url: '/tools/view-html/index', params: { url: 'https://ta.zycpzs.cn/oss-file/smart-trace/szyy/template/pack_print_type.html', title: '打印方式的区别' } })">
+                <up-icon size="28rpx" name="question-circle" color="#999"></up-icon>
+                <span class="c-#999 f-s-24">三种打印方式的区别?怎么选择?</span>
+            </view>
+            <view class="mb-20">
+                <ut-tabs v-model="printType" :tabs="tabs" @change="onRefresh"></ut-tabs>
+            </view>
+            <view>
+                <template v-for="(item, index) in list" :key="index">
+                    <template v-if="item?.printType == '1'">
+                        <view class="mb-20 pd-20 bg-#F7F7F7 b-radius">
+                            <view class="f-s-28 pd2-4-0">
+                                <span class="c-#666">打印数量:</span>
+                                <span class="c-#333 f-w-5">{{ item?.printCount }}</span>
+                            </view>
+                            <view class="f-s-28 pd2-4-0 d-flex">
+                                <span class="c-#666">打印码值:</span>
+                                <view class="flex1 ov-hd c-#333 f-w-5">
+                                    <view>{{ item?.traceCodeStart }} 至</view>
+                                    <view>{{ item?.traceCodeEnd }}</view>
+                                </view>
+                            </view>
+                            <view class="d-flex f-s-24 c-#666">
+                                <view class="flex1 ov-hd">打印人:{{ item?.createByName || '-' }}</view>
+                                <view class="pr-100">打印时间:{{ item?.createTime || '-' }}</view>
+                            </view>
+                            <view class="pt-20 d-flex">
+                                <view class="flex1"></view>
+                                <view class="d-flex a-c">
+                                    <up-button @click="clickAllPrint(item)" :customStyle="formItemBtnListStyle" class="ml-20" color="#18BECA">全部打印</up-button>
+                                    <up-button @click="$u.route({ url: '/plant/print/print-range/index', params: item })" :customStyle="formItemBtnListStyle" class="ml-20" color="#37A954">区间打印</up-button>
+                                </view>
+                            </view>
+                        </view>
+                    </template>
+                    <template v-if="item?.printType == '2'">
+                        <view class="mb-20 pd-20 bg-#F7F7F7 b-radius">
+                            <view class="f-s-24 c-#333 f-w-5">{{ selectDictLabel(pt_code_export_type, item?.extraInfo?.fileType) }}</view>
+                            <view class="f-s-28 pd2-4-0">
+                                <span class="c-#666">导出数量:</span>
+                                <span class="c-#333 f-w-5">{{ item?.printCount }}</span>
+                            </view>
+                            <view class="f-s-28 pd2-4-0 d-flex">
+                                <span class="c-#666">导出码值:</span>
+                                <view class="flex1 ov-hd c-#333 f-w-5">
+                                    <view>{{ item?.traceCodeStart }} 至</view>
+                                    <view>{{ item?.traceCodeEnd }}</view>
+                                </view>
+                            </view>
+                            <view class="d-flex f-s-24 c-#666">
+                                <view class="flex1 ov-hd">导出人:{{ item?.createByName || '-' }}</view>
+                                <view class="pr-100">导出时间:{{ item?.createTime || '-' }}</view>
+                            </view>
+                            <view class="pt-20 d-flex">
+                                <view class="flex1"></view>
+                                <view class="d-flex a-c">
+                                    <up-button @click="$u.route({ url: '/plant/export-print/export/index', params: item })" :customStyle="formItemBtnListStyle" color="#18BECA">重新导出</up-button>
+                                </view>
+                            </view>
+                        </view>
+                    </template>
+                    <template></template>
+                </template>
+            </view>
+        </view>
+    </z-paging>
+</template>
+<script setup lang="ts">
+import { useClientRequest } from '@/utils/request';
+import PackCard from '@/plant/models/pack-card.vue';
+import { formItemBtnListStyle } from '@/assets/styles/uview-plus';
+import { showFeatureUnavailable } from '@/utils/common';
+
+const paging = ref<any>(null);
+const props = defineProps({
+    packId: {
+        type: String,
+        default: '',
+    },
+    form: {
+        type: Object,
+        default: () => null,
+    },
+    dict: {
+        type: Object,
+        default: () => null,
+    },
+});
+const printType = ref('1');
+const { pt_pack_ref_type, pt_code_export_type } = toRefs(props?.dict);
+const emit = defineEmits(['changeTebs']);
+const tabs = reactive([
+    { label: '关联记录', value: '1' },
+]);
+const changeTebs = () => {
+    emit('changeTebs', 'pack');
+};
+const list = ref([]);
+const query = async (pageNum: number, pageSize: number) => {
+    const params = {
+        pageNum,
+        pageSize,
+        packId: props.packId,
+        printType: printType.value,
+    };
+    const res = await useClientRequest.get('/plt-api/app/printLog/list', params);
+    if (res && res?.rows) {
+        const { rows } = res;
+        paging.value?.complete(rows);
+    }
+};
+const onRefresh = () => {
+    try {
+        paging.value?.reload();
+    } catch (error) {
+        console.error('刷新列表失败:', error);
+    }
+};
+const clickAllPrint = async (item: any) => {
+    try {
+        const res = await uni.showModal({
+            title: '全部打印提示',
+            content: '您确认需要再次打印该条记录的全部追溯码吗?',
+            confirmColor: '#37A954',
+        });
+        if (res.confirm) {
+            uni.$u.route({ type: 'navigateTo', url: '/plant/print/print-all/index', params: item });
+        }
+    } catch (error) {
+        console.error('全部打印失败:', error);
+    }
+};
+const goPrint = async (params: any, url: string) => {
+    if (!params?.printedCount) {
+        uni.showModal({
+            title: '提示',
+            content: '没有可打印的追溯码了哦~',
+            showCancel: false,
+            confirmColor: '#37A954',
+        });
+        return;
+    }
+    try {
+        uni.$u.route({ type: 'navigateTo', url: url || '/plant/print/print-self/index', params });
+    } catch (error) {
+        console.error('跳转打印页面失败:', error);
+    }
+};
+onMounted(() => {
+    uni.$on('refreshPackTaskDetail', () => {
+        onRefresh();
+    });
+});
+</script>
+<style lang="scss" scoped>
+.card-item-box {
+    color: #999;
+    border-radius: 10rpx 10rpx 0 0;
+
+    &.active {
+        color: $u-primary;
+        background-color: #fff;
+    }
+}
+.detail-info-card {
+    border-radius: 16rpx;
+    border: 1rpx solid #9dd5ab;
+}
+.btn-bottom-bt {
+    width: 208rpx;
+    height: 74rpx;
+    border-radius: 8rpx;
+    border: 1px solid #000;
+    font-size: 26rpx;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+.btn-card-wrapper {
+    position: absolute;
+    left: 20rpx;
+    bottom: -37rpx;
+    right: 20rpx;
+    z-index: 10;
+}
+.ls-style {
+    background-color: #e3fbea;
+    box-shadow: inset 0 0 10px #d2f3da;
+    border-color: #9bd4a9;
+    color: #37a954;
+}
+.ss-style {
+    background-color: #e5fdff;
+    box-shadow: inset 0 0 10px #c7f5f8;
+    border-color: #93e8ee;
+    color: #18beca;
+}
+.fs-style {
+    background-color: #fffaf3;
+    box-shadow: inset 0 0 10px #ffeed7;
+    border-color: #ffd499;
+    color: #fc8834;
+}
+.pm-style {
+    background-color: #E8FDEE;
+    box-shadow: inset 0 0 10px #D2F3DA;
+    border-color: #9BD4A9;
+    color: #37A954;
+}
+</style>