diff --git a/web/src/views/goauto/pdd-products/PddProductDetailDrawer.vue b/web/src/views/goauto/pdd-products/PddProductDetailDrawer.vue index d7316b3..a650bff 100644 --- a/web/src/views/goauto/pdd-products/PddProductDetailDrawer.vue +++ b/web/src/views/goauto/pdd-products/PddProductDetailDrawer.vue @@ -91,7 +91,7 @@ export default { } }, computed: { - canPurchase() { const roles = this.$store.getters.roles || []; return roles.includes('admin') || roles.includes('purchaser') }, + canPurchase() { const roles = this.$store.getters.roles || []; return roles.includes('admin') || roles.includes('purchaser') || roles.includes('after_sales') }, relatedPurchaseCandidates() { return this.related.selected.filter(row => this.isRelatedPurchaseCandidate(row)) }, stockColorOptions() { return this.stockSpecValues('color').filter(item => item.priceCent !== null && item.priceCent !== undefined && item.priceCent >= 0) }, stockSizeOptions() { return this.stockSpecValues('size') }, diff --git a/web/src/views/goauto/syb-products/index.vue b/web/src/views/goauto/syb-products/index.vue index a05daf9..454997d 100644 --- a/web/src/views/goauto/syb-products/index.vue +++ b/web/src/views/goauto/syb-products/index.vue @@ -264,7 +264,7 @@ export default { computed: { purchaseDeviceUnavailable() { return !!this.purchaseDialog.deviceId && !this.purchaseDevices.some(device => device.id === this.purchaseDialog.deviceId) }, purchaseImageSearchLinkedCount() { return this.purchaseDialog.items.filter(item => item.imageSearchLinked).length }, - canPurchase() { const roles = this.$store.getters.roles || []; return roles.includes('admin') || roles.includes('purchaser') }, + canPurchase() { const roles = this.$store.getters.roles || []; return roles.includes('admin') || roles.includes('purchaser') || roles.includes('after_sales') }, processStageOptions() { return [{ value: 'manual_action', label: '待人工处理' }, { value: 'pdd_unlinked', label: '未关联 PDD' }, { value: 'pdd_pending', label: 'PDD 待采集' }, { value: 'pdd_collecting', label: 'PDD 采集中' }, { value: 'pdd_collection_failed', label: 'PDD 采集失败' }, { value: 'color_mapping', label: '规格待匹配' }, { value: 'purchase_ready', label: '可创建采购' }, { value: 'task_created', label: '已创建任务' }, { value: 'purchase_succeeded', label: '采购成功' }, { value: 'order_review', label: '待人工核对' }] }, aiMatchCandidates() { return this.selectedProducts.filter(row => this.purchaseReady(row).aiMatchEligible === true) }, aiMatchButtonReason() { @@ -641,4 +641,3 @@ export default { @media(max-width:1280px){.search-form{flex-wrap:wrap}} @media(max-width:900px){.split{grid-template-columns:1fr}} - diff --git a/web/src/views/goauto/syb-sync-runs/index.vue b/web/src/views/goauto/syb-sync-runs/index.vue index 845e413..6b70031 100644 --- a/web/src/views/goauto/syb-sync-runs/index.vue +++ b/web/src/views/goauto/syb-sync-runs/index.vue @@ -89,7 +89,7 @@ export default { } }, computed: { - canStartSync() { return (this.$store.getters.roles || []).some(role => role === 'admin' || role === 'purchaser') }, + canStartSync() { return (this.$store.getters.roles || []).some(role => role === 'admin' || role === 'purchaser' || role === 'after_sales') }, hasRunningSync() { return this.items.some(item => item.status === 'running') } }, created() { this.load().then(() => { const id = Number(this.$route.query.runId); if (id > 0) this.openDetail(id) }) }, diff --git a/web/src/views/goauto/yeeke-sync-runs/index.vue b/web/src/views/goauto/yeeke-sync-runs/index.vue index 3b96eb3..4eedeb7 100644 --- a/web/src/views/goauto/yeeke-sync-runs/index.vue +++ b/web/src/views/goauto/yeeke-sync-runs/index.vue @@ -69,7 +69,7 @@ export default { } }, computed: { - canSync() { return (this.$store.getters.roles || []).some(role => role === 'admin' || role === 'purchaser') }, + canSync() { return (this.$store.getters.roles || []).some(role => role === 'admin' || role === 'purchaser' || role === 'after_sales') }, hasRunningSync() { return this.items.some(item => item.status === 'running') } }, created() { this.load() },