-
-
- {actionData?.errors?.name && (
-
{actionData.errors.name}
+
+ {/* 提示信息 */}
+
+
+
评查点分组用于对评查点进行分类管理,合理的分组结构有助于更高效地组织和查找评查点。
+
+
+ {/* 错误提示 */}
+ {actionData?.errors?.general && (
+
+
+ {actionData.errors.general}
+
+ )}
+
+ {/* 表单 */}
+
+
-
-
-
-
-
-
-
-
-
+ {/* 详细配置区域 */}
+
+
+
+
详细配置
-
-
-
-
+
+ {/* 分组描述 */}
+
+
+
+
详细描述有助于其他用户了解该分组的用途
+
+
+ {/* 状态 */}
+
+
+
+
禁用状态的分组及其下的评查点将不会参与评查
+
+
+ {/* 排序 */}
+
+
+
+
用于设置分组在列表中的显示顺序,默认为0
+
-
-
-
+
diff --git a/app/routes/rule-groups.tsx b/app/routes/rule-groups.tsx
index a33a0d2..a387191 100644
--- a/app/routes/rule-groups.tsx
+++ b/app/routes/rule-groups.tsx
@@ -1,10 +1,12 @@
-// app/routes/rule-groups.tsx
import { Outlet } from "@remix-run/react";
+/**
+ * 评查点分组管理 - 父级路由
+ * 仅作为嵌套路由的容器,不包含具体内容
+ */
export const handle = {
- breadcrumb: "评查规则库"
-};
-
-export default function RuleGroupsLayout() {
- return
+ breadcrumb: "评查点分组"
+}
+export default function RuleGroups() {
+ return
;
}
\ No newline at end of file
diff --git a/app/styles/components/button.css b/app/styles/components/button.css
index 38a3fbe..f26ea15 100644
--- a/app/styles/components/button.css
+++ b/app/styles/components/button.css
@@ -94,7 +94,7 @@
}
.ant-btn-default {
- @apply bg-white border border-gray-300 text-gray-800 hover:border-[#00684a] focus:ring-[#00684a];
+ @apply bg-white border border-gray-300 text-gray-800 focus:ring-gray-300;
}
.ant-btn-danger {
diff --git a/app/styles/components/filter-panel.css b/app/styles/components/filter-panel.css
index 2fec435..10a4eac 100644
--- a/app/styles/components/filter-panel.css
+++ b/app/styles/components/filter-panel.css
@@ -24,10 +24,10 @@
/* 筛选控件 */
.filter-control {
- @apply w-full;
+ @apply w-full focus:border-[#00684a] focus:shadow-[0,0,0,2px,rgba(0,104,74,0.2)] focus:outline-none;
}
-/* 筛选操作按钮区域 */
+/* 筛选操作按钮区域 */
.filter-actions {
@apply flex justify-end items-center pt-4 mt-4 border-t border-gray-100 space-x-3;
}
diff --git a/app/styles/pages/prompts_index.css b/app/styles/pages/prompts_index.css
new file mode 100644
index 0000000..a93f171
--- /dev/null
+++ b/app/styles/pages/prompts_index.css
@@ -0,0 +1,99 @@
+/**
+ * 提示词模板管理页面样式
+ */
+
+.prompt-page {
+ --primary-color: var(--color-primary, #00684a);
+ --primary-hover: var(--color-primary-hover, #005a40);
+ --primary-light: rgba(0, 104, 74, 0.1);
+ --success-color: var(--color-success, #52c41a);
+ --warning-color: var(--color-warning, #faad14);
+ --error-color: var(--color-error, #ff4d4f);
+}
+
+/* 页面头部 */
+.prompt-page .page-header {
+ @apply flex justify-between items-center mb-4;
+}
+
+.prompt-page .page-title {
+ @apply text-xl font-medium;
+}
+
+/* 搜索区域 */
+.prompt-page .search-container {
+ @apply mb-4;
+}
+
+.prompt-page .search-form {
+ @apply flex flex-wrap items-end gap-4;
+}
+
+.prompt-page .search-field {
+ @apply flex-1 min-w-[200px];
+}
+
+.prompt-page .search-actions {
+ @apply flex items-center;
+}
+
+/* 数据表格 */
+.prompt-page .table-container {
+ @apply overflow-x-auto;
+}
+
+/* 类型标签 */
+.prompt-page .type-badge {
+ @apply inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium mr-1;
+}
+
+.prompt-page .type-extraction {
+ @apply bg-green-100 text-green-800;
+}
+
+.prompt-page .type-evaluation {
+ @apply bg-yellow-100 text-yellow-800;
+}
+
+.prompt-page .type-summary {
+ @apply bg-blue-100 text-blue-800;
+}
+
+.prompt-page .type-common {
+ @apply bg-purple-100 text-purple-800;
+}
+
+/* 状态标签 */
+.prompt-page .status-badge {
+ @apply inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium;
+}
+
+.prompt-page .status-active {
+ @apply bg-green-100 text-green-800;
+}
+
+.prompt-page .status-inactive {
+ @apply bg-red-100 text-red-800;
+}
+
+.prompt-page .status-system {
+ @apply bg-blue-100 text-blue-800;
+}
+
+/* 操作按钮 */
+.prompt-page .operation-btn {
+ @apply inline-flex items-center px-2 py-1 text-sm rounded-md hover:bg-gray-100 transition-colors duration-150 ease-in-out;
+}
+
+.prompt-page .operation-btn i {
+ @apply mr-1;
+}
+
+/* 分页 */
+.prompt-page .pagination-info {
+ @apply text-sm text-gray-500;
+}
+
+.prompt-page .pagination-controls {
+ @apply flex items-center;
+}
\ No newline at end of file
diff --git a/app/styles/pages/prompts_new.css b/app/styles/pages/prompts_new.css
new file mode 100644
index 0000000..2e3586d
--- /dev/null
+++ b/app/styles/pages/prompts_new.css
@@ -0,0 +1,194 @@
+/**
+ * 提示词模板编辑页面样式
+ */
+
+.prompt-new-page {
+ --primary-color: var(--color-primary, #00684a);
+ --primary-hover: var(--color-primary-hover, #005a40);
+ --primary-light: rgba(0, 104, 74, 0.1);
+ --success-color: var(--color-success, #52c41a);
+ --warning-color: var(--color-warning, #faad14);
+ --error-color: var(--color-error, #ff4d4f);
+ --text-color: rgba(0, 0, 0, 0.85);
+ --text-secondary: rgba(0, 0, 0, 0.45);
+ --border-color: #f0f0f0;
+ --bg-gray: #f5f5f5;
+}
+
+/* 页面头部 */
+.prompt-new-page .page-header {
+ @apply flex justify-between items-center mb-4;
+}
+
+.prompt-new-page .page-title {
+ @apply text-xl font-medium;
+}
+
+/* 表单样式 */
+.prompt-new-page .form-group {
+ @apply mb-5;
+}
+
+.prompt-new-page .form-label {
+ @apply block mb-1.5 text-sm font-medium text-gray-800;
+}
+
+.prompt-new-page .form-input,
+.prompt-new-page .form-select,
+.prompt-new-page .form-textarea {
+ @apply w-full px-3 py-2 text-sm border border-gray-300 rounded transition-all duration-300;
+}
+
+.prompt-new-page .form-input:focus,
+.prompt-new-page .form-select:focus,
+.prompt-new-page .form-textarea:focus {
+ @apply outline-none border-[var(--primary-color)] shadow-[0_0_0_2px_rgba(0,104,74,0.2)];
+}
+
+.prompt-new-page .form-textarea {
+ @apply min-h-[80px];
+ resize: vertical;
+}
+
+.prompt-new-page .form-code-editor {
+ @apply font-mono text-sm p-3 min-h-[300px] rounded border border-gray-300 w-full whitespace-pre-wrap;
+ font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
+ line-height: 1.5;
+}
+
+.prompt-new-page .help-text {
+ @apply text-[var(--text-secondary)] text-xs mt-1;
+}
+
+/* 只读字段 */
+.prompt-new-page .read-only-field {
+ @apply bg-[var(--bg-gray)] cursor-not-allowed;
+}
+
+/* 变量相关样式 */
+.prompt-new-page .var-container {
+ @apply flex flex-wrap gap-2 mt-2;
+}
+
+.prompt-new-page .var-badge {
+ @apply inline-flex items-center px-2 py-1 rounded-full bg-[var(--primary-light)] text-[var(--primary-color)] text-xs mr-1.5 mb-1.5;
+}
+
+.prompt-new-page .var-badge i {
+ @apply text-sm ml-1 cursor-pointer;
+}
+
+.prompt-new-page .example-section {
+ @apply mt-2 border border-[var(--border-color)] rounded p-3;
+}
+
+.prompt-new-page .example-header {
+ @apply font-medium mb-2 text-sm;
+}
+
+.prompt-new-page .var-input-group {
+ @apply flex gap-2 mb-2;
+}
+
+.prompt-new-page .var-input-group .form-input {
+ @apply flex-1 mb-0;
+}
+
+/* 开关样式 */
+.prompt-new-page .switch {
+ @apply relative inline-block w-11 h-[22px];
+}
+
+.prompt-new-page .switch input {
+ @apply opacity-0 w-0 h-0;
+}
+
+.prompt-new-page .slider {
+ @apply absolute cursor-pointer top-0 left-0 right-0 bottom-0 bg-gray-400 rounded-full transition-all duration-300;
+}
+
+.prompt-new-page .slider:before {
+ content: "";
+ @apply absolute h-[18px] w-[18px] left-[3px] bottom-[2px] bg-white rounded-full transition-all duration-300;
+}
+
+.prompt-new-page input:checked + .slider {
+ @apply bg-[var(--primary-color)];
+}
+
+.prompt-new-page input:focus + .slider {
+ @apply shadow-[0_0_1px_var(--primary-color)];
+}
+
+.prompt-new-page input:checked + .slider:before {
+ @apply transform translate-x-5;
+}
+
+/* 警告框样式 */
+.prompt-new-page .alert {
+ @apply p-3 rounded mb-4 flex items-start;
+}
+
+.prompt-new-page .alert i {
+ @apply mr-2 mt-0.5;
+}
+
+.prompt-new-page .alert-info {
+ @apply bg-[#e6f7ff] border border-[#91d5ff] text-[#1890ff];
+}
+
+.prompt-new-page .alert-warning {
+ @apply bg-[#fffbe6] border border-[#ffe58f] text-[#faad14];
+}
+
+/* 类型标签 */
+.prompt-new-page .type-tag {
+ @apply inline-flex items-center px-2 py-1 rounded text-xs mb-2;
+}
+
+.prompt-new-page .type-common {
+ @apply bg-[var(--primary-light)] text-[var(--primary-color)];
+}
+
+.prompt-new-page .type-extraction {
+ @apply bg-[rgba(82,196,26,0.1)] text-[var(--success-color)];
+}
+
+.prompt-new-page .type-evaluation {
+ @apply bg-[rgba(250,173,20,0.1)] text-[var(--warning-color)];
+}
+
+.prompt-new-page .type-summary {
+ @apply bg-[rgba(24,144,255,0.1)] text-[#1890ff];
+}
+
+/* 代码块样式 */
+.prompt-new-page code {
+ @apply bg-gray-100 text-gray-800 px-1 py-0.5 rounded text-sm font-mono;
+}
+
+/* 文本颜色 */
+.prompt-new-page .text-error {
+ @apply text-[var(--error-color)];
+}
+
+.prompt-new-page .text-secondary {
+ @apply text-[var(--text-secondary)];
+}
+
+.prompt-new-page .text-primary {
+ @apply text-[var(--primary-color)];
+}
+
+/* 卡片样式 */
+.prompt-new-page .ant-card {
+ @apply bg-white rounded-lg shadow-sm border border-gray-200 mb-4;
+}
+
+.prompt-new-page .ant-card-header {
+ @apply px-4 py-3 border-b border-gray-100 font-medium;
+}
+
+.prompt-new-page .ant-card-body {
+ @apply p-4;
+}
\ No newline at end of file
diff --git a/app/styles/pages/rule-groups_index.css b/app/styles/pages/rule-groups_index.css
index d4869ad..4c682ed 100644
--- a/app/styles/pages/rule-groups_index.css
+++ b/app/styles/pages/rule-groups_index.css
@@ -166,6 +166,14 @@
.rule-groups-page .ant-btn-text.text-primary {
color: #00684a;
}
+
+ .rule-groups-page .operations-cell {
+ @apply flex space-x-2;
+ }
+
+ .rule-groups-page .operation-btn {
+ @apply text-sm flex items-center text-[--color-primary] bg-transparent hover:underline p-2;
+ }
.rule-groups-page .ant-btn-text.text-primary:hover {
color: #00684a;
diff --git a/app/styles/pages/rule-groups_new.css b/app/styles/pages/rule-groups_new.css
new file mode 100644
index 0000000..e442bc1
--- /dev/null
+++ b/app/styles/pages/rule-groups_new.css
@@ -0,0 +1,154 @@
+/**
+ * 评查点分组新增/编辑页样式
+ */
+
+/* 页面容器 */
+.rule-group-new-page {
+ @apply p-5;
+}
+
+/* 页面标题区域 */
+.rule-group-new-page .page-header {
+ @apply flex justify-between items-center mb-6;
+}
+
+.rule-group-new-page .page-title {
+ @apply text-xl font-medium mb-1;
+}
+
+.rule-group-new-page .page-subtitle {
+ @apply text-sm text-gray-500;
+}
+
+/* 表单容器 */
+.rule-group-new-page .form-container {
+ @apply p-0;
+}
+
+/* 提示信息区域 */
+.rule-group-new-page .info-message {
+ @apply flex items-center p-4 mb-5 bg-[rgba(0,104,74,0.05)] border border-[rgba(0,104,74,0.1)] rounded-md;
+}
+
+.rule-group-new-page .info-message i {
+ @apply text-lg mr-3 text-[#00684a];
+}
+
+.rule-group-new-page .info-message p {
+ @apply text-sm text-gray-600 m-0;
+}
+
+/* 表单区域 */
+.rule-group-new-page .form-section {
+ @apply bg-white rounded-md border border-gray-200 mb-6 transition-shadow duration-200 shadow-sm;
+}
+
+.rule-group-new-page .form-section:hover {
+ @apply shadow-md;
+}
+
+.rule-group-new-page .form-section-header {
+ @apply flex items-center p-4 border-b border-gray-100;
+}
+
+.rule-group-new-page .form-section-header i {
+ @apply text-lg mr-2 text-[#00684a];
+}
+
+.rule-group-new-page .form-section-header h3 {
+ @apply text-base font-medium m-0;
+}
+
+.rule-group-new-page .form-section-body {
+ @apply p-6;
+}
+
+/* 表单元素 */
+.rule-group-new-page .form-group {
+ @apply mb-5;
+}
+
+.rule-group-new-page .form-label {
+ @apply block text-sm font-medium mb-2 text-gray-700;
+}
+
+.rule-group-new-page .form-label .required-mark {
+ @apply text-red-500 ml-1;
+}
+
+.rule-group-new-page .form-input,
+.rule-group-new-page .form-select,
+.rule-group-new-page .form-textarea {
+ @apply w-full px-3 py-2 border border-gray-300 rounded-md focus:ring-1 focus:ring-[#00684a] focus:border-[#00684a] outline-none text-sm transition-all duration-200;
+}
+
+.rule-group-new-page .form-input:hover,
+.rule-group-new-page .form-select:hover,
+.rule-group-new-page .form-textarea:hover {
+ @apply border-[#00684a];
+}
+
+.rule-group-new-page .form-input.error,
+.rule-group-new-page .form-select.error,
+.rule-group-new-page .form-textarea.error {
+ @apply border-red-500 focus:ring-0 ;
+}
+
+.rule-group-new-page .form-textarea {
+ @apply min-h-[120px] resize-y;
+}
+
+.rule-group-new-page .form-tip {
+ @apply mt-1.5 text-xs text-gray-500;
+}
+
+.rule-group-new-page .form-error {
+ @apply mt-1.5 text-xs text-red-500;
+}
+
+/* 单选框组样式 */
+.rule-group-new-page .radio-group {
+ @apply flex gap-6;
+}
+
+.rule-group-new-page .radio-item {
+ @apply flex items-center cursor-pointer;
+}
+
+.rule-group-new-page .radio-input {
+ @apply mr-2 cursor-pointer;
+}
+
+/* 行布局 */
+.rule-group-new-page .form-row {
+ @apply flex flex-col md:flex-row gap-6;
+}
+
+.rule-group-new-page .form-col {
+ @apply flex-1 min-w-0;
+}
+
+/* 按钮组 */
+.rule-group-new-page .form-actions {
+ @apply flex justify-end gap-3 mt-6 mb-10;
+}
+
+/* 错误提示 */
+.rule-group-new-page .general-error {
+ @apply p-4 mb-6 bg-red-50 border border-red-100 rounded-md text-red-700 text-sm;
+}
+
+/* 响应式调整 */
+@media (max-width: 768px) {
+ .rule-group-new-page .form-row {
+ @apply flex-col;
+ }
+
+ .rule-group-new-page .page-header {
+ @apply flex-col items-start;
+ }
+
+ .rule-group-new-page .page-header .header-actions {
+ @apply mt-4;
+ }
+}
\ No newline at end of file
diff --git a/html/提示词-列表.html b/html/提示词-列表.html
index 88215c4..dbbfaf7 100644
--- a/html/提示词-列表.html
+++ b/html/提示词-列表.html
@@ -4,8 +4,10 @@
中国烟草AI合同及卷宗审核系统 - 提示词模板管理
-
-
+
+
+