Compare commits

..

1 Commits

Author SHA1 Message Date
zzp 39f617967f feat(Upload): 添加文件大小限制功能并更新开发环境配置
添加 maxSize 属性以限制上传文件大小
新增 onFileChange 事件用于获取上传文件对象
更新开发环境 API 配置
2026-03-30 09:58:46 +08:00
34 changed files with 501 additions and 1648 deletions

View File

@ -14,7 +14,6 @@ ENV = development
VITE_API_URL = http://123.60.153.169:8104/api/tenant
VITE_API_WS = ws://123.60.153.169:8104/api/websocket
VITE_API_WPSADDIN = http://123.60.153.169:8101/wpsaddin/
VITE_API_CANKAO = https://cankao.cs.com.cn/apih5
# VITE_API_URL = https://test.smartjinrui.cn/api/tenant
# VITE_API_WS = wss://test.smartjinrui.cn/api/websocket
@ -27,7 +26,6 @@ VITE_API_CANKAO = https://cankao.cs.com.cn/apih5
# VITE_API_URL = http://10.127.2.206:8104/api/tenant
# VITE_API_WS = ws://10.127.2.206:8104/api/websocket
# VITE_API_WPSADDIN =http://10.127.2.206:8104/wpsaddin/
# VITE_API_CANKAO = https://cankao.cs.com.cn/apih5
# VITE_API_URL = https://aicaibao.cs.com.cn/api/tenant
# VITE_API_WS = wss://aicaibao.cs.com.cn/api/websocket

View File

@ -5,19 +5,15 @@ ENV = production
# VITE_API_URL = http://123.60.153.169:8104/api/tenant
# VITE_API_WS = ws://123.60.153.169:8104/api/websocket
# VITE_API_WPSADDIN = http://123.60.153.169:8101/wpsaddin/
# VITE_API_CANKAO = https://cankao.cs.com.cn/apih5
VITE_API_URL = https://aicaibao.cs.com.cn/api/tenant
VITE_API_WS = wss://aicaibao.cs.com.cn/api/websocket
VITE_API_WPSADDIN = https://aicaibao.cs.com.cn/wpsaddin/
VITE_API_CANKAO = https://cankao.cs.com.cn/apih5
# VITE_API_URL = https://test.smartjinrui.cn/api/tenant
# VITE_API_WS = wss://test.smartjinrui.cn/api/websocket
# VITE_API_WPSADDIN =https://test.smartjinrui.cn/wpsaddin/
# VITE_API_CANKAO = https://cankao.cs.com.cn/apih5
# VITE_API_URL = http://10.127.2.206:8104/api/tenant
# VITE_API_WS = ws://10.127.2.206:8104/api/websocket
# VITE_API_WPSADDIN =http://10.127.2.206:8104/wpsaddin/
# VITE_API_CANKAO = https://cankao.cs.com.cn/apih5

View File

