瀏覽代碼

添加考级

lex 2 年之前
父節點
當前提交
be46dcd7d4

+ 7 - 0
src/constant/index.js

@@ -544,3 +544,10 @@ export const serviceProvider = {
   rongCloud: "融云",
   tencentCloud: "腾讯云"
 };
+
+// 考级状态
+export const levelStatus = {
+  NOT_START: "未开始",
+  START: "进行中",
+  END: "已结束"
+};

+ 4 - 1
src/utils/searchArray.js

@@ -27,7 +27,8 @@ import {
   catRole,
   catType,
   quiteReason,
-  payUserType
+  payUserType,
+  levelStatus
 } from "../constant";
 // 课程类型
 let tenantConfig = sessionStorage.getItem("tenantConfig");
@@ -878,6 +879,8 @@ export const catRoleList = getValueForKey(catRole);
 export const catTypeList = getValueForKey(catType);
 export const quiteReasonList = getValueForKey(quiteReason);
 export const payUserTypeList = getValueForKey(payUserType);
+export const levelStatusList = getValueForKey(levelStatus);
+
 //downListType
 function getValueForKey(obj) {
   let arr = [];

+ 6 - 3
src/utils/vueFilter.js

@@ -503,9 +503,8 @@ Vue.filter("editionFilter", value => {
     "android-teacher": "安卓-老师端",
     "android-student": "安卓-学生端",
     "android-education": "安卓-管理端",
-    "ios-electron":"苹果-桌面端",
-    "win-electron":"win-桌面端",
-
+    "ios-electron": "苹果-桌面端",
+    "win-electron": "win-桌面端"
   };
   return template[value];
 });
