Merge remote-tracking branch 'origin/master'

master
王家东 2 weeks ago
commit 9fd9699a84
  1. 7
      jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/instrument/controller/InstrumentController.java
  2. 60
      jeecgboot-vue3/src/api/mainHome/index.ts
  3. 5
      jeecgboot-vue3/src/layouts/default/header/components/user-dropdown/index.vue
  4. 2
      jeecgboot-vue3/src/router/helper/mainOut.ts
  5. 119
      jeecgboot-vue3/src/views/demo/main-home/components/NewsList/index.vue
  6. 68
      jeecgboot-vue3/src/views/demo/main-home/components/expertManagement/index.vue
  7. 7
      jeecgboot-vue3/src/views/demo/main-home/components/homePage/index.vue
  8. 44
      jeecgboot-vue3/src/views/demo/main-home/components/innovationVouchers/index.vue
  9. 422
      jeecgboot-vue3/src/views/demo/main-home/components/instrumentInfo/index.vue
  10. 57
      jeecgboot-vue3/src/views/demo/main-home/components/newsInfo/index.vue
  11. 34
      jeecgboot-vue3/src/views/demo/main-home/components/projectDeclaration/index.vue
  12. 2
      jeecgboot-vue3/src/views/demo/main-home/index.vue
  13. 4
      jeecgboot-vue3/src/views/system/depart/components/DepartLeftTree.vue
  14. 4
      jeecgboot-vue3/src/views/system/depart/index.vue

@ -27,6 +27,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.service.ISysDepartService; import org.jeecg.modules.system.service.ISysDepartService;
import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.def.NormalExcelConstants;
@ -194,6 +195,12 @@ public class InstrumentController extends JeecgController<Instrument, IInstrumen
//县区管理员角色 //县区管理员角色
queryWrapper.in("state",1,2,3); queryWrapper.in("state",1,2,3);
queryWrapper.in("flag",1,2); queryWrapper.in("flag",1,2);
QueryWrapper<SysDepart> queryWrappersd = new QueryWrapper();
queryWrappersd.eq("del_flag", 0);
queryWrappersd.eq("parent_id", loginUser.getOrgId());
List<SysDepart> listsd = sysDepartService.list(queryWrappersd);
List<String> ids = listsd.stream().map(SysDepart::getId).collect(Collectors.toList());
queryWrapper.in("declaration_unit",ids);
Page<Instrument> page = new Page<Instrument>(pageNo, pageSize); Page<Instrument> page = new Page<Instrument>(pageNo, pageSize);
IPage<Instrument> pageList = instrumentService.page(page, queryWrapper); IPage<Instrument> pageList = instrumentService.page(page, queryWrapper);
return Result.OK(pageList); return Result.OK(pageList);

@ -39,4 +39,64 @@ export function getindexaward(params) {
method: 'GET', method: 'GET',
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',
});
} }

@ -13,7 +13,7 @@
<Menu @click="handleMenuClick"> <Menu @click="handleMenuClick">
<MenuItem itemKey="doc" :text="t('layout.header.dropdownItemDoc')" icon="ion:document-text-outline" v-if="getShowDoc" /> <MenuItem itemKey="doc" :text="t('layout.header.dropdownItemDoc')" icon="ion:document-text-outline" v-if="getShowDoc" />
<MenuDivider v-if="getShowDoc" /> <MenuDivider v-if="getShowDoc" />
<!-- <MenuItem itemKey="account" :text="t('layout.header.dropdownItemSwitchAccount')" icon="ant-design:setting-outlined" />--> <MenuItem itemKey="account" :text="t('layout.header.dropdownItemSwitchAccount')" icon="ant-design:setting-outlined" />
<MenuItem itemKey="password" :text="t('layout.header.dropdownItemSwitchPassword')" icon="ant-design:edit-outlined" /> <MenuItem itemKey="password" :text="t('layout.header.dropdownItemSwitchPassword')" icon="ant-design:edit-outlined" />
<!-- <MenuItem itemKey="depart" :text="t('layout.header.dropdownItemSwitchDepart')" icon="ant-design:cluster-outlined" />--> <!-- <MenuItem itemKey="depart" :text="t('layout.header.dropdownItemSwitchDepart')" icon="ant-design:cluster-outlined" />-->
<MenuItem itemKey="cache" :text="t('layout.header.dropdownItemRefreshCache')" icon="ion:sync-outline" /> <MenuItem itemKey="cache" :text="t('layout.header.dropdownItemRefreshCache')" icon="ion:sync-outline" />
@ -170,7 +170,8 @@
break; break;
case 'account': case 'account':
//update-begin---author:wangshuai ---date:20221125 for------------ //update-begin---author:wangshuai ---date:20221125 for------------
go(`/system/usersetting`); // go(`/system/usersetting`);
go(`/kejiju/system/usersetting`);
//update-end---author:wangshuai ---date:20221125 for-------------- //update-end---author:wangshuai ---date:20221125 for--------------
break; break;
} }

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

