Michael Wang преди 3 години
родител
ревизия
33c158064a

+ 1 - 0
components.d.ts

@@ -30,6 +30,7 @@ declare module 'vue' {
     PaperTypeSelect: typeof import('./src/components/PaperTypeSelect.vue')['default']
     PaperTypeSelect: typeof import('./src/components/PaperTypeSelect.vue')['default']
     ProjectCourseSelect: typeof import('./src/components/ProjectCourseSelect.vue')['default']
     ProjectCourseSelect: typeof import('./src/components/ProjectCourseSelect.vue')['default']
     'ProjectCourseSelect copy': typeof import('./src/components/ProjectCourseSelect copy.vue')['default']
     'ProjectCourseSelect copy': typeof import('./src/components/ProjectCourseSelect copy.vue')['default']
+    ProjectSelect: typeof import('./src/components/ProjectSelect.vue')['default']
     ProjectStatusSelect: typeof import('./src/components/ProjectStatusSelect.vue')['default']
     ProjectStatusSelect: typeof import('./src/components/ProjectStatusSelect.vue')['default']
     'ProjectStatusSelect copy': typeof import('./src/components/ProjectStatusSelect copy.vue')['default']
     'ProjectStatusSelect copy': typeof import('./src/components/ProjectStatusSelect copy.vue')['default']
     QmButton: typeof import('./src/components/QmButton.vue')['default']
     QmButton: typeof import('./src/components/QmButton.vue')['default']

+ 25 - 0
src/api/paperManagementPage.ts

@@ -0,0 +1,25 @@
+import { httpApp } from "@/plugins/axiosApp";
+
+/** 试卷分页查询 */
+export function getPaperList(params: {
+  courseId?: number;
+  courseType?: string;
+  projectId?: number;
+  paperType?: string;
+  pageNo?: number;
+  pageSize?: number;
+}) {
+  return httpApp.post("/api/ess/paper/list", params);
+}
+
+/** 更新科目 */
+export function updateCourse(params: {
+  code?: string;
+  name?: string;
+  enable?: boolean;
+  id?: number;
+  type?: string;
+  rootOrgId?: number;
+}) {
+  return httpApp.post("/api/ess/course/save", params);
+}

+ 6 - 2
src/components/PaperTypeSelect.vue

@@ -1,13 +1,17 @@
 <template>
 <template>
   <a-select
   <a-select
-    placeholder="分析状态"
+    placeholder="试卷类型"
     allowClear
     allowClear
     :disabled="props.disabled"
     :disabled="props.disabled"
     :value="valueStr"
     :value="valueStr"
     @change="handleChange"
     @change="handleChange"
     style="width: 120px"
     style="width: 120px"
   >
   >
-    <a-select-option v-for="(item, index) in optionList" :key="index" :value="item">
+    <a-select-option
+      v-for="(item, index) in optionList"
+      :key="index"
+      :value="item"
+    >
       {{ item }}
       {{ item }}
     </a-select-option>
     </a-select-option>
   </a-select>
   </a-select>

+ 47 - 0
src/components/ProjectSelect.vue

@@ -0,0 +1,47 @@
+<template>
+  <a-select
+    placeholder="请选择项目"
+    allowClear
+    :value="valueStr"
+    @change="handleChange"
+    style="width: 140px"
+  >
+    <a-select-option
+      v-for="(item, index) in optionList"
+      :key="index"
+      :value="item.id"
+    >
+      {{ item.name }}
+    </a-select-option>
+  </a-select>
+</template>
+
+<script setup lang="ts">
+import { getProjectList } from "@/api/projectManagementPage";
+import { onMounted, computed } from "vue-demi";
+
+const props = defineProps<{ value?: null | number; projectId: number }>();
+const emit = defineEmits(["update:value"]);
+
+let optionList = $ref<{ id: number; name: string }[]>([]);
+
+onMounted(async () => {
+  const res = await getProjectList({
+    id: props.projectId,
+    rootOrgId: -1,
+    pageNo: 1,
+    pageSize: 100,
+  });
+  optionList = res.data.content;
+});
+
+const valueStr = computed(() => {
+  let res: undefined | number | string = props.value ?? undefined;
+  // if (typeof res === "number") res = props.value + "";
+  return res as undefined | string;
+});
+
+function handleChange(v: string) {
+  emit("update:value", v);
+}
+</script>

+ 1 - 1
src/components/RootOrgSelect.vue

@@ -20,7 +20,7 @@
 import { getRootOrgList } from "@/api/rootOrgPage";
 import { getRootOrgList } from "@/api/rootOrgPage";
 import { onMounted, computed } from "vue-demi";
 import { onMounted, computed } from "vue-demi";
 
 
-const props = defineProps({ value: null });
+const props = defineProps<{ value?: null | number | string }>();
 const emit = defineEmits(["update:value"]);
 const emit = defineEmits(["update:value"]);
 
 
 let optionList = $ref<{ id: number; name: string }[]>([]);
 let optionList = $ref<{ id: number; name: string }[]>([]);

+ 1 - 1
src/features/projectDataManagement/ProjectDataManagement.vue

@@ -59,7 +59,7 @@ store.currentLocation = "基础管理 / 项目列表";
 let rootOrgId = $ref(undefined as unknown as number);
 let rootOrgId = $ref(undefined as unknown as number);
 
 
 const route = useRoute();
 const route = useRoute();
-const projectId = +route.params.id;
+const projectId = +route.params.projectId;
 let data = $ref([]);
 let data = $ref([]);
 
 
 let project: any = computed(() => data[0] || {});
 let project: any = computed(() => data[0] || {});

+ 5 - 3
src/features/projectManagement/ProjectManagement.vue

@@ -74,9 +74,7 @@
             >
             >
               参数配置
               参数配置
             </a-button>
             </a-button>
-            <a-button @click="handleDeleteProjects([record.id])">
-              试卷列表
-            </a-button>
+            <a-button @click="goProjectPapers(record.id)"> 试卷列表 </a-button>
             <a-button @click="handleDeleteProjects([record.id])">
             <a-button @click="handleDeleteProjects([record.id])">
               整体分析
               整体分析
             </a-button>
             </a-button>
@@ -274,4 +272,8 @@ function goProjectDataSource(id: number) {
 function goProjectParams(id: number) {
 function goProjectParams(id: number) {
   router.push("params/" + id);
   router.push("params/" + id);
 }
 }
+
+function goProjectPapers(id: number) {
+  router.push("papers/" + id);
+}
 </script>
 </script>

+ 129 - 0
src/features/projectPapersManagement/ProjectPapersManagement.vue

@@ -0,0 +1,129 @@
+<template>
+  <div>
+    <div class="tw-bg-white tw-p-5 tw-rounded-xl tw-mb-5">
+      <span class="tw-mr-4"></span>
+      <ProjectSelect :project-id="projectId" v-model:value="projectId" />
+      <CourseSelect :root-org-id="rootOrgId" v-model:value="courseId" />
+      <CourseTypeSelect v-model:value="courseType" />
+      <PaperTypeSelect v-model:value="paperType" />
+      <span class="tw-mr-4"></span>
+      <span class="tw-mr-4"></span>
+      <a-button @click="search">查询</a-button>
+
+      <div class="tw-mt-4">
+        <a-button @click="goAllAnalysis">整体分析</a-button>
+        <a-button @click="goBack">返回</a-button>
+      </div>
+    </div>
+
+    <div class="tw-bg-white tw-p-5 tw-rounded-xl">
+      <a-table
+        row-key="id"
+        :columns="columns"
+        :data-source="data"
+        :pagination="{
+          pageSize: pageSize,
+          current: pageNo,
+          total: totalElements,
+          showTotal: (total: number) => `总数:${total}`,
+          onChange: (pageNoChanged: number, pageSizeChanged: number) => {
+            pageNo = pageNoChanged; 
+            pageSize = pageSizeChanged;
+          }
+        }"
+      >
+        <template #course="{ record }">
+          <a>{{ `${record.courseName}(${record.courseCode})` }}</a>
+        </template>
+        <template #action="{ record }">
+          <span>
+            <a-button @click="showModal(record)">编辑</a-button>
+          </span>
+        </template>
+      </a-table>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { updateProjectCourse } from "@/api/projectParamsManagementPage";
+import { useMainStore } from "@/store";
+import { goBack } from "@/utils/utils";
+import { watch, onMounted, ref, toRaw } from "vue-demi";
+import { useRoute } from "vue-router";
+import ProjectSelect from "@/components/ProjectSelect.vue";
+import { Course_Type } from "@/types";
+import { getPaperList } from "@/api/paperManagementPage";
+import router from "@/router";
+
+const store = useMainStore();
+store.currentLocation = "基础管理 / 项目列表";
+
+let rootOrgId = $ref(undefined as unknown as number);
+let courseId = $ref(undefined as undefined | number);
+let courseType = $ref(undefined as unknown as Course_Type);
+let paperType = $ref(undefined as undefined | string);
+const route = useRoute();
+const projectId = +route.params.projectId;
+
+let data = $ref([]);
+let pageSize = $ref(10);
+let pageNo = $ref(1);
+let totalElements = $ref(0);
+
+async function search() {
+  await fetchData();
+}
+
+watch(() => [pageNo, pageSize], fetchData);
+
+async function fetchData() {
+  const res = await getPaperList({
+    projectId,
+    courseId,
+    courseType,
+    paperType,
+    pageSize,
+    pageNo,
+  });
+  // console.log(res);
+  data = res.data.content;
+  pageNo = res.data.pageNo;
+  pageSize = res.data.pageSize;
+  totalElements = res.data.totalElements;
+}
+
+const columns = [
+  {
+    title: "科目",
+    dataIndex: "course",
+    slots: { customRender: "course" },
+  },
+  {
+    title: "试卷类型",
+    dataIndex: "paperType",
+  },
+  {
+    title: "试卷名称",
+    dataIndex: "paperName",
+  },
+  {
+    title: "有效样本数",
+    dataIndex: "totalCount",
+  },
+  {
+    title: "操作",
+    key: "action",
+    slots: { customRender: "action" },
+  },
+];
+
+onMounted(async () => {
+  rootOrgId = store.userInfo.rootOrgId;
+  await search();
+});
+
+async function goAllAnalysis() {
+  router.push("/" + projectId);
+}
+</script>

+ 2 - 3
src/features/projectParamsManagement/ProjectParamsManagement.vue

@@ -58,7 +58,7 @@
             :value="projectObj.courseName + '(' + projectObj.courseCode + ')'"
             :value="projectObj.courseName + '(' + projectObj.courseCode + ')'"
           ></a-input>
           ></a-input>
         </a-form-item>
         </a-form-item>
-        <a-form-item label="项目名称">
+        <a-form-item label="科目类型">
           <CourseTypeSelect :value="projectObj.courseType" disabled />
           <CourseTypeSelect :value="projectObj.courseType" disabled />
         </a-form-item>
         </a-form-item>
 
 
@@ -116,10 +116,9 @@ const store = useMainStore();
 store.currentLocation = "基础管理 / 项目列表";
 store.currentLocation = "基础管理 / 项目列表";
 
 
 let rootOrgId = $ref(undefined as unknown as number);
 let rootOrgId = $ref(undefined as unknown as number);
-let name = $ref("");
 let courseId = $ref(undefined as undefined | number);
 let courseId = $ref(undefined as undefined | number);
 const route = useRoute();
 const route = useRoute();
-const projectId = +route.params.id;
+const projectId = +route.params.projectId;
 
 
 let data = $ref([]);
 let data = $ref([]);
 let pageSize = $ref(10);
 let pageSize = $ref(10);

+ 9 - 2
src/router/index.ts

@@ -52,17 +52,24 @@ const routes = [
           import("@/features/projectManagement/ProjectManagement.vue"),
           import("@/features/projectManagement/ProjectManagement.vue"),
       },
       },
       {
       {
-        path: "datasource/:id",
+        path: "datasource/:projectId",
         component: () =>
         component: () =>
           import("@/features/projectDataManagement/ProjectDataManagement.vue"),
           import("@/features/projectDataManagement/ProjectDataManagement.vue"),
       },
       },
       {
       {
-        path: "params/:id",
+        path: "params/:projectId",
         component: () =>
         component: () =>
           import(
           import(
             "@/features/projectParamsManagement/ProjectParamsManagement.vue"
             "@/features/projectParamsManagement/ProjectParamsManagement.vue"
           ),
           ),
       },
       },
+      {
+        path: "papers/:projectId",
+        component: () =>
+          import(
+            "@/features/projectPapersManagement/ProjectPapersManagement.vue"
+          ),
+      },
     ],
     ],
     component: Layout,
     component: Layout,
   },
   },