@@ -882,6 +881,10 @@ Vue.filter("osFilter", value => {
 Vue.filter("serviceProvider", value => {
   return constant.serviceProvider[value];
 });
+// 考级状态
+Vue.filter("levelStatus", value => {
+  return constant.levelStatus[value];
+});
 
 Vue.filter("usageStatus", value => {
   let obj = {

+ 94 - 42
src/views/levelManager/components/level-notice.vue

@@ -10,11 +10,11 @@
       :model="searchForm"
       saveKey="level-student-rule"
     >
-      <el-form-item prop="name">
+      <el-form-item prop="keyword">
         <el-input
-          v-model.trim="searchForm.name"
+          v-model.trim="searchForm.keyword"
           clearable
-          placeholder="请输入风采标题"
+          placeholder="简章标题"
           @keyup.enter.native="
             e => {
               e.target.blur();
@@ -24,31 +24,16 @@
           "
         ></el-input>
       </el-form-item>
-      <el-form-item prop="city">
-        <el-select
-          v-model.trim="searchForm.organId"
-          filterable
-          clearable
-          placeholder="请选择分部"
-        >
-          <el-option
-            v-for="(item, index) in selects.branchs"
-            :key="index"
-            :label="item.name"
-            :value="item.id"
-          ></el-option>
-        </el-select>
-      </el-form-item>
       <el-form-item>
         <el-select
           class="multiple"
-          v-model.trim="searchForm.degreeType"
+          v-model.trim="searchForm.status"
           filterable
           clearable
           placeholder="请选择状态"
         >
-          <el-option :value="4" label="停用"></el-option>
-          <el-option :value="3" label="启用"></el-option>
+          <el-option :value="true" label="启用"></el-option>
+          <el-option :value="false" label="停用"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item>
@@ -57,12 +42,12 @@
       </el-form-item>
     </save-form>
     <el-button
-      v-permission="'/teacherOperationAdd'"
+      v-permission="'degreeNews/save'"
       type="primary"
       @click="onOperation()"
       style="margin-bottom:20px"
     >
-      新增风采
+      新增帮助
     </el-button>
     <div class="tableWrap">
       <el-table
@@ -70,30 +55,38 @@
         :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
       >
         <el-table-column width="90px" prop="id" label="编号"> </el-table-column>
-        <el-table-column prop="name" label="标题">
+        <el-table-column prop="name" label="简章标题" align="center">
           <template slot-scope="scope">
-            <overflow-text :text="scope.row.name"></overflow-text>
+            <overflow-text :text="scope.row.title"></overflow-text>
           </template>
         </el-table-column>
-        <el-table-column prop="name" label="分部">
-          <template slot-scope="scope">
-            <copy-text>{{ scope.row.name }}</copy-text>
-          </template>
+        <el-table-column prop="operatorName" label="发布人" align="center">
         </el-table-column>
-        <el-table-column prop="name" label="状态">
+        <el-table-column prop="createTime" label="发布时间" align="center">
+        </el-table-column>
+        <el-table-column prop="name" label="状态" align="center">
           <template slot-scope="scope">
-            <copy-text>{{ scope.row.name }}</copy-text>
+            {{ scope.row.status == 1 ? "启用" : "停用" }}
           </template>
         </el-table-column>
-        <el-table-column label="操作" fixed="right">
+        <el-table-column label="操作" align="center">
           <template slot-scope="scope">
-            <el-button type="text" @click="onOperation('update', scope.row)"
-              >停用</el-button
+            <el-button
+              type="text"
+              v-if="$helpers.permission('degreeNews/enable')"
+              @click="onChangeStatus(scope.row)"
+              >{{ scope.row.status == 1 ? "停用" : "启用" }}</el-button
             >
-            <el-button type="text" @click="onOperation('update', scope.row)"
+            <el-button
+              type="text"
+              v-if="$helpers.permission('degreeNews/update')"
+              @click="onOperation('update', scope.row)"
               >修改</el-button
             >
-            <el-button type="text" @click="onOperation('update', scope.row)"
+            <el-button
+              type="text"
+              v-if="$helpers.permission('degreeNews/remove')"
+              @click="onRemove(scope.row)"
               >删除</el-button
             >
           </template>
@@ -116,12 +109,20 @@
 <script>
 import pagination from "@/components/Pagination/index";
 import informationOperation from "../model/information-operation";
+import {
+  degreeNewsPage,
+  degreeNewsEnable,
+  degreeNewsRemove
+} from "../levelManageApi";
 export default {
   components: { pagination, informationOperation },
   name: "student-rule",
   data() {
     return {
-      searchForm: {},
+      searchForm: {
+        keyword: "",
+        status: null
+      },
       tableList: [],
       pageInfo: {
         // 分页规则
@@ -133,18 +134,69 @@ export default {
     };
   },
   mounted() {
-    this.$store.dispatch("setBranchs");
+    this.getList();
   },
   methods: {
     onSearch() {
       this.pageInfo.page = 1;
-      // this.getList();
+      this.getList();
     },
     onReSet() {
       this.$refs.searchForm.resetFields();
-      // this.search();
+      this.search();
+    },
+    async getList() {
+      try {
+        let { orderDate, ...rest } = this.searchForm;
+        let params = {
+          ...rest,
+          type: "GRADING_NOTICE",
+          page: this.pageInfo.page,
+          rows: this.pageInfo.limit
+        };
+        const { data } = await degreeNewsPage(params);
+        this.tableList = data.rows || [];
+        this.pageInfo.total = data.total;
+      } catch {}
+    },
+    async onChangeStatus(row) {
+      let tempStr = row.status == 1 ? "停用" : "启用";
+
+      this.$confirm(`确定是否${tempStr}?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(async () => {
+        try {
+          await degreeNewsEnable({ newsId: row.id }).then(res => {
+            if (res.code == 200) {
+              this.$message.success(tempStr + "成功");
+              this.getList();
+            } else {
+              this.$message.error(res.msg);
+            }
+          });
+        } catch {}
+      });
+    },
+    async onRemove(row) {
+      this.$confirm(`确定是否删除?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(async () => {
+        try {
+          await degreeNewsRemove({ id: row.id }).then(res => {
+            if (res.code == 200) {
+              this.$message.success("删除成功");
+              this.getList();
+            } else {
+              this.$message.error(res.msg);
+            }
+          });
+        } catch {}
+      });
     },
-    async getList() {},
     onOperation(type, row) {
       const dialogType = type || "create";
       /**
@@ -152,7 +204,7 @@ export default {
        * @param 类型
        * @params 值
        */
-      this.$refs.informationOperation.openDialog(dialogType, "student", row);
+      this.$refs.informationOperation.openDialog(dialogType, "notice", row);
     }
   }
 };

+ 98 - 42
src/views/levelManager/components/level-regulations.vue

@@ -10,11 +10,11 @@
       :model="searchForm"
       saveKey="level-student-rule"
     >
-      <el-form-item prop="name">
+      <el-form-item prop="keyword">
         <el-input
-          v-model.trim="searchForm.name"
+          v-model.trim="searchForm.keyword"
           clearable
-          placeholder="请输入风采标题"
+          placeholder="简章标题"
           @keyup.enter.native="
             e => {
               e.target.blur();
@@ -24,31 +24,16 @@
           "
         ></el-input>
       </el-form-item>
-      <el-form-item prop="city">
-        <el-select
-          v-model.trim="searchForm.organId"
-          filterable
-          clearable
-          placeholder="请选择分部"
-        >
-          <el-option
-            v-for="(item, index) in selects.branchs"
-            :key="index"
-            :label="item.name"
-            :value="item.id"
-          ></el-option>
-        </el-select>
-      </el-form-item>
       <el-form-item>
         <el-select
           class="multiple"
-          v-model.trim="searchForm.degreeType"
+          v-model.trim="searchForm.status"
           filterable
           clearable
           placeholder="请选择状态"
         >
-          <el-option :value="4" label="停用"></el-option>
-          <el-option :value="3" label="启用"></el-option>
+          <el-option :value="true" label="启用"></el-option>
+          <el-option :value="false" label="停用"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item>
@@ -57,12 +42,12 @@
       </el-form-item>
     </save-form>
     <el-button
-      v-permission="'/teacherOperationAdd'"
+      v-permission="'degreeNews/save'"
       type="primary"
       @click="onOperation()"
       style="margin-bottom:20px"
     >
-      新增风采
+      新增简章
     </el-button>
     <div class="tableWrap">
       <el-table
@@ -70,30 +55,38 @@
         :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
       >
         <el-table-column width="90px" prop="id" label="编号"> </el-table-column>
-        <el-table-column prop="name" label="标题">
+        <el-table-column prop="name" label="简章标题" align="center">
           <template slot-scope="scope">
-            <overflow-text :text="scope.row.name"></overflow-text>
+            <overflow-text :text="scope.row.title"></overflow-text>
           </template>
         </el-table-column>
-        <el-table-column prop="name" label="分部">
-          <template slot-scope="scope">
-            <copy-text>{{ scope.row.name }}</copy-text>
-          </template>
+        <el-table-column prop="operatorName" label="发布人" align="center">
         </el-table-column>
-        <el-table-column prop="name" label="状态">
+        <el-table-column prop="createTime" label="发布时间" align="center">
+        </el-table-column>
+        <el-table-column prop="name" label="状态" align="center">
           <template slot-scope="scope">
-            <copy-text>{{ scope.row.name }}</copy-text>
+            {{ scope.row.status == 1 ? "启用" : "停用" }}
           </template>
         </el-table-column>
-        <el-table-column label="操作" fixed="right">
+        <el-table-column label="操作" align="center">
           <template slot-scope="scope">
-            <el-button type="text" @click="onOperation('update', scope.row)"
-              >停用</el-button
+            <el-button
+              type="text"
+              v-if="$helpers.permission('degreeNews/enable')"
+              @click="onChangeStatus(scope.row)"
+              >{{ scope.row.status == 1 ? "停用" : "启用" }}</el-button
             >
-            <el-button type="text" @click="onOperation('update', scope.row)"
+            <el-button
+              type="text"
+              v-if="$helpers.permission('degreeNews/update')"
+              @click="onOperation('update', scope.row)"
               >修改</el-button
             >
-            <el-button type="text" @click="onOperation('update', scope.row)"
+            <el-button
+              type="text"
+              v-if="$helpers.permission('degreeNews/remove')"
+              @click="onRemove(scope.row)"
               >删除</el-button
             >
           </template>
@@ -116,12 +109,20 @@
 <script>
 import pagination from "@/components/Pagination/index";
 import informationOperation from "../model/information-operation";
+import {
+  degreeNewsPage,
+  degreeNewsEnable,
+  degreeNewsRemove
+} from "../levelManageApi";
 export default {
   components: { pagination, informationOperation },
   name: "student-rule",
   data() {
     return {
-      searchForm: {},
+      searchForm: {
+        keyword: "",
+        status: null
+      },
       tableList: [],
       pageInfo: {
         // 分页规则
@@ -133,18 +134,69 @@ export default {
     };
   },
   mounted() {
-    this.$store.dispatch("setBranchs");
+    this.getList();
   },
   methods: {
     onSearch() {
       this.pageInfo.page = 1;
-      // this.getList();
+      this.getList();
     },
     onReSet() {
       this.$refs.searchForm.resetFields();
-      // this.search();
+      this.search();
+    },
+    async getList() {
+      try {
+        let { orderDate, ...rest } = this.searchForm;
+        let params = {
+          ...rest,
+          type: "GRADE_EXAMINATION_BRIEF",
+          page: this.pageInfo.page,
+          rows: this.pageInfo.limit
+        };
+        const { data } = await degreeNewsPage(params);
+        this.tableList = data.rows || [];
+        this.pageInfo.total = data.total;
+      } catch {}
+    },
+    async onChangeStatus(row) {
+      let tempStr = row.status == 1 ? "停用" : "启用";
+
+      this.$confirm(`确定是否${tempStr}?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(async () => {
+        try {
+          await degreeNewsEnable({ newsId: row.id }).then(res => {
+            if (res.code == 200) {
+              this.$message.success(tempStr + "成功");
+              this.getList();
+            } else {
+              this.$message.error(res.msg);
+            }
+          });
+        } catch {}
+      });
+    },
+    async onRemove(row) {
+      this.$confirm(`确定是否删除?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(async () => {
+        try {
+          await degreeNewsRemove({ id: row.id }).then(res => {
+            if (res.code == 200) {
+              this.$message.success("删除成功");
+              this.getList();
+            } else {
+              this.$message.error(res.msg);
+            }
+          });
+        } catch {}
+      });
     },
-    async getList() {},
     onOperation(type, row) {
       const dialogType = type || "create";
       /**
@@ -152,7 +204,11 @@ export default {
        * @param 类型
        * @params 值
        */
-      this.$refs.informationOperation.openDialog(dialogType, "student", row);
+      this.$refs.informationOperation.openDialog(
+        dialogType,
+        "regulations",
+        row
+      );
     }
   }
 };

+ 94 - 24
src/views/levelManager/components/student-rule.vue

@@ -10,11 +10,11 @@
       :model="searchForm"
       saveKey="level-student-rule"
     >
-      <el-form-item prop="name">
+      <el-form-item prop="keyword">
         <el-input
-          v-model.trim="searchForm.name"
+          v-model.trim="searchForm.keyword"
           clearable
-          placeholder="请输入风采标题"
+          placeholder="风采标题"
           @keyup.enter.native="
             e => {
               e.target.blur();
@@ -24,7 +24,7 @@
           "
         ></el-input>
       </el-form-item>
-      <el-form-item prop="city">
+      <el-form-item prop="organId">
         <el-select
           v-model.trim="searchForm.organId"
           filterable
@@ -42,13 +42,13 @@
       <el-form-item>
         <el-select
           class="multiple"
-          v-model.trim="searchForm.degreeType"
+          v-model.trim="searchForm.status"
           filterable
           clearable
           placeholder="请选择状态"
         >
-          <el-option :value="4" label="停用"></el-option>
-          <el-option :value="3" label="启用"></el-option>
+          <el-option :value="true" label="启用"></el-option>
+          <el-option :value="false" label="停用"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item>
@@ -57,7 +57,7 @@
       </el-form-item>
     </save-form>
     <el-button
-      v-permission="'/teacherOperationAdd'"
+      v-permission="'degreeNews/save'"
       type="primary"
       @click="onOperation()"
       style="margin-bottom:20px"
@@ -70,30 +70,39 @@
         :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
       >
         <el-table-column width="90px" prop="id" label="编号"> </el-table-column>
-        <el-table-column prop="name" label="标题">
+        <el-table-column prop="name" label="标题" align="center">
           <template slot-scope="scope">
-            <overflow-text :text="scope.row.name"></overflow-text>
+            <overflow-text :text="scope.row.title"></overflow-text>
           </template>
         </el-table-column>
-        <el-table-column prop="name" label="分部">
+        <el-table-column prop="name" label="分部" align="center">
           <template slot-scope="scope">
-            <copy-text>{{ scope.row.name }}</copy-text>
+            <overflow-text :text="scope.row.organNames"></overflow-text>
           </template>
         </el-table-column>
-        <el-table-column prop="name" label="状态">
+        <el-table-column prop="name" label="状态" align="center">
           <template slot-scope="scope">
-            <copy-text>{{ scope.row.name }}</copy-text>
+            {{ scope.row.status == 1 ? "启用" : "停用" }}
           </template>
         </el-table-column>
-        <el-table-column label="操作" fixed="right">
+        <el-table-column label="操作" align="center">
           <template slot-scope="scope">
-            <el-button type="text" @click="onOperation('update', scope.row)"
-              >停用</el-button
+            <el-button
+              type="text"
+              v-if="$helpers.permission('degreeNews/enable')"
+              @click="onChangeStatus(scope.row)"
+              >{{ scope.row.status == 1 ? "停用" : "启用" }}</el-button
             >
-            <el-button type="text" @click="onOperation('update', scope.row)"
+            <el-button
+              type="text"
+              v-if="$helpers.permission('degreeNews/update')"
+              @click="onOperation('update', scope.row)"
               >修改</el-button
             >
-            <el-button type="text" @click="onOperation('update', scope.row)"
+            <el-button
+              type="text"
+              v-if="$helpers.permission('degreeNews/remove')"
+              @click="onRemove(scope.row)"
               >删除</el-button
             >
           </template>
@@ -116,12 +125,21 @@
 <script>
 import pagination from "@/components/Pagination/index";
 import informationOperation from "../model/information-operation";
+import {
+  degreeNewsPage,
+  degreeNewsEnable,
+  degreeNewsRemove
+} from "../levelManageApi";
 export default {
   components: { pagination, informationOperation },
   name: "student-rule",
   data() {
     return {
-      searchForm: {},
+      searchForm: {
+        keyword: "",
+        organId: null,
+        status: null
+      },
       tableList: [],
       pageInfo: {
         // 分页规则
@@ -134,17 +152,69 @@ export default {
   },
   mounted() {
     this.$store.dispatch("setBranchs");
+    this.getList();
   },
   methods: {
     onSearch() {
       this.pageInfo.page = 1;
-      // this.getList();
+      this.getList();
     },
     onReSet() {
       this.$refs.searchForm.resetFields();
-      // this.search();
+      this.search();
+    },
+    async getList() {
+      try {
+        let { orderDate, ...rest } = this.searchForm;
+        let params = {
+          ...rest,
+          type: "EXAMINEE_STYLE",
+          page: this.pageInfo.page,
+          rows: this.pageInfo.limit
+        };
+        const { data } = await degreeNewsPage(params);
+        this.tableList = data.rows || [];
+        this.pageInfo.total = data.total;
+      } catch {}
+    },
+    async onChangeStatus(row) {
+      let tempStr = row.status == 1 ? "停用" : "启用";
+
+      this.$confirm(`确定是否${tempStr}?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(async () => {
+        try {
+          await degreeNewsEnable({ newsId: row.id }).then(res => {
+            if (res.code == 200) {
+              this.$message.success(tempStr + "成功");
+              this.getList();
+            } else {
+              this.$message.error(res.msg);
+            }
+          });
+        } catch {}
+      });
+    },
+    async onRemove(row) {
+      this.$confirm(`确定是否删除?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(async () => {
+        try {
+          await degreeNewsRemove({ id: row.id }).then(res => {
+            if (res.code == 200) {
+              this.$message.success("删除成功");
+              this.getList();
+            } else {
+              this.$message.error(res.msg);
+            }
+          });
+        } catch {}
+      });
     },
-    async getList() {},
     onOperation(type, row) {
       const dialogType = type || "create";
       /**
@@ -152,7 +222,7 @@ export default {
        * @param 类型
        * @params 值
        */
-      this.$refs.informationOperation.openDialog(dialogType, "student", row);
+      this.$refs.informationOperation.openDialog(dialogType, "rule", row);
     }
   }
 };

+ 52 - 41
src/views/levelManager/gradeManager.vue

@@ -14,9 +14,9 @@
         @reset="onReSet"
         :model="searchForm"
       >
-        <el-form-item prop="name">
+        <el-form-item prop="keyword">
           <el-input
-            v-model.trim="searchForm.name"
+            v-model.trim="searchForm.keyword"
             clearable
             placeholder="请输入名称/编号"
             @keyup.enter.native="
@@ -50,9 +50,12 @@
             clearable
             placeholder="请选择状态"
           >
-            <el-option :value="1" label="未缴费"></el-option>
-            <el-option :value="2" label="已缴费"></el-option>
-            <el-option :value="3" label="已退费"></el-option>
+            <el-option
+              v-for="item in levelStatusList"
+              :key="item.value"
+              :value="item.value"
+              :label="item.label"
+            ></el-option>
           </el-select>
         </el-form-item>
         <el-form-item>
@@ -80,34 +83,40 @@
               <copy-text>{{ scope.row.id }}</copy-text>
             </template>
           </el-table-column>
-          <el-table-column prop="name" label="考级名称">
+          <el-table-column prop="name" label="考级名称" align="center">
             <template slot-scope="scope">
-              <copy-text>{{ scope.row.name }}</copy-text>
-              <br />
-              (<copy-text>{{ scope.row.userId }}</copy-text
-              >)
+              <overflow-text :text="scope.row.name"></overflow-text>
             </template>
           </el-table-column>
-          <el-table-column align="center" prop="orderNo" label="考级时间">
+          <el-table-column
+            align="center"
+            prop="orderNo"
+            label="考级时间"
+            :min-width="100"
+          >
             <template slot-scope="scope">
-              15:52:13-15:52:22
+              {{ scope.row.startTime | dayjsFormat }}-{{
+                scope.row.endTime | dayjsFormat
+              }}
             </template>
           </el-table-column>
           <el-table-column align="center" prop="transNo" label="人数">
             <template slot-scope="scope">
-              <p>报名人数:0人</p>
-              <p>报名人次:0人</p>
-              <p>购课学员:0人</p>
+              <p>报名人数:{{ scope.row.registerNum }}人</p>
+              <p>报名人次:{{ scope.row.registerTotal }}人</p>
+              <p>购课学员:{{ scope.row.purchaseCourse }}人</p>
             </template>
           </el-table-column>
           <el-table-column align="center" prop="city" label="适用分部">
             <template slot-scope="scope">
-              <copy-text>{{ scope.row.city }}</copy-text>
+              <overflow-text
+                :text="formatOrangNames(scope.row.organNames)"
+              ></overflow-text>
             </template>
           </el-table-column>
           <el-table-column align="center" prop="school" label="状态">
             <template slot-scope="scope">
-              <copy-text>{{ scope.row.school }}</copy-text>
+              <copy-text>{{ scope.row.status | levelStatus }}</copy-text>
             </template>
           </el-table-column>
           <el-table-column align="center" label="操作" fixed="right">
@@ -150,23 +159,23 @@
 <script>
 import pagination from "@/components/Pagination/index";
 import gradeOperation from "./model/grade-operation";
-import { degreeQueryPage } from "./levelManageApi";
+import { degreePage } from "./levelManageApi";
 import { getTimes } from "@/utils";
+import { levelStatusList } from "@/utils/searchArray";
+import dayjs from "dayjs";
 export default {
   components: { pagination, gradeOperation },
   name: "helpCategory",
   data() {
     return {
+      levelStatusList,
       searchForm: {
-        name: null,
-        status: 2,
+        keyword: null,
+        status: null,
         startTime: null,
-        organId: null,
         endTime: null,
         orderDate: []
       },
-      totalNumber: 0,
-      totalAmount: 0,
       tableList: [],
       pageInfo: {
         // 分页规则
@@ -183,6 +192,9 @@ export default {
     this.getList();
   },
   methods: {
+    formatOrangNames(val) {
+      return val ? val.join(",") : "";
+    },
     onSearch() {
       this.pageInfo.page = 1;
       this.getList();
@@ -191,27 +203,26 @@ export default {
       // 重置搜索
       this.orderDate = null;
       this.$refs.searchForm.resetFields();
-      //  this.$set(this.searchForm,'status','pay')
       this.searchForm.status = 2;
       this.onSearch();
     },
-    getList() {
-      let { orderDate, ...rest } = this.searchForm;
-      let params = {
-        ...rest,
-        page: this.pageInfo.page,
-        rows: this.pageInfo.limit,
-        ...getTimes(orderDate, ["startTime", "endTime"])
-      };
-      degreeQueryPage(params).then(res => {
-        let result = res.data;
-        if (res.code == 200) {
-          this.totalNumber = result.applyNum;
-          this.totalAmount = result.totalAmount;
-          this.tableList = result.rows;
-          this.pageInfo.total = result.total;
-        }
-      });
+    async getList() {
+      try {
+        let { orderDate, ...rest } = this.searchForm;
+        let params = {
+          ...rest,
+          page: this.pageInfo.page,
+          rows: this.pageInfo.limit,
+          ...getTimes(orderDate, ["startTime", "endTime"])
+        };
+        await degreePage(params).then(res => {
+          let result = res.data;
+          if (res.code == 200) {
+            this.tableList = result.rows;
+            this.pageInfo.total = result.total;
+          }
+        });
+      } catch {}
     },
     onGradeOperation(type, row) {
       const dialogType = type || "create";

+ 174 - 9
src/views/levelManager/levelManageApi.js

@@ -1,21 +1,186 @@
-import request from '@/utils/request'
-import qs from 'qs'
-let api = '/api-web'
+import request2 from "@/utils/request2";
+import request from "@/utils/request";
+import qs from "qs";
+let api = "/api-web";
 
 // 考级列表
 export function degreeQueryPage(data) {
   return request({
-    url: api + '/degree/queryPage',
-    method: 'get',
+    url: api + "/degree/queryPage",
+    method: "get",
     params: data
-  })
+  });
 }
 
 // 考级列表
 export function degreeRefund(data) {
   return request({
-    url: api + '/degree/refund',
-    method: 'post',
+    url: api + "/degree/refund",
+    method: "post",
     data: qs.stringify(data)
-  })
+  });
 }
+
+export const degreeNewsPage = data =>
+  request2({
+    url: "/api-web/degreeNews/page",
+    data,
+    method: "post"
+  });
+
+// 停用 | 启动
+export const degreeNewsEnable = data =>
+  request2({
+    url: "/api-web/degreeNews/enable",
+    data,
+    requestType: "form",
+    method: "post"
+  });
+
+// 删除
+export const degreeNewsRemove = data =>
+  request2({
+    url: "/api-web/degreeNews/remove",
+    data,
+    requestType: "form",
+    method: "post"
+  });
+
+// 新增
+export const degreeNewsSave = data =>
+  request2({
+    url: "/api-web/degreeNews/save",
+    data,
+    method: "post"
+  });
+
+// 修改
+export const degreeNewsUpdate = data =>
+  request2({
+    url: "/api-web/degreeNews/update",
+    data,
+    method: "post"
+  });
+
+// 考级等级费用分布查询
+export const degreeLevelFeePage = data =>
+  request2({
+    url: "/api-web/degreeLevelFee/page",
+    data,
+    method: "post"
+  });
+
+export const degreeLevelFeeSave = data =>
+  request2({
+    url: "/api-web/degreeLevelFee/save",
+    data,
+    method: "post"
+  });
+export const degreeLevelFeeUpdate = data =>
+  request2({
+    url: "/api-web/degreeLevelFee/update",
+    data,
+    method: "post"
+  });
+export const degreeLevelFeeRemove = data =>
+  request2({
+    url: "/api-web/degreeLevelFee/remove",
+    data,
+    requestType: "form",
+    method: "post"
+  });
+
+export const degreeLevelCn = {
+  1: "一级",
+  2: "二级",
+  3: "三级",
+  4: "四级",
+  5: "五级",
+  6: "六级",
+  7: "七级",
+  8: "八级",
+  9: "九级",
+  10: "十级"
+};
+export const degreeLevel = [
+  {
+    value: 1,
+    text: "一级"
+  },
+  {
+    value: 2,
+    text: "二级"
+  },
+  {
+    value: 3,
+    text: "三级"
+  },
+  {
+    value: 4,
+    text: "四级"
+  },
+  {
+    value: 5,
+    text: "五级"
+  },
+  {
+    value: 6,
+    text: "六级"
+  },
+  {
+    value: 7,
+    text: "七级"
+  },
+  {
+    value: 8,
+    text: "八级"
+  },
+  {
+    value: 9,
+    text: "九级"
+  },
+  {
+    value: 10,
+    text: "十级"
+  }
+];
+export const degreeTheory = [
+  {
+    value: 1,
+    text: "一级"
+  },
+  {
+    value: 2,
+    text: "二级"
+  },
+  {
+    value: 3,
+    text: "三级"
+  },
+  {
+    value: 4,
+    text: "四级"
+  }
+];
+
+// 考级信息列表
+export const degreePage = data =>
+  request2({
+    url: "/api-web/degree/page",
+    data,
+    method: "post"
+  });
+// 考级信息保存
+export const degreeSave = data =>
+  request2({
+    url: "/api-web/degree/save",
+    data,
+    method: "post"
+  });
+// 考级信息修改
+export const degreeUpdate = data =>
+  request2({
+    url: "/api-web/degree/update",
+    data,
+    method: "post"
+  });

+ 66 - 64
src/views/levelManager/levelSetting.vue

@@ -19,7 +19,7 @@
             v-model.trim="searchForm.subjectId"
             filterable
             clearable
-            placeholder="请选择声部"
+            placeholder="声部"
           >
             <el-option
               v-for="item in selects.subjects"
@@ -35,25 +35,38 @@
             v-model.trim="searchForm.degreeType"
             filterable
             clearable
-            placeholder="请选择级别"
+            placeholder="报考项目"
           >
-            <el-option :value="4" label="2023级寒假考级"></el-option>
-            <el-option :value="3" label="2022级暑假考级"></el-option>
-            <el-option :value="2" label="2022级寒假考级"></el-option>
-            <el-option :value="1" label="2021级寒假考级"></el-option>
+            <el-option value="GRADE" label="专业考级"></el-option>
+            <el-option value="THEORY" label="乐理考级"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item>
           <el-select
             class="multiple"
-            v-model.trim="searchForm.status"
+            v-model.trim="searchForm.level"
             filterable
             clearable
-            placeholder="请选择上传证件"
+            placeholder="级别"
           >
-            <el-option :value="1" label="全部"></el-option>
-            <el-option :value="2" label="无需上传"></el-option>
-            <el-option :value="3" label="需上传"></el-option>
+            <el-option
+              v-for="item in degreeLevel"
+              :key="item.value"
+              :value="item.value"
+              :label="item.text"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.credentials"
+            filterable
+            clearable
+            placeholder="上传证件"
+          >
+            <el-option :value="0" label="无需上传"></el-option>
+            <el-option :value="1" label="需上传"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item>
@@ -63,7 +76,7 @@
       </save-form>
 
       <el-button
-        v-permission="'/teacherOperationAdd'"
+        v-permission="'degreeLevelFee/save'"
         type="primary"
         @click="onLevelSetting"
         style="margin-bottom:20px"
@@ -80,45 +93,34 @@
             prop="id"
             label="编号"
             min-width="60px"
+            align="center"
           ></el-table-column>
-          <el-table-column prop="name" label="声部" min-width="120px">
-            <template slot-scope="scope">
-              <copy-text>{{ scope.row.name }}</copy-text>
-            </template>
+          <el-table-column prop="subjectName" label="声部" align="center">
           </el-table-column>
-          <el-table-column align="center" prop="orderNo" label="级别">
+          <el-table-column align="center" prop="degreeType" label="级别">
             <template slot-scope="scope">
-              <copy-text>{{ scope.row.orderNo }}</copy-text>
+              {{
+                scope.row.degreeType === "GRADE" ? "专业考级" : "乐理考级"
+              }}/{{ degreeLevelCn[scope.row.level] }}
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            prop="transNo"
-            label="报名金额"
-            min-width="110px"
-          >
-            <template slot-scope="scope">
-              <el-tooltip placement="top-start">
-                <div slot="content">{{ scope.row.transNo }}</div>
-              </el-tooltip>
-              <copy-text>{{ scope.row.transNo }}</copy-text>
-            </template>
+          <el-table-column align="center" prop="fee" label="报名金额">
           </el-table-column>
-          <el-table-column align="center" prop="city" label="上传证书">
+          <el-table-column align="center" prop="credentials" label="上传证书">
             <template slot-scope="scope">
-              <copy-text>{{ scope.row.city }}</copy-text>
+              {{ !scope.row.credentials ? "无需上传" : "需上传" }}
             </template>
           </el-table-column>
           <el-table-column align="center" label="操作" fixed="right">
             <template slot-scope="scope">
               <el-button
-                v-if="$helpers.permission('degree/refund')"
+                v-if="$helpers.permission('degreeLevelFee/update')"
                 type="text"
                 @click="onLevelSetting('update', scope.row)"
                 >修改</el-button
               >
               <el-button
-                v-if="$helpers.permission('degree/refund')"
+                v-if="$helpers.permission('degreeLevelFee/remove')"
                 @click="onDelete(scope.row)"
                 type="text"
                 >删除</el-button
@@ -145,16 +147,24 @@
 import levelSettingAdd from "./model/levelSettingAdd";
 import levelSettingUpdate from "./model/levelSettingUpdate";
 import pagination from "@/components/Pagination/index";
-import { getTimes } from "@/utils";
+import {
+  degreeLevelFeePage,
+  degreeLevelFeeRemove,
+  degreeLevelCn,
+  degreeLevel
+} from "./levelManageApi";
 export default {
   components: { pagination, levelSettingAdd, levelSettingUpdate },
   name: "levelSetting",
   data() {
     return {
+      degreeLevelCn,
+      degreeLevel,
       searchForm: {
         subjectId: null,
         degreeType: null,
-        status: null
+        level: null,
+        credentials: null
       },
       tableList: [],
       pageInfo: {
@@ -178,30 +188,22 @@ export default {
     },
     onReSet() {
       // 重置搜索
-
-      this.orderDate = null;
       this.$refs.searchForm.resetFields();
       //  this.$set(this.searchForm,'status','pay')
       this.searchForm.status = 2;
       this.onSearch();
     },
-    getList() {
-      let { orderDate, ...rest } = this.searchForm;
-      let params = {
-        ...rest,
-        page: this.pageInfo.page,
-        rows: this.pageInfo.limit,
-        ...getTimes(orderDate, ["startTime", "endTime"])
-      };
-      // degreeQueryPage(params).then(res => {
-      //   let result = res.data;
-      //   if (res.code == 200) {
-      //     this.totalNumber = result.applyNum;
-      //     this.totalAmount = result.totalAmount;
-      //     this.tableList = result.rows;
-      //     this.pageInfo.total = result.total;
-      //   }
-      // });
+    async getList() {
+      try {
+        let params = {
+          ...this.searchForm,
+          page: this.pageInfo.page,
+          rows: this.pageInfo.limit
+        };
+        const { data } = await degreeLevelFeePage(params);
+        this.tableList = data.rows || [];
+        this.pageInfo.total = data.total;
+      } catch {}
     },
     onLevelSetting(type, row) {
       if (type === "update") {
@@ -216,15 +218,15 @@ export default {
         cancelButtonText: "取消",
         type: "warning"
       }).then(async () => {
-        // try {
-        //   await degreeRefund({
-        //     degreeRegistrationId: item.id
-        //   });
-        //   this.$message.success("退费成功");
-        //   this.getList();
-        // } catch {
-        //   //
-        // }
+        try {
+          await degreeLevelFeeRemove({
+            id: item.id
+          });
+          this.$message.success("删除成功");
+          this.getList();
+        } catch {
+          //
+        }
       });
     }
   }

+ 70 - 23
src/views/levelManager/model/grade-operation.vue

@@ -17,22 +17,23 @@
       <el-form-item
         label="考级标题"
         :rules="[{ required: true, message: '请输入考级标题' }]"
-        prop="title"
+        prop="name"
       >
         <el-input
           type="text"
           clearable
-          v-model="forms.title"
+          maxlength="20"
+          v-model="forms.name"
           placeholder="请输入考级标题"
         />
       </el-form-item>
       <el-form-item
         label="适用分部"
         :rules="[{ required: true, message: '请选择适用分部' }]"
-        prop="level"
+        prop="organIds"
       >
         <select-all
-          v-model.trim="forms.organId"
+          v-model.trim="forms.organIds"
           style="width: 100%"
           class="organSelect"
           filterable
@@ -48,23 +49,37 @@
           ></el-option>
         </select-all>
       </el-form-item>
-      <el-form-item label="考级日期" prop="orderDate">
+      <el-form-item
+        label="考级开始日期"
+        prop="startTime"
+        :rules="[{ required: true, message: '请选择考级开始日期' }]"
+      >
         <el-date-picker
-          v-model.trim="forms.orderDate"
-          type="daterange"
+          v-model.trim="forms.startTime"
+          type="date"
           value-format="yyyy-MM-dd"
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          style="width: 100%"
-          :picker-options="{
-            firstDayOfWeek: 1
-          }"
+          placeholder="请选择考级开始日期"
+        ></el-date-picker>
+      </el-form-item>
+      <el-form-item
+        label="考级结束日期"
+        prop="endTime"
+        :rules="[{ required: true, message: '请选择考级结束日期' }]"
+      >
+        <el-date-picker
+          v-model.trim="forms.endTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择考级结束日期"
         ></el-date-picker>
       </el-form-item>
-      <el-form-item label="登录日期" prop="orderDate">
+      <el-form-item
+        label="登录日期"
+        prop="registrationTime"
+        :rules="[{ required: true, message: '请选择登录日期' }]"
+      >
         <el-date-picker
-          v-model.trim="forms.registerDate"
+          v-model.trim="forms.registrationTime"
           type="date"
           value-format="yyyy-MM-dd"
           placeholder="请选择登记日期"
@@ -78,17 +93,21 @@
   </el-dialog>
 </template>
 <script>
+import { getTimes } from "@/utils";
+import { degreeSave, degreeUpdate } from "../levelManageApi";
 export default {
   name: "grade-operation",
   data() {
     return {
       dialogTitle: "",
+      dialogType: "create",
       operationVisible: false,
       forms: {
-        title: null,
-        organId: [],
-        orderDate: null,
-        registerDate: null
+        name: null,
+        organIds: [],
+        startTime: null,
+        endTime: null,
+        registrationTime: null
       }
     };
   },
@@ -102,13 +121,41 @@ export default {
     },
     onSubmit() {
       this.$refs.elForm.validate(async res => {
-        console.log(res, "res");
-        if (res) {
-        }
+        console.log(res, this.forms, "res");
+        if (!res) return;
+
+        const forms = this.forms;
+        const params = {
+          name: forms.name,
+          organIds: forms.organIds ? forms.organIds.join(",") : ""
+        };
+
+        try {
+          if (this.dialogType === "create") {
+            await degreeSave(params);
+            this.$message.success("新增成功");
+          } else {
+            await degreeUpdate(params);
+            this.$message.success("修改成功");
+          }
+          this.operationVisible = false;
+          this.$emit("getList");
+        } catch {}
       });
     },
     openDialog(type, row) {
       this.dialogTitle = type === "update" ? "修改考级" : "新增考级";
+      this.dialogType = type;
+      if (type === "update") {
+        this.forms = {
+          id: row.id,
+          name: row.name,
+          organIds: row.organIds ? row.organIds.split(",") : [],
+          startTime: row.startTime,
+          endTime: row.endTime,
+          registrationTime: row.registerationsTime
+        };
+      }
       this.operationVisible = true;
     }
   }

+ 111 - 9
src/views/levelManager/model/information-operation.vue

@@ -17,15 +17,53 @@
       <el-form-item
         label="标题"
         :rules="[{ required: true, message: '请输入标题' }]"
-        prop="money"
+        prop="title"
       >
         <el-input
           type="text"
-          v-model="forms.money"
+          maxlength="20"
+          v-model="forms.title"
           placeholder="请输入标题"
         ></el-input>
       </el-form-item>
       <el-form-item
+        v-if="forms.type === 'EXAMINEE_STYLE'"
+        label="可见分部"
+        :rules="[{ required: true, message: '请选择可见分部' }]"
+        prop="organIds"
+      >
+        <select-all
+          v-model.trim="forms.organIds"
+          style="width: 100%"
+          class="organSelect"
+          filterable
+          placeholder="请选择可见分部"
+          multiple
+          clearable
+        >
+          <el-option
+            v-for="(item, index) in selects.branchs"
+            :key="index"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </select-all>
+      </el-form-item>
+      <el-form-item
+        v-if="forms.type === 'EXAMINEE_STYLE'"
+        label="封面"
+        :rules="[{ required: true, message: '请输入封面' }]"
+        prop="coverImage"
+      >
+        <image-cropper
+          :options="cropperOptions"
+          :imgSize="2"
+          showSize
+          :imageUrl="forms.coverImage"
+          @crop-upload-success="cropSuccess"
+        />
+      </el-form-item>
+      <el-form-item
         label="内容"
         :rules="[{ required: true, message: '请输入内容' }]"
         prop="content"
@@ -48,22 +86,48 @@
   </el-dialog>
 </template>
 <script>
+import ImageCropper from "@/components/ImageCropper";
 import Editor from "@/components/Editor";
+import { degreeNewsSave, degreeNewsUpdate } from "../levelManageApi";
+// EXAMINEE_STYLE("EXAMINEE_STYLE", "考生风采"),
+// GRADE_EXAMINATION_BRIEF("GRADE_EXAMINATION_BRIEF", "考级简章"),
+// GRADING_NOTICE("GRADING_NOTICE", "考级须知");
 export default {
   name: "informationOperation",
-  components: { Editor },
+  components: { Editor, ImageCropper },
   data() {
     return {
       operationVisible: false,
+      dialogType: "create",
       dialogTitle: "",
+      cropperOptions: {
+        autoCrop: true, //是否默认生成截图框
+        autoCropWidth: 284, //默认生成截图框宽度
+        autoCropHeight: 160, //默认生成截图框高度
+        fixedBox: true, //是否固定截图框大小 不允许改变
+        previewsCircle: false, //预览图是否是圆形
+        full: true, // 是否输出原图比例的截图
+        title: "上传封面" //模态框上显示的标题
+      },
       row: {},
       forms: {
-        title: "level", // theory
-        content: ""
+        type: "EXAMINEE_STYLE",
+        title: "", // theory
+        content: "",
+        organIds: [],
+        coverImage: "",
+        status: false
       }
     };
   },
+  mounted() {
+    this.$store.dispatch("setBranchs");
+  },
   methods: {
+    //上传图片成功
+    cropSuccess(data) {
+      this.forms.coverImage = data.data.url;
+    },
     onClose() {
       this.$refs.elForm && this.$refs.elForm.resetFields();
       this.operationVisible = false;
@@ -74,14 +138,52 @@ export default {
     },
     onSubmit() {
       this.$refs.elForm.validate(async res => {
-        console.log(res, "res");
-        if (res) {
-        }
+        console.log(res, this.forms, "res");
+        if (!res) return;
+        try {
+          const { organIds, ...other } = this.forms;
+          if (this.dialogType === "create") {
+            await degreeNewsSave({
+              ...other,
+              organIds: organIds.join(",")
+            });
+            this.$message.success("新增成功");
+          } else {
+            await degreeNewsUpdate({
+              ...other,
+              organIds: organIds.join(",")
+            });
+            this.$message.success("修改成功");
+          }
+
+          this.$emit("getList");
+          this.operationVisible = false;
+        } catch {}
       });
     },
     openDialog(dialogType, type, row) {
-      if (type === "student") {
+      if (type === "rule") {
         this.dialogTitle = dialogType === "update" ? "修改风采" : "新增风采";
+        this.forms.type = "EXAMINEE_STYLE";
+        // EXAMINEE_STYLE("EXAMINEE_STYLE", "考生风采"),
+        // GRADE_EXAMINATION_BRIEF("GRADE_EXAMINATION_BRIEF", "考级简章"),
+        // GRADING_NOTICE("GRADING_NOTICE", "考级须知");
+      } else if (type === "regulations") {
+        this.dialogTitle = dialogType === "update" ? "修改简章" : "新增简章";
+        this.forms.type = "GRADE_EXAMINATION_BRIEF";
+      } else if (type === "notice") {
+        this.dialogTitle = dialogType === "update" ? "修改帮助" : "新增帮助";
+        this.forms.type = "GRADING_NOTICE";
+      }
+
+      this.dialogType = dialogType;
+      if (dialogType === "update") {
+        this.forms.title = row.title;
+        this.forms.content = row.content;
+        this.forms.coverImage = row.coverImage;
+        this.status = row.status;
+        this.forms.id = row.id;
+        this.organIds = row.organIds ? row.organIds.split(",") : [];
       }
       this.operationVisible = true;
     }

+ 60 - 26
src/views/levelManager/model/levelSettingAdd.vue

@@ -19,18 +19,18 @@
           <el-form-item
             label="考级类型"
             :rules="[{ required: true, message: '请选择考级类型' }]"
-            prop="type"
+            prop="degreeType"
             class="el-from-type"
           >
-            <el-radio-group v-model="forms.type" @input="onTypeChange">
-              <el-radio label="level">考级</el-radio>
-              <el-radio label="theory">乐理</el-radio>
+            <el-radio-group v-model="forms.degreeType" @input="onTypeChange">
+              <el-radio label="GRADE">考级</el-radio>
+              <el-radio label="THEORY">乐理</el-radio>
             </el-radio-group>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="10">
-        <el-col :span="5" v-if="forms.type === 'level'">
+        <el-col :span="5" v-if="forms.degreeType === 'GRADE'">
           <el-form-item
             label="声部"
             :rules="[{ required: true, message: '请选择声部' }]"
@@ -52,7 +52,7 @@
             </el-select>
           </el-form-item>
         </el-col>
-        <el-col :span="forms.type === 'level' ? 19 : 24">
+        <el-col :span="forms.degreeType === 'GRADE' ? 19 : 24">
           <el-row :gutter="10">
             <el-col
               :span="7"
@@ -90,34 +90,40 @@
                   filterable
                   placeholder="请选择级别"
                 >
+                  <el-option
+                    v-for="item in degreeLevel"
+                    :key="item.value"
+                    :value="item.value"
+                    :label="item.text"
+                  ></el-option>
                 </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="7">
               <el-form-item
                 :rules="[{ required: true, message: '请输入报考金额' }]"
-                :prop="'domains.' + index + '.money'"
+                :prop="'domains.' + index + '.fee'"
               >
                 <el-input
-                  type="number"
-                  @mousewheel.native.prevent
-                  v-model="item.money"
+                  @keyup.native="keyupEvent"
+                  v-model="item.fee"
+                  maxlength="8"
                   placeholder="请输入报考金额"
                 ></el-input> </el-form-item
             ></el-col>
             <el-col :span="7">
               <el-form-item
                 :rules="[{ required: true, message: '请选择是否上传证书' }]"
-                :prop="'domains.' + index + '.certificate'"
+                :prop="'domains.' + index + '.credentials'"
               >
                 <el-select
                   style="width: 100% !important;"
-                  v-model="item.certificate"
+                  v-model="item.credentials"
                   clearable
                   placeholder="请选择是否上传证书"
                 >
-                  <el-option :value="0" label="无需上传"></el-option>
-                  <el-option :value="1" label="需上传"></el-option>
+                  <el-option :value="false" label="无需上传"></el-option>
+                  <el-option :value="true" label="需上传"></el-option>
                 </el-select>
               </el-form-item>
             </el-col>
@@ -141,43 +147,57 @@
       </el-row>
     </el-form>
     <div slot="footer" class="dialog-footer">
-      <el-button @click="addVisible = false">取 消</el-button>
+      <el-button @click="onClose()">取 消</el-button>
       <el-button type="primary" @click="onSubmit">确 定</el-button>
     </div>
   </el-dialog>
 </template>
 <script>
+import {
+  degreeLevel,
+  degreeTheory,
+  degreeLevelFeeSave
+} from "../levelManageApi";
 export default {
   name: "levelSettingAdd",
   data() {
     return {
+      degreeLevel: [],
       addVisible: false,
       forms: {
-        type: "level", // theory
+        degreeType: "GRADE", // theory
         subjectId: null,
         domains: [
           {
             level: null,
-            money: null,
-            certificate: null
+            fee: null,
+            credentials: null
           }
         ]
       }
     };
   },
+  mounted() {
+    this.degreeLevel = degreeLevel;
+  },
   methods: {
     onClose() {
-      this.forms.type = "level";
+      this.forms.type = "GRADE";
       this.$refs.elForm && this.$refs.elForm.resetFields();
       this.addVisible = false;
     },
     onTypeChange(val) {
       // 当前考级类型变化时,重置表单验证状态
+      if (val === "THEORY") {
+        this.degreeLevel = degreeTheory;
+      } else if (val === "GRADE") {
+        this.degreeLevel = degreeLevel;
+      }
       this.forms.domains = [
         {
           level: null,
-          money: null,
-          certificate: null
+          fee: null,
+          credentials: null
         }
       ];
       this.forms.subjectId = null;
@@ -186,8 +206,8 @@ export default {
     onAdd() {
       this.forms.domains.push({
         level: null,
-        money: null,
-        certificate: null
+        fee: null,
+        credentials: null
       });
     },
     onRemove(item) {
@@ -198,9 +218,23 @@ export default {
     },
     onSubmit() {
       this.$refs.elForm.validate(async res => {
-        console.log(res, "res");
-        if (res) {
-        }
+        if (!res) return;
+
+        try {
+          const domains = this.forms.domains;
+          domains.forEach(item => {
+            item.degreeType = this.forms.degreeType;
+            if (this.forms.degreeType === "GRADE") {
+              item.subjectId = this.forms.subjectId;
+            }
+          });
+          console.log(domains, "domains");
+          await degreeLevelFeeSave(domains);
+
+          this.$message.success("添加成功");
+          this.updateVisible = false;
+          this.$emit("getList");
+        } catch {}
       });
     },
     openDialog() {

+ 72 - 16
src/views/levelManager/model/levelSettingUpdate.vue

@@ -34,7 +34,23 @@
           ></el-option>
         </el-select>
       </el-form-item>
-
+      <el-form-item
+        label="报考项目"
+        :rules="[{ required: true, message: '请输入报考项目' }]"
+        prop="level"
+      >
+        <el-select
+          class="multiple"
+          v-model.trim="forms.degreeType"
+          filterable
+          clearable
+          placeholder="报考项目"
+          @change="onChangeDegreeType"
+        >
+          <el-option value="GRADE" label="专业考级"></el-option>
+          <el-option value="THEORY" label="乐理考级"></el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item
         label="级别"
         :rules="[{ required: true, message: '请输入级别' }]"
@@ -47,33 +63,39 @@
           filterable
           placeholder="请选择级别"
         >
+          <el-option
+            v-for="item in degreeLevel"
+            :key="item.value"
+            :value="item.value"
+            :label="item.text"
+          ></el-option>
         </el-select>
       </el-form-item>
       <el-form-item
         label="报考金额"
         :rules="[{ required: true, message: '请输入报考金额' }]"
-        prop="money"
+        prop="fee"
       >
         <el-input
-          type="number"
-          @mousewheel.native.prevent
-          v-model="forms.money"
+          @keyup.native="keyupEvent"
+          v-model="forms.fee"
+          maxlength="8"
           placeholder="请输入报考金额"
         ></el-input>
       </el-form-item>
       <el-form-item
         label="是否上传证书"
         :rules="[{ required: true, message: '请选择是否上传证书' }]"
-        prop="certificate"
+        prop="credentials"
       >
         <el-select
           style="width: 100% !important;"
-          v-model="forms.certificate"
+          v-model="forms.credentials"
           clearable
           placeholder="请选择是否上传证书"
         >
-          <el-option :value="0" label="无需上传"></el-option>
-          <el-option :value="1" label="需上传"></el-option>
+          <el-option :value="false" label="无需上传"></el-option>
+          <el-option :value="true" label="需上传"></el-option>
         </el-select>
       </el-form-item>
     </el-form>
@@ -84,21 +106,30 @@
   </el-dialog>
 </template>
 <script>
+import {
+  degreeLevel,
+  degreeTheory,
+  degreeLevelFeeUpdate
+} from "../levelManageApi";
 export default {
   name: "levelSettingAdd",
   data() {
     return {
+      degreeLevel: [],
       updateVisible: false,
-      row: {},
       forms: {
-        type: "level", // theory
+        id: null,
+        degreeType: "", // theory
         subjectId: null,
         level: null,
-        money: null,
-        certificate: null
+        fee: null,
+        credentials: null
       }
     };
   },
+  mounted() {
+    this.degreeLevel = degreeLevel;
+  },
   methods: {
     onClose() {
       this.$refs.elForm && this.$refs.elForm.resetFields();
@@ -106,12 +137,37 @@ export default {
     },
     onSubmit() {
       this.$refs.elForm.validate(async res => {
-        console.log(res, "res");
-        if (res) {
-        }
+        if (!res) return;
+        try {
+          await degreeLevelFeeUpdate(this.forms);
+          this.$message.success("修改成功");
+          this.updateVisible = false;
+          this.$emit("getList");
+        } catch {}
       });
     },
+    onChangeDegreeType(val) {
+      if (val === "THEORY") {
+        this.degreeLevel = degreeTheory;
+      } else if (val === "GRADE") {
+        this.degreeLevel = degreeLevel;
+      }
+      this.forms.level = "";
+    },
     openDialog(row) {
+      this.forms = {
+        id: row.id,
+        degreeType: row.degreeType,
+        subjectId: row.subjectId ? Number(row.subjectId) : null,
+        level: row.level,
+        fee: row.fee,
+        credentials: row.credentials
+      };
+      if (row.degreeType === "GRADE") {
+        this.degreeLevel = degreeLevel;
+      } else if (row.degreeType === "THEORY") {
+        this.degreeLevel = degreeTheory;
+      }
       this.updateVisible = true;
     }
   }