mo 3 년 전
부모
커밋
c004a8b662

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/index.html


+ 1 - 0
dist/static/css/chunk-3b9c549a.5deb63c7.css

@@ -0,0 +1 @@
+.btns[data-v-72ea9be8]{text-align:right}.files[data-v-72ea9be8]{background-color:#f8f8f8;padding:20px 0;padding-right:20px;margin-bottom:20px;border-radius:5px;position:relative}.files .file-remove[data-v-72ea9be8]{position:absolute;right:20px;bottom:10px}.myCascader .el-radio{width:100%;height:100%;z-index:10;position:absolute;top:10px;right:10px}.myCascader .el-radio__input{visibility:hidden}.myCascader .el-cascader-node__postfix{top:10px}.remark[data-v-4421fe1d]{display:inline;overflow:hidden;white-space:pre}.lookForm[data-v-4421fe1d] .el-dialog__body{padding:0}.iframe_back[data-v-4421fe1d]{width:195px;height:45px;position:absolute;bottom:50px;background:transparent;left:50%;z-index:99;margin-left:-100px}.iframe_help[data-v-4421fe1d]{position:absolute;background:transparent;width:50px;height:120px;top:50%;right:0;margin-top:-35px}.iframe_header_back[data-v-4421fe1d]{background:transparent;width:225px;height:50px;position:absolute;top:65px;left:20px}

+ 1 - 0
dist/static/css/chunk-b2345870.0df48c6c.css

@@ -0,0 +1 @@
+.alert[data-v-b4581dc4]{margin-bottom:20px}.form[data-v-b4581dc4] .el-form-item{margin-right:0!important}.addCateBtn[data-v-b4581dc4]{margin-bottom:20px}.custom-tree-node[data-v-b4581dc4]{font-size:14px}.custom-tree-node .title[data-v-b4581dc4]{font-size:16px}.custom-tree-node i[data-v-b4581dc4]{margin-left:5px}.uploadImg[data-v-b4581dc4] .avatar{width:105px;height:134px}.btnList[data-v-a1cc11c2]{margin-bottom:20px}

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/js/app.6233d949.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/js/chunk-3b9c549a.38b52212.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/js/chunk-b2345870.3dfeb7f3.js


+ 1 - 1
package.json

@@ -5,7 +5,7 @@
   "author": "Pan <panfree23@gmail.com>",
   "license": "MIT",
   "scripts": {
-    "dev": "vue-cli-service serve",
+    "dev": "vue-cli-service serve --hot",
     "build": "vue-cli-service build",
     "preview": "npx http-server ./dist -P http://dev.dayaedu.com",
     "lint": "eslint --ext .js,.vue src",

+ 48 - 0
src/api/vipSeting.js

@@ -425,4 +425,52 @@ export const enableVipGroupActivity = data => request2({
   requestType: 'form'
 })
 
+// 查询资格列表  权限
 
+export const getActivityUserMapperList = data => request2({
+  url:api +  '/activityUserMapper/queryActivityUserMapper',
+  params:data,
+  method: 'get',
+  requestType: 'form'
+})
+
+// 查询学生列表 studentManage/queryStudent
+export const getStudentList = data => request2({
+  url:api +  '/studentManage/queryStudent',
+  params:data,
+  method: 'get',
+  requestType: 'form'
+})
+
+//添加排课资格
+export const addActivityUserMapperStudents= data => request2({
+  url:api +  '/activityUserMapper/add',
+  data:data,
+  method: 'post',
+  requestType: 'json'
+})
+
+// 获取学生资格详情
+
+export const getStudentactivityList = data => request2({
+  url:api +  '/activityUserMapper/queryPage',
+  params:data,
+  method: 'get',
+  requestType: 'form'
+})
+
+// 取消资格
+export const cutActivityrMapper = data => request2({
+  url:api +  '/activityUserMapper/cut',
+  params:data,
+  method: 'get',
+  requestType: 'form'
+})
+
+// 资格记录
+export const activityrMapperInfo = data => request2({
+  url:api +  '/activityUserMapperAdjustLog/queryPage',
+  params:data,
+  method: 'get',
+  requestType: 'form'
+})

+ 1 - 0
src/helpers/index.js

@@ -65,6 +65,7 @@ export class Searchs {
     if (!this.searchs[k]) {
       this.searchs[k] = {...initSearch}
     }
+
     if (type) {
       this.searchs[k][type] = data
     } else {

+ 5 - 2
src/layout/components/TagsView.vue

@@ -71,12 +71,13 @@ export default {
         for (const key in s.searchs) {
           if (Object.hasOwnProperty.call(s.searchs, key)) {
             const item = s.searchs[key];
-            if (item.bind === this.$route.path) {
+            if (item.bind === this.$route.path&&item.bind!=='/main/main') {
               keys.push(key);
             }
           }
         }
         for (const item of keys) {
+
           s.removeByKey(item);
         }
       }
@@ -111,6 +112,7 @@ export default {
       return route.path === this.$route.path;
     },
     syncTagViewAndSaveForm() {
+
       const keys = this.$store.state.tagsView.visitedViews.map((item) => {
         //  (item)
         return item.path;
@@ -122,6 +124,7 @@ export default {
       let route = this.$route;
       for (const item of sks) {
         if (!(keys.includes(item) || keys.includes(allSearch[item].bind))) {
+
           searchs.removeByKey(item);
         }
 
@@ -172,7 +175,6 @@ export default {
           if (this.isActive(view)) {
 
             const latestView = views[views.length -2];
-            console.log(views)
             if (latestView) {
               this.$router.push(latestView.fullPath);
             } else {
@@ -184,6 +186,7 @@ export default {
           console.log(e)
         }
       } else {
+
         const searchs = new Searchs();
         searchs.remove(this.$route.path);
         this.$store

+ 2 - 0
src/router/index.js

@@ -456,6 +456,8 @@ export const asyncRoutes = {
   activeMarketing:()=>import ('@/views/activityScheduling/activeMarketing'),
   // 2021双11
   '2021double11List':()=>import ('@/views/activityScheduling/2021double11List'),
+  // 活动资格管理
+  activeSenior:()=>import('@/views/categroyManager/activeSenior'),
   backManager:()=>import ('@/views/backManager'),
   // 教材列表
   teachManager:()=>import ('@/views/teachManager')

+ 14 - 0
src/store/modules/permission.js

@@ -560,6 +560,20 @@ function setDetailRoute(accessedRoutes) {
           }
         },
         {
+          name: '活动资格管理',
+          path: 'activeSenior',
+          component: () => import('@/views/categroyManager/activeSenior'),
+          hidden: true,
+          meta: {
+            noCache: '1',
+            title: '活动资格管理',
+            belongTopMenu: "/operateManager",
+            activeMenu: '/vipActiveManager/vipActiveList',
+            id: 'xx16'
+          }
+        },
+        // activeSenior
+        {
           name: '添加分部活动',
           path: 'branchActiveOperationAdd',
           component: () => import('@/views/categroyManager/insideSetting/branchActiveOperation'),

+ 2 - 2
src/utils/directivePage.js

@@ -16,9 +16,9 @@ export function permission(value, parent) {
     //         return false
     //     }
     // }
-    if(permission.includes(value) && !parent) {
+    if(value&&permission.includes(value) && !parent) {
         return true
-    } else if(permission.includes(value) && permission.includes(parent)) {
+    } else if(value&&permission.includes(value) && permission.includes(parent)) {
         return true
     } else {
         return false

+ 419 - 0
src/views/categroyManager/activeSenior.vue

@@ -0,0 +1,419 @@
+<template>
+  <div class="m-container">
+    <h2>
+      <el-page-header @back="onCancel" :content="title"></el-page-header>
+    </h2>
+    <div class="m-core">
+      <el-button
+        type="primary"
+        style="margin-bottom: 20px"
+        v-permission="'activityUserMapper/add'"
+        @click="addStudent"
+        >添加学员</el-button
+      >
+      <save-form
+        :inline="true"
+        ref="searchForm"
+        :model="searchForm"
+        @submit="search"
+        @reset="onReSet"
+      >
+        <el-form-item prop="search">
+          <el-input
+            class="search"
+            v-model.trim="searchForm.search"
+            clearable
+            @keyup.enter.native="search"
+            placeholder="学员名称、编号、手机号"
+          ></el-input>
+        </el-form-item>
+        <el-form-item prop="organId">
+          <el-select
+            class="multiple"
+            filterable
+            style="width: 180px !important"
+            v-model.trim="searchForm.organId"
+            clearable
+            placeholder="请选择分部"
+          >
+            <el-option
+              v-for="(item, index) in organList"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button native-type="submit" type="primary">搜索</el-button>
+          <el-button native-type="reset" type="danger">重置</el-button>
+        </el-form-item>
+      </save-form>
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column
+            align="center"
+            prop="organName"
+            label="分部"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="userId"
+            label="学员编号"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="username"
+            label="学员姓名"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="phone"
+            label="手机号"
+          ></el-table-column>
+          <el-table-column
+            v-if="courseType && courseType == 'VIP'"
+            align="center"
+            prop="studentId"
+            label="付费课已使用/剩余资格"
+          >
+            <template slot-scope="scope">
+              <div v-if="scope.row.userId">
+                {{ scope.row.useVipNum + "" + "/" + scope.row.freeVipNum + "" }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            v-else
+            align="center"
+            prop="studentId"
+            label="付费课已使用/剩余资格"
+          >
+            <template slot-scope="scope">
+              <div v-if="scope.row.userId">
+                {{
+                  scope.row.usePracticeNum +
+                  "" +
+                  "/" +
+                  scope.row.freePracticeNum +
+                  ""
+                }}
+              </div>
+            </template>
+          </el-table-column>
+
+          <el-table-column
+            v-if="giveCourseType == 'VIP'"
+            align="center"
+            prop="studentId"
+            label="赠课已使用/剩余资格"
+          >
+            <template slot-scope="scope">
+              <div v-if="scope.row.userId">
+                {{
+                  scope.row.useGiveVipNum +
+                  "" +
+                  "/" +
+                  scope.row.freeGiveVipNum +
+                  ""
+                }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            v-if="giveCourseType == 'PRACTICE'"
+            align="center"
+            prop="studentId"
+            label="赠课已使用/剩余资格"
+          >
+            <template slot-scope="scope">
+              <div v-if="scope.row.userId">
+                {{
+                  scope.row.useGivePracticeNum +
+                  "" +
+                  "/" +
+                  scope.row.freeGivePracticeNum +
+                  ""
+                }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            v-if="giveCourseType != 'PRACTICE' && giveCourseType != 'VIP'"
+            align="center"
+            prop="studentId"
+            label="赠课已使用/剩余资格"
+          >
+            <template slot-scope="scope">
+              <div v-if="scope.row.userId">
+                {{ "--" + "/" + "--" }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="操作"
+            width="260px"
+          >
+            <template slot-scope="scope">
+              <div>
+                <el-button
+                  type="text"
+                  v-permission="'activityUserMapper/add'"
+                  @click="addCount(scope.row)"
+                  >添加资格</el-button
+                >
+                <el-button
+                  type="text"
+                  v-permission="'activityUserMapper/cut'"
+                  @click="reduceCount(scope.row)"
+                  >减少资格</el-button
+                >
+
+                <el-button
+                  type="text"
+                  v-permission="'activityUserMapperAdjustLog/queryPage'"
+                  @click="lookInfo(scope.row)"
+                  >调整记录</el-button
+                >
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+    <el-dialog
+      title="添加学员"
+      :visible.sync="addStudentVisible"
+      width="1000px"
+      v-if="addStudentVisible"
+    >
+      <addStudentSenior
+        :organList="organList"
+        :hasGive="hasGive"
+        ref="addStudentSenior"
+        @getList="getList"
+        @close="addStudentVisible = false"
+      />
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="addStudentVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitStudent">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+      title="添加资格"
+      :visible.sync="addSeniorVisible"
+      width="800px"
+      v-if="addSeniorVisible"
+    >
+      <addSenior
+        :hasGive="hasGive"
+        :activeRow="activeRow"
+        @getList="getList"
+        ref="addSenior"
+        @close="addSeniorVisible = false"
+      />
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="addSeniorVisible = false">取 消</el-button>
+        <el-button type="primary" @click="addSeniorSubmit">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+      title="减少资格"
+      :visible.sync="reduceVisible"
+      width="1000px"
+      v-if="reduceVisible"
+    >
+      <reduceSenior
+        :activeRow="activeRow"
+        :courseType="courseType"
+        :giveCourseType="giveCourseType"
+        @getList="getList"
+      />
+      <span slot="footer" class="dialog-footer">
+        <!-- <el-button @click="addStudentVisible = false">取 消</el-button> -->
+        <el-button type="primary" @click="reduceVisible = false"
+          >确 定</el-button
+        >
+      </span>
+    </el-dialog>
+    <el-dialog
+      title="资格记录"
+      :visible.sync="infoVisible"
+      width="1000px"
+      v-if="infoVisible"
+    >
+      <seniorInfo :activeRow="activeRow" />
+      <!-- <span slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="infoVisible = false">确 定</el-button>
+      </span>-->
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/Pagination/index";
+import load from "@/utils/loading";
+import {
+  getVipGroupActivity,
+  getActivityUserMapperList,
+} from "@/api/vipSeting";
+import addSenior from "./modals/addSenior.vue";
+import reduceSenior from "./modals/reduceSenior.vue";
+import addStudentSenior from "./modals/addStudentSenior.vue";
+import seniorInfo from "./modals/seniorInfo";
+export default {
+  components: {
+    pagination,
+    addSenior,
+    reduceSenior,
+    addStudentSenior,
+    seniorInfo,
+  },
+  data() {
+    return {
+      searchForm: {
+        search: null,
+        organId: null,
+      },
+      title: "",
+      tableList: [{}],
+      organList: [],
+      activeRow: null,
+      hasGive: false,
+      addStudentVisible: false,
+      addSeniorVisible: false,
+      reduceVisible: false,
+      infoVisible: false,
+      courseType: "",
+      giveCourseType: "",
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  async mounted() {
+    // 获取分部
+    // 获取分部
+    await this.$store.dispatch("setBranchs");
+    this.init();
+  },
+  methods: {
+    async init() {
+      if (this.$route.query.id) {
+        // this.baseForm.id = this.$route.query.id;
+        try {
+          const rusult = await getVipGroupActivity({
+            id: this.$route.query.id,
+          });
+          this.formatDetail(rusult.data);
+        } catch (e) {
+          console.log(e);
+        }
+      }
+      this.getList();
+    },
+    async getList() {
+      try {
+        const res = await getActivityUserMapperList({
+          ...this.searchForm,
+          page: this.rules.page,
+          rows: this.rules.limit,
+          activityId: this.$route.query.id,
+        });
+        this.tableList = res.data.rows;
+        this.rules.total = res.data.total;
+      } catch (e) {
+        console.log(e);
+      }
+    },
+    search() {
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.$refs.searchForm.resetFields();
+      this.search();
+    },
+    onCancel() {
+      this.$store.dispatch("delVisitedViews", this.$route);
+      this.$router.push({
+        path: "/vipActiveManager/vipActiveList",
+        query: { rules: this.rules, searchForm: this.searchForm },
+      });
+    },
+    formatDetail(data) {
+      this.title = data.name;
+      let organIds = data.organId.split(",").map((organ) => {
+        return Number(organ);
+      });
+      this.organList = [];
+      this.selects.branchs.forEach((organ) => {
+        if (organIds.indexOf(organ.id) != -1) {
+          this.organList.push(organ);
+        }
+      });
+      this.hasGive = Boolean(
+        data.giveCourseType && data.giveCourseType != "MEMBER"
+      );
+      this.courseType = data.courseType;
+      this.giveCourseType = data.giveCourseType;
+      console.log(this.courseType, this.giveCourseType);
+      // selects.branchs
+    },
+    addCount(row) {
+      this.activeRow = row;
+      this.addSeniorVisible = true;
+    },
+    reduceCount(row) {
+      this.activeRow = row;
+      this.reduceVisible = true;
+    },
+    addStudent() {
+      this.addStudentVisible = true;
+    },
+    submitStudent() {
+      this.$refs.addStudentSenior.submit();
+    },
+    addSeniorSubmit() {
+      this.$refs.addSenior.submit();
+    },
+    lookInfo(row) {
+      this.activeRow = row;
+      this.infoVisible = true;
+    },
+  },
+};
+</script>
+<style lang='scss' scoped>
+.m-container {
+  .search {
+    /deep/.el-input__inner {
+      width: 200px !important;
+    }
+  }
+}
+</style>
+

+ 130 - 0
src/views/categroyManager/modals/addSenior.vue

@@ -0,0 +1,130 @@
+<template>
+  <div>
+    <el-form :inline="true" :model="topForm" label-width="110px" ref='form'>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="学生姓名:">
+            {{ topForm.userName }}
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="手机号:">
+            {{ topForm.phone }}
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item
+            label="付费课资格:"
+            prop="paySeniorNum"
+            style="width: 100%"
+            :rules="[
+              {
+                required: true,
+                message: '请输入付费课资格数',
+                trigger: 'blur',
+              },
+              {
+                pattern: /^(0|\+?[1-9][0-9]*)$/,
+                message: '请输入正确的付费课资格数',
+                trigger: 'blur',
+              },
+            ]"
+          >
+            <el-input
+              v-model="topForm.paySeniorNum"
+              style="width: 270px"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item
+          prop="giveSeniorNum"
+            label="赠课资格:"
+            v-if="hasGive"
+            style="width: 100%"
+            :rules="[
+              { required: true, message: '请输入赠课资格数', trigger: 'blur' },
+              {
+                pattern: /^(0|\+?[1-9][0-9]*)$/,
+                message: '请输入正确的赠课资格数',
+                trigger: 'blur',
+              },
+            ]"
+          >
+            <el-input
+              v-model="topForm.giveSeniorNum"
+              style="width: 270px"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-form-item label="调整原因:" prop="memo"  :rules="[
+              { required: true, message: '请输入调整原因', trigger: 'blur' },
+            ]">
+          <el-input
+            style="width: 650px"
+            type="textarea"
+            v-model="topForm.memo"
+            :rows="3"
+          ></el-input>
+        </el-form-item>
+      </el-row>
+      <p style="color: red">资格调整不影响该活动学员购买次数</p>
+    </el-form>
+  </div>
+</template>
+<script>
+import { addActivityUserMapperStudents } from "@/api/vipSeting";
+export default {
+  props: ["hasGive", "activeRow"],
+  data() {
+    return {
+      topForm: {
+        userName: "",
+        phone: "",
+        paySeniorNum: "",
+        giveSeniorNum: "",
+      },
+    };
+  },
+  mounted() {
+    this.topForm.userName = this.activeRow?.username || "";
+    this.topForm.phone = this.activeRow?.phone || "";
+  },
+  methods: {
+    submit() {
+      this.$refs.form.validate(async (flag) => {
+        if (flag) {
+          let obj = {
+            activityId: this.$route.query.id,
+            memo: this.topForm.memo,
+            activityStudentAdjustDtos: [
+              {
+                courseNum: this.topForm.paySeniorNum,
+                giveCourseNum: this.topForm.giveSeniorNum,
+                userId: this.activeRow.userId,
+              },
+            ],
+          };
+          try {
+            const res = await addActivityUserMapperStudents(obj);
+            this.$message.success("添加成功");
+            this.$emit("getList");
+            this.$emit("close");
+          } catch (e) {
+            console.log(e);
+          }
+        }
+      });
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+/deep/.el-form--inline .el-form-item {
+  margin-right: 0;
+}
+</style>

+ 395 - 0
src/views/categroyManager/modals/addStudentSenior.vue

@@ -0,0 +1,395 @@
+<template>
+  <div>
+    <el-alert title="资格信息" :closable="false" class="alert" type="info" />
+    <el-form :inline="true" :model="topForm" label-width="110px" ref="form">
+      <el-row>
+        <el-col :span="12">
+          <el-form-item
+            label="付费课资格:"
+            prop="paySeniorNum"
+            style="width: 100%"
+            :rules="[
+              { required: true, message: '请输入资格数', trigger: 'blur' },
+              {
+                pattern: /^(0|\+?[1-9][0-9]*)$/,
+                message: '请输入正确的资格数',
+                trigger: 'blur',
+              },
+            ]"
+          >
+            <el-input
+              v-model="topForm.paySeniorNum"
+              style="width: 370px"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item
+            label="赠课资格:"
+            v-if="hasGive"
+            :rules="[
+              { required: true, message: '请输入赠课资格数', trigger: 'blur' },
+              {
+                pattern: /^(0|\+?[1-9][0-9]*)$/,
+                message: '请输入正确的赠课资格数',
+                trigger: 'blur',
+              },
+            ]"
+          >
+            <el-input
+              v-model="topForm.giveSeniorNum"
+              style="width: 370px"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-form-item
+          label="备注:"
+          prop="memo"
+          :rules="[{ required: true, message: '请输入备注', trigger: 'blur' }]"
+        >
+          <el-input
+            type="textarea"
+            :rows="3"
+            v-model="topForm.memo"
+            style="width: 370px"
+          ></el-input>
+        </el-form-item>
+      </el-row>
+      <p style="color: red; margin-bottom: 20px">
+        资格调整不影响该活动学员购买次数
+      </p>
+    </el-form>
+    <el-alert title="添加学员" :closable="false" class="alert" type="info" />
+    <el-form
+      :inline="true"
+      @submit="search"
+      ref="searchForm"
+      :model="searchForm"
+    >
+      <el-form-item prop="search">
+        <el-input
+          class="search"
+          type="text"
+          clearable
+          v-model="searchForm.search"
+          placeholder="学员名称、编号、手机号"
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="organId">
+        <el-select
+          class="multiple"
+          filterable
+          style="width: 180px !important"
+          v-model.trim="searchForm.organId"
+          clearable
+          multiple
+          placeholder="请选择分部"
+        >
+          <el-option
+            v-for="(item, index) in organList"
+            :key="index"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="subjectId">
+        <el-select
+          clearable
+          v-model="searchForm.subjectId"
+          filterable
+          placeholder="声部"
+        >
+          <el-option
+            v-for="item in selects.subjects"
+            :value="item.id"
+            :label="item.name"
+            :key="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="hasMusicCourse">
+        <el-select
+          clearable
+          v-model="searchForm.hasMusicCourse"
+          filterable
+          placeholder="是否乐团在读"
+        >
+          <el-option value="1" label="是"></el-option>
+          <el-option value="0" label="否"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="hasVipCourse">
+        <el-select
+          clearable
+          v-model="searchForm.hasVipCourse"
+          filterable
+          placeholder="是否vip在读"
+        >
+          <el-option value="1" label="是"></el-option>
+          <el-option value="0" label="否"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="hasPracticeCourse">
+        <el-select
+          clearable
+          v-model="searchForm.hasPracticeCourse"
+          filterable
+          placeholder="是否网管课在读"
+        >
+          <el-option value="1" label="是"></el-option>
+          <el-option value="0" label="否"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="hasMember">
+        <el-select
+          clearable
+          v-model="searchForm.hasMember"
+          filterable
+          placeholder="是否会员"
+        >
+          <el-option value="1" label="是"></el-option>
+          <el-option value="0" label="否"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="danger" @click="search">搜索</el-button>
+        <el-button native-type="reset" type="primary" @click="onReSet"
+          >重置</el-button
+        >
+      </el-form-item>
+    </el-form>
+    <div class="tableWrap">
+      <el-table
+        style="width: 100%"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        :data="tableList"
+        ref="tableList"
+        @selection-change="handleSelectionChange"
+        @select="onTableSelect"
+        row-key="userId"
+      >
+        <el-table-column type="selection" width="55"> </el-table-column>
+        <el-table-column
+          align="center"
+          prop="organName"
+          label="分部"
+        ></el-table-column>
+        <el-table-column
+          align="center"
+          prop="userId"
+          label="学员编号"
+        ></el-table-column>
+        <el-table-column
+          align="center"
+          prop="username"
+          label="学员姓名"
+        ></el-table-column>
+        <el-table-column
+          align="center"
+          prop="phone"
+          label="手机号"
+        ></el-table-column>
+        <el-table-column
+          align="center"
+          prop="subjectNames"
+          label="声部"
+        ></el-table-column>
+      </el-table>
+      <pagination
+        :total.sync="rules.total"
+        :page.sync="rules.page"
+        :limit.sync="rules.limit"
+        :page-sizes.sync="rules.page_size"
+        @pagination="getList"
+      />
+    </div>
+  </div>
+</template>
+<script>
+import pagination from "@/components/Pagination/index";
+import { getStudentList, addActivityUserMapperStudents } from "@/api/vipSeting";
+
+export default {
+  components: { pagination },
+  props: ["organList", "hasGive"],
+  data() {
+    return {
+      topForm: {
+        paySeniorNum: null,
+        giveSeniorNum: null,
+        memo: "",
+      },
+      searchForm: {
+        search: null,
+        organId: this.organList.map((organ) => {
+          return organ.id;
+        }),
+        subjectId: null,
+        hasMember: null,
+        hasMusicCourse: null,
+        hasPracticeCourse: null,
+        hasVipCourse: null,
+      },
+      tableList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      isDetele: false,
+      deleteList: [],
+    };
+  },
+  async mounted() {
+    await this.$store.dispatch("setSubjects");
+    this.getList();
+  },
+  methods: {
+    search() {
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.$refs.searchForm.resetFields();
+      this.search();
+    },
+    async getList() {
+      try {
+        let { organId, ...rest } = this.searchForm;
+        let params = {
+          ...rest,
+          page: this.rules.page,
+          rows: this.rules.limit,
+          organId: organId.join(","),
+        };
+        const res = await getStudentList(params);
+        this.tableList = res.data.rows;
+        this.rules.total = res.data.total;
+        let idList = this.deleteList.map((course) => {
+          return course.userId;
+        });
+        this.isDetele = true;
+        this.$nextTick(() => {
+          this.tableList.forEach((course) => {
+            if (idList.indexOf(course.userId) != -1) {
+              console.log(course);
+              this.$refs.tableList.toggleRowSelection(course, true);
+            }
+          });
+          this.isDetele = false;
+        });
+      } catch (e) {
+        console.log(e);
+      }
+
+      /**
+       *
+       */
+    },
+    handleSelectionChange(arr) {
+      // this.deleteList = arr;
+      if (arr.length > 0) {
+        // 有可能加 有可能减
+        this.deleteList = this.deleteList.concat(arr);
+        // 去重
+        this.deleteList = this.$helpers.lodash.uniqBy(
+          this.deleteList,
+          "userId"
+        );
+      }
+      // else if(){}
+      else {
+        if (this.isDetele) return;
+        // 有2种 1是新页
+        // 2是点击反选
+        let idList = this.deleteList.map((course) => {
+          return course.userId;
+        });
+        this.$nextTick(() => {
+          let tableIdList = [];
+          this.tableList.forEach((course) => {
+            tableIdList.push(course.userId);
+            if (idList.indexOf(course.userId) != -1) {
+              this.$refs.tableList.toggleRowSelection(course, false);
+              // 删除这个元素
+            }
+          });
+          this.deleteList = this.$helpers.lodash.remove(
+            this.deleteList,
+            function (item) {
+              return tableIdList.indexOf(item.userId) == -1;
+            }
+          );
+          if (this.deleteList.length <= 0) {
+            this.clearCom();
+          }
+        });
+      }
+    },
+    onTableSelect(rows, row) {
+      let idList = this.deleteList.map((course) => {
+        return course.userId;
+      });
+      if (idList.indexOf(row.userId) != -1) {
+        this.deleteList.splice(idList.indexOf(row.userId), 1);
+        if (this.deleteList.length <= 0) {
+          this.clearCom();
+        }
+      }
+    },
+    clearCom() {
+      // this.deleteList = [];
+      this.$set(this, "deleteList", []);
+      this.$refs.tableList.clearSelection();
+    },
+    async submit() {
+      this.$refs.form.validate(async (flag) => {
+        if (flag) {
+          let obj = {
+            activityId: this.$route.query.id,
+            memo: this.topForm.memo,
+          };
+          let activityStudentAdjustDtos = this.deleteList.map((stu) => {
+            return {
+              userId: stu.userId,
+              courseNum: this.topForm.paySeniorNum,
+              giveCourseNum: this.topForm.giveSeniorNum,
+            };
+          });
+          obj.activityStudentAdjustDtos = activityStudentAdjustDtos;
+          try {
+            const res = await addActivityUserMapperStudents(obj);
+            this.$message.success("添加成功");
+            this.$emit("getList");
+            this.$emit("close");
+          } catch (e) {
+            console.log(e);
+          }
+        }
+      });
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.submitP {
+  margin-bottom: 20px;
+}
+.alert {
+  margin-bottom: 20px;
+}
+/deep/.el-form--inline .el-form-item {
+  margin-right: 0;
+}
+
+.search {
+  /deep/.el-input__inner {
+    width: 200px !important;
+  }
+}
+</style>

+ 2 - 2
src/views/categroyManager/modals/baseInfo.vue

@@ -164,7 +164,7 @@
             ></i>
           </el-tooltip>
         </el-form-item>
-        <el-form-item label="是否充值课程余额" prop="isPayToBalance">
+        <!-- <el-form-item label="是否充值课程余额" prop="isPayToBalance">
           <el-select
             v-model.trim="baseForm.isPayToBalance"
             placeholder="请选择是否充值课程余额"
@@ -186,7 +186,7 @@
               style="font-size: 18px; color: #f56c6c"
             ></i>
           </el-tooltip>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item label="营销活动售价" prop="marketPrice">
           <el-input
             style="width: 400px"

+ 247 - 0
src/views/categroyManager/modals/reduceSenior.vue

@@ -0,0 +1,247 @@
+<template>
+  <div>
+    <p style="color: red; margin-bottom: 20px">
+      赠课资格显示“--”说明该活动无赠课
+    </p>
+    <div class="tableWrap">
+      <el-table
+        style="width: 100%"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        :data="tableList"
+        ref="tableList"
+      >
+        <el-table-column
+          align="center"
+          prop="createTime"
+          label="资格添加时间"
+        ></el-table-column>
+               <el-table-column
+          align="center"
+          prop="createTime"
+          label="添加方式"
+        >
+        <template slot-scope="scope">
+          <div>
+            {{scope.row.paymentOrderId?'订单购买':'后台添加'}}
+          </div>
+        </template>
+        </el-table-column>
+        <el-table-column
+          align="center"
+          prop="createTime"
+          label="订单号"
+        >
+        <template slot-scope="scope">
+          <div>
+            {{scope.row.paymentOrderId?scope.row.paymentOrderId:'--'}}
+          </div>
+        </template>
+        </el-table-column>
+        <el-table-column
+          v-if="courseType && courseType == 'VIP'"
+          align="center"
+          prop="studentId"
+          label="付费课资格"
+        >
+          <template slot-scope="scope">
+            <div v-if="scope.row.userId">
+              <p v-if="scope.row.returnFee">已退费</p>
+              <p v-else>{{ scope.row.vipFlag | filtersType }}</p>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          v-else
+          align="center"
+          prop="studentId"
+          label="付费课资格"
+        >
+          <template slot-scope="scope">
+            <div v-if="scope.row.userId">
+              <p v-if="scope.row.returnFee">已退费</p>
+              <p v-else>{{ scope.row.practiceFlag | filtersType }}</p>
+            </div>
+          </template>
+        </el-table-column>
+
+        <el-table-column
+          v-if="giveCourseType == 'VIP'"
+          align="center"
+          prop="studentId"
+          label="赠课资格"
+        >
+          <template slot-scope="scope">
+            <div v-if="scope.row.userId">
+              <p v-if="scope.row.returnFee">已退费</p>
+              <p v-else>{{ scope.row.giveVipFlag | filtersType }}</p>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          v-if="giveCourseType == 'PRACTICE'"
+          align="center"
+          prop="studentId"
+          label="赠课资格"
+        >
+          <template slot-scope="scope">
+            <div v-if="scope.row.userId">
+              <p v-if="scope.row.returnFee">已退费</p>
+              <p v-else>{{ scope.row.givePracticeFlag | filtersType }}</p>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          v-if="giveCourseType != 'PRACTICE' && giveCourseType != 'VIP'"
+          align="center"
+          prop="studentId"
+          label="赠课资格"
+        >
+          <template slot-scope="scope">
+            <div v-if="scope.row.userId">
+              {{ "--" }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="studentId" label="操作">
+          <template slot-scope="scope">
+            <div>
+              <el-button
+                v-if="showCancle(scope.row)"
+                type="text"
+                @click="cancleSenior(scope.row)"
+                >取消资格</el-button
+              >
+            </div>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+    <el-dialog
+      title="取消资格"
+      append-to-body
+      :visible.sync="cancleVisible"
+      width="450px"
+      v-if="cancleVisible"
+    >
+      <el-form :inline="true" ref="form" :model="form">
+        <el-row>
+          <el-form-item
+            label="退费金额"
+            prop="actualPrice"
+            :rules="[
+              { required: true, message: '请输入退费金额', trigger: 'blur' },
+              {
+                pattern:
+                  /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
+                message: '请输入正确的金额',
+                trigger: 'blur',
+              },
+            ]"
+          >
+            <el-input
+              v-model="form.actualPrice"
+              style="width: 320px"
+            ></el-input>
+          </el-form-item>
+        </el-row>
+        <el-row>
+          <el-form-item
+            label="调整原因"
+            prop="memo"
+            :rules="[
+              { required: true, message: '请输入调整原因', trigger: 'blur' },
+            ]"
+          >
+            <el-input
+              type="textarea"
+              style="width: 320px"
+              :rows="3"
+              v-model="form.memo"
+            ></el-input>
+          </el-form-item>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="cancleVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitCancle">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+<script>
+//
+import { getStudentactivityList, cutActivityrMapper } from "@/api/vipSeting";
+export default {
+  props: ["activeRow", "courseType", "giveCourseType"],
+  data() {
+    return {
+      tableList: [],
+      activeSenior: null,
+      cancleVisible: false,
+      form: {
+        memo: null,
+        actualPrice: null,
+      },
+    };
+  },
+  mounted() {
+    this.getList();
+  },
+  methods: {
+    async getList() {
+      try {
+        const res = await getStudentactivityList({
+          activityId: this.$route.query.id,
+          userId: this.activeRow.userId,
+          page: 1,
+          rows: 9999,
+        });
+        this.tableList = res.data.rows;
+      } catch (e) {}
+    },
+    cancleSenior(row) {
+      this.activeSenior = row;
+      this.form.actualPrice = row.actualPrice;
+      this.form.activityUserMapperId = row.id;
+      this.form.memo = null;
+      this.cancleVisible = true;
+    },
+    showCancle(row) {
+      return (
+        !row.returnFee &&
+        row.vipFlag !== 2 &&
+        row.practiceFlag !== 2 &&
+        row.givePracticeFlag !== 2 &&
+        row.giveVipFlag !== 2
+      );
+    },
+    submitCancle() {
+      this.$refs.form.validate(async (flag) => {
+        if (flag) {
+          let obj = {
+            activityUserMapperId: this.form.activityUserMapperId,
+            amount: this.form.actualPrice,
+            memo: this.form.memo,
+          };
+          try {
+            const res = await cutActivityrMapper(obj);
+            this.$message.success("取消成功");
+            this.cancleVisible = false;
+            this.$emit("getList");
+            this.getList();
+          } catch (e) {}
+        }
+      });
+      //
+    },
+  },
+  filters: {
+    filtersType(val) {
+      let arr = ["--", "未使用", "已使用"];
+      return arr[val];
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 64 - 0
src/views/categroyManager/modals/seniorInfo.vue

@@ -0,0 +1,64 @@
+<template>
+  <div>
+    <el-table
+      style="width: 100%"
+      :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+      :data="tableList"
+    >
+      <el-table-column
+        align="center"
+        prop="operatorName"
+        label="操作人"
+      ></el-table-column>
+       <el-table-column
+        align="center"
+        prop="createTime"
+        label="操作时间"
+      ></el-table-column>
+      <el-table-column align="center" prop="operatorName" label="类型">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.type ? "添加资格" : "减少资格" }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="courseNum" label="付费资格数">
+      </el-table-column>
+      <el-table-column align="center" prop="giveCourseNum" label="赠课资格数">
+      </el-table-column>
+      <el-table-column align="center"  label="备注">
+        <template slot-scope="scope">
+          <div>
+               <overflow-text :text="scope.row.memo"></overflow-text>
+          </div>
+        </template>
+
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+<script>
+//
+import { activityrMapperInfo } from "@/api/vipSeting";
+export default {
+  props: ["activeRow"],
+  data() {
+    return {
+      tableList: [],
+    };
+  },
+  async mounted() {
+    try {
+      const res = await activityrMapperInfo({
+        rows: 9999,
+        page: 1,
+        userId: this.activeRow.userId,
+      });
+      this.tableList = res.data.rows;
+    } catch (e) {
+      console.log(e);
+    }
+  },
+  methods: {},
+};
+</script>

+ 19 - 0
src/views/categroyManager/vipActiveList.vue

@@ -235,6 +235,18 @@
                   >查看</el-button
                 >
                 <el-button
+                  v-if="
+                    scope.row.status == 'PROGRESS' &&
+                    scope.row.maxCourseNum &&
+                    scope.row.minCourseNum &&
+                    scope.row.minCourseNum == scope.row.maxCourseNum
+                  "
+                  type="text"
+                  v-permission="'/activeSenior'"
+                  @click="activeManager(scope.row)"
+                  >资格管理</el-button
+                >
+                <el-button
                   style="margin-left: 0px"
                   type="text"
                   v-permission="'vipGroupActivity/update'"
@@ -642,6 +654,13 @@ export default {
         query: { id: row.id },
       });
     },
+    // 活动资格管理
+    activeManager(row) {
+      this.$router.push({
+        path: "/operateManager/activeSenior",
+        query: { id: row.id },
+      });
+    },
     // 点击确认按钮发送修改请求
     remove(scope) {
       let id = scope.row.id;

+ 269 - 191
src/views/luckyDraw/trophyCreate.vue

@@ -1,215 +1,293 @@
 <!--  -->
 <template>
-    <div>
-        <el-form :model="form"
-                :rules="rules"
-                ref="ruleForm">
-            <p style="color: red; padding: 0 0 10px 100px;">注意:活动所有奖品的中奖概率之和必须等于100%; <br />活动奖品必须选择一个默认奖品,该奖品建议设置为谢谢参与;</p>
-            <el-form-item label="所属活动" prop="groupId" label-width="100PX">
-                <el-select v-model.trim="form.groupId"
-                        style="width: 100% !important"
-                        placeholder="请选择所属活动">
-                    <el-option v-for="item in groupList" :key="item.id" :value="item.id" :label="item.name"></el-option>
-                </el-select>
-            </el-form-item>
-            <el-row :gutter="10" v-for="(reword, index) in form.rewordList" :key="index">
-                <el-col :span="10">
-                    <el-form-item :label="`奖品${index + 1}`"
-                            label-width="100PX"
-                            :prop="'rewordList.' + index + '.name'"
-                            :rules="[{required: true, message:'请输入活动名称', trigger: 'blur'}]">
-                        <el-input v-model.trim="reword.name"
-                                autocomplete="off"
-                                placeholder="请输入奖品名称"></el-input>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="5">
-                    <el-form-item :prop="'rewordList.' + index + '.chances'"
-                            :rules="[{required: true, validator: validNumber, trigger: 'blur'}]">
-                        <el-input v-model.trim="reword.chances"
-                                type="number"
-                                autocomplete="off"
-                                placeholder="请输入中奖概率">
-                            <i slot="suffix" class="el-input__icon" style="padding-right: 5px;">%</i>
-                        </el-input>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="4">
-                    <el-form-item :prop="'rewordList.' + index + '.stock'"
-                            :rules="[{required: true, validator: validNumber1, trigger: 'blur'}]">
-                        <el-input v-model.trim="reword.stock"
-                                type="number"
-                                autocomplete="off"
-                                placeholder="请输入库存">
-                        </el-input>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="5">
-                    <el-form-item :prop="'rewordList.' + index + '.isDefault'"
-                            :rules="[{required: true, message:'请输入选择是否默认', trigger: 'blur'}]">
-                        <el-select v-model.trim="reword.isDefault"
-                                style="width: 100% !important"
-                                placeholder="请选择是否默认">
-                            <el-option :value="true" label="是"></el-option>
-                            <el-option :value="false" label="否"></el-option>
-                        </el-select>
-                    </el-form-item>
-                </el-col>
-            </el-row>
-            <div style="text-align: center">
-                <el-button :disabled="form.rewordList.length <= 1" class="add-reword" round icon="el-icon-minus" @click="onRemoveReword">删除奖品</el-button>
-                <el-button class="add-reword" round icon="el-icon-plus" @click="onAddReword">添加奖品</el-button>
-            </div>
-            <el-form-item label="备注" label-width="100PX"
-                        prop="memo">
-                <el-input type="textarea" :rows="2" v-model.trim="form.memo"
-                        autocomplete="off"
-                        placeholder="请输入备注"></el-input>
-            </el-form-item>
-        </el-form>
-        <div class="dialog-footer">
-            <el-button @click="onClose('ruleForm')">取 消</el-button>
-            <el-button type="primary" @click="onSubmit('ruleForm')">确 定</el-button>
-        </div>
+  <div>
+    <el-form :model="form" :rules="rules" ref="ruleForm">
+      <p style="color: red; padding: 0 0 10px 100px">
+        注意:活动所有奖品的中奖概率之和必须等于100%;
+        <br />活动奖品必须选择一个默认奖品,该奖品建议设置为谢谢参与;
+      </p>
+      <el-form-item label="所属活动" prop="groupId" label-width="100PX">
+        <el-select
+          v-model.trim="form.groupId"
+          style="width: 100% !important"
+          placeholder="请选择所属活动"
+          :disabled="true"
+        >
+          <el-option
+            v-for="item in groupList"
+            :key="item.id"
+            :value="item.id"
+            :label="item.name"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-row
+        :gutter="10"
+        v-for="(reword, index) in form.rewordList"
+        :key="index"
+      >
+        <el-col :span="10">
+          <el-form-item
+            :label="`奖品${index + 1}`"
+            label-width="100PX"
+            :prop="'rewordList.' + index + '.name'"
+            :rules="[
+              { required: true, message: '请输入活动名称', trigger: 'blur' },
+            ]"
+          >
+            <el-input
+              v-model.trim="reword.name"
+              autocomplete="off"
+              placeholder="请输入奖品名称"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="5">
+          <el-form-item
+            :prop="'rewordList.' + index + '.chances'"
+            :rules="[
+              { required: true, validator: validNumber, trigger: 'blur' },
+            ]"
+          >
+            <el-input
+              v-model.trim="reword.chances"
+              type="number"
+              autocomplete="off"
+              placeholder="请输入中奖概率"
+            >
+              <i slot="suffix" class="el-input__icon" style="padding-right: 5px"
+                >%</i
+              >
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item
+            :prop="'rewordList.' + index + '.stock'"
+            :rules="[
+              { required: true, validator: validNumber1, trigger: 'blur' },
+            ]"
+          >
+            <el-input
+              v-model.trim="reword.stock"
+              type="number"
+              autocomplete="off"
+              placeholder="请输入库存"
+            >
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="5">
+          <el-form-item
+            :prop="'rewordList.' + index + '.isDefault'"
+            :rules="[
+              {
+                required: true,
+                message: '请输入选择是否默认',
+                trigger: 'blur',
+              },
+            ]"
+          >
+            <el-select
+              v-model.trim="reword.isDefault"
+              style="width: 100% !important"
+              placeholder="请选择是否默认"
+            >
+              <el-option :value="true" label="是"></el-option>
+              <el-option :value="false" label="否"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-form-item
+          label="备注"
+          label-width="100PX"
+          :prop="'rewordList.' + index + '.memo'"
+        >
+          <el-input
+            type="textarea"
+            :rows="2"
+            v-model.trim="reword.memo"
+            autocomplete="off"
+            placeholder="请输入备注"
+          ></el-input>
+        </el-form-item>
+      </el-row>
+      <div style="text-align: center">
+        <el-button
+          :disabled="form.rewordList.length <= 1"
+          class="add-reword"
+          round
+          icon="el-icon-minus"
+          @click="onRemoveReword"
+          >删除奖品</el-button
+        >
+        <el-button
+          class="add-reword"
+          round
+          icon="el-icon-plus"
+          @click="onAddReword"
+          >添加奖品</el-button
+        >
+      </div>
+    </el-form>
+    <div class="dialog-footer">
+      <el-button @click="onClose('ruleForm')">取 消</el-button>
+      <el-button type="primary" @click="onSubmit('ruleForm')">确 定</el-button>
     </div>
+  </div>
 </template>
 
 <script>
-import Tooltip from '@/components/Tooltip/index'
+import Tooltip from "@/components/Tooltip/index";
 import pagination from "@/components/Pagination/index";
-import dayjs from 'dayjs';
-import numeral from 'numeral';
-import cleanDeep from 'clean-deep';
-import { luckDrawPrizeBatchAdd } from './api'
+import dayjs from "dayjs";
+import numeral from "numeral";
+import cleanDeep from "clean-deep";
+import { luckDrawPrizeBatchAdd } from "./api";
 const validNumber1 = (rule, value, callback) => {
-    const re = /^[0-9]+$/
-    if (value == '' && typeof value == 'string' || value == null) {
-        callback(new Error('请输入库存'))
-    } else if (!re.test(value) && value < 0) {
-        callback(new Error('输入库存为正整数'))
-    } else {
-        callback()
-    }
-}
+  const re = /^[0-9]+$/;
+  if ((value == "" && typeof value == "string") || value == null) {
+    callback(new Error("请输入库存"));
+  } else if (!re.test(value) && value < 0) {
+    callback(new Error("输入库存为正整数"));
+  } else {
+    callback();
+  }
+};
 const validNumber = (rule, value, callback) => {
-    if (value == '' && typeof value == 'string' || value == null) {
-        callback(new Error('请输入中奖概率'))
-    } else if (value < 0) {
-        callback(new Error('输入值不能小于0'))
-    } else {
-        callback()
-    }
-}
+  if ((value == "" && typeof value == "string") || value == null) {
+    callback(new Error("请输入中奖概率"));
+  } else if (value < 0) {
+    callback(new Error("输入值不能小于0"));
+  } else {
+    callback();
+  }
+};
 export default {
-    components: { pagination, Tooltip, },
-    props: ['groupList', 'close', 'getList'],
-    data () {
-        return {
-            validNumber1: validNumber1,
-            validNumber: validNumber,
-            form: {
-                groupId: null,
-                rewordList: [{
-                    name: null,
-                    chances: null,
-                    stock: null,
-                    isDefault: null
-                }],
-                memo: null
-            },
-            rules: {
-                groupId: [{required: true, message:'请选择所属活动', trigger: 'change'}]
-            },
-            pageInfo: {
-                // 分页规则
-                limit: 10, // 限制显示条数
-                page: 1, // 当前页
-                total: 1, // 总条数
-                page_size: [10, 20, 40, 50] // 选择限制显示条数
-            }
-        };
+  components: { pagination, Tooltip },
+  props: ["groupList", "close", "getList", "list"],
+  data() {
+    return {
+      validNumber1: validNumber1,
+      validNumber: validNumber,
+      form: {
+        groupId:Number(this.$route.query.groupId),
+        rewordList: [
+          {
+            name: null,
+            chances: null,
+            stock: null,
+            isDefault: null,
+            memo: null,
+          },
+        ],
+      },
+      rules: {
+        groupId: [
+          { required: true, message: "请选择所属活动", trigger: "change" },
+        ],
+      },
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 1, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    if (this.list && Array.isArray(this.list)) {
+      let arr = this.list.map((item) => {
+        return { ...item, chances: item.chances * 100 };
+      });
+      console.log(arr)
+      this.$set(this.form, "rewordList", arr);
+    }
+  },
+  methods: {
+    onRemoveReword() {
+      // 删除奖品
+      let form = this.form;
+      if (form.rewordList.length <= 1) {
+        return;
+      }
+      this.form.rewordList.pop();
     },
-    //生命周期 - 挂载完成(可以访问DOM元素)
-    mounted () {
+    onAddReword() {
+      // 添加奖品
+      let form = this.form;
+      form.rewordList.push({
+        name: null,
+        chances: null,
+        stock: null,
+        isDefault: null,
+      });
     },
-    methods: {
-        onRemoveReword() { // 删除奖品
-            let form = this.form
-            if(form.rewordList.length <= 1) {
-                return
-            }
-            this.form.rewordList.pop()
-        },
-        onAddReword() { // 添加奖品
-            let form = this.form
-            form.rewordList.push({
-                name: null,
-                chances: null,
-                stock: null,
-                isDefault: null
-            })
-        },
-        onSubmit(formName) {
-            this.$refs[formName].validate(item => {
-                if(item) {
-                    let form = Object.assign({}, this.form)
-                    const rewordList = form.rewordList ? form.rewordList : []
-                    let params = []
-                    let chanceCount = 0
-                    rewordList.forEach(item => {
-                        chanceCount += Number(item.chances)
-                        params.push({
-                            name: item.name,
-                            groupId: form.groupId,
-                            chances: numeral(item.chances ? item.chances / 100 : 0).format('0.00'),
-                            stock: item.stock,
-                            isDefault: item.isDefault,
-                            memo: form.memo,
-                            enabled: 1
-                        })
-                    })
-                    if(chanceCount != 100) {
-                        this.$message.error('所有奖品的概率之和必须等于100%')
-                        return
-                    }
-                    luckDrawPrizeBatchAdd(params).then(res => {
-                        this.messageTips('添加', res, formName)
-                    })
-                }
-            })
-        },
-        messageTips (title, res, formName) {
-            if (res.code == 200) {
-                this.$message.success(title + '成功')
-                this.onClose(formName)
-                this.getList()
-            } else {
-                this.$message.error(res.msg)
-            }
-        },
-        onClose(formName) {
-            this.$refs[formName].resetFields()
-            this.close()
+    onSubmit(formName) {
+      this.$refs[formName].validate((item) => {
+        if (item) {
+          let form = Object.assign({}, this.form);
+          const rewordList = form.rewordList ? form.rewordList : [];
+          let params = [];
+          let chanceCount = 0;
+          rewordList.forEach((item) => {
+            chanceCount += Number(item.chances);
+            params.push({
+              name: item.name,
+              groupId: form.groupId,
+              chances: numeral(item.chances ? item.chances / 100 : 0).format(
+                "0.00"
+              ),
+              stock: item.stock,
+              isDefault: item.isDefault,
+              memo: form.memo,
+              enabled: 1,
+            });
+          });
+          if (chanceCount != 100) {
+            this.$message.error("所有奖品的概率之和必须等于100%");
+            return;
+          }
+          luckDrawPrizeBatchAdd(params).then((res) => {
+            this.messageTips("添加", res, formName);
+          });
         }
-    }
+      });
+    },
+    messageTips(title, res, formName) {
+      if (res.code == 200) {
+        this.$message.success(title + "成功");
+        this.onClose(formName);
+        this.getList();
+      } else {
+        this.$message.error(res.msg);
+      }
+    },
+    onClose(formName) {
+      this.$refs[formName].resetFields();
+      this.close();
+    },
+  },
 };
 </script>
 <style lang="less" scoped>
 .dialog-footer {
-    width: 100%;
-    text-align: right;
+  width: 100%;
+  text-align: right;
 }
 
 .reword-list {
-    display: flex;
-    .el-form-item {
-        flex: 1;
-    }
+  display: flex;
+  .el-form-item {
+    flex: 1;
+  }
 }
 
 .add-reword {
-    margin-bottom: 22px;
-    width: 180px;
-    border-style: dashed;
+  margin-bottom: 22px;
+  width: 180px;
+  border-style: dashed;
 }
-</style>
+</style>

+ 14 - 12
src/views/luckyDraw/trophyManager.vue

@@ -10,7 +10,7 @@
       v-permission="'luckDrawPrize/batchAdd'"
       @click="onOperationTrophy('create')"
     >
-      添加
+      {{tableList.length>0?'修改':'添加'}}
     </div>
     <!-- 搜索标题 -->
     <save-form
@@ -26,7 +26,7 @@
           placeholder="请输入奖品名称"
         ></el-input>
       </el-form-item>
-      <el-form-item>
+      <!-- <el-form-item>
         <el-select
           v-model.trim="searchForm.groupId"
           style="width: 100% !important"
@@ -39,7 +39,7 @@
             :label="item.name"
           ></el-option>
         </el-select>
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item>
         <el-button native-type="submit" type="danger">搜索</el-button>
       </el-form-item>
@@ -68,11 +68,11 @@
           prop="stock"
           label="库存"
         ></el-table-column>
-        <el-table-column align="center" prop="enabled" label="是否启用">
+        <!-- <el-table-column align="center" prop="enabled" label="是否启用">
           <template slot-scope="scope">
             {{ scope.row.enabled ? "启用" : "不启用" }}
           </template>
-        </el-table-column>
+        </el-table-column> -->
         <el-table-column align="center" prop="isDefault" label="是否默认">
           <template slot-scope="scope">
             {{ scope.row.isDefault ? "是" : "否" }}
@@ -84,7 +84,7 @@
           </template>
         </el-table-column>
 
-        <el-table-column align="center" label="操作">
+        <!-- <el-table-column align="center" label="操作">
           <template slot-scope="scope">
             <el-button
               @click="onOperationTrophy('update', scope.row)"
@@ -93,16 +93,16 @@
               >修改</el-button
             >
           </template>
-        </el-table-column>
+        </el-table-column> -->
       </el-table>
-      <pagination
+      <!-- <pagination
         sync
         :total.sync="pageInfo.total"
         :page.sync="pageInfo.page"
         :limit.sync="pageInfo.limit"
         :page-sizes="pageInfo.page_size"
         @pagination="getList"
-      />
+      /> -->
     </div>
 
     <el-dialog
@@ -111,9 +111,11 @@
       width="800px"
     >
       <trophy-create
+      v-if="lotteryCreateStatus"
         :groupList="groupList"
         :getList="getList"
         :close="onPopupClose"
+        :list="tableList"
       ></trophy-create>
     </el-dialog>
 
@@ -366,12 +368,12 @@ export default {
     },
     getList() {
       let params = Object.assign({}, this.searchForm);
-      params.rows = this.pageInfo.limit;
-      params.page = this.pageInfo.page;
+      params.rows = 9999;
+      params.page = 1;
       luckDrawPrizeList(cleanDeep(params)).then((res) => {
         if (res.code == 200 && res.data) {
           this.tableList = res.data.rows;
-          this.pageInfo.total = res.data.total;
+          // this.pageInfo.total = res.data.total;
         }
       });
     },

+ 7 - 1
src/views/teachManager/index.vue

@@ -60,7 +60,13 @@
             align="center"
             prop="organNames"
             label="可见分部"
-          ></el-table-column>
+          >
+          <template slot-scope="scope">
+            <div>
+                 <overflow-text :text="scope.row.organNames"></overflow-text>
+            </div>
+          </template>
+          </el-table-column>
           <el-table-column
             align="center"
             prop="musicScoreNum"

+ 1 - 0
vue.config.js

@@ -49,6 +49,7 @@ module.exports = {
   devServer: {
     // port: 443,
     open: false,
+    hot:true,
     disableHostCheck: true,
     // overlay: {
     //   warnings: false,

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.