张善主

feat(意见反馈):UI调整

... ... @@ -7,6 +7,7 @@ import { HostEnum, HostManager } from './HttpHostManager';
* 网络请求参数工具类,TODO 不对外暴露,收缩权限
*/
export class HttpParams {
static buildHeaders(): Record<string, string> {
let headers: Record<string, string> = {};
// 通用请求头
... ... @@ -90,8 +91,17 @@ export class HttpParams {
return '10000';
}
private static getVersionName() {
public static getVersionName() {
// TODO 读取配置
return '1.0.0';
}
//获取机型
static getPhoneModel() {
return 'getPhoneModel'
}
//获取当前手机系统版本号
static getSystemVersion() {
return 'getSystemVersion'
}
}
\ No newline at end of file
... ...
... ... @@ -329,6 +329,11 @@ export class HttpUrlUtils {
*/
static readonly MESSAGE_UN_READ_DATA_PATH: string = "/api/rmrb-inside-mail/zh/c/inside-mail/private/polymerizationInfo?createTime=";
/**
* 意见反馈-提交
*/
static readonly FEEDBACK_COMMIT_PATH: string = "/api/rmrb-interact/interact/zh/c/user/feedBack";
static getHost(): string {
return HostManager.getHost();
}
... ...
import { Action, ContentDTO, Params, PhotoListBean, commentInfo } from 'wdBean';
import { ExtraDTO } from 'wdBean/src/main/ets/bean/component/extra/ExtraDTO';
import { Logger } from 'wdKit';
import { Logger, SPHelper } from 'wdKit';
import { StringUtils } from 'wdKit/src/main/ets/utils/StringUtils';
import { WDRouterRule, WDRouterPage } from '../../../../Index';
import { ContentConstants } from 'wdConstant';
import { ContentConstants, SpConstants } from 'wdConstant';
import { common, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { CompAdvMatInfoBean } from 'wdBean/src/main/ets/bean/adv/CompAdvInfoBean';
... ... @@ -449,7 +449,13 @@ export class ProcessUtils {
/**
* 意见反馈
*/
public static gotoFeedBackActivity() {
public static async gotoFeedBackActivity() {
// 未登录,跳转登录
const user_id = await SPHelper.default.get(SpConstants.USER_ID, '')
if (!user_id) {
WDRouterRule.jumpWithPage(WDRouterPage.loginPage)
return
}
let taskAction: Action = {
type: 'JUMP_INNER_NEW_PAGE',
params: {
... ...
... ... @@ -122,7 +122,8 @@ function handleJsCallReceiveH5Data(data: Message) {
width: item.width,
height: item.height,
picPath: item.pic,
picDesc: ''
picDesc: '',
itemType:2
}
return photo
})
... ...
... ... @@ -175,4 +175,3 @@ export { ReserveItemBean } from './src/main/ets/bean/live/ReserveItemBean';
export { FeedbackTypeBean } from './src/main/ets/bean/detail/FeedbackTypeBean';
export { FeedbackImageItem } from './src/main/ets/bean/detail/FeedbackImageItem';
\ No newline at end of file
... ...
export interface FeedbackImageItem {
//1添加图片,2图片
itemType: number;
path: string;
selectionPath: string;
}
\ No newline at end of file
... ... @@ -8,6 +8,8 @@ export interface PhotoListBean {
width: number;
picPath: string;
picDesc: string;
//1添加图片,2图片
itemType: number;
}
export interface InputMethodProperty {
... ...
... ... @@ -45,6 +45,10 @@ import { detailedSkeleton } from './skeleton/detailSkeleton';
const TAG = 'DynamicDetailComponent'
const PATTERN_DATE_CN_RN: string = 'yyyy年MM月dd日 HH:mm';
/**
* @author wd-zsz
* */
// @Preview
@Component
export struct DynamicDetailComponent {
... ...
import { FeedbackImageItem, FeedbackTypeBean } from 'wdBean/Index';
import { FastClickUtil, Logger, NetworkUtil } from 'wdKit/Index';
import { FeedbackTypeBean, PhotoListBean } from 'wdBean/Index';
import { FastClickUtil, Logger, NetworkUtil, StringUtils, ToastUtils, UserDataLocal } from 'wdKit/Index';
import { MultiPictureDetailViewModel } from '../viewmodel/MultiPictureDetailViewModel';
import { CustomTitleUI } from './reusable/CustomTitleUI'
import { ArrayList } from '@kit.ArkTS';
import { picker } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { router } from '@kit.ArkUI';
import { CommonConstants } from 'wdConstant/Index';
import { ProcessUtils } from 'wdRouter/Index';
import { HashMap } from '@kit.ArkTS';
import { HttpParams } from 'wdNetwork/src/main/ets/http/HttpCommonParams';
const TAG = 'FeedBackActivity'
// 意见反馈页面
/**
* 意见反馈页面
* @author wd-zsz
* */
@Entry
@Component
export struct FeedBackActivity {
contact: string = "";
email: string = "";
//UI
scroller: Scroller = new Scroller();
... ... @@ -19,8 +28,8 @@ export struct FeedBackActivity {
@State feedbackTypeBeans: FeedbackTypeBean[] = [] as FeedbackTypeBean[]
//添加图片
addPic: FeedbackImageItem = {itemType:1} as FeedbackImageItem
@State pics: FeedbackImageItem[] = [this.addPic] as FeedbackImageItem[]
addPic: PhotoListBean = {itemType:1} as PhotoListBean
@State pics: PhotoListBean[] = [this.addPic] as PhotoListBean[]
// 选择媒体文件的最大数目
selectNum = 3;
... ... @@ -31,58 +40,66 @@ export struct FeedBackActivity {
build() {
Column() {
//标题栏目
CustomTitleUI({ titleName: "意见反馈" })
CustomTitleUI({ titleName: $r('app.string.feedback') })
Stack({ alignContent: Alignment.Bottom }) {
Scroll(this.scroller) {
Column() {
Text('请选择问题类型')
Text($r('app.string.feedback_opinion_type'))
.fontColor($r('app.color.color_222222'))
.fontSize($r('app.float.font_size_16'))
.fontWeight(FontWeight.Bold)
.width('100%')
.margin({ left: $r('app.float.vp_15'), top: $r('app.float.vp_14') })
GridRow({
gutter: { x: 2, y: 2 }
columns:3,
}) {
ForEach(this.feedbackTypeBeans, (feedbackTypeBean: FeedbackTypeBean, index: number) => {
GridCol({
span: 12
}) {
Row(){
Toggle({ type: ToggleType.Checkbox, isOn: false })
Text(feedbackTypeBean.classifyName)
.fontColor($r('app.color.color_222222'))
.fontSize($r('app.float.font_size_14'))
.fontWeight(FontWeight.Bold)
.margin({ left: $r('app.float.vp_4') })
}
.width(115)
.height(22)
.width($r('app.float.margin_115'))
.height($r('app.float.vp_22'))
.margin({bottom:$r('app.float.margin_16')})
.backgroundColor($r('app.color.color_fff'))
}
})
}
.width('100%')
.margin({top:$r('app.float.vp_16')})
Blank()
.height(0.5)
.margin({ left: $r('app.float.vp_16'), top: $r('app.float.vp_12'), right: $r('app.float.vp_16') })
.backgroundColor($r('app.color.color_EDEDED'))
Text('描述您的问题')
.height($r('app.float.margin_5'))
.backgroundColor($r('app.color.color_F5F5F5'))
Text($r('app.string.feedback_opinion_tv'))
.fontColor($r('app.color.color_222222'))
.fontSize($r('app.float.font_size_16'))
.fontWeight(FontWeight.Bold)
.width(CommonConstants.FULL_WIDTH)
.margin({ left: $r('app.float.vp_16'), top: $r('app.float.vp_12') })
Stack() {
TextInput({ placeholder: '您的宝贵意见是我们前行的动力' })
Stack({ alignContent: Alignment.BottomEnd }) {
TextInput({ placeholder: $r('app.string.feedback_comments') })
.width(CommonConstants.FULL_WIDTH)
.height(CommonConstants.FULL_HEIGHT)
.backgroundColor($r('app.color.color_F5F5F5'))
.align(Alignment.TopStart)
.onChange((value) => {
// Logger.debug(TAG, "onChange" + value + "/" + this.passwordContent)
this.contact = value
})
GridRow({
gutter: { x: 2, y: 2 }
columns:3,
}) {
ForEach(this.pics, (feedbackImageItem: FeedbackImageItem, index: number) => {
ForEach(this.pics, (feedbackImageItem: PhotoListBean, index: number) => {
GridCol({
span: 12
}) {
if(1 == feedbackImageItem.itemType){
Image($r('app.media.icon_add_attention'))
Image($r('app.media.feekback_add'))
.width(60)
.height(60)
.onClick(async (event: ClickEvent) => {
... ... @@ -93,7 +110,7 @@ export struct FeedBackActivity {
})
}else{
Stack({alignContent: Alignment.TopEnd}) {
Image(feedbackImageItem.path)
Image(feedbackImageItem.picPath)
.width(60)
.height(60)
.borderRadius($r('app.float.margin_1'))
... ... @@ -104,12 +121,21 @@ export struct FeedBackActivity {
}
.width(60)
.height(60)
.onClick(async (event: ClickEvent) => {
if(await FastClickUtil.isMinDelayTime()){
return
}
//查看图片 fixme 去除添加按钮
ProcessUtils.gotoMultiPictureListPage(this.pics, index)
})
}
}
})
}
.width(CommonConstants.FULL_WIDTH)
.margin({bottom: $r('app.float.vp_12'), right: $r('app.float.vp_12'),left: $r('app.float.vp_12')})
Text('0/500')
.margin({bottom: $r('app.float.vp_12'), right: $r('app.float.vp_11')})
}
.height(200)
.width('100%')
... ... @@ -117,26 +143,39 @@ export struct FeedBackActivity {
.backgroundColor($r('app.color.color_F5F5F5'))
.borderRadius(4)
Text('期待您留下联系方式,我们将提供更好的服务')
Text($r('app.string.feedback_email'))
.fontColor($r('app.color.color_222222'))
.fontSize($r('app.float.font_size_14'))
.fontWeight(FontWeight.Bold)
.width('100%')
.margin({ left: $r('app.float.vp_16'), top: $r('app.float.margin_24') })
Row() {
Text('电话或者邮箱')
Text($r('app.string.feedback_mail'))
.fontColor($r('app.color.color_222222'))
.fontSize($r('app.float.font_size_14'))
.fontWeight(FontWeight.Bold)
.margin({ left: $r('app.float.vp_12') })
TextInput({ placeholder: '请输入电话或者邮箱' })
TextInput({ placeholder: $r('app.string.feedback_hideemail') })
.width(CommonConstants.FULL_WIDTH)
.height(CommonConstants.FULL_HEIGHT)
.backgroundColor($r('app.color.color_F5F5F5'))
.onChange((value) => {
// Logger.debug(TAG, "onChange" + value + "/" + this.passwordContent)
this.email = value
})
}
.height(44)
.margin({ left: $r('app.float.vp_16'), right: $r('app.float.vp_12'), top: $r('app.float.margin_16') })
.backgroundColor($r('app.color.color_F5F5F5'))
.borderRadius(4)
Blank().layoutWeight(1)
}
}
.width(CommonConstants.FULL_WIDTH)
.height(CommonConstants.FULL_HEIGHT)
.scrollBar(BarState.Off)
.alignSelf(ItemAlign.Start)
.padding({ bottom: 44 })
Text($r('app.string.submit'))
.height(44)
.fontColor($r('app.color.color_9E9E9E_40'))
... ... @@ -144,6 +183,12 @@ export struct FeedBackActivity {
.margin({ left: $r('app.float.vp_16'), right: $r('app.float.vp_16'), top: $r('app.float.vp_15') })
.backgroundColor($r('app.color.color_ED2800_99'))
.borderRadius(4)
.onClick(async (event: ClickEvent) => {
if(await FastClickUtil.isMinDelayTime()){
return
}
this.reportCommit()
})
}
}
}
... ... @@ -188,7 +233,7 @@ export struct FeedBackActivity {
let startIndex = this.pics.length-1;
array.forEach((value) => {
let pic: FeedbackImageItem = {itemType:2,path:value} as FeedbackImageItem
let pic: PhotoListBean = {itemType:2,picPath:value} as PhotoListBean
this.pics[startIndex] = pic
startIndex = startIndex+1;
mediaFlag = true;
... ... @@ -219,4 +264,55 @@ export struct FeedBackActivity {
}, router.RouterMode.Standard);
}
//提交
async reportCommit(){
//问题类型必选
let selectType = ""
this.feedbackTypeBeans.forEach((value) => {
if(value.isselect){
selectType = selectType+","
}
})
if(!StringUtils.isEmpty(selectType)){
selectType = selectType.substring(0,selectType.length-1)
}else{
//
ToastUtils.shortToast($r('app.string.feedback_opinion_type'))
return
}
//内容必填
if(StringUtils.isEmpty(this.contact) || this.contact.length < 10 || this.contact.length>500){
ToastUtils.shortToast($r('app.string.res_feedback_commentsFail'))
return
}
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)){
//邮箱
map.set("userContact", this.email);
}
//用户名称
if (!StringUtils.isEmpty(UserDataLocal.getUserName())) {
map.set("userName", UserDataLocal.getUserName());
}
//设备
map.set("appVersion", "V" + HttpParams.getVersionName());
map.set("appDevice", "harmony" + HttpParams.getSystemVersion() + " " + HttpParams.getPhoneModel());
// //投诉图片
// if (imageUrl.size() > 0) {
// String[] str = imageUrl.toArray(new String[imageUrl.size()]);
// map.set("imageUrls", str);
// }
await MultiPictureDetailViewModel.feedBackCommit(map)
} catch (exception) {
console.log('请求失败',JSON.stringify(exception))
}
}
}
\ No newline at end of file
... ...
... ... @@ -40,7 +40,8 @@ export struct Card19Component {
width: item.weight,
height: item.height,
picPath: item.fullUrl,
picDesc: ''
picDesc: '',
itemType:2
}
return photo
})
... ...
... ... @@ -3,7 +3,7 @@ import router from '@ohos.router'
@Component
export struct CustomTitleUI {
imgBack:boolean = true
titleName:string = "默认标题"
titleName:ResourceStr = "默认标题"
build() {
RelativeContainer() {
... ...
import { Logger } from 'wdKit';
import { ResponseDTO } from 'wdNetwork';
import { HttpUrlUtils, ResponseDTO, WDHttp } from 'wdNetwork';
import { HashMap } from '@kit.ArkTS';
import { ContentDetailDTO,
batchLikeAndCollectParams,
batchLikeAndCollectResult,
... ... @@ -156,4 +157,17 @@ export class MultiPictureDetailViewModel {
})
})
}
static async feedBackCommit(params:HashMap<String,String>): Promise<ResponseDTO> {
return new Promise<ResponseDTO>((success, error) => {
Logger.info(TAG, `fetchDetailData start`);
WDHttp.post(HttpUrlUtils.getHost() + HttpUrlUtils.FEEDBACK_COMMIT_PATH,params).then((resDTO: ResponseDTO) => {
success(resDTO);
}).catch((err: Error) => {
Logger.error(TAG, `fetchDetailData catch, error.name : ${err.name}, error.message:${err.message}`);
error(err);
})
})
}
}
... ...
... ... @@ -295,6 +295,10 @@
{
"name": "vp_13",
"value": "13vp"
},
{
"name": "margin_115",
"value": "115vp"
}
]
}
... ...
... ... @@ -67,5 +67,40 @@
"name": "feedback",
"value": "意见反馈"
}
,
{
"name": "res_feedback_commentsFail",
"value": "请输入 10-500 个字以内"
}
,
{
"name": "feedback_opinion_type",
"value": "请选择问题类型"
}
,
{
"name": "feedback_comments",
"value": "您的宝贵意见是我们前行的动力"
}
,
{
"name": "feedback_opinion_tv",
"value": "描述您的问题"
}
,
{
"name": "feedback_email",
"value": "期待您留下联系方式,我们将提供更好的服务"
}
,
{
"name": "feedback_mail",
"value": "电话或者邮箱"
}
,
{
"name": "feedback_hideemail",
"value": "请输入电话或者邮箱"
}
]
}
\ No newline at end of file
... ...