// wx.miniProgram.postMessage({ data: 'foo' }) // wx.miniProgram.navigateTo({url: '/path/to/page'}) const $iframe = document.querySelector('#container') let socket let run let data = {} async function getHeader() { if (!data.code) return; let res = await axios({ url: data.API_BASE_URL + '/goods/getCategoryByScene?sceneNum=' + data.code, headers: { "content-type": "application/x-www-form-urlencoded", "X-Nideshop-Token": data.token } }) let headers = res.data.list let $headers = document.querySelector('#headers') let headHTML = headers.map(item => `
${item.name}${'(' + item.num + ')'}
`).join('') $headers.innerHTML = headHTML selectType(headers[0].category_id) $headers.querySelectorAll('.text').forEach($dom => { $dom.addEventListener('click', () => selectType($dom.getAttribute('data-id'))) }) } function selectType(category_id) { let $headers = document.querySelector('#headers') Array.from($headers.querySelectorAll('.text')).forEach($dom => { let id = $dom.getAttribute('data-id') if (Number(id) === Number(category_id)) { $dom.classList.add('active') } else { $dom.classList.remove('active') } }) getContent(category_id) } const iconHTML = [1, 2, 3].map(item => `
`).join('') async function getContent(categoryId) { let formData = new FormData() formData.append('brandId', data.brandId) formData.append('categoryId', categoryId) formData.append('page', 1) formData.append('size', 1000) let res = await axios({ url: data.API_BASE_URL + '/goods/list', method: 'POST', headers: { "content-type": "application/x-www-form-urlencoded", "X-Nideshop-Token": data.token }, data: formData }) let list = res.data.data.goodsList let $content = document.querySelector('#content') // let contentHTML = list.map(item => `
${iconHTML}
${item.name}
¥
${item.retail_price}
加入购物车
立即购买
`).join('') $content.innerHTML = contentHTML Array.from($content.querySelectorAll('.commodity-item')).forEach($item => { $item.addEventListener('click', function () { socket.emit('clientSyncAction', { type: 'gotoGoodsSocket', data: this.getAttribute('data-id') }) // socket.emit('clientSyncAction', { // type: 'openTag', // data: Number(this.getAttribute('data-id')) // }) }) $item.querySelector('.add-card').addEventListener('click', function (ev) { ev.stopPropagation() socket.emit('clientSyncAction', { type: 'addCard', data: this.getAttribute('data-id') }) // wx.miniProgram.navigateTo({ // url: '/pages/goods/goods?id=' + this.getAttribute('data-id') + '&oper=addCard' , // }) hideCommodity() }) $item.querySelector('.buy-goods').addEventListener('click', function (ev) { ev.stopPropagation() socket.emit('clientSyncAction', { type: 'buyGoods', data: this.getAttribute('data-id') }) // wx.miniProgram.navigateTo({ // url: '/pages/goods/goods?id=' + this.getAttribute('data-id') + '&oper=buyGoods' , // }) hideCommodity() }) }) } function updateSocket(options) { if (socket) { socket.close() } console.log('更新ROOM', options.roomId) socket = io(data.socket.socketHost, { path: data.socket.path, query: { ...options, isClient: true } }) socket.on('clientSyncAction', data => { if (data.type === 'hashChange') { console.log(data.data) this.init(data.data) } else if (data.type === 'newRoom' && data.data && data.data.roomId) { console.log('新建房间', data.data) updateSocket(data.data) } }) socket.emit('clientSyncAction', { sender: 'h5', type: 'loadWeb' }) } function init(adata) { if (adata.code !== data.code) { setTimeout(() => getHeader()) } if (!data.socket || data.socket.options.roomId !== adata.socket.options.roomId) { $iframe.contentWindow.postMessage({type: 'newRoom', value: adata.socket.options.roomId }, '*') } data = adata if (data.reload) { $iframe.setAttribute('src', '') setTimeout(() => { // alert(data.url) $iframe.setAttribute('src', data.url) }, 100) updateSocket(data.socket.options) } $iframe.contentWindow.postMessage({ type: 'video', action: data.pauseVideo ? 'pause' : 'play'}, '*') // document.querySelector('.commodity-view').style.display = 'flex' // data.open = true document.querySelector('.commodity-view').style.display = data.open ? 'flex' : 'none' document.querySelector('.bgd').style.display = data.open ? 'block' : 'none' document.querySelector('.commodity-view').addEventListener('click', ev => ev.stopPropagation()); document.querySelector('.layer').style.bottom = data.bottom + 'px'; } const hideCommodity = ev => { socket.emit('clientSyncAction', { sender: 'h5', type: 'hideComodity' }) } document.querySelector('#close-commodity').addEventListener('click', hideCommodity); document.querySelector('.bgd').addEventListener('click', hideCommodity); (function load() { init(JSON.parse(unescape(location.hash.substr(1)))) })(); window.addEventListener("message", e => { if (e.data.cmd) { if (e.data.cmd == "socket") { socket.emit("clientSyncAction", { sender: "h5", type: e.data.type, data: e.data.data }) } } })