Browse Source

增加菜单和修改布局

ZaiZai 1 year ago
parent
commit
129c68be8b
57 changed files with 1212 additions and 359 deletions
  1. 31 222
      src/layout/index.vue
  2. 45 135
      src/layout/layout.scss
  3. 0 2
      src/layout/modules/UserInfoBar.vue
  4. 139 0
      src/layout/modules/cascader.vue
  5. 477 0
      src/router/modules/base.js
  6. 10 0
      src/views/alter/admin/order.vue
  7. 10 0
      src/views/alter/admin/plan.vue
  8. 10 0
      src/views/alter/admin/pre.vue
  9. 10 0
      src/views/alter/admin/zero.vue
  10. 10 0
      src/views/alter/collection/scan.vue
  11. 10 0
      src/views/alter/ledgers/count.vue
  12. 10 0
      src/views/alter/ledgers/cover.vue
  13. 10 0
      src/views/alter/ledgers/ledger.vue
  14. 10 0
      src/views/alter/ledgers/pre-ledger.vue
  15. 10 0
      src/views/alter/ledgers/table.vue
  16. 10 0
      src/views/alter/ledgers/table2.vue
  17. 10 0
      src/views/debit-pay/admin/apply.vue
  18. 10 0
      src/views/debit-pay/admin/certificate.vue
  19. 10 0
      src/views/debit-pay/admin/middlepay.vue
  20. 10 0
      src/views/debit-pay/admin/periods.vue
  21. 10 0
      src/views/debit-pay/ledgers/collect.vue
  22. 10 0
      src/views/debit-pay/ledgers/debit.vue
  23. 10 0
      src/views/debit-pay/ledgers/detail.vue
  24. 10 0
      src/views/debit-pay/ledgers/payment.vue
  25. 10 0
      src/views/debit-pay/ledgers/section.vue
  26. 10 0
      src/views/debit-pay/ledgers/standards.vue
  27. 10 0
      src/views/debit-pay/material/book.vue
  28. 10 0
      src/views/debit-pay/material/contract.vue
  29. 10 0
      src/views/debit-pay/material/order.vue
  30. 10 0
      src/views/debit-pay/material/periods.vue
  31. 10 0
      src/views/debit-pay/project/certificate.vue
  32. 10 0
      src/views/debit-pay/project/pay.vue
  33. 10 0
      src/views/debit-pay/start-work/book.vue
  34. 10 0
      src/views/debit-pay/start-work/order.vue
  35. 10 0
      src/views/debit-pay/start-work/period.vue
  36. 10 0
      src/views/periods/admin/certificate.vue
  37. 10 0
      src/views/periods/admin/measure.vue
  38. 10 0
      src/views/periods/admin/middle.vue
  39. 10 0
      src/views/periods/contract-admin/apply.vue
  40. 10 0
      src/views/periods/contract-admin/certificate.vue
  41. 10 0
      src/views/periods/contract-admin/phase.vue
  42. 10 0
      src/views/periods/contract-book/ledgers.vue
  43. 10 0
      src/views/periods/ledgers/details.vue
  44. 10 0
      src/views/periods/ledgers/pay.vue
  45. 10 0
      src/views/periods/ledgers/payment.vue
  46. 10 0
      src/views/periods/ledgers/section.vue
  47. 10 0
      src/views/periods/ledgers/standards.vue
  48. 10 0
      src/views/periods/ledgers/summary.vue
  49. 10 0
      src/views/periods/material/book.vue
  50. 10 0
      src/views/periods/material/contract.vue
  51. 10 0
      src/views/periods/material/order.vue
  52. 10 0
      src/views/periods/material/phase.vue
  53. 10 0
      src/views/periods/project/certificate.vue
  54. 10 0
      src/views/periods/project/pay.vue
  55. 10 0
      src/views/periods/start-work/book.vue
  56. 10 0
      src/views/periods/start-work/order.vue
  57. 10 0
      src/views/periods/start-work/phase.vue

+ 31 - 222
src/layout/index.vue

@@ -24,17 +24,7 @@
                 <div class="hc-header-box">
                     <div id="hc-header-page-name" class="hc-header-page-name">菜单</div>
                     <div class="hc-header-content">
-                        <div class="hc-header-cascader-box">
-                            <div class="project-name-box">{{ projectInfo.projectAlias }} / {{ contractInfo.name }}</div>
-                            <el-cascader
-                                ref="ElCascaderRef" v-model="projectValue"
-                                :clearable="userInfo?.role_id === '1123598816738675201'"
-                                :filterable="userInfo?.role_id === '1123598816738675201'"
-                                :options="projectContract"
-                                :props="projectProps" placeholder="请选择项目"
-                                @change="projectContractChange"
-                            />
-                        </div>
+                        <HcCascader @change="cascaderChange" />
                         <HelpInfoBar />
                         <ConfigBar />
                         <UserInfoBar />
@@ -62,13 +52,12 @@ import { nextTick, onMounted, ref, watch } from 'vue'
 import { useRoute, useRouter } from 'vue-router'
 import { useAppStore } from '~src/store'
 import MenuBar from './modules/MenuBar.vue'
+import HcCascader from './modules/cascader.vue'
 import HelpInfoBar from './modules/HelpInfoBar.vue'
 import UserInfoBar from './modules/UserInfoBar.vue'
 import ConfigBar from './modules/ConfigBar.vue'
 import TopMenuBar from './modules/TopMenuBar.vue'
-import { initButtons, initProjectContract } from '~sto/app'
-import website from '~src/config/index'
-import { setImageColorStyle } from 'js-fast-way'
+import { getArrValue, setImageColorStyle } from 'js-fast-way'
 import { setAppName } from '~uti/tools'
 
 //初始组合式
