Compare commits

..

No commits in common. "b2ad1d6abcd225facad265ba05a97fce039500fd" and "d49514d426b964017d3735683592058bd075b3fa" have entirely different histories.

13 changed files with 407 additions and 550 deletions

View File

@ -38,7 +38,6 @@ export const apiArr = {
commInfo: "/api/v2/wechat/mpuser-crud/community-owner/info",//我的房产信息小区列表 commInfo: "/api/v2/wechat/mpuser-crud/community-owner/info",//我的房产信息小区列表
create: "/api/v2/wechat/community-owners/create",//创建新的业主信息 create: "/api/v2/wechat/community-owners/create",//创建新的业主信息
communityInfo: "/api/v2/community/get-one",//获取小区信息
getOrderList:"/api/v2/wechat/community-orders/get-all-list",//获取账单 getOrderList:"/api/v2/wechat/community-orders/get-all-list",//获取账单
getCommunityRoomList:"/api/v2/wechat/community-room/list", //获取房源列表 getCommunityRoomList:"/api/v2/wechat/community-room/list", //获取房源列表

View File

@ -1,13 +1,19 @@
<template> <template>
<div class="container"> <div class="container">
<div class="empty" v-if="communityList.length == 0"> <div class="empty" v-if="communityList.length == 0">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_newEmpty.png" alt="" /> <image
src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_newEmpty.png"
alt=""
/>
<text>当前账户未绑定任何项目房源信息</text> <text>当前账户未绑定任何项目房源信息</text>
<button class="emptyBtn" @click="addCommunity">新增房产绑定</button> <button class="emptyBtn" @click="addCommunity">新增房产绑定</button>
<!-- <button class="emptyBtn2" @click="refresh">刷新</button> --> <!-- <button class="emptyBtn2" @click="refresh">刷新</button> -->
</div> </div>
<div v-else> <div v-else>
<div class="searchBox" :style="{ height: localHeight + 'px', paddingTop: top + 'px' }"> <div
class="searchBox"
:style="{ height: localHeight + 'px', paddingTop: top + 'px' }"
>
<div class="searchBox_add"> <div class="searchBox_add">
<div class="emptyCommunity" @click="addCommunity"> <div class="emptyCommunity" @click="addCommunity">
{{ communityVal }} {{ communityVal }}
@ -17,49 +23,81 @@
<div class="swiperBox1"> <div class="swiperBox1">
<swiper @animationfinish="swipers" autoplay circular> <swiper @animationfinish="swipers" autoplay circular>
<swiper-item v-for="(item, index) in bannerList" :key="index" @click="headerServerClick(item)"> <swiper-item
v-for="(item, index) in bannerList"
:key="index"
@click="headerServerClick(item)"
>
<image :src="item.ad_picture" mode="aspectFill" /> <image :src="item.ad_picture" mode="aspectFill" />
</swiper-item> </swiper-item>
</swiper> </swiper>
<view class="dot"> <view class="dot">
<view :class="['dotItem', currentIdx == index ? 'active' : '']" v-for="(item, index) in bannerList" <view
:key="index"> :class="['dotItem', currentIdx == index ? 'active' : '']"
v-for="(item, index) in bannerList"
:key="index"
>
</view> </view>
</view> </view>
</div> </div>
<div class="swiperBox2"> <div class="swiperBox2">
<swiper @animationfinish="swipers" autoplay circular> <swiper @animationfinish="swipers" autoplay circular>
<swiper-item v-for="(item, index) in streamerList" :key="index" @click="headerServerClick(item)"> <swiper-item
<image :src="item.ad_picture" mode="aspectFill" class="swiperBox2_img" /> v-for="(item, index) in streamerList"
:key="index"
@click="headerServerClick(item)"
>
<image
:src="item.ad_picture"
mode="aspectFill"
class="swiperBox2_img"
/>
</swiper-item> </swiper-item>
</swiper> </swiper>
</div> </div>
<view class="funcList"> <view class="funcList">
<u-grid :col="rowNum" :border="false"> <u-grid :col="rowNum" :border="false">
<u-grid-item v-for="(item, index) in functionList" @click="jump(item.mini_program_url)" :key="index"> <u-grid-item
v-for="(item, index) in functionList"
@click="jump(item.mini_program_url)"
:key="index"
>
<image class="grid_Pic" :src="item.nav_icon" mode=""></image> <image class="grid_Pic" :src="item.nav_icon" mode=""></image>
<text class="grid_Text">{{ item.nav_name }}</text> <text class="grid_Text">{{ item.nav_name }}</text>
</u-grid-item> </u-grid-item>
</u-grid> </u-grid>
</view> </view>
<div v-for="(item, index) in tileList" :key="index" :class="['ads', index == 0 ? 'ads_first' : '']" <div
@click="headerServerClick(item)"> v-for="(item, index) in tileList"
:key="index"
:class="['ads', index == 0 ? 'ads_first' : '']"
@click="headerServerClick(item)"
>
<image :src="item.ad_picture" mode="aspectFill" /> <image :src="item.ad_picture" mode="aspectFill" />
</div> </div>
<div class="tabs"> <div class="tabs">
<div v-for="(item, index) in categoryList" :key="index" <div
:class="['tabItem', selectedTab === index ? 'active2' : '']" @click="selectTab(index, item)"> v-for="(item, index) in categoryList"
:key="index"
:class="['tabItem', selectedTab === index ? 'active2' : '']"
@click="selectTab(index, item)"
>
{{ item.category_name }} {{ item.category_name }}
</div> </div>
</div> </div>
<div class="newsList"> <div class="newsList">
<div class="newsItem" v-for="item in infoList" @click="detail(item)" :key="item.id"> <div
class="newsItem"
v-for="item in infoList"
@click="detail(item)"
:key="item.id"
>
<div class="newsItem_left"> <div class="newsItem_left">
<div class="newsItem_left_tit">{{ item.title }}</div> <div class="newsItem_left_tit">{{ item.title }}</div>
<div class="newsItem_left_sub">{{ item.author }}</div> <div class="newsItem_left_sub">{{ item.author }}</div>
@ -76,13 +114,19 @@
<div class="bigAdsCon"> <div class="bigAdsCon">
<div class="bigAdsCon_img"> <div class="bigAdsCon_img">
<swiper @animationfinish="swipers" autoplay circular> <swiper @animationfinish="swipers" autoplay circular>
<swiper-item v-for="(item, index) in largePopList" :key="index" @click="headerServerClick(item)"> <swiper-item
v-for="(item, index) in largePopList"
:key="index"
@click="headerServerClick(item)"
>
<image :src="item.ad_picture" mode="aspectFill" /> <image :src="item.ad_picture" mode="aspectFill" />
</swiper-item> </swiper-item>
</swiper> </swiper>
</div> </div>
<div class="close" @click="closeAds"> <div class="close" @click="closeAds">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_close.png"> <image
src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_close.png"
>
</image> </image>
</div> </div>
</div> </div>
@ -91,7 +135,13 @@
<div class="bigAds" v-if="ads2Show"> <div class="bigAds" v-if="ads2Show">
<div class="bigAdsCon2"> <div class="bigAdsCon2">
<div class="bigAdsCon2_img"> <div class="bigAdsCon2_img">
<swiper :current="currentSwiperIndex" @change="onSwiperChange" @animationfinish="swipers" autoplay circular> <swiper
:current="currentSwiperIndex"
@change="onSwiperChange"
@animationfinish="swipers"
autoplay
circular
>
<swiper-item v-for="(item, index) in popList" :key="index"> <swiper-item v-for="(item, index) in popList" :key="index">
<image :src="item.ad_picture" mode="aspectFill" /> <image :src="item.ad_picture" mode="aspectFill" />
</swiper-item> </swiper-item>
@ -164,11 +214,6 @@ export default {
}; };
}, },
async onLoad(options) { async onLoad(options) {
//
},
async onShow() {
//
// if (!uni.getStorageSync("changeCommData")) { // if (!uni.getStorageSync("changeCommData")) {
// return; // return;
// } // }
@ -201,9 +246,8 @@ export default {
return item.front_end_display != 1; return item.front_end_display != 1;
}); });
console.log("🚀 ~ onLoad ~ res.rows:", res.rows) console.log("🚀 ~ onLoad ~ res.rows:", res.rows)
if (!uni.getStorageSync("changeCommData")) { uni.setStorageSync("changeCommData",{ name: res.rows[0].name, id: res.rows[0].community_id })
uni.setStorageSync("changeCommData", { name: res.rows[0].name, id: res.rows[0].community_id })
}
this.communityList = res.rows; this.communityList = res.rows;
}); });
const meun = menuButtonInfo(); const meun = menuButtonInfo();
@ -214,7 +258,6 @@ export default {
if (this.communityList.length == 0) { if (this.communityList.length == 0) {
this.communityVal = "添加我的房产"; this.communityVal = "添加我的房产";
} else { } else {
console.log("🚀 ~ onLoad ~ this.communityList:", this.communityList)
this.communityVal = uni.getStorageSync("changeCommData").name; this.communityVal = uni.getStorageSync("changeCommData").name;
} }
this.getfunctionNum(); this.getfunctionNum();

View File

@ -79,7 +79,7 @@ export default {
this.currentCommunity = e this.currentCommunity = e
uni.setStorageSync('changeCommData', { id: e.community_id, name: e.name }); uni.setStorageSync('changeCommData', { id: e.community_id, name: e.name });
uni.setStorageSync('currentCommunityAddr',e.addr); uni.setStorageSync('currentCommunityAddr',e.addr);
NavgateTo("1") NavgateTo("/packages/community/index/index")
}, },
}, },

