ソースを参照

日志管理,历史日志页面

ZaiZai 2 年 前
コミット
70b7c52475
3 ファイル変更572 行追加3 行削除
  1. 17 0
      src/styles/index.scss
  2. 158 0
      src/styles/logs/index.scss
  3. 397 3
      src/views/logs/index.vue

+ 17 - 0
src/styles/index.scss

@@ -170,3 +170,20 @@ html, body, #app {
         height: calc(100% - 50px);
     }
 }
+
+.hc-card-item-box.hac-bg-grey {
+    background: #f7f7f8;
+    .hc-card-item-header {
+        color: #0F172B;
+        font-size: 17px;
+        font-weight: initial;
+        height: initial;
+    }
+    .el-divider.title-label-divider .el-divider__text {
+        background-color: #f7f7f8;
+        padding: 0 4px;
+        color: #0F172B;
+        font-size: 17px;
+        font-weight: initial;
+    }
+}

+ 158 - 0
src/styles/logs/index.scss

@@ -0,0 +1,158 @@
+.hac-logs-main-body {
+    position: relative;
+    height: 100%;
+    .hac-card-item-logs-header {
+        position: relative;
+        display: flex;
+        align-items: center;
+        .left-box {
+            flex: 1;
+            display: flex;
+            align-items: center;
+        }
+        .right-box {
+            position: relative;
+            margin-left: 24px;
+        }
+    }
+    .hac-logs-row-body {
+        position: relative;
+        height: calc(100% - 78px);
+        display: flex;
+        .hac-logs-user-list-body {
+            position: relative;
+            margin-right: 1rem;
+            height: 100%;
+            width: 245px;
+        }
+        .hac-logs-content-body {
+            flex: 1;
+            height: 100%;
+            position: relative;
+        }
+    }
+}
+
+.hac-logs-user-list-body {
+    .hac-user-list-item {
+        position: relative;
+        .label {
+            color: #0F172B;
+            font-size: 15px;
+            margin-bottom: .75rem;
+        }
+        .user-item {
+            position: relative;
+            display: flex;
+            align-items: center;
+            padding: 5px 5px 5px 16px;
+            border-radius: 5px;
+            cursor: pointer;
+            transition: background .3s;
+            .avatar {
+                width: 26px;
+                height: 26px;
+                object-fit: cover;
+                border-radius: 3px;
+            }
+            .name {
+                flex: 1;
+                position: relative;
+                margin: 0 10px;
+                font-size: 15px;
+                overflow: hidden;
+                display: -webkit-box;
+                -webkit-box-orient: vertical;
+                -webkit-line-clamp: 1;
+            }
+            .state {
+                color: #a9abb2;
+                font-size: 14px;
+            }
+            &:hover, &.cur {
+                background: var(--el-color-primary-light-9);
+                color: var(--el-color-primary-dark-2);
+            }
+        }
+        .user-item + .user-item {
+            margin-top: 4px;
+        }
+    }
+    .hac-user-list-item + .hac-user-list-item {
+        margin-top: 24px;
+    }
+}
+.hac-logs-content-body {
+    .hac-logs-user-info {
+        position: relative;
+        display: flex;
+        align-items: center;
+        .user-avatar {
+            height: 50px;
+            border-radius: 3px;
+            margin-right: 14px;
+        }
+        .user-info {
+            flex: 1;
+            position: relative;
+            height: 50px;
+            line-height: 1.7;
+            .time {
+                color: #a9abb2;
+                font-size: 14px;
+            }
+        }
+    }
+    .hac-log-card-item {
+        position: relative;
+        padding-left: 8px;
+        .hac-log-extra {
+            position: relative;
+            font-size: 14px;
+            .text {
+                color: #a9abb2;
+            }
+            .rate {
+                color: #FE6E22;
+            }
+        }
+        .hac-log-details-body {
+            position: relative;
+            .log-details-item {
+                position: relative;
+                display: flex;
+                align-items: flex-start;
+                .label {
+                    position: relative;
+                    color: #878789;
+                    width: 116px;
+                }
+                .description {
+                    position: relative;
+                    flex: 1;
+                    font-size: 15px;
+                }
+            }
+            .log-details-item + .log-details-item {
+                margin-top: 20px;
+            }
+        }
+        .title-label {
+            color: #0F172B;
+            font-size: 17px;
+        }
+        .hac-log-angle-mark {
+            position: absolute;
+            background: #FE6E22;
+            color: white;
+            width: 40px;
+            height: 40px;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            border-radius: 50%;
+            top: -10px;
+            left: 0px;
+        }
+    }
+}

