| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307 |
- <!-- -->
- <template>
- <div class="seek_data_box" :style="'height:' + fullHeight + 'px'" v-loading="loading">
- <!-- 头部 -->
- <div class="seek_data_head">
- <div class="seek_data_head_returnA" @click="FanHui()">
- <img src="../../assets/image/returnA.png" alt class="seek_data_head_returnA_img" />
- </div>
- <div class="seek_data_head_ipt_div">
- <input @click="iptfocus()" type="text" v-model="seek_dataA" class="seek_data_head_ipt" />
- </div>
- <div class="seek_data_head_sousuo">
- <img src="../../assets/image/seek.png" alt class="seek_data_head_sousuo_img" />
- </div>
- </div>
- <!-- 返回顶部 -->
- <!-- <goTop></goTop> -->
- <!-- 列表 -->
- <mescroll-vue ref="mescroll" :down="mescrollDown" :up="mescrollUp" @init="mescrollInit">
- <div class="seek_data_list">
- <ul class="seek_data_ul" v-if="axiosShow">
- <li
- class="seek_data_li"
- @click="details($event, index)"
- v-for="(item, index) in this.redata"
- :key="index"
- >
- <!-- 图片 -->
- <div class="seek_data_li_div">
- <img
- v-lazy="item.img_urls === null || item.img_urls === '' ? './static/picture.png' : item.img_urls"
- alt
- class="seek_data_li_img"
- />
- </div>
- <!-- 昆虫或病害名称 -->
- <div class="seek_data_li_name">{{ item.name | ellipsis }}</div>
- <!-- 科目 -->
- <div class="seek_data_li_subject">
- <span class="seek_data_li_subject_text">{{ item.course | ellipsis }}</span>
- </div>
- <!-- 详情按钮 -->
- <div class="seek_data_li_btn_div">
- <span class="seek_data_li_btn_text">详情</span>
- <img src="../../assets/image/right.png" alt class="seek_data_li_btn_img" />
- </div>
- </li>
- </ul>
- <!-- 暂空判断 -->
- <div class="seek_data_judge" v-else>
- <img src="../../assets/image/wu.png" alt class="seek_data_judge_img" />
- <div class="seek_data_judge_text">抱歉,暂无此数据</div>
- </div>
- </div>
- </mescroll-vue>
- </div>
- </template>
- <script>
- // import goTop from "../goTop/goTop"; //回到顶部
- // 引入mescroll的vue组件
- import MescrollVue from "mescroll.js/mescroll.vue";
- export default {
- name: "seek_data",
- //限时数据文本的字数限时
- filters: {
- ellipsis(value) {
- if (!value) return "";
- if (value.length > 5) {
- return value.slice(0, 5) + "...";
- }
- return value;
- }
- },
- components: {
- // goTop,
- MescrollVue // 注册mescroll组件
- },
- data() {
- return {
- fullHeight: document.documentElement.clientHeight,
- seek_dataA: localStorage.getItem("seek_name"),
- redata: [],
- axiosShow: true, //暂空判断
- //测试
- mescroll: null, // mescroll实例对象
- mescrollDown: {}, //下拉刷新的配置. (如果下拉刷新和上拉加载处理的逻辑是一样的,则mescrollDown可不用写了)
- mescrollUp: {
- // 上拉加载的配置.
- callback: this.upCallback, // 上拉回调,此处简写; 相当于 callback: function(page, mescroll) { }
- //以下是一些常用的配置,当然不写也可以的.
- page: {
- num: 0, //当前页 默认0,回调之前会加1; 即callback(page)会从1开始
- size: 6 //每页数据条数,默认10
- },
- isBounce: true, //根据记录的滚动条高度回弹
- htmlNodata: '<p class="upwarp-nodata">-- 已经到底了! --</p>',
- noMoreSize: 6, //如果列表已无数据,可设置列表的总数量要大于5才显示无更多数据;
- // 避免列表数据过少(比如只有一条数据),显示无更多数据会不好看
- // 这就是为什么无更多数据有时候不显示的原因
- toTop: {
- //回到顶部按钮
- // src: "../../../static/gotop.png", //图片路径,默认null,支持网络图
- src:
- "http://pic.51yuansu.com/pic3/cover/00/65/23/5896fa4bc81fc_610.jpg", //图片路径,默认null,支持网络图
- offset: 800 //列表滚动1000px才显示回到顶部按钮
- },
- empty: {
- //列表第一页无任何数据时,显示的空提示布局; 需配置warpId才显示
- warpId: "xxid", //父布局的id (1.3.5版本支持传入dom元素)
- icon: "./static/mescroll/mescroll-empty.png", //图标,默认null,支持网络图
- tip: "暂无相关数据~" //提示
- },
- onScroll: function(mescroll, y, isUp) {
- //监听滚动条
- //y为列表当前滚动条的位置
- },
- lazyLoad: {
- use: true // 是否开启懒加载,默认false
- }
- },
- aggregate: "", //后端传来数据的总条数
- loading: true, //加载
- };
- },
- //监听属性 类似于data概念
- computed: {},
- beforeRouteEnter(to, from, next) {
- // 如果没有配置顶部按钮或isBounce,则beforeRouteEnter不用写
- next(vm => {
- // 滚动到原来的列表位置,恢复顶部按钮和isBounce的配置
- vm.$refs.mescroll && vm.$refs.mescroll.beforeRouteEnter();
- });
- },
- beforeRouteLeave(to, from, next) {
- // 如果没有配置顶部按钮或isBounce,则beforeRouteLeave不用写
- // 记录列表滚动的位置,隐藏顶部按钮和isBounce的配置
- this.$refs.mescroll && this.$refs.mescroll.beforeRouteLeave();
- next();
- },
- //监控data中的数据变化
- watch: {
- fullHeight(val) {
- //监控浏览器高度变化
- if (!this.timer) {
- this.fullHeight = val;
- this.timer = true;
- let that = this;
- setTimeout(function() {
- //防止过度调用监测事件,导致卡顿
- that.timer = false;
- }, 400);
- }
- }
- },
- //方法集合
- methods: {
- // mescroll组件初始化的回调,可获取到mescroll对象
- mescrollInit(mescroll) {
- this.mescroll = mescroll; // 如果this.mescroll对象没有使用到,则mescrollInit可以不用配置
- },
- // 上拉回调 page = {num:1, size:10}; num:当前页 ,默认从1开始; size:每页数据条数,默认10
- upCallback(page, mescroll) {
- let _this = this;
- let postData = this.$qs.parse({
- page: this.mescrollUp.page.num,
- name: localStorage.getItem("seekName")
- });
- this.$axios({
- method: "post",
- url: "http://120.27.222.26:5555/search",
- data: postData
- })
- .then(res => {
- //判断data中的变量是否为空 ,为空的话存后端发来的总条数
- if (this.aggregate === "") {
- //存变量
- this.aggregate = res.data.num;
- var b = "6";
- this.aggregate = this.aggregate / b;
- this.aggregate = Math.ceil(this.aggregate); //将小数点转换为整数
- }
- //删除了默认的每页条数后判断数是否大于页码
- if (this.mescrollUp.page.num <= this.aggregate) {
- let postData = this.$qs.parse({
- page: this.mescrollUp.page.num,
- name: localStorage.getItem("seekName")
- });
- this.$axios({
- method: "post",
- url: "http://120.27.222.26:5555/search",
- data: postData
- })
- .then(res => {
- let arr = res.data.dat;
- // 如果是第一页需手动置空列表
- if (page.num === 1) this.redata = [];
- // 把请求到的数据添加到列表
- this.redata = this.redata.concat(arr);
- // 数据渲染成功后,隐藏下拉刷新的状态
- this.$nextTick(() => {
- mescroll.endSuccess(arr.length);
- });
- if (res.data.dat.length === 0) {
- _this.axiosShow = false;
- _this.FenShow = false;
- } else if (res.data.dat.length !== 0) {
- _this.axiosShow = true;
- _this.FenShow = true;
- }
- _this.loading = false
- })
- .catch(error => {
- mescroll.endErr();
- });
- } else if (this.mescrollUp.page.num > this.aggregate) {
- _this.loading = false
- // 数据渲染成功后,隐藏下拉刷新的状态
- this.$nextTick(() => {
- mescroll.endSuccess(this.aggregate);
- });
- }
- if (this.aggregate === 0) {
- this.axiosShow = false;
- this.FenShow = false;
- }
- })
- .catch(error => {
- mescroll.endErr();
- });
- },
- //动态获取浏览器高度
- get_boderHeight() {
- const that = this;
- window.onresize = () => {
- return (() => {
- window.fullHeight = document.documentElement.clientHeight;
- that.fullHeight = window.fullHeight;
- })();
- };
- },
- iptfocus() {
- let _this = this;
- _this.$router.push("/seek");
- localStorage.removeItem("seek_name");
- location.reload();
- },
- // 返回home页面
- FanHui() {
- let _this = this;
- if (localStorage.getItem('seekBiaishi') == '1') {
- _this.$router.push('/repository')
- localStorage.removeItem('seekBiaishi')
- } else {
- _this.$router.push("/home");
- }
- localStorage.removeItem("seek_name");
- },
- //点击详情进入页面
- details(e, index) {
- let _this = this;
- if (
- e.target.className === "seek_data_li_btn_text" ||
- e.target.className === "seek_data_li_div" ||
- e.target.className === "seek_data_li_img" ||
- e.target.className === "seek_data_li_name"
- ) {
- _this.current = index;
- //获取点击对象
- let el = e.currentTarget;
- let listId = _this.redata[index].id;
- localStorage.setItem("seek_dataID", listId); //保存获取的ID
- _this.$router.push("/record");
- }
- }
- },
- //生命周期 - 创建完成(可以访问当前this实例)
- created() {},
- //生命周期 - 挂载完成(可以访问DOM元素)
- mounted() {
- this.get_boderHeight();
- }
- };
- </script>
- <style lang='scss'>
- @import "../../assets/scss/bus.scss";
- @import "../../assets/scss/seek_data.scss";
- .seek_data_box .mescroll {
- position: fixed;
- top: 44px;
- bottom: 0;
- height: auto;
- }
- </style>
|