Merge remote-tracking branch 'origin/dev_4newlayout' into dev_4newlayout

dev
shiji 1 year ago
commit a193a2be8c
  1. 120
      ant-design-vue-jeecg/src/config/router.config.js
  2. 36
      ant-design-vue-jeecg/src/views/newLayout/module/Demo4NewLayoutList.vue
  3. 38
      ant-design-vue-jeecg/src/views/newLayout/task_admin/TaskAdmin.vue
  4. 228
      ant-design-vue-jeecg/src/views/newLayout/task_admin/task_content/TaskContent.vue
  5. 501
      ant-design-vue-jeecg/src/views/newLayout/task_admin/task_content/content_card/ContentCard.vue
  6. 71
      ant-design-vue-jeecg/src/views/newLayout/task_admin/task_content/content_card/HeaderCard.vue

@ -16,7 +16,7 @@ import {
UserLayoutSimulation,
UserLayoutSchedule,
UserLayoutEquip,
PageView,
PageView
} from '@/components/layouts'
/**
@ -301,20 +301,20 @@ export const asyncRouterMap = [
// ]
// }
// #endregion
],
]
},
{
path: '*',
redirect: '/404',
hidden: true, //没有匹配到 就会显示404
hidden: true // 没有匹配到 就会显示404
},
{
path: '/page1',
name: 'page1',
component: TabLayout,
meta: { title: '首页' },
redirect: '/dashboard/analysis',
},
redirect: '/dashboard/analysis'
}
]
/**
@ -331,9 +331,9 @@ export const constantRouterMap = [
{
path: 'loginmall',
name: 'loginmall',
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login'),
},
],
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login')
}
]
},
{
path: '/userbigdata',
@ -344,9 +344,9 @@ export const constantRouterMap = [
{
path: 'loginbigdata',
name: 'loginbigdata',
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login'),
},
],
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login')
}
]
},
{
path: '/loginbx',
@ -357,9 +357,9 @@ export const constantRouterMap = [
{
path: 'loginbx',
name: 'loginbx',
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login'),
},
],
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login')
}
]
},
{
path: '/userdata',
@ -370,9 +370,9 @@ export const constantRouterMap = [
{
path: 'logindata',
name: 'logindata',
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login'),
},
],
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login')
}
]
},
{
path: '/userdroduction',
@ -383,9 +383,9 @@ export const constantRouterMap = [
{
path: 'logindroduction',
name: 'logindroduction',
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login'),
},
],
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login')
}
]
},
{
path: '/userfitting',
@ -396,9 +396,9 @@ export const constantRouterMap = [
{
path: 'loginfitting',
name: 'loginfitting',
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login'),
},
],
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login')
}
]
},
{
path: '/userglobal',
@ -409,9 +409,9 @@ export const constantRouterMap = [
{
path: 'loginglobal',
name: 'loginglobal',
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login'),
},
],
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login')
}
]
},
{
path: '/userworkmanship',
@ -422,9 +422,9 @@ export const constantRouterMap = [
{
path: 'loginworkmanship',
name: 'loginworkmanship',
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login'),
},
],
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login')
}
]
},
{
path: '/userworkorder',
@ -435,9 +435,9 @@ export const constantRouterMap = [
{
path: 'loginworkorder',
name: 'loginworkorder',
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login'),
},
],
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login')
}
]
},
{
path: '/userequip',
@ -448,9 +448,9 @@ export const constantRouterMap = [
{
path: 'loginequip',
name: 'loginequip',
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login'),
},
],
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login')
}
]
},
{
path: '/userschedule',
@ -461,9 +461,9 @@ export const constantRouterMap = [
{
path: 'loginschedule',
name: 'loginschedule',
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login'),
},
],
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login')
}
]
},
{
path: '/usersimulation',
@ -474,9 +474,9 @@ export const constantRouterMap = [
{
path: 'loginsimulation',
name: 'loginsimulation',
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login'),
},
],
component: () => import(/* webpackChu nkName: "user" */ '@/views/user/Login')
}
]
},
{
path: '/user',
@ -487,24 +487,24 @@ export const constantRouterMap = [
{
path: 'login',
name: 'login',
component: () => import(/* webpackChunkName: "user" */ '@/views/user/Login'),
component: () => import(/* webpackChunkName: "user" */ '@/views/user/Login')
},
{
path: 'register',
name: 'register',
component: () => import(/* webpackChunkName: "user" */ '@/views/user/register/Register'),
component: () => import(/* webpackChunkName: "user" */ '@/views/user/register/Register')
},
{
path: 'register-result',
name: 'registerResult',
component: () => import(/* webpackChunkName: "user" */ '@/views/user/register/RegisterResult'),
component: () => import(/* webpackChunkName: "user" */ '@/views/user/register/RegisterResult')
},
{
path: 'alteration',
name: 'alteration',
component: () => import(/* webpackChunkName: "user" */ '@/views/user/alteration/Alteration'),
},
],
component: () => import(/* webpackChunkName: "user" */ '@/views/user/alteration/Alteration')
}
]
},
// {
@ -539,18 +539,18 @@ export const constantRouterMap = [
{
path: 'home',
name: 'TestHome',
component: () => import('@/views/Home'),
},
],
component: () => import('@/views/Home')
}
]
},
{
path: '/404',
component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404'),
component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404')
},
{
path: '/atlas',
component: () => import(/* webpackChunkName: "fail" */ '@/views/xmtp/SeKnowAtlasList'),
component: () => import(/* webpackChunkName: "fail" */ '@/views/xmtp/SeKnowAtlasList')
},
// cms首页,免登录,单独访问页面
@ -558,15 +558,15 @@ export const constantRouterMap = [
// 需要在新窗口打开的页面路径
{
path: '/cms/home', // 这里是你需要设置新窗口打开的页面的路径
component: () => import('@/views/cms/home'),
component: () => import('@/views/cms/home')
},
{
path: '/cms/major', // 这里是你需要设置新窗口打开的页面的路径
component: () => import('@/views/cms/pages/Major/MajorView'),
component: () => import('@/views/cms/pages/Major/MajorView')
},
{
path: '/cms/detail', // 这里是你需要设置新窗口打开的页面的路径
component: () => import('@/views/cms/pages/Detail/DetailView'),
component: () => import('@/views/cms/pages/Detail/DetailView')
},
{
path: '/newLayout/dayu', // 这里是你需要设置新窗口打开的页面的路径
@ -586,10 +586,16 @@ export const constantRouterMap = [
// iconChildClass: 'el-icon-watermelon',
component: () => import('@/views/newLayout/module/Msg')
},
{
path: '/home/taskadmin',
// name: '列表',
// iconChildClass: 'el-icon-watermelon',
component: () => import('@/views/newLayout/task_admin/TaskAdmin')
}
]
},
}
]

