소스 검색

对接我的技能培训/技能培训

空白格 3 년 전
부모
커밋
f57aab7b2b
28개의 변경된 파일1140개의 추가작업 그리고 516개의 파일을 삭제
  1. 50 10
      h5_web/common/apiurl.js
  2. 94 56
      h5_web/common/http.api.js
  3. 18 0
      h5_web/pages.json
  4. 20 18
      h5_web/pages/bannerDetails/bannerDetails.vue
  5. 186 183
      h5_web/pages/index/index.vue
  6. 27 18
      h5_web/pages/mine/skillsTraining/skillsTraining.vue
  7. 7 4
      h5_web/pages/mine/skillsTraining/skillsTrainingDetails/skillsTrainingDetails.scss
  8. 51 28
      h5_web/pages/mine/skillsTraining/skillsTrainingDetails/skillsTrainingDetails.vue
  9. 1 2
      h5_web/pages/newsDetails/newsDetails.vue
  10. 1 1
      h5_web/pages/newsInformation/newsInformation.vue
  11. 82 0
      h5_web/pages/notification/noticeDetails/noticeDetails.vue
  12. 55 25
      h5_web/pages/notification/notification.vue
  13. 3 0
      h5_web/pages/notification/scss/notification.scss
  14. 6 0
      h5_web/pages/skillsTraining/achievementCertificate/achievementCertificate.scss
  15. 85 19
      h5_web/pages/skillsTraining/achievementCertificate/achievementCertificate.vue
  16. 14 8
      h5_web/pages/skillsTraining/addAchievementCertificate/addAchievementCertificate.scss
  17. 87 12
      h5_web/pages/skillsTraining/addAchievementCertificate/addAchievementCertificate.vue
  18. 38 26
      h5_web/pages/skillsTraining/registrationNotice/registrationNotice.vue
  19. 8 5
      h5_web/pages/skillsTraining/skillsPackage/skillsPackage.scss
  20. 71 44
      h5_web/pages/skillsTraining/skillsPackage/skillsPackage.vue
  21. 1 1
      h5_web/pages/skillsTraining/skillsTraining - 副本.vue
  22. 6 3
      h5_web/pages/skillsTraining/skillsTraining.scss
  23. 89 37
      h5_web/pages/skillsTraining/skillsTraining.vue
  24. 30 13
      h5_web/pages/skillsTraining/skillsTrainingCourse/skillsTrainingCourse.vue
  25. 3 2
      h5_web/pages/upgrade/professionalIntroduction/professionalIntroduction.vue
  26. 35 0
      h5_web/pages/upgrade/upgradeCourse/upgradeCourse.scss
  27. 71 0
      h5_web/pages/upgrade/upgradeCourse/upgradeCourse.vue
  28. 1 1
      h5_web/pages/upgrade1/upgrade.vue

+ 50 - 10
h5_web/common/apiurl.js

