// 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}
`).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
})
}
}
})