index.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import { defineComponent, onMounted, reactive } from "vue";
  2. import styles from "./index.module.less";
  3. import { NButton, NSpace, useDialog } from "naive-ui";
  4. import { getImage } from "../home/images";
  5. import TheCreate from "./component/the-create";
  6. import { storeData } from "/src/store";
  7. import { api_musicSheetCreationPage, api_musicSheetCreationRemove } from "../api";
  8. import { useRouter } from "vue-router";
  9. export default defineComponent({
  10. name: "Create",
  11. setup() {
  12. const router = useRouter()
  13. const dialog = useDialog();
  14. const forms = reactive({
  15. teacherId: storeData.user.id,
  16. page: 1,
  17. keyword: "",
  18. rows: 20,
  19. });
  20. const data = reactive({
  21. list: [] as any[],
  22. addShow: false,
  23. finish: false,
  24. });
  25. const getList = async () => {
  26. const res = await api_musicSheetCreationPage({ ...forms });
  27. if (res?.code == 200) {
  28. data.list = res.data.rows;
  29. data.finish = res.data.rows.length < forms.rows;
  30. }
  31. };
  32. const handleReset = () => {
  33. forms.page = 1;
  34. data.finish = false;
  35. data.list = [];
  36. getList();
  37. };
  38. const handleDelte = (item: any) => {
  39. dialog.warning({
  40. title: "警告",
  41. content: `确定删除${item.name}曲谱吗?`,
  42. positiveText: "确定",
  43. negativeText: "取消",
  44. onPositiveClick: async () => {
  45. await api_musicSheetCreationRemove(item.id);
  46. handleReset();
  47. },
  48. onNegativeClick: () => {},
  49. });
  50. };
  51. onMounted(() => {
  52. getList();
  53. });
  54. const handleOpenNotaion = (item: any) => {
  55. window.parent.open(`${location.origin}/notation/#/?id=${item.id}`)
  56. }
  57. return () => (
  58. <div class={styles.wrap}>
  59. <NSpace size={18}>
  60. <div class={styles.createItem} onClick={() => (data.addShow = true)}>
  61. <img src={getImage("icon_29.png")} />
  62. <div>新建乐谱</div>
  63. </div>
  64. {data.list.map((item) => (
  65. <div class={styles.item} onClick={() => handleOpenNotaion(item)}>
  66. <div class={styles.imgBox}>
  67. <img src={getImage("icon_29.png")} />
  68. </div>
  69. <div class={styles.itemBottom}>
  70. <div class={styles.bottombox}>
  71. <div class={styles.bottomLeft}>
  72. <div class={styles.itemtitle}>
  73. <img class={styles.icon_29} src={getImage("icon_29_1.png")} />
  74. <span>{item.name}</span>
  75. </div>
  76. <div class={styles.time}>{item.updateTime}</div>
  77. </div>
  78. <img class={styles.bottomBtn} src={getImage("icon_29_2.png")} />
  79. <img
  80. class={styles.bottomBtn}
  81. src={getImage("icon_29_2.png")}
  82. onClick={() => handleDelte(item)}
  83. />
  84. </div>
  85. </div>
  86. <img class={styles.btn} src={getImage("icon_29_2.png")} />
  87. </div>
  88. ))}
  89. </NSpace>
  90. <TheCreate
  91. v-model:show={data.addShow}
  92. onCreate={() => {
  93. data.addShow = false;
  94. handleReset();
  95. }}
  96. />
  97. </div>
  98. );
  99. },
  100. });