@ -1,31 +1,97 @@
<template> <template>
<div class="container"> <div class="container">
<div class="news-list"> <div class="news-list">
<div class="item" v-for="i in 10" :key="i"> <div class="item" v-for="i in newList" :key="i">
<div class="left"><div class="year">2024-10</div><div class="day">10</div></div> <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="right"> <div class="right">
<div class="title">新闻标题</div> <div class="title">{{ i.title }}</div>
<div class="editor">编辑 | 无糖</div> <div class="editor">{{ i.source }}</div>
<div class="description" <div class="description"><div v-html="i.info"></div></div>
>小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本</div <div class="get-info" @click="onGetInfo(i)">查看详情</div>
>
<div class="get-info">查看详情</div>
</div> </div>
</div> </div>
<!-- 分页 -->
<div class="pagination"> <Pagination :current="current" :pageSize="page.pageSize" :total="total" show-less-items @change="onChange" /></div>
</div> </div>
<!-- 栏目 --> <!-- 栏目 -->
<div class="column-list"> <div class="column-list">
<div class="title">栏目列表</div> <div class="title">栏目列表</div>
<div class="list"> <div class="list">
<div class="item">全部</div> <div class="item" @click="getindexallarticleEvent">全部</div>
<div class="item">项目申报</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 class="item">新闻列表</div> -->
</div> </div>
</div> </div>
</div> </div>
</template> </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"> <style scoped lang="less">
.container { .container {
@ -35,13 +101,15 @@
display: flex; display: flex;
margin-top: 50px; margin-top: 50px;
.news-list { .news-list {
width: calc(1200px - 415px); position: relative;
margin-right: 30px; width: calc(1200px - 415px);
margin-right: 30px;
min-height: 755px;
padding-bottom: 80px;
.item { .item {
display: flex; display: flex;
width: 100%; width: 100%;
border-bottom: 2px solid #CCC; border-bottom: 2px solid #ccc;
padding-bottom: 45px; padding-bottom: 45px;
margin-top: 40px; margin-top: 40px;
.left { .left {
@ -109,21 +177,32 @@
background-color: #fff; background-color: #fff;
height: 755px; height: 755px;
padding: 30px; padding: 30px;
.title{ .title {
font-size: 20px; font-size: 20px;
font-weight: 600; font-weight: 600;
color: #555; color: #555;
} }
.list{ .list {
.item{ .item {
font-size: 16px; font-size: 16px;
color: #555; color: #555;
height: 50px; height: 50px;
line-height: 50px; line-height: 50px;
border-bottom: 1px solid #D9D9D9; border-bottom: 1px solid #d9d9d9;
cursor: pointer; 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> </style>

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

@ -136,6 +136,7 @@
<script setup> <script setup>
import { ref, reactive } from 'vue'; import { ref, reactive } from 'vue';
import { vue3ScrollSeamless } from 'vue3-scroll-seamless'; import { vue3ScrollSeamless } from 'vue3-scroll-seamless';
import {getindexnews} from '/@/api/mainHome';
let list = reactive([1, 2, 3, 4, 5, 6]); let list = reactive([1, 2, 3, 4, 5, 6]);
const classOptions = { const classOptions = {
limitMoveNum: 2, 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://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', '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> </script>
<style scoped lang="less"> <style scoped lang="less">

@ -1,16 +1,17 @@
<template> <template>
<div class="container"> <div class="container">
<a-table :dataSource="indexaward" :columns="columns"> <a-table :dataSource="indexaward" :columns="columns" :pagination="pagination">
<template #bodyCell="{ column }"> <!-- <template #bodyCell="{ column }">
<div v-if="column.key === 'setting'"> <div v-if="column.key === 'setting'">
<a-button type="text" primary>查看详情</a-button> <a-button type="text" primary>查看详情</a-button>
</div> </div>
</template> </template> -->
</a-table> </a-table>
</div> </div>
</template> </template>
<script setup> <script setup>
import axios from 'axios';
import { ref } from 'vue'; import { ref } from 'vue';
const columns = [ const columns = [
@ -35,18 +36,43 @@
key: 'cxqCode', key: 'cxqCode',
}, },
{ {
title: '操作', title: '申请单位',
dataIndex: 'proDept_dictText',
key: 'setting', 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 indexaward = ref([]);
const getindexawardEvent = async () => { const getindexawardEvent = async () => {
console.log(111); 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') indexaward.value = res.data.result.records;
.then((res) => res.json()) pagination.value.total = res.data.result.total;
.then((res) => (indexaward.value = res.result.records));
}; };
getindexawardEvent(); getindexawardEvent();
</script> </script>

@ -1,259 +1,261 @@
<template> <template>
<div class="container"> <div class="container">
<div class="small"> <div class="small">
<ul> <ul>
<li>首页</li> <li>首页</li>
<li>|</li> <li>|</li>
<li>仪器共享</li> <li>仪器共享</li>
<li>|</li> <li>|</li>
<li>科研校园</li> <li>科研校园</li>
</ul> </ul>
</div>
<div class="header">
<div class="headerLeft">
<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 />仪器类别<br />服务次数</p>
</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>
<div class="header"> <div class="bbbb">
<div class="headerLeft"> <div class="bbbbb">所在地点&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{{ cityName }}</div>
<img src="@/assets/images/mainHome/aa.png" alt=""> <button>立即预约</button>
</div>
<div class="headerRight">
<h3>{{ info.name }}</h3>
<div class="b">
<div class="bb">
<p>状态<br>型号<br>仪器分类<br>生产厂商<br>仪器类别</p>
</div>
<div class="bbb">-<br>{{ info.state_dictText }}<br>分析仪器-质谱仪器-有机质谱仪器<br>杭州成功仪器质量高高科技有限公司<br>专用</div>
</div>
<div class="bbbb">
<div class="bbbbb">所在地点&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp*&nbsp黄淮国际教育学院实验室</div>
<button>立即预约</button>
</div>
</div>
</div> </div>
<div class="center"> </div>
<div class="box1">技术指标</div> </div>
<div class="box2"> <div class="center">
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 class="box1">技术指标</div>
</div> <div class="box2">
<div class="box1">2&nbsp离子源接口及传输系统</div> {{ info.technicalIndex || '暂无信息' }}
<div class="box2"> </div>
2.1&nbsp离子传输通道(Q0)采用锥孔结构和饭吹气技术无毛细管类设计装置不会堵塞且能有效防止<br>生物样本中中性分子与不发挥缓冲盐由于真空压力梯度进入四级杆终身不必更换锥孔节约清洗离<br>子传输通道的毛细管类组件的费用<br>2.2&nbsp离子传输系统拥有高压离子聚焦技术压力至少达7.5mtorr,确保最佳的离子聚焦效果和离子传输<br>效率有效去除记忆效应交叉感染 <div class="box1">主要功能</div>
</div> <div class="box2">
<div class="box1">主要功能</div> {{ info.function || '暂无信息' }}
<div class="box2"> </div>
基于液相色谱-质谱联用技术以液相色谱作为分离系统质谱作为监测系统与配套的检测试剂共同使用在临床上用于对来源于人体样本<br>(如全血血浆血清尿液样本)中的内源性物质和外源性物质(如维生素激素)进行定性或定量检测<br> <div class="box1">用户须知</div>
服务内容<br>有机化合物成分定量分析(如内源性代谢产物药代动力学毒物分析等)血样组织细胞等的靶向代谢组学和靶向脂质分析成分分离分<br>方法开发等 <div class="box2">{{ info.notice || '暂无信息' }}</div>
</div> </div>
<div class="box1">用户须知</div> <div class="btn">
<div class="box2">预约时间为周一至周五上午8:00-12:00,下午2:30(3:00)-5:30(6:00)</div> <div class="btnTop">
<div class="box1">参考收费标准</div> <h3>留言交流</h3>
<div class="box2">协议收费</div> <button>我要留言</button>
</div>
<div class="btnBtn">
<div class="left">
<div class="box">
<img width="90px" src="@/assets/images/mainHome/h.png" alt="" />
</div>
游客123456
</div> </div>
<div class="btn"> <div class="right">
<div class="btnTop"> <p>什么时候仪器空闲</p>
<h3>留言交流</h3> <p>麻烦联系123456789谢谢</p>
<button>我要留言</button> <div class="time">发布时间2024.10.16&nbsp&nbsp17:26</div>
</div> </div>
<div class="btnBtn"> </div>
<div class="left">
<div class="box">
<img width="90px" src="@/assets/images/mainHome/h.png" alt="">
</div>
游客123456
</div>
<div class="right">
<p>什么时候仪器空闲</p>
<p>麻烦联系123456789谢谢</p>
<div class="time">发布时间2024.10.16&nbsp&nbsp17:26</div>
</div>
</div>
<div class="btnBtn"> <div class="btnBtn">
<div class="left"> <div class="left">
<div class="box"> <div class="box">
<img width="90px" src="@/assets/images/mainHome/h.png" alt=""> <img width="90px" src="@/assets/images/mainHome/h.png" alt="" />
</div> </div>
游客123456 游客123456
</div>
<div class="right">
<p>什么时候仪器空闲</p>
<p>麻烦联系123456789谢谢</p>
<div class="time">发布时间2024.10.16&nbsp&nbsp17:26</div>
</div>
</div>
<div class="btnBtn">
<div class="left">
<div class="box">
<img width="90px" src="@/assets/images/mainHome/h.png" alt="">
</div>
游客123456
</div>
<div class="right">
<p>什么时候仪器空闲</p>
<p>麻烦联系123456789谢谢</p>
<div class="time">发布时间2024.10.16&nbsp&nbsp17:26</div>
</div>
</div>
</div> </div>
<div class="right">
<p>什么时候仪器空闲</p>
<p>麻烦联系123456789谢谢</p>
<div class="time">发布时间2024.10.16&nbsp&nbsp17:26</div>
</div>
</div>
<div class="btnBtn">
<div class="left">
<div class="box">
<img width="90px" src="@/assets/images/mainHome/h.png" alt="" />
</div>
游客123456
</div>
<div class="right">
<p>什么时候仪器空闲</p>
<p>麻烦联系123456789谢谢</p>
<div class="time">发布时间2024.10.16&nbsp&nbsp17:26</div>
</div>
</div>
</div> </div>
</div>
</template> </template>
<script setup> <script setup>
import {getindexnew} from'@/api/mainHome/index'; import { getindexnew } from '@/api/mainHome/index';
import { ref } from 'vue'; import { ref } from 'vue';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
const route = useRoute() import aredData from 'china-area-data';
const info = ref({})
const getInfo = async () => { const route = useRoute();
const res = await getindexnew({id:route.query.id}) const info = ref({});
info.value = res const cityName = ref('');
} const getInfo = async () => {
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> </script>
<style lang="less" scoped> <style lang="less" scoped>
.container { .container {
width: 1200px; width: 1200px;
margin: 0 auto; margin: 0 auto;
margin-top: 5px; margin-top: 5px;
.small { .small {
height: 35px; height: 35px;
line-height: 35px; line-height: 35px;
font-size: 11px; font-size: 11px;
} }
.small li { .small li {
display: inline-block; display: inline-block;
padding: 0 10px; padding: 0 10px;
} }
.header { .header {
width: 100%; width: 100%;
height: 450px; height: 450px;
background-color: #ffffff; background-color: #ffffff;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
padding: 60px 45px; padding: 60px 45px;
.headerLeft { .headerLeft {
width: 310px; width: 310px;
background-color: #f3f6fb; background-color: #f3f6fb;
} }
.headerRight { .headerRight {
width: 750px; width: 750px;
} }
.headerRight h3 { .headerRight h3 {
font-weight: 900; font-weight: 900;
font-size: 23px; font-size: 23px;
color: #333333; color: #333333;
} }
.b {
margin-top: 20px;
width: 380px;
height: 160px;
display: flex;
justify-content: space-between;
color: #3f3f3f;
border: none;
}
.bb { .b {
width: 80px; margin-top: 20px;
} width: 380px;
height: 160px;
display: flex;
justify-content: space-between;
color: #3f3f3f;
border: none;
}
.bbb { .bb {
width: 290px; width: 80px;
}
} .bbb {
width: 290px;
}
.bbbb { .bbbb {
width: 600px; width: 600px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
} }
.bbbbb { .bbbbb {
color: #7e7e7e; color: #7e7e7e;
} }
button { button {
width: 170px; width: 170px;
height: 40px; height: 40px;
background-color: #002e97; background-color: #002e97;
right: 30px; right: 30px;
color: #ffffff; color: #ffffff;
border-radius: 0.3cap; border-radius: 0.3cap;
font-size: 14px; font-size: 14px;
} }
} }
.center { .center {
width: 100%; width: 100%;
height: 1050px; height: 1050px;
background-color: #ffffff; background-color: #ffffff;
padding: 50px; padding: 50px;
border-top: #ebebeb 1px solid; border-top: #ebebeb 1px solid;
border-bottom: #ebebeb 1px solid; border-bottom: #ebebeb 1px solid;
} }
.box1 { .box1 {
font-weight: 900; font-weight: 900;
color: #000000; color: #000000;
margin-bottom: 40px; margin-bottom: 40px;
} }
.box2 { .box2 {
color: #1e1e1e; color: #1e1e1e;
margin-bottom: 40px; margin-bottom: 40px;
} }
.btn { .btn {
height: 500px; height: 500px;
padding: 20px 0px 10px 30px; padding: 20px 0px 10px 30px;
.btnTop{ .btnTop {
display: flex;
justify-content: space-between;
margin-bottom: 25px;
h3{
font-weight: 900;
font-size: 19px;
color: #000000;
}
button {
width: 170px;
height: 40px;
background-color: #002e97;
right: 30px;
color: #ffffff;
border-radius: 0.4cap;
font-size: 14px;
font-weight: 300;
}
}
}
.btnBtn{
height: 110px;
width: 1170px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin-bottom: 20px; margin-bottom: 25px;
.left{ h3 {
width: 100px; font-weight: 900;
font-size: 19px;
color: #000000;
} }
.right{ button {
position: relative; width: 170px;
width: 1000px; height: 40px;
height: 110px; background-color: #002e97;
background-color: #ffffff; right: 30px;
padding: 10px 10px 10px 30px; color: #ffffff;
.time{ border-radius: 0.4cap;
position: absolute; font-size: 14px;
right: 20px; font-weight: 300;
bottom: 10px; }
color: #b2b2b2; }
} }
.btnBtn {
height: 110px;
width: 1170px;
display: flex;
justify-content: space-between;
margin-bottom: 20px;
.left {
width: 100px;
}
.right {
position: relative;
width: 1000px;
height: 110px;
background-color: #ffffff;
padding: 10px 10px 10px 30px;
.time {
position: absolute;
right: 20px;
bottom: 10px;
color: #b2b2b2;
} }
}
} }
} }
</style> </style>

@ -1,31 +1,49 @@
<template> <template>
<div class="container"> <div class="container">
<div class="news-list"> <div class="news-list">
<div>新闻列表>新闻详情</div>
<div class="item"> <div class="item">
<div class="right"> <div class="right">
<div class="title">新闻标题</div> <div class="title">{{ info.title }}</div>
<div class="editor"><div>2022-03-24 | 信息来源国际教育学院</div><div>负责人 | 无糖</div></div> <div class="editor"><div>{{info.publishTime}}| 信息来源{{ info.source }}</div></div>
<div class="description" <div class="description"
>小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本小小文本</div ><div v-html="info.content"></div></div
> >
</div> </div>
</div> </div>
</div> </div>
<!-- 栏目 --> <!-- 栏目 -->
<div class="column-list"> <!-- <div class="column-list">
<div class="title">栏目列表</div> <div class="title">栏目列表</div>
<div class="list"> <div class="list">
<div class="item">全部</div> <div class="item">全部</div>
<div class="item">项目申报</div> <div class="item">项目申报</div>
<div class="item">新闻列表</div> <div class="item">新闻列表</div>
</div> </div>
</div> </div> -->
</div> </div>
</template> </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"> <style scoped lang="less">
.container { .container {
@ -35,16 +53,17 @@
display: flex; display: flex;
margin-top: 50px; margin-top: 50px;
.news-list { .news-list {
width: calc(1200px - 415px); // width: calc(1200px - 415px);
margin-right: 30px; width: 100%;
margin-right: 30px;
.item { .item {
display: flex; display: flex;
width: 100%; width: 100%;
padding-bottom: 45px; padding-bottom: 45px;
margin-top: 40px; margin-top: 40px;
.right { .right {
margin-left: 30px; margin-left: 30px;
.title { .title {
@ -69,14 +88,14 @@
content: ''; content: '';
display: block; display: block;
position: absolute; position: absolute;
width:4px; width: 4px;
left: -40px; left: -40px;
height: 53px; height: 53px;
background-color: #d9d9d9; background-color: #d9d9d9;
} }
.description { .description {
margin-top: 30px; margin-top: 30px;
width: 660px; // width: 660px;
text-indent: 2em; text-indent: 2em;
line-height: 28px; line-height: 28px;
} }
@ -99,18 +118,18 @@
background-color: #fff; background-color: #fff;
height: 755px; height: 755px;
padding: 30px; padding: 30px;
.title{ .title {
font-size: 20px; font-size: 20px;
font-weight: 600; font-weight: 600;
color: #555; color: #555;
} }
.list{ .list {
.item{ .item {
font-size: 16px; font-size: 16px;
color: #555; color: #555;
height: 50px; height: 50px;
line-height: 50px; line-height: 50px;
border-bottom: 1px solid #D9D9D9; border-bottom: 1px solid #d9d9d9;
cursor: pointer; cursor: pointer;
} }
} }

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

@ -8,7 +8,7 @@
<ul> <ul>
<li><a href="#">中国政府网</a></li> <li><a href="#">中国政府网</a></li>
<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> </ul>
</div> </div>
<div class="fr"> <div class="fr">

@ -7,8 +7,8 @@
<a-button type="primary" preIcon="ant-design:import-outlined">导入</a-button> <a-button type="primary" preIcon="ant-design:import-outlined">导入</a-button>
</a-upload> </a-upload>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls">导出</a-button> <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls">导出</a-button>
<a-button type="primary" preIcon="ant-design:sync-outlined">同步企微?</a-button> <!-- <a-button type="primary" preIcon="ant-design:sync-outlined">同步企微?</a-button>
<a-button type="primary" preIcon="ant-design:sync-outlined">同步钉钉?</a-button> <a-button type="primary" preIcon="ant-design:sync-outlined">同步钉钉?</a-button>-->
<template v-if="checkedKeys.length > 0"> <template v-if="checkedKeys.length > 0">
<a-dropdown> <a-dropdown>
<template #overlay> <template #overlay>

@ -11,11 +11,11 @@
<DepartFormTab :data="departData" :rootTreeData="rootTreeData" @success="onSuccess" /> <DepartFormTab :data="departData" :rootTreeData="rootTreeData" @success="onSuccess" />
</div> </div>
</a-tab-pane> </a-tab-pane>
<a-tab-pane tab="部门权限" key="role-info"> <!-- <a-tab-pane tab="部门权限" key="role-info">
<div style="padding: 0 20px 20px"> <div style="padding: 0 20px 20px">
<DepartRuleTab :data="departData" /> <DepartRuleTab :data="departData" />
</div> </div>
</a-tab-pane> </a-tab-pane>-->
</a-tabs> </a-tabs>
<div v-show="departData == null" style="padding-top: 40px"> <div v-show="departData == null" style="padding-top: 40px">
<a-empty description="尚未选择部门" /> <a-empty description="尚未选择部门" />

Loading…
Cancel
Save