浏览代码

接口联调

htc 10 小时之前
父节点
当前提交
c015c6a2bf

+ 3 - 4
pages/login.vue

@@ -97,10 +97,9 @@
 						that.$api.get('/wx/login',{
 							code:res.code,
 							phoneCode:code,
-							// channelType:that.channelType,
-							channelType:'Questionnaire',
-							teamQuestionnaireId:'1993157045939318785',
-							referrerId:'1986308756413480961',
+							channelType:that.channelType,
+							teamQuestionnaireId:'',
+							referrerId:'',
 						},false).then(res=>{
 							if(res.data.code===0){
 								if(res.data.data.isRegister==1){

+ 34 - 16
pagesHome/components/createList.vue

@@ -23,7 +23,6 @@
 							<view class="bottom-left">截止时间:{{ item.endTime }}</view>
 							<view class="bottom-right" v-if="item.status === 0 && item.type == 1" @click.stop="handleAnswer(item)">立即作答</view>
 							<view class="bottom-right" v-else-if="item.status === 1 && !item.fileUrl" @click.stop="createReport(item)">生成报告</view>
-							<view class="bottom-right" v-else-if="item.status === 1 && item.fileUrl" @click.stop="sendReport(item)">发送报告</view>
 						</view>
 					</view>
 				</up-list-item>
@@ -145,10 +144,6 @@ export default {
 				{
 					img:this.$imgBase+'questionnaire_report.png',
 					text:'生成报告'
-				},
-				{
-					img:this.$imgBase+'questionnaire_send.png',
-					text:'发送报告'
 				}
 			],
 			menuListCopy:[],
@@ -265,12 +260,7 @@ export default {
 			}
 			else if(item.text==='生成报告'){
 				if(this.dto.status==0) return this.$showToast('问卷未完成,全部团队人员作答后才能生成报告')
-				this.createReport({teamQuestionnaireId:this.dto.teamQuestionnaireId})
-				this.show = false;
-
-			}
-			else if(item.text==='发送报告'){
-				if(this.dto.status==0) return this.$showToast('请先生成报告后再进行发送报告')
+				this.createReportConfirm(this.dto.teamQuestionnaireId)
 			}
 		},
 		handleConfirm(data){
@@ -286,14 +276,42 @@ export default {
 				url:'/pagesPublish/questionnaireFill?teamQuestionnaireId='+item.teamQuestionnaireId+'&teamId='+item.teamId+'&type='+item.type
 			})
 		},
-		createReport(item){
-			this.$api.get(`/core/team/questionnaire/genReport/${item.teamQuestionnaireId}`).then(({data:res})=>{
-				if(res.code !== 0) return this.$showToast(res.msg)
+		createReport(item){
+			this.createReportConfirm(item.teamQuestionnaireId)
+		},
+		createReportConfirm(teamQuestionnaireId){
+			this.$api.get(`/core/team/questionnaire/generateReportCheck/${teamQuestionnaireId}`).then(({data:res})=>{
+				if(res.code===0&&res.data===0){
+					this.createReportFn(teamQuestionnaireId);
+				}else if(res.code===0&&res.data>0){
+					uni.showModal({
+						title:'生成报告',
+						content:`该问卷已生成${res.data??0}份报告,是否再次生成新报告?`,
+						confirmColor:'#199C9C',
+						success: (res) => {
+							if(res.confirm){
+								this.createReportFn(teamQuestionnaireId);
+							}
+						}
+					})
+				}else if(res.code!==0){
+					uni.showModal({
+						title:'生成报告',
+						content:res.msg,
+						showCancel:false,
+						confirmColor:'#199C9C'
+					})
+				}
+				this.show = false;
+			})
+		},
+		createReportFn(teamQuestionnaireId){
+			this.$api.get(`/core/team/questionnaire/genReport/${teamQuestionnaireId}`).then(({data:res})=>{
 				this.show = false;
 				uni.navigateTo({
-					url:'/pagesHome/reportResult'
+					url:'/pagesHome/reportResult?result='+res.code+'&info='+encodeURIComponent(JSON.stringify(this.dto))
 				})
-			})
+			})
 		},
 		sendReport(item){
 

+ 38 - 10
pagesHome/components/report/generateList.vue

@@ -3,15 +3,19 @@
 		<u-list @scrolltolower="scrolltolower" height="100%">
 			<u-list-item v-for="(item, index) in list" :key="item.id">
 				<view class="gbox-item">
-					<view class="gbox-item-top adfac">
-						<view class="gbox-item-top-type">{{typeCfg['1']}}</view>
-						<view class="gbox-item-top-title">{{'甜梦巧克力公司PREILL分析报告'}}</view>
+					<view class="gbox-item-top adf">
+						<view class="gbox-item-top-type">{{typeCfg[item.type]||'基础版'}}</view>
+						<view class="gbox-item-top-title">{{item.title||''}}</view>
 					</view>
 					<view class="gbox-item-p adf">
 						<view class="gbox-item-p-left">团队名称:</view>
-						<view class="gbox-item-p-right">{{'甜梦巧克力有限公司'}}</view>
+						<view class="gbox-item-p-right">{{item.teamName||''}}</view>
 					</view>
-					<view class="gbox-item-p adfac">
+					<view class="gbox-item-p adf">
+						<view class="gbox-item-p-left">报告状态:</view>
+						<view class="gbox-item-p-right" :style="{'color':stateColor[item.state]}">{{stateDict[item.state]}}</view>
+					</view>
+					<!-- <view class="gbox-item-p adfac">
 						<view class="gbox-item-p-left">报告进度:</view>
 						<view class="gbox-item-p-progress adfacjb">
 							<view class="gbox-item-p-progress-l">
@@ -19,13 +23,14 @@
 							</view>
 							<view class="gbox-item-p-progress-r">{{80}}%</view>
 						</view>
-					</view>
+					</view> -->
 					<view class="gbox-item-bottom adfacjb">
 						<view class="gbox-item-bottom-left adfac">
 							<view class="gbox-item-bottom-left-text">创建时间:</view>
-							<view class="gbox-item-bottom-left-time">{{'2025-05-28 12:00:00'}}</view>
+							<view class="gbox-item-bottom-left-time">{{item.createDate||''}}</view>
 						</view>
-						<view class="gbox-item-bottom-right" @click="sendReport(item)">发送报告</view>
+						<view class="gbox-item-bottom-right" @click="sendReport(item)" v-if="item.state!=-1">发送报告</view>
+						<view class="gbox-item-bottom-right" @click="reSendReport(item)" v-else>重新生成</view>
 					</view>
 				</view>
 			</u-list-item>
@@ -47,6 +52,16 @@
 					1:'基础版',
 					2:'专业版',
 					3:'专家版'
+				},
+				stateDict:{
+					'0':'生成中',
+					'1':'生成成功',
+					'-1':'生成失败'
+				},
+				stateColor:{
+					'0':'#FFD750',
+					'1':'#33A7A7',
+					'-1':'#F4657A'
 				}
 			}
 		},
@@ -55,8 +70,17 @@
 				this.$emit('scrolltolower')
 			},
 			sendReport(item){
-				uni.navigateTo({
-					url:'/pagesHome/reportResult'
+				if(!item.fileUrl) return this.$showModal('该报告尚未生成PDF文件,请等待生成后发送。')
+				this.$api.get(`/core/report/sendReport/${item.reportId}`).then(({data:res})=>{
+					uni.navigateTo({
+						url:'/pagesHome/reportResult?result='+res.code+'&info='+encodeURIComponent(JSON.stringify(item))
+					})
+				})
+			},
+			reSendReport(item){
+				this.$api.get(`/core/report/regenerateReport/${item.reportId}`).then(({data:res})=>{
+					if(res.code!==0) return this.$showToast(res.msg)
+					this.$emit('reSendReport')
 				})
 			}
 		}
@@ -74,7 +98,10 @@
 			position: relative;
 			&-top{
 				&-type{
+					width: 98rpx;
+					height: 36rpx;
 					padding: 2rpx 13rpx;
+					box-sizing: border-box;
 					background: #FFF7DC;
 					border-radius: 6rpx;
 					font-family: PingFangSC, PingFang SC;
@@ -84,6 +111,7 @@
 					line-height: 33rpx;
 				}
 				&-title{
+					width: calc(100% - 98rpx);
 					font-family: PingFang-SC, PingFang-SC;
 					font-weight: bold;
 					font-size: 32rpx;

+ 3 - 0
pagesHome/questionnaireEdit.vue

@@ -185,6 +185,9 @@
 			addTeamUser(){
 				uni.navigateTo({
 					url:'/pagesMy/teamUser?type=select',
+					success: (res) => {
+						res.eventChannel.emit('acceptDataFromOpenerPage', { data: '来自A页面的初始数据' });
+					},
 					events:{
 						selectUserConfirm: data => {
 							this.dto.memberList = data;

+ 40 - 9
pagesHome/report.vue

@@ -10,21 +10,24 @@
 		<view class="query adfacjb">
 			<u-icon name="search" size="38rpx" color="#B3BFC8"></u-icon>
 			<view class="query-inp">
-				<u-input v-model="keyword" border="none" fontSize="26rpx" color="#002846" clearable
+				<u-input v-model="queryParams.teamName" border="none" fontSize="26rpx" color="#002846" clearable
 				 placeholder="请输入团队名称查询" @confirm="getList"></u-input>
 			</view>
 		</view>
-		<view class="box">
+		<view class="box" v-if="list.length">
 			<template v-if="tindex===0">
 				<receive-list :list="list" @scrolltolower="scrolltolower"></receive-list>
 			</template>
 			<template v-else-if="tindex===1">
-				<generate-list :list="list" @scrolltolower="scrolltolower"></generate-list>
+				<generate-list :list="list" @scrolltolower="scrolltolower" @reSendReport="reSendReport"></generate-list>
 			</template>
 			<template v-else-if="tindex===2">
 				<send-list :list="list" @scrolltolower="scrolltolower"></send-list>
 			</template>
 		</view>
+		<view style="flex: 1;" v-else>
+			<page-empty text='暂无报告'></page-empty>
+		</view>
 	</view>
 </template>
 
@@ -32,17 +35,24 @@
 	import ReceiveList from './components/report/receiveList.vue'
 	import GenerateList from './components/report/generateList.vue'
 	import SendList from './components/report/sendList.vue'
+	import PageEmpty from '@/components/pageEmpty/index.vue'
 	export default {
 		components:{
 			ReceiveList,
 			GenerateList,
-			SendList
+			SendList,
+			PageEmpty
 		},
 		data(){
 			return {
 				tindex:0,
-				keyword:'',
-				list:[]
+				queryParams:{
+					page:1,
+					limit:10,
+					teamName:''
+				},
+				list:[],
+				isOver:false
 			}
 		},
 		onLoad() {
@@ -51,24 +61,45 @@
 		methods:{
 			changeTab(index){
 				this.tindex = index;
+				this.initList();
 				this.getList();
 			},
+			initList(){
+				this.queryParams.page = 1;
+				this.isOver = false;
+				this.list = [];
+			},
 			getList(){
 				if(this.tindex===0) this.getReceiveList()
 				else if(this.tindex===1) this.getGenerateList()
 				else if(this.tindex===2) this.getSendList()
 			},
 			getReceiveList(){
-				this.list = [{id:1},{id:2},{id:3}];
+				this.$api.get('/core/report/receivedReportList',this.queryParams).then(({data:res})=>{
+					if(res.code!==0) return this.$showToast(res.msg)
+					this.list = [...this.list,...res.data.list];
+					this.queryParams.page++;
+					if(res.data.list.length===0) this.isOver = true;
+				})
 			},
 			getGenerateList(){
-				this.list = [{id:1},{id:2},{id:3}];
+				this.$api.get('/core/report/generatedReportList',this.queryParams).then(({data:res})=>{
+					if(res.code!==0) return this.$showToast(res.msg)
+					this.list = [...this.list,...res.data.list];
+					this.queryParams.page++;
+					if(res.data.list.length===0) this.isOver = true;
+				})
 			},
 			getSendList(){
 				this.list = [{id:1},{id:2},{id:3}];
 			},
+			reSendReport(){
+				this.getList()
+				this.$showToast('重新生成成功')
+			},
 			scrolltolower(){
-				console.log(this.tindex);
+				if(this.isOver) return
+				this.getList()
 			}
 		}
 	}

+ 25 - 19
pagesHome/reportResult.vue

@@ -2,28 +2,29 @@
 	<view class="default_page" :style="{'height':h+'px', 'padding-top':mt+'px'}">
 		<cus-header title='生成报告' bgColor="transparent"></cus-header>
 		<div class="box adffcac">
-			<div class="box-loading adffcacjc">{{1}}%</div>
-			<div class="box-p1">{{'报告正在生成中~'}}</div>
-			<div class="box-p2">预计所需时间7-10分钟</div>
-			<div class="box-p3">{{'稍后可去报告管理中查看结果'}}</div>
+			<image class="box-loading" src="https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/report_success.png" v-if="result==0"></image>
+			<image class="box-loading" src="https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/report_fail.png" v-else></image>
+			<div class="box-p1">{{result==0?'报告正在生成中~':'报告生成失败'}}</div>
+			<div class="box-p2" v-if="result==0">预计所需时间7-10分钟</div>
+			<div class="box-p3">{{result==0?'稍后可去报告管理中查看结果':'失败原因:网络延迟'}}</div>
 		</div>
 		<div class="form">
 			<div class="form-item adfacjb">
 				<div class="form-item-left">问卷名称</div>
-				<div class="form-item-right">{{'GW+MC PREILL36测评题库版本'}}</div>
+				<div class="form-item-right">{{info.title||''}}</div>
 			</div>
 			<div class="form-item adfacjb">
 				<div class="form-item-left">团队名称</div>
-				<div class="form-item-right">{{'甜梦巧克力有限公司'}}</div>
+				<div class="form-item-right">{{info.teamName||''}}</div>
 			</div>
 			<div class="form-item adfacjb">
 				<div class="form-item-left">创建时间</div>
-				<div class="form-item-right">{{'2025-10-23 15:00'}}</div>
+				<div class="form-item-right">{{info.startTime||''}}</div>
 			</div>
 		</div>
 		<div class="btn">
-			<div class="zt_btn" @click="handleBack">返回</div>
-			<!-- <div class="zt_btn" @click="handleReCreate">重新生成</div> -->
+			<div class="zt_btn" @click="handleBack" v-if="result==0">返回</div>
+			<div class="zt_btn" @click="handleReCreate" v-else>重新生成</div>
 		</div>
 	</view>
 </template>
@@ -32,16 +33,28 @@
 	export default {
 		data(){
 			return {
-				// 报告生成失败
-				// 失败原因:网络延迟
+				result:'',
+				info:null
 			}
 		},
+		onLoad(options) {
+			this.result = options.result;
+			this.info = options.info&&JSON.parse(decodeURIComponent(options.info));
+		},
 		methods:{
 			handleBack(){
 				uni.navigateBack()
 			},
 			handleReCreate(){
-				
+				this.$api.get(`/core/team/questionnaire/genReport/${this.info.teamQuestionnaireId}`).then(({data:res})=>{
+					if(res.code!==0) return this.$showToast(res.msg)
+					this.$showToast('重新生成成功')
+					setTimeout(()=>{
+						uni.redirectTo({
+							url:'pagesHome/questionnaire?type=create'
+						})
+					},1500)
+				})
 			}
 		}
 	}
@@ -58,13 +71,6 @@
 			&-loading{
 				width: 340rpx;
 				height: 340rpx;
-				background: url('https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/send_loading.png') no-repeat;
-				background-size: 100% 100%;
-				font-family: PingFang-SC, PingFang-SC;
-				font-weight: bold;
-				font-size: 54rpx;
-				color: #FFFFFF;
-				line-height: 54rpx;
 			}
 			&-p1{
 				font-family: PingFang-SC, PingFang-SC;

+ 18 - 3
pagesMy/teamUser.vue

@@ -72,11 +72,22 @@
 				categoryData:[],
 				currentUser:null,
 				currentIndex:'',
+				eventChannel: null,
 			}
 		},
-		onLoad(options) {
+		onShow() {
+			const eventChannel = this.getOpenerEventChannel();
+			if (Object.keys(eventChannel).length) { // 简单判断eventChannel是否有效
+				 this.eventChannel = eventChannel;
+			}
+			
+			let pages = getCurrentPages();
+			let options = pages[pages.length-1].options;
 			this.type = options.type||'';
 			this.query.coachId = uni.getStorageSync('userInfo')&&JSON.parse(uni.getStorageSync('userInfo')).id||''
+			this.query.page = 1;
+			this.isOver = false;
+			this.list = [];
 			this.getList()
 		},
 		methods:{
@@ -153,8 +164,12 @@
 				let tempuser = selectList.find(s=>!s.category);
 				if(tempuser) return this.$showToast(`请为团队人员【${tempuser.realName}】选择身份类型`)
 				
-				this.getOpenerEventChannel().emit('selectUserConfirm',selectList)
-				uni.navigateBack()
+				if (this.eventChannel) {
+					this.eventChannel.emit('selectUserConfirm', selectList);
+					uni.navigateBack();
+				}else {
+					uni.navigateBack();
+				}
 			}
 		}
 	}

+ 1 - 5
pagesMy/teamUserDetail.vue

@@ -82,11 +82,7 @@
 				this.$api[this.userInfo.id?'put':'post']('/core/member',this.userInfo).then(({data:res})=>{
 					if(res.code!==0) return this.$showToast(res.msg)
 					this.$showToast(`${this.userInfo.id?'编辑':'添加'}成功`);
-					setTimeout(()=>{
-						uni.redirectTo({
-							url:'/pagesMy/teamUser?type='+this.type
-						})
-					},1000)
+					uni.navigateBack();
 				})
 			}
 		}