123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776 |
- <template>
- <app-layout>
- <template v-if="loading">
- <view class="app-search" v-if="search_bool">
- <app-search-for></app-search-for>
- </view>
- <!-- 样式一 -->
- <view v-if="cat_style.cat_style === '1'" class="margin-fixed">
- <style-one
- :list="list"
- :goods_list="goods_list"
- ></style-one>
- </view>
- <!-- 样式二 -->
- <view v-else-if="cat_style.cat_style === '2'" class="margin-fixed">
- <style-two
- :list="list"
- :windowHeight="windowHeight"
- :windowWidth="windowWidth"
- :botHeight="botHeight"
- :setHeight="setHeight"
- :activeIndex="activeIndex"
- @active="activeThree"
- @route_advert="route_advert"
- :theme="getTheme"
- ></style-two>
- </view>
- <!-- 样式三 -->
- <view v-else-if="cat_style.cat_style === '3'" class="margin-fixed">
- <style-three
- :list="list"
- :goods_list="goods_list"
- ></style-three>
- </view>
- <!-- 样式四 -->
- <view v-else-if="cat_style.cat_style === '4'" class="margin-fixed">
- <style-four
- :list="list"
- :windowHeight="windowHeight"
- :windowWidth="windowWidth"
- :botHeight="botHeight"
- :setHeight="setHeight"
- :activeIndex="activeIndex"
- @active="activeThree"
- @route_advert="route_advert"
- :theme="getTheme"
- ></style-four>
- </view>
- <!-- 样式五 -->
- <view v-else-if="cat_style.cat_style === '5'" class="margin-fixed">
- <style-five
- :list="list"
- @active="activeOne"
- @setNav="activeTwo"
- :activeIndex="activeIndex"
- :activeIndexTwo="activeIndexTwo"
- :goods_list="goods_list"
- :theme="getTheme"
- :is_over_goods="is_over_goods"
- ></style-five>
- </view>
- <!-- 样式六 -->
- <view v-else-if="cat_style.cat_style === '6'" class="margin-fixed">
- <style-six
- :list="list"
- :setHeight="setHeight"
- :activeIndex="activeIndex"
- :goods="goods"
- :botHeight="botHeight"
- @active="activeThree"
- @route_advert="route_advert"
- :theme="getTheme"
- ></style-six>
- </view>
- <!-- 样式七 -->
- <view v-else-if="cat_style.cat_style === '7'" class="margin-fixed">
- <style-seven
- :list="list"
- :setHeight="setHeight"
- :activeIndex="activeIndex"
- :goods="goods"
- :botHeight="botHeight"
- :windowHeight="windowHeight"
- :windowWidth="windowWidth"
- @active="activeThree"
- @route_advert="route_advert"
- :theme="getTheme"
- ></style-seven>
- </view>
- <!-- 样式八 -->
- <view v-else-if="cat_style.cat_style === '8'" class="margin-fixed">
- <style-eight
- :list="list"
- :goods_list="goods_list"
- theme="default"
- @active="active"
- :theme="getTheme"
- :is_over_goods="is_over_goods"
- :goodsLoading="goodsLoading"
- ></style-eight>
- </view>
- <!-- 样式九 -->
- <view v-else-if="cat_style.cat_style === '9'" class="margin-fixed">
- <style-nine
- :list="list"
- :setHeight="setHeight"
- :activeIndex="activeIndex"
- :goods_list="goods_list"
- @active="activeThree"
- @lower="lower"
- @requestGoods="requestGoods"
- @attr="attr"
- @route_advert="route_advert"
- :theme="getTheme"
- :is_over_goods="is_over_goods"
- ></style-nine>
- </view>
- <!-- 样式十 -->
- <view v-else-if="cat_style.cat_style === '10'" class="margin-fixed">
- <style-ten
- :list="list"
- :setHeight="setHeight"
- :activeIndex="activeIndex"
- :goods_list="goods_list"
- :activeIndexTwo="activeIndexTwo"
- @active="activeThree"
- @lower="lower"
- @requestGoods="requestGoods"
- @setNav="activeTwo"
- @attr="attr"
- @route_advert="route_advert"
- :theme="getTheme"
- :is_over_goods="is_over_goods"
- ></style-ten>
- </view>
- <!-- 样式十一 -->
- <view v-else-if="cat_style.cat_style === '11'" class="margin-fixed">
- <style-eleven
- :list="list"
- :setHeight="setHeight"
- :activeIndex="activeIndex"
- :goods_list="goods_list"
- :activeIndexTwo="activeIndexTwo"
- @active="activeThree"
- @lower="catLower"
- @requestCatList="activeRequest"
- @setNav="requestCatList"
- @attr="attr"
- @route_advert="route_advert"
- :theme="getTheme"
- :is_over_goods="is_over_goods"
- ></style-eleven>
- </view>
- <app-attr
- ref="attr"
- :goods="item"
- :select-attr="selectAttr"
- :attr-group-list="attrGroup"
- :show="show"
- @attrtap="onAttr"
- :previewUrl="previewUrl"
- :submitUrl="submitUrl"
- :theme="getTheme"
- ></app-attr>
- </template>
- </app-layout>
- </template>
- <script>
- import { mapGetters, mapState } from 'vuex';
- import styleOne from './style-one.vue';
- import styleTwo from './style-two';
- import styleThree from './style-three.vue';
- import styleFour from './style-four.vue';
- import styleFive from './style-five.vue';
- import styleSix from './style-six.vue';
- import styleSeven from './style-seven.vue';
- import styleEight from './style-eight.vue';
- import styleNine from './style-nine.vue';
- import styleTen from './style-ten.vue';
- import styleEleven from './style-eleven.vue';
- import appSearchFor from '../../components/page-component/app-search-for/app-search-for.vue';
- import routeJump from '../../core/routeJump.js';
- import appAttr from '../../components/page-component/app-attr/app-attr.vue';
- export default {
- components: {
- 'app-search-for': appSearchFor,
- 'style-one': styleOne,
- 'style-two': styleTwo,
- 'style-three': styleThree,
- 'style-four': styleFour,
- 'style-five': styleFive,
- 'style-six': styleSix,
- 'style-seven': styleSeven,
- 'style-eight': styleEight,
- 'style-nine': styleNine,
- 'style-ten': styleTen,
- 'style-eleven': styleEleven,
- 'app-attr': appAttr
- },
- data() {
- return {
- search_bool: true,
- list: [],
- goods: [],
- request: true,
- page: 1,
- classId: 0,
- activeIndex: 0,
- activeIndexTwo: 0,
- over: false,
- scrollHeight: 0,
- tabbarbool: true,
- cat_id: 0,
- cat_ids: [],
- againLower: true,
- goods_list: [],
- page_count: 1,
- select_cat_id: 0,
- first_id: 0,
- loading: false,
- selectAttr: {},
- previewUrl: '',
- submitUrl: '',
- show: 0,
- attrGroup: [],
- item: {},
- is_over_goods: true,
- options: {},
- goodsLoading: false
- }
- },
- computed: {
- ...mapGetters('mallConfig', {
- cat_style: 'getCatStyle',
- getTheme: 'getTheme'
- }),
- ...mapState('gConfig', {
- windowHeight: state => state.systemInfo.windowHeight,
- windowWidth: state => state.systemInfo.windowWidth
- }),
- ...mapGetters('iPhoneX', {
- botHeight: 'getBotHeight'
- }),
- ...mapState('mallConfig', {
- mall: state => state.mall,
- }),
- setHeight() {
- let bottom = 0;
- if (this.tabbarbool) {
- bottom = this.botHeight;
- }
- return (this.windowHeight * (750 / this.windowWidth)) - bottom - 88;
- }
- },
- onReachBottom() {
- if (this.cat_style.cat_style === '3' || this.cat_style.cat_style === '1') return;
- if (this.page < this.page_count) {
- this.page++;
- this.$request({
- url: this.$api.default.goods_list,
- method: 'get',
- data: {
- page: this.page,
- cat_id: this.cat_id,
- }
- }).then(res => {
- if (res.code === 0) {
- if (this.cat_style.cat_style === '8') {
- this.goodsLoading = true;
- }
- this.goods_list.push(...res.data.list);
- }
- });
- } else {
- if (this.cat_style.cat_style === '8') {
- this.goodsLoading = false;
- }
- uni.showToast({
- title: '暂无更多商品',
- icon: 'none'
- })
- }
- },
- methods: {
- onAttr(data) {
- this.selectAttr = data;
- },
- attr(previewUrl, submitUrl, attr_groups, goods) {
- this.previewUrl = previewUrl;
- this.submitUrl = submitUrl;
- this.attrGroup = attr_groups;
- this.item = goods;
- this.show = Math.random();
- console.log(this.show);
- },
- route_advert(data) {
- routeJump({
- open_type: data.advert_open_type,
- params: data.advert_params,
- page_url: data.advert_url
- });
- },
- // 点击导航栏
- active(item) {
- this.page = 1;
- this.goods_list = [];
- this.cat_id = item.id;
- this.select_cat_id = item.id;
- for (let i = 0; i < this.list.length; i++) {
- if (this.list[i].active !== item.active) {
- this.list[i].active = false;
- }
- if (this.list[i].id === item.id) {
- this.list[i].active = true;
- }
- }
- this.is_over_goods = false;
- this.$request({
- url: `${this.$api.default.goods_list}&page=${this.page}&cat_id=${item.id}`
- }).then(res => {
- if (res.code === 0) {
- this.goods_list.push(...res.data.list);
- this.goodsLoading = true;
- this.page_count = res.data.pagination.page_count;
- this.is_over_goods = true;
- }
- });
- },
- // 下拉分页请求
- req() {
- this.$request({
- url: `${this.$api.default.goods_list}&page=${this.page}&cat_id=${this.classId}`
- }).then(response => {
- if (response.data.list.length > 0) {
- this.goods.push(...response.data.list);
- } else {
- this.over = true;
- }
- });
- },
- activeOne(item) {
- this.page = 1;
- this.activeIndexTwo = 0;
- this.cat_id = item.id;
- this.select_cat_id = item.id;
- this.is_over_goods = false;
- for (let i = 0; i < this.list.length; i++) {
- if (this.list[i].active !== item.active) {
- this.list[i].active = false;
- }
- if (this.list[i].id === item.id) {
- this.list[i].active = true;
- this.activeIndex = i;
- }
- }
- if (this.cat_style.cat_style === '5') this.goods_list = [];
- if (this.list[this.activeIndex].child.length === 0) {
- this.$request({
- url: `${this.$api.default.goods_list}&page=${this.page}&cat_id=${item.id}`
- }).then(res => {
- let { list, pagination } = res.data;
- this.goods_list = list;
- this.is_over_goods = true;
- this.page = 1;
- this.cat_id = item.id;
- this.select_cat_id = item.id;
- this.page_count = pagination.page_count;
- });
- } else {
- this.$request({
- url: `${this.$api.default.goods_list}&page=${this.page}&cat_id=${this.list[this.activeIndex].child[0].id}`
- }).then(res => {
- let { list, pagination } = res.data;
- this.goods_list = list;
- this.is_over_goods = true;
- this.page = 1;
- this.cat_id = this.list[this.activeIndex].child[0].id;
- this.select_cat_id = item.id;
- this.page_count = pagination.page_count;
- });
- }
- },
- async activeTwo(item, index) {
- this.page = 1;
- this.activeIndexTwo = index;
- this.select_cat_id = item.id;
- this.cat_id = item.id;
- this.select_cat_id = item.id;
- this.is_over_goods = false;
- const res = await this.$request({
- url: this.$api.default.goods_list,
- method: 'get',
- data: {
- page: 1,
- cat_id: item.id
- }
- });
- if (res.code === 0) {
- let { list, pagination } = res.data;
- this.goods_list = [];
- this.goods_list = list;
- this.is_over_goods = true;
- this.page_count = pagination.page_count;
- }
- },
- activeThree(item) {
- this.cat_id = item.id;
- this.select_cat_id = item.id;
- for (let i = 0; i < this.list.length; i++) {
- if (this.list[i].active !== item.active) {
- this.list[i].active = false;
- }
- if (this.list[i].id === item.id) {
- this.list[i].active = true;
- this.activeIndex = i;
- }
- }
- },
- async catLower() {
- if (!this.againLower) return;
- this.againLower = false;
- let goods_list = this.goods_list[this.goods_list.length - 1];
- const res = await this.$request({
- url: this.$api.default.cat_goods,
- method: 'get',
- data: {
- cat_ids: JSON.stringify(this.cat_ids),
- cat_id: goods_list.id,
- offset: goods_list.offset
- }
- });
- if (res.code === 0) {
- if (res.data.list[0].id === goods_list.id && res.data.list[0].goods_list.length > 0) {
- this.goods_list[this.goods_list.length - 1].goods_list.push(...res.data.list[0].goods_list);
- this.goods_list[this.goods_list.length - 1].offset = res.data.list[0].offset;
- }
- for (let i = 1; i < res.data.list.length; i++) {
- this.goods_list.push(res.data.list[i]);
- }
- this.againLower = true;
- }
- },
- activeRequest(data) {
- this.goods_list = [];
- if (data.child.length !== 0) {
- this.requestCatList(data.child[0], 0);
- }
- },
- async requestCatList(data, index) {
- this.page = 1;
- this.cat_id = data.id;
- this.select_cat_id = data.id;
- this.activeIndexTwo = index;
- this.goods_list = [];
- if (data.child.length !== 0) {
- this.is_over_goods = false;
- this.cat_ids = [];
- for (let i = 0; i < data.child.length; i++) {
- this.cat_ids.push(data.child[i].id);
- }
- const res = await this.$request({
- url: this.$api.default.cat_goods,
- method: 'get',
- data: {
- cat_ids: JSON.stringify(this.cat_ids),
- cat_id: data.child[0].id,
- offset: 0
- }
- });
- if (res.code === 0) {
- this.is_over_goods = true;
- this.goods_list = res.data.list;
- }
- }
- },
- // 求情商品列表
- async requestGoods(data, index) {
- this.page = 1;
- this.cat_id = data.id;
- this.select_cat_id = data.id;
- this.goods_list = [];
- this.is_over_goods = false;
- if (this.cat_style.cat_style === '10' && index !== undefined && this.list[index].child.length !== 0) {
- this.activeIndexTwo = 0;
- this.cat_id = this.list[index].child[0].id;
- }
- const res = await this.$request({
- url: this.$api.default.goods_list,
- method: 'get',
- data: {
- page: this.page,
- cat_id: this.cat_id
- }
- });
- if (res.code === 0) {
- this.is_over_goods = true;
- this.goods_list = res.data.list;
- this.goodsLoading = true;
- this.page_count = res.data.pagination.page_count;
- }
- },
- // 分页请求商品
- async lower(data) {
- if (this.page < this.page_count) {
- this.page++;
- const res = await this.$request({
- url: this.$api.default.goods_list,
- method: 'get',
- data: {
- page: this.page,
- cat_id: data.id
- }
- });
- if (res.code === 0) {
- this.goods_list.push(...res.data.list);
- }
- } else {
- uni.showToast({
- title: '暂无更多商品',
- icon: 'none'
- })
- }
- },
- // 处理数据
- dataProcessing(list) {
- for (let i = 0; i < list.length; i += 2) {
- if (i + 1 !== list.length) {
- this.goods_list.push([list[i], list[i + 1]]);
- } else {
- this.goods_list.push([list[i]]);
- }
- }
- },
- async requestCat(cat_id, select_cat_id) {
- this.loading = false;
- const res = await this.$request({
- url: this.$api.default.cat_list,
- method: 'get',
- data: {
- cat_id: cat_id ? cat_id : '',
- select_cat_id: select_cat_id ? select_cat_id : ''
- }
- });
- if (res.code === 0) {
- this.list = res.data.list;
- // 分类跳转
- if (this.cat_style.cat_style === '1' && this.list.length === 0) {
- this.search_bool = false;
- return;
- }
- if (this.cat_style.cat_style === '2' || this.cat_style.cat_style === '1') {
- return;
- }
- if (this.cat_style.cat_style === '3' && this.list.length === 0) {
- this.search_bool = false;
- return;
- }
- if (cat_id || select_cat_id) {
- if (this.cat_style.cat_style === '11') {
- this.cat_ids = [];
- this.list.map((item, index) => {
- if (item.active) {
- this.activeIndex = index;
- }
- });
- if (this.list[this.activeIndex].child.length === 0) return;
- for (let i = 0; i < this.list[this.activeIndex].child[0].child.length; i++) {
- this.cat_ids.push(this.list[this.activeIndex].child[0].child[i].id);
- }
- if (this.cat_ids.length === 0) return;
- const res = await this.$request({
- url: this.$api.default.cat_goods,
- method: 'get',
- data: {
- cat_ids: JSON.stringify(this.cat_ids),
- cat_id: this.cat_ids[0],
- offset: 0
- }
- });
- if (res.code === 0) {
- this.goods_list = res.data.list;
- }
- return;
- }
- if (this.cat_style.cat_style === '6' || this.cat_style.cat_style === '7') {
- this.list.map((item, index) => {
- if (item.active) {
- this.activeIndex = index;
- }
- });
- return;
- }
- if (this.list.length > 0) {
- for (let i = 0; i < this.list.length; i++) {
- if (this.list[i].active) {
- this.cat_id = this.list[i].id;
- }
- }
- }
- if ((this.cat_style.cat_style === '5' || this.cat_style.cat_style === '10') && this.list.length > 0 && this.list[0].child.length > 0) {
- for (let i = 0; i < this.list.length; i++) {
- if (this.list[i].active) {
- this.cat_id = this.list[i].child[0].id;
- }
- }
- }
- if (this.list.length === 0 && (this.cat_style.cat_style === '4')) {
- this.search_bool = false;
- return;
- }
- const res = await this.$request({
- url: this.$api.default.goods_list,
- method: 'get',
- data: {
- page: 1,
- cat_id: this.cat_id,
- }
- });
- if (res.code === 0) {
- this.goods_list = res.data.list;
- this.page_count = res.data.pagination.page_count;
- if (this.list.length === 0 && this.goods_list.length === 0) {
- this.search_bool = false;
- }
- }
- } else {
- if (this.list.length > 0) {
- if (this.cat_style.cat_style === '11') {
- this.cat_ids = [];
- if (this.list.length === 0 || this.list[0].child.length === 0) return;
- for (let i = 0; i < this.list[0].child[0].child.length; i++) {
- this.cat_ids.push(this.list[0].child[0].child[i].id);
- }
- if (this.cat_ids.length === 0) return;
- const res = await this.$request({
- url: this.$api.default.cat_goods,
- method: 'get',
- data: {
- cat_ids: JSON.stringify(this.cat_ids),
- cat_id: this.cat_ids[0],
- offset: 0
- }
- });
- if (res.code === 0) {
- this.goods_list = res.data.list;
- }
- return;
- }
- this.cat_id = this.list[0].id;
- if ((this.cat_style.cat_style === '5' || this.cat_style.cat_style === '10') && this.list[0].child.length > 0) {
- this.cat_id = this.list[0].child[0].id;
- }
- const res = await this.$request({
- url: this.$api.default.goods_list,
- method: 'get',
- data: {
- page: 1,
- cat_id: this.cat_id,
- }
- });
- if (res.code === 0) {
- this.goods_list = res.data.list;
- this.page_count = res.data.pagination.page_count;
- }
- } else {
- this.search_bool = false;
- }
- }
- }
- }
- },
- onLoad(options) {
- this.options = options;
- setTimeout(() => {
- this.tabbarbool = this.$children[0].tabbarbool;
- }, 500);
- this.cat_id = options.cat_id;
- this.first_id = options.cat_id;
- if (options.first_id && options.select_cat_id) {
- this.requestCat(options.first_id, options.select_cat_id).then(() => {
- this.loading = true;
- });
- } else if (!options.first_id && options.select_cat_id) {
- this.requestCat('', options.select_cat_id).then(() => {
- this.loading = true;
- });
- } else if (!options.first_id && !options.select_cat_id) {
- this.requestCat(options.cat_id).then(() => {
- this.loading = true;
- });
- }
- // #ifdef MP-WEIXIN
- wx.showShareMenu({
- menus: ['shareAppMessage', 'shareTimeline']
- });
- // #endif
- },
- onShareAppMessage() {
- return this.$shareAppMessage({
- path: '/pages/cats/cats',
- title: this.$children[0].navigationBarTitle,
- params: {
- cat_id: this.first_id,
- first_id: this.first_id,
- select_cat_id: this.select_cat_id
- }
- });
- },
- // #ifdef MP-WEIXIN
- onShareTimeline() {
- return this.$shareTimeline({
- title: this.mall.setting.share_title ? this.mall.setting.share_title : this.mall.name,
- query: {
- cat_id: this.first_id,
- first_id: this.first_id,
- select_cat_id: this.select_cat_id
- }
- });
- },
- // #endif
- }
- </script>
- <style lang="scss" scoped>
- .app-search {
- position: fixed;
- top: var(--window-top);
- left: 0;
- z-index: 1000;
- }
- .empty-search {
- height: #{88upx};
- width: #{750upx};
- background: #f7f7f7;
- }
- .margin-fixed {
- margin-top: #{88upx};
- }
- .app-top {
- width: $screen-width;
- }
- </style>
|