Bladeren bron

巡演列表

1
mo 3 jaren geleden
bovenliggende
commit
310334c154

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

@@ -224,6 +224,30 @@ function setDetailRoute(accessedRoutes) {
             activeMenu: '/main/main'
           }
         },
+        {
+          name: '乐团会员列表',
+          path: 'teamMemberList',
+          component: () => import('@/views/studentManager/memberList'),
+          hidden: true,
+          meta: {
+            noCache: '1',
+            title: '乐团会员列表',
+            belongTopMenu: "/main",
+            activeMenu: '/main/main'
+          }
+        },
+        {
+          name: '乐团展演列表',
+          path: 'teamShowList',
+          component: () => import('@/views/main/teamShowList'),
+          hidden: true,
+          meta: {
+            noCache: '1',
+            title: '乐团会员列表',
+            belongTopMenu: "/main",
+            activeMenu: '/main/main'
+          }
+        },
         //
       ])
     }

+ 1 - 1
src/views/main/abnormal/title.vue

@@ -36,7 +36,7 @@ export default {
   data() {
     return {
       descs,
-      ignore: ["NO_CLASS_MUSIC_GROUP_STUDENT_INFO","NO_MEMBER_STUDENT_INFO","MEMBER_STUDENT_INFO"], // // 忽略类型
+      ignore: ["NO_CLASS_MUSIC_GROUP_STUDENT_INFO","NO_MEMBER_STUDENT_INFO","MEMBER_STUDENT_INFO","MUSIC_GROUP_PERFORMANCE"], // // 忽略类型
     };
   },
   mounted() {},

+ 7 - 0
src/views/main/api.js

@@ -132,3 +132,10 @@ export const queryStudentLeaveCourseList = (data) => request2({
   params: data
 })
 
+
+// 获取乐团展演列表
+export const getMusicGroupPerformance = (data) => request2({
+  url: '/api-web/musicGroupPerformance/queryNoStartPage',
+  method: 'post',
+  params: data
+})

+ 9 - 2
src/views/main/constant.js

@@ -101,15 +101,22 @@ export const errorType = {
   NO_MEMBER_STUDENT_INFO: {
     name: '当前共有{0}个乐团共{1}名学员会员已过期',
     isError: true,
-    url: '/studentManager/teamMemberList',
+    url: '/main/teamMemberList',
     permission: '/teamMemberList',
     always: true,
     query: {hasMember:'0'}
   },
+  MUSIC_GROUP_PERFORMANCE:{
+    name: '当前共有{0}个乐团共{1}次展演计划',
+    isError: false,
+    url: '/main/teamShowList',
+    permission: '/teamShowList',
+    always: true,
+  },
   MEMBER_STUDENT_INFO:{
     name: '当前共有{0}个乐团共{1}名学员会员即将过期',
     isError: true,
-    url: '/studentManager/teamMemberList',
+    url: '/main/teamMemberList',
     permission: '/teamMemberList',
     always: true,
     query: {hasMember:'1'}

+ 198 - 0
src/views/main/teamShowList.vue

@@ -0,0 +1,198 @@
+ <!--  -->
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      乐团展演列表
+    </h2>
+    <div class="m-core">
+      <save-form
+        :inline="true"
+        ref="searchForm"
+        :model="searchForm"
+        @submit="search"
+        @reset="onReSet"
+      >
+        <el-form-item prop="search">
+          <el-input
+            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
+            v-model.trim="searchForm.organId"
+            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 prop="year">
+          <el-date-picker
+            style="width: 180px !important"
+            v-model="searchForm.year"
+            type="year"
+            value-format="yyyy"
+            placeholder="选择年份"
+            :clearable="false"
+            @change="changeYear"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item prop="term">
+          <el-select
+            :disabled="!searchForm.year"
+            class="multiple"
+            filterable
+            style="width: 180px !important"
+            v-model.trim="searchForm.term"
+            placeholder="请选择学期"
+            @change="changeTerm"
+          >
+            <el-option value="0" label="上学期"></el-option>
+            <el-option value="1" label="下学期"></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="musicGroupName"
+            label="乐团名称"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="musicGroupId"
+            label="乐团编号"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="name"
+            label="展演名称"
+          ></el-table-column>
+          <el-table-column align="center" prop="startTime" label="预计时间">
+            <template slot-scope="scope">
+              <div>{{ scope.row.startTime | dayjsFormat}}</div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="subDay" label="剩余天数">
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="musicScoreName"
+            label="展演曲目"
+          >
+          </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>
+  </div>
+</template>
+
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/Pagination/index";
+import quiteTeam from "@/views/teamDetail/components/modals/quite-team";
+import { StudentQuit } from "@/api/buildTeam";
+import load from "@/utils/loading";
+import { getMusicGroupPerformance } from "./api";
+import visit from "@/views/withdrawal-application/modals/visit";
+import { getTimes } from "@/utils";
+export default {
+  components: { pagination, quiteTeam, visit },
+  data() {
+    return {
+      searchForm: {
+        search: null,
+        organId: null,
+        year: "",
+        term: "",
+      },
+
+      tableList: [],
+      organList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    // 获取分部
+    this.$store.dispatch("setBranchs");
+    this.init();
+  },
+  methods: {
+    init() {
+      this.getList();
+    },
+    async getList() {
+      // 设置时间
+
+      try {
+        const res = await getMusicGroupPerformance({
+          ...this.searchForm,
+          page: this.rules.page,
+          rows: this.rules.limit,
+        });
+        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();
+    },
+  },
+  watch: {},
+};
+</script>
+<style lang='scss' scoped>
+</style>

+ 29 - 0
src/views/resetTeaming/components/archicesComponents/api.js

@@ -156,3 +156,32 @@ export const getQuestionDetail = data => request2({
   requestType:'form'
 
 })
+
+// 新增问卷
+export const addQuestion = data => request2({
+  url: '/api-web/musicGroupQuestionnaire/add',
+  data,
+  method: 'post',
+  requestType:'json'
+
+})
+
+// 获取问卷详情
+export const getMusicGroupQuestionnaireDetail = data => request2({
+  url: '/api-web/musicGroupQuestionnaire/get',
+  data ,
+  params:data,
+  method: 'get',
+  requestType:'form'
+
+})
+
+// 修改问卷详情
+export const resetQuestion = data => request2({
+  url: '/api-web/musicGroupQuestionnaire/update',
+  data,
+  method: 'post',
+  requestType:'json'
+
+})
+

+ 2 - 1
src/views/resetTeaming/components/archicesComponents/baseInfo.vue

@@ -33,7 +33,7 @@
         >{{ baseInfo.schoolName }}
       </descriptions-item>
       <descriptions-item label="衔接老师:">
-        {{ baseInfo.transactionTeacherName }}</descriptions-item
+        {{ baseInfo.transactionTeacherName }}/{{baseInfo.transactionTeacherPhone}}</descriptions-item
       >
       <descriptions-item label="乐队指导:"
         >{{ baseInfo.directorUserName }}
@@ -77,6 +77,7 @@ export default {
         chargeTypeName: "",
         cooperationOrganName: "",
         transactionTeacherName: "",
+        transactionTeacherPhone:"",
         directorUserName: "",
         educationalTeacherName: "",
         cooperationOrganLinkmanList: [],

+ 54 - 7
src/views/resetTeaming/components/archicesComponents/modals/surveyMask.vue

@@ -20,6 +20,7 @@
           :rules="[{ required: true, message: '请选择调查时间' }]"
         >
           <el-date-picker
+            :disabled="isdisabled"
             style="width: 200px !important"
             value-format="yyyy-MM-dd"
             v-model.trim="form.questionTime"
@@ -37,6 +38,7 @@
           :rules="[{ required: true, message: '请填写调查对象' }]"
         >
           <el-input
+            :disabled="isdisabled"
             style="width: 200px !important"
             v-model="form.target"
           ></el-input>
@@ -50,23 +52,25 @@
       />
 
       <el-row
-        v-for="(item, index) in form.questionnaireUserResult"
+        v-for="(item, index) in form.questionnaireUserResultList"
         :key="index"
       >
         <!--  :rules="[{ required: item.isRequire, message: '请选择问卷信息' }]" -->
         <el-form-item
           :prop="
-            'questionnaireUserResult.' +
+            'questionnaireUserResultList.' +
             index +
             '.questionnaireQuestionItemIdList'
           "
         >
           <p>{{ index + 1 }}{{ item.content }}</p>
           <el-select
+            :disabled="isdisabled"
             v-if="item.type == 'radio'"
             v-model="item.questionnaireQuestionItemIdList"
             placeholder="请选择答案"
             @change="changeSelect"
+            style="width: 585px !important"
           >
             <el-option
               :label="subject.answerValue"
@@ -76,11 +80,13 @@
             ></el-option>
           </el-select>
           <el-select
+            :disabled="isdisabled"
             v-else-if="item.type == 'checkbox'"
             v-model="item.questionnaireQuestionItemIdList"
             placeholder="请选择答案"
             multiple
             @change="changeSelect"
+            style="width: 585px !important"
           >
             <el-option
               :label="subject.answerValue"
@@ -90,9 +96,10 @@
             ></el-option>
           </el-select>
           <el-input
+            :disabled="isdisabled"
             v-else-if="item.type == 'textarea'"
             type="textarea"
-            style="border: 0"
+            style="border: 0; width: 585px !important"
             :autosize="{ minRows: 3, maxRows: 6 }"
             placeholder="请输入其它意见"
             v-model="item.questionnaireQuestionItemIdList"
@@ -105,18 +112,21 @@
   </div>
 </template>
 <script>
+import { addQuestion, resetQuestion } from "../api";
 export default {
-  props: ["form"],
+  props: ["form", "isdisabled"],
   data() {
     return {};
   },
-  mounted() {},
+  mounted() {
+    console.log(this.form.id);
+  },
   methods: {
     submitSurvey() {
       let flag = true;
       let str;
-      for (let quests in this.form.questionnaireUserResult) {
-        let quest = this.form.questionnaireUserResult[quests];
+      for (let quests in this.form.questionnaireUserResultList) {
+        let quest = this.form.questionnaireUserResultList[quests];
         if (
           !(
             quest.isRequire &&
@@ -134,6 +144,30 @@ export default {
         this.$message.error(str);
         return;
       }
+      this.$refs.form.validate(async (flag) => {
+        if (flag) {
+          let obj = this.setObj();
+          if (this.form.id) {
+            // 修改
+            try {
+              const res = await resetQuestion(obj);
+              this.$message.success("修改成功");
+              this.$emit("close");
+            } catch (e) {
+              console.log(e);
+            }
+          } else {
+            // 新增
+            try {
+              const res = await addQuestion(obj);
+              this.$message.success("新增成功");
+              this.$emit("close");
+            } catch (e) {
+              console.log(e);
+            }
+          }
+        }
+      });
       console.log(this.form);
     },
     changeSelect() {
@@ -142,6 +176,19 @@ export default {
     setTextarea(event, val) {
       this.$forceUpdate();
     },
+    setObj() {
+      this.form.questionnaireUserResultList.forEach((quest) => {
+        if (quest.type == "textarea") {
+          quest.additionalValue = quest.questionnaireQuestionItemIdList;
+          //  quest.questionnaireQuestionItemIdList= ''
+        } else if (quest.type == "checkbox") {
+          if (Array.isArray(quest.questionnaireQuestionItemIdList))
+            quest.questionnaireQuestionItemIdList =
+              quest.questionnaireQuestionItemIdList.join(",");
+        }
+      });
+      return { ...this.form };
+    },
   },
   watch: {},
 };

+ 4 - 3
src/views/resetTeaming/components/archicesComponents/studentAndTeacher.vue

@@ -22,7 +22,7 @@
           :key="index"
         >
           <span class="col-title">{{ item.key }}:</span>
-          <span class="col-value" @click="getSoundInfo(item.value)"
+          <span class="col-value" @click="getSoundInfo(item.courseScheduleId)"
             >{{ item.value }}人</span
           >
         </el-col>
@@ -32,8 +32,8 @@
     <el-divider class="divider"></el-divider>
     <el-row class="row">
       <el-col class="col" :span="6" v-for="(item, index) in grade" :key="index">
-        <span class="col-title">{{ item.key }}:</span>
-        <span class="col-value" @click="getGradeInfo(item.key)"
+        <span class="col-title">{{ gradeMap[item.key ]}}:</span>
+        <span class="col-value" @click="getGradeInfo(gradeMap[item.key ])"
           >{{ item.value }}人</span
         >
       </el-col>
@@ -131,6 +131,7 @@ export default {
         musicGroupId: this.$route.query.id,
       });
       this.grade = res.data.grade;
+      this.gradeMap = res.data.gradeMap
       this.subject = res.data.subject;
       this.teacher = res.data.teacher;
     } catch (e) {

+ 103 - 34
src/views/resetTeaming/components/archicesComponents/survey.vue

@@ -18,10 +18,15 @@
       :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
     >
       <el-table-column align="center" prop="title" label="调查时间">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.questionTime | formatTimer }}
+          </div>
+        </template>
       </el-table-column>
-      <el-table-column align="center" prop="author" label="调查对象">
+      <el-table-column align="center" prop="target" label="调查对象">
       </el-table-column>
-      <el-table-column align="center" prop="linkUrl" label="调查人">
+      <el-table-column align="center" prop="operatorName" label="调查人">
       </el-table-column>
       <el-table-column align="center" prop="id" label="操作">
         <template slot-scope="scope">
@@ -55,8 +60,12 @@
       width="800px"
       v-if="surveyVisible"
     >
-
-      <surveyMask :form="form"  ref="surveyMask"/>
+      <surveyMask
+        :form="form"
+        ref="surveyMask"
+        :isdisabled="isdisabled"
+        @close="close"
+      />
 
       <span slot="footer" class="dialog-footer">
         <el-button @click="surveyVisible = false">取 消</el-button>
@@ -66,7 +75,11 @@
   </div>
 </template>
 <script>
-import { getMusicGroupQuestionnaire, getQuestionDetail } from "./api";
+import {
+  getMusicGroupQuestionnaire,
+  getQuestionDetail,
+  getMusicGroupQuestionnaireDetail,
+} from "./api";
 import surveyMask from "./modals/surveyMask";
 import pagination from "@/components/Pagination/index";
 export default {
@@ -88,39 +101,50 @@ export default {
       form: {
         questionTime: "",
         target: "",
-        musicGroupId:'',
-        questionnaireUserResult:[]
+        musicGroupId: "",
+        questionnaireUserResultList: [],
+        isdisabled: false,
       },
     };
   },
   async mounted() {
     this.getList();
-    this.setQuestion()
   },
   methods: {
     async setQuestion() {
       try {
         const res = await getQuestionDetail();
-        this.questionList = res.data;
-        this.form.musicGroupId = this.$route.query.id;
-
-        let questionnaireUserResult=
-          this.questionList.questionnaireQuestionList.map((item) => {
-            if (item.type == "radio") {
-              item.questionnaireQuestionItemIdList = null;
-            }
-            if (item.type == "checkbox") {
-              item.questionnaireQuestionItemIdList = [];
-            }
-            if (item.type == "textarea") {
-              item.questionnaireQuestionItemIdList = null;
-            }
-            return item;
-          });
-
-          this.$set(this.form, 'questionnaireUserResult',questionnaireUserResult)
+        this.setQuestionInfo(res.data);
       } catch (e) {}
     },
+    setQuestionInfo(data) {
+      this.questionList = data;
+      this.form.musicGroupId = this.$route.query.id;
+      this.form.target = null;
+      this.form.id = null;
+      this.form.questionTime =null;
+      let questionnaireUserResult =
+        this.questionList.questionnaireQuestionList.map((item) => {
+          if (item.type == "radio") {
+            item.questionnaireQuestionItemIdList = null;
+          }
+          if (item.type == "checkbox") {
+            item.questionnaireQuestionItemIdList = [];
+          }
+          if (item.type == "textarea") {
+            item.questionnaireQuestionItemIdList = null;
+          }
+          item.questionnaireQuestionId = item.id;
+          return item;
+        });
+
+      this.$set(
+        this.form,
+        "questionnaireUserResultList",
+        questionnaireUserResult
+      );
+      this.$refs.surveyMask.$refs.form.resetFields()
+    },
     async getList() {
       try {
         const res = await getMusicGroupQuestionnaire({
@@ -134,20 +158,65 @@ export default {
         console.log(e);
       }
     },
-    lookSurvey(row) {},
-    resetSurvey(row) {},
+    async lookSurvey(row) {
+       this.surveyTitle = "查看满意度调查"
+      await this.setDetail(row);
+      this.isdisabled = true;
+      this.surveyVisible = true;
+      // 查询详情
+    },
+    async setDetail(row) {
+      await this.setQuestion();
+      this.activeRow = row;
+      try {
+        const res = await getMusicGroupQuestionnaireDetail({ id: row.id });
+        res.data.questionResult.forEach((asker) => {
+          this.form.questionnaireUserResultList.forEach((quest) => {
+            if (quest.id == asker.questionnaireQuestionId) {
+              quest.questionnaireQuestionItemIdList =
+                asker.questionnaireQuestionItemIdList;
+              if (
+                quest.type == "checkbox" &&
+                !Array.isArray(quest.questionnaireQuestionItemIdList)
+              ) {
+                quest.questionnaireQuestionItemIdList =
+                  quest.questionnaireQuestionItemIdList.split(",");
+              }
+            }
+          });
+        });
+        this.form.musicGroupId = res.data.musicGroupQuestionnaire.musicGroupId;
+        this.form.target = res.data.musicGroupQuestionnaire.target;
+        this.form.id = res.data.musicGroupQuestionnaire.id;
+        this.form.questionTime = res.data.musicGroupQuestionnaire.questionTime;
+      } catch (e) {
+        console.log(e);
+      }
+    },
+    async resetSurvey(row) {
+      this.surveyTitle = "修改满意度调查"
+      await this.setDetail(row);
+      this.isdisabled = false;
+      this.surveyVisible = true;
+    },
     deleteSurvey(row) {},
-    addSurvey() {
+  async  addSurvey() {
       (this.activeRow = null), (this.surveyTitle = "新增满意度调查");
+     await this.setQuestion();
+      this.isdisabled = false;
       this.surveyVisible = true;
     },
     submitSurvey() {
-      this.$refs.surveyMask.submitSurvey()
+      if (this.isdisabled) {
+        this.surveyVisible = false;
+        return;
+      }
+      this.$refs.surveyMask.submitSurvey();
+    },
+    close() {
+      this.surveyVisible = false;
+      this.getList();
     },
-       changeSelect(){
-
-      this.$forceUpdate()
-    }
   },
 };
 </script>

+ 7 - 3
src/views/studentManager/memberList.vue

@@ -9,10 +9,11 @@
       <save-form
         :inline="true"
         :model="searchForm"
+        ref="searchForm"
         @submit="search"
         @reset="onReSet"
       >
-        <el-form-item>
+        <el-form-item prop="search">
           <el-input
             v-model.trim="searchForm.search"
             clearable
@@ -55,7 +56,7 @@
             <el-option label="即将过期" value="1"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item>
+        <el-form-item prop="visitTime">
           <el-date-picker
             v-model.trim="searchForm.visitTime"
             style="width: 410px"
@@ -319,7 +320,10 @@ export default {
       this.rules.page = 1;
       this.getList();
     },
-    onReSet() {},
+    onReSet() {
+       this.$refs["searchForm"].resetFields();
+       this.search()
+    },
     quitTeam(row) {
       this.activeRow = row;
       this.quitVisible = true;