| | |
| | | <i class="el-icon-plus avatar-uploader-icon"></i> |
| | | <div>å¾ç/è§é¢</div> |
| | | </div> |
| | | </el-upload> |
| | | </el-upload> |
| | | <div v-for="(item, i) in fileList" :key="i" class="item"> |
| | | <i @click="handleDelImg(i)" class="el-icon-error close"></i> |
| | | <el-image :src="item.fileurlFull" :preview-src-list="[item.fileurlFull]" v-if="item.type == 0" |
| | |
| | | uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch', |
| | | dealFileList: [], |
| | | uploadData: { |
| | | folder: 'HIDDEN_DANGER_FILE' |
| | | folder: 'YW_WORKORDER_FILE' |
| | | }, |
| | | } |
| | | }, |
| | |
| | | import { http } from '@/utils/service.js' |
| | | export * from '@/utils/config.js' |
| | | export * from './staff' |
| | | export * from './yw' |
| | | |
| | | |
| | | |
| | |
| | | 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 |
| | | }) |
| | | } |
| | |
| | | // 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 |
| | |
| | | }) |
| | | } |
| | | |
| | | // 鿣鿿 å建 |
| | | 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 |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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' |
| | | }) |
| | | } |
| | |
| | | "/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" : "" |
| | |
| | | "easycom": {
|
| | | "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
|
| | | },
|
| | | "pages": [{
|
| | | "pages": [ |
| | | { |
| | | "path": "pages/login", |
| | | "style": { |
| | | "navigationBarTitleText": "ç»å½" |
| | | } |
| | | }, |
| | | {
|
| | | "path": "pages/index",
|
| | | "style": {
|
| | | "navigationBarTitleText": "é¦é¡µ",
|
| | | "enablePullDownRefresh": false
|
| | | }
|
| | | },
|
| | | {
|
| | | "path": "pages/login",
|
| | | "style": {
|
| | | "navigationBarTitleText": "ç»å½"
|
| | | }
|
| | | },
|
| | | {
|
| | |
| | | { |
| | | "navigationBarTitleText" : "å·¡æ£ç¹" |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/common/memberSel", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "éæ©äººå" |
| | | } |
| | | }
|
| | | ],
|
| | | "globalStyle": {
|
¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| | |
| | | <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>
|
| | |
| | | <view class="name">{{item.name}}</view>
|
| | | </view>
|
| | | </view>
|
| | | <view class="loginout" @click="loginOut">éåºç»é</view>
|
| | | </view>
|
| | |
|
| | | </template>
|
| | |
|
| | | <script>
|
| | | <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'
|
| | | },
|
| | | {
|
| | |
| | | url: item.url
|
| | | })
|
| | | },
|
| | | |
| | | loginOut() {
|
| | | this.$store.commit('empty')
|
| | | logoutPost()
|
| | | uni.redirectTo({
|
| | | url: '/pages/login'
|
| | | })
|
| | | },
|
| | |
|
| | | }
|
| | | }
|
| | | </script>
|
| | |
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .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> |
| | |
| | | <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"> |
| | | <!-- <view class="login_list_item"> |
| | | <image src="@/static/login_ic_password@2x.png" mode="widthFix" /> |
| | | <input v-model="form.password" type="password" placeholder="å¯ç " /> |
| | | </view> --> |
| | | <view class="login_list_item"> |
| | | <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"> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { loginPost, loginCaptcha, getUserInfo, getSystemDictData } from '@/api' |
| | | import { loginPost, getUserInfo, sendSMsPost } from '@/api' |
| | | import { mapState, mapMutations } from 'vuex' |
| | | export default { |
| | | name: 'login', |
| | |
| | | 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({ |
| | |
| | | }, |
| | | methods: { |
| | | ...mapMutations(["setToken", "setUserInfo"]), |
| | | changeFalg() { |
| | | this.ProtocolFlag = !this.ProtocolFlag |
| | | }, |
| | | getContent() { |
| | | getSystemDictData({ |
| | | dictCode: 'SYSTEM', |
| | | label: 'USER_PROTOCOL' |
| | | }).then(res => { |
| | | this.htmlText = res.data.code |
| | | this.isShowProtocol = true |
| | | }) |
| | | }, |
| | | showContent() { |
| | | this.getContent() |
| | | }, |
| | | initCaptcha() { |
| | | loginCaptcha().then(res => { |
| | | this.captcha = res.data |
| | | }) |
| | | }, |
| | | |
| | | 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.showToast('çä¿¡åéæå') |
| | | }) |
| | | }, |
| | | 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({ |
| | |
| | | }) |
| | | 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" |
| | | }) |
| | | }) |
| | | } |
| | |
| | | .btn{ |
| | | width: 145rpx; |
| | | color: $primaryColor; |
| | | text-align: center; |
| | | } |
| | | .gray{ |
| | | color: #999999; |
| | | } |
| | | input { |
| | | flex: 1; |
| | | height: 100%; |
| | |
| | | <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>
|
| | | <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>
|
| | |
| | | margin-right: 0; |
| | | } |
| | | } |
| | | image,video{ |
| | | width: 156rpx; |
| | | } |
| | | } |
| | | .desc{ |
| | | margin-top: 8rpx; |
| | |
| | | <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,
|
| | | };
|
| | | },
|
| | | methods: { |
| | | getList() {},
|
| | | 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() {
|
| | | 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() { |
| | | uni.navigateTo({ |
| | | url: '/pages/operation/detail' |
| | | }) |
| | | },
|
| | | itemClick(item) {
|
| | | uni.navigateTo({
|
| | | url: '/pages/operation/detail?id='+ item.id
|
| | | })
|
| | | }
|
| | | }
|
| | | }
|
| | | </script>
|
| | |
|
| | | <style lang="scss" scoped> |
| | | .main_app{ |
| | | padding: 0 30rpx; |
| | | <style lang="scss" scoped>
|
| | | .main_app {
|
| | | padding: 0 30rpx;
|
| | | }
|
| | |
|
| | | .head_wrap {
|
| | | display: flex;
|
| | | align-items: center;
|
| | |
| | | background: #F7F7F7;
|
| | | border-radius: 38rpx;
|
| | | padding-left: 30rpx;
|
| | | input{ |
| | | flex: 1; |
| | |
|
| | | input {
|
| | | flex: 1;
|
| | | }
|
| | |
|
| | | .search {
|
| | | width: 28rpx;
|
| | | height: 28rpx;
|
| | |
| | | .list {
|
| | | .item {
|
| | | display: flex;
|
| | | height: 228rpx; |
| | | padding: 30rpx 0; |
| | | height: 228rpx;
|
| | | padding: 30rpx 0;
|
| | | border-bottom: 2rpx solid #E5E5E5;
|
| | |
|
| | | .icon {
|
| | | width: 80rpx;
|
| | | height: 80rpx; |
| | | height: 80rpx;
|
| | | margin-right: 24rpx;
|
| | | }
|
| | |
|
| | | .content {
|
| | | flex: 1; |
| | | color: #666666; |
| | | 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; |
| | | color: #222222; |
| | | margin-right: 6rpx; |
| | | } |
| | | } |
| | | .status{ |
| | | color: $primaryColor; |
| | | } |
| | | flex: 1;
|
| | | color: #666666;
|
| | | 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;
|
| | | color: #222222;
|
| | | margin-right: 6rpx;
|
| | | }
|
| | | }
|
| | |
|
| | | .status {
|
| | | color: $primaryColor;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
| | | <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>
|
| | |
| | | <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>
|
| | |
| | | </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>
|
| | |
| | | </view>
|
| | |
|
| | | <view class="label">
|
| | | <text>*</text>
|
| | | ä¸ä¼ å¾ç/è§é¢
|
| | | </view>
|
| | | <view class="upload_wrap">
|
| | |
| | |
|
| | | <script>
|
| | | import {
|
| | | uploadUrl
|
| | | uploadUrl,
|
| | | ywWorkorderD, |
| | | ywWorkorderDeal
|
| | | } from '@/api'
|
| | | import dayjs from 'dayjs';
|
| | | export default {
|
| | | data() {
|
| | | return {
|
| | | id: '',
|
| | | info: {},
|
| | | showUpload: false,
|
| | | isShowHandle: false,
|
| | | isShowHandleDate: false,
|
| | |
| | | dealFileList: []
|
| | | };
|
| | | },
|
| | | onLoad(option) {
|
| | | console.log(option);
|
| | | this.id = option.id
|
| | | this.getDetail()
|
| | | },
|
| | | methods: {
|
| | | onSubmit() {
|
| | |
|
| | | 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({
|
| | |
| | | this.showUpload = false;
|
| | | let token = uni.getStorageSync('token') || '';
|
| | | uni.chooseImage({
|
| | | count: 4,
|
| | | count: 6,
|
| | | success: chooseImageRes => {
|
| | | uni.showLoading({
|
| | | title: 'ä¸ä¼ ä¸',
|
| | |
| | | files: imgs,
|
| | | name: 'file',
|
| | | formData: {
|
| | | folder: 'HIDDEN_DANGER_FILE'
|
| | | folder: 'YW_WORKORDER_FILE'
|
| | | },
|
| | | header: {
|
| | | Dm_user_token: token
|
| | |
| | | i.type = 0;
|
| | | i.fileurl = i.imgaddr;
|
| | | i.fileurlFull = i.url;
|
| | | this.submitFileList.push(i);
|
| | | this.dealFileList.push(i);
|
| | | });
|
| | | }
|
| | | },
|
| | |
| | | },
|
| | | name: 'file',
|
| | | formData: {
|
| | | folder: 'HIDDEN_DANGER_FILE'
|
| | | folder: 'YW_WORKORDER_FILE'
|
| | | },
|
| | | success: uploadFileRes => {
|
| | | let res = JSON.parse(uploadFileRes.data);
|
| | |
| | | i.type = 1;
|
| | | i.fileurl = i.imgaddr;
|
| | | i.fileurlFull = i.url;
|
| | | this.submitFileList.push(i);
|
| | | this.dealFileList.push(i);
|
| | | });
|
| | | }
|
| | | },
|
| | |
| | | font-size: 28rpx;
|
| | | color: $primaryColor;
|
| | | }
|
| | |
|
| | | .gray {
|
| | | color: #999999;
|
| | | }
|
| | | }
|
| | |
|
| | | .file_list {
|
| | |
| | |
|
| | | &:nth-of-type(4n) {
|
| | | margin-right: 0;
|
| | | }
|
| | |
|
| | | image,
|
| | | video {
|
| | | width: 156rpx;
|
| | | }
|
| | | }
|
| | | }
|
| | |
| | |
|
| | | .sel_upload_wrap {
|
| | | width: 100%;
|
| | | border-top: 1px solid #333333;
|
| | | border-top: 1px solid #666666;
|
| | | box-shadow: 0 1 1 #333333;
|
| | |
|
| | | .btn {
|
| | |
| | | <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">
|
| | |
| | | <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>
|
| | | <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video>
|
| | | </view>
|
| | | </view>
|
| | | </view> |
| | | </view> |
| | | <view class="sub_btn">æäº¤</view>
|
| | | </view>
|
| | | </view>
|
| | | <view class="sub_btn" @click="onSubmit">æäº¤</view>
|
| | | <!-- -->
|
| | | <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>
|
| | | <view class="sel_upload_wrap">
|
| | |
| | | <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 |
| | | } from '@/api' |
| | | <script>
|
| | | import {
|
| | | uploadUrl,
|
| | | ywProjectPost,
|
| | | ywBuildingPost,
|
| | | ywFloorPost,
|
| | | ywRoomPost, |
| | | ywWorkorderCreate
|
| | | } from '@/api'
|
| | | import dayjs from 'dayjs';
|
| | | export default {
|
| | | data() {
|
| | | 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: { |
| | | fileDel(str, i) { |
| | | this[str].splice(i, 1); |
| | | 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
|
| | | }
|
| | | }, |
| | | uploadImage() { |
| | | this.showUpload = false; |
| | | let token = uni.getStorageSync('token') || ''; |
| | | uni.chooseImage({ |
| | | count: 4, |
| | | success: chooseImageRes => { |
| | | uni.showLoading({ |
| | | title: 'ä¸ä¼ ä¸', |
| | | mask: true |
| | | }); |
| | | const tempFilePaths = chooseImageRes.tempFilePaths; |
| | | let imgs = tempFilePaths.map((value, index) => { |
| | | return { |
| | | name: 'file', |
| | | uri: value |
| | | }; |
| | | }); |
| | | uni.uploadFile({ |
| | | url: `${uploadUrl}`, |
| | | files: imgs, |
| | | name: 'file', |
| | | formData: { |
| | | folder: 'HIDDEN_DANGER_FILE' |
| | | }, |
| | | header: { |
| | | Dm_user_token: token |
| | | }, |
| | | success: uploadFileRes => { |
| | | let res = JSON.parse(uploadFileRes.data); |
| | | if (res.data && res.data.length > 0) { |
| | | res.data.forEach(i => { |
| | | i.type = 0; |
| | | i.fileurl = i.imgaddr; |
| | | i.fileurlFull = i.url; |
| | | this.submitFileList.push(i); |
| | | }); |
| | | } |
| | | }, |
| | | fail(err) { |
| | | console.log('err', err); |
| | | }, |
| | | complete() { |
| | | uni.hideLoading(); |
| | | // if (i === chooseImageRes.tempFilePaths.length - 1) { |
| | | // uni.hideLoading() |
| | | // } |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | confirm3(e) { |
| | | const item = e.value[0] |
| | | this.showModal3 = false |
| | | this.$set(this.param, 'floorName', item.name) |
| | | this.$set(this.param, 'floorId', item.id) |
| | | }, |
| | | uploadVideo() { |
| | | this.showUpload = false; |
| | | let token = uni.getStorageSync('token') || ''; |
| | | uni.chooseVideo({ |
| | | success: chooseImageRes => { |
| | | uni.showLoading({ |
| | | title: 'ä¸ä¼ ä¸', |
| | | mask: true |
| | | }); |
| | | uni.uploadFile({ |
| | | url: `${uploadUrl}`, |
| | | filePath: chooseImageRes.tempFilePath, |
| | | header: { |
| | | Dm_user_token: token |
| | | }, |
| | | name: 'file', |
| | | formData: { |
| | | folder: 'HIDDEN_DANGER_FILE' |
| | | }, |
| | | success: uploadFileRes => { |
| | | let res = JSON.parse(uploadFileRes.data); |
| | | if (res.data && res.data.length > 0) { |
| | | res.data.forEach(i => { |
| | | i.type = 1; |
| | | i.fileurl = i.imgaddr; |
| | | i.fileurlFull = i.url; |
| | | this.submitFileList.push(i); |
| | | }); |
| | | } |
| | | }, |
| | | complete() { |
| | | uni.hideLoading(); |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | 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);
|
| | | },
|
| | | uploadImage() {
|
| | | this.showUpload = false;
|
| | | let token = uni.getStorageSync('token') || '';
|
| | | uni.chooseImage({
|
| | | count: 6,
|
| | | success: chooseImageRes => {
|
| | | uni.showLoading({
|
| | | title: 'ä¸ä¼ ä¸',
|
| | | mask: true
|
| | | });
|
| | | const tempFilePaths = chooseImageRes.tempFilePaths;
|
| | | let imgs = tempFilePaths.map((value, index) => {
|
| | | return {
|
| | | name: 'file',
|
| | | uri: value
|
| | | };
|
| | | });
|
| | | uni.uploadFile({
|
| | | url: `${uploadUrl}`,
|
| | | files: imgs,
|
| | | name: 'file',
|
| | | formData: {
|
| | | folder: 'YW_WORKORDER_FILE'
|
| | | },
|
| | | header: {
|
| | | Dm_user_token: token
|
| | | },
|
| | | success: uploadFileRes => {
|
| | | let res = JSON.parse(uploadFileRes.data);
|
| | | if (res.data && res.data.length > 0) {
|
| | | res.data.forEach(i => {
|
| | | i.type = 0;
|
| | | i.fileurl = i.imgaddr;
|
| | | i.fileurlFull = i.url;
|
| | | this.fileList.push(i);
|
| | | });
|
| | | }
|
| | | },
|
| | | fail(err) {
|
| | | console.log('err', err);
|
| | | },
|
| | | complete() {
|
| | | uni.hideLoading();
|
| | | // if (i === chooseImageRes.tempFilePaths.length - 1) {
|
| | | // uni.hideLoading()
|
| | | // }
|
| | | }
|
| | | });
|
| | | }
|
| | | });
|
| | | },
|
| | | uploadVideo() {
|
| | | this.showUpload = false;
|
| | | let token = uni.getStorageSync('token') || '';
|
| | | uni.chooseVideo({
|
| | | success: chooseImageRes => {
|
| | | uni.showLoading({
|
| | | title: 'ä¸ä¼ ä¸',
|
| | | mask: true
|
| | | });
|
| | | uni.uploadFile({
|
| | | url: `${uploadUrl}`,
|
| | | filePath: chooseImageRes.tempFilePath,
|
| | | header: {
|
| | | Dm_user_token: token
|
| | | },
|
| | | name: 'file',
|
| | | formData: {
|
| | | folder: 'YW_WORKORDER_FILE'
|
| | | },
|
| | | success: uploadFileRes => {
|
| | | let res = JSON.parse(uploadFileRes.data);
|
| | | if (res.data && res.data.length > 0) {
|
| | | res.data.forEach(i => {
|
| | | i.type = 1;
|
| | | i.fileurl = i.imgaddr;
|
| | | i.fileurlFull = i.url;
|
| | | this.fileList.push(i);
|
| | | });
|
| | | }
|
| | | },
|
| | | complete() {
|
| | | uni.hideLoading();
|
| | | }
|
| | | });
|
| | | }
|
| | | });
|
| | | }
|
| | | }
|
| | | }
|
| | | </script>
|
| | |
|
| | | <style lang="scss" scoped>
|
| | | .list { |
| | | |
| | | .list {
|
| | |
|
| | | .item {
|
| | | .la {
|
| | | margin-top: 30rpx;
|
| | |
| | | align-items: center;
|
| | | justify-content: center;
|
| | | position: relative;
|
| | | &:nth-of-type(4n){ |
| | | margin-right: 0; |
| | |
|
| | | &:nth-of-type(4n) {
|
| | | margin-right: 0;
|
| | | }
|
| | |
|
| | | .close {
|
| | | position: absolute;
|
| | | right: -20rpx;
|
| | |
| | | }
|
| | |
|
| | | }
|
| | | }
|
| | |
|
| | | .sub_btn {
|
| | | position: fixed;
|
| | | bottom: 68rpx;
|
| | | left: 40rpx;
|
| | | width: 670rpx;
|
| | | height: 88rpx;
|
| | | background: $primaryColor;
|
| | | box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3);
|
| | | border-radius: 44rpx;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: center;
|
| | | font-weight: 500;
|
| | | font-size: 32rpx;
|
| | | color: #FFFFFF;
|
| | | } |
| | | .sub_btn{ |
| | | position: fixed; |
| | | bottom: 68rpx; |
| | | left: 40rpx; |
| | | width: 670rpx; |
| | | height: 88rpx; |
| | | background: $primaryColor; |
| | | box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0,104,255,0.3); |
| | | border-radius: 44rpx; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | font-weight: 500; |
| | | 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> |
| | |
| | | </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> |
| | |
| | | </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>
|
| | |
| | | </view>
|
| | | </template>
|
| | |
|
| | | <script>
|
| | | <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 || [] |
| | | }) |
| | | }
|
| | | }
|
| | | }
|
| | |
| | | .status{ |
| | | color: $primaryColor; |
| | | } |
| | | .gray{ |
| | | color: #999999; |
| | | } |
| | | }
|
| | | }
|
| | | }
|
| | |
| | | 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, |