@ -7,7 +7,6 @@
"scripts": {
"dev": "vite",
"build": "vite build",
"prview": "vite preview",
"lint-fix": "eslint --fix --ext .js --ext .jsx --ext .vue src/"
},
"dependencies": {

View File

@ -1,33 +0,0 @@
import request from '/@/utils/requestCankao';
// 登录
export const login = (data: any) => {
return request({
url: '/common/tenantLogin',
method: 'post',
data,
});
};
// 编辑精选接口
export const editTopNews = (data: any) => {
return request({
url: '/news/list/published',
method: 'post',
data,
});
};
/**
*
* @param data
* @id * id number
* @returns
*/
export const fetchArticleDetail = (data: any) => {
return request({
url: `/news/detail/${data.id}`,
method: 'get',
data,
});
};

View File

@ -7,10 +7,10 @@
<el-select v-model="headFilter.reportType" placeholder="请选择类型" size="default" style="width: 160px"
@change="handleChange">
<el-option v-if="headFilter.year != 2026" label="年报" :value="0" />
<el-option v-if="headFilter.year != 2025" label="年报" :value="0" />
<el-option label="半年报" :value="1" />
<el-option label="一季报" :value="2" />
<el-option label="三季报" :value="3" />
<el-option v-if="headFilter.year != 2026" label="三季报" :value="3" />
</el-select>
<el-select v-model="headFilter.type" placeholder="披露" size="default" style="width: 160px" @change="handleChange"
@ -54,9 +54,9 @@ const handleChange = () => {
}, 100);
};
// ---- 2026
// ---- 2025
const handleChange2 = (value: any) => {
if (value == 2026) {
if (value == 2025) {
const reportType = [2]; //2025 0123
if (!reportType.includes(headFilter.value.reportType)) {
headFilter.value.reportType = 2;

View File

@ -18,7 +18,7 @@
<el-option label="一季报" value="2"></el-option>
<el-option label="半年报" value="1"></el-option>
<el-option label="三季报" value="3"></el-option>
<el-option v-if="queryFrom.year != '2026'" label="年报" value="0"></el-option>
<el-option label="年报" value="0"></el-option>
<el-option label="日常公告" value="5"></el-option>
</el-select>
</el-form-item>

View File

@ -9,9 +9,7 @@
<el-form label-position="top" class="formthis" ref="formRef" :model="queryFrom" :rules="rules">
<el-form-item label="文件年份" style="width: 100%" prop="year">
<el-select v-model="queryFrom.year" placeholder="请选择年份" style="width: 100%">
<template v-for="(item, index) in YEAR" :key="index">
<el-option v-if="item.value != '2026'" :label="item.label" :value="item.value"></el-option>
</template>
<el-option :label="item.label" :value="item.value" v-for="(item, index) in YEAR" :key="index"></el-option>
</el-select>
</el-form-item>
@ -56,10 +54,11 @@
marginTop: '20px',
}"
class="upload"
:typeKua="true"
:maxSize="maxSize"
@handleAvatarSuccess="handleAvatarSuccess"
@onProgress="onUploadProgress"
@onChange="onUploadChange"
@onFileChange="onFileChange"
/>
</el-form-item>
<div
@ -91,10 +90,11 @@
marginTop: '20px',
}"
class="upload"
:typeKua="true"
:maxSize="maxSize2"
@handleAvatarSuccess="handleAvatarSuccess2"
@onProgress="onUploadProgress2"
@onChange="onUploadChange2"
@onFileChange="onFileChange2"
/>
</el-form-item>
<div
@ -173,6 +173,10 @@ const fileName = ref('');
const fileName2 = ref('');
const canSubmit = ref(true);
const canSubmit2 = ref(true);
const uploadedFile = ref(null); // 1
const uploadedFile2 = ref(null); // 2
const maxSize = ref(0); // M0
const maxSize2 = ref(0);
const reportTypeList = ref([
// {
@ -301,6 +305,7 @@ function changeReportType(type) {
// value: '5',
// },
];
maxSize.value = 10;
} else {
reportTypeList2.value = [
{
@ -308,6 +313,7 @@ function changeReportType(type) {
value: '7',
},
];
maxSize.value = 0;
}
} else {
if (queryFrom.value.reportType2 == 7) {
@ -329,6 +335,7 @@ function changeReportType(type) {
// value: '5',
// },
];
maxSize2.value = 10;
} else {
reportTypeList.value = [
{
@ -336,6 +343,7 @@ function changeReportType(type) {
value: '7',
},
];
maxSize2.value = 0;
}
}
}
@ -344,6 +352,10 @@ function onUploadChange(name: string) {
fileName.value = name;
}
function onFileChange(file: File) {
uploadedFile.value = file;
}
function onUploadProgress(percent: number) {
canSubmit.value = false;
uploadPercent.value = Number(percent).toFixed(2);
@ -364,6 +376,10 @@ function onUploadChange2(name: string) {
fileName2.value = name;
}
function onFileChange2(file: File) {
uploadedFile2.value = file;
}
function onUploadProgress2(percent: number) {
canSubmit2.value = false;
uploadPercent2.value = Number(percent).toFixed(2);
@ -385,6 +401,7 @@ async function submit() {
if (loading.value) {
return;
}
console.log('🚀 ~ submit ~ queryFrom.value.filePath:', queryFrom.value.filePath);
if (!fileName.value) {
ElMessage.error('请先上传文件');
@ -406,6 +423,20 @@ async function submit() {
return;
}
// 10M
if (queryFrom.value.reportType == 7) {
if (uploadedFile.value && uploadedFile.value.size > 10 * 1024 * 1024) {
ElMessage.error('审计报告文件大小不能超过10M');
return;
}
}
if (queryFrom.value.reportType2 == 7) {
if (uploadedFile2.value && uploadedFile2.value.size > 10 * 1024 * 1024) {
ElMessage.error('审计报告文件大小不能超过10M');
return;
}
}
await formRef.value.validate();
loading.value = true;
let subArr = [
@ -480,6 +511,8 @@ async function hideModal() {
uploadPercent.value = null;
dialogVisible.value = false;
maxSize.value = 0;
maxSize2.value = 0;
reportTypeList.value = [
// {

View File

@ -18,7 +18,7 @@
<el-option label="一季报" value="2"></el-option>
<el-option label="半年报" value="1"></el-option>
<el-option label="三季报" value="3"></el-option>
<el-option v-if="queryFrom.year != '2026'" label="年报" value="0"></el-option>
<el-option label="年报" value="0"></el-option>
<el-option label="日常公告" value="5" v-if="textCheckSwitch == 1"></el-option>
</el-select>
</el-form-item>

View File

@ -50,12 +50,12 @@ const props = defineProps({
model: {
type: Object,
},
typeKua: {
type: Boolean,
default: () => false,
}
maxSize: {
type: Number,
default: 10,
},
});
const emit = defineEmits(['handleAvatarSuccess', 'onProgress', 'onChange']);
const emit = defineEmits(['handleAvatarSuccess', 'onProgress', 'onChange', 'onFileChange']);
const uploadData = ref({});
const uploadHeader = ref({
@ -148,10 +148,13 @@ async function onBeforeUpload(res) {
ElMessage.error('请上传PDF或docx文件');
}
// 10M
if (props.typeKua && res.size > 10 * 1024 * 1024) {
// maxSize > 0
if (props.maxSize > 0) {
const maxSizeBytes = props.maxSize * 1024 * 1024;
if (res.size > maxSizeBytes) {
canGo = false;
ElMessage.error('文件大小不能超过10M');
ElMessage.error(`文件大小不能超过${props.maxSize}M`);
}
}
// let { code, data } = await getWordFlag({});
@ -190,6 +193,7 @@ function onChange(res) {
} else {
showView.value = true;
}
emit('onFileChange', res.raw);
}
function onProgress(res) {

View File

@ -8,11 +8,11 @@
<img :src="iconBack" class="back_icon" />
</div>
<router-link to="/home" v-if="route.path !== '/detail' || route.path == '/detailKua'" class="r_logo">
<div v-if="route.path !== '/detail' || route.path == '/detailKua'" class="r_logo">
<img :src="logo_hol" class="logo" />
<div class="line"></div>
<span class="text">中证智能财保</span>
</router-link>
<text>中证智能财保</text>
</div>
<div>
<span class="route_name" v-if="detailName && route.path == '/detail'" :key="route.path"> {{ detailName }}</span>
</div>
@ -269,7 +269,6 @@ onBeforeRouteUpdate((to) => {
display: flex;
align-items: center;
margin-left: 20px;
text-decoration: none;
.logo {
width: 140px;
@ -284,7 +283,7 @@ onBeforeRouteUpdate((to) => {
margin-right: 12px;
}
.text {
text {
color: #000000;
font-family: 'Noto Sans CJK SC';
font-size: 18px;
@ -293,7 +292,6 @@ onBeforeRouteUpdate((to) => {
line-height: 26px;
letter-spacing: 0.56px;
white-space: nowrap;
text-decoration: none;
}
}

View File

@ -577,7 +577,7 @@ onMounted(() => {
redirect: '/example',
// component: () => import('/@/views/example/index.vue'),
meta: {
title: '产品文档',
title: '相关材料',
},
});
}

View File

@ -87,68 +87,7 @@ export const dynamicRoutes: Array<RouteRecordRaw> = [
// icon: 'iconfont icon-shouye',
},
},
{
path: '/realtimeInfo',
name: 'realtimeInfo',
component: () => import('/@/views/pages/cankao/index.vue'),
meta: {
title: '海外资讯',
isLink: '',
isHide: true,
isKeepAlive: true,
isAffix: false,
isIframe: false,
roles: [
'admin',
'common',
'subCommon',
'subCenter',
'Director',
'CSRC',
'QJJG',
'DFJG',
'JYS',
'QJJGC',
'DFJGC',
'JYSC',
'operate',
'Bank',
'SubBank',
],
// icon: 'iconfont icon-shouye',
},
},
{
path: '/indexPC',
name: 'indexPC',
component: () => import('/@/views/pages/cankao/indexPC.vue'),
meta: {
title: '海外资讯',
isLink: '',
isHide: true,
isKeepAlive: false,
isAffix: false,
isIframe: false,
roles: [
'admin',
'common',
'subCommon',
'subCenter',
'Director',
'CSRC',
'QJJG',
'DFJG',
'JYS',
'QJJGC',
'DFJGC',
'JYSC',
'operate',
'Bank',
'SubBank',
],
// icon: 'iconfont icon-shouye',
},
},
{
path: '/caixun',
name: 'caixun',

View File

@ -62,7 +62,7 @@ export const useDashboard = defineStore('dashboard', {
daterange: '',
headFilter: {
year: '2025',
reportType: 0,
reportType: 1,
type: type,
},
firstFilter: {

View File

@ -1,90 +0,0 @@
import axios, { AxiosInstance } from 'axios';
import { ElMessage, ElMessageBox } from 'element-plus';
import { Session } from '/@/utils/storage';
import qs from 'qs';
import Cookies from 'js-cookie';
// 配置新建一个 axios 实例
const service: AxiosInstance = axios.create({
baseURL: import.meta.env.VITE_API_CANKAO,
timeout: 50000,
headers: { 'Content-Type': 'application/json' },
paramsSerializer: {
serialize(params) {
return qs.stringify(params, { allowDots: true });
},
},
});
// 添加请求拦截器
service.interceptors.request.use(
(config) => {
config.headers!['auth-token'] = window.token;
// config.headers!['auth-token'] = `${Cookies.get('token')}`;
// config.headers!['auth-token'] = `${Session.get('token')}`;
if (window.phone) {
config.headers!['phone'] = window.phone;
} else {
config.headers!['phone'] = window.username;
}
// 在发送请求之前做些什么 token
// if (Session.get('token')) {
// config.headers!['auth-token'] = window.token;
// // config.headers!['auth-token'] = `${Cookies.get('token')}`;
// // config.headers!['auth-token'] = `${Session.get('token')}`;
// config.headers!['phone'] = window.phone;
// }
return config;
},
(error) => {
// 对请求错误做些什么
return Promise.reject(error);
}
);
// 添加响应拦截器
service.interceptors.response.use(
(response) => {
// 对响应数据做点什么
const res = response.data;
if (res.code && res.code !== 200) {
// `token` 过期或者账号已在别处登录
// if (res.code === 401 || res.code === 402 || res.code === 4001) {
// Session.clear(); // 清除浏览器全部临时缓存
// window.location.href = '/'; // 去登录页
// ElMessageBox.alert('登录已过期,请重新登录', '提示', {})
// .then(() => {})
// .catch(() => {});
// } else {
// ElMessage.error(res.msg);
// }
return Promise.reject(service.interceptors.response);
} else {
return res;
}
},
(error) => {
console.log('🚀 ~ error:', error);
// 对响应错误做点什么
if (error.message.indexOf('timeout') != -1) {
ElMessage.error('网络超时');
} else if (error.message == 'Network Error') {
ElMessage.error('网络连接错误');
} else if (error.message.indexOf('token') != -1) {
Session.clear(); // 清除浏览器全部临时缓存
window.location.href = '/'; // 去登录页
} else {
if (error.response.data) {
ElMessage.error(error.response.statusText);
} else {
Session.clear(); // 清除浏览器全部临时缓存
window.location.href = '/'; // 去登录页
ElMessage.error('接口路径找不到');
}
}
return Promise.reject(error);
}
);
// 导出 axios 实例
export default service;

View File

@ -1,22 +1,18 @@
<template>
<div class="container">
<div class="r_logo">
<router-link to="/home" class="home-link">
<img :src="logo_hol" class="logo" />
<div class="line"></div>
<text>中证智能财保</text>
</router-link>
<div class="top_menu">
<div :class="['item', { 'login-item': isLogin }]" @click="goLogout">
<div class="item" @click="goLogout">
<text>产品</text>
<!-- <div class="bottom_line"></div> -->
</div>
<div :class="['item active', { 'login-item': isLogin }]">
<text>产品文档</text>
<div v-if="!isLogin" class="bottom_line"></div>
</div>
<div v-if="!isLogin" class="top_right" @click="goLogin">
<text>登录</text>
<div class="item">
<text>相关材料</text>
<div class="bottom_line"></div>
</div>
</div>
</div>
@ -28,12 +24,7 @@
<div class="img">
<img :src="item.img" alt="" />
</div>
<div class="name">
<div class="text">{{ item.name }}</div>
<el-tooltip content="点击下载">
<el-button :icon="Download" size="mini" circle @click.stop="handleDownload(item)" />
</el-tooltip>
</div>
</div>
</div>
</div>
@ -48,7 +39,7 @@
</template>
<script setup>
import { ref, computed } from 'vue';
import { ref } from 'vue';
import logo_hol from '/@/assets/logo_hol.png';
import example1 from '/@/assets/images/example_1.png';
import example2 from '/@/assets/images/example_2.png';
@ -57,8 +48,6 @@ import example4 from '/@/assets/images/example_4.png';
import example5 from '/@/assets/images/example_5.png';
import Detail from './detail/index.vue';
import router from '/@/router';
import { Download } from '@element-plus/icons-vue';
import { Session } from '/@/utils/storage';
const data = ref([
{
@ -128,10 +117,6 @@ const vidoeUrl = ref();
const title = ref('');
const poster = ref('');
const isLogin = computed(() => {
return !!Session.get('token');
});
const open = (item) => {
if (item.type === 'pdf') {
openPdf(item);
@ -165,81 +150,25 @@ const handleClose = () => {
const goLogout = () => {
router.push('/login');
};
//
const handleDownload = async (item) => {
if (!item || !item.url) {
console.warn('下载失败:缺少 URL 或数据格式不正确', item);
return;
}
const downloadUrl = item.url.trim();
if (!downloadUrl) {
console.warn('下载失败URL 为空值');
return;
}
try {
const response = await fetch(downloadUrl);
if (!response.ok) {
throw new Error(`下载失败,状态码:${response.status}`);
}
const blob = await response.blob();
const urlObj = window.URL.createObjectURL(blob);
const fileExt = (() => {
const urlPath = new URL(downloadUrl).pathname;
const part = urlPath.split('.').pop() || '';
return part.toLowerCase();
})();
const safeName = (item.name || 'download').replace(/\s+/g, '_').replace(/[\\/:*?"<>|]+/g, '');
const fileName = fileExt ? `${safeName}.${fileExt}` : safeName;
const a = document.createElement('a');
a.href = urlObj;
a.download = fileName;
a.style.display = 'none';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
window.URL.revokeObjectURL(urlObj);
} catch (error) {
console.error('下载异常:', error);
}
};
//
function goLogin() {
router.push('/loginReal');
}
</script>
<style scoped lang="scss">
.container {
background: url('/@/assets/images/bk_charts.png') no-repeat center top;
background-size: cover;
width: 100%;
height: 100vh;
overflow: auto !important;
background: url('/@/assets/images/bk_charts1.png') #f5f7fd no-repeat center 56px;
background-size: 100% auto;
}
.r_logo {
display: flex;
justify-content: space-between;
align-items: center;
background-color: #fff;
height: 56px;
padding-left: 20px;
height: 64px;
padding: 0 32px;
border-bottom: 1px solid var(--next-border-color-light);
.home-link {
display: flex;
align-items: center;
text-decoration: none;
}
.logo {
width: 140px;
height: 32px;
@ -301,14 +230,8 @@ function goLogin() {
height: 144px;
}
.name {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 12px;
}
.text {
padding: 8px 12px;
font-size: 14px;
color: rgba(0, 0, 0, 0.85);
white-space: nowrap;
@ -372,8 +295,10 @@ function goLogin() {
.top_menu {
height: 100%;
margin-left: 50px;
display: flex;
align-items: center;
gap: 50px;
margin-left: 100px;
.item {
height: 100%;
@ -381,30 +306,6 @@ function goLogin() {
display: flex;
align-items: center;
cursor: pointer;
margin-right: 50px;
}
.login-item {
display: flex;
text-align: center;
justify-content: center;
margin-right: 20px;
text {
font-size: 16px;
color: #000000;
letter-spacing: 0;
line-height: 24px;
font-weight: 400;
cursor: pointer;
min-width: 60px;
white-space: nowrap;
}
&.active {
text {
color: #007aff;
}
}
}
.bottom_line {
@ -414,49 +315,5 @@ function goLogin() {
position: absolute;
bottom: 0;
}
.top_right {
display: flex;
text-align: center;
justify-content: center;
align-items: center;
width: 86px;
height: 100%;
background: #0779ff;
cursor: pointer;
text {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 14px;
color: #ffffff;
line-height: 20px;
text-align: left;
font-style: normal;
}
}
}
.r_menu {
display: flex;
margin-right: 30px;
.menu_item {
font-size: 16px;
color: #000000;
letter-spacing: 0;
line-height: 24px;
font-weight: 400;
margin-right: 20px;
cursor: pointer;
min-width: 60px;
white-space: nowrap;
display: flex;
text-align: center;
justify-content: center;
}
.active {
color: #007aff;
}
}
</style>

View File

@ -217,8 +217,7 @@ onUnmounted(() => {
min-width: 1400px;
min-height: calc(100vh - 56px);
margin: 0 auto;
background: url('/@/assets/images/bk_charts1.png') #f5f7fd no-repeat center 0;
background-size: 100% auto;
background: url('/@/assets/images/bk_charts.png') no-repeat center 0;
}
.main {

View File

@ -216,8 +216,7 @@ onMounted(() => {
min-width: 1400px;
min-height: calc(100vh - 56px);
margin: 0 auto;
background: url('/@/assets/images/bk_charts1.png') #f5f7fd no-repeat center 0;
background-size: 100% auto;
background: url('/@/assets/images/bk_charts.png') no-repeat center 0;
}
.main {

View File

@ -164,9 +164,7 @@ onMounted(() => {
min-width: 1400px;
min-height: calc(100vh - 56px);
margin: 0 auto;
// background: url('/@/assets/images/bk_charts.png') no-repeat center 0;
background: url('/@/assets/images/bk_charts1.png') #f5f7fd no-repeat center 0;
background-size: 100% auto;
background: url('/@/assets/images/bk_charts.png') no-repeat center 0;
}
.main {

View File

@ -173,8 +173,7 @@ onMounted(() => {
min-width: 1400px;
min-height: calc(100vh - 56px);
margin: 0 auto;
background: url('/@/assets/images/bk_charts1.png') #f5f7fd no-repeat center 0;
background-size: 100% auto;
background: url('/@/assets/images/bk_charts.png') no-repeat center 0;
}
.main {

View File

@ -44,7 +44,7 @@ onMounted(() => {
<style scoped lang="scss">
.list {
width: 100%;
height: 100%;
// height: 100%;
padding-right: 30px;
}

View File

@ -1,15 +1,12 @@
<template>
<div class="all" v-show="hadRole">
<el-image :src="topBg" mode="widthFix" class="topbg" v-if="isCommon" />
<el-image :src="topBgJg" mode="widthFix" class="topbg" v-else />
<!-- :class="{ 'scale-down': isScaleDown }" -->
<!-- height: isCommon ? '80vh' : '90vh' -->
<div class="content">
<div>
<el-breadcrumb separator="/" class="font16">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>智能财讯</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="top" v-if="isCommon">
<div class="content" :style="{ top: isCommon ? '20vh' : '16vh' }">
<div class="top" v-if="isCommon" :class="{ 'scale-down': isScaleDown }">
<div class="top_left">
<el-image :src="logo" mode="widthFix" class="logo" />
<div class="sub_info">
@ -40,7 +37,7 @@
</div>
<!-- maxHeight: isCommon ? '70vh' : '90vh' -->
<div class="page_content">
<div class="page_content" :class="{ 'scale-down': isScaleDown }" :style="{ marginTop: isScaleDown ? '0px' : '0px' }">
<div class="left">
<div class="r_list_big_title" v-if="!isCommon">
<text class="list_big_title">智能财讯</text>
@ -51,7 +48,7 @@
<el-input
v-if="!isCommon"
:style="{ margin: '40px 0 20px 0' }"
:style="{ marginTop: isCommon ? '0px' : '40px' }"
:prefix-icon="Search"
placeholder="请输入公司证券代码或公司简称搜索"
class="input"
@ -62,14 +59,22 @@
@keyup.enter="sreachLeft"
/>
<div v-loading="loadingLeft" class="r_list-box">
<div v-loading="loadingLeft" style="margin-top: 30px">
<div class="r_list">
<CaixunList v-if="caixunList.length > 0" :data="caixunList" @openQrDialog="openQrDialog"> </CaixunList>
<CaixunList
v-if="caixunList.length > 0"
:data="caixunList"
:style="{ marginTop: isCommon ? '0px' : '0px' }"
@openQrDialog="openQrDialog"
>
</CaixunList>
<div v-else class="r_empty">
<el-image :src="emptyImg" class="empty"></el-image>
<text class="empty_text">无搜索结果</text>
</div>
</div>
</div>
<div class="pagination" v-if="caixunList.length > 0">
<el-pagination
style="width: 100%"
@ -86,7 +91,6 @@
</el-pagination>
</div>
</div>
</div>
<div class="right">
<div class="r_list_big_title">
@ -96,15 +100,15 @@
<div class="line"></div>
</div>
<!-- <div class="right_tabs">
<div class="right_tabs">
<div :class="['tab_item', { active: tabIndex === 0 }]" @click="tabIndexChange(0)">H5</div>
<div :class="['tab_item', { active: tabIndex === 1 }]" @click="tabIndexChange(1)">视频</div>
</div> -->
</div>
<el-input
v-if="!isCommon"
:style="{ marginTop: '40px' }"
:style="{ marginTop: isCommon ? '0px' : '20px' }"
:prefix-icon="Search"
placeholder="请输入公司证券代码或公司简称搜索"
class="input"
@ -114,10 +118,10 @@
@keyup.enter="sreachRight"
/>
<div v-loading="loadingRight" class="right_list_box">
<div v-loading="loadingRight">
<div
v-if="rightList.length > 0"
style="flex: 1 1 0;gap: 10px; margin-top: 20px; display: flex; flex-direction: column; height: 100%; overflow-y: auto; padding-right: 10px"
style="gap: 10px; margin-top: 20px; display: flex; flex-direction: column; height: 53vh; overflow-y: auto; padding-right: 10px"
>
<div v-for="(item, index) in rightList" :key="index" class="right_item">
<div style="display: flex">
@ -135,6 +139,7 @@
<el-image :src="emptyImg" class="empty"></el-image>
<text class="empty_text">请联系中证报经营老师生成企业的可视化财讯</text>
</div>
</div>
<div class="pagination" style="height: 40px">
<el-pagination
@ -156,7 +161,6 @@
</div>
</div>
</div>
</div>
<el-dialog v-model="dialogVisible" title="微信扫一扫分享" width="230">
<div class="dialog">
@ -173,6 +177,8 @@
import { ref, onMounted, nextTick, computed, onUnmounted, reactive } from 'vue';
import { Session } from '/@/utils/storage';
import { NextLoading } from '/@/utils/loading';
import topBg from '../../../assets/caixun/home_bg_qiye.png';
import topBgJg from '../../../assets/caixun/home_bg_jianguan.png';
import logo from '../../../assets/caixun/company_logo.png';
import { Search } from '@element-plus/icons-vue';
import CaixunList from './components/CaixunList.vue';
@ -201,7 +207,7 @@ const handleResize = () => {
isScaleDown.value = window.innerWidth < SCALE_THRESHOLD;
};
const isCommon = ref(Session.get('roleName') == 'common' && Session.get('roleName') == 'subCommon');
const isCommon = ref(Session.get('roleName') == 'common' || Session.get('roleName') == 'subCommon');
const tabIndex = ref(0);
const info = ref({
company_name: Session.get('userData')?.companySimpleName,
@ -392,7 +398,7 @@ onMounted(() => {
getLeftList();
getRightList();
// getRightTotal();
getRightTotal();
if (
(Session.get('roleName') == 'common' || Session.get('roleName') == 'subCommon') &&
(!Session.get('userData').smartInfoSwitch || (Session.get('userData').smartInfoSwitch && Session.get('userData').smartInfoSwitch == 0))
@ -408,40 +414,50 @@ onUnmounted(() => {
</script>
<style scoped lang="scss">
$maxWidth: 2000px;
/* 缩小状态 */
.scale-down {
/* 缩放内容 */
transform: scale(var(--scale-ratio, 0.9));
/* 计算缩放后的偏移量,使内容居中 */
transform-origin: top center;
/* 调整容器宽度,避免边缘被截断 */
width: calc(1 / var(--scale-ratio, 0.9) * 100%);
margin: 0 auto;
}
.all {
width: 100%;
min-width: 950px;
height: calc(100vh - 60px);
min-height: 600px;
width: 100vw;
height: 100vh;
background: #f5f7fd;
overflow: hidden;
background: url('/@/assets/images/bk_charts1.png') #f5f7fd no-repeat center 0;
background-size: 100% auto;
// padding-bottom: 24px;
padding: 24px 32px;
box-sizing: border-box;
}
.topbg {
width: 100%;
height: auto;
}
.content {
display: flex;
box-sizing: border-box;
flex-direction: column;
height: 100%;
overflow: auto;
position: fixed;
left: 50%;
transform: translate(-50%, 0);
}
.top {
// width: 80vw;
width: 100%;
// height: 117px;
width: 80vw;
min-width: 1200px;
max-width: $maxWidth;
height: 117px;
background: linear-gradient(180deg, #e7effa 0%, #fafbfb 100%);
box-shadow: 0px 2px 12px 0px rgba(186, 193, 205, 0.5), inset 0px 1px 0px 0px rgba(255, 255, 255, 0.5);
border-radius: 8px;
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 0;
box-sizing: border-box;
margin-top: 20px;
.top_left {
display: flex;
@ -450,10 +466,11 @@ onUnmounted(() => {
}
.logo {
width: 90px;
height: 90px;
width: 118px;
height: 118px;
background: #e46713;
margin-left: 30px;
margin-top: -20px;
}
.sub_info {
@ -535,23 +552,19 @@ onUnmounted(() => {
}
.page_content {
width: 100%;
height: 100%;
flex: 1 1 0;
width: 80vw;
max-width: $maxWidth;
min-width: 1200px;
display: flex;
gap: 15px;
margin-top: 20px;
overflow: hidden;
margin-top: 15px;
.left {
width: 70%;
height: 100%;
border-radius: 10px;
padding: 30px 30px;
padding-bottom: 0;
background-color: white;
box-sizing: border-box;
display: flex;
flex-direction: column;
}
.input {
@ -568,16 +581,11 @@ onUnmounted(() => {
font-style: normal;
}
.r_list-box {
flex: 1 1 0;
height: 100%;
display: flex;
flex-direction: column;
}
.r_list {
flex: 1 1 0;
overflow-y: auto;
// height: 57vh;
// overflow: auto;
max-height: 55vh;
overflow-y: scroll;
}
.pagination {
@ -592,18 +600,9 @@ onUnmounted(() => {
.right {
width: 30%;
height: 100%;
background-color: white;
border-radius: 10px;
display: flex;
flex-direction: column;
.right_list_box {
flex: 1 1 0;
height: 100%;
display: flex;
flex-direction: column;
}
flex: 1;
}
.r_line {
@ -624,7 +623,6 @@ onUnmounted(() => {
.r_list_big_title {
height: 50px;
flex: 0 0 50px;
}
.list_big_title {

View File

@ -1,405 +0,0 @@
<template>
<div class="pc_all">
<div class="content">
<div class="mb24">
<el-breadcrumb separator="/" class="font16">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>海外资讯</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="top_title">
<text class="pageTitle">编辑<text class="strong">精选</text></text>
<div class="r_input">
<input
v-model="form.keyword"
placeholder="请输入搜索内容"
class="input"
@keyup.enter="getNewsList"
@clear="getNewsList"
@blur="getNewsList"
/>
<div class="input_button" @click="getNewsList">搜索</div>
</div>
</div>
<div class="line"></div>
<div class="r_list">
<div class="list_item" v-for="(item, index) in newsList" :key="index">
<div class="list_item_content">
<text class="item_title" @click="goDetail(item)" v-html="item.title"></text>
<text class="item_summary" v-html="item.summary"></text>
<div class="item_bottom">
<div>
<text class="time">中国证券报</text>
<text class="time" style="margin-left: 15px">{{ formatTime(item.time) }}</text>
</div>
</div>
</div>
</div>
</div>
<div class="pagination" style="width: 100%; display: flex; justify-content: flex-end" v-if="newsList && newsList.length > 0">
<el-pagination
popper-class="popper-style"
background
v-model:current-page="currentPage"
:page-size="form.size"
layout="total, sizes, prev, pager, next, jumper"
:total="form.total"
@current-change="currentChange"
@size-change="sizeChange"
>
</el-pagination>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, onUnmounted, reactive } from 'vue';
import { editTopNews } from '/@/api/cankao';
import { useRoute, useRouter } from 'vue-router';
const pageSizes = ref([10, 20, 30, 40]);
const form = reactive({
keyword: '',
page: 1,
size: 10,
total: 10,
});
const currentPage = ref(form.page);
const route = useRoute();
const router = useRouter();
const pageType = ref(4);
const newsList = ref([]);
function formatTime(timestamp) {
const date = new Date(Number(timestamp).toString().length === 10 ? timestamp * 1000 : timestamp);
return (
[date.getFullYear(), (date.getMonth() + 1).toString().padStart(2, '0'), date.getDate().toString().padStart(2, '0')].join('-') +
' ' +
[date.getHours().toString().padStart(2, '0'), date.getMinutes().toString().padStart(2, '0'), date.getSeconds().toString().padStart(2, '0')].join(
':'
)
);
}
async function getNewsList() {
//
let { code, data } = await editTopNews({
...form,
});
if (code == 200) {
newsList.value = data.list;
form.total = data.total;
data.list.forEach((item) => {
item._title_ = item.title;
item.summary = item.summary.replace(form.keyword, "<span style='color: #007aff'>" + form.keyword + '</span>');
item.title = item.title.replace(form.keyword, "<span style='color: #007aff'>" + form.keyword + '</span>');
});
}
}
function goDetail(item) {
let id = null;
if (pageType.value != 4) {
id = item.news_id;
} else {
id = item.id;
}
router.push({
path: '/indexPC',
query: {
id: id,
type: pageType.value,
},
});
}
function currentChange(page) {
form.page = page;
getNewsList();
}
function sizeChange(size) {
form.page = 1;
currentPage.value = 1;
form.size = size;
getNewsList();
}
onMounted(() => {
getNewsList();
});
</script>
<style scoped lang="scss">
.pc_all {
background: #f5f7fd;
width: 100vw;
min-height: 100vh;
display: flex;
flex-direction: column;
// align-items: center;
}
.content {
background-color: white;
// width: 55vw;
width: 100vw;
min-height: 100vh;
padding: 24px 32px;
}
.top_title {
display: flex;
align-items: center;
.pageTitle {
font-family: AlibabaPuHuiTiM;
font-size: 26px;
color: #1a1a1a;
font-weight: bold;
.strong {
color: #007aff;
}
}
.title_icon {
width: 90px;
height: 25px;
margin-left: 10px;
}
}
.line {
width: 100%;
height: 1px;
background-color: #f0f0f0;
margin-top: 25px;
}
.r_list {
display: flex;
flex-direction: column;
}
.list_item {
display: flex;
min-height: 100px;
padding: 15px 0;
border-bottom: 1px solid #f6f6f6;
margin-top: 15px;
.r_list_item_num {
width: 50px;
display: flex;
text-align: center;
}
.list_item_num {
margin-top: 5px;
width: 20px;
height: 20px;
display: flex;
text-align: center;
justify-content: center;
align-items: center;
font-family: PingFangSC, PingFang SC;
font-weight: 500;
font-size: 18px;
color: #ffffff;
padding-bottom: 2.5px;
}
.num1 {
background: linear-gradient(168deg, #ffb505 0%, #fdcf1b 100%);
border-radius: 3px;
}
.num2 {
background: linear-gradient(169deg, #a9c3e3 0%, #92b2e0 100%);
border-radius: 3px;
}
.num3 {
background: linear-gradient(169deg, #f2996e 0%, #f77741 100%);
border-radius: 3px;
}
.nol_num {
font-family: PingFangSC, PingFang SC;
font-weight: 500;
font-size: 20px;
color: #93a2b3;
line-height: 28px;
text-align: left;
font-style: normal;
}
.list_item_content {
display: flex;
flex-direction: column;
flex: 1;
}
.item_title:hover {
color: #007aff;
}
.item_title {
font-family: PingFangSC, PingFang SC;
font-weight: bold;
font-size: 20px;
color: #1a1a1a;
cursor: pointer;
}
.item_summary {
font-family: 'Microsoft YaHei', 'PingFangSC', 'PingFang SC';
font-weight: normal;
font-size: 16px;
color: #333333;
margin-top: 10px;
/* 必须:限制内容不溢出容器 */
overflow: hidden;
/* 必须:超出部分显示省略号 */
text-overflow: ellipsis;
/* 必须将元素设置为webkit弹性盒模型用于控制行数 */
display: -webkit-box;
/* 关键限制显示的行数这里设为2行 */
-webkit-line-clamp: 2;
/* 必须:设置弹性盒的排列方向为垂直(让文本换行) */
-webkit-box-orient: vertical;
/* 可选调整行高和容器高度确保刚好容纳2行文本 */
line-height: 1.5;
/* 行高 */
max-height: 3em;
/* 2行总高度 = 行高 × 21.5×2=3 */
}
}
.item_bottom {
display: flex;
justify-content: space-between;
margin-top: 15px;
margin-bottom: 5px;
.time {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 14px;
color: #919191;
line-height: 20px;
text-align: left;
font-style: normal;
}
.score {
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 18px;
color: #ffa800;
line-height: 25px;
text-align: right;
font-style: normal;
}
}
.search_btn {
border: none;
display: flex;
width: 56px;
height: 44px;
padding: 8px 15px;
justify-content: center;
align-items: center;
gap: 10px;
flex-shrink: 0;
border-radius: 8px;
background: #007aff;
margin-right: 5px;
}
.input {
border: none;
flex: 1;
margin-left: 10px;
}
.input_button {
display: flex;
width: 140px;
height: 100%;
// padding: 8px 15px;
justify-content: center;
align-items: center;
gap: 10px;
flex-shrink: 0;
border-radius: 0 10px 10px 0;
background: #007aff;
color: white;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 18px;
color: #ffffff;
line-height: 25px;
text-align: left;
font-style: normal;
cursor: pointer;
}
.r_input {
background-color: white;
border-radius: 10px;
border: 1px solid #e3e3e3;
flex: 1;
height: 52px;
display: flex;
align-items: center;
margin-left: 30px;
margin-top: 3px;
:deep(.input::placeholder) {
color: #ccc;
font-family: 'PingFang SC';
font-size: 16px;
font-style: normal;
font-weight: 400;
line-height: normal;
}
:deep(.el-input__wrapper) {
box-shadow: 0 0 0 #fff;
}
}
.pagination {
margin-top: 24px;
width: 100%;
display: flex;
text-align: center;
justify-content: center;
align-items: center;
// :deep(.el-pager li){
// border: 1px solid #ccc;
// background: transparent;
// }
}
:deep(.el-select-dropdown__item.is-selected) {
color: #007aff;
}
</style>

View File

@ -1,301 +0,0 @@
<template>
<div class="pc_all">
<!-- <PageTop></PageTop> -->
<div class="content">
<!-- <div class="top" @click="goBack">
<el-icon><ArrowLeft /></el-icon>
<text>返回列表</text>
</div>
<div class="line"></div> -->
<div class="mb30">
<el-breadcrumb separator="/" class="font16">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item :to="{ path: '/realtimeInfo' }">海外资讯</el-breadcrumb-item>
<el-breadcrumb-item>{{ infoData?.title }}</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="title">
{{ infoData?.title }}
</div>
<div class="sub_title">
<text class="srouse"> {{ infoData?.tag }}</text>
<text class="time"> {{ infoData?.publishTime }}</text>
</div>
<div class="abstract" v-if="infoData?.summary">
{{ infoData?.summary }}
</div>
<!-- 两个标签 start -->
<div class="r_tag_two">
<div style="display: flex" v-if="infoData?.industryLabels && infoData?.industryLabels.length > 0">
<text class="tag_title">行业分类</text>
<div class="r_tags">
<div class="tag" style="background-color: #fff9ec; color: #ffb100" v-for="(item, index) in infoData?.industryLabels" :key="index">
{{ item }}
</div>
</div>
</div>
<div style="display: flex" v-if="infoData?.conceptLabels && infoData?.conceptLabels.length > 0">
<text class="tag_title">概念标签</text>
<div class="r_tags">
<div class="tag" style="background-color: #f5f8fe; color: #007aff" v-for="(item, index) in infoData?.conceptLabels" :key="index">
{{ item }}
</div>
</div>
</div>
</div>
<!-- 两个标签 end -->
<div class="text" v-html="infoData.content" style="white-space: pre-wrap"></div>
<!-- <div class="text">
<text >{{ infoData.content }}</text>
</div> -->
</div>
</div>
</template>
<script setup lang="ts">
import { onMounted, ref } from 'vue';
import { fetchArticleDetail } from '/@/api/cankao';
import { Session } from '/@/utils/storage';
import { useRoute, useRouter } from 'vue-router';
import { ArrowLeft } from '@element-plus/icons-vue';
const router = useRouter();
const route = useRoute();
function goBack() {
// uni.navigateBack();
// router.back();
router.push({
path: '/realtimeInfo',
});
// uni.navigateTo({
// url: '/pages/realtimeInfo/pc/index?type=' + type.value,
// });
}
const type = ref(0);
const infoData = ref({});
onMounted(async () => {
console.log('🚀 ~ router:', route.query.type);
if (route.query.type) {
type.value = route.query.type;
}
// uni.showLoading();
const res = await fetchArticleDetail({
id: route.query?.id,
});
console.log('🚀 ~ res:', res);
// uni.hideLoading();
if (res.code === 200) {
infoData.value = res.data;
window.document.title = res.data.title;
}
});
</script>
<style lang="scss" scoped>
.pc_all {
background: #f5f7fd;
width: 100vw;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
}
.content {
background-color: white;
width: 100%;
// min-width: 1200px;
min-height: 100vh;
padding: 24px 32px;
background-color: #fff;
box-sizing: border-box;
}
.page_top {
width: 100vw;
height: 60px;
background-color: white;
margin-bottom: 15px;
box-shadow: 0 2.5px 1px rgba($color: #6d6d6d, $alpha: 0.1);
display: flex;
justify-content: center;
align-items: center;
.logo {
width: 95px;
height: 25px;
margin-right: 25px;
}
.r_menu {
width: 55vw;
min-width: 1250px;
height: 100%;
display: flex;
align-items: center;
}
.r_menu_item {
display: flex;
flex-direction: column;
height: 100%;
position: relative;
justify-content: center;
align-items: center;
}
.menu_item {
font-family: PingFangSC, PingFang SC;
font-weight: bold;
font-size: 16px;
color: #1a1a1a;
}
.line {
width: 64px;
height: 4px;
background: #007aff;
position: absolute;
bottom: 0;
}
}
.top {
width: 100%;
height: 60px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-start;
// padding-left: 15px;
.icon_back {
width: 17px;
height: 19px;
}
text {
font-family: PingFangSC, PingFang SC;
font-weight: normal;
font-size: 19px;
color: #919191;
text-align: left;
font-style: normal;
margin-left: 5px;
cursor: pointer;
}
}
.line {
width: 100%;
height: 4px;
background: #f0f0f0;
margin-bottom: 20px;
}
.title {
font-family: PingFangSC, PingFang SC;
font-weight: bold;
font-size: 24px;
color: #1a1a1a;
margin-top: 12px;
}
.sub_title {
display: flex;
justify-content: space-between;
margin-top: 5px;
.srouse {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 16px;
color: #919191;
}
.time {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 16px;
color: #919191;
}
}
.abstract {
font-family: 'Microsoft YaHei', 'PingFangSC', 'PingFang SC';
font-weight: 400;
font-size: 16px;
color: #666666;
line-height: 26px;
text-align: left;
font-style: normal;
background: #f5f8fe;
border: 1px solid #e3ecfd;
padding: 15px;
border-radius: 10px;
margin-top: 25px;
}
.r_tag_two {
display: flex;
margin-top: 20px;
justify-content: space-between;
}
.r_tags {
display: flex;
gap: 10px;
.tag {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 13px;
color: #ffb100;
line-height: 18px;
text-align: left;
font-style: normal;
padding: 2.5px 10px;
border-radius: 5px;
white-space: nowrap;
}
}
.tag_title {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 14px;
color: #999999;
line-height: 20px;
text-align: left;
font-style: normal;
white-space: nowrap;
}
.text {
font-family: 'Microsoft YaHei', 'PingFangSC', 'PingFang SC';
font-weight: 400;
font-size: 16px;
color: #333;
line-height: 28px;
text-align: left;
font-style: normal;
margin-top: 35px;
}
</style>

View File

@ -1,7 +1,7 @@
<template>
<el-tabs v-model="fileType" class="demo-tabs" @tab-click="handleTabClick">
<el-tab-pane label="单文件检校" :name="0"></el-tab-pane>
<!-- <el-tab-pane label="跨文件检校(公测)" :name="1"></el-tab-pane> -->
<el-tab-pane label="跨文件检校(公测)" :name="1"></el-tab-pane>
</el-tabs>
<TableComponents

View File

@ -1,11 +1,5 @@
<template>
<div class="all" v-loading="loading">
<div class="breadcrumb">
<el-breadcrumb separator="/" class="font16">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>业务看板</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="tabs">
<div
v-for="item in tabList"
@ -532,8 +526,7 @@ $minWidth: 68.75rem;
$contentWidth: 85vw;
.all {
background: url('/@/assets/images/bk_charts1.png') #f5f7fd no-repeat center 0;
background-size: 100% auto;
background-color: #f5f7fd;
min-height: 100vh;
display: flex;
flex-direction: column;
@ -545,14 +538,6 @@ $contentWidth: 85vw;
overflow: auto;
}
.breadcrumb {
width: $contentWidth;
min-width: $minWidth;
display: flex;
justify-content: flex-start;
gap: 20px;
}
.tabs {
width: $contentWidth;
min-width: $minWidth;

View File

@ -124,8 +124,7 @@ onUnmounted(() => {
min-width: 1400px;
min-height: calc(100vh - 56px);
margin: 0 auto;
background: url('/@/assets/images/bk_charts1.png') #f5f7fd no-repeat center 0;
background-size: 100% auto;
background: url('/@/assets/images/bk_charts.png') no-repeat center 0;
box-sizing: border-box;
}
.w1400 {

View File

@ -1,11 +1,5 @@
<template>
<div class="container">
<div class="mb20">
<el-breadcrumb separator="/" class="font16">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>智能信披库</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="nav-box-wrap">
<div class="nav-box">
<template v-for="item in navList" :key="item.index">
@ -28,11 +22,7 @@
</template>
<div class="setup-btn">
<ZButton btn-width="111px" @btnClick="dialogVisible = true">
<div class="btn_content">
<text>设置关注公司</text>
</div>
</ZButton>
<el-button size="default" type="primary" @click="dialogVisible = true">设置关注公司</el-button>
</div>
</div>
</div>
@ -91,7 +81,6 @@
remote
placeholder="公司简称、证券代码"
size="large"
clearable
:remote-method="searchCompanyFn"
@change="handleQueryData"
/>
@ -408,10 +397,14 @@
placeholder="公司简称、证券代码"
style="width: 176px"
size="default"
:suffix-icon="Search"
v-model="dialogFilterOpt.keyword"
v-model="dialogFilterOpt.company"
@keyup.enter="handleDialogSelect"
>
<template #suffix>
<el-icon class="el-input__icon">
<Search />
</el-icon>
</template>
</el-input>
</div>
<div>
@ -472,7 +465,7 @@
@confirm="handleDevFavCompany(scope.row.id)"
>
<template #reference>
<el-button text style="color: #409eff">删除</el-button>
<el-button size="defaultt" text type="danger">删除</el-button>
</template>
</el-popconfirm>
</template>
@ -515,7 +508,6 @@ import { useRouter, useRoute } from 'vue-router';
import icon_choose from '/@/assets/icon_choose.png';
import { doMaiDian, searchCompany } from '/@/api/api';
import { getDictList } from '/@/api/api';
import ZButton from '/@/components/ZButton/index.vue';
const route = useRoute();
const router = useRouter();
@ -1103,10 +1095,9 @@ onMounted(async () => {
.container {
width: 100%;
margin: 0 auto;
background: url('/@/assets/images/bk_charts1.png') #f5f7fd no-repeat center 0;
background-size: 100% auto;
background: url('/@/assets/images/bk_charts1.png') no-repeat center 0;
// padding-bottom: 24px;
padding: 20px 32px 32px;
padding: 32px;
min-height: calc(100vh - 56px);
}
@ -1381,9 +1372,9 @@ onMounted(async () => {
box-shadow: 0 0 0px rgba(0, 0, 0, 0.1);
}
}
// :deep(.el-input__wrapper) {
// padding-right: 2px;
// }
:deep(.el-input__wrapper) {
padding-right: 2px;
}
:deep(.el-select--large .el-select__wrapper) {
min-height: 32px;
@ -1444,18 +1435,4 @@ onMounted(async () => {
:deep(.el-select__placeholder.is-transparent) {
color: #ccc;
}
.btn_content {
display: flex;
align-items: center;
text {
color: #ffffff;
text-align: center;
font-size: 14px;
font-style: normal;
font-weight: 500;
line-height: 18.2px;
}
}
</style>

View File

@ -2,12 +2,7 @@
<div>
<Esign :signUrl="signUrl" v-if="!isSign"></Esign>
<div class="container" v-else>
<div class="mb20">
<el-breadcrumb separator="/" class="font16">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>电子签</el-breadcrumb-item>
</el-breadcrumb>
</div>
<text class="big_title"> 文件签署管理 </text>
<div class="table_bk">
<el-form class="el_form" style="width: 100%; display: flex; justify-content: space-between" @submit.native.prevent>
@ -349,9 +344,8 @@ onMounted(async () => {
width: 100%;
min-height: calc(100vh - 56px);
margin: 0 auto;
padding: 24px 32px;
background: url('/@/assets/images/bk_charts1.png') #f5f7fd no-repeat center 0;
background-size: 100% auto;
background: url('/@/assets/images/bk_charts.png') no-repeat center 0;
padding: 30px 11%;
}
.big_title {

View File

@ -9,24 +9,22 @@
<div class="line"></div>
<text>中证智能财保</text>
</div>
</div>
<div class="h100 flex">
<div class="top_menu">
<div class="item">
<text>产品</text>
<div class="bottom_line"></div>
</div>
<div class="item" @click="goExample">
<text>产品文档</text>
<text>相关材料</text>
<!-- <div class="bottom_line"></div> -->
</div>
</div>
</div>
<div class="top_right" @click="goLogin">
<text>登录</text>
</div>
</div>
</div>
<!-- 顶部 end -->
<!-- -->
<div class="r_banner">
@ -44,16 +42,17 @@
</el-carousel-item>
</el-carousel>
<div :style="{ width: '100vw', height: '15px', backgroundColor: tabIndex == 0 ? 'white' : '#F7F8FA' }"></div>
<div :style="{ width: '100vw', height: '15px', backgroundColor: tabIndex == 0 ? 'white' : '#F7F8FA' }">
</div>
<div class="tab" :style="{ backgroundColor: tabIndex == 0 ? '#fff' : '#F7F8FA' }">
<!-- <div class="tab_item" @click="tabIndex = 0">
<div class="tab_item" @click="tabIndex = 0">
<div style="height: 100%; display: flex; align-items: center">
<img v-if="tabIndex == 0" src="../../../assets/logout/box_time_press.png" />
<img v-else src="../../../assets/logout/box_time_normal.png" />
<text :class="{ active: tabIndex == 0 }">定期报告</text>
</div>
<div class="tab_bottom_line" v-if="tabIndex == 0"></div>
</div> -->
</div>
<div class="tab_item" @click="tabIndex = 1">
<div style="height: 100%; display: flex; align-items: center">
<img v-if="tabIndex == 1" src="../../../assets/logout/news_normal_press.png" />
@ -64,10 +63,12 @@
</div>
</div>
<div class="r_list" :class="{ 'scale-down': isScaleDown }" :style="{ backgroundColor: tabIndex == 0 ? '#fff' : '#F7F8FA' }">
<!-- <Dingqibaogao v-if="tabIndex == 0" :data="dingqiList" :total="total"
@getData="getLogoutReportPageFn"> </Dingqibaogao> -->
<Yuqingkanban v-if="tabIndex == 1" :data="yuqingkanban" :total="total" @getData="getLogoutYqPageFn"> </Yuqingkanban>
<div class="r_list" :class="{ 'scale-down': isScaleDown }"
:style="{ backgroundColor: tabIndex == 0 ? '#fff' : '#F7F8FA' }">
<Dingqibaogao v-if="tabIndex == 0" :data="dingqiList" :total="total"
@getData="getLogoutReportPageFn"> </Dingqibaogao>
<Yuqingkanban v-if="tabIndex == 1" :data="yuqingkanban" :total="total" @getData="getLogoutYqPageFn">
</Yuqingkanban>
</div>
</div>
</div>
@ -108,7 +109,7 @@ const handleResize = () => {
isScaleDown.value = window.innerWidth < SCALE_THRESHOLD;
};
function getData() {}
function getData() { }
const bannerList = ref([
{
@ -260,8 +261,8 @@ onUnmounted(() => {
display: flex;
align-items: center;
background-color: #fff;
height: 56px;
padding: 0 0 0 20px;
height: 64px;
padding: 0 0 0 32px;
border-bottom: 1px solid var(--next-border-color-light);
justify-content: space-between;
@ -324,9 +325,10 @@ onUnmounted(() => {
.top_menu {
height: 100%;
margin-right: 50px;
margin-left: 50px;
display: flex;
gap: 50px;
margin-left: 100px;
.item {
height: 100%;

View File

@ -1,33 +1,32 @@
<template>
<div class="container">
<div class="all" :class="{ 'scale-down': isScaleDown }">
<!-- <img src="../../../assets/homenew/web_bg.png" class="web_bg scale-1" /> -->
<img src="../../../assets/homenew/web_bg.png" class="web_bg scale-1" />
<div class="left">
<div class="content_nol">
<Title title="企业舆情" />
<div
class="r_esg"
v-if="
Session.get('roleName') == 'common' ||
Session.get('roleName') == 'subCommon' ||
Session.get('roleName') == 'subCenter' ||
Session.get('roleName') == 'operate' ||
Session.get('roleName') == 'Director' ||
Session.get('roleName') == 'Bank' ||
Session.get('roleName') == 'SubBank'
"
>
<img src="../../../assets/homenew/ESGbanner_pic.png" class="esg_bg" />
<div class="yuqing">
<div class="yuqing_left">
<text class="yqleft_title">舆情服务</text>
<text class="yqleft_content">中证智能财保舆情服务为企业提供负面舆情信息竞对舆情行业板块舆情信息</text>
<text class="yqleft_button" @click="goYuqing">点击进入</text>
</div>
<div class="yuqing_right">
<template v-if="yqList && yqList.length > 0">
<div class="yqright_item" v-for="(item, index) in yqList" :key="index">
<div @click="clickYuqing(item)" style="display: flex; align-items: center">
<img src="../../../assets/homenew/tag_blue.png" />
<text class="yqright_title">{{ item.subject }}</text>
</div>
<text class="yqright_time">{{ item.postTime }}</text>
</div>
</template>
<div v-else class="empty" style="margin-top: 40px">
<img src="../../../assets/homenew/nonews_icon.png" class="icon_empty" />
<text class="empty_text">暂无最新信息</text>
</div>
<div class="esg_content">
<div>
<text class="esg_title blue">ESG服务</text>
<text class="esg_title">重磅推出</text>
</div>
<text class="esg_sub_title">
中证智能财保ESG数字服务作为一个创新的数字化工具采用与国际接轨的算法逻辑为企业提供360°ESG综合服务企业通过平台的
ESG自评自检自诊断的功能模块可以了解自身ESG综合表现情况获得较为全面的诊断报告
</text>
<div class="esg_button" @click="goEsg">点击进入</div>
</div>
</div>
@ -47,12 +46,12 @@
<div class="menus">
<div style="display: flex; align-items: center; margin-top: 20px">
<div v-for="(item, index) in menuStepList" :key="index">
<div v-for="(item, index) in menuStepList">
<TopWithArrow :title="item.title" :index="index" :size="menuStepList.length" />
</div>
</div>
<div style="display: flex; gap: 10px; margin-top: 15px">
<div v-for="(item, index) in menuItem" class="menu_items" :key="index">
<div v-for="(item, index) in menuItem" class="menu_items">
<MenuItem :title="item.title" :name="item.name" :index="index" :supported="item.supported" :item="item" />
</div>
</div>
@ -60,32 +59,27 @@
</div>
<div class="content_nol">
<Title title="ESG评测" />
<Title title="企业舆情" />
<div
class="r_esg"
v-if="
Session.get('roleName') == 'common' ||
Session.get('roleName') == 'subCommon' ||
Session.get('roleName') == 'subCenter' ||
Session.get('roleName') == 'operate' ||
Session.get('roleName') == 'Director' ||
Session.get('roleName') == 'Bank' ||
Session.get('roleName') == 'SubBank'
"
>
<img src="../../../assets/homenew/ESGbanner_pic.png" class="esg_bg" />
<div class="esg_content">
<div>
<text class="esg_title blue">ESG自评测</text>
<text class="esg_title">重磅推出</text>
<div class="yuqing">
<div class="yuqing_left">
<text class="yqleft_title">舆情服务</text>
<text class="yqleft_content">中证智能财保舆情服务为企业提供负面舆情信息竞对舆情行业板块舆情信息</text>
<text class="yqleft_button" @click="goYuqing">点击进入</text>
</div>
<div class="yuqing_right">
<div v-if="yqList && yqList.length > 0" class="yqright_item" v-for="(item, index) in yqList" :key="index">
<div @click="clickYuqing(item)" style="display: flex; align-items: center">
<img src="../../../assets/homenew/tag_blue.png" />
<text class="yqright_title">{{ item.subject }}</text>
</div>
<text class="yqright_time">{{ item.postTime }}</text>
</div>
<div v-else class="empty" style="margin-top: 40px">
<img src="../../../assets/homenew/nonews_icon.png" class="icon_empty" />
<text class="empty_text">暂无最新信息</text>
</div>
<text class="esg_sub_title">
中证智能财保ESG数字服务作为一个创新的数字化工具采用与国际接轨的算法逻辑为企业提供360°ESG综合服务企业通过平台的
ESG自评自检自诊断的功能模块可以了解自身ESG综合表现情况获得较为全面的诊断报告
</text>
<div class="esg_button" @click="goEsg">点击进入</div>
</div>
</div>
</div>
@ -110,7 +104,7 @@
: '/dashboard',
}"
isBig
style="margin-top: 36px"
style="margin-top: 20px"
/>
</div>
@ -124,7 +118,7 @@
"
style="max-width: 300px; margin-top: 20px; margin-bottom: 20px; box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1)"
>
<moudle title="海外资讯" @jumpUrl="jumpHaiwaiUrl" v-if="Session.get('userData').accountType != 1" paddingBottom="0px">
<moudle title="海外行情" @jumpUrl="jumpHaiwaiUrl" v-if="Session.get('userData').accountType != 1" paddingBottom="0px">
<RankList
:newsList="newsList"
:needExp="false"
@ -177,9 +171,8 @@
</div>
</div>
<!-- <div>
<div>
<img src="../../../assets/homenew/advertisement_pic_2.png" class="right_ad" />
</div> -->
</div>
</div>
</div>
@ -506,13 +499,11 @@ function jumpHaiwaiUrl() {
}
}
// getCankaoUrl({}).then((res) => {
// if (res.code == 200) {
// window.open(res.data);
// }
// });
router.push('/realtimeInfo')
getCankaoUrl({}).then((res) => {
if (res.code == 200) {
window.open(res.data);
}
});
}
const newsList = ref([]);
@ -578,33 +569,24 @@ onUnmounted(() => {
/* 计算缩放后的偏移量,使内容居中 */
transform-origin: top center;
/* 调整容器宽度,避免边缘被截断 */
// width: calc(1 / var(--scale-ratio, 0.8) * 100%);
width: calc(1 / var(--scale-ratio, 0.8) * 100%);
margin: 0 auto;
}
.scale-1 {
/* 缩放内容 */
transform: scale(1);
transform: scale(1.5);
/* 计算缩放后的偏移量,使内容居中 */
/* 调整容器宽度,避免边缘被截断 */
margin: 0 auto;
width: 100vw;
}
.container {
width: 100%;
background: url('/@/assets/homenew/web_bg.png') #f9fbff no-repeat center 0;
background-size: 100% auto;
}
.all {
display: flex;
position: relative;
text-align: center;
justify-content: center;
padding-bottom: 20px;
// background: url('/@/assets/homenew/web_bg.png') #f9fbff no-repeat center 0;
// background-size: 100% auto;
.left {
display: flex;
@ -817,7 +799,6 @@ onUnmounted(() => {
box-shadow: 0 0 20px rgba($color: #000000, $alpha: 0.1);
border-radius: 10px;
margin-top: 20px;
background-color: #fff;
.yuqing_left {
width: 574px;

View File

@ -1,12 +1,7 @@
<template>
<div class="container">
<div class="head">
<div class="mb20">
<el-breadcrumb separator="/" class="font16">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>智能检校</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="main-title">财报检校试验</div>
<div class="sub-title">仅供试验使用此处的财报分析不计入业务看板统计</div>
</div>
<div class="main">
@ -774,9 +769,6 @@ async function reSendFile(row) {
<style lang="scss" scoped>
.container {
width: 100%;
margin: 0 auto;
background: url('/@/assets/images/bk_charts1.png') #f5f7fd no-repeat center 0;
background-size: 100% auto;
}
:deep(.el-form-item--large .el-form-item__label) {
@ -826,10 +818,9 @@ async function reSendFile(row) {
width: 100%;
min-height: calc(100vh - 65px);
margin: 0 auto;
// background: url('/@/assets/images/bk_charts.png') no-repeat center 0;
background: url('/@/assets/images/bk_charts.png') no-repeat center 0;
// padding-bottom: 24px;
padding: 24px 32px;
box-sizing: border-box;
padding: 24px;
.main-title {
font-family: 'Alip-SemiBold';

View File

@ -1,12 +1,6 @@
<template>
<div class="container">
<div class="">
<div class="">
<el-breadcrumb separator="/" class="font16">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>智能检校</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="w1400">
<!-- 时间滑动 start -->
<Slide v-if="historyData.length > 0" :data="historyData" @doDetail="goDetail" />
<!-- 时间滑动 end -->
@ -708,9 +702,7 @@ onUnmounted(() => {
min-width: 1400px;
min-height: calc(100vh - 56px);
margin: 0 auto;
background: url('/@/assets/images/bk_charts1.png') #f5f7fd no-repeat center 0;
background-size: 100% auto;
padding: 24px 32px;
background: url('/@/assets/images/bk_charts.png') no-repeat center 0;
}
:deep(.el-form-item--large .el-form-item__label) {
@ -723,6 +715,7 @@ onUnmounted(() => {
box-shadow: 0 12px 32px -2px rgba(206, 208, 211, 0.8);
border-radius: 0 4px 4px 4px;
padding: 0 24px 24px;
margin: 24px 0;
}
.btn_content {

View File

@ -1,22 +1,9 @@
<template>
<div class="container" v-show="hadRole">
<div class="bk"></div>
<div :class="{ 'scale-down': isScaleDown }">
<div class="r_title">
<div class="mb30">
<el-breadcrumb separator="/" class="font16">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item v-permissions="['common', 'subCommon']">企业舆情</el-breadcrumb-item>
<el-breadcrumb-item
v-permissions="['Director', 'subCenter', 'operate', 'Director', 'Bank', 'SubBank', 'QJJG', 'QJJGC', 'JYS', 'JYSC', 'DFJG', 'DFJGC']"
:to="{ path: '/yuqingFLS' }"
>企业舆情</el-breadcrumb-item
>
<el-breadcrumb-item
v-permissions="['Director', 'subCenter', 'operate', 'Director', 'Bank', 'SubBank', 'QJJG', 'QJJGC', 'JYS', 'JYSC', 'DFJG', 'DFJGC']"
>企业舆情详情</el-breadcrumb-item
>
</el-breadcrumb>
</div>
<text class="title">企业舆情</text>
<div class="r_input">
<input
v-if="form.pageType == 0"
@ -122,11 +109,11 @@
</div>
</div>
<div class="right">
<!-- <moudle title="海外资讯" @jumpUrl="jumpHaiwaiUrl" v-if="Session.get('userData').accountType != 1" paddingBottom="0px">
<moudle title="海外行情" @jumpUrl="jumpHaiwaiUrl" v-if="Session.get('userData').accountType != 1" paddingBottom="0px">
<RankList :newsList="newsList" :needExp="false" style="margin-top: 15px"></RankList>
</moudle> -->
</moudle>
<moudle title="概念题材" :type="2" :companyId="companyId" :style="{ marginTop: Session.get('userData').accountType != 1 ? '0' : '0px' }">
<moudle title="概念题材" :type="2" :companyId="companyId" :style="{ marginTop: Session.get('userData').accountType != 1 ? '30px' : '0px' }">
<wordcloud :data="cloudWordList" style="margin-top: 20px"></wordcloud>
</moudle>
@ -167,8 +154,6 @@ import icon_4 from '/@/assets/yuqingNew/icon_4.png';
import { useRoute } from 'vue-router';
import { Session } from '/@/utils/storage';
import RankList from './component/RankList.vue'; //
import JSON5 from 'json5';
import router from '/@/router';
// 1024px
const SCALE_THRESHOLD = 1480;
@ -392,6 +377,7 @@ async function getWangkuangJinduiFn() {
jingduiList.value = data;
}
}
import JSON5 from 'json5';
// -
const cloudWordList = ref([]);
async function getWangkuangCloudWordFn() {
@ -471,13 +457,11 @@ function jumpHaiwaiUrl() {
}
}
// getCankaoUrl({}).then((res) => {
// if (res.code == 200) {
// window.open(res.data);
// }
// });
router.push('/realtimeInfo')
getCankaoUrl({}).then((res) => {
if (res.code == 200) {
window.open(res.data);
}
});
}
const hadRole = ref(true);
@ -553,9 +537,20 @@ $list_max_width: 1400px;
justify-content: center;
flex-direction: column;
align-items: center;
padding-top: 24px;
background: url('/@/assets/images/bk_charts1.png') #f5f7fd no-repeat center 0;
background-size: 100% auto;
padding-top: 60px;
}
.bk {
width: 100%;
background: url('/@/assets/yuqingNew/home_bg.png') no-repeat center 0;
height: 300px;
display: flex;
flex-direction: column;
text-align: center;
justify-content: center;
align-items: center;
position: absolute;
top: 0;
}
.r_input {

View File

@ -1,13 +1,7 @@
<template>
<div class="container">
<div class="mb20">
<el-breadcrumb separator="/" class="font16">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>企业舆情</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div ref="boxRef" class="all" v-loading="loading">
<div class="all" v-loading="loading">
<div class="bk">
<text class="title">企业舆情</text>
<div class="r_input">
<el-dropdown trigger="click" @command="handleCommand" style="margin-left: 15px">
<div class="el-dropdown-link" style="cursor: pointer">
@ -68,7 +62,6 @@
@mouseleave="mouseLeave(index)"
@click="goDetail(item)"
:class="{ hover: item.isHovered }"
:style="{ width: styleWidth + 'px', height: styleHeight + 'px' }"
>
<div>
<div class="r_list_title" style="height: 25px">
@ -120,11 +113,10 @@
<ZxList ref="zxListRef"></ZxList>
</div>
</div>
</div>
</template>
<script setup>
import { ref, reactive, onMounted, computed } from 'vue';
import { ref, reactive, onMounted } from 'vue';
import { useRouter } from 'vue-router';
import { getYqcompanyList, getYqCheck } from '/@/api/api';
import { ElMessage } from 'element-plus';
@ -245,62 +237,20 @@ function handleCommand(value) {
}
}
//
const boxRef = ref(null);
const style = reactive({
width: 285,
height: 162,
margin: 20,
});
const styleWidth = computed(() => {
console.log('output >>>>> boxRef.value?.clientWidth >= 1440',boxRef.value?.clientWidth);
if (boxRef.value?.clientWidth >= 1080) {
const width = (boxRef.value?.clientWidth - 3 * style.margin) / 4;
style.width = width;
}
return Math.floor(style.width);
});
const styleHeight = computed(() => {
if (boxRef.value?.clientWidth >= 1080) {
const width = (boxRef.value?.clientWidth - 3 * style.margin) / 4;
style.height = (width / 285) * 162;
}
return Math.floor(style.height);
});
//
onMounted(() => {
// NextLoading.done();
getData();
window.addEventListener('resize', () => {
style.width = 285;
style.height = 162;
});
});
</script>
<style scoped lang="scss">
@import url('/@/theme/page/page.scss');
.container {
width: 100%;
margin: 0 auto;
background: url('/@/assets/images/bk_charts1.png') #f5f7fd no-repeat center 0;
background-size: 100% auto;
// padding-bottom: 24px;
padding: 20px 32px 32px;
min-height: calc(100vh - 56px);
box-sizing: border-box;
}
.all {
// width: 100vw;
min-height: 100vh;
width: 100vw;
height: 100vh;
background-color: #f2f3f5;
display: flex;
flex-direction: column;
text-align: center;
@ -309,7 +259,8 @@ onMounted(() => {
.bk {
width: 100%;
// height: 140px;
background: url('/@/assets/images/bk_charts.png') no-repeat center 0;
height: 200px;
display: flex;
flex-direction: column;
text-align: center;
@ -405,19 +356,16 @@ input::placeholder {
}
.page {
// max-width: calc(285px * 4 + 20px * 3);
// width: calc(285px * 4 + 20px * 3);
width: 100%;
padding: 0 40px;
max-width: calc(285px * 4 + 20px * 3);
width: calc(285px * 4 + 20px * 3);
}
.list {
display: flex;
flex-wrap: wrap;
gap: 20px;
// max-width: calc(285px * 4 + 20px * 3);
// width: calc(285px * 4 + 20px * 3);
padding: 30px 0;
max-width: calc(285px * 4 + 20px * 3);
width: calc(285px * 4 + 20px * 3);
}
.list_item {
@ -425,8 +373,8 @@ input::placeholder {
flex-direction: column;
background: url('/@/assets/yuqingNew/card_bg.png') no-repeat center 0;
background-size: 100% 100%;
// width: 285px;
// height: 162px;
width: 285px;
height: 162px;
padding: 20px 30px;
gap: 15px;
box-shadow: 0 0 10px rgba($color: #515151, $alpha: 0.2);
@ -487,7 +435,7 @@ input::placeholder {
text-align: left;
font-style: normal;
width: 100%;
width: 237px;
height: 32px;
color: #5f6063;
background: #ffffff;