Browse Source

more and more

Changpeng Duan 5 years ago
parent
commit
923fdd7579

+ 16 - 5
pc/src/api/Navs.js

@@ -80,7 +80,18 @@ let navs = [
         "show": 3,
         "show": 3,
         "grouplist": "2,5",
         "grouplist": "2,5",
         "icon": "el-icon-bank-card",
         "icon": "el-icon-bank-card",
-    }, {
+    },
+    {
+        "clmid": "21",
+        "clmcode": "courses",
+        "clmname": "课程管理",
+        "clmurl": "/courses",
+        "prname": "",
+        "show": 3,
+        "grouplist": "2,5",
+        "icon": "el-icon-bank-card",
+    },
+    {
         "clmid": "10",
         "clmid": "10",
         "clmcode": "finish",
         "clmcode": "finish",
         "clmname": "下课管理",
         "clmname": "下课管理",
@@ -198,8 +209,8 @@ let navs = [
         "show": 4,
         "show": 4,
         "grouplist": "2,5",
         "grouplist": "2,5",
         "icon": "el-icon-bank-card",
         "icon": "el-icon-bank-card",
-    }, {
-        "clmid": "10",
+    },{
+        "clmid": "11",
         "clmcode": "finish",
         "clmcode": "finish",
         "clmname": "下课管理",
         "clmname": "下课管理",
         "clmurl": "/finish",
         "clmurl": "/finish",
@@ -223,7 +234,7 @@ let navs = [
         "clmname": "心率设备",
         "clmname": "心率设备",
         "clmurl": "/heartEquip",
         "clmurl": "/heartEquip",
         "prname": "",
         "prname": "",
-        "show": 99,//2
+        "show": 3,//2
         "grouplist": "2,5",
         "grouplist": "2,5",
         "icon": "el-icon-cpu",
         "icon": "el-icon-cpu",
     }, {
     }, {
@@ -232,7 +243,7 @@ let navs = [
         "clmname": "区域管理",
         "clmname": "区域管理",
         "clmurl": "/region",
         "clmurl": "/region",
         "prname": "",
         "prname": "",
-        "show": 99,//2
+        "show": 3,//2
         "grouplist": "2,5",
         "grouplist": "2,5",
         "icon": "el-icon-map-location",
         "icon": "el-icon-map-location",
     },
     },

+ 103 - 0
pc/src/api/getApiRes.js

@@ -93,6 +93,7 @@ export function ClassAdd(postdata) {
     let url = headapi + 'v1/Class/ClassAdd';
     let url = headapi + 'v1/Class/ClassAdd';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 课程统计
 // 课程统计
 export function ClassStatistics(postdata) {
 export function ClassStatistics(postdata) {
     let url = headapi + 'v1/Class/ClassStatistics';
     let url = headapi + 'v1/Class/ClassStatistics';
@@ -110,6 +111,7 @@ export function ClassDetailOne(postdata) {
     let url = headapi + 'v1/Class/ClassDetailOne';
     let url = headapi + 'v1/Class/ClassDetailOne';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // √ 课程基本信息修改
 // √ 课程基本信息修改
 export function ClassEdit(postdata) {
 export function ClassEdit(postdata) {
     let url = headapi + 'v1/Class/ClassEdit';
     let url = headapi + 'v1/Class/ClassEdit';
@@ -145,47 +147,56 @@ export function ClassVisibleStatusEdit(postdata) {
     let url = headapi + 'v1/Class/ClassVisibleStatusEdit';
     let url = headapi + 'v1/Class/ClassVisibleStatusEdit';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // order
 // order
 // 最新预约列表查询
 // 最新预约列表查询
 export function LastOrderQuery(postdata) {
 export function LastOrderQuery(postdata) {
     let url = headapi + 'v1/Order/LastOrderQuery';
     let url = headapi + 'v1/Order/LastOrderQuery';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 管理员今日预约添加
 // 管理员今日预约添加
 export function OrderAddByManager(postdata) {
 export function OrderAddByManager(postdata) {
     let url = headapi + 'v1/Order/OrderAddByManager';
     let url = headapi + 'v1/Order/OrderAddByManager';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 管理员今日预约取消
 // 管理员今日预约取消
 export function OrderCancelByManager(postdata) {
 export function OrderCancelByManager(postdata) {
     let url = headapi + 'v1/Order/OrderCancelByManager';
     let url = headapi + 'v1/Order/OrderCancelByManager';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 预约记录查询
 // 预约记录查询
 export function OrderListQuery(postdata) {
 export function OrderListQuery(postdata) {
     let url = headapi + 'v1/Order/OrderListQuery';
     let url = headapi + 'v1/Order/OrderListQuery';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 今日预约统计
 // 今日预约统计
 export function OrderStatistics(postdata) {
 export function OrderStatistics(postdata) {
     let url = headapi + 'v1/Order/OrderStatistics';
     let url = headapi + 'v1/Order/OrderStatistics';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 今日课程预约总览
 // 今日课程预约总览
 export function TodayClassOrderQuery(postdata) {
 export function TodayClassOrderQuery(postdata) {
     let url = headapi + 'v1/Order/TodayClassOrderQuery';
     let url = headapi + 'v1/Order/TodayClassOrderQuery';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 课程预约列表
 // 课程预约列表
 export function ClassOrderQuery(postdata) {
 export function ClassOrderQuery(postdata) {
     let url = headapi + 'v1/Order/ClassOrderQuery';
     let url = headapi + 'v1/Order/ClassOrderQuery';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 今日会员预约列表查询
 // 今日会员预约列表查询
 export function TodayVipOrderQuery(postdata) {
 export function TodayVipOrderQuery(postdata) {
     let url = headapi + 'v1/Order/TodayVipOrderQuery';
     let url = headapi + 'v1/Order/TodayVipOrderQuery';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 会员预约列表查询
 // 会员预约列表查询
 export function VipUserOrderQuery(postdata) {
 export function VipUserOrderQuery(postdata) {
     let url = headapi + 'v1/Order/VipUserOrderQuery';
     let url = headapi + 'v1/Order/VipUserOrderQuery';
@@ -199,26 +210,31 @@ export function ClassOngoingList(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/ClassOngoingList';
     let url = headapi + 'v1/SchoolTimeTable/ClassOngoingList';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 课程表预览
 // 课程表预览
 export function SchoolTimetablePreview(postdata) {
 export function SchoolTimetablePreview(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/SchoolTimetablePreview';
     let url = headapi + 'v1/SchoolTimeTable/SchoolTimetablePreview';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 课程详情判断是否可删除
 // 课程详情判断是否可删除
 export function STTDetailAllowDelCheck(postdata) {
 export function STTDetailAllowDelCheck(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/STTDetailAllowDelCheck';
     let url = headapi + 'v1/SchoolTimeTable/STTDetailAllowDelCheck';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 下课记录详情删除
 // 下课记录详情删除
 export function ClassOverDetailDel(postdata) {
 export function ClassOverDetailDel(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/ClassOverDetailDel';
     let url = headapi + 'v1/SchoolTimeTable/ClassOverDetailDel';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 课程表详情微信可预约状态修改
 // 课程表详情微信可预约状态修改
 export function STTDetailWxOrderEdit(postdata) {
 export function STTDetailWxOrderEdit(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/STTDetailWxOrderEdit';
     let url = headapi + 'v1/SchoolTimeTable/STTDetailWxOrderEdit';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 某日课程表查询
 // 某日课程表查询
 export function ClassListByOrderDate(postdata) {
 export function ClassListByOrderDate(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/ClassListByOrderDate';
     let url = headapi + 'v1/SchoolTimeTable/ClassListByOrderDate';
@@ -231,26 +247,31 @@ export function ClassOverConfirm(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/ClassOverConfirm';
     let url = headapi + 'v1/SchoolTimeTable/ClassOverConfirm';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 下课记录详情添加
 // 下课记录详情添加
 export function ClassOverDetailAdd(postdata) {
 export function ClassOverDetailAdd(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/ClassOverDetailAdd';
     let url = headapi + 'v1/SchoolTimeTable/ClassOverDetailAdd';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 下课记录详情列表
 // 下课记录详情列表
 export function ClassOverDetailListQuery(postdata) {
 export function ClassOverDetailListQuery(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/ClassOverDetailListQuery';
     let url = headapi + 'v1/SchoolTimeTable/ClassOverDetailListQuery';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 下课记录详情状态修改
 // 下课记录详情状态修改
 export function ClassOverDetailStatusEdit(postdata) {
 export function ClassOverDetailStatusEdit(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/ClassOverDetailStatusEdit';
     let url = headapi + 'v1/SchoolTimeTable/ClassOverDetailStatusEdit';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 待下课课程列表
 // 待下课课程列表
 export function ClassOverPrepare(postdata) {
 export function ClassOverPrepare(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/ClassOverPrepare';
     let url = headapi + 'v1/SchoolTimeTable/ClassOverPrepare';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 下课准备
 // 下课准备
 export function ClassPreFinishListQuery(postdata) {
 export function ClassPreFinishListQuery(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/ClassPreFinishListQuery';
     let url = headapi + 'v1/SchoolTimeTable/ClassPreFinishListQuery';
@@ -262,6 +283,7 @@ export function STTBasicAdd(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/STTBasicAdd';
     let url = headapi + 'v1/SchoolTimeTable/STTBasicAdd';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 课程表基本信息修改
 // 课程表基本信息修改
 export function STTBasicEdit(postdata) {
 export function STTBasicEdit(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/STTBasicEdit';
     let url = headapi + 'v1/SchoolTimeTable/STTBasicEdit';
@@ -273,11 +295,13 @@ export function STTBasicListQuery(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/STTBasicListQuery';
     let url = headapi + 'v1/SchoolTimeTable/STTBasicListQuery';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 课程表上下线状态修改
 // 课程表上下线状态修改
 export function STTBasicOfflineEdit(postdata) {
 export function STTBasicOfflineEdit(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/STTBasicOfflineEdit';
     let url = headapi + 'v1/SchoolTimeTable/STTBasicOfflineEdit';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 课程表状态修改
 // 课程表状态修改
 export function STTBasicStatusEdit(postdata) {
 export function STTBasicStatusEdit(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/STTBasicStatusEdit';
     let url = headapi + 'v1/SchoolTimeTable/STTBasicStatusEdit';
@@ -289,16 +313,19 @@ export function STTDetailBatchSave(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/STTDetailBatchSave';
     let url = headapi + 'v1/SchoolTimeTable/STTDetailBatchSave';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 课程表详情列表查询
 // 课程表详情列表查询
 export function STTDetailListQuery(postdata) {
 export function STTDetailListQuery(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/STTDetailListQuery';
     let url = headapi + 'v1/SchoolTimeTable/STTDetailListQuery';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 复制课程表
 // 复制课程表
 export function SchoolTimeTableCopy(postdata) {
 export function SchoolTimeTableCopy(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/SchoolTimeTableCopy';
     let url = headapi + 'v1/SchoolTimeTable/SchoolTimeTableCopy';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 今日未上课课程列表查询
 // 今日未上课课程列表查询
 export function WaitingBeginClassList(postdata) {
 export function WaitingBeginClassList(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/WaitingBeginClassList';
     let url = headapi + 'v1/SchoolTimeTable/WaitingBeginClassList';
@@ -311,11 +338,13 @@ export function ShopAdd(postdata) {
     let url = headapi + 'v1/Shop/ShopAdd';
     let url = headapi + 'v1/Shop/ShopAdd';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 店铺微信预约状态修改
 // 店铺微信预约状态修改
 export function ShopWxStatusEdit(postdata) {
 export function ShopWxStatusEdit(postdata) {
     let url = headapi + 'v1/Shop/ShopWxStatusEdit';
     let url = headapi + 'v1/Shop/ShopWxStatusEdit';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 店铺单条查询
 // 店铺单条查询
 export function ShopDetailOne(postdata) {
 export function ShopDetailOne(postdata) {
     let url = headapi + 'v1/Shop/ShopDetailOne';
     let url = headapi + 'v1/Shop/ShopDetailOne';
@@ -327,6 +356,7 @@ export function ShopDetailQuery(postdata) {
     let url = headapi + 'v1/User/ShopDetailQuery';
     let url = headapi + 'v1/User/ShopDetailQuery';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 //  操作日志列表查询
 //  操作日志列表查询
 export function OptLogListQuery(postdata) {
 export function OptLogListQuery(postdata) {
     let url = headapi + 'v1/User/OptLogListQuery';
     let url = headapi + 'v1/User/OptLogListQuery';
@@ -388,6 +418,7 @@ export function SttPlanCopy(postdata) {
     let url = headapi + 'v1/SttPlan/SttPlanCopy';
     let url = headapi + 'v1/SttPlan/SttPlanCopy';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 课程表模板基本信息状态修改
 // 课程表模板基本信息状态修改
 export function SttPlanBasicStatusEdit(postdata) {
 export function SttPlanBasicStatusEdit(postdata) {
     let url = headapi + 'v1/SttPlan/SttPlanBasicStatusEdit';
     let url = headapi + 'v1/SttPlan/SttPlanBasicStatusEdit';
@@ -399,6 +430,7 @@ export function SttPlanDetailListQuery(postdata) {
     let url = headapi + 'v1/SttPlan/SttPlanDetailListQuery';
     let url = headapi + 'v1/SttPlan/SttPlanDetailListQuery';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 课程表模板发布
 // 课程表模板发布
 export function SttPlanPublish(postdata) {
 export function SttPlanPublish(postdata) {
     let url = headapi + 'v1/SttPlan/SttPlanPublish';
     let url = headapi + 'v1/SttPlan/SttPlanPublish';
@@ -417,16 +449,19 @@ export function TeacherAdd(postdata) {
     let url = headapi + 'v1/Teacher/TeacherAdd';
     let url = headapi + 'v1/Teacher/TeacherAdd';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 教练信息修改  √
 // 教练信息修改  √
 export function TeacherEdit(postdata) {
 export function TeacherEdit(postdata) {
     let url = headapi + 'v1/Teacher/TeacherEdit';
     let url = headapi + 'v1/Teacher/TeacherEdit';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 教练信息列表查询  √
 // 教练信息列表查询  √
 export function TeacherListQuery(postdata) {
 export function TeacherListQuery(postdata) {
     let url = headapi + 'v1/Teacher/TeacherListQuery';
     let url = headapi + 'v1/Teacher/TeacherListQuery';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 教练状态修改  √
 // 教练状态修改  √
 export function TeacherStatusEdit(postdata) {
 export function TeacherStatusEdit(postdata) {
     let url = headapi + 'v1/Teacher/TeacherStatusEdit';
     let url = headapi + 'v1/Teacher/TeacherStatusEdit';
@@ -463,21 +498,25 @@ export function ShopManagerStatusEdit(postdata) {
     let url = headapi + 'v1/User/ShopManagerStatusEdit';
     let url = headapi + 'v1/User/ShopManagerStatusEdit';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 会员用户课时调整
 // 会员用户课时调整
 export function VipUserHourEdit(postdata) {
 export function VipUserHourEdit(postdata) {
     let url = headapi + 'v1/User/VipUserHourEdit';
     let url = headapi + 'v1/User/VipUserHourEdit';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 会员统计
 // 会员统计
 export function VipUserStatistics(postdata) {
 export function VipUserStatistics(postdata) {
     let url = headapi + 'v1/User/VipUserStatistics';
     let url = headapi + 'v1/User/VipUserStatistics';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 会员课程增删
 // 会员课程增删
 export function VipUserClassEdit(postdata) {
 export function VipUserClassEdit(postdata) {
     let url = headapi + 'v1/User/VipUserClassEdit';
     let url = headapi + 'v1/User/VipUserClassEdit';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 会员有效期调整
 // 会员有效期调整
 export function VipUserExpEdit(postdata) {
 export function VipUserExpEdit(postdata) {
     let url = headapi + 'v1/User/VipUserExpEdit';
     let url = headapi + 'v1/User/VipUserExpEdit';
@@ -495,6 +534,7 @@ export function VipUserEdit(postdata) {
     let url = headapi + 'v1/User/VipUserEdit ';
     let url = headapi + 'v1/User/VipUserEdit ';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 // 会员消费记录查询
 // 会员消费记录查询
 export function VipUserConsumeListQuery(postdata) {
 export function VipUserConsumeListQuery(postdata) {
     let url = headapi + 'v1/User/VipUserConsumeListQuery ';
     let url = headapi + 'v1/User/VipUserConsumeListQuery ';
@@ -525,6 +565,7 @@ export function QueryTakeCustomerByName(postdata) {
     let url = headapi + 'v1/Take/QueryTakeCustomerByName ';
     let url = headapi + 'v1/Take/QueryTakeCustomerByName ';
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
+
 //
 //
 // 绑定Take用户
 // 绑定Take用户
 export function BindTakeCustomer(postdata) {
 export function BindTakeCustomer(postdata) {
@@ -532,6 +573,68 @@ export function BindTakeCustomer(postdata) {
     return getApiBasic(url, postdata);
     return getApiBasic(url, postdata);
 }
 }
 
 
+// 查询商家区域
+export function QueryShopVenue(postdata) {
+    let url = headbpi + 'v1/Shop/QueryShopVenue ';
+    return getApiBasic(url, postdata);
+}
+
+// 添加商家区域
+export function AddShopVenue(postdata) {
+    let url = headbpi + 'v1/Shop/AddShopVenue ';
+    return getApiBasic(url, postdata);
+}
+
+// 修改商家区域
+export function EditShopVenue(postdata) {
+    let url = headbpi + 'v1/Shop/EditShopVenue ';
+    return getApiBasic(url, postdata);
+}
+
+// 修改商家区域状态
+export function ShopVenueStatusEdit(postdata) {
+    let url = headbpi + 'v1/Shop/ShopVenueStatusEdit ';
+    return getApiBasic(url, postdata);
+}
+
+// 查询商家区域设备
+export function QueryVenueEquip(postdata) {
+    let url = headbpi + 'v1/Shop/QueryVenueEquip ';
+    return getApiBasic(url, postdata);
+}
+
+// 修改场馆设备状态
+export function ShopVenueEquipEditStatus(postdata) {
+    let url = headbpi + 'v1/Shop/ShopVenueEquipEditStatus ';
+    return getApiBasic(url, postdata);
+}
+
+// 添加场馆设备
+export function AddShopVenueEquip(postdata) {
+    let url = headbpi + 'v1/Shop/AddShopVenueEquip ';
+    return getApiBasic(url, postdata);
+}
+
+// 修改场馆设备
+export function EditShopVenueEquip(postdata) {
+    let url = headbpi + 'v1/Shop/EditShopVenueEquip ';
+    return getApiBasic(url, postdata);
+}
+
+
+// 11/20 新增
+// 待下课课程列表
+export function ClassDetailQuery(postdata) {
+    let url = headapi + 'v1/SchoolTimeTable/ClassDetailQuery ';
+    return getApiBasic(url, postdata);
+}
+
+// 上课准备
+export function ClassStartPrepare(postdata) {
+    let url = headapi + 'v1/SchoolTimeTable/ClassStartPrepare ';
+    return getApiBasic(url, postdata);
+}
+
 
 
 
 
 
 

+ 50 - 26
pc/src/router/index.js

@@ -28,7 +28,7 @@ const routes = [
                     title: "首页",
                     title: "首页",
                     clmid: "1",
                     clmid: "1",
                 }
                 }
-            },{
+            }, {
                 path: '/member',
                 path: '/member',
                 name: 'Member',
                 name: 'Member',
                 component: () => import('@/views/Member.vue'),
                 component: () => import('@/views/Member.vue'),
@@ -36,7 +36,7 @@ const routes = [
                     title: "会员管理",
                     title: "会员管理",
                     clmid: "2",
                     clmid: "2",
                 }
                 }
-            },{
+            }, {
                 path: '/lesson',
                 path: '/lesson',
                 name: 'Lesson',
                 name: 'Lesson',
                 component: () => import('@/views/Lesson.vue'),
                 component: () => import('@/views/Lesson.vue'),
@@ -44,7 +44,7 @@ const routes = [
                     title: "课程模板",
                     title: "课程模板",
                     clmid: "3",
                     clmid: "3",
                 }
                 }
-            },{
+            }, {
                 path: '/lessonTable',
                 path: '/lessonTable',
                 name: 'lessonTable',
                 name: 'lessonTable',
                 component: () => import('@/views/LessonTable.vue'),
                 component: () => import('@/views/LessonTable.vue'),
@@ -52,7 +52,7 @@ const routes = [
                     title: "课程表模板",
                     title: "课程表模板",
                     clmid: "4",
                     clmid: "4",
                 }
                 }
-            },{
+            }, {
                 path: '/editLessonTable',
                 path: '/editLessonTable',
                 name: 'EditLessonTable',
                 name: 'EditLessonTable',
                 component: () => import('@/views/EditLessonTable.vue'),
                 component: () => import('@/views/EditLessonTable.vue'),
@@ -60,7 +60,7 @@ const routes = [
                     title: "编辑课程表模板",
                     title: "编辑课程表模板",
                     clmid: "4",
                     clmid: "4",
                 }
                 }
-            },{
+            }, {
                 path: '/editLessonManage',
                 path: '/editLessonManage',
                 name: 'EditLessonManage',
                 name: 'EditLessonManage',
                 component: () => import('@/views/EditLessonManage.vue'),
                 component: () => import('@/views/EditLessonManage.vue'),
@@ -68,7 +68,7 @@ const routes = [
                     title: "编辑课程表",
                     title: "编辑课程表",
                     clmid: "5",
                     clmid: "5",
                 }
                 }
-            },{
+            }, {
                 path: '/adminManage',
                 path: '/adminManage',
                 name: 'AdminManage',
                 name: 'AdminManage',
                 component: () => import('@/views/AdminManage.vue'),
                 component: () => import('@/views/AdminManage.vue'),
@@ -76,7 +76,7 @@ const routes = [
                     title: "管理员管理",
                     title: "管理员管理",
                     clmid: "13",
                     clmid: "13",
                 }
                 }
-            },{
+            }, {
                 path: '/log',
                 path: '/log',
                 name: 'Log',
                 name: 'Log',
                 component: () => import('@/views/Log.vue'),
                 component: () => import('@/views/Log.vue'),
@@ -84,7 +84,7 @@ const routes = [
                     title: "操作日志",
                     title: "操作日志",
                     clmid: "14",
                     clmid: "14",
                 }
                 }
-            },{
+            }, {
                 path: '/shopManage',
                 path: '/shopManage',
                 name: 'ShopManage',
                 name: 'ShopManage',
                 component: () => import('@/views/ShopManage.vue'),
                 component: () => import('@/views/ShopManage.vue'),
@@ -92,7 +92,7 @@ const routes = [
                     title: "店面管理",
                     title: "店面管理",
                     clmid: "12",
                     clmid: "12",
                 }
                 }
-            },{
+            }, {
                 path: '/adminSetting',
                 path: '/adminSetting',
                 name: 'AdminSetting',
                 name: 'AdminSetting',
                 component: () => import('@/views/AdminSetting.vue'),
                 component: () => import('@/views/AdminSetting.vue'),
@@ -100,7 +100,7 @@ const routes = [
                     title: "系统设置",
                     title: "系统设置",
                     clmid: "15",
                     clmid: "15",
                 }
                 }
-            },{
+            }, {
                 path: '/lessonManage',
                 path: '/lessonManage',
                 name: 'lessonManage',
                 name: 'lessonManage',
                 component: () => import('@/views/lessonManage.vue'),
                 component: () => import('@/views/lessonManage.vue'),
@@ -108,7 +108,7 @@ const routes = [
                     title: "课程表管理",
                     title: "课程表管理",
                     clmid: "5",
                     clmid: "5",
                 }
                 }
-            },{
+            }, {
                 path: '/coach',
                 path: '/coach',
                 name: 'coach',
                 name: 'coach',
                 component: () => import('@/views/coach.vue'),
                 component: () => import('@/views/coach.vue'),
@@ -116,7 +116,7 @@ const routes = [
                     title: "教练管理",
                     title: "教练管理",
                     clmid: "6",
                     clmid: "6",
                 }
                 }
-            },{
+            }, {
                 path: '/appoint',
                 path: '/appoint',
                 name: 'appoint',
                 name: 'appoint',
                 component: () => import('@/views/appoint.vue'),
                 component: () => import('@/views/appoint.vue'),
@@ -124,7 +124,7 @@ const routes = [
                     title: "预约管理",
                     title: "预约管理",
                     clmid: "7",
                     clmid: "7",
                 }
                 }
-            },{
+            }, {
                 path: '/record',
                 path: '/record',
                 name: 'record',
                 name: 'record',
                 component: () => import('@/views/record.vue'),
                 component: () => import('@/views/record.vue'),
@@ -132,7 +132,7 @@ const routes = [
                     title: "预约记录",
                     title: "预约记录",
                     clmid: "8",
                     clmid: "8",
                 }
                 }
-            },{
+            }, {
                 path: '/cost',
                 path: '/cost',
                 name: 'cost',
                 name: 'cost',
                 component: () => import('@/views/cost.vue'),
                 component: () => import('@/views/cost.vue'),
@@ -140,7 +140,7 @@ const routes = [
                     title: "消费记录",
                     title: "消费记录",
                     clmid: "9",
                     clmid: "9",
                 }
                 }
-            },{
+            }, {
                 path: '/setting',
                 path: '/setting',
                 name: 'setting',
                 name: 'setting',
                 component: () => import('@/views/setting.vue'),
                 component: () => import('@/views/setting.vue'),
@@ -148,7 +148,7 @@ const routes = [
                     title: "系统设置",
                     title: "系统设置",
                     clmid: "11",
                     clmid: "11",
                 }
                 }
-            },{
+            }, {
                 path: '/finish',
                 path: '/finish',
                 name: 'finish',
                 name: 'finish',
                 component: () => import('@/views/finish.vue'),
                 component: () => import('@/views/finish.vue'),
@@ -156,7 +156,7 @@ const routes = [
                     title: "下课管理",
                     title: "下课管理",
                     clmid: "10",
                     clmid: "10",
                 }
                 }
-            },{
+            }, {
                 path: '/finishDetail',
                 path: '/finishDetail',
                 name: 'finishDetail',
                 name: 'finishDetail',
                 component: () => import('@/views/finishDetail.vue'),
                 component: () => import('@/views/finishDetail.vue'),
@@ -164,7 +164,31 @@ const routes = [
                     title: "下课管理",
                     title: "下课管理",
                     clmid: "10",
                     clmid: "10",
                 }
                 }
+            }, {
+                path: '/courses',
+                name: 'courses',
+                component: () => import('@/views/courses.vue'),
+                meta: {
+                    title: "课程管理",
+                    clmid: "10",
+                }
             },{
             },{
+                path: '/classPrepare',
+                name: 'classPrepare',
+                component: () => import('@/views/classPrepare.vue'),
+                meta: {
+                    title: "准备上课",
+                    clmid: "10",
+                }
+            },{
+                path: '/classInfoDetail',
+                name: 'classInfoDetail',
+                component: () => import('@/views/classInfoDetail.vue'),
+                meta: {
+                    title: "课程成绩",
+                    clmid: "10",
+                }
+            }, {
                 path: '/heartEquip',
                 path: '/heartEquip',
                 name: 'heartEquip',
                 name: 'heartEquip',
                 component: () => import('@/views/heartEquip.vue'),
                 component: () => import('@/views/heartEquip.vue'),
@@ -172,7 +196,7 @@ const routes = [
                     title: "心率设备",
                     title: "心率设备",
                     clmid: "10",
                     clmid: "10",
                 }
                 }
-            },{
+            }, {
                 path: '/heartLog',
                 path: '/heartLog',
                 name: 'heartLog',
                 name: 'heartLog',
                 component: () => import('@/views/heartLog.vue'),
                 component: () => import('@/views/heartLog.vue'),
@@ -180,7 +204,7 @@ const routes = [
                     title: "设备记录",
                     title: "设备记录",
                     clmid: "10",
                     clmid: "10",
                 }
                 }
-            },{
+            }, {
                 path: '/region',
                 path: '/region',
                 name: 'region',
                 name: 'region',
                 component: () => import('@/views/region.vue'),
                 component: () => import('@/views/region.vue'),
@@ -188,7 +212,7 @@ const routes = [
                     title: "区域管理",
                     title: "区域管理",
                     clmid: "10",
                     clmid: "10",
                 }
                 }
-            },{
+            }, {
                 path: '/regionEquip',
                 path: '/regionEquip',
                 name: 'regionEquip',
                 name: 'regionEquip',
                 component: () => import('@/views/regionEquip.vue'),
                 component: () => import('@/views/regionEquip.vue'),
@@ -202,7 +226,7 @@ const routes = [
         path: '/login',
         path: '/login',
         name: 'Login',
         name: 'Login',
         component: () => import( '../views/Login.vue')
         component: () => import( '../views/Login.vue')
-    },, {
+    }, , {
         path: '*',
         path: '*',
         name: '404',
         name: '404',
         component: () => import( '../views/404.vue')
         component: () => import( '../views/404.vue')
@@ -221,14 +245,14 @@ const router = new VueRouter({
 });
 });
 
 
 // 路由守卫
 // 路由守卫
-router.beforeEach((to,from,next)=>{
+router.beforeEach((to, from, next) => {
     NProgress.start()
     NProgress.start()
-    const isLogin = localStorage.token? true : false;
-    if(to.path == '/login' || to.path == '/register'){//'login'和'register'相当于是路由白名单
+    const isLogin = localStorage.token ? true : false;
+    if (to.path == '/login' || to.path == '/register') {//'login'和'register'相当于是路由白名单
         next();
         next();
-    }else{
+    } else {
         //如果token存在,就正常跳转,如果不存在,则说明未登陆,则跳转到'login'
         //如果token存在,就正常跳转,如果不存在,则说明未登陆,则跳转到'login'
-        isLogin? next() : next("/login");
+        isLogin ? next() : next("/login");
     }
     }
 });
 });
 
 

+ 1048 - 1019
pc/src/views/Main.vue

@@ -1,1065 +1,1094 @@
 <template>
 <template>
-  <div class="container">
-    <div class="lt">
-      <div class="top">
-        <ul>
-          <li @click="goPage('member')">
-            <img src="../assets/img/main/member.png" height="54" width="54"/>
-            <div class="liRight">
-              <h5>会员人数</h5>
-              <span>{{ AllCount }}</span>
+    <div class="container">
+        <div class="lt">
+            <div class="top">
+                <ul>
+                    <li @click="goPage('member')">
+                        <img src="../assets/img/main/member.png" height="54" width="54"/>
+                        <div class="liRight">
+                            <h5>会员人数</h5>
+                            <span>{{ AllCount }}</span>
+                        </div>
+                        <div class="btLine">
+                            <em class="emlt">
+                                <i class="el-icon-caret-top"></i>
+                                今日新增 {{ NowCount }}
+                            </em>
+                            <em class="emrt">
+                                <i class="el-icon-caret-top"></i>
+                                昨日新增 {{ YesterdayCount }}
+                            </em>
+                        </div>
+                    </li>
+                    <li @click="goPage('record')">
+                        <img src="../assets/img/main/appoint.png" height="54" width="54"/>
+                        <div class="liRight">
+                            <h5>今日预约人数</h5>
+                            <span>{{ TodayOrderNum }}</span>
+                        </div>
+                        <div class="btLine">
+                            <em class="emlt">
+                                <i class="el-icon-caret-top"></i>
+                                昨日预约 {{ YestodayOrderNum }}
+                            </em>
+                            <em class="emrt">
+                                <i class="el-icon-caret-top"></i>
+                                较昨日新增 {{ TodayIncreaseNum }}
+                            </em>
+                        </div>
+                    </li>
+                    <li @click="goPage('lesson')">
+                        <img src="../assets/img/main/lesson.png" height="54" width="54"/>
+                        <div class="liRight">
+                            <h5>课程数量</h5>
+                            <span>{{ ClassNum }}</span>
+                        </div>
+                        <div class="btLine">
+                            <em class="emlt">
+                                <i class="el-icon-caret-top"></i>
+                                已预约课程 {{ TodayOrderSttNum }}
+                            </em>
+                        </div>
+                    </li>
+                </ul>
             </div>
             </div>
-            <div class="btLine">
-              <em class="emlt">
-                <i class="el-icon-caret-top"></i>
-                今日新增 {{ NowCount }}
-              </em>
-              <em class="emrt">
-                <i class="el-icon-caret-top"></i>
-                昨日新增 {{ YesterdayCount }}
-              </em>
-            </div>
-          </li>
-          <li @click="goPage('record')">
-            <img src="../assets/img/main/appoint.png" height="54" width="54"/>
-            <div class="liRight">
-              <h5>今日预约人数</h5>
-              <span>{{ TodayOrderNum }}</span>
-            </div>
-            <div class="btLine">
-              <em class="emlt">
-                <i class="el-icon-caret-top"></i>
-                昨日预约 {{ YestodayOrderNum }}
-              </em>
-              <em class="emrt">
-                <i class="el-icon-caret-top"></i>
-                较昨日新增 {{ TodayIncreaseNum }}
-              </em>
-            </div>
-          </li>
-          <li @click="goPage('lesson')">
-            <img src="../assets/img/main/lesson.png" height="54" width="54"/>
-            <div class="liRight">
-              <h5>课程数量</h5>
-              <span>{{ ClassNum }}</span>
-            </div>
-            <div class="btLine">
-              <em class="emlt">
-                <i class="el-icon-caret-top"></i>
-                已预约课程 {{ TodayOrderSttNum }}
-              </em>
-            </div>
-          </li>
-        </ul>
-      </div>
-
-      <div class="finish">
-        <div class="title">
-          <h5>下课管理</h5>
-          <!--                    <span>{{getNowDate}}</span>-->
-        </div>
-        <ul>
-          <li v-for="c in PreFinishList">
-            <div class="finListTitle" :style="{ background:c.ClassColor }">
-              {{ c.ClassName }}
-            </div>
-            <div class="context">
-              <div class="ctl">
-                <span>上课时间:{{ c.BeginStr }} - {{ c.EndStr }}</span>
-                <span>预约人数:{{ c.OrderNum }} 人</span>
-              </div>
-              <em>{{ c.BeginTime|parseDate }}</em>
-              <el-button type="primary" plain @click="checkClassOverPrepare(c)">下课</el-button>
-            </div>
-          </li>
-          <span class="tips" v-if="PreFinishList == 0">
+
+            <div class="finish">
+                <div class="title">
+                    <h5>课程管理</h5>
+                    <!--                    <span>{{getNowDate}}</span>-->
+                </div>
+                <ul>
+                    <li v-for="c in PreFinishList">
+                        <div class="finListTitle" :style="{ background:c.ClassColor }">
+                            <em> {{ c.ClassName }}</em>
+                            <s>{{ c.BeginTime|parseDate }}</s>
+                        </div>
+                        <div class="context">
+                            <div class="ctl">
+                                <span>上课时间:{{ c.BeginStr }} - {{ c.EndStr }}</span>
+                                <span>预约人数:{{ c.OrderNum }} 人</span>
+                            </div>
+                            <em>
+
+                            </em>
+                            <el-button type="primary" plain @click="goFinish(c)" v-if="c.FinishClass == 0">上课</el-button>
+                            <el-button type="primary" plain @click="checkClassOverPrepare(c)" v-if="c.FinishClass == 2">管理</el-button>
+                            <el-button type="primary" plain @click="goFinish(c)"  v-if="c.FinishClass == 3">编辑</el-button>
+                        </div>
+                    </li>
+                    <span class="tips" v-if="PreFinishList == 0">
                            <img src="../assets/img/main/empty.jpg" height="116" width="92"/>
                            <img src="../assets/img/main/empty.jpg" height="116" width="92"/>
                         <br>
                         <br>
                         暂无下课课程
                         暂无下课课程
                     </span>
                     </span>
-        </ul>
-      </div>
-
-      <div class="appoint">
-        <div class="title">
-          <h5>预约课程</h5>
-          <span>{{ getNowDate }}</span>
-        </div>
-        <div class="appointCard">
-          <el-card class="box-card" v-for="c in classList" @click.native="goLesson">
-            <div class="cardTitle ">
-              {{ c.ClassName }}
+                </ul>
             </div>
             </div>
-            <span>
+            <div class="appoint">
+                <div class="title">
+                    <h5>预约课程</h5>
+                    <span>{{ getNowDate }}</span>
+                </div>
+                <div class="appointCard">
+                    <el-card class="box-card" v-for="c in classList" @click.native="goLesson">
+                        <div class="cardTitle ">
+                            {{ c.ClassName }}
+                        </div>
+                        <span>
                            {{ c.BeginStr }}
                            {{ c.BeginStr }}
                         </span>
                         </span>
-            <em>最大预约人数 <i>{{ c.OrderToplimit }}</i></em>
-            <em>已预约人数 <i>{{ c.OrderNum }}</i></em>
-            <em>预约状态
-              <s class="blue" v-if="c.WxOrder > 0">可预约</s>
-              <s class="red" v-if="c.WxOrder == 0">不可预约</s>
-            </em>
-          </el-card>
-          <span class="tips" v-if="classList == 0">
+                        <em>最大预约人数 <i>{{ c.OrderToplimit }}</i></em>
+                        <em>已预约人数 <i>{{ c.OrderNum }}</i></em>
+                        <em>预约状态
+                            <s class="blue" v-if="c.WxOrder > 0">可预约</s>
+                            <s class="red" v-if="c.WxOrder == 0">不可预约</s>
+                        </em>
+                    </el-card>
+                    <span class="tips" v-if="classList == 0">
                            <img src="../assets/img/main/empty.jpg" height="116" width="92"/>
                            <img src="../assets/img/main/empty.jpg" height="116" width="92"/>
                         <br>
                         <br>
                         暂无预约课程,请先添加
                         暂无预约课程,请先添加
                       <router-link to="/lessonManage">课程表</router-link>
                       <router-link to="/lessonManage">课程表</router-link>
                     </span>
                     </span>
+                </div>
+            </div>
         </div>
         </div>
-      </div>
-    </div>
-    <div class="rt">
-      <div class="rtContext">
-        <div class="rtTitle">
-          <h5>最新预约</h5>
-          <span @click="goPage('appoint','second')">查看全部</span>
-        </div>
-        <ul>
-          <!--                    TodayVipOrder-->
-          <li v-for="as in appointList" @click="goAppointDetail(as.UserName)">
-            <div class="asTitle">
-              <img src="../assets/img/main/Oval.png" alt="">
-              <span>
+        <div class="rt">
+            <div class="rtContext">
+                <div class="rtTitle">
+                    <h5>最新预约</h5>
+                    <span @click="goPage('appoint','second')">查看全部</span>
+                </div>
+                <ul>
+                    <!--                    TodayVipOrder-->
+                    <li v-for="as in appointList" @click="goAppointDetail(as.UserName)">
+                        <div class="asTitle">
+                            <img src="../assets/img/main/Oval.png" alt="">
+                            <span>
                                 {{ as.UserName }}
                                 {{ as.UserName }}
                                 {{ as.Phone }}  &nbsp; &nbsp; &nbsp;
                                 {{ as.Phone }}  &nbsp; &nbsp; &nbsp;
                                 <em>预约时间:  {{ as.Base.CreatedAt |parseDate }}</em>
                                 <em>预约时间:  {{ as.Base.CreatedAt |parseDate }}</em>
                           </span>
                           </span>
-            </div>
-            <div class="asContent">
-              <span>上课时间:<em>{{ as.CurrentDate.substr(5, 6) }} {{ as.BeginStr }}</em></span>
-              <span>预约状态:
+                        </div>
+                        <div class="asContent">
+                            <span>上课时间:<em>{{ as.CurrentDate.substr(5, 6) }} {{ as.BeginStr }}</em></span>
+                            <span>预约状态:
                                 <em v-if="as.Status == 1" class="green">已预约</em>
                                 <em v-if="as.Status == 1" class="green">已预约</em>
                                 <em v-if="as.Status == 2" class="red">已取消</em>
                                 <em v-if="as.Status == 2" class="red">已取消</em>
                                 <em v-if="as.Status == 3" class="yellow">预约未到</em>
                                 <em v-if="as.Status == 3" class="yellow">预约未到</em>
                                 <em v-if="as.Status == 4">已完成</em>
                                 <em v-if="as.Status == 4">已完成</em>
                             </span>
                             </span>
-              <span>预约课程:<s class="blue"
-                            :style="{ background:as.ClassColor }"> {{ as.ClassName }}</s></span>
-              <span>剩余课时:<em :class="[{'red':as.RemainHour == 0}]">{{ as.RemainHour }}课时</em></span>
-            </div>
-          </li>
-          <span class="tips middleTips" v-if="appointList == 0">
+                            <span>预约课程:<s class="blue"
+                                          :style="{ background:as.ClassColor }"> {{ as.ClassName }}</s></span>
+                            <span>剩余课时:<em :class="[{'red':as.RemainHour == 0}]">{{ as.RemainHour }}课时</em></span>
+                        </div>
+                    </li>
+                    <span class="tips middleTips" v-if="appointList == 0">
                            <img src="../assets/img/main/empty.jpg" height="116" width="92"/>
                            <img src="../assets/img/main/empty.jpg" height="116" width="92"/>
                         <br>
                         <br>
                         暂无预约,可进入
                         暂无预约,可进入
                         <router-link to="/appoint">预约管理</router-link>
                         <router-link to="/appoint">预约管理</router-link>
                     </span>
                     </span>
-        </ul>
-      </div>
+                </ul>
+            </div>
+        </div>
     </div>
     </div>
-  </div>
 </template>
 </template>
 
 
 <script>
 <script>
-import {
-  ClassPreFinishListQuery,
-  WaitingBeginClassList,
-  ClassOngoingList,
-  OrderStatistics,
-  VipUserStatistics,
-  ClassStatistics,
-  ClassOverPrepare,
-  VipUserOrderQuery,
-  LastOrderQuery,
-} from "../api/getApiRes";
-
-let qs = require('qs');
-export default {
-  data() {
-    return {
-      editableTabsValue: '1',
-      getNowDate: getNowDate(),
-      classList: [],
-      PreFinishList: [],
-      appointList: [],
-      TodayClassOrder: [],
-      TodayVipOrder: [],
-      AllCount: 0,
-      YesterdayCount: 0,
-      YestodayOrderNum: 0,
-      NowCount: 0,
-      CountAdd: 0,
-      TodayIncreaseNum: 0,
-      TodayOrderNum: 0,
-      ClassNum: 0,
-      TodayOrderSttNum: 0,
-    }
-  },
-  mounted() {
-    let that = this;
-
-    // 下课管理
-    this.getVipUserStatistics();
-    this.getClassStatistics();
-    this.ClassQuery();
-    this.getVipUserOrderQuery();
-    // 预约统计
-    this.getOrderStatistics();
-    this.getWaitingBeginClassList();
-    this.timer = setInterval(() => {
-      that.getVipUserOrderQuery();
-      this.getVipUserStatistics();
-      this.getClassStatistics();
-      this.ClassQuery();
-      this.getOrderStatistics();
-      this.getWaitingBeginClassList();
-    }, 10000);
-  },
-  destroyed() {
-    clearInterval(this.timer);//页面销毁时清除定时器
-  },
-  methods: {
-    goLesson() {
-      this.$router.push({
-        path: '/appoint',
-      })
-    },
-    goAppointDetail(name) {
-      this.$router.push({
-        path: '/appoint',
-        query: {
-          page: 'second',
-          name: name
+    import {
+        ClassPreFinishListQuery,
+        WaitingBeginClassList,
+        ClassOngoingList,
+        OrderStatistics,
+        VipUserStatistics,
+        ClassStatistics,
+        ClassOverPrepare,
+        VipUserOrderQuery,
+        LastOrderQuery,
+    } from "../api/getApiRes";
+
+    let qs = require('qs');
+    export default {
+        data() {
+            return {
+                editableTabsValue: '1',
+                getNowDate: getNowDate(),
+                classList: [],
+                PreFinishList: [],
+                appointList: [],
+                TodayClassOrder: [],
+                TodayVipOrder: [],
+                AllCount: 0,
+                YesterdayCount: 0,
+                YestodayOrderNum: 0,
+                NowCount: 0,
+                CountAdd: 0,
+                TodayIncreaseNum: 0,
+                TodayOrderNum: 0,
+                ClassNum: 0,
+                TodayOrderSttNum: 0,
+            }
+        },
+        mounted() {
+            let that = this;
+
+            // 下课管理
+            this.getVipUserStatistics();
+            this.getClassStatistics();
+            this.ClassQuery();
+            this.getVipUserOrderQuery();
+            // 预约统计
+            this.getOrderStatistics();
+            this.getWaitingBeginClassList();
+            this.timer = setInterval(() => {
+                that.getVipUserOrderQuery();
+                this.getVipUserStatistics();
+                this.getClassStatistics();
+                this.ClassQuery();
+                this.getOrderStatistics();
+                this.getWaitingBeginClassList();
+            }, 10000);
+        },
+        destroyed() {
+            clearInterval(this.timer);//页面销毁时清除定时器
+        },
+        methods: {
+            goLesson() {
+                this.$router.push({
+                    path: '/appoint',
+                })
+            },
+            goAppointDetail(name) {
+                this.$router.push({
+                    path: '/appoint',
+                    query: {
+                        page: 'second',
+                        name: name
+                    }
+                })
+            },
+            goPage(url, page) {
+                this.$router.push({
+                    path: '/' + url,
+                    query: {
+                        page: page
+                    }
+                })
+            },
+            // 会员统计
+            getVipUserStatistics() {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                };
+                let postdata = qs.stringify(param);
+                VipUserStatistics(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.AllCount = json.Rs.AllCount;
+                        that.YesterdayCount = json.Rs.YesterdayCount;
+                        that.NowCount = json.Rs.NowCount;
+                        that.CountAdd = json.Rs.CountAdd;
+                    } else {
+                        if (json.Code == 1010) {
+                            that.$message.error(json.Memo);
+                            that.$router.push({path: '/login', query: {status: 1}});
+                            return false
+                        } else {
+                            that.$message.error(json.Memo);
+                        }
+                    }
+                })
+            },
+            // 课程统计
+            getClassStatistics() {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                };
+                let postdata = qs.stringify(param);
+                ClassStatistics(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.ClassNum = json.Rs.ClassNum;
+                        that.TodayOrderSttNum = json.Rs.TodayOrderSttNum;
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            getOrderStatistics() {
+                let that = this;
+                that.loading = true;
+                let param = {
+                    token: localStorage.token,
+                };
+                let postdata = qs.stringify(param);
+                OrderStatistics(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.loading = false;
+                        if (json.Rs) {
+                            that.TodayIncreaseNum = json.Rs.TodayIncreaseNum;
+                            that.TodayOrderNum = json.Rs.TodayOrderNum;
+                            that.YestodayOrderNum = json.Rs.YestodayOrderNum;
+                        }
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            checkClassOverPrepare(row) {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                    stdId: row.StdId,
+                };
+                let postdata = qs.stringify(param);
+                ClassOverPrepare(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.goFinish(row);
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            goFinish(row) {
+                this.$router.push({
+                    path: '/finishDetail', query: {
+                        id: row.StdId,
+                        classId: row.ClassId,
+                        ClassName: row.ClassName,
+                        BeginTime: row.BeginTime,
+                    }
+                });
+            },
+            getWaitingBeginClassList() {
+                let that = this;
+                that.loading = true;
+                let param = {
+                    token: localStorage.token,
+                };
+                let postdata = qs.stringify(param);
+                WaitingBeginClassList(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.loading = false;
+                        that.classList = json.Rs;
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            // 下课管理
+            ClassQuery() {
+                let that = this;
+                that.loading = true;
+                let param = {
+                    token: localStorage.token,
+                };
+                let postdata = qs.stringify(param);
+                ClassOngoingList(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.loading = false;
+                        if (json.Rs) {
+                            that.PreFinishList = json.Rs;
+                        }
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            // 最新预约
+            getVipUserOrderQuery() {
+                let that = this;
+                that.loading = true;
+                let param = {
+                    token: localStorage.token,
+                    classId: 0,
+                    orderDate: globalcurrent(),
+                    stdId: 0,
+                };
+                let postdata = qs.stringify(param);
+                // VipUserOrderQuery(postdata).then(res => {
+                LastOrderQuery(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.loading = false;
+                        if (json.Rs) {
+                            that.appointList = json.Rs;
+                        }
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            }
+        },
+        filters: {
+            parseDate: function (value) {
+                if (!value) {
+                    return false
+                } else {
+                    let res = nonTfmtDatetoLength(value, 10).substr(5, 10);
+                    return res;
+                }
+            },
+        },
+        watch: {
+            $route(to) {
+                if (to.name == 'Main') {
+                    this.getVipUserStatistics();
+                    this.getClassStatistics();
+                    this.ClassQuery();
+                    this.getVipUserOrderQuery();
+                    this.getOrderStatistics();
+                    this.getWaitingBeginClassList();
+                } else {
+                    clearInterval(this.timer);//页面销毁时清除定时器
+                }
+            },
+        },
+    }
+</script>
+
+<style scoped>
+
+    ul, li {
+        list-style: none;
+        margin: 0;
+        padding: 0;
+
+    }
+
+    em {
+        font-style: normal;
+    }
+
+    .container {
+        width: 100%;
+        height: 760px;
+        overflow: hidden;
+        overflow-y: scroll;
+        display: block;
+        margin: 0 auto;
+        padding-bottom: 60px;
+    }
+
+    .container > .lt {
+        width: 1173px;
+        float: left;
+        margin-top: 0px;
+    }
+
+    .container > .rt {
+        /*width: 436px;*/
+        width: 26%;
+        height: 100%;
+        float: right;
+    }
+
+    .lt .top {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .lt .top li {
+        width: 377px;
+        height: 140px;
+        float: left;
+        background: #fff;
+        border-radius: 12px;
+        margin-right: 20px;
+        cursor: pointer;
+    }
+
+    .lt .top li:nth-child(3) {
+        margin-right: 0;
+    }
+
+    .top li img {
+        float: left;
+        margin-top: 17px;
+        margin-left: 30px;
+        margin-right: 24px;
+    }
+
+    .top li .liRight {
+        width: 200px;
+        float: left;
+        margin-top: 17px;
+    }
+
+    .top .liRight h5 {
+        margin: 0;
+        padding: 0;
+        text-align: left;
+    }
+
+    .top .liRight span {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        text-align: left;
+        font-size: 26px;
+        font-family: Arial;
+        margin-top: 7px;
+        margin-bottom: 20px;
+    }
+
+    .btLine {
+        width: 84%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        border-top: 1px solid #F0F2F5;
+        padding-top: 17px;
+    }
+
+    .btLine em {
+        font-size: 14px;
+    }
+
+    .btLine .emlt {
+        width: 50%;
+        float: left;
+        text-align: left;
+    }
+
+    .btLine i {
+        font-size: 18px;
+        color: #BDBDBD;
+    }
+
+    .emlt i {
+        float: left;
+    }
+
+    .finish {
+        width: 100%;
+        min-height: 358px;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        background: #fff;
+        margin-top: 15px;
+        border-radius: 12px;
+        padding-top: 15px;
+        padding-bottom: 0px;
+    }
+
+    .finish .title {
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-left: 30px;
+    }
+
+    .finish .title h5 {
+        margin: 0;
+        float: left;
+        font-size: 18px;
+    }
+
+    .finish .title span {
+        float: right;
+        margin-right: 43px;
+        font-size: 14px;
+        color: #717171;
+    }
+
+    .finish ul {
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-left: 30px;
+        padding-right: 30px;
+        margin: 0 auto;
+        margin-top: 10px;
+    }
+
+    .finish ul li {
+        width: 347px;
+        height: 149px;
+        overflow: hidden;
+        float: left;
+        margin-bottom: 14px;
+    }
+
+    .finish ul li:nth-child(2) {
+        margin-left: 24px;
+        margin-right: 24px;
+    }
+
+    .finish ul li:nth-child(5) {
+        margin-left: 24px;
+        margin-right: 24px;
+    }
+
+    .finish li .finListTitle {
+        width: 100%;
+        height: 35px;
+        line-height: 35px;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        background-color: #3799FF;
+        border-top-left-radius: 7px;
+        border-top-right-radius: 7px;
+        color: #000;
+    }
+    li .finListTitle em {
+        float: left;
+        color: #fff;
+        padding-left: 5%;
+    }
+    li .finListTitle s {
+        float: right;
+        text-decoration: none;
+        color: #fff;
+        padding-right: 5%;
+    }
+
+    .finish li .context {
+        width: 344px;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        border: 1px solid #E8E8E8;
+        border-top: none;
+        padding-top: 16px;
+        padding-bottom: 16px;
+        border-bottom-left-radius: 7px;
+        border-bottom-right-radius: 7px;
+    }
+
+    .finish .context em {
+        width: 85px;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        height: 40px;
+        line-height: 30px;
+        color: #BDBDBD;
+    }
+    .context button {
+        height: 30px;
+        line-height: 30px;
+        padding-top: 0;
+    }
+
+    .context .ctl {
+        width: 211px;
+        float: left;
+        padding-left: 16px;
+        margin-right: 20px;
+    }
+
+    .ctl span {
+        width: 100%;
+        height: 30px;
+        line-height: 30px;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        background-color: #F8F8F8;
+        color: #404040;
+        font-size: 14px;
+        text-align: left;
+        padding-left: 20px;
+        margin-bottom: 15px;
+    }
+
+    .ctl span:nth-child(2) {
+        margin-bottom: 0px;
+    }
+
+    /deep/ .el-button--primary.is-plain {
+        background-color: #fff;
+    }
+
+    /deep/ .el-button--primary.is-plain:hover {
+        color: #005EA2 !important;
+    }
+
+    .blue {
+        color: #3799FF;
+    }
+
+    .appoint {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        background: #fff;
+        margin-top: 15px;
+        border-radius: 12px;
+        padding-top: 15px;
+        padding-bottom: 1px;
+    }
+
+    .appoint .title {
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-left: 30px;
+    }
+
+    .appoint .title h5 {
+        margin: 0;
+        float: left;
+        font-size: 18px;
+    }
+
+    .appoint .title span {
+        float: right;
+        margin-right: 43px;
+        font-size: 14px;
+        color: #717171;
+    }
+
+    .appoint .appointCard {
+        min-height: 195px;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-top: 25px;
+        padding-bottom: 25px;
+        padding-left: 30px;
+        padding-right: 30px;
+    }
+
+    /deep/ .el-card {
+        width: 150px;
+        float: left;
+        margin-right: 31px;
+        padding: 0;
+        border-radius: 12px;
+    }
+
+    /deep/ .el-card:nth-child(last) {
+        margin-right: 0;
+    }
+
+    /deep/ .el-card__body {
+        padding: 0;
+    }
+
+    .cardTitle {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        height: 40px;
+        line-height: 40px;
+        background: #F0F2F5;
+    }
+
+    .appointCard span {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        color: #777777;
+        font-family: Arial;
+        margin-top: 10px;
+        margin-bottom: 10px;
+        font-size: 16px;
+    }
+
+    .appointCard em {
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        font-size: 12px;
+        margin-bottom: 14px;
+        text-align: left;
+        padding-left: 16px;
+        padding-right: 16px;
+    }
+
+    .appointCard em i {
+        float: right;
+        color: #000000;
+        padding-right: 3px;
+    }
+
+    .appointCard em s {
+        /*width: 47px;*/
+        height: 20px;
+        line-height: 20px;
+        text-align: center;
+        font-style: normal;
+        text-decoration: none;
+        float: right;
+        border-radius: 3px;
+        padding: 0 3px;
+    }
+
+    .appointCard em s.blue {
+        background-color: #E5F2FF;
+        color: #3799FF;
+    }
+
+    .appointCard em s.red {
+        background-color: #E5F2FF;
+        color: rgb(204, 2, 2);
+    }
+
+    .rtContext {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-top: 0px;
+        background: #fff;
+        padding: 0;
+        border-radius: 12px;
+        min-height: 826px;
+        background: #fff;
+    }
+
+    .rtContext .rtTitle {
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding: 10px 30px;
+    }
+
+    .rtTitle h5 {
+        margin: 0;
+        float: left;
+        font-size: 18px;
+    }
+
+    .rtTitle span {
+        float: right;
+        font-size: 14px;
+        color: #BDBDBD;
+        cursor: pointer;
+    }
+
+    .rtContext ul {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        height: 100%;
+        overflow: hidden;
+        overflow-y: scroll;
+        margin: 0 auto;
+        padding-left: 30px;
+        padding-right: 30px;
+    }
+
+    .rtContext li {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        border-bottom: 1px solid #F0F2F5;
+        padding-top: 30px;
+        padding-bottom: 10px;
+        cursor: pointer;
+    }
+
+    .asTitle {
+        width: 100%;
+        height: 30px;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        text-align: left;
+        line-height: 20px;
+        color: #000000;
+        font-size: 14px;
+
+    }
+
+    .asTitle img {
+        float: left;
+        margin-right: 5px;
+    }
+
+    .asTitle span {
+        /*width: 26px;*/
+        min-width: 300px;
+        height: 30px;
+        line-height: 26px;
+        float: left;
+        margin-right: 10px;
+    }
+
+    .asTitle em {
+        float: right;
+        text-align: right;
+    }
+
+    .asContent {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .asContent span {
+        width: 50%;
+        float: left;
+        font-size: 14px;
+        color: #BDBDBD;
+        margin-bottom: 10px;
+        text-align: left;
+        text-indent: 8px;
+    }
+
+    .asContent span em {
+        color: #000;
+        text-align: left;
+    }
+
+    .asContent span s {
+        text-decoration: none;
+        color: #000;
+        border-radius: 250px;
+        padding: 3px 5px;
+        text-align: center;
+    }
+
+    .asContent span s.blue {
+        background-color: #E5F2FF;
+    }
+
+    .box-card {
+        cursor: pointer;
+    }
+
+    .box-card em {
+        font-style: normal;
+    }
+
+    i {
+        font-style: normal;
+    }
+
+    .asContent .green {
+        color: #25CC42;
+    }
+
+    .asContent .red {
+        color: red;
+    }
+
+    .asContent .yellow {
+        color: #FFDD00;
+    }
+
+    /deep/ a {
+        color: #03B1FF;
+    }
+
+    .tips {
+        color: #333;
+        font-size: 14px !important;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-top: 10px;
+        line-height: 30px;
+    }
+
+    .middleTips {
+        margin-top: 180px;
+    }
+
+    /*ipad only*/
+    @media only screen and (max-width: 1366px) {
+        .container {
+            height: 600px;
+            padding-top: 6px;
+        }
+
+        .container .lt {
+            width: 80%;
+        }
+
+        .lt .top {
+            width: 96%;
+        }
+
+        .lt .top li {
+            width: 32%;
+            margin-right: 2%;
+        }
+
+        .top li .liRight {
+            width: 40%;
         }
         }
-      })
-    },
-    goPage(url, page) {
-      this.$router.push({
-        path: '/' + url,
-        query: {
-          page: page
+
+        .btLine {
+            width: 96%;
         }
         }
-      })
-    },
-    // 会员统计
-    getVipUserStatistics() {
-      let that = this;
-      let param = {
-        token: localStorage.token,
-      };
-      let postdata = qs.stringify(param);
-      VipUserStatistics(postdata).then(res => {
-        let json = res;
-        if (json.Code == 0) {
-          that.AllCount = json.Rs.AllCount;
-          that.YesterdayCount = json.Rs.YesterdayCount;
-          that.NowCount = json.Rs.NowCount;
-          that.CountAdd = json.Rs.CountAdd;
-        } else {
-          if (json.Code == 1010) {
-            that.$message.error(json.Memo);
-            that.$router.push({path: '/login', query: {status: 1}});
-            return false
-          } else {
-            that.$message.error(json.Memo);
-          }
+
+        .btLine em {
+            font-size: 12px;
+            float: left;
+            line-height: 22px;
         }
         }
-      })
-    },
-    // 课程统计
-    getClassStatistics() {
-      let that = this;
-      let param = {
-        token: localStorage.token,
-      };
-      let postdata = qs.stringify(param);
-      ClassStatistics(postdata).then(res => {
-        let json = res;
-        if (json.Code == 0) {
-          that.ClassNum = json.Rs.ClassNum;
-          that.TodayOrderSttNum = json.Rs.TodayOrderSttNum;
-        } else {
-          that.$message.error(json.Memo);
+
+        .finish ul li {
+            width: 30%;
+            /*height: 159px;*/
+            overflow: hidden;
+            padding-bottom: 20px;
         }
         }
-      })
-    },
-    getOrderStatistics() {
-      let that = this;
-      that.loading = true;
-      let param = {
-        token: localStorage.token,
-      };
-      let postdata = qs.stringify(param);
-      OrderStatistics(postdata).then(res => {
-        let json = res;
-        if (json.Code == 0) {
-          that.loading = false;
-          if (json.Rs) {
-            that.TodayIncreaseNum = json.Rs.TodayIncreaseNum;
-            that.TodayOrderNum = json.Rs.TodayOrderNum;
-            that.YestodayOrderNum = json.Rs.YestodayOrderNum;
-          }
-        } else {
-          that.$message.error(json.Memo);
+
+        .finish li .context {
+            width: 99%;
+            overflow: hidden;
+            display: block;
+            margin: 0;
+            padding: 0px;
+            height: auto !important;
+            padding-bottom: 5px;
+            border-top-left-radius: 0;
+            border-top-right-radius: 0;
         }
         }
-      })
-    },
-    checkClassOverPrepare(row) {
-      let that = this;
-      let param = {
-        token: localStorage.token,
-        stdId: row.StdId,
-      };
-      let postdata = qs.stringify(param);
-      ClassOverPrepare(postdata).then(res => {
-        let json = res;
-        if (json.Code == 0) {
-          that.goFinish(row);
-        } else {
-          that.$message.error(json.Memo);
+
+        .finish li .context .ctl {
+            width: 100%;
+            overflow: hidden;
+            display: block;
+            margin: 0;
+            padding: 0;
+            padding-top: 6px;
+            margin-bottom: 3px;
         }
         }
-      })
-    },
-    goFinish(row) {
-      this.$router.push({
-        path: '/finishDetail', query: {
-          id: row.StdId,
-          classId: row.ClassId,
-          ClassName: row.ClassName,
-          BeginTime: row.BeginTime,
+
+        .ctl span {
+            width: 80%;
+            padding: 0;
+            font-size: 12px;
+            text-align: center;
         }
         }
-      });
-    },
-    getWaitingBeginClassList() {
-      let that = this;
-      that.loading = true;
-      let param = {
-        token: localStorage.token,
-      };
-      let postdata = qs.stringify(param);
-      WaitingBeginClassList(postdata).then(res => {
-        let json = res;
-        if (json.Code == 0) {
-          that.loading = false;
-          that.classList = json.Rs;
-        } else {
-          that.$message.error(json.Memo);
+
+        .finish {
+            width: 97%;
         }
         }
-      })
-    },
-    // 下课管理
-    ClassQuery() {
-      let that = this;
-      that.loading = true;
-      let param = {
-        token: localStorage.token,
-      };
-      let postdata = qs.stringify(param);
-      ClassOngoingList(postdata).then(res => {
-        let json = res;
-        if (json.Code == 0) {
-          that.loading = false;
-          if (json.Rs) {
-            that.PreFinishList = json.Rs;
-          }
-        } else {
-          that.$message.error(json.Memo);
+
+        .appoint {
+            width: 97%;
         }
         }
-      })
-    },
-    // 最新预约
-    getVipUserOrderQuery() {
-      let that = this;
-      that.loading = true;
-      let param = {
-        token: localStorage.token,
-        classId: 0,
-        orderDate: globalcurrent(),
-        stdId: 0,
-      };
-      let postdata = qs.stringify(param);
-      // VipUserOrderQuery(postdata).then(res => {
-      LastOrderQuery(postdata).then(res => {
-        let json = res;
-        if (json.Code == 0) {
-          that.loading = false;
-          if (json.Rs) {
-            that.appointList = json.Rs;
-          }
-        } else {
-          that.$message.error(json.Memo);
+
+        .finish .context em {
+            height: 30px;
+            line-height: 40px;
+            font-size: 12px;
+            float: left;
         }
         }
-      })
-    }
-  },
-  filters: {
-    parseDate: function (value) {
-      if (!value) {
-        return false
-      } else {
-        let res = nonTfmtDatetoLength(value, 10).substr(5, 10);
-        return res;
-      }
-    },
-  },
-  watch: {
-    $route(to) {
-      if (to.name == 'Main') {
-        this.getVipUserStatistics();
-        this.getClassStatistics();
-        this.ClassQuery();
-        this.getVipUserOrderQuery();
-        this.getOrderStatistics();
-        this.getWaitingBeginClassList();
-      } else {
-        clearInterval(this.timer);//页面销毁时清除定时器
-      }
-    },
-  },
-}
-</script>
 
 
-<style scoped>
+        .finish .context {
+            height: auto !important;
+            padding-bottom: 5px;
+        }
+
+        .el-main > .container {
+            /*height: 772px;*/
+        }
+
+        .container .rt {
+            width: 20%;
+        }
+
+        .rtTitle span {
+            font-size: 12px;
+            line-height: 30px;
+        }
+
+        .rtContext ul {
+            padding: 2px !important;
+            font-size: 12px;
+        }
 
 
-ul, li {
-  list-style: none;
-  margin: 0;
-  padding: 0;
-
-}
-
-em {
-  font-style: normal;
-}
-
-.container {
-  width: 100%;
-  height: 760px;
-  overflow: hidden;
-  overflow-y: scroll;
-  display: block;
-  margin: 0 auto;
-  padding-bottom: 60px;
-}
-
-.container>.lt {
-  width: 1173px;
-  float: left;
-  margin-top: 0px;
-}
-
-.container>.rt {
-  /*width: 436px;*/
-  width: 26%;
-  height: 100%;
-  float: right;
-}
-
-.lt .top {
-  width: 100%;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-}
-
-.lt .top li {
-  width: 377px;
-  height: 140px;
-  float: left;
-  background: #fff;
-  border-radius: 12px;
-  margin-right: 20px;
-  cursor: pointer;
-}
-
-.lt .top li:nth-child(3) {
-  margin-right: 0;
-}
-
-.top li img {
-  float: left;
-  margin-top: 17px;
-  margin-left: 30px;
-  margin-right: 24px;
-}
-
-.top li .liRight {
-  width: 200px;
-  float: left;
-  margin-top: 17px;
-}
-
-.top .liRight h5 {
-  margin: 0;
-  padding: 0;
-  text-align: left;
-}
-
-.top .liRight span {
-  width: 100%;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  text-align: left;
-  font-size: 26px;
-  font-family: Arial;
-  margin-top: 7px;
-  margin-bottom: 20px;
-}
-
-.btLine {
-  width: 84%;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  border-top: 1px solid #F0F2F5;
-  padding-top: 17px;
-}
-
-.btLine em {
-  font-size: 14px;
-}
-
-.btLine .emlt {
-  width: 50%;
-  float: left;
-  text-align: left;
-}
-
-.btLine i {
-  font-size: 18px;
-  color: #BDBDBD;
-}
-
-.emlt i {
-  float: left;
-}
-
-.finish {
-  width: 100%;
-  min-height: 358px;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  background: #fff;
-  margin-top: 15px;
-  border-radius: 12px;
-  padding-top: 15px;
-  padding-bottom: 0px;
-}
-
-.finish .title {
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  padding-left: 30px;
-}
-
-.finish .title h5 {
-  margin: 0;
-  float: left;
-  font-size: 18px;
-}
-
-.finish .title span {
-  float: right;
-  margin-right: 43px;
-  font-size: 14px;
-  color: #717171;
-}
-
-.finish ul {
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  padding-left: 30px;
-  padding-right: 30px;
-  margin: 0 auto;
-  margin-top: 10px;
-}
-
-.finish ul li {
-  width: 347px;
-  height: 149px;
-  overflow: hidden;
-  float: left;
-  margin-bottom: 14px;
-}
-
-.finish ul li:nth-child(2) {
-  margin-left: 24px;
-  margin-right: 24px;
-}
-
-.finish ul li:nth-child(5) {
-  margin-left: 24px;
-  margin-right: 24px;
-}
-
-.finish li .finListTitle {
-  width: 100%;
-  height: 35px;
-  line-height: 35px;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  background-color: #3799FF;
-  border-top-left-radius: 7px;
-  border-top-right-radius: 7px;
-  color: #000;
-}
-
-.finish li .context {
-  width: 344px;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  border: 1px solid #E8E8E8;
-  border-top: none;
-  padding-top: 16px;
-  padding-bottom: 16px;
-  border-bottom-left-radius: 7px;
-  border-bottom-right-radius: 7px;
-}
-
-.finish .context em {
-  width: 85px;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  height: 40px;
-  line-height: 30px;
-  color: #BDBDBD;
-}
-
-.context .ctl {
-  width: 211px;
-  float: left;
-  padding-left: 16px;
-  margin-right: 20px;
-}
-
-.ctl span {
-  width: 100%;
-  height: 30px;
-  line-height: 30px;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  background-color: #F8F8F8;
-  color: #404040;
-  font-size: 14px;
-  text-align: left;
-  padding-left: 20px;
-  margin-bottom: 15px;
-}
-
-.ctl span:nth-child(2) {
-  margin-bottom: 0px;
-}
-
-/deep/ .el-button--primary.is-plain {
-  background-color: #fff;
-}
-
-/deep/ .el-button--primary.is-plain:hover {
-  color: #005EA2 !important;
-}
-
-.blue {
-  color: #3799FF;
-}
-
-.appoint {
-  width: 100%;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  background: #fff;
-  margin-top: 15px;
-  border-radius: 12px;
-  padding-top: 15px;
-  padding-bottom: 1px;
-}
-
-.appoint .title {
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  padding-left: 30px;
-}
-
-.appoint .title h5 {
-  margin: 0;
-  float: left;
-  font-size: 18px;
-}
-
-.appoint .title span {
-  float: right;
-  margin-right: 43px;
-  font-size: 14px;
-  color: #717171;
-}
-
-.appoint .appointCard {
-  min-height: 195px;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  padding-top: 25px;
-  padding-bottom: 25px;
-  padding-left: 30px;
-  padding-right: 30px;
-}
-
-/deep/ .el-card {
-  width: 150px;
-  float: left;
-  margin-right: 31px;
-  padding: 0;
-  border-radius: 12px;
-}
-
-/deep/ .el-card:nth-child(last) {
-  margin-right: 0;
-}
-
-/deep/ .el-card__body {
-  padding: 0;
-}
-
-.cardTitle {
-  width: 100%;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  height: 40px;
-  line-height: 40px;
-  background: #F0F2F5;
-}
-
-.appointCard span {
-  width: 100%;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  color: #777777;
-  font-family: Arial;
-  margin-top: 10px;
-  margin-bottom: 10px;
-  font-size: 16px;
-}
-
-.appointCard em {
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  font-size: 12px;
-  margin-bottom: 14px;
-  text-align: left;
-  padding-left: 16px;
-  padding-right: 16px;
-}
-
-.appointCard em i {
-  float: right;
-  color: #000000;
-  padding-right: 3px;
-}
-
-.appointCard em s {
-  /*width: 47px;*/
-  height: 20px;
-  line-height: 20px;
-  text-align: center;
-  font-style: normal;
-  text-decoration: none;
-  float: right;
-  border-radius: 3px;
-  padding: 0 3px;
-}
-
-.appointCard em s.blue {
-  background-color: #E5F2FF;
-  color: #3799FF;
-}
-
-.appointCard em s.red {
-  background-color: #E5F2FF;
-  color: rgb(204, 2, 2);
-}
-
-.rtContext {
-  width: 100%;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  margin-top: 0px;
-  background: #fff;
-  padding: 0;
-  border-radius: 12px;
-  min-height: 826px;
-  background: #fff;
-}
-
-.rtContext .rtTitle {
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  padding: 10px 30px;
-}
-
-.rtTitle h5 {
-  margin: 0;
-  float: left;
-  font-size: 18px;
-}
-
-.rtTitle span {
-  float: right;
-  font-size: 14px;
-  color: #BDBDBD;
-  cursor: pointer;
-}
-
-.rtContext ul {
-  width: 100%;
-  overflow: hidden;
-  display: block;
-  height: 100%;
-  overflow: hidden;
-  overflow-y: scroll;
-  margin: 0 auto;
-  padding-left: 30px;
-  padding-right: 30px;
-}
-
-.rtContext li {
-  width: 100%;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  border-bottom: 1px solid #F0F2F5;
-  padding-top: 30px;
-  padding-bottom: 10px;
-  cursor: pointer;
-}
-
-.asTitle {
-  width: 100%;
-  height: 30px;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  text-align: left;
-  line-height: 20px;
-  color: #000000;
-  font-size: 14px;
-
-}
-
-.asTitle img {
-  float: left;
-  margin-right: 5px;
-}
-
-.asTitle span {
-  /*width: 26px;*/
-  min-width: 300px;
-  height: 30px;
-  line-height: 26px;
-  float: left;
-  margin-right: 10px;
-}
-
-.asTitle em {
-  float: right;
-  text-align: right;
-}
-
-.asContent {
-  width: 100%;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-}
-
-.asContent span {
-  width: 50%;
-  float: left;
-  font-size: 14px;
-  color: #BDBDBD;
-  margin-bottom: 10px;
-  text-align: left;
-  text-indent: 8px;
-}
-
-.asContent span em {
-  color: #000;
-  text-align: left;
-}
-
-.asContent span s {
-  text-decoration: none;
-  color: #000;
-  border-radius: 250px;
-  padding: 3px 5px;
-  text-align: center;
-}
-
-.asContent span s.blue {
-  background-color: #E5F2FF;
-}
-
-.box-card {
-  cursor: pointer;
-}
-
-.box-card em {
-  font-style: normal;
-}
-
-i {
-  font-style: normal;
-}
-
-.asContent .green {
-  color: #25CC42;
-}
-
-.asContent .red {
-  color: red;
-}
-
-.asContent .yellow {
-  color: #FFDD00;
-}
-
-/deep/ a {
-  color: #03B1FF;
-}
-
-.tips {
-  color: #333;
-  font-size: 14px !important;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  margin-top: 10px;
-  line-height: 30px;
-}
-
-.middleTips {
-  margin-top: 180px;
-}
-
-/*ipad only*/
-@media only screen and (max-width: 1366px) {
-  .container {
-    height: 600px;
-    padding-top: 6px;
-  }
-  .container .lt {
-    width: 80%;
-  }
-  .lt .top {
-    width: 96%;
-  }
-
-  .lt .top li {
-    width: 32%;
-    margin-right: 2%;
-  }
-
-  .top li .liRight {
-    width: 40%;
-  }
-  .btLine {
-    width: 96%;
-  }
-
-  .btLine em {
-    font-size: 12px;
-    float: left;
-    line-height: 22px;
-  }
-
-  .finish ul li {
-    width: 30%;
-    /*height: 159px;*/
-    overflow: hidden;
-    padding-bottom: 20px;
-  }
-
-  .finish li .context {
-    width: 99%;
-    overflow: hidden;
-    display: block;
-    margin: 0;
-    padding: 0px;
-    height: auto!important;
-    padding-bottom: 5px;
-    border-top-left-radius: 0;
-    border-top-right-radius: 0;
-  }
-
-  .finish li .context .ctl {
-    width: 100%;
-    overflow: hidden;
-    display: block;
-    margin: 0;
-    padding: 0;
-    padding-top: 6px;
-    margin-bottom: 3px;
-  }
-
-  .ctl span {
-    width: 80%;
-    padding: 0;
-    font-size: 12px;
-    text-align: center;
-  }
-
-  .finish {
-    width: 97%;
-  }
-
-  .appoint {
-    width: 97%;
-  }
-
-  .finish .context em {
-    height: 30px;
-    line-height: 40px;
-    font-size: 12px;
-    float: left;
-  }
-  .finish .context {
-    height: auto!important;
-    padding-bottom: 5px;
-  }
-  .el-main > .container {
-    /*height: 772px;*/
-  }
-
-  .container .rt {
-    width: 20%;
-  }
-
-  .rtTitle span {
-    font-size: 12px;
-    line-height: 30px;
-  }
-  .rtContext ul {
-    padding: 2px!important;
-    font-size: 12px;
-  }
-  .asTitle {
-    width: 30px;
-    float: left;
-  }
-  .asContent {
-    width: 82%;
-  }
-  .asContent span {
-    width: 100%;
-    overflow: hidden;
-    display: block;
-    margin: 0 auto;
-    font-size: 12px;
-    height: 20px;
-  }
-}
+        .asTitle {
+            width: 30px;
+            float: left;
+        }
+
+        .asContent {
+            width: 82%;
+        }
+
+        .asContent span {
+            width: 100%;
+            overflow: hidden;
+            display: block;
+            margin: 0 auto;
+            font-size: 12px;
+            height: 20px;
+        }
+    }
 </style>
 </style>

+ 225 - 0
pc/src/views/classInfoDetail.vue

@@ -0,0 +1,225 @@
+<template>
+    <div class="context">
+        <div class="panel">
+            <div class="panel-body">
+                <br>
+                <el-page-header @back="goBack" content="课程成绩">
+                    <br>
+                </el-page-header>
+                <span class="classNames">
+                    {{title}}
+                </span>
+            </div>
+        </div>
+        <div class="table">
+            <el-table
+                    :data="tableData"
+                    border
+                    is-horizontal-resize
+                    :default-sort="{prop: 'date', order: 'descending'}"
+                    element-loading-background="rgba(0, 0, 0, 0.8)"
+                    class=""
+            >
+                >
+                <el-table-column
+                        type="index"
+                        label="排名"
+                        align="center"
+                        width="50">
+                </el-table-column>
+                <el-table-column
+                        prop="head"
+                        label="头像"
+                        align="center"
+                        sortable
+                >
+                    <template slot-scope="scope">
+                        <img class="head" :src="scope.row.Head" alt="" height="51" width="51" v-if="scope.row.Head">
+                        <img class="head" src="../assets/img/nav/head.png" height="51" width="51" v-else/>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        prop="Name"
+                        label="会员名"
+                        sortable
+                >
+                </el-table-column>
+                <el-table-column
+                        prop="Cle"
+                        label="卡路里"
+                        :formatter="filterCle"
+                        sortable
+                >
+                </el-table-column>
+                <el-table-column
+                        prop="Ck"
+                        label="ck值"
+                        :formatter="filterCK"
+                        sortable
+                >
+                </el-table-column>
+            </el-table>
+            <br>
+            <el-pagination
+                    background
+                    :total="pageination.total"
+                    :page-size="pageination.pageItem"
+                    @current-change="pageChange"
+            ></el-pagination>
+        </div>
+    </div>
+</template>
+
+<script>
+
+    import Global from '../Global.js'
+    import {
+        ClassOverDetailListQuery,
+    } from "../api/getApiRes";
+
+    let qs = require('qs');
+    export default {
+        data() {
+            return {
+                tableData: [],
+                title: '',
+                pageination: {
+                    pageItem: 100,
+                    pageoptions: pageOptions(),
+                    total: 100,
+                    pageIndex: 1,
+                },
+            }
+        },
+        mounted() {
+            this.getTableQuery();
+            this.title = this.$route.query.ClassName + ' ' + this.$route.query.BeginStr + '-' + this.$route.query.EndStr;
+        },
+        methods: {
+            goBack() {
+                this.$router.push({
+                    path: '/courses', query: {}
+                });
+            },
+            // 页面数据查询
+            getTableQuery() {
+                let that = this;
+                that.loading = true;
+                let param = {
+                    token: localStorage.token,
+                    stdId: this.$route.query.StdId,
+                    start: 1,//
+                    tableMax: 9999,//
+                };
+                let postdata = qs.stringify(param);
+                ClassOverDetailListQuery(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.loading = false;
+                        if (json.Rs) {
+                            that.allTableData = json.Rs;
+                            that.recordsTotal = json.Rs.length;
+                        } else {
+                            that.allTableData = [];
+                            that.recordsTotal = 0;
+                        }
+                        // 设置分页数据
+                        that.setPaginations();
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            // 设置分页数据
+            setPaginations() {
+                // 分页属性
+                let that = this;
+                that.pageination.total = that.recordsTotal;
+
+                // 默认分页
+                that.tableData = that.allTableData.filter((item, index) => {
+                    return index < that.pageination.pageItem;
+                });
+            },
+            // 每页显示数量
+            handleSizeChange() {
+                let that = this;
+                that.tableData = that.allTableData.filter((item, index) => {
+                    return index < that.pageination.pageItem;
+                });
+                that.draw = that.pageination.pageItem;
+                // that.getTableQuery();
+            },
+            // 翻页
+            pageChange(pageIndex) {
+                let that = this;
+                // 获取当前页
+                let index = that.pageination.pageItem * (pageIndex - 1);
+                // 数据总数
+                let nums = that.pageination.pageItem * pageIndex;
+                // 容器
+                let tables = [];
+                for (var i = index; i < nums; i++) {
+                    if (that.allTableData[i]) {
+                        tables.push(that.allTableData[i])
+                    }
+                    this.tableData = tables;
+                }
+                that.start = index * that.draw;
+                // that.getTableQuery();
+            },
+            // 单位转换去6个零
+            filterCle(value, row, column) {
+                return parseFloat(column / 1000000).toFixed(1);
+            },
+            // 单位转换去6个零
+            filterCK(value, row, column) {
+                return parseInt(column / 1000000);
+            },
+
+        },
+        watch: {
+            $route(to) {
+                if (to.name == 'classInfoDetail') {
+                    this.getTableQuery();
+                    this.title = this.$route.query.ClassName + ' ' + this.$route.query.BeginStr + '-' + this.$route.query.EndStr;
+
+                }
+            },
+        },
+    }
+</script>
+
+<style scoped>
+    @import "../assets/css/panel.css";
+
+    .context {
+        height: 770px;
+        overflow-y: scroll;
+        display: block;
+        margin: 0 auto;
+        background-color: #fff !important;
+        padding: 30px;
+    }
+
+    .classNames {
+        width: 211px;
+        height: 25px;
+        background: #f0f2f5;
+        font-family: "Source Han Sans CN";
+        font-weight: normal;
+        font-size: 16px;
+        color: #3799ff;
+        border-radius: 250px;
+        text-align: center;
+        margin-top: 15px;
+        margin-bottom: 3px;
+        float: left;
+    }
+    .head {
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        border-radius: 250px;
+    }
+</style>

+ 15 - 0
pc/src/views/classPrepare.vue

@@ -0,0 +1,15 @@
+<template>
+    <div>准备上课</div>
+</template>
+
+<script>
+    export default {
+        methods: {
+
+        }
+    }
+</script>
+
+<style scoped>
+
+</style>

+ 215 - 0
pc/src/views/courseEdit.vue

@@ -0,0 +1,215 @@
+课程管理
+<template>
+    <div class="context">
+        <div class="panel">
+            <div class="panel-body">
+                <br>
+                <el-page-header @back="goBack" content="课程成绩">
+                    <br>
+                </el-page-header>
+                <span class="classNames">
+                    {{title}}
+                </span>
+            </div>
+        </div>
+        <div class="table">
+            <el-table
+                    :data="tableData"
+                    border
+                    is-horizontal-resize
+                    :default-sort="{prop: 'date', order: 'descending'}"
+                    element-loading-background="rgba(0, 0, 0, 0.8)"
+                    class=""
+            >
+                >
+                <el-table-column
+                        type="index"
+                        label="排名"
+                        align="center"
+                        width="50">
+                </el-table-column>
+                <el-table-column
+                        prop="head"
+                        label="头像"
+                        align="center"
+                        sortable
+                >
+                    <template slot-scope="scope">
+                        <img class="head" :src="scope.row.Head" alt="" height="51" width="51" v-if="scope.row.Head">
+                        <img class="head" src="../assets/img/nav/head.png" height="51" width="51" v-else/>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        prop="Name"
+                        label="会员名"
+                        sortable
+                >
+                </el-table-column>
+                <el-table-column
+                        prop="Cle"
+                        label="卡路里"
+                        sortable
+                >
+                </el-table-column>
+                <el-table-column
+                        prop="Ck"
+                        label="ck值"
+                        sortable
+                >
+                </el-table-column>
+            </el-table>
+            <br>
+            <el-pagination
+                    background
+                    :total="pageination.total"
+                    :page-size="pageination.pageItem"
+                    @current-change="pageChange"
+            ></el-pagination>
+        </div>
+    </div>
+</template>
+
+<script>
+
+    import Global from '../Global.js'
+    import {
+        ClassOverDetailListQuery,
+    } from "../api/getApiRes";
+
+    let qs = require('qs');
+    export default {
+        data() {
+            return {
+                tableData: [],
+                title: '',
+                pageination: {
+                    pageItem: 100,
+                    pageoptions: pageOptions(),
+                    total: 100,
+                    pageIndex: 1,
+                },
+            }
+        },
+        mounted() {
+            this.getTableQuery();
+            this.title = this.$route.query.ClassName + ' ' + this.$route.query.BeginStr + '-' + this.$route.query.EndStr;
+        },
+        methods: {
+            goBack() {
+                this.$router.push({
+                    path: '/courses', query: {}
+                });
+            },
+            // 页面数据查询
+            getTableQuery() {
+                let that = this;
+                that.loading = true;
+                let param = {
+                    token: localStorage.token,
+                    stdId: this.$route.query.StdId,
+                    start: 1,//
+                    tableMax: 9999,//
+                };
+                let postdata = qs.stringify(param);
+                ClassOverDetailListQuery(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.loading = false;
+                        if (json.Rs) {
+                            that.allTableData = json.Rs;
+                            that.recordsTotal = json.Rs.length;
+                        } else {
+                            that.allTableData = [];
+                            that.recordsTotal = 0;
+                        }
+                        // 设置分页数据
+                        that.setPaginations();
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            // 设置分页数据
+            setPaginations() {
+                // 分页属性
+                let that = this;
+                that.pageination.total = that.recordsTotal;
+
+                // 默认分页
+                that.tableData = that.allTableData.filter((item, index) => {
+                    return index < that.pageination.pageItem;
+                });
+            },
+            // 每页显示数量
+            handleSizeChange() {
+                let that = this;
+                that.tableData = that.allTableData.filter((item, index) => {
+                    return index < that.pageination.pageItem;
+                });
+                that.draw = that.pageination.pageItem;
+                // that.getTableQuery();
+            },
+            // 翻页
+            pageChange(pageIndex) {
+                let that = this;
+                // 获取当前页
+                let index = that.pageination.pageItem * (pageIndex - 1);
+                // 数据总数
+                let nums = that.pageination.pageItem * pageIndex;
+                // 容器
+                let tables = [];
+                for (var i = index; i < nums; i++) {
+                    if (that.allTableData[i]) {
+                        tables.push(that.allTableData[i])
+                    }
+                    this.tableData = tables;
+                }
+                that.start = index * that.draw;
+                // that.getTableQuery();
+            },
+        },
+        watch: {
+            $route(to) {
+                if (to.name == 'classInfoDetail') {
+                    this.getTableQuery();
+                    this.title = this.$route.query.ClassName + ' ' + this.$route.query.BeginStr + '-' + this.$route.query.EndStr;
+
+                }
+            },
+        },
+    }
+</script>
+
+<style scoped>
+    @import "../assets/css/panel.css";
+
+    .context {
+        height: 770px;
+        overflow-y: scroll;
+        display: block;
+        margin: 0 auto;
+        background-color: #fff !important;
+        padding: 30px;
+    }
+
+    .classNames {
+        width: 211px;
+        height: 25px;
+        background: #f0f2f5;
+        font-family: "Source Han Sans CN";
+        font-weight: normal;
+        font-size: 16px;
+        color: #3799ff;
+        border-radius: 250px;
+        text-align: center;
+        margin-top: 15px;
+        margin-bottom: 3px;
+        float: left;
+    }
+    .head {
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        border-radius: 250px;
+    }
+</style>

+ 677 - 0
pc/src/views/courses.vue

@@ -0,0 +1,677 @@
+<template>
+    <div class="context">
+        <div class="panel">
+            <h5>课程管理
+            </h5>
+            <div class="panel-body">
+                <div class="panel_control">
+                    <el-row :gutter="20">
+                        <el-date-picker
+                                v-model="panel.timeScope"
+                                type="daterange"
+                                range-separator="至"
+                                start-placeholder="开始日期"
+                                end-placeholder="结束日期">
+                        </el-date-picker>
+
+                        <el-col :span="4">
+                            <el-button size="" type="primary" @click="query" :disabled="serachBtnStatus" plain>查询
+                            </el-button>
+                        </el-col>
+                    </el-row>
+                </div>
+            </div>
+        </div>
+
+        <div class="table">
+            <el-table
+                    :data="tableData"
+                    border
+                    is-horizontal-resize
+                    :default-sort="{prop: 'date', order: 'descending'}"
+                    element-loading-background="rgba(0, 0, 0, 0.8)"
+                    class=""
+                    @selection-change="handleSelectionChange"
+            >
+                >
+                <el-table-column
+                        type="index"
+                        label="序号"
+                        align="center"
+
+                        width="50">
+                </el-table-column>
+                <el-table-column
+                        prop="BeginTime"
+                        label="上课时间"
+                        :formatter="filterFmtDate"
+                >
+                </el-table-column>
+                <el-table-column
+                        prop="ClassName"
+                        label="课程"
+                        sortable
+                >
+                    <template slot-scope="scope">
+                        <span class="lessonSpan"
+                              :style="{background:scope.row.ClassColor}">{{scope.row.ClassName}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        prop="ConsumeHour"
+                        label="消耗课时"
+                        sortable
+                >
+                </el-table-column>
+                <el-table-column
+                        prop="OrderNum"
+                        label="实际预约人数"
+                        sortable
+                >
+                </el-table-column>
+                <el-table-column
+                        prop="SvName"
+                        label="区域"
+                        sortable
+                >
+                </el-table-column>
+                <el-table-column
+                        prop="FinishClass"
+                        label="当前状态"
+                        sortable
+                >
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.FinishClass == 0">未上课</span>
+                        <span v-if="scope.row.FinishClass == 1">已下课</span>
+                        <span v-if="scope.row.FinishClass == 2" style="color: yellowgreen">已上课</span>
+                        <span v-if="scope.row.FinishClass == 3">准备上课</span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        prop="Status"
+                        label="操作"
+                >
+                    <template slot-scope="scope">
+                        <!--<el-button type="primary" round size="mini" @click="checkClassOverPrepare(scope.row)">-->
+                        <!--下课-->
+                        <!--</el-button>-->
+                        <el-button type="primary" round size="mini" v-if="scope.row.FinishClass == 0"
+                                   @click="showDialogMemberVisible(scope.row)">
+                            上课
+                        </el-button>
+                        <el-button type="primary" round size="mini"
+                                   v-if="scope.row.FinishClass == 3 && scope.row.FinishClass == 2">
+                            管理
+                        </el-button>
+                        <el-button type="primary" round plain size="mini" v-if="scope.row.FinishClass == 3"
+                                   @click="seeEdit(scope.row)"
+                        >
+                            编辑
+                        </el-button>
+                        <el-button type="primary" round plain size="mini" v-if="scope.row.FinishClass == 1"
+                                   @click="seeDetail(scope.row)"
+                        >
+                            详情
+                        </el-button>
+
+                    </template>
+                </el-table-column>
+            </el-table>
+            <br>
+            <el-pagination
+                    background
+                    :total="pageination.total"
+                    :page-size="pageination.pageItem"
+                    @current-change="pageChange"
+            ></el-pagination>
+        </div>
+        <el-dialog :title="dialogTitle" :visible.sync="dialogMemberVisible" width="650px">
+            <div class="dialogContent">
+                <h5 class="classNames">{{className}}</h5>
+                <div class="">
+                    <el-form ref="form" :model="form" label-width="160px">
+                        <el-form-item label="区域" :required="true">
+                            <el-select v-model="form.svId" filterable placeholder="请选择" @change="changeLocationValue">
+                                <el-option
+                                        v-for="item in form.svList"
+                                        :key="item.SvId"
+                                        :label="item.Name"
+                                        :value="item.SvId">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="类型">
+                            <el-select v-model="form.classType" filterable placeholder="请选择">
+                                <el-option
+                                        v-for="item in form.ClassTypeOptions"
+                                        :key="item.value"
+                                        :label="item.label"
+                                        :value="item.value">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="组队方式" v-if="form.classType == 2">
+                            <el-select v-model="form.pkNum" filterable placeholder="请选择">
+                                <el-option
+                                        v-for="item in form.PKTypeOptions"
+                                        :key="item.value"
+                                        :label="item.label"
+                                        :value="item.value">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-form>
+                </div>
+            </div>
+            <div class="dialogFooter">
+                <el-button type="primary" size="small" @click="getClassStartPrepare()">确定</el-button>
+                <el-button size="small" @click="dialogMemberVisible = false">取消</el-button>
+            </div>
+        </el-dialog>
+
+    </div>
+</template>
+
+<script>
+    import Global from '../Global.js'
+    import {
+        ClassPreFinishListQuery,
+        ClassOverPrepare,
+        ClassDetailQuery,
+        QueryShopVenue,
+        ClassStartPrepare,
+    } from "../api/getApiRes";
+
+    let qs = require('qs');
+    export default {
+        data() {
+            return {
+                dialogMemberVisible: false,
+                serachBtnStatus: false,
+                dialogVisible: false,//其他dialog
+                dialogFinishVisible: false,//确认下课dialog
+                dialogLesson: false,//课时调整
+                dialogGift: false,//赠送课时调整
+                dialogExpTime: false,//有效期调整
+                dialogLessonTable: false,//会员课程
+                dialogTitle: '上课准备',
+                className: '',
+                current: getNowDate(),
+                dialogValue: [],
+                // panel 配置项目
+                panel: {
+                    usercode: '',
+                    username: '',
+                    compname: '',
+                    keyword: '',
+                    USERCODE: '',
+                    endType: '',
+                    taskstatus: 99,
+                    draw: 1,
+                    start: 0,
+                    recordsTotal: 0,
+                    tableData: [],
+                    allTableData: [],
+                    limit: '10',
+                    multipleSort: false,
+                    loading: false,
+                    fileList: [],
+                    multipleSelection: [],
+                    detectedmac: '',
+                    options: [
+                        {value: 99, label: '全部'},
+                        {value: 1, label: '进行中'},
+                        {value: 2, label: '已完成'},
+                    ],
+
+                    endTypeOptions: [
+                        {value: 99, label: '全部'},
+                        {value: 30, label: '近一个月'},
+                        {value: 7, label: '近一周'},
+                        {value: 1, label: '当日'},
+                    ],
+                    time1: globalBt(),
+                    timeScope: globalBt2(1),
+                },
+                multipleSelection: [],
+                pageination: {
+                    pageItem: 100,
+                    pageoptions: pageOptions(),
+                    total: 100,
+                    pageIndex: 1,
+                },
+                form: {
+                    name: '',
+                    svId: '',
+                    svName: '',
+                    classType: '',
+                    userCode: '',
+                    coach: '',
+                    coachOptions: [],
+                    shopId: '',
+                    memberType: 1,
+                    lesson: 1,
+                    gift: 1,
+                    pktype: 1,
+                    pkNum: 2,
+                    btnType: 0,//0新建,1编辑编辑
+                    memo: '',
+                    expTime: '',
+                    StdId: '',
+                    svList: [],//区域列表
+                    dialogdata: [],//穿梭待选
+                    dialogValue: [],//穿梭已选
+                    ClassTypeOptions: [
+                        {value: 1, label: '团课'},
+                        {value: 2, label: '竞技PK'},
+                        {value: 3, label: '私教'},
+                    ],
+                    PKTypeOptions: [
+                        {value: 2, label: '2队PK'},
+                        {value: 3, label: '3队PK'},
+                    ],
+                },
+                memberTypes: [
+                    {value: 1, label: '年会员'},
+                    {value: 2, label: '充值会员'},
+                ],
+                tableData: []
+            }
+        },
+        mounted() {
+            this.getTableQuery();
+        },
+        methods: {
+            // 准备上课
+            getClassStartPrepare() {
+                let that = this;
+
+                if (!that.form.svId) {
+                    that.$message.error('上课区域不能为空');
+                    return false
+                }
+
+                // 不是竞技pk的时候为0
+                let uppkNum = that.form.classType != 2 ? that.form.pkNum : 0;
+
+                let param = {
+                    token: localStorage.token,
+                    stdId: that.form.StdId,
+                    svId: that.form.svId,
+                    svName: that.form.svName,
+                    classType: that.form.classType,
+                    pkNum: uppkNum,
+                };
+                let postdata = qs.stringify(param);
+                ClassStartPrepare(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        // NewId: 0
+                        that.dialogMemberVisible = false;
+                        this.getTableQuery();
+                        this.$router.push({
+                            path: '/finishDetail', query: {
+                                id: row.StdId,
+                                // classId: row.ClassId,
+                                // ClassName: row.ClassName,
+                                // BeginTime: row.BeginTime,
+                            }
+                        });
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            seeDetail(row) {
+                this.$router.push({
+                    path: '/classInfoDetail', query: {
+                        StdId: row.StdId,
+                        ClassName: row.ClassName,
+                        BeginStr: row.BeginStr,
+                        EndStr: row.EndStr,
+                    }
+                });
+            },
+            seeEdit(row) {
+                this.$router.push({
+                    path: '/courseEdit', query: {
+                        StdId: row.StdId,
+                        ClassName: row.ClassName,
+                        BeginStr: row.BeginStr,
+                        EndStr: row.EndStr,
+                    }
+                });
+            },
+            // 获取select的label
+            changeLocationValue(val) {
+                //locations是v-for里面的也是datas里面的值
+                let obj = {};
+                obj = this.form.svList.find((item) => {
+                    return item.SvId === val;
+                });
+                this.form.svName = obj.Name;
+            },
+
+
+            // 获取区域列表
+            getQueryShopVenue() {
+                let that = this;
+                let param = {
+                    key: localStorage.ServiceKey,
+                    shopId: localStorage.ServiceId,
+                };
+                let postdata = qs.stringify(param);
+                QueryShopVenue(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.form.svList = json.Rs;
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            vipSelect(stdId) {
+                let that = this;
+                // 筛选相同的stdid的classId
+                that.form.stdList.map(function (item) {
+                    if (item.value == stdId) {
+                        let param = {
+                            token: localStorage.token,
+                            // classId: item.classId
+                        };
+                        let postdata = qs.stringify(param);
+                        // VipUserListQuery
+                        VipUserSimpleQuery(postdata).then(res => {
+                            let json = res;
+                            if (json.Code == 0) {
+                                that.form.userId = '';
+                                that.form.userList = turnResToOptionBySimViper(json.Rs);
+                            } else {
+                                that.$message.error(json.Memo);
+                            }
+                        })
+                    }
+                })
+            },
+            showDialogMemberVisible(row) {
+                console.log(row);
+                this.dialogMemberVisible = true;
+                this.className = row.ClassName + ' ' + row.BeginStr + ' - ' + row.EndStr;
+                this.form.StdId = row.StdId;
+                this.getQueryShopVenue();
+
+            },
+            // 检测当前课是否处于可改变状态
+            // 固定下当前已预约人数列表
+            checkClassOverPrepare(row) {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                    stdId: row.StdId,
+                };
+                let postdata = qs.stringify(param);
+                ClassOverPrepare(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.goFinish(row);
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            goFinish(row) {
+                this.$router.push({
+                    path: '/finishDetail', query: {
+                        id: row.StdId,
+                        classId: row.ClassId,
+                        ClassName: row.ClassName,
+                        BeginTime: row.BeginTime,
+                    }
+                });
+            },
+            handleSelectionChange(val) {
+                this.multipleSelection = val;
+            },
+            // 查询按钮
+            query() {
+                let that = this;
+                that.serachBtnStatus = true;
+                let totalTime = 2;
+                let clock = window.setInterval(() => {
+                    totalTime--;
+                    if (totalTime < 0) {
+                        totalTime = 2;
+                        that.serachBtnStatus = false;
+                    }
+                }, 1000);
+                this.getTableQuery();
+                this.$message.success('查询完毕');
+            },
+            // 页面数据查询
+            getTableQuery() {
+                let that = this;
+                that.loading = true;
+                let param = {
+                    token: localStorage.token,
+                    tagname: that.panel.tagname,//标签名
+                    bt: nonTfmtDatetoLength(that.panel.timeScope[0], 10) + " 00:00:00",
+                    et: nonTfmtDatetoLength(that.panel.timeScope[1], 10) + " 23:59:59",
+                    start: 1,//
+                    tableMax: 9999,//
+                };
+                let postdata = qs.stringify(param);
+                ClassDetailQuery(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.loading = false;
+                        if (json.Rs) {
+                            that.allTableData = json.Rs;
+                            that.recordsTotal = json.Rs.length;
+                        } else {
+                            that.allTableData = [];
+                            that.recordsTotal = 0;
+                        }
+                        // 设置分页数据
+                        that.setPaginations();
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            // 设置分页数据
+            setPaginations() {
+                // 分页属性
+                let that = this;
+                that.pageination.total = that.recordsTotal;
+
+                // 默认分页
+                that.tableData = that.allTableData.filter((item, index) => {
+                    return index < that.pageination.pageItem;
+                });
+            },
+            // 每页显示数量
+            handleSizeChange() {
+                let that = this;
+                that.tableData = that.allTableData.filter((item, index) => {
+                    return index < that.pageination.pageItem;
+                });
+                that.draw = that.pageination.pageItem;
+                // that.getTableQuery();
+            },
+            // 翻页
+            pageChange(pageIndex) {
+                let that = this;
+                // 获取当前页
+                let index = that.pageination.pageItem * (pageIndex - 1);
+                // 数据总数
+                let nums = that.pageination.pageItem * pageIndex;
+                // 容器
+                let tables = [];
+                for (var i = index; i < nums; i++) {
+                    if (that.allTableData[i]) {
+                        tables.push(that.allTableData[i])
+                    }
+                    this.tableData = tables;
+                }
+                that.start = index * that.draw;
+                // that.getTableQuery();
+            },
+            // 过滤时间
+            filterFmtDate(value, row, column) {
+                let that = this;
+                return nonTfmtDate(column, 11);
+            },
+        },
+        watch: {
+            $route(to) {
+                if (to.name == 'finish') {
+                    this.getTableQuery();
+                }
+            },
+        },
+    }
+</script>
+
+<style scoped>
+    @import "../assets/css/panel.css";
+
+    .context {
+        height: 770px;
+        overflow-y: scroll;
+        display: block;
+        margin: 0 auto;
+        background-color: #fff !important;
+        padding: 30px;
+    }
+
+    .panel-body {
+        padding: 20px;
+        background: #F0F2F5;
+    }
+
+    .change {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-top: 10px;
+        padding-bottom: 10px;
+    }
+
+    .change button {
+        float: left;
+    }
+
+    .change button.pull-right {
+        float: right;
+    }
+
+    .dialogTitle {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        color: #000000;
+        font-size: 18px;
+        text-align: center;
+    }
+
+    .dialogTitle em {
+        float: none;
+        font-style: normal;
+        color: #3799FF;
+        margin: 0;
+    }
+
+    /deep/ .el-transfer-panel__item .el-checkbox__input {
+        left: 40px;
+    }
+
+    .dialogFooter {
+        width: 90%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-top: 10px;
+    }
+
+    .dialogFooter button {
+        float: right;
+        margin-left: 10px;
+    }
+
+    .dialogContent {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .dialogContent .pull-left {
+        width: 30%;
+        float: left;
+    }
+
+    .dialogContent .pull-right {
+        width: 70%;
+        float: right;
+    }
+
+    .blueTitle {
+        width: 200px;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-top: 10px;
+        margin-bottom: 40px;
+        background: #F0F2F5;
+        border-radius: 19px;
+        text-align: center;
+        color: #3799FF;
+        font-size: 16px;
+        padding: 5px 24px;
+    }
+
+    .current {
+        width: 158px;
+        height: 23px;
+        /*float: left;*/
+        border-radius: 250px;
+        text-align: center;
+        background: #F0F2F5;
+        color: #545454;
+        font-size: 14px;
+        padding: 3px 10px;
+        margin-left: 20px;
+    }
+
+    .lessonSpan {
+        width: 78px;
+        height: 22px;
+        border-radius: 11px;
+        margin-right: 5px;
+        float: left;
+        margin-bottom: 3px;
+        text-align: center;
+        color: #000;
+        font-size: 12px;
+    }
+
+    .classNames {
+        width: 211px;
+        height: 25px;
+        background: #f0f2f5;
+        font-family: "Source Han Sans CN";
+        font-weight: normal;
+        font-size: 16px;
+        color: #3799ff;
+        border-radius: 250px;
+        text-align: center;
+        margin: 0 auto;
+        margin-bottom: 10px;
+    }
+
+    /deep/ .el-date-editor .el-range-separator {
+        line-height: 25px;
+    }
+</style>

+ 10 - 14
tv/.idea/workspace.xml

@@ -23,19 +23,15 @@
   </component>
   </component>
   <component name="ChangeListManager">
   <component name="ChangeListManager">
     <list default="true" id="c813a37b-038b-4bb1-a925-c03a432a7638" name="Default Changelist" comment="">
     <list default="true" id="c813a37b-038b-4bb1-a925-c03a432a7638" name="Default Changelist" comment="">
+      <change afterPath="$PROJECT_DIR$/../pc/src/views/classInfoDetail.vue" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../pc/src/views/classPrepare.vue" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../pc/src/views/courseEdit.vue" afterDir="false" />
       <change afterPath="$PROJECT_DIR$/../pc/src/views/courses.vue" afterDir="false" />
       <change afterPath="$PROJECT_DIR$/../pc/src/views/courses.vue" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../pc/src/Global.js" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/Global.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../pc/src/api/Navs.js" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/api/Navs.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../pc/src/api/Navs.js" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/api/Navs.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../pc/src/api/getApiRes.js" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/api/getApiRes.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../pc/src/api/getApiRes.js" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/api/getApiRes.js" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../pc/src/components/Headside.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/components/Headside.vue" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../pc/src/router/index.js" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/router/index.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../pc/src/router/index.js" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/router/index.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../pc/src/views/Main.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/Main.vue" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../pc/src/views/Main.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/Main.vue" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../pc/src/views/Member.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/Member.vue" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../pc/src/views/heartLog.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/heartLog.vue" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../pc/src/views/region.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/region.vue" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../pc/vue.config.js" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/vue.config.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/views/Rank.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/Rank.vue" afterDir="false" />
     </list>
     </list>
     <ignored path="$PROJECT_DIR$/.tmp/" />
     <ignored path="$PROJECT_DIR$/.tmp/" />
     <ignored path="$PROJECT_DIR$/temp/" />
     <ignored path="$PROJECT_DIR$/temp/" />
@@ -51,8 +47,8 @@
       <file pinned="false" current-in-tab="true">
       <file pinned="false" current-in-tab="true">
         <entry file="file://$PROJECT_DIR$/src/views/Rank.vue">
         <entry file="file://$PROJECT_DIR$/src/views/Rank.vue">
           <provider selected="true" editor-type-id="text-editor">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="504">
-              <caret line="24" column="34" selection-start-line="24" selection-start-column="34" selection-end-line="24" selection-end-column="34" />
+            <state relative-caret-position="253">
+              <caret line="17" lean-forward="true" selection-start-line="17" selection-end-line="17" />
               <folding>
               <folding>
                 <element signature="e#2820#2864#0" expanded="true" />
                 <element signature="e#2820#2864#0" expanded="true" />
               </folding>
               </folding>
@@ -153,7 +149,7 @@
     <other-services-enabled>true</other-services-enabled>
     <other-services-enabled>true</other-services-enabled>
     <auto-save>true</auto-save>
     <auto-save>true</auto-save>
   </component>
   </component>
-  <component name="ProjectFrameBounds" extendedState="1">
+  <component name="ProjectFrameBounds">
     <option name="x" value="-2568" />
     <option name="x" value="-2568" />
     <option name="y" value="-8" />
     <option name="y" value="-8" />
     <option name="width" value="1296" />
     <option name="width" value="1296" />
@@ -304,7 +300,7 @@
       <workItem from="1605406240238" duration="51039000" />
       <workItem from="1605406240238" duration="51039000" />
       <workItem from="1605668164423" duration="15041000" />
       <workItem from="1605668164423" duration="15041000" />
       <workItem from="1605747566783" duration="13000" />
       <workItem from="1605747566783" duration="13000" />
-      <workItem from="1605775278675" duration="14902000" />
+      <workItem from="1605775278675" duration="15574000" />
     </task>
     </task>
     <task id="LOCAL-00001" summary="test web">
     <task id="LOCAL-00001" summary="test web">
       <created>1605431368250</created>
       <created>1605431368250</created>
@@ -380,7 +376,7 @@
     <servers />
     <servers />
   </component>
   </component>
   <component name="TimeTrackingManager">
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="244994000" />
+    <option name="totallyTimeSpent" value="245666000" />
   </component>
   </component>
   <component name="ToolWindowManager">
   <component name="ToolWindowManager">
     <frame x="-2568" y="-8" width="1296" height="1395" extended-state="1" />
     <frame x="-2568" y="-8" width="1296" height="1395" extended-state="1" />
@@ -725,8 +721,8 @@
     </entry>
     </entry>
     <entry file="file://$PROJECT_DIR$/src/views/Rank.vue">
     <entry file="file://$PROJECT_DIR$/src/views/Rank.vue">
       <provider selected="true" editor-type-id="text-editor">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="504">
-          <caret line="24" column="34" selection-start-line="24" selection-start-column="34" selection-end-line="24" selection-end-column="34" />
+        <state relative-caret-position="253">
+          <caret line="17" lean-forward="true" selection-start-line="17" selection-end-line="17" />
           <folding>
           <folding>
             <element signature="e#2820#2864#0" expanded="true" />
             <element signature="e#2820#2864#0" expanded="true" />
           </folding>
           </folding>