eksik teklif taslagini acikca etiketle
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { AiJobHistory } from './AiJobHistory';
|
||||
import { validateOfferResponse } from '../services/offerResponse';
|
||||
import { draftReviewLabel, validateOfferResponse } from '../services/offerResponse';
|
||||
import React, { useState, useRef, useEffect } from 'react';
|
||||
import { MessageSquareText, ClipboardCheck, PenLine, Loader2, Copy, Upload } from 'lucide-react';
|
||||
import { getToken } from '../services/auth';
|
||||
@@ -180,8 +180,8 @@ const OfferAssistantSession = ({ tender }) => {
|
||||
{bolumler.length > 0 && <button type="button" onClick={() => kopyala(bolumler.map((b) => `${b.baslik}\n\n${b.icerik}`).join('\n\n\n'))} className="text-xs text-slate-600 border border-slate-200 rounded-lg px-2 py-1.5 flex items-center gap-1 hover:bg-slate-50"><Copy className="w-3.5 h-3.5" /> Tümünü kopyala</button>}
|
||||
</div>
|
||||
{bolumler.length > 0 && draftSource !== metin && <p role="alert" className="text-xs text-amber-800">Kaynak değişti. Aşağıdaki taslak önceki kaynakla üretildi; düzenlemeleriniz korundu. Yeni kaynakla karşılaştırın veya yeniden üretin.</p>}
|
||||
{draftReview && <div role="status" className="rounded-lg border border-amber-200 bg-amber-50 p-3 text-xs text-amber-900">
|
||||
<p className="font-semibold">{draftReview.status === 'partial' ? 'Kısmi taslak — bölüm kontrolü gerekli' : 'Taslak — kullanıcı kontrolü gerekli'}</p>
|
||||
{draftReview && <div role={draftReview.status === 'partial' ? 'alert' : 'status'} className="rounded-lg border border-amber-200 bg-amber-50 p-3 text-xs text-amber-900">
|
||||
<p className="font-semibold">{draftReviewLabel(draftReview)}</p>
|
||||
<p>{draftReview.note}</p>
|
||||
{draftReview.missingSections?.length > 0 && <p>Modelin tamamlamadığı bölümler: {draftReview.missingSections.join(', ')}. Aşağıdaki DOLDURUN alanlarını düzenleyin.</p>}
|
||||
{draftReview.extraSections?.length > 0 && <p>İstenen başlıklara eşleşmeyen ek bölümler: {draftReview.extraSections.join(', ')}.</p>}
|
||||
|
||||
@@ -2,6 +2,11 @@ const object = value => value !== null && typeof value === 'object' && !Array.is
|
||||
const text = value => typeof value === 'string';
|
||||
const texts = value => Array.isArray(value) && value.every(text);
|
||||
const optionalText = value => value == null || text(value);
|
||||
export function draftReviewLabel(review) {
|
||||
return review?.status === 'partial'
|
||||
? 'EKSİK TASLAK — TEKLİF OLARAK KULLANILAMAZ'
|
||||
: 'Taslak — kullanıcı kontrolü gerekli';
|
||||
}
|
||||
export function validateOfferResponse(url, data) {
|
||||
let valid = object(data) && data.success === true;
|
||||
if (valid && url === '/api/ai/belge-sor') {
|
||||
|
||||
Reference in New Issue
Block a user