lex-xin il y a 6 mois
Parent
commit
2d16e7aa8f

+ 1 - 0
src/views/attendanceManager/attendanceList/components/courseWorkeDetail.vue

@@ -79,6 +79,7 @@
       >
         <div v-if="activeName == 'second'">
           <textConment
+            :courseDetail="courseDetail"
             :trainingDetailList="trainingGroupList"
             :courseScheduleId="courseScheduleId"
           />

+ 2 - 2
src/views/attendanceManager/attendanceList/components/textConment.vue

@@ -71,7 +71,7 @@
 <script>
 import { getHomeworkSubjectPublic } from "../api";
 export default {
-  props: ["trainingDetailList", "courseScheduleId"],
+  props: ["trainingDetailList", "courseScheduleId", "courseDetail"],
   data() {
     return {
       subjectId: [],
@@ -81,7 +81,7 @@ export default {
     };
   },
   mounted() {
-    console.log(this.trainingDetailList);
+    console.log(this.trainingDetailList, this.courseDetail, "courseDetail");
     this.fitterTraining = this.trainingDetailList.map(item => item);
     // this.getPublicSubject();
   },

+ 17 - 2
src/views/studentManager/api.js

@@ -45,6 +45,21 @@ export const setStudentMembe = data =>
   request2({
     url: "/api-web/studentManage/updateStudentMember",
     method: "post",
-    data: data,
-    requestType: "form"
+    data: data
   });
+
+//  学练宝记录
+export const api_studentMemberUpdateLog = data =>
+  request2({
+    url: "/api-web/studentMemberUpdateLog/page",
+    method: "post",
+    data: data
+  });
+
+// 用户信息
+export const api_studentManageUserInfo = data =>
+  request2({
+    url: "/api-web/studentManage/queryUserInfo",
+    method: "get",
+    params: data
+  });

+ 112 - 36
src/views/studentManager/modals/setMemberDate.vue

@@ -1,22 +1,59 @@
 <template>
   <div>
     <!-- <p class="title">已选择{{ multipleSelection.length }}名学员</p> -->
-    <el-form :model="memberForm" label-width="100px" ref="memberForm">
-      <el-form-item label="到期日期" prop="endTime">
-        <el-date-picker
-          style="width: 360px !important"
-          v-model.trim="memberForm.endTime"
-          align="right"
-          type="date"
-          placeholder="选择日期"
-          value-format="yyyy-MM-dd"
-          :picker-options="pickerOptions"
-        ></el-date-picker>
+    <el-form :model="memberForm" label-width="110px" ref="memberForm">
+      <el-form-item label="学练宝版本" prop="memberRankSettingId" :rules="[
+          { required: true, message: '请选择学练宝版本' }
+        ]">
+        <el-cascader
+          v-model.trim="memberForm.memberRankSettingId"
+          :options="memberRankList"
+          :props="{ value: 'id', label: 'name'  }"
+          :show-all-levels="false"
+          style="width: 100% !important"
+          collapse-tags
+          clearable
+          placeholder="请选择学练宝版本"
+          @change="formatCloudInfo"
+        ></el-cascader>
+        <div v-if="selectItem.memberRankId">{{ selectItem.memberRankName }}剩余<span style="color: red;">{{ selectItem.remainingDays }}</span>天</div>
+      </el-form-item>
+      <el-form-item :label="`${staffText}周期`" prop="periodType" :rules="[
+          { required: true, message: '请选择周期' }
+        ]">
+        <el-select
+          placeholder="请选择周期"
+          clearable
+          v-model.trim="memberForm.periodType"
+          style="width: 100% !important"
+          :disabled="type !== 'add'"
+        >
+          <el-option v-if="type !== 'add'" label="天" value="DAY"></el-option>
+          <el-option label="月度" value="MONTH"></el-option>
+          <el-option label="季度" value="QUARTERLY"></el-option>
+          <el-option label="半年" value="YEAR_HALF"></el-option>
+          <el-option label="年度" value="YEAR"></el-option>
+        </el-select>
+      </el-form-item>
+        <el-form-item
+        :label="`${staffText}数量`"
+        prop="number"
+        :rules="[
+          { required: true, message: '请输入数量', trigger: 'blur' }
+        ]"
+      >
+        <el-input
+          type="number"
+          onKeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)))"
+          v-model="memberForm.number"
+          placeholder="请输入数量"
+        >
+        </el-input>
       </el-form-item>
       <el-form-item
