feat: space组件处理

This commit is contained in:
rd
2025-09-04 16:50:20 +08:00
parent 15357b6bc8
commit aaa8a320c8
28 changed files with 417 additions and 423 deletions

View File

@ -18,12 +18,8 @@
</div> </div>
</div> </div>
<div class="usage-info"> <div class="usage-info">
<a-space> <span class="count">{{ cozeInfo.views }}</span>
<span class="count">{{ cozeInfo.views }}</span> <span class="label"> 次使用 </span>
</a-space>
<a-space>
<span class="label"> 次使用 </span>
</a-space>
</div> </div>
</div> </div>
<div class="description-section"> <div class="description-section">

View File

@ -1,7 +1,7 @@
<template> <template>
<view> <view>
<topHeader ref="topHeaderRef" @search="search"></topHeader> <topHeader ref="topHeaderRef" @search="search"></topHeader>
<a-space direction="vertical" class="bg-#fff rounded-8px w-100% py-0 px-20px mb-24px"> <div class="bg-#fff rounded-8px w-100% py-0 px-20px mb-24px">
<div class="title-row"> <div class="title-row">
<span class="title mr-4px">行业词云</span> <span class="title mr-4px">行业词云</span>
<Tooltip> <Tooltip>
@ -39,16 +39,14 @@
@mouseenter="hoverTag = tag" @mouseenter="hoverTag = tag"
@mouseleave="hoverTag = null" @mouseleave="hoverTag = null"
> >
<a-space>
<Tooltip :title="`性价比:${Number(tag.rate * 100)}%`" placement="topLeft"> <Tooltip :title="`性价比:${Number(tag.rate * 100)}%`" placement="topLeft">
<a-space>{{ tag.term }}</a-space> <span>{{ tag.term }}</span>
</Tooltip> </Tooltip>
</a-space>
</a-tag> </a-tag>
</div> </div>
</template> </template>
</div> </div>
</a-space> </div>
</view> </view>
</template> </template>

View File

@ -2,7 +2,7 @@
<view> <view>
<topHeader ref="topHeaderRef" @search="search"></topHeader> <topHeader ref="topHeaderRef" @search="search"></topHeader>
<!-- tabel --> <!-- tabel -->
<a-space direction="vertical" class="bg-#fff rounded-8px w-100% py-0 px-20px mb-24px"> <div class="bg-#fff rounded-8px w-100% py-0 px-20px mb-24px">
<div class="title-row"> <div class="title-row">
<span class="title mr-4px">行业热门话题洞察</span> <span class="title mr-4px">行业热门话题洞察</span>
<Tooltip> <Tooltip>
@ -22,24 +22,24 @@
<NoData /> <NoData />
</template> </template>
<template #hotTitle> <template #hotTitle>
<a-space> <div class="flex items-center">
<span>热度指数</span> <span class="mr-8px">热度指数</span>
<Tooltip> <Tooltip>
<template #title>综合话题出现频次互动数据如点赞收藏评论加权计算的热度得分</template> <template #title>综合话题出现频次互动数据如点赞收藏评论加权计算的热度得分</template>
<icon-question-circle size="14" class="!color-#737478" /> <icon-question-circle size="14" class="!color-#737478" />
</Tooltip> </Tooltip>
</a-space> </div>
</template> </template>
<template #sentimentTitle> <template #sentimentTitle>
<a-space> <div class="flex items-center">
<span>情感倾向</span> <span class="mr-8px">情感倾向</span>
<Tooltip> <Tooltip>
<template #title <template #title
>统计该行业下全部内容的情绪分布选取占比最高的情绪类型作为该话题的整体情感倾向</template >统计该行业下全部内容的情绪分布选取占比最高的情绪类型作为该话题的整体情感倾向</template
> >
<icon-question-circle size="14" class="!color-#737478" /> <icon-question-circle size="14" class="!color-#737478" />
</Tooltip> </Tooltip>
</a-space> </div>
</template> </template>
<template #rank="{ record }"> <template #rank="{ record }">
<img v-if="record.rank == 1" :src="topImages[0]" style="width: 25px; height: 17px" /> <img v-if="record.rank == 1" :src="topImages[0]" style="width: 25px; height: 17px" />
@ -74,7 +74,7 @@
<Button type="primary" ghost @click="gotoDetail(record)">详情</Button> <Button type="primary" ghost @click="gotoDetail(record)">详情</Button>
</template> </template>
</a-table> </a-table>
</a-space> </div>
<Modal <Modal
v-model:open="visible" v-model:open="visible"
unmountOnClose unmountOnClose
@ -87,7 +87,7 @@
<span style="text-align: left; width: 100%">行业热门话题洞察</span> <span style="text-align: left; width: 100%">行业热门话题洞察</span>
</template> </template>
<div> <div>
<a-space direction="vertical"> <Space direction="vertical">
<div class="mb-4px flex items-center"> <div class="mb-4px flex items-center">
<p class="cts !mr-16px flex-shrink-0 w-48px">话题名称</p> <p class="cts !mr-16px flex-shrink-0 w-48px">话题名称</p>
<span class="cts">{{ topicInfo.name }}</span> <span class="cts">{{ topicInfo.name }}</span>
@ -134,7 +134,7 @@
</div> </div>
</div> </div>
</div> </div>
</a-space> </Space>
</div> </div>
<template #footer> <template #footer>
<Button size="large" @click="handleCancel">取消</Button> <Button size="large" @click="handleCancel">取消</Button>
@ -146,8 +146,7 @@
<script setup> <script setup>
import topHeader from './topHeader.vue'; import topHeader from './topHeader.vue';
import { Tooltip } from 'ant-design-vue'; import { Modal, Button, Tooltip,Space } from 'ant-design-vue';
import { Modal, Button } from 'ant-design-vue';
import { ref, computed } from 'vue'; import { ref, computed } from 'vue';
import { fetchIndustriesTree, fetchIndustryTopics, fetchIndustryTopicDetail } from '@/api/all/index'; import { fetchIndustriesTree, fetchIndustryTopics, fetchIndustryTopicDetail } from '@/api/all/index';
import star1 from '@/assets/img/hottranslation/star-fill1.png'; import star1 from '@/assets/img/hottranslation/star-fill1.png';

View File

@ -3,7 +3,7 @@
<view> <view>
<topHeader ref="topHeaderRef" @click="search"></topHeader> <topHeader ref="topHeaderRef" @click="search"></topHeader>
<!-- 重点品牌列表 --> <!-- 重点品牌列表 -->
<a-space <Space
direction="vertical" direction="vertical"
class="bg-#fff rounded-8px w-100% py-0 px-20px mb-24px" class="bg-#fff rounded-8px w-100% py-0 px-20px mb-24px"
> >
@ -28,31 +28,31 @@
<NoData /> <NoData />
</template> </template>
<template #hotTitle> <template #hotTitle>
<a-space> <Space>
<span>热度指数</span> <span>热度指数</span>
<Tooltip> <Tooltip>
<template #title>综合话题出现频次互动数据如点赞收藏评论加权计算的热度得分</template> <template #title>综合话题出现频次互动数据如点赞收藏评论加权计算的热度得分</template>
<icon-question-circle size="14" class="!color-#737478" /> <icon-question-circle size="14" class="!color-#737478" />
</Tooltip> </Tooltip>
</a-space> </Space>
</template> </template>
<template #trendTitle> <template #trendTitle>
<a-space> <Space>
<span>变化幅度</span> <span>变化幅度</span>
<Tooltip> <Tooltip>
<template #title>仅基于品牌出现频次</template> <template #title>仅基于品牌出现频次</template>
<icon-question-circle size="14" class="!color-#737478" /> <icon-question-circle size="14" class="!color-#737478" />
</Tooltip> </Tooltip>
</a-space> </Space>
</template> </template>
<template #volume_rateTitle> <template #volume_rateTitle>
<a-space> <Space>
<span>占总声量比例</span> <span>占总声量比例</span>
<Tooltip> <Tooltip>
<template #title>该品牌在当前周期内被提及的内容量占整个行业内容总量的比例</template> <template #title>该品牌在当前周期内被提及的内容量占整个行业内容总量的比例</template>
<icon-question-circle size="14" class="!color-#737478" /> <icon-question-circle size="14" class="!color-#737478" />
</Tooltip> </Tooltip>
</a-space> </Space>
</template> </template>
<template #rank="{ record }"> <template #rank="{ record }">
<img v-if="record.rank == 1" :src="topImages[0]" style="width: 25px; height: 17px" /> <img v-if="record.rank == 1" :src="topImages[0]" style="width: 25px; height: 17px" />
@ -72,9 +72,9 @@
</template> </template>
<template #volumeRate="{ record }"> <a-statistic :value="record.volume_rate * 100" />% </template> <template #volumeRate="{ record }"> <a-statistic :value="record.volume_rate * 100" />% </template>
</a-table> </a-table>
</a-space> </Space>
<!-- 舆情 & 敏感动态--> <!-- 舆情 & 敏感动态-->
<a-space <Space
direction="vertical" direction="vertical"
class="bg-#fff rounded-8px w-100% py-0 px-20px mb-24px" class="bg-#fff rounded-8px w-100% py-0 px-20px mb-24px"
> >
@ -93,13 +93,13 @@
<NoData /> <NoData />
</template> </template>
</a-table> </a-table>
</a-space> </Space>
</view> </view>
</template> </template>
<script setup> <script setup>
import topHeader from './topHeader.vue'; import topHeader from './topHeader.vue';
import { Tooltip } from 'ant-design-vue'; import { Tooltip, Space } from 'ant-design-vue';
import { fetchFocusBrandsList, fetchEventDynamicsList } from '@/api/all/index'; import { fetchFocusBrandsList, fetchEventDynamicsList } from '@/api/all/index';
import { ref, onMounted, computed } from 'vue'; import { ref, onMounted, computed } from 'vue';
import star1 from '@/assets/img/hottranslation/star-fill1.png'; import star1 from '@/assets/img/hottranslation/star-fill1.png';

View File

