Parcourir la source

档案相关目录修改

duy il y a 5 mois
Parent
commit
9110466aae

+ 1 - 1
package.json

@@ -25,7 +25,7 @@
         "dayjs": "^1.11.13",
         "echarts": "^5.5.1",
         "element-plus": "^2.8.5",
-        "hc-vue3-ui": "^4.5.3",
+        "hc-vue3-ui": "^4.5.4",
         "js-base64": "^3.7.7",
         "js-cookie": "^3.0.5",
         "js-fast-way": "^0.5.6",

BIN
src/assets/hande-over/jiance.png


BIN
src/assets/hande-over/yanshou.png


+ 218 - 127
src/router/modules/base.js

@@ -79,7 +79,7 @@ export default [
         path: '/file',
         name: 'file',
         redirect: '/file/collection',
-        meta: { title: '文件收集' },
+        meta: { title: '资料收集' },
         component: Layout,
         children: [
             {
@@ -103,165 +103,144 @@ export default [
         meta: { title: '档案管理' },
         component: Layout,
         children: [
-            {
-                path: '/archives/bookmark',
-                name: 'archives-bookmark',
-                meta: { title: '档案著录' },
-                component: () => import('~src/views/archives/bookmark.vue'),
-            },
+           
             {
                 path: '/archives/rolling',
                 name: 'archives-rolling',
-                meta: { title: '自动立卷' },
-                component: () => import('~src/views/archives/rolling.vue'),
-            },
-            {
-                path: '/archives/appraisal',
-                name: 'archives-appraisal',
-                meta: { title: '档案鉴定' },
-                component: () => import('~src/views/archives/appraisal.vue'),
-            },
-            {
-                path: '/archives/meta-data',
-                name: 'archives-meta-data',
-                meta: { title: '元数据' },
-                component: () => import('~src/views/archives/meta-data.vue'),
-            },
-            {
-                path: '/archives/tuning',
-                name: 'archives-tuning',
-                meta: { title: '档案调整' },
-                component: () => import('~src/views/archives/tuning.vue'),
-            },
-        ],
-    },
-    {
-        path: '/custody',
-        name: 'custody',
-        redirect: '/custody/backup',
-        meta: { title: '档案保管' },
-        component: Layout,
-        children: [
-            {
-                path: '/custody/backup',
-                name: 'custody-backup',
-                meta: { title: '存储备份' },
-                component: () => import('~src/views/custody/backup.vue'),
-            },
-            {
-                path: '/custody/early',
-                name: 'custody-early',
-                meta: { title: '档案预警' },
-                component: () => import('~src/views/custody/early.vue'),
-            },
-            {
-                path: '/custody/early-admin',
-                name: 'custody-early-admin',
-                meta: { title: '档案预警' },
-                component: () => import('~src/views/custody/early-admin.vue'),
-            },
-            {
-                path: '/custody/testing',
-                name: 'custody-testing',
-                meta: { title: '四性检测' },
-                component: () => import('~src/views/custody/testing.vue'),
+                meta: { title: '组卷管理' },
+                redirect: '/archives/rolling/bookmark',
+                children: [
+                    {
+                        path: '/archives/rolling/bookmark',
+                        name: 'archives-rolling-bookmark',
+                        meta: { title: '档案著录' },
+                        component: () => import('~src/views/archives/rolling/bookmark.vue'),
+                    },
+                    {
+                        path: '/archives/rolling/rolling',
+                        name: 'archives-rolling-rolling',
+                        meta: { title: '档案组卷' },
+                        component: () => import('~src/views/archives/rolling/rolling.vue'),
+                    },
+                    {
+                        path: '/archives/rolling/parameter',
+                        name: 'archives-rolling-parameter',
+                        meta: { title: '组卷设置' },
+                        component: () => import('~src/views/archives/rolling/parameter.vue'),
+                    },
+                  
+                ],
             },
             {
-                path: '/custody/save',
-                name: 'custody-save',
-                meta: { title: '案卷保管' },
-                component: () => import('~src/views/custody/save.vue'),
+                path: '/archives/manage',
+                name: 'archives-manage',
+                meta: { title: '案卷管理' },
+                redirect: '/archives/manage/query',
+                children: [
+                    {
+                        path: '/archives/manage/query',
+                        name: 'archives-manage-query',
+                        meta: { title: '档案查询' },
+                        component: () => import('~src/views/archives/manage/query.vue'),
+                    },
+                    {
+                        path: '/archives/manage/inspects',
+                        name: 'archives-manage-inspects',
+                        meta: { title: '档案巡检' },
+                        component: () => import('~src/views/archives/manage/inspects.vue'),
+                    },
+                    {
+                        path: '/archives/manage/early',
+                        name: 'archives-manage-early',
+                        meta: { title: '档案预警' },
+                        component: () => import('~src/views/archives/manage/early.vue'),
+                    },
+                    {
+                        path: '/archives/manage/tuning',
+                        name: 'archives-manage-tuning',
+                        meta: { title: '档案调整' },
+                        component: () => import('~src/views/archives/manage/tuning.vue'),
+                    },
+                  
+                ],
             },
             {
-                path: '/custody/ledger',
-                name: 'custody-ledger',
-                meta: { title: '保管台账' },
-                component: () => import('~src/views/custody/ledger.vue'),
+                path: '/archives/test',
+                name: 'archives-test',
+                meta: { title: '档案检测' },
+                redirect: '/archives/test/testing',
+                children: [
+                    {
+                        path: '/archives/test/testing',
+                        name: 'archives-test-testing',
+                        meta: { title: '四性检测' },
+                        component: () => import('~src/views/archives/test/testing.vue'),
+                    },
+                    {
+                        path: '/archives/test/meta-data',
+                        name: 'archives-test-meta-data',
+                        meta: { title: '元数据' },
+                        component: () => import('~src/views/archives/test/meta-data.vue'),
+                    },
+                 
+                  
+                ],
             },
+      
+            // {
+            //     path: '/archives/appraisal',
+            //     name: 'archives-appraisal',
+            //     meta: { title: '档案鉴定' },
+            //     component: () => import('~src/views/archives/appraisal.vue'),
+            // },
+          
         ],
     },
     {
-        path: '/using',
-        name: 'using',
-        redirect: '/using/stats',
-        meta: { title: '档案利用' },
+        path: '/statistics',
+        name: 'statistics',
+        redirect: '/statistics/stats',
+        meta: { title: '档案统计' },
         component: Layout,
         children: [
             {
-                path: '/using/stats',
-                name: 'using-stats',
+                path: '/statistics/stats',
+                name: 'statistics-stats',
                 meta: { title: '档案统计' },
-                component: () => import('~src/views/using/stats.vue'),
-            },
-            {
-                path: '/using/bim',
-                name: 'using-bim',
-                meta: { title: 'BIM查询' },
-                component: () => import('~src/views/using/bim.vue'),
-            },
-            {
-                path: '/using/query',
-                name: 'using-query',
-                meta: { title: '档案查询' },
-                component: () => import('~src/views/using/query.vue'),
+                component: () => import('~src/views/statistics/stats.vue'),
             },
             {
-                path: '/using/borrow',
-                name: 'using-borrow',
-                meta: { title: '档案借阅' },
-                redirect: '/using/borrow',
-                children: [
-                    {
-                        path: '/using/borrow/borrow',
-                        name: 'using-borrow-borrow',
-                        meta: { title: '档案借阅' },
-                        component: () => import('~src/views/using/borrow/borrow.vue'),
-                    },
-                    {
-                        path: '/using/borrow/query',
-                        name: 'using-borrow-query',
-                        meta: { title: '借阅查询' },
-                        component: () => import('~src/views/using/borrow/query.vue'),
-                    },
-                    {
-                        path: '/using/borrow-ledger',
-                        name: 'using-borrow-ledger',
-                        meta: { title: '借阅台账' },
-                        component: () => import('~src/views/using/borrow/ledger.vue'),
-                    },
-                ],
+                path: '/statistics/datav',
+                name: 'statistics-datav',
+                meta: { title: '数据看板' },
+                component: () => import('~src/views/statistics/datav.vue'),
             },
         ],
     },
     {
         path: '/transfer',
         name: 'transfer',
-        redirect: '/transfer/inspects',
+        redirect: '/transfer/initial',
         meta: { title: '档案移交' },
         component: Layout,
         children: [
             {
                 path: '/transfer/hand-over',
                 name: 'transfer-hand-over',
-                meta: { title: '档案移交' },
+                meta: { title: '在线移交' },
                 component: () => import('~src/views/transfer/hand-over.vue'),
             },
-            {
-                path: '/transfer/inspects',
-                name: 'transfer-inspects',
-                meta: { title: '档案巡检' },
-                component: () => import('~src/views/transfer/inspects.vue'),
-            },
+         
             {
                 path: '/transfer/initial',
                 name: 'transfer-initial',
-                meta: { title: '档案初验' },
+                meta: { title: '验收申请' },
                 component: () => import('~src/views/transfer/initial.vue'),
             },
             {
                 path: '/transfer/initial-expert',
                 name: 'transfer-initial-expert',
-                meta: { title: '档案初验(专家)' },
+                meta: { title: '在线验收' },
                 component: () => import('~src/views/transfer/initial-expert.vue'),
             },
             {
@@ -302,6 +281,118 @@ export default [
             },
         ],
     },
+    {
+        path: '/custody',
+        name: 'custody',
+        redirect: '/custody/backup',
+        meta: { title: '档案保管' },
+        component: Layout,
+        children: [
+            // {
+            //     path: '/custody/backup',
+            //     name: 'custody-backup',
+            //     meta: { title: '存储备份' },
+            //     component: () => import('~src/views/custody/backup.vue'),
+            // },
+            // {
+            //     path: '/custody/early',
+            //     name: 'custody-early',
+            //     meta: { title: '档案预警' },
+            //     component: () => import('~src/views/custody/early.vue'),
+            // },
+            // {
+            //     path: '/custody/early-admin',
+            //     name: 'custody-early-admin',
+            //     meta: { title: '档案预警' },
+            //     component: () => import('~src/views/custody/early-admin.vue'),
+            // },
+            // {
+            //     path: '/custody/testing',
+            //     name: 'custody-testing',
+            //     meta: { title: '四性检测' },
+            //     component: () => import('~src/views/custody/testing.vue'),
+            // },
+            {
+                path: '/custody/save',
+                name: 'custody-save',
+                meta: { title: '案卷保管' },
+                component: () => import('~src/views/custody/save.vue'),
+            },
+            {
+                path: '/custody/appraisal',
+                name: 'custody-appraisal',
+                meta: { title: '档案鉴定' },
+                component: () => import('~src/views/custody/appraisal.vue'),
+            },
+            {
+                path: '/custody/ledger',
+                name: 'custody-ledger',
+                meta: { title: '保管台账' },
+                component: () => import('~src/views/custody/ledger.vue'),
+            },
+        ],
+    },
+    {
+        path: '/using',
+        name: 'using',
+        redirect: '/using/borrow',
+        meta: { title: '档案利用' },
+        component: Layout,
+        children: [
+            // {
+            //     path: '/using/stats',
+            //     name: 'using-stats',
+            //     meta: { title: '档案统计' },
+            //     component: () => import('~src/views/using/stats.vue'),
+            // },
+            // {
+            //     path: '/using/bim',
+            //     name: 'using-bim',
+            //     meta: { title: 'BIM查询' },
+            //     component: () => import('~src/views/using/bim.vue'),
+            // },
+            // {
+            //     path: '/using/query',
+            //     name: 'using-query',
+            //     meta: { title: '档案查询' },
+            //     component: () => import('~src/views/using/query.vue'),
+            // },
+            {
+                path: '/using/borrow',
+                name: 'using-borrow',
+                meta: { title: '档案借阅' },
+                redirect: '/using/borrow',
+                children: [
+                    {
+                        path: '/using/borrow/borrow',
+                        name: 'using-borrow-borrow',
+                        meta: { title: '档案借阅' },
+                        component: () => import('~src/views/using/borrow/borrow.vue'),
+                    },
+                    {
+                        path: '/using/borrow/query',
+                        name: 'using-borrow-query',
+                        meta: { title: '借阅查询' },
+                        component: () => import('~src/views/using/borrow/query.vue'),
+                    },
+                    {
+                        path: '/using/borrow/ledger',
+                        name: 'using-borrow-ledger',
+                        meta: { title: '借阅台账' },
+                        component: () => import('~src/views/using/borrow/ledger.vue'),
+                    },
+                    
+                ],
+            },
+            {
+                path: '/using/backup',
+                name: 'using-backup',
+                meta: { title: '存储备份' },
+                component: () => import('~src/views/using/backup.vue'),
+            },
+        ],
+    },
+ 
     {
         path: '/tasks',
         name: 'tasks',
@@ -354,12 +445,12 @@ export default [
                 meta: { title: '认证管理' },
                 component: () => import('~src/views/config/certified.vue'),
             },
-            {
-                path: '/config/parameter',
-                name: 'config-parameter',
-                meta: { title: '参数设置' },
-                component: () => import('~src/views/config/parameter.vue'),
-            },
+            // {
+            //     path: '/config/parameter',
+            //     name: 'config-parameter',
+            //     meta: { title: '参数设置' },
+            //     component: () => import('~src/views/config/parameter.vue'),
+            // },
         ],
     },
     {

+ 1 - 0
src/router/modules/token.js

@@ -19,4 +19,5 @@ export default [
    'using-borrow-query',
    'using-borrow-borrow',
    'using-borrow-ledger',
+   'using-backup',
 ]

+ 8 - 1
src/styles/page/custody/scoped/backup.scss

@@ -17,7 +17,8 @@
         z-index: 11;
         .hc-backup-tab {
             position: absolute;
-            display: inline-flex;
+            display: inline-block;
+            left: 0;  // 添加默认left值
             border-radius: 8px 8px 0 0;
             background: var(--el-color-primary-light-8);
             border: 1px solid #e4e7ed;
@@ -46,6 +47,12 @@
         .hc-backup-tab + .hc-backup-tab {
             left: 200px;
         }
+        .hc-backup-tab:nth-child(2) {
+            left: 200px;
+        }
+        .hc-backup-tab:nth-child(3) {
+            left: 400px;
+        }
     }
     .hc-backup-card-box {
         position: relative;

+ 9 - 9
src/utils/tools.js

@@ -1,14 +1,14 @@
 //动态加载线上js文件
 export const addDocumentsJs = () => {
-    return new Promise((resolve) => {
-        const script = document.createElement('script')
-        script.src = 'http://39.108.216.210:6831/web-apps/apps/api/documents/api.js'
-        script.type = 'text/javascript'
-        document.head.appendChild(script)
-        script.onload = () => {
-            resolve()
-        }
-    })
+    // return new Promise((resolve) => {
+    //     const script = document.createElement('script')
+    //     script.src = 'http://39.108.216.210:6831/web-apps/apps/api/documents/api.js'
+    //     script.type = 'text/javascript'
+    //     document.head.appendChild(script)
+    //     script.onload = () => {
+    //         resolve()
+    //     }
+    // })
 }
 
 //获取ID,并转为数字

+ 0 - 0
src/views/custody/early-admin.vue → src/views/archives/manage/early-admin.vue


+ 0 - 0
src/views/custody/early.vue → src/views/archives/manage/early.vue


+ 0 - 0
src/views/transfer/inspects.vue → src/views/archives/manage/inspects.vue


+ 0 - 0
src/views/using/query.vue → src/views/archives/manage/query.vue


+ 0 - 0
src/views/archives/tuning.vue → src/views/archives/manage/tuning.vue


+ 0 - 0
src/views/archives/bookmark.vue → src/views/archives/rolling/bookmark.vue


+ 0 - 0
src/views/config/parameter.vue → src/views/archives/rolling/parameter.vue


+ 0 - 0
src/views/archives/rolling.vue → src/views/archives/rolling/rolling.vue


+ 0 - 0
src/views/archives/meta-data.vue → src/views/archives/test/meta-data.vue


+ 0 - 0
src/views/custody/testing.vue → src/views/archives/test/testing.vue


+ 0 - 0
src/views/archives/appraisal.vue → src/views/custody/appraisal.vue


+ 1 - 1
src/views/custody/ledger.vue

@@ -13,7 +13,7 @@
                     </el-select>
                 </div>
                 <div class="ml-3 w-64">
-                    <HcDatePicker :dates="betweenTime" clearable @change="betweenTimeUpdate" />
+                    <HcDatePicker :dates="betweenTime" clearable start-placeholder="移交开始时间" end-placeholder="移交结束时间" @change="betweenTimeUpdate" />
                 </div>
                 <div class="ml-3 w-56">
                     <el-input v-model="searchForm.name" clearable block placeholder="请输入登记表/清单名称" @keyup="keyUpEvent" />

+ 310 - 0
src/views/statistics/datav.vue

@@ -0,0 +1,310 @@
+<template>
+    <el-container v-loading="isLoading" class="hc-home-datav-box relative h-full w-full">
+        <div v-if="isBgImg" class="datav-bg">
+            <img :src="bgImg" alt="背景图片">
+        </div>
+        <el-header id="datav-header" class="relative p-0">
+            <div class="header-bg relative h-full w-full">
+                <img id="datav-header-bg" :src="headerBg" alt="头部图" @load="headerBgLoad">
+            </div>
+            <div class="header-img absolute">
+                <img id="datav-header-img-1" :src="headerImg1" alt="头部装饰1">
+                <img ref="fullScreenRef" class="datav-header-img-2" :src="headerImg2" alt="头部装饰2" @click="fullScreenClick">
+                <div class="project-name-box absolute">
+                    <el-popover effect="dark" placement="bottom" :title="project?.projectName" :width="460" trigger="hover" popper-class="hc-datav-project-name-popover">
+                        <template #reference>
+                            <span id="project-name" ref="projectNameRef" @click="projectNameClick">
+                                {{ project.projectAlias?.substring(0, 10) }}
+                                <i class="ri-arrow-down-s-fill" />
+                            </span>
+                        </template>
+                        <div v-if="project?.projectGist" class="hc-datav-project-gist">{{ project?.projectGist }}</div>
+                    </el-popover>
+                </div>
+            </div>
+        </el-header>
+        <el-container class="relative">
+            <el-aside width="25%" class="relative">
+                <hc-body padding="0">
+                    <datavCard class="aside-charts-1">
+                        <div class="title" @click="tourOpenClick">档案分类占比统计</div>
+                        <div class="content">
+                            <datavClassify :datas="classifyCharts" />
+                        </div>
+                    </datavCard>
+                    <datavCard class="aside-charts-2">
+                        <div class="title">原生、数字化文件数量(份)</div>
+                        <div class="content">
+                            <datavPaper :datas="paperCharts" />
+                        </div>
+                    </datavCard>
+                </hc-body>
+            </el-aside>
+            <el-main class="relative">
+                <hc-body padding="0">
+                    <datavBorder class="main-border">
+                        <div class="main-datav-progress">
+                            <div class="item">
+                                <div class="name">内业</div>
+                                <div class="content">
+                                    <datavProgress :value="projectStat?.inner?.ratio ?? 0" />
+                                </div>
+                            </div>
+                            <div class="item">
+                                <div class="name">外业</div>
+                                <div class="content">
+                                    <datavProgress :value="projectStat?.outer?.ratio ?? 0" />
+                                </div>
+                            </div>
+                        </div>
+                    </datavBorder>
+                    <datavCard class="main-gui">
+                        <div class="main-gui-header">
+                            <div class="title">虚拟档案柜</div>
+                            <div ref="tabsRef" class="extra">
+                                <template v-for="item in tabs" :key="item.key">
+                                    <div class="tab" :class="tabKey === item.key ? 'cur' : ''" @click="tabsClick(item)">
+                                        {{ item.label }}
+                                    </div>
+                                </template>
+                            </div>
+                        </div>
+                        <div id="main-gui-content" class="main-gui-content">
+                            <datavGui :type="tabKey" :project-id="projectId" />
+                        </div>
+                    </datavCard>
+                </hc-body>
+            </el-main>
+        </el-container>
+        <el-tour v-model="tourOpen" @close="tourFinishClose">
+            <el-tour-step :target="projectNameRef" title="项目名称" description="点击这里,进入档案管理系统" />
+            <el-tour-step :target="fullScreenRef" title="是否全屏" description="点击这里切换是否全屏显示" />
+            <el-tour-step :target="tabsRef" title="数据类型" description="点击这里切换档案柜的数据类型" />
+        </el-tour>
+    </el-container>
+</template>
+
+<script setup>
+import { onMounted, onUnmounted, ref } from 'vue'
+import { useRouter } from 'vue-router'
+import { useAppStore } from '~src/store'
+import { initProjectContract } from '~sto/app'
+import { userConfigSave } from '~api/other'
+import { fullScreen, getArrValue, getObjValue, isNullES } from 'js-fast-way'
+import statsApi from '~api/using/stats'
+
+//图片
+import headerBg from '~ass/datav/header1.png'
+import headerImg1 from '~ass/datav/header2.svg'
+import headerImg2 from '~ass/datav/header3.svg'
+//import bgImg from '~ass/datav/bg15.jpg'
+import bgImg from '~ass/datav/bg.jpg'
+
+//组件
+import datavCard from './components/card.vue'
+import datavBorder from './components/border.vue'
+import datavProgress from './components/progress.vue'
+import datavClassify from './components/classify.vue'
+import datavPaper from './components/paper.vue'
+import datavGui from './components/gui.vue'
+
+//初始化组合式
+const router = useRouter()
+const store = useAppStore()
+
+defineOptions({
+    name: 'HcDataV',
+})
+
+const isBgImg = ref(store.isDatavBg)
+
+//渲染完成
+onMounted(() => {
+    windowResize()
+    setInitData()
+    isBgImg.value = store.isDatavBg
+    console.log('isBgImg', isBgImg.value)
+    if (!isBgImg.value) {
+        setTimeout(() => {
+            setAppStyle()
+        }, 1000)
+    }
+})
+
+//设置样式
+const htmlClass = ref('')
+const setAppStyle = () => {
+    const appClass = document.documentElement.getAttribute('class')
+    htmlClass.value = appClass
+    document.documentElement.setAttribute('class', `${appClass} is-no-bg`)
+}
+
+//加载
+const isLoading = ref(false)
+const fullScreenRef = ref()
+const projectNameRef = ref()
+const tabsRef = ref()
+const tourOpen = ref(false)
+
+//获取项目信息
+const project = ref({})
+const projectId = ref(store.projectId)
+const setInitData = async () => {
+    isLoading.value = true
+    try {
+        if (!store.projectContract) {
+            await initProjectContract()
+        }
+        project.value = getObjValue(store.getProjectInfo)
+        const project_id = store.projectId
+        if (!isNullES(project_id)) {
+            projectId.value = project_id
+            //获取接口数据
+            getClassifyChartsData(project_id)
+            getPaperChartsData(project_id)
+            getProjectStat(project_id)
+        } else {
+            window?.$message.warning('项目异常')
+        }
+    } catch (error) {
+        console.log(error)
+    }
+    isLoading.value = false
+    //是否显示引导提示
+    if (store.isDatavTour === 0) {
+        setTimeout(() => {
+            tourOpen.value = true
+        }, 500)
+    }
+}
+
+//关闭引导提示
+const tourFinishClose = async () => {
+    await userConfigSave({
+        isDatavTour: 1,
+    })
+    store.setIsDatavTour(1)
+}
+
+//监听浏览器窗口变化
+const windowResize = () => {
+    window.addEventListener('resize', resizeEvent)
+}
+const resizeEvent = () => {
+    window.requestAnimationFrame(() => {
+        onWindowResize()
+    })
+}
+
+//设置尺寸
+const onWindowResize = () => {
+    //设置头部背景
+    const height = document.getElementById('datav-header-bg').offsetHeight ?? 0
+    document.getElementById('datav-header').style.height = `${height}px`
+
+    //设置项目名称大小
+    const imgHeight = document.getElementById('datav-header').offsetHeight
+    const nameHeight = document.getElementById('project-name').clientHeight
+    const scale = (imgHeight / (nameHeight + 30)).toFixed(5)
+    if (imgHeight && scale < 1) {
+        document.getElementById('project-name').style.transform = `scale(${scale}) translateX(-50%)`
+    }
+}
+
+//图片加载完成
+const headerBgLoad = () => {
+    onWindowResize()
+}
+
+//档案分类占比统计
+const classifyCharts = ref([
+    { value: 0, name: '施工' },
+    { value: 0, name: '监理' },
+    { value: 0, name: '业主' },
+])
+const getClassifyChartsData = async (projectId) => {
+    if (!projectId) {
+        window?.$message.warning('项目异常')
+        return
+    }
+    const { data } = await statsApi.getallArchiveByContractType({ projectId })
+    const res = getObjValue(data)
+    classifyCharts.value = [
+        { value: res.key1 ?? 0, name: '施工' },
+        { value: res.key2 ?? 0, name: '监理' },
+        { value: res.key3 ?? 0, name: '业主' },
+    ]
+}
+
+//档案组卷统计
+const paperCharts = ref([
+    { title: '施工', key1: 0, key2: 0 },
+    { title: '监理', key1: 0, key2: 0 },
+    { title: '业主', key1: 0, key2: 0 },
+])
+//获取原生文件数量
+const getPaperChartsData = async (projectId) => {
+    if (!projectId) {
+        window?.$message.warning('项目异常')
+        return
+    }
+    const { data } = await statsApi.getallnativeChartData({ projectId })
+    paperCharts.value = getArrValue(data)
+}
+
+//获取内外业统计
+const projectStat = ref({
+    inner: { ratio:0, total:0 },
+    outer: { ratio:0, total:0 },
+})
+const getProjectStat = async (projectId) => {
+    if (!projectId) {
+        window?.$message.warning('项目异常')
+        return
+    }
+    const { data } = await statsApi.getProjectStat({ projectId })
+    projectStat.value = getObjValue(data)
+}
+
+//档案柜类型
+const tabKey = ref('2')
+const tabs = ref([
+    { label: '业主', key: '1' },
+    { label: '监理', key: '3' },
+    { label: '施工', key: '2' },
+])
+const tabsClick = (item) => {
+    if (tabKey.value === item.key) return
+    tabKey.value = item.key
+}
+
+//项目名称被点击
+const projectNameClick = () => {
+    router.push({ name: store.homeUrl })
+}
+
+//是否全屏
+const isFullScreen = ref(false)
+const fullScreenClick = () => {
+    isFullScreen.value = !isFullScreen.value
+    fullScreen(isFullScreen.value)
+}
+
+//被卸载
+onUnmounted(() => {
+    window.removeEventListener('resize', resizeEvent)
+    if (htmlClass.value) {
+        document.documentElement.setAttribute('class', htmlClass.value)
+    }
+})
+</script>
+
+<style lang="scss">
+@import "~src/styles/view/datav.scss";
+html.is-no-bg {
+    background-color: transparent;
+    body, #app, .hc-home-datav-box {
+        background-color: transparent;
+    }
+}
+</style>

+ 0 - 0
src/views/using/stats.vue → src/views/statistics/stats.vue


+ 14 - 6
src/views/transfer/hand-over.vue

@@ -11,10 +11,15 @@
             </div>
 
             <div v-if="stepsKey === 0" class="hc-body-center-box">
-                <div class="hc-content-box">
+                <el-button type="primary" hc-btn @click="isExpertAcceptance = !isExpertAcceptance">切换通过状态</el-button>
+                <div v-if="!isExpertAcceptance" class="hc-content-box">
                     <div class="mb-5 text-gray">当前项目档案未通过验收,未达到移交条件</div>
                     <el-button type="primary" hc-btn style="width: 268px;height: 68px;font-weight: bold;" @click="toTransferInitial">去申请验收</el-button>
                 </div>
+                <div v-else class="hc-content-box">
+                    <img :src="yanShou" alt="">
+                    <div class="mt-5 text-3xl text-gray">专家验收中</div>
+                </div>
             </div>
 
             <div v-if="stepsKey === 1" class="hc-body-center-box">
@@ -22,12 +27,12 @@
                 <div v-if="!isCustodyTest" class="hc-content-box">
                     <img :src="bgColor" alt="">
                    
-                    <div class="mb-5 text-3xl text-black">专家验收已通过</div>
+                    <div class="mb-5 text-3xl text-gray">专家验收已通过</div>
                     <el-button type="primary" hc-btn style="width: 268px;height: 68px;font-weight: bold;" @click="custodyTesting">点击进入四性检测</el-button>
                 </div>
                 <div v-else class="hc-content-box">
-                    <div class="mb-5 text-gray">当前项目档案未通过四性检测,未达到移交条件</div>
-                    <el-button type="primary" hc-btn style="width: 268px;height: 68px;font-weight: bold;" @click="custodyTesting">重新检测</el-button>
+                    <img :src="jianCe" alt="">
+                    <div class="mt-5 text-3xl text-gray">检测中</div>
                 </div>
             </div>
 
@@ -146,6 +151,8 @@ import { onMounted, ref } from 'vue'
 import { useRouter } from 'vue-router'
 import { useAppStore } from '~src/store'
 import bgColor from '~src/assets/hande-over/checkbox.png'
+import yanShou from '~src/assets/hande-over/yanshou.png'
+import jianCe from '~src/assets/hande-over/jiance.png'
 import seal from '~src/assets/hande-over/seal.svg'
 import moveSubmit from './move-submit.vue'
 //变量
@@ -170,8 +177,9 @@ const stepsKeys = ref(1)
 const stepsKeysClick = (val) => {
     stepsKeys.value = val
 }
-
-const isCustodyTest = ref(false)
+//是否正在专家验收中
+const isExpertAcceptance = ref(true)
+const isCustodyTest = ref(true)
 //去申请验收
 const toTransferInitial = () => {
     router.push({

+ 315 - 0
src/views/using/backup.vue

@@ -0,0 +1,315 @@
+<template>
+    <div class="hc-page-box hc-custody-backup">
+        <hc-new-card ui="hc-backup-bg-white">
+            <template #header>
+                <div class="hc-card-header-project-alias">{{ projectInfo?.name }}</div>
+            </template>
+            <div class="hc-backup-box">
+                <div class="hc-backup-tab-box">
+                    <template v-for="item in backupTabData" :key="item.num">
+                        <div :class="item.num === backupTabKey ? 'cut' : ''" class="hc-backup-tab" @click="backupTabClick(item.num)">
+                            <span class="font-FZGongYHJW num">{{ item.num }}</span>
+                            <span class="text">{{ item.name }}</span>
+                        </div>
+                    </template>
+                </div>
+                <div class="hc-backup-card-box">
+                    <el-scrollbar>
+                        <div v-if="backupTabKey === 1" class="hc-backup-card-body">
+                            <div class="hc-backup-table-box">
+                                <div class="tr-left">OSS当前存储内容</div>
+                                <div class="tr-body">
+                                    <div class="tr-item">
+                                        <div class="td-name">阿里云</div>
+                                        <div class="td-item-tr">
+                                            <div class="td-item">对象最小计量大小</div>
+                                            <div class="td-item">存储时间要求</div>
+                                            <div class="td-item">数据访问特点</div>
+                                            <div class="td-item">存储空间价格</div>
+                                            <div class="td-item">数据取回费用</div>
+                                        </div>
+                                        <div class="td-item-tr">
+                                            <div class="td-item">-</div>
+                                            <div class="td-item">-</div>
+                                            <div class="td-item">-</div>
+                                            <div class="td-item">-</div>
+                                            <div class="td-item">-</div>
+                                        </div>
+                                    </div>
+                                    <div class="tr-item">
+                                        <div class="td-name">备份云</div>
+                                        <div class="td-item-tr">
+                                            <div class="td-item">对象最小计量大小</div>
+                                            <div class="td-item">存储时间要求</div>
+                                            <div class="td-item">数据访问特点</div>
+                                            <div class="td-item">存储空间价格</div>
+                                            <div class="td-item">数据取回费用</div>
+                                        </div>
+                                        <div class="td-item-tr">
+                                            <div class="td-item">-</div>
+                                            <div class="td-item">-</div>
+                                            <div class="td-item">-</div>
+                                            <div class="td-item">-</div>
+                                            <div class="td-item">-</div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="hc-backup-card-tip">
+                                <div>云存储优点:</div>
+                                <div>1、提供企业级多层次安全防护,包括服务端加密、客户端加密、防盗链、IP黑白名单、细粒度权限管控、日志审计、WORM特性等。</div>
+                                <div>多用户资源隔离机制,支持异地容灾机制。获得多项合规认证,包括SEC和FINRA 等,满足企业数据安全与合规要求。</div>
+                                <div>2、提供多种数据处理能力,如图片处理、视频截帧、文档预览、图片场景识别、人脸识别、SQL就地查询</div>
+                            </div>
+                        </div>
+                        <div v-if="backupTabKey === 2" class="hc-backup-card-body">
+                            <div class="hc-backup-card-btn">
+                                <el-button :loading="balenewDataClickLoading" hc-btn type="primary" @click="balenewDataClick">
+                                    <span>打包最新数据</span>
+                                </el-button>
+                                <el-button hc-btn type="primary" @click="downAppModalShow">
+                                    <HcIcon name="download-2" />
+                                    <span>下载客户端</span>
+                                </el-button>
+                                <el-button :loading="downUtilsClickLoading" hc-btn type="primary" @click="downUtilsClick">
+                                    <HcIcon name="download-2" />
+                                    <span>下载数据包</span>
+                                </el-button>
+                            </div>
+                            <HcTable :column="tableBasicColumn" :datas="tableBasicData" :is-index="false" is-new />
+                            <div class="hc-backup-table-box mt-5">
+                                <div class="tr-left">功能描述</div>
+                                <div class="tr-body">
+                                    <div class="tr-item">
+                                        <div class="td-name">档案存储</div>
+                                        <div class="td-item-tr">
+                                            <div class="td-item">离线存储</div>
+                                            <div class="td-item">离线导入</div>
+                                        </div>
+                                    </div>
+                                    <div class="tr-item">
+                                        <div class="td-name">档案查询</div>
+                                        <div class="td-item-tr">
+                                            <div class="td-item">多条件检索查询</div>
+                                            <div class="td-item">预览</div>
+                                            <div class="td-item">下载</div>
+                                            <div class="td-item">打印</div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="hc-backup-card-tip">
+                                <div>脱机储优点:</div>
+                                <div>1、支持为运营阶段移交整套数据。</div>
+                                <div>2、为企业单位提供本地备份的可视化工具,直接点击下载即可将整个项目数据打包下载到本地软件存储</div>
+                            </div>
+                        </div>
+                        <!-- 信息包 -->
+                        <div v-if="backupTabKey === 3" class="hc-backup-card-body">
+                            <HcTable :column="tableInfoColumn" :datas="tableInfoData" :is-index="false" is-new />
+                            <div class="hc-backup-table-box mt-5">
+                                <div class="tr-left">信息包结构</div>
+                                <div class="tr-body">
+                                    <div class="tr-item">
+                                        <div class="td-name">说明文件</div>
+                                        <div class="td-item-tr" style="display: flex; flex-direction: row;">
+                                            <div class="td-item" style="flex: 1; display: flex; align-items: center; justify-content: center;" />
+                                        </div>
+                                    </div>
+                                    <div class="tr-item">
+                                        <div class="td-name">管理元数据</div>
+                                        <div class="td-item-tr" style="border-left: none;">
+                                            <div class="td-item">项目基本信息</div>
+                                            <div class="td-item">工程造价信息</div>
+                                            <div class="td-item">单位工程信息</div>
+                                            <div class="td-item">案卷信息</div>
+                                            <div class="td-item">工程档案单位责任信息</div>
+                                        </div>
+                                        <div class="td-item-tr">
+                                            <div class="td-item" style="height:200px" />
+                                        </div>
+                                        <div class="td-item-tr" style="border-left: none;">
+                                            <div class="td-item" style="height:200px" />
+                                        </div>
+                                    </div>
+                                    <div class="tr-item">
+                                        <div class="td-name">其他</div>
+                                        <div class="td-item-tr">
+                                            <div class="td-item">案卷目录文件</div>
+                                            <div class="td-item">移交清单</div>
+                                        </div>
+                                        <div class="td-item-tr">
+                                            <div class="td-item" style="height:80px" />
+                                        </div>
+                                        <div class="td-item-tr" style="border-left: none;">
+                                            <div class="td-item" style="height:80px" />
+                                        </div>
+                                    </div>
+                                    <div class="tr-item">
+                                        <div class="td-name">案卷1</div>
+                                        <div class="td-item-tr">
+                                            <div class="td-item">卷内文件目录</div>
+                                            <div class="td-item">案卷1通用元数据</div>
+                                            <div class="td-item" style="height:240px">卷内文件</div>
+                                        </div>
+                                        <div class="td-item-tr">
+                                            <div class="td-item" style="border:none;height:80px;border-top:0" />
+                                            <div class="td-item" style="height:240px">文件1</div>
+                                        </div>
+                                        <div class="td-item-tr" style="border-left:none;">
+                                            <div class="td-item" style="border-left:none;height:80px;border-top:0" />
+                                            <div class="td-item" style="border-left:1px solid #E4E7ED">案卷1通用元数据</div>
+                                            <div class="td-item" style="border-left:1px solid #E4E7ED">案卷1通用元数据</div>
+                                            <div class="td-item" style="border-left:1px solid #E4E7ED">案卷1通用元数据</div>
+                                            <div class="td-item" style="border-left:1px solid #E4E7ED">案卷1通用元数据</div>
+                                            <div class="td-item" style="border-left:1px solid #E4E7ED">案卷1通用元数据</div>
+                                            <div class="td-item" style="border-left:1px solid #E4E7ED">案卷1通用元数据</div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="hc-backup-card-tip">
+                                <div>打包说明</div>
+                                <div>1.在线验收通过后,系统自动打包;</div>
+                                <div>2.档案馆接收档案后,系统自动推送信息包,并删除服务器中的所有数据</div>
+                            </div>
+                        </div>
+                    </el-scrollbar>
+                </div>
+            </div>
+        </hc-new-card>
+        <!-- 下载客户端 -->
+        <hc-new-dialog v-model="downAppModal" :footer="false" title="下载客户端软件" widths="54rem" @close="downAppModal = false">
+            <el-alert
+                :closable="false"
+                title="客户端软件是独立的,数据包也是独立,但数据包需要客户端软件打开才能操作。客户端软件也支持多项目(多数据包)使用。"
+                type="warning"
+                class="mb-14px"
+            />
+            <template v-for="(item, index) in downAppData" :key="index">
+                <div :class="index > 0 ? 'mt-4' : ''" class="hc-down-app-title">{{ item.name }}</div>
+                <div v-for="(items, indexs) in item.data" :key="indexs" class="hc-down-app-link-item">
+                    <div class="hc-down-app-link-type">{{ items.type }}</div>
+                    <div class="hc-down-app-link">
+                        <el-link :href="items.url">档案脱机存档-{{ items.arch }}-{{ items.version }}-安装包.{{ item.platform === 'win32' ? 'exe' : 'dmg' }}</el-link>
+                    </div>
+                    <div class="hc-down-app-time">{{ items.date }}</div>
+                </div>
+            </template>
+        </hc-new-dialog>
+    </div>
+</template>
+
+<script setup>
+import { onMounted, ref } from 'vue'
+import { useAppStore } from '~src/store'
+import backupApi from '~api/backup/backupApi.js'
+import { getLocalArchivesApp } from '~api/other'
+import { getArrValue } from 'js-fast-way'
+import { setUrlHttps } from '~uti/tools'
+//变量
+const useAppState = useAppStore()
+const projectId = ref(useAppState.getProjectId)
+const contractId = ref(useAppState.getContractId)
+const projectInfo = ref(useAppState.getProjectInfo)
+
+//渲染完成
+onMounted(() => {
+    getFileData()
+})
+
+//tab数据
+const backupTabKey = ref(1)
+const backupTabData = ref([
+    { num: 1, name: 'OSS云存储' },
+    { num: 2, name: '脱机软件存储' },
+    { num: 3, name: '信息包存储' },
+])
+const backupTabClick = (num) => {
+    backupTabKey.value = num
+}
+//下载脱机载体工具
+const downUtilsClickLoading = ref(false)
+const downFileUrl = ref('')
+const getFileData = async () => {
+    const { error, data } = await backupApi.DownloadVersionInfo({
+        projectId: projectId.value,
+    })
+    if (!error) {
+        downFileUrl.value = data?.fileUrl
+        tableBasicData.value[0].size = data?.fileSize
+        tableBasicData.value[0].num = data?.fileSize
+        tableBasicData.value[0].baledate = data?.uploadDate
+    } else {
+        downUtilsClickLoading.value = false
+    }
+}
+
+const downUtilsClick = () => {
+    if (downFileUrl.value) {
+        //toPdfPage(downFileUrl.value)
+        //window.open(downFileUrl.value, '_blank')
+        console.log(downFileUrl.value, 'setUrlHttps(downFileUrl.value)')
+        // console.log(setUrlHttps(downFileUrl.value), 'setUrlHttps(downFileUrl.value)')
+        window.open( setUrlHttps(downFileUrl.value), '_blank')
+    }
+}
+
+//打包最新数据
+const balenewDataClickLoading = ref(false)
+const balenewDataClick = async () => {
+    balenewDataClickLoading.value = true
+    const { error, response, res, data } = await backupApi.getpackData({
+        projectId: projectId.value,
+
+    })
+    if (!error) {
+        window.$message?.success(data)
+        balenewDataClickLoading.value = false
+    } else {
+        balenewDataClickLoading.value = false
+    }
+
+}
+
+//表格
+const tableBasicColumn = [
+    { key: 'name', name: '软件名称', align: 'center' },
+    { key: 'type', name: '软件打开方式', align: 'center' },
+    { key: 'size', name: '软件包大小', align: 'center' },
+    { key: 'num', name: '目前存储量', align: 'center' },
+    { key: 'baledate', name: '打包日期', align: 'center' },
+]
+const tableBasicData = ref([
+    { name: '工程档案离线存储', type: '桌面、U盘、硬盘、光盘皆可支持安装存放', size: '2.3G', num: '', baledate: '' },
+])
+
+//下载客户端
+const downAppModal = ref(false)
+const downAppData = ref([])
+const downAppModalShow = async () => {
+    const { data } = await getLocalArchivesApp()
+    downAppData.value = getArrValue(data)
+    downAppModal.value = true
+}
+
+//信息报
+const tableInfoColumn = ref([
+    { key: 'size', name: '信息包大小', align: 'center' },
+    { key: 'baledate', name: '打包时间', align: 'center' },
+])
+const tableInfoData = ref([
+{ size: '2.3G', baledate: '2025-04-16 16:45:25' },
+])
+</script>
+
+<style lang="scss" scoped>
+@import '~style/custody/scoped/backup.scss';
+</style>
+
+<style lang="scss">
+.hc-backup-card-body .hc-table-ref-box {
+    border: 0;
+}
+@import '~src/styles/theme/custody/backup.scss';
+</style>

+ 140 - 113
src/views/using/borrow/ledger.vue

@@ -3,30 +3,30 @@
         <template #tree>
             <HcTree
                 :auto-expand-keys="treeAutoExpandKeys" :contract-id="contractId" :project-id="projectId"
-                @node-tap="nodeElTreeClick" @menu-tap="ElTreeMenuClick"
-                @node-loading="treeNodeLoading"
+                @node-tap="nodeElTreeClick" @node-loading="treeNodeLoading" @menu-tap="ElTreeMenuClick"
             />
         </template>
         <hc-new-card>
             <template #header>
-                <div class="ml-4 w-40">
-                    <el-select v-model="searchForm.storageTime" clearable placeholder="标段">
-                        <el-option v-for="item in sectionData" :key="item.value" :label="item.label" :value="item.value" />
+                <div class="w-40">
+                    <el-select v-model="searchForm.person" clearable placeholder="借阅人">
+                        <el-option v-for="item in personData" :key="item.value" :label="item.label" :value="item.value" />
                     </el-select>
                 </div>
                 <div class="ml-3 w-40">
-                    <el-select v-model="searchForm.secretLevel" clearable placeholder="移交人">
-                        <el-option v-for="item in transferornData" :key="item.value" :label="item.label" :value="item.value" />
+                    <el-select v-model="searchForm.state" clearable placeholder="借阅状态">
+                        <el-option v-for="item in stateData" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
                     </el-select>
-                </div>
+                </div>  
                 <div class="ml-3 w-64">
-                    <HcDatePicker :dates="betweenTime" clearable @change="betweenTimeUpdate" />
+                    <HcDatePicker
+                        :dates="betweenTime" clearable start-placeholder="借阅起始时间" end-placeholder="借阅截止时间"
+                        @change="betweenTimeUpdate"
+                    />
                 </div>
-                <div class="ml-3 w-56">
-                    <el-input v-model="searchForm.name" clearable block placeholder="请输入登记表/清单名称" @keyup="keyUpEvent" />
+                <div class="ml-3 w-64">
+                    <HcDatePicker :dates="betweenTime1" clearable start-placeholder="归还起始时间" end-placeholder="归还截止时间" @change="betweenTimeUpdate1" />
                 </div>
-              
-               
                 <div class="ml-2">
                     <el-button type="primary" @click="searchClick">
                         <HcIcon name="search-2" />
@@ -34,20 +34,19 @@
                     </el-button>
                 </div>
             </template>
-          
-            <div :class="tableFileShow ? 'file-table' : ''" class="body">
-                <div class="hc-c-table-box">
-                    <HcTable
-                        ref="tableRef" :check-style="{ width: 29 }" :column="tableColumn" :datas="tableData"
-                        :index-style="{ width: 70 }" :is-arr-index="false" :loading="tableLoading" :ui="hoverHand ? 'hover-hand' : ''"
-                        is-new is-current-row
-                    >
-                        <template #index="{ index }">
-                            <span>{{ index + 1 }}</span>
-                        </template>
-                    </HcTable>
-                </div>
-            </div>
+            <HcTable
+                ref="tableRef" :check-style="{ width: 29 }" :column="tableColumn" :datas="tableData"
+                :index-style="{ width: 60 }" :loading="tableLoading" is-new
+            >
+                <template #name="{ row }">
+                    <span class="text-link" @click="viewPdf(row.id)">{{ row?.name }}</span>
+                </template>
+                <template #state="{ row }">
+                    <el-tag v-if="row.state === '待审批'" effect="dark" type="warning">待审批</el-tag>
+                    <el-tag v-if="row.state === '借阅中'" effect="dark" type="success">借阅中</el-tag>
+                    <el-tag v-if="row.state === '已归还'" effect="dark" type="info">已归还</el-tag>
+                </template>
+            </HcTable>
             <template #action>
                 <HcPages :pages="searchForm" :sizes="[20, 50, 100, 200, 300, 500]" @change="pageChange" />
             </template>
@@ -58,107 +57,74 @@
 <script setup>
 import { onMounted, ref, watch } from 'vue'
 import { useAppStore } from '~src/store'
-import HcTree from '~src/components/tree/hc-tree.vue'
-import { getArrValue } from 'js-fast-way'
-
-
-import tuningApi from '~api/archiveConfig/tuning.js'
 
+import HcTree from '~src/components/tree/hc-tree.vue'
 
 import { getStoreValue, setStoreValue } from '~src/utils/storage'
+import { getArrValue, useClick } from 'js-fast-way'
+import tuningApi from '~api/archiveConfig/tuning.js'
 import { toPdfPage } from '~uti/btn-auth'
-import tasksApi from '~api/tasks/data'
-
 //变量
 const useAppState = useAppStore()
 const projectId = ref(useAppState.getProjectId)
 const contractId = ref(useAppState.getContractId)
 const projectInfo = ref(useAppState.getProjectInfo)
 const isCollapse = ref(useAppState.getCollapse)
-const hoverHand = ref(true)
 
 //监听
-watch(() => [
-    useAppState.getCollapse,
-], ([Collapse]) => {
+watch(() => useAppState.getCollapse, (Collapse) => {
     isCollapse.value = Collapse
 })
 
 //渲染完成
-onMounted(() => {
- 
-    setTableColumns()
+onMounted(async () => {
   
-
+   
+ 
 })
 
-
-
 //树加载
 const treeLoading = ref(true)
 const treeNodeLoading = () => {
     treeLoading.value = false
 }
-
-//项目树被点击
-
-// const isBuiltDrawing = ref(0)
-//自动展开缓存
-const treeAutoExpandKeys = ref(getStoreValue('turningExpandKeys') || [])
-const nodeElTreeClick = ({ node, data, keys, key }) => {
-    //缓存展开的节点
-    setStoreValue('turningExpandKeys', keys)
-    treeAutoExpandKeys.value = keys || []
-    console.log('点击', data)
-    searchForm.value.total = 0
-    searchForm.value.current = 1
-    searchForm.value.size = 20
-    searchForm.value.nodeIds = data.id || ''
-    getTableData()
-}
-//树菜单被点击
-const ElTreeMenuClick = async ({ key, node, data, keys }) => {
-    setStoreValue('turningExpandKeys', keys)
-    treeAutoExpandKeys.value = keys || []
-}
-
+const personData = ref([
+   { label: '张三', value: '张三' },
+   { label: '李四', value: '李四' },
+])
+const stateData = ref([
+    { dictKey: '待审批', dictValue: '待审批' },
+    { dictKey: '借阅中', dictValue: '借阅中' },
+    { dictKey: '已归还', dictValue: '已归还' },
+])
+//搜索表单
+const searchForm = ref({
+    contractId: null, type: null, person: null, betweenTime: null, state: null, startTime: null, endTime: null, nodeIds: null,
+    current: 1, size: 20, total: 0, startTime1: null, endTime1: null,
+})
 //日期时间被选择
 const betweenTime = ref(null)
+
 const betweenTimeUpdate = ({ val, arr }) => {
     betweenTime.value = arr
-    searchForm.value.startTimeValue = val['start']
-    searchForm.value.endTimeValue = val['end']
+    searchForm.value.startTime = val['start']
+    searchForm.value.endTime = val['end']
 }
-//标段
-const sectionData = ref([
-    { label: 'T.J01标', value: '3' },
-    { label: 'T.J02标', value: '2' },
-    { label: 'T.J03标', value: '1' },
-])
-const transferornData = ref([
-    { label: '张三', value: '3' },
-    { label: '李四', value: '2' },
-    { label: '王五', value: '1' },
-])
-
+const betweenTime1 = ref(null)
+const betweenTimeUpdate1 = ({ val, arr }) => {
+    betweenTime1.value = arr
+    searchForm.value.startTime1 = val['start']
+    searchForm.value.endTime1 = val['end']
+}
+//树相关的变量
+const primaryKeyId = ref('')
 
 
-//搜索表单
-const searchForm = ref({
-    contractId: null, storageTime:'', secretLevel:'', name:'', startTimeValue: '', endTimeValue: '',
-    current: 1, size: 20, total: 0,
-})
-const searchClick = ()=>{
+//搜索
+const searchClick = () => {
+    searchForm.value.current = 1
     getTableData()
 }
-//回车搜索
-const keyUpEvent = (e) => {
-    if (e.key === 'Enter') {
-        searchForm.value.current = 1
-        getTableData()
-    }
-}
-
 
 //分页被点击
 const pageChange = ({ current, size }) => {
@@ -169,26 +135,24 @@ const pageChange = ({ current, size }) => {
 
 //表格数据
 const tableRef = ref(null)
-
-const tableColumn = ref([])
-//设置表头
-const setTableColumns = () => {
-    tableColumn.value = [
-        { key: 'fileNumber', name: '标段' },
-        { key: 'name', name: '移交人', width: 300 },
-        { key: 'storageTimeValue', name: '移交时间' },
-        { key: 'secretLevelValue', name: '登记表' },
-        { key: 'pageN', name: '清单' },
-     
-    ]
-}
+const tableColumn = ref([
+    { key: 'person', name: '借阅人', width: 120 },
+    { key: 'name', name: '借阅申请单', width: 400 },
+    { key: 'time', name: '借阅时间' },
+    { key: 'state', name: '借阅状态', width: 120 },
+    { key: 'backTime', name: '归还时间' },
+])
 const tableData = ref([
-    { fileNumber: 'T.J01标', name: '张三', storageTimeValue: '2022-06-20 14:52:30', secretLevelValue: '电子档案移交接收登记表(TJ01标)', pageN: '电子档案移交接收登记表(TJ01标)' },
+    { id: 1, person: '张三', name: '借阅申请单', time: '2025-04-14:26:59至2025-05-08 14:26:59', state: '待审批', backTime: '2025-04-14 14:26:59' },
+    { id: 2, person: '李四', name: '借阅申请单', time: '2025-04-14:26:59至2025-05-08 14:26:59', state: '借阅中', backTime: '2025-04-14 14:26:59' },
+    { id: 3, person: '王五', name: '借阅申请单', time: '2025-04-814:26:59至2025-05-08 14:26:59', state: '已归还', backTime: '2025-04-14 14:26:59' },
+   
+    
 ])
+
 //获取数据
 const tableLoading = ref(false)
 const getTableData = async () => {
- 
     // tableLoading.value = true
     // const { error, code, data } = await tuningApi.pageByArchive({
     //     ...searchForm.value,
@@ -198,8 +162,8 @@ const getTableData = async () => {
     // })
     // tableLoading.value = false
     // if (!error && code === 200) {
-    //     tableData.value = getArrValue(data?.records)
-    //     searchForm.value.total = data?.total || 0
+    //     tableData.value = getArrValue(data['records'])
+    //     searchForm.value.total = data['total'] || 0
     // } else {
     //     tableData.value = []
     //     searchForm.value.total = 0
@@ -208,6 +172,69 @@ const getTableData = async () => {
 
 
 
-//设置表头
+
+
+
+
+
+
+//项目树被点击
+const treeAutoExpandKeys = ref(getStoreValue('rollingExpandKeys') || [])
+const nodeElTreeClick = ({ node, data, keys, key }) => {
+    console.log('点击', data)
+    searchForm.value.total = 0
+    searchForm.value.current = 1
+    searchForm.value.size = 20
+    searchForm.value.nodeIds = data.id || ''
+    getTableData()
+    //缓存展开的节点
+    setStoreValue('rollingExpandKeys', keys)
+    treeAutoExpandKeys.value = keys || []
+}
+//树菜单被点击
+const ElTreeMenuClick = async ({ key, node, data, keys }) => {
+    setStoreValue('rollingExpandKeys', keys)
+    treeAutoExpandKeys.value = keys || []
+
+}
+//预览pdf
+const viewPdf = async (id) => {
+    // window.$message?.info('预览案卷需要合并pdf,需要一点时间')
+    // const { error, code, data, msg } = await tuningApi.printArchive({
+    //     id: id,
+    // })
+    // if (!error && code === 200) {
+    //     if (data) {
+    //         toPdfPage(data)
+    //         //window.open(data, '_blank')
+    //     } else {
+    //         window.$message?.warning('文件不存在')
+    //     }
+
+    // } else {
+    //     window.$message?.warning(msg)
+    // }
+    let data = 'https://xinan1.zos.ctyun.cn/blade-oss-chongqing/upload/20250320/3aae13a2e19494190fa5d5a569fa9a46.pdf'
+    toPdfPage(data)
+}
+//更新立卷
+
+
+
+
+
+
+
+//循环请求接口
 </script>
 
+<style lang="scss" scoped>
+.hc-card-header-table-title {
+    font-size: 1.125rem;
+    line-height: 1.75rem;
+}
+.demo-progress .el-progress--line {
+    width: 350px;
+    margin-right: 15px;
+}
+</style>

+ 4 - 4
yarn.lock

@@ -2164,10 +2164,10 @@ has-flag@^4.0.0:
   resolved "http://39.108.216.210:9000/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
   integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
 
-hc-vue3-ui@^4.5.3:
-  version "4.5.3"
-  resolved "http://219.151.185.227:9000/hc-vue3-ui/-/hc-vue3-ui-4.5.3.tgz#de054eb645776fc0c28cd4e3cbf5f51abed4b96a"
-  integrity sha512-+LtP9kjayReZnDAfCNRBW/Ok3FIYkHPpqDuinVKjX/rMtih31f2AL5Bi/ZyrDXUBRieQVfZLi9WAcyQ1dcNV1w==
+hc-vue3-ui@^4.5.4:
+  version "4.5.4"
+  resolved "http://219.151.185.227:9000/hc-vue3-ui/-/hc-vue3-ui-4.5.4.tgz#8d70d3180399761b1fa3ab859bb3d696e8c3390b"
+  integrity sha512-gUv8Ji8KwKmD8agPfBPTh+TjXXsGKmiquiWceFrd2CpaxKhhcuSq5Xm5EEM4c2yUaIm5kDmqXPbY7sAHvMpN3w==
   dependencies:
     axios "^1.7.7"
     dayjs "^1.11.13"