View File

@ -122,8 +122,6 @@ export default {
uni.removeStorageSync('is_shop'); uni.removeStorageSync('is_shop');
uni.removeStorageSync('shopId'); uni.removeStorageSync('shopId');
uni.removeStorageSync('order_dispatch_permission'); uni.removeStorageSync('order_dispatch_permission');
uni.removeStorageSync('work_order_permission');
const button = uni.createSelectorQuery().select('#hiddenLoginBtn'); const button = uni.createSelectorQuery().select('#hiddenLoginBtn');
button.boundingClientRect().exec(); button.boundingClientRect().exec();
@ -232,7 +230,6 @@ export default {
if (item) { if (item) {
const { community_worker } = res; const { community_worker } = res;
uni.setStorageSync('order_dispatch_permission', community_worker && community_worker[0].order_dispatch_permission == 1 || false); uni.setStorageSync('order_dispatch_permission', community_worker && community_worker[0].order_dispatch_permission == 1 || false);
uni.setStorageSync('work_order_permission', community_worker && community_worker[0].work_order_permission == 1 || false);
uni.setStorageSync('phone', res.account); uni.setStorageSync('phone', res.account);
uni.hideLoading(); uni.hideLoading();
uni.showToast({ uni.showToast({

View File

@ -1,203 +1,230 @@
<template> <template>
<view class="container"> <div class="container">
<view class="searchBox" :style="{ height: localHeight + 'px', paddingTop: top + 'px' }"> <div
<view class="searchBox_add"> class="searchBox"
<view class="searchBox_left"> :style="{ height: localHeight + 'px', paddingTop: top + 'px' }"
<u-icon bold color="#000" size="40" name="arrow-left" @click="headerBackClick"></u-icon> >
</view> <div class="searchBox_add">
<view class="searchBox_mid">工单详情</view> <div class="searchBox_left">
<view class="searchBox_right"></view> <u-icon
</view> bold
</view> color="#000"
size="40"
name="arrow-left"
@click="headerBackClick"
></u-icon>
</div>
<div class="searchBox_mid">工单详情</div>
<div class="searchBox_right"></div>
</div>
</div>
<view class="repairMsg"> <div class="repairMsg">
<view :class="['orderItemTit', statusType[info.status].style]"> <div :class="['orderItemTit', statusType[info.status].style]">
<view class="orderItemTit_left">工单编号{{ info.order_code }}</view> <div class="orderItemTit_left">工单编号{{ info.order_code }}</div>
<view class="orderItemTit_right">{{ statusType[info.status].desc }}</view> <div class="orderItemTit_right">{{ statusType[info.status].desc }}</div>
</view> </div>
<view class="row"> <div class="row">
<view class="row_label">小区房源名称</view> <div class="row_label">小区房源名称</div>
<view class="row_con">{{ info.room.name }}</view> <div class="row_con">{{ info.room.name }}</div>
</view> </div>
<view class="row"> <div class="row">
<view class="row_label">报修类型</view> <div class="row_label">报修类型</div>
<view class="row_con">{{ info.ac.category_name }}</view> <div class="row_con">{{ info.ac.category_name }}</div>
</view> </div>
<view class="row"> <div class="row">
<view class="row_label">问题描述</view> <div class="row_label">问题描述</div>
<view class="row_con">{{ info.problem_description }}</view> <div class="row_con">{{ info.problem_description }}</div>
</view> </div>
<view class="row"> <div class="row">
<view class="row_label">联系人</view> <div class="row_label">联系人</div>
<view class="row_con">{{ info.contact_name }}</view> <div class="row_con">{{ info.contact_name }}</div>
</view> </div>
<view class="row"> <div class="row">
<view class="row_label">联系电话</view> <div class="row_label">联系电话</div>
<view class="row_con">{{ info.contact_phone }}</view> <div class="row_con">{{ info.contact_phone }}</div>
</view> </div>
<view class="row"> <div class="row">
<view class="row_label">上门时间</view> <div class="row_label">上门时间</div>
<view class="row_con">{{ info.service_time }}</view> <div class="row_con">{{ info.service_time }}</div>
</view> </div>
</view> </div>
<view class="repairMsg"> <div class="repairMsg">
<view class="row"> <div class="row">
<view class="row_label df">图片</view> <div class="row_label df">图片</div>
<view class="row_con"> <div class="row_con">
<view v-if="info.imagesList && info.imagesList.length == 0">暂无图片</view> <view v-if="info.imagesList && info.imagesList.length == 0">暂无图片</view>
<image v-else v-for="(item, index) in info.imagesList" :key="index" :src="item" mode="" <image
@click="handlerPreviewImageClick(item)"> v-else
v-for="(item, index) in info.imagesList"
:key="index"
:src="item"
mode=""
@click="handlerPreviewImageClick(item)"
>
</image> </image>
</view> </div>
</view> </div>
<view class="row"> <div class="row">
<view class="row_label df">视频</view> <div class="row_label df">视频</div>
<view class="row_con"> <div class="row_con">
<view v-if="info.videosList && info.videosList.length == 0">暂无视频</view> <view v-if="info.videosList && info.videosList.length == 0">暂无视频</view>
<view v-else v-for="(item, index) in info.videosList" :key="index" class="videoBOX"> <div v-else v-for="(item, index) in info.videosList" :key="index" class="videoBOX">
<video id="myVideo" :src="item" playsinline webkit-playsinline></video> <video id="myVideo" :src="item" playsinline webkit-playsinline></video>
</view> </div>
</view> </div>
</view> </div>
<view class="row" v-if="info.assign_time"> <div class="row" v-if="info.assign_time">
<view class="row_label">指派时间</view> <div class="row_label">指派时间</div>
<view class="row_con noneBor">{{ info.assign_time }}</view> <div class="row_con noneBor">{{ info.assign_time }}</div>
</view> </div>
</view> </div>
<!-- 维修状态非带指派 --> <!-- 维修状态非带指派 -->
<view class="repairMsg" v-if="info.status !== 1"> <div class="repairMsg" v-if="info.status !== 1">
<view class="row"> <div class="row">
<view class="row_label">维修师傅</view> <div class="row_label">维修师傅</div>
<view class="row_con">{{ info.repairman_worker.name }}</view> <div class="row_con">{{ info.repairman_worker.name }}</div>
</view> </div>
<view class="row"> <div class="row">
<view class="row_label">师傅手机号</view> <div class="row_label">师傅手机号</div>
<view class="row_con">{{ info.repairman_worker.mobile }}</view> <div class="row_con">{{ info.repairman_worker.mobile }}</div>
</view> </div>
<view class="row"> <div class="row">
<view class="row_label">师傅工号</view> <div class="row_label">师傅工号</div>
<view class="row_con noneBor">{{ info.repairman_worker.emp_no }}</view> <div class="row_con noneBor">{{ info.repairman_worker.emp_no }}</div>
</view> </div>
</view> </div>
<!-- 工单状态非带指派或者进行中 --> <!-- 工单状态非带指派或者进行中 -->
<view class="repairMsg" v-if="info.status !== 1 && info.status !== 2"> <div class="repairMsg" v-if="info.status !== 1 && info.status !== 2">
<view class="row"> <div class="row">
<view class="row_label df">维修图片</view> <div class="row_label df">维修图片</div>
<view class="row_con"> <div class="row_con">
<view v-if="info.repairImagesList && info.repairImagesList.length == 0">暂无图片</view> <view v-if="info.repairImagesList && info.repairImagesList.length == 0">暂无图片</view>
<image v-for="(item, index) in info.repairImagesList" :key="index" :src="item" mode="" <image
@click="headerRepairImagesClick(item)" /> v-for="(item, index) in info.repairImagesList"
</view> :key="index"
</view> :src="item"
mode=""
@click="headerRepairImagesClick(item)"
/>
</div>
</div>
<view class="row"> <div class="row">
<view class="row_label df">维修视频</view> <div class="row_label df">维修视频</div>
<view class="row_con"> <div class="row_con">
<view v-if="info.repairVideosList && info.repairVideosList.length == 0">暂无视频</view> <view v-if="info.repairVideosList && info.repairVideosList.length == 0">暂无视频</view>
<view v-else v-for="(item, index) in info.repairVideosList" :key="index" class="videoBOX"> <div v-else v-for="(item, index) in info.repairVideosList" :key="index" class="videoBOX">
<video id="myVideo" :src="item" playsinline webkit-playsinline></video> <video id="myVideo" :src="item" playsinline webkit-playsinline></video>
</view> </div>
</view> </div>
</view> </div>
<view class="row"> <div class="row">
<view class="row_label">维修描述</view> <div class="row_label">维修描述</div>
<view class="row_con noneBor">{{ info.repair_description || '暂无描述' }}</view> <div class="row_con noneBor">{{ info.repair_description || '暂无描述' }}</div>
</view> </div>
</view> </div>
<view class="repairMsg" v-if="type === 'edit'"> <div class="repairMsg" v-if="type === 'edit'">
<view class="repairMedia"> <div class="repairMedia">
<view class="edit_row df"> <div class="edit_row df">
<view class="row_label">维修图片</view> <div class="row_label">维修图片</div>
<view class="row_con2"> <div class="row_con2">
<u-upload :fileList="imgList" name="imgList" @afterRead="afterReadImg" @delete="deletePic" multiple <u-upload :fileList="imgList" name="imgList" @afterRead="afterReadImg" @delete="deletePic" multiple
:maxCount="10"> :maxCount="10">
<view class="imgCon"> <div class="imgCon">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_imageImg.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_imageImg.png" mode="widthFix"></image>
mode="widthFix"></image>
上传图片 上传图片
</view> </div>
</u-upload> </u-upload>
</view> </div>
</view> </div>
<view class="edit_row df"> <div class="edit_row df">
<view class="row_label">上传视频</view> <div class="row_label">上传视频</div>
<view class="row_con2"> <div class="row_con2">
<u-upload v-if="!videoList.url" :fileList="videoList" @afterRead="afterReadVideo" @delete="deleteVideo" <u-upload v-if="!videoList.url" :fileList="videoList" @afterRead="afterReadVideo" @delete="deleteVideo" name="videoList"
name="videoList" :maxCount="1" accept="video"> :maxCount="1" accept="video">
<view class="imgCon"> <div class="imgCon">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_videoImg.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_videoImg.png" mode="widthFix"></image>
mode="widthFix"></image>
上传视频 上传视频
</view> </div>
</u-upload> </u-upload>
<view v-if="videoList.url" class="videoBOX"> <div v-if="videoList.url" class="videoBOX">
<video id="myVideo" :src="videoList.url" playsinline webkit-playsinline></video> <video id="myVideo" :src="videoList.url" playsinline webkit-playsinline></video>
<view class="mask" @click="playFullScreenVideo"> <div class="mask" @click="playFullScreenVideo">
<!-- <view class="mask_con"> <!-- <div class="mask_con">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_play.png" mode="widthFix"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_play.png" mode="widthFix"></image>
</view> --> </div> -->
<view class="mask_cancel" @click="cancels">删除</view> <div class="mask_cancel" @click="cancels">删除</div>
</view> </div>
</view> </div>
</view> </div>
</view> </div>
</view> </div>
<view class="edit_row"> <div class="edit_row">
<view class="row_label">维修描述</view> <div class="row_label">维修描述</div>
<textarea placeholder="请输入维修描述" :value="repairRemarks" data-name="repairRemarks" @input="handlerInputClick" <textarea placeholder="请输入维修描述" :value="repairRemarks" data-name="repairRemarks" @input="handlerInputClick" auto-height />
auto-height /> </div>
</view> </div>
</view> <div
<view class="white_container" v-if="info.status == 2 && type === 'edit'" @click="headerChangeStateClick"> class="white_container"
<view style="display: flex; justify-content: space-between"> v-if="info.status == 2 && type === 'edit'"
<view style="display: flex"> @click="headerChangeStateClick"
<view class="white_label">工单状态</view> >
<view class="whit_desc"> <div style="display: flex; justify-content: space-between">
<div style="display: flex">
<div class="white_label">工单状态</div>
<div class="whit_desc">
{{ orderState.desc }} {{ orderState.desc }}
</view> </div>
</view> </div>
<u-icon name="arrow-up" v-if="!orderSelect" /> <u-icon name="arrow-up" v-if="!orderSelect" />
<u-icon name="arrow-down" v-if="orderSelect" /> <u-icon name="arrow-down" v-if="orderSelect" />
</view> </div>
<view class="statePupop" v-if="orderSelect"> <view class="statePupop" v-if="orderSelect">
<view class="statePopop_label" v-for="(item, index) in orderStateList" :key="index" <view
@click.stop="headerSelectClick(item)">{{ item.desc }}</view> class="statePopop_label"
v-for="(item, index) in orderStateList"
:key="index"
@click.stop="headerSelectClick(item)"
>{{ item.desc }}</view>
</view> </view>
</view> </div>
<view class="btn_view" v-if="info.status == 1 && order_dispatch_permission"> <div class="btn_view" v-if="info.status == 1 && order_dispatch_permission">
<view class="btn" @click="headerSelectMasterClick">派单</view>
</view>
<view class="btn_view" v-if="info.status == 1 && work_order_permission && allow_grab_order">
<view class="btn" @click="headerTakeClick">接单</view> <view class="btn" @click="headerTakeClick">接单</view>
</view> <view class="btn" @click="headerSelectMasterClick">派单</view>
</div>
<!-- 待派单状态 无派单权限按钮 --> <!-- 待派单状态 无派单权限按钮 -->
<view class="btn" v-else-if="info.status == 1" @click="headerTakeClick">接单</view> <div class="btn" v-else-if="info.status == 1" @click="headerTakeClick">接单</div>
<!-- 进行中状态编辑维修信息 --> <!-- 进行中状态编辑维修信息 -->
<view class="btn" v-if="info.status == 2" @click="headerEditClick"> <div class="btn" v-if="info.status == 2" @click="headerEditClick">
{{ type === "edit" ? "确定" : "编辑" }} {{ type === "edit" ? "确定" : "编辑" }}
</view> </div>
<u-popup :show="show" @close="close" round="50rpx" style="height: 50%; overflow: hidden"> <u-popup
:show="show"
@close="close"
round="50rpx"
style="height: 50%; overflow: hidden"
>
<view class="master_popup"> <view class="master_popup">
<view class="master_popup_title"> <view class="master_popup_title">
<view></view> <view></view>
@ -211,21 +238,20 @@
<view class="master_popup_tabel_left"> <view class="master_popup_tabel_left">
<view class="master_popup_label"> <view class="master_popup_label">
<view class="label">师傅名称</view> <view class="label">师傅名称</view>
<view>{{ item.name }}</view> <view>{{item.name}}</view>
</view> </view>
<view class="master_popup_label"> <view class="master_popup_label">
<view class="label">师傅手机号</view> <view class="label">师傅手机号</view>
<view>{{ item.mobile }}</view> <view>{{ item.mobile }}</view>
</view> </view>
</view> </view>
<radio :value="item.worker_id" @click="headerRadioClick" :data-name="item.worker_id" <radio :value="item.worker_id" @click="headerRadioClick" :data-name="item.worker_id" :checked="checked === item.worker_id" />
:checked="checked === item.worker_id" />
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</u-popup> </u-popup>
</view> </div>
</template> </template>
<script> <script>
@ -286,13 +312,10 @@ export default {
}, },
show: false, show: false,
communityMasterList: [], communityMasterList: [],
order_dispatch_permission: false, order_dispatch_permission: false,
work_order_permission: false,
allow_grab_order: false,
repairRemarks: '', // repairRemarks: '', //
imgList: [], imgList: [],
videoList: {}, videoList: {},
}; };
}, },
@ -323,51 +346,51 @@ export default {
const res = await request(apiArr.workMasterLick, "POST", { const res = await request(apiArr.workMasterLick, "POST", {
community_id: this.info.community_id, community_id: this.info.community_id,
}); });
this.communityMasterList = res.rows; this.communityMasterList = res.rows;
this.show = true; this.show = true;
}, },
// //
async afterReadImg(e) { async afterReadImg(e){
const { file } = e; const { file} = e;
console.log(e); console.log(e);
file.forEach(item => { file.forEach(item => {
upload(item.url, res => { upload(item.url, res => {
console.log(res.data.path); console.log(res.data.path);
this.imgList.push({ this.imgList.push({
url: picUrl + res.data.path, url: picUrl + res.data.path,
picUrl: res.data.path, picUrl: res.data.path,
}) })
}) })
}) })
uni.hideLoading(); uni.hideLoading();
uni.showToast({ uni.showToast({
title: '上传成功', title: '上传成功',
icon: 'success' icon: 'success'
}); });
}, },
deletePic(e) { deletePic(e) {
this.imgList.splice(e.index, 1); this.imgList.splice(e.index, 1);
}, },
afterReadVideo(e) { afterReadVideo(e){
uploadVideo(e.file.url, res => { uploadVideo(e.file.url, res => {
this.videoList = { this.videoList = {
url: picUrl + res.data.url, url: picUrl + res.data.url,
videos: res.data.url videos: res.data.url
} }
}) })
}, },
deleteVideo() { deleteVideo() {
this.videoList = {}; this.videoList = {};
}, },
playFullScreenVideo() { playFullScreenVideo() {
this.videoContext = this.videoContext || wx.createVideoContext('myVideo') this.videoContext = this.videoContext || wx.createVideoContext('myVideo')
this.videoContext.requestFullScreen() // this.videoContext.requestFullScreen() //
}, },
cancels(e) { cancels(e) {
this.videoList = {}; this.videoList = {};
}, },
// //
async headerEditClick() { async headerEditClick() {
@ -388,8 +411,8 @@ export default {
}); });
setTimeout(() => { setTimeout(() => {
uni.navigateBack({ uni.navigateBack({
delta: 1 delta: 1
}) })
}, 2000) }, 2000)
} else { } else {
@ -398,9 +421,9 @@ export default {
}, },
// input // input
handlerInputClick(e) { handlerInputClick(e) {
const { name } = e.currentTarget.dataset; const { name} = e.currentTarget.dataset;
this[name] = e.detail.value this[name] = e.detail.value
}, },
// //
headerChangeStateClick() { headerChangeStateClick() {
@ -413,51 +436,51 @@ export default {
this.orderSelect = false; this.orderSelect = false;
}, },
// //
async headerConfirmClick() { async headerConfirmClick() {
if (!this.checked) { if (!this.checked) {
uni.showToast({ uni.showToast({
title: '请选择维修师傅', title: '请选择维修师傅',
icon: 'none' icon: 'none'
}) })
return; return;
} }
console.log('this.chec', this.checked); console.log('this.chec', this.checked);
const res = await request(apiArr.workOrderCrudDispatch, 'POST', { const res = await request(apiArr.workOrderCrudDispatch, 'POST', {
worker_id: this.checked, worker_id: this.checked,
id: this.info.id, id: this.info.id,
}) })
uni.showToast({ uni.showToast({
title: '派单成功', title: '派单成功',
icon: 'success', icon: 'success',
mask: true mask: true
}) })
setTimeout(() => { setTimeout(() => {
uni.navigateBack({ uni.navigateBack({
delta: 1 delta: 1
}) })
}, 2000) }, 2000)
}, },
// //
handlerPreviewImageClick(item) { handlerPreviewImageClick(item) {
uni.previewImage({ uni.previewImage({
urls: this.info.imagesList, urls: this.info.imagesList,
current: item, current: item,
}); });
}, },
headerRepairImagesClick(item) { headerRepairImagesClick(item) {
uni.previewImage({ uni.previewImage({
urls: this.info.repairImagesList, urls: this.info.repairImagesList,
current: item, current: item,
}); });
}, },
// //
headerRadioClick(e) { headerRadioClick(e) {
console.log('e', e); console.log('e', e);
const { name } = e.currentTarget.dataset; const { name } = e.currentTarget.dataset;
this.checked = name; this.checked = name;
}, },
close() { close() {
this.show = false; this.show = false;
}, },
@ -479,20 +502,15 @@ export default {
onLoad(options) { onLoad(options) {
console.log("1111", options); console.log("1111", options);
const order_dispatch_permission = uni.getStorageSync('order_dispatch_permission'); const order_dispatch_permission = uni.getStorageSync('order_dispatch_permission');
this.order_dispatch_permission = order_dispatch_permission; this.order_dispatch_permission = order_dispatch_permission;
const work_order_permission = uni.getStorageSync('work_order_permission');
this.work_order_permission = work_order_permission;
const allow_grab_order = uni.getStorageSync('allow_grab_order');
this.allow_grab_order = allow_grab_order;
const meun = menuButtonInfo(); const meun = menuButtonInfo();
this.top = meun.top; this.top = meun.top;
this.localHeight = meun.height; this.localHeight = meun.height;
this.init(options.id); this.init(options.id);
}, },
onShow() { }, onShow() {},
}; };
</script> </script>