@ -3,7 +3,7 @@
<view> <view>
<topHeader ref="topHeaderRef" @search="search"></topHeader> <topHeader ref="topHeaderRef" @search="search"></topHeader>
<!-- 关键词热度榜 --> <!-- 关键词热度榜 -->
<a-space <Space
direction="vertical" direction="vertical"
class="bg-#fff rounded-8px w-100% py-0 px-20px mb-20px" class="bg-#fff rounded-8px w-100% py-0 px-20px mb-20px"
> >
@ -27,22 +27,22 @@
<NoData /> <NoData />
</template> </template>
<template #heatLevel> <template #heatLevel>
<a-space> <Space>
<span>热度指数</span> <span>热度指数</span>
<Tooltip> <Tooltip>
<template #title>综合话题出现频次互动数据如点赞收藏评论加权计算的热度得分</template> <template #title>综合话题出现频次互动数据如点赞收藏评论加权计算的热度得分</template>
<icon-question-circle size="14" class="!color-#737478" /> <icon-question-circle size="14" class="!color-#737478" />
</Tooltip> </Tooltip>
</a-space> </Space>
</template> </template>
<template #trendTitle> <template #trendTitle>
<a-space> <Space>
<span>变化幅度</span> <span>变化幅度</span>
<Tooltip> <Tooltip>
<template #title>仅基于关键词出现频次</template> <template #title>仅基于关键词出现频次</template>
<icon-question-circle size="14" class="!color-#737478" /> <icon-question-circle size="14" class="!color-#737478" />
</Tooltip> </Tooltip>
</a-space> </Space>
</template> </template>
<template #rank="{ record }"> <template #rank="{ record }">
@ -70,9 +70,9 @@
</div> </div>
</template> </template>
</a-table> </a-table>
</a-space> </Space>
<!-- 行业情绪 --> <!-- 行业情绪 -->
<a-space <Space
direction="vertical" direction="vertical"
class="bg-#fff rounded-8px w-100% py-0 px-20px mb-24px" class="bg-#fff rounded-8px w-100% py-0 px-20px mb-24px"
> >
@ -124,9 +124,9 @@
</template> </template>
</a-table> </a-table>
</div> </div>
</a-space> </Space>
<!-- 新兴关键词 --> <!-- 新兴关键词 -->
<a-space <Space
direction="vertical" direction="vertical"
class="bg-#fff rounded-8px w-100% py-0 px-20px" class="bg-#fff rounded-8px w-100% py-0 px-20px"
> >
@ -182,22 +182,22 @@
</template> </template>
<template #hotTitle> <template #hotTitle>
<a-space> <Space>
<span>当前热度指数</span> <span>当前热度指数</span>
<Tooltip> <Tooltip>
<template #title>综合关键词出现频次互动表现如点赞收藏评论加权计算的热度得分</template> <template #title>综合关键词出现频次互动表现如点赞收藏评论加权计算的热度得分</template>
<icon-question-circle size="16" class="!color-#737478" /> <icon-question-circle size="16" class="!color-#737478" />
</Tooltip> </Tooltip>
</a-space> </Space>
</template> </template>
<template #trendTitle> <template #trendTitle>
<a-space> <Space>
<span>变化幅度</span> <span>变化幅度</span>
<Tooltip> <Tooltip>
<template #title>仅基于关键词出现频次</template> <template #title>仅基于关键词出现频次</template>
<icon-question-circle size="16" class="!color-#737478" /> <icon-question-circle size="16" class="!color-#737478" />
</Tooltip> </Tooltip>
</a-space> </Space>
</template> </template>
<template #tred="{ record }"> <template #tred="{ record }">
<div class="flex items-center" :class="record.trend > 0 ? 'color-#F64B31' : 'color-#25C883'"> <div class="flex items-center" :class="record.trend > 0 ? 'color-#F64B31' : 'color-#25C883'">
@ -210,7 +210,7 @@
<Button type="primary" ghost @click="gotoDetail(record)">详情</Button> <Button type="primary" ghost @click="gotoDetail(record)">详情</Button>
</template> </template>
</a-table> </a-table>
</a-space> </Space>
<!-- modal --> <!-- modal -->
<Modal <Modal
v-model:open="visible" v-model:open="visible"
@ -225,7 +225,7 @@
<span style="text-align: left; width: 100%">新兴关键词</span> <span style="text-align: left; width: 100%">新兴关键词</span>
</template> </template>
<div> <div>
<a-space direction="vertical"> <Space direction="vertical">
<div class="mb-12px flex items-center"> <div class="mb-12px flex items-center">
<p class="cts !mr-16px flex-shrink-0 w-83px">话题名称</p> <p class="cts !mr-16px flex-shrink-0 w-83px">话题名称</p>
<span class="cts">{{ topicInfo.name }}</span> <span class="cts">{{ topicInfo.name }}</span>
@ -258,7 +258,7 @@
</div> </div>
</div> </div>
</div> </div>
</a-space> </Space>
</div> </div>
<template #footer> <template #footer>
<Button size="large" @click="handleCancel">取消</Button> <Button size="large" @click="handleCancel">取消</Button>
@ -270,7 +270,7 @@
<script setup> <script setup>
import topHeader from './topHeader.vue'; import topHeader from './topHeader.vue';
import { Checkbox, Modal, Button, Tooltip } from 'ant-design-vue'; import { Checkbox, Modal, Button, Tooltip, Space } from 'ant-design-vue';
import { import {
fetchKeywordTrendsList, fetchKeywordTrendsList,
fetchIndustryEmotions, fetchIndustryEmotions,

View File

@ -1,12 +1,12 @@
<template> <template>
<view> <view>
<!-- 头部 --> <!-- 头部 -->
<a-space <Space
direction="vertical" direction="vertical"
class="bg-#fff rounded-8px mb-20px" class="bg-#fff rounded-8px mb-20px"
style="background-color: #fff; width: 100%; padding: 24px; color: #737478; font-size: 14px" style="background-color: #fff; width: 100%; padding: 24px; color: #737478; font-size: 14px"
> >
<a-space align="start" style="width: 100%; align-items: flex-start" class="mb-12px"> <Space align="start" style="width: 100%; align-items: flex-start" class="mb-12px">
<span style="flex-shrink: 0; line-height: 28px" class="mr-32px">行业大类</span> <span style="flex-shrink: 0; line-height: 28px" class="mr-32px">行业大类</span>
<div style="display: flex; flex-wrap: wrap; gap: 16px; width: 100%; align-items: flex-start"> <div style="display: flex; flex-wrap: wrap; gap: 16px; width: 100%; align-items: flex-start">
<a-tag <a-tag
@ -25,9 +25,9 @@
>{{ item.name }}</a-tag >{{ item.name }}</a-tag
> >
</div> </div>
</a-space> </Space>
<!-- 二级类目 --> <!-- 二级类目 -->
<a-space align="start" style="width: 100%; align-items: flex-start" class="mb-12px"> <Space align="start" style="width: 100%; align-items: flex-start" class="mb-12px">
<span style="flex-shrink: 0; line-height: 28px" class="mr-32px">二级类目</span> <span style="flex-shrink: 0; line-height: 28px" class="mr-32px">二级类目</span>
<div style="display: flex; flex-wrap: wrap; gap: 16px; width: 100%; align-items: flex-start"> <div style="display: flex; flex-wrap: wrap; gap: 16px; width: 100%; align-items: flex-start">
<a-tag <a-tag
@ -46,9 +46,9 @@
>{{ item.name }}</a-tag >{{ item.name }}</a-tag
> >
</div> </div>
</a-space> </Space>
<!-- </a-space> --> <!-- </Space> -->
<a-space align="start" style="width: 100%; align-items: flex-start" class="mb-12px"> <Space align="start" style="width: 100%; align-items: flex-start" class="mb-12px">
<span style="flex-shrink: 0; line-height: 28px" class="mr-32px">时间筛选</span> <span style="flex-shrink: 0; line-height: 28px" class="mr-32px">时间筛选</span>
<div style="display: flex; flex-wrap: wrap; gap: 16px; width: 100%; align-items: flex-start"> <div style="display: flex; flex-wrap: wrap; gap: 16px; width: 100%; align-items: flex-start">
<a-tag <a-tag
@ -67,9 +67,9 @@
>{{ item.label }} >{{ item.label }}
</a-tag> </a-tag>
</div> </div>
</a-space> </Space>
<!-- 搜索区域 --> <!-- 搜索区域 -->
<a-space style="margin-left: 'auto'"> <Space style="margin-left: 'auto'">
<Button type="primary" @click="handleSearch"> <Button type="primary" @click="handleSearch">
<template #icon> <template #icon>
<icon-search class="mr-8px"/> <icon-search class="mr-8px"/>
@ -83,15 +83,15 @@
</template> </template>
<template #default>重置</template> <template #default>重置</template>
</Button> </Button>
</a-space> </Space>
</a-space> </Space>
</view> </view>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed } from 'vue'; import { ref, computed } from 'vue';
import { fetchIndustriesTree } from '@/api/all/index'; import { fetchIndustriesTree } from '@/api/all/index';
import { Button } from 'ant-design-vue'; import { Button, Space } from 'ant-design-vue';
const emit = defineEmits<(e: 'search') => void>(); const emit = defineEmits<(e: 'search') => void>();
// 行业大类 // 行业大类
const industriesTree = ref([]); const industriesTree = ref([]);

View File

@ -3,7 +3,7 @@
<topHeader ref="topHeaderRef" @search="search"></topHeader> <topHeader ref="topHeaderRef" @search="search"></topHeader>
<!-- 用户痛点观察 --> <!-- 用户痛点观察 -->
<a-space <Space
direction="vertical" direction="vertical"
style="background-color: #fff; width: 100%; padding: 0 20px" style="background-color: #fff; width: 100%; padding: 0 20px"
class="bg-#fff rounded-8px mb-24px" class="bg-#fff rounded-8px mb-24px"
@ -55,7 +55,7 @@
<Button type="primary" ghost @click="gotoDetail(record)">详情</Button> <Button type="primary" ghost @click="gotoDetail(record)">详情</Button>
</template> </template>
</a-table> </a-table>
</a-space> </Space>
<Modal <Modal
v-model:open="visible" v-model:open="visible"
@ -70,7 +70,7 @@
<span style="text-align: left; width: 100%">用户痛点观察</span> <span style="text-align: left; width: 100%">用户痛点观察</span>
</template> </template>
<div> <div>
<a-space direction="vertical" style="font-size: 12px"> <Space direction="vertical" style="font-size: 12px">
<div class="mb-12px flex items-center"> <div class="mb-12px flex items-center">
<p class="cts !mr-16px flex-shrink-0 w-60px">痛点</p> <p class="cts !mr-16px flex-shrink-0 w-60px">痛点</p>
<span class="cts">{{ topicInfo.name }}</span> <span class="cts">{{ topicInfo.name }}</span>
@ -108,7 +108,7 @@
</div> </div>
</div> </div>
</div> </div>
</a-space> </Space>
</div> </div>
<template #footer> <template #footer>
<Button size="large" @click="handleCancel">取消</Button> <Button size="large" @click="handleCancel">取消</Button>
@ -120,7 +120,7 @@
<script setup> <script setup>
import topHeader from './topHeader.vue'; import topHeader from './topHeader.vue';
import { Modal, Button, Tooltip } from 'ant-design-vue'; import { Modal, Button, Tooltip, Space } from 'ant-design-vue';
import { fetchUserPainPointsDetail, fetchUserPainPointsList } from '@/api/all/index'; import { fetchUserPainPointsDetail, fetchUserPainPointsList } from '@/api/all/index';
import { ref, onMounted, computed } from 'vue'; import { ref, onMounted, computed } from 'vue';
import top1 from '@/assets/img/captcha/top1.svg'; import top1 from '@/assets/img/captcha/top1.svg';

View File

@ -11,33 +11,33 @@
<icon-question-circle size="16" class="!color-#737478" /> <icon-question-circle size="16" class="!color-#737478" />
</Tooltip> </Tooltip>
</div> </div>
<a-space v-if="genderData.length > 0"> <Space v-if="genderData.length > 0">
<div id="container" class="w-300px h-300px"></div> <div id="container" class="w-300px h-300px"></div>
<a-space direction="vertical" style="font-size: 14px"> <Space direction="vertical" style="font-size: 14px">
<a-space> <Space>
<span style="width: 8px; height: 8px; background-color: #f64b31; border-radius: 50%"></span> <span style="width: 8px; height: 8px; background-color: #f64b31; border-radius: 50%"></span>
<span>女性</span> <span>女性</span>
<span>{{ (girlData.rate * 100).toFixed(2) }}%</span> <span>{{ (girlData.rate * 100).toFixed(2) }}%</span>
<span>TGI</span> <span>TGI</span>
<span>{{ girlData.tgi }}</span> <span>{{ girlData.tgi }}</span>
</a-space> </Space>
<a-space> <Space>
<span style="width: 8px; height: 8px; background-color: #2a59f3; border-radius: 50%"></span> <span style="width: 8px; height: 8px; background-color: #2a59f3; border-radius: 50%"></span>
<span>男性</span> <span>男性</span>
<span>{{ (boyData.rate * 100).toFixed(2) }}%</span> <span>{{ (boyData.rate * 100).toFixed(2) }}%</span>
<span>TGI</span> <span>TGI</span>
<span>{{ boyData.tgi }}</span> <span>{{ boyData.tgi }}</span>
</a-space> </Space>
</a-space> </Space>
</a-space> </Space>
<div v-else> <div v-else>
<NoData class="w-100% h-100%" /> <NoData class="w-100% h-100%" />
</div> </div>
</div> </div>
<!-- 2. 年龄分布 --> <!-- 2. 年龄分布 -->
<div class="bg-#fff rounded-8px w-100% py-0 px-20px flex-1 flex flex-col"> <div class="bg-#fff rounded-8px w-100% py-0 px-20px flex-1 flex flex-col">
<a-space style="display: flex; justify-content: space-between; width: 100%; font-size: 12px"> <Space style="display: flex; justify-content: space-between; width: 100%; font-size: 12px">
<div class="title-row"> <div class="title-row">
<span class="title mr-4px">年龄分布</span> <span class="title mr-4px">年龄分布</span>
<Tooltip> <Tooltip>
@ -45,13 +45,13 @@
<icon-question-circle size="16" class="!color-#737478" /> <icon-question-circle size="16" class="!color-#737478" />
</Tooltip> </Tooltip>
</div> </div>
<a-space v-if="ageValueData.length > 0" align="center"> <Space v-if="ageValueData.length > 0" align="center">
<span style="width: 16px; height: 8px; background-color: #6d4cfe; border-radius: 2px"></span> <span style="width: 16px; height: 8px; background-color: #6d4cfe; border-radius: 2px"></span>
<span style="color: #6d4cfe">占比</span> <span style="color: #6d4cfe">占比</span>
<span style="width: 16px; height: 8px; background-color: #f64b31; border-radius: 2px"></span> <span style="width: 16px; height: 8px; background-color: #f64b31; border-radius: 2px"></span>
<span style="color: #f64b31">TGI比</span> <span style="color: #f64b31">TGI比</span>
</a-space> </Space>
</a-space> </Space>
<div v-if="ageValueData.length === 0" class="w-100% flex-1"> <div v-if="ageValueData.length === 0" class="w-100% flex-1">
<NoData /> <NoData />
</div> </div>
@ -67,11 +67,11 @@
</Tooltip> </Tooltip>
</div> </div>
<div class="flex"> <div class="flex">
<a-space direction="vertical"> <Space direction="vertical">
<div id="chinaMap" style="height: 416px; width: 640px"></div> <div id="chinaMap" style="height: 416px; width: 640px"></div>
<a-space direction="vertical" style="font-size: 14px"> <Space direction="vertical" style="font-size: 14px">
<span class="cts">搜索指数</span> <span class="cts">搜索指数</span>
<a-space> <Space>
<span class="cts"></span> <span class="cts"></span>
<span <span
v-for="item in 5" v-for="item in 5"
@ -86,9 +86,9 @@
}" }"
></span> ></span>
<span class="cts"></span> <span class="cts"></span>
</a-space> </Space>
</a-space> </Space>
</a-space> </Space>
<div class="flex flex-col h-486px"> <div class="flex flex-col h-486px">
<Tabs defaultActiveKey="1" class="h-100%" @change="tabChange" size="large"> <Tabs defaultActiveKey="1" class="h-100%" @change="tabChange" size="large">
<TabPane key="1" tab="省份"> <TabPane key="1" tab="省份">
@ -138,7 +138,7 @@ import * as echarts from 'echarts';
import chinaJson from '@/assets/maps/china.json'; import chinaJson from '@/assets/maps/china.json';
echarts.registerMap('china', chinaJson); echarts.registerMap('china', chinaJson);
import { Tabs, Tooltip } from 'ant-design-vue'; import { Tabs, Tooltip, Space } from 'ant-design-vue';
const { TabPane } = Tabs; const { TabPane } = Tabs;
const scope = ref(1); // 地域范围1-省2-市 const scope = ref(1); // 地域范围1-省2-市

