最终效果如下
QQ202472-84829
在template中
<div class="card-tab3">
<card-view class="card height_3" title="碳金融质押" type="data" :data="data.config1.data" :showtitle="true" titleType="1"
:isLoading="data.baseLoading">
<div class="innerTitle1">
<div>
合计融资
<span>{{ data.zy }}</span>
万元
</div>
</div>
<KScrollTable :config="data.config1" :auto="data.config1.data.length > 3 ? true : false"
:style="{ height: '90%', marginTop: '2%', }">
</KScrollTable>
</card-view>
<card-view class="card height_4" title="碳金融回购" type="data" :data="data.config2.data" :showtitle="true" titleType="1"
:isLoading="data.baseLoading">
<div class="innerTitle2">
<div>
<div>
合计融资
<span>{{ data.hg }}</span>
万元
</div>
</div>
</div>
<KScrollTable :config="data.config2" :auto="data.config2.data.length > 3 ? true : false"
:style="{ height: '90%', marginTop: '2%', }">
</KScrollTable>
</card-view>
</div>
在<script lang="ts" setup>中
import KScrollTable from '@/components/KScrollTable.vue';
import { KScrollTableConfig } from "@/types/components";
import cardView from "@/components/card.vue";
const data: {
config1: KScrollTableConfig;
config2: KScrollTableConfig;
} = reactive({
config1: {
header: [
{
title: "控排企业/投资机构",
key: "enterprises",
class: "t1",
align: 'center',
width: "2.5fr"
},
{
title: "金融服务机构",
key: "financialServiceInstitutions",
align: 'center',
width: "2fr"
},
{
title: "业务类型",
key: "businessType",
align: 'center',
width: "1.5fr"
},
{
title: "融资金额(万元)",
key: "financingAmount",
align: 'center',
width: "2fr"
},
],
data: [
],
},
config2: {
header: [
{
title: "控排企业/投资机构",
key: "enterprises",
class: "t1",
align: 'center',
width: "2.5fr"
},
{
title: "金融服务机构",
key: "financialServiceInstitutions",
align: 'center',
width: "2fr"
},
{
title: "业务类型",
key: "businessType",
align: 'center',
width: "1.5fr"
},
{
title: "融资金额(万元)",
key: "financingAmount",
align: 'center',
width: "2fr"
},
],
data: [
],
},
});
function initCard4() {
axios.get('./data/carbonFinance_new.json').then((res: any) => {
let datas: any = res.data
console.log('datas', datas)
if (datas && datas.length) {
for (let i = 0; i < datas.length; i++) {
const element = datas[i];
if (element.type == "质押") {
data.zy = element.totalAmount
data.config1.data = element.data.map((item: any) => {
return {
businessType: item.businessType ? item.businessType : '暂无',
enterprises: item.enterprises ? item.enterprises : item.enterprises,
financialServiceInstitutions: item.financialServiceInstitutions ? item.financialServiceInstitutions : item.financialServiceInstitutions,
financingAmount: item.financingAmount ? item.financingAmount : item.financingAmount,
}
})
} else {
data.hg = element.totalAmount
data.config2.data = element.data.map((item: any, index: any) => {
return {
index: index += 1,
businessType: item.businessType ? item.businessType : '暂无',
enterprises: item.enterprises ? item.enterprises : item.enterprises,
financialServiceInstitutions: item.financialServiceInstitutions ? item.financialServiceInstitutions : item.financialServiceInstitutions,
financingAmount: item.financingAmount ? item.financingAmount : item.financingAmount,
}
})
}
}
}
})
}
initCard4()
css中(可能不全 有全局的样式)
.card-tab3 {
display: flex;
flex-direction: column;
height: 100%;
.yearBox {
width: 100px;
height: 25px;
line-height: 25px;
text-align: center;
}
.innerTitle1 {
background: url("@/assets/images/innertitle1.png") no-repeat;
background-size: 100% 100%;
width: 80%;
height: 12%;
margin-left: 10%;
display: flex;
justify-content: center;
align-items: center;
div {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 14px;
color: #D7FEF9;
letter-spacing: 2px;
span:nth-child(1) {
/* font-size: 0.0625rem; */
/* color: #9AF0E7; */
/* width: 134px; */
/* height: 29px; */
font-family: DINAlternate, DINAlternate;
font-weight: 400;
font-size: 20px;
color: #FFFFFF;
line-height: 22px;
/* text-align: left; */
font-style: normal;
}
span:nth-child(2) {
font-family: dinAlternateBold;
font-weight: bold;
font-size: 24px;
color: #9AF0E7;
}
}
}
.jyinfo {
color: white;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.infotitle1 {
width: 100%;
height: 30%;
display: flex;
flex-direction: row;
background: url("@/assets/images/titles1.png") no-repeat;
background-size: 100% 100%;
.commonsty {
width: 33.3%;
//height: 100%;
//background-color: #133450;
margin: 0 5px 0 5px;
display: flex;
align-items: center;
justify-content: center;
color: #00DAD5;
font-size: 14px;
font-weight: 600;
}
}
.infotitle2 {
width: 100%;
height: 30%;
display: flex;
flex-direction: row;
background: url("@/assets/images/titles2.png") no-repeat;
background-size: 100% 100%;
.commonsty {
width: 33.3%;
// height: 60%;
//background-color: #133450;
margin: 0 5px 0 5px;
display: flex;
align-items: center;
justify-content: center;
color: #4DA8F6;
font-size: 14px;
font-weight: 600;
}
}
.infocontext {
width: 100%;
height: 100%;
// height: 180px;
overflow: scroll;
display: flex;
flex-direction: column;
// margin-top: 5px;
.item {
display: flex;
flex-direction: row;
width: 100%;
height: 30%;
.commonsty {
width: 33.3%;
// height: 60%;
//background-color: black;
margin: 7px 7px;
display: flex;
align-items: center;
justify-content: center;
font-weight: 300;
font-size: 12px;
color: #FFFFFF;
}
}
.active {
background-color: #0e2849;
}
}
}
.innerTitle2 {
background: url("@/assets/images/innertitle2.png") no-repeat;
background-size: 100% 100%;
width: 80%;
height: 12%;
margin-left: 10%;
display: flex;
justify-content: center;
align-items: center;
div {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 14px;
color: #D7FEF9;
letter-spacing: 2px;
span:nth-child(1) {
/* font-size: 0.0625rem; */
/* color: #9AF0E7; */
/* width: 134px; */
/* height: 29px; */
font-family: DINAlternate, DINAlternate;
font-weight: 400;
font-size: 20px;
color: #FFFFFF;
line-height: 22px;
/* text-align: left; */
font-style: normal;
}
span:nth-child(2) {
font-family: dinAlternateBold;
font-weight: bold;
font-size: 24px;
color: #9AF0E7;
}
}
}
.card {}
.cjqk {
color: white;
height: 100%;
width: 100%;
//background-color: #3375F1;
display: flex;
flex-direction: column;
align-items: center;
//margin-top: 5vh;
.loadingBox {
position: absolute;
left: 0;
top: 0;
width: 100%;
bottom: 0;
min-height: 100px;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.ljcje {
width: 90%;
height: 150px;
background: url("@/assets/images/ljcje.png") no-repeat;
background-size: 100% 100%;
display: flex;
flex-direction: column;
align-items: center;
// justify-content: space-around;
position: relative;
.ljcjetitle {
position: absolute;
top: 10px;
color: #FFFFFF;
letter-spacing: 1px;
font-family: MicrosoftYaHei;
font-size: 20px;
line-height: 29px;
font-style: normal;
}
.ljcjeNum {
display: flex;
position: absolute;
top: 40%;
align-items: flex-end;
.item {
width: 45px;
height: 60px;
background: rgb(14 29 32 / 30%);
box-shadow: inset 0px 0px 10px 0px #60C8ED;
border-radius: 10px;
border: 1px solid #60C8ED;
margin-right: 10px;
line-height: 60px;
text-align: center;
span {
font-weight: bold;
font-size: 36px;
color: #FFFFFF;
font-family: dinAlternateBold;
}
}
.item_ {
width: 15px;
height: 10px;
/* background: rgba(14, 29, 32, 0.3); */
/* -webkit-box-shadow: inset 0px 0px 0.052083rem 0px #60C8ED; */
/* box-shadow: inset 0px 0px 0.052083rem 0px #60C8ED; */
/* border-radius: 0.03125rem; */
/* border: 1px solid #60C8ED; */
/* margin-right: 0.036458rem; */
line-height: 10px;
text-align: center;
font-size: 12px;
font-weight: 900;
}
.dw {
font-family: PingFangSC, PingFang SC;
// font-weight: 600;
font-size: 12px;
color: #D7FEF9;
}
}
}
.ljcjl {
width: 90%;
height: 150px;
background: url("@/assets/images/ljcjl.png") no-repeat;
background-size: 100% 100%;
margin-top: 20px;
display: flex;
flex-direction: column;
align-items: center;
//justify-content: space-around;
position: relative;
.ljcjltitle {
position: absolute;
top: 10px;
color: #FFFFFF;
letter-spacing: 1px;
font-family: MicrosoftYaHei;
font-size: 20px;
line-height: 29px;
font-style: normal;
}
.ljcjlNum {
display: flex;
position: absolute;
top: 40%;
align-items: flex-end;
.item {
width: 45px;
height: 60px;
background: rgb(14 29 32 / 30%);
box-shadow: inset 0px 0px 10px 0px #7AD5C7;
border-radius: 10px;
border: 1px solid #7AD5C7;
margin-right: 10px;
line-height: 60px;
text-align: center;
span {
font-weight: bold;
font-size: 36px;
color: #FFFFFF;
font-family: dinAlternateBold;
}
}
.item_ {
width: 15px;
height: 10px;
/* background: rgba(14, 29, 32, 0.3); */
/* -webkit-box-shadow: inset 0px 0px 0.052083rem 0px #60C8ED; */
/* box-shadow: inset 0px 0px 0.052083rem 0px #60C8ED; */
/* border-radius: 0.03125rem; */
/* border: 1px solid #60C8ED; */
/* margin-right: 0.036458rem; */
line-height: 10px;
text-align: center;
font-size: 12px;
font-weight: 900;
}
.dw {
font-family: PingFangSC, PingFang SC;
// font-weight: 600;
font-size: 12px;
color: #D7FEF9;
}
}
}
}
.cjr {
color: white;
height: 100%;
width: 100%;
//background-color: #3375F1;
display: flex;
flex-direction: row;
align-items: center;
margin-top: 6vh;
.tjrItm {
width: 20px;
height: 300px;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
margin: 0 5px;
font-family: dinAlternateBold;
font-weight: bold;
font-size: 22px;
letter-spacing: 3px;
writing-mode: vertical-rl;
}
.item {
background: url("@/assets/images/cjr.png") no-repeat;
background-size: 100% 100%;
width: 360px;
height: 330px;
// margin-right: 10px;
position: relative;
display: flex;
flex-direction: column;
align-items: center;
// .titletjr {
// font-size: 24px;
// writing-mode: vertical-rl;
// letter-spacing: 2px;
// }
div:nth-child(1) {
position: absolute;
top: 70px;
font-family: dinAlternateBold;
font-weight: bold;
font-size: 22px;
color: #D7FEF9;
letter-spacing: 1px;
}
div:nth-child(2) {
position: absolute;
top: 155px;
span {
font-family: dinAlternateBold;
font-weight: bold;
font-size: 22px;
}
}
div:nth-child(3) {
position: absolute;
top: 230px;
span {
font-family: dinAlternateBold;
font-weight: bold;
font-size: 22px;
}
}
}
}
.cj {
color: white;
height: 100%;
width: 100%;
//background-color: #3375F1;
display: flex;
flex-direction: row;
align-items: center;
margin-top: 3vh;
.title {
position: absolute;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 18px;
color: #FFFFFF;
line-height: 0.15625rem;
text-align: justify;
font-style: normal;
top: 54%;
left: 37%;
}
.cje {
background: url("@/assets/images/cje.png") no-repeat;
background-size: 100% 100%;
width: 50%;
height: 400px;
// margin-right: 10px;
position: relative;
display: flex;
flex-direction: column;
align-items: center;
.items {
margin-top: 30%;
margin-left: 25%;
/* width: 119px; */
/* height: 42px; */
font-family: Helvetica, Helvetica;
/* font-weight: bold; */
font-size: 23px;
color: #FFFFFF;
line-height: 36px;
/* text-align: left; */
font-style: normal;
}
span {
margin-left: 25%;
}
}
.cjl {
background: url("@/assets/images/cjl.png") no-repeat;
background-size: 100% 100%;
width: 50%;
height: 400px;
// margin-right: 10px;
position: relative;
display: flex;
flex-direction: column;
align-items: center;
.items {
margin-top: 30%;
margin-right: 25%;
/* width: 119px; */
/* height: 42px; */
font-family: Helvetica, Helvetica;
/* font-weight: bold; */
font-size: 23px;
color: #FFFFFF;
line-height: 36px;
/* text-align: left; */
font-style: normal;
}
span {
margin-right: 25%;
}
}
}
&>div:nth-child(1) {
display: flex;
}
&>div:nth-child(2) {
flex: 1;
}
}
.height_3 {
height: getHeight(400px, 838px);
}
.height_4 {
height: getHeight(400px, 838px);
}
KScrollTable.vue
<template>
<div class="swiper-table">
<div class="header" :style="{ 'grid-template-columns': getWidth }">
<div class="header-border top"></div>
<div class="header-border bottom"></div>
<span v-for="(item, index) in config.header" :key="index" :title="item.title"
:style="{ 'text-align': getAlign(item.align) }">
{{ item.title }}
</span>
</div>
<div class="body">
<ul class="fixed_ul" v-if="config?.fixedData?.length">
<li class="li-child" v-for="(item, index) in config?.fixedData" :key="index"
:style="{ 'grid-template-columns': getWidth, backgroundColor: item.__k_color }" @click="rowClick(item)">
<span v-for="(j, k) in config.header" :class="j?.class" :key="k" :style="{ 'text-align': getAlign(j.align) }">
<slot :name="j?.['key']" :value="item"><span :title="item?.[j?.['key']]">{{ item?.[j?.['key']] }}</span>
</slot>
</span>
</li>
</ul>
<ul class="scroll_ul" ref="tableUl" :class="{ marquee_top: state.animate}" @mouseenter="onEnter" @mouseleave="onLeave">
<li class="li-child" v-for="(item, index) in state.list" :key="index" @click="rowClick(item)"
:style="{ 'grid-template-columns': getWidth, backgroundColor: item.__k_color }">
<span v-for="(j, k) in config.header" :class="j?.class" :key="k" :style="{ 'text-align': getAlign(j.align) }">
<slot :name="j?.['key']" :value="{...item,index:index+1}"><span :title="item?.[j?.['key']]">{{ item?.[j?.['key']] }}</span>
</slot>
</span>
</li>
</ul>
</div>
</div>
</template>
<script lang="ts" setup>
import { defineProps, onUnmounted, ref, reactive, onMounted, nextTick, computed, watch } from "vue";
import type {KScrollTableConfig} from "@/types/components";
const props = defineProps<{
config: KScrollTableConfig;
rowClick?:(item:any)=>void;
auto?: boolean
}>()
const state: {
animate: boolean;
list: any[];
colorArr: string[];
liHeight: number;
isAuto: boolean;
} = reactive({
isAuto: false,
animate: false,
list: [],
// colorArr: ["rgba(4, 122, 244, 0)", "rgba(4, 122, 244, 0.1)"],
colorArr: ["rgba(11, 36, 66, 1)", "rgba(2, 27, 55, 1)"],
liHeight: 0
})
const tableUl: any = ref(null)
let timer: any = null
const getWidth = computed(() => {
let widthStr = ""
props.config.header.forEach((item) => {
widthStr += " "
widthStr += item.width ?? 'auto' + ' '
})
//console.log(widthStr)
return widthStr
})
function getAlign(align: 'left' | 'right' | 'center' | undefined | null): 'left' | 'right' | 'center' {
if (align && ['left', 'right', 'center'].indexOf(align) != -1) {
return align
}
return 'left'
}
function showMarquee() {
state.animate = true;
let bacColor = state.list[state.list.length - 1]?.__k_color == state.colorArr[0] ? state.colorArr[1] : state.colorArr[0]
state.list.push({
...state.list[0],
__k_color: bacColor
});
setTimeout(() => {
state.list.shift();
state.animate = false
}, 1000)
}
function onEnter() {
if (timer&&state.isAuto) {
clearInterval(timer)
}
}
function onLeave() {
isScroll()
}
function rowClick(item:any){
if(props.rowClick){
props.rowClick(item)
}
}
function isScroll() {
if (state.isAuto) {
if (timer) {
clearInterval(timer)
}
timer = setInterval(showMarquee, 2000);
}
}
watch([props, tableUl], () => {
if (props && tableUl.value) {
state.list = props.config.data.map((item, index) => {
return {
...item,
__k_color: state.colorArr[(index % 2)]
}
})
nextTick(() => {
const bodyHeight = tableUl.value.offsetHeight
if (!tableUl.value.children?.length) {
return
}
state.liHeight = tableUl.value.children[0].offsetHeight
//console.dir(state.liHeight)
if (props.auto && bodyHeight <= props.config.data.length * state.liHeight) {
state.isAuto = true
// 动态轮播
isScroll()
}
})
}
},
{
immediate: true
})
onUnmounted(() => {
if (timer) {
clearInterval(timer)
}
})
</script>
<style lang="scss" scoped>
.swiper-table {
color: #fff;
height: 100%;
display: flex;
flex-direction: column;
width: 100%;
.header {
display: grid;
height: 50px;
background-color: rgba(8, 106, 210, 0);
flex-shrink: 0;
position: relative;
background: url("@/assets/images/titles1.png") no-repeat;
background-size: 100% 100%;
span {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
font-size: 14px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #00DAD5;
line-height: 50px;
padding: 0px 5px;
}
.header-border {
display: inline-block;
width: 100%;
height: 2px;
position: absolute;
}
.header-border.top {
top: 0;
//background: linear-gradient(to right, #047AF4 5px, rgba(4, 122, 244, 0.5) 5px, rgba(4, 122, 244, 0.5) calc(50% - 10px), #047AF4 calc(50% - 10px), #047AF4 50%, rgba(4, 122, 244, 0.5)50%, rgba(4, 122, 244, 0.5) calc(50% + 3px), #047AF4 calc(50% + 3px), #047AF4 calc(50% + 5px), rgba(4, 122, 244, 0.5) calc(50% + 5px), rgba(4, 122, 244, 0.5) calc(100% - 10px), #047AF4 calc(100% - 10px), #047AF4 100%);
}
.header-border.bottom {
bottom: 0;
//background: linear-gradient(to right, rgba(4, 122, 244, 0.5) 5px, rgba(4, 122, 244, 0.25) 5px, rgba(4, 122, 244, 0.25) calc(50% - 10px), rgba(4, 122, 244, 0.5) calc(50% - 10px), rgba(4, 122, 244, 0.5) 50%, rgba(4, 122, 244, 0.25)50%, rgba(4, 122, 244, 0.25) calc(50% + 3px), rgba(4, 122, 244, 0.5) calc(50% + 3px), rgba(4, 122, 244, 0.5) calc(50% + 5px), rgba(4, 122, 244, 0.25) calc(50% + 5px), rgba(4, 122, 244, 0.25) calc(100% - 10px), rgba(4, 122, 244, 0.5) calc(100% - 10px), rgba(4, 122, 244, 0.5) 100%);
}
}
.body {
flex: 1;
height: 0;
overflow: hidden;
display: flex;
flex-direction: column;
.marquee_top {
transition: all 0.5s;
li:nth-child(1){
transition: all 0.5s;
height: 0 !important;
}
}
.fixed_ul {
flex-shrink: 0;
z-index: 2;
}
.scroll_ul {
flex: 1;
}
ul {
margin: 0;
padding: 0;
position: relative;
li {
display: grid;
height: 45px;
line-height: 45px;
span {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
line-height: inherit;
padding: 0px 5px;
}
}
}
}
}
</style>
components.ts中
export type KScrollTableConfig = {
header: {
title: string,
key: string;
class?: string;
width?: string;
align?: 'left' | 'right' | 'center';
}[];
data: {
[key: string]: any
}[];
fixedData?: {
[key: string]: any
}[];
}
carbonFinance_new.json(数据)
[
{
"data": [
{
"businessType": "碳质押贷款",
"enterprises": "黄石东贝铸造有限公司",
"financialServiceInstitutions": "民生银行武汉分行",
"financingAmount": 300.00
},
{
"businessType": "碳质押贷款",
"enterprises": "湖北绿色家园材料技术股份有限公司",
"financialServiceInstitutions": "工行银行仙桃支行",
"financingAmount": 3000.00
},
{
"businessType": "碳质押贷款",
"enterprises": "黄石市海富高钙有限公司",
"financialServiceInstitutions": "中国农业银行大治支行",
"financingAmount": 500.00
},
{
"businessType": "碳质押贷款",
"enterprises": "黄石市福星铝业有限公司",
"financialServiceInstitutions": "中国农业银行黄石分行",
"financingAmount": 400.00
},
{
"businessType": "碳质押贷款",
"enterprises": "武汉荣方科技有限公司",
"financialServiceInstitutions": "汉口银行股份有限公司潜江支行",
"financingAmount": 260.00
},
{
"businessType": "碳质押贷款",
"enterprises": "武汉钢铁石化工业气体有限责任公司",
"financialServiceInstitutions": "交通银行股份有限公司武汉青山支行",
"financingAmount": 500.00
},
{
"businessType": "碳质押贷款",
"enterprises": "湖北楚星化工股份有限公司",
"financialServiceInstitutions": "中国进出口银行湖北省分行",
"financingAmount": 60000.00
},
{
"businessType": "碳质押贷款",
"enterprises": "荆门市格林美新材料有限公司",
"financialServiceInstitutions": "中国农业银行股份有限公司荆门分行",
"financingAmount": 2500.00
},
{
"businessType": "碳质押贷款",
"enterprises": "湖北三环车桥有限公司",
"financialServiceInstitutions": "上海浦东发展银行股份有限公司武汉分行",
"financingAmount": 100.00
},
{
"businessType": "碳质押贷款",
"enterprises": "威斯卡特工业(中国)有限公司",
"financialServiceInstitutions": "上海浦东发展银行股份有限公司武汉分行",
"financingAmount": 99.75
},
{
"businessType": "碳质押贷款",
"enterprises": "大冶市华厦铝业有限公司",
"financialServiceInstitutions": "湖北大冶农村商业银行股份有限公司",
"financingAmount": 100.00
},
{
"businessType": "碳质押贷款",
"enterprises": "湖北世纪新峰雷山水泥有限公司",
"financialServiceInstitutions": "汉口银行股份有限公司鄂州分行",
"financingAmount": 500.00
},
{
"businessType": "碳质押贷款",
"enterprises": "湖北华武重工集团有限公司",
"financialServiceInstitutions": "中国银行股份有限公司鄂州分行",
"financingAmount": 1000.00
},
{
"businessType": "碳质押贷款",
"enterprises": "中锰(湖北)科技发展有限公司",
"financialServiceInstitutions": "中国银行股份有限公司三峡分行",
"financingAmount": 1000.00
}
],
"totalAmount": 70359.75,
"type": "质押"
},
{
"data": [
{
"businessType": "碳配额回购",
"enterprises": "广水华鑫冶金工业有限公司",
"financialServiceInstitutions": "中信证券股份有限公司",
"financingAmount": 1024.80
},
{
"businessType": "碳配额回购",
"enterprises": "润海新能源(黄石)有限公司",
"financialServiceInstitutions": "湖北中碳资产管理有限公司",
"financingAmount": 1164.06
},
{
"businessType": "碳配额回购",
"enterprises": "宜都东阳光化成箔有限公司",
"financialServiceInstitutions": "中信证券股份有限公司",
"financingAmount": 785.19
},
{
"businessType": "碳配额回购",
"enterprises": "宜昌东阳光生化制药有限公司",
"financialServiceInstitutions": "中信证券股份有限公司",
"financingAmount": 1495.29
},
{
"businessType": "碳配额回购",
"enterprises": "广水华鑫冶金工业有限公司",
"financialServiceInstitutions": "中信证券股份有限公司",
"financingAmount": 1999.27
},
{
"businessType": "碳配额回购",
"enterprises": "峰碳科技(武汉)有限公司",
"financialServiceInstitutions": "湖北中碳资产管理有限公司",
"financingAmount": 1440.00
},
{
"businessType": "碳配额回购",
"enterprises": "湖北世纪新峰雷山水泥有限公司",
"financialServiceInstitutions": "中信证券股份有限公司",
"financingAmount": 1000.00
},
{
"businessType": "碳配额回购",
"enterprises": "湖北亿钧耀能新材股份公司",
"financialServiceInstitutions": "国泰君安证券股份有限公司",
"financingAmount": 1002.16
},
{
"businessType": "碳配额回购",
"enterprises": "湖北世纪新峰雷山水泥有限公司",
"financialServiceInstitutions": "国泰君安证券股份有限公司",
"financingAmount": 1224.44
},
{
"businessType": "碳配额回购",
"enterprises": "华新水泥股份有限公司",
"financialServiceInstitutions": "中信证券股份有限公司",
"financingAmount": 10000.00
},
{
"businessType": "碳配额回购",
"enterprises": "深圳华碳未来新能源环保科技有限公司",
"financialServiceInstitutions": "东方证券股份有限公司",
"financingAmount": 240.00
},
{
"businessType": "碳配额回购",
"enterprises": "湖北三峡新型建材股份有限公司",
"financialServiceInstitutions": "华泰证券股份有限公司",
"financingAmount": 1300.00
}
],
"totalAmount": 22675.25,
"type": "回购"
}
]