|
@@ -9,74 +9,137 @@
|
|
|
<div class="t"></div>
|
|
|
</div>
|
|
|
<div class="items ">
|
|
|
- <div class="item fl curr">
|
|
|
- 全部
|
|
|
- </div>
|
|
|
- <div class="item fl ">
|
|
|
- 文件柜
|
|
|
- </div>
|
|
|
- <div class="item fl ">
|
|
|
- 保险柜
|
|
|
+ <div
|
|
|
+ v-for="({ id, title }, index) in items"
|
|
|
+ :key="`items${id}`"
|
|
|
+ :class="`item fl ${currIndex === index ? 'curr' : ''}`"
|
|
|
+ @mouseover="currIndex = index"
|
|
|
+ @click="() => paramsChange({ typeId: id })"
|
|
|
+ >
|
|
|
+ {{ title }}
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="xiaolei">
|
|
|
- <div class="block fl" v-for="x in 5" :key="x">
|
|
|
- <span>文件柜</span>
|
|
|
+ <div
|
|
|
+ class="block fl"
|
|
|
+ v-for="({ title, arr }, index) in subs"
|
|
|
+ :key="`subs${index}`"
|
|
|
+ >
|
|
|
+ <span>{{ title }}</span>
|
|
|
<div class="items fr">
|
|
|
- <div class="item fl">
|
|
|
- 五斗音箱柜
|
|
|
- </div>
|
|
|
- <div class="item fl">
|
|
|
- 五斗音箱柜
|
|
|
- </div>
|
|
|
- <div class="item fl">
|
|
|
- 五斗音箱柜
|
|
|
- </div>
|
|
|
- <div class="item fl">
|
|
|
- 五斗音箱柜
|
|
|
+ <div
|
|
|
+ :class="`item fl ${params.typeId === id ? 'curr' : ''}`"
|
|
|
+ v-for="({ id, title: st }, i) in arr"
|
|
|
+ :key="`sitem${i}`"
|
|
|
+ @click="() => paramsChange({ typeId: id })"
|
|
|
+ >
|
|
|
+ {{ st }}
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="filter">
|
|
|
- <div class="sort fl">综合排序</div>
|
|
|
- <div class="sort fl">新品</div>
|
|
|
- <div class="sort fl">
|
|
|
- <span>价格</span>
|
|
|
- <input placeholder="最低价" /> - <input placeholder="最高价" />
|
|
|
+ <div
|
|
|
+ :class="`sort fl ${params.orderByColumn === 'zhpx' ? 'curr' : ''}`"
|
|
|
+ @click="() => paramsChange({ orderByColumn: 'zhpx' })"
|
|
|
+ >
|
|
|
+ <span> 综合排序</span>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ :class="`sort fl ${params.orderByColumn === 'xp' ? 'curr' : ''}`"
|
|
|
+ @click="() => paramsChange({ orderByColumn: 'xp' })"
|
|
|
+ >
|
|
|
+ <span> 新品</span>
|
|
|
+ </div>
|
|
|
+ <div :class="`sort fl ${params.orderByColumn === 'jg' ? 'curr' : ''}`">
|
|
|
+ <span
|
|
|
+ :class="`price ${params.isAsc}`"
|
|
|
+ @click="
|
|
|
+ () =>
|
|
|
+ paramsChange({
|
|
|
+ orderByColumn: `jg`,
|
|
|
+ isAsc:
|
|
|
+ params.orderByColumn === `jg` && params.isAsc === `asc`
|
|
|
+ ? `desc`
|
|
|
+ : `asc`
|
|
|
+ })
|
|
|
+ "
|
|
|
+ >价格</span
|
|
|
+ >
|
|
|
+ <input
|
|
|
+ v-model="search.beginPrice"
|
|
|
+ placeholder="最低价"
|
|
|
+ type="number"
|
|
|
+ />
|
|
|
+ -
|
|
|
+ <input v-model="search.endPrice" placeholder="最高价" type="number" />
|
|
|
</div>
|
|
|
<div class="search fr">
|
|
|
- <input placeholder="商品名称/企业名称" />
|
|
|
- <span>搜索</span>
|
|
|
+ <input placeholder="商品名称/企业名称" v-model="search.name" />
|
|
|
+ <span @click="() => paramsChange(search)">搜索</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="products">
|
|
|
- <router-link to="/shop/1/2" class="product" v-for="x in 10" :key="x">
|
|
|
- <div class="img">
|
|
|
- <img src="@assets/shangpin.png" alt="" />
|
|
|
- </div>
|
|
|
- <div class="amount"><span>¥</span>1800</div>
|
|
|
- <div class="name">文件柜20-J</div>
|
|
|
- <div class="shop">洛阳花都家具有限公司</div>
|
|
|
- </router-link>
|
|
|
+ <load-more
|
|
|
+ url="/goods/info/page"
|
|
|
+ :params="params"
|
|
|
+ v-slot="{
|
|
|
+ item: { id, name, companyId, price, cover, companyName }
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <router-link :to="`/shop/${companyId}/${id}`" class="product">
|
|
|
+ <div class="img">
|
|
|
+ <img :src="`${target}${cover}`" />
|
|
|
+ </div>
|
|
|
+ <div class="amount"><span>¥</span>{{ price }}</div>
|
|
|
+ <div class="name">{{ name }}</div>
|
|
|
+ <div class="shop">{{ companyName }}</div>
|
|
|
+ </router-link>
|
|
|
+ </load-more>
|
|
|
</div>
|
|
|
- <!-- 仅作为前期静态页面显示用 后期会集成到loadmore组件内 -->
|
|
|
- <el-pagination
|
|
|
- class="fr"
|
|
|
- background
|
|
|
- layout="prev, pager, next,total, jumper"
|
|
|
- :total="100"
|
|
|
- :page-size="10"
|
|
|
- />
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
<script lang="ts">
|
|
|
import { Component, Vue, Watch } from "vue-property-decorator";
|
|
|
-@Component
|
|
|
-export default class extends Vue {}
|
|
|
+import menu from "@/store/modules/menu";
|
|
|
+import loadMore from "@/components/loadMore.vue";
|
|
|
+@Component({
|
|
|
+ components: { loadMore }
|
|
|
+})
|
|
|
+export default class extends Vue {
|
|
|
+ private target = `${process.env.VUE_APP_Target}`.replace(/\/$/, "");
|
|
|
+ private currIndex = 0;
|
|
|
+ private params = {
|
|
|
+ typeId: 0,
|
|
|
+ orderByColumn: "zhpx",
|
|
|
+ isAsc: "" //asc desc
|
|
|
+ };
|
|
|
+ private search = {
|
|
|
+ name: "",
|
|
|
+ beginPrice: "",
|
|
|
+ endPrice: ""
|
|
|
+ };
|
|
|
+ get items() {
|
|
|
+ return [{ id: 0, title: "全部" }, ...menu.pList];
|
|
|
+ }
|
|
|
+ get subs() {
|
|
|
+ if (this.currIndex === 0)
|
|
|
+ return this.items
|
|
|
+ .filter(({ id }) => id)
|
|
|
+ .map(({ id, title }) => ({
|
|
|
+ title,
|
|
|
+ arr: menu.subList(id)
|
|
|
+ }));
|
|
|
+ const { id, title } = this.items[this.currIndex];
|
|
|
+ return [{ title, arr: menu.subList(id) }];
|
|
|
+ }
|
|
|
+ paramsChange(x: IAny) {
|
|
|
+ Object.assign(this.params, x);
|
|
|
+ }
|
|
|
+}
|
|
|
</script>
|
|
|
<style lang="scss" scoped>
|
|
|
.mall {
|
|
@@ -141,7 +204,7 @@ export default class extends Vue {}
|
|
|
}
|
|
|
.xiaolei {
|
|
|
height: 160px;
|
|
|
- overflow: hidden;
|
|
|
+ overflow: scroll;
|
|
|
.block {
|
|
|
width: 337px;
|
|
|
height: 80px;
|
|
@@ -163,6 +226,10 @@ export default class extends Vue {}
|
|
|
margin-bottom: 1rem;
|
|
|
font-size: 1.2rem;
|
|
|
color: rgb(102, 102, 102);
|
|
|
+ cursor: pointer;
|
|
|
+ &.curr {
|
|
|
+ color: rgb(253, 85, 34);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -184,7 +251,19 @@ export default class extends Vue {}
|
|
|
}
|
|
|
.sort {
|
|
|
margin-right: 40px;
|
|
|
- span {
|
|
|
+ cursor: pointer;
|
|
|
+ &.curr {
|
|
|
+ span {
|
|
|
+ color: rgb(253, 85, 34);
|
|
|
+ }
|
|
|
+ .price.asc::before {
|
|
|
+ border-bottom-color: rgb(253, 85, 34);
|
|
|
+ }
|
|
|
+ .price.desc::after {
|
|
|
+ border-top-color: rgb(253, 85, 34);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .price {
|
|
|
position: relative;
|
|
|
margin-right: 20px;
|
|
|
&::before {
|
|
@@ -197,7 +276,7 @@ export default class extends Vue {}
|
|
|
border-right-color: transparent;
|
|
|
border-width: 5px;
|
|
|
border-style: solid;
|
|
|
- top: 0;
|
|
|
+ top: -2px;
|
|
|
right: -10px;
|
|
|
}
|
|
|
&::after {
|
|
@@ -210,7 +289,7 @@ export default class extends Vue {}
|
|
|
border-right-color: transparent;
|
|
|
border-width: 5px;
|
|
|
border-style: solid;
|
|
|
- bottom: 0;
|
|
|
+ bottom: -2px;
|
|
|
right: -10px;
|
|
|
}
|
|
|
}
|