230320a303 6 mesiacov pred
rodič
commit
99fec88f05

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/index.html


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/css/chunk-0fc1bdb2.a82e4039.css


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/css/chunk-4b32a022.1eaa25df.css


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/css/chunk-b5732612.695c4505.css


BIN
dist/static/img/bg_upload.23e41cc6.png


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/app.56493e82.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/app.89e40f60.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-0fc1bdb2.f102ee6c.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-2d2228c9.d4ff7cd7.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-4b32a022.4029274c.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-6046bae2.cbf2d4f9.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-95a885ac.5e19a877.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-b5732612.2f7c8720.js


+ 6 - 0
src/api/house.js

@@ -392,4 +392,10 @@ export default {
   admeshousedynamicdel: params => { // 二手房源 动态 删除
     return getRequest('/adm/es/house/dynamic/del', params, 'loading')
   },
+  admestatevideodetail: params => { // 楼盘主视频 查询 
+    return getRequestNoSort('/adm/estate/video/detail', params, 'loading')
+  },
+  admestatevideoedit: params => { // 楼盘主视频 编辑
+    return getRequestNoSort('/adm/estate/video/edit', params, 'loading')
+  },
 }

BIN
src/assets/bg_upload.png


+ 828 - 0
src/components/Common/IndexEdit.vue

