|
|
@@ -1,1167 +0,0 @@
|
|
|
-<template>
|
|
|
- <div class="edit-view">
|
|
|
- <el-form
|
|
|
- :model="formData"
|
|
|
- :rules="rules"
|
|
|
- ref="form"
|
|
|
- label-width="120px"
|
|
|
- label-position="right"
|
|
|
- size="small"
|
|
|
- style="max-width:810px;"
|
|
|
- >
|
|
|
- <el-form-item prop="contractNumber" label="合同编号">
|
|
|
- <el-input v-model="formData.contractNumber" style="width:215px"> </el-input>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item prop="checkInType-+9899" label="合作模式">
|
|
|
- <el-select v-model="formData.checkInType">
|
|
|
- <el-option
|
|
|
- v-for="(item, index) in CustomerCooperationType"
|
|
|
- :key="index"
|
|
|
- :label="item.label"
|
|
|
- :value="item.value"
|
|
|
- >
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item prop="storeInfoId" label="公司" v-if="this.formData.checkInType != 'INDIVIDUAL'">
|
|
|
- <el-select filterable v-model="formData.customerId">
|
|
|
- <el-option
|
|
|
- v-for="(item, index) in customerInfo"
|
|
|
- :key="index"
|
|
|
- :label="item.coSimpleName + '(' + item.coFullName + ')'"
|
|
|
- :value="item.id"
|
|
|
- >
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="门店信息">
|
|
|
- <div
|
|
|
- class="stepInfo"
|
|
|
- v-for="(contractFree, index) in formData.contractStoreList"
|
|
|
- :key="index"
|
|
|
- style="width:360px"
|
|
|
- >
|
|
|
- <div class="step-title">门店{{ index + 1 }}</div>
|
|
|
- <div class="btnList">
|
|
|
- <el-button type="danger" @click.prevent="removeContractFree(contractFree)" size="mini"
|
|
|
- >删除该门店
|
|
|
- </el-button>
|
|
|
- </div>
|
|
|
-
|
|
|
- <el-form label-width="80px" label-position="left">
|
|
|
- <el-form-item class="form-item" label="门店名称">
|
|
|
- <el-select
|
|
|
- filterable
|
|
|
- v-model="contractFree.storeId"
|
|
|
- @change="getRoomTyeInfo(contractFree, index)"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="(item, index) in storeInfo"
|
|
|
- :key="index"
|
|
|
- :label="item.storeName"
|
|
|
- :value="item.id"
|
|
|
- >
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item class="form-item" label="减免类型">
|
|
|
- <el-select
|
|
|
- v-model="contractFree.personalFeeTypes"
|
|
|
- multiple
|
|
|
- filterable
|
|
|
- placeholder="请选择"
|
|
|
- value-key="id"
|
|
|
- style="width:215px"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="item in getPersonalFeeTypes(contractFree.storeId)"
|
|
|
- :key="item.id"
|
|
|
- :label="item.name"
|
|
|
- :value="item"
|
|
|
- >
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item
|
|
|
- prop="monthlyRent"
|
|
|
- label="月租金"
|
|
|
- v-if="formData.checkInType == 'INDIVIDUAL' || formData.checkInType == 'TEAM_POST_PAID'"
|
|
|
- >
|
|
|
- <el-input-number type="number" v-model="contractFree.monthlyRent"> </el-input-number>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item
|
|
|
- prop="monthlyRent"
|
|
|
- label="日租金"
|
|
|
- v-if="formData.checkInType == 'INDIVIDUAL' || formData.checkInType == 'TEAM_POST_PAID'"
|
|
|
- >
|
|
|
- <el-input-number type="number" v-model="contractFree.dayRent"> </el-input-number>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item
|
|
|
- prop="monthlyRent"
|
|
|
- label="日租金最大天数"
|
|
|
- v-if="formData.checkInType == 'INDIVIDUAL' || formData.checkInType == 'TEAM_POST_PAID'"
|
|
|
- >
|
|
|
- <el-input-number type="number" v-model="contractFree.daySize"> </el-input-number>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item
|
|
|
- class="form-item"
|
|
|
- label="选择房间"
|
|
|
- v-if="formData.checkInType == 'TEAM' || formData.checkInType == 'SCATTERED_BEDS'"
|
|
|
- >
|
|
|
- <el-select
|
|
|
- v-model="contractFree.contractRoomInfoList"
|
|
|
- multiple
|
|
|
- filterable
|
|
|
- placeholder="请选择"
|
|
|
- value-key="id"
|
|
|
- style="width:215px"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="item in getContractRoomInfoList(contractFree.storeId)"
|
|
|
- :key="item.id"
|
|
|
- :label="item.roomName"
|
|
|
- :value="item"
|
|
|
- >
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item
|
|
|
- label="房型信息"
|
|
|
- v-if="formData.checkInType == 'TEAM' || formData.checkInType == 'SCATTERED_BEDS'"
|
|
|
- >
|
|
|
- <div class="houseInfo" v-for="(room, index) in contractFree.roomList" :key="index">
|
|
|
- <div class="step-title">房型{{ index + 1 }}</div>
|
|
|
- <div class="btnList">
|
|
|
- <el-button
|
|
|
- size="mini"
|
|
|
- type="danger"
|
|
|
- @click.prevent="removeRoom(contractFree, room)"
|
|
|
- >
|
|
|
- 删除该房型
|
|
|
- </el-button>
|
|
|
- </div>
|
|
|
-
|
|
|
- <el-form-item label="房间类型" class="form-item">
|
|
|
- <el-select filterable v-model="room.roomTypeId">
|
|
|
- <el-option
|
|
|
- v-for="(item, index) in contractFree.roomTypeInfo"
|
|
|
- :key="index"
|
|
|
- :label="item.typeName"
|
|
|
- :value="item.id"
|
|
|
- >
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="床位数" class="form-item">
|
|
|
- <el-input-number type="number" v-model="room.beds"> </el-input-number>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="单价" class="form-item">
|
|
|
- <el-input-number type="number" v-model="room.price"> </el-input-number>
|
|
|
- </el-form-item>
|
|
|
- </div>
|
|
|
-
|
|
|
- <el-button type="primary" plain @click="addRoom(contractFree)">新增房型 </el-button>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- </div>
|
|
|
-
|
|
|
- <el-button type="primary" plain @click="addContractFree">新增门店 </el-button>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item
|
|
|
- prop="bedsAmount"
|
|
|
- label="合同人数"
|
|
|
- v-if="this.formData.checkInType == 'INDIVIDUAL' || this.formData.checkInType == 'TEAM_POST_PAID'"
|
|
|
- >
|
|
|
- <el-input-number type="number" v-model="formData.bedsAmount"> </el-input-number>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item
|
|
|
- prop="monthlyRent"
|
|
|
- label="月租金"
|
|
|
- v-if="formData.checkInType == 'TEAM' || formData.checkInType == 'SCATTERED_BEDS'"
|
|
|
- >
|
|
|
- <el-input-number type="number" v-model="formData.monthlyRent"> </el-input-number>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item prop="contractDays" label="合同期(月)">
|
|
|
- <el-input-number type="number" v-model="formData.contractMonthly"> </el-input-number>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item
|
|
|
- prop="contractTotalRent"
|
|
|
- label="合同总租金"
|
|
|
- v-if="formData.checkInType == 'TEAM' || formData.checkInType == 'SCATTERED_BEDS'"
|
|
|
- >
|
|
|
- <el-input-number type="number" v-model="formData.contractTotalRent"></el-input-number>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item prop="contractBeginTime" label="合同开始时间">
|
|
|
- <el-date-picker
|
|
|
- v-model="formData.contractBeginTime"
|
|
|
- type="datetime"
|
|
|
- value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
- placeholder="选择日期时间"
|
|
|
- >
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item prop="contractEndTime" label="合同结束时间">
|
|
|
- <el-date-picker
|
|
|
- v-model="formData.contractEndTime"
|
|
|
- type="datetime"
|
|
|
- value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
- placeholder="选择日期时间"
|
|
|
- @change="getContractDays"
|
|
|
- >
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item prop="contractDays" label="合同期(天)">
|
|
|
- <el-input-number disabled type="number" v-model="formData.contractDays"> </el-input-number>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item prop="flowBet" label="散客押金">
|
|
|
- <el-input-number type="number" v-model="formData.flowBet"> </el-input-number>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item
|
|
|
- prop="PayType"
|
|
|
- label="付款方式"
|
|
|
- v-if="formData.checkInType == 'TEAM' || formData.checkInType == 'SCATTERED_BEDS'"
|
|
|
- >
|
|
|
- <el-input v-model="formData.bet" style="width:130px" disabled>
|
|
|
- <template slot="prepend">押</template>
|
|
|
- </el-input>
|
|
|
- <el-input v-model="formData.pay" style="width:130px;margin-left:10px">
|
|
|
- <template slot="prepend">付</template>
|
|
|
- </el-input>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <el-button type="success" round @click="cycleGen" v-if="!showCycle">
|
|
|
- 生成账单
|
|
|
- </el-button>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="付款周期" v-if="showCycle">
|
|
|
- <div class="stepInfo">
|
|
|
- <el-form
|
|
|
- :inline="true"
|
|
|
- v-for="(cycle, index) in formData.cycles"
|
|
|
- :key="index"
|
|
|
- class="demo-form-inline"
|
|
|
- >
|
|
|
- <el-form-item :label="'周期' + (index + 1)"> </el-form-item>
|
|
|
- <el-form-item> </el-form-item>
|
|
|
-
|
|
|
- <!-- <el-form-item prop="cycle" label="周期">-->
|
|
|
- <!-- <el-input-number type="number" v-model="cycle.cycle" disable></el-input-number>-->
|
|
|
- <!-- </el-form-item>-->
|
|
|
-
|
|
|
- <el-form-item prop="cycleEndTime" label="时间节点">
|
|
|
- <el-date-picker
|
|
|
- v-model="cycle.cycleEndTime"
|
|
|
- type="datetime"
|
|
|
- value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
- placeholder="选择日期时间"
|
|
|
- >
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item prop="cycleMoney" label="收款金额">
|
|
|
- <el-input-number type="number" v-model="cycle.cycleMoney"></el-input-number>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <el-button type="danger" @click.prevent="removeCycle(cycle)">删除 </el-button>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- </div>
|
|
|
- <el-button type="primary" plain @click="addCycle">新增周期 </el-button>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item prop="contractRenewals" label="续约次数">
|
|
|
- <el-input-number type="number" v-model="formData.contractRenewals"></el-input-number>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item prop="departmentName" label="销售部门">
|
|
|
- <el-input disabled v-model="formData.departmentName" style="width:215px"></el-input>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item prop="saleName" label="销售员">
|
|
|
- <el-select filterable v-model="formData.saleId" :disabled="saleEdit" @change="changeSaleName">
|
|
|
- <el-option
|
|
|
- v-for="(item, index) in saleUser"
|
|
|
- :key="index"
|
|
|
- :label="item.nickname + '(' + item.departments[0].name + ')'"
|
|
|
- :value="item.id"
|
|
|
- >
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <!-- <el-form-item prop="departmentId" label="销售员部门id(预留)">-->
|
|
|
- <!-- <el-input v-model="formData.departmentId"></el-input>-->
|
|
|
- <!-- </el-form-item>-->
|
|
|
- <!-- <el-form-item prop="departmentName" label="销售员名称(预留)">-->
|
|
|
- <!-- <el-input v-model="formData.departmentName"></el-input>-->
|
|
|
- <!-- </el-form-item>-->
|
|
|
- <el-form-item prop="customerSource" label="客户来源">
|
|
|
- <el-select v-model="formData.customerSource">
|
|
|
- <el-option v-for="(item, index) in sourceData" :key="index" :label="item.label" :value="item.value">
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item prop="customerIndustry" label="客户行业">
|
|
|
- <el-input v-model="formData.customerIndustry" style="width:215px"></el-input>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="联系人">
|
|
|
- <div class="stepInfo" style="width:520px">
|
|
|
- <el-form
|
|
|
- :inline="true"
|
|
|
- v-for="(contacts, index) in formData.contactsList"
|
|
|
- :key="index"
|
|
|
- class="demo-form-inline"
|
|
|
- >
|
|
|
- <el-form-item :label="'联系人' + (index + 1)"> </el-form-item>
|
|
|
- <el-form-item label="姓名">
|
|
|
- <el-input placeholder="联系人姓名" v-model="contacts.name" style="width:120px"> </el-input>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="电话">
|
|
|
- <el-input placeholder="联系人电话号码" v-model="contacts.mobile" style="width:150px">
|
|
|
- </el-input>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <el-button type="danger" @click.prevent="removeContacts(contacts)">删除 </el-button>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- </div>
|
|
|
- <el-button type="primary" plain @click="addContacts">新增联系人 </el-button>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item prop="contactAddress" label="联系地址">
|
|
|
- <el-input v-model="formData.contactAddress" style="width:215px"> </el-input>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item prop="status" label="状态(在住 已退)">
|
|
|
- <el-select v-model="formData.status">
|
|
|
- <el-option v-for="(item, index) in statusData" :key="index" :label="item.label" :value="item.value">
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item prop="enclosure" label="附件">
|
|
|
- <el-upload
|
|
|
- drag
|
|
|
- class="single-upload"
|
|
|
- :action="uploadUrl"
|
|
|
- :show-file-list="true"
|
|
|
- :on-success="onSuccess"
|
|
|
- :before-upload="beforeUpload"
|
|
|
- :limit="1"
|
|
|
- multiple
|
|
|
- >
|
|
|
- <div></div>
|
|
|
- <i class="el-icon-upload"></i>
|
|
|
- <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
|
|
- </el-upload>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item prop="note" label="备注">
|
|
|
- <el-input
|
|
|
- type="textarea"
|
|
|
- placeholder="请输入内容"
|
|
|
- v-model="formData.note"
|
|
|
- maxlength="200"
|
|
|
- show-word-limit
|
|
|
- >
|
|
|
- </el-input>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存 </el-button>
|
|
|
- <el-button @click="onDelete" :loading="$store.state.fetchingData" type="danger" v-if="formData.id"
|
|
|
- >删除
|
|
|
- </el-button>
|
|
|
- <el-button @click="$router.go(-1)">取消</el-button>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- </div>
|
|
|
-</template>
|
|
|
-<script>
|
|
|
-import resolveUrl from 'resolve-url';
|
|
|
-
|
|
|
-export default {
|
|
|
- name: 'ContractEdit',
|
|
|
- created() {
|
|
|
- this.uploadUrl = resolveUrl(this.$baseUrl, 'upload/file');
|
|
|
-
|
|
|
- this.getStoreInfo();
|
|
|
- this.getCustomerInfo();
|
|
|
- this.getDepartmentGroup();
|
|
|
- if (this.$route.query.id) {
|
|
|
- this.$http
|
|
|
- .get(`/contract/get/${this.$route.query.id}`)
|
|
|
- .then(res => {
|
|
|
- this.getUser();
|
|
|
- if (!res.contactsList) {
|
|
|
- res.push({
|
|
|
- contactsList: [
|
|
|
- {
|
|
|
- name: '',
|
|
|
- mobile: ''
|
|
|
- }
|
|
|
- ]
|
|
|
- });
|
|
|
- }
|
|
|
- if (!res.contractStoreList) {
|
|
|
- res.push({
|
|
|
- contractStoreList: [
|
|
|
- {
|
|
|
- storeId: '',
|
|
|
- personalFeeTypes: [],
|
|
|
- roomList: [
|
|
|
- {
|
|
|
- price: '',
|
|
|
- beds: '',
|
|
|
- storeInfoId: '',
|
|
|
- roomTypeId: ''
|
|
|
- }
|
|
|
- ]
|
|
|
- }
|
|
|
- ]
|
|
|
- });
|
|
|
- } else {
|
|
|
- for (var i = res.contractStoreList.length - 1; i >= 0; i--) {
|
|
|
- let index = i;
|
|
|
- if (!res.contractStoreList[index].storeId) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- let query = {
|
|
|
- query: {
|
|
|
- storeId: res.contractStoreList[index].storeId
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- this.$http
|
|
|
- .get(`/roomTypeInfo/all`, query)
|
|
|
- .then(room => {
|
|
|
- res.contractStoreList[index].roomTypeInfo = room.content;
|
|
|
- })
|
|
|
- .catch(e => {
|
|
|
- this.$message.error(e.error);
|
|
|
- });
|
|
|
-
|
|
|
- //减免项信息
|
|
|
- this.$http
|
|
|
- .get(`/personalFeeType/all`, query)
|
|
|
- .then(per => {
|
|
|
- res.contractStoreList[index].personalFeeTypesData = per.content;
|
|
|
- })
|
|
|
- .catch(e => {
|
|
|
- this.$message.error(e.error);
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- this.formData = res;
|
|
|
- })
|
|
|
- .catch(e => {
|
|
|
- console.log(e);
|
|
|
- this.$message.error(e.error);
|
|
|
- });
|
|
|
- }
|
|
|
- },
|
|
|
- data() {
|
|
|
- return {
|
|
|
- saving: false,
|
|
|
- showCycle: false,
|
|
|
- uploadUrl: '',
|
|
|
- loading: false,
|
|
|
- imageUrl: '',
|
|
|
- text: '',
|
|
|
- textarea: '',
|
|
|
- saleEdit: false, //disables 为false
|
|
|
- formData: {
|
|
|
- bet: 1,
|
|
|
- checkInType: 'TEAM',
|
|
|
- cycles: [],
|
|
|
- contactsList: [
|
|
|
- {
|
|
|
- name: '',
|
|
|
- mobile: ''
|
|
|
- }
|
|
|
- ],
|
|
|
- contractStoreList: [
|
|
|
- {
|
|
|
- storeId: '',
|
|
|
- personalFeeTypes: [],
|
|
|
- contractRoomInfoList: [],
|
|
|
- roomTypeInfo: [],
|
|
|
- roomList: []
|
|
|
- // {
|
|
|
- // price: '',
|
|
|
- // beds: '',
|
|
|
- // storeInfoId: '',
|
|
|
- // roomTypeId: ''
|
|
|
- // }
|
|
|
- // ]
|
|
|
- }
|
|
|
- ],
|
|
|
- monthlyRent: 0,
|
|
|
- deposit: 0,
|
|
|
- contractMonthly: 0,
|
|
|
- contractDays: 0
|
|
|
- },
|
|
|
- rules: {},
|
|
|
- CustomerCooperationType: [
|
|
|
- {
|
|
|
- value: 'TEAM',
|
|
|
- label: '团队包房'
|
|
|
- },
|
|
|
- {
|
|
|
- value: 'SCATTERED_BEDS',
|
|
|
- label: '团队床位'
|
|
|
- },
|
|
|
- {
|
|
|
- value: 'TEAM_POST_PAID',
|
|
|
- label: '团散'
|
|
|
- },
|
|
|
- {
|
|
|
- value: 'INDIVIDUAL',
|
|
|
- label: '散客'
|
|
|
- }
|
|
|
- ],
|
|
|
- departmentGroup: [],
|
|
|
- saleUser: [],
|
|
|
- storeInfo: [],
|
|
|
- roomTyeInfo: [],
|
|
|
- customerInfo: [],
|
|
|
- personalFeeTypes: [],
|
|
|
- sourceData: [
|
|
|
- {
|
|
|
- value: 'NETWORK',
|
|
|
- label: '网络推广(58同城、赶集网、百姓网、贝壳租房、搜房网,其它)'
|
|
|
- },
|
|
|
- {
|
|
|
- value: 'PLATFORM',
|
|
|
- label: '平台推广(嗨住、巴乐兔、平安好房、蘑菇租房、其它)'
|
|
|
- },
|
|
|
- { value: 'TELEPHONE', label: '电话陌拜' },
|
|
|
- { value: 'GROUND_PUSH', label: '地推陌拜' },
|
|
|
- {
|
|
|
- value: 'WORD_MOUTH',
|
|
|
- label: '口碑推荐(老客户推荐、朋友推荐)'
|
|
|
- },
|
|
|
- { value: 'PEE', label: '中介同行' },
|
|
|
- { value: 'DOOR', label: '上门咨询' },
|
|
|
- { value: 'DOWN', label: '公司下发' },
|
|
|
- { value: 'ADD', label: '新增' },
|
|
|
- { value: 'RENEWAL', label: '续约' },
|
|
|
- { value: 'OTHER', label: '其他' }
|
|
|
- ],
|
|
|
- statusData: [
|
|
|
- { value: 'STAY_IN', label: '在住' },
|
|
|
- { value: 'RETREAT', label: '已退' }
|
|
|
- ]
|
|
|
- };
|
|
|
- },
|
|
|
- methods: {
|
|
|
- getUser() {
|
|
|
- this.$http
|
|
|
- .get('/user/my')
|
|
|
- .then(res => {
|
|
|
- if (res.position != '销售经理') {
|
|
|
- this.saleEdit = true;
|
|
|
- }
|
|
|
- })
|
|
|
- .catch(e => {
|
|
|
- this.$message.error(e.error);
|
|
|
- });
|
|
|
- },
|
|
|
- //
|
|
|
- cycleGen() {
|
|
|
- if (this.formData.checkInType == 'TEAM' || this.formData.checkInType == 'SCATTERED_BEDS') {
|
|
|
- alert(1);
|
|
|
- this.cycleClick();
|
|
|
- } else {
|
|
|
- alert(2);
|
|
|
- this.cycleClickINDIVIDUAL();
|
|
|
- }
|
|
|
- },
|
|
|
- cycleClickINDIVIDUAL() {
|
|
|
- this.formData.bet = 0;
|
|
|
- this.formData.pay = 1;
|
|
|
- this.formData.monthlyRent = 0;
|
|
|
- if (!this.formData.contractBeginTime) {
|
|
|
- this.$message.error('请输入合同开始时间');
|
|
|
- return;
|
|
|
- }
|
|
|
- if (!this.formData.contractEndTime) {
|
|
|
- this.$message.error('请输入合同结束时间');
|
|
|
- return;
|
|
|
- }
|
|
|
- if (this.formData.contractBeginTime > this.formData.contractEndTime) {
|
|
|
- this.$message.error('合同结束时间必须大于开始时间');
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- //计算周期数 计数30天为准
|
|
|
- // let cycleAround = Math.round(this.formData.contractDays/30/this.pay);
|
|
|
- // let moreDay = this.formData.contractDays - (cycleAround * 30);
|
|
|
- let endTime = new Date(this.formData.contractBeginTime);
|
|
|
-
|
|
|
- for (let i = 0; i < 36; i++) {
|
|
|
- let cycleMoney = 0;
|
|
|
- if (i == 0) {
|
|
|
- //交租时间默认为合同开始时间 交付费用 为 押 + 付
|
|
|
- cycleMoney = 0;
|
|
|
- } else {
|
|
|
- endTime = new Date(endTime.setMonth(endTime.getMonth() + parseInt(this.formData.pay)));
|
|
|
- cycleMoney = 0;
|
|
|
- }
|
|
|
- //无限制添加 判断条件是 付款时间大于截止时间 则结束
|
|
|
- //计算相差时间是否大于一个月
|
|
|
- var sDate = endTime;
|
|
|
- var eDate = new Date(this.formData.contractEndTime);
|
|
|
- var thisMothDays = 1000 * 3600 * 24 * this.getDays();
|
|
|
- if (eDate - sDate >= thisMothDays) {
|
|
|
- if (i == 0) {
|
|
|
- continue;
|
|
|
- // this.formData.cycles.push({
|
|
|
- // cycle: i + 1,
|
|
|
- // cycleEndTime: this.formData.contractBeginTime,
|
|
|
- // cycleMoney: cycleMoney
|
|
|
- // });
|
|
|
- } else {
|
|
|
- this.formData.cycles.push({
|
|
|
- isTeam: false,
|
|
|
- cycle: i,
|
|
|
- cycleEndTime: this.dateFormat('YYYY-mm-dd HH:MM:SS', endTime),
|
|
|
- cycleMoney: cycleMoney
|
|
|
- });
|
|
|
- }
|
|
|
- } else {
|
|
|
- cycleMoney = Math.round(
|
|
|
- ((this.formData.monthlyRent * 12) / 365) *
|
|
|
- this.difference(endTime, this.formData.contractEndTime)
|
|
|
- );
|
|
|
- this.formData.cycles.push({
|
|
|
- isTeam: false,
|
|
|
- cycle: i + 1,
|
|
|
- cycleEndTime: this.formData.contractEndTime,
|
|
|
- cycleMoney: cycleMoney
|
|
|
- });
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- this.showCycle = true;
|
|
|
- },
|
|
|
- cycleClick() {
|
|
|
- if (!this.formData.contractBeginTime) {
|
|
|
- this.$message.error('请输入合同开始时间');
|
|
|
- return;
|
|
|
- }
|
|
|
- if (!this.formData.contractEndTime) {
|
|
|
- this.$message.error('请输入合同结束时间');
|
|
|
- return;
|
|
|
- }
|
|
|
- if (this.formData.contractBeginTime > this.formData.contractEndTime) {
|
|
|
- this.$message.error('合同结束时间必须大于开始时间');
|
|
|
- return;
|
|
|
- }
|
|
|
- if (!this.formData.bet) {
|
|
|
- this.$message.error('请输入押几');
|
|
|
- return;
|
|
|
- }
|
|
|
- if (!this.formData.pay) {
|
|
|
- this.$message.error('请输入付几');
|
|
|
- return;
|
|
|
- }
|
|
|
- if (!this.formData.monthlyRent) {
|
|
|
- this.$message.error('请输入月租金');
|
|
|
- return;
|
|
|
- }
|
|
|
- //计算周期数 计数30天为准
|
|
|
- // let cycleAround = Math.round(this.formData.contractDays/30/this.pay);
|
|
|
- // let moreDay = this.formData.contractDays - (cycleAround * 30);
|
|
|
- let endTime = new Date(this.formData.contractBeginTime);
|
|
|
-
|
|
|
- for (let i = 0; i < 36; i++) {
|
|
|
- let cycleMoney = 0;
|
|
|
- if (i == 0) {
|
|
|
- //交租时间默认为合同开始时间 交付费用 为 押 + 付
|
|
|
- cycleMoney = Math.round(
|
|
|
- this.formData.monthlyRent * parseInt(this.formData.pay) + this.formData.flowBet
|
|
|
- );
|
|
|
- } else {
|
|
|
- endTime = new Date(endTime.setMonth(endTime.getMonth() + parseInt(this.formData.pay)));
|
|
|
- cycleMoney = Math.round(this.formData.monthlyRent * this.formData.pay);
|
|
|
- }
|
|
|
- //无限制添加 判断条件是 付款时间大于截止时间 则结束
|
|
|
- //计算相差时间是否大于一个月
|
|
|
- var sDate = endTime;
|
|
|
- var eDate = new Date(this.formData.contractEndTime);
|
|
|
- var thisMothDays = 1000 * 3600 * 24 * this.getDays();
|
|
|
- if (eDate - sDate >= thisMothDays) {
|
|
|
- if (i == 0) {
|
|
|
- this.formData.cycles.push({
|
|
|
- isTeam: true,
|
|
|
- cycle: i + 1,
|
|
|
- cycleEndTime: this.formData.contractBeginTime,
|
|
|
- cycleMoney: cycleMoney
|
|
|
- });
|
|
|
- } else {
|
|
|
- this.formData.cycles.push({
|
|
|
- isTeam: true,
|
|
|
- cycle: i + 1,
|
|
|
- cycleEndTime: this.dateFormat('YYYY-mm-dd HH:MM:SS', endTime),
|
|
|
- cycleMoney: cycleMoney
|
|
|
- });
|
|
|
- }
|
|
|
- } else {
|
|
|
- cycleMoney = Math.round(
|
|
|
- ((this.formData.monthlyRent * 12) / 365) *
|
|
|
- this.difference(endTime, this.formData.contractEndTime)
|
|
|
- );
|
|
|
- this.formData.cycles.push({
|
|
|
- cycle: i + 1,
|
|
|
- cycleEndTime: this.formData.contractEndTime,
|
|
|
- cycleMoney: cycleMoney
|
|
|
- });
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- this.showCycle = true;
|
|
|
- },
|
|
|
- dateFormat(fmt, date) {
|
|
|
- let ret;
|
|
|
- let opt = {
|
|
|
- 'Y+': date.getFullYear().toString(), // 年
|
|
|
- 'm+': (date.getMonth() + 1).toString(), // 月
|
|
|
- 'd+': date.getDate().toString(), // 日
|
|
|
- 'H+': date.getHours().toString(), // 时
|
|
|
- 'M+': date.getMinutes().toString(), // 分
|
|
|
- 'S+': date.getSeconds().toString() // 秒
|
|
|
- // 有其他格式化字符需求可以继续添加,必须转化成字符串
|
|
|
- };
|
|
|
- for (let k in opt) {
|
|
|
- ret = new RegExp('(' + k + ')').exec(fmt);
|
|
|
- if (ret) {
|
|
|
- fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0'));
|
|
|
- }
|
|
|
- }
|
|
|
- return fmt;
|
|
|
- },
|
|
|
- getDaysOfMonth(year, month) {
|
|
|
- var date = new Date(year, month, 0);
|
|
|
- var days = date.getDate();
|
|
|
- return days;
|
|
|
- },
|
|
|
- /**
|
|
|
- * 获取当前月的总天数
|
|
|
- */
|
|
|
- getDays() {
|
|
|
- var date = new Date();
|
|
|
- //将当前月份加1,下移到下一个月
|
|
|
- date.setMonth(date.getMonth() + 1);
|
|
|
- //将当前的日期置为0,
|
|
|
- date.setDate(0);
|
|
|
- //再获取天数即取上个月的最后一天的天数
|
|
|
- var days = date.getDate();
|
|
|
- return days;
|
|
|
- },
|
|
|
-
|
|
|
- //获取合同时长
|
|
|
- getContractDays() {
|
|
|
- if (!this.formData.contractBeginTime) {
|
|
|
- this.$message.error('请输入合同开始时间');
|
|
|
- return;
|
|
|
- }
|
|
|
- if (!this.formData.contractEndTime) {
|
|
|
- this.$message.error('请输入合同结束时间');
|
|
|
- return;
|
|
|
- }
|
|
|
- if (this.formData.contractBeginTime > this.formData.contractEndTime) {
|
|
|
- this.$message.error('合同结束时间必须大于开始时间');
|
|
|
- return;
|
|
|
- }
|
|
|
- this.formData.contractDays = this.difference(
|
|
|
- this.formData.contractBeginTime,
|
|
|
- this.formData.contractEndTime
|
|
|
- );
|
|
|
- },
|
|
|
- /**
|
|
|
- * 获取两个时间相差的天数
|
|
|
- * */
|
|
|
- difference(beginTime, endTime) {
|
|
|
- var dateBegin = new Date(beginTime);
|
|
|
- var dateEnd = new Date(endTime);
|
|
|
- var dateDiff = dateEnd.getTime() - dateBegin.getTime(); //时间差的毫秒数
|
|
|
- var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000)); //计算出相差天数
|
|
|
- return dayDiff;
|
|
|
- // var leave1 = dateDiff % (24 * 3600 * 1000); //计算天数后剩余的毫秒数
|
|
|
- // var hours = Math.floor(leave1 / (3600 * 1000));//计算出小时数
|
|
|
- // //计算相差分钟数
|
|
|
- // var leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数
|
|
|
- // var minutes = Math.floor(leave2 / (60 * 1000)); //计算相差分钟数
|
|
|
- // //计算相差秒数
|
|
|
- // var leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数
|
|
|
- // var seconds = Math.round(leave3 / 1000);
|
|
|
- },
|
|
|
- /**
|
|
|
- * 周期添加
|
|
|
- */
|
|
|
- removeCycle(item) {
|
|
|
- var index = this.formData.cycles.indexOf(item);
|
|
|
- if (index !== -1) {
|
|
|
- this.formData.cycles.splice(index, 1);
|
|
|
- }
|
|
|
- },
|
|
|
- addCycle() {
|
|
|
- this.formData.cycles.push({
|
|
|
- name: '',
|
|
|
- mobile: ''
|
|
|
- });
|
|
|
- },
|
|
|
- /**
|
|
|
- * 联系人添加
|
|
|
- */
|
|
|
- removeContacts(item) {
|
|
|
- var index = this.formData.contactsList.indexOf(item);
|
|
|
- if (index !== -1) {
|
|
|
- this.formData.contactsList.splice(index, 1);
|
|
|
- }
|
|
|
- },
|
|
|
- addContacts() {
|
|
|
- this.formData.contactsList.push({
|
|
|
- name: '',
|
|
|
- mobile: ''
|
|
|
- });
|
|
|
- },
|
|
|
- /**
|
|
|
- * 房型
|
|
|
- */
|
|
|
- removeContractFree(item) {
|
|
|
- var index = this.formData.contractStoreList.indexOf(item);
|
|
|
- if (index !== -1) {
|
|
|
- this.formData.contractStoreList.splice(index, 1);
|
|
|
- }
|
|
|
- },
|
|
|
- addContractFree() {
|
|
|
- this.formData.contractStoreList.push({
|
|
|
- storeId: '',
|
|
|
- personalFeeTypes: [],
|
|
|
- roomTypeInfo: [],
|
|
|
- contractRoomInfoList: [],
|
|
|
- roomList: [
|
|
|
- {
|
|
|
- price: '',
|
|
|
- beds: '',
|
|
|
- storeInfoId: '',
|
|
|
- roomTypeId: ''
|
|
|
- }
|
|
|
- ]
|
|
|
- });
|
|
|
- },
|
|
|
- /**
|
|
|
- * 房型
|
|
|
- */
|
|
|
- removeRoom(contractFree, room) {
|
|
|
- var index = this.formData.contractStoreList.indexOf(contractFree);
|
|
|
- var roomIndex = this.formData.contractStoreList[index].roomList.indexOf(room);
|
|
|
- if (roomIndex !== -1) {
|
|
|
- this.formData.contractStoreList[index].roomList.splice(roomIndex, 1);
|
|
|
- }
|
|
|
- },
|
|
|
- addRoom(contractFree) {
|
|
|
- var index = this.formData.contractStoreList.indexOf(contractFree);
|
|
|
- this.formData.contractStoreList[index].roomList.push({
|
|
|
- roomTypeId: '',
|
|
|
- price: '',
|
|
|
- beds: ''
|
|
|
- });
|
|
|
- },
|
|
|
- getRoomTyeInfo(room, index) {
|
|
|
- //房型信息
|
|
|
- let query = {
|
|
|
- query: { storeId: room.storeId }
|
|
|
- };
|
|
|
- this.$http
|
|
|
- .get(`/roomTypeInfo/all`, query)
|
|
|
- .then(res => {
|
|
|
- var index = this.formData.contractStoreList.indexOf(room);
|
|
|
- this.formData.contractStoreList[index].roomTypeInfo = res.content;
|
|
|
- })
|
|
|
- .catch(e => {
|
|
|
- this.$message.error(e.error);
|
|
|
- });
|
|
|
- this.formData.contractStoreList[index].personalFeeTypes = [];
|
|
|
- this.formData.contractStoreList[index].contractRoomInfoList = [];
|
|
|
- //减免项信息
|
|
|
- // this.$http
|
|
|
- // .get(`/personalFeeType/all`, query)
|
|
|
- // .then(res => {
|
|
|
- // var index = this.formData.contractStoreList.indexOf(room);
|
|
|
- // this.formData.contractStoreList[
|
|
|
- // index
|
|
|
- // ].personalFeeTypesData = res.content;
|
|
|
- // })
|
|
|
- // .catch(e => {
|
|
|
- // this.$message.error(e.error);
|
|
|
- // });
|
|
|
- },
|
|
|
- changeSaleInfo(dId) {
|
|
|
- let lable = this.departmentGroup.filter(i => {
|
|
|
- return i.id === dId;
|
|
|
- })[0].name;
|
|
|
- this.formData.departmentName = lable;
|
|
|
-
|
|
|
- let data = {
|
|
|
- id: dId
|
|
|
- };
|
|
|
- this.$http
|
|
|
- .get(`/department/treeWithUsers`, data)
|
|
|
- .then(res => {
|
|
|
- this.saleUser = res.users;
|
|
|
- })
|
|
|
- .catch(e => {
|
|
|
- console.log(e);
|
|
|
- this.$message.error(e.error);
|
|
|
- });
|
|
|
- },
|
|
|
- getCustomerInfo() {
|
|
|
- this.$http
|
|
|
- .get(`/customer/all`, { size: 1000 })
|
|
|
- .then(res => {
|
|
|
- this.customerInfo = res.content;
|
|
|
- })
|
|
|
- .catch(e => {
|
|
|
- this.$message.error(e.error);
|
|
|
- });
|
|
|
- },
|
|
|
- getStoreInfo() {
|
|
|
- this.$http
|
|
|
- .get(`/storeInfo/getChooseAll`, { size: 1000 })
|
|
|
- .then(res => {
|
|
|
- this.storeInfo = res.content;
|
|
|
- })
|
|
|
- .catch(e => {
|
|
|
- this.$message.error(e.error);
|
|
|
- });
|
|
|
- },
|
|
|
- //获取销售员信息
|
|
|
- getDepartmentGroup() {
|
|
|
- this.$http
|
|
|
- .get(`/user/allSales`)
|
|
|
- .then(res => {
|
|
|
- this.saleUser = res;
|
|
|
- })
|
|
|
- .catch(e => {
|
|
|
- this.$message.error(e.error);
|
|
|
- });
|
|
|
- },
|
|
|
- changeSaleName(saleId) {
|
|
|
- let saleInfo = this.saleNameLabel(saleId);
|
|
|
- this.formData.saleName = saleInfo.nickname;
|
|
|
- this.formData.departmentId = saleInfo.departments[0].id;
|
|
|
- this.formData.departmentName = saleInfo.departments[0].name;
|
|
|
- },
|
|
|
- saleNameLabel(saleId) {
|
|
|
- let label = this.saleUser.filter(i => {
|
|
|
- return i.id === saleId;
|
|
|
- })[0];
|
|
|
- return label;
|
|
|
- },
|
|
|
-
|
|
|
- getSaleUser() {
|
|
|
- this.$http
|
|
|
- .get(`/contract/get/${this.$route.query.id}`)
|
|
|
- .then(res => {
|
|
|
- this.formData = res;
|
|
|
- })
|
|
|
- .catch(e => {
|
|
|
- console.log(e);
|
|
|
- this.$message.error(e.error);
|
|
|
- });
|
|
|
- },
|
|
|
- onSave() {
|
|
|
- this.$refs.form.validate(valid => {
|
|
|
- if (valid) {
|
|
|
- this.submit();
|
|
|
- } else {
|
|
|
- return false;
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- submit() {
|
|
|
- this.$store.commit('updateFetchingData', true);
|
|
|
- let data = { ...this.formData };
|
|
|
-
|
|
|
- this.$http
|
|
|
- .post('/contract/save', data, { body: 'json' })
|
|
|
- .then(res => {
|
|
|
- this.$store.commit('updateFetchingData', false);
|
|
|
- this.$message.success('成功');
|
|
|
- this.$router.go(-1);
|
|
|
- })
|
|
|
- .catch(e => {
|
|
|
- this.$store.commit('updateFetchingData', false);
|
|
|
- console.log(e);
|
|
|
- this.$message.error(e.error);
|
|
|
- });
|
|
|
- },
|
|
|
- onDelete() {
|
|
|
- this.$alert('删除将无法恢复,确认要删除么?', '警告', {
|
|
|
- type: 'error'
|
|
|
- })
|
|
|
- .then(() => {
|
|
|
- return this.$http.post('/contract/del', {
|
|
|
- id: this.formData.id
|
|
|
- });
|
|
|
- })
|
|
|
- .then(() => {
|
|
|
- this.$message.success('删除成功');
|
|
|
- this.$router.go(-1);
|
|
|
- })
|
|
|
- .catch(e => {
|
|
|
- if (e !== 'cancel') {
|
|
|
- console.log(e);
|
|
|
- this.$message.error(e.error);
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- getPersonalFeeTypes(id) {
|
|
|
- var list = [];
|
|
|
- if (id) {
|
|
|
- var storeList = [...this.storeInfo];
|
|
|
- storeList.forEach(item => {
|
|
|
- if (item.id == id) {
|
|
|
- list = item.personalFeeTypes;
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- return list;
|
|
|
- },
|
|
|
- getContractRoomInfoList(id) {
|
|
|
- var list = [];
|
|
|
- if (id) {
|
|
|
- var storeList = [...this.storeInfo];
|
|
|
- storeList.forEach(item => {
|
|
|
- if (item.id == id) {
|
|
|
- list = item.roomInfos;
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- return list;
|
|
|
- },
|
|
|
- onSuccess(res, file) {
|
|
|
- this.formData.enclosure = res;
|
|
|
- this.loading = false;
|
|
|
- this.imageUrl = URL.createObjectURL(file.raw);
|
|
|
- var newVal = '';
|
|
|
- if (res instanceof Array) {
|
|
|
- newVal = res[0];
|
|
|
- } else {
|
|
|
- newVal = res;
|
|
|
- }
|
|
|
- this.$emit('input', newVal);
|
|
|
- },
|
|
|
- onError(err, file, fileList) {
|
|
|
- this.loading = false;
|
|
|
- },
|
|
|
- beforeUpload(file) {
|
|
|
- this.loading = true;
|
|
|
- return true;
|
|
|
- },
|
|
|
- updateImageUrl(url) {
|
|
|
- this.imageUrl = url;
|
|
|
- }
|
|
|
- }
|
|
|
-};
|
|
|
-</script>
|
|
|
-<style lang="less" scoped>
|
|
|
-.stepInfo {
|
|
|
- background: rgba(242, 244, 245, 1);
|
|
|
- border-radius: 4px;
|
|
|
- padding: 20px;
|
|
|
- margin-bottom: 15px;
|
|
|
-
|
|
|
- .step-title {
|
|
|
- font-size: 14px;
|
|
|
- font-weight: bold;
|
|
|
- color: rgba(72, 87, 106, 1);
|
|
|
- line-height: 16px;
|
|
|
- margin-bottom: 15px;
|
|
|
- }
|
|
|
-
|
|
|
- .btnList {
|
|
|
- display: flex;
|
|
|
- margin-bottom: 15px;
|
|
|
- }
|
|
|
-
|
|
|
- .houseInfo {
|
|
|
- padding: 15px;
|
|
|
- border: 1px solid #ccc;
|
|
|
- border-radius: 3px;
|
|
|
- margin-bottom: 15px;
|
|
|
- }
|
|
|
-
|
|
|
- .loading {
|
|
|
- position: absolute;
|
|
|
- top: 0;
|
|
|
- bottom: 0;
|
|
|
- left: 0;
|
|
|
- right: 0;
|
|
|
- margin: auto;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- background: rgba(255, 255, 255, 0.6);
|
|
|
- color: @text1;
|
|
|
- font-size: 24px;
|
|
|
- }
|
|
|
-
|
|
|
- .avatar-uploader-icon {
|
|
|
- font-size: 28px;
|
|
|
- color: #8c939d;
|
|
|
- width: 178px;
|
|
|
- height: 178px;
|
|
|
- line-height: 178px;
|
|
|
- text-align: center;
|
|
|
- border: 1px dashed #d9d9d9;
|
|
|
- border-radius: 6px;
|
|
|
- cursor: pointer;
|
|
|
- position: relative;
|
|
|
- overflow: hidden;
|
|
|
- background-color: #fbfdff;
|
|
|
-
|
|
|
- &:hover {
|
|
|
- border-color: #409eff;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .avatar {
|
|
|
- width: 178px;
|
|
|
- height: 178px;
|
|
|
- display: block;
|
|
|
- border: 1px dashed #d9d9d9;
|
|
|
- border-radius: 6px;
|
|
|
- cursor: pointer;
|
|
|
- position: relative;
|
|
|
- overflow: hidden;
|
|
|
-
|
|
|
- &:hover {
|
|
|
- border-color: #409eff;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .wrapper {
|
|
|
- position: relative;
|
|
|
- }
|
|
|
-
|
|
|
- .single-upload .el-upload {
|
|
|
- position: relative;
|
|
|
- }
|
|
|
-}
|
|
|
-</style>
|