DetailEditor.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { Button, PageHeader } from "ant-design-vue";
  2. import { defineComponent, onMounted, reactive } from "vue";
  3. import loading from "@/components/Provider/Loading";
  4. import { useArticle } from "@/modules";
  5. import { object } from "vue-types";
  6. import WangEditor from "../../components/WangEditor";
  7. import { css } from "@linaria/core";
  8. export default defineComponent({
  9. props: {
  10. data: object<CategoryItem>(),
  11. },
  12. setup(props) {
  13. const data: any = props.data || {};
  14. const artStore = useArticle();
  15. const state = reactive({
  16. data: {} as any,
  17. });
  18. onMounted(() => {
  19. initDetail();
  20. });
  21. const initDetail = async () => {
  22. loading.show("");
  23. artStore.listController.state.query = JSON.stringify({ cid: data._id });
  24. await artStore.listController.loadPage(1);
  25. const item = artStore.listController.state.list[0] || {};
  26. if (item._id) {
  27. const detRes = await artStore.getArticleDetail(item);
  28. if (detRes) {
  29. state.data = detRes;
  30. }
  31. }
  32. loading.hidden();
  33. };
  34. const editorChange = ({ html, text }: any) => {
  35. state.data.content = html;
  36. state.data.summary = text;
  37. };
  38. const submit = () => {
  39. const subData = { ...state.data };
  40. if (!subData._id) {
  41. subData.title = data?.name;
  42. subData.cid = data._id;
  43. }
  44. let summary = state.data.summary.substring(0, 60);
  45. summary = summary.replace(/\n/g, "");
  46. state.data.summary = summary;
  47. artStore.addOrUpdateArticle(subData);
  48. };
  49. return () => {
  50. return (
  51. <div class={Page}>
  52. <PageHeader title={data?.name}>
  53. {{
  54. extra: () => {
  55. return (
  56. <Button type="primary" onClick={submit}>
  57. 保存
  58. </Button>
  59. );
  60. },
  61. }}
  62. </PageHeader>
  63. <WangEditor
  64. key={data._id}
  65. content={state.data.content}
  66. onChange={editorChange}
  67. />
  68. </div>
  69. );
  70. };
  71. },
  72. });
  73. const Page = css`
  74. height: 100%;
  75. display: flex;
  76. flex-direction: column;
  77. `;