feat: 本地 Java 发票 OCR + 策划方案多角色开放 + H5 相机脱敏修复

- OCR: 进程内 PaddleOCR ONNX Runtime 识别替代远程 Python 微服务
  (新增 ocr/core/service/config 引擎, 删 OcrClient/OcrConfig, PDF 文本层优先 + QR 快路径)
- 投稿: 项目设计投稿 → 项目策划方案, doctor/executor/sponsor 三角色开放
  (BizProjectPlan 按非 admin/manager 隔离, 复用 Submissions.vue, 设计文件改 OssFileUploader)
- H5: <video> 去掉 autoplay + safePlay 重试, 穿透 uni-app wrapper 找原生 video
- 脱敏: 签到表高斯模糊由横向条带改为全高竖条带 (20%~50% 宽度)
- 域名: ringdoctor.com → risingdoctor.com
This commit is contained in:
郭庆泰
2026-08-24 19:23:53 +08:00
parent 904e28710f
commit 0c882ae846
36 changed files with 2851 additions and 296 deletions
+9 -6
View File
@@ -1,6 +1,6 @@
<template>
<div class="page-card">
<div class="breadcrumb">首页 / 我的项目设计投稿</div>
<div class="breadcrumb">首页 / 我的项目策划方案</div>
<el-form inline :model="q" class="filter-form">
<el-form-item label="策划方案名称"><el-input v-model="q.planName" placeholder="输入策划方案名称" clearable style="width: 200px" /></el-form-item>
@@ -81,15 +81,18 @@
</template>
<script setup>
import { reactive, ref, onMounted } from 'vue'
import { reactive, ref, onMounted, computed } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { useRouter } from 'vue-router'
import { useRouter, useRoute } from 'vue-router'
import request from '@/utils/request'
import { bizList, bizUpdate } from '@/api/public'
import DictSelect from '@/components/DictSelect.vue'
import AuditStatusTag from '@/components/AuditStatusTag.vue'
const router = useRouter()
const route = useRoute()
// 投稿模块路径前缀: 按当前角色 (doctor/executor/sponsor) 拼, 避免串到别的角色侧栏
const base = computed(() => `/${route.meta.role || 'doctor'}`)
const q = reactive({
planName: '',
@@ -146,13 +149,13 @@ function canSubmit(row) {
function onSelectionChange(arr) { selected.value = arr }
function onCreate() {
router.push({ path: '/doctor/submission/new' })
router.push({ path: `${base.value}/submission/new` })
}
function onView(row) {
router.push({ path: `/doctor/submission/detail/${row.planId}` })
router.push({ path: `${base.value}/submission/detail/${row.planId}` })
}
function onEdit(row) {
router.push({ path: `/doctor/submission/edit/${row.planId}` })
router.push({ path: `${base.value}/submission/edit/${row.planId}` })
}
async function onSubmit(row) {