Merge remote-tracking branch 'origin/master'
| | |
| | | VUE_APP_API_PREFIX = '/gateway_interface' |
| | | |
| | | # 项ç®åç§° |
| | | VUE_APP_TITLE = 'é宿ä½ä¸å¿' |
| | | VUE_APP_TITLE = 'ç§èµå¹³å°' |
| | |
| | | # ç产ç¯å¢é
ç½® |
| | | NODE_ENV = 'production' |
| | | |
| | | # VUE_APP_API_URL = 'http://10.50.250.178:8088/gateway_interface' |
| | | # VUE_APP_API_URL = 'http://192.168.0.173/gateway_interface' |
| | |
| | | |
| | | VUE_APP_API_URL = 'http://192.168.0.162:10010/' |
| | | |
| | | # VUE_APP_API_URL = 'http://192.168.0.136:10010/' |
| | | # VUE_APP_API_URL = 'http://192.168.0.108:10030/' |
| | |
| | | export function getYwContractBillById (id) { |
| | | return request.get(`/visitsAdmin/cloudService/business/ywContractBill/${id}`) |
| | | } |
| | | |
| | | // å¯é款账å |
| | | export function getCanBackBill (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywContractBill/getCanBackBill', data) |
| | | } |
| | | |
| | |
| | | export function close (id) { |
| | | return request.get(`/visitsAdmin/cloudService/business/ywContractRevenue/close?id=${id}`) |
| | | } |
| | | |
| | | // æ ¹æ®IDæ¥è¯¢ |
| | | export function getById (id) { |
| | | return request.get(`/visitsAdmin/cloudService/business/ywContractRevenue/${id}`) |
| | | } |
| | |
| | | <div class="main_content"> |
| | | <el-form :model="form" label-position="top" ref="form" :rules="rules"> |
| | | <div class="head"> |
| | | <div class="m_title">åºç¡ä¿¡æ¯</div> |
| | | <div class="m_title">åºç¡ä¿¡æ¯-{{time.startDate}}~{{time.endDate}}</div> |
| | | <div class="tabs"> |
| | | <div class="tab" :class="{ active: form.feeType === 0 }" @click="timeTabClick(0)">å¨æè´¹ç¨</div> |
| | | <div class="tab" :class="{ active: form.feeType === 1 }" @click="timeTabClick(1)">䏿¬¡æ§è´¹ç¨</div> |
| | |
| | | type="daterange" |
| | | range-separator="è³" |
| | | v-model="form.date" |
| | | :min-date="new Date(time.startDate)" |
| | | :max-date="new Date(time.endDate)" |
| | | @change="changeDate" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ" |
| | |
| | | billTypeCopy: 0, |
| | | date: [] |
| | | }, |
| | | time: { |
| | | startDate: '', |
| | | endDate: '' |
| | | }, |
| | | rules: { |
| | | contractCode: [ |
| | | { required: true, message: '请è¾å
¥', trigger: 'blur' } |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | open (title, target) { |
| | | open (title, target, time) { |
| | | this.title = title |
| | | this.time.startDate = time.startDate |
| | | this.time.endDate = time.endDate |
| | | this.getCompany() |
| | | this.visible = true |
| | | // æ°å»º |
| | |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="éç§æ¥æ" prop="btDate" style="width: 33%;"> |
| | | <!-- @change="changeBtDate"--> |
| | | <el-date-picker |
| | | v-model="form.btDate" |
| | | type="date" |
| | |
| | | <div class="title"> |
| | | <span>éç§ä¿¡æ¯</span> |
| | | <div style="display: flex; align-items: center;"> |
| | | <el-button type="primary" @click="$refs.addCollectionBill.open('åå»ºæ¶æ¬¾è´¦å', { contractCode: info.code, contractId: info.id, renterName: info.renterName, renterId: info.renterId, billType: 0, billTypeCopy: 0, feeType: 0 })">æ·»å æ¶æ¬¾</el-button> |
| | | <el-button type="primary" @click="$refs.AddPaymentBill.open('åå»ºä»æ¬¾è´¦å', { contractCode: info.code, contractId: info.id, renterName: info.renterName, renterId: info.renterId, billType: 1, billTypeCopy: 1 })">æ·»å 仿¬¾</el-button> |
| | | <el-button type="primary" @click="addZD">æ·»å æ¶æ¬¾</el-button> |
| | | <el-button type="primary" @click="addFK">æ·»å 仿¬¾</el-button> |
| | | </div> |
| | | </div> |
| | | <el-table |
| | | :data="info.terminateList" |
| | | border |
| | | v-loading="loading" |
| | | style="width: 100%; margin-bottom: 15px;"> |
| | | <el-table-column |
| | | prop="code" |
| | |
| | | import AddCollectionBill from './addCollectionBill' |
| | | import AddPaymentBill from './addPaymentBill' |
| | | import { getUserList } from '@/api/system/user' |
| | | import { backRent } from '@/api/contract' |
| | | import { backRent, getCanBackBill } from '@/api/contract' |
| | | export default { |
| | | name: "terminateLease", |
| | | components: { |
| | |
| | | agentList: [], |
| | | |
| | | receivable: '', |
| | | meet: '' |
| | | meet: '', |
| | | |
| | | loading: false |
| | | } |
| | | }, |
| | | watch: { |
| | |
| | | this.title = title |
| | | this.info = info |
| | | this.form.id = info.id |
| | | this.info.billList.forEach(item => { |
| | | this.info.canBackRentBills.forEach(item => { |
| | | this.$set(item, 'receivableFeeCopy', item.receivableFee) |
| | | this.$set(item, 'receivableFee', item.needReceivableFee) |
| | | if ([2,3,7].includes(item.costType)) { |
| | | this.$set(item, 'billType', 1) |
| | | this.$set(item, 'price', item.actReceivableFee) |
| | | } else { |
| | | this.$set(item, 'price', item.receivableFee) |
| | | this.$set(item, 'price', item.needReceivableFee) |
| | | } |
| | | }) |
| | | this.info.terminateList = this.info.canBackRentBills.filter(item => { |
| | | if ([0,1,4,5,6].includes(item.costType)) { |
| | | item.billTypeCopy = item.billType |
| | | item.billTypeCopy = JSON.parse(JSON.stringify(item.billType)) |
| | | return item |
| | | } |
| | | }) |
| | | this.info.depositList = this.info.canBackRentBills.filter(item => { |
| | | if ([2,3,7].includes(item.costType)) { |
| | | item.billTypeCopy = item.billType |
| | | item.billTypeCopy = JSON.parse(JSON.stringify(item.billType)) |
| | | return item |
| | | } |
| | | }) |
| | | this.getUser() |
| | | this.visible = true |
| | | }, |
| | | addZD () { |
| | | if (!this.form.btDate) return this.$message.warning('è¯·éæ©éç§æ¥æ') |
| | | this.$refs.addCollectionBill.open('åå»ºæ¶æ¬¾è´¦å', { |
| | | contractCode: this.info.code, |
| | | contractId: this.info.id, |
| | | renterName: this.info.renterName, |
| | | renterId: this.info.renterId, |
| | | billType: 0, |
| | | billTypeCopy: 0, |
| | | feeType: 0 |
| | | }, { startDate: this.info.startDate, endDate: this.form.btDate }) |
| | | }, |
| | | addFK () { |
| | | if (!this.form.btDate) return this.$message.warning('è¯·éæ©éç§æ¥æ') |
| | | this.$refs.AddPaymentBill.open('åå»ºä»æ¬¾è´¦å', { |
| | | contractCode: this.info.code, |
| | | contractId: this.info.id, |
| | | renterName: this.info.renterName, |
| | | renterId: this.info.renterId, |
| | | billType: 1, |
| | | billTypeCopy: 1 |
| | | }, { startDate: this.info.startDate, endDate: this.form.btDate }) |
| | | }, |
| | | changeBtDate (planPayDateEnd) { |
| | | this.loading = true |
| | | getCanBackBill({ |
| | | contractId: this.info.id, |
| | | planPayDateEnd |
| | | }).then(res => { |
| | | res.forEach(item => { |
| | | this.$set(item, 'receivableFeeCopy', item.receivableFee) |
| | | this.$set(item, 'receivableFee', item.needReceivableFee) |
| | | this.$set(item, 'price', item.needReceivableFee) |
| | | }) |
| | | this.info.terminateList = res.filter(item => { |
| | | if ([0,1,4,5,6].includes(item.costType)) { |
| | | item.billTypeCopy = JSON.parse(JSON.stringify(item.billType)) |
| | | return item |
| | | } |
| | | }) |
| | | }).finally(() => { |
| | | this.loading = false |
| | | }) |
| | | }, |
| | | getObjS (obj) { |
| | | this.info.terminateList.push(obj) |
| | |
| | | row.price = 0 |
| | | this.$message.warning('ä¸è½å¤§äºåå§åºæ¶ä»éé¢') |
| | | } else { |
| | | row.price = Number(num) - row.actReceivableFee |
| | | // æ¶ |
| | | if (row.billTypeCopy === 0) { |
| | | if (row.price > 0) { |
| | | row.billType = 0 |
| | | } else if (row.price < 0) { |
| | | row.billType = 1 |
| | | if (num) { |
| | | row.price = Number(num) - row.actReceivableFee |
| | | // æ¶ |
| | | if (row.billTypeCopy === 0) { |
| | | if (row.price > 0) { |
| | | row.billType = 0 |
| | | } else if (row.price < 0) { |
| | | row.billType = 1 |
| | | } else { |
| | | row.billType = 0 |
| | | } |
| | | } else { |
| | | row.billType = 0 |
| | | if (row.price > 0) { |
| | | row.billType = 1 |
| | | } else if (row.price < 0) { |
| | | row.billType = 0 |
| | | } else { |
| | | row.billType = 1 |
| | | } |
| | | } |
| | | } else { |
| | | if (row.price > 0) { |
| | | row.billType = 1 |
| | | } else if (row.price < 0) { |
| | | row.billType = 0 |
| | | } else { |
| | | row.billType = 1 |
| | | } |
| | | row.price = 0 |
| | | row.billType = row.billTypeCopy |
| | | console.log('billTypeCopy', row.billTypeCopy) |
| | | } |
| | | // if (row.price > 0) { |
| | | // row.billType = 0 |
| | | // } else if (row.price < 0) { |
| | | // row.billType = 1 |
| | | // } |
| | | row.price = String(row.price) |
| | | if (row.price.indexOf('-') > 0) { |
| | | row.price = row.price.substring(0, row.price.length) |
| | | } |
| | | row.price = Math.abs(row.price); |
| | | } |
| | | } |
| | | } |
| | |
| | | <el-table-column prop="needReceivableFee" label="éæ¶éé¢" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column label="è´¹ç¨ç±»å" min-width="100" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.feeType === 0">å¨æè´¹ç¨</span> |
| | | <span v-if="row.feeType === 1">䏿¬¡æ§è´¹ç¨</span> |
| | | <span v-if="row.costType === 0">ç§èµè´¹</span> |
| | | <span v-if="row.costType === 1">ç©ä¸è´¹</span> |
| | | <span v-if="row.costType === 2">ç§èµæ¼é</span> |
| | | <span v-if="row.costType === 3">ç©ä¸æ¼é</span> |
| | | <span v-if="row.costType === 4">æ°´çµè´¹</span> |
| | | <span v-if="row.costType === 5">æé¡¹è´¹</span> |
| | | <span v-if="row.costType === 6">å
¶å®</span> |
| | | <span v-if="row.costType === 7">ä¿è¯é</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ¯å¦é¾æ" min-width="100" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.isOverdue === 0">å¦</span> |
| | | <span v-if="row.isOverdue === 1">æ¯</span> |
| | | <span v-if="row.isOverdue === 0">æªé¾æ</span> |
| | | <span v-if="row.isOverdue === 1" style="color: red;">已龿</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="è®¡è´¹å¨æ" min-width="100" show-overflow-tooltip> |
| | | <el-table-column label="è®¡è´¹å¨æ" min-width="200" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | {{ row.startDate }} ~ {{ row.endDate }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="planPayDate" label="åºæ¶æ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="createTime" label="è´¦åæ¥æº" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="statusName" label="ååç¶æ" min-width="100" fixed="right" show-overflow-tooltip /> |
| | | <el-table-column label="è´¦åæ¥æº" min-width="100" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.type === 0">ååè´¦å</span> |
| | | <span v-if="row.type === 1">èªå»ºè´¦å</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="è´¦åç¶æ" min-width="100" fixed="right" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.status === 0">å¼å¯</span> |
| | | <span v-if="row.status === 1" style="color: red;">å
³é</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" min-width="120" fixed="right"> |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="handleDetail(row)" icon="el-icon-edit" v-permissions="['business:category:update']">æ¥ç详æ
</el-button> |
| | |
| | | }, |
| | | getList (page) { |
| | | const { pagination, filters } = this |
| | | let form = JSON.parse(JSON.stringify(filters)) |
| | | if (form && form.selDate && form.selDate.length > 0) { |
| | | form.planPayDateStart = form.payDate[0] |
| | | form.planPayDateEnd = form.payDate[1] |
| | | } |
| | | this.loading = true |
| | | fetchList({ |
| | | model: { |
| | |
| | | <div class="left"> |
| | | <span class="mr10">仿¬¾æ¹ï¼{{info.customerName}}</span> |
| | | <el-tag type="success" v-if="info.status === 0">å¼å¯</el-tag> |
| | | <el-tag type="success" v-if="info.status === 1">å
³é</el-tag> |
| | | <el-tag type="info" v-if="info.status === 1">å
³é</el-tag> |
| | | </div> |
| | | <el-button plain type="primary" @click="$refs.flowingWater.open(info.billType === 0 ? 'åå»ºæ¶æ¬¾è´¦å' : 'åå»ºä»æ¬¾è´¦å', { |
| | | <el-button plain type="primary" @click="$refs.flowingWater.open('åå»ºæ¶æ¯æµæ°´', { |
| | | billType: info.billType, |
| | | billId: info.id, |
| | | costType: info.costType, |
| | | receivableFee: info.needReceivableFee, |
| | | costTypeName: returnText(info.costType), |
| | | contractCode: info.contractCode, |
| | | contractId: info.contractId, |
| | |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 5">å·²å
³é</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">åºæ¶éé¢ï¼å
ï¼</div> |
| | | <div class="la">åº{{info.billType === 0 ? 'æ¶' : 'ä»'}}éé¢ï¼å
ï¼</div> |
| | | <div class="val" style="margin-top: 10px;">{{info.receivableFee}}</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">宿¶éé¢ï¼å
ï¼</div> |
| | | <div class="la">å®{{info.billType === 0 ? 'æ¶' : 'ä»'}}éé¢ï¼å
ï¼</div> |
| | | <div class="val" style="margin-top: 10px;">{{info.actReceivableFee}}</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">éä»éé¢ï¼å
ï¼</div> |
| | | <div class="la">é{{info.billType === 0 ? 'æ¶' : 'ä»'}}éé¢ï¼å
ï¼</div> |
| | | <div class="val" style="margin-top: 10px;">{{info.needReceivableFee}}</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">åºæ¶æ¥æ</div> |
| | | <div class="la">åº{{info.billType === 0 ? 'æ¶' : 'ä»'}}æ¥æ</div> |
| | | <div class="val" style="margin-top: 10px;">{{info.planPayDate}}</div> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="title">åºç¡ä¿¡æ¯</div> |
| | | <div class="list" style="background: rgba(0,0,0,0); padding: 0;"> |
| | | <div class="item"> |
| | | <div class="la">è´¦åç±»å</div> |
| | | <div class="val" v-if="info.billType === 0">æ¶æ¬¾</div> |
| | | <div class="val" v-if="info.billType === 1">仿¬¾</div> |
| | | <div class="la">è´¹ç¨ç±»å</div> |
| | | <div class="val">{{returnText(info.costType)}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">è®¡è´¹å¨æ</div> |
| | |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">ç»å人</div> |
| | | <div class="val">å¼ ä¸</div> |
| | | <div class="val">{{info.realname}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">æå±å
¬å¸</div> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="area" |
| | | label="é¢ç§¯"> |
| | | <template slot-scope="{row}"> |
| | | {{row.area}}ã¡ |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <!-- <div class="title">è´¦åæç»</div>--> |
| | | <!-- <div class="list" style="background: rgba(0,0,0,0); padding: 0;">--> |
| | | <!-- <el-table--> |
| | | <!-- :data="tableData"--> |
| | | <!-- border--> |
| | | <!-- style="width: 100%">--> |
| | | <!-- <el-table-column--> |
| | | <!-- prop="date"--> |
| | | <!-- label="è´¹ç¨ç±»å">--> |
| | | <!-- </el-table-column>--> |
| | | <!-- <el-table-column--> |
| | | <!-- prop="name"--> |
| | | <!-- label="åºæ¶/ä»éé¢">--> |
| | | <!-- </el-table-column>--> |
| | | <!-- <el-table-column--> |
| | | <!-- prop="address"--> |
| | | <!-- label="宿¶éé¢">--> |
| | | <!-- </el-table-column>--> |
| | | <!-- <el-table-column--> |
| | | <!-- prop="address"--> |
| | | <!-- label="éæ¶éé¢">--> |
| | | <!-- </el-table-column>--> |
| | | <!-- <el-table-column--> |
| | | <!-- prop="address"--> |
| | | <!-- label="è®¡è´¹å¨æ">--> |
| | | <!-- </el-table-column>--> |
| | | <!-- <el-table-column--> |
| | | <!-- prop="address"--> |
| | | <!-- label="åºæ¶/仿¥æ">--> |
| | | <!-- </el-table-column>--> |
| | | <!-- <el-table-column--> |
| | | <!-- prop="address"--> |
| | | <!-- label="夿³¨">--> |
| | | <!-- </el-table-column>--> |
| | | <!-- </el-table>--> |
| | | <!-- </div>--> |
| | | <div class="title">æ¶æ¯æµæ°´</div> |
| | | <div class="list" style="background: rgba(0,0,0,0); padding: 0;"> |
| | | <el-table |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="payDateEnd" |
| | | prop="actPayDate" |
| | | label="å
¥è´¦æ¥æ"> |
| | | </el-table-column> |
| | | <el-table-column |
| | |
| | | <el-input v-model="form.renterName" disabled placeholder="请è¾å
¥åºæ¶éé¢" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="æ¿æº" prop="ywContractRoomList"> |
| | | <el-select v-model="form.ywContractRoomList" multiple placeholder="è¯·éæ©"> |
| | | <el-select v-model="form.ywContractRoomList" @click="clickHouse" multiple placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="(item, index) in houseList" |
| | | :key="index" |
| | | :value="item.id" |
| | | :value="item.roomId" |
| | | :label="item.projectName + item.buildingName + item.floorName + item.roomName" /> |
| | | </el-select> |
| | | </el-form-item> |
| | |
| | | methods: { |
| | | open (title, target) { |
| | | this.title = title |
| | | this.form.feeType = 0 |
| | | this.form.multifileList = [] |
| | | this.getListAll() |
| | | this.getCompanyList() |
| | |
| | | } |
| | | }) |
| | | }, |
| | | clickHouse () { |
| | | if (!this.form.contractId) { |
| | | return this.$message.warning('请å
éæ©åå') |
| | | } |
| | | }, |
| | | changeContract (e) { |
| | | this.form.renterName = this.contract.filter(item => { |
| | | if (item.id === e) { |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @close="close" |
| | | @confirm="confirm"> |
| | | <div class="home_title"> |
| | | <div class="left"> |
| | | <span class="mr10">对æ¹åä½åç§°ï¼{{info.customerName}}</span> |
| | | <el-tag type="success" v-if="info.status === 0">å¼å¯</el-tag> |
| | | <el-tag type="info" v-if="info.status === 1">å
³é</el-tag> |
| | | </div> |
| | | <el-button type="danger" v-if="info.status === 0" @click="closeDW()">å
³éæµæ°´</el-button> |
| | | </div> |
| | | <div class="line"></div> |
| | | <div class="main"> |
| | | <div class="list" style="background: rgba(0,0,0,0); padding: 0; margin-bottom: 0;"> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">ç»æ¸
ç¶æ</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info1.payStatus === 0">å¾
æ¶æ¬¾</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info1.payStatus === 1">å·²ç»æ¸
</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info1.payStatus === 2">é¨åç»æ¸
</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info1.payStatus === 3">å¾
仿¬¾</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info1.payStatus === 4">å¾
鿬¾</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info1.payStatus === 5">å·²å
³é</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">åº{{info.revenueType === 0 ? 'æ¶' : 'ä»'}}éé¢ï¼å
ï¼</div> |
| | | <div class="val" style="margin-top: 10px;">{{info1.receivableFee}}</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">å®{{info.revenueType === 0 ? 'æ¶' : 'ä»'}}éé¢ï¼å
ï¼</div> |
| | | <div class="val" style="margin-top: 10px;">{{info1.actReceivableFee}}</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">é{{info.revenueType === 0 ? 'æ¶' : 'ä»'}}éé¢ï¼å
ï¼</div> |
| | | <div class="val" style="margin-top: 10px;">{{info1.needReceivableFee}}</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">åº{{info.revenueType === 0 ? 'æ¶' : 'ä»'}}æ¥æ</div> |
| | | <div class="val" style="margin-top: 10px;">{{info1.planPayDate}}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="tabs"> |
| | | <div class="tab" :class="{ active: activeTabs == 0 }" @click="tabsClick(0)">æµæ°´ä¿¡æ¯</div> |
| | | <div class="tab" :class="{ active: activeTabs == 1 }" @click="tabsClick(1)">å
³èè´¦å</div> |
| | | </div> |
| | | <div class="main"> |
| | | <div class="title">æµæ°´ä¿¡æ¯</div> |
| | | <div class="list" style="background: rgba(0,0,0,0); padding: 0;"> |
| | | <div class="item"> |
| | | <div class="la">æ¶æ¯ç±»å</div> |
| | | <div class="val" v-if="info.revenueType === 0">æ¶å
¥</div> |
| | | <div class="val" v-if="info.revenueType === 1">æ¯åº</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">å
¥è´¦æ¥æ</div> |
| | | <div class="val">{{info.actPayDate}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">åçé¢ï¼å
ï¼</div> |
| | | <div class="val">{{info.actReceivableFee}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">è´¦åç¼å·</div> |
| | | <div class="val">{{info.billCode}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">ååç¼å·</div> |
| | | <div class="val">{{info.contractCode}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">å建æ¶é´</div> |
| | | <div class="val">{{info.createDate}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">对æ¹å
¬å¸</div> |
| | | <div class="val">{{info.customerName}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">ç»å人</div> |
| | | <div class="val">{{info.realname}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">æµæ°´è´¦æ·</div> |
| | | <div class="val">{{info.accountTitle}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">夿³¨</div> |
| | | <div class="val">{{info.remark}}</div> |
| | | </div> |
| | | <div class="item"></div> |
| | | <div class="item"></div> |
| | | </div> |
| | | <div class="title">å
³èè´¦å</div> |
| | | <div class="list" style="background: rgba(0,0,0,0); padding: 0;"> |
| | | <el-table |
| | | :data="[info1]" |
| | | border |
| | | style="width: 100%"> |
| | | <el-table-column |
| | | label="è´¹ç¨ç±»å"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.costType === 0">ç§èµè´¹</span> |
| | | <span v-if="row.costType === 1">ç©ä¸è´¹</span> |
| | | <span v-if="row.costType === 2">ç§èµæ¼é</span> |
| | | <span v-if="row.costType === 3">ç©ä¸æ¼é</span> |
| | | <span v-if="row.costType === 4">æ°´çµè´¹</span> |
| | | <span v-if="row.costType === 5">æé¡¹è´¹</span> |
| | | <span v-if="row.costType === 6">å
¶å®</span> |
| | | <span v-if="row.costType === 7">ä¿è¯é</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="receivableFee" |
| | | label="åºæ¶/ä»éé¢"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="actReceivableFee" |
| | | label="宿¶éé¢"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="needReceivableFee" |
| | | label="éæ¶éé¢"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="è®¡è´¹å¨æ"> |
| | | <template slot-scope="{row}"> |
| | | {{row.startDate}} ~ {{row.endDate}} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="planPayDate" |
| | | label="åºæ¶/仿¥æ"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="remark" |
| | | label="夿³¨"> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <div class="title">æµæ°´éä»¶</div> |
| | | <div class="list" style="background: rgba(0,0,0,0); padding: 0;"> |
| | | <el-table |
| | | :data="info.multifileList" |
| | | border |
| | | style="width: 100%"> |
| | | <el-table-column |
| | | prop="name" |
| | | label="éä»¶åç§°"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="userName" |
| | | label="æä½äºº"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="createDate" |
| | | label="æä½æ¶é´"> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <div class="title">æä½è®°å½</div> |
| | | <div class="list" style="background: rgba(0,0,0,0); padding: 0;"> |
| | | <el-table |
| | | :data="info.editRecordDataVOList" |
| | | border |
| | | style="width: 100%"> |
| | | <el-table-column |
| | | width="200" |
| | | prop="editUserName" |
| | | label="æä½äºº"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | width="200" |
| | | prop="editTime" |
| | | label="æä½æ¶é´"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="editRemark" |
| | | label="æä½å
容"> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import { close, getById } from '@/api/ywContractRevenue' |
| | | import { getYwContractBillById } from '@/api/contract' |
| | | export default { |
| | | name: 'details', |
| | | components: { |
| | | GlobalWindow |
| | | }, |
| | | extends: BaseOpera, |
| | | data() { |
| | | return { |
| | | id: '', |
| | | activeTabs: '', |
| | | info: {}, |
| | | info1: {} |
| | | } |
| | | }, |
| | | methods: { |
| | | open (title, id) { |
| | | this.title = title |
| | | this.id = id |
| | | this.getDetails() |
| | | }, |
| | | getDetails () { |
| | | getById(this.id) |
| | | .then(res => { |
| | | this.info = res |
| | | this.getDetails1() |
| | | }) |
| | | }, |
| | | getDetails1 () { |
| | | getYwContractBillById(this.info.billId) |
| | | .then(res => { |
| | | this.info1 = res |
| | | this.visible = true |
| | | }) |
| | | }, |
| | | tabsClick(val) { |
| | | this.activeTabs = val |
| | | }, |
| | | closeDW (id) { |
| | | this.$confirm('确认å
³éæ¤æµæ°´å?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | close(id) |
| | | .then(res => { |
| | | this.getDetails() |
| | | }) |
| | | }).catch(() => { |
| | | |
| | | }); |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import '@/assets/style/variables.scss'; |
| | | .home_title { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | |
| | | .left { |
| | | font-weight: 500; |
| | | font-size: 16px; |
| | | margin-right: 10px; |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .status { |
| | | padding: 0 6px; |
| | | height: 22px; |
| | | line-height: 22px; |
| | | border-radius: 2px; |
| | | border: 1px solid #00BA92; |
| | | color: #00BA92; |
| | | font-weight: 400; |
| | | font-size: 12px; |
| | | color: #00BA92; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .remark { |
| | | background: #E8EBF7; |
| | | border-radius: 2px; |
| | | padding: 10px 20px; |
| | | font-size: 16px; |
| | | margin: 20px 0 |
| | | } |
| | | |
| | | .tabs { |
| | | border-bottom: 1px solid #DFE2E8; |
| | | display: flex; |
| | | margin-bottom: 20px; |
| | | .tab { |
| | | height: 58px; |
| | | line-height: 58px; |
| | | font-size: 16px; |
| | | color: #666666; |
| | | margin-right: 30px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .active { |
| | | font-weight: 500; |
| | | color: $primary-color; |
| | | border-bottom: 2px solid $primary-color; |
| | | } |
| | | } |
| | | |
| | | .line { |
| | | width: 100%; |
| | | margin: 15px 0; |
| | | border-bottom: 1px dashed #eaeaea; |
| | | } |
| | | |
| | | .main { |
| | | .title { |
| | | font-weight: 500; |
| | | font-size: 18px; |
| | | color: $primary-color; |
| | | margin-bottom: 15px; |
| | | } |
| | | |
| | | .list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | /*background: #F7F7F7;*/ |
| | | border-radius: 2px; |
| | | padding: 0 20px; |
| | | margin-bottom: 20px; |
| | | |
| | | .item { |
| | | flex: 25%; |
| | | margin-bottom: 20px; |
| | | |
| | | .la { |
| | | color: #7f7f7f; |
| | | margin-bottom: 5px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <el-form-item label="è®¡è´¹å¨æ" required> |
| | | <el-input v-model="form.date" disabled placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="åºæ¶éé¢" prop="receivableFee"> |
| | | <el-input v-model="form.receivableFee" placeholder="请è¾å
¥" v-trim /> |
| | | <el-form-item label="åºæ¶éé¢" required> |
| | | <el-input v-model="form.receivableFee" disabled placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="宿¶éé¢" prop="actReceivableFee"> |
| | | <el-input v-model="form.actReceivableFee" placeholder="请è¾å
¥" v-trim /> |
| | |
| | | contractId: '', |
| | | startDate: '', |
| | | endDate: '', |
| | | receivableFee: '', |
| | | date: '', |
| | | companyId: '', |
| | | actReceivableFee: '', |
| | |
| | | } |
| | | }) |
| | | const item = file.data[0] |
| | | console.log(item) |
| | | this.form.multifileList.push({ ...item, fileurl: item.imgaddr, name: item.originname, userName: this.userInfo.realname, createTime: this.getDay() }) |
| | | }, |
| | | close() { |
| | |
| | | this.title = title |
| | | this.visible = true |
| | | this.$nextTick(() => { |
| | | this.$refs.form.resetFields(); |
| | | for (const key in this.form) { |
| | | this.form[key] = target[key] |
| | | } |
| | | }) |
| | | console.log(this.form) |
| | | this.getDates(target.companyId) |
| | | } |
| | | } |
| | |
| | | <div class="main_app"> |
| | | <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> |
| | | <div class="mt20"> |
| | | <el-button @click="handleEdit()" v-permissions="['business:ywpatrolline:create']">导åº</el-button> |
| | | <el-button v-permissions="['business:ywpatrolline:create']">导åº</el-button> |
| | | </div> |
| | | <el-table v-loading="loading" :data="list" stripe> |
| | | <el-table-column prop="customerName" label="客æ·åç§°" min-width="100" show-overflow-tooltip /> |
| | |
| | | <span v-if="row.payType === 6">å
¶ä»</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="payDateEnd" label="å
¥è´¦æ¥æ" show-overflow-tooltip /> |
| | | <el-table-column prop="actPayDate" label="å
¥è´¦æ¥æ" show-overflow-tooltip /> |
| | | <el-table-column prop="createDate" label="åå»ºæ¥æ" show-overflow-tooltip /> |
| | | <el-table-column prop="realname" label="å建人" show-overflow-tooltip /> |
| | | <el-table-column label="ç¶æ" min-width="100" fixed="right" show-overflow-tooltip> |
| | |
| | | </el-table-column> |
| | | <el-table-column label="æä½" min-width="190" fixed="right"> |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text">æ¥ç详æ
</el-button> |
| | | <el-button type="text" @click="$refs.details.open('æ¶æ¯æµæ°´è¯¦æ
', row.id)">æ¥ç详æ
</el-button> |
| | | <el-button type="text" @click="closeDW(row.id)" v-if="row.status !== 1">å
³éæµæ°´</el-button> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | <div class="mt20"> |
| | | <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> |
| | | </div> |
| | | <Edit v-if="showEdit" ref="EditRef" @success="getList" @close="showEdit = false" /> |
| | | <!-- 详æ
--> |
| | | <Details ref="details" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Pagination from '@/components/common/Pagination' |
| | | import QueryForm from '@/components/common/QueryForm' |
| | | import Edit from './components/paymentsEdit.vue' |
| | | import Details from './components/details' |
| | | import { fetchList, close } from '@/api/ywContractRevenue' |
| | | export default { |
| | | components: { |
| | | Pagination, |
| | | QueryForm, |
| | | Edit |
| | | Details |
| | | }, |
| | | data() { |
| | | return { |
| | | loading: false, |
| | | showEdit: false, |
| | | pagination: { |
| | | pageSize: 10, |
| | | page: 1, |
| | |
| | | methods: { |
| | | getList(page) { |
| | | const { pagination, filters } = this |
| | | let form = JSON.parse(JSON.stringify(filters)) |
| | | if (form && form.payDate && form.payDate.length > 0) { |
| | | form.payDateStart = form.payDate[0] |
| | | form.payDateEnd = form.payDate[1] |
| | | } |
| | | this.loading = true |
| | | fetchList({ |
| | | model: { |
| | | ...filters |
| | | ...form |
| | | }, |
| | | capacity: pagination.pageSize, |
| | | page: page || pagination.page, |
| | |
| | | }).catch(() => { |
| | | |
| | | }); |
| | | }, |
| | | handleEdit(row) { |
| | | this.showEdit = true |
| | | this.$nextTick(() => { |
| | | this.$refs.EditRef.isShowModal = true |
| | | if (row && row.id) { |
| | | this.$refs.EditRef.getDetail(row.id) |
| | | } |
| | | }) |
| | | |
| | | }, |
| | | handleDel(row) { |
| | | let message = `确认å é¤è¯¥è®°å½å?` |
| | |
| | | <img src="@/assets/images/bg@2x.png" class="main_bg" alt=""> |
| | | <div class="login_wrap"> |
| | | <div class="login_img"> |
| | | <!-- <div class="h2">é宿ä½ä¸å¿</div> --> |
| | | <div class="h3">æºæ
§åºé¦è¿ç»´ç®¡çç³»ç»</div> |
| | | <div class="h3">é宿ä½ä¸å¿</div> |
| | | <!-- <div class="h3">æºæ
§åºé¦è¿ç»´ç®¡çç³»ç»</div>--> |
| | | </div> |
| | | <div class="form_wrap"> |
| | | <div class="tabs"> |
| | |
| | | <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, |