1
mayisheng
2022-08-15 81f54040c2cb65537c6c6e1db8358a39a57dea0d
src/components/mobilePopupOur/index.vue
@@ -1,221 +1,355 @@
<template>
  <div id="mobilePopupOur" v-loading.fullscreen.lock="fullscreenLoading">
    <div class="m_p_heard">
      <div class="m_p_h_break" @click="closeBigPopup">
        <i class="el-icon-arrow-left icon"></i>
      </div>
      <div class="m_p_h_center">
        <div>
          <div v-if="mBigPopup.search" style="color: #fff">
            查询结果{{ searchLabel ? "--" + searchLabel : "" }}
          </div>
          <el-dropdown trigger="click" @command="choiceIt" v-else>
            <span class="el-dropdown-link">
              {{ choiceValue }}<i class="el-icon-arrow-down el-icon--right"></i>
            </span>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item
                v-for="(item, index) in choiceData"
                :key="index"
                :command="item"
                >{{ item.name }}</el-dropdown-item
              >
            </el-dropdown-menu>
          </el-dropdown>
        </div>
      </div>
    </div>
    <div class="m_p_center">
      <div
        class="m_p_c_tableIn"
        style="padding-top: 10px"
        v-if="tabTable.length <= 0"
      >
        <el-empty
          v-show="onlyData.length == 0"
          description="暂无数据"
        ></el-empty>
        <mobilePopupOurOnce
          v-for="(citem, cindex) in onlyData"
          :key="citem.bgImg + ''"
          :ends="onlyData.length - 1 == cindex"
          :onceData="citem"
        ></mobilePopupOurOnce>
        <div v-show="onlyData.length != 0">
          <el-divider content-position="left">
            <i class="el-icon-s-promotion"></i>&nbsp;&nbsp;&nbsp;暂无更多
          </el-divider>
        </div>
      </div>
      <el-tabs v-model="activeName" @tab-click="handleClick" v-else>
        <el-tab-pane
          v-for="(item, index) in tabTable"
          :key="index"
          :label="item.title"
          :name="item.key"
        >
          <div class="m_p_c_tableIn">
            <el-empty
              v-show="item.child.length == 0"
              description="暂无数据"
            ></el-empty>
            <mobilePopupOurOnce
              v-for="(citem, cindex) in item.child"
              :key="citem.icon + ''"
              :ends="item.child.length - 1 == cindex"
              :onceData="citem"
            ></mobilePopupOurOnce>
            <div v-show="item.child.length != 0">
              <el-divider content-position="left">
                <i class="el-icon-s-promotion"></i>&nbsp;&nbsp;&nbsp;暂无更多
              </el-divider>
    <!-- 信息窗口主体mobilePopupOur -->
    <div id="mobilePopupOur" v-loading.fullscreen.lock="fullscreenLoading">
        <div class="m_p_heard">
            <div class="m_p_h_break" @click="closeBigPopup">
                <i class="el-icon-arrow-left icon"></i>
            </div>
          </div>
        </el-tab-pane>
      </el-tabs>
            <div class="m_p_h_center">
                <div>
                    <div
                        v-if="mBigPopup.search"
                        style="color: #fff"
                    >查询结果{{ searchLabel ? " -- " + searchLabel : "" }}</div>
                    <el-dropdown trigger="click" @command="choiceIt" v-else>
                        <span class="el-dropdown-link">
                            {{ choiceValue }}
                            <i class="el-icon-arrow-down el-icon--right"></i>
                        </span>
                        <el-dropdown-menu slot="dropdown">
                            <el-dropdown-item
                                v-for="(item, index) in choiceData"
                                :key="index"
                                :command="item"
                            >{{ item.name }}</el-dropdown-item>
                        </el-dropdown-menu>
                    </el-dropdown>
                </div>
            </div>
        </div>
        <div class="m_p_center">
            <div class="m_p_c_tableIn" style="padding-top: 10px" v-if="tabTable.length <= 0">
                <el-empty v-show="onlyData.length == 0" description="暂无数据"></el-empty>
                <mobilePopupOurOnce
                    v-for="(citem, cindex) in onlyData"
                    :key="citem.name + cindex"
                    :ends="onlyData.length - 1 == cindex"
                    :onceData="citem"
                ></mobilePopupOurOnce>
                <div v-show="onlyData.length != 0">
                    <el-divider content-position="left">
                        <i class="el-icon-s-promotion"></i>&nbsp;&nbsp;&nbsp;暂无更多
                    </el-divider>
                </div>
            </div>
            <el-tabs v-model="activeName" @tab-click="handleClick" v-else>
                <el-tab-pane
                    v-for="(item, index) in tabTable"
                    :key="index"
                    :label="item.title"
                    :name="item.key"
                >
                    <div class="m_p_c_tableIn">
                        <el-empty v-show="item.child.length == 0" description="暂无数据"></el-empty>
                        <mobilePopupOurOnce
                            v-for="(citem, cindex) in item.child"
                            :key="citem.icons"
                            :ends="item.child.length - 1 == cindex"
                            :onceData="citem"
                        ></mobilePopupOurOnce>
                        <!-- {{ citem.icon }} -->
                        <div v-show="item.child.length != 0">
                            <el-divider content-position="left">
                                <i class="el-icon-s-promotion"></i>&nbsp;&nbsp;&nbsp;暂无更多
                            </el-divider>
                        </div>
                    </div>
                </el-tab-pane>
            </el-tabs>
        </div>
    </div>
  </div>
