Compare commits

...

4 Commits

  1. 60
      jeecgboot-vue3/src/api/mainHome/index.ts
  2. 2
      jeecgboot-vue3/src/router/helper/mainOut.ts
  3. 109
      jeecgboot-vue3/src/views/demo/main-home/components/NewsList/index.vue
  4. 66
      jeecgboot-vue3/src/views/demo/main-home/components/expertManagement/index.vue
  5. 7
      jeecgboot-vue3/src/views/demo/main-home/components/homePage/index.vue
  6. 44
      jeecgboot-vue3/src/views/demo/main-home/components/innovationVouchers/index.vue
  7. 52
      jeecgboot-vue3/src/views/demo/main-home/components/instrumentInfo/index.vue
  8. 41
      jeecgboot-vue3/src/views/demo/main-home/components/newsInfo/index.vue
  9. 34
      jeecgboot-vue3/src/views/demo/main-home/components/projectDeclaration/index.vue
  10. 2
      jeecgboot-vue3/src/views/demo/main-home/index.vue

@ -40,3 +40,63 @@ export function getindexaward(params) {
params,
});
}
//
export function getindexcolumn() {
return defHttp.request({
url: '/cms/front/getColumnList',
method: 'GET',
});
}
//
export function getindexarticle(params) {
return defHttp.request({
url: '/cms/front/getArticleListByColumn',
method: 'GET',
params,
});
}
//
export function getindexallarticle() {
return defHttp.request({
url: '/cms/front/cmsfindallnews',
method: 'GET',
});
}
//
export function getindexarticleitem(params) {
return defHttp.request({
url: '/cms/front/getByArticleTitle',
method: 'GET',
params,
});
}
//
export function getindexnews() {
return defHttp.request({
url: '/cms/front/getindexnew',
method: 'GET',
});
}
//
export function getindexexpert(params) {
return defHttp.request({
url: '/expert/expert/listadminCMS',
method: 'GET',
params
});
}
//
export function getindexexpertdetail(params) {
return defHttp.request({
url: '/expert/expert/CMSexpinfo',
method: 'GET',
params,
});
}
//
export function getindexexperttype() {
return defHttp.request({
url: '/expert/expert/directioncalListCMS',
method: 'GET',
});
}

@ -90,7 +90,7 @@ export const mainOutRoutes: AppRouteModule[] = [
meta: {
title: '新闻详情',
ignoreAuth: true,
hidden: false
hidden: true
},
},