View File

@ -1,108 +0,0 @@
.container {
display: flex;
flex-direction: column;
min-height: 100vh;
background-color: #ffffff;
}
.searchBox {
display: flex;
align-items: center;
/* position: absolute; */
left: 0;
z-index: 2;
}
.searchBox_add {
margin: 10rpx 20rpx;
}
.emptyCommunity {
font-size: 28rpx;
color: #222222;
width: auto;
height: 44rpx;
padding: 5rpx 15rpx;
border-radius: 100rpx 100rpx 100rpx 100rpx;
display: flex;
align-items: center;
justify-content: center;
}
/* 背景图片区域 */
.bg-image-container {
position: relative;
width: 100%;
height: 500rpx;
overflow: hidden;
}
.bg-image {
width: 100%;
height: 100%;
}
.search-box {
position: absolute;
bottom: 50rpx;
left: 50%;
transform: translateX(-50%);
width: 80%;
height: 70rpx;
background-color: rgba(255, 255, 255, 0.9);
border-radius: 10rpx;
display: flex;
align-items: center;
justify-content: center;
}
.search-placeholder {
font-size: 26rpx;
color: #999999;
}
/* 工单台区域 */
.work-order-section {
display: grid;
grid-template-columns: repeat(3, 1fr);
/* 创建3列等宽的网格 */
}
.work-order-card {
width: 246rpx;
height: 200rpx;
background-color: #ffffff;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
border: 1rpx solid #f7f7f7;
}
.work-order-icon {
width: 100rpx;
height: 100rpx;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 10rpx;
}
.work-order-icon .iconfont {
color: #ffffff;
margin: 0;
}
.work-order-text {
font-size: 26rpx;
color: #333333;
font-weight: bold;
}
/* 适配不同屏幕尺寸 */
@media screen and (min-width: 768px) {
.container {
max-width: 768px;
margin: 0 auto;
}
}

