Bladeren bron

Merge remote-tracking branch 'origin/master'

ZaiZai 2 jaren geleden
bovenliggende
commit
8a0ed9333c

+ 45 - 0
src/styles/static/actual.scss

@@ -0,0 +1,45 @@
+.table_box{
+    height: calc(100vh - 210px);overflow-y: auto;   
+}
+
+
+.hc-card-item-sub {
+    position: relative;
+    padding: 20px;
+    .item-sub-title {
+        font-size: 15px;
+    }
+    .item-sub-num {
+        position: relative;
+        margin-top: 15px;
+        text-align: right;
+        .num {
+            font-size: 38px;
+            font-weight: bold;
+        }
+        .text {
+            margin-left: 3px;
+            font-size: 15px;
+            color: inherit;
+        }
+    }
+}
+.hac-row-total-item {
+    position: relative;
+    font-size: 14px;
+    padding: 16px 0;
+    border-radius: 3px;
+    text-align: center;
+    background: #ffffff;
+    border: 1px solid #f0f4fa;
+    .num {
+        font-size: 20px;
+        font-weight: bold;
+        color: var(--el-color-primary);
+    }
+    .text {
+        margin-top: 8px;
+    }
+}
+
+

+ 105 - 4
src/views/static/actual.vue

@@ -1,13 +1,114 @@
 <template>
-    <HcCard scrollbar>
-        11111111
-    </HcCard>
+     <el-scrollbar class="hc-main-scrollbar">
+        <div class="hc-main-row">
+            <el-row :gutter="14" style="justify-content: flex-end;">
+                <div class="ml-4">
+                    <el-button size="large" type="primary" @click="importModalClick">
+                        <HcIcon name="upload-cloud"/>
+                        <span>导入</span>
+                    </el-button>
+                </div>
+                <div class="w-36 ml-4">
+                    <el-select v-model="checkyear" block clearable placeholder="选择年份" size="large">
+                        <el-option v-for="item in yearoptions" :label="item.name" :value="item.key"/>
+                    </el-select>
+                </div>
+            </el-row>
+            <el-row :gutter="14" class="mt-4">
+                    <el-col :span="6">
+                        <HcGradientCard color="purple1">
+                            <div class="hc-card-item-sub">
+                                <div class="item-sub-title">截至目前总合同额</div>
+                                <div class="item-sub-num">
+                                    <span class="num">1200</span>
+                                    <span class="text">万</span>
+                                </div>
+                            </div>
+                        </HcGradientCard>
+                    </el-col>
+                    <el-col :span="6">
+                        <HcGradientCard color="blue1">
+                            <div class="hc-card-item-sub">
+                                <div class="item-sub-title">截至目前项目总测算成本</div>
+                                <div class="item-sub-num">
+                                    <span class="num">560</span>
+                                    <span class="text">万</span>
+                                </div>
+                            </div>
+                        </HcGradientCard>
+                    </el-col>
+                    <el-col :span="6">
+                        <HcGradientCard color="red1">
+                            <div class="hc-card-item-sub">
+                                <div class="item-sub-title">截至目前总实际支出成本</div>
+                                <div class="item-sub-num">
+                                    <span class="num">90</span>
+                                    <span class="text">万</span>
+                                </div>
+                            </div>
+                        </HcGradientCard>
+                    </el-col>
+                    <el-col :span="6">
+                        <HcGradientCard color="purple1">
+                            <div class="hc-card-item-sub">
+                                <div class="item-sub-title">截至目前总回款</div>
+                                <div class="item-sub-num">
+                                    <span class="num">125</span>
+                                    <span class="text">万</span>
+                                </div>
+                            </div>
+                        </HcGradientCard>
+                    </el-col>
+            </el-row>
+            
+        
+        
+           
+        
+        </div>
+        <HcTabsSimple :cur="tabsKey" :datas="tabsData" @tabClick="tabsClick" class="mt-6" >
+                    <template #tab-all>
+                        <TabAll/>
+                    </template>
+                    <template #tab-month>
+                        <div>22222</div>
+                    </template>
+                    <template #tab-decost>
+                        333
+                    </template>
+                    <template #tab-mannager>
+                        44
+                    </template>
+        
+         </HcTabsSimple>
+    </el-scrollbar>
 </template>
 
  <script setup>
  import {ref, watch} from "vue";
