Compare commits

..

No commits in common. "585a0582b823b6868cfec6bc81e9d66b0ff1d437" and "4cdff7a594a803aa9c3a34c93679f03a39b82bd2" have entirely different histories.

418 changed files with 2815 additions and 4830 deletions

View File

@ -15,6 +15,8 @@ onHide(() => {
</script>
<style lang="scss">
@import "@/static/fonts/iconfont.css";
/* 添加全局样式 */
page,
body,
@ -33,4 +35,24 @@ body,
.mb12 {
margin-bottom: 12px;
}
//
.reset-btn {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
z-index: 1000;
background: none;
border: none;
outline: none;
padding: 0;
margin: 0;
&::after {
border: none;
content: " ";
}
}
</style>

View File

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -25,5 +25,5 @@ const props = defineProps({
</script>
<style lang="scss" scoped>
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 100 KiB

View File

@ -474,5 +474,5 @@ onBeforeUnmount(() => {
<style lang="scss" scoped>
//
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -40,5 +40,5 @@ const onChange = () => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -14,5 +14,5 @@ defineProps({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 122 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 844 B

After

Width:  |  Height:  |  Size: 844 B

View File

@ -6,16 +6,16 @@
</view>
<view class="order-content">
<view class="order-item">
<image src="./images/icon_service.png" class="order-icon"></image>
<uni-data-select
v-if="!isCallSuccess && workOrderTypeList.length > 0"
class="order-select"
placeholder="请选择服务工单"
v-model="workOrderTypeName"
:localdata="workOrderTypeListSelectData"
@change="changeWorkOrderType"
></uni-data-select>
<text v-else class="order-description">{{ workOrderTypeName }}</text>
<image src="./images/icon_service.png" class="order-icon"></image>
<uni-data-select
v-if="!isCallSuccess && workOrderTypeList.length > 0"
class="order-select"
placeholder="请选择服务工单"
v-model="workOrderTypeName"
:localdata="workOrderTypeListSelectData"
@change="changeWorkOrderType"
></uni-data-select>
<text v-else class="order-description">{{ workOrderTypeName }}</text>
</view>
<view class="order-line"></view>
<view class="order-details">
@ -67,11 +67,7 @@
<button class="order-button-secondary" @click="viewWorkOrder">
查看工单
</button>
<button
v-if="!isMarkCompleted"
class="order-button-primary"
@click="markCompleted"
>
<button v-if="!isMarkCompleted" class="order-button-primary" @click="markCompleted">
已完成
</button>
</view>
@ -90,127 +86,125 @@
import { ref, onMounted, nextTick } from "vue";
import { SCROLL_TO_BOTTOM } from "@/constant/constant";
import {
createWorkOrder,
workOrderTypeListForBiz,
} from "@/request/api/OrderApi";
const workOrderTypeId = ref("");
const workOrderTypeName = ref("");
const roomId = ref("");
import { createWorkOrder, workOrderTypeListForBiz } from "@/request/api/OrderApi";
const workOrderTypeId = ref('')
const workOrderTypeName = ref('')
const roomId = ref('')
const contactName = ref("");
const contactPhone = ref("");
const isCallSuccess = ref(false); //
const workOrderId = ref(0); // ID
const workOrderTypeList = ref([]);
const workOrderTypeListSelectData = ref([]);
const isMarkCompleted = ref(false);
const workOrderTypeList = ref([])
const workOrderTypeListSelectData = ref([])
const isMarkCompleted = ref(false)
const changeWorkOrderType = (index) => {
if (index < 0 || index >= workOrderTypeListSelectData.value.length) {
return;
}
const item = workOrderTypeList.value[index];
console.log("item:", item);
workOrderTypeId.value = item.id;
workOrderTypeName.value = item.workOrderTypeName;
};
const item = workOrderTypeList.value[index]
console.log("item:", item)
workOrderTypeId.value = item.id
workOrderTypeName.value = item.workOrderTypeName
}
const handleCall = async () => {
//
if (!roomId.value.trim()) {
uni.showToast({
title: "请填写房间号",
icon: "none",
duration: 2000,
});
return;
}
//
if (!roomId.value.trim()) {
uni.showToast({
title: '请填写房间号',
icon: 'none',
duration: 2000
});
return;
}
if (!contactName.value.trim()) {
uni.showToast({
title: "请填写联系人",
icon: "none",
duration: 2000,
});
return;
}
if (!contactName.value.trim()) {
uni.showToast({
title: '请填写联系人',
icon: 'none',
duration: 2000
});
return;
}
if (!contactPhone.value.trim()) {
uni.showToast({
title: "请填写联系电话",
icon: "none",
duration: 2000,
});
return;
}
if (!contactPhone.value.trim()) {
uni.showToast({
title: '请填写联系电话',
icon: 'none',
duration: 2000
});
return;
}
sendCreateWorkOrder();
sendCreateWorkOrder()
};
///
const sendCreateWorkOrder = async () => {
try {
const res = await createWorkOrder({
contactName: contactName.value,
contactPhone: contactPhone.value,
workOrderTypeId: workOrderTypeId.value,
roomId: roomId.value,
});
if (res.code === 0) {
// ID
workOrderId.value = res.data?.id || "";
//
isCallSuccess.value = true;
uni.showToast({
title: "工单创建成功",
icon: "success",
duration: 2000,
try {
const res = await createWorkOrder({
contactName: contactName.value,
contactPhone: contactPhone.value,
workOrderTypeId: workOrderTypeId.value,
roomId: roomId.value,
});
} else {
if (res.code === 0) {
// ID
workOrderId.value = res.data?.id || "";
//
isCallSuccess.value = true;
uni.showToast({
title: '工单创建成功',
icon: 'success',
duration: 2000
});
} else {
uni.showToast({
title: res.message || '创建工单失败',
icon: 'none',
duration: 2000
});
}
} catch (error) {
console.error('创建工单失败:', error);
uni.showToast({
title: res.message || "创建工单失败",
icon: "none",
duration: 2000,
title: '网络错误,请重试',
icon: 'none',
duration: 2000
});
}
} catch (error) {
console.error("创建工单失败:", error);
uni.showToast({
title: "网络错误,请重试",
icon: "none",
duration: 2000,
});
}
};
}
///
const getWorkOrderType = async () => {
const res = await workOrderTypeListForBiz();
const res = await workOrderTypeListForBiz()
if (res.code === 0) {
workOrderTypeList.value = res.data;
workOrderTypeList.value.forEach((item, index) => {
workOrderTypeListSelectData.value.push({
value: index,
text: item.workOrderTypeName,
});
});
workOrderTypeList.value = res.data
workOrderTypeList.value.forEach((item, index) => {
workOrderTypeListSelectData.value.push({
value: index,
text: item.workOrderTypeName,
})
})
if (workOrderTypeList.value.length > 0) {
workOrderTypeId.value = workOrderTypeList.value[0].id;
workOrderTypeName.value = workOrderTypeList.value[0].workOrderTypeName;
if (workOrderTypeList.value.length > 0) {
workOrderTypeId.value = workOrderTypeList.value[0].id
workOrderTypeName.value = workOrderTypeList.value[0].workOrderTypeName
}
}
}
};
}
//
const viewWorkOrder = () => {
console.log("查看工单:", workOrderId.value);
//
uni.navigateTo({
url: `/pages-order/order/list?id=${workOrderId.value}`,
url: `/pages/order/list?id=${workOrderId.value}`
});
};
@ -218,19 +212,19 @@ const viewWorkOrder = () => {
const markCompleted = () => {
console.log("标记工单已完成:", workOrderId.value);
uni.showModal({
title: "确认完成",
content: "确认标记此工单为已完成吗?",
title: '确认完成',
content: '确认标记此工单为已完成吗?',
success: (res) => {
if (res.confirm) {
isMarkCompleted.value = true;
if (res.confirm) {
isMarkCompleted.value = true
// API
uni.showToast({
title: "工单已完成",
icon: "success",
duration: 2000,
title: '工单已完成',
icon: 'success',
duration: 2000
});
}
},
}
});
};
@ -242,15 +236,15 @@ const makePhoneCall = () => {
};
onMounted(() => {
getWorkOrderType();
nextTick(() => {
setTimeout(() => {
uni.$emit(SCROLL_TO_BOTTOM, true);
}, 200);
});
});
getWorkOrderType()
nextTick(() => {
setTimeout(() => {
uni.$emit(SCROLL_TO_BOTTOM, true)
}, 200)
});
})
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -3,5 +3,5 @@
</template>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

Before

Width:  |  Height:  |  Size: 844 B

After

Width:  |  Height:  |  Size: 844 B

View File

@ -122,7 +122,7 @@ const viewWorkOrder = () => {
console.log("查看工单:", workOrderId.value);
//
uni.navigateTo({
url: `/pages-order/order/list?id=${workOrderId.value}`,
url: `/pages/order/list?id=${workOrderId.value}`,
});
};
@ -136,5 +136,5 @@ onMounted(() => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 764 B

After

Width:  |  Height:  |  Size: 764 B

View File

@ -175,5 +175,5 @@ defineExpose({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -58,5 +58,49 @@ const props = defineProps({
</script>
<style scoped lang="scss">
@use './styles/index.scss';
@font-face {
font-family: znicons;
src: url("@/static/fonts/znicons.ttf");
}
// 使
.use-notice {
margin: 16px 0;
}
.use-notice-content {
.module-item {
display: flex;
align-items: flex-start;
flex-direction: column;
padding: 12px 0;
.module-icon {
display: flex;
flex-direction: row;
align-items: center;
margin-right: 8px;
flex-shrink: 0;
.module-title {
font-size: 14px;
color: #333;
text-align: center;
word-wrap: break-word;
margin-left: 4px;
}
}
.module-desc {
flex: 1;
font-size: 12px;
color: #666;
line-height: 1.5;
margin-top: 4px;
}
}
.border-bottom {
border-bottom: 1px solid #f0f0f0;
}
}
</style>

View File

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 130 KiB

View File

@ -14,11 +14,7 @@
v-for="(item, index) in thumbnails"
:key="index"
>
<image
class="swiper-item-image"
:src="item.photoUrl"
mode="aspectFill"
></image>
<image :src="item.photoUrl" mode="aspectFill"></image>
</swiper-item>
</swiper>
@ -47,7 +43,7 @@
:id="`thumbnail-${index}`"
@click="handleThumbnailClick(index)"
>
<image class="thumbnail-image" :src="thumb.photoUrl" mode="aspectFill"></image>
<image :src="thumb.photoUrl" mode="aspectFill"></image>
<text>{{ thumb.photoName }}</text>
</view>
</view>
@ -159,5 +155,5 @@ const handleSwiperChange = (e) => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -0,0 +1,80 @@
.image-swiper {
position: relative;
width: 100%;
}
.swiper-box {
overflow: hidden;
// 高度和圆角通过内联样式动态设置
}
.swiper-item image {
width: 100%;
height: 100%;
}
.custom-indicator {
position: absolute;
top: 8px;
right: 8px;
z-index: 10;
background: rgba(0, 0, 0, 0.5);
border-radius: 50px;
padding: 3px 8px;
font-size: 8px;
color: #fff;
}
.thumbnail-box {
position: absolute;
left: 12px;
right: 12px;
height: 60px;
}
.thumbnail-scroll {
width: 100%;
height: 100%;
white-space: nowrap;
}
.thumbnail-list {
display: flex;
align-items: center;
gap: 10px;
padding: 0 5px;
}
.thumbnail-item {
flex-shrink: 0;
text-align: center;
transition: all 0.3s ease;
&.active {
image {
border: 1px solid #fff;
}
}
}
.thumbnail-item image {
width: 48px;
height: 38px;
border-radius: 4px;
box-sizing: border-box;
border: 1px solid transparent;
transition: all 0.3s ease;
display: block;
}
.thumbnail-item text {
color: #fff;
font-size: 8px;
display: block;
margin-top: 4px;
transition: all 0.3s ease;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 48px;
}

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -48,5 +48,5 @@ const openMap = () => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -42,5 +42,5 @@ const openMap = () => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -15,5 +15,5 @@ defineProps({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import './styles/index.scss';
</style>

View File

@ -6,6 +6,7 @@
.module-title {
font-size: 18px;
font-family: PingFang SC, PingFang SC;
color: #000;
position: relative;
z-index: 1;

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 917 B

After

Width:  |  Height:  |  Size: 917 B

View File

@ -48,5 +48,5 @@ const orderStatusText = computed(() => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -75,5 +75,5 @@ const handleOpenPrivacyContract = () => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import './styles/index.scss'
</style>

View File

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

View File

@ -17,5 +17,5 @@ defineProps({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -7,5 +7,5 @@
<script setup></script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 494 B

After

Width:  |  Height:  |  Size: 494 B

View File

@ -36,5 +36,5 @@ const handleClick = (type) => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -59,5 +59,5 @@ const increase = () => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -25,5 +25,5 @@ defineProps({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@ -7,9 +7,13 @@
</template>
<script setup>
const tags = ["门票套餐", "民俗活动", "车程路况"];
const tags = [
'门票套餐',
'民俗活动',
'车程路况'
];
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
<style scoped>
@import './styles/index.scss';
</style>

View File

@ -129,5 +129,5 @@ const handleBack = () => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

28
constant/base.js Normal file
View File

@ -0,0 +1,28 @@
// 小程序特有相关: 同时更改manifest.json和 project.config.json文件中的appid
// 所有用户端的配置
export const CLIENT_CONFIGS = {
// 智念用户端
zhinian: {
clientId: '2',
appId: 'wx5e79df5996572539'
},
// 朵花用户端
duohua: {
clientId: '2',
appId: 'wx23f86d809ae80259'
},
// 天沐用户端
tianmu: {
clientId: '4',
appId: 'wx0be424e1d22065a9'
}
};
// 获取当前用户端配置
const getCurrentConfig = () => {
return CLIENT_CONFIGS.zhinian;
};
export const clientId = getCurrentConfig().clientId;
export const appId = getCurrentConfig().appId;

View File

@ -2,7 +2,7 @@ import App from "./App";
// #ifndef VUE3
import Vue from "vue";
import "../uni.promisify.adaptor";
import "./uni.promisify.adaptor";
Vue.config.productionTip = false;
App.mpType = "app";
const app = new Vue({

Some files were not shown because too many files have changed in this diff Show More