Explorar el Código

创建项目修改

duy hace 7 meses
padre
commit
9366b389ad

+ 9 - 7
electron.vite.config.mjs

@@ -5,10 +5,10 @@ import vue from '@vitejs/plugin-vue'
 
 export default defineConfig({
     main: {
-        plugins: [externalizeDepsPlugin()]
+        plugins: [externalizeDepsPlugin()],
     },
     preload: {
-        plugins: [externalizeDepsPlugin()]
+        plugins: [externalizeDepsPlugin()],
     },
     renderer: {
         resolve: {
@@ -17,15 +17,15 @@ export default defineConfig({
                 '~ass': resolve('src/renderer/src/assets'),
                 '~api': resolve('src/renderer/src/api/modules'),
                 '~store': resolve('src/renderer/src/store/modules'),
-            }
+            },
         },
         plugins: [
             vue({
                 template: {
                     compilerOptions: {
                         isCustomElement: (tag) => tag === 'webview',
-                    }
-                }
+                    },
+                },
             }),
             UnoCSS(),
         ],
@@ -35,10 +35,12 @@ export default defineConfig({
                     ws: true,
                     changeOrigin: true,
                     //target: 'http://127.0.0.1:8014',
-                    target: 'http://39.108.216.210:8014',
+                    target: 'http://192.168.0.109:8014',
+                    // target: 'http://39.108.216.210:8014',
+                        //    target: 'http://192.168.0.21:8014',
                     rewrite: (path) => path.replace(new RegExp('^/api'), '/'),
                 },
             },
         },
-    }
+    },
 })

+ 1 - 1
package.json

@@ -37,7 +37,7 @@
         "eslint": "^8.57.0",
         "eslint-plugin-vue": "^9.22.0",
         "fs-extra": "^11.2.0",
-        "hc-vue3-ui": "^4.3.8",
+        "hc-vue3-ui": "^4.5.7",
         "js-base64": "^3.7.7",
         "js-fast-way": "^0.5.6",
         "js-md5": "^0.8.3",

+ 27 - 11
src/main/index.js

@@ -1,5 +1,13 @@
 import { join } from 'path'
-import { BrowserWindow, Menu, app, shell, session, ipcMain, screen } from 'electron'
+import {
+    BrowserWindow,
+    Menu,
+    app,
+    ipcMain,
+    screen,
+    session,
+    shell,
+} from 'electron'
 import { electronApp, is } from '@electron-toolkit/utils'
 
 let mainWindow
@@ -20,7 +28,7 @@ const createMenu = () => {
                         if (mainWindow && !mainWindow.isDestroyed()) {
                             mainWindow.webContents.openDevTools()
                         }
-                    }
+                    },
                 },
                 { type: 'separator' },
                 { label: '退出' + app.name, role: 'quit' },
@@ -53,11 +61,12 @@ function createWindow() {
         height: height,
         center: true,
         show: false,
-        autoHideMenuBar: true,
+        autoHideMenuBar: false,
         webPreferences: {
             preload: join(__dirname, '../preload/index.js'),
             sandbox: false,
             webviewTag: true,
+            nodeIntegration: true,
         },
     })
 