View File

@ -9,7 +9,7 @@
<img src="@/assets/img/Frame.svg" class="w-480 h-480 mr-40" alt="" /> <img src="@/assets/img/Frame.svg" class="w-480 h-480 mr-40" alt="" />
</div> </div>
<div class="flex items-center w-400 h-100%"> <div class="flex items-center w-400 h-100%">
<a-space <Space
direction="vertical" direction="vertical"
size="large" size="large"
align="center" align="center"
@ -62,14 +62,14 @@
</Button> </Button>
</FormItem> </FormItem>
</Form> </Form>
<a-space class="text-12px color-#737478 justify-start items-center"> <Space class="text-12px color-#737478 justify-start items-center">
<Checkbox v-model:checked="hasCheck" class="!text-12px mr-8px"></Checkbox> <Checkbox v-model:checked="hasCheck" class="!text-12px mr-8px"></Checkbox>
<span class="text-12px color-#737478">{{ isLogin ? '登录' : '注册' }}即代表同意</span> <span class="text-12px color-#737478">{{ isLogin ? '登录' : '注册' }}即代表同意</span>
<a-link href="link" class="form-link color-#211F24" target="_blank">用户协议</a-link> <a-link href="link" class="form-link color-#211F24" target="_blank">用户协议</a-link>
<span class="text-12px color-#737478"></span> <span class="text-12px color-#737478"></span>
<a-link href="link" class="form-link color-#211f24" target="_blank">隐私政策</a-link> <a-link href="link" class="form-link color-#211f24" target="_blank">隐私政策</a-link>
</a-space> </Space>
</a-space> </Space>
</div> </div>
</section> </section>
@ -125,7 +125,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { Checkbox, Modal, Button, Form, FormItem, Input } from 'ant-design-vue'; import { Checkbox, Modal, Button, Form, FormItem, Input, Space } from 'ant-design-vue';
import PuzzleVerification from './components/PuzzleVerification.vue'; import PuzzleVerification from './components/PuzzleVerification.vue';
import { fetchLoginCaptCha, fetchAuthorizationsCaptcha, fetchProfileInfo } from '@/api/all/login'; import { fetchLoginCaptCha, fetchAuthorizationsCaptcha, fetchProfileInfo } from '@/api/all/login';
import { joinEnterpriseByInviteCode } from '@/api/all'; import { joinEnterpriseByInviteCode } from '@/api/all';

View File

@ -8,7 +8,7 @@
<div class="filter-row"> <div class="filter-row">
<div class="filter-row-item"> <div class="filter-row-item">
<span class="label">内容稿件标题</span> <span class="label">内容稿件标题</span>
<a-space size="medium"> <Space size="medium">
<Input <Input
v-model:value="query.title" v-model:value="query.title"
class="!w-240px" class="!w-240px"
@ -21,11 +21,11 @@
<icon-search /> <icon-search />
</template> </template>
</Input> </Input>
</a-space> </Space>
</div> </div>
<div class="filter-row-item"> <div class="filter-row-item">
<span class="label">序号</span> <span class="label">序号</span>
<a-space size="medium"> <Space size="medium">
<Input <Input
v-model:value="query.uid" v-model:value="query.uid"
class="!w-160px" class="!w-160px"
@ -38,7 +38,7 @@
<icon-search /> <icon-search />
</template> </template>
</Input> </Input>
</a-space> </Space>
</div> </div>
<div class="filter-row-item" v-if="query.audit_status === AuditStatus.Pending"> <div class="filter-row-item" v-if="query.audit_status === AuditStatus.Pending">
<span class="label">上传时间</span> <span class="label">上传时间</span>
@ -99,7 +99,7 @@
</template> </template>
<script setup> <script setup>
import { Button, Input, Select } from 'ant-design-vue'; import { Button, Input, Select, Space } from 'ant-design-vue';
const { Option } = Select; const { Option } = Select;
import { defineEmits, defineProps } from 'vue'; import { defineEmits, defineProps } from 'vue';
import { PLATFORMS } from '@/views/material-center/components/finished-products/manuscript/check-list/constants'; import { PLATFORMS } from '@/views/material-center/components/finished-products/manuscript/check-list/constants';

View File

