yumaochao
... ... @@ -175,3 +175,6 @@ export { ReserveItemBean } from './src/main/ets/bean/live/ReserveItemBean';
export { FeedbackTypeBean } from './src/main/ets/bean/detail/FeedbackTypeBean';
export { FeedBackParams } from './src/main/ets/bean/content/FeedBackParams';
... ...
... ... @@ -85,6 +85,8 @@ export class ContentDTO implements BaseDTO {
// 链接类型: 0:无链接;1:内链(文章);2:外链
openType: string = '';
extra: string = ''
sameContentList:ContentDTO[] = []
sameContentListJson:string = ""
/*
本地辅助字段
*/
... ...
export interface FeedBackParams {
content:string
classifyFlagIds:string
userContact:string
userName:string
appVersion:string
appDevice:string
}
\ No newline at end of file
... ...
export interface FeedbackTypeBean {
classifyName: string;
id: number;
isselect: boolean;
isSelect: boolean;
}
\ No newline at end of file
... ...
import { FeedbackTypeBean, PhotoListBean } from 'wdBean/Index';
import { FeedBackParams, FeedbackTypeBean, PhotoListBean } from 'wdBean/Index';
import { AppUtils,
DeviceUtil,
FastClickUtil, Logger, NetworkUtil, StringUtils, ToastUtils, UserDataLocal } from 'wdKit/Index';
... ... @@ -60,9 +60,9 @@ export struct FeedBackActivity {
GridCol({
}) {
Row(){
Toggle({ type: ToggleType.Checkbox, isOn: false })
Toggle({ type: ToggleType.Checkbox, isOn: feedbackTypeBean.isSelect })
.onChange((select) => {
feedbackTypeBean.isselect = select
feedbackTypeBean.isSelect = select
this.canSubmit = this.checkSubmit()
})
Text(feedbackTypeBean.classifyName)
... ... @@ -325,8 +325,8 @@ export struct FeedBackActivity {
//问题类型必选
let selectType = ""
this.feedbackTypeBeans.forEach((value) => {
if(value.isselect){
selectType = selectType+","
if(value.isSelect){
selectType = selectType+value.id+","
}
})
if(!StringUtils.isEmpty(selectType)){
... ... @@ -343,29 +343,31 @@ export struct FeedBackActivity {
}
try {
let map: HashMap<String,String> = {} as HashMap<String,String>
//反馈内容
map.set("content", this.contact);
//投诉类型 id
map.set("classifyFlagIds", selectType);
if(!StringUtils.isEmpty(this.email)){
let feedBackParams: FeedBackParams = {
//反馈内容
"content": this.contact,
//投诉类型 id
"classifyFlagIds": selectType,
//设备
"appVersion": "V" + AppUtils.getAppVersionName(),
"appDevice": "harmony" + DeviceUtil.getDisplayVersion() + " " + DeviceUtil.getProductModel()
} as FeedBackParams
//邮箱
map.set("userContact", this.email);
if(!StringUtils.isEmpty(this.email)){
feedBackParams.userContact = this.email
}
//用户名称
if (!StringUtils.isEmpty(UserDataLocal.getUserName())) {
map.set("userName", UserDataLocal.getUserName());
if(!StringUtils.isEmpty(UserDataLocal.getUserName())){
feedBackParams.userName = UserDataLocal.getUserName()
}
//设备
map.set("appVersion", "V" + AppUtils.getAppVersionName());
map.set("appDevice", "harmony" + DeviceUtil.getDisplayVersion() + " " + DeviceUtil.getProductModel());
// //投诉图片
// if (imageUrl.size() > 0) {
// String[] str = imageUrl.toArray(new String[imageUrl.size()]);
// map.set("imageUrls", str);
// }
await MultiPictureDetailViewModel.feedBackCommit(map)
await MultiPictureDetailViewModel.feedBackCommit(feedBackParams)
router.back();
} catch (exception) {
console.log('请求失败',JSON.stringify(exception))
}
... ...
/**
* More_Comp
*/
import { ContentDTO } from 'wdBean/Index';
const TAG: string = 'Card9Component';
@Entry
@Component
export struct MoreComponent {
@State contentDTO: ContentDTO = new ContentDTO();
build() {
Row() {
... ...
... ... @@ -49,7 +49,7 @@ export struct SearchComponent {
getRelatedSearchContent() {
if(StringUtils.isNotEmpty(this.searchText)){
SearcherAboutDataModel.getRelatedSearchContentData(encodeURI(this.searchText),getContext(this)).then((value) => {
if (value != null) {
if (value != null && value.length > 0) {
this.relatedSearchContentsData = []
value.forEach(item=>{
let tempValue:string = item
... ... @@ -81,6 +81,9 @@ export struct SearchComponent {
this.relatedSearchContentsData.push(new SearchRelatedItem(item,tempArr))
}
})
}else{
this.hasInputContent = false
this.relatedSearchContentsData = []
}
}).catch((err: Error) => {
console.log(TAG, JSON.stringify(err))
... ... @@ -228,7 +231,7 @@ export struct SearchComponent {
Row() {
//左
Stack({ alignContent: Alignment.Start }) {
if (this.searchTextData != null && this.searchTextData.length > 0 && !this.hasInputContent) {
if (this.searchTextData != null && this.searchTextData.length > 0 && !this.hasInputContent && StringUtils.isEmpty(this.searchText)) {
Swiper(this.swiperController) {
ForEach(this.searchTextData, (item: string, index: number) => {
Text(item)
... ...
... ... @@ -20,12 +20,16 @@ import { FollowListDetailItem } from '../../viewmodel/FollowListDetailItem'
import { FollowListStatusRequestItem } from '../../viewmodel/FollowListStatusRequestItem'
import { QueryListIsFollowedItem } from '../../viewmodel/QueryListIsFollowedItem'
import { SearchResultContentData } from '../../viewmodel/SearchResultContentData'
import { SearchResultContentItem, SearchRmhDescription } from '../../viewmodel/SearchResultContentItem'
import {
SearchDescription,
SearchResultContentItem, SearchRmhDescription } from '../../viewmodel/SearchResultContentItem'
import { CardParser } from '../CardParser'
import { FollowChildComponent } from '../mine/follow/FollowChildComponent'
import { ListHasNoMoreDataUI } from '../reusable/ListHasNoMoreDataUI'
import { ActivityItemComponent } from './ActivityItemComponent'
import { SearchCreatorComponent } from './SearchCreatorComponent'
import { JSON } from '@kit.ArkTS'
import { MoreComponent } from '../cardview/MoreComponent'
const TAG = "SearchResultContentComponent"
... ... @@ -34,6 +38,7 @@ export struct SearchResultContentComponent {
@State keywords: string = ""
@State searchType: string = ""
@State data: LazyDataSource<ContentDTO> = new LazyDataSource();
tempList : ContentDTO[] = []
@State data_rmh: SearchRmhDescription[] = []
@State count: number = -1;
@State isLoading: boolean = false
... ... @@ -62,7 +67,7 @@ export struct SearchResultContentComponent {
getNewSearchResultData() {
this.isLoading = true
if (this.hasMore) {
SearcherAboutDataModel.getSearchResultListData("15", `${this.curPageNum}`, this.searchType, this.keywords,
SearcherAboutDataModel.getSearchResultListData("20", `${this.curPageNum}`, this.searchType, this.keywords,
getContext(this)).then((value) => {
console.log('SearcherAboutDataModel', JSON.stringify(value))
if (!this.data || value.list.length == 0) {
... ... @@ -183,9 +188,8 @@ export struct SearchResultContentComponent {
resultData.list.forEach((value:SearchResultContentItem) => {
creatorIdList.push(value.data.creatorId)
})
let isRemain : boolean = false
SearcherAboutDataModel.getCreatorDetailListData({creatorIdList:creatorIdList}).then((rem) => {
resultData.list.forEach((value) => {
let photos: FullColumnImgUrlDTO[] = []
// if (value.data.appStyle === 4) {
... ... @@ -196,42 +200,98 @@ export struct SearchResultContentComponent {
// }
let contentDTO = this.dataTransform(rem,value, photos);
if(value.data.type != "13"){
this.data.push(contentDTO)
this.tempList.push(contentDTO)
if(value.data.sameContentList != null && value.data.sameContentList.length > 0) {
let contentDTO2 = new ContentDTO();
contentDTO2.sameContentListJson = JSON.stringify(value.data.sameContentList)
isRemain = true
this.tempList.push(contentDTO2)
}
}
})
if(!isRemain){
this.tempList.forEach((value) => {
this.data.push(value)
})
this.tempList = []
this.data.notifyDataReload()
this.count = this.data.totalCount()
if (this.count < resultData.totalCount) {
this.curPageNum++
} else {
this.hasMore = false
}
this.isLoading = false
}else{
this.dealSameContent(resultData.totalCount)
}
}).catch((err: Error) => {
console.log(TAG, JSON.stringify(err))
})
this.data.notifyDataReload()
this.count = this.data.totalCount()
if (this.data.totalCount() < resultData.totalCount) {
this.curPageNum++
} else {
this.hasMore = false
}
}).catch((err: Error) => {
console.log(TAG, "请求失败")
this.isLoading = false
this.count = this.count === -1 ? 0 : this.count
})
}
if (this.count === 0 && resultData.list.length > 0) {
this.count = -1
if (!this.isLoading) {
//加载分页数据
this.getNewSearchResultData()
async dealSameContent(count:number){
this.tempList.forEach(async (tempValue) => {
if(StringUtils.isNotEmpty(tempValue.sameContentListJson)){
let data: contentListParams = {
contentList: []
}
} else if (this.count <= 10 && resultData.list.length > 0) {
if (!this.isLoading) {
//加载分页数据
this.getNewSearchResultData()
let resultData : SearchDescription[] = JSON.parse(tempValue.sameContentListJson) as SearchDescription[]
if(resultData!=null){
resultData.forEach((item) => {
data.contentList.push({
contentId: item.id + '',
contentType: Number.parseInt(item.type)
})
})
let newValue = await SearcherAboutDataModel.getInteractListData(data, getContext(this))
newValue.forEach((item) => {
resultData.forEach((data) => {
if (item.contentId == data.id) {
data.collectNum = item.collectNum + ""
data.commentNum = item.commentNum + ""
data.likeNum = item.likeNum + ""
data.readNum = item.readNum + ""
data.shareNum = item.shareNum + ""
}
})
})
let creatorIdList: string[] = []
resultData.forEach((value:SearchDescription) => {
creatorIdList.push(value.creatorId)
})
let rem = await SearcherAboutDataModel.getCreatorDetailListData({creatorIdList:creatorIdList})
resultData.forEach((value) => {
let photos: FullColumnImgUrlDTO[] = []
value.appStyleImages.split("&&").forEach((value) => {
const resizeParams = this.extractResizeParams(value)
photos.push({ fullUrl: value,weight:resizeParams.width,height:resizeParams.height, } as FullColumnImgUrlDTO)
})
let contentDTO = this.dataTransform2(rem,value, photos);
tempValue.sameContentList.push(contentDTO)
})
}
}
}).catch((err: Error) => {
console.log(TAG, "请求失败")
this.isLoading = false
this.count = this.count === -1 ? 0 : this.count
})
this.tempList.forEach((value) => {
this.data.push(value)
})
this.tempList = []
this.data.notifyDataReload()
this.count = this.data.totalCount()
if (this.count < count) {
this.curPageNum++
} else {
this.hasMore = false
}
this.isLoading = false
}
build() {
... ... @@ -258,6 +318,8 @@ export struct SearchResultContentComponent {
Column() {
if (this.searchType == "activity") {
ActivityItemComponent({ contentDTO: item })
}else if(item.sameContentList != null && item.sameContentList.length > 0){
MoreComponent({ contentDTO: item })
} else {
CardParser({compDTO:new CompDTO, contentDTO: item })
}
... ... @@ -284,7 +346,6 @@ export struct SearchResultContentComponent {
.onReachEnd(() => {
console.log(TAG, "触底了");
if (!this.isLoading) {
//加载分页数据
this.getNewSearchResultData()
}
})
... ... @@ -476,10 +537,94 @@ export struct SearchResultContentComponent {
contentDTO.shareFlag = value.data.shareFlag
contentDTO.contentText = value.data.contentText
return contentDTO;
}
private dataTransform2(rem:CreatorDetailResponseItem[],value: SearchDescription, photos: FullColumnImgUrlDTO[]): ContentDTO {
let rmhInfo = this.getRmhInfo2(rem,value)
console.log('获取photos',JSON.stringify(photos))
console.log('获取value2',JSON.stringify(value))
let contentDTO = new ContentDTO();
contentDTO.appStyle = value.appStyle + ""
contentDTO.cityCode = value.cityCode
contentDTO.coverSize = ""
contentDTO.coverType = value.type == "5" ? 1 : -1
contentDTO.coverUrl =
this.searchType == "activity" ? value.zhChannelPageImg : value.appStyleImages.split("&&")[0];
contentDTO.description = value.description
contentDTO.districtCode = value.districtCode
contentDTO.endTime = value.endTime
contentDTO.hImageUrl = ""
contentDTO.heatValue = ""
contentDTO.innerUrl = ""
contentDTO.landscape = Number.parseInt(value.landscape)
contentDTO.linkUrl = value.linkUrl
contentDTO.openLikes = Number.parseInt(value.openLikes)
contentDTO.openUrl = ""
contentDTO.pageId = value.pageId
contentDTO.programAuth = ""
contentDTO.programId = ""
contentDTO.programName = ""
contentDTO.programSource = -1
contentDTO.programType = Number.parseInt(value.status)
contentDTO.provinceCode = value.provinceCode
contentDTO.showTitleEd = value.showTitleEd
contentDTO.showTitleIng = value.showTitleIng
contentDTO.showTitleNo = value.showTitleNo
contentDTO.startTime = value.startTime
contentDTO.subType = ""
contentDTO.subtitle = ""
contentDTO.title = value.title
contentDTO.vImageUrl = ""
contentDTO.screenType = ""
contentDTO.source = StringUtils.isEmpty(value.creatorName) ? value.sourceName : value.creatorName
contentDTO.objectId = value.id
contentDTO.objectType = value.type
contentDTO.channelId = value.channelId
contentDTO.relId = value.relId
contentDTO.relType = value.relType
contentDTO.newsTitle = value.titleLiteral;
contentDTO.publishTime =
StringUtils.isNotEmpty(value.firstPublishTime) ? value.firstPublishTime : value.publishTime
contentDTO.visitorComment = -1
contentDTO.fullColumnImgUrls = photos
contentDTO.newsSummary = ""
contentDTO.hasMore = -1
contentDTO.slideShows = []
contentDTO.voiceInfo = {} as VoiceInfoDTO
contentDTO.tagWord = -1
contentDTO.isSelect = true
contentDTO.rmhInfo = {} as RmhInfoDTO
contentDTO.photoNum = -1
contentDTO.liveInfo = {} as LiveInfoDTO;
contentDTO.videoInfo = {
videoDuration: Number.parseInt(value.duration)
} as VideoInfoDTO;
let interact = new InteractDataDTO()
interact.collectNum = value.collectNum
interact.commentNum = value.commentNum
interact.contentId = value.id
interact.contentType = Number.parseInt(value.type)
interact.likeNum = value.likeNum
interact.readNum = Number.parseInt(value.readNum)
interact.shareNum = Number.parseInt(value.shareNum)
contentDTO.interactData = interact
contentDTO.corner = ''
contentDTO.rmhPlatform = 0
contentDTO.newTags = ''
contentDTO.isSearch = true
contentDTO.publishTimestamp = ""
contentDTO.bottomNavId = '';
contentDTO.openType = '';
contentDTO.extra = '';
contentDTO.titleShow = value.type == "5" ? 1 : 0;
contentDTO.rmhInfo = rmhInfo
contentDTO.shareFlag = value.shareFlag
contentDTO.contentText = value.contentText
return contentDTO;
}
}
// 搜索数据转化rmhInfo
private getRmhInfo(rem:CreatorDetailResponseItem[],value:SearchResultContentItem){
let obj = value.data
... ... @@ -535,6 +680,65 @@ export struct SearchResultContentComponent {
}
return rmhInfo
}
// 搜索数据转化rmhInfo
private getRmhInfo2(rem:CreatorDetailResponseItem[],value:SearchDescription){
let obj = value
let rmhInfo:RmhInfoDTO = {
rmhHeadUrl:obj.headerPhotoUrl,
rmhName:obj.creatorName,
rmhId:obj.creatorId,
authIcon:obj.authIcon,
authTitle: obj.authTitle,
authTitle2: '',
banControl: 0,
cnIsAttention: 0,
cnAttention: 0,
cnlsComment: 0,
cnlsLike: 0,
cnMainControl: 0,
cnShareControl: 0,
cnIsComment: 0,
cnIsLike:0,
posterShareControl: 0,
rmhDesc: obj.introduction,
userId: obj.userId,
userType: obj.userType,
honoraryIcon:''
}
if(rem.length>0){
rem.forEach(item=>{
if(item.creatorId === obj.creatorId){
rmhInfo = {
rmhHeadUrl:item.headPhotoUrl,
rmhName:item.userName,
rmhId:item.creatorId,
authIcon:item.authIcon,
authTitle: item.authTitle,
authTitle2: '',
banControl: 0,
cnIsAttention:item.isAttention,
cnAttention: 0,
cnlsComment: 0,
cnlsLike: 0,
cnMainControl: 0,
cnShareControl: 0,
cnIsComment: 0,
cnIsLike:0,
posterShareControl: 0,
rmhDesc: item.introduction,
userId: item.userId,
userType: item.userType,
honoraryIcon:''
}
}
})
}
return rmhInfo
}
private extractResizeParams(url: string) {
const heightRegex = /h_(\d+)/; // 匹配高度参数,如h_450
const widthRegex = /w_(\d+)/; // 匹配宽度参数,如w_800
... ...
... ... @@ -8,11 +8,12 @@ import { ContentDetailDTO,
postBatchAttentionStatusResult,
postInteractBrowsOperateParams,
InteractDataDTO,
FeedbackTypeBean
FeedbackTypeBean,
FeedBackParams
} from 'wdBean';
import { PageRepository } from '../repository/PageRepository';
import { ArrayList } from '@kit.ArkTS';
import { ToastUtils} from 'wdKit/Index';
const TAG = 'MultiPictureDetailViewModel';
export class MultiPictureDetailViewModel {
... ... @@ -158,15 +159,16 @@ export class MultiPictureDetailViewModel {
})
}
static async feedBackCommit(params:HashMap<String,String>): Promise<ResponseDTO> {
return new Promise<ResponseDTO>((success, error) => {
static async feedBackCommit(params:FeedBackParams): Promise<object> {
return new Promise<object>((success, error) => {
Logger.info(TAG, `fetchDetailData start`);
WDHttp.post(HttpUrlUtils.getHost() + HttpUrlUtils.FEEDBACK_COMMIT_PATH,params).then((resDTO: ResponseDTO) => {
WDHttp.post(HttpUrlUtils.getHost() + HttpUrlUtils.FEEDBACK_COMMIT_PATH,params).then((resDTO: object) => {
success(resDTO);
ToastUtils.shortToast('反馈成功')
}).catch((err: Error) => {
Logger.error(TAG, `fetchDetailData catch, error.name : ${err.name}, error.message:${err.message}`);
error(err);
ToastUtils.shortToast('反馈失败')
})
})
}
... ...
... ... @@ -5,7 +5,7 @@ export class SearchResultContentItem{
resultType:string = ""
}
class SearchDescription{
export class SearchDescription{
likeEnable: string = ""
previewUri: string = ""
firstFrameImageBucket: string = ""
... ... @@ -178,7 +178,7 @@ class SearchDescription{
likeNum: string= ""
readNum: string= ""
shareNum: string= ""
sameContentList:SearchDescription[] = []
}
@Observed
... ...