|
@@ -1,12 +1,14 @@
|
|
|
import Image from "@/components/Image";
|
|
|
import loading from "@/components/Provider/Loading";
|
|
|
import { useArticle } from "@/modules";
|
|
|
+import { ArrowRightOutlined } from "@ant-design/icons-vue";
|
|
|
import { css } from "@linaria/core";
|
|
|
import dayjs from "dayjs";
|
|
|
import { defineComponent, onMounted, watch } from "vue";
|
|
|
import { useRoute, useRouter } from "vue-router";
|
|
|
import { any, object } from "vue-types";
|
|
|
import List from "./List";
|
|
|
+import { renderSummary, renderTitle } from "@/modules/objects";
|
|
|
const teacherList = [
|
|
|
"6464ae7a8dcb7ddb98b57a28",
|
|
|
"6464b7ca8dcb7ddb98b57a63",
|
|
@@ -16,8 +18,8 @@ const teacherList = [
|
|
|
"6464b7e38dcb7ddb98b57a67",
|
|
|
"6464b7e98dcb7ddb98b57a68",
|
|
|
"6464b7f08dcb7ddb98b57a69",
|
|
|
- "6464b7f68dcb7ddb98b57a6a",
|
|
|
];
|
|
|
+const itemList = ["6464aead8dcb7ddb98b57a29"];
|
|
|
export default defineComponent({
|
|
|
props: {
|
|
|
data: object<CategoryItem>(),
|
|
@@ -55,13 +57,23 @@ export default defineComponent({
|
|
|
if (teacherList.includes(category._id)) {
|
|
|
return <TeacherItem item={item} key={item._id} />;
|
|
|
}
|
|
|
+ if (itemList.includes(category._id)) {
|
|
|
+ return <DefItem item={item} key={item._id} />;
|
|
|
+ }
|
|
|
return <ArticleItem item={item} key={item._id} />;
|
|
|
};
|
|
|
+
|
|
|
return () => {
|
|
|
+ let gridType = "article";
|
|
|
+ if (itemList.includes(category._id)) {
|
|
|
+ gridType = "def";
|
|
|
+ }
|
|
|
+
|
|
|
return (
|
|
|
<div class={page}>
|
|
|
- <div class={"list_content"}>
|
|
|
+ <div class={["list_content", gridType == "def" ? "nomargin" : ""]}>
|
|
|
<List
|
|
|
+ gridType={gridType}
|
|
|
dataSource={artStore.listController.state.list}
|
|
|
actions={artStore.listController}
|
|
|
>
|
|
@@ -112,18 +124,6 @@ const ArticleItem = defineComponent({
|
|
|
const { item } = props;
|
|
|
const router = useRouter();
|
|
|
const route = useRoute();
|
|
|
- const renderTitle = (title?: string) => {
|
|
|
- if (title) {
|
|
|
- return title.substring(0, 30) + "...";
|
|
|
- }
|
|
|
- return "";
|
|
|
- };
|
|
|
- const renderSummary = (summary?: string) => {
|
|
|
- if (summary) {
|
|
|
- return summary.substring(0, 60) + "...";
|
|
|
- }
|
|
|
- return "";
|
|
|
- };
|
|
|
return () => (
|
|
|
<div class={ListItemStyle}>
|
|
|
<div
|
|
@@ -149,7 +149,54 @@ const ArticleItem = defineComponent({
|
|
|
);
|
|
|
},
|
|
|
});
|
|
|
-const page = css``;
|
|
|
+const DefItem = defineComponent({
|
|
|
+ props: {
|
|
|
+ item: object<ArticleItem>(),
|
|
|
+ },
|
|
|
+ setup(props) {
|
|
|
+ const { item } = props;
|
|
|
+ const router = useRouter();
|
|
|
+ const route = useRoute();
|
|
|
+ const renderTitle = (title?: string) => {
|
|
|
+ if (title) {
|
|
|
+ if (title.length > 30) {
|
|
|
+ return title.substring(0, 30) + "...";
|
|
|
+ }
|
|
|
+ return title;
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+ };
|
|
|
+
|
|
|
+ return () => (
|
|
|
+ <div class={DefItemStyle}>
|
|
|
+ <div
|
|
|
+ class={"item"}
|
|
|
+ onClick={() => {
|
|
|
+ const id = route.params.id;
|
|
|
+ const aid = item?._id;
|
|
|
+ router.push({ name: "article", params: { id }, query: { aid } });
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <div class={"item_tit"}>{renderTitle(item?.title)}</div>
|
|
|
+ <div class={"arrow"}>
|
|
|
+ <ArrowRightOutlined />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ );
|
|
|
+ },
|
|
|
+});
|
|
|
+const page = css`
|
|
|
+ .nomargin {
|
|
|
+ .ant-list-grid {
|
|
|
+ .ant-col {
|
|
|
+ & > .ant-list-item {
|
|
|
+ margin-bottom: 1px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+`;
|
|
|
const TeacherItemStyle = css`
|
|
|
width: 100%;
|
|
|
height: 380px;
|
|
@@ -272,3 +319,25 @@ const ListItemStyle = css`
|
|
|
color: #999999;
|
|
|
}
|
|
|
`;
|
|
|
+const DefItemStyle = css`
|
|
|
+ .item {
|
|
|
+ padding: 20px 24px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ background-color: #fff;
|
|
|
+ cursor: pointer;
|
|
|
+ .item_tit {
|
|
|
+ flex: 1;
|
|
|
+ font-size: 16px;
|
|
|
+ color: #333333;
|
|
|
+ overflow: hidden;
|
|
|
+ }
|
|
|
+ .arrow {
|
|
|
+ padding: 4px;
|
|
|
+ line-height: 1;
|
|
|
+ border-radius: 12px;
|
|
|
+ border: 1px solid var(--vt-c-primary);
|
|
|
+ color: var(--vt-c-primary);
|
|
|
+ }
|
|
|
+ }
|
|
|
+`;
|