View File

@ -1,79 +0,0 @@
<template>
<view class="container">
<view class="searchBox" :style="{ height: localHeight + 'px', paddingTop: top + 'px' }">
<view class="searchBox_add">
<view class="emptyCommunity" @click="addCommunity">
{{ communityVal }}
</view>
</view>
</view>
<!-- 背景图片区域 -->
<view class="bg-image-container">
<image class="bg-image" src="http://localhost:8080/test.png" mode="aspectFill"></image>
<view class="search-box">
<text class="search-placeholder">输入工单号进入工单</text>
</view>
</view>
<view class="work-order-section">
<view v-for="(item, index) in 9" :key="index">
<view class="work-order-card" v-if="index == 0 && showWorkOrderSection"
@click="navigateToWorkOrderDashboard">
<image class="work-order-icon" src="http://localhost:8080/workOrder.png" mode="aspectFill" />
<text class="work-order-text">工单台</text>
</view>
<view class="work-order-card" v-else></view>
</view>
</view>
</view>
</template>
<script>
import {
request,
picUrl,
uniqueByField,
menuButtonInfo,
NavgateTo,
} from "../../../utils";
import { apiArr } from "../../../api/community";
export default {
data() {
return {
communityVal: "添加我的房产",
showWorkOrderSection: false
}
},
onLoad() {
const workOrderPermission = uni.getStorageSync('work_order_permission');
const orderDispatchPermission = uni.getStorageSync('order_dispatch_permission');
this.showWorkOrderSection = !(workOrderPermission === false && orderDispatchPermission === false);
},
async onShow(){
this.communityVal = uni.getStorageSync('changeCommData').name;
const params = {
community_id: uni.getStorageSync('changeCommData').id,
}
const res = await request(apiArr.communityInfo, "POST", params);
uni.setStorageSync('allow_grab_order', res.allow_grab_order == 1 ? true : false);
},
methods: {
addCommunity() {
NavgateTo("/packages/community/myCommunity/index");
},
//
navigateToWorkOrderDashboard() {
uni.navigateTo({
url: '/packages/workOrderDashboard/index/index'
});
}
}
}
</script>
<style scoped>
/* 引入外部CSS文件 */
@import url("./index.css");
</style>

