OutputTemplateModal.tsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import { useResource } from "@/modules/resource";
  2. import { Button, Empty } from "ant-design-vue";
  3. import { queenApi, useModal } from "queenjs";
  4. import { defineComponent, reactive } from "vue";
  5. import { useRoute } from "vue-router";
  6. import OutputTemplateItem from "./OutputTemplateItem";
  7. export default defineComponent({
  8. setup() {
  9. const resource = useResource();
  10. const modal = useModal();
  11. const route = useRoute();
  12. const state = reactive({
  13. list: [] as { id: string; qos: 1 }[],
  14. }) as any;
  15. const submit = async () => {
  16. if (state.list.length == 0) {
  17. queenApi.messageError("请选择至少一个模板");
  18. return;
  19. }
  20. const isOk = await resource.actions.submitRender(
  21. route.params.id as string,
  22. state.list,
  23. []
  24. );
  25. if (isOk) {
  26. modal.submit(true);
  27. }
  28. };
  29. return () => {
  30. return (
  31. <div>
  32. {resource.store.sourceDetail.images.length == 0 && (
  33. <Empty description="暂无数据" />
  34. )}
  35. <div class="grid grid-cols-4 gap-10px">
  36. {resource.store.sourceDetail.images.map((record: any) => (
  37. <OutputTemplateItem
  38. record={record}
  39. class="cursor-pointer"
  40. active={!!state.list.find((v: any) => v.id == record.id)}
  41. onChange={(qos) => {
  42. const selected = state.list.find(
  43. (v: any) => v.id == record.id
  44. );
  45. selected.qos = qos;
  46. }}
  47. onSelect={() => {
  48. const selected = !!state.list.find(
  49. (v: any) => v.id == record.id
  50. );
  51. if (selected) {
  52. const index = state.list.findIndex(
  53. (d: any) => d.id == record.id
  54. );
  55. state.list.splice(index);
  56. return;
  57. }
  58. state.list.push({ id: record.id, qos: 1 });
  59. }}
  60. />
  61. ))}
  62. </div>
  63. <div class="text-right mt-10px">
  64. <Button onClick={modal.cancel}>取消</Button>
  65. <Button type="primary" class="ml-20px" onClick={submit}>
  66. 确定
  67. </Button>
  68. </div>
  69. </div>
  70. );
  71. };
  72. },
  73. });