Browse Source

合并

master
vee 2 years ago
parent
commit
c107c79f75
  1. BIN
      .DS_Store
  2. 173
      components/kline/kline.vue
  3. 2
      components/kline/tradingView/chartConfig.js
  4. 1841
      components/kline/tradingView/contract.js
  5. 418
      components/kline/tradingView/datafeed2.js
  6. 296
      components/kline/tradingView/websocket2.js
  7. 7
      manifest.json
  8. 6
      pages.json
  9. 290
      pages/home/caringwomen.vue
  10. 4
      pages/subscription/details.vue
  11. BIN
      static/home/img_People.png
  12. 4
      utils/language/en_US.js
  13. 4
      utils/language/vi_VN.js
  14. 4
      utils/language/zh_TW.js

BIN
.DS_Store

Binary file not shown.

173
components/kline/kline.vue

@ -1,4 +1,4 @@
<template> <template>
<view> <view>
<view class="tab"> <view class="tab">
<view class="item" :class="{ select: type === '1min' }" @click="onChangeType('1min')">1min <view class="item" :class="{ select: type === '1min' }" @click="onChangeType('1min')">1min
@ -17,26 +17,26 @@
</view> </view>
<view class="item" :class="{ select: type === '1mon' }" @click="onChangeType('1mon')">1mon <view class="item" :class="{ select: type === '1mon' }" @click="onChangeType('1mon')">1mon
</view> </view>
</view> </view>
<view id="kline" :windowWidth="width" :change:windowWidth="KlineJs.setWidth" :windowHeight="height" <view id="kline" :windowWidth="width" :change:windowWidth="KlineJs.setWidth" :windowHeight="height"
:change:windowHeight="KlineJs.setHeight" :symbol="symbol" :change:windowHeight="KlineJs.setHeight" :symbol="symbol"
:change:symbol="KlineJs.setSymbol" :language="lang" :change:language="KlineJs.changlanguage" :index_activeCycle="index_activeCycle" :change:index_activeCycle="KlineJs.changindex_activeCycle"></view> :change:symbol="KlineJs.setSymbol" :language="language" :change:language="KlineJs.changlanguage" :index_activeCycle="index_activeCycle" :change:index_activeCycle="KlineJs.changindex_activeCycle"></view>
</view> </view>
</template> </template>
<script> <script>
import props from './props.js' import props from './props.js'
export default { export default {
name: "kline", name: "kline",
mixins: [props], mixins: [props],
data() { data() {
return { return {
type:'1min', type:'1min',
index_activeCycle:1 index_activeCycle:1
}; };
}, },
created() { created() {
} }
,methods: { ,methods: {
onChangeType(type) { onChangeType(type) {
@ -84,81 +84,81 @@
break; break;
} }
}, },
} }
} }
</script> </script>
<script module="KlineJs" lang="renderjs"> <script module="KlineJs" lang="renderjs">
import { import {
widget widget
} from '@/static/charting_library/charting_library.js' } from '@/static/charting_library/charting_library.js'
import { import {
chartConfig chartConfig
} from './tradingView/chartConfig.js' } from './tradingView/chartConfig.js'
// //
var widgetObj = null var widgetObj = null
// //
var index_market = 'btcusdt' var index_market = 'btcusdt'
export default { export default {
data() { data() {
return { return {
chartHeight: 0, chartHeight: 0,
chartWidth: 0, chartWidth: 0,
chartSymbol:'btc', chartSymbol:'btc',
language:'en' language:'en'
} }
}, },
//renderjs //renderjs
mounted() { mounted() {
// //
this.initChart("1") this.initChart("1")
}, },
methods: { methods: {
setSymbol(symbol){ setSymbol(symbol){
//console.log(symbol) //console.log(symbol)
this.chartSymbol=symbol this.chartSymbol=symbol
}, },
setWidth(width) { setWidth(width) {
//console.log(":", width) //console.log(":", width)
this.chartWidth = width this.chartWidth = width
}, },
setHeight(height) { setHeight(height) {
//console.log(":", height) //console.log(":", height)
this.chartHeight = 300 this.chartHeight = 300
}, },
changindex_activeCycle(index_activeCycle){ changindex_activeCycle(index_activeCycle){
this.initChart(index_activeCycle) this.initChart(index_activeCycle)
}, },
changlanguage(language){ changlanguage(language){
chartConfig.locale=language this.language=language
} }
, ,
initChart(index_activeCycle) { initChart(index_activeCycle) {
// chartConfig chartConfig.js // chartConfig chartConfig.js
// chartConfig // chartConfig
chartConfig.interval = index_activeCycle chartConfig.interval = index_activeCycle
// chartConfig // chartConfig
chartConfig.symbol = this.symbol chartConfig.symbol = this.symbol
chartConfig.resolutions=[1]; chartConfig.resolutions=[1];
// //
chartConfig.width = this.chartWidth chartConfig.width = this.chartWidth
chartConfig.height = this.chartHeight chartConfig.height = this.chartHeight
chartConfig.time_frames=[] chartConfig.time_frames=[]
// TradingView // TradingView
//console.log(window.TradingView.version()) //console.log(window.TradingView.version())
widgetObj = new widget(chartConfig) widgetObj = new widget(chartConfig)
//console.log(11111,widgetObj) //console.log(11111,widgetObj)
widgetObj._options.interval=5 widgetObj._options.interval=5
widgetObj.onChartReady(() => { widgetObj.onChartReady(() => {
// k线 7线30线 // k线 7线30线
widgetObj.chart().createStudy('Moving Average', false, false, [5], null, { widgetObj.chart().createStudy('Moving Average', false, false, [5], null, {
'Plot.linewidth': 2, 'Plot.linewidth': 2,
'Plot.color': '#2ba7d6' 'Plot.color': '#2ba7d6'
}) })
widgetObj.chart().createStudy('Moving Average', false, false, [10], null, { widgetObj.chart().createStudy('Moving Average', false, false, [10], null, {
'Plot.linewidth': 2, 'Plot.linewidth': 2,
@ -172,21 +172,19 @@
'Plot.linewidth': 2, 'Plot.linewidth': 2,
'Plot.color': '#965fc4' 'Plot.color': '#965fc4'
}) })
this.$nextTick(() => { this.$nextTick(() => {
widgetObj.chart().resetData() widgetObj.chart().resetData()
}) })
}) })
}, },
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.tab { .tab {
display: flex; display: flex;
background: #000000; background: #000000;
position: absolute;
width:100%;
.item { .item {
height: 64rpx; height: 64rpx;
line-height: 64rpx; line-height: 64rpx;
@ -204,5 +202,4 @@
} }
</style> </style>

2
components/kline/tradingView/chartConfig.js

@ -39,7 +39,7 @@ var chartConfig = {
"header_resolutions", "header_resolutions",
"left_toolbar", "left_toolbar",
"header_screenshot", "header_screenshot",
"header_chart_type", //"header_chart_type",
"header_settings", "header_settings",
"header_fullscreen_button", "header_fullscreen_button",
"header_undo_redo", "header_undo_redo",

1841
components/kline/tradingView/contract.js

File diff suppressed because it is too large

418
components/kline/tradingView/datafeed1.js → components/kline/tradingView/datafeed2.js

@ -1,205 +1,217 @@
/*********************************************/ /*********************************************/
// 次文件只需要关注 getBars 和 subscribeBars 函数即可 // 次文件只需要关注 getBars 和 subscribeBars 函数即可
/******************************************/ /******************************************/
import { import {
socket socket
} from './websocket.js' } from './websocket.js'
import { import {
Event Event
} from './event.js' } from './event.js'
// 历史数据 第一条数据的 时间撮 因为k线图一次性历史数据只拿一部分,用户吧图往前滑动,就会用这个时间撮去请求更早的 历史数据 // 历史数据 第一条数据的 时间撮 因为k线图一次性历史数据只拿一部分,用户吧图往前滑动,就会用这个时间撮去请求更早的 历史数据
var detafeed_historyTime = 0 var detafeed_historyTime = null
// 上一次的 K线周期 切换产品的时候 需要从websock 取消订阅这个 // 上一次的 K线周期 切换产品的时候 需要从websock 取消订阅这个
var detafeed_lastResolution = null var detafeed_lastResolution = null
// 上一次的产品 切换产品的时候 需要从websock 取消订阅这个 // 上一次的产品 切换产品的时候 需要从websock 取消订阅这个
var detafeed_lastSymbol = null var detafeed_lastSymbol = null
function FeedBase() {} function FeedBase() {}
FeedBase.prototype.onReady = function(callback) { FeedBase.prototype.onReady = function(callback) {
callback(this._configuration) callback(this._configuration)
} }
FeedBase.prototype.getSendSymbolName = function(symbolName) { FeedBase.prototype.getSendSymbolName = function(symbolName) {
var name = symbolName.split('/') var name = symbolName.split('/')
return (name[0] + name[1]).toLocaleLowerCase() return (name[0] + name[1]).toLocaleLowerCase()
} }
FeedBase.prototype.resolveSymbol = function(symbolName, onResolve, onError) { FeedBase.prototype.resolveSymbol = function(symbolName, onResolve, onError) {
onResolve({ onResolve({
"name": symbolName, "name": symbolName,
"timezone": "Asia/Shanghai", "timezone": "Asia/Shanghai",
"pricescale": 10000000000000000, "pricescale": 10000000000000000,
"minmov": 1, "minmov": 1,
"minmov2": 0, "minmov2": 0,
"ticker": symbolName, "ticker": symbolName,
"description": "", "description": "",
"session": "24x7", "session": "24x7",
"type": "bitcoin", "type": "bitcoin",
"volume_precision": 10, "volume_precision": 10,
"has_intraday": true, "has_intraday": true,
"intraday_multipliers": ['1', '5', '15', '30', '60', '240', '1440'], // 时间 "seconds_multipliers":['1', '5', '15', '30', '60', '1D', '1W','1M'],
"has_weekly_and_monthly": false, "intraday_multipliers": ['1', '5', '15', '30', '60', '1D', '1W','1M'],
"has_no_volume": false, "has_seconds":true,
"supports_marks": true,
"supports_timescale_marks": true,
"supported_time": true,
"has_weekly_and_monthly": true,
"has_no_volume": true,
"regular_session": "24x7", "regular_session": "24x7",
}) })
} }
/** /**
* 更多时间类型在这里添加 时间类型请看火币文档 * 更多时间类型在这里添加 时间类型请看火币文档
* @param resolution 订阅周期 按照自己喜欢的来 30 30分钟 1D 一天 * @param resolution 订阅周期 按照自己喜欢的来 30 30分钟 1D 一天
* @param name 交易对symbol * @param name 交易对symbol
* @param to 结束时间 * @param to 结束时间
* @returns {object} * @returns {object}
*/ */
const resolutionFormat = (resolution, name, to) => { const resolutionFormat = (resolution, name, to) => {
let req = `market.${name}.kline.${resolution}min`; let req = `market.${name}.kline.${resolution}min`;
let minutes = resolution; let minutes = resolution;
console.log(resolution)
if (resolution.includes('D')) { if (resolution.includes('D')) {
if (resolution.length < 2) resolution = '1' + resolution; if (resolution.length < 2) resolution = '1' + resolution;
req = `market.${name}.kline.${parseInt(resolution)}day`; req = `market.${name}.kline.${parseInt(resolution)}day`;
minutes = parseInt(resolution) * 24 * 60; minutes = parseInt(resolution) * 24 * 60;
} else if (resolution.includes('W')) { } else if (resolution.includes('W')) {
if (resolution.length < 2) resolution = '1' + resolution; if (resolution.length < 2) resolution = '1' + resolution;
req = `market.${name}.kline.${parseInt(resolution)}week`; req = `market.${name}.kline.${parseInt(resolution)}week`;
minutes = parseInt(resolution) * 24 * 60 * 7; minutes = parseInt(resolution) * 24 * 60 * 7;
} else if (resolution.includes('M')) { } else if (resolution.includes('M')) {
if (resolution.length < 2) resolution = '1' + resolution; if (resolution.length < 2) resolution = '1' + resolution;
req = `market.${name}.kline.${parseInt(resolution)}mon`; req = `market.${name}.kline.${parseInt(resolution)}mon`;
minutes = parseInt(resolution) * 24 * 60 * 30; minutes = parseInt(resolution) * 24 * 60 * 30;
} else { } else {
if (resolution / 60 > 1) { if (resolution / 60 > 1) {
req = `market.${name}.kline.${resolution / 60}hour`; req = `market.${name}.kline.${resolution / 60}hour`;
} }
} }
let from = null; let from = null;
if (to) { if (to) {
from = to - 50 * minutes * 60; from = to - 50 * minutes * 500;
if (resolution.includes('M') || resolution.includes('W')) { // 周线月线控制条数,时间超出火币规定范围, ws报错 if (resolution.includes('M') || resolution.includes('W')) { // 周线月线控制条数,时间超出火币规定范围, ws报错
from = to - 50 * minutes * 60; from = to - 50 * minutes * 500;
} }
} }
return {
minutes, return {
req, minutes,
from, req,
to, from,
}; to,
}; };
};
FeedBase.prototype.getBars = function(symbolInfo, resolution, periodParams, onHistoryCallback, onErrorCallback) {
console.log("获取历史数据") FeedBase.prototype.getBars = function(symbolInfo, resolution, periodParams, onHistoryCallback, onErrorCallback) {
// 切换产品周期 或者 切换产品 会执行这个函数 console.log("获取历史数据",periodParams)
let reso = resolutionFormat(resolution, symbolInfo.name, periodParams.to > detafeed_historyTime ? periodParams // 切换产品周期 或者 切换产品 会执行这个函数
.to : let reso = resolutionFormat(resolution, symbolInfo.name, periodParams.to)
detafeed_historyTime) // if (resolution.includes('M') || resolution.includes('W')|| resolution.includes('D')) { // 周线月线控制条数,时间超出火币规定范围, ws报错
// 是历史数据 // reso = resolutionFormat(resolution, symbolInfo.name, periodParams.to)
var history = true // }
/*
!detafeed_historyTime 如果没请请求过这个产品或者这个周期的历史数据 // 是历史数据
resolution !== detafeed_lastResolution 是否更换了产品周期 var history = true
detafeed_lastSymbol !== symbolInfo.name 是否切换了产品 /*
*/ !detafeed_historyTime 如果没请请求过这个产品或者这个周期的历史数据
if (!detafeed_historyTime || (resolution !== detafeed_lastResolution) || detafeed_lastSymbol !== symbolInfo resolution !== detafeed_lastResolution 是否更换了产品周期
.name) { detafeed_lastSymbol !== symbolInfo.name 是否切换了产品
// 那就不是历史数据 */
history = false if (!detafeed_historyTime || (resolution !== detafeed_lastResolution) || detafeed_lastSymbol !== symbolInfo
// 储存请求过的产品 .name) {
detafeed_lastSymbol = symbolInfo.name // 那就不是历史数据
// 记录目前时间戳,就用目前时间戳往前请求历史数据 history = false
detafeed_historyTime = window.parseInt((Date.now() / 1000)) // 储存请求过的产品
} detafeed_lastSymbol = symbolInfo.name
/* // 记录目前时间戳,就用目前时间戳往前请求历史数据
@socket.sendData detafeed_historyTime = window.parseInt((Date.now() / 1000))
第一个参数订阅历史数据 }
第二个参数订阅实时数据 /*
第三个参数 是否是历史数据 @socket.sendData
*/ 第一个参数订阅历史数据
socket.sendData({ 第二个参数订阅实时数据
req: reso.req, 第三个参数 是否是历史数据
id: "id10", */
from: reso.from, socket.sendData({
to: reso.to, event: "req",
}, reso.req, history) type: "kline",
channel: [reso.req],
Event.off('data') fromDate:reso.from,
toDate:reso.to
Event.on('data', data => { }, reso.req, history)
if (data && Array.isArray(data)) {
// 记录这次请求的时间周期
detafeed_lastResolution = resolution Event.off('data')
var meta = {
noData: false Event.on('data', data => {
}
const datas = [] if (data && Array.isArray(data)) {
if (data.length) { // 记录这次请求的时间周期
detafeed_historyTime = data[0].id detafeed_lastResolution = resolution
for (let i of data) { var meta = {
i.time = i.id * 1000 noData: false
i.volume = i.vol }
datas.push(i) const datas = []
} if (data.length) {
} else { detafeed_historyTime = data[0].id
meta = { for (let i of data) {
noData: true, i.time = i.id * 1000
nextTime: detafeed_historyTime i.volume = i.vol
} datas.push(i)
} }
onHistoryCallback(datas, meta) } else {
} console.log('进来')
}) meta = {
} noData: 'no_data',
nextTime: detafeed_historyTime
FeedBase.prototype.subscribeBars = function(symbolInfo, resolution, onRealtimeCallback, subscriberUID, onResetCacheNeededCallback) { }
Event.off('realTime') }
// 拿到实时数据 在这里画 onHistoryCallback(datas, {noData:data.length==0})
Event.on('realTime', data => { }
if (Object.prototype.toString.call(data) === '[object Object]' && data.hasOwnProperty('open')) { })
//因为有的数值为科学计数法,故增加了转换函数,因为修改了源码中处理小数点的代码,所以需要二次元运算 }
//如果大于1则根据float形式进行toFixed(2),如果小于1则按照string形式进行截取处理显示
let realtimeData = { FeedBase.prototype.subscribeBars = function(symbolInfo, resolution, onRealtimeCallback, subscriberUID, onResetCacheNeededCallback) {
time: data.id * 1000, Event.off('realTime')
volume: data.vol <= 0.00001 ? transferToNumber(data.vol) : data.vol, // 拿到实时数据 在这里画
close: data.close <= 0.00001 ? transferToNumber(data.close) : data.close, Event.on('realTime', data => {
open: data.open <= 0.00001 ? transferToNumber(data.open) : data.open, if (Object.prototype.toString.call(data) === '[object Object]' && data.hasOwnProperty('open')) {
high: data.high <= 0.00001 ? transferToNumber(data.high) : data.high, //因为有的数值为科学计数法,故增加了转换函数,因为修改了源码中处理小数点的代码,所以需要二次元运算
low: data.low <= 0.00001 ? transferToNumber(data.low) : data.low //如果大于1则根据float形式进行toFixed(2),如果小于1则按照string形式进行截取处理显示
} let realtimeData = {
onRealtimeCallback(realtimeData) time: data.id * 1000,
} volume: data.vol <= 0.00001 ? transferToNumber(data.vol) : data.vol,
}) close: data.close <= 0.00001 ? transferToNumber(data.close) : data.close,
} open: data.open <= 0.00001 ? transferToNumber(data.open) : data.open,
high: data.high <= 0.00001 ? transferToNumber(data.high) : data.high,
FeedBase.prototype.unsubscribeBars = function(listenerGuid) { low: data.low <= 0.00001 ? transferToNumber(data.low) : data.low
// 取消订阅产品的callback }
} onRealtimeCallback(realtimeData)
}
})
}
//处理科学计数法 FeedBase.prototype.unsubscribeBars = function(listenerGuid) {
function transferToNumber(inputNumber) { // 取消订阅产品的callback
if (isNaN(inputNumber)) { }
return inputNumber
}
inputNumber = '' + inputNumber
inputNumber = parseFloat(inputNumber)
let eformat = inputNumber.toExponential() // 转换为标准的科学计数法形式(字符串) //处理科学计数法
let tmpArray = eformat.match(/\d(?:\.(\d*))?e([+-]\d+)/) // 分离出小数值和指数值 function transferToNumber(inputNumber) {
let number = inputNumber.toFixed(Math.max(0, (tmpArray[1] || '').length - tmpArray[2])) if (isNaN(inputNumber)) {
return number return inputNumber
} }
inputNumber = '' + inputNumber
inputNumber = parseFloat(inputNumber)
let eformat = inputNumber.toExponential() // 转换为标准的科学计数法形式(字符串)
let tmpArray = eformat.match(/\d(?:\.(\d*))?e([+-]\d+)/) // 分离出小数值和指数值
let number = inputNumber.toFixed(Math.max(0, (tmpArray[1] || '').length - tmpArray[2]))
return number
}
exports.FeedBase = FeedBase exports.FeedBase = FeedBase

296
components/kline/tradingView/websocket1.js → components/kline/tradingView/websocket2.js

@ -1,149 +1,153 @@
import { import
Event constant
} from './event.js' from '@/utils/constant.js'
import {
import pakoJs from './pako.js' Event
} from './event.js'
var pako = pakoJs import pakoJs from './pako.js'
var socket = {
socket: null, // socket name var pako = pakoJs
realTimeData: null, // 请求实时数据的参数 var socket = {
intervalObj: null, // 定时器的名字 socket: null, // socket name
lastRealTimeData: null, // 上一次请求的产品 id:null,
sendData(historyData, realTimeDatas, history) { realTimeData: null, // 请求实时数据的参数
// 储存历史数据 intervalObj: null, // 定时器的名字
this.historyData = historyData lastRealTimeData: null, // 上一次请求的产品
this.realTimeData = realTimeDatas sendData(historyData, realTimeDatas, history) {
// 如果上一次订阅过产品 // 储存历史数据
if (this.lastRealTimeData) { this.historyData = historyData
// 如果不是订阅历史产品 那么肯定就是切换周期咯 或者 切换产品
// 那么就取消订阅上一次的产品实时数据 this.realTimeData = realTimeDatas
if (!history) { // 如果上一次订阅过产品
console.log('取消订阅' + this.lastRealTimeData) if (this.lastRealTimeData) {
this.sendWsRequest({
"unsub": this.lastRealTimeData,
"id": "id1" // 请求这一次的历史
}) this.historyData.id=this.id
}
// 请求这一次的历史
this.sendWsRequest(this.historyData) this.sendWsRequest(this.historyData)
console.log(111111,realTimeDatas)
// 如果不是订阅历史产品 那么肯定就是切换周期咯 或者切换产品咯 // 如果不是订阅历史产品 那么肯定就是切换周期咯 或者切换产品咯
// 那么就订阅一下 这次产品的或者周期的 实时数据 // 那么就订阅一下 这次产品的或者周期的 实时数据
if (!history) { if (!history) {
console.log('订阅新的' + realTimeDatas) //console.log('订阅新的' + realTimeDatas)
this.sendWsRequest({ //console.log(111111,realTimeDatas)
"sub": realTimeDatas, this.sendWsRequest({
"id": "id1" event: 'un_sub',
}) type: 'kline',
} id: this.id,
} else { channel:[this.lastRealTimeData],
// 如果是第一次订阅,就是说刚进入交易所, })
// 先存起来这一次请求的产品 作为历史产品 this.lastRealTimeData = this.realTimeData
this.lastRealTimeData = this.realTimeData }
// 然后 初始化一下websocket } else {
this.initWs()
} // 如果是第一次订阅,就是说刚进入交易所,
}, // 先存起来这一次请求的产品 作为历史产品
initWs() { this.lastRealTimeData = this.realTimeData
this.socket = new WebSocket('wss://api.huobi.pro/ws') // 然后 初始化一下websocket
this.socket.onopen = () => { this.initWs()
this.sendWsRequest(this.historyData) }
this.sendWsRequest({ },
"sub": this.historyData.req, initWs() {
"id": "id1" this.socket = new WebSocket(constant.WSSURL)
}) this.socket.onopen = () => {
}
this.socket.onmessage = resp => { }
this.message(resp) this.socket.onmessage = resp => {
} this.message(resp)
this.socket.onclose = () => { }
this.close() this.socket.onclose = () => {
} this.close()
this.socket.onerror = err => { }
this.error(err) this.socket.onerror = err => {
} this.error(err)
}, }
error(err) { },
console.log(err, 'depth-socket::error') error(err) {
}, //console.log(err, 'depth-socket::error')
close() { },
// 如果websocket关闭的话,就从新打开一下。 close() {
this.initWs() // 如果websocket关闭的话,就从新打开一下。
console.log('depth-socket::close') this.initWs()
}, //console.log('depth-socket::close')
},
message(resp) { message(resp) {
//console.log(resp) resp=JSON.parse(resp.data)
let this_ = this if (resp.channel === 'conn') {
let reader = new FileReader() this.id = resp.data
reader.onload = function(e) {
// 对数据进行解压 this.historyData.id=this.id
let msg = JSON.parse(pako.ungzip(reader.result, { this.sendWsRequest(this.historyData)
to: 'string'
}))
// console.log(msg) }else {
// 如果是实时数据触发Event('realTime') 喂数据 if(resp.event === 'req'){
if (msg.tick) {
Event.emit('realTime', msg.tick) //Event.emit('data', resp.data)
} if (resp.data && Array.isArray(resp.data)) {
Event.emit('data', resp.data)
//响应服务器,避免断开连接 }
if (msg.ping) { this.sendWsRequest({
this_.socket.send(JSON.stringify({ event: 'un_sub',
pong: msg.ping type: 'kline',
})); id: this.id,
this_.hasCheck = true channel:[this.lastRealTimeData],
} })
this.sendWsRequest({
this_.lastRealTimeData = this_.realTimeData event: 'sub',
// 如果是历史数据触发Event('data') 绘制数据 type: 'kline',
if (msg.data && Array.isArray(msg.data)) { id: this.id,
console.log(msg.data) channel:[this.lastRealTimeData],
Event.emit('data', msg.data) })
} }else{
}
// //将返回的数据解析为字符串格式 Event.emit('realTime', resp.data)
reader.readAsArrayBuffer(resp.data);
}, }
checkSendMessage(options) {
// 这里处理websocket 连接不上的问题
var checkTimes = 10 }
var i = 0
this.intervalObj = setInterval(() => {
i += 1 },
if (this.socket.readyState === 1) { checkSendMessage(options) {
// ... // 这里处理websocket 连接不上的问题
this.socket.send(options) var checkTimes = 10
clearInterval(this.intervalObj) var i = 0
return this.intervalObj = setInterval(() => {
} i += 1
if (i >= checkTimes) { if (this.socket.readyState === 1) {
clearInterval(this.intervalObj) // ...
console.log('send post_data_str timeout.') this.socket.send(options)
} clearInterval(this.intervalObj)
}, 500) return
}, }
sendWsRequest(options) { if (i >= checkTimes) {
switch (this.socket.readyState) { clearInterval(this.intervalObj)
case 0: //console.log('send post_data_str timeout.')
this.checkSendMessage(JSON.stringify(options)) }
break }, 500)
case 1: },
this.socket.send(JSON.stringify(options)) sendWsRequest(options) {
break switch (this.socket.readyState) {
case 2: case 0:
console.log('ws关闭状态') this.checkSendMessage(JSON.stringify(options))
break break
case 3: case 1:
this.initWs() this.socket.send(JSON.stringify(options))
break break
default: case 2:
console.log('ws未知错误') //console.log('ws关闭状态')
} break
} case 3:
} this.initWs()
break
default:
//console.log('ws未知错误')
}
}
}
exports.socket = socket exports.socket = socket

7
manifest.json

@ -2,8 +2,8 @@
"name" : "Same home", "name" : "Same home",
"appid" : "__UNI__C4028F6", "appid" : "__UNI__C4028F6",
"description" : "", "description" : "",
"versionName" : "1.0.1", "versionName" : "1.0.4",
"versionCode" : 101, "versionCode" : 104,
"transformPx" : false, "transformPx" : false,
/* 5+App */ /* 5+App */
"app-plus" : { "app-plus" : {
@ -16,6 +16,9 @@
"autoclose" : true, "autoclose" : true,
"delay" : 0 "delay" : 0
}, },
"compatible" : {
"ignoreVersion" : true //trueHBuilderX1.9.0
},
/* */ /* */
"modules" : { "modules" : {
"VideoPlayer" : {} "VideoPlayer" : {}

6
pages.json

@ -10,6 +10,12 @@
"navigationStyle": "custom" "navigationStyle": "custom"
} }
}, },
{
"path": "pages/home/caringwomen",
"style": {
"navigationStyle": "custom"
}
},
// //
{ {
"path": "pages/login/index", "path": "pages/login/index",

290
pages/home/caringwomen.vue

@ -0,0 +1,290 @@
<template>
<view class="main">
<navigation>{{ content.title }}</navigation>
<!-- #ifdef APP-PLUS -->
<view class="body-app">
<!-- #endif -->
<!-- #ifdef H5 -->
<view class="body">
<!-- #endif -->
<view class="content" v-html="content.content">
</view>
</view>
</view>
</template>
<script>
import UButton from '../../uview-ui/components/u-button/u-button.vue'
import api from '@/utils/api'
import md5 from 'js-md5'
export default {
name: "caringwomen",
data() {
return {
content:{}
};
},
computed: {
i18n() {
return this.$t("login");
},
},
onLoad() {
this.agreement()
},
watch: {
},
onShow() {},
methods: {
//
agreement() {
api.agreement({
type:'caringwomen'
}).then(res => {
this.content=res
})
},
},
}
</script>
<style lang="scss" scoped>
.content{
margin-top: 50rpx;
text-align: left;
padding-bottom: 60rpx;
// HTML+CSS
/* 这两个在技术上是一样的, 为了兼容了浏览器两个都加上 */
overflow-wrap: break-word;
word-wrap: break-word;
-ms-word-break: break-all;
/* 这个的使用在web-kit中有些危险,他可能会阶段所有东西 */
word-break: break-all;
/* Instead use this non-standard one: */
word-break: break-word;
/* 如果浏览器支持的话增加一个连接符(Blink不支持) */
-ms-hyphens: auto;
-moz-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
.main {
.body {
margin-top: 204rpx;
padding: 0 40rpx;
overflow: hidden;
.welcomeText {
margin-top: 48rpx;
font-size: 48rpx;
font-weight: 800;
text-align: center;
}
.signInText {
font-size: 32rpx;
text-align: center;
color: #A2A0A8;
}
.form {
font-size: 32rpx;
margin-top: 48rpx;
.input-item {
height: 112rpx;
line-height: 112rpx;
background: #211F32;
margin-bottom: 48rpx;
border-radius: 32rpx;
.icon {
margin: 0 24rpx;
}
/deep/.u-form-item__body {
padding: 0;
}
.input {
height: 112rpx;
}
}
.vCode {
.getVCodeBtn {
// position: absolute;
width: 154rpx;
height: 56rpx;
right: 28rpx;
// top: 14px;
border-radius: 8px;
line-height: 56rpx;
font-size: 24rpx;
color: #00E8A2 !important;
padding: 0;
}
}
}
.agree {
font-size: 28rpx;
.check {
display: inline-block;
vertical-align: top;
margin-right: 32rpx;
}
.text {
display: inline-block;
width: 542rpx;
}
span {
cursor: pointer;
color: #00E8A2;
padding: 0 10rpx;
}
}
.button {
margin-top: 64rpx;
height: 112rpx;
line-height: 112rpx;
border-radius: 32rpx;
font-size: 32rpx;
color: #15141F !important;
}
.signUp {
margin: 48rpx 0;
text-align: center;
font-size: 32rpx;
.navigator {
display: inline;
color: #00E8A2;
padding: 0 10rpx;
}
}
}
.body-app{
margin-top: 204rpx !important;
padding: 0 40rpx;
overflow: hidden;
.welcomeText {
margin-top: 48rpx;
font-size: 48rpx;
font-weight: 800;
text-align: center;
}
.signInText {
font-size: 32rpx;
text-align: center;
color: #A2A0A8;
}
.form {
font-size: 32rpx;
margin-top: 48rpx;
.input-item {
height: 112rpx;
line-height: 112rpx;
background: #211F32;
margin-bottom: 48rpx;
border-radius: 32rpx;
.icon {
margin: 0 24rpx;
}
/deep/.u-form-item__body {
padding: 0;
}
.input {
height: 112rpx;
}
}
.vCode {
.getVCodeBtn {
// position: absolute;
width: 154rpx;
height: 56rpx;
right: 28rpx;
// top: 14px;
border-radius: 8px;
line-height: 56rpx;
font-size: 24rpx;
color: #00E8A2 !important;
padding: 0;
}
}
}
.agree {
font-size: 28rpx;
.check {
display: inline-block;
vertical-align: top;
margin-right: 32rpx;
}
.text {
display: inline-block;
width: 542rpx;
}
span {
cursor: pointer;
color: #00E8A2;
padding: 0 10rpx;
}
}
.button {
margin-top: 64rpx;
height: 112rpx;
line-height: 112rpx;
border-radius: 32rpx;
font-size: 32rpx;
color: #15141F !important;
}
.signUp {
margin: 48rpx 0;
text-align: center;
font-size: 32rpx;
.navigator {
display: inline;
color: #00E8A2;
padding: 0 10rpx;
}
}
}
}
</style>

4
pages/subscription/details.vue

@ -54,8 +54,8 @@
<!-- ProjectDetails --> <!-- ProjectDetails -->
<view class="contentTitle"> <view class="contentTitle">
<view class="ProjectDetails">{{ i18n.ProjectDetails }}</view> <view class="ProjectDetails">{{ i18n.ProjectDetails }}</view>
<view class="videoBtn" @click="playVideo(deinfo.sysCoinInfo.videoWebsite)">{{ i18n.Video }}</view> <view class="videoBtn" v-show="deinfo.sysCoinInfo.videoWebsite!=''" @click="playVideo(deinfo.sysCoinInfo.videoWebsite)">{{ i18n.Video }}</view>
<view class="whiteBook" @click="getContact('book')">{{ i18n.WhiteBook }}</view> <view class="whiteBook" v-show="deinfo.sysCoinInfo.whitePaperWebsite!=''" @click="getContact('book')">{{ i18n.WhiteBook }}</view>
</view> </view>
<!-- 文字内容 --> <!-- 文字内容 -->

BIN
static/home/img_People.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 70 KiB

4
utils/language/en_US.js

@ -95,6 +95,10 @@ export default {
WarmTipsText: 'Are you sure to receive?', WarmTipsText: 'Are you sure to receive?',
Cancel: 'Cancel', Cancel: 'Cancel',
Confirm: 'Confirm', Confirm: 'Confirm',
CaringForWomen:'Caring for women, respecting feminism',
LoveFeminist:'——Love Feminist Fund',
LoveFeminist1:'Support Program',
checkTheDetails:'check the details',
}, },
// 合约页面相关 // 合约页面相关

4
utils/language/vi_VN.js

@ -93,6 +93,10 @@ export default {
WarmTipsText: 'Bạn có chắc chắn nhận được nó?', WarmTipsText: 'Bạn có chắc chắn nhận được nó?',
Cancel: 'Hủy bỏ', Cancel: 'Hủy bỏ',
Confirm: 'xác nhận', Confirm: 'xác nhận',
CaringForWomen:'Quan tâm đến phụ nữ, tôn trọng quyền của phụ nữ',
LoveFeminist:'—Chương trình Hỗ trợ Quỹ',
LoveFeminist1:'Quyền lợi Phụ nữ Tình yêu',
checkTheDetails:'kiểm tra các chi tiết',
}, },
// 合约页面相关 // 合约页面相关

4
utils/language/zh_TW.js

@ -95,6 +95,10 @@ export default {
WarmTipsText: '您確定領取嗎?', WarmTipsText: '您確定領取嗎?',
Cancel: '取消', Cancel: '取消',
Confirm: '確認', Confirm: '確認',
CaringForWomen:'關愛女性,尊重女權',
LoveFeminist:'——愛心女權',
LoveFeminist1:'基金扶植計劃',
checkTheDetails:'查看詳情',
}, },
// 合约页面相关 // 合约页面相关

Loading…
Cancel
Save