</template>
<script>
import { getListarc } from "@/api/mobile/public/arc"; //头部下标签页数据
import { mapGetters } from "vuex";
import { getListarc } from '@/api/mobile/public/arc' // 头部下标签页数据
import { mapGetters } from 'vuex'
// 搜索
import { getListSearch } from '@/api/mobile/search/index'
export default {
  computed: {
    ...mapGetters(["mBigPopup", "popupOurOpenData"]),
  },
  name: "mobilePopupOur",
  data() {
    return {
      searchLabel: "",
      choiceValue: "",
      choiceKey: "",
      choiceMethod: "",
      choiceData: [],
      tabTable: [],
      fullscreenLoading: false,
      activeName: "1",
      choiceMain: "",
      onlyData: [],
    };
  },
  mounted() {
    this.fullscreenLoading = true;
    if (this.mBigPopup.search) {
      //搜索事件
      this.searchLabel = this.mBigPopup.value;
      // console.log("查询搜索结果", this.mBigPopup.value);
      this.fullscreenLoading = false;
      this.choiceMain = "搜索";
      return;
    computed: {
        ...mapGetters(['mBigPopup', 'popupOurOpenData'])
    },
    name: 'mobilePopupOur',
    data () {
        return {
            searchLabel: '',
            choiceValue: '',
            choiceKey: '',
            choiceMethod: '',
            choiceData: [],
            tabTable: [],
            fullscreenLoading: false,
            activeName: '1',
            choiceMain: '',
            onlyData: []
        }
    },
    mounted () {
        this.fullscreenLoading = true
        if (this.mBigPopup.search) {
            // 搜索事件
            this.searchLabel = this.mBigPopup.value
            // console.log("查询搜索结果", this.mBigPopup.value);
            this.fullscreenLoading = false
            this.choiceMain = '搜索'
            this.getListSearchMethod(this.mBigPopup.value)
            return
        }
        this.choiceMain = this.popupOurOpenData.qurey // 进入的主题:列:机构单位,校区建筑
        this.choiceData = this.popupOurOpenData.main // 带入数据  包括name、type、method
        this.choiceValue = this.popupOurOpenData.main[0].name
        this.choiceKey = this.popupOurOpenData.main[0].type
        this.choiceMethod = this.popupOurOpenData.main[0].method
        this.$store.commit('MSET_BIGPOPUPAFTER', false) // 关闭前一个弹窗
        // console.log("请求对应街道接口", this.popupOurOpenData);
        this.getDataHeardDown()
    },
    watch: {
        fullscreenLoading () {
            if (this.fullscreenLoading) {
                this.notLine()
            }
        }
    },
    methods: {
        handleClick (tab, event) {
            // 头下部标签
            this.fullscreenLoading = true
            this.getOutList(this.activeName, this.choiceKey)
        },
        choiceIt (command) {
            // 头部下拉菜单
            this.fullscreenLoading = true
            this.choiceValue = command.name
            this.choiceKey = command.type
            this.choiceMethod = command.method // 更改请求
            // console.log("请求对应头部下拉菜单接口", command);
            this.getOutList(this.activeName, this.choiceKey)
        },
        closeBigPopup () {
            this.$store.commit('MSET_BIGPOPUP', false)
        },
        getDataHeardDown () {
            if (this.choiceMain == '活动') {
                // 不请求头部标签页数据
                this.getOutList(this.choiceKey)
                return
            }
            if (this.choiceMain == '机构单位') {
                this.getOutList('', this.choiceKey)
                return
            }
            // 获取头下部标签页
            getListarc().then((res) => {
                const title = []
                res.data.data.forEach((item) => {
                    title.push({
                        title: item.dictValue,
                        flag: false,
                        key: item.dictKey,
                        child: []
                    })
                })
                this.tabTable = title
                this.getOutList(this.activeName, this.choiceKey)
            })
        },
        // 请求
        getOutList (campus, type) {
            // console.log(this.choiceMain, campus, type, "see");
            const that = this
            let d
            if (this.choiceMain == '机构单位') {
                // 不传标签页
                d = {
                    type: type
                }
            } else if (
                this.choiceMain == '生活设施' ||
                this.choiceMain == '出入口' ||
                this.choiceMain == '停车场'
            ) {
                // 改变传入属性
                d = {
                    campus: campus,
                    lifetype: type
                }
            } else {
                d = {
                    campus: campus,
                    type: type
                }
            }
            this.choiceMethod(d).then((res) => {
                console.log(res)
                const data = res.data.data
                const outList = []
                if (
                    this.mBigPopup.name == '校区建筑' ||
                    this.mBigPopup.name == '文化风景'
                ) {
                    // 校区建筑使用该id获取具体信息
                    data.forEach((item) => {
                        const icon = item.tpurl ? item.tpurl.split(',') : item.id
                        outList.push({
                            id: item.id,
                            name: item.mechanismname,
                            icon: icon,
                            icons: icon + item.mechanismname, // 图片响应改变
                            from: this.choiceMain,
                            video: item.videourl,
                            buts:
                                this.mBigPopup.name == '校区建筑' ||
                                    this.mBigPopup.name == '文化风景'
                                    ? ['定位', '实景', '图集']
                                    : ['定位']
                        })
                    })
                } else if (this.mBigPopup.name == '活动') {
                    // 校区建筑使用该id获取具体信息
                    data.records.forEach((item) => {
                        const icon = item.tpurl.split(',')
                        const useData = {
                            name: item.hdname,
                            // lntLat: [item.jd, item.wd],
                            // alt: item.gd,
                            // heading: item.heading,
                            // pitch: item.pitch,
                            // roll: item.roll,
                            bgImg: item.tpurl,
                            icon: icon,
                            icons: icon + item.hdname, // 图片响应改变
                            from: this.choiceMain,
                            // QRImg: item.codeurl,
                            websiteUrl: item.websiteurl,
                            telePhone: item.telephone,
                            // address: item.address,
                            introduce: item.context,
                            video: item.videourl,
                            buts:
                                that.mBigPopup.name == '校区建筑' ||
                                    that.mBigPopup.name == '文化风景'
                                    ? ['定位', '实景', '图集']
                                    : ['定位'],
                            // 活动添加的字段
                            addressname: item.addressname.split(';'),
                            address: item.address.split(';'),
                            lxname: item.lxname.split(';'),
                            lx: item.lx.split(';'),
                            lntLat: [
                                item.address.split(';')[0].split(',')[0],
                                item.address.split(';')[0].split(',')[1]
                            ],
                            panoramaurl: item.panoramaurl, // 全景
                            x: item.x
                        }
                        outList.push(useData)
                    })
                } else {
                    // 正常获取全部数据
                    data.records.forEach((item) => {
                        const icon = item.tpurl.split(',')
                        const useData = {
                            name: item.mechanismname,
                            lntLat: [item.jd, item.wd],
                            alt: item.gd,
                            heading: item.heading,
                            pitch: item.pitch,
                            roll: item.roll,
                            bgImg: item.tpurl,
                            icon: icon,
                            icons: icon + item.mechanismname, // 图片响应改变
                            from: this.choiceMain,
                            QRImg: item.codeurl,
                            websiteUrl: item.websiteurl,
                            telePhone: item.telephone,
                            address: item.address,
                            introduce: item.introduce,
                            video: item.videourl,
                            buts:
                                that.mBigPopup.name == '校区建筑' ||
                                    that.mBigPopup.name == '文化风景'
                                    ? ['定位', '实景', '图集']
                                    : ['定位'],
                            panoramaurl: item.panoramaurl, // 全景
                            x: item.x
                        }
                        outList.push(useData)
                    })
                }
                that.fullscreenLoading = false
                if (this.choiceMain == '机构单位' || this.choiceMain == '活动') {
                    that.onlyData = outList
                    return
                }
                that.tabTable[+campus - 1].child = outList
            })
        },
        // 搜索请求
        getListSearchMethod (name) {
            const val = {
                mechanismName: name
            }
            const that = this
            getListSearch(val).then((res) => {
                if (res.data.code != 200) {
                    return
                }
                const data = res.data.data
                // 正常获取全部数据
                const outList = []
                data.forEach((item) => {
                    const icon = item.tpurl.split(',')
                    const useData = {
                        name: item.mechanismname,
                        lntLat: [item.jd, item.wd],
                        alt: item.gd,
                        heading: item.heading,
                        pitch: item.pitch,
                        roll: item.roll,
                        bgImg: item.tpurl,
                        icon: icon,
                        icons: icon + item.mechanismname, // 图片响应改变
                        from: this.choiceMain,
                        QRImg: item.codeurl,
                        websiteUrl: item.websiteurl,
                        telePhone: item.telephone,
                        address: item.address,
                        introduce: item.introduce,
                        video: item.videourl,
                        buts:
                            that.mBigPopup.name == '校区建筑' ||
                                that.mBigPopup.name == '文化风景'
                                ? ['定位', '实景', '图集']
                                : ['定位'],
                        panoramaurl: item.panoramaurl, // 全景
                        x: item.x
                    }
                    outList.push(useData)
                })
                that.fullscreenLoading = false
                that.onlyData = outList
            })
        },
        notLine () {
            console.log('等待关闭')
            setTimeout(() => {
                this.fullscreenLoading = false
                console.log('关闭dolog')
            }, 5000)
        }
    }
    this.choiceMain = this.popupOurOpenData.qurey; // 进入的主题:列:机构单位,校园建筑
    this.choiceData = this.popupOurOpenData.main; //带入数据  包括name、type、method
    this.choiceValue = this.popupOurOpenData.main[0].name;
    this.choiceKey = this.popupOurOpenData.main[0].type;
    this.choiceMethod = this.popupOurOpenData.main[0].method;
    this.$store.commit("MSET_BIGPOPUPAFTER", false); //关闭前一个弹窗
    // console.log("请求对应街道接口", this.popupOurOpenData);
    this.getDataHeardDown();
  },
  methods: {
    handleClick(tab, event) {
      //头下部标签
      this.fullscreenLoading = true;
      this.getOutList(this.activeName, this.choiceKey);
    },
    choiceIt(command) {
      //头部下拉菜单
      this.fullscreenLoading = true;
      this.choiceValue = command.name;
      this.choiceKey = command.type;
      this.choiceMethod = command.method; //更改请求
      // console.log("请求对应头部下拉菜单接口", command);
      this.getOutList(this.activeName, this.choiceKey);
    },
    closeBigPopup() {
      this.$store.commit("MSET_BIGPOPUP", false);
    },
    getDataHeardDown() {
      if (this.choiceMain == "机构单位") {
        //不请求头部标签页数据
        this.getOutList(this.activeName, this.choiceKey);
        return;
      }
      //获取头下部标签页
      getListarc().then((res) => {
        let title = [];
        res.data.data.forEach((item) => {
          title.push({
            title: item.dictValue,
            flag: false,
            key: item.dictKey,
            child: [],
          });
        });
        this.tabTable = title;
        this.getOutList(this.activeName, this.choiceKey);
      });
    },
    //请求
    getOutList(campus, type) {
      let that = this;
      this.choiceMethod({ campus: campus, type: type }).then((res) => {
        const data = res.data.data;
        let outList = [];
        if (this.choiceMain == "校园建筑") {
          // 校园建筑使用该id获取具体信息
          data.forEach((item) => {
            let icon = item.tpurl.split(",");
            outList.push({
              id: item.id,
              name: item.mechanismname,
              icon: icon,
              from: this.choiceMain,
              buts:
                this.mBigPopup.name == "校园建筑" ||
                this.mBigPopup.name == "文化风景"
                  ? ["定位", "实景", "图集"]
                  : ["定位"],
            });
          });
        } else {
          //正常获取全部数据
          data.records.forEach((item) => {
            let icon = item.tpurl.split(",");
            outList.push({
              name: item.mechanismname,
              lntLat: [item.jd, item.wd],
              alt: item.gd,
              heading: item.heading,
              pitch: item.pitch,
              roll: item.roll,
              bgImg: item.tpurl,
              icon: icon,
              from: this.choiceMain,
              QRImg: item.codeurl,
              websiteUrl: item.websiteurl,
              telePhone: item.telephone,
              address: item.address,
              introduce: item.introduce,
              buts:
                that.mBigPopup.name == "校园建筑" ||
                that.mBigPopup.name == "文化风景"
                  ? ["定位", "实景", "图集"]
                  : ["定位"],
            });
          });
        }
        that.fullscreenLoading = false;
        if (this.choiceMain == "机构单位") {
          that.onlyData = outList;
          return;
        }
        that.tabTable[+campus - 1].child = outList;
      });
    },
  },
};
</script>
}
</script>