feat: 完成前端业务闭环与后端联调
This commit is contained in:
+26
-14
@@ -122,7 +122,7 @@
|
||||
class="history-card"
|
||||
>
|
||||
<view class="history-card__meta">
|
||||
<text>{{ feedbackTypeLabel(feedback.feedbackType) }} · {{ feedbackReference(feedback) }}</text>
|
||||
<text>{{ feedbackTypeLabel(feedback) }} · {{ feedbackReference(feedback) }}</text>
|
||||
<text class="history-status">{{ feedbackStatusLabel(feedback.handleStatus) }}</text>
|
||||
</view>
|
||||
<text
|
||||
@@ -171,9 +171,7 @@ import AppButton from "@/components/AppButton.vue";
|
||||
import AppDialog from "@/components/AppDialog.vue";
|
||||
import ModulePageBackground from "@/components/ModulePageBackground.vue";
|
||||
import PageHeader from "@/components/PageHeader.vue";
|
||||
import {
|
||||
FEEDBACK_TYPE_OPTIONS as feedbackTypes
|
||||
} from "@/services/api/feedback-contract.js";
|
||||
import { businessDictionaryApi } from "@/services/api/business-dictionary-service.js";
|
||||
import {
|
||||
createRequestController,
|
||||
isRequestCancelled
|
||||
@@ -190,9 +188,11 @@ const feedbackStatusLabels = {
|
||||
2: "已处理",
|
||||
3: "暂不处理",
|
||||
};
|
||||
const feedbackTypeLabel = (feedbackTypeValue) =>
|
||||
feedbackTypes.find(
|
||||
(feedbackType) => feedbackType.value === feedbackTypeValue,
|
||||
const feedbackTypes = ref([]);
|
||||
const feedbackTypeLabel = (feedback) =>
|
||||
String(feedback?.feedbackTypeLabel || "").trim() ||
|
||||
feedbackTypes.value.find(
|
||||
(feedbackType) => feedbackType.value === feedback?.feedbackType,
|
||||
)?.label || "其他";
|
||||
const feedbackStatusLabel = (handleStatus) =>
|
||||
feedbackStatusLabels[String(handleStatus)] || "状态待确认";
|
||||
@@ -234,6 +234,7 @@ const toggleFeedbackExpanded = (feedback) => {
|
||||
let pageActive = true;
|
||||
const feedbackHistoryRequestController = createRequestController();
|
||||
const feedbackSubmissionRequestController = createRequestController();
|
||||
const feedbackTypeRequestController = createRequestController();
|
||||
const submissionSession = createFeedbackSubmissionSession(feedbackForm);
|
||||
const syncSubmissionView = () => {
|
||||
const submissionView = submissionSession.view(feedbackForm);
|
||||
@@ -261,6 +262,13 @@ const loadFeedbackHistory = async () => {
|
||||
);
|
||||
}
|
||||
};
|
||||
const loadFeedbackTypes = async () => {
|
||||
feedbackTypeRequestController.abort();
|
||||
feedbackTypes.value = await businessDictionaryApi.getBusinessDictionaryOptions(
|
||||
"gen_feedback_type",
|
||||
{ requestController: feedbackTypeRequestController },
|
||||
);
|
||||
};
|
||||
const discardConfirmation = createDiscardConfirmation((visible) => {
|
||||
discardVisible.value = visible;
|
||||
});
|
||||
@@ -325,11 +333,15 @@ const requestBack = () =>
|
||||
"confirm-discard": requestDiscardConfirmation,
|
||||
});
|
||||
onBackPress((event) => handleBackPress(event, requestBack));
|
||||
onLoad(loadFeedbackHistory);
|
||||
onLoad(() => {
|
||||
void loadFeedbackTypes().catch(() => { feedbackTypes.value = []; });
|
||||
void loadFeedbackHistory();
|
||||
});
|
||||
onUnload(() => {
|
||||
pageActive = false;
|
||||
feedbackHistoryRequestController.abort();
|
||||
feedbackSubmissionRequestController.abort();
|
||||
feedbackTypeRequestController.abort();
|
||||
discardConfirmation.dispose();
|
||||
});
|
||||
</script>
|
||||
@@ -347,7 +359,7 @@ onUnload(() => {
|
||||
}
|
||||
.page-content {
|
||||
flex: 1;
|
||||
padding: 26rpx 30rpx 72rpx;
|
||||
padding: 26rpx 30rpx calc(72rpx + env(safe-area-inset-bottom));
|
||||
}
|
||||
.lead {
|
||||
display: block;
|
||||
@@ -477,7 +489,7 @@ onUnload(() => {
|
||||
}
|
||||
.history-retry {
|
||||
min-width: 180rpx;
|
||||
min-height: 72rpx;
|
||||
min-height: 80rpx;
|
||||
margin: 0;
|
||||
padding: 0 28rpx;
|
||||
border: 1px solid rgba(164, 41, 36, 0.55);
|
||||
@@ -485,7 +497,7 @@ onUnload(() => {
|
||||
background: rgba(255, 255, 255, 0.82);
|
||||
color: $brand-red;
|
||||
font-size: clamp(14px, 22rpx, 16px);
|
||||
line-height: 72rpx;
|
||||
line-height: 80rpx;
|
||||
}
|
||||
.history-list {
|
||||
display: grid;
|
||||
@@ -523,14 +535,14 @@ onUnload(() => {
|
||||
-webkit-line-clamp: 4;
|
||||
}
|
||||
.history-expand {
|
||||
min-height: 72rpx;
|
||||
min-height: 80rpx;
|
||||
margin: 4rpx 0 0 auto;
|
||||
padding: 0 8rpx;
|
||||
border: 0;
|
||||
background: transparent;
|
||||
color: $brand-red;
|
||||
font-size: clamp(13px, 20rpx, 15px);
|
||||
line-height: 72rpx;
|
||||
line-height: 80rpx;
|
||||
}
|
||||
.history-expand::after {
|
||||
border: 0;
|
||||
@@ -559,7 +571,7 @@ onUnload(() => {
|
||||
.contact-row input {
|
||||
width: auto;
|
||||
min-width: 0;
|
||||
min-height: 68rpx;
|
||||
min-height: 80rpx;
|
||||
color: $ink;
|
||||
font-size: clamp(14px, 22rpx, 17px);
|
||||
text-align: right;
|
||||
|
||||
Reference in New Issue
Block a user