@@ -85,14 +94,21 @@ function createWindow() {
 }
 
 function setupWebRequestFilter() {
-    const filter = {urls: ['file:///C:/api/*', 'file:///api/*', 'file:///D:/api/*']}
+    const filter = {
+        urls: ['file:///C:/api/*', 'file:///api/*', 'file:///D:/api/*'],
+    }
     //const url = 'http://127.0.0.1:8014'
-    const url = 'http://39.108.216.210:8014'
-    session.defaultSession.webRequest.onBeforeRequest(filter, (details, callback) => {
-        const val = details.url
-        let newUrl = val.replace(/^file:\/\/\/(?:C:\/)?(?:D:\/)?api/, url)
-        callback({ redirectURL: newUrl })
-    })
+        const url = 'http://192.168.0.109:8014'
+    // const url = 'http://39.108.216.210:8014'
+            // const url = 'http://192.168.0.21:8014'
+    session.defaultSession.webRequest.onBeforeRequest(
+        filter,
+        (details, callback) => {
+            const val = details.url
+            let newUrl = val.replace(/^file:\/\/\/(?:C:\/)?(?:D:\/)?api/, url)
+            callback({ redirectURL: newUrl })
+        },
+    )
 }
 
 function initApp() {
@@ -118,7 +134,7 @@ function initApp() {
 
     ipcMain.handle('download-file', async (event, url) => {
         if (!url) return
-        const filePath = join(app.getPath('downloads'));
+        const filePath = join(app.getPath('downloads'))
         const win = BrowserWindow.fromWebContents(event.sender)
         if (win && !win.isDestroyed()) {
             win.webContents.downloadURL(url, filePath)

BIN
src/renderer/src/assets/view/car.png


BIN
src/renderer/src/assets/view/cash.png


BIN
src/renderer/src/assets/view/chengben.png


BIN
src/renderer/src/assets/view/jianshe.png


BIN
src/renderer/src/assets/view/jiechang.png


BIN
src/renderer/src/assets/view/shuijin.png


BIN
src/renderer/src/assets/view/size.png


BIN
src/renderer/src/assets/view/total.png


+ 23 - 8
src/renderer/src/layout/index2.vue

@@ -4,7 +4,7 @@
             <hc-body class="hc-layout-aside-body">
                 <div class="hc-layout-aside-logo hc-flex-center h-[46px]">
                     <img :src="logoPng" alt="logo" class="w-[26px]">
-                    <span class="ml-[14px] text-[18px] font-bold">模型分析工具</span>
+                    <span class="ml-[14px] text-[18px] font-bold"> 高速公路<br>投资效益分析工具</span>
                     <hc-upload-bar />
                 </div>
                 <div class="hc-layout-aside-menu">
@@ -39,19 +39,34 @@ import UserInfoBar from './modules/UserInfoBar.vue'
 //菜单数据
 const menuBarKey = ref(useRoutes.name)
 const menuBarData = ref([
+{
+        code: 'index2',
+        name: '数据看板',
+        source: 'album',
+    },
     {
         code: 'project-data',
-        name: '项目数据',
-        source: 'album'
+        name: '项目管理',
+        source: 'album',
     },
     {
         code: 'system2',
-        name: '设置',
+        name: '工具设置',
         source: 'focus-2',
-        children: [{
-            code: 'system-model',
-            name: '模型设置'
-        }]
+        children: [
+            {
+                code: 'system-model',
+                name: '参数设置',
+            },
+            {
+                code: 'system-user',
+                name: '用户管理',
+            },
+            {
+                code: 'system-role',
+                name: '角色管理',
+            },
+    ],
     },
 ])
 

+ 20 - 2
src/renderer/src/router/modules/base.js

@@ -9,6 +9,12 @@ export default [
         meta: { title: '数据看板' },
         component: () => import('~src/views/home/datav.vue'),
     },
+    {
+        path: '/index2',
+        name: 'index2',
+        meta: { title: '数据看板' },
+        component: () => import('~src/views/home2/datav.vue'),
+    },
     {
         path: '/login',
         name: 'login',
@@ -109,15 +115,27 @@ export default [
         path: '/system2',
         name: 'system2',
         redirect: '/system/model',
-        meta: { title: '设置' },
+        meta: { title: '工具设置' },
         component: Layout2,
         children: [
             {
                 path: '/system/model',
                 name: 'system-model',
-                meta: { title: '模型设置' },
+                meta: { title: '参数设置' },
                 component: () => import('~src/views/system/model.vue'),
             },
+            {
+                path: '/system/user',
+                name: 'system-user',
+                meta: { title: '用户管理' },
+                component: () => import('~src/views/system/user.vue'),
+            },
+            {
+                path: '/system/role',
+                name: 'system-role',
+                meta: { title: '角色管理' },
+                component: () => import('~src/views/system/role.vue'),
+            },
         ],
     },
     {

+ 3 - 0
src/renderer/src/views/home2/datav.vue

@@ -0,0 +1,3 @@
+<template>
+    <div>数据看板</div>
+</template>

+ 10 - 10
src/renderer/src/views/login/os.vue

@@ -1,15 +1,15 @@
 <template>
-    <div class="hc-analysis-os-vue h-full hc-flex-center">
+    <div class="hc-analysis-os-vue hc-flex-center h-full">
         <div class="body">
-            <div class="title text-30px font-bold mb-50px text-center">分析处理工具</div>
-            <div class="row hc-flex" v-loading="isLoading">
-                <div class="col w-300px h-394px hc-flex-center" @click="toPageOs('1')">
-                    <img :src="png1" class="w-50% mt-10px mb-50px" alt=""/>
-                    <div class="text text-24px font-bold mt-34px">数据分析处理工具</div>
+            <div class="title mb-50px text-center text-30px font-bold">分析处理工具</div>
+            <div v-loading="isLoading" class="row hc-flex">
+                <div class="col hc-flex-center h-394px w-300px" @click="toPageOs('1')">
+                    <img :src="png1" class="mb-50px mt-10px w-50%" alt="">
+                    <div class="text mt-34px text-24px font-bold">数据分析处理工具</div>
                 </div>
-                <div class="col w-300px h-394px hc-flex-center" @click="toPageOs('2')">
-                    <img :src="png2" class="w-50% mt-10px mb-50px" alt=""/>
-                    <div class="text text-24px font-bold mt-34px">投资效益评估工具</div>
+                <div class="col hc-flex-center h-394px w-300px" @click="toPageOs('2')">
+                    <img :src="png2" class="mb-50px mt-10px w-50%" alt="">
+                    <div class="text mt-34px text-center text-24px font-bold"> 高速公路<br>投资效益分析工具</div>
                 </div>
             </div>
         </div>
@@ -20,7 +20,7 @@
 import { onMounted, ref } from 'vue'
 import { useRouter } from 'vue-router'
 import { useAppStore } from '~src/store'
-import { setRouterData, getHomeRouter } from '~store/user'
+import { getHomeRouter, setRouterData } from '~store/user'
 
 //图片文件
 import png1 from '~ass/images/xmjszhzx.png'

+ 90 - 35
src/renderer/src/views/project/data.vue

@@ -1,20 +1,61 @@
 <template>
-    <hc-card title="项目数据">
+    <hc-card id="add-card-target" title="项目管理">
         <template #extra>
-            <el-button type="primary" class="mr-10px" @click="addRowClick">项目新增</el-button>
-            <el-button type="warning" class="mr-10px">导入</el-button>
-            <el-button type="danger" :disabled="tableCheckKeys.length <= 0" @click="batchDelClick">批量删除</el-button>
+            <!-- <el-button type="primary" class="mr-10px" @click="addRowClick">新增项目</el-button> -->
+            <el-button color="#20C98B" type="primary" @click="addRowClick">
+                <hc-icon class="text-white" name="add" />
+                <span class="text-white">新增项目</span>
+            </el-button>
+            <el-button type="warning" class="mr-10px" color="orange">
+                <HcIcon name="file-transfer" class="text-white" />
+                <span class="text-white">导入项目</span>
+            </el-button>
+            <el-button type="danger" :disabled="tableCheckKeys.length <= 0" @click="batchDelClick">
+                <HcIcon name="delete-bin" class="text-white" />
+                删除项目
+            </el-button>
         </template>
+        <template #search>
+            <div class="w-[150px]">
+                <el-select v-model="searchForm.projectType" filterable clearable block placeholder="项目类型" @change="searchClick">
+                    <el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value" />
+                </el-select>
+            </div>
+            <div class="ml-2 w-[150px]">
+                <el-select v-model="searchForm.projectType" filterable clearable block placeholder="路线类型" @change="searchClick">
+                    <el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value" />
+                </el-select>
+            </div>
+            <div class="ml-2 w-[150px]">
+                <el-select v-model="searchForm.projectStage" filterable clearable block placeholder="项目阶段" @change="searchClick">
+                    <el-option v-for="item in stateOptions" :key="item.value" :label="item.label" :value="item.value" />
+                </el-select>
+            </div>
+         
+       
+            <div class="ml-2 w-[150px]">
+                <el-select v-model="searchForm.projectType" filterable clearable block placeholder="运营公司" @change="searchClick">
+                    <el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value" />
+                </el-select>
+            </div>
+            <div class="relative ml-3 w-[260px]">
+                <hc-search-input v-model="searchForm.name" color="#151921" text="搜索" @search="searchClick" />
+            </div>
+        </template>
+
         <hc-table
             :column="tableColumn" :datas="tableData" :index-style="{ width: 60 }" :loading="tableLoading"
             is-check :check-style="{ fixed: true, width: 29 }" @selection-change="tableCheckChange"
         >
-            <template #name="{ row }">
-                <el-link type="primary" @click="editRowClick(row)">{{ row.name }}</el-link>
+            <template #key3="{ row }">
+                <!-- <el-link type="primary" @click="editRowClick(row)">{{ row.key3 }}</el-link> -->
+                <el-tag v-if="row.key3 === 1" type="primary">施工期</el-tag>
+                <el-tag v-if="row.key3 === 2" type="success">运营期</el-tag>
             </template>
             <template #action="{ row }">
-                <el-link type="warning" @click="rowEarningsClick(row)">收益数据</el-link>
-                <el-link type="primary" @click="rowViewClick(row)">查看</el-link>
+                <el-link type="warning" @click="rowViewClick(row)">查看</el-link>
+                <el-link type="primary" @click="rowEarningsClick(row)">编辑</el-link>
+              
                 <el-link type="danger" @click="rowDelClick(row)">删除</el-link>
             </template>
         </hc-table>
@@ -23,10 +64,10 @@
         </template>
     </hc-card>
 
-    <!--新增、编辑-->
-    <HcAddAndEdit v-model="isAddAndEditShow" :data="addAndEditForm" @close="addAndEditClose" @finish="addAndEditSubmit"/>
+    <!-- 新增、编辑 -->
+    <HcAddAndEdit v-model="isAddAndEditShow" :data="addAndEditForm" @close="addAndEditClose" @finish="addAndEditSubmit" />
 
-    <!--查看-->
+    <!-- 查看 -->
     <HcAddAndEdit v-model="isViewShow" :data="rowInfo" disabled @close="viewClose">
         <hc-card-item ui="hc-project-data-view-info">
             <div class="hc-flex-center mb-24px">
@@ -36,23 +77,23 @@
             </div>
             <el-form :model="rowInfo" label-width="auto">
                 <el-form-item label="通行费用:">
-                    <el-input v-model="rowInfo.key20" placeholder="请输入通行费用" clearable disabled/>
+                    <el-input v-model="rowInfo.key20" placeholder="请输入通行费用" clearable disabled />
                 </el-form-item>
                 <el-form-item label="广告费用:">
-                    <el-input v-model="rowInfo.key21" placeholder="请输入广告费用" clearable disabled/>
+                    <el-input v-model="rowInfo.key21" placeholder="请输入广告费用" clearable disabled />
                 </el-form-item>
                 <el-form-item label="服务区费用:">
-                    <el-input v-model="rowInfo.key22" placeholder="请输入服务区费用" clearable disabled/>
+                    <el-input v-model="rowInfo.key22" placeholder="请输入服务区费用" clearable disabled />
                 </el-form-item>
             </el-form>
         </hc-card-item>
     </HcAddAndEdit>
 
-    <!--查看收益数据-->
+    <!-- 查看收益数据 -->
     <hc-dialog v-model="isEarningsShow" widths="40rem" title="收益录入" is-footer-center @close="dialogEarningsClose">
         <el-form ref="formRef" :model="formModel" :rules="formRules" label-width="auto">
             <el-form-item label="项目名称:">
-                <el-input v-model="formModel.name" placeholder="请输入项目名称" clearable disabled/>
+                <el-input v-model="formModel.name" placeholder="请输入项目名称" clearable disabled />
             </el-form-item>
             <hc-card-item ui="hc-project-data-view-info">
                 <div class="hc-flex-center mb-24px">
@@ -61,13 +102,13 @@
                     </el-select>
                 </div>
                 <el-form-item label="通行费用:">
-                    <el-input v-model="formModel.key20" placeholder="请输入通行费用" clearable/>
+                    <el-input v-model="formModel.key20" placeholder="请输入通行费用" clearable />
                 </el-form-item>
                 <el-form-item label="广告费用:">
-                    <el-input v-model="formModel.key21" placeholder="请输入广告费用" clearable/>
+                    <el-input v-model="formModel.key21" placeholder="请输入广告费用" clearable />
                 </el-form-item>
                 <el-form-item label="服务区费用:">
-                    <el-input v-model="formModel.key22" placeholder="请输入服务区费用" clearable/>
+                    <el-input v-model="formModel.key22" placeholder="请输入服务区费用" clearable />
                 </el-form-item>
             </hc-card-item>
         </el-form>
@@ -79,18 +120,32 @@
 </template>
 
 <script setup>
-import {nextTick, onMounted, ref} from 'vue'
-import {HcDelMsg} from "hc-vue3-ui";
+import { nextTick, onMounted, ref } from 'vue'
+import { HcDelMsg } from 'hc-vue3-ui'
 import HcAddAndEdit from './data/addAndEdit.vue'
+import { getDictionaryData } from '~src/utils/tools'
 
 //渲染完成
-onMounted(() => {
-    searchClick()
+onMounted(async () => {
+    await getProStation()
+    await getProType()
+    searchClick().then()
 })
 
 //搜索条件
-const searchForm = ref({current: 1, size: 20, total: 0})
+const searchForm = ref({ current: 1, size: 20, total: 0, projectStage: '', projectType: '', name:'' })
+
+//项目阶段
+const stateOptions = ref([])
+const getProStation = async () => {
+    stateOptions.value = await getDictionaryData('projectStage', true)
 
+}
+//项目类型
+const typeOptions = ref([])
+const getProType = async () => {
+    typeOptions.value = await getDictionaryData('projectType', true)
+  }
 //搜索
 const searchClick = () => {
     searchForm.value.current = 1
@@ -106,19 +161,19 @@ const pageChange = ({ current, size }) => {
 
 //表格数据
 const tableColumn = [
-    { key: 'name', name: '项目名称' },
-    { key: 'key1', name: '起始年限', width: 100, align: 'center' },
-    { key: 'key2', name: '结束年限', width: 100, align: 'center' },
-    { key: 'key3', name: '成本(万元)', width: 100, align: 'center' },
-    { key: 'key4', name: '收入(万元)', width: 100, align: 'center' },
-    { key: 'key5', name: '收支平衡', width: 80, align: 'center' },
-    { key: 'key6', name: '收益率', width: 80, align: 'center' },
+    { key: 'name', name: '项目类型' },
+    { key: 'key1', name: '线路类型', align: 'center' },
+    { key: 'key2', name: '路段名称', align: 'center' },
+    { key: 'key3', name: '项目阶段', align: 'center' },
+    { key: 'key4', name: '实际运营里程(公里)', align: 'center' },
+    { key: 'key5', name: '车道数', width: 80, align: 'center' },
+    { key: 'key6', name: '运营公司', align: 'center' },
     { key: 'action', name: '操作', width: 160, fixed:'right', align: 'center' },
 ]
 const tableData = ref([
-    {id:1, name: 'xx高速公路1', key1: '2022年', key2: '2024年', key3: '200', key4: '150', key5: '0', key6: '0'},
-    {id:2, name: 'xx高速公路2', key1: '2022年', key2: '2024年', key3: '200', key4: '150', key5: '0', key6: '0'},
-    {id:3, name: 'xx高速公路3', key1: '2022年', key2: '2024年', key3: '200', key4: '150', key5: '0', key6: '0'},
+    { id:1, name: 'xx高速公路1', key1: '2022年', key2: '2024年', key3: 1, key4: '150', key5: '0', key6: '0' },
+    { id:2, name: 'xx高速公路2', key1: '2022年', key2: '2024年', key3: 2, key4: '150', key5: '0', key6: '0' },
+    { id:3, name: 'xx高速公路3', key1: '2022年', key2: '2024年', key3:1, key4: '150', key5: '0', key6: '0' },
 ])
 
 //获取表格数据
@@ -172,7 +227,7 @@ const addAndEditClose = () => {
 }
 
 //选择年份
-const yearOptions = [{value: '2024', label: '2024年'}]
+const yearOptions = [{ value: '2024', label: '2024年' }]
 const changeYear = (val) => {
     console.log(val)
 }

+ 287 - 59
src/renderer/src/views/project/data/addAndEdit.vue

@@ -1,60 +1,226 @@
 <template>
-    <hc-dialog v-model="isShow" widths="40rem" :title="`${disabled?'查看项目':formModel.id?'编辑项目':'新增项目'}`" :footer="!disabled" is-footer-center @close="dialogClose">
-        <el-form ref="formRef" :model="formModel" :rules="formRules" label-position="top" label-width="auto">
-            <el-row :gutter="20">
-                <el-col :span="24">
-                    <el-form-item label="项目名称:" prop="name">
-                        <el-input v-model="formModel.name" placeholder="请输入项目名称" clearable :disabled="disabled"/>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                    <el-form-item label="运营时间:">
-                        <hc-date-picker :dates="formModel.time1" clearable :disabled="disabled"/>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                    <el-form-item label="收费时间:">
-                        <hc-date-picker :dates="formModel.time2" clearable :disabled="disabled"/>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                    <el-form-item label="初始成本:">
-                        <el-input v-model="formModel.key10" placeholder="请输入初始成本" clearable :disabled="disabled"/>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                    <el-form-item label="人工成本:">
-                        <el-input v-model="formModel.key11" placeholder="请输入人工成本" clearable :disabled="disabled"/>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                    <el-form-item label="管理成本:">
-                        <el-input v-model="formModel.key12" placeholder="请输入管理成本" clearable :disabled="disabled"/>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                    <el-form-item label="养护成本:">
-                        <el-input v-model="formModel.key13" placeholder="请输入人工成本" clearable :disabled="disabled"/>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                    <el-form-item label="大修成本:">
-                        <el-input v-model="formModel.key14" placeholder="请输入大修成本" clearable :disabled="disabled"/>
-                    </el-form-item>
-                </el-col>
-            </el-row>
-        </el-form>
-        <slot/>
-        <template #footer>
-            <el-button hc-btn @click="dialogClose">取消</el-button>
-            <el-button hc-btn type="primary" :loading="submitLoading" @click="dialogSubmit" v-if="formModel.id">保存</el-button>
-            <el-button hc-btn type="primary" :loading="submitLoading" @click="dialogSubmit" v-else>创建</el-button>
-        </template>
-    </hc-dialog>
+    <hc-drawer v-model="isShow" to-id="add-card-target" is-close>
+        <div class="relative h-95% overflow-y-auto bg-#F2F3F5 p-2">
+            <div>
+                <hc-icon class="text-18px text-black font-600" name="add-box" />
+                <span class="ml-2 text-18px text-black font-800">新增项目</span>
+            </div>
+            <div class="mt-4">
+                <hc-card-item class="hac-card-item">
+                    <template #header>
+                        <div class="hac-card-title g">基础信息</div>
+                    </template>
+                    <el-form ref="formRef" :inline="true" :model="baseForm" :rules="formRules" label-width="auto" label-position="left">
+                        <div>
+                            <div class="hc-form-item">
+                                <el-form-item label="路线名称:" prop="key1">
+                                    <el-input v-model="baseForm.key1" clearable placeholder="请输入" />
+                                </el-form-item>
+                                <el-form-item label="项目类型:" prop="key2">
+                                    <el-input v-model="baseForm.key2" clearable placeholder="请输入" />
+                                </el-form-item>
+                                <el-form-item label="路线类型:" prop="key3">
+                                    <el-input v-model="baseForm.key3" clearable placeholder="请输入" />
+                                </el-form-item>
+                            </div>
+                            <div class="hc-form-item">
+                                <el-form-item label="项目阶段:" prop="key4">
+                                    <el-input v-model="baseForm.key4" clearable placeholder="请输入" />
+                                </el-form-item>
+                                <el-form-item label="建设时期时间:" prop="key5">
+                                    <el-input v-model="baseForm.key5" clearable placeholder="请输入" />
+                                </el-form-item>
+                                <el-form-item label="运用期时间:" prop="key6">
+                                    <el-input v-model="baseForm.key6" clearable placeholder="请输入" />
+                                </el-form-item>
+                            </div>
+                            <div class="hc-form-item">
+                                <el-form-item label="运营公司:" prop="key7">
+                                    <el-input v-model="baseForm.key7" clearable placeholder="请输入" />
+                                </el-form-item>
+                                <el-form-item label="实际运营里程(公里):" prop="key8">
+                                    <el-input v-model="baseForm.key8" clearable placeholder="请输入" />
+                                </el-form-item>
+                                <el-form-item label="车道数" prop="key9">
+                                    <el-input v-model="baseForm.key9" clearable placeholder="请输入" />
+                                </el-form-item>
+                            </div>
+                        </div>
+                    </el-form>
+                </hc-card-item>
+            </div>
+            <div class="mt-4">
+                <hc-card-item class="hac-card-item">
+                    <template #header>
+                        <div class="hac-card-title g">
+                            <div class="w-[150px]">
+                                <el-select v-model="baseForm.stage" filterable clearable block placeholder="建设期" @change="stageClick">
+                                    <el-option v-for="item in stageOptions" :key="item.value" :label="item.label" :value="item.value" />
+                                </el-select>
+                            </div>
+                            <span class="ml-2">项目信息</span>
+                        </div>
+                    </template>
+                    <div class="flex p-1 text-sm font-bold">
+                        <hc-icon name="arrow-down" class="mr-1 text-lightBlue" /><div>现金流入</div>
+                    </div>
+                    <div class="cash-in-list mt-2 flex justify-between">
+                        <div class="cash-in-list-item text-sm">
+                            <div class="flex font-bold">
+                                <hc-icon name="coupon-2" class="mr-1 text-lightBlue" /><div>通行费</div>
+                            </div>
+                            <div class="jitems-center mt-1 w-full flex justify-between">
+                                <span class="text-gray">年度收入</span>
+                                <div class="ml-3 w-64">
+                                    <el-input v-model="stage.key1" clearable placeholder="请输入" />
+                                </div>
+                            </div>
+                        </div>
+                        <div class="cash-in-list-item text-sm">
+                            <div class="flex items-center font-bold">
+                                <img :src="totalPng" class="icon-avatar mr-1">
+                                <div>其他收入</div>
+                            </div>
+                            <div class="mt-1 w-full flex items-center justify-between">
+                                <span class="text-gray">年度收入</span>
+                                <div class="ml-3 w-64">
+                                    <el-input v-model="stage.key1" clearable placeholder="请输入" />
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="mt-2 flex p-1 text-sm font-bold">
+                        <hc-icon name="arrow-up" class="mr-1 text-orange" /><div>现金流出</div>
+                    </div>
+                    <div class="cash-in-list1 mt-2 flex justify-between">
+                        <div class="cash-in-list-item text-sm">
+                            <div class="flex items-center font-bold">
+                                <img :src="jianshePng" class="icon-avatar mr-1">
+                                <div>建设期总投资额</div>
+                            </div>
+                            <div class="jitems-center mt-1 w-full flex justify-between">
+                                <span class="text-gray">总投资</span>
+                                <div class="ml-3 w-64">
+                                    <el-input v-model="stage.key1" clearable placeholder="请输入" />
+                                </div>
+                            </div>
+                        </div>
+                        <div class="cash-in-list-item text-sm">
+                            <div class="flex items-center font-bold">
+                                <img :src="sizePng" class="icon-avatar mr-1">
+                                <div>建设期各年份投入比例</div>
+                            </div>
+                            <div class="mt-1 w-full flex items-center justify-between">
+                                <span class="text-gray">投入比例</span>
+                                <div class="ml-3 w-64">
+                                    <el-input v-model="stage.key1" clearable placeholder="请输入" />
+                                </div>
+                            </div>
+                        </div>
+                        <div class="cash-in-list-item text-sm">
+                            <div class="flex items-center font-bold">
+                                <img :src="jiechangPng" class="icon-avatar mr-1"><div>借款本金偿还</div>
+                            </div>
+                            <div class="mt-1 w-full flex items-center justify-between">
+                                <span class="text-gray">年度偿还</span>
+                                <div class="ml-3 w-64">
+                                    <el-input v-model="stage.key1" clearable placeholder="请输入" />
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="cash-in-list1 mt-4 flex justify-between">
+                        <div class="cash-in-list-item text-sm">
+                            <div class="flex font-bold">
+                                <hc-icon name="percent" class="mr-1 text-lightBlue" /><div>借款利息偿还</div>
+                            </div>
+                            <div class="jitems-center mt-1 w-full flex justify-between">
+                                <span class="text-gray">年度偿还</span>
+                                <div class="ml-3 w-64">
+                                    <el-input v-model="stage.key1" clearable placeholder="请输入" />
+                                </div>
+                            </div>
+                        </div>
+                        <div class="cash-in-list-item text-sm">
+                            <div class="flex items-center font-bold">
+                                <img :src="chengbenPng" class="icon-avatar mr-1">
+                                <div>经营成本</div>
+                            </div>
+                            <div class="mt-1 w-full flex items-center justify-between">
+                                <span class="text-gray">养护、小修费</span>
+                                <div class="ml-3 w-64">
+                                    <el-input v-model="stage.key1" clearable placeholder="请输入" />
+                                </div>
+                            </div>
+                            <div class="mt-1 w-full flex items-center justify-between">
+                                <span class="text-gray">大修费</span>
+                                <div class="ml-3 w-64">
+                                    <el-input v-model="stage.key1" clearable placeholder="请输入" />
+                                </div>
+                            </div>
+                            <div class="mt-1 w-full flex items-center justify-between">
+                                <span class="text-gray">资本性支出</span>
+                                <div class="ml-3 w-64">
+                                    <el-input v-model="stage.key1" clearable placeholder="请输入" />
+                                </div>
+                            </div>
+                            <div class="mt-1 w-full flex items-center justify-between">
+                                <span class="text-gray">运营管理费</span>
+                                <div class="ml-3 w-64">
+                                    <el-input v-model="stage.key1" clearable placeholder="请输入" />
+                                </div>
+                            </div>
+                            <div class="mt-1 w-full flex items-center justify-between">
+                                <span class="text-gray">其他费用</span>
+                                <div class="ml-3 w-64">
+                                    <el-input v-model="stage.key1" clearable placeholder="请输入" />
+                                </div>
+                            </div>
+                        </div>
+                        <div class="cash-in-list-item text-sm">
+                            <div class="flex items-center font-bold">
+                                <img :src="shuijinPng" class="icon-avatar mr-1">
+                                <div>运营期税金</div>
+                            </div>
+                            <div class="mt-1 w-full flex items-center justify-between">
+                                <span class="text-gray">年度税金</span>
+                                <div class="ml-3 w-64">
+                                    <el-input v-model="stage.key1" clearable placeholder="请输入" />
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="cash-in-list1 mt-2 flex justify-between">
+                        <div class="cash-in-list-item text-sm">
+                            <div class="flex font-bold">
+                                <hc-icon name="bank-card" class="mr-1 text-purple" /><div>其他费用</div>
+                            </div>
+                            <div class="jitems-center mt-1 w-full flex justify-between">
+                                <span class="text-gray">年度费用</span>
+                                <div class="ml-3 w-64">
+                                    <el-input v-model="stage.key1" clearable placeholder="请输入" />
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </hc-card-item>
+            </div>
+        </div>
+        <div class="mt-4 text-center">
+            <el-button type="info" style="background-color: white; color: black; border-color: white" @click="dialogSubmit">退出</el-button>
+            <el-button type="primary" style="background-color: #2550A2; color: white; border-color: #2550A2" @click="dialogClose">保存</el-button>
+        </div>
+    </hc-drawer>
 </template>
 
 <script setup>
 import { ref, watch } from 'vue'
+import jianshePng from '~src/assets/view/jianshe.png'
+import sizePng from '~src/assets/view/size.png'
+import jiechangPng from '~src/assets/view/jiechang.png'
+import chengbenPng from '~src/assets/view/chengben.png'
+import shuijinPng from '~src/assets/view/shuijin.png'
+import totalPng from '~src/assets/view/total.png'
 
 const props = defineProps({
     data: {
@@ -64,7 +230,7 @@ const props = defineProps({
     disabled: {
         type: Boolean,
         default: false,
-    }
+    },
 })
 
 //事件
@@ -76,25 +242,32 @@ const isShow = defineModel('modelValue', {
 })
 
 //监听
-const formModel = ref(props.data)
+const baseForm = ref(props.data)
 watch(() => props.data, (data) => {
-    formModel.value = data
+    baseForm.value = data
 }, { immediate: true, deep: true })
 
 //监听
 watch(isShow, (val) => {
     if (val) setDataApi()
 })
-
+const stage = ref({
+    
+})
 //设置数据
 const setDataApi = () => {
 
 }
-
+const stageOptions = ref([
+    
+])
+const stageClick = (val) => {
+    console.log(val)
+}
 //新增、编辑 显示
 const formRef = ref(null)
 const formRules = {
-    name: {required: true, trigger: 'blur', message: '请输入菜单名称'},
+    name: { required: true, trigger: 'blur', message: '请输入菜单名称' },
 }
 
 //新增、编辑提交
@@ -107,7 +280,62 @@ const dialogSubmit = () => {
 //新增、编辑关闭
 const dialogClose = () => {
     isShow.value = false
-    formModel.value = {}
+    baseForm.value = {}
     emit('close')
 }
 </script>
+
+<style lang="scss">
+.hac-card-item.hc-card-item-box {
+    background: white;
+    .hc-card-item-header {
+        .item-header, .item-extra {
+            height: 100%;
+        }
+        .item-extra {
+            margin-left: 14px;
+        }
+    }
+}
+
+.hac-card-title {
+    color: #000;
+    position: relative;
+    display: flex;
+    align-items: center;
+    height: 100%;
+    margin-left: 8px;
+    &::before {
+        content: '';
+        position: relative;
+        display: inline-block;
+        width: 5px;
+        height: 18px;
+        border-radius: 10px;
+        background-color: var(--el-color-primary-dark-2);
+        right: 8px;
+    }
+}
+.cash-in-list{
+    width: 100%;
+    .cash-in-list-item{
+        padding: 10px;
+        width: 48%;
+        border: 1px solid #E6E6E6;
+     
+   }
+}
+.cash-in-list1{
+    width: 100%;
+    .cash-in-list-item{
+        padding: 10px;
+        width: 32%;
+        border: 1px solid #E6E6E6;
+     
+   }
+}
+.icon-avatar{
+    width: 14px;
+    height: 14px;
+}
+</style>

+ 1 - 1
src/renderer/src/views/project/modules/project-list.vue

@@ -88,7 +88,7 @@
                                 </el-table>
                                 <HcInfoTable v-if="yearData.list && yearData.list.length > 0" class="mt-[-1px]">
                                     <tr>
-                                        <hc-info-table-td is-title width="128px" center>全年计划完成投资</hc-info-table-td>
+                                        <hc-info-table-td is-title width="128px" center>全年完成投资</hc-info-table-td>
                                         <hc-info-table-td center width="100px">{{ yearData.list[yearIndex].yearlyInvest || "-" }}</hc-info-table-td>
                                         <hc-info-table-td is-title width="100px" center>存在问题</hc-info-table-td>
                                         <hc-info-table-td center>{{ yearData.list[yearIndex]?.questionable || '-' }}</hc-info-table-td>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 156 - 156
yarn.lock


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio