| | |
| | | # VUE_APP_API_URL = 'http://192.168.5.13/gateway_interface' |
| | | |
| | | VUE_APP_API_URL = 'http://192.168.0.162:10010/' |
| | | |
| | | # VUE_APP_API_URL = 'http://192.168.0.136:10010/' |
| | |
| | | }, |
| | | "ansi-styles": { |
| | | "version": "4.3.0", |
| | | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", |
| | | "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", |
| | | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", |
| | | "dev": true, |
| | | "optional": true, |
| | |
| | | }, |
| | | "chalk": { |
| | | "version": "4.1.2", |
| | | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", |
| | | "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", |
| | | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", |
| | | "dev": true, |
| | | "optional": true, |
| | |
| | | }, |
| | | "color-convert": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", |
| | | "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", |
| | | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", |
| | | "dev": true, |
| | | "optional": true, |
| | |
| | | }, |
| | | "color-name": { |
| | | "version": "1.1.4", |
| | | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", |
| | | "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", |
| | | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "has-flag": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", |
| | | "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", |
| | | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "loader-utils": { |
| | | "version": "2.0.4", |
| | | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", |
| | | "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", |
| | | "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", |
| | | "dev": true, |
| | | "optional": true, |
| | |
| | | }, |
| | | "supports-color": { |
| | | "version": "7.2.0", |
| | | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", |
| | | "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", |
| | | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", |
| | | "dev": true, |
| | | "optional": true, |
| | |
| | | }, |
| | | "vue-loader-v16": { |
| | | "version": "npm:vue-loader@16.8.3", |
| | | "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", |
| | | "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz", |
| | | "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", |
| | | "dev": true, |
| | | "optional": true, |
| | |
| | | export function create (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywContractBill/create', data) |
| | | } |
| | | |
| | | // è¿ç»´æ¶æ¯è´¦å·ä¿¡æ¯è¡¨ -- å表 |
| | | export function ywAccountList (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywAccount/list', data) |
| | | } |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | // æ¥è¯¢ |
| | | export function fetchList (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywContractBill/page', data, { |
| | | trim: true |
| | | }) |
| | | } |
| | | |
| | | // å表 |
| | | export function companyList (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/company/list', data) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | // æ¥è¯¢ |
| | | export function fetchList (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywContract/page', data, { |
| | | trim: true |
| | | }) |
| | | } |
| | | |
| | | // å表 |
| | | export function list (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywContract/list', data) |
| | | } |
| | | |
| | | // å建 |
| | | export function create (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywContract/create', data) |
| | | } |
| | | |
| | | // æ ¹æ®åæ°é¢çæè´¦åä¿¡æ¯ |
| | | export function getBillList (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywContract/getBillList', data) |
| | | } |
| | | |
| | | // æ ¹æ®IDæ¥è¯¢ |
| | | export function getById (id) { |
| | | return request.get(`/visitsAdmin/cloudService/business/ywContract/${id}`) |
| | | } |
| | | |
| | | // éç§ |
| | | export function backRent (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywContract/backRent', data) |
| | | } |
| | | |
| | | // æ ¹æ®IDæ¥è¯¢ |
| | | export function getYwContractBillById (id) { |
| | | return request.get(`/visitsAdmin/cloudService/business/ywContractBill/${id}`) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | // æ¥è¯¢ |
| | | export function fetchList (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywCustomer/page', data, { |
| | | trim: true |
| | | }) |
| | | } |
| | | |
| | | // å表 |
| | | export function list (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywCustomer/list', data) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | // æ¥è¯¢ |
| | | export function fetchList (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywContractBill/page', data, { |
| | | trim: true |
| | | }) |
| | | } |
| | | |
| | | // å表 |
| | | export function houseList (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywContractRoom/list', data) |
| | | } |
| | | |
| | | // å表 |
| | | export function getContractRoom (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywContractRoom/getContractRoom', data) |
| | | } |
| | |
| | | trim: true |
| | | }) |
| | | } |
| | | // é¡¹ç®æ |
| | | export function tree (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywProject/tree', data, { |
| | | trim: true |
| | | }) |
| | | } |
| | | // 导åºExcel |
| | | export function exportExcel (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywProject/exportExcel', data, { |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | // æ¥è¯¢ |
| | | export function fetchList (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywContractRevenue/page', data, { |
| | | trim: true |
| | | }) |
| | | } |
| | | |
| | | // å建 |
| | | export function create (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywContractRevenue/create', data) |
| | | } |
| | | |
| | | // å
³éæµæ°´ |
| | | export function close (id) { |
| | | return request.get(`/visitsAdmin/cloudService/business/ywContractRevenue/close?id=${id}`) |
| | | } |
| | |
| | | <template> |
| | | <GlobalWindow title="鿩客æ·" width="1000px" @close="close" :visible.sync="isShowMemberList"> |
| | | <GlobalWindow title="鿩客æ·" width="80%" :withFooter="false" @close="close" :visible.sync="isShowMemberList"> |
| | | <div> |
| | | <div class="df_ac mb20"> |
| | | <el-input v-model="modalSearchValue" placeholder="请è¾å
¥å®¢æ·åç§°" class="w400" @keyup.enter.native="queryList"> |
| | | <!-- <el-button slot="append" icon="el-icon-search" @click="queryList()" /> --> |
| | | </el-input> |
| | | <el-button class="ml10" type="primary" @click="queryList()">æ¥è¯¢</el-button> |
| | | <el-button class="ml10" @click="clear()">éç½®</el-button> |
| | | </div> |
| | | <el-table ref="table" v-loading="listLoading" :data="list" element-loading-text="Loading" border fit |
| | | :header-row-class-name="'table-header'" class="doumee-element-table doumee-element-tableb" |
| | | @row-click="rowClick"> |
| | | |
| | | <el-table-column align="center" label="客æ·ç±»å" prop="cardName" show-overflow-tooltip min-width="80" /> |
| | | <el-table-column align="center" label="客æ·åç§°" show-overflow-tooltip prop="remainingMoney" min-width="80" /> |
| | | <el-table-column align="center" label="è系人" show-overflow-tooltip prop="remainingGiveMoney" min-width="80" /> |
| | | <el-table-column label="èç³»çµè¯" prop="createTime" min-width="100" align="center" /> |
| | | <el-table-column label="ç»ä¸ä¿¡ç¨ä»£ç " prop="createTime" min-width="120" align="center" /> |
| | | <el-table-column label="è¥ä¸æé" prop="createTime" min-width="100" align="center" /> |
| | | <el-table-column label="é»è®¤å票类å" prop="createTime" min-width="100" align="center" /> |
| | | <el-table-column align="center" label="客æ·ç±»å" show-overflow-tooltip min-width="80"> |
| | | <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 align="center" label="客æ·åç§°" show-overflow-tooltip prop="name" min-width="80" /> |
| | | <el-table-column align="center" label="è系人" show-overflow-tooltip prop="memberName" min-width="80" /> |
| | | <el-table-column label="èç³»çµè¯" prop="memberPhone" min-width="100" align="center" /> |
| | | <el-table-column label="ç»ä¸ä¿¡ç¨ä»£ç " prop="creditCard" min-width="120" align="center"> |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.type === 1"> |
| | | <span v-if="row.fpType === 0">å¢å¼ç¨æ®éå票</span> |
| | | <span v-else-if="row.fpType === 1">å¢å¼ç¨ä¸ç¨å票</span> |
| | | <span v-else>-</span> |
| | | </div> |
| | | <div v-else>-</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="è¥ä¸æé" prop="validity" min-width="100" align="center"> |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.type === 1"> |
| | | <span>{{row.validity || '-'}}</span> |
| | | </div> |
| | | <div v-else>-</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="é»è®¤å票类å" min-width="100" align="center"> |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.type === 1"> |
| | | <span v-if="row.fpType === 0">å¢å¼ç¨æ®éå票</span> |
| | | <span v-else-if="row.fpType === 1">å¢å¼ç¨ä¸ç¨å票</span> |
| | | <span v-else>-</span> |
| | | </div> |
| | | <div v-else>-</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" min-width="100" align="center"> |
| | | <template slot-scope="{row}"> |
| | | <span class="primaryColor cu" @click="selectItem(row)">éæ©</span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> |
| | | </div> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { memberList, memberDetailInfo } from '@/api' |
| | | import { fetchList } from '@/api/customer' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import dayjs from 'dayjs' |
| | | // import { debounce } from '@/utils/debounce' |
| | | |
| | | import Pagination from '@/components/common/Pagination' |
| | | export default { |
| | | components: { |
| | |
| | | isShowChooseBtn: { |
| | | type: Boolean, |
| | | default: () => true |
| | | }, |
| | | type: { // (10: ååææ£ 20: è®¢åºææ£ 30: é¨ç¥¨ææ£ 40: å¥é¤ææ£ 50ï¼æ´»å¨ææ£ 60ï¼è¯¾ç¨ææ£) |
| | | type: String, |
| | | default: 'default' |
| | | } |
| | | }, |
| | | data() { |
| | | data () { |
| | | return { |
| | | searchValue: '', |
| | | isShowMemberList: false, |
| | | modalSearchValue: '', |
| | | list: [], |
| | | totalCount: 0, |
| | | pagination: { |
| | | pageSize: 10, |
| | | page: 1, |
| | | total: 0 |
| | | }, |
| | | listLoading: false, |
| | | |
| | | listLoading: false |
| | | } |
| | | }, |
| | | created() { |
| | | // (10: ååææ£ 20: è®¢åºææ£ 30: é¨ç¥¨ææ£ 40: å¥é¤ææ£ 50ï¼æ´»å¨ææ£ 60ï¼è¯¾ç¨ææ£) |
| | | }, |
| | | methods: { |
| | | clearSearch() { |
| | | this.searchValue = '' |
| | | open () { |
| | | this.modalSearchValue = '' |
| | | this.filters = {} |
| | | this.pagination.page = 1 |
| | | this.pagination.pageSize = 10 |
| | | this.isShowMemberList = true |
| | | this.getList() |
| | | }, |
| | | handleMemberSelect(item) { |
| | | memberDetailInfo({ param: { memberId: item.id } }).then((res) => { |
| | | if (res.errorCode !== '000000') return |
| | | const obj = res.record || {} |
| | | obj.searchValue = this.searchValue |
| | | this.$emit('select', obj) |
| | | }) |
| | | }, |
| | | clear() { |
| | | this.searchValue = '' |
| | | setTimeout(() => { |
| | | this.$refs.searchValueRef.focus() |
| | | }) |
| | | this.$emit('clear') |
| | | }, |
| | | rowClick(item) { |
| | | memberDetailInfo({ param: { memberId: item.id } }).then((res) => { |
| | | if (res.errorCode !== '000000') return |
| | | const obj = res.record || {} |
| | | this.searchValue = obj.nickName |
| | | obj.searchValue = this.modalSearchValue |
| | | if (item.phone) { |
| | | this.searchValue += '-' + item.phone |
| | | } |
| | | if (item.number) { |
| | | this.searchValue += 'ï¼' + item.number + 'ï¼' |
| | | } |
| | | this.$emit('select', obj) |
| | | }) |
| | | this.isShowMemberList = false |
| | | }, |
| | | getList() { |
| | | getList () { |
| | | const { pagination, modalSearchValue } = this |
| | | this.listLoading = true |
| | | memberList({ pagination, param: { keyword: modalSearchValue } }).then((res) => { |
| | | fetchList({ |
| | | capacity: pagination.pageSize, |
| | | page: pagination.page, |
| | | model: { |
| | | name: modalSearchValue |
| | | } |
| | | }).then((res) => { |
| | | this.listLoading = false |
| | | if (res.errorCode !== '000000') return |
| | | this.list = res.recordList |
| | | this.list = res.records |
| | | this.pagination.total = res.total || 0 |
| | | this.totalCount = res.totalCount |
| | | }, () => { |
| | | this.listLoading = false |
| | | }) |
| | | }, |
| | | openModal() { |
| | | this.modalSearchValue = '' |
| | | // this.queryList() |
| | | this.isShowMemberList = true |
| | | selectItem (row) { |
| | | this.$emit('select', row) |
| | | this.isShowMemberList = false |
| | | }, |
| | | queryList() { |
| | | queryList () { |
| | | this.pagination.page = 1 |
| | | this.getList() |
| | | }, |
| | | currentChange(val) { |
| | | currentChange (val) { |
| | | this.pagination.page = val |
| | | this.getList() |
| | | }, |
| | | clear() { |
| | | clear () { |
| | | this.filters = {} |
| | | this.pagination.pageSize = 10 |
| | | this.pagination.page = 1 |
| | | this.getList() |
| | | }, |
| | | handleSizeChange(capacity) { |
| | | handleSizeChange (capacity) { |
| | | this.pagination.pageSize = capacity |
| | | this.getList() |
| | | }, |
| | | close() { |
| | | close () { |
| | | this.isShowMemberList = false |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | width="100%" |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | :confirm-working="isWorking" |
| | | @close="close" |
| | | @confirm="confirm"> |
| | | <div class="main"> |
| | | <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="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> |
| | | </div> |
| | | </div> |
| | | <div class="list"> |
| | | <el-form-item label="å
³èåå" prop="contractCode"> |
| | | <el-input v-model="form.contractCode" disabled placeholder="请è¾å
¥åºæ¶éé¢" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="仿¬¾æ¹" prop="renterName"> |
| | | <el-input v-model="form.renterName" disabled placeholder="请è¾å
¥åºæ¶éé¢" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="è´¹ç¨ç±»å" prop="costType"> |
| | | <el-select v-model="form.costType" placeholder="è¯·éæ©"> |
| | | <el-option :value="0" label="ç§èµè´¹"></el-option> |
| | | <el-option :value="1" label="ç©ä¸è´¹"></el-option> |
| | | <el-option :value="4" label="æ°´çµè´¹"></el-option> |
| | | <el-option :value="5" label="æé¡¹è´¹"></el-option> |
| | | <el-option :value="6" label="å
¶ä»"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="è®¡è´¹å¨æ" prop="date" v-if="form.feeType !== 1"> |
| | | <el-date-picker |
| | | type="daterange" |
| | | range-separator="è³" |
| | | v-model="form.date" |
| | | @change="changeDate" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ" |
| | | value-format="yyyy-MM-dd" |
| | | placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="åºæ¶éé¢" prop="receivableFee"> |
| | | <el-input v-model="form.receivableFee" placeholder="请è¾å
¥åºæ¶éé¢" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="åºæ¶æ¥æ" prop="planPayDate"> |
| | | <el-date-picker type="date" v-model="form.planPayDate" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="æå±å
¬å¸" prop="companyId"> |
| | | <el-select v-model="form.companyId" placeholder="è¯·éæ©" clearable> |
| | | <el-option |
| | | v-for="(item, index) in comparyList" |
| | | :key="index" |
| | | :value="item.id" |
| | | :label="item.name" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item style="width: 100%;" label="è´¦å夿³¨" prop="remark"> |
| | | <el-input type="textarea" :rows="5" v-model="form.remark" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import { companyList } from '@/api/company' |
| | | import { mapState } from 'vuex' |
| | | export default { |
| | | name: 'addCollectionBill', |
| | | components: { |
| | | GlobalWindow |
| | | }, |
| | | computed: { |
| | | ...mapState(['userInfo']) |
| | | }, |
| | | extends: BaseOpera, |
| | | data () { |
| | | const validateArr = (rule, value, callback) => { |
| | | if (value.length === 0 || !value) { |
| | | callback(new Error('è¯·éæ©')); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | return { |
| | | form: { |
| | | contractCode: '', |
| | | contractId: '', |
| | | costType: '', |
| | | renterName: '', |
| | | renterId: '', |
| | | remark: '', |
| | | startDate: '', |
| | | endDate: '', |
| | | price: 0, |
| | | receivableFeeCopy: '', |
| | | receivableFee: '', |
| | | feeType: 0, |
| | | planPayDate: '', |
| | | billType: 0, |
| | | billTypeCopy: 0, |
| | | date: [] |
| | | }, |
| | | rules: { |
| | | contractCode: [ |
| | | { required: true, message: '请è¾å
¥', trigger: 'blur' } |
| | | ], |
| | | renterName: [ |
| | | { required: true, message: '请è¾å
¥', trigger: 'blur' } |
| | | ], |
| | | costType: [ |
| | | { required: true, message: 'è¯·éæ©', trigger: 'blur' } |
| | | ], |
| | | date: [ |
| | | { validator: validateArr, trigger: 'blur' } |
| | | ], |
| | | receivableFee: [ |
| | | { required: true, message: '请è¾å
¥', trigger: 'blur' } |
| | | ], |
| | | planPayDate: [ |
| | | { required: true, message: 'è¯·éæ©', trigger: 'blur' } |
| | | ], |
| | | companyId: [ |
| | | { required: true, message: 'è¯·éæ©', trigger: 'blur' } |
| | | ] |
| | | }, |
| | | comparyList: [] |
| | | } |
| | | }, |
| | | methods: { |
| | | open (title, target) { |
| | | this.title = title |
| | | this.getCompany() |
| | | this.visible = true |
| | | // æ°å»º |
| | | if (target == null) { |
| | | this.$nextTick(() => { |
| | | this.$refs.form.resetFields() |
| | | this.form[this.configData['field.id']] = null |
| | | }) |
| | | return |
| | | } |
| | | // ç¼è¾ |
| | | this.$nextTick(() => { |
| | | for (const key in this.form) { |
| | | this.form[key] = target[key] |
| | | } |
| | | }) |
| | | }, |
| | | getCompany () { |
| | | companyList({ type: 2 }) |
| | | .then(res => { |
| | | this.comparyList = res |
| | | }) |
| | | }, |
| | | timeTabClick (val) { |
| | | this.form.feeType = val |
| | | if (val === 1) { |
| | | this.form.startDate = '' |
| | | this.form.endDate = '' |
| | | this.date = [] |
| | | } |
| | | }, |
| | | changeDate (e) { |
| | | if (!e || e.length === 0) { |
| | | this.form.startDate = '' |
| | | this.form.endDate = '' |
| | | } else { |
| | | this.form.startDate = e[0] |
| | | this.form.endDate = e[1] |
| | | } |
| | | }, |
| | | confirm () { |
| | | this.$refs.form.validate((valid) => { |
| | | if (!valid) return |
| | | let obj = JSON.parse(JSON.stringify(this.form)) |
| | | obj.receivableFeeCopy = Number(obj.receivableFee) |
| | | if (obj.feeType === 0) { |
| | | obj.startDate = obj.startDate + ' 00:00:00' |
| | | obj.endDate = obj.endDate + ' 00:00:00' |
| | | } else { |
| | | obj.startDate = '' |
| | | obj.endDate = '' |
| | | } |
| | | obj.price = Number(obj.receivableFee) |
| | | obj.rowType = 1 |
| | | obj.actReceivableFee = 0 |
| | | this.$emit('getVal', obj) |
| | | this.visible = false |
| | | }) |
| | | }, |
| | | close () { |
| | | this.$emit('close') |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import '@/assets/style/variables.scss'; |
| | | |
| | | |
| | | .cost_tabs { |
| | | justify-content: flex-start; |
| | | border: none; |
| | | |
| | | .tab { |
| | | height: 36px; |
| | | line-height: 36px; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | |
| | | .main { |
| | | display: flex; |
| | | margin-bottom: 20px; |
| | | |
| | | .main_content { |
| | | flex: 1; |
| | | margin-right: 20px; |
| | | |
| | | .head { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | |
| | | .tabs { |
| | | display: flex; |
| | | margin-bottom: 20px; |
| | | align-items: center; |
| | | justify-content: center; |
| | | |
| | | .tab { |
| | | height: 14px; |
| | | line-height: 14px; |
| | | cursor: pointer; |
| | | border: 1px solid #ebebeb; |
| | | padding: 12px 24px; |
| | | } |
| | | |
| | | .active { |
| | | font-weight: 500; |
| | | color: $primary-color; |
| | | border: 1px solid $primary-color; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | |
| | | .el-form-item { |
| | | width: 33.33%; |
| | | box-sizing: border-box; |
| | | padding: 0 12px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .main_house { |
| | | width: 320px; |
| | | padding: 24px 12px; |
| | | border: 1px solid #c3c6cd; |
| | | border-radius: 2px; |
| | | |
| | | .title { |
| | | font-size: 16px; |
| | | font-weight: 500; |
| | | margin-bottom: 30px; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | .total { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | height: 32px; |
| | | background-color: #e7e9f5; |
| | | |
| | | span { |
| | | width: 160px; |
| | | text-align: center; |
| | | } |
| | | } |
| | | |
| | | .file_wrap { |
| | | padding: 20px 16px; |
| | | border: 1px solid #c3c6cd; |
| | | border-radius: 2px; |
| | | |
| | | .head { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | } |
| | | |
| | | .m_title { |
| | | font-weight: 500; |
| | | font-size: 14px; |
| | | margin-bottom: 15px; |
| | | margin-top: 10px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | width="100%" |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | :confirm-working="isWorking" |
| | | @close="close" |
| | | @confirm="confirm"> |
| | | <div class="main"> |
| | | <div class="main_content"> |
| | | <el-form :model="form" label-position="top" ref="form" :rules="rules"> |
| | | <div class="head"> |
| | | <div class="m_title">åºç¡ä¿¡æ¯</div> |
| | | </div> |
| | | <div class="list"> |
| | | <el-form-item label="å
³èåå" prop="contractCode"> |
| | | <el-input v-model="form.contractCode" disabled placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶æ¬¾æ¹" prop="customerName"> |
| | | <el-input v-model="form.renterName" disabled placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="è´¹ç¨ç±»å" prop="costType"> |
| | | <el-select v-model="form.costType" placeholder="è¯·éæ©"> |
| | | <el-option :value="0" label="ç§èµè´¹"></el-option> |
| | | <el-option :value="1" label="ç©ä¸è´¹"></el-option> |
| | | <el-option :value="4" label="æ°´çµè´¹"></el-option> |
| | | <el-option :value="5" label="æé¡¹è´¹"></el-option> |
| | | <el-option :value="6" label="å
¶ä»"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="è®¡è´¹å¨æ" prop="date"> |
| | | <el-date-picker |
| | | type="daterange" |
| | | range-separator="è³" |
| | | v-model="form.date" |
| | | @change="changeDate" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ" |
| | | value-format="yyyy-MM-dd" |
| | | placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="åºä»éé¢" prop="receivableFee"> |
| | | <el-input v-model="form.receivableFee" placeholder="请è¾å
¥åºæ¶éé¢" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="åºä»æ¥æ" prop="planPayDate"> |
| | | <el-date-picker type="date" v-model="form.planPayDate" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="æå±å
¬å¸" prop="companyId"> |
| | | <el-select v-model="form.companyId" placeholder="è¯·éæ©" clearable> |
| | | <el-option |
| | | v-for="(item, index) in comparyList" |
| | | :key="index" |
| | | :value="item.id" |
| | | :label="item.name" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item style="width: 100%;" label="è´¦å夿³¨" prop="remark"> |
| | | <el-input type="textarea" :rows="5" v-model="form.remark" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import { companyList } from '@/api/company' |
| | | import { mapState } from 'vuex' |
| | | export default { |
| | | name: 'addPaymentBill', |
| | | components: { |
| | | GlobalWindow |
| | | }, |
| | | computed: { |
| | | ...mapState(['userInfo']) |
| | | }, |
| | | extends: BaseOpera, |
| | | data () { |
| | | const validateArr = (rule, value, callback) => { |
| | | if (value.length === 0 || !value) { |
| | | callback(new Error('è¯·éæ©')); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | return { |
| | | form: { |
| | | contractCode: '', |
| | | contractId: '', |
| | | costType: '', |
| | | renterName: '', |
| | | renterId: '', |
| | | remark: '', |
| | | startDate: '', |
| | | endDate: '', |
| | | price: 0, |
| | | receivableFeeCopy: '', |
| | | receivableFee: '', |
| | | planPayDate: '', |
| | | billType: 1, |
| | | billTypeCopy: 1, |
| | | date: [] |
| | | }, |
| | | rules: { |
| | | contractCode: [ |
| | | { required: true, message: '请è¾å
¥', trigger: 'blur' } |
| | | ], |
| | | renterName: [ |
| | | { required: true, message: '请è¾å
¥', trigger: 'blur' } |
| | | ], |
| | | costType: [ |
| | | { required: true, message: 'è¯·éæ©', trigger: 'blur' } |
| | | ], |
| | | date: [ |
| | | { validator: validateArr, trigger: 'blur' } |
| | | ], |
| | | receivableFee: [ |
| | | { required: true, message: '请è¾å
¥', trigger: 'blur' } |
| | | ], |
| | | planPayDate: [ |
| | | { required: true, message: 'è¯·éæ©', trigger: 'blur' } |
| | | ], |
| | | companyId: [ |
| | | { required: true, message: 'è¯·éæ©', trigger: 'blur' } |
| | | ] |
| | | }, |
| | | comparyList: [] |
| | | } |
| | | }, |
| | | methods: { |
| | | open (title, target) { |
| | | this.title = title |
| | | this.getCompanyList() |
| | | this.visible = true |
| | | // æ°å»º |
| | | if (target == null) { |
| | | this.$nextTick(() => { |
| | | this.$refs.form.resetFields() |
| | | this.form[this.configData['field.id']] = null |
| | | }) |
| | | return |
| | | } |
| | | // ç¼è¾ |
| | | this.$nextTick(() => { |
| | | for (const key in this.form) { |
| | | this.form[key] = target[key] |
| | | } |
| | | }) |
| | | }, |
| | | getCompanyList () { |
| | | companyList({ type: 2 }) |
| | | .then(res => { |
| | | this.comparyList = res |
| | | }) |
| | | }, |
| | | changeDate (e) { |
| | | if (!e || e.length === 0) { |
| | | this.form.startDate = '' |
| | | this.form.endDate = '' |
| | | } else { |
| | | this.form.startDate = e[0] |
| | | this.form.endDate = e[1] |
| | | } |
| | | }, |
| | | confirm () { |
| | | this.$refs.form.validate((valid) => { |
| | | if (!valid) return |
| | | let obj = JSON.parse(JSON.stringify(this.form)) |
| | | obj.receivableFeeCopy = Number(obj.receivableFee) |
| | | obj.startDate = obj.startDate + ' 00:00:00' |
| | | obj.endDate = obj.endDate + ' 00:00:00' |
| | | obj.price = Number(obj.receivableFee) |
| | | obj.rowType = 1 |
| | | obj.actReceivableFee = 0 |
| | | this.$emit('getVal', obj) |
| | | this.visible = false |
| | | }) |
| | | }, |
| | | close () { |
| | | this.$emit('close') |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import '@/assets/style/variables.scss'; |
| | | |
| | | |
| | | .cost_tabs { |
| | | justify-content: flex-start; |
| | | border: none; |
| | | |
| | | .tab { |
| | | height: 36px; |
| | | line-height: 36px; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | |
| | | .main { |
| | | display: flex; |
| | | margin-bottom: 20px; |
| | | |
| | | .main_content { |
| | | flex: 1; |
| | | margin-right: 20px; |
| | | |
| | | .head { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | |
| | | .tabs { |
| | | display: flex; |
| | | margin-bottom: 20px; |
| | | align-items: center; |
| | | justify-content: center; |
| | | |
| | | .tab { |
| | | height: 14px; |
| | | line-height: 14px; |
| | | cursor: pointer; |
| | | border: 1px solid #ebebeb; |
| | | padding: 12px 24px; |
| | | } |
| | | |
| | | .active { |
| | | font-weight: 500; |
| | | color: $primary-color; |
| | | border: 1px solid $primary-color; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | |
| | | .el-form-item { |
| | | width: 33.33%; |
| | | box-sizing: border-box; |
| | | padding: 0 12px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .main_house { |
| | | width: 320px; |
| | | padding: 24px 12px; |
| | | border: 1px solid #c3c6cd; |
| | | border-radius: 2px; |
| | | |
| | | .title { |
| | | font-size: 16px; |
| | | font-weight: 500; |
| | | margin-bottom: 30px; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | .total { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | height: 32px; |
| | | background-color: #e7e9f5; |
| | | |
| | | span { |
| | | width: 160px; |
| | | text-align: center; |
| | | } |
| | | } |
| | | |
| | | .file_wrap { |
| | | padding: 20px 16px; |
| | | border: 1px solid #c3c6cd; |
| | | border-radius: 2px; |
| | | |
| | | .head { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | } |
| | | |
| | | .m_title { |
| | | font-weight: 500; |
| | | font-size: 14px; |
| | | margin-bottom: 15px; |
| | | margin-top: 10px; |
| | | } |
| | | </style> |
| | |
| | | export const rules = { |
| | | name: [{ required: true, message: '请è¾å
¥' }] |
| | | } |
| | | type: [{ required: true, message: 'è¯·éæ©' }], |
| | | code: [{ required: true, message: '请è¾å
¥' }], |
| | | userId: [{ required: true, message: 'è¯·éæ©' }], |
| | | signDate: [{ required: true, message: 'è¯·éæ©' }], |
| | | startDate: [{ required: true, message: 'è¯·éæ©' }], |
| | | endDate: [{ required: true, message: 'è¯·éæ©' }], |
| | | projectId: [{ required: true, message: 'è¯·éæ©' }], |
| | | roundedUp: [{ required: true, message: 'è¯·éæ©' }], |
| | | companyId: [{ required: true, message: 'è¯·éæ©' }], |
| | | renterName: [{ required: true, message: 'è¯·éæ©' }], |
| | | memberName: [{ required: true, message: 'è¯·éæ©' }], |
| | | zlDeposit: [{ required: true, message: '请è¾å
¥' }], |
| | | zlPayType: [{ required: true, message: 'è¯·éæ©' }], |
| | | zlDate: [{ required: true, message: 'è¯·éæ©' }], |
| | | wyDeposit: [{ required: true, message: '请è¾å
¥' }], |
| | | wyPayType: [{ required: true, message: 'è¯·éæ©' }], |
| | | wyDate: [{ required: true, message: 'è¯·éæ©' }] |
| | | } |
| | |
| | | <template> |
| | | <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @close="close" |
| | | <GlobalWindow |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | :confirm-working="isWorking" |
| | | @close="close" |
| | | @confirm="confirm"> |
| | | <div class="home_title"> |
| | | <div class="home_title" v-if="info"> |
| | | <div class="left"> |
| | | <span class="mr10">åä½åç§°ï¼xxx</span> |
| | | <span class="status">status</span> |
| | | <span class="mr10">åä½åç§°ï¼{{info.renterName}}</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="success" v-if="info.status === 2">已尿</el-tag> |
| | | <el-tag type="success" v-if="info.status === 3">å·²éç§</el-tag> |
| | | </div> |
| | | <el-button plain type="danger">éç§</el-button> |
| | | <el-button plain type="danger" v-if="[0, 1, 2].includes(info.status)" @click="refund">éç§</el-button> |
| | | </div> |
| | | <div class="remark">ååæè¦ï¼xxxx</div> |
| | | <div class="remark" v-if="info">{{info.remark}}</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 class="tab" :class="{ active: activeTabs == 2 }" @click="tabsClick(2)">æä½è®°å½</div> |
| | | <div class="tab" :class="{ active: activeTabs === 0 }" @click="tabsClick(0)">ååä¿¡æ¯</div> |
| | | <div class="tab" :class="{ active: activeTabs === 1 }" @click="tabsClick(1)">å
³èè´¦å</div> |
| | | <div class="tab" :class="{ active: activeTabs === 2 }" @click="tabsClick(2)">æä½è®°å½</div> |
| | | </div> |
| | | <div class="main"> |
| | | <div class="main" v-if="activeTabs === 0 && info"> |
| | | <div class="title">åºç¡ä¿¡æ¯</div> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <div class="la">ååç¼å·</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | <div class="val">{{ info.code }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">ç»å人</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | <div class="val">{{ info.userName }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">å建人</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | <div class="val">{{ info.creatorName }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">ååç§èµæ°</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | <div class="val">{{ info.totalArea }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">æå±å
¬å¸</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | <div class="val">{{ info.companyName }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">ç¾è®¢æ¥æ</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | <div class="val">{{ info.signDate }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">å¼å§æ¥æ</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | <div class="val">{{ info.startDate }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">ç»ææ¥æ</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | <div class="val">{{ info.endDate }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">æå±é¡¹ç®</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | <div class="val">{{ info.projectName }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">ç»æåæ´(åèäºå
¥)</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | <div class="val">{{ info.roundedUp === 1 ? 'æ¯' : 'å¦' }}</div> |
| | | </div> |
| | | </div> |
| | | <div class="title">æ¿æºä¿¡æ¯</div> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <div class="la">项ç®åç§°</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">楼å®åç§°</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">楼å±/æ¿å·</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">é¢ç§¯</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | </div> |
| | | <el-table :data="info.roomList" stripe> |
| | | <el-table-column prop="projectName" label="项ç®åç§°" show-overflow-tooltip /> |
| | | <el-table-column prop="buildingName" label="楼å®åç§°" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="楼å±/æ¿å·" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | {{row.floorName}}/{{row.code}} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="area" label="é¢ç§¯" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | {{row.area}}ã¡ |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <div class="title">ç§å®¢ä¿¡æ¯</div> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <div class="la">ç§å®¢</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | <div class="val">{{ info.renterName }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">ç»å人</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | <div class="val">{{ info.userName }}</div> |
| | | </div> |
| | | </div> |
| | | <div class="title">ç§èµæ¡æ¬¾</div> |
| | | <div class="list"> |
| | | <div class="title" v-if="info.type === 2 || info.type === 0">ç§èµæ¡æ¬¾</div> |
| | | <div class="list" style="background: #F7F7F7; padding: 15px 20px;" v-if="info.type === 2 || info.type === 0"> |
| | | <div class="item"> |
| | | <div class="la">æ¼ééé¢</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | <div class="val">{{ info.zlDeposit }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">仿¬¾æ¹å¼</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | <div class="val" v-if="info.zlPayType === 0">䏿¬¡æ§ä»æ¬¾</div> |
| | | <div class="val" v-if="info.zlPayType === 1">æ¯ä¸ä¸ªæä¸ä»</div> |
| | | <div class="val" v-if="info.zlPayType === 2">å
个æä¸ä»</div> |
| | | <div class="val" v-if="info.zlPayType === 3">ä¸å¹´ä¸ä»</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">å
ç§æ</div> |
| | | <div class="val">{{ info.aaa }}</div> |
| | | <div class="val">{{ info.zlFreeStartDate }} ~ {{ info.zlFreeEndDate }}</div> |
| | | </div> |
| | | </div> |
| | | <el-table :data="info.list" stripe> |
| | | <el-table-column prop="" label="å¼å§æ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="ç»ææ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="åååä»·" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="仿¬¾æå天æ°" min-width="100" show-overflow-tooltip /> |
| | | <el-table :data="info.zlDetailList" stripe style="margin-bottom: 20px;" v-if="info.type === 2 || info.type === 0"> |
| | | <el-table-column prop="startDate" label="å¼å§æ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="endDate" label="ç»ææ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="price" label="åååä»·" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="advanceDays" label="仿¬¾æå天æ°" min-width="100" show-overflow-tooltip /> |
| | | </el-table> |
| | | <div class="title" v-if="info.type === 1 || info.type === 0">ç©ä¸è´¹æ¡æ¬¾</div> |
| | | <div class="list" style="background: #F7F7F7; padding: 15px 20px;" v-if="info.type === 1 || info.type === 0"> |
| | | <div class="item"> |
| | | <div class="la">æ¼ééé¢</div> |
| | | <div class="val">{{ info.wyDeposit }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">仿¬¾æ¹å¼</div> |
| | | <div class="val" v-if="info.wyPayType === 0">䏿¬¡æ§ä»æ¬¾</div> |
| | | <div class="val" v-if="info.wyPayType === 1">æ¯ä¸ä¸ªæä¸ä»</div> |
| | | <div class="val" v-if="info.wyPayType === 2">å
个æä¸ä»</div> |
| | | <div class="val" v-if="info.wyPayType === 3">ä¸å¹´ä¸ä»</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">å
ç§æ</div> |
| | | <div class="val">{{ info.wyFreeStartDate }} ~ {{ info.wyFreeEndDate }}</div> |
| | | </div> |
| | | </div> |
| | | <el-table :data="info.wyDetailList" stripe style="margin-bottom: 20px;" v-if="info.type === 1 || info.type === 0"> |
| | | <el-table-column prop="startDate" label="å¼å§æ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="endDate" label="ç»ææ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="price" label="åååä»·" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="advanceDays" label="仿¬¾æå天æ°" min-width="100" show-overflow-tooltip /> |
| | | </el-table> |
| | | <div class="title">ååéä»¶</div> |
| | | <div class="list"> |
| | | <el-table :data="info.fileList" stripe> |
| | | <el-table-column prop="name" label="éä»¶åç§°" show-overflow-tooltip /> |
| | | <el-table-column prop="userName" label="æä½äºº" show-overflow-tooltip /> |
| | | <el-table-column prop="createDate" label="æä½æ¶é´" show-overflow-tooltip /> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <div class="main" v-if="activeTabs === 1 && info"> |
| | | <el-radio-group v-model="type" @change="changeType" style="margin-bottom: 20px;"> |
| | | <el-radio-button :label="0">æ¶æ¬¾è´¦å</el-radio-button> |
| | | <el-radio-button :label="1">仿¬¾è´¦å</el-radio-button> |
| | | </el-radio-group> |
| | | <el-table |
| | | :data="tableData" |
| | | border |
| | | v-loading="loading" |
| | | 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="totleFee" |
| | | label="è´¦åéé¢"> |
| | | </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}"> |
| | | <span v-if="row.type === 0">ååè´¦å</span> |
| | | <span v-if="row.type === 1">èªå»ºè´¦å</span> |
| | | </template> |
| | | </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 |
| | | label="æ¯å¦é¾æ"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.isOverdue === 0">å¦</span> |
| | | <span v-if="row.isOverdue === 1">æ¯</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | fixed="right" |
| | | label="ç¶æ"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.payStatus === 0">å¾
æ¶æ¬¾</span> |
| | | <span v-if="row.payStatus === 1">å·²ç»æ¸
</span> |
| | | <span v-if="row.payStatus === 2">é¨åç»æ¸
</span> |
| | | <span v-if="row.payStatus === 3">å¾
仿¬¾</span> |
| | | <span v-if="row.payStatus === 4">å¾
鿬¾</span> |
| | | <span v-if="row.payStatus === 5">å·²å
³é</span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange" |
| | | :current-page="page" |
| | | :page-sizes="[10, 15, 20, 25]" |
| | | :page-size="pageSize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="total"> |
| | | </el-pagination> |
| | | </div> |
| | | <div class="main" v-if="activeTabs === 2 && info"> |
| | | <div class="title">æä½è®°å½</div> |
| | | <el-table |
| | | :data="info.logList" |
| | | border |
| | | style="width: 100%"> |
| | | <el-table-column |
| | | prop="param1" |
| | | label="æä½äºº"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="createDate" |
| | | label="æä½æ¶é´"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æä½"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.objType === 0">å·¥åå建</span> |
| | | <span v-if="row.objType === 1">ææ´¾</span> |
| | | <span v-if="row.objType === 2">å¤ç</span> |
| | | <span v-if="row.objType === 3">ååå建</span> |
| | | <span v-if="row.objType === 4">åååæ´</span> |
| | | <span v-if="row.objType === 5">ååéç§</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="content" |
| | | label="æä½å
容"> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <!-- éç§ --> |
| | | <TerminateLease ref="terminateLease" @success="getData" /> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import TerminateLease from './terminateLease' |
| | | import { getById } from '@/api/contract' |
| | | import { fetchList } from '@/api/bill' |
| | | export default { |
| | | components: { |
| | | GlobalWindow |
| | | GlobalWindow, |
| | | TerminateLease |
| | | }, |
| | | extends: BaseOpera, |
| | | data() { |
| | | return { |
| | | id: '', |
| | | visible: false, |
| | | activeTabs: '', |
| | | info: {} |
| | | activeTabs: 0, |
| | | type: 0, |
| | | info: null, |
| | | pageSize: 10, |
| | | page: 1, |
| | | total: 0, |
| | | tableData: [], |
| | | |
| | | loading: false |
| | | } |
| | | }, |
| | | methods: { |
| | | open (title, id) { |
| | | this.title = title |
| | | this.activeTabs = 0 |
| | | this.type = 0 |
| | | this.page = 1 |
| | | this.pageSize = 10 |
| | | this.tableData = [] |
| | | this.id = id |
| | | this.getData() |
| | | }, |
| | | getData () { |
| | | getById(this.id) |
| | | .then(res => { |
| | | this.info = res |
| | | this.getList() |
| | | this.visible = true |
| | | }) |
| | | }, |
| | | refund () { |
| | | this.$refs.terminateLease.open('æ°å»ºéç§åè®®', JSON.parse(JSON.stringify(this.info))) |
| | | }, |
| | | getList () { |
| | | this.loading = true |
| | | fetchList({ |
| | | capacity: this.pageSize, |
| | | page: this.page, |
| | | model: { |
| | | billType: this.type, |
| | | contractId: this.info.id |
| | | } |
| | | }).then(res => { |
| | | this.loading = false |
| | | this.tableData = res.records |
| | | this.total = res.total |
| | | }) |
| | | }, |
| | | changeType (e) { |
| | | console.log(e) |
| | | this.type = e |
| | | this.page = 1 |
| | | this.pageSize = 10 |
| | | this.tableData = [] |
| | | this.getList() |
| | | }, |
| | | tabsClick(val) { |
| | | this.activeTabs = val |
| | | }, |
| | | getDetail() { |
| | | |
| | | }, |
| | | handleSizeChange (e) { |
| | | this.pageSize = e |
| | | this.getList() |
| | | }, |
| | | handleCurrentChange (e) { |
| | | this.page = e |
| | | this.getList() |
| | | } |
| | | } |
| | | } |
| | |
| | | .list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | background: #F7F7F7; |
| | | /*background: #F7F7F7;*/ |
| | | border-radius: 2px; |
| | | padding: 15px 20px; |
| | | /*padding: 15px 20px;*/ |
| | | margin-bottom: 20px; |
| | | |
| | | .item { |
| | |
| | | |
| | | .la { |
| | | color: #7f7f7f; |
| | | margin-top: 2px; |
| | | margin-bottom: 10px; |
| | | } |
| | | } |
| | | } |
| | |
| | | <template> |
| | | <GlobalWindow width="1000px" :title="title" :visible.sync="showModal" :confirm-working="isWorking" @close="close" |
| | | <GlobalWindow width="100%" :title="title" :visible.sync="visible" :confirm-working="isWorking" @close="close" |
| | | @confirm="confirm"> |
| | | <div class="tabs"> |
| | | <div class="tab" :class="{ active: activeTabs == 0 }" @click="tabsClick(0)">1ãåºæ¬ä¿¡æ¯</div> |
| | | <div class="tab" :class="{ active: activeTabs == 1 }" @click="tabsClick(1)">2ãè´¹ç¨æ¡æ¬¾</div> |
| | | <div class="tab" :class="{ active: activeTabs === 0 }" @click="tabsClick(0)">1ãåºæ¬ä¿¡æ¯</div> |
| | | <div class="tab" :class="{ active: activeTabs === 1 }" @click="tabsClick(1)">2ãè´¹ç¨æ¡æ¬¾</div> |
| | | </div> |
| | | <template v-if="activeTabs == 0"> |
| | | <div v-show="activeTabs === 0"> |
| | | <div class="main"> |
| | | <div class="main_content"> |
| | | <el-form :model="param" ref="paramRef" :rules="rules"> |
| | | <el-form :model="form" ref="form" :rules="rules"> |
| | | <div class="m_title">åºç¡ä¿¡æ¯</div> |
| | | <div class="list"> |
| | | <el-form-item label="ååç±»å" prop="type"> |
| | | <el-select v-model="param.type" placeholder="è¯·éæ©" clearable> |
| | | <el-option v-for="item in types" :value="item.value" :label="item.name"></el-option> |
| | | <el-select v-model="form.type" placeholder="è¯·éæ©" @change="changeType"> |
| | | <el-option v-for="(item, index) in types" :key="index" :value="item.value" :label="item.name"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ååç¼å·" prop="code"> |
| | | <el-input v-model="param.code" placeholder="请è¾å
¥ååç¼å·" v-trim /> |
| | | <el-input v-model="form.code" placeholder="请è¾å
¥ååç¼å·" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="ç»å人" prop="aaa"> |
| | | <el-select v-model="param.aaa" placeholder="è¯·éæ©" clearable> |
| | | <el-option v-for="item in agentList" :value="item.id" :label="item.name"></el-option> |
| | | <el-form-item label="ç»å人" prop="userId"> |
| | | <el-select v-model="form.userId" filterable placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in agentList" :key="index" :value="item.id" :label="item.realname"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ååç¾è®¢æ¥æ" prop=""> |
| | | <el-date-picker type="date" v-model="param.getDate" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | <el-form-item label="ååç¾è®¢æ¥æ" prop="signDate"> |
| | | <el-date-picker type="date" v-model="form.signDate" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="ååå¼å§æ¥æ" prop=""> |
| | | <el-date-picker type="date" v-model="param.getDate" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | <el-form-item label="ååå¼å§æ¥æ" prop="startDate"> |
| | | <el-date-picker type="date" v-model="form.startDate" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="ååç»ææ¥æ" prop=""> |
| | | <el-date-picker type="date" v-model="param.getDate" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | <el-form-item label="ååç»ææ¥æ" prop="endDate"> |
| | | <el-date-picker type="date" v-model="form.endDate" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="å½å±é¡¹ç®" prop=""> |
| | | <el-select v-model="param.aaa" placeholder="è¯·éæ©" clearable> |
| | | <el-option v-for="item in projectList" :value="item.id" :label="item.name"></el-option> |
| | | <el-form-item label="å½å±é¡¹ç®" prop="projectId"> |
| | | <el-select v-model="form.projectId" placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in projectList" :key="index" :value="item.id" :label="item.name"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ç»æåæ´(åèäºå
¥)" prop=""> |
| | | <el-select v-model="param.aaa" placeholder="è¯·éæ©" clearable> |
| | | <el-form-item label="ç»æåæ´(åèäºå
¥)" prop="roundedUp"> |
| | | <el-select v-model="form.roundedUp" placeholder="è¯·éæ©"> |
| | | <el-option :value="0" label="å¦"></el-option> |
| | | <el-option :value="1" label="æ¯"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æå±å
¬å¸" prop=""> |
| | | <el-select v-model="param.aaa" placeholder="è¯·éæ©" clearable> |
| | | <el-option v-for="item in comparyList" :value="item.id" :label="item.name"></el-option> |
| | | <el-form-item label="æå±å
¬å¸" prop="companyId"> |
| | | <el-select v-model="form.companyId" placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in comparyList" :key="index" :value="item.id" :label="item.name"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="m_title">ç§å®¢ä¿¡æ¯</div> |
| | | <div class="list"> |
| | | <el-form-item label="ç§å®¢" prop=""> |
| | | <el-button @click="handleRent" type="primary">éæ©ç§å®¢</el-button> |
| | | <el-select v-model="param.aaa" placeholder="è¯·éæ©" clearable> |
| | | <el-option v-for="item in renterList" :value="item.id" :label="item.name"></el-option> |
| | | </el-select> |
| | | <el-form-item label="ç§å®¢" prop="renterName"> |
| | | <div @click="handleRent"> |
| | | <el-input v-model="form.renterName" readonly placeholder="请ç¹å»éæ©ç§å®¢" /> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="è系人" prop=""> |
| | | <el-select v-model="param.aaa" placeholder="è¯·éæ©" clearable> |
| | | <el-option v-for="item in contacts" :value="item.id" :label="item.name"></el-option> |
| | | </el-select> |
| | | <el-form-item label="è系人" prop="memberName"> |
| | | <el-input v-model="form.memberName" readonly placeholder="请ç¹å»éæ©ç§å®¢" /> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | | </div> |
| | | <div class="main_house"> |
| | | <div class="title">è¯·éæ©æ¿æº</div> |
| | | <el-cascader style="width: 300px" v-model="value" @change="houseChange" :options="options" |
| | | :props="{ multiple: true }" collapse-tags clearable /> |
| | | <el-tree |
| | | :data="houseList" |
| | | show-checkbox |
| | | node-key="idd" |
| | | @check="checkHouseRoom" |
| | | :default-expanded-keys="ids" |
| | | :default-checked-keys="ids" |
| | | :props="{ children: 'projectDataVOList', label: 'name' }"> |
| | | </el-tree> |
| | | </div> |
| | | </div> |
| | | <div class="file_wrap"> |
| | |
| | | <el-button icon="el-icon-plus" plain>æ·»å éä»¶</el-button> |
| | | </el-upload> |
| | | </div> |
| | | <el-table :data="param.list" stripe> |
| | | <el-table-column prop="" label="éä»¶åç§°" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="æä½äºº" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="æä½æ¶é´" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="æä½" align="center" min-width="100"> |
| | | <template v-slot="scope"> |
| | | <span class="cu red">å é¤</span> |
| | | <el-table :data="form.fileList" stripe> |
| | | <el-table-column prop="originname" label="éä»¶åç§°" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="userName" label="æä½äºº" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="createTime" label="æä½æ¶é´" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column label="æä½" align="center" min-width="100"> |
| | | <template slot-scope="{ row }"> |
| | | <span class="cu red" @click="dele(row.imgaddr)">å é¤</span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </template> |
| | | <template v-if="activeTabs == 1"> |
| | | </div> |
| | | <div v-show="activeTabs === 1"> |
| | | <div class="tabs cost_tabs"> |
| | | <div class="tab" :class="{ active: cactiveTabs == 0 }" @click="ctabsClick(0)">ç§èµæ¡æ¬¾</div> |
| | | <div class="tab" :class="{ active: cactiveTabs == 1 }" @click="ctabsClick(1)">ç©ä¸æ¡æ¬¾</div> |
| | | <div class="tab" :class="{ active: cactiveTabs === 0 }" @click="ctabsClick(0)" v-if="[0,2].includes(form.type)">ç§èµæ¡æ¬¾</div> |
| | | <div class="tab" :class="{ active: cactiveTabs === 1 }" @click="ctabsClick(1)" v-if="[0,1].includes(form.type)">ç©ä¸æ¡æ¬¾</div> |
| | | </div> |
| | | <div class="main"> |
| | | <div class="main_content"> |
| | | <el-form :model="paramCost" ref="paramCostRef" :rules="rules"> |
| | | <div class="m_title">ç§èµä¿¡æ¯</div> |
| | | <div class="list"> |
| | | <el-form-item label="æ¼ééé¢(å
)" prop="type"> |
| | | <el-input v-model="paramCost.code" placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="仿¬¾æ¹å¼" prop="code"> |
| | | <el-select v-model="paramCost.type" placeholder="è¯·éæ©" clearable> |
| | | <el-option v-for="item in payMethods" :value="item.value" :label="item.name"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="å
ç§æ" prop="aaa"> |
| | | <el-date-picker type="daterange" v-model="paramCost.getDate" value-format="yyyy-MM-dd" |
| | | placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="m_title">ç§èµæ¡æ¬¾</div> |
| | | <div class="list"> |
| | | <el-form-item label="èµ·å§æ¥æ" prop=""> |
| | | <el-date-picker type="date" v-model="paramCost.getDate" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="åååä»·" prop=""> |
| | | <el-input placeholder="请è¾å
¥å
容" v-model="paramCost.aaa"> |
| | | <el-select v-model="paramCost.ddd" slot="append" placeholder="è¯·éæ©" clearable> |
| | | <el-option v-for="item in unitOps" :value="item.value" :label="item.name"></el-option> |
| | | <!-- ç§èµæ¡æ¬¾ --> |
| | | <div v-show="cactiveTabs === 0"> |
| | | <div class="main"> |
| | | <div class="main_content"> |
| | | <el-form :model="form" ref="paramCostRef" :rules="rules"> |
| | | <div class="m_title">ç§èµä¿¡æ¯</div> |
| | | <div class="list"> |
| | | <el-form-item label="æ¼ééé¢(å
)" prop="zlDeposit"> |
| | | <el-input v-model="form.zlDeposit" placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="仿¬¾æ¹å¼" prop="zlPayType"> |
| | | <el-select v-model="form.zlPayType" placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" :label="item.name"></el-option> |
| | | </el-select> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="仿¬¾æå天æ°" prop=""> |
| | | <el-input v-model="paramCost.aaa" placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | | </el-form-item> |
| | | <el-form-item label="å
ç§æ" prop="zlDate"> |
| | | <el-date-picker type="daterange" v-model="form.zlDate" @change="getZLDate" value-format="yyyy-MM-dd" |
| | | placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="m_title"> |
| | | <span>ç§èµæ¡æ¬¾</span> |
| | | <el-button type="text" size="medium" @click="addZl">å¢å </el-button> |
| | | </div> |
| | | <div class="list"> |
| | | <template v-for="(item, index) in form.zlDetailList" :key="index"> |
| | | <el-form-item label="èµ·å§æ¥æ" prop="time"> |
| | | <el-date-picker type="daterange" v-model="item.time" @change="getDate1($event, index)" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="åååä»·" prop="price"> |
| | | <el-input placeholder="请è¾å
¥" v-model="item.price"> |
| | | <el-select v-model="item.circleType" slot="append" placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in unitOps" :key="index" :value="item.value" :label="item.name"></el-option> |
| | | </el-select> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="仿¬¾æå天æ°" prop="advanceDays"> |
| | | <div style="display: flex; align-items: center; justify-content: space-between;"> |
| | | <el-input v-model="item.advanceDays" placeholder="请è¾å
¥" v-trim /> |
| | | <el-link :underline="false" type="danger" @click="deleZl(index)" style="margin-left: 20px; flex-shrink: 0;">å é¤</el-link> |
| | | </div> |
| | | </el-form-item> |
| | | </template> |
| | | </div> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | <el-button style="width: 100%;height: 48px;" type="primary" plain @click="generateZL">çæè´¦åæç»</el-button> |
| | | <el-table :data="zlList" class="mt20" stripe> |
| | | <el-table-column label="è´¹ç¨ç±»å" align="center" show-overflow-tooltip> |
| | | <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 label="ææ°" align="center" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <el-tag type="success">{{row.sortnum}}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="åºé´" align="center" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | {{row.startDate}} ~ {{row.endDate}} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="planPayDate" label="仿¬¾æ¥" align="center" show-overflow-tooltip /> |
| | | <el-table-column prop="receivableFee" label="åºæ¶" align="center" show-overflow-tooltip /> |
| | | </el-table> |
| | | <div class="total"> |
| | | <span>æ»è®¡</span> |
| | | <div>è´¹ç¨åºæ¶æ»è®¡ï¼{{zlPrice}}ï¼æ¼éåºæ¶æ»è®¡ï¼{{form.zlDeposit}}</div> |
| | | </div> |
| | | </div> |
| | | <el-button style="width: 100%;height: 48px;" type="primary" plain>çæè´¦åæç»</el-button> |
| | | <el-table :data="paramCost.list" class="mt20" stripe> |
| | | <el-table-column prop="" label="è´¹ç¨ç±»å" align="center" width="160px" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="ææ°" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="åºé´" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="仿¬¾æ¥" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="åºæ¶" align="center" min-width="100" show-overflow-tooltip /> |
| | | </el-table> |
| | | <div class="total"> |
| | | <span>æ»è®¡</span> |
| | | <div>è´¹ç¨åºæ¶æ»è®¡ï¼ï¼æ¼éåºæ¶æ»è®¡ï¼</div> |
| | | <!-- ç©ä¸æ¡æ¬¾ --> |
| | | <div v-show="cactiveTabs === 1"> |
| | | <div class="main"> |
| | | <div class="main_content"> |
| | | <el-form :model="form" ref="paramCostRef1" :rules="rules"> |
| | | <div class="m_title">ç©ä¸ä¿¡æ¯</div> |
| | | <div class="list"> |
| | | <el-form-item label="ç©ä¸æ¼é" prop="wyDeposit"> |
| | | <el-input v-model="form.wyDeposit" placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="仿¬¾æ¹å¼" prop="wyPayType"> |
| | | <el-select v-model="form.wyPayType" placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" :label="item.name"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="å
ç§æ" prop="wyDate"> |
| | | <el-date-picker type="daterange" v-model="form.wyDate" @change="getWYDate" value-format="yyyy-MM-dd" |
| | | placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="m_title"> |
| | | <span>ç©ä¸æ¡æ¬¾</span> |
| | | <el-button type="text" size="medium" @click="addWy">å¢å </el-button> |
| | | </div> |
| | | <div class="list"> |
| | | <template v-for="(item, index) in form.wyDetailList" :key="index"> |
| | | <el-form-item label="èµ·å§æ¥æ" prop="time"> |
| | | <el-date-picker type="daterange" v-model="item.time" @change="getDate2($event, index)" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="åååä»·" prop="price"> |
| | | <el-input placeholder="请è¾å
¥" v-model="item.price"> |
| | | <el-select v-model="item.circleType" slot="append" placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in unitOps" :key="index" :value="item.value" :label="item.name"></el-option> |
| | | </el-select> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="仿¬¾æå天æ°" prop="advanceDays"> |
| | | <div style="display: flex; align-items: center; justify-content: space-between;"> |
| | | <el-input v-model="item.advanceDays" placeholder="请è¾å
¥" v-trim /> |
| | | <el-link :underline="false" type="danger" @click="deleWy(index)" style="margin-left: 20px; flex-shrink: 0;">å é¤</el-link> |
| | | </div> |
| | | </el-form-item> |
| | | </template> |
| | | </div> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | <el-button style="width: 100%;height: 48px;" type="primary" plain @click="generateWY">çæè´¦åæç»</el-button> |
| | | <el-table :data="wyList" class="mt20" stripe> |
| | | <el-table-column label="è´¹ç¨ç±»å" align="center" show-overflow-tooltip> |
| | | <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 label="ææ°" align="center" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <el-tag type="success">{{row.sortnum}}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="åºé´" align="center" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | {{row.startDate}} ~ {{row.endDate}} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="planPayDate" label="仿¬¾æ¥" align="center" show-overflow-tooltip /> |
| | | <el-table-column prop="receivableFee" label="åºæ¶" align="center" show-overflow-tooltip /> |
| | | </el-table> |
| | | <div class="total"> |
| | | <span>æ»è®¡</span> |
| | | <div>è´¹ç¨åºæ¶æ»è®¡ï¼{{wyPrice}}ï¼æ¼éåºæ¶æ»è®¡ï¼{{form.wyDeposit}}</div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <!-- --> |
| | | <MemberSearch ref="MemberSearchRef" /> |
| | | </div> |
| | | <!-- éæ©ç§å®¢ --> |
| | | <MemberSearch ref="MemberSearchRef" @select="getTenant" /> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import MemberSearch from '@/components/common/MemberSearch' |
| | | import { rules } from './config' |
| | | import { create, getBillList } from '@/api/contract' |
| | | import { getUserList } from '@/api/system/user' |
| | | import { getProjectList, tree } from '@/api/project/ywProject' |
| | | import { companyList } from '@/api/company' |
| | | import { Message, Loading } from 'element-ui' |
| | | import { mapState } from 'vuex' |
| | | export default { |
| | | components: { |
| | | GlobalWindow, |
| | | MemberSearch |
| | | }, |
| | | extends: BaseOpera, |
| | | data() { |
| | | computed: { |
| | | ...mapState(['userInfo']) |
| | | }, |
| | | data () { |
| | | return { |
| | | showModal: false, |
| | | title: 'å建åå', |
| | | activeTabs: '0', |
| | | param: {}, |
| | | activeTabs: 0, |
| | | form: { |
| | | type: '', |
| | | code: '', |
| | | userId: '', |
| | | signDate: '', |
| | | startDate: '', |
| | | endDate: '', |
| | | projectId: '', |
| | | roundedUp: '', |
| | | companyId: '', |
| | | renterId: '', |
| | | renterName: '', |
| | | memberId: '', |
| | | memberName: '', |
| | | fileList: [], |
| | | |
| | | zlDeposit: '', |
| | | zlPayType: '', |
| | | zlFreeStartDate: '', |
| | | zlFreeEndDate: '', |
| | | zlDate: [], |
| | | zlDetailList: [ |
| | | { |
| | | startDate: '', |
| | | endDate: '', |
| | | time: [], |
| | | price: '', |
| | | advanceDays: '' |
| | | } |
| | | ], |
| | | |
| | | wyDeposit: '', |
| | | wyPayType: '', |
| | | wyFreeStartDate: '', |
| | | wyFreeEndDate: '', |
| | | wyDate: [], |
| | | wyDetailList: [ |
| | | { |
| | | startDate: '', |
| | | endDate: '', |
| | | time: [], |
| | | price: '', |
| | | advanceDays: '' |
| | | } |
| | | ], |
| | | |
| | | roomIds: [] |
| | | }, |
| | | |
| | | ids: [], |
| | | |
| | | zlList: [], |
| | | wyList: [], |
| | | |
| | | rules, |
| | | |
| | | loadingInstance: null, |
| | | uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch', |
| | | fileList: [], |
| | | uploadData: { |
| | | folder: 'HIDDEN_DANGER_FILE' |
| | | folder: 'YW_CONTRACT_FILE' |
| | | }, |
| | | |
| | | types: [ |
| | | { name: 'ç©ä¸+ç§èµåå', value: 0 }, |
| | | { name: 'ç§èµåå', value: 1 }, |
| | | { name: 'ç©ä¸åå', value: 2 }, |
| | | { name: 'ç§èµåå', value: 2 }, |
| | | { name: 'ç©ä¸åå', value: 1 } |
| | | ], |
| | | agentList: [], //ç»å人 |
| | | agentList: [], // ç»å人 |
| | | projectList: [], |
| | | comparyList: [], // å
¬å¸ |
| | | renterList: [], // ç§å®¢ |
| | | contacts: [], // è系人 |
| | | value: [], |
| | | options: [ |
| | | { |
| | | value: 1, |
| | | label: 'ä¸å', |
| | | children: [{ |
| | | value: 2, |
| | | label: '䏿µ·', |
| | | children: [ |
| | | { value: 3, label: 'æ®é' }, |
| | | { value: 4, label: 'é»å' }, |
| | | { value: 5, label: '徿±' } |
| | | ] |
| | | }, { |
| | | value: 7, |
| | | label: 'æ±è', |
| | | children: [ |
| | | { value: 8, label: 'å京' }, |
| | | { value: 9, label: 'èå·' }, |
| | | { value: 10, label: 'æ é¡' } |
| | | ] |
| | | }, { |
| | | value: 12, |
| | | label: 'æµæ±', |
| | | children: [ |
| | | { value: 13, label: 'æå·' }, |
| | | { value: 14, label: '宿³¢' }, |
| | | { value: 15, label: 'åå
´' } |
| | | ] |
| | | }] |
| | | }, |
| | | { |
| | | value: 17, |
| | | label: '西å', |
| | | children: [{ |
| | | value: 18, |
| | | label: 'é西', |
| | | children: [ |
| | | { value: 19, label: '西å®' }, |
| | | { value: 20, label: 'å»¶å®' } |
| | | ] |
| | | }, { |
| | | value: 21, |
| | | label: 'æ°çç»´å¾å°æèªæ²»åº', |
| | | children: [ |
| | | { value: 22, label: 'ä¹é²æ¨é½' }, |
| | | { value: 23, label: 'å
æçä¾' } |
| | | ] |
| | | }] |
| | | } |
| | | ], |
| | | houseList: [], |
| | | cactiveTabs: 0, |
| | | paramCost: {}, |
| | | payMethods: [ |
| | | { name: '䏿¬¡æ§ä»æ¬¾', value: 0 }, |
| | | { name: '3个æä¸ä»', value: 1 }, |
| | |
| | | unitOps: [ |
| | | { name: 'å
/m²·天', value: 0 }, |
| | | { name: 'å
/m²·æ', value: 1 }, |
| | | { name: 'å
/天', value: 2 }, |
| | | { name: 'å
/æ', value: 3 }, |
| | | { name: 'å
/å¹´', value: 4 }, |
| | | { name: 'å
/m²·年', value: 5 }, |
| | | { name: 'å
/天', value: 3 }, |
| | | { name: 'å
/æ', value: 4 }, |
| | | { name: 'å
/å¹´', value: 5 }, |
| | | { name: 'å
/m²·年', value: 2 }, |
| | | { name: 'å
/åº', value: 6 }, |
| | | ], |
| | | |
| | | houseLvThree: [] |
| | | } |
| | | }, |
| | | methods: { |
| | | tabsClick(val) { |
| | | open (title, target) { |
| | | this.title = title |
| | | this.ids = [] |
| | | this.getUser() |
| | | this.getProject() |
| | | this.getCompany() |
| | | this.getHouseTree() |
| | | this.visible = true |
| | | this.$nextTick(() => { |
| | | for (const key in this.form) { |
| | | if (['roomIds', 'fileList', 'wyDate', 'zlDate'].includes(key)) { |
| | | this.form[key] = [] |
| | | } else { |
| | | this.form[key] = target[key] |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | changeType (e) { |
| | | if (e === 0 || e === 2) { |
| | | this.cactiveTabs = 0 |
| | | } else if (e === 0 || e === 1) { |
| | | this.cactiveTabs = 1 |
| | | } |
| | | }, |
| | | confirm () { |
| | | this.$refs.form.validate((valid) => { |
| | | if (!valid) { |
| | | return |
| | | } |
| | | if (this.form.type === 0) { |
| | | this.$refs.paramCostRef.validate((valid1) => { |
| | | if (!valid1) { |
| | | return |
| | | } |
| | | this.$refs.paramCostRef1.validate((valid2) => { |
| | | if (!valid2) { |
| | | return |
| | | } |
| | | this.submit() |
| | | }) |
| | | }) |
| | | } else if (this.form.type === 2) { |
| | | this.$refs.paramCostRef.validate((valid1) => { |
| | | if (!valid1) { |
| | | return |
| | | } |
| | | this.submit() |
| | | }) |
| | | } else if (this.form.type === 1) { |
| | | this.$refs.paramCostRef1.validate((valid2) => { |
| | | if (!valid2) { |
| | | return |
| | | } |
| | | this.submit() |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | submit () { |
| | | // è°ç¨æ°å»ºæ¥å£ |
| | | this.isWorking = true |
| | | create({ ...this.form }) |
| | | .then(res => { |
| | | this.visible = false |
| | | this.$tip.apiSuccess('å建æå') |
| | | this.$emit('success') |
| | | }) |
| | | .finally(() => { |
| | | this.isWorking = false |
| | | }) |
| | | }, |
| | | getDate1 (e, index) { |
| | | this.form.zlDetailList[index].startDate = e[0] |
| | | this.form.zlDetailList[index].endDate = e[1] |
| | | }, |
| | | getDate2 (e, index) { |
| | | this.form.wyDetailList[index].startDate = e[0] |
| | | this.form.wyDetailList[index].endDate = e[1] |
| | | }, |
| | | checkHouseRoom (a, b) { |
| | | this.ids = b.checkedKeys |
| | | let arr = b.checkedKeys.map(item => { |
| | | if (item.split('-')[0] == 3) { |
| | | return Number(item.split('-')[1]) |
| | | } |
| | | }) |
| | | this.form.roomIds = arr.filter(item => item !== undefined); |
| | | }, |
| | | getHouseTree () { |
| | | tree({}) |
| | | .then(res => { |
| | | res.forEach(item => { |
| | | item.disabled = true |
| | | }) |
| | | this.addParamToArray(res) |
| | | this.houseList = res |
| | | }) |
| | | }, |
| | | addParamToArray(arr) { |
| | | for (let i = 0; i < arr.length; i++) { |
| | | const currentItem = arr[i].projectDataVOList; |
| | | arr[i].idd = arr[i].lv + '-' + arr[i].id |
| | | if (currentItem.length > 0) { |
| | | this.addParamToArray(currentItem); |
| | | } |
| | | } |
| | | }, |
| | | generateZL () { |
| | | getBillList({ ...this.form }) |
| | | .then(res => { |
| | | let zlPrice = 0 |
| | | let arr = [] |
| | | res.forEach(item => { |
| | | if (item.costType === 0) { |
| | | zlPrice += item.receivableFee |
| | | arr.push(item) |
| | | } |
| | | }) |
| | | this.zlPrice = zlPrice |
| | | this.zlList = arr |
| | | }) |
| | | }, |
| | | generateWY () { |
| | | getBillList({ ...this.form }) |
| | | .then(res => { |
| | | let zlPrice = 0 |
| | | let arr = [] |
| | | res.forEach(item => { |
| | | if (item.costType === 1) { |
| | | zlPrice += item.receivableFee |
| | | arr.push(item) |
| | | } |
| | | }) |
| | | this.wyPrice = zlPrice |
| | | this.wyList = arr |
| | | }) |
| | | }, |
| | | addZl () { |
| | | this.form.zlDetailList.push({ |
| | | startDate: '', |
| | | endDate: '', |
| | | time: [], |
| | | price: '', |
| | | advanceDays: '' |
| | | }) |
| | | }, |
| | | addWy () { |
| | | this.form.wyDetailList.push({ |
| | | startDate: '', |
| | | endDate: '', |
| | | time: [], |
| | | price: '', |
| | | advanceDays: '' |
| | | }) |
| | | }, |
| | | deleZl(index) { |
| | | if (this.form.zlDetailList.length === 1) return Message.warning('è³å°ä¿ç䏿¡ï¼') |
| | | this.form.zlDetailList.splice(index, 1) |
| | | }, |
| | | deleWy(index) { |
| | | if (this.form.wyDetailList.length === 1) return Message.warning('è³å°ä¿ç䏿¡ï¼') |
| | | this.form.wyDetailList.splice(index, 1) |
| | | }, |
| | | getZLDate (e) { |
| | | this.form.zlFreeStartDate = e[0] |
| | | this.form.zlFreeEndDate = e[1] |
| | | }, |
| | | getWYDate (e) { |
| | | this.form.wyFreeStartDate = e[0] |
| | | this.form.wyFreeEndDate = e[1] |
| | | }, |
| | | getTenant (row) { |
| | | this.form.renterId = row.id |
| | | this.form.renterName = row.name |
| | | this.form.memberId = row.memberId |
| | | this.form.memberName = row.memberName |
| | | }, |
| | | dele (imgaddr) { |
| | | this.form.fileList.forEach((item, index) => { |
| | | if (imgaddr === item.imgaddr) { |
| | | this.form.fileList.splice(index, 1) |
| | | } |
| | | }) |
| | | }, |
| | | getUser () { |
| | | getUserList({}) |
| | | .then(res => { |
| | | this.agentList = res |
| | | }) |
| | | }, |
| | | getProject () { |
| | | getProjectList({}) |
| | | .then(res => { |
| | | this.projectList = res |
| | | }) |
| | | }, |
| | | getCompany () { |
| | | companyList({ type: 2 }) |
| | | .then(res => { |
| | | this.comparyList = res |
| | | }) |
| | | }, |
| | | tabsClick (val) { |
| | | this.activeTabs = val |
| | | }, |
| | | ctabsClick(val) { |
| | | ctabsClick (val) { |
| | | this.cactiveTabs = val |
| | | }, |
| | | getDetail() { |
| | | |
| | | handleRent () { |
| | | this.$refs.MemberSearchRef.open() |
| | | }, |
| | | handleRent() { |
| | | this.$refs.MemberSearchRef.openModal() |
| | | }, |
| | | houseChange(e) { |
| | | houseChange (e) { |
| | | console.log(e) |
| | | console.log(this.value) |
| | | |
| | | }, |
| | | beforeUpload(file) { |
| | | // if (['video/mp4', 'video/ogg', 'video/flv', 'video/avi', 'video/wmv', 'video/rmvb', 'image/jpeg', 'image/jpg', 'image/png', 'image/gif'].indexOf(file.type) == -1) { |
| | | // this.$message.error('请ä¸ä¼ æ£ç¡®çè§é¢/å¾çæ ¼å¼') |
| | | // return false |
| | | // } |
| | | beforeUpload (file) { |
| | | this.loadingInstance = Loading.service({ |
| | | lock: true, |
| | | text: 'Loading', |
| | |
| | | background: 'rgba(0, 0, 0, 0.7)' |
| | | }) |
| | | }, |
| | | uploadError() { |
| | | uploadError () { |
| | | this.$nextTick(() => { // 以æå¡çæ¹å¼è°ç¨ç Loading éè¦å¼æ¥å
³é |
| | | if (this.loadingInstance) { |
| | | this.loadingInstance.close() |
| | | } |
| | | }) |
| | | }, |
| | | uploadAvatarSuccess(file) { |
| | | this.$nextTick(() => { // 以æå¡çæ¹å¼è°ç¨ç Loading éè¦å¼æ¥å
³é |
| | | getDay () { |
| | | const now = new Date() |
| | | const year = now.getFullYear() |
| | | const month = now.getMonth() + 1 // å 1使å
¶ä»1å¼å§ |
| | | const day = now.getDate() |
| | | const hours = now.getHours() |
| | | const minutes = now.getMinutes() |
| | | const seconds = now.getSeconds() |
| | | return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; |
| | | }, |
| | | uploadAvatarSuccess (file) { |
| | | this.$nextTick(() => { |
| | | if (this.loadingInstance) { |
| | | this.loadingInstance.close() |
| | | } |
| | | }) |
| | | console.log('file', file) |
| | | const item = file.data[0] |
| | | if (['.mp4', '.avi', '.flv', '.wmv'].some(char => item.imgaddr.includes(char))) { |
| | | this.fileList.push({ |
| | | type: 1, |
| | | fileurl: item.imgaddr, |
| | | fileurlFull: item.url |
| | | }) |
| | | } else { |
| | | this.fileList.push({ |
| | | type: 0, |
| | | fileurl: item.imgaddr, |
| | | fileurlFull: item.url |
| | | }) |
| | | } |
| | | console.log('file', this.fileList) |
| | | // this.$set(this.param, 'faceImg', file.imgurl) |
| | | // this.$set(this.param, 'faceImgUrl', file.imgurlfull) |
| | | this.form.fileList.push({ ...item, fileurl: item.imgaddr, name: item.originname, userName: this.userInfo.realname, createTime: this.getDay() }) |
| | | }, |
| | | close() { |
| | | this.showModal = false |
| | | close () { |
| | | this.$emit('close') |
| | | } |
| | | } |
| | |
| | | font-size: 14px; |
| | | margin-bottom: 15px; |
| | | margin-top: 10px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | span { |
| | | font-weight: 500; |
| | | font-size: 14px; |
| | | margin-bottom: 15px; |
| | | } |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="title" |
| | | width="100%" |
| | | :visible.sync="visible" |
| | | :confirm-working="isWorking" |
| | | @close="close" |
| | | @confirm="confirm"> |
| | | <div class="main"> |
| | | <div class="main_head"> |
| | | <span>ç§å®¢ï¼{{ info.renterName }}</span> |
| | | <span>ååç¼å·ï¼{{ info.code }}</span> |
| | | </div> |
| | | <div class="title">éç§ä¿¡æ¯</div> |
| | | <div class="main_box"> |
| | | <div class="main_box_form"> |
| | | <el-form :inline="true" label-position="top" :model="form" ref="form" :rules="rules" class="demo-form-inline"> |
| | | <el-form-item label="éç§ç±»å" prop="btType" style="width: 33%;"> |
| | | <el-select v-model="form.btType" placeholder="è¯·éæ©"> |
| | | <el-option label="å°æéç§" :value="0"></el-option> |
| | | <el-option label="æ¢æ¿éç§" :value="1"></el-option> |
| | | <el-option label="è¿çº¦éç§" :value="2"></el-option> |
| | | <el-option label="ååéç§" :value="3"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="éç§æ¥æ" prop="btDate" style="width: 33%;"> |
| | | <el-date-picker |
| | | v-model="form.btDate" |
| | | type="date" |
| | | value-format="yyyy-MM-dd" |
| | | placeholder="è¯·éæ©"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="ç»å人" prop="btUserId" style="width: 30%;"> |
| | | <el-select v-model="form.btUserId" placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in agentList" :key="index" :value="item.id" :label="item.realname"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="åè®®ç¾è®¢æ¥æ" prop="btSignDate" style="width: 33%;"> |
| | | <el-date-picker |
| | | v-model="form.btSignDate" |
| | | type="date" |
| | | value-format="yyyy-MM-dd" |
| | | placeholder="è¯·éæ©"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="éç§åå " prop="btInfo" style="width: 60%;"> |
| | | <el-input v-model="form.btInfo" placeholder="请è¾å
¥"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="main_box_list"> |
| | | <div class="main_box_list_title">å·²éæ¿æº</div> |
| | | <el-table :data="info.roomList" stripe> |
| | | <el-table-column prop="projectName" label="项ç®åç§°" show-overflow-tooltip /> |
| | | <el-table-column label="æ¿æºåç§°" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | {{row.buildingName}}/{{row.code}} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ç§èµé¢ç§¯(ã¡)" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | {{row.area}}ã¡ |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <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> |
| | | </div> |
| | | </div> |
| | | <el-table |
| | | :data="info.terminateList" |
| | | border |
| | | style="width: 100%; margin-bottom: 15px;"> |
| | | <el-table-column |
| | | prop="code" |
| | | label="è´¦åç¼å·"> |
| | | </el-table-column> |
| | | <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 === 4">æ°´çµè´¹</span> |
| | | <span v-if="row.costType === 5">æé¡¹è´¹</span> |
| | | <span v-if="row.costType === 6">å
¶ä»</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="è®¡è´¹å¨æ"> |
| | | <template slot-scope="{row}"> |
| | | {{row.startDate}} ~ {{row.endDate}} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºæ¶ä»éé¢/åå§åºæ¶ä»"> |
| | | <template v-slot="{row}"> |
| | | <div style="display: flex; align-items: center;"> |
| | | <el-input v-model="row.receivableFee" @input="changeReceivableFee($event, row)" placeholder="请è¾å
¥å
容" style="width: 90px;"></el-input> |
| | | <span style="margin: 0 10px;">/</span> |
| | | {{row.receivableFeeCopy}} |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="actReceivableFee" |
| | | label="宿¶/ä»éé¢"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="éæ¶/ä»éé¢"> |
| | | <template slot-scope="{row}"> |
| | | <div style="display: flex; align-items: center;"> |
| | | <el-tag type="success" v-if="row.billType === 0">æ¶</el-tag> |
| | | <el-tag type="warning" v-if="row.billType === 1">ä»</el-tag> |
| | | <span style="margin-left: 10px;">{{row.price}}</span> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºæ¶/仿¥æ"> |
| | | <template slot-scope="{row}"> |
| | | <el-date-picker v-model="row.planPayDate" value-format="yyyy-MM-dd" type="date" placeholder="éæ©æ¥æ"></el-date-picker> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div class="title">æ¼é</div> |
| | | <el-table |
| | | :data="info.depositList" |
| | | border |
| | | style="width: 100%; margin-bottom: 15px;"> |
| | | <el-table-column |
| | | prop="code" |
| | | label="è´¦åç¼å·"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="è´¹ç¨ç±»å"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.costType === 2">ç§èµæ¼é</span> |
| | | <span v-if="row.costType === 3">ç©ä¸æ¼é</span> |
| | | <span v-if="row.costType === 7">ä¿è¯é</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="è®¡è´¹å¨æ"> |
| | | <template slot-scope="{row}"> |
| | | {{row.startDate}} ~ {{row.endDate}} |
| | | </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 |
| | | label="åºééé¢"> |
| | | <template slot-scope="{row}"> |
| | | <div style="display: flex; align-items: center;"> |
| | | <el-tag type="success" v-if="row.billType === 0">æ¶</el-tag> |
| | | <el-tag type="warning" v-if="row.billType === 1">ä»</el-tag> |
| | | <span style="margin-left: 10px;">{{row.price}}</span> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="åºéæ¥æ"> |
| | | <template slot-scope="{row}"> |
| | | <el-date-picker v-model="row.planPayDate" value-format="yyyy-MM-dd" type="date" placeholder="éæ©æ¥æ"></el-date-picker> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div class="footer"> |
| | | åè®¡åºæ¶ï¼<span>{{receivable}}</span>å
ï¼ å计åºä»ï¼<span>{{meet}}</span>å
|
| | | </div> |
| | | </div> |
| | | <!-- åå»ºæ¶æ¬¾è´¦å --> |
| | | <AddCollectionBill ref="addCollectionBill" @getVal="getObjS" /> |
| | | <!-- åå»ºä»æ¬¾è´¦å --> |
| | | <AddPaymentBill ref="AddPaymentBill" @getVal="getObjS" /> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import AddCollectionBill from './addCollectionBill' |
| | | import AddPaymentBill from './addPaymentBill' |
| | | import { getUserList } from '@/api/system/user' |
| | | import { backRent } from '@/api/contract' |
| | | export default { |
| | | name: "terminateLease", |
| | | components: { |
| | | GlobalWindow, |
| | | AddCollectionBill, |
| | | AddPaymentBill |
| | | }, |
| | | extends: BaseOpera, |
| | | data() { |
| | | return { |
| | | info: {}, |
| | | form: { |
| | | id: null, |
| | | btType: '', |
| | | btDate: '', |
| | | btUserId: '', |
| | | btSignDate: '', |
| | | btInfo: '' |
| | | }, |
| | | rules: { |
| | | btType: [ |
| | | { required: true, message: 'è¯·éæ©', trigger: 'blur' } |
| | | ], |
| | | btDate: [ |
| | | { required: true, message: 'è¯·éæ©', trigger: 'blur' } |
| | | ], |
| | | btUserId: [ |
| | | { required: true, message: 'è¯·éæ©', trigger: 'blur' } |
| | | ], |
| | | signDate: [ |
| | | { required: true, message: 'è¯·éæ©', trigger: 'blur' } |
| | | ], |
| | | btInfo: [ |
| | | { required: true, message: '请è¾å
¥', trigger: 'blur' } |
| | | ] |
| | | }, |
| | | |
| | | list: [], |
| | | |
| | | agentList: [], |
| | | |
| | | receivable: '', |
| | | meet: '' |
| | | } |
| | | }, |
| | | watch: { |
| | | info: { |
| | | deep: true, |
| | | immediate: true, |
| | | handler(news, olds) { |
| | | const arr = [...this.info.terminateList, ...this.info.depositList] |
| | | let total1 = 0 |
| | | let total2 = 0 |
| | | arr.forEach(item => { |
| | | if (item.billType === 0) { |
| | | total1 += Number(item.price) |
| | | } else if (item.billType === 1) { |
| | | total2 += Number(item.price) |
| | | } |
| | | }) |
| | | this.receivable = total1 |
| | | this.meet = total2 |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | open (title, info) { |
| | | this.title = title |
| | | this.info = info |
| | | this.form.id = info.id |
| | | this.info.billList.forEach(item => { |
| | | this.$set(item, 'receivableFeeCopy', item.receivableFee) |
| | | if ([2,3,7].includes(item.costType)) { |
| | | this.$set(item, 'price', item.actReceivableFee) |
| | | } else { |
| | | this.$set(item, 'price', item.receivableFee) |
| | | } |
| | | }) |
| | | this.info.terminateList = this.info.canBackRentBills.filter(item => { |
| | | if ([0,1,4,5,6].includes(item.costType)) { |
| | | item.billTypeCopy = item.billType |
| | | return item |
| | | } |
| | | }) |
| | | this.info.depositList = this.info.canBackRentBills.filter(item => { |
| | | if ([2,3,7].includes(item.costType)) { |
| | | item.billTypeCopy = item.billType |
| | | return item |
| | | } |
| | | }) |
| | | this.getUser() |
| | | this.visible = true |
| | | }, |
| | | getObjS (obj) { |
| | | this.info.terminateList.push(obj) |
| | | this.info.terminateList.forEach(item => { |
| | | item.receivableFee = Number(item.receivableFee) + 1 |
| | | item.receivableFee = Number(item.receivableFee) - 1 |
| | | }) |
| | | }, |
| | | confirm () { |
| | | this.$refs.form.validate((valid) => { |
| | | if (!valid) { |
| | | return |
| | | } |
| | | this.isWorking = true |
| | | let canBackRentBills = [] |
| | | let addBillList = [] |
| | | this.info.terminateList.forEach(item => { |
| | | if (item.rowType && item.rowType === 1) { |
| | | addBillList.push(item) |
| | | } else { |
| | | canBackRentBills.push(item) |
| | | } |
| | | }) |
| | | backRent({ |
| | | ...this.form, |
| | | canBackRentBills: [...canBackRentBills, ...this.info.depositList], |
| | | addBillList |
| | | }) |
| | | .then(res => { |
| | | this.visible = false |
| | | this.$tip.apiSuccess('æä½æå') |
| | | this.$emit('success') |
| | | }) |
| | | .finally(() => { |
| | | this.isWorking = false |
| | | }) |
| | | }) |
| | | }, |
| | | getUser () { |
| | | getUserList({}) |
| | | .then(res => { |
| | | this.agentList = res |
| | | }) |
| | | }, |
| | | changeReceivableFee (num, row) { |
| | | if (Number(num) > row.receivableFeeCopy) { |
| | | row.receivableFee = '' |
| | | 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 |
| | | } else { |
| | | row.billType = 0 |
| | | } |
| | | } else { |
| | | if (row.price > 0) { |
| | | row.billType = 1 |
| | | } else if (row.price < 0) { |
| | | row.billType = 0 |
| | | } else { |
| | | row.billType = 1 |
| | | } |
| | | } |
| | | // 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) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import '@/assets/style/variables.scss'; |
| | | .main { |
| | | width: 100%; |
| | | .footer { |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | font-size: 14px; |
| | | color: black; |
| | | span { |
| | | font-size: 14px; |
| | | color: $primary-color; |
| | | } |
| | | } |
| | | .main_head { |
| | | width: 100%; |
| | | padding: 10px 5px; |
| | | box-sizing: border-box; |
| | | display: flex; |
| | | flex-direction: column; |
| | | border-bottom: 1px solid #ececec; |
| | | margin-bottom: 15px; |
| | | span { |
| | | color: black; |
| | | font-size: 16px; |
| | | font-weight: 500; |
| | | margin-bottom: 8px; |
| | | &:last-child { |
| | | margin: 0 !important; |
| | | } |
| | | } |
| | | } |
| | | .title { |
| | | font-weight: 500; |
| | | font-size: 16px; |
| | | color: $primary-color; |
| | | margin-bottom: 15px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | span { |
| | | font-weight: 500; |
| | | font-size: 16px; |
| | | color: $primary-color; |
| | | } |
| | | } |
| | | .main_box { |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: start; |
| | | margin-bottom: 15px; |
| | | justify-content: space-between; |
| | | .main_box_form { |
| | | flex: 1; |
| | | margin-right: 20px; |
| | | } |
| | | .main_box_list { |
| | | width: 500px; |
| | | flex-shrink: 0; |
| | | .main_box_list_title { |
| | | font-size: 16px; |
| | | font-weight: 500; |
| | | color: $primary-color; |
| | | margin-bottom: 15px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | </template> |
| | | </QueryForm> |
| | | <div class="mt10"> |
| | | <el-button @click="handleEdit()" icon="el-icon-plus" type="primary">æ°å»º</el-button> |
| | | <el-button @click="$refs.ContractEditRef.open('å建åå')" icon="el-icon-plus" type="primary">æ°å»º</el-button> |
| | | </div> |
| | | <el-table v-loading="loading" :data="list" stripe> |
| | | <el-table-column prop="" label="客æ·åç§°" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="å¼å§æ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="ç»ææ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="ç§èµåä»·" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="ç§èµé¢ç§¯" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="ç¾è®¢æ¥" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="ååç¼å·" min-width="100" show-overflow-tooltip /> |
| | | |
| | | <el-table-column prop="" label="ååç¶æ" min-width="100" show-overflow-tooltip> |
| | | <template v-slot="scope"> |
| | | <span class="primaryColor">å¾
æ§è¡</span> |
| | | <span class="green">æ£å¸¸æ§è¡ä¸</span> |
| | | <span class="gary">å·²éç§</span> |
| | | <el-table-column prop="renterName" label="客æ·åç§°" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="startDate" label="å¼å§æ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="endDate" label="ç»ææ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <!-- <el-table-column label="ç§èµåä»·" min-width="100" show-overflow-tooltip></el-table-column>--> |
| | | <el-table-column prop="totalArea" label="ç§èµé¢ç§¯" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="signDate" label="ç¾è®¢æ¥" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="code" label="ååç¼å·" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column label="ååç¶æ" min-width="90" fixed="right" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <span class="primaryColor" v-if="row.status === 0">å¾
æ§è¡</span> |
| | | <span class="green" v-if="row.status === 1">æ£å¸¸æ§è¡ä¸</span> |
| | | <span class="gary" v-if="row.status === 2">已尿</span> |
| | | <span class="gary" v-if="row.status === 3">éç§ç»ç®ä¸</span> |
| | | <span class="gary" v-if="row.status === 4">å·²éç§</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="" label="æä½" min-width="100" show-overflow-tooltip> |
| | | <el-table-column label="æä½" min-width="90" fixed="right" show-overflow-tooltip> |
| | | <template v-slot="scope"> |
| | | <span class="primaryColor cu" @click="handleDetail(scope.row)">æ¥ç详æ
</span> |
| | | <span class="primaryColor cu" @click="handleDetail(scope.row.id)">æ¥ç详æ
</span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> |
| | | </div> |
| | | <ContractDetail ref="ContractDetailRef" /> |
| | | <ContractEdit ref="ContractEditRef" v-if="showEdit" /> |
| | | <ContractEdit ref="ContractEditRef" @success="getList(1)" /> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | import QueryForm from '@/components/common/QueryForm' |
| | | import ContractDetail from './components/contractDetail' |
| | | import ContractEdit from './components/contractEdit.vue' |
| | | import { fetchList } from '@/api/contract' |
| | | import dayjs from 'dayjs' |
| | | import duration from 'dayjs/plugin/duration' |
| | | dayjs.extend(duration) |
| | | import { platformLogPage, getPlatformGroupList } from '@/api' |
| | | |
| | | export default { |
| | | components: { |
| | | Pagination, |
| | |
| | | ContractEdit, |
| | | ContractDetail |
| | | }, |
| | | data() { |
| | | data () { |
| | | return { |
| | | showEdit: false, |
| | | loading: false, |
| | | pagination: { |
| | | pageSize: 10, |
| | |
| | | queryFormConfig: { |
| | | formItems: [ |
| | | { |
| | | filed: 'name', |
| | | filed: 'renterName', |
| | | type: 'input', |
| | | label: 'åååç§°' |
| | | label: '客æ·åç§°' |
| | | }, |
| | | { |
| | | filed: 'code', |
| | | type: 'input', |
| | | label: 'ååç¼å·' |
| | | }, |
| | | { |
| | | filed: 'status', |
| | | type: 'select', |
| | | label: 'ååç¶æ', |
| | | options: [ |
| | | { value: 0, label: 'å¾
æ§è¡' }, |
| | | { value: 1, label: 'æ£å¸¸æ§è¡ä¸' }, |
| | | { value: 2, label: '已尿' }, |
| | | { value: 3, label: 'éç§ç»ç®ä¸' }, |
| | | { value: 4, label: 'å·²éç§' }, |
| | | ] |
| | | }, |
| | | { |
| | | filed: 'selDate', |
| | | type: 'datetimerange', |
| | | placeholder: 'åºå¼å§æ¶é´' |
| | | label: 'å忥æ', |
| | | placeholder: 'å忥æ' |
| | | } |
| | | ], |
| | | online: true |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | | // this.getList() |
| | | // this.getGroupList() |
| | | created () { |
| | | this.getList() |
| | | }, |
| | | methods: { |
| | | handleEdit(row) { |
| | | this.showEdit = true |
| | | this.$nextTick(() => { |
| | | this.$refs.ContractEditRef.showModal = true |
| | | }) |
| | | if(row && row.id){ |
| | | |
| | | }else{ |
| | | |
| | | } |
| | | handleDetail (id) { |
| | | this.$refs.ContractDetailRef.open('åå详æ
', id) |
| | | }, |
| | | handleDetail(row) { |
| | | this.$refs.ContractDetailRef.visible = true |
| | | this.$refs.ContractDetailRef.getDetail(row.id) |
| | | }, |
| | | |
| | | getList(page) { |
| | | getList (page) { |
| | | const { pagination, filters } = this |
| | | this.loading = true |
| | | platformLogPage({ |
| | | fetchList({ |
| | | model: { |
| | | ...filters, |
| | | queryStatus: '6,7,8', |
| | | beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null, |
| | | beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null, |
| | | ...filters |
| | | }, |
| | | sorts: [{ direction: 'DESC', property: 'param1' }], |
| | | capacity: pagination.pageSize, |
| | | page: page || pagination.page, |
| | | page: page || pagination.page |
| | | }).then(res => { |
| | | this.loading = false |
| | | this.list = res.records || [] |
| | | this.list.forEach(item => { |
| | | item.inTypeTemp = item.inType == 0 ? 'æ´æç' : 'ä»¶ç' |
| | | item.taskOrigin = 'WMSè·å' |
| | | item.workTime = dayjs.duration(item.param3, 'seconds').format('Hæ¶måsç§') |
| | | }) |
| | | this.pagination.total = res.total || 0 |
| | | }, () => { |
| | | this.loading = false |
| | | }) |
| | | }, |
| | | clear() { |
| | | clear () { |
| | | this.filters = {} |
| | | this.pagination.pageSize = 10 |
| | | this.pagination.page = 1 |
| | | this.getList() |
| | | }, |
| | | handleSizeChange(capacity) { |
| | | handleSizeChange (capacity) { |
| | | this.pagination.pageSize = capacity |
| | | } |
| | | } |
| | |
| | | <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> |
| | | <div class="df_sb mt20"> |
| | | <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 class="tab" :class="{ active: billType === 0 }" @click="tabsClick(0)">æ¶æ¬¾è´¦å</div> |
| | | <div class="tab" :class="{ active: billType === 1 }" @click="tabsClick(1)">仿¬¾è´¦å</div> |
| | | </div> |
| | | <div class="btns"> |
| | | <el-button type="primary" @click="$refs.EditRef.open('åå»ºæ¶æ¬¾è´¦å')" icon="el-icon-plus" |
| | | <el-button type="primary" @click="addOpen" icon="el-icon-plus" |
| | | v-permissions="['business:ywpatrolline:create']">æ°å»º</el-button> |
| | | <el-button @click="handleDetail" v-permissions="['business:ywpatrolline:create']">导åº</el-button> |
| | | </div> |
| | | </div> |
| | | <el-table v-loading="loading" :data="list" stripe> |
| | | <el-table-column prop="" label="客æ·åç§°" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="code" label="楼å®åç§°" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="name" label="æ¿é´å·" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="stautsName" label="ååç¼å·" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="remark" label="ç»æ¸
ç¶æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="createTime" label="è´¦åéé¢" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="createTime" label="åºæ¶éé¢" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="createTime" label="宿¶éé¢" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="createTime" label="éæ¶éé¢" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="createTime" label="è´¹ç¨ç±»å" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="createTime" label="æ¯å¦é¾æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="createTime" label="è®¡è´¹å¨æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="createTime" label="åºæ¶æ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="customerName" label="客æ·åç§°" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column label="æ¿é´" min-width="170" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <div style="display: flex; flex-direction: column;" v-if="row.roomPathName"> |
| | | <span v-for="(item, index) in row.roomPathName.split(';')" :key="index">{{item}}</span> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="contractCode" 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.payStatus === 0">å¾
æ¶æ¬¾</span> |
| | | <span v-if="row.payStatus === 1">å·²ç»æ¸
</span> |
| | | <span v-if="row.payStatus === 2">é¨åç»æ¸
</span> |
| | | <span v-if="row.payStatus === 3">å¾
仿¬¾</span> |
| | | <span v-if="row.payStatus === 4">å¾
鿬¾</span> |
| | | <span v-if="row.payStatus === 5">å·²å
³é</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="totleFee" label="è´¦åéé¢" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="receivableFee" label="åºæ¶éé¢" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="actReceivableFee" label="宿¶éé¢" min-width="100" show-overflow-tooltip /> |
| | | <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> |
| | | </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> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="è®¡è´¹å¨æ" min-width="100" 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="120" fixed="right"> |
| | |
| | | </div> |
| | | <Edit ref="EditRef" @success="getList" /> |
| | | <Detail ref="DetailRef" @success="getList" /> |
| | | <BullEditFu ref="BullEditFu" @success="getList" /> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | import Pagination from '@/components/common/Pagination' |
| | | import QueryForm from '@/components/common/QueryForm' |
| | | import Edit from './components/bullEdit.vue' |
| | | import BullEditFu from './components/bullEditFu.vue' |
| | | import Detail from './components/bullDetail.vue' |
| | | import { fetchList } from '@/api/bill' |
| | | export default { |
| | |
| | | Pagination, |
| | | QueryForm, |
| | | Edit, |
| | | Detail |
| | | Detail, |
| | | BullEditFu |
| | | }, |
| | | data() { |
| | | data () { |
| | | return { |
| | | loading: false, |
| | | pagination: { |
| | |
| | | page: 1, |
| | | total: 0 |
| | | }, |
| | | activeTabs: 0, |
| | | filters: {}, |
| | | billType: 0, |
| | | filters: { |
| | | status: 0 |
| | | }, |
| | | list: [], |
| | | total: 0, |
| | | statusMap: [ |
| | | { value: 0, label: 'å¾
æ¶æ¬¾' }, |
| | | { value: 1, label: 'å·²ç»ç®' }, |
| | | { value: 2, label: 'é¨åç»æ¸
' }, |
| | | { value: 3, label: 'å¾
鿬¾' }, |
| | | { value: 4, label: 'å¾
仿¬¾' }, |
| | | ], |
| | | queryFormConfig: { |
| | | formItems: [ |
| | | { |
| | | filed: 'name', |
| | | filed: 'customerName', |
| | | type: 'input', |
| | | label: '客æ·åç§°', |
| | | label: '客æ·åç§°' |
| | | }, |
| | | { |
| | | filed: 'status', |
| | | type: 'select', |
| | | label: 'è´¦åç¶æ', |
| | | options: [ |
| | | { value: '0', label: 'å¼å¯' }, |
| | | { value: '1', label: 'å
³é' }, |
| | | { value: 0, label: 'å¼å¯' }, |
| | | { value: 1, label: 'å
³é' } |
| | | ] |
| | | }, |
| | | { |
| | | filed: 'status', |
| | | filed: 'payStatus', |
| | | type: 'select', |
| | | label: 'ç»æ¸
ç¶æ', |
| | | options: this.statusMap |
| | | options: [ |
| | | { value: 0, label: 'å¾
æ¶æ¬¾' }, |
| | | { value: 1, label: 'å·²ç»ç®' }, |
| | | { value: 2, label: 'é¨åç»æ¸
' }, |
| | | { value: 3, label: 'å¾
鿬¾' }, |
| | | { value: 4, label: 'å¾
仿¬¾' } |
| | | ] |
| | | }, |
| | | { |
| | | filed: 'selDate', |
| | | type: 'daterange', |
| | | label: 'åºæ¶/仿¥æ' |
| | | }, |
| | | ], |
| | | online: true |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | | created () { |
| | | this.getList() |
| | | }, |
| | | methods: { |
| | | addOpen () { |
| | | if (this.billType === 0) { |
| | | this.$refs.EditRef.open('åå»ºæ¶æ¬¾è´¦å') |
| | | } else { |
| | | this.$refs.BullEditFu.open('åå»ºä»æ¬¾è´¦å') |
| | | } |
| | | }, |
| | | getList (page) { |
| | | const { pagination, filters } = this |
| | | this.loading = true |
| | | fetchList({ |
| | | model: { |
| | | ...filters |
| | | ...filters, |
| | | billType: this.billType |
| | | }, |
| | | capacity: pagination.pageSize, |
| | | page: page || pagination.page |
| | | }).then(res => { |
| | | console.log(res) |
| | | this.loading = false |
| | | this.list = res.records || [] |
| | | this.list.forEach(item => { |
| | |
| | | this.loading = false |
| | | }) |
| | | }, |
| | | tabsClick(val) { |
| | | this.activeTabs = val |
| | | tabsClick (val) { |
| | | this.billType = val |
| | | this.getList() |
| | | }, |
| | | handleDetail(row) { |
| | | this.$refs.DetailRef.open() |
| | | handleDetail (row) { |
| | | this.$refs.DetailRef.open('è´¦å详æ
', row.id) |
| | | }, |
| | | clear() { |
| | | clear () { |
| | | this.filters = {} |
| | | this.pagination.pageSize = 10 |
| | | this.pagination.page = 1 |
| | | this.getList() |
| | | }, |
| | | handleSizeChange(capacity) { |
| | | handleSizeChange (capacity) { |
| | | this.pagination.pageSize = capacity |
| | | this.getList() |
| | | } |
| | |
| | | .tabs { |
| | | display: flex; |
| | | margin-bottom: 20px; |
| | | display: flex; |
| | | justify-content: center; |
| | | |
| | | .tab { |
| | |
| | | @confirm="confirm"> |
| | | <div class="home_title"> |
| | | <div class="left"> |
| | | <span class="mr10">仿¬¾æ¹ï¼xxx</span> |
| | | <el-tag type="success">status</el-tag> |
| | | <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> |
| | | </div> |
| | | <el-button plain type="primary" @click="$refs.flowingWater.open('åå»ºæ¶æ¯æµæ°´')">æ°å»ºæ¶æ¯æµæ°´</el-button> |
| | | <el-button plain type="primary" @click="$refs.flowingWater.open(info.billType === 0 ? 'åå»ºæ¶æ¬¾è´¦å' : 'åå»ºä»æ¬¾è´¦å', { |
| | | billType: info.billType, |
| | | billId: info.id, |
| | | costType: info.costType, |
| | | costTypeName: returnText(info.costType), |
| | | contractCode: info.contractCode, |
| | | contractId: info.contractId, |
| | | startDate: info.startDate, |
| | | endDate: info.endDate, |
| | | multifileList: [], |
| | | date: `${info.startDate} ~ ${info.endDate}`, |
| | | companyId: info.companyId, |
| | | companyName: info.companyName, |
| | | actReceivableFee: info.actReceivableFee |
| | | })">æ°å»ºæ¶æ¯æµæ°´</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;">å·²ç»æ¸
</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 0">å¾
æ¶æ¬¾</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 1">å·²ç»æ¸
</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 2">é¨åç»æ¸
</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 3">å¾
仿¬¾</div> |
| | | <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 4">å¾
鿬¾</div> |
| | | <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="val" style="margin-top: 10px;">1,000.00</div> |
| | | <div class="val" style="margin-top: 10px;">{{info.receivableFee}}</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">宿¶éé¢ï¼å
ï¼</div> |
| | | <div class="val" style="margin-top: 10px;">1,000.00</div> |
| | | <div class="val" style="margin-top: 10px;">{{info.actReceivableFee}}</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">éä»éé¢ï¼å
ï¼</div> |
| | | <div class="val" style="margin-top: 10px;">1,000.00</div> |
| | | <div class="val" style="margin-top: 10px;">{{info.needReceivableFee}}</div> |
| | | </div> |
| | | <div class="item" style="flex: 1;"> |
| | | <div class="la">åºæ¶æ¥æ</div> |
| | | <div class="val" style="margin-top: 10px;">2024-11-16</div> |
| | | <div class="val" style="margin-top: 10px;">{{info.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 class="tab" :class="{ active: activeTabs == 1 }" @click="tabsClick(1)">è´¦åæç»</div>--> |
| | | <div class="tab" :class="{ active: activeTabs == 2 }" @click="tabsClick(2)">æ¶æ¯æµæ°´</div> |
| | | </div> |
| | | <div class="main"> |
| | |
| | | <div class="list" style="background: rgba(0,0,0,0); padding: 0;"> |
| | | <div class="item"> |
| | | <div class="la">è´¦åç±»å</div> |
| | | <div class="val">ç§é</div> |
| | | <div class="val" v-if="info.billType === 0">æ¶æ¬¾</div> |
| | | <div class="val" v-if="info.billType === 1">仿¬¾</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">è®¡è´¹å¨æ</div> |
| | | <div class="val">2024-11-17 ~ 2025-11-17</div> |
| | | <div class="val">{{info.startDate}} ~ {{info.endDate}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">è´¦åéé¢(å
)</div> |
| | | <div class="val">10000.00</div> |
| | | <div class="val">{{info.totleFee}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">è´¦åç¼å·</div> |
| | | <div class="val">ZD20241117-0002</div> |
| | | <div class="val">{{info.code}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">ååç¼å·</div> |
| | | <div class="val">202411-0017</div> |
| | | <div class="val">{{info.contractCode}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">å建æ¶é´</div> |
| | | <div class="val">2024-11-16 15:17:01</div> |
| | | <div class="val">{{info.createDate}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">仿¬¾æ¹</div> |
| | | <div class="val">XXå
¬å¸</div> |
| | | <div class="val">{{info.customerName}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">ç»å人</div> |
| | |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">æå±å
¬å¸</div> |
| | | <div class="val">XXXæéå
¬å¸</div> |
| | | <div class="val">{{info.companyName}}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="la">è´¦å夿³¨</div> |
| | | <div class="val">è¿æ¯å¤æ³¨å
容</div> |
| | | <div class="val">{{info.remark}}</div> |
| | | </div> |
| | | <div class="item"></div> |
| | | <div class="item"></div> |
| | |
| | | <div class="title">æ¿æºä¿¡æ¯</div> |
| | | <div class="list" style="background: rgba(0,0,0,0); padding: 0;"> |
| | | <el-table |
| | | :data="tableData" |
| | | :data="info.ywContractRoomList" |
| | | border |
| | | style="width: 100%"> |
| | | <el-table-column |
| | | prop="date" |
| | | prop="projectName" |
| | | label="项ç®åç§°"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="name" |
| | | prop="floorName" |
| | | label="楼å®åç§°"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="address" |
| | | label="楼å±/æ¿å·"> |
| | | <template slot-scope="{row}"> |
| | | {{row.buildingName}}/{{row.roomName}} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="address" |
| | | prop="area" |
| | | 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="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--> |
| | | <!-- :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 |
| | | :data="tableData" |
| | | :data="info.ywContractRevenueList" |
| | | border |
| | | style="width: 100%"> |
| | | <el-table-column |
| | | prop="date" |
| | | label="æµæ°´ç±»å"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.revenueType === 0">æ¶å
¥</span> |
| | | <span v-if="row.revenueType === 1">æ¯åº</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="name" |
| | | prop="customerName" |
| | | label="对æ¹åä½åç§°"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="address" |
| | | label="è´¹ç¨ç±»å"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.payType === 0">ç°é</span> |
| | | <span v-if="row.payType === 1">ç½é¶è½¬è´¦</span> |
| | | <span v-if="row.payType === 2">POSæº</span> |
| | | <span v-if="row.payType === 3">æ¯ä»å®</span> |
| | | <span v-if="row.payType === 4">微信</span> |
| | | <span v-if="row.payType === 5">转账æ¯ç¥¨</span> |
| | | <span v-if="row.payType === 6">å
¶ä»</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="address" |
| | | prop="payDateEnd" |
| | | label="å
¥è´¦æ¥æ"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="address" |
| | | prop="actReceivableFee" |
| | | label="åçé¢"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="address" |
| | | prop="createDate" |
| | | label="å建æ¶é´"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="address" |
| | | prop="remark" |
| | | label="夿³¨"> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import FlowingWater from './flowingWater' |
| | | import { getYwContractBillById } from '@/api/contract' |
| | | export default { |
| | | components: { |
| | | GlobalWindow, |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | open (title, id) { |
| | | this.title = title |
| | | this.id = id |
| | | this.getDetails() |
| | | }, |
| | | getDetails () { |
| | | getYwContractBillById(this.id) |
| | | .then(res => { |
| | | this.info = res |
| | | this.visible = true |
| | | }) |
| | | }, |
| | | tabsClick(val) { |
| | | this.activeTabs = val |
| | | }, |
| | | getDetail() { |
| | | |
| | | returnText (e) { |
| | | if (e === 0) { |
| | | return 'ç§èµè´¹' |
| | | } else if (e === 1) { |
| | | return 'ç©ä¸è´¹' |
| | | } else if (e === 2) { |
| | | return 'ç§èµæ¼é' |
| | | } else if (e === 3) { |
| | | return 'ç©ä¸æ¼é' |
| | | } else if (e === 4) { |
| | | return 'æ°´çµè´¹' |
| | | } else if (e === 5) { |
| | | return 'æé¡¹è´¹' |
| | | } else if (e === 6) { |
| | | return 'å
¶ä»' |
| | | } else if (e === 7) { |
| | | return 'ä¿è¯é' |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | @confirm="confirm"> |
| | | <div class="main"> |
| | | <div class="main_content"> |
| | | <el-form :model="param" label-position="top" ref="form" :rules="rules"> |
| | | <el-form :model="form" label-position="top" ref="form" :rules="rules"> |
| | | <div class="head"> |
| | | <div class="m_title">åºç¡ä¿¡æ¯</div> |
| | | <div class="tabs"> |
| | |
| | | </div> |
| | | <div class="list"> |
| | | <el-form-item label="å
³èåå" prop="contractId"> |
| | | <el-select v-model="form.contractId" placeholder="è¯·éæ©" clearable> |
| | | <el-option v-for="(item, index) in contract" :key="index" :value="item.value" :label="item.name"></el-option> |
| | | <el-select v-model="form.contractId" @change="changeContract" placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in contract" :key="index" :value="item.id" :label="item.code"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="仿¬¾æ¹" prop="customerName"> |
| | | <el-select v-model="form.customerName" filterable placeholder="è¯·éæ©"> |
| | | <el-form-item label="仿¬¾æ¹" prop="renterName"> |
| | | <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-option |
| | | v-for="(item, index) in payerList" |
| | | v-for="(item, index) in houseList" |
| | | :key="index" |
| | | :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | :value="item.id" |
| | | :label="item.projectName + item.buildingName + item.floorName + item.roomName" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="è´¹ç¨ç±»å" prop="costType"> |
| | |
| | | <el-option :value="6" label="å
¶ä»"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="è®¡è´¹å¨æ" prop="startDate" v-if="form.feeType !== 1"> |
| | | <el-form-item label="è®¡è´¹å¨æ" prop="date" v-if="form.feeType !== 1"> |
| | | <el-date-picker |
| | | type="daterange" |
| | | range-separator="è³" |
| | | v-model="date" |
| | | v-model="form.date" |
| | | @change="changeDate" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ" |
| | | value-format="yyyy-MM-dd" |
| | | placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="åºæ¶éé¢" prop="receivableFee"> |
| | | <el-input v-model="form.receivableFee" placeholder="请è¾å
¥åºæ¶éé¢" v-trim /> |
| | | <el-form-item label="åºæ¶éé¢" prop="totleFee"> |
| | | <el-input v-model="form.totleFee" placeholder="请è¾å
¥åºæ¶éé¢" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="åºæ¶æ¥æ" prop="planPayDate"> |
| | | <el-date-picker type="date" v-model="form.planPayDate" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="æå±å
¬å¸" prop="companyId"> |
| | | <el-select v-model="form.companyId" placeholder="è¯·éæ©" clearable> |
| | | <el-select v-model="form.companyId" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="(item, index) in comparyList" |
| | | :key="index" |
| | |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item style="width: 100%;" label="è´¦å夿³¨" prop="remark"> |
| | | <el-input type="textarea" :rows="5" v-model="param.remark" placeholder="请è¾å
¥" /> |
| | | <el-input type="textarea" :rows="5" v-model="form.remark" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | | </div> |
| | | <div class="main_house"> |
| | | <div class="title">è¯·éæ©æ¿æº</div> |
| | | <el-tree |
| | | :data="houseList" |
| | | show-checkbox |
| | | node-key="id" |
| | | :default-expanded-keys="[2, 3]" |
| | | :default-checked-keys="[5]" |
| | | :props="defaultProps"> |
| | | </el-tree> |
| | | </div> |
| | | </div> |
| | | <div class="file_wrap"> |
| | |
| | | <el-button icon="el-icon-plus" plain>æ·»å éä»¶</el-button> |
| | | </el-upload> |
| | | </div> |
| | | <el-table :data="param.list" stripe> |
| | | <el-table-column prop="" label="éä»¶åç§°" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="æä½äºº" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="æä½æ¶é´" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="æä½" align="center" min-width="100"> |
| | | <template v-slot="{ scope }"> |
| | | <span class="cu red">å é¤</span> |
| | | <el-table :data="form.multifileList" stripe> |
| | | <el-table-column prop="originname" label="éä»¶åç§°" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="userName" label="æä½äºº" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="createTime" label="æä½æ¶é´" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column label="æä½" align="center" min-width="100"> |
| | | <template slot-scope="{row}"> |
| | | <span class="cu red" @click="dele(row.imgaddr)">å é¤</span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <!-- --> |
| | | <MemberSearch ref="MemberSearchRef" /> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import MemberSearch from '@/components/common/MemberSearch' |
| | | import { rules } from './config' |
| | | import { create } from '@/api/bill' |
| | | import { list as listAll } from '@/api/contract' |
| | | import { companyList } from '@/api/company' |
| | | import { Message, Loading } from 'element-ui' |
| | | import { getContractRoom } from '@/api/house' |
| | | import { mapState } from 'vuex' |
| | | export default { |
| | | components: { |
| | | GlobalWindow, |
| | | MemberSearch |
| | | GlobalWindow |
| | | }, |
| | | computed: { |
| | | ...mapState(['userInfo']) |
| | | }, |
| | | extends: BaseOpera, |
| | | data() { |
| | | data () { |
| | | return { |
| | | form: { |
| | | contractId: '', |
| | | customerName: '', |
| | | renterName: '', |
| | | renterId: '', |
| | | costType: '', |
| | | type: '', |
| | | companyId: '', |
| | | remark: '', |
| | | startDate: '', |
| | | endDate: '', |
| | | receivableFee: '', |
| | | totleFee: '', |
| | | feeType: 0, |
| | | planPayDate: '' |
| | | planPayDate: '', |
| | | multifileList: [], |
| | | ywContractRoomList: [], |
| | | date: [], |
| | | RoomName: '' |
| | | }, |
| | | date: [], |
| | | |
| | | param: {}, |
| | | rules, |
| | | timeTab: '0', |
| | | |
| | | loadingInstance: null, |
| | | uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch', |
| | | fileList: [], |
| | | uploadData: { |
| | | folder: 'HIDDEN_DANGER_FILE' |
| | | folder: 'YW_CONTRACT_BILL' |
| | | }, |
| | | contract: [], |
| | | payerList: [], |
| | | |
| | | projectList: [], |
| | | comparyList: [], // å
¬å¸ |
| | | renterList: [], // ç§å®¢ |
| | | contacts: [], // è系人 |
| | | value: [], |
| | | options: [ |
| | | { |
| | | value: 1, |
| | | label: 'ä¸å', |
| | | children: [{ |
| | | value: 2, |
| | | label: '䏿µ·', |
| | | children: [ |
| | | { value: 3, label: 'æ®é' }, |
| | | { value: 4, label: 'é»å' }, |
| | | { value: 5, label: '徿±' } |
| | | ] |
| | | }, { |
| | | value: 7, |
| | | label: 'æ±è', |
| | | children: [ |
| | | { value: 8, label: 'å京' }, |
| | | { value: 9, label: 'èå·' }, |
| | | { value: 10, label: 'æ é¡' } |
| | | ] |
| | | }, { |
| | | value: 12, |
| | | label: 'æµæ±', |
| | | children: [ |
| | | { value: 13, label: 'æå·' }, |
| | | { value: 14, label: '宿³¢' }, |
| | | { value: 15, label: 'åå
´' } |
| | | ] |
| | | }] |
| | | }, |
| | | { |
| | | value: 17, |
| | | label: '西å', |
| | | children: [{ |
| | | value: 18, |
| | | label: 'é西', |
| | | children: [ |
| | | { value: 19, label: '西å®' }, |
| | | { value: 20, label: 'å»¶å®' } |
| | | ] |
| | | }, { |
| | | value: 21, |
| | | label: 'æ°çç»´å¾å°æèªæ²»åº', |
| | | children: [ |
| | | { value: 22, label: 'ä¹é²æ¨é½' }, |
| | | { value: 23, label: 'å
æçä¾' } |
| | | ] |
| | | }] |
| | | } |
| | | ], |
| | | cactiveTabs: 0, |
| | | paramCost: {}, |
| | | payMethods: [ |
| | | { name: '䏿¬¡æ§ä»æ¬¾', value: 0 }, |
| | | { name: '3个æä¸ä»', value: 1 }, |
| | | { name: '6个æä¸ä»', value: 2 }, |
| | | { name: '1å¹´ä¸ä»', value: 2 }, |
| | | ], |
| | | unitOps: [ |
| | | { name: 'å
/m²·天', value: 0 }, |
| | | { name: 'å
/m²·æ', value: 1 }, |
| | | { name: 'å
/天', value: 2 }, |
| | | { name: 'å
/æ', value: 3 }, |
| | | { name: 'å
/å¹´', value: 4 }, |
| | | { name: 'å
/m²·年', value: 5 }, |
| | | { name: 'å
/åº', value: 6 }, |
| | | ], |
| | | houseList: [{ |
| | | id: 1, |
| | | label: 'ä¸çº§ 1', |
| | | children: [{ |
| | | id: 4, |
| | | label: 'äºçº§ 1-1', |
| | | children: [{ |
| | | id: 9, |
| | | label: 'ä¸çº§ 1-1-1' |
| | | }, { |
| | | id: 10, |
| | | label: 'ä¸çº§ 1-1-2' |
| | | }] |
| | | }] |
| | | }, { |
| | | id: 2, |
| | | label: 'ä¸çº§ 2', |
| | | children: [{ |
| | | id: 5, |
| | | label: 'äºçº§ 2-1' |
| | | }, { |
| | | id: 6, |
| | | label: 'äºçº§ 2-2' |
| | | }] |
| | | }, { |
| | | id: 3, |
| | | label: 'ä¸çº§ 3', |
| | | children: [{ |
| | | id: 7, |
| | | label: 'äºçº§ 3-1' |
| | | }, { |
| | | id: 8, |
| | | label: 'äºçº§ 3-2' |
| | | }] |
| | | }], |
| | | defaultProps: { |
| | | children: 'children', |
| | | label: 'label' |
| | | } |
| | | comparyList: [], |
| | | houseList: [] |
| | | } |
| | | }, |
| | | methods: { |
| | | timeTabClick(val) { |
| | | open (title, target) { |
| | | this.title = title |
| | | this.form.multifileList = [] |
| | | this.getListAll() |
| | | this.getCompanyList() |
| | | this.visible = true |
| | | // æ°å»º |
| | | if (target == null) { |
| | | this.$nextTick(() => { |
| | | this.$refs.form.resetFields() |
| | | this.form[this.configData['field.id']] = null |
| | | }) |
| | | return |
| | | } |
| | | // ç¼è¾ |
| | | this.$nextTick(() => { |
| | | for (const key in this.form) { |
| | | this.form[key] = target[key] |
| | | } |
| | | }) |
| | | }, |
| | | changeContract (e) { |
| | | this.form.renterName = this.contract.filter(item => { |
| | | if (item.id === e) { |
| | | return item |
| | | } |
| | | })[0].renterName |
| | | this.getHouseDate() |
| | | }, |
| | | getHouseDate () { |
| | | getContractRoom({ contractId: this.form.contractId, type: 0 }) |
| | | .then(res => { |
| | | this.houseList = res |
| | | }) |
| | | }, |
| | | confirm () { |
| | | this.$refs.form.validate((valid) => { |
| | | if (!valid) return |
| | | this.isWorking = true |
| | | let obj = JSON.parse(JSON.stringify(this.form)) |
| | | obj.ywContractRoomList = obj.ywContractRoomList.map(id => { |
| | | return { roomId: id } |
| | | }) |
| | | obj.billType = 0 |
| | | create(obj) |
| | | .then(() => { |
| | | this.visible = false |
| | | this.$tip.apiSuccess('æ°å»ºæå') |
| | | this.$emit('success') |
| | | }) |
| | | .finally(() => { |
| | | this.isWorking = false |
| | | }) |
| | | }) |
| | | }, |
| | | dele (imgaddr) { |
| | | this.form.multifileList.forEach((item, index) => { |
| | | if (imgaddr === item.imgaddr) { |
| | | this.form.multifileList.splice(index, 1) |
| | | } |
| | | }) |
| | | }, |
| | | openHouse () { |
| | | this.$refs.selectHouse.open('éæ©æ¿æº', { contractId: this.form.contractId, type: 0 }) |
| | | }, |
| | | getCompanyList () { |
| | | companyList({}) |
| | | .then(res => { |
| | | this.comparyList = res |
| | | }) |
| | | }, |
| | | getListAll () { |
| | | listAll({}) |
| | | .then(res => { |
| | | console.log(res) |
| | | this.contract = res |
| | | }) |
| | | }, |
| | | timeTabClick (val) { |
| | | this.form.feeType = val |
| | | if (val === 1) { |
| | | this.form.startDate = '' |
| | | this.form.endDate = '' |
| | | this.form.date = [] |
| | | } |
| | | }, |
| | | changeDate(e) { |
| | | changeDate (e) { |
| | | if (!e || e.length === 0) { |
| | | this.form.startDate = '' |
| | | this.form.endDate = '' |
| | |
| | | this.form.endDate = e[1] |
| | | } |
| | | }, |
| | | handleRent() { |
| | | this.$refs.MemberSearchRef.openModal() |
| | | }, |
| | | beforeUpload(file) { |
| | | beforeUpload (file) { |
| | | this.loadingInstance = Loading.service({ |
| | | lock: true, |
| | | text: 'Loading', |
| | |
| | | background: 'rgba(0, 0, 0, 0.7)' |
| | | }) |
| | | }, |
| | | uploadError() { |
| | | uploadError () { |
| | | this.$nextTick(() => { // 以æå¡çæ¹å¼è°ç¨ç Loading éè¦å¼æ¥å
³é |
| | | if (this.loadingInstance) { |
| | | this.loadingInstance.close() |
| | | } |
| | | }) |
| | | }, |
| | | uploadAvatarSuccess(file) { |
| | | this.$nextTick(() => { // 以æå¡çæ¹å¼è°ç¨ç Loading éè¦å¼æ¥å
³é |
| | | getDay () { |
| | | const now = new Date(); |
| | | const year = now.getFullYear(); |
| | | const month = now.getMonth() + 1; // å 1使å
¶ä»1å¼å§ |
| | | const day = now.getDate(); |
| | | const hours = now.getHours(); |
| | | const minutes = now.getMinutes(); |
| | | const seconds = now.getSeconds(); |
| | | return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; |
| | | }, |
| | | uploadAvatarSuccess (file) { |
| | | this.$nextTick(() => { |
| | | if (this.loadingInstance) { |
| | | this.loadingInstance.close() |
| | | } |
| | | }) |
| | | console.log('file', file) |
| | | const item = file.data[0] |
| | | if (['.mp4', '.avi', '.flv', '.wmv'].some(char => item.imgaddr.includes(char))) { |
| | | this.fileList.push({ |
| | | type: 1, |
| | | fileurl: item.imgaddr, |
| | | fileurlFull: item.url |
| | | }) |
| | | } else { |
| | | this.fileList.push({ |
| | | type: 0, |
| | | fileurl: item.imgaddr, |
| | | fileurlFull: item.url |
| | | }) |
| | | } |
| | | console.log('file', this.fileList) |
| | | // this.$set(this.param, 'faceImg', file.imgurl) |
| | | // this.$set(this.param, 'faceImgUrl', file.imgurlfull) |
| | | this.form.multifileList.push({ ...item, fileurl: item.imgaddr, name: item.originname, userName: this.userInfo.realname, createTime: this.getDay() }) |
| | | }, |
| | | close() { |
| | | this.isShowModal = false |
| | | close () { |
| | | this.$emit('close') |
| | | } |
| | | } |
| | |
| | | .tabs { |
| | | display: flex; |
| | | margin-bottom: 20px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | |
| | | .tab { |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow width="100%" :title="title" :visible.sync="visible" :confirm-working="isWorking" @close="close" |
| | | @confirm="confirm"> |
| | | <div class="main"> |
| | | <div class="main_content"> |
| | | <el-form :model="form" label-position="top" ref="form" :rules="rules"> |
| | | <div class="head"> |
| | | <div class="m_title">åºç¡ä¿¡æ¯</div> |
| | | </div> |
| | | <div class="list"> |
| | | <el-form-item label="å
³èåå" prop="contractId"> |
| | | <el-select v-model="form.contractId" @change="changeContract" placeholder="è¯·éæ©"> |
| | | <el-option v-for="(item, index) in contract" :key="index" :value="item.id" :label="item.code"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="仿¬¾æ¹" prop="renterName"> |
| | | <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-option |
| | | v-for="(item, index) in houseList" |
| | | :key="index" |
| | | :value="item.id" |
| | | :label="item.projectName + item.buildingName + item.floorName + item.roomName" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="è´¹ç¨ç±»å" prop="costType"> |
| | | <el-select v-model="form.costType" placeholder="è¯·éæ©"> |
| | | <el-option :value="0" label="ç§èµè´¹"></el-option> |
| | | <el-option :value="1" label="ç©ä¸è´¹"></el-option> |
| | | <el-option :value="2" label="ç§èµæ¼é"></el-option> |
| | | <el-option :value="3" label="ç©ä¸è¯é"></el-option> |
| | | <el-option :value="4" label="æ°´çµè´¹"></el-option> |
| | | <el-option :value="5" label="æé¡¹è´¹"></el-option> |
| | | <el-option :value="6" label="å
¶ä»"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="è®¡è´¹å¨æ" prop="date"> |
| | | <el-date-picker |
| | | type="daterange" |
| | | range-separator="è³" |
| | | v-model="form.date" |
| | | @change="changeDate" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ" |
| | | value-format="yyyy-MM-dd" |
| | | placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="åºä»éé¢" prop="totleFee"> |
| | | <el-input v-model="form.totleFee" placeholder="请è¾å
¥åºæ¶éé¢" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="åºä»æ¥æ" prop="planPayDate"> |
| | | <el-date-picker type="date" v-model="form.planPayDate" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="æå±å
¬å¸" prop="companyId"> |
| | | <el-select v-model="form.companyId" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="(item, index) in comparyList" |
| | | :key="index" |
| | | :value="item.id" |
| | | :label="item.name" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item style="width: 100%;" label="è´¦å夿³¨" prop="remark"> |
| | | <el-input type="textarea" :rows="5" v-model="form.remark" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | <div class="file_wrap"> |
| | | <div class="head"> |
| | | <div>è´¦åéä»¶</div> |
| | | <el-upload class="upload-demo" :show-file-list="false" :data="uploadData" :action="uploadImgUrl" |
| | | :on-success="uploadAvatarSuccess" :before-upload="beforeUpload" :on-error="uploadError"> |
| | | <el-button icon="el-icon-plus" plain>æ·»å éä»¶</el-button> |
| | | </el-upload> |
| | | </div> |
| | | <el-table :data="form.multifileList" stripe> |
| | | <el-table-column prop="originname" label="éä»¶åç§°" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="userName" label="æä½äºº" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="createTime" label="æä½æ¶é´" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column label="æä½" align="center" min-width="100"> |
| | | <template slot-scope="{row}"> |
| | | <span class="cu red" @click="dele(row.imgaddr)">å é¤</span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import { rules } from './config' |
| | | import { create } from '@/api/bill' |
| | | import { list as listAll } from '@/api/contract' |
| | | import { companyList } from '@/api/company' |
| | | import { Message, Loading } from 'element-ui' |
| | | import { getContractRoom } from '@/api/house' |
| | | import { mapState } from 'vuex' |
| | | export default { |
| | | name: 'bullEditFu', |
| | | components: { |
| | | GlobalWindow |
| | | }, |
| | | computed: { |
| | | ...mapState(['userInfo']) |
| | | }, |
| | | extends: BaseOpera, |
| | | data () { |
| | | return { |
| | | form: { |
| | | contractId: '', |
| | | renterName: '', |
| | | renterId: '', |
| | | costType: '', |
| | | type: '', |
| | | companyId: '', |
| | | remark: '', |
| | | startDate: '', |
| | | endDate: '', |
| | | totleFee: '', |
| | | planPayDate: '', |
| | | multifileList: [], |
| | | ywContractRoomList: [], |
| | | date: [], |
| | | RoomName: '' |
| | | }, |
| | | rules, |
| | | loadingInstance: null, |
| | | uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch', |
| | | fileList: [], |
| | | uploadData: { |
| | | folder: 'YW_CONTRACT_BILL' |
| | | }, |
| | | contract: [], |
| | | payerList: [], |
| | | comparyList: [], |
| | | houseList: [] |
| | | } |
| | | }, |
| | | methods: { |
| | | open (title, target) { |
| | | this.title = title |
| | | this.form.multifileList = [] |
| | | this.getListAll() |
| | | this.getCompanyList() |
| | | this.visible = true |
| | | // æ°å»º |
| | | if (target == null) { |
| | | this.$nextTick(() => { |
| | | this.$refs.form.resetFields() |
| | | this.form[this.configData['field.id']] = null |
| | | }) |
| | | return |
| | | } |
| | | // ç¼è¾ |
| | | this.$nextTick(() => { |
| | | for (const key in this.form) { |
| | | this.form[key] = target[key] |
| | | } |
| | | }) |
| | | }, |
| | | changeContract (e) { |
| | | this.form.renterName = this.contract.filter(item => { |
| | | if (item.id === e) { |
| | | return item |
| | | } |
| | | })[0].renterName |
| | | this.getHouseDate() |
| | | }, |
| | | getHouseDate () { |
| | | getContractRoom({ contractId: this.form.contractId, type: 0 }) |
| | | .then(res => { |
| | | this.houseList = res |
| | | }) |
| | | }, |
| | | confirm () { |
| | | this.$refs.form.validate((valid) => { |
| | | if (!valid) return |
| | | this.isWorking = true |
| | | let obj = JSON.parse(JSON.stringify(this.form)) |
| | | obj.ywContractRoomList = obj.ywContractRoomList.map(id => { |
| | | return { roomId: id } |
| | | }) |
| | | obj.feeType = 0 |
| | | obj.billType = 1 |
| | | create(obj) |
| | | .then(() => { |
| | | this.visible = false |
| | | this.$tip.apiSuccess('æ°å»ºæå') |
| | | this.$emit('success') |
| | | }) |
| | | .finally(() => { |
| | | this.isWorking = false |
| | | }) |
| | | }) |
| | | }, |
| | | dele (imgaddr) { |
| | | this.form.multifileList.forEach((item, index) => { |
| | | if (imgaddr === item.imgaddr) { |
| | | this.form.multifileList.splice(index, 1) |
| | | } |
| | | }) |
| | | }, |
| | | openHouse () { |
| | | this.$refs.selectHouse.open('éæ©æ¿æº', { contractId: this.form.contractId, type: 0 }) |
| | | }, |
| | | getCompanyList () { |
| | | companyList({}) |
| | | .then(res => { |
| | | this.comparyList = res |
| | | }) |
| | | }, |
| | | getListAll () { |
| | | listAll({}) |
| | | .then(res => { |
| | | console.log(res) |
| | | this.contract = res |
| | | }) |
| | | }, |
| | | changeDate (e) { |
| | | if (!e || e.length === 0) { |
| | | this.form.startDate = '' |
| | | this.form.endDate = '' |
| | | } else { |
| | | this.form.startDate = e[0] |
| | | this.form.endDate = e[1] |
| | | } |
| | | }, |
| | | beforeUpload (file) { |
| | | this.loadingInstance = Loading.service({ |
| | | lock: true, |
| | | text: 'Loading', |
| | | spinner: 'el-icon-loading', |
| | | background: 'rgba(0, 0, 0, 0.7)' |
| | | }) |
| | | }, |
| | | uploadError () { |
| | | this.$nextTick(() => { // 以æå¡çæ¹å¼è°ç¨ç Loading éè¦å¼æ¥å
³é |
| | | if (this.loadingInstance) { |
| | | this.loadingInstance.close() |
| | | } |
| | | }) |
| | | }, |
| | | getDay () { |
| | | const now = new Date(); |
| | | const year = now.getFullYear(); |
| | | const month = now.getMonth() + 1; // å 1使å
¶ä»1å¼å§ |
| | | const day = now.getDate(); |
| | | const hours = now.getHours(); |
| | | const minutes = now.getMinutes(); |
| | | const seconds = now.getSeconds(); |
| | | return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; |
| | | }, |
| | | uploadAvatarSuccess (file) { |
| | | this.$nextTick(() => { |
| | | if (this.loadingInstance) { |
| | | this.loadingInstance.close() |
| | | } |
| | | }) |
| | | const item = file.data[0] |
| | | this.form.multifileList.push({ ...item, fileurl: item.imgaddr, name: item.originname, userName: this.userInfo.realname, createTime: this.getDay() }) |
| | | }, |
| | | close () { |
| | | this.$emit('close') |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import '@/assets/style/variables.scss'; |
| | | |
| | | |
| | | .cost_tabs { |
| | | justify-content: flex-start; |
| | | border: none; |
| | | |
| | | .tab { |
| | | height: 36px; |
| | | line-height: 36px; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | |
| | | .main { |
| | | display: flex; |
| | | margin-bottom: 20px; |
| | | |
| | | .main_content { |
| | | flex: 1; |
| | | margin-right: 20px; |
| | | |
| | | .head { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | |
| | | .tabs { |
| | | display: flex; |
| | | margin-bottom: 20px; |
| | | align-items: center; |
| | | justify-content: center; |
| | | |
| | | .tab { |
| | | height: 14px; |
| | | line-height: 14px; |
| | | cursor: pointer; |
| | | border: 1px solid #ebebeb; |
| | | padding: 12px 24px; |
| | | } |
| | | |
| | | .active { |
| | | font-weight: 500; |
| | | color: $primary-color; |
| | | border: 1px solid $primary-color; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | |
| | | .el-form-item { |
| | | width: 33.33%; |
| | | box-sizing: border-box; |
| | | padding: 0 12px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .main_house { |
| | | width: 320px; |
| | | padding: 24px 12px; |
| | | border: 1px solid #c3c6cd; |
| | | border-radius: 2px; |
| | | |
| | | .title { |
| | | font-size: 16px; |
| | | font-weight: 500; |
| | | margin-bottom: 30px; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | .total { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | height: 32px; |
| | | background-color: #e7e9f5; |
| | | |
| | | span { |
| | | width: 160px; |
| | | text-align: center; |
| | | } |
| | | } |
| | | |
| | | .file_wrap { |
| | | padding: 20px 16px; |
| | | border: 1px solid #c3c6cd; |
| | | border-radius: 2px; |
| | | |
| | | .head { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | } |
| | | |
| | | .m_title { |
| | | font-weight: 500; |
| | | font-size: 14px; |
| | | margin-bottom: 15px; |
| | | margin-top: 10px; |
| | | } |
| | | </style> |
| | |
| | | const validateArr = (rule, value, callback) => { |
| | | if (!value && value.length === 0) { |
| | | callback(new Error('è¯·éæ©')); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | export const rules = { |
| | | name: [{ required: true, message: '请è¾å
¥' }] |
| | | } |
| | | contractId: [{ required: true, message: 'ä¸è½ä¸ºç©º' }], |
| | | customerName: [{ required: true, message: 'ä¸è½ä¸ºç©º' }], |
| | | ywContractRoomList: [{ required: true, validator: validateArr, trigger: 'blur' }], |
| | | date: [{ required: true, validator: validateArr, trigger: 'blur' }], |
| | | costType: [{ required: true, message: 'ä¸è½ä¸ºç©º' }], |
| | | startDate: [{ required: true, message: 'ä¸è½ä¸ºç©º' }], |
| | | totleFee: [{ required: true, message: 'ä¸è½ä¸ºç©º' }], |
| | | planPayDate: [{ required: true, message: 'ä¸è½ä¸ºç©º' }], |
| | | companyId: [{ required: true, message: 'ä¸è½ä¸ºç©º' }] |
| | | } |
| | |
| | | <template> |
| | | <GlobalWindow width="100%" :title="title" :visible.sync="isShowModal" :confirm-working="isWorking" @close="close" |
| | | <GlobalWindow width="100%" :title="title" :visible.sync="visible" :confirm-working="isWorking" @close="close" |
| | | @confirm="confirm"> |
| | | <div class="main"> |
| | | <div class="main_content"> |
| | | <el-form :model="param" label-position="top" ref="paramRef" :rules="rules"> |
| | | <el-form :model="form" label-position="top" ref="paramRef" :rules="rules"> |
| | | <div class="head"> |
| | | <div class="m_title">æµæ°´ä¿¡æ¯</div> |
| | | </div> |
| | | <div class="list"> |
| | | <el-form-item label="å
³èåå" prop="type"> |
| | | <el-select v-model="param.type" placeholder="è¯·éæ©" clearable> |
| | | <el-option v-for="item in types" :value="item.value" :label="item.name"></el-option> |
| | | </el-select> |
| | | <el-form-item label="å
³èåå" required> |
| | | <el-input v-model="form.contractCode" disabled placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="è´¹ç¨ç±»å" prop="code"> |
| | | <el-input v-model="param.code" placeholder="请è¾å
¥ååç¼å·" v-trim /> |
| | | <el-form-item label="è´¹ç¨ç±»å" required> |
| | | <el-input v-model="form.costTypeName" disabled placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="è´¹å卿" prop="aaa"> |
| | | <el-select v-model="param.code" placeholder="è¯·éæ©" clearable> |
| | | <el-option v-for="item in agentList" :value="item.id" :label="item.name"></el-option> |
| | | </el-select> |
| | | <el-form-item label="è®¡è´¹å¨æ" required> |
| | | <el-input v-model="form.date" disabled placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="åºæ¶éé¢" prop=""> |
| | | <el-input v-model="param.code" placeholder="请è¾å
¥å®æ¶éé¢" v-trim /> |
| | | <el-form-item label="åºæ¶éé¢" prop="receivableFee"> |
| | | <el-input v-model="form.receivableFee" placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="宿¶éé¢" prop=""> |
| | | <el-input v-model="param.code" placeholder="请è¾å
¥å®æ¶éé¢" v-trim /> |
| | | <el-form-item label="宿¶éé¢" prop="actReceivableFee"> |
| | | <el-input v-model="form.actReceivableFee" placeholder="请è¾å
¥" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="å
¥è´¦æ¥æ" prop=""> |
| | | <el-date-picker type="date" v-model="param.getDate" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | <el-form-item label="å
¥è´¦æ¥æ" prop="actPayDate"> |
| | | <el-date-picker type="date" v-model="form.actPayDate" value-format="yyyy-MM-dd" placeholder="è¯·éæ©" /> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶æ¬¾æ¹å¼" prop=""> |
| | | <el-select v-model="param.content" placeholder="è¯·éæ©"> |
| | | <el-form-item label="æ¶æ¬¾æ¹å¼" prop="payType"> |
| | | <el-select v-model="form.payType" placeholder="è¯·éæ©"> |
| | | <el-option label="ç°é" :value="1"></el-option> |
| | | <el-option label="ç½é¶è½¬è´¦" :value="2"></el-option> |
| | | <el-option label="POSæº" :value="3"></el-option> |
| | |
| | | <el-option label="å
¶å®æ¹å¼" :value="7"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æå±å
¬å¸" prop=""> |
| | | <el-select v-model="param.code" placeholder="è¯·éæ©" clearable> |
| | | <el-option v-for="item in agentList" :value="item.id" :label="item.name"></el-option> |
| | | <el-form-item label="æå±å
¬å¸" prop="companyName"> |
| | | <el-input disabled v-model="form.companyName" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶æ¯è´¦æ·" prop="accountId"> |
| | | <el-select v-model="form.accountId" placeholder="è¯·éæ©" clearable> |
| | | <el-option v-for="item in agentList" :value="item.id" :label="item.title"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶æ¯è´¦æ·" prop=""> |
| | | <el-select v-model="param.code" placeholder="è¯·éæ©" clearable> |
| | | <el-option v-for="item in agentList" :value="item.id" :label="item.name"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="夿³¨" prop="" style="width: 100%;"> |
| | | <el-input type="textarea" :rows="6" v-model="param.content" placeholder="请è¾å
¥" /> |
| | | <el-form-item label="夿³¨" prop="remark" style="width: 100%;"> |
| | | <el-input type="textarea" :rows="6" v-model="form.remark" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | |
| | | <div class="head"> |
| | | <div>è´¦åéä»¶</div> |
| | | <el-upload class="upload-demo" :show-file-list="false" :data="uploadData" :action="uploadImgUrl" |
| | | :on-success="uploadAvatarSuccess" :before-upload="beforeUpload" :on-error="uploadError"> |
| | | :on-success="uploadAvatarSuccess" :before-upload="beforeUpload" :on-error="uploadError"> |
| | | <el-button icon="el-icon-plus" plain>æ·»å éä»¶</el-button> |
| | | </el-upload> |
| | | </div> |
| | | <el-table :data="param.list" stripe> |
| | | <el-table-column prop="" label="éä»¶åç§°" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="æä½äºº" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="æä½æ¶é´" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="æä½" align="center" min-width="100"> |
| | | <template v-slot="scope"> |
| | | <span class="cu red">å é¤</span> |
| | | <el-table :data="form.multifileList" stripe> |
| | | <el-table-column prop="name" label="éä»¶åç§°" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="userName" label="æä½äºº" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="createTime" label="æä½æ¶é´" align="center" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column label="æä½" align="center" min-width="100"> |
| | | <template slot-scope="{ row }"> |
| | | <span class="cu red" @click="dele(row.imgaddr)">å é¤</span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import { rules } from './config' |
| | | import { ywAccountList } from '@/api/bill' |
| | | import { create } from '@/api/ywContractRevenue' |
| | | import { Message, Loading } from 'element-ui' |
| | | import { mapState } from 'vuex' |
| | | export default { |
| | | name: "flowingWater", |
| | | components: { |
| | | GlobalWindow |
| | | }, |
| | | computed: { |
| | | ...mapState(['userInfo']) |
| | | }, |
| | | extends: BaseOpera, |
| | | data() { |
| | | return { |
| | | isShowModal: false, |
| | | title: '', |
| | | activeTabs: '0', |
| | | param: {}, |
| | | form: { |
| | | billId: '', |
| | | billType: '', |
| | | costType: '', |
| | | contractCode: '', |
| | | contractId: '', |
| | | startDate: '', |
| | | endDate: '', |
| | | date: '', |
| | | companyId: '', |
| | | actReceivableFee: '', |
| | | actPayDate: '', |
| | | payType: '', |
| | | companyName: '', |
| | | remark: '', |
| | | accountId: '', |
| | | multifileList: [], |
| | | costTypeName: '' |
| | | }, |
| | | rules, |
| | | timeTab: '0', |
| | | |
| | | loadingInstance: null, |
| | | uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch', |
| | | fileList: [], |
| | | uploadData: { |
| | | folder: 'HIDDEN_DANGER_FILE' |
| | | folder: 'YW_CONTRACT_BILL' |
| | | }, |
| | | |
| | | types: [ |
| | | { name: 'ç©ä¸+ç§èµåå', value: 0 }, |
| | | { name: 'ç§èµåå', value: 1 }, |
| | | { name: 'ç©ä¸åå', value: 2 }, |
| | | ], |
| | | agentList: [], //ç»å人 |
| | | projectList: [], |
| | | comparyList: [], // å
¬å¸ |
| | | renterList: [], // ç§å®¢ |
| | | contacts: [], // è系人 |
| | | value: [], |
| | | options: [ |
| | | { |
| | | value: 1, |
| | | label: 'ä¸å', |
| | | children: [{ |
| | | value: 2, |
| | | label: '䏿µ·', |
| | | children: [ |
| | | { value: 3, label: 'æ®é' }, |
| | | { value: 4, label: 'é»å' }, |
| | | { value: 5, label: '徿±' } |
| | | ] |
| | | }, { |
| | | value: 7, |
| | | label: 'æ±è', |
| | | children: [ |
| | | { value: 8, label: 'å京' }, |
| | | { value: 9, label: 'èå·' }, |
| | | { value: 10, label: 'æ é¡' } |
| | | ] |
| | | }, { |
| | | value: 12, |
| | | label: 'æµæ±', |
| | | children: [ |
| | | { value: 13, label: 'æå·' }, |
| | | { value: 14, label: '宿³¢' }, |
| | | { value: 15, label: 'åå
´' } |
| | | ] |
| | | }] |
| | | }, |
| | | { |
| | | value: 17, |
| | | label: '西å', |
| | | children: [{ |
| | | value: 18, |
| | | label: 'é西', |
| | | children: [ |
| | | { value: 19, label: '西å®' }, |
| | | { value: 20, label: 'å»¶å®' } |
| | | ] |
| | | }, { |
| | | value: 21, |
| | | label: 'æ°çç»´å¾å°æèªæ²»åº', |
| | | children: [ |
| | | { value: 22, label: 'ä¹é²æ¨é½' }, |
| | | { value: 23, label: 'å
æçä¾' } |
| | | ] |
| | | }] |
| | | } |
| | | ], |
| | | cactiveTabs: 0, |
| | | paramCost: {}, |
| | | payMethods: [ |
| | | { name: '䏿¬¡æ§ä»æ¬¾', value: 0 }, |
| | | { name: '3个æä¸ä»', value: 1 }, |
| | | { name: '6个æä¸ä»', value: 2 }, |
| | | { name: '1å¹´ä¸ä»', value: 2 }, |
| | | ], |
| | | unitOps: [ |
| | | { name: 'å
/m²·天', value: 0 }, |
| | | { name: 'å
/m²·æ', value: 1 }, |
| | | { name: 'å
/天', value: 2 }, |
| | | { name: 'å
/æ', value: 3 }, |
| | | { name: 'å
/å¹´', value: 4 }, |
| | | { name: 'å
/m²·年', value: 5 }, |
| | | { name: 'å
/åº', value: 6 }, |
| | | ], |
| | | agentList: [] |
| | | } |
| | | }, |
| | | created() { |
| | | const { param } = this |
| | | this.title = param.id ? 'ç¼è¾æ¶æ¬¾è´¦å' : 'åå»ºæ¶æ¬¾è´¦å' |
| | | }, |
| | | methods: { |
| | | tabsClick(val) { |
| | | this.activeTabs = val |
| | | }, |
| | | timeTabClick(val) { |
| | | this.timeTab = val |
| | | }, |
| | | getDetail() { |
| | | |
| | | confirm () { |
| | | create(this.form) |
| | | .then(res => { |
| | | console.log(res) |
| | | }) |
| | | }, |
| | | handleRent() { |
| | | this.$refs.MemberSearchRef.openModal() |
| | |
| | | houseChange(e) { |
| | | console.log(e) |
| | | console.log(this.value) |
| | | |
| | | }, |
| | | getDates (companyId) { |
| | | ywAccountList({ |
| | | companyId, |
| | | isdeleted: 0, |
| | | status: 0 |
| | | }).then(res => { |
| | | this.agentList = res |
| | | }) |
| | | }, |
| | | dele (imgaddr) { |
| | | this.form.multifileList.forEach((item, index) => { |
| | | if (imgaddr === item.imgaddr) { |
| | | this.form.multifileList.splice(index, 1) |
| | | } |
| | | }) |
| | | }, |
| | | beforeUpload(file) { |
| | | // if (['video/mp4', 'video/ogg', 'video/flv', 'video/avi', 'video/wmv', 'video/rmvb', 'image/jpeg', 'image/jpg', 'image/png', 'image/gif'].indexOf(file.type) == -1) { |
| | | // this.$message.error('请ä¸ä¼ æ£ç¡®çè§é¢/å¾çæ ¼å¼') |
| | | // return false |
| | | // } |
| | | this.loadingInstance = Loading.service({ |
| | | lock: true, |
| | | text: 'Loading', |
| | |
| | | } |
| | | }) |
| | | }, |
| | | getDay () { |
| | | const now = new Date() |
| | | const year = now.getFullYear() |
| | | const month = now.getMonth() + 1 // å 1使å
¶ä»1å¼å§ |
| | | const day = now.getDate() |
| | | const hours = now.getHours() |
| | | const minutes = now.getMinutes() |
| | | const seconds = now.getSeconds() |
| | | return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; |
| | | }, |
| | | uploadAvatarSuccess(file) { |
| | | this.$nextTick(() => { // 以æå¡çæ¹å¼è°ç¨ç Loading éè¦å¼æ¥å
³é |
| | | if (this.loadingInstance) { |
| | | this.loadingInstance.close() |
| | | } |
| | | }) |
| | | console.log('file', file) |
| | | const item = file.data[0] |
| | | if (['.mp4', '.avi', '.flv', '.wmv'].some(char => item.imgaddr.includes(char))) { |
| | | this.fileList.push({ |
| | | type: 1, |
| | | fileurl: item.imgaddr, |
| | | fileurlFull: item.url |
| | | }) |
| | | } else { |
| | | this.fileList.push({ |
| | | type: 0, |
| | | fileurl: item.imgaddr, |
| | | fileurlFull: item.url |
| | | }) |
| | | } |
| | | console.log('file', this.fileList) |
| | | // this.$set(this.param, 'faceImg', file.imgurl) |
| | | // this.$set(this.param, 'faceImgUrl', file.imgurlfull) |
| | | console.log(item) |
| | | this.form.multifileList.push({ ...item, fileurl: item.imgaddr, name: item.originname, userName: this.userInfo.realname, createTime: this.getDay() }) |
| | | }, |
| | | close() { |
| | | this.isShowModal = false |
| | | this.$emit('close') |
| | | }, |
| | | open(title, target) { |
| | | this.title = title |
| | | this.isShowModal = true |
| | | this.visible = true |
| | | this.$nextTick(() => { |
| | | for (const key in this.form) { |
| | | this.form[key] = target[key] |
| | | } |
| | | }) |
| | | console.log(this.form) |
| | | this.getDates(target.companyId) |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | width="100%" |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | :confirm-working="isWorking" |
| | | @close="close" |
| | | @confirm="confirm"> |
| | | <el-table |
| | | :data="houseList" |
| | | border |
| | | @selection-change="handleSelectionChange" |
| | | style="width: 100%"> |
| | | <el-table-column |
| | | type="selection" |
| | | width="55"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="projectName" |
| | | label="项ç®åç§°"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="buildingName" |
| | | label="楼å®åç§°"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="floorName" |
| | | label="楼å±åç§°"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="roomName" |
| | | label="æ¿é´åç§°"> |
| | | </el-table-column> |
| | | </el-table> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import { getContractRoom } from '@/api/house' |
| | | export default { |
| | | name: 'selectHouse', |
| | | components: { |
| | | GlobalWindow |
| | | }, |
| | | extends: BaseOpera, |
| | | data () { |
| | | return { |
| | | houseList: [], |
| | | form: {}, |
| | | seleData: [] |
| | | } |
| | | }, |
| | | methods: { |
| | | open (title, target) { |
| | | this.title = title |
| | | this.form = target |
| | | this.getAll() |
| | | }, |
| | | getAll () { |
| | | getContractRoom({ ...this.form }) |
| | | .then(res => { |
| | | console.log(res) |
| | | this.houseList = res |
| | | this.visible = true |
| | | }) |
| | | }, |
| | | handleSelectionChange (e) { |
| | | console.log(e) |
| | | this.seleData = e |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import '@/assets/style/variables.scss'; |
| | | |
| | | |
| | | .cost_tabs { |
| | | justify-content: flex-start; |
| | | border: none; |
| | | |
| | | .tab { |
| | | height: 36px; |
| | | line-height: 36px; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | |
| | | .main { |
| | | display: flex; |
| | | margin-bottom: 20px; |
| | | |
| | | .main_content { |
| | | flex: 1; |
| | | margin-right: 20px; |
| | | |
| | | .head { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | |
| | | .tabs { |
| | | display: flex; |
| | | margin-bottom: 20px; |
| | | align-items: center; |
| | | justify-content: center; |
| | | |
| | | .tab { |
| | | height: 14px; |
| | | line-height: 14px; |
| | | cursor: pointer; |
| | | border: 1px solid #ebebeb; |
| | | padding: 12px 24px; |
| | | } |
| | | |
| | | .active { |
| | | font-weight: 500; |
| | | color: $primary-color; |
| | | border: 1px solid $primary-color; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | |
| | | .el-form-item { |
| | | width: 33.33%; |
| | | box-sizing: border-box; |
| | | padding: 0 12px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .main_house { |
| | | width: 320px; |
| | | padding: 24px 12px; |
| | | border: 1px solid #c3c6cd; |
| | | border-radius: 2px; |
| | | |
| | | .title { |
| | | font-size: 16px; |
| | | font-weight: 500; |
| | | margin-bottom: 30px; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | .total { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | height: 32px; |
| | | background-color: #e7e9f5; |
| | | |
| | | span { |
| | | width: 160px; |
| | | text-align: center; |
| | | } |
| | | } |
| | | |
| | | .file_wrap { |
| | | padding: 20px 16px; |
| | | border: 1px solid #c3c6cd; |
| | | border-radius: 2px; |
| | | |
| | | .head { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | } |
| | | |
| | | .m_title { |
| | | font-weight: 500; |
| | | font-size: 14px; |
| | | margin-bottom: 15px; |
| | | margin-top: 10px; |
| | | } |
| | | </style> |
| | |
| | | <div class="main_app"> |
| | | <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> |
| | | <div class="mt20"> |
| | | <el-button type="primary" @click="handleEdit()" icon="el-icon-plus" |
| | | v-permissions="['business:ywpatrolline:create']">æ°å»º</el-button> |
| | | <el-button @click="handleEdit()" v-permissions="['business:ywpatrolline:create']">导åº</el-button> |
| | | </div> |
| | | <el-table v-loading="loading" :data="list" stripe> |
| | | <el-table-column prop="" label="客æ·åç§°" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="ååç¼å·" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="åºå·" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="è´¦å·ç¼å·" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="æ¶æ¯ç±»å" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="åçéé¢" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="æ¶æ¬¾æ¹å¼" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="å
¥è´¦æ¥æ" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="ç¶æ" min-width="100" show-overflow-tooltip> |
| | | <template v-slot="scope"> |
| | | <el-switch v-model="scope.row.status" active-value="0" inactive-value="1"> |
| | | </el-switch> |
| | | <el-table-column prop="customerName" label="客æ·åç§°" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="contractCode" label="ååç¼å·" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column label="æ¿å·" min-width="100" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <div style="display: flex; flex-direction: column;" v-if="row.roomPathName"> |
| | | <span v-for="(item, index) in row.roomPathName.split(';')" :key="index">{{item}}</span> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" min-width="120" fixed="right"> |
| | | <el-table-column prop="billCode" label="è´¦åç¼å·" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column label="æ¶æ¯ç±»å" min-width="100" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <!-- <el-button type="text" @click="handleEdit(row)" icon="el-icon-edit" |
| | | v-permissions="['business:category:update']">ç¼è¾</el-button> --> |
| | | <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" |
| | | v-permissions="['business:category:delete']">鿬¾</el-button> |
| | | <span v-if="row.revenueType === 0">æ¶å
¥</span> |
| | | <span v-if="row.revenueType === 1">æ¯åº</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="actReceivableFee" 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.payType === 0">ç°é</span> |
| | | <span v-if="row.payType === 1">ç½é¶è½¬è´¦</span> |
| | | <span v-if="row.payType === 2">POSæº</span> |
| | | <span v-if="row.payType === 3">æ¯ä»å®</span> |
| | | <span v-if="row.payType === 4">微信</span> |
| | | <span v-if="row.payType === 5">转账æ¯ç¥¨</span> |
| | | <span v-if="row.payType === 6">å
¶ä»</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="payDateEnd" 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> |
| | | <template slot-scope="{row}"> |
| | | <el-tag type="success" v-if="row.status === 0">å¼å¯</el-tag> |
| | | <el-tag type="info" v-if="row.status === 1">å
³é</el-tag> |
| | | </template> |
| | | </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="closeDW(row.id)">å
³éæµæ°´</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | import Pagination from '@/components/common/Pagination' |
| | | import QueryForm from '@/components/common/QueryForm' |
| | | import Edit from './components/paymentsEdit.vue' |
| | | import { companyGetList, deleteById } from '@/api/business/company' |
| | | import { fetchList, close } from '@/api/ywContractRevenue' |
| | | export default { |
| | | components: { |
| | | Pagination, |
| | |
| | | queryFormConfig: { |
| | | formItems: [ |
| | | { |
| | | filed: 'name', |
| | | filed: 'customerName', |
| | | type: 'input', |
| | | label: '客æ·åç§°' |
| | | }, |
| | | { |
| | | filed: 'name', |
| | | filed: 'revenueType', |
| | | type: 'select', |
| | | label: 'æ¶æ¯ç±»å' |
| | | label: 'æ¶æ¯ç±»å', |
| | | options: [ |
| | | { value: 0, label: 'æ¶å
¥' }, |
| | | { value: 1, label: 'æ¯åº' } |
| | | ] |
| | | }, |
| | | { |
| | | filed: 'name', |
| | | filed: 'payType', |
| | | type: 'select', |
| | | label: 'æ¶æ¬¾æ¹å¼' |
| | | label: 'æ¶æ¬¾æ¹å¼', |
| | | options: [ |
| | | { value: 0, label: 'ç°é' }, |
| | | { value: 1, label: 'ç½é¶è½¬è´¦' }, |
| | | { value: 2, label: 'POSæº' }, |
| | | { value: 3, label: 'æ¯ä»å®' }, |
| | | { value: 4, label: '微信' }, |
| | | { value: 5, label: '转账æ¯ç¥¨' }, |
| | | { value: 6, label: 'å
¶ä»' } |
| | | ] |
| | | }, |
| | | { |
| | | filed: 'name', |
| | | filed: 'payDate', |
| | | type: 'daterange', |
| | | label: 'å
¥è´¦æ¥æ' |
| | | }, |
| | |
| | | getList(page) { |
| | | const { pagination, filters } = this |
| | | this.loading = true |
| | | companyGetList({ |
| | | fetchList({ |
| | | model: { |
| | | ...filters, |
| | | type: 2 |
| | | ...filters |
| | | }, |
| | | capacity: pagination.pageSize, |
| | | page: page || pagination.page, |
| | | }).then(res => { |
| | | this.loading = false |
| | | this.list = res.records || [] |
| | | this.list.forEach(item => { |
| | | item.stautsName = item.status == 0 ? 'æ£å¸¸' : item.status == 1 ? 'æå' : 'æ¥åº' |
| | | }) |
| | | this.pagination.total = res.total || 0 |
| | | }, () => { |
| | | this.loading = false |
| | | }) |
| | | }, |
| | | closeDW (id) { |
| | | this.$confirm('确认å
³éæ¤æµæ°´å?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | close(id) |
| | | .then(res => { |
| | | this.getList() |
| | | }) |
| | | }).catch(() => { |
| | | |
| | | }); |
| | | }, |
| | | handleEdit(row) { |
| | | this.showEdit = true |
| | | this.$nextTick(() => { |