View File

@ -1,85 +1,85 @@
<template> <template>
<view class="box"> <view class="box">
<view class="searchBox" :style="{ height: localHeight + 'px', paddingTop: top + 'px' }"> <div class="searchBox" :style="{ height: localHeight + 'px', paddingTop: top + 'px' }">
<view class="searchBox_add"> <div class="searchBox_add">
<view class="searchBox_left"> <div class="searchBox_left">
<u-icon bold color="#000" size="40" name="arrow-left" @click="headerBackClick"></u-icon> <u-icon bold color="#000" size="40" name="arrow-left" @click="headerBackClick"></u-icon>
</view> </div>
<view class="searchBox_mid">单台</view> <div class="searchBox_mid">作台</div>
<view class="searchBox_right"></view> <div class="searchBox_right"></div>
</view> </div>
</view> </div>
<view class="tabList"> <div class="tabList">
<view <div
:class="active == 1 ? 'tab active' : 'tab'" :class="active == 1 ? 'tab active' : 'tab'"
@click="headerTabsClick(1)" @click="headerTabsClick(1)"
> >
待指派 <span>({{awaitingNumb}})</span> 待指派 <span>({{awaitingNumb}})</span>
</view> </div>
<view <div
:class="active == 2 ? 'tab active' : 'tab'" :class="active == 2 ? 'tab active' : 'tab'"
@click="headerTabsClick(2)" @click="headerTabsClick(2)"
> >
进行中 <span>({{ underwayNum }})</span> 进行中 <span>({{ underwayNum }})</span>
</view> </div>
<view <div
:class="active == 4 ? 'tab active' : 'tab'" :class="active == 4 ? 'tab active' : 'tab'"
@click="headerTabsClick(4)" @click="headerTabsClick(4)"
> >
已作废 <span>({{ discardNum }})</span> 已作废 <span>({{ discardNum }})</span>
</view> </div>
<view <div
:class="active == 3 ? 'tab active' : 'tab'" :class="active == 3 ? 'tab active' : 'tab'"
@click="headerTabsClick(3)" @click="headerTabsClick(3)"
> >
已完成 <span>({{ doneNum }})</span> 已完成 <span>({{ doneNum }})</span>
</view> </div>
</view> </div>
<view class="orderList" v-for="(item, index) in list" :key="index"> <div class="orderList" v-for="(item, index) in list" :key="index">
<view class="orderItem" @click="handlerDetailClick(item.id)"> <div class="orderItem" @click="handlerDetailClick(item.id)">
<view :class="['orderItemTit', statusType[item.status].style]"> <div :class="['orderItemTit', statusType[item.status].style]">
<view class="orderItemTit_left">工单编号{{ item.order_code }}</view> <div class="orderItemTit_left">工单编号{{ item.order_code }}</div>
<view class="orderItemTit_right">{{ item.create_time }}</view> <div class="orderItemTit_right">{{ item.create_time }}</div>
</view> </div>
<view class="orderItem_row"> <div class="orderItem_row">
<view class="df"> <div class="df">
<view class="orderItem_row_label">小区房源名称</view> <div class="orderItem_row_label">小区房源名称</div>
<view class="orderItem_row_con">{{ item.room.name }}</view> <div class="orderItem_row_con">{{ item.room.name }}</div>
</view> </div>
<view :class="['orderItem_row_state', statusType[item.status].color]"> <div :class="['orderItem_row_state', statusType[item.status].color]">
{{ statusType[item.status].desc }} {{ statusType[item.status].desc }}
</view> </div>
</view> </div>
<view class="orderItem_row"> <div class="orderItem_row">
<view class="orderItem_row_label">报修类型</view> <div class="orderItem_row_label">报修类型</div>
<view class="orderItem_row_con">{{ item.ac.category_name }}</view> <div class="orderItem_row_con">{{ item.ac.category_name }}</div>
</view> </div>
<view class="orderItem_row"> <div class="orderItem_row">
<view class="orderItem_row_label">问题描述</view> <div class="orderItem_row_label">问题描述</div>
<view class="orderItem_row_con">{{ item.problem_description }}</view> <div class="orderItem_row_con">{{ item.problem_description }}</div>
</view> </div>
<view class="orderItem_row"> <div class="orderItem_row">
<view class="orderItem_row_label">上门时间</view> <div class="orderItem_row_label">上门时间</div>
<view class="orderItem_row_con">{{ item.service_time }}</view> <div class="orderItem_row_con">{{ item.service_time }}</div>
</view> </div>
<view class="orderItem_row"> <div class="orderItem_row">
<view class="orderItem_row_label">联系人</view> <div class="orderItem_row_label">联系人</div>
<view class="orderItem_row_con">{{ item.contact_name }}</view> <div class="orderItem_row_con">{{ item.contact_name }}</div>
</view> </div>
<view class="orderItem_row"> <div class="orderItem_row">
<view class="orderItem_row_label">联系人手机号</view> <div class="orderItem_row_label">联系人手机号</div>
<view class="orderItem_row_con">{{ item.contact_phone }}</view> <div class="orderItem_row_con">{{ item.contact_phone }}</div>
</view> </div>
</view> </div>
</view> </div>
</view> </view>
</template> </template>