+ 397 - 3
src/views/logs/index.vue

@@ -1,10 +1,404 @@
 <template>
-    <HcCard>
-        等待开发
-    </HcCard>
+    <div class="hac-logs-main-body">
+        <HcCardItem ui="hac-card-item" style="height: 68px;">
+            <div class="hac-card-item-logs-header">
+                <div class="left-box">
+                    <div class="w-36">
+                        <el-select v-model="searchForm.department" block clearable placeholder="选择部门" size="large">
+                            <el-option label="研发部门" value="1"/>
+                            <el-option label="业务部门" value="2"/>
+                            <el-option label="人事部门" value="3"/>
+                        </el-select>
+                    </div>
+                    <div class="w-36 ml-2">
+                        <el-select v-model="searchForm.state" block clearable placeholder="选择人员" size="large">
+                            <el-option label="张三" value="1"/>
+                            <el-option label="李四" value="2"/>
+                            <el-option label="王五" value="3"/>
+                        </el-select>
+                    </div>
+                    <div class="w-36 ml-4">
+                        <el-date-picker class="block" v-model="searchForm.startTime" type="month" value-format="YYYY-MM" placeholder="开始日期" clearable size="large"/>
+                    </div>
+                    <div class="mx-2">~</div>
+                    <div class="w-36">
+                        <el-date-picker class="block" v-model="searchForm.endTime" type="month" value-format="YYYY-MM" placeholder="结束日期" clearable size="large"/>
+                    </div>
+                    <div class="ml-4">
+                        <el-button size="large" type="primary" @click="searchClick">
+                            <HcIcon name="search-2"/>
+                            <span>搜索</span>
+                        </el-button>
+                    </div>
+                    <div class="ml-2">
+                        <el-button size="large" @click="resetClick">
+                            <HcIcon name="close-circle"/>
+                            <span>重置</span>
+                        </el-button>
+                    </div>
+                </div>
+                <div class="right-box">
+                    <el-button size="large" type="warning" v-if="isEditState" @click="isEditState = false">
+                        <HcIcon name="check-double"/>
+                        <span>提交日志</span>
+                    </el-button>
+                    <el-button size="large" type="primary" v-else @click="isEditState = true">
+                        <HcIcon name="add"/>
+                        <span>写日志</span>
+                    </el-button>
+                </div>
+            </div>
+        </HcCardItem>
+        <div class="mt-4 hac-logs-row-body">
+            <div class="hac-logs-user-list-body">
+                <HcCardItem scrollbar ui="hac-card-item">
+                    <div class="hac-user-list-item">
+                        <div class="label">昨天</div>
+                        <div class="user-item">
+                            <img class="avatar" src="https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com/upload/20220616/8ed37a156f2b177d69181c876892739f.jpg" alt=""/>
+                            <div class="name">张三的日志</div>
+                            <div class="state">已读</div>
+                        </div>
+                        <div class="user-item cur">
+                            <img class="avatar" src="https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com/upload/20220616/8ed37a156f2b177d69181c876892739f.jpg" alt=""/>
+                            <div class="name">张三的日志</div>
+                            <div class="state">已读</div>
+                        </div>
+                        <div class="user-item">
+                            <img class="avatar" src="https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com/upload/20220616/8ed37a156f2b177d69181c876892739f.jpg" alt=""/>
+                            <div class="name">张三的日志</div>
+                            <div class="state">已读</div>
+                        </div>
+                    </div>
+                    <div class="hac-user-list-item">
+                        <div class="label">2023-04-23 星期一</div>
+                        <div class="user-item">
+                            <img class="avatar" src="https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com/upload/20220616/8ed37a156f2b177d69181c876892739f.jpg" alt=""/>
+                            <div class="name">张三的日志</div>
+                            <div class="state">已读</div>
+                        </div>
+                        <div class="user-item">
+                            <img class="avatar" src="https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com/upload/20220616/8ed37a156f2b177d69181c876892739f.jpg" alt=""/>
+                            <div class="name">张三的日志</div>
+                            <div class="state">已读</div>
+                        </div>
+                        <div class="user-item">
+                            <img class="avatar" src="https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com/upload/20220616/8ed37a156f2b177d69181c876892739f.jpg" alt=""/>
+                            <div class="name">张三的日志</div>
+                            <div class="state">已读</div>
+                        </div>
+                    </div>
+                </HcCardItem>
+            </div>
+            <div class="hac-logs-content-body">
+                <HcCardItem scrollbar ui="hac-card-item">
+                    <div class="hac-logs-user-info">
+                        <img class="user-avatar" src="https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com/upload/20220616/8ed37a156f2b177d69181c876892739f.jpg" alt=""/>
+                        <div class="user-info">
+                            <div class="name">张三的日志</div>
+                            <div class="time">2023-02-12 21:08 添加</div>
+                        </div>
+                    </div>
+                    <HcCardItem title="风险预警" ui="hac-bg-grey mt-12">
+                        <el-input v-model="riskWarning" :autosize="{ minRows: 3, maxRows: 5 }" :readonly="!isEditState" :placeholder="isEditState?'请输入文字说明':'无'" type="textarea"/>
+                    </HcCardItem>
+
+                    <div class="hac-card-title mt-4">
+                        <span class="mr-5">今日工作内容</span>
+                        <el-button _icon hc-btn size="small" type="primary" v-if="isEditState">
+                            <HcIcon name="add"/>
+                        </el-button>
+                    </div>
+
+                    <template v-if="isEditState">
+                        <div class="mt-6 hac-log-card-item">
+                            <HcCardItem ui="hac-bg-grey">
+                                <template #header>
+                                    <div class="ml-4">关联的任务</div>
+                                </template>
+                                <template #extra>
+                                    <el-button size="default" type="primary" hc-btn @click="associatedTask">
+                                        <HcIcon name="add"/>
+                                        <span>关联任务</span>
+                                    </el-button>
+                                </template>
+                                <HcTable :isIndex="false" :column="tableTaskColumn" :datas="tableTaskData">
+                                    <template #key2="{row}">
+                                        <el-input v-model="row.key2" placeholder="进度(%)"/>
+                                    </template>
+                                    <template #action="{row,index}">
+                                        <el-button plain size="small" type="danger">
+                                            <HcIcon name="close"/>
+                                            <span>移除</span>
+                                        </el-button>
+                                    </template>
+                                </HcTable>
+
+                                <div class="title-label mt-6 mb-3">工作内容描述</div>
+                                <el-input v-model="riskWarning" :autosize="{ minRows: 3, maxRows: 5 }" placeholder="请输入文字说明" type="textarea"/>
+
+                                <el-divider class="title-label-divider" content-position="left" border-style="dashed">费用报销</el-divider>
+
+                                <div class="hac-log-form-box">
+                                    <el-form ref="formRef" inline :model="formModel" :rules="formRules">
+                                        <el-form-item label="费用报销:" prop="key1" class="w-72">
+                                            <el-select v-model="formModel.key1" block clearable placeholder="费用报销">
+                                                <el-option label="审计费" value="1"/>
+                                                <el-option label="招聘费" value="2"/>
+                                                <el-option label="水电费" value="3"/>
+                                            </el-select>
+                                        </el-form-item>
+                                        <el-form-item label="费用金额:" prop="key2" class="w-72">
+                                            <el-input v-model="formModel.key2" placeholder="请输入费用金额(元)" />
+                                        </el-form-item>
+                                    </el-form>
+                                </div>
+
+                            </HcCardItem>
+                            <div class="hac-log-angle-mark">1</div>
+                        </div>
+                        <div class="mt-6 hac-log-card-item">
+                            <HcCardItem ui="hac-bg-grey">
+                                <template #header>
+                                    <div class="ml-4">关联的任务</div>
+                                </template>
+                                <template #extra>
+                                    <el-button size="default" type="primary" hc-btn>
+                                        <HcIcon name="add"/>
+                                        <span>关联任务</span>
+                                    </el-button>
+                                </template>
+                                <HcTable :isIndex="false" :column="tableTaskColumn" :datas="tableTaskData">
+                                    <template #key2="{row}">
+                                        <el-input v-model="row.key2" placeholder="进度(%)"/>
+                                    </template>
+                                    <template #action="{row,index}">
+                                        <el-button plain size="small" type="danger">
+                                            <HcIcon name="close"/>
+                                            <span>移除</span>
+                                        </el-button>
+                                    </template>
+                                </HcTable>
+
+                                <div class="title-label mt-6 mb-3">工作内容描述</div>
+                                <el-input v-model="riskWarning" :autosize="{ minRows: 3, maxRows: 5 }" placeholder="请输入文字说明" type="textarea"/>
+
+                                <el-divider class="title-label-divider" content-position="left" border-style="dashed">费用报销</el-divider>
+
+                                <div class="hac-log-form-box">
+                                    <el-form ref="formRef" inline :model="formModel" :rules="formRules">
+                                        <el-form-item label="费用报销:" prop="key1" class="w-72">
+                                            <el-select v-model="formModel.key1" block clearable placeholder="费用报销">
+                                                <el-option label="审计费" value="1"/>
+                                                <el-option label="招聘费" value="2"/>
+                                                <el-option label="水电费" value="3"/>
+                                            </el-select>
+                                        </el-form-item>
+                                        <el-form-item label="费用金额:" prop="key2" class="w-72">
+                                            <el-input v-model="formModel.key2" placeholder="请输入费用金额(元)" />
+                                        </el-form-item>
+                                    </el-form>
+                                </div>
+
+                            </HcCardItem>
+                            <div class="hac-log-angle-mark">2</div>
+                        </div>
+                    </template>
+
+                    <template v-else>
+                        <div class="mt-6 hac-log-card-item">
+                            <HcCardItem ui="hac-bg-grey">
+                                <template #extra>
+                                    <div class="hac-log-extra">
+                                        <span class="text">所关联任务目前完成率:</span>
+                                        <span class="rate">80%</span>
+                                    </div>
+                                </template>
+                                <div class="hac-log-details-body">
+                                    <div class="log-details-item">
+                                        <div class="label">所属任务:</div>
+                                        <div class="description">【任务内容描述xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+                                            xxxxxxxxxxxxxxxxxxxxxxxxx】</div>
+                                    </div>
+                                    <div class="log-details-item">
+                                        <div class="label">工作内容描述:</div>
+                                        <div class="description">今日完成水泥混凝土试验记录表xxxxxxxxxxxxxxxxx</div>
+                                    </div>
+                                </div>
+                            </HcCardItem>
+                            <div class="hac-log-angle-mark">1</div>
+                        </div>
+                        <div class="mt-6 hac-log-card-item">
+                            <HcCardItem ui="hac-bg-grey">
+                                <template #extra>
+                                    <div class="hac-log-extra">
+                                        <span class="text">所关联任务目前完成率:</span>
+                                        <span class="rate">80%</span>
+                                    </div>
+                                </template>
+                                <div class="hac-log-details-body">
+                                    <div class="log-details-item">
+                                        <div class="label">所属任务:</div>
+                                        <div class="description">【任务内容描述xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+                                            xxxxxxxxxxxxxxxxxxxxxxxxx】</div>
+                                    </div>
+                                    <div class="log-details-item">
+                                        <div class="label">工作内容描述:</div>
+                                        <div class="description">今日完成水泥混凝土试验记录表xxxxxxxxxxxxxxxxx</div>
+                                    </div>
+                                </div>
+                            </HcCardItem>
+                            <div class="hac-log-angle-mark">2</div>
+                        </div>
+                    </template>
+                </HcCardItem>
+            </div>
+        </div>
+
+        <!--关联任务-->
+        <HcDialog bgColor="#ffffff" isToBody isTable isRowFooter :loading="taskModalLoading" :show="taskModal" title="关联任务" widths="62rem" @close="closeTaskClick">
+            <template #header>
+                <div class="header-box">
+                    <span class="mr-5">关联的任务</span>
+                    <span class="text-orange text-sm">选择当天日志所描述的任务</span>
+                </div>
+            </template>
+
+            <HcTable :column="tableTaskColumn1" :datas="tableTaskData1" :loading="tableTaskLoading">
+                <template #action="{row,index}">
+                    <el-button plain size="small" type="primary" @click="row.isRelated = true" v-if="!row.isRelated">
+                        <HcIcon name="link" :line="false"/>
+                        <span>关联</span>
+                    </el-button>
+                    <el-button plain size="small" type="danger" @click="row.isRelated = false" v-else>
+                        <HcIcon name="link-unlink-m" :line="false"/>
+                        <span>取消</span>
+                    </el-button>
+                </template>
+            </HcTable>
+            <template #leftRowFooter>
+                <el-button size="large" @click="closeTaskClick">
+                    <HcIcon name="close"/>
+                    <span>取消</span>
+                </el-button>
+                <el-button size="large" type="primary" @click="saveTaskClick">
+                    <HcIcon name="check"/>
+                    <span>确认关联</span>
+                </el-button>
+            </template>
+            <template #rightRowFooter>
+                <HcPages :pages="searchTaskForm" @change="pageTaskChange"/>
+            </template>
+        </HcDialog>
+
+    </div>
 </template>
 
 <script setup>
 import {ref} from "vue";
 