@ -3,7 +3,10 @@
<el-container>
<!-- <Menu /> -->
<!-- <el-aside width="66px"></el-aside> -->
<el-aside :width="isCollapse ? '64px' : '200px'" :class="isCollapse ? 'qian' : 'hou'">
<el-aside
:width="isCollapse ? '64px' : '200px'"
:class="isCollapse ? 'qian' : 'hou'"
>
<el-menu
default-active="2"
class="el-menu-vertical-demo"
@ -24,7 +27,11 @@
/>
<div class="title" v-if="show">大禹项目管理系统</div>
<!-- 单级菜单-->
<el-menu-item :index="item.path" v-for="item in asideMenu" :key="item.path">
<el-menu-item
:index="item.path"
v-for="item in asideMenu"
:key="item.path"
>
<i :class="'el-icon-' + item.icon" style="color: #cad5f6"></i>
<span slot="title">{{ item.label }}</span>
</el-menu-item>
@ -60,7 +67,7 @@
// import Main from '../../newLayout/module/Main.vue'
// import Menu from './Msg'
export default {
name: "Demo4NewLayoutList",
name: 'Demo4NewLayoutList',
data() {
return {
show2: true, //
@ -71,18 +78,23 @@ export default {
{
path: '/home/lnfo', //
label: '首页', //
icon: 'menu', //element
icon: 'menu' // element
},
{
path: "/home/lnfos",
path: '/home/lnfos',
label: '视频管理',
icon: 'menu'
},
{
path: "/user",
label: '用户管理',
path: '/home/taskadmin',
label: '全部任务',
icon: 'menu'
},
{
path: '/user',
label: '用户管理',
icon: 'menu'
}
]
}
},
@ -103,7 +115,6 @@ export default {
this.show = !this.show
// show2true/false
this.show2 = !this.show2
},
// 退
logout() {
@ -111,15 +122,13 @@ export default {
// token
// window.sessionStorage.clear()
// this.$router.push('/login')
},
}
},
components: {
// Main,
// Menu
},
};
}
}
</script>
<style lang="less">
// .el-aside {
@ -242,4 +251,3 @@ export default {
line-height: 22px;
}
</style>

