main
parent
e5e86e24e5
commit
b15e0d0f8f
@ -1,80 +0,0 @@ |
||||
/** |
||||
* @Author: River_qiu |
||||
* @Date: 2021/11/18 |
||||
*/ |
||||
// 表格单元格合并多列
|
||||
let [spanObj, pos] = [{}, {}] |
||||
//spanObj 存储每个key 对应的合并值
|
||||
//pos 存储的是 key合并值得索引 大概吧
|
||||
export const dataMethod = (data, isH, allColumns = []) => { |
||||
//循环数据(行)
|
||||
for (let i in data) { |
||||
let dataI = data[i] |
||||
//循环数据内对象,查看有多少key
|
||||
if (allColumns.length > 0) { |
||||
let preProp = undefined |
||||
// dataI.historyValue =
|
||||
// 循环列数据
|
||||
for (let index = 0; index < allColumns.length; index++) { |
||||
let j = allColumns[index] |
||||
if (i == 0) { |
||||
// 第一行,每列至少展示1行
|
||||
spanObj[j] = [1] |
||||
pos[j] = 0 |
||||
} else { |
||||
if (index == 0) { |
||||
data[i].historyValue = '' |
||||
data[i - 1].historyValue = '' |
||||
} else { |
||||
data[i].historyValue += data[i][preProp] |
||||
data[i - 1].historyValue += data[i - 1][preProp] |
||||
} |
||||
// e: 当前行数据,k:上一行数据
|
||||
let [e, k] = [dataI, data[i - 1]] |
||||
// 判断上一行数据是否存在
|
||||
// 空数据不合并
|
||||
// 前一列值相同并且不为空或者为第一列
|
||||
// 存在当前的列的值与上一行是否一样
|
||||
// 判断是否有数组规定只允许那几列需要合并单元格的
|
||||
if ( |
||||
k && |
||||
e[j] && |
||||
(!preProp || (e.historyValue && e.historyValue == k.historyValue)) && |
||||
e[j] == k[j] && |
||||
(!isH || isH.length == 0 || isH.includes(j)) |
||||
) { |
||||
//如果上一级和当前一级相当,数组就加1 数组后面就添加一个0
|
||||
spanObj[j][pos[j]] += 1 |
||||
spanObj[j].push(0) |
||||
} else { |
||||
spanObj[j].push(1) |
||||
pos[j] = i |
||||
} |
||||
preProp = j |
||||
} |
||||
} |
||||
} else { |
||||
for (let j in dataI) { |
||||
//如果只有一条数据时默认为1即可,无需合并
|
||||
if (i == 0) { |
||||
spanObj[j] = [1] |
||||
pos[j] = 0 |
||||
} else { |
||||
let [e, k] = [dataI, data[i - 1]] |
||||
//判断上一级别是否存在 ,
|
||||
//存在当前的key是否和上级别的key是否一样
|
||||
//判断是否有数组规定只允许那几列需要合并单元格的
|
||||
if (k && e[j] && k[j] && e[j] == k[j] && (!isH || isH.length == 0 || isH.includes(j))) { |
||||
//如果上一级和当前一级相当,数组就加1 数组后面就添加一个0
|
||||
spanObj[j][pos[j]] += 1 |
||||
spanObj[j].push(0) |
||||
} else { |
||||
spanObj[j].push(1) |
||||
pos[j] = i |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
return spanObj |
||||
} |
@ -1,7 +1,96 @@ |
||||
<template> |
||||
<div> 首页 </div> |
||||
<div> |
||||
<el-card shadow="never"> |
||||
<el-skeleton :loading="loading" animated> |
||||
<el-row :gutter="20" justify="space-between"> |
||||
<el-col :xl="12" :lg="12" :md="12" :sm="24" :xs="24"> |
||||
<div class="flex items-center"> |
||||
<img :src="avatar" alt="" class="w-40px h-40px rounded-[50%] mr-20px" /> |
||||
<div class="text-20px text-700"> |
||||
{{ t('workplace.welcome') }} {{ username }} {{ t('workplace.happyDay') }} |
||||
</div> |
||||
</div> |
||||
</el-col> |
||||
<el-col :xl="12" :lg="12" :md="12" :sm="24" :xs="24"> |
||||
<div class="flex h-40px items-center justify-end <sm:mt-10px"> |
||||
<div |
||||
class="px-8px text-right" |
||||
@click="router.push({ path: '/Okr/okr-wait', query: { type: 1 } })" |
||||
> |
||||
<div class="text-14px text-red-600 mb-20px">今日待办</div> |
||||
<CountTo |
||||
class="text-20px number-font" |
||||
:start-val="0" |
||||
:end-val="waitCount.dayEndAgentWorkNum" |
||||
:duration="2600" |
||||
/> |
||||
</div> |
||||
<el-divider direction="vertical" border-style="dashed" /> |
||||
<div |
||||
class="px-8px text-right" |
||||
@click="router.push({ path: '/Okr/okr-wait', query: { type: 2 } })" |
||||
> |
||||
<div class="text-14px text-gray-400 mb-20px">我的待办</div> |
||||
<CountTo |
||||
class="text-20px number-font" |
||||
:start-val="0" |
||||
:end-val="waitCount.myAgentWorkNum" |
||||
:duration="2600" |
||||
/> |
||||
</div> |
||||
</div> |
||||
</el-col> |
||||
</el-row> |
||||
</el-skeleton> |
||||
</el-card> |
||||
</div> |
||||
</template> |
||||
<script setup lang="ts" name="Home"> |
||||
import { useUserStore } from '@/store/modules/user' |
||||
import avatarImg from '@/assets/imgs/avatar.gif' |
||||
import { getWaitCount } from '@/api/okr/wait' |
||||
|
||||
<script setup name="Home"></script> |
||||
const { t } = useI18n() |
||||
const userStore = useUserStore() |
||||
const router = useRouter() // 路由对象 |
||||
const loading = ref(false) |
||||
const avatar = userStore.getUser.avatar ? userStore.getUser.avatar : avatarImg |
||||
const username = userStore.getUser.nickname |
||||
|
||||
<style lang="scss" scoped></style> |
||||
function getWaitTargetCount() { |
||||
getWaitCount({}).then((res) => { |
||||
waitCount.value = res |
||||
}) |
||||
} |
||||
|
||||
const waitCount = ref({ |
||||
dayEndAgentWorkNum: 0, |
||||
myAgentWorkNum: 0, |
||||
urgeAgentWorkNum: 0, |
||||
notifyNum: 0 |
||||
}) |
||||
|
||||
const getAllApi = async () => { |
||||
await getWaitTargetCount() |
||||
loading.value = false |
||||
} |
||||
|
||||
onMounted(() => { |
||||
getAllApi() |
||||
}) |
||||
</script> |
||||
|
||||
<style lang="scss" scoped> |
||||
@font-face { |
||||
font-family: numberFont; |
||||
src: url('@/assets/fonts/DISPLAY FREE TFB.ttf'); |
||||
} |
||||
|
||||
.number-font { |
||||
font-family: numberFont !important; |
||||
} |
||||
|
||||
:deep(.el-card__header) { |
||||
padding: 10px; |
||||
} |
||||
</style> |
||||
|
Loading…
Reference in new issue