123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- import { css } from "@linaria/core";
- import Image from "@/components/Image";
- import { useArticle } from "@/modules";
- import { ArrowRightOutlined } from "@ant-design/icons-vue";
- import { Empty } from "ant-design-vue";
- import dayjs from "dayjs";
- import { defineComponent, onMounted, reactive } from "vue";
- import { RouterLink, useRouter } from "vue-router";
- import { renderSummary, renderTitle } from "@/modules/objects";
- export default defineComponent({
- setup() {
- const storeArt = useArticle();
- const router = useRouter();
- const categoryId = "6464b7398dcb7ddb98b57a60";
- const state = reactive({
- list: [],
- });
- onMounted(() => {
- getList();
- });
- const getList = async () => {
- const query = {
- page: 1,
- size: 4,
- query: JSON.stringify({ cid: categoryId }),
- };
- const res = await storeArt.getArticleList(query);
- const list = res.list || [];
- state.list = list;
- };
- const turnPage = (aid: string) => {
- router.push({
- name: "article",
- params: { id: categoryId },
- query: { aid },
- });
- };
- return () => (
- <div class={[page, "home_lay_item_box"]}>
- <div class={"global_w"}>
- <div class={"home_lay_title white "}>
- 科研创作<span>/</span>
- <span>Scientific Research</span>
- </div>
- {state.list.length > 0 ? (
- <div class={"tab_list"}>
- {state.list.map((e: ArticleItem) => {
- return (
- <div class={"list_item"}>
- <div
- class={"item"}
- onClick={() => {
- turnPage(e._id);
- }}
- >
- <div class={"list_img"}>
- <Image src={e.cover} />
- </div>
- <div class={"info_box"}>
- <div class={"item_tit"}>{renderTitle(e.title)}</div>
- <div class={"item_desc"}>
- {renderSummary(e.summary)}
- </div>
- <div class={"item_date"}>
- {dayjs(e.createTime).format("YYYY.MM.DD")}
- </div>
- </div>
- </div>
- </div>
- );
- })}
- </div>
- ) : (
- <div class={"ant-list-empty-text"}>
- <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
- </div>
- )}
- <div class={"list_more"}>
- <RouterLink to={`/detail/${categoryId}`}>
- 查看更多
- <ArrowRightOutlined class={"arrow"} />
- </RouterLink>
- </div>
- </div>
- </div>
- );
- },
- });
- const page = css`
- position: relative;
- background: url("@/assets/bg_research.png") no-repeat center top/100% auto;
- .tab_list {
- display: grid;
- grid-template-columns: repeat(4, 1fr);
- gap: 24px;
- .list_item {
- width: 100%;
- background-color: #fff;
- overflow: hidden;
- position: relative;
- .item {
- position: relative;
- display: block;
- border-bottom: 2px solid rgba(159, 159, 159, 0.5);
- cursor: pointer;
- &::before {
- content: "";
- position: absolute;
- bottom: 0;
- right: 0;
- border-width: 6px;
- border-color: transparent rgba(159, 159, 159, 0.5)
- rgba(159, 159, 159, 0.5) transparent;
- }
- &::after {
- content: "";
- position: absolute;
- bottom: -2px;
- right: 0;
- width: 0;
- height: 2px;
- background-color: var(--vt-c-primary);
- transition: width 0.3s ease-in-out;
- }
- &:hover {
- &::before {
- border-color: transparent var(--vt-c-primary) var(--vt-c-primary)
- transparent;
- }
- &::after {
- width: 100%;
- }
- img {
- transform: scale(1.2);
- }
- }
- }
- .list_img {
- width: 100%;
- height: 390px;
- overflow: hidden;
- }
- img {
- width: 100%;
- height: 390px;
- object-fit: cover;
- transition: all 0.3s ease-in-out;
- }
- .info_box {
- padding: 20px 18px;
- }
- .item_tit {
- height: 56px;
- font-size: 20px;
- line-height: 28px;
- color: #333333;
- overflow: hidden;
- }
- .item_desc {
- height: 72px;
- overflow: hidden;
- margin-top: 20px;
- font-size: 16px;
- line-height: 24px;
- font-weight: 400;
- color: #666666;
- word-break: break-all;
- }
- .item_date {
- font-size: 14px;
- margin-top: 30px;
- font-weight: 300;
- color: #999999;
- }
- }
- }
- .list_more {
- margin-top: 35px;
- text-align: center;
- a {
- color: var(--vt-c-primary);
- }
- .arrow {
- margin-left: 8px;
- padding: 2px;
- border: 1px solid var(--vt-c-primary);
- font-size: 12px;
- border-radius: 50%;
- }
- }
- `;
|