@ -0,0 +1,38 @@
<template>
<div class="bigbox">
<!-- <div class="menu"></div> -->
<div class="content"><Content></Content></div>
</div>
</template>
<script>
import Content from './task_content/TaskContent.vue'
export default {
props: ['iscollapse'],
components: {
Content
}
}
</script>
<style lang="less" scoped>
.bigbox {
margin: 1rem 4rem 0 2rem;
display: flex;
.menu {
width: 15%;
height: 80vh;
// background-color: aqua;
}
.content {
width: 100%;
height: 80vh;
//background-color: antiquewhite;
}
.activecontent {
width: 85%;
height: 80vh;
// background-color: antiquewhite;
}
}
</style>

@ -0,0 +1,228 @@
<template>
<div class="bigcontent">
<div class="c_header">
<div class="header_left">
<span>
<i class="el-icon-s-order"></i>
部门任务
</span>
<span>
<i class="el-icon-s-management"></i>
需求任务
</span>
<span class="left_smallbox"></span>
</div>
<div class="header_right">
<span class="right_box"></span>
<span class="right_box"></span>
<span class="right_box"></span>
</div>
</div>
<div class="c_content">
<div class="content_box" v-for="item in TotalData" :key="item.id">
<div class="status_title">
<HeaderCard
:title="item.status"
:color="item.color"
:total="item.total"
></HeaderCard>
</div>
<div class="status_content" @scroll="loadMore(item.id)" ref="box">
<ContenCard
:color="item.color"
:projectData="item.data"
ref="childCard"
></ContenCard>
</div>
</div>
</div>
</div>
</template>
<script>
import ContenCard from './content_card/ContentCard.vue'
import HeaderCard from './content_card/HeaderCard.vue'
// import { getTaskAdmin } from '@/api/manage.js'
import { getAction, getFileAccessHttpUrl } from '@/api/manage.js'
export default {
components: {
ContenCard,
HeaderCard
},
data() {
return {
TotalData: [
{
id: 0,
status: '未发布',
statusNum: 0,
color: 'black',
data: [],
total: '',
currentPage: 1
},
{
id: 1,
status: '开发中',
statusNum: 1,
color: 'blue',
data: [],
total: '',
currentPage: 1
},
{
id: 2,
status: '已提交',
statusNum: 3,
color: 'orange',
data: [],
total: '',
currentPage: 1
},
{
id: 3,
status: '已审核',
color: 'green',
statusNum: 4,
data: [],
total: '',
currentPage: 1
}
],
url: {
list: '/task/task/list',
queryById: 'task/task/queryById'
},
loading: true, //
lastPage: false //
}
},
methods: {
//
async getAllData(index) {
const res = await getAction(this.url.list, {
workStatus: this.TotalData[index].statusNum
})
if (res.success) {
this.TotalData[index].data = res.result.records
this.TotalData[index].total = res.result.total
this.TotalData[index].data.forEach((element) => {
element.headpic = getFileAccessHttpUrl(element.headpic)
element.taskPic = getFileAccessHttpUrl(element.taskPic)
})
} else {
this.$message.warning(res.message)
}
console.log(this.TotalData[1].data)
},
//
async getDataByPage(index, current) {
this.loading = true
if (!this.lastPage) {
const res = await getAction(this.url.list, {
workStatus: this.TotalData[index].statusNum,
pageNo: current
})
this.TotalData[index].data = [
...this.TotalData[index].data,
...res.result.records
]
if (res.result.records.length < 10) {
this.lastPage = true
}
}
},
//
loadMore(index) {
let scrollDom = this.$refs.box
if (
scrollDom[index].clientHeight + scrollDom[index].scrollTop + 1 >=
scrollDom[index].scrollHeight
) {
scrollDom[index].scrollTop -= 10
this.TotalData[index].currentPage =
this.TotalData[index].currentPage + 1
this.getDataByPage(index, this.TotalData[index].currentPage)
}
},
//
async getHeadInformation() {
// const res=await
}
},
created() {
this.getAllData(0)
this.getAllData(1)
this.getAllData(2)
this.getAllData(3)
}
}
</script>
<style lang="less" scoped>
.bigcontent {
width: 100%;
height: 100%;
.c_header {
display: flex;
justify-content: space-between;
width: 100%;
height: 6%;
// background-color: aqua;
.header_left {
display: flex;
justify-content: space-between;
height: 100%;
width: 20%;
line-height: 2.2rem;
font-size: 16px;
color: #666666;
.left_smallbox {
width: 1rem;
height: 0.5rem;
line-height: 2.2rem;
// background-color: #d9d9d9;
}
}
.header_right {
width: 30%;
height: 100%;
display: flex;
justify-content: space-between;
.right_box {
display: inline-block;
width: 30%;
height: 100%;
background: #d9d9d9;
}
}
}
.c_content {
display: flex;
justify-content: space-between;
width: 100%;
height: 100%;
//background-color: aquamarine;
.content_box {
width: 24%;
height: 100%;
//background-color: rgb(230, 186, 129);
.status_title {
height: 8%;
margin-bottom: 2%;
}
.status_content {
height: 90%;
overflow-y: scroll;
// background-color: rgb(224, 163, 163);
}
}
//
.status_content::-webkit-scrollbar {
display: none;
}
}
}
</style>

