员工端优化版本(home)

This commit is contained in:
张文涛 2025-05-14 21:01:33 +08:00
parent 67850a72d9
commit 799fb79145
15 changed files with 188 additions and 123 deletions

View File

@ -4,8 +4,9 @@
//
const $globalData = {
BASE_URL: 'https://dev.api.leapy.cn/merchant/',
RESOURCE_URL: 'https://resource.leapy.cn/staff/'
BASE_URL: 'https://api.leapy.cn/merchant/',
RESOURCE_URL: 'https://resource.leapy.cn/staff/',
title:'中金智慧物业管理平台' // 乐享云智慧物业管理平台 / 中金智慧物业管理平台
}
// 使 uni
// @ts-ignore

21
main.ts
View File

@ -23,6 +23,27 @@ import {
export function createApp() {
const app = createSSRApp(App)
app.use(pinia);
app.mixin({
// 分享到好友
onShareAppMessage() {
return {
title: '智慧物业员工端,一键提升工作效率',
path: '',
imageUrl: ''
}
},
// 分享到朋友圈
onShareTimeline() {
return {
title: '智慧物业员工端,一键提升工作效率',
path: '',
imageUrl: ''
}
},
})
// 全局挂载 useUserInfo使 nvue 页面可以使用
const userInfoStore = useUserInfo()

View File

@ -56,7 +56,8 @@
"quickapp" : {},
/* */
"mp-weixin" : {
"appid" : "wxaec84a18ccf98226",
"appid" : "wx064fdd85b3ae3c60",
// "appid" : "wxaec84a18ccf98226",
"setting" : {
"urlCheck" : false,
"es6" : true,

View File

@ -350,13 +350,14 @@
messageCount.value = mess.data.count
//
const banner = await bannerList({
position: 1
position: 5
})
if (banner.data.length > 0) {
swiperList.value = banner.data.map((item) => item.image)
} else {
swiperList.value.push('/static/swiper/1.png', )
}
}
// else {
// swiperList.value.push('/static/swiper/1.png', )
// }
})
//

View File

@ -2,7 +2,7 @@
<view class="li-login-page">
<view class=" li-flex li-flex-col li-justify-center li-items-center li-pt-270">
<image class="li-w-130 li-h-130 li-rd-40" src="/static/logo.png" mode=""></image>
<text class="li-text-38 li-text-#000000 li-mt-32 li-font-550">物业综合管理平台</text>
<text class="li-text-38 li-text-#000000 li-mt-32 li-font-550">{{title}}</text>
</view>
<view class="li-w-80% li-mx-auto li-mt-100">
<!-- 账号 -->
@ -56,6 +56,8 @@
import { useToast } from '@/uni_modules/wot-design-uni';
const Toast = useToast();
declare const uni : Uni
const title = uni.$globalData?.title
interface formItem {
username : string
@ -82,7 +84,7 @@
image: ''
})
const check = ref<boolean>(true)
const check = ref<boolean>(false)
const loginHandle = async () => {
if (!check.value) {

View File

@ -5,7 +5,7 @@
<view @click="toPages({type:'userInfo'})" class="li-flex li-items-center">
<view class="li-flex li-items-end li-mr-20">
<image class="li-w-100 li-h-100 li-rd-50% border-4-white"
:src="user_info?.avatar?user_info?.avatar:'/static/m_avatar.png'" mode="">
:src="user_info?.avatar?user_info?.avatar:'/static/logo.png'" mode="">
</image>
</view>
<view class="li-flex li-flex-col">

View File

@ -92,7 +92,9 @@
<!-- 商品列表 -->
<view v-for="(product, index) in ticketInfo?.product" :key="index" class="product-card-full">
<view class="product-main">
<image class="product-image" :src="product.picture" mode="aspectFill" @click="product.picture && previewImages(product.picture, [product.picture])"></image>
<image class="product-image" :src="product.picture" mode="aspectFill"
@click="product.picture && previewImages(product.picture, [product.picture])">
</image>
<view class="product-details">
<text class="product-name">{{product.product_name}}</text>
<text class="product-spec">{{product.spec_name}}</text>
@ -137,7 +139,8 @@
<text class="item-label">现场照片</text>
<view class="scene-images">
<image v-for="(item) in ticketInfo?.order?.images?.split(',')" :key="item" class="scene-image"
:src="item" mode="aspectFill">
:src="item" mode="aspectFill"
@click="previewImages(item, ticketInfo?.order?.images?.split(','))">
</image>
</view>
</view>
@ -175,7 +178,8 @@
<text class="item-label">现场照片</text>
<view class="scene-images">
<image v-for="(item) in ticketInfo?.order?.images?.split(',')" :key="item" class="scene-image"
:src="item" mode="aspectFill">
:src="item" mode="aspectFill"
@click="previewImages(item, ticketInfo?.order?.images?.split(','))">
</image>
</view>
</view>
@ -210,13 +214,8 @@
<view v-if="ticketInfo.images" class="info-item">
<text class="item-label">结单照片</text>
<view class="scene-images">
<image v-for="(img, idx) in ticketInfo.images.split(',')"
:key="img"
class="scene-image"
:src="img"
mode="aspectFill"
@click="previewImages(img, ticketInfo.images.split(','))"
/>
<image v-for="(img, idx) in ticketInfo.images.split(',')" :key="img" class="scene-image"
:src="img" mode="aspectFill" @click="previewImages(img, ticketInfo.images.split(','))" />
</view>
</view>
<view v-if="ticketInfo.remark" class="info-item">
@ -253,7 +252,8 @@
<text class="section-title">上传照片选填</text>
<view class="upload-list">
<view v-for="(item, index) in uploadImages" :key="index" class="upload-item">
<image :src="item" mode="aspectFill" class="preview-image" @click="previewImages(item, uploadImages)" />
<image :src="item" mode="aspectFill" class="preview-image"
@click="previewImages(item, uploadImages)" />
<text class="ri-close-circle-fill delete-icon" @click="deleteImage(index)"></text>
</view>
<view v-if="uploadImages.length < 9" class="upload-btn" @click="chooseImage">
@ -386,8 +386,8 @@
const revert = () => {
Message.confirm({
msg: '提示',
title: '确定退单吗?'
msg: '确定退单吗?',
title: '提示'
})
.then(() => {
getTicketRevert()
@ -443,15 +443,35 @@
//
const handleSelectAlbum = () => {
uni.chooseImage({
count: 9 - uploadImages.value.length,
count: 9 - uploadImages.value.length, //
sizeType: ['compressed'],
sourceType: ['album'],
success: async (res) => {
showImageActionSheet.value = false
const tempFilePath = res.tempFilePaths[0]
const fileUrl = await fileUpload(tempFilePath)
uploadImages.value.push(fileUrl)
Toast.success('上传成功')
//
if (res.tempFilePaths.length > 1) {
uni.showLoading({ title: '正在上传...' })
}
//
for (const tempFilePath of res.tempFilePaths) {
try {
const fileUrl = await fileUpload(tempFilePath)
uploadImages.value.push(fileUrl)
} catch (error) {
console.error('上传图片失败:', error)
}
}
//
if (res.tempFilePaths.length > 1) {
uni.hideLoading()
}
Toast.success(`成功上传${res.tempFilePaths.length}张图片`)
}
})
}
@ -459,15 +479,33 @@
//
const handleTakePhoto = () => {
uni.chooseImage({
count: 1,
count: 9 - uploadImages.value.length, //
sizeType: ['compressed'],
sourceType: ['camera'],
success: async (res) => {
showImageActionSheet.value = false
const tempFilePath = res.tempFilePaths[0]
const fileUrl = await fileUpload(tempFilePath)
uploadImages.value.push(fileUrl)
Toast.success('上传成功')
//
if (res.tempFilePaths.length > 1) {
uni.showLoading({ title: '正在上传...' })
}
//
for (const tempFilePath of res.tempFilePaths) {
try {
const fileUrl = await fileUpload(tempFilePath)
uploadImages.value.push(fileUrl)
} catch (error) {
console.error('上传图片失败:', error)
}
}
//
if (res.tempFilePaths.length > 1) {
uni.hideLoading()
}
Toast.success(`成功上传${res.tempFilePaths.length}张图片`)
}
})
}

View File

@ -186,26 +186,26 @@
//
const productList = ref([
{
id: 1,
name: '示例商品名称1',
code: 'SP202505126',
spec: '默认',
quantity: 2,
price: '299.00',
image: '../../static/swiper/1.png'
},
{
id: 2,
name: '示例商品名称2',
code: 'SP202505127',
spec: '大号',
quantity: 1,
price: '399.00',
image: '../../static/swiper/1.png'
}
])
// const productList = ref([
// {
// id: 1,
// name: '1',
// code: 'SP202505126',
// spec: '',
// quantity: 2,
// price: '299.00',
// image: '../../static/swiper/1.png'
// },
// {
// id: 2,
// name: '2',
// code: 'SP202505127',
// spec: '',
// quantity: 1,
// price: '399.00',
// image: '../../static/swiper/1.png'
// }
// ])
//
const getTotalQuantity = () => {

View File

@ -153,7 +153,7 @@ const staffList = ref([
id: 1,
name: '张三',
phone: '13800138000',
avatar: '/static/swiper/1.png',
avatar: '',
permissions: ['delivery', 'complaint'],
department: '配送部'
},
@ -161,7 +161,7 @@ const staffList = ref([
id: 2,
name: '李四',
phone: '13800138001',
avatar: '/static/swiper/1.png',
avatar: '',
permissions: ['delivery', 'maintenance', 'inspection', 'facility', 'visitor'],
department: '综合部'
},
@ -169,7 +169,7 @@ const staffList = ref([
id: 3,
name: '王五',
phone: '13800138002',
avatar: '/static/swiper/1.png',
avatar: '',
permissions: ['maintenance', 'inspection'],
department: '工程部'
},
@ -177,7 +177,7 @@ const staffList = ref([
id: 4,
name: '赵六',
phone: '13800138003',
avatar: '/static/swiper/1.png',
avatar: '',
permissions: [],
department: '客服部'
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 513 KiB

View File

@ -42,25 +42,6 @@
.li-w-58{width:58rpx}
.li-w-full-70{width:70%}
.li-w-full-88{width:88%}
.li-font-550{font-weight:550}
.li-h-68{height:68rpx}
.li-mt-100{margin-top:100rpx}
.li-mt-28{margin-top:28rpx}
.li-mt-32{margin-top:32rpx}
.li-mt-90{margin-top:90rpx}
.li-mx-10{margin-left:10rpx;margin-right:10rpx}
.li-pt-270{padding-top:270rpx}
.li-rd-40{border-radius:40rpx}
.li-text-000000-color{color:rgb(0,0,0)}
.li-text-24{font-size:24rpx}
.li-text-2EA1EA-color{color:rgb(46,161,234)}
.li-text-38{font-size:38rpx}
.li-text-a5a5a5-color{color:rgb(165,165,165)}
.li-w-150{width:150rpx}
.li-w-420{width:420rpx}
.li-w-full-80{width:80%}
.li-w-full-85{width:85%}
.li-w-full-90{width:90%}
.li-flex-center{display:flex;align-items:center;justify-content:center}
.li-h-100{height:100rpx}
.li-ml-20{margin-left:20rpx}
@ -74,33 +55,16 @@
.li-rd-full-50{border-radius:50%}
.li-text-25{font-size:25rpx}
.li-text-35{font-size:35rpx}
.li-text-38{font-size:38rpx}
.li-text-42{font-size:42rpx}
.li-text-46{font-size:46rpx}
.li-w-100{width:100rpx}
.li-w-full-80{width:80%}
.bg-0070F0{background-color:rgb(0,112,240)}
.bg-FFFFFF{background-color:rgb(255,255,255)}
.border-4-white{border-style:solid;border-color:rgb(255,255,255);border-width:4rpx}
.bg-f9f9f9{background-color:rgb(249,249,249)}
.border-4-white{border-style:solid;border-color:rgb(255,255,255);border-width:4rpx}
.li-font-bold{font-weight:bold}
.li-mb-8{margin-bottom:8rpx}
.li-ml-15{margin-left:15rpx}
.li-ml-6{margin-left:6rpx}
.li-mr-6{margin-right:6rpx}
.li-p-15{padding:15rpx}
.li-pb-15{padding-bottom:15rpx}
.li-pb-30{padding-bottom:30rpx}
.li-pt-25{padding-top:25rpx}
.li-pt-4{padding-top:4rpx}
.li-text-009aff-color{color:rgb(0,154,255)}
.li-text-32{font-size:32rpx}
.li-text-333333-color{color:rgb(51,51,51)}
.li-text-36{font-size:36rpx}
.li-text-55{font-size:55rpx}
.li-text-70{font-size:70rpx}
.li-text-9a9a9a-color{color:rgb(154,154,154)}
.li-text-ff0000-color{color:rgb(255,0,0)}
.li-w-full-100{width:100%}
.li-w-full-92{width:92%}
.li-h-240{height:240rpx}
.li-h-250{height:250rpx}
.li-h-50{height:50rpx}
@ -124,8 +88,11 @@
.li-rd-20{border-radius:20rpx}
.li-rd-tl-30-important{border-top-left-radius:30rpx !important}
.li-rd-tr-30-important{border-top-right-radius:30rpx !important}
.li-text-000000-color{color:rgb(0,0,0)}
.li-text-19171B-color{color:rgb(25,23,27)}
.li-text-20{font-size:20rpx}
.li-text-24{font-size:24rpx}
.li-text-32{font-size:32rpx}
.li-text-706e70-color{color:rgb(112,110,112)}
.li-text-BBBDDA-color{color:rgb(187,189,218)}
.li-text-F2F7FD-color{color:rgb(242,247,253)}
@ -136,14 +103,39 @@
.li-w-50{width:50rpx}
.li-w-60{width:60rpx}
.li-w-full-94{width:94%}
.li-font-400{font-weight:400}
.li-m-30{margin:30rpx}
.li-text-595959-color{color:rgb(89,89,89)}
.li-mr-200{margin-right:200rpx}
.li-mr-4{margin-right:4rpx}
.li-text-48{font-size:48rpx}
.li-text-666-color{color:rgb(102,102,102)}
.li-mb-25{margin-bottom:25rpx}
.li-mb-8{margin-bottom:8rpx}
.li-ml-15{margin-left:15rpx}
.li-ml-6{margin-left:6rpx}
.li-mr-6{margin-right:6rpx}
.li-p-15{padding:15rpx}
.li-pb-15{padding-bottom:15rpx}
.li-pb-30{padding-bottom:30rpx}
.li-pt-25{padding-top:25rpx}
.li-pt-4{padding-top:4rpx}
.li-text-009aff-color{color:rgb(0,154,255)}
.li-text-333333-color{color:rgb(51,51,51)}
.li-text-36{font-size:36rpx}
.li-text-55{font-size:55rpx}
.li-text-70{font-size:70rpx}
.li-text-9a9a9a-color{color:rgb(154,154,154)}
.li-text-ff0000-color{color:rgb(255,0,0)}
.li-w-full-100{width:100%}
.li-w-full-92{width:92%}
.li-font-550{font-weight:550}
.li-h-68{height:68rpx}
.li-mt-100{margin-top:100rpx}
.li-mt-28{margin-top:28rpx}
.li-mt-32{margin-top:32rpx}
.li-mt-90{margin-top:90rpx}
.li-mx-10{margin-left:10rpx;margin-right:10rpx}
.li-pt-270{padding-top:270rpx}
.li-rd-40{border-radius:40rpx}
.li-text-2EA1EA-color{color:rgb(46,161,234)}
.li-text-a5a5a5-color{color:rgb(165,165,165)}
.li-w-150{width:150rpx}
.li-w-420{width:420rpx}
.li-w-full-85{width:85%}
.li-w-full-90{width:90%}
.li-flex-wrap{flex-wrap:wrap}
.li-h-110{height:110rpx}
.li-items-start{align-items:start}
@ -161,52 +153,60 @@
.li-py-6{padding-top:6rpx;padding-bottom:6rpx}
.li-text-40{font-size:40rpx}
.li-text-5f5f5f-color{color:rgb(95,95,95)}
.li-text-666-color{color:rgb(102,102,102)}
.li-text-right{text-align:right}
.li-w-110{width:110rpx}
.li-w-400{width:400rpx}
.overflow-hidden{overflow:hidden}
.li-border-b{border-style:solid;border-color:b;border-width:1rpx}
.li-mb-15{margin-bottom:15rpx}
.li-mb-25{margin-bottom:25rpx}
.li-font-400{font-weight:400}
.li-m-30{margin:30rpx}
.li-text-595959-color{color:rgb(89,89,89)}
.li-mb-30{margin-bottom:30rpx}
.li-my-20{margin-top:20rpx;margin-bottom:20rpx}
.li-p-30{padding:30rpx}
.li-py-30{padding-top:30rpx;padding-bottom:30rpx}
.li-text-0070F0-color{color:rgb(0,112,240)}
.li-text-333-color{color:rgb(51,51,51)}
.li-text-ff6b35-color{color:rgb(255,107,53)}
.li-mt-100-important{margin-top:100rpx !important}
.li-mt-8{margin-top:8rpx}
.li-text-999-color{color:rgb(153,153,153)}
.li-ml-10{margin-left:10rpx}
.li-mr-200{margin-right:200rpx}
.li-mr-4{margin-right:4rpx}
.li-mt-100-important{margin-top:100rpx !important}
.li-mt-4{margin-top:4rpx}
.li-mt-50{margin-top:50rpx}
.li-mt-8{margin-top:8rpx}
.li-py-40{padding-top:40rpx;padding-bottom:40rpx}
.li-text-0070F0-color{color:rgb(0,112,240)}
.li-text-333-color{color:rgb(51,51,51)}
.li-text-34{font-size:34rpx}
.li-text-44{font-size:44rpx}
.li-text-48{font-size:48rpx}
.li-text-90{font-size:90rpx}
.li-text-999-color{color:rgb(153,153,153)}
.li-text-center{text-align:center}
.li-text-white{color:rgb(255,255,255)}
.li-w-500{width:500rpx}
.li-border-b{border-style:solid;border-color:b;border-width:1rpx}
.li-mb-15{margin-bottom:15rpx}
.li-my-20{margin-top:20rpx;margin-bottom:20rpx}
.li-p-30{padding:30rpx}
.li-py-30{padding-top:30rpx;padding-bottom:30rpx}
.li-text-ff6b35-color{color:rgb(255,107,53)}
.li-h-90{height:90rpx}
.li-text-47{font-size:47rpx}
.li-w-90{width:90rpx}
.li-flex-1{flex:1}
.li-mt-25{margin-top:25rpx}
.li-mt-5{margin-top:5rpx}
.li-text-999999-color{color:rgb(153,153,153)}
.li-w-160{width:160rpx}
.li-block{display:block}
.li-items-baseline{align-items:baseline}
.li-mr-15{margin-right:15rpx}
.li-mt-5{margin-top:5rpx}
.li-opacity-100{undefined:1}
.li-rd-12{border-radius:12rpx}
.li-rd-16{border-radius:16rpx}
.li-text-0a4696-color{color:rgb(10,70,150)}
.li-text-50{font-size:50rpx}
.li-line-clamp-2{overflow:hidden;display:-webkit-box;line-clamp:2;-webkit-box-orient:vertical;-webkit-line-clamp:2}
.li-w-full-96{width:96%}
.li-flex-1{flex:1}
.li-mt-25{margin-top:25rpx}
.li-text-999999-color{color:rgb(153,153,153)}
.li-w-160{width:160rpx}
.li-mt-200{margin-top:200rpx}
.li-pt-6{padding-top:6rpx}
.li-line-clamp-2{overflow:hidden;display:-webkit-box;line-clamp:2;-webkit-box-orient:vertical;-webkit-line-clamp:2}
.li-w-full-96{width:96%}
.li-my-10{margin-top:10rpx;margin-bottom:10rpx}
.li-p-20{padding:20rpx}
@ -217,7 +217,6 @@
.li-text-dddddd-color{color:rgb(221,221,221)}
.li-text-ff9900-color{color:rgb(255,153,0)}
.li-flex-row-reverse{flex-direction:row-reverse}
.li-opacity-80{undefined:0.8}
.li-pb-40{padding-bottom:40rpx}
@ -239,3 +238,4 @@

View File

@ -37,6 +37,7 @@ export const request = (endpoint : string, options : RequestOptions = {}) => {
'Authorization': 'Bearer ' + uni.$store.state.token
},
success: (response) => {
console.log(response);
if (response.statusCode >= 200 && response.statusCode < 300) {
if (response.data.code == 500) {
uni.$store.commit("logout")