py 1 an în urmă
părinte
comite
9088bd7d68

+ 7 - 0
api/ai.js

@@ -0,0 +1,7 @@
+import {request} from '../service/ajax.js'
+
+const newsUrl = '/api/ai/'
+// 发送消息
+export const aiSend = (data) => request(newsUrl + 'send', 'post', { ...data },false)
+// 获取历史消息记录
+export const aiMsgList = (data) => request(newsUrl + 'msg_list', 'post', { ...data },false)

+ 3 - 1
api/alumni.js

@@ -32,4 +32,6 @@ export const alumnMyAlumni = (data) => request(newsUrl + 'my_alumni', 'post', {
 // 删除帖子
 export const alumniDel = (data) => request(newsUrl + 'del', 'post', { ...data },false)
 // 获取热门帖子列表
-export const alumniHeatList = (data) => request(newsUrl + 'heat_list', 'post', { ...data },false)
+export const alumniHeatList = (data) => request(newsUrl + 'heat_list', 'post', { ...data },false)
+// 校友圈轮播
+export const alumniBanner = (data) => request(newsUrl + 'banner', 'post', { ...data },false)

+ 30 - 8
common/css/common.css

@@ -353,7 +353,9 @@ image {
 .fc-96ECFB {
 	color: #96ECFB;
 }
-
+.fc-4495FD {
+	color: #4495FD;
+}
 .fc-FD5D05 {
 	color: #FD5D05;
 }
@@ -361,15 +363,21 @@ image {
 .fc-FF6320 {
 	color: #FF6320;
 }
-
+.fc-FB4845 {
+	color: #FB4845;
+}
 .fc-FB3D03 {
 	color: #ff3422;
 }
-
+.fc-F6ABAC {
+	color: #F6ABAC;
+}
 .fc-ff3939 {
 	color: #ff3939;
 }
-
+.fc-FC4642 {
+	color: #FC4642;
+}
 .fc-F93435 {
 	color: #F93435;
 }
@@ -517,6 +525,9 @@ image {
 .bgc-46D1C2 {
 	background-color: #46D1C2;
 }
+.bgc-EDF6FF {
+	background-color: #EDF6FF;
+}
 .bgc-FD492D {
 	background-color: #FD492D;
 }
@@ -526,6 +537,9 @@ image {
 .bgc-EB5127 {
 	background-color: #EB5127;
 }
+.bgc-FCEDED {
+	background-color: #FCEDED;
+}
 .bgc-FAE5E2 {
 	background-color: #FAE5E2;
 }
@@ -571,7 +585,9 @@ image {
 .b-b-EAEAEC {
 	border-bottom: 1rpx solid #EAEAEC;
 }
-
+.b-b-EDEDF1 {
+	border-bottom: 1rpx solid #EDEDF1;
+}
 .b-r-ccc {
 	border: 1rpx solid #ccc;
 }
@@ -700,7 +716,9 @@ image {
 .ptb-24 {
 	padding: 24rpx 0;
 }
-
+.ptb-30 {
+	padding: 30rpx 0;
+}
 .ptp-24 {
 	padding: 24rpx 0;
 }
@@ -758,7 +776,9 @@ image {
 .ml-2 {
 	margin-left: 2rpx;
 }
-
+.ml-8 {
+	margin-left: 8rpx;
+}
 .ml-10 {
 	margin-left: 10rpx;
 }
@@ -826,7 +846,9 @@ image {
 .mr-46 {
 	margin-right: 46rpx;
 }
-
+.mr-50 {
+	margin-right: 50rpx;
+}
 
 .mb-2 {
 	margin-bottom: 2rpx;

+ 65 - 72
pages-school/circle-info.vue

@@ -1,24 +1,24 @@
 <template>
 	<view class="circle-info-box iPhone-bottom flex-common-css box-border-box bgc-f">
 		<view class="nav-box bgc-f">
-			<Nav :leftShow='false' :customNav='true' bgckgroundBox='transparent'>
-				<template>
-					<view slot="custom" class="display-flex ">
-						<image class="nav-img" @click="toBack()" src="@/static/img/takeout/bg-back.png"
-							mode="scaleToFill"></image>
-						<view class="info-nav display-flex">
-							<image :src="obj.head_img" mode=""></image>
-							<view class="pb-5">
-								<view class="fs-28 fw-600 w348 text-overflow-ellipsis-one">{{obj.nickname||''}}</view>
-								<view class="fs-20 fc-9 fw-400 mb-10">{{obj.created_date||''}}</view>
-							</view>
+			<Nav :title='schoolData.school_name' leftColor='#fff' titleColor='#fff'
+				bgckgroundBox='linear-gradient(-90deg, #55A7FF, #1561F6)'></Nav>
+		</view>
+		<scroll-view scroll-y="true" class="scroll-view-css" @scrolltolower="scrolltolower">
+			<view class="plr-30 box-border-box mb-30">
+				<view class="b-b-EDEDF1 ptb-30 align-items-center flex-justify-space">
+					<view class="align-items-center">
+						<image class="user-img mr-14 b-rad-50" :src="obj.head_img" mode=""></image>
+						<view class="">
+							<view class="fs-24 fw-b w348 text-overflow-ellipsis-one mb-8">{{obj.nickname||''}}</view>
+							<view class="fs-24 fc-a fw-400">{{obj.created_date||''}}</view>
 						</view>
 					</view>
-				</template>
-			</Nav>
-		</view>
+					<view class="">
 
-		<scroll-view scroll-y="true" class="scroll-view-css" @scrolltolower="scrolltolower">
+					</view>
+				</view>
+			</view>
 			<view class="box-border-box mb-26" v-if="obj.image.length > 0">
 				<swiper class="swiper mb-32 " circular indicator-dots indicator-active-color="#4FB3EF" :autoplay="true"
 					:interval="3000" :duration="500">
@@ -27,25 +27,21 @@
 					</swiper-item>
 				</swiper>
 			</view>
-			<view class="box-border-box bz-box bgc-f b-b-F9F9F9 mt-24 mb-32">
+			<view class="box-border-box bz-box bgc-f mt-24 b-b-F2F3F7">
 				<view class="fs-30 fw-600 mb-32 item-content">{{obj.content||''}}</view>
-				<view class="card-4 flex-wrap-wrap">
-					<view class="label-box align-items-center mr-20 b-rad-200 bgc-F2F2F2">
-						<image class="wz mr-8" src="@/static/img/my/wz-two.png" mode=""></image>
-						<view class="fs-24 fc-9">
-							{{obj.school_name||''}}
-						</view>
+				<view class="align-items-center mb-40">
+					<view class="label-box mr-14 b-rad-200 bgc-EDF6FF fc-4495FD fs-24">
+						{{obj.school_name}}
 					</view>
-					<view class="label-box align-items-center b-rad-200 bgc-F2F2F2">
-						<image class="wz mr-8" src="@/static/img/my/ht.png" mode=""></image>
-						<view class="fs-24 fc-9">
-							{{obj.topic_name||''}}
-						</view>
+					<view class="label-box b-rad-200 bgc-FCEDED fc-FC4642 fs-24">
+						{{obj.topic_name}}
 					</view>
 				</view>
 			</view>
-			<view class="fs-32 fc-3 fw-600 mb-16 plr-32 box-border-box">
-				评论<text class="fs-24 fc-9">({{obj.remark}})</text>
+			<view class="plr-30 box-border-box mb-30">
+				<view class="fs-32 fc-0 fw-b b-b-EDEDF1 ptb-30">
+					评论<text class="fs-24 fc-a ml-8">({{obj.remark}})</text>
+				</view>
 			</view>
 			<view v-if="list.length == 0" class="scroll-view-css">
 				<EnBlank :customSrc='true'>
@@ -54,8 +50,8 @@
 					</template>
 				</EnBlank>
 			</view>
-			<view v-else class="pop-box pop-msg box-border-box p-24">
-				<view class=" box-border-box plr-24">
+			<view v-else class="pop-box pop-msg box-border-box plr-30">
+				<view class=" box-border-box">
 					<view class="list-box flex-justify-space" v-for="(item,i) in list" :key="i">
 						<image class="list-box-img" :src="item.head_img" mode="scaleToFill"></image>
 						<view class="flex-1 p-b-20">
@@ -65,7 +61,6 @@
 										{{item.nickname}}
 										<span v-if="item.is_author == 1"
 											class='only-box text-align-center fs-24 fc-41ABF5 ml-10'>作者</span>
-
 									</view>
 									<view class="fs-30 fw-400 mb-8 item_content" @click.stop="openInput(1,item,i,i)">
 										{{item.content}}
@@ -103,7 +98,8 @@
 													<span v-if="info.is_author == 1"
 														class='only-box text-align-center flex-shrink0 fs-24 fc-41ABF5 ml-10'>作者</span>
 												</view>
-												<view class="fs-30 fw-400 mb-8 item_content" @click.stop="openInput(2,info,index,i)">
+												<view class="fs-30 fw-400 mb-8 item_content"
+													@click.stop="openInput(2,info,index,i)">
 													{{info.content}}
 												</view>
 												<view class="align-items-center mb-8">
@@ -135,21 +131,21 @@
 		</scroll-view>
 
 		<view class="card-5 align-items-center flex-justify-space box-border-box boder-b-t">
-			<view class="input-box-box fs-28 fc-9 mr-20" @click.stop="openInput(0,'','','')">友善评论,文明发言</view>
+			<view class="input-box-box fs-24 fc-a mr-20" @click.stop="openInput(0,'','','')">友善评论,文明发言</view>
 			<!-- 			<input class="fs-input" :focus='focus' v-model="msgData.content" @click.stop="openInput(0,'','','')"
 				type="text" @focus='inputFocus(true)' @blur='inputFocus(false)' /> -->
 			<!-- 			<textarea class="fs-input fs-36 fc-3" :focus='focus' v-model="msgData.content"
 				@click.stop="openInput(0,'','','')" @focus='inputFocus(true)' @blur='inputFocus(false)' auto-height /> -->
 			<view class="display-flex flex-shrink0">
 				<view class="align-items-center mr-20" @click.stop="handUp(1,obj)">
-					<uni-icons type="hand-up" size="22" :color="obj.is_like==1?'#FD5C02':'#999'"></uni-icons>
+					<uni-icons type="hand-up" size="22" :color="obj.is_like==1?'#FD5C02':'#000000'"></uni-icons>
 					<view :class="obj.is_like==1?'fc-FD5C02':'fc-9'">
 						点赞
 					</view>
 					<!-- <view class="fs-24 " :class="obj.is_like==1?'fc-FD5C02':'fc-9'">{{obj.like}}</view> -->
 				</view>
 				<view class="align-items-center" @click.stop="openRepot(obj)">
-					<image src="@/static/img/school/info.png" mode=""></image>
+					<image class="jb-icon mr-6" src="/pages-school/static/jb.png" mode=""></image>
 					<view class="fs-24 fc-9">举报</view>
 				</view>
 			</view>
@@ -227,7 +223,9 @@
 				list: [],
 				page: 1,
 				total: 0,
-
+				schoolData: {
+					school_name: '',
+				},
 				// 发起评论
 				msgData: {
 					news_id: '',
@@ -253,6 +251,9 @@
 				remark: ''
 			}
 		},
+		onShow() {
+			this.schoolData.school_name = uni.getStorageSync('school_name');
+		},
 		onLoad(e) {
 			this.news_id = e.news_id;
 			this.msgData.news_id = e.news_id;
@@ -580,21 +581,35 @@
 </script>
 
 <style scoped lang="scss">
-	.item_content{
+	.jb-icon{
+		width: 30rpx;
+		height: 29rpx;
+	}
+	.label-box {
+		padding: 0 18rpx;
+		height: 48rpx;
+		line-height: 48rpx;
+	}
+
+	.user-img {
+		width: 70rpx;
+		height: 70rpx;
+	}
+
+	.b-b-F2F3F7 {
+		border-bottom: 17rpx solid #F2F3F7;
+	}
+
+	.item_content {
 		// max-width: 100%;
 		word-break: break-all;
 		word-wrap: break-word;
 	}
+
 	.item-content {
 		word-wrap: break-word;
 	}
 
-	.label-box {
-		padding: 0 12rpx;
-		height: 38rpx;
-		line-height: 38rpx;
-	}
-
 	.wz {
 		width: 32rpx;
 		height: 32rpx;
@@ -617,10 +632,10 @@
 	}
 
 	.input-box-box {
-		width: 436rpx;
-		height: 72rpx;
-		line-height: 72rpx;
-		background: #F2F2F2;
+		width: 450rpx;
+		height: 80rpx;
+		line-height: 80rpx;
+		background: #F2F3F7;
 		border-radius: 200rpx;
 		box-sizing: border-box;
 		padding: 0 24rpx;
@@ -633,15 +648,8 @@
 		}
 
 		.card-5 {
-			height: 98rpx;
-			padding: 9rpx 24rpx 9rpx 32rpx;
-
-			image {
-				width: 40rpx;
-				height: 40rpx;
-				margin-right: 8rpx;
-
-			}
+			height: 130rpx;
+			padding: 25rpx 30rpx;
 		}
 
 		.w348 {
@@ -651,21 +659,6 @@
 		.nav-box {
 			z-index: 99;
 			padding-bottom: 10rpx;
-
-			.nav-img {
-				width: 56rpx;
-				height: 56rpx;
-				margin-right: 30rpx;
-			}
-
-			.info-nav {
-				image {
-					width: 64rpx;
-					height: 64rpx;
-					border-radius: 50%;
-					margin-right: 20rpx;
-				}
-			}
 		}
 
 		.swiper {

+ 173 - 143
pages-school/school-circle.vue

@@ -1,15 +1,20 @@
 <template>
-	<view class="school-circle iPhone-bottom flex-common-css box-border-box ">
-		<image class="circle-add" src="@/static/img/school/add.png" mode="" @click="add()"></image>
+	<view class="school-circle iPhone-bottom box-border-box">
+		<view class="circle-add flex-direction align-items-center flex-justify-center" @click="add()">
+			<image class="ft-img mb-12" src="/pages-school/static/ft.png" mode=""></image>
+			<view class="fs-24 fc-f fw-b">
+				发帖
+			</view>
+		</view>
 		<view class="bg-box"></view>
-		<Nav :leftShow='false' :customNav='true' bgckgroundBox='transparent'>
+		<Nav :leftShow='false' :customNav='true' :bgckgroundBox='bgckgroundBox'>
 			<template>
 				<view slot="custom" class="align-items-center flex-justify-center navCustom">
 					<view class="align-items-center nav-left" @click="toBack()">
 						<uni-icons type="left" size="20"></uni-icons>
-						<view class="fs-34">
+						<!-- 						<view class="fs-34">
 							返回
-						</view>
+						</view> -->
 					</view>
 					<view class="nav-title w-390 text-overflow-ellipsis-one text-align-center fs-36 fw-400">
 						{{schoolData.school_name}}
@@ -17,33 +22,44 @@
 				</view>
 			</template>
 		</Nav>
-		<view class="pl-24 pr-24 box-border-box">
-			<view class="ts-box mt-24 align-items-center box-border-box plr-12 mb-20">
-				<image src="@/static/img/school/ts.png" mode=""></image>
-				<view class="fs-26 fw-400 fc-FB3D03">{{alumni_str}}</view>
+		<view class="top-box">
+			<view class="plr-30 mb-12 box-border-box">
+				<uni-swiper-dot :info="bannerList" mode="dot" :dotsStyles="dotStyle" :current="current">
+					<swiper class="swiper" @change="change" :autoplay='true' :circular='true' interval="4000">
+						<swiper-item v-for="(item,i) in bannerList" :key="i">
+							<image class="swiper-item" :src="item.image" mode="aspectFill" @click="bannerClock(item)">
+							</image>
+						</swiper-item>
+					</swiper>
+				</uni-swiper-dot>
 			</view>
-		</view>
-		<view class="nav-box display-flex mb-20 pl-24 pr-24 box-border-box">
-			<view class="nav-item view-nowrap" @click="selectTopicId(item.id)"
-				:class="fromData.topic_id == item.id?'h130':'bgc-f'" v-for="(item,i) in classList" :key="i">
-				<image v-if="item.id == 0" class="nav-icon" src="@/static/img/school/icon.png" mode=""></image>
-				<image v-else class="nav-icon" :src="item.image" mode=""></image>
-				<view class="fs-24 plr-24 " :class="fromData.topic_id==item.id?'fw-600 fc-41ABF5':''">{{item.name}}
+			<view class="plr-30 box-border-box">
+				<view class="ts-box align-items-center box-border-box plr-12">
+					<image class="tz-img" src="/pages-school/static/tz.png" mode=""></image>
+					<view class="fs-24 fw-400 fc-0">{{alumni_str}}</view>
 				</view>
-				<image v-if="fromData.topic_id == item.id" class="nav-bg" src="@/static/img/school/bg.png" mode="">
-				</image>
 			</view>
 		</view>
-		<view class="flex-justify-space type-box mb-24 pl-24 pr-24 box-border-box">
-			<view class="display-flex">
-				<view @click="selectOrderBuy(1)" class="box-1" :class="fromData.orderBy == 1?'box-s':''">最新</view>
-				<view @click="selectOrderBuy(2)" class="box-1" :class="fromData.orderBy == 2?'box-s':''">最热</view>
-				<view @click="selectOrderBuy(3)" class="box-1" :class="fromData.orderBy == 3?'box-s':''">评论最多</view>
+		<view class="select-box" :style="[{'top': BarH + 'px'}]">
+			<scroll-view class="nav-box view-nowrap box-border-box bgc-f" scroll-x="true">
+				<view class="nav-item" @click="selectTopicId(item.id)" v-for="(item,i) in classList" :key="i">
+					<image class="nav-icon" :src="item.image" mode=""></image>
+					<view class="fs-24" :class="fromData.topic_id==item.id?'fw-600 fw-400':''">{{item.name}}</view>
+				</view>
+			</scroll-view>
+			<view class="flex-justify-space align-items-center type-box box-border-box">
+				<view class="display-flex">
+					<view @click="selectOrderBuy(1)" class="box-1" :class="fromData.orderBy == 1?'box-s':''">最新</view>
+					<view @click="selectOrderBuy(2)" class="box-1" :class="fromData.orderBy == 2?'box-s':''">最热<text
+							class="ml-8" :class="fromData.orderBy == 2?'fc-F6ABAC':''">↑</text></view>
+					<view @click="selectOrderBuy(3)" class="box-1" :class="fromData.orderBy == 3?'box-s':''">评论<text
+							class="ml-8" :class="fromData.orderBy == 3?'fc-F6ABAC':''">↑</text></view>
+				</view>
+				<view class="box-2 fs-24 fc-F6ABAC" @click="toSelectSchool()">逛其他学校<text class="ml-8 fc-FB4845">></text>
+				</view>
 			</view>
-			<view class="box-2 fs-24 fc-41ABF5" @click="toSelectSchool()">逛其他学校</view>
 		</view>
 
-
 		<view v-if="list.length === 0" class="scroll-view-css">
 			<EnBlank :customSrc='true'>
 				<template v-slot:blankImg>
@@ -52,52 +68,38 @@
 			</EnBlank>
 		</view>
 
-		<scroll-view v-else scroll-y="true" class="scroll-view-css pl-24 pr-24 box-border-box bgc-F5F4F9"
-			@scrolltolower="scrolltolower">
-			<view class="card-box box-border-box p-24 bgc-f flex-justify-space" v-for="(item,i) in list" :key="i"
-				@click.stop="toDet(item)">
-				<image class="card-head" :src="item.head_img" mode="scaleToFill"></image>
-				<view class="flex-1">
-					<view class="card-1 flex-justify-space mb-16">
-						<view class="">
-							<view class="w-400 fs-28 fw-600 mb-8">{{item.nickname}}</view>
-							<view class="fs-24 fc-9">{{item.created_date}}</view>
-						</view>
-						<view class="">
-							<view class="align-items-center">
-								<image class="hot-img" src="@/static/img/school/hot.png" mode=""></image>
-								<view class="fs-26 fw-400 fc-9">{{item.heat}}</view>
-							</view>
-						</view>
+		<!-- <scroll-view v-else scroll-y="true" class="scroll-view-css pl-24 pr-24 box-border-box bgc-F5F4F9" @scrolltolower="scrolltolower"> -->
+		<view class="box-border-box bgc-f">
+			<view class="card-box box-border-box bgc-f" v-for="(item,i) in list" :key="i" @click.stop="toDet(item)">
+				<view class="align-items-center mb-32">
+					<image class="card-head flex-shrink0" :src="item.head_img" mode="scaleToFill"></image>
+					<view class="">
+						<view class="w-400 fs-28 fw-b mb-16">{{item.nickname}}</view>
+						<view class="fs-24 fc-a">{{item.created_date}}</view>
 					</view>
-					<view class="card-2 fs-30 fw-400 mb-16" style="width: 560rpx;">
+				</view>
+				<view class="flex-1">
+					<view class="card-2 fs-30 mb-16">
 						{{item.content}}
 					</view>
 					<view class="card-3 flex-wrap-wrap mb-32" style="width: 560rpx;">
 						<image class="card-3-img" :src="item" v-for="(item,i) in item.image" mode="aspectFill"></image>
 					</view>
 					<view class="align-items-center mb-40">
-						<view class="label-box align-items-center mr-20 b-rad-200 bgc-F2F2F2">
-							<image class="wz mr-8" src="@/static/img/my/wz-two.png" mode=""></image>
-							<view class="fs-24 fc-9">
-								{{item.school_name}}
-							</view>
+						<view class="label-box mr-14 b-rad-200 bgc-EDF6FF fc-4495FD fs-24">
+							{{item.school_name}}
 						</view>
-						<view class="label-box align-items-center b-rad-200 bgc-F2F2F2">
-							<image class="wz mr-8" src="@/static/img/my/ht.png" mode=""></image>
-							<view class="fs-24 fc-9">
-								{{item.topic_name}}
-							</view>
+						<view class="label-box b-rad-200 bgc-FCEDED fc-FC4642 fs-24">
+							{{item.topic_name}}
 						</view>
 					</view>
 
-					<view class="card-5 align-items-center flex-justify-space">
-						<!-- <view class="align-items-center"></view> -->
-						<view class="align-items-center" @click.stop="handUp(1,item)">
+					<view class="card-5 align-items-center flex-justify-end">
+						<view class="align-items-center mr-50" @click.stop="handUp(1,item)">
 							<uni-icons type="hand-up" size="22" :color="item.is_like==1?'#FD5C02':'#999'"></uni-icons>
 							<view class="fs-24 " :class="item.is_like==1?'fc-FD5C02':'fc-9'">{{item.like}}</view>
 						</view>
-						<view class="align-items-center">
+						<view class="align-items-center mr-50">
 							<image class="info-img" src="@/static/img/school/info.png" mode=""></image>
 							<view class="fs-24 fc-9">{{item.remark}}</view>
 						</view>
@@ -106,10 +108,9 @@
 					</view>
 				</view>
 			</view>
-		</scroll-view>
-
-
+		</view>
 
+		<!-- </scroll-view> -->
 
 		<uni-popup ref="popup" type="bottom">
 			<view class="pop-box pop-h-30 box-border-box p-24">
@@ -126,12 +127,10 @@
 			</view>
 		</uni-popup>
 
-
 		<uni-popup ref="popmsg" type="bottom">
 			<view class="pop-box pop-msg box-border-box p-24">
 				<!-- 输入框 -->
 				<view class="pop-input" v-if="isShowIpnut">
-
 					<view class="head-pop flex-justify-space align-items-center mb-24 box-border-box p-24">
 						<view class="fs-28 fw-600 fc-41ABF5"></view>
 						<view class="fs-36 fc-0 fw-600">评论</view>
@@ -149,7 +148,6 @@
 					</view>
 
 				</view>
-				<!-- ----- -->
 				<view class="head-pop flex-justify-space align-items-center mb-24">
 					<view class=""></view>
 					<view class="align-items-center">
@@ -261,7 +259,8 @@
 		alumniReport,
 		setCreateRemark,
 		setRemarkLike,
-		delRemark
+		delRemark,
+		alumniBanner
 	} from '@/api/alumni.js';
 	import {
 		getCommonText
@@ -277,6 +276,19 @@
 		},
 		data() {
 			return {
+				bgckgroundBox: '',
+				BarH: 0,
+				bannerList: [],
+				dotStyle: {
+					width: 6,
+					bottom: 6,
+					backgroundColor: 'rgba(51, 51, 51,0.3)',
+					border: '1px rgba(0,0,0,0) solid',
+					color: '#fff',
+					selectedBackgroundColor: 'rgba(79, 179, 239,0.9)',
+					selectedBorder: '1px rgba(0,0,0,0) solid'
+				},
+				current: 0,
 				isShowIpnut: false,
 				classList: [],
 				total: 0,
@@ -335,6 +347,24 @@
 				}
 			})
 		},
+		onPageScroll(e) {
+			if (e.scrollTop > 1) {
+				this.bgckgroundBox = '#fff';
+			} else {
+				this.bgckgroundBox = 'transparent';
+			}
+		},
+		created() {
+			uni.getSystemInfo({
+				success: (e) => {
+					let statusBarH = e.statusBarHeight + 10
+					let custom = 0;
+					custom = wx.getMenuButtonBoundingClientRect()
+					let customBarH = custom.height;
+					this.BarH = statusBarH + customBarH;
+				}
+			})
+		},
 		mounted() {
 			uni.$on('circleDataUp', (data) => {
 				console.log(data, '*********************');
@@ -357,9 +387,21 @@
 			this.list = [];
 			this.fromData.page = 1;
 			this.getList();
+			this.alumniBanner()
 			this.getCommonText()
 		},
 		methods: {
+			bannerClock(item) {},
+			alumniBanner() {
+				alumniBanner().then((res) => {
+					if (res.code === 1) {
+						this.bannerList = res.data
+					}
+				})
+			},
+			change(e) {
+				this.current = e.detail.current
+			},
 			getCommonText() {
 				getCommonText().then((res) => {
 					if (res.code == 1) {
@@ -380,6 +422,7 @@
 					if (res.code === 1) {
 						this.classList = res.data;
 						this.classList.unshift({
+							image: require('@/static/img/school/icon.png'),
 							name: '全部贴子',
 							id: 0
 						});
@@ -408,7 +451,7 @@
 				let circleSchoolId = uni.getStorageSync('circleSchoolId');
 				let school_id = uni.getStorageSync('school_id');
 				this.fromData.school_id = circleSchoolId ? circleSchoolId : school_id
-				if(this.isAjax) {
+				if (this.isAjax) {
 					return
 				}
 				this.isAjax = true
@@ -674,6 +717,23 @@
 	}
 </style>
 <style scoped lang="scss">
+	.select-box{
+		position: sticky;
+		left: 0;
+		z-index: 10;
+	}
+	.swiper {
+		width: 100%;
+		height: 260rpx;
+		border-radius: 20rpx;
+	}
+
+	.swiper-item {
+		width: 100%;
+		height: 260rpx;
+		border-radius: 20rpx;
+	}
+
 	.card-2 {
 		word-wrap: break-word;
 	}
@@ -695,9 +755,9 @@
 	}
 
 	.label-box {
-		padding: 0 12rpx;
-		height: 38rpx;
-		line-height: 38rpx;
+		padding: 0 18rpx;
+		height: 48rpx;
+		line-height: 48rpx;
 	}
 
 	.wz {
@@ -820,12 +880,19 @@
 			}
 		}
 
+		.ft-img {
+			width: 30rpx;
+			height: 32rpx;
+		}
+
 		.circle-add {
-			width: 88rpx;
-			height: 88rpx;
-			position: absolute;
-			right: 32rpx;
-			bottom: 20vh;
+			background: linear-gradient(0deg, #55A7FF, #1561F6);
+			border-radius: 50%;
+			width: 100rpx;
+			height: 100rpx;
+			position: fixed;
+			right: 38rpx;
+			bottom: 126rpx;
 			z-index: 2;
 		}
 
@@ -837,7 +904,7 @@
 			width: 100%;
 			height: 260rpx;
 			filter: blur(80rpx);
-			background: linear-gradient(to right, #E1F2FD, #E0F3FA, #DBF8EF);
+			background: linear-gradient(to right, #E8E5F5, #E8EBF9, #D9EBFA);
 			position: absolute;
 			top: 0;
 			left: 0;
@@ -845,105 +912,73 @@
 		}
 
 		.ts-box {
-			width: 100%;
-			height: 72rpx;
-			background: linear-gradient(180deg, #FFDBD0 -50%, #FFFFFF 100%);
-			border-radius: 16rpx;
-
-			image {
-				width: 44rpx;
-				height: 44rpx;
-				margin-right: 8rpx;
-			}
+			padding-bottom: 20rpx;
+			border-bottom: 1rpx solid #efefef;
+		}
+
+		.tz-img {
+			width: 48rpx;
+			height: 48rpx;
+			margin-right: 14rpx;
 		}
 
 		.nav-box {
 			width: 100%;
-			overflow-x: scroll;
-
-			.h130 {
-				height: 130rpx !important;
-			}
+			padding: 27rpx 50rpx 47rpx;
 
 			.nav-item {
-				margin-right: 12rpx;
-				width: 144rpx;
-				height: 114rpx;
-				text-align: center;
-				border-radius: 20rpx;
+				margin-right: 48rpx;
+				width: 90rpx;
+				display: inline-block;
+				// height: auto;
 				position: relative;
 
 				.nav-icon {
-					width: 64rpx;
-					height: 64rpx;
-					margin: 12rpx auto 0 auto;
+					width: 90rpx;
+					height: 90rpx;
+					margin: 0 auto 24rpx;
 				}
+			}
 
-				.nav-bg {
-					width: 144rpx;
-					height: 130rpx;
-					position: absolute;
-					top: 0;
-					left: 0;
-					z-index: -1;
-				}
+			.nav-item:last-child {
+				margin: 0;
 			}
 		}
 
 		.type-box {
+			padding: 25rpx 30rpx;
+			background: #F2F3F7;
+
 			.box-s {
-				height: 50rpx;
-				line-height: 50rpx;
 				font-weight: 600 !important;
-				color: #41ABF5;
-				background: #E0F1FF !important;
+				color: #F6ABAC;
 				box-sizing: border-box;
-				border: 1rpx solid #70C0F8;
+				border: 1rpx solid #F6ABAC;
 			}
 
 			.box-1 {
-				padding: 0 32rpx;
-				height: 50rpx;
-				line-height: 50rpx;
-				margin-right: 20rpx;
-				background-color: #fff;
-				border-radius: 12rpx;
+				padding: 9rpx 19rpx;
+				margin-right: 48rpx;
+				border-radius: 20rpx;
 				font-size: 24rpx;
 				font-weight: 400;
 				box-sizing: border-box;
 			}
-
-			.box-2 {
-				width: 168rpx;
-				height: 50rpx;
-				line-height: 50rpx;
-				text-align: center;
-				border-radius: 12rpx 12rpx 12rpx 12rpx;
-				border: 1rpx solid #41ABF5;
-				box-sizing: border-box;
-			}
 		}
 
 		.card-box {
 			width: 100%;
 			min-height: 100rpx;
-			border-radius: 20rpx;
-			margin-bottom: 20rpx;
+			padding: 30rpx 30rpx 50rpx;
+			border-bottom: 1rpx solid #EEEEEE;
 
 			.card-head {
-				width: 80rpx;
-				height: 80rpx;
+				width: 90rpx;
+				height: 90rpx;
 				border-radius: 50%;
-				margin-right: 16rpx;
+				margin-right: 20rpx;
 			}
 
-			// .dian-img {
-			// 	width: 30rpx;
-			// 	height: 6rpx;
-			// 	margin-bottom: 24rpx;
-			// 	margin-left: auto;
-			// }
-
 			.hot-img {
 				width: 40rpx;
 				height: 40rpx;
@@ -982,11 +1017,6 @@
 					height: 40rpx;
 					margin-right: 8rpx;
 				}
-
-				.dian-img {
-					width: 30rpx;
-					height: 6rpx;
-				}
 			}
 		}
 	}

BIN
pages-school/static/ft.png


BIN
pages-school/static/hot.png


BIN
pages-school/static/jb.png


BIN
pages-school/static/tz.png


+ 13 - 1
pages.json

@@ -19,6 +19,12 @@
 				"selectedIconPath": "static/img/tabBar/home-highlight.png",
 				"text": "订单"
 			},
+			{
+				"pagePath": "pages/chat/index",
+				"iconPath": "static/img/tabBar/my.png",
+				"selectedIconPath": "static/img/tabBar/my-highlight.png",
+				"text": "Al助手"
+			},
 			{
 				"pagePath": "pages/me/index",
 				"iconPath": "static/img/tabBar/my.png",
@@ -45,6 +51,12 @@
 				"navigationBarTitleText": "订单"
 			}
 		},
+		{
+			"path": "pages/chat/index",
+			"style": {
+				"navigationBarTitleText": "Al助手"
+			}
+		},
 		{
 			"path": "pages/me/index",
 			"style": {
@@ -489,7 +501,7 @@
 		"current": 0,
 		"list": [{
 				"name": "列表调试",
-				"path": "pages-my/my-team",
+				"path": "pages-school/school-circle",
 				"query": "balance=2"
 			},
 			{

+ 340 - 0
pages/chat/index.vue

@@ -0,0 +1,340 @@
+<template>
+	<view class="box">
+		<view class="flex-common-css ">
+			<Nav title="AI助手" titleColor="#333" bgckgroundBox='#fff'></Nav>
+			<scroll-view :scroll-y="true" id="scroll-view-css" class="scroll-view-css" :scroll-top="scrollTop"
+				:scroll-with-animation="true" @scroll="scrolll">
+				<view class="chat-box" id="chat-box">
+					<msgItem v-for="(item,index) in chatData" :key="index" :item="item" :showType="item.showType"
+						:msgText="item.content" @selectStyle="selectStyle" @refresh="refresh"></msgItem>
+				</view>
+			</scroll-view>
+			<view class="bottom-box iPhone-bottom box-border-box">
+				<view class="input-box">
+					<!-- <view class="uni-input"> -->
+						<!-- <view class="input-left"> -->
+							<input type="text" v-model="chatText" placeholder="有问题尽管问我" class="input" @confirm="confirm"
+								:disabled='!sendControl'>
+						<!-- </view> -->
+					<!-- </view> -->
+				</view>
+			</view>
+		</view>
+	</view>
+
+</template>
+
+<script>
+	import tools from "@/service/tools.js";
+	import msgItem from "./msg-item.vue";
+	// import {
+	// 	qianfanSend,
+	// 	qianfanMsg_list,
+	// } from "@/api/qianfan.js"
+	import {
+		aiSend,
+		aiMsgList
+	} from "@/api/ai.js"
+	export default {
+		components: {
+			msgItem
+		},
+		data() {
+			return {
+				chatText: '',
+				chatType: 1,
+				scrollTop: 0,
+				chatData: [],
+				initialData: [],
+				// loadingStyle: false,
+				Ajax: false,
+				timer: null, //settimeout
+				showText: "",
+				typeName: '',
+				isScrolll: false,
+				scrolllTimeServe: null,
+				imgUrl: '',
+				fileUrl: '',
+				voiceUrl: '',
+				inputHeadShow: true,
+				sendControl: true
+			};
+		},
+		onShow() {
+			this.aiMsgList()
+		},
+		onLoad() {},
+		mounted() {},
+		methods: {
+			selectStyle(e) {
+				this.chatType = e
+				this.initialData.forEach((item) => {
+					if (this.chatType === item.type) {
+						this.typeName = item.name
+						let data = {
+							msg_type: 2,
+							content: '您好,我是' + this.typeName + 'AI小助手,有什么能帮助您吗?',
+							created_at: tools.getDate(),
+						}
+						this.chatData.push(data)
+						setTimeout(() => {
+							this.scrollToBottom()
+						}, 50)
+					}
+				})
+				// console.log(e);
+			},
+			aiSend() {
+				let that = this
+				let data = {
+					msg_type: 2,
+					content: '',
+					created_at: tools.getDate(),
+					showType: true,
+				}
+				this.chatData.push(data)
+				let key = this.chatData.length - 1
+				aiSend({
+					content: this.chatText,
+				}).then((res) => {
+					if (res.code == 1) {
+						this.imgUrl = ''
+						this.fileUrl = ''
+						this.voice_url = ''
+						this.chatText = ''
+						this.sendControl = true
+						// this.chatData[key].voice_url = res.data.voice_url
+						this.chatData[key].content = res.data.content
+						this.$nextTick(() => {
+							this.scrollToBottom()
+						})
+					} else {
+						this.chatData[key].content = msg
+					}
+				})
+			},
+			refresh(num) {
+				// this.$nextTick(() => {
+				if (num) {
+					// console.log("高度");
+					// this.scrollTop = 99999
+					console.log('最终')
+					setTimeout(() => {
+						this.scrollToBottom(50)
+					}, 50)
+				} else {
+					console.log('回调执行')
+					this.scrollToBottom(0)
+					// setTimeout(()=>{
+					//   this.scrollToBottom()
+					// },10)
+				}
+				// })
+			},
+			aiMsgList() {
+				this.chatData = []
+				aiMsgList().then((res) => {
+					if (res.code == 1) {
+						let data = res.data.items.reverse()
+						data.forEach((itm) => {
+							itm.showType = false
+						})
+						this.chatData.push(...data)
+					}
+				})
+			},
+			onTabItemTap() {
+				uni.hideTabBar()
+			},
+			leftClick() {
+				uni.switchTab({
+					url: 'pages/index/index'
+				})
+				uni.showTabBar()
+			},
+			confirm(event) {
+				if (this.sendControl) {
+					if (event.target.value) {
+						let timeData = tools.getDate()
+						let text = {
+							created_at: timeData,
+							msg_type: 1,
+							content: event.target.value,
+							img_url: this.imgUrl,
+							file_url: this.fileUrl
+						}
+						this.chatData.push(text)
+						this.inputHeadShow = false
+						this.sendControl = false
+						this.$nextTick(() => {
+							this.scrollToBottom()
+						})
+						this.aiSend()
+						// this.lading()
+						this.chatText = ''
+					} else {
+						uni.showToast({
+							title: '请输入问题',
+							icon: 'none',
+							duration: 1000
+						});
+					}
+				}
+			},
+			scrolll(e) {
+				console.log(e,'eeee');
+			},
+			scrollToBottom(num) {
+				let query = uni.createSelectorQuery().in(this)
+				query.select('#scroll-view-css').boundingClientRect()
+				query.select('#chat-box').boundingClientRect()
+				query.exec((res) => {
+					//如果子元素高度大于父元素高度(显示高度)
+					if (res[1].height > res[0].height) {
+						//计算出二者差值就是需要滚动的距离
+						let scrollTop = res[1].height - res[0].height
+						let differenceNum = scrollTop - this.scrollTop
+						console.log(differenceNum, 'differenceNum');
+						console.log(scrollTop, 'scrollTop');
+						if (differenceNum > 50) {
+							this.scrollTop = scrollTop + 50
+							console.log('differenceNum > 50');
+						} else if (num > 0) {
+							this.scrollTop = scrollTop + num
+							console.log('num > 0');
+						}
+					}
+				})
+			},
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.box {
+		background: #fff;
+		position: relative;
+
+		.popup-block {
+			border-radius: 20rpx 20rpx 0rpx 0rpx;
+			overflow: hidden;
+			background-color: #f5f5f5;
+
+			.popup-row {
+				height: 100rpx;
+				background-color: #fff;
+				text-align: center;
+				line-height: 100rpx;
+				border-bottom: 2rpx solid #f5f5f5;
+
+				&:nth-child(4) {
+					margin-bottom: 20rpx;
+				}
+
+				&:last-child {
+					height: 112rpx;
+					border: none;
+					line-height: 112rpx;
+				}
+
+				&:active {
+					background-color: rgb(244, 244, 244);
+				}
+			}
+		}
+
+		.chat-box {
+			padding: 22rpx 32rpx 1rpx;
+			box-sizing: border-box;
+
+			.dialogue-box {
+				// width: 100%;
+				height: auto;
+				margin: 0 0 40rpx 0;
+				display: flex;
+				flex-direction: column;
+
+				.time {
+					font-size: 24rpx;
+					color: #999999;
+					margin: 0 0 8rpx 0;
+				}
+
+				.dialogue {
+					padding: 24rpx;
+					box-sizing: border-box;
+					word-break: break-all;
+					font-size: 30rpx;
+
+					.dialogue-text {}
+
+					.dialogue-text-one {
+						color: #333333;
+					}
+
+					.dialogue-text-two {
+						color: #FFFFFF;
+					}
+
+					.initial-box {
+
+						.initial-title {
+							font-size: 30rpx;
+							font-weight: 600;
+							color: #333333;
+							margin: 0 0 12rpx 0;
+						}
+
+						.initial-style {
+							font-size: 30rpx;
+							color: #2F80ED;
+							margin: 0 0 12rpx 0;
+						}
+
+						.initial-style:last-child {
+							margin: 0;
+						}
+					}
+				}
+
+				.dialogue-one {
+					background: #F7F8FC;
+					border-radius: 10rpx 10rpx 10rpx 0;
+				}
+
+				.dialogue-two {
+					background: #FDAB26;
+					border-radius: 10rpx 10rpx 0 10rpx;
+				}
+			}
+
+			.dialogue-box-one {
+				align-items: flex-start;
+			}
+
+		}
+
+		.bottom-box {
+			position: relative;
+
+			.input-box {
+				width: 100%;
+				height: 100rpx;
+				height: auto;
+				background: #fff;
+				padding: 10rpx 32rpx;
+				box-sizing: border-box;
+				border-top: 1rpx solid #EEEEEE;
+				transition: all .1s linear;
+			}
+		}
+	}
+	.input {
+		background: #F2F2F2;
+		border-radius: 200rpx;
+		width: 100%;
+		height: 80rpx;
+		padding: 20rpx 170rpx 20rpx 24rpx;
+		box-sizing: border-box;
+	}
+</style>

+ 380 - 0
pages/chat/msg-item.vue

@@ -0,0 +1,380 @@
+<template>
+  <view class="">
+    <view class="dialogue-box" :class="item.msg_type == 2 ||item.msg_type == 3 ?'dialogue-box-one':'dialogue-box-two'">
+      <view class="time">
+        {{item.created_at}}
+      </view>
+      <view class="dialogue">
+        <view class="dialogue-text" :class="item.msg_type == 2 ?'dialogue-text-one':'dialogue-text-two'"
+          v-if="(item.msg_type == 1 ||item.msg_type == 2) && showText">
+          <!-- {{item.content}} -->
+          <!--					{{showText}}-->
+          <view class="" :class="item.msg_type == 2?'showText-color-one':'showText-color-two'" v-html="showText"></view>
+          <view class="voice-box" v-if="item.voice_url">
+            <view class="voice-box-left" v-if="item.msg_type == 1">
+              <image @click="voiceTwo" v-if="!voiceShwo" class="voice-img" src="@/static/img/chat/voice-n.png" mode="">
+              </image>
+              <image @click="voice(true,item)" v-else class="voice-img" src="@/static/img/chat/voice-y.png" mode="">
+              </image>
+            </view>
+            <view class="voice-box-left" v-else-if="item.msg_type == 2">
+              <image @click="voiceTwo" v-if="!voiceShwo" class="voice-img" src="@/static/img/chat/voice-n-two.png"
+                mode=""></image>
+              <image @click="voice(true,item)" v-else class="voice-img" src="@/static/img/chat/voice-y-two.png" mode="">
+              </image>
+            </view>
+            <image v-if="item.msg_type == 2" class="voice-box-right" src="../../static/img/chat/voice-img.png" mode="">
+            </image>
+            <image v-else class="voice-box-right" src="../../static/img/chat/voice-two-img.png" mode=""></image>
+          </view>
+
+        </view>
+        <view class="dialogue-text dialogue-text-one loading " v-if="item.msg_type == 2 && showText ==''">
+          <text></text>
+          <text></text>
+          <text></text>
+          <text></text>
+        </view>
+        <view class="initial-box dialogue-text-one" v-if="item.msg_type == 3">
+          <view class="initial-title">
+            {{item.title}}
+          </view>
+          <view class="initial-style" v-for="(itemTwo,indexTwo) in item.text" :key="indexTwo"
+            @click="selectStyle(itemTwo.type)">
+            {{itemTwo.msg}}
+          </view>
+        </view>
+      </view>
+      <view class="dialogue">
+        <view class="diaologue-img-box" v-if="item.img_url">
+          <image class="diaologue-img" @click="lookImg(item.img_url)" :src="item.img_url" mode="aspectFill"></image>
+        </view>
+      </view>
+      <view class="dialogue">
+        <view class="diaologue-file-box" v-if="item.file_url">
+          <image class="diaologue-file-img" src="@/static/img/chat/wj-img.png" mode="aspectFill"></image>
+          <view class="diaologue-file-name-box">
+            <view class="diaologue-file-name">
+              {{fileName(item.file_url)}}
+            </view>
+            <!-- <view class="diaologue-file-time">
+							2023-12-15
+						</view> -->
+          </view>
+        </view>
+      </view>
+    </view>
+  </view>
+
+</template>
+
+<script>
+  export default {
+    props: {
+      item: {
+        default: function() {
+          return ''
+        }
+      },
+      msgText: {
+        default: function() {
+          return ''
+        }
+      },
+      showType: {
+        default: function() {
+          return false
+        }
+      }
+    },
+    data() {
+      return {
+        showText: '',
+        num: 1,
+        id: '',
+        voiceShwo: true,
+        voiceUrl: '',
+        voiceStyle: true,
+      };
+    },
+    watch: {
+      'msgText': function() {
+        if (this.msgText !== '') {
+          this.setText()
+        }
+      }
+    },
+    mounted() {
+      this.setText()
+    },
+    methods: {
+      voice(bur, id) {
+        if (this.voiceStyle) {
+          this.voiceUrl = uni.createInnerAudioContext();
+          this.voiceUrl.autoplay = true;
+          this.voiceUrl.src = this.item.voice_url;
+          this.voiceUrl.play();
+          this.voiceShwo = false;
+        } else {
+          this.voiceUrl.play();
+          this.voiceShwo = false;
+        };
+        this.voiceUrl.onEnded((res) => {
+          this.voiceShwo = true;
+          this.voiceStyle = true
+        })
+      },
+      voiceTwo() {
+        this.voiceUrl.pause();
+        this.voiceShwo = true;
+        this.voiceStyle = false
+      },
+      fileName(item) {
+        let fileName = item.match(/\/([^\/]+)$/)[1];
+        return fileName
+      },
+      lookImg(item) {
+        let imgList = []
+        imgList.push(item)
+        uni.previewImage({
+          current: 0,
+          urls: imgList,
+        });
+      },
+      selectStyle(type) {
+        this.$emit('selectStyle', type)
+      },
+      setText() {
+        if (this.showType) {
+          this.appear(this.msgText)
+        } else {
+          // console.log('---------------------------------'+this.msgText)
+          // this.showText = this.msgText.replace(/\/n/g, 'aaaaa');
+          this.showText = this.msgText;
+          // console.log(this.showText)
+        }
+      },
+      appear(content) {
+        if (content === '') {
+          return
+        }
+        const _this = this;
+        this.showText = "";
+        clearTimeout(this.timer);
+        let speed = 50; //设置定时的速度 越来越快
+        let count = 1;
+        content = content.replace(/\/n/g, '<br/>');
+        // console.log(content)
+        let num = 1;
+
+        function changeContent() {
+          _this.showText = content.substring(0, count); //截取字符串
+          count++;
+          if (count !== content.length + 1) {
+            speed -= 1;
+            if (speed < 5) speed = 5;
+
+            _this.timer = setTimeout(changeContent, speed);
+            if (_this.showText.length % 100 === 0) _this.$emit('refresh', false)
+          } else {
+            console.log("执行");
+            _this.$emit('refresh', true)
+          }
+        }
+        changeContent();
+      },
+    }
+  }
+</script>
+
+<style lang="scss">
+  .loading {
+    width: auto;
+    height: 15rpx;
+    display: flex;
+    align-items: center;
+    padding: 17rpx 30rpx;
+  }
+
+  .loading text {
+    // display: inline-block;
+    width: 15rpx;
+    height: 15rpx;
+    margin-right: 5px;
+    border-radius: 50%;
+    background: #F2BA0B;
+    -webkit-animation: load 1.04s ease infinite;
+  }
+
+  .loading text:last-child {
+    margin-right: 0px;
+  }
+
+  @-webkit-keyframes load {
+    0% {
+      opacity: 1;
+    }
+
+    100% {
+      opacity: 0;
+    }
+  }
+
+  .loading text:nth-child(1) {
+    -webkit-animation-delay: 0.13s;
+  }
+
+  .loading text:nth-child(2) {
+    -webkit-animation-delay: 0.26s;
+  }
+
+  .loading text:nth-child(3) {
+    -webkit-animation-delay: 0.39s;
+  }
+
+  .loading text:nth-child(4) {
+    -webkit-animation-delay: 0.52s;
+  }
+
+  .dialogue-box {
+    // width: 100%;
+    height: auto;
+    margin: 0 0 40rpx 0;
+    display: flex;
+    flex-direction: column;
+
+    .time {
+      font-size: 24rpx;
+      color: #999999;
+      margin: 0 0 8rpx 0;
+    }
+
+    .dialogue {
+      // word-break: break-all;
+      // font-size: 30rpx;
+
+      .dialogue-text {
+        padding: 24rpx;
+        box-sizing: border-box;
+        white-space: pre-wrap;
+
+        .voice-box {
+          padding: 20rpx 0 0 0;
+          display: flex;
+          align-items: center;
+
+          .voice-box-left {
+            .voice-img {
+              width: 48rpx;
+              height: 48rpx;
+              margin: 0 16rpx 0 0;
+            }
+          }
+
+          .voice-box-right {
+            width: 120rpx;
+            height: 26rpx;
+          }
+        }
+      }
+
+      .showText-color-one {
+        color: #333333;
+      }
+
+      .showText-color-two {
+        color: #FFFFFF;
+      }
+
+      .diaologue-img-box {
+        max-width: 638rpx;
+        height: auto;
+        background: #fff;
+        margin: 8rpx 0 0 0;
+
+        .diaologue-img {
+          border-radius: 20rpx;
+        }
+      }
+
+      .diaologue-file-box {
+        display: flex;
+        align-items: center;
+        padding: 24rpx;
+        box-sizing: border-box;
+        // background: #fff;
+        border: 2rpx solid #EEEEEE;
+        border-radius: 10rpx;
+        margin: 8rpx 0 0 0;
+
+        .diaologue-file-img {
+          width: 63rpx;
+          height: 77rpx;
+          margin: 0 16rpx 0 0;
+        }
+
+        .diaologue-file-name-box {
+          .diaologue-file-name {
+            max-width: 534rpx;
+            font-size: 30rpx;
+            color: #323333;
+            margin: 0 0 4rpx 0;
+            white-space: nowrap;
+            text-overflow: ellipsis;
+            overflow: hidden;
+            word-break: break-all;
+          }
+
+          .diaologue-file-time {
+            font-size: 24rpx;
+            color: #999999;
+          }
+        }
+      }
+
+
+
+      .dialogue-text-one {
+        background: #F7F8FC;
+        border-radius: 10rpx 10rpx 10rpx 0;
+      }
+
+      .dialogue-text-two {
+        background: #FDAB26;
+        border-radius: 10rpx 10rpx 0 10rpx;
+        max-width: 592rpx;
+      }
+
+      .initial-box {
+        padding: 24rpx;
+        box-sizing: border-box;
+
+        .initial-title {
+          font-size: 30rpx;
+          font-weight: 600;
+          color: #333333;
+          // margin: 0 0 12rpx 0;
+          padding: 0 0 12rpx 0;
+        }
+
+        .initial-style {
+          font-size: 30rpx;
+          color: #2F80ED;
+          margin: 0 0 12rpx 0;
+        }
+
+        .initial-style:last-child {
+          margin: 0;
+        }
+      }
+    }
+  }
+
+  .dialogue-box-one {
+    align-items: flex-start;
+  }
+
+  .dialogue-box-two {
+    align-items: flex-end;
+  }
+</style>

+ 16 - 0
service/tools.js

@@ -152,6 +152,22 @@ tools.leftClick = function () {
 }
 
 
+/**
+ * 获取日期
+ * @returns {string}
+ */
+tools.getDate = function() {
+	let myDate = new Date();
+	let myYear = myDate.getFullYear(); //获取完整的年份(4位,1970-????)
+	let myMonth = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月)
+	let myToday = myDate.getDate(); //获取当前日(1-31)
+	let myDay = myDate.getDay(); //获取当前星期X(0-6,0代表星期天)
+	let myHour = myDate.getHours(); //获取当前小时数(0-23)
+	let myMinute = myDate.getMinutes(); //获取当前分钟数(0-59)
+	let mySecond = myDate.getSeconds(); //获取当前秒数(0-59)
+	return myDate.getFullYear() + '-' + (myDate.getMonth() + 1) + '-' + myDate.getDate() + ' ' + myHour + ':' + myMinute
+}
+
 tools.updateVersion = function (sysVersion, appUrl) {
     let app_version = plus.runtime.version;
     console.log('版本号信息对比------------------------------' + app_version + '---------' + sysVersion)

BIN
static/img/tabBar/ai.png