View File

@ -95,13 +95,6 @@
"navigationBarTitleText": "", "navigationBarTitleText": "",
"navigationStyle": "custom" "navigationStyle": "custom"
} }
},
{
"path": "guide/index",
"style": {
"navigationBarTitleText": "",
"navigationBarBackgroundColor": "#fff"
}
} }
] ]
}, },

View File

@ -358,50 +358,50 @@ page {
.serverItem1 image { .serverItem1 image {
position: absolute; position: absolute;
right: 0rpx; right: 12rpx;
bottom: 0rpx; top: 14rpx;
width: 120rpx; width: 103rpx;
height: 70rpx; height: 100rpx;
} }
.serverItem2 image { .serverItem2 image {
position: absolute; position: absolute;
right: 0rpx; right: 6rpx;
bottom: 0rpx; top: 8rpx;
width: 120rpx; width: 108rpx;
height: 70rpx; height: 108rpx;
} }
.serverItem3 image { .serverItem3 image {
width: 116rpx;
height: 83rpx;
position: absolute; position: absolute;
right: 0rpx; right: 0rpx;
bottom: 0rpx; top: 30rpx;
width: 120rpx;
height: 70rpx;
} }
.serverItem4 image { .serverItem4 image {
width: 130rpx;
height: 86rpx;
position: absolute; position: absolute;
right: 0rpx; top: 30rpx;
bottom: 0rpx; right: 11rpx;
width: 120rpx;
height: 70rpx;
} }
.serverItem5 image { .serverItem5 image {
width: 162rpx;
height: 93rpx;
position: absolute; position: absolute;
right: 0rpx; right: 0rpx;
bottom: 0rpx; top: 23rpx;
width: 120rpx;
height: 70rpx;
} }
.serverItem6 image { .serverItem6 image {
width: 72rpx;
height: 72rpx;
position: absolute; position: absolute;
right: 0rpx; top: 30rpx;
bottom: 0rpx; right: 20rpx;
height: 70rpx;
width: 120rpx;
} }
.merchant { .merchant {

View File

@ -367,7 +367,7 @@ export default {
goToWuye() { goToWuye() {
uni.navigateTo({ uni.navigateTo({
url: '/packages/workOrderDashboard/guide/index' url: '/packages/workOrderDashboard/index/index'
}) })
}, },

View File

@ -147,8 +147,6 @@ export default {
uni.removeStorageSync('is_shop'); uni.removeStorageSync('is_shop');
uni.removeStorageSync('shopId'); uni.removeStorageSync('shopId');
uni.removeStorageSync('order_dispatch_permission'); uni.removeStorageSync('order_dispatch_permission');
uni.removeStorageSync('work_order_permission');
uni.removeStorageSync('nickName'); uni.removeStorageSync('nickName');
uni.removeStorageSync('changeCommData'); uni.removeStorageSync('changeCommData');
console.error('用户拒绝授权:', event.detail.errMsg); console.error('用户拒绝授权:', event.detail.errMsg);
@ -161,7 +159,6 @@ export default {
}, { silent: false }).then(res => { }, { silent: false }).then(res => {
const { community_worker } = res; const { community_worker } = res;
uni.setStorageSync('order_dispatch_permission', community_worker && community_worker[0].order_dispatch_permission == 1 || false); uni.setStorageSync('order_dispatch_permission', community_worker && community_worker[0].order_dispatch_permission == 1 || false);
uni.setStorageSync('work_order_permission', community_worker && community_worker[0].work_order_permission == 1 || false);
uni.setStorageSync('nickName', res.nick_name); uni.setStorageSync('nickName', res.nick_name);
console.log(res) console.log(res)
}) })

View File

@ -232,8 +232,6 @@
uni.removeStorageSync('is_shop'); uni.removeStorageSync('is_shop');
uni.removeStorageSync('shopId'); uni.removeStorageSync('shopId');
uni.removeStorageSync('order_dispatch_permission'); uni.removeStorageSync('order_dispatch_permission');
uni.removeStorageSync('work_order_permission');
const button = uni.createSelectorQuery().select('#hiddenLoginBtn'); const button = uni.createSelectorQuery().select('#hiddenLoginBtn');
button.boundingClientRect().exec(); button.boundingClientRect().exec();
@ -374,7 +372,6 @@
if (item) { if (item) {
const { community_worker } = res; const { community_worker } = res;
uni.setStorageSync('order_dispatch_permission', community_worker && community_worker[0].order_dispatch_permission == 1 || false); uni.setStorageSync('order_dispatch_permission', community_worker && community_worker[0].order_dispatch_permission == 1 || false);
uni.setStorageSync('work_order_permission', community_worker && community_worker[0].work_order_permission == 1 || false);
uni.setStorageSync('phone', res.account); uni.setStorageSync('phone', res.account);
uni.hideLoading(); uni.hideLoading();
uni.showToast({ uni.showToast({