Browse Source

fix: change textbook textbookSubscription

DESKTOP-USV654P\pc 3 weeks ago
parent
commit
acc88b43e9

+ 1 - 1
Makefile

@@ -12,7 +12,7 @@ build:
 
 commit:
 	git add . && \
-	git commit --no-verify -m "fix: change teachingManager textbookPushManager"
+	git commit --no-verify -m "fix: change textbook textbookSubscription"
 
 checkPre:
 	git checkout pre

+ 93 - 20
src/views/educational/textbookSubscription/components/edit.vue

@@ -2,7 +2,7 @@
   import BasicModal from '/@/components/Modal/src/BasicModal.vue';
   import { useModal, useModalInner } from '/@/components/Modal';
   import { Steps } from 'ant-design-vue';
-  import { ref, unref } from 'vue';
+  import { ref, unref, reactive } from 'vue';
   import { useTable } from '/@/components/Table';
   import BasicForm from '/@/components/Form/src/BasicForm.vue';
   import { useForm } from '/@/components/Form';
@@ -19,6 +19,7 @@
     postTextbookTextbookSubscription,
     putTextbookTextbookSubscription,
   } from '/@/services/apis/TextbookSubscriptionController';
+  import { cloneDeep, uniqueId } from 'lodash-es';
   const step = Steps.Step;
   const selectRow = ref<any>([]);
   const thisStep = ref(0);
@@ -26,6 +27,10 @@
   const selectUserList = ref<any>([]);
   const isUpdate = ref(true);
   const modelRef = ref<Recordable>({});
+  const state = reactive<{ isSearch: boolean; sourceData: any[] }>({
+    isSearch: false,
+    sourceData: [],
+  });
 
   const [addReg, { openModal: addModelOpen }] = useModal();
   const [historyViewReg, { openModal: historyViewOpen }] = useModal();
@@ -93,6 +98,13 @@
     showActionButtonGroup: false,
   });
 
+  const updateSourceData = (record) => {
+    const index = state.sourceData.findIndex((item) => item.uuid === record.uuid);
+    if (index > -1) {
+      state.sourceData[index] = cloneDeep(record);
+    }
+  };
+
   const handleChangeDiscount = (record) => {
     if (record.discount < 1) {
       record.discount = 1;
@@ -101,6 +113,7 @@
       record.discount = 10;
     }
     record.price = Number((Number(record.sourcePrice || 0) * record.discount) / 10).toFixed(2);
+    updateSourceData(record);
   };
 
   const handleChangePrice = (record) => {
@@ -109,14 +122,14 @@
     } else {
       record.discount = 0;
     }
+    updateSourceData(record);
   };
 
   const [modalReg, { closeModal, setModalProps }] = useModalInner(async (data) => {
     isUpdate.value = !!data?.isUpdate;
     modelRef.value = { ...data.baseData };
-
+    getForm().resetFields();
     setModalProps({ loading: true });
-
     if (unref(isUpdate)) {
       const resData = await getTextbookSubscriptionInfo({ id: data.baseData.id });
       modelRef.value = { ...resData };
@@ -127,8 +140,9 @@
         item.teacherSubscriptionNumber = item.teacherNum;
         item.courseName = item.courseSubjectIdCn;
         item.sourcePrice = item.pricing;
+        item.uuid = uniqueId();
       });
-
+      state.sourceData = resData.textbookSubscriptionItemList;
       setTableData(resData.textbookSubscriptionItemList);
       thisStep.value = 1;
     } else {
@@ -156,11 +170,12 @@
     closeModal();
   };
   const [selectModalReg, { openModal: selectModalOpen }] = useModal();