@@ -2,18 +2,12 @@
 	接口统一管理
 */
 const apiurl = {
-	// 测试
-	testApi: '/test/test',
 	// 手机登录验证码
 	phoneLoginCodeUrl:'/auth/sendSmsCode',
 	// 手机登录验证码验证
 	phoneLoginAuthUrl:'/auth/verifyCode',
-	// 获取条款须知
-	// 首页轮播
-	indexBannerListUrl:'/sysadv/list',
+	// 获取系统信息
 	getSystermsApi: '/systerms/getByType/',
-	// 首页新闻列表
-	indexNewsList: '/sec/article/door/list',
 	// 新闻详情
 	newsDetailsUrl:'/sec/article/door/info',
 	// 政策法规详情
@@ -51,6 +45,34 @@ const apiurl = {
 	// 修改用户信息
 	modifyUserInfoUrl: '/memberinfo',
 	
+	// 查看技能包更多课程
+	getMoreCourseListUrl: '/learncourse/list/',
+	
+	/**
+	 * 首页模块
+	 */
+	index: {
+		// 获取消息未读条数
+		getUnreadInfoNumUrl: '/notice/countUnread',
+		// 首页轮播
+		indexBannerListUrl:'/sysadv/list',
+		// 获取首页三条最新消息
+		getNewestInfoUrl: '/notice/queryNewest',
+		// 首页新闻列表
+		getIndexNewsListUrl: '/sec/article/door/list',
+	},
+	/**
+	 * 通知消息模块
+	 */
+	notice: {
+		// 查询每类通知未读的条数
+		getClassifyUnreadNumUrl: '/notice/classifyUnreadCount',
+		// 获取各种类型消息
+		getNoticeListByTypeUrl: '/notice/list/',
+		// 获取通知详情
+		getNoticeDetailsUrl: '/notice/getDetail/'
+	},
+	
 	// 学院模块
 	school: {
 		// 合作学校分页数据
@@ -149,7 +171,7 @@ const apiurl = {
 		integralListUrl: '/integral/list'
 	},
 	/**
-	 * 
+	 * 适应性培训
 	 */
 	training: {
 		// 获取线上课程列表
@@ -174,9 +196,27 @@ const apiurl = {
 	 */
 	skillTraining: {
 		// 查询技术包列表
-		getPackageList: '/learnpackage/skillList',
+		getPackageListUrl: '/learnpackage/skillList',
 		// 报名
-		signUpClass: '/learnmember'
+		signUpClassUrl: '/learnmember',
+		// 查询技能包详情
+		getPackageDetailsUrl: '/learnpackage/getSkillDetail/',
+		// 获取报班通知列表
+		getClassNoticeUrl: '/learnpackage/classNoticeList',
+		// 获取个人技能培训统计
+		getTrainingTotalUrl: '/learnpackage/count',
+		// 检验是否已经报过该技能包
+		isApplyTrainingUrl: '/learnmember/isApply/',
+		// 我的技能培训列表
+		getMyTrainingListUrl: '/learnmember/myTrainList/',
+		// 获取我的技能培训详情
+		getMyTrainingDetailsUrl: '/learnmember/myTrainDetail/',
+		// 获取证书列表
+		getCertificateListUrl: '/certificate/list/',
+		// 添加证书
+		addCertificateUrl: '/certificate',
+		// 删除证书
+		deleteCertificateUrl: '/certificate/'
 	}
 }
 

+ 94 - 56
h5_web/common/http.api.js

@@ -4,57 +4,82 @@ import {
 
 // 此处第二个参数vm,就是我们在页面使用的this,你可以通过vm获取vuex等操作,更多内容详见uView对拦截器的介绍部分:
 const install = (Vue, vm) => {
-
-	// 测试
-	let test = (params = {}) => vm.$u.post(apiurl.testApi, params);
-	
 	let getPhoneLoginCode = (params = {}) => vm.$u.post(apiurl.phoneLoginCodeUrl, params);
-	let phoneLoginAuth = (params = {}) => vm.$u.post(apiurl.phoneLoginAuthUrl, {code:params.code},{Authorization:`Bearer ${params.accessToken}`,user_id:params.userId});
+	let phoneLoginAuth = (params = {}) => vm.$u.post(apiurl.phoneLoginAuthUrl, {
+		code: params.code
+	}, {
+		Authorization: `Bearer ${params.accessToken}`,
+		user_id: params.userId
+	});
 	// 获取自定义富文本内容: 0-包月须知 1-用户服务条款 2-隐私权政策信息 3-收费标准 4-退款温馨提示
 	let getSysterms = (params = {}) => vm.$u.get(apiurl.getSystermsApi + params.termsType);
-	// 首页轮播
-	let getIndexBannerList = (params = {}) => vm.$u.get(apiurl.indexBannerListUrl,params);
-	// 首页新闻列表
-	let getIndexNewsList = (params = {}) => vm.$u.get(apiurl.indexNewsList,params);
 	// 新闻详情
-	let getNewsDetails = (params = {}) => vm.$u.get(apiurl.newsDetailsUrl,params);
+	let getNewsDetails = (params = {}) => vm.$u.get(apiurl.newsDetailsUrl, params);
 	// 政策法规详情
-	let getPolicyNewsDetails = (params = {}) => vm.$u.get(apiurl.policyNewsDetailsUrl,params);
+	let getPolicyNewsDetails = (params = {}) => vm.$u.get(apiurl.policyNewsDetailsUrl, params);
 	// 军人认证
 	let veteEduc = (params = {}) => vm.$u.post(apiurl.veteEducUrl, params);
 	// 认证状态查询
 	let getVeteEducCheck = (params = {}) => vm.$u.get(apiurl.veteEducCheckUrl, params);
 	//我的认证申请
-	let getVeteEducData = (params = {}) => vm.$u.get(apiurl.veteEducUrl,params);
+	let getVeteEducData = (params = {}) => vm.$u.get(apiurl.veteEducUrl, params);
 	// 我的详细信息
-	let getmemberinfo = (params = {}) => vm.$u.get(apiurl.memberinfoUrl,params);
+	let getmemberinfo = (params = {}) => vm.$u.get(apiurl.memberinfoUrl, params);
 	// 首页新闻列表
-	let getpolicyNewsList = (params = {}) => vm.$u.get(apiurl.policyNewsListUrl,params);
+	let getpolicyNewsList = (params = {}) => vm.$u.get(apiurl.policyNewsListUrl, params);
 	// 枚举值key查询 key 新闻类型 news_type, 政策法规 policy_type 人员属性 vete_attribute
-	let getDictdataUrl = (params = {}) => vm.$u.get(apiurl.dictdataUrl,params);
+	let getDictdataUrl = (params = {}) => vm.$u.get(apiurl.dictdataUrl, params);
 	// 适应性培训课程列表
-	let getAdaptTrainOnline = (params = {}) => vm.$u.get(apiurl.adaptTrainOnlineUrl,params);
+	let getAdaptTrainOnline = (params = {}) => vm.$u.get(apiurl.adaptTrainOnlineUrl, params);
 	// 适应性培训课程详情
-	let getAdaptTrainOnlineDetails = (params = {}) => vm.$u.get(apiurl.adaptTrainOnlineDetailsUrl+params.id);
+	let getAdaptTrainOnlineDetails = (params = {}) => vm.$u.get(apiurl.adaptTrainOnlineDetailsUrl + params.id);
 	// 适应性培训学习进度
 	let getAdaptTrainOnlineRate = (params = {}) => vm.$u.post(apiurl.adaptTrainOnlineRateUrl, params);
 	// 上传适应性培训视频播放情况
 	let upAdaptTrainOnlineInfo = (params = {}) => vm.$u.post(apiurl.upAdaptTrainOnlineInfoUrl, params);
 	// 适应性培训线下内容
-	let getAdaptTrainOffline = (params = {}) => vm.$u.get(apiurl.adaptTrainOfflineUrl,params);
+	let getAdaptTrainOffline = (params = {}) => vm.$u.get(apiurl.adaptTrainOfflineUrl, params);
 	// 查询线下培训详情
-	let getAdaptTrainIdOffline = (params = {}) => vm.$u.get(apiurl.adaptTrainIdOfflineUrl+params.id);
+	let getAdaptTrainIdOffline = (params = {}) => vm.$u.get(apiurl.adaptTrainIdOfflineUrl + params.id);
 	// 页面点击统计
 	let postAnalysis = (params = {}) => vm.$u.post(apiurl.analysisUrl, params);
 	// 线下培训签到
 	let postSignOffline = (params = {}) => vm.$u.post(apiurl.signOfflineUrl, params);
 	// 根据身份证号读取信息
-	let getIdInfo = (params = {}) => vm.$u.get(apiurl.getIdInfoUrl+params.id);
+	let getIdInfo = (params = {}) => vm.$u.get(apiurl.getIdInfoUrl + params.id);
 	// 获取学院分页数据
 	let getSchoolList = (params = {}) => vm.$u.get(apiurl.getSchoolListUrl, params)
 	// 修改用户信息
 	let modifyUserInfo = (params = {}) => vm.$u.put(apiurl.modifyUserInfoUrl, params)
 	
+	let getMoreCourseListApi = (params = {}) => vm.$u.get(apiurl.getMoreCourseListUrl + params.id, params)
+	/**
+	 * 首页模块
+	 */
+	let indexApi = {
+		// 获取消息未读条数
+		getUnreadInfoNumApi: (params = {}) => vm.$u.get(apiurl.index.getUnreadInfoNumUrl, params),
+		// 获取轮播
+		indexBannerListApi: (params = {}) => vm.$u.get(apiurl.index.indexBannerListUrl, params),
+		// 获取最新三条消息
+		getNewestInfoApi: (params = {}) => vm.$u.get(apiurl.index.getNewestInfoUrl, params),
+		// 首页新闻列表
+		getIndexNewsListApi: (params = {}) => vm.$u.get(apiurl.index.getIndexNewsListUrl, params)
+	};
+
+	/**
+	 * 通知消息模块
+	 */
+	let noticeApi = {
+		// 查询每类通知未读的条数
+		getClassifyUnreadNumApi: (params = {}) => vm.$u.get(apiurl.notice.getClassifyUnreadNumUrl, params),
+		// 获取各种类型消息
+		getNoticeListByTypeApi: (params = {}) => vm.$u.get(apiurl.notice.getNoticeListByTypeUrl + params.type,
+			params),
+		// 获取通知消息详情
+		getNoticeDetailsApi: (params = {}) => vm.$u.get(apiurl.notice.getNoticeDetailsUrl + params.id, params)
+	};
+
 	// 学院模块
 	let school = {
 		// 获取学院分页数据
@@ -70,11 +95,12 @@ const install = (Vue, vm) => {
 		// 获取学院专业包详情
 		getLearnpackageDetails: (params = {}) => vm.$u.get(apiurl.school.getLearnpackageDetailsUrl + params.id),
 		// 获取学院专业包课程详情
-		getPackageCourseDetail: (params = {}) => vm.$u.get(apiurl.school.getPackageCourseDetailsUrl + params.id),
+		getPackageCourseDetail: (params = {}) => vm.$u.get(apiurl.school.getPackageCourseDetailsUrl + params
+			.id),
 		// 获取学校招生详情
 		getSchoolIntroduction: (params = {}) => vm.$u.get(apiurl.school.getSchoolIntroductionUrl + params.id)
 	};
-	
+
 	// 公司模块
 	let company = {
 		// 获取公司列表
@@ -82,7 +108,8 @@ const install = (Vue, vm) => {
 		// 获取公司详情
 		getCompanyDetails: (params = {}) => vm.$u.get(apiurl.company.getCompanyDetailsUrl + params.id),
 		// 获取岗位列表
-		getCompanyPostList: (params = {}) => vm.$u.get(apiurl.company.getCompanyPostListUrl + params.id, params),
+		getCompanyPostList: (params = {}) => vm.$u.get(apiurl.company.getCompanyPostListUrl + params.id,
+			params),
 		// 获取岗位详情
 		getPostDetails: (params = {}) => vm.$u.get(apiurl.company.getPostDetailsUrl + params.id),
 		// 投递简历
@@ -90,53 +117,53 @@ const install = (Vue, vm) => {
 		// 判断是否已投递
 		judgeIsSubmit: (params = {}) => vm.$u.get(apiurl.company.judgeIsSubmitUrl + params.id)
 	};
-  
-  // 政策资讯模块
-  let policyInfo = {
-    // 政策资讯列表
-    getPolicyInfoList: (params = {}) => vm.$u.get(apiurl.policyInfo.getPolicyInfoListUrl, params),
-    // 政策资讯详情
-    getPolicyInfoDetails: (params = {}) => vm.$u.get(apiurl.policyInfo.getPolicyInfoDetailsUrl, params)
-  };
-  
-  // 招聘就业模块
-  let recruitment = {
-    // 企业推荐列表
-    getRecommendList: (params = {}) => vm.$u.get(apiurl.recruitment.getRecommendListUrl, params),
-    // 招聘就业岗位列表
-    getRecruitmentJobList: (params = {}) => vm.$u.get(apiurl.recruitment.getRecruitmentJobListUrl, params),
-    // 岗位详情
-    getJobDetails: (params = {}) => vm.$u.get(apiurl.recruitment.getJobDetailsUrl + params.id)
-  };
-	
+
+	// 政策资讯模块
+	let policyInfo = {
+		// 政策资讯列表
+		getPolicyInfoList: (params = {}) => vm.$u.get(apiurl.policyInfo.getPolicyInfoListUrl, params),
+		// 政策资讯详情
+		getPolicyInfoDetails: (params = {}) => vm.$u.get(apiurl.policyInfo.getPolicyInfoDetailsUrl, params)
+	};
+
+	// 招聘就业模块
+	let recruitment = {
+		// 企业推荐列表
+		getRecommendList: (params = {}) => vm.$u.get(apiurl.recruitment.getRecommendListUrl, params),
+		// 招聘就业岗位列表
+		getRecruitmentJobList: (params = {}) => vm.$u.get(apiurl.recruitment.getRecruitmentJobListUrl, params),
+		// 岗位详情
+		getJobDetails: (params = {}) => vm.$u.get(apiurl.recruitment.getJobDetailsUrl + params.id)
+	};
+
 	// 我的投递
 	let delivery = {
 		getDeliveryList: (params = {}) => vm.$u.get(apiurl.delivery.deliveryListUrl, params)
 	};
-	
+
 	// 我的面试
 	let interview = {
 		getInterviewList: (params = {}) => vm.$u.get(apiurl.interview.getInterviewListUrl, params)
 	};
-	
+
 	// 我的简历
 	let resume = {
 		submitJobIntention: (params = {}) => vm.$u.put(apiurl.resume.submitJobIntentionUrl, params),
 		submitSelfAssessment: (params = {}) => vm.$u.put(apiurl.resume.submitSelfAssessmentUrl, params)
 	}
-	
+
 	// 我的评价
 	let evaluation = {
 		getEvaluationList: (params = {}) => vm.$u.get(apiurl.evaluation.getEvaluationListUrl, params)
 	}
-	
+
 	// 我的
 	let mine = {
 		submitEmploymentCondition: (params = {}) => vm.$u.post(apiurl.mine.employmentConditionUrl, params),
 		totalCount: (params = {}) => vm.$u.get(apiurl.mine.totalCountUrl, params),
 		integralList: (params = {}) => vm.$u.get(apiurl.mine.integralListUrl, params)
 	}
-	
+
 	// 适应性培训
 	let training = {
 		// 获取线上培训列表
@@ -149,19 +176,27 @@ const install = (Vue, vm) => {
 		getOfflineListApi: (params = {}) => vm.$u.get(apiurl.training.getOfflineListUrl, params),
 		getOfflineDetailsApi: (params = {}) => vm.$u.get(apiurl.training.getOfflineDetailsUrl + params.id)
 	}
-	
+	/**
+	 * 技能培训
+	 */
 	let skillTraining = {
-		getSkillPackageListApi: (params = {}) => vm.$u.get(apiurl.skillTraining.getPackageList, params),
-		signUpClassApi: (params = {}) => vm.$u.post(apiurl.skillTraining.signUpClass, params)
+		getSkillPackageListApi: (params = {}) => vm.$u.get(apiurl.skillTraining.getPackageListUrl, params),
+		signUpClassApi: (params = {}) => vm.$u.post(apiurl.skillTraining.signUpClassUrl, params),
+		getPackageDetailApi: (params = {}) => vm.$u.get(apiurl.skillTraining.getPackageDetailsUrl + params.id),
+		getClassNoticeApi: (params = {}) => vm.$u.get(apiurl.skillTraining.getClassNoticeUrl, params),
+		getTrainingTotalApi: (params = {}) => vm.$u.get(apiurl.skillTraining.getTrainingTotalUrl, params),
+		isApplyTrainingApi: (params = {}) => vm.$u.get(apiurl.skillTraining.isApplyTrainingUrl + params.id),
+		getMyTrainingListApi: (params = {}) => vm.$u.get(apiurl.skillTraining.getMyTrainingListUrl + params.type, params),
+		getMyTrainingDetailsApi: (params = {}) => vm.$u.get(apiurl.skillTraining.getMyTrainingDetailsUrl + params.id, params),
+		getCertificateListApi: (params = {}) => vm.$u.get(apiurl.skillTraining.getCertificateListUrl + params.id, params),
+		addCertificateApi: (params = {}) => vm.$u.post(apiurl.skillTraining.addCertificateUrl, params),
+		deleteCertificateApi: (params = {}) => vm.$u.delete(apiurl.skillTraining.deleteCertificateUrl + params.id, params)
 	}
 	// 将各个定义的接口名称,统一放进对象挂载到vm.$u.api(因为vm就是this,也即this.$u.api)下
 	vm.$u.api = {
-		test,
 		getPhoneLoginCode,
 		phoneLoginAuth,
 		getSysterms,
-		getIndexBannerList,
-		getIndexNewsList,
 		getNewsDetails,
 		veteEduc,
 		getVeteEducCheck,
@@ -179,12 +214,15 @@ const install = (Vue, vm) => {
 		postSignOffline,
 		getAdaptTrainIdOffline,
 		getIdInfo,
+		getMoreCourseListApi,
 		getSchoolList,
+		indexApi,
+		noticeApi,
 		school,
 		company,
-    policyInfo,
+		policyInfo,
 		delivery,
-    recruitment,
+		recruitment,
 		interview,
 		resume,
 		modifyUserInfo,
@@ -197,4 +235,4 @@ const install = (Vue, vm) => {
 
 export default {
 	install
-}
+}

+ 18 - 0
h5_web/pages.json

@@ -538,6 +538,24 @@
 				"navigationBarTextStyle": "white"
 			}
 
+		}, {
+			"path": "pages/notification/noticeDetails/noticeDetails",
+			"style": {
+				"navigationBarTitleText": "消息详情",
+				"enablePullDownRefresh": false,
+				"navigationBarBackgroundColor": "#3D5D4C",
+				"navigationBarTextStyle": "white"
+			}
+
+		}, {
+			"path": "pages/upgrade/upgradeCourse/upgradeCourse",
+			"style": {
+				"navigationBarTitleText": "学历提升课程",
+				"enablePullDownRefresh": false,
+				"navigationBarBackgroundColor": "#3D5D4C",
+				"navigationBarTextStyle": "white"
+			}
+
 		}
 	],
 	"globalStyle": {

+ 20 - 18
h5_web/pages/bannerDetails/bannerDetails.vue

@@ -22,32 +22,34 @@
 			// 获取详情
 			getDetails(id) {
 				this.$u.api.getIndexBannerList()
-				.then(res=>{
-					if (res.code === 200) {
-						const list = res.data
-						list.forEach(item => {
-							if (item.id == id) {
-								this.dom = item.content
-							}
-						})
-					} else {
+					.then(res => {
+						if (res.code === 200) {
+							const list = res.data
+							list.forEach(item => {
+								if (item.id == id) {
+									this.dom = item.content
+								}
+							})
+						} else {
+							this.$refs.uToast.show({
+								title: res.msg,
+								type: 'error'
+							})
+						}
+					})
+					.catch(err => {
 						this.$refs.uToast.show({
-							title: res.msg,
+							title: '操作失败!',
 							type: 'error'
 						})
-					}
-				})
-				.catch(err => {
-					this.$refs.uToast.show({
-						title: '操作失败!',
-						type: 'error'
 					})
-				})
 			}
 		}
 	}
 </script>
 
 <style>
-page{padding: 24rpx;}
+	page {
+		padding: 24rpx;
+	}
 </style>

+ 186 - 183
h5_web/pages/index/index.vue

@@ -1,242 +1,245 @@
 <template>
 	<view class="index">
-    <!-- <view class="index-head"></view> -->
-    <view class="index-header">
-      <view class="index-header-container">
-        <view class="index-header-left"></view>
-        <view class="index-header-right"></view>
-        <view class="index-header-top">
-          <u-search placeholder="请输入您关键词" v-model="headerTopKeyword" :show-action="false" class="header-top-usearch"></u-search>
-          <view class="header-top-notice" @tap="openPage('pages/notification/notification')" >
-            <u-icon name="bell" color="#FFFFFF" size="48"></u-icon>
-            <u-badge size="mini" type="error" count="7" :absolute="false" class="header-top-notice-badge"></u-badge>
-          </view>
-          <view class="header-top-scan">
-            <u-icon name="scan" color="#FFFFFF" size="48" class="header-scan-icon"></u-icon>
-          </view>
-        </view>
-        <view class="index-header-banner">
-          <u-swiper
-          	:list="bannerList"
-          	name="bannerUrl"
-          	border-radius="0"
-          	mode="round"
-          	height="440"
-          	img-mode="scaleToFill"
-          	@click="swiperClick"
-          ></u-swiper>
-        </view>
-      </view>
-    </view>
-    
+		<view class="index-header">
+			<view class="index-header-container">
+				<view class="index-header-left"></view>
+				<view class="index-header-right"></view>
+				<view class="index-header-top">
+					<u-search placeholder="请输入您关键词" v-model="headerTopKeyword" :show-action="false"
+						class="header-top-usearch"></u-search>
+					<view class="header-top-notice" @tap="openPage('pages/notification/notification')">
+						<u-icon name="bell" color="#FFFFFF" size="48"></u-icon>
+						<u-badge size="mini" type="error" :count="unreadInfoNum" :absolute="false" class="header-top-notice-badge">
+						</u-badge>
+					</view>
+					<view class="header-top-scan">
+						<u-icon name="scan" color="#FFFFFF" size="48" class="header-scan-icon"></u-icon>
+					</view>
+				</view>
+				<view class="index-header-banner">
+					<u-swiper :list="bannerList" name="bannerUrl" border-radius="0" mode="round" height="440"
+						img-mode="scaleToFill" @click="swiperClick" />
+				</view>
+			</view>
+		</view>
+
 		<!-- 滚动通知 -->
 		<view class="notice">
-			<u-notice-bar mode="horizontal" type="none" :list="noticeList" bg-color="#fff" duration="1000"/>
+			<u-notice-bar mode="horizontal" type="none" :list="noticeList" bg-color="#fff" duration="1000" />
 		</view>
-		
+
 		<!-- 宫格 -->
-    <view class="service">
-      <view class="service-body u-flex u-flex-wrap u-row-left">
-        <!-- <view class="service-item" @click="openPage('pages/policyNews/policyNews')"> -->
-        <view class="service-item" @click="openPage('pages/policyInfo/policyInfo')">
-          <image class="service-item-img" src="../../static/img/index-service-01.png" mode="aspectFill"></image>
-          <view class="service-item-text">政策资讯</view>
-        </view>
-        <view class="service-item" @click="openPage('pages/recruitment/recruitment')" >
-          <image class="service-item-img" src="../../static/img/index-service-02.png" mode="aspectFill"></image>
-          <view class="service-item-text">招聘就业</view>
-        </view>
-        <view class="service-item" @click="openPage('pages/cooperativeEnterprise/cooperativeEnterprise')" >
-          <image class="service-item-img" src="../../static/img/index-service-03.png" mode="aspectFill"></image>
-          <view class="service-item-text">合作企业</view>
-        </view>
-        <view class="service-item" @click="openPage('pages/schools/schools')" >
-          <image class="service-item-img" src="../../static/img/index-service-04.png" mode="aspectFill"></image>
-          <view class="service-item-text">合作院校</view>
-        </view>
-        <view class="service-item" @click="openPage('pages/skillsTraining/skillsTraining')" >
-          <image class="service-item-img" src="../../static/img/index-service-05.png" mode="aspectFill"></image>
-          <view class="service-item-text">技能培训</view>
-        </view>
-        <view class="service-item" @click="openPage('pages/basicTraining/basicTraining')" >
-          <image class="service-item-img" src="../../static/img/index-service-06.png" mode="aspectFill"></image>
-          <view class="service-item-text">适应性培训</view>
-        </view>
-        <view class="service-item" @click="openPage('pages/upgrade/upgrade/upgrade')" >
-          <image class="service-item-img" src="../../static/img/index-service-07.png" mode="aspectFill"></image>
-          <view class="service-item-text">学历提升</view>
-        </view>
-        <view class="service-item" @click="openPage('pages/inbuild/inbuild','创业指引')" >
-          <image class="service-item-img" src="../../static/img/index-service-08.png" mode="aspectFill"></image>
-          <view class="service-item-text">创业指导</view>
-        </view>
-      </view>
-    </view>
-    
+		<view class="service">
+			<view class="service-body u-flex u-flex-wrap u-row-left">
+				<!-- <view class="service-item" @click="openPage('pages/policyNews/policyNews')"> -->
+				<view class="service-item" @click="openPage('pages/policyInfo/policyInfo')">
+					<image class="service-item-img" src="../../static/img/index-service-01.png" mode="aspectFill">
+					</image>
+					<view class="service-item-text">政策资讯</view>
+				</view>
+				<view class="service-item" @click="openPage('pages/recruitment/recruitment')">
+					<image class="service-item-img" src="../../static/img/index-service-02.png" mode="aspectFill">
+					</image>
+					<view class="service-item-text">招聘就业</view>
+				</view>
+				<view class="service-item" @click="openPage('pages/cooperativeEnterprise/cooperativeEnterprise')">
+					<image class="service-item-img" src="../../static/img/index-service-03.png" mode="aspectFill">
+					</image>
+					<view class="service-item-text">合作企业</view>
+				</view>
+				<view class="service-item" @click="openPage('pages/schools/schools')">
+					<image class="service-item-img" src="../../static/img/index-service-04.png" mode="aspectFill">
+					</image>
+					<view class="service-item-text">合作院校</view>
+				</view>
+				<view class="service-item" @click="openPage('pages/skillsTraining/skillsTraining')">
+					<image class="service-item-img" src="../../static/img/index-service-05.png" mode="aspectFill">
+					</image>
+					<view class="service-item-text">技能培训</view>
+				</view>
+				<view class="service-item" @click="openPage('pages/basicTraining/basicTraining')">
+					<image class="service-item-img" src="../../static/img/index-service-06.png" mode="aspectFill">
+					</image>
+					<view class="service-item-text">适应性培训</view>
+				</view>
+				<view class="service-item" @click="openPage('pages/upgrade/upgrade/upgrade')">
+					<image class="service-item-img" src="../../static/img/index-service-07.png" mode="aspectFill">
+					</image>
+					<view class="service-item-text">学历提升</view>
+				</view>
+				<view class="service-item" @click="openPage('pages/inbuild/inbuild','创业指引')">
+					<image class="service-item-img" src="../../static/img/index-service-08.png" mode="aspectFill">
+					</image>
+					<view class="service-item-text">创业指导</view>
+				</view>
+			</view>
+		</view>
+
 		<!-- 新闻动态 -->
-    <view class="news">
-      <u-card class="news-list"
-      	:body-style="{'padding-top':0}"
-      	:border="false" 
-      	:foot-border-top="false" 
-        :head-border-bottom="false"
-      	:full="true" 
-        :border-radius="10"
-        margin="0"
-      >
-      	<view class="news-list-head" slot="head">
-      		<view class="news-list-head-item">
-      			<view class="card-head-title">新闻动态</view>
-      			<view @click="openPage('/pages/newsInformation/newsInformation')">更多<u-icon name="arrow-right" color="#A3A3A3"></u-icon></view>
-      		</view>
-      	</view>
-      	<view class="news-list-body" slot="body">
-      		<u-nodata notice="暂无新闻" v-if="newsList.length==0"></u-nodata>
-      		<view
-      			v-for="(item,index) in newsList" 
-      			@click="$u.route('/pages/newsDetails/newsDetails',{artId:item.artId})"
-      			:key="item.artId" 
-      			class="news-list-body-item u-body-item u-flex u-border-bottom u-col-between u-row-between"
-      		>
-      			<view class="news-text">
-      				<view class="news-text-title u-body-item-title u-line-2">{{item.artTitle}}</view>
-      				<view class="news-text-foot foot u-flex u-flex-wrap">
-      					<view>{{item.artCategoryName}}</view>
-      					<view>{{$u.timeFormat(item.createTime.replace(/-/g, '/'), 'mm-dd hh:MM')}}</view>
-      				</view>
-      			</view>
-      			<image :src="item.artImage" mode="aspectFill"></image>
-      		</view>
-      	</view>
-      </u-card>
-    </view>
-    
-    <!-- ########################## -- 底部导航栏 -- ################################ -->
-    <u-tabbar
-      :list="tabbarConfig.tabbarList"
-      :height="tabbarConfig.height"
-      :mid-button="tabbarConfig.midButton"
-      :inactive-color="tabbarConfig.inactiveColor"
-      :active-color="tabbarConfig.activeColor"
-      :mid-button-size="tabbarConfig.midButtonSize"
-    />
+		<view class="news">
+			<u-card class="news-list" :body-style="{'padding-top':0}" :border="false" :foot-border-top="false"
+				:head-border-bottom="false" :full="true" :border-radius="10" margin="0">
+				<view class="news-list-head" slot="head">
+					<view class="news-list-head-item">
+						<view class="card-head-title">新闻动态</view>
+						<view @click="openPage('/pages/newsInformation/newsInformation')">更多<u-icon name="arrow-right"
+								color="#A3A3A3"></u-icon>
+						</view>
+					</view>
+				</view>
+				<view class="news-list-body" slot="body">
+					<u-nodata notice="暂无新闻" v-if="newsList.length==0"></u-nodata>
+					<view v-for="(item,index) in newsList"
+						@click="$u.route('/pages/newsDetails/newsDetails',{artId:item.artId})" :key="item.artId"
+						class="news-list-body-item u-body-item u-flex u-border-bottom u-col-between u-row-between">
+						<view class="news-text">
+							<view class="news-text-title u-body-item-title u-line-2">{{item.artTitle}}</view>
+							<view class="news-text-foot foot u-flex u-flex-wrap">
+								<view>{{item.artCategoryName}}</view>
+								<view>{{$u.timeFormat(item.createTime.replace(/-/g, '/'), 'mm-dd hh:MM')}}</view>
+							</view>
+						</view>
+						<image :src="item.artImage" mode="aspectFill"></image>
+					</view>
+				</view>
+			</u-card>
+		</view>
+
+		<!-- ########################## -- 底部导航栏 -- ################################ -->
+		<u-tabbar :list="tabbarConfig.tabbarList" :height="tabbarConfig.height" :mid-button="tabbarConfig.midButton"
+			:inactive-color="tabbarConfig.inactiveColor" :active-color="tabbarConfig.activeColor"
+			:mid-button-size="tabbarConfig.midButtonSize" />
 	</view>
 </template>
 
 <script>
-  import tabbarconfig from 'tabbarconfig.js';
-  
+	import tabbarconfig from 'tabbarconfig.js';
+
 	export default {
 		data() {
 			return {
-        headerTopKeyword: '',
-				paginationConfig:{
+				unreadInfoNum: 0,
+				headerTopKeyword: '',
+				paginationConfig: {
 					pageNo: 1,
 					pageSize: 10
 				},
 				// 轮播图
 				bannerList: [],
 				// 新闻列表
-				newsList:[],
+				newsList: [],
 				// 消息通知
-				noticeList:['贵州轮胎股份有限公司对您感兴趣,为您提供了职位。' , '您有一个面试邀请', '到你面试了'],
-        tabbarConfig: tabbarconfig
+				noticeList: [],
+				// 自定义tabbar
+				tabbarConfig: tabbarconfig
 			}
 		},
-		onLoad() {
-			// console.log(this.$u.config.v);
-		},
+		onLoad() {},
 		onShow() {
+			this.getUnreadInfoNum();
 			this.getBannerList();
 			this.getNewsList();
+			this.getNewestInfo();
 		},
 		methods: {
-      /**
-       * 打开新页面
-       * @param {String} path 跳转路径
-       * */
-      openPage(path, msg) {
-        let tempRoute = {
-          url: path
-        };
-        if (msg) {
-          tempRoute.params = {
-            msg: msg
-          };
-        }
-        this.$u.route(tempRoute);
-      },
-			getNewsList(){
-				let params ={
+			/**
+			 * 打开新页面
+			 * @param {String} path 跳转路径
+			 * */
+			openPage(path, msg) {
+				let tempRoute = {
+					url: path
+				};
+				if (msg) {
+					tempRoute.params = {
+						msg: msg
+					};
+				}
+				this.$u.route(tempRoute);
+			},
+			/**
+			 * 获取未读消息条数
+			 */
+			getUnreadInfoNum() {
+				this.$u.api.indexApi.getUnreadInfoNumApi().then(res => {
+					if (res.code === 200) {
+						this.unreadInfoNum = res.data;
+					}
+				})
+			},
+			/**
+			 * 获取最新三条信息
+			 */
+			getNewestInfo() {
+				this.$u.api.indexApi.getNewestInfoApi().then(res => {
+					if (res.code === 200) {
+						this.noticeList = res.data.map(item => {
+							return item.name
+						})
+					}
+				})
+			},
+			/**
+			 * 获取新闻列表
+			 */
+			getNewsList() {
+				let params = {
 					// artCategoryId:2,
 					pageNum: 1,
 					pageSize: 10
 				}
-				this.$u.api.getIndexNewsList(params)
-				.then(res=>{
-          if(!res) return;
-					if(res?.code==200){
+				this.$u.api.indexApi.getIndexNewsListApi(params).then(res => {
+					if (!res) return;
+					if (res?.code == 200) {
 						this.newsList = res.rows;
-					}else{
+					} else {
 						uni.showToast({
 							icon: 'none',
 							type: 'error',
-							title:res.msg
+							title: res.msg
 						})
 					}
-					// console.log('newsList',JSON.parse(JSON.stringify(res.rows)));
 				})
 			},
-			getBannerList(){
-				this.$u.api.getIndexBannerList()
-				.then(res=>{
-          if(!res) return;
-					this.bannerList = res?.data || [];
-          this.bannerList = [];
-          this.bannerList.push(
-            {
-              bannerUrl: 'https://img.xiaopiu.com/userImages/img3072177d2e954f8.jpg',
-              content: '<p>代码固定测试内容999998</p>',
-              id: "999998",
-              name: "代码固定测试999998"
-            }
-          );
-          this.bannerList.push(
-            {
-              bannerUrl: 'https://img.xiaopiu.com/userImages/img14661769874c088.jpg',
-              content: '<p>代码固定测试内容999999</p>',
-              id: "999999",
-              name: "代码固定测试999999"
-            }
-          );
+			/**
+			 * 获取轮播广告
+			 */
+			getBannerList() {
+				this.$u.api.indexApi.indexBannerListApi().then(res => {
+					if (res.code === 200) {
+						this.bannerList = res.data.map(item => {
+							return {
+								...item,
+								image: item.bannerUrl,
+								title: item.name
+							}
+						});
+					}
 				})
 			},
-			// 轮播图点击
-			swiperClick (index) {
-				// console.log('swiperClick',index);
-				if(this.bannerList[index].jumpUrl){
+			/**
+			 * 轮播图点击
+			 * @param {Object} index
+			 */
+			swiperClick(index) {
+				if (this.bannerList[index].jumpUrl) {
 					let url = this.bannerList[index].jumpUrl.split('#')[1];
 					this.$u.route({
 						url: url,
 					});
-				}else{
+				} else {
 					this.$u.route({
 						url: 'pages/bannerDetails/bannerDetails',
 						params: {
-						  id: this.bannerList[index].id
+							id: this.bannerList[index].id
 						}
 					})
 				}
-			},
-			noticeClick(e){
-				console.log('e',e)
-				this.openPage('pages/inbuild/inbuild','我的消息')
 			}
-
 		}
 	}
 </script>
 
 <style lang="scss" scoped>
-@import "./index.scss";
+	@import "./index.scss";
 </style>

+ 27 - 18
h5_web/pages/mine/skillsTraining/skillsTraining.vue

@@ -13,21 +13,21 @@
 			
 			<!-- 列表 -->
 			<view class="training-list">
-				<view class="training-list-item" v-for="(item, index) in trainingList" :key="index" @click="jumpPage('/pages/mine/skillsTraining/skillsTrainingDetails/skillsTrainingDetails')">
+				<view class="training-list-item" v-for="(item, index) in trainingList" :key="index" @click="jumpPage('/pages/mine/skillsTraining/skillsTrainingDetails/skillsTrainingDetails', { id: item.id })">
 					<view class="left">
 						<u-image :src="item.img" mode="aspectFill" width="204" height="220" border-radius="10"></u-image>
 					</view>
 					<view class="right">
 						<view class="name">{{ item.name }}</view>
-						<view class="school">培训学校:{{ item.school }}</view>
+						<view class="school">培训学校:{{ item.schoolName }}</view>
 						<view class="flex">
 							<view class="rate">
-								难度<u-rate :count="5" v-model="item.rate" inactive-color="#EF651F" active-color="#EF651F" disabled size="24" gutter="6"></u-rate>
+								难度<u-rate :count="5" v-model="item.difficult" inactive-color="#EF651F" active-color="#EF651F" disabled size="24" gutter="6"></u-rate>
 							</view>
-							<view>报名人数:{{ item.people }}</view>
+							<!-- <view>报名人数:{{ item.people }}</view> -->
 						</view>
-						<view>开始时间:{{ item.startDate }}</view>
-						<view>培训周期:{{ item.long }}个月</view>
+						<view>开始时间:{{ item.applyTime }}</view>
+						<view>培训周期:{{ item.cycle }}个月</view>
 					</view>
 				</view>
 			</view>
@@ -40,9 +40,10 @@
 		data() {
 			return {
 				current: 0,
+				
 				tabList: [
 					{ value: 1, name: '培训中' },
-					{ value: 2, name: '已报名' }
+					{ value: 0, name: '已报名' }
 				],
 				trainingList: []
 			}
@@ -54,6 +55,7 @@
 			 */
 			tabChange(cur) {
 				this.current = cur
+				this.getList(1, 10, this.tabList[cur].value);
 			},
 			/**
 			 * 下拉分页组件触发
@@ -61,18 +63,25 @@
 			 * @param {Number} pageSize
 			 */
 			queryList(pageNum, pageSize) {
-				this.$refs.paging.complete([
-					{
-						id: 1,
-						img: 'http://img.mp.itc.cn/upload/20161115/15c7309f1a074a08a2b9630651720c27_th.jpg',
-						name: '汽车检测与维修培训',
-						school: '贵州工业职业技术学院',
-						people: '10/30',
-						startDate: '2021.10.02',
-						long: 3,
-						rate: 3
+				this.getList(pageNum, pageSize, this.tabList[this.current].value);
+			},
+			/**
+			 * 获取列表
+			 * @param {Object} pageNum
+			 * @param {Object} pageSize
+			 */
+			getList(pageNum, pageSize, type) {
+				this.$u.api.skillTraining.getMyTrainingListApi({ pageNum, pageSize, type }).then(res => {
+					if (res.code === 200) {
+						this.$refs.paging.complete(res.rows);
+					} else {
+						this.$refs.paging.complete([]);
+						this.$refs.uToast.show({
+							title: res.msg,
+							type: 'error'
+						})
 					}
-				])
+				})
 			},
 			/**
 			 * @param {Object} url

+ 7 - 4
h5_web/pages/mine/skillsTraining/skillsTrainingDetails/skillsTrainingDetails.scss

@@ -71,10 +71,10 @@ page {
 						margin-right: 20rpx;
 					}
 					.professional {
-						width: 70%;
-						overflow: hidden;
-						text-overflow: ellipsis;
-						white-space: nowrap;
+						// width: 70%;
+						// overflow: hidden;
+						// text-overflow: ellipsis;
+						// white-space: nowrap;
 					}
 				}
 				.class {
@@ -191,4 +191,7 @@ page {
 			}
 		}
 	}
+}
+.no-data {
+	padding: 60rpx 0;
 }

+ 51 - 28
h5_web/pages/mine/skillsTraining/skillsTrainingDetails/skillsTrainingDetails.vue

@@ -10,20 +10,20 @@
 		<view class="details-content">
 			<view class="details-content-title">
 				<view class="left">
-					<u-image src="https://img.redocn.com/sheying/20141029/changluqiuye_3346993.jpg" width="204"
+					<u-image :src="details.img" width="204"
 						height="220" border-radius="10"></u-image>
-					<view class="left-weekly">培训周期:2个月</view>
+					<view class="left-weekly">培训周期:{{ details.cycle }}个月</view>
 				</view>
 				<view class="right">
 					<view class="name">
-						<view class="tip">汽修</view>
-						<view class="professional">汽车检测与维修培训</view>
+						<!-- <view class="tip">汽修</view> -->
+						<view class="professional">{{ details.name }}</view>
 					</view>
-					<view class="class"><text>汽车检测与维修班</text>2021.10.20</view>
-					<view>培训学校:贵州工业职业技术学院</view>
-					<view>培训导师:张子瑜</view>
+					<view class="class" v-if="details.className"><text>{{ details.className }}</text>{{ details.openingTime }}</view>
+					<view>培训学校:{{ details.schoolName }}</view>
+					<view>培训导师:{{ details.teacherName }}</view>
 					<view class="hardly">
-						难度<u-rate :count="5" v-model="details.star" size="24" active-color="#EF651F"
+						难度<u-rate :count="5" v-model="details.difficult" size="24" active-color="#EF651F"
 							inactive-color="#EF651F" disabled></u-rate>
 						报名人数:10/20
 					</view>
@@ -31,7 +31,7 @@
 			</view>
 			<view class="details-content-course">
 				<view class="details-content-course-btn">
-					<view class="item" @click="jumpPage('/pages/skillsTraining/achievementCertificate/achievementCertificate')">
+					<view class="item" @click="jumpPage('/pages/skillsTraining/achievementCertificate/achievementCertificate', { id: details.id })">
 						<view>
 							<u-image src="../../../../static/img/certificate-icon.png" mode="aspectFill" width="40" height="50"></u-image>
 						</view>
@@ -51,9 +51,9 @@
 					</view>
 				</view>
 				<view class="details-content-course-progress">
-					<view class="title">总学习进度 (62%)</view>
+					<view class="title">总学习进度 ({{ details.finishPercent || 0 }}%)</view>
 					<view>
-						<u-line-progress active-color="#709078" inactive-color="#ECECEC" :percent="70" height="18" :show-percent="false"></u-line-progress>
+						<u-line-progress active-color="#709078" inactive-color="#ECECEC" :percent="details.finishPercent || 0" height="18" :show-percent="false"></u-line-progress>
 					</view>
 				</view>
 				<view class="details-content-course-tab">
@@ -62,23 +62,26 @@
 				</view>
 				<!-- 线上课程 -->
 				<view class="details-content-course-online" v-if="tabCur === 1">
-					<view class="online-list">
-						<view class="online-list-item" v-for="(item, index) in onlineList" :key="index" @click="jumpPage('pages/skillsTraining/courseDetailed/courseDetailed')">
+					<view class="online-list" v-if="details.onLineCourselist && details.onLineCourselist.length">
+						<view class="online-list-item" v-for="(item, index) in details.onLineCourselist" :key="index" @click="jumpPage('pages/skillsTraining/courseDetailed/courseDetailed', { id: item.id })">
 							<view class="left">
 								<u-image :src="item.img" mode="aspectFill" width="204" height="132" border-radius="10"></u-image>
 							</view>
 							<view class="right">
 								<view>{{ item.name }}</view>
-								<view>{{` 共${item.count}课,已学完${item.finish},学习进度${item.pecent}% `}}</view>
+								<view>{{` 共${item.amount}课,已学完${item.finishCount},学习进度${item.finishPercent}% `}}</view>
 							</view>
 						</view>
 					</view>
+					<view class="no-data" v-else>
+						<u-empty text="暂无线上课程" mode="list"></u-empty>
+					</view>
 				</view>
 				<!-- 线下课程 -->
 				<view class="details-content-course-offline" v-if="tabCur === 2">
-					<view class="notice">请于2021.10.12 9:00到贵州职业技术学院参加汽修车检线下实训</view>
-					<view class="offline-list">
-						<view class="offline-list-item" v-for="(item, index) in offlineList" :key="index">
+					<!-- <view class="notice">请于2021.10.12 9:00到贵州职业技术学院参加汽修车检线下实训</view> -->
+					<view class="offline-list" v-if="details.offLineCourselist && details.offLineCourselist.length">
+						<view class="offline-list-item" v-for="(item, index) in details.offLineCourselist" :key="index">
 							<view class="left">
 								<u-image :src="item.img" mode="aspectFill" width="204" height="132" border-radius="10"></u-image>
 							</view>
@@ -89,9 +92,13 @@
 							</view>
 						</view>
 					</view>
+					<view class="no-data" v-else>
+						<u-empty text="暂无线下课程" mode="list"></u-empty>
+					</view>
 				</view>
 			</view>
 		</view>
+		<u-toast ref="uToast" />
 	</view>
 </template>
 
@@ -99,21 +106,37 @@
 	export default {
 		data() {
 			return {
-				details: {
-					star: 4
-				},
-				onlineList: [
-					{ img: 'https://file02.16sucai.com/d/file/2014/0427/071875652097059bbbffe106f9ce3a93.jpg', name: '汽车检测与维修培训', count: 3, finish: 2, pecent: 66 },
-					{ img: 'https://file02.16sucai.com/d/file/2014/0427/071875652097059bbbffe106f9ce3a93.jpg', name: '汽车检测与维修培训', count: 3, finish: 2, pecent: 66 }
-				],
-				offlineList: [
-					{ img: 'https://file02.16sucai.com/d/file/2014/0427/071875652097059bbbffe106f9ce3a93.jpg', name: '汽车检测与维修培训', date: '2021.10.02 09:20', address: '贵州工业职业技术学院实训室' },
-					{ img: 'https://file02.16sucai.com/d/file/2014/0427/071875652097059bbbffe106f9ce3a93.jpg', name: '汽车检测与维修培训', date: '2021.10.02 09:20', address: '贵州工业职业技术学院实训室' }
-				],
+				id: '',
+				details: {},
+				onlineList: [],
 				tabCur: 1
 			}
 		},
+		onLoad(page) {
+			if (page.id) {
+				this.id = page.id
+			}
+		},
+		onShow() {
+			this.getDetails(this.id);
+		},
 		methods: {
+			/**
+			 * 获取我的技能培训详情
+			 * @param {Object} id
+			 */
+			getDetails(id) {
+				this.$u.api.skillTraining.getMyTrainingDetailsApi({ id }).then(res => {
+					if (res.code === 200) {
+						this.details = res.data
+					} else {
+						this.$refs.uToast.show({
+							title: res.msg,
+							type: 'error'
+						})
+					}
+				})
+			},
 			/**
 			 * 跳转到指定页面
 			 * @param {Object} url

+ 1 - 2
h5_web/pages/newsDetails/newsDetails.vue

@@ -32,8 +32,7 @@
 		methods:{
 			// 获取详情
 			getDetails(id) {
-				this.$u.api.getNewsDetails({ id: id })
-				.then(res=>{
+				this.$u.api.getNewsDetails({ id }).then(res=>{
 					if (res.code === 200) {
 						this.newsInfo = res.data
 					} else {

+ 1 - 1
h5_web/pages/newsInformation/newsInformation.vue

@@ -38,7 +38,7 @@
 			 * 获取新闻列表
 			 */
 			getList(pageNum, pageSize) {
-				this.$u.api.getIndexNewsList({
+				this.$u.api.indexApi.getIndexNewsListApi({
 					pageNum: pageNum,
 					pageSize: pageSize,
 					artCategoryId: 2

+ 82 - 0
h5_web/pages/notification/noticeDetails/noticeDetails.vue

@@ -0,0 +1,82 @@
+<!-- 消息详情 -->
+<template>
+	<view class="news-details">
+		<view class="news-details-header">
+			<view class="news-details-header-title">{{ info.name }}</view>
+			<view class="news-details-header-subtitle">
+				<view v-if="info.createBy">来源:{{ info.createBy }}</view>
+				<view>{{ info.releasTime }}</view>
+			</view>
+		</view>
+		<view class="news-details-content">
+			<u-parse :html="info.content"></u-parse>
+		</view>
+		<u-toast ref="uToast" />
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				info: ''
+			}
+		},
+		onLoad(page){
+			if (page.id) {
+				this.getDetails(page.id)
+			}
+		},
+		onShow(){
+			
+		},
+		methods:{
+			// 获取详情
+			getDetails(id) {
+				this.$u.api.noticeApi.getNoticeDetailsApi({ id }).then(res=>{
+					if (res.code === 200) {
+						this.info = res.data
+					} else {
+						this.$refs.uToast.show({
+							title: res.msg,
+							type: 'error'
+						})
+					}
+				})
+				.catch(err => {
+					this.$refs.uToast.show({
+						title: '操作失败!',
+						type: 'error'
+					})
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.news-details {
+		padding: 30rpx 44rpx;
+		font-family: 'PingFangSC-Regular, PingFang SC';
+		&-header {
+			border-bottom: solid 1px #DBDBDB;
+			padding-bottom: 22rpx;
+			&-title {
+				color: #000;
+				font-size: 36rpx;
+			}
+			&-subtitle {
+				margin-top: 20rpx;
+				display: flex;
+				justify-content: space-between;
+				color: #6F6F6F;
+				font-size: 24rpx;
+			}
+		}
+		&-content {
+			padding: 18rpx 0;
+			line-height: 50rpx;
+		}
+	}
+</style>
+

+ 55 - 25
h5_web/pages/notification/notification.vue

@@ -12,12 +12,12 @@
 			</view>
 			
 			<view class="notice-list">
-				<view class="notice-list-item" v-for="(item, index) in noticeList" :key="index">
-					<view class="notice-list-item-title">{{ item.title }}</view>
+				<view class="notice-list-item" v-for="(item, index) in noticeList" :key="index" @click="jumpPage('/pages/notification/noticeDetails/noticeDetails', { id: item.id })">
+					<view class="notice-list-item-title">{{ item.name }}</view>
 					<view class="notice-list-item-content">{{ item.content }}</view>
 					<view class="notice-list-item-bottom">
-						<view>发布于{{ item.createTime }}</view>
-						<view class="is-read" v-if="item.status === 1">已读</view>
+						<view>发布于{{ item.releasTime }}</view>
+						<view class="is-read" v-if="item.isRead == 1">已读</view>
 						<view class="no-read" v-else>未读</view>
 					</view>
 				</view>
@@ -32,16 +32,49 @@
 			return {
 				current: 0,
 				tabList: [
-					{ value: 1, name: '培训通知', count: 10 },
-					{ value: 2, name: '就业消息', count: 0 },
-					{ value: 3, name: '系统通知', count: 100 }
+					{ value: 2, name: '培训通知', count: 0 },
+					{ value: 3, name: '就业消息', count: 0 },
+					{ value: 0, name: '系统通知', count: 0 }
 				],
+				tabValue: 2,
+				pageNum: 1, 
+				pageSize: 5,
 				noticeList: []
 			}
 		},
+		onShow() {
+			this.getClassifyUnreadNum();
+			this.getNoticeListByType(this.pageNum, this.pageSize)
+		},
 		methods: {
-			getList() {
-				
+			/**
+			 * 查询每类通知未读的条数
+			 */
+			getClassifyUnreadNum() {
+				this.$u.api.noticeApi.getClassifyUnreadNumApi().then(res => {
+					if (res.code === 200) {
+						this.tabList[0].count = res.data.trainUnreadCount
+						this.tabList[1].count = res.data.empUnreadCount
+						this.tabList[2].count = res.data.sysUnreadCount
+					}
+				})
+			},
+			/**
+			 * 获取
+			 * @param {Object} pageNum
+			 * @param {Object} pageSize
+			 */
+			getNoticeListByType(pageNum, pageSize) {
+				const params = {
+					type: this.tabValue,
+					pageNum,
+					pageSize
+				}
+				this.$u.api.noticeApi.getNoticeListByTypeApi(params).then(res => {
+					if (res.code === 200) {
+						this.$refs.paging.complete(res.rows);
+					}
+				})
 			},
 			/**
 			 * tab切换
@@ -49,6 +82,8 @@
 			 */
 			tabChange(cur) {
 				this.current = cur
+				this.tabValue = this.tabList[cur].value;
+				this.getNoticeListByType(1, 5);
 			},
 			/**
 			 * 下拉分页组件触发
@@ -56,22 +91,17 @@
 			 * @param {Number} pageSize
 			 */
 			queryList(pageNum, pageSize) {
-				this.$refs.paging.complete([
-					{
-					  id: 1,
-					  title: '请问针对退役军人就业有哪些什么政策',
-					  content: '退役军人就业政策,每个地方的规定不一样,但都会按照相关规定实行阳光安置,根据退役军人相关条件和考试成绩进行选择安置。',
-					  createTime: '发布于2021.09.23 12:31',
-					  status: 1
-					},
-					{
-					  id: 2,
-					  title: '请问针对退役军人就业有哪些什么政策',
-					  content: '退役军人就业政策,每个地方的规定不一样,但都会按照相关规定实行阳光安置,根据退役军人相关条件和考试成绩进行选择安置。',
-					  createTime: '发布于2021.09.23 12:31',
-					  status: 0
-					}
-				])
+				this.pageNum = pageNum
+				this.pageSize = pageSize
+				this.getNoticeListByType(pageNum, pageSize);
+			},
+			/**
+			 * 跳转到指定页面
+			 * @param {Object} url
+			 * @param {Object} params
+			 */
+			jumpPage(url, params) {
+				this.$u.route({ url, params })
 			}
 		}
 	}

+ 3 - 0
h5_web/pages/notification/scss/notification.scss

@@ -26,6 +26,9 @@ page {
 				color: #545454;
 				line-height: 38rpx;
 				margin-bottom: 14rpx;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				white-space: nowrap;
 			}
 			
 			&-bottom {

+ 6 - 0
h5_web/pages/skillsTraining/achievementCertificate/achievementCertificate.scss

@@ -61,3 +61,9 @@
 		}
 	}
 }
+.view {
+	width: 600rpx;
+	height: 340rpx;
+	padding: 20rpx;
+	background-color: #fff;
+}

+ 85 - 19
h5_web/pages/skillsTraining/achievementCertificate/achievementCertificate.vue

@@ -3,34 +3,42 @@
 	<view class="achievement">
 		<!-- 导航栏 -->
 		<u-navbar back-icon-color="#fff" title="成绩与证书" title-color="#fff" :background="{ backgroundColor: '#3D5D4C' }">
-			<view class="navbar-right" slot="right" @click="jumpPage('/pages/skillsTraining/addAchievementCertificate/addAchievementCertificate')">
+			<view class="navbar-right" slot="right"
+				@click="jumpPage('/pages/skillsTraining/addAchievementCertificate/addAchievementCertificate', { id })">
 				<u-icon name="plus" color="#fff"></u-icon>
 				<text>录入</text>
 			</view>
 		</u-navbar>
 		<!-- 证书列表 -->
 		<view class="achievement-content">
-			<view class="achievement-content-list">
-				<view class="achievement-content-list-item" v-for="(item, index) in certificateList" :key="index" :class="index % 2 === 0 ? 'bg1' : 'bg2'" @click="jumpPage('pages/skillsTraining/certificateDetails/certificateDetails', { id: item.id })">
+			<view class="achievement-content-list" v-if="certificateList.length">
+				<view class="achievement-content-list-item" v-for="(item, index) in certificateList" :key="index"
+					:class="index % 2 === 0 ? 'bg1' : 'bg2'"
+					@click="viewItem(item)">
 					<view class="title">
-						<view>{{ item.name }}</view>
-						<view class="delete-btn" @click="deleteItem(item)">删除</view>
+						<view>{{ item.examName }}</view>
+						<view class="delete-btn" @click.stop="deleteItem(item)">删除</view>
 					</view>
 					<view class="result">
-						成绩 <text>{{ item.achievement }}分</text>(满分{{ item.total }}分)
+						成绩 <text>{{ item.score }}分</text>(满分{{ item.fullScore }}分)
 					</view>
 					<view class="time">
-						通过时间:{{ item.passTime }}
+						通过时间:{{ item.passDate }}
 					</view>
 					<view class="con">
-						{{ item.getCon }}
+						证书名称:{{ item.certificateName }}
 					</view>
 				</view>
 			</view>
+			<view v-else>
+				<u-empty text="暂无证书" mode="list" margin-top="300"></u-empty>
+			</view>
 		</view>
-		
+
 		<!-- 删除提示弹框 -->
-		<u-modal v-model="deleteTips" content="您确认要删除该证书吗?" :show-cancel-button="true" @confirm="deleteConfirm"></u-modal>
+		<u-modal v-model="deleteTips" content="您确认要删除该证书吗?" :show-cancel-button="true" @confirm="deleteConfirm">
+		</u-modal>
+		<u-toast ref="uToast" />
 	</view>
 </template>
 
@@ -38,28 +46,83 @@
 	export default {
 		data() {
 			return {
-				certificateList: [
-					{ id: 1, name: '国家计算机二级考试', achievement: 99, total: 100, passTime: '2021-10-12', getCon: '获得证书:国家计算机二级考试' },
-					{ id: 3, name: '国家高新技术普及考试', achievement: 80, total: 100, passTime: '2021-11-12', getCon: '获得证书:国家高新技术普及考试' },
-					{ id: 2, name: '国家计算机二级考试', achievement: 79, total: 100, passTime: '2021-12-12', getCon: '获得证书:国家计算机二级考试' },
-					{ id: 4, name: '国家计算机二级考试', achievement: 89, total: 100, passTime: '2022-10-12', getCon: '获得证书:国家计算机二级考试' }
-				],
-				deleteTips: false
+				id: '',
+				certificateList: [],
+				deleteTips: false,
+				curItem: ''
+			}
+		},
+		onLoad(page) {
+			if (page.id) {
+				this.id = page.id;
+			}
+		},
+		onShow() {
+			if (this.id) {
+				this.getCertificateList(this.id);
 			}
 		},
 		methods: {
+			/**
+			 * 获取证书列表
+			 */
+			getCertificateList(id) {
+				this.$u.api.skillTraining.getCertificateListApi({
+					id
+				}).then(res => {
+					if (res.code === 200) {
+						this.certificateList = res.data;
+					} else {
+						this.$refs.uToast.show({
+							title: res.msg,
+							type: 'error'
+						})
+					}
+				})
+			},
 			/**
 			 * 删除证书
 			 * @param {Object} item
 			 */
 			deleteItem(item) {
-				this.deleteTips = true
+				this.deleteTips = true;
+				this.curItem = item;
+			},
+			viewItem(item) {
+				if (item.imgUrl) {
+					uni.previewImage({
+						current: 0,
+						urls: item.imgUrl.split(','),
+						indicator: 'number'
+					})
+				} else {
+					this.$refs.uToast.show({
+						title: '该证书无相片!',
+						type: 'info'
+					})
+				}
 			},
 			/**
 			 * 删除确认
 			 */
 			deleteConfirm() {
 				this.deleteTips = false
+				this.$u.api.skillTraining.deleteCertificateApi({
+					id: this.curItem.id
+				}).then(res => {
+					if (res.code === 200) {
+						this.$refs.uToast.show({
+							title: '删除成功!',
+							type: 'success'
+						})
+						this.getCertificateList(this.id);
+					} else {
+						this.$refs.uToast.show({
+							title: res.msg,
+							type: 'error'
+						})
+					}
+				})
 			},
 			/**
 			 * 跳转到指定页面
@@ -67,7 +130,10 @@
 			 * @param {Object} params
 			 */
 			jumpPage(url, params) {
-				this.$u.route({url, params});
+				this.$u.route({
+					url,
+					params
+				});
 			}
 		}
 	}

+ 14 - 8
h5_web/pages/skillsTraining/addAchievementCertificate/addAchievementCertificate.scss

@@ -37,14 +37,20 @@
 	}
 	
 	&-submit {
-		width: calc(100% - 60rpx);
-		height: 80rpx;
-		line-height: 80rpx;
-		text-align: center;
-		background-color: #709078;
-		color: #fff;
-		font-size: 30rpx;
+		width: 100%;
+		height: 144rpx;
 		position: fixed;
-		bottom: 64rpx;
+		bottom: 0;
+		z-index: 1000;
+		background-color: #fff;
+		&-btn {
+			width: calc(100% - 60rpx);
+			height: 80rpx;
+			line-height: 80rpx;
+			text-align: center;
+			background-color: #709078;
+			color: #fff;
+			font-size: 30rpx;
+		}
 	}
 }

+ 87 - 12
h5_web/pages/skillsTraining/addAchievementCertificate/addAchievementCertificate.vue

@@ -2,25 +2,25 @@
 <template>
 	<view class="achievement" id="achievement">
 		<u-form :model="form" ref="uForm" class="achievement-form">
-			<u-form-item label="考试名称:" label-position="top" :required="true">
-				<u-input v-model="form.teamName" placeholder="请输入内容" />
+			<u-form-item label="考试名称:" label-position="top" :required="true" prop="examName">
+				<u-input v-model="form.examName" placeholder="请输入内容" />
 			</u-form-item>
 			<u-form-item label="成绩:" label-position="top" :required="true">
 				<view class="achievement-form-result">
-					<u-form-item label="得分" label-width="70" class="item" :border-bottom="false">
+					<u-form-item label="得分" label-width="70" class="item" :border-bottom="false" prop="score">
 						<u-input v-model="form.score" border type="number" placeholder="得分" />
 					</u-form-item>
-					<u-form-item label="满分" label-width="70" class="item" :border-bottom="false">
+					<u-form-item label="满分" label-width="70" class="item" :border-bottom="false" prop="fullScore">
 						<u-input v-model="form.fullScore" border type="number" placeholder="满分" />
 					</u-form-item>
 				</view>
 			</u-form-item>
-			<u-form-item label="通过日期:" label-position="top" :required="true">
-				<u-input v-model="form.passedDate" placeholder="选择通过日期" type="select" @click="dateShow = true" border />
+			<u-form-item label="通过日期:" label-position="top" :required="true" prop="passDate">
+				<u-input v-model="form.passDate" placeholder="选择通过日期" type="select" @click="dateShow = true" border />
 			</u-form-item>
 			<u-form-item label="上传证书:" label-position="top" :border-bottom="false">
 				<u-form-item label="证书名称" label-width="140" :border-bottom="false">
-					<u-input v-model="form.certName" placeholder="请输入内容" border />
+					<u-input v-model="form.certificateName" placeholder="请输入内容" border />
 				</u-form-item>
 				<u-form-item label="证书相片" label-width="140" :border-bottom="false">
 					<u-upload :action="upload.action" :custom-btn="true" :limitType="['png', 'jpg']" :max-count="2" @on-success="uploadSuccess" @on-remove="uploadRemove">
@@ -36,7 +36,9 @@
 				</u-form-item>
 			</u-form-item>
 		</u-form>
-		<view class="achievement-submit">提交</view>
+		<view class="achievement-submit">
+			<view class="achievement-submit-btn" @click="submit">提交</view>
+		</view>
 		<u-calendar v-model="dateShow" mode="date" @change="dateChange"></u-calendar>
 		<u-toast ref="uToast" />
 	</view>
@@ -47,26 +49,67 @@
 		data() {
 			return {
 				form: {
-					teamName: '',
+					skillTrainId: '',
+					examName: '',
 					score: '',
 					fullScore: '',
-					passedDate: '',
-					certName: '',
+					passDate: '',
+					certificateName: '',
+					imgUrl: '',
 					picList: []
 				},
+				rules: {
+					examName: [
+						{ 
+							required: true, 
+							message: '请输入考试名称', 
+							// 可以单个或者同时写两个触发验证方式 
+							trigger: ['change','blur'],
+						}
+					],
+					score: [
+						{
+							required: true, 
+							message: '请输入得分', 
+							// 可以单个或者同时写两个触发验证方式 
+							trigger: ['change','blur'],
+						}
+					],
+					fullScore: [
+						{
+							required: true, 
+							message: '请输入满分', 
+							// 可以单个或者同时写两个触发验证方式 
+							trigger: ['change','blur'],
+						}
+					],
+					passDate: [
+						{
+							required: true, 
+							message: '请选择通过日期', 
+							// 可以单个或者同时写两个触发验证方式 
+							trigger: ['change','blur'],
+						}
+					]
+				},
 				dateShow: false,
 				upload: {
 					action: this.config.uploadUrl
 				}
 			}
 		},
+		onLoad(page) {
+			if (page.id) {
+				this.form.skillTrainId = page.id
+			}
+		},
 		methods: {
 			/**
 			 * 日历选择器选中触发
 			 * @param {Object} e
 			 */
 			dateChange(e) {
-				this.form.passedDate = e.result;
+				this.form.passDate = e.result;
 			},
 			/**
 			 * 图片上传成功触发
@@ -88,7 +131,39 @@
 			 */
 			uploadRemove(index) {
 				this.form.picList.splice(index, 1)
+			},
+			/**
+			 * 提交
+			 */
+			submit() {
+				this.$refs.uForm.validate(valid => {
+					if (valid) {
+						const form = {
+							...this.form
+						}
+						form.imgUrl = form.picList.join(',');
+						delete form.picList;
+						this.$u.api.skillTraining.addCertificateApi(form).then(res => {
+							console.log(res)
+							if (res.code === 200) {
+								this.$refs.uToast.show({
+									title: '录入成功!',
+									type: 'success',
+									back: true
+								})
+							} else {
+								this.$refs.uToast.show({
+									title: res.msg,
+									type: 'error'
+								})
+							}
+						})
+					}
+				})
 			}
+		},
+		onReady() {
+			this.$refs.uForm.setRules(this.rules);
 		}
 	}
 </script>

+ 38 - 26
h5_web/pages/skillsTraining/registrationNotice/registrationNotice.vue

@@ -13,13 +13,14 @@
 					</view>
 					<view class="right">
 						<view class="name">{{ item.name }}</view>
-						<view class="school">{{ item.school }}</view>
-						<view class="content">{{ item.content }}</view>
-						<view class="button" :class="{'end': item.status === 1}">{{ item.status === 1 ? '结束' : '报名' }}</view>
+						<view class="school">{{ item.schoolName }}</view>
+						<view class="content">{{ item.description }}</view>
+						<view class="button" @click="signUp(item)">报名</view>
 					</view>
 				</view>
 			</view>
 		</z-paging>
+		<u-toast ref="uToast" />
 	</view>
 </template>
 
@@ -37,30 +38,41 @@
 			 * @param {Number} pageSize
 			 */
 			queryList(pageNum, pageSize) {
-				this.$refs.paging.complete([
-					{
-						id: 1,
-						img: 'http://www.gzlis.edu.cn/uploadfile/201906/20190605152111236.jpg',
-						name: '厨师培训',
-						school: '贵州装备制造职业学院',
-						content: '核心课程汽车构造让知及汽保工具规核心课程汽车构造让知及汽保工具规核心课程汽车构造让知及汽保工具规核心课程汽车构造让知及汽保工具规'
-					},
-					{
-						id: 2,
-						img: 'http://www.gzlis.edu.cn/uploadfile/201906/20190605152111236.jpg',
-						name: '厨师培训',
-						school: '贵州装备制造职业学院',
-						content: '核心课程汽车构造让知及汽保工具规核心课程汽车构造让知及汽保工具规核心课程汽车构造让知及汽保工具规核心课程汽车构造让知及汽保工具规',
-						status: 1
-					},
-					{
-						id: 3,
-						img: 'http://www.gzlis.edu.cn/uploadfile/201906/20190605152111236.jpg',
-						name: '厨师培训',
-						school: '贵州装备制造职业学院',
-						content: '核心课程汽车构造让知及汽保工具规核心课程汽车构造让知及汽保工具规核心课程汽车构造让知及汽保工具规核心课程汽车构造让知及汽保工具规'
+				this.getList(pageNum, pageSize)
+			},
+			/**
+			 * 获取列表
+			 * @param {Object} pageNum
+			 * @param {Object} pageSize
+			 */
+			getList(pageNum, pageSize) {
+				this.$u.api.skillTraining.getClassNoticeApi({ pageNum, pageSize }).then(res => {
+					if (res.code === 200) {
+						this.$refs.paging.complete(res.rows)
+					} else {
+						this.$refs.paging.complete([]);
+						this.$refs.uToast.show({
+							title: res.msg,
+							type: 'error'
+						})
+					}
+				})
+			},
+			/**
+			 * 报名
+			 * @param {Object} item
+			 */
+			signUp(item) {
+				this.$u.api.skillTraining.signUpClassApi({ packageId: item.id }).then(res => {
+					if (res.code === 200) {
+						this.jumpPage('/pages/skillsTraining/submitSuccess/submitSuccess');
+					} else {
+						this.$refs.uToast.show({
+							title: res.msg,
+							type: 'error'
+						})
 					}
-				])
+				})
 			}
 		}
 	}

+ 8 - 5
h5_web/pages/skillsTraining/skillsPackage/skillsPackage.scss

@@ -51,6 +51,7 @@ page {
 				}
 			}
 			.right {
+				width: calc(100% - 226rpx);
 				font-size: 24rpx;
 				color: #A2A2A2;
 				line-height: 40rpx;
@@ -71,10 +72,10 @@ page {
 						margin-right: 20rpx;
 					}
 					.professional {
-						width: 70%;
-						overflow: hidden;
-						text-overflow: ellipsis;
-						white-space: nowrap;
+						// width: 70%;
+						// overflow: hidden;
+						// text-overflow: ellipsis;
+						// white-space: nowrap;
 					}
 				}
 				.class {
@@ -85,7 +86,9 @@ page {
 					}
 				}
 				.hardly {
-					margin: 10rpx 0;
+					margin: 6rpx 0;
+					display: flex;
+					justify-content: space-between;
 				}
 				.status {
 					width: 100%;

+ 71 - 44
h5_web/pages/skillsTraining/skillsPackage/skillsPackage.vue

@@ -13,24 +13,27 @@
 
 			<view class="package-content-title">
 				<view class="left">
-					<u-image src="https://img.redocn.com/sheying/20141029/changluqiuye_3346993.jpg" width="204"
+					<u-image :src="details.img" width="204"
 						height="220" border-radius="10"></u-image>
-					<view class="left-weekly">培训周期:2个月</view>
+					<view class="left-weekly">培训周期:{{ details.cycle }}个月</view>
 				</view>
 				<view class="right">
 					<view class="name">
-						<view class="tip">汽修</view>
-						<view class="professional">汽车检测与维修培训</view>
+						<view class="professional">{{ details.name }}</view>
 					</view>
-					<view class="class"><text>汽车检测与维修班</text>2021.10.20</view>
-					<view>培训学校:贵州工业职业技术学院</view>
-					<view>培训导师:张子瑜</view>
+					<view class="hardly">培训学校:{{ details.schoolName }}</view>
+					<view class="hardly">培训导师:{{ details.teacherName }}</view>
 					<view class="hardly">
-						难度<u-rate :count="5" v-model="details.star" size="24" active-color="#EF651F"
-							inactive-color="#EF651F"></u-rate>
-						报名人数:10/20
+						<view>
+							难度<u-rate :count="5" v-model="details.difficult" size="24" disabled="" active-color="#EF651F"
+								inactive-color="#EF651F"></u-rate>
+						</view>
 					</view>
-					<view class="status">未开班</view>
+					<view class="hardly">
+						<view>报名人数:{{ details.applyCount }}</view>
+						<view>开班数:{{ details.classCount }}</view>
+					</view>
+					<view class="status">{{ details.statusStr }}</view>
 				</view>
 			</view>
 
@@ -41,19 +44,20 @@
 						<view>
 							<text>精选课程</text>精彩教学视频
 						</view>
-						<view @click="jumpPage('/pages/skillsTraining/skillsTrainingCourse/skillsTrainingCourse')">更多
+						<view @click="jumpPage('/pages/skillsTraining/skillsTrainingCourse/skillsTrainingCourse', { id: packageId })">更多
 							<u-icon name="arrow-right" color="#9D9D9D"></u-icon>
 						</view>
 					</view>
 					<view class="list">
-						<swiper class="swiper" :indicator-dots="false" :autoplay="false" height="196rpx">
-							<swiper-item class="swiper-item" v-for="(item, index) in details.classesList" :key="index" @click="jumpPage('pages/skillsTraining/courseDetailed/courseDetailed')">
+						<swiper v-if="details.courseList && details.courseList.length" class="swiper" :indicator-dots="false" :autoplay="false" height="196rpx">
+							<swiper-item class="swiper-item" v-for="(item, index) in details.courseList" :key="index" @click="jumpPage('pages/skillsTraining/courseDetailed/courseDetailed', { id: item.id })">
 								<u-image :src="item.img" width="95%" height="196" mode="aspectFill"
 									border-radius="10" />
 								<view class="classes-name">{{ item.name }}</view>
-								<view class="classes-subtitle">{{ item.subtitle }}</view>
+								<!-- <view class="classes-subtitle">{{ item.subtitle }}</view> -->
 							</swiper-item>
 						</swiper>
+						<u-empty v-else text="暂无课程" mode="list" margin-top="30"></u-empty>
 					</view>
 				</view>
 				<!-- 技能详解 -->
@@ -64,12 +68,13 @@
 						</view>
 					</view>
 					<view class="content">
-						<u-parse :html="details.content"></u-parse>
+						<u-parse :html="details.description"></u-parse>
 					</view>
 				</view>
 			</view>
 		</view>
-		<view class="package-btn" @click="signUp">报名</view>
+		<view class="package-btn" v-if="isApply == 0" @click="signUp">报名</view>
+		<u-toast ref="uToast"/>
 	</view>
 </template>
 
@@ -78,40 +83,46 @@
 		data() {
 			return {
 				packageId: '',
-				details: {
-					star: 3,
-					classesList: [{
-							img: 'https://file02.16sucai.com/d/file/2014/0427/071875652097059bbbffe106f9ce3a93.jpg',
-							name: '解锁!轮胎更换诀窍',
-							subtitle: '线上课程'
-						},
-						{
-							img: 'https://img.redocn.com/sheying/20160805/caoyuanshaoyaohuahuahai_6869505.jpg',
-							name: '解锁!轮胎更换诀窍',
-							subtitle: '线上课程'
-						},
-						{
-							img: 'https://file02.16sucai.com/d/file/2014/0427/071875652097059bbbffe106f9ce3a93.jpg',
-							name: '解锁!轮胎更换诀窍',
-							subtitle: '线上课程'
-						},
-						{
-							img: 'https://file03.16sucai.com/2017/1100/16sucai_p20161119096_1e4.JPG',
-							name: '解锁!轮胎更换诀窍',
-							subtitle: '线上课程'
-						}
-					],
-					content: `<p>露从今夜白,月是故乡明</p>
-					<img src="https://cdn.uviewui.com/uview/swiper/2.jpg" />`
-				}
+				schoolName: '',
+				details: {},
+				isApply: 1
 			}
 		},
 		onLoad(page) {
 			if (page.id) {
 				this.packageId = page.id
+				this.schoolName = page.schoolName
+			}
+		},
+		onShow() {
+			if (this.packageId) {
+				this.getPackageDetails(this.packageId);
+				this.isApplyTraining(this.packageId);
 			}
 		},
 		methods: {
+			/**
+			 * 获取技能包详情
+			 * @param {Object} id
+			 */
+			getPackageDetails(id) {
+				this.$u.api.skillTraining.getPackageDetailApi({ id }).then(res => {
+					if (res.code === 200) {
+						this.details = res.data
+						this.details.schoolName = this.schoolName
+					} else {
+						this.$refs.uToast.show({
+							title: res.msg,
+							type: 'error'
+						})
+					}
+				}).catch(err => {
+					this.$refs.uToast.show({
+						title: '系统异常!',
+						type: 'error'
+					})
+				})
+			},
 			/**
 			 * 跳转到指定页面
 			 * @param {Object} url
@@ -128,9 +139,25 @@
 			 */
 			signUp() {
 				this.$u.api.skillTraining.signUpClassApi({ packageId: this.packageId }).then(res => {
-					console.log(res)
 					if (res.code === 200) {
 						this.jumpPage('/pages/skillsTraining/submitSuccess/submitSuccess');
+					} else {
+						this.$refs.uToast.show({
+							title: res.msg,
+							type: 'error'
+						})
+					}
+				})
+			},
+			/**
+			 * 检查是否申请过该技能包
+			 * @param {Object} id
+			 */
+			isApplyTraining(id) {
+				this.$u.api.skillTraining.isApplyTrainingApi({ id }).then(res => {
+					console.log(res)
+					if (res.code === 200) {
+						this.isApply = res.data
 					}
 				})
 			}

+ 1 - 1
h5_web/pages/skillsTraining/skillsTraining - 副本.vue

@@ -191,7 +191,7 @@
 					pageNum:1,
 					pageSize:10
 				}
-				this.$u.api.getIndexNewsList(params)
+				this.$u.api.indexApi.getIndexNewsListApi(params)
 				.then(res=>{
 					this.newsList = res.rows;
 					this.bigNews = this.newsList[0];

+ 6 - 3
h5_web/pages/skillsTraining/skillsTraining.scss

@@ -19,7 +19,7 @@ page {
 .training {
 	&-banner {
 		width: 100%;
-		height: 100%;
+		height: 408rpx;
 		
 		image {
 			width: 100%;
@@ -28,7 +28,6 @@ page {
 	}
 	
 	&-total {
-		margin-top: -8rpx;
 		padding: 0 30rpx;
 		height: 164rpx;
 		background: linear-gradient(90deg, #FEA460 0%, #FB6C59 100%);
@@ -90,6 +89,7 @@ page {
 					
 					.right {
 						text-align: left;
+						width: calc(100% - 226rpx);
 						view {
 							&:first-child {
 								font-size: 34rpx;
@@ -105,6 +105,9 @@ page {
 								font-size: 24rpx;
 								color: #9A9A9A;
 								margin-top: 8rpx;
+								white-space: nowrap;/* 规定文本是否折行 */  
+								overflow: hidden;/* 规定超出内容宽度的元素隐藏 */
+								text-overflow: ellipsis;
 							}
 						}
 						.btn {
@@ -154,7 +157,7 @@ page {
 			
 			&-item {
 				width: calc(50% - 12rpx);
-				margin-right: 24rpx;
+				margin-right: 20rpx;
 				margin-bottom: 38rpx;
 				&:nth-child(2n) {
 					margin-right: 0;

+ 89 - 37
h5_web/pages/skillsTraining/skillsTraining.vue

@@ -10,7 +10,7 @@
 		<view class="training-total" @click="jumpPage('/pages/mine/skillsTraining/skillsTraining')">
 			<view class="training-total-left">
 				<view>我的技能培训</view>
-				<view>学习时长:206小时</view>
+				<view>学习时长:{{ skillTotal.learnTime }}小时</view>
 			</view>
 			<view class="training-total-right">
 				<u-icon name="arrow-right" size="44" color="#fff"></u-icon>
@@ -27,48 +27,52 @@
 				</view>
 			</view>
 			<view class="training-notice-content">
-				<swiper class="swiper" :indicator-dots="true" :autoplay="false" :interval="1000" :duration="500" indicator-color="#D8D8D8" indicator-active-color="#D8D8D8">
+				<swiper class="swiper" :indicator-dots="true" :autoplay="false" :interval="1000" :duration="500"
+					indicator-color="#D8D8D8" indicator-active-color="#D8D8D8">
 					<swiper-item v-for="(item, index) in enrollList" :key="index">
 						<view class="swiper-item">
 							<view class="left">
-								<u-image :src="item.img" mode="aspectFill" border-radius="10" height="220"/>
+								<u-image :src="item.img" mode="aspectFill" border-radius="10" height="220" />
 							</view>
 							<view class="right">
 								<view>{{ item.name }}</view>
-								<view>{{ item.school }}</view>
-								<view>报名时间:{{ item.dateRange }}</view>
-								<view class="btn" @click="jumpPage('/pages/skillsTraining/skillsPackage/skillsPackage')">报名</view>
+								<view>{{ item.schoolName }}</view>
+								<view>{{ item.description }}</view>
+								<view class="btn"
+									@click="signUp(item)">报名</view>
 							</view>
 						</view>
 					</swiper-item>
 				</swiper>
 			</view>
 		</view>
-		
+
 		<!-- 技能包 -->
 		<view class="training-package">
 			<view class="training-package-title">
 				<view>技能包</view>
-				<view>
+				<!-- <view>
 					<text>更多</text>
 					<u-icon name="arrow-right"></u-icon>
-				</view>
+				</view> -->
 			</view>
 			<view class="training-package-list">
-				<view class="training-package-list-item" v-for="(item, index) in packageList" :key="index" @click="jumpPage('/pages/skillsTraining/skillsPackage/skillsPackage', { id: item.id })">
+				<view class="training-package-list-item" v-for="(item, index) in packageList" :key="index"
+					@click="recordBrowseTotal(item)">
 					<view>
-						<u-image :src="item.img" height="190"mode="aspectFill" border-radius="10"/>
+						<u-image :src="item.img" height="190" mode="aspectFill" border-radius="10" />
 					</view>
 					<view>{{ item.name }}</view>
 					<view>{{ item.schoolName }}</view>
 				</view>
 			</view>
 		</view>
-		
+
 		<!-- 问题咨询 -->
 		<view class="training-bottom">
 			问题咨询(0851-863789)
 		</view>
+		<u-toast ref="uToast" />
 	</view>
 </template>
 
@@ -76,36 +80,20 @@
 	export default {
 		data() {
 			return {
-				enrollList: [
-					{
-						id: 1,
-						img: 'http://img.mp.itc.cn/upload/20161115/15c7309f1a074a08a2b9630651720c27_th.jpg',
-						name: '汽车检测与维修',
-						school: '贵州工业职业技术学院',
-						dateRange: '2021.10.15-2021.11.24'
-					},
-					{
-						id: 2,
-						img: 'http://img.mp.itc.cn/upload/20161115/15c7309f1a074a08a2b9630651720c27_th.jpg',
-						name: '汽车检测与维修',
-						school: '贵州工业职业技术学院',
-						dateRange: '2021.10.15-2021.11.24'
-					},
-					{
-						id: 3,
-						img: 'http://www.gzlis.edu.cn/uploadfile/201906/20190605152111236.jpg',
-						name: '汽车检测与维修',
-						school: '贵州工业职业技术学院',
-						dateRange: '2021.10.15-2021.11.24'
-					}
-				],
-				packageList: []
+				enrollList: [],
+				packageList: [],
+				skillTotal: {}
 			}
 		},
 		onShow() {
 			this.getPackageList();
+			this.getClassNoticeList();
+			this.getTrainingTotal();
 		},
 		methods: {
+			/**
+			 * 获取技能包列表
+			 */
 			getPackageList() {
 				this.$u.api.skillTraining.getSkillPackageListApi().then(res => {
 					if (res.code === 200) {
@@ -113,13 +101,77 @@
 					}
 				})
 			},
+			/**
+			 * 获取报班通知列表
+			 */
+			getClassNoticeList() {
+				this.$u.api.skillTraining.getClassNoticeApi({
+					pageNum: 1,
+					pageSize: 5
+				}).then(res => {
+					if (res.code === 200) {
+						this.enrollList = res.rows;
+					}
+				})
+			},
+			/**
+			 * 获取个人技能培训统计
+			 */
+			getTrainingTotal() {
+				this.$u.api.skillTraining.getTrainingTotalApi().then(res => {
+					if (res.code === 200) {
+						this.skillTotal = res.data
+					}
+				})
+			},
+			/**
+			 * 适应性培训关注度统计
+			 * @param {Object} item
+			 */
+			recordBrowseTotal(item) {
+				const query = {
+					platform: '1', // 平台:1-H5 2-APP 3-小程序 4-PC端
+					pages: location.href, // 页面路径
+					btnName: '查看技能包详情', // 按钮名称
+					btnEvent: '1', //按钮事件: 1-点击 2-长按 3-滑动
+					ipAddress: '', //IP地址
+					typeName: '技能培训关注度', //类型名称 例:学校关注度 、适应性考试等
+					typeCode: 'JNPXGZD', // 类型编码 例:类型名称首字母缩写(XXGZD)
+					categoryName: item.name, //类别名称 例:XX学校,SS考试
+				}
+				this.$u.api.postAnalysis(query).then(res => {
+					this.jumpPage('/pages/skillsTraining/skillsPackage/skillsPackage', {
+						id: item.id,
+						schoolName: item.schoolName
+					})
+				})
+			},
 			/**
 			 * 跳转到指定页面
 			 * @param { String } url
 			 * @param {Object} parmas
 			 */
 			jumpPage(url, params) {
-				this.$u.route({ url, params })
+				this.$u.route({
+					url,
+					params
+				})
+			},
+			/**
+			 * 报名
+			 * @param {Object} item
+			 */
+			signUp(item) {
+				this.$u.api.skillTraining.signUpClassApi({ packageId: item.id }).then(res => {
+					if (res.code === 200) {
+						this.jumpPage('/pages/skillsTraining/submitSuccess/submitSuccess');
+					} else {
+						this.$refs.uToast.show({
+							title: res.msg,
+							type: 'error'
+						})
+					}
+				})
 			}
 		}
 	}

+ 30 - 13
h5_web/pages/skillsTraining/skillsTrainingCourse/skillsTrainingCourse.vue

@@ -3,7 +3,7 @@
 	<view class="course">
 		<z-paging ref="paging" v-model="courseList" @query="queryList">
 			<view class="course-list">
-				<view class="course-list-item" v-for="(item, index) in courseList" :key="index">
+				<view class="course-list-item" v-for="(item, index) in courseList" :key="index" @click="jumpPage('pages/skillsTraining/courseDetailed/courseDetailed', { id: item.id })">
 					<view class="left">
 						<u-image :src="item.img" mode="aspectFill" width="204" height="132" border-radius="10">
 						</u-image>
@@ -15,6 +15,7 @@
 				</view>
 			</view>
 		</z-paging>
+		<u-toast ref="uToast"/>
 	</view>
 </template>
 
@@ -22,7 +23,13 @@
 	export default {
 		data() {
 			return {
-				courseList: []
+				courseList: [],
+				packageId: ''
+			}
+		},
+		onLoad(page) {
+			if (page.id) {
+				this.packageId = page.id
 			}
 		},
 		methods: {
@@ -31,18 +38,28 @@
 			 * @param {Object} pageSize
 			 */
 			queryList(pageNum, pageSize) {
-				this.$refs.paging.complete([
-					{
-						img: 'https://file02.16sucai.com/d/file/2014/0427/071875652097059bbbffe106f9ce3a93.jpg',
-						name: '解锁!轮胎更换诀窍',
-						teacherName: 'xxx'
-					},
-					{
-						img: 'https://file02.16sucai.com/d/file/2014/0427/071875652097059bbbffe106f9ce3a93.jpg',
-						name: '解锁!轮胎更换诀窍轮胎更换诀窍轮胎更换诀窍轮胎更换诀窍',
-						teacherName: 'xxx'
+				this.getList(pageNum, pageSize)
+			},
+			/**
+			 * 获取列表
+			 * @param {Object} pageNum
+			 * @param {Object} pageSize
+			 */
+			getList(pageNum, pageSize) {
+				this.$u.api.getMoreCourseListApi({ pageNum, pageSize, id: this.packageId }).then(res => {
+					if (res.code === 200) {
+						this.$refs.paging.complete(res.rows);
+					} else {
+						this.$refs.paging.complete([]);
+						this.$refs.uToast.show({
+							title: res.msg,
+							type: 'error'
+						})
 					}
-				])
+				})
+			},
+			jumpPage(url, params) {
+				this.$u.route({ url, params })
 			}
 		}
 	}

+ 3 - 2
h5_web/pages/upgrade/professionalIntroduction/professionalIntroduction.vue

@@ -32,11 +32,11 @@
 				<view class="professional-content-preview-video">
 					<view class="title">
 						<view><text>课程预览</text>精彩教学视频</view>
-						<view>
+						<view @click="jumpPage('/pages/upgrade/upgradeCourse/upgradeCourse', { id: learnpackageId })">
 							更多<u-icon name="arrow-right"></u-icon>
 						</view>
 					</view>
-					<view class="list">
+					<view class="list" v-if="details.courseList && details.courseList.length">
 						<swiper
 							class="swiper"
 							:indicator-dots="false"
@@ -50,6 +50,7 @@
 							</swiper-item>
 						</swiper>
 					</view>
+					<u-empty v-else text="暂无课程" mode="list" margin-top="50"></u-empty>
 				</view>
 				<!-- 专业介绍 -->
 				<view class="professional-content-preview-introduction">

+ 35 - 0
h5_web/pages/upgrade/upgradeCourse/upgradeCourse.scss

@@ -0,0 +1,35 @@
+/* 学历提升课程 */
+/* #ifndef H5 */
+page {
+	height: 100%;
+	background-color: #f2f2f2;
+	font-family: 'PingFangSC-Regular, PingFang SC';
+}
+/* #endif */
+.course {
+	
+	&-list {
+		padding: 26rpx 30rpx;
+		&-item {
+			background-color: #fff;
+			padding: 30rpx 32rpx;
+			border-radius: 10rpx;
+			display: flex;
+			margin-bottom: 20rpx;
+			.left {
+				margin-right: 22rpx;
+			}
+			.right {
+				view {
+					color: #9A9A9A;
+					font-size: 24rpx;
+					line-height: 50rpx;
+					&:first-child {
+						font-size: 30rpx;
+						color: #0B0B0B;
+					}
+				}
+			}
+		}
+	}
+}

+ 71 - 0
h5_web/pages/upgrade/upgradeCourse/upgradeCourse.vue

@@ -0,0 +1,71 @@
+<!-- 学历提升课程 -->
+<template>
+	<view class="course">
+		<z-paging ref="paging" v-model="courseList" @query="queryList">
+			<view class="course-list">
+				<view class="course-list-item" v-for="(item, index) in courseList" :key="index" @click="jumpPage('pages/upgrade/courseDetail/courseDetail', { id: item.id })">
+					<view class="left">
+						<u-image :src="item.img" mode="aspectFill" width="204" height="132" border-radius="10">
+						</u-image>
+					</view>
+					<view class="right">
+						<view>{{ item.name }}</view>
+						<view>主讲老师:{{ item.teacherName }}</view>
+					</view>
+				</view>
+			</view>
+		</z-paging>
+		<u-toast ref="uToast"/>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				courseList: [],
+				packageId: ''
+			}
+		},
+		onLoad(page) {
+			if (page.id) {
+				this.packageId = page.id
+			}
+		},
+		methods: {
+			/**
+			 * @param {Object} pageNum
+			 * @param {Object} pageSize
+			 */
+			queryList(pageNum, pageSize) {
+				this.getList(pageNum, pageSize)
+			},
+			/**
+			 * 获取列表
+			 * @param {Object} pageNum
+			 * @param {Object} pageSize
+			 */
+			getList(pageNum, pageSize) {
+				this.$u.api.getMoreCourseListApi({ pageNum, pageSize, id: this.packageId }).then(res => {
+					if (res.code === 200) {
+						this.$refs.paging.complete(res.rows);
+					} else {
+						this.$refs.paging.complete([]);
+						this.$refs.uToast.show({
+							title: res.msg,
+							type: 'error'
+						})
+					}
+				})
+			},
+			jumpPage(url, params) {
+				this.$u.route({ url, params })
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import './upgradeCourse.scss';
+</style>
+

+ 1 - 1
h5_web/pages/upgrade1/upgrade.vue

@@ -145,7 +145,7 @@
 					pageNum: 1,
 					pageSize: 10
 				}
-				this.$u.api.getIndexNewsList(params)
+				this.$u.api.indexApi.getIndexNewsListApi(params)
 					.then(res => {
 						this.newsList = res.rows;
 						this.bigNews = this.newsList[0];