Browse Source

chore: auto bump version and changelog [skip ci]

iwt 3 weeks ago
parent
commit
faa2d7953c

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-807d15eb83c3a8cbf1f0267f4ae22a9f9df15e0c
+96809a7880087ffa5f518931147cb44b6902a06a

+ 2 - 2
cfc-web/package-lock.json

@@ -1,12 +1,12 @@
 {
   "name": "cfc-web",
-  "version": "1.0.1769",
+  "version": "1.0.1770",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "cfc-web",
-      "version": "1.0.1769",
+      "version": "1.0.1770",
       "dependencies": {
         "@wangeditor/editor": "^5.1.23",
         "@wangeditor/editor-for-vue": "^1.0.2",

+ 1 - 1
cfc-web/package.json

@@ -1,6 +1,6 @@
 {
   "name": "cfc-web",
-  "version": "1.0.1770",
+  "version": "1.0.1771",
   "private": true,
   "scripts": {
     "dev": "vue-cli-service serve",

+ 13 - 0
cfc-web/public/CHANGELOG-v1.0.md

@@ -4,6 +4,19 @@
 
 ---
 
+## v1.0.1771 (2026-10-23)
+
+### 文档
+- 统一知识库 v3.0 + 跨厂商对比 + 循证判定
+
+### 其他
+- - 新增跨厂商「过敏原参考」「疾病症状菌群相关性对比」两段(艾德范思 vs 谷禾系共识)
+- - 便秘方向分歧追加循证判定标注(Blautia→谷禾−准确;Faecalibacterium→艾德范思−更准确,库内张力不翻标)
+- - 并入艾德范思报告指标知识库源文件(.json/.md)与报告模板(.json/.pdf)
+- - validate_kb.py / render_kb_md.py 改造为从统一库内 section 读取(仍 PASS)
+- 
+
+
 ## v1.0.1770 (2026-10-23)
 
 ### Bug 修复

+ 14 - 1
cfc-web/public/CHANGELOG.md

@@ -1,6 +1,6 @@
 # 更新日志
 
-> 当前版本: v1.0.1770
+> 当前版本: v1.0.1771
 
 ## 历史版本
 
@@ -8,6 +8,19 @@
 
 ---
 
+## v1.0.1771 (2026-10-23)
+
+### 文档
+- 统一知识库 v3.0 + 跨厂商对比 + 循证判定
+
+### 其他
+- - 新增跨厂商「过敏原参考」「疾病症状菌群相关性对比」两段(艾德范思 vs 谷禾系共识)
+- - 便秘方向分歧追加循证判定标注(Blautia→谷禾−准确;Faecalibacterium→艾德范思−更准确,库内张力不翻标)
+- - 并入艾德范思报告指标知识库源文件(.json/.md)与报告模板(.json/.pdf)
+- - validate_kb.py / render_kb_md.py 改造为从统一库内 section 读取(仍 PASS)
+- 
+
+
 ## v1.0.1770 (2026-10-23)
 
 ### Bug 修复

+ 7 - 5
cfc-web/src/views/admin/review/ActivityAudit.vue

@@ -27,9 +27,9 @@
           <StatusTag :type="statusType(row.auditStatus)" :text="statusLabel(row.auditStatus)" />
         </template>
       </el-table-column>
-      <el-table-column prop="auditReason" label="原因" width="160" show-overflow-tooltip>
+      <el-table-column prop="rejectReason" label="原因" width="160" show-overflow-tooltip>
         <template slot="header">
-          <span class="sort-header" @click.stop="onSortClick('auditReason', $event)">原因<span v-if="sortIndex('auditReason') !== null" class="sort-index" :class="sortClass('auditReason') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('auditReason') }}</span>{{ sortIcon('auditReason') }}</span>
+          <span class="sort-header" @click.stop="onSortClick('rejectReason', $event)">原因<span v-if="sortIndex('rejectReason') !== null" class="sort-index" :class="sortClass('rejectReason') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('rejectReason') }}</span>{{ sortIcon('rejectReason') }}</span>
         </template>
       </el-table-column>
       <el-table-column label="操作" width="120" fixed="right">
@@ -67,8 +67,8 @@
           <dimension-weight-picker v-model="auditWeights" :show-presets="true" />
           <div class="weights-tip">审核通过前请补充五维权重,合计需为 100%</div>
         </el-form-item>
-        <el-form-item label="驳回原因" v-if="currentRow.auditReason" class="text-error">
-          {{ currentRow.auditReason }}
+        <el-form-item label="驳回原因" v-if="currentRow.rejectReason" class="text-error">
+          {{ currentRow.rejectReason }}
         </el-form-item>
       </el-form>
     </audit-detail-drawer>
@@ -111,7 +111,9 @@ export default {
         const params = { auditStatus: this.statusFilter || undefined, keyword: this.keyword || undefined, page: 1, size: 50 }
         if (this.sortState.length > 0) params.sort = this.sortState
         const res = await getActivityList(params)
-        this.list = res.data && res.data.records || res.data && res.data.list || res.data || []
+        const rows = res.data && res.data.records || res.data && res.data.list || res.data || []
+        // 统一口径:活动驳回原因字段名与活动报名审核一致(rejectReason),后端旧字段 auditReason 做兼容映射
+        this.list = rows.map(r => ({ ...r, rejectReason: r.rejectReason || r.auditReason }))
       } catch (e) { this.$message.error('加载失败')
       } finally { this.loading = false }
     },

+ 6 - 0
cfc-web/src/views/admin/review/ActivityRegistrationAudit.vue

@@ -27,6 +27,12 @@
           <StatusTag :type="statusType(row.status)" :text="statusLabel(row.status)" />
         </template>
       </el-table-column>
+      <el-table-column label="驳回原因" width="160" show-overflow-tooltip>
+        <template slot-scope="{ row }">
+          <span v-if="row.rejectReason" class="text-error">{{ row.rejectReason }}</span>
+          <span v-else class="text-muted">-</span>
+        </template>
+      </el-table-column>
       <el-table-column label="操作" width="120" fixed="right">
         <template slot-scope="{ row }">
           <el-button size="mini" type="primary" @click="showDetail(row)">{{ row.status === 'pending' ? '审核' : '查看' }}</el-button>

+ 6 - 4
cfc-web/src/views/admin/review/ArticleAudit.vue

@@ -30,7 +30,7 @@
           <StatusTag :type="statusType(row.auditStatus)" :text="statusLabel(row.auditStatus)" size="small" />
         </template>
       </el-table-column>
-      <el-table-column prop="auditReason" label="驳回原因" min-width="150" show-overflow-tooltip>
+      <el-table-column prop="rejectReason" label="驳回原因" min-width="150" show-overflow-tooltip>
         <template slot-scope="{ row }">
           <span v-if="row.auditReason" class="text-error">{{ row.auditReason }}</span>
           <span v-else class="text-muted">-</span>
@@ -79,8 +79,8 @@
           <el-form-item label="内容" v-if="currentRow.content">
             <div v-html="currentRow.content" class="content-preview"></div>
           </el-form-item>
-          <el-form-item label="驳回原因" v-if="currentRow.auditReason" class="text-error">
-            {{ currentRow.auditReason }}
+          <el-form-item label="驳回原因" v-if="currentRow.rejectReason" class="text-error">
+            {{ currentRow.rejectReason }}
           </el-form-item>
         </el-form>
       </div>
@@ -147,7 +147,9 @@ export default {
         if (this.sortState.length > 0) params.sort = this.sortState
         const res = await adminArticleList(params)
         if (res.code === 200) {
-          this.list = res.data && res.data.records || res.data && res.data.list || []
+          const rows = res.data && res.data.records || res.data && res.data.list || []
+          // 统一口径:文章驳回原因字段名与活动报名审核一致(rejectReason),后端旧字段 auditReason 做兼容映射
+          this.list = rows.map(r => ({ ...r, rejectReason: r.rejectReason || r.auditReason }))
           this.total = (res.data && res.data.total) || 0
         }
       } catch (e) {