jgy-public-component 0.0.37 → 0.0.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.cjs","sources":["../src/components/JButton/JButton.vue","../src/components/JUploadImg/JUploadImg.vue","../src/components/JIconRender/JIconRender.vue","../src/utils/btnPermission.ts","../src/composables/useBtnPermissionGate.ts","../src/components/JSearchHeader/JSearchHeader.vue","../src/components/JListSearchHeader/JListSearchHeader.vue","../src/components/JImportExcel/JImportExcel.vue","../src/components/JSidebar/JSideMenuItem.vue","../src/components/JSidebar/JSidebar.vue","../src/components/JAdminLayout/JAdminLayout.vue","../src/components/JProductDetail/request.ts","../src/components/JProductDetail/JProductDetailDialog.vue","../src/components/JProductDetail/store.ts","../src/components/JProductDetail/JSkuLink.vue","../src/components/JProductDetail/ProductDetailHost.vue","../src/components/JProductDetail/useProductDetailDialog.ts","../src/components/JSearchInputDialog/JSearchInputDialog.vue","../src/components/JRemoteSelect/debounce.ts","../src/components/JRemoteSelect/JRemoteSelect.vue","../src/components/JProductSelectDialog/JProductSelectDialog.vue","../src/components/JDocDetail/registry.ts","../src/components/JDocDetail/store.ts","../src/components/JDocDetail/utils/copyText.ts","../src/components/JDocDetail/DocNoLink.vue","../src/components/JDocDetail/DocDetailHost.vue","../src/components/JDocDetail/labels/receipt.ts","../src/components/JDocDetail/utils/flattenOrderItems.ts","../src/components/JRelatedDocs/RelatedDocNoCopy.vue","../src/components/JRelatedDocs/utils/flattenOrderItems.ts","../src/components/JRelatedDocs/utils/labels.ts","../src/components/JRelatedDocs/utils/useRelatedCollapseExpand.ts","../src/components/JRelatedDocs/tables/RelatedReceiptOrderTable.vue","../src/components/JRelatedDocs/tables/RelatedQcOrderTable.vue","../src/components/JRelatedDocs/tables/RelatedInboundOrderTable.vue","../src/components/JRelatedDocs/tables/RelatedPutawayOrderTable.vue","../src/components/JRelatedDocs/tables/RelatedPurchaseOrderTable.vue","../src/components/JRelatedDocs/utils/buildRelatedRows.ts","../src/components/JRelatedDocs/tables/RelatedPurchasePlanTable.vue","../src/components/JRelatedDocs/utils/display.ts","../src/components/JRelatedDocs/tables/RelatedDeliveryDocTable.vue","../src/components/JRelatedDocs/tables/RelatedProcessingOrderTable.vue","../src/components/JRelatedDocs/tables/RelatedReturnOrderTable.vue","../src/components/JRelatedDocs/tables/RelatedAbnormalOrderTable.vue","../src/components/JRelatedDocs/tables/RelatedPaymentRequestTable.vue","../src/components/JRelatedDocs/tables/RelatedReceiptVoucherTable.vue","../src/components/JRelatedDocs/tables/RelatedDeclarationTable.vue","../src/components/JRelatedDocs/registry.ts","../src/components/JRelatedDocs/RelatedDocSubTabs.vue","../src/components/JRelatedDocs/utils/parseList.ts","../src/components/JRelatedDocs/RelatedDocPanel.vue","../src/components/JRelatedDocs/JRelatedDocs.vue","../src/components/JDocDetail/views/ReceiptOrderDetailView.vue","../src/components/JDocDetail/views/QcOrderDetailView.vue","../src/components/JDocDetail/labels/inbound.ts","../src/components/JDocDetail/views/InboundOrderDetailView.vue","../src/components/JDocDetail/labels/putaway.ts","../src/components/JDocDetail/views/PutawayOrderDetailView.vue","../src/components/JDocDetail/views/DeliveryOrderDetailView.vue","../src/components/JDocDetail/views/TransferOrderDetailView.vue","../src/components/JDocDetail/views/WorkOrderDetailView.vue","../src/components/JDocDetail/views/AbnormalOrderDetailView.vue","../src/components/JDocDetail/views/PaymentRequestDetailView.vue","../src/components/JDocDetail/views/ReturnOrderDetailView.vue","../src/components/JDocDetail/views/CostExpenseDetailView.vue","../src/components/JDocDetail/views/ReceiptVoucherDetailView.vue","../src/components/JDocDetail/views/PurchaseOrderDetailView.vue","../src/components/JDocDetail/views/PurchasePlanDetailView.vue","../src/components/JDocDetail/views/PurchaseContractDetailView.vue","../src/components/JDocDetail/views/DeliveryDocDetailView.vue","../src/components/JDocDetail/wmsViews.ts","../src/utils/transform.ts","../src/utils/statusCounts.ts","../src/utils/exportStyledExcel.ts","../src/router/helpers.ts","../src/router/guards.ts","../src/index.ts"],"sourcesContent":["<template>\r\n <button\r\n class=\"j-button\"\r\n :class=\"[\r\n `j-button--${type}`,\r\n `j-button--${size}`,\r\n {\r\n 'j-button--plain': plain,\r\n 'j-button--round': round,\r\n 'j-button--disabled': disabled,\r\n 'j-button--loading': loading,\r\n },\r\n ]\"\r\n :disabled=\"disabled || loading\"\r\n @click=\"handleClick\"\r\n >\r\n <span v-if=\"loading\" class=\"j-button__loading-icon\" />\r\n <span v-if=\"$slots.default\" class=\"j-button__text\">\r\n <slot />\r\n </span>\r\n </button>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type { ButtonType, ButtonSize } from './types'\r\n\r\ninterface Props {\r\n type?: ButtonType\r\n size?: ButtonSize\r\n plain?: boolean\r\n round?: boolean\r\n disabled?: boolean\r\n loading?: boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n type: 'default',\r\n size: 'medium',\r\n plain: false,\r\n round: false,\r\n disabled: false,\r\n loading: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n click: [event: MouseEvent]\r\n}>()\r\n\r\nfunction handleClick(event: MouseEvent) {\r\n if (!props.disabled && !props.loading) {\r\n emit('click', event)\r\n }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.j-button {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: $spacing-xs;\r\n padding: 8px 16px;\r\n font-size: $font-size-base;\r\n font-weight: 400;\r\n line-height: 1;\r\n white-space: nowrap;\r\n cursor: pointer;\r\n border: 1px solid $color-border;\r\n border-radius: $border-radius-base;\r\n background-color: $color-white;\r\n color: $color-text-regular;\r\n transition: $transition-fast;\r\n outline: none;\r\n user-select: none;\r\n\r\n &:hover {\r\n color: $color-primary;\r\n border-color: $color-primary;\r\n background-color: color.adjust($color-primary, $lightness: 40%);\r\n }\r\n\r\n // 尺寸\r\n &--small {\r\n padding: 5px 12px;\r\n font-size: $font-size-xs;\r\n }\r\n\r\n &--medium {\r\n padding: 8px 16px;\r\n font-size: $font-size-base;\r\n }\r\n\r\n &--large {\r\n padding: 12px 20px;\r\n font-size: $font-size-md;\r\n }\r\n\r\n // 类型\r\n &--primary {\r\n background-color: $color-primary;\r\n border-color: $color-primary;\r\n color: $color-white;\r\n &:hover {\r\n background-color: color.adjust($color-primary, $lightness: 10%);\r\n border-color: color.adjust($color-primary, $lightness: 10%);\r\n color: $color-white;\r\n }\r\n }\r\n\r\n &--success {\r\n background-color: $color-success;\r\n border-color: $color-success;\r\n color: $color-white;\r\n &:hover {\r\n background-color: color.adjust($color-success, $lightness: 10%);\r\n border-color: color.adjust($color-success, $lightness: 10%);\r\n color: $color-white;\r\n }\r\n }\r\n\r\n &--danger {\r\n background-color: $color-danger;\r\n border-color: $color-danger;\r\n color: $color-white;\r\n &:hover {\r\n background-color: color.adjust($color-danger, $lightness: 10%);\r\n border-color: color.adjust($color-danger, $lightness: 10%);\r\n color: $color-white;\r\n }\r\n }\r\n\r\n &--warning {\r\n background-color: $color-warning;\r\n border-color: $color-warning;\r\n color: $color-white;\r\n &:hover {\r\n background-color: color.adjust($color-warning, $lightness: 10%);\r\n border-color: color.adjust($color-warning, $lightness: 10%);\r\n color: $color-white;\r\n }\r\n }\r\n\r\n // 朴素按钮\r\n &--plain {\r\n &.j-button--primary {\r\n background-color: color.adjust($color-primary, $lightness: 40%);\r\n color: $color-primary;\r\n &:hover {\r\n background-color: $color-primary;\r\n color: $color-white;\r\n }\r\n }\r\n }\r\n\r\n // 圆角\r\n &--round {\r\n border-radius: $border-radius-round;\r\n }\r\n\r\n // 禁用\r\n &--disabled {\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n pointer-events: none;\r\n }\r\n\r\n // 加载\r\n &--loading {\r\n opacity: 0.7;\r\n cursor: not-allowed;\r\n pointer-events: none;\r\n }\r\n\r\n &__loading-icon {\r\n display: inline-block;\r\n width: 14px;\r\n height: 14px;\r\n border: 2px solid currentColor;\r\n border-top-color: transparent;\r\n border-radius: 50%;\r\n animation: j-spin 0.6s linear infinite;\r\n }\r\n\r\n @keyframes j-spin {\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"j-upload-img-container\">\r\n <!-- 多图模式 -->\r\n <template v-if=\"multiple\">\r\n <div class=\"images-wrapper\">\r\n <draggable\r\n v-model=\"imageList\"\r\n class=\"images-list\"\r\n item-key=\"uid\"\r\n :animation=\"200\"\r\n :disabled=\"disabled\"\r\n @end=\"handleDragEnd\"\r\n >\r\n <template #item=\"{ element, index }\">\r\n <div class=\"image-item\">\r\n <el-image\r\n :src=\"element.url\"\r\n :preview-src-list=\"imageList.map(img => img.url)\"\r\n :initial-index=\"index\"\r\n fit=\"cover\"\r\n class=\"image-preview\"\r\n :preview-teleported=\"true\"\r\n :hide-on-click-modal=\"true\"\r\n />\r\n <div v-if=\"!disabled\" class=\"delete-btn\" @click.stop=\"handleRemove(index)\">\r\n <el-icon class=\"icon-delete\">\r\n <Delete />\r\n </el-icon>\r\n </div>\r\n </div>\r\n </template>\r\n </draggable>\r\n\r\n <!-- 多图上传按钮 -->\r\n <el-upload\r\n v-if=\"!disabled && (!limit || imageList.length < limit)\"\r\n class=\"image-uploader\"\r\n :auto-upload=\"false\"\r\n :show-file-list=\"false\"\r\n :on-change=\"handleFileChange\"\r\n :disabled=\"disabled\"\r\n list-type=\"picture-card\"\r\n :accept=\"accept\"\r\n :multiple=\"multipleSelect\"\r\n >\r\n <el-icon v-if=\"!uploading\" class=\"uploader-icon\">\r\n <Plus />\r\n </el-icon>\r\n <el-icon v-else class=\"uploader-icon is-loading\">\r\n <Loading />\r\n </el-icon>\r\n </el-upload>\r\n </div>\r\n </template>\r\n\r\n <!-- 单图模式 -->\r\n <template v-else>\r\n <!-- 已有图片:独立展示,hover 显示操作遮罩 -->\r\n <div v-if=\"imageUrl\" class=\"image-item single-image-item\">\r\n <el-image\r\n :src=\"imageUrl\"\r\n fit=\"cover\"\r\n class=\"image-preview\"\r\n />\r\n <div class=\"image-actions\">\r\n <el-icon class=\"action-icon\" @click.stop=\"handlePreviewSingle\">\r\n <ZoomIn />\r\n </el-icon>\r\n <el-icon v-if=\"!disabled\" class=\"action-icon\" @click.stop=\"handleRemoveSingle\">\r\n <Delete />\r\n </el-icon>\r\n </div>\r\n </div>\r\n\r\n <!-- 无图片:显示上传按钮 -->\r\n <el-upload\r\n v-else\r\n class=\"image-uploader\"\r\n :auto-upload=\"false\"\r\n :show-file-list=\"false\"\r\n :on-change=\"handleFileChange\"\r\n :disabled=\"disabled || uploading\"\r\n :accept=\"accept\"\r\n list-type=\"picture-card\"\r\n >\r\n <el-icon class=\"uploader-icon\">\r\n <Plus v-if=\"!uploading\" />\r\n <Loading v-else class=\"is-loading\" />\r\n </el-icon>\r\n </el-upload>\r\n\r\n <!-- 大图预览 -->\r\n <el-image-viewer\r\n v-if=\"showPreview\"\r\n :url-list=\"[imageUrl]\"\r\n :teleported=\"true\"\r\n @close=\"showPreview = false\"\r\n />\r\n </template>\r\n\r\n <div v-if=\"showTipText\" class=\"upload-tip\">\r\n <span>{{ tip }}</span>\r\n <span v-if=\"multiple && limit\"> (最多 {{ limit }} 张)</span>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, watch } from 'vue'\r\nimport { ElMessage, ElImage, ElIcon, ElUpload, ElImageViewer } from 'element-plus'\r\nimport type { UploadFile } from 'element-plus'\r\nimport { Plus, Loading, Delete, ZoomIn } from '@element-plus/icons-vue'\r\nimport draggable from 'vuedraggable'\r\nimport type { ImageItem } from './types'\r\n\r\ndefineOptions({\r\n name: 'JUploadImg'\r\n})\r\n\r\nconst props = withDefaults(defineProps<{\r\n modelValue?: string | string[]\r\n disabled?: boolean\r\n multiple?: boolean\r\n /** 多图模式下,文件选择器是否允许一次选多张 */\r\n multipleSelect?: boolean\r\n limit?: number\r\n maxSize?: number\r\n accept?: string\r\n tip?: string\r\n showTip?: boolean\r\n /** 自定义上传函数,接收 File 返回图片 URL */\r\n uploadFn?: (file: File) => Promise<string>\r\n}>(), {\r\n modelValue: '',\r\n disabled: false,\r\n multiple: false,\r\n multipleSelect: true,\r\n limit: 9,\r\n maxSize: 2,\r\n accept: 'image/jpeg,image/png,image/jpg,image/gif',\r\n tip: '只能上传jpg/png/gif格式的图片,且不超过2MB',\r\n showTip: true,\r\n uploadFn: undefined\r\n})\r\n\r\nconst emit = defineEmits<{\r\n (e: 'update:modelValue', value: string | string[]): void\r\n (e: 'success', url: string): void\r\n (e: 'error', error: any): void\r\n}>()\r\n\r\n// 单图模式\r\nconst imageUrl = ref<string>('')\r\nconst showPreview = ref(false)\r\nconst showTipText = props.showTip\r\n\r\nconst handlePreviewSingle = () => {\r\n showPreview.value = true\r\n}\r\n\r\nconst handleRemoveSingle = () => {\r\n imageUrl.value = ''\r\n emit('update:modelValue', '')\r\n ElMessage.success('删除成功')\r\n}\r\n\r\n// 多图模式\r\nconst imageList = ref<ImageItem[]>([])\r\nconst uploading = ref(false)\r\n\r\n// 初始化图片列表(多图模式)\r\nconst initImageList = (urls: string[]) => {\r\n imageList.value = urls.map((url, index) => ({\r\n uid: Date.now() + index,\r\n url\r\n }))\r\n}\r\n\r\n// 监听外部值变化\r\nwatch(() => props.modelValue, (val) => {\r\n if (props.multiple) {\r\n if (Array.isArray(val) && val.length > 0) {\r\n initImageList(val)\r\n } else {\r\n imageList.value = []\r\n }\r\n } else {\r\n if (typeof val === 'string') {\r\n imageUrl.value = val\r\n } else {\r\n imageUrl.value = ''\r\n }\r\n }\r\n}, { immediate: true })\r\n\r\n// 拖拽结束(多图模式)\r\nconst handleDragEnd = () => {\r\n emitMultipleUpdate()\r\n}\r\n\r\n// 删除图片(多图模式)\r\nconst handleRemove = (index: number) => {\r\n imageList.value.splice(index, 1)\r\n emitMultipleUpdate()\r\n ElMessage.success('删除成功')\r\n}\r\n\r\n// 文件改变时触发\r\nconst handleFileChange = async (uploadFile: UploadFile) => {\r\n const file = uploadFile.raw as File\r\n\r\n if (!file) {\r\n ElMessage.error('文件不存在,请重试')\r\n return\r\n }\r\n\r\n if (file.size > props.maxSize * 1024 * 1024) {\r\n ElMessage.error(`图片大小不能超过 ${props.maxSize}MB`)\r\n return\r\n }\r\n\r\n if (!props.uploadFn) {\r\n ElMessage.error('未配置上传函数 (uploadFn)')\r\n return\r\n }\r\n\r\n try {\r\n uploading.value = true\r\n const url = await props.uploadFn(file)\r\n\r\n if (props.multiple) {\r\n if (props.limit && imageList.value.length >= props.limit) {\r\n ElMessage.warning(`最多上传 ${props.limit} 张`)\r\n return\r\n }\r\n imageList.value.push({ uid: Date.now(), url })\r\n emitMultipleUpdate()\r\n } else {\r\n imageUrl.value = url\r\n emit('update:modelValue', url)\r\n }\r\n\r\n emit('success', url)\r\n ElMessage.success('上传成功')\r\n } catch (error) {\r\n console.error('上传出错:', error)\r\n ElMessage.error('上传失败,请重试')\r\n emit('error', error)\r\n } finally {\r\n uploading.value = false\r\n }\r\n}\r\n\r\n// 触发多图更新\r\nconst emitMultipleUpdate = () => {\r\n const urls = imageList.value.map(item => item.url)\r\n emit('update:modelValue', urls)\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.j-upload-img-container {\r\n display: inline-block;\r\n}\r\n\r\n/* 多图模式样式 */\r\n.images-wrapper {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 8px;\r\n align-items: flex-start;\r\n}\r\n\r\n.images-list {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 8px;\r\n}\r\n\r\n.image-item {\r\n position: relative;\r\n width: 74px;\r\n height: 74px;\r\n border: 1px solid var(--el-border-color);\r\n border-radius: 6px;\r\n overflow: hidden;\r\n cursor: move;\r\n}\r\n\r\n.image-preview {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.delete-btn {\r\n position: absolute;\r\n top: 2px;\r\n right: 2px;\r\n width: 20px;\r\n height: 20px;\r\n background-color: rgba(0, 0, 0, 0.6);\r\n border-radius: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 0;\r\n transition: opacity 0.3s;\r\n cursor: pointer;\r\n z-index: 1;\r\n}\r\n\r\n.image-item:hover .delete-btn {\r\n opacity: 1;\r\n}\r\n\r\n.delete-btn:hover {\r\n background-color: rgba(0, 0, 0, 0.8);\r\n}\r\n\r\n.icon-delete {\r\n font-size: 12px;\r\n color: #fff;\r\n}\r\n\r\n/* 单图和多图共用样式 */\r\n.image-uploader {\r\n display: inline-block;\r\n vertical-align: top;\r\n}\r\n\r\n.image-uploader :deep(.el-upload) {\r\n border: 1px dashed var(--el-border-color);\r\n border-radius: 6px;\r\n cursor: pointer;\r\n position: relative;\r\n overflow: hidden;\r\n transition: var(--el-transition-duration-fast);\r\n width: 74px !important;\r\n height: 74px !important;\r\n}\r\n\r\n.image-uploader :deep(.el-upload:hover) {\r\n border-color: var(--el-color-primary);\r\n}\r\n\r\n.uploader-icon {\r\n font-size: 20px;\r\n color: #8c939d;\r\n width: 74px;\r\n height: 74px;\r\n text-align: center;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.single-image-item {\r\n cursor: default;\r\n}\r\n\r\n.image-actions {\r\n position: absolute;\r\n inset: 0;\r\n background-color: rgba(0, 0, 0, 0.5);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 12px;\r\n opacity: 0;\r\n transition: opacity 0.3s;\r\n}\r\n\r\n.single-image-item:hover .image-actions,\r\n.image-item:hover .image-actions {\r\n opacity: 1;\r\n}\r\n\r\n.action-icon {\r\n font-size: 18px;\r\n color: #fff;\r\n cursor: pointer;\r\n transition: transform 0.2s;\r\n}\r\n\r\n.action-icon:hover {\r\n transform: scale(1.2);\r\n}\r\n\r\n.upload-tip {\r\n margin-top: 8px;\r\n font-size: 12px;\r\n color: #909399;\r\n line-height: 1.5;\r\n}\r\n</style>\r\n","<template>\r\n <Icon v-if=\"icon\" :icon=\"icon\" :width=\"size\" :height=\"size\" v-bind=\"$attrs\" />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { Icon } from '@iconify/vue'\r\n\r\ndefineOptions({\r\n name: 'JIconRender'\r\n})\r\n\r\nwithDefaults(defineProps<{\r\n icon: string\r\n size?: string | number\r\n}>(), {\r\n size: 24,\r\n})\r\n</script>\r\n","import type { App, InjectionKey, Ref } from 'vue'\nimport { inject } from 'vue'\n\nexport type BtnPermissionInput = string | string[]\nexport type BtnPermissionMode = 'any' | 'all'\nexport type BtnPermissionChecker = (\n value: BtnPermissionInput,\n mode?: BtnPermissionMode,\n) => boolean\n\nexport const J_BTN_PERMISSION_KEY: InjectionKey<BtnPermissionChecker> = Symbol('J_BTN_PERMISSION')\nexport const J_BTN_PERMISSIONS_KEY: InjectionKey<Ref<Record<string, boolean>>> = Symbol('J_BTN_PERMISSIONS')\n\nconst normalizeCodes = (value: BtnPermissionInput): string[] => {\n if (typeof value === 'string') return value ? [value] : []\n if (Array.isArray(value)) return value.filter(Boolean)\n return []\n}\n\nexport function checkBtnPermission(\n value: BtnPermissionInput | undefined,\n checker?: BtnPermissionChecker | null,\n mode: BtnPermissionMode = 'any',\n): boolean {\n if (!value) return true\n if (!checker) return false\n\n const codes = normalizeCodes(value)\n if (!codes.length) return false\n\n if (codes.length === 1) return checker(codes[0], mode)\n\n return mode === 'all'\n ? codes.every(code => checker(code, 'all'))\n : codes.some(code => checker(code, 'any'))\n}\n\n/**\n * 在应用入口注入按钮权限检查函数(推荐,全项目只需一次)。\n * 传入 permissions 后,组件内权限判断会随权限表更新而响应。\n *\n * @example\n * ```ts\n * import { createApp } from 'vue'\n * import { provideBtnPermission } from 'jgy-public-component'\n * import { hasBtnPermission } from '@/utils/btnPermission'\n * import { usePermissionStore } from '@/stores/permission'\n *\n * const app = createApp(App)\n * const permissionStore = usePermissionStore()\n * provideBtnPermission(app, hasBtnPermission, permissionStore.buttonPermissions)\n * ```\n */\nexport function provideBtnPermission(\n app: App,\n checker: BtnPermissionChecker,\n permissions?: Ref<Record<string, boolean>>,\n) {\n app.provide(J_BTN_PERMISSION_KEY, checker)\n if (permissions) {\n app.provide(J_BTN_PERMISSIONS_KEY, permissions)\n }\n}\n\n/** 在 setup 中读取全局注入的按钮权限检查函数 */\nexport function useInjectedBtnPermission(): BtnPermissionChecker | null {\n return inject(J_BTN_PERMISSION_KEY, null)\n}\n\n/** 在 setup 中读取全局注入的按钮权限表(可选,用于响应式更新) */\nexport function useInjectedBtnPermissions(): Ref<Record<string, boolean>> | null {\n return inject(J_BTN_PERMISSIONS_KEY, null)\n}\n","import { computed, type ComputedRef } from 'vue'\nimport {\n checkBtnPermission,\n useInjectedBtnPermission,\n useInjectedBtnPermissions,\n type BtnPermissionChecker,\n type BtnPermissionInput,\n} from '../utils/btnPermission'\n\nexport function useBtnPermissionGate(permissionChecker?: BtnPermissionChecker) {\n const injectedPermissionChecker = useInjectedBtnPermission()\n const injectedPermissions = useInjectedBtnPermissions()\n\n const resolvePermissionChecker = () => permissionChecker ?? injectedPermissionChecker\n\n const canShowByPermission = (permission?: BtnPermissionInput) => {\n if (injectedPermissions) void injectedPermissions.value\n return checkBtnPermission(permission, resolvePermissionChecker())\n }\n\n const createCanShow = (\n show: () => boolean,\n permission?: () => BtnPermissionInput | undefined,\n ): ComputedRef<boolean> =>\n computed(() => show() && canShowByPermission(permission?.()))\n\n return {\n canShowByPermission,\n createCanShow,\n }\n}\n","<template>\r\n <el-card shadow=\"never\" class=\"j-search-header-card\">\r\n <el-form inline class=\"search-form\">\r\n <div\r\n ref=\"formItemsRef\"\r\n class=\"form-items-wrapper\"\r\n :class=\"{ 'is-animated': isAnimated }\"\r\n >\r\n <slot />\r\n </div>\r\n </el-form>\r\n <div class=\"action-bar\" :style=\"{ marginTop: expanded ? '0px' : '10px' }\">\r\n <div class=\"action-left\">\r\n <el-button v-if=\"canShowAdd\" type=\"primary\" :icon=\"Plus\" @click=\"emit('add')\">\r\n {{ addText }}\r\n </el-button>\r\n <el-button\r\n v-if=\"canShowBatchDelete\"\r\n type=\"danger\"\r\n :icon=\"Delete\"\r\n :disabled=\"selectedCount === 0\"\r\n @click=\"emit('batchDelete')\"\r\n >\r\n 批量删除{{ selectedCount ? `(${selectedCount})` : '' }}\r\n </el-button>\r\n <el-button v-if=\"canShowSearch\" type=\"primary\" :icon=\"Search\" @click=\"emit('search')\">搜索</el-button>\r\n <el-button v-if=\"canShowReset\" :icon=\"Refresh\" @click=\"emit('reset')\">重置</el-button>\r\n <slot name=\"actions\" />\r\n </div>\r\n <el-button\r\n v-if=\"shouldCollapse\"\r\n link\r\n type=\"primary\"\r\n @click=\"toggleExpand\"\r\n >\r\n {{ expanded ? '收起' : '展开' }}\r\n <el-icon class=\"toggle-icon\" :class=\"{ 'is-expanded': expanded }\">\r\n <ArrowDown />\r\n </el-icon>\r\n </el-button>\r\n </div>\r\n </el-card>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\r\nimport { ElCard, ElForm, ElButton, ElIcon } from 'element-plus'\r\nimport { Search, Refresh, Plus, Delete, ArrowDown } from '@element-plus/icons-vue'\r\nimport { useBtnPermissionGate } from '../../composables/useBtnPermissionGate'\r\nimport type { BtnPermissionChecker, BtnPermissionInput } from '../../utils/btnPermission'\r\n\r\ndefineOptions({\r\n name: 'JSearchHeader'\r\n})\r\n\r\nconst props = withDefaults(defineProps<{\r\n selectedCount?: number\r\n addText?: string\r\n defaultVisible?: number\r\n showAdd?: boolean\r\n showBatchDelete?: boolean\r\n showSearch?: boolean\r\n showReset?: boolean\r\n addPermission?: BtnPermissionInput\r\n batchDeletePermission?: BtnPermissionInput\r\n searchPermission?: BtnPermissionInput\r\n resetPermission?: BtnPermissionInput\r\n permissionChecker?: BtnPermissionChecker\r\n}>(), {\r\n selectedCount: 0,\r\n addText: '新增',\r\n defaultVisible: 5,\r\n showAdd: true,\r\n showBatchDelete: true,\r\n showSearch: true,\r\n showReset: true\r\n})\r\n\r\nconst { createCanShow } = useBtnPermissionGate(props.permissionChecker)\r\n\r\nconst canShowAdd = createCanShow(\r\n () => props.showAdd,\r\n () => props.addPermission,\r\n)\r\nconst canShowBatchDelete = createCanShow(\r\n () => props.showBatchDelete,\r\n () => props.batchDeletePermission,\r\n)\r\nconst canShowSearch = createCanShow(\r\n () => props.showSearch,\r\n () => props.searchPermission,\r\n)\r\nconst canShowReset = createCanShow(\r\n () => props.showReset,\r\n () => props.resetPermission,\r\n)\r\n\r\nconst emit = defineEmits<{\r\n search: []\r\n reset: []\r\n add: []\r\n batchDelete: []\r\n}>()\r\n\r\nconst formItemsRef = ref<HTMLElement>()\r\nconst expanded = ref(false)\r\nconst isAnimated = ref(false)\r\nconst itemCount = ref(0)\r\nconst collapsedHeight = ref(0)\r\n\r\nconst shouldCollapse = computed(() => itemCount.value > props.defaultVisible)\r\n\r\nconst measureItems = () => {\r\n if (!formItemsRef.value) return\r\n const items = Array.from(formItemsRef.value.children) as HTMLElement[]\r\n itemCount.value = items.length\r\n\r\n const lastVisibleItem = items[props.defaultVisible - 1]\r\n if (lastVisibleItem && formItemsRef.value) {\r\n const wrapperRect = formItemsRef.value.getBoundingClientRect()\r\n const lastVisibleRect = lastVisibleItem.getBoundingClientRect()\r\n collapsedHeight.value = lastVisibleRect.bottom - wrapperRect.top\r\n }\r\n}\r\n\r\nconst toggleExpand = () => {\r\n const el = formItemsRef.value\r\n if (!el) return\r\n\r\n if (!expanded.value) {\r\n expanded.value = true\r\n el.style.maxHeight = el.scrollHeight + 'px'\r\n const onEnd = () => {\r\n el.style.maxHeight = 'none'\r\n el.removeEventListener('transitionend', onEnd)\r\n }\r\n el.addEventListener('transitionend', onEnd)\r\n } else {\r\n measureItems()\r\n expanded.value = false\r\n el.style.maxHeight = el.scrollHeight + 'px'\r\n el.offsetHeight\r\n el.style.maxHeight = collapsedHeight.value + 'px'\r\n }\r\n}\r\n\r\nlet observer: MutationObserver | null = null\r\n\r\nonMounted(() => {\r\n measureItems()\r\n if (shouldCollapse.value && formItemsRef.value) {\r\n formItemsRef.value.style.maxHeight = collapsedHeight.value + 'px'\r\n }\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(() => {\r\n isAnimated.value = true\r\n })\r\n })\r\n if (formItemsRef.value) {\r\n observer = new MutationObserver(() => {\r\n measureItems()\r\n if (shouldCollapse.value && !expanded.value && formItemsRef.value) {\r\n formItemsRef.value.style.maxHeight = collapsedHeight.value + 'px'\r\n }\r\n })\r\n observer.observe(formItemsRef.value, { childList: true })\r\n }\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n observer?.disconnect()\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.j-search-header-card :deep(.el-card__body) {\r\n padding: 16px 20px 12px;\r\n}\r\n\r\n.search-form {\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n gap: 0;\r\n}\r\n\r\n.form-items-wrapper {\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n overflow: hidden;\r\n}\r\n\r\n.form-items-wrapper.is-animated {\r\n transition: max-height 0.3s ease-in-out;\r\n}\r\n\r\n.form-items-wrapper :deep(.el-form-item) {\r\n margin-bottom: 10px;\r\n margin-right: 16px;\r\n}\r\n\r\n.action-bar {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding-top: 10px;\r\n border-top: 1px solid #ebeef5;\r\n}\r\n\r\n.action-left {\r\n display: flex;\r\n gap: 8px;\r\n}\r\n\r\n.toggle-icon {\r\n margin-left: 2px;\r\n transition: transform 0.25s;\r\n}\r\n\r\n.toggle-icon.is-expanded {\r\n transform: rotate(180deg);\r\n}\r\n</style>\r\n","<template>\r\n <el-card shadow=\"never\" class=\"j-list-search-header\">\r\n <!-- Row 1: Tabs -->\r\n <el-tabs\r\n v-if=\"showTabsRow\"\r\n v-model=\"activeTab\"\r\n size=\"small\"\r\n class=\"j-list-search-header__tabs\"\r\n @tab-change=\"(name: string | number) => emit('tab-change', String(name))\"\r\n >\r\n <slot name=\"tabs\" />\r\n </el-tabs>\r\n\r\n <!-- Row 2: Filter bar -->\r\n <div class=\"j-list-search-header__filter\">\r\n <div ref=\"filterLeftRef\" class=\"filter-left\">\r\n <div\r\n ref=\"filterItemsRef\"\r\n class=\"filter-items-wrapper\"\r\n :class=\"{ 'is-animated': isAnimated }\"\r\n >\r\n <slot name=\"filter\" />\r\n </div>\r\n </div>\r\n <div class=\"filter-right\">\r\n <el-button\r\n v-if=\"shouldShowCollapseToggle\"\r\n link\r\n type=\"primary\"\r\n class=\"filter-collapse-btn\"\r\n @click=\"toggleExpand\"\r\n >\r\n {{ expanded ? '收起' : '展开' }}\r\n <el-icon class=\"toggle-icon\" :class=\"{ 'is-expanded': expanded }\">\r\n <ArrowDown />\r\n </el-icon>\r\n </el-button>\r\n <el-popover\r\n v-if=\"canShowMoreFilter\"\r\n :visible=\"moreFilterVisible\"\r\n placement=\"bottom-end\"\r\n trigger=\"click\"\r\n :width=\"560\"\r\n popper-class=\"j-list-search-header-more-filter\"\r\n >\r\n <template #reference>\r\n <el-button\r\n type=\"primary\"\r\n :class=\"{ 'is-more-filter-active': moreFilterActiveCount > 0 }\"\r\n @click=\"moreFilterVisible = !moreFilterVisible\"\r\n >\r\n {{ moreFilterLabel }}\r\n </el-button>\r\n </template>\r\n <slot name=\"more-filter\" />\r\n <div class=\"more-filter-footer\">\r\n <el-button @click=\"moreFilterVisible = false\">取消</el-button>\r\n <el-button v-if=\"canShowSearch\" type=\"primary\" @click=\"handleMoreFilterConfirm\">查询</el-button>\r\n </div>\r\n </el-popover>\r\n <el-button v-if=\"canShowSearch\" type=\"primary\" @click=\"emit('search')\">查询</el-button>\r\n <el-button v-if=\"canShowReset\" class=\"btn-reset\" @click=\"emit('reset')\">重置</el-button>\r\n </div>\r\n </div>\r\n\r\n <!-- Row 3: Action bar -->\r\n <div class=\"j-list-search-header__actions\">\r\n <div class=\"actions-left\">\r\n <slot name=\"actions\" />\r\n </div>\r\n <div class=\"actions-right\">\r\n <el-icon\r\n v-if=\"canShowDownload\"\r\n class=\"action-icon\"\r\n :size=\"18\"\r\n title=\"导出\"\r\n @click=\"emit('download')\"\r\n >\r\n <Download />\r\n </el-icon>\r\n <el-icon\r\n v-if=\"canShowSettings\"\r\n class=\"action-icon\"\r\n :size=\"18\"\r\n title=\"列设置\"\r\n @click=\"settingsVisible = true\"\r\n >\r\n <Setting />\r\n </el-icon>\r\n </div>\r\n </div>\r\n\r\n <!-- Settings Drawer -->\r\n <el-drawer\r\n v-model=\"settingsVisible\"\r\n title=\"列设置\"\r\n direction=\"rtl\"\r\n size=\"720px\"\r\n append-to-body\r\n destroy-on-close\r\n >\r\n <slot name=\"settings\" />\r\n <template #footer>\r\n <div class=\"settings-footer\">\r\n <el-button v-if=\"canShowSettings\" @click=\"emit('restore-default')\">恢复默认</el-button>\r\n <div>\r\n <el-button @click=\"settingsVisible = false\">取消</el-button>\r\n <el-button v-if=\"canShowSettings\" type=\"primary\" @click=\"handleSettingsSave\">保存</el-button>\r\n </div>\r\n </div>\r\n </template>\r\n </el-drawer>\r\n </el-card>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useSlots } from 'vue'\r\nimport type { JListSearchHeaderProps } from './types'\r\nimport { ArrowDown, Download, Setting } from '@element-plus/icons-vue'\r\nimport { useBtnPermissionGate } from '../../composables/useBtnPermissionGate'\r\n\r\ndefineOptions({\r\n name: 'JListSearchHeader',\r\n})\r\n\r\nconst props = withDefaults(defineProps<JListSearchHeaderProps>(), {\r\n showMoreFilter: true,\r\n showDownload: true,\r\n showSettings: true,\r\n showTabs: true,\r\n showSearch: true,\r\n showReset: true,\r\n defaultVisibleRows: 1,\r\n collapsible: true,\r\n moreFilterActiveCount: 0,\r\n})\r\n\r\nconst { createCanShow } = useBtnPermissionGate(props.permissionChecker)\r\n\r\nconst canShowMoreFilter = createCanShow(\r\n () => props.showMoreFilter,\r\n () => props.moreFilterPermission,\r\n)\r\nconst canShowSearch = createCanShow(\r\n () => props.showSearch,\r\n () => props.searchPermission,\r\n)\r\nconst canShowReset = createCanShow(\r\n () => props.showReset,\r\n () => props.resetPermission,\r\n)\r\nconst canShowDownload = createCanShow(\r\n () => props.showDownload,\r\n () => props.downloadPermission,\r\n)\r\nconst canShowSettings = createCanShow(\r\n () => props.showSettings,\r\n () => props.settingsPermission,\r\n)\r\n\r\nconst activeTab = defineModel<string | number>({ default: '' })\r\n\r\nconst emit = defineEmits<{\r\n search: []\r\n reset: []\r\n download: []\r\n 'settings-save': []\r\n 'restore-default': []\r\n 'more-filter-search': []\r\n 'tab-change': [name: string]\r\n}>()\r\n\r\nconst slots = useSlots()\r\nconst moreFilterVisible = ref(false)\r\nconst settingsVisible = ref(false)\r\n\r\nconst filterItemsRef = ref<HTMLElement>()\r\nconst filterLeftRef = ref<HTMLElement>()\r\nconst expanded = ref(false)\r\nconst isAnimated = ref(false)\r\nconst rowCount = ref(0)\r\nconst collapsedHeight = ref(0)\r\n\r\nconst ROW_TOP_TOLERANCE = 8\r\nconst COLLAPSED_HEIGHT_BUFFER = 4\r\n\r\nconst showTabsRow = computed(() => props.showTabs && !!slots.tabs)\r\n\r\nconst moreFilterLabel = computed(() => {\r\n const count = props.moreFilterActiveCount ?? 0\r\n return count > 0 ? `更多筛选 (${count})` : '更多筛选'\r\n})\r\n\r\nconst shouldShowCollapseToggle = computed(\r\n () => props.collapsible && rowCount.value > props.defaultVisibleRows,\r\n)\r\n\r\n/** 兼容 #filter 内包 el-form 或直接 el-form-item */\r\nconst collectFilterItems = (root: HTMLElement): HTMLElement[] => {\r\n const form = root.querySelector(':scope > .el-form')\r\n if (form) {\r\n return Array.from(form.children).filter((el) =>\r\n el.classList.contains('el-form-item'),\r\n ) as HTMLElement[]\r\n }\r\n return Array.from(root.children).filter((el) =>\r\n el.classList.contains('el-form-item'),\r\n ) as HTMLElement[]\r\n}\r\n\r\n/** 按 offsetTop 将 el-form-item 分组为视觉行 */\r\nconst groupItemsByRow = (items: HTMLElement[]): HTMLElement[][] => {\r\n if (!items.length) return []\r\n\r\n const rows: HTMLElement[][] = []\r\n let currentRow: HTMLElement[] = [items[0]]\r\n let rowTop = items[0].offsetTop\r\n\r\n for (let i = 1; i < items.length; i++) {\r\n const item = items[i]\r\n if (Math.abs(item.offsetTop - rowTop) <= ROW_TOP_TOLERANCE) {\r\n currentRow.push(item)\r\n } else {\r\n rows.push(currentRow)\r\n currentRow = [item]\r\n rowTop = item.offsetTop\r\n }\r\n }\r\n rows.push(currentRow)\r\n return rows\r\n}\r\n\r\nconst applyCollapsedHeight = () => {\r\n const el = filterItemsRef.value\r\n if (!el || expanded.value) return\r\n\r\n if (!shouldShowCollapseToggle.value) {\r\n el.style.maxHeight = 'none'\r\n return\r\n }\r\n\r\n el.style.maxHeight = `${collapsedHeight.value}px`\r\n}\r\n\r\nconst measureItems = () => {\r\n if (!filterItemsRef.value) return\r\n\r\n const items = collectFilterItems(filterItemsRef.value)\r\n const rows = groupItemsByRow(items)\r\n rowCount.value = rows.length\r\n\r\n const visibleRows = rows.slice(0, props.defaultVisibleRows)\r\n const lastVisibleRow = visibleRows[visibleRows.length - 1]\r\n const lastVisibleItem = lastVisibleRow?.[lastVisibleRow.length - 1]\r\n\r\n if (lastVisibleItem) {\r\n const wrapperRect = filterItemsRef.value.getBoundingClientRect()\r\n const lastVisibleRect = lastVisibleItem.getBoundingClientRect()\r\n collapsedHeight.value =\r\n lastVisibleRect.bottom - wrapperRect.top + COLLAPSED_HEIGHT_BUFFER\r\n } else {\r\n collapsedHeight.value = 0\r\n }\r\n}\r\n\r\nconst remeasureLayout = () => {\r\n measureItems()\r\n applyCollapsedHeight()\r\n}\r\n\r\nconst toggleExpand = () => {\r\n const el = filterItemsRef.value\r\n if (!el) return\r\n\r\n if (!expanded.value) {\r\n expanded.value = true\r\n el.style.maxHeight = `${el.scrollHeight}px`\r\n const onEnd = () => {\r\n el.style.maxHeight = 'none'\r\n el.removeEventListener('transitionend', onEnd)\r\n }\r\n el.addEventListener('transitionend', onEnd)\r\n } else {\r\n measureItems()\r\n expanded.value = false\r\n el.style.maxHeight = `${el.scrollHeight}px`\r\n el.offsetHeight\r\n el.style.maxHeight = `${collapsedHeight.value}px`\r\n }\r\n}\r\n\r\nlet mutationObserver: MutationObserver | null = null\r\nlet resizeObserver: ResizeObserver | null = null\r\n\r\nonMounted(async () => {\r\n await nextTick()\r\n remeasureLayout()\r\n requestAnimationFrame(() => {\r\n remeasureLayout()\r\n requestAnimationFrame(() => {\r\n isAnimated.value = true\r\n })\r\n })\r\n\r\n if (filterItemsRef.value) {\r\n mutationObserver = new MutationObserver(() => {\r\n remeasureLayout()\r\n })\r\n mutationObserver.observe(filterItemsRef.value, { childList: true, subtree: true })\r\n }\r\n\r\n if (filterLeftRef.value) {\r\n resizeObserver = new ResizeObserver(() => {\r\n remeasureLayout()\r\n })\r\n resizeObserver.observe(filterLeftRef.value)\r\n }\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n mutationObserver?.disconnect()\r\n resizeObserver?.disconnect()\r\n})\r\n\r\nconst handleMoreFilterConfirm = () => {\r\n emit('more-filter-search')\r\n moreFilterVisible.value = false\r\n}\r\n\r\nconst handleSettingsSave = () => {\r\n emit('settings-save')\r\n settingsVisible.value = false\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.j-list-search-header :deep(.el-card__body) {\r\n padding: 0;\r\n}\r\n\r\n/* Row 1: Tabs */\r\n.j-list-search-header__tabs :deep(.el-tabs__header) {\r\n margin-bottom: 0;\r\n padding: 0 20px;\r\n}\r\n\r\n.j-list-search-header__tabs :deep(.el-tabs__nav-wrap::after) {\r\n height: 1px;\r\n}\r\n\r\n.j-list-search-header__tabs :deep(.el-tabs__item) {\r\n font-size: 14px;\r\n height: 40px;\r\n line-height: 40px;\r\n}\r\n\r\n.j-list-search-header__tabs :deep(.el-tabs__content) {\r\n display: none;\r\n}\r\n\r\n/* Row 2: Filter bar */\r\n.j-list-search-header__filter {\r\n display: flex;\r\n align-items: flex-start;\r\n justify-content: space-between;\r\n padding: 12px 20px;\r\n padding-bottom: 0;\r\n gap: 12px;\r\n border-bottom: 1px solid #ebeef5;\r\n}\r\n\r\n.filter-left {\r\n flex: 1;\r\n min-width: 0;\r\n}\r\n\r\n.filter-items-wrapper {\r\n overflow: hidden;\r\n width: 100%;\r\n}\r\n\r\n.filter-items-wrapper.is-animated {\r\n transition: max-height 0.3s ease-in-out;\r\n}\r\n\r\n.filter-items-wrapper :deep(.el-form) {\r\n display: flex;\r\n flex-wrap: wrap;\r\n /* 必须顶对齐:center 时不同高度控件的 offsetTop 会错位,\r\n 行分组(容差仅 2px)会把同一视觉行拆成多行,导致折叠只剩 1 个筛选项 */\r\n align-items: flex-start;\r\n}\r\n\r\n.filter-items-wrapper :deep(.el-form-item) {\r\n margin-bottom: 10px;\r\n margin-right: 12px;\r\n}\r\n\r\n.filter-items-wrapper :deep(.el-select),\r\n.filter-items-wrapper :deep(.el-date-editor),\r\n.filter-items-wrapper :deep(.el-input) {\r\n flex-shrink: 0;\r\n}\r\n\r\n.filter-right {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n flex-shrink: 0;\r\n padding-top: 2px;\r\n}\r\n\r\n.filter-collapse-btn {\r\n padding-left: 0;\r\n padding-right: 0;\r\n}\r\n\r\n.toggle-icon {\r\n margin-left: 2px;\r\n transition: transform 0.25s;\r\n}\r\n\r\n.toggle-icon.is-expanded {\r\n transform: rotate(180deg);\r\n}\r\n\r\n.is-more-filter-active {\r\n box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.35);\r\n}\r\n\r\n/* Row 3: Action bar */\r\n.j-list-search-header__actions {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 20px;\r\n}\r\n\r\n.actions-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n\r\n.actions-right {\r\n display: flex;\r\n align-items: center;\r\n gap: 16px;\r\n}\r\n\r\n.action-icon {\r\n cursor: pointer;\r\n color: #606266;\r\n transition: color 0.2s;\r\n}\r\n\r\n.action-icon:hover {\r\n color: #409eff;\r\n}\r\n\r\n/* More Filter Popover Footer */\r\n.more-filter-footer {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 8px;\r\n padding-top: 16px;\r\n margin-top: 16px;\r\n border-top: 1px solid #ebeef5;\r\n}\r\n\r\n/* Settings Drawer Footer */\r\n.settings-footer {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n}\r\n</style>\r\n","<template>\r\n <el-dialog\r\n v-model=\"visible\"\r\n :title=\"props.title\"\r\n width=\"900px\"\r\n :close-on-click-modal=\"false\"\r\n @open=\"handleOpen\"\r\n @close=\"handleClose\"\r\n >\r\n <!-- 上传区域 -->\r\n <el-card shadow=\"never\" class=\"j-import-upload-card\">\r\n <div class=\"j-import-upload-card-title\">导入 EXCEL</div>\r\n <el-divider style=\"margin: 10px 0\" />\r\n <div class=\"j-import-upload-row\">\r\n <el-upload\r\n accept=\".xlsx,.xls\"\r\n :auto-upload=\"false\"\r\n :show-file-list=\"false\"\r\n :on-change=\"handleFileChange\"\r\n >\r\n <el-button size=\"small\">点击上传</el-button>\r\n </el-upload>\r\n <el-link\r\n v-if=\"dataColumns.length\"\r\n type=\"primary\"\r\n class=\"j-import-no-wrap\"\r\n @click=\"handleDownloadTemplate\"\r\n >\r\n 下载导入模板.xlsx\r\n </el-link>\r\n </div>\r\n </el-card>\r\n\r\n <!-- 统计信息 + 确认导入 -->\r\n <el-row class=\"j-import-stats-row\" :gutter=\"20\" align=\"middle\">\r\n <el-col :span=\"18\">\r\n <el-row class=\"j-import-stats-cols\">\r\n <el-col :span=\"4\" class=\"j-import-stat-item\">\r\n <div class=\"j-import-stat-num\">{{ stats.total }}</div>\r\n <div class=\"j-import-stat-label\">导入数量</div>\r\n </el-col>\r\n <el-col :span=\"4\" class=\"j-import-stat-item\">\r\n <div class=\"j-import-stat-num\">{{ stats.fail }}</div>\r\n <div class=\"j-import-stat-label\">失败数量</div>\r\n </el-col>\r\n <el-col :span=\"4\" class=\"j-import-stat-item\">\r\n <div class=\"j-import-stat-num\">{{ stats.success }}</div>\r\n <div class=\"j-import-stat-label\">成功数量</div>\r\n </el-col>\r\n </el-row>\r\n </el-col>\r\n <el-col :span=\"6\" class=\"j-import-confirm-col\">\r\n <el-button\r\n type=\"primary\"\r\n size=\"small\"\r\n :loading=\"submitting\"\r\n :disabled=\"!renderData.length\"\r\n @click=\"handleConfirm\"\r\n >\r\n 确认导入\r\n </el-button>\r\n </el-col>\r\n </el-row>\r\n\r\n <!-- 数据表格 -->\r\n <el-table :data=\"renderData\" border size=\"small\" max-height=\"360\" class=\"j-import-data-table\">\r\n <el-table-column\r\n v-for=\"col in dataColumns\"\r\n :key=\"col.prop\"\r\n :prop=\"col.prop\"\r\n :label=\"col.label\"\r\n :min-width=\"120\"\r\n show-overflow-tooltip\r\n />\r\n <el-table-column label=\"状态\" width=\"110\" align=\"center\" fixed=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"row._status === -1\" class=\"j-import-status-fail\">\r\n {{ row._error || '创建失败' }}\r\n </span>\r\n <span v-else>{{ statusMap[row._status] }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" width=\"80\" align=\"center\" fixed=\"right\">\r\n <template #default=\"{ $index, row }\">\r\n <el-button\r\n v-if=\"row._status === 0\"\r\n size=\"small\"\r\n @click=\"handleDel($index)\"\r\n >\r\n 删除\r\n </el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n\r\n <template #footer>\r\n <el-button @click=\"handleClose\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed } from 'vue'\r\nimport { ElMessage, ElDialog, ElCard, ElDivider, ElUpload, ElButton, ElLink, ElRow, ElCol, ElTable, ElTableColumn } from 'element-plus'\r\nimport type { UploadFile } from 'element-plus'\r\nimport * as XLSX from 'xlsx'\r\nimport type { JImportExcelProps } from './types'\r\n\r\ndefineOptions({ name: 'JImportExcel' })\r\n\r\nconst props = withDefaults(defineProps<JImportExcelProps>(), {\r\n excludeFields: () => ['id', 'ctime', 'mtime'],\r\n title: 'Excel 批量导入',\r\n})\r\n\r\nconst emit = defineEmits<{\r\n success: []\r\n}>()\r\n\r\nconst visible = defineModel<boolean>({ default: false })\r\nconst submitting = ref(false)\r\nconst fieldMap = ref<Record<string, string>>({})\r\nconst renderData = ref<Record<string, any>[]>([])\r\nconst stats = ref({ total: 0, success: 0, fail: 0 })\r\n\r\nconst statusMap: Record<number, string> = {\r\n 0: '待创建',\r\n 1: '创建成功',\r\n 2: '创建中',\r\n [-1]: '创建失败',\r\n}\r\n\r\n/** 过滤后的表头列 */\r\nconst dataColumns = computed(() => {\r\n return Object.entries(fieldMap.value)\r\n .filter(([key]) => !props.excludeFields.includes(key))\r\n .map(([key, label]) => ({ id: key, label, prop: key }))\r\n})\r\n\r\n/** 弹窗打开时获取字段列表 */\r\nconst handleOpen = async () => {\r\n try {\r\n const res = await props.getFieldListApi()\r\n fieldMap.value = res.data.tableFieldsInfo ?? {}\r\n } catch {\r\n ElMessage.error('获取字段列表失败')\r\n }\r\n}\r\n\r\n/** 文件上传解析 */\r\nconst handleFileChange = (uploadFile: UploadFile) => {\r\n const raw = uploadFile.raw\r\n if (!raw) return\r\n\r\n const validTypes = [\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n 'application/vnd.ms-excel',\r\n ]\r\n if (!validTypes.includes(raw.type) && !raw.name.match(/\\.xlsx?$/i)) {\r\n ElMessage.warning('请上传 .xlsx 或 .xls 格式文件')\r\n return\r\n }\r\n\r\n const reader = new FileReader()\r\n reader.onload = (e) => {\r\n try {\r\n const workbook = XLSX.read(e.target!.result, { type: 'binary' })\r\n const wsName = workbook.SheetNames[0] as string\r\n const ws = workbook.Sheets[wsName]!\r\n const rows = XLSX.utils.sheet_to_json(ws, {\r\n header: 1,\r\n defval: '',\r\n }) as any[][]\r\n\r\n const dataRows = rows.slice(1).filter((row) => row.some((cell) => cell !== ''))\r\n\r\n if (!dataRows.length) {\r\n ElMessage.warning('文件内容为空')\r\n return\r\n }\r\n\r\n // 按后端字段顺序一一映射,空单元格由 defval 补 '',避免后续列顶上来\r\n const list: Record<string, any>[] = dataRows.map((row) => {\r\n const item: Record<string, any> = { _status: 0, _error: '' }\r\n dataColumns.value.forEach((col, index) => {\r\n item[col.prop] = row[index] !== undefined ? row[index] : ''\r\n })\r\n return item\r\n })\r\n\r\n renderData.value = list\r\n stats.value = { total: list.length, success: 0, fail: 0 }\r\n } catch {\r\n ElMessage.error('解析文件失败,请检查文件格式')\r\n }\r\n }\r\n reader.readAsBinaryString(raw)\r\n}\r\n\r\n/** 删除行 */\r\nconst handleDel = (idx: number) => {\r\n renderData.value.splice(idx, 1)\r\n stats.value.total = renderData.value.length\r\n}\r\n\r\n/** 确认导入 */\r\nconst handleConfirm = async () => {\r\n const data = renderData.value\r\n .filter((row) => row._status === 0)\r\n .map(({ _status, _error, ...rest }) => rest)\r\n\r\n if (!data.length) {\r\n ElMessage.warning('没有可导入的数据')\r\n return\r\n }\r\n\r\n submitting.value = true\r\n try {\r\n const res = await props.importApi(data)\r\n if (res.code === 1) {\r\n // 全部成功\r\n renderData.value.forEach((row) => {\r\n if (row._status === 0) row._status = 1\r\n })\r\n stats.value.success = renderData.value.filter((r) => r._status === 1).length\r\n ElMessage.success('导入成功')\r\n emit('success')\r\n } else {\r\n ElMessage.error(res.msg || '导入失败')\r\n }\r\n } catch {\r\n ElMessage.error('导入失败,请重试')\r\n } finally {\r\n submitting.value = false\r\n }\r\n}\r\n\r\n/** 下载导入模板 */\r\nconst handleDownloadTemplate = () => {\r\n try {\r\n const wb = XLSX.utils.book_new()\r\n const headers = dataColumns.value.map((col) => col.label)\r\n const tr: Record<string, string> = {}\r\n headers.forEach((h) => (tr[h] = ''))\r\n const ws = XLSX.utils.json_to_sheet([tr])\r\n XLSX.utils.book_append_sheet(wb, ws, '模板')\r\n XLSX.writeFile(wb, '导入模板.xlsx')\r\n } catch {\r\n ElMessage.error('模板下载失败')\r\n }\r\n}\r\n\r\nconst handleClose = () => {\r\n if (!submitting.value) {\r\n visible.value = false\r\n renderData.value = []\r\n stats.value = { total: 0, success: 0, fail: 0 }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.j-import-upload-card {\r\n margin-bottom: 16px;\r\n}\r\n.j-import-upload-card-title {\r\n font-size: 14px;\r\n color: #606266;\r\n}\r\n.j-import-upload-row {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n}\r\n.j-import-no-wrap {\r\n white-space: nowrap;\r\n}\r\n.j-import-stats-row {\r\n margin: 12px 0;\r\n}\r\n.j-import-stats-cols {\r\n text-align: center;\r\n line-height: 1.5;\r\n}\r\n.j-import-stat-item {\r\n padding: 0 8px;\r\n}\r\n.j-import-stat-num {\r\n font-size: 20px;\r\n}\r\n.j-import-stat-label {\r\n font-size: 12px;\r\n color: #909399;\r\n}\r\n.j-import-confirm-col {\r\n text-align: right;\r\n padding-top: 10px;\r\n}\r\n.j-import-data-table {\r\n margin-top: 10px;\r\n}\r\n.j-import-status-fail {\r\n color: #f56c6c;\r\n font-size: 12px;\r\n}\r\n</style>\r\n","<template>\r\n <!-- 有子菜单:渲染 el-sub-menu -->\r\n <el-sub-menu\r\n v-if=\"menuItem.children && menuItem.children.length > 0\"\r\n :index=\"menuIndex\"\r\n :class=\"[\r\n `j-sidebar__depth-${depth}`,\r\n { 'j-sidebar-item--active-parent': isActiveParent },\r\n ]\"\r\n >\r\n <template #title>\r\n <JIconRender v-if=\"menuItem.icon && depth === 0\" :icon=\"menuItem.icon\" />\r\n <span class=\"j-sidebar__menu-item-title\">{{ menuItem.title || menuItem.name }}</span>\r\n </template>\r\n <!-- 递归渲染子菜单 -->\r\n <JSideMenuItem\r\n v-for=\"child in menuItem.children\"\r\n :key=\"child.path\"\r\n :menu-item=\"child\"\r\n :is-collapse=\"isCollapse\"\r\n :depth=\"depth + 1\"\r\n :active-index=\"activeIndex\"\r\n @menu-click=\"(item) => emit('menu-click', item)\"\r\n />\r\n </el-sub-menu>\r\n\r\n <!-- 无子菜单:渲染 el-menu-item -->\r\n <el-menu-item\r\n v-else\r\n :index=\"menuIndex\"\r\n :class=\"[\r\n `j-sidebar__depth-${depth}`,\r\n { 'j-sidebar-item--active': isActive },\r\n ]\"\r\n @click=\"handleClick\"\r\n >\r\n <JIconRender v-if=\"menuItem.icon && depth === 0\" :icon=\"menuItem.icon\" />\r\n <template #title>\r\n <span>{{ menuItem.title || menuItem.name }}</span>\r\n </template>\r\n </el-menu-item>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport type { SidebarMenuItem } from './types'\r\nimport { ElSubMenu, ElMenuItem } from 'element-plus'\r\nimport { JIconRender } from '../JIconRender'\r\n\r\ndefineOptions({\r\n name: 'JSideMenuItem'\r\n})\r\n\r\ninterface Props {\r\n menuItem: SidebarMenuItem\r\n isCollapse?: boolean\r\n depth?: number\r\n /** 已归一化的当前激活 index(与 menuIndex 同规则) */\r\n activeIndex?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n depth: 0,\r\n activeIndex: '',\r\n})\r\n\r\nconst emit = defineEmits<{\r\n 'menu-click': [item: SidebarMenuItem]\r\n}>()\r\n\r\n/**\r\n * el-menu 的 index 必须与 vue-router 的 path(总是以 / 开头)一致,\r\n * 否则 default-active 对不上、加不上 is-active。\r\n */\r\nconst normalizeMenuIndex = (path?: string) => {\r\n if (!path) return ''\r\n const raw = String(path).trim()\r\n if (!raw) return ''\r\n if (/^https?:\\/\\//i.test(raw)) return raw\r\n let p = raw.split('?')[0]?.split('#')[0] || raw\r\n if (!p.startsWith('/')) p = `/${p}`\r\n if (p.length > 1 && p.endsWith('/')) p = p.slice(0, -1)\r\n return p\r\n}\r\n\r\nconst menuIndex = computed(() => normalizeMenuIndex(props.menuItem.path))\r\n\r\nconst isActive = computed(\r\n () => !!props.activeIndex && menuIndex.value === props.activeIndex,\r\n)\r\n\r\n/** 子树是否包含当前激活项(父级标题高亮) */\r\nconst isActiveParent = computed(() => {\r\n if (!props.activeIndex || !props.menuItem.children?.length) return false\r\n const walk = (items: SidebarMenuItem[]): boolean =>\r\n items.some((item) => {\r\n if (item.children?.length) return walk(item.children)\r\n return normalizeMenuIndex(item.path) === props.activeIndex\r\n })\r\n return walk(props.menuItem.children)\r\n})\r\n\r\nconst handleClick = () => {\r\n emit('menu-click', props.menuItem)\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.j-sidebar__menu-item-title {\r\n padding: 0 10px;\r\n}\r\n\r\n/* 二级菜单:灰色标题,作为分类标签(激活态不覆盖) */\r\n.j-sidebar__depth-1 > :deep(.el-sub-menu__title) {\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n\r\n.j-sidebar__depth-1.el-menu-item:not(.is-active):not(.j-sidebar-item--active) {\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n\r\n.j-sidebar__depth-1.el-menu-item.is-active,\r\n.j-sidebar__depth-1.el-menu-item.j-sidebar-item--active {\r\n color: var(--el-color-primary, #409eff);\r\n font-size: 13px;\r\n}\r\n\r\n/* 三级菜单:文字稍大 */\r\n.j-sidebar__depth-2.el-menu-item {\r\n font-size: 15px;\r\n}\r\n\r\n.j-sidebar__depth-2.el-menu-item.is-active,\r\n.j-sidebar__depth-2.el-menu-item.j-sidebar-item--active {\r\n color: var(--el-color-primary, #409eff);\r\n}\r\n</style>\r\n","<template>\r\n <div\r\n :class=\"['j-sidebar', innerCollapsed ? 'j-sidebar--collapsed' : 'j-sidebar--expanded']\"\r\n :style=\"{ width: innerCollapsed ? `${collapsedWidth}px` : `${expandedWidth}px` }\"\r\n >\r\n <!-- Logo 区域 -->\r\n <div class=\"j-sidebar__logo\">\r\n <slot name=\"logo\" :collapsed=\"innerCollapsed\">\r\n <h2 class=\"j-sidebar__title\">\r\n {{ innerCollapsed ? (collapsedTitle || title?.charAt(0) || '') : title }}\r\n </h2>\r\n </slot>\r\n </div>\r\n\r\n <!-- 菜单区域 -->\r\n <div class=\"j-sidebar__menu-wrapper\">\r\n <!--\r\n resolvedActiveMenu:把宿主传入的 activeMenu(多为 route.path)\r\n 解析成与 menuItem.path 一致的 index;同时下发 active-index 给菜单项,\r\n 用自有 class 高亮,不完全依赖 el-menu 的 is-active。\r\n\r\n 注意:不要把 activeMenu 写进 el-menu 的 key,否则每次切路由都会整棵菜单\r\n 销毁重建,父级会闪一下展开/收起。key 只随「菜单结构」变化。\r\n -->\r\n <el-menu\r\n :key=\"menusStructureKey\"\r\n :default-active=\"resolvedActiveMenu\"\r\n :default-openeds=\"defaultOpeneds\"\r\n class=\"j-sidebar__menu\"\r\n :router=\"router\"\r\n :collapse=\"innerCollapsed\"\r\n :collapse-transition=\"false\"\r\n >\r\n <JSideMenuItem\r\n v-for=\"route in menus\"\r\n :key=\"route.path\"\r\n :menu-item=\"route\"\r\n :is-collapse=\"innerCollapsed\"\r\n :active-index=\"resolvedActiveMenu\"\r\n @menu-click=\"(item) => emit('menu-click', item)\"\r\n />\r\n </el-menu>\r\n </div>\r\n\r\n <!-- 底部折叠按钮 -->\r\n <div class=\"j-sidebar__footer\">\r\n <slot name=\"footer\" :collapsed=\"innerCollapsed\" :toggle=\"toggleCollapse\">\r\n <button\r\n class=\"j-sidebar__collapse-btn\"\r\n @click=\"toggleCollapse\"\r\n >\r\n <JIconRender :icon=\"innerCollapsed ? 'mdi:chevron-right' : 'mdi:chevron-left'\" />\r\n </button>\r\n </slot>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { ElMenu } from 'element-plus'\r\nimport type { SidebarMenuItem } from './types'\r\nimport JSideMenuItem from './JSideMenuItem.vue'\r\nimport { JIconRender } from '../JIconRender'\r\n\r\ndefineOptions({\r\n name: 'JSidebar'\r\n})\r\n\r\ninterface Props {\r\n menus: SidebarMenuItem[]\r\n activeMenu?: string\r\n title?: string\r\n collapsedTitle?: string\r\n collapsed?: boolean\r\n collapsedWidth?: number\r\n expandedWidth?: number\r\n router?: boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n activeMenu: '',\r\n title: '',\r\n collapsedTitle: '',\r\n collapsed: false,\r\n collapsedWidth: 80,\r\n expandedWidth: 200,\r\n router: true,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n 'update:collapsed': [value: boolean]\r\n 'menu-click': [item: SidebarMenuItem]\r\n}>()\r\n\r\nconst innerCollapsed = ref(props.collapsed)\r\n\r\nwatch(() => props.collapsed, (val) => {\r\n innerCollapsed.value = val\r\n})\r\n\r\nconst toggleCollapse = () => {\r\n innerCollapsed.value = !innerCollapsed.value\r\n emit('update:collapsed', innerCollapsed.value)\r\n}\r\n\r\n/** 统一 path 形态,便于 route.path 与菜单 path 比较 */\r\nconst normalizePath = (path?: string) => {\r\n if (!path) return ''\r\n let p = String(path).trim()\r\n if (!p) return ''\r\n if (/^https?:\\/\\//i.test(p)) return p\r\n p = p.split('?')[0]?.split('#')[0] || p\r\n if (!p.startsWith('/')) p = `/${p}`\r\n if (p.length > 1 && p.endsWith('/')) p = p.slice(0, -1)\r\n return p\r\n}\r\n\r\n/** 收集叶子菜单 path(有 children 的分组不作为激活目标) */\r\nconst collectLeafPaths = (items: SidebarMenuItem[], result: string[] = []) => {\r\n items.forEach((item) => {\r\n if (item.children && item.children.length > 0) {\r\n collectLeafPaths(item.children, result)\r\n } else if (item.path) {\r\n result.push(item.path)\r\n }\r\n })\r\n return result\r\n}\r\n\r\n/**\r\n * 把宿主 activeMenu(通常 route.path)解析成 el-menu 的 index:\r\n * 1. 精确匹配(normalize 后)\r\n * 2. 最长前缀匹配(详情页 /list/123 → 高亮 /list)\r\n */\r\nconst resolveActiveMenuIndex = (menus: SidebarMenuItem[], active?: string) => {\r\n const current = normalizePath(active)\r\n if (!current || !menus?.length) return current\r\n\r\n const leaves = collectLeafPaths(menus).map(normalizePath).filter(Boolean)\r\n if (!leaves.length) return current\r\n\r\n if (leaves.includes(current)) return current\r\n\r\n let best = ''\r\n leaves.forEach((np) => {\r\n if (!np || np === '/') return\r\n if (current === np || current.startsWith(`${np}/`)) {\r\n if (np.length > best.length) best = np\r\n }\r\n })\r\n return best || current\r\n}\r\n\r\nconst resolvedActiveMenu = computed(() =>\r\n resolveActiveMenuIndex(props.menus, props.activeMenu),\r\n)\r\n\r\n/**\r\n * 仅菜单数据本身变化时才重建 el-menu(例如切换顶部一级菜单导致 sideMenus 换批)。\r\n * 切路由只改 default-active / active-index,父级展开状态保持,避免闪缩。\r\n */\r\nconst menusStructureKey = computed(() =>\r\n collectLeafPaths(props.menus).map(normalizePath).join('|'),\r\n)\r\n\r\n/** 收集激活叶子的祖先 path,作为 default-openeds,保证首屏父级已展开 */\r\nconst findAncestorIndexes = (\r\n items: SidebarMenuItem[],\r\n active: string,\r\n trail: string[] = [],\r\n): string[] | null => {\r\n for (const item of items) {\r\n const idx = normalizePath(item.path)\r\n if (item.children && item.children.length > 0) {\r\n const nextTrail = idx ? [...trail, idx] : trail\r\n const found = findAncestorIndexes(item.children, active, nextTrail)\r\n if (found) return found\r\n } else if (normalizePath(item.path) === active) {\r\n return trail\r\n }\r\n }\r\n return null\r\n}\r\n\r\nconst defaultOpeneds = computed(() => {\r\n const active = resolvedActiveMenu.value\r\n if (!active || !props.menus?.length) return [] as string[]\r\n return findAncestorIndexes(props.menus, active) || []\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.j-sidebar {\r\n position: relative;\r\n background-color: $color-white;\r\n box-shadow: 2px 0 6px rgba(0, 21, 41, 0.08);\r\n overflow-x: hidden;\r\n transition: width 0.3s ease-in-out;\r\n flex-shrink: 0;\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n}\r\n\r\n.j-sidebar__logo {\r\n padding: 0 $spacing-md;\r\n display: flex;\r\n align-items: center;\r\n height: 50px;\r\n flex-shrink: 0;\r\n}\r\n\r\n.j-sidebar__title {\r\n margin: 0;\r\n font-size: $font-size-lg;\r\n font-weight: bold;\r\n color: $color-primary;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n}\r\n\r\n.j-sidebar__menu-wrapper {\r\n flex: 1;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n}\r\n\r\n.j-sidebar__menu {\r\n border: none;\r\n width: 100%;\r\n background: transparent;\r\n\r\n // ---- 当前激活菜单(同时兼容 is-active 与自有 j-sidebar-item--active)----\r\n :deep(.el-menu-item) {\r\n position: relative;\r\n transition: background-color 0.15s ease, color 0.15s ease;\r\n\r\n &:hover {\r\n background-color: rgba($color-primary, 0.06);\r\n color: $color-primary;\r\n }\r\n\r\n &.is-active,\r\n &.j-sidebar-item--active {\r\n color: $color-primary !important;\r\n background-color: rgba($color-primary, 0.12) !important;\r\n font-weight: 600;\r\n\r\n &::before {\r\n content: '';\r\n position: absolute;\r\n left: 0;\r\n top: 6px;\r\n bottom: 6px;\r\n width: 3px;\r\n border-radius: 0 3px 3px 0;\r\n background-color: $color-primary;\r\n }\r\n\r\n .iconify,\r\n .el-icon {\r\n color: $color-primary;\r\n }\r\n }\r\n }\r\n\r\n :deep(.el-sub-menu.is-active > .el-sub-menu__title),\r\n :deep(.el-sub-menu.j-sidebar-item--active-parent > .el-sub-menu__title) {\r\n color: $color-primary !important;\r\n }\r\n\r\n :deep(.el-sub-menu__title:hover) {\r\n color: $color-primary;\r\n background-color: rgba($color-primary, 0.06);\r\n }\r\n}\r\n\r\n.j-sidebar--collapsed {\r\n :deep(.el-menu-item.is-active),\r\n :deep(.el-menu-item.j-sidebar-item--active) {\r\n background-color: rgba($color-primary, 0.12) !important;\r\n color: $color-primary !important;\r\n }\r\n}\r\n\r\n.j-sidebar__footer {\r\n flex-shrink: 0;\r\n padding: $spacing-sm;\r\n display: flex;\r\n}\r\n\r\n// 折叠状态:覆盖 el-menu 样式,图标+文字上下排列\r\n.j-sidebar--collapsed {\r\n :deep(.el-menu--collapse) {\r\n width: 100%;\r\n\r\n .el-menu-item,\r\n .el-sub-menu__title {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n height: auto;\r\n line-height: normal;\r\n padding: $spacing-sm 0 !important;\r\n\r\n .el-icon,\r\n .iconify {\r\n margin: 0;\r\n }\r\n\r\n span {\r\n display: block !important;\r\n visibility: visible !important;\r\n overflow: visible !important;\r\n width: auto !important;\r\n height: auto !important;\r\n font-size: $font-size-xs;\r\n margin-top: $spacing-xs;\r\n }\r\n }\r\n\r\n .el-sub-menu__icon-arrow {\r\n display: none;\r\n }\r\n }\r\n}\r\n\r\n.j-sidebar__collapse-btn {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: $spacing-sm;\r\n border: none;\r\n border-radius: $border-radius-base;\r\n background-color: transparent;\r\n color: $color-text-secondary;\r\n cursor: pointer;\r\n transition: $transition-fast;\r\n\r\n &:hover {\r\n background-color: $color-bg-base;\r\n color: $color-primary;\r\n }\r\n}\r\n</style>\r\n","<template>\n <div class=\"j-admin-layout\" :style=\"layoutStyle\">\n <JSidebar\n v-if=\"sideMenus.length > 0\"\n v-model:collapsed=\"innerCollapsed\"\n :menus=\"sideMenus\"\n :active-menu=\"activeMenu\"\n :title=\"title\"\n :collapsed-title=\"collapsedTitle\"\n :collapsed-width=\"sidebarCollapsedWidth\"\n :expanded-width=\"sidebarExpandedWidth\"\n :router=\"false\"\n @menu-click=\"handleSideMenuClick\"\n >\n <template v-if=\"$slots.sidebarFooter\" #footer=\"{ collapsed: sidebarCollapsed, toggle }\">\n <slot name=\"sidebarFooter\" :collapsed=\"sidebarCollapsed\" :toggle=\"toggle\" />\n </template>\n </JSidebar>\n\n <div class=\"j-admin-layout__right-panel\">\n <div class=\"j-admin-layout__header\">\n <div class=\"j-admin-layout__header-left\">\n <div v-if=\"sideMenus.length === 0\" class=\"j-admin-layout__logo\">\n <slot name=\"logo\">\n <h2>{{ logoTitle || title }}</h2>\n </slot>\n </div>\n\n <el-menu\n :key=\"topMenuKey\"\n mode=\"horizontal\"\n :default-active=\"activeTopMenu\"\n class=\"j-admin-layout__top-menu\"\n @select=\"handleTopMenuSelect\"\n >\n <el-menu-item\n v-for=\"menu in topMenus\"\n :key=\"menu.path\"\n :index=\"menu.path\"\n >\n <JIconRender v-if=\"menu.icon\" :icon=\"menu.icon\" class=\"j-admin-layout__top-menu-icon\" />\n <span>{{ menu.title || menu.name }}</span>\n </el-menu-item>\n </el-menu>\n </div>\n\n <div class=\"j-admin-layout__header-right\">\n <slot name=\"headerRight\" :username=\"username\">\n <el-dropdown v-if=\"showProfile || showLogout\">\n <span class=\"j-admin-layout__user\">\n {{ username }}\n <el-icon>\n <ArrowDown />\n </el-icon>\n </span>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item v-if=\"showProfile\" @click=\"emit('profile')\">\n {{ profileText }}\n </el-dropdown-item>\n <el-dropdown-item v-if=\"showLogout\" @click=\"emit('logout')\">\n {{ logoutText }}\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </slot>\n </div>\n </div>\n\n <div class=\"j-admin-layout__content-container\">\n <slot name=\"tabs\" />\n <div\n :class=\"[\n 'j-admin-layout__content',\n { 'j-admin-layout__content--scrollbar-hidden': hideContentScrollbar }\n ]\"\n >\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, ref } from 'vue'\nimport { ElMenu, ElMenuItem, ElDropdown, ElDropdownMenu, ElDropdownItem, ElIcon } from 'element-plus'\nimport { ArrowDown } from '@element-plus/icons-vue'\nimport { JSidebar, type SidebarMenuItem } from '../JSidebar'\nimport { JIconRender } from '../JIconRender'\nimport type { AdminLayoutMenuItem } from './types'\n\ndefineOptions({\n name: 'JAdminLayout'\n})\n\ninterface Props {\n topMenus: AdminLayoutMenuItem[]\n sideMenus: AdminLayoutMenuItem[]\n activeTopMenu?: string\n activeMenu?: string\n title?: string\n logoTitle?: string\n collapsedTitle?: string\n collapsed?: boolean\n username?: string\n profileText?: string\n logoutText?: string\n sidebarCollapsedWidth?: number\n sidebarExpandedWidth?: number\n headerHeight?: string\n contentPadding?: string\n contentBackground?: string\n headerBackground?: string\n showProfile?: boolean\n showLogout?: boolean\n hideContentScrollbar?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n activeTopMenu: '',\n activeMenu: '',\n title: '',\n logoTitle: '',\n collapsedTitle: '',\n collapsed: false,\n username: '',\n profileText: '个人资料',\n logoutText: '退出登录',\n sidebarCollapsedWidth: 80,\n sidebarExpandedWidth: 200,\n headerHeight: '50px',\n contentPadding: '10px',\n contentBackground: '#f0f2f5',\n headerBackground: '#ffffff',\n showProfile: true,\n showLogout: true,\n hideContentScrollbar: false,\n})\n\nconst emit = defineEmits<{\n 'update:collapsed': [value: boolean]\n 'top-menu-select': [path: string]\n 'side-menu-click': [item: SidebarMenuItem]\n profile: []\n logout: []\n}>()\n\nconst innerCollapsed = computed({\n get: () => props.collapsed,\n set: value => emit('update:collapsed', value),\n})\n\nconst layoutStyle = computed(() => ({\n '--j-admin-layout-header-height': props.headerHeight,\n '--j-admin-layout-content-padding': props.contentPadding,\n '--j-admin-layout-content-bg': props.contentBackground,\n '--j-admin-layout-header-bg': props.headerBackground,\n}))\n\n/**\n * el-menu 点击后会先改内部高亮;若父组件未更新 activeTopMenu(如跨系统 window.open),\n * 递增 syncKey 强制重挂载,回滚到 props 指定的选中态。\n */\nconst topMenuSyncKey = ref(0)\nconst topMenuKey = computed(\n () => `${props.activeTopMenu}__${topMenuSyncKey.value}`,\n)\n\nconst handleTopMenuSelect = (path: string) => {\n emit('top-menu-select', path)\n nextTick(() => {\n if (props.activeTopMenu !== path) {\n topMenuSyncKey.value += 1\n }\n })\n}\n\nconst handleSideMenuClick = (item: SidebarMenuItem) => {\n emit('side-menu-click', item)\n}\n</script>\n\n<style scoped lang=\"scss\">\n.j-admin-layout {\n width: 100vw;\n height: 100vh;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n}\n\n.j-admin-layout__right-panel {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background-color: var(--j-admin-layout-content-bg);\n}\n\n.j-admin-layout__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n background-color: var(--j-admin-layout-header-bg);\n box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);\n height: var(--j-admin-layout-header-height);\n flex-shrink: 0;\n z-index: 100;\n}\n\n.j-admin-layout__header-left {\n display: flex;\n align-items: center;\n flex: 1;\n height: 100%;\n min-width: 0;\n}\n\n.j-admin-layout__logo {\n padding: 0 $spacing-md;\n display: flex;\n align-items: center;\n height: var(--j-admin-layout-header-height);\n flex-shrink: 0;\n}\n\n.j-admin-layout__logo h2 {\n margin: 0;\n font-size: $font-size-lg;\n font-weight: bold;\n color: $color-primary;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.j-admin-layout__top-menu {\n flex: 1;\n height: var(--j-admin-layout-header-height);\n border-bottom: none;\n min-width: 0;\n}\n\n.j-admin-layout__top-menu-icon {\n margin-right: $spacing-xs;\n}\n\n.j-admin-layout__header-right {\n display: flex;\n align-items: center;\n gap: $spacing-md;\n padding-right: $spacing-md;\n flex-shrink: 0;\n}\n\n.j-admin-layout__user {\n cursor: pointer;\n display: flex;\n align-items: center;\n color: $color-text-regular;\n}\n\n.j-admin-layout__user:hover {\n color: $color-primary;\n}\n\n.j-admin-layout__content-container {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n background-color: var(--j-admin-layout-content-bg);\n}\n\n.j-admin-layout__content {\n padding: var(--j-admin-layout-content-padding);\n flex: 1;\n overflow: auto;\n}\n\n.j-admin-layout__content--scrollbar-hidden {\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n}\n</style>\n","import type { App, InjectionKey } from 'vue'\r\nimport { inject } from 'vue'\r\nimport type { JProductRequestFn } from './types'\r\n\r\n/** provide/inject 用的 key,业务方一般无需直接使用 */\r\nexport const J_PRODUCT_REQUEST_KEY: InjectionKey<JProductRequestFn> = Symbol('J_PRODUCT_REQUEST')\r\n\r\n/**\r\n * 在应用入口注入 request(推荐,全项目只需一次)。\r\n *\r\n * @example\r\n * ```ts\r\n * import { createApp } from 'vue'\r\n * import request from '@/api'\r\n * import { provideProductRequest } from 'jgy-public-component'\r\n *\r\n * const app = createApp(App)\r\n * provideProductRequest(app, (config) => request(config))\r\n * ```\r\n */\r\nexport function provideProductRequest(app: App, request: JProductRequestFn) {\r\n app.provide(J_PRODUCT_REQUEST_KEY, request)\r\n}\r\n\r\n/**\r\n * 在 setup 中读取全局注入的 request(必须在 setup 同步阶段调用 inject)。\r\n */\r\nexport function useInjectedProductRequest(): JProductRequestFn | null {\r\n return inject(J_PRODUCT_REQUEST_KEY, null)\r\n}\r\n\r\n/**\r\n * 解析最终 request:prop 优先,否则用全局 provide。\r\n * 可在 setup 外调用,但需把 setup 阶段拿到的 injected 传进来。\r\n */\r\nexport function resolveProductRequest(\r\n propRequest?: JProductRequestFn | null,\r\n injectedRequest?: JProductRequestFn | null,\r\n): JProductRequestFn {\r\n const request = propRequest ?? injectedRequest ?? null\r\n if (!request) {\r\n throw new Error(\r\n '[JProductDetailDialog] 缺少 request:请在 main.ts 调用 provideProductRequest(app, request),或给组件传入 :request=\"request\"',\r\n )\r\n }\r\n return request\r\n}\r\n","<template>\n <el-dialog\n :model-value=\"visible\"\n title=\"查看产品\"\n width=\"1200px\"\n top=\"4vh\"\n append-to-body\n destroy-on-close\n :close-on-click-modal=\"false\"\n @update:model-value=\"(v: boolean) => emit('update:visible', v)\"\n >\n <div v-loading=\"loading\" class=\"pdd-body\">\n <template v-if=\"detail\">\n <!-- ===== 基本信息 ===== -->\n <div class=\"pdd-title\">基本信息</div>\n <el-descriptions :column=\"3\" border size=\"small\">\n <el-descriptions-item :label=\"isSpu ? '中文款式' : '中文品名'\">{{ fmt(nameCn) }}</el-descriptions-item>\n <el-descriptions-item :label=\"isSpu ? '英文款式' : '英文品名'\">{{ fmt(nameEn) }}</el-descriptions-item>\n <el-descriptions-item :label=\"isSpu ? 'SPU' : 'SKU'\">{{ fmt(mainCode) }}</el-descriptions-item>\n <el-descriptions-item label=\"产品类型\">{{ productTypeLabel }}</el-descriptions-item>\n <el-descriptions-item label=\"采购公司\">{{ fmt(peNames) }}</el-descriptions-item>\n <el-descriptions-item label=\"状态\">{{ fmt(statusName) }}</el-descriptions-item>\n <el-descriptions-item label=\"品类\">{{ fmt(basic.category_path_name || basic.category_name) }}</el-descriptions-item>\n <el-descriptions-item label=\"品牌\">{{ fmt(brandName) }}</el-descriptions-item>\n <el-descriptions-item label=\"单位\">{{ fmt(unitName) }}</el-descriptions-item>\n <el-descriptions-item label=\"产品标签\">\n <template v-if=\"tagList.length\">\n <el-tag\n v-for=\"t in tagList\"\n :key=\"t.code\"\n size=\"small\"\n class=\"pdd-tag\"\n :style=\"t.color ? { backgroundColor: t.color, borderColor: t.color, color: '#fff' } : {}\"\n >{{ t.name }}</el-tag>\n </template>\n <template v-else>—</template>\n </el-descriptions-item>\n <el-descriptions-item label=\"材质\">{{ fmt(basic.material) }}</el-descriptions-item>\n <el-descriptions-item label=\"型号\">{{ fmt(basic.product_model) }}</el-descriptions-item>\n <el-descriptions-item label=\"开发员\">{{ fmt(basic.develop_leader_name || basic.develop_user) }}</el-descriptions-item>\n <el-descriptions-item label=\"采购员\">{{ fmt(basic.purchase_leader_name || basic.purchase_user) }}</el-descriptions-item>\n <el-descriptions-item label=\"产品运营\">{{ fmt(basic.sales_leader_name || basic.sales_user) }}</el-descriptions-item>\n <el-descriptions-item v-if=\"!isSpu\" label=\"关联SPU\">{{ fmt(basic.spu_code) }}</el-descriptions-item>\n <el-descriptions-item v-if=\"!isSpu\" label=\"产品属性\" :span=\"2\">{{ fmt(skuAttrText) }}</el-descriptions-item>\n <el-descriptions-item label=\"附件\" :span=\"3\">\n <template v-if=\"basicAttachments.length\">\n <a\n v-for=\"(f, i) in basicAttachments\"\n :key=\"i\"\n :href=\"f.url\"\n target=\"_blank\"\n class=\"pdd-file\"\n >{{ f.name }}</a>\n </template>\n <template v-else>—</template>\n </el-descriptions-item>\n <el-descriptions-item label=\"详细描述\" :span=\"3\">\n <div v-if=\"hasDesc\" class=\"pdd-rich\" v-html=\"basic.product_desc\"></div>\n <template v-else>—</template>\n </el-descriptions-item>\n </el-descriptions>\n\n <!-- ===== 产品组成(组合产品 20) ===== -->\n <template v-if=\"productType === '20'\">\n <div class=\"pdd-title\">产品组成</div>\n <el-descriptions :column=\"3\" border size=\"small\">\n <el-descriptions-item label=\"单位加工费\">\n {{ bindSku.unit_process_cost != null && bindSku.unit_process_cost !== '' ? `${bindSku.unit_process_cost} ${bindSku.unit_process_currency_code || ''}` : '—' }}\n </el-descriptions-item>\n <el-descriptions-item label=\"加工备注\" :span=\"2\">{{ fmt(bindSku.unit_process_remark) }}</el-descriptions-item>\n </el-descriptions>\n <el-table :data=\"bindSkuList\" border size=\"small\" class=\"pdd-table\">\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\n <template #default=\"{ row }\">\n <el-image\n v-if=\"row.image || row.product_image\"\n :src=\"row.image || row.product_image\"\n :preview-src-list=\"[row.image || row.product_image]\"\n preview-teleported\n fit=\"cover\"\n class=\"pdd-thumb\"\n />\n <span v-else>—</span>\n </template>\n </el-table-column>\n <el-table-column label=\"品名\" prop=\"product_name\" min-width=\"140\" show-overflow-tooltip />\n <el-table-column label=\"SKU\" prop=\"sku_code\" min-width=\"120\" show-overflow-tooltip />\n <el-table-column label=\"单位\" min-width=\"70\">\n <template #default=\"{ row }\">{{ fmt(row.unit || row.unit_name) }}</template>\n </el-table-column>\n <el-table-column label=\"数量\" min-width=\"70\">\n <template #default=\"{ row }\">{{ fmt(row.quantity ?? row.sku_quantity) }}</template>\n </el-table-column>\n <el-table-column label=\"品类\" prop=\"category_path_name\" min-width=\"120\" show-overflow-tooltip />\n <el-table-column label=\"型号\" min-width=\"90\">\n <template #default=\"{ row }\">{{ fmt(row.model_no || row.product_model) }}</template>\n </el-table-column>\n <el-table-column label=\"材质\" prop=\"material\" min-width=\"90\" show-overflow-tooltip />\n <el-table-column label=\"单品尺寸\" min-width=\"140\">\n <template #default=\"{ row }\">{{ dimText(row.spec_info?.length, row.spec_info?.width, row.spec_info?.height, row.spec_info?.height_unit || 'cm') }}</template>\n </el-table-column>\n <el-table-column label=\"净重\" min-width=\"80\">\n <template #default=\"{ row }\">{{ weightText(row.spec_info?.net_weight ?? row.net_weight, row.spec_info?.product_unit) }}</template>\n </el-table-column>\n <el-table-column label=\"毛重\" min-width=\"80\">\n <template #default=\"{ row }\">{{ weightText(row.spec_info?.gross_weight ?? row.gross_weight, row.spec_info?.product_unit) }}</template>\n </el-table-column>\n </el-table>\n </template>\n\n <!-- ===== 款式属性(多属性产品 30) ===== -->\n <template v-if=\"isSpu\">\n <div class=\"pdd-title\">款式属性</div>\n <el-table :data=\"styleAttrs\" border size=\"small\" class=\"pdd-table\">\n <el-table-column label=\"属性\" prop=\"attr_name\" width=\"160\" />\n <el-table-column label=\"属性值\">\n <template #default=\"{ row }\">\n <el-tag v-for=\"c in row.childs || []\" :key=\"c.attr_value_code\" size=\"small\" class=\"pdd-tag\">\n {{ c.attr_value_name }}\n </el-tag>\n </template>\n </el-table-column>\n </el-table>\n <div class=\"pdd-subtitle\">关联产品信息</div>\n <el-table :data=\"skuVariants\" border size=\"small\" class=\"pdd-table\">\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\n <template #default=\"{ row }\">\n <el-image\n v-if=\"row.main_image\"\n :src=\"row.main_image\"\n :preview-src-list=\"[row.main_image]\"\n preview-teleported\n fit=\"cover\"\n class=\"pdd-thumb\"\n />\n <span v-else>—</span>\n </template>\n </el-table-column>\n <el-table-column label=\"SKU\" prop=\"sku_code\" min-width=\"130\" show-overflow-tooltip />\n <el-table-column label=\"中文品名\" prop=\"product_name\" min-width=\"150\" show-overflow-tooltip />\n <el-table-column label=\"英文品名\" min-width=\"150\" show-overflow-tooltip>\n <template #default=\"{ row }\">{{ fmt(row.product_name_en || row.product_en_name) }}</template>\n </el-table-column>\n <el-table-column\n v-for=\"attr in styleAttrs\"\n :key=\"attr.attr_code\"\n :label=\"attr.attr_name\"\n min-width=\"100\"\n >\n <template #default=\"{ row }\">{{ variantAttrText(row, attr) }}</template>\n </el-table-column>\n </el-table>\n </template>\n\n <!-- ===== 规格信息 ===== -->\n <div class=\"pdd-title\">规格信息</div>\n <el-descriptions :column=\"3\" border size=\"small\">\n <el-descriptions-item label=\"单品毛重\">{{ weightText(spec.gross_weight, spec.gross_weight_unit) }}</el-descriptions-item>\n <el-descriptions-item label=\"单品净重\">{{ weightText(spec.net_weight, spec.net_weight_unit) }}</el-descriptions-item>\n <el-descriptions-item label=\"包装重\">{{ weightText(spec.tare_weight, spec.tare_weight_unit) }}</el-descriptions-item>\n <el-descriptions-item label=\"单品尺寸\">{{ dimText(spec.length, spec.width, spec.height) }}</el-descriptions-item>\n <el-descriptions-item label=\"包装尺寸\" :span=\"2\">{{ dimText(spec.tare_length, spec.tare_width, spec.tare_height) }}</el-descriptions-item>\n </el-descriptions>\n <template v-if=\"specBoxList.length\">\n <div class=\"pdd-subtitle\">装箱规格</div>\n <el-table :data=\"specBoxList\" border size=\"small\" class=\"pdd-table\">\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\n <el-table-column label=\"箱规名称\" prop=\"box_name\" min-width=\"130\" show-overflow-tooltip />\n <el-table-column label=\"单箱数量\" min-width=\"90\">\n <template #default=\"{ row }\">{{ row.box_quantity != null ? `${row.box_quantity} pcs` : '—' }}</template>\n </el-table-column>\n <el-table-column label=\"单箱重量\" min-width=\"100\">\n <template #default=\"{ row }\">{{ weightText(row.one_box_weight, row.one_box_unit) }}</template>\n </el-table-column>\n <el-table-column label=\"箱子重量\" min-width=\"100\">\n <template #default=\"{ row }\">{{ weightText(row.box_weight, row.box_unit) }}</template>\n </el-table-column>\n <el-table-column label=\"外箱尺寸\" min-width=\"150\">\n <template #default=\"{ row }\">{{ dimText(row.box_length, row.box_width, row.box_height) }}</template>\n </el-table-column>\n <el-table-column label=\"首选\" width=\"70\" align=\"center\">\n <template #default=\"{ row }\">\n <el-tag v-if=\"Number(row.is_preferred) === 1\" size=\"small\" type=\"success\">首选</el-tag>\n <span v-else>—</span>\n </template>\n </el-table-column>\n </el-table>\n </template>\n\n <!-- ===== 采购信息(单品/组合产品) ===== -->\n <template v-if=\"!isSpu\">\n <div class=\"pdd-title\">采购信息</div>\n <el-descriptions :column=\"3\" border size=\"small\">\n <el-descriptions-item label=\"采购成本\">{{ fmt(purchase.purchase_cost) }}</el-descriptions-item>\n <el-descriptions-item label=\"采购交期\">{{ purchase.delivery_day != null && purchase.delivery_day !== '' ? `${purchase.delivery_day} 天` : '—' }}</el-descriptions-item>\n <el-descriptions-item label=\"采购税率\">{{ purchase.tax_rate != null && purchase.tax_rate !== '' ? `${purchase.tax_rate} %` : '—' }}</el-descriptions-item>\n <el-descriptions-item label=\"采购备注\" :span=\"3\">{{ fmt(purchase.purchase_remark) }}</el-descriptions-item>\n </el-descriptions>\n <template v-if=\"supplierList.length\">\n <div class=\"pdd-subtitle\">报价信息</div>\n <div v-for=\"(sup, si) in supplierList\" :key=\"si\" class=\"pdd-supplier\">\n <div class=\"pdd-supplier-head\">\n <span class=\"pdd-supplier-name\">{{ sup.supplier_name || sup.supplier_code || '—' }}</span>\n <el-tag v-if=\"Number(sup.is_preferred) === 1\" size=\"small\" type=\"success\">首选</el-tag>\n <span class=\"pdd-supplier-meta\">预计交期:{{ sup.delivery_day != null && sup.delivery_day !== '' ? `${sup.delivery_day} 天` : '—' }}</span>\n <span class=\"pdd-supplier-meta\">报价备注:{{ fmt(sup.purchase_remark ?? sup.remark) }}</span>\n </div>\n <el-table :data=\"supplierQuoteRows(sup)\" border size=\"small\">\n <el-table-column label=\"币种\" prop=\"currency\" width=\"80\" />\n <el-table-column label=\"含税\" width=\"70\" align=\"center\">\n <template #default=\"{ row }\">{{ Number(row.is_tax) === 1 ? '是' : '否' }}</template>\n </el-table-column>\n <el-table-column label=\"税率\" width=\"80\">\n <template #default=\"{ row }\">{{ row.tax_rate != null && row.tax_rate !== '' ? `${row.tax_rate} %` : '—' }}</template>\n </el-table-column>\n <el-table-column label=\"采购数量 ≥\" min-width=\"100\">\n <template #default=\"{ row }\">{{ fmt(row.purchase_quantity) }}</template>\n </el-table-column>\n <el-table-column label=\"单价\" min-width=\"100\">\n <template #default=\"{ row }\">{{ fmt(row.purchase_price) }}</template>\n </el-table-column>\n <el-table-column label=\"含税单价\" min-width=\"100\">\n <template #default=\"{ row }\">{{ fmt(row.purchase_price_tax) }}</template>\n </el-table-column>\n </el-table>\n </div>\n </template>\n </template>\n\n <!-- ===== 产品图片(单品/组合产品) ===== -->\n <template v-if=\"!isSpu\">\n <div class=\"pdd-title\">产品图片</div>\n <el-descriptions :column=\"1\" border size=\"small\">\n <el-descriptions-item label=\"主图\">\n <el-image\n v-if=\"mainImage\"\n :src=\"mainImage\"\n :preview-src-list=\"[mainImage]\"\n preview-teleported\n fit=\"cover\"\n class=\"pdd-img\"\n />\n <span v-else>—</span>\n </el-descriptions-item>\n <el-descriptions-item label=\"尺寸图\">\n <template v-if=\"sizeImages.length\">\n <el-image\n v-for=\"(img, i) in sizeImages\"\n :key=\"i\"\n :src=\"img\"\n :preview-src-list=\"sizeImages\"\n :initial-index=\"i\"\n preview-teleported\n fit=\"cover\"\n class=\"pdd-img\"\n />\n </template>\n <span v-else>—</span>\n </el-descriptions-item>\n <el-descriptions-item label=\"卖点图\">\n <template v-if=\"sellingPointImages.length\">\n <el-image\n v-for=\"(img, i) in sellingPointImages\"\n :key=\"i\"\n :src=\"img\"\n :preview-src-list=\"sellingPointImages\"\n :initial-index=\"i\"\n preview-teleported\n fit=\"cover\"\n class=\"pdd-img\"\n />\n </template>\n <span v-else>—</span>\n </el-descriptions-item>\n </el-descriptions>\n </template>\n\n <!-- ===== 申报信息 ===== -->\n <div class=\"pdd-title\">申报信息</div>\n <el-descriptions :column=\"3\" border size=\"small\">\n <el-descriptions-item label=\"中文申报名\">{{ fmt(declaration.declaration_name) }}</el-descriptions-item>\n <el-descriptions-item label=\"英文申报名\">{{ fmt(declaration.declaration_name_en) }}</el-descriptions-item>\n <el-descriptions-item label=\"中文材质\">{{ fmt(declaration.material) }}</el-descriptions-item>\n <el-descriptions-item label=\"英文材质\">{{ fmt(declaration.material_en) }}</el-descriptions-item>\n <el-descriptions-item label=\"中文用途\">{{ fmt(declaration.use) }}</el-descriptions-item>\n <el-descriptions-item label=\"英文用途\">{{ fmt(declaration.use_en) }}</el-descriptions-item>\n <el-descriptions-item label=\"中文功能\">{{ fmt(declaration.usage) }}</el-descriptions-item>\n <el-descriptions-item label=\"英文功能\">{{ fmt(declaration.usage_en) }}</el-descriptions-item>\n <el-descriptions-item label=\"申报价值\">\n {{ declaration.declaration_value != null && declaration.declaration_value !== '' ? `${declaration.declaration_value} ${declaration.declaration_currency_code || ''}` : '—' }}\n </el-descriptions-item>\n <el-descriptions-item label=\"海关编码\">{{ fmt(declaration.hs_code) }}</el-descriptions-item>\n <el-descriptions-item label=\"报关型号\">{{ fmt(declaration.declaration_model) }}</el-descriptions-item>\n <el-descriptions-item label=\"原产地\">{{ fmt(declaration.country_of_origin) }}</el-descriptions-item>\n <el-descriptions-item label=\"境内货源地\">{{ fmt(declaration.domestic_source_location) }}</el-descriptions-item>\n <el-descriptions-item label=\"申报单位\" :span=\"2\">{{ fmt(declarationUnitName) }}</el-descriptions-item>\n </el-descriptions>\n\n <!-- ===== 质检项 ===== -->\n <div class=\"pdd-title\">质检项</div>\n <el-descriptions :column=\"3\" border size=\"small\">\n <el-descriptions-item label=\"质检方式\">{{ qcMethodLabel }}</el-descriptions-item>\n <el-descriptions-item label=\"模板\" :span=\"2\">{{ fmt(qc.template_name || qc.template_id || qc.qc_temp_id) }}</el-descriptions-item>\n <el-descriptions-item label=\"图片\" :span=\"3\">\n <template v-if=\"qcImages.length\">\n <el-image\n v-for=\"(img, i) in qcImages\"\n :key=\"i\"\n :src=\"img\"\n :preview-src-list=\"qcImages\"\n :initial-index=\"i\"\n preview-teleported\n fit=\"cover\"\n class=\"pdd-img\"\n />\n </template>\n <span v-else>—</span>\n </el-descriptions-item>\n <el-descriptions-item label=\"附件\" :span=\"3\">\n <template v-if=\"qcAttachments.length\">\n <a\n v-for=\"(f, i) in qcAttachments\"\n :key=\"i\"\n :href=\"f.url\"\n target=\"_blank\"\n class=\"pdd-file\"\n >{{ f.name }}</a>\n </template>\n <span v-else>—</span>\n </el-descriptions-item>\n </el-descriptions>\n <template v-if=\"qcCustomList.length\">\n <div class=\"pdd-subtitle\">自定义质检项</div>\n <el-table :data=\"qcCustomList\" border size=\"small\" class=\"pdd-table\">\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\n <el-table-column label=\"质检项\" prop=\"qc_item\" min-width=\"150\" show-overflow-tooltip />\n <el-table-column label=\"质检内容\" prop=\"qc_content\" min-width=\"250\" show-overflow-tooltip />\n </el-table>\n </template>\n\n <!-- ===== 自定义属性 ===== -->\n <template v-if=\"customAttrList.length\">\n <div class=\"pdd-title\">自定义属性</div>\n <el-table :data=\"customAttrList\" border size=\"small\" class=\"pdd-table\">\n <el-table-column label=\"属性名称\" prop=\"attr_name\" width=\"200\" show-overflow-tooltip />\n <el-table-column label=\"属性值\">\n <template #default=\"{ row }\">{{ customAttrValueText(row) }}</template>\n </el-table-column>\n </el-table>\n </template>\n </template>\n <el-empty v-else-if=\"!loading\" description=\"暂无数据\" />\n </div>\n <template #footer>\n <el-button @click=\"emit('update:visible', false)\">关闭</el-button>\n </template>\n </el-dialog>\n</template>\n\n<script lang=\"ts\">\n/**\n * JProductDetailDialog —— 产品详情弹窗(只读)\n *\n * 与项目解耦:request 由宿主注入(`@/api` 默认导出),\n * token / operator / baseURL 均由宿主拦截器处理。接口路径内置。\n *\n * 前置条件(宿主项目):\n * 1. 已安装 element-plus(peerDependency)\n * 2. vite proxy 已配置 `/bis-app` 转发到后端\n * 3. 后端提供同一套 bis 产品详情接口\n *\n * 用法(推荐 main.ts 全局注入后,页面无需再传 request):\n * provideProductRequest(app, (c) => request(c))\n * <JProductDetailDialog v-model:visible=\"visible\" :code=\"row.sku_code\" />\n * <JProductDetailDialog v-model:visible=\"visible\" type=\"spu\" :code=\"row.spu_code\" />\n * 或单页传入:\n * <JProductDetailDialog ... :request=\"request\" />\n */\nimport { ref } from 'vue'\nimport type {\n JProductRequestFn,\n JProductRequestConfig,\n JProductDetailDialogProps,\n} from './types'\nimport { resolveProductRequest, useInjectedProductRequest } from './request'\n\n// ---- 字典(模块级缓存:整个应用只请求一次,多个实例共享)----\nconst brandDict = ref<any[]>([])\nconst unitDict = ref<any[]>([])\nconst saleDict = ref<any[]>([])\nconst companyDict = ref<any[]>([])\nconst tagDict = ref<any[]>([])\nconst customAttrDict = ref<any[]>([])\n\nlet dictsLoaded = false\nlet dictsPromise: Promise<void> | null = null\n\nconst loadDicts = (request: JProductRequestFn): Promise<void> => {\n const post = (url: string, data: any): Promise<any> =>\n request({ url, method: 'post', data } as JProductRequestConfig)\n if (dictsLoaded) return Promise.resolve()\n if (dictsPromise) return dictsPromise\n dictsPromise = Promise.all([\n post('/bis-app/comm/productAttrValue/getAll', { pageSize: 999 }).then((res) => {\n if (res.code === 1) {\n brandDict.value = res.data?.brand || []\n unitDict.value = res.data?.unit || []\n saleDict.value = res.data?.sale || []\n }\n }).catch(() => { /* 展示走 _name 字段兜底,字典失败不阻断 */ }),\n post('/bis-app/comm/company/list', { pageSize: 999, subject_type: 'purchase' }).then((res) => {\n if (res.code === 1) companyDict.value = res.data?.list || res.data || []\n }).catch(() => { /* ignore */ }),\n post('/bis-app/comm/tagCategoryValue/list', { tag_code: 'PRODUCT_TAG', pageIndex: 1, pageSize: 999 }).then((res) => {\n if (res.code === 1) tagDict.value = res.data?.list || res.data || []\n }).catch(() => { /* ignore */ }),\n post('/bis-app/comm/customAttr/list', { pageIndex: 1, pageSize: 999 }).then((res) => {\n if (res.code === 1) customAttrDict.value = res.data?.list || res.data || []\n }).catch(() => { /* ignore */ }),\n ]).then(() => { dictsLoaded = true }).finally(() => { dictsPromise = null })\n return dictsPromise\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, watch } from 'vue'\nimport {\n ElDialog,\n ElDescriptions,\n ElDescriptionsItem,\n ElTag,\n ElTable,\n ElTableColumn,\n ElImage,\n ElEmpty,\n ElButton,\n ElMessage,\n vLoading,\n} from 'element-plus'\n// 类型已在上方 <script> 中统一 import(双 script 同作用域,避免 Duplicate identifier)\n\ndefineOptions({\n name: 'JProductDetailDialog',\n directives: { loading: vLoading },\n})\n\nconst props = withDefaults(defineProps<JProductDetailDialogProps>(), {\n visible: false,\n code: '',\n type: 'sku',\n id: undefined,\n request: undefined,\n})\n\nconst emit = defineEmits<{ 'update:visible': [boolean] }>()\n\n// inject 必须在 setup 同步阶段执行\nconst injectedRequest = useInjectedProductRequest()\n\n/** prop 优先,否则读 provideProductRequest 注入的全局 request */\nconst getRequest = (): JProductRequestFn =>\n resolveProductRequest(props.request, injectedRequest)\n\nconst post = (url: string, data: any): Promise<any> =>\n getRequest()({ url, method: 'post', data } as JProductRequestConfig)\n\nconst loading = ref(false)\nconst detail = ref<any>(null)\n\n// ---- 请求:弹窗打开时并行加载字典(缓存)+ 详情 ----\nconst fetchDetail = async () => {\n if (!props.code && props.id === undefined) return\n detail.value = null\n loadDicts(getRequest())\n const url = props.type === 'spu' ? '/bis-app/comm/spu/doDetail' : '/bis-app/comm/sku/doDetail'\n const params = props.type === 'spu'\n ? { id: props.id, spu_code: props.code }\n : { id: props.id, sku_code: props.code }\n loading.value = true\n try {\n const res = await post(url, params)\n if (res.code === 1 && res.data) {\n detail.value = res.data\n } else {\n ElMessage.error(res.msg || '获取详情失败')\n }\n } catch {\n ElMessage.error('获取详情失败')\n } finally {\n loading.value = false\n }\n}\n\nwatch(() => props.visible, (val) => {\n if (val) fetchDetail()\n})\n\n// ---- 数据分区(兼容详情接口嵌套结构与列表接口扁平结构)----\nconst basic = computed(() => detail.value?.basic_info ?? detail.value ?? {})\nconst spec = computed(() => detail.value?.spec_info ?? {})\nconst images = computed(() => detail.value?.images_info ?? detail.value?.image_info ?? {})\nconst purchase = computed(() => detail.value?.purchase_info ?? {})\nconst declaration = computed(() => detail.value?.declaration_info ?? {})\nconst qc = computed(() => detail.value?.qc_info ?? {})\nconst bindSku = computed(() => detail.value?.bind_sku_info ?? {})\nconst spuBindSku = computed(() => detail.value?.spu_bind_sku ?? {})\n\n// 装箱规格与供应商报价:详情接口在顶层,兼容嵌套位置\nconst specBoxList = computed<any[]>(() => detail.value?.spec_box_info ?? spec.value.spec_box_info ?? [])\nconst supplierList = computed<any[]>(() => detail.value?.sku_supplier ?? purchase.value.supplier_list ?? [])\n\nconst productType = computed(() => String(basic.value.product_type ?? (props.type === 'spu' ? '30' : '10')))\nconst isSpu = computed(() => productType.value === '30')\nconst productTypeLabel = computed(() => ({ '10': '单品', '20': '组合产品', '30': '多属性产品' } as Record<string, string>)[productType.value] || productType.value)\n\nconst nameCn = computed(() => (isSpu.value ? (basic.value.spu_name || basic.value.product_name) : basic.value.product_name))\nconst nameEn = computed(() => (isSpu.value ? (basic.value.spu_name_en || basic.value.product_name_en) : basic.value.product_name_en))\nconst mainCode = computed(() => (isSpu.value ? basic.value.spu_code : basic.value.sku_code))\n\n// ---- 归一化工具 ----\nconst normalizeStringArray = (v: any): string[] => {\n if (v == null || v === '') return []\n if (Array.isArray(v)) return v.map(String).filter(Boolean)\n if (typeof v === 'string') {\n const s = v.trim()\n if (!s) return []\n if (s.startsWith('[')) {\n try {\n const arr = JSON.parse(s)\n return Array.isArray(arr) ? arr.map(String).filter(Boolean) : []\n } catch { /* fallthrough */ }\n }\n return s.split(',').map((x) => x.trim()).filter(Boolean)\n }\n return [String(v)]\n}\n\nconst normalizeAttachments = (v: any): { name: string; url: string }[] => {\n let list: any[] = []\n if (Array.isArray(v)) list = v\n else if (typeof v === 'string' && v.trim()) {\n try {\n const arr = JSON.parse(v)\n list = Array.isArray(arr) ? arr : [v]\n } catch { list = [v] }\n }\n return list\n .map((it) => {\n if (typeof it === 'string') return { name: it.split('/').pop() || it, url: it }\n const url = it?.url || it?.file_url || it?.path || ''\n return { name: it?.name || it?.file_name || url.split('/').pop() || '附件', url }\n })\n .filter((f) => f.url)\n}\n\nconst fmt = (v: any) => (v == null || v === '' ? '—' : v)\nconst weightText = (v: any, unit?: string) => (v == null || v === '' ? '—' : `${v} ${unit || ''}`.trim())\nconst dimText = (l: any, w: any, h: any, unit = 'cm') => {\n if ([l, w, h].every((x) => x == null || x === '')) return '—'\n const p = (x: any) => (x == null || x === '' ? '—' : x)\n return `${p(l)} × ${p(w)} × ${p(h)} ${unit}`\n}\n\n// ---- 字段展示(优先详情返回的 _name 字段,字典映射兜底)----\nconst dictName = (list: any[], id: any): string => {\n if (id == null || id === '') return ''\n const hit = list.find((x) => String(x.id) === String(id))\n return hit?.attr_value_name || ''\n}\n\nconst brandName = computed(() => basic.value.brand_name || dictName(brandDict.value, basic.value.brand_id))\nconst unitName = computed(() => basic.value.unit_name || dictName(unitDict.value, basic.value.unit_id))\nconst statusName = computed(() =>\n basic.value.sale_status_name || basic.value.status_name || dictName(saleDict.value, basic.value.status)\n)\nconst declarationUnitName = computed(() =>\n declaration.value.declaration_unit_name || dictName(unitDict.value, declaration.value.declaration_unit_id) || declaration.value.declaration_unit_id\n)\n\nconst peNames = computed(() => {\n if (basic.value.pe_code_name) return basic.value.pe_code_name\n const codes = normalizeStringArray(basic.value.pe_codes)\n if (!codes.length) return ''\n return codes\n .map((c) => companyDict.value.find((x) => String(x.company_code) === String(c))?.company_name || c)\n .join('、')\n})\n\nconst tagList = computed(() =>\n normalizeStringArray(basic.value.tags).map((code) => {\n const hit = tagDict.value.find((t) => String(t.tag_value_code) === String(code))\n return { code, name: hit?.tag_value_name || code, color: hit?.tag_color || '' }\n })\n)\n\nconst skuAttrText = computed(() => {\n const attr = basic.value.sku_attr\n if (!attr || typeof attr !== 'object' || Array.isArray(attr)) return ''\n return Object.entries(attr).map(([k, v]) => `${k}: ${v}`).join(';')\n})\n\nconst basicAttachments = computed(() => normalizeAttachments(basic.value.att_files))\nconst hasDesc = computed(() => {\n const html = basic.value.product_desc || ''\n return String(html).replace(/<[^>]*>/g, '').trim().length > 0 || /<img/i.test(String(html))\n})\n\n// 图片\nconst mainImage = computed(() => images.value.main_image || detail.value?.product_image || '')\nconst sizeImages = computed(() => normalizeStringArray(images.value.size_images ?? detail.value?.size_images))\nconst sellingPointImages = computed(() => normalizeStringArray(images.value.selling_point_images))\n\n// 质检\nconst qcMethodLabel = computed(() =>\n ({ spot: '抽检', full: '全检', exempt: '免检' } as Record<string, string>)[qc.value.qc_method] || fmt(qc.value.qc_method)\n)\nconst qcImages = computed(() => normalizeStringArray(qc.value.images))\nconst qcAttachments = computed(() => normalizeAttachments(qc.value.att_files))\nconst qcCustomList = computed<any[]>(() => (Array.isArray(qc.value.qc_content) ? qc.value.qc_content : []))\n\n// 自定义属性\n// 详情里每行只有 custom_attr_id + 值(id),属性名和选项名需按 custom_attr_id 去字典匹配。\n// 字典项字段名与表单 allCustomAttrs 保持一致的多路兜底。\nconst dictAttrId = (item: any): string =>\n String(item.custom_attr_id ?? item.id ?? item.attr_id ?? item.attr_code ?? '').trim()\n\n// 解析字典项的选项列表 → [{id, name}](对齐表单 parseCustomAttrOptions)\nconst parseAttrOptions = (raw: any): { id: string; name: string }[] => {\n const list = Array.isArray(raw) ? raw : (raw != null && raw !== '' ? [raw] : [])\n const out: { id: string; name: string }[] = []\n for (const item of list) {\n if (typeof item === 'string') {\n item.split(/[,,、\\n]/).map((s) => s.trim()).filter(Boolean).forEach((name) => out.push({ id: '', name }))\n } else if (item && typeof item === 'object') {\n const name = String(item.attr_value ?? item.value ?? item.label ?? item.attr_value_name ?? item.name ?? '').trim()\n const id = String(item.id ?? item.attr_value_id ?? item.value_id ?? '')\n if (name) out.push({ id, name })\n }\n }\n return out\n}\n\n// custom_attr_id → 字典项\nconst customAttrDictMap = computed(() => {\n const m = new Map<string, any>()\n for (const d of customAttrDict.value) {\n const id = dictAttrId(d)\n if (id) m.set(id, d)\n }\n return m\n})\n\nconst customAttrList = computed<any[]>(() => {\n const info = detail.value?.custom_attr_info\n const list = info?.list ?? info\n const rows = Array.isArray(list) ? list : []\n return rows.map((row) => {\n const id = dictAttrId(row)\n const def = customAttrDictMap.value.get(id)\n return {\n ...row,\n custom_attr_id: id,\n // 属性名:详情自带优先,否则取字典\n attr_name: row.attr_name || def?.attr_name || id,\n options: parseAttrOptions(def?.attr_value ?? def?.options ?? row.options ?? row.attr_value),\n }\n })\n})\n\nconst customAttrValueText = (row: any): string => {\n const values = normalizeStringArray(row.custom_attr_value_id ?? row.custom_attr_value)\n if (!values.length) return '—'\n const options: any[] = row.options || []\n return values\n .map((v) => options.find((o) => (o.id && String(o.id) === String(v)) || String(o.name) === String(v))?.name || v)\n .join('、')\n}\n\n// 组合产品\nconst bindSkuList = computed<any[]>(() => bindSku.value.bind_sku_list ?? [])\n\n// SPU 款式属性 / SKU 变体\nconst styleAttrs = computed<any[]>(() => spuBindSku.value.sku_attr ?? [])\nconst skuVariants = computed<any[]>(() => spuBindSku.value.sku_list ?? [])\nconst variantAttrText = (row: any, attr: any): string => {\n const code = row.sku_attr?.[attr.attr_code]\n if (code == null || code === '') return '—'\n const child = (attr.childs || []).find((c: any) => String(c.attr_value_code) === String(code))\n return child?.attr_value_name || String(code)\n}\n\n// 供应商报价:币种组 × 阶梯 摊平成行\nconst supplierQuoteRows = (sup: any): any[] => {\n const rows: any[] = []\n for (const q of sup.supplier_quote || []) {\n for (const item of q.quote_list || []) {\n rows.push({\n currency: q.quote_currency_code,\n is_tax: q.is_tax,\n tax_rate: q.tax_rate,\n ...item,\n })\n }\n }\n return rows\n}\n</script>\n\n<style scoped>\n.pdd-body {\n min-height: 200px;\n max-height: 72vh;\n overflow-y: auto;\n padding-right: 4px;\n}\n\n.pdd-title {\n font-size: 15px;\n font-weight: 600;\n color: #303133;\n margin: 18px 0 10px;\n padding-left: 8px;\n border-left: 3px solid #409eff;\n}\n\n.pdd-title:first-child {\n margin-top: 0;\n}\n\n.pdd-subtitle {\n font-size: 13px;\n font-weight: 600;\n color: #606266;\n margin: 12px 0 8px;\n}\n\n.pdd-table {\n margin-bottom: 4px;\n}\n\n.pdd-tag {\n margin-right: 6px;\n margin-bottom: 2px;\n}\n\n.pdd-file {\n display: inline-block;\n margin-right: 14px;\n color: #409eff;\n text-decoration: none;\n}\n\n.pdd-file:hover {\n text-decoration: underline;\n}\n\n.pdd-img {\n width: 80px;\n height: 80px;\n margin-right: 8px;\n border-radius: 4px;\n border: 1px solid #e4e7ed;\n vertical-align: top;\n}\n\n.pdd-thumb {\n width: 40px;\n height: 40px;\n border-radius: 4px;\n}\n\n.pdd-rich {\n max-height: 300px;\n overflow-y: auto;\n}\n\n.pdd-rich :deep(img) {\n max-width: 100%;\n}\n\n.pdd-supplier {\n margin-bottom: 12px;\n border: 1px solid #e4e7ed;\n border-radius: 4px;\n padding: 10px;\n}\n\n.pdd-supplier-head {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 8px;\n font-size: 13px;\n}\n\n.pdd-supplier-name {\n font-weight: 600;\n color: #303133;\n}\n\n.pdd-supplier-meta {\n color: #909399;\n}\n</style>\n","import { defineStore } from 'pinia'\r\nimport { nextTick, ref } from 'vue'\r\n\r\nexport type ProductDetailType = 'sku' | 'spu'\r\n\r\n/**\r\n * 全局产品详情状态\r\n * 业务页:JSkuLink / store.open(code)\r\n * 宿主:ProductDetailHost 渲染 JProductDetailDialog\r\n */\r\nexport const useProductDetailStore = defineStore('jgyProductDetail', () => {\r\n const visible = ref(false)\r\n const code = ref('')\r\n const type = ref<ProductDetailType>('sku')\r\n\r\n async function open(skuCode: string, opts?: { type?: ProductDetailType }) {\r\n const c = String(skuCode ?? '').trim()\r\n if (!c || c === '-') return\r\n\r\n code.value = c\r\n type.value = opts?.type ?? 'sku'\r\n visible.value = false\r\n await nextTick()\r\n visible.value = true\r\n }\r\n\r\n function close() {\r\n visible.value = false\r\n }\r\n\r\n function reset() {\r\n visible.value = false\r\n code.value = ''\r\n type.value = 'sku'\r\n }\r\n\r\n return {\r\n visible,\r\n code,\r\n type,\r\n open,\r\n close,\r\n reset,\r\n }\r\n})\r\n","<template>\n <span\n v-if=\"hasCode\"\n class=\"j-sku-link\"\n @click.stop=\"handleClick\"\n >{{ displayText }}</span>\n <span v-else class=\"j-sku-link-empty\">{{ emptyText }}</span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useProductDetailStore } from './store'\nimport type { ProductDetailType } from './store'\n\ndefineOptions({ name: 'JSkuLink' })\n\nconst props = withDefaults(defineProps<{\n code?: string | null\n emptyText?: string\n /** sku 或 spu,默认 sku */\n type?: ProductDetailType\n}>(), {\n emptyText: '-',\n type: 'sku',\n})\n\nconst emit = defineEmits<{\n open: [code: string]\n}>()\n\nconst productDetailStore = useProductDetailStore()\n\nconst displayText = computed(() => {\n const value = String(props.code ?? '').trim()\n return value || props.emptyText\n})\n\nconst hasCode = computed(() => {\n const value = String(props.code ?? '').trim()\n return value !== '' && value !== '-'\n})\n\nconst handleClick = () => {\n if (!hasCode.value) return\n const code = String(props.code).trim()\n productDetailStore.open(code, { type: props.type })\n emit('open', code)\n}\n</script>\n\n<style scoped>\n.j-sku-link {\n color: var(--j-sku-link-color, #409eff);\n font-weight: 700;\n cursor: pointer;\n}\n\n.j-sku-link:hover {\n text-decoration: underline;\n}\n\n.j-sku-link-empty {\n color: inherit;\n font-weight: inherit;\n}\n</style>\n","<!--\r\n 全局产品详情宿主:挂在 MainLayout\r\n 业务页用 JSkuLink 打开,无需各页面单独挂 JProductDetailDialog\r\n-->\r\n<template>\r\n <JProductDetailDialog\r\n v-model:visible=\"visible\"\r\n :code=\"code\"\r\n :type=\"type\"\r\n />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\ndefineOptions({ name: 'ProductDetailHost' })\r\n\r\nimport { storeToRefs } from 'pinia'\r\nimport JProductDetailDialog from './JProductDetailDialog.vue'\r\nimport { useProductDetailStore } from './store'\r\n\r\nconst productDetailStore = useProductDetailStore()\r\nconst { visible, code, type } = storeToRefs(productDetailStore)\r\n</script>\r\n","import { storeToRefs } from 'pinia'\nimport { useProductDetailStore } from './store'\n\n/**\n * @deprecated 推荐 MainLayout 挂载 ProductDetailHost,页面只用 JSkuLink。\n * 保留兼容:内部转调全局 store。\n */\nexport function useProductDetailDialog() {\n const store = useProductDetailStore()\n const { visible: productDetailDialogVisible, code: productDetailDialogCode } =\n storeToRefs(store)\n\n const openProductDetailDialog = (code: string) => {\n store.open(code)\n }\n\n return {\n productDetailDialogVisible,\n productDetailDialogCode,\n openProductDetailDialog,\n }\n}\n","<!--\r\n JSearchInputDialog - 关键词搜索复合控件\r\n\r\n 结构:\r\n [ 类型下拉 ] + [ 关键词输入框 ] + [ 批量输入按钮 ]\r\n │\r\n └─ 点右侧按钮 → Dialog + textarea 批量编辑\r\n\r\n 主流程:\r\n 1. 父组件传入 options(如 SKU / 品名),v-model:type + v-model:keyword 双向绑定\r\n 2. 用户左侧选类型,中间手输关键词;或点右侧 icon 打开弹窗批量粘贴\r\n 3. 弹窗确定:textarea 文本规范化 → 写回 keyword → emit('confirm')\r\n 4. 输入框回车:emit('search')\r\n 5. 父组件用 { [type]: keyword } 拼请求(也可调用 expose 的 toParams)\r\n\r\n 示例请求结果:type='sku', keyword='sku1,sku2' → { sku: 'sku1,sku2' }\r\n-->\r\n<template>\r\n <div class=\"j-search-input-dialog\" :style=\"{ width: width }\">\r\n <!-- 主输入区:前置类型 + 关键词 + 右侧批量入口 -->\r\n <el-input\r\n v-model=\"keyword\"\r\n :placeholder=\"placeholder\"\r\n clearable\r\n class=\"j-search-input-dialog__input\"\r\n @keyup.enter=\"emit('search')\"\r\n >\r\n <!-- 左侧:搜索字段类型(SKU / 品名 / 自定义) -->\r\n <template #prepend>\r\n <el-select\r\n v-model=\"type\"\r\n :style=\"{ width: selectWidth }\"\r\n :disabled=\"!options.length\"\r\n >\r\n <el-option\r\n v-for=\"item in options\"\r\n :key=\"item.value\"\r\n :label=\"item.label\"\r\n :value=\"item.value\"\r\n />\r\n </el-select>\r\n </template>\r\n <!-- 右侧:打开批量输入弹窗 -->\r\n <template #append>\r\n <el-button :icon=\"Memo\" :title=\"dialogTitleText\" @click=\"openDialog\" />\r\n </template>\r\n </el-input>\r\n\r\n <!-- 批量输入弹窗:textarea 编辑多值,确定后合并回主输入框 -->\r\n <el-dialog\r\n v-model=\"dialogVisible\"\r\n :title=\"dialogTitleText\"\r\n :width=\"dialogWidth\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n @closed=\"handleDialogClosed\"\r\n >\r\n <el-input\r\n v-model=\"textareaValue\"\r\n type=\"textarea\"\r\n :rows=\"rows\"\r\n :placeholder=\"textareaPlaceholder\"\r\n resize=\"vertical\"\r\n />\r\n <template #footer>\r\n <el-button @click=\"dialogVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" @click=\"handleConfirm\">确定</el-button>\r\n </template>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { Memo } from '@element-plus/icons-vue'\r\nimport type { JSearchInputDialogProps, SearchInputModel, SearchInputOption } from './types'\r\n\r\ndefineOptions({\r\n name: 'JSearchInputDialog',\r\n})\r\n\r\nconst props = withDefaults(defineProps<JSearchInputDialogProps>(), {\r\n options: () => [],\r\n placeholder: '请输入关键词',\r\n width: '320px',\r\n selectWidth: '100px',\r\n separator: ',',\r\n dialogTitle: '',\r\n dialogWidth: '480px',\r\n rows: 8,\r\n textareaPlaceholder: '支持换行、逗号、空格分隔,确定后自动合并',\r\n clearOnTypeChange: false,\r\n})\r\n\r\n/**\r\n * 双向绑定:\r\n * - type:当前选中的搜索字段类型(对应 options[].value)\r\n * - keyword:最终要参与搜索的关键词字符串(可多值,如 sku1,sku2)\r\n *\r\n * 父组件:\r\n * v-model:type=\"filters.keywordType\"\r\n * v-model:keyword=\"filters.keyword\"\r\n */\r\nconst type = defineModel<string>('type', { default: '' })\r\nconst keyword = defineModel<string>('keyword', { default: '' })\r\n\r\nconst emit = defineEmits<{\r\n /** 弹窗点「确定」并写回 keyword 后触发;父级常用来立刻 handleSearch */\r\n confirm: [payload: SearchInputModel]\r\n /** 主输入框回车触发;父级常用来 handleSearch */\r\n search: []\r\n}>()\r\n\r\n/** 批量输入弹窗显隐 */\r\nconst dialogVisible = ref(false)\r\n/** 弹窗内 textarea 的临时编辑值(确定前不影响外部 keyword) */\r\nconst textareaValue = ref('')\r\n\r\n/** 当前 type 对应的 option(用于取 label 拼弹窗标题) */\r\nconst currentOption = computed(() =>\r\n (props.options as SearchInputOption[]).find((item) => item.value === type.value),\r\n)\r\n\r\n/** 弹窗标题:优先用 props.dialogTitle,否则「批量输入{label}」 */\r\nconst dialogTitleText = computed(() => {\r\n if (props.dialogTitle) return props.dialogTitle\r\n const label = currentOption.value?.label || '关键词'\r\n return `批量输入${label}`\r\n})\r\n\r\n/**\r\n * 规范化批量文本 → 统一分隔符拼接的字符串\r\n * 流程:拆分(换行/逗号/分号/空白)→ trim → 去空 → 去重(保序)→ join(separator)\r\n * 例:'sku1\\nsku2, sku2 sku3' + separator=',' → 'sku1,sku2,sku3'\r\n */\r\nconst normalizeKeywords = (raw: string): string => {\r\n if (!raw) return ''\r\n const parts = raw\r\n .split(/[\\n\\r,,;;\\s\\t]+/)\r\n .map((item) => item.trim())\r\n .filter(Boolean)\r\n\r\n const unique: string[] = []\r\n const seen = new Set<string>()\r\n for (const part of parts) {\r\n if (seen.has(part)) continue\r\n seen.add(part)\r\n unique.push(part)\r\n }\r\n\r\n return unique.join(props.separator)\r\n}\r\n\r\n/**\r\n * 主输入框 keyword → textarea 多行回显\r\n * 打开弹窗前调用,方便用户在已有值上继续编辑\r\n * 例:'sku1,sku2' → 'sku1\\nsku2'\r\n */\r\nconst keywordToTextarea = (value: string): string => {\r\n if (!value) return ''\r\n return value\r\n .split(/[\\n\\r,,;;\\s\\t.]+/)\r\n .map((item) => item.trim())\r\n .filter(Boolean)\r\n .join('\\n')\r\n}\r\n\r\n/**\r\n * 打开批量输入弹窗\r\n * 1. 把当前 keyword 拆成多行填入 textarea\r\n * 2. 显示 dialog\r\n */\r\nconst openDialog = () => {\r\n textareaValue.value = keywordToTextarea(keyword.value)\r\n dialogVisible.value = true\r\n}\r\n\r\n/**\r\n * 弹窗点「确定」\r\n * 1. 规范化 textarea → 写回 keyword(同步到父组件 v-model)\r\n * 2. 关闭弹窗\r\n * 3. emit confirm,父组件可据此触发搜索\r\n * 注意:组件本身不发请求,只负责回写数据\r\n */\r\nconst handleConfirm = () => {\r\n keyword.value = normalizeKeywords(textareaValue.value)\r\n dialogVisible.value = false\r\n emit('confirm', {\r\n type: type.value,\r\n keyword: keyword.value,\r\n })\r\n}\r\n\r\n/**\r\n * 弹窗完全关闭后清理临时 textarea\r\n * 取消 / 确定关闭都会走这里;取消时不会改外部 keyword\r\n */\r\nconst handleDialogClosed = () => {\r\n textareaValue.value = ''\r\n}\r\n\r\n// 初始化:父组件未传 type 时,默认选中 options 第一项\r\nif (!type.value && props.options?.length) {\r\n type.value = props.options[0]?.value || ''\r\n}\r\n\r\n/**\r\n * 监听类型切换\r\n * 仅当 clearOnTypeChange=true 时,切换左侧类型会清空 keyword\r\n */\r\nwatch(type, (next, prev) => {\r\n if (!props.clearOnTypeChange) return\r\n if (next === prev) return\r\n keyword.value = ''\r\n})\r\n\r\n/**\r\n * 重置(供父组件 ref 调用)\r\n * @param defaultType 指定重置后的类型;不传则用 options[0]\r\n * 会清空 keyword\r\n */\r\nconst reset = (defaultType?: string) => {\r\n type.value = defaultType || props.options?.[0]?.value || ''\r\n keyword.value = ''\r\n}\r\n\r\n/**\r\n * 拼请求参数(供父组件 ref 调用)\r\n * 有 keyword 时返回 { [type]: keyword },否则 {}\r\n * 例:{ sku: 'sku1,sku2' }\r\n */\r\nconst toParams = (): Record<string, string> => {\r\n if (!keyword.value || !type.value) return {}\r\n return { [type.value]: keyword.value }\r\n}\r\n\r\n/**\r\n * 对外暴露,父组件通过 ref 调用:\r\n * - reset() 重置类型和关键词\r\n * - toParams() 直接拿请求参数对象\r\n * - openDialog() 程序化打开批量弹窗\r\n */\r\ndefineExpose({\r\n reset,\r\n toParams,\r\n openDialog,\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n/* 让前置 select 贴合 el-input 的 prepend 区域,去掉多余边框/阴影 */\r\n.j-search-input-dialog {\r\n display: inline-block;\r\n vertical-align: middle;\r\n\r\n :deep(.el-input-group__prepend) {\r\n background-color: var(--el-fill-color-blank);\r\n padding: 0;\r\n }\r\n\r\n :deep(.el-input-group__prepend .el-select) {\r\n margin: 0;\r\n }\r\n\r\n :deep(.el-input-group__prepend .el-select .el-select__wrapper) {\r\n box-shadow: none !important;\r\n border: none;\r\n background: transparent;\r\n }\r\n}\r\n</style>\r\n","/** 简单防抖,避免组件库依赖 @vueuse/core */\nexport function debounceFn<T extends (...args: never[]) => void>(fn: T, delay: number) {\n let timer: ReturnType<typeof setTimeout> | undefined\n return (...args: Parameters<T>) => {\n if (timer !== undefined) clearTimeout(timer)\n timer = setTimeout(() => fn(...args), delay)\n }\n}\n","<!-- 通用远程搜索 Select(由 scm/bis RemoteSelect 抽取) -->\n<template>\n <el-select\n ref=\"selectRef\"\n :model-value=\"modelValue\"\n :loading=\"loading\"\n :disabled=\"disabled || (!allowEmpty && !hasRequiredParams)\"\n :placeholder=\"computedPlaceholder\"\n :clearable=\"clearable\"\n :filterable=\"searchable\"\n :remote=\"searchable && !localFilter\"\n :remote-method=\"searchable && !localFilter ? handleSearch : undefined\"\n :remote-show-suffix=\"searchable && !localFilter\"\n :multiple=\"multiple\"\n :collapse-tags=\"collapseTags\"\n :collapse-tags-tooltip=\"collapseTagsTooltip\"\n :max-collapse-tags=\"maxCollapseTags\"\n v-bind=\"$attrs\"\n @update:model-value=\"handleChange\"\n @visible-change=\"handleVisibleChange\"\n @clear=\"handleClear\"\n >\n <el-option\n v-for=\"item in displayOptions\"\n :key=\"item[valueField]\"\n :label=\"item[labelField]\"\n :value=\"item[valueField]\"\n />\n <template v-if=\"paginated && loadingMore\">\n <el-option disabled value=\"\" class=\"load-more-option\">\n <div class=\"loading-more-text\">加载中...</div>\n </el-option>\n </template>\n </el-select>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { debounceFn } from './debounce'\nimport type { RemoteSelectFetchApi, RemoteSelectModelValue } from './types'\n\ndefineOptions({\n name: 'JRemoteSelect',\n})\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: RemoteSelectModelValue\n fetchApi: RemoteSelectFetchApi\n labelField?: string\n valueField?: string\n searchField?: string\n params?: Record<string, unknown>\n searchable?: boolean\n localFilter?: boolean\n paginated?: boolean\n pageSize?: number\n multiple?: boolean\n clearable?: boolean\n disabled?: boolean\n placeholder?: string\n dependsPlaceholder?: string\n immediate?: boolean\n autoClearOnParamsChange?: boolean\n allowEmpty?: boolean\n requiredParams?: string[]\n initialLabel?: string\n collapseTags?: boolean\n collapseTagsTooltip?: boolean\n maxCollapseTags?: number\n }>(),\n {\n labelField: 'name',\n valueField: 'id',\n searchField: 'keyword',\n searchable: true,\n localFilter: false,\n paginated: true,\n pageSize: 20,\n multiple: false,\n clearable: true,\n disabled: false,\n placeholder: '请选择',\n dependsPlaceholder: '请先选择前置条件',\n immediate: false,\n autoClearOnParamsChange: false,\n allowEmpty: false,\n requiredParams: () => [],\n collapseTags: false,\n collapseTagsTooltip: false,\n maxCollapseTags: 1,\n },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: RemoteSelectModelValue]\n change: [value: RemoteSelectModelValue, option: Record<string, unknown> | null]\n paramsChange: [params: Record<string, unknown>]\n}>()\n\nconst selectRef = ref<{ $el?: HTMLElement }>()\nconst loading = ref(false)\nconst loadingMore = ref(false)\nconst options = ref<Record<string, unknown>[]>([])\nconst currentPage = ref(1)\nconst total = ref(0)\nconst searchKeyword = ref('')\nconst dropdownScrollEl = ref<HTMLElement | null>(null)\n\nconst hasMore = computed(() => {\n if (props.localFilter || !props.paginated) return false\n return options.value.length < total.value\n})\n\nconst fetchPageSize = computed(() => {\n if (props.localFilter) return Math.max(props.pageSize, 2000)\n return props.pageSize\n})\n\nconst hasRequiredParams = computed(() => {\n if (props.allowEmpty && !props.requiredParams.length) return true\n if (!props.params) return props.allowEmpty\n\n if (props.requiredParams.length > 0) {\n return props.requiredParams.every((key) => {\n const val = props.params![key]\n return val !== undefined && val !== null && val !== ''\n })\n }\n\n return props.allowEmpty || Object.keys(props.params).length > 0\n})\n\nconst computedPlaceholder = computed(() => {\n if (!hasRequiredParams.value && !props.allowEmpty) {\n return props.dependsPlaceholder\n }\n return props.placeholder\n})\n\nconst displayOptions = computed(() => {\n const val = props.modelValue\n if (val === undefined || val === null || val === '') return options.value\n if (props.multiple) return options.value\n\n const initialLabel = String(props.initialLabel || '').trim()\n const patched = options.value.map((item) => {\n if (item[props.valueField] !== val) return item\n const currentLabel = String(item[props.labelField] ?? '').trim()\n const valueText = String(val)\n const labelLooksLikeValue =\n !currentLabel ||\n currentLabel === valueText ||\n currentLabel === String(item[props.valueField] ?? '')\n const initialHasCjk = /[\\u4e00-\\u9fff]/.test(initialLabel)\n const currentHasCjk = /[\\u4e00-\\u9fff]/.test(currentLabel)\n if (initialLabel && (labelLooksLikeValue || (initialHasCjk && !currentHasCjk))) {\n return { ...item, [props.labelField]: initialLabel }\n }\n return item\n })\n\n const exists = patched.some((item) => item[props.valueField] === val)\n if (exists) return patched\n\n return [{ [props.valueField]: val, [props.labelField]: initialLabel || val }, ...patched]\n})\n\nconst parseListResponse = (res: unknown): { list: Record<string, unknown>[]; totalNum: number } => {\n const r = res as Record<string, unknown>\n const data = r.data as Record<string, unknown> | undefined\n\n if (data?.list && Array.isArray(data.list)) {\n const list = data.list as Record<string, unknown>[]\n const pageInfo = data.pageInfo as Record<string, unknown> | undefined\n return {\n list,\n totalNum: Number(pageInfo?.totalNum ?? data.total ?? list.length),\n }\n }\n if (Array.isArray(r.list)) {\n const list = r.list as Record<string, unknown>[]\n return { list, totalNum: Number(r.total ?? list.length) }\n }\n if (Array.isArray(data)) {\n return { list: data as Record<string, unknown>[], totalNum: data.length }\n }\n if (Array.isArray(res)) {\n return { list: res as Record<string, unknown>[], totalNum: (res as unknown[]).length }\n }\n return { list: [], totalNum: 0 }\n}\n\nconst fetchData = async (reset = false) => {\n if (!hasRequiredParams.value) {\n options.value = []\n return\n }\n\n if (reset && loading.value) return\n\n try {\n if (reset) {\n loading.value = true\n currentPage.value = 1\n } else {\n loadingMore.value = true\n }\n\n const requestParams: Record<string, unknown> = {\n ...props.params,\n pageIndex: currentPage.value,\n pageSize: fetchPageSize.value,\n }\n\n if (!props.localFilter && searchKeyword.value && props.searchable) {\n requestParams[props.searchField] = searchKeyword.value\n }\n\n const res = await props.fetchApi(requestParams)\n const { list, totalNum } = parseListResponse(res)\n\n if (reset) {\n options.value = list\n } else {\n options.value.push(...list)\n }\n\n total.value = totalNum\n } catch (error) {\n console.error('[JRemoteSelect] 请求失败:', error)\n options.value = []\n } finally {\n loading.value = false\n loadingMore.value = false\n }\n}\n\nconst loadMore = () => {\n if (loadingMore.value || !hasMore.value) return\n currentPage.value++\n fetchData(false)\n}\n\nconst handleSearch = debounceFn((query: string) => {\n const nextKeyword = query ?? ''\n if (!nextKeyword && options.value.length > 0 && !searchKeyword.value) {\n return\n }\n if (nextKeyword === searchKeyword.value && options.value.length > 0) {\n return\n }\n searchKeyword.value = nextKeyword\n fetchData(true)\n}, 300)\n\nconst handleVisibleChange = (visible: boolean) => {\n if (visible) {\n const isRemote = props.searchable && !props.localFilter\n if (!isRemote && options.value.length === 0 && hasRequiredParams.value) {\n fetchData(true)\n }\n if (!props.localFilter) {\n nextTick(() => {\n bindScrollListener()\n })\n }\n } else {\n unbindScrollListener()\n }\n}\n\nconst handleScroll = debounceFn(() => {\n if (!dropdownScrollEl.value || !hasMore.value || loadingMore.value) return\n\n const { scrollTop, scrollHeight, clientHeight } = dropdownScrollEl.value\n if (scrollTop + clientHeight >= scrollHeight - 50) {\n loadMore()\n }\n}, 100)\n\nconst bindScrollListener = () => {\n const selectDom = selectRef.value?.$el\n if (!selectDom) return\n\n const inputEl = selectDom.querySelector('input')\n const popoverId = inputEl?.getAttribute('aria-controls')\n if (!popoverId) return\n\n const dropdownEl = document.getElementById(popoverId)\n if (!dropdownEl) return\n\n const scrollWrap = dropdownEl.parentElement as HTMLElement | null\n if (scrollWrap) {\n dropdownScrollEl.value = scrollWrap\n scrollWrap.addEventListener('scroll', handleScroll)\n }\n}\n\nconst unbindScrollListener = () => {\n if (dropdownScrollEl.value) {\n dropdownScrollEl.value.removeEventListener('scroll', handleScroll)\n dropdownScrollEl.value = null\n }\n}\n\nconst handleChange = (value: RemoteSelectModelValue) => {\n emit('update:modelValue', value)\n if (props.multiple || Array.isArray(value)) {\n emit('change', value, null)\n return\n }\n const option = options.value.find((item) => item[props.valueField] === value) ?? null\n emit('change', value, option)\n}\n\nconst handleClear = () => {\n searchKeyword.value = ''\n const cleared = props.multiple ? [] : null\n emit('update:modelValue', cleared)\n emit('change', cleared, null)\n}\n\nwatch(\n () => props.params,\n (newParams, oldParams) => {\n if (JSON.stringify(newParams || {}) === JSON.stringify(oldParams || {})) return\n\n emit('paramsChange', newParams || {})\n\n if (props.autoClearOnParamsChange && props.modelValue) {\n emit('update:modelValue', props.multiple ? [] : null)\n }\n\n searchKeyword.value = ''\n if (hasRequiredParams.value) {\n fetchData(true)\n } else {\n options.value = []\n }\n },\n { deep: true },\n)\n\nonMounted(() => {\n if (props.immediate && hasRequiredParams.value) {\n fetchData(true)\n }\n})\n\nonBeforeUnmount(() => {\n unbindScrollListener()\n})\n</script>\n\n<style scoped lang=\"scss\">\n.load-more-option {\n text-align: center;\n pointer-events: none;\n}\n\n.loading-more-text {\n color: #909399;\n font-size: 13px;\n padding: 8px 0;\n}\n</style>\n","<!--\r\n 通用产品选择弹窗壳\r\n - 跨页多选、已选 Popover、分页、确定回传\r\n - 筛选区 #filters、表格列 #columns、已选列 #selected-columns\r\n-->\r\n<template>\r\n <el-dialog\r\n v-model=\"visible\"\r\n :title=\"title\"\r\n :width=\"width\"\r\n :append-to-body=\"teleported\"\r\n :close-on-click-modal=\"false\"\r\n destroy-on-close\r\n :z-index=\"zIndex\"\r\n @closed=\"handleClosed\"\r\n >\r\n <div class=\"j-product-select__filters\">\r\n <slot\r\n name=\"filters\"\r\n :search=\"handleSearch\"\r\n :reset=\"handleReset\"\r\n :loading=\"loading\"\r\n />\r\n </div>\r\n\r\n <el-table\r\n ref=\"tableRef\"\r\n v-loading=\"loading\"\r\n :data=\"tableData\"\r\n border\r\n :row-key=\"rowKey\"\r\n :height=\"tableHeight\"\r\n :row-style=\"{ cursor: 'pointer' }\"\r\n @selection-change=\"onSelectionChange\"\r\n >\r\n <el-table-column type=\"selection\" width=\"42\" />\r\n <slot name=\"columns\" />\r\n </el-table>\r\n\r\n <div class=\"j-product-select__bottom\">\r\n <div class=\"j-product-select__bottom-left\">\r\n <el-popover\r\n placement=\"top-start\"\r\n :width=\"popoverWidth\"\r\n trigger=\"click\"\r\n :disabled=\"allSelectedRows.length === 0\"\r\n :teleported=\"false\"\r\n >\r\n <template #reference>\r\n <div\r\n class=\"j-product-select__selected-trigger\"\r\n :class=\"{ 'is-active': allSelectedRows.length > 0 }\"\r\n >\r\n <span>已选择 {{ allSelectedRows.length }} 个产品</span>\r\n <el-icon><ArrowDown /></el-icon>\r\n </div>\r\n </template>\r\n <el-table\r\n :data=\"allSelectedRows\"\r\n border\r\n max-height=\"300\"\r\n :row-key=\"rowKey\"\r\n size=\"small\"\r\n >\r\n <slot name=\"selected-columns\" :remove=\"handleRemoveSelected\">\r\n <slot name=\"columns\" />\r\n <el-table-column label=\"操作\" width=\"60\" align=\"center\" fixed=\"right\">\r\n <template #default=\"{ row }\">\r\n <el-button link type=\"danger\" @click=\"handleRemoveSelected(row)\">移除</el-button>\r\n </template>\r\n </el-table-column>\r\n </slot>\r\n </el-table>\r\n </el-popover>\r\n </div>\r\n\r\n <div class=\"j-product-select__bottom-center\">\r\n <el-pagination\r\n v-model:current-page=\"pagination.page\"\r\n v-model:page-size=\"pagination.pageSize\"\r\n :page-sizes=\"pageSizes\"\r\n layout=\"total, prev, pager, next, sizes, jumper\"\r\n :total=\"pagination.total\"\r\n @current-change=\"loadData\"\r\n @size-change=\"loadData\"\r\n />\r\n </div>\r\n\r\n <div class=\"j-product-select__bottom-right\">\r\n <el-button @click=\"handleCancel\">取消</el-button>\r\n <el-button\r\n type=\"primary\"\r\n :disabled=\"allSelectedRows.length === 0\"\r\n @click=\"handleConfirm\"\r\n >\r\n 确定\r\n </el-button>\r\n </div>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { nextTick, reactive, ref, watch } from 'vue'\r\nimport { ElMessage } from 'element-plus'\r\nimport { ArrowDown } from '@element-plus/icons-vue'\r\nimport type { JProductSelectFetchApi, JProductSelectListResult } from './types'\r\n\r\ndefineOptions({\r\n name: 'JProductSelectDialog',\r\n})\r\n\r\ntype Row = Record<string, any>\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n fetchApi: JProductSelectFetchApi\r\n extraParams?: Record<string, any>\r\n title?: string\r\n width?: string\r\n rowKey?: string\r\n tableHeight?: string | number\r\n pageSizes?: number[]\r\n popoverWidth?: number\r\n zIndex?: number\r\n responseAdapter?: (res: any) => JProductSelectListResult\r\n loadErrorMessage?: string\r\n fetchOnOpen?: boolean\r\n teleported?: boolean\r\n }>(),\r\n {\r\n title: '选择产品',\r\n width: '1400px',\r\n rowKey: 'sku_code',\r\n tableHeight: 430,\r\n pageSizes: () => [10, 20, 50, 100],\r\n popoverWidth: 1100,\r\n loadErrorMessage: '加载产品列表失败',\r\n fetchOnOpen: true,\r\n teleported: true,\r\n },\r\n)\r\n\r\nconst visible = defineModel<boolean>({ default: false })\r\n\r\nconst emit = defineEmits<{\r\n confirm: [rows: Row[]]\r\n open: []\r\n closed: []\r\n}>()\r\n\r\nconst tableRef = ref()\r\nconst tableData = ref<Row[]>([])\r\nconst allSelectedRows = ref<Row[]>([])\r\nconst loading = ref(false)\r\nconst isRestoring = ref(false)\r\n\r\nconst pagination = reactive({\r\n page: 1,\r\n pageSize: 10,\r\n total: 0,\r\n})\r\n\r\nconst defaultAdapter = (res: any): JProductSelectListResult => {\r\n const list = res?.list || res?.data?.list || res?.data || []\r\n const total = res?.total ?? res?.data?.total ?? res?.data?.pageInfo?.totalNum ?? 0\r\n return {\r\n list: Array.isArray(list) ? list : [],\r\n total: Number(total) || 0,\r\n }\r\n}\r\n\r\nconst restoreSelection = () => {\r\n isRestoring.value = true\r\n nextTick(() => {\r\n const selectedKeys = new Set(allSelectedRows.value.map((r) => r[props.rowKey]))\r\n tableData.value.forEach((row) => {\r\n if (selectedKeys.has(row[props.rowKey])) {\r\n tableRef.value?.toggleRowSelection(row, true)\r\n }\r\n })\r\n nextTick(() => {\r\n isRestoring.value = false\r\n })\r\n })\r\n}\r\n\r\nconst loadData = async () => {\r\n loading.value = true\r\n try {\r\n const params: Record<string, any> = {\r\n pageIndex: pagination.page,\r\n pageSize: pagination.pageSize,\r\n ...(props.extraParams || {}),\r\n }\r\n const res = await props.fetchApi(params)\r\n const { list, total } = (props.responseAdapter || defaultAdapter)(res)\r\n tableData.value = list\r\n pagination.total = total\r\n restoreSelection()\r\n } catch (e) {\r\n console.error(props.loadErrorMessage, e)\r\n ElMessage.error(props.loadErrorMessage)\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst onSelectionChange = (rows: Row[]) => {\r\n if (isRestoring.value) return\r\n const key = props.rowKey\r\n const currentPageKeys = new Set(tableData.value.map((r) => r[key]))\r\n const otherPageSelected = allSelectedRows.value.filter((r) => !currentPageKeys.has(r[key]))\r\n allSelectedRows.value = [...otherPageSelected, ...rows]\r\n}\r\n\r\nconst handleRemoveSelected = (row: Row) => {\r\n const key = props.rowKey\r\n allSelectedRows.value = allSelectedRows.value.filter((r) => r[key] !== row[key])\r\n const inCurrentPage = tableData.value.find((r) => r[key] === row[key])\r\n if (inCurrentPage) {\r\n tableRef.value?.toggleRowSelection(inCurrentPage, false)\r\n }\r\n}\r\n\r\nconst handleSearch = () => {\r\n pagination.page = 1\r\n void loadData()\r\n}\r\n\r\nconst handleReset = async () => {\r\n pagination.page = 1\r\n await nextTick()\r\n void loadData()\r\n}\r\n\r\nconst clearDialogState = () => {\r\n pagination.page = 1\r\n pagination.pageSize = 10\r\n pagination.total = 0\r\n tableData.value = []\r\n allSelectedRows.value = []\r\n tableRef.value?.clearSelection?.()\r\n}\r\n\r\nconst handleCancel = () => {\r\n visible.value = false\r\n}\r\n\r\nconst handleClosed = () => {\r\n clearDialogState()\r\n emit('closed')\r\n}\r\n\r\nconst handleConfirm = () => {\r\n emit('confirm', allSelectedRows.value)\r\n visible.value = false\r\n}\r\n\r\nwatch(visible, (v) => {\r\n if (v) {\r\n emit('open')\r\n pagination.page = 1\r\n if (props.fetchOnOpen) void loadData()\r\n }\r\n})\r\n\r\ndefineExpose({\r\n reload: loadData,\r\n clearSelected: () => {\r\n allSelectedRows.value = []\r\n tableRef.value?.clearSelection?.()\r\n },\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.j-product-select__filters {\r\n margin-bottom: 12px;\r\n margin-top: 12px;\r\n}\r\n\r\n.j-product-select__bottom {\r\n display: grid;\r\n grid-template-columns: 240px 1fr 220px;\r\n align-items: center;\r\n gap: 12px;\r\n margin-top: 12px;\r\n}\r\n\r\n.j-product-select__bottom-right {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 12px;\r\n}\r\n\r\n.j-product-select__selected-trigger {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n width: 210px;\r\n height: 32px;\r\n padding: 0 12px;\r\n border: 1px solid #dcdfe6;\r\n border-radius: 4px;\r\n font-size: 14px;\r\n color: #a8abb2;\r\n background: #f5f7fa;\r\n cursor: not-allowed;\r\n user-select: none;\r\n\r\n &.is-active {\r\n color: #606266;\r\n background: #fff;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n border-color: #409eff;\r\n }\r\n }\r\n}\r\n</style>\r\n","import type { Component } from 'vue'\r\nimport type {\r\n CreateDocDetailOptions,\r\n DocDetailAdapters,\r\n DocDetailComponents,\r\n DocDetailRegistryItem,\r\n} from './types'\r\n\r\ntype NormalizedRegistry = Record<\r\n string,\r\n {\r\n component: Component\r\n orderNoProp: string\r\n }\r\n>\r\n\r\nconst registry: NormalizedRegistry = {}\r\nlet adapters: DocDetailAdapters = {}\r\nlet initialized = false\r\n\r\nfunction normalizeComponents(components: DocDetailComponents): NormalizedRegistry {\r\n const result: NormalizedRegistry = {}\r\n Object.entries(components).forEach(([type, item]) => {\r\n if (!item) return\r\n if (typeof item === 'object' && 'component' in item) {\r\n const conf = item as DocDetailRegistryItem\r\n result[type] = {\r\n component: conf.component,\r\n orderNoProp: conf.orderNoProp || 'orderNo',\r\n }\r\n } else {\r\n result[type] = {\r\n component: item as Component,\r\n orderNoProp: 'orderNo',\r\n }\r\n }\r\n })\r\n return result\r\n}\r\n\r\n/**\r\n * 注册全局单据详情:组件映射 + 接口适配器\r\n * 建议在 main.ts 中 pinia 之后调用一次\r\n */\r\nexport function createDocDetail(options: CreateDocDetailOptions) {\r\n const next = normalizeComponents(options.components || {})\r\n Object.keys(registry).forEach((key) => delete registry[key])\r\n Object.assign(registry, next)\r\n adapters = { ...(options.adapters || {}) }\r\n initialized = true\r\n return {\r\n registry,\r\n adapters,\r\n }\r\n}\r\n\r\n/** 合并追加注册(可选,用于微前端/按模块懒注册) */\r\nexport function registerDocDetail(options: Partial<CreateDocDetailOptions>) {\r\n if (options.components) {\r\n Object.assign(registry, normalizeComponents(options.components))\r\n }\r\n if (options.adapters) {\r\n adapters = { ...adapters, ...options.adapters }\r\n }\r\n initialized = true\r\n}\r\n\r\nexport function getDocDetailRegistry() {\r\n return registry\r\n}\r\n\r\nexport function getDocDetailAdapters(): DocDetailAdapters {\r\n return adapters\r\n}\r\n\r\nexport function isDocDetailInitialized() {\r\n return initialized\r\n}\r\n\r\nexport function getDocDetailEntry(type: string) {\r\n return registry[type] || null\r\n}\r\n","import { defineStore } from 'pinia'\r\nimport { nextTick, ref } from 'vue'\r\nimport type { DocDetailType } from './types'\r\nimport { getDocDetailEntry } from './registry'\r\n\r\n/**\r\n * 全局单据详情状态\r\n * 业务页:DocNoLink / store.open(type, orderNo)\r\n * 宿主:DocDetailHost 按 registry 渲染\r\n */\r\nexport const useDocDetailStore = defineStore('jgyDocDetail', () => {\r\n const visible = ref(false)\r\n const type = ref<DocDetailType>('')\r\n const orderNo = ref('')\r\n\r\n async function open(docType: DocDetailType, no: string) {\r\n if (!docType || !no) return\r\n\r\n if (!getDocDetailEntry(docType)) {\r\n console.warn(`[JDocDetail] 未注册的单据类型: ${docType},请先 createDocDetail 注册`)\r\n return\r\n }\r\n\r\n // 先挂载对应详情组件(visible=false),下一帧再打开\r\n // 避免首次点击时组件带着 true 挂载导致不显示\r\n type.value = docType\r\n orderNo.value = no\r\n visible.value = false\r\n await nextTick()\r\n visible.value = true\r\n }\r\n\r\n function close() {\r\n visible.value = false\r\n }\r\n\r\n function reset() {\r\n visible.value = false\r\n type.value = ''\r\n orderNo.value = ''\r\n }\r\n\r\n return {\r\n visible,\r\n type,\r\n orderNo,\r\n open,\r\n close,\r\n reset,\r\n }\r\n})\r\n","const TOAST_ID = 'jgy-doc-copy-toast'\r\nconst TOAST_Z_INDEX = 2147483647\r\n\r\nfunction showCopyToast(type: 'success' | 'error', message: string) {\r\n document.getElementById(TOAST_ID)?.remove()\r\n\r\n const el = document.createElement('div')\r\n el.id = TOAST_ID\r\n el.setAttribute('role', 'alert')\r\n el.textContent = message\r\n\r\n Object.assign(el.style, {\r\n position: 'fixed',\r\n top: '20px',\r\n left: '50%',\r\n transform: 'translateX(-50%)',\r\n zIndex: String(TOAST_Z_INDEX),\r\n padding: '10px 20px',\r\n borderRadius: '4px',\r\n fontSize: '14px',\r\n lineHeight: '1.4',\r\n boxShadow: '0 2px 12px rgba(0, 0, 0, 0.12)',\r\n pointerEvents: 'none',\r\n opacity: '1',\r\n transition: 'opacity 0.3s ease',\r\n })\r\n\r\n if (type === 'success') {\r\n el.style.background = '#f0f9eb'\r\n el.style.color = '#67c23a'\r\n el.style.border = '1px solid #e1f3d8'\r\n } else {\r\n el.style.background = '#fef0f0'\r\n el.style.color = '#f56c6c'\r\n el.style.border = '1px solid #fde2e2'\r\n }\r\n\r\n document.body.appendChild(el)\r\n\r\n window.setTimeout(() => {\r\n el.style.opacity = '0'\r\n window.setTimeout(() => el.remove(), 300)\r\n }, 1500)\r\n}\r\n\r\nfunction copyWithFallback(text: string): boolean {\r\n const textarea = document.createElement('textarea')\r\n textarea.value = text\r\n textarea.setAttribute('readonly', '')\r\n textarea.style.position = 'fixed'\r\n textarea.style.left = '-9999px'\r\n textarea.style.top = '0'\r\n document.body.appendChild(textarea)\r\n textarea.select()\r\n textarea.setSelectionRange(0, text.length)\r\n\r\n let ok = false\r\n try {\r\n ok = document.execCommand('copy')\r\n } catch {\r\n ok = false\r\n }\r\n\r\n document.body.removeChild(textarea)\r\n return ok\r\n}\r\n\r\nexport async function copyText(text?: string | number | null) {\r\n if (text == null || text === '') return\r\n\r\n const value = String(text)\r\n\r\n try {\r\n if (window.isSecureContext && navigator.clipboard?.writeText) {\r\n await navigator.clipboard.writeText(value)\r\n showCopyToast('success', '已复制')\r\n return\r\n }\r\n } catch {\r\n // HTTP 或非安全上下文下降级到 execCommand\r\n }\r\n\r\n if (copyWithFallback(value)) {\r\n showCopyToast('success', '已复制')\r\n return\r\n }\r\n\r\n showCopyToast('error', '复制失败,请手动复制')\r\n}\r\n","<!--\r\n 单据号展示链接:点击后由全局 DocDetailHost 按 type 打开对应详情\r\n 用法:<DocNoLink type=\"receipt\" :order-no=\"row.receipt_order_no\" />\r\n-->\r\n<template>\r\n <span v-if=\"orderNo\" class=\"doc-no-link\">\r\n <el-button link type=\"primary\" class=\"doc-no-link__text\" @click.stop=\"handleClick\">\r\n {{ orderNo }}\r\n </el-button>\r\n <el-button\r\n v-if=\"showCopy\"\r\n link\r\n class=\"doc-no-link__copy\"\r\n @click.stop=\"handleCopy\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n </span>\r\n <span v-else class=\"doc-no-link doc-no-link--empty\">-</span>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport { useDocDetailStore } from './store'\r\nimport type { DocDetailType } from './types'\r\nimport { copyText } from './utils/copyText'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n type: DocDetailType\r\n orderNo: string\r\n /** 是否显示复制按钮,默认 true */\r\n showCopy?: boolean\r\n }>(),\r\n {\r\n showCopy: true,\r\n },\r\n)\r\n\r\nconst docDetailStore = useDocDetailStore()\r\n\r\nconst handleClick = () => {\r\n if (!props.orderNo) return\r\n docDetailStore.open(props.type, props.orderNo)\r\n}\r\n\r\nconst handleCopy = () => {\r\n if (!props.orderNo) return\r\n copyText(props.orderNo)\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.doc-no-link {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 2px;\r\n vertical-align: middle;\r\n\r\n &__text {\r\n padding: 0;\r\n height: auto;\r\n font-size: inherit;\r\n }\r\n\r\n &__copy {\r\n padding: 0;\r\n height: auto;\r\n color: #c0c4cc;\r\n\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n\r\n &--empty {\r\n color: #909399;\r\n }\r\n}\r\n</style>\r\n","<!--\r\n 全局单据详情宿主:挂在 MainLayout\r\n 按 store.type + registry 动态渲染对应纯展示详情\r\n 新增单据:createDocDetail / registerDocDetail 注册即可,无需改此文件\r\n-->\r\n<template>\r\n <component\r\n :is=\"entry.component\"\r\n v-if=\"entry && type\"\r\n :model-value=\"visible\"\r\n v-bind=\"orderNoBind\"\r\n @update:model-value=\"onVisibleChange\"\r\n />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { storeToRefs } from 'pinia'\r\nimport { useDocDetailStore } from './store'\r\nimport { getDocDetailEntry } from './registry'\r\n\r\nconst docDetailStore = useDocDetailStore()\r\nconst { visible, type, orderNo } = storeToRefs(docDetailStore)\r\n\r\nconst entry = computed(() => {\r\n if (!type.value) return null\r\n return getDocDetailEntry(type.value)\r\n})\r\n\r\nconst orderNoBind = computed(() => {\r\n if (!entry.value) return {}\r\n return {\r\n [entry.value.orderNoProp]: orderNo.value,\r\n }\r\n})\r\n\r\nconst onVisibleChange = (val: boolean) => {\r\n if (val) {\r\n docDetailStore.visible = true\r\n } else {\r\n docDetailStore.close()\r\n }\r\n}\r\n</script>\r\n","export const RECEIPT_TYPE_MAP: Record<number, string> = {\r\n 1: '采购订单',\r\n 2: '退换货订单',\r\n 3: '采购补货',\r\n 4: '采购继续来货',\r\n 5: '调拨收货',\r\n 99: '其他收货',\r\n}\r\n\r\nexport const getReceiptTypeLabel = (type?: number | string | null) => {\r\n if (type == null || type === '') return '-'\r\n const key = Number(type)\r\n if (!Number.isFinite(key)) return '-'\r\n return RECEIPT_TYPE_MAP[key] ?? '-'\r\n}\r\n\r\nexport const RECEIPT_STATUS_MAP: Record<number, string> = {\r\n 300: '待收货',\r\n 400: '部分收货',\r\n 500: '已完成',\r\n 600: '异常',\r\n}\r\n\r\nexport const ABNORMAL_INITIATE_STATUS_MAP: Record<number, string> = {\r\n 1: '未发起',\r\n 2: '部分发起',\r\n 3: '全部发起',\r\n}\r\n\r\nexport const calcAbnormalInitiateStatus = (\r\n orderItems: Array<{ id?: number; receive_qty?: number; notice_receive_qty?: number }>,\r\n occupiedItemIds: number[] = [],\r\n) => {\r\n const abnormalItemIds = orderItems\r\n .filter((item) => (Number(item.receive_qty) || 0) !== (Number(item.notice_receive_qty) || 0))\r\n .map((item) => Number(item.id))\r\n .filter((id) => id > 0)\r\n\r\n const total = abnormalItemIds.length\r\n if (total === 0) {\r\n return { sub_status: 3, sub_status_name: ABNORMAL_INITIATE_STATUS_MAP[3] }\r\n }\r\n\r\n const occupiedSet = new Set(occupiedItemIds.map((id) => Number(id)))\r\n const covered = abnormalItemIds.filter((id) => occupiedSet.has(id)).length\r\n\r\n if (covered === 0) {\r\n return { sub_status: 1, sub_status_name: ABNORMAL_INITIATE_STATUS_MAP[1] }\r\n }\r\n if (covered < total) {\r\n return { sub_status: 2, sub_status_name: ABNORMAL_INITIATE_STATUS_MAP[2] }\r\n }\r\n return { sub_status: 3, sub_status_name: ABNORMAL_INITIATE_STATUS_MAP[3] }\r\n}\r\n\r\nexport const getReceiptStatusLabel = (\r\n status?: number,\r\n baseLabel?: string,\r\n subMemo?: string,\r\n) => {\r\n const key = Number(status)\r\n const base = baseLabel || RECEIPT_STATUS_MAP[key] || (status != null ? String(status) : '-')\r\n if (key === 600 && subMemo) {\r\n return `${base}(${subMemo})`\r\n }\r\n return base\r\n}\r\n\r\nexport const resolveAbnormalSubMemo = (\r\n row: {\r\n status?: number\r\n status_sub_memo?: string\r\n abnormal_sub_status_name?: string\r\n order_item?: any\r\n abnormal_occupied_item_ids?: number[]\r\n },\r\n flatOrderItems?: Array<{ id?: number; receive_qty?: number; notice_receive_qty?: number }>,\r\n) => {\r\n if (Number(row.status) !== 600) return ''\r\n if (row.status_sub_memo) return row.status_sub_memo\r\n if (row.abnormal_sub_status_name) return row.abnormal_sub_status_name\r\n if (flatOrderItems?.length) {\r\n return calcAbnormalInitiateStatus(flatOrderItems, row.abnormal_occupied_item_ids || [])\r\n .sub_status_name\r\n }\r\n return ''\r\n}\r\n","export interface FlatOrderItem extends Record<string, any> {\r\n _skuGroupSize?: number\r\n _skuGroupIndex?: number\r\n}\r\n\r\n/** 将 order_item 按 SKU 分组对象或数组展平为子行 */\r\nexport function flattenOrderItems(orderItem: any, withSkuGroupMeta = true): FlatOrderItem[] {\r\n if (!orderItem) return []\r\n if (Array.isArray(orderItem)) {\r\n return orderItem.map((item: any, idx: number) => ({\r\n ...item,\r\n ...(withSkuGroupMeta ? { _skuGroupSize: 1, _skuGroupIndex: idx } : {}),\r\n }))\r\n }\r\n if (typeof orderItem !== 'object') return []\r\n\r\n return Object.values(orderItem).flatMap((skuGroup: any) => {\r\n const items = skuGroup?.order_item\r\n if (!Array.isArray(items)) {\r\n if (skuGroup?.sku_code || skuGroup?.id) {\r\n return withSkuGroupMeta\r\n ? [{ ...skuGroup, _skuGroupSize: 1, _skuGroupIndex: 0 }]\r\n : [skuGroup]\r\n }\r\n return []\r\n }\r\n const groupSize = items.length\r\n return items.map((item: any, idx: number) => ({\r\n ...item,\r\n sku_info: item.sku_info || skuGroup.sku_info,\r\n sku_image: item.sku_image || skuGroup.sku_image,\r\n ...(withSkuGroupMeta ? { _skuGroupSize: groupSize, _skuGroupIndex: idx } : {}),\r\n }))\r\n })\r\n}\r\n\r\nexport function sumOrderItemField(orderItem: any, field: string): number {\r\n return flattenOrderItems(orderItem, false).reduce(\r\n (sum, item) => sum + Number(item?.[field] ?? 0),\r\n 0,\r\n )\r\n}\r\n","<template>\r\n <span class=\"related-doc-no-copy\">\r\n <span v-if=\"label\" class=\"related-doc-no-copy__label\">{{ label }}</span>\r\n <span :class=\"{ 'link-text': link }\">{{ displayText }}</span>\r\n <el-icon\r\n v-if=\"copyable\"\r\n class=\"copy-btn\"\r\n size=\"12\"\r\n @click.stop=\"handleCopy\"\r\n ><CopyDocument /></el-icon>\r\n </span>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport { copyText } from '../JDocDetail/utils/copyText'\r\n\r\nconst props = withDefaults(defineProps<{\r\n value?: string | number | null\r\n label?: string\r\n link?: boolean\r\n}>(), {\r\n link: true,\r\n})\r\n\r\nconst displayText = computed(() => {\r\n const v = props.value\r\n if (v == null || v === '') return '-'\r\n return String(v)\r\n})\r\n\r\nconst copyable = computed(() => props.value != null && props.value !== '')\r\n\r\nconst handleCopy = () => {\r\n if (!copyable.value) return\r\n copyText(props.value)\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.related-doc-no-copy {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 4px;\r\n}\r\n\r\n.related-doc-no-copy__label {\r\n color: inherit;\r\n}\r\n\r\n.link-text {\r\n color: #409eff;\r\n}\r\n\r\n.copy-btn {\r\n cursor: pointer;\r\n color: #c0c4cc;\r\n flex-shrink: 0;\r\n}\r\n\r\n.copy-btn:hover {\r\n color: #409eff;\r\n}\r\n</style>\r\n","export interface FlatOrderItem extends Record<string, any> {\r\n _skuGroupSize?: number\r\n _skuGroupIndex?: number\r\n}\r\n\r\n/** 将 order_item 按 SKU 分组对象或数组展平为子行 */\r\nexport function flattenOrderItems(orderItem: any, withSkuGroupMeta = true): FlatOrderItem[] {\r\n if (!orderItem) return []\r\n if (Array.isArray(orderItem)) {\r\n return orderItem.map((item: any, idx: number) => ({\r\n ...item,\r\n ...(withSkuGroupMeta ? { _skuGroupSize: 1, _skuGroupIndex: idx } : {}),\r\n }))\r\n }\r\n if (typeof orderItem !== 'object') return []\r\n\r\n return Object.values(orderItem).flatMap((skuGroup: any) => {\r\n const items = skuGroup?.order_item\r\n if (!Array.isArray(items)) {\r\n if (skuGroup?.sku_code || skuGroup?.id) {\r\n return withSkuGroupMeta\r\n ? [{ ...skuGroup, _skuGroupSize: 1, _skuGroupIndex: 0 }]\r\n : [skuGroup]\r\n }\r\n return []\r\n }\r\n const groupSize = items.length\r\n return items.map((item: any, idx: number) => ({\r\n ...item,\r\n sku_info: item.sku_info || skuGroup.sku_info,\r\n sku_image: item.sku_image || skuGroup.sku_image,\r\n ...(withSkuGroupMeta ? { _skuGroupSize: groupSize, _skuGroupIndex: idx } : {}),\r\n }))\r\n })\r\n}\r\n\r\nexport function sumOrderItemField(orderItem: any, field: string): number {\r\n return flattenOrderItems(orderItem, false).reduce(\r\n (sum, item) => sum + Number(item?.[field] ?? 0),\r\n 0,\r\n )\r\n}\r\n","export const RECEIPT_TYPE_MAP: Record<number, string> = {\r\n 1: '采购订单',\r\n 2: '退换货订单',\r\n 3: '采购补货',\r\n 4: '采购继续来货',\r\n 5: '调拨收货',\r\n 99: '其他收货',\r\n}\r\n\r\nexport const RECEIPT_STATUS_MAP: Record<number, string> = {\r\n 300: '待收货',\r\n 400: '部分收货',\r\n 500: '已完成',\r\n 600: '异常',\r\n}\r\n\r\nexport const getReceiptTypeLabel = (type?: number | string | null) => {\r\n if (type == null || type === '') return '-'\r\n const key = Number(type)\r\n if (!Number.isFinite(key)) return '-'\r\n return RECEIPT_TYPE_MAP[key] ?? '-'\r\n}\r\n\r\nexport const getReceiptStatusLabel = (status?: number | string | null) => {\r\n if (status == null || status === '') return '-'\r\n const key = Number(status)\r\n if (!Number.isFinite(key)) return '-'\r\n return RECEIPT_STATUS_MAP[key] ?? String(status)\r\n}\r\n\r\nexport const INBOUND_TYPE_MAP: Record<number, string> = {\r\n 1: '采购入库',\r\n 2: '调拨入库',\r\n 3: '加工入库',\r\n 4: '换货入库',\r\n 5: '补货入库',\r\n 99: '其他入库',\r\n}\r\n\r\nexport const INBOUND_STATUS_MAP: Record<number, string> = {\r\n 100: '待上架完成',\r\n 200: '部分入库',\r\n 300: '已完成',\r\n}\r\n\r\nexport const getInboundTypeLabel = (type?: number | string | null) => {\r\n if (type == null || type === '') return '-'\r\n const key = Number(type)\r\n if (!Number.isFinite(key)) return '-'\r\n return INBOUND_TYPE_MAP[key] ?? '-'\r\n}\r\n\r\nexport const getInboundStatusLabel = (status?: number | string | null) => {\r\n if (status == null || status === '') return '-'\r\n const key = Number(status)\r\n if (!Number.isFinite(key)) return '-'\r\n return INBOUND_STATUS_MAP[key] ?? String(status)\r\n}\r\n\r\nconst PUTAWAY_STATUS_COMPLETED = 300\r\n\r\nexport const getPutawayGoodQty = (row?: {\r\n status?: number\r\n good_qty?: number\r\n pending_good_qty?: number\r\n} | null) => {\r\n const status = Number(row?.status)\r\n if (status === PUTAWAY_STATUS_COMPLETED) return Number(row?.good_qty ?? 0)\r\n return Number(row?.pending_good_qty ?? 0)\r\n}\r\n\r\nexport const getPutawayBadQty = (row?: {\r\n status?: number\r\n bad_qty?: number\r\n pending_bad_qty?: number\r\n} | null) => {\r\n const status = Number(row?.status)\r\n if (status === PUTAWAY_STATUS_COMPLETED) return Number(row?.bad_qty ?? 0)\r\n return Number(row?.pending_bad_qty ?? 0)\r\n}\r\n\r\ntype PutawayLocationItem = {\r\n inventory_status?: number\r\n location_code?: string\r\n location_name?: string\r\n putaway_qty?: number\r\n location_type_name?: string\r\n location_display?: string\r\n}\r\n\r\nconst formatPutawayLocationList = (\r\n locationList?: PutawayLocationItem[] | null,\r\n inventoryStatus?: number,\r\n) => {\r\n const list = (locationList || []).filter((item) => {\r\n if (inventoryStatus == null) return true\r\n return Number(item.inventory_status || 1) === inventoryStatus\r\n })\r\n if (!list.length) return '-'\r\n return list\r\n .map((item) => {\r\n if (item.location_display) return item.location_display\r\n const label = (item.location_name || item.location_code || '').trim() || '-'\r\n const qty = Number(item.putaway_qty || 0)\r\n const base = qty > 0 ? `${label}*${qty}` : label\r\n return item.location_type_name ? `${base}(${item.location_type_name})` : base\r\n })\r\n .join(',')\r\n}\r\n\r\nexport const getPutawayGoodLocation = (row?: {\r\n location_list?: PutawayLocationItem[]\r\n location_good_display?: string\r\n} | null) => {\r\n if (row?.location_good_display) return row.location_good_display\r\n return formatPutawayLocationList(row?.location_list, 1)\r\n}\r\n\r\nexport const getPutawayBadLocation = (row?: {\r\n location_list?: PutawayLocationItem[]\r\n location_bad_display?: string\r\n} | null) => {\r\n if (row?.location_bad_display) return row.location_bad_display\r\n return formatPutawayLocationList(row?.location_list, 2)\r\n}\r\n","import { onMounted, ref, watch } from 'vue'\r\n\r\ntype ExpandOptions = {\r\n defaultExpandAll?: () => boolean\r\n loading?: () => boolean\r\n}\r\n\r\n/** 关联单据折叠表:默认展开,异步加载完成后重新展开 */\r\nexport function useRelatedCollapseExpand(\r\n getOrders: () => Record<string, any>[],\r\n getBatchKey: (order: Record<string, any>, idx: number) => string,\r\n options: ExpandOptions = {},\r\n) {\r\n const expandedKeys = ref<string[]>([])\r\n\r\n const shouldExpand = () => options.defaultExpandAll?.() ?? true\r\n\r\n const expandAll = () => {\r\n if (!shouldExpand()) {\r\n expandedKeys.value = []\r\n return\r\n }\r\n const orders = getOrders()\r\n if (!orders.length) return\r\n expandedKeys.value = orders.map((order, idx) => getBatchKey(order, idx))\r\n }\r\n\r\n const toggleRow = (key: string) => {\r\n expandedKeys.value = expandedKeys.value.includes(key)\r\n ? expandedKeys.value.filter((k) => k !== key)\r\n : [...expandedKeys.value, key]\r\n }\r\n\r\n watch(getOrders, expandAll, { immediate: true, deep: true })\r\n\r\n watch(\r\n () => [options.loading?.() ?? false, getOrders().length] as const,\r\n ([loading, count]) => {\r\n if (!loading && count > 0) expandAll()\r\n },\r\n { immediate: true },\r\n )\r\n\r\n onMounted(expandAll)\r\n\r\n return { expandedKeys, expandAll, toggleRow }\r\n}\r\n","<template>\r\n <el-table\r\n class=\"related-collapse-table\"\r\n :data=\"flatTableData\"\r\n border\r\n size=\"small\"\r\n row-key=\"_rowKey\"\r\n :span-method=\"spanMethod\"\r\n :row-class-name=\"getBatchRowClassName\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联收货单\"\r\n >\r\n <el-table-column width=\"50\" align=\"center\" class-name=\"col-toggle\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"row._isBatch\" class=\"toggle-btn\" @click.stop=\"toggleRow(row._rowKey)\">\r\n <el-icon v-if=\"expandedKeys.includes(row._rowKey)\"><CaretBottom /></el-icon>\r\n <el-icon v-else><CaretRight /></el-icon>\r\n </span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"row._isBatch\" class=\"group-info-row\">\r\n <span class=\"info-item\">\r\n <RelatedDocNoCopy label=\"收货单号:\" :value=\"row.receipt_order_no\" />\r\n </span>\r\n <span class=\"info-item\">收货类型:{{ getReceiptTypeLabel(row.receipt_type) }}</span>\r\n <span class=\"info-item\">收货仓库:{{ row.warehouse_name || '-' }}</span>\r\n <span v-if=\"row.association_order_no\" class=\"info-item\">\r\n <RelatedDocNoCopy label=\"关联单号:\" :value=\"row.association_order_no\" />\r\n </span>\r\n <span class=\"info-item\">\r\n 收货人/时间:{{ row.receipt_leader_name || '-' }} / {{ row.receipt_date || '-' }}\r\n </span>\r\n <span class=\"info-item\">\r\n 状态:\r\n <el-tag :type=\"getReceiptStatusTagType(row.status)\" size=\"small\">\r\n {{ getReceiptStatusLabel(row.status) }}\r\n </el-tag>\r\n </span>\r\n </div>\r\n <template v-else>\r\n <el-image\r\n v-if=\"row.sku_image?.main_image\"\r\n :src=\"row.sku_image.main_image\"\r\n style=\"width:32px;height:32px\"\r\n fit=\"cover\"\r\n />\r\n <el-icon v-else size=\"20\" color=\"#c0c4cc\"><Picture /></el-icon>\r\n </template>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!row._isBatch\">\r\n <div>{{ row.sku_info?.product_name || '-' }}</div>\r\n <div class=\"sku-text\">\r\n <JSkuLink :code=\"row.sku_code\" />\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单号\" min-width=\"130\">\r\n <template #default=\"{ row }\">\r\n <RelatedDocNoCopy v-if=\"!row._isBatch\" :value=\"row.purchase_no\" :link=\"false\" />\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"通知收货量\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ row.notice_receive_qty ?? '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"实际收货量\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ row.receive_qty ?? '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"贴标\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!row._isBatch\">\r\n <div>通知:{{ formatLabelFlag(row.notice_label_flag) }}</div>\r\n <div>实际:{{ formatLabelFlag(row.label_flag) }}</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column v-if=\"showQcType\" label=\"质检类型\" width=\"100\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ qcTypeMap[row.qc_type] || '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号\" min-width=\"120\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ row.user_account_name || '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { CaretBottom, CaretRight, Picture } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport RelatedDocNoCopy from '../RelatedDocNoCopy.vue'\r\nimport { flattenOrderItems } from '../utils/flattenOrderItems'\r\nimport { getReceiptStatusLabel, getReceiptTypeLabel } from '../utils/labels'\r\nimport { useRelatedCollapseExpand } from '../utils/useRelatedCollapseExpand'\r\n\r\ndefineOptions({ name: 'RelatedReceiptOrderTable' })\r\n\r\nconst props = withDefaults(defineProps<{\r\n orders?: Record<string, any>[]\r\n loading?: boolean\r\n showQcType?: boolean\r\n defaultExpandAll?: boolean\r\n}>(), {\r\n orders: () => [],\r\n loading: false,\r\n showQcType: false,\r\n defaultExpandAll: true,\r\n})\r\n\r\nconst qcTypeMap: Record<number, string> = { 1: '仓库', 2: '预检', 3: '免检', 4: '加工质检' }\r\nconst COLUMN_COUNT = computed(() => (props.showQcType ? 9 : 8))\r\n\r\nconst getBatchKey = (order: Record<string, any>, idx: number) =>\r\n `r-${order.receipt_order_no || idx}`\r\n\r\nconst { expandedKeys, toggleRow } = useRelatedCollapseExpand(\r\n () => props.orders || [],\r\n getBatchKey,\r\n {\r\n defaultExpandAll: () => props.defaultExpandAll,\r\n loading: () => props.loading,\r\n },\r\n)\r\n\r\nconst flatTableData = computed(() => {\r\n const rows: Record<string, any>[] = []\r\n ;(props.orders || []).forEach((order, idx) => {\r\n const key = getBatchKey(order, idx)\r\n rows.push({ ...order, _rowKey: key, _isBatch: true })\r\n if (expandedKeys.value.includes(key)) {\r\n flattenOrderItems(order.order_item).forEach((item) => {\r\n rows.push({\r\n ...item,\r\n _rowKey: `ri-${order.receipt_order_no}-${item.id || item.purchase_no}`,\r\n _isBatch: false,\r\n })\r\n })\r\n }\r\n })\r\n return rows\r\n})\r\n\r\nconst spanMethod = ({ row, columnIndex }: { row: Record<string, any>; columnIndex: number }) => {\r\n if (row._isBatch) {\r\n if (columnIndex === 0) return [1, 1]\r\n if (columnIndex === 1) return [1, COLUMN_COUNT.value - 1]\r\n return [0, 0]\r\n }\r\n if ([1, 2].includes(columnIndex) && row._skuGroupSize > 1) {\r\n return row._skuGroupIndex === 0 ? [row._skuGroupSize, 1] : [0, 0]\r\n }\r\n return [1, 1]\r\n}\r\n\r\nconst getBatchRowClassName = ({ row }: { row: Record<string, any> }) =>\r\n row._isBatch ? 'batch-summary-row' : ''\r\n\r\nconst formatLabelFlag = (flag?: number | null) =>\r\n flag == null ? '-' : Number(flag) === 1 ? '否' : '是'\r\n\r\nconst getReceiptStatusTagType = (status?: number) => {\r\n if (status === 500) return 'success'\r\n if (status === 600) return 'danger'\r\n if (status === 300 || status === 400) return 'warning'\r\n return 'info'\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n@use '../relatedDocCollapse.scss';\r\n</style>\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联质检单\"\r\n >\r\n <el-table-column label=\"单据信息\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div class=\"doc-info-line\">\r\n <RelatedDocNoCopy label=\"质检单:\" :value=\"row.qc_order_no\" />\r\n <el-tag v-if=\"row.urgent_flag == 2\" type=\"danger\" size=\"small\">急</el-tag>\r\n </div>\r\n <div>\r\n <RelatedDocNoCopy label=\"收货单:\" :value=\"row.receipt_order_no\" />\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"质检属性\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <div>类型:{{ qcTypeMap[row.qc_type] || '-' }}</div>\r\n <div>方式:{{ qcMethodMap[row.qc_method] || '-' }}</div>\r\n <div>\r\n 状态:\r\n <el-tag :type=\"getStatusTagType(row.status)\" size=\"small\">\r\n {{ statusMap[row.status] || '-' }}\r\n </el-tag>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"产品信息\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div>品名:{{ row.sku_info?.product_name || '-' }}</div>\r\n <div>SKU:<JSkuLink :code=\"row.sku_code\" /></div>\r\n <img v-if=\"row.sku_image?.main_image\" :src=\"row.sku_image.main_image\" class=\"thumb\" />\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"质检量\" width=\"80\" align=\"center\" prop=\"need_qc_qty\" />\r\n <el-table-column label=\"良品量\" width=\"80\" align=\"center\" prop=\"total_good_qty\" />\r\n <el-table-column label=\"次品量\" width=\"80\" align=\"center\" prop=\"total_bad_qty\" />\r\n <el-table-column label=\"收货人\" min-width=\"80\" prop=\"receipt_leader_name\" />\r\n <el-table-column label=\"质检员\" min-width=\"80\" prop=\"qc_leader_name\" />\r\n <el-table-column label=\"到货日期\" min-width=\"110\" prop=\"receipt_date\" />\r\n <el-table-column label=\"质检日期\" min-width=\"110\" prop=\"qc_date\" />\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport RelatedDocNoCopy from '../RelatedDocNoCopy.vue'\r\n\r\ndefineOptions({ name: 'RelatedQcOrderTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n\r\nconst qcTypeMap: Record<number, string> = { 1: '仓库', 2: '预检', 3: '免检', 4: '加工质检' }\r\nconst qcMethodMap: Record<number, string> = { 1: '抽检', 2: '全检' }\r\nconst statusMap: Record<number, string> = {\r\n 100: '待审核',\r\n 200: '审核未通过',\r\n 300: '质检中',\r\n 400: '已质检',\r\n 600: '已作废',\r\n}\r\n\r\nconst getStatusTagType = (status?: number) => {\r\n if (status === 400) return 'success'\r\n if (status === 300) return 'warning'\r\n if (status === 200) return 'danger'\r\n return 'info'\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.doc-info-line {\r\n display: flex;\r\n align-items: center;\r\n gap: 4px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.thumb {\r\n width: 32px;\r\n height: 32px;\r\n object-fit: cover;\r\n border-radius: 3px;\r\n margin-top: 4px;\r\n}\r\n</style>\r\n","<template>\r\n <el-table\r\n class=\"related-collapse-table\"\r\n :data=\"flatTableData\"\r\n border\r\n size=\"small\"\r\n row-key=\"_rowKey\"\r\n :span-method=\"spanMethod\"\r\n :row-class-name=\"getBatchRowClassName\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联入库单\"\r\n >\r\n <el-table-column width=\"50\" align=\"center\" class-name=\"col-toggle\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"row._isBatch\" class=\"toggle-btn\" @click.stop=\"toggleRow(row._rowKey)\">\r\n <el-icon v-if=\"expandedKeys.includes(row._rowKey)\"><CaretBottom /></el-icon>\r\n <el-icon v-else><CaretRight /></el-icon>\r\n </span>\r\n </template>\r\n </el-table-column>\r\n\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"row._isBatch\" class=\"group-info-row\">\r\n <span class=\"info-item\">\r\n <RelatedDocNoCopy label=\"入库单号:\" :value=\"row.inbound_order_no\" />\r\n </span>\r\n <span class=\"info-item\">入库类型:{{ getInboundTypeLabel(row.inbound_type) }}</span>\r\n <span class=\"info-item\">入库仓库:{{ row.warehouse_name || '-' }}</span>\r\n <span class=\"info-item\">\r\n 创建人/创建时间:{{ row.inbound_leader_name || '-' }} / {{ row.ctime || '-' }}\r\n </span>\r\n <span class=\"info-item\">总入库量:{{ totalQty(row) }}</span>\r\n <span class=\"info-item\">\r\n 状态:\r\n <el-tag :type=\"getInboundStatusTagType(row.status)\" size=\"small\">\r\n {{ getInboundStatusLabel(row.status) }}\r\n </el-tag>\r\n </span>\r\n <span class=\"info-item\">\r\n <RelatedDocNoCopy\r\n label=\"关联单号:\"\r\n :value=\"row.source_order_no || row.receipt_order_no\"\r\n />\r\n </span>\r\n <span class=\"info-item\">备注:{{ row.inbound_memo || '-' }}</span>\r\n </div>\r\n <template v-else>\r\n <el-image\r\n v-if=\"row.sku_image?.main_image\"\r\n :src=\"row.sku_image.main_image\"\r\n style=\"width:32px;height:32px\"\r\n fit=\"cover\"\r\n />\r\n <el-icon v-else size=\"20\" color=\"#c0c4cc\"><Picture /></el-icon>\r\n </template>\r\n </template>\r\n </el-table-column>\r\n\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!row._isBatch\" class=\"product-cell\">\r\n <div>{{ row.sku_info?.product_name || '-' }}</div>\r\n <div class=\"sku-text\">\r\n <JSkuLink :code=\"row.sku_code\" />\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n\r\n <el-table-column label=\"采购单号\" min-width=\"130\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!row._isBatch\" class=\"purchase-cell\">\r\n <RelatedDocNoCopy :value=\"row.purchase_no\" :link=\"false\" />\r\n </div>\r\n </template>\r\n </el-table-column>\r\n\r\n <el-table-column label=\"入库量\" width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ row.inbound_qty ?? '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n\r\n <el-table-column label=\"良品量\" width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ row.good_qty ?? '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n\r\n <el-table-column label=\"次品量\" width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ row.bad_qty ?? '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n\r\n <el-table-column label=\"店铺\" min-width=\"120\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ row.user_account_name || '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { CaretBottom, CaretRight, Picture } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport RelatedDocNoCopy from '../RelatedDocNoCopy.vue'\r\nimport { flattenOrderItems, sumOrderItemField } from '../utils/flattenOrderItems'\r\nimport { getInboundStatusLabel, getInboundTypeLabel } from '../utils/labels'\r\nimport { useRelatedCollapseExpand } from '../utils/useRelatedCollapseExpand'\r\n\r\ndefineOptions({ name: 'RelatedInboundOrderTable' })\r\n\r\nconst COLUMN_COUNT = 8\r\n\r\nconst props = withDefaults(defineProps<{\r\n orders?: Record<string, any>[]\r\n loading?: boolean\r\n defaultExpandAll?: boolean\r\n}>(), {\r\n orders: () => [],\r\n loading: false,\r\n defaultExpandAll: true,\r\n})\r\n\r\nconst getBatchKey = (order: Record<string, any>, idx: number) =>\r\n `ib-${order.inbound_order_no || idx}`\r\n\r\nconst { expandedKeys, toggleRow } = useRelatedCollapseExpand(\r\n () => props.orders || [],\r\n getBatchKey,\r\n {\r\n defaultExpandAll: () => props.defaultExpandAll,\r\n loading: () => props.loading,\r\n },\r\n)\r\n\r\nconst flatTableData = computed(() => {\r\n const rows: Record<string, any>[] = []\r\n ;(props.orders || []).forEach((order, idx) => {\r\n const key = getBatchKey(order, idx)\r\n rows.push({ ...order, _rowKey: key, _isBatch: true })\r\n if (expandedKeys.value.includes(key)) {\r\n flattenOrderItems(order.order_item).forEach((item) => {\r\n rows.push({\r\n ...item,\r\n _rowKey: `ii-${order.inbound_order_no}-${item.id || item.purchase_no || item.sku_code}`,\r\n _isBatch: false,\r\n })\r\n })\r\n }\r\n })\r\n return rows\r\n})\r\n\r\nconst spanMethod = ({ row, columnIndex }: { row: Record<string, any>; columnIndex: number }) => {\r\n if (row._isBatch) {\r\n if (columnIndex === 0) return [1, 1]\r\n if (columnIndex === 1) return [1, COLUMN_COUNT - 1]\r\n return [0, 0]\r\n }\r\n if ([1, 2].includes(columnIndex) && row._skuGroupSize > 1) {\r\n if (row._skuGroupIndex === 0) return [row._skuGroupSize, 1]\r\n return [0, 0]\r\n }\r\n return [1, 1]\r\n}\r\n\r\nconst getBatchRowClassName = ({ row }: { row: Record<string, any> }) =>\r\n row._isBatch ? 'batch-summary-row' : ''\r\n\r\nconst totalQty = (row: Record<string, any>) => sumOrderItemField(row.order_item, 'inbound_qty')\r\n\r\nconst getInboundStatusTagType = (status?: number) => {\r\n if (status === 300) return 'success'\r\n if (status === 200) return 'warning'\r\n return 'info'\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n@use '../relatedDocCollapse.scss';\r\n</style>\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联上架单\"\r\n >\r\n <el-table-column label=\"单据信息\" min-width=\"220\">\r\n <template #default=\"{ row }\">\r\n <div><RelatedDocNoCopy label=\"上架单:\" :value=\"row.putaway_order_no\" /></div>\r\n <div><RelatedDocNoCopy label=\"质检单:\" :value=\"row.qc_order_no\" /></div>\r\n <div><RelatedDocNoCopy label=\"入库单:\" :value=\"row.inbound_order_no\" /></div>\r\n <div><RelatedDocNoCopy label=\"采购单:\" :value=\"row.purchase_no\" :link=\"false\" /></div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"产品信息\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div>品名:{{ row.sku_info?.product_name || '-' }}</div>\r\n <div>SKU:<JSkuLink :code=\"row.sku_code\" /></div>\r\n <img v-if=\"row.sku_image?.main_image\" :src=\"row.sku_image.main_image\" class=\"thumb\" />\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"上架信息\" min-width=\"280\">\r\n <template #default=\"{ row }\">\r\n <div>仓库:{{ row.warehouse_name || '-' }}</div>\r\n <div>可用:{{ getPutawayGoodQty(row) }}</div>\r\n <div class=\"loc-text\">库位:{{ getPutawayGoodLocation(row) }}</div>\r\n <div>次品:{{ getPutawayBadQty(row) }}</div>\r\n <div class=\"loc-text\">库位:{{ getPutawayBadLocation(row) }}</div>\r\n <div>\r\n 状态:\r\n <el-tag :type=\"getStatusTagType(row.status)\" size=\"small\">\r\n {{ row.status_name || '-' }}\r\n </el-tag>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"人员信息\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div>采购员:{{ row.purchase_leader_name || '-' }}</div>\r\n <div>收货员:{{ row.receipt_leader_name || '-' }}</div>\r\n <div>质检员:{{ row.qc_leader_name || '-' }}</div>\r\n <div>上架员:{{ row.putaway_leader_name || '-' }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"时间信息\" min-width=\"220\">\r\n <template #default=\"{ row }\">\r\n <div>收货:{{ row.receipt_date || '-' }}</div>\r\n <div>质检:{{ row.qc_date || '-' }}</div>\r\n <div>上架:{{ row.putaway_time || '-' }}</div>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport RelatedDocNoCopy from '../RelatedDocNoCopy.vue'\r\nimport {\r\n getPutawayBadLocation,\r\n getPutawayBadQty,\r\n getPutawayGoodLocation,\r\n getPutawayGoodQty,\r\n} from '../utils/labels'\r\n\r\ndefineOptions({ name: 'RelatedPutawayOrderTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n\r\nconst getStatusTagType = (status?: number) => {\r\n if (status === 300) return 'success'\r\n if (status === 100 || status === 200) return 'warning'\r\n return 'info'\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.thumb {\r\n width: 32px;\r\n height: 32px;\r\n object-fit: cover;\r\n border-radius: 3px;\r\n margin-top: 4px;\r\n}\r\n\r\n.loc-text {\r\n word-break: break-all;\r\n white-space: normal;\r\n line-height: 20px;\r\n}\r\n</style>\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联采购订单\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" />\r\n <el-table-column label=\"采购订单号\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.purchase_no\"\r\n type=\"purchase\"\r\n :order-no=\"String(row.purchase_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"供应商/到货仓库\" min-width=\"180\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.supplier || row.supplier_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"90\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.image || row.main_image\"\r\n :src=\"row.image || row.main_image\"\r\n :preview-src-list=\"[row.image || row.main_image]\"\r\n preview-teleported\r\n fit=\"cover\"\r\n style=\"width: 44px; height: 44px\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div>{{ row.product_name || '-' }}</div>\r\n <div class=\"sku-text\"><JSkuLink :code=\"row.sku || row.sku_code\" /></div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺\" min-width=\"100\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.shop_account || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column v-if=\"showFnsku\" label=\"SellerSKU/FNSKU\" min-width=\"140\">\r\n <template #default=\"{ row }\">{{ row.fnsku || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"purchase_qty\" label=\"采购数量\" min-width=\"100\" />\r\n <el-table-column prop=\"arrived_qty\" label=\"到货量\" min-width=\"90\" />\r\n <el-table-column prop=\"wait_arrived_qty\" label=\"待到货量\" min-width=\"90\" />\r\n <el-table-column prop=\"refund_qty\" label=\"退换货量\" min-width=\"90\" />\r\n <el-table-column prop=\"expected_arrival_date\" label=\"预计到货日期\" min-width=\"120\" />\r\n <el-table-column label=\"采购员\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ row.purchaser || row.purchaser_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"ctime\" label=\"创建时间\" min-width=\"150\" />\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\n\r\ndefineOptions({ name: 'RelatedPurchaseOrderTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n showFnsku?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n showFnsku: false,\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.sku-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n</style>\r\n","/** 采购计划关联行:组合产品展开子项 */\r\nexport function buildPurchasePlanRows(list: Record<string, any>[]) {\r\n return (list || []).map((item, index) => {\r\n const bisSku = item.bis_sku ?? null\r\n const productType = Number(bisSku?.product_type ?? 10)\r\n const isCombo = productType === 20\r\n const purchasePlanQty = item.purchase_plan_qty ?? ''\r\n\r\n const row: Record<string, any> = {\r\n id: item.id ?? `plan-${index}`,\r\n requirement_no: item.requirement_no ?? '',\r\n image: bisSku?.main_image ?? bisSku?.image ?? item.image ?? item.main_image ?? '',\r\n product_name: bisSku?.product_name ?? item.product_name ?? '',\r\n sku: item.sku ?? bisSku?.sku_code ?? item.sku_code ?? '',\r\n bundle: isCombo ? (bisSku?.product_name ?? '') : '',\r\n shop_account: item.shop_account ?? '',\r\n supplier: item.supplier ?? item.supplier_name ?? '',\r\n stock_name: item.stock_name ?? item.stock_code ?? '',\r\n purchase_plan_qty: purchasePlanQty,\r\n purchased_plan_qty: item.purchased_plan_qty ?? '',\r\n box_sku_qty: item.box_sku_qty ?? '',\r\n isCombo,\r\n }\r\n\r\n const childItems = bisSku?.items\r\n if (isCombo && Array.isArray(childItems) && childItems.length) {\r\n row.children = childItems.map((child: any, ci: number) => {\r\n const ratio = Number(child.quantity ?? 1)\r\n const childSkuInfo = child.sku_info ?? null\r\n return {\r\n id: `${row.id}-child-${ci}`,\r\n requirement_no: '',\r\n image: childSkuInfo?.main_image ?? childSkuInfo?.image ?? '',\r\n product_name: childSkuInfo?.product_name ?? '',\r\n sku: child.sku_code ?? childSkuInfo?.sku_code ?? '',\r\n bundle: childSkuInfo?.product_name ?? '',\r\n shop_account: item.shop_account ?? '',\r\n supplier: '',\r\n stock_name: item.stock_name ?? item.stock_code ?? '',\r\n purchase_plan_qty:\r\n purchasePlanQty !== '' && purchasePlanQty != null\r\n ? ratio * Number(purchasePlanQty)\r\n : '',\r\n purchased_plan_qty: '',\r\n box_sku_qty: '',\r\n isCombo: false,\r\n }\r\n })\r\n }\r\n\r\n return row\r\n })\r\n}\r\n\r\n/** 加工单关联行:组合产品及采购明细展开 */\r\nexport function buildProcessingOrderRows(list: Record<string, any>[]) {\r\n return (list || []).map((item, index) => {\r\n const skuInfo = item.sku_info ?? {}\r\n const skuImage = item.sku_image ?? {}\r\n const productType = Number(skuInfo.product_type ?? 10)\r\n const isCombo = productType === 20\r\n\r\n const row: Record<string, any> = {\r\n id: item.id ?? `process-${index}`,\r\n processing_order_no: item.processing_order_no ?? '',\r\n purchase_plan_no: item.purchase_plan_no ?? '',\r\n image: skuImage.main_image ?? '',\r\n product_name: skuInfo.product_name ?? '',\r\n sku: item.sku_code ?? skuInfo.sku_code ?? '',\r\n shop_account: item.user_account_name ?? item.shop_account ?? '',\r\n fnsku: item.fnsku ?? '',\r\n seller_sku: item.seller_sku ?? '',\r\n plan_qty: item.plan_qty ?? '',\r\n processed_qty: item.processed_qty ?? '',\r\n pending_qty:\r\n item.plan_qty && item.processed_qty\r\n ? Number(item.plan_qty) - Number(item.processed_qty)\r\n : '',\r\n expected_date: item.expected_date ?? '',\r\n creator_leader_name: item.creator_leader_name ?? '',\r\n ctime: item.ctime ?? '',\r\n isCombo,\r\n }\r\n\r\n const orderItems = item.order_item\r\n if (isCombo && Array.isArray(orderItems) && orderItems.length) {\r\n row.children = orderItems.map((orderItem: any, oi: number) => {\r\n const childSkuInfo = orderItem.sku_info ?? {}\r\n const childSkuImage = orderItem.sku_image ?? {}\r\n const ratio = Number(orderItem.combination_ratio ?? 1)\r\n const childRow: Record<string, any> = {\r\n id: `${row.id}-item-${oi}`,\r\n processing_order_no: '',\r\n purchase_plan_no: '',\r\n image: childSkuImage.main_image ?? '',\r\n product_name: childSkuInfo.product_name ?? '',\r\n sku: orderItem.sku_code ?? childSkuInfo.sku_code ?? '',\r\n shop_account: '',\r\n fnsku: '',\r\n seller_sku: '',\r\n plan_qty: orderItem.purchase_qty ?? '',\r\n processed_qty: orderItem.processed_qty ?? '',\r\n pending_qty:\r\n orderItem.purchase_qty && orderItem.processed_qty\r\n ? Number(orderItem.purchase_qty) - Number(orderItem.processed_qty)\r\n : '',\r\n expected_date: '',\r\n creator_leader_name: '',\r\n ctime: '',\r\n isCombo: false,\r\n combinationRatio: ratio,\r\n }\r\n\r\n const purchaseItems = orderItem.items\r\n if (Array.isArray(purchaseItems) && purchaseItems.length) {\r\n childRow.children = purchaseItems.map((pItem: any, pi: number) => {\r\n const pSkuInfo = pItem.sku_info ?? {}\r\n const pSkuImage = pItem.sku_image ?? {}\r\n return {\r\n id: `${childRow.id}-purchase-${pi}`,\r\n processing_order_no: '',\r\n purchase_plan_no: pItem.purchase_no ?? '',\r\n image: pSkuImage.main_image ?? '',\r\n product_name: pSkuInfo.product_name ?? '',\r\n sku: pItem.sku_code ?? pSkuInfo.sku_code ?? '',\r\n shop_account: '',\r\n fnsku: '',\r\n seller_sku: '',\r\n plan_qty: pItem.purchase_qty ?? '',\r\n processed_qty: pItem.processed_qty ?? '',\r\n pending_qty:\r\n pItem.purchase_qty && pItem.processed_qty\r\n ? Number(pItem.purchase_qty) - Number(pItem.processed_qty)\r\n : '',\r\n expected_date: pItem.expected_arrival_date ?? '',\r\n creator_leader_name: pItem.purchase_leader_name ?? '',\r\n ctime: pItem.ctime ?? '',\r\n }\r\n })\r\n }\r\n\r\n return childRow\r\n })\r\n }\r\n\r\n return row\r\n })\r\n}\r\n\r\n/** 报关单展开为产品扁平行 */\r\nexport function flattenDeclarationRows(list: Record<string, any>[]) {\r\n const rows: Record<string, any>[] = []\r\n ;(list || []).forEach((decl) => {\r\n const products = decl.products || []\r\n if (!products.length) {\r\n rows.push({ ...decl, product_name: '-', sku_code: '' })\r\n return\r\n }\r\n products.forEach((p: any) => {\r\n rows.push({\r\n ...p,\r\n declaration_no: decl.declaration_no,\r\n status: decl.status,\r\n status_name: decl.status_name,\r\n })\r\n })\r\n })\r\n return rows\r\n}\r\n","<template>\r\n <el-table\r\n :data=\"tableData\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n row-key=\"id\"\r\n :tree-props=\"{ children: 'children' }\"\r\n default-expand-all\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联采购计划\"\r\n >\r\n <el-table-column label=\"计划单号\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.requirement_no\"\r\n type=\"purchasePlan\"\r\n :order-no=\"String(row.requirement_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"72\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <div class=\"img-cell\">\r\n <el-image\r\n v-if=\"row.image\"\r\n :src=\"row.image\"\r\n :preview-src-list=\"[row.image]\"\r\n preview-teleported\r\n fit=\"cover\"\r\n style=\"width: 40px; height: 40px\"\r\n />\r\n <span v-else class=\"no-image\">无</span>\r\n <el-tag v-if=\"row.isCombo\" size=\"small\" effect=\"dark\" class=\"combo-badge\">组</el-tag>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div>{{ row.product_name || '-' }}</div>\r\n <div class=\"sku-text\"><JSkuLink :code=\"row.sku\" /></div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"组合产品\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.bundle || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号\" min-width=\"100\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.shop_account || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"供应商\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.supplier || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"采购仓库\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.stock_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"purchase_plan_qty\" label=\"计划采购量\" width=\"100\" align=\"center\" />\r\n <el-table-column prop=\"purchased_plan_qty\" label=\"已采购量\" width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"box_sku_qty\" label=\"单箱数量\" width=\"90\" align=\"center\" />\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\nimport { buildPurchasePlanRows } from '../utils/buildRelatedRows'\r\n\r\ndefineOptions({ name: 'RelatedPurchasePlanTable' })\r\n\r\nconst props = withDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n\r\nconst tableData = computed(() => buildPurchasePlanRows(props.list || []))\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.img-cell {\r\n position: relative;\r\n display: inline-block;\r\n}\r\n\r\n.no-image {\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n display: inline-block;\r\n width: 40px;\r\n height: 40px;\r\n line-height: 40px;\r\n text-align: center;\r\n border: 1px solid #ebeef5;\r\n border-radius: 4px;\r\n}\r\n\r\n.combo-badge {\r\n position: absolute;\r\n top: -4px;\r\n right: -4px;\r\n padding: 0 4px;\r\n font-size: 10px;\r\n height: 16px;\r\n line-height: 16px;\r\n}\r\n\r\n.sku-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n</style>\r\n","export const displayDash = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nexport const getInfoTagType = (status?: number, success: number[] = [], warning: number[] = []) => {\r\n if (status != null && success.includes(status)) return 'success'\r\n if (status != null && warning.includes(status)) return 'warning'\r\n return 'info'\r\n}\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联送货单\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"送货单号\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.delivery_no\"\r\n type=\"deliveryDoc\"\r\n :order-no=\"String(row.delivery_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"状态\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n <el-tag :type=\"getInfoTagType(row.status, [300, 500], [200, 400])\" size=\"small\">\r\n {{ row.status_name || row.status || '-' }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"供应商\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayDash(row.supplier_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"采购公司\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayDash(row.purchase_company_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"创建人\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ displayDash(row.creator_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"创建时间\" min-width=\"160\">\r\n <template #default=\"{ row }\">{{ displayDash(row.ctime) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"备注\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayDash(row.remark) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\nimport { displayDash, getInfoTagType } from '../utils/display'\r\n\r\ndefineOptions({ name: 'RelatedDeliveryDocTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n</script>\r\n","<template>\r\n <el-table\r\n :data=\"tableData\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n row-key=\"id\"\r\n :tree-props=\"{ children: 'children' }\"\r\n default-expand-all\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联加工单\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" />\r\n <el-table-column label=\"加工单号\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.processing_order_no\"\r\n type=\"processing\"\r\n :order-no=\"String(row.processing_order_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购计划号\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.purchase_plan_no\"\r\n type=\"purchasePlan\"\r\n :order-no=\"String(row.purchase_plan_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"72\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.image\"\r\n :src=\"row.image\"\r\n :preview-src-list=\"[row.image]\"\r\n preview-teleported\r\n fit=\"cover\"\r\n style=\"width: 40px; height: 40px\"\r\n />\r\n <span v-else class=\"no-image\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div>{{ row.product_name || '-' }}</div>\r\n <div class=\"sku-text\"><JSkuLink :code=\"row.sku\" /></div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.shop_account || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column v-if=\"showFnsku\" label=\"FNSKU/SellerSKU\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <div>{{ row.fnsku || '-' }}</div>\r\n <div class=\"sku-text\">{{ row.seller_sku || '-' }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column v-else label=\"SellerSKU\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <span class=\"sku-text\">{{ row.seller_sku || '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"plan_qty\" label=\"计划数量\" width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"processed_qty\" label=\"已加工量\" width=\"90\" align=\"center\" />\r\n <el-table-column label=\"待加工量\" width=\"90\" align=\"center\">\r\n <template #default=\"{ row }\">{{ row.pending_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"expected_date\" label=\"预计完工日期\" min-width=\"120\" />\r\n <el-table-column prop=\"creator_leader_name\" label=\"负责人\" min-width=\"90\" />\r\n <el-table-column prop=\"ctime\" label=\"创建时间\" min-width=\"150\" />\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\nimport { buildProcessingOrderRows } from '../utils/buildRelatedRows'\r\n\r\ndefineOptions({ name: 'RelatedProcessingOrderTable' })\r\n\r\nconst props = withDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n showFnsku?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n showFnsku: false,\r\n})\r\n\r\nconst tableData = computed(() => buildProcessingOrderRows(props.list || []))\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.no-image {\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n display: inline-block;\r\n width: 40px;\r\n height: 40px;\r\n line-height: 40px;\r\n text-align: center;\r\n border: 1px solid #ebeef5;\r\n border-radius: 4px;\r\n}\r\n\r\n.sku-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n</style>\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联退换货\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"退换货单号\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.return_order_no\"\r\n type=\"returnGoods\"\r\n :order-no=\"String(row.return_order_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"产品信息\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div>品名:{{ row.sku_info?.product_name || '-' }}</div>\r\n <div>SKU:<JSkuLink :code=\"row.sku_code\" /></div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"状态\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n <el-tag :type=\"getInfoTagType(row.status, [500, 300], [200, 400])\" size=\"small\">\r\n {{ row.status_name || row.status || '-' }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"退换货数量\" min-width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ row.return_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"创建人\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ displayDash(row.creator_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"创建时间\" min-width=\"160\">\r\n <template #default=\"{ row }\">{{ displayDash(row.ctime) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\nimport { displayDash, getInfoTagType } from '../utils/display'\r\n\r\ndefineOptions({ name: 'RelatedReturnOrderTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n</script>\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无收货异常\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"异常单号\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.abnormal_order_no || row.abnormal_no\"\r\n type=\"abnormal\"\r\n :order-no=\"String(row.abnormal_order_no || row.abnormal_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"产品信息\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div>品名:{{ row.sku_info?.product_name || '-' }}</div>\r\n <div>SKU:<JSkuLink :code=\"row.sku_code\" /></div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"异常类型\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ displayDash(row.abnormal_type_name || row.abnormal_type) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"异常数量\" min-width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">{{ row.abnormal_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"状态\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n <el-tag :type=\"getInfoTagType(row.status, [500, 300], [200, 400])\" size=\"small\">\r\n {{ row.status_name || row.status || '-' }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"创建时间\" min-width=\"160\">\r\n <template #default=\"{ row }\">{{ displayDash(row.ctime) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\nimport { displayDash, getInfoTagType } from '../utils/display'\r\n\r\ndefineOptions({ name: 'RelatedAbnormalOrderTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n</script>\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联付款单\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"付款单号\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.payment_request_no\"\r\n type=\"payment\"\r\n :order-no=\"String(row.payment_request_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"状态\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n <el-tag :type=\"getInfoTagType(row.status, [400, 300], [200, 100])\" size=\"small\">\r\n {{ row.status_name || row.status || '-' }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"供应商\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayDash(row.supplier_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"请款金额\" min-width=\"110\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"row.total_amount != null\">¥{{ row.total_amount }}</span>\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"付款方式\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ displayDash(row.py_method_type_name || row.py_method_type) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"申请人\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ displayDash(row.applicant_name || row.creator_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"申请时间\" min-width=\"160\">\r\n <template #default=\"{ row }\">{{ displayDash(row.ctime) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\nimport { displayDash, getInfoTagType } from '../utils/display'\r\n\r\ndefineOptions({ name: 'RelatedPaymentRequestTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n</script>\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联收款单\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"收款单号\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.receipt_voucher_no || row.receipt_no\"\r\n type=\"receiptVoucher\"\r\n :order-no=\"String(row.receipt_voucher_no || row.receipt_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"收款类型\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ displayDash(row.receipt_type_name || row.receipt_type) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"状态\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ displayDash(row.status_name || row.status) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"付款方\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayDash(row.payer_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"收款方\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayDash(row.payee_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"收款金额\" min-width=\"110\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"row.receipt_amount != null && row.receipt_amount !== ''\">¥{{ row.receipt_amount }}</span>\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"申请人\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ displayDash(row.applicant_name || row.applicant) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"申请时间\" min-width=\"160\">\r\n <template #default=\"{ row }\">{{ displayDash(row.apply_time || row.ctime) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"收款备注\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayDash(row.receipt_remark) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\nimport { displayDash } from '../utils/display'\r\n\r\ndefineOptions({ name: 'RelatedReceiptVoucherTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n</script>\r\n","<template>\r\n <el-table\r\n :data=\"flatData\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联报关单\"\r\n >\r\n <el-table-column label=\"报关单号\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <RelatedDocNoCopy :value=\"row.declaration_no\" />\r\n <el-tag :type=\"getInfoTagType(row.status, [300, 400], [200])\" size=\"small\" style=\"margin-left: 4px\">\r\n {{ row.status_name || '-' }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.image_url\"\r\n :src=\"row.image_url\"\r\n style=\"width: 32px; height: 32px\"\r\n fit=\"cover\"\r\n />\r\n <el-icon v-else size=\"20\" color=\"#c0c4cc\"><Picture /></el-icon>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div>{{ row.product_name || '-' }}</div>\r\n <div class=\"sku-text\"><JSkuLink :code=\"row.sku_code\" /></div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"海关编码\" min-width=\"120\">\r\n <template #default=\"{ row }\">{{ row.customs_code || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"报关品名\" min-width=\"120\">\r\n <template #default=\"{ row }\">{{ row.declaration_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"报关数量\" width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">{{ row.declaration_count ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"报关单位\" width=\"80\" align=\"center\">\r\n <template #default=\"{ row }\">{{ row.unit || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"报关单价(¥)\" width=\"110\" align=\"right\">\r\n <template #default=\"{ row }\">{{ row.declaration_price ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"报关金额(¥)\" width=\"110\" align=\"right\">\r\n <template #default=\"{ row }\">{{ row.declaration_amount ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"是否商检\" width=\"90\" align=\"center\">\r\n <template #default=\"{ row }\">{{ row.is_sampled == 1 ? '是' : '否' }}</template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Picture } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport RelatedDocNoCopy from '../RelatedDocNoCopy.vue'\r\nimport { flattenDeclarationRows } from '../utils/buildRelatedRows'\r\nimport { getInfoTagType } from '../utils/display'\r\n\r\ndefineOptions({ name: 'RelatedDeclarationTable' })\r\n\r\nconst props = withDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n\r\nconst flatData = computed(() => flattenDeclarationRows(props.list || []))\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.sku-text {\r\n font-size: 12px;\r\n color: #909399;\r\n}\r\n\r\n:deep(.el-table__row td) {\r\n vertical-align: top;\r\n}\r\n</style>\r\n","import type { Component } from 'vue'\r\nimport type { CreateRelatedDocsOptions, RelatedListAdapter } from './types'\r\nimport RelatedReceiptOrderTable from './tables/RelatedReceiptOrderTable.vue'\r\nimport RelatedQcOrderTable from './tables/RelatedQcOrderTable.vue'\r\nimport RelatedInboundOrderTable from './tables/RelatedInboundOrderTable.vue'\r\nimport RelatedPutawayOrderTable from './tables/RelatedPutawayOrderTable.vue'\r\nimport RelatedPurchaseOrderTable from './tables/RelatedPurchaseOrderTable.vue'\r\nimport RelatedPurchasePlanTable from './tables/RelatedPurchasePlanTable.vue'\r\nimport RelatedDeliveryDocTable from './tables/RelatedDeliveryDocTable.vue'\r\nimport RelatedProcessingOrderTable from './tables/RelatedProcessingOrderTable.vue'\r\nimport RelatedReturnOrderTable from './tables/RelatedReturnOrderTable.vue'\r\nimport RelatedAbnormalOrderTable from './tables/RelatedAbnormalOrderTable.vue'\r\nimport RelatedPaymentRequestTable from './tables/RelatedPaymentRequestTable.vue'\r\nimport RelatedReceiptVoucherTable from './tables/RelatedReceiptVoucherTable.vue'\r\nimport RelatedDeclarationTable from './tables/RelatedDeclarationTable.vue'\r\n\r\nconst DEFAULT_TABLE_COMPONENTS: Record<string, Component> = {\r\n receipt: RelatedReceiptOrderTable,\r\n qc: RelatedQcOrderTable,\r\n quality: RelatedQcOrderTable,\r\n inbound: RelatedInboundOrderTable,\r\n putaway: RelatedPutawayOrderTable,\r\n purchase: RelatedPurchaseOrderTable,\r\n purchasePlan: RelatedPurchasePlanTable,\r\n plan: RelatedPurchasePlanTable,\r\n deliveryDoc: RelatedDeliveryDocTable,\r\n shipping: RelatedDeliveryDocTable,\r\n processing: RelatedProcessingOrderTable,\r\n process: RelatedProcessingOrderTable,\r\n returnGoods: RelatedReturnOrderTable,\r\n return: RelatedReturnOrderTable,\r\n abnormal: RelatedAbnormalOrderTable,\r\n receipt_exception: RelatedAbnormalOrderTable,\r\n payment: RelatedPaymentRequestTable,\r\n receiptVoucher: RelatedReceiptVoucherTable,\r\n receipt_voucher: RelatedReceiptVoucherTable,\r\n customs: RelatedDeclarationTable,\r\n}\r\n\r\nlet listAdapters: Record<string, RelatedListAdapter> = {}\r\nlet tableComponents: Record<string, Component> = { ...DEFAULT_TABLE_COMPONENTS }\r\nlet initialized = false\r\n\r\n/**\r\n * 注册关联单据:list 适配器 + 可选表格组件覆盖\r\n * 建议在 main.ts 中 createDocDetail 旁调用一次\r\n */\r\nexport function createRelatedDocs(options: CreateRelatedDocsOptions = {}) {\r\n listAdapters = { ...(options.listAdapters || {}) }\r\n tableComponents = {\r\n ...DEFAULT_TABLE_COMPONENTS,\r\n ...(options.components || {}),\r\n }\r\n initialized = true\r\n return { listAdapters, tableComponents }\r\n}\r\n\r\n/** 合并追加注册 */\r\nexport function registerRelatedDocs(options: Partial<CreateRelatedDocsOptions>) {\r\n if (options.listAdapters) {\r\n listAdapters = { ...listAdapters, ...options.listAdapters }\r\n }\r\n if (options.components) {\r\n tableComponents = { ...tableComponents, ...options.components }\r\n }\r\n initialized = true\r\n}\r\n\r\nexport function getRelatedListAdapter(type: string): RelatedListAdapter | null {\r\n return listAdapters[type] || null\r\n}\r\n\r\nexport function getRelatedTableComponent(type: string): Component | null {\r\n return tableComponents[type] || null\r\n}\r\n\r\nexport function getRelatedDocsTableComponents() {\r\n return tableComponents\r\n}\r\n\r\nexport function isRelatedDocsInitialized() {\r\n return initialized\r\n}\r\n\r\nexport { DEFAULT_TABLE_COMPONENTS }\r\n","<template>\r\n <div class=\"related-sub-tabs\">\r\n <button\r\n v-for=\"tab in tabs\"\r\n :key=\"tab.key\"\r\n type=\"button\"\r\n class=\"related-sub-tab\"\r\n :class=\"{ 'related-sub-tab--active': modelValue === tab.key }\"\r\n @click=\"$emit('update:modelValue', tab.key)\"\r\n >\r\n {{ tab.label }}\r\n <template v-if=\"tab.count\"> ({{ tab.count }})</template>\r\n </button>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\ndefineOptions({ name: 'RelatedDocSubTabs' })\r\n\r\ndefineProps<{\r\n tabs: Array<{ key: string; label: string; count?: number }>\r\n modelValue: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', value: string): void\r\n}>()\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.related-sub-tabs {\r\n display: flex;\r\n gap: 8px;\r\n margin-bottom: 10px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.related-sub-tab {\r\n border: 1px solid #dcdfe6;\r\n background: #fff;\r\n color: #606266;\r\n padding: 6px 14px;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-size: 13px;\r\n}\r\n\r\n.related-sub-tab--active {\r\n color: #409eff;\r\n border-color: #409eff;\r\n background: #ecf5ff;\r\n}\r\n</style>\r\n","/** 统一解析列表接口返回;单条 detail 也会包成数组 */\r\nexport function parseListResponse(res: any): Record<string, any>[] {\r\n if (!res) return []\r\n if (Array.isArray(res)) return res\r\n\r\n const data = res.data !== undefined ? res.data : res\r\n\r\n if (Array.isArray(data)) return data\r\n if (Array.isArray(data?.list)) return data.list\r\n if (Array.isArray(res.list)) return res.list\r\n\r\n // 详情接口返回单对象时,当作一条列表\r\n if (data && typeof data === 'object' && !Array.isArray(data)) {\r\n if (data.receipt_order_no || data.inbound_order_no || data.qc_order_no || data.putaway_order_no) {\r\n return [data]\r\n }\r\n }\r\n\r\n return []\r\n}\r\n\r\n/** 从 list 接口结果取总数,供关联单据 Tab 角标使用 */\r\nexport function parseListTotal(res: any, type?: string): number {\r\n const list = parseListResponse(res)\r\n if (type === 'purchasePlan' || type === 'plan') {\r\n return new Set(list.map((item) => item?.requirement_no).filter(Boolean)).size\r\n }\r\n\r\n if (!res) return 0\r\n\r\n const data = !Array.isArray(res) && res.data !== undefined ? res.data : res\r\n if (data && typeof data === 'object' && !Array.isArray(data)) {\r\n if (typeof data.totalNum === 'number') return data.totalNum\r\n if (typeof data.total === 'number') return data.total\r\n if (typeof data.pageInfo?.totalNum === 'number') return data.pageInfo.totalNum\r\n }\r\n if (!Array.isArray(res)) {\r\n if (typeof res.totalNum === 'number') return res.totalNum\r\n if (typeof res.total === 'number') return res.total\r\n }\r\n\r\n return list.length\r\n}\r\n","<!--\r\n 单个关联单据面板:按 type 取 listAdapter 拉数,再喂给纯展示表\r\n 折叠表用 orders,平铺表用 list\r\n-->\r\n<template>\r\n <component\r\n :is=\"tableComponent\"\r\n v-if=\"tableComponent\"\r\n v-bind=\"tableBindProps\"\r\n />\r\n <el-empty\r\n v-else\r\n description=\"该单据类型暂未配置表格组件\"\r\n :image-size=\"64\"\r\n />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { getRelatedListAdapter, getRelatedTableComponent } from './registry'\r\nimport { parseListResponse } from './utils/parseList'\r\n\r\ndefineOptions({ name: 'RelatedDocPanel' })\r\n\r\nconst props = withDefaults(defineProps<{\r\n type: string\r\n docNo?: string | number\r\n paramKey?: string\r\n pageSize?: number\r\n tableProps?: Record<string, any>\r\n}>(), {\r\n pageSize: 200,\r\n tableProps: () => ({}),\r\n})\r\n\r\nconst loading = ref(false)\r\nconst rows = ref<Record<string, any>[]>([])\r\n\r\nconst tableComponent = computed(() => getRelatedTableComponent(props.type))\r\n\r\n/** receipt/inbound 用 orders,qc/putaway 用 list */\r\nconst COLLAPSE_TYPES = new Set(['receipt', 'inbound'])\r\n\r\nconst tableBindProps = computed(() => {\r\n const base = {\r\n loading: loading.value,\r\n defaultExpandAll: true,\r\n ...props.tableProps,\r\n }\r\n if (COLLAPSE_TYPES.has(props.type)) {\r\n return { ...base, orders: rows.value }\r\n }\r\n return { ...base, list: rows.value }\r\n})\r\n\r\nconst loadData = async () => {\r\n const docNo = props.docNo\r\n const paramKey = props.paramKey\r\n if (docNo == null || docNo === '' || !paramKey) {\r\n rows.value = []\r\n return\r\n }\r\n\r\n const adapter = getRelatedListAdapter(props.type)\r\n if (!adapter) {\r\n console.warn(`[JRelatedDocs] 未注册 listAdapter: ${props.type}`)\r\n rows.value = []\r\n return\r\n }\r\n\r\n loading.value = true\r\n try {\r\n const res = await adapter({\r\n [paramKey]: docNo,\r\n pageIndex: 1,\r\n pageSize: props.pageSize,\r\n page: 1,\r\n })\r\n rows.value = parseListResponse(res)\r\n } catch (err) {\r\n console.error(`[JRelatedDocs] 加载 ${props.type} 失败`, err)\r\n rows.value = []\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => [props.type, props.docNo, props.paramKey, props.pageSize] as const,\r\n () => {\r\n loadData()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n","<!--\r\n 关联单据容器(对齐 wms 业务详情子 Tab 样式)\r\n 用法:\r\n createRelatedDocs({ listAdapters: { receipt, qc, inbound, putaway } })\r\n <JRelatedDocs\r\n :doc-types=\"[{ type: 'inbound', label: '入库单', paramKey: 'source_order_no' }, ...]\"\r\n :doc-no=\"receiptOrderNo\"\r\n />\r\n-->\r\n<template>\r\n <div class=\"j-related-docs\">\r\n <RelatedDocSubTabs\r\n v-if=\"tabs.length\"\r\n v-model=\"activeType\"\r\n :tabs=\"tabs\"\r\n />\r\n <template v-for=\"item in docTypes\" :key=\"item.type\">\r\n <RelatedDocPanel\r\n v-if=\"activeType === item.type\"\r\n :type=\"item.type\"\r\n :doc-no=\"resolveDocNo(item)\"\r\n :param-key=\"resolveParamKey(item)\"\r\n :page-size=\"pageSize\"\r\n :table-props=\"item.tableProps\"\r\n />\r\n </template>\r\n <el-empty\r\n v-if=\"!docTypes.length\"\r\n description=\"暂无关联单据配置\"\r\n :image-size=\"64\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport type { RelatedDocTypeItem } from './types'\r\nimport RelatedDocSubTabs from './RelatedDocSubTabs.vue'\r\nimport RelatedDocPanel from './RelatedDocPanel.vue'\r\nimport { getRelatedListAdapter } from './registry'\r\nimport { parseListTotal } from './utils/parseList'\r\n\r\ndefineOptions({ name: 'JRelatedDocs' })\r\n\r\nconst props = withDefaults(defineProps<{\r\n docTypes: RelatedDocTypeItem[]\r\n docNo?: string | number\r\n paramKey?: string\r\n pageSize?: number\r\n}>(), {\r\n docTypes: () => [],\r\n pageSize: 200,\r\n})\r\n\r\nconst activeType = ref(props.docTypes[0]?.type || '')\r\nconst countMap = ref<Record<string, number>>({})\r\n\r\nconst tabs = computed(() =>\r\n props.docTypes.map((d) => ({\r\n key: d.type,\r\n label: d.label,\r\n count: d.count ?? countMap.value[d.type],\r\n })),\r\n)\r\n\r\nconst resolveDocNo = (item: RelatedDocTypeItem) =>\r\n item.docNo != null && item.docNo !== '' ? item.docNo : props.docNo\r\n\r\nconst resolveParamKey = (item: RelatedDocTypeItem) =>\r\n item.paramKey || props.paramKey || ''\r\n\r\nconst loadCounts = async () => {\r\n const next: Record<string, number> = {}\r\n await Promise.all(\r\n props.docTypes.map(async (item) => {\r\n if (item.count != null) {\r\n next[item.type] = item.count\r\n return\r\n }\r\n const docNo = resolveDocNo(item)\r\n const paramKey = resolveParamKey(item)\r\n const adapter = getRelatedListAdapter(item.type)\r\n if (docNo == null || docNo === '' || !paramKey || !adapter) {\r\n next[item.type] = 0\r\n return\r\n }\r\n try {\r\n const res = await adapter({\r\n [paramKey]: docNo,\r\n pageIndex: 1,\r\n pageSize: 1,\r\n page: 1,\r\n })\r\n next[item.type] = parseListTotal(res, item.type)\r\n } catch {\r\n next[item.type] = 0\r\n }\r\n }),\r\n )\r\n countMap.value = next\r\n}\r\n\r\nwatch(\r\n () => props.docTypes.map((d) => d.type).join(','),\r\n () => {\r\n if (!props.docTypes.some((d) => d.type === activeType.value)) {\r\n activeType.value = props.docTypes[0]?.type || ''\r\n }\r\n },\r\n)\r\n\r\nwatch(\r\n () => [\r\n props.docNo,\r\n props.paramKey,\r\n props.docTypes.map((d) => `${d.type}:${d.docNo ?? ''}:${d.paramKey ?? ''}:${d.count ?? ''}`).join('|'),\r\n ],\r\n () => {\r\n loadCounts()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.j-related-docs {\r\n min-height: 120px;\r\n}\r\n</style>\r\n","<!--\r\n 收货单详情纯展示弹窗\r\n 用法:\r\n <ReceiptOrderDetailView v-model=\"visible\" :receipt-order-no=\"currentNo\" />\r\n 点击单号时:currentNo = 单号; visible = true\r\n - 打开弹窗后按单号拉取并展示\r\n - 不含业务操作(加急/收货/异常等)\r\n - 关联单据:JRelatedDocs(对齐业务详情)\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"92%\"\r\n top=\"4vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"receipt-order-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">收货单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ detail.receipt_order_no || '-' }}</span>\r\n <el-button\r\n v-if=\"detail.receipt_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.receipt_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n <el-tag size=\"small\" :type=\"statusTagType\">{{ statusLabel }}</el-tag>\r\n <span v-if=\"detail.urgent_flag === 2\" class=\"urgent-tag\">急</span>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"receipt-detail\">\r\n <div class=\"section\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-row :gutter=\"16\" class=\"info-grid\">\r\n <el-col :span=\"6\">\r\n <span class=\"label required\">收货仓库:</span>\r\n <span class=\"value\">{{ detail.warehouse_name || '-' }}</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label required\">收货类型:</span>\r\n <span class=\"value\">{{ getReceiptTypeLabel(detail.receipt_type) }}</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label required\">关联单号:</span>\r\n <span class=\"value\">{{ detail.association_order_no || '-' }}</span>\r\n <el-button\r\n v-if=\"detail.association_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.association_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">供应商:</span>\r\n <span class=\"value\">{{ detail.supplier_name || '-' }}</span>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\" class=\"info-grid\">\r\n <el-col :span=\"6\">\r\n <span class=\"label\">采购员:</span>\r\n <span class=\"value\">{{ detail.purchase_leader_name || detail.purchase_leader || '-' }}</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">采购公司:</span>\r\n <span class=\"value\">{{ detail.company_name || detail.company_code || '-' }}</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">收货人:</span>\r\n <span class=\"value\">{{ detail.receipt_leader_name || detail.receipt_leader || '-' }}</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">收货时间:</span>\r\n <span class=\"value\">{{ detail.receipt_date || '-' }}</span>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\" class=\"info-grid\">\r\n <el-col :span=\"12\">\r\n <span class=\"label\">附件:</span>\r\n <span class=\"value\">\r\n <template v-if=\"detail.att_files?.length\">\r\n <el-link\r\n v-for=\"(file, index) in detail.att_files\"\r\n :key=\"index\"\r\n type=\"primary\"\r\n :href=\"file.url\"\r\n target=\"_blank\"\r\n :underline=\"false\"\r\n class=\"file-link\"\r\n >\r\n {{ file.name || `附件${Number(index) + 1}` }}\r\n </el-link>\r\n </template>\r\n <template v-else>-</template>\r\n </span>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <span class=\"label\">备注:</span>\r\n <span class=\"value\">{{ detail.receipt_memo || '-' }}</span>\r\n </el-col>\r\n </el-row>\r\n </div>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"收货明细\" name=\"items\">\r\n <el-table :data=\"items\" border size=\"small\" max-height=\"420\" empty-text=\"暂无收货明细\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.sku_image?.main_image\"\r\n :src=\"row.sku_image.main_image\"\r\n style=\"width: 36px; height: 36px\"\r\n fit=\"cover\"\r\n />\r\n <span v-else class=\"img-empty\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div>{{ row.sku_info?.product_name || '-' }}</div>\r\n <div class=\"sku-text\">\r\n <JSkuLink :code=\"row.sku_code\" />\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单号\" min-width=\"130\" prop=\"purchase_no\" />\r\n <el-table-column label=\"通知收货量\" min-width=\"100\" align=\"right\" prop=\"notice_receive_qty\" />\r\n <el-table-column label=\"实际收货量\" min-width=\"100\" align=\"right\" prop=\"receive_qty\" />\r\n <el-table-column label=\"贴标\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n <div class=\"label-cell\">\r\n <div>通知:{{ formatLabelFlag(row.notice_label_flag) }}</div>\r\n <div v-if=\"shouldShowActualLabel\">实际:{{ formatLabelFlag(row.label_flag) }}</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"质检类型\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ qcTypeMap[row.qc_type] || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"赠品\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">{{ row.is_gift === 1 ? '否' : '是' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"预计到货日期\" min-width=\"120\" prop=\"expected_arrival_date\" />\r\n <el-table-column label=\"店铺账号\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.user_account_name || '-' }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"物流信息\" name=\"logistics\">\r\n <el-table :data=\"logisticsList\" border size=\"small\" max-height=\"420\" empty-text=\"暂无物流信息\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\r\n <el-table-column label=\"物流商\" min-width=\"200\" prop=\"logistics_name\" />\r\n <el-table-column label=\"物流单号\" min-width=\"220\" prop=\"logistics_order_no\" />\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <!-- 对齐业务详情 ReceiptOrderDetail:入库 / 质检 / 上架 -->\r\n <JRelatedDocs\r\n v-if=\"activeTab === 'related' && receiptOrderNo\"\r\n :doc-types=\"relatedDocTypes\"\r\n :doc-no=\"receiptOrderNo\"\r\n />\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"log\">\r\n <div class=\"log-toolbar\">\r\n <el-date-picker\r\n v-model=\"logDateRange\"\r\n type=\"daterange\"\r\n range-separator=\"-\"\r\n start-placeholder=\"开始日期\"\r\n end-placeholder=\"结束日期\"\r\n value-format=\"YYYY-MM-DD\"\r\n clearable\r\n class=\"log-date-picker\"\r\n />\r\n </div>\r\n <el-table :data=\"logPageData\" border size=\"small\" max-height=\"360\" empty-text=\"暂无操作日志\">\r\n <el-table-column label=\"操作时间\" width=\"170\" prop=\"ctime\" />\r\n <el-table-column label=\"操作人\" width=\"120\" prop=\"operator\" />\r\n <el-table-column label=\"操作类型\" width=\"120\" prop=\"type\" />\r\n <el-table-column label=\"操作详情\" min-width=\"280\" prop=\"info\" show-overflow-tooltip />\r\n </el-table>\r\n <div class=\"log-pagination\">\r\n <el-pagination\r\n v-model:current-page=\"logPage\"\r\n v-model:page-size=\"logPageSize\"\r\n :page-sizes=\"[10, 20, 50]\"\r\n :total=\"filteredLogList.length\"\r\n layout=\"total, prev, pager, next, sizes, jumper\"\r\n />\r\n </div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n \r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport {\r\n getReceiptTypeLabel,\r\n getReceiptStatusLabel,\r\n resolveAbnormalSubMemo,\r\n RECEIPT_STATUS_MAP,\r\n} from '../labels/receipt'\r\nimport { copyText } from '../utils/copyText'\r\nimport { flattenOrderItems } from '../utils/flattenOrderItems'\r\nimport { getDocDetailAdapters } from '../registry'\r\nimport { JRelatedDocs } from '../../JRelatedDocs'\r\nimport type { RelatedDocTypeItem } from '../../JRelatedDocs'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n receiptOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst qcTypeMap: Record<number, string> = {\r\n 1: '仓库质检',\r\n 2: '预检',\r\n 3: '免检',\r\n 4: '加工质检',\r\n}\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('items')\r\nconst detail = reactive<Record<string, any>>({})\r\nconst items = ref<Record<string, any>[]>([])\r\nconst logisticsList = ref<Record<string, any>[]>([])\r\nconst logList = ref<Record<string, any>[]>([])\r\nconst logDateRange = ref<string[]>([])\r\nconst logPage = ref(1)\r\nconst logPageSize = ref(10)\r\n\r\nconst statusLabel = computed(() =>\r\n getReceiptStatusLabel(\r\n detail.status,\r\n RECEIPT_STATUS_MAP[detail.status],\r\n resolveAbnormalSubMemo(detail, items.value),\r\n ),\r\n)\r\n\r\nconst statusTagType = computed(() => {\r\n if (detail.status === 500) return 'success'\r\n if (detail.status === 600) return 'danger'\r\n if (detail.status === 300 || detail.status === 400) return 'warning'\r\n return 'info'\r\n})\r\n\r\nconst shouldShowActualLabel = computed(() => (detail.status ?? 0) >= 400)\r\n\r\nconst filteredLogList = computed(() => {\r\n if (logDateRange.value?.length !== 2) return logList.value\r\n const start = logDateRange.value[0]\r\n const end = logDateRange.value[1]\r\n if (!start || !end) return logList.value\r\n return logList.value.filter((item) => {\r\n const date = String(item.ctime || '').slice(0, 10)\r\n if (!date) return false\r\n return date >= start && date <= end\r\n })\r\n})\r\n\r\nconst logPageData = computed(() => {\r\n const start = (logPage.value - 1) * logPageSize.value\r\n return filteredLogList.value.slice(start, start + logPageSize.value)\r\n})\r\n\r\nconst formatLabelFlag = (flag?: number | null) => {\r\n if (flag == null) return '-'\r\n return flag === 1 ? '否' : '是'\r\n}\r\n\r\nconst handleCopy = copyText\r\n\r\n/** 对齐 wms ReceiptOrderDetail 关联单据配置 */\r\nconst relatedDocTypes = computed<RelatedDocTypeItem[]>(() => [\r\n { type: 'inbound', label: '入库单', paramKey: 'source_order_no' },\r\n { type: 'qc', label: '质检单', paramKey: 'receipt_order_no' },\r\n { type: 'putaway', label: '上架单', paramKey: 'source_order_no' },\r\n])\r\n\r\nconst normalizeLogs = (logs: any[]) =>\r\n (logs || []).map((log) => ({\r\n ctime: log.ctime || log.operate_time || log.create_time || '-',\r\n operator: log.operator || log.operator_name || log.user_name || '-',\r\n type: log.type || log.operate_type || log.action_type || '-',\r\n info: log.info || log.content || log.detail || log.log_content || '-',\r\n }))\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n items.value = []\r\n logisticsList.value = []\r\n logList.value = []\r\n activeTab.value = 'items'\r\n logDateRange.value = []\r\n logPage.value = 1\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.receiptOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getReceiptDetail\r\n if (!fetchApi) {\r\n console.warn('[ReceiptOrderDetailView] 未注入 getReceiptDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.receiptOrderNo)\r\n if (res?.code === 1) {\r\n const data = res.data || {}\r\n Object.assign(detail, data)\r\n items.value = flattenOrderItems(data.order_item, false)\r\n logisticsList.value = data.order_logistics || []\r\n logList.value = normalizeLogs(data.receipt_order_log || [])\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[ReceiptOrderDetailView] getReceiptDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst handleOpen = () => {\r\n resetDetail()\r\n fetchDetail()\r\n}\r\n\r\nconst handleClosed = () => {\r\n resetDetail()\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) handleOpen()\r\n else handleClosed()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.receipt-detail {\r\n padding: 0 4px 8px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 16px;\r\n background: #f5f7fa;\r\n border-radius: 4px;\r\n margin-bottom: 16px;\r\n\r\n .header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n\r\n .order-no {\r\n font-size: 16px;\r\n font-weight: 600;\r\n color: #303133;\r\n }\r\n\r\n .copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.urgent-tag {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 20px;\r\n height: 20px;\r\n border-radius: 2px;\r\n background: #f56c6c;\r\n color: #fff;\r\n font-size: 12px;\r\n line-height: 1;\r\n}\r\n\r\n.section {\r\n margin-bottom: 16px;\r\n\r\n .section-title {\r\n font-weight: 600;\r\n font-size: 14px;\r\n padding-left: 8px;\r\n border-left: 3px solid #409eff;\r\n margin-bottom: 12px;\r\n }\r\n}\r\n\r\n.info-grid {\r\n margin-bottom: 10px;\r\n line-height: 28px;\r\n\r\n .label {\r\n color: #606266;\r\n font-size: 13px;\r\n\r\n &.required::before {\r\n content: '*';\r\n color: #f56c6c;\r\n margin-right: 2px;\r\n }\r\n }\r\n\r\n .value {\r\n font-size: 13px;\r\n color: #303133;\r\n }\r\n\r\n .copy-btn {\r\n margin-left: 4px;\r\n padding: 0;\r\n color: #c0c4cc;\r\n vertical-align: middle;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n}\r\n\r\n.file-link + .file-link {\r\n margin-left: 12px;\r\n}\r\n\r\n.detail-tabs {\r\n :deep(.el-tabs__header) {\r\n margin-bottom: 12px;\r\n }\r\n}\r\n\r\n.sku-text,\r\n.img-empty {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.label-cell {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.5;\r\n font-size: 12px;\r\n}\r\n\r\n.log-toolbar {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.log-date-picker {\r\n width: 260px;\r\n}\r\n\r\n.log-pagination {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-top: 12px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 质检单详情纯展示弹窗\r\n 用法:<QcOrderDetailView v-model=\"visible\" :qc-order-no=\"no\" />\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n top=\"4vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">质检单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ detail.qc_no || '-' }}</span>\r\n <el-button v-if=\"detail.qc_no\" link class=\"copy-btn\" @click=\"handleCopy(detail.qc_no)\">\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n <el-tag v-if=\"detail.status\" size=\"small\" :type=\"getStatusTagType(detail.status)\">\r\n {{ getStatusLabel(detail.status) }}\r\n </el-tag>\r\n <el-tag v-if=\"detail.urgent_flag === 2\" type=\"danger\" size=\"small\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"qc-detail\">\r\n <el-row :gutter=\"16\" class=\"info-row\">\r\n <el-col :span=\"14\">\r\n <div class=\"section\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-descriptions :column=\"2\" size=\"small\">\r\n <el-descriptions-item label=\"收货单:\">\r\n <span>{{ detail.receipt_no || '-' }}</span>\r\n <el-button\r\n v-if=\"detail.receipt_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.receipt_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"质检状态:\">\r\n <el-tag v-if=\"detail.status\" size=\"small\" :type=\"getStatusTagType(detail.status)\">\r\n {{ getStatusLabel(detail.status) }}\r\n </el-tag>\r\n <span v-else>-</span>\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"SKU:\">\r\n <JSkuLink :code=\"detail.sku_code\" />\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"品名:\">{{ detail.product_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"图片:\">\r\n <el-image\r\n v-if=\"detail.image\"\r\n :src=\"detail.image\"\r\n style=\"width:32px;height:32px;border-radius:3px\"\r\n fit=\"cover\"\r\n />\r\n <span v-else>-</span>\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"采购公司:\">{{ detail.company_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"供应商:\">{{ detail.supplier_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"采购仓库:\">{{ detail.warehouse_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"采购员:\">{{ detail.purchase_leader_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"到货时间:\">{{ detail.arrival_time || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"质检员:\">{{ detail.qc_member || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"质检时间:\">{{ detail.qc_time || '-' }}</el-descriptions-item>\r\n </el-descriptions>\r\n </div>\r\n </el-col>\r\n <el-col :span=\"10\">\r\n <div v-loading=\"qcStandardsLoading\" class=\"section\">\r\n <div class=\"section-title\">质检标准</div>\r\n <el-table :data=\"detail.qc_standards || []\" border size=\"small\" empty-text=\"暂无质检项\" max-height=\"220\">\r\n <el-table-column label=\"质检项\" prop=\"item_name\" align=\"center\" />\r\n <el-table-column label=\"质检内容\" prop=\"content\" align=\"center\" />\r\n </el-table>\r\n <div class=\"qc-media-panel\">\r\n <div v-if=\"detail.qc_images?.length\" class=\"qc-media-row\">\r\n <div class=\"qc-media-row__label\">图片</div>\r\n <div class=\"qc-media-images\">\r\n <el-image\r\n v-for=\"(url, index) in detail.qc_images\"\r\n :key=\"`${url}-${index}`\"\r\n :src=\"url\"\r\n :preview-src-list=\"detail.qc_images\"\r\n :initial-index=\"Number(index)\"\r\n fit=\"cover\"\r\n class=\"qc-media-thumb\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"qc-media-row\">\r\n <div class=\"qc-media-row__label\">附件</div>\r\n <div v-if=\"detail.qc_att_files?.length\" class=\"qc-media-files\">\r\n <a\r\n v-for=\"(url, index) in detail.qc_att_files\"\r\n :key=\"`${url}-${index}`\"\r\n class=\"qc-file-item\"\r\n :href=\"url\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n >\r\n {{ getQcFileName(url, Number(index)) }}\r\n </a>\r\n </div>\r\n <span v-else class=\"qc-media-empty\">无</span>\r\n </div>\r\n </div>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"质检明细\" name=\"detail\">\r\n <div class=\"qc-meta\">\r\n 质检类型:{{ detail.qc_type || '-' }} 质检方式:{{ detail.qc_method || '-' }}\r\n </div>\r\n <el-descriptions :column=\"3\" size=\"small\" border>\r\n <el-descriptions-item label=\"需质检量\">{{ detail.need_qc_qty ?? '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"抽检量\">{{ detail.sample_qty ?? '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"抽检次品量\">{{ detail.sample_bad_qty ?? '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"总良品量\">{{ detail.total_good_qty ?? '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"总次品量\">{{ detail.total_bad_qty ?? '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"合格率\">{{ passRate }}</el-descriptions-item>\r\n <el-descriptions-item label=\"良品库位\">{{ detail.location_code_good || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"次品库位\">{{ detail.location_code_bad || '-' }}</el-descriptions-item>\r\n </el-descriptions>\r\n <div class=\"memo-line\">备注:{{ detail.remark || '-' }}</div>\r\n <div class=\"memo-line\">\r\n 附件:\r\n <template v-if=\"detail.att_files?.length\">\r\n <el-link\r\n v-for=\"(file, index) in detail.att_files\"\r\n :key=\"index\"\r\n type=\"primary\"\r\n :href=\"file.url\"\r\n target=\"_blank\"\r\n :underline=\"false\"\r\n class=\"file-link\"\r\n >\r\n {{ file.name || `附件${Number(index) + 1}` }}\r\n </el-link>\r\n </template>\r\n <span v-else class=\"muted\">无</span>\r\n </div>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <!-- 对齐业务详情 qcOrderDetail:收货 / 入库 / 上架 -->\r\n <JRelatedDocs\r\n v-if=\"activeTab === 'related' && relatedDocTypes.length\"\r\n :doc-types=\"relatedDocTypes\"\r\n />\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"log\">\r\n <div class=\"log-filter\">\r\n <el-date-picker\r\n v-model=\"logDateRange\"\r\n type=\"datetimerange\"\r\n range-separator=\"~\"\r\n start-placeholder=\"开始时间\"\r\n end-placeholder=\"结束时间\"\r\n value-format=\"YYYY-MM-DD HH:mm:ss\"\r\n size=\"small\"\r\n style=\"width:380px\"\r\n />\r\n </div>\r\n <el-table :data=\"logPageData\" border size=\"small\" max-height=\"360\" empty-text=\"暂无操作日志\">\r\n <el-table-column label=\"操作时间\" min-width=\"160\" prop=\"op_time\" />\r\n <el-table-column label=\"操作人\" min-width=\"100\" prop=\"operator\" />\r\n <el-table-column label=\"操作类型\" min-width=\"100\" prop=\"op_type\" />\r\n <el-table-column label=\"操作详情\" min-width=\"280\" prop=\"op_detail\" show-overflow-tooltip />\r\n </el-table>\r\n <div class=\"log-pagination\">\r\n <el-pagination\r\n v-model:current-page=\"logPage\"\r\n v-model:page-size=\"logPageSize\"\r\n :page-sizes=\"[10, 20, 50]\"\r\n layout=\"total, prev, pager, next, sizes, jumper\"\r\n :total=\"logFiltered.length\"\r\n />\r\n </div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n \r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { copyText } from '../utils/copyText'\r\nimport { getDocDetailAdapters } from '../registry'\r\nimport { JRelatedDocs } from '../../JRelatedDocs'\r\nimport type { RelatedDocTypeItem } from '../../JRelatedDocs'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n qcOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst QC_STATUS_MAP: Record<number, string> = {\r\n 100: '待审核',\r\n 200: '已驳回',\r\n 300: '质检中',\r\n 400: '已质检',\r\n}\r\n\r\nconst loading = ref(false)\r\nconst qcStandardsLoading = ref(false)\r\nconst activeTab = ref('detail')\r\nconst logDateRange = ref<[string, string] | null>(null)\r\nconst logPage = ref(1)\r\nconst logPageSize = ref(10)\r\nconst logs = ref<any[]>([])\r\n\r\nconst detail = reactive<Record<string, any>>({\r\n qc_no: '',\r\n receipt_no: '',\r\n status: 0,\r\n sku_code: '',\r\n product_name: '',\r\n image: '',\r\n company_name: '',\r\n supplier_name: '',\r\n warehouse_name: '',\r\n purchase_leader_name: '',\r\n arrival_time: '',\r\n qc_member: '',\r\n qc_time: '',\r\n qc_type: '',\r\n qc_method: '',\r\n remark: '',\r\n urgent_flag: 1,\r\n need_qc_qty: 0,\r\n sample_qty: 0,\r\n sample_bad_qty: 0,\r\n total_good_qty: 0,\r\n total_bad_qty: 0,\r\n location_code_good: '',\r\n location_code_bad: '',\r\n att_files: [],\r\n qc_standards: [],\r\n qc_images: [] as string[],\r\n qc_att_files: [] as string[],\r\n})\r\n\r\nconst handleCopy = copyText\r\n\r\n/** 对齐 wms qcOrderDetail:收货按 receipt_order_no;入库/上架按 qc_order_no */\r\nconst relatedDocTypes = computed<RelatedDocTypeItem[]>(() => {\r\n const types: RelatedDocTypeItem[] = []\r\n const receiptNo = detail.receipt_no || detail.receipt_order_no\r\n const qcNo = detail.qc_no || props.qcOrderNo\r\n if (receiptNo) {\r\n types.push({\r\n type: 'receipt',\r\n label: '收货单',\r\n paramKey: 'receipt_order_no',\r\n docNo: receiptNo,\r\n tableProps: { showQcType: true },\r\n })\r\n }\r\n if (qcNo) {\r\n types.push(\r\n { type: 'inbound', label: '入库单', paramKey: 'qc_order_no', docNo: qcNo },\r\n { type: 'putaway', label: '上架单', paramKey: 'qc_order_no', docNo: qcNo },\r\n )\r\n }\r\n return types\r\n})\r\n\r\nconst getStatusLabel = (status?: number) =>\r\n status != null ? (QC_STATUS_MAP[status] || '') : ''\r\n\r\nconst getStatusTagType = (status: number) => {\r\n if (status === 300 || status === 400) return 'success'\r\n if (status === 100) return 'warning'\r\n if (status === 200) return 'danger'\r\n return 'info'\r\n}\r\n\r\nconst passRate = computed(() => {\r\n const good = Number(detail.total_good_qty || 0)\r\n const bad = Number(detail.total_bad_qty || 0)\r\n if (good + bad <= 0) return '-'\r\n return `${((good / (good + bad)) * 100).toFixed(2)}%`\r\n})\r\n\r\nconst parseQcFileList = (value: any): string[] => {\r\n if (!value) return []\r\n let list = value\r\n if (typeof list === 'string') {\r\n try {\r\n list = JSON.parse(list)\r\n } catch {\r\n return list.trim() ? [list.trim()] : []\r\n }\r\n }\r\n if (!Array.isArray(list)) return []\r\n return list\r\n .map((item: any) => {\r\n if (typeof item === 'string') return item\r\n return item?.url || item?.file_url || item?.main_image || ''\r\n })\r\n .filter(Boolean)\r\n}\r\n\r\nconst getQcFileName = (url: string, index: number) => {\r\n try {\r\n const path = url.split('?')[0] ?? url\r\n const name = decodeURIComponent(path.split('/').pop() || '')\r\n return name || `附件${index + 1}`\r\n } catch {\r\n return `附件${index + 1}`\r\n }\r\n}\r\n\r\nconst logFiltered = computed(() => {\r\n if (!logDateRange.value) return logs.value\r\n const [start, end] = logDateRange.value\r\n return logs.value.filter((l) => l.op_time >= start && l.op_time <= end)\r\n})\r\n\r\nconst logPageData = computed(() => {\r\n const s = (logPage.value - 1) * logPageSize.value\r\n return logFiltered.value.slice(s, s + logPageSize.value)\r\n})\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => {\r\n if (Array.isArray(detail[key])) detail[key] = []\r\n else if (typeof detail[key] === 'number') detail[key] = 0\r\n else detail[key] = key === 'urgent_flag' ? 1 : ''\r\n })\r\n logs.value = []\r\n activeTab.value = 'detail'\r\n logDateRange.value = null\r\n logPage.value = 1\r\n}\r\n\r\nconst fetchSkuQcStandardsData = async (skuCode: string) => {\r\n if (!skuCode) {\r\n detail.qc_standards = []\r\n detail.qc_images = []\r\n detail.qc_att_files = []\r\n return\r\n }\r\n const fetchSku = getDocDetailAdapters().getSkuDetail\r\n if (!fetchSku) {\r\n detail.qc_standards = []\r\n detail.qc_images = []\r\n detail.qc_att_files = []\r\n return\r\n }\r\n try {\r\n qcStandardsLoading.value = true\r\n const res: any = await fetchSku(skuCode)\r\n if (res?.code === 1 && res.data?.qc_info) {\r\n const qcInfo = res.data.qc_info\r\n let list = qcInfo.qc_content\r\n if (typeof list === 'string') {\r\n try {\r\n list = JSON.parse(list)\r\n } catch {\r\n list = []\r\n }\r\n }\r\n detail.qc_standards = Array.isArray(list)\r\n ? list.map((item: any) => ({\r\n item_name: item.qc_item || item.item_name || '-',\r\n content: item.qc_content || item.content || '-',\r\n }))\r\n : []\r\n detail.qc_images = parseQcFileList(qcInfo.images)\r\n detail.qc_att_files = parseQcFileList(qcInfo.att_files)\r\n } else {\r\n detail.qc_standards = []\r\n detail.qc_images = []\r\n detail.qc_att_files = []\r\n }\r\n } catch (err) {\r\n console.error('[QcOrderDetailView] getSkuDetail adapter error:', err)\r\n detail.qc_standards = []\r\n detail.qc_images = []\r\n detail.qc_att_files = []\r\n } finally {\r\n qcStandardsLoading.value = false\r\n }\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.qcOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getQcDetail\r\n if (!fetchApi) {\r\n console.warn('[QcOrderDetailView] 未注入 getQcDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.qcOrderNo)\r\n if (res?.code === 1 && res.data) {\r\n Object.assign(detail, {\r\n qc_no: res.data.qc_order_no || '',\r\n receipt_no: res.data.receipt_order_no || '',\r\n status: res.data.status ?? 0,\r\n sku_code: res.data.sku_code || '',\r\n product_name: res.data.sku_info?.product_name || '',\r\n image: res.data.sku_image?.main_image || '',\r\n company_name: res.data.company_name || '',\r\n supplier_name: res.data.supplier_name || '',\r\n warehouse_name: res.data.warehouse_name || '',\r\n purchase_leader_name: res.data.purchase_leader_name || '',\r\n arrival_time: res.data.receipt_date || '',\r\n qc_member: res.data.qc_leader_name || res.data.qc_leader || '',\r\n qc_time: res.data.qc_date || '',\r\n qc_type:\r\n res.data.qc_type === 1\r\n ? '仓库'\r\n : res.data.qc_type === 2\r\n ? '预检'\r\n : res.data.qc_type === 3\r\n ? '免检'\r\n : res.data.qc_type === 4\r\n ? '加工质检'\r\n : '',\r\n qc_method: res.data.qc_method === 1 ? '抽检' : res.data.qc_method === 2 ? '全检' : '',\r\n remark: res.data.qc_memo || res.data.review_memo || '',\r\n urgent_flag: res.data.urgent_flag || 1,\r\n sample_qty: res.data.sample_qty || 0,\r\n sample_bad_qty: res.data.sample_bad_qty || 0,\r\n total_good_qty: res.data.total_good_qty || 0,\r\n total_bad_qty: res.data.total_bad_qty || 0,\r\n location_code_good: res.data.location_code_good || '',\r\n location_code_bad: res.data.location_code_bad || '',\r\n need_qc_qty: res.data.need_qc_qty || 0,\r\n att_files: res.data.att_files || [],\r\n qc_standards: [],\r\n })\r\n fetchSkuQcStandardsData(res.data.sku_code || '')\r\n logs.value = (res.data.qc_order_log || []).map((log: any) => ({\r\n op_time: log.ctime || '',\r\n operator: log.operator || '',\r\n op_type: log.type || '',\r\n op_detail: log.info || '',\r\n }))\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[QcOrderDetailView] getQcDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst handleOpen = () => {\r\n resetDetail()\r\n fetchDetail()\r\n}\r\n\r\nconst handleClosed = () => {\r\n resetDetail()\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) handleOpen()\r\n else handleClosed()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.qc-detail {\r\n padding: 0 4px 8px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n margin-bottom: 16px;\r\n\r\n .order-no {\r\n font-size: 16px;\r\n font-weight: 600;\r\n }\r\n\r\n .copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n}\r\n\r\n.info-row {\r\n margin-bottom: 12px;\r\n}\r\n\r\n.section {\r\n margin-bottom: 12px;\r\n}\r\n\r\n.section-title {\r\n font-size: 14px;\r\n font-weight: 500;\r\n padding-left: 10px;\r\n border-left: 3px solid #409eff;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.copy-btn {\r\n margin-left: 4px;\r\n padding: 0;\r\n color: #c0c4cc;\r\n vertical-align: middle;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n}\r\n\r\n.qc-media-panel {\r\n margin-top: 10px;\r\n}\r\n\r\n.qc-media-row {\r\n display: flex;\r\n gap: 8px;\r\n margin-top: 8px;\r\n font-size: 12px;\r\n\r\n &__label {\r\n width: 36px;\r\n color: #606266;\r\n flex-shrink: 0;\r\n }\r\n}\r\n\r\n.qc-media-images {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 6px;\r\n}\r\n\r\n.qc-media-thumb {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 4px;\r\n}\r\n\r\n.qc-media-files {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n}\r\n\r\n.qc-file-item {\r\n color: #409eff;\r\n text-decoration: none;\r\n}\r\n\r\n.qc-media-empty,\r\n.muted {\r\n color: #909399;\r\n}\r\n\r\n.qc-meta {\r\n font-size: 13px;\r\n color: #606266;\r\n margin-bottom: 8px;\r\n}\r\n\r\n.memo-line {\r\n font-size: 13px;\r\n color: #606266;\r\n margin-top: 8px;\r\n}\r\n\r\n.file-link + .file-link {\r\n margin-left: 12px;\r\n}\r\n\r\n.log-filter {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.log-pagination {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-top: 12px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","export const INBOUND_TYPE_MAP: Record<number, string> = {\r\n 1: '采购入库',\r\n 2: '调拨入库',\r\n 3: '加工入库',\r\n 4: '换货入库',\r\n 5: '补货入库',\r\n 99: '其他入库',\r\n}\r\n\r\nexport const getInboundTypeLabel = (type?: number | string | null) => {\r\n if (type == null || type === '') return '-'\r\n const key = Number(type)\r\n if (!Number.isFinite(key)) return '-'\r\n return INBOUND_TYPE_MAP[key] ?? '-'\r\n}\r\n\r\nexport const INBOUND_STATUS_MAP: Record<number, string> = {\r\n 100: '待上架完成',\r\n 200: '部分入库',\r\n 300: '已完成',\r\n}\r\n\r\nexport const getInboundStatusLabel = (status?: number | string | null) => {\r\n if (status == null || status === '') return '-'\r\n const key = Number(status)\r\n if (!Number.isFinite(key)) return '-'\r\n return INBOUND_STATUS_MAP[key] ?? String(status)\r\n}\r\n\r\nexport interface InboundLocationItem {\r\n inventory_status?: number\r\n location_code?: string\r\n inbound_qty?: number\r\n inventory_status_name?: string\r\n location_type?: string\r\n location_type_name?: string\r\n location_display?: string\r\n}\r\n\r\nexport const formatInboundLocationList = (\r\n locationList?: InboundLocationItem[] | null,\r\n inventoryStatus?: number,\r\n) => {\r\n const list = (locationList || []).filter((item) => {\r\n if (inventoryStatus == null) return true\r\n return Number(item.inventory_status || 1) === inventoryStatus\r\n })\r\n if (!list.length) return '-'\r\n return list\r\n .map((item) => {\r\n if (item.location_display) return item.location_display\r\n const code = (item.location_code || '').trim() || '-'\r\n const qty = Number(item.inbound_qty || 0)\r\n const base = qty > 0 ? `${code}*${qty}` : code\r\n return item.location_type_name ? `${base}(${item.location_type_name})` : base\r\n })\r\n .join(',')\r\n}\r\n\r\nexport const getInboundGoodLocation = (row?: { location_list?: InboundLocationItem[] } | null) => {\r\n return formatInboundLocationList(row?.location_list, 1)\r\n}\r\n\r\nexport const getInboundBadLocation = (row?: { location_list?: InboundLocationItem[] } | null) => {\r\n return formatInboundLocationList(row?.location_list, 2)\r\n}\r\n","<!--\r\n 入库单详情纯展示弹窗\r\n 用法:<InboundOrderDetailView v-model=\"visible\" :inbound-order-no=\"no\" />\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n top=\"4vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">入库单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ detail.inbound_order_no || '-' }}</span>\r\n <el-button\r\n v-if=\"detail.inbound_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.inbound_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n <el-tag size=\"small\" :type=\"statusTagType as any\">{{ getInboundStatusLabel(detail.status) }}</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"inbound-detail\">\r\n <div class=\"section\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-row :gutter=\"0\" class=\"info-grid\">\r\n <el-col :span=\"6\"><span class=\"label\">入库类型:</span>{{ getInboundTypeLabel(detail.inbound_type) }}</el-col>\r\n <el-col :span=\"6\"><span class=\"label\">入库仓库:</span>{{ detail.warehouse_name || '-' }}</el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">关联单号:</span>{{ detail.source_order_no || '-' }}\r\n <el-button\r\n v-if=\"detail.source_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.source_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n </el-col>\r\n <el-col :span=\"6\"><span class=\"label\">入库时间:</span>{{ detail.inbound_date || '-' }}</el-col>\r\n <el-col :span=\"6\"><span class=\"label\">创建时间:</span>{{ detail.ctime || '-' }}</el-col>\r\n <el-col :span=\"6\"><span class=\"label\">创建人:</span>{{ detail.inbound_leader_name || '-' }}</el-col>\r\n <el-col :span=\"6\"><span class=\"label\">总入库量:</span>{{ totalQty }}</el-col>\r\n <el-col :span=\"6\" />\r\n <el-col :span=\"24\" class=\"att-row\">\r\n <span class=\"label\">附件:</span>\r\n <template v-if=\"detail.att_files?.length\">\r\n <el-link\r\n v-for=\"(file, index) in detail.att_files\"\r\n :key=\"index\"\r\n type=\"primary\"\r\n :href=\"file.url\"\r\n target=\"_blank\"\r\n :underline=\"false\"\r\n class=\"att-link\"\r\n >\r\n {{ file.name || `附件${Number(index) + 1}` }}\r\n </el-link>\r\n </template>\r\n <span v-else>-</span>\r\n </el-col>\r\n <el-col :span=\"12\" class=\"memo-row\">\r\n <span class=\"label\">备注:</span>{{ detail.inbound_memo || '-' }}\r\n </el-col>\r\n </el-row>\r\n </div>\r\n\r\n <el-tabs v-model=\"activeTab\">\r\n <el-tab-pane label=\"入库产品\" name=\"products\">\r\n <el-table :data=\"productItems\" border size=\"small\" max-height=\"420\" empty-text=\"暂无入库明细\">\r\n <el-table-column label=\"序号\" width=\"55\" align=\"center\">\r\n <template #default=\"{ $index }\"><span style=\"color:#409eff\">{{ $index + 1 }}</span></template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.sku_image?.main_image\"\r\n :src=\"row.sku_image.main_image\"\r\n style=\"width:40px;height:40px\"\r\n fit=\"cover\"\r\n />\r\n <span v-else class=\"no-img\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-info\">\r\n <div>{{ row.sku_info?.product_name || '-' }}</div>\r\n <div class=\"sku-code\">\r\n <JSkuLink :code=\"row.sku_code\" />\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单号\" min-width=\"130\">\r\n <template #default=\"{ row }\">\r\n <span>{{ row.purchase_no || '-' }}</span>\r\n <el-button\r\n v-if=\"row.purchase_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click.stop=\"handleCopy(row.purchase_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号\" min-width=\"120\">\r\n <template #default=\"{ row }\">{{ row.user_account_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"入库量\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ row.inbound_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"良品量\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ row.good_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"次品量\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ row.bad_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"上架单号\" min-width=\"150\">\r\n <template #default=\"{ row }\">{{ row.putaway_order_no || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"待检量\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ row.pending_qc_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"可用库位\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <span class=\"location-text\">{{ getInboundGoodLocation(row) }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"次品库位\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <span class=\"location-text\">{{ getInboundBadLocation(row) }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"备注\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.inbound_memo || '-' }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <!-- 对齐业务详情 InboundReceiptDetail:按入库类型动态 Tab(标准表部分) -->\r\n <JRelatedDocs\r\n v-if=\"activeTab === 'related' && relatedDocTypes.length\"\r\n :doc-types=\"relatedDocTypes\"\r\n />\r\n <el-empty\r\n v-else-if=\"activeTab === 'related'\"\r\n description=\"当前入库类型暂无标准关联单据表\"\r\n :image-size=\"72\"\r\n />\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <div class=\"log-filter\">\r\n <el-date-picker\r\n v-model=\"logDateRange\"\r\n type=\"datetimerange\"\r\n range-separator=\"~\"\r\n start-placeholder=\"开始时间\"\r\n end-placeholder=\"结束时间\"\r\n value-format=\"YYYY-MM-DD HH:mm:ss\"\r\n style=\"width:380px\"\r\n />\r\n </div>\r\n <el-table :data=\"logPageData\" border size=\"small\" max-height=\"360\" empty-text=\"暂无操作日志\">\r\n <el-table-column label=\"操作时间\" width=\"160\" prop=\"ctime\" />\r\n <el-table-column label=\"操作人\" width=\"100\">\r\n <template #default=\"{ row }\">{{ row.operator || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"操作类型\" width=\"100\" prop=\"type\" />\r\n <el-table-column label=\"操作详情\" min-width=\"260\" prop=\"info\" show-overflow-tooltip />\r\n </el-table>\r\n <el-pagination\r\n v-model:current-page=\"logPage\"\r\n v-model:page-size=\"logPageSize\"\r\n :page-sizes=\"[10, 20, 50]\"\r\n :total=\"logFiltered.length\"\r\n layout=\"total, prev, pager, next, sizes, jumper\"\r\n class=\"log-pagination\"\r\n />\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n \r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { flattenOrderItems } from '../utils/flattenOrderItems'\r\nimport { copyText } from '../utils/copyText'\r\nimport {\r\n getInboundTypeLabel,\r\n getInboundStatusLabel,\r\n getInboundGoodLocation,\r\n getInboundBadLocation,\r\n} from '../labels/inbound'\r\nimport { getDocDetailAdapters } from '../registry'\r\nimport { JRelatedDocs } from '../../JRelatedDocs'\r\nimport type { RelatedDocTypeItem } from '../../JRelatedDocs'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n inboundOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('products')\r\nconst detail = ref<Record<string, any>>({})\r\nconst logDateRange = ref<[string, string] | null>(null)\r\nconst logPage = ref(1)\r\nconst logPageSize = ref(10)\r\n\r\nconst handleCopy = copyText\r\nconst productItems = computed(() => flattenOrderItems(detail.value.order_item, false))\r\nconst totalQty = computed(() =>\r\n productItems.value.reduce((s: number, i: any) => s + (i.inbound_qty || 0), 0),\r\n)\r\n\r\n/**\r\n * 对齐 wms INBOUND_RELATED_DOC_TABS 中已有标准表的部分:\r\n * 采购/换货/补货:receipt + qc + putaway\r\n * 加工:qc + putaway\r\n * 其他:receipt + putaway\r\n * 调拨:仅 putaway(调拨单表未标准化,二期)\r\n */\r\nconst relatedDocTypes = computed<RelatedDocTypeItem[]>(() => {\r\n const inboundType = Number(detail.value.inbound_type)\r\n const sourceNo = detail.value.source_order_no || ''\r\n const inboundNo = props.inboundOrderNo || detail.value.inbound_order_no || ''\r\n const types: RelatedDocTypeItem[] = []\r\n\r\n const tabKeys: string[] = (() => {\r\n if (!Number.isFinite(inboundType)) return []\r\n if ([1, 4, 5].includes(inboundType)) return ['receipt', 'qc', 'putaway']\r\n if (inboundType === 3) return ['qc', 'putaway']\r\n if (inboundType === 2) return ['putaway']\r\n if (inboundType === 99) return ['receipt', 'putaway']\r\n return []\r\n })()\r\n\r\n tabKeys.forEach((key) => {\r\n if (key === 'receipt' && sourceNo) {\r\n types.push({\r\n type: 'receipt',\r\n label: '收货单',\r\n paramKey: 'receipt_order_no',\r\n docNo: sourceNo,\r\n })\r\n }\r\n if (key === 'qc' && sourceNo) {\r\n types.push({\r\n type: 'qc',\r\n label: '质检单',\r\n paramKey: 'receipt_order_no',\r\n docNo: sourceNo,\r\n })\r\n }\r\n if (key === 'putaway' && inboundNo) {\r\n types.push({\r\n type: 'putaway',\r\n label: '上架单',\r\n paramKey: 'inbound_order_no',\r\n docNo: inboundNo,\r\n })\r\n }\r\n })\r\n\r\n return types\r\n})\r\n\r\nconst statusTagType = computed(() => {\r\n const map: Record<number, string> = { 100: 'warning', 200: 'primary', 300: 'success' }\r\n return map[detail.value.status] ?? 'info'\r\n})\r\n\r\nconst logFiltered = computed(() => {\r\n const logs: any[] = detail.value.inbound_order_log || []\r\n if (!logDateRange.value) return logs\r\n const [start, end] = logDateRange.value\r\n return logs.filter((l) => l.ctime >= start && l.ctime <= end)\r\n})\r\n\r\nconst logPageData = computed(() => {\r\n const s = (logPage.value - 1) * logPageSize.value\r\n return logFiltered.value.slice(s, s + logPageSize.value)\r\n})\r\n\r\nconst resetDetail = () => {\r\n detail.value = {}\r\n activeTab.value = 'products'\r\n logDateRange.value = null\r\n logPage.value = 1\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.inboundOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getInboundDetail\r\n if (!fetchApi) {\r\n console.warn('[InboundOrderDetailView] 未注入 getInboundDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.inboundOrderNo)\r\n detail.value = res?.code === 1 ? (res.data ?? {}) : {}\r\n } catch (err) {\r\n console.error('[InboundOrderDetailView] getInboundDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst handleOpen = () => {\r\n resetDetail()\r\n fetchDetail()\r\n}\r\n\r\nconst handleClosed = () => {\r\n resetDetail()\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) handleOpen()\r\n else handleClosed()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.inbound-detail {\r\n padding: 0 4px 8px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n margin-bottom: 16px;\r\n\r\n .order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n }\r\n\r\n .copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n}\r\n\r\n.section {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.section-title {\r\n font-size: 15px;\r\n font-weight: 500;\r\n color: #303133;\r\n padding-left: 12px;\r\n border-left: 3px solid #409eff;\r\n margin-bottom: 14px;\r\n}\r\n\r\n.info-grid {\r\n font-size: 13px;\r\n color: #303133;\r\n row-gap: 12px;\r\n\r\n .label {\r\n color: #606266;\r\n margin-right: 4px;\r\n }\r\n\r\n .att-row,\r\n .memo-row {\r\n margin-top: 4px;\r\n }\r\n\r\n .copy-btn {\r\n margin-left: 4px;\r\n padding: 0;\r\n color: #c0c4cc;\r\n vertical-align: middle;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n}\r\n\r\n.att-link + .att-link {\r\n margin-left: 12px;\r\n}\r\n\r\n.product-info {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n font-size: 12px;\r\n\r\n .sku-code {\r\n color: #409eff;\r\n }\r\n}\r\n\r\n.no-img {\r\n font-size: 12px;\r\n color: #909399;\r\n}\r\n\r\n.location-text {\r\n font-size: 12px;\r\n color: #606266;\r\n word-break: break-all;\r\n}\r\n\r\n.copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n}\r\n\r\n.log-filter {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.log-pagination {\r\n margin-top: 12px;\r\n justify-content: flex-end;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","export const PUTAWAY_STATUS_COMPLETED = 300\r\n","<!--\r\n 上架单详情纯展示弹窗\r\n 用法:<PutawayOrderDetailView v-model=\"visible\" :putaway-order-no=\"no\" />\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n top=\"4vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">上架单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ detail.putaway_order_no || '-' }}</span>\r\n <el-button\r\n v-if=\"detail.putaway_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.putaway_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n <el-tag :type=\"getStatusTagType(detail.status)\" size=\"small\">\r\n {{ detail.status_name || '-' }}\r\n </el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"putaway-detail\">\r\n <el-descriptions :column=\"3\" border size=\"small\">\r\n <el-descriptions-item label=\"上架单\">{{ detail.putaway_order_no || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"质检单\">{{ detail.qc_order_no || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"入库单\">{{ detail.inbound_order_no || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"收货单\">{{ detail.receipt_order_no || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"入库类型\">{{ detail.inbound_type_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"状态\">\r\n <el-tag :type=\"getStatusTagType(detail.status)\" size=\"small\">{{ detail.status_name || '-' }}</el-tag>\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"仓库\">{{ detail.warehouse_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"采购员\">{{ detail.purchase_leader_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"收货员\">{{ detail.receipt_leader_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"质检员\">{{ detail.qc_leader_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"上架员\">{{ detail.putaway_leader_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"备注\">{{ detail.putaway_memo || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"收货时间\">{{ detail.receipt_date || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"质检时间\">{{ detail.qc_date || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"上架时间\">{{ detail.putaway_time || '-' }}</el-descriptions-item>\r\n </el-descriptions>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"上架明细\" name=\"items\">\r\n <el-table :data=\"detail.order_item || []\" border size=\"small\" max-height=\"320\" empty-text=\"暂无上架明细\">\r\n <el-table-column label=\"采购单\" prop=\"purchase_no\" min-width=\"130\" />\r\n <el-table-column label=\"店铺\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ row.user_account_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"SKU\" min-width=\"120\">\r\n <template #default=\"{ row }\">\r\n <JSkuLink :code=\"row.sku_code\" />\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名\" min-width=\"140\">\r\n <template #default=\"{ row }\">{{ row.sku_info?.product_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"可用数量\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ getPutawayItemGoodQty(row) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"次品数量\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ getPutawayItemBadQty(row) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n <div class=\"sub-title\">上架库位明细</div>\r\n <el-table\r\n :data=\"detail.location_list || []\"\r\n border\r\n size=\"small\"\r\n max-height=\"280\"\r\n empty-text=\"暂无上架库位\"\r\n >\r\n <el-table-column label=\"库存状态\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n {{ row.inventory_status_name || (Number(row.inventory_status) === 2 ? '次品' : '良品') }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"上架库位\" min-width=\"180\">\r\n <template #default=\"{ row }\">{{ row.location_display || row.location_code || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"上架数量\" prop=\"putaway_qty\" min-width=\"100\" />\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <!-- 对齐业务详情 PutawayOrderDetail:质检 / 入库 -->\r\n <JRelatedDocs\r\n v-if=\"activeTab === 'related' && relatedDocTypes.length\"\r\n :doc-types=\"relatedDocTypes\"\r\n />\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n \r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { PUTAWAY_STATUS_COMPLETED } from '../labels/putaway'\r\nimport { copyText } from '../utils/copyText'\r\nimport { getDocDetailAdapters } from '../registry'\r\nimport { JRelatedDocs } from '../../JRelatedDocs'\r\nimport type { RelatedDocTypeItem } from '../../JRelatedDocs'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n putawayOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('items')\r\nconst detail = ref<Record<string, any>>({})\r\nconst handleCopy = copyText\r\n\r\n/** 对齐 wms PutawayOrderDetail:用详情里的质检单号 / 入库单号查关联 */\r\nconst relatedDocTypes = computed<RelatedDocTypeItem[]>(() => {\r\n const types: RelatedDocTypeItem[] = []\r\n const qcNo = detail.value.qc_order_no\r\n const inboundNo = detail.value.inbound_order_no\r\n if (qcNo) {\r\n types.push({ type: 'qc', label: '质检单', paramKey: 'qc_order_no', docNo: qcNo })\r\n }\r\n if (inboundNo) {\r\n types.push({\r\n type: 'inbound',\r\n label: '入库单',\r\n paramKey: 'inbound_order_no',\r\n docNo: inboundNo,\r\n })\r\n }\r\n return types\r\n})\r\n\r\nconst getStatusTagType = (status: number) => {\r\n if (status === 300) return 'success'\r\n if (status === 100 || status === 200) return 'warning'\r\n return 'info'\r\n}\r\n\r\nconst getPutawayItemGoodQty = (row: Record<string, any>) => {\r\n const status = Number(detail.value?.status)\r\n if (status === PUTAWAY_STATUS_COMPLETED) return Number(row?.good_qty ?? 0)\r\n return Number(row?.pending_good_qty ?? 0)\r\n}\r\n\r\nconst getPutawayItemBadQty = (row: Record<string, any>) => {\r\n const status = Number(detail.value?.status)\r\n if (status === PUTAWAY_STATUS_COMPLETED) return Number(row?.bad_qty ?? 0)\r\n return Number(row?.pending_bad_qty ?? 0)\r\n}\r\n\r\nconst resetDetail = () => {\r\n detail.value = {}\r\n activeTab.value = 'items'\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.putawayOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getPutawayDetail\r\n if (!fetchApi) {\r\n console.warn('[PutawayOrderDetailView] 未注入 getPutawayDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.putawayOrderNo)\r\n detail.value = res?.code === 1 ? (res.data ?? {}) : {}\r\n } catch (err) {\r\n console.error('[PutawayOrderDetailView] getPutawayDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst handleOpen = () => {\r\n resetDetail()\r\n fetchDetail()\r\n}\r\n\r\nconst handleClosed = () => {\r\n resetDetail()\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) handleOpen()\r\n else handleClosed()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.putaway-detail {\r\n padding: 0 4px 8px;\r\n min-height: 200px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n margin-bottom: 14px;\r\n\r\n .order-no {\r\n font-size: 16px;\r\n font-weight: 600;\r\n }\r\n\r\n .copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n}\r\n\r\n.detail-tabs {\r\n margin-top: 12px;\r\n}\r\n\r\n.sub-title {\r\n margin-top: 12px;\r\n margin-bottom: 6px;\r\n font-weight: 500;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 出库单详情纯展示弹窗\r\n 用法:<DeliveryOrderDetailView v-model=\"visible\" :outbound-order-no=\"no\" />\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n top=\"4vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">出库单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ detail.outbound_order_no || '-' }}</span>\r\n <el-button\r\n v-if=\"detail.outbound_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.outbound_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n <el-tag size=\"small\" :type=\"statusTagType as any\">{{ statusMap[detail.status] || '-' }}</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"delivery-detail\">\r\n <div class=\"section\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-row :gutter=\"0\" class=\"info-grid\">\r\n <el-col :span=\"6\">\r\n <span class=\"label\">出库类型:</span>{{ outboundTypeMap[detail.outbound_type] || '-' }}\r\n </el-col>\r\n <el-col :span=\"6\"><span class=\"label\">出库仓库:</span>{{ detail.warehouse_name || '-' }}</el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">关联单号:</span>{{ detail.source_order_no || '-' }}\r\n <el-button\r\n v-if=\"detail.source_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.source_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n </el-col>\r\n <el-col :span=\"6\"><span class=\"label\">出库时间:</span>{{ detail.outbound_date || '-' }}</el-col>\r\n <el-col :span=\"6\"><span class=\"label\">创建时间:</span>{{ detail.ctime || '-' }}</el-col>\r\n <el-col :span=\"6\"><span class=\"label\">创建人:</span>{{ detail.outbound_leader_name || '-' }}</el-col>\r\n <el-col :span=\"6\"><span class=\"label\">总出库量:</span>{{ totalQty }}</el-col>\r\n <el-col :span=\"6\" />\r\n <el-col :span=\"24\" class=\"att-row\">\r\n <span class=\"label\">附件:</span>\r\n <template v-if=\"detail.att_files?.length\">\r\n <el-link\r\n v-for=\"(file, index) in detail.att_files\"\r\n :key=\"index\"\r\n type=\"primary\"\r\n :href=\"file.url\"\r\n target=\"_blank\"\r\n :underline=\"false\"\r\n class=\"att-link\"\r\n >\r\n {{ file.name || `附件${Number(index) + 1}` }}\r\n </el-link>\r\n </template>\r\n <span v-else>-</span>\r\n </el-col>\r\n <el-col :span=\"12\" class=\"memo-row\">\r\n <span class=\"label\">备注:</span>{{ detail.outbound_memo || '-' }}\r\n </el-col>\r\n </el-row>\r\n </div>\r\n\r\n <el-tabs v-model=\"activeTab\">\r\n <el-tab-pane label=\"出库产品\" name=\"products\">\r\n <el-table :data=\"detail.order_item || []\" border size=\"small\" max-height=\"420\" empty-text=\"暂无出库明细\">\r\n <el-table-column label=\"序号\" width=\"55\" align=\"center\">\r\n <template #default=\"{ $index }\">\r\n <span style=\"color: #409eff\">{{ $index + 1 }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"getItemImage(row)\"\r\n :src=\"getItemImage(row)\"\r\n style=\"width: 40px; height: 40px\"\r\n fit=\"cover\"\r\n />\r\n <span v-else class=\"no-img\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-info\">\r\n <div>{{ row.product_name || row.sku_info?.product_name || '-' }}</div>\r\n <div class=\"sku-code\">\r\n <JSkuLink :code=\"row.sku_code\" />\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号/FNSKU\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div>{{ row.user_account_name || '-' }}</div>\r\n <div class=\"sku-code\">{{ row.fnsku || '-' }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"可用出库量\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ row.good_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"次品出库量\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ row.bad_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"出库库位分配\" min-width=\"220\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!(row.out_location_list || []).length\" class=\"muted-text\">默认暂存库位</div>\r\n <div v-for=\"(loc, idx) in row.out_location_list || []\" :key=\"idx\" class=\"location-line\">\r\n {{ loc.out_location_code || '-' }} / {{ loc.out_qty ?? 0 }}\r\n <span class=\"muted-text\">({{ Number(loc.inventory_status) === 2 ? '次品' : '良品' }})</span>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"备注\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.outbound_memo || '-' }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <el-empty description=\"关联单据暂未接入,后续再接\" :image-size=\"72\" />\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <el-table :data=\"logPageData\" border size=\"small\" max-height=\"360\" empty-text=\"暂无操作日志\">\r\n <el-table-column label=\"操作时间\" width=\"160\" prop=\"ctime\" />\r\n <el-table-column label=\"操作人\" width=\"100\">\r\n <template #default=\"{ row }\">{{ row.operator || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"操作类型\" width=\"120\" prop=\"type\" />\r\n <el-table-column label=\"操作详情\" min-width=\"260\" prop=\"info\" show-overflow-tooltip />\r\n </el-table>\r\n <el-pagination\r\n v-model:current-page=\"logPage\"\r\n v-model:page-size=\"logPageSize\"\r\n :page-sizes=\"[10, 20, 50]\"\r\n :total=\"logList.length\"\r\n layout=\"total, prev, pager, next, sizes, jumper\"\r\n class=\"log-pagination\"\r\n />\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n \r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { copyText } from '../utils/copyText'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n outboundOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst outboundTypeMap: Record<number, string> = {\r\n 1: '销售出库',\r\n 2: '采购退货',\r\n 3: '调拨出库',\r\n 4: '加工出库',\r\n 99: '其他出库',\r\n}\r\n\r\nconst statusMap: Record<number, string> = {\r\n 100: '待出库',\r\n 200: '部分出库',\r\n 300: '已完成',\r\n 600: '已取消',\r\n}\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('products')\r\nconst detail = ref<Record<string, any>>({})\r\nconst logPage = ref(1)\r\nconst logPageSize = ref(10)\r\n\r\nconst handleCopy = copyText\r\nconst getItemImage = (row: any) => row.main_image || row.sku_image?.main_image || ''\r\n\r\nconst statusTagType = computed(() => {\r\n const map: Record<number, string> = {\r\n 100: 'warning',\r\n 200: '',\r\n 300: 'success',\r\n 600: 'info',\r\n }\r\n return map[detail.value.status] ?? 'info'\r\n})\r\n\r\nconst totalQty = computed(() =>\r\n (detail.value.order_item || []).reduce(\r\n (sum: number, item: any) => sum + (item.good_qty || 0) + (item.bad_qty || 0),\r\n 0,\r\n ),\r\n)\r\n\r\nconst logList = computed(() => detail.value.outbound_order_log || [])\r\nconst logPageData = computed(() => {\r\n const start = (logPage.value - 1) * logPageSize.value\r\n return logList.value.slice(start, start + logPageSize.value)\r\n})\r\n\r\nconst resetDetail = () => {\r\n detail.value = {}\r\n activeTab.value = 'products'\r\n logPage.value = 1\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.outboundOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getDeliveryDetail\r\n if (!fetchApi) {\r\n console.warn('[DeliveryOrderDetailView] 未注入 getDeliveryDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.outboundOrderNo)\r\n detail.value = res?.code === 1 ? (res.data ?? {}) : {}\r\n } catch (err) {\r\n console.error('[DeliveryOrderDetailView] getDeliveryDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst handleOpen = () => {\r\n resetDetail()\r\n fetchDetail()\r\n}\r\n\r\nconst handleClosed = () => {\r\n resetDetail()\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) handleOpen()\r\n else handleClosed()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.delivery-detail {\r\n padding: 0 4px 8px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n margin-bottom: 16px;\r\n\r\n .order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n }\r\n\r\n .copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n}\r\n\r\n.section {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.section-title {\r\n font-size: 15px;\r\n font-weight: 500;\r\n color: #303133;\r\n padding-left: 12px;\r\n border-left: 3px solid #409eff;\r\n margin-bottom: 14px;\r\n}\r\n\r\n.info-grid {\r\n font-size: 13px;\r\n color: #303133;\r\n row-gap: 12px;\r\n\r\n .label {\r\n color: #606266;\r\n margin-right: 4px;\r\n }\r\n\r\n .att-row,\r\n .memo-row {\r\n margin-top: 4px;\r\n }\r\n\r\n .copy-btn {\r\n margin-left: 4px;\r\n padding: 0;\r\n color: #c0c4cc;\r\n vertical-align: middle;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n}\r\n\r\n.att-link + .att-link {\r\n margin-left: 12px;\r\n}\r\n\r\n.product-info {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n font-size: 12px;\r\n\r\n .sku-code {\r\n color: #409eff;\r\n }\r\n}\r\n\r\n.no-img {\r\n font-size: 12px;\r\n color: #909399;\r\n}\r\n\r\n.muted-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.location-line {\r\n font-size: 12px;\r\n line-height: 1.6;\r\n}\r\n\r\n.log-pagination {\r\n margin-top: 12px;\r\n justify-content: flex-end;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 调拨单详情纯展示弹窗\r\n 用法:<TransferOrderDetailView v-model=\"visible\" :transfer-order-no=\"no\" />\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n top=\"4vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">调拨单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ detail.transfer_order_no || '-' }}</span>\r\n <el-button\r\n v-if=\"detail.transfer_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.transfer_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n <el-tag size=\"small\">{{ statusMap[detail.status] || detail.status || '-' }}</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"transfer-detail\">\r\n <div class=\"detail-meta\">\r\n <span>出库仓库:{{ detail.source_warehouse_name || '-' }}</span>\r\n <span>入库仓库:{{ detail.target_warehouse_name || '-' }}</span>\r\n <span>创建时间:{{ detail.ctime || '-' }}</span>\r\n <span>状态:{{ statusMap[detail.status] || detail.status || '-' }}</span>\r\n </div>\r\n\r\n <div v-if=\"detail.att_files?.length\" class=\"detail-att\">\r\n <span class=\"detail-att__label\">附件:</span>\r\n <el-link\r\n v-for=\"(file, index) in detail.att_files\"\r\n :key=\"index\"\r\n type=\"primary\"\r\n :href=\"file.url\"\r\n target=\"_blank\"\r\n :underline=\"false\"\r\n >\r\n {{ file.name || `附件${Number(index) + 1}` }}\r\n </el-link>\r\n </div>\r\n\r\n <el-table :data=\"detail.order_item || []\" border size=\"small\" max-height=\"480\" empty-text=\"暂无调拨明细\">\r\n <el-table-column label=\"序号\" width=\"60\" align=\"center\">\r\n <template #default=\"{ $index }\">{{ $index + 1 }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"SKU\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <JSkuLink :code=\"row.sku_code\" />\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺\" min-width=\"120\">\r\n <template #default=\"{ row }\">{{ row.user_account_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"fnsku\" label=\"FNSKU\" min-width=\"140\" />\r\n <el-table-column prop=\"transfer_good_qty\" label=\"可用调拨量\" min-width=\"110\" />\r\n <el-table-column prop=\"received_good_qty\" label=\"可用已收货\" min-width=\"110\" />\r\n <el-table-column prop=\"transfer_bad_qty\" label=\"次品调拨量\" min-width=\"110\" />\r\n <el-table-column prop=\"received_bad_qty\" label=\"次品已收货\" min-width=\"110\" />\r\n <el-table-column label=\"出库库位分配\" min-width=\"220\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!(row.out_location_list || []).length\" class=\"muted-text\">-</div>\r\n <div v-for=\"(loc, idx) in row.out_location_list || []\" :key=\"idx\" class=\"location-line\">\r\n {{ loc.out_location_code || '-' }} / {{ loc.out_qty ?? 0 }}\r\n <span class=\"muted-text\">({{ Number(loc.inventory_status) === 2 ? '次品' : '良品' }})</span>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"location_code_good\" label=\"良品入库库位\" min-width=\"130\" />\r\n <el-table-column prop=\"location_code_bad\" label=\"次品入库库位\" min-width=\"130\" />\r\n </el-table>\r\n </div>\r\n \r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, watch } from 'vue'\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { copyText } from '../utils/copyText'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n transferOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst statusMap: Record<number, string> = {\r\n 100: '待拣货',\r\n 200: '待调拨',\r\n 300: '待收货',\r\n 400: '已调拨',\r\n}\r\n\r\nconst loading = ref(false)\r\nconst detail = ref<Record<string, any>>({})\r\nconst handleCopy = copyText\r\n\r\nconst resetDetail = () => {\r\n detail.value = {}\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.transferOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getTransferDetail\r\n if (!fetchApi) {\r\n console.warn('[TransferOrderDetailView] 未注入 getTransferDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.transferOrderNo)\r\n detail.value = res?.code === 1 ? (res.data ?? {}) : {}\r\n } catch (err) {\r\n console.error('[TransferOrderDetailView] getTransferDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst handleOpen = () => {\r\n resetDetail()\r\n fetchDetail()\r\n}\r\n\r\nconst handleClosed = () => {\r\n resetDetail()\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) handleOpen()\r\n else handleClosed()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.transfer-detail {\r\n padding: 0 4px 8px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n margin-bottom: 14px;\r\n\r\n .order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n }\r\n\r\n .copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n}\r\n\r\n.detail-meta {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 24px;\r\n margin-bottom: 14px;\r\n color: #606266;\r\n font-size: 13px;\r\n}\r\n\r\n.detail-att {\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n gap: 8px 12px;\r\n margin-bottom: 14px;\r\n font-size: 13px;\r\n}\r\n\r\n.detail-att__label {\r\n color: #606266;\r\n}\r\n\r\n.muted-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.location-line {\r\n font-size: 12px;\r\n line-height: 1.6;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 加工单详情纯展示弹窗\r\n 用法:<WorkOrderDetailView v-model=\"visible\" :processing-order-no=\"no\" />\r\n 暂无独立详情接口,按单号查列表取首条\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n top=\"6vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">加工单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ detail.processing_order_no || '-' }}</span>\r\n <el-button\r\n v-if=\"detail.processing_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.processing_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n <span :class=\"['status-tag', statusClass(detail.status)]\">\r\n {{ statusMap[detail.status as number] || '-' }}\r\n </span>\r\n <el-tag v-if=\"detail.urgent_flag === 2\" type=\"danger\" size=\"small\" class=\"urgent-tag\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"work-order-detail\">\r\n <div class=\"section\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-row :gutter=\"0\" class=\"info-grid\">\r\n <el-col :span=\"6\">\r\n <span class=\"label\">采购计划单号:</span>\r\n <span>{{ detail.purchase_plan_no || '-' }}</span>\r\n <el-button\r\n v-if=\"detail.purchase_plan_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.purchase_plan_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">创建人:</span>{{ detail.creator_leader_name || '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">创建时间:</span>{{ detail.ctime || detail.create_time || '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">期望加工日期:</span>{{ detail.expected_date || '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">加工仓库:</span>{{ detail.warehouse_name || '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">计划加工:</span>{{ detail.plan_qty ?? '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">可加工:</span>{{ detail.can_process_qty ?? '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">待加工:</span>{{ detail.pending_process_qty ?? '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">已加工:</span>{{ detail.processed_qty ?? '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">组合品名:</span>{{ detail.sku_info?.product_name || '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">组合SKU:</span>\r\n <JSkuLink :code=\"detail.sku_info?.sku_code\" />\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">店铺/平台仓库SKU:</span>{{ formatShopSku(detail) }}\r\n </el-col>\r\n <el-col :span=\"24\" class=\"memo-row\">\r\n <span class=\"label\">加工备注:</span>{{ detail.processing_memo || '-' }}\r\n </el-col>\r\n </el-row>\r\n </div>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"加工产品\" name=\"products\">\r\n <el-table\r\n :data=\"detail.order_item || []\"\r\n border\r\n size=\"small\"\r\n row-key=\"sku_code\"\r\n default-expand-all\r\n max-height=\"420\"\r\n empty-text=\"暂无加工明细\"\r\n >\r\n <el-table-column type=\"expand\" width=\"50\">\r\n <template #default=\"{ row: skuRow }\">\r\n <div class=\"inner-table-wrap\">\r\n <el-table :data=\"skuRow.items || []\" border size=\"small\" class=\"inner-table\">\r\n <el-table-column label=\"采购单号\" min-width=\"140\">\r\n <template #default=\"{ row: item }\">\r\n <div class=\"order-no-cell\">\r\n <span>{{ item.purchase_no || '-' }}</span>\r\n <el-button\r\n v-if=\"item.purchase_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click.stop=\"handleCopy(item.purchase_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购量\" min-width=\"80\" prop=\"purchase_qty\" />\r\n <el-table-column label=\"已加工\" min-width=\"80\" prop=\"processed_qty\" />\r\n <el-table-column label=\"采购公司\" min-width=\"100\" prop=\"company_name\" />\r\n <el-table-column label=\"供应商\" min-width=\"100\" prop=\"supplier_name\" />\r\n <el-table-column label=\"采购员\" min-width=\"80\" prop=\"purchase_leader_name\" />\r\n <el-table-column label=\"预计到货\" min-width=\"120\" prop=\"expected_arrival_date\" />\r\n <el-table-column label=\"采购产品备注\" min-width=\"120\">\r\n <template #default=\"{ row: item }\">{{ item.purchase_memo || '-' }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row: skuRow }\">\r\n <el-image\r\n v-if=\"skuRow.sku_image?.main_image\"\r\n :src=\"skuRow.sku_image.main_image\"\r\n style=\"width:36px;height:36px\"\r\n fit=\"cover\"\r\n />\r\n <span v-else class=\"no-img\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"160\">\r\n <template #default=\"{ row: skuRow }\">\r\n <div class=\"product-info\">\r\n <div>{{ skuRow.sku_info?.product_name || '-' }}</div>\r\n <div class=\"sku-code\">\r\n <JSkuLink :code=\"skuRow.sku_info?.sku_code || skuRow.sku_code\" />\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"组合比例\" min-width=\"90\" prop=\"combination_ratio\" />\r\n <el-table-column label=\"采购量\" min-width=\"80\" prop=\"purchase_qty\" />\r\n <el-table-column label=\"可加工量\" min-width=\"100\" prop=\"can_process_qty\" />\r\n <el-table-column label=\"待加工\" min-width=\"80\" prop=\"pending_process_qty\" />\r\n <el-table-column label=\"已加工\" min-width=\"80\" prop=\"processed_qty\" />\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <div class=\"log-filter\">\r\n <el-date-picker\r\n v-model=\"logDateRange\"\r\n type=\"datetimerange\"\r\n range-separator=\"~\"\r\n start-placeholder=\"开始时间\"\r\n end-placeholder=\"结束时间\"\r\n value-format=\"YYYY-MM-DD HH:mm:ss\"\r\n style=\"width:380px\"\r\n />\r\n </div>\r\n <el-table :data=\"logPageData\" border size=\"small\" max-height=\"360\" empty-text=\"暂无操作日志\">\r\n <el-table-column label=\"操作时间\" width=\"170\" prop=\"ctime\" />\r\n <el-table-column label=\"操作人\" width=\"100\">\r\n <template #default=\"{ row }\">{{ row.operator || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"操作类型\" width=\"110\" prop=\"type\" />\r\n <el-table-column label=\"操作详情\" min-width=\"260\" prop=\"info\" show-overflow-tooltip />\r\n </el-table>\r\n <el-pagination\r\n v-model:current-page=\"logPage\"\r\n v-model:page-size=\"logPageSize\"\r\n :page-sizes=\"[10, 20, 50]\"\r\n :total=\"logFiltered.length\"\r\n layout=\"total, prev, pager, next, sizes, jumper\"\r\n class=\"log-pagination\"\r\n />\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n \r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { copyText } from '../utils/copyText'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n processingOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst statusMap: Record<number, string> = {\r\n 100: '待加工',\r\n 200: '加工中',\r\n 300: '已完成',\r\n}\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('products')\r\nconst detail = ref<Record<string, any>>({})\r\nconst logDateRange = ref<[string, string] | null>(null)\r\nconst logPage = ref(1)\r\nconst logPageSize = ref(10)\r\n\r\nconst handleCopy = copyText\r\n\r\nconst statusClass = (status: number) => ({\r\n 'status-pending': status === 100,\r\n 'status-processing': status === 200,\r\n 'status-done': status === 300,\r\n})\r\n\r\nconst formatShopSku = (row: Record<string, any>) =>\r\n [row.user_account_name, row.fnsku, row.seller_sku].filter(Boolean).join(' / ') || '-'\r\n\r\nconst logFiltered = computed(() => {\r\n const logs: any[] = detail.value.process_order_log || detail.value.action_log || detail.value.processing_order_log || []\r\n if (!logDateRange.value) return logs\r\n const [start, end] = logDateRange.value\r\n return logs.filter((l) => l.ctime >= start && l.ctime <= end)\r\n})\r\n\r\nconst logPageData = computed(() => {\r\n const s = (logPage.value - 1) * logPageSize.value\r\n return logFiltered.value.slice(s, s + logPageSize.value)\r\n})\r\n\r\nconst resetDetail = () => {\r\n detail.value = {}\r\n activeTab.value = 'products'\r\n logDateRange.value = null\r\n logPage.value = 1\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.processingOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getProcessingDetail\r\n if (!fetchApi) {\r\n console.warn('[WorkOrderDetailView] 未注入 getProcessingDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n // 本项目 adapter 用列表按单号取首条;其他项目可直接返回详情结构\r\n const res: any = await fetchApi(props.processingOrderNo)\r\n if (res?.code === 1) {\r\n if (res.data?.list) {\r\n detail.value = res.data.list[0] || {}\r\n } else {\r\n detail.value = res.data || {}\r\n }\r\n } else {\r\n detail.value = {}\r\n }\r\n } catch (err) {\r\n console.error('[WorkOrderDetailView] getProcessingDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst handleOpen = () => {\r\n resetDetail()\r\n fetchDetail()\r\n}\r\n\r\nconst handleClosed = () => {\r\n resetDetail()\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) handleOpen()\r\n else handleClosed()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.work-order-detail {\r\n padding: 0 4px 8px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n margin-bottom: 16px;\r\n\r\n .order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n color: #2f3747;\r\n }\r\n\r\n .copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n\r\n .status-tag {\r\n font-size: 13px;\r\n font-weight: 500;\r\n padding: 2px 8px;\r\n border-radius: 3px;\r\n background: #f5f7fa;\r\n\r\n &.status-pending {\r\n color: #e6a23c;\r\n background: #fdf6ec;\r\n }\r\n &.status-processing {\r\n color: #409eff;\r\n background: #ecf5ff;\r\n }\r\n &.status-done {\r\n color: #67c23a;\r\n background: #f0f9eb;\r\n }\r\n }\r\n\r\n .urgent-tag {\r\n height: 20px;\r\n line-height: 18px;\r\n padding: 0 6px;\r\n font-size: 12px;\r\n }\r\n}\r\n\r\n.section {\r\n margin-bottom: 18px;\r\n}\r\n\r\n.section-title {\r\n font-size: 14px;\r\n font-weight: 500;\r\n color: #303133;\r\n padding-left: 10px;\r\n border-left: 3px solid #409eff;\r\n margin-bottom: 14px;\r\n}\r\n\r\n.info-grid {\r\n font-size: 13px;\r\n color: #303133;\r\n row-gap: 14px;\r\n\r\n .label {\r\n color: #606266;\r\n margin-right: 4px;\r\n }\r\n\r\n .copy-btn {\r\n margin-left: 4px;\r\n padding: 0;\r\n color: #c0c4cc;\r\n vertical-align: middle;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n\r\n .memo-row {\r\n margin-top: 4px;\r\n }\r\n}\r\n\r\n.detail-tabs {\r\n :deep(.el-table th) {\r\n background: #f7f9fc;\r\n color: #2f3747;\r\n font-weight: 600;\r\n }\r\n}\r\n\r\n.inner-table-wrap {\r\n padding: 8px 16px;\r\n background: #f5f7fa;\r\n\r\n .order-no-cell {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 4px;\r\n }\r\n\r\n .copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n\r\n .inner-table {\r\n :deep(.el-table th) {\r\n background: #e8ecf3;\r\n font-weight: 500;\r\n }\r\n }\r\n}\r\n\r\n.product-info {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n font-size: 12px;\r\n color: #3b4656;\r\n\r\n .sku-code {\r\n color: #409eff;\r\n }\r\n}\r\n\r\n.no-img {\r\n font-size: 12px;\r\n color: #909399;\r\n}\r\n\r\n.log-filter {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.log-pagination {\r\n margin-top: 12px;\r\n justify-content: flex-end;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 异常单详情纯展示弹窗(DocNoLink / DocDetailHost 打开)\r\n 接口由业务项目 adapters.getAbnormalDetail 注入\r\n 字段严格按 AbnormalOrder 详情结构,无字段兼容兜底,空值显示 -\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"abnormal-order-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">异常单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(detail.abnormal_no) }}</span>\r\n <el-tag size=\"small\" :type=\"statusTagType\">\r\n {{ formatByMap(detail.status, statusMap) }}\r\n </el-tag>\r\n <el-tag v-if=\"Number(detail.urgent_flag) === 1\" type=\"danger\" size=\"small\">加急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"abnormal-detail\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">异常单号:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.abnormal_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">状态:</span>\r\n <span class=\"info-value\">{{ formatByMap(detail.status, statusMap) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">收货单号:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.receipt_order_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购单号:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchase_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">收货仓库:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.warehouse_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.company_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">供应商:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.supplier_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购员:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchase_leader_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">创建人:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.create_leader_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">创建时间:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.ctime) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">修改时间:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.mtime) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">审核日期:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.review_date) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">加急:</span>\r\n <span class=\"info-value\">{{ formatUrgentFlag(detail.urgent_flag) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">操作人:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.operator) }}</span>\r\n </div>\r\n <div class=\"info-item info-item--full\">\r\n <span class=\"info-label\">审核备注:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.review_memo) }}</span>\r\n </div>\r\n <div class=\"info-item info-item--full\">\r\n <span class=\"info-label\">备注:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.abnormal_memo) }}</span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <div class=\"section-title\">异常明细</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <el-table\r\n v-if=\"orderItems.length\"\r\n :data=\"orderItems\"\r\n border\r\n size=\"small\"\r\n class=\"detail-table\"\r\n style=\"width: 100%\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.sku_image?.main_image\"\r\n :src=\"row.sku_image.main_image\"\r\n :preview-src-list=\"[row.sku_image.main_image]\"\r\n preview-teleported\r\n fit=\"cover\"\r\n class=\"product-image\"\r\n />\r\n <span v-else class=\"product-image product-image--empty\">-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-cell\">\r\n <div class=\"product-cell__name\">{{ displayValue(row.sku_info?.product_name) }}</div>\r\n <div class=\"product-cell__sku\">\r\n <JSkuLink v-if=\"row.sku_code\" :code=\"row.sku_code\" />\r\n <span v-else>-</span>\r\n </div>\r\n <div class=\"product-cell__spu\">SPU:{{ displayValue(row.sku_info?.spu_code) }}</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"通知收货量\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.notice_receive_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"实际收货量\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.receive_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"异常类型\" width=\"100\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n {{ formatByMap(row.abnormal_type, abnormalTypeMap) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"异常量\" width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.abnormal_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"处理方式\" width=\"110\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n {{ formatByMap(row.process_type, processTypeMap) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"贴标\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">{{ formatLabelFlag(row.label_flag) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"预计到货日期\" width=\"120\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.expected_arrival_date) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"到货备注\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.arrival_memo) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.user_account_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.shop_account) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"SellerSKU\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.seller_sku) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单号\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_no) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n <div v-else class=\"empty-tip\">暂无异常明细</div>\r\n </el-card>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n abnormalOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\n/** 异常单状态:-1 草稿 / 100 待审核 / 200 审核未通过 / 300 待处理 / 400 已处理 / 700 已作废 */\r\nconst statusMap: Record<string, string> = {\r\n '-1': '草稿',\r\n '100': '待审核',\r\n '200': '审核未通过',\r\n '300': '待处理',\r\n '400': '已处理',\r\n '700': '已作废',\r\n}\r\n\r\nconst abnormalTypeMap: Record<string, string> = {\r\n '1': '少收',\r\n '2': '多收',\r\n '3': '错收',\r\n '4': '破损',\r\n}\r\n\r\nconst processTypeMap: Record<string, string> = {\r\n '1': '继续来货',\r\n '2': '补货',\r\n '3': '退回',\r\n '4': '让步接收',\r\n}\r\n\r\nconst loading = ref(false)\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst orderItems = computed(() => {\r\n const items = detail.order_item\r\n return Array.isArray(items) ? items : []\r\n})\r\n\r\nconst statusTagType = computed(() => {\r\n const status = Number(detail.status)\r\n if (status === -1) return 'info'\r\n if (status === 100) return 'warning'\r\n if (status === 200) return 'danger'\r\n if (status === 300) return 'primary'\r\n if (status === 400) return 'success'\r\n if (status === 700) return 'info'\r\n return 'info'\r\n})\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst formatByMap = (value: unknown, map: Record<string, string>) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return map[String(value)] ?? '-'\r\n}\r\n\r\nconst formatLabelFlag = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n const n = Number(value)\r\n if (n === 1) return '是'\r\n if (n === 0) return '否'\r\n return '-'\r\n}\r\n\r\nconst formatUrgentFlag = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n const n = Number(value)\r\n if (n === 1) return '是'\r\n if (n === 0) return '否'\r\n return '-'\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.abnormalOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getAbnormalDetail\r\n if (!fetchApi) {\r\n console.warn('[AbnormalOrderDetailView] 未注入 getAbnormalDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.abnormalOrderNo)\r\n if (res?.code === 1) {\r\n Object.assign(detail, res.data || {})\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[AbnormalOrderDetailView] getAbnormalDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.abnormal-detail {\r\n min-height: 200px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-title {\r\n margin: 16px 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 4px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-item--full {\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.product-image {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 4px;\r\n border: 1px solid #ebeef5;\r\n}\r\n\r\n.product-image--empty {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n background: #f5f7fa;\r\n}\r\n\r\n.product-cell {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.4;\r\n}\r\n\r\n.product-cell__name {\r\n color: #303133;\r\n font-size: 13px;\r\n}\r\n\r\n.product-cell__sku {\r\n font-size: 12px;\r\n}\r\n\r\n.product-cell__spu {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.empty-tip {\r\n padding: 24px 0;\r\n text-align: center;\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n\r\n.detail-table {\r\n width: 100%;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 付款单(请款单)只读详情弹窗(DocNoLink / DocDetailHost 打开)\r\n 接口由业务项目 adapters.getPaymentRequestDetail 注入\r\n\r\n adapter 约定:传入付款单号 payment_request_no,返回 { code, data, msg }\r\n data 建议为展示态字段(与 scm mapPaymentRequestDetail 对齐),至少含:\r\n payment_no / relation_no / order_total / pay_method / pay_amount / paid_amount\r\n applicant / apply_time / settle_type / settle_term / base_date / settle_period\r\n pay_deadline / prepay / finalpay / other / settle_remark / contract_file\r\n payer_name / payee_name / pay_remark / details[] / payer_info / payee_info / flow_list[]\r\n status_name? / is_urgent?\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"1200px\"\r\n top=\"5vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"payment-request-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">付款单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(detail.payment_no) }}</span>\r\n <el-tag v-if=\"detail.status_name\" size=\"small\" type=\"info\">{{ detail.status_name }}</el-tag>\r\n <el-tag v-if=\"isUrgent\" type=\"danger\" size=\"small\">加急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"payment-detail-wrap\">\r\n <div class=\"section-title\">申请信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款单号:</span>\r\n <span class=\"value\">{{ displayValue(detail.payment_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">关联单号:</span>\r\n <span class=\"value\">{{ displayValue(detail.relation_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">订单总金额:</span>\r\n <span class=\"value\">¥{{ detail.order_total || '0.0000' }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">支付方式:</span>\r\n <span class=\"value\">{{ displayValue(detail.pay_method) }}</span>\r\n </div>\r\n\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款金额:</span>\r\n <span class=\"value\">¥{{ detail.pay_amount || '0.0000' }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">已付金额:</span>\r\n <span class=\"value\">{{ displayValue(detail.paid_amount) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">申请人:</span>\r\n <span class=\"value\">{{ displayValue(detail.applicant) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">申请时间:</span>\r\n <span class=\"value\">{{ displayValue(detail.apply_time) }}</span>\r\n </div>\r\n\r\n <div class=\"info-item\">\r\n <span class=\"label\">结算方式:</span>\r\n <span class=\"value\">\r\n <div>{{ displayValue(detail.settle_type) }}</div>\r\n <div v-if=\"detail.settle_term\" class=\"settlement-term\">{{ detail.settle_term }}</div>\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款基准日期:</span>\r\n <span class=\"value\">{{ displayValue(detail.base_date) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">结算周期:</span>\r\n <span class=\"value\">{{ displayValue(detail.settle_period) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款期限:</span>\r\n <span class=\"value\">{{ displayValue(detail.pay_deadline) }}</span>\r\n </div>\r\n\r\n <div class=\"info-item\">\r\n <span class=\"label\">货款预付:</span>\r\n <span class=\"value\">{{ displayValue(detail.prepay) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">货款尾款:</span>\r\n <span class=\"value\">{{ displayValue(detail.finalpay) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">其他金额:</span>\r\n <span class=\"value\">{{ displayValue(detail.other) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">结算备注:</span>\r\n <span class=\"value\">{{ displayValue(detail.settle_remark) }}</span>\r\n </div>\r\n\r\n <div class=\"info-item\">\r\n <span class=\"label\">采购合同:</span>\r\n <span class=\"value\">{{ displayValue(detail.contract_file) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款方:</span>\r\n <span class=\"value ellipsis\">{{ displayValue(detail.payer_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">收款方:</span>\r\n <span class=\"value ellipsis\">{{ displayValue(detail.payee_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款备注:</span>\r\n <span class=\"value\">{{ displayValue(detail.pay_remark) }}</span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <div class=\"section-title\">付款明细</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"付款明细\" name=\"detail\">\r\n <el-table\r\n :data=\"feeRows\"\r\n border\r\n :span-method=\"detailSpanMethod\"\r\n class=\"detail-table\"\r\n size=\"small\"\r\n >\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.image\"\r\n :src=\"row.image\"\r\n fit=\"cover\"\r\n class=\"goods-img-el\"\r\n :preview-src-list=\"[row.image]\"\r\n preview-teleported\r\n />\r\n <div v-else class=\"goods-img\">无</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <div class=\"goods-name\">\r\n <div class=\"name\">{{ displayValue(row.name) }}</div>\r\n <div class=\"sku\">\r\n <JSkuLink v-if=\"row.sku\" :code=\"row.sku\" />\r\n <span v-else>-</span>\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购数量\" width=\"90\" align=\"center\" prop=\"purchase_qty\" />\r\n <el-table-column label=\"到货数量\" width=\"90\" align=\"center\" prop=\"arrival_qty\" />\r\n <el-table-column label=\"质检数量\" width=\"100\">\r\n <template #default=\"{ row }\">\r\n <div class=\"quality\">\r\n <div>良品:{{ row.quality_good ?? '-' }}</div>\r\n <div>次品:{{ row.quality_bad ?? '-' }}</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购金额(¥)\" width=\"110\" prop=\"purchase_amount\" />\r\n <el-table-column label=\"到货金额(¥)\" width=\"110\" prop=\"arrival_amount\" />\r\n <el-table-column label=\"费用类型\" width=\"90\" prop=\"fee_type\" />\r\n <el-table-column label=\"费用名称\" width=\"90\" prop=\"fee_name\" />\r\n <el-table-column label=\"费用金额(¥)\" width=\"110\">\r\n <template #default=\"{ row }\">\r\n <span :class=\"{ 'bold-amount': Number(row.fee_amount) > 0 }\">{{ row.fee_amount }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"已申请(¥)\" width=\"110\">\r\n <template #default=\"{ row }\">\r\n <span :class=\"{ 'dot-amount': Number(row.applied) > 0 }\">\r\n <i v-if=\"Number(row.applied) > 0\" class=\"dot\" />{{ row.applied }}\r\n </span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"本次申请(¥)\" width=\"110\">\r\n <template #default=\"{ row }\">\r\n <span :class=\"{ 'bold-amount': Number(row.current) > 0 }\">{{ row.current }}</span>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div class=\"detail-summary\">\r\n <span>合计:{{ details.length }} 个产品</span>\r\n <span>货款总额(¥):{{ summary.goods_total }}</span>\r\n <span>运费总额(¥):{{ summary.freight_total }}</span>\r\n <span>申请付款总额(¥):{{ summary.apply_total }}</span>\r\n </div>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"付款方信息\" name=\"payer\">\r\n <div class=\"info-grid info-grid-3\">\r\n <div class=\"info-item\">\r\n <span class=\"label\">采购公司:</span>\r\n <span class=\"value\">{{ displayValue(detail.payer_info?.purchase_company) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款方式:</span>\r\n <span class=\"value\">{{ displayValue(detail.payer_info?.pay_method) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款账号:</span>\r\n <span class=\"value\">{{ displayValue(detail.payer_info?.account_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">实际付款账号:</span>\r\n <span class=\"value\">{{ displayValue(detail.payer_info?.actual_account_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">账户名:</span>\r\n <span class=\"value\">{{ displayValue(detail.payer_info?.account_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款行:</span>\r\n <span class=\"value\">{{ displayValue(detail.payer_info?.bank) }}</span>\r\n </div>\r\n </div>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"收款方信息\" name=\"payee\">\r\n <div class=\"info-grid info-grid-3\">\r\n <div class=\"info-item\">\r\n <span class=\"label\">供应商:</span>\r\n <span class=\"value\">{{ displayValue(detail.payee_info?.supplier) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">收款方式:</span>\r\n <span class=\"value\">{{ displayValue(detail.payee_info?.pay_method) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">收款账号:</span>\r\n <span class=\"value\">{{ displayValue(detail.payee_info?.account_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">实际收款账号:</span>\r\n <span class=\"value\">{{ displayValue(detail.payee_info?.actual_account_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">账户名:</span>\r\n <span class=\"value\">{{ displayValue(detail.payee_info?.account_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">收款行:</span>\r\n <span class=\"value\">{{ displayValue(detail.payee_info?.bank) }}</span>\r\n </div>\r\n </div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </el-card>\r\n\r\n <div class=\"section-title\">审批流程</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <el-table :data=\"flowList\" border size=\"small\" class=\"flow-table\">\r\n <el-table-column label=\"序号\" type=\"index\" width=\"60\" align=\"center\" />\r\n <el-table-column label=\"节点名称\" prop=\"node_name\" min-width=\"120\" />\r\n <el-table-column label=\"处理人\" prop=\"handler\" width=\"100\" />\r\n <el-table-column label=\"审批结果\" prop=\"result\" width=\"110\" />\r\n <el-table-column label=\"操作时间\" prop=\"op_time\" width=\"170\" />\r\n <el-table-column label=\"审批备注\" prop=\"remark\" min-width=\"120\" show-overflow-tooltip />\r\n <el-table-column label=\"审批方式\" prop=\"approve_mode\" width=\"110\" />\r\n <el-table-column label=\"耗时\" prop=\"cost_time\" width=\"100\" />\r\n </el-table>\r\n </el-card>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n /** 付款单号 payment_request_no */\r\n paymentRequestNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref<'detail' | 'payer' | 'payee'>('detail')\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst details = computed(() => (Array.isArray(detail.details) ? detail.details : []))\r\nconst flowList = computed(() => (Array.isArray(detail.flow_list) ? detail.flow_list : []))\r\n\r\nconst isUrgent = computed(() => {\r\n const flag = detail.is_urgent\r\n if (flag === true || Number(flag) === 2 || Number(flag) === 1) return true\r\n return false\r\n})\r\n\r\nconst feeRows = computed(() => {\r\n const rows: Array<Record<string, any>> = []\r\n details.value.forEach((d: any, di: number) => {\r\n const fees = d.fees?.length\r\n ? d.fees\r\n : [{ fee_type: '', fee_name: '', fee_amount: '', applied: '', current: '' }]\r\n fees.forEach((f: any, fi: number) => {\r\n rows.push({\r\n ...f,\r\n _detailIndex: di,\r\n _feeIndex: fi,\r\n _feeCount: fees.length,\r\n image: d.image,\r\n name: d.name,\r\n sku: d.sku,\r\n is_combo: d.is_combo,\r\n purchase_qty: d.purchase_qty,\r\n arrival_qty: d.arrival_qty,\r\n quality_good: d.quality_good,\r\n quality_bad: d.quality_bad,\r\n purchase_amount: d.purchase_amount,\r\n arrival_amount: d.arrival_amount,\r\n })\r\n })\r\n })\r\n return rows\r\n})\r\n\r\nconst summary = computed(() => {\r\n let goods = 0\r\n let freight = 0\r\n let apply = 0\r\n details.value.forEach((d: any) => {\r\n ;(d.fees || []).forEach((f: any) => {\r\n const amount = Number(f.fee_amount) || 0\r\n const current = Number(f.current) || 0\r\n if (f.fee_name === '运费') freight += amount\r\n else goods += amount\r\n apply += current\r\n })\r\n })\r\n return {\r\n goods_total: goods.toFixed(4),\r\n freight_total: freight.toFixed(4),\r\n apply_total: apply.toFixed(4),\r\n }\r\n})\r\n\r\nconst detailSpanMethod = ({ row, columnIndex }: { row: any; columnIndex: number }) => {\r\n if (columnIndex <= 6) {\r\n if (row._feeIndex === 0) return { rowspan: row._feeCount, colspan: 1 }\r\n return { rowspan: 0, colspan: 0 }\r\n }\r\n return { rowspan: 1, colspan: 1 }\r\n}\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n activeTab.value = 'detail'\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.paymentRequestNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getPaymentRequestDetail\r\n if (!fetchApi) {\r\n console.warn('[PaymentRequestDetailView] 未注入 getPaymentRequestDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.paymentRequestNo)\r\n if (res?.code === 1) {\r\n Object.assign(detail, res.data || {})\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[PaymentRequestDetailView] getPaymentRequestDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.payment-detail-wrap {\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n padding-right: 4px;\r\n min-height: 200px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-title {\r\n position: relative;\r\n padding-left: 10px;\r\n margin-top: 20px;\r\n margin-bottom: 20px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #2f3a4a;\r\n\r\n &::before {\r\n content: '';\r\n position: absolute;\r\n left: 0;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n width: 3px;\r\n height: 14px;\r\n background: #409eff;\r\n border-radius: 2px;\r\n }\r\n\r\n &:first-of-type {\r\n margin-top: 0;\r\n }\r\n}\r\n\r\n.section-card {\r\n border: 1px solid #ebeef5;\r\n border-radius: 6px;\r\n margin-bottom: 8px;\r\n\r\n :deep(.el-card__body) {\r\n padding: 14px 16px;\r\n }\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, 1fr);\r\n gap: 12px 24px;\r\n font-size: 13px;\r\n padding: 4px 0;\r\n\r\n &.info-grid-3 {\r\n grid-template-columns: repeat(3, 1fr);\r\n padding: 12px 0;\r\n }\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: center;\r\n line-height: 1.6;\r\n\r\n .label {\r\n color: #303133;\r\n font-weight: 600;\r\n flex-shrink: 0;\r\n }\r\n\r\n .value {\r\n color: #606266;\r\n\r\n &.ellipsis {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n max-width: 180px;\r\n }\r\n }\r\n\r\n .settlement-term {\r\n color: #9b59b6;\r\n font-size: 12px;\r\n line-height: 1.45;\r\n }\r\n}\r\n\r\n.detail-tabs {\r\n margin-bottom: 8px;\r\n\r\n :deep(.el-tabs__nav-wrap)::after {\r\n height: 1px;\r\n background: #ebeef5;\r\n }\r\n}\r\n\r\n.detail-table {\r\n :deep(th) {\r\n background: #f7f9fc;\r\n color: #2f3747;\r\n font-weight: 600;\r\n }\r\n}\r\n\r\n.goods-img {\r\n width: 40px;\r\n height: 40px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: #f0f2f5;\r\n border-radius: 4px;\r\n margin: 0 auto;\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n}\r\n\r\n.goods-img-el {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 4px;\r\n border: 1px solid #dcdfe6;\r\n margin: 0 auto;\r\n}\r\n\r\n.goods-name {\r\n .name {\r\n color: #409eff;\r\n font-weight: 500;\r\n }\r\n\r\n .sku {\r\n color: #409eff;\r\n font-size: 12px;\r\n }\r\n}\r\n\r\n.quality {\r\n font-size: 12px;\r\n color: #606266;\r\n line-height: 1.6;\r\n}\r\n\r\n.bold-amount {\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.dot-amount {\r\n color: #e6a23c;\r\n display: inline-flex;\r\n align-items: center;\r\n\r\n .dot {\r\n width: 6px;\r\n height: 6px;\r\n border-radius: 50%;\r\n background: #e6a23c;\r\n margin-right: 4px;\r\n }\r\n}\r\n\r\n.detail-summary {\r\n display: flex;\r\n gap: 28px;\r\n padding: 10px 14px;\r\n background: #f7f9fc;\r\n font-size: 13px;\r\n color: #2f3a4a;\r\n border: 1px solid #ebeef5;\r\n border-top: none;\r\n}\r\n\r\n.flow-table {\r\n margin-bottom: 8px;\r\n\r\n :deep(th) {\r\n background: #f7f9fc;\r\n color: #2f3747;\r\n font-weight: 600;\r\n }\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 退换货单只读详情(DocNoLink / DocDetailHost)\r\n 接口:adapters.getReturnGoodsDetail(return_order_no) → { code, data }\r\n data 对齐 WMS ReturnOrder/doDetail(含 order_item / return_order_log)\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"92%\"\r\n top=\"4vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"return-order-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">退换货单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(detail.return_order_no) }}</span>\r\n <el-tag size=\"small\" :type=\"statusTagType\">{{ statusLabel }}</el-tag>\r\n <el-tag v-if=\"Number(detail.urgent_flag) === 2\" type=\"danger\" size=\"small\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"return-detail\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.company_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购仓库:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.warehouse_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">供应商:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.supplier_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购币种:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.currency) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">退货方式:</span>\r\n <span class=\"info-value\">\r\n {{ detail.return_type_name || formatByMap(detail.return_type, returnTypeMap) }}\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">关联单号:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.source_order_no) }}</span>\r\n </div>\r\n <div class=\"info-item info-item--full\">\r\n <span class=\"info-label\">退货备注:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.return_memo) }}</span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"产品信息\" name=\"products\">\r\n <el-table\r\n v-if=\"orderItems.length\"\r\n :data=\"orderItems\"\r\n border\r\n size=\"small\"\r\n class=\"detail-table\"\r\n style=\"width: 100%\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.sku_image?.main_image\"\r\n :src=\"row.sku_image.main_image\"\r\n :preview-src-list=\"[row.sku_image.main_image]\"\r\n preview-teleported\r\n fit=\"cover\"\r\n class=\"product-image\"\r\n />\r\n <span v-else class=\"product-image product-image--empty\">-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-cell\">\r\n <div class=\"product-cell__name\">{{ displayValue(row.sku_info?.product_name) }}</div>\r\n <div class=\"product-cell__sku\">\r\n <JSkuLink v-if=\"row.sku_code\" :code=\"row.sku_code\" />\r\n <span v-else>-</span>\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单号\" min-width=\"130\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_no) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号/平台仓库SKU\" min-width=\"160\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n <div>{{ displayValue(row.user_account_name || row.shop_account) }}</div>\r\n <div class=\"sub-text\">{{ displayValue(row.seller_sku) }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"含税单价\" width=\"110\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.unit_price) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"良品退货量\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.good_return_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"次品退货量\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.bad_return_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"总退货量\" width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.return_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"退款金额\" width=\"110\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.refund_amount) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"备注\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.item_memo) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"预计到货日期\" width=\"120\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.expected_arrival_date) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n <div v-else class=\"empty-tip\">暂无产品信息</div>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <el-table\r\n v-if=\"operateLogs.length\"\r\n :data=\"operateLogs\"\r\n border\r\n size=\"small\"\r\n class=\"detail-table\"\r\n >\r\n <el-table-column label=\"操作时间\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.ctime || row.operate_time) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作人\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.operator || row.operator_name) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作类型\" min-width=\"120\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.type || row.action || row.operat_type || row.operate_type) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作详情\" min-width=\"280\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.info || row.operat_msg || row.operate_detail) }}\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div v-else class=\"empty-tip\">暂无操作日志</div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n returnOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst statusMap: Record<string, string> = {\r\n '100': '待审批',\r\n '200': '已驳回',\r\n '300': '待处理',\r\n '500': '已处理',\r\n '600': '已作废',\r\n}\r\n\r\nconst returnTypeMap: Record<string, string> = {\r\n '1': '退货退款',\r\n '2': '退货换货',\r\n '3': '仅退款',\r\n '4': '仅退货',\r\n}\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('products')\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst orderItems = computed(() => (Array.isArray(detail.order_item) ? detail.order_item : []))\r\nconst operateLogs = computed(() =>\r\n Array.isArray(detail.return_order_log) ? detail.return_order_log : [],\r\n)\r\n\r\nconst statusLabel = computed(() => {\r\n if (detail.status_name) return String(detail.status_name)\r\n return formatByMap(detail.status, statusMap)\r\n})\r\n\r\nconst statusTagType = computed(() => {\r\n const status = Number(detail.status)\r\n if (status === 100 || status === 300) return 'warning'\r\n if (status === 200) return 'danger'\r\n if (status === 500) return 'success'\r\n return 'info'\r\n})\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst formatByMap = (value: unknown, map: Record<string, string>) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return map[String(value)] ?? '-'\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n activeTab.value = 'products'\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.returnOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getReturnGoodsDetail\r\n if (!fetchApi) {\r\n console.warn('[ReturnOrderDetailView] 未注入 getReturnGoodsDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.returnOrderNo)\r\n if (res?.code === 1 || res?.data) {\r\n Object.assign(detail, res.data || {})\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[ReturnOrderDetailView] getReturnGoodsDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.return-detail {\r\n min-height: 200px;\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-title {\r\n margin: 16px 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 4px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-item--full {\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.detail-tabs {\r\n margin-top: 12px;\r\n}\r\n\r\n.product-image {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 4px;\r\n border: 1px solid #ebeef5;\r\n}\r\n\r\n.product-image--empty {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n background: #f5f7fa;\r\n}\r\n\r\n.product-cell {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.4;\r\n}\r\n\r\n.product-cell__name {\r\n color: #303133;\r\n font-size: 13px;\r\n}\r\n\r\n.product-cell__sku {\r\n color: #409eff;\r\n font-size: 12px;\r\n}\r\n\r\n.sub-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.empty-tip {\r\n padding: 24px;\r\n text-align: center;\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 成本费用单只读详情(DocNoLink / DocDetailHost)\r\n 接口:adapters.getCostExpenseDetail(cost_expense_no) → { code, data }\r\n data 对齐 scm queryCostExpense(含 items)\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"cost-expense-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">费用单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(detail.cost_expense_no) }}</span>\r\n <el-tag v-if=\"detail.status_name\" size=\"small\" :type=\"statusTagType\">\r\n {{ detail.status_name }}\r\n </el-tag>\r\n <el-tag v-if=\"Number(detail.is_urgent) === 1\" type=\"danger\" size=\"small\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"cost-detail\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">送货单号:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.delivery_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchase_company_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购仓库:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchase_warehouse_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">供应商:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.supplier_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购员:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchaser) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">费用分摊:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.fee_allocation_type_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">运费:</span>\r\n <span class=\"info-value\">\r\n {{\r\n formatFeeWithBearer(\r\n detail.freight_amount,\r\n detail.freight_currency,\r\n detail.freight_bearer_name,\r\n )\r\n }}\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">其他费用:</span>\r\n <span class=\"info-value\">\r\n {{\r\n formatOtherFee(\r\n detail.other_fee_amount,\r\n detail.other_fee_currency,\r\n detail.other_fee_bearer_name,\r\n )\r\n }}\r\n </span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <div class=\"section-title\">成本及费用明细</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <el-table :data=\"itemList\" border size=\"small\" style=\"width: 100%\">\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.main_image || row.image\"\r\n :src=\"row.main_image || row.image\"\r\n :preview-src-list=\"[row.main_image || row.image]\"\r\n fit=\"cover\"\r\n class=\"product-image\"\r\n preview-teleported\r\n />\r\n <span v-else class=\"product-image product-image--empty\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-cell\">\r\n <div class=\"product-cell__name\">{{ displayValue(row.product_name) }}</div>\r\n <div class=\"product-cell__sku\">\r\n <JSkuLink v-if=\"row.sku\" :code=\"row.sku\" />\r\n <span v-else>-</span>\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单号\" width=\"160\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_no) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺/平台仓库SKU\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div>店铺:{{ displayValue(row.shop_account) }}</div>\r\n <div class=\"sub-text\">SKU:{{ displayValue(row.platform_warehouse_sku) }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购量\" width=\"80\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单价\" width=\"120\">\r\n <template #default=\"{ row }\">\r\n <div>含税:{{ formatMoney(row.tax_inclusive_price, row.price_currency) }}</div>\r\n <div class=\"sub-text\">不含税:{{ formatMoney(row.unit_price, row.price_currency) }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"单位费用\" width=\"88\" align=\"right\">\r\n <template #default=\"{ row }\">{{ formatMoney(row.unit_fee, row.price_currency) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"单位成本\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ formatMoney(row.unit_cost, row.price_currency) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"货值\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ formatMoney(row.goods_value, row.price_currency) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"费用\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ formatMoney(row.expense, row.price_currency) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"总成本\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ formatMoney(row.total_cost, row.price_currency) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </el-card>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n costExpenseNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst itemList = computed(() => (Array.isArray(detail.items) ? detail.items : []))\r\n\r\nconst statusTagType = computed(() => {\r\n const status = Number(detail.status)\r\n if (status === 100) return 'warning'\r\n if (status === 200) return 'success'\r\n if (status === 50) return 'info'\r\n if (status === 300) return 'danger'\r\n return 'info'\r\n})\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst toNumber = (val: unknown) => {\r\n const num = Number(val)\r\n return Number.isNaN(num) ? 0 : num\r\n}\r\n\r\nconst formatMoney = (val: unknown, currency = 'CNY') => {\r\n if (val === null || val === undefined || val === '') return '-'\r\n const num = Number(val)\r\n if (Number.isNaN(num)) return String(val)\r\n const symbol = currency === 'CNY' ? '¥' : `${currency} `\r\n return `${symbol}${num.toFixed(2)}`\r\n}\r\n\r\nconst formatFeeWithBearer = (amount: unknown, currency = 'CNY', bearerName?: string) => {\r\n const money = formatMoney(amount, currency)\r\n if (money === '-') return '-'\r\n return bearerName ? `${money} (${bearerName}承担)` : money\r\n}\r\n\r\nconst formatOtherFee = (amount: unknown, currency = 'CNY', bearerName?: string) => {\r\n const money = formatMoney(amount, currency)\r\n if (money === '-') return '-'\r\n if (!bearerName && toNumber(amount) === 0) return `${money} (无)`\r\n return bearerName ? `${money} (${bearerName}承担)` : `${money} (无)`\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.costExpenseNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getCostExpenseDetail\r\n if (!fetchApi) {\r\n console.warn('[CostExpenseDetailView] 未注入 getCostExpenseDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.costExpenseNo)\r\n if (res?.code === 1) {\r\n Object.assign(detail, res.data || {})\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[CostExpenseDetailView] getCostExpenseDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.cost-detail {\r\n min-height: 200px;\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-title {\r\n margin: 16px 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 8px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.product-image {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 4px;\r\n border: 1px solid #ebeef5;\r\n}\r\n\r\n.product-image--empty {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n background: #f5f7fa;\r\n width: 40px;\r\n height: 40px;\r\n}\r\n\r\n.product-cell {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.4;\r\n}\r\n\r\n.product-cell__name {\r\n color: #303133;\r\n font-size: 13px;\r\n}\r\n\r\n.product-cell__sku {\r\n color: #409eff;\r\n font-size: 12px;\r\n}\r\n\r\n.sub-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 收款单(采购收款)只读详情(DocNoLink / DocDetailHost)\r\n 接口:adapters.getReceiptVoucherDetail(receipt_voucher_no) → { code, data }\r\n data 建议为展示态(对齐 scm mapReceiptVoucherDetail,可含 logs[])\r\n 注意:type 为 receiptVoucher,勿与 WMS 收货单 receipt 混淆\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"1400px\"\r\n align-center\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"receipt-voucher-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">收款单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(detail.receipt_voucher_no) }}</span>\r\n <el-tag v-if=\"detail.status_name && detail.status_name !== '-'\" size=\"small\" type=\"info\">\r\n {{ detail.status_name }}\r\n </el-tag>\r\n <el-tag v-if=\"detail.is_urgent\" type=\"danger\" size=\"small\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"receipt-voucher-detail\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchase_company_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">供应商:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.supplier_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">收款类型:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.receipt_type_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">申请人:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.applicant_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">申请时间:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.apply_time) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">收款金额:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.receipt_amount) }}</span>\r\n </div>\r\n <div class=\"info-item info-item--full\">\r\n <span class=\"info-label\">收款备注:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.receipt_remark) }}</span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"收款信息\" name=\"receipt\">\r\n <el-table :data=\"detailRows\" border size=\"small\" class=\"detail-table\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\r\n <el-table-column label=\"采购单号\" min-width=\"130\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_no) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"采购金额(¥)\" min-width=\"132\">\r\n <template #default=\"{ row }\">\r\n <div class=\"amount-cell\">\r\n <div>总额:{{ formatAmount(row.purchase_amount) }}</div>\r\n <div>货款:{{ formatAmount(row.goods_amount) }}</div>\r\n <div>运费:{{ formatAmount(row.freight_amount) }}</div>\r\n <div>其他:{{ formatAmount(row.other_fee_amount) }}</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"实付金额(¥)\" min-width=\"132\">\r\n <template #default=\"{ row }\">\r\n <div class=\"amount-cell\">\r\n <div>总额:{{ formatAmount(row.paid_amount) }}</div>\r\n <div>货款:{{ formatAmount(row.paid_goods_amount) }}</div>\r\n <div>运费:{{ formatAmount(row.paid_freight_amount) }}</div>\r\n <div>其他:{{ formatAmount(row.paid_other_fee_amount) }}</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"关联退换货单号\" min-width=\"150\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.return_exchange_no) }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"return_qty\" label=\"退货数量\" width=\"80\" align=\"center\" />\r\n <el-table-column label=\"退款金额(¥)\" width=\"100\" align=\"center\">\r\n <template #default=\"{ row }\">{{ formatAmount(row.refund_amount) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"本次申请(¥)\" min-width=\"118\">\r\n <template #default=\"{ row }\">\r\n <div class=\"amount-cell\">\r\n <div>货款:{{ formatAmount(row.current_apply_goods_amount) }}</div>\r\n <div>运费:{{ formatAmount(row.current_apply_freight_amount) }}</div>\r\n <div>其他:{{ formatAmount(row.current_apply_other_fee_amount) }}</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <el-table :data=\"logs\" border size=\"small\" class=\"detail-table\">\r\n <el-table-column prop=\"ctime\" label=\"操作时间\" width=\"170\" align=\"center\" />\r\n <el-table-column prop=\"operator\" label=\"操作人\" width=\"120\" />\r\n <el-table-column prop=\"operat_type\" label=\"操作类型\" width=\"120\" />\r\n <el-table-column prop=\"operat_msg\" label=\"操作详情\" min-width=\"280\" show-overflow-tooltip />\r\n </el-table>\r\n <div v-if=\"!logs.length\" class=\"empty-tip\">暂无操作日志</div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n /** 收款单号 receipt_voucher_no */\r\n receiptVoucherNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('receipt')\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst detailRows = computed(() => (Array.isArray(detail.details) ? detail.details : []))\r\nconst logs = computed(() => (Array.isArray(detail.logs) ? detail.logs : []))\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst formatAmount = (value: unknown) => {\r\n const text = String(value ?? '').trim()\r\n if (!text || text === '0' || text === '0.00' || text === '0.0000') return '-'\r\n return text\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n activeTab.value = 'receipt'\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.receiptVoucherNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getReceiptVoucherDetail\r\n if (!fetchApi) {\r\n console.warn('[ReceiptVoucherDetailView] 未注入 getReceiptVoucherDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.receiptVoucherNo)\r\n if (res?.code === 1 && res.data) {\r\n Object.assign(detail, res.data)\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[ReceiptVoucherDetailView] getReceiptVoucherDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.receipt-voucher-detail {\r\n min-height: 200px;\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-title {\r\n margin: 16px 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 8px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(3, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-item--full {\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.detail-tabs {\r\n margin-top: 8px;\r\n}\r\n\r\n.amount-cell {\r\n font-size: 12px;\r\n line-height: 1.55;\r\n color: #606266;\r\n}\r\n\r\n.empty-tip {\r\n padding: 24px;\r\n text-align: center;\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 采购订单只读详情(DocNoLink / DocDetailHost)\r\n type=\"purchase\"\r\n 接口:adapters.getPurchaseOrderDetail(purchase_no) → { code, data }\r\n data:\r\n purchase_no\r\n basic_info\r\n purchase_products[]\r\n related_documents[](只读详情关联 Tab 已改用 JRelatedDocs,不再直接渲染该字段)\r\n operation_logs[]\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"purchase-order-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">采购订单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(purchaseNo) }}</span>\r\n <el-tag v-if=\"statusLabel !== '-'\" size=\"small\" :type=\"statusTagType\">\r\n {{ statusLabel }}\r\n </el-tag>\r\n <el-tag v-if=\"isUrgent\" type=\"danger\" size=\"small\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"purchase-detail\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司:</span>\r\n <span class=\"info-value\">{{ displayValue(info.purchase_company_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购仓库:</span>\r\n <span class=\"info-value\">{{ displayValue(info.stock_name || info.stock_code) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">供应商:</span>\r\n <span class=\"info-value\">{{ displayValue(info.supplier_name || info.supplier) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">联系人:</span>\r\n <span class=\"info-value\">{{ displayValue(info.contact_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">联系方式:</span>\r\n <span class=\"info-value\">{{ displayValue(info.contact_phone) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">结算方式:</span>\r\n <span class=\"info-value settlement-value\">\r\n <div>{{ displayValue(info.py_method_type_name || info.py_method_type) }}</div>\r\n <div v-if=\"settlementTermText\" class=\"settlement-term\">{{ settlementTermText }}</div>\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">预付比例:</span>\r\n <span class=\"info-value\">{{ formatPercent(info.prepay_rate) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">结算账期:</span>\r\n <span class=\"info-value settlement-value\">\r\n <div>基准日期:{{ displayValue(info.ref_date_type_name || info.ref_date_type) }}</div>\r\n <div>周期:{{ displayValue(info.settle_cycle_type_name || info.settle_cycle_type) }}</div>\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">结算备注:</span>\r\n <span class=\"info-value\">{{ displayValue(info.settlement_remark) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">支付方式:</span>\r\n <span class=\"info-value\">{{ displayValue(info.payment_method_name || info.payment_method) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购币种:</span>\r\n <span class=\"info-value\">{{ displayValue(info.purchase_currency || info.currency) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">含税:</span>\r\n <span class=\"info-value\">{{ displayValue(info.is_tax_included_name ?? formatTaxIncluded(info.is_tax_included)) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购员:</span>\r\n <span class=\"info-value\">{{ displayValue(info.purchaser_name || info.purchaser) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购类型:</span>\r\n <span class=\"info-value\">{{ displayValue(info.purchase_type_name || info.purchase_type) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">单据负责人:</span>\r\n <span class=\"info-value\">{{ displayValue(info.owner_user_name || info.doc_owners) }}</span>\r\n </div>\r\n <div class=\"info-item info-item--full\">\r\n <span class=\"info-label\">采购备注:</span>\r\n <span class=\"info-value\">{{ displayValue(info.purchase_remark) }}</span>\r\n </div>\r\n <div v-if=\"attachments.length\" class=\"info-item info-item--full\">\r\n <span class=\"info-label\">附件:</span>\r\n <div class=\"attachment-list\">\r\n <a\r\n v-for=\"(file, index) in attachments\"\r\n :key=\"`${file.url}-${index}`\"\r\n class=\"attachment-chip\"\r\n :href=\"file.url || undefined\"\r\n :target=\"file.url ? '_blank' : undefined\"\r\n rel=\"noopener noreferrer\"\r\n >\r\n {{ file.name || file.url || '-' }}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"采购产品\" name=\"products\">\r\n <el-table :data=\"productList\" border size=\"small\" style=\"width: 100%\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.main_image || row.image || row.product_image\"\r\n :src=\"row.main_image || row.image || row.product_image\"\r\n :preview-src-list=\"[row.main_image || row.image || row.product_image]\"\r\n fit=\"cover\"\r\n class=\"product-image\"\r\n preview-teleported\r\n />\r\n <span v-else class=\"product-image product-image--empty\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-cell\">\r\n <div class=\"product-cell__name\">{{ displayValue(row.product_name) }}</div>\r\n <div class=\"product-cell__sku\">\r\n <JSkuLink v-if=\"row.sku || row.sku_code\" :code=\"row.sku || row.sku_code\" />\r\n <span v-else>-</span>\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"计划编号\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.requirement_no\"\r\n type=\"purchasePlan\"\r\n :order-no=\"String(row.requirement_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.shop_account) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"箱规名称\" min-width=\"100\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.box_spec_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"单箱数量\" width=\"88\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.box_sku_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"箱数\" width=\"72\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.box_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"采购量\" width=\"88\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"税率\" width=\"64\" align=\"center\">\r\n <template #default=\"{ row }\">{{ formatPercent(row.tax_rate) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"单价/含税单价\" width=\"140\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.unit_price) }} / {{ displayValue(row.tax_inclusive_price) }}\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <JRelatedDocs\r\n v-if=\"activeTab === 'related' && purchaseNo\"\r\n :doc-types=\"relatedDocTypes\"\r\n :doc-no=\"purchaseNo\"\r\n param-key=\"purchase_no\"\r\n />\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <el-table :data=\"logList\" border size=\"small\" style=\"width: 100%\">\r\n <el-table-column prop=\"ctime\" label=\"操作时间\" width=\"170\" />\r\n <el-table-column prop=\"operator\" label=\"操作人\" width=\"120\" />\r\n <el-table-column prop=\"operat_type\" label=\"操作类型\" width=\"160\" show-overflow-tooltip />\r\n <el-table-column label=\"操作详情\" min-width=\"280\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.operat_msg) }}\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div v-if=\"!logList.length\" class=\"empty-tip\">暂无操作日志</div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport DocNoLink from '../DocNoLink.vue'\r\nimport { getDocDetailAdapters } from '../registry'\r\nimport { JRelatedDocs } from '../../JRelatedDocs'\r\nimport type { RelatedDocTypeItem } from '../../JRelatedDocs'\r\n\r\nconst STATUS_MAP: Record<number, string> = {\r\n [-1]: '待提交',\r\n 50: '待审批',\r\n 100: '待下单',\r\n 300: '待到货',\r\n 400: '已完成',\r\n 500: '已驳回',\r\n 600: '已作废',\r\n}\r\n\r\n/** 展示名字段:basic_info 可能没有,优先从首行产品取 */\r\nconst DISPLAY_NAME_KEYS = [\r\n 'status_name',\r\n 'purchase_company_name',\r\n 'supplier_name',\r\n 'stock_name',\r\n 'purchase_type_name',\r\n 'is_tax_included_name',\r\n 'payment_request_status_name',\r\n 'py_method_type_name',\r\n 'ref_date_type_name',\r\n 'settle_cycle_type_name',\r\n] as const\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n /** 采购单号 purchase_no */\r\n purchaseOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('products')\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst basicInfo = computed(() => {\r\n const basic = detail.basic_info\r\n return basic && typeof basic === 'object' ? basic : {}\r\n})\r\n\r\nconst firstProduct = computed(() => {\r\n const list = detail.purchase_products\r\n return Array.isArray(list) && list.length ? list[0] : null\r\n})\r\n\r\n/** 合并 basic_info + 产品行上的 *_name 展示字段 */\r\nconst info = computed(() => {\r\n const merged: Record<string, any> = { ...basicInfo.value }\r\n const product = firstProduct.value\r\n if (product) {\r\n for (const key of DISPLAY_NAME_KEYS) {\r\n if ((merged[key] == null || merged[key] === '') && product[key] != null && product[key] !== '') {\r\n merged[key] = product[key]\r\n }\r\n }\r\n if (!merged.currency && product.currency) merged.currency = product.currency\r\n if (!merged.purchase_currency && product.purchase_currency) {\r\n merged.purchase_currency = product.purchase_currency\r\n }\r\n }\r\n return merged\r\n})\r\n\r\nconst purchaseNo = computed(() => detail.purchase_no || info.value.purchase_no || props.purchaseOrderNo)\r\n\r\nconst productList = computed(() => {\r\n if (Array.isArray(detail.purchase_products)) return detail.purchase_products\r\n if (Array.isArray(detail.products)) return detail.products\r\n if (Array.isArray(detail.items)) return detail.items\r\n return []\r\n})\r\n\r\nconst relatedDocTypes = computed<RelatedDocTypeItem[]>(() => {\r\n const planCount = new Set(\r\n productList.value.map((row: any) => row.requirement_no).filter(Boolean),\r\n ).size\r\n return [\r\n { type: 'purchasePlan', label: '采购计划', count: planCount },\r\n { type: 'deliveryDoc', label: '送货单' },\r\n { type: 'receipt', label: '收货单' },\r\n { type: 'inbound', label: '入库单' },\r\n { type: 'qc', label: '质检单' },\r\n { type: 'putaway', label: '上架单' },\r\n { type: 'processing', label: '加工单' },\r\n { type: 'returnGoods', label: '退换货' },\r\n { type: 'abnormal', label: '收货异常' },\r\n { type: 'shipping', label: '发货单' },\r\n { type: 'customs', label: '报关单' },\r\n { type: 'payment', label: '付款单' },\r\n { type: 'receiptVoucher', label: '收款单' },\r\n ]\r\n})\r\n\r\nconst logList = computed(() => {\r\n if (Array.isArray(detail.operation_logs)) return detail.operation_logs\r\n if (Array.isArray(detail.logs)) return detail.logs\r\n return []\r\n})\r\n\r\nconst attachments = computed(() => parseAttachments(info.value.attachment ?? info.value.attachments))\r\n\r\nconst settlementTermText = computed(() => {\r\n const finalRate = info.value.final_pay_rate\r\n if (finalRate == null || finalRate === '') return ''\r\n const method = String(info.value.py_method_type || '')\r\n const label = method === 'month_settle' ? '收货后尾款' : '尾款'\r\n return `${label}:${formatPercent(finalRate)}`\r\n})\r\n\r\nconst statusLabel = computed(() => {\r\n if (info.value.status_name) return String(info.value.status_name)\r\n const code = Number(info.value.status)\r\n if (Number.isNaN(code)) return '-'\r\n return STATUS_MAP[code] ?? String(info.value.status)\r\n})\r\n\r\nconst statusTagType = computed(() => {\r\n const status = Number(info.value.status)\r\n if (status === -1 || status === 50) return 'warning'\r\n if (status === 100 || status === 300) return 'primary'\r\n if (status === 400) return 'success'\r\n if (status === 500 || status === 600) return 'danger'\r\n return 'info'\r\n})\r\n\r\nconst isUrgent = computed(() => {\r\n const v = Number(info.value.is_urgent ?? detail.is_urgent)\r\n return v === 1 || v === 2\r\n})\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst formatPercent = (val: unknown) => {\r\n if (val === null || val === undefined || val === '') return '-'\r\n const text = String(val)\r\n return text.includes('%') ? text : `${text}%`\r\n}\r\n\r\n/** 接口约定:1=否 2=是(也兼容 0/1) */\r\nconst formatTaxIncluded = (val: unknown) => {\r\n if (val === 2 || val === '2') return '是'\r\n if (val === 1 || val === '1') return '否'\r\n if (val === true) return '是'\r\n if (val === false) return '否'\r\n return undefined\r\n}\r\n\r\nconst parseAttachments = (raw: unknown): Array<{ name: string; url: string }> => {\r\n if (Array.isArray(raw)) {\r\n return raw\r\n .map((file: any) => {\r\n if (typeof file === 'string') return { name: file, url: file }\r\n return {\r\n name: file?.name || file?.file_name || file?.url || '',\r\n url: file?.url || file?.file_url || '',\r\n }\r\n })\r\n .filter((file) => file.name || file.url)\r\n }\r\n if (typeof raw === 'string' && raw.trim()) {\r\n try {\r\n const parsed = JSON.parse(raw)\r\n if (Array.isArray(parsed)) return parseAttachments(parsed)\r\n } catch {\r\n return raw.split(',').filter(Boolean).map((name: string) => ({ name, url: '' }))\r\n }\r\n }\r\n return []\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n activeTab.value = 'products'\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.purchaseOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getPurchaseOrderDetail\r\n if (!fetchApi) {\r\n console.warn('[PurchaseOrderDetailView] 未注入 getPurchaseOrderDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.purchaseOrderNo)\r\n if (res?.code === 1) {\r\n Object.assign(detail, res.data || {})\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[PurchaseOrderDetailView] getPurchaseOrderDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.purchase-detail {\r\n min-height: 200px;\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n}\r\n\r\n.section-title {\r\n margin: 0 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 8px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-item--full {\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.settlement-value {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.5;\r\n}\r\n\r\n.settlement-term {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.attachment-list {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 6px;\r\n min-width: 0;\r\n}\r\n\r\n.attachment-chip {\r\n display: inline-flex;\r\n align-items: center;\r\n max-width: 220px;\r\n height: 24px;\r\n padding: 0 8px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n font-size: 12px;\r\n color: #409eff;\r\n text-decoration: none;\r\n background: #f5f7fa;\r\n border: 1px solid #e4e7ed;\r\n border-radius: 4px;\r\n box-sizing: border-box;\r\n}\r\n\r\n.detail-tabs {\r\n margin-top: 12px;\r\n}\r\n\r\n.product-image {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 4px;\r\n border: 1px solid #ebeef5;\r\n}\r\n\r\n.product-image--empty {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n background: #f5f7fa;\r\n}\r\n\r\n.product-cell {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.4;\r\n}\r\n\r\n.product-cell__name {\r\n color: #303133;\r\n font-size: 13px;\r\n}\r\n\r\n.product-cell__sku {\r\n color: #409eff;\r\n font-size: 12px;\r\n}\r\n\r\n.empty-tip {\r\n margin-top: 8px;\r\n font-size: 12px;\r\n color: #909399;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 采购计划只读详情(DocNoLink / DocDetailHost)\r\n type=\"purchasePlan\"\r\n 接口:adapters.getPurchasePlanDetail(requirement_no) → { code, data }\r\n data 对齐 scm getPurchasePlanDetail(含 purchase_products / operation_logs;关联单据走 JRelatedDocs)\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"purchase-plan-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">采购计划</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(requirementNo) }}</span>\r\n <el-tag v-if=\"statusLabel !== '-'\" size=\"small\" :type=\"statusTagType\">\r\n {{ statusLabel }}\r\n </el-tag>\r\n <el-tag v-if=\"isUrgent\" type=\"danger\" size=\"small\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"purchase-plan-detail\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchase_company_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">单据负责人:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchaser_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">创建人:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.operator_name || detail.operator) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">创建时间:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.ctime) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">批次号:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.requirement_batch_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">补货计划号:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.replenishment_plan_no) }}</span>\r\n </div>\r\n <div class=\"info-item info-item--full\">\r\n <span class=\"info-label\">基本信息备注:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.base_remark || detail.remark) }}</span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"采购产品\" name=\"products\">\r\n <el-table :data=\"productList\" border size=\"small\" style=\"width: 100%\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"productImage(row)\"\r\n :src=\"productImage(row)\"\r\n :preview-src-list=\"[productImage(row)]\"\r\n fit=\"cover\"\r\n class=\"product-image\"\r\n preview-teleported\r\n />\r\n <span v-else class=\"product-image product-image--empty\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-cell\">\r\n <div class=\"product-cell__name\">{{ row.bis_sku.product_name }}</div>\r\n <div class=\"product-cell__sku\">\r\n <JSkuLink v-if=\"row.sku || row.sku_code\" :code=\"row.sku || row.sku_code\" />\r\n <span v-else>-</span>\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n {{\r\n displayValue(\r\n row.shop_account_display ||\r\n row.shop_account_name ||\r\n row.shop_account,\r\n )\r\n }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购仓库\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.stock_name || row.stock_code) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"计划采购量\" width=\"100\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_plan_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"已采购量\" width=\"100\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.purchased_plan_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"单箱数量\" width=\"90\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.box_sku_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"箱数\" width=\"80\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.box_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"期望下单\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.expected_order_date) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <JRelatedDocs\r\n v-if=\"activeTab === 'related' && requirementNo\"\r\n :doc-types=\"relatedDocTypes\"\r\n :doc-no=\"requirementNo\"\r\n param-key=\"requirement_no\"\r\n />\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <el-table :data=\"logList\" border size=\"small\" style=\"width: 100%\">\r\n <el-table-column label=\"操作时间\" width=\"170\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.operate_time || row.ctime) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作人\" width=\"120\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.operator_name || row.operator) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作类型\" width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.operate_type_name || row.operat_type) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作详情\" min-width=\"280\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.operate_detail || row.operat_msg) }}\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div v-if=\"!logList.length\" class=\"empty-tip\">暂无操作日志</div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { getDocDetailAdapters } from '../registry'\r\nimport { JRelatedDocs } from '../../JRelatedDocs'\r\nimport type { RelatedDocTypeItem } from '../../JRelatedDocs'\r\n\r\n/** 与 scm 采购计划列表状态文案对齐 */\r\nconst STATUS_MAP: Record<number, string> = {\r\n [-1]: '待审批',\r\n 100: '待采购',\r\n 200: '采购中',\r\n 300: '已完成',\r\n 400: '已驳回',\r\n 500: '已作废',\r\n}\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n /** 采购计划单号 requirement_no */\r\n purchasePlanNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('products')\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst requirementNo = computed(\r\n () => detail.requirement_no || props.purchasePlanNo,\r\n)\r\n\r\nconst productList = computed(() => {\r\n const list = detail.purchase_products\r\n if (Array.isArray(list) && list.length > 0) return list\r\n // 接口偶发把产品字段摊在根上\r\n if (detail.sku || detail.sku_code || detail.product_name) return [detail]\r\n return []\r\n})\r\n\r\nconst relatedDocTypes: RelatedDocTypeItem[] = [\r\n { type: 'purchase', label: '采购单' },\r\n { type: 'processing', label: '加工单' },\r\n { type: 'receipt', label: '收货单' },\r\n { type: 'qc', label: '质检单' },\r\n { type: 'inbound', label: '入库单' },\r\n { type: 'putaway', label: '上架单' },\r\n]\r\n\r\nconst logList = computed(() => {\r\n if (Array.isArray(detail.operation_logs)) return detail.operation_logs\r\n if (Array.isArray(detail.logs)) return detail.logs\r\n return []\r\n})\r\n\r\nconst statusLabel = computed(() => {\r\n if (detail.status_name) return String(detail.status_name)\r\n const code = Number(detail.status)\r\n if (Number.isNaN(code)) return '-'\r\n return STATUS_MAP[code] ?? String(detail.status)\r\n})\r\n\r\nconst statusTagType = computed(() => {\r\n const status = Number(detail.status)\r\n if (status === -1 || status === 400) return 'warning'\r\n if (status === 100 || status === 200) return 'primary'\r\n if (status === 300) return 'success'\r\n if (status === 500) return 'danger'\r\n return 'info'\r\n})\r\n\r\nconst isUrgent = computed(() => {\r\n const v = Number(detail.is_urgent)\r\n return v === 1 || v === 2\r\n})\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst productImage = (row: Record<string, any>) =>\r\n String(\r\n row?.main_image ||\r\n row?.image ||\r\n row?.bis_sku?.main_image ||\r\n row?.bis_sku?.image ||\r\n row?.att_files ||\r\n row?.image_url ||\r\n '',\r\n ).trim()\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n activeTab.value = 'products'\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.purchasePlanNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getPurchasePlanDetail\r\n if (!fetchApi) {\r\n console.warn('[PurchasePlanDetailView] 未注入 getPurchasePlanDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.purchasePlanNo)\r\n if (res?.code === 1) {\r\n Object.assign(detail, res.data || {})\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[PurchasePlanDetailView] getPurchasePlanDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.purchase-plan-detail {\r\n min-height: 200px;\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n}\r\n\r\n.section-title {\r\n margin: 16px 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 8px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-item--full {\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.detail-tabs {\r\n margin-top: 8px;\r\n}\r\n\r\n.product-image {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 4px;\r\n border: 1px solid #ebeef5;\r\n}\r\n\r\n.product-image--empty {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n background: #f5f7fa;\r\n width: 40px;\r\n height: 40px;\r\n}\r\n\r\n.product-cell {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.4;\r\n}\r\n\r\n.product-cell__name {\r\n color: #303133;\r\n font-size: 13px;\r\n}\r\n\r\n.product-cell__sku {\r\n color: #409eff;\r\n font-size: 12px;\r\n}\r\n\r\n.empty-tip {\r\n margin-top: 12px;\r\n text-align: center;\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 采购合同只读详情(DocNoLink / DocDetailHost)\r\n type=\"purchaseContract\"\r\n 接口:adapters.getPurchaseContractDetail(contract_no) → { code, data }\r\n data 对齐 scm queryPurchaseContractDetail 单条(含 purchase_order_detail_list)\r\n 关联单据 / 审批流后续再接\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"purchase-contract-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">采购合同</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(contractNo) }}</span>\r\n <el-tag v-if=\"statusLabel !== '-'\" size=\"small\" :type=\"statusTagType\">\r\n {{ statusLabel }}\r\n </el-tag>\r\n <el-tag v-if=\"isUrgent\" type=\"danger\" size=\"small\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"purchase-contract-detail\">\r\n <div class=\"section-title\">申请信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">盖章方式:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.seal_method_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">供应商盖章:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.is_supplier_sealed_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司盖章:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.is_purchase_company_sealed_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">合同变更:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.is_contract_change_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">框架协议:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.frame_contract_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">结算方式:</span>\r\n <span class=\"info-value\">{{ settlementMethodText }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">预付比例:</span>\r\n <span class=\"info-value\">{{ formatPercent(detail.prepayment_percent) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">预付金额:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.prepayment_amount) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">尾款比例:</span>\r\n <span class=\"info-value\">{{ formatPercent(detail.balance_percent) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">尾款金额:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.balance_amount) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">交付周期:</span>\r\n <span class=\"info-value\">\r\n {{\r\n detail.delivery_cycle != null && detail.delivery_cycle !== ''\r\n ? `${detail.delivery_cycle}天`\r\n : '-'\r\n }}\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">交期描述:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.delivery_desc) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">付款描述:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.payment_desc) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">账期规划:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.payment_schedule) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">账期时间:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.account_period_date) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">合同接收人:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.contract_receiver) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">接收方式:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.receive_method_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">联系方式:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.contact_info) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">申请人:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.applicant_name || detail.applicant) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">申请时间:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.apply_time) }}</span>\r\n </div>\r\n <div class=\"info-item info-item--full\">\r\n <span class=\"info-label\">备注:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.remark) }}</span>\r\n </div>\r\n <div v-if=\"fileNames.length\" class=\"info-item info-item--full\">\r\n <span class=\"info-label\">合同文件:</span>\r\n <span class=\"info-value\">{{ fileNames.join('、') }}</span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"采购订单信息\" name=\"orders\">\r\n <el-table\r\n :data=\"orderList\"\r\n border\r\n size=\"small\"\r\n style=\"width: 100%\"\r\n empty-text=\"暂无关联采购单\"\r\n >\r\n <el-table-column label=\"采购单号\" min-width=\"150\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.purchase_order_no || row.purchase_no\"\r\n type=\"purchase\"\r\n :order-no=\"String(row.purchase_order_no || row.purchase_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购产品\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div class=\"po-product-cell\">\r\n <el-image\r\n v-for=\"(img, index) in (row.product_main_images || []).slice(0, 3)\"\r\n :key=\"index\"\r\n :src=\"img\"\r\n fit=\"cover\"\r\n class=\"po-product-image\"\r\n preview-teleported\r\n />\r\n <span v-if=\"row.product_count\" class=\"po-product-count\">\r\n 共{{ row.product_count }}个产品\r\n </span>\r\n <span v-if=\"!row.product_main_images?.length && !row.product_count\">-</span>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购量\" width=\"90\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"结算方式\" min-width=\"110\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n {{\r\n displayValue(\r\n row.settlement_method_name ||\r\n row.settlement_method_label ||\r\n row.py_method_type_name,\r\n )\r\n }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"预付\" min-width=\"120\">\r\n <template #default=\"{ row }\">\r\n <div>{{ displayValue(row.prepay_rate) }}%</div>\r\n <div class=\"sub-text\">¥{{ displayValue(row.prepay_amount) }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"尾款\" min-width=\"120\">\r\n <template #default=\"{ row }\">\r\n <div>{{ displayValue(row.final_pay_rate) }}%</div>\r\n <div class=\"sub-text\">¥{{ displayValue(row.final_pay_amount) }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"总金额(含税)\" min-width=\"120\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n ¥{{ displayValue(row.total_amount_tax_incl) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"结算备注\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.settlement_remark) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"最晚预计到货\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.latest_expected_arrival_date) }}\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div v-if=\"orderList.length\" class=\"contract-summary\">\r\n <span>合计:{{ summary.orderCount }} 个采购单,{{ summary.productCount }} 个产品</span>\r\n <span>总金额(含税¥):{{ summary.totalIncl }}</span>\r\n <span>总金额(不含税¥):{{ summary.totalExcl }}</span>\r\n </div>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <!-- 关联单据后续再接,先占位 -->\r\n <div class=\"empty-tip\">暂无关联单据</div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport DocNoLink from '../DocNoLink.vue'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n /** 采购合同编号 contract_no */\r\n purchaseContractNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('orders')\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst contractNo = computed(() => detail.contract_no || props.purchaseContractNo)\r\n\r\nconst orderList = computed(() =>\r\n Array.isArray(detail.purchase_order_detail_list) ? detail.purchase_order_detail_list : [],\r\n)\r\n\r\nconst firstOrder = computed(() => (orderList.value.length ? orderList.value[0] : null))\r\n\r\nconst settlementMethodText = computed(() => {\r\n const row = firstOrder.value || detail\r\n return (\r\n displayValue(\r\n detail.settlement_method_name ||\r\n detail.settlement_method_label ||\r\n detail.py_method_type_name ||\r\n row?.settlement_method_name ||\r\n row?.settlement_method_label ||\r\n row?.py_method_type_name,\r\n )\r\n )\r\n})\r\n\r\nconst fileNames = computed(() => {\r\n const list = detail.source_file_list\r\n if (!Array.isArray(list)) return []\r\n return list\r\n .map((file: any) => file?.name || file?.file_name || '')\r\n .filter(Boolean)\r\n})\r\n\r\nconst summary = computed(() => {\r\n const list = orderList.value\r\n const orderCount = list.length\r\n const productCount = list.reduce((sum: number, row: any) => sum + Number(row.product_count || 0), 0)\r\n const totalIncl = list.reduce(\r\n (sum: number, row: any) => sum + Number(row.total_amount_tax_incl || 0),\r\n 0,\r\n )\r\n const totalExcl = list.reduce(\r\n (sum: number, row: any) => sum + Number(row.total_amount_tax_excl || row.total_amount || 0),\r\n 0,\r\n )\r\n const fmt = (n: number) => (Number.isFinite(n) ? n.toFixed(2) : '-')\r\n return {\r\n orderCount,\r\n productCount: productCount || Number(detail.product_count || 0) || '-',\r\n totalIncl: fmt(totalIncl || Number(detail.total_amount_tax_incl || 0)),\r\n totalExcl: fmt(totalExcl || Number(detail.total_amount_tax_excl || 0)),\r\n }\r\n})\r\n\r\nconst statusLabel = computed(() => {\r\n if (detail.status_name) return String(detail.status_name)\r\n return detail.status != null && detail.status !== '' ? String(detail.status) : '-'\r\n})\r\n\r\nconst statusTagType = computed(() => {\r\n const status = Number(detail.status)\r\n if (status === 50) return 'info'\r\n if (status === 100 || status === 200) return 'warning'\r\n if (status === 300) return 'success'\r\n if (status === 400) return 'danger'\r\n if (status === 500) return 'info'\r\n return 'info'\r\n})\r\n\r\nconst isUrgent = computed(() => {\r\n const v = Number(detail.is_urgent)\r\n return v === 1 || v === 2\r\n})\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst formatPercent = (val: unknown) => {\r\n if (val === null || val === undefined || val === '') return '-'\r\n const text = String(val)\r\n return text.includes('%') ? text : `${text}%`\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n activeTab.value = 'orders'\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.purchaseContractNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getPurchaseContractDetail\r\n if (!fetchApi) {\r\n console.warn('[PurchaseContractDetailView] 未注入 getPurchaseContractDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.purchaseContractNo)\r\n if (res?.code === 1) {\r\n Object.assign(detail, res.data || {})\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[PurchaseContractDetailView] getPurchaseContractDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.purchase-contract-detail {\r\n min-height: 200px;\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n}\r\n\r\n.section-title {\r\n margin: 16px 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 8px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-item--full {\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.detail-tabs {\r\n margin-top: 8px;\r\n}\r\n\r\n.po-product-cell {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.po-product-image {\r\n width: 36px;\r\n height: 36px;\r\n border-radius: 4px;\r\n border: 1px solid #ebeef5;\r\n}\r\n\r\n.po-product-count {\r\n color: #606266;\r\n font-size: 12px;\r\n}\r\n\r\n.sub-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.contract-summary {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 16px;\r\n margin-top: 12px;\r\n font-size: 13px;\r\n color: #606266;\r\n}\r\n\r\n.empty-tip {\r\n margin-top: 12px;\r\n text-align: center;\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n SCM 送货单只读详情(DocNoLink / DocDetailHost)\r\n type=\"deliveryDoc\"\r\n 勿与 type=\"delivery\"(WMS 出库单 DeliveryOrderDetailView)混淆\r\n 接口:adapters.getDeliveryDocDetail(delivery_no) → { code, data }\r\n data 对齐 scm 送货单列表分组结构(含 items / operation_logs)\r\n 关联单据后续再接\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"delivery-doc-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">送货单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(deliveryNo) }}</span>\r\n <el-tag v-if=\"statusLabel !== '-'\" size=\"small\" :type=\"statusTagType\">\r\n {{ statusLabel }}\r\n </el-tag>\r\n <el-tag v-if=\"isUrgent\" type=\"danger\" size=\"small\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"delivery-doc-detail\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司:</span>\r\n <span class=\"info-value\">\r\n {{ displayValue(detail.purchase_company_name || detail.purchase_company) }}\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购仓库:</span>\r\n <span class=\"info-value\">\r\n {{ displayValue(detail.receive_stock_name || detail.warehouse) }}\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">供应商:</span>\r\n <span class=\"info-value\">\r\n {{ displayValue(detail.supplier_name || detail.supplier) }}\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购员:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchaser) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">创建时间:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.ctime || detail.create_time) }}</span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"送货产品\" name=\"products\">\r\n <el-table :data=\"itemList\" border size=\"small\" style=\"width: 100%\" empty-text=\"暂无送货明细\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.main_image || row.image\"\r\n :src=\"row.main_image || row.image\"\r\n :preview-src-list=\"[row.main_image || row.image]\"\r\n fit=\"cover\"\r\n class=\"product-image\"\r\n preview-teleported\r\n />\r\n <span v-else class=\"product-image product-image--empty\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-cell\">\r\n <div class=\"product-cell__name\">{{ displayValue(row.product_name) }}</div>\r\n <div class=\"product-cell__sku\">\r\n <JSkuLink v-if=\"row.sku || row.sku_code\" :code=\"row.sku || row.sku_code\" />\r\n <span v-else>-</span>\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单号\" min-width=\"150\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.purchase_no\"\r\n type=\"purchase\"\r\n :order-no=\"String(row.purchase_no)\"\r\n />\r\n <span v-else>-</span>\r\n <el-tag\r\n v-if=\"Number(row.purchase_is_urgent) === 2 || Number(row.is_urgent) === 2\"\r\n type=\"danger\"\r\n size=\"small\"\r\n class=\"inline-tag\"\r\n >\r\n 急\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购量\" width=\"80\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"本次送货量\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.current_delivery_qty) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"建议送货量\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.suggested_delivery_qty) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"箱规名称\" min-width=\"100\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.box_spec_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"单箱数量\" width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.box_sku_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"箱数\" width=\"70\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.box_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"预计到货日期\" width=\"120\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.expected_arrival_date) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"建议送货日期\" width=\"120\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.suggested_delivery_date) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"质检类型\" width=\"90\">\r\n <template #default=\"{ row }\">{{ displayValue(row.qc_type_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"送货备注\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.delivery_remark) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <!-- 关联单据后续再接,先占位 -->\r\n <div class=\"empty-tip\">暂无关联单据</div>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <el-table :data=\"logList\" border size=\"small\" style=\"width: 100%\">\r\n <el-table-column label=\"操作时间\" width=\"170\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.operate_time || row.ctime || row.create_time) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作人\" width=\"120\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.operator_name || row.operator) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作类型\" width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.operate_type_name || row.operat_type || row.operate_type) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作详情\" min-width=\"280\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.operate_detail || row.operat_msg || row.remark) }}\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div v-if=\"!logList.length\" class=\"empty-tip\">暂无操作日志</div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport DocNoLink from '../DocNoLink.vue'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n /** 送货单号 delivery_no */\r\n deliveryDocNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('products')\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst deliveryNo = computed(() => detail.delivery_no || props.deliveryDocNo)\r\n\r\nconst itemList = computed(() => (Array.isArray(detail.items) ? detail.items : []))\r\n\r\nconst logList = computed(() => {\r\n if (Array.isArray(detail.operation_logs)) return detail.operation_logs\r\n if (Array.isArray(detail.logs)) return detail.logs\r\n return []\r\n})\r\n\r\nconst statusLabel = computed(() => {\r\n if (detail.status_name) return String(detail.status_name)\r\n return detail.status != null && detail.status !== '' ? String(detail.status) : '-'\r\n})\r\n\r\nconst statusTagType = computed(() => {\r\n const status = Number(detail.status)\r\n if (status === 100) return 'warning'\r\n if (status === 200) return 'success'\r\n if (status === 300) return 'danger'\r\n return 'info'\r\n})\r\n\r\nconst isUrgent = computed(() => {\r\n const v = Number(detail.is_urgent)\r\n return v === 1 || v === 2 || detail.is_urgent === true\r\n})\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n activeTab.value = 'products'\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.deliveryDocNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getDeliveryDocDetail\r\n if (!fetchApi) {\r\n console.warn('[DeliveryDocDetailView] 未注入 getDeliveryDocDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.deliveryDocNo)\r\n if (res?.code === 1) {\r\n Object.assign(detail, res.data || {})\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[DeliveryDocDetailView] getDeliveryDocDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.delivery-doc-detail {\r\n min-height: 200px;\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n}\r\n\r\n.section-title {\r\n margin: 16px 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 8px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.detail-tabs {\r\n margin-top: 8px;\r\n}\r\n\r\n.product-image {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 4px;\r\n border: 1px solid #ebeef5;\r\n}\r\n\r\n.product-image--empty {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n background: #f5f7fa;\r\n width: 40px;\r\n height: 40px;\r\n}\r\n\r\n.product-cell {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.4;\r\n}\r\n\r\n.product-cell__name {\r\n color: #303133;\r\n font-size: 13px;\r\n}\r\n\r\n.product-cell__sku {\r\n color: #409eff;\r\n font-size: 12px;\r\n}\r\n\r\n.inline-tag {\r\n margin-left: 4px;\r\n}\r\n\r\n.empty-tip {\r\n margin-top: 12px;\r\n text-align: center;\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","import type { DocDetailComponents } from './types'\r\nimport ReceiptOrderDetailView from './views/ReceiptOrderDetailView.vue'\r\nimport QcOrderDetailView from './views/QcOrderDetailView.vue'\r\nimport InboundOrderDetailView from './views/InboundOrderDetailView.vue'\r\nimport PutawayOrderDetailView from './views/PutawayOrderDetailView.vue'\r\nimport DeliveryOrderDetailView from './views/DeliveryOrderDetailView.vue'\r\nimport TransferOrderDetailView from './views/TransferOrderDetailView.vue'\r\nimport WorkOrderDetailView from './views/WorkOrderDetailView.vue'\r\nimport AbnormalOrderDetailView from './views/AbnormalOrderDetailView.vue'\r\nimport PaymentRequestDetailView from './views/PaymentRequestDetailView.vue'\r\nimport ReturnOrderDetailView from './views/ReturnOrderDetailView.vue'\r\nimport CostExpenseDetailView from './views/CostExpenseDetailView.vue'\r\nimport ReceiptVoucherDetailView from './views/ReceiptVoucherDetailView.vue'\r\nimport PurchaseOrderDetailView from './views/PurchaseOrderDetailView.vue'\r\nimport PurchasePlanDetailView from './views/PurchasePlanDetailView.vue'\r\nimport PurchaseContractDetailView from './views/PurchaseContractDetailView.vue'\r\nimport DeliveryDocDetailView from './views/DeliveryDocDetailView.vue'\r\n\r\n/** WMS / SCM 默认只读详情组件映射(接口由业务项目 adapters 注入) */\r\nexport const wmsDocDetailComponents: DocDetailComponents = {\r\n receipt: {\r\n component: ReceiptOrderDetailView,\r\n orderNoProp: 'receiptOrderNo',\r\n },\r\n qc: {\r\n component: QcOrderDetailView,\r\n orderNoProp: 'qcOrderNo',\r\n },\r\n inbound: {\r\n component: InboundOrderDetailView,\r\n orderNoProp: 'inboundOrderNo',\r\n },\r\n putaway: {\r\n component: PutawayOrderDetailView,\r\n orderNoProp: 'putawayOrderNo',\r\n },\r\n delivery: {\r\n component: DeliveryOrderDetailView,\r\n orderNoProp: 'outboundOrderNo',\r\n },\r\n /**\r\n * SCM 送货单(采购送货通知)\r\n * 勿与上方 delivery(WMS 出库单)混淆\r\n */\r\n deliveryDoc: {\r\n component: DeliveryDocDetailView,\r\n orderNoProp: 'deliveryDocNo',\r\n },\r\n transfer: {\r\n component: TransferOrderDetailView,\r\n orderNoProp: 'transferOrderNo',\r\n },\r\n processing: {\r\n component: WorkOrderDetailView,\r\n orderNoProp: 'processingOrderNo',\r\n },\r\n abnormal: {\r\n component: AbnormalOrderDetailView,\r\n orderNoProp: 'abnormalOrderNo',\r\n },\r\n /** 付款单 / 请款单 */\r\n payment: {\r\n component: PaymentRequestDetailView,\r\n orderNoProp: 'paymentRequestNo',\r\n },\r\n /** 退换货单 */\r\n returnGoods: {\r\n component: ReturnOrderDetailView,\r\n orderNoProp: 'returnOrderNo',\r\n },\r\n /** 成本费用单 */\r\n costExpense: {\r\n component: CostExpenseDetailView,\r\n orderNoProp: 'costExpenseNo',\r\n },\r\n /** 收款单(采购收款,勿与 WMS receipt 收货单混淆) */\r\n receiptVoucher: {\r\n component: ReceiptVoucherDetailView,\r\n orderNoProp: 'receiptVoucherNo',\r\n },\r\n /** 采购订单 */\r\n purchase: {\r\n component: PurchaseOrderDetailView,\r\n orderNoProp: 'purchaseOrderNo',\r\n },\r\n /** 采购计划 */\r\n purchasePlan: {\r\n component: PurchasePlanDetailView,\r\n orderNoProp: 'purchasePlanNo',\r\n },\r\n /** 采购合同 */\r\n purchaseContract: {\r\n component: PurchaseContractDetailView,\r\n orderNoProp: 'purchaseContractNo',\r\n },\r\n}\r\n\r\nexport {\r\n ReceiptOrderDetailView,\r\n QcOrderDetailView,\r\n InboundOrderDetailView,\r\n PutawayOrderDetailView,\r\n DeliveryOrderDetailView,\r\n TransferOrderDetailView,\r\n WorkOrderDetailView,\r\n AbnormalOrderDetailView,\r\n PaymentRequestDetailView,\r\n ReturnOrderDetailView,\r\n CostExpenseDetailView,\r\n ReceiptVoucherDetailView,\r\n PurchaseOrderDetailView,\r\n PurchasePlanDetailView,\r\n PurchaseContractDetailView,\r\n DeliveryDocDetailView,\r\n}\r\n","/**\r\n * 递归转换值(处理嵌套对象和数组)\r\n */\r\nfunction deepTransformValue(value: any, transformer: (obj: Record<string, any>) => Record<string, any>): any {\r\n if (Array.isArray(value)) {\r\n return value.map((item) => deepTransformValue(item, transformer))\r\n }\r\n if (value !== null && typeof value === 'object' && !(value instanceof Date)) {\r\n return transformer(value)\r\n }\r\n return value\r\n}\r\n\r\n/**\r\n * 将对象的 key 从小驼峰转为下划线格式(支持深度嵌套)\r\n * @param obj 需要转换的对象\r\n * @param excludeKeys 不需要转换的 key 数组(可选)\r\n */\r\nexport function toSnakeCase<T extends Record<string, any>>(\r\n obj: T,\r\n excludeKeys: string[] = []\r\n): Record<string, any> {\r\n return Object.fromEntries(\r\n Object.entries(obj).map(([key, value]) => {\r\n const newValue = deepTransformValue(value, (v) => toSnakeCase(v, excludeKeys))\r\n if (excludeKeys.includes(key)) {\r\n return [key, newValue]\r\n }\r\n const snakeKey = key.replace(/([A-Z])/g, '_$1').toLowerCase()\r\n return [snakeKey, newValue]\r\n })\r\n )\r\n}\r\n\r\n/**\r\n * 将对象的 key 从下划线格式转为小驼峰(支持深度嵌套)\r\n * @param obj 需要转换的对象\r\n * @param excludeKeys 不需要转换的 key 数组(可选)\r\n */\r\nexport function toCamelCase<T extends Record<string, any>>(\r\n obj: T,\r\n excludeKeys: string[] = []\r\n): Record<string, any> {\r\n return Object.fromEntries(\r\n Object.entries(obj).map(([key, value]) => {\r\n const newValue = deepTransformValue(value, (v) => toCamelCase(v, excludeKeys))\r\n if (excludeKeys.includes(key)) {\r\n return [key, newValue]\r\n }\r\n const camelKey = key.replace(/_([a-z])/g, (_, char) => char.toUpperCase())\r\n return [camelKey, newValue]\r\n })\r\n )\r\n}\r\n\r\n/**\r\n * 从对象中提取指定的 key\r\n * @param obj 源对象\r\n * @param keys 要提取的 key 数组\r\n */\r\nexport function pick<T extends Record<string, any>, K extends keyof T>(\r\n obj: T,\r\n keys: K[]\r\n): Pick<T, K> {\r\n const result = {} as Pick<T, K>\r\n for (const key of keys) {\r\n if (key in obj) {\r\n result[key] = obj[key]\r\n }\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * 从对象中排除指定的 key\r\n * @param obj 源对象\r\n * @param keys 要排除的 key 数组\r\n */\r\nexport function omit<T extends Record<string, any>, K extends keyof T>(\r\n obj: T,\r\n keys: K[]\r\n): Omit<T, K> {\r\n const result = { ...obj }\r\n for (const key of keys) {\r\n delete result[key]\r\n }\r\n return result as Omit<T, K>\r\n}\r\n\r\n/**\r\n * 深拷贝对象\r\n * @param obj 需要拷贝的对象\r\n */\r\nexport function deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== 'object') return obj\r\n if (obj instanceof Date) return new Date(obj.getTime()) as unknown as T\r\n if (obj instanceof RegExp) return new RegExp(obj.source, obj.flags) as unknown as T\r\n if (Array.isArray(obj)) return obj.map((item) => deepClone(item)) as unknown as T\r\n const cloned = {} as Record<string, any>\r\n for (const key of Object.keys(obj)) {\r\n cloned[key] = deepClone((obj as Record<string, any>)[key])\r\n }\r\n return cloned as T\r\n}\r\n\r\n/**\r\n * 过滤对象中的空值(null、undefined、空字符串)\r\n * @param obj 需要过滤的对象\r\n * @param deep 是否递归过滤嵌套对象,默认 false\r\n */\r\nexport function filterEmpty<T extends Record<string, any>>(\r\n obj: T,\r\n deep = false\r\n): Partial<T> {\r\n const result = {} as Record<string, any>\r\n for (const [key, value] of Object.entries(obj)) {\r\n if (value === null || value === undefined || value === '') continue\r\n if (deep && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {\r\n const filtered = filterEmpty(value, true)\r\n if (Object.keys(filtered).length > 0) {\r\n result[key] = filtered\r\n }\r\n } else {\r\n result[key] = value\r\n }\r\n }\r\n return result as Partial<T>\r\n}\r\n\r\n/**\r\n * 将嵌套对象扁平化为单层对象\r\n * @param obj 需要扁平化的对象\r\n * @param prefix key 前缀,默认为空\r\n * @param separator 分隔符,默认为 '.'\r\n * @example flatten({ a: { b: 1, c: { d: 2 } } }) => { 'a.b': 1, 'a.c.d': 2 }\r\n */\r\nexport function flatten(\r\n obj: Record<string, any>,\r\n prefix = '',\r\n separator = '.'\r\n): Record<string, any> {\r\n const result: Record<string, any> = {}\r\n for (const [key, value] of Object.entries(obj)) {\r\n const newKey = prefix ? `${prefix}${separator}${key}` : key\r\n if (value !== null && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {\r\n Object.assign(result, flatten(value, newKey, separator))\r\n } else {\r\n result[newKey] = value\r\n }\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * 将扁平化的对象还原为嵌套对象\r\n * @param obj 扁平化的对象\r\n * @param separator 分隔符,默认为 '.'\r\n * @example unflatten({ 'a.b': 1, 'a.c.d': 2 }) => { a: { b: 1, c: { d: 2 } } }\r\n */\r\nexport function unflatten(\r\n obj: Record<string, any>,\r\n separator = '.'\r\n): Record<string, any> {\r\n const result: Record<string, any> = {}\r\n for (const [key, value] of Object.entries(obj)) {\r\n const parts = key.split(separator)\r\n let current = result\r\n for (let i = 0; i < parts.length - 1; i++) {\r\n const k = parts[i] as string\r\n if (!(k in current)) {\r\n current[k] = {}\r\n }\r\n current = current[k]\r\n }\r\n current[parts[parts.length - 1] as string] = value\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * 将 { key: label } 对象转换为 el-table-column 所需的表头数组\r\n * @param fieldMap 字段映射对象\r\n * @example toTableColumns({ id: '主键', name: '名称' }) => [{ id: 'id', label: '主键', prop: 'id' }, ...]\r\n */\r\nexport function toTableColumns(fieldMap: Record<string, string>) {\r\n return Object.entries(fieldMap).map(([key, label]) => ({\r\n id: key,\r\n label,\r\n prop: key,\r\n }))\r\n}\r\n","/**\r\n * 各状态条数接口统一处理工具\r\n *\r\n * 后端「各状态返回条数」接口统一返回数组,例如:\r\n * [\r\n * { status: 'all', status_name: '全部', count: 10 },\r\n * { status: -1, status_name: '草稿', count: 1 },\r\n * { status: 100, status_name: '待审核', count: 2 },\r\n * ...\r\n * ]\r\n * - status: 状态码(number | string),'all' / null / 空 表示「全部」\r\n * - status_name / name: 状态中文名\r\n * - count: 该状态下的条数\r\n *\r\n * 兼容旧对象格式({ all: 17, pendingSubmit: 7, ... })。\r\n */\r\n\r\nexport interface StatusCountItem {\r\n name?: string\r\n /** 部分接口用 status_name 表示状态中文名 */\r\n status_name?: string\r\n status?: number | string | null\r\n count?: number | string\r\n}\r\n\r\nexport interface StatusCountLookup {\r\n /**\r\n * 按 status 取条数\r\n * - number:具体状态码(含 -1)\r\n * - null / undefined / 'all':全部\r\n * - 其它 string:按原始 status 字符串匹配\r\n */\r\n byStatus: (status: number | string | null | undefined) => number\r\n /** 按 name / status_name 中文名取条数 */\r\n byName: (name: string) => number\r\n /** 「全部」的条数 */\r\n all: () => number\r\n /** 是否为旧对象格式(未迁移到数组) */\r\n isLegacyObject: boolean\r\n /** 旧对象格式时的原始对象(数组格式时为空对象) */\r\n legacyObject: Record<string, number>\r\n}\r\n\r\n/** 解包 data 层:优先 data 数组,其次 data.list,最后整包 */\r\nfunction unwrapPayload(res: any): any {\r\n if (Array.isArray(res)) return res\r\n if (Array.isArray(res?.data)) return res.data\r\n if (Array.isArray(res?.data?.list)) return res.data.list\r\n if (res?.data != null && typeof res.data === 'object') return res.data\r\n return res\r\n}\r\n\r\n/** 是否为「全部」状态标记 */\r\nfunction isAllStatus(status: number | string | null | undefined): boolean {\r\n if (status === null || status === undefined || status === '') return true\r\n if (status === 0 || status === '0') return true\r\n if (typeof status === 'string' && status.toLowerCase() === 'all') return true\r\n return false\r\n}\r\n\r\n/** 是否为「全部」Tab(与 el-tab-pane :name / 列表 status 参数对齐) */\r\nexport function isAllStatusTab(status: unknown): boolean {\r\n return isAllStatus(status as number | string | null | undefined)\r\n}\r\n\r\n/** Tab 选中值 → 列表查询 status(全部不传) */\r\nexport function resolveListStatusParam(tab: unknown): number | undefined {\r\n if (isAllStatusTab(tab)) return undefined\r\n const n = Number(tab)\r\n return Number.isFinite(n) ? n : undefined\r\n}\r\n\r\n/** 接口 status → tab :name(全部统一为 'all') */\r\nexport function toTabName(status: unknown): string {\r\n if (isAllStatusTab(status)) return 'all'\r\n return String(status)\r\n}\r\n\r\nexport type StatusTabListItem = {\r\n status?: unknown\r\n status_name?: string\r\n name?: string\r\n /** 列表顶栏若已生成 tab_name,同步时优先使用 */\r\n tab_name?: string\r\n}\r\n\r\n/**\r\n * 从 Tab 列表解析「全部」的 :name 值\r\n * @param asString 与 :name=\"String(tab.status)\" 对齐时为 true\r\n */\r\nexport function getAllTabName(\r\n tabs: StatusTabListItem[] = [],\r\n options?: { asString?: boolean },\r\n): string | number {\r\n const allTab = tabs.find(\r\n (tab) =>\r\n tab.name === '全部'\r\n || tab.status_name === '全部'\r\n || isAllStatusTab(tab.status),\r\n )\r\n if (allTab?.tab_name != null && allTab.tab_name !== '') {\r\n return allTab.tab_name\r\n }\r\n const status = allTab?.status as number | string | null | undefined\r\n if (isAllStatus(status)) {\r\n return options?.asString ? 'all' : (status ?? 0)\r\n }\r\n if (status === undefined || status === null) {\r\n return options?.asString ? 'all' : 0\r\n }\r\n return options?.asString ? String(status) : status\r\n}\r\n\r\n/** 当前为「全部」Tab 时,同步 activeTab 与接口 Tab 的 :name 一致 */\r\nexport function syncActiveTabIfAll(\r\n activeTab: { value: unknown },\r\n tabs: StatusTabListItem[],\r\n options?: { asString?: boolean },\r\n) {\r\n if (isAllStatusTab(activeTab.value)) {\r\n activeTab.value = getAllTabName(tabs, options)\r\n }\r\n}\r\n\r\n/**\r\n * status 归一化为 Map key:\r\n * - 全部 → null\r\n * - 可转数字(含 -1)→ number\r\n * - 其它字符串 → 原字符串\r\n */\r\nfunction normalizeStatusKey(status: number | string | null | undefined): number | string | null {\r\n if (isAllStatus(status)) return null\r\n if (typeof status === 'number') return Number.isFinite(status) ? status : null\r\n const raw = String(status).trim()\r\n if (raw === '') return null\r\n const n = Number(raw)\r\n if (raw !== '' && Number.isFinite(n) && String(n) === raw) return n\r\n // \"-1\" 等带符号数字\r\n if (Number.isFinite(n) && !Number.isNaN(n) && /^-?\\d+(\\.\\d+)?$/.test(raw)) return n\r\n return raw\r\n}\r\n\r\n/**\r\n * 归一化状态条数返回值。\r\n * @param res 接口原始返回(可能是 { data: [...] } / { data: { list: [...] } } / [...] / 旧对象格式)\r\n */\r\nexport function buildStatusCountLookup(res: any): StatusCountLookup {\r\n const payload = unwrapPayload(res)\r\n\r\n // 旧对象格式兼容:非数组时直接当作 { key: count } 返回\r\n if (payload && !Array.isArray(payload) && typeof payload === 'object') {\r\n const legacy: Record<string, number> = {}\r\n for (const k of Object.keys(payload)) legacy[k] = Number(payload[k]) || 0\r\n return {\r\n byStatus: () => 0,\r\n byName: () => 0,\r\n all: () => legacy.all || 0,\r\n isLegacyObject: true,\r\n legacyObject: legacy,\r\n }\r\n }\r\n\r\n const list: StatusCountItem[] = Array.isArray(payload) ? payload : []\r\n const byStatusMap = new Map<number | string | null, number>()\r\n const byNameMap = new Map<string, number>()\r\n let sumCount = 0\r\n\r\n for (const item of list) {\r\n const count = Number(item.count) || 0\r\n const statusKey = normalizeStatusKey(item.status)\r\n const label = item.status_name ?? item.name\r\n\r\n byStatusMap.set(statusKey, count)\r\n // status: 'all' 再挂一份字符串 key,方便 byStatus('all')\r\n if (statusKey === null) {\r\n byStatusMap.set('all', count)\r\n }\r\n if (label != null && label !== '') {\r\n byNameMap.set(String(label), count)\r\n }\r\n // 「全部」条目不参与 sum,避免重复\r\n if (statusKey !== null) {\r\n sumCount += count\r\n }\r\n }\r\n\r\n return {\r\n byStatus: (status) => {\r\n if (isAllStatus(status)) {\r\n return byStatusMap.get(null) ?? byStatusMap.get('all') ?? byNameMap.get('全部') ?? 0\r\n }\r\n const key = normalizeStatusKey(status)\r\n return byStatusMap.get(key) ?? 0\r\n },\r\n byName: (name) => byNameMap.get(name) ?? 0,\r\n all: () =>\r\n byStatusMap.get(null)\r\n ?? byStatusMap.get('all')\r\n ?? byNameMap.get('全部')\r\n ?? sumCount,\r\n isLegacyObject: false,\r\n legacyObject: {},\r\n }\r\n}\r\n\r\n/** 列表顶栏 Tab(含 tab_name,供 el-tab-pane :name 绑定) */\r\nexport type StatusTabItem = {\r\n tab_name: string\r\n name: string\r\n count: number\r\n status: number | string | null\r\n}\r\n\r\n/** 本地兜底 Tab:全部(0) + 传入状态选项(0) */\r\nexport function buildFallbackStatusTabs(\r\n options: Array<{ value: number | string; label: string }> = [],\r\n): StatusTabItem[] {\r\n return [\r\n { tab_name: 'all', name: '全部', count: 0, status: null },\r\n ...options.map((item) => ({\r\n tab_name: String(item.value),\r\n name: item.label,\r\n count: 0,\r\n status: item.value as number | string,\r\n })),\r\n ]\r\n}\r\n\r\n/** 解包 statusCounts 接口的 list 数组 */\r\nexport function unwrapStatusCountList(res: any): StatusCountItem[] {\r\n const payload = unwrapPayload(res)\r\n if (Array.isArray(payload)) return payload\r\n if (Array.isArray(payload?.list)) return payload.list\r\n return []\r\n}\r\n\r\n/** statusCounts list → 顶栏 Tab(全部 tab_name 固定为 all) */\r\nexport function mapStatusCountToTabs(list: StatusCountItem[] = []): StatusTabItem[] {\r\n return list.map((item) => {\r\n const label = String(item.name ?? item.status_name ?? '')\r\n const all = isAllStatus(item.status) || label === '全部'\r\n return {\r\n tab_name: all ? 'all' : String(item.status),\r\n name: label || (all ? '全部' : String(item.status ?? '')),\r\n count: Number(item.count) || 0,\r\n status: all ? null : (item.status as number | string | null) ?? null,\r\n }\r\n })\r\n}\r\n","/**\r\n * 通用带样式平表导出(exceljs)\r\n *\r\n * 入参 data 为「中文表头 → 值」对象数组。\r\n * exceljs 为 peerDependency,由宿主项目安装;此处动态 import,避免打进组件库包体。\r\n */\r\nimport type ExcelJS from 'exceljs'\r\n\r\nexport interface StyledExportOptions {\r\n /** 表头背景色 ARGB,默认蓝色 */\r\n headerFill?: string\r\n /** 冻结表头行,默认 true */\r\n freezeHeader?: boolean\r\n /** 各列宽度(字符数);不传则按表头/内容长度自适应 */\r\n columnWidths?: number[]\r\n}\r\n\r\nconst FONT_FAMILY = '微软雅黑'\r\nconst HEADER_FILL_DEFAULT = 'FF409EFF' // element-plus 主题蓝\r\nconst BORDER_COLOR = 'FFD9E0E8'\r\n\r\nconst thinBorder: Partial<ExcelJS.Borders> = {\r\n top: { style: 'thin', color: { argb: BORDER_COLOR } },\r\n bottom: { style: 'thin', color: { argb: BORDER_COLOR } },\r\n left: { style: 'thin', color: { argb: BORDER_COLOR } },\r\n right: { style: 'thin', color: { argb: BORDER_COLOR } },\r\n}\r\n\r\n/** 估算显示宽度:中文按 2 个字符宽计 */\r\nconst displayWidth = (text: string) => {\r\n let width = 0\r\n for (const ch of text) {\r\n width += /[⺀-﹏＀-￯]/.test(ch) ? 2 : 1\r\n }\r\n return width\r\n}\r\n\r\nexport const exportStyledExcel = async (\r\n data: Array<Record<string, string | number>>,\r\n fileName: string = 'data.xlsx',\r\n sheetName: string = 'Sheet1',\r\n options: StyledExportOptions = {},\r\n) => {\r\n if (!data || data.length === 0) {\r\n throw new Error('没有可导出的数据')\r\n }\r\n\r\n const { default: Excel } = await import('exceljs')\r\n const workbook = new Excel.Workbook()\r\n const sheet = workbook.addWorksheet(sheetName, {\r\n views: options.freezeHeader === false ? [] : [{ state: 'frozen', ySplit: 1 }],\r\n })\r\n\r\n const headers = Object.keys(data[0]!)\r\n\r\n // 列宽:显式传入优先,否则按表头与前 50 行内容自适应(8~40 字符)\r\n sheet.columns = headers.map((header, index) => {\r\n const explicit = options.columnWidths?.[index]\r\n if (explicit) return { width: explicit }\r\n let width = displayWidth(header)\r\n for (const row of data.slice(0, 50)) {\r\n width = Math.max(width, displayWidth(String(row[header] ?? '')))\r\n }\r\n return { width: Math.min(Math.max(width + 4, 8), 40) }\r\n })\r\n\r\n // 表头行\r\n const headerRow = sheet.addRow(headers)\r\n headerRow.height = 24\r\n headerRow.eachCell((cell) => {\r\n cell.font = { name: FONT_FAMILY, size: 11, bold: true, color: { argb: 'FFFFFFFF' } }\r\n cell.fill = {\r\n type: 'pattern',\r\n pattern: 'solid',\r\n fgColor: { argb: options.headerFill || HEADER_FILL_DEFAULT },\r\n }\r\n cell.alignment = { vertical: 'middle', horizontal: 'center' }\r\n cell.border = thinBorder\r\n })\r\n\r\n // 数据行:细边框 + 隔行浅灰底\r\n data.forEach((item, index) => {\r\n const row = sheet.addRow(headers.map((h) => item[h] ?? ''))\r\n row.height = 20\r\n row.eachCell({ includeEmpty: true }, (cell) => {\r\n cell.font = { name: FONT_FAMILY, size: 10, color: { argb: 'FF303133' } }\r\n cell.alignment = { vertical: 'middle', horizontal: 'left', wrapText: false }\r\n cell.border = thinBorder\r\n if (index % 2 === 1) {\r\n cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFF7F9FC' } }\r\n }\r\n })\r\n })\r\n\r\n // 下载\r\n const buffer = await workbook.xlsx.writeBuffer()\r\n const blob = new Blob([buffer], {\r\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n })\r\n const url = URL.createObjectURL(blob)\r\n const link = document.createElement('a')\r\n link.href = url\r\n link.download = fileName\r\n link.click()\r\n URL.revokeObjectURL(url)\r\n}\r\n","import type { RouteRecordRaw } from 'vue-router'\r\nimport type { BackendRoute } from './types'\r\n\r\ntype ViewModules = Record<string, () => Promise<unknown>>\r\n\r\ninterface RouteTreeNode extends BackendRoute {\r\n children?: RouteTreeNode[]\r\n}\r\n\r\nexport function getComponentImport(componentPath: string, viewModules: ViewModules): (() => Promise<unknown>) | null {\r\n if (!componentPath) return null\r\n\r\n let normalizedPath = componentPath.replace(/^@\\//, '')\r\n if (!normalizedPath.startsWith('views/')) normalizedPath = `views/${normalizedPath}`\r\n if (!normalizedPath.endsWith('.vue')) normalizedPath = `${normalizedPath}.vue`\r\n\r\n const fullPath = `/src/${normalizedPath}`\r\n\r\n return (viewModules[fullPath] ?? viewModules['/src/views/common/NotFound.vue'] ?? null) as (() => Promise<unknown>) | null\r\n}\r\n\r\nexport function buildRouteTree(routes: BackendRoute[]): RouteTreeNode[] {\r\n const routeMap = new Map<string, RouteTreeNode>()\r\n const rootRoutes: RouteTreeNode[] = []\r\n\r\n routes.forEach(route => routeMap.set(route.name, { ...route, children: [] }))\r\n\r\n routes.forEach(route => {\r\n const currentRoute = routeMap.get(route.name)!\r\n if (!route.parent_name) {\r\n rootRoutes.push(currentRoute)\r\n } else {\r\n const parentRoute = routeMap.get(route.parent_name)\r\n if (parentRoute) {\r\n parentRoute.children ??= []\r\n parentRoute.children.push(currentRoute)\r\n } else {\r\n rootRoutes.push(currentRoute)\r\n }\r\n }\r\n })\r\n return rootRoutes\r\n}\r\n\r\nexport function transformBackendRoutes(\r\n backendRoutes: RouteTreeNode[],\r\n viewModules: ViewModules,\r\n projectName?: string\r\n): RouteRecordRaw[] {\r\n return backendRoutes\r\n .filter(route => !projectName || !route.project || route.project === projectName)\r\n .map(route => {\r\n const routeConfig: Partial<RouteRecordRaw> = {\r\n path: route.path,\r\n name: route.name,\r\n meta: {\r\n requiresAuth: route.requiresAuth === 1,\r\n title: route.title,\r\n permissions: route.permissions\r\n ? route.permissions.split(',').map(p => p.trim()).filter(Boolean)\r\n : [],\r\n params: route.params\r\n ? route.params.split('&').map(p => p.trim()).filter(Boolean)\r\n : [],\r\n },\r\n }\r\n\r\n const component = getComponentImport(route.component, viewModules)\r\n if (component) routeConfig.component = component as RouteRecordRaw['component']\r\n\r\n if (route.redirect) routeConfig.redirect = route.redirect\r\n\r\n if (route.children?.length) {\r\n routeConfig.children = transformBackendRoutes(route.children, viewModules, projectName)\r\n }\r\n\r\n return routeConfig as RouteRecordRaw\r\n })\r\n}\r\n\r\nexport function findFirstAllowedRoute(\r\n backendRoutes: BackendRoute[],\r\n routePermissions: string[],\r\n layoutRouteName: string,\r\n projectName?: string\r\n): BackendRoute | undefined {\r\n const routeMap = new Map<string, BackendRoute>()\r\n backendRoutes.forEach(route => routeMap.set(route.name, route))\r\n\r\n const isDescendantOfLayout = (route: BackendRoute): boolean => {\r\n let parentName = route.parent_name\r\n const visited = new Set<string>()\r\n\r\n while (parentName) {\r\n if (parentName === layoutRouteName) return true\r\n if (visited.has(parentName)) return false\r\n\r\n visited.add(parentName)\r\n const parentRoute = routeMap.get(parentName)\r\n if (!parentRoute) return false\r\n parentName = parentRoute.parent_name\r\n }\r\n\r\n return false\r\n }\r\n\r\n return backendRoutes\r\n .filter(route =>\r\n route.name !== layoutRouteName &&\r\n route.is_show === 1 &&\r\n route.component &&\r\n routePermissions.includes(route.code) &&\r\n isDescendantOfLayout(route) &&\r\n (!projectName || !route.project || route.project === projectName)\r\n )\r\n .sort((a, b) => a.sorts - b.sorts)[0]\r\n}\r\n","import type { NavigationGuardNext, Router } from 'vue-router'\r\nimport NProgress from 'nprogress'\r\nimport 'nprogress/nprogress.css'\r\nimport { ElMessage } from 'element-plus'\r\nimport type { RouterGuardOptions } from './types'\r\nimport { buildRouteTree, transformBackendRoutes } from './helpers'\r\n\r\nNProgress.configure({ showSpinner: false })\r\n\r\nconst isDev = import.meta.env.DEV\r\nconst log = (...args: unknown[]) => { if (isDev) console.log('[Router]', ...args) }\r\nconst warn = (...args: unknown[]) => { if (isDev) console.warn('[Router]', ...args) }\r\nconst logError = (...args: unknown[]) => { console.error('[Router]', ...args) }\r\n\r\nexport function createRouterGuard(router: Router, options: RouterGuardOptions) {\r\n const {\r\n getRouteStore,\r\n getPermissionStore,\r\n getUserStore,\r\n isAuthenticated,\r\n viewModules,\r\n homeComponent,\r\n notFoundComponent,\r\n projectName,\r\n layoutRouteName = 'Layout',\r\n publicPaths = ['/login', '/register'],\r\n loginRouteName = 'login',\r\n forbiddenRouteName = 'Forbidden',\r\n homeRouteName = 'Home',\r\n homeRoutePath = 'home',\r\n homeTitle = '\\u9996\\u9875',\r\n noPermissionMessage = '\\u6682\\u65e0\\u6743\\u9650',\r\n } = options\r\n\r\n let hasAddedRoutes = false\r\n\r\n function addDynamicRoutes(backendRoutes: ReturnType<typeof getRouteStore>['backendRoutes']) {\r\n const treeRoutes = buildRouteTree(backendRoutes)\r\n const layoutRoute = treeRoutes.find(route => route.name === layoutRouteName)\r\n const childRoutes = layoutRoute?.children\r\n ? transformBackendRoutes(layoutRoute.children, viewModules, projectName)\r\n : []\r\n\r\n childRoutes.forEach(route => {\r\n if (route.name && router.hasRoute(route.name)) return\r\n router.addRoute(layoutRouteName, route)\r\n log(`Add route: ${String(route.name)} -> ${route.path}`)\r\n })\r\n\r\n if (!router.hasRoute(homeRouteName)) {\r\n router.addRoute(layoutRouteName, {\r\n path: homeRoutePath,\r\n name: homeRouteName,\r\n component: homeComponent as never,\r\n meta: { title: homeTitle },\r\n })\r\n }\r\n\r\n if (!router.hasRoute('NotFound')) {\r\n router.addRoute({\r\n path: '/:pathMatch(.*)*',\r\n name: 'NotFound',\r\n component: notFoundComponent as never,\r\n })\r\n }\r\n\r\n log(`Dynamic routes added: ${childRoutes.length}`)\r\n }\r\n\r\n function redirectToHomeOrContinue(\r\n toName: ReturnType<Router['resolve']>['name'],\r\n next: NavigationGuardNext\r\n ) {\r\n if (toName === homeRouteName) {\r\n next()\r\n return\r\n }\r\n\r\n if (router.hasRoute(homeRouteName)) {\r\n next({ name: homeRouteName, replace: true })\r\n } else {\r\n next()\r\n }\r\n }\r\n\r\n router.beforeEach(async (to, _from, next) => {\r\n NProgress.start()\r\n\r\n if (isAuthenticated() && !hasAddedRoutes) {\r\n try {\r\n const routeStore = getRouteStore()\r\n const permissionStore = getPermissionStore()\r\n\r\n await routeStore.initRoutes()\r\n await permissionStore.loadUserPermissions()\r\n\r\n addDynamicRoutes(routeStore.backendRoutes)\r\n hasAddedRoutes = true\r\n\r\n if (to.path === '/' || to.path === '') {\r\n redirectToHomeOrContinue(to.name, next)\r\n return\r\n }\r\n\r\n if (to.name === layoutRouteName) {\r\n redirectToHomeOrContinue(to.name, next)\r\n return\r\n }\r\n\r\n const currentRoute = routeStore.backendRoutes.find(route => route.name === to.name)\r\n if (currentRoute && !permissionStore.routePermissions.includes(currentRoute.code)) {\r\n warn('No route permission:', to.path)\r\n next({ name: forbiddenRouteName, replace: true })\r\n return\r\n }\r\n\r\n next({\r\n path: to.path,\r\n query: to.query,\r\n hash: to.hash,\r\n replace: true,\r\n })\r\n return\r\n } catch (err) {\r\n logError('Failed to load route permissions:', err)\r\n hasAddedRoutes = false\r\n await getUserStore().logout()\r\n next({ name: loginRouteName, replace: true })\r\n return\r\n }\r\n }\r\n\r\n if (publicPaths.includes(to.path)) {\r\n if (isAuthenticated()) {\r\n next({ path: '/', replace: true })\r\n } else {\r\n next()\r\n }\r\n return\r\n }\r\n\r\n if (!isAuthenticated()) {\r\n next({ name: loginRouteName, replace: true })\r\n return\r\n }\r\n\r\n const permissionStore = getPermissionStore()\r\n const routeStore = getRouteStore()\r\n\r\n if (to.name === homeRouteName) {\r\n next()\r\n return\r\n }\r\n\r\n if (permissionStore.routePermissions.length === 0) {\r\n if (to.path !== '/') {\r\n ElMessage.warning(noPermissionMessage)\r\n next({ path: '/', replace: true })\r\n } else {\r\n redirectToHomeOrContinue(to.name, next)\r\n }\r\n return\r\n }\r\n\r\n if (to.path === '/') {\r\n redirectToHomeOrContinue(to.name, next)\r\n return\r\n }\r\n\r\n if (to.name === layoutRouteName) {\r\n redirectToHomeOrContinue(to.name, next)\r\n return\r\n }\r\n\r\n const currentRoute = routeStore.backendRoutes.find(route => route.name === to.name)\r\n if (currentRoute && !permissionStore.routePermissions.includes(currentRoute.code)) {\r\n warn('No route permission:', to.path)\r\n next({ name: forbiddenRouteName, replace: true })\r\n return\r\n }\r\n\r\n next()\r\n })\r\n\r\n router.afterEach(() => NProgress.done())\r\n\r\n return {\r\n resetRouterState: () => { hasAddedRoutes = false },\r\n }\r\n}\r\n","import type { App } from 'vue'\r\nimport { JButton } from './components/JButton'\r\nimport { JUploadImg } from './components/JUploadImg'\r\nimport { JIconRender } from './components/JIconRender'\r\nimport { JSearchHeader } from './components/JSearchHeader'\r\nimport { JListSearchHeader } from './components/JListSearchHeader'\r\nimport { JImportExcel } from './components/JImportExcel'\r\nimport { JSidebar, JSideMenuItem } from './components/JSidebar'\r\nimport { JAdminLayout } from './components/JAdminLayout'\r\nimport { JProductDetailDialog, JSkuLink, ProductDetailHost } from './components/JProductDetail'\r\nimport { JSearchInputDialog } from './components/JSearchInputDialog'\r\nimport { JRemoteSelect } from './components/JRemoteSelect'\r\nimport { JProductSelectDialog } from './components/JProductSelectDialog'\r\nimport { DocNoLink, DocDetailHost } from './components/JDocDetail'\r\nimport { JRelatedDocs } from './components/JRelatedDocs'\r\n\r\n// 组件列表,新增组件后在此处注册\r\nconst components = [\r\n JButton,\r\n JUploadImg,\r\n JIconRender,\r\n JSearchHeader,\r\n JListSearchHeader,\r\n JImportExcel,\r\n JSidebar,\r\n JSideMenuItem,\r\n JAdminLayout,\r\n JProductDetailDialog,\r\n JSkuLink,\r\n ProductDetailHost,\r\n JSearchInputDialog,\r\n JRemoteSelect,\r\n JProductSelectDialog,\r\n DocNoLink,\r\n DocDetailHost,\r\n JRelatedDocs,\r\n]\r\n\r\n// 全量安装插件(app.use(JgyComponents))\r\nconst install = (app: App) => {\r\n components.forEach((component) => {\r\n app.component(component.name ?? component.__name ?? '', component)\r\n })\r\n}\r\n\r\n// 默认导出插件对象\r\nexport default { install }\r\n\r\n// 按需导出各组件\r\nexport {\r\n JButton,\r\n JUploadImg,\r\n JIconRender,\r\n JSearchHeader,\r\n JListSearchHeader,\r\n JImportExcel,\r\n JSidebar,\r\n JSideMenuItem,\r\n JAdminLayout,\r\n JProductDetailDialog,\r\n JSkuLink,\r\n ProductDetailHost,\r\n JSearchInputDialog,\r\n JRemoteSelect,\r\n JProductSelectDialog,\r\n DocNoLink,\r\n DocDetailHost,\r\n JRelatedDocs,\r\n}\r\n\r\n// 导出 composable / request 注入\r\nexport {\r\n useProductDetailDialog,\r\n useProductDetailStore,\r\n provideProductRequest,\r\n resolveProductRequest,\r\n useInjectedProductRequest,\r\n J_PRODUCT_REQUEST_KEY,\r\n} from './components/JProductDetail'\r\n\r\n// 全局单据详情(传单号打开只读弹窗)\r\nexport {\r\n createDocDetail,\r\n registerDocDetail,\r\n getDocDetailAdapters,\r\n getDocDetailEntry,\r\n getDocDetailRegistry,\r\n isDocDetailInitialized,\r\n useDocDetailStore,\r\n wmsDocDetailComponents,\r\n ReceiptOrderDetailView,\r\n QcOrderDetailView,\r\n InboundOrderDetailView,\r\n PutawayOrderDetailView,\r\n DeliveryOrderDetailView,\r\n TransferOrderDetailView,\r\n WorkOrderDetailView,\r\n AbnormalOrderDetailView,\r\n PaymentRequestDetailView,\r\n ReturnOrderDetailView,\r\n CostExpenseDetailView,\r\n ReceiptVoucherDetailView,\r\n PurchaseOrderDetailView,\r\n PurchasePlanDetailView,\r\n PurchaseContractDetailView,\r\n DeliveryDocDetailView,\r\n} from './components/JDocDetail'\r\n\r\n// 关联单据\r\nexport {\r\n createRelatedDocs,\r\n registerRelatedDocs,\r\n getRelatedListAdapter,\r\n getRelatedTableComponent,\r\n getRelatedDocsTableComponents,\r\n isRelatedDocsInitialized,\r\n RelatedDocSubTabs,\r\n RelatedDocNoCopy,\r\n RelatedDocPanel,\r\n RelatedReceiptOrderTable,\r\n RelatedQcOrderTable,\r\n RelatedInboundOrderTable,\r\n RelatedPutawayOrderTable,\r\n RelatedPurchaseOrderTable,\r\n RelatedPurchasePlanTable,\r\n RelatedDeliveryDocTable,\r\n RelatedProcessingOrderTable,\r\n RelatedReturnOrderTable,\r\n RelatedAbnormalOrderTable,\r\n RelatedPaymentRequestTable,\r\n RelatedReceiptVoucherTable,\r\n RelatedDeclarationTable,\r\n flattenOrderItems,\r\n sumOrderItemField,\r\n useRelatedCollapseExpand,\r\n parseListResponse,\r\n parseListTotal,\r\n} from './components/JRelatedDocs'\r\n\r\n// 导出工具方法\r\nexport {\r\n toSnakeCase,\r\n toCamelCase,\r\n pick,\r\n omit,\r\n deepClone,\r\n filterEmpty,\r\n flatten,\r\n unflatten,\r\n toTableColumns,\r\n checkBtnPermission,\r\n provideBtnPermission,\r\n useInjectedBtnPermission,\r\n useInjectedBtnPermissions,\r\n J_BTN_PERMISSION_KEY,\r\n J_BTN_PERMISSIONS_KEY,\r\n isAllStatusTab,\r\n resolveListStatusParam,\r\n toTabName,\r\n getAllTabName,\r\n syncActiveTabIfAll,\r\n buildStatusCountLookup,\r\n buildFallbackStatusTabs,\r\n unwrapStatusCountList,\r\n mapStatusCountToTabs,\r\n exportStyledExcel,\r\n} from './utils'\r\nexport { useBtnPermissionGate } from './composables/useBtnPermissionGate'\r\nexport type {\r\n BtnPermissionInput,\r\n BtnPermissionMode,\r\n BtnPermissionChecker,\r\n StatusCountItem,\r\n StatusCountLookup,\r\n StatusTabListItem,\r\n StatusTabItem,\r\n StyledExportOptions,\r\n} from './utils'\r\n\r\n// 导出路由工具\r\nexport { createRouterGuard, buildRouteTree, transformBackendRoutes, findFirstAllowedRoute, getComponentImport } from './router'\r\nexport type { BackendRoute, RouteStoreAdapter, PermissionStoreAdapter, UserStoreAdapter, RouterGuardOptions } from './router'\r\n\r\n// 导出类型\r\nexport type { ButtonType, ButtonSize } from './components/JButton'\r\nexport type { JUploadImgProps, JUploadImgEmits, ImageItem } from './components/JUploadImg'\r\nexport type { JIconRenderProps } from './components/JIconRender'\r\nexport type { JSearchHeaderProps } from './components/JSearchHeader'\r\nexport type { JListSearchHeaderProps } from './components/JListSearchHeader'\r\nexport type { JImportExcelProps, ApiFn } from './components/JImportExcel'\r\nexport type { SidebarMenuItem, JSidebarProps, JSideMenuItemProps } from './components/JSidebar'\r\nexport type { AdminLayoutMenuItem, JAdminLayoutProps } from './components/JAdminLayout'\r\nexport type {\r\n JProductDetailDialogProps,\r\n JSkuLinkProps,\r\n JProductRequestFn,\r\n JProductRequestConfig,\r\n} from './components/JProductDetail'\r\nexport type {\r\n JSearchInputDialogProps,\r\n SearchInputOption,\r\n SearchInputModel,\r\n} from './components/JSearchInputDialog'\r\nexport type {\r\n JRemoteSelectProps,\r\n RemoteSelectFetchApi,\r\n RemoteSelectModelValue,\r\n} from './components/JRemoteSelect'\r\nexport type {\r\n JProductSelectDialogProps,\r\n JProductSelectFetchApi,\r\n JProductSelectListResult,\r\n} from './components/JProductSelectDialog'\r\nexport type {\r\n DocDetailType,\r\n DocDetailAdapters,\r\n DocDetailRegistryItem,\r\n DocDetailComponents,\r\n CreateDocDetailOptions,\r\n} from './components/JDocDetail'\r\nexport type {\r\n RelatedListAdapter,\r\n RelatedDocTypeItem,\r\n CreateRelatedDocsOptions,\r\n RelatedDocsContainerProps,\r\n} from './components/JRelatedDocs'\r\n"],"names":["props","__props","emit","__emit","handleClick","event","_createElementBlock","_openBlock","_hoisted_2","$slots","_hoisted_3","_renderSlot","_ctx","imageUrl","ref","showPreview","showTipText","handlePreviewSingle","handleRemoveSingle","ElMessage","imageList","uploading","initImageList","urls","url","index","watch","val","handleDragEnd","emitMultipleUpdate","handleRemove","handleFileChange","uploadFile","file","error","item","_hoisted_1","_createVNode","_unref","draggable","$event","_withCtx","element","_createElementVNode","ElImage","img","_withModifiers","ElIcon","Delete","_createBlock","ElUpload","Loading","Plus","_Fragment","_hoisted_5","_hoisted_6","ZoomIn","ElImageViewer","_hoisted_7","_hoisted_8","_toDisplayString","_mergeProps","$attrs","J_BTN_PERMISSION_KEY","J_BTN_PERMISSIONS_KEY","normalizeCodes","value","checkBtnPermission","checker","mode","codes","code","provideBtnPermission","app","permissions","useInjectedBtnPermission","inject","useInjectedBtnPermissions","useBtnPermissionGate","permissionChecker","injectedPermissionChecker","injectedPermissions","resolvePermissionChecker","canShowByPermission","permission","show","computed","createCanShow","canShowAdd","canShowBatchDelete","canShowSearch","canShowReset","formItemsRef","expanded","isAnimated","itemCount","collapsedHeight","shouldCollapse","measureItems","items","lastVisibleItem","wrapperRect","lastVisibleRect","toggleExpand","el","onEnd","observer","onMounted","onBeforeUnmount","ElCard","ElForm","_normalizeClass","ElButton","Search","_cache","Refresh","_createTextVNode","ArrowDown","ROW_TOP_TOLERANCE","COLLAPSED_HEIGHT_BUFFER","canShowMoreFilter","canShowDownload","canShowSettings","activeTab","_useModel","slots","useSlots","moreFilterVisible","settingsVisible","filterItemsRef","filterLeftRef","rowCount","showTabsRow","moreFilterLabel","count","shouldShowCollapseToggle","collectFilterItems","root","form","groupItemsByRow","rows","currentRow","rowTop","i","applyCollapsedHeight","visibleRows","lastVisibleRow","remeasureLayout","mutationObserver","resizeObserver","nextTick","handleMoreFilterConfirm","handleSettingsSave","_component_el_card","_component_el_tabs","name","_component_el_button","_component_el_icon","_component_el_popover","_hoisted_4","Download","Setting","_component_el_drawer","visible","submitting","fieldMap","renderData","stats","statusMap","dataColumns","key","label","handleOpen","res","raw","reader","e","workbook","XLSX","wsName","ws","dataRows","row","cell","list","col","handleDel","idx","handleConfirm","data","_status","_error","rest","r","handleDownloadTemplate","wb","headers","tr","h","handleClose","ElDialog","ElDivider","ElLink","ElRow","ElCol","ElTable","_renderList","ElTableColumn","$index","normalizeMenuIndex","path","p","_a","menuIndex","isActive","isActiveParent","walk","ElSubMenu","JIconRender","child","_component_JSideMenuItem","ElMenuItem","innerCollapsed","toggleCollapse","normalizePath","collectLeafPaths","result","resolveActiveMenuIndex","menus","active","current","leaves","best","np","resolvedActiveMenu","menusStructureKey","findAncestorIndexes","trail","nextTrail","found","defaultOpeneds","_normalizeStyle","ElMenu","route","JSideMenuItem","layoutStyle","topMenuSyncKey","topMenuKey","handleTopMenuSelect","handleSideMenuClick","JSidebar","sidebarCollapsed","toggle","menu","ElDropdown","ElDropdownMenu","ElDropdownItem","J_PRODUCT_REQUEST_KEY","provideProductRequest","request","useInjectedProductRequest","resolveProductRequest","propRequest","injectedRequest","brandDict","unitDict","saleDict","companyDict","tagDict","customAttrDict","dictsLoaded","dictsPromise","loadDicts","post","_b","_c","getRequest","loading","detail","fetchDetail","params","basic","spec","images","purchase","declaration","qc","bindSku","spuBindSku","specBoxList","supplierList","productType","isSpu","productTypeLabel","nameCn","nameEn","mainCode","normalizeStringArray","v","s","arr","x","normalizeAttachments","it","f","fmt","weightText","unit","dimText","l","w","dictName","id","hit","brandName","unitName","statusName","declarationUnitName","peNames","c","tagList","t","skuAttrText","attr","k","basicAttachments","hasDesc","html","mainImage","sizeImages","sellingPointImages","qcMethodLabel","qcImages","qcAttachments","qcCustomList","dictAttrId","parseAttrOptions","out","customAttrDictMap","m","d","customAttrList","info","def","customAttrValueText","values","options","o","bindSkuList","styleAttrs","skuVariants","variantAttrText","supplierQuoteRows","sup","q","_withDirectives","ElDescriptions","ElDescriptionsItem","ElTag","_d","si","_hoisted_9","_hoisted_10","_hoisted_15","ElEmpty","useProductDetailStore","defineStore","type","open","skuCode","opts","close","reset","productDetailStore","displayText","hasCode","storeToRefs","JProductDetailDialog","useProductDetailDialog","store","productDetailDialogVisible","productDetailDialogCode","keyword","dialogVisible","textareaValue","currentOption","dialogTitleText","normalizeKeywords","parts","unique","seen","part","keywordToTextarea","openDialog","handleDialogClosed","next","prev","__expose","defaultType","_component_el_input","_component_el_select","_component_el_option","Memo","_component_el_dialog","debounceFn","fn","delay","timer","args","selectRef","loadingMore","currentPage","total","searchKeyword","dropdownScrollEl","hasMore","fetchPageSize","hasRequiredParams","computedPlaceholder","displayOptions","initialLabel","patched","currentLabel","valueText","labelLooksLikeValue","initialHasCjk","currentHasCjk","parseListResponse","pageInfo","fetchData","requestParams","totalNum","loadMore","handleSearch","query","nextKeyword","handleVisibleChange","bindScrollListener","unbindScrollListener","handleScroll","scrollTop","scrollHeight","clientHeight","selectDom","inputEl","popoverId","dropdownEl","scrollWrap","handleChange","option","handleClear","cleared","newParams","oldParams","tableRef","tableData","allSelectedRows","isRestoring","pagination","reactive","defaultAdapter","restoreSelection","selectedKeys","loadData","onSelectionChange","currentPageKeys","otherPageSelected","handleRemoveSelected","inCurrentPage","handleReset","clearDialogState","handleCancel","handleClosed","_component_el_table","_component_el_table_column","_component_el_pagination","registry","adapters","initialized","normalizeComponents","components","conf","createDocDetail","registerDocDetail","getDocDetailRegistry","getDocDetailAdapters","isDocDetailInitialized","getDocDetailEntry","useDocDetailStore","orderNo","docType","no","TOAST_ID","TOAST_Z_INDEX","showCopyToast","message","copyWithFallback","text","textarea","ok","copyText","docDetailStore","handleCopy","CopyDocument","entry","orderNoBind","onVisibleChange","_resolveDynamicComponent","RECEIPT_TYPE_MAP","getReceiptTypeLabel","RECEIPT_STATUS_MAP","ABNORMAL_INITIATE_STATUS_MAP","calcAbnormalInitiateStatus","orderItems","occupiedItemIds","abnormalItemIds","occupiedSet","covered","getReceiptStatusLabel","status","baseLabel","subMemo","base","resolveAbnormalSubMemo","flatOrderItems","flattenOrderItems","orderItem","withSkuGroupMeta","skuGroup","groupSize","copyable","sumOrderItemField","field","sum","INBOUND_TYPE_MAP","INBOUND_STATUS_MAP","getInboundTypeLabel","getInboundStatusLabel","PUTAWAY_STATUS_COMPLETED","getPutawayGoodQty","getPutawayBadQty","formatPutawayLocationList","locationList","inventoryStatus","qty","getPutawayGoodLocation","getPutawayBadLocation","useRelatedCollapseExpand","getOrders","getBatchKey","expandedKeys","shouldExpand","expandAll","orders","order","toggleRow","qcTypeMap","COLUMN_COUNT","flatTableData","spanMethod","columnIndex","getBatchRowClassName","formatLabelFlag","flag","getReceiptStatusTagType","CaretBottom","CaretRight","RelatedDocNoCopy","_component_el_tag","_component_el_image","Picture","JSkuLink","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","qcMethodMap","getStatusTagType","totalQty","getInboundStatusTagType","_hoisted_16","_hoisted_17","DocNoLink","buildPurchasePlanRows","bisSku","isCombo","purchasePlanQty","childItems","ci","ratio","childSkuInfo","buildProcessingOrderRows","skuInfo","skuImage","oi","childSkuImage","childRow","purchaseItems","pItem","pi","pSkuInfo","pSkuImage","flattenDeclarationRows","decl","products","displayDash","getInfoTagType","success","warning","flatData","DEFAULT_TABLE_COMPONENTS","RelatedReceiptOrderTable","RelatedQcOrderTable","RelatedInboundOrderTable","RelatedPutawayOrderTable","RelatedPurchaseOrderTable","RelatedPurchasePlanTable","RelatedDeliveryDocTable","RelatedProcessingOrderTable","RelatedReturnOrderTable","RelatedAbnormalOrderTable","RelatedPaymentRequestTable","RelatedReceiptVoucherTable","RelatedDeclarationTable","listAdapters","tableComponents","createRelatedDocs","registerRelatedDocs","getRelatedListAdapter","getRelatedTableComponent","getRelatedDocsTableComponents","isRelatedDocsInitialized","tab","$emit","parseListTotal","tableComponent","COLLAPSE_TYPES","tableBindProps","docNo","paramKey","adapter","err","_normalizeProps","_component_el_empty","activeType","countMap","tabs","resolveDocNo","resolveParamKey","loadCounts","RelatedDocSubTabs","RelatedDocPanel","logisticsList","logList","logDateRange","logPage","logPageSize","statusLabel","statusTagType","shouldShowActualLabel","filteredLogList","start","end","date","logPageData","relatedDocTypes","normalizeLogs","logs","log","resetDetail","fetchApi","_component_el_row","_component_el_col","_component_el_link","_component_el_tab_pane","_hoisted_18","JRelatedDocs","_hoisted_20","_component_el_date_picker","_hoisted_21","QC_STATUS_MAP","qcStandardsLoading","types","receiptNo","qcNo","getStatusLabel","passRate","good","bad","parseQcFileList","getQcFileName","logFiltered","fetchSkuQcStandardsData","fetchSku","qcInfo","_component_el_descriptions","_component_el_descriptions_item","_hoisted_19","formatInboundLocationList","getInboundGoodLocation","getInboundBadLocation","productItems","inboundType","sourceNo","inboundNo","getPutawayItemGoodQty","getPutawayItemBadQty","outboundTypeMap","getItemImage","loc","statusClass","formatShopSku","skuRow","abnormalTypeMap","processTypeMap","displayValue","formatByMap","map","n","formatUrgentFlag","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_42","_hoisted_43","details","flowList","isUrgent","feeRows","di","fees","fi","summary","goods","freight","apply","amount","detailSpanMethod","_hoisted_41","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_58","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_e","_hoisted_65","_hoisted_66","_f","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","returnTypeMap","operateLogs","itemList","toNumber","num","formatMoney","currency","formatFeeWithBearer","bearerName","money","formatOtherFee","detailRows","formatAmount","STATUS_MAP","DISPLAY_NAME_KEYS","basicInfo","firstProduct","merged","product","purchaseNo","productList","attachments","parseAttachments","settlementTermText","finalRate","formatPercent","formatTaxIncluded","parsed","requirementNo","productImage","contractNo","orderList","firstOrder","settlementMethodText","fileNames","orderCount","productCount","totalIncl","totalExcl","_hoisted_50","deliveryNo","wmsDocDetailComponents","ReceiptOrderDetailView","QcOrderDetailView","InboundOrderDetailView","PutawayOrderDetailView","DeliveryOrderDetailView","DeliveryDocDetailView","TransferOrderDetailView","WorkOrderDetailView","AbnormalOrderDetailView","PaymentRequestDetailView","ReturnOrderDetailView","CostExpenseDetailView","ReceiptVoucherDetailView","PurchaseOrderDetailView","PurchasePlanDetailView","PurchaseContractDetailView","deepTransformValue","transformer","toSnakeCase","obj","excludeKeys","newValue","toCamelCase","_","char","pick","keys","omit","deepClone","cloned","filterEmpty","deep","filtered","flatten","prefix","separator","newKey","unflatten","toTableColumns","unwrapPayload","isAllStatus","isAllStatusTab","resolveListStatusParam","toTabName","getAllTabName","allTab","syncActiveTabIfAll","normalizeStatusKey","buildStatusCountLookup","payload","legacy","byStatusMap","byNameMap","sumCount","statusKey","buildFallbackStatusTabs","unwrapStatusCountList","mapStatusCountToTabs","all","FONT_FAMILY","HEADER_FILL_DEFAULT","BORDER_COLOR","thinBorder","displayWidth","width","ch","exportStyledExcel","fileName","sheetName","Excel","sheet","header","explicit","headerRow","buffer","blob","link","getComponentImport","componentPath","viewModules","normalizedPath","fullPath","buildRouteTree","routes","routeMap","rootRoutes","currentRoute","parentRoute","transformBackendRoutes","backendRoutes","projectName","routeConfig","component","findFirstAllowedRoute","routePermissions","layoutRouteName","isDescendantOfLayout","parentName","visited","a","b","NProgress","warn","logError","createRouterGuard","router","getRouteStore","getPermissionStore","getUserStore","isAuthenticated","homeComponent","notFoundComponent","publicPaths","loginRouteName","forbiddenRouteName","homeRouteName","homeRoutePath","homeTitle","noPermissionMessage","hasAddedRoutes","addDynamicRoutes","layoutRoute","childRoutes","redirectToHomeOrContinue","toName","to","_from","routeStore","permissionStore","JButton","JUploadImg","JSearchHeader","JListSearchHeader","JImportExcel","JAdminLayout","ProductDetailHost","JSearchInputDialog","JRemoteSelect","JProductSelectDialog","DocDetailHost"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.cjs","sources":["../src/components/JButton/JButton.vue","../src/components/JUploadImg/JUploadImg.vue","../src/components/JIconRender/JIconRender.vue","../src/utils/btnPermission.ts","../src/composables/useBtnPermissionGate.ts","../src/components/JSearchHeader/JSearchHeader.vue","../src/components/JListSearchHeader/JListSearchHeader.vue","../src/components/JImportExcel/JImportExcel.vue","../src/components/JSidebar/JSideMenuItem.vue","../src/components/JSidebar/JSidebar.vue","../src/components/JAdminLayout/JAdminLayout.vue","../src/components/JProductDetail/request.ts","../src/components/JProductDetail/JProductDetailDialog.vue","../src/components/JProductDetail/store.ts","../src/components/JProductDetail/JSkuLink.vue","../src/components/JProductDetail/ProductDetailHost.vue","../src/components/JProductDetail/useProductDetailDialog.ts","../src/components/JSearchInputDialog/JSearchInputDialog.vue","../src/components/JRemoteSelect/debounce.ts","../src/components/JRemoteSelect/JRemoteSelect.vue","../src/components/JProductSelectDialog/JProductSelectDialog.vue","../src/components/JDocDetail/registry.ts","../src/components/JDocDetail/store.ts","../src/components/JDocDetail/utils/copyText.ts","../src/components/JDocDetail/DocNoLink.vue","../src/components/JDocDetail/DocDetailHost.vue","../src/components/JDocDetail/labels/receipt.ts","../src/components/JDocDetail/utils/flattenOrderItems.ts","../src/components/JRelatedDocs/RelatedDocNoCopy.vue","../src/components/JRelatedDocs/utils/flattenOrderItems.ts","../src/components/JRelatedDocs/utils/labels.ts","../src/components/JRelatedDocs/utils/useRelatedCollapseExpand.ts","../src/components/JRelatedDocs/tables/RelatedReceiptOrderTable.vue","../src/components/JRelatedDocs/tables/RelatedQcOrderTable.vue","../src/components/JRelatedDocs/tables/RelatedInboundOrderTable.vue","../src/components/JRelatedDocs/tables/RelatedPutawayOrderTable.vue","../src/components/JRelatedDocs/tables/RelatedPurchaseOrderTable.vue","../src/components/JRelatedDocs/utils/buildRelatedRows.ts","../src/components/JRelatedDocs/tables/RelatedPurchasePlanTable.vue","../src/components/JRelatedDocs/utils/display.ts","../src/components/JRelatedDocs/tables/RelatedDeliveryDocTable.vue","../src/components/JRelatedDocs/tables/RelatedProcessingOrderTable.vue","../src/components/JRelatedDocs/tables/RelatedReturnOrderTable.vue","../src/components/JRelatedDocs/tables/RelatedAbnormalOrderTable.vue","../src/components/JRelatedDocs/tables/RelatedPaymentRequestTable.vue","../src/components/JRelatedDocs/tables/RelatedReceiptVoucherTable.vue","../src/components/JRelatedDocs/tables/RelatedDeclarationTable.vue","../src/components/JRelatedDocs/registry.ts","../src/components/JRelatedDocs/RelatedDocSubTabs.vue","../src/components/JRelatedDocs/utils/parseList.ts","../src/components/JRelatedDocs/RelatedDocPanel.vue","../src/components/JRelatedDocs/JRelatedDocs.vue","../src/components/JDocDetail/views/ReceiptOrderDetailView.vue","../src/components/JDocDetail/views/QcOrderDetailView.vue","../src/components/JDocDetail/labels/inbound.ts","../src/components/JDocDetail/views/InboundOrderDetailView.vue","../src/components/JDocDetail/labels/putaway.ts","../src/components/JDocDetail/views/PutawayOrderDetailView.vue","../src/components/JDocDetail/views/DeliveryOrderDetailView.vue","../src/components/JActionLogPanel/JActionLogPanel.vue","../src/components/JDocDetail/views/TransferOrderDetailView.vue","../src/components/JDocDetail/views/WorkOrderDetailView.vue","../src/components/JDocDetail/views/AbnormalOrderDetailView.vue","../src/components/JDocDetail/views/PaymentRequestDetailView.vue","../src/components/JDocDetail/views/ReturnOrderDetailView.vue","../src/components/JDocDetail/views/CostExpenseDetailView.vue","../src/components/JDocDetail/views/ReceiptVoucherDetailView.vue","../src/components/JDocDetail/utils/purchaseQty.ts","../src/components/JDocDetail/views/PurchaseOrderDetailView.vue","../src/components/JDocDetail/utils/planDisplayHelpers.ts","../src/components/JDocDetail/views/PurchasePlanDetailView.vue","../src/components/JDocDetail/views/PurchaseContractDetailView.vue","../src/components/JDocDetail/utils/deliveryDocDisplayHelpers.ts","../src/components/JDocDetail/views/DeliveryDocDetailView.vue","../src/components/JDocDetail/wmsViews.ts","../src/utils/transform.ts","../src/utils/statusCounts.ts","../src/utils/exportStyledExcel.ts","../src/router/helpers.ts","../src/router/guards.ts","../src/index.ts"],"sourcesContent":["<template>\r\n <button\r\n class=\"j-button\"\r\n :class=\"[\r\n `j-button--${type}`,\r\n `j-button--${size}`,\r\n {\r\n 'j-button--plain': plain,\r\n 'j-button--round': round,\r\n 'j-button--disabled': disabled,\r\n 'j-button--loading': loading,\r\n },\r\n ]\"\r\n :disabled=\"disabled || loading\"\r\n @click=\"handleClick\"\r\n >\r\n <span v-if=\"loading\" class=\"j-button__loading-icon\" />\r\n <span v-if=\"$slots.default\" class=\"j-button__text\">\r\n <slot />\r\n </span>\r\n </button>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport type { ButtonType, ButtonSize } from './types'\r\n\r\ninterface Props {\r\n type?: ButtonType\r\n size?: ButtonSize\r\n plain?: boolean\r\n round?: boolean\r\n disabled?: boolean\r\n loading?: boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n type: 'default',\r\n size: 'medium',\r\n plain: false,\r\n round: false,\r\n disabled: false,\r\n loading: false,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n click: [event: MouseEvent]\r\n}>()\r\n\r\nfunction handleClick(event: MouseEvent) {\r\n if (!props.disabled && !props.loading) {\r\n emit('click', event)\r\n }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.j-button {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: $spacing-xs;\r\n padding: 8px 16px;\r\n font-size: $font-size-base;\r\n font-weight: 400;\r\n line-height: 1;\r\n white-space: nowrap;\r\n cursor: pointer;\r\n border: 1px solid $color-border;\r\n border-radius: $border-radius-base;\r\n background-color: $color-white;\r\n color: $color-text-regular;\r\n transition: $transition-fast;\r\n outline: none;\r\n user-select: none;\r\n\r\n &:hover {\r\n color: $color-primary;\r\n border-color: $color-primary;\r\n background-color: color.adjust($color-primary, $lightness: 40%);\r\n }\r\n\r\n // 尺寸\r\n &--small {\r\n padding: 5px 12px;\r\n font-size: $font-size-xs;\r\n }\r\n\r\n &--medium {\r\n padding: 8px 16px;\r\n font-size: $font-size-base;\r\n }\r\n\r\n &--large {\r\n padding: 12px 20px;\r\n font-size: $font-size-md;\r\n }\r\n\r\n // 类型\r\n &--primary {\r\n background-color: $color-primary;\r\n border-color: $color-primary;\r\n color: $color-white;\r\n &:hover {\r\n background-color: color.adjust($color-primary, $lightness: 10%);\r\n border-color: color.adjust($color-primary, $lightness: 10%);\r\n color: $color-white;\r\n }\r\n }\r\n\r\n &--success {\r\n background-color: $color-success;\r\n border-color: $color-success;\r\n color: $color-white;\r\n &:hover {\r\n background-color: color.adjust($color-success, $lightness: 10%);\r\n border-color: color.adjust($color-success, $lightness: 10%);\r\n color: $color-white;\r\n }\r\n }\r\n\r\n &--danger {\r\n background-color: $color-danger;\r\n border-color: $color-danger;\r\n color: $color-white;\r\n &:hover {\r\n background-color: color.adjust($color-danger, $lightness: 10%);\r\n border-color: color.adjust($color-danger, $lightness: 10%);\r\n color: $color-white;\r\n }\r\n }\r\n\r\n &--warning {\r\n background-color: $color-warning;\r\n border-color: $color-warning;\r\n color: $color-white;\r\n &:hover {\r\n background-color: color.adjust($color-warning, $lightness: 10%);\r\n border-color: color.adjust($color-warning, $lightness: 10%);\r\n color: $color-white;\r\n }\r\n }\r\n\r\n // 朴素按钮\r\n &--plain {\r\n &.j-button--primary {\r\n background-color: color.adjust($color-primary, $lightness: 40%);\r\n color: $color-primary;\r\n &:hover {\r\n background-color: $color-primary;\r\n color: $color-white;\r\n }\r\n }\r\n }\r\n\r\n // 圆角\r\n &--round {\r\n border-radius: $border-radius-round;\r\n }\r\n\r\n // 禁用\r\n &--disabled {\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n pointer-events: none;\r\n }\r\n\r\n // 加载\r\n &--loading {\r\n opacity: 0.7;\r\n cursor: not-allowed;\r\n pointer-events: none;\r\n }\r\n\r\n &__loading-icon {\r\n display: inline-block;\r\n width: 14px;\r\n height: 14px;\r\n border: 2px solid currentColor;\r\n border-top-color: transparent;\r\n border-radius: 50%;\r\n animation: j-spin 0.6s linear infinite;\r\n }\r\n\r\n @keyframes j-spin {\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"j-upload-img-container\">\r\n <!-- 多图模式 -->\r\n <template v-if=\"multiple\">\r\n <div class=\"images-wrapper\">\r\n <draggable\r\n v-model=\"imageList\"\r\n class=\"images-list\"\r\n item-key=\"uid\"\r\n :animation=\"200\"\r\n :disabled=\"disabled\"\r\n @end=\"handleDragEnd\"\r\n >\r\n <template #item=\"{ element, index }\">\r\n <div class=\"image-item\">\r\n <el-image\r\n :src=\"element.url\"\r\n :preview-src-list=\"imageList.map(img => img.url)\"\r\n :initial-index=\"index\"\r\n fit=\"cover\"\r\n class=\"image-preview\"\r\n :preview-teleported=\"true\"\r\n :hide-on-click-modal=\"true\"\r\n />\r\n <div v-if=\"!disabled\" class=\"delete-btn\" @click.stop=\"handleRemove(index)\">\r\n <el-icon class=\"icon-delete\">\r\n <Delete />\r\n </el-icon>\r\n </div>\r\n </div>\r\n </template>\r\n </draggable>\r\n\r\n <!-- 多图上传按钮 -->\r\n <el-upload\r\n v-if=\"!disabled && (!limit || imageList.length < limit)\"\r\n class=\"image-uploader\"\r\n :auto-upload=\"false\"\r\n :show-file-list=\"false\"\r\n :on-change=\"handleFileChange\"\r\n :disabled=\"disabled\"\r\n list-type=\"picture-card\"\r\n :accept=\"accept\"\r\n :multiple=\"multipleSelect\"\r\n >\r\n <el-icon v-if=\"!uploading\" class=\"uploader-icon\">\r\n <Plus />\r\n </el-icon>\r\n <el-icon v-else class=\"uploader-icon is-loading\">\r\n <Loading />\r\n </el-icon>\r\n </el-upload>\r\n </div>\r\n </template>\r\n\r\n <!-- 单图模式 -->\r\n <template v-else>\r\n <!-- 已有图片:独立展示,hover 显示操作遮罩 -->\r\n <div v-if=\"imageUrl\" class=\"image-item single-image-item\">\r\n <el-image\r\n :src=\"imageUrl\"\r\n fit=\"cover\"\r\n class=\"image-preview\"\r\n />\r\n <div class=\"image-actions\">\r\n <el-icon class=\"action-icon\" @click.stop=\"handlePreviewSingle\">\r\n <ZoomIn />\r\n </el-icon>\r\n <el-icon v-if=\"!disabled\" class=\"action-icon\" @click.stop=\"handleRemoveSingle\">\r\n <Delete />\r\n </el-icon>\r\n </div>\r\n </div>\r\n\r\n <!-- 无图片:显示上传按钮 -->\r\n <el-upload\r\n v-else\r\n class=\"image-uploader\"\r\n :auto-upload=\"false\"\r\n :show-file-list=\"false\"\r\n :on-change=\"handleFileChange\"\r\n :disabled=\"disabled || uploading\"\r\n :accept=\"accept\"\r\n list-type=\"picture-card\"\r\n >\r\n <el-icon class=\"uploader-icon\">\r\n <Plus v-if=\"!uploading\" />\r\n <Loading v-else class=\"is-loading\" />\r\n </el-icon>\r\n </el-upload>\r\n\r\n <!-- 大图预览 -->\r\n <el-image-viewer\r\n v-if=\"showPreview\"\r\n :url-list=\"[imageUrl]\"\r\n :teleported=\"true\"\r\n @close=\"showPreview = false\"\r\n />\r\n </template>\r\n\r\n <div v-if=\"showTipText\" class=\"upload-tip\">\r\n <span>{{ tip }}</span>\r\n <span v-if=\"multiple && limit\"> (最多 {{ limit }} 张)</span>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, watch } from 'vue'\r\nimport { ElMessage, ElImage, ElIcon, ElUpload, ElImageViewer } from 'element-plus'\r\nimport type { UploadFile } from 'element-plus'\r\nimport { Plus, Loading, Delete, ZoomIn } from '@element-plus/icons-vue'\r\nimport draggable from 'vuedraggable'\r\nimport type { ImageItem } from './types'\r\n\r\ndefineOptions({\r\n name: 'JUploadImg'\r\n})\r\n\r\nconst props = withDefaults(defineProps<{\r\n modelValue?: string | string[]\r\n disabled?: boolean\r\n multiple?: boolean\r\n /** 多图模式下,文件选择器是否允许一次选多张 */\r\n multipleSelect?: boolean\r\n limit?: number\r\n maxSize?: number\r\n accept?: string\r\n tip?: string\r\n showTip?: boolean\r\n /** 自定义上传函数,接收 File 返回图片 URL */\r\n uploadFn?: (file: File) => Promise<string>\r\n}>(), {\r\n modelValue: '',\r\n disabled: false,\r\n multiple: false,\r\n multipleSelect: true,\r\n limit: 9,\r\n maxSize: 2,\r\n accept: 'image/jpeg,image/png,image/jpg,image/gif',\r\n tip: '只能上传jpg/png/gif格式的图片,且不超过2MB',\r\n showTip: true,\r\n uploadFn: undefined\r\n})\r\n\r\nconst emit = defineEmits<{\r\n (e: 'update:modelValue', value: string | string[]): void\r\n (e: 'success', url: string): void\r\n (e: 'error', error: any): void\r\n}>()\r\n\r\n// 单图模式\r\nconst imageUrl = ref<string>('')\r\nconst showPreview = ref(false)\r\nconst showTipText = props.showTip\r\n\r\nconst handlePreviewSingle = () => {\r\n showPreview.value = true\r\n}\r\n\r\nconst handleRemoveSingle = () => {\r\n imageUrl.value = ''\r\n emit('update:modelValue', '')\r\n ElMessage.success('删除成功')\r\n}\r\n\r\n// 多图模式\r\nconst imageList = ref<ImageItem[]>([])\r\nconst uploading = ref(false)\r\n\r\n// 初始化图片列表(多图模式)\r\nconst initImageList = (urls: string[]) => {\r\n imageList.value = urls.map((url, index) => ({\r\n uid: Date.now() + index,\r\n url\r\n }))\r\n}\r\n\r\n// 监听外部值变化\r\nwatch(() => props.modelValue, (val) => {\r\n if (props.multiple) {\r\n if (Array.isArray(val) && val.length > 0) {\r\n initImageList(val)\r\n } else {\r\n imageList.value = []\r\n }\r\n } else {\r\n if (typeof val === 'string') {\r\n imageUrl.value = val\r\n } else {\r\n imageUrl.value = ''\r\n }\r\n }\r\n}, { immediate: true })\r\n\r\n// 拖拽结束(多图模式)\r\nconst handleDragEnd = () => {\r\n emitMultipleUpdate()\r\n}\r\n\r\n// 删除图片(多图模式)\r\nconst handleRemove = (index: number) => {\r\n imageList.value.splice(index, 1)\r\n emitMultipleUpdate()\r\n ElMessage.success('删除成功')\r\n}\r\n\r\n// 文件改变时触发\r\nconst handleFileChange = async (uploadFile: UploadFile) => {\r\n const file = uploadFile.raw as File\r\n\r\n if (!file) {\r\n ElMessage.error('文件不存在,请重试')\r\n return\r\n }\r\n\r\n if (file.size > props.maxSize * 1024 * 1024) {\r\n ElMessage.error(`图片大小不能超过 ${props.maxSize}MB`)\r\n return\r\n }\r\n\r\n if (!props.uploadFn) {\r\n ElMessage.error('未配置上传函数 (uploadFn)')\r\n return\r\n }\r\n\r\n try {\r\n uploading.value = true\r\n const url = await props.uploadFn(file)\r\n\r\n if (props.multiple) {\r\n if (props.limit && imageList.value.length >= props.limit) {\r\n ElMessage.warning(`最多上传 ${props.limit} 张`)\r\n return\r\n }\r\n imageList.value.push({ uid: Date.now(), url })\r\n emitMultipleUpdate()\r\n } else {\r\n imageUrl.value = url\r\n emit('update:modelValue', url)\r\n }\r\n\r\n emit('success', url)\r\n ElMessage.success('上传成功')\r\n } catch (error) {\r\n console.error('上传出错:', error)\r\n ElMessage.error('上传失败,请重试')\r\n emit('error', error)\r\n } finally {\r\n uploading.value = false\r\n }\r\n}\r\n\r\n// 触发多图更新\r\nconst emitMultipleUpdate = () => {\r\n const urls = imageList.value.map(item => item.url)\r\n emit('update:modelValue', urls)\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.j-upload-img-container {\r\n display: inline-block;\r\n}\r\n\r\n/* 多图模式样式 */\r\n.images-wrapper {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 8px;\r\n align-items: flex-start;\r\n}\r\n\r\n.images-list {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 8px;\r\n}\r\n\r\n.image-item {\r\n position: relative;\r\n width: 74px;\r\n height: 74px;\r\n border: 1px solid var(--el-border-color);\r\n border-radius: 6px;\r\n overflow: hidden;\r\n cursor: move;\r\n}\r\n\r\n.image-preview {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.delete-btn {\r\n position: absolute;\r\n top: 2px;\r\n right: 2px;\r\n width: 20px;\r\n height: 20px;\r\n background-color: rgba(0, 0, 0, 0.6);\r\n border-radius: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 0;\r\n transition: opacity 0.3s;\r\n cursor: pointer;\r\n z-index: 1;\r\n}\r\n\r\n.image-item:hover .delete-btn {\r\n opacity: 1;\r\n}\r\n\r\n.delete-btn:hover {\r\n background-color: rgba(0, 0, 0, 0.8);\r\n}\r\n\r\n.icon-delete {\r\n font-size: 12px;\r\n color: #fff;\r\n}\r\n\r\n/* 单图和多图共用样式 */\r\n.image-uploader {\r\n display: inline-block;\r\n vertical-align: top;\r\n}\r\n\r\n.image-uploader :deep(.el-upload) {\r\n border: 1px dashed var(--el-border-color);\r\n border-radius: 6px;\r\n cursor: pointer;\r\n position: relative;\r\n overflow: hidden;\r\n transition: var(--el-transition-duration-fast);\r\n width: 74px !important;\r\n height: 74px !important;\r\n}\r\n\r\n.image-uploader :deep(.el-upload:hover) {\r\n border-color: var(--el-color-primary);\r\n}\r\n\r\n.uploader-icon {\r\n font-size: 20px;\r\n color: #8c939d;\r\n width: 74px;\r\n height: 74px;\r\n text-align: center;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.single-image-item {\r\n cursor: default;\r\n}\r\n\r\n.image-actions {\r\n position: absolute;\r\n inset: 0;\r\n background-color: rgba(0, 0, 0, 0.5);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 12px;\r\n opacity: 0;\r\n transition: opacity 0.3s;\r\n}\r\n\r\n.single-image-item:hover .image-actions,\r\n.image-item:hover .image-actions {\r\n opacity: 1;\r\n}\r\n\r\n.action-icon {\r\n font-size: 18px;\r\n color: #fff;\r\n cursor: pointer;\r\n transition: transform 0.2s;\r\n}\r\n\r\n.action-icon:hover {\r\n transform: scale(1.2);\r\n}\r\n\r\n.upload-tip {\r\n margin-top: 8px;\r\n font-size: 12px;\r\n color: #909399;\r\n line-height: 1.5;\r\n}\r\n</style>\r\n","<template>\r\n <Icon v-if=\"icon\" :icon=\"icon\" :width=\"size\" :height=\"size\" v-bind=\"$attrs\" />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { Icon } from '@iconify/vue'\r\n\r\ndefineOptions({\r\n name: 'JIconRender'\r\n})\r\n\r\nwithDefaults(defineProps<{\r\n icon: string\r\n size?: string | number\r\n}>(), {\r\n size: 24,\r\n})\r\n</script>\r\n","import type { App, InjectionKey, Ref } from 'vue'\nimport { inject } from 'vue'\n\nexport type BtnPermissionInput = string | string[]\nexport type BtnPermissionMode = 'any' | 'all'\nexport type BtnPermissionChecker = (\n value: BtnPermissionInput,\n mode?: BtnPermissionMode,\n) => boolean\n\nexport const J_BTN_PERMISSION_KEY: InjectionKey<BtnPermissionChecker> = Symbol('J_BTN_PERMISSION')\nexport const J_BTN_PERMISSIONS_KEY: InjectionKey<Ref<Record<string, boolean>>> = Symbol('J_BTN_PERMISSIONS')\n\nconst normalizeCodes = (value: BtnPermissionInput): string[] => {\n if (typeof value === 'string') return value ? [value] : []\n if (Array.isArray(value)) return value.filter(Boolean)\n return []\n}\n\nexport function checkBtnPermission(\n value: BtnPermissionInput | undefined,\n checker?: BtnPermissionChecker | null,\n mode: BtnPermissionMode = 'any',\n): boolean {\n if (!value) return true\n if (!checker) return false\n\n const codes = normalizeCodes(value)\n if (!codes.length) return false\n\n if (codes.length === 1) return checker(codes[0], mode)\n\n return mode === 'all'\n ? codes.every(code => checker(code, 'all'))\n : codes.some(code => checker(code, 'any'))\n}\n\n/**\n * 在应用入口注入按钮权限检查函数(推荐,全项目只需一次)。\n * 传入 permissions 后,组件内权限判断会随权限表更新而响应。\n *\n * @example\n * ```ts\n * import { createApp } from 'vue'\n * import { provideBtnPermission } from 'jgy-public-component'\n * import { hasBtnPermission } from '@/utils/btnPermission'\n * import { usePermissionStore } from '@/stores/permission'\n *\n * const app = createApp(App)\n * const permissionStore = usePermissionStore()\n * provideBtnPermission(app, hasBtnPermission, permissionStore.buttonPermissions)\n * ```\n */\nexport function provideBtnPermission(\n app: App,\n checker: BtnPermissionChecker,\n permissions?: Ref<Record<string, boolean>>,\n) {\n app.provide(J_BTN_PERMISSION_KEY, checker)\n if (permissions) {\n app.provide(J_BTN_PERMISSIONS_KEY, permissions)\n }\n}\n\n/** 在 setup 中读取全局注入的按钮权限检查函数 */\nexport function useInjectedBtnPermission(): BtnPermissionChecker | null {\n return inject(J_BTN_PERMISSION_KEY, null)\n}\n\n/** 在 setup 中读取全局注入的按钮权限表(可选,用于响应式更新) */\nexport function useInjectedBtnPermissions(): Ref<Record<string, boolean>> | null {\n return inject(J_BTN_PERMISSIONS_KEY, null)\n}\n","import { computed, type ComputedRef } from 'vue'\nimport {\n checkBtnPermission,\n useInjectedBtnPermission,\n useInjectedBtnPermissions,\n type BtnPermissionChecker,\n type BtnPermissionInput,\n} from '../utils/btnPermission'\n\nexport function useBtnPermissionGate(permissionChecker?: BtnPermissionChecker) {\n const injectedPermissionChecker = useInjectedBtnPermission()\n const injectedPermissions = useInjectedBtnPermissions()\n\n const resolvePermissionChecker = () => permissionChecker ?? injectedPermissionChecker\n\n const canShowByPermission = (permission?: BtnPermissionInput) => {\n if (injectedPermissions) void injectedPermissions.value\n return checkBtnPermission(permission, resolvePermissionChecker())\n }\n\n const createCanShow = (\n show: () => boolean,\n permission?: () => BtnPermissionInput | undefined,\n ): ComputedRef<boolean> =>\n computed(() => show() && canShowByPermission(permission?.()))\n\n return {\n canShowByPermission,\n createCanShow,\n }\n}\n","<template>\r\n <el-card shadow=\"never\" class=\"j-search-header-card\">\r\n <el-form inline class=\"search-form\">\r\n <div\r\n ref=\"formItemsRef\"\r\n class=\"form-items-wrapper\"\r\n :class=\"{ 'is-animated': isAnimated }\"\r\n >\r\n <slot />\r\n </div>\r\n </el-form>\r\n <div class=\"action-bar\" :style=\"{ marginTop: expanded ? '0px' : '10px' }\">\r\n <div class=\"action-left\">\r\n <el-button v-if=\"canShowAdd\" type=\"primary\" :icon=\"Plus\" @click=\"emit('add')\">\r\n {{ addText }}\r\n </el-button>\r\n <el-button\r\n v-if=\"canShowBatchDelete\"\r\n type=\"danger\"\r\n :icon=\"Delete\"\r\n :disabled=\"selectedCount === 0\"\r\n @click=\"emit('batchDelete')\"\r\n >\r\n 批量删除{{ selectedCount ? `(${selectedCount})` : '' }}\r\n </el-button>\r\n <el-button v-if=\"canShowSearch\" type=\"primary\" :icon=\"Search\" @click=\"emit('search')\">搜索</el-button>\r\n <el-button v-if=\"canShowReset\" :icon=\"Refresh\" @click=\"emit('reset')\">重置</el-button>\r\n <slot name=\"actions\" />\r\n </div>\r\n <el-button\r\n v-if=\"shouldCollapse\"\r\n link\r\n type=\"primary\"\r\n @click=\"toggleExpand\"\r\n >\r\n {{ expanded ? '收起' : '展开' }}\r\n <el-icon class=\"toggle-icon\" :class=\"{ 'is-expanded': expanded }\">\r\n <ArrowDown />\r\n </el-icon>\r\n </el-button>\r\n </div>\r\n </el-card>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\r\nimport { ElCard, ElForm, ElButton, ElIcon } from 'element-plus'\r\nimport { Search, Refresh, Plus, Delete, ArrowDown } from '@element-plus/icons-vue'\r\nimport { useBtnPermissionGate } from '../../composables/useBtnPermissionGate'\r\nimport type { BtnPermissionChecker, BtnPermissionInput } from '../../utils/btnPermission'\r\n\r\ndefineOptions({\r\n name: 'JSearchHeader'\r\n})\r\n\r\nconst props = withDefaults(defineProps<{\r\n selectedCount?: number\r\n addText?: string\r\n defaultVisible?: number\r\n showAdd?: boolean\r\n showBatchDelete?: boolean\r\n showSearch?: boolean\r\n showReset?: boolean\r\n addPermission?: BtnPermissionInput\r\n batchDeletePermission?: BtnPermissionInput\r\n searchPermission?: BtnPermissionInput\r\n resetPermission?: BtnPermissionInput\r\n permissionChecker?: BtnPermissionChecker\r\n}>(), {\r\n selectedCount: 0,\r\n addText: '新增',\r\n defaultVisible: 5,\r\n showAdd: true,\r\n showBatchDelete: true,\r\n showSearch: true,\r\n showReset: true\r\n})\r\n\r\nconst { createCanShow } = useBtnPermissionGate(props.permissionChecker)\r\n\r\nconst canShowAdd = createCanShow(\r\n () => props.showAdd,\r\n () => props.addPermission,\r\n)\r\nconst canShowBatchDelete = createCanShow(\r\n () => props.showBatchDelete,\r\n () => props.batchDeletePermission,\r\n)\r\nconst canShowSearch = createCanShow(\r\n () => props.showSearch,\r\n () => props.searchPermission,\r\n)\r\nconst canShowReset = createCanShow(\r\n () => props.showReset,\r\n () => props.resetPermission,\r\n)\r\n\r\nconst emit = defineEmits<{\r\n search: []\r\n reset: []\r\n add: []\r\n batchDelete: []\r\n}>()\r\n\r\nconst formItemsRef = ref<HTMLElement>()\r\nconst expanded = ref(false)\r\nconst isAnimated = ref(false)\r\nconst itemCount = ref(0)\r\nconst collapsedHeight = ref(0)\r\n\r\nconst shouldCollapse = computed(() => itemCount.value > props.defaultVisible)\r\n\r\nconst measureItems = () => {\r\n if (!formItemsRef.value) return\r\n const items = Array.from(formItemsRef.value.children) as HTMLElement[]\r\n itemCount.value = items.length\r\n\r\n const lastVisibleItem = items[props.defaultVisible - 1]\r\n if (lastVisibleItem && formItemsRef.value) {\r\n const wrapperRect = formItemsRef.value.getBoundingClientRect()\r\n const lastVisibleRect = lastVisibleItem.getBoundingClientRect()\r\n collapsedHeight.value = lastVisibleRect.bottom - wrapperRect.top\r\n }\r\n}\r\n\r\nconst toggleExpand = () => {\r\n const el = formItemsRef.value\r\n if (!el) return\r\n\r\n if (!expanded.value) {\r\n expanded.value = true\r\n el.style.maxHeight = el.scrollHeight + 'px'\r\n const onEnd = () => {\r\n el.style.maxHeight = 'none'\r\n el.removeEventListener('transitionend', onEnd)\r\n }\r\n el.addEventListener('transitionend', onEnd)\r\n } else {\r\n measureItems()\r\n expanded.value = false\r\n el.style.maxHeight = el.scrollHeight + 'px'\r\n el.offsetHeight\r\n el.style.maxHeight = collapsedHeight.value + 'px'\r\n }\r\n}\r\n\r\nlet observer: MutationObserver | null = null\r\n\r\nonMounted(() => {\r\n measureItems()\r\n if (shouldCollapse.value && formItemsRef.value) {\r\n formItemsRef.value.style.maxHeight = collapsedHeight.value + 'px'\r\n }\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(() => {\r\n isAnimated.value = true\r\n })\r\n })\r\n if (formItemsRef.value) {\r\n observer = new MutationObserver(() => {\r\n measureItems()\r\n if (shouldCollapse.value && !expanded.value && formItemsRef.value) {\r\n formItemsRef.value.style.maxHeight = collapsedHeight.value + 'px'\r\n }\r\n })\r\n observer.observe(formItemsRef.value, { childList: true })\r\n }\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n observer?.disconnect()\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.j-search-header-card :deep(.el-card__body) {\r\n padding: 16px 20px 12px;\r\n}\r\n\r\n.search-form {\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n gap: 0;\r\n}\r\n\r\n.form-items-wrapper {\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n overflow: hidden;\r\n}\r\n\r\n.form-items-wrapper.is-animated {\r\n transition: max-height 0.3s ease-in-out;\r\n}\r\n\r\n.form-items-wrapper :deep(.el-form-item) {\r\n margin-bottom: 10px;\r\n margin-right: 16px;\r\n}\r\n\r\n.action-bar {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding-top: 10px;\r\n border-top: 1px solid #ebeef5;\r\n}\r\n\r\n.action-left {\r\n display: flex;\r\n gap: 8px;\r\n}\r\n\r\n.toggle-icon {\r\n margin-left: 2px;\r\n transition: transform 0.25s;\r\n}\r\n\r\n.toggle-icon.is-expanded {\r\n transform: rotate(180deg);\r\n}\r\n</style>\r\n","<template>\r\n <el-card shadow=\"never\" class=\"j-list-search-header\">\r\n <!-- Row 1: Tabs -->\r\n <el-tabs\r\n v-if=\"showTabsRow\"\r\n v-model=\"activeTab\"\r\n size=\"small\"\r\n class=\"j-list-search-header__tabs\"\r\n @tab-change=\"(name: string | number) => emit('tab-change', String(name))\"\r\n >\r\n <slot name=\"tabs\" />\r\n </el-tabs>\r\n\r\n <!-- Row 2: Filter bar -->\r\n <div class=\"j-list-search-header__filter\">\r\n <div ref=\"filterLeftRef\" class=\"filter-left\">\r\n <div\r\n ref=\"filterItemsRef\"\r\n class=\"filter-items-wrapper\"\r\n :class=\"{ 'is-animated': isAnimated }\"\r\n >\r\n <slot name=\"filter\" />\r\n </div>\r\n </div>\r\n <div class=\"filter-right\">\r\n <el-button\r\n v-if=\"shouldShowCollapseToggle\"\r\n link\r\n type=\"primary\"\r\n class=\"filter-collapse-btn\"\r\n @click=\"toggleExpand\"\r\n >\r\n {{ expanded ? '收起' : '展开' }}\r\n <el-icon class=\"toggle-icon\" :class=\"{ 'is-expanded': expanded }\">\r\n <ArrowDown />\r\n </el-icon>\r\n </el-button>\r\n <el-popover\r\n v-if=\"canShowMoreFilter\"\r\n :visible=\"moreFilterVisible\"\r\n placement=\"bottom-end\"\r\n trigger=\"click\"\r\n :width=\"560\"\r\n popper-class=\"j-list-search-header-more-filter\"\r\n >\r\n <template #reference>\r\n <el-button\r\n type=\"primary\"\r\n :class=\"{ 'is-more-filter-active': moreFilterActiveCount > 0 }\"\r\n @click=\"moreFilterVisible = !moreFilterVisible\"\r\n >\r\n {{ moreFilterLabel }}\r\n </el-button>\r\n </template>\r\n <slot name=\"more-filter\" />\r\n <div class=\"more-filter-footer\">\r\n <el-button @click=\"moreFilterVisible = false\">取消</el-button>\r\n <el-button v-if=\"canShowSearch\" type=\"primary\" @click=\"handleMoreFilterConfirm\">查询</el-button>\r\n </div>\r\n </el-popover>\r\n <el-button v-if=\"canShowSearch\" type=\"primary\" @click=\"emit('search')\">查询</el-button>\r\n <el-button v-if=\"canShowReset\" class=\"btn-reset\" @click=\"emit('reset')\">重置</el-button>\r\n </div>\r\n </div>\r\n\r\n <!-- Row 3: Action bar -->\r\n <div class=\"j-list-search-header__actions\">\r\n <div class=\"actions-left\">\r\n <slot name=\"actions\" />\r\n </div>\r\n <div class=\"actions-right\">\r\n <el-icon\r\n v-if=\"canShowDownload\"\r\n class=\"action-icon\"\r\n :size=\"18\"\r\n title=\"导出\"\r\n @click=\"emit('download')\"\r\n >\r\n <Download />\r\n </el-icon>\r\n <el-icon\r\n v-if=\"canShowSettings\"\r\n class=\"action-icon\"\r\n :size=\"18\"\r\n title=\"列设置\"\r\n @click=\"settingsVisible = true\"\r\n >\r\n <Setting />\r\n </el-icon>\r\n </div>\r\n </div>\r\n\r\n <!-- Settings Drawer -->\r\n <el-drawer\r\n v-model=\"settingsVisible\"\r\n title=\"列设置\"\r\n direction=\"rtl\"\r\n size=\"720px\"\r\n append-to-body\r\n destroy-on-close\r\n >\r\n <slot name=\"settings\" />\r\n <template #footer>\r\n <div class=\"settings-footer\">\r\n <el-button v-if=\"canShowSettings\" @click=\"emit('restore-default')\">恢复默认</el-button>\r\n <div>\r\n <el-button @click=\"settingsVisible = false\">取消</el-button>\r\n <el-button v-if=\"canShowSettings\" type=\"primary\" @click=\"handleSettingsSave\">保存</el-button>\r\n </div>\r\n </div>\r\n </template>\r\n </el-drawer>\r\n </el-card>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useSlots } from 'vue'\r\nimport type { JListSearchHeaderProps } from './types'\r\nimport { ArrowDown, Download, Setting } from '@element-plus/icons-vue'\r\nimport { useBtnPermissionGate } from '../../composables/useBtnPermissionGate'\r\n\r\ndefineOptions({\r\n name: 'JListSearchHeader',\r\n})\r\n\r\nconst props = withDefaults(defineProps<JListSearchHeaderProps>(), {\r\n showMoreFilter: true,\r\n showDownload: true,\r\n showSettings: true,\r\n showTabs: true,\r\n showSearch: true,\r\n showReset: true,\r\n defaultVisibleRows: 1,\r\n collapsible: true,\r\n moreFilterActiveCount: 0,\r\n})\r\n\r\nconst { createCanShow } = useBtnPermissionGate(props.permissionChecker)\r\n\r\nconst canShowMoreFilter = createCanShow(\r\n () => props.showMoreFilter,\r\n () => props.moreFilterPermission,\r\n)\r\nconst canShowSearch = createCanShow(\r\n () => props.showSearch,\r\n () => props.searchPermission,\r\n)\r\nconst canShowReset = createCanShow(\r\n () => props.showReset,\r\n () => props.resetPermission,\r\n)\r\nconst canShowDownload = createCanShow(\r\n () => props.showDownload,\r\n () => props.downloadPermission,\r\n)\r\nconst canShowSettings = createCanShow(\r\n () => props.showSettings,\r\n () => props.settingsPermission,\r\n)\r\n\r\nconst activeTab = defineModel<string | number>({ default: '' })\r\n\r\nconst emit = defineEmits<{\r\n search: []\r\n reset: []\r\n download: []\r\n 'settings-save': []\r\n 'restore-default': []\r\n 'more-filter-search': []\r\n 'tab-change': [name: string]\r\n}>()\r\n\r\nconst slots = useSlots()\r\nconst moreFilterVisible = ref(false)\r\nconst settingsVisible = ref(false)\r\n\r\nconst filterItemsRef = ref<HTMLElement>()\r\nconst filterLeftRef = ref<HTMLElement>()\r\nconst expanded = ref(false)\r\nconst isAnimated = ref(false)\r\nconst rowCount = ref(0)\r\nconst collapsedHeight = ref(0)\r\n\r\nconst ROW_TOP_TOLERANCE = 8\r\nconst COLLAPSED_HEIGHT_BUFFER = 4\r\n\r\nconst showTabsRow = computed(() => props.showTabs && !!slots.tabs)\r\n\r\nconst moreFilterLabel = computed(() => {\r\n const count = props.moreFilterActiveCount ?? 0\r\n return count > 0 ? `更多筛选 (${count})` : '更多筛选'\r\n})\r\n\r\nconst shouldShowCollapseToggle = computed(\r\n () => props.collapsible && rowCount.value > props.defaultVisibleRows,\r\n)\r\n\r\n/** 兼容 #filter 内包 el-form 或直接 el-form-item */\r\nconst collectFilterItems = (root: HTMLElement): HTMLElement[] => {\r\n const form = root.querySelector(':scope > .el-form')\r\n if (form) {\r\n return Array.from(form.children).filter((el) =>\r\n el.classList.contains('el-form-item'),\r\n ) as HTMLElement[]\r\n }\r\n return Array.from(root.children).filter((el) =>\r\n el.classList.contains('el-form-item'),\r\n ) as HTMLElement[]\r\n}\r\n\r\n/** 按 offsetTop 将 el-form-item 分组为视觉行 */\r\nconst groupItemsByRow = (items: HTMLElement[]): HTMLElement[][] => {\r\n if (!items.length) return []\r\n\r\n const rows: HTMLElement[][] = []\r\n let currentRow: HTMLElement[] = [items[0]]\r\n let rowTop = items[0].offsetTop\r\n\r\n for (let i = 1; i < items.length; i++) {\r\n const item = items[i]\r\n if (Math.abs(item.offsetTop - rowTop) <= ROW_TOP_TOLERANCE) {\r\n currentRow.push(item)\r\n } else {\r\n rows.push(currentRow)\r\n currentRow = [item]\r\n rowTop = item.offsetTop\r\n }\r\n }\r\n rows.push(currentRow)\r\n return rows\r\n}\r\n\r\nconst applyCollapsedHeight = () => {\r\n const el = filterItemsRef.value\r\n if (!el || expanded.value) return\r\n\r\n if (!shouldShowCollapseToggle.value) {\r\n el.style.maxHeight = 'none'\r\n return\r\n }\r\n\r\n el.style.maxHeight = `${collapsedHeight.value}px`\r\n}\r\n\r\nconst measureItems = () => {\r\n if (!filterItemsRef.value) return\r\n\r\n const items = collectFilterItems(filterItemsRef.value)\r\n const rows = groupItemsByRow(items)\r\n rowCount.value = rows.length\r\n\r\n const visibleRows = rows.slice(0, props.defaultVisibleRows)\r\n const lastVisibleRow = visibleRows[visibleRows.length - 1]\r\n const lastVisibleItem = lastVisibleRow?.[lastVisibleRow.length - 1]\r\n\r\n if (lastVisibleItem) {\r\n const wrapperRect = filterItemsRef.value.getBoundingClientRect()\r\n const lastVisibleRect = lastVisibleItem.getBoundingClientRect()\r\n collapsedHeight.value =\r\n lastVisibleRect.bottom - wrapperRect.top + COLLAPSED_HEIGHT_BUFFER\r\n } else {\r\n collapsedHeight.value = 0\r\n }\r\n}\r\n\r\nconst remeasureLayout = () => {\r\n measureItems()\r\n applyCollapsedHeight()\r\n}\r\n\r\nconst toggleExpand = () => {\r\n const el = filterItemsRef.value\r\n if (!el) return\r\n\r\n if (!expanded.value) {\r\n expanded.value = true\r\n el.style.maxHeight = `${el.scrollHeight}px`\r\n const onEnd = () => {\r\n el.style.maxHeight = 'none'\r\n el.removeEventListener('transitionend', onEnd)\r\n }\r\n el.addEventListener('transitionend', onEnd)\r\n } else {\r\n measureItems()\r\n expanded.value = false\r\n el.style.maxHeight = `${el.scrollHeight}px`\r\n el.offsetHeight\r\n el.style.maxHeight = `${collapsedHeight.value}px`\r\n }\r\n}\r\n\r\nlet mutationObserver: MutationObserver | null = null\r\nlet resizeObserver: ResizeObserver | null = null\r\n\r\nonMounted(async () => {\r\n await nextTick()\r\n remeasureLayout()\r\n requestAnimationFrame(() => {\r\n remeasureLayout()\r\n requestAnimationFrame(() => {\r\n isAnimated.value = true\r\n })\r\n })\r\n\r\n if (filterItemsRef.value) {\r\n mutationObserver = new MutationObserver(() => {\r\n remeasureLayout()\r\n })\r\n mutationObserver.observe(filterItemsRef.value, { childList: true, subtree: true })\r\n }\r\n\r\n if (filterLeftRef.value) {\r\n resizeObserver = new ResizeObserver(() => {\r\n remeasureLayout()\r\n })\r\n resizeObserver.observe(filterLeftRef.value)\r\n }\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n mutationObserver?.disconnect()\r\n resizeObserver?.disconnect()\r\n})\r\n\r\nconst handleMoreFilterConfirm = () => {\r\n emit('more-filter-search')\r\n moreFilterVisible.value = false\r\n}\r\n\r\nconst handleSettingsSave = () => {\r\n emit('settings-save')\r\n settingsVisible.value = false\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.j-list-search-header :deep(.el-card__body) {\r\n padding: 0;\r\n}\r\n\r\n/* Row 1: Tabs */\r\n.j-list-search-header__tabs :deep(.el-tabs__header) {\r\n margin-bottom: 0;\r\n padding: 0 20px;\r\n}\r\n\r\n.j-list-search-header__tabs :deep(.el-tabs__nav-wrap::after) {\r\n height: 1px;\r\n}\r\n\r\n.j-list-search-header__tabs :deep(.el-tabs__item) {\r\n font-size: 14px;\r\n height: 40px;\r\n line-height: 40px;\r\n}\r\n\r\n.j-list-search-header__tabs :deep(.el-tabs__content) {\r\n display: none;\r\n}\r\n\r\n/* Row 2: Filter bar */\r\n.j-list-search-header__filter {\r\n display: flex;\r\n align-items: flex-start;\r\n justify-content: space-between;\r\n padding: 12px 20px;\r\n padding-bottom: 0;\r\n gap: 12px;\r\n border-bottom: 1px solid #ebeef5;\r\n}\r\n\r\n.filter-left {\r\n flex: 1;\r\n min-width: 0;\r\n}\r\n\r\n.filter-items-wrapper {\r\n overflow: hidden;\r\n width: 100%;\r\n}\r\n\r\n.filter-items-wrapper.is-animated {\r\n transition: max-height 0.3s ease-in-out;\r\n}\r\n\r\n.filter-items-wrapper :deep(.el-form) {\r\n display: flex;\r\n flex-wrap: wrap;\r\n /* 必须顶对齐:center 时不同高度控件的 offsetTop 会错位,\r\n 行分组(容差仅 2px)会把同一视觉行拆成多行,导致折叠只剩 1 个筛选项 */\r\n align-items: flex-start;\r\n}\r\n\r\n.filter-items-wrapper :deep(.el-form-item) {\r\n margin-bottom: 10px;\r\n margin-right: 12px;\r\n}\r\n\r\n.filter-items-wrapper :deep(.el-select),\r\n.filter-items-wrapper :deep(.el-date-editor),\r\n.filter-items-wrapper :deep(.el-input) {\r\n flex-shrink: 0;\r\n}\r\n\r\n.filter-right {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n flex-shrink: 0;\r\n padding-top: 2px;\r\n}\r\n\r\n.filter-collapse-btn {\r\n padding-left: 0;\r\n padding-right: 0;\r\n}\r\n\r\n.toggle-icon {\r\n margin-left: 2px;\r\n transition: transform 0.25s;\r\n}\r\n\r\n.toggle-icon.is-expanded {\r\n transform: rotate(180deg);\r\n}\r\n\r\n.is-more-filter-active {\r\n box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.35);\r\n}\r\n\r\n/* Row 3: Action bar */\r\n.j-list-search-header__actions {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 20px;\r\n}\r\n\r\n.actions-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n\r\n.actions-right {\r\n display: flex;\r\n align-items: center;\r\n gap: 16px;\r\n}\r\n\r\n.action-icon {\r\n cursor: pointer;\r\n color: #606266;\r\n transition: color 0.2s;\r\n}\r\n\r\n.action-icon:hover {\r\n color: #409eff;\r\n}\r\n\r\n/* More Filter Popover Footer */\r\n.more-filter-footer {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 8px;\r\n padding-top: 16px;\r\n margin-top: 16px;\r\n border-top: 1px solid #ebeef5;\r\n}\r\n\r\n/* Settings Drawer Footer */\r\n.settings-footer {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n}\r\n</style>\r\n","<template>\r\n <el-dialog\r\n v-model=\"visible\"\r\n :title=\"props.title\"\r\n width=\"900px\"\r\n :close-on-click-modal=\"false\"\r\n @open=\"handleOpen\"\r\n @close=\"handleClose\"\r\n >\r\n <!-- 上传区域 -->\r\n <el-card shadow=\"never\" class=\"j-import-upload-card\">\r\n <div class=\"j-import-upload-card-title\">导入 EXCEL</div>\r\n <el-divider style=\"margin: 10px 0\" />\r\n <div class=\"j-import-upload-row\">\r\n <el-upload\r\n accept=\".xlsx,.xls\"\r\n :auto-upload=\"false\"\r\n :show-file-list=\"false\"\r\n :on-change=\"handleFileChange\"\r\n >\r\n <el-button size=\"small\">点击上传</el-button>\r\n </el-upload>\r\n <el-link\r\n v-if=\"dataColumns.length\"\r\n type=\"primary\"\r\n class=\"j-import-no-wrap\"\r\n @click=\"handleDownloadTemplate\"\r\n >\r\n 下载导入模板.xlsx\r\n </el-link>\r\n </div>\r\n </el-card>\r\n\r\n <!-- 统计信息 + 确认导入 -->\r\n <el-row class=\"j-import-stats-row\" :gutter=\"20\" align=\"middle\">\r\n <el-col :span=\"18\">\r\n <el-row class=\"j-import-stats-cols\">\r\n <el-col :span=\"4\" class=\"j-import-stat-item\">\r\n <div class=\"j-import-stat-num\">{{ stats.total }}</div>\r\n <div class=\"j-import-stat-label\">导入数量</div>\r\n </el-col>\r\n <el-col :span=\"4\" class=\"j-import-stat-item\">\r\n <div class=\"j-import-stat-num\">{{ stats.fail }}</div>\r\n <div class=\"j-import-stat-label\">失败数量</div>\r\n </el-col>\r\n <el-col :span=\"4\" class=\"j-import-stat-item\">\r\n <div class=\"j-import-stat-num\">{{ stats.success }}</div>\r\n <div class=\"j-import-stat-label\">成功数量</div>\r\n </el-col>\r\n </el-row>\r\n </el-col>\r\n <el-col :span=\"6\" class=\"j-import-confirm-col\">\r\n <el-button\r\n type=\"primary\"\r\n size=\"small\"\r\n :loading=\"submitting\"\r\n :disabled=\"!renderData.length\"\r\n @click=\"handleConfirm\"\r\n >\r\n 确认导入\r\n </el-button>\r\n </el-col>\r\n </el-row>\r\n\r\n <!-- 数据表格 -->\r\n <el-table :data=\"renderData\" border size=\"small\" max-height=\"360\" class=\"j-import-data-table\">\r\n <el-table-column\r\n v-for=\"col in dataColumns\"\r\n :key=\"col.prop\"\r\n :prop=\"col.prop\"\r\n :label=\"col.label\"\r\n :min-width=\"120\"\r\n show-overflow-tooltip\r\n />\r\n <el-table-column label=\"状态\" width=\"110\" align=\"center\" fixed=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"row._status === -1\" class=\"j-import-status-fail\">\r\n {{ row._error || '创建失败' }}\r\n </span>\r\n <span v-else>{{ statusMap[row._status] }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" width=\"80\" align=\"center\" fixed=\"right\">\r\n <template #default=\"{ $index, row }\">\r\n <el-button\r\n v-if=\"row._status === 0\"\r\n size=\"small\"\r\n @click=\"handleDel($index)\"\r\n >\r\n 删除\r\n </el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n\r\n <template #footer>\r\n <el-button @click=\"handleClose\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed } from 'vue'\r\nimport { ElMessage, ElDialog, ElCard, ElDivider, ElUpload, ElButton, ElLink, ElRow, ElCol, ElTable, ElTableColumn } from 'element-plus'\r\nimport type { UploadFile } from 'element-plus'\r\nimport * as XLSX from 'xlsx'\r\nimport type { JImportExcelProps } from './types'\r\n\r\ndefineOptions({ name: 'JImportExcel' })\r\n\r\nconst props = withDefaults(defineProps<JImportExcelProps>(), {\r\n excludeFields: () => ['id', 'ctime', 'mtime'],\r\n title: 'Excel 批量导入',\r\n})\r\n\r\nconst emit = defineEmits<{\r\n success: []\r\n}>()\r\n\r\nconst visible = defineModel<boolean>({ default: false })\r\nconst submitting = ref(false)\r\nconst fieldMap = ref<Record<string, string>>({})\r\nconst renderData = ref<Record<string, any>[]>([])\r\nconst stats = ref({ total: 0, success: 0, fail: 0 })\r\n\r\nconst statusMap: Record<number, string> = {\r\n 0: '待创建',\r\n 1: '创建成功',\r\n 2: '创建中',\r\n [-1]: '创建失败',\r\n}\r\n\r\n/** 过滤后的表头列 */\r\nconst dataColumns = computed(() => {\r\n return Object.entries(fieldMap.value)\r\n .filter(([key]) => !props.excludeFields.includes(key))\r\n .map(([key, label]) => ({ id: key, label, prop: key }))\r\n})\r\n\r\n/** 弹窗打开时获取字段列表 */\r\nconst handleOpen = async () => {\r\n try {\r\n const res = await props.getFieldListApi()\r\n fieldMap.value = res.data.tableFieldsInfo ?? {}\r\n } catch {\r\n ElMessage.error('获取字段列表失败')\r\n }\r\n}\r\n\r\n/** 文件上传解析 */\r\nconst handleFileChange = (uploadFile: UploadFile) => {\r\n const raw = uploadFile.raw\r\n if (!raw) return\r\n\r\n const validTypes = [\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n 'application/vnd.ms-excel',\r\n ]\r\n if (!validTypes.includes(raw.type) && !raw.name.match(/\\.xlsx?$/i)) {\r\n ElMessage.warning('请上传 .xlsx 或 .xls 格式文件')\r\n return\r\n }\r\n\r\n const reader = new FileReader()\r\n reader.onload = (e) => {\r\n try {\r\n const workbook = XLSX.read(e.target!.result, { type: 'binary' })\r\n const wsName = workbook.SheetNames[0] as string\r\n const ws = workbook.Sheets[wsName]!\r\n const rows = XLSX.utils.sheet_to_json(ws, {\r\n header: 1,\r\n defval: '',\r\n }) as any[][]\r\n\r\n const dataRows = rows.slice(1).filter((row) => row.some((cell) => cell !== ''))\r\n\r\n if (!dataRows.length) {\r\n ElMessage.warning('文件内容为空')\r\n return\r\n }\r\n\r\n // 按后端字段顺序一一映射,空单元格由 defval 补 '',避免后续列顶上来\r\n const list: Record<string, any>[] = dataRows.map((row) => {\r\n const item: Record<string, any> = { _status: 0, _error: '' }\r\n dataColumns.value.forEach((col, index) => {\r\n item[col.prop] = row[index] !== undefined ? row[index] : ''\r\n })\r\n return item\r\n })\r\n\r\n renderData.value = list\r\n stats.value = { total: list.length, success: 0, fail: 0 }\r\n } catch {\r\n ElMessage.error('解析文件失败,请检查文件格式')\r\n }\r\n }\r\n reader.readAsBinaryString(raw)\r\n}\r\n\r\n/** 删除行 */\r\nconst handleDel = (idx: number) => {\r\n renderData.value.splice(idx, 1)\r\n stats.value.total = renderData.value.length\r\n}\r\n\r\n/** 确认导入 */\r\nconst handleConfirm = async () => {\r\n const data = renderData.value\r\n .filter((row) => row._status === 0)\r\n .map(({ _status, _error, ...rest }) => rest)\r\n\r\n if (!data.length) {\r\n ElMessage.warning('没有可导入的数据')\r\n return\r\n }\r\n\r\n submitting.value = true\r\n try {\r\n const res = await props.importApi(data)\r\n if (res.code === 1) {\r\n // 全部成功\r\n renderData.value.forEach((row) => {\r\n if (row._status === 0) row._status = 1\r\n })\r\n stats.value.success = renderData.value.filter((r) => r._status === 1).length\r\n ElMessage.success('导入成功')\r\n emit('success')\r\n } else {\r\n ElMessage.error(res.msg || '导入失败')\r\n }\r\n } catch {\r\n ElMessage.error('导入失败,请重试')\r\n } finally {\r\n submitting.value = false\r\n }\r\n}\r\n\r\n/** 下载导入模板 */\r\nconst handleDownloadTemplate = () => {\r\n try {\r\n const wb = XLSX.utils.book_new()\r\n const headers = dataColumns.value.map((col) => col.label)\r\n const tr: Record<string, string> = {}\r\n headers.forEach((h) => (tr[h] = ''))\r\n const ws = XLSX.utils.json_to_sheet([tr])\r\n XLSX.utils.book_append_sheet(wb, ws, '模板')\r\n XLSX.writeFile(wb, '导入模板.xlsx')\r\n } catch {\r\n ElMessage.error('模板下载失败')\r\n }\r\n}\r\n\r\nconst handleClose = () => {\r\n if (!submitting.value) {\r\n visible.value = false\r\n renderData.value = []\r\n stats.value = { total: 0, success: 0, fail: 0 }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.j-import-upload-card {\r\n margin-bottom: 16px;\r\n}\r\n.j-import-upload-card-title {\r\n font-size: 14px;\r\n color: #606266;\r\n}\r\n.j-import-upload-row {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n}\r\n.j-import-no-wrap {\r\n white-space: nowrap;\r\n}\r\n.j-import-stats-row {\r\n margin: 12px 0;\r\n}\r\n.j-import-stats-cols {\r\n text-align: center;\r\n line-height: 1.5;\r\n}\r\n.j-import-stat-item {\r\n padding: 0 8px;\r\n}\r\n.j-import-stat-num {\r\n font-size: 20px;\r\n}\r\n.j-import-stat-label {\r\n font-size: 12px;\r\n color: #909399;\r\n}\r\n.j-import-confirm-col {\r\n text-align: right;\r\n padding-top: 10px;\r\n}\r\n.j-import-data-table {\r\n margin-top: 10px;\r\n}\r\n.j-import-status-fail {\r\n color: #f56c6c;\r\n font-size: 12px;\r\n}\r\n</style>\r\n","<template>\r\n <!-- 有子菜单:渲染 el-sub-menu -->\r\n <el-sub-menu\r\n v-if=\"menuItem.children && menuItem.children.length > 0\"\r\n :index=\"menuIndex\"\r\n :class=\"[\r\n `j-sidebar__depth-${depth}`,\r\n { 'j-sidebar-item--active-parent': isActiveParent },\r\n ]\"\r\n >\r\n <template #title>\r\n <JIconRender v-if=\"menuItem.icon && depth === 0\" :icon=\"menuItem.icon\" />\r\n <span class=\"j-sidebar__menu-item-title\">{{ menuItem.title || menuItem.name }}</span>\r\n </template>\r\n <!-- 递归渲染子菜单 -->\r\n <JSideMenuItem\r\n v-for=\"child in menuItem.children\"\r\n :key=\"child.path\"\r\n :menu-item=\"child\"\r\n :is-collapse=\"isCollapse\"\r\n :depth=\"depth + 1\"\r\n :active-index=\"activeIndex\"\r\n @menu-click=\"(item) => emit('menu-click', item)\"\r\n />\r\n </el-sub-menu>\r\n\r\n <!-- 无子菜单:渲染 el-menu-item -->\r\n <el-menu-item\r\n v-else\r\n :index=\"menuIndex\"\r\n :class=\"[\r\n `j-sidebar__depth-${depth}`,\r\n { 'j-sidebar-item--active': isActive },\r\n ]\"\r\n @click=\"handleClick\"\r\n >\r\n <JIconRender v-if=\"menuItem.icon && depth === 0\" :icon=\"menuItem.icon\" />\r\n <template #title>\r\n <span>{{ menuItem.title || menuItem.name }}</span>\r\n </template>\r\n </el-menu-item>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport type { SidebarMenuItem } from './types'\r\nimport { ElSubMenu, ElMenuItem } from 'element-plus'\r\nimport { JIconRender } from '../JIconRender'\r\n\r\ndefineOptions({\r\n name: 'JSideMenuItem'\r\n})\r\n\r\ninterface Props {\r\n menuItem: SidebarMenuItem\r\n isCollapse?: boolean\r\n depth?: number\r\n /** 已归一化的当前激活 index(与 menuIndex 同规则) */\r\n activeIndex?: string\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n depth: 0,\r\n activeIndex: '',\r\n})\r\n\r\nconst emit = defineEmits<{\r\n 'menu-click': [item: SidebarMenuItem]\r\n}>()\r\n\r\n/**\r\n * el-menu 的 index 必须与 vue-router 的 path(总是以 / 开头)一致,\r\n * 否则 default-active 对不上、加不上 is-active。\r\n */\r\nconst normalizeMenuIndex = (path?: string) => {\r\n if (!path) return ''\r\n const raw = String(path).trim()\r\n if (!raw) return ''\r\n if (/^https?:\\/\\//i.test(raw)) return raw\r\n let p = raw.split('?')[0]?.split('#')[0] || raw\r\n if (!p.startsWith('/')) p = `/${p}`\r\n if (p.length > 1 && p.endsWith('/')) p = p.slice(0, -1)\r\n return p\r\n}\r\n\r\nconst menuIndex = computed(() => normalizeMenuIndex(props.menuItem.path))\r\n\r\nconst isActive = computed(\r\n () => !!props.activeIndex && menuIndex.value === props.activeIndex,\r\n)\r\n\r\n/** 子树是否包含当前激活项(父级标题高亮) */\r\nconst isActiveParent = computed(() => {\r\n if (!props.activeIndex || !props.menuItem.children?.length) return false\r\n const walk = (items: SidebarMenuItem[]): boolean =>\r\n items.some((item) => {\r\n if (item.children?.length) return walk(item.children)\r\n return normalizeMenuIndex(item.path) === props.activeIndex\r\n })\r\n return walk(props.menuItem.children)\r\n})\r\n\r\nconst handleClick = () => {\r\n emit('menu-click', props.menuItem)\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.j-sidebar__menu-item-title {\r\n padding: 0 10px;\r\n}\r\n\r\n/* 二级菜单:灰色标题,作为分类标签(激活态不覆盖) */\r\n.j-sidebar__depth-1 > :deep(.el-sub-menu__title) {\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n\r\n.j-sidebar__depth-1.el-menu-item:not(.is-active):not(.j-sidebar-item--active) {\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n\r\n.j-sidebar__depth-1.el-menu-item.is-active,\r\n.j-sidebar__depth-1.el-menu-item.j-sidebar-item--active {\r\n color: var(--el-color-primary, #409eff);\r\n font-size: 13px;\r\n}\r\n\r\n/* 三级菜单:文字稍大 */\r\n.j-sidebar__depth-2.el-menu-item {\r\n font-size: 15px;\r\n}\r\n\r\n.j-sidebar__depth-2.el-menu-item.is-active,\r\n.j-sidebar__depth-2.el-menu-item.j-sidebar-item--active {\r\n color: var(--el-color-primary, #409eff);\r\n}\r\n</style>\r\n","<template>\r\n <div\r\n :class=\"['j-sidebar', innerCollapsed ? 'j-sidebar--collapsed' : 'j-sidebar--expanded']\"\r\n :style=\"{ width: innerCollapsed ? `${collapsedWidth}px` : `${expandedWidth}px` }\"\r\n >\r\n <!-- Logo 区域 -->\r\n <div class=\"j-sidebar__logo\">\r\n <slot name=\"logo\" :collapsed=\"innerCollapsed\">\r\n <h2 class=\"j-sidebar__title\">\r\n {{ innerCollapsed ? (collapsedTitle || title?.charAt(0) || '') : title }}\r\n </h2>\r\n </slot>\r\n </div>\r\n\r\n <!-- 菜单区域 -->\r\n <div class=\"j-sidebar__menu-wrapper\">\r\n <!--\r\n resolvedActiveMenu:把宿主传入的 activeMenu(多为 route.path)\r\n 解析成与 menuItem.path 一致的 index;同时下发 active-index 给菜单项,\r\n 用自有 class 高亮,不完全依赖 el-menu 的 is-active。\r\n\r\n 注意:不要把 activeMenu 写进 el-menu 的 key,否则每次切路由都会整棵菜单\r\n 销毁重建,父级会闪一下展开/收起。key 只随「菜单结构」变化。\r\n -->\r\n <el-menu\r\n :key=\"menusStructureKey\"\r\n :default-active=\"resolvedActiveMenu\"\r\n :default-openeds=\"defaultOpeneds\"\r\n class=\"j-sidebar__menu\"\r\n :router=\"router\"\r\n :collapse=\"innerCollapsed\"\r\n :collapse-transition=\"false\"\r\n >\r\n <JSideMenuItem\r\n v-for=\"route in menus\"\r\n :key=\"route.path\"\r\n :menu-item=\"route\"\r\n :is-collapse=\"innerCollapsed\"\r\n :active-index=\"resolvedActiveMenu\"\r\n @menu-click=\"(item) => emit('menu-click', item)\"\r\n />\r\n </el-menu>\r\n </div>\r\n\r\n <!-- 底部折叠按钮 -->\r\n <div class=\"j-sidebar__footer\">\r\n <slot name=\"footer\" :collapsed=\"innerCollapsed\" :toggle=\"toggleCollapse\">\r\n <button\r\n class=\"j-sidebar__collapse-btn\"\r\n @click=\"toggleCollapse\"\r\n >\r\n <JIconRender :icon=\"innerCollapsed ? 'mdi:chevron-right' : 'mdi:chevron-left'\" />\r\n </button>\r\n </slot>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { ElMenu } from 'element-plus'\r\nimport type { SidebarMenuItem } from './types'\r\nimport JSideMenuItem from './JSideMenuItem.vue'\r\nimport { JIconRender } from '../JIconRender'\r\n\r\ndefineOptions({\r\n name: 'JSidebar'\r\n})\r\n\r\ninterface Props {\r\n menus: SidebarMenuItem[]\r\n activeMenu?: string\r\n title?: string\r\n collapsedTitle?: string\r\n collapsed?: boolean\r\n collapsedWidth?: number\r\n expandedWidth?: number\r\n router?: boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n activeMenu: '',\r\n title: '',\r\n collapsedTitle: '',\r\n collapsed: false,\r\n collapsedWidth: 80,\r\n expandedWidth: 200,\r\n router: true,\r\n})\r\n\r\nconst emit = defineEmits<{\r\n 'update:collapsed': [value: boolean]\r\n 'menu-click': [item: SidebarMenuItem]\r\n}>()\r\n\r\nconst innerCollapsed = ref(props.collapsed)\r\n\r\nwatch(() => props.collapsed, (val) => {\r\n innerCollapsed.value = val\r\n})\r\n\r\nconst toggleCollapse = () => {\r\n innerCollapsed.value = !innerCollapsed.value\r\n emit('update:collapsed', innerCollapsed.value)\r\n}\r\n\r\n/** 统一 path 形态,便于 route.path 与菜单 path 比较 */\r\nconst normalizePath = (path?: string) => {\r\n if (!path) return ''\r\n let p = String(path).trim()\r\n if (!p) return ''\r\n if (/^https?:\\/\\//i.test(p)) return p\r\n p = p.split('?')[0]?.split('#')[0] || p\r\n if (!p.startsWith('/')) p = `/${p}`\r\n if (p.length > 1 && p.endsWith('/')) p = p.slice(0, -1)\r\n return p\r\n}\r\n\r\n/** 收集叶子菜单 path(有 children 的分组不作为激活目标) */\r\nconst collectLeafPaths = (items: SidebarMenuItem[], result: string[] = []) => {\r\n items.forEach((item) => {\r\n if (item.children && item.children.length > 0) {\r\n collectLeafPaths(item.children, result)\r\n } else if (item.path) {\r\n result.push(item.path)\r\n }\r\n })\r\n return result\r\n}\r\n\r\n/**\r\n * 把宿主 activeMenu(通常 route.path)解析成 el-menu 的 index:\r\n * 1. 精确匹配(normalize 后)\r\n * 2. 最长前缀匹配(详情页 /list/123 → 高亮 /list)\r\n */\r\nconst resolveActiveMenuIndex = (menus: SidebarMenuItem[], active?: string) => {\r\n const current = normalizePath(active)\r\n if (!current || !menus?.length) return current\r\n\r\n const leaves = collectLeafPaths(menus).map(normalizePath).filter(Boolean)\r\n if (!leaves.length) return current\r\n\r\n if (leaves.includes(current)) return current\r\n\r\n let best = ''\r\n leaves.forEach((np) => {\r\n if (!np || np === '/') return\r\n if (current === np || current.startsWith(`${np}/`)) {\r\n if (np.length > best.length) best = np\r\n }\r\n })\r\n return best || current\r\n}\r\n\r\nconst resolvedActiveMenu = computed(() =>\r\n resolveActiveMenuIndex(props.menus, props.activeMenu),\r\n)\r\n\r\n/**\r\n * 仅菜单数据本身变化时才重建 el-menu(例如切换顶部一级菜单导致 sideMenus 换批)。\r\n * 切路由只改 default-active / active-index,父级展开状态保持,避免闪缩。\r\n */\r\nconst menusStructureKey = computed(() =>\r\n collectLeafPaths(props.menus).map(normalizePath).join('|'),\r\n)\r\n\r\n/** 收集激活叶子的祖先 path,作为 default-openeds,保证首屏父级已展开 */\r\nconst findAncestorIndexes = (\r\n items: SidebarMenuItem[],\r\n active: string,\r\n trail: string[] = [],\r\n): string[] | null => {\r\n for (const item of items) {\r\n const idx = normalizePath(item.path)\r\n if (item.children && item.children.length > 0) {\r\n const nextTrail = idx ? [...trail, idx] : trail\r\n const found = findAncestorIndexes(item.children, active, nextTrail)\r\n if (found) return found\r\n } else if (normalizePath(item.path) === active) {\r\n return trail\r\n }\r\n }\r\n return null\r\n}\r\n\r\nconst defaultOpeneds = computed(() => {\r\n const active = resolvedActiveMenu.value\r\n if (!active || !props.menus?.length) return [] as string[]\r\n return findAncestorIndexes(props.menus, active) || []\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.j-sidebar {\r\n position: relative;\r\n background-color: $color-white;\r\n box-shadow: 2px 0 6px rgba(0, 21, 41, 0.08);\r\n overflow-x: hidden;\r\n transition: width 0.3s ease-in-out;\r\n flex-shrink: 0;\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n}\r\n\r\n.j-sidebar__logo {\r\n padding: 0 $spacing-md;\r\n display: flex;\r\n align-items: center;\r\n height: 50px;\r\n flex-shrink: 0;\r\n}\r\n\r\n.j-sidebar__title {\r\n margin: 0;\r\n font-size: $font-size-lg;\r\n font-weight: bold;\r\n color: $color-primary;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n}\r\n\r\n.j-sidebar__menu-wrapper {\r\n flex: 1;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n}\r\n\r\n.j-sidebar__menu {\r\n border: none;\r\n width: 100%;\r\n background: transparent;\r\n\r\n // ---- 当前激活菜单(同时兼容 is-active 与自有 j-sidebar-item--active)----\r\n :deep(.el-menu-item) {\r\n position: relative;\r\n transition: background-color 0.15s ease, color 0.15s ease;\r\n\r\n &:hover {\r\n background-color: rgba($color-primary, 0.06);\r\n color: $color-primary;\r\n }\r\n\r\n &.is-active,\r\n &.j-sidebar-item--active {\r\n color: $color-primary !important;\r\n background-color: rgba($color-primary, 0.12) !important;\r\n font-weight: 600;\r\n\r\n &::before {\r\n content: '';\r\n position: absolute;\r\n left: 0;\r\n top: 6px;\r\n bottom: 6px;\r\n width: 3px;\r\n border-radius: 0 3px 3px 0;\r\n background-color: $color-primary;\r\n }\r\n\r\n .iconify,\r\n .el-icon {\r\n color: $color-primary;\r\n }\r\n }\r\n }\r\n\r\n :deep(.el-sub-menu.is-active > .el-sub-menu__title),\r\n :deep(.el-sub-menu.j-sidebar-item--active-parent > .el-sub-menu__title) {\r\n color: $color-primary !important;\r\n }\r\n\r\n :deep(.el-sub-menu__title:hover) {\r\n color: $color-primary;\r\n background-color: rgba($color-primary, 0.06);\r\n }\r\n}\r\n\r\n.j-sidebar--collapsed {\r\n :deep(.el-menu-item.is-active),\r\n :deep(.el-menu-item.j-sidebar-item--active) {\r\n background-color: rgba($color-primary, 0.12) !important;\r\n color: $color-primary !important;\r\n }\r\n}\r\n\r\n.j-sidebar__footer {\r\n flex-shrink: 0;\r\n padding: $spacing-sm;\r\n display: flex;\r\n}\r\n\r\n// 折叠状态:覆盖 el-menu 样式,图标+文字上下排列\r\n.j-sidebar--collapsed {\r\n :deep(.el-menu--collapse) {\r\n width: 100%;\r\n\r\n .el-menu-item,\r\n .el-sub-menu__title {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n height: auto;\r\n line-height: normal;\r\n padding: $spacing-sm 0 !important;\r\n\r\n .el-icon,\r\n .iconify {\r\n margin: 0;\r\n }\r\n\r\n span {\r\n display: block !important;\r\n visibility: visible !important;\r\n overflow: visible !important;\r\n width: auto !important;\r\n height: auto !important;\r\n font-size: $font-size-xs;\r\n margin-top: $spacing-xs;\r\n }\r\n }\r\n\r\n .el-sub-menu__icon-arrow {\r\n display: none;\r\n }\r\n }\r\n}\r\n\r\n.j-sidebar__collapse-btn {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: $spacing-sm;\r\n border: none;\r\n border-radius: $border-radius-base;\r\n background-color: transparent;\r\n color: $color-text-secondary;\r\n cursor: pointer;\r\n transition: $transition-fast;\r\n\r\n &:hover {\r\n background-color: $color-bg-base;\r\n color: $color-primary;\r\n }\r\n}\r\n</style>\r\n","<template>\n <div class=\"j-admin-layout\" :style=\"layoutStyle\">\n <JSidebar\n v-if=\"sideMenus.length > 0\"\n v-model:collapsed=\"innerCollapsed\"\n :menus=\"sideMenus\"\n :active-menu=\"activeMenu\"\n :title=\"title\"\n :collapsed-title=\"collapsedTitle\"\n :collapsed-width=\"sidebarCollapsedWidth\"\n :expanded-width=\"sidebarExpandedWidth\"\n :router=\"false\"\n @menu-click=\"handleSideMenuClick\"\n >\n <template v-if=\"$slots.sidebarFooter\" #footer=\"{ collapsed: sidebarCollapsed, toggle }\">\n <slot name=\"sidebarFooter\" :collapsed=\"sidebarCollapsed\" :toggle=\"toggle\" />\n </template>\n </JSidebar>\n\n <div class=\"j-admin-layout__right-panel\">\n <div class=\"j-admin-layout__header\">\n <div class=\"j-admin-layout__header-left\">\n <div v-if=\"sideMenus.length === 0\" class=\"j-admin-layout__logo\">\n <slot name=\"logo\">\n <h2>{{ logoTitle || title }}</h2>\n </slot>\n </div>\n\n <el-menu\n :key=\"topMenuKey\"\n mode=\"horizontal\"\n :default-active=\"activeTopMenu\"\n class=\"j-admin-layout__top-menu\"\n @select=\"handleTopMenuSelect\"\n >\n <el-menu-item\n v-for=\"menu in topMenus\"\n :key=\"menu.path\"\n :index=\"menu.path\"\n >\n <JIconRender v-if=\"menu.icon\" :icon=\"menu.icon\" class=\"j-admin-layout__top-menu-icon\" />\n <span>{{ menu.title || menu.name }}</span>\n </el-menu-item>\n </el-menu>\n </div>\n\n <div class=\"j-admin-layout__header-right\">\n <slot name=\"headerRight\" :username=\"username\">\n <el-dropdown v-if=\"showProfile || showLogout\">\n <span class=\"j-admin-layout__user\">\n {{ username }}\n <el-icon>\n <ArrowDown />\n </el-icon>\n </span>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item v-if=\"showProfile\" @click=\"emit('profile')\">\n {{ profileText }}\n </el-dropdown-item>\n <el-dropdown-item v-if=\"showLogout\" @click=\"emit('logout')\">\n {{ logoutText }}\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </slot>\n </div>\n </div>\n\n <div class=\"j-admin-layout__content-container\">\n <slot name=\"tabs\" />\n <div\n :class=\"[\n 'j-admin-layout__content',\n { 'j-admin-layout__content--scrollbar-hidden': hideContentScrollbar }\n ]\"\n >\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, ref } from 'vue'\nimport { ElMenu, ElMenuItem, ElDropdown, ElDropdownMenu, ElDropdownItem, ElIcon } from 'element-plus'\nimport { ArrowDown } from '@element-plus/icons-vue'\nimport { JSidebar, type SidebarMenuItem } from '../JSidebar'\nimport { JIconRender } from '../JIconRender'\nimport type { AdminLayoutMenuItem } from './types'\n\ndefineOptions({\n name: 'JAdminLayout'\n})\n\ninterface Props {\n topMenus: AdminLayoutMenuItem[]\n sideMenus: AdminLayoutMenuItem[]\n activeTopMenu?: string\n activeMenu?: string\n title?: string\n logoTitle?: string\n collapsedTitle?: string\n collapsed?: boolean\n username?: string\n profileText?: string\n logoutText?: string\n sidebarCollapsedWidth?: number\n sidebarExpandedWidth?: number\n headerHeight?: string\n contentPadding?: string\n contentBackground?: string\n headerBackground?: string\n showProfile?: boolean\n showLogout?: boolean\n hideContentScrollbar?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n activeTopMenu: '',\n activeMenu: '',\n title: '',\n logoTitle: '',\n collapsedTitle: '',\n collapsed: false,\n username: '',\n profileText: '个人资料',\n logoutText: '退出登录',\n sidebarCollapsedWidth: 80,\n sidebarExpandedWidth: 200,\n headerHeight: '50px',\n contentPadding: '10px',\n contentBackground: '#f0f2f5',\n headerBackground: '#ffffff',\n showProfile: true,\n showLogout: true,\n hideContentScrollbar: false,\n})\n\nconst emit = defineEmits<{\n 'update:collapsed': [value: boolean]\n 'top-menu-select': [path: string]\n 'side-menu-click': [item: SidebarMenuItem]\n profile: []\n logout: []\n}>()\n\nconst innerCollapsed = computed({\n get: () => props.collapsed,\n set: value => emit('update:collapsed', value),\n})\n\nconst layoutStyle = computed(() => ({\n '--j-admin-layout-header-height': props.headerHeight,\n '--j-admin-layout-content-padding': props.contentPadding,\n '--j-admin-layout-content-bg': props.contentBackground,\n '--j-admin-layout-header-bg': props.headerBackground,\n}))\n\n/**\n * el-menu 点击后会先改内部高亮;若父组件未更新 activeTopMenu(如跨系统 window.open),\n * 递增 syncKey 强制重挂载,回滚到 props 指定的选中态。\n */\nconst topMenuSyncKey = ref(0)\nconst topMenuKey = computed(\n () => `${props.activeTopMenu}__${topMenuSyncKey.value}`,\n)\n\nconst handleTopMenuSelect = (path: string) => {\n emit('top-menu-select', path)\n nextTick(() => {\n if (props.activeTopMenu !== path) {\n topMenuSyncKey.value += 1\n }\n })\n}\n\nconst handleSideMenuClick = (item: SidebarMenuItem) => {\n emit('side-menu-click', item)\n}\n</script>\n\n<style scoped lang=\"scss\">\n.j-admin-layout {\n width: 100vw;\n height: 100vh;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n}\n\n.j-admin-layout__right-panel {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background-color: var(--j-admin-layout-content-bg);\n}\n\n.j-admin-layout__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n background-color: var(--j-admin-layout-header-bg);\n box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);\n height: var(--j-admin-layout-header-height);\n flex-shrink: 0;\n z-index: 100;\n}\n\n.j-admin-layout__header-left {\n display: flex;\n align-items: center;\n flex: 1;\n height: 100%;\n min-width: 0;\n}\n\n.j-admin-layout__logo {\n padding: 0 $spacing-md;\n display: flex;\n align-items: center;\n height: var(--j-admin-layout-header-height);\n flex-shrink: 0;\n}\n\n.j-admin-layout__logo h2 {\n margin: 0;\n font-size: $font-size-lg;\n font-weight: bold;\n color: $color-primary;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.j-admin-layout__top-menu {\n flex: 1;\n height: var(--j-admin-layout-header-height);\n border-bottom: none;\n min-width: 0;\n}\n\n.j-admin-layout__top-menu-icon {\n margin-right: $spacing-xs;\n}\n\n.j-admin-layout__header-right {\n display: flex;\n align-items: center;\n gap: $spacing-md;\n padding-right: $spacing-md;\n flex-shrink: 0;\n}\n\n.j-admin-layout__user {\n cursor: pointer;\n display: flex;\n align-items: center;\n color: $color-text-regular;\n}\n\n.j-admin-layout__user:hover {\n color: $color-primary;\n}\n\n.j-admin-layout__content-container {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n background-color: var(--j-admin-layout-content-bg);\n}\n\n.j-admin-layout__content {\n padding: var(--j-admin-layout-content-padding);\n flex: 1;\n overflow: auto;\n}\n\n.j-admin-layout__content--scrollbar-hidden {\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n}\n</style>\n","import type { App, InjectionKey } from 'vue'\r\nimport { inject } from 'vue'\r\nimport type { JProductRequestFn } from './types'\r\n\r\n/** provide/inject 用的 key,业务方一般无需直接使用 */\r\nexport const J_PRODUCT_REQUEST_KEY: InjectionKey<JProductRequestFn> = Symbol('J_PRODUCT_REQUEST')\r\n\r\n/**\r\n * 在应用入口注入 request(推荐,全项目只需一次)。\r\n *\r\n * @example\r\n * ```ts\r\n * import { createApp } from 'vue'\r\n * import request from '@/api'\r\n * import { provideProductRequest } from 'jgy-public-component'\r\n *\r\n * const app = createApp(App)\r\n * provideProductRequest(app, (config) => request(config))\r\n * ```\r\n */\r\nexport function provideProductRequest(app: App, request: JProductRequestFn) {\r\n app.provide(J_PRODUCT_REQUEST_KEY, request)\r\n}\r\n\r\n/**\r\n * 在 setup 中读取全局注入的 request(必须在 setup 同步阶段调用 inject)。\r\n */\r\nexport function useInjectedProductRequest(): JProductRequestFn | null {\r\n return inject(J_PRODUCT_REQUEST_KEY, null)\r\n}\r\n\r\n/**\r\n * 解析最终 request:prop 优先,否则用全局 provide。\r\n * 可在 setup 外调用,但需把 setup 阶段拿到的 injected 传进来。\r\n */\r\nexport function resolveProductRequest(\r\n propRequest?: JProductRequestFn | null,\r\n injectedRequest?: JProductRequestFn | null,\r\n): JProductRequestFn {\r\n const request = propRequest ?? injectedRequest ?? null\r\n if (!request) {\r\n throw new Error(\r\n '[JProductDetailDialog] 缺少 request:请在 main.ts 调用 provideProductRequest(app, request),或给组件传入 :request=\"request\"',\r\n )\r\n }\r\n return request\r\n}\r\n","<template>\n <el-dialog\n :model-value=\"visible\"\n title=\"查看产品\"\n width=\"1200px\"\n top=\"4vh\"\n append-to-body\n destroy-on-close\n :close-on-click-modal=\"false\"\n @update:model-value=\"(v: boolean) => emit('update:visible', v)\"\n >\n <div v-loading=\"loading\" class=\"pdd-body\">\n <template v-if=\"detail\">\n <!-- ===== 基本信息 ===== -->\n <div class=\"pdd-title\">基本信息</div>\n <el-descriptions :column=\"3\" border size=\"small\">\n <el-descriptions-item :label=\"isSpu ? '中文款式' : '中文品名'\">{{ fmt(nameCn) }}</el-descriptions-item>\n <el-descriptions-item :label=\"isSpu ? '英文款式' : '英文品名'\">{{ fmt(nameEn) }}</el-descriptions-item>\n <el-descriptions-item :label=\"isSpu ? 'SPU' : 'SKU'\">{{ fmt(mainCode) }}</el-descriptions-item>\n <el-descriptions-item label=\"产品类型\">{{ productTypeLabel }}</el-descriptions-item>\n <el-descriptions-item label=\"采购公司\">{{ fmt(peNames) }}</el-descriptions-item>\n <el-descriptions-item label=\"状态\">{{ fmt(statusName) }}</el-descriptions-item>\n <el-descriptions-item label=\"品类\">{{ fmt(basic.category_path_name || basic.category_name) }}</el-descriptions-item>\n <el-descriptions-item label=\"品牌\">{{ fmt(brandName) }}</el-descriptions-item>\n <el-descriptions-item label=\"单位\">{{ fmt(unitName) }}</el-descriptions-item>\n <el-descriptions-item label=\"产品标签\">\n <template v-if=\"tagList.length\">\n <el-tag\n v-for=\"t in tagList\"\n :key=\"t.code\"\n size=\"small\"\n class=\"pdd-tag\"\n :style=\"t.color ? { backgroundColor: t.color, borderColor: t.color, color: '#fff' } : {}\"\n >{{ t.name }}</el-tag>\n </template>\n <template v-else>—</template>\n </el-descriptions-item>\n <el-descriptions-item label=\"材质\">{{ fmt(basic.material) }}</el-descriptions-item>\n <el-descriptions-item label=\"型号\">{{ fmt(basic.product_model) }}</el-descriptions-item>\n <el-descriptions-item label=\"开发员\">{{ fmt(basic.develop_leader_name || basic.develop_user) }}</el-descriptions-item>\n <el-descriptions-item label=\"采购员\">{{ fmt(basic.purchase_leader_name || basic.purchase_user) }}</el-descriptions-item>\n <el-descriptions-item label=\"产品运营\">{{ fmt(basic.sales_leader_name || basic.sales_user) }}</el-descriptions-item>\n <el-descriptions-item v-if=\"!isSpu\" label=\"关联SPU\">{{ fmt(basic.spu_code) }}</el-descriptions-item>\n <el-descriptions-item v-if=\"!isSpu\" label=\"产品属性\" :span=\"2\">{{ fmt(skuAttrText) }}</el-descriptions-item>\n <el-descriptions-item label=\"附件\" :span=\"3\">\n <template v-if=\"basicAttachments.length\">\n <a\n v-for=\"(f, i) in basicAttachments\"\n :key=\"i\"\n :href=\"f.url\"\n target=\"_blank\"\n class=\"pdd-file\"\n >{{ f.name }}</a>\n </template>\n <template v-else>—</template>\n </el-descriptions-item>\n <el-descriptions-item label=\"详细描述\" :span=\"3\">\n <div v-if=\"hasDesc\" class=\"pdd-rich\" v-html=\"basic.product_desc\"></div>\n <template v-else>—</template>\n </el-descriptions-item>\n </el-descriptions>\n\n <!-- ===== 产品组成(组合产品 20) ===== -->\n <template v-if=\"productType === '20'\">\n <div class=\"pdd-title\">产品组成</div>\n <el-descriptions :column=\"3\" border size=\"small\">\n <el-descriptions-item label=\"单位加工费\">\n {{ bindSku.unit_process_cost != null && bindSku.unit_process_cost !== '' ? `${bindSku.unit_process_cost} ${bindSku.unit_process_currency_code || ''}` : '—' }}\n </el-descriptions-item>\n <el-descriptions-item label=\"加工备注\" :span=\"2\">{{ fmt(bindSku.unit_process_remark) }}</el-descriptions-item>\n </el-descriptions>\n <el-table :data=\"bindSkuList\" border size=\"small\" class=\"pdd-table\">\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\n <template #default=\"{ row }\">\n <el-image\n v-if=\"row.image || row.product_image\"\n :src=\"row.image || row.product_image\"\n :preview-src-list=\"[row.image || row.product_image]\"\n preview-teleported\n fit=\"cover\"\n class=\"pdd-thumb\"\n />\n <span v-else>—</span>\n </template>\n </el-table-column>\n <el-table-column label=\"品名\" prop=\"product_name\" min-width=\"140\" show-overflow-tooltip />\n <el-table-column label=\"SKU\" prop=\"sku_code\" min-width=\"120\" show-overflow-tooltip />\n <el-table-column label=\"单位\" min-width=\"70\">\n <template #default=\"{ row }\">{{ fmt(row.unit || row.unit_name) }}</template>\n </el-table-column>\n <el-table-column label=\"数量\" min-width=\"70\">\n <template #default=\"{ row }\">{{ fmt(row.quantity ?? row.sku_quantity) }}</template>\n </el-table-column>\n <el-table-column label=\"品类\" prop=\"category_path_name\" min-width=\"120\" show-overflow-tooltip />\n <el-table-column label=\"型号\" min-width=\"90\">\n <template #default=\"{ row }\">{{ fmt(row.model_no || row.product_model) }}</template>\n </el-table-column>\n <el-table-column label=\"材质\" prop=\"material\" min-width=\"90\" show-overflow-tooltip />\n <el-table-column label=\"单品尺寸\" min-width=\"140\">\n <template #default=\"{ row }\">{{ dimText(row.spec_info?.length, row.spec_info?.width, row.spec_info?.height, row.spec_info?.height_unit || 'cm') }}</template>\n </el-table-column>\n <el-table-column label=\"净重\" min-width=\"80\">\n <template #default=\"{ row }\">{{ weightText(row.spec_info?.net_weight ?? row.net_weight, row.spec_info?.product_unit) }}</template>\n </el-table-column>\n <el-table-column label=\"毛重\" min-width=\"80\">\n <template #default=\"{ row }\">{{ weightText(row.spec_info?.gross_weight ?? row.gross_weight, row.spec_info?.product_unit) }}</template>\n </el-table-column>\n </el-table>\n </template>\n\n <!-- ===== 款式属性(多属性产品 30) ===== -->\n <template v-if=\"isSpu\">\n <div class=\"pdd-title\">款式属性</div>\n <el-table :data=\"styleAttrs\" border size=\"small\" class=\"pdd-table\">\n <el-table-column label=\"属性\" prop=\"attr_name\" width=\"160\" />\n <el-table-column label=\"属性值\">\n <template #default=\"{ row }\">\n <el-tag v-for=\"c in row.childs || []\" :key=\"c.attr_value_code\" size=\"small\" class=\"pdd-tag\">\n {{ c.attr_value_name }}\n </el-tag>\n </template>\n </el-table-column>\n </el-table>\n <div class=\"pdd-subtitle\">关联产品信息</div>\n <el-table :data=\"skuVariants\" border size=\"small\" class=\"pdd-table\">\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\n <template #default=\"{ row }\">\n <el-image\n v-if=\"row.main_image\"\n :src=\"row.main_image\"\n :preview-src-list=\"[row.main_image]\"\n preview-teleported\n fit=\"cover\"\n class=\"pdd-thumb\"\n />\n <span v-else>—</span>\n </template>\n </el-table-column>\n <el-table-column label=\"SKU\" prop=\"sku_code\" min-width=\"130\" show-overflow-tooltip />\n <el-table-column label=\"中文品名\" prop=\"product_name\" min-width=\"150\" show-overflow-tooltip />\n <el-table-column label=\"英文品名\" min-width=\"150\" show-overflow-tooltip>\n <template #default=\"{ row }\">{{ fmt(row.product_name_en || row.product_en_name) }}</template>\n </el-table-column>\n <el-table-column\n v-for=\"attr in styleAttrs\"\n :key=\"attr.attr_code\"\n :label=\"attr.attr_name\"\n min-width=\"100\"\n >\n <template #default=\"{ row }\">{{ variantAttrText(row, attr) }}</template>\n </el-table-column>\n </el-table>\n </template>\n\n <!-- ===== 规格信息 ===== -->\n <div class=\"pdd-title\">规格信息</div>\n <el-descriptions :column=\"3\" border size=\"small\">\n <el-descriptions-item label=\"单品毛重\">{{ weightText(spec.gross_weight, spec.gross_weight_unit) }}</el-descriptions-item>\n <el-descriptions-item label=\"单品净重\">{{ weightText(spec.net_weight, spec.net_weight_unit) }}</el-descriptions-item>\n <el-descriptions-item label=\"包装重\">{{ weightText(spec.tare_weight, spec.tare_weight_unit) }}</el-descriptions-item>\n <el-descriptions-item label=\"单品尺寸\">{{ dimText(spec.length, spec.width, spec.height) }}</el-descriptions-item>\n <el-descriptions-item label=\"包装尺寸\" :span=\"2\">{{ dimText(spec.tare_length, spec.tare_width, spec.tare_height) }}</el-descriptions-item>\n </el-descriptions>\n <template v-if=\"specBoxList.length\">\n <div class=\"pdd-subtitle\">装箱规格</div>\n <el-table :data=\"specBoxList\" border size=\"small\" class=\"pdd-table\">\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\n <el-table-column label=\"箱规名称\" prop=\"box_name\" min-width=\"130\" show-overflow-tooltip />\n <el-table-column label=\"单箱数量\" min-width=\"90\">\n <template #default=\"{ row }\">{{ row.box_quantity != null ? `${row.box_quantity} pcs` : '—' }}</template>\n </el-table-column>\n <el-table-column label=\"单箱重量\" min-width=\"100\">\n <template #default=\"{ row }\">{{ weightText(row.one_box_weight, row.one_box_unit) }}</template>\n </el-table-column>\n <el-table-column label=\"箱子重量\" min-width=\"100\">\n <template #default=\"{ row }\">{{ weightText(row.box_weight, row.box_unit) }}</template>\n </el-table-column>\n <el-table-column label=\"外箱尺寸\" min-width=\"150\">\n <template #default=\"{ row }\">{{ dimText(row.box_length, row.box_width, row.box_height) }}</template>\n </el-table-column>\n <el-table-column label=\"首选\" width=\"70\" align=\"center\">\n <template #default=\"{ row }\">\n <el-tag v-if=\"Number(row.is_preferred) === 1\" size=\"small\" type=\"success\">首选</el-tag>\n <span v-else>—</span>\n </template>\n </el-table-column>\n </el-table>\n </template>\n\n <!-- ===== 采购信息(单品/组合产品) ===== -->\n <template v-if=\"!isSpu\">\n <div class=\"pdd-title\">采购信息</div>\n <el-descriptions :column=\"3\" border size=\"small\">\n <el-descriptions-item label=\"采购成本\">{{ fmt(purchase.purchase_cost) }}</el-descriptions-item>\n <el-descriptions-item label=\"采购交期\">{{ purchase.delivery_day != null && purchase.delivery_day !== '' ? `${purchase.delivery_day} 天` : '—' }}</el-descriptions-item>\n <el-descriptions-item label=\"采购税率\">{{ purchase.tax_rate != null && purchase.tax_rate !== '' ? `${purchase.tax_rate} %` : '—' }}</el-descriptions-item>\n <el-descriptions-item label=\"采购备注\" :span=\"3\">{{ fmt(purchase.purchase_remark) }}</el-descriptions-item>\n </el-descriptions>\n <template v-if=\"supplierList.length\">\n <div class=\"pdd-subtitle\">报价信息</div>\n <div v-for=\"(sup, si) in supplierList\" :key=\"si\" class=\"pdd-supplier\">\n <div class=\"pdd-supplier-head\">\n <span class=\"pdd-supplier-name\">{{ sup.supplier_name || sup.supplier_code || '—' }}</span>\n <el-tag v-if=\"Number(sup.is_preferred) === 1\" size=\"small\" type=\"success\">首选</el-tag>\n <span class=\"pdd-supplier-meta\">预计交期:{{ sup.delivery_day != null && sup.delivery_day !== '' ? `${sup.delivery_day} 天` : '—' }}</span>\n <span class=\"pdd-supplier-meta\">报价备注:{{ fmt(sup.purchase_remark ?? sup.remark) }}</span>\n </div>\n <el-table :data=\"supplierQuoteRows(sup)\" border size=\"small\">\n <el-table-column label=\"币种\" prop=\"currency\" width=\"80\" />\n <el-table-column label=\"含税\" width=\"70\" align=\"center\">\n <template #default=\"{ row }\">{{ Number(row.is_tax) === 1 ? '是' : '否' }}</template>\n </el-table-column>\n <el-table-column label=\"税率\" width=\"80\">\n <template #default=\"{ row }\">{{ row.tax_rate != null && row.tax_rate !== '' ? `${row.tax_rate} %` : '—' }}</template>\n </el-table-column>\n <el-table-column label=\"采购数量 ≥\" min-width=\"100\">\n <template #default=\"{ row }\">{{ fmt(row.purchase_quantity) }}</template>\n </el-table-column>\n <el-table-column label=\"单价\" min-width=\"100\">\n <template #default=\"{ row }\">{{ fmt(row.purchase_price) }}</template>\n </el-table-column>\n <el-table-column label=\"含税单价\" min-width=\"100\">\n <template #default=\"{ row }\">{{ fmt(row.purchase_price_tax) }}</template>\n </el-table-column>\n </el-table>\n </div>\n </template>\n </template>\n\n <!-- ===== 产品图片(单品/组合产品) ===== -->\n <template v-if=\"!isSpu\">\n <div class=\"pdd-title\">产品图片</div>\n <el-descriptions :column=\"1\" border size=\"small\">\n <el-descriptions-item label=\"主图\">\n <el-image\n v-if=\"mainImage\"\n :src=\"mainImage\"\n :preview-src-list=\"[mainImage]\"\n preview-teleported\n fit=\"cover\"\n class=\"pdd-img\"\n />\n <span v-else>—</span>\n </el-descriptions-item>\n <el-descriptions-item label=\"尺寸图\">\n <template v-if=\"sizeImages.length\">\n <el-image\n v-for=\"(img, i) in sizeImages\"\n :key=\"i\"\n :src=\"img\"\n :preview-src-list=\"sizeImages\"\n :initial-index=\"i\"\n preview-teleported\n fit=\"cover\"\n class=\"pdd-img\"\n />\n </template>\n <span v-else>—</span>\n </el-descriptions-item>\n <el-descriptions-item label=\"卖点图\">\n <template v-if=\"sellingPointImages.length\">\n <el-image\n v-for=\"(img, i) in sellingPointImages\"\n :key=\"i\"\n :src=\"img\"\n :preview-src-list=\"sellingPointImages\"\n :initial-index=\"i\"\n preview-teleported\n fit=\"cover\"\n class=\"pdd-img\"\n />\n </template>\n <span v-else>—</span>\n </el-descriptions-item>\n </el-descriptions>\n </template>\n\n <!-- ===== 申报信息 ===== -->\n <div class=\"pdd-title\">申报信息</div>\n <el-descriptions :column=\"3\" border size=\"small\">\n <el-descriptions-item label=\"中文申报名\">{{ fmt(declaration.declaration_name) }}</el-descriptions-item>\n <el-descriptions-item label=\"英文申报名\">{{ fmt(declaration.declaration_name_en) }}</el-descriptions-item>\n <el-descriptions-item label=\"中文材质\">{{ fmt(declaration.material) }}</el-descriptions-item>\n <el-descriptions-item label=\"英文材质\">{{ fmt(declaration.material_en) }}</el-descriptions-item>\n <el-descriptions-item label=\"中文用途\">{{ fmt(declaration.use) }}</el-descriptions-item>\n <el-descriptions-item label=\"英文用途\">{{ fmt(declaration.use_en) }}</el-descriptions-item>\n <el-descriptions-item label=\"中文功能\">{{ fmt(declaration.usage) }}</el-descriptions-item>\n <el-descriptions-item label=\"英文功能\">{{ fmt(declaration.usage_en) }}</el-descriptions-item>\n <el-descriptions-item label=\"申报价值\">\n {{ declaration.declaration_value != null && declaration.declaration_value !== '' ? `${declaration.declaration_value} ${declaration.declaration_currency_code || ''}` : '—' }}\n </el-descriptions-item>\n <el-descriptions-item label=\"海关编码\">{{ fmt(declaration.hs_code) }}</el-descriptions-item>\n <el-descriptions-item label=\"报关型号\">{{ fmt(declaration.declaration_model) }}</el-descriptions-item>\n <el-descriptions-item label=\"原产地\">{{ fmt(declaration.country_of_origin) }}</el-descriptions-item>\n <el-descriptions-item label=\"境内货源地\">{{ fmt(declaration.domestic_source_location) }}</el-descriptions-item>\n <el-descriptions-item label=\"申报单位\" :span=\"2\">{{ fmt(declarationUnitName) }}</el-descriptions-item>\n </el-descriptions>\n\n <!-- ===== 质检项 ===== -->\n <div class=\"pdd-title\">质检项</div>\n <el-descriptions :column=\"3\" border size=\"small\">\n <el-descriptions-item label=\"质检方式\">{{ qcMethodLabel }}</el-descriptions-item>\n <el-descriptions-item label=\"模板\" :span=\"2\">{{ fmt(qc.template_name || qc.template_id || qc.qc_temp_id) }}</el-descriptions-item>\n <el-descriptions-item label=\"图片\" :span=\"3\">\n <template v-if=\"qcImages.length\">\n <el-image\n v-for=\"(img, i) in qcImages\"\n :key=\"i\"\n :src=\"img\"\n :preview-src-list=\"qcImages\"\n :initial-index=\"i\"\n preview-teleported\n fit=\"cover\"\n class=\"pdd-img\"\n />\n </template>\n <span v-else>—</span>\n </el-descriptions-item>\n <el-descriptions-item label=\"附件\" :span=\"3\">\n <template v-if=\"qcAttachments.length\">\n <a\n v-for=\"(f, i) in qcAttachments\"\n :key=\"i\"\n :href=\"f.url\"\n target=\"_blank\"\n class=\"pdd-file\"\n >{{ f.name }}</a>\n </template>\n <span v-else>—</span>\n </el-descriptions-item>\n </el-descriptions>\n <template v-if=\"qcCustomList.length\">\n <div class=\"pdd-subtitle\">自定义质检项</div>\n <el-table :data=\"qcCustomList\" border size=\"small\" class=\"pdd-table\">\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\n <el-table-column label=\"质检项\" prop=\"qc_item\" min-width=\"150\" show-overflow-tooltip />\n <el-table-column label=\"质检内容\" prop=\"qc_content\" min-width=\"250\" show-overflow-tooltip />\n </el-table>\n </template>\n\n <!-- ===== 自定义属性 ===== -->\n <template v-if=\"customAttrList.length\">\n <div class=\"pdd-title\">自定义属性</div>\n <el-table :data=\"customAttrList\" border size=\"small\" class=\"pdd-table\">\n <el-table-column label=\"属性名称\" prop=\"attr_name\" width=\"200\" show-overflow-tooltip />\n <el-table-column label=\"属性值\">\n <template #default=\"{ row }\">{{ customAttrValueText(row) }}</template>\n </el-table-column>\n </el-table>\n </template>\n </template>\n <el-empty v-else-if=\"!loading\" description=\"暂无数据\" />\n </div>\n <template #footer>\n <el-button @click=\"emit('update:visible', false)\">关闭</el-button>\n </template>\n </el-dialog>\n</template>\n\n<script lang=\"ts\">\n/**\n * JProductDetailDialog —— 产品详情弹窗(只读)\n *\n * 与项目解耦:request 由宿主注入(`@/api` 默认导出),\n * token / operator / baseURL 均由宿主拦截器处理。接口路径内置。\n *\n * 前置条件(宿主项目):\n * 1. 已安装 element-plus(peerDependency)\n * 2. vite proxy 已配置 `/bis-app` 转发到后端\n * 3. 后端提供同一套 bis 产品详情接口\n *\n * 用法(推荐 main.ts 全局注入后,页面无需再传 request):\n * provideProductRequest(app, (c) => request(c))\n * <JProductDetailDialog v-model:visible=\"visible\" :code=\"row.sku_code\" />\n * <JProductDetailDialog v-model:visible=\"visible\" type=\"spu\" :code=\"row.spu_code\" />\n * 或单页传入:\n * <JProductDetailDialog ... :request=\"request\" />\n */\nimport { ref } from 'vue'\nimport type {\n JProductRequestFn,\n JProductRequestConfig,\n JProductDetailDialogProps,\n} from './types'\nimport { resolveProductRequest, useInjectedProductRequest } from './request'\n\n// ---- 字典(模块级缓存:整个应用只请求一次,多个实例共享)----\nconst brandDict = ref<any[]>([])\nconst unitDict = ref<any[]>([])\nconst saleDict = ref<any[]>([])\nconst companyDict = ref<any[]>([])\nconst tagDict = ref<any[]>([])\nconst customAttrDict = ref<any[]>([])\n\nlet dictsLoaded = false\nlet dictsPromise: Promise<void> | null = null\n\nconst loadDicts = (request: JProductRequestFn): Promise<void> => {\n const post = (url: string, data: any): Promise<any> =>\n request({ url, method: 'post', data } as JProductRequestConfig)\n if (dictsLoaded) return Promise.resolve()\n if (dictsPromise) return dictsPromise\n dictsPromise = Promise.all([\n post('/bis-app/comm/productAttrValue/getAll', { pageSize: 999 }).then((res) => {\n if (res.code === 1) {\n brandDict.value = res.data?.brand || []\n unitDict.value = res.data?.unit || []\n saleDict.value = res.data?.sale || []\n }\n }).catch(() => { /* 展示走 _name 字段兜底,字典失败不阻断 */ }),\n post('/bis-app/comm/company/list', { pageSize: 999, subject_type: 'purchase' }).then((res) => {\n if (res.code === 1) companyDict.value = res.data?.list || res.data || []\n }).catch(() => { /* ignore */ }),\n post('/bis-app/comm/tagCategoryValue/list', { tag_code: 'PRODUCT_TAG', pageIndex: 1, pageSize: 999 }).then((res) => {\n if (res.code === 1) tagDict.value = res.data?.list || res.data || []\n }).catch(() => { /* ignore */ }),\n post('/bis-app/comm/customAttr/list', { pageIndex: 1, pageSize: 999 }).then((res) => {\n if (res.code === 1) customAttrDict.value = res.data?.list || res.data || []\n }).catch(() => { /* ignore */ }),\n ]).then(() => { dictsLoaded = true }).finally(() => { dictsPromise = null })\n return dictsPromise\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, watch } from 'vue'\nimport {\n ElDialog,\n ElDescriptions,\n ElDescriptionsItem,\n ElTag,\n ElTable,\n ElTableColumn,\n ElImage,\n ElEmpty,\n ElButton,\n ElMessage,\n vLoading,\n} from 'element-plus'\n// 类型已在上方 <script> 中统一 import(双 script 同作用域,避免 Duplicate identifier)\n\ndefineOptions({\n name: 'JProductDetailDialog',\n directives: { loading: vLoading },\n})\n\nconst props = withDefaults(defineProps<JProductDetailDialogProps>(), {\n visible: false,\n code: '',\n type: 'sku',\n id: undefined,\n request: undefined,\n})\n\nconst emit = defineEmits<{ 'update:visible': [boolean] }>()\n\n// inject 必须在 setup 同步阶段执行\nconst injectedRequest = useInjectedProductRequest()\n\n/** prop 优先,否则读 provideProductRequest 注入的全局 request */\nconst getRequest = (): JProductRequestFn =>\n resolveProductRequest(props.request, injectedRequest)\n\nconst post = (url: string, data: any): Promise<any> =>\n getRequest()({ url, method: 'post', data } as JProductRequestConfig)\n\nconst loading = ref(false)\nconst detail = ref<any>(null)\n\n// ---- 请求:弹窗打开时并行加载字典(缓存)+ 详情 ----\nconst fetchDetail = async () => {\n if (!props.code && props.id === undefined) return\n detail.value = null\n loadDicts(getRequest())\n const url = props.type === 'spu' ? '/bis-app/comm/spu/doDetail' : '/bis-app/comm/sku/doDetail'\n const params = props.type === 'spu'\n ? { id: props.id, spu_code: props.code }\n : { id: props.id, sku_code: props.code }\n loading.value = true\n try {\n const res = await post(url, params)\n if (res.code === 1 && res.data) {\n detail.value = res.data\n } else {\n ElMessage.error(res.msg || '获取详情失败')\n }\n } catch {\n ElMessage.error('获取详情失败')\n } finally {\n loading.value = false\n }\n}\n\nwatch(() => props.visible, (val) => {\n if (val) fetchDetail()\n})\n\n// ---- 数据分区(兼容详情接口嵌套结构与列表接口扁平结构)----\nconst basic = computed(() => detail.value?.basic_info ?? detail.value ?? {})\nconst spec = computed(() => detail.value?.spec_info ?? {})\nconst images = computed(() => detail.value?.images_info ?? detail.value?.image_info ?? {})\nconst purchase = computed(() => detail.value?.purchase_info ?? {})\nconst declaration = computed(() => detail.value?.declaration_info ?? {})\nconst qc = computed(() => detail.value?.qc_info ?? {})\nconst bindSku = computed(() => detail.value?.bind_sku_info ?? {})\nconst spuBindSku = computed(() => detail.value?.spu_bind_sku ?? {})\n\n// 装箱规格与供应商报价:详情接口在顶层,兼容嵌套位置\nconst specBoxList = computed<any[]>(() => detail.value?.spec_box_info ?? spec.value.spec_box_info ?? [])\nconst supplierList = computed<any[]>(() => detail.value?.sku_supplier ?? purchase.value.supplier_list ?? [])\n\nconst productType = computed(() => String(basic.value.product_type ?? (props.type === 'spu' ? '30' : '10')))\nconst isSpu = computed(() => productType.value === '30')\nconst productTypeLabel = computed(() => ({ '10': '单品', '20': '组合产品', '30': '多属性产品' } as Record<string, string>)[productType.value] || productType.value)\n\nconst nameCn = computed(() => (isSpu.value ? (basic.value.spu_name || basic.value.product_name) : basic.value.product_name))\nconst nameEn = computed(() => (isSpu.value ? (basic.value.spu_name_en || basic.value.product_name_en) : basic.value.product_name_en))\nconst mainCode = computed(() => (isSpu.value ? basic.value.spu_code : basic.value.sku_code))\n\n// ---- 归一化工具 ----\nconst normalizeStringArray = (v: any): string[] => {\n if (v == null || v === '') return []\n if (Array.isArray(v)) return v.map(String).filter(Boolean)\n if (typeof v === 'string') {\n const s = v.trim()\n if (!s) return []\n if (s.startsWith('[')) {\n try {\n const arr = JSON.parse(s)\n return Array.isArray(arr) ? arr.map(String).filter(Boolean) : []\n } catch { /* fallthrough */ }\n }\n return s.split(',').map((x) => x.trim()).filter(Boolean)\n }\n return [String(v)]\n}\n\nconst normalizeAttachments = (v: any): { name: string; url: string }[] => {\n let list: any[] = []\n if (Array.isArray(v)) list = v\n else if (typeof v === 'string' && v.trim()) {\n try {\n const arr = JSON.parse(v)\n list = Array.isArray(arr) ? arr : [v]\n } catch { list = [v] }\n }\n return list\n .map((it) => {\n if (typeof it === 'string') return { name: it.split('/').pop() || it, url: it }\n const url = it?.url || it?.file_url || it?.path || ''\n return { name: it?.name || it?.file_name || url.split('/').pop() || '附件', url }\n })\n .filter((f) => f.url)\n}\n\nconst fmt = (v: any) => (v == null || v === '' ? '—' : v)\nconst weightText = (v: any, unit?: string) => (v == null || v === '' ? '—' : `${v} ${unit || ''}`.trim())\nconst dimText = (l: any, w: any, h: any, unit = 'cm') => {\n if ([l, w, h].every((x) => x == null || x === '')) return '—'\n const p = (x: any) => (x == null || x === '' ? '—' : x)\n return `${p(l)} × ${p(w)} × ${p(h)} ${unit}`\n}\n\n// ---- 字段展示(优先详情返回的 _name 字段,字典映射兜底)----\nconst dictName = (list: any[], id: any): string => {\n if (id == null || id === '') return ''\n const hit = list.find((x) => String(x.id) === String(id))\n return hit?.attr_value_name || ''\n}\n\nconst brandName = computed(() => basic.value.brand_name || dictName(brandDict.value, basic.value.brand_id))\nconst unitName = computed(() => basic.value.unit_name || dictName(unitDict.value, basic.value.unit_id))\nconst statusName = computed(() =>\n basic.value.sale_status_name || basic.value.status_name || dictName(saleDict.value, basic.value.status)\n)\nconst declarationUnitName = computed(() =>\n declaration.value.declaration_unit_name || dictName(unitDict.value, declaration.value.declaration_unit_id) || declaration.value.declaration_unit_id\n)\n\nconst peNames = computed(() => {\n if (basic.value.pe_code_name) return basic.value.pe_code_name\n const codes = normalizeStringArray(basic.value.pe_codes)\n if (!codes.length) return ''\n return codes\n .map((c) => companyDict.value.find((x) => String(x.company_code) === String(c))?.company_name || c)\n .join('、')\n})\n\nconst tagList = computed(() =>\n normalizeStringArray(basic.value.tags).map((code) => {\n const hit = tagDict.value.find((t) => String(t.tag_value_code) === String(code))\n return { code, name: hit?.tag_value_name || code, color: hit?.tag_color || '' }\n })\n)\n\nconst skuAttrText = computed(() => {\n const attr = basic.value.sku_attr\n if (!attr || typeof attr !== 'object' || Array.isArray(attr)) return ''\n return Object.entries(attr).map(([k, v]) => `${k}: ${v}`).join(';')\n})\n\nconst basicAttachments = computed(() => normalizeAttachments(basic.value.att_files))\nconst hasDesc = computed(() => {\n const html = basic.value.product_desc || ''\n return String(html).replace(/<[^>]*>/g, '').trim().length > 0 || /<img/i.test(String(html))\n})\n\n// 图片\nconst mainImage = computed(() => images.value.main_image || detail.value?.product_image || '')\nconst sizeImages = computed(() => normalizeStringArray(images.value.size_images ?? detail.value?.size_images))\nconst sellingPointImages = computed(() => normalizeStringArray(images.value.selling_point_images))\n\n// 质检\nconst qcMethodLabel = computed(() =>\n ({ spot: '抽检', full: '全检', exempt: '免检' } as Record<string, string>)[qc.value.qc_method] || fmt(qc.value.qc_method)\n)\nconst qcImages = computed(() => normalizeStringArray(qc.value.images))\nconst qcAttachments = computed(() => normalizeAttachments(qc.value.att_files))\nconst qcCustomList = computed<any[]>(() => (Array.isArray(qc.value.qc_content) ? qc.value.qc_content : []))\n\n// 自定义属性\n// 详情里每行只有 custom_attr_id + 值(id),属性名和选项名需按 custom_attr_id 去字典匹配。\n// 字典项字段名与表单 allCustomAttrs 保持一致的多路兜底。\nconst dictAttrId = (item: any): string =>\n String(item.custom_attr_id ?? item.id ?? item.attr_id ?? item.attr_code ?? '').trim()\n\n// 解析字典项的选项列表 → [{id, name}](对齐表单 parseCustomAttrOptions)\nconst parseAttrOptions = (raw: any): { id: string; name: string }[] => {\n const list = Array.isArray(raw) ? raw : (raw != null && raw !== '' ? [raw] : [])\n const out: { id: string; name: string }[] = []\n for (const item of list) {\n if (typeof item === 'string') {\n item.split(/[,,、\\n]/).map((s) => s.trim()).filter(Boolean).forEach((name) => out.push({ id: '', name }))\n } else if (item && typeof item === 'object') {\n const name = String(item.attr_value ?? item.value ?? item.label ?? item.attr_value_name ?? item.name ?? '').trim()\n const id = String(item.id ?? item.attr_value_id ?? item.value_id ?? '')\n if (name) out.push({ id, name })\n }\n }\n return out\n}\n\n// custom_attr_id → 字典项\nconst customAttrDictMap = computed(() => {\n const m = new Map<string, any>()\n for (const d of customAttrDict.value) {\n const id = dictAttrId(d)\n if (id) m.set(id, d)\n }\n return m\n})\n\nconst customAttrList = computed<any[]>(() => {\n const info = detail.value?.custom_attr_info\n const list = info?.list ?? info\n const rows = Array.isArray(list) ? list : []\n return rows.map((row) => {\n const id = dictAttrId(row)\n const def = customAttrDictMap.value.get(id)\n return {\n ...row,\n custom_attr_id: id,\n // 属性名:详情自带优先,否则取字典\n attr_name: row.attr_name || def?.attr_name || id,\n options: parseAttrOptions(def?.attr_value ?? def?.options ?? row.options ?? row.attr_value),\n }\n })\n})\n\nconst customAttrValueText = (row: any): string => {\n const values = normalizeStringArray(row.custom_attr_value_id ?? row.custom_attr_value)\n if (!values.length) return '—'\n const options: any[] = row.options || []\n return values\n .map((v) => options.find((o) => (o.id && String(o.id) === String(v)) || String(o.name) === String(v))?.name || v)\n .join('、')\n}\n\n// 组合产品\nconst bindSkuList = computed<any[]>(() => bindSku.value.bind_sku_list ?? [])\n\n// SPU 款式属性 / SKU 变体\nconst styleAttrs = computed<any[]>(() => spuBindSku.value.sku_attr ?? [])\nconst skuVariants = computed<any[]>(() => spuBindSku.value.sku_list ?? [])\nconst variantAttrText = (row: any, attr: any): string => {\n const code = row.sku_attr?.[attr.attr_code]\n if (code == null || code === '') return '—'\n const child = (attr.childs || []).find((c: any) => String(c.attr_value_code) === String(code))\n return child?.attr_value_name || String(code)\n}\n\n// 供应商报价:币种组 × 阶梯 摊平成行\nconst supplierQuoteRows = (sup: any): any[] => {\n const rows: any[] = []\n for (const q of sup.supplier_quote || []) {\n for (const item of q.quote_list || []) {\n rows.push({\n currency: q.quote_currency_code,\n is_tax: q.is_tax,\n tax_rate: q.tax_rate,\n ...item,\n })\n }\n }\n return rows\n}\n</script>\n\n<style scoped>\n.pdd-body {\n min-height: 200px;\n max-height: 72vh;\n overflow-y: auto;\n padding-right: 4px;\n}\n\n.pdd-title {\n font-size: 15px;\n font-weight: 600;\n color: #303133;\n margin: 18px 0 10px;\n padding-left: 8px;\n border-left: 3px solid #409eff;\n}\n\n.pdd-title:first-child {\n margin-top: 0;\n}\n\n.pdd-subtitle {\n font-size: 13px;\n font-weight: 600;\n color: #606266;\n margin: 12px 0 8px;\n}\n\n.pdd-table {\n margin-bottom: 4px;\n}\n\n.pdd-tag {\n margin-right: 6px;\n margin-bottom: 2px;\n}\n\n.pdd-file {\n display: inline-block;\n margin-right: 14px;\n color: #409eff;\n text-decoration: none;\n}\n\n.pdd-file:hover {\n text-decoration: underline;\n}\n\n.pdd-img {\n width: 80px;\n height: 80px;\n margin-right: 8px;\n border-radius: 4px;\n border: 1px solid #e4e7ed;\n vertical-align: top;\n}\n\n.pdd-thumb {\n width: 40px;\n height: 40px;\n border-radius: 4px;\n}\n\n.pdd-rich {\n max-height: 300px;\n overflow-y: auto;\n}\n\n.pdd-rich :deep(img) {\n max-width: 100%;\n}\n\n.pdd-supplier {\n margin-bottom: 12px;\n border: 1px solid #e4e7ed;\n border-radius: 4px;\n padding: 10px;\n}\n\n.pdd-supplier-head {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 8px;\n font-size: 13px;\n}\n\n.pdd-supplier-name {\n font-weight: 600;\n color: #303133;\n}\n\n.pdd-supplier-meta {\n color: #909399;\n}\n</style>\n","import { defineStore } from 'pinia'\r\nimport { nextTick, ref } from 'vue'\r\n\r\nexport type ProductDetailType = 'sku' | 'spu'\r\n\r\n/**\r\n * 全局产品详情状态\r\n * 业务页:JSkuLink / store.open(code)\r\n * 宿主:ProductDetailHost 渲染 JProductDetailDialog\r\n */\r\nexport const useProductDetailStore = defineStore('jgyProductDetail', () => {\r\n const visible = ref(false)\r\n const code = ref('')\r\n const type = ref<ProductDetailType>('sku')\r\n\r\n async function open(skuCode: string, opts?: { type?: ProductDetailType }) {\r\n const c = String(skuCode ?? '').trim()\r\n if (!c || c === '-') return\r\n\r\n code.value = c\r\n type.value = opts?.type ?? 'sku'\r\n visible.value = false\r\n await nextTick()\r\n visible.value = true\r\n }\r\n\r\n function close() {\r\n visible.value = false\r\n }\r\n\r\n function reset() {\r\n visible.value = false\r\n code.value = ''\r\n type.value = 'sku'\r\n }\r\n\r\n return {\r\n visible,\r\n code,\r\n type,\r\n open,\r\n close,\r\n reset,\r\n }\r\n})\r\n","<template>\n <span\n v-if=\"hasCode\"\n class=\"j-sku-link\"\n @click.stop=\"handleClick\"\n >{{ displayText }}</span>\n <span v-else class=\"j-sku-link-empty\">{{ emptyText }}</span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useProductDetailStore } from './store'\nimport type { ProductDetailType } from './store'\n\ndefineOptions({ name: 'JSkuLink' })\n\nconst props = withDefaults(defineProps<{\n code?: string | null\n emptyText?: string\n /** sku 或 spu,默认 sku */\n type?: ProductDetailType\n}>(), {\n emptyText: '-',\n type: 'sku',\n})\n\nconst emit = defineEmits<{\n open: [code: string]\n}>()\n\nconst productDetailStore = useProductDetailStore()\n\nconst displayText = computed(() => {\n const value = String(props.code ?? '').trim()\n return value || props.emptyText\n})\n\nconst hasCode = computed(() => {\n const value = String(props.code ?? '').trim()\n return value !== '' && value !== '-'\n})\n\nconst handleClick = () => {\n if (!hasCode.value) return\n const code = String(props.code).trim()\n productDetailStore.open(code, { type: props.type })\n emit('open', code)\n}\n</script>\n\n<style scoped>\n.j-sku-link {\n color: var(--j-sku-link-color, #409eff);\n font-weight: 700;\n cursor: pointer;\n}\n\n.j-sku-link:hover {\n text-decoration: underline;\n}\n\n.j-sku-link-empty {\n color: inherit;\n font-weight: inherit;\n}\n</style>\n","<!--\r\n 全局产品详情宿主:挂在 MainLayout\r\n 业务页用 JSkuLink 打开,无需各页面单独挂 JProductDetailDialog\r\n-->\r\n<template>\r\n <JProductDetailDialog\r\n v-model:visible=\"visible\"\r\n :code=\"code\"\r\n :type=\"type\"\r\n />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\ndefineOptions({ name: 'ProductDetailHost' })\r\n\r\nimport { storeToRefs } from 'pinia'\r\nimport JProductDetailDialog from './JProductDetailDialog.vue'\r\nimport { useProductDetailStore } from './store'\r\n\r\nconst productDetailStore = useProductDetailStore()\r\nconst { visible, code, type } = storeToRefs(productDetailStore)\r\n</script>\r\n","import { storeToRefs } from 'pinia'\nimport { useProductDetailStore } from './store'\n\n/**\n * @deprecated 推荐 MainLayout 挂载 ProductDetailHost,页面只用 JSkuLink。\n * 保留兼容:内部转调全局 store。\n */\nexport function useProductDetailDialog() {\n const store = useProductDetailStore()\n const { visible: productDetailDialogVisible, code: productDetailDialogCode } =\n storeToRefs(store)\n\n const openProductDetailDialog = (code: string) => {\n store.open(code)\n }\n\n return {\n productDetailDialogVisible,\n productDetailDialogCode,\n openProductDetailDialog,\n }\n}\n","<!--\r\n JSearchInputDialog - 关键词搜索复合控件\r\n\r\n 结构:\r\n [ 类型下拉 ] + [ 关键词输入框 ] + [ 批量输入按钮 ]\r\n │\r\n └─ 点右侧按钮 → Dialog + textarea 批量编辑\r\n\r\n 主流程:\r\n 1. 父组件传入 options(如 SKU / 品名),v-model:type + v-model:keyword 双向绑定\r\n 2. 用户左侧选类型,中间手输关键词;或点右侧 icon 打开弹窗批量粘贴\r\n 3. 弹窗确定:textarea 文本规范化 → 写回 keyword → emit('confirm')\r\n 4. 输入框回车:emit('search')\r\n 5. 父组件用 { [type]: keyword } 拼请求(也可调用 expose 的 toParams)\r\n\r\n 示例请求结果:type='sku', keyword='sku1,sku2' → { sku: 'sku1,sku2' }\r\n-->\r\n<template>\r\n <div class=\"j-search-input-dialog\" :style=\"{ width: width }\">\r\n <!-- 主输入区:前置类型 + 关键词 + 右侧批量入口 -->\r\n <el-input\r\n v-model=\"keyword\"\r\n :placeholder=\"placeholder\"\r\n clearable\r\n class=\"j-search-input-dialog__input\"\r\n @keyup.enter=\"emit('search')\"\r\n >\r\n <!-- 左侧:搜索字段类型(SKU / 品名 / 自定义) -->\r\n <template #prepend>\r\n <el-select\r\n v-model=\"type\"\r\n :style=\"{ width: selectWidth }\"\r\n :disabled=\"!options.length\"\r\n >\r\n <el-option\r\n v-for=\"item in options\"\r\n :key=\"item.value\"\r\n :label=\"item.label\"\r\n :value=\"item.value\"\r\n />\r\n </el-select>\r\n </template>\r\n <!-- 右侧:打开批量输入弹窗 -->\r\n <template #append>\r\n <el-button :icon=\"Memo\" :title=\"dialogTitleText\" @click=\"openDialog\" />\r\n </template>\r\n </el-input>\r\n\r\n <!-- 批量输入弹窗:textarea 编辑多值,确定后合并回主输入框 -->\r\n <el-dialog\r\n v-model=\"dialogVisible\"\r\n :title=\"dialogTitleText\"\r\n :width=\"dialogWidth\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n @closed=\"handleDialogClosed\"\r\n >\r\n <el-input\r\n v-model=\"textareaValue\"\r\n type=\"textarea\"\r\n :rows=\"rows\"\r\n :placeholder=\"textareaPlaceholder\"\r\n resize=\"vertical\"\r\n />\r\n <template #footer>\r\n <el-button @click=\"dialogVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" @click=\"handleConfirm\">确定</el-button>\r\n </template>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { Memo } from '@element-plus/icons-vue'\r\nimport type { JSearchInputDialogProps, SearchInputModel, SearchInputOption } from './types'\r\n\r\ndefineOptions({\r\n name: 'JSearchInputDialog',\r\n})\r\n\r\nconst props = withDefaults(defineProps<JSearchInputDialogProps>(), {\r\n options: () => [],\r\n placeholder: '请输入关键词',\r\n width: '320px',\r\n selectWidth: '100px',\r\n separator: ',',\r\n dialogTitle: '',\r\n dialogWidth: '480px',\r\n rows: 8,\r\n textareaPlaceholder: '支持换行分隔,确定后自动合并',\r\n clearOnTypeChange: false,\r\n})\r\n\r\n/**\r\n * 双向绑定:\r\n * - type:当前选中的搜索字段类型(对应 options[].value)\r\n * - keyword:最终要参与搜索的关键词字符串(可多值,如 sku1,sku2)\r\n *\r\n * 父组件:\r\n * v-model:type=\"filters.keywordType\"\r\n * v-model:keyword=\"filters.keyword\"\r\n */\r\nconst type = defineModel<string>('type', { default: '' })\r\nconst keyword = defineModel<string>('keyword', { default: '' })\r\n\r\nconst emit = defineEmits<{\r\n /** 弹窗点「确定」并写回 keyword 后触发;父级常用来立刻 handleSearch */\r\n confirm: [payload: SearchInputModel]\r\n /** 主输入框回车触发;父级常用来 handleSearch */\r\n search: []\r\n}>()\r\n\r\n/** 批量输入弹窗显隐 */\r\nconst dialogVisible = ref(false)\r\n/** 弹窗内 textarea 的临时编辑值(确定前不影响外部 keyword) */\r\nconst textareaValue = ref('')\r\n\r\n/** 当前 type 对应的 option(用于取 label 拼弹窗标题) */\r\nconst currentOption = computed(() =>\r\n (props.options as SearchInputOption[]).find((item) => item.value === type.value),\r\n)\r\n\r\n/** 弹窗标题:优先用 props.dialogTitle,否则「批量输入{label}」 */\r\nconst dialogTitleText = computed(() => {\r\n if (props.dialogTitle) return props.dialogTitle\r\n const label = currentOption.value?.label || '关键词'\r\n return `批量输入${label}`\r\n})\r\n\r\n/**\r\n * 规范化批量文本 → 统一分隔符拼接的字符串\r\n * 流程:拆分(换行/逗号/分号/空白)→ trim → 去空 → 去重(保序)→ join(separator)\r\n * 例:'sku1\\nsku2, sku2 sku3' + separator=',' → 'sku1,sku2,sku3'\r\n */\r\nconst normalizeKeywords = (raw: string): string => {\r\n if (!raw) return ''\r\n const parts = raw\r\n .split(/[\\n\\r,,;;\\s\\t]+/)\r\n .map((item) => item.trim())\r\n .filter(Boolean)\r\n\r\n const unique: string[] = []\r\n const seen = new Set<string>()\r\n for (const part of parts) {\r\n if (seen.has(part)) continue\r\n seen.add(part)\r\n unique.push(part)\r\n }\r\n\r\n return unique.join(props.separator)\r\n}\r\n\r\n/**\r\n * 主输入框 keyword → textarea 多行回显\r\n * 打开弹窗前调用,方便用户在已有值上继续编辑\r\n * 例:'sku1,sku2' → 'sku1\\nsku2'\r\n */\r\nconst keywordToTextarea = (value: string): string => {\r\n if (!value) return ''\r\n return value\r\n .split(/[\\n\\r,,;;\\s\\t.]+/)\r\n .map((item) => item.trim())\r\n .filter(Boolean)\r\n .join('\\n')\r\n}\r\n\r\n/**\r\n * 打开批量输入弹窗\r\n * 1. 把当前 keyword 拆成多行填入 textarea\r\n * 2. 显示 dialog\r\n */\r\nconst openDialog = () => {\r\n textareaValue.value = keywordToTextarea(keyword.value)\r\n dialogVisible.value = true\r\n}\r\n\r\n/**\r\n * 弹窗点「确定」\r\n * 1. 规范化 textarea → 写回 keyword(同步到父组件 v-model)\r\n * 2. 关闭弹窗\r\n * 3. emit confirm,父组件可据此触发搜索\r\n * 注意:组件本身不发请求,只负责回写数据\r\n */\r\nconst handleConfirm = () => {\r\n keyword.value = normalizeKeywords(textareaValue.value)\r\n dialogVisible.value = false\r\n emit('confirm', {\r\n type: type.value,\r\n keyword: keyword.value,\r\n })\r\n}\r\n\r\n/**\r\n * 弹窗完全关闭后清理临时 textarea\r\n * 取消 / 确定关闭都会走这里;取消时不会改外部 keyword\r\n */\r\nconst handleDialogClosed = () => {\r\n textareaValue.value = ''\r\n}\r\n\r\n// 初始化:父组件未传 type 时,默认选中 options 第一项\r\nif (!type.value && props.options?.length) {\r\n type.value = props.options[0]?.value || ''\r\n}\r\n\r\n/**\r\n * 监听类型切换\r\n * 仅当 clearOnTypeChange=true 时,切换左侧类型会清空 keyword\r\n */\r\nwatch(type, (next, prev) => {\r\n if (!props.clearOnTypeChange) return\r\n if (next === prev) return\r\n keyword.value = ''\r\n})\r\n\r\n/**\r\n * 重置(供父组件 ref 调用)\r\n * @param defaultType 指定重置后的类型;不传则用 options[0]\r\n * 会清空 keyword\r\n */\r\nconst reset = (defaultType?: string) => {\r\n type.value = defaultType || props.options?.[0]?.value || ''\r\n keyword.value = ''\r\n}\r\n\r\n/**\r\n * 拼请求参数(供父组件 ref 调用)\r\n * 有 keyword 时返回 { [type]: keyword },否则 {}\r\n * 例:{ sku: 'sku1,sku2' }\r\n */\r\nconst toParams = (): Record<string, string> => {\r\n if (!keyword.value || !type.value) return {}\r\n return { [type.value]: keyword.value }\r\n}\r\n\r\n/**\r\n * 对外暴露,父组件通过 ref 调用:\r\n * - reset() 重置类型和关键词\r\n * - toParams() 直接拿请求参数对象\r\n * - openDialog() 程序化打开批量弹窗\r\n */\r\ndefineExpose({\r\n reset,\r\n toParams,\r\n openDialog,\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n/* 让前置 select 贴合 el-input 的 prepend 区域,去掉多余边框/阴影 */\r\n.j-search-input-dialog {\r\n display: inline-block;\r\n vertical-align: middle;\r\n\r\n :deep(.el-input-group__prepend) {\r\n background-color: var(--el-fill-color-blank);\r\n padding: 0;\r\n }\r\n\r\n :deep(.el-input-group__prepend .el-select) {\r\n margin: 0;\r\n }\r\n\r\n :deep(.el-input-group__prepend .el-select .el-select__wrapper) {\r\n box-shadow: none !important;\r\n border: none;\r\n background: transparent;\r\n }\r\n}\r\n</style>\r\n","/** 简单防抖,避免组件库依赖 @vueuse/core */\nexport function debounceFn<T extends (...args: never[]) => void>(fn: T, delay: number) {\n let timer: ReturnType<typeof setTimeout> | undefined\n return (...args: Parameters<T>) => {\n if (timer !== undefined) clearTimeout(timer)\n timer = setTimeout(() => fn(...args), delay)\n }\n}\n","<!-- 通用远程搜索 Select(由 scm/bis RemoteSelect 抽取) -->\n<template>\n <el-select\n ref=\"selectRef\"\n :model-value=\"modelValue\"\n :loading=\"loading\"\n :disabled=\"disabled || (!allowEmpty && !hasRequiredParams)\"\n :placeholder=\"computedPlaceholder\"\n :clearable=\"clearable\"\n :filterable=\"searchable\"\n :remote=\"searchable && !localFilter\"\n :remote-method=\"searchable && !localFilter ? handleSearch : undefined\"\n :remote-show-suffix=\"searchable && !localFilter\"\n :multiple=\"multiple\"\n :collapse-tags=\"collapseTags\"\n :collapse-tags-tooltip=\"collapseTagsTooltip\"\n :max-collapse-tags=\"maxCollapseTags\"\n v-bind=\"$attrs\"\n @update:model-value=\"handleChange\"\n @visible-change=\"handleVisibleChange\"\n @clear=\"handleClear\"\n >\n <el-option\n v-for=\"item in displayOptions\"\n :key=\"item[valueField]\"\n :label=\"item[labelField]\"\n :value=\"item[valueField]\"\n />\n <template v-if=\"paginated && loadingMore\">\n <el-option disabled value=\"\" class=\"load-more-option\">\n <div class=\"loading-more-text\">加载中...</div>\n </el-option>\n </template>\n </el-select>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { debounceFn } from './debounce'\nimport type { RemoteSelectFetchApi, RemoteSelectModelValue } from './types'\n\ndefineOptions({\n name: 'JRemoteSelect',\n})\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: RemoteSelectModelValue\n fetchApi: RemoteSelectFetchApi\n labelField?: string\n valueField?: string\n searchField?: string\n params?: Record<string, unknown>\n searchable?: boolean\n localFilter?: boolean\n paginated?: boolean\n pageSize?: number\n multiple?: boolean\n clearable?: boolean\n disabled?: boolean\n placeholder?: string\n dependsPlaceholder?: string\n immediate?: boolean\n autoClearOnParamsChange?: boolean\n allowEmpty?: boolean\n requiredParams?: string[]\n initialLabel?: string\n collapseTags?: boolean\n collapseTagsTooltip?: boolean\n maxCollapseTags?: number\n }>(),\n {\n labelField: 'name',\n valueField: 'id',\n searchField: 'keyword',\n searchable: true,\n localFilter: false,\n paginated: true,\n pageSize: 20,\n multiple: false,\n clearable: true,\n disabled: false,\n placeholder: '请选择',\n dependsPlaceholder: '请先选择前置条件',\n immediate: false,\n autoClearOnParamsChange: false,\n allowEmpty: false,\n requiredParams: () => [],\n collapseTags: false,\n collapseTagsTooltip: false,\n maxCollapseTags: 1,\n },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: RemoteSelectModelValue]\n change: [value: RemoteSelectModelValue, option: Record<string, unknown> | null]\n paramsChange: [params: Record<string, unknown>]\n}>()\n\nconst selectRef = ref<{ $el?: HTMLElement }>()\nconst loading = ref(false)\nconst loadingMore = ref(false)\nconst options = ref<Record<string, unknown>[]>([])\nconst currentPage = ref(1)\nconst total = ref(0)\nconst searchKeyword = ref('')\nconst dropdownScrollEl = ref<HTMLElement | null>(null)\n\nconst hasMore = computed(() => {\n if (props.localFilter || !props.paginated) return false\n return options.value.length < total.value\n})\n\nconst fetchPageSize = computed(() => {\n if (props.localFilter) return Math.max(props.pageSize, 2000)\n return props.pageSize\n})\n\nconst hasRequiredParams = computed(() => {\n if (props.allowEmpty && !props.requiredParams.length) return true\n if (!props.params) return props.allowEmpty\n\n if (props.requiredParams.length > 0) {\n return props.requiredParams.every((key) => {\n const val = props.params![key]\n return val !== undefined && val !== null && val !== ''\n })\n }\n\n return props.allowEmpty || Object.keys(props.params).length > 0\n})\n\nconst computedPlaceholder = computed(() => {\n if (!hasRequiredParams.value && !props.allowEmpty) {\n return props.dependsPlaceholder\n }\n return props.placeholder\n})\n\nconst displayOptions = computed(() => {\n const val = props.modelValue\n if (val === undefined || val === null || val === '') return options.value\n if (props.multiple) return options.value\n\n const initialLabel = String(props.initialLabel || '').trim()\n const patched = options.value.map((item) => {\n if (item[props.valueField] !== val) return item\n const currentLabel = String(item[props.labelField] ?? '').trim()\n const valueText = String(val)\n const labelLooksLikeValue =\n !currentLabel ||\n currentLabel === valueText ||\n currentLabel === String(item[props.valueField] ?? '')\n const initialHasCjk = /[\\u4e00-\\u9fff]/.test(initialLabel)\n const currentHasCjk = /[\\u4e00-\\u9fff]/.test(currentLabel)\n if (initialLabel && (labelLooksLikeValue || (initialHasCjk && !currentHasCjk))) {\n return { ...item, [props.labelField]: initialLabel }\n }\n return item\n })\n\n const exists = patched.some((item) => item[props.valueField] === val)\n if (exists) return patched\n\n return [{ [props.valueField]: val, [props.labelField]: initialLabel || val }, ...patched]\n})\n\nconst parseListResponse = (res: unknown): { list: Record<string, unknown>[]; totalNum: number } => {\n const r = res as Record<string, unknown>\n const data = r.data as Record<string, unknown> | undefined\n\n if (data?.list && Array.isArray(data.list)) {\n const list = data.list as Record<string, unknown>[]\n const pageInfo = data.pageInfo as Record<string, unknown> | undefined\n return {\n list,\n totalNum: Number(pageInfo?.totalNum ?? data.total ?? list.length),\n }\n }\n if (Array.isArray(r.list)) {\n const list = r.list as Record<string, unknown>[]\n return { list, totalNum: Number(r.total ?? list.length) }\n }\n if (Array.isArray(data)) {\n return { list: data as Record<string, unknown>[], totalNum: data.length }\n }\n if (Array.isArray(res)) {\n return { list: res as Record<string, unknown>[], totalNum: (res as unknown[]).length }\n }\n return { list: [], totalNum: 0 }\n}\n\nconst fetchData = async (reset = false) => {\n if (!hasRequiredParams.value) {\n options.value = []\n return\n }\n\n if (reset && loading.value) return\n\n try {\n if (reset) {\n loading.value = true\n currentPage.value = 1\n } else {\n loadingMore.value = true\n }\n\n const requestParams: Record<string, unknown> = {\n ...props.params,\n pageIndex: currentPage.value,\n pageSize: fetchPageSize.value,\n }\n\n if (!props.localFilter && searchKeyword.value && props.searchable) {\n requestParams[props.searchField] = searchKeyword.value\n }\n\n const res = await props.fetchApi(requestParams)\n const { list, totalNum } = parseListResponse(res)\n\n if (reset) {\n options.value = list\n } else {\n options.value.push(...list)\n }\n\n total.value = totalNum\n } catch (error) {\n console.error('[JRemoteSelect] 请求失败:', error)\n options.value = []\n } finally {\n loading.value = false\n loadingMore.value = false\n }\n}\n\nconst loadMore = () => {\n if (loadingMore.value || !hasMore.value) return\n currentPage.value++\n fetchData(false)\n}\n\nconst handleSearch = debounceFn((query: string) => {\n const nextKeyword = query ?? ''\n if (!nextKeyword && options.value.length > 0 && !searchKeyword.value) {\n return\n }\n if (nextKeyword === searchKeyword.value && options.value.length > 0) {\n return\n }\n searchKeyword.value = nextKeyword\n fetchData(true)\n}, 300)\n\nconst handleVisibleChange = (visible: boolean) => {\n if (visible) {\n const isRemote = props.searchable && !props.localFilter\n if (!isRemote && options.value.length === 0 && hasRequiredParams.value) {\n fetchData(true)\n }\n if (!props.localFilter) {\n nextTick(() => {\n bindScrollListener()\n })\n }\n } else {\n unbindScrollListener()\n }\n}\n\nconst handleScroll = debounceFn(() => {\n if (!dropdownScrollEl.value || !hasMore.value || loadingMore.value) return\n\n const { scrollTop, scrollHeight, clientHeight } = dropdownScrollEl.value\n if (scrollTop + clientHeight >= scrollHeight - 50) {\n loadMore()\n }\n}, 100)\n\nconst bindScrollListener = () => {\n const selectDom = selectRef.value?.$el\n if (!selectDom) return\n\n const inputEl = selectDom.querySelector('input')\n const popoverId = inputEl?.getAttribute('aria-controls')\n if (!popoverId) return\n\n const dropdownEl = document.getElementById(popoverId)\n if (!dropdownEl) return\n\n const scrollWrap = dropdownEl.parentElement as HTMLElement | null\n if (scrollWrap) {\n dropdownScrollEl.value = scrollWrap\n scrollWrap.addEventListener('scroll', handleScroll)\n }\n}\n\nconst unbindScrollListener = () => {\n if (dropdownScrollEl.value) {\n dropdownScrollEl.value.removeEventListener('scroll', handleScroll)\n dropdownScrollEl.value = null\n }\n}\n\nconst handleChange = (value: RemoteSelectModelValue) => {\n emit('update:modelValue', value)\n if (props.multiple || Array.isArray(value)) {\n emit('change', value, null)\n return\n }\n const option = options.value.find((item) => item[props.valueField] === value) ?? null\n emit('change', value, option)\n}\n\nconst handleClear = () => {\n searchKeyword.value = ''\n const cleared = props.multiple ? [] : null\n emit('update:modelValue', cleared)\n emit('change', cleared, null)\n}\n\nwatch(\n () => props.params,\n (newParams, oldParams) => {\n if (JSON.stringify(newParams || {}) === JSON.stringify(oldParams || {})) return\n\n emit('paramsChange', newParams || {})\n\n if (props.autoClearOnParamsChange && props.modelValue) {\n emit('update:modelValue', props.multiple ? [] : null)\n }\n\n searchKeyword.value = ''\n if (hasRequiredParams.value) {\n fetchData(true)\n } else {\n options.value = []\n }\n },\n { deep: true },\n)\n\nonMounted(() => {\n if (props.immediate && hasRequiredParams.value) {\n fetchData(true)\n }\n})\n\nonBeforeUnmount(() => {\n unbindScrollListener()\n})\n</script>\n\n<style scoped lang=\"scss\">\n.load-more-option {\n text-align: center;\n pointer-events: none;\n}\n\n.loading-more-text {\n color: #909399;\n font-size: 13px;\n padding: 8px 0;\n}\n</style>\n","<!--\r\n 通用产品选择弹窗壳\r\n - 跨页多选、已选 Popover、分页、确定回传\r\n - 筛选区 #filters、表格列 #columns、已选列 #selected-columns\r\n-->\r\n<template>\r\n <el-dialog\r\n v-model=\"visible\"\r\n :title=\"title\"\r\n :width=\"width\"\r\n :append-to-body=\"teleported\"\r\n :close-on-click-modal=\"false\"\r\n destroy-on-close\r\n :z-index=\"zIndex\"\r\n @closed=\"handleClosed\"\r\n >\r\n <div class=\"j-product-select__filters\">\r\n <slot\r\n name=\"filters\"\r\n :search=\"handleSearch\"\r\n :reset=\"handleReset\"\r\n :loading=\"loading\"\r\n />\r\n </div>\r\n\r\n <el-table\r\n ref=\"tableRef\"\r\n v-loading=\"loading\"\r\n :data=\"tableData\"\r\n border\r\n :row-key=\"rowKey\"\r\n :height=\"tableHeight\"\r\n :row-style=\"{ cursor: 'pointer' }\"\r\n @selection-change=\"onSelectionChange\"\r\n >\r\n <el-table-column type=\"selection\" width=\"42\" />\r\n <slot name=\"columns\" />\r\n </el-table>\r\n\r\n <div class=\"j-product-select__bottom\">\r\n <div class=\"j-product-select__bottom-left\">\r\n <el-popover\r\n placement=\"top-start\"\r\n :width=\"popoverWidth\"\r\n trigger=\"click\"\r\n :disabled=\"allSelectedRows.length === 0\"\r\n :teleported=\"false\"\r\n >\r\n <template #reference>\r\n <div\r\n class=\"j-product-select__selected-trigger\"\r\n :class=\"{ 'is-active': allSelectedRows.length > 0 }\"\r\n >\r\n <span>已选择 {{ allSelectedRows.length }} 个产品</span>\r\n <el-icon><ArrowDown /></el-icon>\r\n </div>\r\n </template>\r\n <el-table\r\n :data=\"allSelectedRows\"\r\n border\r\n max-height=\"300\"\r\n :row-key=\"rowKey\"\r\n size=\"small\"\r\n >\r\n <slot name=\"selected-columns\" :remove=\"handleRemoveSelected\">\r\n <slot name=\"columns\" />\r\n <el-table-column label=\"操作\" width=\"60\" align=\"center\" fixed=\"right\">\r\n <template #default=\"{ row }\">\r\n <el-button link type=\"danger\" @click=\"handleRemoveSelected(row)\">移除</el-button>\r\n </template>\r\n </el-table-column>\r\n </slot>\r\n </el-table>\r\n </el-popover>\r\n </div>\r\n\r\n <div class=\"j-product-select__bottom-center\">\r\n <el-pagination\r\n v-model:current-page=\"pagination.page\"\r\n v-model:page-size=\"pagination.pageSize\"\r\n :page-sizes=\"pageSizes\"\r\n layout=\"total, prev, pager, next, sizes, jumper\"\r\n :total=\"pagination.total\"\r\n @current-change=\"loadData\"\r\n @size-change=\"loadData\"\r\n />\r\n </div>\r\n\r\n <div class=\"j-product-select__bottom-right\">\r\n <el-button @click=\"handleCancel\">取消</el-button>\r\n <el-button\r\n type=\"primary\"\r\n :disabled=\"allSelectedRows.length === 0\"\r\n @click=\"handleConfirm\"\r\n >\r\n 确定\r\n </el-button>\r\n </div>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { nextTick, reactive, ref, watch } from 'vue'\r\nimport { ElMessage } from 'element-plus'\r\nimport { ArrowDown } from '@element-plus/icons-vue'\r\nimport type { JProductSelectFetchApi, JProductSelectListResult } from './types'\r\n\r\ndefineOptions({\r\n name: 'JProductSelectDialog',\r\n})\r\n\r\ntype Row = Record<string, any>\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n fetchApi: JProductSelectFetchApi\r\n extraParams?: Record<string, any>\r\n title?: string\r\n width?: string\r\n rowKey?: string\r\n tableHeight?: string | number\r\n pageSizes?: number[]\r\n popoverWidth?: number\r\n zIndex?: number\r\n responseAdapter?: (res: any) => JProductSelectListResult\r\n loadErrorMessage?: string\r\n fetchOnOpen?: boolean\r\n teleported?: boolean\r\n }>(),\r\n {\r\n title: '选择产品',\r\n width: '1400px',\r\n rowKey: 'sku_code',\r\n tableHeight: 430,\r\n pageSizes: () => [10, 20, 50, 100],\r\n popoverWidth: 1100,\r\n loadErrorMessage: '加载产品列表失败',\r\n fetchOnOpen: true,\r\n teleported: true,\r\n },\r\n)\r\n\r\nconst visible = defineModel<boolean>({ default: false })\r\n\r\nconst emit = defineEmits<{\r\n confirm: [rows: Row[]]\r\n open: []\r\n closed: []\r\n}>()\r\n\r\nconst tableRef = ref()\r\nconst tableData = ref<Row[]>([])\r\nconst allSelectedRows = ref<Row[]>([])\r\nconst loading = ref(false)\r\nconst isRestoring = ref(false)\r\n\r\nconst pagination = reactive({\r\n page: 1,\r\n pageSize: 10,\r\n total: 0,\r\n})\r\n\r\nconst defaultAdapter = (res: any): JProductSelectListResult => {\r\n const list = res?.list || res?.data?.list || res?.data || []\r\n const total = res?.total ?? res?.data?.total ?? res?.data?.pageInfo?.totalNum ?? 0\r\n return {\r\n list: Array.isArray(list) ? list : [],\r\n total: Number(total) || 0,\r\n }\r\n}\r\n\r\nconst restoreSelection = () => {\r\n isRestoring.value = true\r\n nextTick(() => {\r\n const selectedKeys = new Set(allSelectedRows.value.map((r) => r[props.rowKey]))\r\n tableData.value.forEach((row) => {\r\n if (selectedKeys.has(row[props.rowKey])) {\r\n tableRef.value?.toggleRowSelection(row, true)\r\n }\r\n })\r\n nextTick(() => {\r\n isRestoring.value = false\r\n })\r\n })\r\n}\r\n\r\nconst loadData = async () => {\r\n loading.value = true\r\n try {\r\n const params: Record<string, any> = {\r\n pageIndex: pagination.page,\r\n pageSize: pagination.pageSize,\r\n ...(props.extraParams || {}),\r\n }\r\n const res = await props.fetchApi(params)\r\n const { list, total } = (props.responseAdapter || defaultAdapter)(res)\r\n tableData.value = list\r\n pagination.total = total\r\n restoreSelection()\r\n } catch (e) {\r\n console.error(props.loadErrorMessage, e)\r\n ElMessage.error(props.loadErrorMessage)\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst onSelectionChange = (rows: Row[]) => {\r\n if (isRestoring.value) return\r\n const key = props.rowKey\r\n const currentPageKeys = new Set(tableData.value.map((r) => r[key]))\r\n const otherPageSelected = allSelectedRows.value.filter((r) => !currentPageKeys.has(r[key]))\r\n allSelectedRows.value = [...otherPageSelected, ...rows]\r\n}\r\n\r\nconst handleRemoveSelected = (row: Row) => {\r\n const key = props.rowKey\r\n allSelectedRows.value = allSelectedRows.value.filter((r) => r[key] !== row[key])\r\n const inCurrentPage = tableData.value.find((r) => r[key] === row[key])\r\n if (inCurrentPage) {\r\n tableRef.value?.toggleRowSelection(inCurrentPage, false)\r\n }\r\n}\r\n\r\nconst handleSearch = () => {\r\n pagination.page = 1\r\n void loadData()\r\n}\r\n\r\nconst handleReset = async () => {\r\n pagination.page = 1\r\n await nextTick()\r\n void loadData()\r\n}\r\n\r\nconst clearDialogState = () => {\r\n pagination.page = 1\r\n pagination.pageSize = 10\r\n pagination.total = 0\r\n tableData.value = []\r\n allSelectedRows.value = []\r\n tableRef.value?.clearSelection?.()\r\n}\r\n\r\nconst handleCancel = () => {\r\n visible.value = false\r\n}\r\n\r\nconst handleClosed = () => {\r\n clearDialogState()\r\n emit('closed')\r\n}\r\n\r\nconst handleConfirm = () => {\r\n emit('confirm', allSelectedRows.value)\r\n visible.value = false\r\n}\r\n\r\nwatch(visible, (v) => {\r\n if (v) {\r\n emit('open')\r\n pagination.page = 1\r\n if (props.fetchOnOpen) void loadData()\r\n }\r\n})\r\n\r\ndefineExpose({\r\n reload: loadData,\r\n clearSelected: () => {\r\n allSelectedRows.value = []\r\n tableRef.value?.clearSelection?.()\r\n },\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.j-product-select__filters {\r\n margin-bottom: 12px;\r\n margin-top: 12px;\r\n}\r\n\r\n.j-product-select__bottom {\r\n display: grid;\r\n grid-template-columns: 240px 1fr 220px;\r\n align-items: center;\r\n gap: 12px;\r\n margin-top: 12px;\r\n}\r\n\r\n.j-product-select__bottom-right {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 12px;\r\n}\r\n\r\n.j-product-select__selected-trigger {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n width: 210px;\r\n height: 32px;\r\n padding: 0 12px;\r\n border: 1px solid #dcdfe6;\r\n border-radius: 4px;\r\n font-size: 14px;\r\n color: #a8abb2;\r\n background: #f5f7fa;\r\n cursor: not-allowed;\r\n user-select: none;\r\n\r\n &.is-active {\r\n color: #606266;\r\n background: #fff;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n border-color: #409eff;\r\n }\r\n }\r\n}\r\n</style>\r\n","import type { Component } from 'vue'\r\nimport type {\r\n CreateDocDetailOptions,\r\n DocDetailAdapters,\r\n DocDetailComponents,\r\n DocDetailRegistryItem,\r\n} from './types'\r\n\r\ntype NormalizedRegistry = Record<\r\n string,\r\n {\r\n component: Component\r\n orderNoProp: string\r\n }\r\n>\r\n\r\nconst registry: NormalizedRegistry = {}\r\nlet adapters: DocDetailAdapters = {}\r\nlet initialized = false\r\n\r\nfunction normalizeComponents(components: DocDetailComponents): NormalizedRegistry {\r\n const result: NormalizedRegistry = {}\r\n Object.entries(components).forEach(([type, item]) => {\r\n if (!item) return\r\n if (typeof item === 'object' && 'component' in item) {\r\n const conf = item as DocDetailRegistryItem\r\n result[type] = {\r\n component: conf.component,\r\n orderNoProp: conf.orderNoProp || 'orderNo',\r\n }\r\n } else {\r\n result[type] = {\r\n component: item as Component,\r\n orderNoProp: 'orderNo',\r\n }\r\n }\r\n })\r\n return result\r\n}\r\n\r\n/**\r\n * 注册全局单据详情:组件映射 + 接口适配器\r\n * 建议在 main.ts 中 pinia 之后调用一次\r\n */\r\nexport function createDocDetail(options: CreateDocDetailOptions) {\r\n const next = normalizeComponents(options.components || {})\r\n Object.keys(registry).forEach((key) => delete registry[key])\r\n Object.assign(registry, next)\r\n adapters = { ...(options.adapters || {}) }\r\n initialized = true\r\n return {\r\n registry,\r\n adapters,\r\n }\r\n}\r\n\r\n/** 合并追加注册(可选,用于微前端/按模块懒注册) */\r\nexport function registerDocDetail(options: Partial<CreateDocDetailOptions>) {\r\n if (options.components) {\r\n Object.assign(registry, normalizeComponents(options.components))\r\n }\r\n if (options.adapters) {\r\n adapters = { ...adapters, ...options.adapters }\r\n }\r\n initialized = true\r\n}\r\n\r\nexport function getDocDetailRegistry() {\r\n return registry\r\n}\r\n\r\nexport function getDocDetailAdapters(): DocDetailAdapters {\r\n return adapters\r\n}\r\n\r\nexport function isDocDetailInitialized() {\r\n return initialized\r\n}\r\n\r\nexport function getDocDetailEntry(type: string) {\r\n return registry[type] || null\r\n}\r\n","import { defineStore } from 'pinia'\r\nimport { nextTick, ref } from 'vue'\r\nimport type { DocDetailType } from './types'\r\nimport { getDocDetailEntry } from './registry'\r\n\r\n/**\r\n * 全局单据详情状态\r\n * 业务页:DocNoLink / store.open(type, orderNo)\r\n * 宿主:DocDetailHost 按 registry 渲染\r\n */\r\nexport const useDocDetailStore = defineStore('jgyDocDetail', () => {\r\n const visible = ref(false)\r\n const type = ref<DocDetailType>('')\r\n const orderNo = ref('')\r\n\r\n async function open(docType: DocDetailType, no: string) {\r\n if (!docType || !no) return\r\n\r\n if (!getDocDetailEntry(docType)) {\r\n console.warn(`[JDocDetail] 未注册的单据类型: ${docType},请先 createDocDetail 注册`)\r\n return\r\n }\r\n\r\n // 先挂载对应详情组件(visible=false),下一帧再打开\r\n // 避免首次点击时组件带着 true 挂载导致不显示\r\n type.value = docType\r\n orderNo.value = no\r\n visible.value = false\r\n await nextTick()\r\n visible.value = true\r\n }\r\n\r\n function close() {\r\n visible.value = false\r\n }\r\n\r\n function reset() {\r\n visible.value = false\r\n type.value = ''\r\n orderNo.value = ''\r\n }\r\n\r\n return {\r\n visible,\r\n type,\r\n orderNo,\r\n open,\r\n close,\r\n reset,\r\n }\r\n})\r\n","const TOAST_ID = 'jgy-doc-copy-toast'\r\nconst TOAST_Z_INDEX = 2147483647\r\n\r\nfunction showCopyToast(type: 'success' | 'error', message: string) {\r\n document.getElementById(TOAST_ID)?.remove()\r\n\r\n const el = document.createElement('div')\r\n el.id = TOAST_ID\r\n el.setAttribute('role', 'alert')\r\n el.textContent = message\r\n\r\n Object.assign(el.style, {\r\n position: 'fixed',\r\n top: '20px',\r\n left: '50%',\r\n transform: 'translateX(-50%)',\r\n zIndex: String(TOAST_Z_INDEX),\r\n padding: '10px 20px',\r\n borderRadius: '4px',\r\n fontSize: '14px',\r\n lineHeight: '1.4',\r\n boxShadow: '0 2px 12px rgba(0, 0, 0, 0.12)',\r\n pointerEvents: 'none',\r\n opacity: '1',\r\n transition: 'opacity 0.3s ease',\r\n })\r\n\r\n if (type === 'success') {\r\n el.style.background = '#f0f9eb'\r\n el.style.color = '#67c23a'\r\n el.style.border = '1px solid #e1f3d8'\r\n } else {\r\n el.style.background = '#fef0f0'\r\n el.style.color = '#f56c6c'\r\n el.style.border = '1px solid #fde2e2'\r\n }\r\n\r\n document.body.appendChild(el)\r\n\r\n window.setTimeout(() => {\r\n el.style.opacity = '0'\r\n window.setTimeout(() => el.remove(), 300)\r\n }, 1500)\r\n}\r\n\r\nfunction copyWithFallback(text: string): boolean {\r\n const textarea = document.createElement('textarea')\r\n textarea.value = text\r\n textarea.setAttribute('readonly', '')\r\n textarea.style.position = 'fixed'\r\n textarea.style.left = '-9999px'\r\n textarea.style.top = '0'\r\n document.body.appendChild(textarea)\r\n textarea.select()\r\n textarea.setSelectionRange(0, text.length)\r\n\r\n let ok = false\r\n try {\r\n ok = document.execCommand('copy')\r\n } catch {\r\n ok = false\r\n }\r\n\r\n document.body.removeChild(textarea)\r\n return ok\r\n}\r\n\r\nexport async function copyText(text?: string | number | null) {\r\n if (text == null || text === '') return\r\n\r\n const value = String(text)\r\n\r\n try {\r\n if (window.isSecureContext && navigator.clipboard?.writeText) {\r\n await navigator.clipboard.writeText(value)\r\n showCopyToast('success', '已复制')\r\n return\r\n }\r\n } catch {\r\n // HTTP 或非安全上下文下降级到 execCommand\r\n }\r\n\r\n if (copyWithFallback(value)) {\r\n showCopyToast('success', '已复制')\r\n return\r\n }\r\n\r\n showCopyToast('error', '复制失败,请手动复制')\r\n}\r\n","<!--\r\n 单据号展示链接:点击后由全局 DocDetailHost 按 type 打开对应详情\r\n 用法:<DocNoLink type=\"receipt\" :order-no=\"row.receipt_order_no\" />\r\n-->\r\n<template>\r\n <span v-if=\"orderNo\" class=\"doc-no-link\">\r\n <el-button link type=\"primary\" class=\"doc-no-link__text\" @click.stop=\"handleClick\">\r\n {{ orderNo }}\r\n </el-button>\r\n <el-button\r\n v-if=\"showCopy\"\r\n link\r\n class=\"doc-no-link__copy\"\r\n @click.stop=\"handleCopy\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n </span>\r\n <span v-else class=\"doc-no-link doc-no-link--empty\">-</span>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport { useDocDetailStore } from './store'\r\nimport type { DocDetailType } from './types'\r\nimport { copyText } from './utils/copyText'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n type: DocDetailType\r\n orderNo: string\r\n /** 是否显示复制按钮,默认 true */\r\n showCopy?: boolean\r\n }>(),\r\n {\r\n showCopy: true,\r\n },\r\n)\r\n\r\nconst docDetailStore = useDocDetailStore()\r\n\r\nconst handleClick = () => {\r\n if (!props.orderNo) return\r\n docDetailStore.open(props.type, props.orderNo)\r\n}\r\n\r\nconst handleCopy = () => {\r\n if (!props.orderNo) return\r\n copyText(props.orderNo)\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.doc-no-link {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 2px;\r\n vertical-align: middle;\r\n\r\n &__text {\r\n padding: 0;\r\n height: auto;\r\n font-size: inherit;\r\n }\r\n\r\n &__copy {\r\n padding: 0;\r\n height: auto;\r\n color: #c0c4cc;\r\n\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n\r\n &--empty {\r\n color: #909399;\r\n }\r\n}\r\n</style>\r\n","<!--\r\n 全局单据详情宿主:挂在 MainLayout\r\n 按 store.type + registry 动态渲染对应纯展示详情\r\n 新增单据:createDocDetail / registerDocDetail 注册即可,无需改此文件\r\n-->\r\n<template>\r\n <component\r\n :is=\"entry.component\"\r\n v-if=\"entry && type\"\r\n :model-value=\"visible\"\r\n v-bind=\"orderNoBind\"\r\n @update:model-value=\"onVisibleChange\"\r\n />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { storeToRefs } from 'pinia'\r\nimport { useDocDetailStore } from './store'\r\nimport { getDocDetailEntry } from './registry'\r\n\r\nconst docDetailStore = useDocDetailStore()\r\nconst { visible, type, orderNo } = storeToRefs(docDetailStore)\r\n\r\nconst entry = computed(() => {\r\n if (!type.value) return null\r\n return getDocDetailEntry(type.value)\r\n})\r\n\r\nconst orderNoBind = computed(() => {\r\n if (!entry.value) return {}\r\n return {\r\n [entry.value.orderNoProp]: orderNo.value,\r\n }\r\n})\r\n\r\nconst onVisibleChange = (val: boolean) => {\r\n if (val) {\r\n docDetailStore.visible = true\r\n } else {\r\n docDetailStore.close()\r\n }\r\n}\r\n</script>\r\n","export const RECEIPT_TYPE_MAP: Record<number, string> = {\r\n 1: '采购订单',\r\n 2: '退换货订单',\r\n 3: '采购补货',\r\n 4: '采购继续来货',\r\n 5: '调拨收货',\r\n 99: '其他收货',\r\n}\r\n\r\nexport const getReceiptTypeLabel = (type?: number | string | null) => {\r\n if (type == null || type === '') return '-'\r\n const key = Number(type)\r\n if (!Number.isFinite(key)) return '-'\r\n return RECEIPT_TYPE_MAP[key] ?? '-'\r\n}\r\n\r\nexport const RECEIPT_STATUS_MAP: Record<number, string> = {\r\n 300: '待收货',\r\n 400: '部分收货',\r\n 500: '已完成',\r\n 600: '异常',\r\n}\r\n\r\nexport const ABNORMAL_INITIATE_STATUS_MAP: Record<number, string> = {\r\n 1: '未发起',\r\n 2: '部分发起',\r\n 3: '全部发起',\r\n}\r\n\r\nexport const calcAbnormalInitiateStatus = (\r\n orderItems: Array<{ id?: number; receive_qty?: number; notice_receive_qty?: number }>,\r\n occupiedItemIds: number[] = [],\r\n) => {\r\n const abnormalItemIds = orderItems\r\n .filter((item) => (Number(item.receive_qty) || 0) !== (Number(item.notice_receive_qty) || 0))\r\n .map((item) => Number(item.id))\r\n .filter((id) => id > 0)\r\n\r\n const total = abnormalItemIds.length\r\n if (total === 0) {\r\n return { sub_status: 3, sub_status_name: ABNORMAL_INITIATE_STATUS_MAP[3] }\r\n }\r\n\r\n const occupiedSet = new Set(occupiedItemIds.map((id) => Number(id)))\r\n const covered = abnormalItemIds.filter((id) => occupiedSet.has(id)).length\r\n\r\n if (covered === 0) {\r\n return { sub_status: 1, sub_status_name: ABNORMAL_INITIATE_STATUS_MAP[1] }\r\n }\r\n if (covered < total) {\r\n return { sub_status: 2, sub_status_name: ABNORMAL_INITIATE_STATUS_MAP[2] }\r\n }\r\n return { sub_status: 3, sub_status_name: ABNORMAL_INITIATE_STATUS_MAP[3] }\r\n}\r\n\r\nexport const getReceiptStatusLabel = (\r\n status?: number,\r\n baseLabel?: string,\r\n subMemo?: string,\r\n) => {\r\n const key = Number(status)\r\n const base = baseLabel || RECEIPT_STATUS_MAP[key] || (status != null ? String(status) : '-')\r\n if (key === 600 && subMemo) {\r\n return `${base}(${subMemo})`\r\n }\r\n return base\r\n}\r\n\r\nexport const resolveAbnormalSubMemo = (\r\n row: {\r\n status?: number\r\n status_sub_memo?: string\r\n abnormal_sub_status_name?: string\r\n order_item?: any\r\n abnormal_occupied_item_ids?: number[]\r\n },\r\n flatOrderItems?: Array<{ id?: number; receive_qty?: number; notice_receive_qty?: number }>,\r\n) => {\r\n if (Number(row.status) !== 600) return ''\r\n if (row.status_sub_memo) return row.status_sub_memo\r\n if (row.abnormal_sub_status_name) return row.abnormal_sub_status_name\r\n if (flatOrderItems?.length) {\r\n return calcAbnormalInitiateStatus(flatOrderItems, row.abnormal_occupied_item_ids || [])\r\n .sub_status_name\r\n }\r\n return ''\r\n}\r\n","export interface FlatOrderItem extends Record<string, any> {\r\n _skuGroupSize?: number\r\n _skuGroupIndex?: number\r\n}\r\n\r\n/** 将 order_item 按 SKU 分组对象或数组展平为子行 */\r\nexport function flattenOrderItems(orderItem: any, withSkuGroupMeta = true): FlatOrderItem[] {\r\n if (!orderItem) return []\r\n if (Array.isArray(orderItem)) {\r\n return orderItem.map((item: any, idx: number) => ({\r\n ...item,\r\n ...(withSkuGroupMeta ? { _skuGroupSize: 1, _skuGroupIndex: idx } : {}),\r\n }))\r\n }\r\n if (typeof orderItem !== 'object') return []\r\n\r\n return Object.values(orderItem).flatMap((skuGroup: any) => {\r\n const items = skuGroup?.order_item\r\n if (!Array.isArray(items)) {\r\n if (skuGroup?.sku_code || skuGroup?.id) {\r\n return withSkuGroupMeta\r\n ? [{ ...skuGroup, _skuGroupSize: 1, _skuGroupIndex: 0 }]\r\n : [skuGroup]\r\n }\r\n return []\r\n }\r\n const groupSize = items.length\r\n return items.map((item: any, idx: number) => ({\r\n ...item,\r\n sku_info: item.sku_info || skuGroup.sku_info,\r\n sku_image: item.sku_image || skuGroup.sku_image,\r\n ...(withSkuGroupMeta ? { _skuGroupSize: groupSize, _skuGroupIndex: idx } : {}),\r\n }))\r\n })\r\n}\r\n\r\nexport function sumOrderItemField(orderItem: any, field: string): number {\r\n return flattenOrderItems(orderItem, false).reduce(\r\n (sum, item) => sum + Number(item?.[field] ?? 0),\r\n 0,\r\n )\r\n}\r\n","<template>\r\n <span class=\"related-doc-no-copy\">\r\n <span v-if=\"label\" class=\"related-doc-no-copy__label\">{{ label }}</span>\r\n <span :class=\"{ 'link-text': link }\">{{ displayText }}</span>\r\n <el-icon\r\n v-if=\"copyable\"\r\n class=\"copy-btn\"\r\n size=\"12\"\r\n @click.stop=\"handleCopy\"\r\n ><CopyDocument /></el-icon>\r\n </span>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport { copyText } from '../JDocDetail/utils/copyText'\r\n\r\nconst props = withDefaults(defineProps<{\r\n value?: string | number | null\r\n label?: string\r\n link?: boolean\r\n}>(), {\r\n link: true,\r\n})\r\n\r\nconst displayText = computed(() => {\r\n const v = props.value\r\n if (v == null || v === '') return '-'\r\n return String(v)\r\n})\r\n\r\nconst copyable = computed(() => props.value != null && props.value !== '')\r\n\r\nconst handleCopy = () => {\r\n if (!copyable.value) return\r\n copyText(props.value)\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.related-doc-no-copy {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 4px;\r\n}\r\n\r\n.related-doc-no-copy__label {\r\n color: inherit;\r\n}\r\n\r\n.link-text {\r\n color: #409eff;\r\n}\r\n\r\n.copy-btn {\r\n cursor: pointer;\r\n color: #c0c4cc;\r\n flex-shrink: 0;\r\n}\r\n\r\n.copy-btn:hover {\r\n color: #409eff;\r\n}\r\n</style>\r\n","export interface FlatOrderItem extends Record<string, any> {\r\n _skuGroupSize?: number\r\n _skuGroupIndex?: number\r\n}\r\n\r\n/** 将 order_item 按 SKU 分组对象或数组展平为子行 */\r\nexport function flattenOrderItems(orderItem: any, withSkuGroupMeta = true): FlatOrderItem[] {\r\n if (!orderItem) return []\r\n if (Array.isArray(orderItem)) {\r\n return orderItem.map((item: any, idx: number) => ({\r\n ...item,\r\n ...(withSkuGroupMeta ? { _skuGroupSize: 1, _skuGroupIndex: idx } : {}),\r\n }))\r\n }\r\n if (typeof orderItem !== 'object') return []\r\n\r\n return Object.values(orderItem).flatMap((skuGroup: any) => {\r\n const items = skuGroup?.order_item\r\n if (!Array.isArray(items)) {\r\n if (skuGroup?.sku_code || skuGroup?.id) {\r\n return withSkuGroupMeta\r\n ? [{ ...skuGroup, _skuGroupSize: 1, _skuGroupIndex: 0 }]\r\n : [skuGroup]\r\n }\r\n return []\r\n }\r\n const groupSize = items.length\r\n return items.map((item: any, idx: number) => ({\r\n ...item,\r\n sku_info: item.sku_info || skuGroup.sku_info,\r\n sku_image: item.sku_image || skuGroup.sku_image,\r\n ...(withSkuGroupMeta ? { _skuGroupSize: groupSize, _skuGroupIndex: idx } : {}),\r\n }))\r\n })\r\n}\r\n\r\nexport function sumOrderItemField(orderItem: any, field: string): number {\r\n return flattenOrderItems(orderItem, false).reduce(\r\n (sum, item) => sum + Number(item?.[field] ?? 0),\r\n 0,\r\n )\r\n}\r\n","export const RECEIPT_TYPE_MAP: Record<number, string> = {\r\n 1: '采购订单',\r\n 2: '退换货订单',\r\n 3: '采购补货',\r\n 4: '采购继续来货',\r\n 5: '调拨收货',\r\n 99: '其他收货',\r\n}\r\n\r\nexport const RECEIPT_STATUS_MAP: Record<number, string> = {\r\n 300: '待收货',\r\n 400: '部分收货',\r\n 500: '已完成',\r\n 600: '异常',\r\n}\r\n\r\nexport const getReceiptTypeLabel = (type?: number | string | null) => {\r\n if (type == null || type === '') return '-'\r\n const key = Number(type)\r\n if (!Number.isFinite(key)) return '-'\r\n return RECEIPT_TYPE_MAP[key] ?? '-'\r\n}\r\n\r\nexport const getReceiptStatusLabel = (status?: number | string | null) => {\r\n if (status == null || status === '') return '-'\r\n const key = Number(status)\r\n if (!Number.isFinite(key)) return '-'\r\n return RECEIPT_STATUS_MAP[key] ?? String(status)\r\n}\r\n\r\nexport const INBOUND_TYPE_MAP: Record<number, string> = {\r\n 1: '采购入库',\r\n 2: '调拨入库',\r\n 3: '加工入库',\r\n 4: '换货入库',\r\n 5: '补货入库',\r\n 99: '其他入库',\r\n}\r\n\r\nexport const INBOUND_STATUS_MAP: Record<number, string> = {\r\n 100: '待上架完成',\r\n 200: '部分入库',\r\n 300: '已完成',\r\n}\r\n\r\nexport const getInboundTypeLabel = (type?: number | string | null) => {\r\n if (type == null || type === '') return '-'\r\n const key = Number(type)\r\n if (!Number.isFinite(key)) return '-'\r\n return INBOUND_TYPE_MAP[key] ?? '-'\r\n}\r\n\r\nexport const getInboundStatusLabel = (status?: number | string | null) => {\r\n if (status == null || status === '') return '-'\r\n const key = Number(status)\r\n if (!Number.isFinite(key)) return '-'\r\n return INBOUND_STATUS_MAP[key] ?? String(status)\r\n}\r\n\r\nconst PUTAWAY_STATUS_COMPLETED = 300\r\n\r\nexport const getPutawayGoodQty = (row?: {\r\n status?: number\r\n good_qty?: number\r\n pending_good_qty?: number\r\n} | null) => {\r\n const status = Number(row?.status)\r\n if (status === PUTAWAY_STATUS_COMPLETED) return Number(row?.good_qty ?? 0)\r\n return Number(row?.pending_good_qty ?? 0)\r\n}\r\n\r\nexport const getPutawayBadQty = (row?: {\r\n status?: number\r\n bad_qty?: number\r\n pending_bad_qty?: number\r\n} | null) => {\r\n const status = Number(row?.status)\r\n if (status === PUTAWAY_STATUS_COMPLETED) return Number(row?.bad_qty ?? 0)\r\n return Number(row?.pending_bad_qty ?? 0)\r\n}\r\n\r\ntype PutawayLocationItem = {\r\n inventory_status?: number\r\n location_code?: string\r\n location_name?: string\r\n putaway_qty?: number\r\n location_type_name?: string\r\n location_display?: string\r\n}\r\n\r\nconst formatPutawayLocationList = (\r\n locationList?: PutawayLocationItem[] | null,\r\n inventoryStatus?: number,\r\n) => {\r\n const list = (locationList || []).filter((item) => {\r\n if (inventoryStatus == null) return true\r\n return Number(item.inventory_status || 1) === inventoryStatus\r\n })\r\n if (!list.length) return '-'\r\n return list\r\n .map((item) => {\r\n if (item.location_display) return item.location_display\r\n const label = (item.location_name || item.location_code || '').trim() || '-'\r\n const qty = Number(item.putaway_qty || 0)\r\n const base = qty > 0 ? `${label}*${qty}` : label\r\n return item.location_type_name ? `${base}(${item.location_type_name})` : base\r\n })\r\n .join(',')\r\n}\r\n\r\nexport const getPutawayGoodLocation = (row?: {\r\n location_list?: PutawayLocationItem[]\r\n location_good_display?: string\r\n} | null) => {\r\n if (row?.location_good_display) return row.location_good_display\r\n return formatPutawayLocationList(row?.location_list, 1)\r\n}\r\n\r\nexport const getPutawayBadLocation = (row?: {\r\n location_list?: PutawayLocationItem[]\r\n location_bad_display?: string\r\n} | null) => {\r\n if (row?.location_bad_display) return row.location_bad_display\r\n return formatPutawayLocationList(row?.location_list, 2)\r\n}\r\n","import { onMounted, ref, watch } from 'vue'\r\n\r\ntype ExpandOptions = {\r\n defaultExpandAll?: () => boolean\r\n loading?: () => boolean\r\n}\r\n\r\n/** 关联单据折叠表:默认展开,异步加载完成后重新展开 */\r\nexport function useRelatedCollapseExpand(\r\n getOrders: () => Record<string, any>[],\r\n getBatchKey: (order: Record<string, any>, idx: number) => string,\r\n options: ExpandOptions = {},\r\n) {\r\n const expandedKeys = ref<string[]>([])\r\n\r\n const shouldExpand = () => options.defaultExpandAll?.() ?? true\r\n\r\n const expandAll = () => {\r\n if (!shouldExpand()) {\r\n expandedKeys.value = []\r\n return\r\n }\r\n const orders = getOrders()\r\n if (!orders.length) return\r\n expandedKeys.value = orders.map((order, idx) => getBatchKey(order, idx))\r\n }\r\n\r\n const toggleRow = (key: string) => {\r\n expandedKeys.value = expandedKeys.value.includes(key)\r\n ? expandedKeys.value.filter((k) => k !== key)\r\n : [...expandedKeys.value, key]\r\n }\r\n\r\n watch(getOrders, expandAll, { immediate: true, deep: true })\r\n\r\n watch(\r\n () => [options.loading?.() ?? false, getOrders().length] as const,\r\n ([loading, count]) => {\r\n if (!loading && count > 0) expandAll()\r\n },\r\n { immediate: true },\r\n )\r\n\r\n onMounted(expandAll)\r\n\r\n return { expandedKeys, expandAll, toggleRow }\r\n}\r\n","<template>\r\n <el-table\r\n class=\"related-collapse-table\"\r\n :data=\"flatTableData\"\r\n border\r\n size=\"small\"\r\n row-key=\"_rowKey\"\r\n :span-method=\"spanMethod\"\r\n :row-class-name=\"getBatchRowClassName\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联收货单\"\r\n >\r\n <el-table-column width=\"50\" align=\"center\" class-name=\"col-toggle\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"row._isBatch\" class=\"toggle-btn\" @click.stop=\"toggleRow(row._rowKey)\">\r\n <el-icon v-if=\"expandedKeys.includes(row._rowKey)\"><CaretBottom /></el-icon>\r\n <el-icon v-else><CaretRight /></el-icon>\r\n </span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"row._isBatch\" class=\"group-info-row\">\r\n <span class=\"info-item\">\r\n <RelatedDocNoCopy label=\"收货单号:\" :value=\"row.receipt_order_no\" />\r\n </span>\r\n <span class=\"info-item\">收货类型:{{ getReceiptTypeLabel(row.receipt_type) }}</span>\r\n <span class=\"info-item\">收货仓库:{{ row.warehouse_name || '-' }}</span>\r\n <span v-if=\"row.association_order_no\" class=\"info-item\">\r\n <RelatedDocNoCopy label=\"关联单号:\" :value=\"row.association_order_no\" />\r\n </span>\r\n <span class=\"info-item\">\r\n 收货人/时间:{{ row.receipt_leader_name || '-' }} / {{ row.receipt_date || '-' }}\r\n </span>\r\n <span class=\"info-item\">\r\n 状态:\r\n <el-tag :type=\"getReceiptStatusTagType(row.status)\" size=\"small\">\r\n {{ getReceiptStatusLabel(row.status) }}\r\n </el-tag>\r\n </span>\r\n </div>\r\n <template v-else>\r\n <el-image\r\n v-if=\"row.sku_image?.main_image\"\r\n :src=\"row.sku_image.main_image\"\r\n style=\"width:32px;height:32px\"\r\n fit=\"cover\"\r\n />\r\n <el-icon v-else size=\"20\" color=\"#c0c4cc\"><Picture /></el-icon>\r\n </template>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!row._isBatch\">\r\n <div>{{ row.sku_info?.product_name || '-' }}</div>\r\n <div class=\"sku-text\">\r\n <JSkuLink :code=\"row.sku_code\" />\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单号\" min-width=\"130\">\r\n <template #default=\"{ row }\">\r\n <RelatedDocNoCopy v-if=\"!row._isBatch\" :value=\"row.purchase_no\" :link=\"false\" />\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"通知收货量\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ row.notice_receive_qty ?? '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"实际收货量\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ row.receive_qty ?? '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"贴标\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!row._isBatch\">\r\n <div>通知:{{ formatLabelFlag(row.notice_label_flag) }}</div>\r\n <div>实际:{{ formatLabelFlag(row.label_flag) }}</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column v-if=\"showQcType\" label=\"质检类型\" width=\"100\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ qcTypeMap[row.qc_type] || '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号\" min-width=\"120\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ row.user_account_name || '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { CaretBottom, CaretRight, Picture } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport RelatedDocNoCopy from '../RelatedDocNoCopy.vue'\r\nimport { flattenOrderItems } from '../utils/flattenOrderItems'\r\nimport { getReceiptStatusLabel, getReceiptTypeLabel } from '../utils/labels'\r\nimport { useRelatedCollapseExpand } from '../utils/useRelatedCollapseExpand'\r\n\r\ndefineOptions({ name: 'RelatedReceiptOrderTable' })\r\n\r\nconst props = withDefaults(defineProps<{\r\n orders?: Record<string, any>[]\r\n loading?: boolean\r\n showQcType?: boolean\r\n defaultExpandAll?: boolean\r\n}>(), {\r\n orders: () => [],\r\n loading: false,\r\n showQcType: false,\r\n defaultExpandAll: true,\r\n})\r\n\r\nconst qcTypeMap: Record<number, string> = { 1: '仓库', 2: '预检', 3: '免检', 4: '加工质检' }\r\nconst COLUMN_COUNT = computed(() => (props.showQcType ? 9 : 8))\r\n\r\nconst getBatchKey = (order: Record<string, any>, idx: number) =>\r\n `r-${order.receipt_order_no || idx}`\r\n\r\nconst { expandedKeys, toggleRow } = useRelatedCollapseExpand(\r\n () => props.orders || [],\r\n getBatchKey,\r\n {\r\n defaultExpandAll: () => props.defaultExpandAll,\r\n loading: () => props.loading,\r\n },\r\n)\r\n\r\nconst flatTableData = computed(() => {\r\n const rows: Record<string, any>[] = []\r\n ;(props.orders || []).forEach((order, idx) => {\r\n const key = getBatchKey(order, idx)\r\n rows.push({ ...order, _rowKey: key, _isBatch: true })\r\n if (expandedKeys.value.includes(key)) {\r\n flattenOrderItems(order.order_item).forEach((item) => {\r\n rows.push({\r\n ...item,\r\n _rowKey: `ri-${order.receipt_order_no}-${item.id || item.purchase_no}`,\r\n _isBatch: false,\r\n })\r\n })\r\n }\r\n })\r\n return rows\r\n})\r\n\r\nconst spanMethod = ({ row, columnIndex }: { row: Record<string, any>; columnIndex: number }) => {\r\n if (row._isBatch) {\r\n if (columnIndex === 0) return [1, 1]\r\n if (columnIndex === 1) return [1, COLUMN_COUNT.value - 1]\r\n return [0, 0]\r\n }\r\n if ([1, 2].includes(columnIndex) && row._skuGroupSize > 1) {\r\n return row._skuGroupIndex === 0 ? [row._skuGroupSize, 1] : [0, 0]\r\n }\r\n return [1, 1]\r\n}\r\n\r\nconst getBatchRowClassName = ({ row }: { row: Record<string, any> }) =>\r\n row._isBatch ? 'batch-summary-row' : ''\r\n\r\nconst formatLabelFlag = (flag?: number | null) =>\r\n flag == null ? '-' : Number(flag) === 1 ? '否' : '是'\r\n\r\nconst getReceiptStatusTagType = (status?: number) => {\r\n if (status === 500) return 'success'\r\n if (status === 600) return 'danger'\r\n if (status === 300 || status === 400) return 'warning'\r\n return 'info'\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n@use '../relatedDocCollapse.scss';\r\n</style>\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联质检单\"\r\n >\r\n <el-table-column label=\"单据信息\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div class=\"doc-info-line\">\r\n <RelatedDocNoCopy label=\"质检单:\" :value=\"row.qc_order_no\" />\r\n <el-tag v-if=\"row.urgent_flag == 2\" type=\"danger\" size=\"small\">急</el-tag>\r\n </div>\r\n <div>\r\n <RelatedDocNoCopy label=\"收货单:\" :value=\"row.receipt_order_no\" />\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"质检属性\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <div>类型:{{ qcTypeMap[row.qc_type] || '-' }}</div>\r\n <div>方式:{{ qcMethodMap[row.qc_method] || '-' }}</div>\r\n <div>\r\n 状态:\r\n <el-tag :type=\"getStatusTagType(row.status)\" size=\"small\">\r\n {{ statusMap[row.status] || '-' }}\r\n </el-tag>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"产品信息\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div>品名:{{ row.sku_info?.product_name || '-' }}</div>\r\n <div>SKU:<JSkuLink :code=\"row.sku_code\" /></div>\r\n <img v-if=\"row.sku_image?.main_image\" :src=\"row.sku_image.main_image\" class=\"thumb\" />\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"质检量\" width=\"80\" align=\"center\" prop=\"need_qc_qty\" />\r\n <el-table-column label=\"良品量\" width=\"80\" align=\"center\" prop=\"total_good_qty\" />\r\n <el-table-column label=\"次品量\" width=\"80\" align=\"center\" prop=\"total_bad_qty\" />\r\n <el-table-column label=\"收货人\" min-width=\"80\" prop=\"receipt_leader_name\" />\r\n <el-table-column label=\"质检员\" min-width=\"80\" prop=\"qc_leader_name\" />\r\n <el-table-column label=\"到货日期\" min-width=\"110\" prop=\"receipt_date\" />\r\n <el-table-column label=\"质检日期\" min-width=\"110\" prop=\"qc_date\" />\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport RelatedDocNoCopy from '../RelatedDocNoCopy.vue'\r\n\r\ndefineOptions({ name: 'RelatedQcOrderTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n\r\nconst qcTypeMap: Record<number, string> = { 1: '仓库', 2: '预检', 3: '免检', 4: '加工质检' }\r\nconst qcMethodMap: Record<number, string> = { 1: '抽检', 2: '全检' }\r\nconst statusMap: Record<number, string> = {\r\n 100: '待审核',\r\n 200: '审核未通过',\r\n 300: '质检中',\r\n 400: '已质检',\r\n 600: '已作废',\r\n}\r\n\r\nconst getStatusTagType = (status?: number) => {\r\n if (status === 400) return 'success'\r\n if (status === 300) return 'warning'\r\n if (status === 200) return 'danger'\r\n return 'info'\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.doc-info-line {\r\n display: flex;\r\n align-items: center;\r\n gap: 4px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.thumb {\r\n width: 32px;\r\n height: 32px;\r\n object-fit: cover;\r\n border-radius: 3px;\r\n margin-top: 4px;\r\n}\r\n</style>\r\n","<template>\r\n <el-table\r\n class=\"related-collapse-table\"\r\n :data=\"flatTableData\"\r\n border\r\n size=\"small\"\r\n row-key=\"_rowKey\"\r\n :span-method=\"spanMethod\"\r\n :row-class-name=\"getBatchRowClassName\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联入库单\"\r\n >\r\n <el-table-column width=\"50\" align=\"center\" class-name=\"col-toggle\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"row._isBatch\" class=\"toggle-btn\" @click.stop=\"toggleRow(row._rowKey)\">\r\n <el-icon v-if=\"expandedKeys.includes(row._rowKey)\"><CaretBottom /></el-icon>\r\n <el-icon v-else><CaretRight /></el-icon>\r\n </span>\r\n </template>\r\n </el-table-column>\r\n\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"row._isBatch\" class=\"group-info-row\">\r\n <span class=\"info-item\">\r\n <RelatedDocNoCopy label=\"入库单号:\" :value=\"row.inbound_order_no\" />\r\n </span>\r\n <span class=\"info-item\">入库类型:{{ getInboundTypeLabel(row.inbound_type) }}</span>\r\n <span class=\"info-item\">入库仓库:{{ row.warehouse_name || '-' }}</span>\r\n <span class=\"info-item\">\r\n 创建人/创建时间:{{ row.inbound_leader_name || '-' }} / {{ row.ctime || '-' }}\r\n </span>\r\n <span class=\"info-item\">总入库量:{{ totalQty(row) }}</span>\r\n <span class=\"info-item\">\r\n 状态:\r\n <el-tag :type=\"getInboundStatusTagType(row.status)\" size=\"small\">\r\n {{ getInboundStatusLabel(row.status) }}\r\n </el-tag>\r\n </span>\r\n <span class=\"info-item\">\r\n <RelatedDocNoCopy\r\n label=\"关联单号:\"\r\n :value=\"row.source_order_no || row.receipt_order_no\"\r\n />\r\n </span>\r\n <span class=\"info-item\">备注:{{ row.inbound_memo || '-' }}</span>\r\n </div>\r\n <template v-else>\r\n <el-image\r\n v-if=\"row.sku_image?.main_image\"\r\n :src=\"row.sku_image.main_image\"\r\n style=\"width:32px;height:32px\"\r\n fit=\"cover\"\r\n />\r\n <el-icon v-else size=\"20\" color=\"#c0c4cc\"><Picture /></el-icon>\r\n </template>\r\n </template>\r\n </el-table-column>\r\n\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!row._isBatch\" class=\"product-cell\">\r\n <div>{{ row.sku_info?.product_name || '-' }}</div>\r\n <div class=\"sku-text\">\r\n <JSkuLink :code=\"row.sku_code\" />\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n\r\n <el-table-column label=\"采购单号\" min-width=\"130\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!row._isBatch\" class=\"purchase-cell\">\r\n <RelatedDocNoCopy :value=\"row.purchase_no\" :link=\"false\" />\r\n </div>\r\n </template>\r\n </el-table-column>\r\n\r\n <el-table-column label=\"入库量\" width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ row.inbound_qty ?? '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n\r\n <el-table-column label=\"良品量\" width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ row.good_qty ?? '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n\r\n <el-table-column label=\"次品量\" width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ row.bad_qty ?? '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n\r\n <el-table-column label=\"店铺\" min-width=\"120\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"!row._isBatch\">{{ row.user_account_name || '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { CaretBottom, CaretRight, Picture } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport RelatedDocNoCopy from '../RelatedDocNoCopy.vue'\r\nimport { flattenOrderItems, sumOrderItemField } from '../utils/flattenOrderItems'\r\nimport { getInboundStatusLabel, getInboundTypeLabel } from '../utils/labels'\r\nimport { useRelatedCollapseExpand } from '../utils/useRelatedCollapseExpand'\r\n\r\ndefineOptions({ name: 'RelatedInboundOrderTable' })\r\n\r\nconst COLUMN_COUNT = 8\r\n\r\nconst props = withDefaults(defineProps<{\r\n orders?: Record<string, any>[]\r\n loading?: boolean\r\n defaultExpandAll?: boolean\r\n}>(), {\r\n orders: () => [],\r\n loading: false,\r\n defaultExpandAll: true,\r\n})\r\n\r\nconst getBatchKey = (order: Record<string, any>, idx: number) =>\r\n `ib-${order.inbound_order_no || idx}`\r\n\r\nconst { expandedKeys, toggleRow } = useRelatedCollapseExpand(\r\n () => props.orders || [],\r\n getBatchKey,\r\n {\r\n defaultExpandAll: () => props.defaultExpandAll,\r\n loading: () => props.loading,\r\n },\r\n)\r\n\r\nconst flatTableData = computed(() => {\r\n const rows: Record<string, any>[] = []\r\n ;(props.orders || []).forEach((order, idx) => {\r\n const key = getBatchKey(order, idx)\r\n rows.push({ ...order, _rowKey: key, _isBatch: true })\r\n if (expandedKeys.value.includes(key)) {\r\n flattenOrderItems(order.order_item).forEach((item) => {\r\n rows.push({\r\n ...item,\r\n _rowKey: `ii-${order.inbound_order_no}-${item.id || item.purchase_no || item.sku_code}`,\r\n _isBatch: false,\r\n })\r\n })\r\n }\r\n })\r\n return rows\r\n})\r\n\r\nconst spanMethod = ({ row, columnIndex }: { row: Record<string, any>; columnIndex: number }) => {\r\n if (row._isBatch) {\r\n if (columnIndex === 0) return [1, 1]\r\n if (columnIndex === 1) return [1, COLUMN_COUNT - 1]\r\n return [0, 0]\r\n }\r\n if ([1, 2].includes(columnIndex) && row._skuGroupSize > 1) {\r\n if (row._skuGroupIndex === 0) return [row._skuGroupSize, 1]\r\n return [0, 0]\r\n }\r\n return [1, 1]\r\n}\r\n\r\nconst getBatchRowClassName = ({ row }: { row: Record<string, any> }) =>\r\n row._isBatch ? 'batch-summary-row' : ''\r\n\r\nconst totalQty = (row: Record<string, any>) => sumOrderItemField(row.order_item, 'inbound_qty')\r\n\r\nconst getInboundStatusTagType = (status?: number) => {\r\n if (status === 300) return 'success'\r\n if (status === 200) return 'warning'\r\n return 'info'\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n@use '../relatedDocCollapse.scss';\r\n</style>\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联上架单\"\r\n >\r\n <el-table-column label=\"单据信息\" min-width=\"220\">\r\n <template #default=\"{ row }\">\r\n <div><RelatedDocNoCopy label=\"上架单:\" :value=\"row.putaway_order_no\" /></div>\r\n <div><RelatedDocNoCopy label=\"质检单:\" :value=\"row.qc_order_no\" /></div>\r\n <div><RelatedDocNoCopy label=\"入库单:\" :value=\"row.inbound_order_no\" /></div>\r\n <div><RelatedDocNoCopy label=\"采购单:\" :value=\"row.purchase_no\" :link=\"false\" /></div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"产品信息\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div>品名:{{ row.sku_info?.product_name || '-' }}</div>\r\n <div>SKU:<JSkuLink :code=\"row.sku_code\" /></div>\r\n <img v-if=\"row.sku_image?.main_image\" :src=\"row.sku_image.main_image\" class=\"thumb\" />\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"上架信息\" min-width=\"280\">\r\n <template #default=\"{ row }\">\r\n <div>仓库:{{ row.warehouse_name || '-' }}</div>\r\n <div>可用:{{ getPutawayGoodQty(row) }}</div>\r\n <div class=\"loc-text\">库位:{{ getPutawayGoodLocation(row) }}</div>\r\n <div>次品:{{ getPutawayBadQty(row) }}</div>\r\n <div class=\"loc-text\">库位:{{ getPutawayBadLocation(row) }}</div>\r\n <div>\r\n 状态:\r\n <el-tag :type=\"getStatusTagType(row.status)\" size=\"small\">\r\n {{ row.status_name || '-' }}\r\n </el-tag>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"人员信息\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div>采购员:{{ row.purchase_leader_name || '-' }}</div>\r\n <div>收货员:{{ row.receipt_leader_name || '-' }}</div>\r\n <div>质检员:{{ row.qc_leader_name || '-' }}</div>\r\n <div>上架员:{{ row.putaway_leader_name || '-' }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"时间信息\" min-width=\"220\">\r\n <template #default=\"{ row }\">\r\n <div>收货:{{ row.receipt_date || '-' }}</div>\r\n <div>质检:{{ row.qc_date || '-' }}</div>\r\n <div>上架:{{ row.putaway_time || '-' }}</div>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport RelatedDocNoCopy from '../RelatedDocNoCopy.vue'\r\nimport {\r\n getPutawayBadLocation,\r\n getPutawayBadQty,\r\n getPutawayGoodLocation,\r\n getPutawayGoodQty,\r\n} from '../utils/labels'\r\n\r\ndefineOptions({ name: 'RelatedPutawayOrderTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n\r\nconst getStatusTagType = (status?: number) => {\r\n if (status === 300) return 'success'\r\n if (status === 100 || status === 200) return 'warning'\r\n return 'info'\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.thumb {\r\n width: 32px;\r\n height: 32px;\r\n object-fit: cover;\r\n border-radius: 3px;\r\n margin-top: 4px;\r\n}\r\n\r\n.loc-text {\r\n word-break: break-all;\r\n white-space: normal;\r\n line-height: 20px;\r\n}\r\n</style>\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联采购订单\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" />\r\n <el-table-column label=\"采购订单号\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.purchase_no\"\r\n type=\"purchase\"\r\n :order-no=\"String(row.purchase_no)\"\r\n />\r\n <span v-else>{{ row.purchase_no || '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"供应商/到货仓库\" min-width=\"180\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n {{ row.supplier_name || row.supplier || row.stock_name || '-' }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"90\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.image || row.main_image\"\r\n :src=\"row.image || row.main_image\"\r\n :preview-src-list=\"[row.image || row.main_image]\"\r\n preview-teleported\r\n fit=\"cover\"\r\n style=\"width: 44px; height: 44px\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div>{{ row.product_name || '-' }}</div>\r\n <div class=\"sku-text\"><JSkuLink :code=\"row.sku || row.sku_code\" /></div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n {{ row.shop_account_name || row.user_account_name || row.shop_account || '-' }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column v-if=\"showFnsku\" prop=\"fnsku\" label=\"SellerSKU/FNSKU\" min-width=\"140\" />\r\n <el-table-column prop=\"purchase_qty\" label=\"采购数量\" min-width=\"100\" />\r\n <el-table-column prop=\"arrived_qty\" label=\"到货量\" min-width=\"90\" />\r\n <el-table-column label=\"待到货量\" min-width=\"90\">\r\n <template #default=\"{ row }\">\r\n {{ row.wait_arrived_qty ?? calcWaitArrivedQty(row) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"refund_qty\" label=\"退换货量\" min-width=\"90\" />\r\n <el-table-column prop=\"expected_arrival_date\" label=\"预计到货日期\" min-width=\"120\" />\r\n <el-table-column label=\"采购员\" min-width=\"90\">\r\n <template #default=\"{ row }\">\r\n {{ row.purchaser_name || row.purchaser || '-' }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"ctime\" label=\"创建时间\" min-width=\"150\" />\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\n\r\ndefineOptions({ name: 'RelatedPurchaseOrderTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n showFnsku?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n showFnsku: false,\r\n})\r\n\r\nconst calcWaitArrivedQty = (row: Record<string, any>) => {\r\n const purchaseQty = Number(row.purchase_qty ?? 0)\r\n const arrivedQty = Number(row.arrived_qty ?? 0)\r\n if (!Number.isFinite(purchaseQty) || !Number.isFinite(arrivedQty)) return '-'\r\n return Math.max(0, purchaseQty - arrivedQty)\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.sku-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n</style>\r\n","/** 采购计划关联行:组合产品展开子项 */\r\nexport function buildPurchasePlanRows(list: Record<string, any>[]) {\r\n return (list || []).map((item, index) => {\r\n const bisSku = item.bis_sku ?? null\r\n const productType = Number(bisSku?.product_type ?? 10)\r\n const isCombo = productType === 20\r\n const purchasePlanQty = item.purchase_plan_qty ?? ''\r\n\r\n const shopAccount =\r\n item.shop_account_name || item.user_account_name || item.shop_account || ''\r\n\r\n const row: Record<string, any> = {\r\n id: item.id ?? `plan-${index}`,\r\n requirement_no: item.requirement_no ?? '',\r\n image: item.image ?? item.main_image ?? bisSku?.main_image ?? bisSku?.image ?? '',\r\n product_name: item.product_name ?? bisSku?.product_name ?? '',\r\n sku: item.sku ?? bisSku?.sku_code ?? '',\r\n bundle: isCombo ? (bisSku?.product_name ?? '') : '',\r\n shop_account: shopAccount,\r\n supplier: item.supplier_name || item.supplier || '',\r\n stock_name: item.stock_name || item.stock_code || '',\r\n purchase_plan_qty: purchasePlanQty,\r\n purchased_plan_qty: item.purchased_plan_qty ?? '',\r\n box_sku_qty: item.box_sku_qty ?? '',\r\n isCombo,\r\n }\r\n\r\n const childItems = bisSku?.items\r\n if (isCombo && Array.isArray(childItems) && childItems.length) {\r\n row.children = childItems.map((child: any, ci: number) => {\r\n const ratio = Number(child.quantity ?? 1)\r\n const childSkuInfo = child.sku_info ?? null\r\n return {\r\n id: `${row.id}-child-${ci}`,\r\n requirement_no: '',\r\n image: childSkuInfo?.main_image ?? childSkuInfo?.image ?? '',\r\n product_name: childSkuInfo?.product_name ?? '',\r\n sku: child.sku_code ?? childSkuInfo?.sku_code ?? '',\r\n bundle: childSkuInfo?.product_name ?? '',\r\n shop_account: shopAccount,\r\n supplier: '',\r\n stock_name: item.stock_name || item.stock_code || '',\r\n purchase_plan_qty:\r\n purchasePlanQty !== '' && purchasePlanQty != null\r\n ? ratio * Number(purchasePlanQty)\r\n : '',\r\n purchased_plan_qty: '',\r\n box_sku_qty: '',\r\n isCombo: false,\r\n }\r\n })\r\n }\r\n\r\n return row\r\n })\r\n}\r\n\r\n/** 加工单关联行:组合产品及采购明细展开 */\r\nexport function buildProcessingOrderRows(list: Record<string, any>[]) {\r\n return (list || []).map((item, index) => {\r\n const skuInfo = item.sku_info ?? {}\r\n const skuImage = item.sku_image ?? {}\r\n const productType = Number(skuInfo.product_type ?? 10)\r\n const isCombo = productType === 20\r\n\r\n const row: Record<string, any> = {\r\n id: item.id ?? `process-${index}`,\r\n processing_order_no: item.processing_order_no ?? '',\r\n purchase_plan_no: item.purchase_plan_no ?? '',\r\n image: skuImage.main_image ?? '',\r\n product_name: skuInfo.product_name ?? '',\r\n sku: item.sku_code ?? skuInfo.sku_code ?? '',\r\n shop_account: item.user_account_name ?? item.shop_account_name ?? item.shop_account ?? '',\r\n fnsku: item.fnsku ?? '',\r\n seller_sku: item.seller_sku ?? '',\r\n plan_qty: item.plan_qty ?? '',\r\n processed_qty: item.processed_qty ?? '',\r\n pending_qty:\r\n item.plan_qty && item.processed_qty\r\n ? Number(item.plan_qty) - Number(item.processed_qty)\r\n : '',\r\n expected_date: item.expected_date ?? '',\r\n creator_leader_name: item.creator_leader_name ?? '',\r\n ctime: item.ctime ?? '',\r\n isCombo,\r\n }\r\n\r\n const orderItems = item.order_item\r\n if (isCombo && Array.isArray(orderItems) && orderItems.length) {\r\n row.children = orderItems.map((orderItem: any, oi: number) => {\r\n const childSkuInfo = orderItem.sku_info ?? {}\r\n const childSkuImage = orderItem.sku_image ?? {}\r\n const ratio = Number(orderItem.combination_ratio ?? 1)\r\n const childRow: Record<string, any> = {\r\n id: `${row.id}-item-${oi}`,\r\n processing_order_no: '',\r\n purchase_plan_no: '',\r\n image: childSkuImage.main_image ?? '',\r\n product_name: childSkuInfo.product_name ?? '',\r\n sku: orderItem.sku_code ?? childSkuInfo.sku_code ?? '',\r\n shop_account: '',\r\n fnsku: '',\r\n seller_sku: '',\r\n plan_qty: orderItem.purchase_qty ?? '',\r\n processed_qty: orderItem.processed_qty ?? '',\r\n pending_qty:\r\n orderItem.purchase_qty && orderItem.processed_qty\r\n ? Number(orderItem.purchase_qty) - Number(orderItem.processed_qty)\r\n : '',\r\n expected_date: '',\r\n creator_leader_name: '',\r\n ctime: '',\r\n isCombo: false,\r\n combinationRatio: ratio,\r\n }\r\n\r\n const purchaseItems = orderItem.items\r\n if (Array.isArray(purchaseItems) && purchaseItems.length) {\r\n childRow.children = purchaseItems.map((pItem: any, pi: number) => {\r\n const pSkuInfo = pItem.sku_info ?? {}\r\n const pSkuImage = pItem.sku_image ?? {}\r\n return {\r\n id: `${childRow.id}-purchase-${pi}`,\r\n processing_order_no: '',\r\n purchase_plan_no: pItem.purchase_no ?? '',\r\n image: pSkuImage.main_image ?? '',\r\n product_name: pSkuInfo.product_name ?? '',\r\n sku: pItem.sku_code ?? pSkuInfo.sku_code ?? '',\r\n shop_account: '',\r\n fnsku: '',\r\n seller_sku: '',\r\n plan_qty: pItem.purchase_qty ?? '',\r\n processed_qty: pItem.processed_qty ?? '',\r\n pending_qty:\r\n pItem.purchase_qty && pItem.processed_qty\r\n ? Number(pItem.purchase_qty) - Number(pItem.processed_qty)\r\n : '',\r\n expected_date: pItem.expected_arrival_date ?? '',\r\n creator_leader_name: pItem.purchase_leader_name ?? '',\r\n ctime: pItem.ctime ?? '',\r\n }\r\n })\r\n }\r\n\r\n return childRow\r\n })\r\n }\r\n\r\n return row\r\n })\r\n}\r\n\r\n/** 加工单关联行(采购计划详情:逐条平铺,不做组合品展开) */\r\nexport function buildFlatProcessingOrderRows(list: Record<string, any>[]) {\r\n return (list || []).map((item, index) => {\r\n const skuInfo = item.sku_info ?? {}\r\n const skuImage = item.sku_image ?? {}\r\n const planQty = item.plan_qty ?? ''\r\n const processedQty = item.processed_qty ?? ''\r\n\r\n return {\r\n id: item.id ?? `process-${index}`,\r\n processing_order_no: item.processing_order_no ?? '',\r\n purchase_plan_no: item.purchase_plan_no ?? '',\r\n image: skuImage.main_image ?? item.main_image ?? '',\r\n product_name: skuInfo.product_name ?? item.product_name ?? '',\r\n sku: item.sku_code ?? skuInfo.sku_code ?? '',\r\n shop_account: item.shop_account ?? '',\r\n shop_account_name: item.user_account_name ?? item.shop_account_name ?? '',\r\n fnsku: item.fnsku ?? '',\r\n seller_sku: item.seller_sku ?? '',\r\n plan_qty: planQty,\r\n processed_qty: processedQty,\r\n pending_qty:\r\n planQty !== '' && processedQty !== ''\r\n ? Number(planQty) - Number(processedQty)\r\n : '',\r\n expected_date: item.expected_date ?? '',\r\n creator_leader_name: item.creator_leader_name ?? '',\r\n ctime: item.ctime ?? '',\r\n }\r\n })\r\n}\r\n\r\n/** 报关单展开为产品扁平行 */\r\nexport function flattenDeclarationRows(list: Record<string, any>[]) {\r\n const rows: Record<string, any>[] = []\r\n ;(list || []).forEach((decl) => {\r\n const products = decl.products || []\r\n if (!products.length) {\r\n rows.push({ ...decl, product_name: '-', sku_code: '' })\r\n return\r\n }\r\n products.forEach((p: any) => {\r\n rows.push({\r\n ...p,\r\n declaration_no: decl.declaration_no,\r\n status: decl.status,\r\n status_name: decl.status_name,\r\n })\r\n })\r\n })\r\n return rows\r\n}\r\n","<template>\r\n <el-table\r\n :data=\"tableData\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n row-key=\"id\"\r\n :tree-props=\"{ children: 'children' }\"\r\n default-expand-all\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联采购计划\"\r\n >\r\n <el-table-column label=\"计划单号\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.requirement_no\"\r\n type=\"purchasePlan\"\r\n :order-no=\"String(row.requirement_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"72\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <div class=\"img-cell\">\r\n <el-image\r\n v-if=\"row.image\"\r\n :src=\"row.image\"\r\n :preview-src-list=\"[row.image]\"\r\n preview-teleported\r\n fit=\"cover\"\r\n style=\"width: 40px; height: 40px\"\r\n />\r\n <span v-else class=\"no-image\">无</span>\r\n <el-tag v-if=\"row.isCombo\" size=\"small\" effect=\"dark\" class=\"combo-badge\">组</el-tag>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div>{{ row.product_name || '-' }}</div>\r\n <div class=\"sku-text\"><JSkuLink :code=\"row.sku\" /></div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"组合产品\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.bundle || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号\" min-width=\"100\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.shop_account || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"供应商\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.supplier || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"采购仓库\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.stock_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"purchase_plan_qty\" label=\"计划采购量\" width=\"100\" align=\"center\" />\r\n <el-table-column prop=\"purchased_plan_qty\" label=\"已采购量\" width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"box_sku_qty\" label=\"单箱数量\" width=\"90\" align=\"center\" />\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\nimport { buildPurchasePlanRows } from '../utils/buildRelatedRows'\r\n\r\ndefineOptions({ name: 'RelatedPurchasePlanTable' })\r\n\r\nconst props = withDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n\r\nconst tableData = computed(() => buildPurchasePlanRows(props.list || []))\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.img-cell {\r\n position: relative;\r\n display: inline-block;\r\n}\r\n\r\n.no-image {\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n display: inline-block;\r\n width: 40px;\r\n height: 40px;\r\n line-height: 40px;\r\n text-align: center;\r\n border: 1px solid #ebeef5;\r\n border-radius: 4px;\r\n}\r\n\r\n.combo-badge {\r\n position: absolute;\r\n top: -4px;\r\n right: -4px;\r\n padding: 0 4px;\r\n font-size: 10px;\r\n height: 16px;\r\n line-height: 16px;\r\n}\r\n\r\n.sku-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n</style>\r\n","export const displayDash = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nexport const getInfoTagType = (status?: number, success: number[] = [], warning: number[] = []) => {\r\n if (status != null && success.includes(status)) return 'success'\r\n if (status != null && warning.includes(status)) return 'warning'\r\n return 'info'\r\n}\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联送货单\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"送货单号\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.delivery_no\"\r\n type=\"deliveryDoc\"\r\n :order-no=\"String(row.delivery_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"状态\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n <el-tag :type=\"getInfoTagType(row.status, [300, 500], [200, 400])\" size=\"small\">\r\n {{ row.status_name || row.status || '-' }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"供应商\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayDash(row.supplier_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"采购公司\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayDash(row.purchase_company_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"创建人\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ displayDash(row.creator_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"创建时间\" min-width=\"160\">\r\n <template #default=\"{ row }\">{{ displayDash(row.ctime) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"备注\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayDash(row.remark) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\nimport { displayDash, getInfoTagType } from '../utils/display'\r\n\r\ndefineOptions({ name: 'RelatedDeliveryDocTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n</script>\r\n","<template>\r\n <el-table\r\n :data=\"tableData\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n row-key=\"id\"\r\n v-bind=\"flat ? {} : { treeProps: { children: 'children' }, defaultExpandAll: true }\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联加工单\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" />\r\n <el-table-column label=\"加工单号\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"!flat && row.processing_order_no\"\r\n type=\"processing\"\r\n :order-no=\"String(row.processing_order_no)\"\r\n />\r\n <span v-else>{{ row.processing_order_no || '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购计划号\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.purchase_plan_no\"\r\n type=\"purchasePlan\"\r\n :order-no=\"String(row.purchase_plan_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"72\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.image\"\r\n :src=\"row.image\"\r\n :preview-src-list=\"[row.image]\"\r\n preview-teleported\r\n fit=\"cover\"\r\n style=\"width: 40px; height: 40px\"\r\n />\r\n <span v-else class=\"no-image\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div>{{ row.product_name || '-' }}</div>\r\n <div class=\"sku-text\"><JSkuLink :code=\"row.sku\" /></div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n {{ row.shop_account_name || row.user_account_name || row.shop_account || '-' }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column v-if=\"showFnsku\" label=\"FNSKU/SellerSKU\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <div>{{ row.fnsku || '-' }}</div>\r\n <div class=\"sku-text\">{{ row.seller_sku || '-' }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column v-else label=\"SellerSKU\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <span class=\"sku-text\">{{ row.seller_sku || '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"plan_qty\" label=\"计划数量\" width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"processed_qty\" label=\"已加工量\" width=\"90\" align=\"center\" />\r\n <el-table-column label=\"待加工量\" width=\"90\" align=\"center\">\r\n <template #default=\"{ row }\">{{ row.pending_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"expected_date\" label=\"预计完工日期\" min-width=\"120\" />\r\n <el-table-column prop=\"creator_leader_name\" label=\"负责人\" min-width=\"90\" />\r\n <el-table-column prop=\"ctime\" label=\"创建时间\" min-width=\"150\" />\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\nimport { buildFlatProcessingOrderRows, buildProcessingOrderRows } from '../utils/buildRelatedRows'\r\n\r\ndefineOptions({ name: 'RelatedProcessingOrderTable' })\r\n\r\nconst props = withDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n showFnsku?: boolean\r\n /** 采购计划详情等场景:逐条平铺,不展开组合品 */\r\n flat?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n showFnsku: false,\r\n flat: false,\r\n})\r\n\r\nconst tableData = computed(() =>\r\n props.flat\r\n ? buildFlatProcessingOrderRows(props.list || [])\r\n : buildProcessingOrderRows(props.list || []),\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.no-image {\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n display: inline-block;\r\n width: 40px;\r\n height: 40px;\r\n line-height: 40px;\r\n text-align: center;\r\n border: 1px solid #ebeef5;\r\n border-radius: 4px;\r\n}\r\n\r\n.sku-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.plain-text {\r\n color: #303133;\r\n}\r\n</style>\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联退换货\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"退换货单号\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.return_order_no\"\r\n type=\"returnGoods\"\r\n :order-no=\"String(row.return_order_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"产品信息\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div>品名:{{ row.sku_info?.product_name || '-' }}</div>\r\n <div>SKU:<JSkuLink :code=\"row.sku_code\" /></div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"状态\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n <el-tag :type=\"getInfoTagType(row.status, [500, 300], [200, 400])\" size=\"small\">\r\n {{ row.status_name || row.status || '-' }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"退换货数量\" min-width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ row.return_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"创建人\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ displayDash(row.creator_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"创建时间\" min-width=\"160\">\r\n <template #default=\"{ row }\">{{ displayDash(row.ctime) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\nimport { displayDash, getInfoTagType } from '../utils/display'\r\n\r\ndefineOptions({ name: 'RelatedReturnOrderTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n</script>\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无收货异常\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"异常单号\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.abnormal_order_no || row.abnormal_no\"\r\n type=\"abnormal\"\r\n :order-no=\"String(row.abnormal_order_no || row.abnormal_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"产品信息\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div>品名:{{ row.sku_info?.product_name || '-' }}</div>\r\n <div>SKU:<JSkuLink :code=\"row.sku_code\" /></div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"异常类型\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ displayDash(row.abnormal_type_name || row.abnormal_type) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"异常数量\" min-width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">{{ row.abnormal_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"状态\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n <el-tag :type=\"getInfoTagType(row.status, [500, 300], [200, 400])\" size=\"small\">\r\n {{ row.status_name || row.status || '-' }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"创建时间\" min-width=\"160\">\r\n <template #default=\"{ row }\">{{ displayDash(row.ctime) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\nimport { displayDash, getInfoTagType } from '../utils/display'\r\n\r\ndefineOptions({ name: 'RelatedAbnormalOrderTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n</script>\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联付款单\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"付款单号\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.payment_request_no\"\r\n type=\"payment\"\r\n :order-no=\"String(row.payment_request_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"状态\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n <el-tag :type=\"getInfoTagType(row.status, [400, 300], [200, 100])\" size=\"small\">\r\n {{ row.status_name || row.status || '-' }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"供应商\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayDash(row.supplier_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"请款金额\" min-width=\"110\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"row.total_amount != null\">¥{{ row.total_amount }}</span>\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"付款方式\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ displayDash(row.py_method_type_name || row.py_method_type) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"申请人\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ displayDash(row.applicant_name || row.creator_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"申请时间\" min-width=\"160\">\r\n <template #default=\"{ row }\">{{ displayDash(row.ctime) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\nimport { displayDash, getInfoTagType } from '../utils/display'\r\n\r\ndefineOptions({ name: 'RelatedPaymentRequestTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n</script>\r\n","<template>\r\n <el-table\r\n :data=\"list\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联收款单\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"收款单号\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.receipt_voucher_no || row.receipt_no\"\r\n type=\"receiptVoucher\"\r\n :order-no=\"String(row.receipt_voucher_no || row.receipt_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"收款类型\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ displayDash(row.receipt_type_name || row.receipt_type) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"状态\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ displayDash(row.status_name || row.status) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"付款方\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayDash(row.payer_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"收款方\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayDash(row.payee_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"收款金额\" min-width=\"110\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n <span v-if=\"row.receipt_amount != null && row.receipt_amount !== ''\">¥{{ row.receipt_amount }}</span>\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"申请人\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ displayDash(row.applicant_name || row.applicant) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"申请时间\" min-width=\"160\">\r\n <template #default=\"{ row }\">{{ displayDash(row.apply_time || row.ctime) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"收款备注\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayDash(row.receipt_remark) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport DocNoLink from '../../JDocDetail/DocNoLink.vue'\r\nimport { displayDash } from '../utils/display'\r\n\r\ndefineOptions({ name: 'RelatedReceiptVoucherTable' })\r\n\r\nwithDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n</script>\r\n","<template>\r\n <el-table\r\n :data=\"flatData\"\r\n border\r\n size=\"small\"\r\n class=\"related-flat-table\"\r\n v-loading=\"loading\"\r\n max-height=\"420\"\r\n empty-text=\"暂无关联报关单\"\r\n >\r\n <el-table-column label=\"报关单号\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <RelatedDocNoCopy :value=\"row.declaration_no\" />\r\n <el-tag :type=\"getInfoTagType(row.status, [300, 400], [200])\" size=\"small\" style=\"margin-left: 4px\">\r\n {{ row.status_name || '-' }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.image_url\"\r\n :src=\"row.image_url\"\r\n style=\"width: 32px; height: 32px\"\r\n fit=\"cover\"\r\n />\r\n <el-icon v-else size=\"20\" color=\"#c0c4cc\"><Picture /></el-icon>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div>{{ row.product_name || '-' }}</div>\r\n <div class=\"sku-text\"><JSkuLink :code=\"row.sku_code\" /></div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"海关编码\" min-width=\"120\">\r\n <template #default=\"{ row }\">{{ row.customs_code || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"报关品名\" min-width=\"120\">\r\n <template #default=\"{ row }\">{{ row.declaration_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"报关数量\" width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">{{ row.declaration_count ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"报关单位\" width=\"80\" align=\"center\">\r\n <template #default=\"{ row }\">{{ row.unit || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"报关单价(¥)\" width=\"110\" align=\"right\">\r\n <template #default=\"{ row }\">{{ row.declaration_price ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"报关金额(¥)\" width=\"110\" align=\"right\">\r\n <template #default=\"{ row }\">{{ row.declaration_amount ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"是否商检\" width=\"90\" align=\"center\">\r\n <template #default=\"{ row }\">{{ row.is_sampled == 1 ? '是' : '否' }}</template>\r\n </el-table-column>\r\n </el-table>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Picture } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport RelatedDocNoCopy from '../RelatedDocNoCopy.vue'\r\nimport { flattenDeclarationRows } from '../utils/buildRelatedRows'\r\nimport { getInfoTagType } from '../utils/display'\r\n\r\ndefineOptions({ name: 'RelatedDeclarationTable' })\r\n\r\nconst props = withDefaults(defineProps<{\r\n list?: Record<string, any>[]\r\n loading?: boolean\r\n}>(), {\r\n list: () => [],\r\n loading: false,\r\n})\r\n\r\nconst flatData = computed(() => flattenDeclarationRows(props.list || []))\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.sku-text {\r\n font-size: 12px;\r\n color: #909399;\r\n}\r\n\r\n:deep(.el-table__row td) {\r\n vertical-align: top;\r\n}\r\n</style>\r\n","import type { Component } from 'vue'\r\nimport type { CreateRelatedDocsOptions, RelatedListAdapter } from './types'\r\nimport RelatedReceiptOrderTable from './tables/RelatedReceiptOrderTable.vue'\r\nimport RelatedQcOrderTable from './tables/RelatedQcOrderTable.vue'\r\nimport RelatedInboundOrderTable from './tables/RelatedInboundOrderTable.vue'\r\nimport RelatedPutawayOrderTable from './tables/RelatedPutawayOrderTable.vue'\r\nimport RelatedPurchaseOrderTable from './tables/RelatedPurchaseOrderTable.vue'\r\nimport RelatedPurchasePlanTable from './tables/RelatedPurchasePlanTable.vue'\r\nimport RelatedDeliveryDocTable from './tables/RelatedDeliveryDocTable.vue'\r\nimport RelatedProcessingOrderTable from './tables/RelatedProcessingOrderTable.vue'\r\nimport RelatedReturnOrderTable from './tables/RelatedReturnOrderTable.vue'\r\nimport RelatedAbnormalOrderTable from './tables/RelatedAbnormalOrderTable.vue'\r\nimport RelatedPaymentRequestTable from './tables/RelatedPaymentRequestTable.vue'\r\nimport RelatedReceiptVoucherTable from './tables/RelatedReceiptVoucherTable.vue'\r\nimport RelatedDeclarationTable from './tables/RelatedDeclarationTable.vue'\r\n\r\nconst DEFAULT_TABLE_COMPONENTS: Record<string, Component> = {\r\n receipt: RelatedReceiptOrderTable,\r\n qc: RelatedQcOrderTable,\r\n quality: RelatedQcOrderTable,\r\n inbound: RelatedInboundOrderTable,\r\n putaway: RelatedPutawayOrderTable,\r\n purchase: RelatedPurchaseOrderTable,\r\n purchaseItem: RelatedPurchaseOrderTable,\r\n purchasePlan: RelatedPurchasePlanTable,\r\n plan: RelatedPurchasePlanTable,\r\n deliveryDoc: RelatedDeliveryDocTable,\r\n shipping: RelatedDeliveryDocTable,\r\n processing: RelatedProcessingOrderTable,\r\n process: RelatedProcessingOrderTable,\r\n returnGoods: RelatedReturnOrderTable,\r\n return: RelatedReturnOrderTable,\r\n abnormal: RelatedAbnormalOrderTable,\r\n receipt_exception: RelatedAbnormalOrderTable,\r\n payment: RelatedPaymentRequestTable,\r\n receiptVoucher: RelatedReceiptVoucherTable,\r\n receipt_voucher: RelatedReceiptVoucherTable,\r\n customs: RelatedDeclarationTable,\r\n}\r\n\r\nlet listAdapters: Record<string, RelatedListAdapter> = {}\r\nlet tableComponents: Record<string, Component> = { ...DEFAULT_TABLE_COMPONENTS }\r\nlet initialized = false\r\n\r\n/**\r\n * 注册关联单据:list 适配器 + 可选表格组件覆盖\r\n * 建议在 main.ts 中 createDocDetail 旁调用一次\r\n */\r\nexport function createRelatedDocs(options: CreateRelatedDocsOptions = {}) {\r\n listAdapters = { ...(options.listAdapters || {}) }\r\n tableComponents = {\r\n ...DEFAULT_TABLE_COMPONENTS,\r\n ...(options.components || {}),\r\n }\r\n initialized = true\r\n return { listAdapters, tableComponents }\r\n}\r\n\r\n/** 合并追加注册 */\r\nexport function registerRelatedDocs(options: Partial<CreateRelatedDocsOptions>) {\r\n if (options.listAdapters) {\r\n listAdapters = { ...listAdapters, ...options.listAdapters }\r\n }\r\n if (options.components) {\r\n tableComponents = { ...tableComponents, ...options.components }\r\n }\r\n initialized = true\r\n}\r\n\r\nexport function getRelatedListAdapter(type: string): RelatedListAdapter | null {\r\n return listAdapters[type] || null\r\n}\r\n\r\nexport function getRelatedTableComponent(type: string): Component | null {\r\n return tableComponents[type] || null\r\n}\r\n\r\nexport function getRelatedDocsTableComponents() {\r\n return tableComponents\r\n}\r\n\r\nexport function isRelatedDocsInitialized() {\r\n return initialized\r\n}\r\n\r\nexport { DEFAULT_TABLE_COMPONENTS }\r\n","<template>\r\n <div class=\"related-sub-tabs\">\r\n <button\r\n v-for=\"tab in tabs\"\r\n :key=\"tab.key\"\r\n type=\"button\"\r\n class=\"related-sub-tab\"\r\n :class=\"{ 'related-sub-tab--active': modelValue === tab.key }\"\r\n @click=\"$emit('update:modelValue', tab.key)\"\r\n >\r\n {{ tab.label }}\r\n <template v-if=\"tab.count\"> ({{ tab.count }})</template>\r\n </button>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\ndefineOptions({ name: 'RelatedDocSubTabs' })\r\n\r\ndefineProps<{\r\n tabs: Array<{ key: string; label: string; count?: number }>\r\n modelValue: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', value: string): void\r\n}>()\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.related-sub-tabs {\r\n display: flex;\r\n gap: 8px;\r\n margin-bottom: 10px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.related-sub-tab {\r\n border: 1px solid #dcdfe6;\r\n background: #fff;\r\n color: #606266;\r\n padding: 6px 14px;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-size: 13px;\r\n}\r\n\r\n.related-sub-tab--active {\r\n color: #409eff;\r\n border-color: #409eff;\r\n background: #ecf5ff;\r\n}\r\n</style>\r\n","/** 统一解析列表接口返回;单条 detail 也会包成数组 */\r\nexport function parseListResponse(res: any): Record<string, any>[] {\r\n if (!res) return []\r\n if (Array.isArray(res)) return res\r\n\r\n const data = res.data !== undefined ? res.data : res\r\n\r\n if (Array.isArray(data)) return data\r\n if (Array.isArray(data?.list)) return data.list\r\n if (Array.isArray(res.list)) return res.list\r\n\r\n // 详情接口返回单对象时,当作一条列表\r\n if (data && typeof data === 'object' && !Array.isArray(data)) {\r\n if (data.receipt_order_no || data.inbound_order_no || data.qc_order_no || data.putaway_order_no) {\r\n return [data]\r\n }\r\n }\r\n\r\n return []\r\n}\r\n\r\n/** 从 list 接口结果取总数,供关联单据 Tab 角标使用 */\r\nexport function parseListTotal(res: any, type?: string): number {\r\n const list = parseListResponse(res)\r\n if (type === 'purchasePlan' || type === 'plan') {\r\n return new Set(list.map((item) => item?.requirement_no).filter(Boolean)).size\r\n }\r\n\r\n if (!res) return 0\r\n\r\n const data = !Array.isArray(res) && res.data !== undefined ? res.data : res\r\n if (data && typeof data === 'object' && !Array.isArray(data)) {\r\n if (typeof data.totalNum === 'number') return data.totalNum\r\n if (typeof data.total === 'number') return data.total\r\n if (typeof data.pageInfo?.totalNum === 'number') return data.pageInfo.totalNum\r\n }\r\n if (!Array.isArray(res)) {\r\n if (typeof res.totalNum === 'number') return res.totalNum\r\n if (typeof res.total === 'number') return res.total\r\n }\r\n\r\n return list.length\r\n}\r\n","<!--\r\n 单个关联单据面板:按 type 取 listAdapter 拉数,再喂给纯展示表\r\n 折叠表用 orders,平铺表用 list\r\n-->\r\n<template>\r\n <component\r\n :is=\"tableComponent\"\r\n v-if=\"tableComponent\"\r\n v-bind=\"tableBindProps\"\r\n />\r\n <el-empty\r\n v-else\r\n description=\"该单据类型暂未配置表格组件\"\r\n :image-size=\"64\"\r\n />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { getRelatedListAdapter, getRelatedTableComponent } from './registry'\r\nimport { parseListResponse } from './utils/parseList'\r\n\r\ndefineOptions({ name: 'RelatedDocPanel' })\r\n\r\nconst props = withDefaults(defineProps<{\r\n type: string\r\n docNo?: string | number\r\n paramKey?: string\r\n pageSize?: number\r\n tableProps?: Record<string, any>\r\n}>(), {\r\n pageSize: 200,\r\n tableProps: () => ({}),\r\n})\r\n\r\nconst loading = ref(false)\r\nconst rows = ref<Record<string, any>[]>([])\r\n\r\nconst tableComponent = computed(() => getRelatedTableComponent(props.type))\r\n\r\n/** receipt/inbound 用 orders,qc/putaway 用 list */\r\nconst COLLAPSE_TYPES = new Set(['receipt', 'inbound'])\r\n\r\nconst tableBindProps = computed(() => {\r\n const base = {\r\n loading: loading.value,\r\n defaultExpandAll: true,\r\n ...props.tableProps,\r\n }\r\n if (COLLAPSE_TYPES.has(props.type)) {\r\n return { ...base, orders: rows.value }\r\n }\r\n return { ...base, list: rows.value }\r\n})\r\n\r\nconst loadData = async () => {\r\n const docNo = props.docNo\r\n const paramKey = props.paramKey\r\n if (docNo == null || docNo === '' || !paramKey) {\r\n rows.value = []\r\n return\r\n }\r\n\r\n const adapter = getRelatedListAdapter(props.type)\r\n if (!adapter) {\r\n console.warn(`[JRelatedDocs] 未注册 listAdapter: ${props.type}`)\r\n rows.value = []\r\n return\r\n }\r\n\r\n loading.value = true\r\n try {\r\n const res = await adapter({\r\n [paramKey]: docNo,\r\n pageIndex: 1,\r\n pageSize: props.pageSize,\r\n page: 1,\r\n })\r\n rows.value = parseListResponse(res)\r\n } catch (err) {\r\n console.error(`[JRelatedDocs] 加载 ${props.type} 失败`, err)\r\n rows.value = []\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => [props.type, props.docNo, props.paramKey, props.pageSize] as const,\r\n () => {\r\n loadData()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n","<!--\r\n 关联单据容器(对齐 wms 业务详情子 Tab 样式)\r\n 用法:\r\n createRelatedDocs({ listAdapters: { receipt, qc, inbound, putaway } })\r\n <JRelatedDocs\r\n :doc-types=\"[{ type: 'inbound', label: '入库单', paramKey: 'source_order_no' }, ...]\"\r\n :doc-no=\"receiptOrderNo\"\r\n />\r\n-->\r\n<template>\r\n <div class=\"j-related-docs\">\r\n <RelatedDocSubTabs\r\n v-if=\"tabs.length\"\r\n v-model=\"activeType\"\r\n :tabs=\"tabs\"\r\n />\r\n <template v-for=\"item in docTypes\" :key=\"item.type\">\r\n <RelatedDocPanel\r\n v-if=\"activeType === item.type\"\r\n :type=\"item.type\"\r\n :doc-no=\"resolveDocNo(item)\"\r\n :param-key=\"resolveParamKey(item)\"\r\n :page-size=\"pageSize\"\r\n :table-props=\"item.tableProps\"\r\n />\r\n </template>\r\n <el-empty\r\n v-if=\"!docTypes.length\"\r\n description=\"暂无关联单据配置\"\r\n :image-size=\"64\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport type { RelatedDocTypeItem } from './types'\r\nimport RelatedDocSubTabs from './RelatedDocSubTabs.vue'\r\nimport RelatedDocPanel from './RelatedDocPanel.vue'\r\nimport { getRelatedListAdapter } from './registry'\r\nimport { parseListTotal } from './utils/parseList'\r\n\r\ndefineOptions({ name: 'JRelatedDocs' })\r\n\r\nconst props = withDefaults(defineProps<{\r\n docTypes: RelatedDocTypeItem[]\r\n docNo?: string | number\r\n paramKey?: string\r\n pageSize?: number\r\n}>(), {\r\n docTypes: () => [],\r\n pageSize: 200,\r\n})\r\n\r\nconst activeType = ref(props.docTypes[0]?.type || '')\r\nconst countMap = ref<Record<string, number>>({})\r\n\r\nconst tabs = computed(() =>\r\n props.docTypes.map((d) => ({\r\n key: d.type,\r\n label: d.label,\r\n count: d.count ?? countMap.value[d.type],\r\n })),\r\n)\r\n\r\nconst resolveDocNo = (item: RelatedDocTypeItem) =>\r\n item.docNo != null && item.docNo !== '' ? item.docNo : props.docNo\r\n\r\nconst resolveParamKey = (item: RelatedDocTypeItem) =>\r\n item.paramKey || props.paramKey || ''\r\n\r\nconst loadCounts = async () => {\r\n const next: Record<string, number> = {}\r\n await Promise.all(\r\n props.docTypes.map(async (item) => {\r\n if (item.count != null) {\r\n next[item.type] = item.count\r\n return\r\n }\r\n const docNo = resolveDocNo(item)\r\n const paramKey = resolveParamKey(item)\r\n const adapter = getRelatedListAdapter(item.type)\r\n if (docNo == null || docNo === '' || !paramKey || !adapter) {\r\n next[item.type] = 0\r\n return\r\n }\r\n try {\r\n const res = await adapter({\r\n [paramKey]: docNo,\r\n pageIndex: 1,\r\n pageSize: 1,\r\n page: 1,\r\n })\r\n next[item.type] = parseListTotal(res, item.type)\r\n } catch {\r\n next[item.type] = 0\r\n }\r\n }),\r\n )\r\n countMap.value = next\r\n}\r\n\r\nwatch(\r\n () => props.docTypes.map((d) => d.type).join(','),\r\n () => {\r\n if (!props.docTypes.some((d) => d.type === activeType.value)) {\r\n activeType.value = props.docTypes[0]?.type || ''\r\n }\r\n },\r\n)\r\n\r\nwatch(\r\n () => [\r\n props.docNo,\r\n props.paramKey,\r\n props.docTypes.map((d) => `${d.type}:${d.docNo ?? ''}:${d.paramKey ?? ''}:${d.count ?? ''}`).join('|'),\r\n ],\r\n () => {\r\n loadCounts()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.j-related-docs {\r\n min-height: 120px;\r\n}\r\n</style>\r\n","<!--\r\n 收货单详情纯展示弹窗\r\n 用法:\r\n <ReceiptOrderDetailView v-model=\"visible\" :receipt-order-no=\"currentNo\" />\r\n 点击单号时:currentNo = 单号; visible = true\r\n - 打开弹窗后按单号拉取并展示\r\n - 不含业务操作(加急/收货/异常等)\r\n - 关联单据:JRelatedDocs(对齐业务详情)\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"92%\"\r\n top=\"4vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"receipt-order-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">收货单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ detail.receipt_order_no || '-' }}</span>\r\n <el-button\r\n v-if=\"detail.receipt_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.receipt_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n <el-tag size=\"small\" :type=\"statusTagType\">{{ statusLabel }}</el-tag>\r\n <span v-if=\"detail.urgent_flag === 2\" class=\"urgent-tag\">急</span>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"receipt-detail\">\r\n <div class=\"section\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-row :gutter=\"16\" class=\"info-grid\">\r\n <el-col :span=\"6\">\r\n <span class=\"label required\">收货仓库:</span>\r\n <span class=\"value\">{{ detail.warehouse_name || '-' }}</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label required\">收货类型:</span>\r\n <span class=\"value\">{{ getReceiptTypeLabel(detail.receipt_type) }}</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label required\">关联单号:</span>\r\n <span class=\"value\">{{ detail.association_order_no || '-' }}</span>\r\n <el-button\r\n v-if=\"detail.association_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.association_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">供应商:</span>\r\n <span class=\"value\">{{ detail.supplier_name || '-' }}</span>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\" class=\"info-grid\">\r\n <el-col :span=\"6\">\r\n <span class=\"label\">采购员:</span>\r\n <span class=\"value\">{{ detail.purchase_leader_name || detail.purchase_leader || '-' }}</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">采购公司:</span>\r\n <span class=\"value\">{{ detail.company_name || detail.company_code || '-' }}</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">收货人:</span>\r\n <span class=\"value\">{{ detail.receipt_leader_name || detail.receipt_leader || '-' }}</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">收货时间:</span>\r\n <span class=\"value\">{{ detail.receipt_date || '-' }}</span>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\" class=\"info-grid\">\r\n <el-col :span=\"12\">\r\n <span class=\"label\">附件:</span>\r\n <span class=\"value\">\r\n <template v-if=\"detail.att_files?.length\">\r\n <el-link\r\n v-for=\"(file, index) in detail.att_files\"\r\n :key=\"index\"\r\n type=\"primary\"\r\n :href=\"file.url\"\r\n target=\"_blank\"\r\n :underline=\"false\"\r\n class=\"file-link\"\r\n >\r\n {{ file.name || `附件${Number(index) + 1}` }}\r\n </el-link>\r\n </template>\r\n <template v-else>-</template>\r\n </span>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <span class=\"label\">备注:</span>\r\n <span class=\"value\">{{ detail.receipt_memo || '-' }}</span>\r\n </el-col>\r\n </el-row>\r\n </div>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"收货明细\" name=\"items\">\r\n <el-table :data=\"items\" border size=\"small\" max-height=\"420\" empty-text=\"暂无收货明细\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.sku_image?.main_image\"\r\n :src=\"row.sku_image.main_image\"\r\n style=\"width: 36px; height: 36px\"\r\n fit=\"cover\"\r\n />\r\n <span v-else class=\"img-empty\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div>{{ row.sku_info?.product_name || '-' }}</div>\r\n <div class=\"sku-text\">\r\n <JSkuLink :code=\"row.sku_code\" />\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单号\" min-width=\"130\" prop=\"purchase_no\" />\r\n <el-table-column label=\"通知收货量\" min-width=\"100\" align=\"right\" prop=\"notice_receive_qty\" />\r\n <el-table-column label=\"实际收货量\" min-width=\"100\" align=\"right\" prop=\"receive_qty\" />\r\n <el-table-column label=\"贴标\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n <div class=\"label-cell\">\r\n <div>通知:{{ formatLabelFlag(row.notice_label_flag) }}</div>\r\n <div v-if=\"shouldShowActualLabel\">实际:{{ formatLabelFlag(row.label_flag) }}</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"质检类型\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ qcTypeMap[row.qc_type] || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"赠品\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">{{ row.is_gift === 1 ? '否' : '是' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"预计到货日期\" min-width=\"120\" prop=\"expected_arrival_date\" />\r\n <el-table-column label=\"店铺账号\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.user_account_name || '-' }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"物流信息\" name=\"logistics\">\r\n <el-table :data=\"logisticsList\" border size=\"small\" max-height=\"420\" empty-text=\"暂无物流信息\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\r\n <el-table-column label=\"物流商\" min-width=\"200\" prop=\"logistics_name\" />\r\n <el-table-column label=\"物流单号\" min-width=\"220\" prop=\"logistics_order_no\" />\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <!-- 对齐业务详情 ReceiptOrderDetail:入库 / 质检 / 上架 -->\r\n <JRelatedDocs\r\n v-if=\"activeTab === 'related' && receiptOrderNo\"\r\n :doc-types=\"relatedDocTypes\"\r\n :doc-no=\"receiptOrderNo\"\r\n />\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"log\">\r\n <div class=\"log-toolbar\">\r\n <el-date-picker\r\n v-model=\"logDateRange\"\r\n type=\"daterange\"\r\n range-separator=\"-\"\r\n start-placeholder=\"开始日期\"\r\n end-placeholder=\"结束日期\"\r\n value-format=\"YYYY-MM-DD\"\r\n clearable\r\n class=\"log-date-picker\"\r\n />\r\n </div>\r\n <el-table :data=\"logPageData\" border size=\"small\" max-height=\"360\" empty-text=\"暂无操作日志\">\r\n <el-table-column label=\"操作时间\" width=\"170\" prop=\"ctime\" />\r\n <el-table-column label=\"操作人\" width=\"120\" prop=\"operator\" />\r\n <el-table-column label=\"操作类型\" width=\"120\" prop=\"type\" />\r\n <el-table-column label=\"操作详情\" min-width=\"280\" prop=\"info\" show-overflow-tooltip />\r\n </el-table>\r\n <div class=\"log-pagination\">\r\n <el-pagination\r\n v-model:current-page=\"logPage\"\r\n v-model:page-size=\"logPageSize\"\r\n :page-sizes=\"[10, 20, 50]\"\r\n :total=\"filteredLogList.length\"\r\n layout=\"total, prev, pager, next, sizes, jumper\"\r\n />\r\n </div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n \r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport {\r\n getReceiptTypeLabel,\r\n getReceiptStatusLabel,\r\n resolveAbnormalSubMemo,\r\n RECEIPT_STATUS_MAP,\r\n} from '../labels/receipt'\r\nimport { copyText } from '../utils/copyText'\r\nimport { flattenOrderItems } from '../utils/flattenOrderItems'\r\nimport { getDocDetailAdapters } from '../registry'\r\nimport { JRelatedDocs } from '../../JRelatedDocs'\r\nimport type { RelatedDocTypeItem } from '../../JRelatedDocs'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n receiptOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst qcTypeMap: Record<number, string> = {\r\n 1: '仓库质检',\r\n 2: '预检',\r\n 3: '免检',\r\n 4: '加工质检',\r\n}\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('items')\r\nconst detail = reactive<Record<string, any>>({})\r\nconst items = ref<Record<string, any>[]>([])\r\nconst logisticsList = ref<Record<string, any>[]>([])\r\nconst logList = ref<Record<string, any>[]>([])\r\nconst logDateRange = ref<string[]>([])\r\nconst logPage = ref(1)\r\nconst logPageSize = ref(10)\r\n\r\nconst statusLabel = computed(() =>\r\n getReceiptStatusLabel(\r\n detail.status,\r\n RECEIPT_STATUS_MAP[detail.status],\r\n resolveAbnormalSubMemo(detail, items.value),\r\n ),\r\n)\r\n\r\nconst statusTagType = computed(() => {\r\n if (detail.status === 500) return 'success'\r\n if (detail.status === 600) return 'danger'\r\n if (detail.status === 300 || detail.status === 400) return 'warning'\r\n return 'info'\r\n})\r\n\r\nconst shouldShowActualLabel = computed(() => (detail.status ?? 0) >= 400)\r\n\r\nconst filteredLogList = computed(() => {\r\n if (logDateRange.value?.length !== 2) return logList.value\r\n const start = logDateRange.value[0]\r\n const end = logDateRange.value[1]\r\n if (!start || !end) return logList.value\r\n return logList.value.filter((item) => {\r\n const date = String(item.ctime || '').slice(0, 10)\r\n if (!date) return false\r\n return date >= start && date <= end\r\n })\r\n})\r\n\r\nconst logPageData = computed(() => {\r\n const start = (logPage.value - 1) * logPageSize.value\r\n return filteredLogList.value.slice(start, start + logPageSize.value)\r\n})\r\n\r\nconst formatLabelFlag = (flag?: number | null) => {\r\n if (flag == null) return '-'\r\n return flag === 1 ? '否' : '是'\r\n}\r\n\r\nconst handleCopy = copyText\r\n\r\n/** 对齐 wms ReceiptOrderDetail 关联单据配置 */\r\nconst relatedDocTypes = computed<RelatedDocTypeItem[]>(() => [\r\n { type: 'inbound', label: '入库单', paramKey: 'source_order_no' },\r\n { type: 'qc', label: '质检单', paramKey: 'receipt_order_no' },\r\n { type: 'putaway', label: '上架单', paramKey: 'source_order_no' },\r\n])\r\n\r\nconst normalizeLogs = (logs: any[]) =>\r\n (logs || []).map((log) => ({\r\n ctime: log.ctime || log.operate_time || log.create_time || '-',\r\n operator: log.operator || log.operator_name || log.user_name || '-',\r\n type: log.type || log.operate_type || log.action_type || '-',\r\n info: log.info || log.content || log.detail || log.log_content || '-',\r\n }))\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n items.value = []\r\n logisticsList.value = []\r\n logList.value = []\r\n activeTab.value = 'items'\r\n logDateRange.value = []\r\n logPage.value = 1\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.receiptOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getReceiptDetail\r\n if (!fetchApi) {\r\n console.warn('[ReceiptOrderDetailView] 未注入 getReceiptDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.receiptOrderNo)\r\n if (res?.code === 1) {\r\n const data = res.data || {}\r\n Object.assign(detail, data)\r\n items.value = flattenOrderItems(data.order_item, false)\r\n logisticsList.value = data.order_logistics || []\r\n logList.value = normalizeLogs(data.receipt_order_log || [])\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[ReceiptOrderDetailView] getReceiptDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst handleOpen = () => {\r\n resetDetail()\r\n fetchDetail()\r\n}\r\n\r\nconst handleClosed = () => {\r\n resetDetail()\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) handleOpen()\r\n else handleClosed()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.receipt-detail {\r\n padding: 0 4px 8px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 16px;\r\n background: #f5f7fa;\r\n border-radius: 4px;\r\n margin-bottom: 16px;\r\n\r\n .header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n\r\n .order-no {\r\n font-size: 16px;\r\n font-weight: 600;\r\n color: #303133;\r\n }\r\n\r\n .copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.urgent-tag {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 20px;\r\n height: 20px;\r\n border-radius: 2px;\r\n background: #f56c6c;\r\n color: #fff;\r\n font-size: 12px;\r\n line-height: 1;\r\n}\r\n\r\n.section {\r\n margin-bottom: 16px;\r\n\r\n .section-title {\r\n font-weight: 600;\r\n font-size: 14px;\r\n padding-left: 8px;\r\n border-left: 3px solid #409eff;\r\n margin-bottom: 12px;\r\n }\r\n}\r\n\r\n.info-grid {\r\n margin-bottom: 10px;\r\n line-height: 28px;\r\n\r\n .label {\r\n color: #606266;\r\n font-size: 13px;\r\n\r\n &.required::before {\r\n content: '*';\r\n color: #f56c6c;\r\n margin-right: 2px;\r\n }\r\n }\r\n\r\n .value {\r\n font-size: 13px;\r\n color: #303133;\r\n }\r\n\r\n .copy-btn {\r\n margin-left: 4px;\r\n padding: 0;\r\n color: #c0c4cc;\r\n vertical-align: middle;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n}\r\n\r\n.file-link + .file-link {\r\n margin-left: 12px;\r\n}\r\n\r\n.detail-tabs {\r\n :deep(.el-tabs__header) {\r\n margin-bottom: 12px;\r\n }\r\n}\r\n\r\n.sku-text,\r\n.img-empty {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.label-cell {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.5;\r\n font-size: 12px;\r\n}\r\n\r\n.log-toolbar {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.log-date-picker {\r\n width: 260px;\r\n}\r\n\r\n.log-pagination {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-top: 12px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 质检单详情纯展示弹窗\r\n 用法:<QcOrderDetailView v-model=\"visible\" :qc-order-no=\"no\" />\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n top=\"4vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">质检单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ detail.qc_no || '-' }}</span>\r\n <el-button v-if=\"detail.qc_no\" link class=\"copy-btn\" @click=\"handleCopy(detail.qc_no)\">\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n <el-tag v-if=\"detail.status\" size=\"small\" :type=\"getStatusTagType(detail.status)\">\r\n {{ getStatusLabel(detail.status) }}\r\n </el-tag>\r\n <el-tag v-if=\"detail.urgent_flag === 2\" type=\"danger\" size=\"small\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"qc-detail\">\r\n <el-row :gutter=\"16\" class=\"info-row\">\r\n <el-col :span=\"14\">\r\n <div class=\"section\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-descriptions :column=\"2\" size=\"small\">\r\n <el-descriptions-item label=\"收货单:\">\r\n <DocNoLink\r\n v-if=\"detail.receipt_no\"\r\n type=\"receipt\"\r\n :order-no=\"detail.receipt_no\"\r\n />\r\n <span v-else>-</span>\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"采购单:\">\r\n <span class=\"multi-order-row\">\r\n <DocNoLink\r\n v-if=\"detail.purchase_no\"\r\n type=\"purchase\"\r\n :order-no=\"detail.purchase_no\"\r\n />\r\n <span v-else>-</span>\r\n <el-dropdown\r\n v-if=\"(detail.purchase_nos || []).length > 1\"\r\n trigger=\"click\"\r\n class=\"multi-order-dropdown\"\r\n >\r\n <el-icon class=\"copy-btn\" size=\"12\"><ArrowDown /></el-icon>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item v-for=\"no in detail.purchase_nos\" :key=\"no\">\r\n <DocNoLink type=\"purchase\" :order-no=\"no\" />\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </span>\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"质检状态:\">\r\n <el-tag v-if=\"detail.status\" size=\"small\" :type=\"getStatusTagType(detail.status)\">\r\n {{ getStatusLabel(detail.status) }}\r\n </el-tag>\r\n <span v-else>-</span>\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"SKU:\">\r\n <JSkuLink :code=\"detail.sku_code\" />\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"品名:\">{{ detail.product_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"图片:\">\r\n <el-image\r\n v-if=\"detail.image\"\r\n :src=\"detail.image\"\r\n style=\"width:32px;height:32px;border-radius:3px\"\r\n fit=\"cover\"\r\n />\r\n <span v-else>-</span>\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"采购公司:\">{{ detail.company_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"供应商:\">{{ detail.supplier_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"采购仓库:\">{{ detail.warehouse_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"采购员:\">{{ detail.purchase_leader_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"到货时间:\">{{ detail.arrival_time || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"质检员:\">{{ detail.qc_member || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"质检时间:\">{{ detail.qc_time || '-' }}</el-descriptions-item>\r\n </el-descriptions>\r\n </div>\r\n </el-col>\r\n <el-col :span=\"10\">\r\n <div v-loading=\"qcStandardsLoading\" class=\"section\">\r\n <div class=\"section-title\">质检标准</div>\r\n <el-table :data=\"detail.qc_standards || []\" border size=\"small\" empty-text=\"暂无质检项\" max-height=\"220\">\r\n <el-table-column label=\"质检项\" prop=\"item_name\" align=\"center\" />\r\n <el-table-column label=\"质检内容\" prop=\"content\" align=\"center\" />\r\n </el-table>\r\n <div class=\"qc-media-panel\">\r\n <div v-if=\"detail.qc_images?.length\" class=\"qc-media-row\">\r\n <div class=\"qc-media-row__label\">图片</div>\r\n <div class=\"qc-media-images\">\r\n <el-image\r\n v-for=\"(url, index) in detail.qc_images\"\r\n :key=\"`${url}-${index}`\"\r\n :src=\"url\"\r\n :preview-src-list=\"detail.qc_images\"\r\n :initial-index=\"Number(index)\"\r\n fit=\"cover\"\r\n class=\"qc-media-thumb\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"qc-media-row\">\r\n <div class=\"qc-media-row__label\">附件</div>\r\n <div v-if=\"detail.qc_att_files?.length\" class=\"qc-media-files\">\r\n <a\r\n v-for=\"(url, index) in detail.qc_att_files\"\r\n :key=\"`${url}-${index}`\"\r\n class=\"qc-file-item\"\r\n :href=\"url\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n >\r\n {{ getQcFileName(url, Number(index)) }}\r\n </a>\r\n </div>\r\n <span v-else class=\"qc-media-empty\">无</span>\r\n </div>\r\n </div>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"质检明细\" name=\"detail\">\r\n <div class=\"qc-meta\">\r\n 质检类型:{{ detail.qc_type || '-' }} 质检方式:{{ detail.qc_method || '-' }}\r\n </div>\r\n <el-descriptions :column=\"3\" size=\"small\" border>\r\n <el-descriptions-item label=\"需质检量\">{{ detail.need_qc_qty ?? '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"抽检量\">{{ detail.sample_qty ?? '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"抽检次品量\">{{ detail.sample_bad_qty ?? '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"总良品量\">{{ detail.total_good_qty ?? '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"总次品量\">{{ detail.total_bad_qty ?? '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"合格率\">{{ passRate }}</el-descriptions-item>\r\n <el-descriptions-item label=\"良品库位\">{{ detail.location_code_good || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"次品库位\">{{ detail.location_code_bad || '-' }}</el-descriptions-item>\r\n </el-descriptions>\r\n <div class=\"memo-line\">备注:{{ detail.remark || '-' }}</div>\r\n <div class=\"memo-line\">\r\n 附件:\r\n <template v-if=\"detail.att_files?.length\">\r\n <el-link\r\n v-for=\"(file, index) in detail.att_files\"\r\n :key=\"index\"\r\n type=\"primary\"\r\n :href=\"file.url\"\r\n target=\"_blank\"\r\n :underline=\"false\"\r\n class=\"file-link\"\r\n >\r\n {{ file.name || `附件${Number(index) + 1}` }}\r\n </el-link>\r\n </template>\r\n <span v-else class=\"muted\">无</span>\r\n </div>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <!-- 对齐业务详情 qcOrderDetail:收货 / 入库 / 上架 -->\r\n <JRelatedDocs\r\n v-if=\"activeTab === 'related' && relatedDocTypes.length\"\r\n :doc-types=\"relatedDocTypes\"\r\n />\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"log\">\r\n <div class=\"log-filter\">\r\n <el-date-picker\r\n v-model=\"logDateRange\"\r\n type=\"datetimerange\"\r\n range-separator=\"~\"\r\n start-placeholder=\"开始时间\"\r\n end-placeholder=\"结束时间\"\r\n value-format=\"YYYY-MM-DD HH:mm:ss\"\r\n size=\"small\"\r\n style=\"width:380px\"\r\n />\r\n </div>\r\n <el-table :data=\"logPageData\" border size=\"small\" max-height=\"360\" empty-text=\"暂无操作日志\">\r\n <el-table-column label=\"操作时间\" min-width=\"160\" prop=\"op_time\" />\r\n <el-table-column label=\"操作人\" min-width=\"100\" prop=\"operator\" />\r\n <el-table-column label=\"操作类型\" min-width=\"100\" prop=\"op_type\" />\r\n <el-table-column label=\"操作详情\" min-width=\"280\" prop=\"op_detail\" show-overflow-tooltip />\r\n </el-table>\r\n <div class=\"log-pagination\">\r\n <el-pagination\r\n v-model:current-page=\"logPage\"\r\n v-model:page-size=\"logPageSize\"\r\n :page-sizes=\"[10, 20, 50]\"\r\n layout=\"total, prev, pager, next, sizes, jumper\"\r\n :total=\"logFiltered.length\"\r\n />\r\n </div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n \r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { ArrowDown, CopyDocument } from '@element-plus/icons-vue'\r\nimport DocNoLink from '../DocNoLink.vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { copyText } from '../utils/copyText'\r\nimport { getDocDetailAdapters } from '../registry'\r\nimport { JRelatedDocs } from '../../JRelatedDocs'\r\nimport type { RelatedDocTypeItem } from '../../JRelatedDocs'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n qcOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst QC_STATUS_MAP: Record<number, string> = {\r\n 100: '待审核',\r\n 200: '已驳回',\r\n 300: '质检中',\r\n 400: '已质检',\r\n}\r\n\r\nconst loading = ref(false)\r\nconst qcStandardsLoading = ref(false)\r\nconst activeTab = ref('detail')\r\nconst logDateRange = ref<[string, string] | null>(null)\r\nconst logPage = ref(1)\r\nconst logPageSize = ref(10)\r\nconst logs = ref<any[]>([])\r\n\r\nconst detail = reactive<Record<string, any>>({\r\n qc_no: '',\r\n receipt_no: '',\r\n purchase_no: '',\r\n purchase_nos: [] as string[],\r\n status: 0,\r\n sku_code: '',\r\n product_name: '',\r\n image: '',\r\n company_name: '',\r\n supplier_name: '',\r\n warehouse_name: '',\r\n purchase_leader_name: '',\r\n arrival_time: '',\r\n qc_member: '',\r\n qc_time: '',\r\n qc_type: '',\r\n qc_method: '',\r\n remark: '',\r\n urgent_flag: 1,\r\n need_qc_qty: 0,\r\n sample_qty: 0,\r\n sample_bad_qty: 0,\r\n total_good_qty: 0,\r\n total_bad_qty: 0,\r\n location_code_good: '',\r\n location_code_bad: '',\r\n att_files: [],\r\n qc_standards: [],\r\n qc_images: [] as string[],\r\n qc_att_files: [] as string[],\r\n})\r\n\r\nconst handleCopy = copyText\r\n\r\n/** 对齐 wms qcOrderDetail:收货按 receipt_order_no;入库/上架按 qc_order_no */\r\nconst relatedDocTypes = computed<RelatedDocTypeItem[]>(() => {\r\n const types: RelatedDocTypeItem[] = []\r\n const receiptNo = detail.receipt_no || detail.receipt_order_no\r\n const qcNo = detail.qc_no || props.qcOrderNo\r\n if (receiptNo) {\r\n types.push({\r\n type: 'receipt',\r\n label: '收货单',\r\n paramKey: 'receipt_order_no',\r\n docNo: receiptNo,\r\n tableProps: { showQcType: true },\r\n })\r\n }\r\n if (qcNo) {\r\n types.push(\r\n { type: 'inbound', label: '入库单', paramKey: 'qc_order_no', docNo: qcNo },\r\n { type: 'putaway', label: '上架单', paramKey: 'qc_order_no', docNo: qcNo },\r\n )\r\n }\r\n return types\r\n})\r\n\r\nconst getStatusLabel = (status?: number) =>\r\n status != null ? (QC_STATUS_MAP[status] || '') : ''\r\n\r\nconst getStatusTagType = (status: number) => {\r\n if (status === 300 || status === 400) return 'success'\r\n if (status === 100) return 'warning'\r\n if (status === 200) return 'danger'\r\n return 'info'\r\n}\r\n\r\nconst passRate = computed(() => {\r\n const good = Number(detail.total_good_qty || 0)\r\n const bad = Number(detail.total_bad_qty || 0)\r\n if (good + bad <= 0) return '-'\r\n return `${((good / (good + bad)) * 100).toFixed(2)}%`\r\n})\r\n\r\nconst parseQcFileList = (value: any): string[] => {\r\n if (!value) return []\r\n let list = value\r\n if (typeof list === 'string') {\r\n try {\r\n list = JSON.parse(list)\r\n } catch {\r\n return list.trim() ? [list.trim()] : []\r\n }\r\n }\r\n if (!Array.isArray(list)) return []\r\n return list\r\n .map((item: any) => {\r\n if (typeof item === 'string') return item\r\n return item?.url || item?.file_url || item?.main_image || ''\r\n })\r\n .filter(Boolean)\r\n}\r\n\r\nconst getQcFileName = (url: string, index: number) => {\r\n try {\r\n const path = url.split('?')[0] ?? url\r\n const name = decodeURIComponent(path.split('/').pop() || '')\r\n return name || `附件${index + 1}`\r\n } catch {\r\n return `附件${index + 1}`\r\n }\r\n}\r\n\r\nconst logFiltered = computed(() => {\r\n if (!logDateRange.value) return logs.value\r\n const [start, end] = logDateRange.value\r\n return logs.value.filter((l) => l.op_time >= start && l.op_time <= end)\r\n})\r\n\r\nconst logPageData = computed(() => {\r\n const s = (logPage.value - 1) * logPageSize.value\r\n return logFiltered.value.slice(s, s + logPageSize.value)\r\n})\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => {\r\n if (Array.isArray(detail[key])) detail[key] = []\r\n else if (typeof detail[key] === 'number') detail[key] = 0\r\n else detail[key] = key === 'urgent_flag' ? 1 : ''\r\n })\r\n logs.value = []\r\n activeTab.value = 'detail'\r\n logDateRange.value = null\r\n logPage.value = 1\r\n}\r\n\r\nconst fetchSkuQcStandardsData = async (skuCode: string) => {\r\n if (!skuCode) {\r\n detail.qc_standards = []\r\n detail.qc_images = []\r\n detail.qc_att_files = []\r\n return\r\n }\r\n const fetchSku = getDocDetailAdapters().getSkuDetail\r\n if (!fetchSku) {\r\n detail.qc_standards = []\r\n detail.qc_images = []\r\n detail.qc_att_files = []\r\n return\r\n }\r\n try {\r\n qcStandardsLoading.value = true\r\n const res: any = await fetchSku(skuCode)\r\n if (res?.code === 1 && res.data?.qc_info) {\r\n const qcInfo = res.data.qc_info\r\n let list = qcInfo.qc_content\r\n if (typeof list === 'string') {\r\n try {\r\n list = JSON.parse(list)\r\n } catch {\r\n list = []\r\n }\r\n }\r\n detail.qc_standards = Array.isArray(list)\r\n ? list.map((item: any) => ({\r\n item_name: item.qc_item || item.item_name || '-',\r\n content: item.qc_content || item.content || '-',\r\n }))\r\n : []\r\n detail.qc_images = parseQcFileList(qcInfo.images)\r\n detail.qc_att_files = parseQcFileList(qcInfo.att_files)\r\n } else {\r\n detail.qc_standards = []\r\n detail.qc_images = []\r\n detail.qc_att_files = []\r\n }\r\n } catch (err) {\r\n console.error('[QcOrderDetailView] getSkuDetail adapter error:', err)\r\n detail.qc_standards = []\r\n detail.qc_images = []\r\n detail.qc_att_files = []\r\n } finally {\r\n qcStandardsLoading.value = false\r\n }\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.qcOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getQcDetail\r\n if (!fetchApi) {\r\n console.warn('[QcOrderDetailView] 未注入 getQcDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.qcOrderNo)\r\n if (res?.code === 1 && res.data) {\r\n Object.assign(detail, {\r\n qc_no: res.data.qc_order_no || '',\r\n receipt_no: res.data.receipt_order_no || '',\r\n purchase_no: res.data.purchase_no || '',\r\n purchase_nos: res.data.purchase_nos || [],\r\n status: res.data.status ?? 0,\r\n sku_code: res.data.sku_code || '',\r\n product_name: res.data.sku_info?.product_name || '',\r\n image: res.data.sku_image?.main_image || '',\r\n company_name: res.data.company_name || '',\r\n supplier_name: res.data.supplier_name || '',\r\n warehouse_name: res.data.warehouse_name || '',\r\n purchase_leader_name: res.data.purchase_leader_name || '',\r\n arrival_time: res.data.receipt_date || '',\r\n qc_member: res.data.qc_leader_name || res.data.qc_leader || '',\r\n qc_time: res.data.qc_date || '',\r\n qc_type:\r\n res.data.qc_type === 1\r\n ? '仓库'\r\n : res.data.qc_type === 2\r\n ? '预检'\r\n : res.data.qc_type === 3\r\n ? '免检'\r\n : res.data.qc_type === 4\r\n ? '加工质检'\r\n : '',\r\n qc_method: res.data.qc_method === 1 ? '抽检' : res.data.qc_method === 2 ? '全检' : '',\r\n remark: res.data.qc_memo || res.data.review_memo || '',\r\n urgent_flag: res.data.urgent_flag || 1,\r\n sample_qty: res.data.sample_qty || 0,\r\n sample_bad_qty: res.data.sample_bad_qty || 0,\r\n total_good_qty: res.data.total_good_qty || 0,\r\n total_bad_qty: res.data.total_bad_qty || 0,\r\n location_code_good: res.data.location_code_good || '',\r\n location_code_bad: res.data.location_code_bad || '',\r\n need_qc_qty: res.data.need_qc_qty || 0,\r\n att_files: res.data.att_files || [],\r\n qc_standards: [],\r\n })\r\n fetchSkuQcStandardsData(res.data.sku_code || '')\r\n logs.value = (res.data.qc_order_log || []).map((log: any) => ({\r\n op_time: log.ctime || '',\r\n operator: log.operator || '',\r\n op_type: log.type || '',\r\n op_detail: log.info || '',\r\n }))\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[QcOrderDetailView] getQcDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst handleOpen = () => {\r\n resetDetail()\r\n fetchDetail()\r\n}\r\n\r\nconst handleClosed = () => {\r\n resetDetail()\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) handleOpen()\r\n else handleClosed()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.qc-detail {\r\n padding: 0 4px 8px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n margin-bottom: 16px;\r\n\r\n .order-no {\r\n font-size: 16px;\r\n font-weight: 600;\r\n }\r\n\r\n .copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n}\r\n\r\n.info-row {\r\n margin-bottom: 12px;\r\n}\r\n\r\n.section {\r\n margin-bottom: 12px;\r\n}\r\n\r\n.section-title {\r\n font-size: 14px;\r\n font-weight: 500;\r\n padding-left: 10px;\r\n border-left: 3px solid #409eff;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.copy-btn {\r\n margin-left: 4px;\r\n padding: 0;\r\n color: #c0c4cc;\r\n vertical-align: middle;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n}\r\n\r\n.qc-media-panel {\r\n margin-top: 10px;\r\n}\r\n\r\n.qc-media-row {\r\n display: flex;\r\n gap: 8px;\r\n margin-top: 8px;\r\n font-size: 12px;\r\n\r\n &__label {\r\n width: 36px;\r\n color: #606266;\r\n flex-shrink: 0;\r\n }\r\n}\r\n\r\n.qc-media-images {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 6px;\r\n}\r\n\r\n.qc-media-thumb {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 4px;\r\n}\r\n\r\n.qc-media-files {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n}\r\n\r\n.qc-file-item {\r\n color: #409eff;\r\n text-decoration: none;\r\n}\r\n\r\n.qc-media-empty,\r\n.muted {\r\n color: #909399;\r\n}\r\n\r\n.qc-meta {\r\n font-size: 13px;\r\n color: #606266;\r\n margin-bottom: 8px;\r\n}\r\n\r\n.memo-line {\r\n font-size: 13px;\r\n color: #606266;\r\n margin-top: 8px;\r\n}\r\n\r\n.file-link + .file-link {\r\n margin-left: 12px;\r\n}\r\n\r\n.log-filter {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.log-pagination {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-top: 12px;\r\n}\r\n\r\n.multi-order-row {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 4px;\r\n}\r\n\r\n.multi-order-dropdown {\r\n cursor: pointer;\r\n color: #909399;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","export const INBOUND_TYPE_MAP: Record<number, string> = {\r\n 1: '采购入库',\r\n 2: '换货入库',\r\n 3: '补货入库',\r\n 4: '继续来货入库',\r\n 5: '调拨入库',\r\n 6: '加工入库',\r\n 7: '内采入库',\r\n 8: '头程退货入库',\r\n 99: '其他入库',\r\n}\r\n\r\nexport const getInboundTypeLabel = (type?: number | string | null) => {\r\n if (type == null || type === '') return '-'\r\n const key = Number(type)\r\n if (!Number.isFinite(key)) return '-'\r\n return INBOUND_TYPE_MAP[key] ?? '-'\r\n}\r\n\r\nexport const INBOUND_STATUS_MAP: Record<number, string> = {\r\n 100: '待上架完成',\r\n 200: '部分入库',\r\n 300: '已完成',\r\n}\r\n\r\nexport const getInboundStatusLabel = (status?: number | string | null) => {\r\n if (status == null || status === '') return '-'\r\n const key = Number(status)\r\n if (!Number.isFinite(key)) return '-'\r\n return INBOUND_STATUS_MAP[key] ?? String(status)\r\n}\r\n\r\nexport interface InboundLocationItem {\r\n inventory_status?: number\r\n location_code?: string\r\n inbound_qty?: number\r\n inventory_status_name?: string\r\n location_type?: string\r\n location_type_name?: string\r\n location_display?: string\r\n}\r\n\r\nexport const formatInboundLocationList = (\r\n locationList?: InboundLocationItem[] | null,\r\n inventoryStatus?: number,\r\n) => {\r\n const list = (locationList || []).filter((item) => {\r\n if (inventoryStatus == null) return true\r\n return Number(item.inventory_status || 1) === inventoryStatus\r\n })\r\n if (!list.length) return '-'\r\n return list\r\n .map((item) => {\r\n if (item.location_display) return item.location_display\r\n const code = (item.location_code || '').trim() || '-'\r\n const qty = Number(item.inbound_qty || 0)\r\n const base = qty > 0 ? `${code}*${qty}` : code\r\n return item.location_type_name ? `${base}(${item.location_type_name})` : base\r\n })\r\n .join(',')\r\n}\r\n\r\nexport const getInboundGoodLocation = (row?: { location_list?: InboundLocationItem[] } | null) => {\r\n return formatInboundLocationList(row?.location_list, 1)\r\n}\r\n\r\nexport const getInboundBadLocation = (row?: { location_list?: InboundLocationItem[] } | null) => {\r\n return formatInboundLocationList(row?.location_list, 2)\r\n}\r\n\r\n/** 待检量:无良品量且无次品量时用入库量 */\r\nexport const getPendingQcQty = (row: Record<string, any>) => {\r\n if (!Number(row.good_qty) && !Number(row.bad_qty)) return row.inbound_qty ?? 0\r\n if (row.pending_qc_qty != null && row.pending_qc_qty !== '') return row.pending_qc_qty\r\n return Math.max(Number(row.inbound_qty || 0) - Number(row.good_qty || 0) - Number(row.bad_qty || 0), 0)\r\n}\r\n","<!--\r\n 入库单详情纯展示弹窗\r\n 用法:<InboundOrderDetailView v-model=\"visible\" :inbound-order-no=\"no\" />\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n top=\"4vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">入库单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ detail.inbound_order_no || '-' }}</span>\r\n <el-button\r\n v-if=\"detail.inbound_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.inbound_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n <el-tag size=\"small\" :type=\"statusTagType as any\">{{ getInboundStatusLabel(detail.status) }}</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"inbound-detail\">\r\n <div class=\"section\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-row :gutter=\"0\" class=\"info-grid\">\r\n <el-col :span=\"6\"><span class=\"label\">入库类型:</span>{{ getInboundTypeLabel(detail.inbound_type) }}</el-col>\r\n <el-col :span=\"6\"><span class=\"label\">入库仓库:</span>{{ detail.warehouse_name || '-' }}</el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">关联单号:</span>{{ detail.source_order_no || '-' }}\r\n <el-button\r\n v-if=\"detail.source_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.source_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n </el-col>\r\n <el-col :span=\"6\"><span class=\"label\">入库时间:</span>{{ detail.inbound_date || '-' }}</el-col>\r\n <el-col :span=\"6\"><span class=\"label\">创建时间:</span>{{ detail.ctime || '-' }}</el-col>\r\n <el-col :span=\"6\"><span class=\"label\">创建人:</span>{{ detail.inbound_leader_name || '-' }}</el-col>\r\n <el-col :span=\"6\"><span class=\"label\">总入库量:</span>{{ totalQty }}</el-col>\r\n <el-col :span=\"6\" />\r\n <el-col :span=\"24\" class=\"att-row\">\r\n <span class=\"label\">附件:</span>\r\n <template v-if=\"detail.att_files?.length\">\r\n <el-link\r\n v-for=\"(file, index) in detail.att_files\"\r\n :key=\"index\"\r\n type=\"primary\"\r\n :href=\"file.url\"\r\n target=\"_blank\"\r\n :underline=\"false\"\r\n class=\"att-link\"\r\n >\r\n {{ file.name || `附件${Number(index) + 1}` }}\r\n </el-link>\r\n </template>\r\n <span v-else>-</span>\r\n </el-col>\r\n <el-col :span=\"12\" class=\"memo-row\">\r\n <span class=\"label\">备注:</span>{{ detail.inbound_memo || '-' }}\r\n </el-col>\r\n </el-row>\r\n </div>\r\n\r\n <el-tabs v-model=\"activeTab\">\r\n <el-tab-pane label=\"入库产品\" name=\"products\">\r\n <el-table :data=\"productItems\" border size=\"small\" max-height=\"420\" empty-text=\"暂无入库明细\">\r\n <el-table-column label=\"序号\" width=\"55\" align=\"center\">\r\n <template #default=\"{ $index }\"><span style=\"color:#409eff\">{{ $index + 1 }}</span></template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.sku_image?.main_image\"\r\n :src=\"row.sku_image.main_image\"\r\n style=\"width:40px;height:40px\"\r\n fit=\"cover\"\r\n />\r\n <span v-else class=\"no-img\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-info\">\r\n <div>{{ row.sku_info?.product_name || '-' }}</div>\r\n <div class=\"sku-code\">\r\n <JSkuLink :code=\"row.sku_code\" />\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单号\" min-width=\"130\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink v-if=\"row.purchase_no\" type=\"purchase\" :order-no=\"row.purchase_no\" />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号\" min-width=\"120\">\r\n <template #default=\"{ row }\">{{ row.user_account_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"入库量\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ row.inbound_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"良品量\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ row.good_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"次品量\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ row.bad_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"上架单号\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink v-if=\"row.putaway_order_no\" type=\"putaway\" :order-no=\"row.putaway_order_no\" />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"待检量\" min-width=\"90\">\r\n <template #default=\"{ row }\">{{ getPendingQcQty(row) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"可用库位\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <span class=\"location-text\">{{ getInboundGoodLocation(row) }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"次品库位\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <span class=\"location-text\">{{ getInboundBadLocation(row) }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"备注\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.inbound_memo || '-' }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <JRelatedDocs\r\n v-if=\"activeTab === 'related' && relatedDocTypes.length\"\r\n :doc-types=\"relatedDocTypes\"\r\n />\r\n <div v-if=\"activeTab === 'related' && showTransferSection\" v-loading=\"transferLoading\" class=\"transfer-related\">\r\n <div class=\"sub-section-title\">调拨单</div>\r\n <el-table :data=\"transferItemRows\" border size=\"small\" empty-text=\"暂无调拨单\">\r\n <el-table-column label=\"调拨单号\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink v-if=\"row.transfer_order_no\" type=\"transfer\" :order-no=\"row.transfer_order_no\" />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"出库仓库\" min-width=\"120\" prop=\"source_warehouse_name\" />\r\n <el-table-column label=\"入库仓库\" min-width=\"120\" prop=\"target_warehouse_name\" />\r\n <el-table-column label=\"状态\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ transferStatusMap[row.status] || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"创建时间\" min-width=\"160\" prop=\"ctime\" />\r\n </el-table>\r\n </div>\r\n <el-empty\r\n v-else-if=\"activeTab === 'related' && !relatedDocTypes.length && !showTransferSection\"\r\n description=\"当前入库类型暂无关联单据\"\r\n :image-size=\"72\"\r\n />\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <div class=\"log-filter\">\r\n <el-date-picker\r\n v-model=\"logDateRange\"\r\n type=\"datetimerange\"\r\n range-separator=\"~\"\r\n start-placeholder=\"开始时间\"\r\n end-placeholder=\"结束时间\"\r\n value-format=\"YYYY-MM-DD HH:mm:ss\"\r\n style=\"width:380px\"\r\n />\r\n </div>\r\n <el-table :data=\"logPageData\" border size=\"small\" max-height=\"360\" empty-text=\"暂无操作日志\">\r\n <el-table-column label=\"操作时间\" width=\"160\" prop=\"ctime\" />\r\n <el-table-column label=\"操作人\" width=\"100\">\r\n <template #default=\"{ row }\">{{ row.operator || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"操作类型\" width=\"100\" prop=\"type\" />\r\n <el-table-column label=\"操作详情\" min-width=\"260\" prop=\"info\" show-overflow-tooltip />\r\n </el-table>\r\n <el-pagination\r\n v-model:current-page=\"logPage\"\r\n v-model:page-size=\"logPageSize\"\r\n :page-sizes=\"[10, 20, 50]\"\r\n :total=\"logFiltered.length\"\r\n layout=\"total, prev, pager, next, sizes, jumper\"\r\n class=\"log-pagination\"\r\n />\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n \r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport DocNoLink from '../DocNoLink.vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { flattenOrderItems } from '../utils/flattenOrderItems'\r\nimport { copyText } from '../utils/copyText'\r\nimport {\r\n getInboundTypeLabel,\r\n getInboundStatusLabel,\r\n getInboundGoodLocation,\r\n getInboundBadLocation,\r\n getPendingQcQty,\r\n} from '../labels/inbound'\r\nimport { getDocDetailAdapters } from '../registry'\r\nimport { JRelatedDocs } from '../../JRelatedDocs'\r\nimport type { RelatedDocTypeItem } from '../../JRelatedDocs'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n inboundOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('products')\r\nconst detail = ref<Record<string, any>>({})\r\nconst transferInfo = ref<Record<string, any> | null>(null)\r\nconst transferLoading = ref(false)\r\nconst logDateRange = ref<[string, string] | null>(null)\r\nconst logPage = ref(1)\r\nconst logPageSize = ref(10)\r\n\r\nconst handleCopy = copyText\r\nconst productItems = computed(() => flattenOrderItems(detail.value.order_item, false))\r\nconst totalQty = computed(() =>\r\n productItems.value.reduce((s: number, i: any) => s + (i.inbound_qty || 0), 0),\r\n)\r\n\r\n/**\r\n * 对齐 wms INBOUND_RELATED_DOC_TABS:\r\n * 采购/换货/补货/继续来货/内采/头程退货:receipt + qc + putaway\r\n * 加工:processing + qc + putaway\r\n * 调拨:transfer + putaway(调拨单用下方独立表)\r\n * 其他:receipt + putaway\r\n */\r\nconst transferStatusMap: Record<number, string> = {\r\n 100: '待拣货',\r\n 200: '待调拨',\r\n 300: '待收货',\r\n 400: '已调拨',\r\n}\r\n\r\nconst showTransferSection = computed(() => Number(detail.value.inbound_type) === 5)\r\n\r\nconst transferItemRows = computed(() => {\r\n const transfer = transferInfo.value\r\n if (!transfer) return []\r\n const orderItems = Array.isArray(transfer.order_item) ? transfer.order_item : []\r\n if (!orderItems.length) return [transfer]\r\n return orderItems.map((item: any) => ({\r\n ...item,\r\n transfer_order_no: transfer.transfer_order_no,\r\n source_warehouse_name: transfer.source_warehouse_name,\r\n target_warehouse_name: transfer.target_warehouse_name,\r\n status: transfer.status,\r\n ctime: transfer.ctime,\r\n }))\r\n})\r\n\r\nconst relatedDocTypes = computed<RelatedDocTypeItem[]>(() => {\r\n const inboundType = Number(detail.value.inbound_type)\r\n const sourceNo = detail.value.source_order_no || ''\r\n const inboundNo = props.inboundOrderNo || detail.value.inbound_order_no || ''\r\n const types: RelatedDocTypeItem[] = []\r\n\r\n const tabKeys: string[] = (() => {\r\n if (!Number.isFinite(inboundType)) return []\r\n if ([1, 2, 3, 4, 7, 8].includes(inboundType)) return ['receipt', 'qc', 'putaway']\r\n if (inboundType === 6) return ['processing', 'qc', 'putaway']\r\n if (inboundType === 5) return ['putaway']\r\n if (inboundType === 99) return ['receipt', 'putaway']\r\n return []\r\n })()\r\n\r\n tabKeys.forEach((key) => {\r\n if (key === 'receipt' && sourceNo) {\r\n types.push({\r\n type: 'receipt',\r\n label: '收货单',\r\n paramKey: 'receipt_order_no',\r\n docNo: sourceNo,\r\n })\r\n }\r\n if (key === 'qc' && sourceNo) {\r\n types.push({\r\n type: 'qc',\r\n label: '质检单',\r\n paramKey: 'receipt_order_no',\r\n docNo: sourceNo,\r\n })\r\n }\r\n if (key === 'putaway' && inboundNo) {\r\n types.push({\r\n type: 'putaway',\r\n label: '上架单',\r\n paramKey: 'inbound_order_no',\r\n docNo: inboundNo,\r\n })\r\n }\r\n if (key === 'processing' && sourceNo) {\r\n types.push({\r\n type: 'processing',\r\n label: '加工单',\r\n paramKey: 'processing_order_no',\r\n docNo: sourceNo,\r\n })\r\n }\r\n })\r\n\r\n return types\r\n})\r\n\r\nconst fetchTransferInfo = async (transferOrderNo?: string) => {\r\n if (!transferOrderNo) {\r\n transferInfo.value = null\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getTransferDetail\r\n if (!fetchApi) {\r\n transferInfo.value = null\r\n return\r\n }\r\n transferLoading.value = true\r\n try {\r\n const res: any = await fetchApi(transferOrderNo)\r\n transferInfo.value = res?.code === 1 ? (res.data ?? null) : null\r\n } catch {\r\n transferInfo.value = null\r\n } finally {\r\n transferLoading.value = false\r\n }\r\n}\r\n\r\nconst statusTagType = computed(() => {\r\n const map: Record<number, string> = { 100: 'warning', 200: 'primary', 300: 'success' }\r\n return map[detail.value.status] ?? 'info'\r\n})\r\n\r\nconst logFiltered = computed(() => {\r\n const logs: any[] = detail.value.inbound_order_log || []\r\n if (!logDateRange.value) return logs\r\n const [start, end] = logDateRange.value\r\n return logs.filter((l) => l.ctime >= start && l.ctime <= end)\r\n})\r\n\r\nconst logPageData = computed(() => {\r\n const s = (logPage.value - 1) * logPageSize.value\r\n return logFiltered.value.slice(s, s + logPageSize.value)\r\n})\r\n\r\nconst resetDetail = () => {\r\n detail.value = {}\r\n transferInfo.value = null\r\n activeTab.value = 'products'\r\n logDateRange.value = null\r\n logPage.value = 1\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.inboundOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getInboundDetail\r\n if (!fetchApi) {\r\n console.warn('[InboundOrderDetailView] 未注入 getInboundDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.inboundOrderNo)\r\n detail.value = res?.code === 1 ? (res.data ?? {}) : {}\r\n if (showTransferSection.value && detail.value.source_order_no) {\r\n await fetchTransferInfo(detail.value.source_order_no)\r\n }\r\n } catch (err) {\r\n console.error('[InboundOrderDetailView] getInboundDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst handleOpen = () => {\r\n resetDetail()\r\n fetchDetail()\r\n}\r\n\r\nconst handleClosed = () => {\r\n resetDetail()\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) handleOpen()\r\n else handleClosed()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.inbound-detail {\r\n padding: 0 4px 8px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n margin-bottom: 16px;\r\n\r\n .order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n }\r\n\r\n .copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n}\r\n\r\n.section {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.section-title {\r\n font-size: 15px;\r\n font-weight: 500;\r\n color: #303133;\r\n padding-left: 12px;\r\n border-left: 3px solid #409eff;\r\n margin-bottom: 14px;\r\n}\r\n\r\n.info-grid {\r\n font-size: 13px;\r\n color: #303133;\r\n row-gap: 12px;\r\n\r\n .label {\r\n color: #606266;\r\n margin-right: 4px;\r\n }\r\n\r\n .att-row,\r\n .memo-row {\r\n margin-top: 4px;\r\n }\r\n\r\n .copy-btn {\r\n margin-left: 4px;\r\n padding: 0;\r\n color: #c0c4cc;\r\n vertical-align: middle;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n}\r\n\r\n.att-link + .att-link {\r\n margin-left: 12px;\r\n}\r\n\r\n.product-info {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n font-size: 12px;\r\n\r\n .sku-code {\r\n color: #409eff;\r\n }\r\n}\r\n\r\n.no-img {\r\n font-size: 12px;\r\n color: #909399;\r\n}\r\n\r\n.location-text {\r\n font-size: 12px;\r\n color: #606266;\r\n word-break: break-all;\r\n}\r\n\r\n.copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n}\r\n\r\n.log-filter {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.log-pagination {\r\n margin-top: 12px;\r\n justify-content: flex-end;\r\n}\r\n\r\n.sub-section-title {\r\n margin: 12px 0 8px;\r\n font-weight: 500;\r\n font-size: 13px;\r\n}\r\n\r\n.transfer-related {\r\n margin-top: 12px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","export const PUTAWAY_STATUS_COMPLETED = 300\r\n","<!--\r\n 上架单详情纯展示弹窗\r\n 用法:<PutawayOrderDetailView v-model=\"visible\" :putaway-order-no=\"no\" />\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n top=\"4vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">上架单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ detail.putaway_order_no || '-' }}</span>\r\n <el-button\r\n v-if=\"detail.putaway_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.putaway_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n <el-tag :type=\"getStatusTagType(detail.status)\" size=\"small\">\r\n {{ detail.status_name || '-' }}\r\n </el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"putaway-detail\">\r\n <el-descriptions :column=\"3\" border size=\"small\">\r\n <el-descriptions-item label=\"上架单\">\r\n <DocNoLink v-if=\"detail.putaway_order_no\" type=\"putaway\" :order-no=\"detail.putaway_order_no\" />\r\n <span v-else>-</span>\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"质检单\">\r\n <DocNoLink v-if=\"detail.qc_order_no\" type=\"qc\" :order-no=\"detail.qc_order_no\" />\r\n <span v-else>-</span>\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"入库单\">\r\n <DocNoLink v-if=\"detail.inbound_order_no\" type=\"inbound\" :order-no=\"detail.inbound_order_no\" />\r\n <span v-else>-</span>\r\n </el-descriptions-item>\r\n <el-descriptions-item :label=\"sourceOrderLabel\">\r\n <DocNoLink\r\n v-if=\"sourceOrderNo\"\r\n :type=\"sourceOrderDocType\"\r\n :order-no=\"sourceOrderNo\"\r\n />\r\n <span v-else>-</span>\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"入库类型\">{{ detail.inbound_type_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"状态\">\r\n <el-tag :type=\"getStatusTagType(detail.status)\" size=\"small\">{{ detail.status_name || '-' }}</el-tag>\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"仓库\">{{ detail.warehouse_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"采购员\">{{ detail.purchase_leader_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"收货员\">{{ detail.receipt_leader_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"质检员\">{{ detail.qc_leader_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"上架员\">{{ detail.putaway_leader_name || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"备注\">{{ detail.putaway_memo || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"收货时间\">{{ detail.receipt_date || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"质检时间\">{{ detail.qc_date || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"上架时间\">{{ detail.putaway_time || '-' }}</el-descriptions-item>\r\n </el-descriptions>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"上架明细\" name=\"items\">\r\n <el-table :data=\"detail.order_item || []\" border size=\"small\" max-height=\"320\" empty-text=\"暂无上架明细\">\r\n <el-table-column label=\"采购单\" min-width=\"130\">\r\n <template #default=\"{ row }\">\r\n <DocNoLink v-if=\"row.purchase_no\" type=\"purchase\" :order-no=\"row.purchase_no\" />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ row.user_account_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"SKU\" min-width=\"120\">\r\n <template #default=\"{ row }\">\r\n <JSkuLink :code=\"row.sku_code\" />\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名\" min-width=\"140\">\r\n <template #default=\"{ row }\">{{ row.sku_info?.product_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"可用数量\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ getPutawayItemGoodQty(row) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"次品数量\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ getPutawayItemBadQty(row) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n <div class=\"sub-title\">上架库位明细</div>\r\n <el-table\r\n :data=\"detail.location_list || []\"\r\n border\r\n size=\"small\"\r\n max-height=\"280\"\r\n empty-text=\"暂无上架库位\"\r\n >\r\n <el-table-column label=\"库存状态\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n {{ row.inventory_status_name || (Number(row.inventory_status) === 2 ? '次品' : '良品') }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"上架库位\" min-width=\"180\">\r\n <template #default=\"{ row }\">{{ row.location_display || row.location_name || row.location_code || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"上架数量\" prop=\"putaway_qty\" min-width=\"100\" />\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <JRelatedDocs\r\n v-if=\"activeTab === 'related' && relatedDocTypes.length\"\r\n :doc-types=\"relatedDocTypes\"\r\n />\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"log\">\r\n <el-table :data=\"logs\" border size=\"small\" max-height=\"360\" empty-text=\"暂无操作日志\">\r\n <el-table-column label=\"操作时间\" width=\"170\" prop=\"ctime\" />\r\n <el-table-column label=\"操作人\" width=\"120\" prop=\"operator\" />\r\n <el-table-column label=\"操作类型\" width=\"120\" prop=\"type\" />\r\n <el-table-column label=\"操作详情\" min-width=\"280\" prop=\"info\" show-overflow-tooltip />\r\n </el-table>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport DocNoLink from '../DocNoLink.vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { PUTAWAY_STATUS_COMPLETED } from '../labels/putaway'\r\nimport { copyText } from '../utils/copyText'\r\nimport { getDocDetailAdapters } from '../registry'\r\nimport { JRelatedDocs } from '../../JRelatedDocs'\r\nimport type { RelatedDocTypeItem } from '../../JRelatedDocs'\r\nimport type { DocDetailType } from '../types'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n putawayOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('items')\r\nconst detail = ref<Record<string, any>>({})\r\nconst logs = ref<any[]>([])\r\nconst handleCopy = copyText\r\n\r\n/** 对齐 wms PutawayOrderDetail:加工 / 调拨 / 收货 */\r\nconst sourceOrderDocType = computed<DocDetailType>(() => {\r\n const inboundType = Number(detail.value.inbound_type)\r\n if (inboundType === 6) return 'processing'\r\n if (inboundType === 5 && !detail.value.qc_order_no) return 'transfer'\r\n return 'receipt'\r\n})\r\n\r\nconst sourceOrderLabel = computed(() => {\r\n if (sourceOrderDocType.value === 'processing') return '加工单'\r\n if (sourceOrderDocType.value === 'transfer') return '调拨单'\r\n return '收货单'\r\n})\r\n\r\nconst sourceOrderNo = computed(() => {\r\n if (sourceOrderDocType.value === 'receipt') {\r\n return detail.value.receipt_order_no || detail.value.source_order_no || ''\r\n }\r\n return detail.value.source_order_no || ''\r\n})\r\n\r\nconst relatedDocTypes = computed<RelatedDocTypeItem[]>(() => {\r\n const types: RelatedDocTypeItem[] = []\r\n const qcNo = detail.value.qc_order_no\r\n const inboundNo = detail.value.inbound_order_no\r\n if (qcNo) {\r\n types.push({ type: 'qc', label: '质检单', paramKey: 'qc_order_no', docNo: qcNo })\r\n }\r\n if (inboundNo) {\r\n types.push({\r\n type: 'inbound',\r\n label: '入库单',\r\n paramKey: 'inbound_order_no',\r\n docNo: inboundNo,\r\n })\r\n }\r\n return types\r\n})\r\n\r\nconst getStatusTagType = (status: number) => {\r\n if (status === 300) return 'success'\r\n if (status === 100 || status === 200) return 'warning'\r\n return 'info'\r\n}\r\n\r\nconst getPutawayItemGoodQty = (row: Record<string, any>) => {\r\n const status = Number(detail.value?.status)\r\n if (status === PUTAWAY_STATUS_COMPLETED) return Number(row?.good_qty ?? 0)\r\n return Number(row?.pending_good_qty ?? 0)\r\n}\r\n\r\nconst getPutawayItemBadQty = (row: Record<string, any>) => {\r\n const status = Number(detail.value?.status)\r\n if (status === PUTAWAY_STATUS_COMPLETED) return Number(row?.bad_qty ?? 0)\r\n return Number(row?.pending_bad_qty ?? 0)\r\n}\r\n\r\nconst normalizeLogs = (rawLogs: any[]) =>\r\n (rawLogs || []).map((log) => ({\r\n ctime: log.ctime || log.operate_time || log.create_time || '-',\r\n operator: log.operator || log.operator_name || log.user_name || '-',\r\n type: log.type || log.operate_type || log.action_type || '-',\r\n info: log.info || log.content || log.detail || log.log_content || '-',\r\n }))\r\n\r\nconst resetDetail = () => {\r\n detail.value = {}\r\n logs.value = []\r\n activeTab.value = 'items'\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.putawayOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getPutawayDetail\r\n if (!fetchApi) {\r\n console.warn('[PutawayOrderDetailView] 未注入 getPutawayDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.putawayOrderNo)\r\n detail.value = res?.code === 1 ? (res.data ?? {}) : {}\r\n const rawLogs = detail.value.putaway_order_log || detail.value.order_log || []\r\n logs.value = normalizeLogs(Array.isArray(rawLogs) ? rawLogs : [])\r\n } catch (err) {\r\n console.error('[PutawayOrderDetailView] getPutawayDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst handleOpen = () => {\r\n resetDetail()\r\n fetchDetail()\r\n}\r\n\r\nconst handleClosed = () => {\r\n resetDetail()\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) handleOpen()\r\n else handleClosed()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.putaway-detail {\r\n padding: 0 4px 8px;\r\n min-height: 200px;\r\n}\r\n\r\n.detail-tabs {\r\n margin-top: 12px;\r\n}\r\n\r\n.sub-title {\r\n margin-top: 12px;\r\n margin-bottom: 6px;\r\n font-weight: 500;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 出库单详情纯展示弹窗\r\n 用法:<DeliveryOrderDetailView v-model=\"visible\" :outbound-order-no=\"no\" />\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n top=\"4vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">出库单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ detail.outbound_order_no || '-' }}</span>\r\n <el-button\r\n v-if=\"detail.outbound_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.outbound_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n <el-tag size=\"small\" :type=\"statusTagType as any\">{{ statusMap[detail.status] || '-' }}</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"delivery-detail\">\r\n <div class=\"section\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-row :gutter=\"0\" class=\"info-grid\">\r\n <el-col :span=\"6\">\r\n <span class=\"label\">出库类型:</span>{{ outboundTypeMap[detail.outbound_type] || '-' }}\r\n </el-col>\r\n <el-col :span=\"6\"><span class=\"label\">出库仓库:</span>{{ detail.warehouse_name || '-' }}</el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">关联单号:</span>{{ detail.source_order_no || '-' }}\r\n <el-button\r\n v-if=\"detail.source_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.source_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n </el-col>\r\n <el-col :span=\"6\"><span class=\"label\">出库时间:</span>{{ detail.outbound_date || '-' }}</el-col>\r\n <el-col :span=\"6\"><span class=\"label\">创建时间:</span>{{ detail.ctime || '-' }}</el-col>\r\n <el-col :span=\"6\"><span class=\"label\">创建人:</span>{{ detail.outbound_leader_name || '-' }}</el-col>\r\n <el-col :span=\"6\"><span class=\"label\">总出库量:</span>{{ totalQty }}</el-col>\r\n <el-col :span=\"6\" />\r\n <el-col :span=\"24\" class=\"att-row\">\r\n <span class=\"label\">附件:</span>\r\n <template v-if=\"detail.att_files?.length\">\r\n <el-link\r\n v-for=\"(file, index) in detail.att_files\"\r\n :key=\"index\"\r\n type=\"primary\"\r\n :href=\"file.url\"\r\n target=\"_blank\"\r\n :underline=\"false\"\r\n class=\"att-link\"\r\n >\r\n {{ file.name || `附件${Number(index) + 1}` }}\r\n </el-link>\r\n </template>\r\n <span v-else>-</span>\r\n </el-col>\r\n <el-col :span=\"12\" class=\"memo-row\">\r\n <span class=\"label\">备注:</span>{{ detail.outbound_memo || '-' }}\r\n </el-col>\r\n </el-row>\r\n </div>\r\n\r\n <el-tabs v-model=\"activeTab\">\r\n <el-tab-pane label=\"出库产品\" name=\"products\">\r\n <el-table :data=\"detail.order_item || []\" border size=\"small\" max-height=\"420\" empty-text=\"暂无出库明细\">\r\n <el-table-column label=\"序号\" width=\"55\" align=\"center\">\r\n <template #default=\"{ $index }\">\r\n <span style=\"color: #409eff\">{{ $index + 1 }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"getItemImage(row)\"\r\n :src=\"getItemImage(row)\"\r\n style=\"width: 40px; height: 40px\"\r\n fit=\"cover\"\r\n />\r\n <span v-else class=\"no-img\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-info\">\r\n <div>{{ row.product_name || row.sku_info?.product_name || '-' }}</div>\r\n <div class=\"sku-code\">\r\n <JSkuLink :code=\"row.sku_code\" />\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号/FNSKU\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div>{{ row.user_account_name || '-' }}</div>\r\n <div class=\"sku-code\">{{ row.fnsku || '-' }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"可用出库量\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ row.good_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"次品出库量\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ row.bad_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"出库库位分配\" min-width=\"220\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!(row.out_location_list || []).length\" class=\"muted-text\">默认暂存库位</div>\r\n <div v-for=\"(loc, idx) in row.out_location_list || []\" :key=\"idx\" class=\"location-line\">\r\n {{ loc.out_location_code || '-' }} / {{ loc.out_qty ?? 0 }}\r\n <span class=\"muted-text\">({{ Number(loc.inventory_status) === 2 ? '次品' : '良品' }})</span>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"备注\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.outbound_memo || '-' }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <el-empty description=\"关联单据暂未接入,后续再接\" :image-size=\"72\" />\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <el-table :data=\"logPageData\" border size=\"small\" max-height=\"360\" empty-text=\"暂无操作日志\">\r\n <el-table-column label=\"操作时间\" width=\"160\" prop=\"ctime\" />\r\n <el-table-column label=\"操作人\" width=\"100\">\r\n <template #default=\"{ row }\">{{ row.operator || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"操作类型\" width=\"120\" prop=\"type\" />\r\n <el-table-column label=\"操作详情\" min-width=\"260\" prop=\"info\" show-overflow-tooltip />\r\n </el-table>\r\n <el-pagination\r\n v-model:current-page=\"logPage\"\r\n v-model:page-size=\"logPageSize\"\r\n :page-sizes=\"[10, 20, 50]\"\r\n :total=\"logList.length\"\r\n layout=\"total, prev, pager, next, sizes, jumper\"\r\n class=\"log-pagination\"\r\n />\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n \r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { copyText } from '../utils/copyText'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n outboundOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst outboundTypeMap: Record<number, string> = {\r\n 1: '销售出库',\r\n 2: '采购退货',\r\n 3: '调拨出库',\r\n 4: '加工出库',\r\n 99: '其他出库',\r\n}\r\n\r\nconst statusMap: Record<number, string> = {\r\n 100: '待出库',\r\n 200: '部分出库',\r\n 300: '已完成',\r\n 600: '已取消',\r\n}\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('products')\r\nconst detail = ref<Record<string, any>>({})\r\nconst logPage = ref(1)\r\nconst logPageSize = ref(10)\r\n\r\nconst handleCopy = copyText\r\nconst getItemImage = (row: any) => row.main_image || row.sku_image?.main_image || ''\r\n\r\nconst statusTagType = computed(() => {\r\n const map: Record<number, string> = {\r\n 100: 'warning',\r\n 200: '',\r\n 300: 'success',\r\n 600: 'info',\r\n }\r\n return map[detail.value.status] ?? 'info'\r\n})\r\n\r\nconst totalQty = computed(() =>\r\n (detail.value.order_item || []).reduce(\r\n (sum: number, item: any) => sum + (item.good_qty || 0) + (item.bad_qty || 0),\r\n 0,\r\n ),\r\n)\r\n\r\nconst logList = computed(() => detail.value.outbound_order_log || [])\r\nconst logPageData = computed(() => {\r\n const start = (logPage.value - 1) * logPageSize.value\r\n return logList.value.slice(start, start + logPageSize.value)\r\n})\r\n\r\nconst resetDetail = () => {\r\n detail.value = {}\r\n activeTab.value = 'products'\r\n logPage.value = 1\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.outboundOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getDeliveryDetail\r\n if (!fetchApi) {\r\n console.warn('[DeliveryOrderDetailView] 未注入 getDeliveryDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.outboundOrderNo)\r\n detail.value = res?.code === 1 ? (res.data ?? {}) : {}\r\n } catch (err) {\r\n console.error('[DeliveryOrderDetailView] getDeliveryDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst handleOpen = () => {\r\n resetDetail()\r\n fetchDetail()\r\n}\r\n\r\nconst handleClosed = () => {\r\n resetDetail()\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) handleOpen()\r\n else handleClosed()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.delivery-detail {\r\n padding: 0 4px 8px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n margin-bottom: 16px;\r\n\r\n .order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n }\r\n\r\n .copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n}\r\n\r\n.section {\r\n margin-bottom: 20px;\r\n}\r\n\r\n.section-title {\r\n font-size: 15px;\r\n font-weight: 500;\r\n color: #303133;\r\n padding-left: 12px;\r\n border-left: 3px solid #409eff;\r\n margin-bottom: 14px;\r\n}\r\n\r\n.info-grid {\r\n font-size: 13px;\r\n color: #303133;\r\n row-gap: 12px;\r\n\r\n .label {\r\n color: #606266;\r\n margin-right: 4px;\r\n }\r\n\r\n .att-row,\r\n .memo-row {\r\n margin-top: 4px;\r\n }\r\n\r\n .copy-btn {\r\n margin-left: 4px;\r\n padding: 0;\r\n color: #c0c4cc;\r\n vertical-align: middle;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n}\r\n\r\n.att-link + .att-link {\r\n margin-left: 12px;\r\n}\r\n\r\n.product-info {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n font-size: 12px;\r\n\r\n .sku-code {\r\n color: #409eff;\r\n }\r\n}\r\n\r\n.no-img {\r\n font-size: 12px;\r\n color: #909399;\r\n}\r\n\r\n.muted-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.location-line {\r\n font-size: 12px;\r\n line-height: 1.6;\r\n}\r\n\r\n.log-pagination {\r\n margin-top: 12px;\r\n justify-content: flex-end;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<template>\r\n <div class=\"j-action-log-panel\">\r\n <div class=\"log-toolbar\">\r\n <el-date-picker\r\n v-model=\"dateRange\"\r\n type=\"daterange\"\r\n range-separator=\"-\"\r\n start-placeholder=\"开始日期\"\r\n end-placeholder=\"结束日期\"\r\n value-format=\"YYYY-MM-DD\"\r\n clearable\r\n class=\"log-date-picker\"\r\n @change=\"handleSearch\"\r\n />\r\n <el-input\r\n v-model=\"typeKeyword\"\r\n placeholder=\"操作类型\"\r\n clearable\r\n class=\"log-type-input\"\r\n @keyup.enter=\"handleSearch\"\r\n @clear=\"handleSearch\"\r\n />\r\n <el-button type=\"primary\" @click=\"handleSearch\">搜索</el-button>\r\n </div>\r\n <el-table v-loading=\"loading\" :data=\"list\" border size=\"small\" max-height=\"360\" empty-text=\"暂无操作日志\">\r\n <el-table-column label=\"操作时间\" width=\"170\" prop=\"ctime\" />\r\n <el-table-column label=\"操作人\" width=\"120\" prop=\"operator\" />\r\n <el-table-column label=\"操作类型\" width=\"120\" prop=\"type\" />\r\n <el-table-column label=\"操作详情\" min-width=\"280\" prop=\"info\" show-overflow-tooltip />\r\n </el-table>\r\n <div class=\"log-pagination\">\r\n <el-pagination\r\n v-model:current-page=\"pageIndex\"\r\n v-model:page-size=\"pageSize\"\r\n :page-sizes=\"[10, 20, 50]\"\r\n :total=\"total\"\r\n layout=\"total, prev, pager, next, sizes, jumper\"\r\n @size-change=\"fetchList\"\r\n @current-change=\"fetchList\"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, watch } from 'vue'\r\nimport type { ActionLogListFetcher } from './types'\r\n\r\nconst props = withDefaults(defineProps<{\r\n module: string\r\n traceId?: string\r\n active?: boolean\r\n fetchList?: ActionLogListFetcher\r\n}>(), {\r\n traceId: '',\r\n active: true,\r\n})\r\n\r\nconst loading = ref(false)\r\nconst list = ref<Record<string, any>[]>([])\r\nconst total = ref(0)\r\nconst pageIndex = ref(1)\r\nconst pageSize = ref(10)\r\nconst dateRange = ref<string[]>([])\r\nconst typeKeyword = ref('')\r\n\r\nconst fetchList = async () => {\r\n const traceId = String(props.traceId || '').trim()\r\n if (!props.active || !props.module || !traceId || !props.fetchList) {\r\n list.value = []\r\n total.value = 0\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await props.fetchList({\r\n module: props.module,\r\n trace_id: traceId,\r\n pageIndex: pageIndex.value,\r\n pageSize: pageSize.value,\r\n ...(typeKeyword.value ? { type: typeKeyword.value } : {}),\r\n ...(dateRange.value?.length === 2 ? {\r\n start_time: `${dateRange.value[0]} 00:00:00`,\r\n end_time: `${dateRange.value[1]} 23:59:59`,\r\n } : {}),\r\n })\r\n if (res?.code == 1) {\r\n list.value = res.data?.list || []\r\n total.value = Number(res.data?.pageInfo?.totalNum || 0)\r\n } else {\r\n list.value = []\r\n total.value = 0\r\n }\r\n } catch (e) {\r\n console.error('[JActionLogPanel] fetchList error:', e)\r\n list.value = []\r\n total.value = 0\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst handleSearch = () => {\r\n pageIndex.value = 1\r\n fetchList()\r\n}\r\n\r\nwatch(\r\n () => [props.module, String(props.traceId || '').trim(), props.active, props.fetchList] as const,\r\n ([, , active], prev) => {\r\n if (!active) return\r\n const becameActive = !prev || prev[2] !== true\r\n if (becameActive) {\r\n pageIndex.value = 1\r\n dateRange.value = []\r\n typeKeyword.value = ''\r\n } else {\r\n pageIndex.value = 1\r\n }\r\n fetchList()\r\n },\r\n { immediate: true },\r\n)\r\n\r\ndefineExpose({ refresh: fetchList })\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.j-action-log-panel {\r\n width: 100%;\r\n}\r\n\r\n.log-toolbar {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n margin-bottom: 12px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.log-date-picker {\r\n width: 260px;\r\n}\r\n\r\n.log-type-input {\r\n width: 160px;\r\n}\r\n\r\n.log-pagination {\r\n margin-top: 12px;\r\n display: flex;\r\n justify-content: flex-end;\r\n}\r\n</style>\r\n","<!--\r\n 调拨单详情弹窗(对齐 wms TransferOrderDetailDialog)\r\n 用法:<TransferOrderDetailView v-model=\"visible\" :transfer-order-no=\"no\" />\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n title=\"调拨单详情\"\r\n width=\"92%\"\r\n top=\"4vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"transfer-order-detail-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <div v-loading=\"loading\" class=\"transfer-detail\">\r\n <div class=\"detail-header\">\r\n <div class=\"header-left\">\r\n <span class=\"order-no\">\r\n {{ detail.transfer_order_no || '-' }}\r\n <el-icon\r\n v-if=\"detail.transfer_order_no\"\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.transfer_order_no)\"\r\n >\r\n <CopyDocument />\r\n </el-icon>\r\n </span>\r\n <el-tag size=\"small\" :type=\"statusTagType\">{{ statusLabel }}</el-tag>\r\n </div>\r\n <div class=\"header-actions\">\r\n <template v-if=\"detail.status === 100\">\r\n <el-button\r\n v-if=\"canShowByPermission('transferOrder:delete')\"\r\n type=\"danger\"\r\n plain\r\n @click=\"handleDelete\"\r\n >\r\n 删除\r\n </el-button>\r\n <el-button\r\n v-if=\"canShowByPermission('transferOrder:completePicking')\"\r\n type=\"primary\"\r\n @click=\"handlePicking\"\r\n >\r\n 完成拣货\r\n </el-button>\r\n </template>\r\n <template v-else-if=\"detail.status === 200\">\r\n <el-button\r\n v-if=\"canShowByPermission('transferOrder:delete')\"\r\n type=\"danger\"\r\n plain\r\n @click=\"handleDelete\"\r\n >\r\n 删除\r\n </el-button>\r\n <el-button\r\n v-if=\"canShowByPermission('transferOrder:confirm')\"\r\n type=\"primary\"\r\n @click=\"handleConfirm\"\r\n >\r\n 确认调拨\r\n </el-button>\r\n </template>\r\n <template v-else-if=\"detail.status === 300 && detail.receipt_order_no\">\r\n <el-button\r\n v-if=\"canShowByPermission('transferOrder:receive')\"\r\n type=\"primary\"\r\n @click=\"handleReceive\"\r\n >\r\n 收货\r\n </el-button>\r\n </template>\r\n </div>\r\n </div>\r\n\r\n <div class=\"section\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-row :gutter=\"16\" class=\"info-grid\">\r\n <el-col :span=\"6\">\r\n <span class=\"label\">出库仓库:</span>\r\n <span class=\"value\">{{ detail.source_warehouse_name || '-' }}</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">入库仓库:</span>\r\n <span class=\"value\">{{ detail.target_warehouse_name || '-' }}</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">调拨方式:</span>\r\n <span class=\"value\">{{ isSimpleTransfer ? '移库' : '调拨' }}</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">预计到货时间:</span>\r\n <span class=\"value\">{{ detail.expected_arrival_date || '-' }}</span>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\" class=\"info-grid\">\r\n <el-col :span=\"6\">\r\n <span class=\"label\">创建时间:</span>\r\n <span class=\"value\">{{ detail.ctime || '-' }}</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">创建人:</span>\r\n <span class=\"value\">{{ detail.creator_leader_name || detail.creator_leader || '-' }}</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">总调拨量:</span>\r\n <span class=\"value\">{{ totalQty }}</span>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\" class=\"info-grid\">\r\n <el-col :span=\"12\">\r\n <span class=\"label\">附件:</span>\r\n <span class=\"value\">\r\n <template v-if=\"detail.att_files?.length\">\r\n <el-link\r\n v-for=\"(file, index) in detail.att_files\"\r\n :key=\"index\"\r\n type=\"primary\"\r\n :href=\"file.url\"\r\n target=\"_blank\"\r\n :underline=\"false\"\r\n class=\"file-link\"\r\n >\r\n {{ file.name || `附件${Number(index) + 1}` }}\r\n </el-link>\r\n </template>\r\n <template v-else>-</template>\r\n </span>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <span class=\"label\">备注:</span>\r\n <span class=\"value\">{{ detail.transfer_memo || '-' }}</span>\r\n </el-col>\r\n </el-row>\r\n </div>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"调拨产品\" name=\"items\">\r\n <el-table :data=\"items\" border size=\"small\" max-height=\"420\" empty-text=\"暂无调拨产品\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.sku_image?.main_image\"\r\n :src=\"row.sku_image.main_image\"\r\n style=\"width: 36px; height: 36px\"\r\n fit=\"cover\"\r\n />\r\n <span v-else class=\"img-empty\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-cell\">\r\n <span v-if=\"row.sku_info?.product_type == 20\" class=\"product-cell__tag\">组</span>\r\n <span>{{ row.sku_info?.product_name || '-' }}</span>\r\n </div>\r\n <div class=\"sku-text\">\r\n <JSkuLink :code=\"row.sku_code\" />\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号\" min-width=\"150\">\r\n <template #default=\"{ row }\">{{ row.user_account_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"可用调拨量|收货量\" min-width=\"130\" align=\"center\">\r\n <template #default=\"{ row }\">{{ formatQtyPair(row.transfer_good_qty, row.received_good_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"出库可用库位(数量)\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!formatOutLocations(row, 1).length\" class=\"muted-text\">-</div>\r\n <div v-for=\"(loc, idx) in formatOutLocations(row, 1)\" :key=\"idx\" class=\"location-line\">\r\n {{ formatLocationQty(loc) }}\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"次品调拨量|收货量\" min-width=\"130\" align=\"center\">\r\n <template #default=\"{ row }\">{{ formatQtyPair(row.transfer_bad_qty, row.received_bad_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"出库次品库位(数量)\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!formatOutLocations(row, 2).length\" class=\"muted-text\">-</div>\r\n <div v-for=\"(loc, idx) in formatOutLocations(row, 2)\" :key=\"idx\" class=\"location-line\">\r\n {{ formatLocationQty(loc) }}\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"出库批次号\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!(row.out_batch_no_list || []).length\" class=\"muted-text\">-</div>\r\n <div v-for=\"(batch, idx) in row.out_batch_no_list || []\" :key=\"idx\" class=\"location-line\">{{ batch }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"入库可用库位(数量)\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!formatInLocations(row, 1).length\" class=\"muted-text\">-</div>\r\n <div v-for=\"(loc, idx) in formatInLocations(row, 1)\" :key=\"idx\" class=\"location-line\">\r\n {{ formatLocationQty(loc) }}\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"入库次品库位(数量)\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div v-if=\"!formatInLocations(row, 2).length\" class=\"muted-text\">-</div>\r\n <div v-for=\"(loc, idx) in formatInLocations(row, 2)\" :key=\"idx\" class=\"location-line\">\r\n {{ formatLocationQty(loc) }}\r\n </div>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"log\">\r\n <JActionLogPanel\r\n module=\"transfer_order\"\r\n :trace-id=\"props.transferOrderNo\"\r\n :active=\"activeTab === 'log'\"\r\n :fetch-list=\"actionLogFetcher\"\r\n />\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport { ElMessage, ElMessageBox } from 'element-plus'\r\nimport { JActionLogPanel } from '../../JActionLogPanel'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { useBtnPermissionGate } from '../../../composables/useBtnPermissionGate'\r\nimport { copyText } from '../utils/copyText'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n transferOrderNo: string\r\n}>()\r\n\r\nconst emit = defineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n (e: 'refresh'): void\r\n}>()\r\n\r\nconst { canShowByPermission } = useBtnPermissionGate()\r\n\r\nconst statusMap: Record<number, string> = {\r\n 100: '待拣货',\r\n 200: '待调拨',\r\n 300: '待收货',\r\n 400: '已调拨',\r\n}\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('items')\r\nconst detail = reactive<Record<string, any>>({})\r\nconst items = ref<Record<string, any>[]>([])\r\nconst handleCopy = copyText\r\n\r\nconst actionLogFetcher = computed(() => getDocDetailAdapters().getActionLogList)\r\n\r\nconst statusLabel = computed(() => statusMap[detail.status] || detail.status || '-')\r\n\r\nconst statusTagType = computed(() => {\r\n if (detail.status === 400) return 'success'\r\n if (detail.status === 300) return 'warning'\r\n if (detail.status === 200) return 'warning'\r\n if (detail.status === 100) return 'info'\r\n return 'info'\r\n})\r\n\r\nconst isSimpleTransfer = computed(() => Number(detail.is_simple_transfer) == 2)\r\n\r\nconst totalQty = computed(() =>\r\n items.value.reduce((sum, item) => sum + (item.transfer_good_qty || 0) + (item.transfer_bad_qty || 0), 0),\r\n)\r\n\r\nconst formatQtyPair = (transferQty?: number | null, receivedQty?: number | null) =>\r\n `${transferQty ?? '-'} | ${receivedQty ?? '-'}`\r\n\r\nconst formatOutLocations = (row: Record<string, any>, inventoryStatus: number) =>\r\n (row.out_location_list || []).filter((loc: Record<string, any>) => Number(loc.inventory_status) == inventoryStatus)\r\n\r\nconst formatInLocations = (row: Record<string, any>, inventoryStatus: number) => {\r\n const fromList = (row.in_location_list || []).filter(\r\n (loc: Record<string, any>) => Number(loc.inventory_status) == inventoryStatus,\r\n )\r\n if (fromList.length) return fromList\r\n if (inventoryStatus == 1 && (row.location_name_good || row.location_code_good)) {\r\n return [{\r\n location_name: row.location_name_good,\r\n location_code: row.location_code_good,\r\n qty: row.transfer_good_qty,\r\n }]\r\n }\r\n if (inventoryStatus == 2 && (row.location_name_bad || row.location_code_bad)) {\r\n return [{\r\n location_name: row.location_name_bad,\r\n location_code: row.location_code_bad,\r\n qty: row.transfer_bad_qty,\r\n }]\r\n }\r\n return []\r\n}\r\n\r\nconst formatLocationQty = (loc: Record<string, any>) => {\r\n const name = loc.location_name || loc.out_location_code || loc.location_code || '-'\r\n const qty = loc.out_qty ?? loc.putaway_qty ?? loc.qty ?? '-'\r\n return `${name} (${qty})`\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n items.value = []\r\n activeTab.value = 'items'\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.transferOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getTransferDetail\r\n if (!fetchApi) {\r\n console.warn('[TransferOrderDetailView] 未注入 getTransferDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.transferOrderNo)\r\n if (res?.code === 1) {\r\n const data = res.data || {}\r\n Object.assign(detail, data)\r\n items.value = data.order_item || []\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[TransferOrderDetailView] getTransferDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst notifyRefresh = () => {\r\n emit('refresh')\r\n getDocDetailAdapters().onTransferDetailRefresh?.()\r\n}\r\n\r\nconst handlePicking = async () => {\r\n const transferOrderNo = detail.transfer_order_no\r\n const api = getDocDetailAdapters().completePickingTransferOrder\r\n if (!transferOrderNo || !api) return\r\n try {\r\n const res: any = await api(transferOrderNo)\r\n if (res?.code === 1) {\r\n ElMessage.success(res.msg || '操作成功')\r\n await fetchDetail()\r\n notifyRefresh()\r\n return\r\n }\r\n ElMessage.error(res?.msg || '操作失败')\r\n } catch (err: any) {\r\n ElMessage.error(err?.message || '操作失败')\r\n }\r\n}\r\n\r\nconst handleConfirm = async () => {\r\n const transferOrderNo = detail.transfer_order_no\r\n const api = getDocDetailAdapters().confirmTransferOrder\r\n if (!transferOrderNo || !api) return\r\n try {\r\n const res: any = await api(transferOrderNo)\r\n if (res?.code === 1) {\r\n ElMessage.success(res.msg || '操作成功')\r\n await fetchDetail()\r\n notifyRefresh()\r\n return\r\n }\r\n ElMessage.error(res?.msg || '操作失败')\r\n } catch (err: any) {\r\n ElMessage.error(err?.message || '操作失败')\r\n }\r\n}\r\n\r\nconst handleDelete = async () => {\r\n const transferOrderNo = detail.transfer_order_no\r\n const api = getDocDetailAdapters().deleteTransferOrder\r\n if (!transferOrderNo || !api) return\r\n try {\r\n await ElMessageBox.confirm(`确定删除调拨单「${transferOrderNo}」?`, '提示', {\r\n type: 'warning',\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n })\r\n const res: any = await api(transferOrderNo)\r\n if (res?.code === 1) {\r\n ElMessage.success(res.msg || '删除成功')\r\n emit('update:modelValue', false)\r\n notifyRefresh()\r\n return\r\n }\r\n ElMessage.error(res?.msg || '删除失败')\r\n } catch (err: any) {\r\n if (err === 'cancel') return\r\n ElMessage.error(err?.message || '删除失败')\r\n }\r\n}\r\n\r\nconst handleReceive = () => {\r\n const receiptOrderNo = detail.receipt_order_no\r\n if (!receiptOrderNo) return\r\n const openReceipt = getDocDetailAdapters().openTransferReceipt\r\n if (openReceipt) {\r\n openReceipt(receiptOrderNo)\r\n return\r\n }\r\n console.warn('[TransferOrderDetailView] 未注入 openTransferReceipt adapter')\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.transfer-detail {\r\n padding: 0 4px 8px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 16px;\r\n background: #f5f7fa;\r\n border-radius: 4px;\r\n margin-bottom: 16px;\r\n\r\n .header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n\r\n .order-no {\r\n font-size: 16px;\r\n font-weight: 600;\r\n color: #303133;\r\n }\r\n\r\n .copy-btn {\r\n margin-left: 4px;\r\n cursor: pointer;\r\n color: #c0c4cc;\r\n vertical-align: -0.15em;\r\n\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n }\r\n\r\n .header-actions {\r\n display: flex;\r\n gap: 8px;\r\n }\r\n}\r\n\r\n.section {\r\n margin-bottom: 16px;\r\n\r\n .section-title {\r\n font-weight: 600;\r\n font-size: 14px;\r\n padding-left: 8px;\r\n border-left: 3px solid #409eff;\r\n margin-bottom: 12px;\r\n }\r\n}\r\n\r\n.info-grid {\r\n margin-bottom: 10px;\r\n line-height: 28px;\r\n\r\n .label {\r\n color: #606266;\r\n font-size: 13px;\r\n }\r\n\r\n .value {\r\n font-size: 13px;\r\n color: #303133;\r\n }\r\n}\r\n\r\n.file-link + .file-link {\r\n margin-left: 12px;\r\n}\r\n\r\n.detail-tabs {\r\n :deep(.el-tabs__header) {\r\n margin-bottom: 12px;\r\n }\r\n}\r\n\r\n.product-cell {\r\n display: flex;\r\n align-items: center;\r\n gap: 4px;\r\n\r\n &__tag {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 18px;\r\n height: 18px;\r\n padding: 0 2px;\r\n border-radius: 2px;\r\n background: #e6a23c;\r\n color: #fff;\r\n font-size: 12px;\r\n line-height: 1;\r\n }\r\n}\r\n\r\n.sku-text,\r\n.img-empty,\r\n.muted-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.location-line {\r\n font-size: 12px;\r\n line-height: 1.6;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 加工单详情纯展示弹窗\r\n 用法:<WorkOrderDetailView v-model=\"visible\" :processing-order-no=\"no\" />\r\n 暂无独立详情接口,按单号查列表取首条\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n top=\"6vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">加工单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ detail.processing_order_no || '-' }}</span>\r\n <el-button\r\n v-if=\"detail.processing_order_no\"\r\n link\r\n class=\"copy-btn\"\r\n @click=\"handleCopy(detail.processing_order_no)\"\r\n >\r\n <el-icon><CopyDocument /></el-icon>\r\n </el-button>\r\n <span :class=\"['status-tag', statusClass(detail.status)]\">\r\n {{ statusMap[detail.status as number] || '-' }}\r\n </span>\r\n <el-tag v-if=\"detail.urgent_flag === 2\" type=\"danger\" size=\"small\" class=\"urgent-tag\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"work-order-detail\">\r\n <div class=\"section\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-row :gutter=\"0\" class=\"info-grid\">\r\n <el-col :span=\"6\">\r\n <span class=\"label\">采购计划单号:</span>\r\n <DocNoLink\r\n v-if=\"detail.purchase_plan_no\"\r\n type=\"purchasePlan\"\r\n :order-no=\"detail.purchase_plan_no\"\r\n />\r\n <span v-else>-</span>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">创建人:</span>{{ detail.creator_leader_name || '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">创建时间:</span>{{ detail.ctime || detail.create_time || '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">期望加工日期:</span>{{ detail.expected_date || '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">加工仓库:</span>{{ detail.warehouse_name || '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">计划加工:</span>{{ detail.plan_qty ?? '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">可加工:</span>{{ detail.can_process_qty ?? '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">待加工:</span>{{ detail.pending_process_qty ?? '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">已加工:</span>{{ detail.processed_qty ?? '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">组合品名:</span>{{ detail.sku_info?.product_name || '-' }}\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">组合SKU:</span>\r\n <JSkuLink :code=\"detail.sku_info?.sku_code\" />\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <span class=\"label\">店铺/平台仓库SKU:</span>{{ formatShopSku(detail) }}\r\n </el-col>\r\n <el-col :span=\"24\" class=\"memo-row\">\r\n <span class=\"label\">加工备注:</span>{{ detail.processing_memo || '-' }}\r\n </el-col>\r\n </el-row>\r\n </div>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"加工产品\" name=\"products\">\r\n <el-table\r\n :data=\"detail.order_item || []\"\r\n border\r\n size=\"small\"\r\n row-key=\"sku_code\"\r\n default-expand-all\r\n max-height=\"420\"\r\n empty-text=\"暂无加工明细\"\r\n >\r\n <el-table-column type=\"expand\" width=\"50\">\r\n <template #default=\"{ row: skuRow }\">\r\n <div class=\"inner-table-wrap\">\r\n <el-table :data=\"skuRow.items || []\" border size=\"small\" class=\"inner-table\">\r\n <el-table-column label=\"采购单号\" min-width=\"140\">\r\n <template #default=\"{ row: item }\">\r\n <DocNoLink v-if=\"item.purchase_no\" type=\"purchase\" :order-no=\"item.purchase_no\" />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购量\" min-width=\"80\" prop=\"purchase_qty\" />\r\n <el-table-column label=\"已加工\" min-width=\"80\" prop=\"processed_qty\" />\r\n <el-table-column label=\"采购公司\" min-width=\"100\" prop=\"company_name\" />\r\n <el-table-column label=\"供应商\" min-width=\"100\" prop=\"supplier_name\" />\r\n <el-table-column label=\"采购员\" min-width=\"80\" prop=\"purchase_leader_name\" />\r\n <el-table-column label=\"预计到货\" min-width=\"120\" prop=\"expected_arrival_date\" />\r\n <el-table-column label=\"采购产品备注\" min-width=\"120\">\r\n <template #default=\"{ row: item }\">{{ item.purchase_memo || '-' }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row: skuRow }\">\r\n <el-image\r\n v-if=\"skuRow.sku_image?.main_image\"\r\n :src=\"skuRow.sku_image.main_image\"\r\n style=\"width:36px;height:36px\"\r\n fit=\"cover\"\r\n />\r\n <span v-else class=\"no-img\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"160\">\r\n <template #default=\"{ row: skuRow }\">\r\n <div class=\"product-info\">\r\n <div>{{ skuRow.sku_info?.product_name || '-' }}</div>\r\n <div class=\"sku-code\">\r\n <JSkuLink :code=\"skuRow.sku_info?.sku_code || skuRow.sku_code\" />\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"组合比例\" min-width=\"90\" prop=\"combination_ratio\" />\r\n <el-table-column label=\"采购量\" min-width=\"80\" prop=\"purchase_qty\" />\r\n <el-table-column label=\"可加工量\" min-width=\"100\" prop=\"can_process_qty\" />\r\n <el-table-column label=\"待加工\" min-width=\"80\" prop=\"pending_process_qty\" />\r\n <el-table-column label=\"已加工\" min-width=\"80\" prop=\"processed_qty\" />\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <div class=\"log-filter\">\r\n <el-date-picker\r\n v-model=\"logDateRange\"\r\n type=\"datetimerange\"\r\n range-separator=\"~\"\r\n start-placeholder=\"开始时间\"\r\n end-placeholder=\"结束时间\"\r\n value-format=\"YYYY-MM-DD HH:mm:ss\"\r\n style=\"width:380px\"\r\n />\r\n </div>\r\n <el-table :data=\"logPageData\" border size=\"small\" max-height=\"360\" empty-text=\"暂无操作日志\">\r\n <el-table-column label=\"操作时间\" width=\"170\" prop=\"ctime\" />\r\n <el-table-column label=\"操作人\" width=\"100\">\r\n <template #default=\"{ row }\">{{ row.operator || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"操作类型\" width=\"110\" prop=\"type\" />\r\n <el-table-column label=\"操作详情\" min-width=\"260\" prop=\"info\" show-overflow-tooltip />\r\n </el-table>\r\n <el-pagination\r\n v-model:current-page=\"logPage\"\r\n v-model:page-size=\"logPageSize\"\r\n :page-sizes=\"[10, 20, 50]\"\r\n :total=\"logFiltered.length\"\r\n layout=\"total, prev, pager, next, sizes, jumper\"\r\n class=\"log-pagination\"\r\n />\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n \r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { CopyDocument } from '@element-plus/icons-vue'\r\nimport DocNoLink from '../DocNoLink.vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { copyText } from '../utils/copyText'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n processingOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst statusMap: Record<number, string> = {\r\n 100: '待加工',\r\n 200: '加工中',\r\n 300: '已完成',\r\n}\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('products')\r\nconst detail = ref<Record<string, any>>({})\r\nconst logDateRange = ref<[string, string] | null>(null)\r\nconst logPage = ref(1)\r\nconst logPageSize = ref(10)\r\n\r\nconst handleCopy = copyText\r\n\r\nconst statusClass = (status: number) => ({\r\n 'status-pending': status === 100,\r\n 'status-processing': status === 200,\r\n 'status-done': status === 300,\r\n})\r\n\r\nconst formatShopSku = (row: Record<string, any>) =>\r\n [row.user_account_name, row.fnsku, row.seller_sku].filter(Boolean).join(' / ') || '-'\r\n\r\nconst logFiltered = computed(() => {\r\n const logs: any[] = detail.value.process_order_log || detail.value.action_log || detail.value.processing_order_log || []\r\n if (!logDateRange.value) return logs\r\n const [start, end] = logDateRange.value\r\n return logs.filter((l) => l.ctime >= start && l.ctime <= end)\r\n})\r\n\r\nconst logPageData = computed(() => {\r\n const s = (logPage.value - 1) * logPageSize.value\r\n return logFiltered.value.slice(s, s + logPageSize.value)\r\n})\r\n\r\nconst resetDetail = () => {\r\n detail.value = {}\r\n activeTab.value = 'products'\r\n logDateRange.value = null\r\n logPage.value = 1\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.processingOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getProcessingDetail\r\n if (!fetchApi) {\r\n console.warn('[WorkOrderDetailView] 未注入 getProcessingDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n // 本项目 adapter 用列表按单号取首条;其他项目可直接返回详情结构\r\n const res: any = await fetchApi(props.processingOrderNo)\r\n if (res?.code === 1) {\r\n if (res.data?.list) {\r\n detail.value = res.data.list[0] || {}\r\n } else {\r\n detail.value = res.data || {}\r\n }\r\n } else {\r\n detail.value = {}\r\n }\r\n } catch (err) {\r\n console.error('[WorkOrderDetailView] getProcessingDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst handleOpen = () => {\r\n resetDetail()\r\n fetchDetail()\r\n}\r\n\r\nconst handleClosed = () => {\r\n resetDetail()\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) handleOpen()\r\n else handleClosed()\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.work-order-detail {\r\n padding: 0 4px 8px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n margin-bottom: 16px;\r\n\r\n .order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n color: #2f3747;\r\n }\r\n\r\n .copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n\r\n .status-tag {\r\n font-size: 13px;\r\n font-weight: 500;\r\n padding: 2px 8px;\r\n border-radius: 3px;\r\n background: #f5f7fa;\r\n\r\n &.status-pending {\r\n color: #e6a23c;\r\n background: #fdf6ec;\r\n }\r\n &.status-processing {\r\n color: #409eff;\r\n background: #ecf5ff;\r\n }\r\n &.status-done {\r\n color: #67c23a;\r\n background: #f0f9eb;\r\n }\r\n }\r\n\r\n .urgent-tag {\r\n height: 20px;\r\n line-height: 18px;\r\n padding: 0 6px;\r\n font-size: 12px;\r\n }\r\n}\r\n\r\n.section {\r\n margin-bottom: 18px;\r\n}\r\n\r\n.section-title {\r\n font-size: 14px;\r\n font-weight: 500;\r\n color: #303133;\r\n padding-left: 10px;\r\n border-left: 3px solid #409eff;\r\n margin-bottom: 14px;\r\n}\r\n\r\n.info-grid {\r\n font-size: 13px;\r\n color: #303133;\r\n row-gap: 14px;\r\n\r\n .label {\r\n color: #606266;\r\n margin-right: 4px;\r\n }\r\n\r\n .copy-btn {\r\n margin-left: 4px;\r\n padding: 0;\r\n color: #c0c4cc;\r\n vertical-align: middle;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n\r\n .memo-row {\r\n margin-top: 4px;\r\n }\r\n}\r\n\r\n.detail-tabs {\r\n :deep(.el-table th) {\r\n background: #f7f9fc;\r\n color: #2f3747;\r\n font-weight: 600;\r\n }\r\n}\r\n\r\n.inner-table-wrap {\r\n padding: 8px 16px;\r\n background: #f5f7fa;\r\n\r\n .order-no-cell {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 4px;\r\n }\r\n\r\n .copy-btn {\r\n padding: 0;\r\n color: #c0c4cc;\r\n &:hover {\r\n color: #409eff;\r\n }\r\n }\r\n\r\n .inner-table {\r\n :deep(.el-table th) {\r\n background: #e8ecf3;\r\n font-weight: 500;\r\n }\r\n }\r\n}\r\n\r\n.product-info {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n font-size: 12px;\r\n color: #3b4656;\r\n\r\n .sku-code {\r\n color: #409eff;\r\n }\r\n}\r\n\r\n.no-img {\r\n font-size: 12px;\r\n color: #909399;\r\n}\r\n\r\n.log-filter {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.log-pagination {\r\n margin-top: 12px;\r\n justify-content: flex-end;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 异常单详情纯展示弹窗(DocNoLink / DocDetailHost 打开)\r\n 接口由业务项目 adapters.getAbnormalDetail 注入\r\n 字段严格按 AbnormalOrder 详情结构,无字段兼容兜底,空值显示 -\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"abnormal-order-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">异常单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(detail.abnormal_no) }}</span>\r\n <el-tag size=\"small\" :type=\"statusTagType\">\r\n {{ formatByMap(detail.status, statusMap) }}\r\n </el-tag>\r\n <el-tag v-if=\"Number(detail.urgent_flag) === 1\" type=\"danger\" size=\"small\">加急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"abnormal-detail\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">异常单号:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.abnormal_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">状态:</span>\r\n <span class=\"info-value\">{{ formatByMap(detail.status, statusMap) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">收货单号:</span>\r\n <span class=\"info-value\">\r\n <DocNoLink\r\n v-if=\"detail.receipt_order_no\"\r\n type=\"receipt\"\r\n :order-no=\"detail.receipt_order_no\"\r\n />\r\n <template v-else>-</template>\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购单号:</span>\r\n <span class=\"info-value\">\r\n <DocNoLink v-if=\"detail.purchase_no\" type=\"purchase\" :order-no=\"detail.purchase_no\" />\r\n <template v-else>-</template>\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">收货仓库:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.warehouse_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.company_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">供应商:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.supplier_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购员:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchase_leader_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">创建人:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.create_leader_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">创建时间:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.ctime) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">修改时间:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.mtime) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">审核日期:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.review_date) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">加急:</span>\r\n <span class=\"info-value\">{{ formatUrgentFlag(detail.urgent_flag) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">操作人:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.operator) }}</span>\r\n </div>\r\n <div class=\"info-item info-item--full\">\r\n <span class=\"info-label\">审核备注:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.review_memo) }}</span>\r\n </div>\r\n <div class=\"info-item info-item--full\">\r\n <span class=\"info-label\">备注:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.abnormal_memo) }}</span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <div class=\"section-title\">异常明细</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <el-table\r\n v-if=\"orderItems.length\"\r\n :data=\"orderItems\"\r\n border\r\n size=\"small\"\r\n class=\"detail-table\"\r\n style=\"width: 100%\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.sku_image?.main_image\"\r\n :src=\"row.sku_image.main_image\"\r\n :preview-src-list=\"[row.sku_image.main_image]\"\r\n preview-teleported\r\n fit=\"cover\"\r\n class=\"product-image\"\r\n />\r\n <span v-else class=\"product-image product-image--empty\">-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-cell\">\r\n <div class=\"product-cell__name\">{{ displayValue(row.sku_info?.product_name) }}</div>\r\n <div class=\"product-cell__sku\">\r\n <JSkuLink v-if=\"row.sku_code\" :code=\"row.sku_code\" />\r\n <span v-else>-</span>\r\n </div>\r\n <div class=\"product-cell__spu\">SPU:{{ displayValue(row.sku_info?.spu_code) }}</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"通知收货量\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.notice_receive_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"实际收货量\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.receive_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"异常类型\" width=\"100\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n {{ formatByMap(row.abnormal_type, abnormalTypeMap) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"异常量\" width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.abnormal_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"处理方式\" width=\"110\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n {{ formatByMap(row.process_type, processTypeMap) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"贴标\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">{{ formatLabelFlag(row.label_flag) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"预计到货日期\" width=\"120\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.expected_arrival_date) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"到货备注\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.arrival_memo) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.user_account_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.shop_account) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"SellerSKU\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.seller_sku) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单号\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_no) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n <div v-else class=\"empty-tip\">暂无异常明细</div>\r\n </el-card>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport DocNoLink from '../DocNoLink.vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n abnormalOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\n/** 异常单状态:-1 草稿 / 100 待审核 / 200 审核未通过 / 300 待处理 / 400 已处理 / 700 已作废 */\r\nconst statusMap: Record<string, string> = {\r\n '-1': '草稿',\r\n '100': '待审核',\r\n '200': '审核未通过',\r\n '300': '待处理',\r\n '400': '已处理',\r\n '700': '已作废',\r\n}\r\n\r\nconst abnormalTypeMap: Record<string, string> = {\r\n '1': '少收',\r\n '2': '多收',\r\n '3': '错收',\r\n '4': '破损',\r\n}\r\n\r\nconst processTypeMap: Record<string, string> = {\r\n '1': '继续来货',\r\n '2': '补货',\r\n '3': '退回',\r\n '4': '让步接收',\r\n}\r\n\r\nconst loading = ref(false)\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst orderItems = computed(() => {\r\n const items = detail.order_item\r\n return Array.isArray(items) ? items : []\r\n})\r\n\r\nconst statusTagType = computed(() => {\r\n const status = Number(detail.status)\r\n if (status === -1) return 'info'\r\n if (status === 100) return 'warning'\r\n if (status === 200) return 'danger'\r\n if (status === 300) return 'primary'\r\n if (status === 400) return 'success'\r\n if (status === 700) return 'info'\r\n return 'info'\r\n})\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst formatByMap = (value: unknown, map: Record<string, string>) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return map[String(value)] ?? '-'\r\n}\r\n\r\nconst formatLabelFlag = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n const n = Number(value)\r\n if (n === 1) return '是'\r\n if (n === 0) return '否'\r\n return '-'\r\n}\r\n\r\nconst formatUrgentFlag = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n const n = Number(value)\r\n if (n === 1) return '是'\r\n if (n === 0) return '否'\r\n return '-'\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.abnormalOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getAbnormalDetail\r\n if (!fetchApi) {\r\n console.warn('[AbnormalOrderDetailView] 未注入 getAbnormalDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.abnormalOrderNo)\r\n if (res?.code === 1) {\r\n Object.assign(detail, res.data || {})\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[AbnormalOrderDetailView] getAbnormalDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.abnormal-detail {\r\n min-height: 200px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-title {\r\n margin: 16px 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 4px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-item--full {\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.product-image {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 4px;\r\n border: 1px solid #ebeef5;\r\n}\r\n\r\n.product-image--empty {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n background: #f5f7fa;\r\n}\r\n\r\n.product-cell {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.4;\r\n}\r\n\r\n.product-cell__name {\r\n color: #303133;\r\n font-size: 13px;\r\n}\r\n\r\n.product-cell__sku {\r\n font-size: 12px;\r\n}\r\n\r\n.product-cell__spu {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.empty-tip {\r\n padding: 24px 0;\r\n text-align: center;\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n\r\n.detail-table {\r\n width: 100%;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 付款单(请款单)只读详情弹窗(DocNoLink / DocDetailHost 打开)\r\n 接口由业务项目 adapters.getPaymentRequestDetail 注入\r\n\r\n adapter 约定:传入付款单号 payment_request_no,返回 { code, data, msg }\r\n data 建议为展示态字段(与 scm mapPaymentRequestDetail 对齐),至少含:\r\n payment_no / relation_no / order_total / pay_method / pay_amount / paid_amount\r\n applicant / apply_time / settle_type / settle_term / base_date / settle_period\r\n pay_deadline / prepay / finalpay / other / settle_remark / contract_file\r\n payer_name / payee_name / pay_remark / details[] / payer_info / payee_info / flow_list[]\r\n status_name? / is_urgent?\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"1200px\"\r\n top=\"5vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"payment-request-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">付款单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(detail.payment_no) }}</span>\r\n <el-tag v-if=\"detail.status_name\" size=\"small\" type=\"info\">{{ detail.status_name }}</el-tag>\r\n <el-tag v-if=\"isUrgent\" type=\"danger\" size=\"small\">加急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"payment-detail-wrap\">\r\n <div class=\"section-title\">申请信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款单号:</span>\r\n <span class=\"value\">{{ displayValue(detail.payment_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">关联单号:</span>\r\n <span class=\"value\">{{ displayValue(detail.relation_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">订单总金额:</span>\r\n <span class=\"value\">¥{{ detail.order_total || '0.0000' }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">支付方式:</span>\r\n <span class=\"value\">{{ displayValue(detail.pay_method) }}</span>\r\n </div>\r\n\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款金额:</span>\r\n <span class=\"value\">¥{{ detail.pay_amount || '0.0000' }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">已付金额:</span>\r\n <span class=\"value\">{{ displayValue(detail.paid_amount) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">申请人:</span>\r\n <span class=\"value\">{{ displayValue(detail.applicant) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">申请时间:</span>\r\n <span class=\"value\">{{ displayValue(detail.apply_time) }}</span>\r\n </div>\r\n\r\n <div class=\"info-item\">\r\n <span class=\"label\">结算方式:</span>\r\n <span class=\"value\">\r\n <div>{{ displayValue(detail.settle_type) }}</div>\r\n <div v-if=\"detail.settle_term\" class=\"settlement-term\">{{ detail.settle_term }}</div>\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款基准日期:</span>\r\n <span class=\"value\">{{ displayValue(detail.base_date) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">结算周期:</span>\r\n <span class=\"value\">{{ displayValue(detail.settle_period) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款期限:</span>\r\n <span class=\"value\">{{ displayValue(detail.pay_deadline) }}</span>\r\n </div>\r\n\r\n <div class=\"info-item\">\r\n <span class=\"label\">货款预付:</span>\r\n <span class=\"value\">{{ displayValue(detail.prepay) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">货款尾款:</span>\r\n <span class=\"value\">{{ displayValue(detail.finalpay) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">其他金额:</span>\r\n <span class=\"value\">{{ displayValue(detail.other) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">结算备注:</span>\r\n <span class=\"value\">{{ displayValue(detail.settle_remark) }}</span>\r\n </div>\r\n\r\n <div class=\"info-item\">\r\n <span class=\"label\">采购合同:</span>\r\n <span class=\"value\">\r\n <span v-if=\"detail.contract_file\" class=\"contract-file\">\r\n <el-tag type=\"info\" :disable-transitions=\"true\">\r\n {{ detail.contract_file }}\r\n </el-tag>\r\n <el-button link type=\"primary\">预览</el-button>\r\n <span class=\"sep\">|</span>\r\n <el-button link type=\"primary\">下载</el-button>\r\n </span>\r\n <span v-else>-</span>\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款方:</span>\r\n <span class=\"value ellipsis\">{{ displayValue(detail.payer_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">收款方:</span>\r\n <span class=\"value ellipsis\">{{ displayValue(detail.payee_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款备注:</span>\r\n <span class=\"value\">{{ displayValue(detail.pay_remark) }}</span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <div class=\"section-title\">付款明细</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"付款明细\" name=\"detail\">\r\n <el-table\r\n :data=\"feeRows\"\r\n border\r\n :span-method=\"detailSpanMethod\"\r\n class=\"detail-table\"\r\n size=\"small\"\r\n >\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.image\"\r\n :src=\"row.image\"\r\n fit=\"cover\"\r\n class=\"goods-img-el\"\r\n :preview-src-list=\"[row.image]\"\r\n preview-teleported\r\n />\r\n <div v-else class=\"goods-img\">\r\n <el-icon :size=\"20\" color=\"#c0c4cc\"><Picture /></el-icon>\r\n <span v-if=\"row.is_combo\" class=\"combo-badge\">组</span>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <div class=\"goods-name\">\r\n <div class=\"name\">{{ row.name || '-' }}</div>\r\n <div class=\"sku\">\r\n <JSkuLink v-if=\"row.sku\" :code=\"row.sku\" />\r\n <span v-else>-</span>\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购数量\" width=\"90\" align=\"center\" prop=\"purchase_qty\" />\r\n <el-table-column label=\"到货数量\" width=\"90\" align=\"center\" prop=\"arrival_qty\" />\r\n <el-table-column label=\"质检数量\" width=\"100\">\r\n <template #default=\"{ row }\">\r\n <div class=\"quality\">\r\n <div>良品:{{ row.quality_good }}</div>\r\n <div>次品:{{ row.quality_bad }}</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购金额(¥)\" width=\"110\" prop=\"purchase_amount\" />\r\n <el-table-column label=\"到货金额(¥)\" width=\"110\" prop=\"arrival_amount\" />\r\n <el-table-column label=\"费用类型\" width=\"90\" prop=\"fee_type\" />\r\n <el-table-column label=\"费用名称\" width=\"90\" prop=\"fee_name\" />\r\n <el-table-column label=\"费用金额(¥)\" width=\"110\">\r\n <template #default=\"{ row }\">\r\n <span :class=\"{ 'bold-amount': Number(row.fee_amount) > 0 }\">{{ row.fee_amount }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"已申请(¥)\" width=\"110\">\r\n <template #default=\"{ row }\">\r\n <span :class=\"{ 'dot-amount': Number(row.applied) > 0 }\">\r\n <i v-if=\"Number(row.applied) > 0\" class=\"dot\" />{{ row.applied }}\r\n </span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"本次申请(¥)\" width=\"110\">\r\n <template #default=\"{ row }\">\r\n <span :class=\"{ 'bold-amount': Number(row.current) > 0 }\">{{ row.current }}</span>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div class=\"detail-summary\">\r\n <span>合计:{{ details.length || 0 }} 个产品</span>\r\n <span>货款总额(¥):{{ summary.goods_total }}</span>\r\n <span>运费总额(¥):{{ summary.freight_total }}</span>\r\n <span>申请付款总额(¥):{{ summary.apply_total }}</span>\r\n </div>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"付款方信息\" name=\"payer\">\r\n <div class=\"info-grid info-grid-3\">\r\n <div class=\"info-item\">\r\n <span class=\"label\">采购公司:</span>\r\n <span class=\"value\">{{ displayValue(detail.payer_info?.purchase_company) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款方式:</span>\r\n <span class=\"value\">{{ displayValue(detail.payer_info?.pay_method) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款账号:</span>\r\n <span class=\"value\">{{ displayValue(detail.payer_info?.account_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">实际付款账号:</span>\r\n <span class=\"value\">{{ displayValue(detail.payer_info?.actual_account_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">账户名:</span>\r\n <span class=\"value\">{{ displayValue(detail.payer_info?.account_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">付款行:</span>\r\n <span class=\"value\">{{ displayValue(detail.payer_info?.bank) }}</span>\r\n </div>\r\n </div>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"收款方信息\" name=\"payee\">\r\n <div class=\"info-grid info-grid-3\">\r\n <div class=\"info-item\">\r\n <span class=\"label\">供应商:</span>\r\n <span class=\"value\">{{ displayValue(detail.payee_info?.supplier) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">收款方式:</span>\r\n <span class=\"value\">{{ displayValue(detail.payee_info?.pay_method) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">收款账号:</span>\r\n <span class=\"value\">{{ displayValue(detail.payee_info?.account_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">实际收款账号:</span>\r\n <span class=\"value\">{{ displayValue(detail.payee_info?.actual_account_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">账户名:</span>\r\n <span class=\"value\">{{ displayValue(detail.payee_info?.account_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"label\">收款行:</span>\r\n <span class=\"value\">{{ displayValue(detail.payee_info?.bank) }}</span>\r\n </div>\r\n </div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </el-card>\r\n\r\n <div class=\"section-title\">审批流程</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <el-table :data=\"flowList\" border size=\"small\" class=\"flow-table\">\r\n <el-table-column label=\"序号\" type=\"index\" width=\"60\" align=\"center\" />\r\n <el-table-column label=\"节点名称\" prop=\"node_name\" min-width=\"120\" />\r\n <el-table-column label=\"处理人\" prop=\"handler\" width=\"100\" />\r\n <el-table-column label=\"审批结果\" prop=\"result\" width=\"110\" />\r\n <el-table-column label=\"操作时间\" prop=\"op_time\" width=\"170\" />\r\n <el-table-column label=\"审批备注\" prop=\"remark\" min-width=\"120\" show-overflow-tooltip />\r\n <el-table-column label=\"审批方式\" prop=\"approve_mode\" width=\"110\" />\r\n <el-table-column label=\"耗时\" prop=\"cost_time\" width=\"100\" />\r\n </el-table>\r\n </el-card>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { Picture } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n /** 付款单号 payment_request_no */\r\n paymentRequestNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref<'detail' | 'payer' | 'payee'>('detail')\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst details = computed(() => (Array.isArray(detail.details) ? detail.details : []))\r\nconst flowList = computed(() => (Array.isArray(detail.flow_list) ? detail.flow_list : []))\r\n\r\nconst isUrgent = computed(() => {\r\n const flag = detail.is_urgent\r\n if (flag === true || Number(flag) === 2 || Number(flag) === 1) return true\r\n return false\r\n})\r\n\r\nconst feeRows = computed(() => {\r\n const rows: Array<Record<string, any>> = []\r\n details.value.forEach((d: any, di: number) => {\r\n const fees = d.fees?.length\r\n ? d.fees\r\n : [{ fee_type: '', fee_name: '', fee_amount: '', applied: '', current: '' }]\r\n fees.forEach((f: any, fi: number) => {\r\n rows.push({\r\n ...f,\r\n _detailIndex: di,\r\n _feeIndex: fi,\r\n _feeCount: fees.length,\r\n image: d.image,\r\n name: d.name,\r\n sku: d.sku,\r\n is_combo: d.is_combo,\r\n purchase_qty: d.purchase_qty,\r\n arrival_qty: d.arrival_qty,\r\n quality_good: d.quality_good,\r\n quality_bad: d.quality_bad,\r\n purchase_amount: d.purchase_amount,\r\n arrival_amount: d.arrival_amount,\r\n })\r\n })\r\n })\r\n return rows\r\n})\r\n\r\nconst summary = computed(() => {\r\n let goods = 0\r\n let freight = 0\r\n let apply = 0\r\n details.value.forEach((d: any) => {\r\n ;(d.fees || []).forEach((f: any) => {\r\n const amount = Number(f.fee_amount) || 0\r\n const current = Number(f.current) || 0\r\n if (f.fee_name === '运费') freight += amount\r\n else goods += amount\r\n apply += current\r\n })\r\n })\r\n return {\r\n goods_total: goods.toFixed(4),\r\n freight_total: freight.toFixed(4),\r\n apply_total: apply.toFixed(4),\r\n }\r\n})\r\n\r\nconst detailSpanMethod = ({ row, columnIndex }: { row: any; columnIndex: number }) => {\r\n if (columnIndex <= 6) {\r\n if (row._feeIndex === 0) return { rowspan: row._feeCount, colspan: 1 }\r\n return { rowspan: 0, colspan: 0 }\r\n }\r\n return { rowspan: 1, colspan: 1 }\r\n}\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n activeTab.value = 'detail'\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.paymentRequestNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getPaymentRequestDetail\r\n if (!fetchApi) {\r\n console.warn('[PaymentRequestDetailView] 未注入 getPaymentRequestDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.paymentRequestNo)\r\n if (res?.code === 1) {\r\n Object.assign(detail, res.data || {})\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[PaymentRequestDetailView] getPaymentRequestDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.payment-detail-wrap {\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n padding-right: 4px;\r\n min-height: 200px;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-title {\r\n position: relative;\r\n padding-left: 10px;\r\n margin-top: 20px;\r\n margin-bottom: 20px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #2f3a4a;\r\n\r\n &::before {\r\n content: '';\r\n position: absolute;\r\n left: 0;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n width: 3px;\r\n height: 14px;\r\n background: #409eff;\r\n border-radius: 2px;\r\n }\r\n\r\n &:first-of-type {\r\n margin-top: 0;\r\n }\r\n}\r\n\r\n.section-card {\r\n border: 1px solid #ebeef5;\r\n border-radius: 6px;\r\n margin-bottom: 8px;\r\n\r\n :deep(.el-card__body) {\r\n padding: 14px 16px;\r\n }\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, 1fr);\r\n gap: 12px 24px;\r\n font-size: 13px;\r\n padding: 4px 0;\r\n\r\n &.info-grid-3 {\r\n grid-template-columns: repeat(3, 1fr);\r\n padding: 12px 0;\r\n }\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: center;\r\n line-height: 1.6;\r\n\r\n .label {\r\n color: #303133;\r\n font-weight: 600;\r\n flex-shrink: 0;\r\n }\r\n\r\n .value {\r\n color: #606266;\r\n\r\n &.ellipsis {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n max-width: 180px;\r\n }\r\n }\r\n\r\n .settlement-term {\r\n color: #9b59b6;\r\n font-size: 12px;\r\n line-height: 1.45;\r\n }\r\n}\r\n\r\n.contract-file {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 4px;\r\n\r\n .sep {\r\n color: #dcdfe6;\r\n margin: 0 2px;\r\n }\r\n}\r\n\r\n.detail-tabs {\r\n margin-bottom: 8px;\r\n\r\n :deep(.el-tabs__nav-wrap)::after {\r\n height: 1px;\r\n background: #ebeef5;\r\n }\r\n}\r\n\r\n.detail-table {\r\n :deep(th) {\r\n background: #f7f9fc;\r\n color: #2f3747;\r\n font-weight: 600;\r\n }\r\n}\r\n\r\n.goods-img {\r\n position: relative;\r\n width: 40px;\r\n height: 40px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: #f0f2f5;\r\n border-radius: 4px;\r\n margin: 0 auto;\r\n\r\n .combo-badge {\r\n position: absolute;\r\n top: -6px;\r\n right: -6px;\r\n background: #ff9900;\r\n color: #fff;\r\n font-size: 11px;\r\n line-height: 1;\r\n padding: 2px 4px;\r\n border-radius: 3px;\r\n }\r\n}\r\n\r\n.goods-img-el {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 4px;\r\n border: 1px solid #dcdfe6;\r\n margin: 0 auto;\r\n}\r\n\r\n.goods-name {\r\n .name {\r\n color: #409eff;\r\n font-weight: 500;\r\n }\r\n\r\n .sku {\r\n color: #409eff;\r\n font-size: 12px;\r\n }\r\n}\r\n\r\n.quality {\r\n font-size: 12px;\r\n color: #606266;\r\n line-height: 1.6;\r\n}\r\n\r\n.bold-amount {\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.dot-amount {\r\n color: #e6a23c;\r\n display: inline-flex;\r\n align-items: center;\r\n\r\n .dot {\r\n width: 6px;\r\n height: 6px;\r\n border-radius: 50%;\r\n background: #e6a23c;\r\n margin-right: 4px;\r\n }\r\n}\r\n\r\n.detail-summary {\r\n display: flex;\r\n gap: 28px;\r\n padding: 10px 14px;\r\n background: #f7f9fc;\r\n font-size: 13px;\r\n color: #2f3a4a;\r\n border: 1px solid #ebeef5;\r\n border-top: none;\r\n}\r\n\r\n.flow-table {\r\n margin-bottom: 8px;\r\n\r\n :deep(th) {\r\n background: #f7f9fc;\r\n color: #2f3747;\r\n font-weight: 600;\r\n }\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 退换货单只读详情(DocNoLink / DocDetailHost)\r\n 接口:adapters.getReturnGoodsDetail(return_order_no) → { code, data }\r\n data 对齐 WMS ReturnOrder/doDetail(含 order_item / return_order_log)\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"92%\"\r\n top=\"4vh\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"return-order-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">退换货单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(detail.return_order_no) }}</span>\r\n <el-tag size=\"small\" :type=\"statusTagType\">{{ statusLabel }}</el-tag>\r\n <el-tag v-if=\"Number(detail.urgent_flag) === 2\" type=\"danger\" size=\"small\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"return-detail\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.company_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购仓库:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.warehouse_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">供应商:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.supplier_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购币种:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.currency) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">退货方式:</span>\r\n <span class=\"info-value\">\r\n {{ detail.return_type_name || formatByMap(detail.return_type, returnTypeMap) }}\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">关联单号:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.source_order_no) }}</span>\r\n </div>\r\n <div class=\"info-item info-item--full\">\r\n <span class=\"info-label\">退货备注:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.return_memo) }}</span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"产品信息\" name=\"products\">\r\n <el-table\r\n v-if=\"orderItems.length\"\r\n :data=\"orderItems\"\r\n border\r\n size=\"small\"\r\n class=\"detail-table\"\r\n style=\"width: 100%\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.sku_image?.main_image\"\r\n :src=\"row.sku_image.main_image\"\r\n :preview-src-list=\"[row.sku_image.main_image]\"\r\n preview-teleported\r\n fit=\"cover\"\r\n class=\"product-image\"\r\n />\r\n <span v-else class=\"product-image product-image--empty\">-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-cell\">\r\n <div class=\"product-cell__name\">{{ displayValue(row.sku_info?.product_name) }}</div>\r\n <div class=\"product-cell__sku\">\r\n <JSkuLink v-if=\"row.sku_code\" :code=\"row.sku_code\" />\r\n <span v-else>-</span>\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单号\" min-width=\"130\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_no) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号/平台仓库SKU\" min-width=\"160\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n <div>{{ displayValue(row.user_account_name || row.shop_account) }}</div>\r\n <div class=\"sub-text\">{{ displayValue(row.seller_sku) }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"含税单价\" width=\"110\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.unit_price) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"良品退货量\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.good_return_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"次品退货量\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.bad_return_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"总退货量\" width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.return_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"退款金额\" width=\"110\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.refund_amount) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"备注\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.item_memo) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"预计到货日期\" width=\"120\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.expected_arrival_date) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n <div v-else class=\"empty-tip\">暂无产品信息</div>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <el-table\r\n v-if=\"operateLogs.length\"\r\n :data=\"operateLogs\"\r\n border\r\n size=\"small\"\r\n class=\"detail-table\"\r\n >\r\n <el-table-column label=\"操作时间\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.ctime || row.operate_time) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作人\" min-width=\"100\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.operator || row.operator_name) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作类型\" min-width=\"120\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.type || row.action || row.operat_type || row.operate_type) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作详情\" min-width=\"280\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.info || row.operat_msg || row.operate_detail) }}\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div v-else class=\"empty-tip\">暂无操作日志</div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n returnOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst statusMap: Record<string, string> = {\r\n '100': '待审批',\r\n '200': '已驳回',\r\n '300': '待处理',\r\n '500': '已处理',\r\n '600': '已作废',\r\n}\r\n\r\nconst returnTypeMap: Record<string, string> = {\r\n '1': '退货退款',\r\n '2': '退货换货',\r\n '3': '仅退款',\r\n '4': '仅退货',\r\n}\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('products')\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst orderItems = computed(() => (Array.isArray(detail.order_item) ? detail.order_item : []))\r\nconst operateLogs = computed(() =>\r\n Array.isArray(detail.return_order_log) ? detail.return_order_log : [],\r\n)\r\n\r\nconst statusLabel = computed(() => {\r\n if (detail.status_name) return String(detail.status_name)\r\n return formatByMap(detail.status, statusMap)\r\n})\r\n\r\nconst statusTagType = computed(() => {\r\n const status = Number(detail.status)\r\n if (status === 100 || status === 300) return 'warning'\r\n if (status === 200) return 'danger'\r\n if (status === 500) return 'success'\r\n return 'info'\r\n})\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst formatByMap = (value: unknown, map: Record<string, string>) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return map[String(value)] ?? '-'\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n activeTab.value = 'products'\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.returnOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getReturnGoodsDetail\r\n if (!fetchApi) {\r\n console.warn('[ReturnOrderDetailView] 未注入 getReturnGoodsDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.returnOrderNo)\r\n if (res?.code === 1 || res?.data) {\r\n Object.assign(detail, res.data || {})\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[ReturnOrderDetailView] getReturnGoodsDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.return-detail {\r\n min-height: 200px;\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-title {\r\n margin: 16px 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 4px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-item--full {\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.detail-tabs {\r\n margin-top: 12px;\r\n}\r\n\r\n.product-image {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 4px;\r\n border: 1px solid #ebeef5;\r\n}\r\n\r\n.product-image--empty {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n background: #f5f7fa;\r\n}\r\n\r\n.product-cell {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.4;\r\n}\r\n\r\n.product-cell__name {\r\n color: #303133;\r\n font-size: 13px;\r\n}\r\n\r\n.product-cell__sku {\r\n color: #409eff;\r\n font-size: 12px;\r\n}\r\n\r\n.sub-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.empty-tip {\r\n padding: 24px;\r\n text-align: center;\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 成本费用单只读详情(DocNoLink / DocDetailHost)\r\n 接口:adapters.getCostExpenseDetail(cost_expense_no) → { code, data }\r\n data 对齐 scm queryCostExpense(含 items)\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"cost-expense-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">费用单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(detail.cost_expense_no) }}</span>\r\n <el-tag v-if=\"detail.status_name\" size=\"small\" :type=\"statusTagType\">\r\n {{ detail.status_name }}\r\n </el-tag>\r\n <el-tag v-if=\"Number(detail.is_urgent) === 1\" type=\"danger\" size=\"small\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"cost-detail\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">送货单号:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.delivery_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchase_company_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购仓库:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchase_warehouse_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">供应商:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.supplier_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购员:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchaser) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">费用分摊:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.fee_allocation_type_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">运费:</span>\r\n <span class=\"info-value\">\r\n {{\r\n formatFeeWithBearer(\r\n detail.freight_amount,\r\n detail.freight_currency,\r\n detail.freight_bearer_name,\r\n )\r\n }}\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">其他费用:</span>\r\n <span class=\"info-value\">\r\n {{\r\n formatOtherFee(\r\n detail.other_fee_amount,\r\n detail.other_fee_currency,\r\n detail.other_fee_bearer_name,\r\n )\r\n }}\r\n </span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <div class=\"section-title\">成本及费用明细</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <el-table :data=\"itemList\" border size=\"small\" style=\"width: 100%\">\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.main_image || row.image\"\r\n :src=\"row.main_image || row.image\"\r\n :preview-src-list=\"[row.main_image || row.image]\"\r\n fit=\"cover\"\r\n class=\"product-image\"\r\n preview-teleported\r\n />\r\n <span v-else class=\"product-image product-image--empty\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-cell\">\r\n <div class=\"product-cell__name\">{{ displayValue(row.product_name) }}</div>\r\n <div class=\"product-cell__sku\">\r\n <JSkuLink v-if=\"row.sku\" :code=\"row.sku\" />\r\n <span v-else>-</span>\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单号\" width=\"160\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_no) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺/平台仓库SKU\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div>店铺:{{ displayValue(row.shop_account) }}</div>\r\n <div class=\"sub-text\">SKU:{{ displayValue(row.platform_warehouse_sku) }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购量\" width=\"80\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单价\" width=\"120\">\r\n <template #default=\"{ row }\">\r\n <div>含税:{{ formatMoney(row.tax_inclusive_price, row.price_currency) }}</div>\r\n <div class=\"sub-text\">不含税:{{ formatMoney(row.unit_price, row.price_currency) }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"单位费用\" width=\"88\" align=\"right\">\r\n <template #default=\"{ row }\">{{ formatMoney(row.unit_fee, row.price_currency) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"单位成本\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ formatMoney(row.unit_cost, row.price_currency) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"货值\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ formatMoney(row.goods_value, row.price_currency) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"费用\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ formatMoney(row.expense, row.price_currency) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"总成本\" width=\"100\" align=\"right\">\r\n <template #default=\"{ row }\">{{ formatMoney(row.total_cost, row.price_currency) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </el-card>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n costExpenseNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst itemList = computed(() => (Array.isArray(detail.items) ? detail.items : []))\r\n\r\nconst statusTagType = computed(() => {\r\n const status = Number(detail.status)\r\n if (status === 100) return 'warning'\r\n if (status === 200) return 'success'\r\n if (status === 50) return 'info'\r\n if (status === 300) return 'danger'\r\n return 'info'\r\n})\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst toNumber = (val: unknown) => {\r\n const num = Number(val)\r\n return Number.isNaN(num) ? 0 : num\r\n}\r\n\r\nconst formatMoney = (val: unknown, currency = 'CNY') => {\r\n if (val === null || val === undefined || val === '') return '-'\r\n const num = Number(val)\r\n if (Number.isNaN(num)) return String(val)\r\n const symbol = currency === 'CNY' ? '¥' : `${currency} `\r\n return `${symbol}${num.toFixed(2)}`\r\n}\r\n\r\nconst formatFeeWithBearer = (amount: unknown, currency = 'CNY', bearerName?: string) => {\r\n const money = formatMoney(amount, currency)\r\n if (money === '-') return '-'\r\n return bearerName ? `${money} (${bearerName}承担)` : money\r\n}\r\n\r\nconst formatOtherFee = (amount: unknown, currency = 'CNY', bearerName?: string) => {\r\n const money = formatMoney(amount, currency)\r\n if (money === '-') return '-'\r\n if (!bearerName && toNumber(amount) === 0) return `${money} (无)`\r\n return bearerName ? `${money} (${bearerName}承担)` : `${money} (无)`\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.costExpenseNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getCostExpenseDetail\r\n if (!fetchApi) {\r\n console.warn('[CostExpenseDetailView] 未注入 getCostExpenseDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.costExpenseNo)\r\n if (res?.code === 1) {\r\n Object.assign(detail, res.data || {})\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[CostExpenseDetailView] getCostExpenseDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.cost-detail {\r\n min-height: 200px;\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-title {\r\n margin: 16px 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 8px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.product-image {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 4px;\r\n border: 1px solid #ebeef5;\r\n}\r\n\r\n.product-image--empty {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n background: #f5f7fa;\r\n width: 40px;\r\n height: 40px;\r\n}\r\n\r\n.product-cell {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.4;\r\n}\r\n\r\n.product-cell__name {\r\n color: #303133;\r\n font-size: 13px;\r\n}\r\n\r\n.product-cell__sku {\r\n color: #409eff;\r\n font-size: 12px;\r\n}\r\n\r\n.sub-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 收款单(采购收款)只读详情(DocNoLink / DocDetailHost)\r\n 接口:adapters.getReceiptVoucherDetail(receipt_voucher_no) → { code, data }\r\n data 建议为展示态(对齐 scm mapReceiptVoucherDetail,可含 logs[])\r\n 注意:type 为 receiptVoucher,勿与 WMS 收货单 receipt 混淆\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"1400px\"\r\n align-center\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"receipt-voucher-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">收款单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(detail.receipt_voucher_no) }}</span>\r\n <el-tag v-if=\"detail.status_name && detail.status_name !== '-'\" size=\"small\" type=\"info\">\r\n {{ detail.status_name }}\r\n </el-tag>\r\n <el-tag v-if=\"detail.is_urgent\" type=\"danger\" size=\"small\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"receipt-voucher-detail\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchase_company_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">供应商:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.supplier_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">收款类型:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.receipt_type_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">申请人:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.applicant_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">申请时间:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.apply_time) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">收款金额:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.receipt_amount) }}</span>\r\n </div>\r\n <div class=\"info-item info-item--full\">\r\n <span class=\"info-label\">收款备注:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.receipt_remark) }}</span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"收款信息\" name=\"receipt\">\r\n <el-table :data=\"detailRows\" border size=\"small\" class=\"detail-table\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\r\n <el-table-column label=\"采购单号\" min-width=\"130\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_no) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"采购金额(¥)\" min-width=\"132\">\r\n <template #default=\"{ row }\">\r\n <div class=\"amount-cell\">\r\n <div>总额:{{ formatAmount(row.purchase_amount) }}</div>\r\n <div>货款:{{ formatAmount(row.goods_amount) }}</div>\r\n <div>运费:{{ formatAmount(row.freight_amount) }}</div>\r\n <div>其他:{{ formatAmount(row.other_fee_amount) }}</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"实付金额(¥)\" min-width=\"132\">\r\n <template #default=\"{ row }\">\r\n <div class=\"amount-cell\">\r\n <div>总额:{{ formatAmount(row.paid_amount) }}</div>\r\n <div>货款:{{ formatAmount(row.paid_goods_amount) }}</div>\r\n <div>运费:{{ formatAmount(row.paid_freight_amount) }}</div>\r\n <div>其他:{{ formatAmount(row.paid_other_fee_amount) }}</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"关联退换货单号\" min-width=\"150\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.return_exchange_no) }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"return_qty\" label=\"退货数量\" width=\"80\" align=\"center\" />\r\n <el-table-column label=\"退款金额(¥)\" width=\"100\" align=\"center\">\r\n <template #default=\"{ row }\">{{ formatAmount(row.refund_amount) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"本次申请(¥)\" min-width=\"118\">\r\n <template #default=\"{ row }\">\r\n <div class=\"amount-cell\">\r\n <div>货款:{{ formatAmount(row.current_apply_goods_amount) }}</div>\r\n <div>运费:{{ formatAmount(row.current_apply_freight_amount) }}</div>\r\n <div>其他:{{ formatAmount(row.current_apply_other_fee_amount) }}</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <el-table :data=\"logs\" border size=\"small\" class=\"detail-table\">\r\n <el-table-column prop=\"ctime\" label=\"操作时间\" width=\"170\" align=\"center\" />\r\n <el-table-column prop=\"operator\" label=\"操作人\" width=\"120\" />\r\n <el-table-column prop=\"operat_type\" label=\"操作类型\" width=\"120\" />\r\n <el-table-column prop=\"operat_msg\" label=\"操作详情\" min-width=\"280\" show-overflow-tooltip />\r\n </el-table>\r\n <div v-if=\"!logs.length\" class=\"empty-tip\">暂无操作日志</div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n /** 收款单号 receipt_voucher_no */\r\n receiptVoucherNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('receipt')\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst detailRows = computed(() => (Array.isArray(detail.details) ? detail.details : []))\r\nconst logs = computed(() => (Array.isArray(detail.logs) ? detail.logs : []))\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst formatAmount = (value: unknown) => {\r\n const text = String(value ?? '').trim()\r\n if (!text || text === '0' || text === '0.00' || text === '0.0000') return '-'\r\n return text\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n activeTab.value = 'receipt'\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.receiptVoucherNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getReceiptVoucherDetail\r\n if (!fetchApi) {\r\n console.warn('[ReceiptVoucherDetailView] 未注入 getReceiptVoucherDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.receiptVoucherNo)\r\n if (res?.code === 1 && res.data) {\r\n Object.assign(detail, res.data)\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[ReceiptVoucherDetailView] getReceiptVoucherDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.receipt-voucher-detail {\r\n min-height: 200px;\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n}\r\n\r\n.detail-header {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.order-no {\r\n font-size: 18px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-title {\r\n margin: 16px 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 8px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(3, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-item--full {\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.detail-tabs {\r\n margin-top: 8px;\r\n}\r\n\r\n.amount-cell {\r\n font-size: 12px;\r\n line-height: 1.55;\r\n color: #606266;\r\n}\r\n\r\n.empty-tip {\r\n padding: 24px;\r\n text-align: center;\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","export type PurchaseQtyDetail = {\r\n sku_code?: string\r\n purchase_no?: string\r\n not_qc_qty: number\r\n qc_in_progress_qty: number\r\n putaway_pending_qty: number\r\n good_qty: number\r\n bad_qty: number\r\n return_qty: number\r\n exchange_qty: number\r\n}\r\n\r\nexport type DeliveryQtyDetail = {\r\n sku_code?: string\r\n purchase_no?: string\r\n approve_qty: number\r\n notified_qty: number\r\n unnotified_qty: number\r\n}\r\n\r\nexport const normalizeResponseList = (res: unknown) => {\r\n const payload = res as Record<string, unknown> | unknown[] | null | undefined\r\n if (Array.isArray(payload)) return payload\r\n if (Array.isArray((payload as Record<string, unknown>)?.data)) {\r\n return (payload as Record<string, unknown>).data as unknown[]\r\n }\r\n const data = (payload as Record<string, unknown>)?.data as Record<string, unknown> | undefined\r\n if (Array.isArray(data?.list)) return data.list as unknown[]\r\n return []\r\n}\r\n\r\nconst toQtyNumber = (value: unknown) => {\r\n const num = Number(value ?? 0)\r\n return Number.isFinite(num) ? num : 0\r\n}\r\n\r\nexport const parseQtyDetailItem = (\r\n item: Record<string, unknown> | null | undefined,\r\n): PurchaseQtyDetail | null => {\r\n if (!item || typeof item !== 'object') return null\r\n return {\r\n sku_code: String(item.sku_code || '').trim() || undefined,\r\n purchase_no: String(item.purchase_no || '').trim() || undefined,\r\n not_qc_qty: toQtyNumber(item.not_qc_qty),\r\n qc_in_progress_qty: toQtyNumber(item.qc_in_progress_qty),\r\n putaway_pending_qty: toQtyNumber(item.putaway_pending_qty),\r\n good_qty: toQtyNumber(item.good_qty),\r\n bad_qty: toQtyNumber(item.bad_qty),\r\n return_qty: toQtyNumber(item.return_qty),\r\n exchange_qty: toQtyNumber(item.exchange_qty),\r\n }\r\n}\r\n\r\nexport const parseDeliveryQtyDetailItem = (\r\n item: Record<string, unknown> | null | undefined,\r\n): DeliveryQtyDetail | null => {\r\n if (!item || typeof item !== 'object') return null\r\n return {\r\n sku_code: String(item.sku_code || '').trim() || undefined,\r\n purchase_no: String(item.purchase_no || '').trim() || undefined,\r\n approve_qty: toQtyNumber(item.approve_qty),\r\n notified_qty: toQtyNumber(item.notified_qty),\r\n unnotified_qty: toQtyNumber(item.unnotified_qty),\r\n }\r\n}\r\n\r\nexport const findPurchaseQtyRecord = (res: unknown, purchaseNo: string) => {\r\n const targetNo = String(purchaseNo || '').trim()\r\n if (!targetNo) return null\r\n return (\r\n normalizeResponseList(res).find(\r\n (item) => String((item as Record<string, unknown>)?.purchase_no || '').trim() === targetNo,\r\n ) as Record<string, unknown> | undefined\r\n ) || null\r\n}\r\n\r\nexport const buildSkuQtyMap = (record: Record<string, unknown> | null) => {\r\n const map = new Map<string, PurchaseQtyDetail>()\r\n if (!record) return map\r\n const skuList = Array.isArray(record.sku_list) ? record.sku_list : []\r\n skuList.forEach((item) => {\r\n const row = item as Record<string, unknown>\r\n const detail = parseQtyDetailItem(row)\r\n const skuCode = detail?.sku_code || String(row?.sku_code || '').trim()\r\n if (skuCode && detail) map.set(skuCode, detail)\r\n })\r\n return map\r\n}\r\n\r\nexport const buildSkuDeliveryQtyMap = (record: Record<string, unknown> | null) => {\r\n const map = new Map<string, DeliveryQtyDetail>()\r\n if (!record) return map\r\n const skuList = Array.isArray(record.sku_list) ? record.sku_list : []\r\n skuList.forEach((item) => {\r\n const row = item as Record<string, unknown>\r\n const detail = parseDeliveryQtyDetailItem(row)\r\n const skuCode = detail?.sku_code || String(row?.sku_code || '').trim()\r\n if (skuCode && detail) map.set(skuCode, detail)\r\n })\r\n return map\r\n}\r\n\r\nexport const calcArrivedQtyTotal = (detail?: PurchaseQtyDetail | null) => {\r\n if (!detail) return null\r\n return detail.not_qc_qty\r\n + detail.qc_in_progress_qty\r\n + detail.putaway_pending_qty\r\n + detail.good_qty\r\n + detail.bad_qty\r\n}\r\n\r\nexport const calcPendingDeliveryQtyTotal = (detail?: DeliveryQtyDetail | null) => {\r\n if (!detail) return null\r\n return detail.approve_qty + detail.notified_qty + detail.unnotified_qty\r\n}\r\n\r\nexport const formatQtyTotal = (total: number | null | undefined) => {\r\n if (total === null || total === undefined) return '-'\r\n return String(total)\r\n}\r\n\r\nexport const formatQtyField = (\r\n detail: PurchaseQtyDetail | null | undefined,\r\n key: keyof PurchaseQtyDetail,\r\n) => {\r\n if (!detail || key === 'sku_code' || key === 'purchase_no') return '-'\r\n return String(detail[key] ?? 0)\r\n}\r\n\r\nexport const formatDeliveryQtyField = (\r\n detail: DeliveryQtyDetail | null | undefined,\r\n key: 'approve_qty' | 'notified_qty' | 'unnotified_qty',\r\n) => {\r\n if (!detail) return '-'\r\n return String(detail[key] ?? 0)\r\n}\r\n\r\nexport const mergeProductQtyDetails = (\r\n products: Array<Record<string, unknown>>,\r\n purchaseNo: string,\r\n wmsRes: unknown,\r\n deliveryRes: unknown,\r\n) => {\r\n const wmsRecord = findPurchaseQtyRecord(wmsRes, purchaseNo)\r\n const deliveryRecord = findPurchaseQtyRecord(deliveryRes, purchaseNo)\r\n const wmsSkuMap = buildSkuQtyMap(wmsRecord)\r\n const deliverySkuMap = buildSkuDeliveryQtyMap(deliveryRecord)\r\n\r\n return products.map((product) => {\r\n const sku = String(product.sku || product.sku_code || '').trim()\r\n return {\r\n ...product,\r\n qty_detail: sku ? (wmsSkuMap.get(sku) ?? null) : null,\r\n delivery_qty_detail: sku ? (deliverySkuMap.get(sku) ?? null) : null,\r\n }\r\n })\r\n}\r\n","<!--\r\n 采购订单只读详情(DocNoLink / DocDetailHost)\r\n type=\"purchase\"\r\n 接口:adapters.getPurchaseOrderDetail(purchase_no) → { code, data }\r\n data:\r\n purchase_no\r\n basic_info\r\n purchase_products[]\r\n related_documents[](只读详情关联 Tab 已改用 JRelatedDocs,不再直接渲染该字段)\r\n operation_logs[]\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"purchase-order-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">采购订单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(purchaseNo) }}</span>\r\n <el-tag v-if=\"statusLabel !== '-'\" size=\"small\" :type=\"statusTagType\">\r\n {{ statusLabel }}\r\n </el-tag>\r\n <el-tag v-if=\"isUrgent\" type=\"danger\" size=\"small\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"purchase-detail\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司:</span>\r\n <span class=\"info-value\">{{ displayValue(info.purchase_company_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购仓库:</span>\r\n <span class=\"info-value\">{{ displayValue(info.stock_name || info.stock_code) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">供应商:</span>\r\n <span class=\"info-value\">{{ displayValue(info.supplier_name || info.supplier) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">联系人:</span>\r\n <span class=\"info-value\">{{ displayValue(info.contact_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">联系方式:</span>\r\n <span class=\"info-value\">{{ displayValue(info.contact_phone) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">结算方式:</span>\r\n <span class=\"info-value settlement-value\">\r\n <div>{{ displayValue(info.py_method_type_name || info.py_method_type) }}</div>\r\n <div v-if=\"settlementTermText\" class=\"settlement-term\">{{ settlementTermText }}</div>\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">预付比例:</span>\r\n <span class=\"info-value\">{{ formatPercent(info.prepay_rate) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">结算账期:</span>\r\n <span class=\"info-value settlement-value\">\r\n <div>基准日期:{{ displayValue(info.ref_date_type_name || info.ref_date_type) }}</div>\r\n <div>周期:{{ displayValue(info.settle_cycle_type_name || info.settle_cycle_type) }}</div>\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">结算备注:</span>\r\n <span class=\"info-value\">{{ displayValue(info.settlement_remark) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">支付方式:</span>\r\n <span class=\"info-value\">{{ displayValue(info.payment_method_name || info.payment_method) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购币种:</span>\r\n <span class=\"info-value\">{{ displayValue(info.purchase_currency || info.currency) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">含税:</span>\r\n <span class=\"info-value\">{{ displayValue(info.is_tax_included_name ?? formatTaxIncluded(info.is_tax_included)) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购员:</span>\r\n <span class=\"info-value\">{{ displayValue(info.purchaser_name || info.purchaser) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购类型:</span>\r\n <span class=\"info-value\">{{ displayValue(info.purchase_type_name || info.purchase_type) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">单据负责人:</span>\r\n <span class=\"info-value\">{{ displayValue(info.owner_user_name || info.doc_owners) }}</span>\r\n </div>\r\n <div class=\"info-item info-item--full\">\r\n <span class=\"info-label\">采购备注:</span>\r\n <span class=\"info-value\">{{ displayValue(info.purchase_remark) }}</span>\r\n </div>\r\n <div v-if=\"attachments.length\" class=\"info-item info-item--full\">\r\n <span class=\"info-label\">附件:</span>\r\n <div class=\"attachment-list\">\r\n <a\r\n v-for=\"(file, index) in attachments\"\r\n :key=\"`${file.url}-${index}`\"\r\n class=\"attachment-chip\"\r\n :href=\"file.url || undefined\"\r\n :target=\"file.url ? '_blank' : undefined\"\r\n rel=\"noopener noreferrer\"\r\n >\r\n {{ file.name || file.url || '-' }}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"采购产品\" name=\"products\">\r\n <el-table :data=\"productRows\" border size=\"small\" style=\"width: 100%\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.main_image || row.image || row.product_image\"\r\n :src=\"row.main_image || row.image || row.product_image\"\r\n :preview-src-list=\"[row.main_image || row.image || row.product_image]\"\r\n fit=\"cover\"\r\n class=\"product-image\"\r\n preview-teleported\r\n />\r\n <span v-else class=\"product-image product-image--empty\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-cell\">\r\n <div class=\"product-cell__name\">{{ displayValue(row.product_name) }}</div>\r\n <div class=\"product-cell__sku\">\r\n <JSkuLink v-if=\"row.sku || row.sku_code\" :code=\"row.sku || row.sku_code\" />\r\n <span v-else>-</span>\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"计划编号\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.requirement_no\"\r\n type=\"purchasePlan\"\r\n :order-no=\"String(row.requirement_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.shop_account) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"箱规名称\" min-width=\"100\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.box_spec_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"单箱数量\" width=\"88\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.box_sku_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"箱数\" width=\"72\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.box_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"采购量\" width=\"88\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"到货量\" width=\"88\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-popover trigger=\"click\" placement=\"bottom\" :width=\"168\" teleported>\r\n <template #reference>\r\n <span class=\"qty-popover-trigger\">\r\n {{ formatQtyTotal(calcArrivedQtyTotal(row.qty_detail)) }}\r\n <el-icon class=\"qty-popover-trigger__icon\"><CaretBottom /></el-icon>\r\n </span>\r\n </template>\r\n <div class=\"qty-popover-panel\">\r\n <div class=\"qty-popover-row\">\r\n <span>未质检</span>\r\n <span>{{ formatQtyField(row.qty_detail, 'not_qc_qty') }}</span>\r\n </div>\r\n <div class=\"qty-popover-row\">\r\n <span>质检中</span>\r\n <span>{{ formatQtyField(row.qty_detail, 'qc_in_progress_qty') }}</span>\r\n </div>\r\n <div class=\"qty-popover-row\">\r\n <span>待上架</span>\r\n <span>{{ formatQtyField(row.qty_detail, 'putaway_pending_qty') }}</span>\r\n </div>\r\n <div class=\"qty-popover-row\">\r\n <span>良品量</span>\r\n <span>{{ formatQtyField(row.qty_detail, 'good_qty') }}</span>\r\n </div>\r\n <div class=\"qty-popover-row\">\r\n <span>次品量</span>\r\n <span>{{ formatQtyField(row.qty_detail, 'bad_qty') }}</span>\r\n </div>\r\n </div>\r\n </el-popover>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"待到货量\" width=\"88\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-popover trigger=\"click\" placement=\"bottom\" :width=\"168\" teleported>\r\n <template #reference>\r\n <span class=\"qty-popover-trigger\">\r\n {{ formatQtyTotal(calcPendingDeliveryQtyTotal(row.delivery_qty_detail)) }}\r\n <el-icon class=\"qty-popover-trigger__icon\"><CaretBottom /></el-icon>\r\n </span>\r\n </template>\r\n <div class=\"qty-popover-panel\">\r\n <div class=\"qty-popover-row\">\r\n <span>待审核</span>\r\n <span>{{ formatDeliveryQtyField(row.delivery_qty_detail, 'approve_qty') }}</span>\r\n </div>\r\n <div class=\"qty-popover-row\">\r\n <span>已通知</span>\r\n <span>{{ formatDeliveryQtyField(row.delivery_qty_detail, 'notified_qty') }}</span>\r\n </div>\r\n <div class=\"qty-popover-row\">\r\n <span>未通知</span>\r\n <span>{{ formatDeliveryQtyField(row.delivery_qty_detail, 'unnotified_qty') }}</span>\r\n </div>\r\n </div>\r\n </el-popover>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"退货量\" width=\"80\" align=\"center\">\r\n <template #default=\"{ row }\">{{ formatQtyField(row.qty_detail, 'return_qty') }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"换货量\" width=\"80\" align=\"center\">\r\n <template #default=\"{ row }\">{{ formatQtyField(row.qty_detail, 'exchange_qty') }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"税率\" width=\"64\" align=\"center\">\r\n <template #default=\"{ row }\">{{ formatPercent(row.tax_rate) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"单价/含税单价\" width=\"140\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.unit_price) }} / {{ displayValue(row.tax_inclusive_price) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"质检类型\" width=\"100\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.qc_type_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"是否赠品\" width=\"100\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.is_gift_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"预计到货日期\" width=\"120\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.expected_arrival_date) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"产品备注\" min-width=\"120\" align=\"center\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.product_remark) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"报关产品\" name=\"customs\">\r\n <div class=\"customs-toolbar\">\r\n <span>报关确认状态:</span>\r\n <el-tag v-if=\"declarationConfirmLabel\" size=\"small\" :type=\"declarationConfirmTagType\">\r\n {{ declarationConfirmLabel }}\r\n </el-tag>\r\n <el-tag v-else type=\"info\" size=\"small\">未确认</el-tag>\r\n </div>\r\n <el-table\r\n :data=\"customsProducts\"\r\n v-loading=\"customsLoading\"\r\n border\r\n size=\"small\"\r\n style=\"width: 100%\"\r\n empty-text=\"暂无报关产品数据\"\r\n row-key=\"_uid\"\r\n >\r\n <el-table-column label=\"报关单号\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <span class=\"doc-no-text\">{{ displayValue(row.declaration_no) }}</span>\r\n <el-tag :type=\"getCustomsStatusTagType(row.status)\" size=\"small\" style=\"margin-left: 4px\">\r\n {{ displayValue(row.status_name) }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image v-if=\"row.image_url\" :src=\"row.image_url\" style=\"width: 32px; height: 32px\" fit=\"cover\" />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div>{{ displayValue(row.product_name) }}</div>\r\n <div class=\"product-cell__sku\">\r\n <JSkuLink v-if=\"row.sku_code\" :code=\"row.sku_code\" />\r\n <span v-else>-</span>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"海关编码\" min-width=\"120\">\r\n <template #default=\"{ row }\">{{ displayValue(row.customs_code) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"报关品名\" min-width=\"120\">\r\n <template #default=\"{ row }\">{{ displayValue(row.declaration_name) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"报关数量\" width=\"90\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.declaration_count) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"报关单位\" width=\"80\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.unit) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"报关单价(¥)\" width=\"110\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.declaration_price) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"报关金额(¥)\" width=\"110\" align=\"right\">\r\n <template #default=\"{ row }\">{{ displayValue(row.declaration_amount) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"是否商检\" width=\"90\" align=\"center\">\r\n <template #default=\"{ row }\">{{ row.is_sampled == 1 ? '是' : '否' }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"物流信息\" name=\"logistics\">\r\n <el-table\r\n :data=\"logisticsData\"\r\n v-loading=\"logisticsLoading\"\r\n border\r\n size=\"small\"\r\n style=\"width: 100%\"\r\n empty-text=\"暂无物流信息\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"送货单号\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <span class=\"doc-no-text\">{{ displayValue(row.delivery_no) }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"状态\" width=\"100\">\r\n <template #default=\"{ row }\">\r\n <el-tag :type=\"getLogisticsStatusTagType(row.status)\" size=\"small\">\r\n {{ displayValue(row.status_name) }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"供应商\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.supplier_name || row.supplier) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"采购公司\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_company_name || row.purchase_company) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"采购仓库\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.receive_stock_name || row.warehouse) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"采购员\" width=\"90\">\r\n <template #default=\"{ row }\">{{ displayValue(row.purchaser) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"到货备注\" min-width=\"160\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.arrival_remark) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"审批时间\" width=\"160\">\r\n <template #default=\"{ row }\">{{ displayValue(row.approve_time) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"创建时间\" width=\"160\">\r\n <template #default=\"{ row }\">{{ displayValue(row.ctime) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"采购发票\" name=\"invoice\">\r\n <div v-loading=\"invoiceLoading\">\r\n <div v-if=\"!invoiceGroups.length && !invoiceLoading\" class=\"empty-tip\">暂无采购发票数据</div>\r\n <div v-for=\"(group, gIdx) in invoiceGroups\" :key=\"group._uid\" class=\"invoice-group-card\">\r\n <div class=\"invoice-group-header\">\r\n <span class=\"invoice-group-index\">{{ gIdx + 1 }}</span>\r\n <span class=\"invoice-group-name\">{{ displayValue(group.product_name) }}</span>\r\n <el-tag size=\"small\" type=\"info\" style=\"margin: 0 8px\">{{ displayValue(group.sku) }}</el-tag>\r\n <span class=\"invoice-group-meta\">采购单价:{{ formatMoney(group.unit_price) }}</span>\r\n <span class=\"invoice-group-meta\">采购总额:{{ formatMoney(group.amount) }}</span>\r\n <span class=\"invoice-group-meta\">采购数量:{{ displayValue(group.purchase_qty) }}</span>\r\n <el-tag size=\"small\" :type=\"group.invoices.length > 0 ? 'success' : 'warning'\">\r\n {{ group.invoices.length }} 张发票\r\n </el-tag>\r\n </div>\r\n <el-table\r\n v-if=\"group.invoices.length > 0\"\r\n :data=\"group.invoices\"\r\n border\r\n size=\"small\"\r\n style=\"width: 100%\"\r\n row-key=\"_uid\"\r\n >\r\n <el-table-column label=\"序号\" width=\"50\" align=\"center\">\r\n <template #default=\"{ $index }\">{{ $index + 1 }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <div>{{ displayValue(group.product_name || row.invoice_item_name) }}</div>\r\n <div class=\"product-cell__sku\">{{ displayValue(group.sku) }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"发票基本信息\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div>号码:{{ displayValue(row.invoice_no) }}</div>\r\n <div>日期:{{ displayValue(row.invoice_date) }}</div>\r\n <div v-if=\"row.invoice_file\">\r\n 文件:\r\n <a\r\n class=\"invoice-file-link\"\r\n :href=\"row.invoice_file_url || undefined\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n >{{ row.invoice_file }}</a>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"发票购销信息\" min-width=\"200\">\r\n <template #default=\"{ row }\">\r\n <div>购买:{{ displayValue(row.invoice_buyer) }}</div>\r\n <div class=\"invoice-sub-text\">({{ displayValue(row.invoice_buyer_tax_no) }})</div>\r\n <div>销售:{{ displayValue(row.invoice_seller) }}</div>\r\n <div class=\"invoice-sub-text\">({{ displayValue(row.invoice_seller_tax_no) }})</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"开票名称及单位\" min-width=\"140\">\r\n <template #default=\"{ row }\">\r\n <div>{{ displayValue(row.invoice_item_name) }}</div>\r\n <div class=\"invoice-sub-text\">单位:{{ displayValue(row.invoice_item_unit) }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"开票数量\" width=\"80\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.invoice_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"开票金额(含税)\" min-width=\"130\">\r\n <template #default=\"{ row }\">\r\n <div>单价:{{ formatPrice(row.invoice_unit_price_tax) }}</div>\r\n <div>总额:{{ formatMoney(row.invoice_amount_tax) }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"开票金额(不含税)\" min-width=\"130\">\r\n <template #default=\"{ row }\">\r\n <div>单价:{{ formatPrice(row.invoice_unit_price) }}</div>\r\n <div>总额:{{ formatMoney(row.invoice_amount) }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"开票税率(%)/税额\" min-width=\"130\">\r\n <template #default=\"{ row }\">\r\n <div>税额:{{ formatMoney(row.invoice_tax_amount) }}</div>\r\n <div>税率:{{ row.invoice_tax_rate ? `${row.invoice_tax_rate}%` : '-' }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"开票备注\" min-width=\"100\">\r\n <template #default=\"{ row }\">{{ displayValue(row.invoice_remark) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"状态\" width=\"90\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-tag v-if=\"row.invoice_verified || row.status === 20\" type=\"info\" size=\"small\">已核销</el-tag>\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div v-else class=\"invoice-group-empty\">暂无关联发票</div>\r\n </div>\r\n </div>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <JRelatedDocs\r\n v-if=\"activeTab === 'related' && purchaseNo\"\r\n :doc-types=\"relatedDocTypes\"\r\n :doc-no=\"purchaseNo\"\r\n param-key=\"purchase_no\"\r\n />\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <el-table :data=\"logList\" border size=\"small\" style=\"width: 100%\">\r\n <el-table-column prop=\"ctime\" label=\"操作时间\" width=\"170\" />\r\n <el-table-column label=\"操作人\" width=\"120\">\r\n <template #default=\"{ row }\">{{ displayValue(row.operator_name || row.operator) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"操作类型\" width=\"160\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.operat_type_name || row.operat_type) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"操作详情\" min-width=\"280\">\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.operat_msg) }}\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div v-if=\"!logList.length\" class=\"empty-tip\">暂无操作日志</div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { CaretBottom } from '@element-plus/icons-vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport DocNoLink from '../DocNoLink.vue'\r\nimport { getDocDetailAdapters } from '../registry'\r\nimport { JRelatedDocs } from '../../JRelatedDocs'\r\nimport type { RelatedDocTypeItem } from '../../JRelatedDocs'\r\nimport {\r\n calcArrivedQtyTotal,\r\n calcPendingDeliveryQtyTotal,\r\n formatDeliveryQtyField,\r\n formatQtyField,\r\n formatQtyTotal,\r\n mergeProductQtyDetails,\r\n} from '../utils/purchaseQty'\r\n\r\nconst STATUS_MAP: Record<number, string> = {\r\n [-1]: '待提交',\r\n 50: '待审批',\r\n 100: '待下单',\r\n 300: '待到货',\r\n 400: '已完成',\r\n 500: '已驳回',\r\n 600: '已作废',\r\n}\r\n\r\n/** 展示名字段:basic_info 可能没有,优先从首行产品取 */\r\nconst DISPLAY_NAME_KEYS = [\r\n 'status_name',\r\n 'purchase_company_name',\r\n 'supplier_name',\r\n 'stock_name',\r\n 'purchase_type_name',\r\n 'is_tax_included_name',\r\n 'payment_request_status_name',\r\n 'py_method_type_name',\r\n 'ref_date_type_name',\r\n 'settle_cycle_type_name',\r\n] as const\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n /** 采购单号 purchase_no */\r\n purchaseOrderNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('products')\r\nconst detail = reactive<Record<string, any>>({})\r\nconst productRows = ref<Array<Record<string, any>>>([])\r\n\r\nconst customsProducts = ref<Array<Record<string, any>>>([])\r\nconst customsLoading = ref(false)\r\nlet customsLoaded = false\r\nconst declarationConfirmStatus = ref(0)\r\n\r\nconst logisticsData = ref<Array<Record<string, any>>>([])\r\nconst logisticsLoading = ref(false)\r\nlet logisticsLoaded = false\r\n\r\nconst invoiceGroups = ref<Array<Record<string, any>>>([])\r\nconst invoiceLoading = ref(false)\r\nlet invoiceLoaded = false\r\n\r\nconst DECLARATION_CONFIRM_MAP: Record<number, { label: string; type: string }> = {\r\n 1: { label: '已确认', type: 'success' },\r\n 2: { label: '部分确认', type: 'warning' },\r\n 3: { label: '未确认', type: 'info' },\r\n}\r\n\r\nconst declarationConfirmLabel = computed(() => {\r\n const status = declarationConfirmStatus.value\r\n return status ? (DECLARATION_CONFIRM_MAP[status]?.label || '') : ''\r\n})\r\n\r\nconst declarationConfirmTagType = computed(() => {\r\n const status = declarationConfirmStatus.value\r\n return (DECLARATION_CONFIRM_MAP[status]?.type || 'info') as 'success' | 'warning' | 'info'\r\n})\r\n\r\nconst basicInfo = computed(() => {\r\n const basic = detail.basic_info\r\n return basic && typeof basic === 'object' ? basic : {}\r\n})\r\n\r\nconst firstProduct = computed(() => {\r\n const list = detail.purchase_products\r\n return Array.isArray(list) && list.length ? list[0] : null\r\n})\r\n\r\n/** 合并 basic_info + 产品行上的 *_name 展示字段 */\r\nconst info = computed(() => {\r\n const merged: Record<string, any> = { ...basicInfo.value }\r\n const product = firstProduct.value\r\n if (product) {\r\n for (const key of DISPLAY_NAME_KEYS) {\r\n if ((merged[key] == null || merged[key] === '') && product[key] != null && product[key] !== '') {\r\n merged[key] = product[key]\r\n }\r\n }\r\n if (!merged.currency && product.currency) merged.currency = product.currency\r\n if (!merged.purchase_currency && product.purchase_currency) {\r\n merged.purchase_currency = product.purchase_currency\r\n }\r\n }\r\n return merged\r\n})\r\n\r\nconst purchaseNo = computed(() => detail.purchase_no || info.value.purchase_no || props.purchaseOrderNo)\r\n\r\nconst productList = computed(() => {\r\n if (Array.isArray(detail.purchase_products)) return detail.purchase_products\r\n if (Array.isArray(detail.products)) return detail.products\r\n if (Array.isArray(detail.items)) return detail.items\r\n return []\r\n})\r\n\r\nconst syncProductRows = () => {\r\n productRows.value = productList.value.map((row: Record<string, any>) => ({ ...row }))\r\n}\r\n\r\nconst relatedDocTypes = computed<RelatedDocTypeItem[]>(() => {\r\n return [\r\n { type: 'purchasePlan', label: '采购计划' },\r\n { type: 'deliveryDoc', label: '送货单' },\r\n { type: 'receipt', label: '收货单' },\r\n { type: 'inbound', label: '入库单' },\r\n { type: 'qc', label: '质检单' },\r\n { type: 'putaway', label: '上架单' },\r\n { type: 'processing', label: '加工单' },\r\n { type: 'returnGoods', label: '退换货' },\r\n { type: 'abnormal', label: '收货异常' },\r\n { type: 'shipping', label: '发货单' },\r\n { type: 'customs', label: '报关单' },\r\n { type: 'payment', label: '付款单' },\r\n { type: 'receiptVoucher', label: '收款单' },\r\n ]\r\n})\r\n\r\nconst logList = computed(() => {\r\n if (Array.isArray(detail.operation_logs)) return detail.operation_logs\r\n if (Array.isArray(detail.logs)) return detail.logs\r\n return []\r\n})\r\n\r\nconst attachments = computed(() => parseAttachments(info.value.attachment ?? info.value.attachments))\r\n\r\nconst settlementTermText = computed(() => {\r\n const finalRate = info.value.final_pay_rate\r\n if (finalRate == null || finalRate === '') return ''\r\n const method = String(info.value.py_method_type || '')\r\n const label = method === 'month_settle' ? '收货后尾款' : '尾款'\r\n return `${label}:${formatPercent(finalRate)}`\r\n})\r\n\r\nconst statusLabel = computed(() => {\r\n if (info.value.status_name) return String(info.value.status_name)\r\n const code = Number(info.value.status)\r\n if (Number.isNaN(code)) return '-'\r\n return STATUS_MAP[code] ?? String(info.value.status)\r\n})\r\n\r\nconst statusTagType = computed(() => {\r\n const status = Number(info.value.status)\r\n if (status === -1 || status === 50) return 'warning'\r\n if (status === 100 || status === 300) return 'primary'\r\n if (status === 400) return 'success'\r\n if (status === 500 || status === 600) return 'danger'\r\n return 'info'\r\n})\r\n\r\nconst isUrgent = computed(() => {\r\n const v = Number(info.value.is_urgent ?? detail.is_urgent)\r\n return v === 1 || v === 2\r\n})\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst formatPercent = (val: unknown) => {\r\n if (val === null || val === undefined || val === '') return '-'\r\n const text = String(val)\r\n return text.includes('%') ? text : `${text}%`\r\n}\r\n\r\n/** 接口约定:1=否 2=是(也兼容 0/1) */\r\nconst formatTaxIncluded = (val: unknown) => {\r\n if (val === 2 || val === '2') return '是'\r\n if (val === 1 || val === '1') return '否'\r\n if (val === true) return '是'\r\n if (val === false) return '否'\r\n return undefined\r\n}\r\n\r\nconst formatMoney = (val: unknown) => {\r\n const n = Number(val)\r\n if (Number.isNaN(n)) return '-'\r\n return n.toFixed(2)\r\n}\r\n\r\nconst formatPrice = (val: unknown) => {\r\n const n = Number(val)\r\n if (Number.isNaN(n) || n === 0) return '-'\r\n return parseFloat(n.toPrecision(16)).toString()\r\n}\r\n\r\nconst getCustomsStatusTagType = (status: unknown) => {\r\n const code = Number(status)\r\n if (code === 300 || code === 500) return 'success'\r\n if (code === 200 || code === 400) return 'warning'\r\n return 'info'\r\n}\r\n\r\nconst getLogisticsStatusTagType = (status: unknown) => {\r\n const code = Number(status)\r\n if (code === 300 || code === 500) return 'success'\r\n if (code === 200 || code === 400) return 'warning'\r\n return 'info'\r\n}\r\n\r\nconst parseAttachments = (raw: unknown): Array<{ name: string; url: string }> => {\r\n if (Array.isArray(raw)) {\r\n return raw\r\n .map((file: any) => {\r\n if (typeof file === 'string') return { name: file, url: file }\r\n return {\r\n name: file?.name || file?.file_name || file?.url || '',\r\n url: file?.url || file?.file_url || '',\r\n }\r\n })\r\n .filter((file) => file.name || file.url)\r\n }\r\n if (typeof raw === 'string' && raw.trim()) {\r\n try {\r\n const parsed = JSON.parse(raw)\r\n if (Array.isArray(parsed)) return parseAttachments(parsed)\r\n } catch {\r\n return raw.split(',').filter(Boolean).map((name: string) => ({ name, url: '' }))\r\n }\r\n }\r\n return []\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n productRows.value = []\r\n customsProducts.value = []\r\n logisticsData.value = []\r\n invoiceGroups.value = []\r\n declarationConfirmStatus.value = 0\r\n customsLoaded = false\r\n logisticsLoaded = false\r\n invoiceLoaded = false\r\n activeTab.value = 'products'\r\n}\r\n\r\nconst loadCustomsProducts = async (purchaseNo: string) => {\r\n if (customsLoaded || !purchaseNo) return\r\n const fetchApi = getDocDetailAdapters().getPurchaseOrderCustomsProducts\r\n if (!fetchApi) return\r\n\r\n customsLoading.value = true\r\n try {\r\n const res: any = await fetchApi(purchaseNo)\r\n if (res?.code === 1) {\r\n const data = res.data || {}\r\n customsProducts.value = Array.isArray(data.products) ? data.products : []\r\n declarationConfirmStatus.value = Number(data.declaration_confirm_status ?? 0)\r\n customsLoaded = true\r\n }\r\n } catch (error) {\r\n console.error('[PurchaseOrderDetailView] getPurchaseOrderCustomsProducts error:', error)\r\n } finally {\r\n customsLoading.value = false\r\n }\r\n}\r\n\r\nconst loadLogisticsData = async (purchaseNo: string) => {\r\n if (logisticsLoaded || !purchaseNo) return\r\n const fetchApi = getDocDetailAdapters().getPurchaseOrderLogistics\r\n if (!fetchApi) return\r\n\r\n logisticsLoading.value = true\r\n try {\r\n const res: any = await fetchApi(purchaseNo)\r\n if (res?.code === 1) {\r\n logisticsData.value = Array.isArray(res.data) ? res.data : []\r\n logisticsLoaded = true\r\n }\r\n } catch (error) {\r\n console.error('[PurchaseOrderDetailView] getPurchaseOrderLogistics error:', error)\r\n } finally {\r\n logisticsLoading.value = false\r\n }\r\n}\r\n\r\nconst buildInvoiceGroups = (list: any[]) => {\r\n const groups: any[] = []\r\n for (const product of productRows.value) {\r\n const sku = String(product.sku || product.sku_code || '').trim()\r\n const unitPrice = Number(product.unit_price || product.tax_inclusive_price || 0)\r\n const purchaseQty = Number(product.purchase_qty || 0)\r\n const invoices = list\r\n .filter((item) => String(item.sku || '').trim() === sku)\r\n .map((item, idx) => ({\r\n ...item,\r\n _uid: item.id || `inv-${sku}-${idx}`,\r\n invoice_verified: item.status === 20,\r\n }))\r\n groups.push({\r\n _uid: `sku-${sku || groups.length}`,\r\n sku,\r\n product_name: product.product_name || product.type_name || '',\r\n unit_price: unitPrice,\r\n amount: unitPrice * purchaseQty,\r\n purchase_qty: purchaseQty || product.purchase_qty || '-',\r\n invoices,\r\n })\r\n }\r\n return groups\r\n}\r\n\r\nconst loadInvoiceData = async (purchaseNo: string) => {\r\n if (invoiceLoaded || !purchaseNo) return\r\n const fetchApi = getDocDetailAdapters().getPurchaseOrderInvoices\r\n if (!fetchApi) return\r\n\r\n invoiceLoading.value = true\r\n try {\r\n const res: any = await fetchApi(purchaseNo)\r\n if (res?.code === 1) {\r\n const list = Array.isArray(res.data) ? res.data : []\r\n invoiceGroups.value = buildInvoiceGroups(list)\r\n invoiceLoaded = true\r\n }\r\n } catch (error) {\r\n console.error('[PurchaseOrderDetailView] getPurchaseOrderInvoices error:', error)\r\n } finally {\r\n invoiceLoading.value = false\r\n }\r\n}\r\n\r\nconst loadProductQtyDetails = async (purchaseNo: string) => {\r\n if (!purchaseNo || !productRows.value.length) return\r\n const adapters = getDocDetailAdapters()\r\n const fetchWmsQty = adapters.getQtyByPurchaseNo\r\n const fetchDeliveryQty = adapters.getDeliveryOrderQtyByPurchaseNo\r\n if (!fetchWmsQty && !fetchDeliveryQty) return\r\n\r\n try {\r\n const [wmsRes, deliveryRes] = await Promise.all([\r\n fetchWmsQty ? fetchWmsQty(purchaseNo).catch((error) => {\r\n console.error('[PurchaseOrderDetailView] getQtyByPurchaseNo error:', error)\r\n return null\r\n }) : Promise.resolve(null),\r\n fetchDeliveryQty ? fetchDeliveryQty(purchaseNo).catch((error) => {\r\n console.error('[PurchaseOrderDetailView] getDeliveryOrderQtyByPurchaseNo error:', error)\r\n return null\r\n }) : Promise.resolve(null),\r\n ])\r\n productRows.value = mergeProductQtyDetails(\r\n productRows.value,\r\n purchaseNo,\r\n wmsRes,\r\n deliveryRes,\r\n )\r\n } catch (error) {\r\n console.error('[PurchaseOrderDetailView] loadProductQtyDetails error:', error)\r\n }\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.purchaseOrderNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getPurchaseOrderDetail\r\n if (!fetchApi) {\r\n console.warn('[PurchaseOrderDetailView] 未注入 getPurchaseOrderDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.purchaseOrderNo)\r\n if (res?.code === 1) {\r\n Object.assign(detail, res.data || {})\r\n syncProductRows()\r\n await loadProductQtyDetails(purchaseNo.value)\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[PurchaseOrderDetailView] getPurchaseOrderDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n\r\nwatch(activeTab, (tab) => {\r\n const no = purchaseNo.value\r\n if (!no) return\r\n if (tab === 'customs') loadCustomsProducts(no)\r\n if (tab === 'logistics') loadLogisticsData(no)\r\n if (tab === 'invoice') loadInvoiceData(no)\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.purchase-detail {\r\n min-height: 200px;\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n}\r\n\r\n.section-title {\r\n margin: 0 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 8px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-item--full {\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.settlement-value {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.5;\r\n}\r\n\r\n.settlement-term {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.attachment-list {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 6px;\r\n min-width: 0;\r\n}\r\n\r\n.attachment-chip {\r\n display: inline-flex;\r\n align-items: center;\r\n max-width: 220px;\r\n height: 24px;\r\n padding: 0 8px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n font-size: 12px;\r\n color: #409eff;\r\n text-decoration: none;\r\n background: #f5f7fa;\r\n border: 1px solid #e4e7ed;\r\n border-radius: 4px;\r\n box-sizing: border-box;\r\n}\r\n\r\n.detail-tabs {\r\n margin-top: 12px;\r\n}\r\n\r\n.product-image {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 4px;\r\n border: 1px solid #ebeef5;\r\n}\r\n\r\n.product-image--empty {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n background: #f5f7fa;\r\n}\r\n\r\n.product-cell {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.4;\r\n}\r\n\r\n.product-cell__name {\r\n color: #303133;\r\n font-size: 13px;\r\n}\r\n\r\n.product-cell__sku {\r\n color: #409eff;\r\n font-size: 12px;\r\n}\r\n\r\n.empty-tip {\r\n margin-top: 8px;\r\n font-size: 12px;\r\n color: #909399;\r\n}\r\n\r\n.qty-popover-trigger {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 2px;\r\n color: #409eff;\r\n cursor: pointer;\r\n user-select: none;\r\n}\r\n\r\n.qty-popover-trigger__icon {\r\n font-size: 12px;\r\n}\r\n\r\n.qty-popover-panel {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n font-size: 13px;\r\n color: #303133;\r\n}\r\n\r\n.qty-popover-row {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 16px;\r\n}\r\n\r\n.customs-toolbar {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n margin-bottom: 12px;\r\n font-size: 13px;\r\n color: #606266;\r\n}\r\n\r\n.doc-no-text {\r\n font-weight: 500;\r\n}\r\n\r\n.invoice-group-card {\r\n border: 1px solid #e4e7ed;\r\n border-radius: 6px;\r\n margin-bottom: 16px;\r\n overflow: hidden;\r\n background: #fff;\r\n}\r\n\r\n.invoice-group-header {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n padding: 10px 16px;\r\n background: #f5f7fa;\r\n border-bottom: 1px solid #e4e7ed;\r\n font-size: 13px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.invoice-group-index {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 22px;\r\n height: 22px;\r\n border-radius: 50%;\r\n background: #409eff;\r\n color: #fff;\r\n font-size: 12px;\r\n font-weight: 600;\r\n flex-shrink: 0;\r\n}\r\n\r\n.invoice-group-name {\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.invoice-group-meta {\r\n color: #606266;\r\n font-size: 12px;\r\n}\r\n\r\n.invoice-group-empty {\r\n padding: 16px;\r\n text-align: center;\r\n color: #909399;\r\n background: #fafafa;\r\n font-size: 13px;\r\n}\r\n\r\n.invoice-sub-text {\r\n padding-left: 32px;\r\n color: #909399;\r\n}\r\n\r\n.invoice-file-link {\r\n color: #409eff;\r\n text-decoration: none;\r\n}\r\n\r\n.invoice-file-link:hover {\r\n opacity: 0.85;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","/** 采购计划:品名 / 店铺账号 展示辅助(对齐 scm planDisplayHelpers) */\r\n\r\nconst parseMaybeJsonObject = (value: unknown): Record<string, any> | null => {\r\n if (!value) return null\r\n if (typeof value === 'object') return value as Record<string, any>\r\n if (typeof value !== 'string') return null\r\n try {\r\n const parsed = JSON.parse(value)\r\n return parsed && typeof parsed === 'object' ? parsed : null\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\n/** 解析品名(兼容 bis_sku、组合品子项、sku_info) */\r\nexport const resolvePlanProductName = (data: Record<string, any> | null | undefined): string => {\r\n if (!data || typeof data !== 'object') return ''\r\n\r\n const sku = String(data.sku || data.sku_code || '').trim()\r\n const direct = String(data.product_name || data.sku_name || data.spu || '').trim()\r\n if (direct) return direct\r\n\r\n const bisSku = parseMaybeJsonObject(data.bis_sku) || (data.bis_sku as Record<string, any> | undefined)\r\n if (bisSku && typeof bisSku === 'object') {\r\n const items = Array.isArray(bisSku.items) ? bisSku.items : []\r\n if (sku && items.length) {\r\n const matched = items.find((child: any) =>\r\n String(child.sku_code || child.sku_info?.sku_code || '').trim() === sku,\r\n )\r\n const childName = String(\r\n matched?.sku_info?.product_name || matched?.product_name || '',\r\n ).trim()\r\n if (childName) return childName\r\n }\r\n const bisName = String(bisSku.product_name || '').trim()\r\n if (bisName) return bisName\r\n }\r\n\r\n const skuInfo = data.sku_info\r\n if (skuInfo && typeof skuInfo === 'object') {\r\n const infoName = String(skuInfo.product_name || '').trim()\r\n if (infoName) return infoName\r\n }\r\n\r\n return ''\r\n}\r\n\r\nexport const resolvePlanShopAccountCode = (data: Record<string, any> | null | undefined): string =>\r\n String(data?.shop_account || data?.store_code || '').trim()\r\n\r\nexport const resolvePlanShopAccountName = (data: Record<string, any> | null | undefined): string =>\r\n String(data?.shop_account_name || data?.user_account_name || data?.store_name || '').trim()\r\n\r\nexport const formatPlanShopAccountDisplay = (data: Record<string, any> | null | undefined): string => {\r\n const name = resolvePlanShopAccountName(data)\r\n if (name) return name\r\n const code = resolvePlanShopAccountCode(data)\r\n return code || '-'\r\n}\r\n\r\n/** 补全 product_name / shop_account / shop_account_name / shop_account_display */\r\nexport const enrichPlanProductRow = (\r\n item: Record<string, any>,\r\n fallback?: Record<string, any> | null,\r\n) => {\r\n const merged = { ...(fallback || {}), ...item }\r\n const product_name =\r\n resolvePlanProductName(item) ||\r\n resolvePlanProductName(fallback || {}) ||\r\n String(item.product_name || fallback?.product_name || '').trim()\r\n const shop_account = resolvePlanShopAccountCode(item) || resolvePlanShopAccountCode(fallback || {})\r\n const shop_account_name =\r\n resolvePlanShopAccountName(item) || resolvePlanShopAccountName(fallback || {})\r\n return {\r\n ...merged,\r\n product_name,\r\n shop_account,\r\n shop_account_name,\r\n shop_account_display: shop_account_name || shop_account || '-',\r\n }\r\n}\r\n\r\n/** 从详情产品行提取图片 URL(兼容根字段、bis_sku、父级详情) */\r\nexport const pickDetailProductImage = (item: any, fallback?: any) =>\r\n String(\r\n item?.main_image ||\r\n item?.image ||\r\n item?.bis_sku?.main_image ||\r\n item?.bis_sku?.image ||\r\n item?.att_files ||\r\n item?.image_url ||\r\n fallback?.main_image ||\r\n fallback?.image ||\r\n fallback?.bis_sku?.main_image ||\r\n fallback?.bis_sku?.image ||\r\n '',\r\n ).trim()\r\n\r\n/** 解析详情附件 JSON */\r\nexport const parsePlanDetailAttachments = (raw: unknown) => {\r\n if (!raw || typeof raw !== 'string') return []\r\n try {\r\n const parsed = JSON.parse(raw)\r\n return Array.isArray(parsed) ? parsed : []\r\n } catch {\r\n return []\r\n }\r\n}\r\n","<!--\r\n 采购计划只读详情(DocNoLink / DocDetailHost)\r\n type=\"purchasePlan\"\r\n 接口:adapters.getPurchasePlanDetail(requirement_no) → { code, data }\r\n data 对齐 scm getPurchasePlanDetail(含 purchase_products / operation_logs;关联单据走 JRelatedDocs)\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"purchase-plan-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">采购计划</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(requirementNo) }}</span>\r\n <el-tag v-if=\"statusLabel !== '-'\" size=\"small\" :type=\"statusTagType\">\r\n {{ statusLabel }}\r\n </el-tag>\r\n <el-tag v-if=\"isUrgent\" type=\"danger\" size=\"small\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"purchase-plan-detail\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchase_company_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">单据负责人:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchaser_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">创建人:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.operator_name || detail.operator) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">创建时间:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.ctime) }}</span>\r\n </div>\r\n <div class=\"info-item info-item--full\">\r\n <span class=\"info-label\">基本信息备注:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.base_remark || detail.remark) }}</span>\r\n </div>\r\n <div v-if=\"detailAttachments.length > 0\" class=\"info-item info-item--full\">\r\n <span class=\"info-label\">附件:</span>\r\n <span class=\"info-value info-value--attachments\">\r\n <span\r\n v-for=\"(file, idx) in detailAttachments\"\r\n :key=\"idx\"\r\n class=\"detail-attachment-item\"\r\n >\r\n <a\r\n v-if=\"file.url\"\r\n :href=\"file.url\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n class=\"detail-attachment-link\"\r\n >\r\n {{ file.name || '附件' }}\r\n </a>\r\n <span v-else>{{ file.name || '附件' }}</span>\r\n </span>\r\n </span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"采购产品\" name=\"products\">\r\n <el-table :data=\"productList\" border size=\"small\" style=\"width: 100%\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"56\" align=\"center\" />\r\n <el-table-column label=\"图片\" width=\"90\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"productImage(row)\"\r\n :src=\"productImage(row)\"\r\n :preview-src-list=\"[productImage(row)]\"\r\n fit=\"cover\"\r\n class=\"product-image\"\r\n preview-teleported\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-cell\">\r\n <div class=\"product-cell__name\">{{ row.product_name || '-' }}</div>\r\n <div class=\"product-cell__sku\">\r\n <JSkuLink v-if=\"row.sku || row.sku_code\" :code=\"row.sku || row.sku_code\" />\r\n <span v-else>-</span>\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺账号\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n {{\r\n displayValue(\r\n row.shop_account_display ||\r\n row.shop_account_name ||\r\n row.shop_account,\r\n )\r\n }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购仓库\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.stock_code || row.stock_name) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"计划采购量\" width=\"100\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_plan_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"已采购量\" width=\"100\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.purchased_plan_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"单箱数量\" width=\"90\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.box_sku_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"箱数\" width=\"80\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.box_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"期望下单\" min-width=\"120\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.expected_order_date) }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <JRelatedDocs\r\n v-if=\"activeTab === 'related' && requirementNo\"\r\n :doc-types=\"relatedDocTypes\"\r\n :doc-no=\"requirementNo\"\r\n param-key=\"requirement_no\"\r\n />\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <el-table :data=\"logList\" border size=\"small\" style=\"width: 100%\">\r\n <el-table-column prop=\"operate_time\" label=\"操作时间\" min-width=\"160\" />\r\n <el-table-column prop=\"operator_name\" label=\"操作人\" min-width=\"100\" />\r\n <el-table-column prop=\"operate_type_name\" label=\"操作类型\" min-width=\"120\" />\r\n <el-table-column prop=\"operate_detail\" label=\"操作详情\" min-width=\"280\" />\r\n </el-table>\r\n <div v-if=\"!logList.length\" class=\"empty-tip\">暂无操作日志</div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { getDocDetailAdapters } from '../registry'\r\nimport { JRelatedDocs } from '../../JRelatedDocs'\r\nimport type { RelatedDocTypeItem } from '../../JRelatedDocs'\r\nimport {\r\n enrichPlanProductRow,\r\n parsePlanDetailAttachments,\r\n pickDetailProductImage,\r\n} from '../utils/planDisplayHelpers'\r\n\r\n/** 与 scm 采购计划列表状态文案对齐 */\r\nconst STATUS_MAP: Record<number, string> = {\r\n [-1]: '待审批',\r\n 100: '待采购',\r\n 200: '采购中',\r\n 300: '已完成',\r\n 400: '已驳回',\r\n 500: '已作废',\r\n}\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n /** 采购计划单号 requirement_no */\r\n purchasePlanNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('products')\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst requirementNo = computed(\r\n () => detail.requirement_no || props.purchasePlanNo,\r\n)\r\n\r\nconst productList = computed(() => {\r\n const parent = detail\r\n if (!parent || !Object.keys(parent).length) return []\r\n const list = parent.purchase_products\r\n const source = Array.isArray(list) && list.length > 0 ? list : [parent]\r\n return source.map((item: any) => {\r\n const image = pickDetailProductImage(item, parent)\r\n return enrichPlanProductRow(\r\n {\r\n ...item,\r\n image,\r\n main_image: image,\r\n },\r\n parent,\r\n )\r\n })\r\n})\r\n\r\nconst relatedDocCount = computed(() => {\r\n const list = detail.related_documents\r\n return Array.isArray(list) ? list.length : undefined\r\n})\r\n\r\nconst relatedDocTypes = computed<RelatedDocTypeItem[]>(() => [\r\n {\r\n type: 'purchaseItem',\r\n label: '采购单',\r\n count: relatedDocCount.value,\r\n paramKey: 'requirement_no',\r\n },\r\n {\r\n type: 'processing',\r\n label: '加工单',\r\n paramKey: 'purchase_plan_no',\r\n tableProps: { flat: true },\r\n },\r\n { type: 'receipt', label: '收货单' },\r\n { type: 'qc', label: '质检单' },\r\n { type: 'inbound', label: '入库单' },\r\n { type: 'putaway', label: '上架单' },\r\n])\r\n\r\nconst logList = computed(() => {\r\n if (Array.isArray(detail.operation_logs)) return detail.operation_logs\r\n if (Array.isArray(detail.logs)) return detail.logs\r\n return []\r\n})\r\n\r\nconst detailAttachments = computed(() => parsePlanDetailAttachments(detail.attachment))\r\n\r\nconst statusLabel = computed(() => {\r\n if (detail.status_name) return String(detail.status_name)\r\n const code = Number(detail.status)\r\n if (Number.isNaN(code)) return '-'\r\n return STATUS_MAP[code] ?? String(detail.status)\r\n})\r\n\r\nconst statusTagType = computed(() => {\r\n const status = Number(detail.status)\r\n if (status === -1 || status === 400) return 'warning'\r\n if (status === 100 || status === 200) return 'primary'\r\n if (status === 300) return 'success'\r\n if (status === 500) return 'danger'\r\n return 'info'\r\n})\r\n\r\nconst isUrgent = computed(() => {\r\n const v = Number(detail.is_urgent)\r\n return v === 1 || v === 2\r\n})\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst productImage = (row: Record<string, any>) =>\r\n String(row?.image || row?.main_image || '').trim()\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n activeTab.value = 'products'\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.purchasePlanNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getPurchasePlanDetail\r\n if (!fetchApi) {\r\n console.warn('[PurchasePlanDetailView] 未注入 getPurchasePlanDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.purchasePlanNo)\r\n if (res?.code === 1) {\r\n Object.assign(detail, res.data || {})\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[PurchasePlanDetailView] getPurchasePlanDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.purchase-plan-detail {\r\n min-height: 200px;\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n}\r\n\r\n.section-title {\r\n margin: 16px 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 8px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-item--full {\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.info-value--attachments {\r\n display: inline-flex;\r\n flex-wrap: wrap;\r\n gap: 6px;\r\n}\r\n\r\n.detail-attachment-item {\r\n display: inline-flex;\r\n align-items: center;\r\n padding: 2px 10px;\r\n background: #f0f2f5;\r\n border: 1px solid #e4e7ed;\r\n border-radius: 4px;\r\n font-size: 13px;\r\n color: #606266;\r\n}\r\n\r\n.detail-attachment-link {\r\n color: #409eff;\r\n text-decoration: none;\r\n\r\n &:hover {\r\n text-decoration: underline;\r\n }\r\n}\r\n\r\n.detail-tabs {\r\n margin-top: 8px;\r\n}\r\n\r\n.product-image {\r\n width: 44px;\r\n height: 44px;\r\n border-radius: 4px;\r\n border: 1px solid #ebeef5;\r\n object-fit: cover;\r\n}\r\n\r\n.product-cell {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.4;\r\n}\r\n\r\n.product-cell__name {\r\n color: #606266;\r\n font-size: 13px;\r\n}\r\n\r\n.product-cell__sku {\r\n color: #409eff;\r\n font-size: 12px;\r\n}\r\n\r\n.empty-tip {\r\n margin-top: 12px;\r\n text-align: center;\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","<!--\r\n 采购合同只读详情(DocNoLink / DocDetailHost)\r\n type=\"purchaseContract\"\r\n 接口:adapters.getPurchaseContractDetail(contract_no) → { code, data }\r\n data 对齐 scm queryPurchaseContractDetail 单条(含 purchase_order_detail_list)\r\n 关联单据 / 审批流后续再接\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"purchase-contract-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">采购合同</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(contractNo) }}</span>\r\n <el-tag v-if=\"statusLabel !== '-'\" size=\"small\" :type=\"statusTagType\">\r\n {{ statusLabel }}\r\n </el-tag>\r\n <el-tag v-if=\"isUrgent\" type=\"danger\" size=\"small\">急</el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"purchase-contract-detail\">\r\n <div class=\"section-title\">申请信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">盖章方式:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.seal_method_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">供应商盖章:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.is_supplier_sealed_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司盖章:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.is_purchase_company_sealed_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">合同变更:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.is_contract_change_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">框架协议:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.frame_contract_no) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">结算方式:</span>\r\n <span class=\"info-value\">{{ settlementMethodText }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">预付比例:</span>\r\n <span class=\"info-value\">{{ formatPercent(detail.prepayment_percent) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">预付金额:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.prepayment_amount) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">尾款比例:</span>\r\n <span class=\"info-value\">{{ formatPercent(detail.balance_percent) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">尾款金额:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.balance_amount) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">交付周期:</span>\r\n <span class=\"info-value\">\r\n {{\r\n detail.delivery_cycle != null && detail.delivery_cycle !== ''\r\n ? `${detail.delivery_cycle}天`\r\n : '-'\r\n }}\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">交期描述:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.delivery_desc) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">付款描述:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.payment_desc) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">账期规划:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.payment_schedule) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">账期时间:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.account_period_date) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">合同接收人:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.contract_receiver) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">接收方式:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.receive_method_name) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">联系方式:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.contact_info) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">申请人:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.applicant_name || detail.applicant) }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">申请时间:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.apply_time) }}</span>\r\n </div>\r\n <div class=\"info-item info-item--full\">\r\n <span class=\"info-label\">备注:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.remark) }}</span>\r\n </div>\r\n <div v-if=\"fileNames.length\" class=\"info-item info-item--full\">\r\n <span class=\"info-label\">合同文件:</span>\r\n <span class=\"info-value\">{{ fileNames.join('、') }}</span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\">\r\n <el-tab-pane label=\"采购订单信息\" name=\"orders\">\r\n <el-table\r\n :data=\"orderList\"\r\n border\r\n size=\"small\"\r\n style=\"width: 100%\"\r\n empty-text=\"暂无关联采购单\"\r\n >\r\n <el-table-column label=\"采购单号\" min-width=\"150\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n <DocNoLink\r\n v-if=\"row.purchase_order_no || row.purchase_no\"\r\n type=\"purchase\"\r\n :order-no=\"String(row.purchase_order_no || row.purchase_no)\"\r\n />\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购产品\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div class=\"po-product-cell\">\r\n <el-image\r\n v-for=\"(img, index) in (row.product_main_images || []).slice(0, 3)\"\r\n :key=\"index\"\r\n :src=\"img\"\r\n fit=\"cover\"\r\n class=\"po-product-image\"\r\n preview-teleported\r\n />\r\n <span v-if=\"row.product_count\" class=\"po-product-count\">\r\n 共{{ row.product_count }}个产品\r\n </span>\r\n <span v-if=\"!row.product_main_images?.length && !row.product_count\">-</span>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购量\" width=\"90\" align=\"center\">\r\n <template #default=\"{ row }\">{{ displayValue(row.purchase_qty) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"结算方式\" min-width=\"110\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n {{\r\n displayValue(\r\n row.settlement_method_name ||\r\n row.settlement_method_label ||\r\n row.py_method_type_name,\r\n )\r\n }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"预付\" min-width=\"120\">\r\n <template #default=\"{ row }\">\r\n <div>{{ displayValue(row.prepay_rate) }}%</div>\r\n <div class=\"sub-text\">¥{{ displayValue(row.prepay_amount) }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"尾款\" min-width=\"120\">\r\n <template #default=\"{ row }\">\r\n <div>{{ displayValue(row.final_pay_rate) }}%</div>\r\n <div class=\"sub-text\">¥{{ displayValue(row.final_pay_amount) }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"总金额(含税)\" min-width=\"120\" align=\"right\">\r\n <template #default=\"{ row }\">\r\n ¥{{ displayValue(row.total_amount_tax_incl) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"结算备注\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ displayValue(row.settlement_remark) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"最晚预计到货\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n {{ displayValue(row.latest_expected_arrival_date) }}\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div v-if=\"orderList.length\" class=\"contract-summary\">\r\n <span>合计:{{ summary.orderCount }} 个采购单,{{ summary.productCount }} 个产品</span>\r\n <span>总金额(含税¥):{{ summary.totalIncl }}</span>\r\n <span>总金额(不含税¥):{{ summary.totalExcl }}</span>\r\n </div>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <!-- 关联单据后续再接,先占位 -->\r\n <div class=\"empty-tip\">暂无关联单据</div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport DocNoLink from '../DocNoLink.vue'\r\nimport { getDocDetailAdapters } from '../registry'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n /** 采购合同编号 contract_no */\r\n purchaseContractNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('orders')\r\nconst detail = reactive<Record<string, any>>({})\r\n\r\nconst contractNo = computed(() => detail.contract_no || props.purchaseContractNo)\r\n\r\nconst orderList = computed(() =>\r\n Array.isArray(detail.purchase_order_detail_list) ? detail.purchase_order_detail_list : [],\r\n)\r\n\r\nconst firstOrder = computed(() => (orderList.value.length ? orderList.value[0] : null))\r\n\r\nconst settlementMethodText = computed(() => {\r\n const row = firstOrder.value || detail\r\n return (\r\n displayValue(\r\n detail.settlement_method_name ||\r\n detail.settlement_method_label ||\r\n detail.py_method_type_name ||\r\n row?.settlement_method_name ||\r\n row?.settlement_method_label ||\r\n row?.py_method_type_name,\r\n )\r\n )\r\n})\r\n\r\nconst fileNames = computed(() => {\r\n const list = detail.source_file_list\r\n if (!Array.isArray(list)) return []\r\n return list\r\n .map((file: any) => file?.name || file?.file_name || '')\r\n .filter(Boolean)\r\n})\r\n\r\nconst summary = computed(() => {\r\n const list = orderList.value\r\n const orderCount = list.length\r\n const productCount = list.reduce((sum: number, row: any) => sum + Number(row.product_count || 0), 0)\r\n const totalIncl = list.reduce(\r\n (sum: number, row: any) => sum + Number(row.total_amount_tax_incl || 0),\r\n 0,\r\n )\r\n const totalExcl = list.reduce(\r\n (sum: number, row: any) => sum + Number(row.total_amount_tax_excl || row.total_amount || 0),\r\n 0,\r\n )\r\n const fmt = (n: number) => (Number.isFinite(n) ? n.toFixed(2) : '-')\r\n return {\r\n orderCount,\r\n productCount: productCount || Number(detail.product_count || 0) || '-',\r\n totalIncl: fmt(totalIncl || Number(detail.total_amount_tax_incl || 0)),\r\n totalExcl: fmt(totalExcl || Number(detail.total_amount_tax_excl || 0)),\r\n }\r\n})\r\n\r\nconst statusLabel = computed(() => {\r\n if (detail.status_name) return String(detail.status_name)\r\n return detail.status != null && detail.status !== '' ? String(detail.status) : '-'\r\n})\r\n\r\nconst statusTagType = computed(() => {\r\n const status = Number(detail.status)\r\n if (status === 50) return 'info'\r\n if (status === 100 || status === 200) return 'warning'\r\n if (status === 300) return 'success'\r\n if (status === 400) return 'danger'\r\n if (status === 500) return 'info'\r\n return 'info'\r\n})\r\n\r\nconst isUrgent = computed(() => {\r\n const v = Number(detail.is_urgent)\r\n return v === 1 || v === 2\r\n})\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst formatPercent = (val: unknown) => {\r\n if (val === null || val === undefined || val === '') return '-'\r\n const text = String(val)\r\n return text.includes('%') ? text : `${text}%`\r\n}\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n activeTab.value = 'orders'\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.purchaseContractNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getPurchaseContractDetail\r\n if (!fetchApi) {\r\n console.warn('[PurchaseContractDetailView] 未注入 getPurchaseContractDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.purchaseContractNo)\r\n if (res?.code === 1) {\r\n Object.assign(detail, res.data || {})\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[PurchaseContractDetailView] getPurchaseContractDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.purchase-contract-detail {\r\n min-height: 200px;\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n}\r\n\r\n.section-title {\r\n margin: 16px 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 8px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-item--full {\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.detail-tabs {\r\n margin-top: 8px;\r\n}\r\n\r\n.po-product-cell {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.po-product-image {\r\n width: 36px;\r\n height: 36px;\r\n border-radius: 4px;\r\n border: 1px solid #ebeef5;\r\n}\r\n\r\n.po-product-count {\r\n color: #606266;\r\n font-size: 12px;\r\n}\r\n\r\n.sub-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.contract-summary {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 16px;\r\n margin-top: 12px;\r\n font-size: 13px;\r\n color: #606266;\r\n}\r\n\r\n.empty-tip {\r\n margin-top: 12px;\r\n text-align: center;\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","/** 送货单详情展示辅助(对齐 scm DeliveryDocDetail) */\r\n\r\nexport type DeliveryProductRow = Record<string, any> & {\r\n rowId: string\r\n _skuRowSpan: number\r\n}\r\n\r\n/** 相同 SKU 合并图片、品名列 */\r\nexport const buildDeliveryProductRows = (items: any[]): DeliveryProductRow[] => {\r\n const list = Array.isArray(items) ? items : []\r\n const rows: DeliveryProductRow[] = []\r\n let i = 0\r\n while (i < list.length) {\r\n let span = 1\r\n while (i + span < list.length && list[i]?.sku && list[i + span]?.sku === list[i]?.sku) {\r\n span++\r\n }\r\n for (let j = 0; j < span; j++) {\r\n const item = list[i + j]!\r\n rows.push({\r\n ...item,\r\n rowId: `detail-${item.id || i + j}`,\r\n _skuRowSpan: j === 0 ? span : 0,\r\n })\r\n }\r\n i += span\r\n }\r\n return rows\r\n}\r\n\r\nexport const deliveryProductSpanMethod = ({\r\n row,\r\n columnIndex,\r\n}: {\r\n row: DeliveryProductRow\r\n rowIndex: number\r\n columnIndex: number\r\n}) => {\r\n if (columnIndex === 0 || columnIndex === 1) {\r\n if (row._skuRowSpan > 1) return [row._skuRowSpan, 1]\r\n if (row._skuRowSpan === 0) return [0, 0]\r\n }\r\n return [1, 1]\r\n}\r\n\r\nexport const parseDeliveryFileJson = (raw: unknown): { name: string; url: string }[] => {\r\n if (!raw) return []\r\n if (Array.isArray(raw)) {\r\n return raw.map((item: any) => ({\r\n name: item?.name || item?.url || '附件',\r\n url: item?.url || (typeof item === 'string' ? item : ''),\r\n }))\r\n }\r\n const text = String(raw).trim()\r\n if (!text) return []\r\n try {\r\n const parsed = JSON.parse(text)\r\n if (Array.isArray(parsed)) {\r\n return parsed.map((item: any) => ({\r\n name: item?.name || item?.url || '附件',\r\n url: item?.url || (typeof item === 'string' ? item : ''),\r\n }))\r\n }\r\n } catch {\r\n /* ignore */\r\n }\r\n const parts = text.split('/')\r\n return [{ name: parts[parts.length - 1] || '附件', url: text }]\r\n}\r\n","<!--\r\n SCM 送货单只读详情(DocNoLink / DocDetailHost)\r\n type=\"deliveryDoc\"\r\n 对齐 scm DeliveryDocDetail.vue 只读模式\r\n-->\r\n<template>\r\n <el-dialog\r\n :model-value=\"modelValue\"\r\n width=\"90%\"\r\n append-to-body\r\n destroy-on-close\r\n :close-on-click-modal=\"false\"\r\n class=\"delivery-doc-detail-view-dialog j-doc-detail-dialog\"\r\n @update:model-value=\"$emit('update:modelValue', $event)\"\r\n >\r\n <template #header>\r\n <div class=\"j-doc-detail-title\">\r\n <span class=\"j-doc-detail-title__name\">送货单</span>\r\n <span class=\"j-doc-detail-title__paren\">(</span>\r\n <span class=\"j-doc-detail-title__no\">{{ displayValue(deliveryNo) }}</span>\r\n <el-tag v-if=\"statusLabel !== '-'\" size=\"small\" :type=\"statusTagType\">\r\n {{ statusLabel }}\r\n </el-tag>\r\n <el-tag\r\n v-for=\"item in tagList\"\r\n :key=\"item.id\"\r\n :type=\"item.tag_remark\"\r\n size=\"small\"\r\n >\r\n {{ item.tag_name }}\r\n </el-tag>\r\n <span class=\"j-doc-detail-title__paren\">)</span>\r\n </div>\r\n </template>\r\n\r\n <div v-loading=\"loading\" class=\"delivery-doc-detail\">\r\n <div class=\"section-title\">基本信息</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购公司:</span>\r\n <span class=\"info-value\">\r\n {{ displayValue(detail.purchase_company_name || detail.purchase_company) }}\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购仓库:</span>\r\n <span class=\"info-value\">\r\n {{ displayValue(detail.receive_stock_name || detail.warehouse) }}\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">供应商:</span>\r\n <span class=\"info-value\">\r\n {{ displayValue(detail.supplier_name || detail.supplier) }}\r\n </span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">采购员:</span>\r\n <span class=\"info-value\">{{ displayValue(detail.purchaser) }}</span>\r\n </div>\r\n </div>\r\n </el-card>\r\n\r\n <div class=\"section-title\">送货产品</div>\r\n <el-card shadow=\"never\" class=\"section-card\">\r\n <el-tabs v-model=\"activeTab\" class=\"detail-tabs\" @tab-change=\"handleTabChange\">\r\n <el-tab-pane label=\"送货产品\" name=\"products\">\r\n <el-table\r\n :data=\"productRows\"\r\n border\r\n size=\"small\"\r\n row-key=\"rowId\"\r\n :span-method=\"productSpanMethod\"\r\n style=\"width: 100%\"\r\n empty-text=\"暂无送货明细\"\r\n >\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.main_image || row.image\"\r\n :src=\"row.main_image || row.image\"\r\n :preview-src-list=\"[row.main_image || row.image]\"\r\n fit=\"cover\"\r\n class=\"product-image\"\r\n preview-teleported\r\n />\r\n <span v-else class=\"product-image product-image--empty\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-cell\">\r\n <div v-if=\"row.product_name\" class=\"product-cell__name\">{{ row.product_name }}</div>\r\n <div class=\"product-cell__sku\">\r\n <JSkuLink v-if=\"row.sku\" :code=\"row.sku\" />\r\n <span v-else>-</span>\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"采购单号\" min-width=\"150\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">\r\n <span>{{ row.purchase_no || '-' }}</span>\r\n <el-tag\r\n v-if=\"row.purchase_is_urgent === 2 || row.is_urgent === 2\"\r\n type=\"danger\"\r\n size=\"small\"\r\n class=\"inline-tag\"\r\n >\r\n 急\r\n </el-tag>\r\n <el-tag v-if=\"row.process_mode_name\" size=\"small\" class=\"inline-tag\">\r\n {{ row.process_mode_name }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"purchase_qty\" label=\"采购量\" width=\"80\" align=\"right\" />\r\n <el-table-column label=\"本次送货量\" width=\"110\" align=\"right\">\r\n <template #default=\"{ row }\">{{ row.current_delivery_qty ?? '-' }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"suggested_delivery_qty\" label=\"建议送货量\" width=\"100\" align=\"right\" />\r\n <el-table-column prop=\"ops_owner\" label=\"产品运营\" width=\"90\" />\r\n <el-table-column prop=\"box_spec_name\" label=\"箱规名称\" width=\"100\" />\r\n <el-table-column prop=\"box_sku_qty\" label=\"单箱数量\" width=\"90\" align=\"right\" />\r\n <el-table-column prop=\"box_qty\" label=\"箱数\" width=\"70\" align=\"right\" />\r\n <el-table-column prop=\"contract_ship_date\" label=\"合同发货日期\" width=\"120\" align=\"center\" />\r\n <el-table-column label=\"预计到货日期\" width=\"120\" align=\"center\">\r\n <template #default=\"{ row }\">{{ row.expected_arrival_date || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"建议送货日期\" width=\"120\" align=\"center\">\r\n <template #default=\"{ row }\">{{ row.suggested_delivery_date || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"qc_type_name\" label=\"质检类型\" width=\"90\" />\r\n <el-table-column label=\"赠品\" width=\"60\" align=\"center\">\r\n <template #default=\"{ row }\">{{ row.is_gift_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"新品下单\" width=\"80\" align=\"center\">\r\n <template #default=\"{ row }\">{{ row.is_new_product_order_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"贴标\" width=\"60\" align=\"center\">\r\n <template #default=\"{ row }\">{{ row.is_label_name || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"delivery_remark\" label=\"送货备注\" min-width=\"140\" show-overflow-tooltip />\r\n <el-table-column label=\"建议送货备注\" min-width=\"140\" show-overflow-tooltip>\r\n <template #default=\"{ row }\">{{ row.suggested_delivery_remark || '-' }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"物流信息\" name=\"logistics\">\r\n <el-table\r\n :data=\"logisticsData\"\r\n border\r\n size=\"small\"\r\n row-key=\"id\"\r\n v-loading=\"logisticsLoading\"\r\n style=\"width: 100%\"\r\n empty-text=\"暂无物流信息\"\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\r\n <el-table-column label=\"品名/SKU\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-cell\">\r\n <div v-if=\"row.product_name\" class=\"product-cell__name\">{{ row.product_name }}</div>\r\n <div class=\"product-cell__sku\">\r\n <template v-if=\"row.sku && String(row.sku).includes(',')\">\r\n <JSkuLink\r\n v-for=\"(s, idx) in String(row.sku).split(',')\"\r\n :key=\"idx\"\r\n :code=\"s.trim()\"\r\n />\r\n </template>\r\n <JSkuLink v-else-if=\"row.sku\" :code=\"row.sku\" />\r\n <span v-else>-</span>\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"发货信息\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <div>日期:{{ row.ship_date || '-' }}</div>\r\n <div>数量:{{ row.ship_qty ?? '-' }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"ship_remark\" label=\"发货备注\" min-width=\"120\" show-overflow-tooltip />\r\n <el-table-column label=\"运输信息\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <div>方式:{{ row.transport_method || '-' }}</div>\r\n <div>面单号:{{ row.tracking_no || '-' }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"司机信息\" min-width=\"180\">\r\n <template #default=\"{ row }\">\r\n <div>姓名:{{ row.driver_name || '-' }}</div>\r\n <div>手机号:{{ row.driver_phone || '-' }}</div>\r\n <div>车牌号:{{ row.license_plate || '-' }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"物流面单\" width=\"120\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <template v-if=\"row.logistics_file\">\r\n <el-link\r\n v-for=\"(f, idx) in parseDeliveryFileJson(row.logistics_file)\"\r\n :key=\"idx\"\r\n type=\"primary\"\r\n :href=\"f.url\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n class=\"file-link\"\r\n >\r\n {{ f.name }}\r\n </el-link>\r\n </template>\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"运输发票\" width=\"120\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <template v-if=\"row.transport_invoice\">\r\n <el-link\r\n v-for=\"(f, idx) in parseDeliveryFileJson(row.transport_invoice)\"\r\n :key=\"idx\"\r\n type=\"primary\"\r\n :href=\"f.url\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n class=\"file-link\"\r\n >\r\n {{ f.name }}\r\n </el-link>\r\n </template>\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"更新信息\" min-width=\"150\">\r\n <template #default=\"{ row }\">\r\n <div>操作人:{{ row.operator || '-' }}</div>\r\n <div>创建时间:{{ row.ctime || '-' }}</div>\r\n <div>修改时间:{{ row.mtime || '-' }}</div>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"关联单据\" name=\"related\">\r\n <div class=\"related-sub-tabs\">\r\n <el-button\r\n v-for=\"tab in relatedTabs\"\r\n :key=\"tab.key\"\r\n :type=\"relatedActiveTab === tab.key ? 'primary' : 'default'\"\r\n plain\r\n size=\"small\"\r\n @click=\"relatedActiveTab = tab.key\"\r\n >\r\n {{ tab.label }}({{ tab.count }})\r\n </el-button>\r\n </div>\r\n <el-table\r\n v-if=\"relatedActiveTab === 'purchase'\"\r\n v-loading=\"relatedLoading\"\r\n :data=\"purchaseDetailData\"\r\n border\r\n size=\"small\"\r\n row-key=\"id\"\r\n style=\"width: 100%\"\r\n empty-text=\"暂无关联采购单\"\r\n >\r\n <el-table-column prop=\"purchase_no\" label=\"采购订单号\" min-width=\"140\" />\r\n <el-table-column label=\"供应商/采购仓库\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div>{{ row.supplier || '-' }}</div>\r\n <div class=\"sub-text\">{{ row.stock_name || '-' }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"图片\" width=\"70\" align=\"center\">\r\n <template #default=\"{ row }\">\r\n <el-image\r\n v-if=\"row.main_image\"\r\n :src=\"row.main_image\"\r\n :preview-src-list=\"[row.main_image]\"\r\n fit=\"cover\"\r\n class=\"product-image\"\r\n preview-teleported\r\n />\r\n <span v-else class=\"product-image product-image--empty\">无</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"品名/SKU\" min-width=\"160\">\r\n <template #default=\"{ row }\">\r\n <div class=\"product-cell\">\r\n <div v-if=\"row.product_name\" class=\"product-cell__name\">{{ row.product_name }}</div>\r\n <div class=\"product-cell__sku\">\r\n <JSkuLink v-if=\"row.sku\" :code=\"row.sku\" />\r\n <span v-else>-</span>\r\n </div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"店铺\" width=\"100\">\r\n <template #default=\"{ row }\">\r\n {{ row.shop_account_name || row.shop_account || '-' }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"purchase_qty\" label=\"采购数量\" width=\"90\" align=\"right\" />\r\n <el-table-column prop=\"arrived_qty\" label=\"到货量\" width=\"80\" align=\"right\" />\r\n <el-table-column prop=\"wait_arrived_qty\" label=\"待到货量\" width=\"90\" align=\"right\" />\r\n <el-table-column prop=\"refund_qty\" label=\"退换货量\" width=\"90\" align=\"right\" />\r\n <el-table-column prop=\"expected_arrival_date\" label=\"预计到货日期\" width=\"120\" align=\"center\" />\r\n <el-table-column prop=\"purchaser_name\" label=\"采购员\" width=\"90\" />\r\n <el-table-column prop=\"ctime\" label=\"创建时间\" width=\"160\" align=\"center\" />\r\n </el-table>\r\n <div v-else-if=\"relatedActiveTab === 'receipt'\" v-loading=\"relatedLoading\">\r\n <div v-if=\"receiptPurchaseNos.length === 0\" class=\"empty-tip\">暂无关联收货单</div>\r\n <RelatedDocPanel\r\n v-for=\"poNo in receiptPurchaseNos\"\r\n :key=\"poNo\"\r\n type=\"receipt\"\r\n :doc-no=\"poNo\"\r\n param-key=\"purchase_no\"\r\n class=\"receipt-panel\"\r\n />\r\n </div>\r\n </el-tab-pane>\r\n\r\n <el-tab-pane label=\"操作日志\" name=\"logs\">\r\n <el-table\r\n :data=\"logList\"\r\n border\r\n size=\"small\"\r\n row-key=\"id\"\r\n style=\"width: 100%\"\r\n empty-text=\"暂无操作日志\"\r\n >\r\n <el-table-column prop=\"ctime\" label=\"操作时间\" width=\"170\" align=\"center\" />\r\n <el-table-column prop=\"operator\" label=\"操作人\" width=\"120\" />\r\n <el-table-column prop=\"operat_type_name\" label=\"操作类型\" width=\"120\" />\r\n <el-table-column prop=\"operat_msg\" label=\"操作内容\" min-width=\"260\" show-overflow-tooltip />\r\n </el-table>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </el-card>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button type=\"primary\" @click=\"$emit('update:modelValue', false)\">关闭</el-button>\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, watch } from 'vue'\r\nimport { JSkuLink } from '../../JProductDetail'\r\nimport { RelatedDocPanel } from '../../JRelatedDocs'\r\nimport { getDocDetailAdapters } from '../registry'\r\nimport {\r\n buildDeliveryProductRows,\r\n deliveryProductSpanMethod,\r\n parseDeliveryFileJson,\r\n} from '../utils/deliveryDocDisplayHelpers'\r\n\r\nconst props = defineProps<{\r\n modelValue: boolean\r\n /** 送货单号 delivery_no */\r\n deliveryDocNo: string\r\n}>()\r\n\r\ndefineEmits<{\r\n (e: 'update:modelValue', val: boolean): void\r\n}>()\r\n\r\nconst loading = ref(false)\r\nconst activeTab = ref('products')\r\nconst detail = reactive<Record<string, any>>({})\r\nconst tagList = ref<any[]>([])\r\n\r\nconst logisticsLoading = ref(false)\r\nconst logisticsData = ref<any[]>([])\r\nconst logisticsFetched = ref(false)\r\n\r\nconst relatedActiveTab = ref('purchase')\r\nconst relatedLoading = ref(false)\r\nconst purchaseDetailData = ref<any[]>([])\r\nconst relatedFetched = ref(false)\r\n\r\nconst deliveryNo = computed(() => detail.delivery_no || props.deliveryDocNo)\r\n\r\nconst productRows = computed(() => buildDeliveryProductRows(detail.items || []))\r\n\r\nconst logList = computed(() => {\r\n if (Array.isArray(detail.operation_logs)) return detail.operation_logs\r\n if (Array.isArray(detail.logs)) return detail.logs\r\n return []\r\n})\r\n\r\nconst receiptPurchaseNos = computed(() =>\r\n [...new Set(purchaseDetailData.value.map((item: any) => item.purchase_no).filter(Boolean))],\r\n)\r\n\r\nconst relatedTabs = computed(() => [\r\n { key: 'purchase', label: '采购单', count: purchaseDetailData.value.length },\r\n { key: 'receipt', label: '收货单', count: receiptPurchaseNos.value.length },\r\n])\r\n\r\nconst statusLabel = computed(() => {\r\n if (detail.status_name) return String(detail.status_name)\r\n return detail.status != null && detail.status !== '' ? String(detail.status) : '-'\r\n})\r\n\r\nconst statusTagType = computed(() => {\r\n const map: Record<number, string> = { 100: 'warning', 200: '', 300: 'danger' }\r\n return map[Number(detail.status)] || 'info'\r\n})\r\n\r\nconst displayValue = (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return '-'\r\n return String(value)\r\n}\r\n\r\nconst productSpanMethod = deliveryProductSpanMethod\r\n\r\nconst resetDetail = () => {\r\n Object.keys(detail).forEach((key) => delete detail[key])\r\n activeTab.value = 'products'\r\n tagList.value = []\r\n logisticsData.value = []\r\n logisticsFetched.value = false\r\n relatedActiveTab.value = 'purchase'\r\n purchaseDetailData.value = []\r\n relatedFetched.value = false\r\n}\r\n\r\nconst fetchTags = async () => {\r\n const api = getDocDetailAdapters().getDeliveryDocProductTags\r\n if (!api || !deliveryNo.value) return\r\n try {\r\n const res: any = await api(deliveryNo.value)\r\n tagList.value = res?.code === 1 ? (res.data || []) : []\r\n } catch {\r\n tagList.value = []\r\n }\r\n}\r\n\r\nconst fetchLogistics = async () => {\r\n const api = getDocDetailAdapters().getDeliveryDocLogistics\r\n if (!api || !deliveryNo.value) return\r\n logisticsLoading.value = true\r\n try {\r\n const res: any = await api(deliveryNo.value)\r\n logisticsData.value = res?.code === 1 ? (res.data || []) : []\r\n } catch {\r\n logisticsData.value = []\r\n } finally {\r\n logisticsLoading.value = false\r\n }\r\n}\r\n\r\nconst fetchPurchaseDetail = async () => {\r\n const api = getDocDetailAdapters().getDeliveryDocPurchaseDetail\r\n if (!api || !deliveryNo.value) return\r\n relatedLoading.value = true\r\n try {\r\n const res: any = await api(deliveryNo.value)\r\n purchaseDetailData.value = res?.code === 1 ? (res.data || []) : []\r\n } catch {\r\n purchaseDetailData.value = []\r\n } finally {\r\n relatedLoading.value = false\r\n }\r\n}\r\n\r\nconst handleTabChange = (tab: string | number) => {\r\n const name = String(tab)\r\n if (name === 'logistics' && !logisticsFetched.value) {\r\n logisticsFetched.value = true\r\n fetchLogistics()\r\n }\r\n if (name === 'related' && !relatedFetched.value) {\r\n relatedFetched.value = true\r\n fetchPurchaseDetail()\r\n }\r\n}\r\n\r\nconst fetchDetail = async () => {\r\n if (!props.deliveryDocNo) {\r\n resetDetail()\r\n return\r\n }\r\n const fetchApi = getDocDetailAdapters().getDeliveryDocDetail\r\n if (!fetchApi) {\r\n console.warn('[DeliveryDocDetailView] 未注入 getDeliveryDocDetail adapter')\r\n resetDetail()\r\n return\r\n }\r\n loading.value = true\r\n try {\r\n const res: any = await fetchApi(props.deliveryDocNo)\r\n if (res?.code === 1) {\r\n Object.assign(detail, res.data || {})\r\n fetchTags()\r\n } else {\r\n resetDetail()\r\n }\r\n } catch (err) {\r\n console.error('[DeliveryDocDetailView] getDeliveryDocDetail error:', err)\r\n resetDetail()\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val) {\r\n resetDetail()\r\n fetchDetail()\r\n } else {\r\n resetDetail()\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.delivery-doc-detail {\r\n min-height: 200px;\r\n max-height: 75vh;\r\n overflow-y: auto;\r\n}\r\n\r\n.section-title {\r\n margin: 16px 0 10px;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n padding-left: 12px;\r\n border-left: 3px solid #409eff;\r\n}\r\n\r\n.section-card {\r\n margin-bottom: 8px;\r\n}\r\n\r\n.section-card :deep(.el-card__body) {\r\n padding: 16px 20px;\r\n}\r\n\r\n.info-grid {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0, 1fr));\r\n gap: 12px 16px;\r\n}\r\n\r\n.info-item {\r\n display: flex;\r\n align-items: flex-start;\r\n min-width: 0;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n}\r\n\r\n.info-label {\r\n flex-shrink: 0;\r\n color: #909399;\r\n}\r\n\r\n.info-value {\r\n color: #303133;\r\n word-break: break-all;\r\n}\r\n\r\n.detail-tabs {\r\n margin-top: 0;\r\n}\r\n\r\n.product-image {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 4px;\r\n border: 1px solid #ebeef5;\r\n object-fit: cover;\r\n}\r\n\r\n.product-image--empty {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #c0c4cc;\r\n font-size: 12px;\r\n background: #f5f7fa;\r\n}\r\n\r\n.product-cell {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n line-height: 1.4;\r\n}\r\n\r\n.product-cell__name {\r\n color: #409eff;\r\n font-size: 13px;\r\n}\r\n\r\n.product-cell__sku {\r\n color: #606266;\r\n font-size: 12px;\r\n}\r\n\r\n.inline-tag {\r\n margin-left: 4px;\r\n}\r\n\r\n.sub-text {\r\n color: #909399;\r\n font-size: 12px;\r\n}\r\n\r\n.related-sub-tabs {\r\n display: flex;\r\n gap: 8px;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.receipt-panel {\r\n margin-bottom: 16px;\r\n}\r\n\r\n.file-link {\r\n display: block;\r\n}\r\n\r\n.empty-tip {\r\n text-align: center;\r\n padding: 40px 0;\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n@use '../styles/docDetailDialog.scss';\r\n</style>\r\n","import type { DocDetailComponents } from './types'\r\nimport ReceiptOrderDetailView from './views/ReceiptOrderDetailView.vue'\r\nimport QcOrderDetailView from './views/QcOrderDetailView.vue'\r\nimport InboundOrderDetailView from './views/InboundOrderDetailView.vue'\r\nimport PutawayOrderDetailView from './views/PutawayOrderDetailView.vue'\r\nimport DeliveryOrderDetailView from './views/DeliveryOrderDetailView.vue'\r\nimport TransferOrderDetailView from './views/TransferOrderDetailView.vue'\r\nimport WorkOrderDetailView from './views/WorkOrderDetailView.vue'\r\nimport AbnormalOrderDetailView from './views/AbnormalOrderDetailView.vue'\r\nimport PaymentRequestDetailView from './views/PaymentRequestDetailView.vue'\r\nimport ReturnOrderDetailView from './views/ReturnOrderDetailView.vue'\r\nimport CostExpenseDetailView from './views/CostExpenseDetailView.vue'\r\nimport ReceiptVoucherDetailView from './views/ReceiptVoucherDetailView.vue'\r\nimport PurchaseOrderDetailView from './views/PurchaseOrderDetailView.vue'\r\nimport PurchasePlanDetailView from './views/PurchasePlanDetailView.vue'\r\nimport PurchaseContractDetailView from './views/PurchaseContractDetailView.vue'\r\nimport DeliveryDocDetailView from './views/DeliveryDocDetailView.vue'\r\n\r\n/** WMS / SCM 默认只读详情组件映射(接口由业务项目 adapters 注入) */\r\nexport const wmsDocDetailComponents: DocDetailComponents = {\r\n receipt: {\r\n component: ReceiptOrderDetailView,\r\n orderNoProp: 'receiptOrderNo',\r\n },\r\n qc: {\r\n component: QcOrderDetailView,\r\n orderNoProp: 'qcOrderNo',\r\n },\r\n inbound: {\r\n component: InboundOrderDetailView,\r\n orderNoProp: 'inboundOrderNo',\r\n },\r\n putaway: {\r\n component: PutawayOrderDetailView,\r\n orderNoProp: 'putawayOrderNo',\r\n },\r\n delivery: {\r\n component: DeliveryOrderDetailView,\r\n orderNoProp: 'outboundOrderNo',\r\n },\r\n /**\r\n * SCM 送货单(采购送货通知)\r\n * 勿与上方 delivery(WMS 出库单)混淆\r\n */\r\n deliveryDoc: {\r\n component: DeliveryDocDetailView,\r\n orderNoProp: 'deliveryDocNo',\r\n },\r\n transfer: {\r\n component: TransferOrderDetailView,\r\n orderNoProp: 'transferOrderNo',\r\n },\r\n processing: {\r\n component: WorkOrderDetailView,\r\n orderNoProp: 'processingOrderNo',\r\n },\r\n abnormal: {\r\n component: AbnormalOrderDetailView,\r\n orderNoProp: 'abnormalOrderNo',\r\n },\r\n /** 付款单 / 请款单 */\r\n payment: {\r\n component: PaymentRequestDetailView,\r\n orderNoProp: 'paymentRequestNo',\r\n },\r\n /** 退换货单 */\r\n returnGoods: {\r\n component: ReturnOrderDetailView,\r\n orderNoProp: 'returnOrderNo',\r\n },\r\n /** 成本费用单 */\r\n costExpense: {\r\n component: CostExpenseDetailView,\r\n orderNoProp: 'costExpenseNo',\r\n },\r\n /** 收款单(采购收款,勿与 WMS receipt 收货单混淆) */\r\n receiptVoucher: {\r\n component: ReceiptVoucherDetailView,\r\n orderNoProp: 'receiptVoucherNo',\r\n },\r\n /** 采购订单 */\r\n purchase: {\r\n component: PurchaseOrderDetailView,\r\n orderNoProp: 'purchaseOrderNo',\r\n },\r\n /** 采购计划 */\r\n purchasePlan: {\r\n component: PurchasePlanDetailView,\r\n orderNoProp: 'purchasePlanNo',\r\n },\r\n /** 采购合同 */\r\n purchaseContract: {\r\n component: PurchaseContractDetailView,\r\n orderNoProp: 'purchaseContractNo',\r\n },\r\n}\r\n\r\nexport {\r\n ReceiptOrderDetailView,\r\n QcOrderDetailView,\r\n InboundOrderDetailView,\r\n PutawayOrderDetailView,\r\n DeliveryOrderDetailView,\r\n TransferOrderDetailView,\r\n WorkOrderDetailView,\r\n AbnormalOrderDetailView,\r\n PaymentRequestDetailView,\r\n ReturnOrderDetailView,\r\n CostExpenseDetailView,\r\n ReceiptVoucherDetailView,\r\n PurchaseOrderDetailView,\r\n PurchasePlanDetailView,\r\n PurchaseContractDetailView,\r\n DeliveryDocDetailView,\r\n}\r\n","/**\r\n * 递归转换值(处理嵌套对象和数组)\r\n */\r\nfunction deepTransformValue(value: any, transformer: (obj: Record<string, any>) => Record<string, any>): any {\r\n if (Array.isArray(value)) {\r\n return value.map((item) => deepTransformValue(item, transformer))\r\n }\r\n if (value !== null && typeof value === 'object' && !(value instanceof Date)) {\r\n return transformer(value)\r\n }\r\n return value\r\n}\r\n\r\n/**\r\n * 将对象的 key 从小驼峰转为下划线格式(支持深度嵌套)\r\n * @param obj 需要转换的对象\r\n * @param excludeKeys 不需要转换的 key 数组(可选)\r\n */\r\nexport function toSnakeCase<T extends Record<string, any>>(\r\n obj: T,\r\n excludeKeys: string[] = []\r\n): Record<string, any> {\r\n return Object.fromEntries(\r\n Object.entries(obj).map(([key, value]) => {\r\n const newValue = deepTransformValue(value, (v) => toSnakeCase(v, excludeKeys))\r\n if (excludeKeys.includes(key)) {\r\n return [key, newValue]\r\n }\r\n const snakeKey = key.replace(/([A-Z])/g, '_$1').toLowerCase()\r\n return [snakeKey, newValue]\r\n })\r\n )\r\n}\r\n\r\n/**\r\n * 将对象的 key 从下划线格式转为小驼峰(支持深度嵌套)\r\n * @param obj 需要转换的对象\r\n * @param excludeKeys 不需要转换的 key 数组(可选)\r\n */\r\nexport function toCamelCase<T extends Record<string, any>>(\r\n obj: T,\r\n excludeKeys: string[] = []\r\n): Record<string, any> {\r\n return Object.fromEntries(\r\n Object.entries(obj).map(([key, value]) => {\r\n const newValue = deepTransformValue(value, (v) => toCamelCase(v, excludeKeys))\r\n if (excludeKeys.includes(key)) {\r\n return [key, newValue]\r\n }\r\n const camelKey = key.replace(/_([a-z])/g, (_, char) => char.toUpperCase())\r\n return [camelKey, newValue]\r\n })\r\n )\r\n}\r\n\r\n/**\r\n * 从对象中提取指定的 key\r\n * @param obj 源对象\r\n * @param keys 要提取的 key 数组\r\n */\r\nexport function pick<T extends Record<string, any>, K extends keyof T>(\r\n obj: T,\r\n keys: K[]\r\n): Pick<T, K> {\r\n const result = {} as Pick<T, K>\r\n for (const key of keys) {\r\n if (key in obj) {\r\n result[key] = obj[key]\r\n }\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * 从对象中排除指定的 key\r\n * @param obj 源对象\r\n * @param keys 要排除的 key 数组\r\n */\r\nexport function omit<T extends Record<string, any>, K extends keyof T>(\r\n obj: T,\r\n keys: K[]\r\n): Omit<T, K> {\r\n const result = { ...obj }\r\n for (const key of keys) {\r\n delete result[key]\r\n }\r\n return result as Omit<T, K>\r\n}\r\n\r\n/**\r\n * 深拷贝对象\r\n * @param obj 需要拷贝的对象\r\n */\r\nexport function deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== 'object') return obj\r\n if (obj instanceof Date) return new Date(obj.getTime()) as unknown as T\r\n if (obj instanceof RegExp) return new RegExp(obj.source, obj.flags) as unknown as T\r\n if (Array.isArray(obj)) return obj.map((item) => deepClone(item)) as unknown as T\r\n const cloned = {} as Record<string, any>\r\n for (const key of Object.keys(obj)) {\r\n cloned[key] = deepClone((obj as Record<string, any>)[key])\r\n }\r\n return cloned as T\r\n}\r\n\r\n/**\r\n * 过滤对象中的空值(null、undefined、空字符串)\r\n * @param obj 需要过滤的对象\r\n * @param deep 是否递归过滤嵌套对象,默认 false\r\n */\r\nexport function filterEmpty<T extends Record<string, any>>(\r\n obj: T,\r\n deep = false\r\n): Partial<T> {\r\n const result = {} as Record<string, any>\r\n for (const [key, value] of Object.entries(obj)) {\r\n if (value === null || value === undefined || value === '') continue\r\n if (deep && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {\r\n const filtered = filterEmpty(value, true)\r\n if (Object.keys(filtered).length > 0) {\r\n result[key] = filtered\r\n }\r\n } else {\r\n result[key] = value\r\n }\r\n }\r\n return result as Partial<T>\r\n}\r\n\r\n/**\r\n * 将嵌套对象扁平化为单层对象\r\n * @param obj 需要扁平化的对象\r\n * @param prefix key 前缀,默认为空\r\n * @param separator 分隔符,默认为 '.'\r\n * @example flatten({ a: { b: 1, c: { d: 2 } } }) => { 'a.b': 1, 'a.c.d': 2 }\r\n */\r\nexport function flatten(\r\n obj: Record<string, any>,\r\n prefix = '',\r\n separator = '.'\r\n): Record<string, any> {\r\n const result: Record<string, any> = {}\r\n for (const [key, value] of Object.entries(obj)) {\r\n const newKey = prefix ? `${prefix}${separator}${key}` : key\r\n if (value !== null && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {\r\n Object.assign(result, flatten(value, newKey, separator))\r\n } else {\r\n result[newKey] = value\r\n }\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * 将扁平化的对象还原为嵌套对象\r\n * @param obj 扁平化的对象\r\n * @param separator 分隔符,默认为 '.'\r\n * @example unflatten({ 'a.b': 1, 'a.c.d': 2 }) => { a: { b: 1, c: { d: 2 } } }\r\n */\r\nexport function unflatten(\r\n obj: Record<string, any>,\r\n separator = '.'\r\n): Record<string, any> {\r\n const result: Record<string, any> = {}\r\n for (const [key, value] of Object.entries(obj)) {\r\n const parts = key.split(separator)\r\n let current = result\r\n for (let i = 0; i < parts.length - 1; i++) {\r\n const k = parts[i] as string\r\n if (!(k in current)) {\r\n current[k] = {}\r\n }\r\n current = current[k]\r\n }\r\n current[parts[parts.length - 1] as string] = value\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * 将 { key: label } 对象转换为 el-table-column 所需的表头数组\r\n * @param fieldMap 字段映射对象\r\n * @example toTableColumns({ id: '主键', name: '名称' }) => [{ id: 'id', label: '主键', prop: 'id' }, ...]\r\n */\r\nexport function toTableColumns(fieldMap: Record<string, string>) {\r\n return Object.entries(fieldMap).map(([key, label]) => ({\r\n id: key,\r\n label,\r\n prop: key,\r\n }))\r\n}\r\n","/**\r\n * 各状态条数接口统一处理工具\r\n *\r\n * 后端「各状态返回条数」接口统一返回数组,例如:\r\n * [\r\n * { status: 'all', status_name: '全部', count: 10 },\r\n * { status: -1, status_name: '草稿', count: 1 },\r\n * { status: 100, status_name: '待审核', count: 2 },\r\n * ...\r\n * ]\r\n * - status: 状态码(number | string),'all' / null / 空 表示「全部」\r\n * - status_name / name: 状态中文名\r\n * - count: 该状态下的条数\r\n *\r\n * 兼容旧对象格式({ all: 17, pendingSubmit: 7, ... })。\r\n */\r\n\r\nexport interface StatusCountItem {\r\n name?: string\r\n /** 部分接口用 status_name 表示状态中文名 */\r\n status_name?: string\r\n status?: number | string | null\r\n count?: number | string\r\n}\r\n\r\nexport interface StatusCountLookup {\r\n /**\r\n * 按 status 取条数\r\n * - number:具体状态码(含 -1)\r\n * - null / undefined / 'all':全部\r\n * - 其它 string:按原始 status 字符串匹配\r\n */\r\n byStatus: (status: number | string | null | undefined) => number\r\n /** 按 name / status_name 中文名取条数 */\r\n byName: (name: string) => number\r\n /** 「全部」的条数 */\r\n all: () => number\r\n /** 是否为旧对象格式(未迁移到数组) */\r\n isLegacyObject: boolean\r\n /** 旧对象格式时的原始对象(数组格式时为空对象) */\r\n legacyObject: Record<string, number>\r\n}\r\n\r\n/** 解包 data 层:优先 data 数组,其次 data.list,最后整包 */\r\nfunction unwrapPayload(res: any): any {\r\n if (Array.isArray(res)) return res\r\n if (Array.isArray(res?.data)) return res.data\r\n if (Array.isArray(res?.data?.list)) return res.data.list\r\n if (res?.data != null && typeof res.data === 'object') return res.data\r\n return res\r\n}\r\n\r\n/** 是否为「全部」状态标记 */\r\nfunction isAllStatus(status: number | string | null | undefined): boolean {\r\n if (status === null || status === undefined || status === '') return true\r\n if (status === 0 || status === '0') return true\r\n if (typeof status === 'string' && status.toLowerCase() === 'all') return true\r\n return false\r\n}\r\n\r\n/** 是否为「全部」Tab(与 el-tab-pane :name / 列表 status 参数对齐) */\r\nexport function isAllStatusTab(status: unknown): boolean {\r\n return isAllStatus(status as number | string | null | undefined)\r\n}\r\n\r\n/** Tab 选中值 → 列表查询 status(全部不传) */\r\nexport function resolveListStatusParam(tab: unknown): number | undefined {\r\n if (isAllStatusTab(tab)) return undefined\r\n const n = Number(tab)\r\n return Number.isFinite(n) ? n : undefined\r\n}\r\n\r\n/** 接口 status → tab :name(全部统一为 'all') */\r\nexport function toTabName(status: unknown): string {\r\n if (isAllStatusTab(status)) return 'all'\r\n return String(status)\r\n}\r\n\r\nexport type StatusTabListItem = {\r\n status?: unknown\r\n status_name?: string\r\n name?: string\r\n /** 列表顶栏若已生成 tab_name,同步时优先使用 */\r\n tab_name?: string\r\n}\r\n\r\n/**\r\n * 从 Tab 列表解析「全部」的 :name 值\r\n * @param asString 与 :name=\"String(tab.status)\" 对齐时为 true\r\n */\r\nexport function getAllTabName(\r\n tabs: StatusTabListItem[] = [],\r\n options?: { asString?: boolean },\r\n): string | number {\r\n const allTab = tabs.find(\r\n (tab) =>\r\n tab.name === '全部'\r\n || tab.status_name === '全部'\r\n || isAllStatusTab(tab.status),\r\n )\r\n if (allTab?.tab_name != null && allTab.tab_name !== '') {\r\n return allTab.tab_name\r\n }\r\n const status = allTab?.status as number | string | null | undefined\r\n if (isAllStatus(status)) {\r\n return options?.asString ? 'all' : (status ?? 0)\r\n }\r\n if (status === undefined || status === null) {\r\n return options?.asString ? 'all' : 0\r\n }\r\n return options?.asString ? String(status) : status\r\n}\r\n\r\n/** 当前为「全部」Tab 时,同步 activeTab 与接口 Tab 的 :name 一致 */\r\nexport function syncActiveTabIfAll(\r\n activeTab: { value: unknown },\r\n tabs: StatusTabListItem[],\r\n options?: { asString?: boolean },\r\n) {\r\n if (isAllStatusTab(activeTab.value)) {\r\n activeTab.value = getAllTabName(tabs, options)\r\n }\r\n}\r\n\r\n/**\r\n * status 归一化为 Map key:\r\n * - 全部 → null\r\n * - 可转数字(含 -1)→ number\r\n * - 其它字符串 → 原字符串\r\n */\r\nfunction normalizeStatusKey(status: number | string | null | undefined): number | string | null {\r\n if (isAllStatus(status)) return null\r\n if (typeof status === 'number') return Number.isFinite(status) ? status : null\r\n const raw = String(status).trim()\r\n if (raw === '') return null\r\n const n = Number(raw)\r\n if (raw !== '' && Number.isFinite(n) && String(n) === raw) return n\r\n // \"-1\" 等带符号数字\r\n if (Number.isFinite(n) && !Number.isNaN(n) && /^-?\\d+(\\.\\d+)?$/.test(raw)) return n\r\n return raw\r\n}\r\n\r\n/**\r\n * 归一化状态条数返回值。\r\n * @param res 接口原始返回(可能是 { data: [...] } / { data: { list: [...] } } / [...] / 旧对象格式)\r\n */\r\nexport function buildStatusCountLookup(res: any): StatusCountLookup {\r\n const payload = unwrapPayload(res)\r\n\r\n // 旧对象格式兼容:非数组时直接当作 { key: count } 返回\r\n if (payload && !Array.isArray(payload) && typeof payload === 'object') {\r\n const legacy: Record<string, number> = {}\r\n for (const k of Object.keys(payload)) legacy[k] = Number(payload[k]) || 0\r\n return {\r\n byStatus: () => 0,\r\n byName: () => 0,\r\n all: () => legacy.all || 0,\r\n isLegacyObject: true,\r\n legacyObject: legacy,\r\n }\r\n }\r\n\r\n const list: StatusCountItem[] = Array.isArray(payload) ? payload : []\r\n const byStatusMap = new Map<number | string | null, number>()\r\n const byNameMap = new Map<string, number>()\r\n let sumCount = 0\r\n\r\n for (const item of list) {\r\n const count = Number(item.count) || 0\r\n const statusKey = normalizeStatusKey(item.status)\r\n const label = item.status_name ?? item.name\r\n\r\n byStatusMap.set(statusKey, count)\r\n // status: 'all' 再挂一份字符串 key,方便 byStatus('all')\r\n if (statusKey === null) {\r\n byStatusMap.set('all', count)\r\n }\r\n if (label != null && label !== '') {\r\n byNameMap.set(String(label), count)\r\n }\r\n // 「全部」条目不参与 sum,避免重复\r\n if (statusKey !== null) {\r\n sumCount += count\r\n }\r\n }\r\n\r\n return {\r\n byStatus: (status) => {\r\n if (isAllStatus(status)) {\r\n return byStatusMap.get(null) ?? byStatusMap.get('all') ?? byNameMap.get('全部') ?? 0\r\n }\r\n const key = normalizeStatusKey(status)\r\n return byStatusMap.get(key) ?? 0\r\n },\r\n byName: (name) => byNameMap.get(name) ?? 0,\r\n all: () =>\r\n byStatusMap.get(null)\r\n ?? byStatusMap.get('all')\r\n ?? byNameMap.get('全部')\r\n ?? sumCount,\r\n isLegacyObject: false,\r\n legacyObject: {},\r\n }\r\n}\r\n\r\n/** 列表顶栏 Tab(含 tab_name,供 el-tab-pane :name 绑定) */\r\nexport type StatusTabItem = {\r\n tab_name: string\r\n name: string\r\n count: number\r\n status: number | string | null\r\n}\r\n\r\n/** 本地兜底 Tab:全部(0) + 传入状态选项(0) */\r\nexport function buildFallbackStatusTabs(\r\n options: Array<{ value: number | string; label: string }> = [],\r\n): StatusTabItem[] {\r\n return [\r\n { tab_name: 'all', name: '全部', count: 0, status: null },\r\n ...options.map((item) => ({\r\n tab_name: String(item.value),\r\n name: item.label,\r\n count: 0,\r\n status: item.value as number | string,\r\n })),\r\n ]\r\n}\r\n\r\n/** 解包 statusCounts 接口的 list 数组 */\r\nexport function unwrapStatusCountList(res: any): StatusCountItem[] {\r\n const payload = unwrapPayload(res)\r\n if (Array.isArray(payload)) return payload\r\n if (Array.isArray(payload?.list)) return payload.list\r\n return []\r\n}\r\n\r\n/** statusCounts list → 顶栏 Tab(全部 tab_name 固定为 all) */\r\nexport function mapStatusCountToTabs(list: StatusCountItem[] = []): StatusTabItem[] {\r\n return list.map((item) => {\r\n const label = String(item.name ?? item.status_name ?? '')\r\n const all = isAllStatus(item.status) || label === '全部'\r\n return {\r\n tab_name: all ? 'all' : String(item.status),\r\n name: label || (all ? '全部' : String(item.status ?? '')),\r\n count: Number(item.count) || 0,\r\n status: all ? null : (item.status as number | string | null) ?? null,\r\n }\r\n })\r\n}\r\n","/**\r\n * 通用带样式平表导出(exceljs)\r\n *\r\n * 入参 data 为「中文表头 → 值」对象数组。\r\n * exceljs 为 peerDependency,由宿主项目安装;此处动态 import,避免打进组件库包体。\r\n */\r\nimport type ExcelJS from 'exceljs'\r\n\r\nexport interface StyledExportOptions {\r\n /** 表头背景色 ARGB,默认蓝色 */\r\n headerFill?: string\r\n /** 冻结表头行,默认 true */\r\n freezeHeader?: boolean\r\n /** 各列宽度(字符数);不传则按表头/内容长度自适应 */\r\n columnWidths?: number[]\r\n}\r\n\r\nconst FONT_FAMILY = '微软雅黑'\r\nconst HEADER_FILL_DEFAULT = 'FF409EFF' // element-plus 主题蓝\r\nconst BORDER_COLOR = 'FFD9E0E8'\r\n\r\nconst thinBorder: Partial<ExcelJS.Borders> = {\r\n top: { style: 'thin', color: { argb: BORDER_COLOR } },\r\n bottom: { style: 'thin', color: { argb: BORDER_COLOR } },\r\n left: { style: 'thin', color: { argb: BORDER_COLOR } },\r\n right: { style: 'thin', color: { argb: BORDER_COLOR } },\r\n}\r\n\r\n/** 估算显示宽度:中文按 2 个字符宽计 */\r\nconst displayWidth = (text: string) => {\r\n let width = 0\r\n for (const ch of text) {\r\n width += /[⺀-﹏＀-￯]/.test(ch) ? 2 : 1\r\n }\r\n return width\r\n}\r\n\r\nexport const exportStyledExcel = async (\r\n data: Array<Record<string, string | number>>,\r\n fileName: string = 'data.xlsx',\r\n sheetName: string = 'Sheet1',\r\n options: StyledExportOptions = {},\r\n) => {\r\n if (!data || data.length === 0) {\r\n throw new Error('没有可导出的数据')\r\n }\r\n\r\n const { default: Excel } = await import('exceljs')\r\n const workbook = new Excel.Workbook()\r\n const sheet = workbook.addWorksheet(sheetName, {\r\n views: options.freezeHeader === false ? [] : [{ state: 'frozen', ySplit: 1 }],\r\n })\r\n\r\n const headers = Object.keys(data[0]!)\r\n\r\n // 列宽:显式传入优先,否则按表头与前 50 行内容自适应(8~40 字符)\r\n sheet.columns = headers.map((header, index) => {\r\n const explicit = options.columnWidths?.[index]\r\n if (explicit) return { width: explicit }\r\n let width = displayWidth(header)\r\n for (const row of data.slice(0, 50)) {\r\n width = Math.max(width, displayWidth(String(row[header] ?? '')))\r\n }\r\n return { width: Math.min(Math.max(width + 4, 8), 40) }\r\n })\r\n\r\n // 表头行\r\n const headerRow = sheet.addRow(headers)\r\n headerRow.height = 24\r\n headerRow.eachCell((cell) => {\r\n cell.font = { name: FONT_FAMILY, size: 11, bold: true, color: { argb: 'FFFFFFFF' } }\r\n cell.fill = {\r\n type: 'pattern',\r\n pattern: 'solid',\r\n fgColor: { argb: options.headerFill || HEADER_FILL_DEFAULT },\r\n }\r\n cell.alignment = { vertical: 'middle', horizontal: 'center' }\r\n cell.border = thinBorder\r\n })\r\n\r\n // 数据行:细边框 + 隔行浅灰底\r\n data.forEach((item, index) => {\r\n const row = sheet.addRow(headers.map((h) => item[h] ?? ''))\r\n row.height = 20\r\n row.eachCell({ includeEmpty: true }, (cell) => {\r\n cell.font = { name: FONT_FAMILY, size: 10, color: { argb: 'FF303133' } }\r\n cell.alignment = { vertical: 'middle', horizontal: 'left', wrapText: false }\r\n cell.border = thinBorder\r\n if (index % 2 === 1) {\r\n cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFF7F9FC' } }\r\n }\r\n })\r\n })\r\n\r\n // 下载\r\n const buffer = await workbook.xlsx.writeBuffer()\r\n const blob = new Blob([buffer], {\r\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n })\r\n const url = URL.createObjectURL(blob)\r\n const link = document.createElement('a')\r\n link.href = url\r\n link.download = fileName\r\n link.click()\r\n URL.revokeObjectURL(url)\r\n}\r\n","import type { RouteRecordRaw } from 'vue-router'\r\nimport type { BackendRoute } from './types'\r\n\r\ntype ViewModules = Record<string, () => Promise<unknown>>\r\n\r\ninterface RouteTreeNode extends BackendRoute {\r\n children?: RouteTreeNode[]\r\n}\r\n\r\nexport function getComponentImport(componentPath: string, viewModules: ViewModules): (() => Promise<unknown>) | null {\r\n if (!componentPath) return null\r\n\r\n let normalizedPath = componentPath.replace(/^@\\//, '')\r\n if (!normalizedPath.startsWith('views/')) normalizedPath = `views/${normalizedPath}`\r\n if (!normalizedPath.endsWith('.vue')) normalizedPath = `${normalizedPath}.vue`\r\n\r\n const fullPath = `/src/${normalizedPath}`\r\n\r\n return (viewModules[fullPath] ?? viewModules['/src/views/common/NotFound.vue'] ?? null) as (() => Promise<unknown>) | null\r\n}\r\n\r\nexport function buildRouteTree(routes: BackendRoute[]): RouteTreeNode[] {\r\n const routeMap = new Map<string, RouteTreeNode>()\r\n const rootRoutes: RouteTreeNode[] = []\r\n\r\n routes.forEach(route => routeMap.set(route.name, { ...route, children: [] }))\r\n\r\n routes.forEach(route => {\r\n const currentRoute = routeMap.get(route.name)!\r\n if (!route.parent_name) {\r\n rootRoutes.push(currentRoute)\r\n } else {\r\n const parentRoute = routeMap.get(route.parent_name)\r\n if (parentRoute) {\r\n parentRoute.children ??= []\r\n parentRoute.children.push(currentRoute)\r\n } else {\r\n rootRoutes.push(currentRoute)\r\n }\r\n }\r\n })\r\n return rootRoutes\r\n}\r\n\r\nexport function transformBackendRoutes(\r\n backendRoutes: RouteTreeNode[],\r\n viewModules: ViewModules,\r\n projectName?: string\r\n): RouteRecordRaw[] {\r\n return backendRoutes\r\n .filter(route => !projectName || !route.project || route.project === projectName)\r\n .map(route => {\r\n const routeConfig: Partial<RouteRecordRaw> = {\r\n path: route.path,\r\n name: route.name,\r\n meta: {\r\n requiresAuth: route.requiresAuth === 1,\r\n title: route.title,\r\n permissions: route.permissions\r\n ? route.permissions.split(',').map(p => p.trim()).filter(Boolean)\r\n : [],\r\n params: route.params\r\n ? route.params.split('&').map(p => p.trim()).filter(Boolean)\r\n : [],\r\n },\r\n }\r\n\r\n const component = getComponentImport(route.component, viewModules)\r\n if (component) routeConfig.component = component as RouteRecordRaw['component']\r\n\r\n if (route.redirect) routeConfig.redirect = route.redirect\r\n\r\n if (route.children?.length) {\r\n routeConfig.children = transformBackendRoutes(route.children, viewModules, projectName)\r\n }\r\n\r\n return routeConfig as RouteRecordRaw\r\n })\r\n}\r\n\r\nexport function findFirstAllowedRoute(\r\n backendRoutes: BackendRoute[],\r\n routePermissions: string[],\r\n layoutRouteName: string,\r\n projectName?: string\r\n): BackendRoute | undefined {\r\n const routeMap = new Map<string, BackendRoute>()\r\n backendRoutes.forEach(route => routeMap.set(route.name, route))\r\n\r\n const isDescendantOfLayout = (route: BackendRoute): boolean => {\r\n let parentName = route.parent_name\r\n const visited = new Set<string>()\r\n\r\n while (parentName) {\r\n if (parentName === layoutRouteName) return true\r\n if (visited.has(parentName)) return false\r\n\r\n visited.add(parentName)\r\n const parentRoute = routeMap.get(parentName)\r\n if (!parentRoute) return false\r\n parentName = parentRoute.parent_name\r\n }\r\n\r\n return false\r\n }\r\n\r\n return backendRoutes\r\n .filter(route =>\r\n route.name !== layoutRouteName &&\r\n route.is_show === 1 &&\r\n route.component &&\r\n routePermissions.includes(route.code) &&\r\n isDescendantOfLayout(route) &&\r\n (!projectName || !route.project || route.project === projectName)\r\n )\r\n .sort((a, b) => a.sorts - b.sorts)[0]\r\n}\r\n","import type { NavigationGuardNext, Router } from 'vue-router'\r\nimport NProgress from 'nprogress'\r\nimport 'nprogress/nprogress.css'\r\nimport { ElMessage } from 'element-plus'\r\nimport type { RouterGuardOptions } from './types'\r\nimport { buildRouteTree, transformBackendRoutes } from './helpers'\r\n\r\nNProgress.configure({ showSpinner: false })\r\n\r\nconst isDev = import.meta.env.DEV\r\nconst log = (...args: unknown[]) => { if (isDev) console.log('[Router]', ...args) }\r\nconst warn = (...args: unknown[]) => { if (isDev) console.warn('[Router]', ...args) }\r\nconst logError = (...args: unknown[]) => { console.error('[Router]', ...args) }\r\n\r\nexport function createRouterGuard(router: Router, options: RouterGuardOptions) {\r\n const {\r\n getRouteStore,\r\n getPermissionStore,\r\n getUserStore,\r\n isAuthenticated,\r\n viewModules,\r\n homeComponent,\r\n notFoundComponent,\r\n projectName,\r\n layoutRouteName = 'Layout',\r\n publicPaths = ['/login', '/register'],\r\n loginRouteName = 'login',\r\n forbiddenRouteName = 'Forbidden',\r\n homeRouteName = 'Home',\r\n homeRoutePath = 'home',\r\n homeTitle = '\\u9996\\u9875',\r\n noPermissionMessage = '\\u6682\\u65e0\\u6743\\u9650',\r\n } = options\r\n\r\n let hasAddedRoutes = false\r\n\r\n function addDynamicRoutes(backendRoutes: ReturnType<typeof getRouteStore>['backendRoutes']) {\r\n const treeRoutes = buildRouteTree(backendRoutes)\r\n const layoutRoute = treeRoutes.find(route => route.name === layoutRouteName)\r\n const childRoutes = layoutRoute?.children\r\n ? transformBackendRoutes(layoutRoute.children, viewModules, projectName)\r\n : []\r\n\r\n childRoutes.forEach(route => {\r\n if (route.name && router.hasRoute(route.name)) return\r\n router.addRoute(layoutRouteName, route)\r\n log(`Add route: ${String(route.name)} -> ${route.path}`)\r\n })\r\n\r\n if (!router.hasRoute(homeRouteName)) {\r\n router.addRoute(layoutRouteName, {\r\n path: homeRoutePath,\r\n name: homeRouteName,\r\n component: homeComponent as never,\r\n meta: { title: homeTitle },\r\n })\r\n }\r\n\r\n if (!router.hasRoute('NotFound')) {\r\n router.addRoute({\r\n path: '/:pathMatch(.*)*',\r\n name: 'NotFound',\r\n component: notFoundComponent as never,\r\n })\r\n }\r\n\r\n log(`Dynamic routes added: ${childRoutes.length}`)\r\n }\r\n\r\n function redirectToHomeOrContinue(\r\n toName: ReturnType<Router['resolve']>['name'],\r\n next: NavigationGuardNext\r\n ) {\r\n if (toName === homeRouteName) {\r\n next()\r\n return\r\n }\r\n\r\n if (router.hasRoute(homeRouteName)) {\r\n next({ name: homeRouteName, replace: true })\r\n } else {\r\n next()\r\n }\r\n }\r\n\r\n router.beforeEach(async (to, _from, next) => {\r\n NProgress.start()\r\n\r\n if (isAuthenticated() && !hasAddedRoutes) {\r\n try {\r\n const routeStore = getRouteStore()\r\n const permissionStore = getPermissionStore()\r\n\r\n await routeStore.initRoutes()\r\n await permissionStore.loadUserPermissions()\r\n\r\n addDynamicRoutes(routeStore.backendRoutes)\r\n hasAddedRoutes = true\r\n\r\n if (to.path === '/' || to.path === '') {\r\n redirectToHomeOrContinue(to.name, next)\r\n return\r\n }\r\n\r\n if (to.name === layoutRouteName) {\r\n redirectToHomeOrContinue(to.name, next)\r\n return\r\n }\r\n\r\n const currentRoute = routeStore.backendRoutes.find(route => route.name === to.name)\r\n if (currentRoute && !permissionStore.routePermissions.includes(currentRoute.code)) {\r\n warn('No route permission:', to.path)\r\n next({ name: forbiddenRouteName, replace: true })\r\n return\r\n }\r\n\r\n next({\r\n path: to.path,\r\n query: to.query,\r\n hash: to.hash,\r\n replace: true,\r\n })\r\n return\r\n } catch (err) {\r\n logError('Failed to load route permissions:', err)\r\n hasAddedRoutes = false\r\n await getUserStore().logout()\r\n next({ name: loginRouteName, replace: true })\r\n return\r\n }\r\n }\r\n\r\n if (publicPaths.includes(to.path)) {\r\n if (isAuthenticated()) {\r\n next({ path: '/', replace: true })\r\n } else {\r\n next()\r\n }\r\n return\r\n }\r\n\r\n if (!isAuthenticated()) {\r\n next({ name: loginRouteName, replace: true })\r\n return\r\n }\r\n\r\n const permissionStore = getPermissionStore()\r\n const routeStore = getRouteStore()\r\n\r\n if (to.name === homeRouteName) {\r\n next()\r\n return\r\n }\r\n\r\n if (permissionStore.routePermissions.length === 0) {\r\n if (to.path !== '/') {\r\n ElMessage.warning(noPermissionMessage)\r\n next({ path: '/', replace: true })\r\n } else {\r\n redirectToHomeOrContinue(to.name, next)\r\n }\r\n return\r\n }\r\n\r\n if (to.path === '/') {\r\n redirectToHomeOrContinue(to.name, next)\r\n return\r\n }\r\n\r\n if (to.name === layoutRouteName) {\r\n redirectToHomeOrContinue(to.name, next)\r\n return\r\n }\r\n\r\n const currentRoute = routeStore.backendRoutes.find(route => route.name === to.name)\r\n if (currentRoute && !permissionStore.routePermissions.includes(currentRoute.code)) {\r\n warn('No route permission:', to.path)\r\n next({ name: forbiddenRouteName, replace: true })\r\n return\r\n }\r\n\r\n next()\r\n })\r\n\r\n router.afterEach(() => NProgress.done())\r\n\r\n return {\r\n resetRouterState: () => { hasAddedRoutes = false },\r\n }\r\n}\r\n","import type { App } from 'vue'\r\nimport { JButton } from './components/JButton'\r\nimport { JUploadImg } from './components/JUploadImg'\r\nimport { JIconRender } from './components/JIconRender'\r\nimport { JSearchHeader } from './components/JSearchHeader'\r\nimport { JListSearchHeader } from './components/JListSearchHeader'\r\nimport { JImportExcel } from './components/JImportExcel'\r\nimport { JSidebar, JSideMenuItem } from './components/JSidebar'\r\nimport { JAdminLayout } from './components/JAdminLayout'\r\nimport { JProductDetailDialog, JSkuLink, ProductDetailHost } from './components/JProductDetail'\r\nimport { JSearchInputDialog } from './components/JSearchInputDialog'\r\nimport { JRemoteSelect } from './components/JRemoteSelect'\r\nimport { JProductSelectDialog } from './components/JProductSelectDialog'\r\nimport { DocNoLink, DocDetailHost } from './components/JDocDetail'\r\nimport { JRelatedDocs } from './components/JRelatedDocs'\r\n\r\n// 组件列表,新增组件后在此处注册\r\nconst components = [\r\n JButton,\r\n JUploadImg,\r\n JIconRender,\r\n JSearchHeader,\r\n JListSearchHeader,\r\n JImportExcel,\r\n JSidebar,\r\n JSideMenuItem,\r\n JAdminLayout,\r\n JProductDetailDialog,\r\n JSkuLink,\r\n ProductDetailHost,\r\n JSearchInputDialog,\r\n JRemoteSelect,\r\n JProductSelectDialog,\r\n DocNoLink,\r\n DocDetailHost,\r\n JRelatedDocs,\r\n]\r\n\r\n// 全量安装插件(app.use(JgyComponents))\r\nconst install = (app: App) => {\r\n components.forEach((component) => {\r\n app.component(component.name ?? component.__name ?? '', component)\r\n })\r\n}\r\n\r\n// 默认导出插件对象\r\nexport default { install }\r\n\r\n// 按需导出各组件\r\nexport {\r\n JButton,\r\n JUploadImg,\r\n JIconRender,\r\n JSearchHeader,\r\n JListSearchHeader,\r\n JImportExcel,\r\n JSidebar,\r\n JSideMenuItem,\r\n JAdminLayout,\r\n JProductDetailDialog,\r\n JSkuLink,\r\n ProductDetailHost,\r\n JSearchInputDialog,\r\n JRemoteSelect,\r\n JProductSelectDialog,\r\n DocNoLink,\r\n DocDetailHost,\r\n JRelatedDocs,\r\n}\r\n\r\n// 导出 composable / request 注入\r\nexport {\r\n useProductDetailDialog,\r\n useProductDetailStore,\r\n provideProductRequest,\r\n resolveProductRequest,\r\n useInjectedProductRequest,\r\n J_PRODUCT_REQUEST_KEY,\r\n} from './components/JProductDetail'\r\n\r\n// 全局单据详情(传单号打开只读弹窗)\r\nexport {\r\n createDocDetail,\r\n registerDocDetail,\r\n getDocDetailAdapters,\r\n getDocDetailEntry,\r\n getDocDetailRegistry,\r\n isDocDetailInitialized,\r\n useDocDetailStore,\r\n wmsDocDetailComponents,\r\n ReceiptOrderDetailView,\r\n QcOrderDetailView,\r\n InboundOrderDetailView,\r\n PutawayOrderDetailView,\r\n DeliveryOrderDetailView,\r\n TransferOrderDetailView,\r\n WorkOrderDetailView,\r\n AbnormalOrderDetailView,\r\n PaymentRequestDetailView,\r\n ReturnOrderDetailView,\r\n CostExpenseDetailView,\r\n ReceiptVoucherDetailView,\r\n PurchaseOrderDetailView,\r\n PurchasePlanDetailView,\r\n PurchaseContractDetailView,\r\n DeliveryDocDetailView,\r\n} from './components/JDocDetail'\r\n\r\n// 关联单据\r\nexport {\r\n createRelatedDocs,\r\n registerRelatedDocs,\r\n getRelatedListAdapter,\r\n getRelatedTableComponent,\r\n getRelatedDocsTableComponents,\r\n isRelatedDocsInitialized,\r\n RelatedDocSubTabs,\r\n RelatedDocNoCopy,\r\n RelatedDocPanel,\r\n RelatedReceiptOrderTable,\r\n RelatedQcOrderTable,\r\n RelatedInboundOrderTable,\r\n RelatedPutawayOrderTable,\r\n RelatedPurchaseOrderTable,\r\n RelatedPurchasePlanTable,\r\n RelatedDeliveryDocTable,\r\n RelatedProcessingOrderTable,\r\n RelatedReturnOrderTable,\r\n RelatedAbnormalOrderTable,\r\n RelatedPaymentRequestTable,\r\n RelatedReceiptVoucherTable,\r\n RelatedDeclarationTable,\r\n flattenOrderItems,\r\n sumOrderItemField,\r\n useRelatedCollapseExpand,\r\n parseListResponse,\r\n parseListTotal,\r\n} from './components/JRelatedDocs'\r\n\r\n// 导出工具方法\r\nexport {\r\n toSnakeCase,\r\n toCamelCase,\r\n pick,\r\n omit,\r\n deepClone,\r\n filterEmpty,\r\n flatten,\r\n unflatten,\r\n toTableColumns,\r\n checkBtnPermission,\r\n provideBtnPermission,\r\n useInjectedBtnPermission,\r\n useInjectedBtnPermissions,\r\n J_BTN_PERMISSION_KEY,\r\n J_BTN_PERMISSIONS_KEY,\r\n isAllStatusTab,\r\n resolveListStatusParam,\r\n toTabName,\r\n getAllTabName,\r\n syncActiveTabIfAll,\r\n buildStatusCountLookup,\r\n buildFallbackStatusTabs,\r\n unwrapStatusCountList,\r\n mapStatusCountToTabs,\r\n exportStyledExcel,\r\n} from './utils'\r\nexport { useBtnPermissionGate } from './composables/useBtnPermissionGate'\r\nexport type {\r\n BtnPermissionInput,\r\n BtnPermissionMode,\r\n BtnPermissionChecker,\r\n StatusCountItem,\r\n StatusCountLookup,\r\n StatusTabListItem,\r\n StatusTabItem,\r\n StyledExportOptions,\r\n} from './utils'\r\n\r\n// 导出路由工具\r\nexport { createRouterGuard, buildRouteTree, transformBackendRoutes, findFirstAllowedRoute, getComponentImport } from './router'\r\nexport type { BackendRoute, RouteStoreAdapter, PermissionStoreAdapter, UserStoreAdapter, RouterGuardOptions } from './router'\r\n\r\n// 导出类型\r\nexport type { ButtonType, ButtonSize } from './components/JButton'\r\nexport type { JUploadImgProps, JUploadImgEmits, ImageItem } from './components/JUploadImg'\r\nexport type { JIconRenderProps } from './components/JIconRender'\r\nexport type { JSearchHeaderProps } from './components/JSearchHeader'\r\nexport type { JListSearchHeaderProps } from './components/JListSearchHeader'\r\nexport type { JImportExcelProps, ApiFn } from './components/JImportExcel'\r\nexport type { SidebarMenuItem, JSidebarProps, JSideMenuItemProps } from './components/JSidebar'\r\nexport type { AdminLayoutMenuItem, JAdminLayoutProps } from './components/JAdminLayout'\r\nexport type {\r\n JProductDetailDialogProps,\r\n JSkuLinkProps,\r\n JProductRequestFn,\r\n JProductRequestConfig,\r\n} from './components/JProductDetail'\r\nexport type {\r\n JSearchInputDialogProps,\r\n SearchInputOption,\r\n SearchInputModel,\r\n} from './components/JSearchInputDialog'\r\nexport type {\r\n JRemoteSelectProps,\r\n RemoteSelectFetchApi,\r\n RemoteSelectModelValue,\r\n} from './components/JRemoteSelect'\r\nexport type {\r\n JProductSelectDialogProps,\r\n JProductSelectFetchApi,\r\n JProductSelectListResult,\r\n} from './components/JProductSelectDialog'\r\nexport type {\r\n DocDetailType,\r\n DocDetailAdapters,\r\n DocDetailRegistryItem,\r\n DocDetailComponents,\r\n CreateDocDetailOptions,\r\n} from './components/JDocDetail'\r\nexport type {\r\n RelatedListAdapter,\r\n RelatedDocTypeItem,\r\n CreateRelatedDocsOptions,\r\n RelatedDocsContainerProps,\r\n} from './components/JRelatedDocs'\r\n"],"names":["props","__props","emit","__emit","handleClick","event","_createElementBlock","_openBlock","_hoisted_2","$slots","_hoisted_3","_renderSlot","_ctx","imageUrl","ref","showPreview","showTipText","handlePreviewSingle","handleRemoveSingle","ElMessage","imageList","uploading","initImageList","urls","url","index","watch","val","handleDragEnd","emitMultipleUpdate","handleRemove","handleFileChange","uploadFile","file","error","item","_hoisted_1","_createVNode","_unref","draggable","$event","_withCtx","element","_createElementVNode","ElImage","img","_withModifiers","ElIcon","Delete","_createBlock","ElUpload","Loading","Plus","_Fragment","_hoisted_5","_hoisted_6","ZoomIn","ElImageViewer","_hoisted_7","_hoisted_8","_toDisplayString","_mergeProps","$attrs","J_BTN_PERMISSION_KEY","J_BTN_PERMISSIONS_KEY","normalizeCodes","value","checkBtnPermission","checker","mode","codes","code","provideBtnPermission","app","permissions","useInjectedBtnPermission","inject","useInjectedBtnPermissions","useBtnPermissionGate","permissionChecker","injectedPermissionChecker","injectedPermissions","resolvePermissionChecker","canShowByPermission","permission","show","computed","createCanShow","canShowAdd","canShowBatchDelete","canShowSearch","canShowReset","formItemsRef","expanded","isAnimated","itemCount","collapsedHeight","shouldCollapse","measureItems","items","lastVisibleItem","wrapperRect","lastVisibleRect","toggleExpand","el","onEnd","observer","onMounted","onBeforeUnmount","ElCard","ElForm","_normalizeClass","ElButton","Search","_cache","Refresh","_createTextVNode","ArrowDown","ROW_TOP_TOLERANCE","COLLAPSED_HEIGHT_BUFFER","canShowMoreFilter","canShowDownload","canShowSettings","activeTab","_useModel","slots","useSlots","moreFilterVisible","settingsVisible","filterItemsRef","filterLeftRef","rowCount","showTabsRow","moreFilterLabel","count","shouldShowCollapseToggle","collectFilterItems","root","form","groupItemsByRow","rows","currentRow","rowTop","i","applyCollapsedHeight","visibleRows","lastVisibleRow","remeasureLayout","mutationObserver","resizeObserver","nextTick","handleMoreFilterConfirm","handleSettingsSave","_component_el_card","_component_el_tabs","name","_component_el_button","_component_el_icon","_component_el_popover","_hoisted_4","Download","Setting","_component_el_drawer","visible","submitting","fieldMap","renderData","stats","statusMap","dataColumns","key","label","handleOpen","res","raw","reader","e","workbook","XLSX","wsName","ws","dataRows","row","cell","list","col","handleDel","idx","handleConfirm","data","_status","_error","rest","r","handleDownloadTemplate","wb","headers","tr","h","handleClose","ElDialog","ElDivider","ElLink","ElRow","ElCol","ElTable","_renderList","ElTableColumn","$index","normalizeMenuIndex","path","p","_a","menuIndex","isActive","isActiveParent","walk","ElSubMenu","JIconRender","child","_component_JSideMenuItem","ElMenuItem","innerCollapsed","toggleCollapse","normalizePath","collectLeafPaths","result","resolveActiveMenuIndex","menus","active","current","leaves","best","np","resolvedActiveMenu","menusStructureKey","findAncestorIndexes","trail","nextTrail","found","defaultOpeneds","_normalizeStyle","ElMenu","route","JSideMenuItem","layoutStyle","topMenuSyncKey","topMenuKey","handleTopMenuSelect","handleSideMenuClick","JSidebar","sidebarCollapsed","toggle","menu","ElDropdown","ElDropdownMenu","ElDropdownItem","J_PRODUCT_REQUEST_KEY","provideProductRequest","request","useInjectedProductRequest","resolveProductRequest","propRequest","injectedRequest","brandDict","unitDict","saleDict","companyDict","tagDict","customAttrDict","dictsLoaded","dictsPromise","loadDicts","post","_b","_c","getRequest","loading","detail","fetchDetail","params","basic","spec","images","purchase","declaration","qc","bindSku","spuBindSku","specBoxList","supplierList","productType","isSpu","productTypeLabel","nameCn","nameEn","mainCode","normalizeStringArray","v","s","arr","x","normalizeAttachments","it","f","fmt","weightText","unit","dimText","l","w","dictName","id","hit","brandName","unitName","statusName","declarationUnitName","peNames","c","tagList","t","skuAttrText","attr","k","basicAttachments","hasDesc","html","mainImage","sizeImages","sellingPointImages","qcMethodLabel","qcImages","qcAttachments","qcCustomList","dictAttrId","parseAttrOptions","out","customAttrDictMap","m","d","customAttrList","info","def","customAttrValueText","values","options","o","bindSkuList","styleAttrs","skuVariants","variantAttrText","supplierQuoteRows","sup","q","_withDirectives","ElDescriptions","ElDescriptionsItem","ElTag","_d","si","_hoisted_9","_hoisted_10","_hoisted_15","ElEmpty","useProductDetailStore","defineStore","type","open","skuCode","opts","close","reset","productDetailStore","displayText","hasCode","storeToRefs","JProductDetailDialog","useProductDetailDialog","store","productDetailDialogVisible","productDetailDialogCode","keyword","dialogVisible","textareaValue","currentOption","dialogTitleText","normalizeKeywords","parts","unique","seen","part","keywordToTextarea","openDialog","handleDialogClosed","next","prev","__expose","defaultType","_component_el_input","_component_el_select","_component_el_option","Memo","_component_el_dialog","debounceFn","fn","delay","timer","args","selectRef","loadingMore","currentPage","total","searchKeyword","dropdownScrollEl","hasMore","fetchPageSize","hasRequiredParams","computedPlaceholder","displayOptions","initialLabel","patched","currentLabel","valueText","labelLooksLikeValue","initialHasCjk","currentHasCjk","parseListResponse","pageInfo","fetchData","requestParams","totalNum","loadMore","handleSearch","query","nextKeyword","handleVisibleChange","bindScrollListener","unbindScrollListener","handleScroll","scrollTop","scrollHeight","clientHeight","selectDom","inputEl","popoverId","dropdownEl","scrollWrap","handleChange","option","handleClear","cleared","newParams","oldParams","tableRef","tableData","allSelectedRows","isRestoring","pagination","reactive","defaultAdapter","restoreSelection","selectedKeys","loadData","onSelectionChange","currentPageKeys","otherPageSelected","handleRemoveSelected","inCurrentPage","handleReset","clearDialogState","handleCancel","handleClosed","_component_el_table","_component_el_table_column","_component_el_pagination","registry","adapters","initialized","normalizeComponents","components","conf","createDocDetail","registerDocDetail","getDocDetailRegistry","getDocDetailAdapters","isDocDetailInitialized","getDocDetailEntry","useDocDetailStore","orderNo","docType","no","TOAST_ID","TOAST_Z_INDEX","showCopyToast","message","copyWithFallback","text","textarea","ok","copyText","docDetailStore","handleCopy","CopyDocument","entry","orderNoBind","onVisibleChange","_resolveDynamicComponent","RECEIPT_TYPE_MAP","getReceiptTypeLabel","RECEIPT_STATUS_MAP","ABNORMAL_INITIATE_STATUS_MAP","calcAbnormalInitiateStatus","orderItems","occupiedItemIds","abnormalItemIds","occupiedSet","covered","getReceiptStatusLabel","status","baseLabel","subMemo","base","resolveAbnormalSubMemo","flatOrderItems","flattenOrderItems","orderItem","withSkuGroupMeta","skuGroup","groupSize","copyable","sumOrderItemField","field","sum","INBOUND_TYPE_MAP","INBOUND_STATUS_MAP","getInboundTypeLabel","getInboundStatusLabel","PUTAWAY_STATUS_COMPLETED","getPutawayGoodQty","getPutawayBadQty","formatPutawayLocationList","locationList","inventoryStatus","qty","getPutawayGoodLocation","getPutawayBadLocation","useRelatedCollapseExpand","getOrders","getBatchKey","expandedKeys","shouldExpand","expandAll","orders","order","toggleRow","qcTypeMap","COLUMN_COUNT","flatTableData","spanMethod","columnIndex","getBatchRowClassName","formatLabelFlag","flag","getReceiptStatusTagType","CaretBottom","CaretRight","RelatedDocNoCopy","_component_el_tag","_component_el_image","Picture","JSkuLink","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","qcMethodMap","getStatusTagType","totalQty","getInboundStatusTagType","_hoisted_16","_hoisted_17","calcWaitArrivedQty","purchaseQty","arrivedQty","DocNoLink","buildPurchasePlanRows","bisSku","isCombo","purchasePlanQty","shopAccount","childItems","ci","ratio","childSkuInfo","buildProcessingOrderRows","skuInfo","skuImage","oi","childSkuImage","childRow","purchaseItems","pItem","pi","pSkuInfo","pSkuImage","buildFlatProcessingOrderRows","planQty","processedQty","flattenDeclarationRows","decl","products","displayDash","getInfoTagType","success","warning","flatData","DEFAULT_TABLE_COMPONENTS","RelatedReceiptOrderTable","RelatedQcOrderTable","RelatedInboundOrderTable","RelatedPutawayOrderTable","RelatedPurchaseOrderTable","RelatedPurchasePlanTable","RelatedDeliveryDocTable","RelatedProcessingOrderTable","RelatedReturnOrderTable","RelatedAbnormalOrderTable","RelatedPaymentRequestTable","RelatedReceiptVoucherTable","RelatedDeclarationTable","listAdapters","tableComponents","createRelatedDocs","registerRelatedDocs","getRelatedListAdapter","getRelatedTableComponent","getRelatedDocsTableComponents","isRelatedDocsInitialized","tab","$emit","parseListTotal","tableComponent","COLLAPSE_TYPES","tableBindProps","docNo","paramKey","adapter","err","_normalizeProps","_component_el_empty","activeType","countMap","tabs","resolveDocNo","resolveParamKey","loadCounts","RelatedDocSubTabs","RelatedDocPanel","logisticsList","logList","logDateRange","logPage","logPageSize","statusLabel","statusTagType","shouldShowActualLabel","filteredLogList","start","end","date","logPageData","relatedDocTypes","normalizeLogs","logs","log","resetDetail","fetchApi","_component_el_row","_component_el_col","_component_el_link","_component_el_tab_pane","_hoisted_18","JRelatedDocs","_hoisted_20","_component_el_date_picker","_hoisted_21","QC_STATUS_MAP","qcStandardsLoading","types","receiptNo","qcNo","getStatusLabel","passRate","good","bad","parseQcFileList","getQcFileName","logFiltered","fetchSkuQcStandardsData","fetchSku","qcInfo","_component_el_descriptions","_component_el_descriptions_item","_component_el_dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","_hoisted_19","_hoisted_22","_hoisted_23","formatInboundLocationList","getInboundGoodLocation","getInboundBadLocation","getPendingQcQty","transferInfo","transferLoading","productItems","transferStatusMap","showTransferSection","transferItemRows","transfer","inboundType","sourceNo","inboundNo","fetchTransferInfo","transferOrderNo","sourceOrderDocType","sourceOrderLabel","sourceOrderNo","getPutawayItemGoodQty","getPutawayItemBadQty","rawLogs","outboundTypeMap","getItemImage","loc","pageIndex","pageSize","dateRange","typeKeyword","fetchList","traceId","actionLogFetcher","isSimpleTransfer","formatQtyPair","transferQty","receivedQty","formatOutLocations","formatInLocations","fromList","formatLocationQty","notifyRefresh","handlePicking","api","handleDelete","ElMessageBox","handleReceive","receiptOrderNo","openReceipt","batch","_hoisted_24","JActionLogPanel","statusClass","formatShopSku","skuRow","abnormalTypeMap","processTypeMap","displayValue","formatByMap","map","n","formatUrgentFlag","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_42","_hoisted_43","details","flowList","isUrgent","feeRows","di","fees","fi","summary","goods","freight","apply","amount","detailSpanMethod","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_58","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_e","_hoisted_68","_hoisted_69","_f","_hoisted_70","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_81","_hoisted_82","returnTypeMap","operateLogs","itemList","toNumber","num","formatMoney","currency","formatFeeWithBearer","bearerName","money","formatOtherFee","detailRows","formatAmount","normalizeResponseList","payload","toQtyNumber","parseQtyDetailItem","parseDeliveryQtyDetailItem","findPurchaseQtyRecord","purchaseNo","targetNo","buildSkuQtyMap","record","buildSkuDeliveryQtyMap","calcArrivedQtyTotal","calcPendingDeliveryQtyTotal","formatQtyTotal","formatQtyField","formatDeliveryQtyField","mergeProductQtyDetails","wmsRes","deliveryRes","wmsRecord","deliveryRecord","wmsSkuMap","deliverySkuMap","product","sku","STATUS_MAP","DISPLAY_NAME_KEYS","productRows","customsProducts","customsLoading","customsLoaded","declarationConfirmStatus","logisticsData","logisticsLoading","logisticsLoaded","invoiceGroups","invoiceLoading","invoiceLoaded","DECLARATION_CONFIRM_MAP","declarationConfirmLabel","declarationConfirmTagType","basicInfo","firstProduct","merged","productList","syncProductRows","attachments","parseAttachments","settlementTermText","finalRate","formatPercent","formatTaxIncluded","formatPrice","getCustomsStatusTagType","getLogisticsStatusTagType","parsed","loadCustomsProducts","loadLogisticsData","buildInvoiceGroups","groups","unitPrice","invoices","loadInvoiceData","loadProductQtyDetails","fetchWmsQty","fetchDeliveryQty","_hoisted_41","_hoisted_53","group","gIdx","parseMaybeJsonObject","resolvePlanProductName","direct","matched","childName","bisName","infoName","resolvePlanShopAccountCode","resolvePlanShopAccountName","enrichPlanProductRow","fallback","product_name","shop_account","shop_account_name","pickDetailProductImage","parsePlanDetailAttachments","requirementNo","parent","image","relatedDocCount","detailAttachments","productImage","contractNo","orderList","firstOrder","settlementMethodText","fileNames","orderCount","productCount","totalIncl","totalExcl","buildDeliveryProductRows","span","j","deliveryProductSpanMethod","parseDeliveryFileJson","logisticsFetched","relatedActiveTab","relatedLoading","purchaseDetailData","relatedFetched","deliveryNo","receiptPurchaseNos","relatedTabs","productSpanMethod","fetchTags","fetchLogistics","fetchPurchaseDetail","handleTabChange","poNo","wmsDocDetailComponents","ReceiptOrderDetailView","QcOrderDetailView","InboundOrderDetailView","PutawayOrderDetailView","DeliveryOrderDetailView","DeliveryDocDetailView","TransferOrderDetailView","WorkOrderDetailView","AbnormalOrderDetailView","PaymentRequestDetailView","ReturnOrderDetailView","CostExpenseDetailView","ReceiptVoucherDetailView","PurchaseOrderDetailView","PurchasePlanDetailView","PurchaseContractDetailView","deepTransformValue","transformer","toSnakeCase","obj","excludeKeys","newValue","toCamelCase","_","char","pick","keys","omit","deepClone","cloned","filterEmpty","deep","filtered","flatten","prefix","separator","newKey","unflatten","toTableColumns","unwrapPayload","isAllStatus","isAllStatusTab","resolveListStatusParam","toTabName","getAllTabName","allTab","syncActiveTabIfAll","normalizeStatusKey","buildStatusCountLookup","legacy","byStatusMap","byNameMap","sumCount","statusKey","buildFallbackStatusTabs","unwrapStatusCountList","mapStatusCountToTabs","all","FONT_FAMILY","HEADER_FILL_DEFAULT","BORDER_COLOR","thinBorder","displayWidth","width","ch","exportStyledExcel","fileName","sheetName","Excel","sheet","header","explicit","headerRow","buffer","blob","link","getComponentImport","componentPath","viewModules","normalizedPath","fullPath","buildRouteTree","routes","routeMap","rootRoutes","currentRoute","parentRoute","transformBackendRoutes","backendRoutes","projectName","routeConfig","component","findFirstAllowedRoute","routePermissions","layoutRouteName","isDescendantOfLayout","parentName","visited","a","b","NProgress","warn","logError","createRouterGuard","router","getRouteStore","getPermissionStore","getUserStore","isAuthenticated","homeComponent","notFoundComponent","publicPaths","loginRouteName","forbiddenRouteName","homeRouteName","homeRoutePath","homeTitle","noPermissionMessage","hasAddedRoutes","addDynamicRoutes","layoutRoute","childRoutes","redirectToHomeOrContinue","toName","to","_from","routeStore","permissionStore","JButton","JUploadImg","JSearchHeader","JListSearchHeader","JImportExcel","JAdminLayout","ProductDetailHost","JSearchInputDialog","JRemoteSelect","JProductSelectDialog","DocDetailHost"],"mappings":"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"}