index.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <script setup lang="ts">
  2. import { PageSearch, usePageSearch } from "/@/components/PageSearch";
  3. import searchConfig from "./config/search.config";
  4. import contentConfig from "./config/content.config";
  5. import PageAuth from "/@/components/PageAuth";
  6. import { PageModal, usePageModal } from "/@/components/PageModalShell";
  7. import modalConfig from "./config/modal.config";
  8. import { PageContent } from "/@/components/PageContent";
  9. import type { PageContentInstance } from "/@/components/PageContent";
  10. import { Company, Card } from "/@/components/RemoteSelect";
  11. import { projectFormConfig } from "./config/_details";
  12. import { projectFormRules } from "./config/_rules";
  13. import {
  14. BasicForm,
  15. transform,
  16. createDefaultData
  17. } from "/@/components/BasicForm";
  18. import { ElImage } from "element-plus";
  19. import { httpDetail } from "/@/api/operate/setService";
  20. import { ElForm } from "element-plus";
  21. import { ref, unref } from "vue";
  22. import dayjs from "dayjs";
  23. import { useResponseHandle } from "/@/hooks/useAsync";
  24. const responseHandle = useResponseHandle();
  25. // import { httpDetail } from "/@/api/parameter/video";
  26. const pageContentRef = ref<PageContentInstance | null>(null);
  27. const {
  28. pageModalRef,
  29. handleUpdateData,
  30. handleCreateData,
  31. handlePreviewData,
  32. handleConfrim,
  33. defaultInfo
  34. } = usePageModal({
  35. pageContentRef
  36. });
  37. const { handleResetClick, handleSearchClick } = usePageSearch();
  38. const { formItems } = projectFormConfig;
  39. const basicFormRef = ref<InstanceType<typeof ElForm>>(null);
  40. const formData = ref<Record<string, any>>(createDefaultData(formItems));
  41. function handleCreate() {
  42. basicFormRef.value.validate(isValid => {
  43. if (!isValid) return;
  44. const params = unref(formData);
  45. const { starttime, endtime, expiretime } = params;
  46. params.starttime = starttime ? dayjs(starttime).format("YYYY-MM-DD") : "";
  47. params.endtime = endtime ? dayjs(endtime).format("YYYY-MM-DD") : "";
  48. params.expiretime = expiretime
  49. ? dayjs(expiretime).format("YYYY-MM-DD")
  50. : "";
  51. if (
  52. new Date(params.starttime).valueOf() >= new Date(params.endtime).valueOf()
  53. ) {
  54. ElImage.warning("活动开始日期不能大于活动结束日期!");
  55. return;
  56. }
  57. handleConfrim("create", params);
  58. });
  59. }
  60. async function handleDetailData(row, type) {
  61. const { id } = row;
  62. const { code, data, message } = await httpDetail({ id: id });
  63. responseHandle({
  64. code,
  65. message,
  66. handler: () => {
  67. if (type === "preview") {
  68. handlePreviewData(data);
  69. }
  70. if (type === "update") {
  71. formData.value = transform(formItems, data, {});
  72. handleUpdateData(data);
  73. }
  74. }
  75. });
  76. }
  77. </script>
  78. <template>
  79. <!-- <PageAuth :pageName="pageName"> -->
  80. <PageSearch
  81. :form-config="searchConfig"
  82. @search-btn-click="handleSearchClick"
  83. @reset-btn-click="handleResetClick"
  84. />
  85. <PageContent
  86. ref="pageContentRef"
  87. :content-config="contentConfig"
  88. @create-btn-click="handleCreateData"
  89. @preview-btn-click="row => handleDetailData(row, 'preview')"
  90. @update-btn-click="row => handleDetailData(row, 'update')"
  91. />
  92. <PageModal
  93. ref="pageModalRef"
  94. :modal-config="modalConfig"
  95. :default-info="defaultInfo"
  96. @confirm-btn-click="handleConfrim"
  97. >
  98. <BasicForm
  99. ref="basicFormRef"
  100. v-bind="projectFormConfig"
  101. :form-data="formData"
  102. :rules="projectFormRules"
  103. :disabled="false"
  104. label-width="120px"
  105. >
  106. <template #company_id>
  107. <Company v-model="formData.company_id" placeholder="公司" />
  108. </template>
  109. <template #card_id>
  110. <Card v-model="formData.card_id" placeholder="卡类型" />
  111. </template>
  112. <template #footer>
  113. <div class="w-full flex justify-end">
  114. <ElButton type="primary" @click="handleCreate">保存</ElButton>
  115. </div>
  116. </template>
  117. </BasicForm>
  118. </PageModal>
  119. <!-- </PageAuth> -->
  120. </template>