@ -1,31 +1,97 @@
<template>
<div class="container">
<div class="news-list">
<div class="item" v-for="i in 10" :key="i">
<div class="left"><div class="year">2024-10</div><div class="day">10</div></div>
<div class="right">
<div class="title">新闻标题</div>
<div class="editor">编辑 | 无糖</div>
<div class="description"
>小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本</div
<div class="item" v-for="i in newList" :key="i">
<div class="left"
><div class="year">{{ i.publishTime.split('-')[0] }}-{{ i.publishTime.split('-')[1] }}</div
><div class="day">{{ i.publishTime.split(' ')[0].split('-')[2] }}</div></div
>
<div class="get-info">查看详情</div>
<div class="right">
<div class="title">{{ i.title }}</div>
<div class="editor">{{ i.source }}</div>
<div class="description"><div v-html="i.info"></div></div>
<div class="get-info" @click="onGetInfo(i)">查看详情</div>
</div>
</div>
<!-- 分页 -->
<div class="pagination"> <Pagination :current="current" :pageSize="page.pageSize" :total="total" show-less-items @change="onChange" /></div>
</div>
<!-- 栏目 -->
<div class="column-list">
<div class="title">栏目列表</div>
<div class="list">
<div class="item">全部</div>
<div class="item">项目申报</div>
<div class="item">新闻列表</div>
<div class="item" @click="getindexallarticleEvent">全部</div>
<div class="item" v-for="i in newColumnList" :key="i.id" @click="getMyNewsList(i)">{{ i.name }}</div>
<!-- <div class="item">项目申报</div>
<div class="item">新闻列表</div> -->
</div>
</div>
</div>
</template>
<script setup></script>
<script setup>
import { Pagination } from 'ant-design-vue';
import { getindexcolumn, getindexarticle, getindexallarticle } from '@/api/mainHome';
import { ref } from 'vue';
import { useRouter } from 'vue-router';
const router = useRouter();
const current = ref(1);
const total = ref(0);
const page = ref({
pageSize: 10,
pageNo: 1,
});
const newColumnList = ref([]);
const getindexcolumnEvent = async () => {
const res = await getindexcolumn();
console.log(res);
newColumnList.value = res;
};
getindexcolumnEvent();
const getMyNewsList = (item) => {
console.log(item);
getindexarticleEvent(item.id);
};
const newList = ref([]);
const getindexarticleEvent = async (id) => {
columnId.value = id;
const res = await getindexarticle({ columnId: id, ...page.value });
console.log(res);
newList.value = res.records;
total.value = res.total;
};
const columnId = ref('');
const onChange = (page) => {
console.log(page);
page.pageNo = page;
if (columnId.value) {
getindexarticleEvent(columnId.value);
} else {
getindexallarticleEvent();
}
};
const getindexallarticleEvent = async () => {
const res = await getindexallarticle();
console.log(res);
newList.value = res.records;
total.value = res.total;
};
getindexallarticleEvent();
//
const onGetInfo = (item) => {
console.log(item);
router.push({
path: '/main-home/newsInfo',
query: {
id: item.id,
},
})
}
</script>
<style scoped lang="less">
.container {
@ -35,13 +101,15 @@
display: flex;
margin-top: 50px;
.news-list {
position: relative;
width: calc(1200px - 415px);
margin-right: 30px;
min-height: 755px;
padding-bottom: 80px;
.item {
display: flex;
width: 100%;
border-bottom: 2px solid #CCC;
border-bottom: 2px solid #ccc;
padding-bottom: 45px;
margin-top: 40px;
.left {
@ -120,10 +188,21 @@
color: #555;
height: 50px;
line-height: 50px;
border-bottom: 1px solid #D9D9D9;
border-bottom: 1px solid #d9d9d9;
cursor: pointer;
}
}
}
}
.pagination {
// background-color: #fff;
position: absolute;
bottom: -20px;
left: 50%;
transform: translateX(-50%);
margin-top: 20px;
height: 70px;
display: flex;
justify-content: center;
}
</style>

@ -1,24 +1,73 @@
<template>
<div class="container">
<div class="filter">
<div :class="activeIndex === index ? 'item avtive' : 'item'" @click="activeIndex = index" v-for="(i, index) in filterList" :key="i">{{
i
<div :class="activeIndex === index ? 'item avtive' : 'item'" @click="filterType(i.id, index)" v-for="(i, index) in typeList" :key="i">{{
i.name
}}</div>
</div>
<div class="user-list">
<div class="item" v-for="i in 10" :key="i">
<div class="item" v-for="i in expertList" :key="i.id">
<div class="avater"></div>
<div class="name">张三</div>
<div class="description">专家介绍</div>
<div class="name">{{ i.realname }}</div>
<div class="description">{{ i.expinfo || '暂无' }}</div>
</div>
</div>
<!-- 分页 -->
<div class="pagination"> <Pagination :current="page.pageNo" :pageSize="page.pageSize" :total="total" show-less-items @change="onChange" /></div>
</div>
</template>
<script setup>
import { ref } from 'vue';
import { getindexexpert ,getindexexperttype} from '@/api/mainHome';
import { Pagination } from 'ant-design-vue';
const activeIndex = ref(0);
const filterList = ref(['全部', '科技学科领域', '高新技术', '化学精密', '其他筛选']);
const expertList = ref([]);
const current = ref(1);
const total = ref(0);
const page = ref({
pageSize: 8,
pageNo: 1,
directioncal:''
});
const getList = async () => {
const data = page.value
for (const key in data) {
if (!data[key]) {
delete data[key];
}
}
const res = await getindexexpert(data);
expertList.value = res.records;
total.value = res.total;
};
getList();
const onChange = (pageIndex) => {
console.log(pageIndex);
page.value.pageNo = pageIndex;
getList()
};
const typeList = ref([]);
const getTypeList = async () => {
const res = await getindexexperttype();
typeList.value = res;
typeList.value.unshift({ id: 0, name: '全部' });
};
getTypeList();
const filterType = (id, index) => {
if(id === 0) {
page.value.directioncal = '';
getList();
return
}
activeIndex.value = index;
page.value.directioncal = id;
getList();
}
</script>
<style scoped lang="less">
@ -48,6 +97,7 @@
grid-template-columns: repeat(4, minmax(100px, 1fr));
grid-template-rows: repeat(auto - fill, minmax(50px, 100px));
gap: 15px;
min-height: 500px;
.item {
position: relative;
width: 287px;
@ -89,4 +139,10 @@
}
}
}
.pagination {
// background-color: #fff;
height: 70px;
display: flex;
justify-content: center;
}
</style>

