1
0

2 Commits c3910d473f ... e406beada6

Autor SHA1 Mensagem Data
  shmily1213 e406beada6 合并代码 há 3 semanas atrás
  shmily1213 2f5d6a0854 修改.gitignore há 3 semanas atrás

+ 2 - 1
.gitignore

@@ -7,7 +7,8 @@
 
 target/
 !.mvn/wrapper/maven-wrapper.jar
-
+node_modules
+.DS_Store
 ######################################################################
 # IDE
 

+ 9 - 0
back-ui/src/api/dz/subject.js

@@ -9,6 +9,15 @@ export function listSubject(query) {
   })
 }
 
+// 查询所有科目
+export function listAllSubject(query) {
+  return request({
+    url: '/dz/subject/listAll',
+    method: 'get',
+    params: query
+  })
+}
+
 // 查询科目详细
 export function getSubject(subjectId) {
   return request({

+ 9 - 1
back-ui/src/api/learn/knowledgeTree.js

@@ -1,7 +1,7 @@
 import request from '@/utils/request'
 
 // 查询知识点树列表
-export function listKnowledgeTree(query) {
+export function listKnowledge(query) {
   return request({
     url: '/learn/knowledgeTree/list',
     method: 'get',
@@ -9,6 +9,14 @@ export function listKnowledgeTree(query) {
   })
 }
 
+export function listKnowledgeTree(query) {
+  return request({
+    url: '/learn/knowledgeTree/tree',
+    method: 'get',
+    params: query
+  })
+}
+
 // 查询知识点树详细
 export function getKnowledgeTree(id) {
   return request({

+ 5 - 0
back-ui/src/assets/styles/ruoyi.scss

@@ -74,6 +74,11 @@
   padding: 10px 20px 0;
 }
 
+.el-dialog__body {
+  max-height: 72vh;
+  overflow: auto;
+}
+
 .el-table {
   .el-table__header-wrapper, .el-table__fixed-header-wrapper {
     th {

+ 98 - 314
back-ui/src/components/Form/index.vue

@@ -1,193 +1,85 @@
 <template>
-  <el-form
-    ref="formRef"
-    :model="formData"
-    :rules="formRules"
-    :label-width="labelWidth"
-    :label-position="labelPosition"
-    :size="size"
-    :disabled="disabled"
-    :inline="inline"
-    v-bind="$attrs"
-  >
+  <el-form ref="formRef" :model="formData" :rules="formRules" :label-width="labelWidth" :label-position="labelPosition"
+    :size="size" :disabled="disabled" :inline="inline" v-bind="$attrs">
     <!-- 内联表单 -->
     <template v-if="inline">
-      <el-form-item
-        v-for="(item, index) in formConfig"
-        :key="index"
-        :label="item.label"
-        :prop="item.name"
-        :required="item.req"
-        :rules="getItemRules(item)"
-      >
+      <el-form-item v-for="(item, index) in formConfig" :key="index" :label="item.label" :prop="item.name"
+        :required="item.req" :rules="getItemRules(item)">
         <!-- 输入框 -->
-        <el-input
-          v-if="item.type === 'text'"
-          v-model="formData[item.name]"
-          :placeholder="item.placeholder || `请输入${item.label}`"
-          :clearable="item.clearable !== false"
-          :disabled="item.disabled"
-          :maxlength="item.maxlength"
-          :show-word-limit="item.showWordLimit"
-          v-bind="item.props"
-        />
+        <el-input v-if="item.type === 'text'" v-model="formData[item.name]"
+          :placeholder="item.placeholder || `请输入${item.label}`" :clearable="item.clearable !== false"
+          :disabled="item.disabled" :maxlength="item.maxlength" :show-word-limit="item.showWordLimit"
+          v-bind="item.props" />
 
         <!-- 文本域 -->
-        <el-input
-          v-else-if="item.type === 'textarea'"
-          v-model="formData[item.name]"
-          type="textarea"
-          :placeholder="item.placeholder || `请输入${item.label}`"
-          :rows="item.rows || 3"
-          :clearable="item.clearable !== false"
-          :disabled="item.disabled"
-          :maxlength="item.maxlength"
-          :show-word-limit="item.showWordLimit"
-          v-bind="item.props"
-        />
+        <el-input v-else-if="item.type === 'textarea'" v-model="formData[item.name]" type="textarea"
+          :placeholder="item.placeholder || `请输入${item.label}`" :rows="item.rows || 3"
+          :clearable="item.clearable !== false" :disabled="item.disabled" :maxlength="item.maxlength"
+          :show-word-limit="item.showWordLimit" v-bind="item.props" />
 
         <!-- 数字输入框 -->
-        <el-input-number
-          v-else-if="item.type === 'number'"
-          v-model="formData[item.name]"
-          :placeholder="item.placeholder || `请输入${item.label}`"
-          :min="item.min"
-          :max="item.max"
-          :step="item.step"
-          :precision="item.precision"
-          :disabled="item.disabled"
-          :controls="item.controls !== false"
-          v-bind="item.props"
-        />
+        <el-input-number v-else-if="item.type === 'number'" v-model="formData[item.name]"
+          :placeholder="item.placeholder || `请输入${item.label}`" :min="item.min" :max="item.max" :step="item.step"
+          :precision="item.precision" :disabled="item.disabled" :controls="item.controls !== false"
+          v-bind="item.props" />
 
         <!-- 选择器 -->
-        <el-select
-          v-else-if="item.type === 'select'"
-          v-model="formData[item.name]"
-          :placeholder="item.placeholder || `请选择${item.label}`"
-          :clearable="item.clearable !== false"
-          :disabled="item.disabled"
-          :multiple="item.multiple"
-          :filterable="item.filterable"
-          :remote="item.remote"
-          :remote-method="item.remoteMethod"
-          :loading="item.loading"
-          v-bind="item.props"
-          :style="inline ? 'width: 180px' : 'width: 100%'"
-        >
-          <el-option
-            v-for="option in getOptions(item)"
-            :key="getOptionValue(option, item)"
-            :label="getOptionLabel(option, item)"
-            :value="getOptionValue(option, item)"
-          />
+        <el-select v-else-if="item.type === 'select'" v-model="formData[item.name]"
+          :placeholder="item.placeholder || `请选择${item.label}`" :clearable="item.clearable !== false"
+          :disabled="item.disabled" :multiple="item.multiple" :filterable="item.filterable" :remote="item.remote"
+          :remote-method="item.remoteMethod" :loading="item.loading" v-bind="item.props"
+          :style="inline ? 'width: 180px' : 'width: 100%'">
+          <el-option v-for="option in getOptions(item)" :key="getOptionValue(option, item)"
+            :label="getOptionLabel(option, item)" :value="getOptionValue(option, item)" />
         </el-select>
 
         <!-- 日期选择器 -->
-        <el-date-picker
-          v-else-if="item.type === 'date'"
-          v-model="formData[item.name]"
-          :type="item.dateType || 'date'"
-          :placeholder="item.placeholder || `请选择${item.label}`"
-          :format="item.format"
-          :value-format="item.valueFormat"
-          :clearable="item.clearable !== false"
-          :disabled="item.disabled"
-          :show-time="item.showTime"
-          :range-separator="item.rangeSeparator || '至'"
-          :start-placeholder="item.startPlaceholder"
-          :end-placeholder="item.endPlaceholder"
-          v-bind="item.props"
-          style="width: 180px"
-        />
+        <el-date-picker v-else-if="item.type === 'date'" v-model="formData[item.name]" :type="item.dateType || 'date'"
+          :placeholder="item.placeholder || `请选择${item.label}`" :format="item.format" :value-format="item.valueFormat"
+          :clearable="item.clearable !== false" :disabled="item.disabled" :show-time="item.showTime"
+          :range-separator="item.rangeSeparator || '至'" :start-placeholder="item.startPlaceholder"
+          :end-placeholder="item.endPlaceholder" v-bind="item.props" style="width: 180px" />
 
         <!-- 时间选择器 -->
-        <el-time-picker
-          v-else-if="item.type === 'time'"
-          v-model="formData[item.name]"
-          :placeholder="item.placeholder || `请选择${item.label}`"
-          :format="item.format"
-          :value-format="item.valueFormat"
-          :clearable="item.clearable !== false"
-          :disabled="item.disabled"
-          v-bind="item.props"
-          style="width: 180px"
-        />
+        <el-time-picker v-else-if="item.type === 'time'" v-model="formData[item.name]"
+          :placeholder="item.placeholder || `请选择${item.label}`" :format="item.format" :value-format="item.valueFormat"
+          :clearable="item.clearable !== false" :disabled="item.disabled" v-bind="item.props" style="width: 180px" />
 
         <!-- 开关 -->
-        <el-switch
-          v-else-if="item.type === 'switch'"
-          v-model="formData[item.name]"
-          :disabled="item.disabled"
-          :active-text="item.activeText"
-          :inactive-text="item.inactiveText"
-          :active-value="item.activeValue"
-          :inactive-value="item.inactiveValue"
-          v-bind="item.props"
-        />
+        <el-switch v-else-if="item.type === 'switch'" v-model="formData[item.name]" :disabled="item.disabled"
+          :active-text="item.activeText" :inactive-text="item.inactiveText" :active-value="item.activeValue"
+          :inactive-value="item.inactiveValue" v-bind="item.props" />
 
         <!-- 单选框组 -->
-        <el-radio-group
-          v-else-if="item.type === 'radio'"
-          v-model="formData[item.name]"
-          :disabled="item.disabled"
-          v-bind="item.props"
-        >
-          <el-radio
-            v-for="option in getOptions(item)"
-            :key="getOptionValue(option, item)"
-            :label="getOptionValue(option, item)"
-          >
+        <el-radio-group v-else-if="item.type === 'radio'" v-model="formData[item.name]" :disabled="item.disabled"
+          v-bind="item.props">
+          <el-radio v-for="option in getOptions(item)" :key="getOptionValue(option, item)"
+            :label="getOptionValue(option, item)">
             {{ getOptionLabel(option, item) }}
           </el-radio>
         </el-radio-group>
 
         <!-- 复选框组 -->
-        <el-checkbox-group
-          v-else-if="item.type === 'checkbox'"
-          v-model="formData[item.name]"
-          :disabled="item.disabled"
-          v-bind="item.props"
-        >
-          <el-checkbox
-            v-for="option in getOptions(item)"
-            :key="getOptionValue(option, item)"
-            :label="getOptionValue(option, item)"
-          >
+        <el-checkbox-group v-else-if="item.type === 'checkbox'" v-model="formData[item.name]" :disabled="item.disabled"
+          v-bind="item.props">
+          <el-checkbox v-for="option in getOptions(item)" :key="getOptionValue(option, item)"
+            :label="getOptionValue(option, item)">
             {{ getOptionLabel(option, item) }}
           </el-checkbox>
         </el-checkbox-group>
 
         <!-- 自定义插槽 -->
-        <slot
-          v-else-if="item.type === 'slot'"
-          :name="item.slotName || item.name"
-          :item="item"
-          :value="formData[item.name]"
-          :formData="formData"
-        />
+        <slot v-else-if="item.type === 'slot'" :name="item.slotName || item.name" :item="item"
+          :value="formData[item.name]" :formData="formData" />
 
         <!-- 范围选择器 -->
-        <div
-          v-else-if="item.type === 'range'"
-          class="range-input"
-          style="display: flex; align-items: center; gap: 10px"
-        >
-          <el-input
-            v-model="formData[item.beginField || 'begin']"
-            :placeholder="item.startPlaceholder || '开始值'"
-            :clearable="item.clearable !== false"
-            :disabled="item.disabled"
-            style="flex: 1"
-          />
+        <div v-else-if="item.type === 'range'" class="range-input"
+          style="display: flex; align-items: center; gap: 10px">
+          <el-input v-model="formData[item.beginField || 'begin']" :placeholder="item.startPlaceholder || '开始值'"
+            :clearable="item.clearable !== false" :disabled="item.disabled" style="flex: 1" />
           <span style="color: #999; font-size: 14px">至</span>
-          <el-input
-            v-model="formData[item.endField || 'end']"
-            :placeholder="item.endPlaceholder || '结束值'"
-            :clearable="item.clearable !== false"
-            :disabled="item.disabled"
-            style="flex: 1"
-          />
+          <el-input v-model="formData[item.endField || 'end']" :placeholder="item.endPlaceholder || '结束值'"
+            :clearable="item.clearable !== false" :disabled="item.disabled" style="flex: 1" />
         </div>
 
         <!-- 默认文本显示 -->
@@ -197,191 +89,83 @@
 
     <!-- 栅格布局表单 -->
     <el-row v-else :gutter="gutter">
-      <el-col
-        v-for="(item, index) in formConfig"
-        :key="index"
-        :span="item.span || 4"
-        :xs="item.xs || 12"
-        :sm="item.sm || 8"
-        :md="item.md || 6"
-        :lg="item.lg || 4"
-        :xl="item.xl || 4"
-      >
-        <el-form-item
-          :label="item.label"
-          :prop="item.name"
-          :required="item.req"
-          :rules="getItemRules(item)"
-        >
+      <el-col v-for="(item, index) in formConfig" :key="index" :span="item.span || 4" :xs="item.xs || 12"
+        :sm="item.sm || 8" :md="item.md || 6" :lg="item.lg || 4" :xl="item.xl || 4">
+        <el-form-item :label="item.label" :prop="item.name" :required="item.req" :rules="getItemRules(item)">
           <!-- 输入框 -->
-          <el-input
-            v-if="item.type === 'text'"
-            v-model="formData[item.name]"
-            :placeholder="item.placeholder || `请输入${item.label}`"
-            :clearable="item.clearable !== false"
-            :disabled="item.disabled"
-            :maxlength="item.maxlength"
-            :show-word-limit="item.showWordLimit"
-            v-bind="item.props"
-          />
+          <el-input v-if="item.type === 'text'" v-model="formData[item.name]"
+            :placeholder="item.placeholder || `请输入${item.label}`" :clearable="item.clearable !== false"
+            :disabled="item.disabled" :maxlength="item.maxlength" :show-word-limit="item.showWordLimit"
+            v-bind="item.props" />
 
           <!-- 文本域 -->
-          <el-input
-            v-else-if="item.type === 'textarea'"
-            v-model="formData[item.name]"
-            type="textarea"
-            :placeholder="item.placeholder || `请输入${item.label}`"
-            :rows="item.rows || 3"
-            :clearable="item.clearable !== false"
-            :disabled="item.disabled"
-            :maxlength="item.maxlength"
-            :show-word-limit="item.showWordLimit"
-            v-bind="item.props"
-          />
+          <el-input v-else-if="item.type === 'textarea'" v-model="formData[item.name]" type="textarea"
+            :placeholder="item.placeholder || `请输入${item.label}`" :rows="item.rows || 3"
+            :clearable="item.clearable !== false" :disabled="item.disabled" :maxlength="item.maxlength"
+            :show-word-limit="item.showWordLimit" v-bind="item.props" />
 
           <!-- 数字输入框 -->
-          <el-input-number
-            v-else-if="item.type === 'number'"
-            v-model="formData[item.name]"
-            :placeholder="item.placeholder || `请输入${item.label}`"
-            :min="item.min"
-            :max="item.max"
-            :step="item.step"
-            :precision="item.precision"
-            :disabled="item.disabled"
-            :controls="item.controls !== false"
-            v-bind="item.props"
-            style="width: 100%"
-          />
+          <el-input-number v-else-if="item.type === 'number'" v-model="formData[item.name]"
+            :placeholder="item.placeholder || `请输入${item.label}`" :min="item.min" :max="item.max" :step="item.step"
+            :precision="item.precision" :disabled="item.disabled" :controls="item.controls !== false"
+            v-bind="item.props" style="width: 100%" />
 
           <!-- 选择器 -->
-          <el-select
-            v-else-if="item.type === 'select'"
-            v-model="formData[item.name]"
-            :placeholder="item.placeholder || `请选择${item.label}`"
-            :clearable="item.clearable !== false"
-            :disabled="item.disabled"
-            :multiple="item.multiple"
-            :filterable="item.filterable"
-            :remote="item.remote"
-            :remote-method="item.remoteMethod"
-            :loading="item.loading"
-            v-bind="item.props"
-            style="width: 100%"
-          >
-            <el-option
-              v-for="option in getOptions(item)"
-              :key="getOptionValue(option, item)"
-              :label="getOptionLabel(option, item)"
-              :value="getOptionValue(option, item)"
-            />
+          <el-select v-else-if="item.type === 'select'" v-model="formData[item.name]"
+            :placeholder="item.placeholder || `请选择${item.label}`" :clearable="item.clearable !== false"
+            :disabled="item.disabled" :multiple="item.multiple" :filterable="item.filterable" :remote="item.remote"
+            :remote-method="item.remoteMethod" :loading="item.loading" v-bind="item.props" style="width: 100%">
+            <el-option v-for="option in getOptions(item)" :key="getOptionValue(option, item)"
+              :label="getOptionLabel(option, item)" :value="getOptionValue(option, item)" />
           </el-select>
 
           <!-- 日期选择器 -->
-          <el-date-picker
-            v-else-if="item.type === 'date'"
-            v-model="formData[item.name]"
-            :type="item.dateType || 'date'"
-            :placeholder="item.placeholder || `请选择${item.label}`"
-            :format="item.format"
-            :value-format="item.valueFormat"
-            :clearable="item.clearable !== false"
-            :disabled="item.disabled"
-            :show-time="item.showTime"
-            :range-separator="item.rangeSeparator || '至'"
-            :start-placeholder="item.startPlaceholder"
-            :end-placeholder="item.endPlaceholder"
-            v-bind="item.props"
-            style="width: 100%"
-          />
+          <el-date-picker v-else-if="item.type === 'date'" v-model="formData[item.name]" :type="item.dateType || 'date'"
+            :placeholder="item.placeholder || `请选择${item.label}`" :format="item.format" :value-format="item.valueFormat"
+            :clearable="item.clearable !== false" :disabled="item.disabled" :show-time="item.showTime"
+            :range-separator="item.rangeSeparator || '至'" :start-placeholder="item.startPlaceholder"
+            :end-placeholder="item.endPlaceholder" v-bind="item.props" style="width: 100%" />
 
           <!-- 时间选择器 -->
-          <el-time-picker
-            v-else-if="item.type === 'time'"
-            v-model="formData[item.name]"
-            :placeholder="item.placeholder || `请选择${item.label}`"
-            :format="item.format"
-            :value-format="item.valueFormat"
-            :clearable="item.clearable !== false"
-            :disabled="item.disabled"
-            v-bind="item.props"
-            style="width: 100%"
-          />
+          <el-time-picker v-else-if="item.type === 'time'" v-model="formData[item.name]"
+            :placeholder="item.placeholder || `请选择${item.label}`" :format="item.format" :value-format="item.valueFormat"
+            :clearable="item.clearable !== false" :disabled="item.disabled" v-bind="item.props" style="width: 100%" />
 
           <!-- 开关 -->
-          <el-switch
-            v-else-if="item.type === 'switch'"
-            v-model="formData[item.name]"
-            :disabled="item.disabled"
-            :active-text="item.activeText"
-            :inactive-text="item.inactiveText"
-            :active-value="item.activeValue"
-            :inactive-value="item.inactiveValue"
-            v-bind="item.props"
-          />
+          <el-switch v-else-if="item.type === 'switch'" v-model="formData[item.name]" :disabled="item.disabled"
+            :active-text="item.activeText" :inactive-text="item.inactiveText" :active-value="item.activeValue"
+            :inactive-value="item.inactiveValue" v-bind="item.props" />
 
           <!-- 单选框组 -->
-          <el-radio-group
-            v-else-if="item.type === 'radio'"
-            v-model="formData[item.name]"
-            :disabled="item.disabled"
-            v-bind="item.props"
-          >
-            <el-radio
-              v-for="option in getOptions(item)"
-              :key="getOptionValue(option, item)"
-              :label="getOptionValue(option, item)"
-            >
+          <el-radio-group v-else-if="item.type === 'radio'" v-model="formData[item.name]" :disabled="item.disabled"
+            v-bind="item.props">
+            <el-radio v-for="option in getOptions(item)" :key="getOptionValue(option, item)"
+              :label="getOptionValue(option, item)">
               {{ getOptionLabel(option, item) }}
             </el-radio>
           </el-radio-group>
 
           <!-- 复选框组 -->
-          <el-checkbox-group
-            v-else-if="item.type === 'checkbox'"
-            v-model="formData[item.name]"
-            :disabled="item.disabled"
-            v-bind="item.props"
-          >
-            <el-checkbox
-              v-for="option in getOptions(item)"
-              :key="getOptionValue(option, item)"
-              :label="getOptionValue(option, item)"
-            >
+          <el-checkbox-group v-else-if="item.type === 'checkbox'" v-model="formData[item.name]"
+            :disabled="item.disabled" v-bind="item.props">
+            <el-checkbox v-for="option in getOptions(item)" :key="getOptionValue(option, item)"
+              :label="getOptionValue(option, item)">
               {{ getOptionLabel(option, item) }}
             </el-checkbox>
           </el-checkbox-group>
 
           <!-- 自定义插槽 -->
-          <slot
-            v-else-if="item.type === 'slot'"
-            :name="item.slotName || item.name"
-            :item="item"
-            :value="formData[item.name]"
-            :formData="formData"
-          />
+          <slot v-else-if="item.type === 'slot'" :name="item.slotName || item.name" :item="item"
+            :value="formData[item.name]" :formData="formData" />
 
           <!-- 范围选择器 -->
-          <div
-            v-else-if="item.type === 'range'"
-            class="range-input"
-            style="display: flex; align-items: center; gap: 10px"
-          >
-            <el-input
-              v-model="formData[item.beginField || 'begin']"
-              :placeholder="item.startPlaceholder || '开始值'"
-              :clearable="item.clearable !== false"
-              :disabled="item.disabled"
-              style="flex: 1"
-            />
+          <div v-else-if="item.type === 'range'" class="range-input"
+            style="display: flex; align-items: center; gap: 10px">
+            <el-input v-model="formData[item.beginField || 'begin']" :placeholder="item.startPlaceholder || '开始值'"
+              :clearable="item.clearable !== false" :disabled="item.disabled" style="flex: 1" />
             <span style="color: #999; font-size: 14px">至</span>
-            <el-input
-              v-model="formData[item.endField || 'end']"
-              :placeholder="item.endPlaceholder || '结束值'"
-              :clearable="item.clearable !== false"
-              :disabled="item.disabled"
-              style="flex: 1"
-            />
+            <el-input v-model="formData[item.endField || 'end']" :placeholder="item.endPlaceholder || '结束值'"
+              :clearable="item.clearable !== false" :disabled="item.disabled" style="flex: 1" />
           </div>
 
           <!-- 默认文本显示 -->

+ 4 - 22
back-ui/src/components/SearchForm/index.vue

@@ -1,16 +1,8 @@
 <template>
   <div class="search-form">
     <!-- 使用 Form 组件 -->
-    <Form
-      ref="formRef"
-      :config="searchConfig"
-      :model-value="searchData"
-      @update:model-value="handleFormUpdate"
-      :inline="inline"
-      :size="size"
-      :label-width="labelWidth"
-      v-bind="$attrs"
-    >
+    <Form ref="formRef" :config="searchConfig" :model-value="searchData" @update:model-value="handleFormUpdate"
+      :inline="inline" :size="size" :label-width="labelWidth" v-bind="$attrs">
       <!-- 省市区域选择器 slot -->
       <template #areaSelect="{ value, formData }">
         <AddressSelect v-model="formData.areaIds" style="width: 180px" />
@@ -19,23 +11,13 @@
 
     <!-- 操作按钮 -->
     <div v-if="showButtons" class="search-buttons">
-      <el-button
-        type="primary"
-        :icon="Search"
-        :loading="loading"
-        @click="handleSearch"
-      >
+      <el-button type="primary" :icon="Search" :loading="loading" @click="handleSearch">
         {{ searchText }}
       </el-button>
       <el-button :icon="Refresh" @click="handleReset">
         {{ resetText }}
       </el-button>
-      <el-button
-        v-if="showExpand"
-        type="text"
-        :icon="expandCollapse ? ArrowUp : ArrowDown"
-        @click="toggleExpand"
-      >
+      <el-button v-if="showExpand" type="text" :icon="expandCollapse ? ArrowUp : ArrowDown" @click="toggleExpand">
         {{ expandCollapse ? "收起" : "展开" }}
       </el-button>
     </div>

+ 289 - 322
back-ui/src/views/dz/campus/index.vue

@@ -6,10 +6,13 @@
         <pane size="16">
           <el-col>
             <div class="head-container">
-              <el-input v-model="deptName" placeholder="请输入机构名称" clearable prefix-icon="Search" style="margin-bottom: 20px" />
+              <el-input v-model="deptName" placeholder="请输入机构名称" clearable prefix-icon="Search"
+                style="margin-bottom: 20px" />
             </div>
             <div class="head-container">
-              <el-tree :data="deptOptions" :props="{ label: 'label', children: 'children' }" :expand-on-click-node="false" :filter-node-method="filterNode" ref="deptTreeRef" node-key="id" highlight-current default-expand-all @node-click="handleNodeClick" />
+              <el-tree :data="deptOptions" :props="{ label: 'label', children: 'children' }"
+                :expand-on-click-node="false" :filter-node-method="filterNode" ref="deptTreeRef" node-key="id"
+                highlight-current default-expand-all @node-click="handleNodeClick" />
             </div>
           </el-col>
         </pane>
@@ -17,33 +20,23 @@
           <el-col>
             <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
               <el-form-item label="名称" prop="name">
-                <el-input
-                        v-model="queryParams.name"
-                        placeholder="请输入名称"
-                        clearable
-                        @keyup.enter="handleQuery"
-                />
+                <el-input v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter="handleQuery" />
               </el-form-item>
-<!--              <el-form-item label="省份" prop="location">-->
-<!--                <el-input-->
-<!--                        v-model="queryParams.location"-->
-<!--                        placeholder="请输入省份"-->
-<!--                        clearable-->
-<!--                        @keyup.enter="handleQuery"-->
-<!--                />-->
-<!--              </el-form-item>-->
+              <!--              <el-form-item label="省份" prop="location">-->
+              <!--                <el-input-->
+              <!--                        v-model="queryParams.location"-->
+              <!--                        placeholder="请输入省份"-->
+              <!--                        clearable-->
+              <!--                        @keyup.enter="handleQuery"-->
+              <!--                />-->
+              <!--              </el-form-item>-->
               <el-form-item label="省市区" prop="areaIds">
                 <AddressSelect class="w-[198px]" v-model="areaIds" />
               </el-form-item>
 
               <el-form-item label="状态" prop="status">
                 <el-select v-model="queryParams.status" placeholder="请选择状态" clearable style="width: 170px">
-                  <el-option
-                          v-for="dict in bool_values"
-                          :key="dict.value"
-                          :label="dict.label"
-                          :value="dict.value"
-                  />
+                  <el-option v-for="dict in bool_values" :key="dict.value" :label="dict.label" :value="dict.value" />
                 </el-select>
               </el-form-item>
               <el-form-item>
@@ -53,42 +46,20 @@
             </el-form>
             <el-row :gutter="10" class="mb8">
               <el-col :span="1.5">
-                <el-button
-                        type="primary"
-                        plain
-                        icon="Plus"
-                        @click="handleAdd"
-                        v-hasPermi="['dz:campus:add']"
-                >新增</el-button>
+                <el-button type="primary" plain icon="Plus" @click="handleAdd"
+                  v-hasPermi="['dz:campus:add']">新增</el-button>
               </el-col>
               <el-col :span="1.5">
-                <el-button
-                        type="success"
-                        plain
-                        icon="Edit"
-                        :disabled="single"
-                        @click="handleUpdate"
-                        v-hasPermi="['dz:campus:edit']"
-                >修改</el-button>
+                <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
+                  v-hasPermi="['dz:campus:edit']">修改</el-button>
               </el-col>
               <el-col :span="1.5">
-                <el-button
-                        type="danger"
-                        plain
-                        icon="Delete"
-                        :disabled="multiple"
-                        @click="handleDelete"
-                        v-hasPermi="['dz:campus:remove']"
-                >删除</el-button>
+                <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
+                  v-hasPermi="['dz:campus:remove']">删除</el-button>
               </el-col>
               <el-col :span="1.5">
-                <el-button
-                        type="warning"
-                        plain
-                        icon="Download"
-                        @click="handleExport"
-                        v-hasPermi="['dz:campus:export']"
-                >导出</el-button>
+                <el-button type="warning" plain icon="Download" @click="handleExport"
+                  v-hasPermi="['dz:campus:export']">导出</el-button>
               </el-col>
               <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
 
@@ -98,35 +69,33 @@
               <el-table-column type="selection" width="55" align="center" />
               <el-table-column label="ID" align="center" prop="id" />
               <el-table-column label="名称" align="center" prop="name" />
-<!--              <el-table-column label="机构ID" align="center" prop="deptId" />-->
-              <el-table-column label="归属机构" align="center" key="deptName" prop="dept.deptName" :show-overflow-tooltip="true" />
-<!--              <el-table-column label="省份" align="center" prop="location" />-->
-
-<!--              <el-table-column label="省" align="center" prop="pro" />-->
-<!--              <el-table-column label="市" align="center" prop="city" />-->
-<!--              <el-table-column label="区" align="center" prop="area" />-->
+              <!--              <el-table-column label="机构ID" align="center" prop="deptId" />-->
+              <el-table-column label="归属机构" align="center" key="deptName" prop="dept.deptName"
+                :show-overflow-tooltip="true" />
+              <!--              <el-table-column label="省份" align="center" prop="location" />-->
+
+              <!--              <el-table-column label="省" align="center" prop="pro" />-->
+              <!--              <el-table-column label="市" align="center" prop="city" />-->
+              <!--              <el-table-column label="区" align="center" prop="area" />-->
               <el-table-column label="所属地区" align="center" prop="proCityAreaName" />
               <el-table-column label="状态" align="center" prop="status">
                 <template #default="scope">
-                  <dict-tag :options="bool_values" :value="scope.row.status"/>
+                  <dict-tag :options="bool_values" :value="scope.row.status" />
                 </template>
               </el-table-column>
               <el-table-column label="备注" align="center" prop="remark" />
-              <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+              <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="140" fixed="right">
                 <template #default="scope">
-                  <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['dz:campus:edit']">修改</el-button>
-                  <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['dz:campus:remove']">删除</el-button>
+                  <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+                    v-hasPermi="['dz:campus:edit']">修改</el-button>
+                  <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+                    v-hasPermi="['dz:campus:remove']">删除</el-button>
                 </template>
               </el-table-column>
             </el-table>
 
-            <pagination
-                    v-show="total>0"
-                    :total="total"
-                    v-model:page="queryParams.pageNum"
-                    v-model:limit="queryParams.pageSize"
-                    @pagination="getList"
-            />
+            <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+              v-model:limit="queryParams.pageSize" @pagination="getList" />
           </el-col>
         </pane>
       </splitpanes>
@@ -138,11 +107,13 @@
         <el-form-item label="名称" prop="name">
           <el-input v-model="form.name" placeholder="请输入名称" />
         </el-form-item>
-<!--        <el-form-item label="机构ID" prop="deptId">-->
-<!--          <el-input v-model="form.deptId" placeholder="请输入机构ID" />-->
-<!--        </el-form-item>-->
+        <!--        <el-form-item label="机构ID" prop="deptId">-->
+        <!--          <el-input v-model="form.deptId" placeholder="请输入机构ID" />-->
+        <!--        </el-form-item>-->
         <el-form-item label="归属机构" prop="deptId">
-          <el-tree-select v-model="form.deptId" :data="enabledDeptOptions" :props="{ value: 'id', label: 'label', children: 'children' }" value-key="id" placeholder="请选择归属机构" clearable check-strictly />
+          <el-tree-select v-model="form.deptId" :data="enabledDeptOptions"
+            :props="{ value: 'id', label: 'label', children: 'children' }" value-key="id" placeholder="请选择归属机构"
+            clearable check-strictly />
         </el-form-item>
         <el-form-item label="省份" prop="location">
           <el-input v-model="form.location" placeholder="请输入省份" />
@@ -150,23 +121,19 @@
         <el-form-item label="省市区" prop="areaIds" style="width: 220px;">
           <AddressSelect class="w-[198px]" v-model="areaIds" />
         </el-form-item>
-<!--        <el-form-item label="省" prop="pro">-->
-<!--          <el-input v-model="form.pro" placeholder="请输入省" />-->
-<!--        </el-form-item>-->
-<!--        <el-form-item label="市" prop="city">-->
-<!--          <el-input v-model="form.city" placeholder="请输入市" />-->
-<!--        </el-form-item>-->
-<!--        <el-form-item label="区" prop="area">-->
-<!--          <el-input v-model="form.area" placeholder="请输入区" />-->
-<!--        </el-form-item>-->
+        <!--        <el-form-item label="省" prop="pro">-->
+        <!--          <el-input v-model="form.pro" placeholder="请输入省" />-->
+        <!--        </el-form-item>-->
+        <!--        <el-form-item label="市" prop="city">-->
+        <!--          <el-input v-model="form.city" placeholder="请输入市" />-->
+        <!--        </el-form-item>-->
+        <!--        <el-form-item label="区" prop="area">-->
+        <!--          <el-input v-model="form.area" placeholder="请输入区" />-->
+        <!--        </el-form-item>-->
         <el-form-item label="状态" prop="status">
           <el-select v-model="form.status" placeholder="请选择状态">
-            <el-option
-                    v-for="dict in bool_values"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="parseInt(dict.value)"
-            ></el-option>
+            <el-option v-for="dict in bool_values" :key="dict.value" :label="dict.label"
+              :value="parseInt(dict.value)"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="备注" prop="remark">
@@ -184,245 +151,245 @@
 </template>
 
 <script setup name="Campus">
-  import { listCampus, getCampus, delCampus, addCampus, updateCampus } from "@/api/dz/campus"
-  import { deptTreeSelect } from "@/api/system/user"
-  import useAppStore from '@/store/modules/app'
-  import { Splitpanes, Pane } from "splitpanes"
-  import "splitpanes/dist/splitpanes.css"
-  import AddressSelect from '@/components/AddressSelect';
-
-  const { proxy } = getCurrentInstance()
-  const appStore = useAppStore()
-  const { bool_values } = proxy.useDict('bool_values')
-  const deptName = ref("")
-  const deptOptions = ref(undefined)
-  const enabledDeptOptions = ref(undefined)
-
-  const campusList = ref([])
-  const open = ref(false)
-  const loading = ref(true)
-  const showSearch = ref(true)
-  const ids = ref([])
-  const single = ref(true)
-  const multiple = ref(true)
-  const total = ref(0)
-  const title = ref("")
-
-  const dataList = ref([]);
-  const areaIds = ref([]);
-  let selectedIds = [];
-
-  const data = reactive({
-    form: {},
-    queryParams: {
-      pageNum: 1,
-      pageSize: 10,
-      name: null,
-      deptId: null,
-      location: null,
-      pro: null,
-      city: null,
-      area: null,
-      status: null,
-    },
-    rules: {
-      // status: [
-      //   { required: true, message: "状态不能为空", trigger: "change" },
-      //   { required: true, message: "机构不能为空", trigger: "change" }
-      // ],
-    }
-  })
-
-  const { queryParams, form, rules } = toRefs(data)
-  const queryRef = ref(null);
-  const dateRange = ref([]);
-
-  /** 查询机构校区列表 */
-  function getList() {
-    loading.value = true
-    let areaObj = { pro: areaIds.value?.[0] || '', city: areaIds.value?.[1] || '', area: areaIds.value?.[2] || '' };
-    let params = { ...proxy.addDateRange(queryParams.value), ...areaObj }
-    listCampus(params).then(response => {
-      campusList.value = response.rows
-      total.value = response.total
-      loading.value = false
-    })
-  }
-
-  /** 通过条件过滤节点  */
-  const filterNode = (value, data) => {
-    if (!value) return true
-    return data.label.indexOf(value) !== -1
+import { listCampus, getCampus, delCampus, addCampus, updateCampus } from "@/api/dz/campus"
+import { deptTreeSelect } from "@/api/system/user"
+import useAppStore from '@/store/modules/app'
+import { Splitpanes, Pane } from "splitpanes"
+import "splitpanes/dist/splitpanes.css"
+import AddressSelect from '@/components/AddressSelect';
+
+const { proxy } = getCurrentInstance()
+const appStore = useAppStore()
+const { bool_values } = proxy.useDict('bool_values')
+const deptName = ref("")
+const deptOptions = ref(undefined)
+const enabledDeptOptions = ref(undefined)
+
+const campusList = ref([])
+const open = ref(false)
+const loading = ref(true)
+const showSearch = ref(true)
+const ids = ref([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const title = ref("")
+
+const dataList = ref([]);
+const areaIds = ref([]);
+let selectedIds = [];
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    name: null,
+    deptId: null,
+    location: null,
+    pro: null,
+    city: null,
+    area: null,
+    status: null,
+  },
+  rules: {
+    // status: [
+    //   { required: true, message: "状态不能为空", trigger: "change" },
+    //   { required: true, message: "机构不能为空", trigger: "change" }
+    // ],
   }
-
-  /** 根据名称筛选机构树 */
-  watch(deptName, val => {
-    proxy.$refs["deptTreeRef"].filter(val)
+})
+
+const { queryParams, form, rules } = toRefs(data)
+const queryRef = ref(null);
+const dateRange = ref([]);
+
+/** 查询机构校区列表 */
+function getList() {
+  loading.value = true
+  let areaObj = { pro: areaIds.value?.[0] || '', city: areaIds.value?.[1] || '', area: areaIds.value?.[2] || '' };
+  let params = { ...proxy.addDateRange(queryParams.value), ...areaObj }
+  listCampus(params).then(response => {
+    campusList.value = response.rows
+    total.value = response.total
+    loading.value = false
   })
+}
+
+/** 通过条件过滤节点  */
+const filterNode = (value, data) => {
+  if (!value) return true
+  return data.label.indexOf(value) !== -1
+}
+
+/** 根据名称筛选机构树 */
+watch(deptName, val => {
+  proxy.$refs["deptTreeRef"].filter(val)
+})
+
+/** 查询机构下拉树结构 */
+function getDeptTree() {
+  deptTreeSelect().then(response => {
+    deptOptions.value = response.data
+    enabledDeptOptions.value = filterDisabledDept(JSON.parse(JSON.stringify(response.data)))
+  })
+}
 
-  /** 查询机构下拉树结构 */
-  function getDeptTree() {
-    deptTreeSelect().then(response => {
-      deptOptions.value = response.data
-      enabledDeptOptions.value = filterDisabledDept(JSON.parse(JSON.stringify(response.data)))
-    })
-  }
-
-  /** 过滤禁用的机构 */
-  function filterDisabledDept(deptList) {
-    return deptList.filter(dept => {
-      if (dept.disabled) {
-        return false
-      }
-      if (dept.children && dept.children.length) {
-        dept.children = filterDisabledDept(dept.children)
-      }
-      return true
-    })
-  }
-
-  /** 节点单击事件 */
-  function handleNodeClick(data) {
-    queryParams.value.deptId = data.id
-    handleQuery()
-  }
-
-  /** 查询机构代理下拉树结构 */
-  function getTreeselect() {
-    listAgent().then(response => {
-      agentOptions.value = []
-      const data = { agentId: 0, name: '顶级节点', children: [] }
-      data.children = proxy.handleTree(response.data, "agentId", "parentId")
-      agentOptions.value.push(data)
-    })
-  }
-
-  // 取消按钮
-  function cancel() {
-    open.value = false
-    reset()
-  }
-
-  // 表单重置
-  function reset() {
-    form.value = {
-      id: null,
-      name: null,
-      deptId: null,
-      location: null,
-      remark: null,
-      pro: null,
-      city: null,
-      area: null,
-      status: null,
-      createTime: null,
-      updateTime: null
+/** 过滤禁用的机构 */
+function filterDisabledDept(deptList) {
+  return deptList.filter(dept => {
+    if (dept.disabled) {
+      return false
     }
-    proxy.resetForm("campusRef")
-  }
-
-  /** 搜索按钮操作 */
-  function handleQuery() {
-    queryParams.value.pageNum = 1
-    getList()
-  }
-
-  /** 重置按钮操作 */
-  function resetQuery() {
-    // 清空机构ID
-    queryParams.value.deptId = undefined
-    // 清空机构名称
-    deptName.value = ""
-    // 取消树节点的选中状态
-    proxy.$refs.deptTreeRef.setCurrentKey(null)
-    proxy.resetForm("queryRef")
-    // 清空省市区选择
-    areaIds.value = []
-
-    handleQuery()
-  }
-
-  // 多选框选中数据
-  function handleSelectionChange(selection) {
-    ids.value = selection.map(item => item.id)
-    single.value = selection.length != 1
-    multiple.value = !selection.length
+    if (dept.children && dept.children.length) {
+      dept.children = filterDisabledDept(dept.children)
+    }
+    return true
+  })
+}
+
+/** 节点单击事件 */
+function handleNodeClick(data) {
+  queryParams.value.deptId = data.id
+  handleQuery()
+}
+
+/** 查询机构代理下拉树结构 */
+function getTreeselect() {
+  listAgent().then(response => {
+    agentOptions.value = []
+    const data = { agentId: 0, name: '顶级节点', children: [] }
+    data.children = proxy.handleTree(response.data, "agentId", "parentId")
+    agentOptions.value.push(data)
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    id: null,
+    name: null,
+    deptId: null,
+    location: null,
+    remark: null,
+    pro: null,
+    city: null,
+    area: null,
+    status: null,
+    createTime: null,
+    updateTime: null
   }
-
-  /** 新增按钮操作 */
-  function handleAdd() {
-    reset()
+  proxy.resetForm("campusRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  // 清空机构ID
+  queryParams.value.deptId = undefined
+  // 清空机构名称
+  deptName.value = ""
+  // 取消树节点的选中状态
+  proxy.$refs.deptTreeRef.setCurrentKey(null)
+  proxy.resetForm("queryRef")
+  // 清空省市区选择
+  areaIds.value = []
+
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.id)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加机构校区"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _id = row.id || ids.value
+  getCampus(_id).then(response => {
+    form.value = response.data
     open.value = true
-    title.value = "添加机构校区"
-  }
-
-  /** 修改按钮操作 */
-  function handleUpdate(row) {
-    reset()
-    const _id = row.id || ids.value
-    getCampus(_id).then(response => {
-      form.value = response.data
-      open.value = true
-      title.value = "修改机构校区"
-    })
-  }
-
-  /** 提交按钮 */
-  function submitForm() {
-    proxy.$refs["campusRef"].validate(valid => {
-      if (valid) {
-        // 构建省市区对象
-        let areaObj = {
-          pro: areaIds.value?.[0] || '',
-          city: areaIds.value?.[1] || '',
-          area: areaIds.value?.[2] || ''
-        };
-
-        // 合并表单数据和省市区数据
-        const submitData = {
-          ...form.value,
-          ...areaObj
-        };
-
-        if (form.value.id != null) {
-          // updateCampus(form.value).then(response => {
-          updateCampus(submitData).then(response => {
-            proxy.$modal.msgSuccess("修改成功")
-            open.value = false
-            getList()
-          })
-        } else {
-          // addCampus(form.value).then(response => {
-          addCampus(submitData).then(response => {
-            proxy.$modal.msgSuccess("新增成功")
-            open.value = false
-            getList()
-          })
-        }
+    title.value = "修改机构校区"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["campusRef"].validate(valid => {
+    if (valid) {
+      // 构建省市区对象
+      let areaObj = {
+        pro: areaIds.value?.[0] || '',
+        city: areaIds.value?.[1] || '',
+        area: areaIds.value?.[2] || ''
+      };
+
+      // 合并表单数据和省市区数据
+      const submitData = {
+        ...form.value,
+        ...areaObj
+      };
+
+      if (form.value.id != null) {
+        // updateCampus(form.value).then(response => {
+        updateCampus(submitData).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        // addCampus(form.value).then(response => {
+        addCampus(submitData).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
       }
-    })
-  }
-
-  /** 删除按钮操作 */
-  function handleDelete(row) {
-    const _ids = row.id || ids.value
-    proxy.$modal.confirm('是否确认删除机构校区编号为"' + _ids + '"的数据项?').then(function() {
-      return delCampus(_ids)
-    }).then(() => {
-      getList()
-      proxy.$modal.msgSuccess("删除成功")
-    }).catch(() => {})
-  }
-
-  /** 导出按钮操作 */
-  function handleExport() {
-    proxy.download('dz/campus/export', {
-      ...queryParams.value
-    }, `campus_${new Date().getTime()}.xlsx`)
-  }
-
-  onMounted(() => {
-    getDeptTree()
-    getList()
+    }
   })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _ids = row.id || ids.value
+  proxy.$modal.confirm('是否确认删除机构校区编号为"' + _ids + '"的数据项?').then(function () {
+    return delCampus(_ids)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => { })
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('dz/campus/export', {
+    ...queryParams.value
+  }, `campus_${new Date().getTime()}.xlsx`)
+}
+
+onMounted(() => {
+  getDeptTree()
+  getList()
+})
 </script>

+ 4 - 4
back-ui/src/views/dz/cards/config/form.js

@@ -1,7 +1,7 @@
 const info = [
   // 第一行
   {
-    label: "省市区",
+    label: "省份筛选",
     name: "areaIds",
     value: [],
     type: "slot",
@@ -51,7 +51,7 @@ const info = [
 
   // 第二行
   {
-    label: "账号",
+    label: "手机",
     name: "cardNo",
     value: "",
     type: "text",
@@ -70,7 +70,7 @@ const info = [
     endField: "end",
   },
   {
-    label: "卡类型",
+    label: "平台机构",
     name: "type",
     value: "",
     type: "select",
@@ -80,7 +80,7 @@ const info = [
     search: true,
   },
   {
-    label: "分配考生类型",
+    label: "考生类型",
     name: "examType",
     value: "",
     type: "select",

+ 50 - 169
back-ui/src/views/dz/cards/index.vue

@@ -1,37 +1,17 @@
 <template>
   <div class="app-container">
     <!-- 搜索表单组件 -->
-    <SearchForm
-      v-show="showSearch"
-      :config="searchConfig"
-      :model-value="queryParams"
-      @update:model-value="handleSearchFormUpdate"
-      :on-search="handleQuery"
-      :on-reset="resetQuery"
-      :show-expand="true"
-      :expand-count="6"
-      label-width="68px"
-    />
+    <SearchForm v-show="showSearch" :config="searchConfig" :model-value="queryParams"
+      @update:model-value="handleSearchFormUpdate" :on-search="handleQuery" :on-reset="resetQuery" :show-expand="true"
+      :expand-count="6" label-width="68px" />
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Plus"
-          @click="handleAdd"
-          v-hasPermi="['dz:cards:add']"
-          >制卡</el-button
-        >
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['dz:cards:add']">制卡</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          @click="handleAssignCard"
-          v-hasPermi="['dz:cards:assign']"
-          style="border-color: #67c23a; color: #67c23a; font-weight: 500"
-        >
+        <el-button type="success" plain @click="handleAssignCard" v-hasPermi="['dz:cards:assign']"
+          style="border-color: #67c23a; color: #67c23a; font-weight: 500">
           <svg-icon icon-class="peoples" class="mr-1" style="font-size: 16px" />
           分配卡
         </el-button>
@@ -48,124 +28,64 @@
         >
       </el-col> -->
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          :disabled="multiple"
-          @click="handlePayment"
-          v-hasPermi="['dz:cards:pay']"
-          style="border-color: #e6a23c; color: #e6a23c; font-weight: 500"
-        >
+        <el-button type="warning" plain :disabled="multiple" @click="handlePayment" v-hasPermi="['dz:cards:pay']"
+          style="border-color: #e6a23c; color: #e6a23c; font-weight: 500">
           <svg-icon icon-class="money" class="mr-1" style="font-size: 16px" />
           缴费
         </el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          :disabled="multiple"
-          @click="handleCloseCard"
-          v-hasPermi="['dz:cards:close']"
-          style="border-color: #f56c6c; color: #f56c6c; font-weight: 500"
-        >
+        <el-button type="danger" plain :disabled="multiple" @click="handleCloseCard" v-hasPermi="['dz:cards:close']"
+          style="border-color: #f56c6c; color: #f56c6c; font-weight: 500">
           <svg-icon icon-class="lock" class="mr-1" style="font-size: 16px" />
           关卡
         </el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          :disabled="multiple"
-          @click="handleReopenCard"
-          v-hasPermi="['dz:cards:reopen']"
-          style="border-color: #13c2c2; color: #13c2c2; font-weight: 500"
-        >
+        <el-button type="primary" plain :disabled="multiple" @click="handleReopenCard" v-hasPermi="['dz:cards:reopen']"
+          style="border-color: #13c2c2; color: #13c2c2; font-weight: 500">
           <svg-icon icon-class="enter" class="mr-1" style="font-size: 16px" />
           重开
         </el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          :disabled="multiple"
-          @click="handleRefund"
-          v-hasPermi="['dz:cards:refund']"
-          style="border-color: #ff4d4f; color: #ff4d4f; font-weight: 500"
-        >
+        <el-button type="danger" plain :disabled="multiple" @click="handleRefund" v-hasPermi="['dz:cards:refund']"
+          style="border-color: #ff4d4f; color: #ff4d4f; font-weight: 500">
           <svg-icon icon-class="money" class="mr-1" style="font-size: 16px" />
           退费
         </el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          @click="handleAssociateCampus"
-          v-hasPermi="['dz:cards:associateCampus']"
-          style="border-color: #1890ff; color: #1890ff; font-weight: 500"
-        >
+        <el-button type="primary" plain @click="handleAssociateCampus" v-hasPermi="['dz:cards:associateCampus']"
+          style="border-color: #1890ff; color: #1890ff; font-weight: 500">
           <svg-icon icon-class="link" class="mr-1" style="font-size: 16px" />
           关联校区
         </el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          @click="handleApplyCard"
-          v-hasPermi="['dz:cards:openFinished']"
-          style="border-color: #52c41a; color: #52c41a; font-weight: 500"
-        >
+        <el-button type="success" plain @click="handleApplyCard" v-hasPermi="['dz:cards:openFinished']"
+          style="border-color: #52c41a; color: #52c41a; font-weight: 500">
           <svg-icon icon-class="edit" class="mr-1" style="font-size: 16px" />
           直接开卡
         </el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          :disabled="multiple"
-          icon="Delete"
-          @click="handleDelete"
-          v-hasPermi="['dz:cards:remove']"
-          style="border-color: #ff4d4f; color: #ff4d4f; font-weight: 500"
-        >
+        <el-button type="danger" plain :disabled="multiple" icon="Delete" @click="handleDelete"
+          v-hasPermi="['dz:cards:remove']" style="border-color: #ff4d4f; color: #ff4d4f; font-weight: 500">
           删除
         </el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Download"
-          @click="handleExport"
-          v-hasPermi="['dz:cards:export']"
-          style="border-color: #722ed1; color: #722ed1; font-weight: 500"
-          >导出</el-button
-        >
+        <el-button type="primary" plain icon="Download" @click="handleExport" v-hasPermi="['dz:cards:export']"
+          style="border-color: #722ed1; color: #722ed1; font-weight: 500">导出</el-button>
       </el-col>
-      <right-toolbar
-        v-model:showSearch="showSearch"
-        @queryTable="getList"
-      ></right-toolbar>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <!-- Table组件 -->
-    <Table
-      :data="cardsList"
-      :columns="tableColumns"
-      :actions="tableActions"
-      :loading="loading"
-      :total="total"
-      :queryParams="queryParams"
-      v-bind="tableProps"
-      @action="handleTableAction"
-      @selection-change="handleSelectionChange"
-      @getList="getList"
-    >
+    <Table :data="cardsList" :columns="tableColumns" :actions="tableActions" :loading="loading" :total="total"
+      :queryParams="queryParams" v-bind="tableProps" @action="handleTableAction"
+      @selection-change="handleSelectionChange" @getList="getList">
       <!-- 序号插槽 -->
       <template #index="{ row, $index }">
         {{ getRowIndex($index) }}
@@ -181,68 +101,29 @@
     </Table>
 
     <!-- 弹窗组件 -->
-    <CardGenerationDialog
-      v-model="cardGenerationOpen"
-      :institution-list="institutionList"
-      :school-list="schoolList"
-      :card-type-options="card_type"
-      @success="handleDialogSuccess"
-    />
-
-    <AssignCardDialog
-      v-model="assignCardOpen"
-      :selected-cards="selectedRows"
-      :school-list="schoolList"
-      :card-type-options="card_type"
-      @success="handleDialogSuccess"
-    />
-
-    <EditStudentDialog
-      v-model="open"
-      :card-id="currentCardId"
-      :class-list="classList"
-      @success="handleDialogSuccess"
-    />
-
-    <PaymentDialog
-      v-model="paymentOpen"
-      :card-no="currentCardNo"
-      :card-ids="selectedCardIds"
-      :selected-cards="selectedRows"
-      @success="handlePaymentSuccess"
-    />
-
-    <CloseCardDialog
-      v-model="closeCardOpen"
-      :card-no="currentCloseCardNo"
-      :card-ids="selectedCardIds"
-      @success="handleCloseCardSuccess"
-    />
-
-    <ReopenCardDialog
-      v-model="reopenCardOpen"
-      :card-no="currentReopenCardNo"
-      :card-ids="selectedCardIds"
-      @success="handleReopenCardSuccess"
-    />
-
-    <RefundDialog
-      v-model="refundOpen"
-      :card-no="currentRefundCardNo"
-      @confirm="handleRefundConfirm"
-    />
-
-    <AssociateCampusDialog
-      v-model="associateCampusOpen"
-      :selected-cards="selectedRows"
-      @success="handleAssociateCampusSuccess"
-    />
-
-    <ApplyCardDialog
-      v-model="applyCardOpen"
-      :selected-cards="selectedRows"
-      @success="handleApplyCardSuccess"
-    />
+    <CardGenerationDialog v-model="cardGenerationOpen" :institution-list="institutionList" :school-list="schoolList"
+      :card-type-options="card_type" @success="handleDialogSuccess" />
+
+    <AssignCardDialog v-model="assignCardOpen" :selected-cards="selectedRows" :school-list="schoolList"
+      :card-type-options="card_type" @success="handleDialogSuccess" />
+
+    <EditStudentDialog v-model="open" :card-id="currentCardId" :class-list="classList" @success="handleDialogSuccess" />
+
+    <PaymentDialog v-model="paymentOpen" :card-no="currentCardNo" :card-ids="selectedCardIds"
+      :selected-cards="selectedRows" @success="handlePaymentSuccess" />
+
+    <CloseCardDialog v-model="closeCardOpen" :card-no="currentCloseCardNo" :card-ids="selectedCardIds"
+      @success="handleCloseCardSuccess" />
+
+    <ReopenCardDialog v-model="reopenCardOpen" :card-no="currentReopenCardNo" :card-ids="selectedCardIds"
+      @success="handleReopenCardSuccess" />
+
+    <RefundDialog v-model="refundOpen" :card-no="currentRefundCardNo" @confirm="handleRefundConfirm" />
+
+    <AssociateCampusDialog v-model="associateCampusOpen" :selected-cards="selectedRows"
+      @success="handleAssociateCampusSuccess" />
+
+    <ApplyCardDialog v-model="applyCardOpen" :selected-cards="selectedRows" @success="handleApplyCardSuccess" />
   </div>
 </template>
 
@@ -1037,7 +918,7 @@ function handleDelete(row) {
       getList();
       proxy.$modal.msgSuccess("删除成功");
     })
-    .catch(() => {});
+    .catch(() => { });
 }
 
 /** 导出按钮操作 */

+ 49 - 162
back-ui/src/views/learn/WrongBook/index.vue

@@ -1,141 +1,60 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="90px">
       <el-form-item label="学生ID" prop="studentId">
-        <el-input
-          v-model="queryParams.studentId"
-          placeholder="请输入学生ID"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.studentId" placeholder="请输入学生ID" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="题ID" prop="questionId">
-        <el-input
-          v-model="queryParams.questionId"
-          placeholder="请输入题ID"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.questionId" placeholder="请输入题ID" clearable @keyup.enter="handleQuery" />
       </el-form-item>
-      <el-form-item label="最后来源,练习,试卷,刷题" prop="source">
-        <el-input
-          v-model="queryParams.source"
-          placeholder="请输入最后来源,练习,试卷,刷题"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+      <el-form-item label="来源" prop="source">
+        <el-input v-model="queryParams.source" placeholder="请输入来源,练习,试卷,刷题" clearable @keyup.enter="handleQuery" />
       </el-form-item>
-      <el-form-item label="最后状态" prop="state">
-        <el-input
-          v-model="queryParams.state"
-          placeholder="请输入最后状态"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+      <el-form-item label="状态" prop="state">
+        <el-input v-model="queryParams.state" placeholder="请输入状态" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="知识点id" prop="knownledgeId">
-        <el-input
-          v-model="queryParams.knownledgeId"
-          placeholder="请输入知识点id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.knownledgeId" placeholder="请输入知识点id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="科目" prop="subjectId">
-        <el-input
-          v-model="queryParams.subjectId"
-          placeholder="请输入科目"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.subjectId" placeholder="请输入科目" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="试卷id" prop="paperId">
-        <el-input
-          v-model="queryParams.paperId"
-          placeholder="请输入试卷id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.paperId" placeholder="请输入试卷id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="总分" prop="scoreTotal">
-        <el-input
-          v-model="queryParams.scoreTotal"
-          placeholder="请输入总分"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.scoreTotal" placeholder="请输入总分" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="得分" prop="score">
-        <el-input
-          v-model="queryParams.score"
-          placeholder="请输入得分"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.score" placeholder="请输入得分" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="评级" prop="scoreLevel">
-        <el-input
-          v-model="queryParams.scoreLevel"
-          placeholder="请输入评级"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.scoreLevel" placeholder="请输入评级" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="得分率" prop="scoreRate">
-        <el-input
-          v-model="queryParams.scoreRate"
-          placeholder="请输入得分率"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.scoreRate" placeholder="请输入得分率" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="错误次数" prop="wrongCount">
-        <el-input
-          v-model="queryParams.wrongCount"
-          placeholder="请输入错误次数"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.wrongCount" placeholder="请输入错误次数" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="正确次数" prop="rightCount">
-        <el-input
-          v-model="queryParams.rightCount"
-          placeholder="请输入正确次数"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.rightCount" placeholder="请输入正确次数" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="总次数" prop="totalCount">
-        <el-input
-          v-model="queryParams.totalCount"
-          placeholder="请输入总次数"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.totalCount" placeholder="请输入总次数" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="创建时间" prop="createdTime">
-        <el-date-picker clearable
-          v-model="queryParams.createdTime"
-          type="date"
-          value-format="YYYY-MM-DD"
-          placeholder="请选择创建时间">
+        <el-date-picker clearable v-model="queryParams.createdTime" type="date" value-format="YYYY-MM-DD"
+          class="w-[170px]!" placeholder="请选择创建时间">
         </el-date-picker>
       </el-form-item>
       <el-form-item label="更新时间" prop="updatedTime">
-        <el-date-picker clearable
-          v-model="queryParams.updatedTime"
-          type="date"
-          value-format="YYYY-MM-DD"
-          placeholder="请选择更新时间">
+        <el-date-picker clearable v-model="queryParams.updatedTime" type="date" value-format="YYYY-MM-DD"
+          class="w-[170px]!" placeholder="请选择更新时间">
         </el-date-picker>
       </el-form-item>
       <el-form-item label="是否收藏" prop="collect">
-        <el-input
-          v-model="queryParams.collect"
-          placeholder="请输入是否收藏"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.collect" placeholder="请输入是否收藏" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@@ -145,57 +64,34 @@
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Plus"
-          @click="handleAdd"
-          v-hasPermi="['learn:WrongBook:add']"
-        >新增</el-button>
+        <el-button type="primary" plain icon="Plus" @click="handleAdd"
+          v-hasPermi="['learn:WrongBook:add']">新增</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="Edit"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['learn:WrongBook:edit']"
-        >修改</el-button>
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['learn:WrongBook:edit']">修改</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="Delete"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['learn:WrongBook:remove']"
-        >删除</el-button>
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['learn:WrongBook:remove']">删除</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="Download"
-          @click="handleExport"
-          v-hasPermi="['learn:WrongBook:export']"
-        >导出</el-button>
+        <el-button type="warning" plain icon="Download" @click="handleExport"
+          v-hasPermi="['learn:WrongBook:export']">导出</el-button>
       </el-col>
       <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="WrongBookList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="错题id" align="center" prop="wrongId" />
-      <el-table-column label="学生ID" align="center" prop="studentId" />
+      <el-table-column type="selection" width="55" align="center" fixed="left" />
+      <el-table-column label="学生ID" align="center" prop="studentId" fixed="left" />
       <el-table-column label="题ID" align="center" prop="questionId" />
-      <el-table-column label="最后来源,练习,试卷,刷题" align="center" prop="source" />
-      <el-table-column label="最后状态" align="center" prop="state" />
+      <el-table-column label="来源" align="center" prop="source"  />
+      <el-table-column label="状态" align="center" prop="state" />
       <el-table-column label="知识点id" align="center" prop="knownledgeId" />
       <el-table-column label="科目" align="center" prop="subjectId" />
       <el-table-column label="试卷id" align="center" prop="paperId" />
-      <el-table-column label="最后参考答案" align="center" prop="answers" />
+      <el-table-column label="参考答案" align="center" prop="answers" min-width="140" />
       <el-table-column label="答案1" align="center" prop="answer1" />
       <el-table-column label="答案2" align="center" prop="answer2" />
       <el-table-column label="总分" align="center" prop="scoreTotal" />
@@ -205,32 +101,29 @@
       <el-table-column label="错误次数" align="center" prop="wrongCount" />
       <el-table-column label="正确次数" align="center" prop="rightCount" />
       <el-table-column label="总次数" align="center" prop="totalCount" />
-      <el-table-column label="创建时间" align="center" prop="createdTime" width="180">
+      <el-table-column label="创建时间" align="center" prop="createdTime" min-width="140">
         <template #default="scope">
           <span>{{ parseTime(scope.row.createdTime, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="更新时间" align="center" prop="updatedTime" width="180">
+      <el-table-column label="更新时间" align="center" prop="updatedTime" min-width="140">
         <template #default="scope">
           <span>{{ parseTime(scope.row.updatedTime, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
       <el-table-column label="是否收藏" align="center" prop="collect" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="140" fixed="right">
         <template #default="scope">
-          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['learn:WrongBook:edit']">修改</el-button>
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['learn:WrongBook:remove']">删除</el-button>
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['learn:WrongBook:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['learn:WrongBook:remove']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
 
     <!-- 添加或修改学生错题本对话框 -->
     <el-dialog :title="title" v-model="open" width="500px" append-to-body>
@@ -287,18 +180,12 @@
           <el-input v-model="form.totalCount" placeholder="请输入总次数" />
         </el-form-item>
         <el-form-item label="创建时间" prop="createdTime">
-          <el-date-picker clearable
-            v-model="form.createdTime"
-            type="date"
-            value-format="YYYY-MM-DD"
+          <el-date-picker clearable v-model="form.createdTime" type="date" value-format="YYYY-MM-DD"
             placeholder="请选择创建时间">
           </el-date-picker>
         </el-form-item>
         <el-form-item label="更新时间" prop="updatedTime">
-          <el-date-picker clearable
-            v-model="form.updatedTime"
-            type="date"
-            value-format="YYYY-MM-DD"
+          <el-date-picker clearable v-model="form.updatedTime" type="date" value-format="YYYY-MM-DD"
             placeholder="请选择更新时间">
           </el-date-picker>
         </el-form-item>
@@ -477,12 +364,12 @@ function submitForm() {
 /** 删除按钮操作 */
 function handleDelete(row) {
   const _wrongIds = row.wrongId || ids.value
-  proxy.$modal.confirm('是否确认删除学生错题本编号为"' + _wrongIds + '"的数据项?').then(function() {
+  proxy.$modal.confirm('是否确认删除学生错题本编号为"' + _wrongIds + '"的数据项?').then(function () {
     return delWrongBook(_wrongIds)
   }).then(() => {
     getList()
     proxy.$modal.msgSuccess("删除成功")
-  }).catch(() => {})
+  }).catch(() => { })
 }
 
 /** 导出按钮操作 */

+ 35 - 121
back-ui/src/views/learn/WrongDetail/index.vue

@@ -1,101 +1,43 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="90px">
       <el-form-item label="错题本id" prop="wrongId">
-        <el-input
-          v-model="queryParams.wrongId"
-          placeholder="请输入错题本id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.wrongId" placeholder="请输入错题本id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="创建时间" prop="createdTime">
-        <el-date-picker clearable
-          v-model="queryParams.createdTime"
-          type="date"
-          value-format="YYYY-MM-DD"
-          placeholder="请选择创建时间">
+        <el-date-picker clearable v-model="queryParams.createdTime" type="date" value-format="YYYY-MM-DD"
+          class="w-[170px]!" placeholder="请选择创建时间">
         </el-date-picker>
       </el-form-item>
       <el-form-item label="来源" prop="source">
-        <el-input
-          v-model="queryParams.source"
-          placeholder="请输入来源"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.source" placeholder="请输入来源" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="学生id" prop="studentId">
-        <el-input
-          v-model="queryParams.studentId"
-          placeholder="请输入学生id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.studentId" placeholder="请输入学生id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="科目" prop="subjectId">
-        <el-input
-          v-model="queryParams.subjectId"
-          placeholder="请输入科目"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.subjectId" placeholder="请输入科目" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="知识点id" prop="knownledgeId">
-        <el-input
-          v-model="queryParams.knownledgeId"
-          placeholder="请输入知识点id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.knownledgeId" placeholder="请输入知识点id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="答卷id" prop="examineeId">
-        <el-input
-          v-model="queryParams.examineeId"
-          placeholder="请输入答卷id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.examineeId" placeholder="请输入答卷id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="试卷id" prop="paperId">
-        <el-input
-          v-model="queryParams.paperId"
-          placeholder="请输入试卷id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.paperId" placeholder="请输入试卷id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="总分" prop="scoreTotal">
-        <el-input
-          v-model="queryParams.scoreTotal"
-          placeholder="请输入总分"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.scoreTotal" placeholder="请输入总分" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="评分" prop="score">
-        <el-input
-          v-model="queryParams.score"
-          placeholder="请输入评分"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.score" placeholder="请输入评分" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="评级" prop="scoreLevel">
-        <el-input
-          v-model="queryParams.scoreLevel"
-          placeholder="请输入评级"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.scoreLevel" placeholder="请输入评级" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="得分率" prop="scoreRate">
-        <el-input
-          v-model="queryParams.scoreRate"
-          placeholder="请输入得分率"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.scoreRate" placeholder="请输入得分率" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@@ -105,49 +47,27 @@
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Plus"
-          @click="handleAdd"
-          v-hasPermi="['learn:WrongDetail:add']"
-        >新增</el-button>
+        <el-button type="primary" plain icon="Plus" @click="handleAdd"
+          v-hasPermi="['learn:WrongDetail:add']">新增</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="Edit"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['learn:WrongDetail:edit']"
-        >修改</el-button>
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['learn:WrongDetail:edit']">修改</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="Delete"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['learn:WrongDetail:remove']"
-        >删除</el-button>
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['learn:WrongDetail:remove']">删除</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="Download"
-          @click="handleExport"
-          v-hasPermi="['learn:WrongDetail:export']"
-        >导出</el-button>
+        <el-button type="warning" plain icon="Download" @click="handleExport"
+          v-hasPermi="['learn:WrongDetail:export']">导出</el-button>
       </el-col>
       <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="WrongDetailList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="wrong_detail_id" align="center" prop="wrongDetailId" />
+      <el-table-column type="selection" width="55" align="center" fixed="left" />
+      <!-- <el-table-column label="wrong_detail_id" align="center" prop="wrongDetailId" fixed="left" /> -->
       <el-table-column label="错题本id" align="center" prop="wrongId" />
       <el-table-column label="创建时间" align="center" prop="createdTime" width="180">
         <template #default="scope">
@@ -164,21 +84,18 @@
       <el-table-column label="评分" align="center" prop="score" />
       <el-table-column label="评级" align="center" prop="scoreLevel" />
       <el-table-column label="得分率" align="center" prop="scoreRate" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="140" fixed="right">
         <template #default="scope">
-          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['learn:WrongDetail:edit']">修改</el-button>
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['learn:WrongDetail:remove']">删除</el-button>
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['learn:WrongDetail:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['learn:WrongDetail:remove']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
 
     <!-- 添加或修改学生错题流水对话框 -->
     <el-dialog :title="title" v-model="open" width="500px" append-to-body>
@@ -187,10 +104,7 @@
           <el-input v-model="form.wrongId" placeholder="请输入错题本id" />
         </el-form-item>
         <el-form-item label="创建时间" prop="createdTime">
-          <el-date-picker clearable
-            v-model="form.createdTime"
-            type="date"
-            value-format="YYYY-MM-DD"
+          <el-date-picker clearable v-model="form.createdTime" type="date" value-format="YYYY-MM-DD"
             placeholder="请选择创建时间">
           </el-date-picker>
         </el-form-item>
@@ -377,12 +291,12 @@ function submitForm() {
 /** 删除按钮操作 */
 function handleDelete(row) {
   const _wrongDetailIds = row.wrongDetailId || ids.value
-  proxy.$modal.confirm('是否确认删除学生错题流水编号为"' + _wrongDetailIds + '"的数据项?').then(function() {
+  proxy.$modal.confirm('是否确认删除学生错题流水编号为"' + _wrongDetailIds + '"的数据项?').then(function () {
     return delWrongDetail(_wrongDetailIds)
   }).then(() => {
     getList()
     proxy.$modal.msgSuccess("删除成功")
-  }).catch(() => {})
+  }).catch(() => { })
 }
 
 /** 导出按钮操作 */

+ 36 - 122
back-ui/src/views/learn/answer/index.vue

@@ -1,101 +1,41 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="90px">
       <el-form-item label="答卷id" prop="examineeId">
-        <el-input
-          v-model="queryParams.examineeId"
-          placeholder="请输入答卷id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.examineeId" placeholder="请输入答卷id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
-      <el-form-item label="学生用户id加速" prop="studentId">
-        <el-input
-          v-model="queryParams.studentId"
-          placeholder="请输入学生用户id加速"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+      <el-form-item label="学生用户id" prop="studentId">
+        <el-input v-model="queryParams.studentId" placeholder="请输入学生用户id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="题id" prop="questionId">
-        <el-input
-          v-model="queryParams.questionId"
-          placeholder="请输入题id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.questionId" placeholder="请输入题id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="题号" prop="seq">
-        <el-input
-          v-model="queryParams.seq"
-          placeholder="请输入题号"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.seq" placeholder="请输入题号" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="知识点" prop="knowledgeId">
-        <el-input
-          v-model="queryParams.knowledgeId"
-          placeholder="请输入知识点"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.knowledgeId" placeholder="请输入知识点" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="批改答案" prop="correct">
-        <el-input
-          v-model="queryParams.correct"
-          placeholder="请输入批改答案"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.correct" placeholder="请输入批改答案" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="最长时间" prop="duration">
-        <el-input
-          v-model="queryParams.duration"
-          placeholder="请输入最长时间"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.duration" placeholder="请输入最长时间" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="更新次数" prop="count">
-        <el-input
-          v-model="queryParams.count"
-          placeholder="请输入更新次数"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.count" placeholder="请输入更新次数" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="状态 1 正确" prop="state">
-        <el-input
-          v-model="queryParams.state"
-          placeholder="请输入状态 1 正确"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.state" placeholder="请输入状态 1 正确" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="评级" prop="scoreLevel">
-        <el-input
-          v-model="queryParams.scoreLevel"
-          placeholder="请输入评级"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.scoreLevel" placeholder="请输入评级" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="评分" prop="score">
-        <el-input
-          v-model="queryParams.score"
-          placeholder="请输入评分"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.score" placeholder="请输入评分" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="得分率" prop="scoreRate">
-        <el-input
-          v-model="queryParams.scoreRate"
-          placeholder="请输入得分率"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.scoreRate" placeholder="请输入得分率" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@@ -105,77 +45,51 @@
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Plus"
-          @click="handleAdd"
-          v-hasPermi="['learn:answer:add']"
-        >新增</el-button>
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['learn:answer:add']">新增</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="Edit"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['learn:answer:edit']"
-        >修改</el-button>
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['learn:answer:edit']">修改</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="Delete"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['learn:answer:remove']"
-        >删除</el-button>
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['learn:answer:remove']">删除</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="Download"
-          @click="handleExport"
-          v-hasPermi="['learn:answer:export']"
-        >导出</el-button>
+        <el-button type="warning" plain icon="Download" @click="handleExport"
+          v-hasPermi="['learn:answer:export']">导出</el-button>
       </el-col>
       <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="answerList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="答题id" align="center" prop="answerId" />
+      <el-table-column type="selection" width="55" align="center" fixed="left" />
+      <el-table-column label="答题id" align="center" prop="answerId" fixed="left" />
       <el-table-column label="答卷id" align="center" prop="examineeId" />
-      <el-table-column label="学生用户id加速" align="center" prop="studentId" />
-      <el-table-column label="题id" align="center" prop="questionId" />
+      <el-table-column label="学生用户id" align="center" prop="studentId" min-width="100" />
+      <el-table-column label="题id" align="center" prop="questionId" min-width="100" />
       <el-table-column label="题号" align="center" prop="seq" />
       <el-table-column label="知识点" align="center" prop="knowledgeId" />
       <el-table-column label="学生答案" align="center" prop="answer" />
       <el-table-column label="批改答案" align="center" prop="correct" />
       <el-table-column label="最长时间" align="center" prop="duration" />
       <el-table-column label="更新次数" align="center" prop="count" />
-      <el-table-column label="状态 1 正确" align="center" prop="state" />
+      <el-table-column label="状态" align="center" prop="state" />
       <el-table-column label="评级" align="center" prop="scoreLevel" />
       <el-table-column label="评分" align="center" prop="score" />
       <el-table-column label="得分率" align="center" prop="scoreRate" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" min-width="140">
         <template #default="scope">
-          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['learn:answer:edit']">修改</el-button>
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['learn:answer:remove']">删除</el-button>
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['learn:answer:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['learn:answer:remove']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
 
     <!-- 添加或修改答卷答案对话框 -->
     <el-dialog :title="title" v-model="open" width="500px" append-to-body>
@@ -373,12 +287,12 @@ function submitForm() {
 /** 删除按钮操作 */
 function handleDelete(row) {
   const _answerIds = row.answerId || ids.value
-  proxy.$modal.confirm('是否确认删除答卷答案编号为"' + _answerIds + '"的数据项?').then(function() {
+  proxy.$modal.confirm('是否确认删除答卷答案编号为"' + _answerIds + '"的数据项?').then(function () {
     return delAnswer(_answerIds)
   }).then(() => {
     getList()
     proxy.$modal.msgSuccess("删除成功")
-  }).catch(() => {})
+  }).catch(() => { })
 }
 
 /** 导出按钮操作 */

+ 31 - 101
back-ui/src/views/learn/directKnowledge/index.vue

@@ -1,77 +1,32 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="110px">
       <el-form-item label="年度" prop="year">
-        <el-input
-          v-model="queryParams.year"
-          placeholder="请输入年度"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.year" placeholder="请输入年度" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="定向Key" prop="directKey">
-        <el-input
-          v-model="queryParams.directKey"
-          placeholder="请输入定向Key"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.directKey" placeholder="请输入定向Key" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="录取公式" prop="enrollFormula">
-        <el-input
-          v-model="queryParams.enrollFormula"
-          placeholder="请输入录取公式"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.enrollFormula" placeholder="请输入录取公式" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="文化科目" prop="cultural">
-        <el-input
-          v-model="queryParams.cultural"
-          placeholder="请输入文化科目"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.cultural" placeholder="请输入文化科目" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="专业类别" prop="professional">
-        <el-input
-          v-model="queryParams.professional"
-          placeholder="请输入专业类别"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.professional" placeholder="请输入专业类别" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="专业科目" prop="subjects">
-        <el-input
-          v-model="queryParams.subjects"
-          placeholder="请输入专业科目"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.subjects" placeholder="请输入专业科目" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="适用省份" prop="locations">
-        <el-input
-          v-model="queryParams.locations"
-          placeholder="请输入适用省份"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.locations" placeholder="请输入适用省份" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="适用考生类型" prop="examineeTypes">
-        <el-input
-          v-model="queryParams.examineeTypes"
-          placeholder="请输入适用考生类型"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.examineeTypes" placeholder="请输入适用考生类型" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="仿真模拟卷要求" prop="conditions">
-        <el-input
-          v-model="queryParams.conditions"
-          placeholder="请输入仿真模拟卷要求"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.conditions" placeholder="请输入仿真模拟卷要求" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@@ -81,48 +36,26 @@
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Plus"
-          @click="handleAdd"
-          v-hasPermi="['learn:directKnowledge:add']"
-        >新增</el-button>
+        <el-button type="primary" plain icon="Plus" @click="handleAdd"
+          v-hasPermi="['learn:directKnowledge:add']">新增</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="Edit"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['learn:directKnowledge:edit']"
-        >修改</el-button>
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['learn:directKnowledge:edit']">修改</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="Delete"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['learn:directKnowledge:remove']"
-        >删除</el-button>
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['learn:directKnowledge:remove']">删除</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="Download"
-          @click="handleExport"
-          v-hasPermi="['learn:directKnowledge:export']"
-        >导出</el-button>
+        <el-button type="warning" plain icon="Download" @click="handleExport"
+          v-hasPermi="['learn:directKnowledge:export']">导出</el-button>
       </el-col>
       <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="directKnowledgeList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column type="selection" width="55" align="center" fixed="left" />
       <el-table-column label="id" align="center" prop="id" />
       <el-table-column label="年度" align="center" prop="year" />
       <el-table-column label="定向Key" align="center" prop="directKey" />
@@ -133,23 +66,20 @@
       <el-table-column label="题型分布" align="center" prop="questionTypes" />
       <el-table-column label="祖级列表" align="center" prop="knowledges" />
       <el-table-column label="适用省份" align="center" prop="locations" />
-      <el-table-column label="适用考生类型" align="center" prop="examineeTypes" />
-      <el-table-column label="仿真模拟卷要求" align="center" prop="conditions" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="适用考生类型" align="center" prop="examineeTypes" min-width="120" />
+      <el-table-column label="仿真模拟卷要求" align="center" prop="conditions" min-width="120" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="140" fixed="right">
         <template #default="scope">
-          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['learn:directKnowledge:edit']">修改</el-button>
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['learn:directKnowledge:remove']">删除</el-button>
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['learn:directKnowledge:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['learn:directKnowledge:remove']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
 
     <!-- 添加或修改定向知识点关系对话框 -->
     <el-dialog :title="title" v-model="open" width="500px" append-to-body>
@@ -332,12 +262,12 @@ function submitForm() {
 /** 删除按钮操作 */
 function handleDelete(row) {
   const _ids = row.id || ids.value
-  proxy.$modal.confirm('是否确认删除定向知识点关系编号为"' + _ids + '"的数据项?').then(function() {
+  proxy.$modal.confirm('是否确认删除定向知识点关系编号为"' + _ids + '"的数据项?').then(function () {
     return delDirectKnowledge(_ids)
   }).then(() => {
     getList()
     proxy.$modal.msgSuccess("删除成功")
-  }).catch(() => {})
+  }).catch(() => { })
 }
 
 /** 导出按钮操作 */

+ 47 - 145
back-ui/src/views/learn/examinee/index.vue

@@ -1,117 +1,51 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px">
       <el-form-item label="学生id" prop="studentId">
-        <el-input
-          v-model="queryParams.studentId"
-          placeholder="请输入学生id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.studentId" placeholder="请输入学生id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="试卷id" prop="paperId">
-        <el-input
-          v-model="queryParams.paperId"
-          placeholder="请输入试卷id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.paperId" placeholder="请输入试卷id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="开始时间" prop="beginTime">
-        <el-date-picker clearable
-          v-model="queryParams.beginTime"
-          type="date"
-          value-format="YYYY-MM-DD"
-          placeholder="请选择开始时间">
+        <el-date-picker clearable v-model="queryParams.beginTime" type="date" value-format="YYYY-MM-DD"
+          class="w-[170px]!" placeholder="请选择开始时间">
         </el-date-picker>
       </el-form-item>
       <el-form-item label="结束时间" prop="endTime">
-        <el-date-picker clearable
-          v-model="queryParams.endTime"
-          type="date"
-          value-format="YYYY-MM-DD"
+        <el-date-picker clearable v-model="queryParams.endTime" type="date" value-format="YYYY-MM-DD" class="w-[170px]!"
           placeholder="请选择结束时间">
         </el-date-picker>
       </el-form-item>
-      <el-form-item label="未答题, 已答题, 通过, 未通过" prop="state">
-        <el-input
-          v-model="queryParams.state"
-          placeholder="请输入未答题, 已答题, 通过, 未通过"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+      <el-form-item label="状态" prop="state">
+        <el-input v-model="queryParams.state" placeholder="请输入未答题, 已答题, 通过, 未通过" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="分级" prop="scoreLevel">
-        <el-input
-          v-model="queryParams.scoreLevel"
-          placeholder="请输入分级"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.scoreLevel" placeholder="请输入分级" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="分值" prop="score">
-        <el-input
-          v-model="queryParams.score"
-          placeholder="请输入分值"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.score" placeholder="请输入分值" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="分率" prop="scoreRate">
-        <el-input
-          v-model="queryParams.scoreRate"
-          placeholder="请输入分率"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.scoreRate" placeholder="请输入分率" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="名次" prop="ranking">
-        <el-input
-          v-model="queryParams.ranking"
-          placeholder="请输入名次"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.ranking" placeholder="请输入名次" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="年排名次" prop="gradeRanking">
-        <el-input
-          v-model="queryParams.gradeRanking"
-          placeholder="请输入年排名次"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.gradeRanking" placeholder="请输入年排名次" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="选择题正确数" prop="chooseCount">
-        <el-input
-          v-model="queryParams.chooseCount"
-          placeholder="请输入选择题正确数"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.chooseCount" placeholder="请输入选择题正确数" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="选择题总数" prop="chooseTotal">
-        <el-input
-          v-model="queryParams.chooseTotal"
-          placeholder="请输入选择题总数"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.chooseTotal" placeholder="请输入选择题总数" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="主观题正确数" prop="subjectiveCount">
-        <el-input
-          v-model="queryParams.subjectiveCount"
-          placeholder="请输入主观题正确数"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.subjectiveCount" placeholder="请输入主观题正确数" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="主观题总数" prop="subjectiveTotal">
-        <el-input
-          v-model="queryParams.subjectiveTotal"
-          placeholder="请输入主观题总数"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.subjectiveTotal" placeholder="请输入主观题总数" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@@ -121,49 +55,27 @@
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Plus"
-          @click="handleAdd"
-          v-hasPermi="['learn:examinee:add']"
-        >新增</el-button>
+        <el-button type="primary" plain icon="Plus" @click="handleAdd"
+          v-hasPermi="['learn:examinee:add']">新增</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="Edit"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['learn:examinee:edit']"
-        >修改</el-button>
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['learn:examinee:edit']">修改</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="Delete"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['learn:examinee:remove']"
-        >删除</el-button>
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['learn:examinee:remove']">删除</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="Download"
-          @click="handleExport"
-          v-hasPermi="['learn:examinee:export']"
-        >导出</el-button>
+        <el-button type="warning" plain icon="Download" @click="handleExport"
+          v-hasPermi="['learn:examinee:export']">导出</el-button>
       </el-col>
       <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="examineeList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="答卷id" align="center" prop="examineeId" />
+      <el-table-column type="selection" width="55" align="center" fixed="left" />
+      <el-table-column label="答卷id" align="center" prop="examineeId" fixed="left" />
       <el-table-column label="学生id" align="center" prop="studentId" />
       <el-table-column label="试卷类型" align="center" prop="paperType" />
       <el-table-column label="试卷id" align="center" prop="paperId" />
@@ -177,35 +89,32 @@
           <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="未答题, 已答题, 通过, 未通过" align="center" prop="state" />
+      <el-table-column label="状态" align="center" prop="state" />
       <el-table-column label="分级" align="center" prop="scoreLevel" />
       <el-table-column label="分值" align="center" prop="score" />
       <el-table-column label="分率" align="center" prop="scoreRate" />
       <el-table-column label="名次" align="center" prop="ranking" />
       <el-table-column label="年排名次" align="center" prop="gradeRanking" />
-      <el-table-column label="选择题正确数" align="center" prop="chooseCount" />
-      <el-table-column label="选择题总数" align="center" prop="chooseTotal" />
-      <el-table-column label="主观题正确数" align="center" prop="subjectiveCount" />
-      <el-table-column label="主观题总数" align="center" prop="subjectiveTotal" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="选择题正确数" align="center" prop="chooseCount" min-width="140" />
+      <el-table-column label="选择题总数" align="center" prop="chooseTotal" min-width="140" />
+      <el-table-column label="主观题正确数" align="center" prop="subjectiveCount" min-width="140" />
+      <el-table-column label="主观题总数" align="center" prop="subjectiveTotal" min-width="140" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="140" fixed="right">
         <template #default="scope">
-          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['learn:examinee:edit']">修改</el-button>
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['learn:examinee:remove']">删除</el-button>
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['learn:examinee:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['learn:examinee:remove']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
 
     <!-- 添加或修改答卷对话框 -->
-    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
-      <el-form ref="examineeRef" :model="form" :rules="rules" label-width="80px">
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="examineeRef" :model="form" :rules="rules" label-width="100px">
         <el-form-item label="学生id" prop="studentId">
           <el-input v-model="form.studentId" placeholder="请输入学生id" />
         </el-form-item>
@@ -213,22 +122,15 @@
           <el-input v-model="form.paperId" placeholder="请输入试卷id" />
         </el-form-item>
         <el-form-item label="开始时间" prop="beginTime">
-          <el-date-picker clearable
-            v-model="form.beginTime"
-            type="date"
-            value-format="YYYY-MM-DD"
+          <el-date-picker clearable v-model="form.beginTime" type="date" value-format="YYYY-MM-DD"
             placeholder="请选择开始时间">
           </el-date-picker>
         </el-form-item>
         <el-form-item label="结束时间" prop="endTime">
-          <el-date-picker clearable
-            v-model="form.endTime"
-            type="date"
-            value-format="YYYY-MM-DD"
-            placeholder="请选择结束时间">
+          <el-date-picker clearable v-model="form.endTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择结束时间">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="未答题, 已答题, 通过, 未通过" prop="state">
+        <el-form-item label="状态" prop="state">
           <el-input v-model="form.state" placeholder="请输入未答题, 已答题, 通过, 未通过" />
         </el-form-item>
         <el-form-item label="分级" prop="scoreLevel">
@@ -413,12 +315,12 @@ function submitForm() {
 /** 删除按钮操作 */
 function handleDelete(row) {
   const _examineeIds = row.examineeId || ids.value
-  proxy.$modal.confirm('是否确认删除答卷编号为"' + _examineeIds + '"的数据项?').then(function() {
+  proxy.$modal.confirm('是否确认删除答卷编号为"' + _examineeIds + '"的数据项?').then(function () {
     return delExaminee(_examineeIds)
   }).then(() => {
     getList()
     proxy.$modal.msgSuccess("删除成功")
-  }).catch(() => {})
+  }).catch(() => { })
 }
 
 /** 导出按钮操作 */

+ 35 - 104
back-ui/src/views/learn/knowledgeTree/index.vue

@@ -1,77 +1,32 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px">
       <el-form-item label="知识点名称" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="请输入知识点名称"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.name" placeholder="请输入知识点名称" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="父ID" prop="pid">
-        <el-input
-          v-model="queryParams.pid"
-          placeholder="请输入父ID"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.pid" placeholder="请输入父ID" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="祖级列表" prop="ancestors">
-        <el-input
-          v-model="queryParams.ancestors"
-          placeholder="请输入祖级列表"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.ancestors" placeholder="请输入祖级列表" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="科目id" prop="subjectId">
-        <el-input
-          v-model="queryParams.subjectId"
-          placeholder="请输入科目id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.subjectId" placeholder="请输入科目id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="排序" prop="sort">
-        <el-input
-          v-model="queryParams.sort"
-          placeholder="请输入排序"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.sort" placeholder="请输入排序" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="级数" prop="level">
-        <el-input
-          v-model="queryParams.level"
-          placeholder="请输入级数"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.level" placeholder="请输入级数" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="题目数" prop="questionsCount">
-        <el-input
-          v-model="queryParams.questionsCount"
-          placeholder="请输入题目数"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.questionsCount" placeholder="请输入题目数" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="适用省份" prop="locations">
-        <el-input
-          v-model="queryParams.locations"
-          placeholder="请输入适用省份"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.locations" placeholder="请输入适用省份" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="适用考生类型" prop="examineeTypes">
-        <el-input
-          v-model="queryParams.examineeTypes"
-          placeholder="请输入适用考生类型"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.examineeTypes" placeholder="请输入适用考生类型" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@@ -81,50 +36,29 @@
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Plus"
-          @click="handleAdd"
-          v-hasPermi="['learn:knowledgeTree:add']"
-        >新增</el-button>
+        <el-button type="primary" plain icon="Plus" @click="handleAdd"
+          v-hasPermi="['learn:knowledgeTree:add']">新增</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="Edit"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['learn:knowledgeTree:edit']"
-        >修改</el-button>
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['learn:knowledgeTree:edit']">修改</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="Delete"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['learn:knowledgeTree:remove']"
-        >删除</el-button>
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['learn:knowledgeTree:remove']">删除</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="Download"
-          @click="handleExport"
-          v-hasPermi="['learn:knowledgeTree:export']"
-        >导出</el-button>
+        <el-button type="warning" plain icon="Download" @click="handleExport"
+          v-hasPermi="['learn:knowledgeTree:export']">导出</el-button>
       </el-col>
       <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="knowledgeTreeList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="知识点id" align="center" prop="id" />
-      <el-table-column label="知识点名称" align="center" prop="name" />
+      <el-table-column type="selection" width="55" align="center" fixed="left" />
+      <!-- <el-table-column label="知识点id" align="center" prop="id" fixed="left" /> -->
+      <el-table-column label="知识点名称" prop="name" fixed="left" header-align="center" align="left"
+        min-width="200" />
       <el-table-column label="父ID" align="center" prop="pid" />
       <el-table-column label="祖级列表" align="center" prop="ancestors" />
       <el-table-column label="科目id" align="center" prop="subjectId" />
@@ -132,22 +66,19 @@
       <el-table-column label="级数" align="center" prop="level" />
       <el-table-column label="题目数" align="center" prop="questionsCount" />
       <el-table-column label="适用省份" align="center" prop="locations" />
-      <el-table-column label="适用考生类型" align="center" prop="examineeTypes" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="适用考生类型" align="center" prop="examineeTypes" min-width="120" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="140" fixed="right">
         <template #default="scope">
-          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['learn:knowledgeTree:edit']">修改</el-button>
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['learn:knowledgeTree:remove']">删除</el-button>
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['learn:knowledgeTree:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['learn:knowledgeTree:remove']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
 
     <!-- 添加或修改知识点树对话框 -->
     <el-dialog :title="title" v-model="open" width="500px" append-to-body>
@@ -188,7 +119,7 @@
 </template>
 
 <script setup name="KnowledgeTree">
-import { listKnowledgeTree, getKnowledgeTree, delKnowledgeTree, addKnowledgeTree, updateKnowledgeTree } from "@/api/learn/knowledgeTree"
+import { listKnowledge, getKnowledgeTree, delKnowledgeTree, addKnowledgeTree, updateKnowledgeTree } from "@/api/learn/knowledgeTree"
 
 const { proxy } = getCurrentInstance()
 
@@ -226,7 +157,7 @@ const { queryParams, form, rules } = toRefs(data)
 /** 查询知识点树列表 */
 function getList() {
   loading.value = true
-  listKnowledgeTree(queryParams.value).then(response => {
+  listKnowledge(queryParams.value).then(response => {
     knowledgeTreeList.value = response.rows
     total.value = response.total
     loading.value = false
@@ -317,12 +248,12 @@ function submitForm() {
 /** 删除按钮操作 */
 function handleDelete(row) {
   const _ids = row.id || ids.value
-  proxy.$modal.confirm('是否确认删除知识点树编号为"' + _ids + '"的数据项?').then(function() {
+  proxy.$modal.confirm('是否确认删除知识点树编号为"' + _ids + '"的数据项?').then(function () {
     return delKnowledgeTree(_ids)
   }).then(() => {
     getList()
     proxy.$modal.msgSuccess("删除成功")
-  }).catch(() => {})
+  }).catch(() => { })
 }
 
 /** 导出按钮操作 */

+ 28 - 74
back-ui/src/views/learn/learnPlan/index.vue

@@ -1,36 +1,18 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="90px">
       <el-form-item label="学生id" prop="studentId">
-        <el-input
-          v-model="queryParams.studentId"
-          placeholder="请输入学生id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.studentId" placeholder="请输入学生id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="视频课时间" prop="videoTime">
-        <el-input
-          v-model="queryParams.videoTime"
-          placeholder="请输入视频课时间"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.videoTime" placeholder="请输入视频课时间" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="练题数" prop="questionCnt">
-        <el-input
-          v-model="queryParams.questionCnt"
-          placeholder="请输入练题数"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.questionCnt" placeholder="请输入练题数" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="开始时间" prop="beginTime">
-        <el-date-picker clearable
-          v-model="queryParams.beginTime"
-          type="date"
-          value-format="YYYY-MM-DD"
-          placeholder="请选择开始时间">
+        <el-date-picker clearable v-model="queryParams.beginTime" type="date" value-format="YYYY-MM-DD"
+          class="w-[170px]!" placeholder="请选择开始时间">
         </el-date-picker>
       </el-form-item>
       <el-form-item>
@@ -41,50 +23,28 @@
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Plus"
-          @click="handleAdd"
-          v-hasPermi="['learn:learnPlan:add']"
-        >新增</el-button>
+        <el-button type="primary" plain icon="Plus" @click="handleAdd"
+          v-hasPermi="['learn:learnPlan:add']">新增</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="Edit"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['learn:learnPlan:edit']"
-        >修改</el-button>
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['learn:learnPlan:edit']">修改</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="Delete"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['learn:learnPlan:remove']"
-        >删除</el-button>
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['learn:learnPlan:remove']">删除</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="Download"
-          @click="handleExport"
-          v-hasPermi="['learn:learnPlan:export']"
-        >导出</el-button>
+        <el-button type="warning" plain icon="Download" @click="handleExport"
+          v-hasPermi="['learn:learnPlan:export']">导出</el-button>
       </el-col>
       <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="learnPlanList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="计划id" align="center" prop="id" />
-      <el-table-column label="学生id" align="center" prop="studentId" />
+      <el-table-column type="selection" width="55" align="center" fixed="left" />
+      <!-- <el-table-column label="计划id" align="center" prop="id" /> -->
+      <el-table-column label="学生id" align="center" prop="studentId" fixed="left" />
       <el-table-column label="视频课时间" align="center" prop="videoTime" />
       <el-table-column label="练题数" align="center" prop="questionCnt" />
       <el-table-column label="是否有效" align="center" prop="status" />
@@ -94,21 +54,18 @@
         </template>
       </el-table-column>
       <el-table-column label="统计情况" align="center" prop="stats" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="140" fixed="right">
         <template #default="scope">
-          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['learn:learnPlan:edit']">修改</el-button>
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['learn:learnPlan:remove']">删除</el-button>
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['learn:learnPlan:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['learn:learnPlan:remove']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
 
     <!-- 添加或修改学习计划对话框 -->
     <el-dialog :title="title" v-model="open" width="500px" append-to-body>
@@ -123,10 +80,7 @@
           <el-input v-model="form.questionCnt" placeholder="请输入练题数" />
         </el-form-item>
         <el-form-item label="开始时间" prop="beginTime">
-          <el-date-picker clearable
-            v-model="form.beginTime"
-            type="date"
-            value-format="YYYY-MM-DD"
+          <el-date-picker clearable v-model="form.beginTime" type="date" value-format="YYYY-MM-DD"
             placeholder="请选择开始时间">
           </el-date-picker>
         </el-form-item>
@@ -278,12 +232,12 @@ function submitForm() {
 /** 删除按钮操作 */
 function handleDelete(row) {
   const _ids = row.id || ids.value
-  proxy.$modal.confirm('是否确认删除学习计划编号为"' + _ids + '"的数据项?').then(function() {
+  proxy.$modal.confirm('是否确认删除学习计划编号为"' + _ids + '"的数据项?').then(function () {
     return delLearnPlan(_ids)
   }).then(() => {
     getList()
     proxy.$modal.msgSuccess("删除成功")
-  }).catch(() => {})
+  }).catch(() => { })
 }
 
 /** 导出按钮操作 */

+ 36 - 107
back-ui/src/views/learn/learnPlanStudy/index.vue

@@ -1,77 +1,34 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px">
       <el-form-item label="学生id" prop="studentId">
-        <el-input
-          v-model="queryParams.studentId"
-          placeholder="请输入学生id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.studentId" placeholder="请输入学生id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="对应计划" prop="planId">
-        <el-input
-          v-model="queryParams.planId"
-          placeholder="请输入对应计划"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.planId" placeholder="请输入对应计划" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="月份序号" prop="monthSeq">
-        <el-input
-          v-model="queryParams.monthSeq"
-          placeholder="请输入月份序号"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.monthSeq" placeholder="请输入月份序号" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="周序号" prop="weekSeq">
-        <el-input
-          v-model="queryParams.weekSeq"
-          placeholder="请输入周序号"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.weekSeq" placeholder="请输入周序号" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="学习日期" prop="reportDate">
-        <el-date-picker clearable
-          v-model="queryParams.reportDate"
-          type="date"
-          value-format="YYYY-MM-DD"
-          placeholder="请选择学习日期">
+        <el-date-picker clearable v-model="queryParams.reportDate" type="date" value-format="YYYY-MM-DD"
+          class="w-[170px]!" placeholder="请选择学习日期">
         </el-date-picker>
       </el-form-item>
       <el-form-item label="完成题数" prop="questionCount">
-        <el-input
-          v-model="queryParams.questionCount"
-          placeholder="请输入完成题数"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.questionCount" placeholder="请输入完成题数" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="完成视频时间" prop="videoTime">
-        <el-input
-          v-model="queryParams.videoTime"
-          placeholder="请输入完成视频时间"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.videoTime" placeholder="请输入完成视频时间" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="计划做题数" prop="questionPlan">
-        <el-input
-          v-model="queryParams.questionPlan"
-          placeholder="请输入计划做题数"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.questionPlan" placeholder="请输入计划做题数" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="计划视频时间" prop="videoPlan">
-        <el-input
-          v-model="queryParams.videoPlan"
-          placeholder="请输入计划视频时间"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.videoPlan" placeholder="请输入计划视频时间" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@@ -81,50 +38,28 @@
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Plus"
-          @click="handleAdd"
-          v-hasPermi="['learn:learnPlanStudy:add']"
-        >新增</el-button>
+        <el-button type="primary" plain icon="Plus" @click="handleAdd"
+          v-hasPermi="['learn:learnPlanStudy:add']">新增</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="Edit"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['learn:learnPlanStudy:edit']"
-        >修改</el-button>
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['learn:learnPlanStudy:edit']">修改</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="Delete"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['learn:learnPlanStudy:remove']"
-        >删除</el-button>
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['learn:learnPlanStudy:remove']">删除</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="Download"
-          @click="handleExport"
-          v-hasPermi="['learn:learnPlanStudy:export']"
-        >导出</el-button>
+        <el-button type="warning" plain icon="Download" @click="handleExport"
+          v-hasPermi="['learn:learnPlanStudy:export']">导出</el-button>
       </el-col>
       <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="learnPlanStudyList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="计划学习id" align="center" prop="id" />
-      <el-table-column label="学生id" align="center" prop="studentId" />
+      <el-table-column type="selection" width="55" align="center" fixed="left" />
+      <!-- <el-table-column label="计划学习id" align="center" prop="id" fixed="left" min-width="100" /> -->
+      <el-table-column label="学生id" align="center" prop="studentId" fixed="left" />
       <el-table-column label="对应计划" align="center" prop="planId" />
       <el-table-column label="月份序号" align="center" prop="monthSeq" />
       <el-table-column label="周序号" align="center" prop="weekSeq" />
@@ -134,24 +69,21 @@
         </template>
       </el-table-column>
       <el-table-column label="完成题数" align="center" prop="questionCount" />
-      <el-table-column label="完成视频时间" align="center" prop="videoTime" />
-      <el-table-column label="计划做题数" align="center" prop="questionPlan" />
-      <el-table-column label="计划视频时间" align="center" prop="videoPlan" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="完成视频时间" align="center" prop="videoTime" min-width="120" />
+      <el-table-column label="计划做题数" align="center" prop="questionPlan" min-width="100" />
+      <el-table-column label="计划视频时间" align="center" prop="videoPlan" min-width="120" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="120" fixed="right">
         <template #default="scope">
-          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['learn:learnPlanStudy:edit']">修改</el-button>
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['learn:learnPlanStudy:remove']">删除</el-button>
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['learn:learnPlanStudy:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['learn:learnPlanStudy:remove']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
 
     <!-- 添加或修改学生计划执行情况对话框 -->
     <el-dialog :title="title" v-model="open" width="500px" append-to-body>
@@ -169,10 +101,7 @@
           <el-input v-model="form.weekSeq" placeholder="请输入周序号" />
         </el-form-item>
         <el-form-item label="学习日期" prop="reportDate">
-          <el-date-picker clearable
-            v-model="form.reportDate"
-            type="date"
-            value-format="YYYY-MM-DD"
+          <el-date-picker clearable v-model="form.reportDate" type="date" value-format="YYYY-MM-DD"
             placeholder="请选择学习日期">
           </el-date-picker>
         </el-form-item>
@@ -330,12 +259,12 @@ function submitForm() {
 /** 删除按钮操作 */
 function handleDelete(row) {
   const _ids = row.id || ids.value
-  proxy.$modal.confirm('是否确认删除学生计划执行情况编号为"' + _ids + '"的数据项?').then(function() {
+  proxy.$modal.confirm('是否确认删除学生计划执行情况编号为"' + _ids + '"的数据项?').then(function () {
     return delLearnPlanStudy(_ids)
   }).then(() => {
     getList()
     proxy.$modal.msgSuccess("删除成功")
-  }).catch(() => {})
+  }).catch(() => { })
 }
 
 /** 导出按钮操作 */

+ 23 - 71
back-ui/src/views/learn/paper_question/index.vue

@@ -2,43 +2,20 @@
   <div class="app-container">
     <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="试卷id" prop="paperId">
-        <el-input
-          v-model="queryParams.paperId"
-          placeholder="请输入试卷id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.paperId" placeholder="请输入试卷id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="题id" prop="questionId">
-        <el-input
-          v-model="queryParams.questionId"
-          placeholder="请输入题id"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.questionId" placeholder="请输入题id" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="顺序" prop="seq">
-        <el-input
-          v-model="queryParams.seq"
-          placeholder="请输入顺序"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.seq" placeholder="请输入顺序" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="分值" prop="score">
-        <el-input
-          v-model="queryParams.score"
-          placeholder="请输入分值"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.score" placeholder="请输入分值" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="创建时间" prop="createTime">
-        <el-date-picker clearable
-          v-model="queryParams.createTime"
-          type="date"
-          value-format="YYYY-MM-DD"
-          placeholder="请选择创建时间">
+        <el-date-picker clearable v-model="queryParams.createTime" type="date" value-format="YYYY-MM-DD"
+          class="w-[170px]!" placeholder="请选择创建时间">
         </el-date-picker>
       </el-form-item>
       <el-form-item>
@@ -49,42 +26,20 @@
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Plus"
-          @click="handleAdd"
-          v-hasPermi="['learn:paper_question:add']"
-        >新增</el-button>
+        <el-button type="primary" plain icon="Plus" @click="handleAdd"
+          v-hasPermi="['learn:paper_question:add']">新增</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="Edit"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['learn:paper_question:edit']"
-        >修改</el-button>
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['learn:paper_question:edit']">修改</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="Delete"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['learn:paper_question:remove']"
-        >删除</el-button>
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['learn:paper_question:remove']">删除</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="Download"
-          @click="handleExport"
-          v-hasPermi="['learn:paper_question:export']"
-        >导出</el-button>
+        <el-button type="warning" plain icon="Download" @click="handleExport"
+          v-hasPermi="['learn:paper_question:export']">导出</el-button>
       </el-col>
       <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
@@ -103,19 +58,16 @@
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template #default="scope">
-          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['learn:paper_question:edit']">修改</el-button>
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['learn:paper_question:remove']">删除</el-button>
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['learn:paper_question:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['learn:paper_question:remove']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
 
     <!-- 添加或修改试卷题关系对话框 -->
     <el-dialog :title="title" v-model="open" width="500px" append-to-body>
@@ -277,12 +229,12 @@ function submitForm() {
 /** 删除按钮操作 */
 function handleDelete(row) {
   const _ids = row.id || ids.value
-  proxy.$modal.confirm('是否确认删除试卷题关系编号为"' + _ids + '"的数据项?').then(function() {
+  proxy.$modal.confirm('是否确认删除试卷题关系编号为"' + _ids + '"的数据项?').then(function () {
     return delPaper_question(_ids)
   }).then(() => {
     getList()
     proxy.$modal.msgSuccess("删除成功")
-  }).catch(() => {})
+  }).catch(() => { })
 }
 
 /** 导出按钮操作 */

+ 46 - 111
back-ui/src/views/learn/paper_real/index.vue

@@ -1,83 +1,35 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px">
       <el-form-item label="科目ID" prop="subjectId">
-        <el-input
-          v-model="queryParams.subjectId"
-          placeholder="请输入科目ID"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.subjectId" placeholder="请输入科目ID" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="试卷名称" prop="paperName">
-        <el-input
-          v-model="queryParams.paperName"
-          placeholder="请输入试卷名称"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.paperName" placeholder="请输入试卷名称" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="试卷年份" prop="year">
-        <el-input
-          v-model="queryParams.year"
-          placeholder="请输入试卷年份"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.year" placeholder="请输入试卷年份" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="试卷题数" prop="number">
-        <el-input
-          v-model="queryParams.number"
-          placeholder="请输入试卷题数"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.number" placeholder="请输入试卷题数" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="试卷总分" prop="fenshu">
-        <el-input
-          v-model="queryParams.fenshu"
-          placeholder="请输入试卷总分"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.fenshu" placeholder="请输入试卷总分" clearable @keyup.enter="handleQuery" />
       </el-form-item>
-      <el-form-item label="0 默认 1 精品试卷" prop="paperSource">
-        <el-input
-          v-model="queryParams.paperSource"
-          placeholder="请输入0 默认 1 精品试卷"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+      <el-form-item label="是否精品" prop="paperSource">
+        <el-input v-model="queryParams.paperSource" placeholder="请输入0 默认 1 精品试卷" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="是否有在线卷" prop="online">
-        <el-input
-          v-model="queryParams.online"
-          placeholder="请输入是否有在线卷"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.online" placeholder="请输入是否有在线卷" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="唯一标识" prop="tiid">
-        <el-input
-          v-model="queryParams.tiid"
-          placeholder="请输入唯一标识"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.tiid" placeholder="请输入唯一标识" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="适用地区" prop="locations">
-        <el-input
-          v-model="queryParams.locations"
-          placeholder="请输入适用地区"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.locations" placeholder="请输入适用地区" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="创建时间" prop="createTime">
-        <el-date-picker clearable
-          v-model="queryParams.createTime"
-          type="date"
-          value-format="YYYY-MM-DD"
+        <el-date-picker clearable v-model="queryParams.createTime" type="date" value-format="YYYY-MM-DD" class="w-[170px]!"
           placeholder="请选择创建时间">
         </el-date-picker>
       </el-form-item>
@@ -89,60 +41,42 @@
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Plus"
-          @click="handleAdd"
-          v-hasPermi="['learn:paper_real:add']"
-        >新增</el-button>
+        <el-button type="primary" plain icon="Plus" @click="handleAdd"
+          v-hasPermi="['learn:paper_real:add']">新增</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="Edit"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['learn:paper_real:edit']"
-        >修改</el-button>
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['learn:paper_real:edit']">修改</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="Delete"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['learn:paper_real:remove']"
-        >删除</el-button>
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['learn:paper_real:remove']">删除</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="Download"
-          @click="handleExport"
-          v-hasPermi="['learn:paper_real:export']"
-        >导出</el-button>
+        <el-button type="warning" plain icon="Download" @click="handleExport"
+          v-hasPermi="['learn:paper_real:export']">导出</el-button>
       </el-col>
       <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="paper_realList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="${comment}" align="center" prop="id" />
-      <el-table-column label="科目ID" align="center" prop="subjectId" />
+      <el-table-column type="selection" width="55" align="center" fixed="left" />
+      <!-- <el-table-column label="${comment}" align="center" prop="id" /> -->
+      <el-table-column label="科目ID" align="center" prop="subjectId" fixed="left" />
       <el-table-column label="试卷名称" align="center" prop="paperName" />
       <el-table-column label="试卷年份" align="center" prop="year" />
-      <el-table-column label="历年真题,模拟卷,必刷题" align="center" prop="paperType" />
+      <el-table-column label="试卷分类" align="center" prop="paperType">
+        <template #default="scope">
+          <span>{{ paperTypeOptions.find(item => item.value === scope.row.paperType)?.label }}</span>
+        </template>
+      </el-table-column>
       <el-table-column label="试卷题数" align="center" prop="number" />
       <el-table-column label="试卷总分" align="center" prop="fenshu" />
-      <el-table-column label="0 默认 1 精品试卷" align="center" prop="paperSource" />
-      <el-table-column label="是否有在线卷" align="center" prop="online" />
+      <el-table-column label="是否精品" align="center" prop="paperSource" />
+      <el-table-column label="是否有在线卷" align="center" prop="online" min-width="120" />
       <el-table-column label="唯一标识" align="center" prop="tiid" />
       <el-table-column label="下载路径" align="center" prop="osspath" />
-      <el-table-column label="原始文件名" align="center" prop="filename" />
+      <el-table-column label="原始文件名" align="center" prop="filename" min-width="100" />
       <el-table-column label="适用地区" align="center" prop="locations" />
       <el-table-column label="适用考生" align="center" prop="examineeType" />
       <el-table-column label="创建时间" align="center" prop="createTime" width="180">
@@ -150,21 +84,18 @@
           <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
         <template #default="scope">
-          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['learn:paper_real:edit']">修改</el-button>
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['learn:paper_real:remove']">删除</el-button>
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['learn:paper_real:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['learn:paper_real:remove']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
+      @pagination="getList" />
 
     <!-- 添加或修改真题卷对话框 -->
     <el-dialog :title="title" v-model="open" width="500px" append-to-body>
@@ -217,7 +148,11 @@
 import { listPaper_real, getPaper_real, delPaper_real, addPaper_real, updatePaper_real } from "@/api/learn/paper_real"
 
 const { proxy } = getCurrentInstance()
-
+const paperTypeOptions = ref([
+  { label: "历年真题", value: 1 },
+  { label: "模拟卷", value: 2 },
+  { label: "必刷题", value: 3 },
+])
 const paper_realList = ref([])
 const open = ref(false)
 const loading = ref(true)
@@ -377,12 +312,12 @@ function submitForm() {
 /** 删除按钮操作 */
 function handleDelete(row) {
   const _ids = row.id || ids.value
-  proxy.$modal.confirm('是否确认删除真题卷编号为"' + _ids + '"的数据项?').then(function() {
+  proxy.$modal.confirm('是否确认删除真题卷编号为"' + _ids + '"的数据项?').then(function () {
     return delPaper_real(_ids)
   }).then(() => {
     getList()
     proxy.$modal.msgSuccess("删除成功")
-  }).catch(() => {})
+  }).catch(() => { })
 }
 
 /** 导出按钮操作 */

+ 21 - 61
back-ui/src/views/learn/questionCorrect/index.vue

@@ -1,29 +1,14 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="60px">
       <el-form-item label="题ID" prop="questionId">
-        <el-input
-          v-model="queryParams.questionId"
-          placeholder="请输入题ID"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.questionId" placeholder="请输入题ID" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="纠错人" prop="userId">
-        <el-input
-          v-model="queryParams.userId"
-          placeholder="请输入纠错人"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.userId" placeholder="请输入纠错人" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item label="状态" prop="state">
-        <el-input
-          v-model="queryParams.state"
-          placeholder="请输入状态"
-          clearable
-          @keyup.enter="handleQuery"
-        />
+        <el-input v-model="queryParams.state" placeholder="请输入状态" clearable @keyup.enter="handleQuery" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@@ -33,42 +18,20 @@
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Plus"
-          @click="handleAdd"
-          v-hasPermi="['learn:questionCorrect:add']"
-        >新增</el-button>
+        <el-button type="primary" plain icon="Plus" @click="handleAdd"
+          v-hasPermi="['learn:questionCorrect:add']">新增</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="Edit"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['learn:questionCorrect:edit']"
-        >修改</el-button>
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['learn:questionCorrect:edit']">修改</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="Delete"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['learn:questionCorrect:remove']"
-        >删除</el-button>
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['learn:questionCorrect:remove']">删除</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="Download"
-          @click="handleExport"
-          v-hasPermi="['learn:questionCorrect:export']"
-        >导出</el-button>
+        <el-button type="warning" plain icon="Download" @click="handleExport"
+          v-hasPermi="['learn:questionCorrect:export']">导出</el-button>
       </el-col>
       <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
@@ -82,19 +45,16 @@
       <el-table-column label="状态" align="center" prop="state" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template #default="scope">
-          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['learn:questionCorrect:edit']">修改</el-button>
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['learn:questionCorrect:remove']">删除</el-button>
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['learn:questionCorrect:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['learn:questionCorrect:remove']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
+      @pagination="getList" />
 
     <!-- 添加或修改题纠错对话框 -->
     <el-dialog :title="title" v-model="open" width="500px" append-to-body>
@@ -255,12 +215,12 @@ function submitForm() {
 /** 删除按钮操作 */
 function handleDelete(row) {
   const _ids = row.id || ids.value
-  proxy.$modal.confirm('是否确认删除题纠错编号为"' + _ids + '"的数据项?').then(function() {
+  proxy.$modal.confirm('是否确认删除题纠错编号为"' + _ids + '"的数据项?').then(function () {
     return delQuestionCorrect(_ids)
   }).then(() => {
     getList()
     proxy.$modal.msgSuccess("删除成功")
-  }).catch(() => {})
+  }).catch(() => { })
 }
 
 /** 导出按钮操作 */

+ 444 - 485
back-ui/src/views/learn/questions/index.vue

@@ -1,344 +1,288 @@
 <template>
-    <div class="app-container">
-        <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
-            <el-form-item label="题干" prop="title">
-                <el-input
-                    v-model="queryParams.title"
-                    placeholder="请输入题干关键词"
-                    clearable
-                    @keyup.enter="handleQuery"
-                />
-            </el-form-item>
-            <el-form-item label="类型" prop="qtpye">
-                <el-select v-model="queryParams.qtpye" clearable @change="handleQuery" style="width: 172px">
-                    <el-option v-for="t in qtpyeList" :label="t" :value="t"/>
-                </el-select>
-            </el-form-item>
-            <el-form-item label="科目" prop="subjectId">
-                <el-select v-model="queryParams.subjectId" clearable @change="handleQuery" style="width: 172px">
-                    <el-option v-for="s in subjectList" :label="s.subjectName" :value="s.subjectId"/>
-                </el-select>
-            </el-form-item>
-            <el-form-item label="知识点" prop="knowledgeId">
-                <el-cascader v-model="queryParams.knowledgeId" :options="knowledges" filterable clearable
-                             @change="handleQuery"></el-cascader>
-            </el-form-item>
-            <el-form-item label="难度" prop="diff">
-                <el-input
-                    v-model="queryParams.diff"
-                    placeholder="请输入难度"
-                    clearable
-                    @keyup.enter="handleQuery"
-                />
-            </el-form-item>
-            <el-form-item label="相似度" prop="similarity">
-                <el-input
-                    v-model="queryParams.similarity"
-                    placeholder="请输入试题在题库中的相似度"
-                    clearable
-                    @keyup.enter="handleQuery"
-                />
-            </el-form-item>
-            <el-form-item label="试题年份" prop="year">
-                <el-input
-                    v-model="queryParams.year"
-                    placeholder="请输入试题年份"
-                    clearable
-                    @keyup.enter="handleQuery"
-                />
-            </el-form-item>
-            <el-form-item label="试题类型" prop="paperTpye">
-                <el-input
-                    v-model="queryParams.paperTpye"
-                    placeholder="请输入试题类型:1,月考;2,模拟考;3,中考;4,高考;5,学业考试;6,其他"
-                    clearable
-                    @keyup.enter="handleQuery"
-                />
-            </el-form-item>
-            <el-form-item label="来源" prop="source">
-                <el-input
-                    v-model="queryParams.source"
-                    placeholder="请输入来源"
-                    clearable
-                    @keyup.enter="handleQuery"
-                />
-            </el-form-item>
-            <el-form-item label="试题来源" prop="fromSite">
-                <el-input
-                    v-model="queryParams.fromSite"
-                    placeholder="请输入试题来源"
-                    clearable
-                    @keyup.enter="handleQuery"
-                />
-            </el-form-item>
-            <el-form-item>
-                <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
-                <el-button icon="Refresh" @click="resetQuery">重置</el-button>
-            </el-form-item>
-        </el-form>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="题干" prop="title">
+        <el-input v-model="queryParams.title" placeholder="请输入题干关键词" clearable @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item label="类型" prop="qtpye">
+        <!-- <el-input v-model="queryParams.qtpye" placeholder="请输入类型" clearable @keyup.enter="handleQuery" /> -->
+        <!-- <dict-tag :options="question_type" :value="queryParams.qtpye"/> -->
+        <el-select v-model="queryParams.typeId" clearable @change="handleQuery" style="width: 172px">
+          <el-option v-for="q in question_type" :label="q.label" :value="q.value" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="科目" prop="subjectId">
+        <el-select v-model="queryParams.subjectId" clearable @change="handleQuery" style="width: 172px">
+          <el-option v-for="s in subjectList" :label="s.subjectName" :value="s.subjectId" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="知识点" prop="knowledgeId">
+        <el-tree-select node-key="id" v-model="queryParams.knowledgeId" :data="knowledgeTreeList" check-strictly
+          :render-after-expand="false" style="" :props="{ label: 'name', children: 'children' }" placeholder="请选择知识点"
+          class="w-[172px]!" @change="handleQuery" />
+      </el-form-item>
+      <el-form-item label="难度" prop="diff">
+        <el-input v-model="queryParams.diff" placeholder="请输入难度" clearable @keyup.enter="handleQuery" />
+      </el-form-item>
+      <!-- <el-form-item label="相似度" prop="similarity">
+        <el-input v-model="queryParams.similarity" placeholder="请输入试题在题库中的相似度" clearable @keyup.enter="handleQuery" />
+      </el-form-item> -->
+      <el-form-item label="试题年份" prop="year">
+        <el-input v-model="queryParams.year" placeholder="请输入试题年份" clearable @keyup.enter="handleQuery" />
+      </el-form-item>
+      <!-- <el-form-item label="试题类型" prop="paperTpye">
+        <el-select v-model="queryParams.paperTpye" clearable @change="handleQuery" style="width: 172px">
+          <el-option v-for="p in paper_type" :label="p.label" :value="p.value" />
+        </el-select>
+      </el-form-item> -->
+      <el-form-item label="来源" prop="source">
+        <el-input v-model="queryParams.source" placeholder="请输入来源" clearable @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item label="试题来源" prop="fromSite">
+        <el-input v-model="queryParams.fromSite" placeholder="请输入试题来源" clearable @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
 
-        <el-row :gutter="10" class="mb8">
-            <el-col :span="1.5">
-                <el-button
-                    type="primary"
-                    plain
-                    icon="Plus"
-                    @click="handleAdd"
-                    v-hasPermi="['learn:questions:add']"
-                >新增
-                </el-button>
-            </el-col>
-            <el-col :span="1.5">
-                <el-button
-                    type="success"
-                    plain
-                    icon="Edit"
-                    :disabled="single"
-                    @click="handleUpdate"
-                    v-hasPermi="['learn:questions:edit']"
-                >修改
-                </el-button>
-            </el-col>
-            <el-col :span="1.5">
-                <el-button
-                    type="danger"
-                    plain
-                    icon="Delete"
-                    :disabled="multiple"
-                    @click="handleDelete"
-                    v-hasPermi="['learn:questions:remove']"
-                >删除
-                </el-button>
-            </el-col>
-            <el-col :span="1.5">
-                <el-button
-                    type="warning"
-                    plain
-                    icon="Download"
-                    @click="handleExport"
-                    v-hasPermi="['learn:questions:export']"
-                >导出
-                </el-button>
-            </el-col>
-            <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
-        </el-row>
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['learn:questions:add']">新增
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['learn:questions:edit']">修改
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['learn:questions:remove']">删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['learn:questions:export']">导出
+        </el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
 
-        <el-table v-loading="loading" :data="questionsList" @selection-change="handleSelectionChange">
-            <el-table-column type="selection" width="55" align="center"/>
-            <el-table-column label="id" align="center" prop="id"/>
-            <el-table-column label="试题-题干" align="center" prop="title" min-width="550" show-overflow-tooltip/>
-            <el-table-column label="选项A" align="center" prop="optionA"/>
-            <el-table-column label="选项B" align="center" prop="optionB"/>
-            <el-table-column label="选项C" align="center" prop="optionC"/>
-            <el-table-column label="选项D" align="center" prop="optionD"/>
-            <el-table-column label="选项E" align="center" prop="optionE"/>
-            <el-table-column label="选项D" align="center" prop="optionF"/>
-            <el-table-column label="选项E" align="center" prop="optionG"/>
-            <el-table-column label="标准答案" align="center" prop="answer1"/>
-            <el-table-column label="答案2" align="center" prop="answer2"/>
-            <el-table-column label="类型" align="center" prop="qtpye"/>
-            <el-table-column label="学科Id" align="center" prop="subjectId"/>
-            <el-table-column label="试卷Id" align="center" prop="paperId"/>
-            <el-table-column label="知识点" align="center" prop="knowledgeId"/>
-            <el-table-column label="难易度" align="center" prop="diff"/>
-            <el-table-column label="相似度" align="center" prop="similarity"/>
-            <el-table-column label="试题解析" align="center" prop="parse" min-width="250" show-overflow-tooltip/>
-            <el-table-column label="knowId" align="center" prop="knowId"/>
-            <el-table-column label="年级ID" align="center" prop="gradeId"/>
-            <el-table-column label="knowledges" align="center" prop="knowledges"/>
-            <el-table-column label="试题区域" align="center" prop="area"/>
-            <el-table-column label="试题年份" align="center" prop="year"/>
-            <el-table-column label="试题类型" align="center" prop="paperTpye"/>
-            <el-table-column label="来源" align="center" prop="source"/>
-            <el-table-column label="试题来源" align="center" prop="fromSite"/>
-            <el-table-column label="图片水印" align="center" prop="isSub"/>
-            <el-table-column label="常规题" align="center" prop="isNormal"/>
-            <el-table-column label="匹配知识点" align="center" prop="isKonw"/>
-            <el-table-column label="tiid" align="center" prop="tiid"/>
-            <el-table-column label="试题题干的md5值" align="center" prop="md5"/>
-            <el-table-column label="是否唯一" align="center" prop="isunique"/>
-            <el-table-column label="md52" align="center" prop="md52"/>
-            <el-table-column label="得分" align="center" prop="score"/>
-            <el-table-column label="选项" align="center" prop="options"/>
-            <el-table-column label="number" align="center" prop="number"/>
-            <el-table-column label="paperTypeTitle" align="center" prop="paperTypeTitle"/>
-            <el-table-column label="选项" align="center" prop="options0"/>
-            <el-table-column label="试题-材料题题干" align="center" prop="title0"/>
-            <el-table-column label="试题-材料题题干" align="center" prop="title1"/>
-            <el-table-column label="试题解析" align="center" prop="parse0"/>
-            <el-table-column label="answer0" align="center" prop="answer0"/>
-            <el-table-column label="是否更新" align="center" prop="isUpdate"/>
-            <el-table-column label="子题类型" align="center" prop="isSubType"/>
-            <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-                <template #default="scope">
-                    <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
-                               v-hasPermi="['learn:questions:edit']">修改
-                    </el-button>
-                    <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
-                               v-hasPermi="['learn:questions:remove']">删除
-                    </el-button>
-                </template>
-            </el-table-column>
-        </el-table>
+    <el-table v-loading="loading" :data="questionsList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" fixed="left" />
+      <!-- <el-table-column label="id" align="center" prop="id" fixed="left" /> -->
+      <el-table-column label="试题-题干" align="left" prop="title" min-width="450" header-align="center"
+        show-overflow-tooltip fixed="left" />
+      <el-table-column label="选项A" align="center" prop="optionA" />
+      <el-table-column label="选项B" align="center" prop="optionB" />
+      <el-table-column label="选项C" align="center" prop="optionC" />
+      <el-table-column label="选项D" align="center" prop="optionD" />
+      <el-table-column label="选项E" align="center" prop="optionE" />
+      <el-table-column label="选项D" align="center" prop="optionF" />
+      <el-table-column label="选项E" align="center" prop="optionG" />
+      <el-table-column label="标准答案" align="center" prop="answer1" />
+      <el-table-column label="答案2" align="center" prop="answer2" />
+      <el-table-column label="类型" align="center" prop="qtpye" />
+      <el-table-column label="学科Id" align="center" prop="subjectId" />
+      <el-table-column label="试卷Id" align="center" prop="paperId" />
+      <el-table-column label="知识点" align="center" prop="knowledgeId" />
+      <el-table-column label="难易度" align="center" prop="diff" />
+      <el-table-column label="相似度" align="center" prop="similarity" />
+      <el-table-column label="试题解析" align="center" prop="parse" min-width="250" show-overflow-tooltip />
+      <!-- <el-table-column label="knowId" align="center" prop="knowId" /> -->
+      <el-table-column label="年级ID" align="center" prop="gradeId" />
+      <!-- <el-table-column label="knowledges" align="center" prop="knowledges" /> -->
+      <el-table-column label="试题区域" align="center" prop="area" />
+      <el-table-column label="试题年份" align="center" prop="year" />
+      <el-table-column label="试题类型" align="center" prop="paperTpye" />
+      <el-table-column label="来源" align="center" prop="source" />
+      <el-table-column label="试题来源" align="center" prop="fromSite" />
+      <el-table-column label="图片水印" align="center" prop="isSub" />
+      <el-table-column label="常规题" align="center" prop="isNormal" />
+      <el-table-column label="匹配知识点" align="center" prop="isKonw" min-width="120" />
+      <el-table-column label="tiid" align="center" prop="tiid" min-width="100" />
+      <!-- <el-table-column label="试题题干的md5值" align="center" prop="md5" /> -->
+      <el-table-column label="是否唯一" align="center" prop="isunique" />
+      <!-- <el-table-column label="md52" align="center" prop="md52" /> -->
+      <el-table-column label="得分" align="center" prop="score" />
+      <el-table-column label="选项" align="center" prop="options" />
+      <!-- <el-table-column label="number" align="center" prop="number" /> -->
+      <!-- <el-table-column label="paperTypeTitle" align="center" prop="paperTypeTitle" /> -->
+      <el-table-column label="选项" align="center" prop="options0" />
+      <el-table-column label="试题-材料题题干" align="center" prop="title0" min-width="130" />
+      <el-table-column label="试题-材料题题干" align="center" prop="title1" min-width="130" />
+      <el-table-column label="试题解析" align="left" prop="parse0" header-align="center" show-overflow-tooltip />
+      <el-table-column label="answer0" align="center" prop="answer0" />
+      <el-table-column label="是否更新" align="center" prop="isUpdate" />
+      <el-table-column label="子题类型" align="center" prop="isSubType" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="140" fixed="right">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['learn:questions:edit']">修改
+          </el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['learn:questions:remove']">删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
 
-        <pagination
-            v-show="total>0"
-            :total="total"
-            v-model:page="queryParams.pageNum"
-            v-model:limit="queryParams.pageSize"
-            @pagination="getList"
-        />
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
 
-        <!-- 添加或修改试题对话框 -->
-        <el-dialog :title="title" v-model="open" width="500px" append-to-body>
-            <el-form ref="questionsRef" :model="form" :rules="rules" label-width="80px">
-                <el-form-item label="试题-题干" prop="title">
-                    <el-input v-model="form.title" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="选项A" prop="optionA">
-                    <el-input v-model="form.optionA" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="选项B" prop="optionB">
-                    <el-input v-model="form.optionB" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="选项C" prop="optionC">
-                    <el-input v-model="form.optionC" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="选项D" prop="optionD">
-                    <el-input v-model="form.optionD" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="选项E" prop="optionE">
-                    <el-input v-model="form.optionE" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="选项D" prop="optionF">
-                    <el-input v-model="form.optionF" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="选项E" prop="optionG">
-                    <el-input v-model="form.optionG" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="${comment}" prop="answer1">
-                    <el-input v-model="form.answer1" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="非标准格式答案或含部分过程说明的答案" prop="answer2">
-                    <el-input v-model="form.answer2" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="类型" prop="qtpye">
-                    <el-input v-model="form.qtpye" placeholder="请输入类型"/>
-                </el-form-item>
-                <el-form-item label="学科Id" prop="subjectId">
-                    <el-input v-model="form.subjectId" placeholder="请输入学科Id"/>
-                </el-form-item>
-                <el-form-item label="${comment}" prop="paperId">
-                    <el-input v-model="form.paperId" placeholder="请输入${comment}"/>
-                </el-form-item>
-                <el-form-item label="知识点" prop="knowledgeId">
-                    <el-input v-model="form.knowledgeId" placeholder="请输入知识点"/>
-                </el-form-item>
-                <el-form-item label="${comment}" prop="diff">
+    <!-- 添加或修改试题对话框 -->
+    <el-dialog :title="title" v-model="open" width="700px" append-to-body>
+      <el-form ref="questionsRef" :model="form" :rules="rules" label-width="140px">
+        <el-form-item label="试题-题干" prop="title">
+          <el-input v-model="form.title" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="选项A" prop="optionA">
+          <el-input v-model="form.optionA" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="选项B" prop="optionB">
+          <el-input v-model="form.optionB" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="选项C" prop="optionC">
+          <el-input v-model="form.optionC" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="选项D" prop="optionD">
+          <el-input v-model="form.optionD" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="选项E" prop="optionE">
+          <el-input v-model="form.optionE" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="选项D" prop="optionF">
+          <el-input v-model="form.optionF" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="选项E" prop="optionG">
+          <el-input v-model="form.optionG" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="标准答案" prop="answer1">
+          <el-input v-model="form.answer1" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="非标准答案" prop="answer2">
+          <el-input v-model="form.answer2" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="类型" prop="qtpye">
+          <!-- <el-input v-model="form.qtpye" placeholder="请输入类型" /> -->
+          <el-select v-model="form.typeId" placeholder="请选择类型">
+            <el-option v-for="q in question_type" :label="q.label" :value="q.value" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="学科Id" prop="subjectId">
+          <el-input v-model="form.subjectId" placeholder="请输入学科Id" />
+        </el-form-item>
+        <!-- <el-form-item label="${comment}" prop="paperId">
+          <el-input v-model="form.paperId" placeholder="请输入${comment}" />
+        </el-form-item> -->
+        <el-form-item label="知识点" prop="knowledgeId">
+          <el-tree-select node-key="id" v-model="form.knowledgeId" :data="knowledgeTreeList" check-strictly
+            :render-after-expand="false" style="" :props="{ label: 'name', children: 'children' }"
+            placeholder="请选择知识点" />
+        </el-form-item>
+        <!-- <el-form-item label="${comment}" prop="diff">
                     <el-input v-model="form.diff" placeholder="请输入${comment}"/>
-                </el-form-item>
-                <el-form-item label="试题在题库中的相似度,相似度越高,质量越低" prop="similarity">
-                    <el-input v-model="form.similarity" placeholder="请输入试题在题库中的相似度,相似度越高,质量越低"/>
-                </el-form-item>
-                <el-form-item label="试题解析" prop="parse">
-                    <el-input v-model="form.parse" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="${comment}" prop="knowId">
-                    <el-input v-model="form.knowId" placeholder="请输入${comment}"/>
-                </el-form-item>
-                <el-form-item label="年级ID" prop="gradeId">
-                    <el-input v-model="form.gradeId" placeholder="请输入年级ID"/>
-                </el-form-item>
-                <el-form-item label="${comment}" prop="knowledges">
-                    <el-input v-model="form.knowledges" placeholder="请输入${comment}"/>
-                </el-form-item>
-                <el-form-item label="试题区域" prop="area">
-                    <el-input v-model="form.area" placeholder="请输入试题区域"/>
-                </el-form-item>
-                <el-form-item label="试题年份" prop="year">
-                    <el-input v-model="form.year" placeholder="请输入试题年份"/>
-                </el-form-item>
-                <el-form-item label="试题类型:1,月考;2,模拟考;3,中考;4,高考;5,学业考试;6,其他" prop="paperTpye">
-                    <el-input v-model="form.paperTpye"
-                              placeholder="请输入试题类型:1,月考;2,模拟考;3,中考;4,高考;5,学业考试;6,其他"/>
-                </el-form-item>
-                <el-form-item label="来源" prop="source">
-                    <el-input v-model="form.source" placeholder="请输入来源"/>
-                </el-form-item>
-                <el-form-item label="试题来源" prop="fromSite">
-                    <el-input v-model="form.fromSite" placeholder="请输入试题来源"/>
-                </el-form-item>
-                <el-form-item label="是否存在图片水印" prop="isSub">
-                    <el-input v-model="form.isSub" placeholder="请输入是否存在图片水印"/>
-                </el-form-item>
-                <el-form-item
-                    label="是否常规题,如果选择题无法正常提取标准答案或者选项,有小题的答题无法正常提取小题,则isNormal为0,否则为1"
-                    prop="isNormal">
-                    <el-input v-model="form.isNormal"
-                              placeholder="请输入是否常规题,如果选择题无法正常提取标准答案或者选项,有小题的答题无法正常提取小题,则isNormal为0,否则为1"/>
-                </el-form-item>
-                <el-form-item label="是否匹配章节知识点,1匹配,0不匹配" prop="isKonw">
-                    <el-input v-model="form.isKonw" placeholder="请输入是否匹配章节知识点,1匹配,0不匹配"/>
-                </el-form-item>
-                <el-form-item label="试题的tiid,结合fromsite进行同网站试题排重,用于增量更新" prop="tiid">
-                    <el-input v-model="form.tiid"
-                              placeholder="请输入试题的tiid,结合fromsite进行同网站试题排重,用于增量更新"/>
-                </el-form-item>
-                <el-form-item label="试题题干的md5值" prop="md5">
-                    <el-input v-model="form.md5" placeholder="请输入试题题干的md5值"/>
-                </el-form-item>
-                <el-form-item label="${comment}" prop="isunique">
-                    <el-input v-model="form.isunique" placeholder="请输入${comment}"/>
-                </el-form-item>
-                <el-form-item label="${comment}" prop="md52">
-                    <el-input v-model="form.md52" placeholder="请输入${comment}"/>
-                </el-form-item>
-                <el-form-item label="得分" prop="score">
-                    <el-input v-model="form.score" placeholder="请输入得分"/>
-                </el-form-item>
-                <el-form-item label="选项" prop="options">
-                    <el-input v-model="form.options" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="${comment}" prop="number">
-                    <el-input v-model="form.number" placeholder="请输入${comment}"/>
-                </el-form-item>
-                <el-form-item label="${comment}" prop="paperTypeTitle">
-                    <el-input v-model="form.paperTypeTitle" placeholder="请输入${comment}"/>
-                </el-form-item>
-                <el-form-item label="选项" prop="options0">
-                    <el-input v-model="form.options0" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="试题-材料题题干" prop="title0">
-                    <el-input v-model="form.title0" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="试题-材料题题干" prop="title1">
-                    <el-input v-model="form.title1" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="试题解析" prop="parse0">
-                    <el-input v-model="form.parse0" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="${comment}" prop="answer0">
-                    <el-input v-model="form.answer0" type="textarea" placeholder="请输入内容"/>
-                </el-form-item>
-                <el-form-item label="是否更新" prop="isUpdate">
-                    <el-input v-model="form.isUpdate" placeholder="请输入是否更新"/>
-                </el-form-item>
-            </el-form>
-            <template #footer>
-                <div class="dialog-footer">
-                    <el-button type="primary" @click="submitForm">确 定</el-button>
-                    <el-button @click="cancel">取 消</el-button>
-                </div>
-            </template>
-        </el-dialog>
-    </div>
+                </el-form-item> -->
+        <el-form-item label="相似度" prop="similarity">
+          <el-input v-model="form.similarity" placeholder="请输入相似度" />
+        </el-form-item>
+        <el-form-item label="试题解析" prop="parse">
+          <el-input v-model="form.parse" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <!-- <el-form-item label="${comment}" prop="knowId">
+          <el-input v-model="form.knowId" placeholder="请输入${comment}" />
+        </el-form-item> -->
+        <el-form-item label="年级ID" prop="gradeId">
+          <el-input v-model="form.gradeId" placeholder="请输入年级ID" />
+        </el-form-item>
+        <!-- <el-form-item label="${comment}" prop="knowledges">
+          <el-input v-model="form.knowledges" placeholder="请输入${comment}" />
+        </el-form-item> -->
+        <el-form-item label="试题区域" prop="area">
+          <el-input v-model="form.area" placeholder="请输入试题区域" />
+        </el-form-item>
+        <el-form-item label="试题年份" prop="year">
+          <el-input v-model="form.year" placeholder="请输入试题年份" />
+        </el-form-item>
+        <el-form-item label="试题类型" prop="paperTpye">
+          <el-input v-model="form.paperTpye" placeholder="请输入试题" />
+        </el-form-item>
+        <el-form-item label="来源" prop="source">
+          <el-input v-model="form.source" placeholder="请输入来源" />
+        </el-form-item>
+        <el-form-item label="试题来源" prop="fromSite">
+          <el-input v-model="form.fromSite" placeholder="请输入试题来源" />
+        </el-form-item>
+        <el-form-item label="是否存在图片水印" prop="isSub">
+          <el-input v-model="form.isSub" placeholder="请输入是否存在图片水印" />
+        </el-form-item>
+        <el-form-item label="是否常规题" prop="isNormal">
+          <el-input v-model="form.isNormal" placeholder="请输入是否常规题" />
+        </el-form-item>
+        <el-form-item label="是否匹配章节知识点" prop="isKonw">
+          <el-input v-model="form.isKonw" placeholder="请输入是否匹配章节知识点" />
+        </el-form-item>
+        <el-form-item label="试题的tiid" prop="tiid">
+          <el-input v-model="form.tiid" placeholder="请输入试题的tiid" />
+        </el-form-item>
+        <!-- <el-form-item label="试题题干的md5值" prop="md5">
+          <el-input v-model="form.md5" placeholder="请输入试题题干的md5值" />
+        </el-form-item> -->
+        <!-- <el-form-item label="${comment}" prop="isunique">
+          <el-input v-model="form.isunique" placeholder="请输入${comment}" />
+        </el-form-item> -->
+        <!-- <el-form-item label="${comment}" prop="md52">
+          <el-input v-model="form.md52" placeholder="请输入${comment}" />
+        </el-form-item> -->
+        <el-form-item label="得分" prop="score">
+          <el-input v-model="form.score" placeholder="请输入得分" />
+        </el-form-item>
+        <el-form-item label="选项" prop="options">
+          <el-input v-model="form.options" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <!-- <el-form-item label="${comment}" prop="number">
+          <el-input v-model="form.number" placeholder="请输入${comment}" />
+        </el-form-item> -->
+        <!-- <el-form-item label="${comment}" prop="paperTypeTitle">
+          <el-input v-model="form.paperTypeTitle" placeholder="请输入${comment}" />
+        </el-form-item> -->
+        <el-form-item label="选项" prop="options0">
+          <el-input v-model="form.options0" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="试题-材料题题干" prop="title0">
+          <el-input v-model="form.title0" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="试题-材料题题干" prop="title1">
+          <el-input v-model="form.title1" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="试题解析" prop="parse0">
+          <el-input v-model="form.parse0" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <!-- <el-form-item label="${comment}" prop="answer0">
+          <el-input v-model="form.answer0" type="textarea" placeholder="请输入内容" />
+        </el-form-item> -->
+        <el-form-item label="是否更新" prop="isUpdate">
+          <el-input v-model="form.isUpdate" placeholder="请输入是否更新" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
 </template>
 
 <script setup name="Questions">
-import {listQuestions, getQuestions, delQuestions, addQuestions, updateQuestions} from "@/api/learn/questions"
-
-const {proxy} = getCurrentInstance()
-
+import { listQuestions, getQuestions, delQuestions, addQuestions, updateQuestions } from "@/api/learn/questions"
+import { listKnowledgeTree } from "@/api/learn/knowledgeTree"
+import { listAllSubject } from "@/api/dz/subject"
+const { proxy } = getCurrentInstance()
+const { question_type } = proxy.useDict('question_type')
+const { paper_type } = proxy.useDict('paper_type')
 const questionsList = ref([])
 const open = ref(false)
 const loading = ref(true)
@@ -351,206 +295,221 @@ const title = ref("")
 
 const subjectList = ref([])
 const qtpyeList = ref([])
-const knowledges = ref([])
-
+const knowledgeTreeList = ref([])
+const selectedKnowledgeNode = ref(null)
 const data = reactive({
-    form: {},
-    queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        title: null,
-        optionA: null,
-        optionB: null,
-        optionC: null,
-        optionD: null,
-        optionE: null,
-        optionF: null,
-        optionG: null,
-        answer1: null,
-        answer2: null,
-        qtpye: null,
-        subjectId: null,
-        paperId: null,
-        knowledgeId: null,
-        diff: null,
-        similarity: null,
-        parse: null,
-        knowId: null,
-        gradeId: null,
-        knowledges: null,
-        area: null,
-        year: null,
-        paperTpye: null,
-        source: null,
-        fromSite: null,
-        isSub: null,
-        isNormal: null,
-        isKonw: null,
-        tiid: null,
-        md5: null,
-        isunique: null,
-        md52: null,
-        score: null,
-        options: null,
-        number: null,
-        paperTypeTitle: null,
-        options0: null,
-        title0: null,
-        title1: null,
-        parse0: null,
-        answer0: null,
-        isUpdate: null,
-        isSubType: null
-    },
-    rules: {}
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    title: null,
+    optionA: null,
+    optionB: null,
+    optionC: null,
+    optionD: null,
+    optionE: null,
+    optionF: null,
+    optionG: null,
+    answer1: null,
+    answer2: null,
+    qtpye: null,
+    subjectId: null,
+    paperId: null,
+    knowledgeId: null,
+    diff: null,
+    similarity: null,
+    parse: null,
+    knowId: null,
+    gradeId: null,
+    knowledges: null,
+    area: null,
+    year: null,
+    paperTpye: null,
+    source: null,
+    fromSite: null,
+    isSub: null,
+    isNormal: null,
+    isKonw: null,
+    tiid: null,
+    md5: null,
+    isunique: null,
+    md52: null,
+    score: null,
+    options: null,
+    number: null,
+    paperTypeTitle: null,
+    options0: null,
+    title0: null,
+    title1: null,
+    parse0: null,
+    answer0: null,
+    isUpdate: null,
+    isSubType: null
+  },
+  rules: {}
 })
+setTimeout(() => {
+  console.log(question_type)
+}, 1000)
 
-const {queryParams, form, rules} = toRefs(data)
+const { queryParams, form, rules } = toRefs(data)
 
 /** 查询试题列表 */
 function getList() {
-    loading.value = true
-    listQuestions(queryParams.value).then(response => {
-        questionsList.value = response.rows
-        total.value = response.total
-        loading.value = false
-    })
+  loading.value = true
+  listQuestions(queryParams.value).then(response => {
+    questionsList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+function getKnowledgeTreeList() {
+  listKnowledgeTree({}).then(res => {
+    knowledgeTreeList.value = res.data
+  })
+}
+function getSubjectList() {
+  listAllSubject({}).then(res => {
+    subjectList.value = res.data
+  })
 }
 
 // 取消按钮
 function cancel() {
-    open.value = false
-    reset()
+  open.value = false
+  reset()
 }
 
 // 表单重置
 function reset() {
-    form.value = {
-        id: null,
-        title: null,
-        optionA: null,
-        optionB: null,
-        optionC: null,
-        optionD: null,
-        optionE: null,
-        optionF: null,
-        optionG: null,
-        answer1: null,
-        answer2: null,
-        qtpye: null,
-        subjectId: null,
-        paperId: null,
-        knowledgeId: null,
-        diff: null,
-        similarity: null,
-        parse: null,
-        knowId: null,
-        gradeId: null,
-        knowledges: null,
-        area: null,
-        year: null,
-        paperTpye: null,
-        source: null,
-        fromSite: null,
-        isSub: null,
-        isNormal: null,
-        isKonw: null,
-        tiid: null,
-        md5: null,
-        isunique: null,
-        md52: null,
-        createTime: null,
-        score: null,
-        options: null,
-        number: null,
-        paperTypeTitle: null,
-        options0: null,
-        title0: null,
-        title1: null,
-        parse0: null,
-        answer0: null,
-        isUpdate: null,
-        isSubType: null
-    }
-    proxy.resetForm("questionsRef")
+  form.value = {
+    id: null,
+    title: null,
+    optionA: null,
+    optionB: null,
+    optionC: null,
+    optionD: null,
+    optionE: null,
+    optionF: null,
+    optionG: null,
+    answer1: null,
+    answer2: null,
+    qtpye: null,
+    subjectId: null,
+    paperId: null,
+    knowledgeId: null,
+    diff: null,
+    similarity: null,
+    parse: null,
+    knowId: null,
+    gradeId: null,
+    knowledges: null,
+    area: null,
+    year: null,
+    paperTpye: null,
+    source: null,
+    fromSite: null,
+    isSub: null,
+    isNormal: null,
+    isKonw: null,
+    tiid: null,
+    md5: null,
+    isunique: null,
+    md52: null,
+    createTime: null,
+    score: null,
+    options: null,
+    number: null,
+    paperTypeTitle: null,
+    options0: null,
+    title0: null,
+    title1: null,
+    parse0: null,
+    answer0: null,
+    isUpdate: null,
+    isSubType: null
+  }
+  proxy.resetForm("questionsRef")
 }
 
 /** 搜索按钮操作 */
 function handleQuery() {
-    queryParams.value.pageNum = 1
-    getList()
+  queryParams.value.pageNum = 1
+  getList()
 }
 
 /** 重置按钮操作 */
 function resetQuery() {
-    proxy.resetForm("queryRef")
-    handleQuery()
+  proxy.resetForm("queryRef")
+  handleQuery()
 }
 
 // 多选框选中数据
 function handleSelectionChange(selection) {
-    ids.value = selection.map(item => item.id)
-    single.value = selection.length != 1
-    multiple.value = !selection.length
+  ids.value = selection.map(item => item.id)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
 }
 
 /** 新增按钮操作 */
 function handleAdd() {
-    reset()
-    open.value = true
-    title.value = "添加试题"
+  reset()
+  open.value = true
+  title.value = "添加试题"
 }
 
 /** 修改按钮操作 */
 function handleUpdate(row) {
-    reset()
-    const _id = row.id || ids.value
-    getQuestions(_id).then(response => {
-        form.value = response.data
-        open.value = true
-        title.value = "修改试题"
-    })
+  reset()
+  const _id = row.id || ids.value
+  getQuestions(_id).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改试题"
+  })
 }
 
 /** 提交按钮 */
 function submitForm() {
-    proxy.$refs["questionsRef"].validate(valid => {
-        if (valid) {
-            if (form.value.id != null) {
-                updateQuestions(form.value).then(response => {
-                    proxy.$modal.msgSuccess("修改成功")
-                    open.value = false
-                    getList()
-                })
-            } else {
-                addQuestions(form.value).then(response => {
-                    proxy.$modal.msgSuccess("新增成功")
-                    open.value = false
-                    getList()
-                })
-            }
-        }
-    })
+  proxy.$refs["questionsRef"].validate(valid => {
+    if (valid) {
+      if (form.value.id != null) {
+        updateQuestions(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addQuestions(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
 }
 
 /** 删除按钮操作 */
 function handleDelete(row) {
-    const _ids = row.id || ids.value
-    proxy.$modal.confirm('是否确认删除试题编号为"' + _ids + '"的数据项?').then(function () {
-        return delQuestions(_ids)
-    }).then(() => {
-        getList()
-        proxy.$modal.msgSuccess("删除成功")
-    }).catch(() => {
-    })
+  const _ids = row.id || ids.value
+  proxy.$modal.confirm('是否确认删除试题编号为"' + _ids + '"的数据项?').then(function () {
+    return delQuestions(_ids)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {
+  })
 }
 
 /** 导出按钮操作 */
 function handleExport() {
-    proxy.download('learn/questions/export', {
-        ...queryParams.value
-    }, `questions_${new Date().getTime()}.xlsx`)
+  proxy.download('learn/questions/export', {
+    ...queryParams.value
+  }, `questions_${new Date().getTime()}.xlsx`)
 }
 
+getKnowledgeTreeList()
+getSubjectList()
 getList()
 </script>

+ 110 - 168
back-ui/src/views/system/dict/index.vue

@@ -1,174 +1,116 @@
 <template>
-   <div class="app-container">
-      <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
-         <el-form-item label="字典名称" prop="dictName">
-            <el-input
-               v-model="queryParams.dictName"
-               placeholder="请输入字典名称"
-               clearable
-               style="width: 240px"
-               @keyup.enter="handleQuery"
-            />
-         </el-form-item>
-         <el-form-item label="字典类型" prop="dictType">
-            <el-input
-               v-model="queryParams.dictType"
-               placeholder="请输入字典类型"
-               clearable
-               style="width: 240px"
-               @keyup.enter="handleQuery"
-            />
-         </el-form-item>
-         <el-form-item label="状态" prop="status">
-            <el-select
-               v-model="queryParams.status"
-               placeholder="字典状态"
-               clearable
-               style="width: 240px"
-            >
-               <el-option
-                  v-for="dict in sys_normal_disable"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-               />
-            </el-select>
-         </el-form-item>
-         <el-form-item label="创建时间" style="width: 308px">
-            <el-date-picker
-               v-model="dateRange"
-               value-format="YYYY-MM-DD"
-               type="daterange"
-               range-separator="-"
-               start-placeholder="开始日期"
-               end-placeholder="结束日期"
-            ></el-date-picker>
-         </el-form-item>
-         <el-form-item>
-            <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
-            <el-button icon="Refresh" @click="resetQuery">重置</el-button>
-         </el-form-item>
-      </el-form>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="90px">
+      <el-form-item label="字典名称" prop="dictName">
+        <el-input v-model="queryParams.dictName" placeholder="请输入字典名称" clearable class="w-[172px]!"
+          @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item label="字典类型" prop="dictType">
+        <el-input v-model="queryParams.dictType" placeholder="请输入字典类型" clearable class="w-[172px]!"
+          @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="字典状态" clearable class="w-[172px]!">
+          <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="创建时间" style="width: 308px">
+        <el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
+          start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
 
-      <el-row :gutter="10" class="mb8">
-         <el-col :span="1.5">
-            <el-button
-               type="primary"
-               plain
-               icon="Plus"
-               @click="handleAdd"
-               v-hasPermi="['system:dict:add']"
-            >新增</el-button>
-         </el-col>
-         <el-col :span="1.5">
-            <el-button
-               type="success"
-               plain
-               icon="Edit"
-               :disabled="single"
-               @click="handleUpdate"
-               v-hasPermi="['system:dict:edit']"
-            >修改</el-button>
-         </el-col>
-         <el-col :span="1.5">
-            <el-button
-               type="danger"
-               plain
-               icon="Delete"
-               :disabled="multiple"
-               @click="handleDelete"
-               v-hasPermi="['system:dict:remove']"
-            >删除</el-button>
-         </el-col>
-         <el-col :span="1.5">
-            <el-button
-               type="warning"
-               plain
-               icon="Download"
-               @click="handleExport"
-               v-hasPermi="['system:dict:export']"
-            >导出</el-button>
-         </el-col>
-         <el-col :span="1.5">
-            <el-button
-               type="danger"
-               plain
-               icon="Refresh"
-               @click="handleRefreshCache"
-               v-hasPermi="['system:dict:remove']"
-            >刷新缓存</el-button>
-         </el-col>
-         <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
-      </el-row>
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:dict:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['system:dict:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport"
+          v-hasPermi="['system:dict:export']">导出</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Refresh" @click="handleRefreshCache"
+          v-hasPermi="['system:dict:remove']">刷新缓存</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
 
-      <el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange">
-         <el-table-column type="selection" width="55" align="center" />
-         <el-table-column label="字典编号" align="center" prop="dictId" />
-         <el-table-column label="字典名称" align="center" prop="dictName" :show-overflow-tooltip="true"/>
-         <el-table-column label="字典类型" align="center" :show-overflow-tooltip="true">
-            <template #default="scope">
-               <router-link :to="'/system/dict-data/index/' + scope.row.dictId" class="link-type">
-                  <span>{{ scope.row.dictType }}</span>
-               </router-link>
-            </template>
-         </el-table-column>
-         <el-table-column label="状态" align="center" prop="status">
-            <template #default="scope">
-               <dict-tag :options="sys_normal_disable" :value="scope.row.status" />
-            </template>
-         </el-table-column>
-         <el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
-         <el-table-column label="创建时间" align="center" prop="createTime" width="180">
-            <template #default="scope">
-               <span>{{ parseTime(scope.row.createTime) }}</span>
-            </template>
-         </el-table-column>
-         <el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width">
-            <template #default="scope">
-               <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:dict:edit']">修改</el-button>
-               <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:dict:remove']">删除</el-button>
-            </template>
-         </el-table-column>
-      </el-table>
+    <el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" fixed="left" />
+      <el-table-column label="编号" align="center" prop="dictId" fixed="left" />
+      <el-table-column label="字典名称" align="center" prop="dictName" :show-overflow-tooltip="true" min-width="160" />
+      <el-table-column label="字典类型" align="center" :show-overflow-tooltip="true" min-width="140">
+        <template #default="scope">
+          <router-link :to="'/system/dict-data/index/' + scope.row.dictId" class="link-type">
+            <span>{{ scope.row.dictType }}</span>
+          </router-link>
+        </template>
+      </el-table-column>
+      <el-table-column label="状态" align="center" prop="status">
+        <template #default="scope">
+          <dict-tag :options="sys_normal_disable" :value="scope.row.status" />
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
+      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.createTime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width" min-width="140"
+        fixed="right">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
 
-      <pagination
-         v-show="total > 0"
-         :total="total"
-         v-model:page="queryParams.pageNum"
-         v-model:limit="queryParams.pageSize"
-         @pagination="getList"
-      />
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
 
-      <!-- 添加或修改参数配置对话框 -->
-      <el-dialog :title="title" v-model="open" width="500px" append-to-body>
-         <el-form ref="dictRef" :model="form" :rules="rules" label-width="80px">
-            <el-form-item label="字典名称" prop="dictName">
-               <el-input v-model="form.dictName" placeholder="请输入字典名称" />
-            </el-form-item>
-            <el-form-item label="字典类型" prop="dictType">
-               <el-input v-model="form.dictType" placeholder="请输入字典类型" />
-            </el-form-item>
-            <el-form-item label="状态" prop="status">
-               <el-radio-group v-model="form.status">
-                  <el-radio
-                     v-for="dict in sys_normal_disable"
-                     :key="dict.value"
-                     :value="dict.value"
-                  >{{ dict.label }}</el-radio>
-               </el-radio-group>
-            </el-form-item>
-            <el-form-item label="备注" prop="remark">
-               <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
-            </el-form-item>
-         </el-form>
-         <template #footer>
-            <div class="dialog-footer">
-               <el-button type="primary" @click="submitForm">确 定</el-button>
-               <el-button @click="cancel">取 消</el-button>
-            </div>
-         </template>
-      </el-dialog>
-   </div>
+    <!-- 添加或修改参数配置对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="dictRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="字典名称" prop="dictName">
+          <el-input v-model="form.dictName" placeholder="请输入字典名称" />
+        </el-form-item>
+        <el-form-item label="字典类型" prop="dictType">
+          <el-input v-model="form.dictType" placeholder="请输入字典类型" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio v-for="dict in sys_normal_disable" :key="dict.value" :value="dict.value">
+              {{ dict.label }}
+            </el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
 </template>
 
 <script setup name="Dict">
@@ -296,12 +238,12 @@ function submitForm() {
 /** 删除按钮操作 */
 function handleDelete(row) {
   const dictIds = row.dictId || ids.value
-  proxy.$modal.confirm('是否确认删除字典编号为"' + dictIds + '"的数据项?').then(function() {
+  proxy.$modal.confirm('是否确认删除字典编号为"' + dictIds + '"的数据项?').then(function () {
     return delType(dictIds)
   }).then(() => {
     getList()
     proxy.$modal.msgSuccess("删除成功")
-  }).catch(() => {})
+  }).catch(() => { })
 }
 
 /** 导出按钮操作 */