diff --git a/ry-vue3/.env.development b/ry-vue3/.env.development index c198c2e..7c893ea 100644 --- a/ry-vue3/.env.development +++ b/ry-vue3/.env.development @@ -1,2 +1,2 @@ -# 开发环境 API 基路径 (Vite dev server proxy 前缀) -VITE_APP_BASE_API = '/dev-api' +# 开发环境 API 基路径: 直连远程后端 (绕过 Vite proxy, 避免 HTTPS 代理卡住) +VITE_APP_BASE_API = 'https://risingdoctor.com/hg-api' diff --git a/ry-vue3/src/assets/main.scss b/ry-vue3/src/assets/main.scss index 6ff6471..0469631 100644 --- a/ry-vue3/src/assets/main.scss +++ b/ry-vue3/src/assets/main.scss @@ -1,7 +1,269 @@ -html, body, #app { height: 100%; margin: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; } -:root { --theme-color: #409eff; --theme-color-light: #66b1ff; --theme-color-dark: #3a8ee6; } -.page-wrap { padding: 16px; } -.page-card { background: #fff; border-radius: 6px; padding: 16px; box-shadow: 0 1px 4px rgba(0,21,41,.08); margin-bottom: 16px; } -.page-title { font-size: 18px; font-weight: 600; margin-bottom: 12px; color: #1f1f1f; } -.filter-bar { margin-bottom: 12px; } -.toolbar { margin-bottom: 12px; display: flex; gap: 8px; } +/* ============================================================= + 全局样式 — 医疗机构合规系统 + 风格:政务稳重 / 信息密度合理 / 中文优先 / 浅灰底 + 卡片 + ============================================================= */ + +html, body, #app { + height: 100%; + margin: 0; + padding: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", + "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", + "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.6; + color: var(--el-text-color-primary); + background: var(--brand-slate-50); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +*, *::before, *::after { box-sizing: border-box; } + +a { color: var(--brand-primary-text); text-decoration: none; } +a:hover { color: var(--brand-primary); } + +h1, h2, h3, h4, h5, h6 { margin: 0; font-weight: 600; color: var(--el-text-color-primary); } + +/* —— 滚动条 (政务: 低调, 不发光) —— */ +::-webkit-scrollbar { width: 8px; height: 8px; } +::-webkit-scrollbar-track { background: transparent; } +::-webkit-scrollbar-thumb { background: var(--brand-slate-300); border-radius: 4px; } +::-webkit-scrollbar-thumb:hover { background: var(--brand-slate-400); } + +/* —— 页面骨架 —— */ +.page-wrap { padding: 16px 20px; } + +/* 卡片容器 (所有后台列表/详情页统一用这个) */ +.page-card { + background: #fff; + border-radius: 6px; + padding: 20px 24px; + border: 1px solid var(--brand-slate-200); + margin-bottom: 16px; +} + +/* 页面标题 — 政务: 顶部蓝色细横线 + 粗体, 不靠图标 */ +.page-title { + font-size: 18px; + font-weight: 600; + color: var(--el-text-color-primary); + margin: 0 0 16px; + padding-left: 12px; + border-left: 4px solid var(--brand-primary); + line-height: 1.2; +} + +/* 面包屑 — 政务标准 */ +.breadcrumb { + font-size: 13px; + color: var(--el-text-color-secondary); + margin-bottom: 16px; + display: flex; + align-items: center; + gap: 8px; +} +.breadcrumb .sep { color: var(--brand-slate-300); margin: 0 2px; } +.breadcrumb a { color: var(--el-text-color-secondary); cursor: pointer; } +.breadcrumb a:hover { color: var(--brand-primary); } +.breadcrumb .current { color: var(--el-text-color-primary); font-weight: 500; } + +/* 筛选区 */ +.filter-bar { margin-bottom: 16px; } + +/* 筛选区 — 弹性换行 + 控件最小宽度, 上下不紧贴 */ +.filter-form { + background: var(--brand-slate-50); + padding: 16px 20px; + border-radius: 4px; + margin-bottom: 16px; + border: 1px solid var(--brand-slate-200); + display: flex; + flex-wrap: wrap; + align-items: flex-start; + gap: 14px 16px; +} +.filter-form .el-form-item { + margin-bottom: 0 !important; + margin-right: 0 !important; + display: flex; + align-items: center; +} +.filter-form .el-form-item .el-form-item__label { + height: 32px; + line-height: 32px; + padding: 0 8px 0 0; + font-size: 13px; + color: var(--el-text-color-regular); +} +.filter-form .el-form-item .el-form-item__content { line-height: 32px; } +.filter-form .el-input, +.filter-form .el-select, +.filter-form .el-date-editor { width: 180px; } +.filter-form .el-input__wrapper { min-height: 32px; } +.filter-form .el-select__wrapper { min-height: 32px; } +.toolbar { margin-bottom: 16px; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; } + +/* 按钮: 默认带细边框阴影 hover 明显 */ +.el-button { font-weight: 500; border-radius: 4px; } +.el-button--primary { box-shadow: 0 1px 2px rgba(21, 128, 61, 0.20); } +.el-button--primary:hover { box-shadow: 0 2px 6px rgba(21, 128, 61, 0.30); } + +/* link 按钮 — 修复 link+primary 撞色 (全局) */ +:deep(.el-button--primary.is-link), +:deep(.el-button--primary.is-link:hover) { + background: transparent !important; + border-color: transparent !important; + color: var(--brand-primary-text) !important; + box-shadow: none !important; +} +:deep(.el-button--primary.is-link:hover) { color: var(--brand-primary) !important; } + +/* el-link 表格操作 — 行内链接, 取代 el-button link */ +.el-link { + font-weight: 500; +} +/* 表格操作列容器 — 不换行, 防止外置按钮文字拆行 */ +.table-actions { + display: inline-flex; + align-items: center; + flex-wrap: nowrap; + white-space: nowrap; +} +.table-actions .el-link, +.table-actions .el-button.is-link { + font-size: 13px; + font-weight: 500; + padding: 0 6px; + white-space: nowrap; + flex-shrink: 0; +} +.table-actions .el-link + .el-link, +.table-actions .el-button.is-link + .el-button.is-link { + border-left: 1px solid var(--brand-slate-200); +} +.table-actions .el-link.is-disabled { + color: var(--brand-slate-300); + cursor: not-allowed; +} +.table-actions .el-link.el-link--danger { color: var(--el-color-danger); } +.table-actions .el-link.el-link--warning { color: var(--el-color-warning); } +.table-actions .el-link.el-link--success { color: var(--el-color-success); } + +/* 表格操作列 — 折叠"更多"下拉触发器 */ +.table-actions .op-dropdown { + display: inline-flex; + align-items: center; + gap: 2px; + border-left: 1px solid var(--brand-slate-200); +} +.table-actions .op-caret { + font-size: 10px; + margin-left: 2px; + transition: transform .2s; +} +.table-actions .op-dropdown:hover .op-caret { + transform: rotate(180deg); +} + +/* 表格 — 政务: 表头灰底, 行高紧凑, 边框清晰 */ +.el-table { + --el-table-border-color: var(--brand-slate-200); + --el-table-header-bg-color: var(--brand-slate-100); + --el-table-header-text-color: var(--el-text-color-primary); + --el-table-row-hover-bg-color: var(--brand-slate-50); + --el-table-cell-padding: 6px 0; + font-size: 13px; +} +.el-table th.el-table__cell { + font-weight: 600; + background: var(--brand-slate-100) !important; + color: var(--el-text-color-primary) !important; + border-bottom: 1px solid var(--brand-slate-300) !important; + padding: 8px 0 !important; + height: 36px !important; +} +.el-table td.el-table__cell { padding: 6px 0; } +.el-table--striped .el-table__body tr.el-table__row--striped td { background: #FCFDFE; } + +/* 分页 */ +.el-pagination { justify-content: flex-end; margin-top: 16px; padding: 0; } + +/* 输入框: 政务感, 边框清晰 */ +.el-input__wrapper, .el-textarea__inner, .el-select__wrapper { + box-shadow: 0 0 0 1px var(--brand-slate-300) inset !important; + border-radius: 4px; +} +.el-input__wrapper:hover, .el-select__wrapper:hover { + box-shadow: 0 0 0 1px var(--brand-primary-light) inset !important; +} +.el-input__wrapper.is-focus, .el-select__wrapper.is-focused { + box-shadow: 0 0 0 1px var(--brand-primary) inset !important; +} + +/* Tag 标签 — 政务: 圆角小, 颜色低饱和 */ +.el-tag { + border-radius: 3px; + font-weight: 500; +} + +/* Dialog 标题: 政务感 */ +.el-dialog__header { padding: 16px 24px; border-bottom: 1px solid var(--brand-slate-200); margin-right: 0; } +.el-dialog__title { font-size: 16px; font-weight: 600; color: var(--el-text-color-primary); } +.el-dialog__headerbtn { top: 16px; } +.el-dialog__body { padding: 20px 24px; } +.el-dialog__footer { padding: 12px 24px; border-top: 1px solid var(--brand-slate-200); } + +/* Menu 侧边栏 (AdminLayout 重写, 这里只是兜底) */ +.el-menu { border-right: none !important; } + +/* Descriptions 查看页 */ +.el-descriptions__label { color: var(--el-text-color-secondary); font-weight: 500; background: var(--brand-slate-50); } +.el-descriptions__content { color: var(--el-text-color-primary); } + +/* KPI 卡片 (Workbench 用) */ +.stats-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 16px; + margin-bottom: 24px; +} +.stat-card { + background: #fff; + border: 1px solid var(--brand-slate-200); + border-radius: 6px; + padding: 20px; + display: flex; + flex-direction: column; + gap: 8px; + transition: border-color 0.18s, box-shadow 0.18s, transform 0.18s; + cursor: pointer; + text-decoration: none; + color: inherit; +} +.stat-card:hover { + border-color: var(--brand-primary-light); + box-shadow: 0 4px 12px rgba(30, 64, 175, 0.08); + transform: translateY(-1px); +} +.stat-card .stat-label { font-size: 13px; color: var(--el-text-color-secondary); } +.stat-card .stat-value { font-size: 28px; font-weight: 600; color: var(--brand-primary); line-height: 1.1; } +.stat-card .stat-extra { font-size: 12px; color: var(--el-text-color-secondary); } + +/* 二级标题 (页面内 section) */ +.section-title { + font-size: 15px; + font-weight: 600; + color: var(--el-text-color-primary); + margin: 0 0 14px; + padding-bottom: 10px; + border-bottom: 1px solid var(--brand-slate-200); +} + +/* 空状态 */ +.empty-block { + padding: 48px 20px; + text-align: center; + color: var(--el-text-color-secondary); + font-size: 13px; +} \ No newline at end of file diff --git a/ry-vue3/src/assets/theme.scss b/ry-vue3/src/assets/theme.scss index 7b4f987..6b4f8c6 100644 --- a/ry-vue3/src/assets/theme.scss +++ b/ry-vue3/src/assets/theme.scss @@ -1,70 +1,107 @@ /* ============================================================= - 品牌主题色(Brand Theme) + 品牌主题色(Brand Theme)— 低调绿色主调 ------------------------------------------------------------ - 所有色值都是 HSL/HEX 函数动态计算的派生色。 - 改 :root 里的 --brand-primary / --brand-secondary 即可全局换色。 - - 派生色算法(双轨): - 深色 (deep/darker) — HSL 调亮度 - --brand-primary-deep 暗 12% (hover / active / 标题强调) - --brand-primary-darker 暗 22% (顶部导航 / 深底) - 浅色 (light/lighter/text/mix) — HSL 降饱和 + 提亮度 - 之前试过 Element mix(white) 算法, 但 S=100% 的主色提亮后 - 跟主色对比度太低 (例 #4da2b5 / #4db892), 文字与背景难辨认, - 不适合做选中态/hover-bg. - 现在: 同时降饱和 (S-N) 和提亮度 (L+N), 色相不变, 但灰度提升, - 是 Element 在 S 低基色上的实际效果模拟, 适合政务网站. - --brand-primary-text S-40 L+15 (链接默认, 中蓝可读) - --brand-primary-lighter S-65 L+50 (hover-bg / 选中态, 浅灰蓝) - --brand-primary-light S-65 L+40 (背景 / disabled, 灰中蓝) - --brand-primary-mix S-75 L+60 (输入框 focus border, 近白) - - 次色 (绿色 #009963) 走同一套算法, 命名 -secondary. - 语义上对应 Element Plus success (绿=成功/已批准/已完成), 自动 - 绑定到 --el-color-success*. - - Element Plus 同步:main.js 在启动时读取 --brand-primary 并联动 - ElMessage / ElButton 的 --el-color-primary. + 主色:#15803D 低饱和深绿 (政务/卫健委稳重型, 不刺眼) + 次色:#0E7490 青蓝 (保留原品牌青蓝, 用作次要强调/链接) + 配色逻辑: + - 主色绿 = 品牌色 (按钮/标题/侧栏高亮/KPI) + - 次色蓝 = 链接/链接按钮 (政务感链接蓝) + - 成功色继续用次色蓝, 不用重复绿色 (避免色相冲突) ============================================================= */ :root { - /* 主色 — 青蓝 */ - --brand-primary: #007A95; - --brand-primary-deep: #004858; - --brand-primary-darker: #002129; - --brand-primary-text: #2d9cb4; - --brand-primary-lighter: #b7d6dd; - --brand-primary-light: #95c2cc; - --brand-primary-mix: #dde8ea; + /* —— 主色:低调深绿 (政务/卫健委风格) —— */ + --brand-primary: #15803D; + --brand-primary-deep: #0F5F2E; /* hover / active */ + --brand-primary-darker: #073D1D; /* 深底 (登录页 banner / 关键装饰) */ + --brand-primary-text: #16A34A; /* 链接/文字绿 (中等可读) */ + --brand-primary-lighter: #C8E4D2; /* hover-bg / 选中态底 */ + --brand-primary-light: #95C2A8; /* 边框 / disabled */ + --brand-primary-mix: #E5F0E9; /* 输入框 focus border / 近白底 */ - /* 次色 — 翠绿 */ - --brand-secondary: #009963; - --brand-secondary-deep: #005c3b; - --brand-secondary-darker: #00291a; - --brand-secondary-text: #2eb887; - --brand-secondary-lighter: #baded1; - --brand-secondary-light: #98cdba; - --brand-secondary-mix: #dfece7; + /* —— 次色:青蓝 (原品牌色, 用作链接/次要强调) —— */ + --brand-secondary: #0E7490; + --brand-secondary-deep: #084454; + --brand-secondary-darker: #04222A; + --brand-secondary-text: #2196BC; + --brand-secondary-lighter: #B7D6DD; + --brand-secondary-light: #95C2CC; + --brand-secondary-mix: #DDE8EA; + + /* —— 中性色 slate (政务灰蓝) —— */ + --brand-slate-50: #F8FAFC; + --brand-slate-100: #F1F5F9; + --brand-slate-200: #E2E8F0; + --brand-slate-300: #CBD5E1; + --brand-slate-400: #94A3B8; + --brand-slate-500: #64748B; + --brand-slate-600: #475569; + --brand-slate-700: #334155; + --brand-slate-800: #1E293B; + --brand-slate-900: #0F172A; } -/* Element Plus 联动:把品牌色同步给 Element Plus 内置变量。 - 这样所有 / type="success"> 等都跟主题色。 */ +/* Element Plus 联动 */ :root { - /* 主色 → primary */ + /* 主色绿 → primary */ --el-color-primary: var(--brand-primary); - --el-color-primary-light-3: var(--brand-primary-text); /* text (中蓝可读) */ - --el-color-primary-light-5: var(--brand-primary-light); /* light (灰中) */ - --el-color-primary-light-7: var(--brand-primary-lighter); /* lighter (灰浅) */ - --el-color-primary-light-8: var(--brand-primary-lighter); /* lighter */ - --el-color-primary-light-9: var(--brand-primary-mix); /* mix (近白) */ + --el-color-primary-light-3: var(--brand-primary-text); + --el-color-primary-light-5: var(--brand-primary-light); + --el-color-primary-light-7: var(--brand-primary-lighter); + --el-color-primary-light-8: var(--brand-primary-lighter); + --el-color-primary-light-9: var(--brand-primary-mix); --el-color-primary-dark-2: var(--brand-primary-deep); - /* 次色 → success (绿色语义: 已批准 / 已完成) */ - --el-color-success: var(--brand-secondary); - --el-color-success-light-3: var(--brand-secondary-text); - --el-color-success-light-5: var(--brand-secondary-light); - --el-color-success-light-7: var(--brand-secondary-lighter); - --el-color-success-light-8: var(--brand-secondary-lighter); - --el-color-success-light-9: var(--brand-secondary-mix); - --el-color-success-dark-2: var(--brand-secondary-deep); + /* 次色蓝 → info (链接/提示, 不再绑 success 避免色相冲突) */ + --el-color-info: var(--brand-secondary); + --el-color-info-light-3: var(--brand-secondary-text); + --el-color-info-light-5: var(--brand-secondary-light); + --el-color-info-light-7: var(--brand-secondary-lighter); + --el-color-info-light-9: var(--brand-secondary-mix); + + /* success: 保留 Element Plus 默认绿 (#67c23a → #22c55e 系), 但低饱和 */ + --el-color-success: #16A34A; + --el-color-success-light-3: #4ADE80; + --el-color-success-light-5: #A7E0BC; + --el-color-success-light-7: #D1EDD9; + --el-color-success-light-8: #D1EDD9; + --el-color-success-light-9: #EBF6EE; + --el-color-success-dark-2: #15803D; + + /* danger: 收紧饱和度, 政务感 */ + --el-color-danger-light-5: #F4D6D6; + --el-color-danger-light-7: #FBE9E9; + --el-color-danger-light-9: #FCF1F1; + + /* warning: 偏琥珀, 不刺眼 */ + --el-color-warning: #B45309; + --el-color-warning-light-3: #D97706; + --el-color-warning-light-5: #F4D9A8; + --el-color-warning-light-7: #FAEAD0; + --el-color-warning-light-9: #FCF4E5; + + /* 边框/文字/背景: 政务低对比度, 偏冷灰 */ + --el-border-color: var(--brand-slate-200); + --el-border-color-light: var(--brand-slate-100); + --el-border-color-lighter: var(--brand-slate-100); + --el-border-color-extra-light: #FAFBFC; + --el-border-color-dark: var(--brand-slate-300); + --el-border-color-darker: var(--brand-slate-400); + + --el-text-color-primary: var(--brand-slate-800); + --el-text-color-regular: var(--brand-slate-700); + --el-text-color-secondary: var(--brand-slate-500); + --el-text-color-placeholder: var(--brand-slate-400); + --el-text-color-disabled: var(--brand-slate-400); + + --el-fill-color-blank: #FFFFFF; + --el-fill-color-light: var(--brand-slate-50); + --el-fill-color-lighter: var(--brand-slate-100); + --el-fill-color-extra-light: #FAFBFC; + --el-fill-color-dark: var(--brand-slate-200); + --el-fill-color-darker: var(--brand-slate-300); + + --el-bg-color: #FFFFFF; + --el-bg-color-page: var(--brand-slate-50); + --el-bg-color-overlay: #FFFFFF; } \ No newline at end of file diff --git a/ry-vue3/src/components/CameraQrUpload.vue b/ry-vue3/src/components/CameraQrUpload.vue index 042e9ad..df1a9b2 100644 --- a/ry-vue3/src/components/CameraQrUpload.vue +++ b/ry-vue3/src/components/CameraQrUpload.vue @@ -21,7 +21,7 @@  扫码拍照 - 查看照片 + 查看照片 未上传 等待手机回传… diff --git a/ry-vue3/src/components/NoticeList.vue b/ry-vue3/src/components/NoticeList.vue index 94696cd..2811ee3 100644 --- a/ry-vue3/src/components/NoticeList.vue +++ b/ry-vue3/src/components/NoticeList.vue @@ -18,7 +18,7 @@ - + 查看 + 下载 - + @@ -109,7 +105,7 @@ import { bizList } from '@/api/public' import { stageLabel, stageTag, STAGE_OPTIONS } from '@/utils/meetingStage' const q = reactive({ projectNo: '', meetingName: '', currentStage: '' }) -const page = reactive({ pageNum: 1, pageSize: 10, total: 0 }) +const page = reactive({ pageNum: 1, pageSize: 20, total: 0 }) const rows = ref([]) const loading = ref(false) const detail = ref({}) @@ -253,7 +249,6 @@ load() diff --git a/ry-vue3/src/views/executor-people/ExecutorPeople.vue b/ry-vue3/src/views/executor-people/ExecutorPeople.vue index 8554c8c..43a95d2 100644 --- a/ry-vue3/src/views/executor-people/ExecutorPeople.vue +++ b/ry-vue3/src/views/executor-people/ExecutorPeople.vue @@ -66,18 +66,18 @@ - @@ -143,7 +143,7 @@ const orgName = computed(() => route.query.orgName || '') const q = reactive({ name: '', phone: '', email: '', orgName: '', department: '', position: '' }) const rows = ref([]) const loading = ref(false) -const page = reactive({ pageNum: 1, pageSize: 10, total: 0 }) +const page = reactive({ pageNum: 1, pageSize: 20, total: 0 }) function statusTagType(s) { // 统一: 0=正常(success), 1=禁用(danger) @@ -310,7 +310,6 @@ watch(() => route.fullPath, () => { diff --git a/ry-vue3/src/views/executor/Labor.vue b/ry-vue3/src/views/executor/Labor.vue index 1d29094..567bf6f 100644 --- a/ry-vue3/src/views/executor/Labor.vue +++ b/ry-vue3/src/views/executor/Labor.vue @@ -37,10 +37,10 @@ - +
@@ -104,7 +104,7 @@ import { uploadToOss } from '@/utils/oss' const q = ref({ meetingName: '', expertName: '' }) const rows = ref([]) const loading = ref(false) -const page = reactive({ pageNum: 1, pageSize: 10, total: 0 }) +const page = reactive({ pageNum: 1, pageSize: 20, total: 0 }) const detail = ref({}) const detailOpen = ref(false) @@ -200,7 +200,6 @@ onMounted(load) .executor-labor { padding: 16px; } .breadcrumb { font-size: 13px; color: #8c8c8c; margin-bottom: 12px; } .page-sub { font-size: 13px; color: #909399; margin-bottom: 16px; } -.filter-form { margin-bottom: 12px; } .pager { display: flex; justify-content: flex-end; margin-top: 12px; } /* 红字提示 (与 People.vue 一致) */ diff --git a/ry-vue3/src/views/executor/Meetings.vue b/ry-vue3/src/views/executor/Meetings.vue index 9e5c15d..24afe82 100644 --- a/ry-vue3/src/views/executor/Meetings.vue +++ b/ry-vue3/src/views/executor/Meetings.vue @@ -56,11 +56,11 @@ - +
@@ -85,7 +85,7 @@ const q = ref({ }) const rows = ref([]) const loading = ref(false) -const page = reactive({ pageNum: 1, pageSize: 10, total: 0 }) +const page = reactive({ pageNum: 1, pageSize: 20, total: 0 }) // 工具: 时间格式 (yyyy.MM.dd HH:mm), 与 manager 列表一致 function fmtTime(d) { @@ -139,7 +139,6 @@ onMounted(() => { readQueryFromRoute(); load() }) /* 整页面板 (仿 manager/meetings/Meetings.vue 风格) */ .executor-meetings { padding: 16px; } .breadcrumb { font-size: 13px; color: #8c8c8c; margin-bottom: 12px; } -.filter-form { margin-bottom: 12px; } .date-sep { margin: 0 4px; color: #606266; } .pager { display: flex; justify-content: flex-end; margin-top: 12px; } diff --git a/ry-vue3/src/views/executor/People.vue b/ry-vue3/src/views/executor/People.vue index fdd21c4..0fb4183 100644 --- a/ry-vue3/src/views/executor/People.vue +++ b/ry-vue3/src/views/executor/People.vue @@ -42,17 +42,17 @@ -
@@ -122,7 +122,7 @@ const store = useUserStore() const list = ref([]) const loading = ref(false) const q = reactive({ name: '', phone: '', orgName: '', department: '', position: '' }) -const page = reactive({ pageNum: 1, pageSize: 10, total: 0 }) +const page = reactive({ pageNum: 1, pageSize: 20, total: 0 }) const importOpen = ref(false) @@ -246,5 +246,4 @@ onMounted(loadList) .hint-link { color: var(--brand-primary); cursor: pointer; font-size: 13px; } .hint-link:hover { color: var(--brand-primary-deep); } .pager { display: flex; justify-content: flex-end; margin-top: 12px; } -.filter-form { margin-bottom: 12px; } \ No newline at end of file diff --git a/ry-vue3/src/views/executor/Projects.vue b/ry-vue3/src/views/executor/Projects.vue index 8cb8b59..a294bcc 100644 --- a/ry-vue3/src/views/executor/Projects.vue +++ b/ry-vue3/src/views/executor/Projects.vue @@ -77,11 +77,11 @@ - +
@@ -137,7 +137,7 @@ const list = ref([]) const loading = ref(false) const query = reactive({ projectNo: '', projectName: '', isFinished: '', isSettled: '' }) const dateRange = ref([]) -const page = reactive({ pageNum: 1, pageSize: 10, total: 0 }) +const page = reactive({ pageNum: 1, pageSize: 20, total: 0 }) const selected = ref([]) // 项目分配 (执行人): 仿 sponsor/SponsorProjects.vue @@ -284,7 +284,6 @@ onMounted(() => { readQueryFromRoute(); loadList() }) .batch-bar { margin-bottom: 12px; display: flex; gap: 8px; align-items: center; } .filter-tip { color: #909399; font-size: 12px; } .pager { display: flex; justify-content: flex-end; margin-top: 12px; } -.filter-form { margin-bottom: 12px; } .assign-project-info { background: #f5f7fa; padding: 12px 16px; border-radius: 4px; margin-bottom: 12px; } .assign-project-info > div { display: flex; line-height: 22px; } .assign-project-info .lbl { color: #909399; width: 90px; flex-shrink: 0; } diff --git a/ry-vue3/src/views/expert/Experts.vue b/ry-vue3/src/views/expert/Experts.vue index a4e4086..6395f32 100644 --- a/ry-vue3/src/views/expert/Experts.vue +++ b/ry-vue3/src/views/expert/Experts.vue @@ -63,8 +63,8 @@ @@ -72,8 +72,8 @@ @@ -93,20 +93,20 @@ - @@ -239,7 +239,7 @@ const rows = ref([]) const selection = ref([]) const loading = ref(false) const submitting = ref(false) -const page = reactive({ pageNum: 1, pageSize: 10, total: 0 }) +const page = reactive({ pageNum: 1, pageSize: 20, total: 0 }) function goNew() { router.push(listBasePath.value + '/new') } function goEdit(row) { router.push(listBasePath.value + '/edit/' + row.expertId) } @@ -464,7 +464,6 @@ watch(() => route.fullPath, () => { diff --git a/ry-vue3/src/views/manager/ManagerProjectDetail.vue b/ry-vue3/src/views/manager/ManagerProjectDetail.vue index ca97f58..7d17b2e 100644 --- a/ry-vue3/src/views/manager/ManagerProjectDetail.vue +++ b/ry-vue3/src/views/manager/ManagerProjectDetail.vue @@ -96,7 +96,7 @@ {{ n.label }} {{ n.name || '已上传' }} - 查看 + 查看 未上传
diff --git a/ry-vue3/src/views/manager/ManagerProjectsAssign.vue b/ry-vue3/src/views/manager/ManagerProjectsAssign.vue index 471af0a..7bcf4dc 100644 --- a/ry-vue3/src/views/manager/ManagerProjectsAssign.vue +++ b/ry-vue3/src/views/manager/ManagerProjectsAssign.vue @@ -102,12 +102,12 @@
- + 增加执行方 + + 增加执行方
diff --git a/ry-vue3/src/views/manager/Plans.vue b/ry-vue3/src/views/manager/Plans.vue index 78b2d29..89ed347 100644 --- a/ry-vue3/src/views/manager/Plans.vue +++ b/ry-vue3/src/views/manager/Plans.vue @@ -48,8 +48,8 @@ @@ -69,11 +69,11 @@ - +
@@ -173,7 +173,7 @@ const q = ref({ planName: '', projectNo: '', planDirectionId: '', planCategory: const rows = ref([]); const selection = ref([]) const loading = ref(false) const submitting = ref(false) -const page = reactive({ pageNum: 1, pageSize: 10, total: 0 }) +const page = reactive({ pageNum: 1, pageSize: 20, total: 0 }) async function load() { loading.value = true @@ -350,7 +350,6 @@ onMounted(() => { loadPlanDirectionOptions(); load() }) border-left: 3px solid var(--brand-primary); } .page-sub { font-size: 13px; color: #909399; margin: 0 0 16px; } -.filter-form { margin-bottom: 12px; } .batch-bar { display: flex; gap: 8px; margin-bottom: 12px; align-items: center; } .filter-tip { color: #909399; font-size: 12px; } .pager { display: flex; justify-content: flex-end; margin-top: 12px; } diff --git a/ry-vue3/src/views/manager/Projects.vue b/ry-vue3/src/views/manager/Projects.vue index 67f3018..7949307 100644 --- a/ry-vue3/src/views/manager/Projects.vue +++ b/ry-vue3/src/views/manager/Projects.vue @@ -116,14 +116,14 @@ - @@ -253,7 +253,7 @@ const route = useRoute() const q = ref({ sponsorOrgIds: [], execOrgIds: [], projectNo: '', projectName: '', projectForm: '', startTime: '', endTime: '', isFinished: '', isSettled: '' }) const rows = ref([]) const loading = ref(false) -const page = reactive({ pageNum: 1, pageSize: 10, total: 0 }) +const page = reactive({ pageNum: 1, pageSize: 20, total: 0 }) async function load() { loading.value = true @@ -695,7 +695,6 @@ watch(() => route.path + (route.query._t || ''), () => load()) /* 1:1 抄 sponsor/SponsorProjects.vue */ .page-card { background: #fff; padding: 16px 20px; border-radius: 6px; border: 1px solid #f0f0f0; } .breadcrumb { font-size: 13px; color: #8c8c8c; margin-bottom: 12px; } -.filter-form { display: flex; flex-wrap: wrap; gap: 0 16px; padding-bottom: 12px; border-bottom: 1px solid #f0f0f0; margin-bottom: 12px; } .toolbar { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; } /* 操作列下拉 */ diff --git a/ry-vue3/src/views/manager/ProjectsNew.vue b/ry-vue3/src/views/manager/ProjectsNew.vue index 97482c9..57b0400 100644 --- a/ry-vue3/src/views/manager/ProjectsNew.vue +++ b/ry-vue3/src/views/manager/ProjectsNew.vue @@ -94,10 +94,10 @@
- 删除角色 + 删除角色
- + 增加角色 + + 增加角色
公告文件
diff --git a/ry-vue3/src/views/manager/SupportIntent.vue b/ry-vue3/src/views/manager/SupportIntent.vue index f47a6da..65b099c 100644 --- a/ry-vue3/src/views/manager/SupportIntent.vue +++ b/ry-vue3/src/views/manager/SupportIntent.vue @@ -46,10 +46,10 @@ @@ -72,7 +72,7 @@ import { const q = ref({ projectNo: '', projectName: '', name: '', workUnit: '', phone: '', intentStatus: '' }) const rows = ref([]) const loading = ref(false) -const page = reactive({ pageNum: 1, pageSize: 10, total: 0 }) +const page = reactive({ pageNum: 1, pageSize: 20, total: 0 }) async function load() { loading.value = true @@ -145,7 +145,6 @@ onMounted(load) diff --git a/ry-vue3/src/views/meetings/MeetingDetail.vue b/ry-vue3/src/views/meetings/MeetingDetail.vue index 8e9dea9..055e086 100644 --- a/ry-vue3/src/views/meetings/MeetingDetail.vue +++ b/ry-vue3/src/views/meetings/MeetingDetail.vue @@ -41,7 +41,7 @@
{{ u.orgName }} - 未分配 - - 分配 + 分配
@@ -49,7 +49,7 @@
{{ u.orgName }} - 未分配 - - 分配 + 分配
@@ -101,7 +101,7 @@ @@ -121,7 +121,7 @@ @@ -152,11 +152,11 @@ - @@ -139,7 +139,7 @@ const orgName = computed(() => route.query.orgName || '') const q = reactive({ name: '', phone: '', orgName: '', department: '', position: '' }) const rows = ref([]) const loading = ref(false) -const page = reactive({ pageNum: 1, pageSize: 10, total: 0 }) +const page = reactive({ pageNum: 1, pageSize: 20, total: 0 }) function statusTagType(s) { // 统一: 0=正常(success), 1=禁用(danger) @@ -319,7 +319,6 @@ watch(() => route.fullPath, () => { \ No newline at end of file diff --git a/ry-vue3/src/views/sponsor/Projects.vue b/ry-vue3/src/views/sponsor/Projects.vue index bebfa97..261f96c 100644 --- a/ry-vue3/src/views/sponsor/Projects.vue +++ b/ry-vue3/src/views/sponsor/Projects.vue @@ -59,9 +59,7 @@ - + {{ row.projectNo }} @@ -94,17 +92,17 @@ - + @@ -220,7 +218,7 @@ import { ElMessage, ElMessageBox } from 'element-plus' const rows = ref([]) const loading = ref(false) const q = reactive({ projectNo: '', projectName: '', projectForm: '', isFinished: '', isSettled: '' }) -const page = reactive({ pageNum: 1, pageSize: 10, total: 0 }) +const page = reactive({ pageNum: 1, pageSize: 20, total: 0 }) const selected = ref([]) const formOpen = ref(false) @@ -456,7 +454,6 @@ onMounted(() => { readQueryFromRoute(); load(); loadPersons() }) /* 1:1 抄 doctor/Projects.vue + doctor/Submissions.vue */ .page-card { background: #fff; padding: 16px 20px; border-radius: 6px; border: 1px solid #f0f0f0; } .breadcrumb { font-size: 13px; color: #8c8c8c; margin-bottom: 12px; } -.filter-form { display: flex; flex-wrap: wrap; gap: 0 16px; padding-bottom: 12px; border-bottom: 1px solid #f0f0f0; margin-bottom: 12px; } .toolbar { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; } .hint { color: #909399; font-size: 12px; margin-left: 8px; } .score-row { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; } diff --git a/ry-vue3/src/views/sponsor/SponsorPeople.vue b/ry-vue3/src/views/sponsor/SponsorPeople.vue index 03b8660..80e82e2 100644 --- a/ry-vue3/src/views/sponsor/SponsorPeople.vue +++ b/ry-vue3/src/views/sponsor/SponsorPeople.vue @@ -65,18 +65,18 @@ - @@ -303,7 +303,6 @@ load() /* 1:1 抄 doctor/Submissions.vue */ .page-card { background: #fff; padding: 16px 20px; border-radius: 6px; border: 1px solid #f0f0f0; } .breadcrumb { font-size: 13px; color: #8c8c8c; margin-bottom: 12px; } -.filter-form { display: flex; flex-wrap: wrap; gap: 0 16px; padding-bottom: 12px; border-bottom: 1px solid #f0f0f0; margin-bottom: 12px; } .toolbar { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; } .hint-link { color: var(--brand-primary); cursor: pointer; font-size: 13px; } diff --git a/ry-vue3/src/views/sponsor/SponsorProjects.vue b/ry-vue3/src/views/sponsor/SponsorProjects.vue index 2f9c321..95f18e2 100644 --- a/ry-vue3/src/views/sponsor/SponsorProjects.vue +++ b/ry-vue3/src/views/sponsor/SponsorProjects.vue @@ -88,12 +88,12 @@ - @@ -387,7 +387,6 @@ onMounted(load)