Jelajahi Sumber

整体分析,完成逻辑

Michael Wang 3 tahun lalu
induk
melakukan
a0e48a5a0d

+ 2 - 0
components.d.ts

@@ -6,6 +6,8 @@ declare module 'vue' {
   export interface GlobalComponents {
     404: typeof import('./src/components/404.vue')['default']
     AButton: typeof import('ant-design-vue/es')['Button']
+    ACollapse: typeof import('ant-design-vue/es')['Collapse']
+    ACollapsePanel: typeof import('ant-design-vue/es')['CollapsePanel']
     AForm: typeof import('ant-design-vue/es')['Form']
     AFormItem: typeof import('ant-design-vue/es')['FormItem']
     AInput: typeof import('ant-design-vue/es')['Input']

+ 2 - 2
src/api/allAnalysisPage.ts

@@ -24,7 +24,7 @@ export function setSasCourseRangeConfig(params: {
   projectId: number;
   rangeConfig: any;
 }) {
-  return httpApp.post("/api/ess/sasCourse/rangeConfig", params);
+  return httpApp.post("/api/ess/projectCourse/rangeConfig", params);
 }
 
 /** 整体分析-科目成绩占初试总分权重-分段设置 */
@@ -33,5 +33,5 @@ export function setSasCourseTotalRangeConfig(params: {
   projectId: number;
   rangeConfig: any;
 }) {
-  return httpApp.post("/api/ess/projectCourse/rangeConfig", params);
+  return httpApp.post("/api/ess/projectCourse/totalRangeConfig", params);
 }

+ 34 - 31
src/components/CommonRangeConfig.vue

@@ -13,11 +13,11 @@
           :key="index"
         >
           {{
-            RANGE_POINT_TYPE[item.type] +
-            "(" +
-            (item.baseScore + item.adjustScore) +
-            ")"
+            `${item.baseScore + item.adjustScore}(${
+              RANGE_POINT_TYPE[item.type]
+            }${item.adjustScore > 0 ? "+" : ""}${item.adjustScore})`
           }}
+
           <a-button
             v-if="item.type !== 'ZERO'"
             @click="handleDeleteRangePoint(item)"
@@ -26,21 +26,28 @@
         </a-timeline-item>
       </a-timeline>
 
-      基础分<a-select v-model:value="rangePoint.type" style="width: 100%">
-        <a-select-option value="NATIONAL_SCORE">国家单科线</a-select-option>
-        <a-select-option value="RETEST_SCORE">复试单科线</a-select-option>
-        <a-select-option value="NATIONAL_TOTAL_SCORE"
-          >国家总分线</a-select-option
-        >
-        <a-select-option value="RETEST_TOTAL_SCORE">复试总分线</a-select-option>
-        <a-select-option value="TOTAL_SCORE_LINE">国家满分线</a-select-option>
-        <a-select-option value="CUSTOM">自定义</a-select-option>
-      </a-select>
-      <br />
-      调整分<a-input-number
-        v-model:value="rangePoint.adjustScore"
-      ></a-input-number>
-      <br />
+      <div class="tw-my-4 tw-flex tw-items-center">
+        <span style="width: 60px">基础分</span>
+        <a-select v-model:value="rangePoint.type" style="width: 100%">
+          <a-select-option value="NATIONAL_SCORE">国家单科线</a-select-option>
+          <a-select-option value="RETEST_SCORE">复试单科线</a-select-option>
+          <a-select-option value="NATIONAL_TOTAL_SCORE">
+            国家总分线
+          </a-select-option>
+          <a-select-option value="RETEST_TOTAL_SCORE">
+            复试总分线
+          </a-select-option>
+          <a-select-option value="TOTAL_SCORE_LINE">国家满分线</a-select-option>
+          <a-select-option value="CUSTOM">自定义</a-select-option>
+        </a-select>
+      </div>
+      <div class="tw-my-4 tw-flex tw-items-center">
+        <span style="width: 55px">调整分</span>
+        <a-input-number
+          class="tw-rounded-xl"
+          v-model:value="rangePoint.adjustScore"
+        ></a-input-number>
+      </div>
       <a-button type="primary" @click="newRangePoint">新增分割点</a-button>
     </div>
   </a-modal>
@@ -48,7 +55,8 @@
 
 <script setup lang="ts">
 import { getProjectCourseList } from "@/api/projectParamsManagementPage";
-import { onMounted, onUpdated, reactive, watch } from "vue-demi";
+import { RANGE_POINT_TYPE } from "@/constants/constants";
+import { onUpdated, reactive, toRaw, watch } from "vue-demi";
 
 const emit = defineEmits(["updated"]);
 
@@ -64,16 +72,6 @@ defineExpose({ showModal });
 let selectedRangeConfig = $ref([]);
 let courseSetting = $ref({});
 
-const RANGE_POINT_TYPE = {
-  ZERO: "零分",
-  CUSTOM: "自定义",
-  NATIONAL_SCORE: "国家单科线",
-  RETEST_SCORE: "复试单科线",
-  NATIONAL_TOTAL_SCORE: "国家总分线",
-  RETEST_TOTAL_SCORE: "复试总分线",
-  TOTAL_SCORE_LINE: "国家满分线",
-};
-
 watch(
   () => props.rangeConfig,
   () => {
@@ -104,6 +102,7 @@ let rangePoint = reactive({
 });
 
 async function newRangePoint() {
+  if (!rangePoint.type) return;
   if (!rangePoint.adjustScore) {
     rangePoint.adjustScore = 0;
   }
@@ -124,10 +123,14 @@ async function newRangePoint() {
   }
   if (rangePoint.type === "ZERO") {
     rangePoint.baseScore = 0;
+    rangePoint.adjustScore = 0;
   }
   selectedRangeConfig.push({ ...rangePoint });
+  // let t = toRaw(selectedRangeConfig);
+  // t.sort((a, b) => a.baseScore + a.adjustScore - (b.baseScore + b.adjustScore));
+  // console.log(t);
   selectedRangeConfig = selectedRangeConfig.sort(
-    (a, b) => a.baseScore + a.adjustScore <= b.baseScore + b.adjustScore
+    (a, b) => a.baseScore + a.adjustScore - (b.baseScore + b.adjustScore)
   );
   Object.assign(rangePoint, {
     baseScore: 0,

+ 1 - 1
src/components/ExplainModal.vue

@@ -5,7 +5,7 @@
         <a-input disabled :value="keyName"></a-input>
       </a-form-item>
       <a-form-item label="系统说明">
-        <a-input disabled :value="keyDetail"></a-input>
+        <a-textarea readonly :value="keyDetail"></a-textarea>
       </a-form-item>
     </a-form>
   </a-modal>

+ 10 - 0
src/constants/constants.ts

@@ -50,3 +50,13 @@ export const ORG_GLOSSARY = {
   DESCRIBE16: "试卷分析——试题难度分组分布(按初试总分分组)",
   DESCRIBE17: "试卷分析——客观题选项选择比率分布",
 };
+
+export const RANGE_POINT_TYPE = {
+  ZERO: "零分",
+  CUSTOM: "自定义",
+  NATIONAL_SCORE: "国家单科线",
+  RETEST_SCORE: "复试单科线",
+  NATIONAL_TOTAL_SCORE: "国家总分线",
+  RETEST_TOTAL_SCORE: "复试总分线",
+  TOTAL_SCORE_LINE: "国家满分线",
+};

+ 70 - 51
src/features/allAnalysis/ScoreFirstTryRate.vue

@@ -1,54 +1,53 @@
 <template>
   <div>
-    <div class="tw-bg-white tw-p-5 tw-rounded-xl tw-mb-5">
-      <ProjectCourseSelect
-        :project-id="projectId"
-        v-model:value="courseId"
-        disabled
-      />
-      <span class="tw-mr-4"></span>
-      <a-button @click="openRangeConfigModal(item)">分段设置</a-button>
-
+    <div class="tw-bg-white tw-rounded-xl">
       <div class="tw-mt-4"></div>
 
-      <template v-for="(item, index) in data" :key="index">
-        <ProjectCourseSelect
-          :project-id="projectId"
-          v-model:value="item.courseId"
-          disabled
-        />
-        <h3>本科目成绩占初试总分权重</h3>
-        <table>
-          <tr>
-            <th>初试总分分数段</th>
-            <th>人数占比(%)</th>
-            <th>初试总分平均分</th>
-            <th>本科目成绩平均分</th>
-            <th>本科目难度</th>
-            <th>占总分权重(%)</th>
-          </tr>
-          <tr v-for="(item2, index) in item.totalScoreRange" :key="index">
-            <td>
-              {{ item.totalScoreRangeTitle[index] || "全体考生" }}
-            </td>
-            <td>
-              {{ item2.countRate }}
-            </td>
-            <td>
-              {{ item2.avgTotalScore }}
-            </td>
-            <td>
-              {{ item2.avgScore }}
-            </td>
-            <td>
-              {{ item2.difficulty }}
-            </td>
-            <td>
-              {{ item2.scoreRate }}
-            </td>
-          </tr>
-        </table>
-      </template>
+      <a-collapse v-model:activeKey="activeKey">
+        <a-collapse-panel
+          v-for="(item, index) in data"
+          :key="index"
+          :header="item.courseName + '(' + item.courseCode + ')'"
+        >
+          <div class="tw-flex tw-justify-between tw-items-center tw-my-4">
+            <h3 class="section-title">本科目成绩占初试总分权重</h3>
+            <div class="tw-flex tw-gap-2">
+              <a-button @click="openRangeConfigModal(item)">分段设置</a-button>
+              <a-button @click="openModal1">说明</a-button>
+            </div>
+          </div>
+          <table class="custom-table">
+            <tr>
+              <th>初试总分分数段</th>
+              <th>人数占比(%)</th>
+              <th>初试总分平均分</th>
+              <th>本科目成绩平均分</th>
+              <th>本科目难度</th>
+              <th>占总分权重(%)</th>
+            </tr>
+            <tr v-for="(item2, index) in item.totalScoreRange" :key="index">
+              <td>
+                {{ scoreTitle(item.totalScoreRangeTitle[index]) || "全体考生" }}
+              </td>
+              <td>
+                {{ item2.countRate }}
+              </td>
+              <td>
+                {{ item2.avgTotalScore }}
+              </td>
+              <td>
+                {{ item2.avgScore }}
+              </td>
+              <td>
+                {{ item2.difficulty }}
+              </td>
+              <td>
+                {{ item2.scoreRate }}
+              </td>
+            </tr>
+          </table>
+        </a-collapse-panel>
+      </a-collapse>
     </div>
 
     <CommonRangeConfig
@@ -63,8 +62,7 @@
 
 <script setup lang="ts">
 import { useMainStore } from "@/store";
-import { goBack } from "@/utils/utils";
-import { watch, onMounted, ref, toRaw, computed, reactive } from "vue-demi";
+import { watch, onMounted } from "vue-demi";
 import { useRoute } from "vue-router";
 import {
   getSasCourseList,
@@ -72,9 +70,10 @@ import {
 } from "@/api/allAnalysisPage";
 import EventBus from "@/plugins/eventBus";
 import { message } from "ant-design-vue";
+import { RANGE_POINT_TYPE } from "@/constants/constants";
 
+let activeKey = $ref(["0"]);
 const store = useMainStore();
-store.currentLocation = "项目管理/ 整体分析";
 
 let rootOrgId = $ref(undefined as unknown as number);
 let courseId = $ref(undefined as undefined | number);
@@ -108,7 +107,6 @@ let rangeConfigRef = $ref(null);
 
 const openRangeConfigModal = (item: any) => {
   selectedCourseId = item.courseId;
-  console.log(item);
   selectedRangeConfig = JSON.parse(item.totalRangeConfig || "0") || [
     {
       type: "ZERO",
@@ -128,4 +126,25 @@ async function handleRangeConfigUpdate(rangeConfig: any) {
   });
   message.success({ content: "操作成功" });
 }
+
+function scoreTitle(rangeConfig: any) {
+  if (!rangeConfig) return false;
+  if (rangeConfig.type === "ZERO") return "0-";
+
+  return `${rangeConfig.baseScore + rangeConfig.adjustScore}(${
+    RANGE_POINT_TYPE[rangeConfig.type]
+  }${rangeConfig.adjustScore > 0 ? "+" : ""}${rangeConfig.adjustScore})-`;
+}
+
+function openModal1() {
+  EventBus.emit("SHOW_SETTING", "DESCRIBE04");
+}
 </script>
+
+<style scoped>
+.section-title {
+  color: #212534;
+  font-size: 16px;
+  font-weight: 700;
+}
+</style>

+ 178 - 83
src/features/allAnalysis/ScoreRate.vue

@@ -1,81 +1,144 @@
 <template>
   <div>
-    <div class="tw-bg-white tw-p-5 tw-rounded-xl tw-mb-5">
-      <span class="tw-mr-4"></span>
-      <ProjectCourseSelect
-        :project-id="projectId"
-        v-model:value="courseId"
-        disabled
-      />
-      <span class="tw-mr-4"></span>
-
-      <div class="tw-mt-4">
-        <a-button @click="goBack">返回</a-button>
-      </div>
-
-      <template v-for="(item, index) in data" :key="index">
-        <ProjectCourseSelect
-          :project-id="projectId"
-          v-model:value="item.courseId"
-          disabled
-        />
-        <h3>等距({{ scoreGap }}分)分组频数分布</h3>
-        <!-- TODO: 将下面的逻辑抽离到JS中,再将分段完成 -->
-        <table>
-          <tr>
-            <th>分数段</th>
-            <th>频数</th>
-            <th>频率(%)</th>
-            <th>累计频数</th>
-            <th>累计频数(%)</th>
-          </tr>
-          <tr v-for="(item2, index) in item.totalScore / scoreGap" :key="index">
-            <td>{{ (item2 - 1) * scoreGap }}-</td>
-            <td>
-              {{
-                item.scoreRangeAcc[item2 * scoreGap] -
-                item.scoreRangeAcc[(item2 - 1) * scoreGap]
-              }}
-            </td>
-            <td>
-              {{
-                (item.scoreRangeAcc[item2 * scoreGap] -
-                  item.scoreRangeAcc[(item2 - 1) * scoreGap]) /
-                item.scoreRangeTotal
-              }}
-            </td>
-            <td>{{ item.scoreRangeAcc[item2 * scoreGap] }}</td>
-            <td>
-              {{ item.scoreRangeAcc[item2 * scoreGap] / item.scoreRangeTotal }}
-            </td>
-          </tr>
-          <tr v-if="item.totalScore % scoreGap">
-            <td>
-              {{
-                item.scoreRangeAcc[item.scoreRangeAcc.length - 1] -
-                item.scoreRangeAcc[
-                  item.scoreRangeAcc.length - 1 - (item.totalScore % scoreGap)
-                ]
-              }}
-            </td>
-            <td>
-              {{
-                (item.scoreRangeAcc[item.scoreRangeAcc.length - 1] -
+    <div class="tw-bg-white tw-rounded-xl">
+      <div class="tw-mt-4"></div>
+
+      <a-collapse v-model:activeKey="activeKey">
+        <a-collapse-panel
+          v-for="(item, index) in data"
+          :key="index"
+          :header="item.courseName + '(' + item.courseCode + ')'"
+        >
+          <div class="tw-flex tw-justify-between tw-items-center tw-my-4">
+            <h3 class="section-title">等距({{ scoreGap }}分)分组频数分布</h3>
+            <a-button @click="openModal1">说明</a-button>
+          </div>
+          <!-- TODO: 将下面的逻辑抽离到JS中,再将分段完成 -->
+          <table class="custom-table">
+            <tr>
+              <th>分数段</th>
+              <th>频数</th>
+              <th>频率(%)</th>
+              <th>累计频数</th>
+              <th>累计频数(%)</th>
+            </tr>
+            <tr
+              v-for="(item2, index) in item.totalScore / scoreGap"
+              :key="index"
+            >
+              <td>{{ (item2 - 1) * scoreGap }}-</td>
+              <td>
+                {{
+                  item.scoreRangeAcc[item2 * scoreGap] -
+                  item.scoreRangeAcc[(item2 - 1) * scoreGap]
+                }}
+              </td>
+              <td>
+                {{
+                  (item.scoreRangeAcc[item2 * scoreGap] -
+                    item.scoreRangeAcc[(item2 - 1) * scoreGap]) /
+                  item.scoreRangeTotal
+                }}
+              </td>
+              <td>{{ item.scoreRangeAcc[item2 * scoreGap] }}</td>
+              <td>
+                {{
+                  item.scoreRangeAcc[item2 * scoreGap] / item.scoreRangeTotal
+                }}
+              </td>
+            </tr>
+            <tr v-if="item.totalScore % scoreGap">
+              <td>
+                {{
+                  item.scoreRangeAcc[item.scoreRangeAcc.length - 1] -
                   item.scoreRangeAcc[
                     item.scoreRangeAcc.length - 1 - (item.totalScore % scoreGap)
-                  ]) /
-                item.scoreRangeTotal
-              }}
-            </td>
-            <td>{{ item.scoreRangeAcc[item.scoreRangeAcc.length - 1] }}</td>
-            <td>100%</td>
-          </tr>
-        </table>
-
-        <h3>科目分数线分组的频数分布</h3>
-        <a-button @click="openRangeConfigModal(item)">分段设置</a-button>
-        <div v-if="item.rangeConfig"></div>
-      </template>
+                  ]
+                }}
+              </td>
+              <td>
+                {{
+                  (item.scoreRangeAcc[item.scoreRangeAcc.length - 1] -
+                    item.scoreRangeAcc[
+                      item.scoreRangeAcc.length -
+                        1 -
+                        (item.totalScore % scoreGap)
+                    ]) /
+                  item.scoreRangeTotal
+                }}
+              </td>
+              <td>{{ item.scoreRangeAcc[item.scoreRangeAcc.length - 1] }}</td>
+              <td>100%</td>
+            </tr>
+          </table>
+
+          <div class="tw-flex tw-justify-between tw-items-center tw-my-4">
+            <h3 class="section-title">科目分数线分组的频数分布</h3>
+            <div class="tw-flex tw-gap-2">
+              <a-button @click="openRangeConfigModal(item)">分段设置</a-button>
+              <a-button @click="openModal2">说明</a-button>
+            </div>
+          </div>
+          <div v-if="item.rangeConfig">
+            <table class="custom-table">
+              <tr>
+                <th>分数段</th>
+                <th>频数</th>
+                <th>频率(%)</th>
+                <th>累计频数</th>
+                <th>累计频数(%)</th>
+              </tr>
+              <tr v-for="(item2, index) in item.rangeConfig" :key="index">
+                <td>
+                  {{ scoreTitle(item.rangeConfig[index]) }}
+                </td>
+                <td>
+                  {{
+                    (item.rangeConfig[index + 1]
+                      ? item.scoreRangeAcc[
+                          item.rangeConfig[index + 1].baseScore +
+                            item.rangeConfig[index + 1].adjustScore
+                        ]
+                      : 0) -
+                      item.scoreRangeAcc[item2.baseScore + item2.adjustScore] ||
+                    0
+                  }}
+                </td>
+                <td>
+                  {{
+                    ((item.rangeConfig[index + 1]
+                      ? item.scoreRangeAcc[
+                          item.rangeConfig[index + 1].baseScore +
+                            item.rangeConfig[index + 1].adjustScore
+                        ]
+                      : 0) -
+                      item.scoreRangeAcc[item2.baseScore + item2.adjustScore] ||
+                      0) / item.scoreRangeTotal
+                  }}
+                </td>
+                <td>
+                  {{
+                    item2.baseScore + item2.adjustScore >=
+                    item.scoreRangeAcc.length
+                      ? item.scoreRangeAcc[item.scoreRangeAcc.length - 1]
+                      : item.scoreRangeAcc[item2.baseScore + item2.adjustScore]
+                  }}
+                </td>
+                <td>
+                  {{
+                    item2.baseScore + item2.adjustScore >=
+                    item.scoreRangeAcc.length
+                      ? 1
+                      : item.scoreRangeAcc[
+                          item2.baseScore + item2.adjustScore
+                        ] / item.scoreRangeTotal
+                  }}
+                </td>
+              </tr>
+            </table>
+          </div>
+        </a-collapse-panel>
+      </a-collapse>
     </div>
 
     <CommonRangeConfig
@@ -90,8 +153,7 @@
 
 <script setup lang="ts">
 import { useMainStore } from "@/store";
-import { goBack } from "@/utils/utils";
-import { watch, onMounted, ref, toRaw, computed, reactive } from "vue-demi";
+import { onMounted } from "vue-demi";
 import { useRoute } from "vue-router";
 import {
   getSasCourseList,
@@ -99,6 +161,9 @@ import {
 } from "@/api/allAnalysisPage";
 import EventBus from "@/plugins/eventBus";
 import { message } from "ant-design-vue";
+import { RANGE_POINT_TYPE } from "@/constants/constants";
+
+let activeKey = $ref(["0"]);
 
 const store = useMainStore();
 
@@ -118,6 +183,16 @@ async function fetchData() {
     v.scoreRange = Object.values(JSON.parse(v.scoreRange || "{}"));
     return v;
   });
+  res.data = res.data.map((v: any) => {
+    v.rangeConfig = JSON.parse(v.rangeConfig || "0") || [
+      {
+        type: "ZERO",
+        baseScore: 0,
+        adjustScore: 0,
+      },
+    ];
+    return v;
+  });
   res.data = res.data.map((v: { scoreRange: number[] }) => {
     let acc = 0;
     v.scoreRangeAcc = v.scoreRange.map((_v, i, a) => {
@@ -151,13 +226,7 @@ let rangeConfigRef = $ref(null);
 
 const openRangeConfigModal = (item: any) => {
   selectedCourseId = item.courseId;
-  selectedRangeConfig = JSON.parse(item.rangeConfig || "0") || [
-    {
-      type: "ZERO",
-      baseScore: 0,
-      adjustScore: 0,
-    },
-  ];
+  selectedRangeConfig = JSON.parse(JSON.stringify(item.rangeConfig));
   // @ts-ignore
   rangeConfigRef.showModal();
 };
@@ -169,5 +238,31 @@ async function handleRangeConfigUpdate(rangeConfig: any) {
     rangeConfig: JSON.stringify(rangeConfig),
   });
   message.success({ content: "操作成功" });
+  window.location.reload();
+}
+
+function scoreTitle(rangeConfig: any) {
+  if (!rangeConfig) return false;
+  if (rangeConfig.type === "ZERO") return "0-";
+
+  return `${rangeConfig.baseScore + rangeConfig.adjustScore}(${
+    RANGE_POINT_TYPE[rangeConfig.type]
+  }${rangeConfig.adjustScore > 0 ? "+" : ""}${rangeConfig.adjustScore})-`;
+}
+
+function openModal1() {
+  EventBus.emit("SHOW_SETTING", "DESCRIBE02");
+}
+
+function openModal2() {
+  EventBus.emit("SHOW_SETTING", "DESCRIBE03");
 }
 </script>
+
+<style scoped>
+.section-title {
+  color: #212534;
+  font-size: 16px;
+  font-weight: 700;
+}
+</style>

+ 2 - 7
src/features/paperAnalysis/QuestionDifficultyGroup.vue

@@ -3,7 +3,7 @@
     <a-button @click="openModal1">说明</a-button>
     <a-button @click="openModal2">说明</a-button>
 
-    <table class="table">
+    <table class="custom-table">
       <tr>
         <th>大题号</th>
         <th>小题号</th>
@@ -81,9 +81,4 @@ async function handleRangeConfigUpdate(rangeConfig: any) {
 }
 </script>
 
-<style scoped>
-.table td,
-.table th {
-  border: 1px solid grey;
-}
-</style>
+<style scoped></style>

+ 8 - 0
src/features/projectManagement/ProjectManagement.vue

@@ -43,6 +43,9 @@
         <template #status="{ text }">
           <a>{{ $filters.projectStatusFilter(text) }}</a>
         </template>
+        <template #compute="{ text }">
+          <a>{{ $filters.booleanYesNoFilter(text) }}</a>
+        </template>
         <template #action="{ record }">
           <span>
             <a-button
@@ -208,6 +211,11 @@ const columns = [
     dataIndex: "status",
     slots: { customRender: "status" },
   },
+  {
+    title: "需重新计算",
+    dataIndex: "needCompute",
+    slots: { customRender: "compute" },
+  },
   {
     title: "创建时间",
     dataIndex: "createTime",

+ 4 - 0
src/filters/index.ts

@@ -10,6 +10,10 @@ export default {
     if (typeof val !== "boolean") return "无";
     return { true: "启用", false: "禁用" }[val + ""];
   },
+  booleanYesNoFilter(val: boolean) {
+    if (val === null) return "无";
+    return { true: "是", false: "否" }[val + ""];
+  },
   courseTypeFilter(val: string) {
     if (typeof val !== "string") return "无";
     return { PUBLIC: "公共科目", MAJOR: "专业科目" }[val + ""];

+ 16 - 0
src/styles/global.css

@@ -79,3 +79,19 @@ button.ant-btn.download-tpl-btn {
 .ant-input-affix-wrapper {
   border-radius: 10px !important;
 }
+
+.ant-input-number {
+  border-radius: 10px !important;
+}
+
+table.custom-table {
+  width: 100%;
+  border-collapse: collapse !important;
+  border-spacing: 0;
+}
+.custom-table td {
+  border: 1px solid #eeeeee;
+  border-radius: 6px;
+  border-collapse: separate !important;
+  padding: 10px;
+}