-  const [tableRef, { setTableData, getDataSource, setSelectedRowKeys }] = useTable({
+
+  const [tableRef, { getForm, setTableData, getDataSource, setSelectedRowKeys }] = useTable({
     title: '征订列表',
     columns: textbookColumns,
     bordered: true,
-    rowKey: 'id',
+    rowKey: 'uuid',
     rowSelection: {
       type: 'checkbox',
       onChange: (selectedRowKeys) => {
@@ -176,6 +191,51 @@
       fixed: 'right',
     },
     resizeHeightOffset: 80,
+
+    useSearchForm: true,
+    formConfig: {
+      labelWidth: 100,
+      schemas: [
+        {
+          label: '书名',
+          field: 'bookName',
+          component: 'Input',
+          colProps: { span: 8 },
+        },
+        {
+          label: '书号',
+          field: 'issn',
+          component: 'Input',
+          colProps: { span: 8 },
+        },
+        {
+          label: '课程',
+          field: 'courseName',
+          component: 'Input',
+          colProps: { span: 8 },
+        },
+      ],
+      submitFunc: async () => {
+        const values = getForm().getFieldsValue();
+        let searchData: any[] = cloneDeep(state.sourceData);
+
+        if (values.bookName || values.issn || values.courseName) {
+          if (values.bookName) {
+            searchData = searchData.filter((item) => item.bookName.includes(values.bookName));
+          }
+          if (values.issn) {
+            searchData = searchData.filter((item) => item.issn.includes(values.issn));
+          }
+          if (values.courseName) {
+            searchData = searchData.filter((item) => item.courseName.includes(values.courseName));
+          }
+          state.isSearch = true;
+        } else {
+          state.isSearch = false;
+        }
+        setTableData(searchData);
+      },
+    },
   });
   const handleAdd = () => {
     addModelOpen(true, {
@@ -183,27 +243,28 @@
     });
   };
   const handleSuccess = (e) => {
-    const data = getDataSource();
+    const data = cloneDeep(state.sourceData);
     const addList: any[] = [];
     e.forEach((item: any) => {
-      if (!data.find((i: any) => i.id === item.id)) {
+      if (!data.find((i: any) => i.textbookId === item.id)) {
         item.sourcePrice = item.price;
         item.textbookId = item.id;
+        item.uuid = uniqueId();
+        item.id = '';
         handleChangeDiscount(item);
         addList.push(item);
       }
     });
+    state.sourceData = data.concat(addList);
+
     setTableData(data.concat(addList));
     // redoHeight();
   };
-  const handleClear = (id) => {
+  const handleClear = (uuid) => {
+    const keys = uuid ? [uuid] : selectRow.value;
     const data = getDataSource();
-    if (id !== null) {
-      data.splice(id, 1);
-      setTableData(data); //.filter((item: any) => item.id !== id)
-    } else {
-      setTableData(data.filter((item: any) => !selectRow.value.includes(item.id)));
-    }
+    setTableData(data.filter((item: any) => !keys.includes(item.uuid)));
+    state.sourceData = state.sourceData.filter((item: any) => !keys.includes(item.uuid));
   };
   const handleSelect = async (e) => {
     selectUserList.value = e.list;
@@ -216,13 +277,15 @@
 
     data.forEach((item: any) => {
       item.sourcePrice = item.price;
+      item.uuid = uniqueId();
       handleChangeDiscount(item);
     });
+    state.sourceData = data;
     setTableData(data);
   };
   const { createMessage } = useMessage();
   const handleSubmit = async () => {
-    const dataSoruce = getDataSource();
+    const dataSoruce = cloneDeep(state.sourceData);
 
     if (dataSoruce.length === 0) {
       createMessage.warning('至少征订一本教材');
@@ -303,10 +366,20 @@
             <a-button type="primary" @click="handleClear(null)">批量移出</a-button>
           </template>
           <template #studentSubscriptionNumber="{ record }">
-            <a-input-number :step="1" :min="0" v-model:value="record.studentSubscriptionNumber" />
+            <a-input-number
+              :step="1"
+              :min="0"
+              v-model:value="record.studentSubscriptionNumber"
+              @change="updateSourceData(record)"
+            />
           </template>
           <template #teacherSubscriptionNumber="{ record }">
-            <a-input-number :step="1" :min="0" v-model:value="record.teacherSubscriptionNumber" />
+            <a-input-number
+              :step="1"
+              :min="0"
+              v-model:value="record.teacherSubscriptionNumber"
+              @change="updateSourceData(record)"
+            />
           </template>
           <template #discount="{ record }">
             <a-input-number
@@ -324,8 +397,8 @@
               @change="handleChangePrice(record)"
             />
           </template>
-          <template #action="{ record, index }">
-            <a-button type="link" @click="handleClear(index)">移出</a-button>
+          <template #action="{ record }">
+            <a-button type="link" @click="handleClear(record.uuid)">移出</a-button>
             <a-button type="link" @click="handleViewHistory(record.textbookId)">
               历史征订
             </a-button>

+ 24 - 0
src/views/educational/textbookSubscription/components/textBookPop.vue

@@ -39,6 +39,30 @@
   const [tableReg, { getDataSource, reload }] = useTable({
     title: '教材征订表',
     api: getTextbookSubscriptionInstockroomList,
+    useSearchForm: true,
+    formConfig: {
+      labelWidth: 100,
+      schemas: [
+        {
+          label: '书名',
+          field: 'bookName',
+          component: 'Input',
+          colProps: { span: 8 },
+        },
+        {
+          label: '书号',
+          field: 'issn',
+          component: 'Input',
+          colProps: { span: 8 },
+        },
+        {
+          label: '课程',
+          field: 'courseName',
+          component: 'Input',
+          colProps: { span: 8 },
+        },
+      ],
+    },
     pagination: false,
     immediate: false,
     showTableSetting: true,