+ import TabAll from './components/tab-all.vue'
+
+const importModalClick=()=>{
+
+}
+const checkyear=ref('')
+const yearoptions=ref([
+    {name:'2021年',key:2021,},
+    {name:'2022年',key:2022,},
+    {name:'2023年',key:2023,},
+])
+const tabsKey=ref('all')
+const tabsData=ref([
+    {icon: 'bar-chart-box', label: '汇总统计', key: 'all'},
+    {icon: 'bar-chart-box', label: '月度统计', key: 'month'},
+    {icon: 'bar-chart-box', label: '部门支出统计', key: 'decost'},
+    {icon: 'bar-chart-box', label: '人工/管理统计支出占比', key: 'mannager'},
+])
+const tabsClick = (key) => {
+    tabsKey.value = key
+}
 </script>
 <style lang="scss" scoped>
-@import "~src/styles/home/index.scss";
+@import "~src/styles/static/actual.scss";
 
 </style>

+ 267 - 0
src/views/static/components/tab-all.vue

@@ -0,0 +1,267 @@
+<template>
+          <div class="bg-white p-2" >
+            <el-row :gutter="14" style="justify-content: flex-end;">
+            
+                <div class="w-36 ml-4 mr-2" >
+                    <el-select v-model="costcheck" block clearable placeholder="项目回款明细" size="large">
+                        <el-option v-for="item in costdetail" :label="item.name" :value="item.key"/>
+                    </el-select>
+                </div>
+            </el-row>
+            <div class="table_box">
+                <el-table :data="tableData" border class="mt-4"  v-if="costcheck==1">
+                <el-table-column v-for="item in tableColData"  align="center"
+                :prop="item.id"
+                :label="item.name"
+                :key="item.id">
+                    <el-table-column v-for="item1 in item.children" align="center"
+                        :prop="item1.id"
+                        :label="item1.name"
+                        :key="item1.id">
+                            <el-table-column v-for="item2 in item1.children" align="center"
+                            :prop="item2.id"
+                            :label="item2.name"
+                            :key="item2.id">
+                        </el-table-column>
+                    </el-table-column>
+                </el-table-column>
+            </el-table>
+            <el-table :data="tableData" border class="mt-4" v-if="costcheck==2" :header-cell-style="{ background:'#F5F7FA'}" >
+                <el-table-column 
+                v-for="item in tableprojectColData"  
+                :prop="item.id"
+                :label="item.name"
+                :key="item.id"
+                
+                ></el-table-column>
+            </el-table>
+            <el-table :data="tableData" border class="mt-4" v-if="costcheck!=='2'&&costcheck!=='1'" :header-cell-style="{ background:'#F5F7FA'}" >
+                <el-table-column 
+                v-for="item in otherColData"  
+                :prop="item.id"
+                :label="item.name"
+                :key="item.id"
+                
+                ></el-table-column>
+            </el-table>
+            </div>
+        
+                       
+         </div>
+</template>
+
+<script setup>
+import {ref, watch} from "vue";
+
+const props = defineProps({
+    cur: {
+        type: [String,Number],
+        default: ''
+    },
+})
+
+const tabsKey = ref(props.cur)
+
+//监听
+watch(() => [
+    props.cur,
+], ([key]) => {
+    tabsKey.value = key
+    console.log(key)
+})
+
+
+const tableData=ref([
+    {time:'一月',beginremain:'2000'},
+    {time:'二月',beginremain:'2000'},
+    {time:'三月',beginremain:'2000'},
+    {time:'四月',beginremain:'2000'},
+    {time:'五月',beginremain:'2000'},
+    {time:'六月',beginremain:'2000'},  
+    {time:'七月',beginremain:'2000'},
+    {time:'八月',beginremain:'2000'},
+    {time:'九月',beginremain:'2000'},
+    {time:'十月',beginremain:'2000'},
+    {time:'十一月',beginremain:'2000'},
+    {time:'十二月',beginremain:'2000'},
+
+])
+const tableColData=ref([
+        {
+          id: 'time',
+          name: '时间'
+        },
+        {
+          id: 'beginremain',
+          name: '期初上账余额'
+        },
+        {
+          id: 'beginremain',
+          name: '回款',
+          children:[
+                {
+                id: 'beginremain',
+                name: '计划回款'
+                },
+                {
+                id: 'beginremain',
+                name: '项目回款'
+                },
+                {
+                id: 'beginremain',
+                name: '营业外收入'
+                },
+                {
+                id: 'beginremain',
+                name: '过账资金'
+                },
+                {
+                id: 'beginremain',
+                name: '项目保证金、押金退回'
+                },
+          ]
+        },
+        {
+          id: 'beginremain',
+          name: '借还款',
+          children:[
+                {
+                id: 'beginremain',
+                name: '借入'
+                },
+                {
+                id: 'beginremain',
+                name: '偿还本金'
+                },
+                {
+                id: 'beginremain',
+                name: '偿还利息'
+                },
+          
+              
+          ]
+        },
+        {
+          id: 'beginremain',
+          name: '支出',
+          
+          children:[
+                {
+                id: 'beginremain',
+                name: '员工借款'
+                },
+                {
+                id: 'beginremain',
+                name: '员工借支还款'
+                },
+                {
+                id: 'beginremain',
+                name: '费用',
+
+                children:[
+                    {
+                    id: 'beginremain',
+                    name: '差旅费、招待费'
+                    },
+                    {
+                    id: 'beginremain',
+                    name: '人员工资、五险一金'
+                    },
+                    {
+                    id: 'beginremain',
+                    name: '税金'
+                    },
+                    {
+                    id: 'beginremain',
+                    name: '外包费'
+                    },
+                    {
+                    id: 'beginremain',
+                    name: '商务费'
+                    },   {
+                    id: 'beginremain',
+                    name: '办公房租、物业水电'
+                    },
+                    {
+                    id: 'beginremain',
+                    name: '综合报销'
+                    },  {
+                    id: 'beginremain',
+                    name: '费用合计'
+                    },
+                ]
+                },
+               
+          ]
+        },
+     
+       
+        {
+          id: 'beginremain',
+          name: '期末账上余额'
+        },
+        {
+          id: 'beginremain',
+          name: '本月未支付'
+        },
+
+])
+const costdetail=ref([
+    {name:'汇总表',key:'1'},
+    {name:'项目回款明细',key:'2'},
+    {name:'借入',key:'3'},
+])
+const tableprojectColData=ref([
+        {
+          id: 'time',
+          name: '时间'
+        },
+        {
+          id: 'name',
+          name: '项目名称'
+        },
+        {
+          id: 'type',
+          name: '项目类型'
+        },
+        {
+          id: 'project',
+          name: '产品线'
+        },
+        {
+          id: 'money',
+          name: '回款金额'
+        },
+])
+const otherColData=ref([
+        {
+          id: 'time',
+          name: '日期'
+        },
+        {
+          id: 'name',
+          name: '对方科目'
+        },
+        {
+          id: 'type',
+          name: '二级科目'
+        },
+        {
+          id: 'project',
+          name: '报销人'
+        },
+        {
+          id: 'import',
+          name: '摘要'
+        },
+        {
+          id: 'money',
+          name: '回款金额'
+        },
+])
+const costcheck=ref('1')
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 1 - 0
src/views/static/components/tab-decost.vue

