Compare commits

..

No commits in common. "1f20c6f589b3fcb8edada3fd90a811f68db72645" and "d80d0988d26cb3d0b2e5bad370c161c0bdc03f16" have entirely different histories.

37 changed files with 5899 additions and 6622 deletions

View File

@ -1,11 +0,0 @@
{
"trailingComma": "none",
"semi": false,
"singleQuote": true,
"jsxSingleQuote": true,
"arrowParens": "always",
"printWidth": 100,
"tabWidth": 2,
"quoteProps": "preserve",
"endOfLine": "auto"
}

View File

@ -24,8 +24,7 @@
"dayjs": "^1.11.10", "dayjs": "^1.11.10",
"echarts": "^5.4.3", "echarts": "^5.4.3",
"echarts-liquidfill": "^3.1.0", "echarts-liquidfill": "^3.1.0",
"element-plus": "^2.6.2", "element-plus": "^2.3.7",
"lodash-es": "^4.17.21",
"lottie-web": "^5.12.2", "lottie-web": "^5.12.2",
"naive-ui": "^2.34.4", "naive-ui": "^2.34.4",
"pinia": "^2.0.32", "pinia": "^2.0.32",

View File

@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { RouterView } from 'vue-router' import { RouterView } from 'vue-router'
import { useFullscreen, useFavicon, useTitle } from '@vueuse/core' import { useFullscreen, useFavicon, useTitle } from '@vueuse/core'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs' import zhCn from 'element-plus/dist/locale/zh-cn'
import FitScreen from '@fit-screen/vue' import FitScreen from '@fit-screen/vue'
import { NMessageProvider } from 'naive-ui' import { NMessageProvider } from 'naive-ui'
import { useUserStore } from '@/stores/modules/user' import { useUserStore } from '@/stores/modules/user'
@ -63,7 +63,13 @@ const pageStyle = computed(() => {
const locale = computed(() => zhCn) const locale = computed(() => zhCn)
const scaleChange = ({ widthRatio, heightRatio }: { widthRatio: number; heightRatio: number }) => { const scaleChange = ({
widthRatio,
heightRatio
}: {
widthRatio: number
heightRatio: number
}) => {
console.log('scaleChange', widthRatio, heightRatio) console.log('scaleChange', widthRatio, heightRatio)
} }
const beforeCalculate = (scale) => { const beforeCalculate = (scale) => {

View File

@ -117,17 +117,12 @@ export interface ArticlePageReq {
type?: string type?: string
// 分类 1-外部环境 2-竞争对手 3-供方动向 4-大金集团 5-中国据点 6-调达本部 7-news 8-重要通知 // 分类 1-外部环境 2-竞争对手 3-供方动向 4-大金集团 5-中国据点 6-调达本部 7-news 8-重要通知
cate?: String cate?: String
position?: String position: String
keyword?: String
} }
export async function getArticlePage(params: ArticlePageReq) { export async function getArticlePage(params: ArticlePageReq) {
// return openApiRequest({ url: '/article/getPage', params }) // return openApiRequest({ url: '/article/getPage', params })
return http.get('/article/getPage', { params }) return http.get('/article/getPage', { params })
} }
export async function getSearchGlobal(params: ArticlePageReq) {
// return openApiRequest({ url: '/article/getPage', params })
return http.get('/app/search', { params })
}
export async function getArticleList(params: ArticlePageReq) { export async function getArticleList(params: ArticlePageReq) {
// return openApiRequest({ url: '/article/getList', params }) // return openApiRequest({ url: '/article/getList', params })
@ -176,7 +171,10 @@ export async function externalWithdraw(id: string) {
return http.get('/article/external/withdraw?id=' + id) return http.get('/article/external/withdraw?id=' + id)
} }
// news/重要通知-流程列表 // news/重要通知-流程列表
export async function getExternalManagerList(params: { pageNum: any; pageSize: any }) { export async function getExternalManagerList(params: {
pageNum: any
pageSize: any
}) {
return http.get('/article/external/getManagerList', { params }) return http.get('/article/external/getManagerList', { params })
} }
// -------------------------------------列表end // -------------------------------------列表end
@ -308,7 +306,10 @@ export async function trendsDetail(params: any) {
/**-- /**--
* http://127.0.0.1:8811/openApi/supplier/trendsPage?pageNum=1&pageSize=20 * http://127.0.0.1:8811/openApi/supplier/trendsPage?pageNum=1&pageSize=20
*/ */
export async function trendsPage(params: { pageNum: number; pageSize: number }) { export async function trendsPage(params: {
pageNum: number
pageSize: number
}) {
return http.get('/supplier/trendsPage', { params }) return http.get('/supplier/trendsPage', { params })
} }
@ -330,7 +331,10 @@ export async function demandDetail(params: any) {
* -- * --
* http://127.0.0.1:8811/openApi/supplier/demandPage?pageNum=1&pageSize=20 * http://127.0.0.1:8811/openApi/supplier/demandPage?pageNum=1&pageSize=20
*/ */
export async function demandPage(params: { pageNum: number; pageSize: number }) { export async function demandPage(params: {
pageNum: number
pageSize: number
}) {
return http.get('/supplier/demandPage', { params }) return http.get('/supplier/demandPage', { params })
} }
/*** /***
@ -536,7 +540,10 @@ http://127.0.0.1:8811/openApi/common/upload
multipart/form-data multipart/form-data
*/ */
export async function upload(params: any, Headers: AxiosRequestConfig<any> | undefined) { export async function upload(
params: any,
Headers: AxiosRequestConfig<any> | undefined
) {
return http.post('/common/upload', params, Headers) return http.post('/common/upload', params, Headers)
} }
@ -565,7 +572,10 @@ POST
http://127.0.0.1:8811/openApi/group/add http://127.0.0.1:8811/openApi/group/add
* *
*/ */
export async function addGroup(params: getNotice, Headers: AxiosRequestConfig<any> | undefined) { export async function addGroup(
params: getNotice,
Headers: AxiosRequestConfig<any> | undefined
) {
return http.post('/group/add', params, Headers) return http.post('/group/add', params, Headers)
} }
@ -592,7 +602,10 @@ export interface newPwd {
http://127.0.0.1:8811/openApi/auth/updatePwd http://127.0.0.1:8811/openApi/auth/updatePwd
* *
*/ */
export async function updatePwd(params: newPwd, Headers: AxiosRequestConfig<any> | undefined) { export async function updatePwd(
params: newPwd,
Headers: AxiosRequestConfig<any> | undefined
) {
return http.post('/auth/updatePwd', params, Headers) return http.post('/auth/updatePwd', params, Headers)
} }
@ -661,7 +674,10 @@ export interface pupid {
POST POST
http://127.0.0.1:8811/openApi/inv/add http://127.0.0.1:8811/openApi/inv/add
*/ */
export async function addPageInv(params: pupid, Headers: AxiosRequestConfig<any> | undefined) { export async function addPageInv(
params: pupid,
Headers: AxiosRequestConfig<any> | undefined
) {
return http.post('/inv/add', params, Headers) return http.post('/inv/add', params, Headers)
} }
@ -673,7 +689,10 @@ export async function addPageInv(params: pupid, Headers: AxiosRequestConfig<any>
POST POST
http://127.0.0.1:8811/openApi/visit/add http://127.0.0.1:8811/openApi/visit/add
*/ */
export async function addPageVisit(params: pupid, Headers: AxiosRequestConfig<any> | undefined) { export async function addPageVisit(
params: pupid,
Headers: AxiosRequestConfig<any> | undefined
) {
return http.post('/visit/add', params, Headers) return http.post('/visit/add', params, Headers)
} }
@ -1189,10 +1208,6 @@ export async function cateFileDel(params: any) {
export async function cateFileList(params: any) { export async function cateFileList(params: any) {
return http.get(`/db/cateFileList`, { params }) return http.get(`/db/cateFileList`, { params })
} }
// 首页最新更新列表
export async function newDataList(params: any) {
return http.get(`/app/newDataList`, { params })
}
/*** /***
* *
@ -1246,14 +1261,6 @@ export async function getPieChartData(params: any) {
export async function getDepartChart(params: any) { export async function getDepartChart(params: any) {
return http.get(`/moduleStat/getDepartChart`, { params }) return http.get(`/moduleStat/getDepartChart`, { params })
} }
// 内部访问人数
export async function fetchInsideToday(params: any) {
return http.get(`/moduleStat/getToDayVisitList`, { params })
}
// 更新数量专项统计列表
export async function fetchModuleList(params: any) {
return http.get(`/app/moduleList`, { params })
}
/** /**
* csr https://console-docs.apipost.cn/preview/9ac14c51f96ce4d8/75274687248efb1c?target_id=5e2e22e5-fab5-4c46-8a93-8f0c3a3675cb * csr https://console-docs.apipost.cn/preview/9ac14c51f96ce4d8/75274687248efb1c?target_id=5e2e22e5-fab5-4c46-8a93-8f0c3a3675cb

Binary file not shown.

Before

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

View File

@ -1,32 +1,27 @@
<template> <template>
<input <input type="text" placeholder="请输入搜索内容" @keydown.enter="keyDown" v-model="search"
type="text" class="h-full w-full text-#fff text-18px pl30px pr54px placeholder-#fff" />
placeholder="请输入搜索内容" <img src="@/assets/images/icon-search.svg" @click="clickThis" class="w22px h22px absolute right-24px top-50% -translate-y-50%" />
@keydown.enter="keyDown"
v-model="search"
class="h-full w-full text-#fff text-18px pl30px pr54px placeholder-#fff"
/>
<img
src="@/assets/images/icon-search.svg"
@click="clickThis"
class="w22px h22px absolute right-24px top-50% -translate-y-50%"
/>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { searchStore } from '@/stores/modules/search' import { searchStore } from '@/stores/modules/search'
const searchS = searchStore() const searchS = searchStore()
const search = ref('') const search = ref('')
const { push } = useRouter() const { push } = useRouter()
const keyDown=(e)=>{ const keyDown=(e)=>{
if (e.key === 'Enter' && search.value) { if(e.key ==='Enter'&&search.value)
searchS.setArticle(search.value) {
searchS.search.content = search.value
push({name:'Search'}) push({name:'Search'})
} }
} }
const clickThis = ()=>{ const clickThis = ()=>{
if (search.value) { if(search.value)
searchS.setArticle(search.value) {
searchS.search.content = search.value
push({name:'Search'}) push({name:'Search'})
} }
} }
</script> </script>

View File

@ -126,12 +126,6 @@ const router = createRouter({
meta: { title: 'News列表' }, meta: { title: 'News列表' },
component: () => import('@/views/home/news/index.vue') component: () => import('@/views/home/news/index.vue')
}, },
{
path: '/Home/latest',
name: 'Latest',
meta: { title: '最进更新列表' },
component: () => import('@/views/home/news/news.vue')
},
// 搜索 // 搜索
{ {
path: 'Search', path: 'Search',
@ -176,13 +170,17 @@ const router = createRouter({
{ {
path: '', path: '',
name: 'messageSelect', name: 'messageSelect',
component: () => import('@/views/home/intelligence/components/messageSelect.vue') component: () =>
import(
'@/views/home/intelligence/components/messageSelect.vue'
)
}, },
{ {
path: 'InfosEdit', path: 'InfosEdit',
name: 'InfosEdit', name: 'InfosEdit',
meta: { title: '详情编辑' }, meta: { title: '详情编辑' },
component: () => import('@/views/home/intelligence/components/InfosEdit.vue') component: () =>
import('@/views/home/intelligence/components/InfosEdit.vue')
} }
] ]
}, },
@ -194,13 +192,15 @@ const router = createRouter({
{ {
path: '', path: '',
name: 'IntelligenceOutside', name: 'IntelligenceOutside',
component: () => import('@/views/home/intelligence/ListPage.vue') component: () =>
import('@/views/home/intelligence/ListPage.vue')
}, },
{ {
path: '/intelligence/outside/:id', path: '/intelligence/outside/:id',
meta: { title: '情报详情' }, meta: { title: '情报详情' },
name: 'IntelligenceOutsideDetail', name: 'IntelligenceOutsideDetail',
component: () => import('@/views/home/intelligence/Detail.vue') component: () =>
import('@/views/home/intelligence/Detail.vue')
} }
] ]
}, },
@ -211,13 +211,15 @@ const router = createRouter({
{ {
path: '', path: '',
name: 'IntelligenceWithin', name: 'IntelligenceWithin',
component: () => import('@/views/home/intelligence/ListPage.vue') component: () =>
import('@/views/home/intelligence/ListPage.vue')
}, },
{ {
path: '/intelligence/within/:id', path: '/intelligence/within/:id',
meta: { title: '情报详情' }, meta: { title: '情报详情' },
name: 'IntelligenceWithinDetail', name: 'IntelligenceWithinDetail',
component: () => import('@/views/home/intelligence/Detail.vue') component: () =>
import('@/views/home/intelligence/Detail.vue')
} }
] ]
} }
@ -354,13 +356,15 @@ const router = createRouter({
{ {
path: '', path: '',
name: 'Process', name: 'Process',
component: () => import('@/views/home/intelligence/process/Process.vue') component: () =>
import('@/views/home/intelligence/process/Process.vue')
}, },
{ {
path: '/Home/Process/ProcessInfo/:id', path: '/Home/Process/ProcessInfo/:id',
meta: { title: '情报审批详情' }, meta: { title: '情报审批详情' },
name: '', name: '',
component: () => import('@/views/home/intelligence/process/ProcessInfo.vue') component: () =>
import('@/views/home/intelligence/process/ProcessInfo.vue')
}, },
{ {
path: '/Home/Process/Detail/:id/:flag', path: '/Home/Process/Detail/:id/:flag',
@ -400,7 +404,8 @@ const router = createRouter({
path: 'report', path: 'report',
meta: { title: '基础研究方向' }, meta: { title: '基础研究方向' },
name: 'DiffspaceResearchReport', name: 'DiffspaceResearchReport',
component: () => import('@/views/home/diffspace/ResearchReport.vue') component: () =>
import('@/views/home/diffspace/ResearchReport.vue')
}, },
// { // {
// path: "modifys", // path: "modifys",
@ -439,7 +444,8 @@ const router = createRouter({
path: '/home/diffspace/DiffspaceTabModify', path: '/home/diffspace/DiffspaceTabModify',
name: 'DiffspaceTabModify', name: 'DiffspaceTabModify',
meta: { title: '差别化课题管理' }, meta: { title: '差别化课题管理' },
component: () => import('@/views/home/diffspace/component/modify.vue') component: () =>
import('@/views/home/diffspace/component/modify.vue')
} }
] ]
} }

View File

@ -1,15 +1,17 @@
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
export const searchStore = defineStore('search', () => { export const searchStore = defineStore('search', () => {
const search = ref({ const search = ref({
content: '', content:''
time: 0
}) })
function setArticle(data: string) { function setArticle(data: { content: string }){
search.value.content = data search.value = data
search.value.time = new Date().getTime()
} }
return { search,setArticle } return { search,setArticle }
}) })

View File

@ -46,7 +46,6 @@ const array = ref<any[]>([
]) ])
const fileItem = ref<any>({}) const fileItem = ref<any>({})
const fileItemTwo = ref<any>({})
const message = useMessage() const message = useMessage()
const getFile = async () => { const getFile = async () => {
const { rows }: any = await cateFileList({ const { rows }: any = await cateFileList({
@ -55,15 +54,9 @@ const getFile = async () => {
pageSize: 100 pageSize: 100
}) })
fileItem.value = rows.find((item: any) => item.id == 1693) || {} fileItem.value = rows.find((item: any) => item.id == 1693) || {}
const { rows: rowsTow }: any = await cateFileList({
cateId: 265,
pageNum: 1,
pageSize: 100
})
fileItemTwo.value = rowsTow.find((item: any) => item.id == 1854) || {}
} }
const goFile = (row: any) => { const goFile = () => {
const { isSelect, filePath } = row const { isSelect, filePath } = fileItem.value
if (!isSelect || isSelect === 2) { if (!isSelect || isSelect === 2) {
message.info('没有访问权限!') message.info('没有访问权限!')
return return
@ -105,28 +98,13 @@ getFile()
</div> --> </div> -->
<div class="mt30px mr20px flex w100% relative"> <div class="mt30px mr20px flex w100% relative">
<!-- <img src="../../assets/images/fangz.png" class="w100%"/> --> <!-- <img src="../../assets/images/fangz.png" class="w100%"/> -->
<!-- <img src="../../assets/images/fzqiet.png" class="w100%" /> <img src="../../assets/images/fzqiet.png" class="w100%" />
<div <div
class="absolute py10px left-1160px top-270px pb-0px z-100 text-20px text-#285FE9 flex justify-center items-center hover:border-b-1px hover:border-b-solid hover:border-b-#285FE9 hover:cursor-pointer" class="absolute py10px left-1160px top-270px pb-0px z-100 text-20px text-#285FE9 flex justify-center items-center hover:border-b-1px hover:border-b-solid hover:border-b-#285FE9 hover:cursor-pointer"
@click="goFile" @click="goFile"
> >
<img src="../../assets/images/wjqq@2x.png" class="w18px h20px mr8px" /> <img src="../../assets/images/wjqq@2x.png" class="w18px h20px mr8px" />
2024年グループ年頭方针 2024年グループ年頭方针
</div> -->
<img src="../../assets/images/2024fz.jpg" class="w100%" />
<div
class="absolute py10px left-880px top-250px pb-0px z-100 text-20px text-#285FE9 flex justify-center items-center hover:border-b-1px hover:border-b-solid hover:border-b-#285FE9 hover:cursor-pointer"
@click="goFile(fileItem)"
>
<img src="../../assets/images/wjqq@2x.png" class="w18px h20px mr8px" />
2024年グループ年頭方针
</div>
<div
class="absolute py10px left-920px top-645px pb-0px z-100 text-20px text-#285FE9 flex justify-center items-center hover:border-b-1px hover:border-b-solid hover:border-b-#285FE9 hover:cursor-pointer"
@click="goFile(fileItemTwo)"
>
<img src="../../assets/images/wjqq@2x.png" class="w18px h20px mr8px" />
2024年调达方针说明会
</div> </div>
</div> </div>
</template> </template>

View File

@ -70,6 +70,7 @@ async function getArticle(page: any) {
cate: '7' cate: '7'
} }
const { rows, total } = await externalList(pasr) const { rows, total } = await externalList(pasr)
console.log('🚀 ~ file: Detail.vue:46 ~ rows:', rows)
newsList.value = rows || [] newsList.value = rows || []
newLength = total / 10 newLength = total / 10
} }
@ -153,7 +154,9 @@ const handleCurrentChange = (e) => {
<div style="width: 400px" class="flex items-end absolute"> <div style="width: 400px" class="flex items-end absolute">
<!-- <img src="../images/ͼƬ1.png" alt=""> --> <!-- <img src="../images/ͼƬ1.png" alt=""> -->
<div v-if="false"> <div v-if="false">
<span style="font-size: 20px; margin-top: -50px">大金空调调达本部HOMEPAGE</span> <span style="font-size: 20px; margin-top: -50px"
>大金空调调达本部HOMEPAGE</span
>
<el-button <el-button
class="" class=""
style="font-size: 18px; margin-left: 5px" style="font-size: 18px; margin-left: 5px"
@ -167,7 +170,9 @@ const handleCurrentChange = (e) => {
</div> </div>
<div class="w300px -mr-1px flex flex-col shrink-0"> <div class="w300px -mr-1px flex flex-col shrink-0">
<div class="text-20px text-#fff font-600 mt6px">大金中国调达本部 HOMEPAGE</div> <div class="text-20px text-#fff font-600 mt6px">
大金中国调达本部 HOMEPAGE
</div>
<!-- @dblclick="toggle" --> <!-- @dblclick="toggle" -->
<img src="@/assets/images/logo.png" class="w197px h44px mt14px" /> <img src="@/assets/images/logo.png" class="w197px h44px mt14px" />
</div> </div>
@ -193,7 +198,9 @@ const handleCurrentChange = (e) => {
<div class="main flex-1 rd-32px pt60px mt22px page-wrap"> <div class="main flex-1 rd-32px pt60px mt22px page-wrap">
<div class="absolute text-white top-18px left-30px"> <div class="absolute text-white top-18px left-30px">
<n-breadcrumb separator=">"> <n-breadcrumb separator=">">
<n-breadcrumb-item @click="push({ name: 'external' })"> 外部首页</n-breadcrumb-item> <n-breadcrumb-item @click="push({ name: 'external' })">
外部首页</n-breadcrumb-item
>
<n-breadcrumb-item> {{ type || state.title }}</n-breadcrumb-item> <n-breadcrumb-item> {{ type || state.title }}</n-breadcrumb-item>
</n-breadcrumb> </n-breadcrumb>
</div> </div>
@ -204,7 +211,10 @@ const handleCurrentChange = (e) => {
class="q-wrapper relative flex-1 text-#142142 flex flex-col bg-#fff p30px pl80px h-full" class="q-wrapper relative flex-1 text-#142142 flex flex-col bg-#fff p30px pl80px h-full"
v-if="listData.length" v-if="listData.length"
> >
<img src="../images/beijq.png" class="absolute bottom-0 left-0 right-0 z w-full" /> <img
src="../images/beijq.png"
class="absolute bottom-0 left-0 right-0 z w-full"
/>
<div <div
class="mt8px cursor-pointer flex flex-wrap flex-col p15px pl20px text-18px max-w-100%" class="mt8px cursor-pointer flex flex-wrap flex-col p15px pl20px text-18px max-w-100%"
> >
@ -227,7 +237,10 @@ const handleCurrentChange = (e) => {
class="text-#fff bg-red p5px text-16px rounded-5px mr-5px badge-24" class="text-#fff bg-red p5px text-16px rounded-5px mr-5px badge-24"
>置顶</span >置顶</span
> >
<span class="no-underline" :style="i.isRead === 2 ? 'color:#0058E5' : ''"> <span
class="no-underline"
:style="i.isRead === 2 ? 'color:#0058E5' : ''"
>
{{ i.title }} {{ i.title }}
</span> </span>
</div> </div>
@ -266,7 +279,10 @@ const handleCurrentChange = (e) => {
<div class="mb-26px" v-for="item in SideNews" :key="item.key"> <div class="mb-26px" v-for="item in SideNews" :key="item.key">
<AppBlock class="h410px"> <AppBlock class="h410px">
<div class="box h-full"> <div class="box h-full">
<div class="box-title flex items-center" @click="toList(item.cate)"> <div
class="box-title flex items-center"
@click="toList(item.cate)"
>
<span class="flex-1">{{ item.name }}</span> <span class="flex-1">{{ item.name }}</span>
<span></span> <span></span>
</div> </div>
@ -295,7 +311,9 @@ const handleCurrentChange = (e) => {
>置顶</span >置顶</span
> >
<span <span
:style="i.isRead === 2 ? 'color:#0058E5;font-weight:bolb' : ''" :style="
i.isRead === 2 ? 'color:#0058E5;font-weight:bolb' : ''
"
:title="i.title" :title="i.title"
>{{ i.title }}</span >{{ i.title }}</span
> >
@ -441,8 +459,7 @@ const handleCurrentChange = (e) => {
font-size: 16px !important; font-size: 16px !important;
} }
span > img { span > img {
// width: v-bind(imgW); width: v-bind(imgW);
width: auto;
object-fit: contain; object-fit: contain;
} }
p > img { p > img {

View File

@ -1,17 +1,31 @@
<script setup lang="ts"> <script setup lang="ts">
import VChart from 'vue-echarts' import VChart from 'vue-echarts'
import { useChart1, useChart22, useChart21, useChart3, useChart23 } from './HomeData' import {
useChart1,
useChart22,
useChart21,
useChart3,
useChart23
} from './HomeData'
import AppHeadUserInfo from '@/components/AppHeadUserInfo.vue' import AppHeadUserInfo from '@/components/AppHeadUserInfo.vue'
import { NSelect } from 'naive-ui' import { NSelect } from 'naive-ui'
import News from './components/New.vue' import News from './components/New.vue'
import { homePageMarket, homePageRate, report, getHomeList, amountList } from '@/api/daikin/base' import {
homePageMarket,
homePageRate,
report,
getHomeList,
amountList
} from '@/api/daikin/base'
import { useUserStore } from '@/stores/modules/user' import { useUserStore } from '@/stores/modules/user'
const store = useUserStore() const store = useUserStore()
const isUpPwds = ref(false) const isUpPwds = ref(false)
const userCode = ref(false) const userCode = ref(false)
watchEffect(() => { watchEffect(() => {
userCode.value = ['admin', 'cd_dandang', 'tech_service'].includes(store.user.roleCode) userCode.value = ['admin', 'cd_dandang', 'tech_service'].includes(
store.user.roleCode
)
isUpPwds.value = store.user.isUpPwd === 2 ? true : false isUpPwds.value = store.user.isUpPwd === 2 ? true : false
}) })
const activeCard5NavKey = ref('DIS') const activeCard5NavKey = ref('DIS')
@ -86,88 +100,124 @@ onMounted(async () => {
month_2.value = _dszList[0].monthDate?.split('-')[1] month_2.value = _dszList[0].monthDate?.split('-')[1]
month_3.value = _dishList[0].monthDate?.split('-')[1] month_3.value = _dishList[0].monthDate?.split('-')[1]
addDIS1.value = _disList.reduce((previousValue: any, currentValue: { budget: any }) => { addDIS1.value = _disList.reduce(
(previousValue: any, currentValue: { budget: any }) => {
const sum = parseFloat(currentValue.budget) + parseFloat(previousValue) const sum = parseFloat(currentValue.budget) + parseFloat(previousValue)
return sum > 0 ? sum.toFixed(2) : 0 return sum > 0 ? sum.toFixed(2) : 0
}, 0) },
0
)
if (_disList[0].budget == _disList[1].budget && addDIS1.value > 0) { if (_disList[0].budget == _disList[1].budget && addDIS1.value > 0) {
addDIS1.value -= _disList[0].budget addDIS1.value -= _disList[0].budget
addDIS1.value > 0 ? (addDIS1.value = addDIS1.value.toFixed(2)) : 0 addDIS1.value > 0 ? (addDIS1.value = addDIS1.value.toFixed(2)) : 0
} }
addDSZ1.value = _dszList.reduce((previousValue: any, currentValue: { budget: any }) => { addDSZ1.value = _dszList.reduce(
(previousValue: any, currentValue: { budget: any }) => {
const sum = parseFloat(currentValue.budget) + parseFloat(previousValue) const sum = parseFloat(currentValue.budget) + parseFloat(previousValue)
return sum > 0 ? sum.toFixed(2) : 0 return sum > 0 ? sum.toFixed(2) : 0
}, 0) },
0
)
if (_dszList[0].budget == _dszList[1].budget && addDSZ1.value > 0) { if (_dszList[0].budget == _dszList[1].budget && addDSZ1.value > 0) {
addDSZ1.value -= _dszList[0].budget addDSZ1.value -= _dszList[0].budget
addDSZ1.value > 0 ? (addDSZ1.value = addDSZ1.value.toFixed(2)) : 0 addDSZ1.value > 0 ? (addDSZ1.value = addDSZ1.value.toFixed(2)) : 0
} }
addDISH1.value = _dishList.reduce((previousValue: any, currentValue: { budget: any }) => { addDISH1.value = _dishList.reduce(
(previousValue: any, currentValue: { budget: any }) => {
const sum = parseFloat(currentValue.budget) + parseFloat(previousValue) const sum = parseFloat(currentValue.budget) + parseFloat(previousValue)
return sum > 0 ? sum.toFixed(2) : 0 return sum > 0 ? sum.toFixed(2) : 0
}, 0) },
0
)
if (_dishList[0].budget == _dishList[1].budget && addDISH1.value > 0) { if (_dishList[0].budget == _dishList[1].budget && addDISH1.value > 0) {
addDISH1.value -= _dishList[0].budget addDISH1.value -= _dishList[0].budget
addDISH1.value > 0 ? (addDISH1.value = addDISH1.value.toFixed(2)) : 0 addDISH1.value > 0 ? (addDISH1.value = addDISH1.value.toFixed(2)) : 0
} }
addDIS2.value = _disList.reduce((previousValue: any, currentValue: { monthOne: any }) => { addDIS2.value = _disList.reduce(
const sum = parseFloat(currentValue.monthOne) + parseFloat(previousValue) (previousValue: any, currentValue: { monthOne: any }) => {
const sum =
parseFloat(currentValue.monthOne) + parseFloat(previousValue)
return sum > 0 ? sum.toFixed(2) : 0 return sum > 0 ? sum.toFixed(2) : 0
}, 0) },
0
)
if (_disList[0].monthOne == _disList[1].monthOne && addDIS2.value > 0) { if (_disList[0].monthOne == _disList[1].monthOne && addDIS2.value > 0) {
addDIS2.value -= _disList[0].monthOne addDIS2.value -= _disList[0].monthOne
addDIS2.value > 0 ? (addDIS2.value = addDIS2.value.toFixed(2)) : 0 addDIS2.value > 0 ? (addDIS2.value = addDIS2.value.toFixed(2)) : 0
} }
addDSZ2.value = _dszList.reduce((previousValue: any, currentValue: { monthOne: any }) => { addDSZ2.value = _dszList.reduce(
const sum = parseFloat(currentValue.monthOne) + parseFloat(previousValue) (previousValue: any, currentValue: { monthOne: any }) => {
const sum =
parseFloat(currentValue.monthOne) + parseFloat(previousValue)
return sum > 0 ? sum.toFixed(2) : 0 return sum > 0 ? sum.toFixed(2) : 0
}, 0) },
0
)
if (_dszList[0].monthOne == _dszList[1].monthOne && addDSZ2.value > 0) { if (_dszList[0].monthOne == _dszList[1].monthOne && addDSZ2.value > 0) {
addDSZ2.value -= _dszList[0].monthOne addDSZ2.value -= _dszList[0].monthOne
addDSZ2.value > 0 ? (addDSZ2.value = addDSZ2.value.toFixed(2)) : 0 addDSZ2.value > 0 ? (addDSZ2.value = addDSZ2.value.toFixed(2)) : 0
} }
addDISH2.value = _dishList.reduce((previousValue: any, currentValue: { monthOne: any }) => { addDISH2.value = _dishList.reduce(
const sum = parseFloat(currentValue.monthOne) + parseFloat(previousValue) (previousValue: any, currentValue: { monthOne: any }) => {
const sum =
parseFloat(currentValue.monthOne) + parseFloat(previousValue)
return sum > 0 ? sum.toFixed(2) : 0 return sum > 0 ? sum.toFixed(2) : 0
}, 0) },
0
)
if (_dishList[0].monthOne == _dishList[1].monthOne && addDISH2.value > 0) { if (_dishList[0].monthOne == _dishList[1].monthOne && addDISH2.value > 0) {
addDISH2.value -= _dishList[0].monthOne addDISH2.value -= _dishList[0].monthOne
addDISH2.value > 0 ? (addDISH2.value = addDISH2.value.toFixed(2)) : 0 addDISH2.value > 0 ? (addDISH2.value = addDISH2.value.toFixed(2)) : 0
} }
addDIS3.value = _disList.reduce((previousValue: any, currentValue: { monthTwo: any }) => { addDIS3.value = _disList.reduce(
const sum = parseFloat(currentValue.monthTwo) + parseFloat(previousValue) (previousValue: any, currentValue: { monthTwo: any }) => {
const sum =
parseFloat(currentValue.monthTwo) + parseFloat(previousValue)
return sum > 0 ? sum.toFixed(2) : 0 return sum > 0 ? sum.toFixed(2) : 0
}, 0) },
0
)
if (_disList[0].monthTwo == _disList[1].monthTwo && addDIS3.value > 0) { if (_disList[0].monthTwo == _disList[1].monthTwo && addDIS3.value > 0) {
addDIS3.value -= _disList[0].monthTwo addDIS3.value -= _disList[0].monthTwo
addDIS3.value > 0 ? (addDIS3.value = addDIS3.value.toFixed(2)) : 0 addDIS3.value > 0 ? (addDIS3.value = addDIS3.value.toFixed(2)) : 0
} }
addDSZ3.value = _dszList.reduce((previousValue: any, currentValue: { monthTwo: any }) => { addDSZ3.value = _dszList.reduce(
const sum = parseFloat(currentValue.monthTwo) + parseFloat(previousValue) (previousValue: any, currentValue: { monthTwo: any }) => {
const sum =
parseFloat(currentValue.monthTwo) + parseFloat(previousValue)
return sum > 0 ? sum.toFixed(2) : 0 return sum > 0 ? sum.toFixed(2) : 0
}, 0) },
0
)
if (_dszList[0].monthTwo == _dszList[1].monthTwo && addDSZ3.value > 0) { if (_dszList[0].monthTwo == _dszList[1].monthTwo && addDSZ3.value > 0) {
addDSZ3.value -= _dszList[0].monthTwo addDSZ3.value -= _dszList[0].monthTwo
addDSZ3.value > 0 ? (addDSZ3.value = addDSZ3.value.toFixed(2)) : 0 addDSZ3.value > 0 ? (addDSZ3.value = addDSZ3.value.toFixed(2)) : 0
} }
addDISH3.value = _dishList.reduce((previousValue: any, currentValue: { monthTwo: any }) => { addDISH3.value = _dishList.reduce(
const sum = parseFloat(currentValue.monthTwo) + parseFloat(previousValue) (previousValue: any, currentValue: { monthTwo: any }) => {
const sum =
parseFloat(currentValue.monthTwo) + parseFloat(previousValue)
return sum > 0 ? sum.toFixed(2) : 0 return sum > 0 ? sum.toFixed(2) : 0
}, 0) },
0
)
if (_dishList[0].monthTwo == _dishList[1].monthTwo && addDISH3.value > 0) { if (_dishList[0].monthTwo == _dishList[1].monthTwo && addDISH3.value > 0) {
addDISH3.value -= _dishList[0].monthTwo addDISH3.value -= _dishList[0].monthTwo
addDISH3.value > 0 ? (addDISH3.value = addDISH3.value.toFixed(2)) : 0 addDISH3.value > 0 ? (addDISH3.value = addDISH3.value.toFixed(2)) : 0
} }
if (isUpPwds.value) { if (isUpPwds.value) {
ElMessageBox.alert('为了您的帐号安全,首次登录必须更改初始密码', '重要提醒', { ElMessageBox.alert(
'为了您的帐号安全,首次登录必须更改初始密码',
'重要提醒',
{
confirmButtonText: 'OK', confirmButtonText: 'OK',
showClose: false, showClose: false,
showCancelButton: false showCancelButton: false
}).then(() => { }
).then(() => {
push({ name: 'modifys' }) push({ name: 'modifys' })
}) })
} }
report({ moduleCode: 'App_Home' })
} catch (error) {} } catch (error) {}
}) })
const { push } = useRouter() const { push } = useRouter()
@ -265,7 +315,9 @@ function formatNumber(num = 0) {
<span class="ml10px text-14px">更新时间{{ timeA }}</span> <span class="ml10px text-14px">更新时间{{ timeA }}</span>
<div class="h150px overflow-auto"> <div class="h150px overflow-auto">
<table class="history w-full text-center mt18px text-16px border-spacing-0 w219px"> <table
class="history w-full text-center mt18px text-16px border-spacing-0 w219px"
>
<thead <thead
style=" style="
background-color: #417bef; background-color: #417bef;
@ -290,7 +342,10 @@ function formatNumber(num = 0) {
> >
<td class="text-14px">{{ it.channel }}</td> <td class="text-14px">{{ it.channel }}</td>
<td class="text-14px">{{ it.negAmount }}</td> <td class="text-14px">{{ it.negAmount }}</td>
<td class="text-14px" :class="it.diffValue < 0 ? 'text-#63BF8D' : 'text-red'"> <td
class="text-14px"
:class="it.diffValue < 0 ? 'text-#63BF8D' : 'text-red'"
>
{{ displayDiffValue(it.diffValue) }} {{ displayDiffValue(it.diffValue) }}
</td> </td>
</tr> </tr>
@ -325,7 +380,10 @@ function formatNumber(num = 0) {
> >
<td class="text-14px">{{ it.channel }}</td> <td class="text-14px">{{ it.channel }}</td>
<td class="text-14px">{{ it.negAmount }}</td> <td class="text-14px">{{ it.negAmount }}</td>
<td class="text-14px" :class="it.diffValue < 0 ? 'text-#63BF8D' : 'text-red'"> <td
class="text-14px"
:class="it.diffValue < 0 ? 'text-#63BF8D' : 'text-red'"
>
{{ displayDiffValue(it.diffValue) }} {{ displayDiffValue(it.diffValue) }}
</td> </td>
</tr> </tr>
@ -337,7 +395,9 @@ function formatNumber(num = 0) {
<span class="icoT">汇率</span> <span class="icoT">汇率</span>
<span class="ml10px text-14px">更新时间{{ timeB }}</span> <span class="ml10px text-14px">更新时间{{ timeB }}</span>
<div class="h282px pt18px"> <div class="h282px pt18px">
<table class="history w-full text-center text-16px border-spacing-0 w219px"> <table
class="history w-full text-center text-16px border-spacing-0 w219px"
>
<thead <thead
style=" style="
background-color: #417bef; background-color: #417bef;
@ -446,10 +506,14 @@ function formatNumber(num = 0) {
<td :rowspan="disList[0].budget == disList[1].budget ? '2' : ''"> <td :rowspan="disList[0].budget == disList[1].budget ? '2' : ''">
{{ formatNumber(disList[0].budget) }}% {{ formatNumber(disList[0].budget) }}%
</td> </td>
<td :rowspan="disList[0].monthOne == disList[1].monthOne ? '2' : ''"> <td
:rowspan="disList[0].monthOne == disList[1].monthOne ? '2' : ''"
>
{{ formatNumber(disList[0].monthOne) }}% {{ formatNumber(disList[0].monthOne) }}%
</td> </td>
<td :rowspan="disList[0].monthTwo == disList[1].monthTwo ? '2' : ''"> <td
:rowspan="disList[0].monthTwo == disList[1].monthTwo ? '2' : ''"
>
{{ formatNumber(disList[0].monthTwo) }}% {{ formatNumber(disList[0].monthTwo) }}%
</td> </td>
</tr> </tr>
@ -513,10 +577,14 @@ function formatNumber(num = 0) {
<td :rowspan="dszList[0].budget == dszList[1].budget ? '2' : ''"> <td :rowspan="dszList[0].budget == dszList[1].budget ? '2' : ''">
{{ formatNumber(dszList[0].budget) }}% {{ formatNumber(dszList[0].budget) }}%
</td> </td>
<td :rowspan="dszList[0].monthOne == dszList[1].monthOne ? '2' : ''"> <td
:rowspan="dszList[0].monthOne == dszList[1].monthOne ? '2' : ''"
>
{{ formatNumber(dszList[0].monthOne) }}% {{ formatNumber(dszList[0].monthOne) }}%
</td> </td>
<td :rowspan="dszList[0].monthTwo == dszList[1].monthTwo ? '2' : ''"> <td
:rowspan="dszList[0].monthTwo == dszList[1].monthTwo ? '2' : ''"
>
{{ formatNumber(dszList[0].monthTwo) }}% {{ formatNumber(dszList[0].monthTwo) }}%
</td> </td>
</tr> </tr>
@ -577,13 +645,23 @@ function formatNumber(num = 0) {
<tr> <tr>
<th rowspan="2">C/D</th> <th rowspan="2">C/D</th>
<th>交涉</th> <th>交涉</th>
<td :rowspan="dishList[0].budget == dishList[1].budget ? '2' : ''"> <td
:rowspan="dishList[0].budget == dishList[1].budget ? '2' : ''"
>
{{ formatNumber(dishList[0].budget) }}% {{ formatNumber(dishList[0].budget) }}%
</td> </td>
<td :rowspan="dishList[0].monthOne == dishList[1].monthOne ? '2' : ''"> <td
:rowspan="
dishList[0].monthOne == dishList[1].monthOne ? '2' : ''
"
>
{{ formatNumber(dishList[0].monthOne) }}% {{ formatNumber(dishList[0].monthOne) }}%
</td> </td>
<td :rowspan="dishList[0].monthTwo == dishList[1].monthTwo ? '2' : ''"> <td
:rowspan="
dishList[0].monthTwo == dishList[1].monthTwo ? '2' : ''
"
>
{{ formatNumber(dishList[0].monthTwo) }}% {{ formatNumber(dishList[0].monthTwo) }}%
</td> </td>
</tr> </tr>
@ -622,21 +700,30 @@ function formatNumber(num = 0) {
</div> </div>
<div class="card" @click="setModule('App_BCP', 'BCP')"> <div class="card" @click="setModule('App_BCP', 'BCP')">
<div class="card_title cursor-pointer hover:underline">调达BCP管理</div> <div class="card_title cursor-pointer hover:underline">调达BCP管理</div>
<div class="card_sub-title">责任者调达 加工品变革T</div> <div class="card_sub-title">责任者调达中心 加工品变革T</div>
<div class="card_content"> <div class="card_content">
<img src="@/assets/images/img-11.png" class="w-full h-full object-cover" /> <img
src="@/assets/images/img-11.png"
class="w-full h-full object-cover"
/>
</div> </div>
</div> </div>
<div class="card relative"> <div class="card relative">
<!-- <img src="@/assets/images/img-42.png" class="absolute top-10px right-0" /> --> <!-- <img src="@/assets/images/img-42.png" class="absolute top-10px right-0" /> -->
<div class="card_title cursor-pointer hover:underline" @click="setModule('App_CSR', 'CSR')"> <div
class="card_title cursor-pointer hover:underline"
@click="setModule('App_CSR', 'CSR')"
>
SCM碳中和活动 SCM碳中和活动
</div> </div>
<div class="card_sub-title" @click="setModule('App_CSR', 'CSR')"> <div class="card_sub-title" @click="setModule('App_CSR', 'CSR')">
责任者开发调达部 调达机能研究T 责任者调达研究院 调达机能研究T
</div> </div>
<div class="card_content px20px" @click="setModule('App_CSR', 'CSR')"> <div class="card_content px20px" @click="setModule('App_CSR', 'CSR')">
<img src="../../assets/images/scmtzh@2x.png" class="w-full h-96% cover" /> <img
src="../../assets/images/scmtzh@2x.png"
class="w-full h-96% cover"
/>
<!-- <div class="flex text-center"> <!-- <div class="flex text-center">
<div class="bg-#F4F8FF text-#000 h30px w-full pt5px font-bold">F25碳减排目标 <el-icon class="!text-#004DE1"> <div class="bg-#F4F8FF text-#000 h30px w-full pt5px font-bold">F25碳减排目标 <el-icon class="!text-#004DE1">
<CaretTop /> <CaretTop />
@ -680,20 +767,31 @@ function formatNumber(num = 0) {
</div> </div>
<div class="card topics"> <div class="card topics">
<div class="card_title cursor-pointer hover:underline">重点Theme取组</div> <div class="card_title cursor-pointer hover:underline">
重点Theme取组
</div>
<div class="card_content p20px pt10px"> <div class="card_content p20px pt10px">
<div <div
class="w-full h-full flex flex-wrap content-between justify-between text-18px font-bold" class="w-full h-full flex flex-wrap content-between justify-between text-18px font-bold"
> >
<div class="item !h-188px cursor-pointer" @click="setModule('App_Quality', 'Quality')"> <div
class="item !h-188px cursor-pointer"
@click="setModule('App_Quality', 'Quality')"
>
<div class="item_title hover:underline">品质</div> <div class="item_title hover:underline">品质</div>
<div class="item_sub-title">责任者调达部 企画管理T</div> <div class="item_sub-title">责任者调达中心 加工品变革T</div>
<!-- <img src="@/assets/images/img-45.svg" class="item_img pb13px pr20px" /> --> <!-- <img src="@/assets/images/img-45.svg" class="item_img pb13px pr20px" /> -->
<img src="@/assets/images/img-41.png" class="item_img b !bottom--20px" /> <img
src="@/assets/images/img-41.png"
class="item_img b !bottom--20px"
/>
</div> </div>
<div class="item !h-188px cursor-pointer" @click="setModule('App_Lab', 'Diffspace')"> <div
class="item !h-188px cursor-pointer"
@click="setModule('App_Lab', 'Diffspace')"
>
<div class="item_title hover:underline">AI差别化LAB</div> <div class="item_title hover:underline">AI差别化LAB</div>
<div class="item_sub-title">责任者开发调达部</div> <div class="item_sub-title">责任者调达研究院</div>
<div class="item_sub-title">差别化研究T</div> <div class="item_sub-title">差别化研究T</div>
<img src="@/assets/images/img-43.png" class="item_img" /> <img src="@/assets/images/img-43.png" class="item_img" />
</div> </div>
@ -706,13 +804,20 @@ function formatNumber(num = 0) {
<!-- <img src="./images/home-1.svg" /> --> <!-- <img src="./images/home-1.svg" /> -->
<div class="flex mt20px items-center justify-center"> <div class="flex mt20px items-center justify-center">
<div class="bg-#0038BE w210px px15px py7px rounded-30px"> <div class="bg-#0038BE w210px px15px py7px rounded-30px">
<img src="@/assets/images/biaoq2@2x.png" class="w25px h21px" /> <img
src="@/assets/images/biaoq2@2x.png"
class="w25px h21px"
/>
重点Theme管理 重点Theme管理
</div> </div>
<span class="text-#000 font-thin underline-text mx23px hover:underline-solid" <span
>开发调达部</span class="text-#000 font-thin underline-text mx23px hover:underline-solid"
>调达研究院</span
>
<span
class="text-#000 font-thin underline-text hover:underline-solid"
>调达中心</span
> >
<span class="text-#000 font-thin underline-text hover:underline-solid">调达部</span>
<!-- <VChart :option="chartOption2" autoresize /> --> <!-- <VChart :option="chartOption2" autoresize /> -->
</div> </div>
</div> </div>

View File

@ -1,19 +1,15 @@
<script setup lang="ts"> <script setup lang="ts">
import { getArticlePage, report, cateFileList, newDataList } from '@/api/daikin/base' import { getArticlePage, report, cateFileList } from '@/api/daikin/base'
import { message } from '@/utils/message' import { message } from '@/utils/message'
import { Swiper, SwiperSlide } from 'swiper/vue' import { Swiper, SwiperSlide } from 'swiper/vue'
import { Autoplay, Navigation, Pagination, A11y } from 'swiper' import { Autoplay, Navigation, Pagination, A11y } from 'swiper'
import dayjs from 'dayjs' import { NCarousel } from 'naive-ui'
// import { NCarousel } from 'naive-ui'
const route = useRoute() const route = useRoute()
const { push } = useRouter() const { push } = useRouter()
const listData = ref<any[]>([]) const listData = ref<any[]>([])
const curTab = ref(0)
const firstItem = ref<any>('')
const newsData = ref<any>({})
async function getPageList() { async function getPageList() {
// const { code } = report({ moduleCode: 'App_Article' }) const { code } = report({ moduleCode: 'App_Article' })
const { rows } = await getArticlePage({ const { rows } = await getArticlePage({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
@ -22,33 +18,10 @@ async function getPageList() {
// console.log(rows) // console.log(rows)
// for (let index = 0; index < 50; index++) { // for (let index = 0; index < 50; index++) {
listData.value = rows listData.value = rows
// } // }
console.log(listData.value.length) console.log(listData.value.length)
} }
const fetchNewDataList = async () => {
const res = await newDataList({ pageNum: 1, pageSize: 8 })
// const data = groupDatesByWeek(res.rows || [])
const data = res.rows || []
newsData.value = data
firstItem.value = Object.keys(data)[0]
}
//
function groupDatesByWeek(dates = [], weekStartDay = 1) {
return dates.reduce((acc: any, item: any) => {
const weekStart = dayjs(item.createTime)
.startOf('week')
.add(weekStartDay, 'day')
.format('MM月DD日')
const weekEnd = dayjs(item.createTime).endOf('week').add(weekStartDay, 'day').format('MM月DD日')
const key = `${weekStart} - ${weekEnd}`
acc[key] = acc[key] || []
acc[key].push(item)
return acc
}, {})
}
onMounted(getPageList) onMounted(getPageList)
// console.log(listData) // console.log(listData)
@ -64,53 +37,14 @@ onMounted(getPageList)
// } // }
// } // }
const toDetail2 = (n: any) => { const toDetail2 = (n: any) => {
console.log(n) // console.log(n)
if (n.id === 0) return if (n.id === 0) return
if (n.isSelect === 1) { if (n.isSelect === 1) {
if (n.moduleCode === 'App_Database') {
return push('/DataBase?id=' + n.cateId)
}
if (n.moduleCode === 'App_Article') {
return push('/Home/intelligence/' + n.id)
}
push(`/intelligence/${n.type == 2 ? 'within' : 'outside'}/` + n.id) push(`/intelligence/${n.type == 2 ? 'within' : 'outside'}/` + n.id)
} else { } else {
message.error('没有访问权限') message.error('没有访问权限')
} }
} }
const downloads = (data: any = {}) => {
const { fileCommon, filePath } = data
if ((fileCommon?.fileSize || 0) > 25 * 1024 * 1024) {
message.info('正在下载中,请稍等~')
downloadFile(filePath)
return
}
if (filePath) {
window.open(filePath, '_blank')
} else {
message.info('没有可预览文件!')
}
}
function downloadFile(url: any) {
fetch(url)
.then((response) => response.blob())
.then((blob) => {
const downloadUrl = URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = downloadUrl
link.download = getFileNameFromUrl(url)
link.click()
})
}
function getFileNameFromUrl(url: string) {
const lastSlashIndex = url.lastIndexOf('/')
if (lastSlashIndex !== -1) {
return url.substring(lastSlashIndex + 1)
} else {
return 'Invalid URL'
}
}
const modules = [Autoplay, Pagination, Navigation, A11y] const modules = [Autoplay, Pagination, Navigation, A11y]
const files = ref<any>({}) const files = ref<any>({})
@ -126,124 +60,47 @@ const getFile = async () => {
const t = files.value.createTime const t = files.value.createTime
if (t) { if (t) {
const arr = t.split('-') const arr = t.split('-')
// files.value.time = arr[0] + '' + (+arr[1] - 1) + '' files.value.time = arr[0] + '年' + (+arr[1] - 1) + '月'
files.value.time = arr[1] - 1
} }
} }
getFile() getFile()
fetchNewDataList()
</script> </script>
<template> <template>
<div class="card news relative"> <div class="card news relative">
<div class="news-left absolute z-10 transition-all" v-show="curTab == 1"></div>
<div class="news-right absolute z-10 transition-all" v-show="curTab == 0"></div>
<div class="absolute top-0 left-0 right-0 flex items-center z-11">
<div
class="text-black p-20px text-28px w-1/3 transition-all"
:class="[{ 'text-#fff': curTab == 1 }]"
@click="curTab = 0"
>
最近更新
</div>
<div class="card_title !pt-10px !pl-30px flex-1 !pb-10px" @click="curTab = 1">
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<p <div>
class="text-22px cursor-pointer hover:underline transition-all" <div
:class="[{ 'text-#fff': curTab == 0 }]" class="card_title cursor-pointer hover:underline"
@click.stop="push({ name: 'Intelligence' })" @click="push({ name: 'Intelligence' })"
> >
外部情报 外部情报
</p> </div>
<div class="card_sub-title">责任者调达研究院 研究企画T</div>
</div>
<div <div
class="flex text-#fff tetx-16px items-end txt-bg px-8px py-6px rounded-10px text-#fff mr-10px"
>
<div
@click.stop="push({ name: 'DataBase', query: { id: cateId } })"
class="text-16px text-#fff flex align-middle items-center cursor-pointer hover:underline transition-all"
>
<div>{{ files.time || `1` }}月月报</div>
<img class="h-14px pl-4px" src="@/assets/images/yjtt@2x.png" alt="" />
</div>
<!-- <span class="text-14px mt2px"> 作成日{{ files.time || `2024年1月` }} </span> -->
</div>
</div>
<div class="!px-0 !text-12px mt-4px" :class="[{ 'text-#fff': curTab == 0 }]">
责任者开发调达部 研究企画T
</div>
</div>
<!-- <div class="card_sub-title">责任者调达研究院 研究企画T</div> -->
</div>
<!-- <div
class="flex text-#fff tetx-16px items-end txt-bg px-10px py-8px rounded-10px text-#fff mt-[10px] mr-16px" class="flex text-#fff tetx-16px items-end txt-bg px-10px py-8px rounded-10px text-#fff mt-[10px] mr-16px"
> >
<p <p
class="text-16px text-#fff flex flex-col flex-start" class="text-16px text-#fff flex flex-col flex-start"
@click="push({ name: 'DataBase', query: { id: cateId } })" @click="push({ name: 'DataBase', query: { id: cateId } })"
> >
<span class="flex align-middle items-center cursor-pointer hover:underline mb-4px"
>调达本部月报
<img class="h-14px pl-4px" src="@/assets/images/yjtt@2x.png" alt="" />
</span>
<span class="text-14px mt2px"> 作成日{{ files.time || `2024年1月` }} </span>
</p>
</div> -->
<div
class="card_content px-20px pb-0 mt-0px absolute left-0 right-0 z-100 top-70px"
v-if="curTab == 0"
>
<!-- <div class="font-16px !h-310px overflow-y-scroll"> -->
<!-- <swiper
id="swiperList2"
v-if="listData"
:slides-per-view="4"
:autoplay="false && { delay: 1000, disableOnInteraction: false }"
:speed="500"
:space-between="10"
:direction="'vertical'"
:scrollbar="{ draggable: false }"
:loop="true"
:modules="modules"
style="height: 280px"
>
<swiper-slide v-for="(i, index) of newsData" :key="index"> -->
<div height="310px" class="h-310px overflow-hidden">
<!-- <div class="text-black mb-10px" v-for="(item, index) of newsData" :key="index"> -->
<div class="text-black mb-10px" v-for="(i, index) in newsData" :key="index">
<div class="flex justify-between items-center mb4px" v-if="index === 0">
<span class="text-18px mb-10px mt-0px opacity-0">{{ index }}</span>
<span <span
class="text-16px text-#4D7EE8 cursor-pointer hover:underline" class="flex align-middle items-center cursor-pointer hover:underline mb-4px"
@click="push({ name: 'Latest' })" >调达本部月报
>更多</span <img
> class="h-14px pl-4px"
</div> src="@/assets/images/yjtt@2x.png"
<!-- <template v-for="(i, k) in item" :key="k"> --> alt=""
<div class="flex items-baseline flex-1"> />
<div </span>
@click="toDetail2(i)" <span class="text-14px mt2px">
class="text-#142142 truncate text-18px font-bold w-95% no-underline text-#142142 cursor-pointer hover:underline h-16px leading-16px" 作成日{{ files.time || `2024年1月` }}
> </span>
<!-- <img class="h-20px" src="@/assets/images/NEW.gif" alt="" /> --> </p>
<span>{{ i.title || '' }}</span>
</div>
<div class="text-#808696 ml20px text-14px flex items-center justify-between mb-10px">
<span class="whitespace-nowrap block w-100px"> {{ i.departName }}</span>
<!-- <span class="w-[36%]"> {{ i.userName }}</span> -->
<span class="whitespace-nowrap block w86px"> {{ i.createTime?.slice(0, 10) }}</span>
</div> </div>
</div> </div>
<!-- </template> --> <div class="card_content px-20px pt-30px pb-0">
</div>
</div>
<!-- </swiper-slide>
</swiper> -->
<!-- </div> -->
</div>
<div
class="card_content px-20px pt-20px pb-0 mt-0px absolute left-0 right-0 top-70px z-[-1]"
:class="[{ 'z-100': curTab == 1 }]"
>
<div <div
v-if="false" v-if="false"
class="news_card w-437px flex items-end gap-12px text-#fff/80 !absolute right--20% top--38% scale-50" class="news_card w-437px flex items-end gap-12px text-#fff/80 !absolute right--20% top--38% scale-50"
@ -252,28 +109,43 @@ fetchNewDataList()
src="@/assets/images/bg-card6-text.svg" src="@/assets/images/bg-card6-text.svg"
class="h26px absolute left-16px top-16px animate__animated animate__zoomIn animate__delay-2s animate__slower animate__repeat-2" class="h26px absolute left-16px top-16px animate__animated animate__zoomIn animate__delay-2s animate__slower animate__repeat-2"
/> />
<div class="news_card_item i1 flex-1 w0 h100px p10px pt56px flex flex-col justify-around"> <div
class="news_card_item i1 flex-1 w0 h100px p10px pt56px flex flex-col justify-around"
>
<img <img
src="@/assets/images/WATCHING@2x.png" src="@/assets/images/WATCHING@2x.png"
class="w41px h47px absolute left-40px top-25px animate__animated animate__infinite animate__heartBeat" class="w41px h47px absolute left-40px top-25px animate__animated animate__infinite animate__heartBeat"
/> />
<img src="@/assets/images/WATCHING2@2x.png" class="w80px left-10px top-10px" /> <img
src="@/assets/images/WATCHING2@2x.png"
class="w80px left-10px top-10px"
/>
<!-- <p class="truncate" v-if="listData && Array.isArray(listData) && listData.length > 0" v-for="i in listData.slice(0,2)" :key="i" @click="toDetail2(i)">{{ i.title }}</p> --> <!-- <p class="truncate" v-if="listData && Array.isArray(listData) && listData.length > 0" v-for="i in listData.slice(0,2)" :key="i" @click="toDetail2(i)">{{ i.title }}</p> -->
</div> </div>
<div class="news_card_item i2 flex-1 w0 h120px p10px pt56px flex flex-col justify-around"> <div
class="news_card_item i2 flex-1 w0 h120px p10px pt56px flex flex-col justify-around"
>
<img <img
src="@/assets/images/ALARM@2x.png" src="@/assets/images/ALARM@2x.png"
class="w61px h63px absolute left-28px top-30px animate__animated animate__infinite animate__fadeIn" class="w61px h63px absolute left-28px top-30px animate__animated animate__infinite animate__fadeIn"
/> />
<img src="@/assets/images/ALARM2@2x.png" class="w70px left-15px top-14px" /> <img
src="@/assets/images/ALARM2@2x.png"
class="w70px left-15px top-14px"
/>
<!-- <p class="truncate" v-if="listData && Array.isArray(listData) && listData.length > 2" v-for="i in listData.slice(2,4)" :key="i" @click="toDetail2(i)">{{ i.title }}</p> --> <!-- <p class="truncate" v-if="listData && Array.isArray(listData) && listData.length > 2" v-for="i in listData.slice(2,4)" :key="i" @click="toDetail2(i)">{{ i.title }}</p> -->
</div> </div>
<div class="news_card_item i3 w140px h160px p10px pt70px flex flex-col justify-around"> <div
class="news_card_item i3 w140px h160px p10px pt70px flex flex-col justify-around"
>
<img <img
src="@/assets/images/WARNING@2x.png" src="@/assets/images/WARNING@2x.png"
class="w82px h66px absolute left-30px top-45px animate__animated animate__infinite animate__flipOutY" class="w82px h66px absolute left-30px top-45px animate__animated animate__infinite animate__flipOutY"
/> />
<img src="@/assets/images//WARNING2@2x.png" class="w100px left-8px top-20px" /> <img
src="@/assets/images//WARNING2@2x.png"
class="w100px left-8px top-20px"
/>
<!-- <p class="truncate" v-if="listData && Array.isArray(listData) && listData.length > 4" v-for="i in listData.slice(4,7)" :key="i" @click="toDetail2(i)">{{ i.title }}</p> --> <!-- <p class="truncate" v-if="listData && Array.isArray(listData) && listData.length > 4" v-for="i in listData.slice(4,7)" :key="i" @click="toDetail2(i)">{{ i.title }}</p> -->
</div> </div>
</div> </div>
@ -283,7 +155,7 @@ fetchNewDataList()
> >
最新News 最新News
</div> </div>
<div class="font-16px !h-240px overflow-y-auto mt10px"> <div class="font-16px !h-230px overflow-y-auto mt10px">
<!-- <n-carousel direction="vertical" dot-placement="right" style="width: 100%; height: 100px" autoplay :interval="1200" <!-- <n-carousel direction="vertical" dot-placement="right" style="width: 100%; height: 100px" autoplay :interval="1200"
:slides-per-view="2" :space-between="0" :loop="false" mousewheel> :slides-per-view="2" :space-between="0" :loop="false" mousewheel>
<div class="mt-10px" v-if="listData && Array.isArray(listData) && listData.length > 0" v-for="i in listData" <div class="mt-10px" v-if="listData && Array.isArray(listData) && listData.length > 0" v-for="i in listData"
@ -331,20 +203,6 @@ fetchNewDataList()
</div> </div>
</template> </template>
<style lang="less" scoped> <style lang="less" scoped>
.news-left {
background: url('@/assets/images/news-left.jpg') no-repeat;
width: 100%;
height: 100%;
top: -2px;
left: 0px;
}
.news-right {
width: 100%;
height: 100%;
top: -2px;
right: 0px;
background: url('@/assets/images/news-right.jpg') no-repeat;
}
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 1px; width: 1px;
} }

View File

@ -15,20 +15,16 @@ const store = useUserStore()
const { push } = useRouter() const { push } = useRouter()
const route = useRoute() const route = useRoute()
const userCode = ['admin', 'csr_dandang', 'tech_service'].includes(store.user.roleCode) const userCode = ['admin', 'csr_dandang', 'tech_service'].includes(
const Navs = [ store.user.roleCode
{ name: '集团*部门方针' }, )
{ name: '年度活动日程表' }, const Navs = [{ name: '集团*部门方针' }, { name: '年度活动日程表' }, { name: '其他链接' }, { name: '紧急联络' }, { name: 'CN/JP' }]
{ name: '其他链接' },
{ name: '紧急联络' },
{ name: 'CN/JP' }
]
const Content = [ const Content = [
{ key: '1-1', component: () => <CSRContent /> }, { key: '1-1', component: () => <CSRContent /> },
{ key: '1-2', component: () => <CSRContent22/> }, { key: '1-2', component: () => <CSRContent22/> },
{ key: '1-3', component: () => <CSRContent23 /> }, { key: '1-3', component: () => <CSRContent23 /> },
// { key: '1-4', component: () => <CSRContent2 items={Content3} /> }, // { key: '1-4', component: () => <CSRContent2 items={Content3} /> },
{ key: '1-4', component: () => <CSRContent2 /> } { key: '1-4', component: () => <CSRContent2 /> },
] ]
const activeNav = ref(route.query.key || '1-4') const activeNav = ref(route.query.key || '1-4')
@ -58,11 +54,7 @@ watch(activeNav, (newVal) => {
<div class="h-full relative flex flex-col"> <div class="h-full relative flex flex-col">
<div class="flex flex-end ml10px mt27px"> <div class="flex flex-end ml10px mt27px">
<div class="flex-1"></div> <div class="flex-1"></div>
<el-button <el-button class="absolute right-5 top-[-8px]" v-if="userCode && activeNav === '1-2'" type="primary" @click="shomks"
class="absolute right-5 top-[-8px]"
v-if="userCode && activeNav === '1-2'"
type="primary"
@click="shomks"
>管理</el-button >管理</el-button
> >
<!-- <div class="px16px py8px cursor-pointer text-20px" v-for="nav in Navs" :key="nav.name">{{ nav.name }}</div> --> <!-- <div class="px16px py8px cursor-pointer text-20px" v-for="nav in Navs" :key="nav.name">{{ nav.name }}</div> -->

View File

@ -30,7 +30,20 @@ const isDateDisabled = (date: any) => {
} }
const csrSupplier = ref<any>([]) const csrSupplier = ref<any>([])
const csrSupplierObj = ref<any>({}) const csrSupplierObj = ref<any>({})
const months = ['04', '05', '06', '07', '08', '09', '10', '11', '12', '01', '02', '03'] const months = [
'04',
'05',
'06',
'07',
'08',
'09',
'10',
'11',
'12',
'01',
'02',
'03'
]
const loading = ref(false) const loading = ref(false)
const getCsrSupplier = () => { const getCsrSupplier = () => {
loading.value = true loading.value = true
@ -54,7 +67,10 @@ const getCsrSupplier = () => {
}) })
: [] : []
} catch (error) {} } catch (error) {}
console.log('🚀 ~ file: CSRContent23.vue:50 ~ csrSupplierObj:', csrSupplierObj) console.log(
'🚀 ~ file: CSRContent23.vue:50 ~ csrSupplierObj:',
csrSupplierObj
)
if (!csrSupplier.value.length) { if (!csrSupplier.value.length) {
// message.warning('') // message.warning('')
csrSupplierObj.value = {} csrSupplierObj.value = {}
@ -68,16 +84,21 @@ const getCsrSupplier = () => {
const csrSupplierList = ref<any>([]) const csrSupplierList = ref<any>([])
const selMonth = ref('') const selMonth = ref('')
const getCsrSupplierList = (index?: any) => { const getCsrSupplierList = (index?: any) => {
const month = index || index === 0 ? query.value.year + '-' + months[index] : '' const month =
index || index === 0 ? query.value.year + '-' + months[index] : ''
csrSupplierList.value = [] csrSupplierList.value = []
selMonth.value = '' selMonth.value = ''
const req = { pageNum: 1, pageSize: 10, ...query.value, month } const req = { pageNum: 1, pageSize: 10, ...query.value, month }
req.supplierName req.supplierName
? fetchCsrSupplierList(req).then((res: any) => { ? fetchCsrSupplierList(req).then((res: any) => {
csrSupplierList.value = (res.rows || []).filter((item: any) => item.submitunCount > 0) csrSupplierList.value = (res.rows || []).filter(
(item: any) => item.submitunCount > 0
)
}) })
: fetchCsrSupplierTopList(req).then((res: any) => { : fetchCsrSupplierTopList(req).then((res: any) => {
csrSupplierList.value = (res.rows || []).filter((item: any) => item.submitunCount > 0) csrSupplierList.value = (res.rows || []).filter(
(item: any) => item.submitunCount > 0
)
}) })
selMonth.value = month ? +months[index] + '月' : '' selMonth.value = month ? +months[index] + '月' : ''
} }
@ -110,13 +131,14 @@ getCsrSupplierTaskInfo()
<a <a
href="https://procurement.daikin.net.cn/mingdao/portal/app/7abea528-f7b4-4437-84bb-6b6b169bad3d" href="https://procurement.daikin.net.cn/mingdao/portal/app/7abea528-f7b4-4437-84bb-6b6b169bad3d"
class="no-underline text-#4E7EE8" class="no-underline text-#4E7EE8"
><img src="./images/yuny@2x.png" class="w25px mr5px mt--4px" /><span>明道云</span></a ><img src="./images/yuny@2x.png" class="w25px mr5px mt--4px" /><span
>明道云</span
></a
> >
</div> </div>
<div class="flex w-full h-80px p20px items-center mt10px"> <div class="flex w-full h-80px p20px items-center mt10px">
<div> <div>
<el-date-picker <el-date-picker
popper-class="dete-picker"
v-model="query.year" v-model="query.year"
type="year" type="year"
@change="handleChange" @change="handleChange"
@ -139,7 +161,9 @@ getCsrSupplierTaskInfo()
<el-row :gutter="10" v-if="false"> <el-row :gutter="10" v-if="false">
<el-col :span="8" <el-col :span="8"
><div class="times"> ><div class="times">
<div class="text-#fff text-18px font-bold absolute left-40% top-18px"> <div
class="text-#fff text-18px font-bold absolute left-40% top-18px"
>
<span class="text-30px">1</span> <span class="text-30px">1</span>
</div> </div>
<div <div
@ -156,14 +180,18 @@ getCsrSupplierTaskInfo()
> >
<el-col :span="8" <el-col :span="8"
><div class="time"> ><div class="time">
<div class="text-#d3d2d2 text-18px font-bold absolute left-40% top-45%"> <div
class="text-#d3d2d2 text-18px font-bold absolute left-40% top-45%"
>
<span class="text-60px">2</span> <span class="text-60px">2</span>
</div> </div>
</div></el-col </div></el-col
> >
<el-col :span="8" <el-col :span="8"
><div class="time"> ><div class="time">
<div class="text-#d3d2d2 text-18px font-bold absolute left-40% top-45%"> <div
class="text-#d3d2d2 text-18px font-bold absolute left-40% top-45%"
>
<span class="text-60px">3</span> <span class="text-60px">3</span>
</div> </div>
</div></el-col </div></el-col
@ -173,7 +201,9 @@ getCsrSupplierTaskInfo()
<el-col :span="8" v-for="(it, i) in months" :key="i"> <el-col :span="8" v-for="(it, i) in months" :key="i">
<div <div
v-show="!loading" v-show="!loading"
:class="i <= nowIndexMonth && query.year == jpMonth ? 'times' : 'time'" :class="
i <= nowIndexMonth && query.year == jpMonth ? 'times' : 'time'
"
@click="handleMonth(i)" @click="handleMonth(i)"
> >
<div <div
@ -184,9 +214,14 @@ getCsrSupplierTaskInfo()
> >
</div> </div>
<template <template
v-if="i <= nowIndexMonth && (query.year == jpMonth || !!csrSupplierObj[it])" v-if="
i <= nowIndexMonth &&
(query.year == jpMonth || !!csrSupplierObj[it])
"
>
<div
class="text-#fff text-18px font-bold absolute left-40% top-24px"
> >
<div class="text-#fff text-18px font-bold absolute left-40% top-24px">
<span class="text-24px">{{ +it }}</span <span class="text-24px">{{ +it }}</span
> >
</div> </div>
@ -205,7 +240,9 @@ getCsrSupplierTaskInfo()
</el-col> </el-col>
<el-col :span="8" v-if="false" <el-col :span="8" v-if="false"
><div class="time"> ><div class="time">
<div class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"> <div
class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"
>
<span class="text-60px">5</span> <span class="text-60px">5</span>
</div> </div>
<template v-if="false"> <template v-if="false">
@ -224,7 +261,9 @@ getCsrSupplierTaskInfo()
> >
<el-col :span="8" v-if="false" <el-col :span="8" v-if="false"
><div class="time"> ><div class="time">
<div class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"> <div
class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"
>
<span class="text-60px">6</span> <span class="text-60px">6</span>
</div> </div>
</div></el-col </div></el-col
@ -233,14 +272,18 @@ getCsrSupplierTaskInfo()
<el-row :gutter="10" v-if="false"> <el-row :gutter="10" v-if="false">
<el-col :span="8" <el-col :span="8"
><div class="time"> ><div class="time">
<div class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"> <div
class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"
>
<span class="text-60px">7</span> <span class="text-60px">7</span>
</div> </div>
</div></el-col </div></el-col
> >
<el-col :span="8" <el-col :span="8"
><div class="time"> ><div class="time">
<div class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"> <div
class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"
>
<span class="text-60px">8</span> <span class="text-60px">8</span>
</div> </div>
</div></el-col </div></el-col
@ -248,7 +291,9 @@ getCsrSupplierTaskInfo()
<el-col :span="8" <el-col :span="8"
><div class="times"> ><div class="times">
<!-- <div class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"><span class="text-60px">9</span></div> --> <!-- <div class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"><span class="text-60px">9</span></div> -->
<div class="text-#fff text-18px font-bold absolute left-40% top-24px"> <div
class="text-#fff text-18px font-bold absolute left-40% top-24px"
>
<span class="text-24px">9</span> <span class="text-24px">9</span>
</div> </div>
<div <div
@ -267,21 +312,27 @@ getCsrSupplierTaskInfo()
<el-row :gutter="10" v-if="false"> <el-row :gutter="10" v-if="false">
<el-col :span="8" <el-col :span="8"
><div class="time"> ><div class="time">
<div class="text-#d3d2d2 text-18px font-bold absolute left-30% top-45%"> <div
class="text-#d3d2d2 text-18px font-bold absolute left-30% top-45%"
>
<span class="text-60px">10</span> <span class="text-60px">10</span>
</div> </div>
</div></el-col </div></el-col
> >
<el-col :span="8" <el-col :span="8"
><div class="time"> ><div class="time">
<div class="text-#d3d2d2 text-18px font-bold absolute left-30% top-45%"> <div
class="text-#d3d2d2 text-18px font-bold absolute left-30% top-45%"
>
<span class="text-60px">11</span> <span class="text-60px">11</span>
</div> </div>
</div></el-col </div></el-col
> >
<el-col :span="8" <el-col :span="8"
><div class="time"> ><div class="time">
<div class="text-#d3d2d2 text-18px font-bold absolute left-30% top-45%"> <div
class="text-#d3d2d2 text-18px font-bold absolute left-30% top-45%"
>
<span class="text-60px">12</span> <span class="text-60px">12</span>
</div> </div>
</div></el-col </div></el-col
@ -290,7 +341,9 @@ getCsrSupplierTaskInfo()
<el-row :gutter="10" v-if="false"> <el-row :gutter="10" v-if="false">
<el-col :span="8" <el-col :span="8"
><div class="time"> ><div class="time">
<div class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"> <div
class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"
>
<span class="text-60px">1</span> <span class="text-60px">1</span>
</div> </div>
<template v-if="false"> <template v-if="false">
@ -309,14 +362,18 @@ getCsrSupplierTaskInfo()
> >
<el-col :span="8" <el-col :span="8"
><div class="time"> ><div class="time">
<div class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"> <div
class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"
>
<span class="text-60px">2</span> <span class="text-60px">2</span>
</div> </div>
</div></el-col </div></el-col
> >
<el-col :span="8" <el-col :span="8"
><div class="time"> ><div class="time">
<div class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"> <div
class="text-#d3d2d2 text-18px font-bold absolute left-38% top-45%"
>
<span class="text-60px">3</span> <span class="text-60px">3</span>
</div> </div>
</div></el-col </div></el-col
@ -325,11 +382,18 @@ getCsrSupplierTaskInfo()
</div> </div>
</div> </div>
<div class="cards"> <div class="cards">
<div class="cards_title relative">未提交供应商明细({{ query.year }}{{ selMonth }})</div> <div class="cards_title relative">
<div class="absolute top-24px !text-18px right-20px pt30px text-#4E7EE8"> 未提交供应商明细({{ query.year }}{{ selMonth }})
</div>
<div
class="absolute top-24px !text-18px right-20px pt30px text-#4E7EE8"
>
<span class="text-#ababab">更新时间{{ updateTime }}</span> <span class="text-#ababab">更新时间{{ updateTime }}</span>
</div> </div>
<div ref="msgScoll" class="px20px w-full h800px cent_box overflow-y-auto mt-12px"> <div
ref="msgScoll"
class="px20px w-full h800px cent_box overflow-y-auto mt-12px"
>
<div <div
v-if="csrSupplierList?.length" v-if="csrSupplierList?.length"
class="text-18px text-#808696 bg-#F4F8FF items-center flex py10px rd-5px mt10px" class="text-18px text-#808696 bg-#F4F8FF items-center flex py10px rd-5px mt10px"
@ -337,12 +401,15 @@ getCsrSupplierTaskInfo()
:key="key" :key="key"
> >
<div class="truncate2" @click=""> <div class="truncate2" @click="">
<span class="text-#fff bg-#407DF1 px8px rounded-1/2 mr-5px inlineFlex">{{ <span
++key class="text-#fff bg-#407DF1 px8px rounded-1/2 mr-5px inlineFlex"
}}</span> >{{ ++key }}</span
>
<span>{{ i.supplierName }} </span> <span>{{ i.supplierName }} </span>
</div> </div>
<div class="min-w130px max-w130px text-#000">{{ i.submitunCount }}次未提交</div> <div class="min-w130px max-w130px text-#000">
{{ i.submitunCount }}次未提交
</div>
<!-- <div class="min-w150px max-w150px text-#000">{{++key}}月未提交</div> --> <!-- <div class="min-w150px max-w150px text-#000">{{++key}}月未提交</div> -->
<span class="absolute right-10px top-18px"> <span class="absolute right-10px top-18px">
<!-- 暂不开发 12-03 --> <!-- 暂不开发 12-03 -->

View File

@ -97,13 +97,21 @@ async function getTree() {
} }
getTree() getTree()
function findItemById(items: any, targetId: any, topLevelItem: any = null): any { function findItemById(
items: any,
targetId: any,
topLevelItem: any = null
): any {
for (let i = 0; i < items.length; i++) { for (let i = 0; i < items.length; i++) {
const item = items[i] const item = items[i]
if (item.id === targetId) { if (item.id === targetId) {
return { topLevelItem: topLevelItem || item, targetItem: item } return { topLevelItem: topLevelItem || item, targetItem: item }
} else if (item.childList?.length > 0) { } else if (item.childList?.length > 0) {
const result = findItemById(item.childList, targetId, topLevelItem || item) const result = findItemById(
item.childList,
targetId,
topLevelItem || item
)
if (result.targetItem) { if (result.targetItem) {
return result return result
} }
@ -126,10 +134,15 @@ function findItemById(items: any, targetId: any, topLevelItem: any = null): any
class="nav px50px py24px m10px mr0 rd-32px rd-r-0 flex flex-col text-#000 cursor-pointer" class="nav px50px py24px m10px mr0 rd-32px rd-r-0 flex flex-col text-#000 cursor-pointer"
v-for="(m, index) in tableData" v-for="(m, index) in tableData"
:key="m.id" :key="m.id"
:class="activeMenuKey === m.id ? (m.childList ? 'actives' : 'active') : ''" :class="
activeMenuKey === m.id ? (m.childList ? 'actives' : 'active') : ''
"
@click="() => menuHandler(m, index)" @click="() => menuHandler(m, index)"
> >
<div :class="activeMenuKey === m.id && 'onActive'" class="flex relative"> <div
:class="activeMenuKey === m.id && 'onActive'"
class="flex relative"
>
<!-- @click="!!m.childList?.length ? (onClic = !onClic) : ''" --> <!-- @click="!!m.childList?.length ? (onClic = !onClic) : ''" -->
<!-- <img v-if="activeMenuKey === m.id" :src="m.icon1" class="w22px h22px mr16px mt--5px" /> <!-- <img v-if="activeMenuKey === m.id" :src="m.icon1" class="w22px h22px mr16px mt--5px" />
<img v-else :src="m.icon" class="w22px h22px mr16px mt--5px" /> --> <img v-else :src="m.icon" class="w22px h22px mr16px mt--5px" /> -->
@ -139,7 +152,10 @@ function findItemById(items: any, targetId: any, topLevelItem: any = null): any
<span class="truncate"> {{ m.name }} </span> <span class="truncate"> {{ m.name }} </span>
<span class="text-#000000 absolute right--30px top--5px" <span class="text-#000000 absolute right--30px top--5px"
><el-icon size="26"> ><el-icon size="26">
<CaretTop v-if="activeMenuKey === m.id && onClic" class="text-#4977FC" /> <CaretTop
v-if="activeMenuKey === m.id && onClic"
class="text-#4977FC"
/>
<CaretBottom v-else /> </el-icon <CaretBottom v-else /> </el-icon
></span> ></span>
<img <img
@ -164,7 +180,6 @@ function findItemById(items: any, targetId: any, topLevelItem: any = null): any
@click="activeItem = item.id" @click="activeItem = item.id"
> >
<!-- <el-tooltip :content="item.name" placement="top-start" effect="light"> --> <!-- <el-tooltip :content="item.name" placement="top-start" effect="light"> -->
<div class="relative">
<n-popover trigger="hover" placement="top-start"> <n-popover trigger="hover" placement="top-start">
<template #trigger> <template #trigger>
<span <span
@ -177,14 +192,6 @@ function findItemById(items: any, targetId: any, topLevelItem: any = null): any
{{ item.name }} {{ item.name }}
</div> </div>
</n-popover> </n-popover>
<img
@click="activeItem = item.id"
v-if="item.isSelFlag === 1 && !item.childList?.length"
src="@/assets/images/NEW.gif"
class="!h-20px !w-auto mr-1 absolute left-[-46px] top-[50%] translate-y-[-50%]"
alt=""
/>
</div>
<!-- </el-tooltip> --> <!-- </el-tooltip> -->
<div v-if="item.childList && idx == index" class="pl10px"> <div v-if="item.childList && idx == index" class="pl10px">

View File

@ -12,18 +12,19 @@ import {
userDetailExport, userDetailExport,
getDepartData, getDepartData,
getPieChartData, getPieChartData,
getDepartChart, getDepartChart
fetchModuleList,
fetchInsideToday
} from '@/api/daikin/base' } from '@/api/daikin/base'
import { formatDate } from '@/utils/format' import { formatDate } from '@/utils/format'
import { Chart1, barEchart, pieEchart, barEchartModuleList } from './indexData' import { Chart1, barEchart, pieEchart } from './indexData'
import { Search, Download } from '@element-plus/icons-vue' import { Search, Download } from '@element-plus/icons-vue'
import { NModal, useMessage } from 'naive-ui' import { NModal, useMessage } from 'naive-ui'
const message = useMessage() const message = useMessage()
const currentDate = new Date() const currentDate = new Date()
const currentDates = new Date() const currentDates = new Date()
const value1 = ref<[Date, Date]>([currentDate.setMonth(currentDate.getMonth()), new Date()]) const value1 = ref<[Date, Date]>([
currentDate.setMonth(currentDate.getMonth()),
new Date()
])
const states = reactive<any>({ const states = reactive<any>({
startTime: formatDate(value1.value[0]).substring(0, 10), startTime: formatDate(value1.value[0]).substring(0, 10),
endTime: formatDate(value1.value[1]).substring(0, 10) endTime: formatDate(value1.value[1]).substring(0, 10)
@ -33,7 +34,6 @@ const chartRef1 = ref()
const chartRef2 = ref() const chartRef2 = ref()
const chartOption1 = ref<any>({}) const chartOption1 = ref<any>({})
const chartOption2 = ref({}) const chartOption2 = ref({})
const barEchartModule = ref({})
const primary = ref(1) const primary = ref(1)
const primarys = ref(2) const primarys = ref(2)
const activeName = ref('echart') const activeName = ref('echart')
@ -60,8 +60,7 @@ const colorList: any = [
'#44CF8C', '#44CF8C',
'#6266F8', '#6266F8',
'#FA6B39', '#FA6B39',
'#F05F96', '#F05F96'
'#21F3D0'
] ]
const moduleCode = ref() const moduleCode = ref()
const imoduleCode = ref() const imoduleCode = ref()
@ -156,31 +155,6 @@ const state = reactive<any>({
// timeType:1 // timeType:1
}) })
const insideTodayList = ref<any>([])
const getInsideToday = async () => {
const res: any = await fetchInsideToday({
postId: postId.value,
nickName: nickName.value,
pageNum: pageInfo.currentPage,
pageSize: pageInfo.pageSize,
...states
})
insideTodayList.value = res?.rows || []
pageInfo.total = res?.total || 0
}
const moduleList = ref<any>([])
const getmoduleList = async () => {
const res: any = await fetchModuleList({
pageNum: pageInfo.currentPage,
pageSize: 100 || pageInfo.pageSize,
...states
})
moduleList.value = res?.rows || []
barEchartModule.value = barEchartModuleList(res?.rows || [])
pageInfo.total = res?.total || 0
}
const getInsideListPage = async () => { const getInsideListPage = async () => {
const res: any = await fetchmoduleStatInternalPage({ const res: any = await fetchmoduleStatInternalPage({
postId: postId.value, postId: postId.value,
@ -199,8 +173,7 @@ const getListPage = async () => {
visitDay: visitDay.value, visitDay: visitDay.value,
moduleCode: moduleCode.value, moduleCode: moduleCode.value,
pageNum: pageInfo.currentPage, pageNum: pageInfo.currentPage,
pageSize: pageInfo.pageSize, pageSize: pageInfo.pageSize
...states
}) })
outDetail.value = res?.rows || [] outDetail.value = res?.rows || []
pageInfo.total = res?.total || 0 pageInfo.total = res?.total || 0
@ -265,11 +238,16 @@ const getDat = async () => {
dataList.value = data dataList.value = data
let xAxisData: any[] = [] let xAxisData: any[] = []
let siomesData: any[] = [] let siomesData: any[] = []
data.forEach((item: { moduleName: any; visitCount: any; moduleCode: any }, i: number) => { data.forEach(
(
item: { moduleName: any; visitCount: any; moduleCode: any },
i: number
) => {
xAxisData.push(item.moduleName) xAxisData.push(item.moduleName)
siomesData.push(item.visitCount) siomesData.push(item.visitCount)
colorListObj.value[item.moduleCode] = colorList[i] colorListObj.value[item.moduleCode] = colorList[i]
}) }
)
chartOption1.value = Chart1(xAxisData) chartOption1.value = Chart1(xAxisData)
chartOption1.value.series[0] = { chartOption1.value.series[0] = {
data: siomesData, data: siomesData,
@ -286,7 +264,10 @@ const getDat = async () => {
const deptId = ref('') const deptId = ref('')
let isLeaderFlag = 0 let isLeaderFlag = 0
async function getInternalUserStat(isLeader: number = 0, flag: boolean = false) { async function getInternalUserStat(
isLeader: number = 0,
flag: boolean = false
) {
if (!flag) { if (!flag) {
pageInfo.currentPage = 1 pageInfo.currentPage = 1
pageInfo.pageSize = 10 pageInfo.pageSize = 10
@ -324,7 +305,9 @@ async function getInternalUserStat(isLeader: number = 0, flag: boolean = false)
...{ ...{
series: [ series: [
{ {
data: item.moduleStatList.map((item: any) => item.visitCount).reverse(), data: item.moduleStatList
.map((item: any) => item.visitCount)
.reverse(),
// data: new Array(item.moduleStatList.length) // data: new Array(item.moduleStatList.length)
// .fill(0) // .fill(0)
// .map(() => roundMath(10, 100)), // .map(() => roundMath(10, 100)),
@ -352,12 +335,17 @@ const getExternalTimeStat = async () => {
externalList.value = data externalList.value = data
let xAxisData: any[] = [] let xAxisData: any[] = []
let siomesData: any[] = [] let siomesData: any[] = []
data.forEach((item: { moduleName: any; visitCount: any; moduleCode: any }, i: number) => { data.forEach(
(
item: { moduleName: any; visitCount: any; moduleCode: any },
i: number
) => {
externalObj.value[item.moduleCode] = item.moduleName externalObj.value[item.moduleCode] = item.moduleName
externalObj.value[item.moduleCode + 'color'] = colorList[9 + i] externalObj.value[item.moduleCode + 'color'] = colorList[9 + i]
xAxisData.push(item.moduleName) xAxisData.push(item.moduleName)
siomesData.push(item.visitCount) siomesData.push(item.visitCount)
}) }
)
chartOption2.value = Chart1(xAxisData) chartOption2.value = Chart1(xAxisData)
chartOption2.value.series[0] = { chartOption2.value.series[0] = {
data: siomesData, data: siomesData,
@ -381,8 +369,6 @@ const handleClick = ({ paneName }: any, down: Boolean = false) => {
paneName === 'inside' && getDat() paneName === 'inside' && getDat()
paneName === 'out-detail' && getListPage() paneName === 'out-detail' && getListPage()
paneName === 'inside-detail' && getInsideListPage() paneName === 'inside-detail' && getInsideListPage()
paneName === 'inside-today' && getInsideToday()
paneName === 'module-update' && getmoduleList()
paneName === 'inside' && paneName === 'inside' &&
setTimeout(() => { setTimeout(() => {
showEchart.value = true showEchart.value = true
@ -557,7 +543,18 @@ const CloseThiss = (data?: boolean) => {
// setUserList.value = [] // setUserList.value = []
} }
const sortArr = ['1ST', '2ND', '3RD', '4TH', '5TH', '6TH', '7TH', '8TH', '9TH', '10TH'] const sortArr = [
'1ST',
'2ND',
'3RD',
'4TH',
'5TH',
'6TH',
'7TH',
'8TH',
'9TH',
'10TH'
]
const treeData = ref([]) const treeData = ref([])
const getdeptTree = async () => { const getdeptTree = async () => {
@ -575,11 +572,11 @@ getdeptTree()
<HomeHead class="top"></HomeHead> <HomeHead class="top"></HomeHead>
<div class="w-full h-850px mt30px rd-20px bg-#fff p30px overflow-hidden"> <div class="w-full h-850px mt30px rd-20px bg-#fff p30px overflow-hidden">
<div class="min-h-30px flex items-center"> <div class="min-h-30px flex items-center">
<span class="text-#000 mr-10px" v-if="activeName !== 'inside-today'">: </span> <span class="text-#000 mr-10px">: </span>
<div class="max-w-350px flex items-center" v-if="activeName !== 'inside-today'"> <div class="max-w-350px flex items-center">
<el-date-picker <el-date-picker
v-if=" v-if="
['inside', 'out', 'inside-detail', 'echart', 'out-detail', 'module-update'].includes( ['inside', 'out', 'inside-detail', 'echart', 'out-detail'].includes(
activeName activeName
) )
" "
@ -601,19 +598,18 @@ getdeptTree()
clearable clearable
/> />
</div> </div>
<div class="mx-4 flex items-center w200px" v-if="'echart' === activeName"> <div class="mx-4 flex items-center" v-if="'echart' === activeName">
<el-select v-model="visitType" placeholder="本部/外部" class="w-300px"> <el-select v-model="visitType" placeholder="本部/外部">
<el-option label="本部足迹" value="1" /> <el-option label="本部足迹" value="1" />
<el-option label="外部部足迹" value="2" /> <el-option label="外部部足迹" value="2" />
</el-select> </el-select>
</div> </div>
<div <div
class="mx-4 flex items-center w-auto" class="mx-4 flex items-center"
v-if="['inside-detail', 'out-detail'].includes(activeName)" v-if="['inside-detail', 'out-detail'].includes(activeName)"
> >
<span class="text-#000 mr-10px whitespace-nowrap">模块: </span> <span class="text-#000 mr-10px">模块: </span>
<el-select <el-select
class="!w300px"
v-if="'out-detail' === activeName" v-if="'out-detail' === activeName"
v-model="moduleCode" v-model="moduleCode"
placeholder="选择模块" placeholder="选择模块"
@ -627,7 +623,7 @@ getdeptTree()
/> />
</el-select> </el-select>
<template v-if="'inside-detail' === activeName"> <template v-if="'inside-detail' === activeName">
<el-select class="!w300px" v-model="imoduleCode" placeholder="选择模块" clearable> <el-select v-model="imoduleCode" placeholder="选择模块" clearable>
<el-option <el-option
v-for="item in dataList" v-for="item in dataList"
:key="item.id" :key="item.id"
@ -635,8 +631,8 @@ getdeptTree()
:value="item.moduleCode" :value="item.moduleCode"
/> />
</el-select> </el-select>
<span class="text-#000 mr-10px ml-4 whitespace-nowrap">职位: </span> <span class="text-#000 mr-10px ml-4">职位: </span>
<el-select class="w300px" v-model="postId" placeholder="选择职位" clearable> <el-select v-model="postId" placeholder="选择职位" clearable>
<el-option <el-option
v-for="item in postList" v-for="item in postList"
:key="item.id" :key="item.id"
@ -647,23 +643,18 @@ getdeptTree()
</template> </template>
</div> </div>
<div class="flex items-center" v-if="activeName === 'out-detail'"> <div class="flex items-center" v-if="activeName === 'out-detail'">
>
<span class="text-#000 mr-10px w-50px">供方: </span> <span class="text-#000 mr-10px w-50px">供方: </span>
<el-input v-model="waibuKd" placeholder="请输入供方昵称或代码"></el-input> <el-input
v-model="waibuKd"
placeholder="请输入供方昵称或代码"
></el-input>
</div> </div>
<div class="flex items-center" v-if="activeName === 'inside-detail'"> <div class="flex items-center" v-if="activeName === 'inside-detail'">
>
<span class="text-#000 mr-10px w-50px">昵称: </span> <span class="text-#000 mr-10px w-50px">昵称: </span>
<el-input v-model="nickName" placeholder="请输入用户昵称"></el-input> <el-input v-model="nickName" placeholder="请输入用户昵称"></el-input>
</div> </div>
<template v-if="activeName === 'inside-today'">
<span class="text-#000 mr-10px ml-4 whitespace-nowrap">职位: </span>
<el-select class="!w200px" v-model="postId" placeholder="选择职位" clearable>
<el-option v-for="item in postList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
<div class="flex items-center">
<span class="text-#000 mx-14px w-50px">昵称: </span>
<el-input v-model="nickName" placeholder="请输入用户昵称"></el-input>
</div>
</template>
<el-button <el-button
type="primary" type="primary"
:icon="Search" :icon="Search"
@ -682,7 +673,12 @@ getdeptTree()
>导出 Excel</el-button >导出 Excel</el-button
> >
<template v-if="activeName !== 'inside' && false"> <template v-if="activeName !== 'inside' && false">
<el-select v-model="selValue" class="ml-20px mt-[-4px]" placeholder="Select" size="small"> <el-select
v-model="selValue"
class="ml-20px mt-[-4px]"
placeholder="Select"
size="small"
>
<el-option <el-option
v-for="item in externalList" v-for="item in externalList"
:key="item.moduleCode" :key="item.moduleCode"
@ -735,9 +731,17 @@ getdeptTree()
}" }"
> >
<el-table-column prop="moduleName" label="模块名称" /> <el-table-column prop="moduleName" label="模块名称" />
<el-table-column prop="deptName" label="职位名称" show-overflow-tooltip> <el-table-column
prop="deptName"
label="职位名称"
show-overflow-tooltip
>
</el-table-column> </el-table-column>
<el-table-column label="访问次数" prop="visitCount" show-overflow-tooltip /> <el-table-column
label="访问次数"
prop="visitCount"
show-overflow-tooltip
/>
</el-table> </el-table>
</div> </div>
<!-- <div class="absolute bottom-2px right-30px z-20 bg-#fff"> <!-- <div class="absolute bottom-2px right-30px z-20 bg-#fff">
@ -754,7 +758,12 @@ getdeptTree()
</div> </div>
<div class="w-full h-720px mt-30px"> <div class="w-full h-720px mt-30px">
<VChart key="yyyxx" ref="pieChartRef" :option="barChartOption" autoresize /> <VChart
key="yyyxx"
ref="pieChartRef"
:option="barChartOption"
autoresize
/>
</div> </div>
</div> </div>
</el-tab-pane> </el-tab-pane>
@ -788,7 +797,13 @@ getdeptTree()
</div> </div>
</div> --> </div> -->
<div class="w-full h-400px mt-10px"> <div class="w-full h-400px mt-10px">
<VChart key="yyy" ref="chartRef1" :option="chartOption1" v-if="showEchart" autoresize /> <VChart
key="yyy"
ref="chartRef1"
:option="chartOption1"
v-if="showEchart"
autoresize
/>
</div> </div>
<div class="mt-30px"> <div class="mt-30px">
<div class="flex items-center"> <div class="flex items-center">
@ -905,54 +920,27 @@ getdeptTree()
}" }"
> >
<el-table-column prop="moduleName" label="模块名称" /> <el-table-column prop="moduleName" label="模块名称" />
<el-table-column prop="postName" label="职位名称" show-overflow-tooltip> <el-table-column
</el-table-column> prop="postName"
<el-table-column prop="nickName" label="用户昵称" show-overflow-tooltip /> label="职位名称"
<el-table-column label="访问次数" prop="visitCount" show-overflow-tooltip /> show-overflow-tooltip
<el-table-column label="访问日期" prop="visitTime" show-overflow-tooltip />
</el-table>
</div>
<div class="absolute bottom-2px right-30px z-20 bg-#fff">
<el-pagination
v-model:current-page="pageInfo.currentPage"
v-model:page-size="pageInfo.pageSize"
layout="prev, pager, next, jumper"
:total="pageInfo.total"
@size-change="getInsideListPage"
@current-change="getInsideListPage"
/>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="本部今日访问明细" name="inside-today">
<div v-show="activeName === 'inside-today'" class="h-720px">
<div class="w100% h-full overflow-auto">
<el-table
:data="insideTodayList"
style="width: 100%; margin-bottom: 20px"
row-key="id"
border
default-expand-all
:header-cell-style="{
background: '#2A7BF7',
color: '#fff',
height: '60px',
lineHeight: '60px',
textAlign: 'center',
'font-size': '24px'
}"
:cell-style="{
'text-align': 'center',
'overflow-y': 'auto',
height: '60px'
}"
> >
<!-- <el-table-column prop="moduleName" label="模块名称" /> -->
<el-table-column prop="postName" label="职位名称" show-overflow-tooltip>
</el-table-column> </el-table-column>
<el-table-column prop="nickName" label="用户昵称" show-overflow-tooltip /> <el-table-column
<!-- <el-table-column label="访问次数" prop="visitCount" show-overflow-tooltip /> --> prop="nickName"
<!-- <el-table-column label="访问日期" prop="visitTime" show-overflow-tooltip /> --> label="用户昵称"
show-overflow-tooltip
/>
<el-table-column
label="访问次数"
prop="visitCount"
show-overflow-tooltip
/>
<el-table-column
label="访问日期"
prop="visitTime"
show-overflow-tooltip
/>
</el-table> </el-table>
</div> </div>
<div class="absolute bottom-2px right-30px z-20 bg-#fff"> <div class="absolute bottom-2px right-30px z-20 bg-#fff">
@ -991,16 +979,32 @@ getdeptTree()
height: '60px' height: '60px'
}" }"
> >
<el-table-column prop="moduleName" label="访问模块" show-overflow-tooltip> <el-table-column
<!-- <template #default="{ row }"> prop="title"
label="访问模块"
show-overflow-tooltip
>
<template #default="{ row }">
<span>{{ externalObj[row.moduleCode] || '' }}</span> <span>{{ externalObj[row.moduleCode] || '' }}</span>
</template> --> </template>
</el-table-column> </el-table-column>
<el-table-column prop="userId" label="供方ID" /> <el-table-column prop="userId" label="供方ID" />
<el-table-column prop="nickName" label="供方昵称" show-overflow-tooltip> <el-table-column
prop="nickName"
label="供方昵称"
show-overflow-tooltip
>
</el-table-column> </el-table-column>
<el-table-column label="访问计数" prop="visitCount" show-overflow-tooltip /> <el-table-column
<el-table-column label="访问日期" prop="visitDay" show-overflow-tooltip /> label="访问计数"
prop="visitCount"
show-overflow-tooltip
/>
<el-table-column
label="访问日期"
prop="visitDay"
show-overflow-tooltip
/>
</el-table> </el-table>
</div> </div>
<div class="absolute bottom-2px right-30px z-20 bg-#fff"> <div class="absolute bottom-2px right-30px z-20 bg-#fff">
@ -1015,52 +1019,6 @@ getdeptTree()
</div> </div>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="模块更新统计" name="module-update">
<div v-show="activeName === 'module-update'" class="h-720px">
<div class="w100% h-full overflow-auto">
<el-table
:data="moduleList"
height="700px"
style="width: 100%; margin-bottom: 20px"
row-key="id"
border
default-expand-all
:header-cell-style="{
background: '#2A7BF7',
color: '#fff',
height: '60px',
lineHeight: '60px',
textAlign: 'center',
'font-size': '24px'
}"
:cell-style="{
'text-align': 'center',
'overflow-y': 'auto',
height: '60px'
}"
>
<el-table-column prop="moduleName" label="模块名称" show-overflow-tooltip>
</el-table-column>
<el-table-column prop="updateCount" label="更新数量" show-overflow-tooltip />
<!-- <el-table-column label="访问次数" prop="visitCount" show-overflow-tooltip /> -->
<!-- <el-table-column label="访问日期" prop="visitTime" show-overflow-tooltip /> -->
</el-table>
<div class="w-full h-720px mt-30px">
<VChart key="yyyxx" :option="barEchartModule" autoresize />
</div>
</div>
<!-- <div class="absolute bottom-2px right-30px z-20 bg-#fff">
<el-pagination
v-model:current-page="pageInfo.currentPage"
v-model:page-size="pageInfo.pageSize"
layout="prev, pager, next, jumper"
:total="pageInfo.total"
@size-change="getInsideListPage"
@current-change="getInsideListPage"
/>
</div> -->
</div>
</el-tab-pane>
</el-tabs> </el-tabs>
<div> <div>
<div class="mt20px w-full"> <div class="mt20px w-full">
@ -1079,13 +1037,22 @@ getdeptTree()
<div class="mt10px w-full"> <div class="mt10px w-full">
<div class="w-full h-400px"> <div class="w-full h-400px">
<VChart key="xxxx" ref="chartRef2" :option="chartOption2" autoresize /> <VChart
key="xxxx"
ref="chartRef2"
:option="chartOption2"
autoresize
/>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<n-modal v-model:show="showModal"> <n-modal v-model:show="showModal">
<UserList :userDataList="setUserList" @clickChild="handleChild" @CloseThis="CloseThiss" /> <UserList
:userDataList="setUserList"
@clickChild="handleChild"
@CloseThis="CloseThiss"
/>
</n-modal> </n-modal>
</template> </template>

View File

@ -5,8 +5,14 @@ import { formatDate } from '@/utils/format'
const currentDate = new Date() const currentDate = new Date()
const currentDates = new Date() const currentDates = new Date()
const value1 = ref<[Date, Date]>([currentDate.setMonth(currentDate.getMonth()), new Date()]) const value1 = ref<[Date, Date]>([
const value2 = ref<[Date, Date]>([currentDates.setMonth(currentDates.getMonth()), new Date()]) currentDate.setMonth(currentDate.getMonth()),
new Date()
])
const value2 = ref<[Date, Date]>([
currentDates.setMonth(currentDates.getMonth()),
new Date()
])
const states = reactive<any>({ const states = reactive<any>({
startTime: formatDate(value1.value[0]).substring(0, 10), startTime: formatDate(value1.value[0]).substring(0, 10),
@ -355,35 +361,3 @@ export function barEchart({ deptName = [], visitCount = [], avgCount = [] }) {
// } // }
} }
} }
export function barEchartModuleList(data = []) {
const option = {
title: {
text: '模块更新统计',
left: 'center',
textStyle: {
fontSize: 30
},
top: 10
},
xAxis: {
type: 'category',
data: data.map((item) => item.moduleName)
// data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value'
},
tooltip: {
trigger: 'axis'
},
series: [
{
data: data.map((item) => item.updateCount),
// data: [120, 200, 150, 80, 70, 110, 130],
type: 'bar'
}
]
}
return option
}

View File

@ -4,7 +4,11 @@ import AppBlock from '@/components/AppBlock.vue'
import AppNewsBox from '@/components/AppNewsBox.vue' import AppNewsBox from '@/components/AppNewsBox.vue'
import Layout from './components/Layout.vue' import Layout from './components/Layout.vue'
import DetailNews from './DetailNews.vue' import DetailNews from './DetailNews.vue'
import { getArticleDetail, getArticlePage, getManagerDetail, report } from '@/api/daikin/base' import {
getArticleDetail,
getArticlePage,
getManagerDetail
} from '@/api/daikin/base'
import { message } from '@/utils/message' import { message } from '@/utils/message'
const { push } = useRouter() const { push } = useRouter()
@ -101,7 +105,8 @@ async function getPageLists(page) {
const handleNeiScoll = () => { const handleNeiScoll = () => {
const container = neiScoll.value const container = neiScoll.value
if (container) { if (container) {
const isAtBottom = container.scrollHeight - container.scrollTop === container.clientHeight const isAtBottom =
container.scrollHeight - container.scrollTop === container.clientHeight
if (isAtBottom) { if (isAtBottom) {
if (neiPum < neiLength) { if (neiPum < neiLength) {
++neiPum ++neiPum
@ -113,7 +118,8 @@ const handleNeiScoll = () => {
const handlewaiScoll = () => { const handlewaiScoll = () => {
const container = waiScoll.value const container = waiScoll.value
if (container) { if (container) {
const isAtBottom = container.scrollHeight - container.scrollTop === container.clientHeight const isAtBottom =
container.scrollHeight - container.scrollTop === container.clientHeight
if (isAtBottom) { if (isAtBottom) {
if (waiPum < waiLength) { if (waiPum < waiLength) {
++waiPum ++waiPum
@ -146,7 +152,10 @@ const handlewaiScoll = () => {
<div class="page-side"> <div class="page-side">
<AppBlock class="h-400px"> <AppBlock class="h-400px">
<div class="box h-full"> <div class="box h-full">
<div class="box-title flex items-center" @click="push({ name: 'IntelligenceWithin' })"> <div
class="box-title flex items-center"
@click="push({ name: 'IntelligenceWithin' })"
>
<span class="flex-1">社内情报</span> <span class="flex-1">社内情报</span>
<span></span> <span></span>
</div> </div>
@ -161,8 +170,16 @@ const handlewaiScoll = () => {
size="h20px" size="h20px"
/> --> /> -->
<div class="flex" @click="toDetail2(i)"> <div class="flex" @click="toDetail2(i)">
<img v-if="i.tag === 'New'" src="../../../assets/images/NEW3.gif" class="h20px" /> <img
<img v-if="i.tag === ''" src="../../../assets/images/jj.gif" class="h20px" /> v-if="i.tag === 'New'"
src="../../../assets/images/NEW3.gif"
class="h20px"
/>
<img
v-if="i.tag === '紧急'"
src="../../../assets/images/jj.gif"
class="h20px"
/>
<div class="ml5px leading-4.5 max-w300px overflow-ellipsis"> <div class="ml5px leading-4.5 max-w300px overflow-ellipsis">
{{ i.title }} {{ i.title }}
</div> </div>
@ -176,7 +193,10 @@ const handlewaiScoll = () => {
<div class="page-side"> <div class="page-side">
<AppBlock class="h-400px"> <AppBlock class="h-400px">
<div class="box h-full"> <div class="box h-full">
<div class="box-title flex items-center" @click="push({ name: 'IntelligenceOutside' })"> <div
class="box-title flex items-center"
@click="push({ name: 'IntelligenceOutside' })"
>
<span class="flex-1">社外情报</span> <span class="flex-1">社外情报</span>
<span></span> <span></span>
</div> </div>
@ -192,8 +212,16 @@ const handlewaiScoll = () => {
/> --> /> -->
<div class="flex" @click="toDetail2(i)"> <div class="flex" @click="toDetail2(i)">
<img v-if="i.tag === 'New'" src="../../../assets/images/NEW3.gif" class="h20px" /> <img
<img v-if="i.tag === ''" src="../../../assets/images/jj.gif" class="h20px" /> v-if="i.tag === 'New'"
src="../../../assets/images/NEW3.gif"
class="h20px"
/>
<img
v-if="i.tag === '紧急'"
src="../../../assets/images/jj.gif"
class="h20px"
/>
<div class="ml5px leading-4.5 max-w300px overflow-ellipsis"> <div class="ml5px leading-4.5 max-w300px overflow-ellipsis">
{{ i.title }} {{ i.title }}
</div> </div>

View File

@ -9,7 +9,6 @@ import AppPagination from '@/components/AppPagination.vue'
import { Navs, useData } from './ListPageData' import { Navs, useData } from './ListPageData'
import { NEmpty } from 'naive-ui' import { NEmpty } from 'naive-ui'
import { message } from '@/utils/message' import { message } from '@/utils/message'
import { report } from '@/api/daikin/base'
const { push } = useRouter() const { push } = useRouter()
const route = useRoute() const route = useRoute()
@ -19,12 +18,12 @@ const { state, list } = useData()
const Type1 = [ const Type1 = [
{ key: '1', name: '外部环境', route: 'IntelligenceOutside', icon: getImg('icon-1.svg') }, { key: '1', name: '外部环境', route: 'IntelligenceOutside', icon: getImg('icon-1.svg') },
{ key: '2', name: '竞争对手', route: 'IntelligenceOutside', icon: getImg('icon-2.svg') }, { key: '2', name: '竞争对手', route: 'IntelligenceOutside', icon: getImg('icon-2.svg') },
{ key: '3', name: '供方动向', route: 'IntelligenceOutside', icon: getImg('icon-3.svg') } { key: '3', name: '供方动向', route: 'IntelligenceOutside', icon: getImg('icon-3.svg') },
] ]
const Type2 = [ const Type2 = [
{ key: '4', name: '大金集团', route: 'IntelligenceWithin', icon: getImg('icon-4.svg') }, { key: '4', name: '大金集团', route: 'IntelligenceWithin', icon: getImg('icon-4.svg') },
{ key: '5', name: '中国据点', route: 'IntelligenceWithin', icon: getImg('icon-5.svg') }, { key: '5', name: '中国据点', route: 'IntelligenceWithin', icon: getImg('icon-5.svg') },
{ key: '6', name: '调达本部', route: 'IntelligenceWithin', icon: getImg('icon-6.svg') } { key: '6', name: '调达本部', route: 'IntelligenceWithin', icon: getImg('icon-6.svg') },
] ]
const firstNew = ref<any>({}) const firstNew = ref<any>({})
@ -45,11 +44,14 @@ const toDetail2 = (item: { id: any }) => {
// push(`${route.path}/${item.id}`) // push(`${route.path}/${item.id}`)
if(item.isSelect===1){ if(item.isSelect===1){
push(`${route.path.replace('/Home','')}/${item.id}`) push(`${route.path.replace('/Home','')}/${item.id}`)
} else {
message.error('没有访问权限')
} }
else{
message.error("没有访问权限")
} }
report({ moduleCode: 'App_Article' })
}
</script> </script>
<template> <template>
@ -92,16 +94,7 @@ report({ moduleCode: 'App_Article' })
<!-- <AppAlert v-if="firstNew?.title" @click="push(`${route.path.replace('/Home','')}/${firstNew.id}`)">{{ firstNew.title }}</AppAlert> --> <!-- <AppAlert v-if="firstNew?.title" @click="push(`${route.path.replace('/Home','')}/${firstNew.id}`)">{{ firstNew.title }}</AppAlert> -->
<div class="mt12px news-wrap max-h-467px mb32px overflow-y-auto"> <div class="mt12px news-wrap max-h-467px mb32px overflow-y-auto">
<div class="news-item" v-for="item in restNews" :key="item.id" @click="toDetail2(item)"> <div class="news-item" v-for="item in restNews" :key="item.id" @click="toDetail2(item)">
<AppNewsBox <AppNewsBox class="!lh-2em" :isRead="item.isRead" :top="item.isTop" :labelText="item.tag" labelColor="#2cba06" :size="item.tag==='New'?'h20px':'h30px'" :text="item.title" :date="item.publishTime" />
class="!lh-2em"
:isRead="item.isRead"
:top="item.isTop"
:labelText="item.tag"
labelColor="#2cba06"
:size="item.tag === 'New' ? 'h20px' : 'h30px'"
:text="item.title"
:date="item.publishTime"
/>
</div> </div>
</div> </div>
<div class="text-center mt32px" v-if="state.total"> <div class="text-center mt32px" v-if="state.total">

View File

@ -1,17 +1,17 @@
<!-- 外部情报 --> <!-- 外部情报 -->
<script setup lang="tsx"> <script setup lang="tsx">
import AppBlock from '@/components/AppBlock.vue' import AppBlock from "@/components/AppBlock.vue";
import Layout from './components/Layout.vue' import Layout from "./components/Layout.vue";
import OverviewBlock from './OverviewBlock.vue' import OverviewBlock from "./OverviewBlock.vue";
import { getImg } from './images' import { getImg } from "./images";
import { useData } from './OverviewData' import { useData } from "./OverviewData";
import { getBannerList, report } from '@/api/daikin/base' import { getBannerList } from "@/api/daikin/base";
const { data1, data2, data3, data4, data5, data6, data7 } = useData() const { data1,data2,data3,data4,data5,data6,data7 } = useData();
// console.log(data.value) // console.log(data.value)
const swipeActiveIndex = ref(0) const swipeActiveIndex = ref(0);
function handleIndex(x: any) { function handleIndex(x: any) {
swipeActiveIndex.value = x.realIndex swipeActiveIndex.value = x.realIndex;
} }
async function getBanner() { async function getBanner() {
@ -26,78 +26,78 @@ async function getBanner() {
} }
} }
getBanner() getBanner()
report({ moduleCode: 'App_Article' })
const imageList1 =ref([ const imageList1 =ref([
{ title: '三菱电机FY22年度方针说明会', bannerImg: getImg('swipe-1.svg'), id: 0 }, { title: "三菱电机FY22年度方针说明会", bannerImg: getImg("swipe-1.svg") ,id:0},
{ title: '23年度供应商大会热烈筹备中', bannerImg: getImg('swipe-2.svg'), id: 0 } { title: "23年度供应商大会热烈筹备中", bannerImg: getImg("swipe-2.svg") ,id:0},
]) ])
const imageList2 =ref([ const imageList2 =ref([
{ title: '三菱电机FY22年度方针说明会', bannerImg: getImg('swipe-1.svg'), id: 0 }, { title: "三菱电机FY22年度方针说明会", bannerImg: getImg("swipe-1.svg") ,id:0},
{ title: '23年度供应商大会热烈筹备中', bannerImg: getImg('swipe-2.svg'), id: 0 } { title: "23年度供应商大会热烈筹备中", bannerImg: getImg("swipe-2.svg") ,id:0},
]) ])
const swipeImages = [ const swipeImages = [
{ title: '三菱电机FY22年度方针说明会', bannerImg: getImg('swipe-1.svg') }, { title: "三菱电机FY22年度方针说明会", bannerImg: getImg("swipe-1.svg") },
{ title: '23年度供应商大会热烈筹备中', bannerImg: getImg('swipe-2.svg') } { title: "23年度供应商大会热烈筹备中", bannerImg: getImg("swipe-2.svg") },
] ];
const items1 = computed(() => [ const items1 = computed(() => [
{ {
key: '1', key: "1",
name: '外部环境', name: "外部环境",
color: '#63BFB2', color: "#63BFB2",
title: '全年原材料供应状况紧张', title: "全年原材料供应状况紧张",
icon: getImg('icon-1.svg'), icon: getImg("icon-1.svg"),
news:unref(data1), //.splice(0, 3), news:unref(data1), //.splice(0, 3),
list: unref(data7)[1] ?? [] list:unref(data7)[1]?? [],
}, },
{ {
key: '2', key: "2",
name: '竞争对手', name: "竞争对手",
color: '#F57E6E', color: "#F57E6E",
title: '三菱召开年度方针说明会', title: "三菱召开年度方针说明会",
icon: getImg('icon-2.svg'), icon: getImg("icon-2.svg"),
news: unref(data2), //.splice(0, 3), news: unref(data2), //.splice(0, 3),
list: unref(data7)[2] ?? [] list:unref(data7)[2]?? [],
}, },
{ {
key: '3', key: "3",
name: '供方动向', name: "供方动向",
color: '#537DEB', color: "#537DEB",
title: '全年原材料供应状况紧张', title: "全年原材料供应状况紧张",
icon: getImg('icon-3.svg'), icon: getImg("icon-3.svg"),
news:unref(data3), //.splice(0, 3), news:unref(data3), //.splice(0, 3),
list: unref(data7)[3] ?? [] list:unref(data7)[3]?? [],
} },
]) ]);
const items2 = computed(() => [ const items2 = computed(() => [
{ {
key: '4', key: "4",
name: '大金集团', name: "大金集团",
color: '#5DCCFA', color: "#5DCCFA",
title: '23年度集团方针正式发行', title: "23年度集团方针正式发行",
icon: getImg('icon-4.svg'), icon: getImg("icon-4.svg"),
news: unref(data4), //.splice(0, 3), news: unref(data4), //.splice(0, 3),
list: unref(data7)[4] ?? [] list:unref(data7)[4]?? [],
}, },
{ {
key: '5', key: "5",
name: '中国据点', name: "中国据点",
color: '#E8A743', color: "#E8A743",
title: '惠州工厂稼动正式开始', title: "惠州工厂稼动正式开始",
icon: getImg('icon-6.svg'), icon: getImg("icon-6.svg"),
news: unref(data5), //.splice(0, 3), news: unref(data5), //.splice(0, 3),
list: unref(data7)[5] ?? [] list:unref(data7)[5]?? [],
}, },
{ {
key: '6', key: "6",
name: '调达本部', name: "调达本部",
color: '#926CE1', color: "#926CE1",
title: '23年度供应商大会热烈筹备中', title: "23年度供应商大会热烈筹备中",
icon: getImg('icon-5.svg'), icon: getImg("icon-5.svg"),
news:unref(data6), //.splice(0, 3), news:unref(data6), //.splice(0, 3),
list: unref(data7)[6] ?? [] list:unref(data7)[6]?? [],
} },
]) ]);
</script> </script>
<template> <template>
@ -134,7 +134,7 @@ const items2 = computed(() => [
position: relative; position: relative;
padding-left: 24px; padding-left: 24px;
&::before { &::before {
content: ' '; content: " ";
display: block; display: block;
width: 8px; width: 8px;
height: 30px; height: 30px;

View File

@ -7,24 +7,16 @@ import { useDate } from '@/views/home/hooks/useDate'
import type { FormInst } from 'naive-ui' import type { FormInst } from 'naive-ui'
import { useMessage } from 'naive-ui' import { useMessage } from 'naive-ui'
import { ref } from 'vue' import { ref } from 'vue'
import { import { NModal, NCard, NForm, NButton, NFormItem, NInput, NRadio, NSelect, NSpace, NRadioGroup } from 'naive-ui'
NModal,
NCard,
NForm,
NButton,
NFormItem,
NInput,
NRadio,
NSelect,
NSpace,
NRadioGroup
} from 'naive-ui'
import { saveArticle } from '@/api/daikin/base' import { saveArticle } from '@/api/daikin/base'
import { useUserStore } from '@/stores/modules/user' import { useUserStore } from '@/stores/modules/user'
const store =useUserStore() const store =useUserStore()
console.log("🚀 ~ file: Layout.vue:15 ~ store:", store.user)
const { day, week } = useDate() const { day, week } = useDate()
const { push } = useRouter() const { push } = useRouter()
</script> </script>
<template> <template>
@ -38,35 +30,14 @@ const { push } = useRouter()
<div class="text-36px">外部情报</div> <div class="text-36px">外部情报</div>
<div class="text-18px ml40px mr25px">{{ day }}</div> <div class="text-18px ml40px mr25px">{{ day }}</div>
<div class="text-18px flex-1">{{ week }}</div> <div class="text-18px flex-1">{{ week }}</div>
<div <div style="margin-right: 8px" v-if="store.user.isPublish === 1 || store.user.roleCode === 'zhuxi'">
style="margin-right: 8px" <div class="add text-18px px13px py11px cursor-pointer" @click="push({ path: '/Home/Process' })">情报流程</div>
v-if="store.user.isPublish === 1 || store.user.roleCode === 'zhuxi'"
>
<div
class="add text-18px px13px py11px cursor-pointer"
@click="push({ path: '/Home/Process' })"
>
情报流程
</div>
</div>
<div
style="margin-right: 8px"
v-if="store.user.isPublish === 1 || store.user.roleCode === 'zhuxi'"
>
<div
class="add text-18px px13px py11px cursor-pointer"
@click="push({ name: 'messageSelect' })"
>
留言板
</div> </div>
<div style="margin-right: 8px" v-if="store.user.isPublish ===1 || store.user.roleCode === 'zhuxi'">
<div class="add text-18px px13px py11px cursor-pointer" @click="push({name:'messageSelect'})"></div>
</div> </div>
<div v-if="store.user.isPublish ===1"> <div v-if="store.user.isPublish ===1">
<div <div class="add text-18px px13px py11px cursor-pointer" @click="push({name:'InfosEdit'})">+ </div>
class="add text-18px px13px py11px cursor-pointer"
@click="push({ name: 'InfosEdit' })"
>
+ 新增
</div>
</div> </div>
</div> </div>
<div class="flex-1 mt30px text-#142142"> <div class="flex-1 mt30px text-#142142">
@ -160,7 +131,7 @@ const { push } = useRouter()
} }
.add { .add {
border: 1px solid #ffffff; border: 1px solid #FFFFFF;
border-radius: 10px; border-radius: 10px;
} }
@ -168,10 +139,10 @@ const { push } = useRouter()
width: 80px; width: 80px;
height: 80px; height: 80px;
border-radius: 20px; border-radius: 20px;
background-color: #c2c2c2; background-color: #C2C2C2;
} }
.img.yes { .img.yes {
background-color: #63bfb2; background-color: #63BFB2;
} }
</style> </style>

View File

@ -3,28 +3,27 @@ import { deptTree, getGroupList, addGroup, getPage, deleteGroup } from '@/api/da
import { message } from '@/utils/message' import { message } from '@/utils/message'
import { Search, Refresh } from '@element-plus/icons-vue' import { Search, Refresh } from '@element-plus/icons-vue'
import {noticeld} from '@/stores/modules/noticeId' import {noticeld} from '@/stores/modules/noticeId'
import { uniqBy, cloneDeep } from 'lodash-es'
const stores = noticeld() const stores = noticeld()
const treeData = ref<any>() const treeData = ref<any>()
const emit = defineEmits(['clickChild','CloseThis']) const emit = defineEmits(['clickChild','CloseThis'])
const FlashOutline = ref('') const FlashOutline = ref('')
const treeRef =ref() const treeRef =ref()
const flag = ref(false)
async function getTree() { async function getTree() {
const reviewSource =stores.article.reviewSource const reviewSource =stores.article.reviewSource
const { data } = await deptTree({reviewSource}) const { data } = await deptTree({reviewSource})
if(data&&data!='null'&&data.length>0){ if(data&&data!='null'&&data.length>0){
treeData.value = data treeData.value = data
} }
console.log(data) console.log(data)
} }
const props = defineProps({ const props = defineProps({
userDataList: { userDataList: {
type: Array as PropType<any[]>, type: Array as PropType<any[]>,
default: () => [] default: () => [],
} },
}) })
const da = reactive({ const da = reactive({
@ -41,17 +40,7 @@ const userData = ref<any>()
async function getUserPage() { async function getUserPage() {
const reviewSource =stores.article.reviewSource const reviewSource =stores.article.reviewSource
const {pageNum,pageSize,phonenumber,status,beingTime,endTime,deptId,nickName} = unref(da) const {pageNum,pageSize,phonenumber,status,beingTime,endTime,deptId,nickName} = unref(da)
const { rows } = await getPage({ const { rows } = await getPage({pageNum,pageSize,phonenumber,status,beingTime,endTime,deptId,nickName,reviewSource})
pageNum,
pageSize,
phonenumber,
status,
beingTime,
endTime,
deptId,
nickName,
reviewSource
})
const rowsD = rows.map((i: any) => { const rowsD = rows.map((i: any) => {
if (i.loginDate) { if (i.loginDate) {
i.loginDate = i.loginDate.slice(0, 10) i.loginDate = i.loginDate.slice(0, 10)
@ -59,35 +48,35 @@ async function getUserPage() {
return i return i
}) })
const data = cloneDeep(toRaw(multipleSelection.value))
flag.value = false
userData.value = rowsD userData.value = rowsD
setTimeout(() => {
selection(data)
}, 150)
} }
function selection(list = props.userDataList) { function selection(){
const list = props.userDataList
if(userData.value&&list){ if(userData.value&&list){
const commonItems = userData.value.filter((item1: { userId: any }) => const commonItems = userData.value.filter((item1: { userId: any; }) =>
list.some((item2) => item2.userId === item1.userId) list.some(item2 => item2.userId === item1.userId)
) );
toggleSelection(commonItems) toggleSelection(commonItems)
} }
} }
onMounted(() => { onMounted(() => {
setTimeout(() => { setTimeout(() => {
selection() selection()
}, 1000) }, 1000);
}) })
const ss = computed(() => [da.deptId,da.nickName]) const ss = computed(() => [da.deptId,da.nickName])
watch( watch(() => unref(ss),
() => unref(ss),
async (v) => { async (v) => {
getUserPage() getUserPage()
}, },
{ immediate: true, deep: true } { immediate: true, deep: true },
) )
const thisClick = (e: { id: string }) => { const thisClick = (e: { id: string }) => {
da.deptId = e.id da.deptId = e.id
@ -103,16 +92,14 @@ const resetForm = () => {
formInline.value ='' formInline.value =''
} }
const multipleTableRef = ref() const multipleTableRef = ref()
const multipleSelection = ref<[]>([]) const multipleSelection = ref<[]>([])
const multipleSelectionObj: any = {}
const handleSelectionChange = (val) => { const handleSelectionChange = (val) => {
console.log(val) console.log(val)
multipleSelectionObj[da.deptId] = val multipleSelection.value = val
multipleSelection.value = uniqBy(Object.values(multipleSelectionObj).flat(), 'userId')
} }
const selet = (rows: any) => { const selet = (rows: any) => {
multipleTableRef.value!.toggleRowSelection(rows, undefined) multipleTableRef.value!.toggleRowSelection(rows, undefined)
// console.log(unref(multipleSelection)) // console.log(unref(multipleSelection))
@ -125,16 +112,16 @@ const toggleSelection = (Data: any[]) => {
multipleTableRef.value!.toggleRowSelection(row, undefined) multipleTableRef.value!.toggleRowSelection(row, undefined)
// console.log(multipleTableRef.value.data) // console.log(multipleTableRef.value.data)
}) })
} }
} }
const handleClose = (id: any) => { const handleClose = (id: any) => {
multipleSelection.value = multipleSelection.value.filter((item) => { multipleSelection.value.filter(item => {
if (item.userId === id) { if (item.userId === id) {
console.log(item.userId,id) console.log(item.userId,id)
multipleTableRef.value!.toggleRowSelection(item, undefined) multipleTableRef.value!.toggleRowSelection(item, undefined)
return false
} }
return item
}) })
} }
const showModal = ref() const showModal = ref()
@ -142,6 +129,7 @@ const handleChange = () => {
emit('clickChild', { multipleSelection, showModal }) emit('clickChild', { multipleSelection, showModal })
} }
const CloseThis=()=>{ const CloseThis=()=>{
emit('CloseThis',false) emit('CloseThis',false)
} }
const CloseT = ()=>{ const CloseT = ()=>{
@ -176,6 +164,7 @@ const modfify = (e) => {
e.userList.forEach((row: any) => { e.userList.forEach((row: any) => {
multipleTableRef.value!.toggleRowSelection(row, undefined) multipleTableRef.value!.toggleRowSelection(row, undefined)
}) })
} }
const changeGroup=()=>{ const changeGroup=()=>{
changSave() changSave()
@ -189,6 +178,8 @@ const filterNode = (value: string, data: Tree) => {
return data.label.includes(value) return data.label.includes(value)
} }
async function changSave(){ async function changSave(){
let userIdList: any[] = [] let userIdList: any[] = []
const name = groupName.value const name = groupName.value
@ -198,10 +189,10 @@ async function changSave() {
}) })
console.log(id, groupName.value,userIdList) console.log(id, groupName.value,userIdList)
// if(!id) return // if(!id) return
let formdata = new FormData() let formdata = new FormData();
formdata.append('id', id) formdata.append("id",id);
formdata.append('name', name) formdata.append("name",name);
formdata.append('userIdList', userIdList) formdata.append("userIdList",userIdList);
const {msg} = await addGroup(formdata,{headers: {'Content-Type': 'application/form-data'}}) const {msg} = await addGroup(formdata,{headers: {'Content-Type': 'application/form-data'}})
message.success(msg) message.success(msg)
getGroup() getGroup()
@ -220,70 +211,37 @@ async function deleteGroups(id) {
asGroup.value = [] asGroup.value = []
multipleSelection.value=[] multipleSelection.value=[]
groupName.value='' groupName.value=''
message.info('删除成功') message.info("删除成功")
} }
function onSelect(params: any) {
console.log('🚀 ~ file: UserPages.vue:230 ~ params:', params)
}
</script> </script>
<template> <template>
<div> <div>
<div class=" max-w95% h800px m-auto bg-#fff rounded-10px overflow-hidden"> <div class=" max-w95% h800px m-auto bg-#fff rounded-10px overflow-hidden">
<div <div class="pl20px text-18px w100% h60px p15px" style="border-bottom:1px solid #dfdfdf ;font-weight: 700;">
class="pl20px text-18px w100% h60px p15px" 调达中心</div>
style="border-bottom: 1px solid #dfdfdf; font-weight: 700"
>
调达中心
</div>
<div class="p20px flex relative"> <div class="p20px flex relative">
<div class="min-w150px"> <div class="min-w150px">
<el-input <el-input v-model="FlashOutline" class="w-50 m-2" placeholder="搜索" suffix-icon="Calendar"
v-model="FlashOutline" :prefix-icon="Search" />
class="w-50 m-2" <el-tree ref="treeRef" :data="treeData" :filter-node-method="filterNode" :default-expanded-keys="[2, 4]" @node-click="thisClick" class="max-h500px"/>
placeholder="搜索"
suffix-icon="Calendar"
:prefix-icon="Search"
/>
<el-tree
ref="treeRef"
:data="treeData"
:filter-node-method="filterNode"
:default-expanded-keys="[2, 4]"
@node-click="thisClick"
class="max-h500px"
/>
<ul
class="absolute max-h200px min-h100px bottom-0 list-none !p0 overflow-auto w190px" <ul class="absolute max-h200px min-h100px bottom-0 list-none !p0 overflow-auto w190px" v-if="asGroup">
v-if="asGroup"
>
<li v-for="i in asGroup" class="cursor-default w190px h32px" > <li v-for="i in asGroup" class="cursor-default w190px h32px" >
<span <span @click="asGroupClick(i)" class="w100px h30px text-12px float-left block border border-solid border-#f5f5f5 leading-30px overflow-hidden" :title="i.name">{{i.name}}</span>
@click="asGroupClick(i)" <span class="text-12px text-#3E7DF0 leading-30px float-left block w38px text-center block border border-solid border-#f5f5f5 h32px" @click="modfify(i)"></span>
class="w100px h30px text-12px float-left block border border-solid border-#f5f5f5 leading-30px overflow-hidden"
:title="i.name"
>{{ i.name }}</span
>
<span
class="text-12px text-#3E7DF0 leading-30px float-left block w38px text-center block border border-solid border-#f5f5f5 h32px"
@click="modfify(i)"
>编辑</span
>
<el-icon @click="deleteGroupp(i)" class="mt7px ml5px"><Delete/></el-icon> <el-icon @click="deleteGroupp(i)" class="mt7px ml5px"><Delete/></el-icon>
</li> </li>
</ul> </ul>
</div> </div>
<div class="ml20px max-w80%"> <div class="ml20px max-w80%">
<div v-if="showModal2!=true"> <div v-if="showModal2!=true">
<el-form <el-form :inline="true" :model="formInline" label-width="80px" size="small"
:inline="true" class="demo-form-inline">
:model="formInline"
label-width="80px"
size="small"
class="demo-form-inline"
>
<el-form-item label="用户名称"> <el-form-item label="用户名称">
<el-input v-model="formInline" placeholder="请输入用户名称" clearable /> <el-input v-model="formInline" placeholder="请输入用户名称" clearable />
</el-form-item> </el-form-item>
@ -292,35 +250,30 @@ function onSelect(params: any) {
<el-button type="primary" @click="onSubmit" :icon="Search">搜素</el-button> <el-button type="primary" @click="onSubmit" :icon="Search">搜素</el-button>
<el-button @click="resetForm()" :icon="Refresh">重置</el-button> <el-button @click="resetForm()" :icon="Refresh">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div v-if="showModal2==true" class="w500px"> <div v-if="showModal2==true" class="w500px">
<!-- <el-form :inline="true" :model="formInline" <!-- <el-form :inline="true" :model="formInline"
class="demo-form-inline"> --> class="demo-form-inline"> -->
<el-form-item label="分组名称" label-width="80px" size="small"> <el-form-item label="分组名称" label-width="80px" size="small">
<el-input v-model="groupName" placeholder="请输入分组名称" clearable /> <el-input v-model="groupName" placeholder="请输入分组名称" clearable />
</el-form-item> </el-form-item>
<!-- </el-form> --> <!-- </el-form> -->
</div> </div>
<div v-if="showModal2!=true" class="float-left block"> <div v-if="showModal2!=true" class="float-left block">
<el-button type="warning" size="small" @click="toggleSelection(userData)" <el-button type="warning" size="small" @click="toggleSelection(userData)">@</el-button>
>@所有人</el-button <el-button type="primary" color="#00A73A" size="small" @click="addGroupList"></el-button>
>
<el-button type="primary" color="#00A73A" size="small" @click="addGroupList"
>新增分组</el-button
>
</div> </div>
<div class="w100% h450px overflow-auto"> <div class="w100% h450px overflow-auto">
<el-table <el-table ref="multipleTableRef" :data="userData" :header-cell-style="{ 'text-align': 'center' }"
ref="multipleTableRef" height="400" :cell-style="{ 'text-align': 'center' }" @selection-change="handleSelectionChange">
:data="userData"
:header-cell-style="{ 'text-align': 'center' }"
height="400"
:cell-style="{ 'text-align': 'center' }"
@selection-change="handleSelectionChange"
@select="onSelect"
>
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<el-table-column property="nickName" label="用户名称" width="220" /> <el-table-column property="nickName" label="用户名称" width="220" />
<el-table-column property="dept.deptName" label="科室" width="180" /> <el-table-column property="dept.deptName" label="科室" width="180" />
@ -331,34 +284,30 @@ function onSelect(params: any) {
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-button type="primary" size="small" @click="selet(row)"></el-button> <el-button type="primary" size="small" @click="selet(row)"></el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="h80px overflow-y-auto"> <div class="h80px overflow-y-auto">
<div v-if="showModal2===true && groupName" class="mb10px h32px"> <div v-if="showModal2===true && groupName" class="mb10px h32px">
{{groupName}} {{groupName}}
<span class="text-12px text-#959595 w30px" @click="deleteGroupp(groupDeleteId)" <span class="text-12px text-#959595 w30px" @click="deleteGroupp(groupDeleteId)"></span>
>删除</span
>
<!-- <el-icon class="mt8px"><Delete /></el-icon> --> <!-- <el-icon class="mt8px"><Delete /></el-icon> -->
</div> </div>
<el-tag <el-tag v-for="i in multipleSelection" :key="i" class="mx-1" closable :disable-transitions="false"
v-for="i in multipleSelection" @close="handleClose(i.userId)">
:key="i"
class="mx-1"
closable
:disable-transitions="false"
@close="handleClose(i.userId)"
>
{{ i.nickName }} {{ i.nickName }}
</el-tag> </el-tag>
</div>
</div> </div>
</div> </div>
</div> <div class="w100% text-end float-right block h50px pt10px"
<div style="border-top:1px solid #dfdfdf ;font-weight: 700;">
class="w100% text-end float-right block h50px pt10px"
style="border-top: 1px solid #dfdfdf; font-weight: 700"
>
<div class="pr30px" v-if="showModal2!=true"> <div class="pr30px" v-if="showModal2!=true">
<el-button type="warning" color="#f1f1f1" size="small" @click="CloseThis"></el-button> <el-button type="warning" color="#f1f1f1" size="small" @click="CloseThis"></el-button>
<el-button type="primary" size="small" @click="handleChange"></el-button> <el-button type="primary" size="small" @click="handleChange"></el-button>
@ -368,8 +317,10 @@ function onSelect(params: any) {
<el-button type="primary" size="small" @click="changeGroup"></el-button> <el-button type="primary" size="small" @click="changeGroup"></el-button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<style lang="less"> <style lang="less">
.el-form--inline .el-input { .el-form--inline .el-input {

View File

@ -6,7 +6,7 @@ import AppBlock from '@/components/AppBlock.vue'
import AppNewsBox from '@/components/AppNewsBox.vue' import AppNewsBox from '@/components/AppNewsBox.vue'
// import HomeHeadSearch from '@/views/home/components/HomeHeadSearch.vue' // import HomeHeadSearch from '@/views/home/components/HomeHeadSearch.vue'
import { useDate } from '@/views/home/hooks/useDate' import { useDate } from '@/views/home/hooks/useDate'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs' import zhCn from "element-plus/lib/locale/lang/zh-cn";
import { getList ,marketPreADD,getMarketUser,saveMarketUser,MarketDownload,MarketPreview,getCurrencyList,getMetalList} from '@/api/daikin/base' import { getList ,marketPreADD,getMarketUser,saveMarketUser,MarketDownload,MarketPreview,getCurrencyList,getMetalList} from '@/api/daikin/base'
import { NModal,NCard } from 'naive-ui' import { NModal,NCard } from 'naive-ui'
import {formatDate} from '@/utils/format' import {formatDate} from '@/utils/format'

View File

@ -1,293 +0,0 @@
<script setup lang="ts">
import { useUserStore } from '@/stores/modules/user'
import HomeHead from '@/views/home/components/HomeHead.vue'
// import HomeHeadSearch from '@/views/home/components/HomeHeadSearch.vue'
import { useDate } from '@/views/home/hooks/useDate'
import { getArticlePage, getSearchGlobal, newDataList } from '@/api/daikin/base'
import { noticeld } from '@/stores/modules/noticeId'
import { searchStore } from '@/stores/modules/search'
import { message } from '@/utils/message'
import dayjs from 'dayjs'
const searchS = searchStore()
const { day, week } = useDate()
const { push } = useRouter()
const route = useRoute()
const listData = ref()
const flg = ref()
let keywords = ref()
const pageInfo = reactive({
currentPage: 1,
pageSize: 10,
total: 0
})
// App_Article App_Market App_data_platform , App_BCP BCP, App_CSR ,App_Quality ,App_Lab Lab,App_Database DatabBase
const codeType = {
App_Article: '外部情报', //
App_Market: '市况汇率', // fileCommon.fileSize
App_data_platform: '数据平台', // fileCommon.fileSize
App_BCP: 'BCP模块', // fileCommon.fileSize
App_CSR: '碳中和模块', // fileCommon.fileSize
App_Quality: '品质模块', // fileCommon.fileSize
App_Lab: 'Lab模块', // fileCommon.fileSize
App_Database: 'DatabBase模块', // fileCommon.fileSize
App_News: '新闻模块'
}
const loading = ref(true)
async function getSearchList() {
loading.value = true
const keyword = searchS.search.content
// const { rows } = await getArticlePage({ pageNum: 1, pageSize: 100, type: 2, position: 'search', keyword } as any);
const { rows, total } = await getSearchGlobal({
pageNum: pageInfo.currentPage,
pageSize: pageInfo.pageSize,
keyword
} as any).catch((e) => {
loading.value = false
listData.value = []
})
listData.value = rows
setTimeout(() => {
loading.value = false
}, 300)
pageInfo.total = total
}
const newsData = ref<any>()
const fetchNewDataList = async () => {
const res = await newDataList({ pageNum: pageInfo.currentPage, pageSize: pageInfo.pageSize })
pageInfo.total = res.total
const data = groupDatesByWeek(res.rows || [])
newsData.value = data
}
fetchNewDataList()
const num = ['', '第一周', '第二周', '第三周', '第四周', '第五周']
//
function groupDatesByWeek(dates = [], weekStartDay = 1) {
return dates.reduce((acc: any, item: any) => {
const date = dayjs(item.createTime)
const weekStart = date.startOf('week').add(weekStartDay, 'day').format('MM月DD日')
item.date = date.format('YYYY-MM-DD')
const weekEnd = date.endOf('week').add(weekStartDay, 'day').format('MM月DD日')
const week = getWeekOfMonth(date)
const month = date.format('MM')
const key = `${+month}${num[week]} ${weekStart} - ${weekEnd} `
acc[key] = acc[key] || []
acc[key].push(item)
return acc
}, {})
}
function getWeekOfMonth(date) {
const startOfMonth = date.startOf('month')
const diff = date.diff(startOfMonth, 'day')
return Math.ceil((diff + startOfMonth.day()) / 7)
}
// watchEffect(() => {
// searchS.search.time
// getSearchList(searchS.search.content)
// })
const codePath = {
App_Article: {
path: '/intelligence/outside/',
modulePath: '/Home/intelligence'
},
App_Market: {
path: '/Home/market/',
modulePath: '/Home/market'
},
App_data_platform: {
path: '/Home/cd/',
modulePath: '/Home/cd'
},
App_BCP: {
path: '/Home/bcp/',
modulePath: '/Home/bcp/'
},
// '',
App_CSR: {
path: '/Home/csr/',
modulePath: '/Home/csr/'
},
// '',
App_Quality: {
path: '/Home/quality/',
modulePath: '/Home/quality/'
},
// 'Lab',
App_Lab: {
path: '/Home/diffspace/',
modulePath: '/Home/diffspace'
},
// 'DatabBase'
App_Database: {
path: '/DataBase?id=',
modulePath: '/DataBase'
}
}
const goModule = (item, type) => {
const { moduleCode, id, cateId } = item
const { modulePath, path } = codePath[moduleCode]
console.log('🚀 ~ file: News.vue:128 ~ modulePath, path:', modulePath, path)
if (modulePath) {
if (type === 'module') {
push(modulePath)
} else {
push(path + (moduleCode === 'App_Database' ? cateId : id))
}
}
}
const clickItem = (item: any) => {
const { id, filePath, isSelect, moduleCode, fileCommon = {} } = item
if (isSelect == 1) {
if (item.moduleCode === 'App_Article') {
return push('/Home/intelligence/' + item.id)
}
if (['App_Database'].includes(moduleCode)) {
goModule(item, 'path')
} else {
downloads({ fileCommon, filePath })
}
} else {
message.info('您没有权限查看!')
}
}
const downloads = (data: any = {}) => {
const { fileCommon, filePath } = data
if ((fileCommon?.fileSize || 0) > 25 * 1024 * 1024) {
message.info('正在下载中,请稍等~')
downloadFile(filePath)
return
}
if (filePath) {
window.open(filePath, '_blank')
} else {
message.info('没有可预览文件!')
}
}
function downloadFile(url: any) {
fetch(url)
.then((response) => response.blob())
.then((blob) => {
const downloadUrl = URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = downloadUrl
link.download = getFileNameFromUrl(url)
link.click()
})
}
function getFileNameFromUrl(url: string) {
const lastSlashIndex = url.lastIndexOf('/')
if (lastSlashIndex !== -1) {
return url.substring(lastSlashIndex + 1)
} else {
return 'Invalid URL'
}
}
const handleSizeChange = (e) => {
pageInfo.pageSize = e
pageInfo.currentPage = 1
// getSearchList()
fetchNewDataList()
}
// const handleCurrentChange = (e) => {
// pageInfo.currentPage = e
// getSearchList()
// }
const fileSize = 24 * 1024 * 1024
</script>
<template>
<HomeHead class="top">
<template #content>
<!-- <HomeHeadSearch /> -->
</template>
</HomeHead>
<div class="h-full relative flex flex-col">
<div class="font-600 flex items-end mt30px">
<div class="text-36px">最近更新列表</div>
<div class="text-18px ml40px mr25px">{{ day }}</div>
<div class="text-18px">{{ week }}</div>
</div>
<div class="q-wrapper flex-1 mt30px text-#142142 flex flex-col bg-#fff p30px">
<div class="h-800px mt-0px relative" v-if="newsData">
<div class="h-710px overflow-y-scroll">
<div v-for="(val, key) of newsData" :key="key" class="w-94% mb-20px flex-1">
<div class="text-#142142 text-20px font-bold mb20px mt40px">
{{ key }}
</div>
<div v-for="(i, k) in val" :key="k" class="mb-20px flex items-center w-full">
<div
@click="clickItem(i)"
class="w-[40%] no-underline truncate text-18px text-#142142 cursor-pointer hover:underline h-16px leading-16px"
>
{{ i.title || '' }}
</div>
<div class="text-#808696 text-16px ml30px flex flex-1 items-center justify-between">
<div class="flex-1">发布科室: {{ i.departName }}</div>
<div class="w-[36%]">发布人: {{ i.userName }}</div>
<div class="w-[20%]">{{ i.createTime?.slice(0, 10) }}</div>
</div>
</div>
</div>
</div>
<div class="absolute bottom-0px left-50% translate-x-[-50%] z-11">
<el-pagination
background
v-model:current-page="pageInfo.currentPage"
v-model:page-size="pageInfo.pageSize"
layout="prev, pager, next, total,jumper,->"
:total="pageInfo.total"
@current-change="fetchNewDataList"
/>
<!-- @size-change="handleSizeChange" -->
</div>
</div>
</div>
</div>
</template>
<style scoped lang="less">
:deep(.el-empty__description) {
p {
font-size: 20px;
}
}
.top {
position: absolute;
right: 30px;
top: -92px;
}
::-webkit-scrollbar {
width: 1px;
}
.q-wrapper {
border-radius: 18px;
border: 1px solid #e7ebf5;
box-shadow: inset 1px 2px 12px rgba(14, 86, 221, 0.32);
overflow: auto;
&::after {
content: ' ';
background-image: url('@/assets/images/bg-card.svg');
pointer-events: none;
display: block;
width: 100%;
height: 127px;
background-repeat: no-repeat; /* 阻止图片平铺 */
background-position: right top;
position: absolute;
left: 0;
top: 0;
}
}
</style>

View File

@ -42,10 +42,6 @@ const array = ref<any[]>([
{ content1: '站稳脚跟 强化优势 大步迈进', content2: '', year: '2016年' }, { content1: '站稳脚跟 强化优势 大步迈进', content2: '', year: '2016年' },
{ content1: '创造未来,决胜于变化的时代', content2: '', year: '2015年' } { content1: '创造未来,决胜于变化的时代', content2: '', year: '2015年' }
]) ])
let flag = ref(false)
const switchImg = () => {
flag.value = !flag.value
}
</script> </script>
<template> <template>
@ -74,22 +70,8 @@ const switchImg = () => {
</div> </div>
</div> </div>
</div> --> </div> -->
<div class="mt30px mr20px flex w100% relative overflow-hidden"> <div class="mt30px mr20px flex w100%">
<!-- <img src="../../../assets/images/fzqiet3.png" class="w100%" /> --> <img src="../../../assets/images/fzqiet3.png" class="w100%" />
<img
src="../../../assets/images/jjllt.jpg"
class="w100% transition-all duration-500"
:class="flag ? '-translate-x-full' : ''"
/>
<img
src="../../../assets/images/jjllt-right.jpg"
class="w100% transition-all duration-500"
:class="flag ? '-translate-x-full' : ''"
/>
<div
@click="switchImg"
class="absolute top-56px right-40px w-300px h50px z-10 cursor-pointer"
></div>
</div> </div>
</template> </template>

View File

@ -4,7 +4,7 @@ import HomeHead from '@/views/home/components/HomeHead.vue'
// import HomeHeadSearch from '@/views/home/components/HomeHeadSearch.vue' // import HomeHeadSearch from '@/views/home/components/HomeHeadSearch.vue'
import { useDate } from '@/views/home/hooks/useDate' import { useDate } from '@/views/home/hooks/useDate'
import {NForm,NFormItem,NInput,NModal,NButton,useMessage} from 'naive-ui' import {NForm,NFormItem,NInput,NModal,NButton,useMessage} from 'naive-ui'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs' import zhCn from "element-plus/lib/locale/lang/zh-cn";
import UserPage from '@/views/home/intelligence/process/UserPages.vue' import UserPage from '@/views/home/intelligence/process/UserPages.vue'
import Editor from '@/views/home/intelligence/components/TinyECE.vue' import Editor from '@/views/home/intelligence/components/TinyECE.vue'
import {addPageInv} from '@/api/daikin/base' import {addPageInv} from '@/api/daikin/base'
@ -37,7 +37,8 @@ let rules = {
required: false, required: false,
message: '请输入职务', message: '请输入职务',
trigger: 'blur' trigger: 'blur'
} },
} }
const showModals =ref(false) const showModals =ref(false)
const showModal = ref(false) const showModal = ref(false)
@ -52,6 +53,7 @@ const CloseThis = (data) => {
} }
const handleClose = (tag: any) => { const handleClose = (tag: any) => {
dataList.value.splice(dataList.value.indexOf(tag), 1) dataList.value.splice(dataList.value.indexOf(tag), 1)
console.log( dataList.value) console.log( dataList.value)
} }
@ -63,14 +65,14 @@ const formValue = ref({
actSTime:'', actSTime:'',
actETime:'', actETime:'',
position:'', position:'',
userIdList: [] userIdList:[],
}) })
const editorContent =ref() const editorContent =ref()
function escapeHTML(html: string): string { function escapeHTML(html: string): string {
const tempElement = document.createElement('div') const tempElement = document.createElement('div');
tempElement.textContent = html tempElement.textContent = html;
return tempElement.innerHTML return tempElement.innerHTML;
} }
// //
const handleChild2 = (data: string) => { const handleChild2 = (data: string) => {
@ -82,12 +84,13 @@ async function sure() {
const content = escapeHTML(cont) const content = escapeHTML(cont)
const {title, actName, actSTime, actETime,position } = formValue.value const {title, actName, actSTime, actETime,position } = formValue.value
const starTime = new Date(actSTime).getTime() const starTime = new Date(actSTime).getTime()
const endTime = new Date(actETime).getTime() const endTime = new Date(actETime).getTime()
console.log(starTime,endTime) console.log(starTime,endTime)
let userIdList: any[] =[] let userIdList: any[] =[]
if(!dataList.value){ if(!dataList.value){
message.success('请选择要提醒的对象') message.success("请选择要提醒的对象")
return return
} }
dataList.value.forEach((i: { userId: any })=>{ dataList.value.forEach((i: { userId: any })=>{
@ -95,23 +98,21 @@ async function sure() {
}) })
console.log(formValue.value,dataList,content) console.log(formValue.value,dataList,content)
if(userIdList.length<0) return if(userIdList.length<0) return
let formdata = new FormData() let formdata = new FormData();
formdata.append('title', title) formdata.append("title",title);
formdata.append('actName', actName) formdata.append("actName",actName);
formdata.append('actSTime', starTime) formdata.append("actSTime",starTime);
formdata.append('actETime', endTime) formdata.append("actETime",endTime);
formdata.append('content', content) formdata.append("content",content);
formdata.append('position', position) formdata.append("position",position);
formdata.append('userIdList', userIdList) formdata.append("userIdList",userIdList);
const { msg, code } = await addPageInv(formdata, { const { msg, code } = await addPageInv(formdata,{headers: {'Content-Type': 'application/form-data'}})
headers: { 'Content-Type': 'application/form-data' }
})
if (code === 200) { if (code === 200) {
message.success('添加成功') message.success("添加成功")
} else {
message.success(msg)
} }
else { message.success(msg); }
} }
</script> </script>
<template> <template>
@ -127,14 +128,8 @@ async function sure() {
<div class="text-18px">{{ week }}</div> <div class="text-18px">{{ week }}</div>
</div> </div>
<div class="g-wrapper flex-1 mt30px p30px"> <div class="g-wrapper flex-1 mt30px p30px">
<n-form <n-form ref="formRef" :label-width="300" :model="formValue" :rules="rules" size="medium"
ref="formRef" require-mark-placement="left">
:label-width="300"
:model="formValue"
:rules="rules"
size="medium"
require-mark-placement="left"
>
<n-form-item label="标题" path="title"> <n-form-item label="标题" path="title">
<n-input v-model:value="formValue.title" placeholder="" /> <n-input v-model:value="formValue.title" placeholder="" />
</n-form-item> </n-form-item>
@ -146,27 +141,18 @@ async function sure() {
</n-form-item> </n-form-item>
<n-form-item label="开始时间" path="actSTime"> <n-form-item label="开始时间" path="actSTime">
<el-config-provider :locale="zhCn"> <el-config-provider :locale="zhCn">
<el-date-picker <el-date-picker v-model="formValue.actSTime" type="datetime" placeholder="请选择时间" format="YYYY/MM/DD HH:mm:ss"/>
v-model="formValue.actSTime"
type="datetime"
placeholder="请选择时间"
format="YYYY/MM/DD HH:mm:ss"
/>
</el-config-provider> </el-config-provider>
</n-form-item> </n-form-item>
<n-form-item label="结束时间" path="actETime"> <n-form-item label="结束时间" path="actETime">
<el-config-provider :locale="zhCn"> <el-config-provider :locale="zhCn">
<el-date-picker <el-date-picker v-model="formValue.actETime" type="datetime" placeholder="请选择时间" format="YYYY/MM/DD HH:mm:ss"/>
v-model="formValue.actETime"
type="datetime"
placeholder="请选择时间"
format="YYYY/MM/DD HH:mm:ss"
/>
</el-config-provider> </el-config-provider>
</n-form-item> </n-form-item>
<n-form-item label="内容" path="content" class="text-#000"> <n-form-item label="内容" path="content" class="text-#000">
<Editor @getChildData="handleChild2"></Editor> <Editor @getChildData="handleChild2"></Editor>
</n-form-item> </n-form-item>
</n-form> </n-form>
<n-form-item> <n-form-item>
@ -174,58 +160,42 @@ async function sure() {
<n-button @click="showModals = true"> 文本内容预览</n-button> <n-button @click="showModals = true"> 文本内容预览</n-button>
</div> </div>
</n-form-item> </n-form-item>
<n-button @click="showModal = true"> 情报公开范围 </n-button> <n-button @click="showModal = true">
情报公开范围
</n-button>
<div class="mt15px h100px overflow-y-auto"> <div class="mt15px h100px overflow-y-auto">
<el-tag <el-tag v-for="i in dataList" :key="i" class="mx-1" closable :disable-transitions="false"
v-for="i in dataList" @close="handleClose(i)" type="info" size="large">
:key="i"
class="mx-1"
closable
:disable-transitions="false"
@close="handleClose(i)"
type="info"
size="large"
>
{{ i.nickName }} {{ i.nickName }}
</el-tag> </el-tag>
</div> </div>
<n-button <n-button attr-type="button" @click="sure" style="background-color: #3870E5; border-radius: 5px; color: #fff;margin-left: 10px;margin-top: 20px; padding: 0 20px;">
attr-type="button"
@click="sure"
style="
background-color: #3870e5;
border-radius: 5px;
color: #fff;
margin-left: 10px;
margin-top: 20px;
padding: 0 20px;
"
>
提交 提交
</n-button> </n-button>
</div> </div>
</div> </div>
<n-modal v-model:show="showModal"> <n-modal v-model:show="showModal">
<UserPage @clickChild="handleChild" @CloseThis="CloseThis"></UserPage> <UserPage @clickChild="handleChild" @CloseThis="CloseThis"></UserPage>
</n-modal> </n-modal>
<n-modal v-model:show="showModals"> <n-modal v-model:show="showModals">
<div class=" flex w80% p30px bg-#fff my40px rounded-30px"> <div class=" flex w80% p30px bg-#fff my40px rounded-30px">
<div class=" overflow-y-auto h800px container" v-html="editorContent"></div> <div class=" overflow-y-auto h800px container" v-html="editorContent"></div>
</div> </div>
</n-modal> </n-modal>
<div
class="absolute flex flex-col w-full h-full z-200 top-0 left-0 text-center bg-red justify-center items-center" <div class="absolute flex flex-col w-full h-full z-200 top-0 left-0 text-center bg-red justify-center items-center" style="background-color: rgba(255,255,255,0.8);">
style="background-color: rgba(255, 255, 255, 0.8)"
>
<img src="@/assets/images/chah.png"/> <img src="@/assets/images/chah.png"/>
<br /> <br>
<div class="text-#5683DB text-36px">做成中,敬请期待</div> <div class="text-#5683DB text-36px">做成中,敬请期待</div>
</div> </div>
</template> </template>
<style scoped lang="less"> <style scoped lang="less">
.top { .top {
position: absolute; position: absolute;
right: 30px; right: 30px;
@ -234,7 +204,7 @@ async function sure() {
.g-wrapper { .g-wrapper {
border-radius: 18px; border-radius: 18px;
border: 1px solid #e7ebf5; border: 1px solid #E7EBF5;
box-shadow: inset 1px 2px 12px rgba(14, 86, 221, 0.32); box-shadow: inset 1px 2px 12px rgba(14, 86, 221, 0.32);
overflow: auto; overflow: auto;
height: 800px; height: 800px;
@ -249,7 +219,7 @@ async function sure() {
.year{ .year{
left: -132px; left: -132px;
top: -14px; top: -14px;
color: #003cb7; color: #003CB7;
font-size: 26px; font-size: 26px;
font-weight: normal; font-weight: normal;
text-align: center; text-align: center;

View File

@ -4,7 +4,7 @@ import HomeHead from '@/views/home/components/HomeHead.vue'
// import HomeHeadSearch from '@/views/home/components/HomeHeadSearch.vue' // import HomeHeadSearch from '@/views/home/components/HomeHeadSearch.vue'
import { useDate } from '@/views/home/hooks/useDate' import { useDate } from '@/views/home/hooks/useDate'
import {NForm,NFormItem,NInput,NModal,NButton,useMessage} from 'naive-ui' import {NForm,NFormItem,NInput,NModal,NButton,useMessage} from 'naive-ui'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs' import zhCn from "element-plus/lib/locale/lang/zh-cn";
import UserPage from '@/views/home/intelligence/process/UserPages.vue' import UserPage from '@/views/home/intelligence/process/UserPages.vue'
import Editor from '@/views/home/intelligence/components/TinyECE.vue' import Editor from '@/views/home/intelligence/components/TinyECE.vue'
import {addPageVisit} from '@/api/daikin/base' import {addPageVisit} from '@/api/daikin/base'
@ -37,7 +37,8 @@ let rules = {
required: false, required: false,
message: '请输入职务', message: '请输入职务',
trigger: 'blur' trigger: 'blur'
} },
} }
const showModal = ref(false) const showModal = ref(false)
const dataList = ref() const dataList = ref()
@ -51,6 +52,7 @@ const CloseThis = (data) => {
} }
const handleClose = (tag: any) => { const handleClose = (tag: any) => {
dataList.value.splice(dataList.value.indexOf(tag), 1) dataList.value.splice(dataList.value.indexOf(tag), 1)
console.log( dataList.value) console.log( dataList.value)
} }
@ -62,14 +64,14 @@ const formValue = ref({
actSTime:'', actSTime:'',
actETime:'', actETime:'',
position:'', position:'',
userIdList: [] userIdList:[],
}) })
const editorContent =ref() const editorContent =ref()
function escapeHTML(html: string): string { function escapeHTML(html: string): string {
const tempElement = document.createElement('div') const tempElement = document.createElement('div');
tempElement.textContent = html tempElement.textContent = html;
return tempElement.innerHTML return tempElement.innerHTML;
} }
const showModals =ref(false) const showModals =ref(false)
// //
@ -82,12 +84,13 @@ async function sure() {
const content = escapeHTML(cont) const content = escapeHTML(cont)
const {title, actName, actSTime, actETime,position } = formValue.value const {title, actName, actSTime, actETime,position } = formValue.value
const starTime = new Date(actSTime).getTime() const starTime = new Date(actSTime).getTime()
const endTime = new Date(actETime).getTime() const endTime = new Date(actETime).getTime()
console.log(starTime,endTime) console.log(starTime,endTime)
let userIdList: any[] =[] let userIdList: any[] =[]
if(!dataList.value){ if(!dataList.value){
message.success('请选择要提醒的对象') message.success("请选择要提醒的对象")
return return
} }
dataList.value.forEach((i: { userId: any })=>{ dataList.value.forEach((i: { userId: any })=>{
@ -95,23 +98,21 @@ async function sure() {
}) })
console.log(formValue.value,dataList,content) console.log(formValue.value,dataList,content)
if(userIdList.length<0) return if(userIdList.length<0) return
let formdata = new FormData() let formdata = new FormData();
formdata.append('title', title) formdata.append("title",title);
formdata.append('actName', actName) formdata.append("actName",actName);
formdata.append('actSTime', starTime) formdata.append("actSTime",starTime);
formdata.append('actETime', endTime) formdata.append("actETime",endTime);
formdata.append('content', content) formdata.append("content",content);
formdata.append('position', position) formdata.append("position",position);
formdata.append('userIdList', userIdList) formdata.append("userIdList",userIdList);
const { msg, code } = await addPageVisit(formdata, { const { msg, code } = await addPageVisit(formdata,{headers: {'Content-Type': 'application/form-data'}})
headers: { 'Content-Type': 'application/form-data' }
})
if (code === 200) { if (code === 200) {
message.success('添加成功') message.success("添加成功")
} else {
message.success(msg)
} }
else { message.success(msg); }
} }
</script> </script>
<template> <template>
@ -127,14 +128,8 @@ async function sure() {
<div class="text-18px">{{ week }}</div> <div class="text-18px">{{ week }}</div>
</div> </div>
<div class="g-wrapper flex-1 mt30px p30px"> <div class="g-wrapper flex-1 mt30px p30px">
<n-form <n-form ref="formRef" :label-width="300" :model="formValue" :rules="rules" size="medium"
ref="formRef" require-mark-placement="left">
:label-width="300"
:model="formValue"
:rules="rules"
size="medium"
require-mark-placement="left"
>
<n-form-item label="标题" path="title"> <n-form-item label="标题" path="title">
<n-input v-model:value="formValue.title" placeholder="" /> <n-input v-model:value="formValue.title" placeholder="" />
</n-form-item> </n-form-item>
@ -146,86 +141,65 @@ async function sure() {
</n-form-item> </n-form-item>
<n-form-item label="开始时间" path="actSTime"> <n-form-item label="开始时间" path="actSTime">
<el-config-provider :locale="zhCn"> <el-config-provider :locale="zhCn">
<el-date-picker <el-date-picker v-model="formValue.actSTime" type="datetime" placeholder="请选择时间" format="YYYY/MM/DD HH:mm:ss"/>
v-model="formValue.actSTime"
type="datetime"
placeholder="请选择时间"
format="YYYY/MM/DD HH:mm:ss"
/>
</el-config-provider> </el-config-provider>
</n-form-item> </n-form-item>
<n-form-item label="结束时间" path="actETime"> <n-form-item label="结束时间" path="actETime">
<el-config-provider :locale="zhCn"> <el-config-provider :locale="zhCn">
<el-date-picker <el-date-picker v-model="formValue.actETime" type="datetime" placeholder="请选择时间" format="YYYY/MM/DD HH:mm:ss"/>
v-model="formValue.actETime"
type="datetime"
placeholder="请选择时间"
format="YYYY/MM/DD HH:mm:ss"
/>
</el-config-provider> </el-config-provider>
</n-form-item> </n-form-item>
<n-form-item label="内容" path="content" class="text-#000"> <n-form-item label="内容" path="content" class="text-#000">
<Editor @getChildData="handleChild2"></Editor> <Editor @getChildData="handleChild2"></Editor>
</n-form-item> </n-form-item>
</n-form> </n-form>
<n-form-item> <n-form-item>
<div> <div>
<n-button @click="showModals = true"> 文本内容预览</n-button> <n-button @click="showModals = true"> 文本内容预览</n-button>
</div> </div>
</n-form-item> </n-form-item>
<n-button @click="showModal = true"> 情报公开范围 </n-button>
<n-button @click="showModal = true">
情报公开范围
</n-button>
<div class="mt15px h100px overflow-y-auto"> <div class="mt15px h100px overflow-y-auto">
<el-tag <el-tag v-for="i in dataList" :key="i" class="mx-1" closable :disable-transitions="false"
v-for="i in dataList" @close="handleClose(i)" type="info" size="large">
:key="i"
class="mx-1"
closable
:disable-transitions="false"
@close="handleClose(i)"
type="info"
size="large"
>
{{ i.nickName }} {{ i.nickName }}
</el-tag> </el-tag>
</div> </div>
<n-button <n-button attr-type="button" @click="sure" style="background-color: #3870E5; border-radius: 5px; color: #fff;margin-left: 10px;margin-top: 20px; padding: 0 20px;">
attr-type="button"
@click="sure"
style="
background-color: #3870e5;
border-radius: 5px;
color: #fff;
margin-left: 10px;
margin-top: 20px;
padding: 0 20px;
"
>
提交 提交
</n-button> </n-button>
</div> </div>
</div> </div>
<n-modal v-model:show="showModal"> <n-modal v-model:show="showModal">
<UserPage @clickChild="handleChild" @CloseThis="CloseThis"></UserPage> <UserPage @clickChild="handleChild" @CloseThis="CloseThis"></UserPage>
</n-modal> </n-modal>
<n-modal v-model:show="showModals"> <n-modal v-model:show="showModals">
<div class=" flex w80% p30px bg-#fff my40px rounded-30px"> <div class=" flex w80% p30px bg-#fff my40px rounded-30px">
<div class=" overflow-y-auto h800px container" v-html="editorContent"></div> <div class=" overflow-y-auto h800px container" v-html="editorContent"></div>
</div> </div>
</n-modal> </n-modal>
<div <div class="absolute flex flex-col w-full h-full z-200 top-0 left-0 text-center bg-red justify-center items-center" style="background-color: rgba(255,255,255,0.8);">
class="absolute flex flex-col w-full h-full z-200 top-0 left-0 text-center bg-red justify-center items-center"
style="background-color: rgba(255, 255, 255, 0.8)"
>
<img src="@/assets/images/chah.png"/> <img src="@/assets/images/chah.png"/>
<br /> <br>
<div class="text-#5683DB text-36px">做成中,敬请期待</div> <div class="text-#5683DB text-36px">做成中,敬请期待</div>
</div> </div>
</template> </template>
<style scoped lang="less"> <style scoped lang="less">
.top { .top {
position: absolute; position: absolute;
right: 30px; right: 30px;
@ -234,7 +208,7 @@ async function sure() {
.g-wrapper { .g-wrapper {
border-radius: 18px; border-radius: 18px;
border: 1px solid #e7ebf5; border: 1px solid #E7EBF5;
box-shadow: inset 1px 2px 12px rgba(14, 86, 221, 0.32); box-shadow: inset 1px 2px 12px rgba(14, 86, 221, 0.32);
overflow: auto; overflow: auto;
height: 800px; height: 800px;
@ -249,7 +223,7 @@ async function sure() {
.year{ .year{
left: -132px; left: -132px;
top: -14px; top: -14px;
color: #003cb7; color: #003CB7;
font-size: 26px; font-size: 26px;
font-weight: normal; font-weight: normal;
text-align: center; text-align: center;

View File

@ -1,105 +0,0 @@
<script setup lang="ts">
import { useUserStore } from '@/stores/modules/user'
import HomeHead from '@/views/home/components/HomeHead.vue'
// import HomeHeadSearch from '@/views/home/components/HomeHeadSearch.vue'
import { useDate } from '@/views/home/hooks/useDate'
import { getArticlePage } from '@/api/daikin/base'
import { noticeld } from '@/stores/modules/noticeId'
import { searchStore } from '@/stores/modules/search'
import { message } from '@/utils/message'
const store = noticeld()
const store2 = useUserStore()
const searchS = searchStore()
const { day, week } = useDate()
const { push } = useRouter()
const route = useRoute()
const listData = ref()
const flg =ref()
let keywords =ref()
async function getSearchList() {
const keyword = keywords.value
const { rows } = await getArticlePage({ pageNum: 1, pageSize: 100, type: 2, position: 'search', keyword } as any);
listData.value = rows
}
watchSyncEffect(()=>{
keywords.value = searchS.search.content
// console.log(keywords.value)
getSearchList()
})
onMounted(() => {
getSearchList()
flg.value = store2.user.isReview > 0
console.log(flg.value,store2.user.isReview)
})
const clickTo=(obj)=>{
// console.log(obj)
if(obj.isSelect===1){
push(`${route.path}/${obj.id}`)
}
else{
message.info("您没有权限查看!")
}
}
</script>
<template>
<HomeHead class="top">
<template #content>
<!-- <HomeHeadSearch /> -->
</template>
</HomeHead>
<div class="h-full relative flex flex-col">
<div class="font-600 flex items-end mt30px">
<div class="text-36px">搜索列表</div>
<div class="text-18px ml40px mr25px">{{ day }}</div>
<div class="text-18px">{{ week }}</div>
</div>
<div class="q-wrapper flex-1 mt30px text-#142142 flex flex-col bg-#fff p30px">
<div v-if="listData&&listData.length>0" v-for="i in listData" :key="i"
class="mt8px cursor-pointer flex items-center p15px pl20px text-18px max-w-805px">
<span class="truncate flex-1 w0 text-#142142 hover:underline " @click=" clickTo(i)">{{ i.title }}</span>
<span class="shrink-0 ml38px text-#808696">{{ i.createTime }}</span>
<!-- <span v-if="flg" class="ml20px text-#808696 text-16px">: {{ i.publishName }}</span> -->
</div>
<div v-else class="w-full h-hull">
<el-empty :image-size="200" />
</div>
</div>
</div>
</template>
<style scoped lang="less">
.top {
position: absolute;
right: 30px;
top: -92px;
}
::-webkit-scrollbar {
width: 1px;
}
.q-wrapper {
border-radius: 18px;
border: 1px solid #E7EBF5;
box-shadow: inset 1px 2px 12px rgba(14, 86, 221, 0.32);
overflow: auto;
&::after {
content: ' ';
background-image: url('@/assets/images/bg-card.svg');
pointer-events: none;
display: block;
width: 100%;
height: 127px;
background-repeat: no-repeat; /* 阻止图片平铺 */
background-position: right top;
position: absolute;
left: 0;
top: 0;
}
}</style>

View File

@ -3,12 +3,10 @@ import { useUserStore } from '@/stores/modules/user'
import HomeHead from '@/views/home/components/HomeHead.vue' import HomeHead from '@/views/home/components/HomeHead.vue'
// import HomeHeadSearch from '@/views/home/components/HomeHeadSearch.vue' // import HomeHeadSearch from '@/views/home/components/HomeHeadSearch.vue'
import { useDate } from '@/views/home/hooks/useDate' import { useDate } from '@/views/home/hooks/useDate'
import { getArticlePage, getSearchGlobal } from '@/api/daikin/base' import { getArticlePage } from '@/api/daikin/base'
import { noticeld } from '@/stores/modules/noticeId' import { noticeld } from '@/stores/modules/noticeId'
import { searchStore } from '@/stores/modules/search' import { searchStore } from '@/stores/modules/search'
import { message } from '@/utils/message' import { message } from '@/utils/message'
import { NPopover } from 'naive-ui'
const store = noticeld() const store = noticeld()
const store2 = useUserStore() const store2 = useUserStore()
const searchS = searchStore() const searchS = searchStore()
@ -19,157 +17,30 @@ const route = useRoute()
const listData = ref() const listData = ref()
const flg =ref() const flg =ref()
let keywords =ref() let keywords =ref()
const pageInfo = reactive({
currentPage: 1,
pageSize: 10,
total: 0
})
// App_Article App_Market App_data_platform , App_BCP BCP, App_CSR ,App_Quality ,App_Lab Lab,App_Database DatabBase
const codeType = {
App_Article: '外部情报', //
App_Market: '市况汇率', // fileCommon.fileSize
App_data_platform: '数据平台', // fileCommon.fileSize
App_BCP: 'BCP模块', // fileCommon.fileSize
App_CSR: '碳中和模块', // fileCommon.fileSize
App_Quality: '品质模块', // fileCommon.fileSize
App_Lab: 'Lab模块', // fileCommon.fileSize
App_Database: 'DatabBase模块', // fileCommon.fileSize
App_News: '新闻模块'
}
const loading = ref(true)
async function getSearchList() { async function getSearchList() {
loading.value = true const keyword = keywords.value
const keyword = searchS.search.content const { rows } = await getArticlePage({ pageNum: 1, pageSize: 100, type: 2, position: 'search', keyword } as any);
// const { rows } = await getArticlePage({ pageNum: 1, pageSize: 100, type: 2, position: 'search', keyword } as any);
const { rows, total } = await getSearchGlobal({
pageNum: pageInfo.currentPage,
pageSize: pageInfo.pageSize,
keyword
} as any).catch((e) => {
loading.value = false
listData.value = []
})
listData.value = rows listData.value = rows
setTimeout(() => {
loading.value = false
}, 300)
pageInfo.total = total
} }
watchEffect(() => { watchSyncEffect(()=>{
searchS.search.time keywords.value = searchS.search.content
getSearchList(searchS.search.content) // console.log(keywords.value)
})
const codePath = {
App_Article: {
path: '/intelligence/outside/',
modulePath: '/Home/intelligence'
},
App_Market: {
path: '/Home/market',
modulePath: '/Home/market'
},
App_data_platform: {
path: '/Home/cd',
modulePath: '/Home/cd'
},
App_BCP: {
path: '/Home/bcp',
modulePath: '/Home/bcp'
},
// '',
App_CSR: {
path: '/Home/csr',
modulePath: '/Home/csr'
},
// '',
App_Quality: {
path: '/Home/quality',
modulePath: '/Home/quality'
},
// 'Lab',
App_Lab: {
path: '/Home/diffspace',
modulePath: '/Home/diffspace'
},
// 'DatabBase'
App_Database: {
path: '/DataBase',
modulePath: '/DataBase'
}
}
const clickItem = (item) => {
const { id, filePath, isSelect, moduleCode, fileCommon = {} } = item
console.log('🚀 ~ file: index.vue:104 ~ item:', item)
if (isSelect === 1) {
downloads({ fileCommon, filePath })
} else {
message.info('您没有权限查看!')
}
}
const downloads = (data: any = {}) => {
const { fileCommon, filePath } = data
if ((fileCommon?.fileSize || 0) > 25 * 1024 * 1024) {
message.info('正在下载中,请稍等~')
downloadFile(filePath)
return
}
if (filePath) {
window.open(filePath, '_blank')
} else {
message.info('没有可预览文件!')
}
}
function downloadFile(url: any) {
fetch(url)
.then((response) => response.blob())
.then((blob) => {
const downloadUrl = URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = downloadUrl
link.download = getFileNameFromUrl(url)
link.click()
})
}
function getFileNameFromUrl(url: string) {
console.log(
'🚀 ~ file: index.vue:107 ~ getFileNameFromUrl ~ getFileNameFromUrl:',
getFileNameFromUrl
)
const lastSlashIndex = url.lastIndexOf('/')
if (lastSlashIndex !== -1) {
return url.substring(lastSlashIndex + 1)
} else {
return 'Invalid URL'
}
}
const goModule = (item, type) => {
const { moduleCode, id } = item
const { modulePath, path } = codePath[moduleCode]
if (modulePath) {
if (type === 'module') {
push(modulePath)
} else {
push(path + id)
}
}
}
const handleSizeChange = (e) => {
pageInfo.pageSize = e
pageInfo.currentPage = 1
getSearchList() getSearchList()
})
onMounted(() => {
getSearchList()
flg.value = store2.user.isReview > 0
console.log(flg.value,store2.user.isReview)
})
const clickTo=(obj)=>{
// console.log(obj)
if(obj.isSelect===1){
push(`${route.path}/${obj.id}`)
}
else{
message.info("您没有权限查看!")
}
} }
// const handleCurrentChange = (e) => {
// pageInfo.currentPage = e
// getSearchList()
// }
const fileSize = 24 * 1024 * 1024
</script> </script>
<template> <template>
@ -185,98 +56,24 @@ const fileSize = 24 * 1024 * 1024
<div class="text-18px">{{ week }}</div> <div class="text-18px">{{ week }}</div>
</div> </div>
<div class="q-wrapper flex-1 mt30px text-#142142 flex flex-col bg-#fff p30px"> <div class="q-wrapper flex-1 mt30px text-#142142 flex flex-col bg-#fff p30px">
<div class="h-800px mt-30px relative" v-if="listData && listData.length > 0">
<el-table
v-loading="loading" <div v-if="listData&&listData.length>0" v-for="i in listData" :key="i"
:data="listData" class="mt8px cursor-pointer flex items-center p15px pl20px text-18px max-w-805px">
style="width: 100%; margin-bottom: 20px" <span class="truncate flex-1 w0 text-#142142 hover:underline " @click=" clickTo(i)">{{ i.title }}</span>
row-key="id" <span class="shrink-0 ml38px text-#808696">{{ i.createTime }}</span>
border <!-- <span v-if="flg" class="ml20px text-#808696 text-16px">: {{ i.publishName }}</span> -->
default-expand-all
:header-cell-style="{
background: '#2A7BF7',
color: '#fff',
height: '70px',
lineHeight: '60px',
textAlign: 'center',
'font-size': '24px'
}"
:cell-style="{
'text-align': 'center',
'overflow-y': 'auto',
height: '60px'
}"
>
<el-table-column prop="moduleName" label="模块名称" width="150">
<template #default="{ row }">
<span class="text-16px">{{ codeType[row.moduleCode] }}</span>
<!-- <n-popover trigger="hover" placement="top-start">
<template #trigger>
</template>
<span>点击进入 {{ codeType[row.moduleCode] }}</span>
</n-popover> -->
</template>
</el-table-column>
<el-table-column prop="title" label="标题" show-overflow-tooltip> </el-table-column>
<el-table-column label="部门" prop="departName" show-overflow-tooltip width="150" />
<el-table-column prop="userName" label="发布人" show-overflow-tooltip width="150" />
<el-table-column label="发布日期" prop="createTime" show-overflow-tooltip width="220" />
<el-table-column label="操作" width="270">
<template #default="{ row }">
<div class="">
<div class="inline-block">
<el-button
v-if="row.moduleCode === 'App_Article'"
style="color: #000"
@click="goModule(row, 'path')"
>详情
</el-button>
<template v-else>
<n-popover
v-if="(row.fileCommon?.fileSize || 0) > fileSize"
trigger="hover"
placement="top-start"
>
<template #trigger>
<el-button style="color: #000" @click="clickItem(row)"></el-button>
</template>
<span>该文件超过25MB无法进行预览点击进行下载</span>
</n-popover>
<el-button v-else style="color: #000" @click="clickItem(row)"></el-button>
</template>
</div>
<el-button type="primary" class="ml-16px" @click="goModule(row, 'module')">
进入模块</el-button
>
</div>
</template>
</el-table-column>
</el-table>
<div class="absolute bottom-20px left-50% translate-x-[-50%] z-11">
<el-pagination
background
v-model:current-page="pageInfo.currentPage"
v-model:page-size="pageInfo.pageSize"
layout="prev, pager, next, total,jumper,->"
:total="pageInfo.total"
@current-change="getSearchList"
/>
<!-- @size-change="handleSizeChange" -->
</div>
</div> </div>
<div v-else class="w-full h-hull"> <div v-else class="w-full h-hull">
<el-empty :image-size="300" description="搜索结果为空~" /> <el-empty :image-size="200" />
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<style scoped lang="less"> <style scoped lang="less">
:deep(.el-empty__description) {
p {
font-size: 20px;
}
}
.top { .top {
position: absolute; position: absolute;
right: 30px; right: 30px;
@ -289,7 +86,7 @@ const fileSize = 24 * 1024 * 1024
.q-wrapper { .q-wrapper {
border-radius: 18px; border-radius: 18px;
border: 1px solid #e7ebf5; border: 1px solid #E7EBF5;
box-shadow: inset 1px 2px 12px rgba(14, 86, 221, 0.32); box-shadow: inset 1px 2px 12px rgba(14, 86, 221, 0.32);
overflow: auto; overflow: auto;
&::after { &::after {
@ -305,5 +102,4 @@ const fileSize = 24 * 1024 * 1024
left: 0; left: 0;
top: 0; top: 0;
} }
} }</style>
</style>

View File

@ -90,12 +90,11 @@ const Menus = ref([
icon: getImg('phone.png'), icon: getImg('phone.png'),
icon1: getImg('phone1.png'), icon1: getImg('phone1.png'),
link: '', link: '',
path: '/Home/phone', path: '/Home/phone'
// children: [ // children: [
// { key: 'inv', name: '' }, // { key: 'inv', name: '' },
// { key: 'visit', name: '访' }, // { key: 'visit', name: '访' },
// ] // ]
children: [{ key: 'DataBase', name: '公司内线', params: { id: 267 } }]
} }
]) ])
@ -120,11 +119,8 @@ function menuHandler(menu: any, index: number) {
push({ name: menu.key }) push({ name: menu.key })
return return
} }
if (menu.key === 'phone' && idx.value === index) {
push(menu.path)
return
}
idx.value = index idx.value = index
console.log(menu.key, 'key')
if (!menu.key) return if (!menu.key) return
// if (menu.key === 'DataBase') { // if (menu.key === 'DataBase') {
// if (flag) { // if (flag) {
@ -174,24 +170,31 @@ var activeItem = 0
<div class="w300px -mr-1px flex flex-col shrink-0 overflow-auto"> <div class="w300px -mr-1px flex flex-col shrink-0 overflow-auto">
<!-- @dblclick="toggle" --> <!-- @dblclick="toggle" -->
<img src="@/assets/images/logo.png" class="w197px h44px mt14px" /> <img src="@/assets/images/logo.png" class="w197px h44px mt14px" />
<div class="text-20px text-#fff font-600 mt6px">大金中国调达本部 HOMEPAGE</div> <div class="text-20px text-#fff font-600 mt6px">
大金中国调达本部 HOMEPAGE
</div>
<div <div
class="mt34px w270px min-h80px rd-35px b-4px bg-#fff/16 b-4px b-solid b-#fff/23 overflow-hidden relative" class="mt34px w270px min-h80px rd-35px b-4px bg-#fff/16 b-4px b-solid b-#fff/23 overflow-hidden relative"
> >
<Searchs></Searchs> <Searchs></Searchs>
</div> </div>
<!-- max-h-636px --> <div class="pt10px pb10px flex-1 max-h-636px">
<div class="pt10px pb10px flex-1 max-h-836px">
<div <div
class="nav pl36px pr16px py24px m10px mr0 rd-32px rd-r-0 flex flex-col text-#fff cursor-pointer hover:underline" class="nav pl36px pr16px py24px m10px mr0 rd-32px rd-r-0 flex flex-col text-#fff cursor-pointer hover:underline"
v-for="(m, index) in Menus" v-for="(m, index) in Menus"
:key="m.key" :key="m.key"
:class="activeMenuKey === m.key ? (m.children ? 'actives' : 'active') : ''" :class="
activeMenuKey === m.key ? (m.children ? 'actives' : 'active') : ''
"
@click="() => menuHandler(m, index)" @click="() => menuHandler(m, index)"
> >
<div :class="activeMenuKey === m.key && 'onActive'"> <div :class="activeMenuKey === m.key && 'onActive'">
<img v-if="activeMenuKey === m.key" :src="m.icon1" class="w22px h22px mr16px mt--5px" /> <img
v-if="activeMenuKey === m.key"
:src="m.icon1"
class="w22px h22px mr16px mt--5px"
/>
<img v-else :src="m.icon" class="w22px h22px mr16px mt--5px" /> <img v-else :src="m.icon" class="w22px h22px mr16px mt--5px" />
<span <span
class="text-22px font-900 leading-22px" class="text-22px font-900 leading-22px"
@ -200,14 +203,21 @@ var activeItem = 0
'underline border-b-0px border-b-solid' 'underline border-b-0px border-b-solid'
" "
> >
<a v-if="m.link" class="no-underline text-#fff" :href="m.link"> {{ m.name }}</a> <a v-if="m.link" class="no-underline text-#fff" :href="m.link">
{{ m.name }}</a
>
<span v-else> <span v-else>
<a v-if="m.key === 'link' || m.key === 'DataBase'" class="text-#fff"> <a
v-if="m.key === 'link' || m.key === 'DataBase'"
class="text-#fff"
>
{{ m.name }}</a {{ m.name }}</a
> >
<span v-else>{{ m.name }}</span> <span v-else>{{ m.name }}</span>
</span> </span>
<span class="text-18px italic font-500" v-if="m.other">{{ m.other }}</span> <span class="text-18px italic font-500" v-if="m.other">{{
m.other
}}</span>
</span> </span>
</div> </div>
@ -219,11 +229,19 @@ var activeItem = 0
@click.stop="goChild(item)" @click.stop="goChild(item)"
@click="activeItem = ind" @click="activeItem = ind"
> >
<a v-if="item.link" class="no-underline !text-#fff flex" :href="item.link" <a
><span class="w7px h7px rd-7px bg-#fff block mr-8px mt4px"></span>{{ item.name }}</a v-if="item.link"
class="no-underline !text-#fff flex"
:href="item.link"
><span
class="w7px h7px rd-7px bg-#fff block mr-8px mt4px"
></span
>{{ item.name }}</a
> >
<span v-else class="flex" <span v-else class="flex"
><span class="w7px h7px rd-7px bg-#fff block mr-8px mt4px"></span ><span
class="w7px h7px rd-7px bg-#fff block mr-8px mt4px"
></span
>{{ item.name }}</span >{{ item.name }}</span
> >
</div> </div>
@ -231,7 +249,6 @@ var activeItem = 0
</div> </div>
</div> </div>
<div <div
v-if="false"
class="w270px py14px my20px px24px flex rd-20px bg-#003cb7 hover:underline hover:cursor-pointer" class="w270px py14px my20px px24px flex rd-20px bg-#003cb7 hover:underline hover:cursor-pointer"
style="box-shadow: 0 2rpx 14rpx 0 #00000069" style="box-shadow: 0 2rpx 14rpx 0 #00000069"
> >
@ -239,7 +256,10 @@ var activeItem = 0
class="flex items-center text-18px" class="flex items-center text-18px"
@click="push({ name: 'DataBase', query: { id: 267 } })" @click="push({ name: 'DataBase', query: { id: 267 } })"
> >
<img src="@/assets/images/dianhhh@2x.png" class="w22px h22px mr10px" /> <img
src="@/assets/images/dianhhh@2x.png"
class="w22px h22px mr10px"
/>
公司内线 公司内线
</div> </div>
</div> </div>
@ -250,19 +270,29 @@ var activeItem = 0
:style="{ '--n-border-radius': '8px' }" :style="{ '--n-border-radius': '8px' }"
> >
<template #trigger> </template> <template #trigger> </template>
<div class="text-14px text-#285FE9 flex items-center hover:underline cursor-pointer"> <div
<img src="@/assets/images/wjqq@2x.png" class="w14px h18px mr4px object-contain" /> class="text-14px text-#285FE9 flex items-center hover:underline cursor-pointer"
>
<img
src="@/assets/images/wjqq@2x.png"
class="w14px h18px mr4px object-contain"
/>
<span>{{ '公司内线公司内线公司内线' }}</span> <span>{{ '公司内线公司内线公司内线' }}</span>
</div> </div>
</n-popover> </n-popover>
<div class="p20px w270px rd-20px b-4px bg-#fff/4 b-4px b-solid b-#fff/23 text-14px relative"> <div
class="p20px w270px rd-20px b-4px bg-#fff/4 b-4px b-solid b-#fff/23 text-14px relative"
>
<a <a
href="http://172.31.119.37/scripts/cbgrn/grn.exe/portal/index" href="http://172.31.119.37/scripts/cbgrn/grn.exe/portal/index"
target="_blank" target="_blank"
class="no-underline text-#fff" class="no-underline text-#fff"
> >
<div class="flex items-center text-18px hover:underline"> <div class="flex items-center text-18px hover:underline">
<img src="@/assets/images/icon-book.svg" class="w22px h22px mr10px" /> <img
src="@/assets/images/icon-book.svg"
class="w22px h22px mr10px"
/>
个人日程 个人日程
</div> </div>
<!-- <div class="mt18px">9:00-10:00</div> <!-- <div class="mt18px">9:00-10:00</div>
@ -274,7 +304,10 @@ var activeItem = 0
class="absolute w22px h22px mr10px top--15px right--20px" class="absolute w22px h22px mr10px top--15px right--20px"
/> />
</a> </a>
<div class="mt10px ml-30px opacity-70" @click="(e) => e.stopPropagation()"> <div
class="mt10px ml-30px opacity-70"
@click="(e) => e.stopPropagation()"
>
请点击上方链接登录cybouzu 请点击上方链接登录cybouzu
</div> </div>
</div> </div>
@ -297,15 +330,19 @@ var activeItem = 0
class="fixed bottom-4px text-#fff text-12px ml38px" class="fixed bottom-4px text-#fff text-12px ml38px"
style="margin: 0; width: 100%; text-align: center" style="margin: 0; width: 100%; text-align: center"
> >
今日访问人数{{ store.user.appLoginToDayCount }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;累计访问人数{{ 今日访问人数{{
store.user.appLoginCount store.user.appLoginToDayCount
}} }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;累计访问人数{{ store.user.appLoginCount }}
</div> </div>
<NModal v-model:show="shorm" :mask-closable="false"> <NModal v-model:show="shorm" :mask-closable="false">
<div class="w700px h430px bg-#fff rd-15px"> <div class="w700px h430px bg-#fff rd-15px">
<div <div
class="py5px px15px" class="py5px px15px"
style="border-bottom: 1px solid #dadada; font-weight: bold; color: #494a63" style="
border-bottom: 1px solid #dadada;
font-weight: bold;
color: #494a63;
"
> >
大金空调中国相关 大金空调中国相关
<img <img
@ -317,13 +354,17 @@ var activeItem = 0
<div class="flex mt70px text-center"> <div class="flex mt70px text-center">
<div class="w-full text-center"> <div class="w-full text-center">
<img src="@/assets/images/ewm1@2x.png" class="w200px" /> <img src="@/assets/images/ewm1@2x.png" class="w200px" />
<div class="py10px bg-#377CFF text-#fff w200px rd-20px mt35px mx-auto"> <div
class="py10px bg-#377CFF text-#fff w200px rd-20px mt35px mx-auto"
>
大金空调中国视频号 大金空调中国视频号
</div> </div>
</div> </div>
<div class="w-full"> <div class="w-full">
<img src="@/assets/images/ewm2@2x.png" class="w200px" /> <img src="@/assets/images/ewm2@2x.png" class="w200px" />
<div class="py10px bg-#377CFF text-#fff w200px rd-20px mt35px mx-auto"> <div
class="py10px bg-#377CFF text-#fff w200px rd-20px mt35px mx-auto"
>
大金空调抖音号 大金空调抖音号
</div> </div>
</div> </div>

View File

@ -56,7 +56,7 @@ export default defineConfig({
}) })
], ],
build: { build: {
chunkSizeWarningLimit: 6300, chunkSizeWarningLimit: 4000,
sourcemap: false, // Builds sourcemaps for better debugging but could be disabled for performance sourcemap: false, // Builds sourcemaps for better debugging but could be disabled for performance
minify: 'esbuild', // Use 'terser' for minimizing your codes, it could be 'esbuild' but 'terser' is more accurate minify: 'esbuild', // Use 'terser' for minimizing your codes, it could be 'esbuild' but 'terser' is more accurate
rollupOptions: { rollupOptions: {