Browse Source

回访列表

1
mo 3 years ago
parent
commit
694599b173

+ 10 - 0
src/constant/index.js

@@ -431,3 +431,13 @@ export const issue = {
   1: '手动发放',
   1: '手动发放',
   2: '交易获取'
   2: '交易获取'
 }
 }
+
+
+// 小课回访状态
+export const feedbackType = {
+  'THINKING':'考虑中',
+  'PENDING_PAYMENT':'确认缴费待缴费',
+  'LOST':'流失',
+  'PAUSE':'暂停',
+  'OTHER':'其他'
+}

+ 823 - 822
src/utils/searchArray.js

@@ -1,822 +1,823 @@
-// 搜索用的下拉数据列表
-import {
-  payOrderType,
-  auditType,
-  auditPaymentType,
-  orderServerType,
-  orderAuditType,
-  rewardModeType,
-  classTime,
-  musicClassType,
-  ProbationPeriodStatus,
-  downListType,
-  musicGroupType,
-  conclusion,
-  vipResetType,
-  courseViewType,
-  clientType,
-  couponType,
-  backType,
-  memberEnum,
-  coupontypeDetail,
-  issue
-} 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: "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: '体验回访',
-      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)
-
-
-//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
+} 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: "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: '体验回访',
+      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
+// }

+ 2 - 0
src/utils/vueFilter.js

