ll
liukangdong
2024-11-29 b850badcf800eff5819e0789d1b81e5e27fcd037
ll
已添加4个文件
已修改14个文件
1145 ■■■■■ 文件已修改
admin/src/views/workorder/components/OperaYwWorkorderWindow.vue 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/workorder/components/detail.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/api/index.js 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/api/staff.js 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/api/yw.js 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/manifest.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/common/memberSel.vue 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/index.vue 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/login.vue 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/operation/detail.vue 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/operation/record.vue 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/workOrder/detail.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/workOrder/edit.vue 178 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/workOrder/list.vue 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/empty.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/home/ic_xinzenggongdan@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/utils/service.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
admin/src/views/workorder/components/detail.vue
@@ -178,7 +178,7 @@
      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch',
      dealFileList: [],
      uploadData: {
        folder: 'HIDDEN_DANGER_FILE'
        folder: 'YW_WORKORDER_FILE'
      },
    }
  },
h5/api/index.js
@@ -1,6 +1,7 @@
import { http } from '@/utils/service.js'
export * from '@/utils/config.js'
export * from './staff'
export * from './yw'
@@ -16,14 +17,6 @@
  return http({
    url: 'visitsAdmin/cloudService/web/visitor/wxAuthorize',
    method: 'get',
    data
  })
}
//  å‘送短信验证码
export const sendSms = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/smsEmail/sendSms',
    method: 'post',
    data
  })
}
h5/api/staff.js
@@ -3,53 +3,29 @@
// login
export const loginPost = (data) => {
  return http({
    url: 'loginH5',
    url: 'loginByPhone',
    method: 'post',
    data
  })
}
export const loginCaptcha = () => {
export const sendSMsPost = (data) => {
  return http({
    url: 'captcha',
    method: 'get'
    url: 'visitsAdmin/cloudService/business/smsEmail/sendSms',
    method: 'post',
    data
  })
}
// åˆ·æ–°token
export const refreshToken = () => {
export const findInternalList = (data) => {
  return http({
    url: 'refreshtoken',
    method: 'post'
    url: 'visitsAdmin/cloudService/system/user/findInternalList',
    method: 'post',
    data
  })
}
export const getUserInfo = () => {
  return http({
    url: 'getUserInfo',
    method: 'get'
  })
}
// æŸ¥è¯¢äººå‘˜ç›¸å…³ä¿¡æ¯0劳务访客 1普通访客 2内部人员,示例值(1)
export const findTypeMemberInfo = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/member/findTypeMemberInfo',
    // url: 'visitsAdmin/cloudService/business/member/page',
    method: 'post',
    data
  })
}
//  é‡ç½®å¯†ç 
export const resetPassword = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/visits/resetPassword',
    method: 'post',
    data
  })
}
//  ä¿®æ”¹å¯†ç 
export const uploadPassword = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/member/updatePwd',
    method: 'post',
    data
  })
}
// loginout
@@ -61,172 +37,3 @@
  })
}
//  é𐿂£éšæ‰‹æ‹ åˆ›å»º
export const DangerCreate = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/hiddenDanger/create',
    method: 'post',
    data
  })
}
// é𐿂£åŒºåŸŸ
export const DangerArea = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/hiddenDanger/create',
    method: 'post',
    data
  })
}
// é𐿂£ è¯¦æƒ…
export const hiddenDangerDetail = (id) => {
  return http({
    url:  `visitsAdmin/cloudService/business/hiddenDanger/${id}`,
    method: 'get'
  })
}
// éƒ¨é—¨åˆ—表
export const deptListPost = (data) => {
  return http({
    url: '/visitsAdmin/cloudService/business/company/list',
    method: 'post',
    data
  })
}
// é𐿂£ ç±»åž‹
export const DangerConfigType = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/hiddenDangerParam/list',
    method: 'post',
    data
  })
}
// é𐿂£ æŸ¥è¯¢åŒºåŸŸå†…安全员
export const findHiddenAreaMemberList = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/hiddenDangerParam/findHiddenAreaMemberList',
    method: 'post',
    data
  })
}
// é𐿂£ å¤„理
export const dealHiddenDanger = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/hiddenDanger/dealHiddenDanger',
    method: 'post',
    data
  })
}
// é𐿂£ è½¬äº¤
export const transferHiddenDanger = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/hiddenDanger/transferHiddenDanger',
    method: 'post',
    data
  })
}
// é𐿂£ æµç¨‹åˆ—表
export const findListFlowDanger = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/hiddenDangerLog/findList',
    method: 'post',
    data
  })
}
// è½¦è¾† åˆ—表
export const getCarsList = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/cars/list',
    method: 'post',
    data
  })
}
// æŸ¥è¯¢è½¦è¾†å¯é¢„约时段
export const carCanReservationDate = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/carUseBook/carCanReservationDate',
    method: 'get',
    data
  })
}
// æŸ¥è¯¢è½¦è¾† é¢„约记录
export const carUseBookList = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/carUseBook/carUseBookList',
    method: 'post',
    data
  })
}
// ç”¨è½¦ç”³è¯·æäº¤
export const carUseBookCraete = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/carUseBook/create',
    method: 'post',
    data
  })
}
// æŸ¥è¯¢è½¦è¾† æ´¾è½¦è®°å½•
export const carUseBookPaiche = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/carUseBook/page',
    method: 'post',
    data
  })
}
// æŸ¥è¯¢è½¦è¾† æ´¾è½¦è®°å½• è¯¦æƒ…
export const carUseBookDetail = (id) => {
  return http({
    url: 'visitsAdmin/cloudService/business/carUseBook/'+id,
    method: 'get'
  })
}
//  å®¡æ‰¹
export const carUseBookAppr = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/approve/approved',
    method: 'post',
    data
  })
}
// æŸ¥è¯¢è½¦è¾† æ´¾è½¦è®°å½• æ’¤é”€ç”³è¯·
export const carUseBookBack = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/carUseBook/revoke',
    method: 'get',
    data
  })
}
// æŸ¥è¯¢è½¦è¾† å¸æœºåˆ—表
export const driveListPost = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/member/driveList',
    method: 'post',
    data
  })
}
//  ä»»åŠ¡ä¸­å¿ƒ å¤´éƒ¨æ•°æ®
export const stagingHead = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/staging/taskCenterHead',
    method: 'get',
    data
  })
}
//  ä»»åŠ¡ä¸­å¿ƒ åˆ†é¡µæ•°æ®
export const stagingTaskPage = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/staging/taskPage',
    method: 'post',
    data
  })
}
//  ä»»åŠ¡ä¸­å¿ƒ æ ‡è®°å·²è¯»
export const signReadTask = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/staging/signRead',
    method: 'get',
    data
  })
}
h5/api/yw.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
import { http } from '@/utils/service.js'
// å·¥å•列表
export const ywWorkorder = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/ywWorkorder/page',
    data
  })
}
// å·¥å•详情
export const ywWorkorderD = (id) => {
  return http({
    url: 'visitsAdmin/cloudService/business/ywWorkorder/' + id,
        method: 'get'
  })
}
// å·¥å•处理
export const ywWorkorderDeal = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/ywWorkorder/dealOrder',
    data
  })
}
// åˆ›å»ºå·¥å•
export const ywWorkorderCreate = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/ywWorkorder/create',
    data
  })
}
// é¡¹ç›®åˆ—表
export const ywProjectPost = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/ywProject/list',
    data
  })
}
// æ¥¼å®‡åˆ—表
export const ywBuildingPost = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/ywBuilding/list',
    data
  })
}
// æ¥¼å±‚列表
export const ywFloorPost = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/ywFloor/list',
    data
  })
}
// æˆ¿æºåˆ—表
export const ywRoomPost = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/ywRoom/list',
    data
  })
}
// è¿ç»´è®°å½•
export const ywDeviceRecord = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/ywDeviceRecord/page',
    data
  })
}
// è¿ç»´è®°å½•详情
export const ywDeviceDetail = (id) => {
  return http({
    url: 'visitsAdmin/cloudService/business/ywDeviceRecord/' + id,
    method: 'get'
  })
}
h5/manifest.json
@@ -129,9 +129,9 @@
                "/gateway_interface" : {
                    // è¿™ä¸ªå­—段名需与你配置的basePrefixUrl一致,系统识别到带有/dev-api请求的地址时,会在前面拼接上代理服务器地址
                    // "target" : "http://172.20.10.7:10010", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    // "target" : "http://192.168.0.100:10010", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    "target" : "http://192.168.0.108:10030", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    // "target" : "http://10.50.250.253:8088/gateway_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    "target" : "http://192.168.0.173/gateway_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    // "target" : "http://192.168.0.173/gateway_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    "changeOrigin" : true, // å…è®¸è·¨åŸŸ 
                    "pathRewrite" : {
                        "^/gateway_interface" : ""
h5/pages.json
@@ -2,17 +2,18 @@
    "easycom": {
        "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
    },
    "pages": [{
            "path": "pages/index",
            "style": {
                "navigationBarTitleText": "首页",
                "enablePullDownRefresh": false
            }
        },
    "pages": [
        {
            "path": "pages/login",
            "style": {
                "navigationBarTitleText": "登录"
            }
        },
        {
            "path": "pages/index",
            "style": {
                "navigationBarTitleText": "首页",
                "enablePullDownRefresh": false
            }
        },
        {
@@ -75,6 +76,13 @@
            {
                "navigationBarTitleText" : "巡检点"
            }
        },
        {
            "path" : "pages/common/memberSel",
            "style" :
            {
                "navigationBarTitleText" : "选择人员"
            }
        }
    ],
    "globalStyle": {
h5/pages/common/memberSel.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,256 @@
<template>
    <view class="main_app">
        <view class="search_inp df_ac">
            <image class="mr12 search" src="@/static/home/ic_search@2x.png" mode="widthFix"></image>
            <input v-model="param.name" @blur="initData()" type="text" placeholder="请输入姓名进行搜索"
                placeholder-style="color: #999999;" />
        </view>
        <view class="member_list">
            <view v-for="item in memberList" @click="onSubmit(item)" :key="item.id" class="line">
                <image v-if="item.faceImgFull" :src="item.faceImgFull" class="avatar"></image>
                <span v-else class="img_name">{{item.realname && item.realname.slice(0,1)}}</span>
                <view class="content">
                    <view class="info">
                        <text class="name">{{ item.realname }}</text>
                        <!-- <text class="tag">tag</text> -->
                    </view>
                    <view class="depart">{{ item.companyName }}</view>
                </view>
                <text></text>
            </view>
            <view v-if="memberList.length == 0" class="empty_wrap">
                <image src="@/static/empty.png"></image>
                <text>暂无数据</text>
            </view>
        </view>
        <!--  -->
    </view>
</template>
<script>
    import {
        findInternalList
    } from '@/api'
    export default {
        data() {
            return {
                memberList: [],
                selList: [],
                param: {},
                isShowSelMem: false
            }
        },
        onLoad() {
            this.initData()
        },
        methods: {
            onSubmit(item) {
                this.$eventBus.$emit('memberSel', { realname: item.realname, id: item.id })
                uni.navigateBack()
            },
            changeMem(e) {
                console.log(e.detail.value[0]);
                const id = Number(e.detail.value[0])
                const item = this.memberList.find(i => i.id === id)
                this.$eventBus.$emit('snapshotSel', item)
                uni.navigateBack()
            },
            initData() {
                const {
                    param
                } = this
                findInternalList({
                    realname: param.name,
                    id: param.id
                }).then(res => {
                    this.memberList = res.data || []
                })
            }
        }
    };
</script>
<style lang="scss">
    .modal {
        padding: 40rpx 30rpx;
        .modal_header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            .status {
                font-weight: 600;
            }
            .btn {
                color: $uni-color-primary;
            }
        }
        .modal_mem_list {
            .line {
                display: flex;
                align-items: center;
                border-bottom: 1rpx solid #e5e5e5;
                padding: 30rpx 0;
                .avatar {
                    width: 64rpx;
                    height: 64rpx;
                    border-radius: 50%;
                    overflow: hidden;
                    margin-right: 20rpx;
                }
                .content {
                    flex: 1;
                    .depart {
                        font-size: 24rpx;
                        color: #666666;
                    }
                    .info {
                        display: flex;
                        margin-bottom: 16rpx;
                        .name {
                            font-size: 30rpx;
                        }
                    }
                }
                .btn {
                    width: 80rpx;
                    height: 48rpx;
                    line-height: 48rpx;
                    text-align: center;
                    font-size: 24rpx;
                    color: #333333;
                    border-radius: 4rpx;
                    border: 1rpx solid #999999;
                }
            }
        }
    }
    .sub_wrap {
        position: absolute;
        bottom: 0;
        left: 0;
        width: 100%;
        box-shadow: 0rpx 0rpx 6rpx 0rpx #b2b2b2;
        padding: 30rpx 30rpx 64rpx;
        .sel_mem {
            display: flex;
            align-items: center;
            .members {
                width: 500rpx;
                color: $uni-color-primary;
                white-space: nowrap;
                overflow: hidden; //文本超出隐藏
                text-overflow: ellipsis;
                margin-right: 20rpx;
            }
            .open_icon {
                width: 44rpx;
                height: 44rpx;
            }
        }
        .btn {
            width: 690rpx;
            height: 88rpx;
            line-height: 88rpx;
            background: $uni-color-primary;
            border-radius: 44rpx;
            color: #fff;
            text-align: center;
            margin-top: 22rpx;
        }
    }
    .member_list {
        .line {
            display: flex;
            align-items: center;
            border-bottom: 1rpx solid #e5e5e5;
            padding: 30rpx 0;
            .avatar {
                width: 64rpx;
                height: 64rpx;
                border-radius: 50%;
                overflow: hidden;
                margin-right: 20rpx;
            }
            .img_name {
                width: 64rpx;
                height: 64rpx;
                line-height: 64rpx;
                text-align: center;
                border-radius: 50%;
                overflow: hidden;
                margin-right: 20rpx;
                background: $uni-color-primary;
                color: #fff;
                border: 1rpx solid $uni-color-primary;
            }
            .content {
                flex: 1;
                .depart {
                    font-size: 24rpx;
                    color: #666666;
                }
                .info {
                    display: flex;
                    margin-bottom: 16rpx;
                    .name {
                        font-size: 30rpx;
                    }
                    .tag {
                        font-size: 24rpx;
                        border-radius: 4rpx;
                        border: 1rpx solid #f62710;
                        color: #f62710;
                        padding: 0rpx 6rpx;
                        margin-left: 8rpx;
                    }
                }
            }
        }
        .empty {
            width: 100%;
            height: 280rpx;
        }
    }
    .search_inp {
        height: 72rpx;
        background: #f7f7f7;
        border-radius: 4rpx;
        padding-left: 16rpx;
        .search {
            width: 28rpx;
        }
        input {
            flex: 1;
            font-size: 28rpx;
            color: #333333;
        }
    }
</style>
h5/pages/index.vue
@@ -1,6 +1,6 @@
<template>
    <view class="main_app">
        <view class="hone_name title">{{ userInfo.name }},欢迎登录</view>
        <view class="hone_name title">{{ userInfo.realname }},欢迎登录</view>
        <view class="home_con">
            <image class="bg" src="@/static/home/home_bg.jpg" mode=""></image>
            <view class="h1">阜宁文体中心</view>
@@ -20,19 +20,21 @@
                <view class="name">{{item.name}}</view>
            </view>
        </view>
        <view class="loginout" @click="loginOut">退出登陆</view>
    </view>
</template>
<script>
    import { logoutPost } from '@/api'
    export default {
        data() {
            return {
                userInfo: uni.getStorageSync('userInfo') || {},
                list1: [{
                        name: '扫码巡检',
                        url: '',
                        img: require('@/static/home/ic_fangkebaobei@2x.png'),
                list1: [
                    {
                        name: '新增工单',
                        url: '/pages/workOrder/edit',
                        img: require('@/static/home/ic_xinzenggongdan@2x.png'),
                        auth: 'weixin:menu:visitcar'
                    },
                    {
@@ -70,6 +72,13 @@
            itemClick(item) {
                uni.navigateTo({
                    url: item.url
                })
            },
            loginOut() {
                this.$store.commit('empty')
                logoutPost()
                uni.redirectTo({
                    url: '/pages/login'
                })
            },
            
@@ -131,5 +140,21 @@
                }
            }
        }
        .loginout {
            position: fixed;
            bottom: 88rpx;
            left: 50%;
            transform: translate(-50%, 0);
            width: 152rpx;
            height: 60rpx;
            border-radius: 30rpx;
            border: 1rpx solid $primaryColor;
            color: $primaryColor;
            font-size: 26rpx;
            display: flex;
            justify-content: center;
            align-items: center;
        }
    }
</style>
h5/pages/login.vue
@@ -5,7 +5,7 @@
    <view class="login_list">
      <view class="login_list_item">
        <image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
        <input v-model="form.username" maxlength="18" placeholder="请输入手机号" />
        <input v-model="form.phone" maxlength="18" placeholder="请输入手机号" />
      </view>
<!--      <view class="login_list_item">
        <image src="@/static/login_ic_password@2x.png" mode="widthFix" />
@@ -14,7 +14,8 @@
      <view class="login_list_item">
        <image src="@/static/login_ic_password@2x.png" mode="widthFix"></image>
        <input v-model="form.code" placeholder="请输入验证码" type="text" />
        <view class="btn">获取验证码</view>
        <view v-if="downTime == 0" class="btn" @click="sendSms">获取验证码</view>
        <view v-else class="btn gray">{{ downTime }}</view>
      </view>
    </view>
    <view class="login_btn">
@@ -24,7 +25,7 @@
</template>
<script>
import { loginPost, loginCaptcha, getUserInfo, getSystemDictData } from '@/api'
import { loginPost, getUserInfo, sendSMsPost } from '@/api'
import { mapState, mapMutations } from 'vuex'
export default {
  name: 'login',
@@ -32,20 +33,14 @@
  data() {
    return {
      form: {
        // username: '18056814089',
        username: '',
        password: '',
                code: ''
                phone: '17878787878',
                code: '1'
      },
      isShowProtocol: false,
      ProtocolFlag: false,
      captcha: {},
      htmlText: ''
            downTime: 0
    }
  },
  onLoad() {
    this.initCaptcha()
  },
  onBackPress(options) {
    uni.redirectTo({
@@ -55,39 +50,28 @@
  },
  methods: {
    ...mapMutations(["setToken", "setUserInfo"]),
    changeFalg() {
      this.ProtocolFlag = !this.ProtocolFlag
    },
    getContent() {
      getSystemDictData({
        dictCode: 'SYSTEM',
        label: 'USER_PROTOCOL'
        sendSms() {
            this.downTime = 60
            let timer = setInterval(() => {
                if(this.downTime == 0) return clearInterval(timer)
                this.downTime = this.downTime - 1
            }, 1000)
            const { form } = this
            sendSMsPost({
                phone: form.phone,
                type: 0
      }).then(res => {
        this.htmlText = res.data.code
        this.isShowProtocol = true
                this.showToast('短信发送成功')
      })
    },
    showContent() {
      this.getContent()
    },
    initCaptcha() {
      loginCaptcha().then(res => {
        this.captcha = res.data
      })
    },
    onLogin() {
      const { form, ProtocolFlag } = this
      if (!ProtocolFlag) return uni.showToast({
        title: '请先阅读并同意用户协议',
        icon: 'none'
      })
      if (!form.username) return uni.showToast({
        title: '账号不能为空',
        icon: 'none'
      })
      if (!form.password) return uni.showToast({
        title: '密码不能为空',
      // if (!ProtocolFlag) return uni.showToast({
      //   title: '请先阅读并同意用户协议',
      //   icon: 'none'
      // })
      if (!form.phone) return uni.showToast({
        title: '手机号不能为空',
        icon: 'none'
      })
      if (!form.code) return uni.showToast({
@@ -96,15 +80,15 @@
      })
      loginPost({
        ...form,
        uuid: this.captcha.uuid,
        openId: this.$store.state.openId
      }).then(res => {
        if (res.code === 200) {
          this.setToken(res.data)
                    this.showToast('登录成功')
          getUserInfo().then(ress => {
            this.setUserInfo(ress.data)
            uni.redirectTo({
              url: "/pages/staff/index"
              url: "/pages/index"
            })
          })
        }
@@ -162,6 +146,10 @@
      .btn{
          width: 145rpx;
          color:  $primaryColor;
                text-align: center;
      }
            .gray{
                color: #999999;
      }
      input {
        flex: 1;
h5/pages/operation/detail.vue
@@ -2,31 +2,47 @@
    <view>
        <view class="content">
            <view class="name_wrap">
                <view class="name">xx设备</view>
                <view class="status red">正常</view>
                <view class="name">{{info.deviceName}}</view>
                <view class="status" v-if="info.status == 0">正常</view>
                <view class="status red" v-if="info.status == 1">损坏</view>
                <view class="status red" v-if="info.status == 2">报废</view>
            </view>
            <view class="line">运维人:xxx</view>
            <view class="line">运维时间:121212</view>
            <view class="line">运维人:{{info.realName}}</view>
            <view class="line">运维时间:{{info.createDate}}</view>
        </view>
        <!--  -->
        <view class="remark">
            <view class="title">运维备注</view>
            <view class="file_list">
                <view class="file">
                <view class="file" v-for="item in info.multifileList">
                    <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
                    <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video>
                </view>
            </view>
            <view class="desc">remark</view>
            <view class="desc">{{info.content}}</view>
        </view>
    </view>
</template>
<script>
    import { ywDeviceDetail } from '@/api'
    export default {
        data() {
            return {
                id: '',
                info: {}
            };
        },
        onLoad(option) {
            this.id = option.id
            this.getDetail()
        },
        methods: {
            getDetail() {
                ywDeviceDetail(this.id).then(res => {
                    this.info = res.data
                })
            }
        }
    }
</script>
@@ -81,6 +97,9 @@
                    margin-right: 0;
                }
            }
            image,video{
                width: 156rpx;
            }
        }
        .desc{
            margin-top: 8rpx;
h5/pages/operation/record.vue
@@ -3,54 +3,102 @@
        <view class="head_wrap">
            <view class="search_wrap">
                <image class="mr12 search" src="@/static/home/ic_search@2x.png" mode="widthFix"></image>
                <input v-model="param.keyword" @confirm="getList()" type="text" placeholder="搜索设备名称/编号" placeholder-class="placeholder9" />
                <input v-model="param.keyword" @confirm="getList()" type="text" placeholder="搜索设备名称/编号"
                    placeholder-class="placeholder9" />
            </view>
            <view class="name_wrap" @click="showModal = true">
                <view class="name">运维人</view>
            <view class="name_wrap" @click="handleMem">
                <view class="name">{{ param.realname ? param.realname : '运维人' }}</view>
                <u-icon :name="showModal  ? 'arrow-right' : 'arrow-down'" color="#999999" size="12"></u-icon>
            </view>
        </view>
        <!--  -->
        <view class="list">
            <view class="item" v-for="item in 10" @click="itemClick(item)">
            <view class="item" v-for="item in list" @click="itemClick(item)">
                <image src="@/static/side/ic_shuiyu@2x.png" class="icon"></image>
                <view class="content">
                    <view class="name_wrap">
                        <view class="name">
                            <text class="device">xx设备</text>
                            <text>D20231</text>
                            <text class="device">{{item.deviceName}}</text>
                            <text>{{item.deviceCode}}</text>
                        </view>
                        <view class="status red">正常</view>
                        <view class="status" v-if="item.status == 0">正常</view>
                        <view class="status red" v-if="item.status == 1">损坏</view>
                        <view class="status red" v-if="item.status == 2">报废</view>
                    </view>
                    <view class="line">运维人:xxx</view>
                    <view class="line">运维时间:121212</view>
                    <view class="line">运维人:{{item.realName}}</view>
                    <view class="line">运维时间:{{item.dealDate}}</view>
                </view>
            </view>
        </view>
        <!--  -->
        <u-picker :show="showModal" keyName="name" @cancel="showModal = false" @confirm='confirm'
        <u-picker :show="showModal" keyName="realname" @cancel="showModal = false" @confirm='confirm'
            :columns="columns"></u-picker>
    </view>
</template>
<script>
    import {
        ywDeviceRecord,
        findInternalList
    } from '@/api'
    export default {
        data() {
            return {
                param: {},
                columns: [],
                showModal: false
                showModal: false,
                list: [],
                total: 0,
                page: 1,
            };
        },
        onLoad() {
            this.getpeo()
            this.getList()
        },
        mounted() {
            this.$eventBus.$on('memberSel', (option) => {
                this.$set(this.param, 'realname', option.realname)
                this.$set(this.param, 'memberId', option.id)
                this.getList()
            })
        },
        methods: {
            getList() {},
            getList() {
                const {
                    page,
                    total,
                    list,
                    param
                } = this
                ywDeviceRecord({
                    page,
                    capacity: 10,
                    model: param
                }).then(res => {
                    this.list = res.data.records || []
                    this.total = res.data.total
                })
            },
            handleMem() {
                uni.navigateTo({
                    url: '/pages/common/memberSel'
                })
            },
            getpeo() {
                findInternalList().then(res => {
                    this.columns = [res.data]
                })
            },
            confirm() {
                this.showModal = false
            },
            itemClick() {
            itemClick(item) {
                uni.navigateTo({
                    url: '/pages/operation/detail'
                    url: '/pages/operation/detail?id='+ item.id
                })
            }
        }
@@ -61,6 +109,7 @@
    .main_app{
        padding: 0 30rpx;
    }
    .head_wrap {
        display: flex;
        align-items: center;
@@ -73,9 +122,11 @@
            background: #F7F7F7;
            border-radius: 38rpx;
            padding-left: 30rpx;
            input{
                flex: 1;
            }
            .search {
                width: 28rpx;
                height: 28rpx;
@@ -97,6 +148,7 @@
            height: 228rpx;
            padding: 30rpx 0;
            border-bottom: 2rpx solid #E5E5E5;
            .icon {
                width: 80rpx;
                height: 80rpx;
@@ -109,14 +161,17 @@
                display: flex;
                flex-direction: column;
                justify-content: space-between;
                .name_wrap{
                    display: flex;
                    justify-content: space-between;
                    align-items: center;
                    .name{
                        display: flex;
                        align-items: flex-end;
                        font-size: 26rpx;
                        .device{
                            font-weight: 600;
                            font-size: 34rpx;
@@ -124,6 +179,7 @@
                            margin-right: 6rpx;
                        }
                    }
                    .status{
                        color: $primaryColor;
                    }
h5/pages/workOrder/detail.vue
@@ -2,59 +2,63 @@
    <view>
        <view class="main_info">
            <view class="title">
                <text>阜宁文体中心/A座/401</text>
                <text class="status">待处理</text>
                <text>{{ info.projectName }}/{{ info.buildingName }}/{{info.roomNum || info.floorName}}</text>
                <text class="status" v-if="info.dealStatus == 0">待处理</text>
                <text class="status" v-if="info.dealStatus == 1">已指派</text>
                <text class="status gray" v-if="info.dealStatus == 2">已处理</text>
            </view>
            <view class="desc">西边走廊的一个顶灯坏了,不亮需要维修西边</view>
            <view class="desc">{{ info.content }}</view>
            <view class="file_list">
                <view class="file">
                <view class="file" v-for="(item,index) in info.fileList">
                    <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
                    <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video>
                </view>
            </view>
            <view class="content">
                <view class="line">
                <view class="line" v-if="info.categoryName">
                    <view class="la">工单类型:</view>
                    <view class="val">1111</view>
                    <view class="val">{{info.categoryName}}</view>
                </view>
                <view class="line">
                    <view class="la">上报人:</view>
                    <view class="val">1111</view>
                    <view class="val">{{ info.creatorName }}{{info.creatorCompany ? '-' + info.creatorCompany : ''}}</view>
                </view>
                <view class="line">
                <view class="line"  v-if="info.creatorPhone">
                    <view class="la">联系电话:</view>
                    <view class="val">1111</view>
                    <view class="val">{{ info.creatorPhone }}</view>
                </view>
                <view class="line">
                    <view class="la">上报时间:</view>
                    <view class="val">1111</view>
                    <view class="val">{{ info.createDate }}</view>
                </view>
                <view class="line">
                <view class="line" v-if="info.getDate">
                    <view class="la">上门时间:</view>
                    <view class="val">1111</view>
                    <view class="val">{{ info.getDate }}</view>
                </view>
            </view>
            <view class="result_wrap">
            <view class="result_wrap" v-if="info.dealStatus == 2">
                <div class="title">处理结果</div>
                <view class="file_list">
                    <view class="file">
                <view v-if="info.dealFileList && info.dealFileList.length > 0" class="file_list">
                    <view class="file" v-for="item in info.dealFileList">
                        <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
                        <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video>
                    </view>
                </view>
                <view class="content">
                    å·²æ›´æ¢ç¯æ³¡å’Œç¯ç½©å·²æ›´æ¢ç¯æ³¡å’Œç¯ç½©å·²æ›´æ¢ç¯
                <view v-if="info.dealInfo" class="content">
                    {{info.dealInfo}}
                </view>
                <view class="line">
                    <view class="la">处理人:</view>
                    <view class="val">{{ 1111 }}</view>
                    <view class="val">{{ info.dealUserName }}</view>
                </view>
                <view class="line">
                    <view class="la">处理时间:</view>
                    <view class="val">{{ 1111 }}</view>
                    <view class="val">{{ info.dealDate }}</view>
                </view>
            </view>
        </view>
        <!--  -->
        <view class="btns">
        <view class="btns" v-if="info.dealStatus == 0">
            <view class="btn">
                <image src="@/static/side/phoneed.png" class="icon"></image>
                <text>上报人</text>
@@ -62,7 +66,7 @@
            <view class="btn active" @click="isShowHandle = true">去处理</view>
        </view>
        <!--  -->
        <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>
        <u-popup :show="showUpload" @close="showUpload = false" zIndex="10076" closeOnClickOverlay>
            <view class="sel_upload_wrap">
                <view class="btn" @click="uploadImage">选择图片</view>
                <view class="btn" @click="uploadVideo">选择视频</view>
@@ -70,11 +74,12 @@
        </u-popup>
        <!--  -->
        <!-- å·¥å•处理 -->
        <u-popup :show="isShowHandle" :round="10" :safeAreaInsetBottom="true" mode="bottom" closeable @close="isShowHandle = false">
        <u-popup :show="isShowHandle" :round="10" :safeAreaInsetBottom="true" mode="bottom" closeable
            @close="isShowHandle = false">
            <view class="appr_modal">
                <view class="title">工单处理</view>
                <view class="df_sb">
                    <view>处理时间</view>
                    <view><text class="red">*</text>处理时间</view>
                    <view class="df_ac" @click="isShowHandleDate = true" v-if="handleParam.dealTime">
                        {{ handleParam.dealTime }}
                        <u-icon name="arrow-right"></u-icon>
@@ -86,7 +91,6 @@
                </view>
                <view class="label">
                    <text>*</text>
                    ä¸Šä¼ å›¾ç‰‡/视频
                </view>
                <view class="upload_wrap">
@@ -119,12 +123,16 @@
<script>
    import {
        uploadUrl
        uploadUrl,
        ywWorkorderD,
        ywWorkorderDeal
    } from '@/api'
    import dayjs from 'dayjs';
    export default {
        data() {
            return {
                id: '',
                info: {},
                showUpload: false,
                isShowHandle: false,
                isShowHandleDate: false,
@@ -132,9 +140,30 @@
                dealFileList: []
            };
        },
        onLoad(option) {
            console.log(option);
            this.id = option.id
            this.getDetail()
        },
        methods: {
            onSubmit() {
                const { handleParam, dealFileList, id } = this
                if (!handleParam.dealTime) return this.showToast('处理时间不能为空')
                ywWorkorderDeal({
                    ...handleParam,
                    id,
                    dealFileList
                }).then(res => {
                    if(res.code == 200){
                        this.showToast('操作成功')
                        uni.navigateBack()
                    }
                })
            },
            getDetail() {
                ywWorkorderD(this.id).then(res => {
                    this.info = res.data
                })
            },
            callPhone() {
                uni.makePhoneCall({
@@ -152,7 +181,7 @@
                this.showUpload = false;
                let token = uni.getStorageSync('token') || '';
                uni.chooseImage({
                    count: 4,
                    count: 6,
                    success: chooseImageRes => {
                        uni.showLoading({
                            title: '上传中',
@@ -170,7 +199,7 @@
                            files: imgs,
                            name: 'file',
                            formData: {
                                folder: 'HIDDEN_DANGER_FILE'
                                folder: 'YW_WORKORDER_FILE'
                            },
                            header: {
                                Dm_user_token: token
@@ -182,7 +211,7 @@
                                        i.type = 0;
                                        i.fileurl = i.imgaddr;
                                        i.fileurlFull = i.url;
                                        this.submitFileList.push(i);
                                        this.dealFileList.push(i);
                                    });
                                }
                            },
@@ -216,7 +245,7 @@
                            },
                            name: 'file',
                            formData: {
                                folder: 'HIDDEN_DANGER_FILE'
                                folder: 'YW_WORKORDER_FILE'
                            },
                            success: uploadFileRes => {
                                let res = JSON.parse(uploadFileRes.data);
@@ -225,7 +254,7 @@
                                        i.type = 1;
                                        i.fileurl = i.imgaddr;
                                        i.fileurlFull = i.url;
                                        this.submitFileList.push(i);
                                        this.dealFileList.push(i);
                                    });
                                }
                            },
@@ -264,6 +293,10 @@
                font-size: 28rpx;
                color: $primaryColor;
            }
            .gray {
                color: #999999;
            }
        }
        .file_list {
@@ -279,6 +312,11 @@
                &:nth-of-type(4n) {
                    margin-right: 0;
                }
                image,
                video {
                    width: 156rpx;
                }
            }
        }
@@ -368,7 +406,7 @@
    .sel_upload_wrap {
        width: 100%;
        border-top: 1px solid #333333;
        border-top: 1px solid #666666;
        box-shadow: 0 1 1 #333333;
        .btn {
h5/pages/workOrder/edit.vue
@@ -3,29 +3,30 @@
        <view class="list">
            <view class="item">
                <view class="la"><text class="red">*</text>位置类型</view>
                <view class="line sel_wrap">
                    <view class="left" :class="param.name ? '' : 'placeholder9'">{{ param.name ? param.name : '请选择' }}</view>
                <view class="line sel_wrap" @click="showModal0 = true">
                    <view class="left" :class="param.areaName ? '' : 'placeholder9'">{{ param.areaName ? param.areaName : '请选择' }}
                    </view>
                    <u-icon name="arrow-right" color="#999999" size="15"></u-icon>
                </view>
            </view>
            <view class="item">
                <view class="la"><text class="red">*</text>选择区域</view>
                <view class="line sel_wrap">
                    <view class="left" :class="param.name ? '' : 'placeholder9'">{{ param.name ? param.name : '请选择' }}</view>
                <view class="line sel_wrap" @click="showModal1 = true">
                    <view class="left" :class="param.projectName ? '' : 'placeholder9'">{{ param.projectName ? `${param.projectName} ${param.buildingName || ''} ${param.areaType == 0 ? param.roomName || '' : param.floorName || ''}` : '请选择' }}</view>
                    <u-icon name="arrow-right" color="#999999" size="15"></u-icon>
                </view>
            </view>
            <view class="item">
                <view class="la">上门时间</view>
                <view class="line sel_wrap">
                    <view class="left" :class="param.name ? '' : 'placeholder9'">{{ param.name ? param.name : '请选择' }}</view>
                <view class="line sel_wrap" @click="showTime = true">
                    <view class="left" :class="param.getDate ? '' : 'placeholder9'">{{ param.getDate ? param.getDate : '请选择' }}</view>
                    <u-icon name="arrow-right" color="#999999" size="15"></u-icon>
                </view>
            </view>
            <view class="item">
                <view class="la">描述</view>
                <view class="line">
                    <textarea v-model="param.checkInfo" placeholder="请输入" placeholder-class="placeholder9" />
                    <textarea v-model="param.content" placeholder="请输入" placeholder-class="placeholder9" />
                </view>
            </view>
            <view class="item">
@@ -35,7 +36,7 @@
                        <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
                        <view class="mt6">图片/视频</view>
                    </view>
                    <view class="upload_file" v-for="(item, i) in dealFileList" :key="i">
                    <view class="upload_file" v-for="(item, i) in fileList" :key="i">
                        <u-icon class="close" size="20" name="close-circle-fill" color="red"
                            @click="fileDel('dealBeforeFileList', i)"></u-icon>
                        <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
@@ -44,7 +45,7 @@
                </view>
            </view>
        </view>
        <view class="sub_btn">提交</view>
        <view class="sub_btn" @click="onSubmit">提交</view>
        <!--  -->
        <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>
            <view class="sel_upload_wrap">
@@ -52,12 +53,32 @@
                <view class="btn" @click="uploadVideo">选择视频</view>
            </view>
        </u-popup>
        <!--  -->
        <u-picker :show="showModal0" keyName="name" @cancel="showModal0 = false" @confirm='confirm0'
            :columns="areaType"></u-picker>
        <!--  -->
        <u-picker :show="showModal1" keyName="name" @cancel="showModal1 = false" @confirm='confirm1'
            :columns="projectList"></u-picker>
        <u-picker :show="showModal2" keyName="name" @cancel="showModal2 = false" @confirm='confirm2'
            :columns="buildingList"></u-picker>
        <u-picker :show="showModal3" keyName="name" @cancel="showModal3 = false" @confirm='confirm3'
            :columns="floorList"></u-picker>
        <u-picker :show="showModal4" keyName="name" @cancel="showModal4 = false" @confirm='confirm4'
            :columns="roomList"></u-picker>
        <!--  -->
        <u-datetime-picker :minDate="new Date().getTime()" :show="showTime" @confirm="confirmDate"
            @cancel="showTime = false" mode="datetime"></u-datetime-picker>
    </view>
</template>
<script>
    import {
        uploadUrl
        uploadUrl,
        ywProjectPost,
        ywBuildingPost,
        ywFloorPost,
        ywRoomPost,
        ywWorkorderCreate
    } from '@/api'
    import dayjs from 'dayjs';
    export default {
@@ -65,10 +86,121 @@
            return {
                param: {},
                showUpload: false,
                dealFileList: [],
                fileList: [],
                showModal0: false,
                showModal1: false,
                showModal2: false,
                showModal3: false,
                showModal4: false,
                showTime: false,
                areaType: [
                    [{
                            name: '室内装修',
                            id: 0
                        },
                        {
                            name: '公共维修',
                            id: 1
                        }
                    ]
                ],
                projectList: [],
                buildingList: [],
                floorList: [],
                roomList: [],
            };
        },
        onLoad() {
            this.getProject()
        },
        methods: {
            onSubmit() {
                const { param, fileList } = this
                ywWorkorderCreate({
                    ...param,
                    // roomId: '',
                    fileList
                }).then(res => {
                    this.showToast('提交成功')
                    uni.redirectTo({
                        url: '/pages/workOrder/list'
                    })
                })
            },
            confirm0(e) {
                const item = e.value[0]
                this.$set(this.param, 'areaType', item.id)
                this.$set(this.param, 'areaName', item.name)
                this.showModal0 = false
                this.param = {
                    areaType: item.id,
                    areaName: item.name,
                }
            },
            confirm1(e) {
                const item = e.value[0]
                this.showModal1 = false
                this.$set(this.param, 'projectName', item.name)
                this.$set(this.param, 'projectId', item.id)
                this.getBuilding(item.id)
                this.showModal2 = true
            },
            confirm2(e) {
                const item = e.value[0]
                this.showModal2 = false
                this.$set(this.param, 'buildingName', item.name)
                this.$set(this.param, 'buildingId', item.id)
                if (this.areaType == 0) {
                    this.getRoom(item.id)
                    this.showModal4 = true
                } else {
                    this.getFloor(item.id)
                    this.showModal3 = true
                }
            },
            confirm3(e) {
                const item = e.value[0]
                this.showModal3 = false
                this.$set(this.param, 'floorName', item.name)
                this.$set(this.param, 'floorId', item.id)
            },
            confirm4(e) {
                const item = e.value[0]
                this.showModal4 = false
                this.$set(this.param, 'roomName', item.name)
                this.$set(this.param, 'roomId', item.id)
            },
            confirmDate(e) {
                this.$set(this.param, 'getDate', dayjs(e.value).format('YYYY-MM-DD HH:mm:ss'));
                this.showTime = false
            },
            getProject() {
                ywProjectPost().then(res => {
                    this.projectList = [res.data || []]
                })
            },
            getBuilding(projectId) {
                ywBuildingPost({
                    projectId
                }).then(res => {
                    this.buildingList = [res.data || []]
                })
            },
            getFloor(buildingId) {
                ywFloorPost({
                    buildingId
                }).then(res => {
                    this.floorList = [res.data || []]
                })
            },
            getRoom(buildingId) {
                ywRoomPost({
                    buildingId
                }).then(res => {
                    this.roomList = [res.data || []]
                })
            },
            fileDel(str, i) {
                this[str].splice(i, 1);
            },
@@ -76,7 +208,7 @@
                this.showUpload = false;
                let token = uni.getStorageSync('token') || '';
                uni.chooseImage({
                    count: 4,
                    count: 6,
                    success: chooseImageRes => {
                        uni.showLoading({
                            title: '上传中',
@@ -94,7 +226,7 @@
                            files: imgs,
                            name: 'file',
                            formData: {
                                folder: 'HIDDEN_DANGER_FILE'
                                folder: 'YW_WORKORDER_FILE'
                            },
                            header: {
                                Dm_user_token: token
@@ -106,7 +238,7 @@
                                        i.type = 0;
                                        i.fileurl = i.imgaddr;
                                        i.fileurlFull = i.url;
                                        this.submitFileList.push(i);
                                        this.fileList.push(i);
                                    });
                                }
                            },
@@ -140,7 +272,7 @@
                            },
                            name: 'file',
                            formData: {
                                folder: 'HIDDEN_DANGER_FILE'
                                folder: 'YW_WORKORDER_FILE'
                            },
                            success: uploadFileRes => {
                                let res = JSON.parse(uploadFileRes.data);
@@ -149,7 +281,7 @@
                                        i.type = 1;
                                        i.fileurl = i.imgaddr;
                                        i.fileurlFull = i.url;
                                        this.submitFileList.push(i);
                                        this.fileList.push(i);
                                    });
                                }
                            },
@@ -216,9 +348,11 @@
                align-items: center;
                justify-content: center;
                position: relative;
                &:nth-of-type(4n){
                    margin-right: 0;
                }
                .close {
                    position: absolute;
                    right: -20rpx;
@@ -239,6 +373,7 @@
        }
    }
    .sub_btn{
        position: fixed;
        bottom: 68rpx;
@@ -255,4 +390,15 @@
        font-size: 32rpx;
        color: #FFFFFF;
    }
    .sel_upload_wrap {
        width: 100%;
        border-top: 1px solid #666666;
        box-shadow: 0 1 1 #333333;
        .btn {
            height: 90rpx;
            line-height: 90rpx;
            text-align: center;
        }
    }
</style>
h5/pages/workOrder/list.vue
@@ -8,11 +8,11 @@
        </view>
        <!--  -->
        <view class="tabs">
            <view class="tab" :class="{active: activeTab == 0}" @click="tabsClick(0)">
            <view class="tab" :class="{active: activeTab == -1}" @click="tabsClick(-1)">
                <text>待处理</text>
                <text class="border"></text>
            </view>
            <view class="tab" :class="{active: activeTab == 1}" @click="tabsClick(1)">
            <view class="tab" :class="{active: activeTab == 2}" @click="tabsClick(2)">
                <text>已处理</text>
                <text class="border"></text>
            </view>
@@ -27,18 +27,20 @@
        </view>
        <!--  -->
        <view class="list">
            <view class="item" v-for="item in 10" @click="itemClick(item)">
            <view class="item" v-for="item in list" @click="itemClick(item)">
                <image v-if="item.stats == 1" src="@/static/side/workordered.png" class="icon"></image>
                <image v-else src="@/static/side/workorder.png" class="icon"></image>
                <view class="content">
                    <view class="name_wrap line">
                        <view class="name">A座/401</view>
                        <view class="status">已处理</view>
                        <view class="name">{{item.buildingName}}/{{item.roomNum}}</view>
                        <view class="status gray" v-if="item.dealStatus == 2">已处理</view>
                        <view class="status" v-if="item.dealStatus == 0">待处理</view>
                        <view class="status" v-if="item.dealStatus == 1">待处理</view>
                    </view>
                    <view class="line">工单类型:xxx</view>
                    <view class="line">报修物品:121212</view>
                    <view class="line">上报时间:121212</view>
                    <view class="line">上门时间:121212</view>
                    <view class="line">位置类型:{{item.areaType == '0' ? '室内装修' : '公共区域'}}</view>
                    <view class="line">工单分类:{{item.categoryName}}</view>
                    <view class="line">上报时间:{{item.createDate}}</view>
                    <view class="line">上门时间:{{item.getDate}}</view>
                </view>
            </view>
        </view>
@@ -47,28 +49,49 @@
</template>
<script>
    import { ywWorkorder } from '@/api'
    export default {
        data() {
            return {
                param: {},
                activeTab: 0,
                selectAll: false
                activeTab: -1,
                selectAll: false,
                list: [],
                total: 0,
                page: 1,
            };
        },
        onShow() {
            this.getList()
        },
        onReachBottom() {
        },
        methods: {
            tabsClick(val) {
                this.activeTab = val
                this.list = []
                this.page = 1
                this,getList()
            },
            allClick() {
                this.selectAll = !this.selectAll
            },
            itemClick() {
            itemClick(item) {
                uni.navigateTo({
                    url: '/pages/workOrder/detail'
                    url: `/pages/workOrder/detail?id=${item.id}`
                })
            },
            getList() {
                console.log('---');
                const { page, total, list, activeTab } = this
                ywWorkorder({
                    page,
                    capacity: 10,
                    model: {  }
                }).then(res => {
                    this.list = res.data.records || []
                })
            }
        }
    }
@@ -181,6 +204,9 @@
                    .status{
                        color: $primaryColor;
                    }
                    .gray{
                        color: #999999;
                    }
                }
            }
        }
h5/static/empty.png
h5/static/home/ic_xinzenggongdan@2x.png
h5/utils/service.js
@@ -15,7 +15,7 @@
            uni.request({
                url: baseUrl + options.url,
                data: options.data || {},
                method: options.method || 'GET',
                method: options.method || 'POST',
                header: options.header || {
                    // æ ¹æ®å®žé™…接口设计 key å– token æˆ–者 authorization
                    dm_user_token: token,