@@ -77,7 +66,6 @@ const useRoutes = useRoute()
 const useAppState = useAppStore()
 
 //路由参数
-
 const reloadRouter = ref(true)
 const BarMenuKey = useRoutes?.name ?? 'home-index'
 const BarMenuTitle = useRoutes?.meta?.title ?? ''
@@ -91,47 +79,31 @@ const AppColor = ref(useAppState.getColor)
 //顶部菜单数据和相关处理
 const MenuBarKey = ref(BarMenuKey)
 const RoutesTitle = ref(BarMenuTitle)
-const MenuBarData = ref(useAppState.getMenus)
 const isCollapse = ref(useAppState.getCollapse)
-const userInfo = ref(useAppState.getUserInfo)
-
-//项目合同段
-const projectInfo = ref({})
-const contractInfo = ref({})
-const projectContract = ref([])
-const projectValue = ref(null)
-const projectProps = ref({
-    value: 'id',
-    label: 'projectAlias',
-    children: 'contractInfoList',
-})
 
 //渲染完成
 onMounted(() => {
-    initButtons()
-    initProjectContract()
-    const info = useAppState.getProjectContract || []
-    projectContractData(info)
-    useAppState.barMenuName = BarMenuTitle
-    //setInitSocket()
     setLogoImageColor()
+    setMenuBarData(useAppState.getMenus)
+    useAppState.barMenuName = BarMenuTitle
     setLogoNameColor(useAppState.getTheme)
 })
 
+//监听
+watch(() => useAppState.getMenus, (val) => {
+    setMenuBarData(val)
+})
+
 //监听
 watch(() => [
-    useAppState.getProjectContract,
-    useAppState.getMenus,
     useRoutes?.name,
     useRoutes?.meta?.title,
     useAppState.getCollapse,
-], ([projectContractArr, userMenus, RouteName, RouteTitle, collapse]) => {
-    MenuBarData.value = userMenus
+], ([RouteName, RouteTitle, collapse]) => {
     MenuBarKey.value = RouteName ?? 'home-index'
     RoutesTitle.value = RouteTitle ?? ''
     isCollapse.value = collapse
     setIsCollapse(MenuBarKey.value)
-    projectContractData(projectContractArr || [])
     useAppState.barMenuName = RouteTitle ?? ''
     setAppName(appTitle.value)
 })
@@ -162,8 +134,7 @@ const setLogoNameColor = (theme) => {
             filter = 'invert(0%) sepia(100%) saturate(0%) hue-rotate(235deg) brightness(107%) contrast(103%)'
         }
         document.getElementById('logo-name').style.filter = filter
-    } catch {
-    }
+    } catch { /* empty */ }
 }
 
 //设置折叠
@@ -174,88 +145,22 @@ const setIsCollapse = (key) => {
     }
 }
 
+
 //是否折叠
 const collapseChange = (bool) => {
     isCollapse.value = bool
     useAppState.setCollapse(bool)
 }
 
