refactor: clean up codebase and add new features

Replace SCSS variable usages with explicit pixel/hex values for consistent styling across all components
Fix broken template syntax including missing class spaces and incorrect closing tags
Migrate constant and API imports to centralized @/constants and @/api modules
Add new utility classes: IdUtils, CallbackUtils, and TimerUtils
Add new chat conversation API endpoints for recent conversations and message lists
Add new Discovery page components (FindTabs, QuickQuestions, CardSwiper) and their styles
Update app store config to use environment variables for base API and WebSocket URLs
Add new selected tab icon assets
This commit is contained in:
duanshuwen
2026-05-26 23:50:37 +08:00
parent c977c485ef
commit 1a5a2ae6a9
101 changed files with 1488 additions and 745 deletions

View File

@@ -2,10 +2,7 @@
<div class="order-card bg-white border-box p-12 rounded-12 m-12">
<!-- 卡片头部 -->
<div class="border-box flex flex-items-center pb-12">
<img
class="icon mr-4"
src="https://oss.nianxx.cn/mp/static/version_101/service/service_icon.png"
/>
<img class="icon mr-4" src="https://oss.nianxx.cn/mp/static/version_101/service/service_icon.png" />
<span class="font-size-14 color-525866 line-height-20">工单</span>
<span class="font-size-12 color-525866 line-height-20 ml-auto">{{
isCancelWork ? "已取消" : workOrderStatus(orderData.workOrderStatus)
@@ -25,54 +22,34 @@
</div>
</div>
<img
v-if="orderData.contentImgUrl"
class="right rounded-6"
:src="orderData.contentImgUrl"
mode="aspectFill"
/>
<img v-if="orderData.contentImgUrl" class="right rounded-6" :src="orderData.contentImgUrl" mode="aspectFill" />
</div>
<!-- 服务人员 -->
<div
v-if="orderData.processMemberName && orderData.processMemberPhone"
class="service-user border-box p-8 flex flex-items-center flex-justify-between mb-12"
>
<div v-if="orderData.processMemberName && orderData.processMemberPhone"
class="service-user border-box p-8 flex flex-items-center flex-justify-between mb-12">
<div class="font-size-12 line-height-16">
服务人员{{ orderData.processMemberName }}
</div>
<uni-icons
class="ml-auto mr-4"
type="phone-filled"
size="14"
color="#436799"
/>
<span class="font-size-12 line-height-16" @click="callService"
>拨打电话</span
>
<uni-icons class="ml-auto mr-4" type="phone-filled" size="14" color="#436799" />
<span class="font-size-12 line-height-16" @click="callService">拨打电话</span>
</div>
<!-- 取消操作 -->
<div
v-if="
!isCancelWork &&
orderData.workOrderStatus !== '2' &&
orderData.workOrderStatus !== '3'
"
class="flex flex-items-center flex-justify-between"
>
<span
class="cancel border-box border rounded-6 font-size-12 line-height-16 color-525866 ml-auto"
@click="cancelCall"
>取消呼叫</span
>
<div v-if="
!isCancelWork &&
orderData.workOrderStatus !== '2' &&
orderData.workOrderStatus !== '3'
" class="flex flex-items-center flex-justify-between">
<span class="cancel border-box border rounded-6 font-size-12 line-height-16 color-525866 ml-auto"
@click="cancelCall">取消呼叫</span>
</div>
</div>
</template>
<script setup>
import { defineProps } from "vue";
import { closeWorkOrder } from "@/request/api/WorkOrderApi";
import { closeWorkOrder } from "@/api/WorkOrder";
import { ref } from "vue";
const isCancelWork = ref(false);

View File

@@ -1,36 +1,21 @@
<template>
<z-paging
:bg-color="
'linear-gradient(180deg, ' +
$theme -
color -
100 +
' 0%, #F5F7FA 100%) 0 86px / 100% 100px no-repeat'
"
ref="paging"
v-model="dataList"
use-virtual-list
:force-close-inner-list="true"
cell-height-mode="dynamic"
safe-area-inset-bottom
@query="queryList"
>
<z-paging :bg-color="'linear-gradient(180deg, ' +
$theme -
color -
100 +
' 0%, #F5F7FA 100%) 0 86px / 100% 100px no-repeat'
" ref="paging" v-model="dataList" use-virtual-list :force-close-inner-list="true" cell-height-mode="dynamic"
safe-area-inset-bottom @query="queryList">
<template #top>
<TopNavBar title="呼叫服务" />
</template>
<template #empty>
<CustomEmpty
emptyIcon="https://oss.nianxx.cn/mp/static/version_101/order/service_empty.png"
statusspan="您暂无呼叫服务"
/>
<CustomEmpty emptyIcon="https://oss.nianxx.cn/mp/static/version_101/order/service_empty.png"
statusspan="您暂无呼叫服务" />
</template>
<OrderCard
v-for="(item, index) in dataList"
:key="item.id || index"
:orderData="item"
/>
<OrderCard v-for="(item, index) in dataList" :key="item.id || index" :orderData="item" />
</z-paging>
</template>
@@ -39,7 +24,7 @@ import { ref } from "vue";
import TopNavBar from "@/components/TopNavBar/index.vue";
import CustomEmpty from "@/components/CustomEmpty/index.vue";
import OrderCard from "./components/OrderCard/index.vue";
import { userWorkOrderList } from "@/request/api/WorkOrderApi";
import { userWorkOrderList } from "@/api/WorkOrder";
const dataList = ref([]);
const paging = ref(null);