-        label="备注"
+        :label="`${staffText}原因`"
         prop="memo"
-        :rules="[{ required: true, message: '请输入备注', trigger: 'blur' }]"
+        :rules="[{ required: true, message: '请输入原因', trigger: 'blur' }]"
       >
         <el-input
           type="textarea"
@@ -24,56 +61,95 @@
           maxlength="100"
           :rows="3"
           v-model.trim="memberForm.memo"
-          placeholder="请输入备注"
+          placeholder="请输入原因"
         ></el-input>
       </el-form-item>
+      <el-form-item label="是否发送推送" prop="pushFlag" :rules="[
+          { required: true, message: '是否发送推送', trigger: 'blur' }
+        ]">
+        <el-radio-group v-model="memberForm.pushFlag">
+          <el-radio :label="1">是</el-radio>
+          <el-radio :label="0">否</el-radio>
+        </el-radio-group>
+      </el-form-item>
     </el-form>
+
+    <div slot="footer" class="dialog-footer" style="text-align: right;">
+      <el-button @click="onClose">取 消</el-button>
+      <el-button type="primary" @click="onSubmit">确 定</el-button>
+    </div>
   </div>
 </template>
 <script>
 import { setStudentMembe } from "../api";
-import { getmemberRankOrganizationFeeMapper } from "@/views/categroyManager/productSystem/api";
-import { sysConfigList } from "@/api/generalSettings"; // 平台的修改和查
+import { getmemberRankList } from '@/views/categroyManager/productSystem/api'
 export default {
   props: ["row", "type"],
   data() {
     return {
+      memberRankList: [],
       memberForm: {
-        userId: null,
-        endTime: null,
+        studentId: null,
+        memberRankSettingId: null,
+        number: null,
+        periodType: null,
         memo: null,
+        pushFlag: 1
       },
-      userIds: [],
       organId: null,
       rulesForm: null, // 范围
       memberFeeSetting: null,
-      pickerOptions: {
-        firstDayOfWeek: 1,
-        disabledDate(time) {
-          return time.getTime() < new Date().getTime() - 86400000;
-        },
-      },
+      selectItem: {}
     };
   },
+  computed: {
+    staffText() {
+      return this.type === 'add' ? '添加' : '扣减'
+    }
+  },
   mounted() {
-    console.log(this.row, "mounted");
-
-    this.memberForm.userId = this.row.userId;
-    this.memberForm.endTime = this.row.membershipEndTime;
-    console.log(this.memberForm);
+    this.memberForm.studentId = this.row.student.userId;
+    if(this.type !== "add") {
+      this.memberForm.periodType = "DAY"
+    }
+    this.getMemberList()
   },
   methods: {
-    async __init() {},
-
-    submit() {
+    async getMemberList() {
+      try {
+        const { data } = await getmemberRankList({ studentId: this.type === 'add' ? null : this.memberForm.studentId })
+        this.memberRankList = data || [];
+      } catch (e) {
+        console.log(e);
+      }
+    },
+    formatCloudInfo(val) {
+      const vipInfo = this.row.vipInfo || []
+      let rankId = val ? val[val.length - 1] : null
+      let selectItem = {}
+      vipInfo.forEach(item => {
+        if(item.memberRankId === rankId) {
+          selectItem = item
+        }
+      })
+      this.selectItem = selectItem
+    },
+    onClose() {
+      this.$emit("close");
+    },
+    onSubmit() {
       this.$refs.memberForm.validate(async (res) => {
-        console.log(res, this.type, "res");
         if (res) {
           try {
-            const res = await setStudentMembe({ ...this.memberForm });
+            const { memberRankSettingId, ...more } = this.memberForm
+            let rankId = null;
+            if(memberRankSettingId && memberRankSettingId.length > 0) {
+              rankId = memberRankSettingId[memberRankSettingId.length - 1]
+            }
+            await setStudentMembe({ ...more, memberRankId: rankId, type: this.type === 'add' ? 2 : 3});
             this.$message.success("修改成功");
             this.$emit("close");
-            this.$emit("submited");
+            this.$emit("confirm");
           } catch (e) {
             console.log(e);
           }

+ 269 - 0
src/views/studentManager/modals/setMemberList.vue

@@ -0,0 +1,269 @@
+<template>
+  <div>
+    <save-form
+        :inline="true"
+        class="searchForm"
+        @submit="onSearch"
+        @reset="onReSet"
+        ref="saveForm"
+        save-key="studentLit-memberChange"
+        :model.sync="searchForm"
+      >
+      <el-form-item prop="memberRankSettingId">
+        <el-cascader
+          v-model.trim="searchForm.memberRankSettingId"
+          :options="memberRankList"
+          :props="{ value: 'id', label: 'name'  }"
+          :show-all-levels="false"
+          collapse-tags
+          clearable
+          placeholder="请选择学练宝版本"
+        ></el-cascader>
+      </el-form-item>
+      <el-form-item prop="buyType">
+        <el-select
+            class="multiple"
+            v-model.trim="searchForm.buyType"
+            clearable
+            placeholder="请选择变更方式"
+          >
+            <el-option label="自行购买" value="1"></el-option>
+            <el-option label="后台添加" value="2"></el-option>
+            <el-option label="后台扣减" value="3"></el-option>
+          </el-select>
+      </el-form-item>
+      <el-form-item prop="operatorName">
+          <el-input
+            clearable
+            placeholder="请输入操作人"
+            @keydown.enter.native="
+              e => {
+                e.target.blur();
+                $refs.saveForm.save();
+                onSearch();
+              }
+            "
+            v-model.trim="searchForm.operatorName"
+          ></el-input>
+        </el-form-item>
+        <el-form-item prop="timer">
+          <el-date-picker
+            :clearable="false"
+            v-model.trim="searchForm.timer"
+            style="width: 420px"
+            type="daterange"
+            value-format="yyyy-MM-dd"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            :picker-options="{
+              firstDayOfWeek: 1
+            }"
+          >
+          </el-date-picker>
+        </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>
+
+      <el-button
+        @click="operationTimer('add')"
+        type="primary"
+        style="margin-bottom: 20px"
+        v-if="$helpers.permission('studentManage/updateStudentMember')"
+      >
+        添加时长
+      </el-button>
+      <el-button
+        @click="operationTimer('plus')"
+        type="default"
+        style="margin-bottom: 20px"
+         v-if="$helpers.permission('studentManage/updateStudentMember')"
+      >
+        扣减时长
+      </el-button>
+    <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+        <el-table-column
+            align="center"
+            prop="buyType"
+            label="变更方式"
+          >
+          <template slot-scope="scope">
+            {{ scope.row.buyType | filterBuyType }}   
+          </template>
+        </el-table-column>
+          <el-table-column
+            align="center"
+            prop="memberRankSettingName"
+            label="学练宝版本"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="type"
+            label="周期"
+          >
+          <template slot-scope="scope">
+            {{ scope.row.type | memberEnumType }}   
+          </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="time"
+            label="数量"
+          ></el-table-column>
+          <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="activeDate" label="添加原因">
+            <template slot-scope="scope">
+              <Tooltip
+                :content="
+                  scope.row.memo
+                    ? scope.row.memo
+                    : '--'
+                "
+              />
+            </template>
+          </el-table-column>
+      </el-table>
+      <pagination
+          sync
+          save-key="studentLit-memberChange"
+          :total.sync="pageInfo.total"
+          :page.sync="pageInfo.page"
+          :limit.sync="pageInfo.limit"
+          :page-sizes="pageInfo.page_size"
+          @pagination="getList"
+        />
+    </div>
+
+    <el-dialog
+      :title="`${operationType === 'add' ? '添加': '扣减'}学练宝`"
+      width="600px"
+      :visible.sync="cloudDateVisible"
+      append-to-body
+      @close="() => {
+          getList()
+          getUserInfo()
+        }"
+    >
+      <setMemberDate
+        v-if="cloudDateVisible"
+        :memberRankList="memberRankList"
+        :type="operationType"
+        :row="userDetail"
+        @close="cloudDateVisible = false"
+        @confirm="() => {
+          getList()
+          getUserInfo()
+        }"
+      ></setMemberDate>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import setMemberDate from "./setMemberDate";
+import pagination from "@/components/Pagination/index";
+import Tooltip from "@/components/Tooltip";
+import { api_studentMemberUpdateLog, api_studentManageUserInfo } from "../api";
+import { getTimes } from "@/utils";
+export default {
+  props: ["row", "type", "memberRankList"],
+  components: {
+    pagination,
+    Tooltip,
+    setMemberDate
+  },
+  data() {
+    return {
+      userDetail: {},
+      cloudDateVisible: false,
+      searchForm: {
+        memberRankSettingId: null,
+        buyType: null,
+        operatorName: null,
+        timer: null,
+      },
+      tableList: [],
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      },
+      operationType: 'add',
+    };
+  },
+  mounted() {
+    this.getUserInfo()
+    this.getList()
+  },
+  methods: {
+    async getUserInfo() {
+      try {
+        const { data } = await api_studentManageUserInfo({ userId: this.row.userId })
+        this.userDetail = data;
+        console.log(data, 'data----')
+      } catch {}
+    },
+    async getList() {
+      try {
+        const { timer, memberRankSettingId, ...more } = this.searchForm
+        let rankId = null;
+        if(memberRankSettingId && memberRankSettingId.length > 0) {
+          rankId = memberRankSettingId[memberRankSettingId.length - 1]
+        }
+        let params = { ...more, ...getTimes(timer, ["startTime", "endTime"]), userId: this.row.userId, memberRankSettingId: rankId };
+        const { data } = await api_studentMemberUpdateLog(params)
+        this.tableList = data.rows || []
+        this.pageInfo.total = data.total || 0
+      } catch {}
+    },
+    onSearch() {
+      this.pageInfo.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.$nextTick(() => {
+        this.onSearch();
+      });
+    },
+    operationTimer(type) {
+      this.operationType = type
+      this.cloudDateVisible = true
+    }
+  },
+  filters: {
+    filterBuyType(type) {
+      const template = {
+        1: '自行购买',
+        2: '后台添加',
+        3: '后台扣减',
+      }
+      return template[type]
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+.title {
+  margin-bottom: 30px;
+  font-size: 16px;
+  color: #000;
+}
+</style>

+ 11 - 19
src/views/studentManager/studentList.vue

@@ -530,7 +530,7 @@
                     <el-dropdown-item
                       style="width: 180px"
                       v-if="
-                        $helpers.permission('studentManage/updateStudentMember')
+                        $helpers.permission('studentMemberUpdateLog/page')
                       "
                       @click.native="setClound(scope.row)"
                     >
@@ -982,20 +982,18 @@
     </el-dialog>
     <el-dialog
       title="学练宝时长调整"
-      width="500px"
+      width="1250px"
       :visible.sync="cloundDateVisible"
+      @close="() => {
+          getList()
+        }"
     >
-      <setMemberDate
+      <setMemberList
         v-if="cloundDateVisible"
+        :memberRankList="memberRankList"
         :row="activatedRow"
-        ref="submitDateReset"
         @close="cloundDateVisible = false"
-        @submited="getList"
-      ></setMemberDate>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="cloundDateVisible = false">取 消</el-button>
-        <el-button type="primary" @click="submitDateReset">确 定</el-button>
-      </div>
+      ></setMemberList>
     </el-dialog>
 
     <el-dialog
@@ -1035,16 +1033,13 @@ import { getGradeList } from "@/views/2021memeberActionManager/api";
 import qrCode from "@/components/QrCode/index";
 import { vaildStudentUrl } from "@/utils/validate";
 import { resetPassword2, getTeacher, getAgreement } from "@/api/buildTeam";
-import {
-  organizationCloudTeacherFeeQueryPage,
-  subjectListTree
-} from "@/api/specialSetting";
+import { subjectListTree } from "@/api/specialSetting";
 import axios from "axios";
 import qs from "qs";
 import { getToken, getTenantId } from "@/utils/auth";
 import load from "@/utils/loading";
 import createMember from "./modals/createMember";
-import setMemberDate from "./modals/setMemberDate";
+import setMemberList from "./modals/setMemberList";
 import studentExt from "./modals/studentExt";
 import Tooltip from "@/components/Tooltip";
 import { getmemberRankList } from '@/views/categroyManager/productSystem/api'
@@ -1057,7 +1052,7 @@ export default {
     protocolModel,
     studentExt,
     Tooltip,
-    setMemberDate
+    setMemberList
   },
   data() {
     return {
@@ -1194,9 +1189,6 @@ export default {
       this.cloundDateVisible = true;
       console.log(row, "setClound");
     },
-    submitDateReset() {
-      this.$refs.submitDateReset.submit();
-    },
     async getAgreement() {
       try {
         const res = await getAgreement();