-//处理项目合同段数据
-const projectContractData = (projectContractData) => {
-    if (projectContractData.length > 0) {
-        //处理别名
-        projectContractData.forEach(item => {
-            let contractArr = item['contractInfoList'] || []
-            contractArr.forEach(items => {
-                items['projectAlias'] = items['name']
-            })
-        })
-        //处理其他数据
-        projectContract.value = projectContractData
-        const projectId = useAppState.getProjectId //项目ID
-        const contractId = useAppState.getContractId //合同段ID
-        const UserProjectInfo = useAppState.getProjectInfo
-        const UserContractInfo = useAppState.getContractInfo
-        //查询缓存的选中ID是否存在
-        const pid = projectContractData.findIndex(item => Number(item.id) === Number(projectId))
-        const contractList = projectContractData[pid]?.contractInfoList || []
-        const cid = contractList.findIndex(item => Number(item.id) === Number(contractId))
-        //如果缓存的选中ID不存在
-        if (cid === -1) {
-            //取项目数组中的第一个数据
-            let letProjectInfo = projectContractData[0]
-            let contractInfoList = letProjectInfo?.contractInfoList || []
-            let letContractInfo = contractInfoList[0] || {}
-            projectValue.value = letContractInfo?.id
-            projectInfo.value = letProjectInfo
-            contractInfo.value = letContractInfo
-            //设置缓存
-            useAppState.setProjectInfo(letProjectInfo)
-            useAppState.setContractInfo(letContractInfo)
-            useAppState.setProjectId(letProjectInfo?.id)
-            useAppState.setContractId(letContractInfo?.id)
-            //发送消息
-            //socketSend(letProjectInfo?.id + ',' + letContractInfo?.id)
-        } else {
-            projectValue.value = String(contractId)
-            projectInfo.value = UserProjectInfo
-            contractInfo.value = UserContractInfo
-            //发送消息
-            //socketSend(projectId + ',' + contractId)
-        }
-    } else {
-        projectContract.value = []
-        projectValue.value = null
-        projectInfo.value = {}
-        contractInfo.value = {}
-    }
+//菜单数据
+const topMenuData = ref([])
+const MenuBarData = ref([])
+const setMenuBarData = (menu) => {
+    topMenuData.value = getArrValue(menu)
+    console.log(menu)
+    //MenuBarData.value = userMenus
 }
 
-//项目被选择
-const ElCascaderRef = ref(null)
-const projectContractChange = (val) => {
-    if (val) {
-        const Nodes = ElCascaderRef.value.getCheckedNodes()
-        const UserProjectInfo = Nodes[0].parent.data
-        const UserContractInfo = Nodes[0].data
-        //缓存项目数据
-        useAppState.setProjectId(val[0])
-        useAppState.setContractId(val[1])
-        useAppState.setProjectInfo(UserProjectInfo)
-        useAppState.setContractInfo(UserContractInfo)
-        //更改界面更新
-        projectInfo.value = UserProjectInfo
-        contractInfo.value = UserContractInfo
-        window.$message?.info('切换了项目,数据更新中')
-        //发送消息
-        //socketSend(val[0] + ',' + val[1])
-        //刷新路由
-        reloadRouter.value = false
-        nextTick(() => {
-            reloadRouter.value = true
-        })
-    }
-}
 
 //菜单被点击
 const MenuBarChange = (item) => {
@@ -269,119 +174,23 @@ const logoClick = () => {
     router.push({ name: 'home-index' })
 }
 
-//消息数量
-const msgCount = ref({
-    allCount: 0,
-    taskCount: 0,
-    messageCount: 0,
-    messageCount_1: 0,
-    messageCount_2: 0,
-    messageCount_3: 0,
-    messageCount_4: 0,
-    messageCount_5: 0,
-})
-
-//推送系统
-let socket
-const setInitSocket = () => {
-    const user_id = userInfo.value.user_id
-    socket = new WebSocket(website.socket + user_id)
-    try {
-        socket.onopen = function (evt) {
-            console.log('websocket链接成功')
-        }
-        socket.onclose = function (evt) {
-            console.log('websocket连接已断开')
-        }
-        socket.onmessage = function ({ data }) {
-            if (data) {
-                msgCount.value = JSON.parse(data)
-            }
-            console.log(data, '消息信息')
-        }
-        socket.onerror = function ({ data }) {
-            console.log('发生错误:', data)
-        }
-    } catch {
-    }
+//项目被改变
+const cascaderChange = () => {
+    //刷新路由
+    reloadRouter.value = false
+    nextTick(() => {
+        reloadRouter.value = true
+    })
 }
 
-//发送消息
-const socketSend = (msg) => {
-    try {
-        if (socket) {
-            socket.send(msg)
-        } else {
-            setTimeout(() => {
-                socket.send(msg)
-            }, 1000)
-        }
-    } catch {
-    }
-}
+//消息数量
+const msgCount = ref({})
 </script>
 
 <style lang="scss" scoped>
-@import "./layout.scss";
+@import "./layout.scoped.scss";
 </style>
 
 <style lang="scss">
-.hc-layout-box .hc-container-view {
-    .hc-header-view .hc-header-content .hc-header-cascader-box {
-        .el-cascader {
-            width: 100%;
-        }
-        .el-cascader .el-input .el-input__wrapper {
-            padding: 4px 15px;
-            border: 1px solid #00000000;
-            border-radius: 100px;
-            background: #f1f5f8;
-            color: #202532;
-            box-shadow: var(--hc-shadow);
-            .el-input__inner, .el-input__suffix {
-                color: #202532;
-            }
-        }
-        .el-cascader .el-input.is-focus .el-input__wrapper {
-            box-shadow: 4px 4px 8px 0 rgba(54, 92, 167, 0.15), -4px -4px 8px 0px #ffffff;
-        }
-        .el-cascader .el-input .icon-arrow-down {
-            font-size: 18px;
-            font-weight: bold;
-        }
-    }
-    &.home {
-        .hc-header-view .hc-header-content .hc-header-cascader-box {
-            .el-cascader .el-input .el-input__wrapper {
-                background-color: #00000000;
-                border: 1px solid white;
-                box-shadow: initial;
-                .el-input__inner, .el-input__suffix {
-                    color: white;
-                }
-            }
-            .el-cascader .el-input.is-focus .el-input__wrapper {
-                box-shadow: initial;
-            }
-        }
-        .hc-header-view .hc-header-top-menu-bar {
-            padding-left: 0;
-            .hc-top-menu-bar .bar-menu-content .bar-menu-btn {
-                background: rgba(255, 255, 255, .2);
-                border-color: rgba(255, 255, 255, .2);
-                color: rgba(255, 255, 255, .7);
-                backdrop-filter: blur(20px);
-                -webkit-backdrop-filter: blur(20px);
-                &:hover:not([class*='cur']) {
-                    background: var(--el-color-primary-light-9);
-                    color: #838791;
-                }
-                &:active:not([class*='cur']) {
-                    background: var(--el-color-primary-light-8);
-                    color: #838791;
-                }
-            }
-        }
-    }
-}
+@import "./layout.scss";
 </style>

+ 45 - 135
src/layout/layout.scss

@@ -1,148 +1,58 @@
-.hc-layout-box {
-    position: relative;
-    height: 100vh;
-    width: 100%;
-    .hc-aside-box {
-        position: relative;
-        color: #838791;
-        background: #f1f5f8;
-        transition: 0.2s;
-        border-radius: 0;
-        z-index: 1;
-        box-shadow: -2px 0 10px 0 rgba(32, 37, 50, 0.03), 0 10px 21px 20px rgba(32, 37, 50, 0.03);
-        .hc-aside-logo-box {
-            position: relative;
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            transition: opacity 0.3s;
-            cursor: pointer;
-            margin: 32px 0;
-            left: -10px;
-            #logo-icon {
-                height: 35px;
-                width: 35px;
-            }
-            #logo-name {
-                height: 40px;
-                margin-left: 5px;
-            }
-            &:hover {
-                opacity: .8;
-            }
-        }
-        .hc-aside-menu-box {
-            position: relative;
-            height: calc(100% - 216px);
+.hc-layout-box .hc-container-view {
+    .hc-header-view .hc-header-content .hc-header-cascader-box {
+        .el-cascader {
             width: 100%;
-            overflow: hidden;
-            user-select: none;
         }
-        .hc-aside-bar-box {
-            position: relative;
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            padding: 24px 0;
-            margin-top: 24px;
-            transition: 0.2s;
-            &:before {
-                position: absolute;
-                content: '';
-                top: 0;
-                width: 100%;
-                height: 1px;
-                background-image: linear-gradient(90deg, rgba(102, 102, 102, 0.00) 11%, #dbe8f3 35%, #dbe8f3 64%, rgba(102, 102, 102, 0.00) 86%);
-            }
-            div {
-                position: relative;
-                width: 40px;
-                height: 40px;
-                display: flex;
-                justify-content: center;
-                align-items: center;
-                font-size: 26px;
-                transition: 0.1s;
-                &.active {
-                    color: white;
-                    background: var(--el-color-primary);
-                    border-radius: 6px;
-                    box-shadow: 3px 2px 8px 0 var(--hc-shadow-color-5);
-                }
-                &:not(.active) {
-                    cursor: pointer;
-                    &:hover {
-                        color: var(--el-color-primary);
-                    }
-                }
-                & + div {
-                    margin-left: 26px;
-                }
+        .el-cascader .el-input .el-input__wrapper {
+            padding: 4px 15px;
+            border: 1px solid #00000000;
+            border-radius: 100px;
+            background: #f1f5f8;
+            color: #202532;
+            box-shadow: var(--hc-shadow);
+            .el-input__inner, .el-input__suffix {
+                color: #202532;
             }
         }
-        &.is-collapse .hc-aside-logo-box {
-            left: initial;
+        .el-cascader .el-input.is-focus .el-input__wrapper {
+            box-shadow: 4px 4px 8px 0 rgba(54, 92, 167, 0.15), -4px -4px 8px 0px #ffffff;
+        }
+        .el-cascader .el-input .icon-arrow-down {
+            font-size: 18px;
+            font-weight: bold;
         }
     }
-    .hc-container-view {
-        position: relative;
-        z-index: 1;
-        .hc-header-view {
-            position: relative;
-            --el-header-padding: 0;
-            --el-header-height: 111px;
-            .hc-header-box {
-                position: relative;
-                display: flex;
-                align-items: center;
-                flex-direction: row;
-                padding: 12px 20px;
-                .hc-header-page-name {
-                    position: relative;
-                    color: #cccccc;
-                    font-size: 22px;
-                    display: flex;
-                    align-items: center;
-                    flex: 1;
-                }
-                .hc-header-content {
-                    position: relative;
-                    text-align: right;
-                    display: flex;
-                    align-items: center;
-                    justify-content: flex-end;
-                    max-width: 50%;
-                    .hc-header-cascader-box {
-                        position: relative;
-                        margin-right: 30px;
-                        border-radius: 100px;
-                        flex: 1;
-                        .project-name-box {
-                            padding-right: 55px;
-                            position: relative;
-                            visibility: hidden;
-                            z-index: -1;
-                            height: 1px;
-                        }
-                    }
+    &.home {
+        .hc-header-view .hc-header-content .hc-header-cascader-box {
+            .el-cascader .el-input .el-input__wrapper {
+                background-color: #00000000;
+                border: 1px solid white;
+                box-shadow: initial;
+                .el-input__inner, .el-input__suffix {
+                    color: white;
                 }
             }
-            .hc-header-top-menu-bar {
-                position: relative;
-                display: flex;
-                align-items: center;
-                padding: 6px 20px;
-                overflow: hidden;
-                border-top: 1px solid #ebeaea;
-                border-bottom: 1px solid #ebeaea;
+            .el-cascader .el-input.is-focus .el-input__wrapper {
+                box-shadow: initial;
             }
         }
-        .hc-main-box {
-            position: relative;
-            overflow: hidden;
-            height: 100%;
-            --el-main-padding: 24px;
+        .hc-header-view .hc-header-top-menu-bar {
+            padding-left: 0;
+            .hc-top-menu-bar .bar-menu-content .bar-menu-btn {
+                background: rgba(255, 255, 255, .2);
+                border-color: rgba(255, 255, 255, .2);
+                color: rgba(255, 255, 255, .7);
+                backdrop-filter: blur(20px);
+                -webkit-backdrop-filter: blur(20px);
+                &:hover:not([class*='cur']) {
+                    background: var(--el-color-primary-light-9);
+                    color: #838791;
+                }
+                &:active:not([class*='cur']) {
+                    background: var(--el-color-primary-light-8);
+                    color: #838791;
+                }
+            }
         }
     }
 }
-

+ 0 - 2
src/layout/modules/UserInfoBar.vue

@@ -28,8 +28,6 @@ import { LogOut, RefreshToken } from '~sto/user'
 import { getStoreValue } from '~src/utils/storage'
 import { calcDate, isNullES } from 'js-fast-way'
 
-//事件
-const emit = defineEmits(['change'])
 //变量
 const router = useRouter()
 const userStore = useAppStore()

+ 139 - 0
src/layout/modules/cascader.vue

@@ -0,0 +1,139 @@
+<template>
+    <div class="hc-header-cascader-box">
+        <div class="project-name-box">{{ projectInfo.projectAlias }} / {{ contractInfo.name }}</div>
+        <el-cascader
+            ref="ElCascaderRef" v-model="projectValue"
+            :clearable="userInfo?.role_id === '1123598816738675201'"
+            :filterable="userInfo?.role_id === '1123598816738675201'"
+            :options="projectContract"
+            :props="projectProps" placeholder="请选择项目"
+            @change="projectContractChange"
+        />
+    </div>
+</template>
+
+<script setup>
+import { onMounted, ref, watch } from 'vue'
+import { initButtons, initProjectContract } from '~sto/app'
+import { useAppStore } from '~src/store'
+import { getArrValue } from 'js-fast-way'
+
+//事件
+const emit = defineEmits(['change'])
+
+const useAppState = useAppStore()
+const userInfo = ref(useAppState.getUserInfo)
+
+//项目合同段
+const projectInfo = ref({})
+const contractInfo = ref({})
+const projectContract = ref([])
+const projectValue = ref(null)
+const projectProps = ref({
+    value: 'id',
+    label: 'projectAlias',
+    children: 'contractInfoList',
+})
+
+//监听
+watch(() => useAppState.getProjectContract, (val) => {
+    projectContractData(getArrValue(val))
+})
+
+//渲染完成
+onMounted(() => {
+    initButtons()
+    initProjectContract()
+    const info = useAppState.getProjectContract || []
+    projectContractData(info)
+})
+
+//处理项目合同段数据
+const projectContractData = (projectContractData) => {
+    if (projectContractData.length > 0) {
+        //处理别名
+        projectContractData.forEach(item => {
+            let contractArr = item['contractInfoList'] || []
+            contractArr.forEach(items => {
+                items['projectAlias'] = items['name']
+            })
+        })
+        //处理其他数据
+        projectContract.value = projectContractData
+        const projectId = useAppState.getProjectId //项目ID
+        const contractId = useAppState.getContractId //合同段ID
+        const UserProjectInfo = useAppState.getProjectInfo
+        const UserContractInfo = useAppState.getContractInfo
+        //查询缓存的选中ID是否存在
+        const pid = projectContractData.findIndex(item => Number(item.id) === Number(projectId))
+        const contractList = projectContractData[pid]?.contractInfoList || []
+        const cid = contractList.findIndex(item => Number(item.id) === Number(contractId))
+        //如果缓存的选中ID不存在
+        if (cid === -1) {
+            //取项目数组中的第一个数据
+            let letProjectInfo = projectContractData[0]
+            let contractInfoList = letProjectInfo?.contractInfoList || []
+            let letContractInfo = contractInfoList[0] || {}
+            projectValue.value = letContractInfo?.id
+            projectInfo.value = letProjectInfo
+            contractInfo.value = letContractInfo
+            //设置缓存
+            useAppState.setProjectInfo(letProjectInfo)
+            useAppState.setContractInfo(letContractInfo)
+            useAppState.setProjectId(letProjectInfo?.id)
+            useAppState.setContractId(letContractInfo?.id)
+            //发送消息
+            //socketSend(letProjectInfo?.id + ',' + letContractInfo?.id)
+        } else {
+            projectValue.value = String(contractId)
+            projectInfo.value = UserProjectInfo
+            contractInfo.value = UserContractInfo
+            //发送消息
+            //socketSend(projectId + ',' + contractId)
+        }
+    } else {
+        projectContract.value = []
+        projectValue.value = null
+        projectInfo.value = {}
+        contractInfo.value = {}
+    }
+}
+
+//项目被选择
+const ElCascaderRef = ref(null)
+const projectContractChange = (val) => {
+    if (val) {
+        const Nodes = ElCascaderRef.value.getCheckedNodes()
+        const UserProjectInfo = Nodes[0].parent.data
+        const UserContractInfo = Nodes[0].data
+        //缓存项目数据
+        useAppState.setProjectId(val[0])
+        useAppState.setContractId(val[1])
+        useAppState.setProjectInfo(UserProjectInfo)
+        useAppState.setContractInfo(UserContractInfo)
+        //更改界面更新
+        projectInfo.value = UserProjectInfo
+        contractInfo.value = UserContractInfo
+        window.$message?.info('切换了项目,数据更新中')
+        //发送消息
+        //socketSend(val[0] + ',' + val[1])
+        emit('change')
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.hc-header-cascader-box {
+    position: relative;
+    margin-right: 30px;
+    border-radius: 100px;
+    flex: 1;
+    .project-name-box {
+        padding-right: 55px;
+        position: relative;
+        visibility: hidden;
+        z-index: -1;
+        height: 1px;
+    }
+}
+</style>

+ 477 - 0
src/router/modules/base.js

@@ -39,6 +39,483 @@ export default [
             },
         ],
     },
+    {
+        path: '/debit-pay',
+        name: 'debit-pay-top',
+        redirect: '/debit-pay/admin/apply',
+        meta: { title: '计量支付' },
+        children: [
+            {
+                path: '/debit-pay/admin',
+                name: 'debit-pay-admin',
+                redirect: '/debit-pay/admin/apply',
+                meta: { title: '计量支付管理' },
+                component: Layout,
+                children: [
+                    {
+                        path: '/debit-pay/admin/apply',
+                        name: 'debit-pay-admin-apply',
+                        meta: { title: '收方申请' },
+                        component: () => import('~src/views/debit-pay/admin/apply.vue'),
+                    },
+                    {
+                        path: '/debit-pay/admin/periods',
+                        name: 'debit-pay-admin-periods',
+                        meta: { title: '合同计量期' },
+                        component: () => import('~src/views/debit-pay/admin/periods.vue'),
+                    },
+                    {
+                        path: '/debit-pay/admin/middlepay',
+                        name: 'debit-pay-admin-middlepay',
+                        meta: { title: '中间计量申请' },
+                        component: () => import('~src/views/debit-pay/admin/middlepay.vue'),
+                    },
+                    {
+                        path: '/debit-pay/admin/certificate',
+                        name: 'debit-pay-admin-certificate',
+                        meta: { title: '中期支付证书' },
+                        component: () => import('~src/views/debit-pay/admin/certificate.vue'),
+                    },
+                    {
+                        path: '/debit-pay/admin/book',
+                        name: 'debit-pay-admin-book',
+                        meta: { title: '开工预付款报表册' },
+                        component: () => import('~src/views/debit-pay/admin/book.vue'),
+                    },
+                ],
+            },
+            {
+                path: '/debit-pay/material',
+                name: 'debit-pay-material',
+                redirect: '/debit-pay/material/contract',
+                meta: { title: '材料计量申请' },
+                component: Layout,
+                children: [
+                    {
+                        path: '/debit-pay/material/contract',
+                        name: 'debit-pay-material-contract',
+                        meta: { title: '合同材料' },
+                        component: () => import('~src/views/debit-pay/material/contract.vue'),
+                    },
+                    {
+                        path: '/debit-pay/material/periods',
+                        name: 'debit-pay-admin-periods',
+                        meta: { title: '材料预付款计量期' },
+                        component: () => import('~src/views/debit-pay/material/periods.vue'),
+                    },
+                    {
+                        path: '/debit-pay/material/order',
+                        name: 'debit-pay-material-order',
+                        meta: { title: '材料计量单' },
+                        component: () => import('~src/views/debit-pay/material/order.vue'),
+                    },
+                    {
+                        path: '/debit-pay/material/book',
+                        name: 'debit-pay-material-book',
+                        meta: { title: '材料预付款报表手册' },
+                        component: () => import('~src/views/debit-pay/material/book.vue'),
+                    },
+                ],
+            },
+            {
+                path: '/debit-pay/start-work',
+                name: 'debit-pay-start-work',
+                redirect: '/debit-pay/material/contract',
+                meta: { title: '开工预付款计量申请' },
+                component: Layout,
+                children: [
+                    {
+                        path: '/debit-pay/start-work/period',
+                        name: 'debit-pay-start-work-period',
+                        meta: { title: '开工预付款计量期' },
+                        component: () => import('~src/views/debit-pay/start-work/period.vue'),
+                    },
+                    {
+                        path: '/debit-pay/start-work/order',
+                        name: 'debit-pay-start-work-order',
+                        meta: { title: '开工预付款计量单' },
+                        component: () => import('~src/views/debit-pay/start-work/order.vue'),
+                    },
+                    {
+                        path: '/debit-pay/start-work/book',
+                        name: 'debit-pay-start-work-book',
+                        meta: { title: '开工预付款报表手册' },
+                        component: () => import('~src/views/debit-pay/start-work/book.vue'),
+                    },
+                ],
+            },
+            {
+                path: '/debit-pay/ledgers',
+                name: 'debit-pay-ledgers',
+                redirect: '/debit-pay/ledgers/debit',
+                meta: { title: '计量支付台账' },
+                component: Layout,
+                children: [
+                    {
+                        path: '/debit-pay/ledgers/debit',
+                        name: 'debit-pay-ledgers-debit',
+                        meta: { title: '计量支付台账' },
+                        component: () => import('~src/views/debit-pay/ledgers/debit.vue'),
+                    },
+                    {
+                        path: '/debit-pay/ledgers/collect',
+                        name: 'debit-pay-ledgers-collect',
+                        meta: { title: '合同段计量支付汇总' },
+                        component: () => import('~src/views/debit-pay/ledgers/collect.vue'),
+                    },
+                    {
+                        path: '/debit-pay/ledgers/detail',
+                        name: 'debit-pay-ledgers-detail',
+                        meta: { title: '各期计量支付明细' },
+                        component: () => import('~src/views/debit-pay/ledgers/detail.vue'),
+                    },
+                    {
+                        path: '/debit-pay/ledgers/standards',
+                        name: 'debit-pay-ledgers-standards',
+                        meta: { title: '各标完成投资柱状图' },
+                        component: () => import('~src/views/debit-pay/ledgers/standards.vue'),
+                    },
+                    {
+                        path: '/debit-pay/ledgers/section',
+                        name: 'debit-pay-ledgers-section',
+                        meta: { title: '章节完成投资柱状图' },
+                        component: () => import('~src/views/debit-pay/ledgers/section.vue'),
+                    },
+                    {
+                        path: '/debit-pay/ledgers/payment',
+                        name: 'debit-pay-ledgers-payment',
+                        meta: { title: '各期章节计量支付明细' },
+                        component: () => import('~src/views/debit-pay/ledgers/payment.vue'),
+                    },
+                ],
+            },
+            {
+                path: '/debit-pay/project',
+                name: 'debit-pay-project',
+                redirect: '/debit-pay/project/pay',
+                meta: { title: '工程结算' },
+                component: Layout,
+                children: [
+                    {
+                        path: '/debit-pay/project/pay',
+                        name: 'debit-pay-project-pay',
+                        meta: { title: '结算支付' },
+                        component: () => import('~src/views/debit-pay/project/pay.vue'),
+                    },
+                    {
+                        path: '/debit-pay/project/certificate',
+                        name: 'debit-pay-project-certificate',
+                        meta: { title: '结算支付证书' },
+                        component: () => import('~src/views/debit-pay/project/certificate.vue'),
+                    },
+                ],
+            },
+        ],
+    },
+    {
+        path: '/periods',
+        name: 'periods-top',
+        redirect: '/periods/admin/measure',
+        meta: { title: '工区计量' },
+        children: [
+            {
+                path: '/periods/admin',
+                name: 'periods-admin',
+                redirect: '/periods/admin/measure',
+                meta: { title: '工区计量支付管理' },
+                component: Layout,
+                children: [
+                    {
+                        path: '/periods/admin/measure',
+                        name: 'periods-admin-measure',
+                        meta: { title: '工区计量期' },
+                        component: () => import('~src/views/periods/admin/measure.vue'),
+                    },
+                    {
+                        path: '/periods/admin/middle',
+                        name: 'periods-admin-middle',
+                        meta: { title: '中间计量申请' },
+                        component: () => import('~src/views/periods/admin/middle.vue'),
+                    },
+                    {
+                        path: '/periods/admin/certificate',
+                        name: 'periods-admin-certificate',
+                        meta: { title: '中期支付证书' },
+                        component: () => import('~src/views/periods/admin/certificate.vue'),
+                    },
+                ],
+            },
+            {
+                path: '/periods/ledgers',
+                name: 'periods-ledgers',
+                redirect: '/periods/ledgers/pay',
+                meta: { title: '工区计量支付台账' },
+                component: Layout,
+                children: [
+                    {
+                        path: '/periods/ledgers/pay',
+                        name: 'periods-ledgers-pay',
+                        meta: { title: '计量支付台账' },
+                        component: () => import('~src/views/periods/ledgers/pay.vue'),
+                    },
+                    {
+                        path: '/periods/ledgers/summary',
+                        name: 'periods-ledgers-summary',
+                        meta: { title: '工区计量支付汇总' },
+                        component: () => import('~src/views/periods/ledgers/summary.vue'),
+                    },
+                    {
+                        path: '/periods/ledgers/details',
+                        name: 'periods-ledgers-details',
+                        meta: { title: '各期计量支付明细' },
+                        component: () => import('~src/views/periods/ledgers/details.vue'),
+                    },
+                    {
+                        path: '/periods/ledgers/standards',
+                        name: 'periods-ledgers-standards',
+                        meta: { title: '各标完成投资柱状图' },
+                        component: () => import('~src/views/periods/ledgers/standards.vue'),
+                    },
+                    {
+                        path: '/periods/ledgers/section',
+                        name: 'periods-ledgers-section',
+                        meta: { title: '章节完成投资柱状图' },
+                        component: () => import('~src/views/periods/ledgers/section.vue'),
+                    },
+                    {
+                        path: '/periods/ledgers/payment',
+                        name: 'periods-ledgers-payment',
+                        meta: { title: '各期章节计量支付明细' },
+                        component: () => import('~src/views/periods/ledgers/payment.vue'),
+                    },
+                ],
+            },
+            {
+                path: '/periods/project',
+                name: 'periods-project',
+                redirect: '/periods/project/pay',
+                meta: { title: '工区工程结算' },
+                component: Layout,
+                children: [
+                    {
+                        path: '/periods/project/pay',
+                        name: 'periods-project-pay',
+                        meta: { title: '工区结算支付' },
+                        component: () => import('~src/views/periods/project/pay.vue'),
+                    },
+                    {
+                        path: '/periods/project/certificate',
+                        name: 'periods-project-certificate',
+                        meta: { title: '结算支付证书' },
+                        component: () => import('~src/views/periods/project/certificate.vue'),
+                    },
+                ],
+            },
+            {
+                path: '/periods/start-work',
+                name: 'periods-start-work',
+                redirect: '/periods/start-work/phase',
+                meta: { title: '开工预付款计量申请' },
+                component: Layout,
+                children: [
+                    {
+                        path: '/periods/start-work/phase',
+                        name: 'periods-start-work-phase',
+                        meta: { title: '开工预付款计量期' },
+                        component: () => import('~src/views/periods/start-work/phase.vue'),
+                    },
+                    {
+                        path: '/periods/start-work/order',
+                        name: 'periods-start-work-order',
+                        meta: { title: '开工预付款计量单' },
+                        component: () => import('~src/views/periods/start-work/order.vue'),
+                    },
+                    {
+                        path: '/periods/start-work/book',
+                        name: 'periods-start-work-book',
+                        meta: { title: '开工预付款报表手册' },
+                        component: () => import('~src/views/periods/start-work/book.vue'),
+                    },
+                ],
+            },
+            {
+                path: '/periods/material',
+                name: 'periods-material',
+                redirect: '/periods/material/contract',
+                meta: { title: '材料计量申请' },
+                component: Layout,
+                children: [
+                    {
+                        path: '/periods/material/contract',
+                        name: 'periods-material-contract',
+                        meta: { title: '合同材料' },
+                        component: () => import('~src/views/periods/material/contract.vue'),
+                    },
+                    {
+                        path: '/periods/material/phase',
+                        name: 'periods-material-phase',
+                        meta: { title: '材料预付款计量期' },
+                        component: () => import('~src/views/periods/material/phase.vue'),
+                    },
+                    {
+                        path: '/periods/material/order',
+                        name: 'periods-material-order',
+                        meta: { title: '材料计量单' },
+                        component: () => import('~src/views/periods/material/order.vue'),
+                    },
+                    {
+                        path: '/periods/material/book',
+                        name: 'periods-material-book',
+                        meta: { title: '材料预付款报表手册' },
+                        component: () => import('~src/views/periods/material/book.vue'),
+                    },
+                ],
+            },
+            {
+                path: '/periods/contract-admin',
+                name: 'periods-contract-admin',
+                redirect: '/periods/contract-admin/phase',
+                meta: { title: '合同计量支付管理' },
+                component: Layout,
+                children: [
+                    {
+                        path: '/periods/contract-admin/phase',
+                        name: 'periods-contract-admin-phase',
+                        meta: { title: '合同计量期' },
+                        component: () => import('~src/views/periods/contract-admin/phase.vue'),
+                    },
+                    {
+                        path: '/periods/contract-admin/apply',
+                        name: 'periods-contract-admin-apply',
+                        meta: { title: '合同中间计量申请' },
+                        component: () => import('~src/views/periods/contract-admin/apply.vue'),
+                    },
+                    {
+                        path: '/periods/contract-admin/certificate',
+                        name: 'periods-contract-admin-certificate',
+                        meta: { title: '合同中期支付证书' },
+                        component: () => import('~src/views/periods/contract-admin/certificate.vue'),
+                    },
+                ],
+            },
+            {
+                path: '/periods/contract-book',
+                name: 'periods-contract-book',
+                redirect: '/periods/contract-book/ledgers',
+                meta: { title: '合同计量支付台账' },
+                component: Layout,
+                children: [
+                    {
+                        path: '/periods/contract-book/ledgers',
+                        name: 'periods-contract-book-ledgers',
+                        meta: { title: '合同计量支付台账' },
+                        component: () => import('~src/views/periods/contract-book/ledgers.vue'),
+                    },
+                ],
+            },
+        ],
+    },
+    {
+        path: '/alter',
+        name: 'alter-top',
+        redirect: '/alter/admin/zero',
+        meta: { title: '变更管理' },
+        children: [
+            {
+                path: '/alter/admin',
+                name: 'alter-admin',
+                redirect: '/alter/admin/zero',
+                meta: { title: '变更管理' },
+                component: Layout,
+                children: [
+                    {
+                        path: '/alter/admin/zero',
+                        name: 'alter-admin-zero',
+                        meta: { title: '零号变更' },
+                        component: () => import('~src/views/alter/admin/zero.vue'),
+                    },
+                    {
+                        path: '/alter/admin/pre',
+                        name: 'alter-admin-pre',
+                        meta: { title: '预变更' },
+                        component: () => import('~src/views/alter/admin/pre.vue'),
+                    },
+                    {
+                        path: '/alter/admin/plan',
+                        name: 'alter-admin-plan',
+                        meta: { title: '变更方案' },
+                        component: () => import('~src/views/alter/admin/plan.vue'),
+                    },
+                    {
+                        path: '/alter/admin/order',
+                        name: 'alter-admin-order',
+                        meta: { title: '变更令' },
+                        component: () => import('~src/views/alter/admin/order.vue'),
+                    },
+                ],
+            },
+            {
+                path: '/alter/ledgers',
+                name: 'alter-ledgers',
+                redirect: '/alter/ledgers/cover',
+                meta: { title: '工程变更台账' },
+                component: Layout,
+                children: [
+                    {
+                        path: '/alter/ledgers/cover',
+                        name: 'alter-ledgers-cover',
+                        meta: { title: '封面' },
+                        component: () => import('~src/views/alter/ledgers/cover.vue'),
+                    },
+                    {
+                        path: '/alter/ledgers/pre-ledger',
+                        name: 'alter-ledgers-pre-ledger',
+                        meta: { title: '预变更台账' },
+                        component: () => import('~src/views/alter/ledgers/pre-ledger.vue'),
+                    },
+                    {
+                        path: '/alter/ledgers/ledger',
+                        name: 'alter-ledgers-ledger',
+                        meta: { title: '变更令台帐' },
+                        component: () => import('~src/views/alter/ledgers/ledger.vue'),
+                    },
+                    {
+                        path: '/alter/ledgers/table',
+                        name: 'alter-ledgers-table',
+                        meta: { title: '变更统计表1' },
+                        component: () => import('~src/views/alter/ledgers/table.vue'),
+                    },
+                    {
+                        path: '/alter/ledgers/table2',
+                        name: 'alter-ledgers-table2',
+                        meta: { title: '变更统计表2' },
+                        component: () => import('~src/views/alter/ledgers/table2.vue'),
+                    },
+                    {
+                        path: '/alter/ledgers/count',
+                        name: 'alter-ledgers-count',
+                        meta: { title: '变更令统计表' },
+                        component: () => import('~src/views/alter/ledgers/count.vue'),
+                    },
+                ],
+            },
+            {
+                path: '/alter/collection',
+                name: 'alter-collection',
+                redirect: '/alter/collection/scan',
+                meta: { title: '变更资料归集' },
+                component: Layout,
+                children: [
+                    {
+                        path: '/alter/collection/scan',
+                        name: 'alter-collection-scan',
+                        meta: { title: '变更扫描资料' },
+                        component: () => import('~src/views/alter/collection/scan.vue'),
+                    },
+                ],
+            },
+        ],
+    },
     {
         path: '/user',
         name: 'user',

+ 10 - 0
src/views/alter/admin/order.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/alter/admin/plan.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/alter/admin/pre.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/alter/admin/zero.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/alter/collection/scan.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/alter/ledgers/count.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/alter/ledgers/cover.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/alter/ledgers/ledger.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/alter/ledgers/pre-ledger.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/alter/ledgers/table.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/alter/ledgers/table2.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/admin/apply.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/admin/certificate.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/admin/middlepay.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/admin/periods.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/ledgers/collect.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/ledgers/debit.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/ledgers/detail.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/ledgers/payment.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/ledgers/section.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/ledgers/standards.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/material/book.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/material/contract.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/material/order.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/material/periods.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/project/certificate.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/project/pay.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/start-work/book.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/start-work/order.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/debit-pay/start-work/period.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/admin/certificate.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/admin/measure.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/admin/middle.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/contract-admin/apply.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/contract-admin/certificate.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/contract-admin/phase.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/contract-book/ledgers.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/ledgers/details.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/ledgers/pay.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/ledgers/payment.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/ledgers/section.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/ledgers/standards.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/ledgers/summary.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/material/book.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/material/contract.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/material/order.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/material/phase.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/project/certificate.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/project/pay.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/start-work/book.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/start-work/order.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 10 - 0
src/views/periods/start-work/phase.vue

@@ -0,0 +1,10 @@
+<template>
+</template>
+
+<script setup>
+
+</script>
+
+<style scoped lang="scss">
+
+</style>