@@ -0,0 +1,828 @@
+<template>
+  <div>
+    <el-drawer
+      v-loading="loading"
+      :show-close="false"
+      :title="curObj.id ? '编辑楼盘' : '新增楼盘'"
+      :wrapper-closable="false"
+      :close-on-press-escape="false"
+      :visible.sync="isShow"
+      size="960px"
+      custom-class="xl-drawer"
+      direction="rtl"
+    >
+      <base-form ref="ruleForm" class="lib-edit" :data="formData" :is-inline="false" label-width="110px" :insertSlotArr="[24,26]">
+        <div slot="OI24" class="scoped-product">
+          <div class="sp-item" v-for="(product, one) in productData" :key="one">
+            <div class="sp-title">{{product.product_type_name}}
+              <div class="scoped-sp-box" @click="openPtPopup(product, one)">
+                修改类型
+              </div>
+            </div>
+            <div class="sp-content">
+              <div class="sc-input">
+                <el-form-item label-width="80px" label="产品均价">
+                  <el-input v-model="product.average_price" placeholder="数字如:15000" onkeyup="value=value.replace(/[^\d]/g,'')"></el-input>
+                </el-form-item>
+                <el-form-item label-width="80px" label="梯户比">
+                  <el-input v-model="product.stairs_rate" placeholder="如:2梯4户"></el-input>
+                </el-form-item>
+                <!-- <el-form-item label-width="80px" label="装标">
+                  <el-input v-model="product.standard" placeholder="装修标准"></el-input>
+                </el-form-item> -->
+                <!-- <el-form-item label-width="80px" label="最低单价">
+                  <el-input v-model="product.price_min" placeholder="选填"></el-input>
+                </el-form-item>
+                <el-form-item label-width="80px" label="最高单价">
+                  <el-input v-model="product.price_max" placeholder="选填"></el-input>
+                </el-form-item> -->
+              </div>
+              <el-form-item label="户型">
+                <el-select v-model="product.house_type_list_val" placeholder="请选择" :multiple="true" @change="houseTypeChange(one)">
+                  <el-option
+                    v-for="item in $dictData.house_type"
+                    :key="item.val"
+                    :label="item.key"
+                    :value="item.val">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <div class="room-box">
+                <div class="room-item" v-for="(room, two) in product.house_type_list" :key="two">
+                  <div class="ri-title">{{room.house_type_name}}
+                    <el-button type="small" icon="el-icon-plus" class="xl-form-btn xs t3" @click="roomAreaAdd(one, two)">添加</el-button>
+                  </div>
+                  <div class="ri-content">
+                    <div class="ri-op" v-for="(area, three) in room.area_list" :key="three">
+
+
+
+                      <div class="ri-video">
+                        <div v-if="area.house_video" class="close" @click="videoDel(one, two, three)"></div>
+                        <video
+                          v-if="area.house_video"
+                          controls 
+                          muted 
+                          loop 
+                          width="200"
+                          >
+                            <source 
+                            :src="area.house_video" 
+                            type="video/mp4" 
+                            />
+                        </video>
+                        <div v-else @click="openUvPopup(one, two, three)" class="riv-btn"></div>
+                        <!-- <el-button @click="openUvPopup(one, two, three)" size="small" type="info" class="riv-btn" >上传视频</el-button> -->
+                      </div>
+
+
+
+
+                      <el-upload
+                        class="ri-img"
+                        :action="`${domainUrl}/adm/upload/cloud`"
+                        :data="{logic_type: 'estate', token}"
+                        name="upload"
+                        :show-file-list="false"
+                        :on-success="roomAreaUploadSuccess"
+                        :on-error="roomAreaUploadError"
+                        :before-upload="roomAreaUploadBefore"
+                      >
+                        <img v-if="area.img_url" :src="area.img_url + '_adm0'" class="img" @click="roomAreaUploadImg(one, two, three)">
+                        <i v-else class="el-icon-plus icon" @click="roomAreaUploadImg(one, two, three)"/>
+                        <img :src="area.img_url + '_adm0'" class="ri-img-big">
+                      </el-upload>
+                      <div class="ri-deal">
+                        <div class="ops">
+                          <div class="k">面积:</div>
+                          <input class="ri-input" v-model="area.area" type="text" placeholder="请输入">
+                        </div>
+                        <div class="ops">
+                          <div class="k">VR地址:</div>
+                          <input class="ri-input" v-model="area.vr_key" type="text" placeholder="请输入">
+                        </div>
+                        <div class="ops">
+                          <div class="k">总价(万):</div>
+                          <input class="ri-input" v-model="area.price" type="text" placeholder="请输入">
+                        </div>
+                        <div class="ops">
+                          <div class="k">备注:</div>
+                          <input class="ri-input" v-model="area.remark" type="text" placeholder="请输入">
+                        </div>
+                        <span class="ri-del"  @click="roomAreaDel(one, two, three)">删除</span>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div slot="OI26" class="scoped-other-form">
+          <el-form-item label="点位坐标" class="scoped-item-two item">
+            纬度N<el-input v-model="cObj.latitude" disabled />
+            经度E<el-input v-model="cObj.longitude" disabled />
+            <el-button type="primary" class="map-btn" size="small" @click="openMap">点击从地图获取</el-button>
+          </el-form-item>
+        </div>
+      </base-form>
+      <div class="xl-form">
+        <div class="xl-form-footer fixed" style="width:960px;padding-top: 20px;border-top: 1px solid #dcdcdc;right:0;">
+          <el-button class="xl-form-btn t2" @click="close">关 闭</el-button>
+          <el-button class="xl-form-btn t1" @click="close('confirm')">确定</el-button>
+        </div>
+      </div>
+    </el-drawer>
+    <handle-map :is-show="isShowMap" @close="closeMap" />
+    <pt-edit
+      :isShow="isPtShow"
+      :curObj="ptObj"
+      @close="closePtPopup"
+     />
+     <upload-video
+      :isShow="isUvShow"
+      :curObj="uvObj"
+      @close="closeUvPopup"
+     />
+  </div>
+</template>
+<script>
+import { arrToObj } from '@/utils'
+import handleMap from '@/components/Common/Map'
+import UploadVideo from './UploadVideo'
+import PtEdit from './ProductTypeEdit'
+export default {
+  components: {
+    handleMap,
+    PtEdit,
+    UploadVideo,
+  },
+  mixins,
+  props: {
+    isShow: Boolean,
+    curObj: Object
+  },
+  inject: ['parentData'],
+  data() {
+    const token = window.sessionStorage.getItem('fp_token')
+    let domainUrl = process.env.VUE_APP_BASE_API
+    return {
+      domainUrl,
+      token,
+      loading: false,
+      formData: [],
+      cObj: {},
+      isShowMap: false,
+      productData: [],
+      tempImgIndex: [0, 0, 0],
+      ptObj: {},
+      isPtShow: false,
+      uvObj: {},
+      isUvShow: false,
+      areaList: [],
+      areaChildList: [],
+      areaValIdObj: {},
+      oldVrKeys: [],
+      newVrKeys: [],
+    }
+  },
+  watch: {
+    isShow: function(val) {
+      if (val) {
+        if (this.curObj.id) {
+          this.loading = true
+          this.$api.house.admestatedetail({id: this.curObj.id}).then(res => {
+            let curData = res || {}
+            if (curData.house_type) curData.house_type = curData.house_type.split(',')
+            if (curData.product_type) curData.product_type = curData.product_type.split(',')
+            if (curData.hospital_type) curData.hospital_type = curData.hospital_type.split(',')
+            if (curData.high_street) curData.high_street = curData.high_street.split(',')
+            if (curData.park_type) curData.park_type = curData.park_type.split(',')
+            if (curData.metro_line) curData.metro_line = curData.metro_line.split(',')
+            if (curData.metro_type) curData.metro_type = curData.metro_type.split(',')
+            this.cObj = curData || {}
+            let productData = curData.area_data || []
+            let vrkeys = []
+            productData.map((one, oneIndex) =>{
+              one.product_type_name = arrToObj(this.$dictData.product_type)[one.product_type_val]
+              let houseTypeList = one.house_type_list || []
+              one.house_type_list_val = []
+              houseTypeList.map(two => {
+                two.area_list.forEach(three => {
+                  if (three.vr_key) vrkeys.push(three.vr_key)
+                })
+                two.house_type_name = arrToObj(this.$dictData.house_type)[two.house_type_val]
+                one.house_type_list_val.push(String(two.house_type_val))
+              })
+            })
+            this.oldVrKeys = [...vrkeys]
+            this.productData = [...productData]
+            if (curData.area_data) {
+              this.getAreaChild('bc', () => {
+                this.getDef()
+              })
+            } else {
+              this.getDef()
+            }
+            this.loading = false
+          })
+        } else {
+          this.cObj = this.curObj
+          this.getDef()
+        }
+      }
+    },
+  },
+  created () {
+    this.$api.other.admareainfolist({
+      level: 1,
+      page_size: 99
+    }).then(res => {
+      let list = res.list || []
+      let areaValIdObj = {}
+      list.map(item => {
+        item.key = item.area_name
+        item.val = item.option1
+        areaValIdObj[item.val] = item.id
+      })
+      this.areaList = [...list]
+      this.areaValIdObj = {...areaValIdObj}
+      // console.log(areaValIdObj)
+    })
+  },
+  methods: {
+    getAreaChild (str, bc) {
+      const cObj = this.cObj
+      this.$api.other.admareainfolist({
+        level: 2,
+        page_size: 99,
+        parent_id: this.areaValIdObj[cObj.area_type] || ''
+      }).then(res => {
+        let list = res.list || []
+        list.map(item => {
+          item.key = item.area_name
+          item.val = String(item.id)
+        })
+        this.areaChildList = [...list]
+        if (str && str === 'bc') {
+          bc()
+        }
+      })
+    },
+
+
+
+    closeUvPopup (bcData) {
+      this.isUvShow = false
+      if (bcData && bcData.video) {
+        const { oldArr } = this.uvObj
+
+        let productData = [...this.productData]
+        let areaObj = productData[oldArr[0]].house_type_list[oldArr[1]].area_list[oldArr[2]]
+        areaObj.house_video = bcData.video
+        this.productData = [...productData]
+      }
+    },
+    openUvPopup (one, two, three) {
+      this.isUvShow = true
+      this.uvObj = {
+        oldArr: [one, two, three]
+      }
+    },
+    videoDel (one, two, three) {
+      this.$msg(`您确定要删除该视频吗?`, 'confirm', () => {
+        let productData = [...this.productData]
+        let areaObj = productData[one].house_type_list[two].area_list[three]
+        areaObj.house_video = ''
+        this.productData = [...productData]
+      })
+    },
+
+
+    closePtPopup (bcData) {
+      this.isPtShow = false
+      if (bcData) {
+        let productData = [...this.productData]
+        let cObj = productData[bcData.index]
+        cObj.product_type_val = bcData.ptVal
+        cObj.product_type_name = bcData.ptName
+        productData[bcData.index] = cObj
+        this.productData = [...productData]
+        let params = {...this.$refs.ruleForm.baseForm}
+        let curPt = [...params.product_type]
+        curPt[bcData.index] = bcData.ptVal
+        params.product_type = curPt
+        this.setDefaultValue(params)
+      }
+    },
+    openPtPopup (row, index) {
+      this.isPtShow = true
+      this.ptObj = {
+        row,
+        index
+      }
+    },
+    houseTypeChange (one) {
+      let productData = [...this.productData]
+      let tempList = []
+      let houseTypeList = productData[one].house_type_list || []
+      const curVal = productData[one].house_type_list_val ||[]
+      curVal.forEach(v =>{
+        let cObj = {
+          house_type_name: arrToObj(this.$dictData.house_type)[v],
+          house_type_val: v,
+          area_list: [{img_url: '', area: '0', vr_key: ''}]
+        }
+        houseTypeList.forEach((h, hIndex) =>{
+          if (v === String(h.house_type_val)) {
+            cObj.area_list = houseTypeList[hIndex].area_list || []
+          }
+        })
+        tempList.push(cObj)
+      })
+      productData[one].house_type_list = tempList
+      this.productData = [...productData]
+    },
+    roomAreaDel (one, two, three) {
+      this.$msg(`您确定要删除吗?`, 'confirm', () => {
+        let productData = [...this.productData]
+        productData[one].house_type_list[two].area_list.splice(three, 1)
+        this.productData = [...productData]
+      })
+    },
+    roomAreaAdd (one, two) {
+      let productData = [...this.productData]
+      productData[one].house_type_list[two].area_list.push({img_url: '', area: '0', vr_key: ''})
+      this.productData = [...productData]
+    },
+    roomAreaUploadImg (one, two, three) {
+      this.tempImgIndex = [one, two, three]
+    },
+    roomAreaUploadSuccess(res, file) {
+      const data = res.data || {}
+      let productData = [...this.productData]
+      // productData[this.tempImgIndex[0]].house_type_list[this.tempImgIndex[1]].area_list[this.tempImgIndex[2]].img_url =  `${data.domain}${data.url}?url=${data.url}&id=${data.file_id}`
+      productData[this.tempImgIndex[0]].house_type_list[this.tempImgIndex[1]].area_list[this.tempImgIndex[2]].img_url =  `${data.url}`
+      this.productData = [...productData]
+    },
+    roomAreaUploadError(file) {
+      // this.changeHandle(file)
+    },
+    roomAreaUploadBefore(file) {
+      const isJPGPNG = file.type.toLowerCase() === 'image/jpeg' || file.type.toLowerCase() === 'image/png'
+      const isLtM = file.size / 1024 / 1024 < 500
+      if (!isJPGPNG) {
+        this.$message.error('上传图片只能是 JPG PNG GIF 格式!')
+      }
+      if (!isLtM) {
+        this.$message.error('上传图片大小不能超过 500M!')
+      }
+      return isJPGPNG && isLtM
+    },
+    metroLineChange (val) {
+      this.getDef('change', 'metro_line')
+    },
+    productTypeChange (val, op, item) {
+      const valArr = [...val]
+      const productData = [...this.productData]
+      let newArr = []
+      valArr.forEach(v => {
+        let vObj = {
+          product_type_name: arrToObj(this.$dictData.product_type)[v],
+          product_type_val: v,
+        }
+        productData.forEach(old =>{
+          if (v === String(old.product_type_val)) {
+            vObj = {...old}
+          }
+        })
+        newArr.push(vObj)
+      })
+      this.productData = [...newArr]
+    },
+    areaChange (val) {
+      this.cObj.area_type = val
+      this.getAreaChild('bc', () => {
+        this.getDef('change', 'area_type')
+      })
+    },
+    getDef (str, strKey, strParams) {
+      let params = {}
+      if (str === 'change') {
+        params = {...this.cObj, ...this.$refs.ruleForm.baseForm}
+      } else {
+        params = { ...this.cObj }
+      }
+      let metroLine = params.metro_line || []
+      let metroTypeArr = []
+      if (str === 'change' && strKey === 'metro_line') params.metro_type = ''
+      if (str === 'change' && strKey === 'area_type') params.area_child = ''
+      const metroTypeAll = this.$dictData.metro_type || []
+      metroTypeAll.map(item => {
+        metroLine.map(mline => {
+          if (item.option1.indexOf(mline) > -1) {
+            metroTypeArr.push(item)
+          }
+        })
+      })
+      let disabled = false
+      if (params.id) disabled = true
+      let remoteOptionsDkSchoolList = []
+      if (params.school_list && params.school_list.duikou && params.school_list.duikou.length > 0) {
+        params.school_dk_list = params.school_list.duikou.map(item => {
+          remoteOptionsDkSchoolList.push({ keyRO: item.school_name, valRO: item.id })
+          return item.id
+        })
+      } else {
+        params.school_dk_list = []
+      }
+      let remoteOptionsGhSchoolList = []
+      if (params.school_list && params.school_list.guihua && params.school_list.guihua.length > 0) {
+        params.school_gh_list = params.school_list.guihua.map(item => {
+          remoteOptionsGhSchoolList.push({ keyRO: item.school_name, valRO: item.id })
+          return item.id
+        })
+      } else {
+        params.school_gh_list = []
+      }
+      this.formData = [
+        { label: '楼盘名称', key: 'estate_name', rules: 1 },
+        { label: '所属区域', key: 'area_type', type: 'select', class: 'c-3', options: this.areaList, changeHandle: this.areaChange },
+        { label: '二级区域', key: 'area_child', type: 'select', class: 'c-3', options: this.areaChildList },
+        // { label: '二级区域', key: 'area_child', type: 'selectRemote', class: 'c-3',
+        //   remoteParams: { skey: 'area_name', api: `other.admareainfolist?level=2&&page_size=99&parent_id=${params.area_type ? this.areaValIdObj[params.area_type] : ''}`, opKey: 'area_name', opVal: 'id' },
+        // },
+        { label: '地铁线路', key: 'metro_line', type: 'select', class: 'c-3', options: this.$dictData.metro_line, changeHandle: this.metroLineChange, multiple: true },
+        { label: '地铁站名', key: 'metro_type', type: 'select', class: 'c-3', options: metroTypeArr, multiple: true},
+        // { label: '周边医院', key: 'hospital_type', type: 'select', class: 'c-3', options: this.$dictData.hospital_type, multiple: true },
+        // { label: '周边商圈', key: 'high_street', type: 'select', class: 'c-3', options: this.$dictData.high_street, multiple: true },
+        // { label: '周边公园', key: 'park_type', type: 'select', class: 'c-3', options: this.$dictData.park_type, multiple: true },
+        { label: '建设时间', key: 'build_time', class: 'c-3', type: 'datePicker', type2: 'month', valueFormat: 'yyyy-MM'},
+        { label: '竣工时间', key: 'complete_time', class: 'c-3', type: 'datePicker', type2: 'month', valueFormat: 'yyyy-MM'},
+        { label: '容积率', key: 'plot_ratio', class: 'c-3'},
+        { label: '占地面积', key: 'acreage', class: 'c-3', type: 'inputFont', appendFont: '㎡'},
+        { label: '建筑面积', key: 'built_up_area', class: 'c-3', type: 'inputFont', appendFont: '㎡'},
+        { label: '总户数', key: 'household', class: 'c-3', type: 'inputFont', appendFont: '户', rules: [
+          { validator: (rule, value, callback) => {
+            if (Number(value) < 0 || isNaN(Number(value))) {
+              callback(new Error('请输入数字'))
+            } else {
+              callback()
+            }
+          }, trigger: 'blur' },
+          // { type: 'number', message: '请输入数字', trigger: 'blur' }
+        ]},
+        { label: '物业公司', key: 'property_type', class: 'c-3'},
+        { label: '物业费', key: 'property_fee', class: 'c-3'},
+        { label: '车位数量', key: 'parking', class: 'c-3', type: 'inputFont', appendFont: '个'},
+        { label: '绿化率', key: 'green_rate', class: 'c-3', type: 'inputFont', appendFont: '%' },
+        { label: '楼盘标签', key: 'estate_tag', type: 'select', class: 'c-3', options: this.$dictData.estate_tag, rules: 1 },
+        { label: '自定义标签', key: 'custom_tag', class: 'c-3' },
+        { label: '开发商', key: 'developer', class: 'c-3' }, 
+        { label: '楼栋数', key: 'seat_sum', class: 'c-3', type: 'inputFont', appendFont: '栋' },
+        { label: '产权年限', key: 'ownership', class: 'c-3' },
+        { label: '初次交付时间', key: 'deliver_time', class: 'c-3', type: 'datePicker', type2: 'month', valueFormat: 'yyyy-MM'},
+        { label: '楼盘单价', key: 'price_range', class: 'c-3', type: 'inputFont', appendFont: '/㎡', rules: 1 },
+        { label: '户型面积区间', key: 'built_area', class: 'c-3', type: 'inputFont', appendFont: '㎡' },
+        // { label: '是否销控', key: 'sale_ctrl', type: 'select', class: 'c-3', options: this.$dictData.sys_yesno },
+        { label: '产品类型', key: 'product_type', type: 'select', class: 'c-3s', options: this.$dictData.product_type, multiple: true, changeHandle: this.productTypeChange},
+        // { label: '房型', key: 'house_type', type: 'select', options: this.$dictData.house_type, multiple: true},
+        // { label: '面积', label2: '多个面积英文逗号,分开(如:100,120)', key: 'house_area', type: 'inputFont', appendFont: '㎡'},
+        // { label: '均价范围1', key: 'price_min', class: 'c-3', type: 'inputFont', appendFont: '元(最小)'},
+        // { label: '均价范围2', key: 'price_max', class: 'c-3', type: 'inputFont', appendFont: '元(最大)'},
+        { label: '对口学校', key: 'school_dk_list', type: 'selectRemote', multiple: true,
+          remoteParams: { skey: 'school_name', api: `school.admschoollist`, opKey: 'school_name', opVal: 'id' },
+          remoteOptions: remoteOptionsDkSchoolList
+        },
+        { label: '规划就读', key: 'school_gh_list', type: 'selectRemote', multiple: true,
+          remoteParams: { skey: 'school_name', api: `school.admschoollist`, opKey: 'school_name', opVal: 'id' },
+          remoteOptions: remoteOptionsGhSchoolList
+        },
+        { label: '楼盘地址', key: 'address', rules: 1 },
+        // { label: '是否新房', key: 'is_new', type: 'select', class: 'c-3', options: this.$dictData.sys_yesno, rules: 1 },
+        // { label: '梯户比', label2: '如:2梯4户', key: 'stairs_rate', class: 'c-3' },
+        { label: '车位价格', key: 'parking_price', class: 'c-3' },
+        { label: '不利因素', key: 'minus_points' },
+        { label: '楼盘图', key: 'pri_image', class: 'c-3', type: 'cuImg',
+          options: {
+            w: 375,
+            h: 250,
+            SY: 1,
+          }
+        , rules: 1 },
+        { label: '简评', key: 'remarked', class: 'c-3s', type: 'textarea' },
+      ]
+      params.pri_image = this.IMadd(params.pri_image)
+      this.setDefaultValue(params)
+    },
+    close (str) {
+      if (str === 'confirm') {
+        this.$refs['ruleForm'].$refs['baseForm'].validate((valid) => {
+          if (valid) {
+            const oldform = this.$refs.ruleForm.baseForm
+            const newForm = { ...oldform }
+            if (this.curObj.id) newForm.id = this.curObj.id
+            if (newForm.school_dk_list && newForm.school_dk_list.length > 0) {
+              newForm.school_dk_list = newForm.school_dk_list.join(',')
+            } else {
+              newForm.school_dk_list = ''
+            }
+            if (newForm.school_gh_list && newForm.school_gh_list.length > 0) {
+              newForm.school_gh_list = newForm.school_gh_list.join(',')
+            } else {
+              newForm.school_gh_list = ''
+            }
+            newForm.longitude = this.cObj.longitude
+            newForm.latitude = this.cObj.latitude
+            if (!newForm.longitude) return this.$msgw('请选择经度!')
+            else if (!newForm.latitude) return this.$msgw('请选择纬度!')
+            if (newForm.house_type) newForm.house_type = newForm.house_type.join(',')
+            if (newForm.product_type) newForm.product_type = newForm.product_type.join(',')
+            if (newForm.hospital_type) newForm.hospital_type = newForm.hospital_type.join(',')
+            if (newForm.high_street) newForm.high_street = newForm.high_street.join(',')
+            if (newForm.park_type) newForm.park_type = newForm.park_type.join(',')
+            if (newForm.metro_line) newForm.metro_line = newForm.metro_line.join(',')
+            if (newForm.metro_type) newForm.metro_type = newForm.metro_type.join(',')
+            let customTag = newForm.custom_tag.replace(/,|、|\/|\\/g, ',')
+            if (!newForm.standard) newForm.standard = ''
+            // newForm.stairs_rate = newForm.stairs_rate.replace(',', ',')
+            let productData = this.productData || []
+            let pFlag = false
+            let vrFlag = false
+            let vrkeys = []
+            productData.forEach(pOne => {
+              let oneArr = pOne.house_type_list || []
+              oneArr.forEach(pTwo => {
+                let twoArr = pTwo.area_list || []
+                twoArr.forEach(pThree => {
+                  if (pThree.vr_key) vrFlag = true
+                  if (pThree.vr_key) vrkeys.push(pThree.vr_key)
+                })
+              })
+              // if (!pOne.average_price || !pOne.house_type_list_val) {
+              //   pFlag = true
+              // }
+              if (!pOne.stairs_rate) pOne.stairs_rate = ''
+              if (!pOne.average_price) pOne.average_price = 0
+              if (!pOne.house_type_list_val) pOne.house_type_list_val = ''
+            })
+            this.newVrKeys = [...vrkeys]
+            // if (pFlag) {
+            //   this.$msg('请输入完整的产品均价、户型图!')
+            //   return
+            // }
+            if (vrFlag && newForm.custom_tag.indexOf('户型VR') === -1) {
+              customTag = `户型VR,${newForm.custom_tag}`
+            }
+            if (this.curObj.vr_key && newForm.custom_tag.indexOf('航拍') === -1) {
+              customTag = `航拍,${newForm.custom_tag}`
+            } 
+            newForm.custom_tag = customTag
+            if (productData.length === 0) {
+              newForm.area_data = ''
+            } else {
+              newForm.area_data = JSON.stringify([...productData])
+            }
+            let apiStr = 'admestateadd'
+            if (this.curObj.id) apiStr = 'admestateedit'
+            newForm.pri_image = this.IMdel(newForm.pri_image)
+            this.$api.house[apiStr](newForm).then(data => {
+              this.$msgs(newForm.id ? '编辑成功' : '新增成功')
+              this.$api.house.admestatehousevrscoring({
+                estate_id: this.curObj.id,
+                old_list: JSON.stringify(this.oldVrKeys),
+                new_list: JSON.stringify(this.newVrKeys),
+              })
+              this.productData = []
+              this.$emit('close', newForm)
+            })
+          }
+        })
+      } else {
+        this.$emit('close')
+        this.productData = []
+        this.setDefaultValue()
+      }
+    },
+    openMap() { // 定位
+      this.isShowMap = true
+      const pointObj = {
+        latitude: this.cObj.latitude || '',
+        longitude: this.cObj.longitude || '',
+        address: this.cObj.address || ''
+      }
+      this.$root.$emit('handleMap', pointObj)
+    },
+    closeMap(obj) {
+      if (obj) {
+        const oldform = this.$refs.ruleForm.baseForm
+        const newForm = { ...oldform, ...obj }
+        this.cObj = newForm
+        this.setDefaultValue(newForm)
+      }
+      this.isShowMap = false
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+@import '../../../../styles/libEdit.scss';
+.lib-edit {
+  width: 900px;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 40px;
+  ::v-deep .el-form-item {
+    margin-bottom: 10px;
+  }
+  ::v-deep .el-date-editor.el-input {
+    width: 100%;
+  }
+}
+.scoped-other-form {
+  .scoped-item-two {
+    .el-input {
+      display: inline-block;
+      width: 140px;
+      margin: 0 10px;
+    }
+  }
+}
+.map-btn{
+  height: 36px;
+}
+::v-deep .el-drawer__header {
+  margin-bottom: 10px;
+}
+
+.scoped-product {
+  width: 100%;
+  .sp-item {
+    position: relative;
+    border: 1px solid #dcdcdc;
+    margin-bottom: 10px;
+    margin-left: 55px;
+    margin-right: 30px;
+    border-radius: 10px;
+  }
+  .sp-title {
+    background: #dcdcdc;
+    font-weight: bold;
+    padding: 10px;
+    border-top-left-radius: 10px;
+    border-top-right-radius: 10px;
+    font-size: 14px;
+    color: #666;
+  }
+  .sp-content {
+    padding: 10px 10px 0;
+  }
+  .sc-input {
+    display: flex;
+  }
+}
+
+.room-box {
+  margin: 0 20px 10px 80px;
+  .room-item {
+    background: #f7f7f7;
+    border-radius: 10px;
+    padding: 10px;
+    margin-bottom: 10px;
+  }
+  .ri-title {
+    color: #666;
+    margin-bottom: 10px;
+  }
+  .ri-op {
+    // display: inline-block;
+    // vertical-align: middle;
+    margin-right: 20px;
+    margin-bottom: 20px;
+  }
+
+
+
+  .ri-video {
+    display: inline-block;
+    width: 200px;
+    text-align: center;
+    vertical-align: middle;
+    margin-right: 30px;
+    position: relative;
+    .close {
+      position: absolute;
+      width: 20px;
+      height: 20px;
+      top: -10px;
+      right: -10px;
+      background: url(../../../../assets/icon_g_close.png) no-repeat;
+      background-size: 20px;
+      cursor: pointer;
+    }
+    .riv-btn {
+      display: inline-block;
+      vertical-align: middle;
+      width: 100px;
+      height: 56px;
+      cursor: pointer;
+      background: url(../../../../assets/bg_upload.png) no-repeat;
+      background-size: 100px 56px;
+    }
+  }
+  
+
+  .ri-img {
+    display: inline-block;
+    vertical-align: middle;
+    width: 82px;
+    height: 82px;
+    border: 1px dashed #e6a23c;
+    position: relative;
+    box-sizing: border-box;
+    &:hover {
+      .ri-img-big {
+        display: block;
+      }
+    }
+    img {
+      width: 80px;
+      height: 80px;
+    }
+    .ri-img-big {
+      position: absolute;
+      top: 80px;
+      left: 0;
+      width: 400px;
+      height: auto;
+      display: none;
+      box-shadow: 0 0 20px #ccc;
+      z-index: 99;
+    }
+    .el-icon-plus {
+      color: #999;
+      padding: 30px;
+    }
+  }
+  .ri-deal {
+    display: inline-block;
+    vertical-align: middle;
+    width: 200px;
+    text-align: left;
+    .ops {
+      text-align: left;
+      display: inline-block;
+      vertical-align: middle;
+      width: 100px;
+      margin-bottom: 2px;
+      .k {
+        display: inline-block;
+        vertical-align: middle;
+        width: 50px;
+        font-size: 12px;
+        color: #666;
+        text-align: right;
+      }
+    }
+  }
+  .ri-input {
+    display: inline-block;
+    vertical-align: middle;
+    width: 50px;
+    border: 1px solid #dcdcdc;
+    height: 26px;
+    text-align: center;
+    border-radius: 0;
+    outline: none;
+    color: #666;
+    font-size: 12px;
+  }
+  .ri-del {
+    font-size: 12px;
+    background: #e6a23c;
+    color: #fff;
+    width: 50%;
+    height: 26px;
+    line-height: 26px;
+    cursor: pointer;
+    display: inline-block;
+    text-align: center;
+  }
+}
+
+
+.scoped-sp-box {
+  position: absolute;
+  top: -2px;
+  right: 0;
+  background: #fff;
+  ::v-deep {
+    .el-input__inner {
+      width: 80px;
+    }
+    .el-input-group__append {
+      background: #f2f2f2;
+    }
+  }
+}
+</style>

+ 187 - 0
src/components/Common/UploadVideo.vue

@@ -0,0 +1,187 @@
+<template>
+  <div>
+    <el-dialog
+      v-loading="loading"
+      :show-close="false"
+      :close-on-click-modal="false"
+      :visible.sync="isShow"
+      :title="curObj.id ? '上传视频' : '上传视频'"
+      :fullscreen="false"
+      width="500px"
+      custom-class="xl-dialog"
+      center
+    >
+      <div class="tip">上传新的视频:请等待<span class="b">上传成功</span>后再点击顶部的确定保存</div>
+      <el-upload
+        class="upload-demo"
+        ref="upload"
+        action="https://jsonplaceholder.typicode.com/posts/"
+        :on-preview="handlePreview"
+        :on-remove="handleRemove"
+        :multiple="false"
+        :limit="1"
+        :file-list="fileList"
+        @change="fileChange"
+        :http-request="submitUpload"
+        :auto-upload="true">
+        <el-button v-if="!cObj.video" slot="trigger" size="small" type="primary">选取新视频</el-button>
+        <el-button v-if="fileNextResObj.total && fileNextResObj.total.percent === 100" size="small" type="success" style="margin-left: 10px;">{{ fileNextResObj.total ? fileNextResObj.total.percent === 100 ? '上传成功' :`上传中${parseInt(fileNextResObj.total.percent)}%` : '上传到服务器'}}</el-button>
+        <el-progress v-else-if="fileNextResObj.total" class="tip3" :text-inside="true" :stroke-width="20" :percentage="parseInt(fileNextResObj.total.percent)"></el-progress>
+        <!-- <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> -->
+        <!-- v-else-if="fileNextResObj.total"  fileNextResObj.total.percent-->
+      </el-upload>
+      <div class="xl-form">
+        <div class="xl-form-footer">
+          <el-button class="xl-form-btn t2" @click="close">关 闭</el-button>
+          <el-button class="xl-form-btn t1" @click="close('confirm')">确定</el-button>
+        </div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import * as qiniu from 'qiniu-js'
+import { arrToObj } from '@/utils'
+export default {
+  mixins,
+  props: {
+    isShow: Boolean,
+    curObj: Object
+  },
+  inject: ['parentData'],
+  data() {
+    return {
+      loading: false,
+      cObj: {},
+      fileList: [],
+      fileConfig: {},
+      fileNextResObj: {},
+      fileCompleteResObj: {},
+    }
+  },
+  mixins: [...mixins],
+  watch: {
+    isShow: function(val) {
+      if (val) {
+
+      }
+    },
+  },
+  computed: {
+  },
+  mounted() {
+    this.$api.base.admuploadtoken().then(res => {
+      this.fileConfig = res || {}
+    })
+  },
+  methods: {
+    
+    submitUpload() {
+      if (this.fileNextResObj.total) {
+        this.$msgConfrm('正在上传中,如需重新上传,请保存当前页面重新上传')
+        return
+      }
+      const upload = this.$refs.upload || {}
+      const curFile = upload.uploadFiles[0] || {}
+
+      let config = {
+        useCdnDomain: true,
+        region: qiniu.region.z2,
+        debugLogLevel: 'INFO'
+      }
+      let putExtra = {
+        fname: "",
+        params: {},
+        mimeType: null
+      }
+
+      let next = (response) =>{
+        console.log(response)
+        this.fileNextResObj = response
+      }
+      let complete = (response) =>{
+        // console.log(response)
+        let cObj = this.cObj
+        cObj.video = `${this.fileConfig.domain}/${response.key}`
+        this.cObj = {...cObj}
+        console.log(cObj)
+      }
+
+      let subscription;
+      // 调用sdk上传接口获得相应的observable,控制上传和暂停
+      let observable = qiniu.upload(curFile.raw, curFile.name, this.fileConfig.token, putExtra, config);
+      observable.subscribe(next, null, complete)
+
+      // this.$refs.upload.submit();
+    },
+    handleRemove(file, fileList) {
+      this.fileNextResObj = {}
+      let cObj = this.cObj
+      cObj.video = ''
+      this.cObj = {...cObj}
+      console.log(file, fileList);
+    },
+    handlePreview(file) {
+      console.log(file);
+    },
+    fileChange (e) {
+      console.log(e)
+    },
+
+    close (str) {
+      if (str === 'confirm') {
+        if (this.cObj.video) {
+          this.$emit('close', this.cObj)
+        } else {
+          this.$msgConfrm('请上传视频')
+        }
+      } else {
+        this.$emit('close', {})
+      }
+    },
+  }
+}
+</script>
+<style lang="scss" scoped>
+.lib-edit {
+  padding-top: 0;
+  width: 500px;
+  ::v-deep .el-date-editor.el-input {
+    width: 100%;
+  }
+}
+
+.tip {
+  color: #f00;
+  .b {
+    font-weight: bold;
+    display: inline-block;
+    font-size: 20px;
+  }
+}
+.tip2 {
+  display: inline-block;
+  width: 300px;
+  color: #606266;
+}
+.tip3 {
+  display: inline-block;
+  margin-left: 10px;
+  width: 300px;
+}
+.i {
+  border: 0;
+  border-bottom: 1px solid #dcdcdc;
+  width: 50px;
+  text-align: center;
+  outline: none;
+}
+.dot {
+  display: inline-block;
+  width: 50px;
+  &.t2 {
+    text-align: center;
+  }
+}
+
+</style>

+ 152 - 0
src/views/house/components/popup/EstateVideo.vue

@@ -0,0 +1,152 @@
+<template>
+  <div>
+    <el-dialog
+      v-loading="loading"
+      :show-close="false"
+      :close-on-click-modal="false"
+      :visible.sync="isShow"
+      :title="curObj.id ? '上传视频' : '上传视频'"
+      :fullscreen="false"
+      width="500px"
+      custom-class="xl-dialog"
+      center
+    >
+
+      <div class="ri-video">
+        <div v-if="cObj.house_video" class="close" @click="videoDel()"></div>
+        <video
+          v-if="cObj.house_video"
+          controls 
+          muted 
+          loop 
+          width="200"
+          >
+            <source 
+            :src="cObj.house_video" 
+            type="video/mp4" 
+            />
+        </video>
+        <div v-else @click="openUvPopup()" class="riv-btn"></div>
+      </div>
+
+
+      <div class="xl-form">
+        <div class="xl-form-footer">
+          <el-button class="xl-form-btn t2" @click="close">关 闭</el-button>
+          <el-button class="xl-form-btn t1" @click="close('confirm')">确定</el-button>
+        </div>
+      </div>
+    </el-dialog>
+    <upload-video
+      :isShow="isUvShow"
+      :curObj="cObj"
+      @close="closeUvPopup"
+     />
+  </div>
+</template>
+<script>
+import * as qiniu from 'qiniu-js'
+import { arrToObj } from '@/utils'
+import UploadVideo from '@/components/Common/UploadVideo'
+export default {
+  mixins,
+  components: {
+    UploadVideo,
+  },
+  props: {
+    isShow: Boolean,
+    curObj: Object
+  },
+  inject: ['parentData'],
+  data() {
+    return {
+      loading: false,
+      isUvShow: false,
+      cObj: {},
+    }
+  },
+  mixins: [...mixins],
+  watch: {
+    isShow: function(val) {
+      if (val) {
+        this.cObj.house_video = this.curObj.house_video
+      }
+    },
+  },
+  computed: {
+  },
+  mounted() {
+  },
+  methods: {
+
+
+    closeUvPopup (bcData) {
+      this.isUvShow = false
+      if (bcData && bcData.video) {
+        this.cObj.house_video = bcData.video
+      }
+    },
+    openUvPopup () {
+      this.isUvShow = true
+    },
+    videoDel () {
+      this.$msg(`您确定要删除该视频吗?`, 'confirm', () => {
+        this.cObj = JSON.parse(JSON.stringify({}))
+      })
+    },
+
+
+    close (str) {
+      if (str === 'confirm') {
+        this.$msg(`您确定要保存该视频吗?`, 'confirm', () => {
+          this.$api.house.admestatevideoedit({
+            id: this.curObj.id,
+            video: this.cObj.house_video
+          }).then(data => {
+            this.$emit('close', this.cObj)
+            this.$msgConfrm(`已保存!`)
+          })
+        })
+      } else {
+        this.$emit('close', {})
+      }
+    },
+  }
+}
+</script>
+<style lang="scss" scoped>
+@import '../../../../styles/libEdit.scss';
+.lib-edit {
+  padding-top: 0;
+  width: 500px;
+  ::v-deep .el-date-editor.el-input {
+    width: 100%;
+  }
+}
+
+.ri-video {
+  text-align: center;
+  margin: 50px;
+  position: relative;
+  .close {
+    position: absolute;
+    width: 20px;
+    height: 20px;
+    top: -10px;
+    right: -10px;
+    background: url(../../../../assets/icon_g_close.png) no-repeat;
+    background-size: 20px;
+    cursor: pointer;
+  }
+  .riv-btn {
+    display: inline-block;
+    vertical-align: middle;
+    width: 200px;
+    height: 112px;
+    cursor: pointer;
+    background: url(../../../../assets/bg_upload.png) no-repeat;
+    background-size: 200px 112px;
+  }
+}
+
+</style>

+ 97 - 2
src/views/house/components/popup/IndexEdit.vue

@@ -54,6 +54,30 @@
                   </div>
                   <div class="ri-content">
                     <div class="ri-op" v-for="(area, three) in room.area_list" :key="three">
+
+
+
+                      <div class="ri-video">
+                        <div v-if="area.house_video" class="close" @click="videoDel(one, two, three)"></div>
+                        <video
+                          v-if="area.house_video"
+                          controls 
+                          muted 
+                          loop 
+                          width="200"
+                          >
+                            <source 
+                            :src="area.house_video" 
+                            type="video/mp4" 
+                            />
+                        </video>
+                        <div v-else @click="openUvPopup(one, two, three)" class="riv-btn"></div>
+                        <!-- <el-button @click="openUvPopup(one, two, three)" size="small" type="info" class="riv-btn" >上传视频</el-button> -->
+                      </div>
+
+
+
+
                       <el-upload
                         class="ri-img"
                         :action="`${domainUrl}/adm/upload/cloud`"
@@ -115,16 +139,23 @@
       :curObj="ptObj"
       @close="closePtPopup"
      />
+     <upload-video
+      :isShow="isUvShow"
+      :curObj="uvObj"
+      @close="closeUvPopup"
+     />
   </div>
 </template>
 <script>
 import { arrToObj } from '@/utils'
 import handleMap from '@/components/Common/Map'
+import UploadVideo from '@/components/Common/UploadVideo'
 import PtEdit from './ProductTypeEdit'
 export default {
   components: {
     handleMap,
     PtEdit,
+    UploadVideo,
   },
   mixins,
   props: {
@@ -146,6 +177,8 @@ export default {
       tempImgIndex: [0, 0, 0],
       ptObj: {},
       isPtShow: false,
+      uvObj: {},
+      isUvShow: false,
       areaList: [],
       areaChildList: [],
       areaValIdObj: {},
@@ -236,6 +269,36 @@ export default {
         }
       })
     },
+
+
+
+    closeUvPopup (bcData) {
+      this.isUvShow = false
+      if (bcData && bcData.video) {
+        const { oldArr } = this.uvObj
+
+        let productData = [...this.productData]
+        let areaObj = productData[oldArr[0]].house_type_list[oldArr[1]].area_list[oldArr[2]]
+        areaObj.house_video = bcData.video
+        this.productData = [...productData]
+      }
+    },
+    openUvPopup (one, two, three) {
+      this.isUvShow = true
+      this.uvObj = {
+        oldArr: [one, two, three]
+      }
+    },
+    videoDel (one, two, three) {
+      this.$msg(`您确定要删除该视频吗?`, 'confirm', () => {
+        let productData = [...this.productData]
+        let areaObj = productData[one].house_type_list[two].area_list[three]
+        areaObj.house_video = ''
+        this.productData = [...productData]
+      })
+    },
+
+
     closePtPopup (bcData) {
       this.isPtShow = false
       if (bcData) {
@@ -632,11 +695,43 @@ export default {
     margin-bottom: 10px;
   }
   .ri-op {
+    // display: inline-block;
+    // vertical-align: middle;
+    margin-right: 20px;
+    margin-bottom: 20px;
+  }
+
+
+
+  .ri-video {
     display: inline-block;
+    width: 200px;
+    text-align: center;
     vertical-align: middle;
-    margin-right: 20px;
-    margin-bottom: 10px;
+    margin-right: 30px;
+    position: relative;
+    .close {
+      position: absolute;
+      width: 20px;
+      height: 20px;
+      top: -10px;
+      right: -10px;
+      background: url(../../../../assets/icon_g_close.png) no-repeat;
+      background-size: 20px;
+      cursor: pointer;
+    }
+    .riv-btn {
+      display: inline-block;
+      vertical-align: middle;
+      width: 100px;
+      height: 56px;
+      cursor: pointer;
+      background: url(../../../../assets/bg_upload.png) no-repeat;
+      background-size: 100px 56px;
+    }
   }
+  
+
   .ri-img {
     display: inline-block;
     vertical-align: middle;

+ 32 - 4
src/views/house/index.vue

@@ -67,6 +67,11 @@
       :curObj="curObj"
       @close="closeHRPopup"
     />
+    <estate-video
+      :isShow="isEVShow"
+      :curObj="curObj"
+      @close="closeEVPopup"
+    />
   </div>
 </template>
 <script>
@@ -78,6 +83,7 @@ import Photo2Edit from './components/popup/PhotoEdit2'
 import VrEdit from './components/popup/VrEdit'
 import ThemeHouseEdit from './components/popup/ThemeHouseEdit'
 import HelpRule from './components/popup/HelpRule'
+import EstateVideo from './components/popup/EstateVideo'
 import baseTable from '_m/baseTable.js'
 export default {
   name: 'houseIndex',
@@ -89,6 +95,7 @@ export default {
     VrEdit,
     ThemeHouseEdit,
     HelpRule,
+    EstateVideo,
   },
   provide() {
     return {
@@ -103,6 +110,7 @@ export default {
       isDtlShow: false,
       isPhotoShow: false,
       isPhoto2Show: false,
+      isEVShow: false,
       isVrShow: false,
       // noCreated: true,
       curObj: {},
@@ -160,12 +168,13 @@ export default {
             { label: '保存排序', func: this.saveHandle, btnType: 'success' },
             { label: '编辑信息', func: this.openPopup, btnType: 'primary' },
             { label: '编辑相册', func: this.openPhotoPopup, btnType: 'info' },
+            { label: '内部相册库', func: this.openPhoto2Popup, btnType: 'primary' },
+            { label: '楼盘视频', func: this.openEVPopup, btnType: 'info' },
+            { label: '楼盘航拍', func: this.openVrPopup, btnType: 'primary' },
+            { label: '置业顾问', func: this.openSale, btnType: 'info' },
             { label: '一房一价', func: (item) => {
               this.$router.push('/house/buildunit?id=' + item.id + '&name=' + item.estate_name)
             }, btnType: 'primary' },
-            { label: '内部相册库', func: this.openPhoto2Popup, btnType: 'info' },
-            { label: '楼盘航拍', func: this.openVrPopup, btnType: 'primary' },
-            { label: '置业顾问', func: this.openSale, btnType: 'info' },
             { label: '楼盘动态', func: this.openNews, btnType: 'info' },
             { label: '历史成交价', func: this.openPrice, btnType: 'info' },
             { label: '模块主题', func: this.openTHEPopup, btnType: 'info' },
@@ -303,7 +312,26 @@ export default {
         this.fetchData()
       }
     },
-    
+    openEVPopup(row) {
+      if (row && row.id) {
+        this.curObj = row
+        this.$api.house.admestatevideodetail({
+          id: this.curObj.id
+        }).then(res => {
+          this.curObj.house_video = res.video || ''
+          this.isEVShow = true
+        })
+      } else {
+        this.curObj = {}
+        this.isEVShow = true
+      }
+    },
+    closeEVPopup(obj) {
+      this.isEVShow = false
+      if (obj) {
+        this.fetchData()
+      }
+    },
   }
 }
 </script>

+ 1 - 1
src/views/room/components/popup/IndexEdit.vue

@@ -221,7 +221,7 @@ export default {
       }
 
       let next = (response) =>{
-        console.log(response)
+        console.log(response, 111)
         this.fileNextResObj = response
       }
       let complete = (response) =>{

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov