16 Commits

Author SHA1 Message Date
caoxiaozhu
8caaaa5bbc fix(data-process): 恢复提前中断的重新生成任务 2026-07-27 11:07:18 +08:00
caoxiaozhu
3f5fedb9ed build(frontend): 更新重新生成流程构建 2026-07-27 10:43:53 +08:00
caoxiaozhu
53844a3a09 fix(frontend): 保持重新生成退出前详情 2026-07-27 10:43:48 +08:00
caoxiaozhu
53014bb381 fix(data-process): 延迟重新生成破坏性变更 2026-07-27 10:43:42 +08:00
caoxiaozhu
03bd0b6d03 build(frontend): 更新数据任务详情构建 2026-07-27 10:03:58 +08:00
caoxiaozhu
b4927a8952 fix(frontend): 对齐数据任务详情状态 2026-07-27 10:03:52 +08:00
caoxiaozhu
b14b2ecf22 fix(data-process): 修正任务详情数据契约 2026-07-27 10:03:46 +08:00
caoxiaozhu
42c0e4f5c2 build(frontend): 更新数据任务列表构建 2026-07-27 09:50:33 +08:00
caoxiaozhu
88a82ed771 feat(frontend): 完善数据任务数量与状态 2026-07-27 09:50:26 +08:00
caoxiaozhu
895983ac20 feat(data-process): 返回任务文档数量 2026-07-27 09:50:19 +08:00
caoxiaozhu
680fa905f8 build(frontend): 更新数据集保留提示构建 2026-07-27 09:39:29 +08:00
caoxiaozhu
ce0f908d20 fix(frontend): 标明重新生成前的数据集状态 2026-07-27 09:39:23 +08:00
caoxiaozhu
e4ea1f168c fix(data-process): 保留重新生成前的已发布数据集 2026-07-27 09:39:19 +08:00
caoxiaozhu
915f994c45 build(frontend): 更新五十条生成上限构建 2026-07-27 09:12:03 +08:00
caoxiaozhu
762f866175 feat(data-process): 放宽问答生成数量上限 2026-07-27 09:11:58 +08:00
caoxiaozhu
9428c6b785 feat(data-process): 支持单项生成五十条数据 2026-07-27 09:11:51 +08:00
156 changed files with 2108 additions and 483 deletions

View File

@@ -715,8 +715,12 @@ def task_detail(
store: DataProcessStore = Depends(get_data_process_store), store: DataProcessStore = Depends(get_data_process_store),
) -> dict[str, Any]: ) -> dict[str, Any]:
with api_errors(): with api_errors():
# 兼容旧版曾在第五步前清空结果的异常任务;严格特征匹配且幂等。
store.recover_legacy_aborted_regeneration(task_id)
task = store.get_task(task_id) task = store.get_task(task_id)
task["source_files"] = store.list_source_files(task_id) source_files = store.list_source_files(task_id)
task["source_files"] = source_files
task["source_file_count"] = len(source_files)
return ok(task) return ok(task)

View File

@@ -34,6 +34,8 @@ from openpyxl.utils.cell import range_boundaries
from pptx import Presentation from pptx import Presentation
from pypdf import PdfReader from pypdf import PdfReader
from app.modules.data_process.constants import MAX_QA_PAIRS_PER_ITEM
TextFormat = Literal[ TextFormat = Literal[
"json", "json",
"jsonl", "jsonl",
@@ -2659,8 +2661,10 @@ def generate_standard_records(
LLM 响应解析后的统一落库步骤。 LLM 响应解析后的统一落库步骤。
""" """
if not 1 <= qa_pairs_per_item <= 5: if not 1 <= qa_pairs_per_item <= MAX_QA_PAIRS_PER_ITEM:
raise ValueError("qa_pairs_per_item must be in [1, 5]") raise ValueError(
f"qa_pairs_per_item must be in [1, {MAX_QA_PAIRS_PER_ITEM}]"
)
prefixes = ( prefixes = (
"请结合实际情况说明:", "请结合实际情况说明:",
"请用通俗易懂的方式说明:", "请用通俗易懂的方式说明:",
@@ -2677,7 +2681,13 @@ def generate_standard_records(
variant_instruction = instruction variant_instruction = instruction
if variant_index: if variant_index:
if semantic_enrichment: if semantic_enrichment:
variant_instruction = f"{prefixes[variant_index]}{instruction}" prefix = prefixes[variant_index % len(prefixes)]
if variant_index >= len(prefixes):
prefix = (
f"{prefix.removesuffix('')}"
f"(问法 {variant_index + 1}"
)
variant_instruction = f"{prefix}{instruction}"
else: else:
variant_instruction = f"{instruction}(问法 {variant_index + 1})" variant_instruction = f"{instruction}(问法 {variant_index + 1})"
raw_id = f"{preview_id}:{variant_index + 1}" raw_id = f"{preview_id}:{variant_index + 1}"

View File

@@ -0,0 +1,7 @@
"""数据处理模块的共享限制。"""
MAX_QA_PAIRS_PER_ITEM = 50
MODEL_GENERATION_BATCH_SIZE = 10
__all__ = ["MAX_QA_PAIRS_PER_ITEM", "MODEL_GENERATION_BATCH_SIZE"]

View File

@@ -12,6 +12,10 @@ from urllib.parse import urlsplit, urlunsplit
import httpx import httpx
from app.modules.data_process.algorithms import normalize_text, stable_split_assignments from app.modules.data_process.algorithms import normalize_text, stable_split_assignments
from app.modules.data_process.constants import (
MAX_QA_PAIRS_PER_ITEM,
MODEL_GENERATION_BATCH_SIZE,
)
class ModelGenerationError(ValueError): class ModelGenerationError(ValueError):
@@ -96,10 +100,20 @@ def _result_items(payload: Any) -> list[Mapping[str, Any]]:
return items return items
def _prompt_messages(prompt: str, content: str, count: int) -> list[dict[str, str]]: def _prompt_messages(
prompt: str,
content: str,
count: int,
*,
start_index: int,
total_count: int,
) -> list[dict[str, str]]:
end_index = start_index + count - 1
schema_instruction = ( schema_instruction = (
f"必须只返回 JSON 对象,格式为 {{\"items\":[{{\"instruction\":\"...\"," f"必须只返回 JSON 对象,格式为 {{\"items\":[{{\"instruction\":\"...\","
f"\"input\":\"...\",\"output\":\"...\"}}]}}items 必须包含 {count} 条。" f"\"input\":\"...\",\"output\":\"...\"}}]}}items 必须包含 {count} 条。"
f"这是总计 {total_count} 条中的第 {start_index}-{end_index} 条,"
"各条必须使用不同的提问角度和表述,避免重复。"
"instruction 和 output 不得为空,不要输出 Markdown 代码围栏或分析过程。" "instruction 和 output 不得为空,不要输出 Markdown 代码围栏或分析过程。"
) )
base_prompt = ( base_prompt = (
@@ -131,11 +145,14 @@ def generate_model_records(
) -> list[dict[str, Any]]: ) -> list[dict[str, Any]]:
"""调用 OpenAI 兼容接口,将预览切片生成标准训练记录。 """调用 OpenAI 兼容接口,将预览切片生成标准训练记录。
单条调用失败会产生可人工修复的 invalid 结果,不会丢弃整批任务。 每个切片按安全批次调用模型;失败批次会产生一条可人工修复的
invalid 结果,已经成功的批次不会丢失。
""" """
if not 1 <= qa_pairs_per_item <= 5: if not 1 <= qa_pairs_per_item <= MAX_QA_PAIRS_PER_ITEM:
raise ModelGenerationError("qa_pairs_per_item must be in [1, 5]") raise ModelGenerationError(
f"qa_pairs_per_item must be in [1, {MAX_QA_PAIRS_PER_ITEM}]"
)
endpoint = chat_completions_url(str(model.get("api_url") or "")) endpoint = chat_completions_url(str(model.get("api_url") or ""))
model_name = str(model.get("online_model_name") or model.get("name") or "").strip() model_name = str(model.get("online_model_name") or model.get("name") or "").strip()
if not model_name: if not model_name:
@@ -161,12 +178,21 @@ def generate_model_records(
content = normalize_text( content = normalize_text(
str(item.get("edited_content") or item.get("original_content") or "") str(item.get("edited_content") or item.get("original_content") or "")
) )
for batch_offset in range(0, qa_pairs_per_item, MODEL_GENERATION_BATCH_SIZE):
batch_count = min(
MODEL_GENERATION_BATCH_SIZE,
qa_pairs_per_item - batch_offset,
)
batch_start = batch_offset + 1
batch_end = batch_offset + batch_count
request_payload: dict[str, Any] = { request_payload: dict[str, Any] = {
"model": model_name, "model": model_name,
"messages": _prompt_messages( "messages": _prompt_messages(
str(config.get("generation_prompt") or ""), str(config.get("generation_prompt") or ""),
content, content,
qa_pairs_per_item, batch_count,
start_index=batch_start,
total_count=qa_pairs_per_item,
), ),
"temperature": temperature, "temperature": temperature,
"max_tokens": max_tokens, "max_tokens": max_tokens,
@@ -178,27 +204,51 @@ def generate_model_records(
generated_items: list[Mapping[str, Any]] | None = None generated_items: list[Mapping[str, Any]] | None = None
for _ in range(retries + 1): for _ in range(retries + 1):
try: try:
response = http_client.post(endpoint, headers=headers, json=request_payload) response = http_client.post(
endpoint,
headers=headers,
json=request_payload,
)
response.raise_for_status() response.raise_for_status()
body = response.json() body = response.json()
if not isinstance(body, Mapping): if not isinstance(body, Mapping):
raise ModelGenerationError("model response body must be a JSON object") raise ModelGenerationError(
generated_items = _result_items(_json_payload(_message_content(body))) "model response body must be a JSON object"
)
candidate_items = _result_items(
_json_payload(_message_content(body))
)
if len(candidate_items) < batch_count:
raise ModelGenerationError(
"model response contains fewer result objects than requested: "
f"expected {batch_count}, got {len(candidate_items)}"
)
generated_items = candidate_items
break break
except (httpx.HTTPError, json.JSONDecodeError, ModelGenerationError) as exc: except (
httpx.HTTPError,
json.JSONDecodeError,
ModelGenerationError,
) as exc:
last_error = exc last_error = exc
if generated_items is None: if generated_items is None:
error_message = str(last_error or "model generation failed")[:2000] error_message = str(last_error or "model generation failed")[:2000]
result_id = f"result_{hashlib.sha256(f'{preview_id}:error'.encode()).hexdigest()[:16]}" failure_instruction = (
f"模型生成失败,请人工补充(第 {batch_start}-{batch_end} 条)"
)
result_id = (
"result_"
f"{hashlib.sha256(f'{preview_id}:error:{batch_start}'.encode()).hexdigest()[:16]}"
)
results.append( results.append(
{ {
"id": result_id, "id": result_id,
"preview_item_id": preview_id, "preview_item_id": preview_id,
"instruction": "模型生成失败,请人工补充", "instruction": failure_instruction,
"input": content, "input": content,
"output": "", "output": "",
"original_instruction": "模型生成失败,请人工补充", "original_instruction": failure_instruction,
"original_input": content, "original_input": content,
"original_output": "", "original_output": "",
"status": "invalid", "status": "invalid",
@@ -206,13 +256,16 @@ def generate_model_records(
"split": "train", "split": "train",
} }
) )
if on_progress:
on_progress(item_index + 1, total_items)
continue continue
for variant_index, value in enumerate(generated_items[:qa_pairs_per_item]): for batch_index, value in enumerate(generated_items[:batch_count]):
instruction = normalize_text(str(value.get("instruction") or value.get("question") or "")) variant_index = batch_offset + batch_index
input_text = normalize_text(str(value.get("input") or value.get("context") or "")) instruction = normalize_text(
str(value.get("instruction") or value.get("question") or "")
)
input_text = normalize_text(
str(value.get("input") or value.get("context") or "")
)
output = normalize_text( output = normalize_text(
str( str(
value.get("output") value.get("output")
@@ -222,7 +275,9 @@ def generate_model_records(
) )
) )
raw_id = f"{preview_id}:{variant_index + 1}:{instruction}:{output}" raw_id = f"{preview_id}:{variant_index + 1}:{instruction}:{output}"
result_id = f"result_{hashlib.sha256(raw_id.encode()).hexdigest()[:16]}" result_id = (
f"result_{hashlib.sha256(raw_id.encode()).hexdigest()[:16]}"
)
valid = bool(instruction and output) valid = bool(instruction and output)
results.append( results.append(
{ {
@@ -235,7 +290,11 @@ def generate_model_records(
"original_input": input_text, "original_input": input_text,
"original_output": output, "original_output": output,
"status": "valid" if valid else "invalid", "status": "valid" if valid else "invalid",
"error": None if valid else "model result is missing instruction or output", "error": (
None
if valid
else "model result is missing instruction or output"
),
"split": "train", "split": "train",
} }
) )

View File

@@ -41,6 +41,7 @@ _UNSTRUCTURED_PREVIEW_DEFAULTS: dict[str, Any] = {
"preserve_code_blocks": True, "preserve_code_blocks": True,
"preserve_lists": True, "preserve_lists": True,
} }
_REGENERATION_MARKER_KEY = "_regeneration_prepared"
class DataProcessStoreError(RuntimeError): class DataProcessStoreError(RuntimeError):
@@ -129,6 +130,34 @@ def _preview_config_changed(
) )
def _regeneration_marker(task: dict[str, Any]) -> dict[str, Any] | None:
config = task.get("config")
if not isinstance(config, dict):
return None
marker = config.get(_REGENERATION_MARKER_KEY)
if not isinstance(marker, dict) or marker.get("prepared") is not True:
return None
return marker
def _is_regeneration_prepared(task: dict[str, Any]) -> bool:
return _regeneration_marker(task) is not None
def _public_task(item: dict[str, Any] | None) -> dict[str, Any] | None:
"""从 API 任务快照中移除服务端内部重新生成标记。"""
if item is None:
return None
public = dict(item)
config = public.get("config")
if isinstance(config, dict) and _REGENERATION_MARKER_KEY in config:
public["config"] = {
key: value for key, value in config.items() if key != _REGENERATION_MARKER_KEY
}
return public
def _serialize_value(value: Any) -> Any: def _serialize_value(value: Any) -> Any:
if isinstance(value, (datetime, date)): if isinstance(value, (datetime, date)):
return value.isoformat().replace("+00:00", "Z") return value.isoformat().replace("+00:00", "Z")
@@ -174,6 +203,7 @@ def _decode_row(row: dict[str, Any] | None) -> dict[str, Any] | None:
"metadata": {}, "metadata": {},
"quality_score": {}, "quality_score": {},
"versions": [], "versions": [],
"output_datasets": [],
}.items(): }.items():
if key in item: if key in item:
item[key] = _json_value(item[key], default) item[key] = _json_value(item[key], default)
@@ -219,40 +249,45 @@ class DataProcessStore:
tenant_id: str | None = None, tenant_id: str | None = None,
project_id: str | None = None, project_id: str | None = None,
) -> dict[str, Any]: ) -> dict[str, Any]:
clauses = ["deleted_at IS NULL"] clauses = ["task.deleted_at IS NULL"]
params: list[Any] = [] params: list[Any] = []
if keyword: if keyword:
clauses.append("(name ILIKE %s OR COALESCE(description, '') ILIKE %s)") clauses.append("(task.name ILIKE %s OR COALESCE(task.description, '') ILIKE %s)")
pattern = f"%{keyword.strip()}%" pattern = f"%{keyword.strip()}%"
params.extend([pattern, pattern]) params.extend([pattern, pattern])
if status: if status:
clauses.append("status = %s") clauses.append("task.status = %s")
params.append(status) params.append(status)
if process_type: if process_type:
clauses.append("process_type = %s") clauses.append("task.process_type = %s")
params.append(process_type) params.append(process_type)
if tenant_id: if tenant_id:
clauses.append("tenant_id = %s") clauses.append("task.tenant_id = %s")
params.append(tenant_id) params.append(tenant_id)
if project_id: if project_id:
clauses.append("project_id = %s") clauses.append("task.project_id = %s")
params.append(project_id) params.append(project_id)
where = " AND ".join(clauses) where = " AND ".join(clauses)
with self.connect() as conn: with self.connect() as conn:
total = conn.execute( total = conn.execute(
f"SELECT COUNT(*) AS count FROM data_process_tasks WHERE {where}", params f"SELECT COUNT(*) AS count FROM data_process_tasks task WHERE {where}",
params,
).fetchone()["count"] ).fetchone()["count"]
rows = conn.execute( rows = conn.execute(
f""" f"""
SELECT * FROM data_process_tasks SELECT task.*,
(SELECT COUNT(*) FROM data_process_source_files source_file
WHERE source_file.task_id=task.id
AND source_file.deleted_at IS NULL) AS source_file_count
FROM data_process_tasks task
WHERE {where} WHERE {where}
ORDER BY created_at DESC, id DESC ORDER BY task.created_at DESC, task.id DESC
LIMIT %s OFFSET %s LIMIT %s OFFSET %s
""", """,
[*params, page_size, (page - 1) * page_size], [*params, page_size, (page - 1) * page_size],
).fetchall() ).fetchall()
return { return {
"items": [_decode_row(row) for row in rows], "items": [_public_task(_decode_row(row)) for row in rows],
"total": int(total), "total": int(total),
"page": page, "page": page,
"page_size": page_size, "page_size": page_size,
@@ -278,7 +313,13 @@ class DataProcessStore:
payload.get("description") or "", payload.get("description") or "",
payload["process_type"], payload["process_type"],
payload.get("source_dataset_id"), payload.get("source_dataset_id"),
json_dumps(payload.get("config") or {}), json_dumps(
{
key: value
for key, value in (payload.get("config") or {}).items()
if key != _REGENERATION_MARKER_KEY
}
),
payload.get("tenant_id"), payload.get("tenant_id"),
payload.get("project_id"), payload.get("project_id"),
payload.get("owner_id"), payload.get("owner_id"),
@@ -290,7 +331,7 @@ class DataProcessStore:
).fetchone() ).fetchone()
except psycopg.errors.UniqueViolation as exc: except psycopg.errors.UniqueViolation as exc:
raise ConflictError("data process task name already exists") from exc raise ConflictError("data process task name already exists") from exc
return _decode_row(row) or {} return _public_task(_decode_row(row)) or {}
def get_task(self, task_id: str, *, for_update: bool = False) -> dict[str, Any]: def get_task(self, task_id: str, *, for_update: bool = False) -> dict[str, Any]:
lock = " FOR UPDATE" if for_update else "" lock = " FOR UPDATE" if for_update else ""
@@ -314,11 +355,21 @@ class DataProcessStore:
'name', dataset.name, 'name', dataset.name,
'type', dataset.type, 'type', dataset.type,
'count', dataset.count, 'count', dataset.count,
'dataset_split', dataset.metadata::jsonb->>'dataset_split' 'dataset_split', CASE dataset.type
WHEN 'train' THEN 'train'
WHEN 'val' THEN 'validation'
WHEN 'test' THEN 'test'
ELSE NULL
END
) ORDER BY CASE dataset.type ) ORDER BY CASE dataset.type
WHEN 'train' THEN 1 WHEN 'val' THEN 2 WHEN 'test' THEN 3 ELSE 4 END), '[]'::json) WHEN 'train' THEN 1 WHEN 'val' THEN 2 WHEN 'test' THEN 3 ELSE 4 END), '[]'::json)
FROM datasets dataset FROM datasets dataset
WHERE dataset.source_task_id=task.id AND dataset.source='task') WHERE dataset.source='task'
AND dataset.deleted_at IS NULL
AND (
dataset.source_task_id=task.id
OR (dataset.source_task_id IS NULL AND dataset.task_id=task.id)
))
AS output_datasets, AS output_datasets,
CASE CASE
WHEN task.started_at IS NOT NULL AND task.completed_at IS NOT NULL WHEN task.started_at IS NOT NULL AND task.completed_at IS NOT NULL
@@ -332,7 +383,7 @@ class DataProcessStore:
).fetchone() ).fetchone()
if not row: if not row:
raise NotFoundError("data process task not found") raise NotFoundError("data process task not found")
return _decode_row(row) or {} return _public_task(_decode_row(row)) or {}
def _task_in_connection( def _task_in_connection(
self, self,
@@ -354,9 +405,176 @@ class DataProcessStore:
def _ensure_editable(task: dict[str, Any]) -> None: def _ensure_editable(task: dict[str, Any]) -> None:
if task["status"] not in EDITABLE_STATUSES: if task["status"] not in EDITABLE_STATUSES:
raise InvalidStateError(f"task cannot be edited while status is {task['status']}") raise InvalidStateError(f"task cannot be edited while status is {task['status']}")
if task.get("output_dataset_id"): if task.get("output_dataset_id") and not _is_regeneration_prepared(task):
raise InvalidStateError("published task cannot be edited") raise InvalidStateError("published task cannot be edited")
def recover_legacy_aborted_regeneration(self, task_id: str) -> dict[str, Any]:
"""恢复旧版在真正开始生成前误删的上一轮结果。
旧实现会在 ``POST /regenerate`` 时立即把已发布任务置为 pending、
清空结果并解除输出指针。三个已发布数据集仍是独立完整产物,因此只在
这个特征完全匹配时,使用其记录恢复结果和任务状态。该操作幂等,不会
触碰正常的新建待生成任务或已经开始的新一轮生成。
"""
with self.connect() as conn:
task = self._task_in_connection(conn, task_id, for_update=True)
if (
task.get("status") != "pending"
or task.get("generation_run_id")
or task.get("output_dataset_id")
or int(task.get("output_count") or 0) != 0
):
return {"recovered": False, "result_count": 0}
result_count = int(
(
conn.execute(
"SELECT COUNT(*) AS count FROM data_process_results WHERE task_id=%s",
(task_id,),
).fetchone()
or {}
).get("count")
or 0
)
if result_count:
return {"recovered": False, "result_count": result_count}
datasets = conn.execute(
"""
SELECT id, type, count, created_at
FROM datasets
WHERE source='task' AND deleted_at IS NULL
AND (
source_task_id=%s
OR (source_task_id IS NULL AND task_id=%s)
)
ORDER BY CASE type
WHEN 'train' THEN 1 WHEN 'val' THEN 2 WHEN 'test' THEN 3 ELSE 4
END, created_at, id
""",
(task_id, task_id),
).fetchall()
train_dataset = next(
(dataset for dataset in datasets if dataset.get("type") == "train"),
None,
)
if not train_dataset:
return {"recovered": False, "result_count": 0}
dataset_ids = [str(dataset["id"]) for dataset in datasets]
records = conn.execute(
"""
SELECT id, dataset_id, line_no, split, instruction, input, output,
raw, status, source_result_id, preview_item_id, created_at
FROM dataset_records
WHERE dataset_id = ANY(%s)
ORDER BY created_at, dataset_id, line_no NULLS LAST, id
""",
(dataset_ids,),
).fetchall()
if not records:
return {"recovered": False, "result_count": 0}
preview_rows = conn.execute(
"SELECT id FROM data_process_preview_items WHERE task_id=%s",
(task_id,),
).fetchall()
preview_ids = {str(row["id"]) for row in preview_rows}
used_result_ids: set[str] = set()
recovered_count = 0
for record in records:
raw = _json_value(record.get("raw"), {})
raw = raw if isinstance(raw, dict) else {}
candidate_id = str(
record.get("source_result_id")
or raw.get("source_result_id")
or ""
)
result_id = (
candidate_id
if candidate_id and candidate_id not in used_result_ids
else new_id("dpr")
)
used_result_ids.add(result_id)
candidate_preview_id = str(
record.get("preview_item_id")
or raw.get("preview_item_id")
or ""
)
preview_item_id = (
candidate_preview_id if candidate_preview_id in preview_ids else None
)
instruction = str(record.get("instruction") or raw.get("instruction") or "")
input_text = str(record.get("input") or raw.get("input") or "")
output = str(record.get("output") or raw.get("output") or "")
split = str(record.get("split") or raw.get("split") or "") or None
status = str(record.get("status") or "valid")
if status not in {"valid", "modified", "invalid"}:
status = "valid"
created_at = record.get("created_at") or utcnow()
conn.execute(
"""
INSERT INTO data_process_results
(id, task_id, preview_item_id, instruction, input, output,
original_instruction, original_input, original_output, status,
error, split, quality_score, created_at, updated_at)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s,
NULL, %s, '{}', %s, %s)
""",
(
result_id,
task_id,
preview_item_id,
instruction,
input_text,
output,
instruction,
input_text,
output,
status,
split,
created_at,
created_at,
),
)
conn.execute(
"""
UPDATE dataset_records
SET source_result_id=%s, preview_item_id=%s
WHERE id=%s
""",
(result_id, preview_item_id, record["id"]),
)
recovered_count += 1
now = utcnow()
published_at = max(
(dataset.get("created_at") for dataset in datasets if dataset.get("created_at")),
default=None,
)
conn.execute(
"""
UPDATE data_process_tasks
SET status='completed', progress=100, output_dataset_id=%s,
output_count=%s, filtered_count=0, duplicate_count=0,
error_count=(SELECT COUNT(*) FROM data_process_results
WHERE task_id=%s AND status='invalid'),
failure_reason=NULL, completed_at=COALESCE(completed_at, %s),
updated_at=%s
WHERE id=%s
""",
(
train_dataset["id"],
recovered_count,
task_id,
published_at,
now,
task_id,
),
)
return {"recovered": True, "result_count": recovered_count}
def update_task(self, task_id: str, payload: dict[str, Any]) -> dict[str, Any]: def update_task(self, task_id: str, payload: dict[str, Any]) -> dict[str, Any]:
allowed = { allowed = {
"name", "name",
@@ -365,14 +583,30 @@ class DataProcessStore:
"source_dataset_id", "source_dataset_id",
} }
values: dict[str, Any] = {key: value for key, value in payload.items() if key in allowed} values: dict[str, Any] = {key: value for key, value in payload.items() if key in allowed}
if payload.get("config") is not None: if not values and payload.get("config") is None:
values["config"] = json_dumps(payload["config"])
if not values:
return self.get_task(task_id) return self.get_task(task_id)
try: try:
with self.connect() as conn: with self.connect() as conn:
task = self._task_in_connection(conn, task_id, for_update=True) task = self._task_in_connection(conn, task_id, for_update=True)
self._ensure_editable(task) self._ensure_editable(task)
regeneration_prepared = _is_regeneration_prepared(task)
if regeneration_prepared and any(
key in payload and payload.get(key) != task.get(key)
for key in ("process_type", "source_dataset_id")
):
raise InvalidStateError(
"process type and source dataset cannot change during regeneration"
)
if payload.get("config") is not None:
next_config = {
key: value
for key, value in payload["config"].items()
if key != _REGENERATION_MARKER_KEY
}
current_marker = _regeneration_marker(task)
if current_marker:
next_config[_REGENERATION_MARKER_KEY] = current_marker
values["config"] = json_dumps(next_config)
invalidates_results = ( invalidates_results = (
("config" in payload and payload.get("config") != task.get("config")) ("config" in payload and payload.get("config") != task.get("config"))
or ( or (
@@ -384,7 +618,7 @@ class DataProcessStore:
and payload.get("source_dataset_id") != task.get("source_dataset_id") and payload.get("source_dataset_id") != task.get("source_dataset_id")
) )
) )
if invalidates_results: if invalidates_results and not regeneration_prepared:
values.update( values.update(
{ {
"status": "pending", "status": "pending",
@@ -424,20 +658,21 @@ class DataProcessStore:
).fetchone() ).fetchone()
except psycopg.errors.UniqueViolation as exc: except psycopg.errors.UniqueViolation as exc:
raise ConflictError("data process task name already exists") from exc raise ConflictError("data process task name already exists") from exc
return _decode_row(row) or {} return _public_task(_decode_row(row)) or {}
def prepare_regeneration( def prepare_regeneration(
self, self,
task_id: str, task_id: str,
payload: dict[str, Any], payload: dict[str, Any],
) -> dict[str, Any]: ) -> dict[str, Any]:
"""在一个事务中将已有任务恢复为可重新生成状态 """非破坏性地保存重新生成配置
已发布数据集是可被其他任务使用的独立产物,此处只解除当前任务的 准备阶段保留任务当前状态、结果、切片及已发布数据集。真正开始
输出指针,不删除数据集实体。用户完成新一轮生成后,可再次发布 生成时,才在同一事务内切换运行状态并清理上一轮结果。
以原子替换三个分割数据集的内容。
""" """
# 先修复曾被旧版 prepare 提前清空的任务,再建立新的非破坏性草稿标记。
self.recover_legacy_aborted_regeneration(task_id)
try: try:
with self.connect() as conn: with self.connect() as conn:
task = self._task_in_connection(conn, task_id, for_update=True) task = self._task_in_connection(conn, task_id, for_update=True)
@@ -454,54 +689,50 @@ class DataProcessStore:
current_config = dict(task.get("config") or {}) current_config = dict(task.get("config") or {})
next_config = dict(payload.get("config") or {}) next_config = dict(payload.get("config") or {})
next_config.pop(_REGENERATION_MARKER_KEY, None)
preview_invalidated = _preview_config_changed( preview_invalidated = _preview_config_changed(
process_type, process_type,
current_config, current_config,
next_config, next_config,
) )
now = utcnow()
next_config[_REGENERATION_MARKER_KEY] = {
"prepared": True,
"preview_invalidated": preview_invalidated,
"prepared_at": now,
}
# 002 迁移前发布的数据集只有 task_id。先补齐新关联字段保证
# 解除任务输出指针后,详情和后续重新发布仍能定位原来的三份数据集。
conn.execute(
"""
UPDATE datasets
SET source_task_id=%s, updated_at=%s
WHERE source='task' AND source_task_id IS NULL AND task_id=%s
AND deleted_at IS NULL
""",
(task_id, now, task_id),
)
published_row = conn.execute( published_row = conn.execute(
""" """
SELECT EXISTS( SELECT EXISTS(
SELECT 1 FROM datasets SELECT 1 FROM datasets
WHERE source_task_id=%s AND source='task' WHERE source='task' AND deleted_at IS NULL
AND (
source_task_id=%s
OR (source_task_id IS NULL AND task_id=%s)
)
) AS exists ) AS exists
""", """,
(task_id,), (task_id, task_id),
).fetchone() ).fetchone()
published_outputs_preserved = bool(task.get("output_dataset_id")) or bool( published_outputs_preserved = bool(task.get("output_dataset_id")) or bool(
published_row and published_row.get("exists") published_row and published_row.get("exists")
) )
# 删除顺序保证结果不再指向即将被替换的切片。
conn.execute(
"DELETE FROM data_process_results WHERE task_id=%s",
(task_id,),
)
if preview_invalidated:
conn.execute(
"DELETE FROM data_process_preview_items WHERE task_id=%s",
(task_id,),
)
preview_count = 0
else:
preview_row = conn.execute(
"""
SELECT COUNT(*) AS count FROM data_process_preview_items
WHERE task_id=%s
""",
(task_id,),
).fetchone()
preview_count = int((preview_row or {}).get("count") or 0)
now = utcnow()
row = conn.execute( row = conn.execute(
""" """
UPDATE data_process_tasks UPDATE data_process_tasks
SET name=%s, description=%s, config=%s, status='pending', progress=%s, SET name=%s, description=%s, config=%s, updated_at=%s
output_dataset_id=NULL, output_count=0, filtered_count=0,
duplicate_count=0, error_count=0, failure_reason=NULL,
generation_run_id=NULL, started_at=NULL, completed_at=NULL,
updated_at=%s
WHERE id=%s WHERE id=%s
RETURNING * RETURNING *
""", """,
@@ -509,7 +740,6 @@ class DataProcessStore:
payload["name"], payload["name"],
payload.get("description") or "", payload.get("description") or "",
json_dumps(next_config), json_dumps(next_config),
20 if preview_count else 0,
now, now,
task_id, task_id,
), ),
@@ -517,7 +747,7 @@ class DataProcessStore:
except psycopg.errors.UniqueViolation as exc: except psycopg.errors.UniqueViolation as exc:
raise ConflictError("data process task name already exists") from exc raise ConflictError("data process task name already exists") from exc
return { return {
"task": _decode_row(row) or {}, "task": _public_task(_decode_row(row)) or {},
"preview_invalidated": preview_invalidated, "preview_invalidated": preview_invalidated,
"published_outputs_preserved": published_outputs_preserved, "published_outputs_preserved": published_outputs_preserved,
} }
@@ -641,9 +871,6 @@ class DataProcessStore:
), ),
).fetchone() ).fetchone()
created.append(_decode_row(row) or {}) created.append(_decode_row(row) or {})
# 前端会只对本次新增的源文件构建预览,因此必须保留旧
# 文件的切片。任何源文件增加都会使旧生成结果失效。
conn.execute("DELETE FROM data_process_results WHERE task_id=%s", (task_id,))
preview_row = conn.execute( preview_row = conn.execute(
""" """
SELECT COUNT(*) AS count FROM data_process_preview_items SELECT COUNT(*) AS count FROM data_process_preview_items
@@ -652,12 +879,32 @@ class DataProcessStore:
(task_id,), (task_id,),
).fetchone() ).fetchone()
preview_count = int((preview_row or {}).get("count") or 0) preview_count = int((preview_row or {}).get("count") or 0)
if _is_regeneration_prepared(task):
conn.execute(
"""
UPDATE data_process_tasks
SET input_count=(
SELECT COALESCE(SUM(record_count), 0)
FROM data_process_source_files
WHERE task_id=%s AND deleted_at IS NULL
), updated_at=%s
WHERE id=%s
""",
(task_id, now, task_id),
)
else:
# 前端会只对本次新增的源文件构建预览,因此保留旧文件切片,
# 但普通未发布任务的旧生成结果已经不再有效。
conn.execute(
"DELETE FROM data_process_results WHERE task_id=%s", (task_id,)
)
conn.execute( conn.execute(
""" """
UPDATE data_process_tasks UPDATE data_process_tasks
SET status='pending', progress=%s, output_count=0, filtered_count=0, SET status='pending', progress=%s, output_count=0, filtered_count=0,
duplicate_count=0, error_count=0, failure_reason=NULL, duplicate_count=0, error_count=0, failure_reason=NULL,
generation_run_id=NULL, started_at=NULL, completed_at=NULL, input_count=( generation_run_id=NULL, started_at=NULL, completed_at=NULL,
input_count=(
SELECT COALESCE(SUM(record_count), 0) SELECT COALESCE(SUM(record_count), 0)
FROM data_process_source_files FROM data_process_source_files
WHERE task_id=%s AND deleted_at IS NULL WHERE task_id=%s AND deleted_at IS NULL
@@ -746,10 +993,26 @@ class DataProcessStore:
).fetchone() ).fetchone()
if not row: if not row:
raise NotFoundError("source file not found") raise NotFoundError("source file not found")
conn.execute("DELETE FROM data_process_results WHERE task_id=%s", (task_id,))
conn.execute( conn.execute(
"DELETE FROM data_process_preview_items WHERE source_file_id=%s", (file_id,) "DELETE FROM data_process_preview_items WHERE source_file_id=%s", (file_id,)
) )
now = utcnow()
if _is_regeneration_prepared(task):
conn.execute(
"""
UPDATE data_process_tasks
SET input_count=(SELECT COALESCE(SUM(record_count), 0)
FROM data_process_source_files
WHERE task_id=%s AND deleted_at IS NULL),
updated_at=%s
WHERE id=%s
""",
(task_id, now, task_id),
)
else:
conn.execute(
"DELETE FROM data_process_results WHERE task_id=%s", (task_id,)
)
conn.execute( conn.execute(
""" """
UPDATE data_process_tasks UPDATE data_process_tasks
@@ -761,7 +1024,7 @@ class DataProcessStore:
updated_at=%s updated_at=%s
WHERE id=%s WHERE id=%s
""", """,
(task_id, utcnow(), task_id), (task_id, now, task_id),
) )
def replace_preview_items( def replace_preview_items(
@@ -792,6 +1055,8 @@ class DataProcessStore:
with self.connect() as conn: with self.connect() as conn:
task = self._task_in_connection(conn, task_id, for_update=True) task = self._task_in_connection(conn, task_id, for_update=True)
self._ensure_editable(task) self._ensure_editable(task)
regeneration_prepared = _is_regeneration_prepared(task)
if not regeneration_prepared:
conn.execute("DELETE FROM data_process_results WHERE task_id=%s", (task_id,)) conn.execute("DELETE FROM data_process_results WHERE task_id=%s", (task_id,))
if selected_ids is None: if selected_ids is None:
conn.execute( conn.execute(
@@ -847,6 +1112,12 @@ class DataProcessStore:
), ),
).fetchone() ).fetchone()
created.append(_decode_row(row) or {}) created.append(_decode_row(row) or {})
if regeneration_prepared:
conn.execute(
"UPDATE data_process_tasks SET updated_at=%s WHERE id=%s",
(now, task_id),
)
else:
conn.execute( conn.execute(
""" """
UPDATE data_process_tasks UPDATE data_process_tasks
@@ -949,7 +1220,7 @@ class DataProcessStore:
now, now,
), ),
).fetchone() ).fetchone()
self._invalidate_results(conn, task_id, now) self._invalidate_results(conn, task, task_id, now)
return _decode_row(row) or {} return _decode_row(row) or {}
def update_preview_item( def update_preview_item(
@@ -996,7 +1267,7 @@ class DataProcessStore:
task_id, task_id,
), ),
).fetchone() ).fetchone()
self._invalidate_results(conn, task_id, now) self._invalidate_results(conn, task, task_id, now)
return _decode_row(row) or {} return _decode_row(row) or {}
def delete_preview_item(self, task_id: str, preview_id: str) -> None: def delete_preview_item(self, task_id: str, preview_id: str) -> None:
@@ -1009,14 +1280,21 @@ class DataProcessStore:
).fetchone() ).fetchone()
if not row: if not row:
raise NotFoundError("preview item not found") raise NotFoundError("preview item not found")
self._invalidate_results(conn, task_id, utcnow()) self._invalidate_results(conn, task, task_id, utcnow())
def _invalidate_results( def _invalidate_results(
self, self,
conn: psycopg.Connection[dict[str, Any]], conn: psycopg.Connection[dict[str, Any]],
task: dict[str, Any],
task_id: str, task_id: str,
now: str, now: str,
) -> None: ) -> None:
if _is_regeneration_prepared(task):
conn.execute(
"UPDATE data_process_tasks SET updated_at=%s WHERE id=%s",
(now, task_id),
)
return
conn.execute("DELETE FROM data_process_results WHERE task_id=%s", (task_id,)) conn.execute("DELETE FROM data_process_results WHERE task_id=%s", (task_id,))
conn.execute( conn.execute(
""" """
@@ -1034,7 +1312,8 @@ class DataProcessStore:
raise DataProcessStoreError("incremental generation is not supported") raise DataProcessStoreError("incremental generation is not supported")
with self.connect() as conn: with self.connect() as conn:
task = self._task_in_connection(conn, task_id, for_update=True) task = self._task_in_connection(conn, task_id, for_update=True)
if task.get("output_dataset_id"): regeneration_prepared = _is_regeneration_prepared(task)
if task.get("output_dataset_id") and not regeneration_prepared:
raise InvalidStateError("published task cannot be regenerated") raise InvalidStateError("published task cannot be regenerated")
if task["status"] == "running": if task["status"] == "running":
raise ConflictError("data process task is already running") raise ConflictError("data process task is already running")
@@ -1047,16 +1326,19 @@ class DataProcessStore:
conn.execute("DELETE FROM data_process_results WHERE task_id=%s", (task_id,)) conn.execute("DELETE FROM data_process_results WHERE task_id=%s", (task_id,))
now = utcnow() now = utcnow()
generation_run_id = new_id("dprun") generation_run_id = new_id("dprun")
next_config = dict(task.get("config") or {})
next_config.pop(_REGENERATION_MARKER_KEY, None)
row = conn.execute( row = conn.execute(
""" """
UPDATE data_process_tasks UPDATE data_process_tasks
SET status='running', progress=30, failure_reason=NULL, started_at=%s, SET config=%s, status='running', progress=30, failure_reason=NULL,
completed_at=NULL, filtered_count=0, duplicate_count=0, error_count=0, started_at=%s, completed_at=NULL, output_dataset_id=NULL,
output_count=0, filtered_count=0, duplicate_count=0, error_count=0,
generation_run_id=%s, updated_at=%s generation_run_id=%s, updated_at=%s
WHERE id=%s WHERE id=%s
RETURNING * RETURNING *
""", """,
(now, generation_run_id, now, task_id), (json_dumps(next_config), now, generation_run_id, now, task_id),
).fetchone() ).fetchone()
return _decode_row(row) or {} return _decode_row(row) or {}
@@ -1374,6 +1656,10 @@ class DataProcessStore:
"""按精确配额发布训练、验证、测试三个独立数据集。""" """按精确配额发布训练、验证、测试三个独立数据集。"""
with self.connect() as conn: with self.connect() as conn:
task = self._task_in_connection(conn, task_id, for_update=True) task = self._task_in_connection(conn, task_id, for_update=True)
if _is_regeneration_prepared(task):
raise InvalidStateError(
"regeneration must start and complete before publishing"
)
if task["status"] != "completed": if task["status"] != "completed":
raise InvalidStateError("only a completed task can be published") raise InvalidStateError("only a completed task can be published")
rows = conn.execute( rows = conn.execute(
@@ -1460,10 +1746,14 @@ class DataProcessStore:
existing_datasets = conn.execute( existing_datasets = conn.execute(
""" """
SELECT * FROM datasets SELECT * FROM datasets
WHERE source_task_id=%s AND source='task' WHERE source='task' AND deleted_at IS NULL
AND (
source_task_id=%s
OR (source_task_id IS NULL AND task_id=%s)
)
ORDER BY created_at, id ORDER BY created_at, id
""", """,
(task_id,), (task_id, task_id),
).fetchall() ).fetchall()
existing_by_split: dict[str, dict[str, Any]] = {} existing_by_split: dict[str, dict[str, Any]] = {}
primary_existing = None primary_existing = None

View File

@@ -5,6 +5,8 @@ from typing import Any, Literal
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
from app.modules.data_process.constants import MAX_QA_PAIRS_PER_ITEM
def _config_value(config: dict[str, Any], snake_name: str, camel_name: str, default: Any) -> Any: def _config_value(config: dict[str, Any], snake_name: str, camel_name: str, default: Any) -> Any:
if snake_name in config: if snake_name in config:
@@ -89,8 +91,14 @@ def _validate_process_config(config: dict[str, Any]) -> None:
pairs = _config_value(config, snake_name, camel_name, None) pairs = _config_value(config, snake_name, camel_name, None)
if pairs is None: if pairs is None:
continue continue
if isinstance(pairs, bool) or not isinstance(pairs, int) or not 1 <= pairs <= 5: if (
raise ValueError(f"{snake_name} must be an integer in [1, 5]") isinstance(pairs, bool)
or not isinstance(pairs, int)
or not 1 <= pairs <= MAX_QA_PAIRS_PER_ITEM
):
raise ValueError(
f"{snake_name} must be an integer in [1, {MAX_QA_PAIRS_PER_ITEM}]"
)
class DataProcessStatus(StrEnum): class DataProcessStatus(StrEnum):

View File

@@ -21,7 +21,6 @@ from app.modules.data_process.algorithms import (
detect_document_structure, detect_document_structure,
detect_pdf_document_noise, detect_pdf_document_noise,
detect_text_format, detect_text_format,
estimate_token_count,
extract_pdf_page_texts, extract_pdf_page_texts,
extract_structured_records, extract_structured_records,
generate_standard_records, generate_standard_records,
@@ -748,3 +747,26 @@ def test_generate_standard_records_supports_json_qa_and_stable_variants() -> Non
split={"train": 100, "validation": 0, "test": 0}, split={"train": 100, "validation": 0, "test": 0},
split_seed="task-1", split_seed="task-1",
) )
def test_generate_standard_records_supports_fifty_unique_semantic_variants() -> None:
records = generate_standard_records(
[{"id": "preview-50", "edited_content": "问:如何操作?\n答:按步骤操作。"}],
qa_pairs_per_item=50,
semantic_enrichment=True,
split={"train": 100, "validation": 0, "test": 0},
split_seed="task-50",
)
assert len(records) == 50
assert len({record["id"] for record in records}) == 50
assert len({record["instruction"] for record in records}) == 50
assert all(record["status"] == "valid" for record in records)
@pytest.mark.parametrize("qa_pairs_per_item", [0, 51])
def test_generate_standard_records_rejects_out_of_range_count(
qa_pairs_per_item: int,
) -> None:
with pytest.raises(ValueError, match=r"\[1, 50\]"):
generate_standard_records([], qa_pairs_per_item=qa_pairs_per_item)

View File

@@ -30,6 +30,7 @@ class FakeDataProcessStore:
self.previews: dict[str, list[dict[str, Any]]] = {} self.previews: dict[str, list[dict[str, Any]]] = {}
self.results: dict[str, list[dict[str, Any]]] = {} self.results: dict[str, list[dict[str, Any]]] = {}
self.datasets: dict[str, dict[str, Any]] = {} self.datasets: dict[str, dict[str, Any]] = {}
self.regeneration_prepared: set[str] = set()
self.sequence = 0 self.sequence = 0
def _id(self, prefix: str) -> str: def _id(self, prefix: str) -> str:
@@ -37,7 +38,13 @@ class FakeDataProcessStore:
return f"{prefix}_{self.sequence}" return f"{prefix}_{self.sequence}"
def list_tasks(self, *, page: int, page_size: int, **filters: Any) -> dict[str, Any]: def list_tasks(self, *, page: int, page_size: int, **filters: Any) -> dict[str, Any]:
items = list(self.tasks.values()) items = [
{
**item,
"source_file_count": len(self.sources.get(str(item["id"]), [])),
}
for item in self.tasks.values()
]
for field in ("status", "process_type", "tenant_id", "project_id"): for field in ("status", "process_type", "tenant_id", "project_id"):
if filters.get(field): if filters.get(field):
items = [item for item in items if item.get(field) == filters[field]] items = [item for item in items if item.get(field) == filters[field]]
@@ -75,7 +82,22 @@ class FakeDataProcessStore:
def get_task(self, task_id: str) -> dict[str, Any]: def get_task(self, task_id: str) -> dict[str, Any]:
if task_id not in self.tasks: if task_id not in self.tasks:
raise NotFoundError("data process task not found") raise NotFoundError("data process task not found")
return deepcopy(self.tasks[task_id]) task = deepcopy(self.tasks[task_id])
split_order = {"train": 0, "val": 1, "test": 2}
task["output_datasets"] = sorted(
(
deepcopy(dataset)
for dataset in self.datasets.values()
if dataset.get("source_task_id") == task_id
and dataset.get("deleted_at") is None
),
key=lambda dataset: split_order.get(str(dataset.get("type")), 3),
)
return task
def recover_legacy_aborted_regeneration(self, task_id: str) -> dict[str, Any]:
self.get_task(task_id)
return {"recovered": False, "result_count": 0}
def update_task(self, task_id: str, payload: dict[str, Any]) -> dict[str, Any]: def update_task(self, task_id: str, payload: dict[str, Any]) -> dict[str, Any]:
self.get_task(task_id) self.get_task(task_id)
@@ -92,27 +114,19 @@ class FakeDataProcessStore:
raise InvalidStateError("data process task was modified by another request") raise InvalidStateError("data process task was modified by another request")
if payload["process_type"] != task["process_type"]: if payload["process_type"] != task["process_type"]:
raise InvalidStateError("process_type cannot be changed during regeneration") raise InvalidStateError("process_type cannot be changed during regeneration")
published_outputs_preserved = bool(task.get("output_dataset_id")) published_outputs_preserved = bool(task.get("output_dataset_id")) or any(
self.results[task_id] = [] dataset.get("source_task_id") == task_id
for dataset in self.datasets.values()
)
task.update( task.update(
{ {
"name": payload["name"], "name": payload["name"],
"description": payload["description"], "description": payload["description"],
"config": deepcopy(payload["config"]), "config": deepcopy(payload["config"]),
"status": "pending",
"progress": 20,
"output_dataset_id": None,
"output_count": 0,
"filtered_count": 0,
"duplicate_count": 0,
"error_count": 0,
"failure_reason": None,
"generation_run_id": None,
"started_at": None,
"completed_at": None,
"updated_at": "2026-07-25T20:00:00Z", "updated_at": "2026-07-25T20:00:00Z",
} }
) )
self.regeneration_prepared.add(task_id)
return { return {
"task": deepcopy(task), "task": deepcopy(task),
"preview_invalidated": False, "preview_invalidated": False,
@@ -323,13 +337,19 @@ class FakeDataProcessStore:
def start_generation(self, task_id: str, *, replace_existing: bool) -> dict[str, Any]: def start_generation(self, task_id: str, *, replace_existing: bool) -> dict[str, Any]:
if not self.previews[task_id]: if not self.previews[task_id]:
raise InvalidStateError("preview must be built before generation") raise InvalidStateError("preview must be built before generation")
task = self.tasks[task_id]
if task.get("output_dataset_id") and task_id not in self.regeneration_prepared:
raise InvalidStateError("published task cannot be regenerated")
if replace_existing: if replace_existing:
self.results[task_id] = [] self.results[task_id] = []
self.tasks[task_id].update( task.update(
status="running", status="running",
progress=30, progress=30,
output_dataset_id=None,
output_count=0,
generation_run_id=self._id("dprun"), generation_run_id=self._id("dprun"),
) )
self.regeneration_prepared.discard(task_id)
return self.get_task(task_id) return self.get_task(task_id)
def generation_is_running(self, task_id: str, generation_run_id: str) -> bool: def generation_is_running(self, task_id: str, generation_run_id: str) -> bool:
@@ -469,15 +489,55 @@ class FakeDataProcessStore:
def publish(self, task_id: str, payload: dict[str, Any]) -> dict[str, Any]: def publish(self, task_id: str, payload: dict[str, Any]) -> dict[str, Any]:
task = self.tasks[task_id] task = self.tasks[task_id]
if task_id in self.regeneration_prepared:
raise InvalidStateError("regeneration must start and complete before publishing")
published = [
dataset
for dataset in self.datasets.values()
if dataset.get("source_task_id") == task_id
and dataset.get("deleted_at") is None
]
if task.get("output_dataset_id"): if task.get("output_dataset_id"):
return {"dataset": deepcopy(self.datasets[task["output_dataset_id"]]), "created": False} train_dataset = self.datasets[task["output_dataset_id"]]
return {
"dataset": deepcopy(train_dataset),
"datasets": deepcopy(published),
"output_datasets": deepcopy(published),
"created": False,
}
if task["status"] != "completed": if task["status"] != "completed":
raise InvalidStateError("only a completed task can be published") raise InvalidStateError("only a completed task can be published")
split_specs = (
("train", "训练集"),
("val", "验证集"),
("test", "测试集"),
)
for dataset_type, label in split_specs:
dataset_id = self._id("dataset") dataset_id = self._id("dataset")
dataset = {"id": dataset_id, "name": payload["dataset_name"], "source_task_id": task_id} self.datasets[dataset_id] = {
self.datasets[dataset_id] = dataset "id": dataset_id,
task["output_dataset_id"] = dataset_id "name": f"{payload['dataset_name']}-{label}",
return {"dataset": deepcopy(dataset), "created": True} "type": dataset_type,
"count": len(self.results[task_id]),
"source": "task",
"task_id": task_id,
"source_task_id": task_id,
"deleted_at": None,
}
published = [
dataset
for dataset in self.datasets.values()
if dataset.get("source_task_id") == task_id
and dataset.get("deleted_at") is None
]
train_dataset = next(dataset for dataset in published if dataset["type"] == "train")
task["output_dataset_id"] = train_dataset["id"]
return {
"dataset": deepcopy(train_dataset),
"datasets": deepcopy(published),
"output_datasets": deepcopy(published),
"created": True,
}
def make_client( def make_client(
@@ -673,6 +733,83 @@ def test_data_process_full_contract_without_database(tmp_path: Path) -> None:
) )
def test_task_list_exposes_document_and_generation_counts(
tmp_path: Path,
) -> None:
client, store, _ = make_client(tmp_path)
task_id = client.post(
"/modelTF/data-process",
json={"name": "列表契约", "process_type": "unstructured", "config": {}},
).json()["data"]["id"]
store.sources[task_id] = [{"id": "source-1"}, {"id": "source-2"}]
store.tasks[task_id].update(
{
"status": "pending",
"output_count": 17,
"output_dataset_id": None,
}
)
response = client.get("/modelTF/data-process")
assert response.status_code == 200
item = response.json()["data"]["items"][0]
assert item["status"] == "pending"
assert item["source_file_count"] == 2
assert item["output_count"] == 17
assert item["output_dataset_id"] is None
def test_task_detail_uses_returned_source_files_as_document_count(tmp_path: Path) -> None:
client, store, _ = make_client(tmp_path)
task_id = client.post(
"/modelTF/data-process",
json={"name": "详情文档数", "process_type": "unstructured", "config": {}},
).json()["data"]["id"]
store.tasks[task_id]["source_file_count"] = 99
store.sources[task_id] = [
{"id": "source-1", "name": "一.pdf", "content": "正文一"},
{"id": "source-2", "name": "二.pdf", "content": "正文二"},
]
response = client.get(f"/modelTF/data-process/{task_id}")
assert response.status_code == 200
detail = response.json()["data"]
assert len(detail["source_files"]) == 2
assert detail["source_file_count"] == 2
def test_generation_start_response_clears_previous_output_count(
tmp_path: Path,
monkeypatch: pytest.MonkeyPatch,
) -> None:
client, store, _ = make_client(tmp_path)
task_id = client.post(
"/modelTF/data-process",
json={"name": "新一轮生成", "process_type": "structured", "config": {}},
).json()["data"]["id"]
store.tasks[task_id]["output_count"] = 28
store.previews[task_id] = [
{
"id": "preview-1",
"source_file_id": None,
"original_content": '{"question":"新问题","answer":"新答案"}',
"edited_content": '{"question":"新问题","answer":"新答案"}',
"status": "original",
}
]
monkeypatch.setattr(data_process_endpoint, "_run_generation", lambda *args: None)
response = client.post(f"/modelTF/data-process/{task_id}/generate")
assert response.status_code == 200
progress = response.json()["data"]
assert progress["status"] == "running"
assert progress["output_count"] == 0
assert store.tasks[task_id]["output_count"] == 0
def test_preview_build_replaces_only_selected_files_and_reports_file_counts( def test_preview_build_replaces_only_selected_files_and_reports_file_counts(
tmp_path: Path, tmp_path: Path,
) -> None: ) -> None:
@@ -836,6 +973,13 @@ def test_regenerate_endpoint_prepares_an_existing_published_task(tmp_path: Path)
"output_count": 2, "output_count": 2,
} }
) )
store.datasets["dataset_train"] = {
"id": "dataset_train",
"name": "原训练集",
"type": "train",
"source_task_id": task_id,
"deleted_at": None,
}
store.previews[task_id] = [{"id": "preview_1", "edited_content": "原切片"}] store.previews[task_id] = [{"id": "preview_1", "edited_content": "原切片"}]
store.results[task_id] = [{"id": "result_1"}] store.results[task_id] = [{"id": "result_1"}]
@@ -852,13 +996,104 @@ def test_regenerate_endpoint_prepares_an_existing_published_task(tmp_path: Path)
assert response.status_code == 200 assert response.status_code == 200
data = response.json()["data"] data = response.json()["data"]
assert data["task"]["status"] == "pending" assert data["task"]["status"] == "completed"
assert data["task"]["output_dataset_id"] is None assert data["task"]["output_dataset_id"] == "dataset_train"
assert data["task"]["output_count"] == 2
assert data["preview_invalidated"] is False assert data["preview_invalidated"] is False
assert data["published_outputs_preserved"] is True assert data["published_outputs_preserved"] is True
assert store.results[task_id] == [] assert store.results[task_id] == [{"id": "result_1"}]
assert store.previews[task_id][0]["id"] == "preview_1" assert store.previews[task_id][0]["id"] == "preview_1"
detail = client.get(f"/modelTF/data-process/{task_id}").json()["data"]
assert detail["status"] == "completed"
assert detail["output_dataset_id"] == "dataset_train"
assert detail["output_count"] == 2
assert [item["id"] for item in detail["output_datasets"]] == ["dataset_train"]
def test_published_split_datasets_remain_in_detail_after_regeneration(
tmp_path: Path,
monkeypatch: pytest.MonkeyPatch,
) -> None:
client, store, _ = make_client(tmp_path)
task_id = client.post(
"/modelTF/data-process",
json={"name": "保留旧发布数据", "process_type": "structured", "config": {}},
).json()["data"]["id"]
store.tasks[task_id].update(
{
"status": "completed",
"updated_at": "2026-07-27T09:00:00Z",
"output_count": 1,
}
)
store.results[task_id] = [
{
"id": "result_1",
"status": "valid",
"instruction": "问题",
"input": "",
"output": "答案",
}
]
store.previews[task_id] = [{"id": "preview_1", "edited_content": "原切片"}]
published = client.post(
f"/modelTF/data-process/{task_id}/publish",
json={"dataset_name": "保留旧发布数据集"},
)
assert published.status_code == 200
published_datasets = published.json()["data"]["datasets"]
assert len(published_datasets) == 3
published_ids = {item["id"] for item in published_datasets}
assert store.tasks[task_id]["output_dataset_id"] in published_ids
regenerated = client.post(
f"/modelTF/data-process/{task_id}/regenerate",
json={
"name": "保留旧发布数据",
"description": "更换生成配置后退出",
"process_type": "structured",
"config": {"generation_model_id": "model_2"},
"expected_updated_at": "2026-07-27T09:00:00Z",
},
)
assert regenerated.status_code == 200
original_output_dataset_id = store.tasks[task_id]["output_dataset_id"]
prepared_task = regenerated.json()["data"]["task"]
assert prepared_task["status"] == "completed"
assert prepared_task["output_dataset_id"] == original_output_dataset_id
assert prepared_task["output_count"] == 1
assert store.results[task_id][0]["id"] == "result_1"
detail = client.get(f"/modelTF/data-process/{task_id}")
assert detail.status_code == 200
detail_data = detail.json()["data"]
assert detail_data["status"] == "completed"
assert detail_data["output_dataset_id"] == original_output_dataset_id
assert detail_data["output_count"] == 1
assert len(detail_data["output_datasets"]) == 3
assert {item["id"] for item in detail_data["output_datasets"]} == published_ids
assert set(store.datasets) == published_ids
retained_results = client.get(f"/modelTF/data-process/{task_id}/results").json()["data"]
assert retained_results["total"] == 1
assert retained_results["items"][0]["id"] == "result_1"
monkeypatch.setattr(data_process_endpoint, "_run_generation", lambda *args: None)
started = client.post(f"/modelTF/data-process/{task_id}/generate")
assert started.status_code == 200
running = started.json()["data"]
assert running["status"] == "running"
assert running["output_count"] == 0
assert store.results[task_id] == []
assert set(store.datasets) == published_ids
running_detail = client.get(f"/modelTF/data-process/{task_id}").json()["data"]
assert running_detail["status"] == "running"
assert running_detail["output_dataset_id"] is None
assert running_detail["output_count"] == 0
assert {item["id"] for item in running_detail["output_datasets"]} == published_ids
def test_regenerate_endpoint_validates_snapshot_and_locked_process_type( def test_regenerate_endpoint_validates_snapshot_and_locked_process_type(
tmp_path: Path, tmp_path: Path,
@@ -945,6 +1180,47 @@ def test_config_validation_and_stop_state(tmp_path: Path) -> None:
assert stopped.json()["data"]["status"] == "stopped" assert stopped.json()["data"]["status"] == "stopped"
@pytest.mark.parametrize("config_key", ["qa_pairs_per_row", "qa_pairs_per_chunk"])
@pytest.mark.parametrize("count", [1, 50])
def test_qa_pair_config_accepts_supported_boundaries(
tmp_path: Path,
config_key: str,
count: int,
) -> None:
client, _, _ = make_client(tmp_path)
response = client.post(
"/modelTF/data-process",
json={
"name": "问答数量边界",
"process_type": "unstructured",
"config": {config_key: count},
},
)
assert response.status_code == 200
@pytest.mark.parametrize("config_key", ["qa_pairs_per_row", "qa_pairs_per_chunk"])
@pytest.mark.parametrize("count", [0, 51])
def test_qa_pair_config_rejects_out_of_range_boundaries(
tmp_path: Path,
config_key: str,
count: int,
) -> None:
client, _, _ = make_client(tmp_path)
response = client.post(
"/modelTF/data-process",
json={
"name": "问答数量越界",
"process_type": "unstructured",
"config": {config_key: count},
},
)
assert response.status_code == 422
assert "[1, 50]" in response.text
def test_upload_batch_is_atomic_and_empty_files_are_rejected(tmp_path: Path) -> None: def test_upload_batch_is_atomic_and_empty_files_are_rejected(tmp_path: Path) -> None:
client, store, storage = make_client(tmp_path) client, store, storage = make_client(tmp_path)
task_id = client.post( task_id = client.post(

View File

@@ -3,8 +3,13 @@ from __future__ import annotations
import json import json
import httpx import httpx
import pytest
from app.modules.data_process.generation import chat_completions_url, generate_model_records from app.modules.data_process.generation import (
ModelGenerationError,
chat_completions_url,
generate_model_records,
)
def test_chat_completions_url_accepts_host_base_and_complete_url() -> None: def test_chat_completions_url_accepts_host_base_and_complete_url() -> None:
@@ -100,3 +105,165 @@ def test_generate_model_records_keeps_partial_failure_for_manual_repair() -> Non
assert len(records) == 1 assert len(records) == 1
assert records[0]["status"] == "invalid" assert records[0]["status"] == "invalid"
assert records[0]["error"] assert records[0]["error"]
def test_generate_model_records_batches_fifty_results_with_unique_ids() -> None:
requests: list[httpx.Request] = []
def handler(request: httpx.Request) -> httpx.Response:
requests.append(request)
batch_start = (len(requests) - 1) * 10 + 1
batch_end = batch_start + 9
payload = json.loads(request.content)
system_prompt = payload["messages"][0]["content"]
assert "items 必须包含 10 条" in system_prompt
assert f"{batch_start}-{batch_end}" in system_prompt
return httpx.Response(
200,
json={
"choices": [
{
"message": {
"content": json.dumps(
{
"items": [
{
"instruction": "同一问题",
"input": "来源正文",
"output": "同一答案",
}
for _ in range(batch_start, batch_end + 1)
]
},
ensure_ascii=False,
)
}
}
]
},
)
records = generate_model_records(
[{"id": "preview-50", "edited_content": "来源正文"}],
model={"name": "model", "api_url": "https://model.example/v1"},
config={},
task_id="task-50",
split={"train": 100, "validation": 0, "test": 0},
qa_pairs_per_item=50,
client=httpx.Client(transport=httpx.MockTransport(handler)),
)
assert len(requests) == 5
assert len(records) == 50
assert len({record["id"] for record in records}) == 50
assert {record["instruction"] for record in records} == {"同一问题"}
assert all(record["status"] == "valid" for record in records)
def test_generate_model_records_preserves_successful_batches_when_one_fails() -> None:
request_count = 0
def handler(_: httpx.Request) -> httpx.Response:
nonlocal request_count
request_count += 1
if request_count == 2:
return httpx.Response(500)
return httpx.Response(
200,
json={
"choices": [
{
"message": {
"content": json.dumps(
{
"items": [
{
"instruction": f"问题 {index}",
"output": f"答案 {index}",
}
for index in range(1, 11)
]
},
ensure_ascii=False,
)
}
}
]
},
)
records = generate_model_records(
[{"id": "preview-partial", "edited_content": "来源正文"}],
model={"name": "model", "api_url": "https://model.example/v1"},
config={"generation_retries": 0},
task_id="task-partial",
split={"train": 100, "validation": 0, "test": 0},
qa_pairs_per_item=20,
client=httpx.Client(transport=httpx.MockTransport(handler)),
)
assert len(records) == 11
assert sum(record["status"] == "valid" for record in records) == 10
failed = next(record for record in records if record["status"] == "invalid")
assert "第 11-20 条" in failed["instruction"]
assert len({record["id"] for record in records}) == len(records)
def test_generate_model_records_retries_short_batch_then_marks_it_invalid() -> None:
request_count = 0
def handler(_: httpx.Request) -> httpx.Response:
nonlocal request_count
request_count += 1
return httpx.Response(
200,
json={
"choices": [
{
"message": {
"content": json.dumps(
{
"items": [
{
"instruction": "只有一条",
"output": "不足本批要求数量",
}
]
},
ensure_ascii=False,
)
}
}
]
},
)
records = generate_model_records(
[{"id": "preview-short", "edited_content": "来源正文"}],
model={"name": "model", "api_url": "https://model.example/v1"},
config={"generation_retries": 1},
task_id="task-short",
split={"train": 100, "validation": 0, "test": 0},
qa_pairs_per_item=10,
client=httpx.Client(transport=httpx.MockTransport(handler)),
)
assert request_count == 2
assert len(records) == 1
assert records[0]["status"] == "invalid"
assert "expected 10, got 1" in records[0]["error"]
@pytest.mark.parametrize("qa_pairs_per_item", [0, 51])
def test_generate_model_records_rejects_out_of_range_count(
qa_pairs_per_item: int,
) -> None:
with pytest.raises(ModelGenerationError, match=r"\[1, 50\]"):
generate_model_records(
[],
model={"name": "model", "api_url": "https://model.example/v1"},
config={},
task_id="task-invalid",
split={"train": 100, "validation": 0, "test": 0},
qa_pairs_per_item=qa_pairs_per_item,
)

View File

@@ -1,5 +1,6 @@
from __future__ import annotations from __future__ import annotations
import json
from collections.abc import Iterator from collections.abc import Iterator
from contextlib import contextmanager from contextlib import contextmanager
from decimal import Decimal from decimal import Decimal
@@ -31,9 +32,13 @@ class _Result:
class _PublishConnection: class _PublishConnection:
def __init__(self, results: list[dict[str, Any]]): def __init__(
self,
results: list[dict[str, Any]],
datasets: list[dict[str, Any]] | None = None,
):
self.results = results self.results = results
self.datasets: list[dict[str, Any]] = [] self.datasets: list[dict[str, Any]] = datasets or []
self.files: list[dict[str, Any]] = [] self.files: list[dict[str, Any]] = []
self.records: list[dict[str, Any]] = [] self.records: list[dict[str, Any]] = []
@@ -47,16 +52,38 @@ class _PublishConnection:
) )
if normalized.startswith("SELECT * FROM data_process_results"): if normalized.startswith("SELECT * FROM data_process_results"):
return _Result(rows=self.results) return _Result(rows=self.results)
if normalized.startswith("SELECT * FROM datasets WHERE source_task_id"): if normalized.startswith("SELECT * FROM datasets WHERE source='task'"):
return _Result(rows=self.datasets) assert "source_task_id=%s" in normalized
assert "source_task_id IS NULL AND task_id=%s" in normalized
assert "deleted_at IS NULL" in normalized
source_task_id, legacy_task_id = params
return _Result(
rows=[
item
for item in self.datasets
if item.get("source") == "task"
and item.get("deleted_at") is None
and (
item.get("source_task_id") == source_task_id
or (
item.get("source_task_id") is None
and item.get("task_id") == legacy_task_id
)
)
]
)
if normalized.startswith("INSERT INTO datasets"): if normalized.startswith("INSERT INTO datasets"):
dataset = { dataset = {
"id": params[0], "id": params[0],
"name": params[1], "name": params[1],
"type": params[2], "type": params[2],
"source": "task",
"task_id": params[4],
"source_task_id": params[5],
"count": params[8], "count": params[8],
"record_count": params[9], "record_count": params[9],
"metadata": params[11], "metadata": params[11],
"deleted_at": None,
} }
self.datasets.append(dataset) self.datasets.append(dataset)
return _Result(row=dataset) return _Result(row=dataset)
@@ -118,12 +145,34 @@ class _PublishStore(DataProcessStore):
class _RegenerationConnection: class _RegenerationConnection:
def __init__(self, task: dict[str, Any]) -> None: def __init__(
self,
task: dict[str, Any],
datasets: list[dict[str, Any]] | None = None,
) -> None:
self.task = task self.task = task
self.datasets = [ self.datasets = datasets or [
{"id": "dataset_train"}, {
{"id": "dataset_validation"}, "id": "dataset_train",
{"id": "dataset_test"}, "source": "task",
"task_id": task["id"],
"source_task_id": task["id"],
"deleted_at": None,
},
{
"id": "dataset_validation",
"source": "task",
"task_id": task["id"],
"source_task_id": task["id"],
"deleted_at": None,
},
{
"id": "dataset_test",
"source": "task",
"task_id": task["id"],
"source_task_id": task["id"],
"deleted_at": None,
},
] ]
self.sources = [{"id": "source_1"}] self.sources = [{"id": "source_1"}]
self.previews = [{"id": "preview_1"}] self.previews = [{"id": "preview_1"}]
@@ -133,8 +182,35 @@ class _RegenerationConnection:
normalized = " ".join(sql.split()) normalized = " ".join(sql.split())
if params is not None: if params is not None:
assert normalized.count("%s") == len(params) assert normalized.count("%s") == len(params)
if normalized.startswith("UPDATE datasets SET source_task_id="):
source_task_id, _, legacy_task_id = params
for dataset in self.datasets:
if (
dataset.get("source") == "task"
and dataset.get("source_task_id") is None
and dataset.get("task_id") == legacy_task_id
and dataset.get("deleted_at") is None
):
dataset["source_task_id"] = source_task_id
return _Result()
if normalized.startswith("SELECT EXISTS("): if normalized.startswith("SELECT EXISTS("):
return _Result(row={"exists": bool(self.datasets)}) assert "source_task_id=%s" in normalized
assert "source_task_id IS NULL AND task_id=%s" in normalized
assert "deleted_at IS NULL" in normalized
source_task_id, legacy_task_id = params
exists = any(
dataset.get("source") == "task"
and dataset.get("deleted_at") is None
and (
dataset.get("source_task_id") == source_task_id
or (
dataset.get("source_task_id") is None
and dataset.get("task_id") == legacy_task_id
)
)
for dataset in self.datasets
)
return _Result(row={"exists": exists})
if normalized.startswith("DELETE FROM data_process_results"): if normalized.startswith("DELETE FROM data_process_results"):
self.results.clear() self.results.clear()
return _Result() return _Result()
@@ -149,18 +225,7 @@ class _RegenerationConnection:
"name": params[0], "name": params[0],
"description": params[1], "description": params[1],
"config": params[2], "config": params[2],
"status": "pending", "updated_at": params[3],
"progress": params[3],
"output_dataset_id": None,
"output_count": 0,
"filtered_count": 0,
"duplicate_count": 0,
"error_count": 0,
"failure_reason": None,
"generation_run_id": None,
"started_at": None,
"completed_at": None,
"updated_at": params[4],
} }
) )
return _Result(row=dict(self.task)) return _Result(row=dict(self.task))
@@ -183,6 +248,295 @@ class _RegenerationStore(DataProcessStore):
return dict(self._conn.task) return dict(self._conn.task)
class _TaskDetailConnection:
def __init__(
self,
task: dict[str, Any],
datasets: list[dict[str, Any]],
) -> None:
self.task = task
self.datasets = datasets
def execute(self, sql: str, params: Any = None) -> _Result:
normalized = " ".join(sql.split())
assert normalized.startswith("SELECT task.*")
assert "dataset.source_task_id=task.id" in normalized
assert "dataset.source_task_id IS NULL AND dataset.task_id=task.id" in normalized
assert "dataset.deleted_at IS NULL" in normalized
assert "dataset.metadata::jsonb" not in normalized
assert "WHEN 'train' THEN 'train'" in normalized
assert "WHEN 'val' THEN 'validation'" in normalized
assert "WHEN 'test' THEN 'test'" in normalized
task_id = params[0]
visible = [
dataset
for dataset in self.datasets
if dataset.get("source") == "task"
and dataset.get("deleted_at") is None
and (
dataset.get("source_task_id") == task_id
or (
dataset.get("source_task_id") is None
and dataset.get("task_id") == task_id
)
)
]
return _Result(
row={
**self.task,
"output_datasets": json.dumps(
[
{
"id": item["id"],
"name": item["name"],
"type": item["type"],
"count": item["count"],
"dataset_split": item["dataset_split"],
}
for item in visible
]
),
}
)
class _TaskDetailStore(DataProcessStore):
def __init__(self, conn: _TaskDetailConnection) -> None:
self._conn = conn
@contextmanager
def connect(self) -> Iterator[_TaskDetailConnection]:
yield self._conn
class _TaskListConnection:
def __init__(self) -> None:
self.task = {
**_regeneration_task(
status="pending",
output_dataset_id=None,
output_count=17,
),
"created_at": "2026-07-25T18:00:00Z",
"deleted_at": None,
}
self.sources = [
{"task_id": "task-1", "deleted_at": None},
{"task_id": "task-1", "deleted_at": None},
{"task_id": "task-1", "deleted_at": "2026-07-26T00:00:00Z"},
]
def execute(self, sql: str, params: Any = None) -> _Result:
normalized = " ".join(sql.split())
if normalized.startswith("SELECT COUNT(*) AS count FROM data_process_tasks task"):
assert "task.deleted_at IS NULL" in normalized
return _Result(row={"count": 1})
assert normalized.startswith("SELECT task.*")
assert "source_file.task_id=task.id" in normalized
assert "source_file.deleted_at IS NULL" in normalized
source_file_count = sum(
item["task_id"] == self.task["id"] and item["deleted_at"] is None
for item in self.sources
)
return _Result(
rows=[
{
**self.task,
"source_file_count": source_file_count,
}
]
)
class _TaskListStore(DataProcessStore):
def __init__(self, conn: _TaskListConnection) -> None:
self._conn = conn
@contextmanager
def connect(self) -> Iterator[_TaskListConnection]:
yield self._conn
class _LegacyRecoveryConnection:
def __init__(self) -> None:
self.task = {
**_regeneration_task(
status="pending",
progress=20,
output_dataset_id=None,
output_count=0,
generation_run_id=None,
started_at=None,
completed_at=None,
),
}
self.datasets = [
{"id": "dataset_train", "type": "train", "count": 1, "created_at": "2026-07-25T18:12:00Z"},
{"id": "dataset_test", "type": "test", "count": 1, "created_at": "2026-07-25T18:12:00Z"},
]
self.records = [
{
"id": "record_train",
"dataset_id": "dataset_train",
"line_no": 1,
"split": "train",
"instruction": "训练问题",
"input": "",
"output": "训练答案",
"raw": json.dumps(
{
"source_result_id": "result_train",
"preview_item_id": "preview_1",
}
),
"status": "valid",
"source_result_id": None,
"preview_item_id": None,
"created_at": "2026-07-25T18:12:00Z",
},
{
"id": "record_test",
"dataset_id": "dataset_test",
"line_no": 1,
"split": "test",
"instruction": "测试问题",
"input": "输入",
"output": "测试答案",
"raw": json.dumps({"source_result_id": "result_test"}),
"status": "modified",
"source_result_id": None,
"preview_item_id": None,
"created_at": "2026-07-25T18:12:00Z",
},
]
self.previews = [{"id": "preview_1"}]
self.results: list[dict[str, Any]] = []
def execute(self, sql: str, params: Any = None) -> _Result:
normalized = " ".join(sql.split())
if normalized.startswith("SELECT COUNT(*) AS count FROM data_process_results"):
return _Result(row={"count": len(self.results)})
if normalized.startswith("SELECT id, type, count, created_at FROM datasets"):
return _Result(rows=list(self.datasets))
if normalized.startswith("SELECT id, dataset_id, line_no, split"):
return _Result(rows=list(self.records))
if normalized.startswith("SELECT id FROM data_process_preview_items"):
return _Result(rows=list(self.previews))
if normalized.startswith("INSERT INTO data_process_results"):
self.results.append(
{
"id": params[0],
"task_id": params[1],
"preview_item_id": params[2],
"instruction": params[3],
"input": params[4],
"output": params[5],
"status": params[9],
"split": params[10],
}
)
return _Result()
if normalized.startswith("UPDATE dataset_records SET source_result_id="):
record = next(item for item in self.records if item["id"] == params[2])
record["source_result_id"] = params[0]
record["preview_item_id"] = params[1]
return _Result()
if normalized.startswith("UPDATE data_process_tasks SET status='completed'"):
self.task.update(
{
"status": "completed",
"progress": 100,
"output_dataset_id": params[0],
"output_count": params[1],
"completed_at": params[3],
}
)
return _Result()
raise AssertionError(f"unexpected SQL: {normalized}")
class _LegacyRecoveryStore(DataProcessStore):
def __init__(self, conn: _LegacyRecoveryConnection) -> None:
self._conn = conn
@contextmanager
def connect(self) -> Iterator[_LegacyRecoveryConnection]:
yield self._conn
def _task_in_connection(
self, conn: Any, task_id: str, *, for_update: bool = False
) -> dict[str, Any]:
assert task_id == "task-1"
assert for_update is True
return dict(self._conn.task)
class _StartGenerationConnection:
def __init__(self, *, published_prepared: bool = False, preview_count: int = 1) -> None:
config = {"chunk_method": "fixed", "temperature": 0.7}
if published_prepared:
config["_regeneration_prepared"] = {
"prepared": True,
"preview_invalidated": False,
}
self.task = {
**_regeneration_task(
status="completed" if published_prepared else "pending",
config=config,
output_dataset_id="dataset_train" if published_prepared else None,
output_count=28,
),
"generation_run_id": None,
}
self.preview_count = preview_count
self.results = [{"id": "old-result"}]
def execute(self, sql: str, params: Any = None) -> _Result:
normalized = " ".join(sql.split())
if normalized.startswith("SELECT COUNT(*) AS count FROM data_process_preview_items"):
return _Result(row={"count": self.preview_count})
if normalized.startswith("DELETE FROM data_process_results"):
self.results.clear()
return _Result()
assert normalized.startswith("UPDATE data_process_tasks SET config=%s, status='running'")
assert "output_dataset_id=NULL" in normalized
assert "output_count=0" in normalized
self.task.update(
{
"config": params[0],
"status": "running",
"progress": 30,
"output_count": 0,
"output_dataset_id": None,
"failure_reason": None,
"started_at": params[1],
"completed_at": None,
"filtered_count": 0,
"duplicate_count": 0,
"error_count": 0,
"generation_run_id": params[2],
"updated_at": params[3],
}
)
return _Result(row=dict(self.task))
class _StartGenerationStore(DataProcessStore):
def __init__(self, conn: _StartGenerationConnection) -> None:
self._conn = conn
@contextmanager
def connect(self) -> Iterator[_StartGenerationConnection]:
yield self._conn
def _task_in_connection(
self, conn: Any, task_id: str, *, for_update: bool = False
) -> dict[str, Any]:
assert task_id == "task-1"
assert for_update is True
return dict(self._conn.task)
def test_decode_row_serializes_postgres_numeric_values_as_json_numbers() -> None: def test_decode_row_serializes_postgres_numeric_values_as_json_numbers() -> None:
decoded = _decode_row( decoded = _decode_row(
{ {
@@ -194,6 +548,20 @@ def test_decode_row_serializes_postgres_numeric_values_as_json_numbers() -> None
assert decoded == {"progress": 100.0, "duration_seconds": 389.0} assert decoded == {"progress": 100.0, "duration_seconds": 389.0}
def test_decode_row_decodes_aggregated_output_datasets_json() -> None:
decoded = _decode_row(
{
"id": "task-1",
"output_datasets": '[{"id":"dataset_train","type":"train"}]',
}
)
assert decoded == {
"id": "task-1",
"output_datasets": [{"id": "dataset_train", "type": "train"}],
}
@pytest.mark.parametrize( @pytest.mark.parametrize(
("process_type", "current", "next_config", "expected"), ("process_type", "current", "next_config", "expected"),
[ [
@@ -314,6 +682,119 @@ def _regeneration_task(**updates: Any) -> dict[str, Any]:
return task return task
def test_list_tasks_exposes_source_and_generation_counts() -> None:
page = _TaskListStore(_TaskListConnection()).list_tasks(page=1, page_size=20)
assert page["total"] == 1
assert page["page"] == 1
assert page["page_size"] == 20
item = page["items"][0]
assert item["status"] == "pending"
assert item["source_file_count"] == 2
assert item["output_count"] == 17
assert item["output_dataset_id"] is None
def test_start_generation_clears_previous_output_count() -> None:
conn = _StartGenerationConnection()
task = _StartGenerationStore(conn).start_generation("task-1")
assert task["status"] == "running"
assert task["output_count"] == 0
assert conn.results == []
def test_prepared_published_task_is_only_cleared_when_generation_starts() -> None:
conn = _StartGenerationConnection(published_prepared=True)
task = _StartGenerationStore(conn).start_generation("task-1")
assert task["status"] == "running"
assert task["output_dataset_id"] is None
assert task["output_count"] == 0
assert "_regeneration_prepared" not in task["config"]
assert conn.results == []
def test_prepared_published_task_survives_generation_preflight_failure() -> None:
conn = _StartGenerationConnection(published_prepared=True, preview_count=0)
with pytest.raises(InvalidStateError, match="preview must be built"):
_StartGenerationStore(conn).start_generation("task-1")
assert conn.task["status"] == "completed"
assert conn.task["output_dataset_id"] == "dataset_train"
assert conn.task["output_count"] == 28
assert "_regeneration_prepared" in conn.task["config"]
assert conn.results == [{"id": "old-result"}]
def test_legacy_aborted_regeneration_recovers_results_and_published_state() -> None:
conn = _LegacyRecoveryConnection()
store = _LegacyRecoveryStore(conn)
recovered = store.recover_legacy_aborted_regeneration("task-1")
assert recovered == {"recovered": True, "result_count": 2}
assert conn.task["status"] == "completed"
assert conn.task["progress"] == 100
assert conn.task["output_dataset_id"] == "dataset_train"
assert conn.task["output_count"] == 2
assert [item["id"] for item in conn.results] == ["result_train", "result_test"]
assert conn.results[0]["preview_item_id"] == "preview_1"
assert conn.results[1]["preview_item_id"] is None
assert conn.records[0]["source_result_id"] == "result_train"
assert conn.records[0]["preview_item_id"] == "preview_1"
repeated = store.recover_legacy_aborted_regeneration("task-1")
assert repeated == {"recovered": False, "result_count": 0}
assert len(conn.results) == 2
def test_normal_pending_task_is_not_mistaken_for_legacy_regeneration() -> None:
conn = _LegacyRecoveryConnection()
conn.datasets = []
conn.records = []
result = _LegacyRecoveryStore(conn).recover_legacy_aborted_regeneration("task-1")
assert result == {"recovered": False, "result_count": 0}
assert conn.task["status"] == "pending"
assert conn.results == []
def _legacy_published_datasets(task_id: str = "task-1") -> list[dict[str, Any]]:
specs = (
("dataset_train", "制度问答-训练集", "train", "train", 22),
("dataset_validation", "制度问答-验证集", "val", "validation", 3),
("dataset_test", "制度问答-测试集", "test", "test", 3),
)
dataset_ids = {split: dataset_id for dataset_id, _, _, split, _ in specs}
return [
{
"id": dataset_id,
"name": name,
"type": dataset_type,
"source": "task",
"task_id": task_id,
"source_task_id": None,
"count": count,
"record_count": count,
"dataset_split": split,
"metadata": json.dumps(
{
"base_dataset_name": "制度问答",
"dataset_split": split,
"split_dataset_ids": dataset_ids,
}
),
"deleted_at": None,
}
for dataset_id, name, dataset_type, split, count in specs
]
def test_prepare_regeneration_preserves_outputs_sources_and_generation_only_preview() -> None: def test_prepare_regeneration_preserves_outputs_sources_and_generation_only_preview() -> None:
conn = _RegenerationConnection(_regeneration_task()) conn = _RegenerationConnection(_regeneration_task())
original_datasets = list(conn.datasets) original_datasets = list(conn.datasets)
@@ -332,19 +813,82 @@ def test_prepare_regeneration_preserves_outputs_sources_and_generation_only_prev
assert result["preview_invalidated"] is False assert result["preview_invalidated"] is False
assert result["published_outputs_preserved"] is True assert result["published_outputs_preserved"] is True
assert result["task"]["output_dataset_id"] is None assert result["task"]["output_dataset_id"] == "dataset_train"
assert result["task"]["status"] == "pending" assert result["task"]["status"] == "completed"
assert result["task"]["progress"] == 20 assert result["task"]["progress"] == 100
assert result["task"]["output_count"] == 0 assert result["task"]["output_count"] == 28
assert result["task"]["started_at"] is None assert result["task"]["started_at"] == "2026-07-25T18:00:00Z"
assert result["task"]["completed_at"] is None assert result["task"]["completed_at"] == "2026-07-25T18:05:00Z"
assert conn.results == [] assert "_regeneration_prepared" not in result["task"]["config"]
stored_config = json.loads(conn.task["config"])
assert stored_config["_regeneration_prepared"]["prepared"] is True
assert conn.results == [{"id": "result_1"}]
assert conn.previews == [{"id": "preview_1"}] assert conn.previews == [{"id": "preview_1"}]
assert conn.datasets == original_datasets assert conn.datasets == original_datasets
assert conn.sources == original_sources assert conn.sources == original_sources
def test_prepare_regeneration_deletes_preview_when_chunk_configuration_changes() -> None: def test_prepare_regeneration_backfills_and_keeps_legacy_task_datasets_visible() -> None:
legacy_datasets = _legacy_published_datasets()
# 历史 metadata 可能不是合法 JSON详情查询不能再依赖 metadata::jsonb。
legacy_datasets[0]["metadata"] = "{legacy-invalid-json"
deleted_dataset = {
**legacy_datasets[0],
"id": "dataset_deleted",
"name": "已删除训练集",
"deleted_at": "2026-07-25T20:00:00Z",
}
unrelated_dataset = {
**legacy_datasets[0],
"id": "dataset_unrelated",
"name": "其他任务训练集",
"task_id": "task-other",
}
conn = _RegenerationConnection(
_regeneration_task(),
[*legacy_datasets, deleted_dataset, unrelated_dataset],
)
before = _TaskDetailStore(_TaskDetailConnection(conn.task, conn.datasets)).get_task(
"task-1"
)
assert [item["id"] for item in before["output_datasets"]] == [
"dataset_train",
"dataset_validation",
"dataset_test",
]
result = _RegenerationStore(conn).prepare_regeneration(
"task-1",
{
"name": "原任务",
"description": "",
"process_type": "unstructured",
"config": {"chunk_method": "fixed", "temperature": 0.2},
"expected_updated_at": "2026-07-25T18:05:00Z",
},
)
assert result["published_outputs_preserved"] is True
assert result["task"]["output_dataset_id"] == "dataset_train"
assert len(conn.datasets) == 5
assert all(
item["source_task_id"] == "task-1" for item in conn.datasets[:3]
)
assert deleted_dataset["source_task_id"] is None
assert unrelated_dataset["source_task_id"] is None
after = _TaskDetailStore(_TaskDetailConnection(conn.task, conn.datasets)).get_task(
"task-1"
)
assert [item["id"] for item in after["output_datasets"]] == [
"dataset_train",
"dataset_validation",
"dataset_test",
]
def test_prepare_regeneration_defers_preview_deletion_when_chunk_configuration_changes() -> None:
conn = _RegenerationConnection(_regeneration_task(output_dataset_id=None)) conn = _RegenerationConnection(_regeneration_task(output_dataset_id=None))
result = _RegenerationStore(conn).prepare_regeneration( result = _RegenerationStore(conn).prepare_regeneration(
@@ -360,9 +904,11 @@ def test_prepare_regeneration_deletes_preview_when_chunk_configuration_changes()
assert result["preview_invalidated"] is True assert result["preview_invalidated"] is True
assert result["published_outputs_preserved"] is True assert result["published_outputs_preserved"] is True
assert result["task"]["progress"] == 0 assert result["task"]["status"] == "completed"
assert conn.previews == [] assert result["task"]["progress"] == 100
assert conn.results == [] assert result["task"]["output_count"] == 28
assert conn.previews == [{"id": "preview_1"}]
assert conn.results == [{"id": "result_1"}]
assert len(conn.datasets) == 3 assert len(conn.datasets) == 3
@@ -467,6 +1013,37 @@ def test_publish_creates_three_independent_datasets_with_exact_counts() -> None:
assert republished["created"] is False assert republished["created"] is False
def test_publish_reuses_legacy_task_id_only_split_datasets() -> None:
results = [
{
"id": f"result-{index}",
"status": "valid",
"instruction": f"问题 {index}",
"input": "",
"output": f"答案 {index}",
"preview_item_id": f"preview-{index}",
}
for index in range(10)
]
legacy_datasets = _legacy_published_datasets()
original_ids = [item["id"] for item in legacy_datasets]
conn = _PublishConnection(results, legacy_datasets)
published = _PublishStore(conn).publish(
"task-1",
{
"dataset_name": "不会创建新数据集",
"storage_type": "local",
"format": "alpaca_jsonl",
"split": {"train": 80, "validation": 10, "test": 10},
},
)
assert published["created"] is False
assert [item["id"] for item in published["datasets"]] == original_ids
assert [item["id"] for item in conn.datasets] == original_ids
def test_publish_keeps_all_three_datasets_when_a_small_split_is_empty() -> None: def test_publish_keeps_all_three_datasets_when_a_small_split_is_empty() -> None:
conn = _PublishConnection( conn = _PublishConnection(
[ [

View File

@@ -1 +1 @@
import{d as C,bf as g,D as E,H as O,o as _,e as B,s as D,Z as $,w as A,c as I,aL as K,q as t,n as v,aa as r,g as q,bg as M,y as u,z as N,P as k}from"./index-C8bRaOsd.js";import{_ as R}from"./_plugin-vue_export-helper-DlAUqK2U.js";const V={class:"app-confirm-header"},z={class:"app-confirm-heading"},H={class:"app-confirm-icon","aria-hidden":"true"},L={class:"app-confirm-body"},P={class:"app-confirm-actions"},S=C({__name:"AppConfirmDialog",setup(j,{expose:x}){const c=u(!1),m=u(),p=u(),d=`app-confirm-title-${g()}`,y=`app-confirm-message-${g()}`,n=N({title:"请确认操作",message:"",confirmText:"确定",cancelText:"取消",tone:"warning",closeOnOverlay:!1});let o=null,i=null;function s(a){c.value=!1;const e=o;o=null,e==null||e(a)}function h(a){return o&&s(!1),Object.assign(n,{confirmText:"确定",cancelText:"取消",tone:"warning",closeOnOverlay:!1,...a}),c.value=!0,new Promise(e=>{o=e})}function w(){n.closeOnOverlay&&s(!1)}function T(a){var b;if(a.key==="Escape"){a.preventDefault(),s(!1);return}if(a.key!=="Tab")return;const e=Array.from(((b=m.value)==null?void 0:b.querySelectorAll("button:not([disabled])"))??[]),l=e[0],f=e[e.length-1];!l||!f||(a.shiftKey&&document.activeElement===l?(a.preventDefault(),f.focus()):!a.shiftKey&&document.activeElement===f&&(a.preventDefault(),l.focus()))}return E(c,async a=>{var e;if(a){i=document.activeElement instanceof HTMLElement?document.activeElement:null,await k(),(e=p.value)==null||e.focus();return}await k(),i==null||i.focus(),i=null}),O(()=>{o==null||o(!1),o=null}),x({open:h}),(a,e)=>(_(),B(M,{to:"body"},[D($,{name:"app-confirm"},{default:A(()=>[c.value?(_(),I("div",{key:0,class:"app-confirm-overlay",onMousedown:K(w,["self"])},[t("section",{ref_key:"dialogRef",ref:m,class:v(["app-confirm-dialog",`is-${n.tone}`]),role:"alertdialog","aria-modal":!0,"aria-labelledby":d,"aria-describedby":y,onKeydown:T},[t("header",V,[t("div",z,[t("span",H,[t("i",{class:v(n.tone==="primary"?"fa fa-question-circle":"fa fa-exclamation-triangle")},null,2)]),t("h2",{id:d},r(n.title),1)]),t("button",{class:"app-confirm-close",type:"button","aria-label":"关闭确认弹窗",onClick:e[0]||(e[0]=l=>s(!1))},[...e[3]||(e[3]=[t("i",{class:"fa fa-times","aria-hidden":"true"},null,-1)])])]),t("div",L,[t("p",{id:y},r(n.message),1)]),t("footer",P,[t("button",{ref_key:"cancelButtonRef",ref:p,class:"app-confirm-button is-cancel",type:"button",onClick:e[1]||(e[1]=l=>s(!1))},r(n.cancelText),513),t("button",{class:"app-confirm-button is-confirm",type:"button",onClick:e[2]||(e[2]=l=>s(!0))},r(n.confirmText),1)])],34)],32)):q("",!0)]),_:1})]))}}),G=R(S,[["__scopeId","data-v-8d3bf6ad"]]);export{G as A}; import{d as C,bf as g,D as E,H as O,o as _,e as B,s as D,Z as $,w as A,c as I,aL as K,q as t,n as v,aa as r,g as q,bg as M,y as u,z as N,P as k}from"./index-CGB0A5x_.js";import{_ as R}from"./_plugin-vue_export-helper-DlAUqK2U.js";const V={class:"app-confirm-header"},z={class:"app-confirm-heading"},H={class:"app-confirm-icon","aria-hidden":"true"},L={class:"app-confirm-body"},P={class:"app-confirm-actions"},S=C({__name:"AppConfirmDialog",setup(j,{expose:x}){const c=u(!1),m=u(),p=u(),d=`app-confirm-title-${g()}`,y=`app-confirm-message-${g()}`,n=N({title:"请确认操作",message:"",confirmText:"确定",cancelText:"取消",tone:"warning",closeOnOverlay:!1});let o=null,i=null;function s(a){c.value=!1;const e=o;o=null,e==null||e(a)}function h(a){return o&&s(!1),Object.assign(n,{confirmText:"确定",cancelText:"取消",tone:"warning",closeOnOverlay:!1,...a}),c.value=!0,new Promise(e=>{o=e})}function w(){n.closeOnOverlay&&s(!1)}function T(a){var b;if(a.key==="Escape"){a.preventDefault(),s(!1);return}if(a.key!=="Tab")return;const e=Array.from(((b=m.value)==null?void 0:b.querySelectorAll("button:not([disabled])"))??[]),l=e[0],f=e[e.length-1];!l||!f||(a.shiftKey&&document.activeElement===l?(a.preventDefault(),f.focus()):!a.shiftKey&&document.activeElement===f&&(a.preventDefault(),l.focus()))}return E(c,async a=>{var e;if(a){i=document.activeElement instanceof HTMLElement?document.activeElement:null,await k(),(e=p.value)==null||e.focus();return}await k(),i==null||i.focus(),i=null}),O(()=>{o==null||o(!1),o=null}),x({open:h}),(a,e)=>(_(),B(M,{to:"body"},[D($,{name:"app-confirm"},{default:A(()=>[c.value?(_(),I("div",{key:0,class:"app-confirm-overlay",onMousedown:K(w,["self"])},[t("section",{ref_key:"dialogRef",ref:m,class:v(["app-confirm-dialog",`is-${n.tone}`]),role:"alertdialog","aria-modal":!0,"aria-labelledby":d,"aria-describedby":y,onKeydown:T},[t("header",V,[t("div",z,[t("span",H,[t("i",{class:v(n.tone==="primary"?"fa fa-question-circle":"fa fa-exclamation-triangle")},null,2)]),t("h2",{id:d},r(n.title),1)]),t("button",{class:"app-confirm-close",type:"button","aria-label":"关闭确认弹窗",onClick:e[0]||(e[0]=l=>s(!1))},[...e[3]||(e[3]=[t("i",{class:"fa fa-times","aria-hidden":"true"},null,-1)])])]),t("div",L,[t("p",{id:y},r(n.message),1)]),t("footer",P,[t("button",{ref_key:"cancelButtonRef",ref:p,class:"app-confirm-button is-cancel",type:"button",onClick:e[1]||(e[1]=l=>s(!1))},r(n.cancelText),513),t("button",{class:"app-confirm-button is-confirm",type:"button",onClick:e[2]||(e[2]=l=>s(!0))},r(n.confirmText),1)])],34)],32)):q("",!0)]),_:1})]))}}),G=R(S,[["__scopeId","data-v-8d3bf6ad"]]);export{G as A};

View File

@@ -1 +1 @@
import{a as B,E as K}from"./el-form-item-DGwcZKHQ.js";import{E as M}from"./index-CoLjyrxq.js";import{E as h}from"./index-B2Z3XS2S.js";import{E as I}from"./el-tag-11zBoTqA.js";import{E as R}from"./el-divider-sRU3cxL5.js";import{E as F}from"./el-slider-DwabRetH.js";import{d as L,G as z,e as V,w as s,ac as D,y as $,o as f,s as a,x as p,q as j,c as k,ad as A,aa as b,f as E,M as G,g as J,v as O,z as H,j as _,A as P}from"./index-C8bRaOsd.js";import"./el-popper-BY86ZM1h.js";import"./el-tooltip-l0sNRNKZ.js";import"./el-input-number-HkIYFERV.js";import{P as Q}from"./PageCard-BsRjYlIm.js";import{u as W}from"./usePolling-LoVQKNlA.js";import{a as X}from"./compare-Blil53uq.js";import{a as Y}from"./status-Dl1fykxa.js";import{_ as Z}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./castArray-CJvOrS5l.js";import"./_baseClone-vUmDCUMu.js";import"./raf-BqR8BX9r.js";import"./index-BRf1Q2lS.js";import"./index-DE1Gc93o.js";import"./debounce-BADwekKz.js";import"./toNumber-Bt8UgFrr.js";import"./clamp-CNwRTQDt.js";import"./index-BpW9Z31J.js";import"./index-COFtI18L.js";import"./el-card-BXAZ-Y4u.js";const tt={class:"model-list"},et={key:0,class:"empty-hint"},ot=L({__name:"CompareChatView",setup(at){const T=D(),y=O(),x=T.params.id,n=$(null),e=H({systemPrompt:"",question:"",temperature:.7,topP:.9,topK:40,maxTokens:2048}),m=_(()=>{var l;if(!((l=n.value)!=null&&l.load_status))return[];try{return(typeof n.value.load_status=="string"?JSON.parse(n.value.load_status):n.value.load_status).loaded_models||[]}catch{return[]}}),C=_(()=>m.value.length>0&&m.value.every(l=>l.status==="ready"||l.status==="running")),g=_(()=>m.value.some(l=>l.status==="starting"));async function c(){try{n.value=await X(x)}catch{}}function S(){var u,i;if(!e.question.trim()){P.warning("请输入问题");return}if(g.value){P.warning("模型仍在启动中,请稍候");return}const l=new URLSearchParams({taskId:x,taskName:((u=n.value)==null?void 0:u.model_name)||((i=n.value)==null?void 0:i.name)||"",question:e.question,systemPrompt:e.systemPrompt,temperature:String(e.temperature),topP:String(e.topP),topK:String(e.topK),maxTokens:String(e.maxTokens)}),t=y.resolve(`/model-compare/result?${l.toString()}`).href;window.open(t,"_blank")}const{start:q}=W(c,5e3,{immediate:!1});return z(async()=>{await c(),q()}),(l,t)=>{const u=R,i=I,v=M,r=B,d=F,w=h,U=K;return f(),V(Q,{title:"模型对比配置"},{default:s(()=>[a(u,{"content-position":"left"},{default:s(()=>[...t[7]||(t[7]=[p("已启动模型",-1)])]),_:1}),j("div",tt,[(f(!0),k(G,null,A(m.value,(o,N)=>(f(),V(i,{key:N,type:o.status==="ready"||o.status==="running"?"success":o.status==="starting"?"warning":"danger",size:"large"},{default:s(()=>[p(b(o.model_name)+" ("+b(E(Y)(o.status))+") ",1)]),_:2},1032,["type"]))),128)),m.value.length?J("",!0):(f(),k("span",et,"暂无已启动模型"))]),a(u,{"content-position":"left"},{default:s(()=>[...t[8]||(t[8]=[p("对话配置",-1)])]),_:1}),a(U,{"label-width":"120px",style:{"max-width":"700px"}},{default:s(()=>[a(r,{label:"系统提示词"},{default:s(()=>[a(v,{modelValue:e.systemPrompt,"onUpdate:modelValue":t[0]||(t[0]=o=>e.systemPrompt=o),type:"textarea",rows:3,placeholder:"可选"},null,8,["modelValue"])]),_:1}),a(r,{label:"问题"},{default:s(()=>[a(v,{modelValue:e.question,"onUpdate:modelValue":t[1]||(t[1]=o=>e.question=o),type:"textarea",rows:4,placeholder:"请输入要对比的问题"},null,8,["modelValue"])]),_:1}),a(r,{label:"Temperature"},{default:s(()=>[a(d,{modelValue:e.temperature,"onUpdate:modelValue":t[2]||(t[2]=o=>e.temperature=o),min:0,max:2,step:.1,"show-input":"",style:{"max-width":"500px"}},null,8,["modelValue"])]),_:1}),a(r,{label:"Top-p"},{default:s(()=>[a(d,{modelValue:e.topP,"onUpdate:modelValue":t[3]||(t[3]=o=>e.topP=o),min:0,max:1,step:.05,"show-input":"",style:{"max-width":"500px"}},null,8,["modelValue"])]),_:1}),a(r,{label:"Top-k"},{default:s(()=>[a(d,{modelValue:e.topK,"onUpdate:modelValue":t[4]||(t[4]=o=>e.topK=o),min:1,max:100,step:1,"show-input":"",style:{"max-width":"500px"}},null,8,["modelValue"])]),_:1}),a(r,{label:"Max Tokens"},{default:s(()=>[a(d,{modelValue:e.maxTokens,"onUpdate:modelValue":t[5]||(t[5]=o=>e.maxTokens=o),min:256,max:4096,step:128,"show-input":"",style:{"max-width":"500px"}},null,8,["modelValue"])]),_:1}),a(r,null,{default:s(()=>[a(w,{type:"primary",disabled:!C.value||g.value,onClick:S},{default:s(()=>[...t[9]||(t[9]=[p(" 开始对比 ",-1)])]),_:1},8,["disabled"]),a(w,{onClick:t[6]||(t[6]=o=>E(y).back())},{default:s(()=>[...t[10]||(t[10]=[p("返回",-1)])]),_:1})]),_:1})]),_:1})]),_:1})}}}),Ut=Z(ot,[["__scopeId","data-v-fbe74cb0"]]);export{Ut as default}; import{a as B,E as K}from"./el-form-item-Ct_zBuY0.js";import{E as M}from"./index-CbmPSBt0.js";import{E as h}from"./index-CCavIuTY.js";import{E as I}from"./el-tag-C_D80BPW.js";import{E as R}from"./el-divider-DF2VMDw-.js";import{E as F}from"./el-slider-CM3VEvCM.js";import{d as L,G as z,e as V,w as s,ac as D,y as $,o as f,s as a,x as p,q as j,c as k,ad as A,aa as b,f as E,M as G,g as J,v as O,z as H,j as _,A as P}from"./index-CGB0A5x_.js";import"./el-popper-DvBtRO32.js";import"./el-tooltip-l0sNRNKZ.js";import"./el-input-number-VAjRO6-I.js";import{P as Q}from"./PageCard-D1lOaeEG.js";import{u as W}from"./usePolling-B4Zfd6BY.js";import{a as X}from"./compare-ClXsFp7Q.js";import{a as Y}from"./status-Dl1fykxa.js";import{_ as Z}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./castArray-Cgg396Sr.js";import"./_baseClone-CX1E8HTZ.js";import"./raf-CCivjDro.js";import"./index-D2-3cnGo.js";import"./index-DMVRI44M.js";import"./debounce-Bqww2DS8.js";import"./toNumber-IRhFg6gN.js";import"./clamp-BqqU4KQ-.js";import"./index-BPwPlcbL.js";import"./index-CL2S8yHq.js";import"./el-card-BWcR1iD2.js";const tt={class:"model-list"},et={key:0,class:"empty-hint"},ot=L({__name:"CompareChatView",setup(at){const T=D(),y=O(),x=T.params.id,n=$(null),e=H({systemPrompt:"",question:"",temperature:.7,topP:.9,topK:40,maxTokens:2048}),m=_(()=>{var l;if(!((l=n.value)!=null&&l.load_status))return[];try{return(typeof n.value.load_status=="string"?JSON.parse(n.value.load_status):n.value.load_status).loaded_models||[]}catch{return[]}}),C=_(()=>m.value.length>0&&m.value.every(l=>l.status==="ready"||l.status==="running")),g=_(()=>m.value.some(l=>l.status==="starting"));async function c(){try{n.value=await X(x)}catch{}}function S(){var u,i;if(!e.question.trim()){P.warning("请输入问题");return}if(g.value){P.warning("模型仍在启动中,请稍候");return}const l=new URLSearchParams({taskId:x,taskName:((u=n.value)==null?void 0:u.model_name)||((i=n.value)==null?void 0:i.name)||"",question:e.question,systemPrompt:e.systemPrompt,temperature:String(e.temperature),topP:String(e.topP),topK:String(e.topK),maxTokens:String(e.maxTokens)}),t=y.resolve(`/model-compare/result?${l.toString()}`).href;window.open(t,"_blank")}const{start:q}=W(c,5e3,{immediate:!1});return z(async()=>{await c(),q()}),(l,t)=>{const u=R,i=I,v=M,r=B,d=F,w=h,U=K;return f(),V(Q,{title:"模型对比配置"},{default:s(()=>[a(u,{"content-position":"left"},{default:s(()=>[...t[7]||(t[7]=[p("已启动模型",-1)])]),_:1}),j("div",tt,[(f(!0),k(G,null,A(m.value,(o,N)=>(f(),V(i,{key:N,type:o.status==="ready"||o.status==="running"?"success":o.status==="starting"?"warning":"danger",size:"large"},{default:s(()=>[p(b(o.model_name)+" ("+b(E(Y)(o.status))+") ",1)]),_:2},1032,["type"]))),128)),m.value.length?J("",!0):(f(),k("span",et,"暂无已启动模型"))]),a(u,{"content-position":"left"},{default:s(()=>[...t[8]||(t[8]=[p("对话配置",-1)])]),_:1}),a(U,{"label-width":"120px",style:{"max-width":"700px"}},{default:s(()=>[a(r,{label:"系统提示词"},{default:s(()=>[a(v,{modelValue:e.systemPrompt,"onUpdate:modelValue":t[0]||(t[0]=o=>e.systemPrompt=o),type:"textarea",rows:3,placeholder:"可选"},null,8,["modelValue"])]),_:1}),a(r,{label:"问题"},{default:s(()=>[a(v,{modelValue:e.question,"onUpdate:modelValue":t[1]||(t[1]=o=>e.question=o),type:"textarea",rows:4,placeholder:"请输入要对比的问题"},null,8,["modelValue"])]),_:1}),a(r,{label:"Temperature"},{default:s(()=>[a(d,{modelValue:e.temperature,"onUpdate:modelValue":t[2]||(t[2]=o=>e.temperature=o),min:0,max:2,step:.1,"show-input":"",style:{"max-width":"500px"}},null,8,["modelValue"])]),_:1}),a(r,{label:"Top-p"},{default:s(()=>[a(d,{modelValue:e.topP,"onUpdate:modelValue":t[3]||(t[3]=o=>e.topP=o),min:0,max:1,step:.05,"show-input":"",style:{"max-width":"500px"}},null,8,["modelValue"])]),_:1}),a(r,{label:"Top-k"},{default:s(()=>[a(d,{modelValue:e.topK,"onUpdate:modelValue":t[4]||(t[4]=o=>e.topK=o),min:1,max:100,step:1,"show-input":"",style:{"max-width":"500px"}},null,8,["modelValue"])]),_:1}),a(r,{label:"Max Tokens"},{default:s(()=>[a(d,{modelValue:e.maxTokens,"onUpdate:modelValue":t[5]||(t[5]=o=>e.maxTokens=o),min:256,max:4096,step:128,"show-input":"",style:{"max-width":"500px"}},null,8,["modelValue"])]),_:1}),a(r,null,{default:s(()=>[a(w,{type:"primary",disabled:!C.value||g.value,onClick:S},{default:s(()=>[...t[9]||(t[9]=[p(" 开始对比 ",-1)])]),_:1},8,["disabled"]),a(w,{onClick:t[6]||(t[6]=o=>E(y).back())},{default:s(()=>[...t[10]||(t[10]=[p("返回",-1)])]),_:1})]),_:1})]),_:1})]),_:1})}}}),Ut=Z(ot,[["__scopeId","data-v-fbe74cb0"]]);export{Ut as default};

View File

@@ -1 +1 @@
import{E as D}from"./el-alert-CdZFij8S.js";import{E as $}from"./index-B2Z3XS2S.js";import{E as z}from"./el-tag-11zBoTqA.js";import{E as F}from"./el-card-BXAZ-Y4u.js";import{d as O,G as U,H as J,c as d,q as i,aa as c,f as v,s as N,w as m,M as K,ad as A,ac as G,y as g,o as r,x as p,e as y,g as H}from"./index-C8bRaOsd.js";import{_ as L}from"./MarkdownView.vue_vue_type_style_index_0_lang-ChNJyyZs.js";import{a as W,c as j}from"./compare-Blil53uq.js";import{_ as Q}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./vnode-B9WOR-0a.js";const X={class:"compare-result"},Y={class:"result-header"},Z={class:"header-actions"},tt={class:"result-grid"},et={class:"card-header"},st={class:"model-name"},ot={key:0,class:"error-text"},at={key:1,class:"streaming-text"},nt={key:3,class:"loading-text"},lt={key:4,class:"result-stats"},rt=O({__name:"CompareResultView",setup(it){const u=G(),q=u.query.taskId,k=decodeURIComponent(u.query.question||""),h=decodeURIComponent(u.query.systemPrompt||""),E=Number(u.query.temperature||.7),P=Number(u.query.topP||.9),I=Number(u.query.topK||40),b=Number(u.query.maxTokens||2048),w=u.query.taskName,l=g([]),C=g(!1),x=g([]),f=new Set;async function B(){if(!C.value){C.value=!0;try{const s=await W(q);let t=[];s.load_status&&(t=(typeof s.load_status=="string"?JSON.parse(s.load_status):s.load_status).loaded_models||[]),x.value=t,l.value=t.map(o=>({name:o.model_name||"模型",content:"",displayContent:"",isTyping:!1,status:"loading"})),await Promise.all(t.map((o,e)=>S(o,e)))}catch{}}}async function S(s,t){const o=Date.now();try{const e=await V(j({port:s.port,model_name:s.model_name,messages:[...h?[{role:"system",content:h}]:[],{role:"user",content:k}],temperature:E,top_p:P,top_k:I,max_tokens:b}),3e5),a=(e==null?void 0:e.response)||(e==null?void 0:e.content)||(e==null?void 0:e.data)||JSON.stringify(e),_=(Date.now()-o)/1e3;l.value[t].content=a,l.value[t].status="done",l.value[t].stats={totalTime:_,charsPerSec:_>0?Number((a.length/_).toFixed(1)):0},M(t,a)}catch(e){l.value[t].content="推理失败: "+(e.message||""),l.value[t].status="error"}}async function V(s,t){let o=null;try{return await Promise.race([s,new Promise((e,a)=>{o=setTimeout(()=>a(new Error("推理超时")),t)})])}finally{o&&clearTimeout(o)}}function M(s,t){let o=0;l.value[s].isTyping=!0;const e=Math.max(2,Math.ceil(t.length/30)),a=setInterval(()=>{o+=e,l.value[s].displayContent=t.slice(0,o),o>=t.length&&(clearInterval(a),f.delete(a),l.value[s].displayContent=t,l.value[s].isTyping=!1)},50);f.add(a)}return U(B),J(()=>{f.forEach(clearInterval),f.clear()}),(s,t)=>{const o=$,e=D,a=z,_=F;return r(),d("div",X,[i("div",Y,[i("h2",null,"对比结果"+c(v(w)?` - ${v(w)}`:""),1),i("div",Z,[N(o,{onClick:t[0]||(t[0]=n=>s.$router.push("/model-inference"))},{default:m(()=>[...t[1]||(t[1]=[p("返回列表",-1)])]),_:1})])]),N(e,{type:"info",closable:!1,"show-icon":"",class:"question-box"},{title:m(()=>[t[2]||(t[2]=i("strong",null,"问题:",-1)),p(c(v(k)),1)]),_:1}),i("div",tt,[(r(!0),d(K,null,A(l.value,(n,R)=>(r(),y(_,{key:R,shadow:"hover",class:"result-card"},{header:m(()=>[i("div",et,[i("span",st,c(n.name),1),n.status==="loading"?(r(),y(a,{key:0,type:"warning",size:"small"},{default:m(()=>[...t[3]||(t[3]=[p("生成中...",-1)])]),_:1})):n.status==="done"?(r(),y(a,{key:1,type:"success",size:"small"},{default:m(()=>[...t[4]||(t[4]=[p("完成",-1)])]),_:1})):(r(),y(a,{key:2,type:"danger",size:"small"},{default:m(()=>[...t[5]||(t[5]=[p("失败",-1)])]),_:1}))])]),default:m(()=>{var T;return[n.status==="error"?(r(),d("div",ot,c(n.content),1)):n.isTyping?(r(),d("div",at,c(n.displayContent),1)):n.displayContent?(r(),y(L,{key:2,content:n.displayContent},null,8,["content"])):(r(),d("div",nt,[...t[6]||(t[6]=[i("i",{class:"fa fa-spinner fa-spin"},null,-1),p(" 正在生成回答... ",-1)])])),n.stats?(r(),d("div",lt,[i("span",null,"耗时 "+c((T=n.stats.totalTime)==null?void 0:T.toFixed(1))+"s",1),i("span",null,"速度 "+c(n.stats.charsPerSec)+" 字/秒",1)])):H("",!0)]}),_:2},1024))),128))])])}}}),gt=Q(rt,[["__scopeId","data-v-8391f389"]]);export{gt as default}; import{E as D}from"./el-alert-DBfM1mZE.js";import{E as $}from"./index-CCavIuTY.js";import{E as z}from"./el-tag-C_D80BPW.js";import{E as F}from"./el-card-BWcR1iD2.js";import{d as O,G as U,H as J,c as d,q as i,aa as c,f as v,s as N,w as m,M as K,ad as A,ac as G,y as g,o as r,x as p,e as y,g as H}from"./index-CGB0A5x_.js";import{_ as L}from"./MarkdownView.vue_vue_type_style_index_0_lang-DqO2Wm8-.js";import{a as W,c as j}from"./compare-ClXsFp7Q.js";import{_ as Q}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./vnode-DFpZw5lG.js";const X={class:"compare-result"},Y={class:"result-header"},Z={class:"header-actions"},tt={class:"result-grid"},et={class:"card-header"},st={class:"model-name"},ot={key:0,class:"error-text"},at={key:1,class:"streaming-text"},nt={key:3,class:"loading-text"},lt={key:4,class:"result-stats"},rt=O({__name:"CompareResultView",setup(it){const u=G(),q=u.query.taskId,k=decodeURIComponent(u.query.question||""),h=decodeURIComponent(u.query.systemPrompt||""),E=Number(u.query.temperature||.7),P=Number(u.query.topP||.9),I=Number(u.query.topK||40),b=Number(u.query.maxTokens||2048),w=u.query.taskName,l=g([]),C=g(!1),x=g([]),f=new Set;async function B(){if(!C.value){C.value=!0;try{const s=await W(q);let t=[];s.load_status&&(t=(typeof s.load_status=="string"?JSON.parse(s.load_status):s.load_status).loaded_models||[]),x.value=t,l.value=t.map(o=>({name:o.model_name||"模型",content:"",displayContent:"",isTyping:!1,status:"loading"})),await Promise.all(t.map((o,e)=>S(o,e)))}catch{}}}async function S(s,t){const o=Date.now();try{const e=await V(j({port:s.port,model_name:s.model_name,messages:[...h?[{role:"system",content:h}]:[],{role:"user",content:k}],temperature:E,top_p:P,top_k:I,max_tokens:b}),3e5),a=(e==null?void 0:e.response)||(e==null?void 0:e.content)||(e==null?void 0:e.data)||JSON.stringify(e),_=(Date.now()-o)/1e3;l.value[t].content=a,l.value[t].status="done",l.value[t].stats={totalTime:_,charsPerSec:_>0?Number((a.length/_).toFixed(1)):0},M(t,a)}catch(e){l.value[t].content="推理失败: "+(e.message||""),l.value[t].status="error"}}async function V(s,t){let o=null;try{return await Promise.race([s,new Promise((e,a)=>{o=setTimeout(()=>a(new Error("推理超时")),t)})])}finally{o&&clearTimeout(o)}}function M(s,t){let o=0;l.value[s].isTyping=!0;const e=Math.max(2,Math.ceil(t.length/30)),a=setInterval(()=>{o+=e,l.value[s].displayContent=t.slice(0,o),o>=t.length&&(clearInterval(a),f.delete(a),l.value[s].displayContent=t,l.value[s].isTyping=!1)},50);f.add(a)}return U(B),J(()=>{f.forEach(clearInterval),f.clear()}),(s,t)=>{const o=$,e=D,a=z,_=F;return r(),d("div",X,[i("div",Y,[i("h2",null,"对比结果"+c(v(w)?` - ${v(w)}`:""),1),i("div",Z,[N(o,{onClick:t[0]||(t[0]=n=>s.$router.push("/model-inference"))},{default:m(()=>[...t[1]||(t[1]=[p("返回列表",-1)])]),_:1})])]),N(e,{type:"info",closable:!1,"show-icon":"",class:"question-box"},{title:m(()=>[t[2]||(t[2]=i("strong",null,"问题:",-1)),p(c(v(k)),1)]),_:1}),i("div",tt,[(r(!0),d(K,null,A(l.value,(n,R)=>(r(),y(_,{key:R,shadow:"hover",class:"result-card"},{header:m(()=>[i("div",et,[i("span",st,c(n.name),1),n.status==="loading"?(r(),y(a,{key:0,type:"warning",size:"small"},{default:m(()=>[...t[3]||(t[3]=[p("生成中...",-1)])]),_:1})):n.status==="done"?(r(),y(a,{key:1,type:"success",size:"small"},{default:m(()=>[...t[4]||(t[4]=[p("完成",-1)])]),_:1})):(r(),y(a,{key:2,type:"danger",size:"small"},{default:m(()=>[...t[5]||(t[5]=[p("失败",-1)])]),_:1}))])]),default:m(()=>{var T;return[n.status==="error"?(r(),d("div",ot,c(n.content),1)):n.isTyping?(r(),d("div",at,c(n.displayContent),1)):n.displayContent?(r(),y(L,{key:2,content:n.displayContent},null,8,["content"])):(r(),d("div",nt,[...t[6]||(t[6]=[i("i",{class:"fa fa-spinner fa-spin"},null,-1),p(" 正在生成回答... ",-1)])])),n.stats?(r(),d("div",lt,[i("span",null,"耗时 "+c((T=n.stats.totalTime)==null?void 0:T.toFixed(1))+"s",1),i("span",null,"速度 "+c(n.stats.charsPerSec)+" 字/秒",1)])):H("",!0)]}),_:2},1024))),128))])])}}}),gt=Q(rt,[["__scopeId","data-v-8391f389"]]);export{gt as default};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{a as N,E as v}from"./el-form-item-DGwcZKHQ.js";import{E as b}from"./el-popper-BY86ZM1h.js";import{E as O}from"./index-CoLjyrxq.js";import{E as S}from"./index-B2Z3XS2S.js";import{E as g,a as E}from"./el-select-DzauTPwe.js";import{d as J,e as V,w as e,o as w,q as t,s as l,x as i,z as x,A as C}from"./index-C8bRaOsd.js";import"./el-tooltip-l0sNRNKZ.js";import"./el-scrollbar-CMp13_RQ.js";import"./el-tag-11zBoTqA.js";import{P as U}from"./PageCard-BsRjYlIm.js";import{_ as y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./castArray-CJvOrS5l.js";import"./_baseClone-vUmDCUMu.js";import"./index-DE1Gc93o.js";import"./index-BpW9Z31J.js";import"./raf-BqR8BX9r.js";import"./index-BRf1Q2lS.js";import"./vnode-B9WOR-0a.js";import"./index-BVldZEzQ.js";import"./scroll-DL9cY7fX.js";import"./clamp-CNwRTQDt.js";import"./toNumber-Bt8UgFrr.js";import"./_baseIteratee-7-PMrTPE.js";import"./el-card-BXAZ-Y4u.js";const F={class:"converter-panel"},L={class:"form-row"},T={class:"panel-footer"},B={class:"actions"},k=J({__name:"DataConvertView",setup(I){const a=x({outputName:"converted-data",encoding:"UTF-8"});function p(){C.info("当前仅完成界面设计,转换功能将在后续接入")}function d(){Object.assign(a,{outputName:"converted-data",encoding:"UTF-8"})}return(j,o)=>{const n=N,m=O,u=E,f=g,c=v,r=S,_=b;return w(),V(U,{class:"data-convert-page",title:"数据类型转换",subtitle:"将 JSON 文件转换为便于训练和评测使用的 JSONL 格式"},{default:e(()=>[t("div",F,[o[9]||(o[9]=t("div",{class:"panel-header"},[t("div",{class:"tool-icon","aria-hidden":"true"},[t("i",{class:"fa fa-exchange"})]),t("div",null,[t("h3",null,"JSON 转 JSONL"),t("p",null,"每条 JSON 数据将输出为 JSONL 文件中的一行记录")])],-1)),l(c,{class:"converter-form","label-position":"top"},{default:e(()=>[l(n,{label:"转换类型"},{default:e(()=>[...o[2]||(o[2]=[t("div",{class:"format-field","aria-label":"JSON 转 JSONL"},[t("span",null,"JSON"),t("i",{class:"fa fa-long-arrow-right","aria-hidden":"true"}),t("span",null,"JSONL")],-1)])]),_:1}),l(n,{label:"源文件",required:""},{default:e(()=>[t("button",{class:"upload-zone",type:"button",onClick:p},[...o[3]||(o[3]=[t("i",{class:"fa fa-cloud-upload","aria-hidden":"true"},null,-1),t("span",{class:"upload-content"},[t("strong",null,"点击选择或拖拽 JSON 文件到此处"),t("small",null,"仅支持 .json 格式,单文件不超过 200 MB")],-1),t("span",{class:"select-button"},"选择文件",-1)])])]),_:1}),t("div",L,[l(n,{label:"输出文件名"},{default:e(()=>[l(m,{modelValue:a.outputName,"onUpdate:modelValue":o[0]||(o[0]=s=>a.outputName=s)},{append:e(()=>[...o[4]||(o[4]=[i(".jsonl",-1)])]),_:1},8,["modelValue"])]),_:1}),l(n,{label:"字符编码"},{default:e(()=>[l(f,{modelValue:a.encoding,"onUpdate:modelValue":o[1]||(o[1]=s=>a.encoding=s),style:{width:"100%"}},{default:e(()=>[l(u,{label:"UTF-8",value:"UTF-8"})]),_:1},8,["modelValue"])]),_:1})]),o[5]||(o[5]=t("div",{class:"format-tip"},[t("i",{class:"fa fa-info-circle","aria-hidden":"true"}),t("span",null,"支持由 JSON 数组转换为 JSONL每个数组元素输出为一行。")],-1))]),_:1}),t("div",T,[o[8]||(o[8]=t("span",{class:"prototype-label"},"当前为 UI 原型,暂不执行实际转换",-1)),t("div",B,[l(r,{onClick:d},{default:e(()=>[...o[6]||(o[6]=[i("重置",-1)])]),_:1}),l(_,{content:"转换功能将在后续开发中接入",placement:"top"},{default:e(()=>[t("span",null,[l(r,{type:"primary",disabled:""},{default:e(()=>[...o[7]||(o[7]=[i("开始转换",-1)])]),_:1})])]),_:1})])])])]),_:1})}}}),it=y(k,[["__scopeId","data-v-89a8493f"]]);export{it as default}; import{a as N,E as v}from"./el-form-item-Ct_zBuY0.js";import{E as b}from"./el-popper-DvBtRO32.js";import{E as O}from"./index-CbmPSBt0.js";import{E as S}from"./index-CCavIuTY.js";import{E as g,a as E}from"./el-select-C59URVI0.js";import{d as J,e as V,w as e,o as w,q as t,s as l,x as i,z as x,A as C}from"./index-CGB0A5x_.js";import"./el-tooltip-l0sNRNKZ.js";import"./el-scrollbar-p6_f_LH2.js";import"./el-tag-C_D80BPW.js";import{P as U}from"./PageCard-D1lOaeEG.js";import{_ as y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./castArray-Cgg396Sr.js";import"./_baseClone-CX1E8HTZ.js";import"./index-DMVRI44M.js";import"./index-BPwPlcbL.js";import"./raf-CCivjDro.js";import"./index-D2-3cnGo.js";import"./vnode-DFpZw5lG.js";import"./index-khuXz7sd.js";import"./scroll-C0BSy_Rk.js";import"./clamp-BqqU4KQ-.js";import"./toNumber-IRhFg6gN.js";import"./_baseIteratee-uVh0OyD5.js";import"./el-card-BWcR1iD2.js";const F={class:"converter-panel"},L={class:"form-row"},T={class:"panel-footer"},B={class:"actions"},k=J({__name:"DataConvertView",setup(I){const a=x({outputName:"converted-data",encoding:"UTF-8"});function p(){C.info("当前仅完成界面设计,转换功能将在后续接入")}function d(){Object.assign(a,{outputName:"converted-data",encoding:"UTF-8"})}return(j,o)=>{const n=N,m=O,u=E,f=g,c=v,r=S,_=b;return w(),V(U,{class:"data-convert-page",title:"数据类型转换",subtitle:"将 JSON 文件转换为便于训练和评测使用的 JSONL 格式"},{default:e(()=>[t("div",F,[o[9]||(o[9]=t("div",{class:"panel-header"},[t("div",{class:"tool-icon","aria-hidden":"true"},[t("i",{class:"fa fa-exchange"})]),t("div",null,[t("h3",null,"JSON 转 JSONL"),t("p",null,"每条 JSON 数据将输出为 JSONL 文件中的一行记录")])],-1)),l(c,{class:"converter-form","label-position":"top"},{default:e(()=>[l(n,{label:"转换类型"},{default:e(()=>[...o[2]||(o[2]=[t("div",{class:"format-field","aria-label":"JSON 转 JSONL"},[t("span",null,"JSON"),t("i",{class:"fa fa-long-arrow-right","aria-hidden":"true"}),t("span",null,"JSONL")],-1)])]),_:1}),l(n,{label:"源文件",required:""},{default:e(()=>[t("button",{class:"upload-zone",type:"button",onClick:p},[...o[3]||(o[3]=[t("i",{class:"fa fa-cloud-upload","aria-hidden":"true"},null,-1),t("span",{class:"upload-content"},[t("strong",null,"点击选择或拖拽 JSON 文件到此处"),t("small",null,"仅支持 .json 格式,单文件不超过 200 MB")],-1),t("span",{class:"select-button"},"选择文件",-1)])])]),_:1}),t("div",L,[l(n,{label:"输出文件名"},{default:e(()=>[l(m,{modelValue:a.outputName,"onUpdate:modelValue":o[0]||(o[0]=s=>a.outputName=s)},{append:e(()=>[...o[4]||(o[4]=[i(".jsonl",-1)])]),_:1},8,["modelValue"])]),_:1}),l(n,{label:"字符编码"},{default:e(()=>[l(f,{modelValue:a.encoding,"onUpdate:modelValue":o[1]||(o[1]=s=>a.encoding=s),style:{width:"100%"}},{default:e(()=>[l(u,{label:"UTF-8",value:"UTF-8"})]),_:1},8,["modelValue"])]),_:1})]),o[5]||(o[5]=t("div",{class:"format-tip"},[t("i",{class:"fa fa-info-circle","aria-hidden":"true"}),t("span",null,"支持由 JSON 数组转换为 JSONL每个数组元素输出为一行。")],-1))]),_:1}),t("div",T,[o[8]||(o[8]=t("span",{class:"prototype-label"},"当前为 UI 原型,暂不执行实际转换",-1)),t("div",B,[l(r,{onClick:d},{default:e(()=>[...o[6]||(o[6]=[i("重置",-1)])]),_:1}),l(_,{content:"转换功能将在后续开发中接入",placement:"top"},{default:e(()=>[t("span",null,[l(r,{type:"primary",disabled:""},{default:e(()=>[...o[7]||(o[7]=[i("开始转换",-1)])]),_:1})])]),_:1})])])])]),_:1})}}}),it=y(k,[["__scopeId","data-v-89a8493f"]]);export{it as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
import{E as B}from"./index-B2Z3XS2S.js";import{E as C}from"./el-tag-11zBoTqA.js";import{E as N}from"./el-table-48yEgKcK.js";import{d as z,G as P,c as g,s as o,w as s,y as n,o as d,q as f,x as r,e as V,aa as c,A as I,v as L}from"./index-C8bRaOsd.js";import{E as M}from"./index-CKkhcTW-.js";import"./el-checkbox-Jsj5DifU.js";import{D as $}from"./DataTablePage-BByewB8Y.js";import{_ as S}from"./ModelStatusTag.vue_vue_type_script_setup_true_lang-hMjP8G6o.js";import{g as q,d as A}from"./dataProcess-VAqZJsUM.js";import{_ as G}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./el-scrollbar-CMp13_RQ.js";import"./index-DE1Gc93o.js";import"./el-popper-BY86ZM1h.js";import"./index-BpW9Z31J.js";import"./_baseClone-vUmDCUMu.js";import"./_baseIteratee-7-PMrTPE.js";import"./castArray-CJvOrS5l.js";import"./debounce-BADwekKz.js";import"./toNumber-Bt8UgFrr.js";import"./raf-BqR8BX9r.js";import"./validator-DZBWmtBZ.js";import"./index-BIY0gTx5.js";import"./clamp-CNwRTQDt.js";import"./index-CMlv-HLm.js";import"./scroll-DL9cY7fX.js";import"./index-CoLjyrxq.js";import"./index-BRf1Q2lS.js";import"./omit-BHHw65tB.js";import"./el-card-BXAZ-Y4u.js";import"./el-pagination-Ca9Xqxww.js";import"./el-select-DzauTPwe.js";import"./vnode-B9WOR-0a.js";import"./index-BVldZEzQ.js";import"./directive-D_bJoBNR.js";import"./el-tooltip-l0sNRNKZ.js";import"./status-Dl1fykxa.js";const R={class:"data-process-page",style:{height:"100%"}},j={key:1},F={class:"action-buttons"},H=z({__name:"DataProcessListView",setup(J){const y={structured:"结构化数据",unstructured:"非结构化数据",external:"外来数据源拉取"},h=L(),l=n([]),p=n(!1),m=n(null),u=n("");async function v(t=!1){t||(p.value=!0),u.value="";try{const a=await q({page:1,page_size:200});l.value=a.items}catch{u.value="数据处理任务加载失败,请稍后重试。"}finally{t||(p.value=!1)}}function x(t){const a=t.id;h.push({name:"data-process-detail",params:{id:a}})}async function b(t){try{await M.confirm(`确定删除数据处理任务“${t.name}”吗?删除后无法恢复。`,"确认删除",{type:"warning",confirmButtonText:"删除",cancelButtonText:"取消",confirmButtonClass:"el-button--danger"})}catch{return}m.value=t.id;try{await A(t.id),l.value=l.value.filter(a=>a.id!==t.id),I.success("数据处理任务已删除")}catch{}finally{m.value=null}}function D(t){if(!t)return"-";const a=new Date(t);return Number.isNaN(a.getTime())?t:a.toLocaleString("zh-CN",{hour12:!1})}function k(t){return t.source_dataset_name||t.source_dataset||"-"}function w(t){return t.output_dataset_name||t.output_dataset||"-"}return P(v),(t,a)=>{const i=N,E=C,_=B;return d(),g("div",R,[o($,{title:"",data:l.value,loading:p.value,searchable:"","search-fields":["name"],"create-text":"新建数据处理","create-to":"/data-process/create","row-key":"id","page-size":10,"empty-text":u.value||"暂无数据处理任务"},{columns:s(()=>[o(i,{label:"任务ID",prop:"id",align:"center",width:"100"}),o(i,{label:"任务名称",prop:"name",align:"center","show-overflow-tooltip":""}),o(i,{label:"任务状态",align:"center",width:"110"},{default:s(({row:e})=>[o(S,{status:e.status},null,8,["status"])]),_:1}),o(i,{label:"处理类型",align:"center",width:"140"},{default:s(({row:e})=>[e.process_type?(d(),V(E,{key:0,size:"small",type:"info",effect:"plain"},{default:s(()=>[r(c(y[e.process_type]||e.process_type),1)]),_:2},1024)):(d(),g("span",j,"-"))]),_:1}),o(i,{label:"源数据集",align:"center","show-overflow-tooltip":""},{default:s(({row:e})=>[r(c(k(e)),1)]),_:1}),o(i,{label:"输出数据集",align:"center","show-overflow-tooltip":""},{default:s(({row:e})=>[r(c(w(e)),1)]),_:1}),o(i,{label:"创建时间",align:"center",width:"190"},{default:s(({row:e})=>[r(c(D(e.create_time||e.created_at)),1)]),_:1})]),actions:s(({row:e})=>[f("div",F,[o(_,{type:"primary",link:"",size:"small",onClick:T=>x(e)},{default:s(()=>[...a[0]||(a[0]=[f("i",{class:"fa fa-file-text-o",style:{"margin-right":"4px"}},null,-1),r("详情 ",-1)])]),_:1},8,["onClick"]),o(_,{type:"danger",link:"",size:"small",loading:m.value===e.id,onClick:T=>b(e)},{default:s(()=>[...a[1]||(a[1]=[f("i",{class:"fa fa-trash-o",style:{"margin-right":"4px"}},null,-1),r("删除 ",-1)])]),_:1},8,["loading","onClick"])])]),_:1},8,["data","loading","empty-text"])])}}}),Ct=G(H,[["__scopeId","data-v-71f2711e"]]);export{Ct as default};

View File

@@ -0,0 +1 @@
import{E as z}from"./index-CCavIuTY.js";import{E as L}from"./el-tag-C_D80BPW.js";import{E as M}from"./el-table-DkdQ6gPU.js";import{d as P,G as V,c as h,s as o,w as s,y as c,o as d,q as f,x as n,f as b,aa as r,e as $,A as I,v as S}from"./index-CGB0A5x_.js";import{E as q}from"./index-BMrs0kLP.js";import"./el-checkbox-Ci1DH0Aj.js";import{D as A}from"./DataTablePage-CURtmoAI.js";import{g as F,d as G}from"./dataProcess-D7vRt2n_.js";import{d as v}from"./dataProcessStatus-BNY61_45.js";import{_ as R}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./el-scrollbar-p6_f_LH2.js";import"./index-DMVRI44M.js";import"./el-popper-DvBtRO32.js";import"./index-BPwPlcbL.js";import"./_baseClone-CX1E8HTZ.js";import"./_baseIteratee-uVh0OyD5.js";import"./castArray-Cgg396Sr.js";import"./debounce-Bqww2DS8.js";import"./toNumber-IRhFg6gN.js";import"./raf-CCivjDro.js";import"./validator-D7tSoy2w.js";import"./index-Coa9QRND.js";import"./clamp-BqqU4KQ-.js";import"./index-C5EKbiob.js";import"./scroll-C0BSy_Rk.js";import"./index-CbmPSBt0.js";import"./index-D2-3cnGo.js";import"./omit-DaFv1hTo.js";import"./el-card-BWcR1iD2.js";import"./el-pagination-DGQ0vO_O.js";import"./el-select-C59URVI0.js";import"./vnode-DFpZw5lG.js";import"./index-khuXz7sd.js";import"./directive-vzjADwzS.js";import"./el-tooltip-l0sNRNKZ.js";const j={class:"data-process-page",style:{height:"100%"}},H={key:1},J={class:"action-buttons"},K=P({__name:"DataProcessListView",setup(O){const x={structured:"结构化数据",unstructured:"非结构化数据",external:"外来数据源拉取"},k=S(),l=c([]),p=c(!1),m=c(null),u=c("");async function D(t=!1){t||(p.value=!0),u.value="";try{const a=await F({page:1,page_size:200});l.value=a.items}catch{u.value="数据处理任务加载失败,请稍后重试。"}finally{t||(p.value=!1)}}function C(t){const a=t.id;k.push({name:"data-process-detail",params:{id:a}})}async function E(t){try{await q.confirm(`确定删除数据处理任务“${t.name}”吗?删除后无法恢复。`,"确认删除",{type:"warning",confirmButtonText:"删除",cancelButtonText:"取消",confirmButtonClass:"el-button--danger"})}catch{return}m.value=t.id;try{await G(t.id),l.value=l.value.filter(a=>a.id!==t.id),I.success("数据处理任务已删除")}catch{}finally{m.value=null}}function T(t){if(!t)return"-";const a=new Date(t);return Number.isNaN(a.getTime())?t:a.toLocaleString("zh-CN",{hour12:!1})}function _(t){const a=Number(t);return Number.isFinite(a)?Math.max(0,Math.trunc(a)):0}function w(t){return`${_(t.source_file_count)}`}function B(t){return`${_(t.output_count)}`}return V(D),(t,a)=>{const i=M,g=L,y=z;return d(),h("div",j,[o(A,{title:"",data:l.value,loading:p.value,searchable:"","search-fields":["name"],"create-text":"新建数据处理","create-to":"/data-process/create","row-key":"id","page-size":10,"empty-text":u.value||"暂无数据处理任务"},{columns:s(()=>[o(i,{label:"任务ID",prop:"id",align:"center",width:"100"}),o(i,{label:"任务名称",prop:"name",align:"center","show-overflow-tooltip":""}),o(i,{label:"任务状态",align:"center",width:"110"},{default:s(({row:e})=>[o(g,{type:b(v)(e).type,size:"small",effect:"light"},{default:s(()=>[n(r(b(v)(e).label),1)]),_:2},1032,["type"])]),_:1}),o(i,{label:"处理类型",align:"center",width:"140"},{default:s(({row:e})=>[e.process_type?(d(),$(g,{key:0,size:"small",type:"info",effect:"plain"},{default:s(()=>[n(r(x[e.process_type]||e.process_type),1)]),_:2},1024)):(d(),h("span",H,"-"))]),_:1}),o(i,{label:"文档数量",align:"center",width:"120"},{default:s(({row:e})=>[n(r(w(e)),1)]),_:1}),o(i,{label:"生成个数",align:"center",width:"120"},{default:s(({row:e})=>[n(r(B(e)),1)]),_:1}),o(i,{label:"创建时间",align:"center",width:"190"},{default:s(({row:e})=>[n(r(T(e.create_time||e.created_at)),1)]),_:1})]),actions:s(({row:e})=>[f("div",J,[o(y,{type:"primary",link:"",size:"small",onClick:N=>C(e)},{default:s(()=>[...a[0]||(a[0]=[f("i",{class:"fa fa-file-text-o",style:{"margin-right":"4px"}},null,-1),n("详情 ",-1)])]),_:1},8,["onClick"]),o(y,{type:"danger",link:"",size:"small",loading:m.value===e.id,onClick:N=>E(e)},{default:s(()=>[...a[1]||(a[1]=[f("i",{class:"fa fa-trash-o",style:{"margin-right":"4px"}},null,-1),n("删除 ",-1)])]),_:1},8,["loading","onClick"])])]),_:1},8,["data","loading","empty-text"])])}}}),Nt=R(K,[["__scopeId","data-v-c2486738"]]);export{Nt as default};

View File

@@ -0,0 +1 @@
.action-buttons[data-v-c2486738]{display:flex;justify-content:center;gap:8px}

View File

@@ -1 +0,0 @@
.action-buttons[data-v-71f2711e]{display:flex;justify-content:center;gap:8px}

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{E}from"./index-B2Z3XS2S.js";import{E as T}from"./el-tag-11zBoTqA.js";import{E as L}from"./el-table-48yEgKcK.js";import{d as A,y as f,G as V,e as k,w as e,ac as $,j as B,o as y,q as r,s as l,x as i,g as N,aa as p,f as b,aY as P,aZ as S,n as w,v as M,A as R}from"./index-C8bRaOsd.js";import"./el-checkbox-Jsj5DifU.js";import{D as q}from"./DataTablePage-BByewB8Y.js";import{g as G,d as I,a as Y}from"./dataset-sRW8EmKW.js";import{_ as j}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./el-scrollbar-CMp13_RQ.js";import"./index-DE1Gc93o.js";import"./el-popper-BY86ZM1h.js";import"./index-BpW9Z31J.js";import"./_baseClone-vUmDCUMu.js";import"./_baseIteratee-7-PMrTPE.js";import"./castArray-CJvOrS5l.js";import"./debounce-BADwekKz.js";import"./toNumber-Bt8UgFrr.js";import"./raf-BqR8BX9r.js";import"./omit-BHHw65tB.js";import"./index-CoLjyrxq.js";import"./index-BRf1Q2lS.js";import"./el-card-BXAZ-Y4u.js";import"./el-pagination-Ca9Xqxww.js";import"./el-select-DzauTPwe.js";import"./vnode-B9WOR-0a.js";import"./index-BVldZEzQ.js";import"./scroll-DL9cY7fX.js";import"./clamp-CNwRTQDt.js";import"./directive-D_bJoBNR.js";import"./index-CKkhcTW-.js";import"./validator-DZBWmtBZ.js";import"./index-BIY0gTx5.js";import"./index-CMlv-HLm.js";import"./el-tooltip-l0sNRNKZ.js";const O={class:"capsule-tabs"},U={class:"action-buttons"},Z=A({__name:"DatasetListView",setup(F){const C=M(),D=$(),c=f(!1),u=f([]),n=f(D.query.tab==="task"?"task":"upload"),h=B(()=>n.value==="task"?u.value.filter(s=>s.source==="task"):u.value.filter(s=>s.source!=="task"));async function d(){c.value=!0;try{u.value=await G()||[]}catch{}finally{c.value=!1}}async function _(s){await I(s.id),u.value=u.value.filter(a=>a.id!==s.id),await d(),R.success("删除成功")}function x(s){C.push(`/dataset/${s.id}/preview`)}function z(s){window.open(Y(s.id),"_blank")}return V(d),(s,a)=>{const o=L,v=T,m=E;return y(),k(q,{title:"数据集管理",data:h.value,loading:c.value,searchable:"","search-fields":["name","description"],"create-text":n.value==="upload"?"上传数据集":"","create-to":"/dataset/create","delete-fn":_,"row-key":"id",onRefresh:d},{title:e(()=>[r("div",O,[r("button",{class:w(["capsule-tab-item",{active:n.value==="upload"}]),onClick:a[0]||(a[0]=t=>n.value="upload")}," 上传任务 ",2),r("button",{class:w(["capsule-tab-item",{active:n.value==="task"}]),onClick:a[1]||(a[1]=t=>n.value="task")}," 数据任务 ",2)])]),columns:e(()=>[n.value==="task"?(y(),k(o,{key:0,label:"任务ID",prop:"task_id",align:"center",width:"100"})):N("",!0),l(o,{label:"数据集名称",prop:"name",align:"center"}),l(o,{label:"数据类型",align:"center",width:"110"},{default:e(({row:t})=>[l(v,{type:"primary",size:"small"},{default:e(()=>[i(p(b(P)[String(t.type).toLowerCase()]||t.type||"-"),1)]),_:2},1024)]),_:1}),l(o,{label:"存储位置",align:"center",width:"110"},{default:e(({row:t})=>[l(v,{type:"success",size:"small"},{default:e(()=>[i(p(b(S)[t.storage_type]||t.storage_type||"-"),1)]),_:2},1024)]),_:1}),l(o,{label:"大小",align:"center",width:"100"},{default:e(({row:t})=>[i(p(t.size&&t.size!=="0 B"&&t.size!=="0"?t.size:"-"),1)]),_:1}),l(o,{label:"数据条数",align:"center",width:"100"},{default:e(({row:t})=>[i(p(t.count||0),1)]),_:1}),l(o,{label:"描述",align:"center","show-overflow-tooltip":""},{default:e(({row:t})=>[i(p(t.description||"-"),1)]),_:1}),l(o,{label:"创建时间",align:"center",width:"180"},{default:e(({row:t})=>[i(p(t.create_time?new Date(t.create_time).toLocaleString("zh-CN"):"-"),1)]),_:1})]),actions:e(({row:t})=>[r("div",U,[l(m,{type:"primary",link:"",size:"small",onClick:g=>x(t)},{default:e(()=>[...a[2]||(a[2]=[r("i",{class:"fa fa-eye",style:{"margin-right":"4px"}},null,-1),i("详情 ",-1)])]),_:1},8,["onClick"]),l(m,{type:"success",link:"",size:"small",onClick:g=>z(t)},{default:e(()=>[...a[3]||(a[3]=[r("i",{class:"fa fa-download",style:{"margin-right":"4px"}},null,-1),i("下载 ",-1)])]),_:1},8,["onClick"]),l(m,{type:"danger",link:"",size:"small",onClick:g=>_(t)},{default:e(()=>[...a[4]||(a[4]=[r("i",{class:"fa fa-trash-o",style:{"margin-right":"4px"}},null,-1),i("删除 ",-1)])]),_:1},8,["onClick"])])]),_:1},8,["data","loading","create-text"])}}}),Tt=j(Z,[["__scopeId","data-v-75b95d11"]]);export{Tt as default}; import{E}from"./index-CCavIuTY.js";import{E as T}from"./el-tag-C_D80BPW.js";import{E as L}from"./el-table-DkdQ6gPU.js";import{d as A,y as f,G as V,e as k,w as e,ac as $,j as B,o as y,q as r,s as l,x as i,g as N,aa as p,f as b,aY as P,aZ as S,n as w,v as M,A as R}from"./index-CGB0A5x_.js";import"./el-checkbox-Ci1DH0Aj.js";import{D as q}from"./DataTablePage-CURtmoAI.js";import{g as G,d as I,a as Y}from"./dataset-C_hkNkI5.js";import{_ as j}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./el-scrollbar-p6_f_LH2.js";import"./index-DMVRI44M.js";import"./el-popper-DvBtRO32.js";import"./index-BPwPlcbL.js";import"./_baseClone-CX1E8HTZ.js";import"./_baseIteratee-uVh0OyD5.js";import"./castArray-Cgg396Sr.js";import"./debounce-Bqww2DS8.js";import"./toNumber-IRhFg6gN.js";import"./raf-CCivjDro.js";import"./omit-DaFv1hTo.js";import"./index-CbmPSBt0.js";import"./index-D2-3cnGo.js";import"./el-card-BWcR1iD2.js";import"./el-pagination-DGQ0vO_O.js";import"./el-select-C59URVI0.js";import"./vnode-DFpZw5lG.js";import"./index-khuXz7sd.js";import"./scroll-C0BSy_Rk.js";import"./clamp-BqqU4KQ-.js";import"./directive-vzjADwzS.js";import"./index-BMrs0kLP.js";import"./validator-D7tSoy2w.js";import"./index-Coa9QRND.js";import"./index-C5EKbiob.js";import"./el-tooltip-l0sNRNKZ.js";const O={class:"capsule-tabs"},U={class:"action-buttons"},Z=A({__name:"DatasetListView",setup(F){const C=M(),D=$(),c=f(!1),u=f([]),n=f(D.query.tab==="task"?"task":"upload"),h=B(()=>n.value==="task"?u.value.filter(s=>s.source==="task"):u.value.filter(s=>s.source!=="task"));async function d(){c.value=!0;try{u.value=await G()||[]}catch{}finally{c.value=!1}}async function _(s){await I(s.id),u.value=u.value.filter(a=>a.id!==s.id),await d(),R.success("删除成功")}function x(s){C.push(`/dataset/${s.id}/preview`)}function z(s){window.open(Y(s.id),"_blank")}return V(d),(s,a)=>{const o=L,v=T,m=E;return y(),k(q,{title:"数据集管理",data:h.value,loading:c.value,searchable:"","search-fields":["name","description"],"create-text":n.value==="upload"?"上传数据集":"","create-to":"/dataset/create","delete-fn":_,"row-key":"id",onRefresh:d},{title:e(()=>[r("div",O,[r("button",{class:w(["capsule-tab-item",{active:n.value==="upload"}]),onClick:a[0]||(a[0]=t=>n.value="upload")}," 上传任务 ",2),r("button",{class:w(["capsule-tab-item",{active:n.value==="task"}]),onClick:a[1]||(a[1]=t=>n.value="task")}," 数据任务 ",2)])]),columns:e(()=>[n.value==="task"?(y(),k(o,{key:0,label:"任务ID",prop:"task_id",align:"center",width:"100"})):N("",!0),l(o,{label:"数据集名称",prop:"name",align:"center"}),l(o,{label:"数据类型",align:"center",width:"110"},{default:e(({row:t})=>[l(v,{type:"primary",size:"small"},{default:e(()=>[i(p(b(P)[String(t.type).toLowerCase()]||t.type||"-"),1)]),_:2},1024)]),_:1}),l(o,{label:"存储位置",align:"center",width:"110"},{default:e(({row:t})=>[l(v,{type:"success",size:"small"},{default:e(()=>[i(p(b(S)[t.storage_type]||t.storage_type||"-"),1)]),_:2},1024)]),_:1}),l(o,{label:"大小",align:"center",width:"100"},{default:e(({row:t})=>[i(p(t.size&&t.size!=="0 B"&&t.size!=="0"?t.size:"-"),1)]),_:1}),l(o,{label:"数据条数",align:"center",width:"100"},{default:e(({row:t})=>[i(p(t.count||0),1)]),_:1}),l(o,{label:"描述",align:"center","show-overflow-tooltip":""},{default:e(({row:t})=>[i(p(t.description||"-"),1)]),_:1}),l(o,{label:"创建时间",align:"center",width:"180"},{default:e(({row:t})=>[i(p(t.create_time?new Date(t.create_time).toLocaleString("zh-CN"):"-"),1)]),_:1})]),actions:e(({row:t})=>[r("div",U,[l(m,{type:"primary",link:"",size:"small",onClick:g=>x(t)},{default:e(()=>[...a[2]||(a[2]=[r("i",{class:"fa fa-eye",style:{"margin-right":"4px"}},null,-1),i("详情 ",-1)])]),_:1},8,["onClick"]),l(m,{type:"success",link:"",size:"small",onClick:g=>z(t)},{default:e(()=>[...a[3]||(a[3]=[r("i",{class:"fa fa-download",style:{"margin-right":"4px"}},null,-1),i("下载 ",-1)])]),_:1},8,["onClick"]),l(m,{type:"danger",link:"",size:"small",onClick:g=>_(t)},{default:e(()=>[...a[4]||(a[4]=[r("i",{class:"fa fa-trash-o",style:{"margin-right":"4px"}},null,-1),i("删除 ",-1)])]),_:1},8,["onClick"])])]),_:1},8,["data","loading","create-text"])}}}),Tt=j(Z,[["__scopeId","data-v-75b95d11"]]);export{Tt as default};

View File

@@ -1 +1 @@
import{a as k,E as M}from"./el-form-item-DGwcZKHQ.js";import{E as q}from"./index-CoLjyrxq.js";import{E as R}from"./index-B2Z3XS2S.js";import{d as S,G as B,e as F,w as i,j as y,y as _,z as I,o as O,s as r,f as m,aB as P,x as h,aa as j,A as x,v as A,ac as L}from"./index-C8bRaOsd.js";import{P as N}from"./PageCard-BsRjYlIm.js";import{E as T,D as U}from"./DimensionFormFields-Z6GlC5an.js";import{b as z,u as G,c as H}from"./eval-DolMoghS.js";import{g as J}from"./model-CCFfanoR.js";import"./castArray-CJvOrS5l.js";import"./_baseClone-vUmDCUMu.js";import"./raf-BqR8BX9r.js";import"./index-BRf1Q2lS.js";import"./index-DE1Gc93o.js";import"./el-card-BXAZ-Y4u.js";import"./_plugin-vue_export-helper-DlAUqK2U.js";import"./el-select-DzauTPwe.js";import"./index-BpW9Z31J.js";import"./vnode-B9WOR-0a.js";import"./el-popper-BY86ZM1h.js";import"./el-scrollbar-CMp13_RQ.js";import"./index-BVldZEzQ.js";import"./el-tag-11zBoTqA.js";import"./scroll-DL9cY7fX.js";import"./clamp-CNwRTQDt.js";import"./toNumber-Bt8UgFrr.js";import"./_baseIteratee-7-PMrTPE.js";import"./el-checkbox-Jsj5DifU.js";import"./omit-BHHw65tB.js";import"./el-radio-group-akfy4TX6.js";import"./el-input-number-HkIYFERV.js";import"./index-COFtI18L.js";import"./el-slider-DwabRetH.js";import"./debounce-BADwekKz.js";import"./el-switch-CTejI77g.js";import"./validator-DZBWmtBZ.js";import"./el-tooltip-l0sNRNKZ.js";/* empty css */const Se=S({__name:"DimensionCreateView",setup(K){const c=L(),f=A(),n=_(),p=_(!1),u=y(()=>!!c.params.id),s=y(()=>c.params.id),d=_([]);let e=I({name:"",type:"",description:"",eval_model:"",eval_method:"",eval_prompt:"",is_active:!0,is_default:!1,bleu_n:1,output_precision:3,score_min:0,score_max:5,pass_threshold:3});const b={name:[{required:!0,message:"请输入维度名称",trigger:"blur"},{max:50,message:"不超过 50 字符",trigger:"blur"}],type:[{required:!0,message:"请选择指标类型",trigger:"change"}],eval_model:[{required:!0,message:"请选择大模型",trigger:"change"}],eval_method:[{required:!0,message:"请选择评估方式",trigger:"change"}],eval_prompt:[{required:!0,message:"请填写评估 Prompt",trigger:"blur"}]};async function w(){var o,t;if(s.value)try{const a=await z(s.value);Object.assign(e,{name:a.name||"",type:a.type||"",description:a.description||"",eval_model:a.eval_model||"",eval_method:a.eval_method||(a.type?(t=(o=T[a.type])==null?void 0:o[0])==null?void 0:t.value:""),eval_prompt:a.eval_prompt||"",is_active:a.is_active!==!1,is_default:!!a.is_default,bleu_n:a.bleu_n??1,output_precision:a.output_precision??3,score_min:a.score_min??0,score_max:a.score_max??5,pass_threshold:a.pass_threshold??3})}catch{}}async function E(){try{const o=await J()||[];d.value=o.filter(t=>t.purpose==="evaluation")}catch{d.value=[]}}async function D(){n.value&&await n.value.validate(async o=>{if(o){p.value=!0;try{const t={name:e.name,type:e.type,description:e.description,eval_model:e.type==="text_similarity"?null:e.eval_model,eval_method:e.eval_method,eval_prompt:e.type==="text_similarity"?null:e.eval_prompt,is_active:e.is_active,is_default:e.is_default,create_time:new Date().toISOString()};e.type==="text_similarity"&&(t.bleu_n=e.bleu_n,t.output_precision=e.output_precision),e.type==="metric"&&(t.score_min=e.score_min,t.score_max=e.score_max,t.pass_threshold=e.pass_threshold),u.value&&s.value?(await G(s.value,t),x.success("更新成功")):(await H(t),x.success("创建成功")),f.push("/model-eval")}catch{}finally{p.value=!1}}})}function V(){f.back()}return B(()=>{E(),w()}),(o,t)=>{const a=q,v=k,g=R,C=M;return O(),F(N,{title:u.value?"编辑评测维度":"添加评测维度"},{default:i(()=>[r(C,{ref_key:"formRef",ref:n,model:m(e),rules:b,"label-width":"130px",style:{"max-width":"760px"}},{default:i(()=>[r(v,{label:"维度名称",prop:"name"},{default:i(()=>[r(a,{modelValue:m(e).name,"onUpdate:modelValue":t[0]||(t[0]=l=>m(e).name=l),placeholder:"请输入维度名称",maxlength:"50","show-word-limit":""},null,8,["modelValue"])]),_:1}),r(U,{modelValue:m(e),"onUpdate:modelValue":t[1]||(t[1]=l=>P(e)?e.value=l:e=l),"eval-models":d.value},null,8,["modelValue","eval-models"]),r(v,null,{default:i(()=>[r(g,{type:"primary",loading:p.value,onClick:D},{default:i(()=>[h(j(u.value?"保存":"创建"),1)]),_:1},8,["loading"]),r(g,{onClick:V},{default:i(()=>[...t[2]||(t[2]=[h("取消",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1},8,["title"])}}});export{Se as default}; import{a as k,E as M}from"./el-form-item-Ct_zBuY0.js";import{E as q}from"./index-CbmPSBt0.js";import{E as R}from"./index-CCavIuTY.js";import{d as S,G as B,e as F,w as i,j as y,y as _,z as I,o as O,s as r,f as m,aB as P,x as h,aa as j,A as x,v as A,ac as L}from"./index-CGB0A5x_.js";import{P as N}from"./PageCard-D1lOaeEG.js";import{E as T,D as U}from"./DimensionFormFields-Dz4OI87j.js";import{b as z,u as G,c as H}from"./eval-CNlv4GHr.js";import{g as J}from"./model-xlHsHa68.js";import"./castArray-Cgg396Sr.js";import"./_baseClone-CX1E8HTZ.js";import"./raf-CCivjDro.js";import"./index-D2-3cnGo.js";import"./index-DMVRI44M.js";import"./el-card-BWcR1iD2.js";import"./_plugin-vue_export-helper-DlAUqK2U.js";import"./el-select-C59URVI0.js";import"./index-BPwPlcbL.js";import"./vnode-DFpZw5lG.js";import"./el-popper-DvBtRO32.js";import"./el-scrollbar-p6_f_LH2.js";import"./index-khuXz7sd.js";import"./el-tag-C_D80BPW.js";import"./scroll-C0BSy_Rk.js";import"./clamp-BqqU4KQ-.js";import"./toNumber-IRhFg6gN.js";import"./_baseIteratee-uVh0OyD5.js";import"./el-checkbox-Ci1DH0Aj.js";import"./omit-DaFv1hTo.js";import"./el-radio-group-B7nPUe8-.js";import"./el-input-number-VAjRO6-I.js";import"./index-CL2S8yHq.js";import"./el-slider-CM3VEvCM.js";import"./debounce-Bqww2DS8.js";import"./el-switch-ZjdGiO6T.js";import"./validator-D7tSoy2w.js";import"./el-tooltip-l0sNRNKZ.js";/* empty css */const Se=S({__name:"DimensionCreateView",setup(K){const c=L(),f=A(),n=_(),p=_(!1),u=y(()=>!!c.params.id),s=y(()=>c.params.id),d=_([]);let e=I({name:"",type:"",description:"",eval_model:"",eval_method:"",eval_prompt:"",is_active:!0,is_default:!1,bleu_n:1,output_precision:3,score_min:0,score_max:5,pass_threshold:3});const b={name:[{required:!0,message:"请输入维度名称",trigger:"blur"},{max:50,message:"不超过 50 字符",trigger:"blur"}],type:[{required:!0,message:"请选择指标类型",trigger:"change"}],eval_model:[{required:!0,message:"请选择大模型",trigger:"change"}],eval_method:[{required:!0,message:"请选择评估方式",trigger:"change"}],eval_prompt:[{required:!0,message:"请填写评估 Prompt",trigger:"blur"}]};async function w(){var o,t;if(s.value)try{const a=await z(s.value);Object.assign(e,{name:a.name||"",type:a.type||"",description:a.description||"",eval_model:a.eval_model||"",eval_method:a.eval_method||(a.type?(t=(o=T[a.type])==null?void 0:o[0])==null?void 0:t.value:""),eval_prompt:a.eval_prompt||"",is_active:a.is_active!==!1,is_default:!!a.is_default,bleu_n:a.bleu_n??1,output_precision:a.output_precision??3,score_min:a.score_min??0,score_max:a.score_max??5,pass_threshold:a.pass_threshold??3})}catch{}}async function E(){try{const o=await J()||[];d.value=o.filter(t=>t.purpose==="evaluation")}catch{d.value=[]}}async function D(){n.value&&await n.value.validate(async o=>{if(o){p.value=!0;try{const t={name:e.name,type:e.type,description:e.description,eval_model:e.type==="text_similarity"?null:e.eval_model,eval_method:e.eval_method,eval_prompt:e.type==="text_similarity"?null:e.eval_prompt,is_active:e.is_active,is_default:e.is_default,create_time:new Date().toISOString()};e.type==="text_similarity"&&(t.bleu_n=e.bleu_n,t.output_precision=e.output_precision),e.type==="metric"&&(t.score_min=e.score_min,t.score_max=e.score_max,t.pass_threshold=e.pass_threshold),u.value&&s.value?(await G(s.value,t),x.success("更新成功")):(await H(t),x.success("创建成功")),f.push("/model-eval")}catch{}finally{p.value=!1}}})}function V(){f.back()}return B(()=>{E(),w()}),(o,t)=>{const a=q,v=k,g=R,C=M;return O(),F(N,{title:u.value?"编辑评测维度":"添加评测维度"},{default:i(()=>[r(C,{ref_key:"formRef",ref:n,model:m(e),rules:b,"label-width":"130px",style:{"max-width":"760px"}},{default:i(()=>[r(v,{label:"维度名称",prop:"name"},{default:i(()=>[r(a,{modelValue:m(e).name,"onUpdate:modelValue":t[0]||(t[0]=l=>m(e).name=l),placeholder:"请输入维度名称",maxlength:"50","show-word-limit":""},null,8,["modelValue"])]),_:1}),r(U,{modelValue:m(e),"onUpdate:modelValue":t[1]||(t[1]=l=>P(e)?e.value=l:e=l),"eval-models":d.value},null,8,["modelValue","eval-models"]),r(v,null,{default:i(()=>[r(g,{type:"primary",loading:p.value,onClick:D},{default:i(()=>[h(j(u.value?"保存":"创建"),1)]),_:1},8,["loading"]),r(g,{onClick:V},{default:i(()=>[...t[2]||(t[2]=[h("取消",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1},8,["title"])}}});export{Se as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{E as V}from"./index-B2Z3XS2S.js";import{E as $}from"./el-table-48yEgKcK.js";import{d as B,G as D,c as T,e as _,w as o,g as C,y as p,o as v,s as a,q as i,x as b,aa as L,n as c,v as N,A as z}from"./index-C8bRaOsd.js";import{E as M}from"./index-CKkhcTW-.js";import"./el-tag-11zBoTqA.js";import"./el-checkbox-Jsj5DifU.js";import{D as y}from"./DataTablePage-BByewB8Y.js";import{_ as A}from"./ModelStatusTag.vue_vue_type_script_setup_true_lang-hMjP8G6o.js";import{g as G,d as P}from"./eval-DolMoghS.js";import{_ as R}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./el-scrollbar-CMp13_RQ.js";import"./index-DE1Gc93o.js";import"./el-popper-BY86ZM1h.js";import"./index-BpW9Z31J.js";import"./_baseClone-vUmDCUMu.js";import"./_baseIteratee-7-PMrTPE.js";import"./castArray-CJvOrS5l.js";import"./debounce-BADwekKz.js";import"./toNumber-Bt8UgFrr.js";import"./raf-BqR8BX9r.js";import"./validator-DZBWmtBZ.js";import"./index-BIY0gTx5.js";import"./clamp-CNwRTQDt.js";import"./index-CMlv-HLm.js";import"./scroll-DL9cY7fX.js";import"./index-CoLjyrxq.js";import"./index-BRf1Q2lS.js";import"./omit-BHHw65tB.js";import"./el-card-BXAZ-Y4u.js";import"./el-pagination-Ca9Xqxww.js";import"./el-select-DzauTPwe.js";import"./vnode-B9WOR-0a.js";import"./index-BVldZEzQ.js";import"./directive-D_bJoBNR.js";import"./el-tooltip-l0sNRNKZ.js";import"./status-Dl1fykxa.js";const S={class:"eval-page"},q={class:"capsule-tabs"},I={class:"capsule-tabs"},Q=B({__name:"EvalView",setup(j){const f=N(),s=p("tasks"),d=p(!1),n=p([]),w=p([{rank:1,name:"GPT-4",score:92.5},{rank:2,name:"Claude-3",score:90.1},{rank:3,name:"Qwen-Max",score:85.3}]);async function u(){d.value=!0;try{n.value=await G()||[]}catch{n.value=[]}finally{d.value=!1}}async function k(r){await M.confirm("确定要删除这个评测任务吗?","确认删除",{type:"warning"}),await P(r.id),n.value=n.value.filter(e=>e.id!==r.id),z.success("删除成功"),await u()}function E(){f.push("/model-eval/create")}function m(r){return s.value===r}function x(r){f.push({name:"model-eval-detail",params:{id:r.id}})}return D(()=>{u()}),(r,e)=>{const l=$,g=V;return v(),T("div",S,[s.value==="tasks"?(v(),_(y,{key:0,title:"",data:n.value,loading:d.value,"delete-fn":k,"create-text":"创建评测任务",onCreate:E,"row-key":"id",onRefresh:u},{title:o(()=>[i("div",q,[i("button",{class:c(["capsule-tab-item",{active:m("tasks")}]),onClick:e[0]||(e[0]=t=>s.value="tasks")},"评测任务",2),i("button",{class:c(["capsule-tab-item",{active:m("leaderboard")}]),onClick:e[1]||(e[1]=t=>s.value="leaderboard")},"排行榜",2)])]),columns:o(()=>[a(l,{label:"任务名称",prop:"eval_task_name",align:"center"}),a(l,{label:"评测模型",prop:"model_name",align:"center"}),a(l,{label:"数据集",prop:"dataset",align:"center"}),a(l,{label:"指标",prop:"metric",align:"center"}),a(l,{label:"评分",prop:"score",width:"100",align:"center"}),a(l,{label:"状态",width:"100",align:"center"},{default:o(({row:t})=>[a(A,{status:t.status},null,8,["status"])]),_:1}),a(l,{label:"创建时间",align:"center",width:"180"},{default:o(({row:t})=>[b(L(t.create_time?new Date(t.create_time).toLocaleString("zh-CN"):"-"),1)]),_:1})]),actions:o(({row:t})=>[a(g,{link:"",type:"primary",size:"small",onClick:h=>x(t)},{default:o(()=>[...e[4]||(e[4]=[i("i",{class:"fa fa-file-text-o",style:{"margin-right":"4px"}},null,-1),b("详情 ",-1)])]),_:1},8,["onClick"]),a(g,{link:"",type:"danger",size:"small",onClick:h=>k(t)},{default:o(()=>[...e[5]||(e[5]=[i("i",{class:"fa fa-trash-o",style:{"margin-right":"4px"}},null,-1),b("删除 ",-1)])]),_:1},8,["onClick"])]),_:1},8,["data","loading"])):C("",!0),s.value==="leaderboard"?(v(),_(y,{key:1,title:"",data:w.value,"row-key":"rank"},{title:o(()=>[i("div",I,[i("button",{class:c(["capsule-tab-item",{active:m("tasks")}]),onClick:e[2]||(e[2]=t=>s.value="tasks")},"评测任务",2),i("button",{class:c(["capsule-tab-item",{active:m("leaderboard")}]),onClick:e[3]||(e[3]=t=>s.value="leaderboard")},"排行榜",2)])]),columns:o(()=>[a(l,{label:"排名",prop:"rank",width:"80",align:"center"}),a(l,{label:"模型名称",prop:"name",align:"center"}),a(l,{label:"综合评分",prop:"score",align:"center"})]),_:1},8,["data"])):C("",!0)])}}}),Ve=R(Q,[["__scopeId","data-v-894b0bb7"]]);export{Ve as default}; import{E as V}from"./index-CCavIuTY.js";import{E as $}from"./el-table-DkdQ6gPU.js";import{d as B,G as D,c as T,e as _,w as o,g as C,y as p,o as v,s as a,q as i,x as b,aa as L,n as c,v as N,A as z}from"./index-CGB0A5x_.js";import{E as M}from"./index-BMrs0kLP.js";import"./el-tag-C_D80BPW.js";import"./el-checkbox-Ci1DH0Aj.js";import{D as y}from"./DataTablePage-CURtmoAI.js";import{_ as A}from"./ModelStatusTag.vue_vue_type_script_setup_true_lang-NhrqSCT2.js";import{g as G,d as P}from"./eval-CNlv4GHr.js";import{_ as R}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./el-scrollbar-p6_f_LH2.js";import"./index-DMVRI44M.js";import"./el-popper-DvBtRO32.js";import"./index-BPwPlcbL.js";import"./_baseClone-CX1E8HTZ.js";import"./_baseIteratee-uVh0OyD5.js";import"./castArray-Cgg396Sr.js";import"./debounce-Bqww2DS8.js";import"./toNumber-IRhFg6gN.js";import"./raf-CCivjDro.js";import"./validator-D7tSoy2w.js";import"./index-Coa9QRND.js";import"./clamp-BqqU4KQ-.js";import"./index-C5EKbiob.js";import"./scroll-C0BSy_Rk.js";import"./index-CbmPSBt0.js";import"./index-D2-3cnGo.js";import"./omit-DaFv1hTo.js";import"./el-card-BWcR1iD2.js";import"./el-pagination-DGQ0vO_O.js";import"./el-select-C59URVI0.js";import"./vnode-DFpZw5lG.js";import"./index-khuXz7sd.js";import"./directive-vzjADwzS.js";import"./el-tooltip-l0sNRNKZ.js";import"./status-Dl1fykxa.js";const S={class:"eval-page"},q={class:"capsule-tabs"},I={class:"capsule-tabs"},Q=B({__name:"EvalView",setup(j){const f=N(),s=p("tasks"),d=p(!1),n=p([]),w=p([{rank:1,name:"GPT-4",score:92.5},{rank:2,name:"Claude-3",score:90.1},{rank:3,name:"Qwen-Max",score:85.3}]);async function u(){d.value=!0;try{n.value=await G()||[]}catch{n.value=[]}finally{d.value=!1}}async function k(r){await M.confirm("确定要删除这个评测任务吗?","确认删除",{type:"warning"}),await P(r.id),n.value=n.value.filter(e=>e.id!==r.id),z.success("删除成功"),await u()}function E(){f.push("/model-eval/create")}function m(r){return s.value===r}function x(r){f.push({name:"model-eval-detail",params:{id:r.id}})}return D(()=>{u()}),(r,e)=>{const l=$,g=V;return v(),T("div",S,[s.value==="tasks"?(v(),_(y,{key:0,title:"",data:n.value,loading:d.value,"delete-fn":k,"create-text":"创建评测任务",onCreate:E,"row-key":"id",onRefresh:u},{title:o(()=>[i("div",q,[i("button",{class:c(["capsule-tab-item",{active:m("tasks")}]),onClick:e[0]||(e[0]=t=>s.value="tasks")},"评测任务",2),i("button",{class:c(["capsule-tab-item",{active:m("leaderboard")}]),onClick:e[1]||(e[1]=t=>s.value="leaderboard")},"排行榜",2)])]),columns:o(()=>[a(l,{label:"任务名称",prop:"eval_task_name",align:"center"}),a(l,{label:"评测模型",prop:"model_name",align:"center"}),a(l,{label:"数据集",prop:"dataset",align:"center"}),a(l,{label:"指标",prop:"metric",align:"center"}),a(l,{label:"评分",prop:"score",width:"100",align:"center"}),a(l,{label:"状态",width:"100",align:"center"},{default:o(({row:t})=>[a(A,{status:t.status},null,8,["status"])]),_:1}),a(l,{label:"创建时间",align:"center",width:"180"},{default:o(({row:t})=>[b(L(t.create_time?new Date(t.create_time).toLocaleString("zh-CN"):"-"),1)]),_:1})]),actions:o(({row:t})=>[a(g,{link:"",type:"primary",size:"small",onClick:h=>x(t)},{default:o(()=>[...e[4]||(e[4]=[i("i",{class:"fa fa-file-text-o",style:{"margin-right":"4px"}},null,-1),b("详情 ",-1)])]),_:1},8,["onClick"]),a(g,{link:"",type:"danger",size:"small",onClick:h=>k(t)},{default:o(()=>[...e[5]||(e[5]=[i("i",{class:"fa fa-trash-o",style:{"margin-right":"4px"}},null,-1),b("删除 ",-1)])]),_:1},8,["onClick"])]),_:1},8,["data","loading"])):C("",!0),s.value==="leaderboard"?(v(),_(y,{key:1,title:"",data:w.value,"row-key":"rank"},{title:o(()=>[i("div",I,[i("button",{class:c(["capsule-tab-item",{active:m("tasks")}]),onClick:e[2]||(e[2]=t=>s.value="tasks")},"评测任务",2),i("button",{class:c(["capsule-tab-item",{active:m("leaderboard")}]),onClick:e[3]||(e[3]=t=>s.value="leaderboard")},"排行榜",2)])]),columns:o(()=>[a(l,{label:"排名",prop:"rank",width:"80",align:"center"}),a(l,{label:"模型名称",prop:"name",align:"center"}),a(l,{label:"综合评分",prop:"score",align:"center"})]),_:1},8,["data"])):C("",!0)])}}}),Ve=R(Q,[["__scopeId","data-v-894b0bb7"]]);export{Ve as default};

View File

@@ -1 +1 @@
import{_ as s}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c,q as o}from"./index-C8bRaOsd.js";const n={},r={class:"simple-page"};function a(_,e){return t(),c("section",r,[...e[0]||(e[0]=[o("h1",null,"使用文档",-1),o("p",null,"第一版系统已接入后端、数据集、模型、微调任务、算力节点和训练日志主链路。",-1)])])}const p=s(n,[["render",a],["__scopeId","data-v-962c8803"]]);export{p as default}; import{_ as s}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c,q as o}from"./index-CGB0A5x_.js";const n={},r={class:"simple-page"};function a(_,e){return t(),c("section",r,[...e[0]||(e[0]=[o("h1",null,"使用文档",-1),o("p",null,"第一版系统已接入后端、数据集、模型、微调任务、算力节点和训练日志主链路。",-1)])])}const p=s(n,[["render",a],["__scopeId","data-v-962c8803"]]);export{p as default};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{E as T}from"./el-alert-CdZFij8S.js";import{a as A,E as D}from"./el-form-item-DGwcZKHQ.js";import{E as L}from"./index-CoLjyrxq.js";import{E as j}from"./index-B2Z3XS2S.js";import{E as z,b as H,a as J}from"./el-select-DzauTPwe.js";import{E as K}from"./el-divider-sRU3cxL5.js";import{d as Q,G as W,e as i,w as o,at as X,y as u,z as Y,o as s,s as a,x as b,c as v,ad as k,M as w,g as Z,j as p,A as B,v as ee}from"./index-C8bRaOsd.js";import"./el-scrollbar-CMp13_RQ.js";import"./el-popper-BY86ZM1h.js";import"./el-tag-11zBoTqA.js";import{P as te}from"./PageCard-BsRjYlIm.js";import{g as le,a as ae}from"./model-CCFfanoR.js";import"./vnode-B9WOR-0a.js";import"./castArray-CJvOrS5l.js";import"./_baseClone-vUmDCUMu.js";import"./raf-BqR8BX9r.js";import"./index-BRf1Q2lS.js";import"./index-DE1Gc93o.js";import"./index-BpW9Z31J.js";import"./index-BVldZEzQ.js";import"./scroll-DL9cY7fX.js";import"./clamp-CNwRTQDt.js";import"./toNumber-Bt8UgFrr.js";import"./_baseIteratee-7-PMrTPE.js";import"./el-card-BXAZ-Y4u.js";import"./_plugin-vue_export-helper-DlAUqK2U.js";const Ge=Q({__name:"InferenceCreateView",setup(oe){const E=ee(),f=u(),c=u(!1),m=u(""),V=u([]),h=u([]),_=u([]),x=p(()=>V.value.map(t=>({key:`db-${t.id}`,id:t.id,name:t.name,source:"database",model_path:t.path||""}))),M=p(()=>h.value.map(t=>({key:`trained-${t.id}`,id:t.id,name:t.name,source:"trained",model_path:t.merged_path||t.base_model_path||"",merged:t.merged,merging:t.merging,disabled:t.merged===!1}))),G=p(()=>{const t={};for(const e of[...x.value,...M.value])t[e.key]=e;return t}),n=Y({name:"",description:"",model_key:"",gpu_id:0}),I={name:[{required:!0,message:"请输入推理名称",trigger:"blur"}],model_key:[{required:!0,message:"请选择模型",trigger:"change"}]},O=p(()=>G.value[n.model_key]);async function S(){f.value&&await f.value.validate(async t=>{if(!t)return;const e=O.value;if(!e){B.warning("请选择模型");return}c.value=!0,m.value="正在启动模型服务...";try{await new Promise(r=>setTimeout(r,1200)),B.success("模型已启动"),E.push({path:"/model-inference/chat/mock",query:{model:e.name}})}finally{c.value=!1,m.value=""}})}function $(){E.back()}async function q(){try{const[t,e,r]=await Promise.all([le(),ae(),X()]);V.value=t||[],h.value=(e==null?void 0:e.models)||[],_.value=(r==null?void 0:r.gpu)||[],_.value.length>0&&(n.gpu_id=0)}catch{}}return W(q),(t,e)=>{const r=L,d=A,F=K,g=J,C=H,P=z,N=T,U=j,R=D;return s(),i(te,{title:"新建推理"},{default:o(()=>[a(R,{ref_key:"formRef",ref:f,model:n,rules:I,"label-width":"100px"},{default:o(()=>[a(d,{label:"推理名称",prop:"name"},{default:o(()=>[a(r,{modelValue:n.name,"onUpdate:modelValue":e[0]||(e[0]=l=>n.name=l),placeholder:"请输入推理名称",maxlength:"50","show-word-limit":"",style:{"max-width":"400px"}},null,8,["modelValue"])]),_:1}),a(d,{label:"描述"},{default:o(()=>[a(r,{modelValue:n.description,"onUpdate:modelValue":e[1]||(e[1]=l=>n.description=l),type:"textarea",rows:2,maxlength:"200","show-word-limit":"",style:{"max-width":"400px"}},null,8,["modelValue"])]),_:1}),a(F,{"content-position":"left"},{default:o(()=>[...e[4]||(e[4]=[b("选择模型",-1)])]),_:1}),a(d,{label:"选择模型",prop:"model_key"},{default:o(()=>[a(P,{modelValue:n.model_key,"onUpdate:modelValue":e[2]||(e[2]=l=>n.model_key=l),placeholder:"请选择模型",filterable:"",style:{width:"400px"}},{default:o(()=>[a(C,{label:"本地模型"},{default:o(()=>[(s(!0),v(w,null,k(x.value,l=>(s(),i(g,{key:l.key,label:l.name,value:l.key},null,8,["label","value"]))),128))]),_:1}),a(C,{label:"已训练模型"},{default:o(()=>[(s(!0),v(w,null,k(M.value,l=>(s(),i(g,{key:l.key,label:l.name+(l.disabled?"(未合并)":""),value:l.key,disabled:l.disabled},null,8,["label","value","disabled"]))),128))]),_:1})]),_:1},8,["modelValue"])]),_:1}),a(d,{label:"GPU"},{default:o(()=>[a(P,{modelValue:n.gpu_id,"onUpdate:modelValue":e[3]||(e[3]=l=>n.gpu_id=l),style:{width:"400px"}},{default:o(()=>[(s(!0),v(w,null,k(_.value,(l,y)=>(s(),i(g,{key:y,label:`${l.name} (GPU${y})`,value:y},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),m.value?(s(),i(d,{key:0,label:"启动状态"},{default:o(()=>[a(N,{title:m.value,type:"info",closable:!1,"show-icon":""},null,8,["title"])]),_:1})):Z("",!0),a(d,null,{default:o(()=>[a(U,{type:"primary",loading:c.value,onClick:S},{default:o(()=>[...e[5]||(e[5]=[b("开始推理",-1)])]),_:1},8,["loading"]),a(U,{onClick:$},{default:o(()=>[...e[6]||(e[6]=[b("取消",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})}}});export{Ge as default}; import{E as T}from"./el-alert-DBfM1mZE.js";import{a as A,E as D}from"./el-form-item-Ct_zBuY0.js";import{E as L}from"./index-CbmPSBt0.js";import{E as j}from"./index-CCavIuTY.js";import{E as z,b as H,a as J}from"./el-select-C59URVI0.js";import{E as K}from"./el-divider-DF2VMDw-.js";import{d as Q,G as W,e as i,w as o,at as X,y as u,z as Y,o as s,s as a,x as b,c as v,ad as k,M as w,g as Z,j as p,A as B,v as ee}from"./index-CGB0A5x_.js";import"./el-scrollbar-p6_f_LH2.js";import"./el-popper-DvBtRO32.js";import"./el-tag-C_D80BPW.js";import{P as te}from"./PageCard-D1lOaeEG.js";import{g as le,a as ae}from"./model-xlHsHa68.js";import"./vnode-DFpZw5lG.js";import"./castArray-Cgg396Sr.js";import"./_baseClone-CX1E8HTZ.js";import"./raf-CCivjDro.js";import"./index-D2-3cnGo.js";import"./index-DMVRI44M.js";import"./index-BPwPlcbL.js";import"./index-khuXz7sd.js";import"./scroll-C0BSy_Rk.js";import"./clamp-BqqU4KQ-.js";import"./toNumber-IRhFg6gN.js";import"./_baseIteratee-uVh0OyD5.js";import"./el-card-BWcR1iD2.js";import"./_plugin-vue_export-helper-DlAUqK2U.js";const Ge=Q({__name:"InferenceCreateView",setup(oe){const E=ee(),f=u(),c=u(!1),m=u(""),V=u([]),h=u([]),_=u([]),x=p(()=>V.value.map(t=>({key:`db-${t.id}`,id:t.id,name:t.name,source:"database",model_path:t.path||""}))),M=p(()=>h.value.map(t=>({key:`trained-${t.id}`,id:t.id,name:t.name,source:"trained",model_path:t.merged_path||t.base_model_path||"",merged:t.merged,merging:t.merging,disabled:t.merged===!1}))),G=p(()=>{const t={};for(const e of[...x.value,...M.value])t[e.key]=e;return t}),n=Y({name:"",description:"",model_key:"",gpu_id:0}),I={name:[{required:!0,message:"请输入推理名称",trigger:"blur"}],model_key:[{required:!0,message:"请选择模型",trigger:"change"}]},O=p(()=>G.value[n.model_key]);async function S(){f.value&&await f.value.validate(async t=>{if(!t)return;const e=O.value;if(!e){B.warning("请选择模型");return}c.value=!0,m.value="正在启动模型服务...";try{await new Promise(r=>setTimeout(r,1200)),B.success("模型已启动"),E.push({path:"/model-inference/chat/mock",query:{model:e.name}})}finally{c.value=!1,m.value=""}})}function $(){E.back()}async function q(){try{const[t,e,r]=await Promise.all([le(),ae(),X()]);V.value=t||[],h.value=(e==null?void 0:e.models)||[],_.value=(r==null?void 0:r.gpu)||[],_.value.length>0&&(n.gpu_id=0)}catch{}}return W(q),(t,e)=>{const r=L,d=A,F=K,g=J,C=H,P=z,N=T,U=j,R=D;return s(),i(te,{title:"新建推理"},{default:o(()=>[a(R,{ref_key:"formRef",ref:f,model:n,rules:I,"label-width":"100px"},{default:o(()=>[a(d,{label:"推理名称",prop:"name"},{default:o(()=>[a(r,{modelValue:n.name,"onUpdate:modelValue":e[0]||(e[0]=l=>n.name=l),placeholder:"请输入推理名称",maxlength:"50","show-word-limit":"",style:{"max-width":"400px"}},null,8,["modelValue"])]),_:1}),a(d,{label:"描述"},{default:o(()=>[a(r,{modelValue:n.description,"onUpdate:modelValue":e[1]||(e[1]=l=>n.description=l),type:"textarea",rows:2,maxlength:"200","show-word-limit":"",style:{"max-width":"400px"}},null,8,["modelValue"])]),_:1}),a(F,{"content-position":"left"},{default:o(()=>[...e[4]||(e[4]=[b("选择模型",-1)])]),_:1}),a(d,{label:"选择模型",prop:"model_key"},{default:o(()=>[a(P,{modelValue:n.model_key,"onUpdate:modelValue":e[2]||(e[2]=l=>n.model_key=l),placeholder:"请选择模型",filterable:"",style:{width:"400px"}},{default:o(()=>[a(C,{label:"本地模型"},{default:o(()=>[(s(!0),v(w,null,k(x.value,l=>(s(),i(g,{key:l.key,label:l.name,value:l.key},null,8,["label","value"]))),128))]),_:1}),a(C,{label:"已训练模型"},{default:o(()=>[(s(!0),v(w,null,k(M.value,l=>(s(),i(g,{key:l.key,label:l.name+(l.disabled?"(未合并)":""),value:l.key,disabled:l.disabled},null,8,["label","value","disabled"]))),128))]),_:1})]),_:1},8,["modelValue"])]),_:1}),a(d,{label:"GPU"},{default:o(()=>[a(P,{modelValue:n.gpu_id,"onUpdate:modelValue":e[3]||(e[3]=l=>n.gpu_id=l),style:{width:"400px"}},{default:o(()=>[(s(!0),v(w,null,k(_.value,(l,y)=>(s(),i(g,{key:y,label:`${l.name} (GPU${y})`,value:y},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),m.value?(s(),i(d,{key:0,label:"启动状态"},{default:o(()=>[a(N,{title:m.value,type:"info",closable:!1,"show-icon":""},null,8,["title"])]),_:1})):Z("",!0),a(d,null,{default:o(()=>[a(U,{type:"primary",loading:c.value,onClick:S},{default:o(()=>[...e[5]||(e[5]=[b("开始推理",-1)])]),_:1},8,["loading"]),a(U,{onClick:$},{default:o(()=>[...e[6]||(e[6]=[b("取消",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})}}});export{Ge as default};

View File

@@ -1 +1 @@
import{E as $,a as q}from"./el-form-item-DGwcZKHQ.js";import{E as z}from"./index-CoLjyrxq.js";import{u as K,E as P}from"./index-B2Z3XS2S.js";import{E as R}from"./el-checkbox-Jsj5DifU.js";import{b as T,i as U,d as N,u as A,a as D,o as u,c as k,e as h,w as t,r as M,f as w,E as j,g,n as E,h as V,j as b,k as C,l as G,m as H,p as J,q as n,s,t as O,v as Q,x as y,y as B,z as W,A as X}from"./index-C8bRaOsd.js";import{_ as S}from"./logo-CxXS7KxG.js";import{_ as Y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./castArray-CJvOrS5l.js";import"./_baseClone-vUmDCUMu.js";import"./raf-BqR8BX9r.js";import"./index-BRf1Q2lS.js";import"./index-DE1Gc93o.js";import"./omit-BHHw65tB.js";const Z=T({type:{type:String,values:["primary","success","warning","info","danger","default"],default:void 0},underline:{type:[Boolean,String],values:[!0,!1,"always","never","hover"],default:void 0},disabled:Boolean,href:{type:String,default:""},target:{type:String,default:"_self"},icon:{type:U}}),ee={click:l=>l instanceof MouseEvent},ae=["href","target"];var ne=N({name:"ElLink",__name:"link",props:Z,emits:ee,setup(l,{emit:c}){const o=l,i=c,r=A("link");K({scope:"el-link",from:"The underline option (boolean)",replacement:"'always' | 'hover' | 'never'",version:"3.0.0",ref:"https://element-plus.org/en-US/component/link.html#underline"},b(()=>C(o.underline)));const a=D("link"),m=b(()=>{var e;return[a.b(),a.m(o.type??((e=r.value)==null?void 0:e.type)??"default"),a.is("disabled",o.disabled),a.is("underline",d.value==="always"),a.is("hover-underline",d.value==="hover"&&!o.disabled)]}),d=b(()=>{var e;return C(o.underline)?o.underline?"hover":"never":o.underline??((e=r.value)==null?void 0:e.underline)??"hover"});function p(e){o.disabled||i("click",e)}return(e,f)=>(u(),k("a",{class:E(m.value),href:l.disabled||!l.href?void 0:l.href,target:l.disabled||!l.href?void 0:l.target,onClick:p},[l.icon?(u(),h(w(j),{key:0},{default:t(()=>[(u(),h(M(l.icon)))]),_:1})):g("v-if",!0),e.$slots.default?(u(),k("span",{key:1,class:E(w(a).e("inner"))},[V(e.$slots,"default")],2)):g("v-if",!0),e.$slots.icon?V(e.$slots,"icon",{key:2}):g("v-if",!0)],10,ae))}}),le=ne;const oe=G(le),se={class:"login-page"},te={class:"login-panel"},re={class:"login-form-wrap"},ie={class:"login-options"},de=N({__name:"LoginView",setup(l){const c=Q(),o=H(),i=B(),r=B(!1),a=W({username:"",password:""}),m={username:[{required:!0,message:"请输入账号",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function d(){i.value&&await i.value.validate(async p=>{if(p){r.value=!0;try{await o.login(a.username,a.password),X.success("登录成功"),c.push("/dashboard")}catch{}finally{r.value=!1}}})}return(p,e)=>{const f=z,_=q,x=R,F=oe,I=P,L=$;return u(),k("div",se,[e[8]||(e[8]=J('<section class="login-visual" aria-labelledby="platform-title" data-v-5b789cef><div class="login-visual-content" data-v-5b789cef><div class="login-visual-copy" data-v-5b789cef><h1 id="platform-title" data-v-5b789cef>远光软件微调平台</h1><p data-v-5b789cef>大模型微调、评测与推理的一体化工作台</p></div><div class="login-visual-footer" aria-label="平台核心能力" data-v-5b789cef><span data-v-5b789cef>数据准备</span><span aria-hidden="true" data-v-5b789cef>·</span><span data-v-5b789cef>模型训练</span><span aria-hidden="true" data-v-5b789cef>·</span><span data-v-5b789cef>效果评测</span></div></div></section>',1)),n("main",te,[e[6]||(e[6]=n("div",{class:"brand-lockup",role:"img","aria-label":"远光软件"},[n("span",{class:"brand-logo-crop brand-logo-crop-mark","aria-hidden":"true"},[n("img",{src:S,alt:""})]),n("span",{class:"brand-logo-crop brand-logo-crop-wordmark","aria-hidden":"true"},[n("img",{src:S,alt:""})])],-1)),n("div",re,[e[5]||(e[5]=n("div",{class:"login-heading"},[n("span",null,"账号登录"),n("h2",null,"欢迎回来"),n("p",null,"登录后继续使用微调平台")],-1)),s(L,{ref_key:"loginFormRef",ref:i,model:a,rules:m,"label-position":"top",size:"large",onKeyup:O(d,["enter"])},{default:t(()=>[s(_,{label:"账号",prop:"username"},{default:t(()=>[s(f,{modelValue:a.username,"onUpdate:modelValue":e[0]||(e[0]=v=>a.username=v),placeholder:"请输入账号",clearable:""},null,8,["modelValue"])]),_:1}),s(_,{label:"密码",prop:"password"},{default:t(()=>[s(f,{modelValue:a.password,"onUpdate:modelValue":e[1]||(e[1]=v=>a.password=v),type:"password",placeholder:"请输入密码","show-password":""},null,8,["modelValue"])]),_:1}),n("div",ie,[s(x,null,{default:t(()=>[...e[2]||(e[2]=[y("记住密码",-1)])]),_:1}),s(F,{type:"primary",underline:!1},{default:t(()=>[...e[3]||(e[3]=[y("忘记密码?",-1)])]),_:1})]),s(I,{type:"primary",class:"login-btn",loading:r.value,onClick:d},{default:t(()=>[...e[4]||(e[4]=[y(" 登录 ",-1)])]),_:1},8,["loading"])]),_:1},8,["model"])]),e[7]||(e[7]=n("footer",null,"© 2026 远光软件",-1))])])}}}),Ee=Y(de,[["__scopeId","data-v-5b789cef"]]);export{Ee as default}; import{E as $,a as q}from"./el-form-item-Ct_zBuY0.js";import{E as z}from"./index-CbmPSBt0.js";import{u as K,E as P}from"./index-CCavIuTY.js";import{E as R}from"./el-checkbox-Ci1DH0Aj.js";import{b as T,i as U,d as N,u as A,a as D,o as u,c as k,e as h,w as t,r as M,f as w,E as j,g,n as E,h as V,j as b,k as C,l as G,m as H,p as J,q as n,s,t as O,v as Q,x as y,y as B,z as W,A as X}from"./index-CGB0A5x_.js";import{_ as S}from"./logo-CxXS7KxG.js";import{_ as Y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./castArray-Cgg396Sr.js";import"./_baseClone-CX1E8HTZ.js";import"./raf-CCivjDro.js";import"./index-D2-3cnGo.js";import"./index-DMVRI44M.js";import"./omit-DaFv1hTo.js";const Z=T({type:{type:String,values:["primary","success","warning","info","danger","default"],default:void 0},underline:{type:[Boolean,String],values:[!0,!1,"always","never","hover"],default:void 0},disabled:Boolean,href:{type:String,default:""},target:{type:String,default:"_self"},icon:{type:U}}),ee={click:l=>l instanceof MouseEvent},ae=["href","target"];var ne=N({name:"ElLink",__name:"link",props:Z,emits:ee,setup(l,{emit:c}){const o=l,i=c,r=A("link");K({scope:"el-link",from:"The underline option (boolean)",replacement:"'always' | 'hover' | 'never'",version:"3.0.0",ref:"https://element-plus.org/en-US/component/link.html#underline"},b(()=>C(o.underline)));const a=D("link"),m=b(()=>{var e;return[a.b(),a.m(o.type??((e=r.value)==null?void 0:e.type)??"default"),a.is("disabled",o.disabled),a.is("underline",d.value==="always"),a.is("hover-underline",d.value==="hover"&&!o.disabled)]}),d=b(()=>{var e;return C(o.underline)?o.underline?"hover":"never":o.underline??((e=r.value)==null?void 0:e.underline)??"hover"});function p(e){o.disabled||i("click",e)}return(e,f)=>(u(),k("a",{class:E(m.value),href:l.disabled||!l.href?void 0:l.href,target:l.disabled||!l.href?void 0:l.target,onClick:p},[l.icon?(u(),h(w(j),{key:0},{default:t(()=>[(u(),h(M(l.icon)))]),_:1})):g("v-if",!0),e.$slots.default?(u(),k("span",{key:1,class:E(w(a).e("inner"))},[V(e.$slots,"default")],2)):g("v-if",!0),e.$slots.icon?V(e.$slots,"icon",{key:2}):g("v-if",!0)],10,ae))}}),le=ne;const oe=G(le),se={class:"login-page"},te={class:"login-panel"},re={class:"login-form-wrap"},ie={class:"login-options"},de=N({__name:"LoginView",setup(l){const c=Q(),o=H(),i=B(),r=B(!1),a=W({username:"",password:""}),m={username:[{required:!0,message:"请输入账号",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function d(){i.value&&await i.value.validate(async p=>{if(p){r.value=!0;try{await o.login(a.username,a.password),X.success("登录成功"),c.push("/dashboard")}catch{}finally{r.value=!1}}})}return(p,e)=>{const f=z,_=q,x=R,F=oe,I=P,L=$;return u(),k("div",se,[e[8]||(e[8]=J('<section class="login-visual" aria-labelledby="platform-title" data-v-5b789cef><div class="login-visual-content" data-v-5b789cef><div class="login-visual-copy" data-v-5b789cef><h1 id="platform-title" data-v-5b789cef>远光软件微调平台</h1><p data-v-5b789cef>大模型微调、评测与推理的一体化工作台</p></div><div class="login-visual-footer" aria-label="平台核心能力" data-v-5b789cef><span data-v-5b789cef>数据准备</span><span aria-hidden="true" data-v-5b789cef>·</span><span data-v-5b789cef>模型训练</span><span aria-hidden="true" data-v-5b789cef>·</span><span data-v-5b789cef>效果评测</span></div></div></section>',1)),n("main",te,[e[6]||(e[6]=n("div",{class:"brand-lockup",role:"img","aria-label":"远光软件"},[n("span",{class:"brand-logo-crop brand-logo-crop-mark","aria-hidden":"true"},[n("img",{src:S,alt:""})]),n("span",{class:"brand-logo-crop brand-logo-crop-wordmark","aria-hidden":"true"},[n("img",{src:S,alt:""})])],-1)),n("div",re,[e[5]||(e[5]=n("div",{class:"login-heading"},[n("span",null,"账号登录"),n("h2",null,"欢迎回来"),n("p",null,"登录后继续使用微调平台")],-1)),s(L,{ref_key:"loginFormRef",ref:i,model:a,rules:m,"label-position":"top",size:"large",onKeyup:O(d,["enter"])},{default:t(()=>[s(_,{label:"账号",prop:"username"},{default:t(()=>[s(f,{modelValue:a.username,"onUpdate:modelValue":e[0]||(e[0]=v=>a.username=v),placeholder:"请输入账号",clearable:""},null,8,["modelValue"])]),_:1}),s(_,{label:"密码",prop:"password"},{default:t(()=>[s(f,{modelValue:a.password,"onUpdate:modelValue":e[1]||(e[1]=v=>a.password=v),type:"password",placeholder:"请输入密码","show-password":""},null,8,["modelValue"])]),_:1}),n("div",ie,[s(x,null,{default:t(()=>[...e[2]||(e[2]=[y("记住密码",-1)])]),_:1}),s(F,{type:"primary",underline:!1},{default:t(()=>[...e[3]||(e[3]=[y("忘记密码?",-1)])]),_:1})]),s(I,{type:"primary",class:"login-btn",loading:r.value,onClick:d},{default:t(()=>[...e[4]||(e[4]=[y(" 登录 ",-1)])]),_:1},8,["loading"])]),_:1},8,["model"])]),e[7]||(e[7]=n("footer",null,"© 2026 远光软件",-1))])])}}}),Ee=Y(de,[["__scopeId","data-v-5b789cef"]]);export{Ee as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{E as A}from"./el-alert-CdZFij8S.js";import{a as N,E as T}from"./el-form-item-DGwcZKHQ.js";import{E as B}from"./index-CoLjyrxq.js";import{E as I}from"./index-B2Z3XS2S.js";import{E as R}from"./el-tag-11zBoTqA.js";import{d as P,z as q,G as D,e as r,w as t,j as y,y as E,o as n,s as a,f as F,ar as U,x as m,aa as W,c as j,g as z,A as M,v as G,ac as H}from"./index-C8bRaOsd.js";import{P as L}from"./PageCard-BsRjYlIm.js";import{a as O,m as S}from"./model-CCFfanoR.js";import{_ as J}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./vnode-B9WOR-0a.js";import"./castArray-CJvOrS5l.js";import"./_baseClone-vUmDCUMu.js";import"./raf-BqR8BX9r.js";import"./index-BRf1Q2lS.js";import"./index-DE1Gc93o.js";import"./el-card-BXAZ-Y4u.js";const K={key:0,class:"model-status"},Q=P({__name:"MergeWeightsView",setup(X){const v=H(),b=G(),s=E(!1),u=y(()=>v.query.model||""),w=y(()=>v.query.method||"lora"),i=E([]),_=y(()=>i.value.find(l=>l.name===u.value)),o=q({model_name:u.value,train_method:w.value,base_model_path:""});async function V(){try{const l=await O();i.value=(l==null?void 0:l.models)||[];const e=i.value.find(p=>p.name===u.value);o.base_model_path=(e==null?void 0:e.base_model_path)||""}catch{}}async function k(){if(!o.model_name||!o.base_model_path){M.warning("缺少模型信息");return}s.value=!0;try{await S({model_name:o.model_name,train_method:o.train_method,base_model_path:o.base_model_path}),M.success("合并成功"),b.push("/model-manage")}catch{}finally{s.value=!1}}function x(){b.back()}return D(V),(l,e)=>{const p=A,f=B,d=N,h=I,C=T,c=R;return n(),r(L,{title:"合并权重"},{default:t(()=>[a(p,{type:"info",closable:!1,"show-icon":"",title:"将 LoRA 适配器权重合并到基座模型,合并后可直接用于推理部署。",style:{"margin-bottom":"20px"}}),a(C,{"label-width":"120px",style:{"max-width":"600px"}},{default:t(()=>[a(d,{label:"模型名称"},{default:t(()=>[a(f,{modelValue:o.model_name,"onUpdate:modelValue":e[0]||(e[0]=g=>o.model_name=g),disabled:""},null,8,["modelValue"])]),_:1}),a(d,{label:"训练方法"},{default:t(()=>[a(f,{"model-value":F(U)[o.train_method]||o.train_method,disabled:""},null,8,["model-value"])]),_:1}),a(d,{label:"基座模型路径"},{default:t(()=>[a(f,{modelValue:o.base_model_path,"onUpdate:modelValue":e[1]||(e[1]=g=>o.base_model_path=g),placeholder:"基座模型路径"},null,8,["modelValue"])]),_:1}),a(d,null,{default:t(()=>[a(h,{type:"primary",loading:s.value,onClick:k},{default:t(()=>[m(W(s.value?"合并中...":"开始合并"),1)]),_:1},8,["loading"]),a(h,{onClick:x},{default:t(()=>[...e[2]||(e[2]=[m("取消",-1)])]),_:1})]),_:1})]),_:1}),_.value?(n(),j("div",K,[_.value.merging?(n(),r(c,{key:0,type:"warning"},{default:t(()=>[...e[3]||(e[3]=[m("合并中",-1)])]),_:1})):_.value.merged?(n(),r(c,{key:1,type:"success"},{default:t(()=>[...e[4]||(e[4]=[m("已合并",-1)])]),_:1})):(n(),r(c,{key:2,type:"info"},{default:t(()=>[...e[5]||(e[5]=[m("未合并",-1)])]),_:1}))])):z("",!0)]),_:1})}}}),pe=J(Q,[["__scopeId","data-v-2d4f1cb8"]]);export{pe as default}; import{E as A}from"./el-alert-DBfM1mZE.js";import{a as N,E as T}from"./el-form-item-Ct_zBuY0.js";import{E as B}from"./index-CbmPSBt0.js";import{E as I}from"./index-CCavIuTY.js";import{E as R}from"./el-tag-C_D80BPW.js";import{d as P,z as q,G as D,e as r,w as t,j as y,y as E,o as n,s as a,f as F,ar as U,x as m,aa as W,c as j,g as z,A as M,v as G,ac as H}from"./index-CGB0A5x_.js";import{P as L}from"./PageCard-D1lOaeEG.js";import{a as O,m as S}from"./model-xlHsHa68.js";import{_ as J}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./vnode-DFpZw5lG.js";import"./castArray-Cgg396Sr.js";import"./_baseClone-CX1E8HTZ.js";import"./raf-CCivjDro.js";import"./index-D2-3cnGo.js";import"./index-DMVRI44M.js";import"./el-card-BWcR1iD2.js";const K={key:0,class:"model-status"},Q=P({__name:"MergeWeightsView",setup(X){const v=H(),b=G(),s=E(!1),u=y(()=>v.query.model||""),w=y(()=>v.query.method||"lora"),i=E([]),_=y(()=>i.value.find(l=>l.name===u.value)),o=q({model_name:u.value,train_method:w.value,base_model_path:""});async function V(){try{const l=await O();i.value=(l==null?void 0:l.models)||[];const e=i.value.find(p=>p.name===u.value);o.base_model_path=(e==null?void 0:e.base_model_path)||""}catch{}}async function k(){if(!o.model_name||!o.base_model_path){M.warning("缺少模型信息");return}s.value=!0;try{await S({model_name:o.model_name,train_method:o.train_method,base_model_path:o.base_model_path}),M.success("合并成功"),b.push("/model-manage")}catch{}finally{s.value=!1}}function x(){b.back()}return D(V),(l,e)=>{const p=A,f=B,d=N,h=I,C=T,c=R;return n(),r(L,{title:"合并权重"},{default:t(()=>[a(p,{type:"info",closable:!1,"show-icon":"",title:"将 LoRA 适配器权重合并到基座模型,合并后可直接用于推理部署。",style:{"margin-bottom":"20px"}}),a(C,{"label-width":"120px",style:{"max-width":"600px"}},{default:t(()=>[a(d,{label:"模型名称"},{default:t(()=>[a(f,{modelValue:o.model_name,"onUpdate:modelValue":e[0]||(e[0]=g=>o.model_name=g),disabled:""},null,8,["modelValue"])]),_:1}),a(d,{label:"训练方法"},{default:t(()=>[a(f,{"model-value":F(U)[o.train_method]||o.train_method,disabled:""},null,8,["model-value"])]),_:1}),a(d,{label:"基座模型路径"},{default:t(()=>[a(f,{modelValue:o.base_model_path,"onUpdate:modelValue":e[1]||(e[1]=g=>o.base_model_path=g),placeholder:"基座模型路径"},null,8,["modelValue"])]),_:1}),a(d,null,{default:t(()=>[a(h,{type:"primary",loading:s.value,onClick:k},{default:t(()=>[m(W(s.value?"合并中...":"开始合并"),1)]),_:1},8,["loading"]),a(h,{onClick:x},{default:t(()=>[...e[2]||(e[2]=[m("取消",-1)])]),_:1})]),_:1})]),_:1}),_.value?(n(),j("div",K,[_.value.merging?(n(),r(c,{key:0,type:"warning"},{default:t(()=>[...e[3]||(e[3]=[m("合并中",-1)])]),_:1})):_.value.merged?(n(),r(c,{key:1,type:"success"},{default:t(()=>[...e[4]||(e[4]=[m("已合并",-1)])]),_:1})):(n(),r(c,{key:2,type:"info"},{default:t(()=>[...e[5]||(e[5]=[m("未合并",-1)])]),_:1}))])):z("",!0)]),_:1})}}}),pe=J(Q,[["__scopeId","data-v-2d4f1cb8"]]);export{pe as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{E as o}from"./el-tag-11zBoTqA.js";import{d as p,e as n,w as r,j as c,o as l,x as u,aa as m}from"./index-C8bRaOsd.js";import{s as _,a as i}from"./status-Dl1fykxa.js";const T=p({__name:"ModelStatusTag",props:{status:{}},setup(e){const t=e,a=c(()=>({text:i(t.status),type:_(t.status)}));return(f,g)=>{const s=o;return l(),n(s,{type:a.value.type,size:"small",effect:"light"},{default:r(()=>[u(m(a.value.text),1)]),_:1},8,["type"])}}});export{T as _}; import{E as o}from"./el-tag-C_D80BPW.js";import{d as p,e as n,w as r,j as c,o as l,x as u,aa as m}from"./index-CGB0A5x_.js";import{s as _,a as i}from"./status-Dl1fykxa.js";const T=p({__name:"ModelStatusTag",props:{status:{}},setup(e){const t=e,a=c(()=>({text:i(t.status),type:_(t.status)}));return(f,g)=>{const s=o;return l(),n(s,{type:a.value.type,size:"small",effect:"light"},{default:r(()=>[u(m(a.value.text),1)]),_:1},8,["type"])}}});export{T as _};

View File

@@ -1 +1 @@
import{E as i}from"./el-card-BXAZ-Y4u.js";import{d as n,e as u,w as p,o as a,c as s,h as o,g as r,q as d,aa as l}from"./index-C8bRaOsd.js";import{_}from"./_plugin-vue_export-helper-DlAUqK2U.js";const h={key:0,class:"page-card-header"},m={class:"page-card-title"},f={key:0,class:"page-card-subtitle"},g={key:0,class:"page-card-extra"},v={class:"page-card-body"},b=n({__name:"PageCard",props:{title:{},subtitle:{},bordered:{type:Boolean,default:!1}},setup(t){return(e,k)=>{const c=i;return a(),u(c,{shadow:"never",class:"page-card"},{default:p(()=>[t.title||e.$slots.header?(a(),s("div",h,[o(e.$slots,"header",{},()=>[d("div",null,[d("h2",m,l(t.title),1),t.subtitle?(a(),s("p",f,l(t.subtitle),1)):r("",!0)])],!0),e.$slots.extra?(a(),s("div",g,[o(e.$slots,"extra",{},void 0,!0)])):r("",!0)])):r("",!0),d("div",v,[o(e.$slots,"default",{},void 0,!0)])]),_:3})}}}),$=_(b,[["__scopeId","data-v-4478be23"]]);export{$ as P}; import{E as i}from"./el-card-BWcR1iD2.js";import{d as n,e as u,w as p,o as a,c as s,h as o,g as r,q as d,aa as l}from"./index-CGB0A5x_.js";import{_}from"./_plugin-vue_export-helper-DlAUqK2U.js";const h={key:0,class:"page-card-header"},m={class:"page-card-title"},f={key:0,class:"page-card-subtitle"},g={key:0,class:"page-card-extra"},v={class:"page-card-body"},b=n({__name:"PageCard",props:{title:{},subtitle:{},bordered:{type:Boolean,default:!1}},setup(t){return(e,k)=>{const c=i;return a(),u(c,{shadow:"never",class:"page-card"},{default:p(()=>[t.title||e.$slots.header?(a(),s("div",h,[o(e.$slots,"header",{},()=>[d("div",null,[d("h2",m,l(t.title),1),t.subtitle?(a(),s("p",f,l(t.subtitle),1)):r("",!0)])],!0),e.$slots.extra?(a(),s("div",g,[o(e.$slots,"extra",{},void 0,!0)])):r("",!0)])):r("",!0),d("div",v,[o(e.$slots,"default",{},void 0,!0)])]),_:3})}}}),$=_(b,[["__scopeId","data-v-4478be23"]]);export{$ as P};

View File

@@ -1 +1 @@
import{_ as o}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as n,q as s}from"./index-C8bRaOsd.js";const r={},a={class:"simple-page"};function c(i,e){return t(),n("section",a,[...e[0]||(e[0]=[s("h1",null,"无权访问",-1),s("p",null,"当前账号没有访问该页面的权限,请联系管理员调整角色或页面权限。",-1)])])}const d=o(r,[["render",c],["__scopeId","data-v-9fad40f6"]]);export{d as default}; import{_ as o}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as n,q as s}from"./index-CGB0A5x_.js";const r={},a={class:"simple-page"};function c(i,e){return t(),n("section",a,[...e[0]||(e[0]=[s("h1",null,"无权访问",-1),s("p",null,"当前账号没有访问该页面的权限,请联系管理员调整角色或页面权限。",-1)])])}const d=o(r,[["render",c],["__scopeId","data-v-9fad40f6"]]);export{d as default};

View File

@@ -1 +1 @@
import{a as y,E as h}from"./el-form-item-DGwcZKHQ.js";import{E as B}from"./index-CoLjyrxq.js";import{E as R}from"./index-B2Z3XS2S.js";import{d as S,G as I,e as N,w as l,j as g,z as O,o as m,s as o,q as v,c as x,ad as U,n as V,f as q,bx as F,M as L,x as b,aa as M,A as w,y as j,v as z,ac as D}from"./index-C8bRaOsd.js";import{P}from"./PageCard-BsRjYlIm.js";import{u as A}from"./tools-nO4co6Fg.js";import{_ as G}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./castArray-CJvOrS5l.js";import"./_baseClone-vUmDCUMu.js";import"./raf-BqR8BX9r.js";import"./index-BRf1Q2lS.js";import"./index-DE1Gc93o.js";import"./el-card-BXAZ-Y4u.js";const $={class:"icon-grid"},H=["onClick"],J=S({__name:"ToolCreateView",setup(K){const d=D(),p=z(),n=A(),i=j(),s=g(()=>d.params.id!=null),c=g(()=>s.value?n.getTool(d.params.id):void 0),e=O({id:"",name:"",description:"",url:"",icon:"fa-cog"}),C={name:[{required:!0,message:"请输入工具名称",trigger:"blur"},{max:30,message:"不超过 30 字符",trigger:"blur"}],url:[{required:!0,message:"请输入跳转地址",trigger:"blur"}]};function k(){i.value&&i.value.validate(f=>{f&&(s.value?(n.updateTool(e.id,{...e}),w.success("更新成功")):(n.addTool({...e,id:"custom_"+Date.now()}),w.success("添加成功")),p.push("/tools"))})}function E(){p.back()}return I(()=>{c.value&&Object.assign(e,c.value)}),(f,a)=>{const u=B,r=y,_=R,T=h;return m(),N(P,{title:s.value?"编辑自定义工具":"添加自定义工具"},{default:l(()=>[o(T,{ref_key:"formRef",ref:i,model:e,rules:C,"label-width":"100px",style:{"max-width":"600px"}},{default:l(()=>[o(r,{label:"工具名称",prop:"name"},{default:l(()=>[o(u,{modelValue:e.name,"onUpdate:modelValue":a[0]||(a[0]=t=>e.name=t),placeholder:"请输入工具名称",maxlength:"30","show-word-limit":""},null,8,["modelValue"])]),_:1}),o(r,{label:"工具描述"},{default:l(()=>[o(u,{modelValue:e.description,"onUpdate:modelValue":a[1]||(a[1]=t=>e.description=t),type:"textarea",rows:2,maxlength:"100","show-word-limit":""},null,8,["modelValue"])]),_:1}),o(r,{label:"跳转地址",prop:"url"},{default:l(()=>[o(u,{modelValue:e.url,"onUpdate:modelValue":a[2]||(a[2]=t=>e.url=t),placeholder:"相对路径或完整 URL"},null,8,["modelValue"])]),_:1}),o(r,{label:"图标"},{default:l(()=>[v("div",$,[(m(!0),x(L,null,U(q(F),t=>(m(),x("div",{key:t,class:V(["icon-option",{selected:e.icon===t}]),onClick:Q=>e.icon=t},[v("i",{class:V(["fa",t])},null,2)],10,H))),128))])]),_:1}),o(r,null,{default:l(()=>[o(_,{type:"primary",onClick:k},{default:l(()=>[b(M(s.value?"保存":"添加"),1)]),_:1}),o(_,{onClick:E},{default:l(()=>[...a[3]||(a[3]=[b("取消",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1},8,["title"])}}}),ue=G(J,[["__scopeId","data-v-249def81"]]);export{ue as default}; import{a as y,E as h}from"./el-form-item-Ct_zBuY0.js";import{E as B}from"./index-CbmPSBt0.js";import{E as R}from"./index-CCavIuTY.js";import{d as S,G as I,e as N,w as l,j as g,z as O,o as m,s as o,q as v,c as x,ad as U,n as V,f as q,bx as F,M as L,x as b,aa as M,A as w,y as j,v as z,ac as D}from"./index-CGB0A5x_.js";import{P}from"./PageCard-D1lOaeEG.js";import{u as A}from"./tools-XKLlGqEK.js";import{_ as G}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./castArray-Cgg396Sr.js";import"./_baseClone-CX1E8HTZ.js";import"./raf-CCivjDro.js";import"./index-D2-3cnGo.js";import"./index-DMVRI44M.js";import"./el-card-BWcR1iD2.js";const $={class:"icon-grid"},H=["onClick"],J=S({__name:"ToolCreateView",setup(K){const d=D(),p=z(),n=A(),i=j(),s=g(()=>d.params.id!=null),c=g(()=>s.value?n.getTool(d.params.id):void 0),e=O({id:"",name:"",description:"",url:"",icon:"fa-cog"}),C={name:[{required:!0,message:"请输入工具名称",trigger:"blur"},{max:30,message:"不超过 30 字符",trigger:"blur"}],url:[{required:!0,message:"请输入跳转地址",trigger:"blur"}]};function k(){i.value&&i.value.validate(f=>{f&&(s.value?(n.updateTool(e.id,{...e}),w.success("更新成功")):(n.addTool({...e,id:"custom_"+Date.now()}),w.success("添加成功")),p.push("/tools"))})}function E(){p.back()}return I(()=>{c.value&&Object.assign(e,c.value)}),(f,a)=>{const u=B,r=y,_=R,T=h;return m(),N(P,{title:s.value?"编辑自定义工具":"添加自定义工具"},{default:l(()=>[o(T,{ref_key:"formRef",ref:i,model:e,rules:C,"label-width":"100px",style:{"max-width":"600px"}},{default:l(()=>[o(r,{label:"工具名称",prop:"name"},{default:l(()=>[o(u,{modelValue:e.name,"onUpdate:modelValue":a[0]||(a[0]=t=>e.name=t),placeholder:"请输入工具名称",maxlength:"30","show-word-limit":""},null,8,["modelValue"])]),_:1}),o(r,{label:"工具描述"},{default:l(()=>[o(u,{modelValue:e.description,"onUpdate:modelValue":a[1]||(a[1]=t=>e.description=t),type:"textarea",rows:2,maxlength:"100","show-word-limit":""},null,8,["modelValue"])]),_:1}),o(r,{label:"跳转地址",prop:"url"},{default:l(()=>[o(u,{modelValue:e.url,"onUpdate:modelValue":a[2]||(a[2]=t=>e.url=t),placeholder:"相对路径或完整 URL"},null,8,["modelValue"])]),_:1}),o(r,{label:"图标"},{default:l(()=>[v("div",$,[(m(!0),x(L,null,U(q(F),t=>(m(),x("div",{key:t,class:V(["icon-option",{selected:e.icon===t}]),onClick:Q=>e.icon=t},[v("i",{class:V(["fa",t])},null,2)],10,H))),128))])]),_:1}),o(r,null,{default:l(()=>[o(_,{type:"primary",onClick:k},{default:l(()=>[b(M(s.value?"保存":"添加"),1)]),_:1}),o(_,{onClick:E},{default:l(()=>[...a[3]||(a[3]=[b("取消",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1},8,["title"])}}}),ue=G(J,[["__scopeId","data-v-249def81"]]);export{ue as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{E as y,a as x}from"./el-form-item-DGwcZKHQ.js";import{E as k}from"./index-CoLjyrxq.js";import{E as U}from"./index-B2Z3XS2S.js";import{E as C,a as B}from"./el-select-DzauTPwe.js";import{a as F,E as I}from"./el-checkbox-Jsj5DifU.js";import{E as N,b as R}from"./el-radio-group-akfy4TX6.js";import{d as G,c as f,q as M,s as o,w as l,o as _,x as r,M as O,ad as S,aa as q,f as z,v as A,y as D,z as L,db as T,A as $}from"./index-C8bRaOsd.js";/* empty css */import"./el-scrollbar-CMp13_RQ.js";import"./el-popper-BY86ZM1h.js";import"./el-tag-11zBoTqA.js";import{_ as j}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./castArray-CJvOrS5l.js";import"./_baseClone-vUmDCUMu.js";import"./raf-BqR8BX9r.js";import"./index-BRf1Q2lS.js";import"./index-DE1Gc93o.js";import"./index-BpW9Z31J.js";import"./vnode-B9WOR-0a.js";import"./index-BVldZEzQ.js";import"./scroll-DL9cY7fX.js";import"./clamp-CNwRTQDt.js";import"./toNumber-Bt8UgFrr.js";import"./_baseIteratee-7-PMrTPE.js";import"./omit-BHHw65tB.js";const H={class:"user-create"},J=G({__name:"UserCreateView",setup(K){const d=A(),n=D(!1),a=L({username:"",display_name:"",password:"platform123",role:"viewer",status:"active",permissions:["dashboard"]}),b=["dashboard","fine-tune","model-eval","model-inference","model-manage","dataset","data-process","data-convert","compute","hardware","logs","user-settings"];async function V(){n.value=!0;try{await T(a),$.success("用户已创建"),d.push("/user-settings")}finally{n.value=!1}}return(P,e)=>{const m=k,s=x,u=B,v=C,p=R,c=N,E=I,w=F,i=U,g=y;return _(),f("section",H,[e[11]||(e[11]=M("h1",null,"创建用户",-1)),o(g,{model:a,"label-width":"110px",class:"user-form"},{default:l(()=>[o(s,{label:"账号"},{default:l(()=>[o(m,{modelValue:a.username,"onUpdate:modelValue":e[0]||(e[0]=t=>a.username=t)},null,8,["modelValue"])]),_:1}),o(s,{label:"显示名称"},{default:l(()=>[o(m,{modelValue:a.display_name,"onUpdate:modelValue":e[1]||(e[1]=t=>a.display_name=t)},null,8,["modelValue"])]),_:1}),o(s,{label:"初始密码"},{default:l(()=>[o(m,{modelValue:a.password,"onUpdate:modelValue":e[2]||(e[2]=t=>a.password=t),type:"password","show-password":""},null,8,["modelValue"])]),_:1}),o(s,{label:"角色"},{default:l(()=>[o(v,{modelValue:a.role,"onUpdate:modelValue":e[3]||(e[3]=t=>a.role=t)},{default:l(()=>[o(u,{label:"管理员",value:"admin"}),o(u,{label:"操作员",value:"operator"}),o(u,{label:"观察员",value:"viewer"})]),_:1},8,["modelValue"])]),_:1}),o(s,{label:"状态"},{default:l(()=>[o(c,{modelValue:a.status,"onUpdate:modelValue":e[4]||(e[4]=t=>a.status=t)},{default:l(()=>[o(p,{value:"active"},{default:l(()=>[...e[7]||(e[7]=[r("启用",-1)])]),_:1}),o(p,{value:"disabled"},{default:l(()=>[...e[8]||(e[8]=[r("禁用",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),o(s,{label:"页面权限"},{default:l(()=>[o(w,{modelValue:a.permissions,"onUpdate:modelValue":e[5]||(e[5]=t=>a.permissions=t)},{default:l(()=>[(_(),f(O,null,S(b,t=>o(E,{key:t,value:t},{default:l(()=>[r(q(t),1)]),_:2},1032,["value"])),64))]),_:1},8,["modelValue"])]),_:1}),o(s,null,{default:l(()=>[o(i,{onClick:e[6]||(e[6]=t=>z(d).back())},{default:l(()=>[...e[9]||(e[9]=[r("返回",-1)])]),_:1}),o(i,{type:"primary",loading:n.value,onClick:V},{default:l(()=>[...e[10]||(e[10]=[r("保存",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"])])}}}),Ee=j(J,[["__scopeId","data-v-af832a20"]]);export{Ee as default}; import{E as y,a as x}from"./el-form-item-Ct_zBuY0.js";import{E as k}from"./index-CbmPSBt0.js";import{E as U}from"./index-CCavIuTY.js";import{E as C,a as B}from"./el-select-C59URVI0.js";import{a as F,E as I}from"./el-checkbox-Ci1DH0Aj.js";import{E as N,b as R}from"./el-radio-group-B7nPUe8-.js";import{d as G,c as f,q as M,s as o,w as l,o as _,x as r,M as O,ad as S,aa as q,f as z,v as A,y as D,z as L,db as T,A as $}from"./index-CGB0A5x_.js";/* empty css */import"./el-scrollbar-p6_f_LH2.js";import"./el-popper-DvBtRO32.js";import"./el-tag-C_D80BPW.js";import{_ as j}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./castArray-Cgg396Sr.js";import"./_baseClone-CX1E8HTZ.js";import"./raf-CCivjDro.js";import"./index-D2-3cnGo.js";import"./index-DMVRI44M.js";import"./index-BPwPlcbL.js";import"./vnode-DFpZw5lG.js";import"./index-khuXz7sd.js";import"./scroll-C0BSy_Rk.js";import"./clamp-BqqU4KQ-.js";import"./toNumber-IRhFg6gN.js";import"./_baseIteratee-uVh0OyD5.js";import"./omit-DaFv1hTo.js";const H={class:"user-create"},J=G({__name:"UserCreateView",setup(K){const d=A(),n=D(!1),a=L({username:"",display_name:"",password:"platform123",role:"viewer",status:"active",permissions:["dashboard"]}),b=["dashboard","fine-tune","model-eval","model-inference","model-manage","dataset","data-process","data-convert","compute","hardware","logs","user-settings"];async function V(){n.value=!0;try{await T(a),$.success("用户已创建"),d.push("/user-settings")}finally{n.value=!1}}return(P,e)=>{const m=k,s=x,u=B,v=C,p=R,c=N,E=I,w=F,i=U,g=y;return _(),f("section",H,[e[11]||(e[11]=M("h1",null,"创建用户",-1)),o(g,{model:a,"label-width":"110px",class:"user-form"},{default:l(()=>[o(s,{label:"账号"},{default:l(()=>[o(m,{modelValue:a.username,"onUpdate:modelValue":e[0]||(e[0]=t=>a.username=t)},null,8,["modelValue"])]),_:1}),o(s,{label:"显示名称"},{default:l(()=>[o(m,{modelValue:a.display_name,"onUpdate:modelValue":e[1]||(e[1]=t=>a.display_name=t)},null,8,["modelValue"])]),_:1}),o(s,{label:"初始密码"},{default:l(()=>[o(m,{modelValue:a.password,"onUpdate:modelValue":e[2]||(e[2]=t=>a.password=t),type:"password","show-password":""},null,8,["modelValue"])]),_:1}),o(s,{label:"角色"},{default:l(()=>[o(v,{modelValue:a.role,"onUpdate:modelValue":e[3]||(e[3]=t=>a.role=t)},{default:l(()=>[o(u,{label:"管理员",value:"admin"}),o(u,{label:"操作员",value:"operator"}),o(u,{label:"观察员",value:"viewer"})]),_:1},8,["modelValue"])]),_:1}),o(s,{label:"状态"},{default:l(()=>[o(c,{modelValue:a.status,"onUpdate:modelValue":e[4]||(e[4]=t=>a.status=t)},{default:l(()=>[o(p,{value:"active"},{default:l(()=>[...e[7]||(e[7]=[r("启用",-1)])]),_:1}),o(p,{value:"disabled"},{default:l(()=>[...e[8]||(e[8]=[r("禁用",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),o(s,{label:"页面权限"},{default:l(()=>[o(w,{modelValue:a.permissions,"onUpdate:modelValue":e[5]||(e[5]=t=>a.permissions=t)},{default:l(()=>[(_(),f(O,null,S(b,t=>o(E,{key:t,value:t},{default:l(()=>[r(q(t),1)]),_:2},1032,["value"])),64))]),_:1},8,["modelValue"])]),_:1}),o(s,null,{default:l(()=>[o(i,{onClick:e[6]||(e[6]=t=>z(d).back())},{default:l(()=>[...e[9]||(e[9]=[r("返回",-1)])]),_:1}),o(i,{type:"primary",loading:n.value,onClick:V},{default:l(()=>[...e[10]||(e[10]=[r("保存",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"])])}}}),Ee=j(J,[["__scopeId","data-v-af832a20"]]);export{Ee as default};

View File

@@ -1 +1 @@
import{_ as o}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as r,q as s}from"./index-C8bRaOsd.js";const a={},c={class:"simple-page"};function n(_,e){return t(),r("section",c,[...e[0]||(e[0]=[s("h1",null,"权限设置",-1),s("p",null,"第一版已支持账号页面权限读取与保存,精细化项目/模型/数据集权限将在后续版本补齐。",-1)])])}const p=o(a,[["render",n],["__scopeId","data-v-49c3a2ea"]]);export{p as default}; import{_ as o}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as r,q as s}from"./index-CGB0A5x_.js";const a={},c={class:"simple-page"};function n(_,e){return t(),r("section",c,[...e[0]||(e[0]=[s("h1",null,"权限设置",-1),s("p",null,"第一版已支持账号页面权限读取与保存,精细化项目/模型/数据集权限将在后续版本补齐。",-1)])])}const p=o(a,[["render",n],["__scopeId","data-v-49c3a2ea"]]);export{p as default};

View File

@@ -1 +1 @@
import{E as w}from"./index-B2Z3XS2S.js";import{E as y}from"./el-tag-11zBoTqA.js";import{a as h,E}from"./el-table-48yEgKcK.js";import{v as T}from"./directive-D_bJoBNR.js";import{d as x,G as V,K as B,c as C,q as r,s as t,w as o,y as m,da as U,o as k,x as i,f as d,aa as u}from"./index-C8bRaOsd.js";import"./el-scrollbar-CMp13_RQ.js";import"./el-popper-BY86ZM1h.js";import"./el-tooltip-l0sNRNKZ.js";import"./el-checkbox-Jsj5DifU.js";import{s as N,a as S}from"./status-Dl1fykxa.js";import{_ as D}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./_baseClone-vUmDCUMu.js";import"./index-DE1Gc93o.js";import"./_baseIteratee-7-PMrTPE.js";import"./castArray-CJvOrS5l.js";import"./debounce-BADwekKz.js";import"./toNumber-Bt8UgFrr.js";import"./index-BpW9Z31J.js";import"./raf-BqR8BX9r.js";import"./omit-BHHw65tB.js";const L={class:"user-settings"},$={class:"page-header"},q=x({__name:"UserSettingsView",setup(z){const l=m(!1),n=m([]);async function _(){l.value=!0;try{n.value=await U()}finally{l.value=!1}}return V(_),(c,e)=>{const f=w,a=E,g=y,b=h,v=T;return B((k(),C("section",L,[r("header",$,[e[2]||(e[2]=r("div",null,[r("h1",null,"用户设置"),r("p",null,"管理平台账号、角色状态和页面权限。")],-1)),t(f,{type:"primary",onClick:e[0]||(e[0]=s=>c.$router.push("/user-settings/create"))},{default:o(()=>[...e[1]||(e[1]=[i("创建用户",-1)])]),_:1})]),t(b,{data:n.value},{default:o(()=>[t(a,{prop:"username",label:"账号","min-width":"140"}),t(a,{prop:"display_name",label:"显示名称","min-width":"160"}),t(a,{prop:"role",label:"角色",width:"120"}),t(a,{label:"状态",width:"120"},{default:o(({row:s})=>[t(g,{type:d(N)(s.status),size:"small"},{default:o(()=>[i(u(d(S)(s.status)),1)]),_:2},1032,["type"])]),_:1}),t(a,{label:"权限数",width:"120"},{default:o(({row:s})=>{var p;return[i(u(((p=s.permissions)==null?void 0:p.length)||0),1)]}),_:1}),t(a,{prop:"create_time",label:"创建时间","min-width":"180"})]),_:1},8,["data"])])),[[v,l.value]])}}}),st=D(q,[["__scopeId","data-v-16fa3de4"]]);export{st as default}; import{E as w}from"./index-CCavIuTY.js";import{E as y}from"./el-tag-C_D80BPW.js";import{a as h,E}from"./el-table-DkdQ6gPU.js";import{v as T}from"./directive-vzjADwzS.js";import{d as x,G as V,K as B,c as C,q as r,s as t,w as o,y as m,da as U,o as k,x as i,f as d,aa as u}from"./index-CGB0A5x_.js";import"./el-scrollbar-p6_f_LH2.js";import"./el-popper-DvBtRO32.js";import"./el-tooltip-l0sNRNKZ.js";import"./el-checkbox-Ci1DH0Aj.js";import{s as N,a as S}from"./status-Dl1fykxa.js";import{_ as D}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./_baseClone-CX1E8HTZ.js";import"./index-DMVRI44M.js";import"./_baseIteratee-uVh0OyD5.js";import"./castArray-Cgg396Sr.js";import"./debounce-Bqww2DS8.js";import"./toNumber-IRhFg6gN.js";import"./index-BPwPlcbL.js";import"./raf-CCivjDro.js";import"./omit-DaFv1hTo.js";const L={class:"user-settings"},$={class:"page-header"},q=x({__name:"UserSettingsView",setup(z){const l=m(!1),n=m([]);async function _(){l.value=!0;try{n.value=await U()}finally{l.value=!1}}return V(_),(c,e)=>{const f=w,a=E,g=y,b=h,v=T;return B((k(),C("section",L,[r("header",$,[e[2]||(e[2]=r("div",null,[r("h1",null,"用户设置"),r("p",null,"管理平台账号、角色状态和页面权限。")],-1)),t(f,{type:"primary",onClick:e[0]||(e[0]=s=>c.$router.push("/user-settings/create"))},{default:o(()=>[...e[1]||(e[1]=[i("创建用户",-1)])]),_:1})]),t(b,{data:n.value},{default:o(()=>[t(a,{prop:"username",label:"账号","min-width":"140"}),t(a,{prop:"display_name",label:"显示名称","min-width":"160"}),t(a,{prop:"role",label:"角色",width:"120"}),t(a,{label:"状态",width:"120"},{default:o(({row:s})=>[t(g,{type:d(N)(s.status),size:"small"},{default:o(()=>[i(u(d(S)(s.status)),1)]),_:2},1032,["type"])]),_:1}),t(a,{label:"权限数",width:"120"},{default:o(({row:s})=>{var p;return[i(u(((p=s.permissions)==null?void 0:p.length)||0),1)]}),_:1}),t(a,{prop:"create_time",label:"创建时间","min-width":"180"})]),_:1},8,["data"])])),[[v,l.value]])}}}),st=D(q,[["__scopeId","data-v-16fa3de4"]]);export{st as default};

View File

@@ -1 +1 @@
import{cs as T,ct as Q,cu as U,cv as B,cw as X,cx as Z,cy as M,cz as V,cA as D,cB as z,cj as k,cC as G,cD as ee,cE as m,ch as O,cF as K,cG as d,cH as N,cI as b,cJ as re,cK as te,ce as ne,cL as ae}from"./index-C8bRaOsd.js";var S=Object.create,oe=(function(){function e(){}return function(r){if(!T(r))return{};if(S)return S(r);e.prototype=r;var t=new e;return e.prototype=void 0,t}})();function se(e,r){var t=-1,a=e.length;for(r||(r=Array(a));++t<a;)r[t]=e[t];return r}function ce(e,r){for(var t=-1,a=e==null?0:e.length;++t<a&&r(e[t],t,e)!==!1;);return e}function y(e,r,t,a){var g=!t;t||(t={});for(var s=-1,o=r.length;++s<o;){var i=r[s],c=void 0;c===void 0&&(c=e[i]),g?Q(t,i,c):U(t,i,c)}return t}function ie(e){var r=[];if(e!=null)for(var t in Object(e))r.push(t);return r}var fe=Object.prototype,ue=fe.hasOwnProperty;function ge(e){if(!T(e))return ie(e);var r=B(e),t=[];for(var a in e)a=="constructor"&&(r||!ue.call(e,a))||t.push(a);return t}function A(e){return X(e)?Z(e,!0):ge(e)}function le(e,r){return e&&y(r,M(r),e)}function be(e,r){return e&&y(r,A(r),e)}var _=typeof exports=="object"&&exports&&!exports.nodeType&&exports,x=_&&typeof module=="object"&&module&&!module.nodeType&&module,ye=x&&x.exports===_,I=ye?V.Buffer:void 0,C=I?I.allocUnsafe:void 0;function pe(e,r){if(r)return e.slice();var t=e.length,a=C?C(t):new e.constructor(t);return e.copy(a),a}function Te(e,r){return y(e,D(e),r)}var de=Object.getOwnPropertySymbols,R=de?function(e){for(var r=[];e;)k(r,D(e)),e=G(e);return r}:z;function Ae(e,r){return y(e,R(e),r)}function je(e){return ee(e,A,R)}var he=Object.prototype,we=he.hasOwnProperty;function ve(e){var r=e.length,t=new e.constructor(r);return r&&typeof e[0]=="string"&&we.call(e,"index")&&(t.index=e.index,t.input=e.input),t}function j(e){var r=new e.constructor(e.byteLength);return new m(r).set(new m(e)),r}function $e(e,r){var t=r?j(e.buffer):e.buffer;return new e.constructor(t,e.byteOffset,e.byteLength)}var me=/\w*$/;function Oe(e){var r=new e.constructor(e.source,me.exec(e));return r.lastIndex=e.lastIndex,r}var E=O?O.prototype:void 0,F=E?E.valueOf:void 0;function Se(e){return F?Object(F.call(e)):{}}function xe(e,r){var t=r?j(e.buffer):e.buffer;return new e.constructor(t,e.byteOffset,e.length)}var Ie="[object Boolean]",Ce="[object Date]",Ee="[object Map]",Fe="[object Number]",Le="[object RegExp]",Pe="[object Set]",Ue="[object String]",Be="[object Symbol]",Me="[object ArrayBuffer]",De="[object DataView]",Ge="[object Float32Array]",Ke="[object Float64Array]",Ne="[object Int8Array]",_e="[object Int16Array]",Re="[object Int32Array]",He="[object Uint8Array]",Je="[object Uint8ClampedArray]",We="[object Uint16Array]",Ye="[object Uint32Array]";function qe(e,r,t){var a=e.constructor;switch(r){case Me:return j(e);case Ie:case Ce:return new a(+e);case De:return $e(e,t);case Ge:case Ke:case Ne:case _e:case Re:case He:case Je:case We:case Ye:return xe(e,t);case Ee:return new a;case Fe:case Ue:return new a(e);case Le:return Oe(e);case Pe:return new a;case Be:return Se(e)}}function Qe(e){return typeof e.constructor=="function"&&!B(e)?oe(G(e)):{}}var Xe="[object Map]";function Ze(e){return K(e)&&d(e)==Xe}var L=b&&b.isMap,Ve=L?N(L):Ze,ze="[object Set]";function ke(e){return K(e)&&d(e)==ze}var P=b&&b.isSet,er=P?N(P):ke,rr=1,tr=2,nr=4,H="[object Arguments]",ar="[object Array]",or="[object Boolean]",sr="[object Date]",cr="[object Error]",J="[object Function]",ir="[object GeneratorFunction]",fr="[object Map]",ur="[object Number]",W="[object Object]",gr="[object RegExp]",lr="[object Set]",br="[object String]",yr="[object Symbol]",pr="[object WeakMap]",Tr="[object ArrayBuffer]",dr="[object DataView]",Ar="[object Float32Array]",jr="[object Float64Array]",hr="[object Int8Array]",wr="[object Int16Array]",vr="[object Int32Array]",$r="[object Uint8Array]",mr="[object Uint8ClampedArray]",Or="[object Uint16Array]",Sr="[object Uint32Array]",n={};n[H]=n[ar]=n[Tr]=n[dr]=n[or]=n[sr]=n[Ar]=n[jr]=n[hr]=n[wr]=n[vr]=n[fr]=n[ur]=n[W]=n[gr]=n[lr]=n[br]=n[yr]=n[$r]=n[mr]=n[Or]=n[Sr]=!0;n[cr]=n[J]=n[pr]=!1;function p(e,r,t,a,g,s){var o,i=r&rr,c=r&tr,Y=r&nr;if(t&&(o=g?t(e,a,g,s):t(e)),o!==void 0)return o;if(!T(e))return e;var h=ne(e);if(h){if(o=ve(e),!i)return se(e,o)}else{var l=d(e),w=l==J||l==ir;if(re(e))return pe(e,i);if(l==W||l==H||w&&!g){if(o=c||w?{}:Qe(e),!i)return c?Ae(e,be(o,e)):Te(e,le(o,e))}else{if(!n[l])return g?e:{};o=qe(e,l,i)}}s||(s=new te);var v=s.get(e);if(v)return v;s.set(e,o),er(e)?e.forEach(function(f){o.add(p(f,r,t,f,e,s))}):Ve(e)&&e.forEach(function(f,u){o.set(u,p(f,r,t,u,e,s))});var q=Y?c?je:ae:c?A:M,$=h?void 0:q(e);return ce($||e,function(f,u){$&&(u=f,f=e[u]),U(o,u,p(f,r,t,u,e,s))}),o}export{se as a,p as b,y as c,pe as d,xe as e,je as g,Qe as i,A as k}; import{cs as T,ct as Q,cu as U,cv as B,cw as X,cx as Z,cy as M,cz as V,cA as D,cB as z,cj as k,cC as G,cD as ee,cE as m,ch as O,cF as K,cG as d,cH as N,cI as b,cJ as re,cK as te,ce as ne,cL as ae}from"./index-CGB0A5x_.js";var S=Object.create,oe=(function(){function e(){}return function(r){if(!T(r))return{};if(S)return S(r);e.prototype=r;var t=new e;return e.prototype=void 0,t}})();function se(e,r){var t=-1,a=e.length;for(r||(r=Array(a));++t<a;)r[t]=e[t];return r}function ce(e,r){for(var t=-1,a=e==null?0:e.length;++t<a&&r(e[t],t,e)!==!1;);return e}function y(e,r,t,a){var g=!t;t||(t={});for(var s=-1,o=r.length;++s<o;){var i=r[s],c=void 0;c===void 0&&(c=e[i]),g?Q(t,i,c):U(t,i,c)}return t}function ie(e){var r=[];if(e!=null)for(var t in Object(e))r.push(t);return r}var fe=Object.prototype,ue=fe.hasOwnProperty;function ge(e){if(!T(e))return ie(e);var r=B(e),t=[];for(var a in e)a=="constructor"&&(r||!ue.call(e,a))||t.push(a);return t}function A(e){return X(e)?Z(e,!0):ge(e)}function le(e,r){return e&&y(r,M(r),e)}function be(e,r){return e&&y(r,A(r),e)}var _=typeof exports=="object"&&exports&&!exports.nodeType&&exports,x=_&&typeof module=="object"&&module&&!module.nodeType&&module,ye=x&&x.exports===_,I=ye?V.Buffer:void 0,C=I?I.allocUnsafe:void 0;function pe(e,r){if(r)return e.slice();var t=e.length,a=C?C(t):new e.constructor(t);return e.copy(a),a}function Te(e,r){return y(e,D(e),r)}var de=Object.getOwnPropertySymbols,R=de?function(e){for(var r=[];e;)k(r,D(e)),e=G(e);return r}:z;function Ae(e,r){return y(e,R(e),r)}function je(e){return ee(e,A,R)}var he=Object.prototype,we=he.hasOwnProperty;function ve(e){var r=e.length,t=new e.constructor(r);return r&&typeof e[0]=="string"&&we.call(e,"index")&&(t.index=e.index,t.input=e.input),t}function j(e){var r=new e.constructor(e.byteLength);return new m(r).set(new m(e)),r}function $e(e,r){var t=r?j(e.buffer):e.buffer;return new e.constructor(t,e.byteOffset,e.byteLength)}var me=/\w*$/;function Oe(e){var r=new e.constructor(e.source,me.exec(e));return r.lastIndex=e.lastIndex,r}var E=O?O.prototype:void 0,F=E?E.valueOf:void 0;function Se(e){return F?Object(F.call(e)):{}}function xe(e,r){var t=r?j(e.buffer):e.buffer;return new e.constructor(t,e.byteOffset,e.length)}var Ie="[object Boolean]",Ce="[object Date]",Ee="[object Map]",Fe="[object Number]",Le="[object RegExp]",Pe="[object Set]",Ue="[object String]",Be="[object Symbol]",Me="[object ArrayBuffer]",De="[object DataView]",Ge="[object Float32Array]",Ke="[object Float64Array]",Ne="[object Int8Array]",_e="[object Int16Array]",Re="[object Int32Array]",He="[object Uint8Array]",Je="[object Uint8ClampedArray]",We="[object Uint16Array]",Ye="[object Uint32Array]";function qe(e,r,t){var a=e.constructor;switch(r){case Me:return j(e);case Ie:case Ce:return new a(+e);case De:return $e(e,t);case Ge:case Ke:case Ne:case _e:case Re:case He:case Je:case We:case Ye:return xe(e,t);case Ee:return new a;case Fe:case Ue:return new a(e);case Le:return Oe(e);case Pe:return new a;case Be:return Se(e)}}function Qe(e){return typeof e.constructor=="function"&&!B(e)?oe(G(e)):{}}var Xe="[object Map]";function Ze(e){return K(e)&&d(e)==Xe}var L=b&&b.isMap,Ve=L?N(L):Ze,ze="[object Set]";function ke(e){return K(e)&&d(e)==ze}var P=b&&b.isSet,er=P?N(P):ke,rr=1,tr=2,nr=4,H="[object Arguments]",ar="[object Array]",or="[object Boolean]",sr="[object Date]",cr="[object Error]",J="[object Function]",ir="[object GeneratorFunction]",fr="[object Map]",ur="[object Number]",W="[object Object]",gr="[object RegExp]",lr="[object Set]",br="[object String]",yr="[object Symbol]",pr="[object WeakMap]",Tr="[object ArrayBuffer]",dr="[object DataView]",Ar="[object Float32Array]",jr="[object Float64Array]",hr="[object Int8Array]",wr="[object Int16Array]",vr="[object Int32Array]",$r="[object Uint8Array]",mr="[object Uint8ClampedArray]",Or="[object Uint16Array]",Sr="[object Uint32Array]",n={};n[H]=n[ar]=n[Tr]=n[dr]=n[or]=n[sr]=n[Ar]=n[jr]=n[hr]=n[wr]=n[vr]=n[fr]=n[ur]=n[W]=n[gr]=n[lr]=n[br]=n[yr]=n[$r]=n[mr]=n[Or]=n[Sr]=!0;n[cr]=n[J]=n[pr]=!1;function p(e,r,t,a,g,s){var o,i=r&rr,c=r&tr,Y=r&nr;if(t&&(o=g?t(e,a,g,s):t(e)),o!==void 0)return o;if(!T(e))return e;var h=ne(e);if(h){if(o=ve(e),!i)return se(e,o)}else{var l=d(e),w=l==J||l==ir;if(re(e))return pe(e,i);if(l==W||l==H||w&&!g){if(o=c||w?{}:Qe(e),!i)return c?Ae(e,be(o,e)):Te(e,le(o,e))}else{if(!n[l])return g?e:{};o=qe(e,l,i)}}s||(s=new te);var v=s.get(e);if(v)return v;s.set(e,o),er(e)?e.forEach(function(f){o.add(p(f,r,t,f,e,s))}):Ve(e)&&e.forEach(function(f,u){o.set(u,p(f,r,t,u,e,s))});var q=Y?c?je:ae:c?A:M,$=h?void 0:q(e);return ce($||e,function(f,u){$&&(u=f,f=e[u]),U(o,u,p(f,r,t,u,e,s))}),o}export{se as a,p as b,y as c,pe as d,xe as e,je as g,Qe as i,A as k};

View File

@@ -1 +1 @@
import{cK as O,d2 as a,cs as P,cy as p,d3 as A,cl as l,cU as M,co as _,ce as d}from"./index-C8bRaOsd.js";import{h as g,i as m}from"./index-DE1Gc93o.js";var C=1,I=2;function L(n,r,e,t){var i=e.length,u=i;if(n==null)return!u;for(n=Object(n);i--;){var f=e[i];if(f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++i<u;){f=e[i];var s=f[0],o=n[s],y=f[1];if(f[2]){if(o===void 0&&!(s in n))return!1}else{var E=new O,c;if(!(c===void 0?a(y,o,C|I,t,E):c))return!1}}return!0}function R(n){return n===n&&!P(n)}function D(n){for(var r=p(n),e=r.length;e--;){var t=r[e],i=n[t];r[e]=[t,i,R(i)]}return r}function h(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function G(n){var r=D(n);return r.length==1&&r[0][2]?h(r[0][0],r[0][1]):function(e){return e===n||L(e,n,r)}}var w=1,F=2;function b(n,r){return A(n)&&R(r)?h(l(n),r):function(e){var t=M(e,n);return t===void 0&&t===r?g(e,n):a(r,t,w|F)}}function K(n){return function(r){return r==null?void 0:r[n]}}function S(n){return function(r){return _(r,n)}}function U(n){return A(n)?K(l(n)):S(n)}function T(n){return typeof n=="function"?n:n==null?m:typeof n=="object"?d(n)?b(n[0],n[1]):G(n):U(n)}export{T as b}; import{cK as O,d2 as a,cs as P,cy as p,d3 as A,cl as l,cU as M,co as _,ce as d}from"./index-CGB0A5x_.js";import{h as g,i as m}from"./index-DMVRI44M.js";var C=1,I=2;function L(n,r,e,t){var i=e.length,u=i;if(n==null)return!u;for(n=Object(n);i--;){var f=e[i];if(f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++i<u;){f=e[i];var s=f[0],o=n[s],y=f[1];if(f[2]){if(o===void 0&&!(s in n))return!1}else{var E=new O,c;if(!(c===void 0?a(y,o,C|I,t,E):c))return!1}}return!0}function R(n){return n===n&&!P(n)}function D(n){for(var r=p(n),e=r.length;e--;){var t=r[e],i=n[t];r[e]=[t,i,R(i)]}return r}function h(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function G(n){var r=D(n);return r.length==1&&r[0][2]?h(r[0][0],r[0][1]):function(e){return e===n||L(e,n,r)}}var w=1,F=2;function b(n,r){return A(n)&&R(r)?h(l(n),r):function(e){var t=M(e,n);return t===void 0&&t===r?g(e,n):a(r,t,w|F)}}function K(n){return function(r){return r==null?void 0:r[n]}}function S(n){return function(r){return _(r,n)}}function U(n){return A(n)?K(l(n)):S(n)}function T(n){return typeof n=="function"?n:n==null?m:typeof n=="object"?d(n)?b(n[0],n[1]):G(n):U(n)}export{T as b};

View File

@@ -1 +1 @@
import{ce as a}from"./index-C8bRaOsd.js";function e(){if(!arguments.length)return[];var r=arguments[0];return a(r)?r:[r]}export{e as c}; import{ce as a}from"./index-CGB0A5x_.js";function e(){if(!arguments.length)return[];var r=arguments[0];return a(r)?r:[r]}export{e as c};

View File

@@ -1 +1 @@
import{t as n}from"./toNumber-Bt8UgFrr.js";function t(d,f,i){return d===d&&(i!==void 0&&(d=d<=i?d:i),f!==void 0&&(d=d>=f?d:f)),d}function c(d,f,i){return i===void 0&&(i=f,f=void 0),i!==void 0&&(i=n(i),i=i===i?i:0),f!==void 0&&(f=n(f),f=f===f?f:0),t(n(d),f,i)}export{c}; import{t as n}from"./toNumber-IRhFg6gN.js";function t(d,f,i){return d===d&&(i!==void 0&&(d=d<=i?d:i),f!==void 0&&(d=d>=f?d:f)),d}function c(d,f,i){return i===void 0&&(i=f,f=void 0),i!==void 0&&(i=n(i),i=i===i?i:0),f!==void 0&&(f=n(f),f=f===f?f:0),t(n(d),f,i)}export{c};

View File

@@ -1 +1 @@
import{aF as n,aG as t,aI as l}from"./index-C8bRaOsd.js";const p=()=>n("/model-compare"),i=e=>n(`/model-compare/${e}`),u=e=>l(`/model-compare/${e}`),h=e=>t("/model-compare/stop-by-pid",{pid:e}),g=e=>t(`/model-compare/${e}/load`),C=e=>t(`/model-compare/${e}/unload`),y=async e=>{const a=await t("/model-compare/stream-chat",e);return{ok:!0,body:{getReader:()=>{const o=(a==null?void 0:a.response)||"",r=new TextEncoder,s=[o.slice(0,o.length/3),o.slice(o.length/3,2*o.length/3),o.slice(2*o.length/3)];let c=0;return{read:async()=>c>=s.length?{done:!0,value:void 0}:{done:!1,value:r.encode(s[c++])}}}}}},v=e=>t("/model-compare/chat-with-port",e);export{i as a,y as b,v as c,u as d,p as g,g as l,h as s,C as u}; import{aF as n,aG as t,aI as l}from"./index-CGB0A5x_.js";const p=()=>n("/model-compare"),i=e=>n(`/model-compare/${e}`),u=e=>l(`/model-compare/${e}`),h=e=>t("/model-compare/stop-by-pid",{pid:e}),g=e=>t(`/model-compare/${e}/load`),C=e=>t(`/model-compare/${e}/unload`),y=async e=>{const a=await t("/model-compare/stream-chat",e);return{ok:!0,body:{getReader:()=>{const o=(a==null?void 0:a.response)||"",r=new TextEncoder,s=[o.slice(0,o.length/3),o.slice(o.length/3,2*o.length/3),o.slice(2*o.length/3)];let c=0;return{read:async()=>c>=s.length?{done:!0,value:void 0}:{done:!1,value:r.encode(s[c++])}}}}}},v=e=>t("/model-compare/chat-with-port",e);export{i as a,y as b,v as c,u as d,p as g,g as l,h as s,C as u};

View File

@@ -1 +1 @@
import{_ as M,ah as y,T as A,a7 as D,aS as I,aT as w}from"./install-CLK_tRrI.js";var T=(function(){function s(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=Math.PI*2,this.clockwise=!0}return s})(),x=(function(s){M(r,s);function r(t){var a=s.call(this,t)||this;return a.type="sausage",a}return r.prototype.getDefaultShape=function(){return new T},r.prototype.buildPath=function(t,a){var c=a.cx,e=a.cy,o=Math.max(a.r0||0,0),u=Math.max(a.r,0),l=(u-o)*.5,v=o+l,n=a.startAngle,i=a.endAngle,h=a.clockwise,S=Math.PI*2,d=h?i-n<S:n-i<S;d||(n=i-(h?S:-S));var g=Math.cos(n),f=Math.sin(n),m=Math.cos(i),P=Math.sin(i);d?(t.moveTo(g*o+c,f*o+e),t.arc(g*v+c,f*v+e,l,-Math.PI+n,n,!h)):t.moveTo(g*u+c,f*u+e),t.arc(c,e,u,n,i,!h),t.arc(m*v+c,P*v+e,l,i-Math.PI*2,i-Math.PI,!h),o!==0&&t.arc(c,e,o,i,n,h)},r})(y);function E(s,r,t){r=A(r)&&{coordDimensions:r}||D({encodeDefine:s.getEncode()},r);var a=s.getSource(),c=I(a,r).dimensions,e=new w(c,s);return e.initData(a,t),e}export{x as S,E as c}; import{_ as M,ah as y,T as A,a7 as D,aS as I,aT as w}from"./install-caVZROyC.js";var T=(function(){function s(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=Math.PI*2,this.clockwise=!0}return s})(),x=(function(s){M(r,s);function r(t){var a=s.call(this,t)||this;return a.type="sausage",a}return r.prototype.getDefaultShape=function(){return new T},r.prototype.buildPath=function(t,a){var c=a.cx,e=a.cy,o=Math.max(a.r0||0,0),u=Math.max(a.r,0),l=(u-o)*.5,v=o+l,n=a.startAngle,i=a.endAngle,h=a.clockwise,S=Math.PI*2,d=h?i-n<S:n-i<S;d||(n=i-(h?S:-S));var g=Math.cos(n),f=Math.sin(n),m=Math.cos(i),P=Math.sin(i);d?(t.moveTo(g*o+c,f*o+e),t.arc(g*v+c,f*v+e,l,-Math.PI+n,n,!h)):t.moveTo(g*u+c,f*u+e),t.arc(c,e,u,n,i,!h),t.arc(m*v+c,P*v+e,l,i-Math.PI*2,i-Math.PI,!h),o!==0&&t.arc(c,e,o,i,n,h)},r})(y);function E(s,r,t){r=A(r)&&{coordDimensions:r}||D({encodeDefine:s.getEncode()},r);var a=s.getSource(),c=I(a,r).dimensions,e=new w(c,s);return e.initData(a,t),e}export{x as S,E as c};

View File

@@ -1 +1 @@
import{aF as n,aI as r,aH as p,aG as s}from"./index-C8bRaOsd.js";function m(e={}){return n("/data-process",e)}const l=e=>n(`/data-process/${encodeURIComponent(e)}`),i=e=>s("/data-process",e),R=(e,o)=>p(`/data-process/${encodeURIComponent(e)}`,o),U=(e,o)=>s(`/data-process/${encodeURIComponent(e)}/regenerate`,o),C=e=>r(`/data-process/${encodeURIComponent(e)}`);function I(e,o,t){const c=new FormData;return o.forEach(a=>c.append("files",a)),s(`/data-process/${encodeURIComponent(e)}/source-files`,c,{timeout:300*1e3,onUploadProgress:a=>{if(!a.total)return;const d=Math.round(a.loaded/a.total*100);t==null||t(Math.min(99,Math.max(0,d)))}})}const $=(e,o)=>r(`/data-process/${encodeURIComponent(e)}/source-files/${encodeURIComponent(o)}`),P=(e,o,t={})=>n(`/data-process/${encodeURIComponent(e)}/source-files/${encodeURIComponent(o)}/content`,t),D=(e,o)=>`/modelTF/data-process/${encodeURIComponent(e)}/source-files/${encodeURIComponent(o)}/raw`,f=(e,o)=>n(`/data-process/${encodeURIComponent(e)}/source-files/${encodeURIComponent(o)}/pdf-pages`),g=(e,o)=>{const{query:t,file_name:c,...a}=o;return s(`/data-process/${encodeURIComponent(e)}/external/test`,a)},w=(e,o)=>s(`/data-process/${encodeURIComponent(e)}/external/pull`,o),v=(e,o={})=>s(`/data-process/${encodeURIComponent(e)}/preview/build`,o,{timeout:300*1e3});function h(e,o={}){return n(`/data-process/${encodeURIComponent(e)}/preview`,o)}const k=(e,o,t)=>p(`/data-process/${encodeURIComponent(e)}/preview/${encodeURIComponent(o)}`,t),x=(e,o)=>s(`/data-process/${encodeURIComponent(e)}/preview`,o),T=(e,o)=>r(`/data-process/${encodeURIComponent(e)}/preview/${encodeURIComponent(o)}`),S=e=>s(`/data-process/${encodeURIComponent(e)}/generate`),b=e=>s(`/data-process/${encodeURIComponent(e)}/stop`),F=e=>n(`/data-process/${encodeURIComponent(e)}/progress`);function q(e,o={}){return n(`/data-process/${encodeURIComponent(e)}/results`,o)}const y=(e,o,t)=>p(`/data-process/${encodeURIComponent(e)}/results/${encodeURIComponent(o)}`,t),E=(e,o)=>s(`/data-process/${encodeURIComponent(e)}/results/${encodeURIComponent(o)}/restore`),M=(e,o)=>s(`/data-process/${encodeURIComponent(e)}/publish`,o);export{D as a,f as b,S as c,C as d,F as e,q as f,m as g,v as h,I as i,P as j,l as k,U as l,h as m,k as n,R as o,i as p,w as q,E as r,b as s,g as t,y as u,$ as v,x as w,T as x,M as y}; import{aF as n,aI as r,aH as p,aG as s}from"./index-CGB0A5x_.js";function m(e={}){return n("/data-process",e)}const l=e=>n(`/data-process/${encodeURIComponent(e)}`),i=e=>s("/data-process",e),R=(e,o)=>p(`/data-process/${encodeURIComponent(e)}`,o),U=(e,o)=>s(`/data-process/${encodeURIComponent(e)}/regenerate`,o),C=e=>r(`/data-process/${encodeURIComponent(e)}`);function I(e,o,t){const c=new FormData;return o.forEach(a=>c.append("files",a)),s(`/data-process/${encodeURIComponent(e)}/source-files`,c,{timeout:300*1e3,onUploadProgress:a=>{if(!a.total)return;const d=Math.round(a.loaded/a.total*100);t==null||t(Math.min(99,Math.max(0,d)))}})}const $=(e,o)=>r(`/data-process/${encodeURIComponent(e)}/source-files/${encodeURIComponent(o)}`),P=(e,o,t={})=>n(`/data-process/${encodeURIComponent(e)}/source-files/${encodeURIComponent(o)}/content`,t),D=(e,o)=>`/modelTF/data-process/${encodeURIComponent(e)}/source-files/${encodeURIComponent(o)}/raw`,f=(e,o)=>n(`/data-process/${encodeURIComponent(e)}/source-files/${encodeURIComponent(o)}/pdf-pages`),g=(e,o)=>{const{query:t,file_name:c,...a}=o;return s(`/data-process/${encodeURIComponent(e)}/external/test`,a)},w=(e,o)=>s(`/data-process/${encodeURIComponent(e)}/external/pull`,o),v=(e,o={})=>s(`/data-process/${encodeURIComponent(e)}/preview/build`,o,{timeout:300*1e3});function h(e,o={}){return n(`/data-process/${encodeURIComponent(e)}/preview`,o)}const k=(e,o,t)=>p(`/data-process/${encodeURIComponent(e)}/preview/${encodeURIComponent(o)}`,t),x=(e,o)=>s(`/data-process/${encodeURIComponent(e)}/preview`,o),T=(e,o)=>r(`/data-process/${encodeURIComponent(e)}/preview/${encodeURIComponent(o)}`),S=e=>s(`/data-process/${encodeURIComponent(e)}/generate`),b=e=>s(`/data-process/${encodeURIComponent(e)}/stop`),F=e=>n(`/data-process/${encodeURIComponent(e)}/progress`);function q(e,o={}){return n(`/data-process/${encodeURIComponent(e)}/results`,o)}const y=(e,o,t)=>p(`/data-process/${encodeURIComponent(e)}/results/${encodeURIComponent(o)}`,t),E=(e,o)=>s(`/data-process/${encodeURIComponent(e)}/results/${encodeURIComponent(o)}/restore`),M=(e,o)=>s(`/data-process/${encodeURIComponent(e)}/publish`,o);export{D as a,f as b,S as c,C as d,F as e,q as f,m as g,v as h,I as i,P as j,l as k,U as l,h as m,k as n,R as o,i as p,w as q,E as r,b as s,g as t,y as u,$ as v,x as w,T as x,M as y};

View File

@@ -0,0 +1 @@
function t(e){return e.status==="running"?{label:"生成中",type:"primary"}:e.status==="completed"?e.output_dataset_id?{label:"已发布",type:"success"}:{label:"已生成",type:"warning"}:e.status==="failed"?{label:"生成失败",type:"danger"}:e.status==="stopped"?{label:"已停止",type:"info"}:{label:"待生成",type:"info"}}export{t as d};

View File

@@ -1 +1 @@
import{aF as n,aH as d,aG as o,aI as r}from"./index-C8bRaOsd.js";const c=()=>n("/dataset-manage"),m=e=>n(`/dataset-manage/${e}`),l=e=>o("/dataset-manage",e),p=(e,a)=>d(`/dataset-manage/${e}`,a),g=e=>r(`/dataset-manage/${e}`),$=(e,a)=>{const t=new FormData;return a.forEach(s=>t.append("files",s)),o(`/dataset-manage/upload/${e}`,t,{headers:{"Content-Type":"multipart/form-data"}})},D=e=>n(`/dataset-manage/versions/${encodeURIComponent(e)}`),_=(e,a)=>n(`/dataset-manage/versions/${encodeURIComponent(e)}/${encodeURIComponent(a)}`),u=(e,a,t)=>o(`/dataset-manage/versions/${encodeURIComponent(e)}`,{content:a,description:t.description||"在线编辑",base_version_id:t.baseVersionId,expected_current_version_id:t.expectedCurrentVersionId}),v=(e,a,t)=>d(`/dataset-manage/versions/${encodeURIComponent(e)}/active`,{version_id:a,expected_current_version_id:t}),C=(e,a,t)=>r(`/dataset-manage/versions/${encodeURIComponent(e)}/${encodeURIComponent(a)}`,{expected_current_version_id:t}),F=(e,a,t)=>{const s=`/modelTF/dataset-manage/download/${e}/${a}`;return t?`${s}?version_id=${encodeURIComponent(t)}`:s},U=e=>`/modelTF/dataset-manage/download/${e}`;export{U as a,m as b,$ as c,g as d,l as e,D as f,c as g,_ as h,u as i,F as j,v as k,C as l,p as u}; import{aF as n,aH as d,aG as o,aI as r}from"./index-CGB0A5x_.js";const c=()=>n("/dataset-manage"),m=e=>n(`/dataset-manage/${e}`),l=e=>o("/dataset-manage",e),p=(e,a)=>d(`/dataset-manage/${e}`,a),g=e=>r(`/dataset-manage/${e}`),$=(e,a)=>{const t=new FormData;return a.forEach(s=>t.append("files",s)),o(`/dataset-manage/upload/${e}`,t,{headers:{"Content-Type":"multipart/form-data"}})},D=e=>n(`/dataset-manage/versions/${encodeURIComponent(e)}`),_=(e,a)=>n(`/dataset-manage/versions/${encodeURIComponent(e)}/${encodeURIComponent(a)}`),u=(e,a,t)=>o(`/dataset-manage/versions/${encodeURIComponent(e)}`,{content:a,description:t.description||"在线编辑",base_version_id:t.baseVersionId,expected_current_version_id:t.expectedCurrentVersionId}),v=(e,a,t)=>d(`/dataset-manage/versions/${encodeURIComponent(e)}/active`,{version_id:a,expected_current_version_id:t}),C=(e,a,t)=>r(`/dataset-manage/versions/${encodeURIComponent(e)}/${encodeURIComponent(a)}`,{expected_current_version_id:t}),F=(e,a,t)=>{const s=`/modelTF/dataset-manage/download/${e}/${a}`;return t?`${s}?version_id=${encodeURIComponent(t)}`:s},U=e=>`/modelTF/dataset-manage/download/${e}`;export{U as a,m as b,$ as c,g as d,l as e,D as f,c as g,_ as h,u as i,F as j,v as k,C as l,p as u};

View File

@@ -1 +1 @@
import{cz as S,cs as y}from"./index-C8bRaOsd.js";import{t as b}from"./toNumber-Bt8UgFrr.js";var h=function(){return S.Date.now()},R="Expected a function",A=Math.max,F=Math.min;function _(x,i,a){var u,d,m,f,n,r,o=0,E=!1,c=!1,g=!0;if(typeof x!="function")throw new TypeError(R);i=b(i)||0,y(a)&&(E=!!a.leading,c="maxWait"in a,m=c?A(b(a.maxWait)||0,i):m,g="trailing"in a?!!a.trailing:g);function v(e){var t=u,l=d;return u=d=void 0,o=e,f=x.apply(l,t),f}function p(e){return o=e,n=setTimeout(s,i),E?v(e):f}function C(e){var t=e-r,l=e-o,W=i-t;return c?F(W,m-l):W}function k(e){var t=e-r,l=e-o;return r===void 0||t>=i||t<0||c&&l>=m}function s(){var e=h();if(k(e))return I(e);n=setTimeout(s,C(e))}function I(e){return n=void 0,g&&u?v(e):(u=d=void 0,f)}function L(){n!==void 0&&clearTimeout(n),o=0,u=r=d=n=void 0}function M(){return n===void 0?f:I(h())}function T(){var e=h(),t=k(e);if(u=arguments,d=this,r=e,t){if(n===void 0)return p(r);if(c)return clearTimeout(n),n=setTimeout(s,i),v(r)}return n===void 0&&(n=setTimeout(s,i)),f}return T.cancel=L,T.flush=M,T}export{_ as d}; import{cz as S,cs as y}from"./index-CGB0A5x_.js";import{t as b}from"./toNumber-IRhFg6gN.js";var h=function(){return S.Date.now()},R="Expected a function",A=Math.max,F=Math.min;function _(x,i,a){var u,d,m,f,n,r,o=0,E=!1,c=!1,g=!0;if(typeof x!="function")throw new TypeError(R);i=b(i)||0,y(a)&&(E=!!a.leading,c="maxWait"in a,m=c?A(b(a.maxWait)||0,i):m,g="trailing"in a?!!a.trailing:g);function v(e){var t=u,l=d;return u=d=void 0,o=e,f=x.apply(l,t),f}function p(e){return o=e,n=setTimeout(s,i),E?v(e):f}function C(e){var t=e-r,l=e-o,W=i-t;return c?F(W,m-l):W}function k(e){var t=e-r,l=e-o;return r===void 0||t>=i||t<0||c&&l>=m}function s(){var e=h();if(k(e))return I(e);n=setTimeout(s,C(e))}function I(e){return n=void 0,g&&u?v(e):(u=d=void 0,f)}function L(){n!==void 0&&clearTimeout(n),o=0,u=r=d=n=void 0}function M(){return n===void 0?f:I(h())}function T(){var e=h(),t=k(e);if(u=arguments,d=this,r=e,t){if(n===void 0)return p(r);if(c)return clearTimeout(n),n=setTimeout(s,i),v(r)}return n===void 0&&(n=setTimeout(s,i)),f}return T.cancel=L,T.flush=M,T}export{_ as d};

View File

@@ -1 +1 @@
import{z as E,d7 as P,d as O,bp as z,I as g,w as j,K as R,s as K,L as Z,Z as q,aV as D,y as B,a0 as y,bt as F,P as I,J as S,bL as m,_ as k,a3 as _,aB as G,d8 as H}from"./index-C8bRaOsd.js";function J(e,s){let t;const o=B(!1),n=E({...e,originalPosition:"",originalOverflow:"",visible:!1});function r(l){n.text=l}function c(){const l=n.parent,u=f.ns;if(!l.vLoadingAddClassList){let i=l.getAttribute("loading-number");i=Number.parseInt(i)-1,i?l.setAttribute("loading-number",i.toString()):(y(l,u.bm("parent","relative")),l.removeAttribute("loading-number")),y(l,u.bm("parent","hidden"))}v(),C.unmount()}function v(){var l,u;(u=(l=f.$el)==null?void 0:l.parentNode)==null||u.removeChild(f.$el)}function x(){var l;e.beforeClose&&!e.beforeClose()||(o.value=!0,clearTimeout(t),t=setTimeout(a,400),n.visible=!1,(l=e.closed)==null||l.call(e))}function a(){if(!o.value)return;const l=n.parent;o.value=!1,l.vLoadingAddClassList=void 0,c()}const C=P(O({name:"ElLoading",setup(l,{expose:u}){const{ns:i,zIndex:N}=z("loading");return u({ns:i,zIndex:N}),()=>{const A=n.spinner||n.svg,T=g("svg",{class:"circular",viewBox:n.svgViewBox?n.svgViewBox:"0 0 50 50",...A?{innerHTML:A}:{}},[g("circle",{class:"path",cx:"25",cy:"25",r:"20",fill:"none"})]),V=n.text?g("p",{class:i.b("text")},[n.text]):void 0;return g(q,{name:i.b("fade"),onAfterLeave:a},{default:j(()=>[R(K("div",{style:{backgroundColor:n.background||""},class:[i.b("mask"),n.customClass,i.is("fullscreen",n.fullscreen)]},[g("div",{class:i.b("spinner")},[T,V])]),[[Z,n.visible]])])})}}}));Object.assign(C._context,s??{});const f=C.mount(document.createElement("div"));return{...D(n),setText:r,removeElLoadingChild:v,close:x,handleAfterLeave:a,vm:f,get $el(){return f.$el}}}let p;const L=function(e={},s){if(!F)return;const t=M(e);if(t.fullscreen&&p)return p;const o=J({...t,closed:()=>{var r;(r=t.closed)==null||r.call(t),t.fullscreen&&(p=void 0)}},s??L._context);Y(t,t.parent,o),w(t,t.parent,o),t.parent.vLoadingAddClassList=()=>w(t,t.parent,o);let n=t.parent.getAttribute("loading-number");return n?n=`${Number.parseInt(n)+1}`:n="1",t.parent.setAttribute("loading-number",n),t.parent.appendChild(o.$el),I(()=>o.visible.value=t.visible),t.fullscreen&&(p=o),o},M=e=>{let s;return S(e.target)?s=document.querySelector(e.target)??document.body:s=e.target||document.body,{parent:s===document.body||e.body?document.body:s,background:e.background||"",svg:e.svg||"",svgViewBox:e.svgViewBox||"",spinner:e.spinner||!1,text:e.text||"",fullscreen:s===document.body&&(e.fullscreen??!0),lock:e.lock??!1,customClass:e.customClass||"",visible:e.visible??!0,beforeClose:e.beforeClose,closed:e.closed,target:s}},Y=async(e,s,t)=>{const{nextZIndex:o}=t.vm.zIndex||t.vm._.exposed.zIndex,n={};if(e.fullscreen)t.originalPosition.value=m(document.body,"position"),t.originalOverflow.value=m(document.body,"overflow"),n.zIndex=o();else if(e.parent===document.body){t.originalPosition.value=m(document.body,"position"),await I();for(const r of["top","left"]){const c=r==="top"?"scrollTop":"scrollLeft";n[r]=`${e.target.getBoundingClientRect()[r]+document.body[c]+document.documentElement[c]-Number.parseInt(m(document.body,`margin-${r}`),10)}px`}for(const r of["height","width"])n[r]=`${e.target.getBoundingClientRect()[r]}px`}else t.originalPosition.value=m(s,"position");for(const[r,c]of Object.entries(n))t.$el.style[r]=c},w=(e,s,t)=>{const o=t.vm.ns||t.vm._.exposed.ns;["absolute","fixed","sticky"].includes(t.originalPosition.value)?y(s,o.bm("parent","relative")):k(s,o.bm("parent","relative")),e.fullscreen&&e.lock?k(s,o.bm("parent","hidden")):y(s,o.bm("parent","hidden"))};L._context=null;const b=Symbol("ElLoading"),d=e=>`element-loading-${H(e)}`,h=(e,s)=>{const t=s.instance,o=a=>_(s.value)?s.value[a]:void 0,n=a=>B(S(a)&&(t==null?void 0:t[a])||a),r=a=>n(o(a)||e.getAttribute(d(a))),c=o("fullscreen")??s.modifiers.fullscreen,v={text:r("text"),svg:r("svg"),svgViewBox:r("svgViewBox"),spinner:r("spinner"),background:r("background"),customClass:r("customClass"),fullscreen:c,target:o("target")??(c?void 0:e),body:o("body")??s.modifiers.body,lock:o("lock")??s.modifiers.lock},x=L(v);x._context=$._context,e[b]={options:v,instance:x}},Q=(e,s)=>{for(const t of Object.keys(e))G(e[t])&&(e[t].value=s[t])},$={mounted(e,s){s.value&&h(e,s)},updated(e,s){const t=e[b];if(!s.value){t==null||t.instance.close(),e[b]=null;return}t?Q(t.options,_(s.value)?s.value:{text:e.getAttribute(d("text")),svg:e.getAttribute(d("svg")),svgViewBox:e.getAttribute(d("svgViewBox")),spinner:e.getAttribute(d("spinner")),background:e.getAttribute(d("background")),customClass:e.getAttribute(d("customClass"))}):h(e,s)},unmounted(e){var s;(s=e[b])==null||s.instance.close(),e[b]=null}};$._context=null;export{$ as v}; import{z as E,d7 as P,d as O,bp as z,I as g,w as j,K as R,s as K,L as Z,Z as q,aV as D,y as B,a0 as y,bt as F,P as I,J as S,bL as m,_ as k,a3 as _,aB as G,d8 as H}from"./index-CGB0A5x_.js";function J(e,s){let t;const o=B(!1),n=E({...e,originalPosition:"",originalOverflow:"",visible:!1});function r(l){n.text=l}function c(){const l=n.parent,u=f.ns;if(!l.vLoadingAddClassList){let i=l.getAttribute("loading-number");i=Number.parseInt(i)-1,i?l.setAttribute("loading-number",i.toString()):(y(l,u.bm("parent","relative")),l.removeAttribute("loading-number")),y(l,u.bm("parent","hidden"))}v(),C.unmount()}function v(){var l,u;(u=(l=f.$el)==null?void 0:l.parentNode)==null||u.removeChild(f.$el)}function x(){var l;e.beforeClose&&!e.beforeClose()||(o.value=!0,clearTimeout(t),t=setTimeout(a,400),n.visible=!1,(l=e.closed)==null||l.call(e))}function a(){if(!o.value)return;const l=n.parent;o.value=!1,l.vLoadingAddClassList=void 0,c()}const C=P(O({name:"ElLoading",setup(l,{expose:u}){const{ns:i,zIndex:N}=z("loading");return u({ns:i,zIndex:N}),()=>{const A=n.spinner||n.svg,T=g("svg",{class:"circular",viewBox:n.svgViewBox?n.svgViewBox:"0 0 50 50",...A?{innerHTML:A}:{}},[g("circle",{class:"path",cx:"25",cy:"25",r:"20",fill:"none"})]),V=n.text?g("p",{class:i.b("text")},[n.text]):void 0;return g(q,{name:i.b("fade"),onAfterLeave:a},{default:j(()=>[R(K("div",{style:{backgroundColor:n.background||""},class:[i.b("mask"),n.customClass,i.is("fullscreen",n.fullscreen)]},[g("div",{class:i.b("spinner")},[T,V])]),[[Z,n.visible]])])})}}}));Object.assign(C._context,s??{});const f=C.mount(document.createElement("div"));return{...D(n),setText:r,removeElLoadingChild:v,close:x,handleAfterLeave:a,vm:f,get $el(){return f.$el}}}let p;const L=function(e={},s){if(!F)return;const t=M(e);if(t.fullscreen&&p)return p;const o=J({...t,closed:()=>{var r;(r=t.closed)==null||r.call(t),t.fullscreen&&(p=void 0)}},s??L._context);Y(t,t.parent,o),w(t,t.parent,o),t.parent.vLoadingAddClassList=()=>w(t,t.parent,o);let n=t.parent.getAttribute("loading-number");return n?n=`${Number.parseInt(n)+1}`:n="1",t.parent.setAttribute("loading-number",n),t.parent.appendChild(o.$el),I(()=>o.visible.value=t.visible),t.fullscreen&&(p=o),o},M=e=>{let s;return S(e.target)?s=document.querySelector(e.target)??document.body:s=e.target||document.body,{parent:s===document.body||e.body?document.body:s,background:e.background||"",svg:e.svg||"",svgViewBox:e.svgViewBox||"",spinner:e.spinner||!1,text:e.text||"",fullscreen:s===document.body&&(e.fullscreen??!0),lock:e.lock??!1,customClass:e.customClass||"",visible:e.visible??!0,beforeClose:e.beforeClose,closed:e.closed,target:s}},Y=async(e,s,t)=>{const{nextZIndex:o}=t.vm.zIndex||t.vm._.exposed.zIndex,n={};if(e.fullscreen)t.originalPosition.value=m(document.body,"position"),t.originalOverflow.value=m(document.body,"overflow"),n.zIndex=o();else if(e.parent===document.body){t.originalPosition.value=m(document.body,"position"),await I();for(const r of["top","left"]){const c=r==="top"?"scrollTop":"scrollLeft";n[r]=`${e.target.getBoundingClientRect()[r]+document.body[c]+document.documentElement[c]-Number.parseInt(m(document.body,`margin-${r}`),10)}px`}for(const r of["height","width"])n[r]=`${e.target.getBoundingClientRect()[r]}px`}else t.originalPosition.value=m(s,"position");for(const[r,c]of Object.entries(n))t.$el.style[r]=c},w=(e,s,t)=>{const o=t.vm.ns||t.vm._.exposed.ns;["absolute","fixed","sticky"].includes(t.originalPosition.value)?y(s,o.bm("parent","relative")):k(s,o.bm("parent","relative")),e.fullscreen&&e.lock?k(s,o.bm("parent","hidden")):y(s,o.bm("parent","hidden"))};L._context=null;const b=Symbol("ElLoading"),d=e=>`element-loading-${H(e)}`,h=(e,s)=>{const t=s.instance,o=a=>_(s.value)?s.value[a]:void 0,n=a=>B(S(a)&&(t==null?void 0:t[a])||a),r=a=>n(o(a)||e.getAttribute(d(a))),c=o("fullscreen")??s.modifiers.fullscreen,v={text:r("text"),svg:r("svg"),svgViewBox:r("svgViewBox"),spinner:r("spinner"),background:r("background"),customClass:r("customClass"),fullscreen:c,target:o("target")??(c?void 0:e),body:o("body")??s.modifiers.body,lock:o("lock")??s.modifiers.lock},x=L(v);x._context=$._context,e[b]={options:v,instance:x}},Q=(e,s)=>{for(const t of Object.keys(e))G(e[t])&&(e[t].value=s[t])},$={mounted(e,s){s.value&&h(e,s)},updated(e,s){const t=e[b];if(!s.value){t==null||t.instance.close(),e[b]=null;return}t?Q(t.options,_(s.value)?s.value:{text:e.getAttribute(d("text")),svg:e.getAttribute(d("svg")),svgViewBox:e.getAttribute(d("svgViewBox")),spinner:e.getAttribute(d("spinner")),background:e.getAttribute(d("background")),customClass:e.getAttribute(d("customClass"))}):h(e,s)},unmounted(e){var s;(s=e[b])==null||s.instance.close(),e[b]=null}};$._context=null;export{$ as v};

View File

@@ -1 +1 @@
import{b as p,W as o,R as e,i as a}from"./index-C8bRaOsd.js";import{u as t,r as n,b as r}from"./el-popper-BY86ZM1h.js";const d=p({trigger:{...r.trigger,type:e([String,Array])},triggerKeys:{type:e(Array),default:()=>[o.enter,o.numpadEnter,o.space,o.down]},virtualTriggering:r.virtualTriggering,virtualRef:r.virtualRef,effect:{...t.effect,default:"light"},type:{type:e(String)},placement:{type:e(String),default:"bottom"},popperOptions:{type:e(Object),default:()=>({})},id:String,size:{type:String,default:""},splitButton:Boolean,hideOnClick:{type:Boolean,default:!0},loop:{type:Boolean,default:!0},showArrow:{type:Boolean,default:!0},showTimeout:{type:Number,default:150},hideTimeout:{type:Number,default:150},tabindex:{type:e([Number,String]),default:0},maxHeight:{type:e([Number,String]),default:""},popperClass:t.popperClass,popperStyle:t.popperStyle,disabled:Boolean,role:{type:String,values:n,default:"menu"},buttonProps:{type:e(Object)},teleported:t.teleported,appendTo:t.appendTo,persistent:{type:Boolean,default:!0}}),u=p({command:{type:[Object,String,Number],default:()=>({})},disabled:Boolean,divided:Boolean,textValue:String,icon:{type:a}}),s=p({onKeydown:{type:e(Function)}});export{u as a,s as b,d}; import{b as p,W as o,R as e,i as a}from"./index-CGB0A5x_.js";import{u as t,r as n,b as r}from"./el-popper-DvBtRO32.js";const d=p({trigger:{...r.trigger,type:e([String,Array])},triggerKeys:{type:e(Array),default:()=>[o.enter,o.numpadEnter,o.space,o.down]},virtualTriggering:r.virtualTriggering,virtualRef:r.virtualRef,effect:{...t.effect,default:"light"},type:{type:e(String)},placement:{type:e(String),default:"bottom"},popperOptions:{type:e(Object),default:()=>({})},id:String,size:{type:String,default:""},splitButton:Boolean,hideOnClick:{type:Boolean,default:!0},loop:{type:Boolean,default:!0},showArrow:{type:Boolean,default:!0},showTimeout:{type:Number,default:150},hideTimeout:{type:Number,default:150},tabindex:{type:e([Number,String]),default:0},maxHeight:{type:e([Number,String]),default:""},popperClass:t.popperClass,popperStyle:t.popperStyle,disabled:Boolean,role:{type:String,values:n,default:"menu"},buttonProps:{type:e(Object)},teleported:t.teleported,appendTo:t.appendTo,persistent:{type:Boolean,default:!0}}),u=p({command:{type:[Object,String,Number],default:()=>({})},disabled:Boolean,divided:Boolean,textValue:String,icon:{type:a}}),s=p({onKeydown:{type:e(Function)}});export{u as a,s as b,d};

View File

@@ -1 +1 @@
import{b as N,bI as $,bs as S,d as D,bF as V,a as x,o as l,e as n,w as d,K as M,q as h,n as o,f as e,E as k,h as m,r as A,g as i,c,x as g,aa as v,M as F,s as P,bo as j,L as q,Z as z,y as K,j as E,l as L}from"./index-C8bRaOsd.js";import{f as O,b as Z}from"./vnode-B9WOR-0a.js";const G=["light","dark"],H=N({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:$(S),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:G,default:"light"}}),J={close:t=>t instanceof MouseEvent};var Q=D({name:"ElAlert",__name:"alert",props:H,emits:J,setup(t,{emit:w}){const{Close:B}=j,p=t,T=w,r=V(),s=x("alert"),y=K(!0),b=E(()=>S[p.type]),u=E(()=>{var f;if(p.description)return!0;const a=(f=r.default)==null?void 0:f.call(r);return a?O(a).some(I=>!Z(I)):!1}),C=a=>{y.value=!1,T("close",a)};return(a,f)=>(l(),n(z,{name:e(s).b("fade"),persisted:""},{default:d(()=>[M(h("div",{class:o([e(s).b(),e(s).m(t.type),e(s).is("center",t.center),e(s).is(t.effect)]),role:"alert"},[t.showIcon&&(a.$slots.icon||b.value)?(l(),n(e(k),{key:0,class:o([e(s).e("icon"),e(s).is("big",u.value)])},{default:d(()=>[m(a.$slots,"icon",{},()=>[(l(),n(A(b.value)))])]),_:3},8,["class"])):i("v-if",!0),h("div",{class:o(e(s).e("content"))},[t.title||a.$slots.title?(l(),c("span",{key:0,class:o([e(s).e("title"),{"with-description":u.value}])},[m(a.$slots,"title",{},()=>[g(v(t.title),1)])],2)):i("v-if",!0),u.value?(l(),c("p",{key:1,class:o(e(s).e("description"))},[m(a.$slots,"default",{},()=>[g(v(t.description),1)])],2)):i("v-if",!0),t.closable?(l(),c(F,{key:2},[t.closeText?(l(),c("div",{key:0,class:o([e(s).e("close-btn"),e(s).is("customed")]),onClick:C},v(t.closeText),3)):(l(),n(e(k),{key:1,class:o(e(s).e("close-btn")),onClick:C},{default:d(()=>[P(e(B))]),_:1},8,["class"]))],64)):i("v-if",!0)],2)],2),[[q,y.value]])]),_:3},8,["name"]))}}),R=Q;const X=L(R);export{X as E}; import{b as N,bI as $,bs as S,d as D,bF as V,a as x,o as l,e as n,w as d,K as M,q as h,n as o,f as e,E as k,h as m,r as A,g as i,c,x as g,aa as v,M as F,s as P,bo as j,L as q,Z as z,y as K,j as E,l as L}from"./index-CGB0A5x_.js";import{f as O,b as Z}from"./vnode-DFpZw5lG.js";const G=["light","dark"],H=N({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:$(S),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:G,default:"light"}}),J={close:t=>t instanceof MouseEvent};var Q=D({name:"ElAlert",__name:"alert",props:H,emits:J,setup(t,{emit:w}){const{Close:B}=j,p=t,T=w,r=V(),s=x("alert"),y=K(!0),b=E(()=>S[p.type]),u=E(()=>{var f;if(p.description)return!0;const a=(f=r.default)==null?void 0:f.call(r);return a?O(a).some(I=>!Z(I)):!1}),C=a=>{y.value=!1,T("close",a)};return(a,f)=>(l(),n(z,{name:e(s).b("fade"),persisted:""},{default:d(()=>[M(h("div",{class:o([e(s).b(),e(s).m(t.type),e(s).is("center",t.center),e(s).is(t.effect)]),role:"alert"},[t.showIcon&&(a.$slots.icon||b.value)?(l(),n(e(k),{key:0,class:o([e(s).e("icon"),e(s).is("big",u.value)])},{default:d(()=>[m(a.$slots,"icon",{},()=>[(l(),n(A(b.value)))])]),_:3},8,["class"])):i("v-if",!0),h("div",{class:o(e(s).e("content"))},[t.title||a.$slots.title?(l(),c("span",{key:0,class:o([e(s).e("title"),{"with-description":u.value}])},[m(a.$slots,"title",{},()=>[g(v(t.title),1)])],2)):i("v-if",!0),u.value?(l(),c("p",{key:1,class:o(e(s).e("description"))},[m(a.$slots,"default",{},()=>[g(v(t.description),1)])],2)):i("v-if",!0),t.closable?(l(),c(F,{key:2},[t.closeText?(l(),c("div",{key:0,class:o([e(s).e("close-btn"),e(s).is("customed")]),onClick:C},v(t.closeText),3)):(l(),n(e(k),{key:1,class:o(e(s).e("close-btn")),onClick:C},{default:d(()=>[P(e(B))]),_:1},8,["class"]))],64)):i("v-if",!0)],2)],2),[[q,y.value]])]),_:3},8,["name"]))}}),R=Q;const X=L(R);export{X as E};

View File

@@ -1 +1 @@
import{b as j,i as w,aj as z,R as c,ak as m,d as A,B as V,a as E,D as I,o as f,c as y,al as S,e as h,w as _,r as q,f as D,E as F,h as G,n as K,y as L,j as p,J as R,am as J,s as d,an as O,ao as U,x as $,F as H,z as M,a9 as g,l as Q,ab as W}from"./index-C8bRaOsd.js";import{f as X}from"./vnode-B9WOR-0a.js";import{u as C,a as Y,E as Z}from"./el-popper-BY86ZM1h.js";const aa=j({size:{type:[Number,String],values:z,validator:a=>m(a)},shape:{type:String,values:["circle","square"]},icon:{type:w},src:{type:String,default:""},alt:String,srcSet:String,fit:{type:c(String),default:"cover"}}),ea={error:a=>a instanceof Event},b=Symbol("avatarGroupContextKey"),ta={size:{type:c([Number,String]),values:z,validator:a=>m(a)},shape:{type:c(String),values:["circle","square"]},collapseAvatars:Boolean,collapseAvatarsTooltip:Boolean,maxCollapseAvatars:{type:Number,default:1},effect:{type:c(String),default:"light"},placement:{type:c(String),values:Y,default:"top"},popperClass:C.popperClass,popperStyle:C.popperStyle,collapseClass:String,collapseStyle:{type:c([String,Array,Object,Boolean]),default:void 0}},sa=["src","alt","srcset"];var la=A({name:"ElAvatar",__name:"avatar",props:aa,emits:ea,setup(a,{emit:n}){const t=a,r=n,e=V(b,void 0),l=E("avatar"),o=L(!1),s=p(()=>t.size??(e==null?void 0:e.size)),v=p(()=>t.shape??(e==null?void 0:e.shape)??"circle"),B=p(()=>{const{icon:i}=t,u=[l.b()];return R(s.value)&&u.push(l.m(s.value)),i&&u.push(l.m("icon")),v.value&&u.push(l.m(v.value)),u}),x=p(()=>m(s.value)?l.cssVarBlock({size:J(s.value)}):void 0),T=p(()=>({objectFit:t.fit}));I(()=>[t.src,t.srcSet],()=>o.value=!1);function P(i){o.value=!0,r("error",i)}return(i,u)=>(f(),y("span",{class:K(B.value),style:S(x.value)},[(a.src||a.srcSet)&&!o.value?(f(),y("img",{key:0,src:a.src,alt:a.alt,srcset:a.srcSet,style:S(T.value),onError:P},null,44,sa)):a.icon?(f(),h(D(F),{key:1},{default:_(()=>[(f(),h(q(a.icon)))]),_:1})):G(i.$slots,"default",{key:2})],6))}}),k=la,N=A({name:"ElAvatarGroup",props:ta,setup(a,{slots:n}){const t=E("avatar-group");return H(b,M({size:g(a,"size"),shape:g(a,"shape")})),()=>{var l;const r=X(((l=n.default)==null?void 0:l.call(n))??[]);let e=r;if(a.collapseAvatars&&r.length>a.maxCollapseAvatars){e=r.slice(0,a.maxCollapseAvatars);const o=r.slice(a.maxCollapseAvatars);e.push(d(Z,{popperClass:a.popperClass,popperStyle:a.popperStyle,placement:a.placement,effect:a.effect,disabled:!a.collapseAvatarsTooltip},{default:()=>d(k,{size:a.size,shape:a.shape,class:a.collapseClass,style:a.collapseStyle},{default:()=>[$("+ "),o.length]}),content:()=>d("div",{class:t.e("collapse-avatars")},[o.map((s,v)=>O(s)?U(s,{key:s.key??v}):s)])}))}return d("div",{class:t.b()},[e])}}});const na=Q(k,{AvatarGroup:N});W(N);export{na as E}; import{b as j,i as w,aj as z,R as c,ak as m,d as A,B as V,a as E,D as I,o as f,c as y,al as S,e as h,w as _,r as q,f as D,E as F,h as G,n as K,y as L,j as p,J as R,am as J,s as d,an as O,ao as U,x as $,F as H,z as M,a9 as g,l as Q,ab as W}from"./index-CGB0A5x_.js";import{f as X}from"./vnode-DFpZw5lG.js";import{u as C,a as Y,E as Z}from"./el-popper-DvBtRO32.js";const aa=j({size:{type:[Number,String],values:z,validator:a=>m(a)},shape:{type:String,values:["circle","square"]},icon:{type:w},src:{type:String,default:""},alt:String,srcSet:String,fit:{type:c(String),default:"cover"}}),ea={error:a=>a instanceof Event},b=Symbol("avatarGroupContextKey"),ta={size:{type:c([Number,String]),values:z,validator:a=>m(a)},shape:{type:c(String),values:["circle","square"]},collapseAvatars:Boolean,collapseAvatarsTooltip:Boolean,maxCollapseAvatars:{type:Number,default:1},effect:{type:c(String),default:"light"},placement:{type:c(String),values:Y,default:"top"},popperClass:C.popperClass,popperStyle:C.popperStyle,collapseClass:String,collapseStyle:{type:c([String,Array,Object,Boolean]),default:void 0}},sa=["src","alt","srcset"];var la=A({name:"ElAvatar",__name:"avatar",props:aa,emits:ea,setup(a,{emit:n}){const t=a,r=n,e=V(b,void 0),l=E("avatar"),o=L(!1),s=p(()=>t.size??(e==null?void 0:e.size)),v=p(()=>t.shape??(e==null?void 0:e.shape)??"circle"),B=p(()=>{const{icon:i}=t,u=[l.b()];return R(s.value)&&u.push(l.m(s.value)),i&&u.push(l.m("icon")),v.value&&u.push(l.m(v.value)),u}),x=p(()=>m(s.value)?l.cssVarBlock({size:J(s.value)}):void 0),T=p(()=>({objectFit:t.fit}));I(()=>[t.src,t.srcSet],()=>o.value=!1);function P(i){o.value=!0,r("error",i)}return(i,u)=>(f(),y("span",{class:K(B.value),style:S(x.value)},[(a.src||a.srcSet)&&!o.value?(f(),y("img",{key:0,src:a.src,alt:a.alt,srcset:a.srcSet,style:S(T.value),onError:P},null,44,sa)):a.icon?(f(),h(D(F),{key:1},{default:_(()=>[(f(),h(q(a.icon)))]),_:1})):G(i.$slots,"default",{key:2})],6))}}),k=la,N=A({name:"ElAvatarGroup",props:ta,setup(a,{slots:n}){const t=E("avatar-group");return H(b,M({size:g(a,"size"),shape:g(a,"shape")})),()=>{var l;const r=X(((l=n.default)==null?void 0:l.call(n))??[]);let e=r;if(a.collapseAvatars&&r.length>a.maxCollapseAvatars){e=r.slice(0,a.maxCollapseAvatars);const o=r.slice(a.maxCollapseAvatars);e.push(d(Z,{popperClass:a.popperClass,popperStyle:a.popperStyle,placement:a.placement,effect:a.effect,disabled:!a.collapseAvatarsTooltip},{default:()=>d(k,{size:a.size,shape:a.shape,class:a.collapseClass,style:a.collapseStyle},{default:()=>[$("+ "),o.length]}),content:()=>d("div",{class:t.e("collapse-avatars")},[o.map((s,v)=>O(s)?U(s,{key:s.key??v}):s)])}))}return d("div",{class:t.b()},[e])}}});const na=Q(k,{AvatarGroup:N});W(N);export{na as E};

View File

@@ -1 +1 @@
import{b as y,R as h,d as v,u as g,a as C,o as r,c as l,n as o,f as a,h as d,x as i,aa as f,g as c,q as S,al as b,l as m}from"./index-C8bRaOsd.js";const w=y({header:{type:String,default:""},footer:{type:String,default:""},bodyStyle:{type:h([String,Object,Array,Boolean]),default:""},headerClass:String,bodyClass:String,footerClass:String,shadow:{type:String,values:["always","hover","never"],default:void 0}});var $=v({name:"ElCard",__name:"card",props:w,setup(e){const u=g("card"),s=C("card");return(t,p)=>{var n;return r(),l("div",{class:o([a(s).b(),a(s).is(`${e.shadow||((n=a(u))==null?void 0:n.shadow)||"always"}-shadow`)])},[t.$slots.header||e.header?(r(),l("div",{key:0,class:o([a(s).e("header"),e.headerClass])},[d(t.$slots,"header",{},()=>[i(f(e.header),1)])],2)):c("v-if",!0),S("div",{class:o([a(s).e("body"),e.bodyClass]),style:b(e.bodyStyle)},[d(t.$slots,"default")],6),t.$slots.footer||e.footer?(r(),l("div",{key:1,class:o([a(s).e("footer"),e.footerClass])},[d(t.$slots,"footer",{},()=>[i(f(e.footer),1)])],2)):c("v-if",!0)],2)}}}),k=$;const E=m(k);export{E}; import{b as y,R as h,d as v,u as g,a as C,o as r,c as l,n as o,f as a,h as d,x as i,aa as f,g as c,q as S,al as b,l as m}from"./index-CGB0A5x_.js";const w=y({header:{type:String,default:""},footer:{type:String,default:""},bodyStyle:{type:h([String,Object,Array,Boolean]),default:""},headerClass:String,bodyClass:String,footerClass:String,shadow:{type:String,values:["always","hover","never"],default:void 0}});var $=v({name:"ElCard",__name:"card",props:w,setup(e){const u=g("card"),s=C("card");return(t,p)=>{var n;return r(),l("div",{class:o([a(s).b(),a(s).is(`${e.shadow||((n=a(u))==null?void 0:n.shadow)||"always"}-shadow`)])},[t.$slots.header||e.header?(r(),l("div",{key:0,class:o([a(s).e("header"),e.headerClass])},[d(t.$slots,"header",{},()=>[i(f(e.header),1)])],2)):c("v-if",!0),S("div",{class:o([a(s).e("body"),e.bodyClass]),style:b(e.bodyStyle)},[d(t.$slots,"default")],6),t.$slots.footer||e.footer?(r(),l("div",{key:1,class:o([a(s).e("footer"),e.footerClass])},[d(t.$slots,"footer",{},()=>[i(f(e.footer),1)])],2)):c("v-if",!0)],2)}}}),k=$;const E=m(k);export{E};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{b as B,aS as H,d as P,R as J,am as A,a as L,K as x,I as D,a8 as Q,B as q,f as d,o as c,c as f,q as v,M as g,ad as z,e as I,s as R,bF as T,n as _,h as j,x as K,aa as M,g as X,j as Y,F as Z,ab as ee,l as te}from"./index-C8bRaOsd.js";import{g as se,f as le}from"./vnode-B9WOR-0a.js";import{e as ae}from"./index-B2Z3XS2S.js";const O=["left","center","right"],re=B({border:Boolean,column:{type:Number,default:3},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},size:H,title:{type:String,default:""},extra:{type:String,default:""},labelWidth:{type:[String,Number]}}),U="ElDescriptionsItem",ne=B({label:{type:String,default:""},span:{type:Number,default:1},rowspan:{type:Number,default:1},width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},labelWidth:{type:[String,Number]},align:{type:String,values:O,default:"left"},labelAlign:{type:String,values:O},className:{type:String,default:""},labelClassName:{type:String,default:""}}),G=P({name:U,props:ne}),V=Symbol("elDescriptions"),ie=B({row:{type:J(Array),default:()=>[]}});var E=P({name:"ElDescriptionsCell",props:{cell:{type:Object},tag:{type:String,default:"td"},type:{type:String}},setup(){return{descriptions:q(V,{})}},render(){var y;const e=se(this.cell),u=(((y=this.cell)==null?void 0:y.dirs)||[]).map(n=>{const{dir:a,arg:l,modifiers:W,value:$}=n;return[a,$,l,W]}),{border:m,direction:C}=this.descriptions,r=C==="vertical",h=()=>{var n,a,l;return((l=(a=(n=this.cell)==null?void 0:n.children)==null?void 0:a.label)==null?void 0:l.call(a))||e.label},k=()=>{var n,a,l;return(l=(a=(n=this.cell)==null?void 0:n.children)==null?void 0:a.default)==null?void 0:l.call(a)},S=e.span,s=e.rowspan,b=e.align?`is-${e.align}`:"",p=e.labelAlign?`is-${e.labelAlign}`:b,i=e.className,w=e.labelClassName,o={width:A(this.type==="label"?e.labelWidth??this.descriptions.labelWidth??e.width:e.width),minWidth:A(e.minWidth)},t=L("descriptions");switch(this.type){case"label":return x(D(this.tag,{style:o,class:[t.e("cell"),t.e("label"),t.is("bordered-label",m),t.is("vertical-label",r),p,w],colSpan:r?S:1,rowspan:r?1:s},h()),u);case"content":return x(D(this.tag,{style:o,class:[t.e("cell"),t.e("content"),t.is("bordered-content",m),t.is("vertical-content",r),b,i],colSpan:r?S:S*2-1,rowspan:r?s*2-1:s},k()),u);default:{const n=h(),a={},l=A(e.labelWidth??this.descriptions.labelWidth);return l&&(a.width=l,a.display="inline-block"),x(D("td",{style:o,class:[t.e("cell"),b],colSpan:S,rowspan:s},[Q(n)?void 0:D("span",{style:a,class:[t.e("label"),w]},n),D("span",{class:[t.e("content"),i]},k())]),u)}}}});const oe={key:1};var ce=P({name:"ElDescriptionsRow",__name:"descriptions-row",props:ie,setup(e){const u=q(V,{});return(m,C)=>d(u).direction==="vertical"?(c(),f(g,{key:0},[v("tr",null,[(c(!0),f(g,null,z(e.row,(r,h)=>(c(),I(d(E),{key:`tr1-${h}`,cell:r,tag:"th",type:"label"},null,8,["cell"]))),128))]),v("tr",null,[(c(!0),f(g,null,z(e.row,(r,h)=>(c(),I(d(E),{key:`tr2-${h}`,cell:r,tag:"td",type:"content"},null,8,["cell"]))),128))])],64)):(c(),f("tr",oe,[(c(!0),f(g,null,z(e.row,(r,h)=>(c(),f(g,{key:`tr3-${h}`},[d(u).border?(c(),f(g,{key:0},[R(d(E),{cell:r,tag:"td",type:"label"},null,8,["cell"]),R(d(E),{cell:r,tag:"td",type:"content"},null,8,["cell"])],64)):(c(),I(d(E),{key:1,cell:r,tag:"td",type:"both"},null,8,["cell"]))],64))),128))]))}}),pe=ce,de=P({name:"ElDescriptions",__name:"description",props:re,setup(e){const u=e,m=L("descriptions"),C=ae(),r=T();Z(V,u);const h=Y(()=>[m.b(),m.m(C.value)]),k=(s,b,p,i=!1)=>(s.props||(s.props={}),b>p&&(s.props.span=p),i&&(s.props.span=b),s),S=()=>{if(!r.default)return[];const s=le(r.default()).filter(t=>{var y;return((y=t==null?void 0:t.type)==null?void 0:y.name)===U}),b=[];let p=[],i=u.column,w=0;const o=[];return s.forEach((t,y)=>{var W,$,F;const n=((W=t.props)==null?void 0:W.span)||1,a=(($=t.props)==null?void 0:$.rowspan)||1,l=b.length;if(o[l]||(o[l]=0),a>1)for(let N=1;N<a;N++)o[F=l+N]||(o[F]=0),o[l+N]++,w++;if(o[l]>0&&(i-=o[l],o[l]=0),y<s.length-1&&(w+=n>i?i:n),y===s.length-1){const N=u.column-w%u.column;p.push(k(t,N,i,!0)),b.push(p);return}n<i?(i-=n,p.push(t)):(p.push(k(t,n,i)),b.push(p),i=u.column,p=[])}),b};return(s,b)=>(c(),f("div",{class:_(h.value)},[e.title||e.extra||s.$slots.title||s.$slots.extra?(c(),f("div",{key:0,class:_(d(m).e("header"))},[v("div",{class:_(d(m).e("title"))},[j(s.$slots,"title",{},()=>[K(M(e.title),1)])],2),v("div",{class:_(d(m).e("extra"))},[j(s.$slots,"extra",{},()=>[K(M(e.extra),1)])],2)],2)):X("v-if",!0),v("div",{class:_(d(m).e("body"))},[v("table",{class:_([d(m).e("table"),d(m).is("bordered",e.border)])},[v("tbody",null,[(c(!0),f(g,null,z(S(),(p,i)=>(c(),I(pe,{key:i,row:p},null,8,["row"]))),128))])],2)],2)],2))}}),ue=de;const fe=te(ue,{DescriptionsItem:G}),ye=ee(G);export{ye as E,fe as a}; import{b as B,aS as H,d as P,R as J,am as A,a as L,K as x,I as D,a8 as Q,B as q,f as d,o as c,c as f,q as v,M as g,ad as z,e as I,s as R,bF as T,n as _,h as j,x as K,aa as M,g as X,j as Y,F as Z,ab as ee,l as te}from"./index-CGB0A5x_.js";import{g as se,f as le}from"./vnode-DFpZw5lG.js";import{e as ae}from"./index-CCavIuTY.js";const O=["left","center","right"],re=B({border:Boolean,column:{type:Number,default:3},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},size:H,title:{type:String,default:""},extra:{type:String,default:""},labelWidth:{type:[String,Number]}}),U="ElDescriptionsItem",ne=B({label:{type:String,default:""},span:{type:Number,default:1},rowspan:{type:Number,default:1},width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},labelWidth:{type:[String,Number]},align:{type:String,values:O,default:"left"},labelAlign:{type:String,values:O},className:{type:String,default:""},labelClassName:{type:String,default:""}}),G=P({name:U,props:ne}),V=Symbol("elDescriptions"),ie=B({row:{type:J(Array),default:()=>[]}});var E=P({name:"ElDescriptionsCell",props:{cell:{type:Object},tag:{type:String,default:"td"},type:{type:String}},setup(){return{descriptions:q(V,{})}},render(){var y;const e=se(this.cell),u=(((y=this.cell)==null?void 0:y.dirs)||[]).map(n=>{const{dir:a,arg:l,modifiers:W,value:$}=n;return[a,$,l,W]}),{border:m,direction:C}=this.descriptions,r=C==="vertical",h=()=>{var n,a,l;return((l=(a=(n=this.cell)==null?void 0:n.children)==null?void 0:a.label)==null?void 0:l.call(a))||e.label},k=()=>{var n,a,l;return(l=(a=(n=this.cell)==null?void 0:n.children)==null?void 0:a.default)==null?void 0:l.call(a)},S=e.span,s=e.rowspan,b=e.align?`is-${e.align}`:"",p=e.labelAlign?`is-${e.labelAlign}`:b,i=e.className,w=e.labelClassName,o={width:A(this.type==="label"?e.labelWidth??this.descriptions.labelWidth??e.width:e.width),minWidth:A(e.minWidth)},t=L("descriptions");switch(this.type){case"label":return x(D(this.tag,{style:o,class:[t.e("cell"),t.e("label"),t.is("bordered-label",m),t.is("vertical-label",r),p,w],colSpan:r?S:1,rowspan:r?1:s},h()),u);case"content":return x(D(this.tag,{style:o,class:[t.e("cell"),t.e("content"),t.is("bordered-content",m),t.is("vertical-content",r),b,i],colSpan:r?S:S*2-1,rowspan:r?s*2-1:s},k()),u);default:{const n=h(),a={},l=A(e.labelWidth??this.descriptions.labelWidth);return l&&(a.width=l,a.display="inline-block"),x(D("td",{style:o,class:[t.e("cell"),b],colSpan:S,rowspan:s},[Q(n)?void 0:D("span",{style:a,class:[t.e("label"),w]},n),D("span",{class:[t.e("content"),i]},k())]),u)}}}});const oe={key:1};var ce=P({name:"ElDescriptionsRow",__name:"descriptions-row",props:ie,setup(e){const u=q(V,{});return(m,C)=>d(u).direction==="vertical"?(c(),f(g,{key:0},[v("tr",null,[(c(!0),f(g,null,z(e.row,(r,h)=>(c(),I(d(E),{key:`tr1-${h}`,cell:r,tag:"th",type:"label"},null,8,["cell"]))),128))]),v("tr",null,[(c(!0),f(g,null,z(e.row,(r,h)=>(c(),I(d(E),{key:`tr2-${h}`,cell:r,tag:"td",type:"content"},null,8,["cell"]))),128))])],64)):(c(),f("tr",oe,[(c(!0),f(g,null,z(e.row,(r,h)=>(c(),f(g,{key:`tr3-${h}`},[d(u).border?(c(),f(g,{key:0},[R(d(E),{cell:r,tag:"td",type:"label"},null,8,["cell"]),R(d(E),{cell:r,tag:"td",type:"content"},null,8,["cell"])],64)):(c(),I(d(E),{key:1,cell:r,tag:"td",type:"both"},null,8,["cell"]))],64))),128))]))}}),pe=ce,de=P({name:"ElDescriptions",__name:"description",props:re,setup(e){const u=e,m=L("descriptions"),C=ae(),r=T();Z(V,u);const h=Y(()=>[m.b(),m.m(C.value)]),k=(s,b,p,i=!1)=>(s.props||(s.props={}),b>p&&(s.props.span=p),i&&(s.props.span=b),s),S=()=>{if(!r.default)return[];const s=le(r.default()).filter(t=>{var y;return((y=t==null?void 0:t.type)==null?void 0:y.name)===U}),b=[];let p=[],i=u.column,w=0;const o=[];return s.forEach((t,y)=>{var W,$,F;const n=((W=t.props)==null?void 0:W.span)||1,a=(($=t.props)==null?void 0:$.rowspan)||1,l=b.length;if(o[l]||(o[l]=0),a>1)for(let N=1;N<a;N++)o[F=l+N]||(o[F]=0),o[l+N]++,w++;if(o[l]>0&&(i-=o[l],o[l]=0),y<s.length-1&&(w+=n>i?i:n),y===s.length-1){const N=u.column-w%u.column;p.push(k(t,N,i,!0)),b.push(p);return}n<i?(i-=n,p.push(t)):(p.push(k(t,n,i)),b.push(p),i=u.column,p=[])}),b};return(s,b)=>(c(),f("div",{class:_(h.value)},[e.title||e.extra||s.$slots.title||s.$slots.extra?(c(),f("div",{key:0,class:_(d(m).e("header"))},[v("div",{class:_(d(m).e("title"))},[j(s.$slots,"title",{},()=>[K(M(e.title),1)])],2),v("div",{class:_(d(m).e("extra"))},[j(s.$slots,"extra",{},()=>[K(M(e.extra),1)])],2)],2)):X("v-if",!0),v("div",{class:_(d(m).e("body"))},[v("table",{class:_([d(m).e("table"),d(m).is("bordered",e.border)])},[v("tbody",null,[(c(!0),f(g,null,z(S(),(p,i)=>(c(),I(pe,{key:i,row:p},null,8,["row"]))),128))])],2)],2)],2))}}),ue=de;const fe=te(ue,{DescriptionsItem:G}),ye=ee(G);export{ye as E,fe as a};

View File

@@ -1 +1 @@
import{d as L,aW as G,B as q,o as u,c as A,q as R,h as i,n as t,f as e,aa as H,s as $,w as r,e as B,r as Q,bE as x,E as _,g as N,al as O,j as E,bF as ee,a as oe,K as se,Y as K,aX as ae,L as le,Z as te,bg as ne,y as M,F as re,l as ie}from"./index-C8bRaOsd.js";import{u as de}from"./index-B2Z3XS2S.js";import{E as ce,a as ue}from"./index-CMlv-HLm.js";import{F as fe,f as ge}from"./index-BpW9Z31J.js";import{d as me,a as ve,b as j,c as be,e as ye,u as Ce}from"./use-dialog-BFKGt-Ue.js";import{u as he}from"./index-BIY0gTx5.js";const pe=(...o)=>f=>{o.forEach(g=>{g.value=f})},we=["aria-level"],ke=["aria-label"],Re=["id"];var $e=L({name:"ElDialogContent",__name:"dialog-content",props:ve,emits:me,setup(o,{expose:f}){const{t:g}=G(),{Close:F}=x,a=o,{dialogRef:m,headerRef:y,bodyId:v,ns:s,style:C}=q(j),{focusTrapRef:h}=q(fe),D=pe(h,m),p=E(()=>!!a.draggable),{resetPosition:w,updatePosition:I,isDragging:P}=he(m,y,p,E(()=>!!a.overflow)),T=E(()=>[s.b(),s.is("fullscreen",a.fullscreen),s.is("draggable",p.value),s.is("dragging",P.value),s.is("align-center",!!a.alignCenter),{[s.m("center")]:a.center}]);return f({resetPosition:w,updatePosition:I}),(n,k)=>(u(),A("div",{ref:e(D),class:t(T.value),style:O(e(C)),tabindex:"-1"},[R("header",{ref_key:"headerRef",ref:y,class:t([e(s).e("header"),o.headerClass,{"show-close":o.showClose}])},[i(n.$slots,"header",{},()=>[R("span",{role:"heading","aria-level":o.ariaLevel,class:t(e(s).e("title"))},H(o.title),11,we)]),o.showClose?(u(),A("button",{key:0,"aria-label":e(g)("el.dialog.close"),class:t(e(s).e("headerbtn")),type:"button",onClick:k[0]||(k[0]=z=>n.$emit("close"))},[$(e(_),{class:t(e(s).e("close"))},{default:r(()=>[(u(),B(Q(o.closeIcon||e(F))))]),_:1},8,["class"])],10,ke)):N("v-if",!0)],2),R("div",{id:e(v),class:t([e(s).e("body"),o.bodyClass])},[i(n.$slots,"default")],10,Re),n.$slots.footer?(u(),A("footer",{key:0,class:t([e(s).e("footer"),o.footerClass])},[i(n.$slots,"footer")],2)):N("v-if",!0)],6))}}),Ee=$e;const Fe=["aria-label","aria-labelledby","aria-describedby"];var De=L({name:"ElDialog",inheritAttrs:!1,__name:"dialog",props:ye,emits:be,setup(o,{expose:f}){const g=o,F=ee();de({scope:"el-dialog",from:"the title slot",replacement:"the header slot",version:"3.0.0",ref:"https://element-plus.org/en-US/component/dialog.html#slots"},E(()=>!!F.title));const a=oe("dialog"),m=M(),y=M(),v=M(),{visible:s,titleId:C,bodyId:h,style:D,overlayDialogStyle:p,rendered:w,transitionConfig:I,zIndex:P,_draggable:T,_alignCenter:n,_overflow:k,penetrable:z,handleClose:S,onModalClick:V,onOpenAutoFocus:U,onCloseAutoFocus:Y,onCloseRequested:J,onFocusoutPrevented:W,bringToFront:X,closing:Z}=Ce(g,m);re(j,{dialogRef:m,headerRef:y,bodyId:h,ns:a,rendered:w,style:D});const d=ue(V);return f({visible:s,dialogContentRef:v,resetPosition:()=>{var l;(l=v.value)==null||l.resetPosition()},handleClose:S}),(l,c)=>(u(),B(ne,{to:o.appendTo,disabled:o.appendTo!=="body"?!1:!o.appendToBody},[$(te,K(e(I),{persisted:""}),{default:r(()=>[se($(e(ce),{"custom-mask-event":"",mask:o.modal,"overlay-class":[o.modalClass??"",`${e(a).namespace.value}-modal-dialog`,e(a).is("penetrable",e(z))],"z-index":e(P)},{default:r(()=>[R("div",{role:"dialog","aria-modal":"true","aria-label":o.title||void 0,"aria-labelledby":o.title?void 0:e(C),"aria-describedby":e(h),class:t([`${e(a).namespace.value}-overlay-dialog`,e(a).is("closing",e(Z))]),style:O(e(p)),onClick:c[0]||(c[0]=(...b)=>e(d).onClick&&e(d).onClick(...b)),onMousedown:c[1]||(c[1]=(...b)=>e(d).onMousedown&&e(d).onMousedown(...b)),onMouseup:c[2]||(c[2]=(...b)=>e(d).onMouseup&&e(d).onMouseup(...b))},[$(e(ge),{loop:"",trapped:e(s),"focus-start-el":"container",onFocusAfterTrapped:e(U),onFocusAfterReleased:e(Y),onFocusoutPrevented:e(W),onReleaseRequested:e(J)},{default:r(()=>[e(w)?(u(),B(Ee,K({key:0,ref_key:"dialogContentRef",ref:v},l.$attrs,{center:o.center,"align-center":e(n),"close-icon":o.closeIcon,draggable:e(T),overflow:e(k),fullscreen:o.fullscreen,"header-class":o.headerClass,"body-class":o.bodyClass,"footer-class":o.footerClass,"show-close":o.showClose,title:o.title,"aria-level":o.headerAriaLevel,onClose:e(S),onMousedown:e(X)}),ae({header:r(()=>[l.$slots.title?i(l.$slots,"title",{key:1}):i(l.$slots,"header",{key:0,close:e(S),titleId:e(C),titleClass:e(a).e("title")})]),default:r(()=>[i(l.$slots,"default")]),_:2},[l.$slots.footer?{name:"footer",fn:r(()=>[i(l.$slots,"footer")]),key:"0"}:void 0]),1040,["center","align-center","close-icon","draggable","overflow","fullscreen","header-class","body-class","footer-class","show-close","title","aria-level","onClose","onMousedown"])):N("v-if",!0)]),_:3},8,["trapped","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])],46,Fe)]),_:3},8,["mask","overlay-class","z-index"]),[[le,e(s)]])]),_:3},16)],8,["to","disabled"]))}}),Ie=De;const ze=ie(Ie);export{ze as E,pe as c}; import{d as L,aW as G,B as q,o as u,c as A,q as R,h as i,n as t,f as e,aa as H,s as $,w as r,e as B,r as Q,bE as x,E as _,g as N,al as O,j as E,bF as ee,a as oe,K as se,Y as K,aX as ae,L as le,Z as te,bg as ne,y as M,F as re,l as ie}from"./index-CGB0A5x_.js";import{u as de}from"./index-CCavIuTY.js";import{E as ce,a as ue}from"./index-C5EKbiob.js";import{F as fe,f as ge}from"./index-BPwPlcbL.js";import{d as me,a as ve,b as j,c as be,e as ye,u as Ce}from"./use-dialog-C7BHP2NJ.js";import{u as he}from"./index-Coa9QRND.js";const pe=(...o)=>f=>{o.forEach(g=>{g.value=f})},we=["aria-level"],ke=["aria-label"],Re=["id"];var $e=L({name:"ElDialogContent",__name:"dialog-content",props:ve,emits:me,setup(o,{expose:f}){const{t:g}=G(),{Close:F}=x,a=o,{dialogRef:m,headerRef:y,bodyId:v,ns:s,style:C}=q(j),{focusTrapRef:h}=q(fe),D=pe(h,m),p=E(()=>!!a.draggable),{resetPosition:w,updatePosition:I,isDragging:P}=he(m,y,p,E(()=>!!a.overflow)),T=E(()=>[s.b(),s.is("fullscreen",a.fullscreen),s.is("draggable",p.value),s.is("dragging",P.value),s.is("align-center",!!a.alignCenter),{[s.m("center")]:a.center}]);return f({resetPosition:w,updatePosition:I}),(n,k)=>(u(),A("div",{ref:e(D),class:t(T.value),style:O(e(C)),tabindex:"-1"},[R("header",{ref_key:"headerRef",ref:y,class:t([e(s).e("header"),o.headerClass,{"show-close":o.showClose}])},[i(n.$slots,"header",{},()=>[R("span",{role:"heading","aria-level":o.ariaLevel,class:t(e(s).e("title"))},H(o.title),11,we)]),o.showClose?(u(),A("button",{key:0,"aria-label":e(g)("el.dialog.close"),class:t(e(s).e("headerbtn")),type:"button",onClick:k[0]||(k[0]=z=>n.$emit("close"))},[$(e(_),{class:t(e(s).e("close"))},{default:r(()=>[(u(),B(Q(o.closeIcon||e(F))))]),_:1},8,["class"])],10,ke)):N("v-if",!0)],2),R("div",{id:e(v),class:t([e(s).e("body"),o.bodyClass])},[i(n.$slots,"default")],10,Re),n.$slots.footer?(u(),A("footer",{key:0,class:t([e(s).e("footer"),o.footerClass])},[i(n.$slots,"footer")],2)):N("v-if",!0)],6))}}),Ee=$e;const Fe=["aria-label","aria-labelledby","aria-describedby"];var De=L({name:"ElDialog",inheritAttrs:!1,__name:"dialog",props:ye,emits:be,setup(o,{expose:f}){const g=o,F=ee();de({scope:"el-dialog",from:"the title slot",replacement:"the header slot",version:"3.0.0",ref:"https://element-plus.org/en-US/component/dialog.html#slots"},E(()=>!!F.title));const a=oe("dialog"),m=M(),y=M(),v=M(),{visible:s,titleId:C,bodyId:h,style:D,overlayDialogStyle:p,rendered:w,transitionConfig:I,zIndex:P,_draggable:T,_alignCenter:n,_overflow:k,penetrable:z,handleClose:S,onModalClick:V,onOpenAutoFocus:U,onCloseAutoFocus:Y,onCloseRequested:J,onFocusoutPrevented:W,bringToFront:X,closing:Z}=Ce(g,m);re(j,{dialogRef:m,headerRef:y,bodyId:h,ns:a,rendered:w,style:D});const d=ue(V);return f({visible:s,dialogContentRef:v,resetPosition:()=>{var l;(l=v.value)==null||l.resetPosition()},handleClose:S}),(l,c)=>(u(),B(ne,{to:o.appendTo,disabled:o.appendTo!=="body"?!1:!o.appendToBody},[$(te,K(e(I),{persisted:""}),{default:r(()=>[se($(e(ce),{"custom-mask-event":"",mask:o.modal,"overlay-class":[o.modalClass??"",`${e(a).namespace.value}-modal-dialog`,e(a).is("penetrable",e(z))],"z-index":e(P)},{default:r(()=>[R("div",{role:"dialog","aria-modal":"true","aria-label":o.title||void 0,"aria-labelledby":o.title?void 0:e(C),"aria-describedby":e(h),class:t([`${e(a).namespace.value}-overlay-dialog`,e(a).is("closing",e(Z))]),style:O(e(p)),onClick:c[0]||(c[0]=(...b)=>e(d).onClick&&e(d).onClick(...b)),onMousedown:c[1]||(c[1]=(...b)=>e(d).onMousedown&&e(d).onMousedown(...b)),onMouseup:c[2]||(c[2]=(...b)=>e(d).onMouseup&&e(d).onMouseup(...b))},[$(e(ge),{loop:"",trapped:e(s),"focus-start-el":"container",onFocusAfterTrapped:e(U),onFocusAfterReleased:e(Y),onFocusoutPrevented:e(W),onReleaseRequested:e(J)},{default:r(()=>[e(w)?(u(),B(Ee,K({key:0,ref_key:"dialogContentRef",ref:v},l.$attrs,{center:o.center,"align-center":e(n),"close-icon":o.closeIcon,draggable:e(T),overflow:e(k),fullscreen:o.fullscreen,"header-class":o.headerClass,"body-class":o.bodyClass,"footer-class":o.footerClass,"show-close":o.showClose,title:o.title,"aria-level":o.headerAriaLevel,onClose:e(S),onMousedown:e(X)}),ae({header:r(()=>[l.$slots.title?i(l.$slots,"title",{key:1}):i(l.$slots,"header",{key:0,close:e(S),titleId:e(C),titleClass:e(a).e("title")})]),default:r(()=>[i(l.$slots,"default")]),_:2},[l.$slots.footer?{name:"footer",fn:r(()=>[i(l.$slots,"footer")]),key:"0"}:void 0]),1040,["center","align-center","close-icon","draggable","overflow","fullscreen","header-class","body-class","footer-class","show-close","title","aria-level","onClose","onMousedown"])):N("v-if",!0)]),_:3},8,["trapped","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])],46,Fe)]),_:3},8,["mask","overlay-class","z-index"]),[[le,e(s)]])]),_:3},16)],8,["to","disabled"]))}}),Ie=De;const ze=ie(Ie);export{ze as E,pe as c};

View File

@@ -1 +1 @@
import{b as d,R as c,d as u,a as v,o as s,c as i,n as o,f as r,h as p,g as f,al as m,j as y,l as S}from"./index-C8bRaOsd.js";const b=d({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},contentPosition:{type:String,values:["left","center","right"],default:"center"},borderStyle:{type:c(String),default:"solid"}});var g=u({name:"ElDivider",__name:"divider",props:b,setup(t){const l=t,e=v("divider"),n=y(()=>e.cssVar({"border-style":l.borderStyle}));return(a,P)=>(s(),i("div",{class:o([r(e).b(),r(e).m(t.direction)]),style:m(n.value),role:"separator"},[a.$slots.default&&t.direction!=="vertical"?(s(),i("div",{key:0,class:o([r(e).e("text"),r(e).is(t.contentPosition)])},[p(a.$slots,"default")],2)):f("v-if",!0)],6))}}),h=g;const z=S(h);export{z as E}; import{b as d,R as c,d as u,a as v,o as s,c as i,n as o,f as r,h as p,g as f,al as m,j as y,l as S}from"./index-CGB0A5x_.js";const b=d({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},contentPosition:{type:String,values:["left","center","right"],default:"center"},borderStyle:{type:c(String),default:"solid"}});var g=u({name:"ElDivider",__name:"divider",props:b,setup(t){const l=t,e=v("divider"),n=y(()=>e.cssVar({"border-style":l.borderStyle}));return(a,P)=>(s(),i("div",{class:o([r(e).b(),r(e).m(t.direction)]),style:m(n.value),role:"separator"},[a.$slots.default&&t.direction!=="vertical"?(s(),i("div",{key:0,class:o([r(e).e("text"),r(e).is(t.contentPosition)])},[p(a.$slots,"default")],2)):f("v-if",!0)],6))}}),h=g;const z=S(h);export{z as E};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{b as h,d as p,a as _,o as r,c as n,q as t,f as l,aW as y,h as d,s as g,al as v,n as c,aa as k,g as $,j as f,am as N,l as B}from"./index-C8bRaOsd.js";import{f as w}from"./index-B2Z3XS2S.js";const V=h({image:{type:String,default:""},imageSize:Number,description:{type:String,default:""}}),x={viewBox:"0 0 79 86",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},S=["id"],C=["stop-color"],E=["stop-color"],b=["id"],G=["stop-color"],z=["stop-color"],I=["id"],D={stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},P={transform:"translate(-1268.000000, -535.000000)"},j={transform:"translate(1268.000000, 535.000000)"},q=["fill"],L=["fill"],M={transform:"translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)"},T=["fill"],U=["fill"],W=["fill"],Z=["fill"],A=["fill"],F={transform:"translate(53.000000, 45.000000)"},H=["fill","xlink:href"],J=["fill","mask"],K=["fill"];var O=p({name:"ImgEmpty",__name:"img-empty",setup(i){const s=_("empty"),e=w();return(o,m)=>(r(),n("svg",x,[t("defs",null,[t("linearGradient",{id:`linearGradient-1-${l(e)}`,x1:"38.8503086%",y1:"0%",x2:"61.1496914%",y2:"100%"},[t("stop",{"stop-color":`var(${l(s).cssVarBlockName("fill-color-1")})`,offset:"0%"},null,8,C),t("stop",{"stop-color":`var(${l(s).cssVarBlockName("fill-color-4")})`,offset:"100%"},null,8,E)],8,S),t("linearGradient",{id:`linearGradient-2-${l(e)}`,x1:"0%",y1:"9.5%",x2:"100%",y2:"90.5%"},[t("stop",{"stop-color":`var(${l(s).cssVarBlockName("fill-color-1")})`,offset:"0%"},null,8,G),t("stop",{"stop-color":`var(${l(s).cssVarBlockName("fill-color-6")})`,offset:"100%"},null,8,z)],8,b),t("rect",{id:`path-3-${l(e)}`,x:"0",y:"0",width:"17",height:"36"},null,8,I)]),t("g",D,[t("g",P,[t("g",j,[t("path",{d:"M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z",fill:`var(${l(s).cssVarBlockName("fill-color-3")})`},null,8,q),t("polygon",{fill:`var(${l(s).cssVarBlockName("fill-color-7")})`,transform:"translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) ",points:"13 58 53 58 42 45 2 45"},null,8,L),t("g",M,[t("polygon",{fill:`var(${l(s).cssVarBlockName("fill-color-7")})`,transform:"translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) ",points:"2.84078316e-14 3 18 3 23 7 5 7"},null,8,T),t("polygon",{fill:`var(${l(s).cssVarBlockName("fill-color-5")})`,points:"-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43"},null,8,U),t("rect",{fill:`url(#linearGradient-1-${l(e)})`,transform:"translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) ",x:"38",y:"7",width:"17",height:"36"},null,8,W),t("polygon",{fill:`var(${l(s).cssVarBlockName("fill-color-2")})`,transform:"translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) ",points:"24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12"},null,8,Z)]),t("rect",{fill:`url(#linearGradient-2-${l(e)})`,x:"13",y:"45",width:"40",height:"36"},null,8,A),t("g",F,[t("use",{fill:`var(${l(s).cssVarBlockName("fill-color-8")})`,transform:"translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) ","xlink:href":`#path-3-${l(e)}`},null,8,H),t("polygon",{fill:`var(${l(s).cssVarBlockName("fill-color-9")})`,mask:`url(#mask-4-${l(e)})`,transform:"translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) ",points:"7 0 24 0 20 18 7 16.5"},null,8,J)]),t("polygon",{fill:`var(${l(s).cssVarBlockName("fill-color-2")})`,transform:"translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) ",points:"62 45 79 45 70 58 53 58"},null,8,K)])])])]))}}),Q=O;const R=["src"],X={key:1};var Y=p({name:"ElEmpty",__name:"empty",props:V,setup(i){const s=i,{t:e}=y(),o=_("empty"),m=f(()=>s.description||e("el.table.emptyText")),u=f(()=>({width:N(s.imageSize)}));return(a,l0)=>(r(),n("div",{class:c(l(o).b())},[t("div",{class:c(l(o).e("image")),style:v(u.value)},[i.image?(r(),n("img",{key:0,src:i.image,ondragstart:"return false"},null,8,R)):d(a.$slots,"image",{key:1},()=>[g(Q)])],6),t("div",{class:c(l(o).e("description"))},[a.$slots.description?d(a.$slots,"description",{key:0}):(r(),n("p",X,k(m.value),1))],2),a.$slots.default?(r(),n("div",{key:0,class:c(l(o).e("bottom"))},[d(a.$slots,"default")],2)):$("v-if",!0)],2))}}),t0=Y;const o0=B(t0);export{o0 as E}; import{b as h,d as p,a as _,o as r,c as n,q as t,f as l,aW as y,h as d,s as g,al as v,n as c,aa as k,g as $,j as f,am as N,l as B}from"./index-CGB0A5x_.js";import{f as w}from"./index-CCavIuTY.js";const V=h({image:{type:String,default:""},imageSize:Number,description:{type:String,default:""}}),x={viewBox:"0 0 79 86",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},S=["id"],C=["stop-color"],E=["stop-color"],b=["id"],G=["stop-color"],z=["stop-color"],I=["id"],D={stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},P={transform:"translate(-1268.000000, -535.000000)"},j={transform:"translate(1268.000000, 535.000000)"},q=["fill"],L=["fill"],M={transform:"translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)"},T=["fill"],U=["fill"],W=["fill"],Z=["fill"],A=["fill"],F={transform:"translate(53.000000, 45.000000)"},H=["fill","xlink:href"],J=["fill","mask"],K=["fill"];var O=p({name:"ImgEmpty",__name:"img-empty",setup(i){const s=_("empty"),e=w();return(o,m)=>(r(),n("svg",x,[t("defs",null,[t("linearGradient",{id:`linearGradient-1-${l(e)}`,x1:"38.8503086%",y1:"0%",x2:"61.1496914%",y2:"100%"},[t("stop",{"stop-color":`var(${l(s).cssVarBlockName("fill-color-1")})`,offset:"0%"},null,8,C),t("stop",{"stop-color":`var(${l(s).cssVarBlockName("fill-color-4")})`,offset:"100%"},null,8,E)],8,S),t("linearGradient",{id:`linearGradient-2-${l(e)}`,x1:"0%",y1:"9.5%",x2:"100%",y2:"90.5%"},[t("stop",{"stop-color":`var(${l(s).cssVarBlockName("fill-color-1")})`,offset:"0%"},null,8,G),t("stop",{"stop-color":`var(${l(s).cssVarBlockName("fill-color-6")})`,offset:"100%"},null,8,z)],8,b),t("rect",{id:`path-3-${l(e)}`,x:"0",y:"0",width:"17",height:"36"},null,8,I)]),t("g",D,[t("g",P,[t("g",j,[t("path",{d:"M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z",fill:`var(${l(s).cssVarBlockName("fill-color-3")})`},null,8,q),t("polygon",{fill:`var(${l(s).cssVarBlockName("fill-color-7")})`,transform:"translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) ",points:"13 58 53 58 42 45 2 45"},null,8,L),t("g",M,[t("polygon",{fill:`var(${l(s).cssVarBlockName("fill-color-7")})`,transform:"translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) ",points:"2.84078316e-14 3 18 3 23 7 5 7"},null,8,T),t("polygon",{fill:`var(${l(s).cssVarBlockName("fill-color-5")})`,points:"-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43"},null,8,U),t("rect",{fill:`url(#linearGradient-1-${l(e)})`,transform:"translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) ",x:"38",y:"7",width:"17",height:"36"},null,8,W),t("polygon",{fill:`var(${l(s).cssVarBlockName("fill-color-2")})`,transform:"translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) ",points:"24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12"},null,8,Z)]),t("rect",{fill:`url(#linearGradient-2-${l(e)})`,x:"13",y:"45",width:"40",height:"36"},null,8,A),t("g",F,[t("use",{fill:`var(${l(s).cssVarBlockName("fill-color-8")})`,transform:"translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) ","xlink:href":`#path-3-${l(e)}`},null,8,H),t("polygon",{fill:`var(${l(s).cssVarBlockName("fill-color-9")})`,mask:`url(#mask-4-${l(e)})`,transform:"translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) ",points:"7 0 24 0 20 18 7 16.5"},null,8,J)]),t("polygon",{fill:`var(${l(s).cssVarBlockName("fill-color-2")})`,transform:"translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) ",points:"62 45 79 45 70 58 53 58"},null,8,K)])])])]))}}),Q=O;const R=["src"],X={key:1};var Y=p({name:"ElEmpty",__name:"empty",props:V,setup(i){const s=i,{t:e}=y(),o=_("empty"),m=f(()=>s.description||e("el.table.emptyText")),u=f(()=>({width:N(s.imageSize)}));return(a,l0)=>(r(),n("div",{class:c(l(o).b())},[t("div",{class:c(l(o).e("image")),style:v(u.value)},[i.image?(r(),n("img",{key:0,src:i.image,ondragstart:"return false"},null,8,R)):d(a.$slots,"image",{key:1},()=>[g(Q)])],6),t("div",{class:c(l(o).e("description"))},[a.$slots.description?d(a.$slots,"description",{key:0}):(r(),n("p",X,k(m.value),1))],2),a.$slots.default?(r(),n("div",{key:0,class:c(l(o).e("bottom"))},[d(a.$slots,"default")],2)):$("v-if",!0)],2))}}),t0=Y;const o0=B(t0);export{o0 as E};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
import{b as A,R as y,d as M,a as V,o as l,c as d,n as i,f as s,q as p,al as f,h as B,aa as N,g as P,e as D,w as O,r as R,E as j,j as o,cZ as q,a$ as J,bQ as Q,b0 as U,b1 as Z,b8 as G,J as I,l as H}from"./index-C8bRaOsd.js";const K=A({type:{type:String,default:"line",values:["line","circle","dashboard"]},percentage:{type:Number,default:0,validator:e=>e>=0&&e<=100},status:{type:String,default:"",values:["","success","exception","warning"]},indeterminate:Boolean,duration:{type:Number,default:3},strokeWidth:{type:Number,default:6},strokeLinecap:{type:y(String),default:"round"},textInside:Boolean,width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:y([String,Array,Function]),default:""},striped:Boolean,stripedFlow:Boolean,format:{type:y(Function),default:e=>`${e}%`}}),X=["aria-valuenow"],Y={viewBox:"0 0 100 100"},_=["d","stroke","stroke-linecap","stroke-width"],ee=["d","stroke","opacity","stroke-linecap","stroke-width"],te={key:0};var ae=M({name:"ElProgress",__name:"progress",props:K,setup(e){const k={success:"#13ce66",exception:"#ff4949",warning:"#e6a23c",default:"#20a0ff"},a=e,r=V("progress"),T=o(()=>{const t={width:`${a.percentage}%`,animationDuration:`${a.duration}s`},n=x(a.percentage);return n.includes("gradient")?t.background=n:t.backgroundColor=n,t}),v=o(()=>(a.strokeWidth/a.width*100).toFixed(1)),b=o(()=>["circle","dashboard"].includes(a.type)?Number.parseInt(`${50-Number.parseFloat(v.value)/2}`,10):0),m=o(()=>{const t=b.value,n=a.type==="dashboard";return` import{b as A,R as y,d as M,a as V,o as l,c as d,n as i,f as s,q as p,al as f,h as B,aa as N,g as P,e as D,w as O,r as R,E as j,j as o,cZ as q,a$ as J,bQ as Q,b0 as U,b1 as Z,b8 as G,J as I,l as H}from"./index-CGB0A5x_.js";const K=A({type:{type:String,default:"line",values:["line","circle","dashboard"]},percentage:{type:Number,default:0,validator:e=>e>=0&&e<=100},status:{type:String,default:"",values:["","success","exception","warning"]},indeterminate:Boolean,duration:{type:Number,default:3},strokeWidth:{type:Number,default:6},strokeLinecap:{type:y(String),default:"round"},textInside:Boolean,width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:y([String,Array,Function]),default:""},striped:Boolean,stripedFlow:Boolean,format:{type:y(Function),default:e=>`${e}%`}}),X=["aria-valuenow"],Y={viewBox:"0 0 100 100"},_=["d","stroke","stroke-linecap","stroke-width"],ee=["d","stroke","opacity","stroke-linecap","stroke-width"],te={key:0};var ae=M({name:"ElProgress",__name:"progress",props:K,setup(e){const k={success:"#13ce66",exception:"#ff4949",warning:"#e6a23c",default:"#20a0ff"},a=e,r=V("progress"),T=o(()=>{const t={width:`${a.percentage}%`,animationDuration:`${a.duration}s`},n=x(a.percentage);return n.includes("gradient")?t.background=n:t.backgroundColor=n,t}),v=o(()=>(a.strokeWidth/a.width*100).toFixed(1)),b=o(()=>["circle","dashboard"].includes(a.type)?Number.parseInt(`${50-Number.parseFloat(v.value)/2}`,10):0),m=o(()=>{const t=b.value,n=a.type==="dashboard";return`
M 50 50 M 50 50
m 0 ${n?"":"-"}${t} m 0 ${n?"":"-"}${t}
a ${t} ${t} 0 1 1 0 ${n?"-":""}${t*2} a ${t} ${t} 0 1 1 0 ${n?"-":""}${t*2}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{d as N,a as I,I as C,h as $,j as S,b as A,a1 as j,a6 as m,ak as v,y as x,s as d,an as g,x as P,by as k,aj as V,J as B,R as h,l as G}from"./index-C8bRaOsd.js";import{i as z,a as O}from"./vnode-B9WOR-0a.js";const R=A({prefixCls:{type:String}}),w=N({name:"ElSpaceItem",props:R,setup(e,{slots:u}){const f=I("space"),i=S(()=>`${e.prefixCls||f.b()}__item`);return()=>C("div",{class:i.value},$(u,"default"))}}),E={small:8,default:12,large:16};function _(e){const u=I("space"),f=S(()=>[u.b(),u.m(e.direction),e.class]),i=x(0),n=x(0),y=S(()=>[e.wrap||e.fill?{flexWrap:"wrap"}:{},{alignItems:e.alignment},{rowGap:`${n.value}px`,columnGap:`${i.value}px`},e.style]),o=S(()=>e.fill?{flexGrow:1,minWidth:`${e.fillRatio}%`}:{});return j(()=>{const{size:t="small",wrap:a,direction:r,fill:c}=e;if(m(t)){const[s=0,l=0]=t;i.value=s,n.value=l}else{let s;v(t)?s=t:s=E[t||"small"]||E.small,(a||c)&&r==="horizontal"?i.value=n.value=s:r==="horizontal"?(i.value=s,n.value=0):(n.value=s,i.value=0)}}),{classes:f,containerStyle:y,itemStyle:o}}const T=A({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},class:{type:h([String,Object,Array]),default:""},style:{type:h([String,Array,Object,Boolean]),default:""},alignment:{type:h(String),default:"center"},prefixCls:{type:String},spacer:{type:h([Object,String,Number,Array]),default:null,validator:e=>g(e)||v(e)||B(e)},wrap:Boolean,fill:Boolean,fillRatio:{type:Number,default:100},size:{type:[String,Array,Number],values:V,validator:e=>v(e)||m(e)&&e.length===2&&e.every(v)}}),W=N({name:"ElSpace",props:T,setup(e,{slots:u}){const{classes:f,containerStyle:i,itemStyle:n}=_(e);function y(o,t="",a=[]){const{prefixCls:r}=e;return o.forEach((c,s)=>{z(c)?m(c.children)&&c.children.forEach((l,p)=>{z(l)&&m(l.children)?y(l.children,`${t+p}-`,a):g(l)&&(l==null?void 0:l.type)===k?a.push(l):a.push(d(w,{style:n.value,prefixCls:r,key:`nested-${t+p}`},{default:()=>[l]},12,["style","prefixCls"]))}):O(c)&&a.push(d(w,{style:n.value,prefixCls:r,key:`LoopKey${t+s}`},{default:()=>[c]},12,["style","prefixCls"]))}),a}return()=>{const{spacer:o,direction:t}=e,a=$(u,"default",{key:0},()=>[]);if((a.children??[]).length===0)return null;if(m(a.children)){let r=y(a.children);if(o){const c=r.length-1;r=r.reduce((s,l,p)=>{const b=[...s,l];return p!==c&&b.push(d("span",{style:[n.value,t==="vertical"?"width: 100%":null],key:p},[g(o)?o:P(o,1)],4)),b},[])}return d("div",{class:f.value,style:i.value},r,6)}return a.children}}}),L=G(W);export{L as E}; import{d as N,a as I,I as C,h as $,j as S,b as A,a1 as j,a6 as m,ak as v,y as x,s as d,an as g,x as P,by as k,aj as V,J as B,R as h,l as G}from"./index-CGB0A5x_.js";import{i as z,a as O}from"./vnode-DFpZw5lG.js";const R=A({prefixCls:{type:String}}),w=N({name:"ElSpaceItem",props:R,setup(e,{slots:u}){const f=I("space"),i=S(()=>`${e.prefixCls||f.b()}__item`);return()=>C("div",{class:i.value},$(u,"default"))}}),E={small:8,default:12,large:16};function _(e){const u=I("space"),f=S(()=>[u.b(),u.m(e.direction),e.class]),i=x(0),n=x(0),y=S(()=>[e.wrap||e.fill?{flexWrap:"wrap"}:{},{alignItems:e.alignment},{rowGap:`${n.value}px`,columnGap:`${i.value}px`},e.style]),o=S(()=>e.fill?{flexGrow:1,minWidth:`${e.fillRatio}%`}:{});return j(()=>{const{size:t="small",wrap:a,direction:r,fill:c}=e;if(m(t)){const[s=0,l=0]=t;i.value=s,n.value=l}else{let s;v(t)?s=t:s=E[t||"small"]||E.small,(a||c)&&r==="horizontal"?i.value=n.value=s:r==="horizontal"?(i.value=s,n.value=0):(n.value=s,i.value=0)}}),{classes:f,containerStyle:y,itemStyle:o}}const T=A({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},class:{type:h([String,Object,Array]),default:""},style:{type:h([String,Array,Object,Boolean]),default:""},alignment:{type:h(String),default:"center"},prefixCls:{type:String},spacer:{type:h([Object,String,Number,Array]),default:null,validator:e=>g(e)||v(e)||B(e)},wrap:Boolean,fill:Boolean,fillRatio:{type:Number,default:100},size:{type:[String,Array,Number],values:V,validator:e=>v(e)||m(e)&&e.length===2&&e.every(v)}}),W=N({name:"ElSpace",props:T,setup(e,{slots:u}){const{classes:f,containerStyle:i,itemStyle:n}=_(e);function y(o,t="",a=[]){const{prefixCls:r}=e;return o.forEach((c,s)=>{z(c)?m(c.children)&&c.children.forEach((l,p)=>{z(l)&&m(l.children)?y(l.children,`${t+p}-`,a):g(l)&&(l==null?void 0:l.type)===k?a.push(l):a.push(d(w,{style:n.value,prefixCls:r,key:`nested-${t+p}`},{default:()=>[l]},12,["style","prefixCls"]))}):O(c)&&a.push(d(w,{style:n.value,prefixCls:r,key:`LoopKey${t+s}`},{default:()=>[c]},12,["style","prefixCls"]))}),a}return()=>{const{spacer:o,direction:t}=e,a=$(u,"default",{key:0},()=>[]);if((a.children??[]).length===0)return null;if(m(a.children)){let r=y(a.children);if(o){const c=r.length-1;r=r.reduce((s,l,p)=>{const b=[...s,l];return p!==c&&b.push(d("span",{style:[n.value,t==="vertical"?"width: 100%":null],key:p},[g(o)?o:P(o,1)],4)),b},[])}return d("div",{class:f.value,style:i.value},r,6)}return a.children}}}),L=G(W);export{L as E};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{b as M,aj as N,d as V,aW as $,a as j,o as i,c as u,q as m,h as k,n as o,f as t,aL as h,s as r,w as d,b1 as C,E as v,g as E,al as S,e as I,Z as L,j as P,l as q}from"./index-C8bRaOsd.js";import{e as x}from"./index-B2Z3XS2S.js";const F=M({type:{type:String,values:["primary","success","info","warning","danger"],default:"primary"},closable:Boolean,disableTransitions:Boolean,hit:Boolean,color:String,size:{type:String,values:N},effect:{type:String,values:["dark","light","plain"],default:"light"},round:Boolean}),K={close:s=>s instanceof MouseEvent,click:s=>s instanceof MouseEvent},W=["aria-label"],Z=["aria-label"];var A=V({name:"ElTag",__name:"tag",props:F,emits:K,setup(s,{emit:_}){const B=s,p=_,z=x(),{t:f}=$(),a=j("tag"),b=P(()=>{const{type:e,hit:l,effect:n,closable:c,round:w}=B;return[a.b(),a.is("closable",c),a.m(e||"primary"),a.m(z.value),a.m(n),a.is("hit",l),a.is("round",w)]}),g=e=>{p("close",e)},y=e=>{p("click",e)},T=e=>{var l,n,c;(c=(n=(l=e==null?void 0:e.component)==null?void 0:l.subTree)==null?void 0:n.component)!=null&&c.bum&&(e.component.subTree.component.bum=null)};return(e,l)=>s.disableTransitions?(i(),u("span",{key:0,class:o(b.value),style:S({backgroundColor:s.color}),onClick:y},[m("span",{class:o(t(a).e("content"))},[k(e.$slots,"default")],2),s.closable?(i(),u("button",{key:0,"aria-label":t(f)("el.tag.close"),class:o(t(a).e("close")),type:"button",onClick:h(g,["stop"])},[r(t(v),null,{default:d(()=>[r(t(C))]),_:1})],10,W)):E("v-if",!0)],6)):(i(),I(L,{key:1,name:`${t(a).namespace.value}-zoom-in-center`,appear:"",onVnodeMounted:T},{default:d(()=>[m("span",{class:o(b.value),style:S({backgroundColor:s.color}),onClick:y},[m("span",{class:o(t(a).e("content"))},[k(e.$slots,"default")],2),s.closable?(i(),u("button",{key:0,"aria-label":t(f)("el.tag.close"),class:o(t(a).e("close")),type:"button",onClick:h(g,["stop"])},[r(t(v),null,{default:d(()=>[r(t(C))]),_:1})],10,Z)):E("v-if",!0)],6)]),_:3},8,["name"]))}}),D=A;const J=q(D);export{J as E,F as t}; import{b as M,aj as N,d as V,aW as $,a as j,o as i,c as u,q as m,h as k,n as o,f as t,aL as h,s as r,w as d,b1 as C,E as v,g as E,al as S,e as I,Z as L,j as P,l as q}from"./index-CGB0A5x_.js";import{e as x}from"./index-CCavIuTY.js";const F=M({type:{type:String,values:["primary","success","info","warning","danger"],default:"primary"},closable:Boolean,disableTransitions:Boolean,hit:Boolean,color:String,size:{type:String,values:N},effect:{type:String,values:["dark","light","plain"],default:"light"},round:Boolean}),K={close:s=>s instanceof MouseEvent,click:s=>s instanceof MouseEvent},W=["aria-label"],Z=["aria-label"];var A=V({name:"ElTag",__name:"tag",props:F,emits:K,setup(s,{emit:_}){const B=s,p=_,z=x(),{t:f}=$(),a=j("tag"),b=P(()=>{const{type:e,hit:l,effect:n,closable:c,round:w}=B;return[a.b(),a.is("closable",c),a.m(e||"primary"),a.m(z.value),a.m(n),a.is("hit",l),a.is("round",w)]}),g=e=>{p("close",e)},y=e=>{p("click",e)},T=e=>{var l,n,c;(c=(n=(l=e==null?void 0:e.component)==null?void 0:l.subTree)==null?void 0:n.component)!=null&&c.bum&&(e.component.subTree.component.bum=null)};return(e,l)=>s.disableTransitions?(i(),u("span",{key:0,class:o(b.value),style:S({backgroundColor:s.color}),onClick:y},[m("span",{class:o(t(a).e("content"))},[k(e.$slots,"default")],2),s.closable?(i(),u("button",{key:0,"aria-label":t(f)("el.tag.close"),class:o(t(a).e("close")),type:"button",onClick:h(g,["stop"])},[r(t(v),null,{default:d(()=>[r(t(C))]),_:1})],10,W)):E("v-if",!0)],6)):(i(),I(L,{key:1,name:`${t(a).namespace.value}-zoom-in-center`,appear:"",onVnodeMounted:T},{default:d(()=>[m("span",{class:o(b.value),style:S({backgroundColor:s.color}),onClick:y},[m("span",{class:o(t(a).e("content"))},[k(e.$slots,"default")],2),s.closable?(i(),u("button",{key:0,"aria-label":t(f)("el.tag.close"),class:o(t(a).e("close")),type:"button",onClick:h(g,["stop"])},[r(t(v),null,{default:d(()=>[r(t(C))]),_:1})],10,Z)):E("v-if",!0)],6)]),_:3},8,["name"]))}}),D=A;const J=q(D);export{J as E,F as t};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{aF as s,aG as e,aH as o,aI as n}from"./index-C8bRaOsd.js";const l=()=>s("/model-eval"),m=a=>s(`/model-eval/${a}`),d=a=>n(`/model-eval/${a}`),c=a=>e("/model-eval/start",a),v=a=>s(`/dimension/${a}`),r=a=>e("/dimension",a),g=(a,t)=>o(`/dimension/${a}`,t);export{m as a,v as b,r as c,d,l as g,c as s,g as u}; import{aF as s,aG as e,aH as o,aI as n}from"./index-CGB0A5x_.js";const l=()=>s("/model-eval"),m=a=>s(`/model-eval/${a}`),d=a=>n(`/model-eval/${a}`),c=a=>e("/model-eval/start",a),v=a=>s(`/dimension/${a}`),r=a=>e("/dimension",a),g=(a,t)=>o(`/dimension/${a}`,t);export{m as a,v as b,r as c,d,l as g,c as s,g as u};

View File

@@ -1 +1 @@
import{aF as n,aG as t,aH as i,aI as a}from"./index-C8bRaOsd.js";const o=()=>n("/fine-tune"),c=e=>n(`/fine-tune/${e}`),f=e=>n("/fine-tune/check-name",{name:e}),g=e=>t("/fine-tune",e),F=e=>t("/fine-tune/start",e),r=e=>t("/fine-tune/preflight",e),T=e=>n(`/fine-tune/${e}/diagnostics`),p=(e,s)=>i(`/fine-tune/${e}`,s),$=e=>t(`/fine-tune/stop/${e}`),d=e=>a(`/fine-tune/${e}`),h=e=>n(`/fine-tune/progress/${e}`),l=(e,s={})=>n(`/fine-tune/${e}/logs`,s);export{h as a,c as b,f as c,d,g as e,F as f,o as g,l as h,T as i,r as p,$ as s,p as u}; import{aF as n,aG as t,aH as i,aI as a}from"./index-CGB0A5x_.js";const o=()=>n("/fine-tune"),c=e=>n(`/fine-tune/${e}`),f=e=>n("/fine-tune/check-name",{name:e}),g=e=>t("/fine-tune",e),F=e=>t("/fine-tune/start",e),r=e=>t("/fine-tune/preflight",e),T=e=>n(`/fine-tune/${e}/diagnostics`),p=(e,s)=>i(`/fine-tune/${e}`,s),$=e=>t(`/fine-tune/stop/${e}`),d=e=>a(`/fine-tune/${e}`),h=e=>n(`/fine-tune/progress/${e}`),l=(e,s={})=>n(`/fine-tune/${e}/logs`,s);export{h as a,c as b,f as c,d,g as e,F as f,o as g,l as h,T as i,r as p,$ as s,p as u};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More