@@ -212,6 +212,8 @@ Vue.filter('memberEnumType',val=> {
 // 优惠券类型
 // 优惠券类型
 Vue.filter("coupontypeDetailType", val => constant.coupontypeDetail[val]);
 Vue.filter("coupontypeDetailType", val => constant.coupontypeDetail[val]);
 
 
+// 学员回访状态 feedbackType
+Vue.filter("feedbackTypeFilter", val => constant.feedbackType[val]);
 // 时间处理
 // 时间处理
 Vue.filter("timer", value => {
 Vue.filter("timer", value => {
   if (value) {
   if (value) {

+ 455 - 298
src/views/smallStudentManager/components/tableList.vue

@@ -1,298 +1,455 @@
-<template>
-  <div class="tableList">
-    <save-form
-      :inline="true"
-      class="searchForm"
-      @submit="onSearch"
-      @reset="onReSet"
-      ref="searchForm"
-      :model.sync="searchForm"
-    >
-      <el-form-item prop="search">
-        <el-input
-          clearable
-          placeholder="学生姓名或电话"
-          @keyup.enter.native="onSearch"
-          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="teacherId">
-        <remote-search :commit="'setTeachers'" v-model="searchForm.teacherId" />
-      </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>
-
-    <div class="tableWrap">
-      <el-table
-        :data="tableList"
-        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
-      >
-        <el-table-column type="expand">
-            <template slot-scope="props">
-              <el-form label-position="left" class="demo-table-expand" :inline='true'>
-                <el-row>
-                  <el-col :span="6">
-                    <el-form-item label="指导老师信息">
-                      <div class="schoolWrap">
-                        <span>{{ props.row.teacherName }}</span>
-                        <span>{{ props.row.id }}</span>
-                      </div> </el-form-item
-                  ></el-col>
-                  <el-col :span="6">
-                    <el-form-item label="乐团主管">
-                      <div class="schoolWrap">
-                        <span>{{ props.row.teacherName }}</span>
-                        <span>{{ props.row.id }}</span>
-                      </div> </el-form-item
-                  ></el-col>
-                  <el-col :span="6">
-                    <el-form-item label="声部课老师">
-                      <div class="schoolWrap">
-                        <overflow-text
-                          width="100%"
-                          :text="props.row.cooperationOrganName"
-                        ></overflow-text>
-                      </div> </el-form-item
-                  ></el-col>
-                  <el-col :span="6">
-                    <el-form-item label="年级">
-                      <div class="schoolWrap">
-                        <overflow-text
-                          width="100%"
-                          :text="props.row.cooperationOrganName"
-                        ></overflow-text>
-                      </div> </el-form-item
-                  ></el-col>
-                </el-row>
-                <el-row>
-                  <el-col :span="6">
-                    <el-form-item label="近30天课耗">
-                      <div class="schoolWrap">
-                        <span>{{ props.row.teacherName }}</span>
-                        <span>{{ props.row.id }}</span>
-                      </div> </el-form-item
-                  ></el-col>
-                  <el-col :span="6">
-                    <el-form-item label="回访次数">
-                      <div class="schoolWrap">
-                        <span>{{ props.row.visitNum }}</span>
-                        <span>{{ props.row.id }}</span>
-                      </div> </el-form-item
-                  ></el-col>
-                  <el-col :span="6">
-                    <el-form-item label="回访状态">
-                      <div class="schoolWrap">
-                        <overflow-text
-                          width="100%"
-                          :text="props.row.lastVisitStatus"
-                        ></overflow-text>
-                      </div> </el-form-item
-                  ></el-col>
-                  <el-col :span="6">
-                    <el-form-item label="回访日期">
-                      <div class="schoolWrap">
-                        <overflow-text
-                          width="100%"
-                          :text="props.row.lastVisitTime"
-                        ></overflow-text>
-                      </div> </el-form-item
-                  ></el-col>
-                </el-row>
-                <el-row>
-                  <el-col :span="6">
-                    <el-form-item label="第一次课时间">
-                      <div class="schoolWrap">
-                        <overflow-text
-                          width="100%"
-                          :text="props.row.firstCourseTime"
-                        ></overflow-text>
-                      </div> </el-form-item
-                  ></el-col>
-                  <el-col :span="6">
-                    <el-form-item label="最近上课时间">
-                      <div class="schoolWrap">
-                        <overflow-text
-                          width="100%"
-                          :text="props.row.lastCourseTime"
-                        ></overflow-text>
-                      </div> </el-form-item
-                  ></el-col>
-                  <el-col :span="6">
-                    <el-form-item label="原因">
-                      <div class="schoolWrap">
-                        <overflow-text
-                          width="100%"
-                          :text="props.row.visitReason"
-                        ></overflow-text>
-                      </div> </el-form-item
-                  ></el-col>
-                </el-row>
-              </el-form>
-            </template>
-          </el-table-column>
-          <el-table-column align="center" prop="organName" label="所属分部">
-            <template slot-scope="scope">
-              <copy-text>{{ scope.row.studentBasicInfo.organName }}</copy-text>
-            </template>
-          </el-table-column>
-          <el-table-column
-            align="center"
-            prop="userId"
-            label="学员信息"
-            width="140px"
-          >
-            <template slot-scope="scope">
-              <div style="color: var(--color-primary)">
-                {{ scope.row.studentBasicInfo.userName }}<br />
-              {{ scope.row.studentBasicInfo.userId }}
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column align="center" prop="studentBasicInfo.phone" label="联系电话">
-          </el-table-column>
-          <el-table-column align="center" prop="studentBasicInfo.subjectName" label="声部">
-          </el-table-column>
-          <el-table-column align="center" prop="studentBasicInfo.cooperationOrganName" label="学校">
-          </el-table-column>
-          <el-table-column align="center" prop="organName" label="学员状态">
-          </el-table-column>
-          <el-table-column align="center" prop="organName" label="未排课时">
-          </el-table-column>
-          <el-table-column align="center" prop="organName" label="总课时">
-          </el-table-column>
-          <el-table-column align="center" prop="organName" label="已完成课时">
-          </el-table-column>
-          <el-table-column align="center" prop="organName" label="剩余课时">
-          </el-table-column>
-          <el-table-column align="center" prop="organName" label="预收金额">
-          </el-table-column>
-          <el-table-column align="center" width="180px" label="操作">
-            <template slot-scope="scope">
-              <el-button
-                type="text"
-                @click="setStudent(scope.row)"
-                >回访记录</el-button>
-            </template>
-          </el-table-column>
-      </el-table>
-      <pagination
-          sync
-          :total.sync="pageInfo.total"
-          :page.sync="pageInfo.page"
-          :limit.sync="pageInfo.limit"
-          :page-sizes="pageInfo.page_size"
-          @pagination="getList"
-        />
-    </div>
-  </div>
-</template>
-
-<script>
-import pagination from "@/components/Pagination/index";
-import { queryPage } from '../api'
-export default {
-  name: "tableList",
-  props: ['groupType'],
-  components: {
-    pagination
-  },
-  data() {
-    return {
-      searchForm: {
-        search: "",
-        organId: "",
-        teacherId: ""
-      },
-      tableList: [{
-        name: "",
-        phone: "",
-        organName: "",
-        teacherName: "",
-        createTime: "",
-        status: "",
-        id: ""
-      }],
-      pageInfo: {
-        // 分页规则
-        limit: 10, // 限制显示条数
-        page: 1, // 当前页
-        total: 0, // 总条数
-        page_size: [10, 20, 40, 50], // 选择限制显示条数
-      },
-    };
-  },
-  async mounted() {
-    this.$store.dispatch("setBranchs");
-    this.$store.dispatch("setTeachers");
-
-    await this.getList();
-  },
-  methods: {
-    onSearch() {
-      this.pageInfo.page = 1;
-      this.getList();
-    },
-    onReSet() {
-      this.$refs.searchForm.resetFields();
-      this.onSearch();
-    },
-    async getList() {
-      let params = {...this.searchForm};
-      params.rows = this.pageInfo.limit;
-      params.page = this.pageInfo.page;
-      try {
-        let res = await queryPage({
-          ...params,
-          groupType: this.groupType,
-        });
-        this.tableList = res.data.rows || [];
-        this.pageInfo.total = res.data.total;
-        console.log(res)
-      } catch {}
-    }
-  }
-};
-</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="tableList">
+    <save-form
+      :inline="true"
+      class="searchForm"
+      @submit="onSearch"
+      @reset="onReSet"
+      ref="searchForm"
+      :model.sync="searchForm"
+    >
+      <el-form-item prop="search">
+        <el-input
+          clearable
+          placeholder="学生姓名/编号"
+          @keyup.enter.native="onSearch"
+          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"
+          filterable
+          v-model.trim="searchForm.studentStatus"
+          clearable
+          placeholder="请选择学员状态"
+        >
+          <el-option label="在读" value="NORMAL"></el-option>
+          <el-option label="沉睡" value="SLEEPY"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="feedbackType">
+        <el-select
+          class="multiple"
+          filterable
+          v-model.trim="searchForm.feedbackType"
+          clearable
+          placeholder="请选择回访状态"
+        >
+          <el-option
+            :label="item.label"
+            :value="item.value"
+            v-for="(item, index) in feedbackTypeList"
+            :key="index"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="latelyCourseConsumer">
+        <el-input
+          clearable
+          placeholder="近30天课耗"
+          v-model.trim="searchForm.latelyCourseConsumer"
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="visitNum">
+        <el-input
+          clearable
+          placeholder="回访次数"
+          v-model.trim="searchForm.visitNum"
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="teacherId">
+        <remote-search :commit="'setTeachers'" v-model="searchForm.teacherId" />
+      </el-form-item>
+      <el-form-item prop="musicDirectorId">
+        <remote-search
+          :commit="'setEducations'"
+          v-model="searchForm.musicDirectorId"
+        />
+      </el-form-item>
+      <el-form-item prop="courseConsumerError">
+        <el-select
+          class="multiple"
+          filterable
+          v-model.trim="searchForm.courseConsumerError"
+          clearable
+          placeholder="请选择课耗是否异常"
+        >
+          <el-option label="是" :value="true"></el-option>
+          <el-option label="否" :value="false"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="timer">
+        <el-date-picker
+          v-model.trim="searchForm.timer"
+          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="danger">搜索</el-button>
+        <el-button native-type="reset" type="primary">重置</el-button>
+      </el-form-item>
+    </save-form>
+
+    <div class="tableWrap">
+      <el-table
+        :data="tableList"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+      >
+        <el-table-column type="expand">
+          <template slot-scope="props">
+            <el-form
+              label-position="left"
+              class="demo-table-expand"
+              :inline="true"
+            >
+              <el-row>
+                <el-col :span="6">
+                  <el-form-item label="指导老师信息">
+                    <div
+                      class="schoolWrap"
+                      style="color: var(--color-primary); cursor: pointer"
+                      v-if="props.row.teacherId"
+                      @click="gototeacher(props.row.teacherId)"
+                    >
+                      <span>{{ props.row.teacherName }}</span>
+                      <span>({{ props.row.teacherId }})</span>
+                    </div>
+                  </el-form-item></el-col
+                >
+                <el-col :span="6">
+                  <el-form-item label="乐团主管">
+                    <div class="schoolWrap" v-if="props.row.musicDirectorId">
+                      <span>{{ props.row.musicDirectorName }}</span>
+                      <span>({{ props.row.musicDirectorId }})</span>
+                    </div>
+                  </el-form-item></el-col
+                >
+                <el-col :span="6">
+                  <el-form-item label="声部课老师">
+                    <div class="schoolWrap">
+                      <overflow-text
+                        width="100%"
+                        :text="props.row.studentBasicInfo.subjectTeacherName"
+                      ></overflow-text>
+                    </div> </el-form-item
+                ></el-col>
+                <el-col :span="6">
+                  <el-form-item label="年级">
+                    <div class="schoolWrap">
+                      <overflow-text
+                        width="100%"
+                        :text="props.row.studentBasicInfo.grade"
+                      ></overflow-text>
+                    </div> </el-form-item
+                ></el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="6">
+                  <el-form-item label="近30天课耗">
+                    <div class="schoolWrap">
+                      <span>{{ props.row.latelyCourseConsumer }}</span>
+                    </div>
+                  </el-form-item></el-col
+                >
+                <el-col :span="6">
+                  <el-form-item label="回访次数">
+                    <div class="schoolWrap">
+                      <span>{{ props.row.visitNum }}</span>
+                    </div>
+                  </el-form-item></el-col
+                >
+                <el-col :span="6">
+                  <el-form-item label="回访状态">
+                    <div class="schoolWrap">
+                      {{ props.row.lastVisitStatus | feedbackTypeFilter }}
+                    </div>
+                  </el-form-item></el-col
+                >
+                <el-col :span="6">
+                  <el-form-item label="回访日期">
+                    <div class="schoolWrap">
+                      <overflow-text
+                        width="100%"
+                        :text="props.row.lastVisitTime"
+                      ></overflow-text>
+                    </div> </el-form-item
+                ></el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="6">
+                  <el-form-item label="第一次课时间">
+                    <div class="schoolWrap">
+                      <overflow-text
+                        width="100%"
+                        :text="props.row.firstCourseTime"
+                      ></overflow-text>
+                    </div> </el-form-item
+                ></el-col>
+                <el-col :span="6">
+                  <el-form-item label="最近上课时间">
+                    <div class="schoolWrap">
+                      <overflow-text
+                        width="100%"
+                        :text="props.row.lastCourseTime"
+                      ></overflow-text>
+                    </div> </el-form-item
+                ></el-col>
+                <el-col :span="6">
+                  <el-form-item label="原因">
+                    <div class="schoolWrap">
+                      <overflow-text
+                        width="100%"
+                        :text="props.row.visitReason"
+                      ></overflow-text>
+                    </div> </el-form-item
+                ></el-col>
+              </el-row>
+            </el-form>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="organName" label="所属分部">
+          <template slot-scope="scope">
+            <copy-text>{{
+              scope.row.studentBasicInfo && scope.row.studentBasicInfo.organName
+            }}</copy-text>
+          </template>
+        </el-table-column>
+        <el-table-column
+          align="center"
+          prop="userId"
+          label="学员信息"
+          width="140px"
+        >
+          <template slot-scope="scope">
+            <div
+              style="color: var(--color-primary); cursor: pointer"
+              v-if="scope.row.studentBasicInfo"
+              @click="gotoStudent(scope.row.studentBasicInfo.userId)"
+            >
+              {{
+                scope.row.studentBasicInfo &&
+                scope.row.studentBasicInfo.userName
+              }}<br />
+              {{
+                scope.row.studentBasicInfo && scope.row.studentBasicInfo.userId
+              }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          align="center"
+          prop="studentBasicInfo.phone"
+          label="联系电话"
+        >
+        </el-table-column>
+        <el-table-column
+          align="center"
+          prop="studentBasicInfo.subjectName"
+          label="声部"
+        >
+        </el-table-column>
+        <el-table-column
+          align="center"
+          prop="studentBasicInfo.cooperationOrganName"
+          label="学校"
+        >
+        </el-table-column>
+        <el-table-column align="center" prop="organName" label="学员状态">
+               <template slot-scope="scope">
+                 <div>
+                   <p v-if="(scope.row.noScheduleNum || scope.row.subCourseNum)&&(scope.row.latelyYearCourseConsumer || !scope.row.overCourseNum)">在读</p>
+                   <p v-if="(scope.row.overCourseNum && scope.row.subCourseNum&&!scope.row.latelyYearCourseConsumer)">沉睡</p>
+                 </div>
+
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="noScheduleNum" label="未排课时">
+          <template slot-scope="scope">
+            {{ scope.row.noScheduleNum }}节
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="totalCourseNum" label="总课时">
+          <template slot-scope="scope">
+            {{ scope.row.totalCourseNum }}节
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="overCourseNum" label="已完成课时">
+          <template slot-scope="scope">
+            {{ scope.row.overCourseNum }}节
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="subCourseNum" label="剩余课时">
+          <template slot-scope="scope">
+            {{ scope.row.subCourseNum }}节
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="preCourseFee" label="预收金额">
+          <template slot-scope="scope">
+            {{ scope.row.preCourseFee | moneyFormat }}元
+          </template>
+        </el-table-column>
+        <el-table-column align="center" width="180px" label="操作">
+          <template slot-scope="scope">
+            <el-button type="text" @click="setStudent(scope.row)"
+              >回访记录</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        sync
+        :total.sync="pageInfo.total"
+        :page.sync="pageInfo.page"
+        :limit.sync="pageInfo.limit"
+        :page-sizes="pageInfo.page_size"
+        @pagination="getList"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import pagination from "@/components/Pagination/index";
+import { queryPage } from "../api";
+import { feedbackTypeList } from "@/utils/searchArray";
+import { getTimes } from "@/utils";
+export default {
+  name: "tableList",
+  props: ["groupType"],
+  components: {
+    pagination,
+  },
+  data() {
+    return {
+      searchForm: {
+        search: "",
+        organId: [],
+        studentStatus: "",
+        feedbackType: "",
+        latelyCourseConsumer: "",
+        visitNum: "",
+        teacherId: "",
+        musicDirectorId: "",
+        courseConsumerError: "",
+        timer: "",
+      },
+      tableList: [
+        {
+          name: "",
+          phone: "",
+          organName: "",
+          teacherName: "",
+          createTime: "",
+          status: "",
+          id: "",
+        },
+      ],
+      feedbackTypeList,
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },
+  async mounted() {
+    this.$store.dispatch("setBranchs");
+    this.$store.dispatch("setTeachers");
+
+    await this.getList();
+  },
+  methods: {
+    onSearch() {
+      this.pageInfo.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.searchForm.timer = [];
+      this.$refs.searchForm.resetFields();
+
+      this.onSearch();
+    },
+    async getList() {
+      const { timer, ...rest } = this.searchForm;
+      try {
+        let res = await queryPage({
+          groupType: this.groupType,
+          ...rest,
+          ...getTimes(timer, ["firstCourseStartTime", "firstCourseEndTime"]),
+          rows: this.pageInfo.limit,
+          page: this.pageInfo.page,
+          organId: this.searchForm.organId.join(","),
+        });
+        this.tableList = res.data.rows || [];
+        this.pageInfo.total = res.data.total;
+        console.log(res);
+      } catch {}
+    },
+    gotoStudent(search) {
+      // this.$router.push({
+      //   name: "teamCourseList",
+      //   params: { courseIdSearch: row.id },
+      // });
+
+      this.$router.push({
+        name: "studentList",
+        params: { search: search },
+      });
+    },
+    gototeacher(search){
+        this.$router.push({
+        name: "teacherList",
+        params: { search: search },
+      });
+    }
+  },
+};
+</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>

+ 128 - 0
src/views/smallStudentManager/components/visiList.vue

@@ -0,0 +1,128 @@
+<template>
+   <div class="m-core">
+      <save-form
+        :inline="true"
+        @submit="search"
+        @reset="onReSet"
+        :model="searchForm"
+      >
+        <el-form-item prop="teacher">
+          <el-input
+            placeholder="老师姓名、编号"
+            v-model.trim="searchForm.teacher"
+          ></el-input>
+        </el-form-item>
+        <el-form-item prop="visiterType">
+          <el-select
+            v-model.trim="searchForm.visiterType"
+            placeholder="请选择角色"
+            clearable
+            filterable
+          >
+            <el-option value="TEACHER" label="指导老师"></el-option>
+            <el-option value="EDU_TEACHER" label="乐团主管"></el-option>
+          </el-select>
+        </el-form-item>
+        <!-- @change="handleChange" -->
+        <el-form-item prop="feedbackType">
+           <el-select
+            v-model.trim="searchForm.feedbackType"
+            placeholder="请选择回访结果"
+            clearable
+            filterable
+          >
+            <el-option :value="item.value" :label="item.label" v-for="(item,index) in feedbackTypeList" :key="index"></el-option>
+
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-date-picker
+            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 type="danger" native-type="submit">搜索</el-button>
+          <el-button native-type="reset" type="primary">重置</el-button>
+        </el-form-item>
+      </save-form>
+      <div class="tableWrap">
+        <el-table
+          :data="tableList"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        >
+          <el-table-column align="center" prop="teacherName" label="老师姓名">
+            <template slot-scope="scope">
+              <copy-text>{{ scope.row.teacherName }}</copy-text>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="visiterType" label="角色">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.visiterType | visiterType }}
+              </div>
+            </template>
+          </el-table-column>
+
+
+
+          <el-table-column align="center" prop="visitTime" label="回访时间">
+            <template slot-scope="scope">
+              <div>
+                {{
+                  scope.row.visitTime ? scope.row.visitTime.split(" ")[0] : "--"
+                }}
+              </div>
+            </template>
+          </el-table-column>
+                <el-table-column align="center" prop="type" label="回访结果">
+                  <template slot-scope="scope">
+                    <div>
+                      {{scope.row.feedbackType | feedbackTypeFilter}}
+                    </div>
+                  </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+</template>
+<script>
+import {feedbackTypeList} from '@/utils/searchArray'
+export default {
+  data(){
+    return {
+      feedbackTypeList,
+        rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    }
+  },
+  mounted(){},
+  methods:{}
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 3 - 0
src/views/teacherManager/teacherList.vue

@@ -428,6 +428,9 @@ export default {
   //   this.getList();
   //   this.getList();
   // },
   // },
   mounted() {
   mounted() {
+       if (this.$route.params.search) {
+      this.searchForm.search = this.$route.params.search;
+    }
     this.__init();
     this.__init();
     this.getList();
     this.getList();
   },
   },