+//搜索表单
+const searchForm = ref({department: null, state: null, startTime: null, endTime: null})
+
+//搜索
+const searchClick = () => {
+    searchForm.value.current = 1;
+}
+
+//重置
+const resetClick = () => {
+    searchForm.value = {}
+}
+
+//风险预警
+const riskWarning = ref('')
+
+//当前状态,false查看模式,true写日志模式
+const isEditState = ref(false)
+
+//已关联的任务
+const tableTaskColumn = [
+    {key: 'key', name: '任务内容'},
+    {key: 'key1', name: '状态', width: '120', align: 'center'},
+    {key: 'key2', name: '进度(%)', width: '160'},
+    {key: 'key3', name: '起止日期', width: '220', align: 'center'},
+    {key: 'action', name: '操作', width: '90', align: 'center'},
+]
+const tableTaskData = ref([
+    {id: 1, key: 'xxxxxxxxx', key1: '未完成', key2: '', key3: '2022-07-01~2027-04-12'},
+    {id: 2, key: 'xxxxxxxxx', key1: '未完成', key2: '', key3: '2022-07-01~2027-04-12'},
+])
+
+//顶部表单数据
+const formRef = ref(null)
+const formModel = ref({key1: '', key2: ''})
+const formRules = {
+    key1: {
+        required: true,
+        trigger: 'blur',
+        message: "请选择费用报销"
+    },
+    key2: {
+        required: true,
+        trigger: 'blur',
+        message: "请输入费用金融"
+    },
+}
+
+//关联任务弹窗
+const taskModalLoading = ref(false)
+const taskModal = ref(false)
+
+//显示关联任务
+const associatedTask = () => {
+    taskModalLoading.value = false
+    taskModal.value = true
+}
+
+//关联任务分页和搜索
+const searchTaskForm = ref({current: 1, size: 20, total: 0})
+const pageTaskChange = ({current, size}) => {
+    searchTaskForm.value.current = current
+    searchTaskForm.value.size = size
+}
+
+//关联任务表格
+const tableTaskLoading = ref(false)
+const tableTaskColumn1 = [
+    {key: 'key1', name: '任务描述'},
+    {key: 'key2', name: '任务起止日期', width: '220', align: 'center'},
+    {key: 'key3', name: '状态', width: '120', align: 'center'},
+    {key: 'action', name: '操作', width: '90', align: 'center'},
+]
+const tableTaskData1 = ref([
+    {id: 1, key1: 'xxxxxxxxx', key2: '2022-07-01~2027-04-12', key3: '未完成'},
+    {id: 2, key1: 'xxxxxxxxx', key2: '2022-07-01~2027-04-12', key3: '未完成'},
+    {id: 3, key1: 'xxxxxxxxx', key2: '2022-07-01~2027-04-12', key3: '未完成'},
+    {id: 4, key1: 'xxxxxxxxx', key2: '2022-07-01~2027-04-12', key3: '未完成'},
+])
+
+//关闭关联任务弹窗
+const closeTaskClick = () => {
+    taskModalLoading.value = false
+    taskModal.value = false
+}
+
+//提交关联任务弹窗
+const saveTaskClick = () => {
+    taskModalLoading.value = false
+    taskModal.value = false
+}
 </script>
+
+<style lang="scss" scoped>
+@import "~src/styles/logs/index.scss";
+</style>
+
+<style lang="scss">
+.hac-log-form-box .el-form .el-form-item {
+    margin-bottom: 0;
+    .el-form-item__error {
+        display: none;
+    }
+}
+</style>