@ -0,0 +1,501 @@
<template>
<div class="cardcard">
<template v-for="item in projectData">
<div class="card_content" :key="item.id">
<el-card
class="little_card"
:class="
color == 'black'
? { card_black: true }
: color == 'blue'
? { card_blue: true }
: color == 'orange'
? { card_orange: true }
: { card_green: true }
"
>
<div style="padding: 0rem 0rem 0 1.5rem">
<div class="admin_title">
<template>
<el-checkbox class="check"></el-checkbox>
</template>
<!-- 任务总述 -->
<el-tooltip
v-if="item.taskName.length > 13"
:content="item.taskName"
placement="top"
>
<span>
{{
item.taskName.length > 13
? item.taskName.slice(0, 11) + '...'
: item.taskName
}}
</span>
</el-tooltip>
<span v-else>
{{
item.taskName.length > 18
? item.taskName.slice(0, 17) + '...'
: item.taskName
}}
</span>
<!-- 头像 -->
<span class="pic" @click="LookPeople(item.managerUsers)">
<el-tooltip
:content="item.managerUsers_dictText"
placement="top"
>
<img
:src="item.headpic"
alt=""
style="
width: 100%;
height: 100%;
cursor: pointer;
border-radius: 50%;
"
/>
</el-tooltip>
</span>
</div>
<!-- 项目内容/判断类型文字文件照片 -->
<div class="substance">
<div v-if="item.contentType == 'text'">
{{ item.taskDescribe }}
</div>
<!-- 类型是图片 -->
<div v-else-if="item.contentType == 'image'" class="sub_image">
<img
:src="item.taskPic"
alt=""
style="
width: 100%;
height: 100%;
border-radius: 10px 10px 10px 10px;
"
/>
</div>
<!-- 类型是文档 -->
<div v-else-if="item.contentType == 'file'" class="sub_document">
<div class="document">
<iframe
:src="item.taskFile"
frameborder="0"
style="
width: 100%;
height: 100%;
border-radius: 10px 10px 10px 10px;
"
></iframe>
</div>
<div class="s_operate">
<div>点击查看</div>
<div>上传文档</div>
</div>
</div>
<div></div>
</div>
<div class="time">
<i class="el-icon-date" style="font-size: 18px"></i>
<!-- <span>项目工期:</span> -->
<div class="timearea">
<!-- <span class="starttime">
{{ (item.startTime || '').slice(0, 10) }}
</span>
<span></span> -->
<span>截止到</span>
<span class="endtime">
{{ (item.expectedEndTime || '').slice(0, 10) }}
</span>
</div>
</div>
<!-- 进度 -->
<div class="schedule">
<span>项目进度:</span>
<span class="s_tiao">
<!-- :percentage="Number(item.schedule)" -->
<el-progress :percentage="30" :show-text="false"></el-progress>
</span>
</div>
<div class="operate">
<div class="o_left">
<el-button
type="primary"
round
class="but"
size="small"
></el-button>
<el-button
type="success"
round
class="but"
size="small"
></el-button>
</div>
<span class="edit">编辑</span>
</div>
</div>
</el-card>
</div>
</template>
<!-- 弹出框 -->
<el-drawer
:visible.sync="drawer"
direction="rtl"
:before-close="handleClose"
trigger="click"
>
<template slot="title">
<i class="el-icon-more" style="cursor: pointer"></i>
<el-dropdown trigger="click" style="position: absolute; left: 3rem">
<span class="el-dropdown-link">
<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>黄金糕</el-dropdown-item>
<el-dropdown-item>狮子头</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
<div class="drawer">
<div class="drawer_header">
<div class="d_content">
<div class="d_pic"></div>
<div class="d_name">夏艳玲</div>
<div class="d_position">xxx码农</div>
<div class="d_cont">
<a href="" style="margin-right: 0.5rem">xx项目</a>
<a href="" style="margin-right: 0.5rem">大禹项目管理</a>
</div>
</div>
</div>
<div class="drawer_body">
<div class="body_title">任务动态</div>
<div class="body_content">
<div class="block">
<el-timeline>
<el-timeline-item timestamp="2018/4/12" placement="top">
<div class="timeline">
<span class="year">09</span><span class="month">12</span>
</div>
<div class="type">设计稿</div>
<div ref="a" class="work_sum">
上传大禹项目管理系统竞赛项目设计稿一份1111
</div>
<el-card style="width: 85%; height: 5rem; margin-left: 1rem">
<iframe
src=""
frameborder="0"
style="width: 100%; height: 100%"
></iframe>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="2018/4/12" placement="top">
<div class="timeline">
<span class="year">09</span><span class="month">12</span>
</div>
<div class="type">设计稿</div>
<div ref="aa" class="work_sum">上传大禹项目设计稿一份</div>
<el-card style="width: 85%; height: 5rem; margin-left: 1rem">
<iframe
src=""
frameborder="0"
style="width: 100%; height: 100%"
></iframe>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</div>
</div>
</div>
</el-drawer>
</div>
</template>
<script>
export default {
props: ['color', 'projectData'],
data() {
return {
drawer: false
}
},
methods: {
LookPeople(userid) {
console.log(userid)
this.drawer = true
this.Check()
},
//
Check() {
const s = '大禹项目'
const ss = '竞赛项目'
const reg = new RegExp('(' + s + ')|(' + ss + ')', 'g')
this.$nextTick(() => {
this.$refs.a.innerHTML = this.$refs.a.innerHTML.replace(
reg,
'<a href="$1">$1</a><a href="$2">$2</a>'
)
})
},
handleClose(done) {
this.$confirm('确认关闭?')
.then((_) => {
done()
})
.catch((_) => {})
}
}
}
</script>
<style lang="less" scoped>
.cardcard {
width: 100%;
height: 100%;
// overflow: scroll;
.card_content {
width: 99%;
.little_card {
width: 100%;
display: flex;
flex-direction: column;
margin-top: 1rem;
//
.admin_title {
display: flex;
justify-content: space-between;
position: relative;
width: 100%;
font-size: 16px;
font-weight: 700;
color: #000000;
.check {
position: absolute;
left: -1.5rem;
}
.pic {
position: relative;
display: inline-block;
width: 1rem;
height: 1rem;
border-radius: 50%;
// background-color: rgb(10, 228, 155);
}
}
//
.substance {
margin-top: 1rem;
font-size: 14px;
color: #999999;
.sub_image {
width: 100%;
height: 20vh;
background-color: rgb(207, 207, 207);
border-radius: 10px 10px 10px 10px;
}
.sub_document {
display: flex;
width: 100%;
height: 20vh;
.document {
width: 55%;
height: 100%;
background-color: #52c93f;
border-radius: 10px 10px 10px 10px;
}
.s_operate {
position: relative;
top: 2.7rem;
left: 1.5rem;
display: flex;
flex-direction: column;
justify-content: space-between;
width: 25%;
height: 40%;
color: #3e75e6;
}
}
}
//
.time {
display: flex;
margin-top: 1rem;
font-size: 13px;
color: #999999;
.timearea {
width: 80%;
margin-left: 1rem;
//background-color: #3e75e6;
.starttime {
width: 45%;
padding: 0.1rem;
display: inline-block;
background: #f0f0f0;
}
.endtime {
width: 45%;
padding: 0.1rem;
display: inline-block;
//background: #f0f0f0;
}
}
}
//
.schedule {
display: flex;
font-size: 13px;
color: #999999;
margin-top: 1rem;
.s_tiao {
top: 0.4rem;
position: relative;
width: 70%;
margin-left: 0.3rem;
}
}
//
.operate {
display: flex;
justify-content: space-between;
width: 100%;
margin-top: 1rem;
.o_left {
display: flex;
width: 60%;
// background-color: antiquewhite;
.but {
width: 50%;
}
}
.edit {
font-size: 13px;
font-weight: 600;
}
}
}
}
//
.drawer_header {
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
height: 20vh;
// background-color: #52c93f;
.d_content {
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
width: 60%;
height: 100%;
.d_pic {
width: 5rem;
height: 5rem;
border-radius: 50%;
background-color: #2147fb;
}
.d_name {
font-weight: bold;
}
.d_position {
font-size: 14px;
color: #8c8a8a;
}
.d_cont {
font-size: 12px;
color: #8c8a8a;
}
}
}
//
.drawer_body {
position: relative;
margin-top: 4vh;
width: 100%;
height: 65vh;
// background-color: #ffa326;
border-top: 1px dotted #d4d4d4;
.body_title {
position: absolute;
width: 40%;
left: 30%;
top: -2%;
background-color: #ffffff;
text-align: center;
}
.body_content {
position: absolute;
top: 1.5rem;
width: 100%;
height: 95%;
// background-color: #52c93f;
.block {
margin-left: 2rem;
.timeline {
position: absolute;
left: -1.3rem;
top: -0.3rem;
width: 3.5rem;
height: 1.5rem;
background-color: #ffffff;
.year {
font-size: 18px;
font-weight: bold;
}
.month {
margin-left: 0.2rem;
font-size: 12px;
}
}
.type {
width: 2.5rem;
background: #c0f1e3;
margin-bottom: 0.5rem;
margin-left: 1.2rem;
font-size: 12px;
color: white;
}
.work_sum {
margin-left: 1rem;
margin-bottom: 1rem;
}
/deep/.el-timeline-item__timestamp.is-top {
// padding-top: 10px;
margin-left: 1rem;
}
/deep/.el-card__body {
padding: 10px;
}
}
}
}
}
// .cardcard::-webkit-scrollbar {
// display: none;
// }
.card_black {
border-left: 4px solid black;
}
.card_blue {
border-left: 4px solid #2147fb;
}
.card_orange {
border-left: 4px solid #ffa326;
}
.card_green {
border-left: 4px solid #52c93f;
}
/deep/.el-drawer {
width: 24% !important;
}
</style>

