feat: improve nursing article module with rich content and view tracking

- Add content field (LONGTEXT) with Quill rich text editor in admin UI
- Add view_count field with auto-increment API endpoint
- Replace manual image URL input with image-upload component
- Add /system/nursing/published and /view/{id} public endpoints
- Improve Android error handling with toast and cache fallback
- Optimize ViewHolderFive adapter to reuse instead of recreating

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
renjianbo
2026-05-23 00:52:12 +08:00
parent a53ed96119
commit 12d67c00f4
10 changed files with 125 additions and 37 deletions

View File

@@ -145,7 +145,7 @@ public class HomeFragment extends BaseFragment {
private void initNursingInfo() {
OkGo.<String>get(HttpConstants.URi_system_getAppIndexInfo)
.converter(new StringConvert())
.cacheMode(CacheMode.NO_CACHE)
.cacheMode(CacheMode.REQUEST_FAILED_READ_CACHE)
.adapt(new ObservableResponse<String>())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
@@ -181,6 +181,7 @@ public class HomeFragment extends BaseFragment {
@Override
public void onError(@NonNull Throwable e) {
e.printStackTrace();
toast("加载护理资讯失败");
}
@Override

View File

@@ -32,10 +32,12 @@ import de.greenrobot.event.EventBus;
public class ViewHolderFive extends AbstractViewTypeHolder {
private final RecyclerView style_recyleview;
private BaseQuickAdapter<homeListBean, BaseViewHolder> mAdapter;
public ViewHolderFive(View itemView) {
super(itemView);
style_recyleview = (RecyclerView) itemView.findViewById(R.id.reply_rcey);
style_recyleview.setLayoutManager(new LinearLayoutManager(itemView.getContext()));
}
@Override
@@ -43,36 +45,40 @@ public class ViewHolderFive extends AbstractViewTypeHolder {
super.bindHolder(dataBean, position, mContext, mviewListener);
//护理资讯
LinearLayoutManager manager = new LinearLayoutManager(mContext);
style_recyleview.setLayoutManager(manager);
List<homeListBean> data = dataBean.getNursingInfoList();
if (data == null) {
data = new ArrayList<>();
}
final List<homeListBean> finalData = data;
style_recyleview.setAdapter(new BaseQuickAdapter<homeListBean, BaseViewHolder>(R.layout.home_list_item, data) {
@Override
protected void convert(final BaseViewHolder helper, final homeListBean item) {
WidgetTools.setTextfive((TextView) helper.getView(R.id.img_modify), "", helper.getAdapterPosition() + 1 + "." + item.getContent());
GlideTools.init(mContext).displaypic((ImageView) helper.getView(R.id.home_img_01), item.getPic(), R.mipmap.home_bj01);
RelativeLayout rl_style = (RelativeLayout)helper.getView(R.id.reply_dialog_rl);
rl_style.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(!ProfileSpUtils.getInstance().isLogin()){
Intent intent =new Intent(mContext, NewCodeLoginActivity.class);
mContext.startActivity(intent);
return;
if (mAdapter == null) {
mAdapter = new BaseQuickAdapter<homeListBean, BaseViewHolder>(R.layout.home_list_item, data) {
@Override
protected void convert(final BaseViewHolder helper, final homeListBean item) {
WidgetTools.setTextfive((TextView) helper.getView(R.id.img_modify), "", helper.getAdapterPosition() + 1 + "." + item.getContent());
GlideTools.init(mContext).displaypic((ImageView) helper.getView(R.id.home_img_01), item.getPic(), R.mipmap.home_bj01);
RelativeLayout rl_style = (RelativeLayout) helper.getView(R.id.reply_dialog_rl);
rl_style.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!ProfileSpUtils.getInstance().isLogin()) {
Intent intent = new Intent(mContext, NewCodeLoginActivity.class);
mContext.startActivity(intent);
return;
}
String url = item.getUrl();
if (url != null && !url.isEmpty()) {
XfiveWebActivity.runActivity(mContext, "了解陪护", url);
} else {
XfiveWebActivity.runActivity(mContext, "了解陪护", "file:///android_asset/privacy.html");
}
}
String url = item.getUrl();
if (url != null && !url.isEmpty()) {
XfiveWebActivity.runActivity(mContext, "了解陪护", url);
} else {
XfiveWebActivity.runActivity(mContext, "了解陪护", "file:///android_asset/privacy.html");
}
}
});
}
});
});
}
};
style_recyleview.setAdapter(mAdapter);
} else {
mAdapter.setNewData(finalData);
}
}
}