master
2022-12-28 11:23:46 +08:00
parent 3881370b6e
commit e8b7a85140
4 changed files with 279 additions and 262 deletions

174
buyer/package-lock.json generated
View File

@ -477,6 +477,70 @@
"webpack-merge": "^4.2.2" "webpack-merge": "^4.2.2"
}, },
"dependencies": { "dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"json5": {
"version": "2.2.2",
"resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.2.tgz",
"integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==",
"dev": true,
"optional": true
},
"loader-utils": {
"version": "2.0.4",
"resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"postcss-loader": { "postcss-loader": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-3.0.0.tgz", "resolved": "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-3.0.0.tgz",
@ -521,6 +585,28 @@
"ajv-errors": "^1.0.0", "ajv-errors": "^1.0.0",
"ajv-keywords": "^3.1.0" "ajv-keywords": "^3.1.0"
} }
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.8.3",
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
}
} }
} }
}, },
@ -10192,94 +10278,6 @@
} }
} }
}, },
"vue-loader-v16": {
"version": "npm:vue-loader@16.8.3",
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"json5": {
"version": "2.2.1",
"resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz",
"integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
"dev": true,
"optional": true
},
"loader-utils": {
"version": "2.0.4",
"resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"vue-piczoom": { "vue-piczoom": {
"version": "1.0.6", "version": "1.0.6",
"resolved": "https://registry.npmmirror.com/vue-piczoom/-/vue-piczoom-1.0.6.tgz", "resolved": "https://registry.npmmirror.com/vue-piczoom/-/vue-piczoom-1.0.6.tgz",

View File

@ -8,12 +8,7 @@
<div class="shop-nav-container"> <div class="shop-nav-container">
<Breadcrumb> <Breadcrumb>
<BreadcrumbItem to="/">首页</BreadcrumbItem> <BreadcrumbItem to="/">首页</BreadcrumbItem>
<BreadcrumbItem <BreadcrumbItem v-for="(item, index) in categoryBar" :to="goGoodsList(index)" target="_blank" :key="index">
v-for="(item, index) in categoryBar"
:to="goGoodsList(index)"
target="_blank"
:key="index"
>
{{ item.name }} {{ item.name }}
</BreadcrumbItem> </BreadcrumbItem>
</Breadcrumb> </Breadcrumb>
@ -21,13 +16,10 @@
<span class="mr_10" v-if="goodsMsg.data"> <span class="mr_10" v-if="goodsMsg.data">
<router-link :to="'Merchant?id=' + goodsMsg.data.storeId">{{ <router-link :to="'Merchant?id=' + goodsMsg.data.storeId">{{
goodsMsg.data.storeName goodsMsg.data.storeName
}}</router-link> }}</router-link>
</span> </span>
<span @click="collect"> <span @click="collect">
<Icon <Icon type="ios-heart" :color="storeCollected ? '#ed3f14' : '#666'" />
type="ios-heart"
:color="storeCollected ? '#ed3f14' : '#666'"
/>
{{ storeCollected ? "已收藏店铺" : "收藏店铺" }} {{ storeCollected ? "已收藏店铺" : "收藏店铺" }}
</span> </span>
<span class="ml_10" @click="IMService()"></span> <span class="ml_10" @click="IMService()"></span>
@ -36,11 +28,7 @@
</div> </div>
<!-- 商品信息展示 --> <!-- 商品信息展示 -->
<ShowGoods <ShowGoods @handleClickSku="targetClickSku" v-if="goodsMsg.data" :detail="goodsMsg"></ShowGoods>
@handleClickSku="targetClickSku"
v-if="goodsMsg.data"
:detail="goodsMsg"
></ShowGoods>
<!-- 商品详细展示 --> <!-- 商品详细展示 -->
<ShowGoodsDetail v-if="goodsMsg.data" :detail="goodsMsg"></ShowGoodsDetail> <ShowGoodsDetail v-if="goodsMsg.data" :detail="goodsMsg"></ShowGoodsDetail>
@ -66,14 +54,14 @@ import { getIMDetail } from "@/api/common";
import Storage from "../plugins/storage"; import Storage from "../plugins/storage";
export default { export default {
name: "GoodsDetail", name: "GoodsDetail",
beforeRouteEnter(to, from, next) { beforeRouteEnter (to, from, next) {
window.scrollTo(0, 0); window.scrollTo(0, 0);
next(); next();
}, },
created() { created () {
this.getGoodsDetail(); this.getGoodsDetail();
}, },
data() { data () {
return { return {
goodsMsg: {}, // goodsMsg: {}, //
isLoading: false, // isLoading: false, //
@ -85,7 +73,7 @@ export default {
}, },
methods: { methods: {
// im // im
async IMService() { async IMService () {
// 访Token // 访Token
let accessToken = Storage.getItem("accessToken"); let accessToken = Storage.getItem("accessToken");
await this.getIMDetailMethods(); await this.getIMDetailMethods();
@ -106,18 +94,19 @@ export default {
); );
}, },
// im // im
async getIMDetailMethods() { async getIMDetailMethods () {
let res = await getIMDetail(); // let res = await getIMDetail();
if (res.success) { // if (res.success) {
this.IMLink = res.result; // this.IMLink = res.result;
} // }
this.IMLink = 'http://192.168.0.139:8000'
}, },
// //
targetClickSku(val) { targetClickSku (val) {
this.getGoodsDetail(val); this.getGoodsDetail(val);
}, },
// //
getGoodsDetail(val) { getGoodsDetail (val) {
this.isLoading = true; this.isLoading = true;
const params = val || this.$route.query; const params = val || this.$route.query;
@ -183,7 +172,7 @@ export default {
this.$router.push("/"); this.$router.push("/");
}); });
}, },
goGoodsList(currIndex) { goGoodsList (currIndex) {
// //
const arr = []; const arr = [];
this.categoryBar.forEach((e, index) => { this.categoryBar.forEach((e, index) => {
@ -193,7 +182,7 @@ export default {
}); });
return location.origin + "/goodsList?categoryId=" + arr.toString(); return location.origin + "/goodsList?categoryId=" + arr.toString();
}, },
async collect() { async collect () {
// //
if (this.storeCollected) { if (this.storeCollected) {
let cancel = await cancelCollect("STORE", this.goodsMsg.data.storeId); let cancel = await cancelCollect("STORE", this.goodsMsg.data.storeId);

View File

@ -6,18 +6,40 @@
<script> <script>
export default { export default {
name: 'App', name: 'App',
data() { data () {
return { return {
// router // router
showView: true, showView: true,
beforeUnload: '',
Handler: ''
} }
}, },
methods: { methods: {
// //
refreshView() { refreshView () {
this.showView = false this.showView = false
this.$nextTick(() => (this.showView = true)) this.$nextTick(() => (this.showView = true))
}, },
beforeunloadHandler () {
this.beforeUnload = new Date().getTime();
}, },
// btnHide
unloadHandler (e) {
this.Handler = new Date().getTime() - this.beforeUnload;
if (this.Handler <= 5) {
localStorage.setItem('btnHide', 1)
}
},
},
mounted () {
window.addEventListener('beforeunload', e => this.beforeunloadHandler(e))
window.addEventListener('unload', e => this.unloadHandler(e))
},
destroyed () {
window.removeEventListener('beforeunload', e => this.beforeunloadHandler(e))
window.removeEventListener('unload', e => this.unloadHandler(e))
},
} }
</script> </script>

View File

@ -6,12 +6,14 @@
<img :src="goodsDetail.thumbnail" class="image" /> <img :src="goodsDetail.thumbnail" class="image" />
</div> </div>
<div style="margin-left: 13px"> <div style="margin-left: 13px">
<a @click="linkToGoods(goodsDetail.goodsId,goodsDetail.id)"> {{ goodsDetail.goodsName }} </a> <a @click="linkToGoods(goodsDetail.goodsId, goodsDetail.id)"> {{ goodsDetail.goodsName }} </a>
<div> <div>
<span style="color: red;">{{ goodsDetail.price }}</span> <span style="color: red;">{{ goodsDetail.price }}</span>
</div> </div>
<el-button class="store-button" type="danger" v-if="!sendFlag" size="mini" @click="submitSendMessage()" <div v-if="hide">
plain>发送</el-button> <el-button class="store-button" type="danger" v-if="!sendFlag && btnHide == 1" size="mini"
@click="submitSendMessage()" plain>发送</el-button>
</div>
</div> </div>
</div> </div>
<hr class="separate" /> <hr class="separate" />
@ -23,9 +25,11 @@ import { Tag, button } from 'element-ui'
import { mapState, mapGetters } from "vuex"; import { mapState, mapGetters } from "vuex";
import SocketInstance from "@/im-server/socket-instance"; import SocketInstance from "@/im-server/socket-instance";
export default { export default {
data() { data () {
return { return {
sendFlag: false, sendFlag: false,
btnHide: undefined,
hide: true
} }
}, },
computed: { computed: {
@ -36,8 +40,8 @@ export default {
toUser: (state) => state.user.toUser, toUser: (state) => state.user.toUser,
}), }),
}, },
mounted(){ mounted () {
this.btnHide = localStorage.getItem('btnHide')
}, },
components: { components: {
"el-tag": Tag, "el-tag": Tag,
@ -45,15 +49,15 @@ export default {
Storage Storage
}, },
methods: { methods: {
toGoods() { toGoods () {
alert("toGoods") alert("toGoods")
}, },
toMessage() { toMessage () {
alert(JSON.stringify(this.toUser)) alert(JSON.stringify(this.toUser))
alert("toMessage") alert("toMessage")
}, },
// //
submitSendMessage() { submitSendMessage () {
console.log("发送"); console.log("发送");
const context = this.goodsDetail const context = this.goodsDetail
const record = { const record = {
@ -71,6 +75,7 @@ export default {
draft_text: "", draft_text: "",
}); });
/** /**
* 插入数据 * 插入数据
*/ */
@ -104,9 +109,12 @@ export default {
nickname: record.name, nickname: record.name,
}); });
} }
// 0 1
localStorage.setItem('btnHide', 0)
this.hide = false
}, },
formateDateAndTimeToString(date) { formateDateAndTimeToString (date) {
var hours = date.getHours(); var hours = date.getHours();
var mins = date.getMinutes(); var mins = date.getMinutes();
var secs = date.getSeconds(); var secs = date.getSeconds();
@ -120,7 +128,7 @@ export default {
); );
}, },
formatDateToString(date) { formatDateToString (date) {
var year = date.getFullYear(); var year = date.getFullYear();
var month = date.getMonth() + 1; var month = date.getMonth() + 1;
var day = date.getDate(); var day = date.getDate();