if (typeof Promise !== "undefined" && !Promise.prototype.finally) {
Promise.prototype.finally = function(callback) {
const promise = this.constructor;
return this.then(
(value) => promise.resolve(callback()).then(() => value),
(reason) => promise.resolve(callback()).then(() => {
throw reason;
})
);
};
}
;
if (typeof uni !== "undefined" && uni && uni.requireGlobal) {
const global2 = uni.requireGlobal();
ArrayBuffer = global2.ArrayBuffer;
Int8Array = global2.Int8Array;
Uint8Array = global2.Uint8Array;
Uint8ClampedArray = global2.Uint8ClampedArray;
Int16Array = global2.Int16Array;
Uint16Array = global2.Uint16Array;
Int32Array = global2.Int32Array;
Uint32Array = global2.Uint32Array;
Float32Array = global2.Float32Array;
Float64Array = global2.Float64Array;
BigInt64Array = global2.BigInt64Array;
BigUint64Array = global2.BigUint64Array;
}
;
if (uni.restoreGlobal) {
uni.restoreGlobal(Vue, weex, plus, setTimeout, clearTimeout, setInterval, clearInterval);
}
(function(vue) {
"use strict";
function formatAppLog(type, filename, ...args) {
if (uni.__log__) {
uni.__log__(type, filename, ...args);
} else {
console[type].apply(console, [...args, filename]);
}
}
function resolveEasycom(component, easycom) {
return typeof component === "string" ? easycom : component;
}
const icons = {
"uicon-level": "",
"uicon-column-line": "",
"uicon-checkbox-mark": "",
"uicon-folder": "",
"uicon-movie": "",
"uicon-star-fill": "",
"uicon-star": "",
"uicon-phone-fill": "",
"uicon-phone": "",
"uicon-apple-fill": "",
"uicon-chrome-circle-fill": "",
"uicon-backspace": "",
"uicon-attach": "",
"uicon-cut": "",
"uicon-empty-car": "",
"uicon-empty-coupon": "",
"uicon-empty-address": "",
"uicon-empty-favor": "",
"uicon-empty-permission": "",
"uicon-empty-news": "",
"uicon-empty-search": "",
"uicon-github-circle-fill": "",
"uicon-rmb": "",
"uicon-person-delete-fill": "",
"uicon-reload": "",
"uicon-order": "",
"uicon-server-man": "",
"uicon-search": "",
"uicon-fingerprint": "",
"uicon-more-dot-fill": "",
"uicon-scan": "",
"uicon-share-square": "",
"uicon-map": "",
"uicon-map-fill": "",
"uicon-tags": "",
"uicon-tags-fill": "",
"uicon-bookmark-fill": "",
"uicon-bookmark": "",
"uicon-eye": "",
"uicon-eye-fill": "",
"uicon-mic": "",
"uicon-mic-off": "",
"uicon-calendar": "",
"uicon-calendar-fill": "",
"uicon-trash": "",
"uicon-trash-fill": "",
"uicon-play-left": "",
"uicon-play-right": "",
"uicon-minus": "",
"uicon-plus": "",
"uicon-info": "",
"uicon-info-circle": "",
"uicon-info-circle-fill": "",
"uicon-question": "",
"uicon-error": "",
"uicon-close": "",
"uicon-checkmark": "",
"uicon-android-circle-fill": "",
"uicon-android-fill": "",
"uicon-ie": "",
"uicon-IE-circle-fill": "",
"uicon-google": "",
"uicon-google-circle-fill": "",
"uicon-setting-fill": "",
"uicon-setting": "",
"uicon-minus-square-fill": "",
"uicon-plus-square-fill": "",
"uicon-heart": "",
"uicon-heart-fill": "",
"uicon-camera": "",
"uicon-camera-fill": "",
"uicon-more-circle": "",
"uicon-more-circle-fill": "",
"uicon-chat": "",
"uicon-chat-fill": "",
"uicon-bag-fill": "",
"uicon-bag": "",
"uicon-error-circle-fill": "",
"uicon-error-circle": "",
"uicon-close-circle": "",
"uicon-close-circle-fill": "",
"uicon-checkmark-circle": "",
"uicon-checkmark-circle-fill": "",
"uicon-question-circle-fill": "",
"uicon-question-circle": "",
"uicon-share": "",
"uicon-share-fill": "",
"uicon-shopping-cart": "",
"uicon-shopping-cart-fill": "",
"uicon-bell": "",
"uicon-bell-fill": "",
"uicon-list": "",
"uicon-list-dot": "",
"uicon-zhihu": "",
"uicon-zhihu-circle-fill": "",
"uicon-zhifubao": "",
"uicon-zhifubao-circle-fill": "",
"uicon-weixin-circle-fill": "",
"uicon-weixin-fill": "",
"uicon-twitter-circle-fill": "",
"uicon-twitter": "",
"uicon-taobao-circle-fill": "",
"uicon-taobao": "",
"uicon-weibo-circle-fill": "",
"uicon-weibo": "",
"uicon-qq-fill": "",
"uicon-qq-circle-fill": "",
"uicon-moments-circel-fill": "",
"uicon-moments": "",
"uicon-qzone": "",
"uicon-qzone-circle-fill": "",
"uicon-baidu-circle-fill": "",
"uicon-baidu": "",
"uicon-facebook-circle-fill": "",
"uicon-facebook": "",
"uicon-car": "",
"uicon-car-fill": "",
"uicon-warning-fill": "",
"uicon-warning": "",
"uicon-clock-fill": "",
"uicon-clock": "",
"uicon-edit-pen": "",
"uicon-edit-pen-fill": "",
"uicon-email": "",
"uicon-email-fill": "",
"uicon-minus-circle": "",
"uicon-minus-circle-fill": "",
"uicon-plus-circle": "",
"uicon-plus-circle-fill": "",
"uicon-file-text": "",
"uicon-file-text-fill": "",
"uicon-pushpin": "",
"uicon-pushpin-fill": "",
"uicon-grid": "",
"uicon-grid-fill": "",
"uicon-play-circle": "",
"uicon-play-circle-fill": "",
"uicon-pause-circle-fill": "",
"uicon-pause": "",
"uicon-pause-circle": "",
"uicon-eye-off": "",
"uicon-eye-off-outline": "",
"uicon-gift-fill": "",
"uicon-gift": "",
"uicon-rmb-circle-fill": "",
"uicon-rmb-circle": "",
"uicon-kefu-ermai": "",
"uicon-server-fill": "",
"uicon-coupon-fill": "",
"uicon-coupon": "",
"uicon-integral": "",
"uicon-integral-fill": "",
"uicon-home-fill": "",
"uicon-home": "",
"uicon-hourglass-half-fill": "",
"uicon-hourglass": "",
"uicon-account": "",
"uicon-plus-people-fill": "",
"uicon-minus-people-fill": "",
"uicon-account-fill": "",
"uicon-thumb-down-fill": "",
"uicon-thumb-down": "",
"uicon-thumb-up": "",
"uicon-thumb-up-fill": "",
"uicon-lock-fill": "",
"uicon-lock-open": "",
"uicon-lock-opened-fill": "",
"uicon-lock": "",
"uicon-red-packet-fill": "",
"uicon-photo-fill": "",
"uicon-photo": "",
"uicon-volume-off-fill": "",
"uicon-volume-off": "",
"uicon-volume-fill": "",
"uicon-volume": "",
"uicon-red-packet": "",
"uicon-download": "",
"uicon-arrow-up-fill": "",
"uicon-arrow-down-fill": "",
"uicon-play-left-fill": "",
"uicon-play-right-fill": "",
"uicon-rewind-left-fill": "",
"uicon-rewind-right-fill": "",
"uicon-arrow-downward": "",
"uicon-arrow-leftward": "",
"uicon-arrow-rightward": "",
"uicon-arrow-upward": "",
"uicon-arrow-down": "",
"uicon-arrow-right": "",
"uicon-arrow-left": "",
"uicon-arrow-up": "",
"uicon-skip-back-left": "",
"uicon-skip-forward-right": "",
"uicon-rewind-right": "",
"uicon-rewind-left": "",
"uicon-arrow-right-double": "",
"uicon-arrow-left-double": "",
"uicon-wifi-off": "",
"uicon-wifi": "",
"uicon-empty-data": "",
"uicon-empty-history": "",
"uicon-empty-list": "",
"uicon-empty-page": "",
"uicon-empty-order": "",
"uicon-man": "",
"uicon-woman": "",
"uicon-man-add": "",
"uicon-man-add-fill": "",
"uicon-man-delete": "",
"uicon-man-delete-fill": "",
"uicon-zh": "",
"uicon-en": ""
};
const version = "3";
{
formatAppLog("log", "at uni_modules/uview-plus/libs/config/config.js:5", `
%c uview-plus V${version} %c https://ijry.github.io/uview-plus/
`, "color: #ffffff; background: #3c9cff; padding:5px 0;", "color: #3c9cff;background: #ffffff; padding:5px 0;");
}
const config$1 = {
v: version,
version,
// 主题名称
type: [
"primary",
"success",
"info",
"error",
"warning"
],
// 颜色部分,本来可以通过scss的:export导出供js使用,但是奈何nvue不支持
color: {
"u-primary": "#2979ff",
"u-warning": "#ff9900",
"u-success": "#19be6b",
"u-error": "#fa3534",
"u-info": "#909399",
"u-main-color": "#303133",
"u-content-color": "#606266",
"u-tips-color": "#909399",
"u-light-color": "#c0c4cc"
},
// 默认单位,可以通过配置为rpx,那么在用于传入组件大小参数为数值时,就默认为rpx
unit: "px"
};
const ActionSheet = {
// action-sheet组件
actionSheet: {
show: false,
title: "",
description: "",
actions: [],
index: "",
cancelText: "",
closeOnClickAction: true,
safeAreaInsetBottom: true,
openType: "",
closeOnClickOverlay: true,
round: 0
}
};
const Album = {
// album 组件
album: {
urls: [],
keyName: "",
singleSize: 180,
multipleSize: 70,
space: 6,
singleMode: "scaleToFill",
multipleMode: "aspectFill",
maxCount: 9,
previewFullImage: true,
rowCount: 3,
showMore: true
}
};
const Alert = {
// alert警告组件
alert: {
title: "",
type: "warning",
description: "",
closable: false,
showIcon: false,
effect: "light",
center: false,
fontSize: 14
}
};
const Avatar = {
// avatar 组件
avatar: {
src: "",
shape: "circle",
size: 40,
mode: "scaleToFill",
text: "",
bgColor: "#c0c4cc",
color: "#ffffff",
fontSize: 18,
icon: "",
mpAvatar: false,
randomBgColor: false,
defaultUrl: "",
colorIndex: "",
name: ""
}
};
const AvatarGroup = {
// avatarGroup 组件
avatarGroup: {
urls: [],
maxCount: 5,
shape: "circle",
mode: "scaleToFill",
showMore: true,
size: 40,
keyName: "",
gap: 0.5,
extraValue: 0
}
};
const Backtop = {
// backtop组件
backtop: {
mode: "circle",
icon: "arrow-upward",
text: "",
duration: 100,
scrollTop: 0,
top: 400,
bottom: 100,
right: 20,
zIndex: 9,
iconStyle: {
color: "#909399",
fontSize: "19px"
}
}
};
const Badge = {
// 徽标数组件
badge: {
isDot: false,
value: "",
show: true,
max: 999,
type: "error",
showZero: false,
bgColor: null,
color: null,
shape: "circle",
numberType: "overflow",
offset: [],
inverted: false,
absolute: false
}
};
const Button = {
// button组件
button: {
hairline: false,
type: "info",
size: "normal",
shape: "square",
plain: false,
disabled: false,
loading: false,
loadingText: "",
loadingMode: "spinner",
loadingSize: 15,
openType: "",
formType: "",
appParameter: "",
hoverStopPropagation: true,
lang: "en",
sessionFrom: "",
sendMessageTitle: "",
sendMessagePath: "",
sendMessageImg: "",
showMessageCard: false,
dataName: "",
throttleTime: 0,
hoverStartTime: 0,
hoverStayTime: 200,
text: "",
icon: "",
iconColor: "",
color: ""
}
};
const Calendar = {
// calendar 组件
calendar: {
title: "日期选择",
showTitle: true,
showSubtitle: true,
mode: "single",
startText: "开始",
endText: "结束",
customList: [],
color: "#3c9cff",
minDate: 0,
maxDate: 0,
defaultDate: null,
maxCount: Number.MAX_SAFE_INTEGER,
// Infinity
rowHeight: 56,
formatter: null,
showLunar: false,
showMark: true,
confirmText: "确定",
confirmDisabledText: "确定",
show: false,
closeOnClickOverlay: false,
readonly: false,
showConfirm: true,
maxRange: Number.MAX_SAFE_INTEGER,
// Infinity
rangePrompt: "",
showRangePrompt: true,
allowSameDay: false,
round: 0,
monthNum: 3
}
};
const CarKeyboard = {
// 车牌号键盘
carKeyboard: {
random: false
}
};
const Cell = {
// cell组件的props
cell: {
customClass: "",
title: "",
label: "",
value: "",
icon: "",
disabled: false,
border: true,
center: false,
url: "",
linkType: "navigateTo",
clickable: false,
isLink: false,
required: false,
arrowDirection: "",
iconStyle: {},
rightIconStyle: {},
rightIcon: "arrow-right",
titleStyle: {},
size: "",
stop: true,
name: ""
}
};
const CellGroup = {
// cell-group组件的props
cellGroup: {
title: "",
border: true,
customStyle: {}
}
};
const Checkbox = {
// checkbox组件
checkbox: {
name: "",
shape: "",
size: "",
checkbox: false,
disabled: "",
activeColor: "",
inactiveColor: "",
iconSize: "",
iconColor: "",
label: "",
labelSize: "",
labelColor: "",
labelDisabled: ""
}
};
const CheckboxGroup = {
// checkbox-group组件
checkboxGroup: {
name: "",
value: [],
shape: "square",
disabled: false,
activeColor: "#2979ff",
inactiveColor: "#c8c9cc",
size: 18,
placement: "row",
labelSize: 14,
labelColor: "#303133",
labelDisabled: false,
iconColor: "#ffffff",
iconSize: 12,
iconPlacement: "left",
borderBottom: false
}
};
const CircleProgress = {
// circleProgress 组件
circleProgress: {
percentage: 30
}
};
const Code = {
// code 组件
code: {
seconds: 60,
startText: "获取验证码",
changeText: "X秒重新获取",
endText: "重新获取",
keepRunning: false,
uniqueKey: ""
}
};
const CodeInput = {
// codeInput 组件
codeInput: {
adjustPosition: true,
maxlength: 6,
dot: false,
mode: "box",
hairline: false,
space: 10,
value: "",
focus: false,
bold: false,
color: "#606266",
fontSize: 18,
size: 35,
disabledKeyboard: false,
borderColor: "#c9cacc",
disabledDot: true
}
};
const Col = {
// col 组件
col: {
span: 12,
offset: 0,
justify: "start",
align: "stretch",
textAlign: "left"
}
};
const Collapse = {
// collapse 组件
collapse: {
value: null,
accordion: false,
border: true
}
};
const CollapseItem = {
// collapseItem 组件
collapseItem: {
title: "",
value: "",
label: "",
disabled: false,
isLink: true,
clickable: true,
border: true,
align: "left",
name: "",
icon: "",
duration: 300
}
};
const ColumnNotice = {
// columnNotice 组件
columnNotice: {
text: "",
icon: "volume",
mode: "",
color: "#f9ae3d",
bgColor: "#fdf6ec",
fontSize: 14,
speed: 80,
step: false,
duration: 1500,
disableTouch: true
}
};
const CountDown = {
// u-count-down 计时器组件
countDown: {
time: 0,
format: "HH:mm:ss",
autoStart: true,
millisecond: false
}
};
const CountTo = {
// countTo 组件
countTo: {
startVal: 0,
endVal: 0,
duration: 2e3,
autoplay: true,
decimals: 0,
useEasing: true,
decimal: ".",
color: "#606266",
fontSize: 22,
bold: false,
separator: ""
}
};
const DatetimePicker = {
// datetimePicker 组件
datetimePicker: {
show: false,
popupMode: "bottom",
showToolbar: true,
value: "",
title: "",
mode: "datetime",
maxDate: new Date((/* @__PURE__ */ new Date()).getFullYear() + 10, 0, 1).getTime(),
minDate: new Date((/* @__PURE__ */ new Date()).getFullYear() - 10, 0, 1).getTime(),
minHour: 0,
maxHour: 23,
minMinute: 0,
maxMinute: 59,
filter: null,
formatter: null,
loading: false,
itemHeight: 44,
cancelText: "取消",
confirmText: "确认",
cancelColor: "#909193",
confirmColor: "#3c9cff",
visibleItemCount: 5,
closeOnClickOverlay: false,
defaultIndex: []
}
};
const Divider = {
// divider组件
divider: {
dashed: false,
hairline: true,
dot: false,
textPosition: "center",
text: "",
textSize: 14,
textColor: "#909399",
lineColor: "#dcdfe6"
}
};
const Empty = {
// empty组件
empty: {
icon: "",
text: "",
textColor: "#c0c4cc",
textSize: 14,
iconColor: "#c0c4cc",
iconSize: 90,
mode: "data",
width: 160,
height: 160,
show: true,
marginTop: 0
}
};
const Form = {
// form 组件
form: {
model: {},
rules: {},
errorType: "message",
borderBottom: true,
labelPosition: "left",
labelWidth: 45,
labelAlign: "left",
labelStyle: {}
}
};
const GormItem = {
// formItem 组件
formItem: {
label: "",
prop: "",
rule: "",
borderBottom: "",
labelPosition: "",
labelWidth: "",
rightIcon: "",
leftIcon: "",
required: false,
leftIconStyle: ""
}
};
const Gap = {
// gap组件
gap: {
bgColor: "transparent",
height: 20,
marginTop: 0,
marginBottom: 0,
customStyle: {}
}
};
const Grid = {
// grid组件
grid: {
col: 3,
border: false,
align: "left"
}
};
const GridItem = {
// grid-item组件
gridItem: {
name: null,
bgColor: "transparent"
}
};
const {
color: color$3
} = config$1;
const Icon = {
// icon组件
icon: {
name: "",
color: color$3["u-content-color"],
size: "16px",
bold: false,
index: "",
hoverClass: "",
customPrefix: "uicon",
label: "",
labelPos: "right",
labelSize: "15px",
labelColor: color$3["u-content-color"],
space: "3px",
imgMode: "",
width: "",
height: "",
top: 0,
stop: false
}
};
const Image = {
// image组件
image: {
src: "",
mode: "aspectFill",
width: "300",
height: "225",
shape: "square",
radius: 0,
lazyLoad: true,
showMenuByLongpress: true,
loadingIcon: "photo",
errorIcon: "error-circle",
showLoading: true,
showError: true,
fade: true,
webp: false,
duration: 500,
bgColor: "#f3f4f6"
}
};
const IndexAnchor = {
// indexAnchor 组件
indexAnchor: {
text: "",
color: "#606266",
size: 14,
bgColor: "#dedede",
height: 32
}
};
const IndexList = {
// indexList 组件
indexList: {
inactiveColor: "#606266",
activeColor: "#5677fc",
indexList: [],
sticky: true,
customNavHeight: 0
}
};
const Input = {
// index 组件
input: {
value: "",
type: "text",
fixed: false,
disabled: false,
disabledColor: "#f5f7fa",
clearable: false,
password: false,
maxlength: -1,
placeholder: null,
placeholderClass: "input-placeholder",
placeholderStyle: "color: #c0c4cc",
showWordLimit: false,
confirmType: "done",
confirmHold: false,
holdKeyboard: false,
focus: false,
autoBlur: false,
disableDefaultPadding: false,
cursor: -1,
cursorSpacing: 30,
selectionStart: -1,
selectionEnd: -1,
adjustPosition: true,
inputAlign: "left",
fontSize: "15px",
color: "#303133",
prefixIcon: "",
prefixIconStyle: "",
suffixIcon: "",
suffixIconStyle: "",
border: "surround",
readonly: false,
shape: "square",
formatter: null
}
};
const Keyboard = {
// 键盘组件
keyboard: {
mode: "number",
dotDisabled: false,
tooltip: true,
showTips: true,
tips: "",
showCancel: true,
showConfirm: true,
random: false,
safeAreaInsetBottom: true,
closeOnClickOverlay: true,
show: false,
overlay: true,
zIndex: 10075,
cancelText: "取消",
confirmText: "确定",
autoChange: false
}
};
const Line = {
// line组件
line: {
color: "#d6d7d9",
length: "100%",
direction: "row",
hairline: true,
margin: 0,
dashed: false
}
};
const LineProgress = {
// lineProgress 组件
lineProgress: {
activeColor: "#19be6b",
inactiveColor: "#ececec",
percentage: 0,
showText: true,
height: 12
}
};
const {
color: color$2
} = config$1;
const Link = {
// link超链接组件props参数
link: {
color: color$2["u-primary"],
fontSize: 15,
underLine: false,
href: "",
mpTips: "链接已复制,请在浏览器打开",
lineColor: "",
text: ""
}
};
const List = {
// list 组件
list: {
showScrollbar: false,
lowerThreshold: 50,
upperThreshold: 0,
scrollTop: 0,
offsetAccuracy: 10,
enableFlex: false,
pagingEnabled: false,
scrollable: true,
scrollIntoView: "",
scrollWithAnimation: false,
enableBackToTop: false,
height: 0,
width: 0,
preLoadScreen: 1
}
};
const ListItem = {
// listItem 组件
listItem: {
anchor: ""
}
};
const {
color: color$1
} = config$1;
const LoadingIcon = {
// loading-icon加载中图标组件
loadingIcon: {
show: true,
color: color$1["u-tips-color"],
textColor: color$1["u-tips-color"],
vertical: false,
mode: "spinner",
size: 24,
textSize: 15,
text: "",
timingFunction: "ease-in-out",
duration: 1200,
inactiveColor: ""
}
};
const LoadingPage = {
// loading-page组件
loadingPage: {
loadingText: "正在加载",
image: "",
loadingMode: "circle",
loading: false,
bgColor: "#ffffff",
color: "#C8C8C8",
fontSize: 19,
iconSize: 28,
loadingColor: "#C8C8C8"
}
};
const Loadmore = {
// loadmore 组件
loadmore: {
status: "loadmore",
bgColor: "transparent",
icon: true,
fontSize: 14,
iconSize: 17,
color: "#606266",
loadingIcon: "spinner",
loadmoreText: "加载更多",
loadingText: "正在加载...",
nomoreText: "没有更多了",
isDot: false,
iconColor: "#b7b7b7",
marginTop: 10,
marginBottom: 10,
height: "auto",
line: false,
lineColor: "#E6E8EB",
dashed: false
}
};
const Modal = {
// modal 组件
modal: {
show: false,
title: "",
content: "",
confirmText: "确认",
cancelText: "取消",
showConfirmButton: true,
showCancelButton: false,
confirmColor: "#2979ff",
cancelColor: "#606266",
buttonReverse: false,
zoom: true,
asyncClose: false,
closeOnClickOverlay: false,
negativeTop: 0,
width: "650rpx",
confirmButtonShape: ""
}
};
const color = {
primary: "#3c9cff",
info: "#909399",
default: "#909399",
warning: "#f9ae3d",
error: "#f56c6c",
success: "#5ac725",
mainColor: "#303133",
contentColor: "#606266",
tipsColor: "#909399",
lightColor: "#c0c4cc",
borderColor: "#e4e7ed"
};
const Navbar = {
// navbar 组件
navbar: {
safeAreaInsetTop: true,
placeholder: false,
fixed: true,
border: false,
leftIcon: "arrow-left",
leftText: "",
rightText: "",
rightIcon: "",
title: "",
bgColor: "#ffffff",
titleWidth: "400rpx",
height: "44px",
leftIconSize: 20,
leftIconColor: color.mainColor,
autoBack: false,
titleStyle: ""
}
};
const NoNetwork = {
// noNetwork
noNetwork: {
tips: "哎呀,网络信号丢失",
zIndex: "",
image: "data:image/png;base64,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"
}
};
const NoticeBar = {
// noticeBar
noticeBar: {
text: [],
direction: "row",
step: false,
icon: "volume",
mode: "",
color: "#f9ae3d",
bgColor: "#fdf6ec",
speed: 80,
fontSize: 14,
duration: 2e3,
disableTouch: true,
url: "",
linkType: "navigateTo"
}
};
const Notify = {
// notify组件
notify: {
top: 0,
type: "primary",
color: "#ffffff",
bgColor: "",
message: "",
duration: 3e3,
fontSize: 15,
safeAreaInsetTop: false
}
};
const NumberBox = {
// 步进器组件
numberBox: {
name: "",
value: 0,
min: 1,
max: Number.MAX_SAFE_INTEGER,
step: 1,
integer: false,
disabled: false,
disabledInput: false,
asyncChange: false,
inputWidth: 35,
showMinus: true,
showPlus: true,
decimalLength: null,
longPress: true,
color: "#323233",
buttonSize: 30,
bgColor: "#EBECEE",
cursorSpacing: 100,
disableMinus: false,
disablePlus: false,
iconStyle: ""
}
};
const NumberKeyboard = {
// 数字键盘
numberKeyboard: {
mode: "number",
dotDisabled: false,
random: false
}
};
const Overlay = {
// overlay组件
overlay: {
show: false,
zIndex: 10070,
duration: 300,
opacity: 0.5
}
};
const Parse = {
// parse
parse: {
copyLink: true,
errorImg: "",
lazyLoad: false,
loadingImg: "",
pauseVideo: true,
previewImg: true,
setTitle: true,
showImgMenu: true
}
};
const Picker = {
// picker
picker: {
show: false,
popupMode: "bottom",
showToolbar: true,
title: "",
columns: [],
loading: false,
itemHeight: 44,
cancelText: "取消",
confirmText: "确定",
cancelColor: "#909193",
confirmColor: "#3c9cff",
visibleItemCount: 5,
keyName: "text",
closeOnClickOverlay: false,
defaultIndex: [],
immediateChange: false
}
};
const Popup = {
// popup组件
popup: {
show: false,
overlay: true,
mode: "bottom",
duration: 300,
closeable: false,
overlayStyle: {},
closeOnClickOverlay: true,
zIndex: 10075,
safeAreaInsetBottom: true,
safeAreaInsetTop: false,
closeIconPos: "top-right",
round: 0,
zoom: true,
bgColor: "",
overlayOpacity: 0.5
}
};
const Radio = {
// radio组件
radio: {
name: "",
shape: "",
disabled: "",
labelDisabled: "",
activeColor: "",
inactiveColor: "",
iconSize: "",
labelSize: "",
label: "",
labelColor: "",
size: "",
iconColor: "",
placement: ""
}
};
const RadioGroup = {
// radio-group组件
radioGroup: {
value: "",
disabled: false,
shape: "circle",
activeColor: "#2979ff",
inactiveColor: "#c8c9cc",
name: "",
size: 18,
placement: "row",
label: "",
labelColor: "#303133",
labelSize: 14,
labelDisabled: false,
iconColor: "#ffffff",
iconSize: 12,
borderBottom: false,
iconPlacement: "left"
}
};
const Rate = {
// rate组件
rate: {
value: 1,
count: 5,
disabled: false,
size: 18,
inactiveColor: "#b2b2b2",
activeColor: "#FA3534",
gutter: 4,
minCount: 1,
allowHalf: false,
activeIcon: "star-fill",
inactiveIcon: "star",
touchable: true
}
};
const ReadMore = {
// readMore
readMore: {
showHeight: 400,
toggle: false,
closeText: "展开阅读全文",
openText: "收起",
color: "#2979ff",
fontSize: 14,
textIndent: "2em",
name: ""
}
};
const Row = {
// row
row: {
gutter: 0,
justify: "start",
align: "center"
}
};
const RowNotice = {
// rowNotice
rowNotice: {
text: "",
icon: "volume",
mode: "",
color: "#f9ae3d",
bgColor: "#fdf6ec",
fontSize: 14,
speed: 80
}
};
const ScrollList = {
// scrollList
scrollList: {
indicatorWidth: 50,
indicatorBarWidth: 20,
indicator: true,
indicatorColor: "#f2f2f2",
indicatorActiveColor: "#3c9cff",
indicatorStyle: ""
}
};
const Search = {
// search
search: {
shape: "round",
bgColor: "#f2f2f2",
placeholder: "请输入关键字",
clearabled: true,
focus: false,
showAction: true,
actionStyle: {},
actionText: "搜索",
inputAlign: "left",
inputStyle: {},
disabled: false,
borderColor: "transparent",
searchIconColor: "#909399",
searchIconSize: 22,
color: "#606266",
placeholderColor: "#909399",
searchIcon: "search",
margin: "0",
animation: false,
value: "",
maxlength: "-1",
height: 32,
label: null
}
};
const Section = {
// u-section组件
section: {
title: "",
subTitle: "更多",
right: true,
fontSize: 15,
bold: true,
color: "#303133",
subColor: "#909399",
showLine: true,
lineColor: "",
arrow: true
}
};
const Skeleton = {
// skeleton
skeleton: {
loading: true,
animate: true,
rows: 0,
rowsWidth: "100%",
rowsHeight: 18,
title: true,
titleWidth: "50%",
titleHeight: 18,
avatar: false,
avatarSize: 32,
avatarShape: "circle"
}
};
const Slider = {
// slider组件
slider: {
value: 0,
blockSize: 18,
min: 0,
max: 100,
step: 1,
activeColor: "#2979ff",
inactiveColor: "#c0c4cc",
blockColor: "#ffffff",
showValue: false,
disabled: false,
blockStyle: {}
}
};
const StatusBar = {
// statusBar
statusBar: {
bgColor: "transparent"
}
};
const Steps = {
// steps组件
steps: {
direction: "row",
current: 0,
activeColor: "#3c9cff",
inactiveColor: "#969799",
activeIcon: "",
inactiveIcon: "",
dot: false
}
};
const StepsItem = {
// steps-item组件
stepsItem: {
title: "",
desc: "",
iconSize: 17,
error: false
}
};
const Sticky = {
// sticky组件
sticky: {
offsetTop: 0,
customNavHeight: 0,
disabled: false,
bgColor: "transparent",
zIndex: "",
index: ""
}
};
const Subsection = {
// subsection组件
subsection: {
list: [],
current: 0,
activeColor: "#3c9cff",
inactiveColor: "#303133",
mode: "button",
fontSize: 12,
bold: true,
bgColor: "#eeeeef",
keyName: "name"
}
};
const SwipeAction = {
// swipe-action组件
swipeAction: {
autoClose: true
}
};
const SwipeActionItem = {
// swipeActionItem 组件
swipeActionItem: {
show: false,
name: "",
disabled: false,
threshold: 20,
autoClose: true,
options: [],
duration: 300
}
};
const Swiper = {
// swiper 组件
swiper: {
list: [],
indicator: false,
indicatorActiveColor: "#FFFFFF",
indicatorInactiveColor: "rgba(255, 255, 255, 0.35)",
indicatorStyle: "",
indicatorMode: "line",
autoplay: true,
current: 0,
currentItemId: "",
interval: 3e3,
duration: 300,
circular: false,
previousMargin: 0,
nextMargin: 0,
acceleration: false,
displayMultipleItems: 1,
easingFunction: "default",
keyName: "url",
imgMode: "aspectFill",
height: 130,
bgColor: "#f3f4f6",
radius: 4,
loading: false,
showTitle: false
}
};
const SwipterIndicator = {
// swiperIndicator 组件
swiperIndicator: {
length: 0,
current: 0,
indicatorActiveColor: "",
indicatorInactiveColor: "",
indicatorMode: "line"
}
};
const Switch = {
// switch
switch: {
loading: false,
disabled: false,
size: 25,
activeColor: "#2979ff",
inactiveColor: "#ffffff",
value: false,
activeValue: true,
inactiveValue: false,
asyncChange: false,
space: 0
}
};
const Tabbar = {
// tabbar
tabbar: {
value: null,
safeAreaInsetBottom: true,
border: true,
zIndex: 1,
activeColor: "#1989fa",
inactiveColor: "#7d7e80",
fixed: true,
placeholder: true
}
};
const TabbarItem = {
//
tabbarItem: {
name: null,
icon: "",
badge: null,
dot: false,
text: "",
badgeStyle: "top: 6px;right:2px;"
}
};
const Tabs = {
//
tabs: {
duration: 300,
list: [],
lineColor: "#3c9cff",
activeStyle: {
color: "#303133"
},
inactiveStyle: {
color: "#606266"
},
lineWidth: 20,
lineHeight: 3,
lineBgSize: "cover",
itemStyle: {
height: "44px"
},
scrollable: true,
current: 0,
keyName: "name"
}
};
const Tag = {
// tag 组件
tag: {
type: "primary",
disabled: false,
size: "medium",
shape: "square",
text: "",
bgColor: "",
color: "",
borderColor: "",
closeColor: "#C6C7CB",
name: "",
plainFill: false,
plain: false,
closable: false,
show: true,
icon: "",
iconColor: ""
}
};
const Text = {
// text 组件
text: {
type: "",
show: true,
text: "",
prefixIcon: "",
suffixIcon: "",
mode: "",
href: "",
format: "",
call: false,
openType: "",
bold: false,
block: false,
lines: "",
color: "#303133",
size: 15,
iconStyle: {
fontSize: "15px"
},
decoration: "none",
margin: 0,
lineHeight: "",
align: "left",
wordWrap: "normal"
}
};
const Textarea = {
// textarea 组件
textarea: {
value: "",
placeholder: "",
placeholderClass: "textarea-placeholder",
placeholderStyle: "color: #c0c4cc",
height: 70,
confirmType: "done",
disabled: false,
count: false,
focus: false,
autoHeight: false,
fixed: false,
cursorSpacing: 0,
cursor: "",
showConfirmBar: true,
selectionStart: -1,
selectionEnd: -1,
adjustPosition: true,
disableDefaultPadding: false,
holdKeyboard: false,
maxlength: 140,
border: "surround",
formatter: null
}
};
const Toast = {
// toast组件
toast: {
zIndex: 10090,
loading: false,
text: "",
icon: "",
type: "",
loadingMode: "",
show: "",
overlay: false,
position: "center",
params: {},
duration: 2e3,
isTab: false,
url: "",
callback: null,
back: false
}
};
const Toolbar = {
// toolbar 组件
toolbar: {
show: true,
cancelText: "取消",
confirmText: "确认",
cancelColor: "#909193",
confirmColor: "#3c9cff",
title: ""
}
};
const Tooltip = {
// tooltip 组件
tooltip: {
text: "",
copyText: "",
size: 14,
color: "#606266",
bgColor: "transparent",
direction: "top",
zIndex: 10071,
showCopy: true,
buttons: [],
overlay: true,
showToast: true
}
};
const Transition = {
// transition动画组件的props
transition: {
show: false,
mode: "fade",
duration: "300",
timingFunction: "ease-out"
}
};
const Upload = {
// upload组件
upload: {
accept: "image",
capture: ["album", "camera"],
compressed: true,
camera: "back",
maxDuration: 60,
uploadIcon: "camera-fill",
uploadIconColor: "#D3D4D6",
useBeforeRead: false,
previewFullImage: true,
maxCount: 52,
disabled: false,
imageMode: "aspectFill",
name: "",
sizeType: ["original", "compressed"],
multiple: false,
deletable: true,
maxSize: Number.MAX_VALUE,
fileList: [],
uploadText: "",
width: 80,
height: 80,
previewImage: true
}
};
const props$c = {
...ActionSheet,
...Album,
...Alert,
...Avatar,
...AvatarGroup,
...Backtop,
...Badge,
...Button,
...Calendar,
...CarKeyboard,
...Cell,
...CellGroup,
...Checkbox,
...CheckboxGroup,
...CircleProgress,
...Code,
...CodeInput,
...Col,
...Collapse,
...CollapseItem,
...ColumnNotice,
...CountDown,
...CountTo,
...DatetimePicker,
...Divider,
...Empty,
...Form,
...GormItem,
...Gap,
...Grid,
...GridItem,
...Icon,
...Image,
...IndexAnchor,
...IndexList,
...Input,
...Keyboard,
...Line,
...LineProgress,
...Link,
...List,
...ListItem,
...LoadingIcon,
...LoadingPage,
...Loadmore,
...Modal,
...Navbar,
...NoNetwork,
...NoticeBar,
...Notify,
...NumberBox,
...NumberKeyboard,
...Overlay,
...Parse,
...Picker,
...Popup,
...Radio,
...RadioGroup,
...Rate,
...ReadMore,
...Row,
...RowNotice,
...ScrollList,
...Search,
...Section,
...Skeleton,
...Slider,
...StatusBar,
...Steps,
...StepsItem,
...Sticky,
...Subsection,
...SwipeAction,
...SwipeActionItem,
...Swiper,
...SwipterIndicator,
...Switch,
...Tabbar,
...TabbarItem,
...Tabs,
...Tag,
...Text,
...Textarea,
...Toast,
...Toolbar,
...Tooltip,
...Transition,
...Upload
};
const props$b = {
props: {
// 图标类名
name: {
type: String,
default: () => props$c.icon.name
},
// 图标颜色,可接受主题色
color: {
type: String,
default: () => props$c.icon.color
},
// 字体大小,单位px
size: {
type: [String, Number],
default: () => props$c.icon.size
},
// 是否显示粗体
bold: {
type: Boolean,
default: () => props$c.icon.bold
},
// 点击图标的时候传递事件出去的index(用于区分点击了哪一个)
index: {
type: [String, Number],
default: () => props$c.icon.index
},
// 触摸图标时的类名
hoverClass: {
type: String,
default: () => props$c.icon.hoverClass
},
// 自定义扩展前缀,方便用户扩展自己的图标库
customPrefix: {
type: String,
default: () => props$c.icon.customPrefix
},
// 图标右边或者下面的文字
label: {
type: [String, Number],
default: () => props$c.icon.label
},
// label的位置,只能右边或者下边
labelPos: {
type: String,
default: () => props$c.icon.labelPos
},
// label的大小
labelSize: {
type: [String, Number],
default: () => props$c.icon.labelSize
},
// label的颜色
labelColor: {
type: String,
default: () => props$c.icon.labelColor
},
// label与图标的距离
space: {
type: [String, Number],
default: () => props$c.icon.space
},
// 图片的mode
imgMode: {
type: String,
default: () => props$c.icon.imgMode
},
// 用于显示图片小图标时,图片的宽度
width: {
type: [String, Number],
default: () => props$c.icon.width
},
// 用于显示图片小图标时,图片的高度
height: {
type: [String, Number],
default: () => props$c.icon.height
},
// 用于解决某些情况下,让图标垂直居中的用途
top: {
type: [String, Number],
default: () => props$c.icon.top
},
// 是否阻止事件传播
stop: {
type: Boolean,
default: () => props$c.icon.stop
}
}
};
const mpMixin = {};
function email(value2) {
return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(value2);
}
function mobile(value2) {
return /^1[23456789]\d{9}$/.test(value2);
}
function url(value2) {
return /^((https|http|ftp|rtsp|mms):\/\/)(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z].[a-zA-Z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\/?)$/.test(value2);
}
function date(value2) {
if (!value2)
return false;
if (number(value2))
value2 = +value2;
return !/Invalid|NaN/.test(new Date(value2).toString());
}
function dateISO(value2) {
return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value2);
}
function number(value2) {
return /^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(value2);
}
function string(value2) {
return typeof value2 === "string";
}
function digits(value2) {
return /^\d+$/.test(value2);
}
function idCard(value2) {
return /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(
value2
);
}
function carNo(value2) {
const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;
if (value2.length === 7) {
return creg.test(value2);
}
if (value2.length === 8) {
return xreg.test(value2);
}
return false;
}
function amount(value2) {
return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value2);
}
function chinese(value2) {
const reg = /^[\u4e00-\u9fa5]+$/gi;
return reg.test(value2);
}
function letter(value2) {
return /^[a-zA-Z]*$/.test(value2);
}
function enOrNum(value2) {
const reg = /^[0-9a-zA-Z]*$/g;
return reg.test(value2);
}
function contains(value2, param) {
return value2.indexOf(param) >= 0;
}
function range$1(value2, param) {
return value2 >= param[0] && value2 <= param[1];
}
function rangeLength(value2, param) {
return value2.length >= param[0] && value2.length <= param[1];
}
function landline(value2) {
const reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/;
return reg.test(value2);
}
function empty(value2) {
switch (typeof value2) {
case "undefined":
return true;
case "string":
if (value2.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, "").length == 0)
return true;
break;
case "boolean":
if (!value2)
return true;
break;
case "number":
if (value2 === 0 || isNaN(value2))
return true;
break;
case "object":
if (value2 === null || value2.length === 0)
return true;
for (const i in value2) {
return false;
}
return true;
}
return false;
}
function jsonString(value2) {
if (typeof value2 === "string") {
try {
const obj = JSON.parse(value2);
if (typeof obj === "object" && obj) {
return true;
}
return false;
} catch (e) {
return false;
}
}
return false;
}
function array(value2) {
if (typeof Array.isArray === "function") {
return Array.isArray(value2);
}
return Object.prototype.toString.call(value2) === "[object Array]";
}
function object(value2) {
return Object.prototype.toString.call(value2) === "[object Object]";
}
function code(value2, len = 6) {
return new RegExp(`^\\d{${len}}$`).test(value2);
}
function func(value2) {
return typeof value2 === "function";
}
function promise(value2) {
return object(value2) && func(value2.then) && func(value2.catch);
}
function image(value2) {
const newValue = value2.split("?")[0];
const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i;
return IMAGE_REGEXP.test(newValue);
}
function video(value2) {
const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|m3u8)/i;
return VIDEO_REGEXP.test(value2);
}
function regExp(o) {
return o && Object.prototype.toString.call(o) === "[object RegExp]";
}
const test = {
email,
mobile,
url,
date,
dateISO,
number,
digits,
idCard,
carNo,
amount,
chinese,
letter,
enOrNum,
contains,
range: range$1,
rangeLength,
empty,
isEmpty: empty,
jsonString,
landline,
object,
array,
code,
func,
promise,
video,
image,
regExp,
string
};
function strip(num, precision = 15) {
return +parseFloat(Number(num).toPrecision(precision));
}
function digitLength(num) {
const eSplit = num.toString().split(/[eE]/);
const len = (eSplit[0].split(".")[1] || "").length - +(eSplit[1] || 0);
return len > 0 ? len : 0;
}
function float2Fixed(num) {
if (num.toString().indexOf("e") === -1) {
return Number(num.toString().replace(".", ""));
}
const dLen = digitLength(num);
return dLen > 0 ? strip(Number(num) * Math.pow(10, dLen)) : Number(num);
}
function checkBoundary(num) {
{
if (num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) {
formatAppLog("warn", "at uni_modules/uview-plus/libs/function/digit.js:45", `${num} 超出了精度限制,结果可能不正确`);
}
}
}
function iteratorOperation(arr, operation) {
const [num1, num2, ...others] = arr;
let res = operation(num1, num2);
others.forEach((num) => {
res = operation(res, num);
});
return res;
}
function times(...nums) {
if (nums.length > 2) {
return iteratorOperation(nums, times);
}
const [num1, num2] = nums;
const num1Changed = float2Fixed(num1);
const num2Changed = float2Fixed(num2);
const baseNum = digitLength(num1) + digitLength(num2);
const leftValue = num1Changed * num2Changed;
checkBoundary(leftValue);
return leftValue / Math.pow(10, baseNum);
}
function divide(...nums) {
if (nums.length > 2) {
return iteratorOperation(nums, divide);
}
const [num1, num2] = nums;
const num1Changed = float2Fixed(num1);
const num2Changed = float2Fixed(num2);
checkBoundary(num1Changed);
checkBoundary(num2Changed);
return times(num1Changed / num2Changed, strip(Math.pow(10, digitLength(num2) - digitLength(num1))));
}
function round(num, ratio) {
const base = Math.pow(10, ratio);
let result = divide(Math.round(Math.abs(times(num, base))), base);
if (num < 0 && result !== 0) {
result = times(result, -1);
}
return result;
}
function range(min = 0, max = 0, value2 = 0) {
return Math.max(min, Math.min(max, Number(value2)));
}
function getPx(value2, unit = false) {
if (number(value2)) {
return unit ? `${value2}px` : Number(value2);
}
if (/(rpx|upx)$/.test(value2)) {
return unit ? `${uni.rpx2px(parseInt(value2))}px` : Number(uni.rpx2px(parseInt(value2)));
}
return unit ? `${parseInt(value2)}px` : parseInt(value2);
}
function sleep(value2 = 30) {
return new Promise((resolve) => {
setTimeout(() => {
resolve();
}, value2);
});
}
function os() {
return uni.getSystemInfoSync().platform.toLowerCase();
}
function sys() {
return uni.getSystemInfoSync();
}
function random(min, max) {
if (min >= 0 && max > 0 && max >= min) {
const gab = max - min + 1;
return Math.floor(Math.random() * gab + min);
}
return 0;
}
function guid(len = 32, firstU = true, radix = null) {
const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");
const uuid = [];
radix = radix || chars.length;
if (len) {
for (let i = 0; i < len; i++)
uuid[i] = chars[0 | Math.random() * radix];
} else {
let r;
uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-";
uuid[14] = "4";
for (let i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16;
uuid[i] = chars[i == 19 ? r & 3 | 8 : r];
}
}
}
if (firstU) {
uuid.shift();
return `u${uuid.join("")}`;
}
return uuid.join("");
}
function $parent(name = void 0) {
let parent = this.$parent;
while (parent) {
if (parent.$options && parent.$options.name !== name) {
parent = parent.$parent;
} else {
return parent;
}
}
return false;
}
function addStyle(customStyle, target = "object") {
if (empty(customStyle) || typeof customStyle === "object" && target === "object" || target === "string" && typeof customStyle === "string") {
return customStyle;
}
if (target === "object") {
customStyle = trim(customStyle);
const styleArray = customStyle.split(";");
const style = {};
for (let i = 0; i < styleArray.length; i++) {
if (styleArray[i]) {
const item = styleArray[i].split(":");
style[trim(item[0])] = trim(item[1]);
}
}
return style;
}
let string2 = "";
if (typeof customStyle === "object") {
customStyle.forEach((val, i) => {
const key = i.replace(/([A-Z])/g, "-$1").toLowerCase();
string2 += `${key}:${val};`;
});
}
return trim(string2);
}
function addUnit(value2 = "auto", unit = "") {
if (!unit) {
unit = config$1.unit || "px";
}
value2 = String(value2);
return number(value2) ? `${value2}${unit}` : value2;
}
function deepClone(obj) {
if ([null, void 0, NaN, false].includes(obj))
return obj;
if (typeof obj !== "object" && typeof obj !== "function") {
return obj;
}
const o = array(obj) ? [] : {};
for (const i in obj) {
if (obj.hasOwnProperty(i)) {
o[i] = typeof obj[i] === "object" ? deepClone(obj[i]) : obj[i];
}
}
return o;
}
function deepMerge$1(targetOrigin = {}, source = {}) {
let target = deepClone(targetOrigin);
if (typeof target !== "object" || typeof source !== "object")
return false;
for (const prop in source) {
if (!source.hasOwnProperty(prop))
continue;
if (prop in target) {
if (source[prop] == null) {
target[prop] = source[prop];
} else if (typeof target[prop] !== "object") {
target[prop] = source[prop];
} else if (typeof source[prop] !== "object") {
target[prop] = source[prop];
} else if (target[prop].concat && source[prop].concat) {
target[prop] = target[prop].concat(source[prop]);
} else {
target[prop] = deepMerge$1(target[prop], source[prop]);
}
} else {
target[prop] = source[prop];
}
}
return target;
}
function shallowMerge(target, source = {}) {
if (typeof target !== "object" || typeof source !== "object")
return false;
for (const prop in source) {
if (!source.hasOwnProperty(prop))
continue;
if (prop in target) {
if (source[prop] == null) {
target[prop] = source[prop];
} else if (typeof target[prop] !== "object") {
target[prop] = source[prop];
} else if (typeof source[prop] !== "object") {
target[prop] = source[prop];
} else if (target[prop].concat && source[prop].concat) {
target[prop] = target[prop].concat(source[prop]);
} else {
target[prop] = shallowMerge(target[prop], source[prop]);
}
} else {
target[prop] = source[prop];
}
}
return target;
}
function error(err) {
{
formatAppLog("error", "at uni_modules/uview-plus/libs/function/index.js:275", `uView提示:${err}`);
}
}
function randomArray(array2 = []) {
return array2.sort(() => Math.random() - 0.5);
}
if (!String.prototype.padStart) {
String.prototype.padStart = function(maxLength, fillString = " ") {
if (Object.prototype.toString.call(fillString) !== "[object String]") {
throw new TypeError(
"fillString must be String"
);
}
const str = this;
if (str.length >= maxLength)
return String(str);
const fillLength = maxLength - str.length;
let times2 = Math.ceil(fillLength / fillString.length);
while (times2 >>= 1) {
fillString += fillString;
if (times2 === 1) {
fillString += fillString;
}
}
return fillString.slice(0, fillLength) + str;
};
}
function timeFormat(dateTime = null, formatStr = "yyyy-mm-dd") {
let date2;
if (!dateTime) {
date2 = /* @__PURE__ */ new Date();
} else if (/^\d{10}$/.test(dateTime.toString().trim())) {
date2 = new Date(dateTime * 1e3);
} else if (typeof dateTime === "string" && /^\d+$/.test(dateTime.trim())) {
date2 = new Date(Number(dateTime));
} else {
date2 = new Date(
typeof dateTime === "string" ? dateTime.replace(/-/g, "/") : dateTime
);
}
const timeSource = {
"y": date2.getFullYear().toString(),
// 年
"m": (date2.getMonth() + 1).toString().padStart(2, "0"),
// 月
"d": date2.getDate().toString().padStart(2, "0"),
// 日
"h": date2.getHours().toString().padStart(2, "0"),
// 时
"M": date2.getMinutes().toString().padStart(2, "0"),
// 分
"s": date2.getSeconds().toString().padStart(2, "0")
// 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
};
for (const key in timeSource) {
const [ret] = new RegExp(`${key}+`).exec(formatStr) || [];
if (ret) {
const beginIndex = key === "y" && ret.length === 2 ? 2 : 0;
formatStr = formatStr.replace(ret, timeSource[key].slice(beginIndex));
}
}
return formatStr;
}
function timeFrom(timestamp = null, format = "yyyy-mm-dd") {
if (timestamp == null)
timestamp = Number(/* @__PURE__ */ new Date());
timestamp = parseInt(timestamp);
if (timestamp.toString().length == 10)
timestamp *= 1e3;
let timer = (/* @__PURE__ */ new Date()).getTime() - timestamp;
timer = parseInt(timer / 1e3);
let tips = "";
switch (true) {
case timer < 300:
tips = "刚刚";
break;
case (timer >= 300 && timer < 3600):
tips = `${parseInt(timer / 60)}分钟前`;
break;
case (timer >= 3600 && timer < 86400):
tips = `${parseInt(timer / 3600)}小时前`;
break;
case (timer >= 86400 && timer < 2592e3):
tips = `${parseInt(timer / 86400)}天前`;
break;
default:
if (format === false) {
if (timer >= 2592e3 && timer < 365 * 86400) {
tips = `${parseInt(timer / (86400 * 30))}个月前`;
} else {
tips = `${parseInt(timer / (86400 * 365))}年前`;
}
} else {
tips = timeFormat(timestamp, format);
}
}
return tips;
}
function trim(str, pos = "both") {
str = String(str);
if (pos == "both") {
return str.replace(/^\s+|\s+$/g, "");
}
if (pos == "left") {
return str.replace(/^\s*/, "");
}
if (pos == "right") {
return str.replace(/(\s*$)/g, "");
}
if (pos == "all") {
return str.replace(/\s+/g, "");
}
return str;
}
function queryParams(data = {}, isPrefix = true, arrayFormat = "brackets") {
const prefix = isPrefix ? "?" : "";
const _result = [];
if (["indices", "brackets", "repeat", "comma"].indexOf(arrayFormat) == -1)
arrayFormat = "brackets";
for (const key in data) {
const value2 = data[key];
if (["", void 0, null].indexOf(value2) >= 0) {
continue;
}
if (value2.constructor === Array) {
switch (arrayFormat) {
case "indices":
for (let i = 0; i < value2.length; i++) {
_result.push(`${key}[${i}]=${value2[i]}`);
}
break;
case "brackets":
value2.forEach((_value) => {
_result.push(`${key}[]=${_value}`);
});
break;
case "repeat":
value2.forEach((_value) => {
_result.push(`${key}=${_value}`);
});
break;
case "comma":
let commaStr = "";
value2.forEach((_value) => {
commaStr += (commaStr ? "," : "") + _value;
});
_result.push(`${key}=${commaStr}`);
break;
default:
value2.forEach((_value) => {
_result.push(`${key}[]=${_value}`);
});
}
} else {
_result.push(`${key}=${value2}`);
}
}
return _result.length ? prefix + _result.join("&") : "";
}
function toast(title, duration = 2e3) {
uni.showToast({
title: String(title),
icon: "none",
duration
});
}
function type2icon(type = "success", fill = false) {
if (["primary", "info", "error", "warning", "success"].indexOf(type) == -1)
type = "success";
let iconName = "";
switch (type) {
case "primary":
iconName = "info-circle";
break;
case "info":
iconName = "info-circle";
break;
case "error":
iconName = "close-circle";
break;
case "warning":
iconName = "error-circle";
break;
case "success":
iconName = "checkmark-circle";
break;
default:
iconName = "checkmark-circle";
}
if (fill)
iconName += "-fill";
return iconName;
}
function priceFormat(number2, decimals = 0, decimalPoint = ".", thousandsSeparator = ",") {
number2 = `${number2}`.replace(/[^0-9+-Ee.]/g, "");
const n = !isFinite(+number2) ? 0 : +number2;
const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals);
const sep = typeof thousandsSeparator === "undefined" ? "," : thousandsSeparator;
const dec = typeof decimalPoint === "undefined" ? "." : decimalPoint;
let s = "";
s = (prec ? round(n, prec) + "" : `${Math.round(n)}`).split(".");
const re = /(-?\d+)(\d{3})/;
while (re.test(s[0])) {
s[0] = s[0].replace(re, `$1${sep}$2`);
}
if ((s[1] || "").length < prec) {
s[1] = s[1] || "";
s[1] += new Array(prec - s[1].length + 1).join("0");
}
return s.join(dec);
}
function getDuration(value2, unit = true) {
const valueNum = parseInt(value2);
if (unit) {
if (/s$/.test(value2))
return value2;
return value2 > 30 ? `${value2}ms` : `${value2}s`;
}
if (/ms$/.test(value2))
return valueNum;
if (/s$/.test(value2))
return valueNum > 30 ? valueNum : valueNum * 1e3;
return valueNum;
}
function padZero(value2) {
return `00${value2}`.slice(-2);
}
function formValidate(instance, event) {
const formItem = $parent.call(instance, "u-form-item");
const form = $parent.call(instance, "u-form");
if (formItem && form) {
form.validateField(formItem.prop, () => {
}, event);
}
}
function getProperty(obj, key) {
if (typeof obj !== "object" || null == obj) {
return "";
}
if (typeof key !== "string" || key === "") {
return "";
}
if (key.indexOf(".") !== -1) {
const keys = key.split(".");
let firstObj = obj[keys[0]] || {};
for (let i = 1; i < keys.length; i++) {
if (firstObj) {
firstObj = firstObj[keys[i]];
}
}
return firstObj;
}
return obj[key];
}
function setProperty(obj, key, value2) {
if (typeof obj !== "object" || null == obj) {
return;
}
const inFn = function(_obj, keys, v) {
if (keys.length === 1) {
_obj[keys[0]] = v;
return;
}
while (keys.length > 1) {
const k = keys[0];
if (!_obj[k] || typeof _obj[k] !== "object") {
_obj[k] = {};
}
keys.shift();
inFn(_obj[k], keys, v);
}
};
if (typeof key !== "string" || key === "")
;
else if (key.indexOf(".") !== -1) {
const keys = key.split(".");
inFn(obj, keys, value2);
} else {
obj[key] = value2;
}
}
function page() {
const pages2 = getCurrentPages();
return `/${pages2[pages2.length - 1].route || ""}`;
}
function pages() {
const pages2 = getCurrentPages();
return pages2;
}
const index = {
range,
getPx,
sleep,
os,
sys,
random,
guid,
$parent,
addStyle,
addUnit,
deepClone,
deepMerge: deepMerge$1,
shallowMerge,
error,
randomArray,
timeFormat,
timeFrom,
trim,
queryParams,
toast,
type2icon,
priceFormat,
getDuration,
padZero,
formValidate,
getProperty,
setProperty,
page,
pages
// setConfig
};
class Router {
constructor() {
this.config = {
type: "navigateTo",
url: "",
delta: 1,
// navigateBack页面后退时,回退的层数
params: {},
// 传递的参数
animationType: "pop-in",
// 窗口动画,只在APP有效
animationDuration: 300,
// 窗口动画持续时间,单位毫秒,只在APP有效
intercept: false
// 是否需要拦截
};
this.route = this.route.bind(this);
}
// 判断url前面是否有"/",如果没有则加上,否则无法跳转
addRootPath(url2) {
return url2[0] === "/" ? url2 : `/${url2}`;
}
// 整合路由参数
mixinParam(url2, params) {
url2 = url2 && this.addRootPath(url2);
let query = "";
if (/.*\/.*\?.*=.*/.test(url2)) {
query = queryParams(params, false);
return url2 += `&${query}`;
}
query = queryParams(params);
return url2 += query;
}
// 对外的方法名称
async route(options = {}, params = {}) {
let mergeConfig2 = {};
if (typeof options === "string") {
mergeConfig2.url = this.mixinParam(options, params);
mergeConfig2.type = "navigateTo";
} else {
mergeConfig2 = deepMerge$1(this.config, options);
mergeConfig2.url = this.mixinParam(options.url, options.params);
}
if (mergeConfig2.url === page())
return;
if (params.intercept) {
this.config.intercept = params.intercept;
}
mergeConfig2.params = params;
mergeConfig2 = deepMerge$1(this.config, mergeConfig2);
if (typeof uni.$u.routeIntercept === "function") {
const isNext = await new Promise((resolve, reject) => {
uni.$u.routeIntercept(mergeConfig2, resolve);
});
isNext && this.openPage(mergeConfig2);
} else {
this.openPage(mergeConfig2);
}
}
// 执行路由跳转
openPage(config2) {
const {
url: url2,
type,
delta,
animationType,
animationDuration
} = config2;
if (config2.type == "navigateTo" || config2.type == "to") {
uni.navigateTo({
url: url2,
animationType,
animationDuration
});
}
if (config2.type == "redirectTo" || config2.type == "redirect") {
uni.redirectTo({
url: url2
});
}
if (config2.type == "switchTab" || config2.type == "tab") {
uni.switchTab({
url: url2
});
}
if (config2.type == "reLaunch" || config2.type == "launch") {
uni.reLaunch({
url: url2
});
}
if (config2.type == "navigateBack" || config2.type == "back") {
uni.navigateBack({
delta
});
}
}
}
const route = new Router().route;
const mixin$1 = {
// 定义每个组件都可能需要用到的外部样式以及类名
props: {
// 每个组件都有的父组件传递的样式,可以为字符串或者对象形式
customStyle: {
type: [Object, String],
default: () => ({})
},
customClass: {
type: String,
default: ""
},
// 跳转的页面路径
url: {
type: String,
default: ""
},
// 页面跳转的类型
linkType: {
type: String,
default: "navigateTo"
}
},
data() {
return {};
},
onLoad() {
this.$u.getRect = this.$uGetRect;
},
created() {
this.$u.getRect = this.$uGetRect;
},
computed: {
// 在2.x版本中,将会把$u挂载到uni对象下,导致在模板中无法使用uni.$u.xxx形式
// 所以这里通过computed计算属性将其附加到this.$u上,就可以在模板或者js中使用uni.$u.xxx
// 只在nvue环境通过此方式引入完整的$u,其他平台会出现性能问题,非nvue则按需引入(主要原因是props过大)
$u() {
return deepMerge$1(uni.$u, {
props: void 0,
http: void 0,
mixin: void 0
});
},
/**
* 生成bem规则类名
* 由于微信小程序,H5,nvue之间绑定class的差异,无法通过:class="[bem()]"的形式进行同用
* 故采用如下折中做法,最后返回的是数组(一般平台)或字符串(支付宝和字节跳动平台),类似['a', 'b', 'c']或'a b c'的形式
* @param {String} name 组件名称
* @param {Array} fixed 一直会存在的类名
* @param {Array} change 会根据变量值为true或者false而出现或者隐藏的类名
* @returns {Array|string}
*/
bem() {
return function(name, fixed, change) {
const prefix = `u-${name}--`;
const classes = {};
if (fixed) {
fixed.map((item) => {
classes[prefix + this[item]] = true;
});
}
if (change) {
change.map((item) => {
this[item] ? classes[prefix + item] = this[item] : delete classes[prefix + item];
});
}
return Object.keys(classes);
};
}
},
methods: {
// 跳转某一个页面
openPage(urlKey = "url") {
const url2 = this[urlKey];
if (url2) {
route({ type: this.linkType, url: url2 });
}
},
// 查询节点信息
// 目前此方法在支付宝小程序中无法获取组件跟接点的尺寸,为支付宝的bug(2020-07-21)
// 解决办法为在组件根部再套一个没有任何作用的view元素
$uGetRect(selector, all) {
return new Promise((resolve) => {
uni.createSelectorQuery().in(this)[all ? "selectAll" : "select"](selector).boundingClientRect((rect) => {
if (all && Array.isArray(rect) && rect.length) {
resolve(rect);
}
if (!all && rect) {
resolve(rect);
}
}).exec();
});
},
getParentData(parentName = "") {
if (!this.parent)
this.parent = {};
this.parent = $parent.call(this, parentName);
if (this.parent.children) {
this.parent.children.indexOf(this) === -1 && this.parent.children.push(this);
}
if (this.parent && this.parentData) {
Object.keys(this.parentData).map((key) => {
this.parentData[key] = this.parent[key];
});
}
},
// 阻止事件冒泡
preventEvent(e) {
e && typeof e.stopPropagation === "function" && e.stopPropagation();
},
// 空操作
noop(e) {
this.preventEvent(e);
}
},
onReachBottom() {
uni.$emit("uOnReachBottom");
},
beforeUnmount() {
if (this.parent && test.array(this.parent.children)) {
const childrenList = this.parent.children;
childrenList.map((child, index2) => {
if (child === this) {
childrenList.splice(index2, 1);
}
});
}
}
};
const _export_sfc = (sfc, props2) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props2) {
target[key] = val;
}
return target;
};
const _sfc_main$i = {
name: "u-icon",
data() {
return {};
},
emits: ["click"],
mixins: [mpMixin, mixin$1, props$b],
computed: {
uClasses() {
let classes = [];
classes.push(this.customPrefix + "-" + this.name);
if (this.customPrefix == "uicon") {
classes.push("u-iconfont");
} else {
classes.push(this.customPrefix);
}
if (this.color && config$1.type.includes(this.color))
classes.push("u-icon__icon--" + this.color);
return classes;
},
iconStyle() {
let style = {};
style = {
fontSize: addUnit(this.size),
lineHeight: addUnit(this.size),
fontWeight: this.bold ? "bold" : "normal",
// 某些特殊情况需要设置一个到顶部的距离,才能更好的垂直居中
top: addUnit(this.top)
};
if (this.color && !config$1.type.includes(this.color))
style.color = this.color;
return style;
},
// 判断传入的name属性,是否图片路径,只要带有"/"均认为是图片形式
isImg() {
return this.name.indexOf("/") !== -1;
},
imgStyle() {
let style = {};
style.width = this.width ? addUnit(this.width) : addUnit(this.size);
style.height = this.height ? addUnit(this.height) : addUnit(this.size);
return style;
},
// 通过图标名,查找对应的图标
icon() {
if (this.customPrefix !== "uicon")
return "";
return icons["uicon-" + this.name] || this.name;
}
},
methods: {
addStyle,
addUnit,
clickHandler(e) {
this.$emit("click", this.index);
this.stop && this.preventEvent(e);
}
}
};
function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock(
"view",
{
class: vue.normalizeClass(["u-icon", ["u-icon--" + _ctx.labelPos]]),
onClick: _cache[0] || (_cache[0] = (...args) => $options.clickHandler && $options.clickHandler(...args))
},
[
$options.isImg ? (vue.openBlock(), vue.createElementBlock("image", {
key: 0,
class: "u-icon__img",
src: _ctx.name,
mode: _ctx.imgMode,
style: vue.normalizeStyle([$options.imgStyle, $options.addStyle(_ctx.customStyle)])
}, null, 12, ["src", "mode"])) : (vue.openBlock(), vue.createElementBlock("text", {
key: 1,
class: vue.normalizeClass(["u-icon__icon", $options.uClasses]),
style: vue.normalizeStyle([$options.iconStyle, $options.addStyle(_ctx.customStyle)]),
"hover-class": _ctx.hoverClass
}, vue.toDisplayString($options.icon), 15, ["hover-class"])),
vue.createCommentVNode(' 这里进行空字符串判断,如果仅仅是v-if="label",可能会出现传递0的时候,结果也无法显示 '),
_ctx.label !== "" ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 2,
class: "u-icon__label",
style: vue.normalizeStyle({
color: _ctx.labelColor,
fontSize: $options.addUnit(_ctx.labelSize),
marginLeft: _ctx.labelPos == "right" ? $options.addUnit(_ctx.space) : 0,
marginTop: _ctx.labelPos == "bottom" ? $options.addUnit(_ctx.space) : 0,
marginRight: _ctx.labelPos == "left" ? $options.addUnit(_ctx.space) : 0,
marginBottom: _ctx.labelPos == "top" ? $options.addUnit(_ctx.space) : 0
})
},
vue.toDisplayString(_ctx.label),
5
/* TEXT, STYLE */
)) : vue.createCommentVNode("v-if", true)
],
2
/* CLASS */
);
}
const __easycom_2 = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["render", _sfc_render$h], ["__scopeId", "data-v-ac70166d"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-icon/u-icon.vue"]]);
const props$a = {
props: {
// 是否展示组件
show: {
type: Boolean,
default: () => props$c.transition.show
},
// 使用的动画模式
mode: {
type: String,
default: () => props$c.transition.mode
},
// 动画的执行时间,单位ms
duration: {
type: [String, Number],
default: () => props$c.transition.duration
},
// 使用的动画过渡函数
timingFunction: {
type: String,
default: () => props$c.transition.timingFunction
}
}
};
const getClassNames = (name) => ({
enter: `u-${name}-enter u-${name}-enter-active`,
"enter-to": `u-${name}-enter-to u-${name}-enter-active`,
leave: `u-${name}-leave u-${name}-leave-active`,
"leave-to": `u-${name}-leave-to u-${name}-leave-active`
});
const transition = {
methods: {
// 组件被点击发出事件
clickHandler() {
this.$emit("click");
},
// vue版本的组件进场处理
async vueEnter() {
const classNames = getClassNames(this.mode);
this.status = "enter";
this.$emit("beforeEnter");
this.inited = true;
this.display = true;
this.classes = classNames.enter;
await vue.nextTick();
{
await sleep(20);
this.$emit("enter");
this.transitionEnded = false;
this.$emit("afterEnter");
this.classes = classNames["enter-to"];
}
},
// 动画离场处理
async vueLeave() {
if (!this.display)
return;
const classNames = getClassNames(this.mode);
this.status = "leave";
this.$emit("beforeLeave");
this.classes = classNames.leave;
await vue.nextTick();
{
this.transitionEnded = false;
this.$emit("leave");
setTimeout(this.onTransitionEnd, this.duration);
this.classes = classNames["leave-to"];
}
},
// 完成过渡后触发
onTransitionEnd() {
if (this.transitionEnded)
return;
this.transitionEnded = true;
this.$emit(this.status === "leave" ? "afterLeave" : "afterEnter");
if (!this.show && this.display) {
this.display = false;
this.inited = false;
}
}
}
};
const _sfc_main$h = {
name: "u-transition",
data() {
return {
inited: false,
// 是否显示/隐藏组件
viewStyle: {},
// 组件内部的样式
status: "",
// 记录组件动画的状态
transitionEnded: false,
// 组件是否结束的标记
display: false,
// 组件是否展示
classes: ""
// 应用的类名
};
},
emits: ["click", "beforeEnter", "enter", "afterEnter", "beforeLeave", "leave", "afterLeave"],
computed: {
mergeStyle() {
const { viewStyle, customStyle } = this;
return {
transitionDuration: `${this.duration}ms`,
// display: `${this.display ? '' : 'none'}`,
transitionTimingFunction: this.timingFunction,
// 避免自定义样式影响到动画属性,所以写在viewStyle前面
...addStyle(customStyle),
...viewStyle
};
}
},
// 将mixin挂在到组件中,实际上为一个vue格式对象。
mixins: [mpMixin, mixin$1, transition, props$a],
watch: {
show: {
handler(newVal) {
newVal ? this.vueEnter() : this.vueLeave();
},
// 表示同时监听初始化时的props的show的意思
immediate: true
}
}
};
function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) {
return $data.inited ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 0,
class: vue.normalizeClass(["u-transition", $data.classes]),
ref: "u-transition",
onClick: _cache[0] || (_cache[0] = (...args) => _ctx.clickHandler && _ctx.clickHandler(...args)),
style: vue.normalizeStyle([$options.mergeStyle]),
onTouchmove: _cache[1] || (_cache[1] = (...args) => _ctx.noop && _ctx.noop(...args))
},
[
vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
],
38
/* CLASS, STYLE, NEED_HYDRATION */
)) : vue.createCommentVNode("v-if", true);
}
const __easycom_4 = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["render", _sfc_render$g], ["__scopeId", "data-v-5cec8177"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-transition/u-transition.vue"]]);
const props$9 = {
props: {
// 是否显示遮罩
show: {
type: Boolean,
default: () => props$c.overlay.show
},
// 层级z-index
zIndex: {
type: [String, Number],
default: () => props$c.overlay.zIndex
},
// 遮罩的过渡时间,单位为ms
duration: {
type: [String, Number],
default: () => props$c.overlay.duration
},
// 不透明度值,当做rgba的第四个参数
opacity: {
type: [String, Number],
default: () => props$c.overlay.opacity
}
}
};
const _sfc_main$g = {
name: "u-overlay",
mixins: [mpMixin, mixin$1, props$9],
computed: {
overlayStyle() {
const style = {
position: "fixed",
top: 0,
left: 0,
right: 0,
zIndex: this.zIndex,
bottom: 0,
"background-color": `rgba(0, 0, 0, ${this.opacity})`
};
return deepMerge$1(style, addStyle(this.customStyle));
}
},
emits: ["click"],
methods: {
clickHandler() {
this.$emit("click");
}
}
};
function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_transition = resolveEasycom(vue.resolveDynamicComponent("u-transition"), __easycom_4);
return vue.openBlock(), vue.createBlock(_component_u_transition, {
show: _ctx.show,
"custom-class": "u-overlay",
duration: _ctx.duration,
"custom-style": $options.overlayStyle,
onClick: $options.clickHandler
}, {
default: vue.withCtx(() => [
vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
]),
_: 3
/* FORWARDED */
}, 8, ["show", "duration", "custom-style", "onClick"]);
}
const __easycom_0$3 = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["render", _sfc_render$f], ["__scopeId", "data-v-9112bed9"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-overlay/u-overlay.vue"]]);
const props$8 = {
props: {
bgColor: {
type: String,
default: () => props$c.statusBar.bgColor
}
}
};
const _sfc_main$f = {
name: "u-status-bar",
mixins: [mpMixin, mixin$1, props$8],
data() {
return {};
},
computed: {
style() {
const style = {};
style.height = addUnit(sys().statusBarHeight, "px");
style.backgroundColor = this.bgColor;
return deepMerge$1(style, addStyle(this.customStyle));
}
}
};
function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock(
"view",
{
style: vue.normalizeStyle([$options.style]),
class: "u-status-bar"
},
[
vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
],
4
/* STYLE */
);
}
const __easycom_1$3 = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["render", _sfc_render$e], ["__scopeId", "data-v-eb8e0cdd"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-status-bar/u-status-bar.vue"]]);
const props$7 = {
props: {}
};
const _sfc_main$e = {
name: "u-safe-bottom",
mixins: [mpMixin, mixin$1, props$7],
data() {
return {
safeAreaBottomHeight: 0,
isNvue: false
};
},
computed: {
style() {
const style = {};
return deepMerge$1(style, addStyle(this.customStyle));
}
},
mounted() {
}
};
function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock(
"view",
{
class: vue.normalizeClass(["u-safe-bottom", [!$data.isNvue && "u-safe-area-inset-bottom"]]),
style: vue.normalizeStyle([$options.style])
},
null,
6
/* CLASS, STYLE */
);
}
const __easycom_3$1 = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["render", _sfc_render$d], ["__scopeId", "data-v-f3d22cfe"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-safe-bottom/u-safe-bottom.vue"]]);
const props$6 = {
props: {
// 是否展示弹窗
show: {
type: Boolean,
default: () => props$c.popup.show
},
// 是否显示遮罩
overlay: {
type: Boolean,
default: () => props$c.popup.overlay
},
// 弹出的方向,可选值为 top bottom right left center
mode: {
type: String,
default: () => props$c.popup.mode
},
// 动画时长,单位ms
duration: {
type: [String, Number],
default: () => props$c.popup.duration
},
// 是否显示关闭图标
closeable: {
type: Boolean,
default: () => props$c.popup.closeable
},
// 自定义遮罩的样式
overlayStyle: {
type: [Object, String],
default: () => props$c.popup.overlayStyle
},
// 点击遮罩是否关闭弹窗
closeOnClickOverlay: {
type: Boolean,
default: () => props$c.popup.closeOnClickOverlay
},
// 层级
zIndex: {
type: [String, Number],
default: () => props$c.popup.zIndex
},
// 是否为iPhoneX留出底部安全距离
safeAreaInsetBottom: {
type: Boolean,
default: () => props$c.popup.safeAreaInsetBottom
},
// 是否留出顶部安全距离(状态栏高度)
safeAreaInsetTop: {
type: Boolean,
default: () => props$c.popup.safeAreaInsetTop
},
// 自定义关闭图标位置,top-left为左上角,top-right为右上角,bottom-left为左下角,bottom-right为右下角
closeIconPos: {
type: String,
default: () => props$c.popup.closeIconPos
},
// 是否显示圆角
round: {
type: [Boolean, String, Number],
default: () => props$c.popup.round
},
// mode=center,也即中部弹出时,是否使用缩放模式
zoom: {
type: Boolean,
default: () => props$c.popup.zoom
},
// 弹窗背景色,设置为transparent可去除白色背景
bgColor: {
type: String,
default: () => props$c.popup.bgColor
},
// 遮罩的透明度,0-1之间
overlayOpacity: {
type: [Number, String],
default: () => props$c.popup.overlayOpacity
}
}
};
const _sfc_main$d = {
name: "u-popup",
mixins: [mpMixin, mixin$1, props$6],
data() {
return {
overlayDuration: this.duration + 50
};
},
watch: {
show(newValue, oldValue) {
}
},
computed: {
transitionStyle() {
const style = {
zIndex: this.zIndex,
position: "fixed",
display: "flex"
};
style[this.mode] = 0;
if (this.mode === "left") {
return deepMerge$1(style, {
bottom: 0,
top: 0
});
} else if (this.mode === "right") {
return deepMerge$1(style, {
bottom: 0,
top: 0
});
} else if (this.mode === "top") {
return deepMerge$1(style, {
left: 0,
right: 0
});
} else if (this.mode === "bottom") {
return deepMerge$1(style, {
left: 0,
right: 0
});
} else if (this.mode === "center") {
return deepMerge$1(style, {
alignItems: "center",
"justify-content": "center",
top: 0,
left: 0,
right: 0,
bottom: 0
});
}
},
contentStyle() {
const style = {};
sys();
if (this.mode !== "center") {
style.flex = 1;
}
if (this.bgColor) {
style.backgroundColor = this.bgColor;
}
if (this.round) {
const value2 = addUnit(this.round);
if (this.mode === "top") {
style.borderBottomLeftRadius = value2;
style.borderBottomRightRadius = value2;
} else if (this.mode === "bottom") {
style.borderTopLeftRadius = value2;
style.borderTopRightRadius = value2;
} else if (this.mode === "center") {
style.borderRadius = value2;
}
}
return deepMerge$1(style, addStyle(this.customStyle));
},
position() {
if (this.mode === "center") {
return this.zoom ? "fade-zoom" : "fade";
}
if (this.mode === "left") {
return "slide-left";
}
if (this.mode === "right") {
return "slide-right";
}
if (this.mode === "bottom") {
return "slide-up";
}
if (this.mode === "top") {
return "slide-down";
}
}
},
emits: ["open", "close", "click"],
methods: {
// 点击遮罩
overlayClick() {
if (this.closeOnClickOverlay) {
this.$emit("close");
}
},
close(e) {
this.$emit("close");
},
afterEnter() {
this.$emit("open");
},
clickHandler() {
if (this.mode === "center") {
this.overlayClick();
}
this.$emit("click");
}
}
};
function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_overlay = resolveEasycom(vue.resolveDynamicComponent("u-overlay"), __easycom_0$3);
const _component_u_status_bar = resolveEasycom(vue.resolveDynamicComponent("u-status-bar"), __easycom_1$3);
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_2);
const _component_u_safe_bottom = resolveEasycom(vue.resolveDynamicComponent("u-safe-bottom"), __easycom_3$1);
const _component_u_transition = resolveEasycom(vue.resolveDynamicComponent("u-transition"), __easycom_4);
return vue.openBlock(), vue.createElementBlock("view", { class: "u-popup" }, [
_ctx.overlay ? (vue.openBlock(), vue.createBlock(_component_u_overlay, {
key: 0,
show: _ctx.show,
onClick: $options.overlayClick,
duration: $data.overlayDuration,
customStyle: _ctx.overlayStyle,
opacity: _ctx.overlayOpacity
}, null, 8, ["show", "onClick", "duration", "customStyle", "opacity"])) : vue.createCommentVNode("v-if", true),
vue.createVNode(_component_u_transition, {
show: _ctx.show,
customStyle: $options.transitionStyle,
mode: $options.position,
duration: _ctx.duration,
onAfterEnter: $options.afterEnter,
onClick: $options.clickHandler
}, {
default: vue.withCtx(() => [
vue.createElementVNode(
"view",
{
class: "u-popup__content",
style: vue.normalizeStyle([$options.contentStyle]),
onClick: _cache[1] || (_cache[1] = vue.withModifiers((...args) => _ctx.noop && _ctx.noop(...args), ["stop"]))
},
[
_ctx.safeAreaInsetTop ? (vue.openBlock(), vue.createBlock(_component_u_status_bar, { key: 0 })) : vue.createCommentVNode("v-if", true),
vue.renderSlot(_ctx.$slots, "default", {}, void 0, true),
_ctx.closeable ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 1,
onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => $options.close && $options.close(...args), ["stop"])),
class: vue.normalizeClass(["u-popup__content__close", ["u-popup__content__close--" + _ctx.closeIconPos]]),
"hover-class": "u-popup__content__close--hover",
"hover-stay-time": "150"
},
[
vue.createVNode(_component_u_icon, {
name: "close",
color: "#909399",
size: "18",
bold: ""
})
],
2
/* CLASS */
)) : vue.createCommentVNode("v-if", true),
_ctx.safeAreaInsetBottom ? (vue.openBlock(), vue.createBlock(_component_u_safe_bottom, { key: 2 })) : vue.createCommentVNode("v-if", true)
],
4
/* STYLE */
)
]),
_: 3
/* FORWARDED */
}, 8, ["show", "customStyle", "mode", "duration", "onAfterEnter", "onClick"])
]);
}
const __easycom_3 = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["render", _sfc_render$c], ["__scopeId", "data-v-05c24e9b"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-popup/u-popup.vue"]]);
let Request$1 = class Request {
http(router, data = {}, method, contentType) {
let path = "http://192.168.10.125:7114";
uni.setStorageSync("requestPath", path);
uni.showLoading({
title: "加载中"
});
return new Promise((resolve, reject) => {
let token = uni.getStorageSync("AppToken");
var httpContentType = "application/x-www-form-urlencoded";
if (contentType != void 0) {
httpContentType = contentType;
}
uni.request({
header: {
// 'Content-Type': 'application/x-www-form-urlencoded',
"Content-Type": httpContentType,
"AppToken": token
},
url: `${path}${router}`,
data,
method,
success: (res) => {
if (res.code == 401) {
let pages2 = getCurrentPages();
let url2 = pages2[pages2.length - 1];
如果登录界面已打开, 自动关闭;
if (url2 != void 0 && url2.route == "/pages/home/index") {
resolve(res.data);
return;
}
uni.reLaunch({
url: "/pages/home/index",
success: () => {
uni.hideLoading();
},
fail: () => {
uni.hideLoading();
}
});
return;
}
if (res.token) {
uni.setStorageSync("AppToken", res.token);
}
resolve(res.data);
},
fail: (res) => {
},
complete: (res) => {
if (res.data.code == 401) {
return false;
}
uni.hideLoading();
}
});
});
}
};
let request$1 = new Request$1().http;
function loginByMp(data) {
return request$1("/app/user/loginByMp", data, "POST", "application/json;charset=UTF-8");
}
function getlive(data) {
return request$1("/app/live/live", data, "GET", "application/json;charset=UTF-8");
}
function gettextlist(data) {
return request$1("/app/live/msgList", data, "GET", "application/json;charset=UTF-8");
}
function getAnswerlist(data) {
return request$1("/app/question/questionList", data, "GET", "application/json;charset=UTF-8");
}
function submitAnswer(data) {
return request$1("/app/question/answer", data, "POST", "application/json;charset=UTF-8");
}
const _imports_0$2 = "/static/images/shipin.png";
const isWechat = () => {
return String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === "micromessenger";
};
const _sfc_main$c = {
data() {
return {
code: "",
livedata: {},
path: "http://live.ylrzcloud.com/prod-api",
iskefu: false,
isLongPress: false,
// 是否长按
timeout: null,
// 计时器
liveId: 2
};
},
onLoad(option) {
},
onShow() {
if (uni.getStorageSync("AppToken")) {
this.getliving();
}
},
methods: {
open() {
},
close() {
this.iskefu = !this.iskefu;
},
longPress() {
this.timeout = setTimeout(() => {
this.isLongPress = true;
uni.saveImageToPhotosAlbum({
filePath: this.livedata.qwQrCode,
// 图片的本地路径或网络路径
success: () => {
uni.showToast({
title: "保存成功"
});
},
fail: () => {
uni.showToast({
title: "保存失败",
icon: "none"
});
}
});
}, 500);
},
cancelLongPress() {
clearTimeout(this.timeout);
this.isLongPress = false;
},
getliving() {
const param = {
id: this.liveId
};
getlive(param).then((res) => {
if (res.code == 200) {
this.livedata = res.data;
} else {
uni.showToast({
title: res.msg,
icon: "none",
duration: 2e3
});
}
});
},
getWechatCode() {
if (isWechat) {
let appid = "wx93ce67750e3cfba3";
let code2 = this.getUrlCode().code;
let local = window.location.href.split("#")[0];
if (code2 == null || code2 === "") {
window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + encodeURIComponent(local) + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
} else {
this.code = code2;
this.loginByMp();
}
}
},
loginByMp() {
if (this.code == null) {
return;
}
uni.showLoading({
title: "处理中..."
});
var data = {
code: this.code
};
loginByMp(data).then(
(res) => {
uni.hideLoading();
if (res.code == 200) {
formatAppLog("log", "at pages/home/index.vue:157", res);
uni.setStorageSync("AppToken", res.token);
uni.setStorageSync("userInfo", JSON.stringify(res.user));
let beforLoginUrl = uni.getStorageSync("beforLoginPage");
uni.reLaunch({
url: beforLoginUrl
});
uni.showToast({
title: "登录成功",
icon: "none"
});
this.getliving();
} else {
uni.showToast({
title: res.msg,
icon: "none"
});
}
},
(err) => {
}
);
},
getUrlCode() {
var url2 = location.search;
var theRequest = new Object();
if (url2.indexOf("?") != -1) {
var str = url2.substr(1);
var strs = str.split("&");
for (var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = strs[i].split("=")[1];
}
}
return theRequest;
},
comelive() {
uni.navigateTo({
url: "/pages/home/living"
});
}
}
};
function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_2);
const _component_u_popup = resolveEasycom(vue.resolveDynamicComponent("u-popup"), __easycom_3);
return vue.openBlock(), vue.createElementBlock("view", { class: "home column" }, [
vue.createElementVNode("view", { class: "justify-start align-center" }, [
vue.createElementVNode("image", {
src: _imports_0$2,
class: "wh50 p20"
}),
vue.createElementVNode("view", { class: "fs32 bold" }, "道中")
]),
vue.createElementVNode("image", {
src: $data.livedata.liveImgUrl,
mode: "widthFix",
class: "w100"
}, null, 8, ["src"]),
vue.createElementVNode("view", { class: "p20" }, [
vue.createElementVNode("view", { class: "column" }, [
vue.createElementVNode(
"text",
{ class: "fs32" },
vue.toDisplayString($data.livedata.liveName),
1
/* TEXT */
),
vue.createElementVNode(
"text",
{ class: "color9 fs24 mt20" },
" 直播时间 " + vue.toDisplayString($data.livedata.startTime) + " —— " + vue.toDisplayString($data.livedata.finishTime),
1
/* TEXT */
)
])
]),
vue.createElementVNode("view", { class: "p20 detail" }, [
vue.createElementVNode("view", { class: "jianjie mb20" }, "简介"),
vue.createElementVNode("view", {
class: "fs24 lh36",
innerHTML: $data.livedata.liveDesc
}, null, 8, ["innerHTML"])
]),
vue.createElementVNode("view", { class: "p12 bgf bot-box" }, [
vue.createElementVNode("view", {
class: "center",
onClick: _cache[0] || (_cache[0] = (...args) => $options.comelive && $options.comelive(...args))
}, "进入直播间")
]),
vue.createVNode(_component_u_popup, {
show: $data.iskefu,
onClose: $options.close,
onOpen: $options.open,
round: "20rpx",
bgColor: "#fffee1"
}, {
default: vue.withCtx(() => [
vue.createElementVNode("view", { class: "addchat p20" }, [
vue.createElementVNode("view", { class: "u-flex-row-reverse u-flex" }, [
vue.createVNode(_component_u_icon, {
name: "close",
size: "18",
onClick: _cache[1] || (_cache[1] = ($event) => _ctx.showadd = !_ctx.showadd)
})
]),
vue.createElementVNode("view", { class: "column align-center" }, [
vue.createElementVNode("view", {
class: "fs36",
style: { "color": "#ff5c03" }
}, "扫码添加助教老师"),
vue.createElementVNode("view", { class: "fs28 color6" }, "扫码添加助教老师"),
vue.createElementVNode("view", {
class: "p10 mt40",
style: { "border": "#ff5c03 solid 2rpx" }
}, [
vue.createElementVNode("image", {
src: _ctx.codeimg,
class: "wh180",
onTouchstart: _cache[2] || (_cache[2] = (...args) => $options.longPress && $options.longPress(...args)),
onTouchend: _cache[3] || (_cache[3] = (...args) => $options.cancelLongPress && $options.cancelLongPress(...args))
}, null, 40, ["src"])
]),
vue.createElementVNode("view", { class: "color6 mt20" }, "长按识别二维码")
])
])
]),
_: 1
/* STABLE */
}, 8, ["show", "onClose", "onOpen"])
]);
}
const PagesHomeIndex = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["render", _sfc_render$b], ["__scopeId", "data-v-4978fed5"], ["__file", "F:/project/liveH5-v3/pages/home/index.vue"]]);
const _sfc_main$b = {};
function _sfc_render$a(_ctx, _cache) {
return vue.openBlock(), vue.createElementBlock("view", { class: "column" });
}
const PagesUserIndex = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["render", _sfc_render$a], ["__file", "F:/project/liveH5-v3/pages/user/index.vue"]]);
const _sfc_main$a = {};
function _sfc_render$9(_ctx, _cache) {
return vue.openBlock(), vue.createElementBlock("view", { class: "games column" });
}
const PagesGamesIndex = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["render", _sfc_render$9], ["__file", "F:/project/liveH5-v3/pages/games/index.vue"]]);
const _sfc_main$9 = {};
function _sfc_render$8(_ctx, _cache) {
return vue.openBlock(), vue.createElementBlock("view", { class: "column" });
}
const PagesListIndex = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$8], ["__file", "F:/project/liveH5-v3/pages/list/index.vue"]]);
const props$5 = {
props: {
// 是否显示圆点
isDot: {
type: Boolean,
default: () => props$c.badge.isDot
},
// 显示的内容
value: {
type: [Number, String],
default: () => props$c.badge.value
},
// 显示的内容
modelValue: {
type: [Number, String],
default: () => props$c.badge.modelValue
},
// 是否显示
show: {
type: Boolean,
default: () => props$c.badge.show
},
// 最大值,超过最大值会显示 '{max}+'
max: {
type: [Number, String],
default: () => props$c.badge.max
},
// 主题类型,error|warning|success|primary
type: {
type: String,
default: () => props$c.badge.type
},
// 当数值为 0 时,是否展示 Badge
showZero: {
type: Boolean,
default: () => props$c.badge.showZero
},
// 背景颜色,优先级比type高,如设置,type参数会失效
bgColor: {
type: [String, null],
default: () => props$c.badge.bgColor
},
// 字体颜色
color: {
type: [String, null],
default: () => props$c.badge.color
},
// 徽标形状,circle-四角均为圆角,horn-左下角为直角
shape: {
type: String,
default: () => props$c.badge.shape
},
// 设置数字的显示方式,overflow|ellipsis|limit
// overflow会根据max字段判断,超出显示`${max}+`
// ellipsis会根据max判断,超出显示`${max}...`
// limit会依据1000作为判断条件,超出1000,显示`${value/1000}K`,比如2.2k、3.34w,最多保留2位小数
numberType: {
type: String,
default: () => props$c.badge.numberType
},
// 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效
offset: {
type: Array,
default: () => props$c.badge.offset
},
// 是否反转背景和字体颜色
inverted: {
type: Boolean,
default: () => props$c.badge.inverted
},
// 是否绝对定位
absolute: {
type: Boolean,
default: () => props$c.badge.absolute
}
}
};
const _sfc_main$8 = {
name: "u-badge",
mixins: [mpMixin, props$5, mixin$1],
computed: {
// 是否将badge中心与父组件右上角重合
boxStyle() {
let style = {};
return style;
},
// 整个组件的样式
badgeStyle() {
const style = {};
if (this.color) {
style.color = this.color;
}
if (this.bgColor && !this.inverted) {
style.backgroundColor = this.bgColor;
}
if (this.absolute) {
style.position = "absolute";
if (this.offset.length) {
const top = this.offset[0];
const right = this.offset[1] || top;
style.top = addUnit(top);
style.right = addUnit(right);
}
}
return style;
},
showValue() {
switch (this.numberType) {
case "overflow":
return Number(this.value) > Number(this.max) ? this.max + "+" : this.value;
case "ellipsis":
return Number(this.value) > Number(this.max) ? "..." : this.value;
case "limit":
return Number(this.value) > 999 ? Number(this.value) >= 9999 ? Math.floor(this.value / 1e4 * 100) / 100 + "w" : Math.floor(this.value / 1e3 * 100) / 100 + "k" : this.value;
default:
return Number(this.value);
}
}
},
methods: {
addStyle
}
};
function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
return _ctx.show && ((Number(_ctx.value) === 0 ? _ctx.showZero : true) || _ctx.isDot) ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 0,
class: vue.normalizeClass([[_ctx.isDot ? "u-badge--dot" : "u-badge--not-dot", _ctx.inverted && "u-badge--inverted", _ctx.shape === "horn" && "u-badge--horn", `u-badge--${_ctx.type}${_ctx.inverted ? "--inverted" : ""}`], "u-badge"]),
style: vue.normalizeStyle([$options.addStyle(_ctx.customStyle), $options.badgeStyle])
},
vue.toDisplayString(_ctx.isDot ? "" : $options.showValue),
7
/* TEXT, CLASS, STYLE */
)) : vue.createCommentVNode("v-if", true);
}
const __easycom_0$2 = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$7], ["__scopeId", "data-v-06cca9b7"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-badge/u-badge.vue"]]);
const props$4 = {
props: {
// 滑块的移动过渡时间,单位ms
duration: {
type: Number,
default: () => props$c.tabs.duration
},
// tabs标签数组
list: {
type: Array,
default: () => props$c.tabs.list
},
// 滑块颜色
lineColor: {
type: String,
default: () => props$c.tabs.lineColor
},
// 菜单选择中时的样式
activeStyle: {
type: [String, Object],
default: () => props$c.tabs.activeStyle
},
// 菜单非选中时的样式
inactiveStyle: {
type: [String, Object],
default: () => props$c.tabs.inactiveStyle
},
// 滑块长度
lineWidth: {
type: [String, Number],
default: () => props$c.tabs.lineWidth
},
// 滑块高度
lineHeight: {
type: [String, Number],
default: () => props$c.tabs.lineHeight
},
// 滑块背景显示大小,当滑块背景设置为图片时使用
lineBgSize: {
type: String,
default: () => props$c.tabs.lineBgSize
},
// 菜单item的样式
itemStyle: {
type: [String, Object],
default: () => props$c.tabs.itemStyle
},
// 菜单是否可滚动
scrollable: {
type: Boolean,
default: () => props$c.tabs.scrollable
},
// 当前选中标签的索引
current: {
type: [Number, String],
default: () => props$c.tabs.current
},
// 默认读取的键名
keyName: {
type: String,
default: () => props$c.tabs.keyName
}
}
};
const _sfc_main$7 = {
name: "u-tabs",
mixins: [mpMixin, mixin$1, props$4],
data() {
return {
firstTime: true,
scrollLeft: 0,
scrollViewWidth: 0,
lineOffsetLeft: 0,
tabsRect: {
left: 0
},
innerCurrent: 0,
moving: false
};
},
watch: {
current: {
immediate: true,
handler(newValue, oldValue) {
if (newValue !== this.innerCurrent) {
this.innerCurrent = newValue;
this.$nextTick(() => {
this.resize();
});
}
}
},
// list变化时,重新渲染list各项信息
list() {
this.$nextTick(() => {
this.resize();
});
}
},
computed: {
textStyle() {
return (index2) => {
const style = {};
const customeStyle = index2 === this.innerCurrent ? addStyle(this.activeStyle) : uni.$u.addStyle(
this.inactiveStyle
);
if (this.list[index2].disabled) {
style.color = "#c8c9cc";
}
return deepMerge$1(customeStyle, style);
};
},
propsBadge() {
return props$c.badge;
}
},
async mounted() {
this.init();
},
emits: ["click", "change"],
methods: {
addStyle,
addUnit,
setLineLeft() {
const tabItem = this.list[this.innerCurrent];
if (!tabItem) {
return;
}
let lineOffsetLeft = this.list.slice(0, this.innerCurrent).reduce((total, curr) => total + curr.rect.width, 0);
const lineWidth = getPx(this.lineWidth);
this.lineOffsetLeft = lineOffsetLeft + (tabItem.rect.width - lineWidth) / 2;
if (this.firstTime) {
setTimeout(() => {
this.firstTime = false;
}, 10);
}
},
// nvue下设置滑块的位置
animation(x, duration = 0) {
},
// 点击某一个标签
clickHandler(item, index2) {
this.$emit("click", {
...item,
index: index2
});
if (item.disabled)
return;
this.innerCurrent = index2;
this.resize();
this.$emit("change", {
...item,
index: index2
});
},
init() {
sleep().then(() => {
this.resize();
});
},
setScrollLeft() {
const tabRect = this.list[this.innerCurrent];
const offsetLeft = this.list.slice(0, this.innerCurrent).reduce((total, curr) => {
return total + curr.rect.width;
}, 0);
const windowWidth = sys().windowWidth;
let scrollLeft = offsetLeft - (this.tabsRect.width - tabRect.rect.width) / 2 - (windowWidth - this.tabsRect.right) / 2 + this.tabsRect.left / 2;
scrollLeft = Math.min(scrollLeft, this.scrollViewWidth - this.tabsRect.width);
this.scrollLeft = Math.max(0, scrollLeft);
},
// 获取所有标签的尺寸
resize() {
if (this.list.length === 0) {
return;
}
Promise.all([this.getTabsRect(), this.getAllItemRect()]).then(([tabsRect, itemRect = []]) => {
this.tabsRect = tabsRect;
this.scrollViewWidth = 0;
itemRect.map((item, index2) => {
this.scrollViewWidth += item.width;
this.list[index2].rect = item;
});
this.setLineLeft();
this.setScrollLeft();
});
},
// 获取导航菜单的尺寸
getTabsRect() {
return new Promise((resolve) => {
this.queryRect("u-tabs__wrapper__scroll-view").then((size) => resolve(size));
});
},
// 获取所有标签的尺寸
getAllItemRect() {
return new Promise((resolve) => {
const promiseAllArr = this.list.map((item, index2) => this.queryRect(
`u-tabs__wrapper__nav__item-${index2}`,
true
));
Promise.all(promiseAllArr).then((sizes) => resolve(sizes));
});
},
// 获取各个标签的尺寸
queryRect(el, item) {
return new Promise((resolve) => {
this.$uGetRect(`.${el}`).then((size) => {
resolve(size);
});
});
}
}
};
function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_badge = resolveEasycom(vue.resolveDynamicComponent("u-badge"), __easycom_0$2);
return vue.openBlock(), vue.createElementBlock("view", { class: "u-tabs" }, [
vue.createElementVNode("view", { class: "u-tabs__wrapper" }, [
vue.renderSlot(_ctx.$slots, "left", {}, void 0, true),
vue.createElementVNode("view", { class: "u-tabs__wrapper__scroll-view-wrapper" }, [
vue.createElementVNode("scroll-view", {
"scroll-x": _ctx.scrollable,
"scroll-left": $data.scrollLeft,
"scroll-with-animation": "",
class: "u-tabs__wrapper__scroll-view",
"show-scrollbar": false,
ref: "u-tabs__wrapper__scroll-view"
}, [
vue.createElementVNode(
"view",
{
class: "u-tabs__wrapper__nav",
ref: "u-tabs__wrapper__nav"
},
[
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(_ctx.list, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: vue.normalizeClass(["u-tabs__wrapper__nav__item", [`u-tabs__wrapper__nav__item-${index2}`, item.disabled && "u-tabs__wrapper__nav__item--disabled"]]),
key: index2,
onClick: ($event) => $options.clickHandler(item, index2),
ref_for: true,
ref: `u-tabs__wrapper__nav__item-${index2}`,
style: vue.normalizeStyle([$options.addStyle(_ctx.itemStyle), { flex: _ctx.scrollable ? "" : 1 }])
}, [
vue.createElementVNode(
"text",
{
class: vue.normalizeClass([[item.disabled && "u-tabs__wrapper__nav__item__text--disabled"], "u-tabs__wrapper__nav__item__text"]),
style: vue.normalizeStyle([$options.textStyle(index2)])
},
vue.toDisplayString(item[_ctx.keyName]),
7
/* TEXT, CLASS, STYLE */
),
vue.createVNode(_component_u_badge, {
show: !!(item.badge && (item.badge.show || item.badge.isDot || item.badge.value)),
isDot: item.badge && item.badge.isDot || $options.propsBadge.isDot,
value: item.badge && item.badge.value || $options.propsBadge.value,
max: item.badge && item.badge.max || $options.propsBadge.max,
type: item.badge && item.badge.type || $options.propsBadge.type,
showZero: item.badge && item.badge.showZero || $options.propsBadge.showZero,
bgColor: item.badge && item.badge.bgColor || $options.propsBadge.bgColor,
color: item.badge && item.badge.color || $options.propsBadge.color,
shape: item.badge && item.badge.shape || $options.propsBadge.shape,
numberType: item.badge && item.badge.numberType || $options.propsBadge.numberType,
inverted: item.badge && item.badge.inverted || $options.propsBadge.inverted,
customStyle: "margin-left: 4px;"
}, null, 8, ["show", "isDot", "value", "max", "type", "showZero", "bgColor", "color", "shape", "numberType", "inverted"])
], 14, ["onClick"]);
}),
128
/* KEYED_FRAGMENT */
)),
vue.createElementVNode(
"view",
{
class: "u-tabs__wrapper__nav__line",
ref: "u-tabs__wrapper__nav__line",
style: vue.normalizeStyle([{
width: $options.addUnit(_ctx.lineWidth),
transform: `translate(${$data.lineOffsetLeft}px)`,
transitionDuration: `${$data.firstTime ? 0 : _ctx.duration}ms`,
height: $options.addUnit(_ctx.lineHeight),
background: _ctx.lineColor,
backgroundSize: _ctx.lineBgSize
}])
},
null,
4
/* STYLE */
)
],
512
/* NEED_PATCH */
)
], 8, ["scroll-x", "scroll-left"])
]),
vue.renderSlot(_ctx.$slots, "right", {}, void 0, true)
])
]);
}
const __easycom_0$1 = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$6], ["__scopeId", "data-v-02b0c54f"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-tabs/u-tabs.vue"]]);
const props$3 = {
props: {
// 文字颜色
color: {
type: String,
default: () => props$c.link.color
},
// 字体大小,单位px
fontSize: {
type: [String, Number],
default: () => props$c.link.fontSize
},
// 是否显示下划线
underLine: {
type: Boolean,
default: () => props$c.link.underLine
},
// 要跳转的链接
href: {
type: String,
default: () => props$c.link.href
},
// 小程序中复制到粘贴板的提示语
mpTips: {
type: String,
default: () => props$c.link.mpTips
},
// 下划线颜色
lineColor: {
type: String,
default: () => props$c.link.lineColor
},
// 超链接的问题,不使用slot形式传入,是因为nvue下无法修改颜色
text: {
type: String,
default: () => props$c.link.text
}
}
};
const _sfc_main$6 = {
name: "u-link",
mixins: [mpMixin, mixin$1, props$3],
computed: {
linkStyle() {
const style = {
color: this.color,
fontSize: addUnit(this.fontSize),
// line-height设置为比字体大小多2px
lineHeight: addUnit(getPx(this.fontSize) + 2),
textDecoration: this.underLine ? "underline" : "none"
};
return style;
}
},
emits: ["click"],
methods: {
addStyle,
openLink() {
plus.runtime.openURL(this.href);
this.$emit("click");
}
}
};
function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock(
"text",
{
class: "u-link",
onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => $options.openLink && $options.openLink(...args), ["stop"])),
style: vue.normalizeStyle([$options.linkStyle, $options.addStyle(_ctx.customStyle)])
},
vue.toDisplayString(_ctx.text),
5
/* TEXT, STYLE */
);
}
const __easycom_1$2 = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$5], ["__scopeId", "data-v-12f6646d"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-link/u-link.vue"]]);
const props$2 = {
props: {
// 主题颜色
type: {
type: String,
default: () => props$c.text.type
},
// 是否显示
show: {
type: Boolean,
default: () => props$c.text.show
},
// 显示的值
text: {
type: [String, Number],
default: () => props$c.text.text
},
// 前置图标
prefixIcon: {
type: String,
default: () => props$c.text.prefixIcon
},
// 后置图标
suffixIcon: {
type: String,
default: () => props$c.text.suffixIcon
},
// 文本处理的匹配模式
// text-普通文本,price-价格,phone-手机号,name-姓名,date-日期,link-超链接
mode: {
type: String,
default: () => props$c.text.mode
},
// mode=link下,配置的链接
href: {
type: String,
default: () => props$c.text.href
},
// 格式化规则
format: {
type: [String, Function],
default: () => props$c.text.format
},
// mode=phone时,点击文本是否拨打电话
call: {
type: Boolean,
default: () => props$c.text.call
},
// 小程序的打开方式
openType: {
type: String,
default: () => props$c.text.openType
},
// 是否粗体,默认normal
bold: {
type: Boolean,
default: () => props$c.text.bold
},
// 是否块状
block: {
type: Boolean,
default: () => props$c.text.block
},
// 文本显示的行数,如果设置,超出此行数,将会显示省略号
lines: {
type: [String, Number],
default: () => props$c.text.lines
},
// 文本颜色
color: {
type: String,
default: () => props$c.text.color
},
// 字体大小
size: {
type: [String, Number],
default: () => props$c.text.size
},
// 图标的样式
iconStyle: {
type: [Object, String],
default: () => props$c.text.iconStyle
},
// 文字装饰,下划线,中划线等,可选值 none|underline|line-through
decoration: {
tepe: String,
default: () => props$c.text.decoration
},
// 外边距,对象、字符串,数值形式均可
margin: {
type: [Object, String, Number],
default: () => props$c.text.margin
},
// 文本行高
lineHeight: {
type: [String, Number],
default: () => props$c.text.lineHeight
},
// 文本对齐方式,可选值left|center|right
align: {
type: String,
default: () => props$c.text.align
},
// 文字换行,可选值break-word|normal|anywhere
wordWrap: {
type: String,
default: () => props$c.text.wordWrap
}
}
};
const value = {
computed: {
// 经处理后需要显示的值
value() {
const {
text,
mode,
format,
href
} = this;
if (mode === "price") {
if (!/^\d+(\.\d+)?$/.test(text)) {
error("金额模式下,text参数需要为金额格式");
}
if (test.func(format)) {
return format(text);
}
return priceFormat(text, 2);
}
if (mode === "date") {
!test.date(text) && error("日期模式下,text参数需要为日期或时间戳格式");
if (test.func(format)) {
return format(text);
}
if (format) {
return timeFormat(text, format);
}
return timeFormat(text, "yyyy-mm-dd");
}
if (mode === "phone") {
if (test.func(format)) {
return format(text);
}
if (format === "encrypt") {
return `${text.substr(0, 3)}****${text.substr(7)}`;
}
return text;
}
if (mode === "name") {
!(typeof text === "string") && error("姓名模式下,text参数需要为字符串格式");
if (test.func(format)) {
return format(text);
}
if (format === "encrypt") {
return this.formatName(text);
}
return text;
}
if (mode === "link") {
!test.url(href) && error("超链接模式下,href参数需要为URL格式");
return text;
}
return text;
}
},
methods: {
// 默认的姓名脱敏规则
formatName(name) {
let value2 = "";
if (name.length === 2) {
value2 = name.substr(0, 1) + "*";
} else if (name.length > 2) {
let char = "";
for (let i = 0, len = name.length - 2; i < len; i++) {
char += "*";
}
value2 = name.substr(0, 1) + char + name.substr(-1, 1);
} else {
value2 = name;
}
return value2;
}
}
};
const _sfc_main$5 = {
name: "u--text",
mixins: [mpMixin, mixin$1, value, props$2],
emits: ["click"],
computed: {
valueStyle() {
const style = {
textDecoration: this.decoration,
fontWeight: this.bold ? "bold" : "normal",
wordWrap: this.wordWrap,
fontSize: addUnit(this.size)
};
!this.type && (style.color = this.color);
this.isNvue && this.lines && (style.lines = this.lines);
this.lineHeight && (style.lineHeight = addUnit(this.lineHeight));
!this.isNvue && this.block && (style.display = "block");
return deepMerge$1(style, addStyle(this.customStyle));
},
isNvue() {
let nvue = false;
return nvue;
},
isMp() {
let mp = false;
return mp;
}
},
data() {
return {};
},
methods: {
addStyle,
clickHandler() {
if (this.call && this.mode === "phone") {
uni.makePhoneCall({
phoneNumber: this.text
});
}
this.$emit("click");
}
}
};
function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_2);
const _component_u_link = resolveEasycom(vue.resolveDynamicComponent("u-link"), __easycom_1$2);
return _ctx.show ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 0,
class: vue.normalizeClass(["u-text", []]),
style: vue.normalizeStyle({
margin: _ctx.margin,
justifyContent: _ctx.align === "left" ? "flex-start" : _ctx.align === "center" ? "center" : "flex-end"
}),
onClick: _cache[6] || (_cache[6] = (...args) => $options.clickHandler && $options.clickHandler(...args))
},
[
_ctx.mode === "price" ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 0,
class: vue.normalizeClass(["u-text__price", _ctx.type && `u-text__value--${_ctx.type}`]),
style: vue.normalizeStyle([$options.valueStyle])
},
"¥",
6
/* CLASS, STYLE */
)) : vue.createCommentVNode("v-if", true),
_ctx.prefixIcon ? (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "u-text__prefix-icon"
}, [
vue.createVNode(_component_u_icon, {
name: _ctx.prefixIcon,
customStyle: $options.addStyle(_ctx.iconStyle)
}, null, 8, ["name", "customStyle"])
])) : vue.createCommentVNode("v-if", true),
_ctx.mode === "link" ? (vue.openBlock(), vue.createBlock(_component_u_link, {
key: 2,
class: vue.normalizeClass(["u-text__value", [_ctx.type && `u-text__value--${_ctx.type}`, _ctx.lines && `u-line-${_ctx.lines}`]]),
style: vue.normalizeStyle({ fontWeight: $options.valueStyle.fontWeight, wordWrap: $options.valueStyle.wordWrap, fontSize: $options.valueStyle.fontSize }),
text: _ctx.value,
href: _ctx.href,
underLine: ""
}, null, 8, ["style", "class", "text", "href"])) : _ctx.openType && $options.isMp ? (vue.openBlock(), vue.createElementBlock("button", {
key: 3,
class: "u-reset-button u-text__value",
style: vue.normalizeStyle([$options.valueStyle]),
"data-index": _ctx.index,
openType: _ctx.openType,
onGetuserinfo: _cache[0] || (_cache[0] = (...args) => _ctx.onGetUserInfo && _ctx.onGetUserInfo(...args)),
onContact: _cache[1] || (_cache[1] = (...args) => _ctx.onContact && _ctx.onContact(...args)),
onGetphonenumber: _cache[2] || (_cache[2] = (...args) => _ctx.onGetPhoneNumber && _ctx.onGetPhoneNumber(...args)),
onError: _cache[3] || (_cache[3] = (...args) => _ctx.onError && _ctx.onError(...args)),
onLaunchapp: _cache[4] || (_cache[4] = (...args) => _ctx.onLaunchApp && _ctx.onLaunchApp(...args)),
onOpensetting: _cache[5] || (_cache[5] = (...args) => _ctx.onOpenSetting && _ctx.onOpenSetting(...args)),
lang: _ctx.lang,
"session-from": _ctx.sessionFrom,
"send-message-title": _ctx.sendMessageTitle,
"send-message-path": _ctx.sendMessagePath,
"send-message-img": _ctx.sendMessageImg,
"show-message-card": _ctx.showMessageCard,
"app-parameter": _ctx.appParameter
}, vue.toDisplayString(_ctx.value), 45, ["data-index", "openType", "lang", "session-from", "send-message-title", "send-message-path", "send-message-img", "show-message-card", "app-parameter"])) : (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 4,
class: vue.normalizeClass(["u-text__value", [
_ctx.type && `u-text__value--${_ctx.type}`,
_ctx.lines && `u-line-${_ctx.lines}`
]]),
style: vue.normalizeStyle([$options.valueStyle])
},
vue.toDisplayString(_ctx.value),
7
/* TEXT, CLASS, STYLE */
)),
_ctx.suffixIcon ? (vue.openBlock(), vue.createElementBlock("view", {
key: 5,
class: "u-text__suffix-icon"
}, [
vue.createVNode(_component_u_icon, {
name: _ctx.suffixIcon,
customStyle: $options.addStyle(_ctx.iconStyle)
}, null, 8, ["name", "customStyle"])
])) : vue.createCommentVNode("v-if", true)
],
4
/* STYLE */
)) : vue.createCommentVNode("v-if", true);
}
const __easycom_1$1 = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$4], ["__scopeId", "data-v-0a574502"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-text/u-text.vue"]]);
const props$1 = {
props: {
// 头像图片路径(不能为相对路径)
src: {
type: String,
default: () => props$c.avatar.src
},
// 头像形状,circle-圆形,square-方形
shape: {
type: String,
default: () => props$c.avatar.shape
},
// 头像尺寸
size: {
type: [String, Number],
default: () => props$c.avatar.size
},
// 裁剪模式
mode: {
type: String,
default: () => props$c.avatar.mode
},
// 显示的文字
text: {
type: String,
default: () => props$c.avatar.text
},
// 背景色
bgColor: {
type: String,
default: () => props$c.avatar.bgColor
},
// 文字颜色
color: {
type: String,
default: () => props$c.avatar.color
},
// 文字大小
fontSize: {
type: [String, Number],
default: () => props$c.avatar.fontSize
},
// 显示的图标
icon: {
type: String,
default: () => props$c.avatar.icon
},
// 显示小程序头像,只对百度,微信,QQ小程序有效
mpAvatar: {
type: Boolean,
default: () => props$c.avatar.mpAvatar
},
// 是否使用随机背景色
randomBgColor: {
type: Boolean,
default: () => props$c.avatar.randomBgColor
},
// 加载失败的默认头像(组件有内置默认图片)
defaultUrl: {
type: String,
default: () => props$c.avatar.defaultUrl
},
// 如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间
colorIndex: {
type: [String, Number],
// 校验参数规则,索引在0-19之间
validator(n) {
return test.range(n, [0, 19]) || n === "";
},
default: () => props$c.avatar.colorIndex
},
// 组件标识符
name: {
type: String,
default: () => props$c.avatar.name
}
}
};
const base64Avatar = "data:image/jpg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjREMEQwRkY0RjgwNDExRUE5OTY2RDgxODY3NkJFODMxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjREMEQwRkY1RjgwNDExRUE5OTY2RDgxODY3NkJFODMxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NEQwRDBGRjJGODA0MTFFQTk5NjZEODE4Njc2QkU4MzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NEQwRDBGRjNGODA0MTFFQTk5NjZEODE4Njc2QkU4MzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAGBAQEBQQGBQUGCQYFBgkLCAYG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";
const _sfc_main$4 = {
name: "u-avatar",
mixins: [mpMixin, mixin$1, props$1],
data() {
return {
// 如果配置randomBgColor参数为true,在图标或者文字的模式下,会随机从中取出一个颜色值当做背景色
colors: [
"#ffb34b",
"#f2bba9",
"#f7a196",
"#f18080",
"#88a867",
"#bfbf39",
"#89c152",
"#94d554",
"#f19ec2",
"#afaae4",
"#e1b0df",
"#c38cc1",
"#72dcdc",
"#9acdcb",
"#77b1cc",
"#448aca",
"#86cefa",
"#98d1ee",
"#73d1f1",
"#80a7dc"
],
avatarUrl: this.src,
allowMp: false
};
},
watch: {
// 监听头像src的变化,赋值给内部的avatarUrl变量,因为图片加载失败时,需要修改图片的src为默认值
// 而组件内部不能直接修改props的值,所以需要一个中间变量
src: {
immediate: true,
handler(newVal) {
this.avatarUrl = newVal;
if (!newVal) {
this.errorHandler();
}
}
}
},
computed: {
imageStyle() {
const style = {};
return style;
}
},
created() {
this.init();
},
emits: ["click"],
methods: {
addStyle,
addUnit,
random,
init() {
},
// 判断传入的name属性,是否图片路径,只要带有"/"均认为是图片形式
isImg() {
return this.src.indexOf("/") !== -1;
},
// 图片加载时失败时触发
errorHandler() {
this.avatarUrl = this.defaultUrl || base64Avatar;
},
clickHandler() {
this.$emit("click", this.name);
}
}
};
function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_2);
const _component_u_text = resolveEasycom(vue.resolveDynamicComponent("u-text"), __easycom_1$1);
return vue.openBlock(), vue.createElementBlock(
"view",
{
class: vue.normalizeClass(["u-avatar", [`u-avatar--${_ctx.shape}`]]),
style: vue.normalizeStyle([{
backgroundColor: _ctx.text || _ctx.icon ? _ctx.randomBgColor ? $data.colors[_ctx.colorIndex !== "" ? _ctx.colorIndex : $options.random(0, 19)] : _ctx.bgColor : "transparent",
width: $options.addUnit(_ctx.size),
height: $options.addUnit(_ctx.size)
}, $options.addStyle(_ctx.customStyle)]),
onClick: _cache[1] || (_cache[1] = (...args) => $options.clickHandler && $options.clickHandler(...args))
},
[
vue.renderSlot(_ctx.$slots, "default", {}, () => [
_ctx.mpAvatar && $data.allowMp ? (vue.openBlock(), vue.createElementBlock(
vue.Fragment,
{ key: 0 },
[],
64
/* STABLE_FRAGMENT */
)) : _ctx.icon ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
key: 1,
name: _ctx.icon,
size: _ctx.fontSize,
color: _ctx.color
}, null, 8, ["name", "size", "color"])) : _ctx.text ? (vue.openBlock(), vue.createBlock(_component_u_text, {
key: 2,
text: _ctx.text,
size: _ctx.fontSize,
color: _ctx.color,
align: "center",
customStyle: "justify-content: center"
}, null, 8, ["text", "size", "color"])) : (vue.openBlock(), vue.createElementBlock("image", {
key: 3,
class: vue.normalizeClass(["u-avatar__image", [`u-avatar__image--${_ctx.shape}`]]),
src: $data.avatarUrl || _ctx.defaultUrl,
mode: _ctx.mode,
onError: _cache[0] || (_cache[0] = (...args) => $options.errorHandler && $options.errorHandler(...args)),
style: vue.normalizeStyle([{
width: $options.addUnit(_ctx.size),
height: $options.addUnit(_ctx.size)
}])
}, null, 46, ["src", "mode"]))
], true)
],
6
/* CLASS, STYLE */
);
}
const __easycom_0 = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$3], ["__scopeId", "data-v-34d954f9"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-avatar/u-avatar.vue"]]);
const props = {
props: {
// 绑定的值
modelValue: {
type: [String, Number],
default: () => props$c.input.value
},
// number-数字输入键盘,app-vue下可以输入浮点数,app-nvue和小程序平台下只能输入整数
// idcard-身份证输入键盘,微信、支付宝、百度、QQ小程序
// digit-带小数点的数字键盘,App的nvue页面、微信、支付宝、百度、头条、QQ小程序
// text-文本输入键盘
type: {
type: String,
default: () => props$c.input.type
},
// 如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true,
// 兼容性:微信小程序、百度小程序、字节跳动小程序、QQ小程序
fixed: {
type: Boolean,
default: () => props$c.input.fixed
},
// 是否禁用输入框
disabled: {
type: Boolean,
default: () => props$c.input.disabled
},
// 禁用状态时的背景色
disabledColor: {
type: String,
default: () => props$c.input.disabledColor
},
// 是否显示清除控件
clearable: {
type: Boolean,
default: () => props$c.input.clearable
},
// 是否密码类型
password: {
type: Boolean,
default: () => props$c.input.password
},
// 最大输入长度,设置为 -1 的时候不限制最大长度
maxlength: {
type: [String, Number],
default: () => props$c.input.maxlength
},
// 输入框为空时的占位符
placeholder: {
type: String,
default: () => props$c.input.placeholder
},
// 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/
placeholderClass: {
type: String,
default: () => props$c.input.placeholderClass
},
// 指定placeholder的样式
placeholderStyle: {
type: [String, Object],
default: () => props$c.input.placeholderStyle
},
// 是否显示输入字数统计,只在 type ="text"或type ="textarea"时有效
showWordLimit: {
type: Boolean,
default: () => props$c.input.showWordLimit
},
// 设置右下角按钮的文字,有效值:send|search|next|go|done,兼容性详见uni-app文档
// https://uniapp.dcloud.io/component/input
// https://uniapp.dcloud.io/component/textarea
confirmType: {
type: String,
default: () => props$c.input.confirmType
},
// 点击键盘右下角按钮时是否保持键盘不收起,H5无效
confirmHold: {
type: Boolean,
default: () => props$c.input.confirmHold
},
// focus时,点击页面的时候不收起键盘,微信小程序有效
holdKeyboard: {
type: Boolean,
default: () => props$c.input.holdKeyboard
},
// 自动获取焦点
// 在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。nvue 页面不支持,需使用组件的 focus()、blur() 方法控制焦点
focus: {
type: Boolean,
default: () => props$c.input.focus
},
// 键盘收起时,是否自动失去焦点,目前仅App3.0.0+有效
autoBlur: {
type: Boolean,
default: () => props$c.input.autoBlur
},
// 是否去掉 iOS 下的默认内边距,仅微信小程序,且type=textarea时有效
disableDefaultPadding: {
type: Boolean,
default: () => props$c.input.disableDefaultPadding
},
// 指定focus时光标的位置
cursor: {
type: [String, Number],
default: () => props$c.input.cursor
},
// 输入框聚焦时底部与键盘的距离
cursorSpacing: {
type: [String, Number],
default: () => props$c.input.cursorSpacing
},
// 光标起始位置,自动聚集时有效,需与selection-end搭配使用
selectionStart: {
type: [String, Number],
default: () => props$c.input.selectionStart
},
// 光标结束位置,自动聚集时有效,需与selection-start搭配使用
selectionEnd: {
type: [String, Number],
default: () => props$c.input.selectionEnd
},
// 键盘弹起时,是否自动上推页面
adjustPosition: {
type: Boolean,
default: () => props$c.input.adjustPosition
},
// 输入框内容对齐方式,可选值为:left|center|right
inputAlign: {
type: String,
default: () => props$c.input.inputAlign
},
// 输入框字体的大小
fontSize: {
type: [String, Number],
default: () => props$c.input.fontSize
},
// 输入框字体颜色
color: {
type: String,
default: () => props$c.input.color
},
// 输入框前置图标
prefixIcon: {
type: String,
default: () => props$c.input.prefixIcon
},
// 前置图标样式,对象或字符串
prefixIconStyle: {
type: [String, Object],
default: () => props$c.input.prefixIconStyle
},
// 输入框后置图标
suffixIcon: {
type: String,
default: () => props$c.input.suffixIcon
},
// 后置图标样式,对象或字符串
suffixIconStyle: {
type: [String, Object],
default: () => props$c.input.suffixIconStyle
},
// 边框类型,surround-四周边框,bottom-底部边框,none-无边框
border: {
type: String,
default: () => props$c.input.border
},
// 是否只读,与disabled不同之处在于disabled会置灰组件,而readonly则不会
readonly: {
type: Boolean,
default: () => props$c.input.readonly
},
// 输入框形状,circle-圆形,square-方形
shape: {
type: String,
default: () => props$c.input.shape
},
// 用于处理或者过滤输入框内容的方法
formatter: {
type: [Function, null],
default: () => props$c.input.formatter
},
// 是否忽略组件内对文本合成系统事件的处理
ignoreCompositionEvent: {
type: Boolean,
default: true
}
}
};
const _sfc_main$3 = {
name: "u-input",
mixins: [mpMixin, mixin$1, props],
data() {
return {
// 清除操作
clearInput: false,
// 输入框的值
innerValue: "",
// 是否处于获得焦点状态
focused: false,
// value是否第一次变化,在watch中,由于加入immediate属性,会在第一次触发,此时不应该认为value发生了变化
firstChange: true,
// value绑定值的变化是由内部还是外部引起的
changeFromInner: false,
// 过滤处理方法
innerFormatter: (value2) => value2
};
},
watch: {
modelValue: {
immediate: true,
handler(newVal, oldVal) {
this.innerValue = newVal;
this.firstChange = false;
this.changeFromInner = false;
}
}
},
computed: {
// 是否显示清除控件
isShowClear() {
const { clearable, readonly, focused, innerValue } = this;
return !!clearable && !readonly && !!focused && innerValue !== "";
},
// 组件的类名
inputClass() {
let classes = [], { border, disabled, shape } = this;
border === "surround" && (classes = classes.concat(["u-border", "u-input--radius"]));
classes.push(`u-input--${shape}`);
border === "bottom" && (classes = classes.concat([
"u-border-bottom",
"u-input--no-radius"
]));
return classes.join(" ");
},
// 组件的样式
wrapperStyle() {
const style = {};
if (this.disabled) {
style.backgroundColor = this.disabledColor;
}
if (this.border === "none") {
style.padding = "0";
} else {
style.paddingTop = "6px";
style.paddingBottom = "6px";
style.paddingLeft = "9px";
style.paddingRight = "9px";
}
return deepMerge$1(style, addStyle(this.customStyle));
},
// 输入框的样式
inputStyle() {
const style = {
color: this.color,
fontSize: addUnit(this.fontSize),
textAlign: this.inputAlign
};
return style;
}
},
emits: ["update:modelValue", "focus", "blur", "change", "confirm", "clear", "keyboardheightchange"],
methods: {
// 在微信小程序中,不支持将函数当做props参数,故只能通过ref形式调用
setFormatter(e) {
this.innerFormatter = e;
},
// 当键盘输入时,触发input事件
onInput(e) {
let { value: value2 = "" } = e.detail || {};
const formatter = this.formatter || this.innerFormatter;
const formatValue = formatter(value2);
this.innerValue = value2;
this.$nextTick(() => {
this.innerValue = formatValue;
this.valueChange();
});
},
// 输入框失去焦点时触发
onBlur(event) {
this.$emit("blur", event.detail.value);
sleep(150).then(() => {
this.focused = false;
});
formValidate(this, "blur");
},
// 输入框聚焦时触发
onFocus(event) {
this.focused = true;
this.$emit("focus");
},
// 点击完成按钮时触发
onConfirm(event) {
this.$emit("confirm", this.innerValue);
},
// 键盘高度发生变化的时候触发此事件
// 兼容性:微信小程序2.7.0+、App 3.1.0+
onkeyboardheightchange(event) {
this.$emit("keyboardheightchange", event);
},
// 内容发生变化,进行处理
valueChange() {
if (this.clearInput) {
this.innerValue = "";
this.clearInput = false;
}
const value2 = this.innerValue;
this.$nextTick(() => {
this.$emit("update:modelValue", value2);
this.changeFromInner = true;
this.$emit("change", value2);
formValidate(this, "change");
});
},
// 点击清除控件
onClear() {
this.clearInput = true;
this.innerValue = "";
this.$nextTick(() => {
this.valueChange();
this.$emit("clear");
});
},
/**
* 在安卓nvue上,事件无法冒泡
* 在某些时间,我们希望监听u-from-item的点击事件,此时会导致点击u-form-item内的u-input后
* 无法触发u-form-item的点击事件,这里通过手动调用u-form-item的方法进行触发
*/
clickHandler() {
}
}
};
function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_2);
return vue.openBlock(), vue.createElementBlock(
"view",
{
class: vue.normalizeClass(["u-input", $options.inputClass]),
style: vue.normalizeStyle([$options.wrapperStyle])
},
[
vue.createElementVNode("view", { class: "u-input__content" }, [
_ctx.prefixIcon || _ctx.$slots.prefix ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "u-input__content__prefix-icon"
}, [
vue.renderSlot(_ctx.$slots, "prefix", {}, () => [
vue.createVNode(_component_u_icon, {
name: _ctx.prefixIcon,
size: "18",
customStyle: _ctx.prefixIconStyle
}, null, 8, ["name", "customStyle"])
], true)
])) : vue.createCommentVNode("v-if", true),
vue.createElementVNode("view", {
class: "u-input__content__field-wrapper",
onClick: _cache[5] || (_cache[5] = (...args) => $options.clickHandler && $options.clickHandler(...args))
}, [
vue.createCommentVNode(" 根据uni-app的input组件文档,H5和APP中只要声明了password参数(无论true还是false),type均失效,此时\n 为了防止type=number时,又存在password属性,type无效,此时需要设置password为undefined\n "),
vue.createElementVNode("input", {
class: "u-input__content__field-wrapper__field",
style: vue.normalizeStyle([$options.inputStyle]),
type: _ctx.type,
focus: _ctx.focus,
cursor: _ctx.cursor,
value: $data.innerValue,
"auto-blur": _ctx.autoBlur,
disabled: _ctx.disabled || _ctx.readonly,
maxlength: _ctx.maxlength,
placeholder: _ctx.placeholder,
"placeholder-style": _ctx.placeholderStyle,
"placeholder-class": _ctx.placeholderClass,
"confirm-type": _ctx.confirmType,
"confirm-hold": _ctx.confirmHold,
"hold-keyboard": _ctx.holdKeyboard,
"cursor-spacing": _ctx.cursorSpacing,
"adjust-position": _ctx.adjustPosition,
"selection-end": _ctx.selectionEnd,
"selection-start": _ctx.selectionStart,
password: _ctx.password || _ctx.type === "password" || false,
ignoreCompositionEvent: _ctx.ignoreCompositionEvent,
onInput: _cache[0] || (_cache[0] = (...args) => $options.onInput && $options.onInput(...args)),
onBlur: _cache[1] || (_cache[1] = (...args) => $options.onBlur && $options.onBlur(...args)),
onFocus: _cache[2] || (_cache[2] = (...args) => $options.onFocus && $options.onFocus(...args)),
onConfirm: _cache[3] || (_cache[3] = (...args) => $options.onConfirm && $options.onConfirm(...args)),
onKeyboardheightchange: _cache[4] || (_cache[4] = (...args) => $options.onkeyboardheightchange && $options.onkeyboardheightchange(...args))
}, null, 44, ["type", "focus", "cursor", "value", "auto-blur", "disabled", "maxlength", "placeholder", "placeholder-style", "placeholder-class", "confirm-type", "confirm-hold", "hold-keyboard", "cursor-spacing", "adjust-position", "selection-end", "selection-start", "password", "ignoreCompositionEvent"])
]),
$options.isShowClear ? (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "u-input__content__clear",
onClick: _cache[6] || (_cache[6] = (...args) => $options.onClear && $options.onClear(...args))
}, [
vue.createVNode(_component_u_icon, {
name: "close",
size: "11",
color: "#ffffff",
customStyle: "line-height: 12px"
})
])) : vue.createCommentVNode("v-if", true),
_ctx.suffixIcon || _ctx.$slots.suffix ? (vue.openBlock(), vue.createElementBlock("view", {
key: 2,
class: "u-input__content__subfix-icon"
}, [
vue.renderSlot(_ctx.$slots, "suffix", {}, () => [
vue.createVNode(_component_u_icon, {
name: _ctx.suffixIcon,
size: "18",
customStyle: _ctx.suffixIconStyle
}, null, 8, ["name", "customStyle"])
], true)
])) : vue.createCommentVNode("v-if", true)
])
],
6
/* CLASS, STYLE */
);
}
const __easycom_1 = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$2], ["__scopeId", "data-v-df79975b"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-input/u-input.vue"]]);
const _imports_0$1 = "/static/images/top.png";
const _imports_1$1 = "/static/images/up-down.png";
const _imports_2$1 = "/static/images/wechat.png";
var wsUrl$1 = "ws://192.168.10.125:7114/app/webSocket";
var pingpangTimes$1 = null;
var isSocketOpen$1 = false;
var socket$1 = null;
const _sfc_main$2 = {
data() {
return {
icon: "公告:",
icon2: "广播:",
text1: "组件功能丰富多端兼容让您快速集成开箱即用",
text2: "丰富多端兼容让您快速集成开箱即用",
srcAvatar: "",
acttab: 0,
value: "",
talkdisabled: false,
//是否禁用
placeholderText: "请输入内容",
showadd: false,
autoplay: true,
//自动播放
userinfo: "",
//用户信息
path: "http://192.168.10.150/dev-api",
livedata: {},
bufferRate: 0,
// 缓冲时间
playDuration: 0,
//视频播放时间
videoContext: "",
thistime: uni.$u.timeFormat(/* @__PURE__ */ new Date(), "yyyy-mm-dd hh:MM:ss"),
codeimg: "",
userid: "4",
liveId: "5",
upDown: true,
//是否视频显示隐藏
isLongPress: false,
// 是否长按
timeout: null,
// 计时器
list1: [
{
name: "讨论"
},
// {
// name: '问答'
// },
{
name: "资料"
}
],
talklist: [],
scrollIntoView: "",
showWelcomeMessage: false,
messageContent: ""
};
},
mounted() {
this.initSocket();
var that = this;
uni.$on("initSocket", () => {
that.initSocket();
});
uni.$on("sendMsg", (item) => {
that.sendMsg(item);
});
uni.$on("closeWebSocket", () => {
that.closeWebSocket();
});
this.getEWechatSdk();
this.userinfo = JSON.parse(uni.getStorageSync("userInfo"));
this.getliving();
this.gettalklist();
},
onReady: function(res) {
this.videoContext = uni.createVideoContext("myVideo");
},
onLoad() {
},
methods: {
gettalklist() {
const param = {
id: this.liveId
};
gettextlist(param).then((res) => {
if (res.code == 200) {
this.talklist = res.data;
this.$nextTick(() => {
this.scrollIntoView = `list_${this.talklist.length - 1}`;
});
}
});
},
longPress() {
this.timeout = setTimeout(() => {
this.isLongPress = true;
uni.saveImageToPhotosAlbum({
filePath: this.livedata.qwQrCode,
// 图片的本地路径或网络路径
success: () => {
uni.showToast({
title: "保存成功"
});
},
fail: () => {
uni.showToast({
title: "保存失败",
icon: "none"
});
}
});
}, 500);
},
cancelLongPress() {
clearTimeout(this.timeout);
this.isLongPress = false;
},
getliving() {
this.gettalklist();
const param = {
id: this.liveId
};
getlive(param).then((res) => {
if (res.code == 200) {
this.livedata = res.data;
this.codeimg = res.data.qwQrCode;
if (this.livedata.status == 2) {
this.autoplay = true;
this.videoContext.seek(this.livedata.nowDuration);
} else {
this.autoplay = false;
this.placeholderText = "直播开始才能发言讨论";
this.talkdisabled = true;
}
} else {
uni.showToast({
title: res.msg,
icon: "none",
duration: 2e3
});
}
});
},
addwechat() {
this.showadd = !this.showadd;
},
open() {
},
close() {
this.showadd = !this.showadd;
},
tabClick(e) {
this.acttab = e.index;
if (e.index == 0) {
this.$nextTick(() => {
this.gettalklist();
});
}
},
getEWechatSdk() {
let eWechatSdk = "";
if (/(Android)/i.test(navigator.userAgent)) {
eWechatSdk = "jWeixin";
} else if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
eWechatSdk = "wx";
} else {
eWechatSdk = "jWeixin";
}
uni.setStorageSync("wxSdk", eWechatSdk);
},
closeWebSocket() {
if (socket$1 != null) {
uni.closeSocket();
}
clearInterval(pingpangTimes$1);
},
reConnect() {
var that = this;
try {
uni.closeSocket();
} catch (e) {
}
setTimeout(function() {
that.initSocket();
}, 1e4);
},
initSocket() {
var that = this;
socket$1 = uni.connectSocket({
// url: wsUrl+"?userId=40486&liveId=2",
url: wsUrl$1 + "?userId=" + this.userid + "&liveId=" + this.liveId + "&AppToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI0IiwiaWF0IjoxNzQwNzIxMDQ1LCJleHAiOjE3NDEzMjU4NDV9.PgS83JTMSJgVFD6vGAhUsEPbS6Az4yMyX8wVug61TZNTB3092CtvANo-AB9ZG4NdSBLgLrf4litM3vvTk-FK0g",
multiple: true,
success: (res) => {
clearInterval(pingpangTimes$1);
uni.onSocketMessage((res2) => {
const redata = JSON.parse(res2.data);
this.talklist.push(redata.data);
this.$nextTick(() => {
this.scrollIntoView = `list_${this.talklist.length - 1}`;
});
if (redata.cmd == "deleteId") {
uni.$emit("deleteId");
} else if (redata.cmd == "init") {
uni.$emit("init", redata.data);
} else if (redata.cmd == "reload") {
uni.$emit("reload");
} else if (redata.cmd == "sendStatus") {
uni.$emit("sendStatus", redata.data);
} else if (redata.data.cmd == "entry") {
this.showWelcomeMessage = true;
uni.$emit("entry", redata.data);
formatAppLog("log", "at pages/home/live.vue:338", redata.data);
}
});
},
error: (res) => {
uni.$emit("websocket", 0);
}
});
uni.onSocketOpen(() => {
isSocketOpen$1 = true;
formatAppLog("log", "at pages/home/live.vue:351", "WebSocket连接已打开!!");
uni.showToast({
title: "插件已打开",
icon: "none"
});
});
uni.onSocketClose(() => {
isSocketOpen$1 = false;
clearInterval(pingpangTimes$1);
formatAppLog("log", "at pages/home/live.vue:362", "WebSocket连接已关闭!");
uni.showToast({
title: "插件离线",
icon: "none"
});
that.reConnect();
});
uni.onSocketError(() => {
isSocketOpen$1 = false;
clearInterval(pingpangTimes$1);
formatAppLog("log", "at pages/home/live.vue:375", "WebSocket连接打开失败");
uni.showToast({
title: "插件离线",
icon: "none"
});
uni.showModal({
content: "聊天连接失败是否重新尝试连接",
success() {
that.reConnect();
}
});
});
},
sendMsg() {
if (isSocketOpen$1) {
const data = {
liveId: this.livedata.liveId,
userId: this.userinfo.userId,
userType: 0,
cmd: "sendMsg",
msg: this.value,
nickName: this.userinfo.nickName,
avatar: this.userinfo.avatar
};
if (this.value == "") {
uni.showToast({
title: "不能发送空消息",
icon: "none"
});
} else {
socket$1.send({
data: JSON.stringify(data),
success: () => {
formatAppLog("log", "at pages/home/live.vue:411", "发送成功");
this.value = "";
},
fail: () => {
formatAppLog("log", "at pages/home/live.vue:415", "发送失败");
}
});
}
}
}
}
};
function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_tabs = resolveEasycom(vue.resolveDynamicComponent("u-tabs"), __easycom_0$1);
const _component_u_avatar = resolveEasycom(vue.resolveDynamicComponent("u-avatar"), __easycom_0);
const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_1);
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_2);
const _component_u_popup = resolveEasycom(vue.resolveDynamicComponent("u-popup"), __easycom_3);
return vue.openBlock(), vue.createElementBlock("view", { class: "live column flex-1" }, [
$data.upDown ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "videolist"
}, [
vue.createElementVNode("view", { class: "vedio" }, [
vue.createCommentVNode(` \r
\r
`),
vue.createElementVNode("video", {
id: "myVideo",
class: "videotop",
src: $data.path + $data.livedata.videoUrl,
autoplay: $data.autoplay,
controls: false,
poster: $data.livedata.liveImgUrl,
"vslide-gesture-in-fullscreen": "true",
"show-center-play-btn": false
}, null, 8, ["src", "autoplay", "poster"])
]),
!$data.autoplay ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "popup-video"
}, [
$data.livedata.status == 1 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "fs36 bold"
}, "——直播还未开始——")) : vue.createCommentVNode("v-if", true),
$data.livedata.status == 3 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "fs36 bold"
}, "——直播已经结束——")) : vue.createCommentVNode("v-if", true),
vue.createElementVNode("view", { class: "fs28 mtb20" }, "了解更多,点击下方联系老师"),
vue.createElementVNode("view", {
class: "more",
onClick: _cache[0] || (_cache[0] = ($event) => $data.showadd = !$data.showadd)
}, "联系老师")
])) : vue.createCommentVNode("v-if", true)
])) : vue.createCommentVNode("v-if", true),
vue.createElementVNode("view", {
class: "justify-between align-center bgf",
style: { "border-bottom": "#dedede solid 2rpx" }
}, [
vue.createVNode(_component_u_tabs, {
list: $data.list1,
onClick: $options.tabClick,
inactiveStyle: "color:#888",
itemStyle: "width:120rpx;height: 80rpx;"
}, null, 8, ["list", "onClick"]),
vue.createElementVNode("view", { class: "justify-around flex-1 align-center" }, [
vue.createElementVNode("view", {
class: "reflash",
onClick: _cache[1] || (_cache[1] = ($event) => $options.getliving())
}, "刷新"),
vue.withDirectives(vue.createElementVNode(
"image",
{
src: _imports_0$1,
class: "wh48",
onClick: _cache[2] || (_cache[2] = ($event) => $data.upDown = !$data.upDown)
},
null,
512
/* NEED_PATCH */
), [
[vue.vShow, $data.upDown]
]),
vue.withDirectives(vue.createElementVNode(
"image",
{
src: _imports_1$1,
class: "wh48",
onClick: _cache[3] || (_cache[3] = ($event) => $data.upDown = !$data.upDown)
},
null,
512
/* NEED_PATCH */
), [
[vue.vShow, !$data.upDown]
])
])
]),
$data.acttab == 0 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "talkbox column flex-1 hidden",
style: { "height": "100%" }
}, [
vue.createCommentVNode(` `),
vue.createElementVNode("scroll-view", {
"scroll-y": "true",
class: "talk p20 scrolly flex-1 column",
style: { "width": "calc(100% - 40rpx)", "height": "calc(100% - 40rpx)" },
"scroll-into-view": $data.scrollIntoView
}, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.talklist, (item, index2) => {
return vue.withDirectives((vue.openBlock(), vue.createElementBlock("view", {
class: "list justify-start",
key: item.index,
id: `list_${index2}`
}, [
vue.createVNode(_component_u_avatar, {
src: item.avatar,
size: "30"
}, null, 8, ["src"]),
vue.createElementVNode("view", { class: "ml16" }, [
vue.createElementVNode("view", { class: "fs24" }, [
item.userId == $data.userinfo.userId && item.cmd == "sendMsg" ? (vue.openBlock(), vue.createElementBlock("text", {
key: 0,
style: { "color": "#3fc69b", "transform": "scale(0.8)", "display": "inline-block" }
}, "[ 我 ]")) : vue.createCommentVNode("v-if", true),
item.userType == 1 ? (vue.openBlock(), vue.createElementBlock("text", {
key: 1,
style: { "color": "#c84e1e", "transform": "scale(0.8)", "display": "inline-block" }
}, " [ 管理员 ]")) : vue.createCommentVNode("v-if", true),
vue.createElementVNode(
"text",
null,
vue.toDisplayString(item.nickName),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "talktext bgf p20 mt12" }, [
vue.createElementVNode(
"view",
{ class: "fs24" },
vue.toDisplayString(item.msg),
1
/* TEXT */
)
])
])
], 8, ["id"])), [
[vue.vShow, item.cmd == "sendMsg"]
]);
}),
128
/* KEYED_FRAGMENT */
)),
$data.showWelcomeMessage ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "welcome-message"
}, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.talklist, (item, index2) => {
return vue.withDirectives((vue.openBlock(), vue.createElementBlock("view", {
class: "list justify-start",
key: item.index,
id: `list_${index2}`
}, [
vue.createElementVNode("view", { class: "ml16" }, [
vue.createElementVNode("view", { class: "fs24" }, [
item.userType == 1 ? (vue.openBlock(), vue.createElementBlock("text", {
key: 0,
style: { "color": "#c84e1e", "transform": "scale(0.8)", "display": "inline-block" }
}, " [ 管理员 ]")) : vue.createCommentVNode("v-if", true)
]),
vue.createElementVNode("view", { class: "talktext bgf p20 mt12 justify-start" }, [
vue.createElementVNode(
"text",
{
style: { "color": "#9e5584" },
class: "fs24"
},
vue.toDisplayString(item.nickName),
1
/* TEXT */
),
vue.createElementVNode(
"view",
{ class: "fs24 flex-1" },
vue.toDisplayString(item.msg) + "直播间",
1
/* TEXT */
)
])
])
], 8, ["id"])), [
[vue.vShow, item.cmd == "entry" || item.cmd == "out"]
]);
}),
128
/* KEYED_FRAGMENT */
))
])) : vue.createCommentVNode("v-if", true)
], 8, ["scroll-into-view"]),
vue.createElementVNode("view", { class: "pb90 mb20" }),
vue.createElementVNode("view", { class: "bot_talk bgf" }, [
vue.createVNode(_component_u_input, {
placeholder: $data.placeholderText,
border: "none",
customStyle: "background:#f1f7f7;padding:12rpx;padding-left:40rpx",
modelValue: $data.value,
"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $data.value = $event),
shape: "circle"
}, null, 8, ["placeholder", "modelValue"]),
vue.createCommentVNode(" :disabled='talkdisabled'> "),
vue.createElementVNode("view", {
class: "sent ml20",
onClick: _cache[5] || (_cache[5] = (...args) => $options.sendMsg && $options.sendMsg(...args))
}, "发送")
])
])) : vue.createCommentVNode("v-if", true),
vue.createCommentVNode(' \r\n 问答\r\n '),
$data.acttab == 1 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 2,
class: "informationbox"
}, [
vue.createElementVNode("view", { class: "p20 bgf m20 radius20" }, [
vue.createElementVNode("view", {
innerHTML: $data.livedata.liveDesc
}, null, 8, ["innerHTML"]),
vue.withDirectives(vue.createElementVNode(
"view",
null,
"暂无资料",
512
/* NEED_PATCH */
), [
[vue.vShow, !$data.livedata.liveDesc]
])
])
])) : vue.createCommentVNode("v-if", true),
vue.createElementVNode("view", {
class: "invite-member",
onClick: _cache[6] || (_cache[6] = (...args) => $options.addwechat && $options.addwechat(...args))
}, [
vue.createElementVNode("image", {
src: _imports_2$1,
class: "wh80 weimg"
}),
vue.createElementVNode("view", { class: "addwe" }, "加微信")
]),
vue.createElementVNode("view", { class: "" }, [
vue.createVNode(_component_u_popup, {
show: $data.showadd,
onClose: $options.close,
onOpen: $options.open,
round: "20rpx",
bgColor: "#fffee1"
}, {
default: vue.withCtx(() => [
vue.createElementVNode("view", { class: "addchat p20" }, [
vue.createElementVNode("view", { class: "u-flex-row-reverse u-flex" }, [
vue.createVNode(_component_u_icon, {
name: "close",
size: "18",
onClick: _cache[7] || (_cache[7] = ($event) => $data.showadd = !$data.showadd)
})
]),
vue.createElementVNode("view", { class: "column align-center" }, [
vue.createElementVNode("view", {
class: "fs36",
style: { "color": "#ff5c03" }
}, "扫码添加助教老师"),
vue.createElementVNode("view", { class: "fs28 color6" }, "扫码添加助教老师"),
vue.createElementVNode("view", {
class: "p10 mt40",
style: { "border": "#ff5c03 solid 2rpx" }
}, [
vue.createElementVNode("image", {
src: $data.codeimg,
class: "wh180",
onTouchstart: _cache[8] || (_cache[8] = (...args) => $options.longPress && $options.longPress(...args)),
onTouchend: _cache[9] || (_cache[9] = (...args) => $options.cancelLongPress && $options.cancelLongPress(...args))
}, null, 40, ["src"])
]),
vue.createElementVNode("view", { class: "color6 mt20" }, "长按识别二维码")
])
])
]),
_: 1
/* STABLE */
}, 8, ["show", "onClose", "onOpen"])
])
]);
}
const PagesHomeLive = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$1], ["__scopeId", "data-v-81fcd0c9"], ["__file", "F:/project/liveH5-v3/pages/home/live.vue"]]);
const _imports_0 = "/static/images/more-icon.png";
const _imports_1 = "/static/images/redbag.png";
const _imports_2 = "/static/images/dianzan.png";
var wsUrl = "ws://192.168.10.125:17114/app/webSocket";
var pingpangTimes = null;
var isSocketOpen = false;
var socket = null;
const _sfc_main$1 = {
data() {
return {
liveId: "9",
userid: "4",
livedata: {},
codeimg: "",
placeholderText: "请输入讨论内容",
isZoom: false,
//点赞按钮控制是否放大
userinfo: "",
//用户信息
path: "http://192.168.10.150/dev-api",
value: "",
talkdisabled: false,
//输入框是否禁用
autoplay: false,
//视频自动播放
showadd: false,
talklist: [],
scrollIntoView: "",
bufferRate: 0,
//视频缓冲时间
playDuration: 0,
//视频播放时间
videoContext: "",
thistime: uni.$u.timeFormat(/* @__PURE__ */ new Date(), "yyyy-mm-dd hh:MM:ss"),
upDown: true,
//是否视频显示隐藏
isLongPress: false,
// 是否长按
timeout: null,
// 计时器
showWelcomeMessage: false,
isSubmit: false,
messageContent: "",
showziliao: false,
isScreen: true,
showAnswer: false,
//展示答题
Answerlistall: {},
//所有题目
answerlist: {},
//当前题目
answerfrist: 0,
//当前选择
checkboxValue: [],
//多选数据
checkboxFormValue: "",
//多选数据
allAnswerLists: []
// 新增:存储所有题目列表
};
},
mounted() {
this.initSocket();
var that = this;
uni.$on("initSocket", () => {
that.initSocket();
});
uni.$on("sendMsg", (item) => {
that.sendMsg(item);
});
uni.$on("closeWebSocket", () => {
that.closeWebSocket();
});
this.getEWechatSdk();
this.getliving();
this.gettalklist();
this.userinfo = JSON.parse(uni.getStorageSync("userInfo"));
this.getAnswerlists();
},
onReady: function(res) {
this.videoContext = uni.createVideoContext("myVideo");
},
methods: {
submitAnswers() {
if (this.isSubmit)
return;
this.isSubmit = true;
const data = {
questionId: this.answerlist.id,
answer: this.checkboxFormValue
};
submitAnswer(data).then((res) => {
if (res.code == 200) {
uni.showToast({
title: res.msg,
icon: "none"
});
}
if (this.answerfrist < this.Answerlistall - 1) {
this.answerfrist++;
this.answerlist = this.allAnswerLists[this.answerfrist];
this.answerlist.content = JSON.parse(this.answerlist.content);
} else {
uni.showToast({ title: "已是最后一题", icon: "none" });
this.showAnswer = false;
}
this.checkboxValue = [];
this.checkboxFormValue = "";
uni.showToast({ title: res.msg, icon: "none" });
}).finally((e) => {
this.isSubmit = false;
});
},
handleCheckboxSelect(value2) {
const index2 = this.checkboxValue.indexOf(value2);
formatAppLog("log", "at pages/home/living.vue:261", value2);
if (this.answerlist.type == 1) {
this.checkboxValue = [value2];
this.checkboxFormValue = this.checkboxValue.join(",");
this.submitAnswers();
formatAppLog("log", "at pages/home/living.vue:273", this.checkboxValue);
} else if (this.answerlist.type == 2) {
if (index2 > -1) {
this.checkboxValue.splice(index2, 1);
this.checkboxFormValue = this.checkboxValue.join(",");
} else {
this.checkboxValue.push(value2);
this.checkboxFormValue = this.checkboxValue.join(",");
}
formatAppLog("log", "at pages/home/living.vue:282", this.checkboxFormValue);
}
},
getAnswerlists() {
const data = {
liveId: this.liveId
};
getAnswerlist(data).then((res) => {
if (res.code == 200) {
if (res.data.length > 0) {
this.allAnswerLists = res.data;
this.Answerlistall = res.data.length;
if (this.allAnswerLists.length > 0) {
this.answerlist = this.allAnswerLists[0];
this.answerlist.content = JSON.parse(this.allAnswerLists[0].content);
}
this.showAnswer = true;
} else {
this.showAnswer = false;
}
}
});
},
gettalklist() {
const param = {
id: this.liveId
};
gettextlist(param).then((res) => {
if (res.code == 200) {
this.talklist = res.data;
this.$nextTick(() => {
this.scrollIntoView = `list_${this.talklist.length - 1}`;
});
}
});
},
open() {
},
close() {
this.showadd = !this.showadd;
},
closes() {
this.showziliao = !this.showziliao;
},
closest() {
this.showAnswer = !this.showAnswer;
},
longPress() {
this.timeout = setTimeout(() => {
this.isLongPress = true;
uni.saveImageToPhotosAlbum({
filePath: this.livedata.qwQrCode,
// 图片的本地路径或网络路径
success: () => {
uni.showToast({
title: "保存成功"
});
},
fail: () => {
uni.showToast({
title: "",
icon: "none"
});
}
});
}, 500);
},
cancelLongPress() {
clearTimeout(this.timeout);
this.isLongPress = false;
},
// 触摸开始
handleTouchStart() {
this.isZoom = true;
},
// 触摸结束
handleTouchEnd() {
this.isZoom = false;
},
getliving() {
const param = {
id: this.liveId
};
getlive(param).then((res) => {
if (res.code == 200) {
this.livedata = res.data;
this.codeimg = res.data.qwQrCode;
if (this.livedata.status == 2) {
this.autoplay = true;
this.videoContext.seek(this.livedata.nowDuration);
} else {
this.autoplay = false;
this.placeholderText = "直播开始才能发言讨论";
this.talkdisabled = true;
}
formatAppLog("log", "at pages/home/living.vue:381", this.autoplay);
} else {
uni.showToast({
title: res.msg,
icon: "none",
duration: 2e3
});
}
});
},
getEWechatSdk() {
let eWechatSdk = "";
if (/(Android)/i.test(navigator.userAgent)) {
eWechatSdk = "jWeixin";
} else if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
eWechatSdk = "wx";
} else {
eWechatSdk = "jWeixin";
}
uni.setStorageSync("wxSdk", eWechatSdk);
},
closeWebSocket() {
if (socket != null) {
uni.closeSocket();
}
clearInterval(pingpangTimes);
},
reConnect() {
var that = this;
try {
uni.closeSocket();
} catch (e) {
}
setTimeout(function() {
that.initSocket();
}, 1e4);
},
initSocket() {
var that = this;
socket = uni.connectSocket({
// url: wsUrl+"?userId=40486&liveId=2",
url: wsUrl + "?userId=" + this.userid + "&liveId=" + this.liveId + "&AppToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI0IiwiaWF0IjoxNzQwNzIxMDQ1LCJleHAiOjE3NDEzMjU4NDV9.PgS83JTMSJgVFD6vGAhUsEPbS6Az4yMyX8wVug61TZNTB3092CtvANo-AB9ZG4NdSBLgLrf4litM3vvTk-FK0g",
multiple: true,
success: (res) => {
clearInterval(pingpangTimes);
uni.onSocketMessage((res2) => {
const redata = JSON.parse(res2.data);
this.talklist.push(redata.data);
this.$nextTick(() => {
this.scrollIntoView = `list_${this.talklist.length - 1}`;
});
if (redata.cmd == "deleteId") {
uni.$emit("deleteId");
} else if (redata.cmd == "init") {
uni.$emit("init", redata.data);
} else if (redata.cmd == "reload") {
uni.$emit("reload");
} else if (redata.data.cmd == "sendStatus") {
uni.$emit("sendStatus", redata.data);
} else if (redata.data.cmd == "entry") {
this.showWelcomeMessage = true;
uni.$emit("entry", redata.data);
}
});
},
error: (res) => {
uni.$emit("websocket", 0);
}
});
uni.onSocketOpen(() => {
isSocketOpen = true;
formatAppLog("log", "at pages/home/living.vue:469", "WebSocket连接已打开!!");
uni.showToast({
title: "插件已打开",
icon: "none"
});
});
uni.onSocketClose(() => {
isSocketOpen = false;
clearInterval(pingpangTimes);
formatAppLog("log", "at pages/home/living.vue:480", "WebSocket连接已关闭!");
uni.showToast({
title: "插件离线",
icon: "none"
});
that.reConnect();
});
uni.onSocketError(() => {
isSocketOpen = false;
clearInterval(pingpangTimes);
formatAppLog("log", "at pages/home/living.vue:493", "WebSocket连接打开失败");
uni.showToast({
title: "插件离线",
icon: "none"
});
uni.showModal({
content: "聊天连接失败是否重新尝试连接",
success() {
that.reConnect();
}
});
});
},
sendMsg() {
if (isSocketOpen) {
const data = {
liveId: this.livedata.liveId,
userId: this.userinfo.userId,
userType: 0,
cmd: "sendMsg",
msg: this.value,
nickName: this.userinfo.nickName,
avatar: this.userinfo.avatar
};
if (this.value == "") {
uni.showToast({
title: "不能发送空消息",
icon: "none"
});
} else {
socket.send({
data: JSON.stringify(data),
success: () => {
formatAppLog("log", "at pages/home/living.vue:529", "发送成功");
this.value = "";
},
fail: () => {
formatAppLog("log", "at pages/home/living.vue:533", "发送失败");
}
});
}
}
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_avatar = resolveEasycom(vue.resolveDynamicComponent("u-avatar"), __easycom_0);
const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_1);
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_2);
const _component_u_popup = resolveEasycom(vue.resolveDynamicComponent("u-popup"), __easycom_3);
return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [
!$data.autoplay ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "popup-video"
}, [
$data.livedata.status == 1 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "fs36 bold"
}, "——直播还未开始——")) : vue.createCommentVNode("v-if", true),
$data.livedata.status == 3 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "fs36 bold"
}, "——直播已经结束——")) : vue.createCommentVNode("v-if", true),
vue.createElementVNode("view", { class: "fs28 mtb20" }, "了解更多,点击下方联系老师"),
vue.createElementVNode("view", {
class: "more",
onClick: _cache[0] || (_cache[0] = ($event) => $data.showadd = !$data.showadd)
}, "联系老师")
])) : vue.createCommentVNode("v-if", true),
vue.createCommentVNode(` `),
vue.createElementVNode("view", { class: "blackbg" }),
vue.createElementVNode("view", { class: "content" }, [
vue.createCommentVNode(" 页面内容 "),
vue.createElementVNode("view", {
class: "flex-1",
style: { "position": "fixed", "top": "0", "z-index": "5" }
}, [
vue.createElementVNode("view", { class: "justify-start align-center pl30 mt30" }, [
vue.createVNode(_component_u_avatar, {
src: $data.livedata.liveImgUrl
}, null, 8, ["src"]),
vue.createElementVNode(
"view",
{ class: "colorf ml20" },
vue.toDisplayString($data.livedata.liveName),
1
/* TEXT */
)
])
]),
vue.createElementVNode("view", {
class: "videolist",
style: { "margin": "auto 0" }
}, [
vue.createElementVNode(
"view",
{
class: "vedio",
style: vue.normalizeStyle({ height: $data.isScreen ? "100vh" : "" })
},
[
vue.createElementVNode("video", {
id: "myVideo",
class: "videotop",
src: $data.livedata.videoUrl,
autoplay: $data.autoplay,
controls: false,
"vslide-gesture-in-fullscreen": "true",
"show-center-play-btn": false
}, null, 8, ["src", "autoplay"])
],
4
/* STYLE */
)
]),
vue.createElementVNode("view", {
class: "pb40 mt90",
style: { "position": "fixed", "bottom": "0" }
}, [
vue.createElementVNode("view", { class: "w100 h300 mt20" }, [
vue.createElementVNode("scroll-view", {
"scroll-y": "true",
class: "talk p20 scrolly flex-1 column",
style: { "width": "calc(100% - 40rpx)", "height": "calc(100% - 40rpx)" },
"scroll-into-view": $data.scrollIntoView
}, [
vue.createElementVNode("view", null, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.talklist, (item, index2) => {
return vue.withDirectives((vue.openBlock(), vue.createElementBlock("view", {
class: "list justify-start",
key: item.index,
id: `list_${index2}`
}, [
vue.createElementVNode("view", { class: "talk-list ml16 justify-start" }, [
vue.createElementVNode("view", { class: "fs24" }, [
vue.createElementVNode(
"text",
{ class: "fs24 colorf" },
vue.toDisplayString(item.msg) + "直播间" + vue.toDisplayString($data.messageContent),
1
/* TEXT */
)
])
])
], 8, ["id"])), [
[vue.vShow, item.cmd == "announcement"]
]);
}),
128
/* KEYED_FRAGMENT */
))
]),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.talklist, (item, index2) => {
return vue.withDirectives((vue.openBlock(), vue.createElementBlock("view", {
class: "list justify-start",
key: item.index,
id: `list_${index2}`
}, [
vue.createElementVNode("view", { class: "talk-list ml16 justify-start" }, [
vue.createElementVNode("view", { class: "fs24" }, [
item.userId == $data.userinfo.userId && item.cmd == "sendMsg" ? (vue.openBlock(), vue.createElementBlock("text", {
key: 0,
style: { "color": "#3fc69b", "transform": "scale(0.8)", "display": "inline-block" }
}, "[ 我 ]")) : vue.createCommentVNode("v-if", true),
item.userType == 1 ? (vue.openBlock(), vue.createElementBlock("text", {
key: 1,
style: { "color": "#c84e1e", "transform": "scale(0.8)", "display": "inline-block" }
}, " [ 管理员 ]")) : vue.createCommentVNode("v-if", true),
vue.createElementVNode(
"text",
{ style: { "color": "#bcbcbc" } },
vue.toDisplayString(item.nickName) + ":",
1
/* TEXT */
),
vue.createElementVNode(
"text",
{ class: "fs24 colorf" },
vue.toDisplayString(item.msg),
1
/* TEXT */
)
])
])
], 8, ["id"])), [
[vue.vShow, item.cmd == "sendMsg"]
]);
}),
128
/* KEYED_FRAGMENT */
)),
$data.showWelcomeMessage ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "welcome-message"
}, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.talklist, (item, index2) => {
return vue.withDirectives((vue.openBlock(), vue.createElementBlock("view", {
class: "list justify-start",
key: item.index,
id: `list_${index2}`
}, [
vue.createElementVNode("view", { class: "talk-list ml16 justify-start" }, [
vue.createElementVNode("view", { class: "fs24" }, [
vue.createElementVNode(
"text",
{ style: { "color": "#9e5584" } },
vue.toDisplayString(item.nickName),
1
/* TEXT */
),
vue.createElementVNode(
"text",
{ class: "fs24 color9" },
vue.toDisplayString(item.msg) + "直播间" + vue.toDisplayString($data.messageContent),
1
/* TEXT */
)
])
])
], 8, ["id"])), [
[vue.vShow, item.cmd == "entry" || item.cmd == "out"]
]);
}),
128
/* KEYED_FRAGMENT */
))
])) : vue.createCommentVNode("v-if", true)
], 8, ["scroll-into-view"])
]),
vue.createElementVNode("view", { class: "justify-between" }, [
vue.createVNode(_component_u_input, {
placeholder: $data.placeholderText,
border: "none",
customStyle: "background:rgba(255,255,255,0.2);font-size:24rpx;\r\n padding:12rpx;padding-left:40rpx;width:300rpx",
modelValue: $data.value,
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $data.value = $event),
shape: "circle",
color: "#fff",
placeholderStyle: "color:#e7e7e7",
class: "ml20"
}, null, 8, ["placeholder", "modelValue"]),
vue.createCommentVNode(" :disabled='talkdisabled' > "),
vue.createElementVNode("view", {
onClick: _cache[2] || (_cache[2] = (...args) => $options.sendMsg && $options.sendMsg(...args)),
class: "colorf center ml10 fs24"
}, "发送"),
vue.createElementVNode("view", { class: "justify-between mr30 ml30 align-center" }, [
vue.createElementVNode("view", {
class: "icon-bg ml20",
onClick: _cache[3] || (_cache[3] = ($event) => $data.showziliao = !$data.showziliao)
}, [
vue.createElementVNode("image", {
src: _imports_0,
class: "w40 h40"
})
]),
vue.createElementVNode("view", {
class: "icon-bg ml20",
onClick: _cache[4] || (_cache[4] = ($event) => $data.showziliao = !$data.showziliao)
}, [
vue.createElementVNode("image", {
src: _imports_1,
class: "w40 h40"
})
]),
vue.createElementVNode(
"view",
{
class: vue.normalizeClass(["icon-bg ml20", { "zoom-button-active": $data.isZoom }]),
onTouchstart: _cache[5] || (_cache[5] = (...args) => $options.handleTouchStart && $options.handleTouchStart(...args)),
onTouchend: _cache[6] || (_cache[6] = (...args) => $options.handleTouchEnd && $options.handleTouchEnd(...args))
},
[
vue.createElementVNode("image", {
src: _imports_2,
class: "w40 h40"
})
],
34
/* CLASS, NEED_HYDRATION */
)
])
])
])
]),
vue.createVNode(_component_u_popup, {
show: $data.showadd,
onClose: $options.close,
onOpen: $options.open,
round: "20rpx",
bgColor: "#fffee1"
}, {
default: vue.withCtx(() => [
vue.createElementVNode("view", { class: "addchat p20" }, [
vue.createElementVNode("view", { class: "u-flex-row-reverse u-flex" }, [
vue.createVNode(_component_u_icon, {
name: "close",
size: "18",
onClick: _cache[7] || (_cache[7] = ($event) => $data.showadd = !$data.showadd)
})
]),
vue.createElementVNode("view", { class: "column align-center" }, [
vue.createElementVNode("view", {
class: "fs36",
style: { "color": "#ff5c03" }
}, "扫码添加助教老师"),
vue.createElementVNode("view", { class: "fs28 color6" }, "扫码添加助教老师"),
vue.createElementVNode("view", {
class: "p10 mt40",
style: { "border": "#ff5c03 solid 2rpx" }
}, [
vue.createElementVNode("image", {
src: $data.codeimg,
class: "wh180",
onTouchstart: _cache[8] || (_cache[8] = (...args) => $options.longPress && $options.longPress(...args)),
onTouchend: _cache[9] || (_cache[9] = (...args) => $options.cancelLongPress && $options.cancelLongPress(...args))
}, null, 40, ["src"])
]),
vue.createElementVNode("view", { class: "color6 mt20" }, "长按识别二维码")
])
])
]),
_: 1
/* STABLE */
}, 8, ["show", "onClose", "onOpen"]),
vue.createVNode(_component_u_popup, {
show: $data.showziliao,
onClose: $options.closes,
round: "20rpx",
bgColor: "#fffee1"
}, {
default: vue.withCtx(() => [
vue.createElementVNode("view", { class: "addchat p20 bgf" }, [
vue.createElementVNode("view", { class: "u-flex-row-reverse u-flex" }, [
vue.createVNode(_component_u_icon, {
name: "close",
size: "18",
onClick: _cache[10] || (_cache[10] = ($event) => $data.showziliao = !$data.showziliao)
})
]),
vue.createElementVNode("view", { class: "column align-center h400" }, [
vue.createElementVNode("view", {
class: "fs36",
style: { "color": "#ff5c03" }
}, "资料"),
vue.createElementVNode("view", {
innerHTML: $data.livedata.liveDesc
}, null, 8, ["innerHTML"])
])
])
]),
_: 1
/* STABLE */
}, 8, ["show", "onClose"]),
vue.createVNode(_component_u_popup, {
show: $data.showAnswer,
onClose: $options.closest,
round: "40",
bgColor: "#fffee1",
mode: "center"
}, {
default: vue.withCtx(() => [
vue.createElementVNode("view", { class: "answerbox p20 bgf" }, [
vue.createElementVNode("view", { class: "u-flex-row-reverse u-flex" }, [
vue.createVNode(_component_u_icon, {
name: "close",
size: "18",
onClick: $options.closest
}, null, 8, ["onClick"])
]),
vue.createElementVNode("view", { class: "column align-center" }, [
vue.createCommentVNode(" 单选 "),
$data.answerlist.type == 1 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
style: { "width": "100%" }
}, [
vue.createElementVNode("view", {
class: "mb40",
style: { "text-align": "center" }
}, [
vue.createElementVNode("text", { class: "color9 fs24" }, "(单选)"),
vue.createTextVNode(
vue.toDisplayString($data.answerlist.title),
1
/* TEXT */
)
]),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.answerlist.content, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
key: index2,
class: vue.normalizeClass($data.checkboxValue[0] == item.label ? "answeract itemanswer" : "itemanswer"),
onClick: ($event) => $options.handleCheckboxSelect(item.label)
}, vue.toDisplayString(item.label) + ". " + vue.toDisplayString(item.content), 11, ["onClick"]);
}),
128
/* KEYED_FRAGMENT */
))
])) : vue.createCommentVNode("v-if", true),
vue.createCommentVNode(" 多选 "),
$data.answerlist.type == 2 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
style: { "width": "100%" }
}, [
vue.createElementVNode("view", {
class: "mb40",
style: { "text-align": "center" }
}, [
vue.createElementVNode("text", { class: "color9 fs24" }, "(多选)"),
vue.createTextVNode(
vue.toDisplayString($data.answerlist.title),
1
/* TEXT */
)
]),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.answerlist.content, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
key: index2,
class: vue.normalizeClass($data.checkboxValue.includes(item.label) ? "answeract itemanswer" : "itemanswer"),
onClick: ($event) => $options.handleCheckboxSelect(item.label)
}, vue.toDisplayString(item.label) + ". " + vue.toDisplayString(item.content), 11, ["onClick"]);
}),
128
/* KEYED_FRAGMENT */
)),
vue.createElementVNode("view", {
class: "submitbtn",
onClick: _cache[11] || (_cache[11] = (...args) => $options.submitAnswers && $options.submitAnswers(...args))
}, "确认")
])) : vue.createCommentVNode("v-if", true),
vue.createElementVNode("view", {
class: "fs24 mtb20",
style: { "color": "#717171" }
}, [
vue.createTextVNode(
vue.toDisplayString($data.answerfrist + 1) + "/" + vue.toDisplayString($data.Answerlistall),
1
/* TEXT */
),
vue.createCommentVNode(" 已自动使用本地数据 ")
])
])
])
]),
_: 1
/* STABLE */
}, 8, ["show", "onClose"])
]);
}
const PagesHomeLiving = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__scopeId", "data-v-471975a0"], ["__file", "F:/project/liveH5-v3/pages/home/living.vue"]]);
__definePage("pages/home/index", PagesHomeIndex);
__definePage("pages/user/index", PagesUserIndex);
__definePage("pages/games/index", PagesGamesIndex);
__definePage("pages/list/index", PagesListIndex);
__definePage("pages/home/live", PagesHomeLive);
__definePage("pages/home/living", PagesHomeLiving);
function getDevtoolsGlobalHook() {
return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;
}
function getTarget() {
return typeof navigator !== "undefined" && typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {};
}
const isProxyAvailable = typeof Proxy === "function";
const HOOK_SETUP = "devtools-plugin:setup";
const HOOK_PLUGIN_SETTINGS_SET = "plugin:settings:set";
class ApiProxy {
constructor(plugin, hook) {
this.target = null;
this.targetQueue = [];
this.onQueue = [];
this.plugin = plugin;
this.hook = hook;
const defaultSettings = {};
if (plugin.settings) {
for (const id in plugin.settings) {
const item = plugin.settings[id];
defaultSettings[id] = item.defaultValue;
}
}
const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;
let currentSettings = { ...defaultSettings };
try {
const raw = localStorage.getItem(localSettingsSaveId);
const data = JSON.parse(raw);
Object.assign(currentSettings, data);
} catch (e) {
}
this.fallbacks = {
getSettings() {
return currentSettings;
},
setSettings(value2) {
try {
localStorage.setItem(localSettingsSaveId, JSON.stringify(value2));
} catch (e) {
}
currentSettings = value2;
}
};
hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value2) => {
if (pluginId === this.plugin.id) {
this.fallbacks.setSettings(value2);
}
});
this.proxiedOn = new Proxy({}, {
get: (_target, prop) => {
if (this.target) {
return this.target.on[prop];
} else {
return (...args) => {
this.onQueue.push({
method: prop,
args
});
};
}
}
});
this.proxiedTarget = new Proxy({}, {
get: (_target, prop) => {
if (this.target) {
return this.target[prop];
} else if (prop === "on") {
return this.proxiedOn;
} else if (Object.keys(this.fallbacks).includes(prop)) {
return (...args) => {
this.targetQueue.push({
method: prop,
args,
resolve: () => {
}
});
return this.fallbacks[prop](...args);
};
} else {
return (...args) => {
return new Promise((resolve) => {
this.targetQueue.push({
method: prop,
args,
resolve
});
});
};
}
}
});
}
async setRealTarget(target) {
this.target = target;
for (const item of this.onQueue) {
this.target.on[item.method](...item.args);
}
for (const item of this.targetQueue) {
item.resolve(await this.target[item.method](...item.args));
}
}
}
function setupDevtoolsPlugin(pluginDescriptor, setupFn) {
const target = getTarget();
const hook = getDevtoolsGlobalHook();
const enableProxy = isProxyAvailable && pluginDescriptor.enableEarlyProxy;
if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {
hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);
} else {
const proxy = enableProxy ? new ApiProxy(pluginDescriptor, hook) : null;
const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];
list.push({
pluginDescriptor,
setupFn,
proxy
});
if (proxy)
setupFn(proxy.proxiedTarget);
}
}
/*!
* vuex v4.1.0
* (c) 2022 Evan You
* @license MIT
*/
var storeKey = "store";
function useStore(key) {
if (key === void 0)
key = null;
return vue.inject(key !== null ? key : storeKey);
}
function forEachValue(obj, fn) {
Object.keys(obj).forEach(function(key) {
return fn(obj[key], key);
});
}
function isObject$1(obj) {
return obj !== null && typeof obj === "object";
}
function isPromise(val) {
return val && typeof val.then === "function";
}
function assert(condition, msg) {
if (!condition) {
throw new Error("[vuex] " + msg);
}
}
function partial(fn, arg) {
return function() {
return fn(arg);
};
}
function genericSubscribe(fn, subs, options) {
if (subs.indexOf(fn) < 0) {
options && options.prepend ? subs.unshift(fn) : subs.push(fn);
}
return function() {
var i = subs.indexOf(fn);
if (i > -1) {
subs.splice(i, 1);
}
};
}
function resetStore(store2, hot) {
store2._actions = /* @__PURE__ */ Object.create(null);
store2._mutations = /* @__PURE__ */ Object.create(null);
store2._wrappedGetters = /* @__PURE__ */ Object.create(null);
store2._modulesNamespaceMap = /* @__PURE__ */ Object.create(null);
var state = store2.state;
installModule(store2, state, [], store2._modules.root, true);
resetStoreState(store2, state, hot);
}
function resetStoreState(store2, state, hot) {
var oldState = store2._state;
var oldScope = store2._scope;
store2.getters = {};
store2._makeLocalGettersCache = /* @__PURE__ */ Object.create(null);
var wrappedGetters = store2._wrappedGetters;
var computedObj = {};
var computedCache = {};
var scope = vue.effectScope(true);
scope.run(function() {
forEachValue(wrappedGetters, function(fn, key) {
computedObj[key] = partial(fn, store2);
computedCache[key] = vue.computed(function() {
return computedObj[key]();
});
Object.defineProperty(store2.getters, key, {
get: function() {
return computedCache[key].value;
},
enumerable: true
// for local getters
});
});
});
store2._state = vue.reactive({
data: state
});
store2._scope = scope;
if (store2.strict) {
enableStrictMode(store2);
}
if (oldState) {
if (hot) {
store2._withCommit(function() {
oldState.data = null;
});
}
}
if (oldScope) {
oldScope.stop();
}
}
function installModule(store2, rootState, path, module, hot) {
var isRoot = !path.length;
var namespace = store2._modules.getNamespace(path);
if (module.namespaced) {
if (store2._modulesNamespaceMap[namespace] && true) {
console.error("[vuex] duplicate namespace " + namespace + " for the namespaced module " + path.join("/"));
}
store2._modulesNamespaceMap[namespace] = module;
}
if (!isRoot && !hot) {
var parentState = getNestedState(rootState, path.slice(0, -1));
var moduleName = path[path.length - 1];
store2._withCommit(function() {
{
if (moduleName in parentState) {
console.warn(
'[vuex] state field "' + moduleName + '" was overridden by a module with the same name at "' + path.join(".") + '"'
);
}
}
parentState[moduleName] = module.state;
});
}
var local = module.context = makeLocalContext(store2, namespace, path);
module.forEachMutation(function(mutation, key) {
var namespacedType = namespace + key;
registerMutation(store2, namespacedType, mutation, local);
});
module.forEachAction(function(action, key) {
var type = action.root ? key : namespace + key;
var handler = action.handler || action;
registerAction(store2, type, handler, local);
});
module.forEachGetter(function(getter, key) {
var namespacedType = namespace + key;
registerGetter(store2, namespacedType, getter, local);
});
module.forEachChild(function(child, key) {
installModule(store2, rootState, path.concat(key), child, hot);
});
}
function makeLocalContext(store2, namespace, path) {
var noNamespace = namespace === "";
var local = {
dispatch: noNamespace ? store2.dispatch : function(_type, _payload, _options) {
var args = unifyObjectStyle(_type, _payload, _options);
var payload = args.payload;
var options = args.options;
var type = args.type;
if (!options || !options.root) {
type = namespace + type;
if (!store2._actions[type]) {
console.error("[vuex] unknown local action type: " + args.type + ", global type: " + type);
return;
}
}
return store2.dispatch(type, payload);
},
commit: noNamespace ? store2.commit : function(_type, _payload, _options) {
var args = unifyObjectStyle(_type, _payload, _options);
var payload = args.payload;
var options = args.options;
var type = args.type;
if (!options || !options.root) {
type = namespace + type;
if (!store2._mutations[type]) {
console.error("[vuex] unknown local mutation type: " + args.type + ", global type: " + type);
return;
}
}
store2.commit(type, payload, options);
}
};
Object.defineProperties(local, {
getters: {
get: noNamespace ? function() {
return store2.getters;
} : function() {
return makeLocalGetters(store2, namespace);
}
},
state: {
get: function() {
return getNestedState(store2.state, path);
}
}
});
return local;
}
function makeLocalGetters(store2, namespace) {
if (!store2._makeLocalGettersCache[namespace]) {
var gettersProxy = {};
var splitPos = namespace.length;
Object.keys(store2.getters).forEach(function(type) {
if (type.slice(0, splitPos) !== namespace) {
return;
}
var localType = type.slice(splitPos);
Object.defineProperty(gettersProxy, localType, {
get: function() {
return store2.getters[type];
},
enumerable: true
});
});
store2._makeLocalGettersCache[namespace] = gettersProxy;
}
return store2._makeLocalGettersCache[namespace];
}
function registerMutation(store2, type, handler, local) {
var entry = store2._mutations[type] || (store2._mutations[type] = []);
entry.push(function wrappedMutationHandler(payload) {
handler.call(store2, local.state, payload);
});
}
function registerAction(store2, type, handler, local) {
var entry = store2._actions[type] || (store2._actions[type] = []);
entry.push(function wrappedActionHandler(payload) {
var res = handler.call(store2, {
dispatch: local.dispatch,
commit: local.commit,
getters: local.getters,
state: local.state,
rootGetters: store2.getters,
rootState: store2.state
}, payload);
if (!isPromise(res)) {
res = Promise.resolve(res);
}
if (store2._devtoolHook) {
return res.catch(function(err) {
store2._devtoolHook.emit("vuex:error", err);
throw err;
});
} else {
return res;
}
});
}
function registerGetter(store2, type, rawGetter, local) {
if (store2._wrappedGetters[type]) {
{
console.error("[vuex] duplicate getter key: " + type);
}
return;
}
store2._wrappedGetters[type] = function wrappedGetter(store22) {
return rawGetter(
local.state,
// local state
local.getters,
// local getters
store22.state,
// root state
store22.getters
// root getters
);
};
}
function enableStrictMode(store2) {
vue.watch(function() {
return store2._state.data;
}, function() {
{
assert(store2._committing, "do not mutate vuex store state outside mutation handlers.");
}
}, { deep: true, flush: "sync" });
}
function getNestedState(state, path) {
return path.reduce(function(state2, key) {
return state2[key];
}, state);
}
function unifyObjectStyle(type, payload, options) {
if (isObject$1(type) && type.type) {
options = payload;
payload = type;
type = type.type;
}
{
assert(typeof type === "string", "expects string as the type, but found " + typeof type + ".");
}
return { type, payload, options };
}
var LABEL_VUEX_BINDINGS = "vuex bindings";
var MUTATIONS_LAYER_ID = "vuex:mutations";
var ACTIONS_LAYER_ID = "vuex:actions";
var INSPECTOR_ID = "vuex";
var actionId = 0;
function addDevtools(app2, store2) {
setupDevtoolsPlugin(
{
id: "org.vuejs.vuex",
app: app2,
label: "Vuex",
homepage: "https://next.vuex.vuejs.org/",
logo: "https://vuejs.org/images/icons/favicon-96x96.png",
packageName: "vuex",
componentStateTypes: [LABEL_VUEX_BINDINGS]
},
function(api2) {
api2.addTimelineLayer({
id: MUTATIONS_LAYER_ID,
label: "Vuex Mutations",
color: COLOR_LIME_500
});
api2.addTimelineLayer({
id: ACTIONS_LAYER_ID,
label: "Vuex Actions",
color: COLOR_LIME_500
});
api2.addInspector({
id: INSPECTOR_ID,
label: "Vuex",
icon: "storage",
treeFilterPlaceholder: "Filter stores..."
});
api2.on.getInspectorTree(function(payload) {
if (payload.app === app2 && payload.inspectorId === INSPECTOR_ID) {
if (payload.filter) {
var nodes = [];
flattenStoreForInspectorTree(nodes, store2._modules.root, payload.filter, "");
payload.rootNodes = nodes;
} else {
payload.rootNodes = [
formatStoreForInspectorTree(store2._modules.root, "")
];
}
}
});
api2.on.getInspectorState(function(payload) {
if (payload.app === app2 && payload.inspectorId === INSPECTOR_ID) {
var modulePath = payload.nodeId;
makeLocalGetters(store2, modulePath);
payload.state = formatStoreForInspectorState(
getStoreModule(store2._modules, modulePath),
modulePath === "root" ? store2.getters : store2._makeLocalGettersCache,
modulePath
);
}
});
api2.on.editInspectorState(function(payload) {
if (payload.app === app2 && payload.inspectorId === INSPECTOR_ID) {
var modulePath = payload.nodeId;
var path = payload.path;
if (modulePath !== "root") {
path = modulePath.split("/").filter(Boolean).concat(path);
}
store2._withCommit(function() {
payload.set(store2._state.data, path, payload.state.value);
});
}
});
store2.subscribe(function(mutation, state) {
var data = {};
if (mutation.payload) {
data.payload = mutation.payload;
}
data.state = state;
api2.notifyComponentUpdate();
api2.sendInspectorTree(INSPECTOR_ID);
api2.sendInspectorState(INSPECTOR_ID);
api2.addTimelineEvent({
layerId: MUTATIONS_LAYER_ID,
event: {
time: Date.now(),
title: mutation.type,
data
}
});
});
store2.subscribeAction({
before: function(action, state) {
var data = {};
if (action.payload) {
data.payload = action.payload;
}
action._id = actionId++;
action._time = Date.now();
data.state = state;
api2.addTimelineEvent({
layerId: ACTIONS_LAYER_ID,
event: {
time: action._time,
title: action.type,
groupId: action._id,
subtitle: "start",
data
}
});
},
after: function(action, state) {
var data = {};
var duration = Date.now() - action._time;
data.duration = {
_custom: {
type: "duration",
display: duration + "ms",
tooltip: "Action duration",
value: duration
}
};
if (action.payload) {
data.payload = action.payload;
}
data.state = state;
api2.addTimelineEvent({
layerId: ACTIONS_LAYER_ID,
event: {
time: Date.now(),
title: action.type,
groupId: action._id,
subtitle: "end",
data
}
});
}
});
}
);
}
var COLOR_LIME_500 = 8702998;
var COLOR_DARK = 6710886;
var COLOR_WHITE = 16777215;
var TAG_NAMESPACED = {
label: "namespaced",
textColor: COLOR_WHITE,
backgroundColor: COLOR_DARK
};
function extractNameFromPath(path) {
return path && path !== "root" ? path.split("/").slice(-2, -1)[0] : "Root";
}
function formatStoreForInspectorTree(module, path) {
return {
id: path || "root",
// all modules end with a `/`, we want the last segment only
// cart/ -> cart
// nested/cart/ -> cart
label: extractNameFromPath(path),
tags: module.namespaced ? [TAG_NAMESPACED] : [],
children: Object.keys(module._children).map(
function(moduleName) {
return formatStoreForInspectorTree(
module._children[moduleName],
path + moduleName + "/"
);
}
)
};
}
function flattenStoreForInspectorTree(result, module, filter, path) {
if (path.includes(filter)) {
result.push({
id: path || "root",
label: path.endsWith("/") ? path.slice(0, path.length - 1) : path || "Root",
tags: module.namespaced ? [TAG_NAMESPACED] : []
});
}
Object.keys(module._children).forEach(function(moduleName) {
flattenStoreForInspectorTree(result, module._children[moduleName], filter, path + moduleName + "/");
});
}
function formatStoreForInspectorState(module, getters2, path) {
getters2 = path === "root" ? getters2 : getters2[path];
var gettersKeys = Object.keys(getters2);
var storeState = {
state: Object.keys(module.state).map(function(key) {
return {
key,
editable: true,
value: module.state[key]
};
})
};
if (gettersKeys.length) {
var tree = transformPathsToObjectTree(getters2);
storeState.getters = Object.keys(tree).map(function(key) {
return {
key: key.endsWith("/") ? extractNameFromPath(key) : key,
editable: false,
value: canThrow(function() {
return tree[key];
})
};
});
}
return storeState;
}
function transformPathsToObjectTree(getters2) {
var result = {};
Object.keys(getters2).forEach(function(key) {
var path = key.split("/");
if (path.length > 1) {
var target = result;
var leafKey = path.pop();
path.forEach(function(p) {
if (!target[p]) {
target[p] = {
_custom: {
value: {},
display: p,
tooltip: "Module",
abstract: true
}
};
}
target = target[p]._custom.value;
});
target[leafKey] = canThrow(function() {
return getters2[key];
});
} else {
result[key] = canThrow(function() {
return getters2[key];
});
}
});
return result;
}
function getStoreModule(moduleMap, path) {
var names = path.split("/").filter(function(n) {
return n;
});
return names.reduce(
function(module, moduleName, i) {
var child = module[moduleName];
if (!child) {
throw new Error('Missing module "' + moduleName + '" for path "' + path + '".');
}
return i === names.length - 1 ? child : child._children;
},
path === "root" ? moduleMap : moduleMap.root._children
);
}
function canThrow(cb) {
try {
return cb();
} catch (e) {
return e;
}
}
var Module = function Module2(rawModule, runtime) {
this.runtime = runtime;
this._children = /* @__PURE__ */ Object.create(null);
this._rawModule = rawModule;
var rawState = rawModule.state;
this.state = (typeof rawState === "function" ? rawState() : rawState) || {};
};
var prototypeAccessors$1 = { namespaced: { configurable: true } };
prototypeAccessors$1.namespaced.get = function() {
return !!this._rawModule.namespaced;
};
Module.prototype.addChild = function addChild(key, module) {
this._children[key] = module;
};
Module.prototype.removeChild = function removeChild(key) {
delete this._children[key];
};
Module.prototype.getChild = function getChild(key) {
return this._children[key];
};
Module.prototype.hasChild = function hasChild(key) {
return key in this._children;
};
Module.prototype.update = function update(rawModule) {
this._rawModule.namespaced = rawModule.namespaced;
if (rawModule.actions) {
this._rawModule.actions = rawModule.actions;
}
if (rawModule.mutations) {
this._rawModule.mutations = rawModule.mutations;
}
if (rawModule.getters) {
this._rawModule.getters = rawModule.getters;
}
};
Module.prototype.forEachChild = function forEachChild(fn) {
forEachValue(this._children, fn);
};
Module.prototype.forEachGetter = function forEachGetter(fn) {
if (this._rawModule.getters) {
forEachValue(this._rawModule.getters, fn);
}
};
Module.prototype.forEachAction = function forEachAction(fn) {
if (this._rawModule.actions) {
forEachValue(this._rawModule.actions, fn);
}
};
Module.prototype.forEachMutation = function forEachMutation(fn) {
if (this._rawModule.mutations) {
forEachValue(this._rawModule.mutations, fn);
}
};
Object.defineProperties(Module.prototype, prototypeAccessors$1);
var ModuleCollection = function ModuleCollection2(rawRootModule) {
this.register([], rawRootModule, false);
};
ModuleCollection.prototype.get = function get(path) {
return path.reduce(function(module, key) {
return module.getChild(key);
}, this.root);
};
ModuleCollection.prototype.getNamespace = function getNamespace(path) {
var module = this.root;
return path.reduce(function(namespace, key) {
module = module.getChild(key);
return namespace + (module.namespaced ? key + "/" : "");
}, "");
};
ModuleCollection.prototype.update = function update$1(rawRootModule) {
update2([], this.root, rawRootModule);
};
ModuleCollection.prototype.register = function register(path, rawModule, runtime) {
var this$1$1 = this;
if (runtime === void 0)
runtime = true;
{
assertRawModule(path, rawModule);
}
var newModule = new Module(rawModule, runtime);
if (path.length === 0) {
this.root = newModule;
} else {
var parent = this.get(path.slice(0, -1));
parent.addChild(path[path.length - 1], newModule);
}
if (rawModule.modules) {
forEachValue(rawModule.modules, function(rawChildModule, key) {
this$1$1.register(path.concat(key), rawChildModule, runtime);
});
}
};
ModuleCollection.prototype.unregister = function unregister(path) {
var parent = this.get(path.slice(0, -1));
var key = path[path.length - 1];
var child = parent.getChild(key);
if (!child) {
{
console.warn(
"[vuex] trying to unregister module '" + key + "', which is not registered"
);
}
return;
}
if (!child.runtime) {
return;
}
parent.removeChild(key);
};
ModuleCollection.prototype.isRegistered = function isRegistered(path) {
var parent = this.get(path.slice(0, -1));
var key = path[path.length - 1];
if (parent) {
return parent.hasChild(key);
}
return false;
};
function update2(path, targetModule, newModule) {
{
assertRawModule(path, newModule);
}
targetModule.update(newModule);
if (newModule.modules) {
for (var key in newModule.modules) {
if (!targetModule.getChild(key)) {
{
console.warn(
"[vuex] trying to add a new module '" + key + "' on hot reloading, manual reload is needed"
);
}
return;
}
update2(
path.concat(key),
targetModule.getChild(key),
newModule.modules[key]
);
}
}
}
var functionAssert = {
assert: function(value2) {
return typeof value2 === "function";
},
expected: "function"
};
var objectAssert = {
assert: function(value2) {
return typeof value2 === "function" || typeof value2 === "object" && typeof value2.handler === "function";
},
expected: 'function or object with "handler" function'
};
var assertTypes = {
getters: functionAssert,
mutations: functionAssert,
actions: objectAssert
};
function assertRawModule(path, rawModule) {
Object.keys(assertTypes).forEach(function(key) {
if (!rawModule[key]) {
return;
}
var assertOptions = assertTypes[key];
forEachValue(rawModule[key], function(value2, type) {
assert(
assertOptions.assert(value2),
makeAssertionMessage(path, key, type, value2, assertOptions.expected)
);
});
});
}
function makeAssertionMessage(path, key, type, value2, expected) {
var buf = key + " should be " + expected + ' but "' + key + "." + type + '"';
if (path.length > 0) {
buf += ' in module "' + path.join(".") + '"';
}
buf += " is " + JSON.stringify(value2) + ".";
return buf;
}
function createStore(options) {
return new Store(options);
}
var Store = function Store2(options) {
var this$1$1 = this;
if (options === void 0)
options = {};
{
assert(typeof Promise !== "undefined", "vuex requires a Promise polyfill in this browser.");
assert(this instanceof Store2, "store must be called with the new operator.");
}
var plugins = options.plugins;
if (plugins === void 0)
plugins = [];
var strict = options.strict;
if (strict === void 0)
strict = false;
var devtools = options.devtools;
this._committing = false;
this._actions = /* @__PURE__ */ Object.create(null);
this._actionSubscribers = [];
this._mutations = /* @__PURE__ */ Object.create(null);
this._wrappedGetters = /* @__PURE__ */ Object.create(null);
this._modules = new ModuleCollection(options);
this._modulesNamespaceMap = /* @__PURE__ */ Object.create(null);
this._subscribers = [];
this._makeLocalGettersCache = /* @__PURE__ */ Object.create(null);
this._scope = null;
this._devtools = devtools;
var store2 = this;
var ref = this;
var dispatch2 = ref.dispatch;
var commit2 = ref.commit;
this.dispatch = function boundDispatch(type, payload) {
return dispatch2.call(store2, type, payload);
};
this.commit = function boundCommit(type, payload, options2) {
return commit2.call(store2, type, payload, options2);
};
this.strict = strict;
var state = this._modules.root.state;
installModule(this, state, [], this._modules.root);
resetStoreState(this, state);
plugins.forEach(function(plugin) {
return plugin(this$1$1);
});
};
var prototypeAccessors = { state: { configurable: true } };
Store.prototype.install = function install2(app2, injectKey) {
app2.provide(injectKey || storeKey, this);
app2.config.globalProperties.$store = this;
var useDevtools = this._devtools !== void 0 ? this._devtools : true;
if (useDevtools) {
addDevtools(app2, this);
}
};
prototypeAccessors.state.get = function() {
return this._state.data;
};
prototypeAccessors.state.set = function(v) {
{
assert(false, "use store.replaceState() to explicit replace store state.");
}
};
Store.prototype.commit = function commit(_type, _payload, _options) {
var this$1$1 = this;
var ref = unifyObjectStyle(_type, _payload, _options);
var type = ref.type;
var payload = ref.payload;
var options = ref.options;
var mutation = { type, payload };
var entry = this._mutations[type];
if (!entry) {
{
console.error("[vuex] unknown mutation type: " + type);
}
return;
}
this._withCommit(function() {
entry.forEach(function commitIterator(handler) {
handler(payload);
});
});
this._subscribers.slice().forEach(function(sub) {
return sub(mutation, this$1$1.state);
});
if (options && options.silent) {
console.warn(
"[vuex] mutation type: " + type + ". Silent option has been removed. Use the filter functionality in the vue-devtools"
);
}
};
Store.prototype.dispatch = function dispatch(_type, _payload) {
var this$1$1 = this;
var ref = unifyObjectStyle(_type, _payload);
var type = ref.type;
var payload = ref.payload;
var action = { type, payload };
var entry = this._actions[type];
if (!entry) {
{
console.error("[vuex] unknown action type: " + type);
}
return;
}
try {
this._actionSubscribers.slice().filter(function(sub) {
return sub.before;
}).forEach(function(sub) {
return sub.before(action, this$1$1.state);
});
} catch (e) {
{
console.warn("[vuex] error in before action subscribers: ");
console.error(e);
}
}
var result = entry.length > 1 ? Promise.all(entry.map(function(handler) {
return handler(payload);
})) : entry[0](payload);
return new Promise(function(resolve, reject) {
result.then(function(res) {
try {
this$1$1._actionSubscribers.filter(function(sub) {
return sub.after;
}).forEach(function(sub) {
return sub.after(action, this$1$1.state);
});
} catch (e) {
{
console.warn("[vuex] error in after action subscribers: ");
console.error(e);
}
}
resolve(res);
}, function(error2) {
try {
this$1$1._actionSubscribers.filter(function(sub) {
return sub.error;
}).forEach(function(sub) {
return sub.error(action, this$1$1.state, error2);
});
} catch (e) {
{
console.warn("[vuex] error in error action subscribers: ");
console.error(e);
}
}
reject(error2);
});
});
};
Store.prototype.subscribe = function subscribe(fn, options) {
return genericSubscribe(fn, this._subscribers, options);
};
Store.prototype.subscribeAction = function subscribeAction(fn, options) {
var subs = typeof fn === "function" ? { before: fn } : fn;
return genericSubscribe(subs, this._actionSubscribers, options);
};
Store.prototype.watch = function watch$1(getter, cb, options) {
var this$1$1 = this;
{
assert(typeof getter === "function", "store.watch only accepts a function.");
}
return vue.watch(function() {
return getter(this$1$1.state, this$1$1.getters);
}, cb, Object.assign({}, options));
};
Store.prototype.replaceState = function replaceState(state) {
var this$1$1 = this;
this._withCommit(function() {
this$1$1._state.data = state;
});
};
Store.prototype.registerModule = function registerModule(path, rawModule, options) {
if (options === void 0)
options = {};
if (typeof path === "string") {
path = [path];
}
{
assert(Array.isArray(path), "module path must be a string or an Array.");
assert(path.length > 0, "cannot register the root module by using registerModule.");
}
this._modules.register(path, rawModule);
installModule(this, this.state, path, this._modules.get(path), options.preserveState);
resetStoreState(this, this.state);
};
Store.prototype.unregisterModule = function unregisterModule(path) {
var this$1$1 = this;
if (typeof path === "string") {
path = [path];
}
{
assert(Array.isArray(path), "module path must be a string or an Array.");
}
this._modules.unregister(path);
this._withCommit(function() {
var parentState = getNestedState(this$1$1.state, path.slice(0, -1));
delete parentState[path[path.length - 1]];
});
resetStore(this);
};
Store.prototype.hasModule = function hasModule(path) {
if (typeof path === "string") {
path = [path];
}
{
assert(Array.isArray(path), "module path must be a string or an Array.");
}
return this._modules.isRegistered(path);
};
Store.prototype.hotUpdate = function hotUpdate(newOptions) {
this._modules.update(newOptions);
resetStore(this, true);
};
Store.prototype._withCommit = function _withCommit(fn) {
var committing = this._committing;
this._committing = true;
fn();
this._committing = committing;
};
Object.defineProperties(Store.prototype, prototypeAccessors);
const postfix = "_expiry";
const storage = {
/**
* 设置缓存
* @param {[type]} k [键名]
* @param {[type]} v [键值]
* @param {[type]} t [时间、单位秒]
*/
set(k, v, t) {
uni.setStorageSync(k, v);
const seconds = parseInt(t);
if (seconds > 0) {
let timestamp = Date.parse(/* @__PURE__ */ new Date());
timestamp = timestamp / 1e3 + seconds;
uni.setStorageSync(k + postfix, timestamp + "");
} else {
uni.removeStorageSync(k + postfix);
}
},
/**
* 获取缓存
* @param {[type]} k [键名]
* @param {[type]} def [获取为空时默认]
*/
get(k, def) {
const deadtime = parseInt(uni.getStorageSync(k + postfix));
if (deadtime) {
if (parseInt(deadtime) < Date.parse(/* @__PURE__ */ new Date()) / 1e3) {
if (def) {
return def;
} else {
return false;
}
}
}
const res = uni.getStorageSync(k);
if (res) {
return res;
}
if (def == void 0 || def == "") {
def = false;
}
return def;
},
/**
* 删除指定缓存
* @param {Object} k
*/
remove(k) {
uni.removeStorageSync(k);
uni.removeStorageSync(k + postfix);
},
/**
* 清理所有缓存
* @return {[type]} [description]
*/
clear() {
uni.clearStorageSync();
}
};
const _sfc_main = {
onLaunch: function(options) {
uni.hideTabBar();
const store2 = useStore();
let parent_id;
if (options.query && options.query.scene) {
parent_id = decodeURIComponent(options.query.scene).split("=")[1];
} else if (options.query && options.query.parent_id) {
parent_id = options.query.parent_id;
}
storage.set("PARENT_ID", parent_id, 30 * 86400 * 3);
store2.commit("M_PARENT_ID", parent_id);
},
onShow: function() {
formatAppLog("log", "at App.vue:24", "App Show");
},
onLoad() {
formatAppLog("log", "at App.vue:27", "App Load");
},
onHide: function() {
formatAppLog("log", "at App.vue:30", "App Hide");
},
methods: {
/**
* 小程序主动更新
*/
updateManager() {
const updateManager = uni.getUpdateManager();
updateManager.onCheckForUpdate((res) => {
});
updateManager.onUpdateReady(() => {
uni.showModal({
title: "更新提示",
content: "新版本已经准备好,即将重启应用",
showCancel: false,
success(res) {
if (res.confirm) {
updateManager.applyUpdate();
}
}
});
});
updateManager.onUpdateFailed(() => {
uni.showModal({
title: "更新提示",
content: "新版本下载失败",
showCancel: false
});
});
}
}
};
const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "F:/project/liveH5-v3/App.vue"]]);
const ACCESS_TOKEN = "AccessToken";
const USER_ID = "userId";
const USER_INFO = "userInfo";
const app = {
state: {
// 当前终端平台
platform: ""
},
mutations: {
SET_PLATFORM: (state, value2) => {
state.platform = value2;
}
},
actions: {}
};
const mergeConfig$2 = (_this, options) => {
let urlType = /^(http|https):\/\//.test(options.url);
let config2 = Object.assign({
timeout: _this.timeout
}, _this.config, options);
if (options.method == "FILE") {
config2.url = urlType ? options.url : _this.fileUrl + options.url;
} else {
config2.url = urlType ? options.url : _this.baseUrl + options.url;
}
if (options.header) {
config2.header = Object.assign({}, _this.header, options.header);
} else {
config2.header = Object.assign({}, _this.header);
}
return config2;
};
const dispatchRequest$1 = (requestInfo) => {
return new Promise((resolve, reject) => {
let requestAbort = true;
let requestData = {
url: requestInfo.url,
header: requestInfo.header,
//加入请求头
success: (res) => {
requestAbort = false;
resolve(res);
},
fail: (err) => {
requestAbort = false;
if (err.errMsg == "request:fail abort") {
reject({
errMsg: "请求超时,请重新尝试",
statusCode: 0
});
} else {
reject(err);
}
}
};
if (requestInfo.method) {
requestData.method = requestInfo.method;
}
if (requestInfo.data) {
requestData.data = requestInfo.data;
}
if (requestInfo.dataType) {
requestData.dataType = requestInfo.dataType;
}
let requestTask = uni.request(requestData);
setTimeout(() => {
if (requestAbort) {
requestTask.abort();
}
}, requestInfo.timeout);
});
};
const jsonpRequest = (requestInfo) => {
return new Promise((resolve, reject) => {
let dataStr = "";
Object.keys(requestInfo.data).forEach((key) => {
dataStr += key + "=" + requestInfo.data[key] + "&";
});
if (dataStr !== "") {
dataStr = dataStr.substr(0, dataStr.lastIndexOf("&"));
}
requestInfo.url = requestInfo.url + "?" + dataStr;
});
};
const getPlatform = () => {
const platform2 = "app";
return platform2;
};
const platfrom = getPlatform();
class request {
constructor(options) {
this.baseUrl = options.baseUrl || "";
this.fileUrl = options.fileUrl || "";
this.timeout = options.timeout || 6e3;
this.defaultUploadUrl = options.defaultUploadUrl || "";
this.header = options.header || {};
this.config = options.config || {
isPrompt: true,
load: true,
isFactory: false,
resend: 0
};
}
// post请求
post(url2 = "", data = {}, options = {}) {
return this.request({
method: "POST",
data,
url: url2,
...options
});
}
// get请求
get(url2 = "", data = {}, options = {}) {
return this.request({
method: "GET",
data,
url: url2,
...options
});
}
// put请求
put(url2 = "", data = {}, options = {}) {
return this.request({
method: "PUT",
data,
url: url2,
...options
});
}
// delete请求
delete(url2 = "", data = {}, options = {}) {
return this.request({
method: "DELETE",
data,
url: url2,
...options
});
}
// jsonp请求(只限于H5使用)
jsonp(url2 = "", data = {}, options = {}) {
return this.request({
method: "JSONP",
data,
url: url2,
...options
});
}
// 接口请求方法
async request(data) {
let requestInfo, runRequestStart = false;
try {
if (!data.url) {
throw {
errMsg: "【request】缺失数据url",
statusCode: 0
};
}
requestInfo = mergeConfig$2(this, data);
runRequestStart = true;
if (this.requestStart) {
let requestStart = this.requestStart(requestInfo);
if (typeof requestStart == "object") {
let changekeys = ["data", "header", "isPrompt", "load", "isFactory"];
changekeys.forEach((key) => {
requestInfo[key] = requestStart[key];
});
} else {
throw {
errMsg: "【request】请求开始拦截器未通过",
statusCode: 0,
formData: requestInfo.data,
method: requestInfo.method,
header: requestInfo.header,
url: requestInfo.url
};
}
}
let requestResult = {};
if (requestInfo.method == "JSONP") {
requestResult = await jsonpRequest(requestInfo);
} else {
requestResult = await dispatchRequest$1(requestInfo);
}
if (requestInfo.isFactory && this.dataFactory) {
let result = await this.dataFactory({
...requestInfo,
response: requestResult.data
});
return result ? Promise.resolve(result) : null;
} else {
return Promise.resolve(requestResult);
}
} catch (err) {
this.requestError && this.requestError(err);
return Promise.reject(err);
} finally {
if (runRequestStart) {
this.requestEnd && this.requestEnd(requestInfo);
}
}
}
}
const qiniuUploader = /* @__PURE__ */ function() {
var config2 = {
qiniuRegion: "",
qiniuImageURLPrefix: "",
qiniuUploadToken: "",
qiniuUploadTokenURL: "",
qiniuUploadTokenFunction: null,
qiniuShouldUseQiniuFileName: false
};
function init(options) {
config2 = {
qiniuRegion: "",
qiniuImageURLPrefix: "",
qiniuUploadToken: "",
qiniuUploadTokenURL: "",
qiniuUploadTokenFunction: null,
qiniuShouldUseQiniuFileName: false
};
updateConfigWithOptions(options);
}
function updateConfigWithOptions(options) {
if (options.region) {
config2.qiniuRegion = options.region;
} else {
formatAppLog("error", "at utils/request/upload/qiniuUploader.js:30", "qiniu uploader need your bucket region");
}
if (options.uptoken) {
config2.qiniuUploadToken = options.uptoken;
} else if (options.uptokenURL) {
config2.qiniuUploadTokenURL = options.uptokenURL;
} else if (options.uptokenFunc) {
config2.qiniuUploadTokenFunction = options.uptokenFunc;
}
if (options.domain) {
config2.qiniuImageURLPrefix = options.domain;
}
config2.qiniuShouldUseQiniuFileName = options.shouldUseQiniuFileName;
}
function upload(filePath, success, fail, options, progress, cancelTask) {
if (null == filePath) {
formatAppLog("error", "at utils/request/upload/qiniuUploader.js:47", "qiniu uploader need filePath to upload");
return;
}
if (options) {
updateConfigWithOptions(options);
}
if (config2.qiniuUploadToken) {
doUpload(filePath, success, fail, options, progress, cancelTask);
} else if (config2.qiniuUploadTokenURL) {
getQiniuToken(function() {
doUpload(filePath, success, fail, options, progress, cancelTask);
});
} else if (config2.qiniuUploadTokenFunction) {
config2.qiniuUploadToken = config2.qiniuUploadTokenFunction();
if (null == config2.qiniuUploadToken && config2.qiniuUploadToken.length > 0) {
formatAppLog("error", "at utils/request/upload/qiniuUploader.js:62", "qiniu UploadTokenFunction result is null, please check the return value");
return;
}
doUpload(filePath, success, fail, options, progress, cancelTask);
} else {
formatAppLog("error", "at utils/request/upload/qiniuUploader.js:67", "qiniu uploader need one of [uptoken, uptokenURL, uptokenFunc]");
return;
}
}
function doUpload(filePath, success, fail, options, progress, cancelTask) {
if (null == config2.qiniuUploadToken && config2.qiniuUploadToken.length > 0) {
formatAppLog("error", "at utils/request/upload/qiniuUploader.js:74", "qiniu UploadToken is null, please check the init config or networking");
return;
}
var url2 = uploadURLFromRegionCode(config2.qiniuRegion);
var fileName = filePath.split("//")[1];
if (options && options.key) {
fileName = options.key;
}
var formData = {
"token": config2.qiniuUploadToken
};
if (!config2.qiniuShouldUseQiniuFileName) {
formData["key"] = fileName;
}
var uploadTask = wx.uploadFile({
url: url2,
filePath,
name: "file",
formData,
success: function(res) {
var dataString = res.data;
if (res.data.hasOwnProperty("type") && res.data.type === "Buffer") {
dataString = String.fromCharCode.apply(null, res.data.data);
}
try {
var dataObject = JSON.parse(dataString);
var imageUrl = config2.qiniuImageURLPrefix + "/" + dataObject.key;
dataObject.imageURL = imageUrl;
if (success) {
success(dataObject);
}
} catch (e) {
formatAppLog("log", "at utils/request/upload/qiniuUploader.js:107", "parse JSON failed, origin String is: " + dataString);
if (fail) {
fail(e);
}
}
},
fail: function(error2) {
formatAppLog("error", "at utils/request/upload/qiniuUploader.js:114", error2);
if (fail) {
fail(error2);
}
}
});
uploadTask.onProgressUpdate((res) => {
progress && progress(res);
});
cancelTask && cancelTask(() => {
uploadTask.abort();
});
}
function getQiniuToken(callback) {
wx.request({
url: config2.qiniuUploadTokenURL,
success: function(res) {
var token = res.data.uptoken;
if (token && token.length > 0) {
config2.qiniuUploadToken = token;
if (callback) {
callback();
}
} else {
formatAppLog("error", "at utils/request/upload/qiniuUploader.js:141", "qiniuUploader cannot get your token, please check the uptokenURL or server");
}
},
fail: function(error2) {
formatAppLog("error", "at utils/request/upload/qiniuUploader.js:145", "qiniu UploadToken is null, please check the init config or networking: " + error2);
}
});
}
function uploadURLFromRegionCode(code2) {
var uploadURL = null;
switch (code2) {
case "ECN":
uploadURL = "https://up.qbox.me";
break;
case "NCN":
uploadURL = "https://up-z1.qbox.me";
break;
case "SCN":
uploadURL = "https://up-z2.qbox.me";
break;
case "NA":
uploadURL = "https://up-na0.qbox.me";
break;
case "ASG":
uploadURL = "https://up-as0.qbox.me";
break;
default:
formatAppLog("error", "at utils/request/upload/qiniuUploader.js:169", "please make the region is with one of [ECN, SCN, NCN, NA, ASG]");
}
return uploadURL;
}
return {
init,
upload
};
}();
const randomChar = function(l, url2 = "") {
const x = "0123456789qwertyuioplkjhgfdsazxcvbnm";
let tmp = "";
let time = /* @__PURE__ */ new Date();
for (let i = 0; i < l; i++) {
tmp += x.charAt(Math.ceil(Math.random() * 1e8) % x.length);
}
return "file/" + url2 + time.getTime() + tmp;
};
const chooseImage = function(data) {
return new Promise((resolve, reject) => {
uni.chooseImage({
count: data.count || 9,
//默认9
sizeType: data.sizeType || ["original", "compressed"],
//可以指定是原图还是压缩图,默认二者都有
sourceType: data.sourceType || ["album", "camera"],
//从相册选择
success: function(res) {
resolve(res.tempFiles);
},
fail: (err) => {
reject({
errMsg: err.errMsg,
errCode: err.errCode,
statusCode: 0
});
}
});
});
};
const chooseVideo = function(data) {
return new Promise((resolve, reject) => {
uni.chooseVideo({
sourceType: data.sourceType || ["album", "camera"],
//从相册选择
compressed: data.compressed || false,
//是否压缩所选的视频源文件,默认值为 true,需要压缩。
maxDuration: data.maxDuration || 60,
//拍摄视频最长拍摄时间,单位秒。最长支持 60 秒。
camera: data.camera || "back",
//'front'、'back',默认'back'
success: function(res) {
let files = [{
path: res.tempFilePath
}];
files[0].duration = res.duration;
files[0].size = res.size;
files[0].height = res.height;
files[0].width = res.width;
resolve(files);
},
fail: (err) => {
reject({
errMsg: err.errMsg,
errCode: err.errCode,
statusCode: 0
});
}
});
});
};
const qiniuUpload = function(requestInfo, getQnToken) {
return new Promise((resolve, reject) => {
if (Array.isArray(requestInfo.files)) {
let len = requestInfo.files.length;
let fileList = new Array();
if (getQnToken) {
getQnToken((qnRes) => {
let prefixLen = qnRes.visitPrefix.length;
if (qnRes.visitPrefix.charAt(prefixLen - 1) == "/") {
qnRes.visitPrefix = qnRes.visitPrefix.substring(0, prefixLen - 1);
}
uploadFile(0);
function uploadFile(i) {
let item = requestInfo.files[i];
let updateUrl = randomChar(10, qnRes.folderPath);
let fileData = {
fileIndex: i,
files: requestInfo.files,
...item
};
if (item.name) {
fileData.name = item.name;
let nameArr = item.name.split(".");
updateUrl += "." + nameArr[nameArr.length - 1];
}
qiniuUploader.upload(item.path || item, (res) => {
fileData.url = res.imageURL;
requestInfo.onEachUpdate && requestInfo.onEachUpdate({
url: res.imageURL,
...fileData
});
fileList.push(res.imageURL);
if (len - 1 > i) {
uploadFile(i + 1);
} else {
resolve(fileList);
}
}, (error2) => {
reject(error2);
}, {
region: qnRes.region || "SCN",
//地区
domain: qnRes.visitPrefix,
// bucket 域名,下载资源时用到。
key: updateUrl,
uptoken: qnRes.token,
// 由其他程序生成七牛 uptoken
uptokenURL: "UpTokenURL.com/uptoken"
// 上传地址
}, (res) => {
formatAppLog("log", "at utils/request/upload/utils.js:127", requestInfo);
requestInfo.onProgressUpdate && requestInfo.onProgressUpdate(Object.assign({}, fileData, res));
});
}
});
} else {
reject({
errMsg: "请添加七牛云回调方法:getQnToken",
statusCode: 0
});
}
} else {
reject({
errMsg: "files 必须是数组类型",
statusCode: 0
});
}
});
};
const urlUpload = function(requestInfo, dataFactory) {
return new Promise((resolve, reject) => {
if (requestInfo.header["Content-Type"]) {
delete requestInfo.header["Content-Type"];
}
if (requestInfo.header["content-type"]) {
delete requestInfo.header["content-type"];
}
if (Array.isArray(requestInfo.files)) {
let fileUpload2 = function(i) {
let item = requestInfo.files[i];
let fileData = {
fileIndex: i,
files: requestInfo.files,
...item
};
let config2 = {
url: requestInfo.url,
filePath: item.path,
header: requestInfo.header,
//加入请求头
name: requestInfo.name || "file",
success: (response) => {
if (requestInfo.isFactory && dataFactory) {
dataFactory({
...requestInfo,
response
}).then((data) => {
fileList.push(data);
requestInfo.onEachUpdate && requestInfo.onEachUpdate({
data,
...fileData
});
if (len <= i) {
resolve(fileList);
} else {
fileUpload2(i + 1);
}
}, (err) => {
reject(err);
});
} else {
requestInfo.onEachUpdate && requestInfo.onEachUpdate({
data: response,
...fileData
});
fileList.push(response);
if (len <= i) {
resolve(fileList);
} else {
fileUpload2(i + 1);
}
}
},
fail: (err) => {
reject(err);
}
};
if (requestInfo.data) {
config2.formData = requestInfo.data;
}
const uploadTask = uni.uploadFile(config2);
uploadTask.onProgressUpdate((res) => {
requestInfo.onProgressUpdate && requestInfo.onProgressUpdate(Object.assign({}, fileData, res));
});
};
const len = requestInfo.files.length - 1;
let fileList = new Array();
fileUpload2(0);
} else {
reject({
errMsg: "files 必须是数组类型",
statusCode: 0
});
}
});
};
class fileUpload extends request {
constructor(props2) {
super(props2);
}
async ossImagUpload(options = {}) {
try {
const files = await chooseImage(options);
const data = [];
for (let item of files) {
let params = {
size: item.size,
model: "image"
};
if (item.name) {
params.name = item.name;
params.path = item.path;
} else if (item.path) {
if (item.path.indexOf("/") > -1) {
let names = item.path.split("/");
params.name = names[names.length - 1];
}
params.path = item.path;
}
options.onSelectComplete && options.onSelectComplete(files);
data.push(params);
}
return Promise.resolve(data);
} catch (err) {
return Promise.reject(err);
}
}
async ossVideoUpload(options = {}) {
let files;
try {
files = await chooseVideo(options);
let file = files[0];
let params = {
size: file.size,
model: "video"
};
if (file.name) {
params.name = file.name;
params.path = file.path;
} else if (file.path) {
if (file.path.indexOf("/") > -1) {
let names = file.path.split("/");
params.name = names[names.length - 1];
}
params.path = file.path;
}
options.onSelectComplete && options.onSelectComplete(files);
return Promise.resolve(params);
} catch (err) {
return Promise.reject(err);
}
}
//七牛云上传图片
async qnImgUpload(options = {}) {
let files;
try {
files = await chooseImage(options);
options.onSelectComplete && options.onSelectComplete(files);
} catch (err) {
this.requestError && this.requestError(err);
return Promise.reject(err);
}
if (files) {
return this.qnFileUpload({
...options,
files
});
}
}
//七牛云上传视频
async qnVideoUpload(options = {}) {
let files;
try {
files = await chooseVideo(options);
options.onSelectComplete && options.onSelectComplete(files);
} catch (err) {
this.requestError && this.requestError(err);
return Promise.reject(err);
}
if (files) {
return this.qnFileUpload({
...options,
files
});
}
}
//七牛云文件上传(支持多张上传)
async qnFileUpload(options = {}) {
let requestInfo;
try {
requestInfo = {
...this.config,
...options,
header: {},
method: "FILE"
};
if (this.requestStart) {
let requestStart = this.requestStart(requestInfo);
if (typeof requestStart == "object") {
let changekeys = ["load", "files"];
changekeys.forEach((key) => {
requestInfo[key] = requestStart[key];
});
} else {
throw {
errMsg: "【request】请求开始拦截器未通过",
statusCode: 0,
data: requestInfo.data,
method: requestInfo.method,
header: requestInfo.header,
url: requestInfo.url
};
}
}
let requestResult = await qiniuUpload(requestInfo, this.getQnToken);
return Promise.resolve(requestResult);
} catch (err) {
this.requestError && this.requestError(err);
return Promise.reject(err);
} finally {
this.requestEnd && this.requestEnd(requestInfo);
}
}
//本地服务器图片上传
async urlImgUpload() {
let options = {};
if (arguments[0]) {
if (typeof arguments[0] == "string") {
options.url = arguments[0];
} else if (typeof arguments[0] == "object") {
options = Object.assign(options, arguments[0]);
}
}
if (arguments[1] && typeof arguments[1] == "object") {
options = Object.assign(options, arguments[1]);
}
try {
options.files = await chooseImage(options);
options.onSelectComplete && options.onSelectComplete(options.files);
} catch (err) {
this.requestError && this.requestError(err);
return Promise.reject(err);
}
if (options.files) {
return this.urlFileUpload(options);
}
}
//本地服务器上传视频
async urlVideoUpload() {
let options = {};
if (arguments[0]) {
if (typeof arguments[0] == "string") {
options.url = arguments[0];
} else if (typeof arguments[0] == "object") {
options = Object.assign(options, arguments[0]);
}
}
if (arguments[1] && typeof arguments[1] == "object") {
options = Object.assign(options, arguments[1]);
}
try {
options.files = await chooseVideo(options);
options.onSelectComplete && options.onSelectComplete(options.files);
} catch (err) {
this.requestError && this.requestError(err);
return Promise.reject(err);
}
if (options.files) {
return this.urlFileUpload(options);
}
}
//本地服务器文件上传方法
async urlFileUpload() {
let requestInfo = {
method: "FILE"
};
if (arguments[0]) {
if (typeof arguments[0] == "string") {
requestInfo.url = arguments[0];
} else if (typeof arguments[0] == "object") {
requestInfo = Object.assign(requestInfo, arguments[0]);
}
}
if (arguments[1] && typeof arguments[1] == "object") {
requestInfo = Object.assign(requestInfo, arguments[1]);
}
if (!requestInfo.url && this.defaultUploadUrl) {
requestInfo.url = this.defaultUploadUrl;
}
let runRequestStart = false;
try {
if (!requestInfo.url) {
throw {
errMsg: "【request】文件上传缺失数据url",
statusCode: 0,
data: requestInfo.data,
method: requestInfo.method,
header: requestInfo.header,
url: requestInfo.url
};
}
requestInfo = mergeConfig$2(this, requestInfo);
runRequestStart = true;
if (this.requestStart) {
let requestStart = this.requestStart(requestInfo);
if (typeof requestStart == "object") {
let changekeys = ["data", "header", "isPrompt", "load", "isFactory", "files"];
changekeys.forEach((key) => {
requestInfo[key] = requestStart[key];
});
} else {
throw {
errMsg: "【request】请求开始拦截器未通过",
statusCode: 0,
data: requestInfo.data,
method: requestInfo.method,
header: requestInfo.header,
url: requestInfo.url
};
}
}
let requestResult = await urlUpload(requestInfo, this.dataFactory);
return Promise.resolve(requestResult);
} catch (err) {
this.requestError && this.requestError(err);
return Promise.reject(err);
} finally {
if (runRequestStart) {
this.requestEnd && this.requestEnd(requestInfo);
}
}
}
}
const testUrl = "https://wanbei.monvkeji.cn/";
const defaultConfig = {
// 系统名称
name: "签约",
apiUrl: testUrl
};
const mergeConfig$1 = Object.assign({}, defaultConfig);
const config = {
// 获取全部配置
all() {
return mergeConfig$1;
},
// 获取指定配置
get(key, def = void 0) {
if (mergeConfig$1.hasOwnProperty(key)) {
return mergeConfig$1[key];
}
formatAppLog("error", "at core/config/index.js:21", `检测到不存在的配置项: ${key}`);
return def;
},
getResource(imgName) {
return `${mergeConfig$1.apiUrl}images/${imgName}`;
}
};
const apiUrl = config.get("apiUrl");
const $http = new fileUpload({
// 接口请求地址
baseUrl: apiUrl,
// 服务器本地上传文件地址
fileUrl: apiUrl,
// 服务器上传图片默认url
defaultUploadUrl: "upload/image",
// 设置请求头(如果使用报错跨域问题,可能是content-type请求类型和后台那边设置的不一致)
header: {
"content-type": "application/json;charset=utf-8"
},
// 请求超时时间, 单位ms(默认15000)
timeout: 15e3,
// 默认配置(可不写)
config: {
// 是否自动提示错误
isPrompt: true,
// 是否显示加载动画
load: true,
// 是否使用数据工厂
isFactory: true
}
});
let requestNum = 0;
$http.requestStart = (options) => {
if (options.load) {
if (requestNum <= 0) {
uni.showLoading({
title: "加载中",
mask: true
});
}
requestNum += 1;
}
if (options.method == "FILE" && options.maxSize) {
const maxSize = options.maxSize;
for (let item of options.files) {
if (item.size > maxSize) {
setTimeout(() => {
uni.showToast({
title: "图片过大,请重新上传",
icon: "none"
});
});
return false;
}
}
}
options.header["api-name"] = store$1.getters.platform;
options.header["token"] = store$1.getters.token;
return options;
};
$http.requestEnd = (options) => {
if (options.load) {
if (requestNum > 0) {
uni.hideLoading();
}
}
};
$http.dataFactory = async (res) => {
requestNum -= 1;
if (requestNum <= 0) {
uni.hideLoading();
}
const httpData = res.response;
if (httpData.code === 0) {
uni.showToast({
title: httpData.msg,
icon: "none",
duration: 2500
});
return false;
} else if (httpData.code == 401) {
store$1.dispatch("Logout");
uni.showToast({
title: "登录状态错误或已失效",
icon: "none",
duration: 2500
});
return false;
} else if (httpData.code === 200) {
return Promise.resolve(httpData);
} else {
uni.showToast({
title: "服务端错误",
icon: "none",
duration: 2500
});
return false;
}
};
$http.requestError = (e) => {
if (e.statusCode === 0) {
throw e;
} else {
setTimeout(() => showRequestError(e), 10);
}
};
const showRequestError = (e) => {
let errMsg = `网络请求出错:${e.errMsg}`;
if (e.errMsg === "request:fail") {
errMsg = "网络请求错误,请检查您的网络是否正常!";
}
uni.showToast({
title: errMsg,
icon: "none",
duration: 3500
});
};
const api = {
userLoginWX: "api/login/login",
userLloginApp: "api/login/loginApp",
userLoginH5: "api/login/loginH5",
doSmsSend: "api/sms/send",
checkSms: "api/sms/checkSms",
resetPassword: "api/login/resetPassword"
};
function userLoginWX(data) {
return $http.post(api.userLoginWX, data);
}
function userLloginApp(data) {
return $http.post(api.userLloginApp, data);
}
function userLoginH5(data) {
return $http.post(api.userLoginH5, data);
}
const urlEncode = (obj = {}) => {
const result = [];
for (const key in obj) {
const item = obj[key];
if (!item) {
continue;
}
if (isArray$1(item)) {
item.forEach((val) => {
result.push(key + "=" + val);
});
} else {
result.push(key + "=" + item);
}
}
return result.join("&");
};
const inArray = (search, array2) => {
for (var i in array2) {
if (array2[i] == search)
return true;
}
return false;
};
const isArray$1 = (array2) => {
return Object.prototype.toString.call(array2) === "[object Array]";
};
const getTabBarLinks = () => {
const tabBarLinks = [
"pages/home/index",
"pages/camp/index",
"pages/games/index",
"pages/user/index"
];
return tabBarLinks;
};
const navTo = (url2, query = {}, modo = "navigateTo") => {
if (!url2 || url2.length == 0) {
return false;
}
if (inArray(url2, getTabBarLinks())) {
uni.switchTab({
url: `/${url2}`
});
return true;
}
const queryStr = query ? "?" + urlEncode(query) : "";
modo === "navigateTo" && uni.navigateTo({
url: `/${url2}${queryStr}`
});
modo === "redirectTo" && uni.redirectTo({
url: `/${url2}${queryStr}`
});
return true;
};
const loginSuccess = (commit, {
token,
id,
userInfo
}) => {
const expiryTime = 30 * 86400 * 3;
storage.set(USER_ID, id, expiryTime);
storage.set(ACCESS_TOKEN, token, expiryTime);
commit("SET_TOKEN", token);
commit("SET_USER_ID", id);
commit("SET_USER_INFO", userInfo);
};
const user = {
state: {
// 用户认证token
token: uni.getStorageSync(ACCESS_TOKEN),
// 用户ID
userId: uni.getStorageSync(USER_ID),
userInfo: uni.getStorageSync(USER_INFO),
parent_id: null
},
mutations: {
SET_TOKEN: (state, value2) => {
state.token = value2;
},
SET_USER_ID: (state, value2) => {
state.userId = value2;
},
SET_USER_INFO: (state, value2) => {
state.userInfo = value2;
},
M_PARENT_ID: (state, value2) => {
state.parent_id = value2;
}
},
actions: {
// 用户登录(普通登录: 输入手机号和验证码)
async LoginWX({
commit
}, data) {
const result = await userLoginWX(data);
if (result) {
if (result.data.token) {
loginSuccess(commit, {
token: result.data.token,
id: result.data.id,
userInfo: {}
});
return Promise.resolve(result);
} else {
return Promise.resolve(result);
}
}
},
// 用户登录(普通登录: 输入手机号和验证码)
async LoginApp({
commit
}, data) {
const result = await userLloginApp(data);
if (result) {
loginSuccess(commit, {
token: result.data.token,
id: result.data.id
});
return Promise.resolve(result);
} else {
return Promise.resolve(result);
}
},
// H5登陆
async LoginH5({
commit
}, data) {
const result = await userLoginH5(data);
if (result) {
if (result.data.token) {
loginSuccess(commit, {
token: result.data.token,
id: result.data.id
});
return Promise.resolve(result);
} else {
return Promise.resolve(result);
}
}
},
// 退出登录
async Logout({
commit
}, data) {
const store2 = this;
if (store2.getters.userId > 0) {
storage.remove(USER_ID);
storage.remove(ACCESS_TOKEN);
storage.remove(USER_INFO);
commit("SET_TOKEN", "");
commit("SET_USER_ID", null);
commit("SET_USER_INFO", null);
navTo("pages/home/index", {});
return Promise.resolve({
result: true
});
}
}
}
};
const cate = {
state: {
// 当前终端平台
cate_history: uni.getStorageSync("cate_history") ? uni.getStorageSync("cate_history") : []
},
mutations: {
SET_CATE_HISTORY: (state, value2) => {
state.cate_history = value2;
uni.setStorageSync("cate_history", state.cate_history);
}
},
actions: {}
};
const getters = {
token: (state) => state.user.token,
userId: (state) => state.user.userId,
platform: (state) => state.app.platform,
userInfo: (state) => state.user.userInfo
};
const store = createStore({
modules: {
app,
user,
cate
},
getters
});
const store$1 = store;
const { toString } = Object.prototype;
function isArray(val) {
return toString.call(val) === "[object Array]";
}
function isObject(val) {
return val !== null && typeof val === "object";
}
function isDate(val) {
return toString.call(val) === "[object Date]";
}
function isURLSearchParams(val) {
return typeof URLSearchParams !== "undefined" && val instanceof URLSearchParams;
}
function forEach(obj, fn) {
if (obj === null || typeof obj === "undefined") {
return;
}
if (typeof obj !== "object") {
obj = [obj];
}
if (isArray(obj)) {
for (let i = 0, l = obj.length; i < l; i++) {
fn.call(null, obj[i], i, obj);
}
} else {
for (const key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
fn.call(null, obj[key], key, obj);
}
}
}
}
function isPlainObject(obj) {
return Object.prototype.toString.call(obj) === "[object Object]";
}
function deepMerge() {
const result = {};
function assignValue(val, key) {
if (typeof result[key] === "object" && typeof val === "object") {
result[key] = deepMerge(result[key], val);
} else if (typeof val === "object") {
result[key] = deepMerge({}, val);
} else {
result[key] = val;
}
}
for (let i = 0, l = arguments.length; i < l; i++) {
forEach(arguments[i], assignValue);
}
return result;
}
function isUndefined(val) {
return typeof val === "undefined";
}
function encode(val) {
return encodeURIComponent(val).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]");
}
function buildURL(url2, params) {
if (!params) {
return url2;
}
let serializedParams;
if (isURLSearchParams(params)) {
serializedParams = params.toString();
} else {
const parts = [];
forEach(params, (val, key) => {
if (val === null || typeof val === "undefined") {
return;
}
if (isArray(val)) {
key = `${key}[]`;
} else {
val = [val];
}
forEach(val, (v) => {
if (isDate(v)) {
v = v.toISOString();
} else if (isObject(v)) {
v = JSON.stringify(v);
}
parts.push(`${encode(key)}=${encode(v)}`);
});
});
serializedParams = parts.join("&");
}
if (serializedParams) {
const hashmarkIndex = url2.indexOf("#");
if (hashmarkIndex !== -1) {
url2 = url2.slice(0, hashmarkIndex);
}
url2 += (url2.indexOf("?") === -1 ? "?" : "&") + serializedParams;
}
return url2;
}
function isAbsoluteURL(url2) {
return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url2);
}
function combineURLs(baseURL, relativeURL) {
return relativeURL ? `${baseURL.replace(/\/+$/, "")}/${relativeURL.replace(/^\/+/, "")}` : baseURL;
}
function buildFullPath(baseURL, requestedURL) {
if (baseURL && !isAbsoluteURL(requestedURL)) {
return combineURLs(baseURL, requestedURL);
}
return requestedURL;
}
function settle(resolve, reject, response) {
const { validateStatus } = response.config;
const status = response.statusCode;
if (status && (!validateStatus || validateStatus(status))) {
resolve(response);
} else {
reject(response);
}
}
const mergeKeys$1 = (keys, config2) => {
const config3 = {};
keys.forEach((prop) => {
if (!isUndefined(config2[prop])) {
config3[prop] = config2[prop];
}
});
return config3;
};
const adapter = (config2) => new Promise((resolve, reject) => {
const fullPath = buildURL(buildFullPath(config2.baseURL, config2.url), config2.params);
const _config = {
url: fullPath,
header: config2.header,
complete: (response) => {
config2.fullPath = fullPath;
response.config = config2;
try {
if (typeof response.data === "string") {
response.data = JSON.parse(response.data);
}
} catch (e) {
}
settle(resolve, reject, response);
}
};
let requestTask;
if (config2.method === "UPLOAD") {
delete _config.header["content-type"];
delete _config.header["Content-Type"];
const otherConfig = {
filePath: config2.filePath,
name: config2.name
};
const optionalKeys = [
"files",
"timeout",
"formData"
];
requestTask = uni.uploadFile({ ..._config, ...otherConfig, ...mergeKeys$1(optionalKeys, config2) });
} else if (config2.method === "DOWNLOAD") {
if (!isUndefined(config2.timeout)) {
_config.timeout = config2.timeout;
}
requestTask = uni.downloadFile(_config);
} else {
const optionalKeys = [
"data",
"method",
"timeout",
"dataType",
"responseType",
"sslVerify",
"firstIpv4"
];
requestTask = uni.request({ ..._config, ...mergeKeys$1(optionalKeys, config2) });
}
if (config2.getTask) {
config2.getTask(requestTask, config2);
}
});
const dispatchRequest = (config2) => adapter(config2);
function InterceptorManager() {
this.handlers = [];
}
InterceptorManager.prototype.use = function use(fulfilled, rejected) {
this.handlers.push({
fulfilled,
rejected
});
return this.handlers.length - 1;
};
InterceptorManager.prototype.eject = function eject(id) {
if (this.handlers[id]) {
this.handlers[id] = null;
}
};
InterceptorManager.prototype.forEach = function forEach2(fn) {
this.handlers.forEach((h) => {
if (h !== null) {
fn(h);
}
});
};
const mergeKeys = (keys, globalsConfig, config2) => {
const config3 = {};
keys.forEach((prop) => {
if (!isUndefined(config2[prop])) {
config3[prop] = config2[prop];
} else if (!isUndefined(globalsConfig[prop])) {
config3[prop] = globalsConfig[prop];
}
});
return config3;
};
const mergeConfig = (globalsConfig, config2 = {}) => {
const method = config2.method || globalsConfig.method || "GET";
let config3 = {
baseURL: globalsConfig.baseURL || "",
method,
url: config2.url || "",
params: config2.params || {},
custom: { ...globalsConfig.custom || {}, ...config2.custom || {} },
header: deepMerge(globalsConfig.header || {}, config2.header || {})
};
const defaultToConfig2Keys = ["getTask", "validateStatus"];
config3 = { ...config3, ...mergeKeys(defaultToConfig2Keys, globalsConfig, config2) };
if (method === "DOWNLOAD") {
if (!isUndefined(config2.timeout)) {
config3.timeout = config2.timeout;
} else if (!isUndefined(globalsConfig.timeout)) {
config3.timeout = globalsConfig.timeout;
}
} else if (method === "UPLOAD") {
delete config3.header["content-type"];
delete config3.header["Content-Type"];
const uploadKeys = [
"files",
"filePath",
"name",
"timeout",
"formData"
];
uploadKeys.forEach((prop) => {
if (!isUndefined(config2[prop])) {
config3[prop] = config2[prop];
}
});
if (isUndefined(config3.timeout) && !isUndefined(globalsConfig.timeout)) {
config3.timeout = globalsConfig.timeout;
}
} else {
const defaultsKeys = [
"data",
"timeout",
"dataType",
"responseType",
"sslVerify",
"firstIpv4"
];
config3 = { ...config3, ...mergeKeys(defaultsKeys, globalsConfig, config2) };
}
return config3;
};
const defaults = {
baseURL: "",
header: {},
method: "GET",
dataType: "json",
responseType: "text",
custom: {},
timeout: 6e4,
sslVerify: true,
firstIpv4: false,
validateStatus: function validateStatus(status) {
return status >= 200 && status < 300;
}
};
var clone = function() {
function _instanceof(obj, type) {
return type != null && obj instanceof type;
}
var nativeMap;
try {
nativeMap = Map;
} catch (_) {
nativeMap = function() {
};
}
var nativeSet;
try {
nativeSet = Set;
} catch (_) {
nativeSet = function() {
};
}
var nativePromise;
try {
nativePromise = Promise;
} catch (_) {
nativePromise = function() {
};
}
function clone2(parent, circular, depth, prototype, includeNonEnumerable) {
if (typeof circular === "object") {
depth = circular.depth;
prototype = circular.prototype;
includeNonEnumerable = circular.includeNonEnumerable;
circular = circular.circular;
}
var allParents = [];
var allChildren = [];
var useBuffer = typeof Buffer != "undefined";
if (typeof circular == "undefined")
circular = true;
if (typeof depth == "undefined")
depth = Infinity;
function _clone(parent2, depth2) {
if (parent2 === null)
return null;
if (depth2 === 0)
return parent2;
var child;
var proto;
if (typeof parent2 != "object") {
return parent2;
}
if (_instanceof(parent2, nativeMap)) {
child = new nativeMap();
} else if (_instanceof(parent2, nativeSet)) {
child = new nativeSet();
} else if (_instanceof(parent2, nativePromise)) {
child = new nativePromise(function(resolve, reject) {
parent2.then(function(value2) {
resolve(_clone(value2, depth2 - 1));
}, function(err) {
reject(_clone(err, depth2 - 1));
});
});
} else if (clone2.__isArray(parent2)) {
child = [];
} else if (clone2.__isRegExp(parent2)) {
child = new RegExp(parent2.source, __getRegExpFlags(parent2));
if (parent2.lastIndex)
child.lastIndex = parent2.lastIndex;
} else if (clone2.__isDate(parent2)) {
child = new Date(parent2.getTime());
} else if (useBuffer && Buffer.isBuffer(parent2)) {
if (Buffer.from) {
child = Buffer.from(parent2);
} else {
child = new Buffer(parent2.length);
parent2.copy(child);
}
return child;
} else if (_instanceof(parent2, Error)) {
child = Object.create(parent2);
} else {
if (typeof prototype == "undefined") {
proto = Object.getPrototypeOf(parent2);
child = Object.create(proto);
} else {
child = Object.create(prototype);
proto = prototype;
}
}
if (circular) {
var index2 = allParents.indexOf(parent2);
if (index2 != -1) {
return allChildren[index2];
}
allParents.push(parent2);
allChildren.push(child);
}
if (_instanceof(parent2, nativeMap)) {
parent2.forEach(function(value2, key) {
var keyChild = _clone(key, depth2 - 1);
var valueChild = _clone(value2, depth2 - 1);
child.set(keyChild, valueChild);
});
}
if (_instanceof(parent2, nativeSet)) {
parent2.forEach(function(value2) {
var entryChild = _clone(value2, depth2 - 1);
child.add(entryChild);
});
}
for (var i in parent2) {
var attrs = Object.getOwnPropertyDescriptor(parent2, i);
if (attrs) {
child[i] = _clone(parent2[i], depth2 - 1);
}
try {
var objProperty = Object.getOwnPropertyDescriptor(parent2, i);
if (objProperty.set === "undefined") {
continue;
}
child[i] = _clone(parent2[i], depth2 - 1);
} catch (e) {
if (e instanceof TypeError) {
continue;
} else if (e instanceof ReferenceError) {
continue;
}
}
}
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(parent2);
for (var i = 0; i < symbols.length; i++) {
var symbol = symbols[i];
var descriptor = Object.getOwnPropertyDescriptor(parent2, symbol);
if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {
continue;
}
child[symbol] = _clone(parent2[symbol], depth2 - 1);
Object.defineProperty(child, symbol, descriptor);
}
}
if (includeNonEnumerable) {
var allPropertyNames = Object.getOwnPropertyNames(parent2);
for (var i = 0; i < allPropertyNames.length; i++) {
var propertyName = allPropertyNames[i];
var descriptor = Object.getOwnPropertyDescriptor(parent2, propertyName);
if (descriptor && descriptor.enumerable) {
continue;
}
child[propertyName] = _clone(parent2[propertyName], depth2 - 1);
Object.defineProperty(child, propertyName, descriptor);
}
}
return child;
}
return _clone(parent, depth);
}
clone2.clonePrototype = function clonePrototype(parent) {
if (parent === null)
return null;
var c = function() {
};
c.prototype = parent;
return new c();
};
function __objToStr(o) {
return Object.prototype.toString.call(o);
}
clone2.__objToStr = __objToStr;
function __isDate(o) {
return typeof o === "object" && __objToStr(o) === "[object Date]";
}
clone2.__isDate = __isDate;
function __isArray(o) {
return typeof o === "object" && __objToStr(o) === "[object Array]";
}
clone2.__isArray = __isArray;
function __isRegExp(o) {
return typeof o === "object" && __objToStr(o) === "[object RegExp]";
}
clone2.__isRegExp = __isRegExp;
function __getRegExpFlags(re) {
var flags = "";
if (re.global)
flags += "g";
if (re.ignoreCase)
flags += "i";
if (re.multiline)
flags += "m";
return flags;
}
clone2.__getRegExpFlags = __getRegExpFlags;
return clone2;
}();
class Request {
/**
* @param {Object} arg - 全局配置
* @param {String} arg.baseURL - 全局根路径
* @param {Object} arg.header - 全局header
* @param {String} arg.method = [GET|POST|PUT|DELETE|CONNECT|HEAD|OPTIONS|TRACE] - 全局默认请求方式
* @param {String} arg.dataType = [json] - 全局默认的dataType
* @param {String} arg.responseType = [text|arraybuffer] - 全局默认的responseType。支付宝小程序不支持
* @param {Object} arg.custom - 全局默认的自定义参数
* @param {Number} arg.timeout - 全局默认的超时时间,单位 ms。默认60000。H5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+)、微信小程序(2.10.0)、支付宝小程序
* @param {Boolean} arg.sslVerify - 全局默认的是否验证 ssl 证书。默认true.仅App安卓端支持(HBuilderX 2.3.3+)
* @param {Boolean} arg.withCredentials - 全局默认的跨域请求时是否携带凭证(cookies)。默认false。仅H5支持(HBuilderX 2.6.15+)
* @param {Boolean} arg.firstIpv4 - 全DNS解析时优先使用ipv4。默认false。仅 App-Android 支持 (HBuilderX 2.8.0+)
* @param {Function(statusCode):Boolean} arg.validateStatus - 全局默认的自定义验证器。默认statusCode >= 200 && statusCode < 300
*/
constructor(arg = {}) {
if (!isPlainObject(arg)) {
arg = {};
formatAppLog("warn", "at uni_modules/uview-plus/libs/luch-request/core/Request.js:39", "设置全局参数必须接收一个Object");
}
this.config = clone({ ...defaults, ...arg });
this.interceptors = {
request: new InterceptorManager(),
response: new InterceptorManager()
};
}
/**
* @Function
* @param {Request~setConfigCallback} f - 设置全局默认配置
*/
setConfig(f) {
this.config = f(this.config);
}
middleware(config2) {
config2 = mergeConfig(this.config, config2);
const chain = [dispatchRequest, void 0];
let promise2 = Promise.resolve(config2);
this.interceptors.request.forEach((interceptor) => {
chain.unshift(interceptor.fulfilled, interceptor.rejected);
});
this.interceptors.response.forEach((interceptor) => {
chain.push(interceptor.fulfilled, interceptor.rejected);
});
while (chain.length) {
promise2 = promise2.then(chain.shift(), chain.shift());
}
return promise2;
}
/**
* @Function
* @param {Object} config - 请求配置项
* @prop {String} options.url - 请求路径
* @prop {Object} options.data - 请求参数
* @prop {Object} [options.responseType = config.responseType] [text|arraybuffer] - 响应的数据类型
* @prop {Object} [options.dataType = config.dataType] - 如果设为 json,会尝试对返回的数据做一次 JSON.parse
* @prop {Object} [options.header = config.header] - 请求header
* @prop {Object} [options.method = config.method] - 请求方法
* @returns {Promise}
*/
request(config2 = {}) {
return this.middleware(config2);
}
get(url2, options = {}) {
return this.middleware({
url: url2,
method: "GET",
...options
});
}
post(url2, data, options = {}) {
return this.middleware({
url: url2,
data,
method: "POST",
...options
});
}
put(url2, data, options = {}) {
return this.middleware({
url: url2,
data,
method: "PUT",
...options
});
}
delete(url2, data, options = {}) {
return this.middleware({
url: url2,
data,
method: "DELETE",
...options
});
}
options(url2, data, options = {}) {
return this.middleware({
url: url2,
data,
method: "OPTIONS",
...options
});
}
upload(url2, config2 = {}) {
config2.url = url2;
config2.method = "UPLOAD";
return this.middleware(config2);
}
download(url2, config2 = {}) {
config2.url = url2;
config2.method = "DOWNLOAD";
return this.middleware(config2);
}
}
function colorGradient(startColor = "rgb(0, 0, 0)", endColor = "rgb(255, 255, 255)", step = 10) {
const startRGB = hexToRgb(startColor, false);
const startR = startRGB[0];
const startG = startRGB[1];
const startB = startRGB[2];
const endRGB = hexToRgb(endColor, false);
const endR = endRGB[0];
const endG = endRGB[1];
const endB = endRGB[2];
const sR = (endR - startR) / step;
const sG = (endG - startG) / step;
const sB = (endB - startB) / step;
const colorArr = [];
for (let i = 0; i < step; i++) {
let hex = rgbToHex(`rgb(${Math.round(sR * i + startR)},${Math.round(sG * i + startG)},${Math.round(sB * i + startB)})`);
if (i === 0)
hex = rgbToHex(startColor);
if (i === step - 1)
hex = rgbToHex(endColor);
colorArr.push(hex);
}
return colorArr;
}
function hexToRgb(sColor, str = true) {
const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
sColor = String(sColor).toLowerCase();
if (sColor && reg.test(sColor)) {
if (sColor.length === 4) {
let sColorNew = "#";
for (let i = 1; i < 4; i += 1) {
sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
}
sColor = sColorNew;
}
const sColorChange = [];
for (let i = 1; i < 7; i += 2) {
sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`));
}
if (!str) {
return sColorChange;
}
return `rgb(${sColorChange[0]},${sColorChange[1]},${sColorChange[2]})`;
}
if (/^(rgb|RGB)/.test(sColor)) {
const arr = sColor.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
return arr.map((val) => Number(val));
}
return sColor;
}
function rgbToHex(rgb) {
const _this = rgb;
const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
if (/^(rgb|RGB)/.test(_this)) {
const aColor = _this.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
let strHex = "#";
for (let i = 0; i < aColor.length; i++) {
let hex = Number(aColor[i]).toString(16);
hex = String(hex).length == 1 ? `${0}${hex}` : hex;
if (hex === "0") {
hex += hex;
}
strHex += hex;
}
if (strHex.length !== 7) {
strHex = _this;
}
return strHex;
}
if (reg.test(_this)) {
const aNum = _this.replace(/#/, "").split("");
if (aNum.length === 6) {
return _this;
}
if (aNum.length === 3) {
let numHex = "#";
for (let i = 0; i < aNum.length; i += 1) {
numHex += aNum[i] + aNum[i];
}
return numHex;
}
} else {
return _this;
}
}
function colorToRgba(color2, alpha) {
color2 = rgbToHex(color2);
const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
let sColor = String(color2).toLowerCase();
if (sColor && reg.test(sColor)) {
if (sColor.length === 4) {
let sColorNew = "#";
for (let i = 1; i < 4; i += 1) {
sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
}
sColor = sColorNew;
}
const sColorChange = [];
for (let i = 1; i < 7; i += 2) {
sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`));
}
return `rgba(${sColorChange.join(",")},${alpha})`;
}
return sColor;
}
const colorGradient$1 = {
colorGradient,
hexToRgb,
rgbToHex,
colorToRgba
};
let timeout = null;
function debounce(func2, wait = 500, immediate = false) {
if (timeout !== null)
clearTimeout(timeout);
if (immediate) {
const callNow = !timeout;
timeout = setTimeout(() => {
timeout = null;
}, wait);
if (callNow)
typeof func2 === "function" && func2();
} else {
timeout = setTimeout(() => {
typeof func2 === "function" && func2();
}, wait);
}
}
let flag;
function throttle(func2, wait = 500, immediate = true) {
if (immediate) {
if (!flag) {
flag = true;
typeof func2 === "function" && func2();
setTimeout(() => {
flag = false;
}, wait);
}
} else if (!flag) {
flag = true;
setTimeout(() => {
flag = false;
typeof func2 === "function" && func2();
}, wait);
}
}
const zIndex = {
toast: 10090,
noNetwork: 10080,
// popup包含popup,actionsheet,keyboard,picker的值
popup: 10075,
mask: 10070,
navbar: 980,
topTips: 975,
sticky: 970,
indexListSticky: 965
};
let platform = "none";
platform = "vue3";
platform = "plus";
const platform$1 = platform;
const http = new Request();
let themeType = ["primary", "success", "error", "warning", "info"];
function setConfig(configs) {
index.shallowMerge(config$1, configs.config || {});
index.shallowMerge(props$c, configs.props || {});
index.shallowMerge(color, configs.color || {});
index.shallowMerge(zIndex, configs.zIndex || {});
}
index.setConfig = setConfig;
const $u = {
route,
date: index.timeFormat,
// 另名date
colorGradient: colorGradient$1.colorGradient,
hexToRgb: colorGradient$1.hexToRgb,
rgbToHex: colorGradient$1.rgbToHex,
colorToRgba: colorGradient$1.colorToRgba,
test,
type: themeType,
http,
config: config$1,
// uview-plus配置信息相关,比如版本号
zIndex,
debounce,
throttle,
mixin: mixin$1,
mpMixin,
props: props$c,
...index,
color,
platform: platform$1
};
uni.$u = $u;
const install = (Vue2) => {
Vue2.config.globalProperties.$u = $u;
Vue2.mixin(mixin$1);
};
const uviewPlus = {
install
};
function Initializer() {
store$1.commit("SET_PLATFORM", platfrom);
store$1.commit("SET_TOKEN", storage.get(ACCESS_TOKEN));
store$1.commit("SET_USER_ID", storage.get(USER_ID));
}
const share = {
data() {
return {
share: {
// 转发的标题 (默认标题)
title: config.get("name"),
// 默认是当前页面,必须是以‘/’开头的完整路径
path: `/pages/home/index`,
//自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径,
//支持PNG及JPG,不传入 imageUrl 则使用默认截图。显示图片长宽比是 5:4
imageUrl: config.getResource("logo.png")
}
};
},
// 发送给朋友
onShareAppMessage(res) {
let shareInfo = uni.getStorageSync("shareInfo");
return {
title: shareInfo.title || this.share.title,
imageUrl: shareInfo.imgUrl || this.share.imageUrl,
path: shareInfo.path || this.share.path
};
},
//分享到朋友圈
onShareTimeline(res) {
let shareInfo = uni.getStorageSync("shareInfo");
return {
title: shareInfo.title || this.share.title,
imageUrl: shareInfo.imgUrl || this.share.imageUrl,
path: shareInfo.path || this.share.path
};
}
};
const mixin = {
data() {
return {
platform: platfrom
};
},
computed: {}
};
function createApp() {
const app2 = vue.createVueApp(App);
app2.use(uviewPlus).use(store$1);
app2.config.productionTip = false;
app2.mixin(share).mixin(mixin);
return {
app: app2,
created: Initializer
};
}
const { app: __app__, Vuex: __Vuex__, Pinia: __Pinia__ } = createApp();
uni.Vuex = __Vuex__;
uni.Pinia = __Pinia__;
__app__.provide("__globalStyles", __uniConfig.styles);
__app__._component.mpType = "app";
__app__._component.render = () => {
};
__app__.mount("#app");
})(Vue);