@ -1,140 +1,123 @@
<template> <template>
<a-table <Table
ref="tableRef" ref="tableRef"
:data="dataSource" :dataSource="dataSource"
row-key="id" rowKey="id"
column-resizable
:pagination="false" :pagination="false"
:scroll="{ x: '100%' }" :scroll="{ x: '100%' }"
class="flex-1 manuscript-table w-100%" class="flex-1 manuscript-table w-100%"
bordered bordered
:row-selection="rowSelection" :rowSelection="rowSelection"
:selected-row-keys="selectedRowKeys" :showSorterTooltip="false"
@sorter-change="handleSorterChange" @change="handleTableChange"
@select="(selectedKeys, rowKeyValue, record) => emits('select', selectedKeys, rowKeyValue, record)"
@select-all="(check) => emits('selectAll', check)"
> >
<template #empty> <template #emptyText>
<NoData text="暂无稿件" /> <NoData text="暂无稿件" />
</template> </template>
<template #columns> <Column
<a-table-column v-for="column in tableColumns"
v-for="column in tableColumns" :key="column.dataIndex"
:key="column.dataIndex" :dataIndex="column.dataIndex"
:data-index="column.dataIndex" :fixed="column.fixed"
:fixed="column.fixed" :width="column.width"
:width="column.width" :minWidth="column.minWidth"
:min-width="column.minWidth" :sorter="column.sortable"
:sortable="column.sortable" :align="column.align"
:align="column.align" :ellipsis="true"
ellipsis >
tooltip <template #title>
> <div class="flex items-center">
<template #title> <span class="cts mr-4px">{{ column.title }}</span>
<div class="flex items-center"> <Tooltip v-if="column.tooltip" :title="column.tooltip" placement="top">
<span class="cts mr-4px">{{ column.title }}</span> <icon-question-circle class="tooltip-icon color-#737478" size="16" />
<Tooltip v-if="column.tooltip" :title="column.tooltip" placement="top"> </Tooltip>
<icon-question-circle class="tooltip-icon color-#737478" size="16" /> </div>
</Tooltip> </template>
</div>
</template>
<template v-if="column.dataIndex === 'customer_opinion'" #cell="{ record }"> <template v-if="column.dataIndex === 'customer_opinion'" #customRender="{ record }">
<p <p
class="h-28px px-8px flex items-center rounded-2px w-fit" class="h-28px px-8px flex items-center rounded-2px w-fit"
:style="{ background: getCustomerOpinionInfo(record.customer_opinion)?.bg }" :style="{ background: getCustomerOpinionInfo(record.customer_opinion)?.bg }"
>
<span class="cts" :class="getCustomerOpinionInfo(record.customer_opinion)?.color">{{
getCustomerOpinionInfo(record.customer_opinion)?.label ?? '-'
}}</span>
</p>
</template>
<template v-else-if="column.dataIndex === 'platform'" #cell="{ record }">
<template v-if="!PLATFORMS.find((item) => item.value === record.platform)"> - </template>
<img
v-else
width="24"
height="24"
class="rounded-4px"
:src="PLATFORMS.find((item) => item.value === record.platform)?.icon"
/>
</template>
<template v-else-if="column.dataIndex === 'compliance_level'" #cell="{ record }">
<span class="cts num !color-#6D4CFE">{{
record.ai_review?.compliance_level ? `${record.ai_review?.compliance_level}%` : '-'
}}</span>
</template>
<template v-else-if="column.dataIndex === 'title'" #cell="{ record }">
<TextOverTips :context="record.title" :line="3" class="title" @click="onDetail(record)" />
</template>
<template v-else-if="column.dataIndex === 'type'" #cell="{ record }">
<div class="flex items-center">
<img
:src="record.type === EnumManuscriptType.Image ? icon2 : icon3"
width="16"
height="16"
class="mr-4px"
/>
<span class="cts" :class="record.type === EnumManuscriptType.Image ? '!color-#25C883' : '!color-#6D4CFE'">{{
record.type === EnumManuscriptType.Image ? '图文' : '视频'
}}</span>
</div>
</template>
<template v-else-if="['uploader', 'last_modifier'].includes(column.dataIndex)" #cell="{ record }">
{{ record[column.dataIndex].name || record[column.dataIndex].mobile }}
</template>
<template
#cell="{ record }"
v-else-if="
['created_at', 'last_modified_at', 'audit_started_at', 'audit_passed_at'].includes(column.dataIndex)
"
> >
<span class="cts num">{{ exactFormatTime(record[column.dataIndex]) }}</span> <span class="cts" :class="getCustomerOpinionInfo(record.customer_opinion)?.color">{{
</template> getCustomerOpinionInfo(record.customer_opinion)?.label ?? '-'
<template v-else-if="column.dataIndex === 'cover'" #cell="{ record }"> }}</span>
<HoverImagePreview :src="record.cover"> </p>
<a-image :width="64" :height="64" :src="record.cover" class="!rounded-6px" fit="cover"> </template>
<template #error> <template v-else-if="column.dataIndex === 'platform'" #customRender="{ record }">
<img :src="icon4" class="w-full h-full" /> <template v-if="!PLATFORMS.find((item) => item.value === record.platform)"> - </template>
</template> <img
</a-image> v-else
</HoverImagePreview> width="24"
</template> height="24"
<template v-else-if="column.dataIndex === 'operation'" #cell="{ record }"> class="rounded-4px"
<div class="flex items-center"> :src="PLATFORMS.find((item) => item.value === record.platform)?.icon"
<img class="mr-8px cursor-pointer" :src="icon1" width="14" height="14" @click="onDelete(record)" /> />
<Button </template>
type="primary" <template v-else-if="column.dataIndex === 'compliance_level'" #customRender="{ record }">
ghost <span class="cts num !color-#6D4CFE">{{
size="small" record.ai_review?.compliance_level ? `${record.ai_review?.compliance_level}%` : '-'
@click="onShare(record)" }}</span>
v-if="audit_status === AuditStatus.Passed" </template>
>分享</Button <template v-else-if="column.dataIndex === 'title'" #customRender="{ record }">
> <TextOverTips :context="record.title" :line="3" class="title" @click="onDetail(record)" />
<Button </template>
type="primary" <template v-else-if="column.dataIndex === 'type'" #customRender="{ record }">
ghost <div class="flex items-center">
size="small" <img :src="record.type === EnumManuscriptType.Image ? icon2 : icon3" width="16" height="16" class="mr-4px" />
@click="onCheck(record)" <span class="cts" :class="record.type === EnumManuscriptType.Image ? '!color-#25C883' : '!color-#6D4CFE'">{{
v-else-if="audit_status === AuditStatus.Pending" record.type === EnumManuscriptType.Image ? '图文' : '视频'
>审核</Button }}</span>
> </div>
<Button type="primary" ghost size="small" @click="onScan(record)" v-else>查看</Button> </template>
</div> <template v-else-if="['uploader', 'last_modifier'].includes(column.dataIndex)" #customRender="{ record }">
</template> {{ record[column.dataIndex].name || record[column.dataIndex].mobile }}
<template v-else #cell="{ record }"> </template>
{{ formatTableField(column, record, true) }} <template
</template> #customRender="{ record }"
</a-table-column> v-else-if="['created_at', 'last_modified_at', 'audit_started_at', 'audit_passed_at'].includes(column.dataIndex)"
</template> >
</a-table> <span class="cts num">{{ exactFormatTime(record[column.dataIndex]) }}</span>
</template>
<template v-else-if="column.dataIndex === 'cover'" #customRender="{ record }">
<HoverImagePreview :src="record.cover">
<Image :width="64" :height="64" :src="record.cover" class="!rounded-6px" :preview="false">
<template #error>
<img :src="icon4" class="w-full h-full" />
</template>
</Image>
</HoverImagePreview>
</template>
<template v-else-if="column.dataIndex === 'operation'" #customRender="{ record }">
<div class="flex items-center">
<img class="mr-8px cursor-pointer" :src="icon1" width="14" height="14" @click="onDelete(record)" />
<Button type="primary" ghost size="small" @click="onShare(record)" v-if="audit_status === AuditStatus.Passed"
>分享</Button
>
<Button
type="primary"
ghost
size="small"
@click="onCheck(record)"
v-else-if="audit_status === AuditStatus.Pending"
>审核</Button
>
<Button type="primary" ghost size="small" @click="onScan(record)" v-else>查看</Button>
</div>
</template>
<template v-else #customRender="{ record }">
{{ formatTableField(column, record, true) }}
</template>
</Column>
</Table>
<ShareModal ref="shareModalRef" /> <ShareModal ref="shareModalRef" />
</template> </template>
<script setup> <script setup>
import { ref } from 'vue'; import { ref } from 'vue';
import { Button, Tooltip } from 'ant-design-vue'; import { Button, Tooltip, Table, Image } from 'ant-design-vue';
const { Column } = Table;
import { formatTableField, exactFormatTime } from '@/utils/tools'; import { formatTableField, exactFormatTime } from '@/utils/tools';
import { EnumManuscriptType } from '@/views/material-center/components/finished-products/manuscript/list/constants'; import { EnumManuscriptType } from '@/views/material-center/components/finished-products/manuscript/list/constants';
import { patchWorkAuditsAudit } from '@/api/all/generationWorkshop'; import { patchWorkAuditsAudit } from '@/api/all/generationWorkshop';
@ -183,8 +166,25 @@ const props = defineProps({
const tableRef = ref(null); const tableRef = ref(null);
const shareModalRef = ref(null); const shareModalRef = ref(null);
const handleSorterChange = (column, order) => { const handleTableChange = (pagination, filters, sorter) => {
emits('sorterChange', column, order === 'ascend' ? 'asc' : 'desc'); if (sorter && sorter.field) {
emits('sorterChange', sorter.field, sorter.order === 'ascend' ? 'asc' : 'desc');
}
};
const rowSelection = {
selectedRowKeys: computed(() => props.selectedRowKeys),
onSelect: (record, selected, selectedRows, nativeEvent) => {
emits(
'select',
selectedRows.map((row) => row.id),
record.id,
record,
);
},
onSelectAll: (selected, selectedRows, changeRows) => {
emits('selectAll', selected);
},
}; };
const onDelete = (item) => { const onDelete = (item) => {
emits('delete', item); emits('delete', item);

View File

@ -1,115 +1,111 @@
<template> <template>
<a-table <Table
ref="tableRef" ref="tableRef"
:data="dataSource" :dataSource="dataSource"
row-key="id" rowKey="id"
column-resizable
:pagination="false" :pagination="false"
:scroll="{ x: '100%' }" :scroll="{ x: '100%' }"
class="manuscript-table w-100% flex-1" class="manuscript-table w-100% flex-1"
bordered bordered
@sorter-change="handleSorterChange" :showSorterTooltip="false"
@change="handleTableChange"
> >
<template #empty> <template #emptyText>
<NoData text="暂无稿件" /> <NoData text="暂无稿件" />
</template> </template>
<template #columns> <Column
<a-table-column v-for="column in TABLE_COLUMNS"
v-for="column in TABLE_COLUMNS" :key="column.dataIndex"
:key="column.dataIndex" :dataIndex="column.dataIndex"
:data-index="column.dataIndex" :fixed="column.fixed"
:fixed="column.fixed" :width="column.width"
:width="column.width" :minWidth="column.minWidth"
:min-width="column.minWidth" :sorter="column.sortable"
:sortable="column.sortable" :align="column.align"
:align="column.align" :ellipsis="true"
ellipsis >
tooltip <template #title>
> <div class="flex items-center">
<template #title> <span class="cts mr-4px">{{ column.title }}</span>
<div class="flex items-center"> <Tooltip v-if="column.tooltip" :title="column.tooltip" placement="top">
<span class="cts mr-4px">{{ column.title }}</span> <icon-question-circle class="tooltip-icon color-#737478" size="16" />
<Tooltip v-if="column.tooltip" :title="column.tooltip" placement="top"> </Tooltip>
<icon-question-circle class="tooltip-icon color-#737478" size="16" /> </div>
</Tooltip> </template>
</div>
</template>
<template v-if="column.dataIndex === 'create_at'" #cell="{ record }"> <template v-if="column.dataIndex === 'create_at'" #customRender="{ record }">
{{ exactFormatTime(record.create_at) }} {{ exactFormatTime(record.create_at) }}
</template> </template>
<template v-else-if="column.dataIndex === 'customer_opinion'" #cell="{ record }"> <template v-else-if="column.dataIndex === 'customer_opinion'" #customRender="{ record }">
<p <p
class="h-28px px-8px flex items-center rounded-2px w-fit" class="h-28px px-8px flex items-center rounded-2px w-fit"
:style="{ background: getCustomerOpinionInfo(record.customer_opinion)?.bg }" :style="{ background: getCustomerOpinionInfo(record.customer_opinion)?.bg }"
> >
<span class="cts" :class="getCustomerOpinionInfo(record.customer_opinion)?.color">{{ <span class="cts" :class="getCustomerOpinionInfo(record.customer_opinion)?.color">{{
getCustomerOpinionInfo(record.customer_opinion)?.label ?? '-' getCustomerOpinionInfo(record.customer_opinion)?.label ?? '-'
}}</span> }}</span>
</p> </p>
</template> </template>
<template v-else-if="column.dataIndex === 'title'" #cell="{ record }"> <template v-else-if="column.dataIndex === 'title'" #customRender="{ record }">
<TextOverTips :context="record.title" :line="3" class="title" @click="onDetail(record)" /> <TextOverTips :context="record.title" :line="3" class="title" @click="onDetail(record)" />
</template> </template>
<template v-else-if="column.dataIndex === 'audit_status'" #cell="{ record }"> <template v-else-if="column.dataIndex === 'audit_status'" #customRender="{ record }">
<div <div
class="flex items-center w-fit h-28px px-8px rounded-2px" class="flex items-center w-fit h-28px px-8px rounded-2px"
:style="{ backgroundColor: getStatusInfo(record.audit_status).backgroundColor }" :style="{ backgroundColor: getStatusInfo(record.audit_status).backgroundColor }"
> >
<span class="cts s1" :style="{ color: getStatusInfo(record.audit_status).color }">{{ <span class="cts s1" :style="{ color: getStatusInfo(record.audit_status).color }">{{
getStatusInfo(record.audit_status).name getStatusInfo(record.audit_status).name
}}</span> }}</span>
</div> </div>
</template> </template>
<template v-else-if="column.dataIndex === 'type'" #cell="{ record }"> <template v-else-if="column.dataIndex === 'type'" #customRender="{ record }">
<div class="flex items-center"> <div class="flex items-center">
<img <img :src="record.type === EnumManuscriptType.Image ? icon2 : icon3" width="16" height="16" class="mr-4px" />
:src="record.type === EnumManuscriptType.Image ? icon2 : icon3" <span class="cts" :class="record.type === EnumManuscriptType.Image ? '!color-#25C883' : '!color-#6D4CFE'">{{
width="16" record.type === EnumManuscriptType.Image ? '图文' : '视频'
height="16" }}</span>
class="mr-4px" </div>
/> </template>
<span class="cts" :class="record.type === EnumManuscriptType.Image ? '!color-#25C883' : '!color-#6D4CFE'">{{ <template v-else-if="['uploader', 'last_modifier'].includes(column.dataIndex)" #customRender="{ record }">
record.type === EnumManuscriptType.Image ? '图文' : '视频' {{ record[column.dataIndex].name || record[column.dataIndex].mobile }}
}}</span> </template>
</div> <template v-else-if="['created_at', 'last_modified_at'].includes(column.dataIndex)" #customRender="{ record }">
</template> {{ exactFormatTime(record[column.dataIndex]) }}
<template v-else-if="['uploader', 'last_modifier'].includes(column.dataIndex)" #cell="{ record }"> </template>
{{ record[column.dataIndex].name || record[column.dataIndex].mobile }} <template v-else-if="column.dataIndex === 'cover'" #customRender="{ record }">
</template> <HoverImagePreview :src="record.cover">
<template v-else-if="['created_at', 'last_modified_at'].includes(column.dataIndex)" #cell="{ record }"> <Image :width="64" :height="64" :src="record.cover" class="!rounded-6px" :preview="false">
{{ exactFormatTime(record[column.dataIndex]) }} <template #error>
</template> <img :src="icon4" class="w-full h-full" />
<template v-else-if="column.dataIndex === 'cover'" #cell="{ record }"> </template>
<HoverImagePreview :src="record.cover"> </Image>
<a-image :width="64" :height="64" :src="record.cover" class="!rounded-6px" fit="cover"> </HoverImagePreview>
<template #error> </template>
<img :src="icon4" class="w-full h-full" /> <template v-else-if="column.dataIndex === 'operation'" #customRender="{ record }">
</template> <div class="flex items-center">
</a-image> <img class="mr-8px cursor-pointer" :src="icon1" width="14" height="14" @click="onDelete(record)" />
</HoverImagePreview> <Button type="primary" ghost size="small" class="mr-8px" @click="onEdit(record)">编辑</Button>
</template> <Button type="primary" ghost size="small" @click="onDetail(record)">详情</Button>
<template v-else-if="column.dataIndex === 'operation'" #cell="{ record }"> </div>
<div class="flex items-center"> </template>
<img class="mr-8px cursor-pointer" :src="icon1" width="14" height="14" @click="onDelete(record)" /> <template v-else #customRender="{ record }">
<Button type="primary" ghost size="small" class="mr-8px" @click="onEdit(record)">编辑</Button> {{ formatTableField(column, record, true) }}
<Button type="primary" ghost size="small" @click="onDetail(record)">详情</Button> </template>
</div> </Column>
</template> </Table>
<template v-else #cell="{ record }">
{{ formatTableField(column, record, true) }}
</template>
</a-table-column>
</template>
</a-table>
</template> </template>
<script setup> <script setup>
import { ref } from 'vue'; import { ref } from 'vue';
import { Button, Tooltip } from 'ant-design-vue'; import { Button, Tooltip, Table, Image } from 'ant-design-vue';
const { Column } = Table;
import { formatTableField, exactFormatTime } from '@/utils/tools'; import { formatTableField, exactFormatTime } from '@/utils/tools';
import { TABLE_COLUMNS } from './constants'; import { TABLE_COLUMNS } from './constants';
import { CHECK_STATUS, EnumManuscriptType } from '@/views/material-center/components/finished-products/manuscript/list/constants'; import {
CHECK_STATUS,
EnumManuscriptType,
} from '@/views/material-center/components/finished-products/manuscript/list/constants';
import { CUSTOMER_OPINION } from '@/views/material-center/components/finished-products/manuscript/check-list/constants'; import { CUSTOMER_OPINION } from '@/views/material-center/components/finished-products/manuscript/check-list/constants';
import TextOverTips from '@/components/text-over-tips'; import TextOverTips from '@/components/text-over-tips';
@ -132,8 +128,10 @@ const props = defineProps({
const tableRef = ref(null); const tableRef = ref(null);
const handleSorterChange = (column, order) => { const handleTableChange = (pagination, filters, sorter) => {
emits('sorterChange', column, order === 'ascend' ? 'asc' : 'desc'); if (sorter && sorter.field) {
emits('sorterChange', sorter.field, sorter.order === 'ascend' ? 'asc' : 'desc');
}
}; };
const onDelete = (item) => { const onDelete = (item) => {
emits('delete', item); emits('delete', item);

View File

@ -12,13 +12,13 @@
<div class="filter-row flex mb-20px"> <div class="filter-row flex mb-20px">
<div class="filter-row-item flex items-center"> <div class="filter-row-item flex items-center">
<span class="label">品牌名称</span> <span class="label">品牌名称</span>
<a-space size="medium"> <Space size="medium">
<Input v-model:value="query.name" class="w-240px" placeholder="请搜索..." size="medium" allowClear> <Input v-model:value="query.name" class="w-240px" placeholder="请搜索..." size="medium" allowClear>
<template #prefix> <template #prefix>
<icon-search /> <icon-search />
</template> </template>
</Input> </Input>
</a-space> </Space>
</div> </div>
<div class="filter-row flex"> <div class="filter-row flex">
<Button type="outline" ghost class="mr-12px" @click="handleSearch"> <Button type="outline" ghost class="mr-12px" @click="handleSearch">
@ -86,8 +86,8 @@
<a-table-column title="Slogan" data-index="slogan" /> <a-table-column title="Slogan" data-index="slogan" />
<a-table-column width="150" min-widht="150" title="操作" data-index="optional"> <a-table-column width="150" min-widht="150" title="操作" data-index="optional">
<template #cell="{ record }"> <template #cell="{ record }">
<a-space size="medium"> <Space size="medium">
<a-space> <Space>
<a-popconfirm <a-popconfirm
content="确定删除吗?" content="确定删除吗?"
type="warning" type="warning"
@ -97,11 +97,11 @@
> >
<icon-delete></icon-delete> <icon-delete></icon-delete>
</a-popconfirm> </a-popconfirm>
</a-space> </Space>
<a-space> <Space>
<Button type="outline" class="edit-btn" size="small" @click="handleEdit(record.id)">编辑</Button> <Button type="outline" class="edit-btn" size="small" @click="handleEdit(record.id)">编辑</Button>
</a-space> </Space>
</a-space> </Space>
</template> </template>
</a-table-column> </a-table-column>
</template> </template>
@ -128,7 +128,7 @@
import { ref, computed, reactive, onMounted } from 'vue'; import { ref, computed, reactive, onMounted } from 'vue';
import { Message } from '@arco-design/web-vue'; import { Message } from '@arco-design/web-vue';
import { IconDelete } from '@arco-design/web-vue/es/icon'; import { IconDelete } from '@arco-design/web-vue/es/icon';
import { Button, Modal, Form, FormItem, Input } from 'ant-design-vue'; import { Button, Modal, Space, Form, FormItem, Input } from 'ant-design-vue';
const { TextArea } = Input; const { TextArea } = Input;
import { import {

View File

@ -17,9 +17,9 @@
</div> </div>
<div class="filter-row-item flex items-center"> <div class="filter-row-item flex items-center">
<span class="label">时间筛选</span> <span class="label">时间筛选</span>
<a-space class="w-240px"> <Space class="w-240px">
<a-range-picker size="medium" allow-clear format="YYYY-MM-DD HH:mm" class="w-100%" /> <a-range-picker size="medium" allow-clear format="YYYY-MM-DD HH:mm" class="w-100%" />
</a-space> </Space>
</div> </div>
<div class="filter-row flex"> <div class="filter-row flex">
@ -62,7 +62,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { reactive, ref } from 'vue'; import { reactive, ref } from 'vue';
import { Button, Input } from 'ant-design-vue'; import { Button, Input, Space } from 'ant-design-vue';
const pageInfo = reactive({ const pageInfo = reactive({
page: 1, page: 1,

View File

@ -9,19 +9,19 @@
<div class="filter-row flex mb-20px"> <div class="filter-row flex mb-20px">
<div class="filter-row-item flex items-center"> <div class="filter-row-item flex items-center">
<span class="label">服务/产品</span> <span class="label">服务/产品</span>
<a-space size="medium"> <Space size="medium">
<Input v-model:value="query.name" class="w-240px" placeholder="请搜索..." size="medium" allowClear> <Input v-model:value="query.name" class="w-240px" placeholder="请搜索..." size="medium" allowClear>
<template #prefix> <template #prefix>
<icon-search /> <icon-search />
</template> </template>
</Input> </Input>
</a-space> </Space>
</div> </div>
<div class="filter-row-item flex items-center"> <div class="filter-row-item flex items-center">
<span class="label">时间筛选</span> <span class="label">时间筛选</span>
<a-space class="w-240px"> <Space class="w-240px">
<a-range-picker size="medium" allow-clear format="YYYY-MM-DD HH:mm" class="w-100%" /> <a-range-picker size="medium" allow-clear format="YYYY-MM-DD HH:mm" class="w-100%" />
</a-space> </Space>
</div> </div>
<div class="filter-row flex"> <div class="filter-row flex">
@ -63,7 +63,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { Button, Input } from 'ant-design-vue'; import { Button, Input, Space } from 'ant-design-vue';
import { reactive, ref } from 'vue'; import { reactive, ref } from 'vue';
const pageInfo = reactive({ const pageInfo = reactive({

View File

@ -16,13 +16,13 @@
<div class="flex items-center justify-between mb-16px"> <div class="flex items-center justify-between mb-16px">
<div class="filter-row-item flex items-center"> <div class="filter-row-item flex items-center">
<span class="s1 !color-#211F24 mr-12px">分组名称</span> <span class="s1 !color-#211F24 mr-12px">分组名称</span>
<a-space size="medium" class="w-240px"> <Space size="medium" class="w-240px">
<Input v-model:value="query.name" placeholder="请搜索..." size="middle" allowClear @change="reload"> <Input v-model:value="query.name" placeholder="请搜索..." size="middle" allowClear @change="reload">
<template #prefix> <template #prefix>
<icon-search /> <icon-search />
</template> </template>
</Input> </Input>
</a-space> </Space>
</div> </div>
<Button type="primary" size="middle" @click="openAdd" <Button type="primary" size="middle" @click="openAdd"
><template #icon> ><template #icon>
@ -82,7 +82,7 @@
<script setup> <script setup>
import { ref, reactive, onMounted } from 'vue'; import { ref, reactive, onMounted } from 'vue';
import { Button, Modal, Input } from 'ant-design-vue'; import { Button, Modal, Input, Space } from 'ant-design-vue';
import { getAccountGroup } from '@/api/all/propertyMarketing'; import { getAccountGroup } from '@/api/all/propertyMarketing';
import { exactFormatTime } from '@/utils/tools'; import { exactFormatTime } from '@/utils/tools';

View File

@ -69,11 +69,11 @@
<img :src="icon6" width="16" height="16" class="cursor-pointer" @click="handleCloseTip" /> <img :src="icon6" width="16" height="16" class="cursor-pointer" @click="handleCloseTip" />
</template> </template>
<div v-else> <div v-else>
<a-space v-if="isAbNormalStatus" class="flex items-center"> <Space v-if="isAbNormalStatus" class="flex items-center">
<Button type="primary" danger size="small" @click="handleOpenAbnormalAccount"> <Button type="primary" danger size="small" @click="handleOpenAbnormalAccount">
<template #default>查看异常账号</template> <template #default>查看异常账号</template>
</Button> </Button>
</a-space> </Space>
</div> </div>
</div> </div>
<div class="card-wrap"> <div class="card-wrap">
@ -120,7 +120,7 @@
<script setup> <script setup>
import { ref, provide } from 'vue'; import { ref, provide } from 'vue';
import { Notification } from '@arco-design/web-vue'; import { Notification } from '@arco-design/web-vue';
import { Checkbox, Button } from 'ant-design-vue'; import { Checkbox, Button, Space } from 'ant-design-vue';
import FilterBlock from './components/filter-block'; import FilterBlock from './components/filter-block';
import AccountTable from './components/account-table'; import AccountTable from './components/account-table';

View File

@ -8,7 +8,7 @@
<div class="filter-row flex"> <div class="filter-row flex">
<div class="filter-row-item flex items-center"> <div class="filter-row-item flex items-center">
<span class="label">项目名称</span> <span class="label">项目名称</span>
<a-space size="medium"> <Space size="medium">
<Input <Input
v-model:value="query.name" v-model:value="query.name"
class="w-240px" class="w-240px"
@ -21,7 +21,7 @@
<icon-search /> <icon-search />
</template> </template>
</Input> </Input>
</a-space> </Space>
</div> </div>
<div class="filter-row-item flex items-center"> <div class="filter-row-item flex items-center">
<Button type="primary" ghost class="mr-12px" @click="handleSearch"> <Button type="primary" ghost class="mr-12px" @click="handleSearch">
@ -43,7 +43,7 @@
<script setup> <script setup>
import { defineEmits, defineProps } from 'vue'; import { defineEmits, defineProps } from 'vue';
import { Button, Input } from 'ant-design-vue'; import { Button, Input, Space } from 'ant-design-vue';
const props = defineProps({ const props = defineProps({
query: { query: {

View File

@ -16,13 +16,13 @@
<div class="flex items-center justify-between mb-16px"> <div class="flex items-center justify-between mb-16px">
<div class="filter-row-item flex items-center"> <div class="filter-row-item flex items-center">
<span class="s1 !color-#211F24 mr-12px">分组名称</span> <span class="s1 !color-#211F24 mr-12px">分组名称</span>
<a-space size="medium" class="w-240px"> <Space size="medium" class="w-240px">
<Input v-model:value="query.name" placeholder="请搜索..." size="middle" allowClear @change="handleSearch"> <Input v-model:value="query.name" placeholder="请搜索..." size="middle" allowClear @change="handleSearch">
<template #prefix> <template #prefix>
<icon-search /> <icon-search />
</template> </template>
</Input> </Input>
</a-space> </Space>
</div> </div>
<Button type="primary" size="medium" @click="openAdd" <Button type="primary" size="medium" @click="openAdd"
><template #icon> ><template #icon>
@ -81,7 +81,7 @@
<script setup> <script setup>
import { ref, reactive, onMounted } from 'vue'; import { ref, reactive, onMounted } from 'vue';
import { Button, Modal, Input } from 'ant-design-vue'; import { Button, Modal, Input, Space } from 'ant-design-vue';
import { getPlacementAccountProjectGroups } from '@/api/all/propertyMarketing'; import { getPlacementAccountProjectGroups } from '@/api/all/propertyMarketing';
import { exactFormatTime } from '@/utils/tools'; import { exactFormatTime } from '@/utils/tools';

View File

@ -52,11 +52,11 @@
<img :src="icon6" width="16" height="16" class="cursor-pointer" @click="handleCloseTip" /> <img :src="icon6" width="16" height="16" class="cursor-pointer" @click="handleCloseTip" />
</template> </template>
<div v-else> <div v-else>
<a-space v-if="isAbNormalStatus" class="flex items-center"> <Space v-if="isAbNormalStatus" class="flex items-center">
<Button type="primary" danger size="small" @click="handleOpenAbnormalAccount"> <Button type="primary" danger size="small" @click="handleOpenAbnormalAccount">
<template #default>查看异常账号</template> <template #default>查看异常账号</template>
</Button> </Button>
</a-space> </Space>
</div> </div>
</div> </div>
<div class="card-wrap"> <div class="card-wrap">
@ -93,7 +93,7 @@
<script setup> <script setup>
import { ref } from 'vue'; import { ref } from 'vue';
import { Checkbox, Button } from 'ant-design-vue'; import { Checkbox, Button, Space } from 'ant-design-vue';
import FilterBlock from './components/filter-block'; import FilterBlock from './components/filter-block';
import AccountTable from './components/account-table'; import AccountTable from './components/account-table';

View File

@ -10,7 +10,7 @@
</template> </template>
</a-popover> </a-popover>
</div> </div>
<a-space> <Space>
<span class="player-title">表现分析</span> <span class="player-title">表现分析</span>
<a-popover position="tl"> <a-popover position="tl">
<icon-question-circle /> <icon-question-circle />
@ -18,35 +18,35 @@
<p>表现分析</p> <p>表现分析</p>
</template> </template>
</a-popover> </a-popover>
</a-space> </Space>
<div style="margin-right: 24px"> <div style="margin-right: 24px">
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :span="12"> <a-col :span="12">
<div class="overall-strategy"> <div class="overall-strategy">
<span class="placement-optimization-title">人群分析</span> <span class="placement-optimization-title">人群分析</span>
<a-space direction="vertical"> <Space direction="vertical">
<a-space <Space
v-if="getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '人群分析').length > 0" v-if="getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '人群分析').length > 0"
v-for="(item, index) in getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '人群分析')" v-for="(item, index) in getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '人群分析')"
:key="index" :key="index"
> >
<span><img :src="getStarIcon(index)" style="width: 25px; height: 17px" />{{ item }}</span> <span><img :src="getStarIcon(index)" style="width: 25px; height: 17px" />{{ item }}</span>
</a-space> </Space>
</a-space> </Space>
</div> </div>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<div class="overall-strategy"> <div class="overall-strategy">
<span class="placement-optimization-title">投放素材</span> <span class="placement-optimization-title">投放素材</span>
<a-space direction="vertical"> <Space direction="vertical">
<a-space <Space
v-if="getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '投放素材').length > 0" v-if="getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '投放素材').length > 0"
v-for="(item, index) in getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '投放素材')" v-for="(item, index) in getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '投放素材')"
:key="index" :key="index"
> >
<span><img :src="getStarIcon(index)" style="width: 25px; height: 17px" />{{ item }}</span> <span><img :src="getStarIcon(index)" style="width: 25px; height: 17px" />{{ item }}</span>
</a-space> </Space>
</a-space> </Space>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
@ -54,35 +54,35 @@
<a-col :span="12"> <a-col :span="12">
<div class="overall-strategy"> <div class="overall-strategy">
<span class="placement-optimization-title">投放时段</span> <span class="placement-optimization-title">投放时段</span>
<a-space direction="vertical"> <Space direction="vertical">
<a-space <Space
v-if="getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '投放时段').length > 0" v-if="getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '投放时段').length > 0"
v-for="(item, index) in getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '投放时段')" v-for="(item, index) in getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '投放时段')"
:key="index" :key="index"
> >
<span><img :src="getStarIcon(index)" style="width: 25px; height: 17px" />{{ item }}</span> <span><img :src="getStarIcon(index)" style="width: 25px; height: 17px" />{{ item }}</span>
</a-space> </Space>
</a-space> </Space>
</div> </div>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<div class="overall-strategy"> <div class="overall-strategy">
<span class="placement-optimization-title">平台表现</span> <span class="placement-optimization-title">平台表现</span>
<a-space direction="vertical"> <Space direction="vertical">
<a-space <Space
v-if="getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '平台表现').length > 0" v-if="getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '平台表现').length > 0"
v-for="(item, index) in getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '平台表现')" v-for="(item, index) in getSubmoduleContent(MODEL_PERFORMANCE_ANALYSIS, '平台表现')"
:key="index" :key="index"
> >
<span><img :src="getStarIcon(index)" style="width: 25px; height: 17px" />{{ item }}</span> <span><img :src="getStarIcon(index)" style="width: 25px; height: 17px" />{{ item }}</span>
</a-space> </Space>
</a-space> </Space>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
</div> </div>
<a-space> <Space>
<span class="player-title">新投放建议生成</span> <span class="player-title">新投放建议生成</span>
<a-popover position="tl"> <a-popover position="tl">
<icon-question-circle /> <icon-question-circle />
@ -90,20 +90,20 @@
<p style="margin: 0">新投放建议生成</p> <p style="margin: 0">新投放建议生成</p>
</template> </template>
</a-popover> </a-popover>
</a-space> </Space>
<a-row class="grid-demo" :gutter="24"> <a-row class="grid-demo" :gutter="24">
<a-col :span="24"> <a-col :span="24">
<div class="overall-strategy"> <div class="overall-strategy">
<span class="placement-optimization-title">人群建议</span> <span class="placement-optimization-title">人群建议</span>
<a-space direction="vertical"> <Space direction="vertical">
<a-space <Space
v-if="getSubmoduleContent(MODEL_PLACEMENT_SUGGESTION, '人群建议').length > 0" v-if="getSubmoduleContent(MODEL_PLACEMENT_SUGGESTION, '人群建议').length > 0"
v-for="(item, index) in getSubmoduleContent(MODEL_PLACEMENT_SUGGESTION, '人群建议')" v-for="(item, index) in getSubmoduleContent(MODEL_PLACEMENT_SUGGESTION, '人群建议')"
:key="index" :key="index"
> >
<span><img :src="getStarIcon(index)" style="width: 25px; height: 17px" />{{ item }}</span> <span><img :src="getStarIcon(index)" style="width: 25px; height: 17px" />{{ item }}</span>
</a-space> </Space>
</a-space> </Space>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
@ -111,15 +111,15 @@
<a-col :span="24"> <a-col :span="24">
<div class="overall-strategy"> <div class="overall-strategy">
<span class="placement-optimization-title">素材建议</span> <span class="placement-optimization-title">素材建议</span>
<a-space direction="vertical"> <Space direction="vertical">
<a-space <Space
v-if="getSubmoduleContent(MODEL_PLACEMENT_SUGGESTION, '素材建议').length > 0" v-if="getSubmoduleContent(MODEL_PLACEMENT_SUGGESTION, '素材建议').length > 0"
v-for="(item, index) in getSubmoduleContent(MODEL_PLACEMENT_SUGGESTION, '素材建议')" v-for="(item, index) in getSubmoduleContent(MODEL_PLACEMENT_SUGGESTION, '素材建议')"
:key="index" :key="index"
> >
<span><img :src="getStarIcon(index)" style="width: 25px; height: 17px" />{{ item }}</span> <span><img :src="getStarIcon(index)" style="width: 25px; height: 17px" />{{ item }}</span>
</a-space> </Space>
</a-space> </Space>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
@ -128,15 +128,15 @@
<a-col :span="24"> <a-col :span="24">
<div class="overall-strategy"> <div class="overall-strategy">
<span class="placement-optimization-title">投放策略建议</span> <span class="placement-optimization-title">投放策略建议</span>
<a-space direction="vertical"> <Space direction="vertical">
<a-space <Space
v-if="getSubmoduleContent(MODEL_PLACEMENT_SUGGESTION, '投放策略建议').length > 0" v-if="getSubmoduleContent(MODEL_PLACEMENT_SUGGESTION, '投放策略建议').length > 0"
v-for="(item, index) in getSubmoduleContent(MODEL_PLACEMENT_SUGGESTION, '投放策略建议')" v-for="(item, index) in getSubmoduleContent(MODEL_PLACEMENT_SUGGESTION, '投放策略建议')"
:key="index" :key="index"
> >
<span><img :src="getStarIcon(index)" style="width: 25px; height: 17px" />{{ item }}</span> <span><img :src="getStarIcon(index)" style="width: 25px; height: 17px" />{{ item }}</span>
</a-space> </Space>
</a-space> </Space>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
@ -145,6 +145,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { Space } from "ant-design-vue"
import { IconQuestionCircle } from '@arco-design/web-vue/es/icon'; import { IconQuestionCircle } from '@arco-design/web-vue/es/icon';
const props = defineProps({ const props = defineProps({

View File

@ -16,11 +16,11 @@
<NoData v-if="isEmptyData" style="height: 100px" text="暂无数据" /> <NoData v-if="isEmptyData" style="height: 100px" text="暂无数据" />
<div v-else class="month-data-div"> <div v-else class="month-data-div">
<div style="align-self: stretch"> <div style="align-self: stretch">
<a-space direction="vertical"> <Space direction="vertical">
<span v-for="(line, index) in formattedText" :key="index" :class="getCss(line.highlight)"> <span v-for="(line, index) in formattedText" :key="index" :class="getCss(line.highlight)">
{{ line.text }} {{ line.text }}
</span> </span>
</a-space> </Space>
</div> </div>
</div> </div>
</div> </div>
@ -30,6 +30,7 @@
import { IconQuestionCircle } from '@arco-design/web-vue/es/icon'; import { IconQuestionCircle } from '@arco-design/web-vue/es/icon';
import { defineProps } from 'vue'; import { defineProps } from 'vue';
import { Message } from '@arco-design/web-vue'; import { Message } from '@arco-design/web-vue';
import { Space } from "ant-design-vue"
const props = defineProps({ const props = defineProps({
overview: { overview: {

View File

@ -8,8 +8,8 @@
</span> </span>
</template> </template>
<template #operation="{ record }"> <template #operation="{ record }">
<a-space size="medium"> <Space size="medium">
<a-space> <Space>
<a-popconfirm <a-popconfirm
content="确定删除吗?" content="确定删除吗?"
type="warning" type="warning"
@ -19,18 +19,18 @@
> >
<icon-delete></icon-delete> <icon-delete></icon-delete>
</a-popconfirm> </a-popconfirm>
</a-space> </Space>
<a-space> <Space>
<Button type="primary" ghost @click="downLoad(record.file_url)" class="operation-btn">下载</Button> <Button type="primary" ghost @click="downLoad(record.file_url)" class="operation-btn">下载</Button>
<Button type="primary" ghost @click="goDetail(record.id)" class="operation-btn">详情</Button> <Button type="primary" ghost @click="goDetail(record.id)" class="operation-btn">详情</Button>
</a-space> </Space>
</a-space> </Space>
</template> </template>
</a-table> </a-table>
</view> </view>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { Button } from 'ant-design-vue'; import { Button, Space } from 'ant-design-vue';
import { IconDelete } from '@arco-design/web-vue/es/icon'; import { IconDelete } from '@arco-design/web-vue/es/icon';
import { PLATFORM_LIST } from '@/utils/platform'; import { PLATFORM_LIST } from '@/utils/platform';
import { Message } from '@arco-design/web-vue'; import { Message } from '@arco-design/web-vue';

View File

@ -8,7 +8,7 @@
@sorter-change="handleSorterChange" @sorter-change="handleSorterChange"
> >
<template #total_use_amount_label> <template #total_use_amount_label>
<a-space> <Space>
<span>本周总消耗</span> <span>本周总消耗</span>
<a-popover position="tl"> <a-popover position="tl">
<icon-question-circle /> <icon-question-circle />
@ -16,10 +16,10 @@
<p>当前周内所有投流账户的累计广告花费反映整体投放规模</p> <p>当前周内所有投流账户的累计广告花费反映整体投放规模</p>
</template> </template>
</a-popover> </a-popover>
</a-space> </Space>
</template> </template>
<template #pre_total_use_amount_chain_title> <template #pre_total_use_amount_chain_title>
<a-space> <Space>
<span>本周总消耗环比</span> <span>本周总消耗环比</span>
<a-popover position="tl"> <a-popover position="tl">
<icon-question-circle /> <icon-question-circle />
@ -27,10 +27,10 @@
<p>本周消耗金额与上周对比的变化百分比用于衡量预算投放趋势</p> <p>本周消耗金额与上周对比的变化百分比用于衡量预算投放趋势</p>
</template> </template>
</a-popover> </a-popover>
</a-space> </Space>
</template> </template>
<template #roi> <template #roi>
<a-space> <Space>
<span>ROI</span> <span>ROI</span>
<a-popover position="tl"> <a-popover position="tl">
<icon-question-circle /> <icon-question-circle />
@ -38,10 +38,10 @@
<p>投资回报率ROI= 收益 ÷ 投入成本反映整体投流账户的收益效率</p> <p>投资回报率ROI= 收益 ÷ 投入成本反映整体投流账户的收益效率</p>
</template> </template>
</a-popover> </a-popover>
</a-space> </Space>
</template> </template>
<template #ctr> <template #ctr>
<a-space> <Space>
<span>CTR</span> <span>CTR</span>
<a-popover position="tl"> <a-popover position="tl">
<icon-question-circle /> <icon-question-circle />
@ -49,7 +49,7 @@
<p>点击率CTR= 点击量 ÷ 展示量是衡量广告素材吸引力的关键指标</p> <p>点击率CTR= 点击量 ÷ 展示量是衡量广告素材吸引力的关键指标</p>
</template> </template>
</a-popover> </a-popover>
</a-space> </Space>
</template> </template>
<template #platform="{ record }"> <template #platform="{ record }">
@ -59,7 +59,7 @@
</div> </div>
</template> </template>
<template #total_use_amount="{ record }"> <template #total_use_amount="{ record }">
<a-space>{{ record.total_use_amount }}</a-space> <Space>{{ record.total_use_amount }}</Space>
</template> </template>
<template #total_use_amoun2="{ record }"> <template #total_use_amoun2="{ record }">
@ -92,6 +92,7 @@
</view> </view>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { Space } from "ant-design-vue"
import { PLATFORM_LIST } from '@/utils/platform'; import { PLATFORM_LIST } from '@/utils/platform';
const props = defineProps({ const props = defineProps({

View File

@ -9,28 +9,28 @@
<a-row class="grid-demo" :gutter="24"> <a-row class="grid-demo" :gutter="24">
<a-col :span="12"> <a-col :span="12">
<div class=""> <div class="">
<a-space direction="vertical"> <Space direction="vertical">
<span class="span-title">账户</span> <span class="span-title">账户</span>
<span class="span-content">{{ detailData?.account }}</span> <span class="span-content">{{ detailData?.account }}</span>
</a-space> </Space>
</div> </div>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<div class=""> <div class="">
<a-space direction="vertical"> <Space direction="vertical">
<span class="span-title">计划</span> <span class="span-title">计划</span>
<span class="span-content">{{detailData.plan}}</span> <span class="span-content">{{detailData.plan}}</span>
</a-space> </Space>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row class="grid-demo" :gutter="24" style="margin-top: 30px"> <a-row class="grid-demo" :gutter="24" style="margin-top: 30px">
<a-col :span="12"> <a-col :span="12">
<div class=""> <div class="">
<a-space direction="vertical"> <Space direction="vertical">
<span class="span-title">平台</span> <span class="span-title">平台</span>
<a-space> <Space>
<span <span
class="mr-8px" class="mr-8px"
v-if="detailData.platform.length > 0" v-if="detailData.platform.length > 0"
@ -39,17 +39,17 @@
<img :src="PLATFORM_LIST?.[item]?.icon" width="15" height="15" /> <img :src="PLATFORM_LIST?.[item]?.icon" width="15" height="15" />
<span class="label ml-5px">{{ PLATFORM_LIST?.[item]?.label }}</span> <span class="label ml-5px">{{ PLATFORM_LIST?.[item]?.label }}</span>
</span> </span>
</a-space> </Space>
</a-space> </Space>
</div> </div>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<div class=""> <div class="">
<a-space direction="vertical"> <Space direction="vertical">
<span class="span-title">生成时间</span> <span class="span-title">生成时间</span>
<span class="span-content">{{ detailData.created_at }}</span> <span class="span-content">{{ detailData.created_at }}</span>
</a-space> </Space>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
@ -60,21 +60,21 @@
<!-- 投放建议--> <!-- 投放建议-->
<PlacementSuggestions :optimization="aiResult.optimization"></PlacementSuggestions> <PlacementSuggestions :optimization="aiResult.optimization"></PlacementSuggestions>
<div class="ignore-export"> <div class="ignore-export">
<a-space class="down-btn"> <Space class="down-btn">
<Button type="primary" ghost :loading="exportLoading" @click="downPage"> <Button type="primary" ghost :loading="exportLoading" @click="downPage">
<template #icon> <template #icon>
<icon-download class="mr-8px"/> <icon-download class="mr-8px"/>
</template> </template>
<template #default>下载</template> <template #default>下载</template>
</Button> </Button>
</a-space> </Space>
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { reactive, ref } from 'vue'; import { reactive, ref } from 'vue';
import { Button } from 'ant-design-vue'; import { Button, Space } from 'ant-design-vue';
import MonthData from './components/month-data/index.vue'; import MonthData from './components/month-data/index.vue';
import PlacementSuggestions from './components/placement-suggestions/index.vue'; import PlacementSuggestions from './components/placement-suggestions/index.vue';
import { PLATFORM_LIST } from '@/utils/platform'; import { PLATFORM_LIST } from '@/utils/platform';

View File

@ -53,7 +53,7 @@
></PlacementSuggestions> ></PlacementSuggestions>
<div v-if="tabData == 'placement_guide'" class="ignore-export"> <div v-if="tabData == 'placement_guide'" class="ignore-export">
<a-space class="down-btn"> <Space class="down-btn">
<Button type="primary" ghost :loading="exportLoading" @click="downPage"> <Button type="primary" ghost :loading="exportLoading" @click="downPage">
<template #icon> <template #icon>
<icon-download class="mr-8px"/> <icon-download class="mr-8px"/>
@ -66,14 +66,14 @@
</template> </template>
<template #default>保存</template> <template #default>保存</template>
</Button> </Button>
</a-space> </Space>
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { reactive, ref } from 'vue'; import { reactive, ref } from 'vue';
import { Button, Tabs } from 'ant-design-vue'; import { Button, Tabs, Space } from 'ant-design-vue';
const { TabPane } = Tabs; const { TabPane } = Tabs;
import PlacementGuideList from './components/table-data/placementGuideList.vue'; import PlacementGuideList from './components/table-data/placementGuideList.vue';
import listSearchForm from './components/table-data/listSearchForm.vue'; import listSearchForm from './components/table-data/listSearchForm.vue';

View File

@ -8,7 +8,7 @@
<div class="filter-row"> <div class="filter-row">
<div class="filter-row-item"> <div class="filter-row-item">
<span class="label">内容稿件标题</span> <span class="label">内容稿件标题</span>
<a-space size="medium"> <Space size="medium">
<Input <Input
v-model:value="query.title" v-model:value="query.title"
class="!w-240px" class="!w-240px"
@ -21,11 +21,11 @@
<icon-search /> <icon-search />
</template> </template>
</Input> </Input>
</a-space> </Space>
</div> </div>
<div class="filter-row-item"> <div class="filter-row-item">
<span class="label">序号</span> <span class="label">序号</span>
<a-space size="medium"> <Space size="medium">
<Input <Input
v-model:value="query.uid" v-model:value="query.uid"
class="!w-160px" class="!w-160px"
@ -38,7 +38,7 @@
<icon-search /> <icon-search />
</template> </template>
</Input> </Input>
</a-space> </Space>
</div> </div>
<div class="filter-row-item" v-if="query.audit_status === AuditStatus.Pending"> <div class="filter-row-item" v-if="query.audit_status === AuditStatus.Pending">
<span class="label">上传时间</span> <span class="label">上传时间</span>
@ -100,7 +100,7 @@
<script setup> <script setup>
import { defineEmits, defineProps } from 'vue'; import { defineEmits, defineProps } from 'vue';
import { Button, Input, Select } from 'ant-design-vue'; import { Button, Input, Select, Space } from 'ant-design-vue';
const { Option } = Select; const { Option } = Select;
import { PLATFORMS } from '@/views/writer-material-center/components/finished-products/manuscript/check-list/constants'; import { PLATFORMS } from '@/views/writer-material-center/components/finished-products/manuscript/check-list/constants';
import { AuditStatus } from '@/views/writer-material-center/components/finished-products/constants'; import { AuditStatus } from '@/views/writer-material-center/components/finished-products/constants';

View File

@ -28,7 +28,7 @@
</div> --> </div> -->
<div class="filter-row-item"> <div class="filter-row-item">
<span class="label">序号</span> <span class="label">序号</span>
<a-space size="medium"> <Space size="medium">
<Input <Input
v-model:value="query.uid" v-model:value="query.uid"
class="!w-160px" class="!w-160px"
@ -41,7 +41,7 @@
<icon-search /> <icon-search />
</template> </template>
</Input> </Input>
</a-space> </Space>
</div> </div>
<div class="filter-row-item"> <div class="filter-row-item">
<span class="label">审核状态</span> <span class="label">审核状态</span>
@ -85,7 +85,7 @@
<script setup> <script setup>
import { defineEmits, defineProps } from 'vue'; import { defineEmits, defineProps } from 'vue';
import { Button, Input } from 'ant-design-vue'; import { Button, Input, Space } from 'ant-design-vue';
import { CHECK_STATUS } from '@/views/writer-material-center/components/finished-products/manuscript/list/constants'; import { CHECK_STATUS } from '@/views/writer-material-center/components/finished-products/manuscript/list/constants';
import CommonSelect from '@/components/common-select'; import CommonSelect from '@/components/common-select';
// import { getProjectList } from '@/api/all/propertyMarketing'; // import { getProjectList } from '@/api/all/propertyMarketing';