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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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","install"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","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","install"],"mappings":"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"}