@@ -0,0 +1 @@
+<template></template>

+ 283 - 0
src/views/static/components/tab-mannager.vue

@@ -0,0 +1,283 @@
+<template>
+    <HcCard>
+        <div class="hc-page-layout-box system-parameter">
+            <HcCardItem ui="hac-card-item w-60 mr-5">
+                <template #header>
+                    <span class="mr-2">财务预算分类:</span>
+                    <el-button _icon hc-btn size="small" type="primary" @click="openpriceEdit(1)">
+                        <HcIcon name="add"/>
+                    </el-button>
+                </template>
+                <div> <span class="mt-2">预算一级科目:</span></div>
+                <div class="hc-layout-left-box menu mt-3">
+                    <div class="hc-menu-contents-box">
+                        <el-scrollbar>
+                            <HcMenuSimple :datas="menuOptions" :keys="menuKey" :props="menusProps"
+                                          :menus="contextMenu" @menuTap="contextMenuClick"
+                                          @change="menuChange"/>
+                        </el-scrollbar>
+                    </div>
+
+                    <!--预算分类新增编辑弹窗-->
+                    <HcDialog bgColor="#ffffff" widths="22rem" isToBody :show="priceModal" :title="priceTitle" @close="priceModalClose">
+                        <el-form :model="priceform" label-position="top" label-width="auto" size="large">
+                            <el-form-item label="预算一级科目名称:">
+                                <el-input v-model="priceform.name"/>
+                            </el-form-item>
+                        </el-form>
+                    </HcDialog>
+                </div>
+            </HcCardItem>
+
+            <div class="hc-page-content-box">
+                <HcCardItem ui="hac-card-item" actionSize="lg">
+                    <template #header>
+                        <span class="mr-2">预算二级科目:</span>
+                        <el-button _icon hc-btn size="small" type="primary" @click="openEdit(1)">
+                            <HcIcon name="add"/>
+                        </el-button>
+                    </template>
+                    <HcTable :column="tableColumn" :datas="tableData"  :isIndex="false">
+                        <template #action="{row, index}">
+                            <el-button size="small" type="primary" @click="openEdit(2)">编辑</el-button>
+                            <el-button size="small" type="primary" @click="delTask">删除</el-button>
+                        </template>
+                    </HcTable>
+
+                    <!--任务明细弹窗-->
+                    <HcDialog bgColor="#ffffff" widths="24rem" isToBody :show="editTaskModal" :title="taskTitle" @close="testModalClose">
+                        <el-form label-position="top" label-width="auto" :model="formLabelAlign" size="large">
+                            <el-form-item label="预算二级科目名称:">
+                                <el-input v-model="formLabelAlign.name"/>
+                            </el-form-item>
+                        </el-form>
+                    </HcDialog>
+
+                </HcCardItem>
+            </div>
+        </div>
+        <template #action>
+            <HcPages :pages="searchForm" @change="pageChange"/>
+        </template>
+    </HcCard>
+</template>
+
+<script setup>
+import {onMounted, ref, watch} from "vue";
+
+const props = defineProps({
+    cur: {
+        type: [String,Number],
+        default: ''
+    },
+})
+
+const tabsKey = ref(props.cur)
+
+//监听
+watch(() => [
+    props.cur,
+], ([key]) => {
+    tabsKey.value = key
+    console.log(key)
+})
+
+onMounted(() => {
+    setContextMenu()
+})
+
+//左侧菜单
+const menuKey = ref('1')
+const menuOptions = ref([
+    {key: '1', label: '合同洽谈', badge: 0},
+    {key: '2', label: '合同洽谈', badge: 0},
+    {key: '3', label: '合同洽谈', badge: 0},
+    {key: '4', label: '合同洽谈', badge: 0},
+    {key: '5', label: '合同洽谈', badge: 0},
+]);
+
+const menuChange = (item) => {
+    console.log(item)
+    menuKey.value = item?.key
+}
+const menusProps = ref({
+    key: 'key',
+    label: 'label'
+})
+
+//菜单的右键菜单
+const contextMenu = ref([])
+const setContextMenu = () => {
+    let newArr = [];
+    newArr.push({icon: 'draft', label: '编辑分类', key: "edit"})
+    newArr.push({icon: 'delete-bin', label: '删除分类', key: "del"})
+
+    contextMenu.value = newArr
+}
+
+//菜单的右键菜单被点击
+const contextMenuClick = ({key, item}) => {
+    if (key === 'edit') {
+        openpriceEdit(2)
+        menuKey.value = item?.key
+    } else if (key === 'del') {
+        window?.$messageBox?.alert('您确定要删除该预算分类信息吗? 一旦注销数据将彻底清除,请谨慎操作?', '删除提醒', {
+            showCancelButton: true,
+            confirmButtonText: '确认注销',
+            cancelButtonText: '取消',
+            type: 'warning',
+            callback: (action) => {
+                if (action === 'confirm') {
+                    console.log(11111);
+                }
+            }
+        })
+    }
+}
+
+const priceTitle = ref('')
+const priceModal = ref(false)
+const openpriceEdit = (type) => {
+    if (type === 1) {
+        priceTitle.value = '新增分类'
+    } else {
+        priceTitle.value = '编辑分类'
+    }
+
+    priceModal.value = true
+}
+
+const priceform = ref({})
+const priceModalClose = () => {
+    priceModal.value = false
+}
+
+const taskTitle = ref('')
+const openEdit = (type) => {
+    if (type === 1) {
+        taskTitle.value = '新增'
+    } else {
+        taskTitle.value = '编辑'
+    }
+
+    editTaskModal.value = true
+}
+
+
+const editTaskModal = ref(false)
+const testModalClose = () => {
+    editTaskModal.value = false
+}
+
+const delTask = () => {
+    window?.$messageBox?.alert('您确定要删除该预算科目吗? 一旦注销数据将彻底清除,请谨慎操作?', '删除提醒', {
+        showCancelButton: true,
+        confirmButtonText: '确认注销',
+        cancelButtonText: '取消',
+        type: 'warning',
+        callback: (action) => {
+            if (action === 'confirm') {
+                console.log(11111);
+            }
+        }
+    })
+}
+
+const tableColumn = [
+    {key: 'name', name: '预算二级科目',align:'center'},
+    // {key: 'text', name: '任务内容'},
+    // {key: 'color', name: '完成指标'},
+    {key: 'action', name: '操作', width: 200}
+]
+const tableData = ref([
+    {name: '名称1', text: '文本1', color: 'red'},
+    {name: '名称2', text: '文本2', color: 'blue'},
+    {name: '名称3', text: '文本3', color: '无'}
+])
+
+const formLabelAlign = ref({
+    name: '',
+    region: '',
+    type: '',
+})
+
+const searchForm = ref({
+    postType: '', name: '',
+    current: 1, size: 20, total: 0
+})
+//分页被点击
+const pageChange = ({current, size}) => {
+    searchForm.value.current = current
+    searchForm.value.size = size
+}
+</script>
+
+<style lang="scss">
+.hc-page-layout-box.system-parameter {
+    display: flex;
+    position: relative;
+    // height: calc(100vh - 228px);
+    .hc-layout-left-box.menu {
+        width: 100%;
+        height: 100%;
+        position: relative;
+        background: inherit;
+        margin-right: auto;
+        border-radius: 0;
+        box-shadow: none;
+        .hc-menu-contents-box {
+            position: relative;
+            padding: 0;
+            height: 100%;
+            // height: calc(100% - 60px);
+        }
+        .hc-menu-simple-box {
+            padding: 0;
+            .item-box {
+                box-shadow: none;
+                padding: 8px 10px;
+                border-radius: 4px;
+                background: var(--el-color-primary-light-8);
+                .label-box {
+                    color: #8c8c8c;
+                }
+                .menu-icon {
+                    margin-left: 20px;
+                    background: inherit;
+                    .menu-popover-icon {
+                        color: #8c8c8c;
+                        .hc-icon-i {
+                            font-size: 20px;
+                            line-height: initial;
+                        }
+                    }
+                }
+            }
+            .item-box.active {
+                background: var(--el-color-primary-light-5);
+                .label-box {
+                    color: white;
+                }
+                .menu-icon .menu-popover-icon {
+                    color: white;
+                }
+            }
+        }
+        .hc-menu-header-box {
+            position: relative;
+            padding: 15px 18px;
+            display: flex;
+            align-items: center;
+            border-bottom: 1px solid #E9E9E9;
+            .name {
+                flex: auto;
+                position: relative;
+            }
+        }
+    }
+    .hc-page-content-box {
+        flex: 1;
+        position: relative;
+    }
+}
+</style>

+ 1 - 0
src/views/static/components/tab-month.vue

@@ -0,0 +1 @@
+<template></template>