import * as os from "os"
|
import dxui from '../../dxmodules/dxUi.js'
|
import dxMap from '../../dxmodules/dxMap.js'
|
import screen from '../screen.js'
|
import pinyin from './pinyin/pinyin.js'
|
// import utils from "../common/utils/utils.js"
|
import i18n from "./i18n.js"
|
import std from '../../dxmodules/dxStd.js'
|
|
const viewUtils = {}
|
|
viewUtils.font = function (size, style) {
|
return dxui.Font.build('/app/code/resource/font/AlibabaPuHuiTi-2-65-Medium.ttf', size || 14, style || dxui.Utils.FONT_STYLE.NORMAL)
|
}
|
|
// 语义化颜色
|
viewUtils.color = {
|
// 成功,绿色
|
success: 0x00BF8A,
|
// 失败,红色
|
fail: 0xFF0000,
|
// 警告,黄色
|
warning: 0xFFA800,
|
// 默认:蓝色
|
default: 0x00a8ff
|
}
|
|
// 清除样式
|
viewUtils._clearStyle = function (obj) {
|
obj.radius(0)
|
obj.borderWidth(0)
|
obj.padAll(0)
|
}
|
|
// 图片按钮封装,按钮根据图片大小设置,矩形
|
viewUtils.imageBtn = function (parent, id, src, dataI18n, textColor) {
|
const zoom = 1.02
|
|
const imageBox = dxui.View.build(id, parent)
|
viewUtils._clearStyle(imageBox)
|
imageBox.bgOpa(0)
|
|
const image = dxui.Image.build(id + 'image', imageBox)
|
image.source(src)
|
image.update()
|
const width = image.width()
|
const height = image.height()
|
imageBox.setSize(width * zoom + 5, height * zoom + 5)
|
imageBox.scroll(false)
|
image.align(dxui.Utils.ALIGN.CENTER, 0, 0)
|
|
if (dataI18n) {
|
const textLbl = dxui.Label.build(id + 'text', image)
|
textLbl.textFont(viewUtils.font(Math.round(height / 3)))
|
if (textColor !== undefined && textColor !== null) {
|
textLbl.textColor(textColor)
|
} else {
|
textLbl.textColor(0xffffff)
|
}
|
textLbl.align(dxui.Utils.ALIGN.CENTER, 0, 0)
|
textLbl.dataI18n = dataI18n
|
}
|
|
imageBox.on(dxui.Utils.ENUM.LV_EVENT_PRESSED, () => {
|
image.obj.lvImgSetZoom(256 * zoom)
|
})
|
|
imageBox.on(dxui.Utils.ENUM.LV_EVENT_RELEASED, () => {
|
image.obj.lvImgSetZoom(256)
|
})
|
|
return imageBox
|
}
|
|
// 创建标题栏
|
viewUtils.title = function (parent, backScreen, id, dataI18n, backCb) {
|
const titleBox = dxui.View.build(id, parent)
|
viewUtils._clearStyle(titleBox)
|
titleBox.setSize(800, 70)
|
titleBox.bgColor(0xffffff)
|
|
if (dataI18n) {
|
const titleLbl = dxui.Label.build(id + 'title', titleBox)
|
titleLbl.textFont(viewUtils.font(32))
|
titleLbl.align(dxui.Utils.ALIGN.CENTER, 0, 0)
|
titleLbl.dataI18n = dataI18n
|
}
|
|
const back = viewUtils.imageBtn(titleBox, id + 'back', '/app/code/resource/image/back.png')
|
back.setSize(80, 70)
|
back.align(dxui.Utils.ALIGN.LEFT_MID, 0, 0)
|
|
back.on(dxui.Utils.EVENT.CLICK, () => {
|
if (backScreen) {
|
dxui.loadMain(backScreen)
|
}
|
if (backCb) {
|
backCb()
|
}
|
})
|
|
return titleBox
|
}
|
|
// 输入框
|
viewUtils.input = function (parent, id, mode, enter = () => { }, dataI18n) {
|
const input = dxui.Textarea.build(id + 'input', parent)
|
viewUtils._clearStyle(input)
|
input.align(dxui.Utils.ALIGN.TOP_MID, 0, 100)
|
input.textAlign(dxui.Utils.TEXT_ALIGN.LEFT_MID)
|
input.setOneLine(true)
|
input.borderWidth(2)
|
input.setBorderColor(0xE7E7E7)
|
const font = viewUtils.font(26)
|
const superSetSize = input.setSize
|
input.setSize = (width, height) => {
|
superSetSize.call(input, width, height)
|
input.padAll((height - 4 - font.obj.lvFontGetLineHeight()) / 2)
|
input.padLeft(30)
|
input.padRight(30)
|
}
|
input.setSize(650, 100)
|
input.radius(13)
|
input.textFont(font)
|
if (dataI18n) {
|
// 只有在dxui.all中,才能使用dataI18n
|
dxui.all[id + 'input' + 'obj'] = input.obj
|
input.obj.dataI18n = dataI18n
|
input.obj.text = (text) => {
|
input.obj.lvTextareaSetPlaceholderText(text)
|
}
|
}
|
|
input.on(dxui.Utils.EVENT.CLICK, () => {
|
input.setBorderColor(0x3670f7)
|
pinyin.show(mode || pinyin.getMode(), (data) => {
|
if (typeof data == 'string') {
|
input.lvTextareaAddText(data)
|
} else if (typeof data == 'object') {
|
switch (data.cmd) {
|
case 'enter':
|
enter()
|
pinyin.hide()
|
break
|
case 'backspace':
|
input.lvTextareaDelChar()
|
break
|
}
|
}
|
})
|
if (mode) {
|
pinyin.lock()
|
}
|
})
|
input.on(dxui.Utils.EVENT.DEFOCUSED, () => {
|
dxMap.get("INPUT_KEYBOARD").put("defocus", "defocus")
|
})
|
|
let root = parent
|
let rootId = parent.id
|
while ((rootId = dxui.all[rootId].parent) != "0") {
|
root = dxui.all[rootId]
|
}
|
|
root.on(dxui.Utils.EVENT.CLICK, () => {
|
input.setBorderColor(0xE7E7E7)
|
// pinyin.hide()
|
})
|
|
root.on(dxui.Utils.ENUM.LV_EVENT_SCREEN_UNLOADED, () => {
|
input.setBorderColor(0xE7E7E7)
|
// pinyin.hide()
|
input.text('')
|
})
|
return input
|
}
|
|
// 确认弹窗
|
viewUtils.confirmInit = function () {
|
const confirm = dxui.View.build('confirm', dxui.Utils.LAYER.TOP)
|
viewUtils._clearStyle(confirm)
|
confirm.setSize(screen.screenSize.width, screen.screenSize.height)
|
confirm.bgColor(0x0)
|
confirm.bgOpa(50)
|
confirm.hide()
|
|
const box = dxui.View.build('confirmBox', confirm)
|
viewUtils._clearStyle(box)
|
box.setSize(500, 300)
|
box.radius(20)
|
box.align(dxui.Utils.ALIGN.CENTER, 0, 0)
|
box.bgColor(0xffffff)
|
|
const title = dxui.Label.build('confirmTitle', box)
|
title.align(dxui.Utils.ALIGN.TOP_MID, 0, 22)
|
title.textFont(viewUtils.font(30))
|
title.text("Confirm")
|
|
const close = viewUtils.imageBtn(box, 'confirmClose', '/app/code/resource/image/close_small.png')
|
close.align(dxui.Utils.ALIGN.TOP_RIGHT, -28, 18)
|
|
const content = dxui.Label.build('confirmContent', box)
|
content.align(dxui.Utils.ALIGN.TOP_MID, 0, 114)
|
content.textFont(viewUtils.font(24))
|
content.textColor(0x767676)
|
content.text("Are you sure you want to exit?")
|
content.textAlign(dxui.Utils.TEXT_ALIGN.CENTER)
|
|
const ok = dxui.Button.build('okBtn', box)
|
ok.align(dxui.Utils.ALIGN.BOTTOM_LEFT, 69, -31)
|
ok.bgColor(0x0)
|
ok.radius(10)
|
ok.setSize(150, 50)
|
const okLbl = dxui.Label.build('okLbl', ok)
|
okLbl.textFont(viewUtils.font(26))
|
okLbl.dataI18n = 'confirm.ok'
|
okLbl.textColor(0xffffff)
|
okLbl.align(dxui.Utils.ALIGN.CENTER, 0, 0)
|
ok.on(dxui.Utils.EVENT.CLICK, () => {
|
confirm.hide()
|
if (typeof viewUtils.confirm.okFunc == 'function') {
|
viewUtils.confirm.okFunc()
|
}
|
})
|
|
const no = dxui.Button.build('noBtn', box)
|
no.align(dxui.Utils.ALIGN.BOTTOM_RIGHT, -69, -31)
|
no.bgColor(0xF3F3F3)
|
no.radius(10)
|
no.setSize(150, 50)
|
const noLbl = dxui.Label.build('noLbl', no)
|
noLbl.textFont(viewUtils.font(26))
|
noLbl.dataI18n = 'confirm.no'
|
noLbl.align(dxui.Utils.ALIGN.CENTER, 0, 0)
|
noLbl.textColor(0x0)
|
no.on(dxui.Utils.EVENT.CLICK, () => {
|
confirm.hide()
|
})
|
|
close.on(dxui.Utils.EVENT.CLICK, () => {
|
confirm.hide()
|
if (typeof viewUtils.confirm.noFunc == 'function') {
|
viewUtils.confirm.noFunc()
|
}
|
})
|
viewUtils.confirm = { confirm, box, title, close, content, ok, no, okLbl, noLbl }
|
}
|
|
viewUtils.confirmClose = function () {
|
viewUtils.confirm.confirm.hide()
|
}
|
|
viewUtils.confirmOpen = function (title, content, ok, no) {
|
viewUtils.confirm.confirm.moveForeground()
|
viewUtils.confirm.title.dataI18n = title
|
viewUtils.confirm.content.dataI18n = content
|
if (ok) {
|
viewUtils.confirm.ok.show()
|
viewUtils.confirm.okFunc = ok
|
} else {
|
viewUtils.confirm.ok.hide()
|
}
|
if (no) {
|
viewUtils.confirm.no.show()
|
viewUtils.confirm.noFunc = no
|
} else {
|
viewUtils.confirm.no.hide()
|
}
|
viewUtils.confirm.confirm.show()
|
i18n.refreshObj(viewUtils.confirm.title)
|
i18n.refreshObj(viewUtils.confirm.content)
|
viewUtils.confirm.content.update()
|
viewUtils.confirm.box.height(viewUtils.confirm.content.height() + 257)
|
}
|
|
|
viewUtils.bottomBtn = function (parent, id, dataI18n, click, btnColor = 0x000000, textColor = 0xffffff, fontSize = 28) {
|
const btn = dxui.Button.build(id, parent)
|
btn.align(dxui.Utils.ALIGN.BOTTOM_MID, 0, -124)
|
btn.bgColor(btnColor)
|
btn.setSize(620, 100)
|
btn.radius(60)
|
const btnLbl = dxui.Label.build(id + 'lbl', btn)
|
btnLbl.dataI18n = dataI18n
|
btnLbl.textFont(viewUtils.font(fontSize))
|
btnLbl.textColor(textColor)
|
btnLbl.align(dxui.Utils.ALIGN.CENTER, 0, 0)
|
btn.on(dxui.Utils.EVENT.CLICK, click)
|
return btn
|
}
|
|
// 循环滚动
|
viewUtils.cycleList = function (parent, id, size, maxNum, template = () => { }, update = () => { }) {
|
const cycleList = dxui.View.build(id, parent)
|
viewUtils._clearStyle(cycleList)
|
cycleList.setSize(size[0], size[1])
|
cycleList.cycleList = []
|
cycleList.cycleIndex = 0
|
for (let i = -1; i < (maxNum + 1); i++) {
|
const cycleItem = dxui.View.build(id + 'item' + i, cycleList)
|
viewUtils._clearStyle(cycleItem)
|
cycleItem.setSize(size[0], size[1] / maxNum)
|
cycleItem.bgOpa(0)
|
cycleItem.borderWidth(1)
|
cycleItem.setBorderColor(0xDEDEDE)
|
cycleItem.obj.setStyleBorderSide(dxui.Utils.ENUM.LV_BORDER_SIDE_BOTTOM, 0)
|
cycleItem.userdata = template(cycleItem)
|
cycleList.cycleIndex = i
|
update(cycleItem.userdata, i)
|
if (cycleList.cycleList.length > 0) {
|
cycleItem.alignTo(cycleList.cycleList[cycleList.cycleList.length - 1], dxui.Utils.ALIGN.OUT_BOTTOM_MID, 0, 0)
|
} else {
|
cycleItem.align(dxui.Utils.ALIGN.TOP_MID, 0, 0)
|
}
|
cycleList.cycleList.push(cycleItem)
|
}
|
cycleList.scrollToY(size[1] / maxNum, false)
|
|
cycleList.on(dxui.Utils.ENUM.LV_EVENT_SCROLL, () => {
|
if (cycleList.scrollTop() >= size[1] / maxNum * 2) {
|
const cycleItem = cycleList.cycleList.shift()
|
cycleList.cycleList.push(cycleItem)
|
for (let i = 0; i < cycleList.cycleList.length; i++) {
|
const item = cycleList.cycleList[i]
|
if (i == 0) {
|
item.align(dxui.Utils.ALIGN.TOP_MID, 0, 0)
|
} else {
|
item.alignTo(cycleList.cycleList[i - 1], dxui.Utils.ALIGN.OUT_BOTTOM_MID, 0, 0)
|
}
|
}
|
cycleList.cycleIndex += 1
|
update(cycleItem.userdata, cycleList.cycleIndex)
|
cycleList.scrollToY(size[1] / maxNum, false)
|
} else if (cycleList.scrollTop() <= 0) {
|
const cycleItem = cycleList.cycleList.pop()
|
cycleList.cycleList.unshift(cycleItem)
|
for (let i = 0; i < cycleList.cycleList.length; i++) {
|
const item = cycleList.cycleList[i]
|
if (i == 0) {
|
item.align(dxui.Utils.ALIGN.TOP_MID, 0, 0)
|
} else {
|
item.alignTo(cycleList.cycleList[i - 1], dxui.Utils.ALIGN.OUT_BOTTOM_MID, 0, 0)
|
}
|
}
|
cycleList.cycleIndex -= 1
|
update(cycleItem.userdata, cycleList.cycleIndex)
|
cycleList.scrollToY(size[1] / maxNum, false)
|
}
|
})
|
cycleList.refresh = () => {
|
cycleList.cycleList.forEach((item, index) => {
|
update(item.userdata, index)
|
})
|
}
|
return cycleList
|
}
|
|
viewUtils.statusPanel = function (parent, successI18n, failI18n) {
|
const successBg = dxui.Image.build(parent.id + 'successBg', parent)
|
successBg.source('/app/code/resource/image/successBg.png')
|
successBg.align(dxui.Utils.ALIGN.BOTTOM_MID, 0, 0)
|
successBg.hide()
|
|
const successIcon = dxui.Image.build(parent.id + 'successIcon', successBg)
|
successIcon.source('/app/code/resource/image/success_fill.png')
|
successIcon.align(dxui.Utils.ALIGN.CENTER, 0, 0)
|
|
const successLbl = dxui.Label.build(parent.id + 'successLbl', successBg)
|
successLbl.textFont(viewUtils.font(38))
|
successLbl.textColor(0xffffff)
|
successLbl.dataI18n = successI18n
|
successLbl.textAlign(dxui.Utils.TEXT_ALIGN.CENTER)
|
successLbl.align(dxui.Utils.ALIGN.TOP_MID, 0, 244)
|
|
const failBg = dxui.Image.build(parent.id + 'failBg', parent)
|
failBg.source('/app/code/resource/image/failBg.png')
|
failBg.align(dxui.Utils.ALIGN.BOTTOM_MID, 0, 0)
|
failBg.hide()
|
|
const failIcon = dxui.Image.build(parent.id + 'failIcon', failBg)
|
failIcon.source('/app/code/resource/image/delete_fill.png')
|
failIcon.align(dxui.Utils.ALIGN.CENTER, 0, 0)
|
|
const failLbl = dxui.Label.build(parent.id + 'failLbl', failBg)
|
failLbl.textFont(viewUtils.font(38))
|
failLbl.textColor(0xffffff)
|
failLbl.dataI18n = failI18n
|
failLbl.textAlign(dxui.Utils.TEXT_ALIGN.CENTER)
|
failLbl.align(dxui.Utils.ALIGN.TOP_MID, 0, 244)
|
|
return {
|
success: (dataI18n) => {
|
if (dataI18n) {
|
successLbl.dataI18n = dataI18n
|
i18n.refreshObj(successLbl)
|
}
|
successBg.show()
|
failBg.hide()
|
std.setTimeout(() => {
|
successBg.hide()
|
}, 3000)
|
},
|
fail: (dataI18n) => {
|
if (dataI18n) {
|
failLbl.dataI18n = dataI18n
|
i18n.refreshObj(failLbl)
|
}
|
failBg.show()
|
successBg.hide()
|
std.setTimeout(() => {
|
failBg.hide()
|
}, 3000)
|
},
|
successBg: successBg,
|
failBg: failBg
|
}
|
}
|
|
// 新增弹窗布局 - 小型状态面板
|
viewUtils.smallStatusPanel = function (parent, successI18n, failI18n) {
|
const successBg = dxui.Image.build(parent.id + 'smallSuccessBg', parent)
|
successBg.source('/app/code/resource/image/view_s.png') // 成功背景图
|
successBg.setSize(499, 97) // 设置尺寸
|
successBg.align(dxui.Utils.ALIGN.BOTTOM_MID, 0, 0)
|
successBg.hide()
|
|
const successLbl = dxui.Label.build(parent.id + 'smallSuccessLbl', successBg)
|
successLbl.textFont(viewUtils.font(24, dxui.Utils.FONT_STYLE.BOLD))
|
successLbl.textColor(0xffffff)
|
successLbl.dataI18n = successI18n
|
successLbl.textAlign(dxui.Utils.TEXT_ALIGN.CENTER)
|
successLbl.align(dxui.Utils.ALIGN.CENTER, 0, 0)
|
|
const failBg = dxui.Image.build(parent.id + 'smallFailBg', parent)
|
failBg.source('/app/code/resource/image/view_f.png') // 失败背景图
|
failBg.setSize(499, 97) // 设置尺寸
|
failBg.align(dxui.Utils.ALIGN.BOTTOM_MID, 0, 0)
|
failBg.hide()
|
|
const failLbl = dxui.Label.build(parent.id + 'smallFailLbl', failBg)
|
failLbl.textFont(viewUtils.font(24, dxui.Utils.FONT_STYLE.BOLD))
|
failLbl.textColor(0xffffff)
|
failLbl.dataI18n = failI18n
|
failLbl.textAlign(dxui.Utils.TEXT_ALIGN.CENTER)
|
failLbl.align(dxui.Utils.ALIGN.CENTER, 0, 0)
|
|
return {
|
success: (dataI18n) => {
|
if (dataI18n) {
|
successLbl.dataI18n = dataI18n
|
i18n.refreshObj(successLbl)
|
}
|
successBg.show()
|
failBg.hide()
|
std.setTimeout(() => {
|
successBg.hide()
|
}, 3000)
|
},
|
fail: (dataI18n) => {
|
if (dataI18n) {
|
failLbl.dataI18n = dataI18n
|
i18n.refreshObj(failLbl)
|
}
|
failBg.show()
|
successBg.hide()
|
std.setTimeout(() => {
|
failBg.hide()
|
}, 3000)
|
},
|
successBg: successBg,
|
failBg: failBg
|
}
|
}
|
|
export default viewUtils
|