cd页面更新
|
|
@ -1417,3 +1417,32 @@ export async function fetchPostList(params?: any) {
|
|||
export async function fetchInternalUserStat(params?: any) {
|
||||
return http.get(`/moduleStat/internalUserStat`, { params })
|
||||
}
|
||||
|
||||
// CD-三个据点总发注金额饼状图
|
||||
export async function fetchPartStatisRate(params?: any) {
|
||||
return http.get(`/cdcontent/partStatisRate`, { params })
|
||||
}
|
||||
|
||||
// CD-三据点历年发注金额
|
||||
export async function fetchPartHisList(params?: any) {
|
||||
return http.get(`/cdcontent/partHisList`, { params })
|
||||
}
|
||||
|
||||
// CD-小业种发注金额
|
||||
export async function fetchPartminBusSeedsRate(params?: any) {
|
||||
return http.get(`/cdcontent/partminBusSeedsRate`, { params })
|
||||
}
|
||||
|
||||
// CD-大业种发注金额
|
||||
export async function fetchPartmaxBusSeedsRate(params?: any) {
|
||||
return http.get(`/cdcontent/partmaxBusSeedsRate`, { params })
|
||||
}
|
||||
|
||||
// CD-图表2-大业种发注金额
|
||||
export async function fetchPartmaxBusSeedsDetailList(params?: any) {
|
||||
return http.get(`/cdcontent/maxBusSeedsDetailList`, { params })
|
||||
}
|
||||
// CD-图表2-大业种发注金额供应商
|
||||
export async function fetchPartmaxBusSeedsRateBySupplier(params?: any) {
|
||||
return http.get(`/cdcontent/partmaxBusSeedsRateBySupplier`, { params })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,11 +56,11 @@ const noticeShow = ref(false)
|
|||
let showIs = false
|
||||
//模块id,1-情报 2-市况汇率 3-数据平台 4-BCP管理 5-碳中和 6-品质 7-差别化LAB
|
||||
const goModeuls = (obj) => {
|
||||
const { moduleId } = obj
|
||||
const { moduleId, type } = obj
|
||||
if (!moduleId) return
|
||||
switch (moduleId) {
|
||||
case 1:
|
||||
if (store.user.isReview === 1 || store.user.isPublish === 1) {
|
||||
if ((store.user.isReview === 1 || store.user.isPublish === 1) && type == 2) {
|
||||
push('/Home/Process')
|
||||
} else {
|
||||
push('/Home/intelligence')
|
||||
|
|
@ -85,7 +85,7 @@ const goModeuls = (obj) => {
|
|||
push({ name: 'Diffspace' })
|
||||
break
|
||||
case 9:
|
||||
push({ name: 'DataBaseReview' })
|
||||
push({ name: type === 2 ? 'DataBaseReview' : 'DataBase' })
|
||||
break
|
||||
default:
|
||||
push('/Home/intelligence')
|
||||
|
|
@ -146,12 +146,18 @@ const toFootPrint = () => {
|
|||
<div class="notice" v-if="noticeShow">
|
||||
<div
|
||||
v-for="ite in noticeData"
|
||||
class="p10px box flex justify-between"
|
||||
class="p10px box flex justify-between items-center"
|
||||
v-if="noticeData"
|
||||
@click="goModeuls(ite)"
|
||||
>
|
||||
<div>{{ ite.moduleName }}</div>
|
||||
<span class="">{{ ite.moduleCount }}</span>
|
||||
<template v-if="ite.type == 1">
|
||||
<div>{{ ite.moduleName }}</div>
|
||||
<span class="min-w-70px">未读{{ ite.moduleCount }}</span>
|
||||
</template>
|
||||
<template v-if="ite.type == 2">
|
||||
<div>{{ ite.moduleName }}</div>
|
||||
<span class="min-w-70px">待审批{{ ite.moduleCount }}</span>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -161,8 +167,8 @@ const toFootPrint = () => {
|
|||
<span class="ml8px pl5px pr5px rounded-20px bg-#002FA7">{{
|
||||
store.user.reviewCount ?? 0
|
||||
}}</span>
|
||||
</div> -->
|
||||
<!-- <n-popover :overlap="false" placement="bottom-start" trigger="click">
|
||||
</div>
|
||||
<n-popover :overlap="false" placement="bottom-start" trigger="click">
|
||||
<template #trigger>
|
||||
<div size="small">
|
||||
新着通知
|
||||
|
|
@ -170,11 +176,8 @@ const toFootPrint = () => {
|
|||
store.user.reviewCount ?? 0
|
||||
}}</span>
|
||||
</div>
|
||||
</template> -->
|
||||
<!-- <div
|
||||
class="inline-flex items-center p10px cursor-pointer"
|
||||
v-if="store.user.isReview === 1"
|
||||
>
|
||||
</template>
|
||||
<div class="inline-flex items-center p10px cursor-pointer" v-if="store.user.isReview === 1">
|
||||
待审核信息{{ store.user.reviewCount ?? 0 }}条
|
||||
<n-button
|
||||
class="text-#fff bg-#0058E4 rounded-5px p5px pt2px pb2px ml 8px"
|
||||
|
|
@ -202,8 +205,8 @@ const toFootPrint = () => {
|
|||
@click="push({ path: '/Home/intelligence' })"
|
||||
>去查看</n-button
|
||||
>
|
||||
</div> -->
|
||||
<!-- </n-popover> -->
|
||||
</div>
|
||||
</n-popover> -->
|
||||
</div>
|
||||
<!-- 当前登录用户信息 -->
|
||||
<NDropdown show-arrow placement="bottom-end" size="huge" :options="options">
|
||||
|
|
@ -222,7 +225,7 @@ const toFootPrint = () => {
|
|||
position: absolute;
|
||||
top: 52px;
|
||||
left: -3px;
|
||||
width: 200px;
|
||||
min-width: 240px;
|
||||
background: rgb(255, 255, 255);
|
||||
max-height: 520px;
|
||||
z-index: 500;
|
||||
|
|
|
|||
31
src/main.ts
|
|
@ -1,22 +1,21 @@
|
|||
import { createApp } from "vue";
|
||||
import { createPinia } from "pinia";
|
||||
import { createApp } from 'vue'
|
||||
import { createPinia } from 'pinia'
|
||||
import ECharts from 'vue-echarts'
|
||||
|
||||
import App from "./App.vue";
|
||||
import router from "./router";
|
||||
import "./styles/smallDog.css"
|
||||
import "./styles/main.css";
|
||||
import "uno.css";
|
||||
import "animate.css"; // https://animate.style/
|
||||
import App from './App.vue'
|
||||
import router from './router'
|
||||
import './styles/smallDog.css'
|
||||
import './styles/main.css'
|
||||
import 'uno.css'
|
||||
import 'animate.css' // https://animate.style/
|
||||
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
|
||||
|
||||
|
||||
const app = createApp(App);
|
||||
const app = createApp(App)
|
||||
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
|
||||
app.component(key, component)
|
||||
}
|
||||
app.component('VChart',ECharts)
|
||||
app.use(createPinia());
|
||||
app.use(router);
|
||||
app.component(key, component)
|
||||
}
|
||||
app.component('VChart', ECharts)
|
||||
app.use(createPinia())
|
||||
app.use(router)
|
||||
|
||||
app.mount("#app");
|
||||
app.mount('#app')
|
||||
|
|
|
|||
|
|
@ -275,5 +275,6 @@ declare global {
|
|||
// for type re-export
|
||||
declare global {
|
||||
// @ts-ignore
|
||||
export type { Component, ComponentPublicInstance, ComputedRef, InjectionKey, PropType, Ref, VNode } from 'vue'
|
||||
export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue'
|
||||
import('vue')
|
||||
}
|
||||
|
|
|
|||
|
|
@ -190,19 +190,25 @@ const { chartRef: chartRef2, option: chartOption2, state } = useChart21()
|
|||
const { chartRef: chartRef22, option: chartOption22 } = useChart22()
|
||||
const { chartRef: chartRef23, option: chartOption23 } = useChart23()
|
||||
const { chartRef: chartRef3, option: chartOption3 } = useChart3()
|
||||
|
||||
const displayDiffValue = (diffValue: number) => {
|
||||
// return diffValue + '%'
|
||||
if (diffValue > 0) {
|
||||
return `+${diffValue} %`
|
||||
return `+${diffValue}%`
|
||||
} else if (diffValue < 0) {
|
||||
return `-${Math.abs(diffValue)} %`
|
||||
return `-${Math.abs(diffValue)}%`
|
||||
} else {
|
||||
return `${diffValue} %`
|
||||
// return `${formatNumber(diffValue)} %`
|
||||
return `${diffValue}%`
|
||||
}
|
||||
}
|
||||
|
||||
async function setModule(codes: any, names: any) {
|
||||
const moduleCode = codes
|
||||
console.log(codes, names)
|
||||
if (names == 'CD' && !userCode.value) {
|
||||
return
|
||||
}
|
||||
push({ name: names })
|
||||
const { code } = await report({ moduleCode })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,479 @@
|
|||
<!-- C/D数据 -->
|
||||
<script setup lang="ts">
|
||||
import { hisYearData, curYearData, useChart3, defineCompont } from './CdData'
|
||||
import { treeList } from '@/api/daikin/base'
|
||||
import HomeHead from '@/views/home/components/HomeHead.vue'
|
||||
// import HomeHeadSearch from '@/views/home/components/HomeHeadSearch.vue'
|
||||
import CDSide from './CDSide.vue'
|
||||
import { NForm, NFormItem, useMessage, NSelect, NButton } from 'naive-ui'
|
||||
import develop from '../develop.vue'
|
||||
import type { FormInst } from 'naive-ui'
|
||||
|
||||
const { push } = useRouter()
|
||||
const message = useMessage()
|
||||
const radioss = ref(2020)
|
||||
|
||||
const { chartRef: chartRef1, option: chartOption1 } = curYearData()
|
||||
const { chartRef: chartRef2, option: chartOption2, state } = hisYearData()
|
||||
const { chartRef: chart1, option: chartOp1 } = useChart3()
|
||||
const { clickData, toYearData, hisData } = defineCompont()
|
||||
|
||||
const treeData = ref<any>()
|
||||
async function getData() {
|
||||
const { data } = await treeList()
|
||||
const dataList = transformData(data)
|
||||
console.log(dataList)
|
||||
treeData.value = dataList
|
||||
}
|
||||
|
||||
function transformData(data, parentKey = '') {
|
||||
let keyIndex = 1
|
||||
|
||||
return data.map((item) => {
|
||||
const key = parentKey ? `${parentKey}-${keyIndex}` : `${item.id}`
|
||||
keyIndex++
|
||||
|
||||
const transformedItem = {
|
||||
label: item.name,
|
||||
key: key,
|
||||
level: parentKey ? parentKey.split('-').length + 1 : 1,
|
||||
id: item.id
|
||||
}
|
||||
|
||||
const treeList = transformTreeList(item.treeList, key)
|
||||
if (treeList.length > 0) {
|
||||
transformedItem.treeList = treeList
|
||||
}
|
||||
|
||||
return transformedItem
|
||||
})
|
||||
}
|
||||
|
||||
function transformTreeList(treeList, parentKey) {
|
||||
if (!treeList || treeList.length === 0) {
|
||||
return []
|
||||
}
|
||||
|
||||
let keyIndex = 1
|
||||
|
||||
return treeList.map((item) => {
|
||||
const key = `${parentKey.split('-').length + 1}-${keyIndex}`
|
||||
keyIndex++
|
||||
|
||||
const transformedItem = {
|
||||
label: item.name,
|
||||
key: key,
|
||||
level: parentKey.split('-').length + 1,
|
||||
id: item.id
|
||||
}
|
||||
|
||||
const childTreeList = transformTreeList(item.treeList, key)
|
||||
if (childTreeList.length > 0) {
|
||||
transformedItem.treeList = childTreeList
|
||||
}
|
||||
|
||||
return transformedItem
|
||||
})
|
||||
}
|
||||
|
||||
let formValue = ref({
|
||||
name: '',
|
||||
age: '',
|
||||
phone: '',
|
||||
phone1: ''
|
||||
})
|
||||
const formRef = ref<FormInst | null>(null)
|
||||
const handleValidateClick = (e: MouseEvent) => {
|
||||
e.preventDefault()
|
||||
formRef.value?.validate((errors) => {
|
||||
if (!errors) {
|
||||
// message.success('Valid')
|
||||
} else {
|
||||
console.log(errors)
|
||||
// message.error('Invalid')
|
||||
}
|
||||
})
|
||||
}
|
||||
let options = [
|
||||
{
|
||||
label: '据点总体',
|
||||
value: 'song0'
|
||||
},
|
||||
{
|
||||
label: 'DIS',
|
||||
value: 'song1'
|
||||
}
|
||||
]
|
||||
|
||||
const checkedValueRef = ref<string | null>(null)
|
||||
const handleChange = (e: Event) => {
|
||||
state.cateId = 1
|
||||
state.yearTime = e
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
// 获取子组件传过来的值
|
||||
const handleChild = (id: any) => {
|
||||
// console.log(data)
|
||||
clickData.id = id
|
||||
}
|
||||
getData()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<!-- <develop/> -->
|
||||
<HomeHead class="top"> </HomeHead>
|
||||
<div class="h-full relative flex flex-col">
|
||||
<div class="font-600 text-36px mt29px">C/D数据11</div>
|
||||
<div class="q-wrapper flex-1 h957.9px mt30px text-#142142 flex flex-col gap-22px bg-#fff">
|
||||
<div class="data1 flex gap-26px">
|
||||
<div class="cd_plan flex-1 pl32px pr33px pt25px pb10px">
|
||||
<div class="title ml19px font-bold text-24px">FY23 中国域各据点 C/D进度</div>
|
||||
<div class="text-20px mt21px mb17px font-600">发注金额:</div>
|
||||
<div class="">
|
||||
<table
|
||||
style="border: 1px solid #ededed"
|
||||
class="w-full text-center h295px border-spacing-0 text-16px fazhu"
|
||||
>
|
||||
<thead style="background-color: #417bef; color: #fff">
|
||||
<tr class="h41px">
|
||||
<th rowspan="2" colspan="2">据点</th>
|
||||
<th colspan="2">据点</th>
|
||||
<th colspan="2">苏州</th>
|
||||
<th colspan="2">惠州</th>
|
||||
</tr>
|
||||
<tr class="h41px">
|
||||
<th>FY23</th>
|
||||
<th>FY22</th>
|
||||
<th>FY23</th>
|
||||
<th>FY22</th>
|
||||
<th>FY23</th>
|
||||
<th>FY22</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td colspan="2" class="text-#142142">合计</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2" class="text-#142142">C/D</td>
|
||||
<td class="text-#142142">交涉</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-#142142">THEME</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="text-#142142">市况</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="text-#142142">汇率</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
<td>55.40%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="flex h55px">
|
||||
<n-form ref="formRef" inline :label-width="55" :model="formValue" class="!items-center">
|
||||
<n-form-item path="name">
|
||||
<n-select
|
||||
style="width: 148px"
|
||||
v-model:value="formValue.name"
|
||||
placeholder="请选择"
|
||||
:options="options"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item path="age">
|
||||
<n-select
|
||||
style="width: 148px"
|
||||
v-model:value="formValue.age"
|
||||
placeholder="请选择"
|
||||
:options="options"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item path="phone">
|
||||
<n-select
|
||||
style="width: 148px"
|
||||
v-model:value="formValue.phone"
|
||||
placeholder="请选择"
|
||||
:options="options"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item path="phone">
|
||||
<n-select
|
||||
style="width: 148px"
|
||||
v-model:value="formValue.phone1"
|
||||
placeholder="请选择"
|
||||
:options="options"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item>
|
||||
<n-button
|
||||
style="background-color: #417bef; color: #fff"
|
||||
attr-type="button"
|
||||
@click="handleValidateClick"
|
||||
>
|
||||
检索
|
||||
</n-button>
|
||||
</n-form-item>
|
||||
</n-form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="amount flex-1 pl32px pr33px pt27px pb0px">
|
||||
<div class="flex gap-49px">
|
||||
<div class="flex-1">
|
||||
<div class="title ml19px font-bold text-24px">发注金额推移</div>
|
||||
<div class="w330px h199px mt22px">
|
||||
<img src="./images/fazhuje.png" alt="" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<div class="title ml19px font-bold text-24px">CD堆积</div>
|
||||
<div class="w330px h199px mt22px">
|
||||
<img src="./images/cddj.png" alt="" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex-1">
|
||||
<div class="title ml19px font-bold text-24px">发注金额推移</div>
|
||||
<div class="w100% h199px mt22px">
|
||||
<VChart ref="chart1" :option="chartOp1" autoresize />
|
||||
</div>
|
||||
<div class="title ml19px font-bold text-24px !absolute top-0 left-50%">CD堆积</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="h152px mt20px" style="border: 1px solid #d3d3d3">
|
||||
<div class="mt13px ml17px text-16px font-bold">年度重点</div>
|
||||
<div class="h112px ml17px mt10px mr15px text-14px lh-22px overflow-y-auto">
|
||||
年度重点Theme年度重点Theme年度重点Theme年度重点Theme年度重点Theme年度重点The
|
||||
年度重点Theme年度重点Theme年度重点Theme年度重点Theme年度重点Theme年度重点The
|
||||
年度重点Theme年度重点Theme年度重点Theme年度重点Theme年度重点Theme年度重点The
|
||||
年度重点Theme年度重点Theme年度重点Theme年度重点Theme年度重点Theme年度重点The
|
||||
年度重点Theme年度重点Theme年度重点Theme年度重点Theme年度重点Theme年度重
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="data2 flex flex-col">
|
||||
<div class="flex min-h280px">
|
||||
<div class="w148px">
|
||||
<div class="title ml19px font-bold text-24px">按业绩</div>
|
||||
<div class="max-h-236px overflow-y-auto mt100px">
|
||||
<CDSide :treeData="treeData" @clickChliden="handleChild"></CDSide>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ml24px w485px">
|
||||
<div class="ml19px font-bold text-24px">当年度</div>
|
||||
<table
|
||||
class="dangnian w485px text-center mt23px text-18px border-spacing-0 overflow-auto min-h-100px"
|
||||
>
|
||||
<thead style="background-color: #417bef; color: #fff; height: 42px">
|
||||
<tr class="h41px">
|
||||
<th colspan="4">FY2023</th>
|
||||
</tr>
|
||||
<tr class="h35px">
|
||||
<th>供方</th>
|
||||
<th>发注金额</th>
|
||||
<th>交涉</th>
|
||||
<th>Theme</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="i in toYearData" key="i" class="!h35px text-16px">
|
||||
<td>{{ i.supplierName }}</td>
|
||||
<td>{{ i.publishAmount }}</td>
|
||||
<td>{{ i.negAmount }}</td>
|
||||
<td>{{ i.themeRate }}%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="ml89px flex-1">
|
||||
<div class="title ml19px font-bold text-24px">历史数据</div>
|
||||
|
||||
<div class="flex">
|
||||
<table
|
||||
class="history w-full text-center mt23px text-18px border-spacing-0 overflow-auto"
|
||||
>
|
||||
<thead style="background-color: #417bef; color: #fff; height: 42px">
|
||||
<tr class="h41px">
|
||||
<th colspan="3">FY2023</th>
|
||||
</tr>
|
||||
<tr class="h41px">
|
||||
<th>发注</th>
|
||||
<th>交涉</th>
|
||||
<th>Theme</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="i in hisData['2023']" key="i" class="!h35px text-16px">
|
||||
<td>{{ i.publishAmount }}</td>
|
||||
<td>{{ i.negAmount }}</td>
|
||||
<td>{{ i.themeRate }}%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table
|
||||
class="history w-full text-center mt23px text-18px border-spacing-0 overflow-auto"
|
||||
>
|
||||
<thead style="background-color: #417bef; color: #fff; height: 42px">
|
||||
<tr class="h41px">
|
||||
<th colspan="3">FY2022</th>
|
||||
</tr>
|
||||
<tr class="h41px">
|
||||
<th>发注</th>
|
||||
<th>交涉</th>
|
||||
<th>Theme</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="i in hisData['2022']" key="i" class="!h35px text-16px">
|
||||
<td>{{ i.publishAmount }}</td>
|
||||
<td>{{ i.negAmount }}</td>
|
||||
<td>{{ i.themeRate }}%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex gap-101px mt29px">
|
||||
<div class="w634px h243px">
|
||||
<VChart ref="chartRef1" :option="chartOption1" autoresize />
|
||||
</div>
|
||||
<div class="w634px h243px">
|
||||
<VChart ref="chartRef2" :option="chartOption2" autoresize />
|
||||
<div class="w634px pl30px h30px">
|
||||
<el-radio-group v-model="radioss" @change="handleChange">
|
||||
<el-radio :label="2020">FY2020</el-radio>
|
||||
<el-radio :label="2021"> FY2021</el-radio>
|
||||
<el-radio :label="2022">FY2022</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</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)"
|
||||
>
|
||||
<img src="@/assets/images/chah.png" />
|
||||
<br />
|
||||
<div class="text-#5683DB text-36px">【做成中,敬请期待】</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
.top {
|
||||
position: absolute;
|
||||
right: 30px;
|
||||
top: -92px;
|
||||
}
|
||||
|
||||
.fazhu {
|
||||
td {
|
||||
border: 1px solid #e0e0e0;
|
||||
color: #808696;
|
||||
}
|
||||
}
|
||||
|
||||
.dangnian {
|
||||
td {
|
||||
border: 1px solid #e0e0e0;
|
||||
color: #808696;
|
||||
}
|
||||
}
|
||||
|
||||
.history {
|
||||
td {
|
||||
border: 1px solid #e0e0e0;
|
||||
color: #808696;
|
||||
}
|
||||
}
|
||||
|
||||
.menu {
|
||||
position: absolute;
|
||||
background: #fff;
|
||||
border: 1px solid #333;
|
||||
}
|
||||
|
||||
.menu li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.fade-enter-active,
|
||||
.fade-leave-active {
|
||||
transition: opacity 0.5s;
|
||||
}
|
||||
|
||||
.fade-enter,
|
||||
.fade-leave-to {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
.q-wrapper {
|
||||
overflow-y: scroll;
|
||||
border-radius: 20px;
|
||||
|
||||
.cd_plan,
|
||||
.amount,
|
||||
.data2 {
|
||||
border: 1px solid #e7ebf5;
|
||||
border-radius: 18px;
|
||||
box-shadow: inset 1px 2px 12px rgba(14, 86, 221, 0.32);
|
||||
}
|
||||
|
||||
.data2 {
|
||||
// height: 600.9px;
|
||||
padding: 28px;
|
||||
}
|
||||
|
||||
.title {
|
||||
position: relative;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
width: 8px;
|
||||
height: 30px;
|
||||
background-color: #003ab5;
|
||||
position: absolute;
|
||||
left: -15px;
|
||||
top: -3px;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,270 @@
|
|||
import { color, type EChartsOption } from 'echarts'
|
||||
|
||||
//数字转千分位
|
||||
export function formatNum(num: any) {
|
||||
const n = String(num).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')
|
||||
return n
|
||||
}
|
||||
|
||||
export function totalPieCharData(arr: any = [], colorList: any = {}) {
|
||||
// const color: any = []
|
||||
// const data = arr.map((item: any) => {
|
||||
// color.push(colorList[item.moduleCode])
|
||||
// return {
|
||||
// name: item.moduleName,
|
||||
// value: item.visitCount,
|
||||
// _code: item.moduleCode
|
||||
// }
|
||||
// })
|
||||
const option: EChartsOption = {
|
||||
tooltip: {
|
||||
// formatter: '{b} : {c}百万 ({d}%)',
|
||||
// formatter: '{b} : {c} ({d}%)',
|
||||
formatter: function (params: any) {
|
||||
return (
|
||||
params.data.name +
|
||||
' : ' +
|
||||
formatNum(params.data.value) +
|
||||
'\n' +
|
||||
'(' +
|
||||
params.percent +
|
||||
'%' +
|
||||
')'
|
||||
)
|
||||
},
|
||||
trigger: 'item'
|
||||
},
|
||||
legend: {
|
||||
show: false,
|
||||
// top: '5%',
|
||||
left: 'center',
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
color: '#fff'
|
||||
}
|
||||
},
|
||||
graphic: {
|
||||
type: 'text',
|
||||
left: 'center',
|
||||
top: 'center',
|
||||
style: {
|
||||
text:
|
||||
'总计' + //圆饼中心显示数据,这里是显示得总数
|
||||
'\n' +
|
||||
formatNum(222299939.23),
|
||||
fill: '#fff',
|
||||
fontSize: 14,
|
||||
width: 30,
|
||||
height: 30,
|
||||
textAlign: 'center'
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
containLabel: true
|
||||
},
|
||||
series: [
|
||||
{
|
||||
// name: 'Access',
|
||||
type: 'pie',
|
||||
radius: ['40%', '70%'],
|
||||
avoidLabelOverlap: false,
|
||||
label: {
|
||||
show: true,
|
||||
color: '#fff',
|
||||
fontSize: 12,
|
||||
formatter: '{b} ({d}%)'
|
||||
// position: 'center'
|
||||
},
|
||||
// emphasis: {
|
||||
// label: {
|
||||
// show: true,
|
||||
// fontSize: 40,
|
||||
// fontWeight: 'bold',
|
||||
// color: '#fff'
|
||||
// }
|
||||
// },
|
||||
// labelLine: {
|
||||
// show: true
|
||||
// },
|
||||
data: []
|
||||
}
|
||||
]
|
||||
}
|
||||
return option
|
||||
}
|
||||
|
||||
export function totalBarCharData(params: any = {}) {
|
||||
const option = {
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: {
|
||||
type: 'cross',
|
||||
crossStyle: {
|
||||
color: '#999'
|
||||
}
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
// type: 'scroll',
|
||||
data: ['Evaporation', 'Precipitation', 'Temperature'],
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
color: '#fff'
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
left: '7%',
|
||||
right: '4%',
|
||||
bottom: '3%',
|
||||
containLabel: true
|
||||
},
|
||||
xAxis: [
|
||||
{
|
||||
type: 'category',
|
||||
// data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
||||
data: [],
|
||||
axisPointer: {
|
||||
type: 'shadow'
|
||||
},
|
||||
axisLabel: {
|
||||
color: '#fff'
|
||||
}
|
||||
}
|
||||
],
|
||||
// graphic: {
|
||||
// type: 'text',
|
||||
// left: '0',
|
||||
// top: 'center',
|
||||
// rotation: 90,
|
||||
// style: {
|
||||
// text: '百万元',
|
||||
// fill: '#fff',
|
||||
// fontSize: 14,
|
||||
// textAlign: 'center'
|
||||
// }
|
||||
// },
|
||||
yAxis: [
|
||||
{
|
||||
type: 'value',
|
||||
name: '百万元',
|
||||
// min: 0,
|
||||
// max: 250,
|
||||
// interval: 50,
|
||||
axisLabel: {
|
||||
formatter: '{value}',
|
||||
color: '#fff'
|
||||
},
|
||||
nameTextStyle: {
|
||||
color: '#fff',
|
||||
align: 'right',
|
||||
padding: [0, 8, 0, 0]
|
||||
},
|
||||
// nameRotate: 90,
|
||||
// nameTruncate: {
|
||||
// maxWidth: 80,
|
||||
// ellipsis: '...'
|
||||
// },
|
||||
// nameLocation: 'left',
|
||||
// nameGap: 50,
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#1f78af',
|
||||
width: 2 //y轴宽度,这里是为了突出显示加上的
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'value',
|
||||
// name: 'Temperature',
|
||||
// min: 0,
|
||||
// max: 25,
|
||||
// interval: 5,
|
||||
axisLabel: {
|
||||
formatter: '{value}',
|
||||
color: '#fff'
|
||||
}
|
||||
}
|
||||
],
|
||||
series: []
|
||||
}
|
||||
|
||||
return option
|
||||
}
|
||||
|
||||
export function disBarCharData(params: any = {}) {
|
||||
const option = {
|
||||
minBusSeeds: '',
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: {
|
||||
// Use axis to trigger tooltip
|
||||
type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
left: 'center',
|
||||
right: 'center',
|
||||
type: 'scroll',
|
||||
pageIconInactiveColor: '#aaa',
|
||||
pageIconColor: '#fff',
|
||||
pageTextStyle: {
|
||||
color: '#fff'
|
||||
},
|
||||
data: [],
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
color: '#fff'
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
left: '6%',
|
||||
right: '4%',
|
||||
bottom: '3%',
|
||||
containLabel: true
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
name: '百万元',
|
||||
axisLabel: {
|
||||
color: '#fff'
|
||||
},
|
||||
nameTextStyle: {
|
||||
color: '#fff',
|
||||
align: 'right',
|
||||
padding: [0, 8, 0, 0]
|
||||
}
|
||||
// nameRotate: 90,
|
||||
// nameTruncate: {
|
||||
// maxWidth: 80,
|
||||
// ellipsis: '...'
|
||||
// },
|
||||
// nameLocation: 'end'
|
||||
// nameGap: 50
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
// data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
||||
data: [],
|
||||
axisLabel: {
|
||||
color: '#fff'
|
||||
}
|
||||
},
|
||||
series: []
|
||||
// series: [
|
||||
// {
|
||||
// name: 'Direct',
|
||||
// type: 'bar',
|
||||
// stack: 'total',
|
||||
// label: {
|
||||
// show: true
|
||||
// },
|
||||
// emphasis: {
|
||||
// focus: 'series'
|
||||
// },
|
||||
// data: [320, 302, 301, 334, 390, 330, 320]
|
||||
// },
|
||||
// ]
|
||||
}
|
||||
|
||||
return option
|
||||
}
|
||||
|
After Width: | Height: | Size: 520 KiB |
|
After Width: | Height: | Size: 620 KiB |
|
After Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 632 B |
|
After Width: | Height: | Size: 786 B |
|
After Width: | Height: | Size: 3.2 MiB |
|
After Width: | Height: | Size: 886 KiB |
|
After Width: | Height: | Size: 938 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 211 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
|
@ -69,6 +69,7 @@ const getCsrSupplier = () => {
|
|||
}
|
||||
|
||||
const csrSupplierList = ref<any>([])
|
||||
// const selMonth = ref((new Date().getMonth() + 1).toString())
|
||||
const selMonth = ref('')
|
||||
const getCsrSupplierList = (index?: any) => {
|
||||
const _m = +months[index]
|
||||
|
|
@ -332,7 +333,9 @@ getCsrSupplierTaskInfo()
|
|||
</div>
|
||||
<div class="cards">
|
||||
<div class="cards_title relative">
|
||||
未提交供应商明细({{ +selMonth < 4 ? +query.year + 1 : query.year }}年{{ selMonth }}月)
|
||||
未提交供应商明细({{ selMonth && +selMonth < 4 ? +query.year + 1 : query.year }}年{{
|
||||
selMonth
|
||||
}}{{ selMonth ? '月' : '' }})
|
||||
</div>
|
||||
<div class="absolute top-24px !text-18px right-20px pt30px text-#4E7EE8">
|
||||
<span class="text-#ababab">更新时间:{{ updateTime }}</span>
|
||||
|
|
|
|||
|
|
@ -148,11 +148,11 @@ function getFileNameFromUrl(url: string) {
|
|||
}
|
||||
|
||||
const goModule = (item, type) => {
|
||||
const { moduleCode, id } = item
|
||||
const { moduleCode, id, cateId } = item
|
||||
const { modulePath, path } = codePath[moduleCode]
|
||||
if (modulePath) {
|
||||
if (type === 'module') {
|
||||
push(modulePath)
|
||||
moduleCode === 'App_Database' ? push(modulePath + `?id=${cateId}`) : push(modulePath)
|
||||
} else {
|
||||
push(path + id)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import { NModal, NPopover } from 'naive-ui'
|
|||
import { useUserStore } from '@/stores/modules/user'
|
||||
import Searchs from '@/components/search.vue'
|
||||
import { report, treeDbList } from '@/api/daikin/base'
|
||||
// import axios from 'axios'
|
||||
useTitle('大金中国调达本部 HOMEPAGE')
|
||||
const { push } = useRouter()
|
||||
const store = useUserStore()
|
||||
|
|
@ -69,7 +70,8 @@ const Menus = ref([
|
|||
{
|
||||
key: 'YCWZ',
|
||||
name: '调达本部才望子',
|
||||
link: 'http://172.31.119.37/scripts/cbgrn/grn.exe/portal/index'
|
||||
isClick: true
|
||||
// link: 'http://172.31.119.37/scripts/cbgrn/grn.exe/portal/index'
|
||||
},
|
||||
{
|
||||
key: 'GCDB',
|
||||
|
|
@ -166,6 +168,10 @@ watchEffect(() => {
|
|||
}, 0)
|
||||
})
|
||||
function goChild(menu: any) {
|
||||
if (menu.isClick) {
|
||||
goUrl()
|
||||
return
|
||||
}
|
||||
activeItem = menu.key
|
||||
if (menu.key === 'CODE') {
|
||||
shorm.value = true
|
||||
|
|
@ -176,6 +182,15 @@ function goChild(menu: any) {
|
|||
push({ name: menu.key, query: menu.params || {} })
|
||||
}
|
||||
}
|
||||
|
||||
const goUrl = () => {
|
||||
const url = store.user?.cwzLoginUrl
|
||||
const doman = url ? url.split('?')?.shift() : ''
|
||||
if (!doman) return
|
||||
fetch(url).then((res) => {
|
||||
window.open(doman, '_blank')
|
||||
})
|
||||
}
|
||||
var activeItem = 0
|
||||
</script>
|
||||
|
||||
|
|
@ -288,7 +303,12 @@ var activeItem = 0
|
|||
<div class="p20px w270px rd-20px b-4px bg-#fff/4 b-4px b-solid b-#fff/23 text-14px relative">
|
||||
<!-- href="http://106.14.114.146/scripts/cbgrn/grn.exe" -->
|
||||
<!-- href="http://172.31.119.37/scripts/cbgrn/grn.exe/portal/index" -->
|
||||
<a :href="store.user?.cwzLoginUrl" target="_blank" class="no-underline text-#fff">
|
||||
<div
|
||||
@click="goUrl"
|
||||
:href="store.user?.cwzLoginUrl"
|
||||
target="_blank"
|
||||
class="no-underline text-#fff"
|
||||
>
|
||||
<div class="flex items-center text-18px hover:underline">
|
||||
<img src="@/assets/images/icon-book.svg" class="w22px h22px mr10px" />
|
||||
个人日程
|
||||
|
|
@ -301,7 +321,7 @@ var activeItem = 0
|
|||
src="@/assets/images/zhulj@2x.png"
|
||||
class="absolute w22px h22px mr10px top--15px right--20px"
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="mt10px ml-30px opacity-70" @click="(e) => e.stopPropagation()">
|
||||
请点击上方链接登录cybouzu
|
||||
</div>
|
||||
|
|
|
|||