@ -0,0 +1,71 @@
<template>
<div>
<div
class="card_header"
:class="
color == 'black'
? { black: true }
: color == 'blue'
? { blue: true }
: color == 'orange'
? { orange: true }
: { green: true }
"
>
<span
>{{ title }}<span class="number">{{ total }}</span></span
>
<span class="icon">
<i class="el-icon-plus"></i>
<i class="el-icon-more" style="margin-left: 0.5rem"></i>
</span>
</div>
</div>
</template>
<script>
export default {
props: ['title', 'color', 'total']
}
</script>
<style lang="less" scoped>
.card_header {
display: flex;
justify-content: space-between;
width: 100%;
line-height: 3rem;
font-size: 17px;
color: #333333;
font-weight: 400;
.number {
position: relative;
display: inline-block;
min-width: 1.5rem;
min-height: 1.5rem;
margin-left: 1rem;
border-radius: 50%;
border: 2px solid #999999;
text-align: center;
line-height: 1.3rem;
color: #999999;
}
.icon {
font-weight: bold;
cursor: pointer;
}
}
.black {
border-bottom: 3px solid black;
}
.blue {
border-bottom: 3px solid #2147fb;
}
.orange {
border-bottom: 3px solid #ffa326;
}
.green {
border-bottom: 3px solid #52c93f;
}
</style>
Loading…
Cancel
Save