@ -136,6 +136,7 @@
<script setup>
import { ref, reactive } from 'vue';
import { vue3ScrollSeamless } from 'vue3-scroll-seamless';
import {getindexnews} from '/@/api/mainHome';
let list = reactive([1, 2, 3, 4, 5, 6]);
const classOptions = {
limitMoveNum: 2,
@ -145,6 +146,12 @@
'https://ts1.cn.mm.bing.net/th/id/R-C.987f582c510be58755c4933cda68d525?rik=C0D21hJDYvXosw&riu=http%3a%2f%2fimg.pconline.com.cn%2fimages%2fupload%2fupc%2ftx%2fwallpaper%2f1305%2f16%2fc4%2f20990657_1368686545122.jpg&ehk=netN2qzcCVS4ALUQfDOwxAwFcy41oxC%2b0xTFvOYy5ds%3d&risl=&pid=ImgRaw&r=0',
'https://tse1-mm.cn.bing.net/th/id/OIP-C.DOOxGtkUiW8QevWtAxsRtAHaEK?rs=1&pid=ImgDetMain',
]);
const getlist = async () => {
const res = await getindexnews();
console.log(res);
}
getlist()
</script>
<style scoped lang="less">

@ -1,16 +1,17 @@
<template>
<div class="container">
<a-table :dataSource="indexaward" :columns="columns">
<template #bodyCell="{ column }">
<a-table :dataSource="indexaward" :columns="columns" :pagination="pagination">
<!-- <template #bodyCell="{ column }">
<div v-if="column.key === 'setting'">
<a-button type="text" primary>查看详情</a-button>
</div>
</template>
</template> -->
</a-table>
</div>
</template>
<script setup>
import axios from 'axios';
import { ref } from 'vue';
const columns = [
@ -35,18 +36,43 @@
key: 'cxqCode',
},
{
title: '操作',
key: 'setting',
title: '申请单位',
dataIndex: 'proDept_dictText',
key: 'proDept_dictText',
},
];
const handlePageChange = (page, pageSize) => {
//
console.log(page, pageSize);
pagination.value.current = page;
getindexawardEvent()
};
const pagination = ref({
//
pageSize: 10, //
showTotal: (total) => `${total}`, //
current: 1, //
total: 0, //
onChange: handlePageChange, //
});
const indexaward = ref([]);
const getindexawardEvent = async () => {
console.log(111);
const data = {
pageNo: pagination.value.current,
pageSize: pagination.value.pageSize,
};
// fetch(import.meta.env.VITE_GLOB_API_URL_CXQ + '/innovationvoucher/innovationVoucher/listcms',data)
// .then((res) => res.json())
// .then((res) => (indexaward.value = res.result.records));
// };
const res = await axios.get(import.meta.env.VITE_GLOB_API_URL_CXQ + '/innovationvoucher/innovationVoucher/listcms', { params: data });
console.log(res);
fetch(import.meta.env.VITE_GLOB_API_URL_CXQ + '/innovationvoucher/innovationVoucher/listcms')
.then((res) => res.json())
.then((res) => (indexaward.value = res.result.records));
indexaward.value = res.data.result.records;
pagination.value.total = res.data.result.total;
};
getindexawardEvent();
</script>

