ソースを参照

Merge branch '03/03GRADE' into 11/24SAAS

mo 3 年 前
コミット
68ab8f2836

+ 7 - 0
src/constant/index.js

@@ -447,3 +447,10 @@ export const feedbackType = {
   'PAUSE':'暂停',
   'OTHER':'其他'
 }
+
+export const feedbackTypeDesc = {
+  'PRICE':'价格原因',
+  'TIME':'时间原因',
+  'TEACHING':'教学不满意',
+  'OTHER':'其他'
+}

+ 1 - 0
src/permission.js

@@ -100,6 +100,7 @@ router.beforeEach(async (to, from, next) => {
         // router.addRoutes(accessRoutes)
           next()
       } else {
+
         try {
           // 异步获取用户信息
           await store.dispatch('user/getInfo')

+ 847 - 845
src/utils/searchArray.js

@@ -1,845 +1,847 @@
-// 搜索用的下拉数据列表
-import {
-  payOrderType,
-  auditType,
-  auditPaymentType,
-  orderServerType,
-  orderAuditType,
-  rewardModeType,
-  classTime,
-  musicClassType,
-  ProbationPeriodStatus,
-  downListType,
-  musicGroupType,
-  conclusion,
-  vipResetType,
-  courseViewType,
-  clientType,
-  couponType,
-  backType,
-  memberEnum,
-  coupontypeDetail,
-  issue,
-  feedbackType
-} from '../constant'
-// 课程类型
-let tenantConfig = sessionStorage.getItem('tenantConfig')
-tenantConfig = tenantConfig ? JSON.parse(tenantConfig) : {}
-let tenantId = tenantConfig.tenantId
-let  courseType = null
-let musicCourseType = null
-if (tenantId == 1) {
-  musicCourseType = [{
-    label: "声部课",
-    value: "SINGLE"
-  },
-  {
-    label: "合奏课",
-    value: "MIX"
-  },
-  {
-    label: "基础技能课",
-    value: "HIGH"
-  },
-  {
-    label: "线上基础技能课",
-    value: "HIGH_ONLINE"
-  },
-  {
-    label: "乐团网管课",
-    value: "MUSIC_NETWORK"
-  },
-  {
-    label: "集训声部课",
-    value: "TRAINING_SINGLE"
-  },
-  {
-    label: "集训合奏课",
-    value: "TRAINING_MIX"
-  },
-  {
-    label: "课堂课",
-    value: "CLASSROOM"
-  },
-  {
-    label: "综合课",
-    value: "COMPREHENSIVE"
-  },
-]
-   courseType= [{
-      label: "声部课",
-      value: "SINGLE"
-    },
-    {
-      label: "合奏课",
-      value: "MIX"
-    },
-    {
-      label: "基础技能课",
-      value: "HIGH"
-    },
-    {
-      label: "线上基础技能课",
-      value: "HIGH_ONLINE"
-    },
-    {
-      label: "vip课",
-      value: "VIP"
-    },
-    {
-      label: "试听课",
-      value: "DEMO"
-    },
-    {
-      label: "综合课",
-      value: "COMPREHENSIVE"
-    },
-    {
-      label: "网管课",
-      value: "PRACTICE"
-    },
-    {
-      label: "乐团网管课",
-      value: "MUSIC_NETWORK"
-    },
-    {
-      label: "启蒙课",
-      value: "ENLIGHTENMENT"
-    },
-    {
-      label: "集训声部课",
-      value: "TRAINING_SINGLE"
-    },
-    {
-      label: "集训合奏课",
-      value: "TRAINING_MIX"
-    },
-    {
-      label: "课堂课",
-      value: "CLASSROOM"
-    },
-    {
-      label: "对外课",
-      value: "COMM"
-    }
-  ]
-} else {
-  musicCourseType = [{
-    label: "声部课",
-    value: "SINGLE"
-  },
-  {
-    label: "合奏课",
-    value: "MIX"
-  },
-  {
-    label: "基础技能课",
-    value: "HIGH"
-  },
-
-  {
-    label: "集训声部课",
-    value: "TRAINING_SINGLE"
-  },
-  {
-    label: "集训合奏课",
-    value: "TRAINING_MIX"
-  },
-  {
-    label: "课堂课",
-    value: "CLASSROOM"
-  },
-  {
-    label: "综合课",
-    value: "COMPREHENSIVE"
-  },
-]
-   courseType = [{
-      label: "声部课",
-      value: "SINGLE"
-    },
-    {
-      label: "合奏课",
-      value: "MIX"
-    },
-    {
-      label: "vip课",
-      value: "VIP"
-    },
-    {
-      label: "试听课",
-      value: "DEMO"
-    },
-    {
-      label: "综合课",
-      value: "COMPREHENSIVE"
-    },
-    {
-      label: "网管课",
-      value: "PRACTICE"
-    },
-
-    {
-      label: "启蒙课",
-      value: "ENLIGHTENMENT"
-    },
-    {
-      label: "集训声部课",
-      value: "TRAINING_SINGLE"
-    },
-    {
-      label: "集训合奏课",
-      value: "TRAINING_MIX"
-    },
-    {
-      label: "课堂课",
-      value: "CLASSROOM"
-    },
-    {
-      label: "对外课",
-      value: "COMM"
-    }
-  ]
-}
-
-export {courseType,musicCourseType};
-
-
-
-
-
-export const courseListType = [{
-    label: "乐团课",
-    value: "MUSIC"
-  },
-  {
-    label: "VIP课",
-    value: "VIP"
-  },
-  {
-    label: "网管课",
-    value: "PRACTICE"
-  },
-]
-
-// 考勤状态
-export const attendance = [{
-    label: '正常签到',
-    value: 1
-  },
-  {
-    label: '异常签到',
-    value: 0
-  },
-]
-
-// 工作类型
-export const jobNature = [{
-    label: '兼职',
-    value: 'PART_TIME'
-  },
-  {
-    label: '全职',
-    value: 'FULL_TIME'
-  },
-  {
-    label: '劳务',
-    value: 'LABOUR'
-  }
-  // { label: '临时工', value: 'TEMPORARY' }
-]
-
-// 老师状态
-export const teacherStatus = [{
-    label: '正常',
-    value: '0'
-  },
-  {
-    label: '冻结',
-    value: '1'
-  },
-  {
-    label: '锁定',
-    value: '9'
-  }
-]
-export const stuAttendance = [{
-    value: "NORMAL",
-    label: "正常"
-  },
-  {
-    value: "TRUANT",
-    label: "旷课"
-  },
-  {
-    value: "LEAVE",
-    label: "请假"
-  }
-]
-
-// 考勤状态
-export const attendanceStatus = [
-  ...stuAttendance,
-  {
-    value: "QUIT_SCHOOL",
-    label: "休学"
-  },
-  {
-    value: "DROP_OUT",
-    label: "退学"
-  },
-  {
-    value: "LATE",
-    label: "迟到"
-  }
-  // { value: "DROP_OUT", label: "休学" }
-]
-
-
-// 交易状态
-export const orderStatus = [{
-    value: "APPLY",
-    label: "报名"
-  },
-  {
-    value: "RENEW",
-    label: "续费"
-  },
-  {
-    value: "MEMBER",
-    label: "会员购买"
-  },
-  {
-    value: "SMALL_CLASS_TO_BUY",
-    label: "VIP购买"
-  },
-  {
-    value: "SPORADIC",
-    label: "零星收费"
-  },
-  {
-    value: "LUCK",
-    label: "福袋活动"
-  },
-  {
-    value: "DEGREE_REGISTRATION",
-    label: "考级报名"
-  },
-  {
-    value: "DOUBLE_ELEVEN2020",
-    label: "2020双十一活动"
-  },
-  {
-    value: "DOUBLE_ELEVEN2021",
-    label: "2021双十一活动"
-  },
-  {
-    value: "DEGREE",
-    label: "儿童节活动"
-  },
-  {
-    value: "PRACTICE_GROUP_BUY",
-    label: "网管课"
-  },
-  {
-    value: 'PRACTICE_GROUP_RENEW',
-    label: '网管课续费'
-  },
-  {
-    value: 'REPAIR',
-    label: '乐器维修'
-  },
-  {
-    value: 'OUTORDER',
-    label: '外部收入'
-  },
-  {
-    value: 'GOODS_SELL',
-    label: '商品销售'
-  },
-  {
-    value: 'SUBJECT_CHANGE',
-    label: '声部更换'
-  },
-  {
-    value: 'MAINTENANCE',
-    label: '乐器保养'
-  },
-  {
-    value: 'ADD_STUDENT',
-    label: '乐团报名'
-  },
-  {
-    value: 'REPLACEMENT',
-    label: '乐器置换'
-  },
-  {
-    value: 'SCHOOL',
-    label: '学校订单'
-  },
-  {
-    value: 'PERSONAL',
-    label: '个人订单'
-  },
-  {
-    value: "OTHER",
-    label: "其他"
-  },
-]
-
-// 交易状态
-export const dealStatus = [{
-    value: "ING",
-    label: "交易中"
-  },
-  {
-    value: "SUCCESS",
-    label: "成功交易"
-  },
-  {
-    value: "FAILED",
-    label: "交易失败"
-  },
-  {
-    value: "CLOSE",
-    label: "交易关闭"
-  }
-]
-
-
-
-export const vipGroupStatus = [{
-    value: '0',
-    text: '未开始'
-  },
-  {
-    value: '1',
-    text: '报名中'
-  },
-  {
-    value: '5',
-    text: '报名结束'
-  },
-  {
-    value: '2',
-    text: '进行中'
-  },
-  {
-    value: '4',
-    text: '已结束'
-  },
-  {
-    value: '3',
-    text: '取消'
-  },
-  {
-    value: '6',
-    text: '暂停'
-  },
-]
-
-// 课程状态
-export const courseStatus = [{
-    value: "NOT_START",
-    label: "未开始"
-  },
-  {
-    value: "UNDERWAY",
-    label: "进行中"
-  },
-  {
-    value: "OVER",
-    label: "已结束"
-  },
-]
-export const courseGroupStatus = [{
-    value: "NORMAL",
-    label: "正常"
-  },
-  {
-    value: "LOCK",
-    label: "锁定"
-  },
-  {
-    value: "FINISH",
-    label: "结束"
-  },
-  {
-    value: "CANCEL",
-    label: "取消"
-  },
-]
-export const commGroupStatus = [{
-    value: "NORMAL",
-    label: "进行中"
-  },
-  {
-    value: "FINISH",
-    label: "结束"
-  },
-  {
-    value: "CANCEL",
-    label: "关闭"
-  },
-  {
-    value: "LOCK",
-    label: "锁定"
-  },
-]
-
-// 老师时间充值状态
-export const teacherTimeStatus = [{
-    value: "RECHARGE",
-    label: "充值"
-  },
-  {
-    value: "CONSUME",
-    label: "建课"
-  },
-  {
-    value: "RETURN",
-    label: "退课"
-  },
-  {
-    value: "MANUAL_ADD",
-    label: "系统充值"
-  },
-  {
-    value: "MANUAL_SUB",
-    label: "系统扣除"
-  },
-]
-
-export const practiceGroupType = [{
-    value: "FREE",
-    label: "免费"
-  },
-  {
-    value: "CHARGE",
-    label: "收费"
-  },
-  {
-    value: "TRIAL",
-    label: "试听课"
-  },
-  {
-    value: "CARE_PACKAGE",
-    label: "关心包"
-  },
-  {
-    value: "COME_ON_PACKAGE",
-    label: "加油包"
-  }
-]
-export const visitChiose = [{
-    value: '课程推荐',
-    label: '课程推荐',
-    children: [{
-      value: '新课推荐',
-      label: '新课推荐'
-    }, {
-      value: '续费提醒',
-      label: '续费提醒'
-    }]
-  },
-  {
-    value: '常规回访',
-    label: '常规回访',
-    children: [{
-      value: '课后及训练回访',
-      label: '课后及训练回访'
-    }, {
-      value: '练习及乐团表现',
-      label: '练习及乐团表现'
-    }]
-  },
-  {
-    value: '其它',
-    label: '其它',
-    children: [{
-      value: '其它',
-      label: '其它'
-    }]
-  }
-]
-export const visitChiose1 = [{
-    value: '课程推荐',
-    label: '课程推荐',
-    children: [{
-      value: '新课推荐',
-      label: '新课推荐'
-    }, {
-      value: '续费提醒',
-      label: '续费提醒'
-    }]
-  },
-  {
-    value: '常规回访',
-    label: '常规回访',
-    children: [{
-      value: '课后及训练回访',
-      label: '课后及训练回访'
-    }, {
-      value: '练习及乐团表现',
-      label: '练习及乐团表现'
-    }, {
-      label: '考勤申诉',
-      value: '考勤申诉'
-    }, {
-      value: "异常请假回访",
-      label: "异常请假回访"
-    }]
-  },
-  {
-    value: '小课回访',
-    label: '小课回访',
-    children: [{
-      value: 'VIP课回访',
-      label: 'VIP课回访'
-    },{
-      value: '乐理课回访',
-      label: '乐理课回访'
-    },{
-      value: '网管课回访',
-      label: '网管课回访'
-    }]
-  },
-  {
-    value: '团练宝',
-    label: '团练宝',
-    children: [{
-      value: '体验回访',
-      label: '体验回访'
-    }]
-  },
-  {
-    value: '其它',
-    label: '其它',
-    children: [{
-      value: '其它',
-      label: '其它'
-    }, {
-      value: '会员续费',
-      label: '会员续费'
-    }]
-  }
-]
-
-// 交易状态
-export const paymentChannelStatus = [{
-    value: 'YQPAY',
-    label: '双乾'
-  },
-  {
-    value: 'BALANCE',
-    label: '余额'
-  },
-  {
-    value: 'ADAPAY',
-    label: '汇付'
-  }
-]
-// 销售类型
-export const saleStatus = [{
-    value: 'INSTRUMENT',
-    label: '乐器销售'
-  },
-  {
-    value: 'ACCESSORIES',
-    label: '配件销售'
-  },
-  {
-    value: 'SCHOOL_BUY',
-    label: '学校采购'
-  },
-  {
-    value: 'OTHER',
-    label: '其它'
-  }
-]
-// 商品类型
-export const goodsType = [{
-    value: 'INSTRUMENT',
-    label: '乐器'
-  },
-  {
-    value: 'ACCESSORIES',
-    label: '辅件'
-  },
-  {
-    value: 'TEACHING',
-    label: '教材'
-  },
-  {
-    value: 'STAFF',
-    label: '教谱'
-  },
-  {
-    value: 'OTHER',
-    label: '其它'
-  },
-]
-
-export const classStatus = [{
-    value: '1',
-    label: '一年级'
-  },
-  {
-    value: '2',
-    label: '二年级'
-  },
-  {
-    value: '3',
-    label: '三年级'
-  },
-  {
-    value: '4',
-    label: '四年级'
-  },
-  {
-    value: '5',
-    label: '五年级'
-  },
-  {
-    value: '6',
-    label: '六年级'
-  },
-  {
-    value: '7',
-    label: '初一'
-  },
-  {
-    value: '8',
-    label: '初二'
-  },
-  {
-    value: '9',
-    label: '初三'
-  },
-  {
-    value: '10',
-    label: '高一'
-  },
-  {
-    value: '11',
-    label: '高二'
-  },
-  {
-    value: '12',
-    label: '高三'
-  },
-]
-// 库存类型
-export const stockType = [{
-    value: 'INTERNAL',
-    label: '内部'
-  },
-  {
-    value: 'EXTERNAL',
-    label: '外部'
-  },
-  {
-    value: 'ALL',
-    label: '全部'
-  }
-]
-// export const musicGroupStatus = [
-//   { value: 'DRAFT', text: '编辑中' },
-//   { value: 'AUDIT', text: '审核中' },
-//   { value: 'PRE_APPLY', text: '预报名中' },
-//   { value: 'PRE_BUILD_FEE', text: '创建缴费中' },
-//   { value: 'APPLY', text: '报名中' },
-//   { value: 'PAY', text: '缴费中' },
-//   { value: 'PREPARE', text: '筹备中' },
-//   { value: 'PROGRESS', text: '进行中' },
-//   { value: 'FEE_AUDIT', text: '费用审核中' },
-//   { value: 'AUDIT_FAILED', text: '审核失败' },
-//   { value: 'PAUSE', text: '暂停' },
-//   { value: 'CANCELED', text: '取消' },
-//   { value: 'CLOSE', text: '已关闭' },
-// ]
-export const vipResetTypeList = [{
-    label: '不限制',
-    value: '1'
-  },
-  {
-    label: '线上不可调为线下',
-    value: '0'
-  },
-  {
-    label: '线下不可调为线上',
-    value: '2'
-  },
-  {
-    label: '线上线下不可互调',
-    value: '3'
-  }
-]
-export const musicGroupStatus = getValueForKey(musicGroupType)
-export const classTimeList = getValueForKey(classTime)
-export const courseViewTypeList = getValueForKey(courseViewType)
-export const payOrderTypeList = getValueForKey(payOrderType)
-export const auditTypeList = getValueForKey(auditType)
-export const auditPaymentTypeList = getValueForKey(auditPaymentType)
-export const orderServerList = getValueForKey(orderServerType)
-export const orderAuditTypeList = getValueForKey(orderAuditType)
-export const rewardModeTypeList = getValueForKey(rewardModeType)
-export const musicClassTypeList = getValueForKey(musicClassType)
-export const ProbationPeriodList = getValueForKey(ProbationPeriodStatus)
-export const downTypeList = getValueForKey(downListType)
-export const conclusionList = getValueForKey(conclusion)
-export const clientList = getValueForKey(clientType)
-export const couponTypeList = getValueForKey(couponType)
-export const backTypeList = getValueForKey(backType)
-export const memberEnumList = getValueForKey(memberEnum)
-export const coupontypeDetailList = getValueForKey(coupontypeDetail)
-export const issueList = getValueForKey(issue)
-export const feedbackTypeList =  getValueForKey(feedbackType)
-
-//downListType
-function getValueForKey(obj) {
-  let arr = []
-  for (let k in obj) {
-    arr.push({
-      label: obj[k],
-      value: k
-    })
-  }
-  return arr
-}
-
-export const array2object = (array, [lk, vk] = ['value', 'label']) => {
-  const object = {}
-  if (array && array.length) {
-    for (const item of array) {
-      object[item[lk]] = item[vk]
-    }
-  }
-  return object
-}
-
-
-// export {
-//   courseType,
-//   attendance,
-//   jobNature,
-//   teacherStatus,
-//   attendanceStatus,
-//   orderStatus,
-//   dealStatus,
-//   musicGroupStatus,
-//   vipGroupStatus,
-//   courseStatus,
-//   teacherTimeStatus,
-//   courseGroupStatus,
-//   commGroupStatus,
-//   courseListType,
-//   practiceGroupType,
-//   visitChiose,
-//   paymentChannelStatus,
-//   saleStatus,
-//   goodsType,
-//   classStatus,
-//   stockType,
-//   classTimeList
-// }
+// 搜索用的下拉数据列表
+import {
+  payOrderType,
+  auditType,
+  auditPaymentType,
+  orderServerType,
+  orderAuditType,
+  rewardModeType,
+  classTime,
+  musicClassType,
+  ProbationPeriodStatus,
+  downListType,
+  musicGroupType,
+  conclusion,
+  vipResetType,
+  courseViewType,
+  clientType,
+  couponType,
+  backType,
+  memberEnum,
+  coupontypeDetail,
+  issue,
+  feedbackType,
+  feedbackTypeDesc
+} from '../constant'
+// 课程类型
+let tenantConfig = sessionStorage.getItem('tenantConfig')
+tenantConfig = tenantConfig ? JSON.parse(tenantConfig) : {}
+let tenantId = tenantConfig.tenantId
+let  courseType = null
+let musicCourseType = null
+if (tenantId == 1) {
+  musicCourseType = [{
+    label: "声部课",
+    value: "SINGLE"
+  },
+  {
+    label: "合奏课",
+    value: "MIX"
+  },
+  {
+    label: "基础技能课",
+    value: "HIGH"
+  },
+  {
+    label: "线上基础技能课",
+    value: "HIGH_ONLINE"
+  },
+  {
+    label: "乐团网管课",
+    value: "MUSIC_NETWORK"
+  },
+  {
+    label: "集训声部课",
+    value: "TRAINING_SINGLE"
+  },
+  {
+    label: "集训合奏课",
+    value: "TRAINING_MIX"
+  },
+  {
+    label: "课堂课",
+    value: "CLASSROOM"
+  },
+  {
+    label: "综合课",
+    value: "COMPREHENSIVE"
+  },
+]
+   courseType= [{
+      label: "声部课",
+      value: "SINGLE"
+    },
+    {
+      label: "合奏课",
+      value: "MIX"
+    },
+    {
+      label: "基础技能课",
+      value: "HIGH"
+    },
+    {
+      label: "线上基础技能课",
+      value: "HIGH_ONLINE"
+    },
+    {
+      label: "vip课",
+      value: "VIP"
+    },
+    {
+      label: "试听课",
+      value: "DEMO"
+    },
+    {
+      label: "综合课",
+      value: "COMPREHENSIVE"
+    },
+    {
+      label: "网管课",
+      value: "PRACTICE"
+    },
+    {
+      label: "乐团网管课",
+      value: "MUSIC_NETWORK"
+    },
+    {
+      label: "启蒙课",
+      value: "ENLIGHTENMENT"
+    },
+    {
+      label: "集训声部课",
+      value: "TRAINING_SINGLE"
+    },
+    {
+      label: "集训合奏课",
+      value: "TRAINING_MIX"
+    },
+    {
+      label: "课堂课",
+      value: "CLASSROOM"
+    },
+    {
+      label: "对外课",
+      value: "COMM"
+    }
+  ]
+} else {
+  musicCourseType = [{
+    label: "声部课",
+    value: "SINGLE"
+  },
+  {
+    label: "合奏课",
+    value: "MIX"
+  },
+  {
+    label: "基础技能课",
+    value: "HIGH"
+  },
+
+  {
+    label: "集训声部课",
+    value: "TRAINING_SINGLE"
+  },
+  {
+    label: "集训合奏课",
+    value: "TRAINING_MIX"
+  },
+  {
+    label: "课堂课",
+    value: "CLASSROOM"
+  },
+  {
+    label: "综合课",
+    value: "COMPREHENSIVE"
+  },
+]
+   courseType = [{
+      label: "声部课",
+      value: "SINGLE"
+    },
+    {
+      label: "合奏课",
+      value: "MIX"
+    },
+    {
+      label: "vip课",
+      value: "VIP"
+    },
+    {
+      label: "试听课",
+      value: "DEMO"
+    },
+    {
+      label: "综合课",
+      value: "COMPREHENSIVE"
+    },
+    {
+      label: "网管课",
+      value: "PRACTICE"
+    },
+
+    {
+      label: "启蒙课",
+      value: "ENLIGHTENMENT"
+    },
+    {
+      label: "集训声部课",
+      value: "TRAINING_SINGLE"
+    },
+    {
+      label: "集训合奏课",
+      value: "TRAINING_MIX"
+    },
+    {
+      label: "课堂课",
+      value: "CLASSROOM"
+    },
+    {
+      label: "对外课",
+      value: "COMM"
+    }
+  ]
+}
+
+export {courseType,musicCourseType};
+
+
+
+
+
+export const courseListType = [{
+    label: "乐团课",
+    value: "MUSIC"
+  },
+  {
+    label: "VIP课",
+    value: "VIP"
+  },
+  {
+    label: "网管课",
+    value: "PRACTICE"
+  },
+]
+
+// 考勤状态
+export const attendance = [{
+    label: '正常签到',
+    value: 1
+  },
+  {
+    label: '异常签到',
+    value: 0
+  },
+]
+
+// 工作类型
+export const jobNature = [{
+    label: '兼职',
+    value: 'PART_TIME'
+  },
+  {
+    label: '全职',
+    value: 'FULL_TIME'
+  },
+  {
+    label: '劳务',
+    value: 'LABOUR'
+  }
+  // { label: '临时工', value: 'TEMPORARY' }
+]
+
+// 老师状态
+export const teacherStatus = [{
+    label: '正常',
+    value: '0'
+  },
+  {
+    label: '冻结',
+    value: '1'
+  },
+  {
+    label: '锁定',
+    value: '9'
+  }
+]
+export const stuAttendance = [{
+    value: "NORMAL",
+    label: "正常"
+  },
+  {
+    value: "TRUANT",
+    label: "旷课"
+  },
+  {
+    value: "LEAVE",
+    label: "请假"
+  }
+]
+
+// 考勤状态
+export const attendanceStatus = [
+  ...stuAttendance,
+  {
+    value: "QUIT_SCHOOL",
+    label: "休学"
+  },
+  {
+    value: "DROP_OUT",
+    label: "退学"
+  },
+  {
+    value: "LATE",
+    label: "迟到"
+  }
+  // { value: "DROP_OUT", label: "休学" }
+]
+
+
+// 交易状态
+export const orderStatus = [{
+    value: "APPLY",
+    label: "报名"
+  },
+  {
+    value: "RENEW",
+    label: "续费"
+  },
+  {
+    value: "MEMBER",
+    label: "会员购买"
+  },
+  {
+    value: "SMALL_CLASS_TO_BUY",
+    label: "VIP购买"
+  },
+  {
+    value: "SPORADIC",
+    label: "零星收费"
+  },
+  {
+    value: "LUCK",
+    label: "福袋活动"
+  },
+  {
+    value: "DEGREE_REGISTRATION",
+    label: "考级报名"
+  },
+  {
+    value: "DOUBLE_ELEVEN2020",
+    label: "2020双十一活动"
+  },
+  {
+    value: "DOUBLE_ELEVEN2021",
+    label: "2021双十一活动"
+  },
+  {
+    value: "DEGREE",
+    label: "儿童节活动"
+  },
+  {
+    value: "PRACTICE_GROUP_BUY",
+    label: "网管课"
+  },
+  {
+    value: 'PRACTICE_GROUP_RENEW',
+    label: '网管课续费'
+  },
+  {
+    value: 'REPAIR',
+    label: '乐器维修'
+  },
+  {
+    value: 'OUTORDER',
+    label: '外部收入'
+  },
+  {
+    value: 'GOODS_SELL',
+    label: '商品销售'
+  },
+  {
+    value: 'SUBJECT_CHANGE',
+    label: '声部更换'
+  },
+  {
+    value: 'MAINTENANCE',
+    label: '乐器保养'
+  },
+  {
+    value: 'ADD_STUDENT',
+    label: '乐团报名'
+  },
+  {
+    value: 'REPLACEMENT',
+    label: '乐器置换'
+  },
+  {
+    value: 'SCHOOL',
+    label: '学校订单'
+  },
+  {
+    value: 'PERSONAL',
+    label: '个人订单'
+  },
+  {
+    value: "OTHER",
+    label: "其他"
+  },
+]
+
+// 交易状态
+export const dealStatus = [{
+    value: "ING",
+    label: "交易中"
+  },
+  {
+    value: "SUCCESS",
+    label: "成功交易"
+  },
+  {
+    value: "FAILED",
+    label: "交易失败"
+  },
+  {
+    value: "CLOSE",
+    label: "交易关闭"
+  }
+]
+
+
+
+export const vipGroupStatus = [{
+    value: '0',
+    text: '未开始'
+  },
+  {
+    value: '1',
+    text: '报名中'
+  },
+  {
+    value: '5',
+    text: '报名结束'
+  },
+  {
+    value: '2',
+    text: '进行中'
+  },
+  {
+    value: '4',
+    text: '已结束'
+  },
+  {
+    value: '3',
+    text: '取消'
+  },
+  {
+    value: '6',
+    text: '暂停'
+  },
+]
+
+// 课程状态
+export const courseStatus = [{
+    value: "NOT_START",
+    label: "未开始"
+  },
+  {
+    value: "UNDERWAY",
+    label: "进行中"
+  },
+  {
+    value: "OVER",
+    label: "已结束"
+  },
+]
+export const courseGroupStatus = [{
+    value: "NORMAL",
+    label: "正常"
+  },
+  {
+    value: "LOCK",
+    label: "锁定"
+  },
+  {
+    value: "FINISH",
+    label: "结束"
+  },
+  {
+    value: "CANCEL",
+    label: "取消"
+  },
+]
+export const commGroupStatus = [{
+    value: "NORMAL",
+    label: "进行中"
+  },
+  {
+    value: "FINISH",
+    label: "结束"
+  },
+  {
+    value: "CANCEL",
+    label: "关闭"
+  },
+  {
+    value: "LOCK",
+    label: "锁定"
+  },
+]
+
+// 老师时间充值状态
+export const teacherTimeStatus = [{
+    value: "RECHARGE",
+    label: "充值"
+  },
+  {
+    value: "CONSUME",
+    label: "建课"
+  },
+  {
+    value: "RETURN",
+    label: "退课"
+  },
+  {
+    value: "MANUAL_ADD",
+    label: "系统充值"
+  },
+  {
+    value: "MANUAL_SUB",
+    label: "系统扣除"
+  },
+]
+
+export const practiceGroupType = [{
+    value: "FREE",
+    label: "免费"
+  },
+  {
+    value: "CHARGE",
+    label: "收费"
+  },
+  {
+    value: "TRIAL",
+    label: "试听课"
+  },
+  {
+    value: "CARE_PACKAGE",
+    label: "关心包"
+  },
+  {
+    value: "COME_ON_PACKAGE",
+    label: "加油包"
+  }
+]
+export const visitChiose = [{
+    value: '课程推荐',
+    label: '课程推荐',
+    children: [{
+      value: '新课推荐',
+      label: '新课推荐'
+    }, {
+      value: '续费提醒',
+      label: '续费提醒'
+    }]
+  },
+  {
+    value: '常规回访',
+    label: '常规回访',
+    children: [{
+      value: '课后及训练回访',
+      label: '课后及训练回访'
+    }, {
+      value: '练习及乐团表现',
+      label: '练习及乐团表现'
+    }]
+  },
+  {
+    value: '其它',
+    label: '其它',
+    children: [{
+      value: '其它',
+      label: '其它'
+    }]
+  }
+]
+export const visitChiose1 = [{
+    value: '课程推荐',
+    label: '课程推荐',
+    children: [{
+      value: '新课推荐',
+      label: '新课推荐'
+    }, {
+      value: '续费提醒',
+      label: '续费提醒'
+    }]
+  },
+  {
+    value: '常规回访',
+    label: '常规回访',
+    children: [{
+      value: '课后及训练回访',
+      label: '课后及训练回访'
+    }, {
+      value: '练习及乐团表现',
+      label: '练习及乐团表现'
+    }, {
+      label: '考勤申诉',
+      value: '考勤申诉'
+    }, {
+      value: "异常请假回访",
+      label: "异常请假回访"
+    }]
+  },
+  {
+    value: '小课回访',
+    label: '小课回访',
+    children: [{
+      value: 'VIP课回访',
+      label: 'VIP课回访'
+    },{
+      value: '乐理课回访',
+      label: '乐理课回访'
+    },{
+      value: '网管课回访',
+      label: '网管课回访'
+    }]
+  },
+  {
+    value: '团练宝',
+    label: '团练宝',
+    children: [{
+      value: '体验回访',
+      label: '体验回访'
+    }]
+  },
+  {
+    value: '其它',
+    label: '其它',
+    children: [{
+      value: '其它',
+      label: '其它'
+    }, {
+      value: '会员续费',
+      label: '会员续费'
+    }]
+  }
+]
+
+// 交易状态
+export const paymentChannelStatus = [{
+    value: 'YQPAY',
+    label: '双乾'
+  },
+  {
+    value: 'BALANCE',
+    label: '余额'
+  },
+  {
+    value: 'ADAPAY',
+    label: '汇付'
+  }
+]
+// 销售类型
+export const saleStatus = [{
+    value: 'INSTRUMENT',
+    label: '乐器销售'
+  },
+  {
+    value: 'ACCESSORIES',
+    label: '配件销售'
+  },
+  {
+    value: 'SCHOOL_BUY',
+    label: '学校采购'
+  },
+  {
+    value: 'OTHER',
+    label: '其它'
+  }
+]
+// 商品类型
+export const goodsType = [{
+    value: 'INSTRUMENT',
+    label: '乐器'
+  },
+  {
+    value: 'ACCESSORIES',
+    label: '辅件'
+  },
+  {
+    value: 'TEACHING',
+    label: '教材'
+  },
+  {
+    value: 'STAFF',
+    label: '教谱'
+  },
+  {
+    value: 'OTHER',
+    label: '其它'
+  },
+]
+
+export const classStatus = [{
+    value: '1',
+    label: '一年级'
+  },
+  {
+    value: '2',
+    label: '二年级'
+  },
+  {
+    value: '3',
+    label: '三年级'
+  },
+  {
+    value: '4',
+    label: '四年级'
+  },
+  {
+    value: '5',
+    label: '五年级'
+  },
+  {
+    value: '6',
+    label: '六年级'
+  },
+  {
+    value: '7',
+    label: '初一'
+  },
+  {
+    value: '8',
+    label: '初二'
+  },
+  {
+    value: '9',
+    label: '初三'
+  },
+  {
+    value: '10',
+    label: '高一'
+  },
+  {
+    value: '11',
+    label: '高二'
+  },
+  {
+    value: '12',
+    label: '高三'
+  },
+]
+// 库存类型
+export const stockType = [{
+    value: 'INTERNAL',
+    label: '内部'
+  },
+  {
+    value: 'EXTERNAL',
+    label: '外部'
+  },
+  {
+    value: 'ALL',
+    label: '全部'
+  }
+]
+// export const musicGroupStatus = [
+//   { value: 'DRAFT', text: '编辑中' },
+//   { value: 'AUDIT', text: '审核中' },
+//   { value: 'PRE_APPLY', text: '预报名中' },
+//   { value: 'PRE_BUILD_FEE', text: '创建缴费中' },
+//   { value: 'APPLY', text: '报名中' },
+//   { value: 'PAY', text: '缴费中' },
+//   { value: 'PREPARE', text: '筹备中' },
+//   { value: 'PROGRESS', text: '进行中' },
+//   { value: 'FEE_AUDIT', text: '费用审核中' },
+//   { value: 'AUDIT_FAILED', text: '审核失败' },
+//   { value: 'PAUSE', text: '暂停' },
+//   { value: 'CANCELED', text: '取消' },
+//   { value: 'CLOSE', text: '已关闭' },
+// ]
+export const vipResetTypeList = [{
+    label: '不限制',
+    value: '1'
+  },
+  {
+    label: '线上不可调为线下',
+    value: '0'
+  },
+  {
+    label: '线下不可调为线上',
+    value: '2'
+  },
+  {
+    label: '线上线下不可互调',
+    value: '3'
+  }
+]
+export const musicGroupStatus = getValueForKey(musicGroupType)
+export const classTimeList = getValueForKey(classTime)
+export const courseViewTypeList = getValueForKey(courseViewType)
+export const payOrderTypeList = getValueForKey(payOrderType)
+export const auditTypeList = getValueForKey(auditType)
+export const auditPaymentTypeList = getValueForKey(auditPaymentType)
+export const orderServerList = getValueForKey(orderServerType)
+export const orderAuditTypeList = getValueForKey(orderAuditType)
+export const rewardModeTypeList = getValueForKey(rewardModeType)
+export const musicClassTypeList = getValueForKey(musicClassType)
+export const ProbationPeriodList = getValueForKey(ProbationPeriodStatus)
+export const downTypeList = getValueForKey(downListType)
+export const conclusionList = getValueForKey(conclusion)
+export const clientList = getValueForKey(clientType)
+export const couponTypeList = getValueForKey(couponType)
+export const backTypeList = getValueForKey(backType)
+export const memberEnumList = getValueForKey(memberEnum)
+export const coupontypeDetailList = getValueForKey(coupontypeDetail)
+export const issueList = getValueForKey(issue)
+export const feedbackTypeList =  getValueForKey(feedbackType)
+export const feedbackTypeDescList = getValueForKey(feedbackTypeDesc)
+
+//downListType
+function getValueForKey(obj) {
+  let arr = []
+  for (let k in obj) {
+    arr.push({
+      label: obj[k],
+      value: k
+    })
+  }
+  return arr
+}
+
+export const array2object = (array, [lk, vk] = ['value', 'label']) => {
+  const object = {}
+  if (array && array.length) {
+    for (const item of array) {
+      object[item[lk]] = item[vk]
+    }
+  }
+  return object
+}
+
+
+// export {
+//   courseType,
+//   attendance,
+//   jobNature,
+//   teacherStatus,
+//   attendanceStatus,
+//   orderStatus,
+//   dealStatus,
+//   musicGroupStatus,
+//   vipGroupStatus,
+//   courseStatus,
+//   teacherTimeStatus,
+//   courseGroupStatus,
+//   commGroupStatus,
+//   courseListType,
+//   practiceGroupType,
+//   visitChiose,
+//   paymentChannelStatus,
+//   saleStatus,
+//   goodsType,
+//   classStatus,
+//   stockType,
+//   classTimeList
+// }

+ 2 - 0
src/utils/vueFilter.js

@@ -214,6 +214,8 @@ Vue.filter("coupontypeDetailType", val => constant.coupontypeDetail[val]);
 
 // 学员回访状态 feedbackType
 Vue.filter("feedbackTypeFilter", val => constant.feedbackType[val]);
+Vue.filter("feedbackTypeDescFilter", val => constant.feedbackTypeDesc[val]);
+
 // 时间处理
 Vue.filter("timer", value => {
   if (value) {

+ 6 - 2
src/views/categroyManager/vipActiveList.vue

@@ -671,7 +671,9 @@ export default {
       this.$router.push({
         path: "/operateManager/vipNewActive?type=reset",
         query: { id: row.id },
-      });
+      },(router) => {
+          router.meta.title = "修改活动方案";
+        });
     },
     look(row) {
       this.$router.push({
@@ -704,7 +706,9 @@ export default {
       this.$router.push({
         path: "/operateManager/vipNewActive?type=create",
         // query: { rules, searchForm },
-      });
+      },(router) => {
+          router.meta.title = "新建活动方案";
+        });
     },
     closeVipform() {
       this.$refs["vipform"].resetFields();

+ 1 - 0
src/views/categroyManager/vipNewActive.vue

@@ -197,6 +197,7 @@ export default {
       this.baseForm.id = this.$route.query.id;
       const rusult = await getVipGroupActivity({ id: this.$route.query.id });
       this.formatDetail(rusult.data);
+      this.$router
     } else {
       this.payInfo = { ...payBaseForm };
       this.salaryForm = JSON.parse(JSON.stringify({ ...baseSalaryForm }));

+ 5 - 4
src/views/resetTeaming/components/resetPayList.vue

@@ -168,26 +168,27 @@
                   >修改</el-button
                 >
               </auth>
+              <!--                   scope.row.paymentType != 'SPAN_GROUP_CLASS_ADJUST' &&-->
               <auth
                 auths="musicGroupPaymentCalender/revoke"
                 v-if="
                   (team_status == 'FEE_AUDIT' || team_status == 'PROGRESS') &&
                   scope.row.status === 'AUDITING' &&
-                  scope.row.paymentType != 'ADD_STUDENT' &&
-                  scope.row.paymentType != 'SPAN_GROUP_CLASS_ADJUST'
+                  scope.row.paymentType != 'ADD_STUDENT'
+
                 "
               >
                 <el-button type="text" @click="revoke(scope.row)"
                   >撤回</el-button
                 >
               </auth>
-              <!--  -->
+              <!--   scope.row.paymentType != 'SPAN_GROUP_CLASS_ADJUST' && -->
               <auth
                 auths="musicGroupPaymentCalender/delByBatchNo/4305"
                 v-if="
                   teamStatus &&
                   scope.row.paymentType != 'ADD_STUDENT' &&
-                  scope.row.paymentType != 'SPAN_GROUP_CLASS_ADJUST' &&
+
                   (scope.row.status == 'DRAFT' ||
                     scope.row.status == 'REJECT')
                 "

+ 101 - 52
src/views/smallStudentManager/auditionClass.vue

@@ -1,52 +1,101 @@
-<template>
-  <div class="auditionClass">
-    <Statistics :groupType='groupType' />
-
-    <TableList :groupType='groupType' />
-  </div>
-</template>
-
-<script>
-import Statistics from './components/index';
-import TableList from './components/tableList';
-export default {
-  name: "auditionClass",
-  components: {
-    Statistics,
-    TableList
-  },
-  data() {
-    return {
-      groupType: 'PRACTICE'
-    }
-  },
-  async mounted() {
-
-  },
-  methods: {
-    __init() {
-
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.rows {
-    > div {
-      margin-bottom: 20px;
-    }
-  }
-/deep/ .el-card__body .statistic {
-  margin-bottom: 15px;
-  padding: 0;
-}
-.statistic {
-  .statistic-content > span {
-    font-size: 22px !important;
-    &:first-child {
-      font-size: 14px !important;
-    }
-  }
-}
-</style>
+<template>
+  <div class="auditionClass">
+             <save-form
+      :inline="true"
+      class="searchForm"
+      ref="searchForm"
+      @submit="FetchList"
+      @reset="reset"
+      :model.sync="searchForm"
+    >
+      <el-form-item prop="organId">
+        <el-select
+          class="multiple"
+          filterable
+          v-model.trim="searchForm.organId"
+          multiple
+          collapse-tags
+          clearable
+          placeholder="请选择分部"
+        >
+          <el-option
+            v-for="(item, index) in selects.branchs"
+            :key="index"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button native-type="submit" type="danger">搜索</el-button>
+        <el-button native-type="reset" type="primary">重置</el-button>
+      </el-form-item>
+    </save-form>
+
+    <Statistics :groupType='groupType' />
+
+    <TableList :groupType='groupType' />
+  </div>
+</template>
+
+<script>
+import Statistics from './components/index';
+import TableList from './components/tableList';
+export default {
+  name: "auditionClass",
+  components: {
+    Statistics,
+    TableList
+  },
+    provide() {
+    return {
+      organId: () => this.searchForm.organId.join(","),
+      isSearch: ()=> this.isSearch,
+    };
+  },
+  data() {
+    return {
+      groupType: 'PRACTICE',
+        searchForm: {
+        organId: [],
+      },
+      isSearch: false,
+    }
+  },
+  async mounted() {
+
+  },
+  methods: {
+    __init() {
+
+    },
+        FetchList() {
+      this.isSearch = !this.isSearch;
+    },
+    reset() {
+      this.searchForm.organId = [];
+      this.FetchList();
+    },
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.rows {
+    > div {
+      margin-bottom: 20px;
+    }
+  }
+/deep/ .el-card__body .statistic {
+  margin-bottom: 15px;
+  padding: 0;
+}
+.statistic {
+  .statistic-content > span {
+    font-size: 22px !important;
+    &:first-child {
+      font-size: 14px !important;
+    }
+  }
+}
+</style>

+ 15 - 1
src/views/smallStudentManager/components/addVisit.vue

@@ -45,7 +45,7 @@
         ></el-input>
       </el-form-item>
       <el-form-item label="家长反馈" prop="feedbackType">
-        <el-radio-group v-model="visitForm.feedbackType">
+        <el-radio-group v-model="visitForm.feedbackType" @change="()=>{visitForm.feedbackTypeDesc=''}">
           <el-radio-button
             :label="item.value"
             v-for="(item, index) in feedbackTypeList"
@@ -54,6 +54,16 @@
           >
         </el-radio-group>
       </el-form-item>
+          <el-form-item label="反馈详情" prop="feedbackTypeDesc" v-if="visitForm.feedbackType == 'THINKING' || visitForm.feedbackType == 'LOST'">
+        <el-radio-group v-model="visitForm.feedbackTypeDesc">
+          <el-radio-button
+            :label="item.value"
+            v-for="(item, index) in feedbackTypeDescList"
+            :key="index"
+            >{{ item.label }}</el-radio-button
+          >
+        </el-radio-group>
+      </el-form-item>
       <el-form-item label="原因" prop="feedback" :rules="[{ required: isRequire, message: '请输入家长反馈内容' }]">
         <el-input
           type="textarea"
@@ -82,6 +92,7 @@ import {
   visitChiose,
   visitChiose1,
   feedbackTypeList,
+  feedbackTypeDescList
 } from "@/utils/searchArray";
 import { addVisit } from "@/views/returnVisitManager/api";
 export default {
@@ -90,6 +101,7 @@ export default {
   data() {
     return {
       feedbackTypeList,
+      feedbackTypeDescList,
       visitChiose,
       visitForm: {
         musicGroupId: "",
@@ -102,6 +114,7 @@ export default {
         feedback: "",
         studentName: "",
         feedbackType: "",
+        feedbackTypeDesc:""
       },
       visitRules: {
         overview: [{ required: true, message: "请输入学生近况" }],
@@ -109,6 +122,7 @@ export default {
         visitTime: [{ required: true, message: "请输入回访时间" }],
         visitType: [{ required: true, message: "请选择回访类型" }],
         feedbackType: [{ required: true, message: "请选择家长反馈" }],
+        feedbackTypeDesc: [{ required: true, message: "请选择家长反馈详情" }],
       },
       recordVisible: false,
       workVisible: false,

+ 53 - 29
src/views/smallStudentManager/components/index.vue

@@ -1,15 +1,14 @@
 <template>
   <div class="statistics">
     <el-collapse v-model="activeNames" class="statisticsCollapse">
-      <el-collapse-item name="1" >
+      <el-collapse-item name="1">
         <template slot="title">
-          <div class="titleWrap">  数据总览
+          <div class="titleWrap">
+            数据总览
             <!-- <el-button type="primary">
 
             </el-button> -->
-
           </div>
-
         </template>
         <el-row class="rows" :gutter="20">
           <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
@@ -27,6 +26,7 @@
         </el-row>
       </el-collapse-item>
     </el-collapse>
+    <div v-show="false">{{ isSearchs }}</div>
   </div>
 </template>
 
@@ -39,6 +39,7 @@ import { studentSmallClassStatisticsSum } from "../api";
 export default {
   name: "Statistics",
   props: ["groupType"],
+    inject: ["organId", "isSearch"],
   components: {
     sleep,
     studyStudent,
@@ -49,15 +50,39 @@ export default {
     return {
       statistic: {},
       activeNames: "",
+      flag:null
     };
   },
   async mounted() {
-    try {
-      let res = await studentSmallClassStatisticsSum({
-        groupType: this.groupType,
-      });
-      this.statistic = res.data || {};
-    } catch {}
+    // this.getList();
+  },
+  methods: {
+    async getList() {
+      try {
+        let res = await studentSmallClassStatisticsSum({
+          groupType: this.groupType,
+          organId:this.organIds
+        });
+        this.statistic = res.data || {};
+      } catch {}
+    },
+  },
+  computed: {
+    organIds() {
+      return this.organId();
+    },
+    isSearchs: {
+      get() {
+        let flag = this.isSearch();
+        if(this.flag != flag){
+           this.getList()
+                 console.log('调用isSearchTable',flag)
+        }
+       this.flag = flag
+
+        return flag;
+      },
+    },
   },
 };
 </script>
@@ -80,26 +105,25 @@ export default {
       font-size: 14px !important;
     }
   }
-
 }
-  .statisticsCollapse {
-    margin-bottom: 20px;
-  }
-  /deep/.el-collapse-item__header {
-     background: rgb(237, 238, 240);
-    border-bottom:none!important;
-  }
+.statisticsCollapse {
+  margin-bottom: 20px;
+}
+/deep/.el-collapse-item__header {
+  background: rgb(237, 238, 240);
+  border-bottom: none !important;
+}
 
-  // /deep/.el-collapse {
-  //   border-top:none!important;
-  //   border-bottom:none!important
-  // }
+// /deep/.el-collapse {
+//   border-top:none!important;
+//   border-bottom:none!important
+// }
 
-  // /deep/.el-collapse-item__arrow {
-  //   display: none!important;
-  // }
-  .titleWrap {
-    padding-left: 20px;
-    font-weight: bold;
-  }
+// /deep/.el-collapse-item__arrow {
+//   display: none!important;
+// }
+.titleWrap {
+  padding-left: 20px;
+  font-weight: bold;
+}
 </style>

+ 35 - 23
src/views/smallStudentManager/components/sleep.vue

@@ -10,7 +10,11 @@
       <div
         class="wall"
         style="height: 68px"
-        v-if="JSON.stringify(items) == '{}'&&!data['CHARGE_STUDENT_CHANGE_RATE']&&!data['ACTIVATION_RATE']"
+        v-if="
+          JSON.stringify(items) == '{}' &&
+          !data['CHARGE_STUDENT_CHANGE_RATE'] &&
+          !data['ACTIVATION_RATE']
+        "
       >
         暂无数据
       </div>
@@ -28,12 +32,14 @@
         </statistic-item>
       </statistic>
     </el-card>
+
   </div>
 </template>
 <script>
 import countTo from "vue-count-to";
 export default {
   props: ["data"],
+
   components: {
     "count-to": countTo,
   },
@@ -47,37 +53,43 @@ export default {
       return !this.chartData.rows.length;
     },
     items() {
-      let tempArr = [{
-        text: '沉睡学员',
-        value: 0,
-        id: 'sleepStudentNum'
-      }, {
-        text: '有未排课',
-        value: 0,
-        id: 'sleepStudentHasNotSchedule'
-      }, {
-        text: '无未排课',
-        value: 0,
-        id: 'sleepStudentNoNotSchedule'
-      }]
-      tempArr.forEach(item => {
-        if(this.data[item.id]) {
-          item.value = this.data[item.id]
+      let tempArr = [
+        {
+          text: "沉睡学员",
+          value: 0,
+          id: "sleepStudentNum",
+        },
+        {
+          text: "有未排课",
+          value: 0,
+          id: "sleepStudentHasNotSchedule",
+        },
+        {
+          text: "无未排课",
+          value: 0,
+          id: "sleepStudentNoNotSchedule",
+        },
+      ];
+      tempArr.forEach((item) => {
+        if (this.data[item.id]) {
+          item.value = this.data[item.id];
         }
-      })
-      return tempArr
+      });
+      return tempArr;
     },
+
+
   },
 };
 </script>
 
 <style lang="scss" scoped>
 /deep/ .el-card__body .statistic {
-    margin-bottom: 15px;
-    padding: 0;
-  }
+  margin-bottom: 15px;
+  padding: 0;
+}
 /deep/.el-card__header {
-    padding: 0 20px!important;
+  padding: 0 20px !important;
 }
 .box {
   display: flex;

+ 21 - 1
src/views/smallStudentManager/components/studentChange.vue

@@ -32,6 +32,7 @@
         </statistic-item>
       </statistic>
     </el-card>
+     <div v-show='isSearchs'></div>
   </div>
 </template>
 <script>
@@ -41,6 +42,7 @@ import { studentSmallClassStatisticsSumForDate } from '../api';
 import { getTimes } from "@/utils";
 export default {
   props: ["groupType"],
+   inject: ["organId", "isSearch"],
   components: {
     "count-to": countTo,
     searchHeader
@@ -52,6 +54,7 @@ export default {
       mdate: [],
       endDate: '',
       data: {},
+      flag:null
     };
   },
   computed: {
@@ -83,6 +86,21 @@ export default {
       })
       return tempArr
     },
+          organIds() {
+      return this.organId();
+    },
+    isSearchs: {
+      get() {
+        let flag = this.isSearch();
+        if(this.flag != flag){
+           this.FetchDetail()
+             console.log('调用studentChange',flag)
+        }
+       this.flag = flag
+
+        return flag;
+      },
+    },
   },
   mounted() {
     this.init()
@@ -99,7 +117,7 @@ export default {
               .format("YYYY-MM-DD");
       this.mdate = [startTime, endTime];
       this.$refs.searchHeader.initStatue('month')
-      this.FetchDetail();
+      // this.FetchDetail();
     },
     getInitDate() {
       const end = this.$helpers.dayjs(new Date()).format("YYYY-MM-DD");
@@ -120,6 +138,7 @@ export default {
         const res = await studentSmallClassStatisticsSumForDate({
           groupType: this.groupType,
           ...getTimes(this.mdate, ["startDate", "endDate"]),
+          organId:this.organIds
         });
         this.data = res.data || {};
       } catch (error) {
@@ -128,6 +147,7 @@ export default {
       this.loading = false;
     },
   },
+
 };
 </script>
 

+ 27 - 26
src/views/smallStudentManager/components/tableList.vue

@@ -16,24 +16,7 @@
           v-model.trim="searchForm.search"
         ></el-input>
       </el-form-item>
-      <el-form-item prop="organId">
-        <el-select
-          class="multiple"
-          filterable
-          v-model.trim="searchForm.organId"
-          multiple
-          collapse-tags
-          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="studentStatus">
         <el-select
           class="multiple"
@@ -117,7 +100,7 @@
           :controls="false"
           :precision="0"
           :min="0"
-           v-model="searchForm.subCourseMinNum"
+          v-model="searchForm.subCourseMinNum"
           placeholder="请输入剩余课时最小数"
         ></el-input-number>
       </el-form-item>
@@ -420,6 +403,7 @@
         @getList="getList"
       />
     </el-dialog>
+    <div v-show='isSearchs'></div>
   </div>
 </template>
 
@@ -435,6 +419,7 @@ import qs from "qs";
 export default {
   name: "tableList",
   props: ["groupType"],
+  inject: ["organId", "isSearch"],
   components: {
     pagination,
     visiList,
@@ -443,7 +428,6 @@ export default {
     return {
       searchForm: {
         search: "",
-        organId: [],
         studentStatus: "",
         feedbackType: "",
         latelyCourseConsumer: "",
@@ -464,12 +448,12 @@ export default {
       },
       visitVisiable: false,
       activeRow: null,
+      flag:false
     };
   },
   async mounted() {
     this.$store.dispatch("setBranchs");
     this.$store.dispatch("setTeachers");
-
     await this.getList();
   },
   methods: {
@@ -480,12 +464,10 @@ export default {
     onReSet() {
       this.searchForm.timer = [];
       this.$refs.searchForm.resetFields();
-
       this.onSearch();
     },
     async getList() {
       const { timer, ...rest } = this.searchForm;
-      console.log(timer);
       try {
         let obj = {
           groupType: this.groupType,
@@ -493,14 +475,16 @@ export default {
           ...getTimes(timer, ["firstCourseStartTime", "firstCourseEndTime"]),
           rows: this.pageInfo.limit,
           page: this.pageInfo.page,
-          organId: this.searchForm.organId.join(","),
+          organId: this.organIds,
         };
         let res = await queryPage({
           ...obj,
         });
         this.tableList = res.data.rows || [];
         this.pageInfo.total = res.data.total;
-      } catch {}
+      } catch (e) {
+        console.log(e);
+      }
     },
     gotoStudent(search) {
       this.$router.push({
@@ -552,6 +536,23 @@ export default {
       );
     },
   },
+
+  computed: {
+    organIds() {
+      return this.organId();
+    },
+    isSearchs: {
+      get() {
+        let flag = this.isSearch();
+        if(this.flag != flag){
+           this.onSearch()
+        }
+       this.flag = flag
+
+        return flag;
+      },
+    },
+  },
 };
 </script>
 
@@ -574,7 +575,7 @@ export default {
   }
 }
 .number-input {
-  width: 180px!important;
+  width: 180px !important;
   /deep/ .el-input__inner {
     text-align: left;
   }

+ 38 - 11
src/views/smallStudentManager/components/visiList.vue

@@ -34,6 +34,21 @@
           ></el-option>
         </el-select>
       </el-form-item>
+      <el-form-item prop="feedbackTypeDesc">
+        <el-select
+          v-model.trim="searchForm.feedbackTypeDesc"
+          placeholder="请选择反馈详情"
+          clearable
+          filterable
+        >
+          <el-option
+            :value="item.value"
+            :label="item.label"
+            v-for="(item, index) in feedbackTypeDescList"
+            :key="index"
+          ></el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item>
         <el-date-picker
           key="visiList"
@@ -87,6 +102,12 @@
             </div>
           </template>
         </el-table-column>
+        <el-table-column align="center" prop="overview" label="学员情况">
+
+          <template slot-scope="scope">
+             <overflow-text :text="scope.row.overview"></overflow-text>
+          </template>
+        </el-table-column>
         <el-table-column align="center" prop="type" label="回访结果">
           <template slot-scope="scope">
             <div>
@@ -94,6 +115,14 @@
             </div>
           </template>
         </el-table-column>
+        <el-table-column align="center" prop="type" label="反馈详情">
+          <template slot-scope="scope">
+            <div v-if="scope.row.feedbackTypeDesc">
+              {{ scope.row.feedbackTypeDesc | feedbackTypeDescFilter }}
+            </div>
+            <div v-else>--</div>
+          </template>
+        </el-table-column>
         <el-table-column align="center" prop="type" label="原因">
           <template slot-scope="scope">
             <div>
@@ -127,13 +156,12 @@
         :useVisitType="useVisitType"
         @close="visitVisiable = false"
         @submited="refresh"
-
       />
     </el-dialog>
   </div>
 </template>
 <script>
-import { feedbackTypeList } from "@/utils/searchArray";
+import { feedbackTypeList, feedbackTypeDescList } from "@/utils/searchArray";
 import { getVisitList } from "@/views/returnVisitManager/api";
 import pagination from "@/components/Pagination/index";
 import { getTimes } from "@/utils";
@@ -159,13 +187,14 @@ export default {
       },
       tableList: [],
       feedbackTypeList: feedbackTypeList,
+      feedbackTypeDescList,
       visitVisiable: false,
       detail: null,
       useVisitType: null,
     };
   },
   mounted() {
-         if (this.groupType == "PRACTICE") {
+    if (this.groupType == "PRACTICE") {
       this.useVisitType = ["小课回访", "网管课回访"];
     } else if (this.groupType == "THEORY") {
       this.useVisitType = ["小课回访", "乐理课回访"];
@@ -190,12 +219,10 @@ export default {
       };
       this.search();
     },
-    refresh(){
-
-      this.getList()
-         this.$emit('getList')
-    }
-    ,
+    refresh() {
+      this.getList();
+      this.$emit("getList");
+    },
     getList() {
       // cleanDeep
       let { timer, ...rest } = this.searchForm;
@@ -205,8 +232,8 @@ export default {
         page: this.rules.page,
         rows: this.rules.limit,
         ...getTimes(timer, ["startTime", "endTime"]),
-        purpose:this.useVisitType[1]?this.useVisitType[1]:null,
-        type:this.useVisitType[0]?this.useVisitType[0]:null
+        purpose: this.useVisitType[1] ? this.useVisitType[1] : null,
+        type: this.useVisitType[0] ? this.useVisitType[0] : null,
       };
       getVisitList(cleanDeep(params)).then((res) => {
         if (res.code == 200) {

+ 100 - 52
src/views/smallStudentManager/theoryClass.vue

@@ -1,52 +1,100 @@
-<template>
-  <div class="theoryClass">
-    <Statistics :groupType='groupType' />
-
-    <TableList :groupType='groupType' />
-  </div>
-</template>
-
-<script>
-import Statistics from './components/index';
-import TableList from './components/tableList';
-export default {
-  name: "theoryClass",
-  components: {
-    Statistics,
-    TableList
-  },
-  data() {
-    return {
-      groupType: 'THEORY'
-    }
-  },
-  async mounted() {
-    
-  },
-  methods: {
-    __init() {
-
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.rows {
-    > div {
-      margin-bottom: 20px;
-    }
-  }
-/deep/ .el-card__body .statistic {
-  margin-bottom: 15px;
-  padding: 0;
-}
-.statistic {
-  .statistic-content > span {
-    font-size: 22px !important;
-    &:first-child {
-      font-size: 14px !important;
-    }
-  }
-}
-</style>
+<template>
+  <div class="theoryClass">
+        <save-form
+      :inline="true"
+      class="searchForm"
+      ref="searchForm"
+      @submit="FetchList"
+      @reset="reset"
+      :model.sync="searchForm"
+    >
+      <el-form-item prop="organId">
+        <el-select
+          class="multiple"
+          filterable
+          v-model.trim="searchForm.organId"
+          multiple
+          collapse-tags
+          clearable
+          placeholder="请选择分部"
+        >
+          <el-option
+            v-for="(item, index) in selects.branchs"
+            :key="index"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button native-type="submit" type="danger">搜索</el-button>
+        <el-button native-type="reset" type="primary">重置</el-button>
+      </el-form-item>
+    </save-form>
+    <Statistics :groupType='groupType' />
+
+    <TableList :groupType='groupType' />
+  </div>
+</template>
+
+<script>
+import Statistics from './components/index';
+import TableList from './components/tableList';
+export default {
+  name: "theoryClass",
+  components: {
+    Statistics,
+    TableList
+  },
+  data() {
+    return {
+      groupType: 'THEORY',
+        searchForm: {
+        organId: [],
+      },
+      isSearch: false,
+    }
+  },
+    provide() {
+    return {
+      organId: () => this.searchForm.organId.join(","),
+      isSearch: ()=> this.isSearch,
+    };
+  },
+  async mounted() {
+
+  },
+  methods: {
+    __init() {
+
+    },
+        FetchList() {
+      this.isSearch = !this.isSearch;
+    },
+    reset() {
+      this.searchForm.organId = [];
+      this.FetchList();
+    },
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.rows {
+    > div {
+      margin-bottom: 20px;
+    }
+  }
+/deep/ .el-card__body .statistic {
+  margin-bottom: 15px;
+  padding: 0;
+}
+.statistic {
+  .statistic-content > span {
+    font-size: 22px !important;
+    &:first-child {
+      font-size: 14px !important;
+    }
+  }
+}
+</style>

+ 97 - 52
src/views/smallStudentManager/vipClass.vue

@@ -1,52 +1,97 @@
-<template>
-  <div class="vipClass">
-    <Statistics :groupType='groupType' />
-
-    <TableList :groupType='groupType' />
-  </div>
-</template>
-
-<script>
-import Statistics from './components/index';
-import TableList from './components/tableList';
-export default {
-  name: "vipClass",
-  components: {
-    Statistics,
-    TableList
-  },
-  data() {
-    return {
-      groupType: 'VIP'
-    }
-  },
-  async mounted() {
-    
-  },
-  methods: {
-    __init() {
-
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.rows {
-    > div {
-      margin-bottom: 20px;
-    }
-  }
-/deep/ .el-card__body .statistic {
-  margin-bottom: 15px;
-  padding: 0;
-}
-.statistic {
-  .statistic-content > span {
-    font-size: 22px !important;
-    &:first-child {
-      font-size: 14px !important;
-    }
-  }
-}
-</style>
+<template>
+  <div class="vipClass">
+    <save-form
+      :inline="true"
+      class="searchForm"
+      ref="searchForm"
+      @submit="FetchList"
+      @reset="reset"
+      :model.sync="searchForm"
+    >
+      <el-form-item prop="organId">
+        <el-select
+          class="multiple"
+          filterable
+          v-model.trim="searchForm.organId"
+          multiple
+          collapse-tags
+          clearable
+          placeholder="请选择分部"
+        >
+          <el-option
+            v-for="(item, index) in selects.branchs"
+            :key="index"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button native-type="submit" type="danger">搜索</el-button>
+        <el-button native-type="reset" type="primary">重置</el-button>
+      </el-form-item>
+    </save-form>
+    <Statistics :groupType="groupType" />
+
+    <TableList :groupType="groupType" />
+  </div>
+</template>
+
+<script>
+import Statistics from "./components/index";
+import TableList from "./components/tableList";
+export default {
+  name: "vipClass",
+  components: {
+    Statistics,
+    TableList,
+  },
+  provide() {
+    return {
+      organId: () => this.searchForm.organId.join(","),
+      isSearch: ()=> this.isSearch,
+    };
+  },
+
+  data() {
+    return {
+      groupType: "VIP",
+      searchForm: {
+        organId: [],
+      },
+      isSearch: false,
+    };
+  },
+  async mounted() {},
+  methods: {
+    __init() {},
+    FetchList() {
+      this.isSearch = !this.isSearch;
+    },
+    reset() {
+      this.searchForm.organId = [];
+      this.FetchList();
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.rows {
+  > div {
+    margin-bottom: 20px;
+  }
+}
+/deep/ .el-card__body .statistic {
+  margin-bottom: 15px;
+  padding: 0;
+}
+.statistic {
+  .statistic-content > span {
+    font-size: 22px !important;
+    &:first-child {
+      font-size: 14px !important;
+    }
+  }
+}
+</style>

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

@@ -126,7 +126,7 @@
                   <el-button
                     type="text"
                     @click="operationTeachClass('create', scope.row)"
-                    v-if="!scope.row.enable && scope.row.level < 4"
+                    v-if="scope.row.level < 4"
                     >添加</el-button
                   >
                 </auth>