@ -11,18 +11,22 @@
</div>
<div class="header">
<div class="headerLeft">
<img src="@/assets/images/mainHome/aa.png" alt="">
<img src="@/assets/images/mainHome/aa.png" alt="" />
</div>
<div class="headerRight">
<h3>{{ info.name }}</h3>
<div class="b">
<div class="bb">
<p>状态<br>型号<br>仪器<br>生产厂商<br>仪器类别</p>
<p>状态<br />型号<br />仪器类<br />生产厂商<br />仪器类别<br />服务次数</p>
</div>
<div class="bbb">-<br>{{ info.state_dictText }}<br>分析仪器-质谱仪器-有机质谱仪器<br>杭州成功仪器质量高高科技有限公司<br>专用</div>
<div class="bbb"
>{{ info.state_dictText }}<br />{{ info.specification }}<br />{{ info.type_dictText }}<br />{{ info.manufacturer }}<br />{{
info.category_dictText
}}<br />{{ info.serviceFrequency }}</div
>
</div>
<div class="bbbb">
<div class="bbbbb">所在地点&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp*&nbsp黄淮国际教育学院实验室</div>
<div class="bbbbb">所在地点&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{{ cityName }}</div>
<button>立即预约</button>
</div>
</div>
@ -30,21 +34,14 @@
<div class="center">
<div class="box1">技术指标</div>
<div class="box2">
1&nbsp离子源<br>1.1&nbsp配有独立的电喷雾式离子源(ESI)大气压化学离子源(APCI)<br>1.2&nbsp插拔式可互换ESI及APCI喷针无需任何工具可实现ESI源及APCI源快速更换<br>1.3&nbspESI&nbsp流速范围确保敏捷度不损失的前提下无需分流流速可达到2.5mL/min以上<br>1.4&nbsp离子源温度离子源内两路加热雾化气辅助加热器温度不低于700该最大温度可以在软件<br>界面下设置并运行
</div>
<div class="box1">2&nbsp离子源接口及传输系统</div>
<div class="box2">
2.1&nbsp离子传输通道(Q0)采用锥孔结构和饭吹气技术无毛细管类设计装置不会堵塞且能有效防止<br>生物样本中中性分子与不发挥缓冲盐由于真空压力梯度进入四级杆终身不必更换锥孔节约清洗离<br>子传输通道的毛细管类组件的费用<br>2.2&nbsp离子传输系统拥有高压离子聚焦技术压力至少达7.5mtorr,确保最佳的离子聚焦效果和离子传输<br>效率有效去除记忆效应交叉感染
{{ info.technicalIndex || '暂无信息' }}
</div>
<div class="box1">主要功能</div>
<div class="box2">
基于液相色谱-质谱联用技术以液相色谱作为分离系统质谱作为监测系统与配套的检测试剂共同使用在临床上用于对来源于人体样本<br>(如全血血浆血清尿液样本)中的内源性物质和外源性物质(如维生素激素)进行定性或定量检测<br>
服务内容<br>有机化合物成分定量分析(如内源性代谢产物药代动力学毒物分析等)血样组织细胞等的靶向代谢组学和靶向脂质分析成分分离分<br>方法开发等
{{ info.function || '暂无信息' }}
</div>
<div class="box1">用户须知</div>
<div class="box2">预约时间为周一至周五上午8:00-12:00,下午2:30(3:00)-5:30(6:00)</div>
<div class="box1">参考收费标准</div>
<div class="box2">协议收费</div>
<div class="box2">{{ info.notice || '暂无信息' }}</div>
</div>
<div class="btn">
<div class="btnTop">
@ -54,7 +51,7 @@
<div class="btnBtn">
<div class="left">
<div class="box">
<img width="90px" src="@/assets/images/mainHome/h.png" alt="">
<img width="90px" src="@/assets/images/mainHome/h.png" alt="" />
</div>
游客123456
</div>
@ -65,11 +62,10 @@
</div>
</div>
<div class="btnBtn">
<div class="left">
<div class="box">
<img width="90px" src="@/assets/images/mainHome/h.png" alt="">
<img width="90px" src="@/assets/images/mainHome/h.png" alt="" />
</div>
游客123456
</div>
@ -82,7 +78,7 @@
<div class="btnBtn">
<div class="left">
<div class="box">
<img width="90px" src="@/assets/images/mainHome/h.png" alt="">
<img width="90px" src="@/assets/images/mainHome/h.png" alt="" />
</div>
游客123456
</div>
@ -99,13 +95,20 @@
import { getindexnew } from '@/api/mainHome/index';
import { ref } from 'vue';
import { useRoute } from 'vue-router';
const route = useRoute()
const info = ref({})
import aredData from 'china-area-data';
const route = useRoute();
const info = ref({});
const cityName = ref('');
const getInfo = async () => {
const res = await getindexnew({id:route.query.id})
info.value = res
}
getInfo()
const res = await getindexnew({ id: route.query.id });
info.value = res.records[0];
// console.log(aredData );
console.log(aredData[86][info.value.address.substring(0, 2) + '0000'] );
cityName.value = aredData[86][info.value.address.substring(0, 2) + '0000'] + aredData[info.value.address.substring(0, 4) + '00'][info.value.address];
};
getInfo();
</script>
<style lang="less" scoped>
.container {
@ -163,7 +166,6 @@ getInfo()
.bbb {
width: 290px;
}
.bbbb {

@ -1,31 +1,49 @@
<template>
<div class="container">
<div class="news-list">
<div>新闻列表>新闻详情</div>
<div class="item">
<div class="right">
<div class="title">新闻标题</div>
<div class="editor"><div>2022-03-24 | 信息来源国际教育学院</div><div>负责人 | 无糖</div></div>
<div class="title">{{ info.title }}</div>
<div class="editor"><div>{{info.publishTime}}| 信息来源{{ info.source }}</div></div>
<div class="description"
>小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本</div
><div v-html="info.content"></div></div
>
</div>
</div>
</div>
<!-- 栏目 -->
<div class="column-list">
<!-- <div class="column-list">
<div class="title">栏目列表</div>
<div class="list">
<div class="item">全部</div>
<div class="item">项目申报</div>
<div class="item">新闻列表</div>
</div>
</div>
</div> -->
</div>
</template>
<script setup></script>
<script setup>
import {getindexarticleitem} from '@/api/mainHome'
import { useRoute } from 'vue-router';
import { ref } from 'vue';
const route = useRoute()
const id = route.query.id
const info = ref({
title: '',
publishTime: '',
source: '',
content: ''
})
const getInfo = async () => {
const res = await getindexarticleitem({id})
info.value = res[0]
}
getInfo()
</script>
<style scoped lang="less">
.container {
@ -35,7 +53,8 @@
display: flex;
margin-top: 50px;
.news-list {
width: calc(1200px - 415px);
// width: calc(1200px - 415px);
width: 100%;
margin-right: 30px;
.item {
@ -76,7 +95,7 @@
}
.description {
margin-top: 30px;
width: 660px;
// width: 660px;
text-indent: 2em;
line-height: 28px;
}
@ -110,7 +129,7 @@
color: #555;
height: 50px;
line-height: 50px;
border-bottom: 1px solid #D9D9D9;
border-bottom: 1px solid #d9d9d9;
cursor: pointer;
}
}

@ -1,12 +1,6 @@
<template>
<div class="container">
<div class="top-filter">
<div :class="activeIndex === index ? 'active item' : 'item'" @click="activeIndex = index" class="item "
v-for="(item, index) in filterList" :key="index">
<component :is="item.icon"></component>
<div style="margin-left: 10px">{{ item.label }}</div>
</div>
</div>
<div class="mainTop">
<div class="resultShow">
<div class="top">
@ -27,10 +21,10 @@
</div>
<div class="userInto">
<h2>用户登录</h2>
<div class="more">个人登录</div>
<div class="more">法人登录</div>
<div class="more">主管部门登录</div>
<div class="more">省科技厅登录</div>
<div class="more" @click="goToLogin">个人登录</div>
<div class="more" @click="goToLogin">法人登录</div>
<div class="more" @click="goToLogin">主管部门登录</div>
<div class="more" @click="goToLogin">省科技厅登录</div>
</div>
</div>
<div class="mainCenter">
@ -46,17 +40,14 @@
<script setup>
import { ref } from 'vue';
import { PartitionOutlined, DollarCircleOutlined } from '@ant-design/icons-vue';
import { useRouter } from 'vue-router';
const router = useRouter();
const activeIndex = ref(0);
const filterList = ref([
{ label: '科技省厅', icon: PartitionOutlined },
{ label: '管理制度', icon: DollarCircleOutlined },
{ label: '申报项目', icon: DollarCircleOutlined },
{ label: '项目受理', icon: DollarCircleOutlined },
{ label: '立项信息', icon: DollarCircleOutlined },
{ label: '验收情况', icon: DollarCircleOutlined },
{ label: '创新券', icon: DollarCircleOutlined },
]);
const goToLogin = () => {
router.push({
path: '/login',
});
}
</script>
<style scoped lang="less">
@ -138,6 +129,7 @@ const filterList = ref([
color: #e3ebf8;
border-radius: 1cap;
margin: 15px 58px;
cursor: pointer;
}
}
}

@ -8,7 +8,7 @@
<ul>
<li><a href="#">中国政府网</a></li>
<li><a href="#">科学技术部</a></li>
<li><a href="#" style="border: none">河南省人民政府</a></li>
<li><a href="#" style="border: none">驻马店人民政府</a></li>
</ul>
</div>
<div class="fr">

Loading…
Cancel
Save